From 0c2af85ac0b63fa9e116758fbcc9dffcc0909583 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 8 Mar 2019 14:30:43 -0600 Subject: [PATCH 001/935] Update to 1.13.2 Still need to setup method of launching, and Mixin support for ModLauncher --- build.gradle | 42 ++++-- src/api/java/baritone/api/Settings.java | 2 +- .../event/listener/IGameEventListener.java | 18 +-- .../baritone/api/utils/IPlayerContext.java | 6 +- .../baritone/api/utils/RayTraceUtils.java | 5 +- .../baritone/api/utils/RotationUtils.java | 14 +- .../java/baritone/api/utils/SettingsUtil.java | 8 +- src/api/java/baritone/api/utils/VecUtils.java | 10 +- .../java/baritone/api/utils/input/Input.java | 4 +- .../java/baritone/launch/BaritoneTweaker.java | 1 + .../mixins/MixinChunkRenderContainer.java | 7 +- .../launch/mixins/MixinChunkRenderWorker.java | 2 +- .../launch/mixins/MixinEntityLivingBase.java | 6 +- .../launch/mixins/MixinEntityPlayerSP.java | 10 +- ...tyRenderer.java => MixinGameRenderer.java} | 10 +- .../launch/mixins/MixinMinecraft.java | 8 +- .../mixins/MixinNetHandlerPlayClient.java | 31 +++- .../launch/mixins/MixinNetworkManager.java | 6 +- .../launch/mixins/MixinRenderChunk.java | 14 +- .../launch/mixins/MixinRenderList.java | 4 +- .../launch/mixins/MixinVboRenderList.java | 4 +- .../launch/mixins/MixinWorldClient.java | 75 ---------- src/launch/resources/mixins.baritone.json | 5 +- src/main/java/baritone/Baritone.java | 2 +- .../java/baritone/behavior/LookBehavior.java | 3 - src/main/java/baritone/cache/CachedChunk.java | 53 +++++-- src/main/java/baritone/cache/ChunkPacker.java | 21 +-- .../java/baritone/cache/WorldProvider.java | 5 +- .../java/baritone/cache/WorldScanner.java | 12 +- .../java/baritone/event/GameEventHandler.java | 4 +- .../pathing/movement/CalculationContext.java | 2 +- .../baritone/pathing/movement/Movement.java | 8 +- .../pathing/movement/MovementHelper.java | 132 ++++++++++-------- .../movement/movements/MovementDescend.java | 6 +- .../movement/movements/MovementDiagonal.java | 17 +-- .../movement/movements/MovementFall.java | 12 +- .../movement/movements/MovementParkour.java | 7 +- .../movement/movements/MovementPillar.java | 29 ++-- .../movement/movements/MovementTraverse.java | 23 +-- .../baritone/pathing/path/PathExecutor.java | 16 +-- .../java/baritone/process/FollowProcess.java | 2 +- .../baritone/process/GetToBlockProcess.java | 2 +- .../java/baritone/process/MineProcess.java | 7 +- .../java/baritone/utils/BaritoneAutoTest.java | 15 +- .../java/baritone/utils/BlockBreakHelper.java | 2 +- .../java/baritone/utils/BlockPlaceHelper.java | 2 +- .../baritone/utils/BlockStateInterface.java | 2 +- .../utils/ExampleBaritoneControl.java | 10 +- src/main/java/baritone/utils/Helper.java | 6 +- .../baritone/utils/InputOverrideHandler.java | 2 +- .../java/baritone/utils/PathRenderer.java | 56 ++++---- src/main/java/baritone/utils/ToolSet.java | 13 +- .../utils/accessor/IChunkProviderServer.java | 2 - 53 files changed, 405 insertions(+), 360 deletions(-) rename src/launch/java/baritone/launch/mixins/{MixinEntityRenderer.java => MixinGameRenderer.java} (85%) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinWorldClient.java diff --git a/build.gradle b/build.gradle index a03a89631..d116a81d9 100755 --- a/build.gradle +++ b/build.gradle @@ -20,20 +20,15 @@ version '1.2.1' buildscript { repositories { + jcenter() maven { name = 'forge' url = 'http://files.minecraftforge.net/maven' } - maven { - name = 'SpongePowered' - url = 'http://repo.spongepowered.org/maven' - } - jcenter() } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' - classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT' + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true } } @@ -42,8 +37,9 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask apply plugin: 'java' -apply plugin: 'net.minecraftforge.gradle.tweaker-client' -apply plugin: 'org.spongepowered.mixin' +//apply plugin: 'net.minecraftforge.gradle.tweaker-client' +//apply plugin: 'org.spongepowered.mixin' +apply plugin: 'net.minecraftforge.gradle' sourceCompatibility = targetCompatibility = '1.8' compileJava { @@ -52,11 +48,21 @@ compileJava { } sourceSets { + api { + compileClasspath += main.compileClasspath + } + main { + compileClasspath += api.output + } + test { + compileClasspath += api.output + } launch { compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output } } +/* minecraft { version = '1.12.2' mappings = 'stable_39' @@ -66,6 +72,18 @@ minecraft { // The sources jar should use SRG names not MCP to ensure compatibility with all mappings makeObfSourceJar = true } +*/ + +minecraft { + mappings channel: 'snapshot', version: '20190307-1.13.1' + + runs { + client { + workingDirectory project.file('run') + source sourceSets.main + } + } +} repositories { mavenCentral() @@ -82,6 +100,9 @@ repositories { } dependencies { + minecraft 'com.github.ImpactDevelopment:Vanilla:1.13.2' + + runtime launchCompile('net.minecraft:launchwrapper:1.12') runtime launchCompile('com.github.ImpactDevelopment:SimpleTweaker:1.2') runtime launchCompile('org.spongepowered:mixin:0.7.11-SNAPSHOT') { // Mixin includes a lot of dependencies that are too up-to-date @@ -91,13 +112,16 @@ dependencies { exclude module: 'commons-io' exclude module: 'log4j-core' } + testImplementation 'junit:junit:4.12' } +/* mixin { defaultObfuscationEnv searge add sourceSets.launch, 'mixins.baritone.refmap.json' } +*/ javadoc { options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 7b47a2a6f..f49166461 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -647,7 +647,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ - public final Setting> logger = new Setting<>(Minecraft.getMinecraft().ingameGUI.getChatGUI()::printChatMessage); + public final Setting> logger = new Setting<>(Minecraft.getInstance().ingameGUI.getChatGUI()::printChatMessage); /** * The color of the current path diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index dc471e5fb..8d39d6422 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -18,12 +18,12 @@ package baritone.api.event.listener; import baritone.api.event.events.*; -import io.netty.util.concurrent.GenericFutureListener; +import net.minecraft.client.GameSettings; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.GuiGameOver; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.client.settings.GameSettings; import net.minecraft.entity.Entity; import net.minecraft.network.Packet; @@ -45,7 +45,7 @@ public interface IGameEventListener { * Run once per game tick from before and after the player rotation is sent to the server. * * @param event The event - * @see EntityPlayerSP#onUpdate() + * @see EntityPlayerSP#tick() */ void onPlayerUpdate(PlayerUpdateEvent event); @@ -66,9 +66,7 @@ public interface IGameEventListener { void onChunkEvent(ChunkEvent event); /** - * Runs once per world render pass. Two passes are made when {@link GameSettings#anaglyph} is on. - *

- * Note: {@link GameSettings#anaglyph} has been removed in Minecraft 1.13 + * Runs once per world render pass. * * @param event The event */ @@ -78,7 +76,7 @@ public interface IGameEventListener { * Runs before and after whenever a new world is loaded * * @param event The event - * @see Minecraft#loadWorld(WorldClient, String) + * @see Minecraft#loadWorld(WorldClient, GuiScreen) */ void onWorldEvent(WorldEvent event); @@ -87,7 +85,6 @@ public interface IGameEventListener { * * @param event The event * @see Packet - * @see GenericFutureListener */ void onSendPacket(PacketEvent event); @@ -96,7 +93,6 @@ public interface IGameEventListener { * * @param event The event * @see Packet - * @see GenericFutureListener */ void onReceivePacket(PacketEvent event); @@ -110,10 +106,10 @@ public interface IGameEventListener { void onPlayerRotationMove(RotationMoveEvent event); /** - * Called whenever the sprint keybind state is checked in {@link EntityPlayerSP#onLivingUpdate} + * Called whenever the sprint keybind state is checked in {@link EntityPlayerSP#livingTick} * * @param event The event - * @see EntityPlayerSP#onLivingUpdate() + * @see EntityPlayerSP#livingTick() */ void onPlayerSprintState(SprintStateEvent event); diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 83040ab52..7abfee802 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -71,7 +71,7 @@ default Rotation playerRotations() { * @return The position of the highlighted block */ default Optional getSelectedBlock() { - if (objectMouseOver() != null && objectMouseOver().typeOfHit == RayTraceResult.Type.BLOCK) { + if (objectMouseOver() != null && objectMouseOver().type == RayTraceResult.Type.BLOCK) { return Optional.of(objectMouseOver().getBlockPos()); } return Optional.empty(); @@ -83,8 +83,8 @@ default Optional getSelectedBlock() { * @return The entity */ default Optional getSelectedEntity() { - if (objectMouseOver() != null && objectMouseOver().typeOfHit == RayTraceResult.Type.ENTITY) { - return Optional.of(objectMouseOver().entityHit); + if (objectMouseOver() != null && objectMouseOver().type == RayTraceResult.Type.ENTITY) { + return Optional.of(objectMouseOver().entity); } return Optional.empty(); } diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 0fd1e4e01..872cadbd9 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -18,6 +18,7 @@ package baritone.api.utils; import net.minecraft.entity.Entity; +import net.minecraft.util.math.RayTraceFluidMode; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; @@ -40,13 +41,13 @@ private RayTraceUtils() {} * @return The calculated raytrace result */ public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance) { - Vec3d start = entity.getPositionEyes(1.0F); + Vec3d start = entity.getEyePosition(1.0F); Vec3d direction = RotationUtils.calcVec3dFromRotation(rotation); Vec3d end = start.add( direction.x * blockReachDistance, direction.y * blockReachDistance, direction.z * blockReachDistance ); - return entity.world.rayTraceBlocks(start, end, false, false, true); + return entity.world.rayTraceBlocks(start, end, RayTraceFluidMode.NEVER, false, true); } } diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 3010d2832..9e810e187 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -23,7 +23,9 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.*; +import net.minecraft.util.math.shapes.VoxelShape; import java.util.Optional; @@ -174,11 +176,11 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, } IBlockState state = entity.world.getBlockState(pos); - AxisAlignedBB aabb = state.getBoundingBox(entity.world, pos); + VoxelShape shape = state.getCollisionShape(entity.world, pos); for (Vec3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { - double xDiff = aabb.minX * sideOffset.x + aabb.maxX * (1 - sideOffset.x); - double yDiff = aabb.minY * sideOffset.y + aabb.maxY * (1 - sideOffset.y); - double zDiff = aabb.minZ * sideOffset.z + aabb.maxZ * (1 - sideOffset.z); + double xDiff = shape.getStart(EnumFacing.Axis.X) * sideOffset.x + shape.getEnd(EnumFacing.Axis.X) * (1 - sideOffset.x); + double yDiff = shape.getStart(EnumFacing.Axis.Y) * sideOffset.y + shape.getEnd(EnumFacing.Axis.Y) * (1 - sideOffset.y); + double zDiff = shape.getStart(EnumFacing.Axis.Z) * sideOffset.z + shape.getEnd(EnumFacing.Axis.Z) * (1 - sideOffset.z); possibleRotation = reachableOffset(entity, pos, new Vec3d(pos).add(xDiff, yDiff, zDiff), blockReachDistance); if (possibleRotation.isPresent()) { return possibleRotation; @@ -199,10 +201,10 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, * @return The optional rotation */ public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3d offsetPos, double blockReachDistance) { - Rotation rotation = calcRotationFromVec3d(entity.getPositionEyes(1.0F), offsetPos, new Rotation(entity.rotationYaw, entity.rotationPitch)); + Rotation rotation = calcRotationFromVec3d(entity.getEyePosition(1.0F), offsetPos, new Rotation(entity.rotationYaw, entity.rotationPitch)); RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance); //System.out.println(result); - if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) { + if (result != null && result.type == RayTraceResult.Type.BLOCK) { if (result.getBlockPos().equals(pos)) { return Optional.of(rotation); } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 84e9af689..73517c405 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -18,8 +18,10 @@ package baritone.api.utils; import baritone.api.Settings; +import net.minecraft.client.Minecraft; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.IRegistry; import java.awt.*; import java.io.BufferedReader; @@ -36,11 +38,9 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static net.minecraft.client.Minecraft.getMinecraft; - public class SettingsUtil { - private static final Path SETTINGS_PATH = getMinecraft().gameDir.toPath().resolve("baritone").resolve("settings.txt"); + private static final Path SETTINGS_PATH = Minecraft.getInstance().gameDir.toPath().resolve("baritone").resolve("settings.txt"); private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?[^ ]+)"); // 2 words separated by spaces private static final Map, SettingsIO> map; @@ -146,7 +146,7 @@ private enum SettingsIO { FLOAT(Float.class, Float::parseFloat), LONG(Long.class, Long::parseLong), - ITEM_LIST(ArrayList.class, str -> Stream.of(str.split(",")).map(Item::getByNameOrId).collect(Collectors.toCollection(ArrayList::new)), list -> ((ArrayList) list).stream().map(Item.REGISTRY::getNameForObject).map(ResourceLocation::toString).collect(Collectors.joining(","))), + ITEM_LIST(ArrayList.class, str -> Stream.of(str.split(",")).map(ResourceLocation::new).map(IRegistry.ITEM::get).collect(Collectors.toCollection(ArrayList::new)), list -> ((ArrayList) list).stream().map(IRegistry.ITEM::getKey).map(ResourceLocation::toString).collect(Collectors.joining(","))), COLOR(Color.class, str -> new Color(Integer.parseInt(str.split(",")[0]), Integer.parseInt(str.split(",")[1]), Integer.parseInt(str.split(",")[2])), color -> color.getRed() + "," + color.getGreen() + "," + color.getBlue()); diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index 4c35c05e8..b268c914a 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -20,9 +20,11 @@ import net.minecraft.block.BlockFire; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.World; /** @@ -43,10 +45,10 @@ private VecUtils() {} */ public static Vec3d calculateBlockCenter(World world, BlockPos pos) { IBlockState b = world.getBlockState(pos); - AxisAlignedBB bbox = b.getBoundingBox(world, pos); - double xDiff = (bbox.minX + bbox.maxX) / 2; - double yDiff = (bbox.minY + bbox.maxY) / 2; - double zDiff = (bbox.minZ + bbox.maxZ) / 2; + VoxelShape shape = b.getCollisionShape(world, pos); + double xDiff = (shape.getStart(EnumFacing.Axis.X) + shape.getEnd(EnumFacing.Axis.X)) / 2; + double yDiff = (shape.getStart(EnumFacing.Axis.Y) + shape.getEnd(EnumFacing.Axis.Y)) / 2; + double zDiff = (shape.getStart(EnumFacing.Axis.Z) + shape.getEnd(EnumFacing.Axis.Z)) / 2; if (b.getBlock() instanceof BlockFire) {//look at bottom of fire when putting it out yDiff = 0; } diff --git a/src/api/java/baritone/api/utils/input/Input.java b/src/api/java/baritone/api/utils/input/Input.java index 1e8d44b50..c7143db96 100644 --- a/src/api/java/baritone/api/utils/input/Input.java +++ b/src/api/java/baritone/api/utils/input/Input.java @@ -17,8 +17,8 @@ package baritone.api.utils.input; +import net.minecraft.client.GameSettings; import net.minecraft.client.Minecraft; -import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import java.util.Arrays; @@ -97,7 +97,7 @@ interface that this class implemented. (Helper acted as this interface) I didn't an interface with a game instance field just to not have to do this. */ - this.keyBinding = keyBindingMapper.apply(Minecraft.getMinecraft().gameSettings); + this.keyBinding = keyBindingMapper.apply(Minecraft.getInstance().gameSettings); } /** diff --git a/src/launch/java/baritone/launch/BaritoneTweaker.java b/src/launch/java/baritone/launch/BaritoneTweaker.java index b9db9b6a5..8201d60fd 100644 --- a/src/launch/java/baritone/launch/BaritoneTweaker.java +++ b/src/launch/java/baritone/launch/BaritoneTweaker.java @@ -31,6 +31,7 @@ * @author Brady * @since 7/31/2018 */ +@Deprecated public class BaritoneTweaker extends SimpleTweaker { @Override diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java b/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java index 0fc814874..1548057d8 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java @@ -29,6 +29,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import static org.lwjgl.opengl.GL11.*; +import static org.lwjgl.opengl.GL14.*; @Mixin(ChunkRenderContainer.class) public class MixinChunkRenderContainer { @@ -41,11 +42,11 @@ public class MixinChunkRenderContainer { ) ) private BlockPos getPosition(RenderChunk renderChunkIn) { - if (Baritone.settings().renderCachedChunks.get() && Minecraft.getMinecraft().getIntegratedServer() == null && Minecraft.getMinecraft().world.getChunk(renderChunkIn.getPosition()).isEmpty()) { - GlStateManager.enableAlpha(); + if (Baritone.settings().renderCachedChunks.get() && Minecraft.getInstance().getIntegratedServer() == null && Minecraft.getInstance().world.getChunk(renderChunkIn.getPosition()).isEmpty()) { + GlStateManager.enableAlphaTest(); GlStateManager.enableBlend(); GL14.glBlendColor(0, 0, 0, Baritone.settings().cachedChunksOpacity.get()); - GlStateManager.tryBlendFuncSeparate(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE, GL_ZERO); + GlStateManager.blendFuncSeparate(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE, GL_ZERO); } return renderChunkIn.getPosition(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java b/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java index 2bd1521c7..4b87260db 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java @@ -43,7 +43,7 @@ public abstract class MixinChunkRenderWorker { ) ) private boolean isChunkExisting(ChunkRenderWorker worker, BlockPos pos, World world) { - if (Baritone.settings().renderCachedChunks.get() && Minecraft.getMinecraft().getIntegratedServer() == null) { + if (Baritone.settings().renderCachedChunks.get() && Minecraft.getInstance().getIntegratedServer() == null) { Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); IPlayerContext ctx = baritone.getPlayerContext(); if (ctx.player() != null && ctx.world() != null && baritone.bsi != null) { diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index 0fd2436c9..c3d3cb1fb 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -23,6 +23,7 @@ import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EntityType; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -44,9 +45,8 @@ public abstract class MixinEntityLivingBase extends Entity { */ private RotationMoveEvent jumpRotationEvent; - public MixinEntityLivingBase(World worldIn, RotationMoveEvent jumpRotationEvent) { - super(worldIn); - this.jumpRotationEvent = jumpRotationEvent; + public MixinEntityLivingBase(EntityType entityTypeIn, World worldIn) { + super(entityTypeIn, worldIn); } @Inject( diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index 7c1225b9b..16ca15b07 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -58,10 +58,10 @@ private void sendChatMessage(String msg, CallbackInfo ci) { } @Inject( - method = "onUpdate", + method = "tick", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/EntityPlayerSP.isRiding()Z", + target = "net/minecraft/client/entity/EntityPlayerSP.isPassenger()Z", shift = At.Shift.BY, by = -3 ) @@ -74,7 +74,7 @@ private void onPreUpdate(CallbackInfo ci) { } @Inject( - method = "onUpdate", + method = "tick", at = @At( value = "INVOKE", target = "net/minecraft/client/entity/EntityPlayerSP.onUpdateWalkingPlayer()V", @@ -90,7 +90,7 @@ private void onPostUpdate(CallbackInfo ci) { } @Redirect( - method = "onLivingUpdate", + method = "livingTick", at = @At( value = "FIELD", target = "net/minecraft/entity/player/PlayerCapabilities.allowFlying:Z" @@ -105,7 +105,7 @@ private boolean isAllowFlying(PlayerCapabilities capabilities) { } @Redirect( - method = "onLivingUpdate", + method = "livingTick", at = @At( value = "INVOKE", target = "net/minecraft/client/settings/KeyBinding.isKeyDown()Z" diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java similarity index 85% rename from src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java rename to src/launch/java/baritone/launch/mixins/MixinGameRenderer.java index dfd01e46e..57de55c7d 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java @@ -20,24 +20,24 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; -import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.GameRenderer; 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.CallbackInfo; -@Mixin(EntityRenderer.class) -public class MixinEntityRenderer { +@Mixin(GameRenderer.class) +public class MixinGameRenderer { @Inject( - method = "renderWorldPass", + method = "updateCameraAndRender(FJ)V", at = @At( value = "INVOKE_STRING", target = "Lnet/minecraft/profiler/Profiler;endStartSection(Ljava/lang/String;)V", args = {"ldc=hand"} ) ) - private void renderWorldPass(int pass, float partialTicks, long finishTimeNano, CallbackInfo ci) { + private void renderWorldPass(float partialTicks, long finishTimeNano, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks)); } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 6ee1a79be..6c065049a 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -97,10 +97,10 @@ private void runTick(CallbackInfo ci) { } @Inject( - method = "loadWorld(Lnet/minecraft/client/multiplayer/WorldClient;Ljava/lang/String;)V", + method = "loadWorld(Lnet/minecraft/client/multiplayer/WorldClient;Lnet/minecraft/client/gui/GuiScreen;)V", at = @At("HEAD") ) - private void preLoadWorld(WorldClient world, String loadingMessage, CallbackInfo ci) { + private void preLoadWorld(WorldClient world, GuiScreen loadingScreen, CallbackInfo ci) { // If we're unloading the world but one doesn't exist, ignore it if (this.world == null && world == null) { return; @@ -117,10 +117,10 @@ private void preLoadWorld(WorldClient world, String loadingMessage, CallbackInfo } @Inject( - method = "loadWorld(Lnet/minecraft/client/multiplayer/WorldClient;Ljava/lang/String;)V", + method = "loadWorld(Lnet/minecraft/client/multiplayer/WorldClient;Lnet/minecraft/client/gui/GuiScreen;)V", at = @At("RETURN") ) - private void postLoadWorld(WorldClient world, String loadingMessage, CallbackInfo ci) { + private void postLoadWorld(WorldClient world, GuiScreen loadingScreen, CallbackInfo ci) { // still fire event for both null, as that means we've just finished exiting a world // mc.world changing is only the primary baritone diff --git a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java index e2cc98427..013c38a13 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java @@ -24,6 +24,7 @@ import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.network.play.server.SPacketChunkData; import net.minecraft.network.play.server.SPacketCombatEvent; +import net.minecraft.network.play.server.SPacketUnloadChunk; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -40,7 +41,7 @@ public class MixinNetHandlerPlayClient { method = "handleChunkData", at = @At( value = "INVOKE", - target = "net/minecraft/world/chunk/Chunk.read(Lnet/minecraft/network/PacketBuffer;IZ)V" + target = "net/minecraft/client/multiplayer/ChunkProviderClient.func_212474_a(IILnet/minecraft/network/PacketBuffer;IZ)Lnet/minecraft/world/chunk/Chunk;" ) ) private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { @@ -77,6 +78,34 @@ private void postHandleChunkData(SPacketChunkData packetIn, CallbackInfo ci) { } } + @Inject( + method = "processChunkUnload", + at = @At("HEAD") + ) + private void preChunkUnload(SPacketUnloadChunk packet, CallbackInfo ci) { + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + ibaritone.getGameEventHandler().onChunkEvent( + new ChunkEvent(EventState.PRE, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) + ); + } + } + } + + @Inject( + method = "processChunkUnload", + at = @At("RETURN") + ) + private void postChunkUnload(SPacketUnloadChunk packet, CallbackInfo ci) { + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + ibaritone.getGameEventHandler().onChunkEvent( + new ChunkEvent(EventState.POST, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) + ); + } + } + } + @Inject( method = "handleCombatEvent", at = @At( diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 577be96dc..895d2df7e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -53,7 +53,7 @@ public class MixinNetworkManager { method = "dispatchPacket", at = @At("HEAD") ) - private void preDispatchPacket(Packet inPacket, final GenericFutureListener>[] futureListeners, CallbackInfo ci) { + private void preDispatchPacket(Packet inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { if (this.direction != EnumPacketDirection.CLIENTBOUND) { return; } @@ -69,7 +69,7 @@ private void preDispatchPacket(Packet inPacket, final GenericFutureListener inPacket, final GenericFutureListener>[] futureListeners, CallbackInfo ci) { + private void postDispatchPacket(Packet inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { if (this.direction != EnumPacketDirection.CLIENTBOUND) { return; } @@ -85,7 +85,7 @@ private void postDispatchPacket(Packet inPacket, final GenericFutureListener< method = "channelRead0", at = @At( value = "INVOKE", - target = "net/minecraft/network/Packet.processPacket(Lnet/minecraft/network/INetHandler;)V" + target = "net/minecraft/network/NetworkManager.processPacket(Lnet/minecraft/network/Packet;Lnet/minecraft/network/INetHandler;)V" ) ) private void preProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java b/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java index 754f523f2..792b7a8fd 100644 --- a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java +++ b/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java @@ -23,8 +23,8 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.renderer.chunk.RenderChunkCache; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.ChunkCache; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -36,6 +36,9 @@ @Mixin(RenderChunk.class) public class MixinRenderChunk { + // TODO: Resolve this issue + // Looks like generateCache will return null if the chunk is empty, so we're probably going to want to hook that method + /* @Redirect( method = "rebuildChunk", at = @At( @@ -47,7 +50,7 @@ private boolean isEmpty(ChunkCache chunkCache) { if (!chunkCache.isEmpty()) { return false; } - if (Baritone.settings().renderCachedChunks.get() && Minecraft.getMinecraft().getIntegratedServer() == null) { + if (Baritone.settings().renderCachedChunks.get() && Minecraft.getInstance().getIntegratedServer() == null) { Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); IPlayerContext ctx = baritone.getPlayerContext(); if (ctx.player() != null && ctx.world() != null && baritone.bsi != null) { @@ -67,16 +70,17 @@ private boolean isEmpty(ChunkCache chunkCache) { return true; } + */ @Redirect( method = "rebuildChunk", at = @At( value = "INVOKE", - target = "net/minecraft/world/ChunkCache.getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/IBlockState;" + target = "net/minecraft/client/renderer/chunk/RenderChunkCache.getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/IBlockState;" ) ) - private IBlockState getBlockState(ChunkCache chunkCache, BlockPos pos) { - if (Baritone.settings().renderCachedChunks.get() && Minecraft.getMinecraft().getIntegratedServer() == null) { + private IBlockState getBlockState(RenderChunkCache chunkCache, BlockPos pos) { + if (Baritone.settings().renderCachedChunks.get() && Minecraft.getInstance().getIntegratedServer() == null) { Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); IPlayerContext ctx = baritone.getPlayerContext(); if (ctx.player() != null && ctx.world() != null && baritone.bsi != null) { diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderList.java b/src/launch/java/baritone/launch/mixins/MixinRenderList.java index e2f0ae902..651760ec1 100644 --- a/src/launch/java/baritone/launch/mixins/MixinRenderList.java +++ b/src/launch/java/baritone/launch/mixins/MixinRenderList.java @@ -38,9 +38,9 @@ public class MixinRenderList { ) ) private void popMatrix() { - if (Baritone.settings().renderCachedChunks.get() && Minecraft.getMinecraft().getIntegratedServer() == null) { + if (Baritone.settings().renderCachedChunks.get() && Minecraft.getInstance().getIntegratedServer() == null) { // reset the blend func to normal (not dependent on constant alpha) - GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); } GlStateManager.popMatrix(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinVboRenderList.java b/src/launch/java/baritone/launch/mixins/MixinVboRenderList.java index f51d22341..6ea02a0a1 100644 --- a/src/launch/java/baritone/launch/mixins/MixinVboRenderList.java +++ b/src/launch/java/baritone/launch/mixins/MixinVboRenderList.java @@ -38,9 +38,9 @@ public class MixinVboRenderList { ) ) private void popMatrix() { - if (Baritone.settings().renderCachedChunks.get() && Minecraft.getMinecraft().getIntegratedServer() == null) { + if (Baritone.settings().renderCachedChunks.get() && Minecraft.getInstance().getIntegratedServer() == null) { // reset the blend func to normal (not dependent on constant alpha) - GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); } GlStateManager.popMatrix(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldClient.java b/src/launch/java/baritone/launch/mixins/MixinWorldClient.java deleted file mode 100644 index 7c1561631..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinWorldClient.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.api.BaritoneAPI; -import baritone.api.IBaritone; -import baritone.api.event.events.ChunkEvent; -import baritone.api.event.events.type.EventState; -import net.minecraft.client.multiplayer.WorldClient; -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.CallbackInfo; - -/** - * @author Brady - * @since 8/2/2018 - */ -@Mixin(WorldClient.class) -public class MixinWorldClient { - - @Inject( - method = "doPreChunk", - at = @At("HEAD") - ) - private void preDoPreChunk(int chunkX, int chunkZ, boolean loadChunk, CallbackInfo ci) { - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().world() == (WorldClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.PRE, - loadChunk ? ChunkEvent.Type.LOAD : ChunkEvent.Type.UNLOAD, - chunkX, - chunkZ - ) - ); - } - } - - } - - @Inject( - method = "doPreChunk", - at = @At("RETURN") - ) - private void postDoPreChunk(int chunkX, int chunkZ, boolean loadChunk, CallbackInfo ci) { - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().world() == (WorldClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - loadChunk ? ChunkEvent.Type.LOAD : ChunkEvent.Type.UNLOAD, - chunkX, - chunkZ - ) - ); - } - } - } -} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 3b5fa70cc..858cb71e9 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -16,13 +16,12 @@ "MixinChunkRenderWorker", "MixinEntityLivingBase", "MixinEntityPlayerSP", - "MixinEntityRenderer", + "MixinGameRenderer", "MixinMinecraft", "MixinNetHandlerPlayClient", "MixinNetworkManager", "MixinRenderChunk", "MixinRenderList", - "MixinVboRenderList", - "MixinWorldClient" + "MixinVboRenderList" ] } \ No newline at end of file diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 51a6ff699..d9a9b2f64 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -55,7 +55,7 @@ public class Baritone implements IBaritone { static { threadPool = new ThreadPoolExecutor(4, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<>()); - dir = new File(Minecraft.getMinecraft().gameDir, "baritone"); + dir = new File(Minecraft.getInstance().gameDir, "baritone"); if (!Files.exists(dir.toPath())) { try { Files.createDirectories(dir.toPath()); diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index df0921cf4..345416d37 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -28,9 +28,6 @@ public final class LookBehavior extends Behavior implements ILookBehavior { /** * Target's values are as follows: - *

- * getFirst() -> yaw - * getSecond() -> pitch */ private Rotation target; diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index d2737190f..1a34b2aef 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -52,9 +52,10 @@ public final class CachedChunk { temp.add(Blocks.TRAPPED_CHEST); temp.add(Blocks.END_PORTAL); temp.add(Blocks.END_PORTAL_FRAME); - temp.add(Blocks.MOB_SPAWNER); + temp.add(Blocks.SPAWNER); temp.add(Blocks.BARRIER); temp.add(Blocks.OBSERVER); + temp.add(Blocks.WHITE_SHULKER_BOX); temp.add(Blocks.ORANGE_SHULKER_BOX); temp.add(Blocks.MAGENTA_SHULKER_BOX); @@ -63,7 +64,7 @@ public final class CachedChunk { temp.add(Blocks.LIME_SHULKER_BOX); temp.add(Blocks.PINK_SHULKER_BOX); temp.add(Blocks.GRAY_SHULKER_BOX); - temp.add(Blocks.SILVER_SHULKER_BOX); + temp.add(Blocks.LIGHT_GRAY_SHULKER_BOX); temp.add(Blocks.CYAN_SHULKER_BOX); temp.add(Blocks.PURPLE_SHULKER_BOX); temp.add(Blocks.BLUE_SHULKER_BOX); @@ -71,22 +72,56 @@ public final class CachedChunk { temp.add(Blocks.GREEN_SHULKER_BOX); temp.add(Blocks.RED_SHULKER_BOX); temp.add(Blocks.BLACK_SHULKER_BOX); - temp.add(Blocks.PORTAL); + + temp.add(Blocks.NETHER_PORTAL); temp.add(Blocks.HOPPER); temp.add(Blocks.BEACON); temp.add(Blocks.BREWING_STAND); - temp.add(Blocks.SKULL); + + // TODO: Maybe add a predicate for blocks to keep track of? + // This should really not need to happen + temp.add(Blocks.CREEPER_HEAD); + temp.add(Blocks.CREEPER_WALL_HEAD); + temp.add(Blocks.DRAGON_HEAD); + temp.add(Blocks.DRAGON_WALL_HEAD); + temp.add(Blocks.PLAYER_HEAD); + temp.add(Blocks.PLAYER_WALL_HEAD); + temp.add(Blocks.ZOMBIE_HEAD); + temp.add(Blocks.ZOMBIE_WALL_HEAD); + temp.add(Blocks.SKELETON_SKULL); + temp.add(Blocks.SKELETON_WALL_SKULL); + temp.add(Blocks.WITHER_SKELETON_SKULL); + temp.add(Blocks.WITHER_SKELETON_WALL_SKULL); + temp.add(Blocks.ENCHANTING_TABLE); temp.add(Blocks.ANVIL); - temp.add(Blocks.LIT_FURNACE); - temp.add(Blocks.BED); + + temp.add(Blocks.WHITE_BED); + temp.add(Blocks.ORANGE_BED); + temp.add(Blocks.MAGENTA_BED); + temp.add(Blocks.LIGHT_BLUE_BED); + temp.add(Blocks.YELLOW_BED); + temp.add(Blocks.LIME_BED); + temp.add(Blocks.PINK_BED); + temp.add(Blocks.GRAY_BED); + temp.add(Blocks.LIGHT_GRAY_BED); + temp.add(Blocks.CYAN_BED); + temp.add(Blocks.PURPLE_BED); + temp.add(Blocks.BLUE_BED); + temp.add(Blocks.BROWN_BED); + temp.add(Blocks.GREEN_BED); + temp.add(Blocks.RED_BED); + temp.add(Blocks.BLACK_BED); + temp.add(Blocks.DRAGON_EGG); temp.add(Blocks.JUKEBOX); temp.add(Blocks.END_GATEWAY); - temp.add(Blocks.WEB); + temp.add(Blocks.COBWEB); temp.add(Blocks.NETHER_WART); temp.add(Blocks.LADDER); BLOCKS_TO_KEEP_TRACK_OF = Collections.unmodifiableSet(temp); + + // TODO: Lit Furnaces } /** @@ -147,8 +182,8 @@ public final IBlockState getBlock(int x, int y, int z, int dimension) { if (heightMap[internalPos] == y) { // we have this exact block, it's a surface block /*System.out.println("Saying that " + x + "," + y + "," + z + " is " + state); - if (!Minecraft.getMinecraft().world.getBlockState(new BlockPos(x + this.x * 16, y, z + this.z * 16)).getBlock().equals(state.getBlock())) { - throw new IllegalStateException("failed " + Minecraft.getMinecraft().world.getBlockState(new BlockPos(x + this.x * 16, y, z + this.z * 16)).getBlock() + " " + state.getBlock() + " " + (x + this.x * 16) + " " + y + " " + (z + this.z * 16)); + if (!Minecraft.getInstance().world.getBlockState(new BlockPos(x + this.x * 16, y, z + this.z * 16)).getBlock().equals(state.getBlock())) { + throw new IllegalStateException("failed " + Minecraft.getInstance().world.getBlockState(new BlockPos(x + this.x * 16, y, z + this.z * 16)).getBlock() + " " + state.getBlock() + " " + (x + this.x * 16) + " " + y + " " + (z + this.z * 16)); }*/ return overview[internalPos]; } diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 892369d5b..90aec3f4a 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -24,9 +24,11 @@ import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.registry.IRegistry; import net.minecraft.world.chunk.BlockStateContainer; import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import net.minecraft.world.chunk.ChunkSection; import java.util.*; @@ -46,9 +48,9 @@ public static CachedChunk pack(Chunk chunk) { Map> specialBlocks = new HashMap<>(); BitSet bitSet = new BitSet(CachedChunk.SIZE); try { - ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); + ChunkSection[] chunkInternalStorageArray = chunk.getSections(); for (int y0 = 0; y0 < 16; y0++) { - ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; + ChunkSection extendedblockstorage = chunkInternalStorageArray[y0]; if (extendedblockstorage == null) { // any 16x16x16 area that's all air will have null storage // for example, in an ocean biome, with air from y=64 to y=256 @@ -60,7 +62,7 @@ public static CachedChunk pack(Chunk chunk) { // since a bitset is initialized to all zero, and air is saved as zeros continue; } - BlockStateContainer bsc = extendedblockstorage.getData(); + BlockStateContainer bsc = extendedblockstorage.getData(); int yReal = y0 << 4; // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; // for better cache locality, iterate in that order @@ -106,7 +108,7 @@ public static CachedChunk pack(Chunk chunk) { } public static String blockToString(Block block) { - ResourceLocation loc = Block.REGISTRY.getNameForObject(block); + ResourceLocation loc = IRegistry.BLOCK.getKey(block); String name = loc.getPath(); // normally, only write the part after the minecraft: if (!loc.getNamespace().equals("minecraft")) { // Baritone is running on top of forge with mods installed, perhaps? @@ -116,24 +118,25 @@ public static String blockToString(Block block) { } public static Block stringToBlock(String name) { - return resourceCache.computeIfAbsent(name, n -> Block.getBlockFromName(n.contains(":") ? n : "minecraft:" + n)); + return resourceCache.computeIfAbsent(name, n -> IRegistry.BLOCK.get(new ResourceLocation(n.contains(":") ? n : "minecraft:" + n))); } private static PathingBlockType getPathingBlockType(IBlockState state, Chunk chunk, int x, int y, int z) { Block block = state.getBlock(); - if (block == Blocks.WATER || block == Blocks.FLOWING_WATER) { + if (MovementHelper.isWater(state)) { // only water source blocks are plausibly usable, flowing water should be avoid // FLOWING_WATER is a waterfall, it doesn't really matter and caching it as AVOID just makes it look wrong if (!MovementHelper.possiblyFlowing(state)) { return PathingBlockType.WATER; } - if (BlockLiquid.getSlopeAngle(chunk.getWorld(), new BlockPos(x + chunk.x << 4, y, z + chunk.z << 4), state.getMaterial(), state) != -1000.0F) { + Vec3d flow = state.getFluidState().getFlow(chunk.getWorld(), new BlockPos(x + chunk.x << 4, y, z + chunk.z << 4)); + if (flow.x != 0.0 || flow.z != 0.0) { return PathingBlockType.AVOID; } return PathingBlockType.WATER; } - if (MovementHelper.avoidWalkingInto(block) || MovementHelper.isBottomSlab(state)) { + if (MovementHelper.avoidWalkingInto(state) || MovementHelper.isBottomSlab(state)) { return PathingBlockType.AVOID; } // We used to do an AABB check here diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index fe2efa4eb..3e8c03a82 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -24,6 +24,7 @@ import baritone.utils.accessor.IChunkProviderServer; import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.world.WorldServer; +import net.minecraft.world.dimension.DimensionType; import org.apache.commons.lang3.SystemUtils; import java.io.File; @@ -55,7 +56,7 @@ public final WorldData getCurrentWorld() { * * @param dimension The ID of the world's dimension */ - public final void initWorld(int dimension) { + public final void initWorld(DimensionType dimension) { File directory; File readme; @@ -101,7 +102,7 @@ public final void initWorld(int dimension) { System.out.println("Baritone world data dir: " + dir); synchronized (worldCache) { - this.currentWorld = worldCache.computeIfAbsent(dir, d -> new WorldData(d, dimension)); + this.currentWorld = worldCache.computeIfAbsent(dir, d -> new WorldData(d, dimension.getId())); } } diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 463dd22f7..6f81201b1 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -26,7 +26,7 @@ import net.minecraft.util.math.ChunkPos; import net.minecraft.world.chunk.BlockStateContainer; import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import net.minecraft.world.chunk.ChunkSection; import java.util.ArrayList; import java.util.Collection; @@ -67,7 +67,7 @@ public List scanChunkRadius(IPlayerContext ctx, List blocks, in foundChunks = true; int chunkX = xoff + playerChunkX; int chunkZ = zoff + playerChunkZ; - Chunk chunk = chunkProvider.getLoadedChunk(chunkX, chunkZ); + Chunk chunk = chunkProvider.getChunk(chunkX, chunkZ, false, false); if (chunk == null) { continue; } @@ -92,7 +92,7 @@ public List scanChunk(IPlayerContext ctx, List blocks, ChunkPos } ChunkProviderClient chunkProvider = (ChunkProviderClient) ctx.world().getChunkProvider(); - Chunk chunk = chunkProvider.getLoadedChunk(pos.x, pos.z); + Chunk chunk = chunkProvider.getChunk(pos.x, pos.z, false, false); int playerY = ctx.playerFeet().getY(); if (chunk == null || chunk.isEmpty()) { @@ -105,14 +105,14 @@ public List scanChunk(IPlayerContext ctx, List blocks, ChunkPos } public void scanChunkInto(int chunkX, int chunkZ, Chunk chunk, List search, Collection result, int max, int yLevelThreshold, int playerY) { - ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); + ChunkSection[] chunkInternalStorageArray = chunk.getSections(); for (int y0 = 0; y0 < 16; y0++) { - ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; + ChunkSection extendedblockstorage = chunkInternalStorageArray[y0]; if (extendedblockstorage == null) { continue; } int yReal = y0 << 4; - BlockStateContainer bsc = extendedblockstorage.getData(); + BlockStateContainer bsc = extendedblockstorage.getData(); // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; // for better cache locality, iterate in that order for (int y = 0; y < 16; y++) { diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index b1bb1182d..6d947a9a8 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -84,7 +84,7 @@ public final void onChunkEvent(ChunkEvent event) { // to make sure the chunk being unloaded is already loaded. boolean isPreUnload = state == EventState.PRE && type == ChunkEvent.Type.UNLOAD - && world.getChunkProvider().isChunkGeneratedAt(event.getX(), event.getZ()); + && world.getChunkProvider().getChunk(event.getX(), event.getZ(), false, false) != null; if (isPostPopulate || isPreUnload) { baritone.getWorldProvider().ifWorldLoaded(worldData -> { @@ -109,7 +109,7 @@ public final void onWorldEvent(WorldEvent event) { if (event.getState() == EventState.POST) { cache.closeWorld(); if (event.getWorld() != null) { - cache.initWorld(event.getWorld().provider.getDimensionType().getId()); + cache.initWorld(event.getWorld().getDimension().getType()); } } diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 4c3b299d2..23d9d8e1c 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -77,7 +77,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); // TODO TODO TODO this.toolSet = new ToolSet(player); this.hasThrowaway = Baritone.settings().allowPlace.get() && MovementHelper.throwaway(baritone.getPlayerContext(), false); - this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.get() && InventoryPlayer.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && !world.provider.isNether(); + this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.get() && InventoryPlayer.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && !world.getDimension().isNether(); this.canSprint = Baritone.settings().allowSprint.get() && player.getFoodStats().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.get(); this.allowBreak = Baritone.settings().allowBreak.get(); diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 15f4fa24b..6eec9285c 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -23,7 +23,7 @@ import baritone.api.utils.*; import baritone.api.utils.input.Input; import baritone.utils.BlockStateInterface; -import net.minecraft.block.BlockLiquid; +import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -109,7 +109,7 @@ public double calculateCostWithoutCaching() { */ @Override public MovementStatus update() { - ctx.player().capabilities.isFlying = false; + ctx.player().abilities.isFlying = false; currentState = updateState(currentState); if (MovementHelper.isLiquid(ctx, ctx.playerFeet())) { currentState.setInput(Input.JUMP, true); @@ -143,7 +143,7 @@ protected boolean prepared(MovementState state) { } boolean somethingInTheWay = false; for (BetterBlockPos blockPos : positionsToBreak) { - if (!MovementHelper.canWalkThrough(ctx, blockPos) && !(BlockStateInterface.getBlock(ctx, blockPos) instanceof BlockLiquid)) { // can't break liquid, so don't try + if (!MovementHelper.canWalkThrough(ctx, blockPos) && BlockStateInterface.getBlock(ctx, blockPos) != Blocks.AIR) { // can't break air, so don't try somethingInTheWay = true; Optional reachable = RotationUtils.reachable(ctx.player(), blockPos, ctx.playerController().getBlockReachDistance()); if (reachable.isPresent()) { @@ -159,7 +159,7 @@ protected boolean prepared(MovementState state) { //i'm doing it anyway //i dont care if theres snow in the way!!!!!!! //you dont own me!!!! - state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.player().getPositionEyes(1.0F), + state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.player().getEyePosition(1.0F), VecUtils.getBlockPosCenter(blockPos), ctx.playerRotations()), true) ); // don't check selectedblock on this one, this is a fallback when we can't see any face directly, it's intended to be breaking the "incorrect" block diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 592aecd0e..5782ee253 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -28,12 +28,19 @@ import baritone.utils.Helper; import baritone.utils.ToolSet; import net.minecraft.block.*; -import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.fluid.FlowingFluid; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.IFluidState; +import net.minecraft.fluid.WaterFluid; import net.minecraft.init.Blocks; +import net.minecraft.init.Fluids; import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; +import net.minecraft.pathfinding.PathType; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.properties.SlabType; import net.minecraft.util.EnumFacing; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; @@ -56,11 +63,11 @@ static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBloc return b == Blocks.ICE // ice becomes water, and water can mess up the path || b instanceof BlockSilverfish // obvious reasons // call context.get directly with x,y,z. no need to make 5 new BlockPos for no reason - || bsi.get0(x, y + 1, z).getBlock() instanceof BlockLiquid//don't break anything touching liquid on any side - || bsi.get0(x + 1, y, z).getBlock() instanceof BlockLiquid - || bsi.get0(x - 1, y, z).getBlock() instanceof BlockLiquid - || bsi.get0(x, y, z + 1).getBlock() instanceof BlockLiquid - || bsi.get0(x, y, z - 1).getBlock() instanceof BlockLiquid; + || !bsi.get0(x, y + 1, z).getFluidState().isEmpty()//don't break anything touching liquid on any side + || !bsi.get0(x + 1, y, z).getFluidState().isEmpty() + || !bsi.get0(x - 1, y, z).getFluidState().isEmpty() + || !bsi.get0(x, y, z + 1).getFluidState().isEmpty() + || !bsi.get0(x, y, z - 1).getFluidState().isEmpty(); } static boolean canWalkThrough(IPlayerContext ctx, BetterBlockPos pos) { @@ -76,7 +83,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo if (block == Blocks.AIR) { // early return for most common case return true; } - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull) { + if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull) { return false; } if (block instanceof BlockDoor || block instanceof BlockFenceGate) { @@ -85,7 +92,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo // be opened by just interacting. return block != Blocks.IRON_DOOR; } - boolean snow = block instanceof BlockSnow; + boolean snow = block instanceof BlockSnowLayer; boolean trapdoor = block instanceof BlockTrapDoor; if (snow || trapdoor) { // we've already checked doors and fence gates @@ -98,34 +105,36 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo if (snow) { // the check in BlockSnow.isPassable is layers < 5 // while actually, we want < 3 because 3 or greater makes it impassable in a 2 high ceiling - if (state.getValue(BlockSnow.LAYERS) >= 3) { + if (state.get(BlockSnowLayer.LAYERS) >= 3) { return false; } // ok, it's low enough we could walk through it, but is it supported? return canWalkOn(bsi, x, y - 1, z); } if (trapdoor) { - return !state.getValue(BlockTrapDoor.OPEN); // see BlockTrapDoor.isPassable + return !state.get(BlockTrapDoor.OPEN); // see BlockTrapDoor.isPassable } + // The previous condition should always be true, so this exception will never be thrown throw new IllegalStateException(); } if (isFlowing(x, y, z, state, bsi)) { return false; // Don't walk through flowing liquids } - if (block instanceof BlockLiquid) { + IFluidState fluidState = state.getFluidState(); + if (fluidState.getFluid() instanceof WaterFluid) { if (Baritone.settings().assumeWalkOnWater.get()) { return false; } IBlockState up = bsi.get0(x, y + 1, z); - if (up.getBlock() instanceof BlockLiquid || up.getBlock() instanceof BlockLilyPad) { + if (!up.getFluidState().isEmpty() || up.getBlock() instanceof BlockLilyPad) { return false; } - return block == Blocks.WATER || block == Blocks.FLOWING_WATER; + return true; } // every block that overrides isPassable with anything more complicated than a "return true;" or "return false;" // has already been accounted for above // therefore it's safe to not construct a blockpos from our x, y, z ints and instead just pass null - return block.isPassable(null, null); + return state.allowsMovement(null, null, PathType.LAND); } /** @@ -150,21 +159,21 @@ static boolean fullyPassable(IBlockState state) { // exceptions - blocks that are isPassable true, but we can't actually jump through if (block == Blocks.FIRE || block == Blocks.TRIPWIRE - || block == Blocks.WEB + || block == Blocks.COBWEB || block == Blocks.VINE || block == Blocks.LADDER || block == Blocks.COCOA || block instanceof BlockDoor || block instanceof BlockFenceGate || block instanceof BlockSnow - || block instanceof BlockLiquid + || !state.getFluidState().isEmpty() || block instanceof BlockTrapDoor || block instanceof BlockEndPortal || block instanceof BlockSkull) { return false; } // door, fence gate, liquid, trapdoor have been accounted for, nothing else uses the world or pos parameters - return block.isPassable(null, null); + return state.allowsMovement(null, null, PathType.LAND); } static boolean isReplacable(int x, int y, int z, IBlockState state, BlockStateInterface bsi) { @@ -179,20 +188,19 @@ static boolean isReplacable(int x, int y, int z, IBlockState state, BlockStateIn * } */ Block block = state.getBlock(); - if (block == Blocks.AIR || isWater(block)) { + if (block == Blocks.AIR || isWater(state)) { // early return for common cases hehe return true; } - if (block instanceof BlockSnow) { + if (block instanceof BlockSnowLayer) { // as before, default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) if (!bsi.worldContainsLoadedChunk(x, z)) { return true; } - return state.getValue(BlockSnow.LAYERS) == 1; + return state.get(BlockSnowLayer.LAYERS) == 1; } - if (block instanceof BlockDoublePlant) { - BlockDoublePlant.EnumPlantType kek = state.getValue(BlockDoublePlant.VARIANT); - return kek == BlockDoublePlant.EnumPlantType.FERN || kek == BlockDoublePlant.EnumPlantType.GRASS; + if (block == Blocks.LARGE_FERN || block == Blocks.TALL_GRASS) { + return true; } return state.getMaterial().isReplaceable(); } @@ -220,16 +228,16 @@ static boolean isGatePassable(IPlayerContext ctx, BlockPos gatePos, BlockPos pla return true; } - return state.getValue(BlockFenceGate.OPEN); + return state.get(BlockFenceGate.OPEN); } - static boolean isHorizontalBlockPassable(BlockPos blockPos, IBlockState blockState, BlockPos playerPos, PropertyBool propertyOpen) { + static boolean isHorizontalBlockPassable(BlockPos blockPos, IBlockState blockState, BlockPos playerPos, BooleanProperty propertyOpen) { if (playerPos.equals(blockPos)) { return false; } - EnumFacing.Axis facing = blockState.getValue(BlockHorizontal.FACING).getAxis(); - boolean open = blockState.getValue(propertyOpen); + EnumFacing.Axis facing = blockState.get(BlockHorizontal.HORIZONTAL_FACING).getAxis(); + boolean open = blockState.get(propertyOpen); EnumFacing.Axis playerFacing; if (playerPos.north().equals(blockPos) || playerPos.south().equals(blockPos)) { @@ -243,14 +251,14 @@ static boolean isHorizontalBlockPassable(BlockPos blockPos, IBlockState blockSta return (facing == playerFacing) == open; } - static boolean avoidWalkingInto(Block block) { - return block instanceof BlockLiquid - || block instanceof BlockDynamicLiquid - || block == Blocks.MAGMA + static boolean avoidWalkingInto(IBlockState state) { + Block block = state.getBlock(); + return !state.getFluidState().isEmpty() + || block == Blocks.MAGMA_BLOCK || block == Blocks.CACTUS || block == Blocks.FIRE || block == Blocks.END_PORTAL - || block == Blocks.WEB; + || block == Blocks.COBWEB; } /** @@ -267,7 +275,7 @@ static boolean avoidWalkingInto(Block block) { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR || block == Blocks.MAGMA) { + if (block == Blocks.AIR || block == Blocks.MAGMA_BLOCK) { // early return for most common case (air) // plus magma, which is a normal cube but it hurts you return false; @@ -284,30 +292,28 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockSta if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST) { return true; } - if (isWater(block)) { + if (isWater(state)) { // since this is called literally millions of times per second, the benefit of not allocating millions of useless "pos.up()" // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think its a decrease in readability - Block up = bsi.get0(x, y + 1, z).getBlock(); - if (up == Blocks.WATERLILY || up == Blocks.CARPET) { + IBlockState upState = bsi.get0(x, y + 1, z); + Block up = upState.getBlock(); + if (up == Blocks.LILY_PAD || up instanceof BlockCarpet) { return true; } - if (isFlowing(x, y, z, state, bsi) || block == Blocks.FLOWING_WATER) { + if (isFlowing(x, y, z, state, bsi) || upState.getFluidState().getFluid() == Fluids.FLOWING_WATER) { // the only scenario in which we can walk on flowing water is if it's under still water with jesus off - return isWater(up) && !Baritone.settings().assumeWalkOnWater.get(); + return isWater(upState) && !Baritone.settings().assumeWalkOnWater.get(); } // if assumeWalkOnWater is on, we can only walk on water if there isn't water above it // if assumeWalkOnWater is off, we can only walk on water if there is water above it - return isWater(up) ^ Baritone.settings().assumeWalkOnWater.get(); + return isWater(upState) ^ Baritone.settings().assumeWalkOnWater.get(); } - if (block == Blocks.GLASS || block == Blocks.STAINED_GLASS) { + if (block == Blocks.GLASS || block instanceof BlockStainedGlass) { return true; } if (block instanceof BlockSlab) { if (!Baritone.settings().allowWalkOnBottomSlab.get()) { - if (((BlockSlab) block).isDouble()) { - return true; - } - return state.getValue(BlockSlab.HALF) != BlockSlab.EnumBlockHalf.BOTTOM; + return state.isTopSolid(); } return true; } @@ -356,7 +362,7 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i if (avoidBreaking(context.bsi, x, y, z, state)) { return COST_INF; } - if (block instanceof BlockLiquid) { + if (!state.getFluidState().isEmpty()) { return COST_INF; } double m = Blocks.CRAFTING_TABLE.equals(block) ? 10 : 1; // TODO see if this is still necessary. it's from MineBot when we wanted to penalize breaking its crafting table @@ -380,8 +386,7 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i static boolean isBottomSlab(IBlockState state) { return state.getBlock() instanceof BlockSlab - && !((BlockSlab) state.getBlock()).isDouble() - && state.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.BOTTOM; + && state.get(BlockSlab.TYPE) == SlabType.BOTTOM; } /** @@ -454,11 +459,12 @@ static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { * Returns whether or not the specified block is * water, regardless of whether or not it is flowing. * - * @param b The block + * @param state The block state * @return Whether or not the block is water */ - static boolean isWater(Block b) { - return b == Blocks.FLOWING_WATER || b == Blocks.WATER; + static boolean isWater(IBlockState state) { + Fluid f = state.getFluidState().getFluid(); + return f == Fluids.WATER || f == Fluids.FLOWING_WATER; } /** @@ -470,11 +476,12 @@ static boolean isWater(Block b) { * @return Whether or not the block is water */ static boolean isWater(IPlayerContext ctx, BlockPos bp) { - return isWater(BlockStateInterface.getBlock(ctx, bp)); + return isWater(BlockStateInterface.get(ctx, bp)); } - static boolean isLava(Block b) { - return b == Blocks.FLOWING_LAVA || b == Blocks.LAVA; + static boolean isLava(IBlockState state) { + Fluid f = state.getFluidState().getFluid(); + return f == Fluids.LAVA || f == Fluids.FLOWING_LAVA; } /** @@ -485,20 +492,25 @@ static boolean isLava(Block b) { * @return Whether or not the block is a liquid */ static boolean isLiquid(IPlayerContext ctx, BlockPos p) { - return BlockStateInterface.getBlock(ctx, p) instanceof BlockLiquid; + return isLiquid(BlockStateInterface.get(ctx, p)); + } + + static boolean isLiquid(IBlockState blockState) { + return !blockState.getFluidState().isEmpty(); } static boolean possiblyFlowing(IBlockState state) { - // Will be IFluidState in 1.13 - return state.getBlock() instanceof BlockLiquid - && state.getValue(BlockLiquid.LEVEL) != 0; + IFluidState fluidState = state.getFluidState(); + return fluidState.getFluid() instanceof FlowingFluid + && state.get(FlowingFluid.LEVEL_1_8) != 0; } static boolean isFlowing(int x, int y, int z, IBlockState state, BlockStateInterface bsi) { - if (!(state.getBlock() instanceof BlockLiquid)) { + IFluidState fluidState = state.getFluidState(); + if (!(fluidState.getFluid() instanceof FlowingFluid)) { return false; } - if (state.getValue(BlockLiquid.LEVEL) != 0) { + if (fluidState.get(FlowingFluid.LEVEL_1_8) != 0) { return true; } return possiblyFlowing(bsi.get0(x + 1, y, z)) @@ -530,7 +542,7 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, double faceZ = (placeAt.getZ() + against1.getZ() + 1.0D) * 0.5D; Rotation place = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()); RayTraceResult res = RayTraceUtils.rayTraceTowards(ctx.player(), place, ctx.playerController().getBlockReachDistance()); - if (res != null && res.typeOfHit == RayTraceResult.Type.BLOCK && res.getBlockPos().equals(against1) && res.getBlockPos().offset(res.sideHit).equals(placeAt)) { + if (res != null && res.type == RayTraceResult.Type.BLOCK && res.getBlockPos().equals(against1) && res.getBlockPos().offset(res.sideHit).equals(placeAt)) { state.setTarget(new MovementState.MovementTarget(place, true)); found = true; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 3a8ed913e..84a89bcb7 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -137,7 +137,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, IBlockState ontoBlock = context.get(destX, newY, destZ); int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; - if ((ontoBlock.getBlock() == Blocks.WATER || ontoBlock.getBlock() == Blocks.FLOWING_WATER) && context.getBlock(destX, newY + 1, destZ) != Blocks.WATERLILY) { + if (MovementHelper.isWater(ontoBlock) && context.getBlock(destX, newY + 1, destZ) != Blocks.LILY_PAD) { // lilypads are canWalkThrough, but we can't end a fall that should be broken by water if it's covered by a lilypad // however, don't return impossible in the lilypad scenario, because we could still jump right on it (water that's below a lilypad is canWalkOn so it works) if (context.assumeWalkOnWater) { @@ -214,7 +214,7 @@ public MovementState updateState(MovementState state) { double destZ = (src.getZ() + 0.5) * 0.17 + (dest.getZ() + 0.5) * 0.83; EntityPlayerSP player = ctx.player(); state.setTarget(new MovementState.MovementTarget( - new Rotation(RotationUtils.calcRotationFromVec3d(player.getPositionEyes(1.0F), + new Rotation(RotationUtils.calcRotationFromVec3d(player.getEyePosition(1.0F), new Vec3d(destX, dest.getY(), destZ), new Rotation(player.rotationYaw, player.rotationPitch)).getYaw(), player.rotationPitch), false @@ -250,7 +250,7 @@ public boolean safeMode() { return true; } for (int y = 0; y <= 2; y++) { // we could hit any of the three blocks - if (MovementHelper.avoidWalkingInto(BlockStateInterface.getBlock(ctx, into.up(y)))) { + if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, into.up(y)))) { return true; } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index f156ff1b4..a360ba450 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -91,12 +91,12 @@ public static void cost(CalculationContext context, int x, int y, int z, int des if (fromDown == Blocks.SOUL_SAND) { multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; } - Block cuttingOver1 = context.get(x, y - 1, destZ).getBlock(); - if (cuttingOver1 == Blocks.MAGMA || MovementHelper.isLava(cuttingOver1)) { + IBlockState cuttingOver1 = context.get(x, y - 1, destZ); + if (cuttingOver1.getBlock() == Blocks.MAGMA_BLOCK || MovementHelper.isLava(cuttingOver1)) { return; } - Block cuttingOver2 = context.get(destX, y - 1, z).getBlock(); - if (cuttingOver2 == Blocks.MAGMA || MovementHelper.isLava(cuttingOver2)) { + IBlockState cuttingOver2 = context.get(destX, y - 1, z); + if (cuttingOver2.getBlock() == Blocks.MAGMA_BLOCK || MovementHelper.isLava(cuttingOver2)) { return; } IBlockState pb0 = context.get(x, y, destZ); @@ -115,7 +115,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des return; } IBlockState pb3 = context.get(destX, y + 1, z); - if (optionA == 0 && ((MovementHelper.avoidWalkingInto(pb2.getBlock()) && pb2.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb3.getBlock()))) { + if (optionA == 0 && ((MovementHelper.avoidWalkingInto(pb2) && pb2.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb3))) { // at this point we're done calculating optionA, so we can check if it's actually possible to edge around in that direction return; } @@ -124,13 +124,14 @@ public static void cost(CalculationContext context, int x, int y, int z, int des // and finally, if the cost is nonzero for both ways to approach this diagonal, it's not possible return; } - if (optionB == 0 && ((MovementHelper.avoidWalkingInto(pb0.getBlock()) && pb0.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb1.getBlock()))) { + if (optionB == 0 && ((MovementHelper.avoidWalkingInto(pb0) && pb0.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb1))) { // and now that option B is fully calculated, see if we can edge around that way return; } boolean water = false; - Block startIn = context.getBlock(x, y, z); - if (MovementHelper.isWater(startIn) || MovementHelper.isWater(destInto.getBlock())) { + IBlockState startState = context.get(x, y, z); + Block startIn = startState.getBlock(); + if (MovementHelper.isWater(startState) || MovementHelper.isWater(destInto)) { // Ignore previous multiplier // Whatever we were walking on (possibly soul sand) doesn't matter as we're actually floating on water // Not even touching the blocks below diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 93f60f5d1..5aeb73e47 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -34,6 +34,7 @@ import net.minecraft.block.BlockLadder; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.fluid.WaterFluid; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -80,10 +81,11 @@ public MovementState updateState(MovementState state) { BlockPos playerFeet = ctx.playerFeet(); Rotation toDest = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()); Rotation targetRotation = null; - Block destBlock = ctx.world().getBlockState(dest).getBlock(); - boolean isWater = destBlock == Blocks.WATER || destBlock == Blocks.FLOWING_WATER; + IBlockState destState = ctx.world().getBlockState(dest); + Block destBlock = destState.getBlock(); + boolean isWater = destState.getFluidState().getFluid() instanceof WaterFluid; if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { - if (!InventoryPlayer.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().provider.isNether()) { + if (!InventoryPlayer.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().getDimension().isNether()) { return state.setStatus(MovementStatus.UNREACHABLE); } @@ -93,7 +95,7 @@ public MovementState updateState(MovementState state) { targetRotation = new Rotation(toDest.getYaw(), 90.0F); RayTraceResult trace = ctx.objectMouseOver(); - if (trace != null && trace.typeOfHit == RayTraceResult.Type.BLOCK && (trace.getBlockPos().equals(dest) || trace.getBlockPos().equals(dest.down()))) { + if (trace != null && trace.type == RayTraceResult.Type.BLOCK && (trace.getBlockPos().equals(dest) || trace.getBlockPos().equals(dest.down()))) { state.setInput(Input.CLICK_RIGHT, true); } } @@ -150,7 +152,7 @@ private EnumFacing avoid() { for (int i = 0; i < 15; i++) { IBlockState state = ctx.world().getBlockState(ctx.playerFeet().down(i)); if (state.getBlock() == Blocks.LADDER) { - return state.getValue(BlockLadder.FACING); + return state.get(BlockLadder.FACING); } } return null; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 185167c69..de143e8d4 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -28,10 +28,11 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; -import net.minecraft.block.BlockLiquid; import net.minecraft.block.BlockStairs; import net.minecraft.block.state.IBlockState; +import net.minecraft.fluid.WaterFluid; import net.minecraft.init.Blocks; +import net.minecraft.init.Fluids; import net.minecraft.util.EnumFacing; public class MovementParkour extends Movement { @@ -73,7 +74,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac // second most common case -- we could just traverse not parkour return; } - if (MovementHelper.avoidWalkingInto(adj.getBlock()) && adj.getBlock() != Blocks.WATER && adj.getBlock() != Blocks.FLOWING_WATER) { // magma sucks + if (MovementHelper.avoidWalkingInto(adj) && !(adj.getFluidState().getFluid() instanceof WaterFluid)) { // magma sucks return; } if (!MovementHelper.fullyPassable(context, x + xDiff, y + 1, z + zDiff)) { @@ -86,7 +87,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac return; } IBlockState standingOn = context.get(x, y - 1, z); - if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof BlockStairs || MovementHelper.isBottomSlab(standingOn) || standingOn.getBlock() instanceof BlockLiquid) { + if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof BlockStairs || MovementHelper.isBottomSlab(standingOn) || standingOn.getFluidState().getFluid() != Fluids.EMPTY) { return; } int maxJump; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 1bbfa6f91..a873c254d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -49,14 +49,15 @@ public double calculateCost(CalculationContext context) { } public static double cost(CalculationContext context, int x, int y, int z) { - Block from = context.get(x, y, z).getBlock(); + IBlockState fromState = context.get(x, y, z); + Block from = fromState.getBlock(); boolean ladder = from == Blocks.LADDER || from == Blocks.VINE; IBlockState fromDown = context.get(x, y - 1, z); if (!ladder) { if (fromDown.getBlock() == Blocks.LADDER || fromDown.getBlock() == Blocks.VINE) { return COST_INF; // can't pillar from a ladder or vine onto something that isn't also climbable } - if (fromDown.getBlock() instanceof BlockSlab && !((BlockSlab) fromDown.getBlock()).isDouble() && fromDown.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.BOTTOM) { + if (fromDown.getBlock() instanceof BlockSlab && !fromDown.isTopSolid()) { return COST_INF; // can't pillar up from a bottom slab onto a non ladder } } @@ -68,9 +69,9 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (toBreakBlock instanceof BlockFenceGate) { // see issue #172 return COST_INF; } - Block srcUp = null; - if (MovementHelper.isWater(toBreakBlock) && MovementHelper.isWater(from)) { // TODO should this also be allowed if toBreakBlock is air? - srcUp = context.get(x, y + 1, z).getBlock(); + IBlockState srcUp = null; + if (MovementHelper.isWater(toBreak) && MovementHelper.isWater(fromState)) { // TODO should this also be allowed if toBreakBlock is air? + srcUp = context.get(x, y + 1, z); if (MovementHelper.isWater(srcUp)) { return LADDER_UP_ONE_COST; // allow ascending pillars of water, but only if we're already in one } @@ -78,7 +79,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (!ladder && !context.canPlaceThrowawayAt(x, y, z)) { // we need to place a block where we started to jump on it return COST_INF; } - if (from instanceof BlockLiquid || (fromDown.getBlock() instanceof BlockLiquid && context.assumeWalkOnWater)) { + if (MovementHelper.isLiquid(fromState) || (MovementHelper.isLiquid(fromDown) && context.assumeWalkOnWater)) { // otherwise, if we're standing in water, we cannot pillar // if we're standing on water and assumeWalkOnWater is true, we cannot pillar // if we're standing on water and assumeWalkOnWater is false, we must have ascended to here, or sneak backplaced, so it is possible to pillar again @@ -96,9 +97,9 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (check.getBlock() instanceof BlockFalling) { // see MovementAscend's identical check for breaking a falling block above our head if (srcUp == null) { - srcUp = context.get(x, y + 1, z).getBlock(); + srcUp = context.get(x, y + 1, z); } - if (!(toBreakBlock instanceof BlockFalling) || !(srcUp instanceof BlockFalling)) { + if (!(toBreakBlock instanceof BlockFalling) || !(srcUp.getBlock() instanceof BlockFalling)) { return COST_INF; } } @@ -149,7 +150,7 @@ public MovementState updateState(MovementState state) { } IBlockState fromDown = BlockStateInterface.get(ctx, src); - if (MovementHelper.isWater(fromDown.getBlock()) && MovementHelper.isWater(ctx, dest)) { + if (MovementHelper.isWater(fromDown) && MovementHelper.isWater(ctx, dest)) { // stay centered while swimming up a water column state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()), false)); Vec3d destCenter = VecUtils.getBlockPosCenter(dest); @@ -163,7 +164,7 @@ public MovementState updateState(MovementState state) { } boolean ladder = fromDown.getBlock() == Blocks.LADDER || fromDown.getBlock() == Blocks.VINE; boolean vine = fromDown.getBlock() == Blocks.VINE; - Rotation rotation = RotationUtils.calcRotationFromVec3d(ctx.player().getPositionEyes(1.0F), + Rotation rotation = RotationUtils.calcRotationFromVec3d(ctx.player().getEyePosition(1.0F), VecUtils.getBlockPosCenter(positionToPlace), new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch)); if (!ladder) { @@ -172,7 +173,7 @@ public MovementState updateState(MovementState state) { boolean blockIsThere = MovementHelper.canWalkOn(ctx, src) || ladder; if (ladder) { - BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.offset(fromDown.getValue(BlockLadder.FACING).getOpposite()); + BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.offset(fromDown.get(BlockLadder.FACING).getOpposite()); if (against == null) { logDebug("Unable to climb vines"); return state.setStatus(MovementStatus.UNREACHABLE); @@ -222,8 +223,10 @@ public MovementState updateState(MovementState state) { if (!blockIsThere) { - Block fr = BlockStateInterface.get(ctx, src).getBlock(); - if (!(fr instanceof BlockAir || fr.isReplaceable(ctx.world(), src))) { + IBlockState frState = BlockStateInterface.get(ctx, src); + Block fr = frState.getBlock(); + // TODO: Evaluate usage of getMaterial().isReplaceable() + if (!(fr instanceof BlockAir || frState.getMaterial().isReplaceable())) { state.setInput(Input.CLICK_LEFT, true); blockIsThere = false; } else if (ctx.player().isSneaking() && (Objects.equals(src.down(), ctx.objectMouseOver().getBlockPos()) || Objects.equals(src, ctx.objectMouseOver().getBlockPos())) && ctx.player().posY > dest.getY() + 0.1) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index d618cf1a0..3203b0880 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -35,7 +35,9 @@ import net.minecraft.block.BlockFenceGate; import net.minecraft.block.BlockSlab; import net.minecraft.block.state.IBlockState; +import net.minecraft.fluid.WaterFluid; import net.minecraft.init.Blocks; +import net.minecraft.state.properties.SlabType; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -67,11 +69,12 @@ public static double cost(CalculationContext context, int x, int y, int z, int d IBlockState pb0 = context.get(destX, y + 1, destZ); IBlockState pb1 = context.get(destX, y, destZ); IBlockState destOn = context.get(destX, y - 1, destZ); - Block srcDown = context.getBlock(x, y - 1, z); + IBlockState down = context.get(x, y - 1, z); + Block srcDown = down.getBlock(); if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; boolean water = false; - if (MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock())) { + if (MovementHelper.isWater(pb0) || MovementHelper.isWater(pb1)) { WC = context.waterWalkSpeed; water = true; } else { @@ -108,8 +111,8 @@ public static double cost(CalculationContext context, int x, int y, int z, int d return COST_INF; } if (MovementHelper.isReplacable(destX, y - 1, destZ, destOn, context.bsi)) { - boolean throughWater = MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock()); - if (MovementHelper.isWater(destOn.getBlock()) && throughWater) { + boolean throughWater = MovementHelper.isWater(pb0) || MovementHelper.isWater(pb1); + if (MovementHelper.isWater(destOn) && throughWater) { // this happens when assume walk on water is true and this is a traverse in water, which isn't allowed return COST_INF; } @@ -134,10 +137,10 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } // now that we've checked all possible directions to side place, we actually need to backplace - if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof BlockSlab && !((BlockSlab) srcDown).isDouble())) { + if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof BlockSlab && down.get(BlockSlab.TYPE) != SlabType.DOUBLE)) { return COST_INF; // can't sneak and backplace against soul sand or half slabs (regardless of whether it's top half or bottom half) =/ } - if (srcDown == Blocks.FLOWING_WATER || srcDown == Blocks.WATER) { + if (down.getFluidState() instanceof WaterFluid) { return COST_INF; // this is obviously impossible } WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol @@ -160,10 +163,10 @@ public MovementState updateState(MovementState state) { return state; } // and if it's fine to walk into the blocks in front - if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, positionsToBreak[0]).getBlock())) { + if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, positionsToBreak[0]))) { return state; } - if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, positionsToBreak[1]).getBlock())) { + if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, positionsToBreak[1]))) { return state; } // and we aren't already pressed up against the block @@ -232,8 +235,8 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.SUCCESS); } BlockPos into = dest.subtract(src).add(dest); - Block intoBelow = BlockStateInterface.get(ctx, into).getBlock(); - Block intoAbove = BlockStateInterface.get(ctx, into.up()).getBlock(); + IBlockState intoBelow = BlockStateInterface.get(ctx, into); + IBlockState intoAbove = BlockStateInterface.get(ctx, into.up()); if (wasTheBridgeBlockAlwaysThere && (!MovementHelper.isLiquid(ctx, ctx.playerFeet()) || Baritone.settings().sprintInWater.get()) && (!MovementHelper.avoidWalkingInto(intoBelow) || MovementHelper.isWater(intoBelow)) && !MovementHelper.avoidWalkingInto(intoAbove)) { state.setInput(Input.SPRINT, true); } diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index b025f6899..1d4baa86a 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -36,8 +36,8 @@ import baritone.pathing.movement.movements.*; import baritone.utils.BlockStateInterface; import baritone.utils.Helper; -import net.minecraft.block.BlockLiquid; import net.minecraft.init.Blocks; +import net.minecraft.init.Fluids; import net.minecraft.util.Tuple; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -137,7 +137,7 @@ public boolean onTick() { Tuple status = closestPathPos(path); if (possiblyOffPath(status, MAX_DIST_FROM_PATH)) { ticksAway++; - System.out.println("FAR AWAY FROM PATH FOR " + ticksAway + " TICKS. Current distance: " + status.getFirst() + ". Threshold: " + MAX_DIST_FROM_PATH); + System.out.println("FAR AWAY FROM PATH FOR " + ticksAway + " TICKS. Current distance: " + status.getA() + ". Threshold: " + MAX_DIST_FROM_PATH); if (ticksAway > MAX_TICKS_AWAY) { logDebug("Too far away from path for too long, cancelling path"); cancel(); @@ -333,7 +333,7 @@ private boolean shouldPause() { } private boolean possiblyOffPath(Tuple status, double leniency) { - double distanceFromPath = status.getFirst(); + double distanceFromPath = status.getA(); if (distanceFromPath > leniency) { // when we're midair in the middle of a fall, we're very far from both the beginning and the end, but we aren't actually off path if (path.movements().get(pathPosition) instanceof MovementFall) { @@ -353,7 +353,7 @@ private boolean possiblyOffPath(Tuple status, double leniency) * @return Whether or not it was possible to snap to the current player feet */ public boolean snipsnapifpossible() { - if (!ctx.player().onGround && !(ctx.world().getBlockState(ctx.playerFeet()).getBlock() instanceof BlockLiquid)) { + if (!ctx.player().onGround && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { // if we're falling in the air, and not in water, don't splice return false; } else { @@ -453,7 +453,7 @@ private boolean shouldSprintNextTick() { if (current instanceof MovementFall) { Tuple data = overrideFall((MovementFall) current); if (data != null) { - BlockPos fallDest = data.getSecond(); + BlockPos fallDest = data.getB(); if (!path.positions().contains(fallDest)) { throw new IllegalStateException(); } @@ -464,7 +464,7 @@ private boolean shouldSprintNextTick() { return true; } clearKeys(); - behavior.baritone.getLookBehavior().updateTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), data.getFirst(), ctx.playerRotations()), false); + behavior.baritone.getLookBehavior().updateTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), data.getA(), ctx.playerRotations()), false); behavior.baritone.getInputOverrideHandler().setInputForceState(Input.MOVE_FORWARD, true); return true; } @@ -556,10 +556,10 @@ private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse cur } } } - if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().up(3)).getBlock())) { + if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().up(3)))) { return false; } - return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().up(2)).getBlock()); // codacy smh my head + return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().up(2))); // codacy smh my head } private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 3d25c0765..013f1ffa9 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -72,7 +72,7 @@ private boolean followable(Entity entity) { if (entity == null) { return false; } - if (entity.isDead) { + if (!entity.isAlive()) { return false; } if (entity.equals(ctx.player())) { diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index cb80926b1..db3769c68 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -203,7 +203,7 @@ private boolean walkIntoInsteadOfAdjacent(Block block) { if (!Baritone.settings().enterPortal.get()) { return false; } - return block == Blocks.PORTAL; + return block == Blocks.NETHER_PORTAL; } private boolean rightClickOnArrival(Block block) { diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index a299bf314..2347424cd 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -37,6 +37,7 @@ import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.IItemProvider; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -71,11 +72,11 @@ public boolean isActive() { @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (desiredQuantity > 0) { - Item item = mining.get(0).getItemDropped(mining.get(0).getDefaultState(), new Random(), 0); + Item item = mining.get(0).getItemDropped(mining.get(0).getDefaultState(), ctx.world(), null, 0).asItem(); int curr = ctx.player().inventory.mainInventory.stream().filter(stack -> item.equals(stack.getItem())).mapToInt(ItemStack::getCount).sum(); System.out.println("Currently have " + curr + " " + item); if (curr >= desiredQuantity) { - logDirect("Have " + curr + " " + item.getItemStackDisplayName(new ItemStack(item, 1))); + logDirect("Have " + curr + " " + item.getDisplayName(new ItemStack(item, 1))); cancel(); return null; } @@ -187,7 +188,7 @@ public static List droppedItemsScan(List mining, World world) { } Set searchingFor = new HashSet<>(); for (Block block : mining) { - Item drop = block.getItemDropped(block.getDefaultState(), new Random(), 0); + Item drop = block.getItemDropped(block.getDefaultState(), world, null, 0).asItem(); Item ore = Item.getItemFromBlock(block); searchingFor.add(drop); searchingFor.add(ore); diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index c798c563f..a006e8e7c 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -23,14 +23,17 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.IPlayerContext; +import net.minecraft.client.GameSettings; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiMainMenu; -import net.minecraft.client.settings.GameSettings; import net.minecraft.client.tutorial.TutorialSteps; +import net.minecraft.server.integrated.IntegratedServer; +import net.minecraft.util.HttpUtil; import net.minecraft.util.math.BlockPos; import net.minecraft.world.GameType; import net.minecraft.world.WorldSettings; import net.minecraft.world.WorldType; +import net.minecraft.world.dimension.DimensionType; /** * Responsible for automatically testing Baritone's pathing algorithm by automatically creating a world with a specific @@ -88,11 +91,13 @@ public void onTick(TickEvent event) { mc.launchIntegratedServer("BaritoneAutoTest", "BaritoneAutoTest", worldsettings); } + IntegratedServer server = mc.getIntegratedServer(); + // If the integrated server is launched and the world has initialized, set the spawn point // to our defined starting position - if (mc.getIntegratedServer() != null && mc.getIntegratedServer().worlds[0] != null) { - mc.getIntegratedServer().worlds[0].setSpawnPoint(STARTING_POSITION); - mc.getIntegratedServer().worlds[0].getGameRules().setOrCreateGameRule("spawnRadius", "0"); + if (server != null && server.getWorld(DimensionType.OVERWORLD) != null) { + server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); + server.getWorld(DimensionType.OVERWORLD).getGameRules().setOrCreateGameRule("spawnRadius", "0", server); } if (event.getType() == TickEvent.Type.IN) { // If we're in-game @@ -100,7 +105,7 @@ public void onTick(TickEvent event) { // Force the integrated server to share the world to LAN so that // the ingame pause menu gui doesn't actually pause our game if (mc.isSingleplayer() && !mc.getIntegratedServer().getPublic()) { - mc.getIntegratedServer().shareToLAN(GameType.getByName("survival"), false); + mc.getIntegratedServer().shareToLAN(GameType.getByName("survival"), false, HttpUtil.getSuitableLanPort()); } // For the first 200 ticks, wait for the world to generate diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index db56b91f7..b5b7c7757 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -53,7 +53,7 @@ public void stopBreakingBlock() { public void tick(boolean isLeftClick) { RayTraceResult trace = playerContext.objectMouseOver(); - boolean isBlockTrace = trace != null && trace.typeOfHit == RayTraceResult.Type.BLOCK; + boolean isBlockTrace = trace != null && trace.type == RayTraceResult.Type.BLOCK; if (isLeftClick && isBlockTrace) { tryBreakBlock(trace.getBlockPos(), trace.sideHit); diff --git a/src/main/java/baritone/utils/BlockPlaceHelper.java b/src/main/java/baritone/utils/BlockPlaceHelper.java index e0c782bb4..904417413 100644 --- a/src/main/java/baritone/utils/BlockPlaceHelper.java +++ b/src/main/java/baritone/utils/BlockPlaceHelper.java @@ -39,7 +39,7 @@ public void tick(boolean rightClickRequested) { } RayTraceResult mouseOver = ctx.objectMouseOver(); BlockPos pos = mouseOver.getBlockPos(); - if (!rightClickRequested || ctx.player().isRowingBoat() || pos == null || mouseOver.typeOfHit != RayTraceResult.Type.BLOCK) { + if (!rightClickRequested || ctx.player().isRowingBoat() || pos == null || mouseOver.type != RayTraceResult.Type.BLOCK) { return; } rightClickTimer = Baritone.settings().rightClickSpeed.get(); diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 5f8cac6ad..e49cff757 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -67,7 +67,7 @@ public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedC this.loadedChunks = worldLoaded; // this will only be used on the main thread } this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.get(); - if (!Minecraft.getMinecraft().isCallingFromMinecraftThread()) { + if (!Minecraft.getInstance().isCallingFromMinecraftThread()) { throw new IllegalStateException(); } } diff --git a/src/main/java/baritone/utils/ExampleBaritoneControl.java b/src/main/java/baritone/utils/ExampleBaritoneControl.java index 31ee8ff1f..6986cca13 100644 --- a/src/main/java/baritone/utils/ExampleBaritoneControl.java +++ b/src/main/java/baritone/utils/ExampleBaritoneControl.java @@ -241,7 +241,7 @@ public boolean runCommand(String msg0) { // you may think this can be private, b int count = 0; for (int x = playerChunkX - 40; x <= playerChunkX + 40; x++) { for (int z = playerChunkZ - 40; z <= playerChunkZ + 40; z++) { - Chunk chunk = cli.getLoadedChunk(x, z); + Chunk chunk = cli.getChunk(x, z, false, false); if (chunk != null) { count++; baritone.getWorldProvider().getCurrentWorld().getCachedWorld().queueForPacking(chunk); @@ -306,7 +306,7 @@ public boolean isInGoal(int x, int y, int z) { } 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); + Minecraft.getInstance().worldRenderer.markBlockRangeForRenderUpdate(pf.x - 500, pf.y - 500, pf.z - 500, pf.x + 500, pf.y + 500, pf.z + 500); logDirect("okay"); return true; } @@ -349,8 +349,8 @@ public boolean isInGoal(int x, int y, int z) { toFollow = ctx.getSelectedEntity(); } else { for (EntityPlayer pl : ctx.world().playerEntities) { - String theirName = pl.getName().trim().toLowerCase(); - if (!theirName.equals(ctx.player().getName().trim().toLowerCase()) && (theirName.contains(name) || name.contains(theirName))) { // don't follow ourselves lol + String theirName = pl.getName().getString().trim().toLowerCase(); + if (!theirName.equals(ctx.player().getName().getString().trim().toLowerCase()) && (theirName.contains(name) || name.contains(theirName))) { // don't follow ourselves lol toFollow = Optional.of(pl); } } @@ -554,7 +554,7 @@ public boolean isInGoal(int x, int y, int z) { private void log(List stacks) { for (ItemStack stack : stacks) { if (!stack.isEmpty()) { - logDirect(stack.getCount() + "x " + stack.getDisplayName() + "@" + stack.getItemDamage()); + logDirect(stack.getCount() + "x " + stack.getDisplayName() + "@" + stack.getDamage()); } } } diff --git a/src/main/java/baritone/utils/Helper.java b/src/main/java/baritone/utils/Helper.java index f85f240cc..d960fb629 100755 --- a/src/main/java/baritone/utils/Helper.java +++ b/src/main/java/baritone/utils/Helper.java @@ -42,7 +42,7 @@ public interface Helper { TextFormatting.GRAY )); - Minecraft mc = Minecraft.getMinecraft(); + Minecraft mc = Minecraft.getInstance(); /** * Send a message to chat only if chatDebug is on @@ -64,9 +64,9 @@ default void logDebug(String message) { * @param message The message to display in chat */ default void logDirect(String message) { - ITextComponent component = MESSAGE_PREFIX.createCopy(); + ITextComponent component = MESSAGE_PREFIX.shallowCopy(); component.getStyle().setColor(TextFormatting.GRAY); component.appendSibling(new TextComponentString(" " + message)); - Minecraft.getMinecraft().addScheduledTask(() -> Baritone.settings().logger.get().accept(component)); + Minecraft.getInstance().addScheduledTask(() -> Baritone.settings().logger.get().accept(component)); } } diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index 47a068546..5f393059f 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -100,7 +100,7 @@ public final void onTick(TickEvent event) { } } else { if (ctx.player().movementInput.getClass() == PlayerMovementInput.class) { // allow other movement inputs that aren't this one, e.g. for a freecam - ctx.player().movementInput = new MovementInputFromOptions(Minecraft.getMinecraft().gameSettings); + ctx.player().movementInput = new MovementInputFromOptions(Minecraft.getInstance().gameSettings); } } // only set it if it was previously incorrect diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 06e298be3..a66d3b4d2 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -34,6 +34,7 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -51,6 +52,7 @@ */ public final class PathRenderer implements Helper { + private static final ResourceLocation TEXTURE_BEACON_BEAM = new ResourceLocation("textures/entity/beacon_beam.png"); private static final Tessellator TESSELLATOR = Tessellator.getInstance(); private static final BufferBuilder BUFFER = TESSELLATOR.getBuffer(); @@ -60,8 +62,8 @@ public static void render(RenderEvent event, PathingBehavior behavior) { float partialTicks = event.getPartialTicks(); Goal goal = behavior.getGoal(); - int thisPlayerDimension = behavior.baritone.getPlayerContext().world().provider.getDimensionType().getId(); - int currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().provider.getDimensionType().getId(); + int thisPlayerDimension = behavior.baritone.getPlayerContext().world().getDimension().getType().getId(); + int currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().getDimension().getType().getId(); if (thisPlayerDimension != currentRenderViewDimension) { // this is a path for a bot in a different dimension, don't render it @@ -127,13 +129,13 @@ public static void render(RenderEvent event, PathingBehavior behavior) { public static void drawPath(IPath path, int startIndex, Entity player, float partialTicks, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F); - GlStateManager.glLineWidth(Baritone.settings().pathRenderLineWidthPixels.get()); + GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + GlStateManager.color4f(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F); + GlStateManager.lineWidth(Baritone.settings().pathRenderLineWidthPixels.get()); GlStateManager.disableTexture2D(); GlStateManager.depthMask(false); if (Baritone.settings().renderPathIgnoreDepth.get()) { - GlStateManager.disableDepth(); + GlStateManager.disableDepthTest(); } List positions = path.positions(); int next; @@ -170,13 +172,13 @@ public static void drawPath(IPath path, int startIndex, Entity player, float par } alpha = 0.4F * (1.0F - (float) (i - fadeStart) / (float) (fadeEnd - fadeStart)); } - GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], alpha); + GlStateManager.color4f(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], alpha); } drawLine(player, x1, y1, z1, x2, y2, z2, partialTicks); tessellator.draw(); } if (Baritone.settings().renderPathIgnoreDepth.get()) { - GlStateManager.enableDepth(); + GlStateManager.enableDepthTest(); } //GlStateManager.color(0.0f, 0.0f, 0.0f, 0.4f); GlStateManager.depthMask(true); @@ -198,14 +200,14 @@ public static void drawLine(Entity player, double bp1x, double bp1y, double bp1z public static void drawManySelectionBoxes(Entity player, Collection positions, float partialTicks, Color color) { GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F); - GlStateManager.glLineWidth(Baritone.settings().pathRenderLineWidthPixels.get()); + GlStateManager.blendFuncSeparate(770, 771, 1, 0); + GlStateManager.color4f(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F); + GlStateManager.lineWidth(Baritone.settings().pathRenderLineWidthPixels.get()); GlStateManager.disableTexture2D(); GlStateManager.depthMask(false); if (Baritone.settings().renderSelectionBoxesIgnoreDepth.get()) { - GlStateManager.disableDepth(); + GlStateManager.disableDepthTest(); } float expand = 0.002F; @@ -219,9 +221,9 @@ public static void drawManySelectionBoxes(Entity player, Collection po IBlockState state = bsi.get0(pos); AxisAlignedBB toDraw; if (state.getBlock().equals(Blocks.AIR)) { - toDraw = Blocks.DIRT.getDefaultState().getSelectedBoundingBox(player.world, pos); + toDraw = Blocks.DIRT.getDefaultState().getShape(player.world, pos).getBoundingBox(); } else { - toDraw = state.getSelectedBoundingBox(player.world, pos); + toDraw = state.getShape(player.world, pos).getBoundingBox(); } toDraw = toDraw.expand(expand, expand, expand).offset(-renderPosX, -renderPosY, -renderPosZ); BUFFER.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION); @@ -251,7 +253,7 @@ public static void drawManySelectionBoxes(Entity player, Collection po }); if (Baritone.settings().renderSelectionBoxesIgnoreDepth.get()) { - GlStateManager.enableDepth(); + GlStateManager.enableDepthTest(); } GlStateManager.depthMask(true); @@ -297,10 +299,10 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic if (Baritone.settings().renderGoalXZBeacon.get()) { glPushAttrib(GL_LIGHTING_BIT); - mc.getTextureManager().bindTexture(TileEntityBeaconRenderer.TEXTURE_BEACON_BEAM); + mc.getTextureManager().bindTexture(TEXTURE_BEACON_BEAM); if (Baritone.settings().renderGoalIgnoreDepth.get()) { - GlStateManager.disableDepth(); + GlStateManager.disableDepthTest(); } TileEntityBeaconRenderer.renderBeamSegment( @@ -309,14 +311,18 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic goalPos.getZ() - renderPosZ, partialTicks, 1.0, - player.world.getTotalWorldTime(), + player.world.getGameTime(), 0, 256, - color.getColorComponents(null) + color.getColorComponents(null), + + // Arguments filled by the private method lol + 0.2D, + 0.25D ); if (Baritone.settings().renderGoalIgnoreDepth.get()) { - GlStateManager.enableDepth(); + GlStateManager.enableDepthTest(); } glPopAttrib(); @@ -342,13 +348,13 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic } GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.6F); - GlStateManager.glLineWidth(Baritone.settings().goalRenderLineWidthPixels.get()); + GlStateManager.blendFuncSeparate(770, 771, 1, 0); + GlStateManager.color4f(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.6F); + GlStateManager.lineWidth(Baritone.settings().goalRenderLineWidthPixels.get()); GlStateManager.disableTexture2D(); GlStateManager.depthMask(false); if (Baritone.settings().renderGoalIgnoreDepth.get()) { - GlStateManager.disableDepth(); + GlStateManager.disableDepthTest(); } renderHorizontalQuad(minX, maxX, minZ, maxZ, y1); @@ -366,7 +372,7 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic TESSELLATOR.draw(); if (Baritone.settings().renderGoalIgnoreDepth.get()) { - GlStateManager.enableDepth(); + GlStateManager.enableDepthTest(); } GlStateManager.depthMask(true); GlStateManager.enableTexture2D(); diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index bfa4e2513..9566f2a64 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -24,7 +24,6 @@ import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.init.Enchantments; import net.minecraft.init.MobEffects; -import net.minecraft.item.Item.ToolMaterial; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; @@ -75,19 +74,13 @@ public double getStrVsBlock(IBlockState state) { } /** - * Evaluate the material cost of a possible tool. The priority matches the - * listed order in the Item.ToolMaterial enum. + * Evaluate the material cost of a possible tool. Will return 1 for tools, -1 for other * * @param itemStack a possibly empty ItemStack - * @return values range from -1 to 4 + * @return Either 1 or -1 */ private int getMaterialCost(ItemStack itemStack) { - if (itemStack.getItem() instanceof ItemTool) { - ItemTool tool = (ItemTool) itemStack.getItem(); - return ToolMaterial.valueOf(tool.getToolMaterialName()).ordinal(); - } else { - return -1; - } + return itemStack.getItem() instanceof ItemTool ? 1 : -1; } /** diff --git a/src/main/java/baritone/utils/accessor/IChunkProviderServer.java b/src/main/java/baritone/utils/accessor/IChunkProviderServer.java index e3e412b58..e527cb508 100644 --- a/src/main/java/baritone/utils/accessor/IChunkProviderServer.java +++ b/src/main/java/baritone/utils/accessor/IChunkProviderServer.java @@ -17,12 +17,10 @@ package baritone.utils.accessor; -import net.minecraft.world.WorldProvider; import net.minecraft.world.chunk.storage.IChunkLoader; /** * @author Brady - * @see WorldProvider * @since 8/4/2018 */ public interface IChunkProviderServer { From 87b9d3915c24767f2e79753779341318f7c52718 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 8 Mar 2019 15:03:58 -0600 Subject: [PATCH 002/935] Fix compiler errors unproject needs to be resolved --- .../java/baritone/utils/GuiClickMeme.java | 35 ++++++++++--------- .../java/baritone/utils/PathRenderer.java | 2 +- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/main/java/baritone/utils/GuiClickMeme.java b/src/main/java/baritone/utils/GuiClickMeme.java index 1163b1b0e..f4077533e 100644 --- a/src/main/java/baritone/utils/GuiClickMeme.java +++ b/src/main/java/baritone/utils/GuiClickMeme.java @@ -24,14 +24,13 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceFluidMode; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import org.lwjgl.BufferUtils; -import org.lwjgl.input.Mouse; -import org.lwjgl.util.glu.GLU; +import org.lwjgl.opengl.GL11; import java.awt.*; -import java.io.IOException; import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.util.Collections; @@ -54,34 +53,35 @@ public boolean doesGuiPauseGame() { } @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - int mx = Mouse.getX(); - int my = Mouse.getY(); + public void render(int mouseX, int mouseY, float partialTicks) { + double mx = mc.mouseHelper.getMouseX(); + double my = mc.mouseHelper.getMouseY(); Vec3d near = toWorld(mx, my, 0); Vec3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - Leijurv if (near != null && far != null) { Vec3d viewerPos = new Vec3d(mc.getRenderManager().viewerPosX, mc.getRenderManager().viewerPosY, mc.getRenderManager().viewerPosZ); - RayTraceResult result = mc.world.rayTraceBlocks(near.add(viewerPos), far.add(viewerPos), false, false, true); - if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) { + RayTraceResult result = mc.world.rayTraceBlocks(near.add(viewerPos), far.add(viewerPos), RayTraceFluidMode.NEVER, false, true); + if (result != null && result.type == RayTraceResult.Type.BLOCK) { meme = result.getBlockPos(); } } } @Override - protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { + public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { super.mouseClicked(mouseX, mouseY, mouseButton); if (mouseButton == 0) { BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalTwoBlocks(meme)); } else if (mouseButton == 1) { BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(meme.up())); } + return false; } - public void onRender(float partialTicks) { - GlStateManager.getFloat(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); - GlStateManager.getFloat(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); - GlStateManager.glGetInteger(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); + public void onRender() { + GlStateManager.getFloatv(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); + GlStateManager.getFloatv(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); + GL11.glGetIntegerv(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); if (meme != null) { Entity e = mc.getRenderViewEntity(); @@ -91,10 +91,11 @@ public void onRender(float partialTicks) { } public Vec3d toWorld(double x, double y, double z) { - boolean result = GLU.gluUnProject((float) x, (float) y, (float) z, MODELVIEW, PROJECTION, VIEWPORT, (FloatBuffer) TO_WORLD_BUFFER.clear()); - if (result) { - return new Vec3d(TO_WORLD_BUFFER.get(0), TO_WORLD_BUFFER.get(1), TO_WORLD_BUFFER.get(2)); - } + // TODO: Fix unproject +// boolean result = GLU.gluUnProject((float) x, (float) y, (float) z, MODELVIEW, PROJECTION, VIEWPORT, (FloatBuffer) TO_WORLD_BUFFER.clear()); +// if (result) { +// return new Vec3d(TO_WORLD_BUFFER.get(0), TO_WORLD_BUFFER.get(1), TO_WORLD_BUFFER.get(2)); +// } return null; } } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 5a474ea72..c64fcda68 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -62,7 +62,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { float partialTicks = event.getPartialTicks(); Goal goal = behavior.getGoal(); if (mc.currentScreen instanceof GuiClickMeme) { - ((GuiClickMeme) mc.currentScreen).onRender(partialTicks); + ((GuiClickMeme) mc.currentScreen).onRender(); } int thisPlayerDimension = behavior.baritone.getPlayerContext().world().getDimension().getType().getId(); From 84d961cbab637535ef97a63d7c5cd755ac4fde9c Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 8 Mar 2019 15:12:55 -0600 Subject: [PATCH 003/935] Fix usages of Setting#get() --- .../baritone/launch/mixins/MixinChunkRenderContainer.java | 2 +- src/main/java/baritone/utils/PathRenderer.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java b/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java index 1c10cf87f..cb699c229 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java @@ -45,7 +45,7 @@ private BlockPos getPosition(RenderChunk renderChunkIn) { if (Baritone.settings().renderCachedChunks.value && Minecraft.getInstance().getIntegratedServer() == null && Minecraft.getInstance().world.getChunk(renderChunkIn.getPosition()).isEmpty()) { GlStateManager.enableAlphaTest(); GlStateManager.enableBlend(); - GL14.glBlendColor(0, 0, 0, Baritone.settings().cachedChunksOpacity.get()); + GL14.glBlendColor(0, 0, 0, Baritone.settings().cachedChunksOpacity.value); GlStateManager.blendFuncSeparate(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE, GL_ZERO); } return renderChunkIn.getPosition(); diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index c64fcda68..be3237a8e 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -134,7 +134,7 @@ public static void drawPath(IPath path, int startIndex, Entity player, float par GlStateManager.enableBlend(); GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); GlStateManager.color4f(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F); - GlStateManager.lineWidth(Baritone.settings().pathRenderLineWidthPixels.get()); + GlStateManager.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); GlStateManager.disableTexture2D(); GlStateManager.depthMask(false); if (Baritone.settings().renderPathIgnoreDepth.value) { @@ -348,7 +348,7 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic GlStateManager.enableBlend(); GlStateManager.blendFuncSeparate(770, 771, 1, 0); GlStateManager.color4f(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.6F); - GlStateManager.lineWidth(Baritone.settings().goalRenderLineWidthPixels.get()); + GlStateManager.lineWidth(Baritone.settings().goalRenderLineWidthPixels.value); GlStateManager.disableTexture2D(); GlStateManager.depthMask(false); if (Baritone.settings().renderGoalIgnoreDepth.value) { From 1390e04435c251c3316044b5a4ce851deb4138ae Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 8 Mar 2019 15:14:52 -0600 Subject: [PATCH 004/935] Add versions in parenthesis for todos to fix stuff --- src/launch/java/baritone/launch/mixins/MixinRenderChunk.java | 2 +- src/main/java/baritone/utils/GuiClickMeme.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java b/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java index e37821f06..58fc4dc0e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java +++ b/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java @@ -36,7 +36,7 @@ @Mixin(RenderChunk.class) public class MixinRenderChunk { - // TODO: Resolve this issue + // TODO: (1.13.2) Resolve this issue // Looks like generateCache will return null if the chunk is empty, so we're probably going to want to hook that method /* @Redirect( diff --git a/src/main/java/baritone/utils/GuiClickMeme.java b/src/main/java/baritone/utils/GuiClickMeme.java index f4077533e..4449bf228 100644 --- a/src/main/java/baritone/utils/GuiClickMeme.java +++ b/src/main/java/baritone/utils/GuiClickMeme.java @@ -91,7 +91,7 @@ public void onRender() { } public Vec3d toWorld(double x, double y, double z) { - // TODO: Fix unproject + // TODO: (1.13.2) Fix unproject // boolean result = GLU.gluUnProject((float) x, (float) y, (float) z, MODELVIEW, PROJECTION, VIEWPORT, (FloatBuffer) TO_WORLD_BUFFER.clear()); // if (result) { // return new Vec3d(TO_WORLD_BUFFER.get(0), TO_WORLD_BUFFER.get(1), TO_WORLD_BUFFER.get(2)); From e2cc51908bfb6e32d843734204c9eebfd232f17a Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 8 Mar 2019 23:18:00 -0600 Subject: [PATCH 005/935] Notch builds --- build.gradle | 8 ++++++-- src/api/java/baritone/api/Settings.java | 6 +++--- src/main/java/baritone/process/MineProcess.java | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 2aebcc50a..c6be17517 100755 --- a/build.gradle +++ b/build.gradle @@ -25,14 +25,17 @@ buildscript { name = 'forge' url = 'http://files.minecraftforge.net/maven' } + maven { + name = 'impactdevelopment-repo' + url = 'https://impactdevelopment.github.io/maven/' + } } dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true + classpath group: 'com.github.ImpactDevelopment', name: 'ForgeGradle', version: '3.0.111' } } - import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask @@ -76,6 +79,7 @@ minecraft { minecraft { mappings channel: 'snapshot', version: '20190307-1.13.1' + reobfMappings 'notch' runs { client { diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 58c34a142..41b5c7bc7 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -125,9 +125,9 @@ public final class Settings { * Blocks that Baritone is allowed to place (as throwaway, for sneak bridging, pillaring, etc.) */ public final Setting> acceptableThrowawayItems = new Setting<>(new ArrayList<>(Arrays.asList( - Item.getItemFromBlock(Blocks.DIRT), - Item.getItemFromBlock(Blocks.COBBLESTONE), - Item.getItemFromBlock(Blocks.NETHERRACK) + Blocks.DIRT.asItem(), + Blocks.COBBLESTONE.asItem(), + Blocks.NETHERRACK.asItem() ))); /** diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 60c316660..7ef3c9ecd 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -189,7 +189,7 @@ public static List droppedItemsScan(List mining, World world) { Set searchingFor = new HashSet<>(); for (Block block : mining) { Item drop = block.getItemDropped(block.getDefaultState(), world, null, 0).asItem(); - Item ore = Item.getItemFromBlock(block); + Item ore = block.asItem(); searchingFor.add(drop); searchingFor.add(ore); } From 5a165619543e6b67720a187cc96da77052673c90 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 12 Mar 2019 01:05:39 -0500 Subject: [PATCH 006/935] Working 1.13.2 development environment Including a couple bugfixes to bad 1.13.2 code!!! --- build.gradle | 52 ++++++++----- .../java/baritone/launch/BaritoneTweaker.java | 1 - .../java/baritone/launch/LaunchTesting.java | 77 +++++++++++++++++++ .../java/baritone/cache/WorldProvider.java | 2 +- .../pathing/movement/MovementHelper.java | 4 +- .../java/baritone/utils/PathRenderer.java | 13 ++-- 6 files changed, 121 insertions(+), 28 deletions(-) create mode 100644 src/launch/java/baritone/launch/LaunchTesting.java diff --git a/build.gradle b/build.gradle index c6be17517..5e3a26f7a 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.2.3' +version '1.3.0' buildscript { repositories { @@ -32,7 +32,8 @@ buildscript { } dependencies { - classpath group: 'com.github.ImpactDevelopment', name: 'ForgeGradle', version: '3.0.111' + classpath group: 'com.github.ImpactDevelopment', name: 'ForgeGradle', version: '3.0.115' + classpath group: 'com.github.ImpactDevelopment', name: 'MixinGradle', version: '0.6.1' } } @@ -40,9 +41,8 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask apply plugin: 'java' -//apply plugin: 'net.minecraftforge.gradle.tweaker-client' -//apply plugin: 'org.spongepowered.mixin' apply plugin: 'net.minecraftforge.gradle' +apply plugin: 'org.spongepowered.mixin' sourceCompatibility = targetCompatibility = '1.8' compileJava { @@ -58,24 +58,17 @@ sourceSets { compileClasspath += api.output } test { - compileClasspath += api.output + compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output } launch { compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output } } -/* -minecraft { - version = '1.12.2' - mappings = 'stable_39' - tweakClass = 'baritone.launch.BaritoneTweaker' - runDir = 'run' - - // The sources jar should use SRG names not MCP to ensure compatibility with all mappings - makeObfSourceJar = true +task sourceJar(type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.api.allSource } -*/ minecraft { mappings channel: 'snapshot', version: '20190307-1.13.1' @@ -85,6 +78,28 @@ minecraft { client { workingDirectory project.file('run') source sourceSets.main + + main 'baritone.launch.LaunchTesting' + + environment 'assetIndex', '{asset_index}' + environment 'assetDirectory', downloadAssets.output + environment 'nativesDirectory', extractNatives.output + + environment 'tweakClass', 'baritone.launch.BaritoneTweaker' + } + + autoTest { + workingDirectory project.file('autotest') + source sourceSets.main + + main 'baritone.launch.LaunchTesting' + + environment 'assetIndex', '{asset_index}' + environment 'assetDirectory', downloadAssets.output + environment 'nativesDirectory', extractNatives.output + + environment 'tweakClass', 'baritone.launch.BaritoneTweaker' + environment 'BARITONE_AUTO_TEST', 'true' } } } @@ -106,7 +121,10 @@ repositories { dependencies { minecraft 'com.github.ImpactDevelopment:Vanilla:1.13.2' - runtime launchCompile('net.minecraft:launchwrapper:1.12') + runtime launchCompile('net.minecraft:launchwrapper:1.12') { + exclude module: 'lwjgl' + } + runtime launchCompile('org.ow2.asm:asm-debug-all:5.2') runtime launchCompile('com.github.ImpactDevelopment:SimpleTweaker:1.2') runtime launchCompile('org.spongepowered:mixin:0.7.11-SNAPSHOT') { // Mixin includes a lot of dependencies that are too up-to-date @@ -120,12 +138,10 @@ dependencies { testImplementation 'junit:junit:4.12' } -/* mixin { defaultObfuscationEnv searge add sourceSets.launch, 'mixins.baritone.refmap.json' } -*/ javadoc { options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error diff --git a/src/launch/java/baritone/launch/BaritoneTweaker.java b/src/launch/java/baritone/launch/BaritoneTweaker.java index 8201d60fd..b9db9b6a5 100644 --- a/src/launch/java/baritone/launch/BaritoneTweaker.java +++ b/src/launch/java/baritone/launch/BaritoneTweaker.java @@ -31,7 +31,6 @@ * @author Brady * @since 7/31/2018 */ -@Deprecated public class BaritoneTweaker extends SimpleTweaker { @Override diff --git a/src/launch/java/baritone/launch/LaunchTesting.java b/src/launch/java/baritone/launch/LaunchTesting.java new file mode 100644 index 000000000..0bc95b7a8 --- /dev/null +++ b/src/launch/java/baritone/launch/LaunchTesting.java @@ -0,0 +1,77 @@ +/* + * 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; + +import com.google.common.base.Strings; +import net.minecraft.launchwrapper.Launch; + +import java.io.File; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Based on GradleStart from ForgeGradle 2.3 + * + * @author Brady + * @since 3/11/2019 + */ +public class LaunchTesting { + + public static void main(String[] args) { + Map arguments = new HashMap<>(); + + hackNatives(); + arguments.put("version", "BaritownedDeveloperEnvironment"); + arguments.put("assetIndex", System.getenv("assetIndex")); + arguments.put("assetsDir", System.getenv().getOrDefault("assetDirectory", "assets")); + arguments.put("accessToken", "FML"); + arguments.put("userProperties", "{}"); + arguments.put("tweakClass", System.getenv("tweakClass")); + + List argsArray = new ArrayList<>(); + arguments.forEach((k, v) -> { + argsArray.add("--" + k); + argsArray.add(v); + }); + + Launch.main(argsArray.toArray(new String[0])); + } + + private static void hackNatives() { + String paths = System.getProperty("java.library.path"); + String nativesDir = System.getenv().get("nativesDirectory"); + + if (Strings.isNullOrEmpty(paths)) + paths = nativesDir; + else + paths += File.pathSeparator + nativesDir; + + System.setProperty("java.library.path", paths); + + // hack the classloader now. + try + { + final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths"); + sysPathsField.setAccessible(true); + sysPathsField.set(null, null); + } catch(Throwable ignored) {} + } +} diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 3e8c03a82..329e35a8d 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -93,7 +93,7 @@ public final void initWorld(DimensionType dimension) { } catch (IOException ignored) {} // We will actually store the world data in a subfolder: "DIM" - Path dir = new File(directory, "DIM" + dimension).toPath(); + Path dir = new File(directory, "DIM" + dimension.getId()).toPath(); if (!Files.exists(dir)) { try { Files.createDirectories(dir); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index c45d5ecda..c4b0bd9e1 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -502,7 +502,7 @@ static boolean isLiquid(IBlockState blockState) { static boolean possiblyFlowing(IBlockState state) { IFluidState fluidState = state.getFluidState(); return fluidState.getFluid() instanceof FlowingFluid - && state.get(FlowingFluid.LEVEL_1_8) != 0; + && fluidState.getFluid().getLevel(fluidState) != 8; } static boolean isFlowing(int x, int y, int z, IBlockState state, BlockStateInterface bsi) { @@ -510,7 +510,7 @@ static boolean isFlowing(int x, int y, int z, IBlockState state, BlockStateInter if (!(fluidState.getFluid() instanceof FlowingFluid)) { return false; } - if (fluidState.get(FlowingFluid.LEVEL_1_8) != 0) { + if (fluidState.getFluid().getLevel(fluidState) != 8) { return true; } return possiblyFlowing(bsi.get0(x + 1, y, z)) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index be3237a8e..473543418 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -23,6 +23,7 @@ import baritone.api.pathing.calc.IPath; import baritone.api.pathing.goals.*; import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.IPlayerContext; import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; @@ -38,6 +39,8 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; import java.awt.*; import java.util.Collection; @@ -218,12 +221,10 @@ public static void drawManySelectionBoxes(Entity player, Collection po BlockStateInterface bsi = new BlockStateInterface(BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext()); // TODO this assumes same dimension between primary baritone and render view? is this safe? positions.forEach(pos -> { IBlockState state = bsi.get0(pos); - AxisAlignedBB toDraw; - if (state.getBlock().equals(Blocks.AIR)) { - toDraw = Blocks.DIRT.getDefaultState().getShape(player.world, pos).getBoundingBox(); - } else { - toDraw = state.getShape(player.world, pos).getBoundingBox(); - } + + VoxelShape shape = state.getShape(player.world, pos); + AxisAlignedBB toDraw = shape.isEmpty() ? VoxelShapes.fullCube().getBoundingBox() : shape.getBoundingBox(); + toDraw = toDraw.expand(expand, expand, expand).offset(-mc.getRenderManager().viewerPosX, -mc.getRenderManager().viewerPosY, -mc.getRenderManager().viewerPosZ); BUFFER.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION); BUFFER.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); From 82d77a7bacb12e7eec37ea072e1c9bd97830ecc6 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 12 Mar 2019 01:43:03 -0500 Subject: [PATCH 007/935] Update MixinGradle to 0.6.2 Includes fix ensuring that the SRGs are generated prior to Mixin annotation processing --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5e3a26f7a..9fea94d61 100755 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ buildscript { dependencies { classpath group: 'com.github.ImpactDevelopment', name: 'ForgeGradle', version: '3.0.115' - classpath group: 'com.github.ImpactDevelopment', name: 'MixinGradle', version: '0.6.1' + classpath group: 'com.github.ImpactDevelopment', name: 'MixinGradle', version: '0.6.2' } } From 4cf6783622ee66ea3fe88b22af48c50c6fb1b12c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 09:38:05 -0700 Subject: [PATCH 008/935] fix the tests --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 9fea94d61..fb70ab02e 100755 --- a/build.gradle +++ b/build.gradle @@ -59,6 +59,7 @@ sourceSets { } test { compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output + runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output } launch { compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output From 1f2e267e3d590204317e655c5a32cb46c53e8728 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 15:41:58 -0700 Subject: [PATCH 009/935] fix a bunch of scuff --- src/api/java/baritone/api/utils/RotationUtils.java | 7 +++++-- .../java/baritone/pathing/movement/MovementHelper.java | 4 ++-- .../pathing/movement/movements/MovementPillar.java | 9 ++++++++- src/main/java/baritone/process/CustomGoalProcess.java | 2 +- src/main/java/baritone/process/GetToBlockProcess.java | 2 +- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 9e810e187..88c315bcd 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -24,7 +24,10 @@ import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.VoxelShape; import java.util.Optional; @@ -176,7 +179,7 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, } IBlockState state = entity.world.getBlockState(pos); - VoxelShape shape = state.getCollisionShape(entity.world, pos); + VoxelShape shape = state.getRaytraceShape(entity.world, pos); for (Vec3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { double xDiff = shape.getStart(EnumFacing.Axis.X) * sideOffset.x + shape.getEnd(EnumFacing.Axis.X) * (1 - sideOffset.x); double yDiff = shape.getStart(EnumFacing.Axis.Y) * sideOffset.y + shape.getEnd(EnumFacing.Axis.Y) * (1 - sideOffset.y); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index c4b0bd9e1..7083e9c78 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -188,7 +188,7 @@ static boolean isReplacable(int x, int y, int z, IBlockState state, BlockStateIn * } */ Block block = state.getBlock(); - if (block == Blocks.AIR || isWater(state)) { + if (block == Blocks.AIR) { // early return for common cases hehe return true; } @@ -500,7 +500,7 @@ static boolean isLiquid(IBlockState blockState) { } static boolean possiblyFlowing(IBlockState state) { - IFluidState fluidState = state.getFluidState(); + IFluidState fluidState = state.getFluidState(); return fluidState.getFluid() instanceof FlowingFluid && fluidState.getFluid().getLevel(fluidState) != 8; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 50b353d61..74e9b88d2 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -36,6 +36,7 @@ import net.minecraft.util.math.Vec3d; import java.util.Objects; +import java.util.Optional; public class MovementPillar extends Movement { @@ -79,7 +80,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (!ladder && !context.canPlaceThrowawayAt(x, y, z)) { // we need to place a block where we started to jump on it return COST_INF; } - if (MovementHelper.isLiquid(fromState) || (MovementHelper.isLiquid(fromDown) && context.assumeWalkOnWater)) { + if ((MovementHelper.isLiquid(fromState) && !MovementHelper.canPlaceAgainst(fromDown)) || (MovementHelper.isLiquid(fromDown) && context.assumeWalkOnWater)) { // otherwise, if we're standing in water, we cannot pillar // if we're standing on water and assumeWalkOnWater is true, we cannot pillar // if we're standing on water and assumeWalkOnWater is false, we must have ascended to here, or sneak backplaced, so it is possible to pillar again @@ -162,6 +163,7 @@ public MovementState updateState(MovementState state) { state.setInput(Input.MOVE_FORWARD, true); } if (ctx.playerFeet().equals(dest)) { + logDebug("wtf2"); return state.setStatus(MovementStatus.SUCCESS); } return state; @@ -184,6 +186,7 @@ public MovementState updateState(MovementState state) { } if (ctx.playerFeet().equals(against.up()) || ctx.playerFeet().equals(dest)) { + logDebug("wtf3"); return state.setStatus(MovementStatus.SUCCESS); } if (MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.down()))) { @@ -231,6 +234,10 @@ public MovementState updateState(MovementState state) { Block fr = frState.getBlock(); // TODO: Evaluate usage of getMaterial().isReplaceable() if (!(fr instanceof BlockAir || frState.getMaterial().isReplaceable())) { + Optional reachable = RotationUtils.reachable(ctx.player(), src, ctx.playerController().getBlockReachDistance()); + if (reachable.isPresent()) { + state.setTarget(new MovementState.MovementTarget(reachable.get(), true)); + } state.setInput(Input.CLICK_LEFT, true); blockIsThere = false; } else if (ctx.player().isSneaking() && (Objects.equals(src.down(), ctx.objectMouseOver().getBlockPos()) || Objects.equals(src, ctx.objectMouseOver().getBlockPos())) && ctx.player().posY > dest.getY() + 0.1) { diff --git a/src/main/java/baritone/process/CustomGoalProcess.java b/src/main/java/baritone/process/CustomGoalProcess.java index 2c8a3c339..0ec2ba78c 100644 --- a/src/main/java/baritone/process/CustomGoalProcess.java +++ b/src/main/java/baritone/process/CustomGoalProcess.java @@ -88,7 +88,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { onLostControl(); return new PathingCommand(this.goal, PathingCommandType.CANCEL_AND_SET_GOAL); } - if (this.goal == null || this.goal.isInGoal(ctx.playerFeet())) { + if (this.goal == null || (this.goal.isInGoal(ctx.playerFeet()) && ctx.player().onGround)) { onLostControl(); // we're there xd return new PathingCommand(this.goal, PathingCommandType.CANCEL_AND_SET_GOAL); } diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index c96902738..757ca31ec 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -101,7 +101,7 @@ public boolean isInGoal(int x, int y, int z) { CalculationContext context = new CalculationContext(baritone, true); Baritone.getExecutor().execute(() -> rescan(current, context)); } - if (goal.isInGoal(ctx.playerFeet()) && isSafeToCancel) { + if (goal.isInGoal(ctx.playerFeet()) && ctx.player().onGround && isSafeToCancel) { // we're there if (rightClickOnArrival(gettingTo)) { if (rightClick()) { From 6fe49380ba088e060014ce2aa6ab0b179e051717 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 15:42:25 -0700 Subject: [PATCH 010/935] pwned --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index de408ec06..270356275 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ build/ classes/ *.class +/out + # IntelliJ Files .idea/ *.iml @@ -18,4 +20,4 @@ classes/ # Copyright Files !/.idea/copyright/Baritone.xml -!/.idea/copyright/profiles_settings.xml \ No newline at end of file +!/.idea/copyright/profiles_settings.xml From 11e503a02220e0f294be2a37eb1c397e22d88b13 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 16:17:43 -0700 Subject: [PATCH 011/935] many fixes --- src/api/java/baritone/api/utils/RotationUtils.java | 2 +- .../java/baritone/pathing/movement/MovementHelper.java | 7 ++++--- .../pathing/movement/movements/MovementPillar.java | 2 -- src/main/java/baritone/process/CustomGoalProcess.java | 2 +- src/main/java/baritone/process/GetToBlockProcess.java | 2 +- src/main/java/baritone/utils/PathRenderer.java | 4 ++-- 6 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 88c315bcd..c925e44f2 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -179,7 +179,7 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, } IBlockState state = entity.world.getBlockState(pos); - VoxelShape shape = state.getRaytraceShape(entity.world, pos); + VoxelShape shape = state.getShape(entity.world, pos); for (Vec3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { double xDiff = shape.getStart(EnumFacing.Axis.X) * sideOffset.x + shape.getEnd(EnumFacing.Axis.X) * (1 - sideOffset.x); double yDiff = shape.getStart(EnumFacing.Axis.Y) * sideOffset.y + shape.getEnd(EnumFacing.Axis.Y) * (1 - sideOffset.y); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 7083e9c78..e44be1349 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -83,7 +83,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo if (block == Blocks.AIR) { // early return for most common case return true; } - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull) { + if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block == Blocks.BUBBLE_COLUMN) { return false; } if (block instanceof BlockDoor || block instanceof BlockFenceGate) { @@ -258,7 +258,8 @@ static boolean avoidWalkingInto(IBlockState state) { || block == Blocks.CACTUS || block == Blocks.FIRE || block == Blocks.END_PORTAL - || block == Blocks.COBWEB; + || block == Blocks.COBWEB + || block == Blocks.BUBBLE_COLUMN; } /** @@ -275,7 +276,7 @@ static boolean avoidWalkingInto(IBlockState state) { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR || block == Blocks.MAGMA_BLOCK) { + if (block == Blocks.AIR || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { // early return for most common case (air) // plus magma, which is a normal cube but it hurts you return false; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 74e9b88d2..b620dfe9d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -163,7 +163,6 @@ public MovementState updateState(MovementState state) { state.setInput(Input.MOVE_FORWARD, true); } if (ctx.playerFeet().equals(dest)) { - logDebug("wtf2"); return state.setStatus(MovementStatus.SUCCESS); } return state; @@ -186,7 +185,6 @@ public MovementState updateState(MovementState state) { } if (ctx.playerFeet().equals(against.up()) || ctx.playerFeet().equals(dest)) { - logDebug("wtf3"); return state.setStatus(MovementStatus.SUCCESS); } if (MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.down()))) { diff --git a/src/main/java/baritone/process/CustomGoalProcess.java b/src/main/java/baritone/process/CustomGoalProcess.java index 0ec2ba78c..fe1de0286 100644 --- a/src/main/java/baritone/process/CustomGoalProcess.java +++ b/src/main/java/baritone/process/CustomGoalProcess.java @@ -88,7 +88,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { onLostControl(); return new PathingCommand(this.goal, PathingCommandType.CANCEL_AND_SET_GOAL); } - if (this.goal == null || (this.goal.isInGoal(ctx.playerFeet()) && ctx.player().onGround)) { + if (this.goal == null || (this.goal.isInGoal(ctx.playerFeet()) && this.goal.isInGoal(baritone.getPathingBehavior().pathStart()))) { onLostControl(); // we're there xd return new PathingCommand(this.goal, PathingCommandType.CANCEL_AND_SET_GOAL); } diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 757ca31ec..8ca30abbf 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -101,7 +101,7 @@ public boolean isInGoal(int x, int y, int z) { CalculationContext context = new CalculationContext(baritone, true); Baritone.getExecutor().execute(() -> rescan(current, context)); } - if (goal.isInGoal(ctx.playerFeet()) && ctx.player().onGround && isSafeToCancel) { + if (goal.isInGoal(ctx.playerFeet()) && goal.isInGoal(baritone.getPathingBehavior().pathStart()) && isSafeToCancel) { // we're there if (rightClickOnArrival(gettingTo)) { if (rightClick()) { diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 473543418..ade3bda72 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -23,7 +23,6 @@ import baritone.api.pathing.calc.IPath; import baritone.api.pathing.goals.*; import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.IPlayerContext; import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; @@ -34,7 +33,6 @@ import net.minecraft.client.renderer.tileentity.TileEntityBeaconRenderer; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -224,6 +222,8 @@ public static void drawManySelectionBoxes(Entity player, Collection po VoxelShape shape = state.getShape(player.world, pos); AxisAlignedBB toDraw = shape.isEmpty() ? VoxelShapes.fullCube().getBoundingBox() : shape.getBoundingBox(); + System.out.println("Shape is " + shape); + System.out.println("Drawing " + toDraw); toDraw = toDraw.expand(expand, expand, expand).offset(-mc.getRenderManager().viewerPosX, -mc.getRenderManager().viewerPosY, -mc.getRenderManager().viewerPosZ); BUFFER.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION); From 82505ddb01cc1bdef9c971589044a7fa9079d2c7 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 17:18:52 -0700 Subject: [PATCH 012/935] online mode via env --- .../java/baritone/launch/LaunchTesting.java | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/launch/java/baritone/launch/LaunchTesting.java b/src/launch/java/baritone/launch/LaunchTesting.java index 0bc95b7a8..21607ae34 100644 --- a/src/launch/java/baritone/launch/LaunchTesting.java +++ b/src/launch/java/baritone/launch/LaunchTesting.java @@ -18,10 +18,17 @@ package baritone.launch; import com.google.common.base.Strings; +import com.google.gson.GsonBuilder; +import com.mojang.authlib.Agent; +import com.mojang.authlib.exceptions.AuthenticationException; +import com.mojang.authlib.properties.PropertyMap; +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication; import net.minecraft.launchwrapper.Launch; import java.io.File; import java.lang.reflect.Field; +import java.net.Proxy; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -45,6 +52,10 @@ public static void main(String[] args) { arguments.put("accessToken", "FML"); arguments.put("userProperties", "{}"); arguments.put("tweakClass", System.getenv("tweakClass")); + String password = System.getenv("password"); + if (password != null && !password.isEmpty()) { + attemptLogin(arguments, System.getenv("username"), System.getenv("password")); + } List argsArray = new ArrayList<>(); arguments.forEach((k, v) -> { @@ -67,11 +78,28 @@ private static void hackNatives() { System.setProperty("java.library.path", paths); // hack the classloader now. - try - { + try { final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths"); sysPathsField.setAccessible(true); sysPathsField.set(null, null); - } catch(Throwable ignored) {} + } catch (Throwable ignored) {} + } + + private static void attemptLogin(Map argMap, String username, String password) { + YggdrasilUserAuthentication auth = (YggdrasilUserAuthentication) (new YggdrasilAuthenticationService(Proxy.NO_PROXY, "1")).createUserAuthentication(Agent.MINECRAFT); + auth.setUsername(username); + auth.setPassword(password); + + try { + auth.logIn(); + } catch (AuthenticationException var4) { + throw new RuntimeException(var4); + } + + argMap.put("accessToken", auth.getAuthenticatedToken()); + argMap.put("uuid", auth.getSelectedProfile().getId().toString().replace("-", "")); + argMap.put("username", auth.getSelectedProfile().getName()); + argMap.put("userType", auth.getUserType().getName()); + argMap.put("userProperties", (new GsonBuilder()).registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer()).create().toJson(auth.getUserProperties())); } } From 6bd2e90cfd09c8682a98e1d2cbc65eff82696289 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 17:18:58 -0700 Subject: [PATCH 013/935] crash when pathing near shulker boxes --- src/main/java/baritone/pathing/movement/MovementHelper.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index e44be1349..7a49bb050 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -83,7 +83,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo if (block == Blocks.AIR) { // early return for most common case return true; } - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block == Blocks.BUBBLE_COLUMN) { + if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block == Blocks.BUBBLE_COLUMN || block instanceof BlockShulkerBox || block instanceof BlockSlab) { return false; } if (block instanceof BlockDoor || block instanceof BlockFenceGate) { @@ -169,7 +169,8 @@ static boolean fullyPassable(IBlockState state) { || !state.getFluidState().isEmpty() || block instanceof BlockTrapDoor || block instanceof BlockEndPortal - || block instanceof BlockSkull) { + || block instanceof BlockSkull + || block instanceof BlockShulkerBox) { return false; } // door, fence gate, liquid, trapdoor have been accounted for, nothing else uses the world or pos parameters From ddfeca69472508baa2e410a8334915f93872cbec Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 18:00:30 -0700 Subject: [PATCH 014/935] unproject click cursed --- .../java/baritone/utils/GuiClickMeme.java | 197 +++++++++++++++++- 1 file changed, 192 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/utils/GuiClickMeme.java b/src/main/java/baritone/utils/GuiClickMeme.java index d181c11df..07bf5aa17 100644 --- a/src/main/java/baritone/utils/GuiClickMeme.java +++ b/src/main/java/baritone/utils/GuiClickMeme.java @@ -53,9 +53,13 @@ public boolean doesGuiPauseGame() { } @Override + public void render(int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHelper.getMouseX(); double my = mc.mouseHelper.getMouseY(); + my = mc.mainWindow.getHeight() - my; + my *= 2; + mx *= 2; Vec3d near = toWorld(mx, my, 0); Vec3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv if (near != null && far != null) { @@ -91,11 +95,194 @@ public void onRender() { } public Vec3d toWorld(double x, double y, double z) { - // TODO: (1.13.2) Fix unproject -// boolean result = GLU.gluUnProject((float) x, (float) y, (float) z, MODELVIEW, PROJECTION, VIEWPORT, (FloatBuffer) TO_WORLD_BUFFER.clear()); -// if (result) { -// return new Vec3d(TO_WORLD_BUFFER.get(0), TO_WORLD_BUFFER.get(1), TO_WORLD_BUFFER.get(2)); -// } + boolean result = gluUnProject((float) x, (float) y, (float) z, MODELVIEW, PROJECTION, VIEWPORT, (FloatBuffer) TO_WORLD_BUFFER.clear()); + if (result) { + return new Vec3d(TO_WORLD_BUFFER.get(0), TO_WORLD_BUFFER.get(1), TO_WORLD_BUFFER.get(2)); + } return null; } + + // skidded from lwjgl2 :ok_hand: + // its uhhhhh mit license so its ok + // here is the uhh license + /* + * Copyright (c) 2002-2007 Lightweight Java Game Library Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'Light Weight Java Game Library' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + public static boolean gluUnProject( + float winx, + float winy, + float winz, + FloatBuffer modelMatrix, + FloatBuffer projMatrix, + IntBuffer viewport, + FloatBuffer obj_pos) { + FloatBuffer finalMatrix = BufferUtils.createFloatBuffer(16); + float[] in = new float[4]; + float[] out = new float[4]; + + __gluMultMatricesf(modelMatrix, projMatrix, finalMatrix); + + if (!__gluInvertMatrixf(finalMatrix, finalMatrix)) + return false; + + in[0] = winx; + in[1] = winy; + in[2] = winz; + in[3] = 1.0f; + + // Map x and y from window coordinates + in[0] = (in[0] - viewport.get(viewport.position() + 0)) / viewport.get(viewport.position() + 2); + in[1] = (in[1] - viewport.get(viewport.position() + 1)) / viewport.get(viewport.position() + 3); + + // Map to range -1 to 1 + in[0] = in[0] * 2 - 1; + in[1] = in[1] * 2 - 1; + in[2] = in[2] * 2 - 1; + + __gluMultMatrixVecf(finalMatrix, in, out); + + if (out[3] == 0.0) + return false; + + out[3] = 1.0f / out[3]; + + obj_pos.put(obj_pos.position() + 0, out[0] * out[3]); + obj_pos.put(obj_pos.position() + 1, out[1] * out[3]); + obj_pos.put(obj_pos.position() + 2, out[2] * out[3]); + + return true; + } + + private static void __gluMultMatrixVecf(FloatBuffer m, float[] in, float[] out) { + for (int i = 0; i < 4; i++) { + out[i] = + in[0] * m.get(m.position() + 0 * 4 + i) + + in[1] * m.get(m.position() + 1 * 4 + i) + + in[2] * m.get(m.position() + 2 * 4 + i) + + in[3] * m.get(m.position() + 3 * 4 + i); + + } + } + + private static void __gluMultMatricesf(FloatBuffer a, FloatBuffer b, FloatBuffer r) { + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + r.put(r.position() + i * 4 + j, + a.get(a.position() + i * 4 + 0) * b.get(b.position() + 0 * 4 + j) + a.get(a.position() + i * 4 + 1) * b.get(b.position() + 1 * 4 + j) + a.get(a.position() + i * 4 + 2) * b.get(b.position() + 2 * 4 + j) + a.get(a.position() + i * 4 + 3) * b.get(b.position() + 3 * 4 + j)); + } + } + } + + private static boolean __gluInvertMatrixf(FloatBuffer src, FloatBuffer inverse) { + int i, j, k, swap; + float t; + FloatBuffer temp = BufferUtils.createFloatBuffer(16); + + + for (i = 0; i < 16; i++) { + temp.put(i, src.get(i + src.position())); + } + __gluMakeIdentityf(inverse); + + for (i = 0; i < 4; i++) { + /* + * * Look for largest element in column + */ + swap = i; + for (j = i + 1; j < 4; j++) { + /* + * if (fabs(temp[j][i]) > fabs(temp[i][i])) { swap = j; + */ + if (Math.abs(temp.get(j * 4 + i)) > Math.abs(temp.get(i * 4 + i))) { + swap = j; + } + } + + if (swap != i) { + /* + * * Swap rows. + */ + for (k = 0; k < 4; k++) { + t = temp.get(i * 4 + k); + temp.put(i * 4 + k, temp.get(swap * 4 + k)); + temp.put(swap * 4 + k, t); + + t = inverse.get(i * 4 + k); + inverse.put(i * 4 + k, inverse.get(swap * 4 + k)); + //inverse.put((i << 2) + k, inverse.get((swap << 2) + k)); + inverse.put(swap * 4 + k, t); + //inverse.put((swap << 2) + k, t); + } + } + + if (temp.get(i * 4 + i) == 0) { + /* + * * No non-zero pivot. The matrix is singular, which shouldn't * + * happen. This means the user gave us a bad matrix. + */ + return false; + } + + t = temp.get(i * 4 + i); + for (k = 0; k < 4; k++) { + temp.put(i * 4 + k, temp.get(i * 4 + k) / t); + inverse.put(i * 4 + k, inverse.get(i * 4 + k) / t); + } + for (j = 0; j < 4; j++) { + if (j != i) { + t = temp.get(j * 4 + i); + for (k = 0; k < 4; k++) { + temp.put(j * 4 + k, temp.get(j * 4 + k) - temp.get(i * 4 + k) * t); + inverse.put(j * 4 + k, inverse.get(j * 4 + k) - inverse.get(i * 4 + k) * t); + /*inverse.put( + (j << 2) + k, + inverse.get((j << 2) + k) - inverse.get((i << 2) + k) * t);*/ + } + } + } + } + return true; + } + + private static final float[] IDENTITY_MATRIX = + new float[]{ + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f}; + + private static void __gluMakeIdentityf(FloatBuffer m) { + int oldPos = m.position(); + m.put(IDENTITY_MATRIX); + m.position(oldPos); + } } From 0ddc47f4732b990c2ed3db7940c75437fd311f64 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 18:21:29 -0700 Subject: [PATCH 015/935] i am rarted --- src/main/java/baritone/utils/PathRenderer.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index ade3bda72..283220059 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -222,9 +222,7 @@ public static void drawManySelectionBoxes(Entity player, Collection po VoxelShape shape = state.getShape(player.world, pos); AxisAlignedBB toDraw = shape.isEmpty() ? VoxelShapes.fullCube().getBoundingBox() : shape.getBoundingBox(); - System.out.println("Shape is " + shape); - System.out.println("Drawing " + toDraw); - + toDraw = toDraw.offset(pos); toDraw = toDraw.expand(expand, expand, expand).offset(-mc.getRenderManager().viewerPosX, -mc.getRenderManager().viewerPosY, -mc.getRenderManager().viewerPosZ); BUFFER.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION); BUFFER.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); From 92e39b5d1d5056c9fd2b5d48ddbab109382544b8 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 18:45:54 -0700 Subject: [PATCH 016/935] its over its done --- .../launch/mixins/MixinRenderChunk.java | 36 --------------- .../launch/mixins/MixinRenderChunkCache.java | 46 +++++++++++++++++++ src/launch/resources/mixins.baritone.json | 1 + 3 files changed, 47 insertions(+), 36 deletions(-) create mode 100644 src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java b/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java index 58fc4dc0e..c5b0d7b44 100644 --- a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java +++ b/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java @@ -36,42 +36,6 @@ @Mixin(RenderChunk.class) public class MixinRenderChunk { - // TODO: (1.13.2) Resolve this issue - // Looks like generateCache will return null if the chunk is empty, so we're probably going to want to hook that method - /* - @Redirect( - method = "rebuildChunk", - at = @At( - value = "INVOKE", - target = "net/minecraft/world/ChunkCache.isEmpty()Z" - ) - ) - private boolean isEmpty(ChunkCache chunkCache) { - if (!chunkCache.isEmpty()) { - return false; - } - if (Baritone.settings().renderCachedChunks.value && Minecraft.getInstance().getIntegratedServer() == null) { - Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); - IPlayerContext ctx = baritone.getPlayerContext(); - if (ctx.player() != null && ctx.world() != null && baritone.bsi != null) { - BlockPos position = ((RenderChunk) (Object) this).getPosition(); - // RenderChunk extends from -1,-1,-1 to +16,+16,+16 - // then the constructor of ChunkCache extends it one more (presumably to get things like the connected status of fences? idk) - // so if ANY of the adjacent chunks are loaded, we are unempty - for (int dx = -1; dx <= 1; dx++) { - for (int dz = -1; dz <= 1; dz++) { - if (baritone.bsi.isLoaded(16 * dx + position.getX(), 16 * dz + position.getZ())) { - return false; - } - } - } - } - } - - return true; - } - */ - @Redirect( method = "rebuildChunk", at = @At( diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java b/src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java new file mode 100644 index 000000000..b08aa8c80 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.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 net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.chunk.RenderChunkCache; +import net.minecraft.world.chunk.Chunk; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(RenderChunkCache.class) +public class MixinRenderChunkCache { + @Redirect( + method = "generateCache", + at = @At( + value = "INVOKE", + target = "net/minecraft/world/chunk/Chunk.isEmptyBetween(II)Z" + ) + ) + private static boolean isEmpty(Chunk chunk, int yStart, int yEnd) { + if (!chunk.isEmptyBetween(yStart, yEnd)) { + return false; + } + if (chunk.isEmpty() && Baritone.settings().renderCachedChunks.value && Minecraft.getInstance().getIntegratedServer() == null) { + return false; + } + return true; + } +} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 858cb71e9..056b17a42 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -21,6 +21,7 @@ "MixinNetHandlerPlayClient", "MixinNetworkManager", "MixinRenderChunk", + "MixinRenderChunkCache", "MixinRenderList", "MixinVboRenderList" ] From 66eba84d06028fdb57ce41a7e2201bcb51abf2ef Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 18:54:36 -0700 Subject: [PATCH 017/935] consistent spacing --- .../java/baritone/launch/mixins/MixinRenderChunkCache.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java b/src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java index b08aa8c80..817743973 100644 --- a/src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java +++ b/src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java @@ -27,6 +27,7 @@ @Mixin(RenderChunkCache.class) public class MixinRenderChunkCache { + @Redirect( method = "generateCache", at = @At( From 1ea92a6092b87a3bae6ac97ed1e8995c3ede603e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 22:49:23 -0700 Subject: [PATCH 018/935] :sunglasses: --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a971cad0b..d540cdd99 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ ![GitHub repo size](https://img.shields.io/github/repo-size/cabaletta/baritone.svg) ![](https://tokei.rs/b1/github/cabaletta/baritone?category=code) ![](https://tokei.rs/b1/github/cabaletta/baritone?category=files) -[![Minecraft](https://img.shields.io/badge/MC-1.12.2-green.svg)](https://minecraft.gamepedia.com/1.12.2) +[![Minecraft](https://img.shields.io/badge/MC-1.13.2-brightgreen.svg)](https://minecraft.gamepedia.com/1.13.2) [![GitHub contributors](https://img.shields.io/github/contributors/cabaletta/baritone.svg)](https://github.com/cabaletta/baritone/graphs/contributors/) [![GitHub commits](https://img.shields.io/github/commits-since/cabaletta/baritone/v1.0.0.svg)](https://github.com/cabaletta/baritone/commit/) [![Impact integration](https://img.shields.io/badge/Impact%20integration-v1.2.3-brightgreen.svg)](https://impactdevelopment.github.io/) From 4d22c10ddbaa39f41f3a6e05904a94c4e439d8d0 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 12 Mar 2019 23:08:06 -0700 Subject: [PATCH 019/935] unscuff water, thanks wwe --- .../pathing/movement/movements/MovementDescend.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 1ef098d8f..c114dbf11 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -122,7 +122,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, // and potentially replace the water we're going to fall into return false; } - if (!MovementHelper.canWalkThrough(context.bsi, destX, y - 2, destZ, below) && below.getBlock() != Blocks.WATER) { + if (!MovementHelper.canWalkThrough(context.bsi, destX, y - 2, destZ, below)) { return false; } double costSoFar = 0; @@ -137,9 +137,10 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, IBlockState ontoBlock = context.get(destX, newY, destZ); int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; - if (MovementHelper.isWater(ontoBlock) && context.getBlock(destX, newY + 1, destZ) != Blocks.LILY_PAD) { - // lilypads are canWalkThrough, but we can't end a fall that should be broken by water if it's covered by a lilypad - // however, don't return impossible in the lilypad scenario, because we could still jump right on it (water that's below a lilypad is canWalkOn so it works) + if (MovementHelper.isWater(ontoBlock)) { + if (!MovementHelper.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { + return false; + } if (context.assumeWalkOnWater) { return false; // TODO fix } From d79fbea4336dd56ecc018b3b5492ec9f1869c230 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 13 Mar 2019 18:08:15 -0700 Subject: [PATCH 020/935] scuffed air --- src/main/java/baritone/cache/ChunkPacker.java | 7 +++++-- .../java/baritone/pathing/movement/Movement.java | 3 +-- .../baritone/pathing/movement/MovementHelper.java | 12 ++++++++---- src/main/java/baritone/process/MineProcess.java | 5 ++--- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 117b88cd8..31d1fcecc 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -19,7 +19,10 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; -import net.minecraft.block.*; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.BlockTallGrass; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; @@ -149,7 +152,7 @@ private static PathingBlockType getPathingBlockType(IBlockState state, Chunk chu // however, this failed in the nether when you were near a nether fortress // because fences check their adjacent blocks in the world for their fence connection status to determine AABB shape // this caused a nullpointerexception when we saved chunks on unload, because they were unable to check their neighbors - if (block == Blocks.AIR || block instanceof BlockTallGrass || block instanceof BlockDoublePlant || block instanceof BlockFlower) { + if (MovementHelper.isAir(block) || block instanceof BlockTallGrass || block instanceof BlockDoublePlant || block instanceof BlockFlower) { return PathingBlockType.AIR; } diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 6eec9285c..4fa1dc16f 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -23,7 +23,6 @@ import baritone.api.utils.*; import baritone.api.utils.input.Input; import baritone.utils.BlockStateInterface; -import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -143,7 +142,7 @@ protected boolean prepared(MovementState state) { } boolean somethingInTheWay = false; for (BetterBlockPos blockPos : positionsToBreak) { - if (!MovementHelper.canWalkThrough(ctx, blockPos) && BlockStateInterface.getBlock(ctx, blockPos) != Blocks.AIR) { // can't break air, so don't try + if (!MovementHelper.canWalkThrough(ctx, blockPos)) { // can't break air, so don't try somethingInTheWay = true; Optional reachable = RotationUtils.reachable(ctx.player(), blockPos, ctx.playerController().getBlockReachDistance()); if (reachable.isPresent()) { diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 7a49bb050..f276b4588 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -80,7 +80,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR) { // early return for most common case + if (isAir(block)) { // early return for most common case return true; } if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block == Blocks.BUBBLE_COLUMN || block instanceof BlockShulkerBox || block instanceof BlockSlab) { @@ -153,7 +153,7 @@ static boolean fullyPassable(CalculationContext context, int x, int y, int z) { static boolean fullyPassable(IBlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR) { // early return for most common case + if (isAir(block)) { // early return for most common case return true; } // exceptions - blocks that are isPassable true, but we can't actually jump through @@ -189,7 +189,7 @@ static boolean isReplacable(int x, int y, int z, IBlockState state, BlockStateIn * } */ Block block = state.getBlock(); - if (block == Blocks.AIR) { + if (isAir(block)) { // early return for common cases hehe return true; } @@ -277,7 +277,7 @@ static boolean avoidWalkingInto(IBlockState state) { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { + if (isAir(block) || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { // early return for most common case (air) // plus magma, which is a normal cube but it hurts you return false; @@ -386,6 +386,10 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i return 0; // we won't actually mine it, so don't check fallings above } + static boolean isAir(Block block) { + return block == Blocks.AIR || block == Blocks.CAVE_AIR || block == Blocks.VOID_AIR; + } + static boolean isBottomSlab(IBlockState state) { return state.getBlock() instanceof BlockSlab && state.get(BlockSlab.TYPE) == SlabType.BOTTOM; diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index b9a857d89..c05dcd203 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -37,7 +37,6 @@ import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.IItemProvider; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -184,8 +183,8 @@ private static Goal coalesce(IPlayerContext ctx, BlockPos loc, List lo } // Here, BlockStateInterface is used because the position may be in a cached chunk (the targeted block is one that is kept track of) - boolean upwardGoal = locs.contains(loc.up()) || (Baritone.settings().internalMiningAirException.value && BlockStateInterface.getBlock(ctx, loc.up()) == Blocks.AIR); - boolean downwardGoal = locs.contains(loc.down()) || (Baritone.settings().internalMiningAirException.value && BlockStateInterface.getBlock(ctx, loc.down()) == Blocks.AIR); + boolean upwardGoal = locs.contains(loc.up()) || (Baritone.settings().internalMiningAirException.value && MovementHelper.isAir(BlockStateInterface.getBlock(ctx, loc.up()))); + boolean downwardGoal = locs.contains(loc.down()) || (Baritone.settings().internalMiningAirException.value && MovementHelper.isAir(BlockStateInterface.getBlock(ctx, loc.down()))); return upwardGoal == downwardGoal ? new GoalTwoBlocks(loc) : upwardGoal ? new GoalBlock(loc) : new GoalBlock(loc.down()); } From 717779f7427a6532a830b259992969cd3e22ffc1 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Mar 2019 16:06:32 -0700 Subject: [PATCH 021/935] air is stupid --- src/main/java/baritone/cache/ChunkPacker.java | 10 +++---- .../pathing/movement/MovementHelper.java | 12 +++------ .../movement/movements/MovementPillar.java | 2 +- .../java/baritone/process/BuilderProcess.java | 27 ++++++++++++------- .../java/baritone/process/MineProcess.java | 5 ++-- .../utils/schematic/MapArtSchematic.java | 4 +-- 6 files changed, 31 insertions(+), 29 deletions(-) diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 31d1fcecc..fb68c4d04 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -19,10 +19,7 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; -import net.minecraft.block.Block; -import net.minecraft.block.BlockDoublePlant; -import net.minecraft.block.BlockFlower; -import net.minecraft.block.BlockTallGrass; +import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; @@ -95,7 +92,8 @@ public static CachedChunk pack(Chunk chunk) { IBlockState[] blocks = new IBlockState[256]; for (int z = 0; z < 16; z++) { - https://www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html + https: +//www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html for (int x = 0; x < 16; x++) { for (int y = 255; y >= 0; y--) { int index = CachedChunk.getPositionIndex(x, y, z); @@ -152,7 +150,7 @@ private static PathingBlockType getPathingBlockType(IBlockState state, Chunk chu // however, this failed in the nether when you were near a nether fortress // because fences check their adjacent blocks in the world for their fence connection status to determine AABB shape // this caused a nullpointerexception when we saved chunks on unload, because they were unable to check their neighbors - if (MovementHelper.isAir(block) || block instanceof BlockTallGrass || block instanceof BlockDoublePlant || block instanceof BlockFlower) { + if (block instanceof BlockAir || block instanceof BlockTallGrass || block instanceof BlockDoublePlant || block instanceof BlockFlower) { return PathingBlockType.AIR; } diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 3e2052bb5..bd238a550 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -76,7 +76,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Block block = state.getBlock(); - if (isAir(block)) { // early return for most common case + if (block instanceof BlockAir) { // early return for most common case return true; } if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block == Blocks.BUBBLE_COLUMN || block instanceof BlockShulkerBox || block instanceof BlockSlab) { @@ -152,7 +152,7 @@ static boolean fullyPassable(CalculationContext context, int x, int y, int z) { static boolean fullyPassable(IBlockState state) { Block block = state.getBlock(); - if (isAir(block)) { // early return for most common case + if (block instanceof BlockAir) { // early return for most common case return true; } // exceptions - blocks that are isPassable true, but we can't actually jump through @@ -188,7 +188,7 @@ static boolean isReplacable(int x, int y, int z, IBlockState state, BlockStateIn * } */ Block block = state.getBlock(); - if (isAir(block)) { + if (block instanceof BlockAir) { // early return for common cases hehe return true; } @@ -276,7 +276,7 @@ static boolean avoidWalkingInto(IBlockState state) { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Block block = state.getBlock(); - if (isAir(block) || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { + if (block instanceof BlockAir || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { // early return for most common case (air) // plus magma, which is a normal cube but it hurts you return false; @@ -389,10 +389,6 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i return 0; // we won't actually mine it, so don't check fallings above } - static boolean isAir(Block block) { - return block == Blocks.AIR || block == Blocks.CAVE_AIR || block == Blocks.VOID_AIR; - } - static boolean isBottomSlab(IBlockState state) { return state.getBlock() instanceof BlockSlab && state.get(BlockSlab.TYPE) == SlabType.BOTTOM; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index d90e2a2c1..7fee89217 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -85,7 +85,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (placeCost >= COST_INF) { return COST_INF; } - if (fromDown.getBlock() == Blocks.AIR) { + if (fromDown.getBlock() instanceof BlockAir) { placeCost += 0.1; // slightly (1/200th of a second) penalize pillaring on what's currently air } } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index a9e083b4a..725cdd4e1 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -35,6 +35,7 @@ import baritone.utils.PathingCommandContext; import baritone.utils.schematic.AirSchematic; import baritone.utils.schematic.Schematic; +import net.minecraft.block.BlockAir; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; @@ -123,7 +124,7 @@ public IBlockState placeAt(int x, int y, int z) { return null; } IBlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ()); - if (state.getBlock() == Blocks.AIR) { + if (state.getBlock() instanceof BlockAir) { return null; } return state; @@ -143,7 +144,7 @@ public Optional> toBreakNearPlayer(BuilderCalcul continue; // irrelevant } IBlockState curr = bcc.bsi.get0(x, y, z); - if (curr.getBlock() != Blocks.AIR && !valid(curr, desired)) { + if (!(curr.getBlock() instanceof BlockAir) && !valid(curr, desired)) { BetterBlockPos pos = new BetterBlockPos(x, y, z); Optional rot = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); if (rot.isPresent()) { @@ -184,7 +185,7 @@ public Optional searchForPlacables(BuilderCalculationContext bcc, Lis } IBlockState curr = bcc.bsi.get0(x, y, z); if (MovementHelper.isReplacable(x, y, z, curr, bcc.bsi) && !valid(curr, desired)) { - if (dy == 1 && bcc.bsi.get0(x, y + 1, z).getBlock() == Blocks.AIR) { + if (dy == 1 && bcc.bsi.get0(x, y + 1, z).getBlock() instanceof BlockAir) { continue; } desirableOnHotbar.add(desired); @@ -445,8 +446,8 @@ public void fullRecalc(BuilderCalculationContext bcc) { } private Goal assemble(BuilderCalculationContext bcc, List approxPlacable) { - List placable = incorrectPositions.stream().filter(pos -> bcc.bsi.get0(pos).getBlock() == Blocks.AIR && approxPlacable.contains(bcc.getSchematic(pos.x, pos.y, pos.z))).collect(Collectors.toList()); - Goal[] toBreak = incorrectPositions.stream().filter(pos -> bcc.bsi.get0(pos).getBlock() != Blocks.AIR).map(GoalBreak::new).toArray(Goal[]::new); + List placable = incorrectPositions.stream().filter(pos -> bcc.bsi.get0(pos).getBlock() instanceof BlockAir && approxPlacable.contains(bcc.getSchematic(pos.x, pos.y, pos.z))).collect(Collectors.toList()); + Goal[] toBreak = incorrectPositions.stream().filter(pos -> !(bcc.bsi.get0(pos).getBlock() instanceof BlockAir)).map(GoalBreak::new).toArray(Goal[]::new); Goal[] toPlace = placable.stream().filter(pos -> !placable.contains(pos.down()) && !placable.contains(pos.down(2))).map(pos -> placementgoal(pos, bcc)).toArray(Goal[]::new); if (toPlace.length != 0) { @@ -502,10 +503,10 @@ public boolean isInGoal(int x, int y, int z) { } public Goal placementgoal(BlockPos pos, BuilderCalculationContext bcc) { - if (ctx.world().getBlockState(pos).getBlock() != Blocks.AIR) { + if (!(ctx.world().getBlockState(pos).getBlock() instanceof BlockAir)) { return new GoalPlace(pos); } - boolean allowSameLevel = ctx.world().getBlockState(pos.up()).getBlock() != Blocks.AIR; + boolean allowSameLevel = !(ctx.world().getBlockState(pos.up()).getBlock() instanceof BlockAir); for (EnumFacing facing : Movement.HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP) { if (MovementHelper.canPlaceAgainst(ctx, pos.offset(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ()))) { return new GoalAdjacent(pos, allowSameLevel); @@ -580,8 +581,14 @@ public List placable(int size) { } public boolean valid(IBlockState current, IBlockState desired) { + if (desired == null) { + return true; + } + if (current.getBlock() instanceof BlockAir && desired.getBlock() instanceof BlockAir) { + return true; + } // TODO more complicated comparison logic I guess - return desired == null || current.equals(desired); + return current.equals(desired); } public class BuilderCalculationContext extends CalculationContext { @@ -619,7 +626,7 @@ public double costOfPlacingAt(int x, int y, int z) { IBlockState sch = getSchematic(x, y, z); if (sch != null) { // TODO this can return true even when allowPlace is off.... is that an issue? - if (sch.getBlock() == Blocks.AIR) { + if (sch.getBlock() instanceof BlockAir) { // we want this to be air, but they're asking if they can place here // this won't be a schematic block, this will be a throwaway return placeBlockCost * 2; // we're going to have to break it eventually @@ -652,7 +659,7 @@ public double breakCostMultiplierAt(int x, int y, int z) { } IBlockState sch = getSchematic(x, y, z); if (sch != null) { - if (sch.getBlock() == Blocks.AIR) { + if (sch.getBlock() instanceof BlockAir) { // it should be air // regardless of current contents, we can break it return 1; diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 598ecbba5..7c4068bce 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -32,6 +32,7 @@ import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; @@ -183,8 +184,8 @@ private static Goal coalesce(IPlayerContext ctx, BlockPos loc, List lo } // Here, BlockStateInterface is used because the position may be in a cached chunk (the targeted block is one that is kept track of) - boolean upwardGoal = locs.contains(loc.up()) || (Baritone.settings().internalMiningAirException.value && MovementHelper.isAir(BlockStateInterface.getBlock(ctx, loc.up()))); - boolean downwardGoal = locs.contains(loc.down()) || (Baritone.settings().internalMiningAirException.value && MovementHelper.isAir(BlockStateInterface.getBlock(ctx, loc.down()))); + boolean upwardGoal = locs.contains(loc.up()) || (Baritone.settings().internalMiningAirException.value && BlockStateInterface.getBlock(ctx, loc.up()) instanceof BlockAir); + boolean downwardGoal = locs.contains(loc.down()) || (Baritone.settings().internalMiningAirException.value && BlockStateInterface.getBlock(ctx, loc.down()) instanceof BlockAir); return upwardGoal == downwardGoal ? new GoalTwoBlocks(loc) : upwardGoal ? new GoalBlock(loc) : new GoalBlock(loc.down()); } diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index 1be131952..296401ee9 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -17,8 +17,8 @@ package baritone.utils.schematic; +import net.minecraft.block.BlockAir; import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import java.util.OptionalInt; @@ -36,7 +36,7 @@ public MapArtSchematic(NBTTagCompound schematic) { for (int z = 0; z < lengthZ; z++) { IBlockState[] column = states[x][z]; - OptionalInt lowestBlockY = lastIndexMatching(column, block -> block != Blocks.AIR); + OptionalInt lowestBlockY = lastIndexMatching(column, block -> !(block instanceof BlockAir)); if (lowestBlockY.isPresent()) { heightMap[x][z] = lowestBlockY.getAsInt(); } else { From a00eec402ebe2538380de2edbe0dbca6a09a6540 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Mar 2019 16:32:04 -0700 Subject: [PATCH 022/935] i love retina wtf --- src/main/java/baritone/utils/GuiClick.java | 378 ++++++++++----------- 1 file changed, 189 insertions(+), 189 deletions(-) diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index f0a3eb9a6..7eca85b98 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -58,8 +58,8 @@ public void render(int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHelper.getMouseX(); double my = mc.mouseHelper.getMouseY(); my = mc.mainWindow.getHeight() - my; - my *= 2; - mx *= 2; + my *= mc.mainWindow.getFramebufferHeight() / (double) mc.mainWindow.getHeight(); + mx *= mc.mainWindow.getFramebufferWidth() / (double) mc.mainWindow.getWidth(); Vec3d near = toWorld(mx, my, 0); Vec3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv if (near != null && far != null) { @@ -100,221 +100,221 @@ public void onRender() { GlStateManager.getFloatv(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); GL11.glGetIntegerv(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); - if (currentMouseOver != null) { - Entity e = mc.getRenderViewEntity(); - // drawSingleSelectionBox WHEN? - PathRenderer.drawManySelectionBoxes(e, Collections.singletonList(currentMouseOver), Color.CYAN); - if (clickStart != null && !clickStart.equals(currentMouseOver)) { - GlStateManager.enableBlend(); - GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - GlStateManager.color4f(Color.RED.getColorComponents(null)[0], Color.RED.getColorComponents(null)[1], Color.RED.getColorComponents(null)[2], 0.4F); - GlStateManager.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); - GlStateManager.disableTexture2D(); - GlStateManager.depthMask(false); - GlStateManager.disableDepthTest(); - BetterBlockPos a = new BetterBlockPos(currentMouseOver); - BetterBlockPos b = new BetterBlockPos(clickStart); - PathRenderer.drawAABB(new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); - GlStateManager.enableDepthTest(); - - GlStateManager.depthMask(true); - GlStateManager.enableTexture2D(); - GlStateManager.disableBlend(); - } - } - - - } - - public Vec3d toWorld ( double x, double y, double z){ - boolean result = gluUnProject((float) x, (float) y, (float) z, MODELVIEW, PROJECTION, VIEWPORT, (FloatBuffer) TO_WORLD_BUFFER.clear()); - if (result) { - return new Vec3d(TO_WORLD_BUFFER.get(0), TO_WORLD_BUFFER.get(1), TO_WORLD_BUFFER.get(2)); + if (currentMouseOver != null) { + Entity e = mc.getRenderViewEntity(); + // drawSingleSelectionBox WHEN? + PathRenderer.drawManySelectionBoxes(e, Collections.singletonList(currentMouseOver), Color.CYAN); + if (clickStart != null && !clickStart.equals(currentMouseOver)) { + GlStateManager.enableBlend(); + GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + GlStateManager.color4f(Color.RED.getColorComponents(null)[0], Color.RED.getColorComponents(null)[1], Color.RED.getColorComponents(null)[2], 0.4F); + GlStateManager.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); + GlStateManager.disableTexture2D(); + GlStateManager.depthMask(false); + GlStateManager.disableDepthTest(); + BetterBlockPos a = new BetterBlockPos(currentMouseOver); + BetterBlockPos b = new BetterBlockPos(clickStart); + PathRenderer.drawAABB(new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); + GlStateManager.enableDepthTest(); + + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); } - return null; } - // skidded from lwjgl2 :ok_hand: - // its uhhhhh mit license so its ok - // here is the uhh license - /* - * Copyright (c) 2002-2007 Lightweight Java Game Library Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'Light Weight Java Game Library' nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - public static boolean gluUnProject ( - float winx, - float winy, - float winz, - FloatBuffer modelMatrix, - FloatBuffer projMatrix, - IntBuffer viewport, - FloatBuffer obj_pos){ - FloatBuffer finalMatrix = BufferUtils.createFloatBuffer(16); - float[] in = new float[4]; - float[] out = new float[4]; - - __gluMultMatricesf(modelMatrix, projMatrix, finalMatrix); - - if (!__gluInvertMatrixf(finalMatrix, finalMatrix)) - return false; - - in[0] = winx; - in[1] = winy; - in[2] = winz; - in[3] = 1.0f; - - // Map x and y from window coordinates - in[0] = (in[0] - viewport.get(viewport.position() + 0)) / viewport.get(viewport.position() + 2); - in[1] = (in[1] - viewport.get(viewport.position() + 1)) / viewport.get(viewport.position() + 3); - - // Map to range -1 to 1 - in[0] = in[0] * 2 - 1; - in[1] = in[1] * 2 - 1; - in[2] = in[2] * 2 - 1; - - __gluMultMatrixVecf(finalMatrix, in, out); - if (out[3] == 0.0) - return false; - - out[3] = 1.0f / out[3]; - - obj_pos.put(obj_pos.position() + 0, out[0] * out[3]); - obj_pos.put(obj_pos.position() + 1, out[1] * out[3]); - obj_pos.put(obj_pos.position() + 2, out[2] * out[3]); + } - return true; + public Vec3d toWorld(double x, double y, double z) { + boolean result = gluUnProject((float) x, (float) y, (float) z, MODELVIEW, PROJECTION, VIEWPORT, (FloatBuffer) TO_WORLD_BUFFER.clear()); + if (result) { + return new Vec3d(TO_WORLD_BUFFER.get(0), TO_WORLD_BUFFER.get(1), TO_WORLD_BUFFER.get(2)); } + return null; + } - private static void __gluMultMatrixVecf (FloatBuffer m,float[] in, float[] out){ - for (int i = 0; i < 4; i++) { - out[i] = - in[0] * m.get(m.position() + 0 * 4 + i) - + in[1] * m.get(m.position() + 1 * 4 + i) - + in[2] * m.get(m.position() + 2 * 4 + i) - + in[3] * m.get(m.position() + 3 * 4 + i); + // skidded from lwjgl2 :ok_hand: + // its uhhhhh mit license so its ok + // here is the uhh license + /* + * Copyright (c) 2002-2007 Lightweight Java Game Library Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'Light Weight Java Game Library' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + public static boolean gluUnProject( + float winx, + float winy, + float winz, + FloatBuffer modelMatrix, + FloatBuffer projMatrix, + IntBuffer viewport, + FloatBuffer obj_pos) { + FloatBuffer finalMatrix = BufferUtils.createFloatBuffer(16); + float[] in = new float[4]; + float[] out = new float[4]; + + __gluMultMatricesf(modelMatrix, projMatrix, finalMatrix); + + if (!__gluInvertMatrixf(finalMatrix, finalMatrix)) + return false; + + in[0] = winx; + in[1] = winy; + in[2] = winz; + in[3] = 1.0f; + + // Map x and y from window coordinates + in[0] = (in[0] - viewport.get(viewport.position() + 0)) / viewport.get(viewport.position() + 2); + in[1] = (in[1] - viewport.get(viewport.position() + 1)) / viewport.get(viewport.position() + 3); + + // Map to range -1 to 1 + in[0] = in[0] * 2 - 1; + in[1] = in[1] * 2 - 1; + in[2] = in[2] * 2 - 1; + + __gluMultMatrixVecf(finalMatrix, in, out); + + if (out[3] == 0.0) + return false; + + out[3] = 1.0f / out[3]; + + obj_pos.put(obj_pos.position() + 0, out[0] * out[3]); + obj_pos.put(obj_pos.position() + 1, out[1] * out[3]); + obj_pos.put(obj_pos.position() + 2, out[2] * out[3]); + + return true; + } + + private static void __gluMultMatrixVecf(FloatBuffer m, float[] in, float[] out) { + for (int i = 0; i < 4; i++) { + out[i] = + in[0] * m.get(m.position() + 0 * 4 + i) + + in[1] * m.get(m.position() + 1 * 4 + i) + + in[2] * m.get(m.position() + 2 * 4 + i) + + in[3] * m.get(m.position() + 3 * 4 + i); - } } + } - private static void __gluMultMatricesf (FloatBuffer a, FloatBuffer b, FloatBuffer r){ - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - r.put(r.position() + i * 4 + j, - a.get(a.position() + i * 4 + 0) * b.get(b.position() + 0 * 4 + j) + a.get(a.position() + i * 4 + 1) * b.get(b.position() + 1 * 4 + j) + a.get(a.position() + i * 4 + 2) * b.get(b.position() + 2 * 4 + j) + a.get(a.position() + i * 4 + 3) * b.get(b.position() + 3 * 4 + j)); - } + private static void __gluMultMatricesf(FloatBuffer a, FloatBuffer b, FloatBuffer r) { + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + r.put(r.position() + i * 4 + j, + a.get(a.position() + i * 4 + 0) * b.get(b.position() + 0 * 4 + j) + a.get(a.position() + i * 4 + 1) * b.get(b.position() + 1 * 4 + j) + a.get(a.position() + i * 4 + 2) * b.get(b.position() + 2 * 4 + j) + a.get(a.position() + i * 4 + 3) * b.get(b.position() + 3 * 4 + j)); } } + } - private static boolean __gluInvertMatrixf (FloatBuffer src, FloatBuffer inverse){ - int i, j, k, swap; - float t; - FloatBuffer temp = BufferUtils.createFloatBuffer(16); - + private static boolean __gluInvertMatrixf(FloatBuffer src, FloatBuffer inverse) { + int i, j, k, swap; + float t; + FloatBuffer temp = BufferUtils.createFloatBuffer(16); - for (i = 0; i < 16; i++) { - temp.put(i, src.get(i + src.position())); - } - __gluMakeIdentityf(inverse); - for (i = 0; i < 4; i++) { + for (i = 0; i < 16; i++) { + temp.put(i, src.get(i + src.position())); + } + __gluMakeIdentityf(inverse); + + for (i = 0; i < 4; i++) { + /* + * * Look for largest element in column + */ + swap = i; + for (j = i + 1; j < 4; j++) { /* - * * Look for largest element in column + * if (fabs(temp[j][i]) > fabs(temp[i][i])) { swap = j; */ - swap = i; - for (j = i + 1; j < 4; j++) { - /* - * if (fabs(temp[j][i]) > fabs(temp[i][i])) { swap = j; - */ - if (Math.abs(temp.get(j * 4 + i)) > Math.abs(temp.get(i * 4 + i))) { - swap = j; - } + if (Math.abs(temp.get(j * 4 + i)) > Math.abs(temp.get(i * 4 + i))) { + swap = j; } + } - if (swap != i) { - /* - * * Swap rows. - */ - for (k = 0; k < 4; k++) { - t = temp.get(i * 4 + k); - temp.put(i * 4 + k, temp.get(swap * 4 + k)); - temp.put(swap * 4 + k, t); - - t = inverse.get(i * 4 + k); - inverse.put(i * 4 + k, inverse.get(swap * 4 + k)); - //inverse.put((i << 2) + k, inverse.get((swap << 2) + k)); - inverse.put(swap * 4 + k, t); - //inverse.put((swap << 2) + k, t); - } + if (swap != i) { + /* + * * Swap rows. + */ + for (k = 0; k < 4; k++) { + t = temp.get(i * 4 + k); + temp.put(i * 4 + k, temp.get(swap * 4 + k)); + temp.put(swap * 4 + k, t); + + t = inverse.get(i * 4 + k); + inverse.put(i * 4 + k, inverse.get(swap * 4 + k)); + //inverse.put((i << 2) + k, inverse.get((swap << 2) + k)); + inverse.put(swap * 4 + k, t); + //inverse.put((swap << 2) + k, t); } + } - if (temp.get(i * 4 + i) == 0) { - /* - * * No non-zero pivot. The matrix is singular, which shouldn't * - * happen. This means the user gave us a bad matrix. - */ - return false; - } + if (temp.get(i * 4 + i) == 0) { + /* + * * No non-zero pivot. The matrix is singular, which shouldn't * + * happen. This means the user gave us a bad matrix. + */ + return false; + } - t = temp.get(i * 4 + i); - for (k = 0; k < 4; k++) { - temp.put(i * 4 + k, temp.get(i * 4 + k) / t); - inverse.put(i * 4 + k, inverse.get(i * 4 + k) / t); - } - for (j = 0; j < 4; j++) { - if (j != i) { - t = temp.get(j * 4 + i); - for (k = 0; k < 4; k++) { - temp.put(j * 4 + k, temp.get(j * 4 + k) - temp.get(i * 4 + k) * t); - inverse.put(j * 4 + k, inverse.get(j * 4 + k) - inverse.get(i * 4 + k) * t); + t = temp.get(i * 4 + i); + for (k = 0; k < 4; k++) { + temp.put(i * 4 + k, temp.get(i * 4 + k) / t); + inverse.put(i * 4 + k, inverse.get(i * 4 + k) / t); + } + for (j = 0; j < 4; j++) { + if (j != i) { + t = temp.get(j * 4 + i); + for (k = 0; k < 4; k++) { + temp.put(j * 4 + k, temp.get(j * 4 + k) - temp.get(i * 4 + k) * t); + inverse.put(j * 4 + k, inverse.get(j * 4 + k) - inverse.get(i * 4 + k) * t); /*inverse.put( (j << 2) + k, inverse.get((j << 2) + k) - inverse.get((i << 2) + k) * t);*/ - } } } } - return true; } + return true; + } - private static final float[] IDENTITY_MATRIX = - new float[]{ - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f}; - - private static void __gluMakeIdentityf (FloatBuffer m){ - int oldPos = m.position(); - m.put(IDENTITY_MATRIX); - m.position(oldPos); - } + private static final float[] IDENTITY_MATRIX = + new float[]{ + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f}; + + private static void __gluMakeIdentityf(FloatBuffer m) { + int oldPos = m.position(); + m.put(IDENTITY_MATRIX); + m.position(oldPos); } +} From 449b44ba50fd570c513ac22f39387c97abafcfc5 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Mar 2019 16:32:14 -0700 Subject: [PATCH 023/935] line --- src/main/java/baritone/utils/GuiClick.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 7eca85b98..ac074198f 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -53,7 +53,6 @@ public boolean doesGuiPauseGame() { } @Override - public void render(int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHelper.getMouseX(); double my = mc.mouseHelper.getMouseY(); From e4a49c5529090a6fa0d68fd9655c8eb4354c677d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 15 Mar 2019 14:00:11 -0700 Subject: [PATCH 024/935] fix launchtesting not found on runClient --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index fb70ab02e..c5eb04a5c 100755 --- a/build.gradle +++ b/build.gradle @@ -78,7 +78,7 @@ minecraft { runs { client { workingDirectory project.file('run') - source sourceSets.main + source sourceSets.launch main 'baritone.launch.LaunchTesting' @@ -91,7 +91,7 @@ minecraft { autoTest { workingDirectory project.file('autotest') - source sourceSets.main + source sourceSets.launch main 'baritone.launch.LaunchTesting' From f248a5b677de05cfad2180aaee2ac6d1d2d98928 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 15 Mar 2019 15:32:51 -0700 Subject: [PATCH 025/935] make runClient work --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index c5eb04a5c..ef3e5b7ab 100755 --- a/build.gradle +++ b/build.gradle @@ -63,6 +63,7 @@ sourceSets { } launch { compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output + runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output } } @@ -87,6 +88,8 @@ minecraft { environment 'nativesDirectory', extractNatives.output environment 'tweakClass', 'baritone.launch.BaritoneTweaker' + + jvmArgs "-XstartOnFirstThread" } autoTest { From 5a8f02c9446bf29b23e8f5c235ffa4d64de065e2 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 15 Mar 2019 16:11:14 -0700 Subject: [PATCH 026/935] unscuff everything --- .../gradle/task/BaritoneGradleTask.java | 10 +- .../baritone/gradle/task/CreateDistTask.java | 6 +- .../baritone/gradle/task/ProguardTask.java | 191 ++---------------- .../baritone/gradle/util/Determinizer.java | 27 +-- scripts/proguard.pro | 52 +---- 5 files changed, 32 insertions(+), 254 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 7e26dac11..e9c61f3fd 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -40,17 +40,13 @@ class BaritoneGradleTask extends DefaultTask { PROGUARD_STANDALONE_CONFIG = "standalone.pro", PROGUARD_EXPORT_PATH = "proguard_out.jar", - TEMP_LIBRARY_DIR = "tempLibraries/", - ARTIFACT_STANDARD = "%s-%s.jar", ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", ARTIFACT_API = "%s-api-%s.jar", - ARTIFACT_STANDALONE = "%s-standalone-%s.jar", - ARTIFACT_FORGE_API = "%s-api-forge-%s.jar", - ARTIFACT_FORGE_STANDALONE = "%s-standalone-forge-%s.jar"; + ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; protected String artifactName, artifactVersion; - protected Path artifactPath, artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, artifactForgeApiPath, artifactForgeStandalonePath, proguardOut; + protected Path artifactPath, artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, proguardOut; protected void verifyArtifacts() throws IllegalStateException { this.artifactName = getProject().getName(); @@ -60,8 +56,6 @@ protected void verifyArtifacts() throws IllegalStateException { this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); - this.artifactForgeApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); - this.artifactForgeStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_STANDALONE)); this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 3ca935d16..b29ed38f1 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -45,8 +45,6 @@ protected void exec() throws Exception { Path api = getRelativeFile("dist/" + formatVersion(ARTIFACT_API)); Path standalone = getRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)); Path unoptimized = getRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)); - Path forgeApi = getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)); - Path forgeStandalone = getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_STANDALONE)); // NIO will not automatically create directories Path dir = getRelativeFile("dist/"); @@ -58,11 +56,9 @@ protected void exec() throws Exception { Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); - Files.copy(this.artifactForgeApiPath, forgeApi, REPLACE_EXISTING); - Files.copy(this.artifactForgeStandalonePath, forgeStandalone, REPLACE_EXISTING); // Calculate all checksums and format them like "shasum" - List shasum = Stream.of(api, forgeApi, standalone, forgeStandalone, unoptimized) + List shasum = Stream.of(api, standalone, unoptimized) .map(path -> sha1(path) + " " + path.getFileName().toString()) .collect(Collectors.toList()); diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 30ffddfbc..107d82ffa 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -18,26 +18,18 @@ package baritone.gradle.task; import baritone.gradle.util.Determinizer; -import baritone.gradle.util.MappingType; -import baritone.gradle.util.ReobfWrapper; import org.apache.commons.io.IOUtils; -import org.gradle.api.NamedDomainObjectContainer; -import org.gradle.api.artifacts.Configuration; -import org.gradle.api.artifacts.Dependency; -import org.gradle.api.internal.plugins.DefaultConvention; +import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; -import org.gradle.internal.Pair; import java.io.*; -import java.lang.reflect.Field; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -49,18 +41,12 @@ */ public class ProguardTask extends BaritoneGradleTask { - private static final Pattern TEMP_LIBRARY_PATTERN = Pattern.compile("-libraryjars 'tempLibraries\\/([a-zA-Z0-9/_\\-\\.]+)\\.jar'"); - @Input private String url; @Input private String extract; - private List requiredLibraries; - - private File mixin; - @TaskAction protected void exec() throws Exception { super.verifyArtifacts(); @@ -70,7 +56,6 @@ protected void exec() throws Exception { downloadProguard(); extractProguard(); generateConfigs(); - acquireDependencies(); proguardApi(); proguardStandalone(); cleanup(); @@ -81,7 +66,7 @@ private void processArtifact() throws Exception { Files.delete(this.artifactUnoptimizedPath); } - Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), Optional.empty()); + Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString()); } private void downloadProguard() throws Exception { @@ -114,6 +99,19 @@ private void generateConfigs() throws Exception { String out = IOUtils.toString(p.getInputStream(), "UTF-8").split("\n")[0].split("Opened ")[1].replace("]", ""); template.add(2, "-libraryjars '" + out + "'"); + // Discover all of the libraries that we will need to acquire from gradle + acquireDependencies().forEach(f -> { + if (f.toString().endsWith("-recomp.jar")) { + // remove MCP mapped jar + return; + } + if (f.toString().endsWith("client-extra.jar")) { + // go from the extra to the original downloaded client + f = new File(f.getParentFile(), "client.jar"); + } + template.add(2, "-libraryjars '" + f + "'"); + }); + // API config doesn't require any changes from the changes that we made to the template Files.write(getTemporaryFile(PROGUARD_API_CONFIG), template); @@ -121,165 +119,20 @@ private void generateConfigs() throws Exception { List standalone = new ArrayList<>(template); standalone.removeIf(s -> s.contains("# this is the keep api")); Files.write(getTemporaryFile(PROGUARD_STANDALONE_CONFIG), standalone); - - // Discover all of the libraries that we will need to acquire from gradle - this.requiredLibraries = new ArrayList<>(); - template.forEach(line -> { - if (!line.startsWith("#")) { - Matcher m = TEMP_LIBRARY_PATTERN.matcher(line); - if (m.find()) { - this.requiredLibraries.add(m.group(1)); - } - } - }); - } - - private void acquireDependencies() throws Exception { - - // Create a map of all of the dependencies that we are able to access in this project - // Likely a better way to do this, I just pair the dependency with the first valid configuration - Map> dependencyLookupMap = new HashMap<>(); - getProject().getConfigurations().stream().filter(Configuration::isCanBeResolved).forEach(config -> - config.getAllDependencies().forEach(dependency -> - dependencyLookupMap.putIfAbsent(dependency.getName() + "-" + dependency.getVersion(), Pair.of(config, dependency)))); - - // Create the directory if it doesn't already exist - Path tempLibraries = getTemporaryFile(TEMP_LIBRARY_DIR); - if (!Files.exists(tempLibraries)) { - Files.createDirectory(tempLibraries); - } - - // Iterate the required libraries to copy them to tempLibraries - for (String lib : this.requiredLibraries) { - // copy from the forgegradle cache - if (lib.equals("minecraft")) { - Path cachedJar = getMinecraftJar(); - Path inTempDir = getTemporaryFile("tempLibraries/minecraft.jar"); - // TODO: maybe try not to copy every time - Files.copy(cachedJar, inTempDir, REPLACE_EXISTING); - - continue; - } - - // Find a configuration/dependency pair that matches the desired library - Pair pair = null; - for (Map.Entry> entry : dependencyLookupMap.entrySet()) { - if (entry.getKey().startsWith(lib)) { - pair = entry.getValue(); - } - } - - // The pair must be non-null - Objects.requireNonNull(pair); - - // Find the library jar file, and copy it to tempLibraries - for (File file : pair.getLeft().files(pair.getRight())) { - if (file.getName().startsWith(lib)) { - if (lib.contains("mixin")) { - mixin = file; - } - Files.copy(file.toPath(), getTemporaryFile("tempLibraries/" + lib + ".jar"), REPLACE_EXISTING); - } - } - } - if (mixin == null) { - throw new IllegalStateException("Unable to find mixin jar"); - } - } - - // a bunch of epic stuff to get the path to the cached jar - private Path getMinecraftJar() throws Exception { - MappingType mappingType; - try { - mappingType = getMappingType(); - } catch (Exception e) { - System.err.println("Failed to get mapping type, assuming NOTCH."); - mappingType = MappingType.NOTCH; - } - - String suffix; - switch (mappingType) { - case NOTCH: - suffix = ""; - break; - case SEARGE: - suffix = "-srgBin"; - break; - case CUSTOM: - throw new IllegalStateException("Custom mappings not supported!"); - default: - throw new IllegalStateException("Unknown mapping type: " + mappingType); - } - - DefaultConvention convention = (DefaultConvention) this.getProject().getConvention(); - Object extension = convention.getAsMap().get("minecraft"); - Objects.requireNonNull(extension); - - // for some reason cant use Class.forName - Class class_baseExtension = extension.getClass().getSuperclass().getSuperclass().getSuperclass(); // <-- cursed - Field f_replacer = class_baseExtension.getDeclaredField("replacer"); - f_replacer.setAccessible(true); - Object replacer = f_replacer.get(extension); - Class class_replacementProvider = replacer.getClass(); - Field replacement_replaceMap = class_replacementProvider.getDeclaredField("replaceMap"); - replacement_replaceMap.setAccessible(true); - - Map replacements = (Map) replacement_replaceMap.get(replacer); - String cacheDir = replacements.get("CACHE_DIR").toString() + "/net/minecraft"; - String mcVersion = replacements.get("MC_VERSION").toString(); - String mcpInsert = replacements.get("MAPPING_CHANNEL").toString() + "/" + replacements.get("MAPPING_VERSION").toString(); - String fullJarName = "minecraft-" + mcVersion + suffix + ".jar"; - - String baseDir = String.format("%s/minecraft/%s/", cacheDir, mcVersion); - - String jarPath; - if (mappingType == MappingType.SEARGE) { - jarPath = String.format("%s/%s/%s", baseDir, mcpInsert, fullJarName); - } else { - jarPath = baseDir + fullJarName; - } - jarPath = jarPath - .replace("/", File.separator) - .replace("\\", File.separator); // hecking regex - - return new File(jarPath).toPath(); - } - - // throws IllegalStateException if mapping type is ambiguous or it fails to find it - private MappingType getMappingType() { - // if it fails to find this then its probably a forgegradle version problem - Set reobf = (NamedDomainObjectContainer) this.getProject().getExtensions().getByName("reobf"); - - List mappingTypes = getUsedMappingTypes(reobf); - long mappingTypesUsed = mappingTypes.size(); - if (mappingTypesUsed == 0) { - throw new IllegalStateException("Failed to find mapping type (no jar task?)"); - } - if (mappingTypesUsed > 1) { - throw new IllegalStateException("Ambiguous mapping type (multiple jars with different mapping types?)"); - } - - return mappingTypes.get(0); } - private List getUsedMappingTypes(Set reobf) { - return reobf.stream() - .map(ReobfWrapper::new) - .map(ReobfWrapper::getMappingType) - .distinct() - .collect(Collectors.toList()); + private Stream acquireDependencies() { + return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles().stream().filter(File::isFile); } private void proguardApi() throws Exception { runProguard(getTemporaryFile(PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), Optional.empty()); - Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeApiPath.toString(), Optional.of(mixin)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); } private void proguardStandalone() throws Exception { runProguard(getTemporaryFile(PROGUARD_STANDALONE_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), Optional.empty()); - Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeStandalonePath.toString(), Optional.of(mixin)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString()); } private void cleanup() { diff --git a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java index d9f475a5c..fc268cd35 100644 --- a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java +++ b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java @@ -22,7 +22,10 @@ import com.google.gson.stream.JsonWriter; import java.io.*; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; @@ -36,7 +39,7 @@ */ public class Determinizer { - public static void determinize(String inputPath, String outputPath, Optional toInclude) throws IOException { + public static void determinize(String inputPath, String outputPath) throws IOException { System.out.println("Running Determinizer"); System.out.println(" Input path: " + inputPath); System.out.println(" Output path: " + outputPath); @@ -63,30 +66,10 @@ public static void determinize(String inputPath, String outputPath, Optional Date: Fri, 15 Mar 2019 16:19:07 -0700 Subject: [PATCH 027/935] documentation resigned --- .../java/baritone/api/event/listener/IGameEventListener.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index 8d39d6422..93bdb7a61 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -18,7 +18,6 @@ package baritone.api.event.listener; import baritone.api.event.events.*; -import net.minecraft.client.GameSettings; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.GuiGameOver; @@ -61,7 +60,6 @@ public interface IGameEventListener { * Runs before and after whenever a chunk is either loaded, unloaded, or populated. * * @param event The event - * @see WorldClient#doPreChunk(int, int, boolean) */ void onChunkEvent(ChunkEvent event); From 358aa80280e28751de1df4155dd92caefbbf3d4a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 15 Mar 2019 16:22:51 -0700 Subject: [PATCH 028/935] docker time --- build.gradle | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index ef3e5b7ab..91e9914e3 100755 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,7 @@ buildscript { import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask +import org.apache.tools.ant.taskdefs.condition.Os apply plugin: 'java' apply plugin: 'net.minecraftforge.gradle' @@ -88,8 +89,10 @@ minecraft { environment 'nativesDirectory', extractNatives.output environment 'tweakClass', 'baritone.launch.BaritoneTweaker' - - jvmArgs "-XstartOnFirstThread" + + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XstartOnFirstThread" + } } autoTest { @@ -104,6 +107,10 @@ minecraft { environment 'tweakClass', 'baritone.launch.BaritoneTweaker' environment 'BARITONE_AUTO_TEST', 'true' + + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XstartOnFirstThread" + } } } } From 315929f31ce9c6a26ace86be5373588e7d714bfa Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 15 Mar 2019 16:39:59 -0700 Subject: [PATCH 029/935] hey so what if we didnt do that --- src/main/java/baritone/cache/CachedWorld.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 7e34fa081..c025d489f 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -70,8 +70,6 @@ public final class CachedWorld implements ICachedWorld, Helper { this.directory = directory.toString(); this.dimension = dimension; System.out.println("Cached world directory: " + directory); - // Insert an invalid region element - cachedRegions.put(0, null); Baritone.getExecutor().execute(new PackerThread()); Baritone.getExecutor().execute(() -> { try { From 42afd2dd547b10558e400482b4313ffd850687ae Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 15 Mar 2019 16:49:36 -0700 Subject: [PATCH 030/935] maybe proper exit code --- src/main/java/baritone/utils/BaritoneAutoTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index a006e8e7c..d1568024a 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -128,6 +128,7 @@ public void onTick(TickEvent event) { if (GOAL.isInGoal(ctx.playerFeet())) { System.out.println("Successfully pathed to " + ctx.playerFeet() + " in " + event.getCount() + " ticks"); mc.shutdown(); + System.exit(0); } // If we have exceeded the expected number of ticks to complete the pathing From 9a15a65ad52f819baf98b2de176d5673f852cf41 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 19 Mar 2019 13:59:56 -0700 Subject: [PATCH 031/935] not needed anymore --- .../baritone/gradle/util/MappingType.java | 29 --------- .../baritone/gradle/util/ReobfWrapper.java | 63 ------------------- 2 files changed, 92 deletions(-) delete mode 100644 buildSrc/src/main/java/baritone/gradle/util/MappingType.java delete mode 100644 buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java diff --git a/buildSrc/src/main/java/baritone/gradle/util/MappingType.java b/buildSrc/src/main/java/baritone/gradle/util/MappingType.java deleted file mode 100644 index a3be9b49f..000000000 --- a/buildSrc/src/main/java/baritone/gradle/util/MappingType.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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.gradle.util; - -/** - * All credits go to AsmLibGradle and its contributors. - * - * @see Original Source - */ -public enum MappingType { - SEARGE, - NOTCH, - CUSTOM // forgegradle -} diff --git a/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java b/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java deleted file mode 100644 index f752cd946..000000000 --- a/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.gradle.util; - -import java.lang.reflect.Field; -import java.util.Objects; - -/** - * All credits go to AsmLibGradle and its contributors. - * - * @see Original Source - */ -public class ReobfWrapper { - - private final Object instance; - private final Class type; - - public ReobfWrapper(Object instance) { - this.instance = instance; - Objects.requireNonNull(instance); - this.type = instance.getClass(); - } - - public String getName() { - try { - Field nameField = type.getDeclaredField("name"); - nameField.setAccessible(true); - return (String) nameField.get(this.instance); - } catch (ReflectiveOperationException ex) { - throw new IllegalStateException(ex); - } - } - - public MappingType getMappingType() { - try { - Field enumField = type.getDeclaredField("mappingType"); - enumField.setAccessible(true); - Enum aEnum = (Enum) enumField.get(this.instance); - MappingType mappingType = MappingType.values()[aEnum.ordinal()]; - if (!aEnum.name().equals(mappingType.name())) { - throw new IllegalStateException("ForgeGradle ReobfMappingType is not equivalent to MappingType (version error?)"); - } - return mappingType; - } catch (ReflectiveOperationException ex) { - throw new IllegalStateException(ex); - } - } -} From 0deb854e1bf3b8d26956709b68998cf24e2060e2 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 21 Mar 2019 16:40:18 -0700 Subject: [PATCH 032/935] v1.3.0 From e5fbaf60f3c3283d99a845723fa38ff20b2e5eb2 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 22 Mar 2019 21:04:35 -0700 Subject: [PATCH 033/935] shutdownminecraftapplet --- src/main/java/baritone/utils/BaritoneAutoTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index d1568024a..9f73ec3d9 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -128,6 +128,7 @@ public void onTick(TickEvent event) { if (GOAL.isInGoal(ctx.playerFeet())) { System.out.println("Successfully pathed to " + ctx.playerFeet() + " in " + event.getCount() + " ticks"); mc.shutdown(); + mc.shutdownMinecraftApplet(); System.exit(0); } From 2a8dcee028fa238df03c3c4b5b7f38674c6534c5 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 22 Mar 2019 16:20:25 -0700 Subject: [PATCH 034/935] write to a file to indicate success --- .travis.yml | 2 +- src/main/java/baritone/utils/BaritoneAutoTest.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 371639bec..70b700c2c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ install: script: - docker run --rm cabaletta/baritone ./gradlew javadoc -- docker run --name baritone cabaletta/baritone /bin/sh -c "set -e; /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runClient" +- docker run --name baritone cabaletta/baritone /bin/sh -c "set -e; /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runClient; cat /code/autotest/success" - docker cp baritone:/code/dist dist - ls dist - cat dist/checksums.txt diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index 9f73ec3d9..dd9080a3f 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -35,6 +35,10 @@ import net.minecraft.world.WorldType; import net.minecraft.world.dimension.DimensionType; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + /** * Responsible for automatically testing Baritone's pathing algorithm by automatically creating a world with a specific * seed, setting a specified goal, and only allowing a certain amount of ticks to pass before the pathing test is @@ -127,6 +131,11 @@ public void onTick(TickEvent event) { // If we have reached our goal, print a message and safely close the game if (GOAL.isInGoal(ctx.playerFeet())) { System.out.println("Successfully pathed to " + ctx.playerFeet() + " in " + event.getCount() + " ticks"); + try { + Files.write(Paths.get(Minecraft.getInstance().gameDir.toString()), "Success!".getBytes()); + } catch (IOException e) { + e.printStackTrace(); + } mc.shutdown(); mc.shutdownMinecraftApplet(); System.exit(0); From 9b1440ed2c40a15bcbcba326d7006b9b5f8aeb11 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 22 Mar 2019 22:07:12 -0700 Subject: [PATCH 035/935] that needs to be allowed --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 70b700c2c..93c4112c5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ install: script: - docker run --rm cabaletta/baritone ./gradlew javadoc -- docker run --name baritone cabaletta/baritone /bin/sh -c "set -e; /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runClient; cat /code/autotest/success" +- docker run --name baritone cabaletta/baritone /bin/sh -c "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runClient; cat /code/autotest/success" - docker cp baritone:/code/dist dist - ls dist - cat dist/checksums.txt From 81f47d56325d1c1cdb1211cdd5d8fd1c43fda5dc Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 22 Mar 2019 22:19:13 -0700 Subject: [PATCH 036/935] forgot file name lollll --- src/main/java/baritone/utils/BaritoneAutoTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index dd9080a3f..fb9880099 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -132,7 +132,7 @@ public void onTick(TickEvent event) { if (GOAL.isInGoal(ctx.playerFeet())) { System.out.println("Successfully pathed to " + ctx.playerFeet() + " in " + event.getCount() + " ticks"); try { - Files.write(Paths.get(Minecraft.getInstance().gameDir.toString()), "Success!".getBytes()); + Files.write(Paths.get(Minecraft.getInstance().gameDir.toString(), "success"), "Success!".getBytes()); } catch (IOException e) { e.printStackTrace(); } From c6ba5481d9774c259b33f49b3678e4921a94973b Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 22 Mar 2019 22:33:40 -0700 Subject: [PATCH 037/935] one final attempt --- .travis.yml | 2 +- src/main/java/baritone/utils/BaritoneAutoTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 93c4112c5..469388ca9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ install: script: - docker run --rm cabaletta/baritone ./gradlew javadoc -- docker run --name baritone cabaletta/baritone /bin/sh -c "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runClient; cat /code/autotest/success" +- docker run --name baritone cabaletta/baritone /bin/sh -c "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runClient; cat /code/success" - docker cp baritone:/code/dist dist - ls dist - cat dist/checksums.txt diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index fb9880099..a445f7b49 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -132,7 +132,7 @@ public void onTick(TickEvent event) { if (GOAL.isInGoal(ctx.playerFeet())) { System.out.println("Successfully pathed to " + ctx.playerFeet() + " in " + event.getCount() + " ticks"); try { - Files.write(Paths.get(Minecraft.getInstance().gameDir.toString(), "success"), "Success!".getBytes()); + Files.write(Paths.get("success"), "Success!".getBytes()); } catch (IOException e) { e.printStackTrace(); } From 85b2aea6e99b0ba50afe95b7feafbbb1482598a3 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 23 Mar 2019 09:52:49 -0700 Subject: [PATCH 038/935] where is this writing??? --- src/main/java/baritone/utils/BaritoneAutoTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index a445f7b49..1629aa8c7 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -35,9 +35,9 @@ import net.minecraft.world.WorldType; import net.minecraft.world.dimension.DimensionType; +import java.io.File; import java.io.IOException; import java.nio.file.Files; -import java.nio.file.Paths; /** * Responsible for automatically testing Baritone's pathing algorithm by automatically creating a world with a specific @@ -132,7 +132,9 @@ public void onTick(TickEvent event) { if (GOAL.isInGoal(ctx.playerFeet())) { System.out.println("Successfully pathed to " + ctx.playerFeet() + " in " + event.getCount() + " ticks"); try { - Files.write(Paths.get("success"), "Success!".getBytes()); + File file = new File("success"); + System.out.println("Writing success to " + file.getAbsolutePath()); + Files.write(file.getAbsoluteFile().toPath(), "Success!".getBytes()); } catch (IOException e) { e.printStackTrace(); } From 7bc6765cac31b0f9c4bf1cc40e4b7abfe1b8d701 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 23 Mar 2019 10:13:14 -0700 Subject: [PATCH 039/935] rart --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 469388ca9..1b70eebf1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ install: script: - docker run --rm cabaletta/baritone ./gradlew javadoc -- docker run --name baritone cabaletta/baritone /bin/sh -c "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runClient; cat /code/success" +- docker run --name baritone cabaletta/baritone /bin/sh -c "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runClient; cat /code/run/success" - docker cp baritone:/code/dist dist - ls dist - cat dist/checksums.txt From 52d2741f52625afe823f86e9ad577f3f6ccbb866 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 23 Mar 2019 10:31:36 -0700 Subject: [PATCH 040/935] and lets try making it fail delibrately --- .../baritone/pathing/movement/movements/MovementAscend.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index b7b7eb5f4..622a20164 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -190,7 +190,7 @@ public MovementState updateState(MovementState state) { double sideDist = zAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().posX) + xAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().posZ); double lateralMotion = xAxis * ctx.player().motionZ + zAxis * ctx.player().motionX; - if (Math.abs(lateralMotion) > 0.1) { + if (Math.abs(lateralMotion) > 0.1 || true) { return state; } From f970f932c75a6df98405f90d7dcf65f6543df67e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 23 Mar 2019 10:52:03 -0700 Subject: [PATCH 041/935] great --- .../baritone/pathing/movement/movements/MovementAscend.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 622a20164..b7b7eb5f4 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -190,7 +190,7 @@ public MovementState updateState(MovementState state) { double sideDist = zAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().posX) + xAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().posZ); double lateralMotion = xAxis * ctx.player().motionZ + zAxis * ctx.player().motionX; - if (Math.abs(lateralMotion) > 0.1 || true) { + if (Math.abs(lateralMotion) > 0.1) { return state; } From 7e0fc8124624197bb328f4a86194b47011e9ba78 Mon Sep 17 00:00:00 2001 From: babbaj Date: Sat, 23 Mar 2019 15:55:16 -0400 Subject: [PATCH 042/935] use runAutoTest --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1b70eebf1..7dd0fba8a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ install: script: - docker run --rm cabaletta/baritone ./gradlew javadoc -- docker run --name baritone cabaletta/baritone /bin/sh -c "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runClient; cat /code/run/success" +- docker run --name baritone cabaletta/baritone /bin/sh -c "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runAutoTest; cat /code/autotest/success" - docker cp baritone:/code/dist dist - ls dist - cat dist/checksums.txt From c59ec9da10fd3dfc3ee0968dfcb6a21c7297a11e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 23 Mar 2019 22:17:40 -0800 Subject: [PATCH 043/935] blank space --- .../baritone/pathing/movement/movements/MovementAscend.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index b7b7eb5f4..2ba10f706 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -197,9 +197,7 @@ public MovementState updateState(MovementState state) { if (headBonkClear()) { return state.setInput(Input.JUMP, true); } - - - // System.out.println(flatDistToNext + " " + sideDist); + if (flatDistToNext > 1.2 || sideDist > 0.2) { return state; } From 563028a5b3dd5a28faf43eec6dfddd78c4b4bf2f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 9 Apr 2019 19:30:48 -0700 Subject: [PATCH 044/935] fix invalid player move packet, and a bunch of things in world scanner --- src/api/java/baritone/api/utils/Rotation.java | 3 ++ .../baritone/api/utils/RotationUtils.java | 4 ++ src/api/java/baritone/api/utils/VecUtils.java | 7 +++- .../java/baritone/cache/WorldScanner.java | 37 +++++++++++++------ 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/api/java/baritone/api/utils/Rotation.java b/src/api/java/baritone/api/utils/Rotation.java index 54f63ebfa..36beea7bc 100644 --- a/src/api/java/baritone/api/utils/Rotation.java +++ b/src/api/java/baritone/api/utils/Rotation.java @@ -36,6 +36,9 @@ public class Rotation { public Rotation(float yaw, float pitch) { this.yaw = yaw; this.pitch = pitch; + if (Float.isInfinite(yaw) || Float.isNaN(yaw) || Float.isInfinite(pitch) || Float.isNaN(pitch)) { + throw new IllegalStateException(yaw + " " + pitch); + } } /** diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index c925e44f2..acdc1c21f 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -29,6 +29,7 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; import java.util.Optional; @@ -180,6 +181,9 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, IBlockState state = entity.world.getBlockState(pos); VoxelShape shape = state.getShape(entity.world, pos); + if (shape.isEmpty()) { + shape = VoxelShapes.fullCube(); + } for (Vec3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { double xDiff = shape.getStart(EnumFacing.Axis.X) * sideOffset.x + shape.getEnd(EnumFacing.Axis.X) * (1 - sideOffset.x); double yDiff = shape.getStart(EnumFacing.Axis.Y) * sideOffset.y + shape.getEnd(EnumFacing.Axis.Y) * (1 - sideOffset.y); diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index b268c914a..c7a712157 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -21,7 +21,6 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.VoxelShape; @@ -46,9 +45,15 @@ private VecUtils() {} public static Vec3d calculateBlockCenter(World world, BlockPos pos) { IBlockState b = world.getBlockState(pos); VoxelShape shape = b.getCollisionShape(world, pos); + if (shape.isEmpty()) { + return getBlockPosCenter(pos); + } double xDiff = (shape.getStart(EnumFacing.Axis.X) + shape.getEnd(EnumFacing.Axis.X)) / 2; double yDiff = (shape.getStart(EnumFacing.Axis.Y) + shape.getEnd(EnumFacing.Axis.Y)) / 2; double zDiff = (shape.getStart(EnumFacing.Axis.Z) + shape.getEnd(EnumFacing.Axis.Z)) / 2; + if (Double.isNaN(xDiff) || Double.isNaN(yDiff) || Double.isNaN(zDiff)) { + throw new IllegalStateException(b + " " + pos + " " + shape); + } if (b.getBlock() instanceof BlockFire) {//look at bottom of fire when putting it out yDiff = 0; } diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 6f81201b1..7cdbe1e81 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -28,15 +28,15 @@ import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkSection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.stream.IntStream; public enum WorldScanner implements IWorldScanner { INSTANCE; + private static final int[] DEFAULT_COORDINATE_ITERATION_ORDER = IntStream.range(0, 16).toArray(); + @Override public List scanChunkRadius(IPlayerContext ctx, List blocks, int max, int yLevelThreshold, int maxSearchRadius) { if (blocks.contains(null)) { @@ -53,6 +53,9 @@ public List scanChunkRadius(IPlayerContext ctx, List blocks, in int playerChunkZ = ctx.playerFeet().getZ() >> 4; int playerY = ctx.playerFeet().getY(); + int playerYBlockStateContainerIndex = playerY >> 4; + int[] coordinateIterationOrder = IntStream.range(0, 16).boxed().sorted(Comparator.comparingInt(y -> Math.abs(y - playerYBlockStateContainerIndex))).mapToInt(x -> x).toArray(); + int searchRadiusSq = 0; boolean foundWithinY = false; while (true) { @@ -72,7 +75,9 @@ public List scanChunkRadius(IPlayerContext ctx, List blocks, in continue; } allUnloaded = false; - scanChunkInto(chunkX << 4, chunkZ << 4, chunk, blocks, res, max, yLevelThreshold, playerY); + if (scanChunkInto(chunkX << 4, chunkZ << 4, chunk, blocks, res, max, yLevelThreshold, playerY, coordinateIterationOrder)) { + foundWithinY = true; + } } } if ((allUnloaded && foundChunks) @@ -100,13 +105,15 @@ public List scanChunk(IPlayerContext ctx, List blocks, ChunkPos } ArrayList res = new ArrayList<>(); - scanChunkInto(pos.x << 4, pos.z << 4, chunk, blocks, res, max, yLevelThreshold, playerY); + scanChunkInto(pos.x << 4, pos.z << 4, chunk, blocks, res, max, yLevelThreshold, playerY, DEFAULT_COORDINATE_ITERATION_ORDER); return res; } - public void scanChunkInto(int chunkX, int chunkZ, Chunk chunk, List search, Collection result, int max, int yLevelThreshold, int playerY) { + private boolean scanChunkInto(int chunkX, int chunkZ, Chunk chunk, List search, Collection result, int max, int yLevelThreshold, int playerY, int[] coordinateIterationOrder) { ChunkSection[] chunkInternalStorageArray = chunk.getSections(); - for (int y0 = 0; y0 < 16; y0++) { + boolean foundWithinY = false; + for (int yIndex = 0; yIndex < 16; yIndex++) { + int y0 = coordinateIterationOrder[yIndex]; ChunkSection extendedblockstorage = chunkInternalStorageArray[y0]; if (extendedblockstorage == null) { continue; @@ -121,14 +128,22 @@ public void scanChunkInto(int chunkX, int chunkZ, Chunk chunk, List searc IBlockState state = bsc.get(x, y, z); if (search.contains(state.getBlock())) { int yy = yReal | y; - result.add(new BlockPos(chunkX | x, yy, chunkZ | z)); - if (result.size() >= max && Math.abs(yy - playerY) < yLevelThreshold) { - return; + if (result.size() >= max) { + if (Math.abs(yy - playerY) < yLevelThreshold) { + foundWithinY = true; + } else { + if (foundWithinY) { + // have found within Y in this chunk, so don't need to consider outside Y + return true; + } + } } + result.add(new BlockPos(chunkX | x, yy, chunkZ | z)); } } } } } + return foundWithinY; } } From 6e49adea332f10cbbf3acbc21e235622f1e5104f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 13 Apr 2019 19:10:13 -0700 Subject: [PATCH 045/935] i WUV impact --- src/main/java/baritone/cache/ChunkPacker.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index c00588cb2..5b4c7b841 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -119,6 +119,9 @@ public static String blockToString(Block block) { } public static Block stringToBlockRequired(String name) { + if (name.equals("lit_redstone_ore")) { + return stringToBlockRequired("redstone_ore"); + } Block block = stringToBlockNullable(name); Objects.requireNonNull(block); return block; From 82d09a536dea4e9f5c59b764f49b9b501fcbbcaa Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 13 Apr 2019 19:21:44 -0700 Subject: [PATCH 046/935] v1.3.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 1d1e5647f..40e4584bc 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.3.0' +version '1.3.1' buildscript { repositories { From 9c9c9d43870aad3aaf6d59e7dfc45e330fd7d96d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 14 Apr 2019 10:06:37 -0700 Subject: [PATCH 047/935] fix region pruning --- src/api/java/baritone/api/Settings.java | 6 ++++-- src/main/java/baritone/cache/CachedWorld.java | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 60285ef3c..080baa7ec 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -401,10 +401,12 @@ public final class Settings { * On save, delete from RAM any cached regions that are more than 1024 blocks away from the player *

* Temporarily disabled + *

+ * Temporarily reenabled * * @see Issue #248 */ - public final Setting pruneRegionsFromRAM = new Setting<>(false); + public final Setting pruneRegionsFromRAM = new Setting<>(true); /** * Remember the contents of containers (chests, echests, furnaces) @@ -575,7 +577,7 @@ public final class Settings { /** * How far to move before repeating the build. -1 for the size of the build in that axis. 0 to disable */ - public final Setting buildRepeatDistance=new Setting<>(0); + public final Setting buildRepeatDistance = new Setting<>(0); /** * What direction te repeat the build in diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index c025d489f..949f818c9 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -180,8 +180,8 @@ private synchronized void prune() { if (region == null) { continue; } - int distX = (region.getX() << 9 + 256) - pruneCenter.getX(); - int distZ = (region.getZ() << 9 + 256) - pruneCenter.getZ(); + int distX = ((region.getX() << 9) + 256) - pruneCenter.getX(); + int distZ = ((region.getZ() << 9) + 256) - pruneCenter.getZ(); double dist = Math.sqrt(distX * distX + distZ * distZ); if (dist > 1024) { logDebug("Deleting cached region " + region.getX() + "," + region.getZ() + " from ram"); @@ -216,7 +216,7 @@ private BlockPos guessPosition() { if (mostRecentlyModified == null) { return new BlockPos(0, 0, 0); } - return new BlockPos(mostRecentlyModified.x << 4 + 8, 0, mostRecentlyModified.z << 4 + 8); + return new BlockPos((mostRecentlyModified.x << 4) + 8, 0, (mostRecentlyModified.z << 4) + 8); } private synchronized List allRegions() { From 3d3a5f420e1b6541a1028f22b419756b66db4d51 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 16 Apr 2019 20:15:51 -0500 Subject: [PATCH 048/935] Fix unsafe creation of potentially invalid ResourceLocation --- src/main/java/baritone/cache/ChunkPacker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 5b4c7b841..6fc332bd3 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -128,7 +128,7 @@ public static Block stringToBlockRequired(String name) { } public static Block stringToBlockNullable(String name) { - return resourceCache.computeIfAbsent(name, n -> IRegistry.BLOCK.get(new ResourceLocation(n.contains(":") ? n : "minecraft:" + n))); + return resourceCache.computeIfAbsent(name, n -> IRegistry.BLOCK.get(ResourceLocation.tryCreate(n.contains(":") ? n : "minecraft:" + n))); } private static PathingBlockType getPathingBlockType(IBlockState state, Chunk chunk, int x, int y, int z) { From b521d7bee19ca518ee67d5b37726d5bf9ce978c4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 2 May 2019 11:42:49 -0700 Subject: [PATCH 049/935] fix dummy merge typo --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index e67fc9d24..bfee71e6d 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -78,7 +78,7 @@ static boolean avoidAdjacentBreaking(BlockStateInterface bsi, int x, int y, int && BlockFalling.canFallThrough(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) return true; // dont break a block that is adjacent to unsupported gravel because it can cause really weird stuff } - return state.getFluidState().isEmpty(); + return !state.getFluidState().isEmpty(); } static boolean canWalkThrough(IPlayerContext ctx, BetterBlockPos pos) { From 16b74ff53ce27cc69f4b1cf293b3e57fe92183d7 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 16 May 2019 14:57:26 -0700 Subject: [PATCH 050/935] v1.3.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 40e4584bc..b5a96f160 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.3.1' +version '1.3.2' buildscript { repositories { From dba496471e5e342d55f767d1946f5f17594d884c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 10 Jun 2019 12:43:02 -0700 Subject: [PATCH 051/935] api sourceset done --- build.gradle | 4 +- .../java/baritone/api/IBaritoneProvider.java | 8 +- src/api/java/baritone/api/Settings.java | 4 +- .../baritone/api/cache/IBlockTypeAccess.java | 6 +- .../api/event/events/PacketEvent.java | 10 +-- .../api/event/events/RotationMoveEvent.java | 1 - .../baritone/api/event/events/WorldEvent.java | 8 +- .../event/listener/IGameEventListener.java | 19 +++-- .../pathing/goals/GoalStrictDirection.java | 4 +- .../baritone/api/utils/BetterBlockPos.java | 10 +-- .../java/baritone/api/utils/BlockUtils.java | 7 +- .../api/utils/ExampleBaritoneControl.java | 12 +-- src/api/java/baritone/api/utils/Helper.java | 8 +- .../baritone/api/utils/IPlayerContext.java | 20 +++-- .../baritone/api/utils/IPlayerController.java | 20 ++--- .../java/baritone/api/utils/ISchematic.java | 10 +-- .../java/baritone/api/utils/MyChunkPos.java | 2 +- .../baritone/api/utils/RayTraceUtils.java | 4 +- .../baritone/api/utils/RotationUtils.java | 31 ++++---- .../java/baritone/api/utils/SettingsUtil.java | 10 +-- src/api/java/baritone/api/utils/VecUtils.java | 16 ++-- .../launch/mixins/MixinEntityLivingBase.java | 12 +-- .../launch/mixins/MixinEntityPlayerSP.java | 22 +++--- .../launch/mixins/MixinMinecraft.java | 28 +++---- .../mixins/MixinNetHandlerPlayClient.java | 2 +- .../launch/mixins/MixinRenderChunk.java | 6 +- src/main/java/baritone/Baritone.java | 4 +- .../baritone/behavior/InventoryBehavior.java | 8 +- .../baritone/behavior/MemoryBehavior.java | 6 +- src/main/java/baritone/cache/CachedChunk.java | 10 +-- .../java/baritone/cache/CachedRegion.java | 8 +- src/main/java/baritone/cache/ChunkPacker.java | 12 +-- .../java/baritone/cache/WorldScanner.java | 6 +- .../pathing/movement/CalculationContext.java | 10 +-- .../baritone/pathing/movement/Movement.java | 4 +- .../pathing/movement/MovementHelper.java | 64 ++++++++-------- .../java/baritone/pathing/movement/Moves.java | 26 +++---- .../movement/movements/MovementAscend.java | 14 ++-- .../movement/movements/MovementDescend.java | 14 ++-- .../movement/movements/MovementDiagonal.java | 26 +++---- .../movement/movements/MovementDownward.java | 4 +- .../movement/movements/MovementFall.java | 12 +-- .../movement/movements/MovementParkour.java | 20 ++--- .../movement/movements/MovementPillar.java | 16 ++-- .../movement/movements/MovementTraverse.java | 20 ++--- .../baritone/process/BackfillProcess.java | 4 +- .../java/baritone/process/BuilderProcess.java | 74 +++++++++---------- .../java/baritone/process/FarmProcess.java | 16 ++-- .../java/baritone/process/MineProcess.java | 4 +- .../java/baritone/utils/BaritoneAutoTest.java | 2 +- .../java/baritone/utils/BlockBreakHelper.java | 6 +- .../java/baritone/utils/BlockPlaceHelper.java | 2 +- .../baritone/utils/BlockStateInterface.java | 12 +-- src/main/java/baritone/utils/GuiClick.java | 6 +- .../baritone/utils/InputOverrideHandler.java | 2 +- .../java/baritone/utils/PathRenderer.java | 4 +- src/main/java/baritone/utils/ToolSet.java | 14 ++-- .../utils/pathing/SegmentedCalculator.java | 4 +- .../utils/player/PrimaryPlayerContext.java | 4 +- .../utils/player/PrimaryPlayerController.java | 20 ++--- .../utils/schematic/AirSchematic.java | 4 +- .../utils/schematic/MapArtSchematic.java | 4 +- .../baritone/utils/schematic/Schematic.java | 8 +- .../utils/pathing/BetterBlockPosTest.java | 4 +- 64 files changed, 378 insertions(+), 384 deletions(-) diff --git a/build.gradle b/build.gradle index b5a96f160..6c3a51c44 100755 --- a/build.gradle +++ b/build.gradle @@ -74,7 +74,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20190307-1.13.1' + mappings channel: 'snapshot', version: '20190608-1.14.2' reobfMappings 'notch' runs { @@ -130,7 +130,7 @@ repositories { } dependencies { - minecraft 'com.github.ImpactDevelopment:Vanilla:1.13.2' + minecraft 'com.github.ImpactDevelopment:Vanilla:1.14.2' runtime launchCompile('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index bdefb66f1..1719fcc79 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -18,7 +18,7 @@ package baritone.api; import baritone.api.cache.IWorldScanner; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.entity.player.ClientPlayerEntity; import java.util.List; @@ -43,19 +43,19 @@ public interface IBaritoneProvider { * returned by {@link #getPrimaryBaritone()}. * * @return All active {@link IBaritone} instances. - * @see #getBaritoneForPlayer(EntityPlayerSP) + * @see #getBaritoneForPlayer(ClientPlayerEntity) */ List getAllBaritones(); /** - * Provides the {@link IBaritone} instance for a given {@link EntityPlayerSP}. This will likely be + * Provides the {@link IBaritone} instance for a given {@link ClientPlayerEntity}. This will likely be * replaced with or be overloaded in addition to {@code #getBaritoneForUser(IBaritoneUser)} when * {@code bot-system} is merged into {@code master}. * * @param player The player * @return The {@link IBaritone} instance. */ - default IBaritone getBaritoneForPlayer(EntityPlayerSP player) { + default IBaritone getBaritoneForPlayer(ClientPlayerEntity player) { for (IBaritone baritone : getAllBaritones()) { if (player.equals(baritone.getPlayerContext().player())) { return baritone; diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 373fd08eb..6146ac7fb 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -20,8 +20,8 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.TypeUtils; import net.minecraft.block.Block; +import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.util.math.Vec3i; import net.minecraft.util.text.ITextComponent; @@ -807,7 +807,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ - public final Setting> logger = new Setting<>(Minecraft.getInstance().ingameGUI.getChatGUI()::printChatMessage); + public final Setting> logger = new Setting<>(Minecraft.getInstance().field_71456_v.getChatGUI()::printChatMessage); /** * The size of the box that is rendered when the current goal is a GoalYLevel diff --git a/src/api/java/baritone/api/cache/IBlockTypeAccess.java b/src/api/java/baritone/api/cache/IBlockTypeAccess.java index 0804a73ad..8225add14 100644 --- a/src/api/java/baritone/api/cache/IBlockTypeAccess.java +++ b/src/api/java/baritone/api/cache/IBlockTypeAccess.java @@ -17,7 +17,7 @@ package baritone.api.cache; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; /** @@ -26,9 +26,9 @@ */ public interface IBlockTypeAccess { - IBlockState getBlock(int x, int y, int z); + BlockState getBlock(int x, int y, int z); - default IBlockState getBlock(BlockPos pos) { + default BlockState getBlock(BlockPos pos) { return getBlock(pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/api/java/baritone/api/event/events/PacketEvent.java b/src/api/java/baritone/api/event/events/PacketEvent.java index 9b5295ee5..b65545f24 100644 --- a/src/api/java/baritone/api/event/events/PacketEvent.java +++ b/src/api/java/baritone/api/event/events/PacketEvent.java @@ -19,7 +19,7 @@ import baritone.api.event.events.type.EventState; import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; +import net.minecraft.network.IPacket; /** * @author Brady @@ -31,9 +31,9 @@ public final class PacketEvent { private final EventState state; - private final Packet packet; + private final IPacket packet; - public PacketEvent(NetworkManager networkManager, EventState state, Packet packet) { + public PacketEvent(NetworkManager networkManager, EventState state, IPacket packet) { this.networkManager = networkManager; this.state = state; this.packet = packet; @@ -47,12 +47,12 @@ public final EventState getState() { return this.state; } - public final Packet getPacket() { + public final IPacket getPacket() { return this.packet; } @SuppressWarnings("unchecked") - public final > T cast() { + public final > T cast() { return (T) this.packet; } } diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index 109061c7e..f9b7ba434 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -18,7 +18,6 @@ package baritone.api.event.events; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; /** * @author Brady diff --git a/src/api/java/baritone/api/event/events/WorldEvent.java b/src/api/java/baritone/api/event/events/WorldEvent.java index 2cb0eac57..39cd4a32c 100644 --- a/src/api/java/baritone/api/event/events/WorldEvent.java +++ b/src/api/java/baritone/api/event/events/WorldEvent.java @@ -18,7 +18,7 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; -import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.world.ClientWorld; /** * @author Brady @@ -29,14 +29,14 @@ public final class WorldEvent { /** * The new world that is being loaded. {@code null} if being unloaded. */ - private final WorldClient world; + private final ClientWorld world; /** * The state of the event */ private final EventState state; - public WorldEvent(WorldClient world, EventState state) { + public WorldEvent(ClientWorld world, EventState state) { this.world = world; this.state = state; } @@ -44,7 +44,7 @@ public WorldEvent(WorldClient world, EventState state) { /** * @return The new world that is being loaded. {@code null} if being unloaded. */ - public final WorldClient getWorld() { + public final ClientWorld getWorld() { return this.world; } diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index 93bdb7a61..c54dd8989 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -19,12 +19,11 @@ import baritone.api.event.events.*; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.gui.GuiGameOver; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.gui.screen.DeathScreen; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; -import net.minecraft.network.Packet; /** * @author Brady @@ -44,7 +43,7 @@ public interface IGameEventListener { * Run once per game tick from before and after the player rotation is sent to the server. * * @param event The event - * @see EntityPlayerSP#tick() + * @see ClientPlayerEntity#tick() */ void onPlayerUpdate(PlayerUpdateEvent event); @@ -52,7 +51,7 @@ public interface IGameEventListener { * Runs whenever the client player sends a message to the server. * * @param event The event - * @see EntityPlayerSP#sendChatMessage(String) + * @see ClientPlayerEntity#sendChatMessage(String) */ void onSendChatMessage(ChatEvent event); @@ -74,7 +73,7 @@ public interface IGameEventListener { * Runs before and after whenever a new world is loaded * * @param event The event - * @see Minecraft#loadWorld(WorldClient, GuiScreen) + * @see Minecraft#loadWorld(ClientWorld, Screen) */ void onWorldEvent(WorldEvent event); @@ -104,10 +103,10 @@ public interface IGameEventListener { void onPlayerRotationMove(RotationMoveEvent event); /** - * Called whenever the sprint keybind state is checked in {@link EntityPlayerSP#livingTick} + * Called whenever the sprint keybind state is checked in {@link ClientPlayerEntity#livingTick} * * @param event The event - * @see EntityPlayerSP#livingTick() + * @see ClientPlayerEntity#livingTick() */ void onPlayerSprintState(SprintStateEvent event); diff --git a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java index 24ae385ac..e83ce400a 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java +++ b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java @@ -17,7 +17,7 @@ package baritone.api.pathing.goals; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; /** @@ -30,7 +30,7 @@ public class GoalStrictDirection implements Goal { public final int dx; public final int dz; - public GoalStrictDirection(BlockPos origin, EnumFacing direction) { + public GoalStrictDirection(BlockPos origin, Direction direction) { x = origin.getX(); y = origin.getY(); z = origin.getZ(); diff --git a/src/api/java/baritone/api/utils/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java index 3b94a8339..3103890ab 100644 --- a/src/api/java/baritone/api/utils/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -17,7 +17,7 @@ package baritone.api.utils; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3i; @@ -101,10 +101,10 @@ public BetterBlockPos up() { // this is unimaginably faster than blockpos.up // that literally calls // this.up(1) - // which calls this.offset(EnumFacing.UP, 1) + // which calls this.offset(Direction.UP, 1) // which does return n == 0 ? this : new BlockPos(this.getX() + facing.getXOffset() * n, this.getY() + facing.getYOffset() * n, this.getZ() + facing.getZOffset() * n); - // how many function calls is that? up(), up(int), offset(EnumFacing, int), new BlockPos, getX, getXOffset, getY, getYOffset, getZ, getZOffset + // how many function calls is that? up(), up(int), offset(Direction, int), new BlockPos, getX, getXOffset, getY, getYOffset, getZ, getZOffset // that's ten. // this is one function call. return new BetterBlockPos(x, y + 1, z); @@ -129,13 +129,13 @@ public BetterBlockPos down(int amt) { } @Override - public BetterBlockPos offset(EnumFacing dir) { + public BetterBlockPos offset(Direction dir) { Vec3i vec = dir.getDirectionVec(); return new BetterBlockPos(x + vec.getX(), y + vec.getY(), z + vec.getZ()); } @Override - public BetterBlockPos offset(EnumFacing dir, int dist) { + public BetterBlockPos offset(Direction dir, int dist) { if (dist == 0) { return this; } diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index fd376c9a8..19ea8f4d1 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -19,7 +19,7 @@ import net.minecraft.block.Block; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.IRegistry; +import net.minecraft.util.registry.Registry; import java.util.HashMap; import java.util.Map; @@ -29,7 +29,7 @@ public class BlockUtils { private static transient Map resourceCache = new HashMap<>(); public static String blockToString(Block block) { - ResourceLocation loc = IRegistry.BLOCK.getKey(block); + ResourceLocation loc = Registry.field_212618_g.getKey(block); String name = loc.getPath(); // normally, only write the part after the minecraft: if (!loc.getNamespace().equals("minecraft")) { // Baritone is running on top of forge with mods installed, perhaps? @@ -56,7 +56,8 @@ public static Block stringToBlockNullable(String name) { if (resourceCache.containsKey(name)) { return null; // cached as null } - block = IRegistry.BLOCK.get(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)); + block = Registry.field_212618_g.getOrDefault(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)); + // TODO this again returns air instead of null! Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); resourceCache = copy; diff --git a/src/api/java/baritone/api/utils/ExampleBaritoneControl.java b/src/api/java/baritone/api/utils/ExampleBaritoneControl.java index b63fec4ad..c4a92f2af 100644 --- a/src/api/java/baritone/api/utils/ExampleBaritoneControl.java +++ b/src/api/java/baritone/api/utils/ExampleBaritoneControl.java @@ -32,10 +32,10 @@ import baritone.api.process.IGetToBlockProcess; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ChunkProviderClient; +import net.minecraft.client.multiplayer.ClientChunkProvider; import net.minecraft.crash.CrashReport; import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.chunk.Chunk; @@ -260,13 +260,13 @@ public boolean runCommand(String msg0) { // you may think this can be private, b return true; } if (msg.equals("repack") || msg.equals("rescan")) { - ChunkProviderClient cli = (ChunkProviderClient) ctx.world().getChunkProvider(); + ClientChunkProvider cli = (ClientChunkProvider) ctx.world().getChunkProvider(); int playerChunkX = ctx.playerFeet().getX() >> 4; int playerChunkZ = ctx.playerFeet().getZ() >> 4; int count = 0; for (int x = playerChunkX - 40; x <= playerChunkX + 40; x++) { for (int z = playerChunkZ - 40; z <= playerChunkZ + 40; z++) { - Chunk chunk = cli.getChunk(x, z, false, false); + Chunk chunk = cli.getChunk(x, z, null, false); if (chunk != null) { count++; baritone.getWorldProvider().getCurrentWorld().getCachedWorld().queueForPacking(chunk); @@ -405,7 +405,7 @@ public boolean isInGoal(int x, int y, int z) { return true; } if (msg.startsWith("followplayers")) { - baritone.getFollowProcess().follow(EntityPlayer.class::isInstance); // O P P A + baritone.getFollowProcess().follow(PlayerEntity.class::isInstance); // O P P A logDirect("Following any players"); return true; } @@ -415,7 +415,7 @@ public boolean isInGoal(int x, int y, int z) { if (name.length() == 0) { toFollow = ctx.getSelectedEntity(); } else { - for (EntityPlayer pl : ctx.world().playerEntities) { + for (PlayerEntity pl : ctx.world().getPlayers()) { String theirName = pl.getName().getString().trim().toLowerCase(); if (!theirName.equals(ctx.player().getName().getString().trim().toLowerCase()) && (theirName.contains(name) || name.contains(theirName))) { // don't follow ourselves lol toFollow = Optional.of(pl); diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index f05f5ed08..5f9b67f0e 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -20,7 +20,7 @@ import baritone.api.BaritoneAPI; import net.minecraft.client.Minecraft; import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; /** @@ -34,7 +34,7 @@ public interface Helper { */ Helper HELPER = new Helper() {}; - ITextComponent MESSAGE_PREFIX = new TextComponentString(String.format( + ITextComponent MESSAGE_PREFIX = new StringTextComponent(String.format( "%s[%sBaritone%s]%s", TextFormatting.DARK_PURPLE, TextFormatting.LIGHT_PURPLE, @@ -66,7 +66,7 @@ default void logDebug(String message) { default void logDirect(String message) { ITextComponent component = MESSAGE_PREFIX.shallowCopy(); component.getStyle().setColor(TextFormatting.GRAY); - component.appendSibling(new TextComponentString(" " + message)); - Minecraft.getInstance().addScheduledTask(() -> BaritoneAPI.getSettings().logger.value.accept(component)); + component.appendSibling(new StringTextComponent(" " + message)); + Minecraft.getInstance().execute(() -> BaritoneAPI.getSettings().logger.value.accept(component)); } } diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index f0a5c3314..2de4e3c50 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -18,12 +18,10 @@ package baritone.api.utils; import baritone.api.cache.IWorldData; -import net.minecraft.block.BlockSlab; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.block.SlabBlock; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.*; import net.minecraft.world.World; import java.util.Optional; @@ -34,7 +32,7 @@ */ public interface IPlayerContext { - EntityPlayerSP player(); + ClientPlayerEntity player(); IPlayerController playerController(); @@ -47,7 +45,7 @@ public interface IPlayerContext { default BetterBlockPos playerFeet() { // TODO find a better way to deal with soul sand!!!!! BetterBlockPos feet = new BetterBlockPos(player().posX, player().posY + 0.1251, player().posZ); - if (world().getBlockState(feet).getBlock() instanceof BlockSlab) { + if (world().getBlockState(feet).getBlock() instanceof SlabBlock) { return feet.up(); } return feet; @@ -72,8 +70,8 @@ default Rotation playerRotations() { */ default Optional getSelectedBlock() { RayTraceResult result = objectMouseOver(); - if (result != null && result.type == RayTraceResult.Type.BLOCK) { - return Optional.of(result.getBlockPos()); + if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { + return Optional.of(((BlockRayTraceResult) result).getPos()); } return Optional.empty(); } @@ -89,8 +87,8 @@ default boolean isLookingAt(BlockPos pos) { */ default Optional getSelectedEntity() { RayTraceResult result = objectMouseOver(); - if (result != null && result.type == RayTraceResult.Type.ENTITY) { - return Optional.of(result.entity); + if (result != null && result.getType() == RayTraceResult.Type.ENTITY) { + return Optional.of(((EntityRayTraceResult) result).getEntity()); } return Optional.empty(); } diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index 14334d5e2..905825644 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -17,13 +17,13 @@ package baritone.api.utils; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.ClickType; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.container.ClickType; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.GameType; @@ -35,11 +35,11 @@ */ public interface IPlayerController { - boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side); + boolean onPlayerDamageBlock(BlockPos pos, Direction side); void resetBlockRemoving(); - ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, EntityPlayer player); + ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, PlayerEntity player); void setGameType(GameType type); @@ -49,7 +49,7 @@ default double getBlockReachDistance() { return this.getGameType().isCreative() ? 5.0F : 4.5F; } - EnumActionResult processRightClickBlock(EntityPlayerSP player, World world, BlockPos pos, EnumFacing direction, Vec3d vec, EnumHand hand); + ActionResultType processRightClickBlock(ClientPlayerEntity player, World world, BlockPos pos, Direction direction, Vec3d vec, Hand hand); - EnumActionResult processRightClick(EntityPlayerSP player, World world, EnumHand hand); + ActionResultType processRightClick(ClientPlayerEntity player, World world, Hand hand); } diff --git a/src/api/java/baritone/api/utils/ISchematic.java b/src/api/java/baritone/api/utils/ISchematic.java index 821dc68c3..fdf8c2030 100644 --- a/src/api/java/baritone/api/utils/ISchematic.java +++ b/src/api/java/baritone/api/utils/ISchematic.java @@ -17,8 +17,8 @@ package baritone.api.utils; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.EnumFacing; +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; /** * Basic representation of a schematic. Provides the dimensions and @@ -45,7 +45,7 @@ default boolean inSchematic(int x, int y, int z) { return x >= 0 && x < widthX() && y >= 0 && y < heightY() && z >= 0 && z < lengthZ(); } - default int size(EnumFacing.Axis axis) { + default int size(Direction.Axis axis) { switch (axis) { case X: return widthX(); @@ -66,7 +66,7 @@ default int size(EnumFacing.Axis axis) { * @param z The z position of the block, relative to the origin * @return The desired block state at the specified position */ - IBlockState desiredState(int x, int y, int z); + BlockState desiredState(int x, int y, int z); /** * @return The width (X axis length) of this schematic @@ -82,4 +82,4 @@ default int size(EnumFacing.Axis axis) { * @return The length (Z axis length) of this schematic */ int lengthZ(); -} \ No newline at end of file +} diff --git a/src/api/java/baritone/api/utils/MyChunkPos.java b/src/api/java/baritone/api/utils/MyChunkPos.java index 1df7481db..8a4e7b0cb 100644 --- a/src/api/java/baritone/api/utils/MyChunkPos.java +++ b/src/api/java/baritone/api/utils/MyChunkPos.java @@ -34,4 +34,4 @@ public class MyChunkPos { public String toString() { return x + ", " + z; } -} \ No newline at end of file +} diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 872cadbd9..989734e37 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -18,7 +18,7 @@ package baritone.api.utils; import net.minecraft.entity.Entity; -import net.minecraft.util.math.RayTraceFluidMode; +import net.minecraft.util.math.RayTraceContext; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; @@ -48,6 +48,6 @@ public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, d direction.y * blockReachDistance, direction.z * blockReachDistance ); - return entity.world.rayTraceBlocks(start, end, RayTraceFluidMode.NEVER, false, true); + return entity.world.func_217299_a(new RayTraceContext(start, end, RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, entity)); } } diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 358fcadde..cefd3f191 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -19,15 +19,12 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; -import net.minecraft.block.BlockFire; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.block.BlockState; +import net.minecraft.block.FireBlock; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.entity.Entity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.Direction; +import net.minecraft.util.math.*; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; @@ -140,7 +137,7 @@ public static Vec3d calcVec3dFromRotation(Rotation rotation) { * @param ctx Context for the viewing entity * @param pos The target block position * @return The optional rotation - * @see #reachable(EntityPlayerSP, BlockPos, double) + * @see #reachable(ClientPlayerEntity, BlockPos, double) */ public static Optional reachable(IPlayerContext ctx, BlockPos pos) { return reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); @@ -158,7 +155,7 @@ public static Optional reachable(IPlayerContext ctx, BlockPos pos) { * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachable(EntityPlayerSP entity, BlockPos pos, double blockReachDistance) { + public static Optional reachable(ClientPlayerEntity entity, BlockPos pos, double blockReachDistance) { IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(entity); if (baritone.getPlayerContext().isLookingAt(pos)) { /* @@ -179,15 +176,15 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, return possibleRotation; } - IBlockState state = entity.world.getBlockState(pos); + BlockState state = entity.world.getBlockState(pos); VoxelShape shape = state.getShape(entity.world, pos); if (shape.isEmpty()) { shape = VoxelShapes.fullCube(); } for (Vec3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { - double xDiff = shape.getStart(EnumFacing.Axis.X) * sideOffset.x + shape.getEnd(EnumFacing.Axis.X) * (1 - sideOffset.x); - double yDiff = shape.getStart(EnumFacing.Axis.Y) * sideOffset.y + shape.getEnd(EnumFacing.Axis.Y) * (1 - sideOffset.y); - double zDiff = shape.getStart(EnumFacing.Axis.Z) * sideOffset.z + shape.getEnd(EnumFacing.Axis.Z) * (1 - sideOffset.z); + double xDiff = shape.getStart(Direction.Axis.X) * sideOffset.x + shape.getEnd(Direction.Axis.X) * (1 - sideOffset.x); + double yDiff = shape.getStart(Direction.Axis.Y) * sideOffset.y + shape.getEnd(Direction.Axis.Y) * (1 - sideOffset.y); + double zDiff = shape.getStart(Direction.Axis.Z) * sideOffset.z + shape.getEnd(Direction.Axis.Z) * (1 - sideOffset.z); possibleRotation = reachableOffset(entity, pos, new Vec3d(pos).add(xDiff, yDiff, zDiff), blockReachDistance); if (possibleRotation.isPresent()) { return possibleRotation; @@ -211,11 +208,11 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve Rotation rotation = calcRotationFromVec3d(entity.getEyePosition(1.0F), offsetPos, new Rotation(entity.rotationYaw, entity.rotationPitch)); RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance); //System.out.println(result); - if (result != null && result.type == RayTraceResult.Type.BLOCK) { - if (result.getBlockPos().equals(pos)) { + if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { + if (((BlockRayTraceResult) result).getPos().equals(pos)) { return Optional.of(rotation); } - if (entity.world.getBlockState(pos).getBlock() instanceof BlockFire && result.getBlockPos().equals(pos.down())) { + if (entity.world.getBlockState(pos).getBlock() instanceof FireBlock && ((BlockRayTraceResult) result).getPos().equals(pos.down())) { return Optional.of(rotation); } } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index e42bb073f..3e608107d 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -21,10 +21,10 @@ import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.item.Item; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.IRegistry; import net.minecraft.util.math.Vec3i; +import net.minecraft.util.registry.Registry; import java.awt.*; import java.io.BufferedReader; @@ -176,7 +176,7 @@ private enum Parser implements ISettingParser { INTEGER(Integer.class, Integer::parseInt), FLOAT(Float.class, Float::parseFloat), LONG(Long.class, Long::parseLong), - ENUMFACING(EnumFacing.class, EnumFacing::byName), + ENUMFACING(Direction.class, Direction::byName), COLOR( Color.class, str -> new Color(Integer.parseInt(str.split(",")[0]), Integer.parseInt(str.split(",")[1]), Integer.parseInt(str.split(",")[2])), @@ -194,8 +194,8 @@ private enum Parser implements ISettingParser { ), ITEM( Item.class, - str -> IRegistry.ITEM.get(new ResourceLocation(str.trim())), - item -> IRegistry.ITEM.getKey(item).toString() + str -> Registry.field_212630_s.getOrDefault(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? + item -> Registry.field_212630_s.getKey(item).toString() ), LIST() { @Override diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index c7a712157..dfc71fc38 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -17,10 +17,10 @@ package baritone.api.utils; -import net.minecraft.block.BlockFire; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.BlockState; +import net.minecraft.block.FireBlock; import net.minecraft.entity.Entity; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.VoxelShape; @@ -43,18 +43,18 @@ private VecUtils() {} * @see #getBlockPosCenter(BlockPos) */ public static Vec3d calculateBlockCenter(World world, BlockPos pos) { - IBlockState b = world.getBlockState(pos); + BlockState b = world.getBlockState(pos); VoxelShape shape = b.getCollisionShape(world, pos); if (shape.isEmpty()) { return getBlockPosCenter(pos); } - double xDiff = (shape.getStart(EnumFacing.Axis.X) + shape.getEnd(EnumFacing.Axis.X)) / 2; - double yDiff = (shape.getStart(EnumFacing.Axis.Y) + shape.getEnd(EnumFacing.Axis.Y)) / 2; - double zDiff = (shape.getStart(EnumFacing.Axis.Z) + shape.getEnd(EnumFacing.Axis.Z)) / 2; + double xDiff = (shape.getStart(Direction.Axis.X) + shape.getEnd(Direction.Axis.X)) / 2; + double yDiff = (shape.getStart(Direction.Axis.Y) + shape.getEnd(Direction.Axis.Y)) / 2; + double zDiff = (shape.getStart(Direction.Axis.Z) + shape.getEnd(Direction.Axis.Z)) / 2; if (Double.isNaN(xDiff) || Double.isNaN(yDiff) || Double.isNaN(zDiff)) { throw new IllegalStateException(b + " " + pos + " " + shape); } - if (b.getBlock() instanceof BlockFire) {//look at bottom of fire when putting it out + if (b.getBlock() instanceof FireBlock) {//look at bottom of fire when putting it out yDiff = 0; } return new Vec3d( diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index c3d3cb1fb..5cddbc7d7 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -20,7 +20,7 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.RotationMoveEvent; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.entity.ClientPlayerEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityType; @@ -55,8 +55,8 @@ public MixinEntityLivingBase(EntityType entityTypeIn, World worldIn) { ) private void preMoveRelative(CallbackInfo ci) { // noinspection ConstantConditions - if (EntityPlayerSP.class.isInstance(this)) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + if (ClientPlayerEntity.class.isInstance(this)) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); if (baritone != null) { this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.rotationYaw); baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); @@ -73,7 +73,7 @@ private void preMoveRelative(CallbackInfo ci) { ) ) private float overrideYaw(EntityLivingBase self) { - if (self instanceof EntityPlayerSP && BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this) != null) { + if (self instanceof ClientPlayerEntity && BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this) != null) { return this.jumpRotationEvent.getYaw(); } return self.rotationYaw; @@ -88,12 +88,12 @@ private float overrideYaw(EntityLivingBase self) { ) private void travel(EntityLivingBase self, float strafe, float up, float forward, float friction) { // noinspection ConstantConditions - if (!EntityPlayerSP.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this) == null) { + if (!ClientPlayerEntity.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this) == null) { moveRelative(strafe, up, forward, friction); return; } RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw); - BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); + BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); float originalYaw = this.rotationYaw; this.rotationYaw = motionUpdateRotationEvent.getYaw(); this.moveRelative(strafe, up, forward, friction); diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index 16ca15b07..392323f02 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -24,7 +24,7 @@ import baritone.api.event.events.SprintStateEvent; import baritone.api.event.events.type.EventState; import baritone.behavior.LookBehavior; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.entity.ClientPlayerEntity; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.player.PlayerCapabilities; import org.spongepowered.asm.mixin.Mixin; @@ -37,8 +37,8 @@ * @author Brady * @since 8/1/2018 */ -@Mixin(EntityPlayerSP.class) -public class MixinEntityPlayerSP { +@Mixin(ClientPlayerEntity.class) +public class MixinClientPlayerEntity { @Inject( method = "sendChatMessage", @@ -47,7 +47,7 @@ public class MixinEntityPlayerSP { ) private void sendChatMessage(String msg, CallbackInfo ci) { ChatEvent event = new ChatEvent(msg); - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); if (baritone == null) { return; } @@ -61,13 +61,13 @@ private void sendChatMessage(String msg, CallbackInfo ci) { method = "tick", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/EntityPlayerSP.isPassenger()Z", + target = "net/minecraft/client/entity/ClientPlayerEntity.isPassenger()Z", shift = At.Shift.BY, by = -3 ) ) private void onPreUpdate(CallbackInfo ci) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); if (baritone != null) { baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.PRE)); } @@ -77,13 +77,13 @@ private void onPreUpdate(CallbackInfo ci) { method = "tick", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/EntityPlayerSP.onUpdateWalkingPlayer()V", + target = "net/minecraft/client/entity/ClientPlayerEntity.onUpdateWalkingPlayer()V", shift = At.Shift.BY, by = 2 ) ) private void onPostUpdate(CallbackInfo ci) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); if (baritone != null) { baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); } @@ -97,7 +97,7 @@ private void onPostUpdate(CallbackInfo ci) { ) ) private boolean isAllowFlying(PlayerCapabilities capabilities) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); if (baritone == null) { return capabilities.allowFlying; } @@ -112,7 +112,7 @@ private boolean isAllowFlying(PlayerCapabilities capabilities) { ) ) private boolean isKeyDown(KeyBinding keyBinding) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); if (baritone == null) { return keyBinding.isKeyDown(); } @@ -135,7 +135,7 @@ private boolean isKeyDown(KeyBinding keyBinding) { ) ) private void updateRidden(CallbackInfo cb) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); if (baritone != null) { ((LookBehavior) baritone.getLookBehavior()).pig(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 6c065049a..3490e359e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -26,9 +26,9 @@ import baritone.api.event.events.type.EventState; import baritone.utils.BaritoneAutoTest; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.entity.ClientPlayerEntity; +import net.minecraft.client.gui.Screen; +import net.minecraft.client.multiplayer.ClientWorld; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; @@ -50,9 +50,9 @@ public class MixinMinecraft { @Shadow - public EntityPlayerSP player; + public ClientPlayerEntity player; @Shadow - public WorldClient world; + public ClientWorld world; @Inject( method = "init", @@ -78,7 +78,7 @@ private void preInit(CallbackInfo ci) { at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/Minecraft.currentScreen:Lnet/minecraft/client/gui/GuiScreen;", + target = "net/minecraft/client/Minecraft.currentScreen:Lnet/minecraft/client/gui/Screen;", ordinal = 5, shift = At.Shift.BY, by = -3 @@ -97,10 +97,10 @@ private void runTick(CallbackInfo ci) { } @Inject( - method = "loadWorld(Lnet/minecraft/client/multiplayer/WorldClient;Lnet/minecraft/client/gui/GuiScreen;)V", + method = "loadWorld(Lnet/minecraft/client/multiplayer/ClientWorld;Lnet/minecraft/client/gui/Screen;)V", at = @At("HEAD") ) - private void preLoadWorld(WorldClient world, GuiScreen loadingScreen, CallbackInfo ci) { + private void preLoadWorld(ClientWorld world, Screen loadingScreen, CallbackInfo ci) { // If we're unloading the world but one doesn't exist, ignore it if (this.world == null && world == null) { return; @@ -117,10 +117,10 @@ private void preLoadWorld(WorldClient world, GuiScreen loadingScreen, CallbackIn } @Inject( - method = "loadWorld(Lnet/minecraft/client/multiplayer/WorldClient;Lnet/minecraft/client/gui/GuiScreen;)V", + method = "loadWorld(Lnet/minecraft/client/multiplayer/ClientWorld;Lnet/minecraft/client/gui/Screen;)V", at = @At("RETURN") ) - private void postLoadWorld(WorldClient world, GuiScreen loadingScreen, CallbackInfo ci) { + private void postLoadWorld(ClientWorld world, Screen loadingScreen, CallbackInfo ci) { // still fire event for both null, as that means we've just finished exiting a world // mc.world changing is only the primary baritone @@ -137,10 +137,10 @@ private void postLoadWorld(WorldClient world, GuiScreen loadingScreen, CallbackI at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/gui/GuiScreen.allowUserInput:Z" + target = "net/minecraft/client/gui/Screen.allowUserInput:Z" ) ) - private boolean isAllowUserInput(GuiScreen screen) { + private boolean isAllowUserInput(Screen screen) { // allow user input is only the primary baritone return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().getCurrent() != null && player != null) || screen.allowUserInput; } @@ -149,7 +149,7 @@ private boolean isAllowUserInput(GuiScreen screen) { method = "clickMouse", at = @At( value = "INVOKE", - target = "net/minecraft/client/multiplayer/PlayerControllerMP.clickBlock(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/EnumFacing;)Z" + target = "net/minecraft/client/multiplayer/PlayerControllerMP.clickBlock(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/Direction;)Z" ), locals = LocalCapture.CAPTURE_FAILHARD ) @@ -162,7 +162,7 @@ private void onBlockBreak(CallbackInfo ci, BlockPos pos) { method = "rightClickMouse", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/EntityPlayerSP.swingArm(Lnet/minecraft/util/EnumHand;)V" + target = "net/minecraft/client/entity/ClientPlayerEntity.swingArm(Lnet/minecraft/util/EnumHand;)V" ), locals = LocalCapture.CAPTURE_FAILHARD ) diff --git a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java index 013c38a13..a2d041c82 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java @@ -110,7 +110,7 @@ private void postChunkUnload(SPacketUnloadChunk packet, CallbackInfo ci) { method = "handleCombatEvent", at = @At( value = "INVOKE", - target = "net/minecraft/client/Minecraft.displayGuiScreen(Lnet/minecraft/client/gui/GuiScreen;)V" + target = "net/minecraft/client/Minecraft.displayScreen(Lnet/minecraft/client/gui/Screen;)V" ) ) private void onPlayerDeath(SPacketCombatEvent packetIn, CallbackInfo ci) { diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java b/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java index 125e45c89..48a3fbce0 100644 --- a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java +++ b/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java @@ -20,7 +20,7 @@ import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.utils.IPlayerContext; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.chunk.RenderChunk; import net.minecraft.client.renderer.chunk.RenderChunkCache; @@ -40,10 +40,10 @@ public class MixinRenderChunk { method = "rebuildChunk", at = @At( value = "INVOKE", - target = "net/minecraft/client/renderer/chunk/RenderChunkCache.getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/IBlockState;" + target = "net/minecraft/client/renderer/chunk/RenderChunkCache.getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/BlockState;" ) ) - private IBlockState getBlockState(RenderChunkCache chunkCache, BlockPos pos) { + private BlockState getBlockState(RenderChunkCache chunkCache, BlockPos pos) { if (Baritone.settings().renderCachedChunks.value && !Minecraft.getInstance().isSingleplayer()) { Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); IPlayerContext ctx = baritone.getPlayerContext(); diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index dd441dfb5..e03d56332 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -218,7 +218,7 @@ public void openClick() { new Thread(() -> { try { Thread.sleep(100); - Helper.mc.addScheduledTask(() -> Helper.mc.displayGuiScreen(new GuiClick())); + Helper.mc.addScheduledTask(() -> Helper.mc.displayScreen(new GuiClick())); } catch (Exception ignored) {} }).start(); } @@ -234,4 +234,4 @@ public static File getDir() { public static Executor getExecutor() { return threadPool; } -} \ No newline at end of file +} diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 684613af1..bcb11bb6c 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -21,8 +21,8 @@ import baritone.api.event.events.TickEvent; import baritone.utils.ToolSet; import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.block.state.BlockState; +import net.minecraft.client.entity.ClientPlayerEntity; import net.minecraft.init.Blocks; import net.minecraft.inventory.ClickType; import net.minecraft.item.*; @@ -131,7 +131,7 @@ public boolean hasGenericThrowaway() { } public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { - IBlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z); + BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z); if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof ItemBlock && ((ItemBlock) stack.getItem()).getBlock().equals(maybe.getBlock()))) { return true; // gotem } @@ -144,7 +144,7 @@ public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { } public boolean throwaway(boolean select, Predicate desired) { - EntityPlayerSP p = ctx.player(); + ClientPlayerEntity p = ctx.player(); NonNullList inv = p.inventory.mainInventory; for (byte i = 0; i < 9; i++) { ItemStack item = inv.get(i); diff --git a/src/main/java/baritone/behavior/MemoryBehavior.java b/src/main/java/baritone/behavior/MemoryBehavior.java index d98e32376..0c1680b33 100644 --- a/src/main/java/baritone/behavior/MemoryBehavior.java +++ b/src/main/java/baritone/behavior/MemoryBehavior.java @@ -37,7 +37,7 @@ import net.minecraft.network.play.server.SPacketOpenWindow; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityLockable; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextComponentTranslation; @@ -140,7 +140,7 @@ public synchronized void onReceivePacket(PacketEvent event) { return; } futureInventories.stream() - .filter(i -> i.type.equals(packet.getGuiId()) && i.slots == packet.getSlotCount()) + .filter(i -> i.getType().equals(packet.getGuiId()) && i.slots == packet.getSlotCount()) .findFirst().ifPresent(matched -> { // Remove the future inventory futureInventories.remove(matched); @@ -201,7 +201,7 @@ private BlockPos neighboringConnectedBlock(BlockPos in) { return null; // other things that have contents, but can be placed adjacent without combining } for (int i = 0; i < 4; i++) { - BlockPos adj = in.offset(EnumFacing.byHorizontalIndex(i)); + BlockPos adj = in.offset(Direction.byHorizontalIndex(i)); if (bsi.get0(adj).getBlock() == block) { return adj; } diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index cac48514a..829bd39bc 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -22,7 +22,7 @@ import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; @@ -143,7 +143,7 @@ public final class CachedChunk { /** * The block names of each surface level block for generating an overview */ - private final IBlockState[] overview; + private final BlockState[] overview; private final int[] heightMap; @@ -151,7 +151,7 @@ public final class CachedChunk { public final long cacheTimestamp; - CachedChunk(int x, int z, BitSet data, IBlockState[] overview, Map> specialBlockLocations, long cacheTimestamp) { + CachedChunk(int x, int z, BitSet data, BlockState[] overview, Map> specialBlockLocations, long cacheTimestamp) { validateSize(data); this.x = x; @@ -178,7 +178,7 @@ private final void setSpecial() { } } - public final IBlockState getBlock(int x, int y, int z, int dimension) { + public final BlockState getBlock(int x, int y, int z, int dimension) { int index = getPositionIndex(x, y, z); PathingBlockType type = getType(index); int internalPos = z << 4 | x; @@ -225,7 +225,7 @@ private void calculateHeightMap() { } } - public final IBlockState[] getOverview() { + public final BlockState[] getOverview() { return overview; } diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index 630dcc9e5..84612908e 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -20,7 +20,7 @@ import baritone.Baritone; import baritone.api.cache.ICachedRegion; import baritone.api.utils.BlockUtils; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.util.math.BlockPos; import java.io.*; @@ -75,7 +75,7 @@ public final class CachedRegion implements ICachedRegion { } @Override - public final IBlockState getBlock(int x, int y, int z) { + public final BlockState getBlock(int x, int y, int z) { CachedChunk chunk = chunks[x >> 4][z >> 4]; if (chunk != null) { return chunk.getBlock(x & 15, y, z & 15, dimension); @@ -216,7 +216,7 @@ public synchronized void load(String directory) { boolean[][] present = new boolean[32][32]; BitSet[][] bitSets = new BitSet[32][32]; Map>[][] location = new Map[32][32]; - IBlockState[][][] overview = new IBlockState[32][32][]; + BlockState[][][] overview = new BlockState[32][32][]; long[][] cacheTimestamp = new long[32][32]; for (int x = 0; x < 32; x++) { for (int z = 0; z < 32; z++) { @@ -227,7 +227,7 @@ public synchronized void load(String directory) { in.readFully(bytes); bitSets[x][z] = BitSet.valueOf(bytes); location[x][z] = new HashMap<>(); - overview[x][z] = new IBlockState[256]; + overview[x][z] = new BlockState[256]; present[x][z] = true; break; case CHUNK_NOT_PRESENT: diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index b8e7cc1e3..e5d4a6526 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -21,7 +21,7 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; import net.minecraft.block.*; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -59,7 +59,7 @@ public static CachedChunk pack(Chunk chunk) { // since a bitset is initialized to all zero, and air is saved as zeros continue; } - BlockStateContainer bsc = extendedblockstorage.getData(); + BlockStateContainer bsc = extendedblockstorage.getData(); int yReal = y0 << 4; // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; // for better cache locality, iterate in that order @@ -68,7 +68,7 @@ public static CachedChunk pack(Chunk chunk) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { int index = CachedChunk.getPositionIndex(x, y, z); - IBlockState state = bsc.get(x, y1, z); + BlockState state = bsc.get(x, y1, z); boolean[] bits = getPathingBlockType(state, chunk, x, y, z).getBits(); bitSet.set(index, bits[0]); bitSet.set(index + 1, bits[1]); @@ -86,7 +86,7 @@ public static CachedChunk pack(Chunk chunk) { } //long end = System.nanoTime() / 1000000L; //System.out.println("Chunk packing took " + (end - start) + "ms for " + chunk.x + "," + chunk.z); - IBlockState[] blocks = new IBlockState[256]; + BlockState[] blocks = new BlockState[256]; for (int z = 0; z < 16; z++) { https://www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html @@ -104,7 +104,7 @@ public static CachedChunk pack(Chunk chunk) { return new CachedChunk(chunk.x, chunk.z, bitSet, blocks, specialBlocks, System.currentTimeMillis()); } - private static PathingBlockType getPathingBlockType(IBlockState state, Chunk chunk, int x, int y, int z) { + private static PathingBlockType getPathingBlockType(BlockState state, Chunk chunk, int x, int y, int z) { Block block = state.getBlock(); if (MovementHelper.isWater(state)) { // only water source blocks are plausibly usable, flowing water should be avoid @@ -144,7 +144,7 @@ private static PathingBlockType getPathingBlockType(IBlockState state, Chunk chu return PathingBlockType.SOLID; } - public static IBlockState pathingTypeToBlock(PathingBlockType type, int dimension) { + public static BlockState pathingTypeToBlock(PathingBlockType type, int dimension) { switch (type) { case AIR: return Blocks.AIR.getDefaultState(); diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index b3dc6664e..6bfe58772 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -20,7 +20,7 @@ import baritone.api.cache.IWorldScanner; import baritone.api.utils.IPlayerContext; import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.client.multiplayer.ChunkProviderClient; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; @@ -119,13 +119,13 @@ private boolean scanChunkInto(int chunkX, int chunkZ, Chunk chunk, List s continue; } int yReal = y0 << 4; - BlockStateContainer bsc = extendedblockstorage.getData(); + BlockStateContainer bsc = extendedblockstorage.getData(); // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; // for better cache locality, iterate in that order for (int y = 0; y < 16; y++) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { - IBlockState state = bsc.get(x, y, z); + BlockState state = bsc.get(x, y, z); if (search.contains(state.getBlock())) { int yy = yReal | y; if (result.size() >= max) { diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index ca6bce333..bdad4e7cb 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -25,8 +25,8 @@ import baritone.utils.ToolSet; import baritone.utils.pathing.BetterWorldBorder; import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.block.state.BlockState; +import net.minecraft.client.entity.ClientPlayerEntity; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Items; @@ -77,7 +77,7 @@ public CalculationContext(IBaritone baritone) { public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.safeForThreadedUse = forUseOnAnotherThread; this.baritone = baritone; - EntityPlayerSP player = baritone.getPlayerContext().player(); + ClientPlayerEntity player = baritone.getPlayerContext().player(); this.world = baritone.getPlayerContext().world(); this.worldData = (WorldData) baritone.getWorldProvider().getCurrentWorld(); this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); @@ -115,7 +115,7 @@ public final IBaritone getBaritone() { return baritone; } - public IBlockState get(int x, int y, int z) { + public BlockState get(int x, int y, int z) { return bsi.get0(x, y, z); // laughs maniacally } @@ -123,7 +123,7 @@ public boolean isLoaded(int x, int z) { return bsi.isLoaded(x, z); } - public IBlockState get(BlockPos pos) { + public BlockState get(BlockPos pos) { return get(pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 23b1cf216..eaa512a61 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -25,7 +25,7 @@ import baritone.api.utils.input.Input; import baritone.utils.BlockStateInterface; import net.minecraft.entity.item.EntityFallingBlock; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -35,7 +35,7 @@ public abstract class Movement implements IMovement, MovementHelper { - public static final EnumFacing[] HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP = {EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.EAST, EnumFacing.WEST, EnumFacing.DOWN}; + public static final Direction[] HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP = {Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST, Direction.DOWN}; protected final IBaritone baritone; protected final IPlayerContext ctx; diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index eff91e123..79e98f8a8 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -27,7 +27,7 @@ import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; import net.minecraft.block.*; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.fluid.FlowingFluid; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.IFluidState; @@ -37,7 +37,7 @@ import net.minecraft.pathfinding.PathType; import net.minecraft.state.BooleanProperty; import net.minecraft.state.properties.SlabType; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; @@ -53,7 +53,7 @@ */ public interface MovementHelper extends ActionCosts, Helper { - static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block b = state.getBlock(); return b == Blocks.ICE // ice becomes water, and water can mess up the path || b instanceof BlockSilverfish // obvious reasons @@ -69,7 +69,7 @@ static boolean avoidAdjacentBreaking(BlockStateInterface bsi, int x, int y, int // returns true if you should avoid breaking a block that's adjacent to this one (e.g. lava that will start flowing if you give it a path) // this is only called for north, south, east, west, and up. this is NOT called for down. // we assume that it's ALWAYS okay to break the block thats ABOVE liquid - IBlockState state = bsi.get0(x, y, z); + BlockState state = bsi.get0(x, y, z); Block block = state.getBlock(); if (!directlyAbove // it is fine to mine a block that has a falling block directly above, this (the cost of breaking the stacked fallings) is included in cost calculations // therefore if directlyAbove is true, we will actually ignore if this is falling @@ -89,7 +89,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { return canWalkThrough(bsi, x, y, z, bsi.get0(x, y, z)); } - static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); if (block instanceof BlockAir) { // early return for most common case return true; @@ -133,7 +133,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo if (Baritone.settings().assumeWalkOnWater.value) { return false; } - IBlockState up = bsi.get0(x, y + 1, z); + BlockState up = bsi.get0(x, y + 1, z); if (!up.getFluidState().isEmpty() || up.getBlock() instanceof BlockLilyPad) { return false; } @@ -159,7 +159,7 @@ static boolean fullyPassable(CalculationContext context, int x, int y, int z) { return fullyPassable(context.get(x, y, z)); } - static boolean fullyPassable(IBlockState state) { + static boolean fullyPassable(BlockState state) { Block block = state.getBlock(); if (block instanceof BlockAir) { // early return for most common case return true; @@ -185,7 +185,7 @@ static boolean fullyPassable(IBlockState state) { return state.allowsMovement(null, null, PathType.LAND); } - static boolean isReplacable(int x, int y, int z, IBlockState state, BlockStateInterface bsi) { + static boolean isReplacable(int x, int y, int z, BlockState state, BlockStateInterface bsi) { // for MovementTraverse and MovementAscend // block double plant defaults to true when the block doesn't match, so don't need to check that case // all other overrides just return true or false @@ -219,7 +219,7 @@ static boolean isDoorPassable(IPlayerContext ctx, BlockPos doorPos, BlockPos pla return false; } - IBlockState state = BlockStateInterface.get(ctx, doorPos); + BlockState state = BlockStateInterface.get(ctx, doorPos); if (!(state.getBlock() instanceof BlockDoor)) { return true; } @@ -232,7 +232,7 @@ static boolean isGatePassable(IPlayerContext ctx, BlockPos gatePos, BlockPos pla return false; } - IBlockState state = BlockStateInterface.get(ctx, gatePos); + BlockState state = BlockStateInterface.get(ctx, gatePos); if (!(state.getBlock() instanceof BlockFenceGate)) { return true; } @@ -240,19 +240,19 @@ static boolean isGatePassable(IPlayerContext ctx, BlockPos gatePos, BlockPos pla return state.get(BlockFenceGate.OPEN); } - static boolean isHorizontalBlockPassable(BlockPos blockPos, IBlockState blockState, BlockPos playerPos, BooleanProperty propertyOpen) { + static boolean isHorizontalBlockPassable(BlockPos blockPos, BlockState blockState, BlockPos playerPos, BooleanProperty propertyOpen) { if (playerPos.equals(blockPos)) { return false; } - EnumFacing.Axis facing = blockState.get(BlockHorizontal.HORIZONTAL_FACING).getAxis(); + Direction.Axis facing = blockState.get(BlockHorizontal.HORIZONTAL_FACING).getAxis(); boolean open = blockState.get(propertyOpen); - EnumFacing.Axis playerFacing; + Direction.Axis playerFacing; if (playerPos.north().equals(blockPos) || playerPos.south().equals(blockPos)) { - playerFacing = EnumFacing.Axis.Z; + playerFacing = Direction.Axis.Z; } else if (playerPos.east().equals(blockPos) || playerPos.west().equals(blockPos)) { - playerFacing = EnumFacing.Axis.X; + playerFacing = Direction.Axis.X; } else { return true; } @@ -260,7 +260,7 @@ static boolean isHorizontalBlockPassable(BlockPos blockPos, IBlockState blockSta return (facing == playerFacing) == open; } - static boolean avoidWalkingInto(IBlockState state) { + static boolean avoidWalkingInto(BlockState state) { Block block = state.getBlock(); return !state.getFluidState().isEmpty() || block == Blocks.MAGMA_BLOCK @@ -283,7 +283,7 @@ static boolean avoidWalkingInto(IBlockState state) { * @param state The state of the block at the specified location * @return Whether or not the specified block can be walked on */ - static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); if (block instanceof BlockAir || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { // early return for most common case (air) @@ -305,7 +305,7 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockSta if (isWater(state)) { // since this is called literally millions of times per second, the benefit of not allocating millions of useless "pos.up()" // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think its a decrease in readability - IBlockState upState = bsi.get0(x, y + 1, z); + BlockState upState = bsi.get0(x, y + 1, z); Block up = upState.getBlock(); if (up == Blocks.LILY_PAD || up instanceof BlockCarpet) { return true; @@ -333,7 +333,7 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockSta return block instanceof BlockStairs; } - static boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, IBlockState state) { + static boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, BlockState state) { return canWalkOn(new BlockStateInterface(ctx), pos.x, pos.y, pos.z, state); } @@ -361,7 +361,7 @@ static boolean canPlaceAgainst(IPlayerContext ctx, BlockPos pos) { return canPlaceAgainst(new BlockStateInterface(ctx), pos); } - static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z, BlockState state) { // can we look at the center of a side face of this block and likely be able to place? // (thats how this check is used) // therefore dont include weird things that we technically could place against (like carpet) but practically can't @@ -372,7 +372,7 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i return getMiningDurationTicks(context, x, y, z, context.get(x, y, z), includeFalling); } - static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, IBlockState state, boolean includeFalling) { + static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, BlockState state, boolean includeFalling) { Block block = state.getBlock(); if (!canWalkThrough(context.bsi, x, y, z, state)) { if (!state.getFluidState().isEmpty()) { @@ -393,7 +393,7 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i result += context.breakBlockAdditionalCost; result *= mult; if (includeFalling) { - IBlockState above = context.get(x, y + 1, z); + BlockState above = context.get(x, y + 1, z); if (above.getBlock() instanceof BlockFalling) { result += getMiningDurationTicks(context, x, y + 1, z, above, true); } @@ -403,7 +403,7 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i return 0; // we won't actually mine it, so don't check fallings above } - static boolean isBottomSlab(IBlockState state) { + static boolean isBottomSlab(BlockState state) { return state.getBlock() instanceof BlockSlab && state.get(BlockSlab.TYPE) == SlabType.BOTTOM; } @@ -414,7 +414,7 @@ static boolean isBottomSlab(IBlockState state) { * @param ctx The player context * @param b the blockstate to mine */ - static void switchToBestToolFor(IPlayerContext ctx, IBlockState b) { + static void switchToBestToolFor(IPlayerContext ctx, BlockState b) { switchToBestToolFor(ctx, b, new ToolSet(ctx.player())); } @@ -425,7 +425,7 @@ static void switchToBestToolFor(IPlayerContext ctx, IBlockState b) { * @param b the blockstate to mine * @param ts previously calculated ToolSet */ - static void switchToBestToolFor(IPlayerContext ctx, IBlockState b, ToolSet ts) { + static void switchToBestToolFor(IPlayerContext ctx, BlockState b, ToolSet ts) { ctx.player().inventory.currentItem = ts.getBestSlot(b.getBlock()); } @@ -445,7 +445,7 @@ static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { * @param state The block state * @return Whether or not the block is water */ - static boolean isWater(IBlockState state) { + static boolean isWater(BlockState state) { Fluid f = state.getFluidState().getFluid(); return f == Fluids.WATER || f == Fluids.FLOWING_WATER; } @@ -462,7 +462,7 @@ static boolean isWater(IPlayerContext ctx, BlockPos bp) { return isWater(BlockStateInterface.get(ctx, bp)); } - static boolean isLava(IBlockState state) { + static boolean isLava(BlockState state) { Fluid f = state.getFluidState().getFluid(); return f == Fluids.LAVA || f == Fluids.FLOWING_LAVA; } @@ -478,17 +478,17 @@ static boolean isLiquid(IPlayerContext ctx, BlockPos p) { return isLiquid(BlockStateInterface.get(ctx, p)); } - static boolean isLiquid(IBlockState blockState) { + static boolean isLiquid(BlockState blockState) { return !blockState.getFluidState().isEmpty(); } - static boolean possiblyFlowing(IBlockState state) { + static boolean possiblyFlowing(BlockState state) { IFluidState fluidState = state.getFluidState(); return fluidState.getFluid() instanceof FlowingFluid && fluidState.getFluid().getLevel(fluidState) != 8; } - static boolean isFlowing(int x, int y, int z, IBlockState state, BlockStateInterface bsi) { + static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterface bsi) { IFluidState fluidState = state.getFluidState(); if (!(fluidState.getFluid() instanceof FlowingFluid)) { return false; @@ -524,7 +524,7 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, double faceZ = (placeAt.getZ() + against1.getZ() + 1.0D) * 0.5D; Rotation place = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()); RayTraceResult res = RayTraceUtils.rayTraceTowards(ctx.player(), place, ctx.playerController().getBlockReachDistance()); - if (res != null && res.type == RayTraceResult.Type.BLOCK && res.getBlockPos().equals(against1) && res.getBlockPos().offset(res.sideHit).equals(placeAt)) { + if (res != null && res.getType() == RayTraceResult.Type.BLOCK && res.getBlockPos().equals(against1) && res.getBlockPos().offset(res.sideHit).equals(placeAt)) { state.setTarget(new MovementState.MovementTarget(place, true)); found = true; @@ -538,7 +538,7 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, } if (ctx.getSelectedBlock().isPresent()) { BlockPos selectedBlock = ctx.getSelectedBlock().get(); - EnumFacing side = ctx.objectMouseOver().sideHit; + Direction side = ctx.objectMouseOver().sideHit; // only way for selectedBlock.equals(placeAt) to be true is if it's replacable if (selectedBlock.equals(placeAt) || (MovementHelper.canPlaceAgainst(ctx, selectedBlock) && selectedBlock.offset(side).equals(placeAt))) { ((Baritone) baritone).getInventoryBehavior().selectThrowawayForLocation(true, placeAt.getX(), placeAt.getY(), placeAt.getZ()); diff --git a/src/main/java/baritone/pathing/movement/Moves.java b/src/main/java/baritone/pathing/movement/Moves.java index c626327e1..c125063bf 100644 --- a/src/main/java/baritone/pathing/movement/Moves.java +++ b/src/main/java/baritone/pathing/movement/Moves.java @@ -20,7 +20,7 @@ import baritone.api.utils.BetterBlockPos; import baritone.pathing.movement.movements.*; import baritone.utils.pathing.MutableMoveResult; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; /** * An enum of all possible movements attached to all possible directions they could be taken in @@ -225,7 +225,7 @@ public void apply(CalculationContext context, int x, int y, int z, MutableMoveRe public Movement apply0(CalculationContext context, BetterBlockPos src) { MutableMoveResult res = new MutableMoveResult(); apply(context, src.x, src.y, src.z, res); - return new MovementDiagonal(context.getBaritone(), src, EnumFacing.NORTH, EnumFacing.EAST, res.y - src.y); + return new MovementDiagonal(context.getBaritone(), src, Direction.NORTH, Direction.EAST, res.y - src.y); } @Override @@ -239,7 +239,7 @@ public void apply(CalculationContext context, int x, int y, int z, MutableMoveRe public Movement apply0(CalculationContext context, BetterBlockPos src) { MutableMoveResult res = new MutableMoveResult(); apply(context, src.x, src.y, src.z, res); - return new MovementDiagonal(context.getBaritone(), src, EnumFacing.NORTH, EnumFacing.WEST, res.y - src.y); + return new MovementDiagonal(context.getBaritone(), src, Direction.NORTH, Direction.WEST, res.y - src.y); } @Override @@ -253,7 +253,7 @@ public void apply(CalculationContext context, int x, int y, int z, MutableMoveRe public Movement apply0(CalculationContext context, BetterBlockPos src) { MutableMoveResult res = new MutableMoveResult(); apply(context, src.x, src.y, src.z, res); - return new MovementDiagonal(context.getBaritone(), src, EnumFacing.SOUTH, EnumFacing.EAST, res.y - src.y); + return new MovementDiagonal(context.getBaritone(), src, Direction.SOUTH, Direction.EAST, res.y - src.y); } @Override @@ -267,7 +267,7 @@ public void apply(CalculationContext context, int x, int y, int z, MutableMoveRe public Movement apply0(CalculationContext context, BetterBlockPos src) { MutableMoveResult res = new MutableMoveResult(); apply(context, src.x, src.y, src.z, res); - return new MovementDiagonal(context.getBaritone(), src, EnumFacing.SOUTH, EnumFacing.WEST, res.y - src.y); + return new MovementDiagonal(context.getBaritone(), src, Direction.SOUTH, Direction.WEST, res.y - src.y); } @Override @@ -279,48 +279,48 @@ public void apply(CalculationContext context, int x, int y, int z, MutableMoveRe PARKOUR_NORTH(0, 0, -4, true, false) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return MovementParkour.cost(context, src, EnumFacing.NORTH); + return MovementParkour.cost(context, src, Direction.NORTH); } @Override public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { - MovementParkour.cost(context, x, y, z, EnumFacing.NORTH, result); + MovementParkour.cost(context, x, y, z, Direction.NORTH, result); } }, PARKOUR_SOUTH(0, 0, +4, true, false) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return MovementParkour.cost(context, src, EnumFacing.SOUTH); + return MovementParkour.cost(context, src, Direction.SOUTH); } @Override public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { - MovementParkour.cost(context, x, y, z, EnumFacing.SOUTH, result); + MovementParkour.cost(context, x, y, z, Direction.SOUTH, result); } }, PARKOUR_EAST(+4, 0, 0, true, false) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return MovementParkour.cost(context, src, EnumFacing.EAST); + return MovementParkour.cost(context, src, Direction.EAST); } @Override public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { - MovementParkour.cost(context, x, y, z, EnumFacing.EAST, result); + MovementParkour.cost(context, x, y, z, Direction.EAST, result); } }, PARKOUR_WEST(-4, 0, 0, true, false) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return MovementParkour.cost(context, src, EnumFacing.WEST); + return MovementParkour.cost(context, src, Direction.WEST); } @Override public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { - MovementParkour.cost(context, x, y, z, EnumFacing.WEST, result); + MovementParkour.cost(context, x, y, z, Direction.WEST, result); } }; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 6d5ecd857..5c61b3ca8 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -28,9 +28,9 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import net.minecraft.block.BlockFalling; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.init.Blocks; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; public class MovementAscend extends Movement { @@ -52,7 +52,7 @@ public double calculateCost(CalculationContext context) { } public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { - IBlockState toPlace = context.get(destX, y, destZ); + BlockState toPlace = context.get(destX, y, destZ); double additionalPlacementCost = 0; if (!MovementHelper.canWalkOn(context.bsi, destX, y, destZ, toPlace)) { additionalPlacementCost = context.costOfPlacingAt(destX, y, destZ); @@ -79,7 +79,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d return COST_INF; } } - IBlockState srcUp2 = context.get(x, y + 2, z); // used lower down anyway + BlockState srcUp2 = context.get(x, y + 2, z); // used lower down anyway if (context.get(x, y + 3, z).getBlock() instanceof BlockFalling && (MovementHelper.canWalkThrough(context.bsi, x, y + 1, z) || !(srcUp2.getBlock() instanceof BlockFalling))) {//it would fall on us and possibly suffocate us // HOWEVER, we assume that we're standing in the start position // that means that src and src.up(1) are both air @@ -98,7 +98,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d // it's possible srcUp is AIR from the start, and srcUp2 is falling // and in that scenario, when we arrive and break srcUp2, that lets srcUp3 fall on us and suffocate us } - IBlockState srcDown = context.get(x, y - 1, z); + BlockState srcDown = context.get(x, y - 1, z); if (srcDown.getBlock() == Blocks.LADDER || srcDown.getBlock() == Blocks.VINE) { return COST_INF; } @@ -158,7 +158,7 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.UNREACHABLE); } - IBlockState jumpingOnto = BlockStateInterface.get(ctx, positionToPlace); + BlockState jumpingOnto = BlockStateInterface.get(ctx, positionToPlace); if (!MovementHelper.canWalkOn(ctx, positionToPlace, jumpingOnto)) { ticksWithoutPlacement++; if (MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), false) == PlaceResult.READY_TO_PLACE) { @@ -211,7 +211,7 @@ public MovementState updateState(MovementState state) { public boolean headBonkClear() { BetterBlockPos startUp = src.up(2); for (int i = 0; i < 4; i++) { - BetterBlockPos check = startUp.offset(EnumFacing.byHorizontalIndex(i)); + BetterBlockPos check = startUp.offset(Direction.byHorizontalIndex(i)); if (!MovementHelper.canWalkThrough(ctx, check)) { // We might bonk our head return false; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 528300787..e46f868b9 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -31,8 +31,8 @@ import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; import net.minecraft.block.BlockFalling; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.block.state.BlockState; +import net.minecraft.client.entity.ClientPlayerEntity; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -63,7 +63,7 @@ public double calculateCost(CalculationContext context) { public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { double totalCost = 0; - IBlockState destDown = context.get(destX, y - 1, destZ); + BlockState destDown = context.get(destX, y - 1, destZ); totalCost += MovementHelper.getMiningDurationTicks(context, destX, y - 1, destZ, destDown, false); if (totalCost >= COST_INF) { return; @@ -92,7 +92,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des //A is plausibly breakable by either descend or fall //C, D, etc determine the length of the fall - IBlockState below = context.get(destX, y - 2, destZ); + BlockState below = context.get(destX, y - 2, destZ); if (!MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ, below)) { dynamicFallCost(context, x, y, z, destX, destZ, totalCost, below, res); return; @@ -115,7 +115,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des res.cost = totalCost; } - public static boolean dynamicFallCost(CalculationContext context, int x, int y, int z, int destX, int destZ, double frontBreak, IBlockState below, MutableMoveResult res) { + public static boolean dynamicFallCost(CalculationContext context, int x, int y, int z, int destX, int destZ, double frontBreak, BlockState below, MutableMoveResult res) { if (frontBreak != 0 && context.get(destX, y + 2, destZ).getBlock() instanceof BlockFalling) { // if frontBreak is 0 we can actually get through this without updating the falling block and making it actually fall // but if frontBreak is nonzero, we're breaking blocks in front, so don't let anything fall through this column, @@ -134,7 +134,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, // this check prevents it from getting the block at y=-1 and crashing return false; } - IBlockState ontoBlock = context.get(destX, newY, destZ); + BlockState ontoBlock = context.get(destX, newY, destZ); int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; if (MovementHelper.isWater(ontoBlock)) { @@ -214,7 +214,7 @@ public MovementState updateState(MovementState state) { if (safeMode()) { double destX = (src.getX() + 0.5) * 0.17 + (dest.getX() + 0.5) * 0.83; double destZ = (src.getZ() + 0.5) * 0.17 + (dest.getZ() + 0.5) * 0.83; - EntityPlayerSP player = ctx.player(); + ClientPlayerEntity player = ctx.player(); state.setTarget(new MovementState.MovementTarget( new Rotation(RotationUtils.calcRotationFromVec3d(player.getEyePosition(1.0F), new Vec3d(destX, dest.getY(), destZ), diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index be8d92746..2f0d49cdc 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -29,9 +29,9 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.init.Blocks; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import java.util.ArrayList; @@ -41,12 +41,12 @@ public class MovementDiagonal extends Movement { private static final double SQRT_2 = Math.sqrt(2); - public MovementDiagonal(IBaritone baritone, BetterBlockPos start, EnumFacing dir1, EnumFacing dir2, int dy) { + public MovementDiagonal(IBaritone baritone, BetterBlockPos start, Direction dir1, Direction dir2, int dy) { this(baritone, start, start.offset(dir1), start.offset(dir2), dir2, dy); // super(start, start.offset(dir1).offset(dir2), new BlockPos[]{start.offset(dir1), start.offset(dir1).up(), start.offset(dir2), start.offset(dir2).up(), start.offset(dir1).offset(dir2), start.offset(dir1).offset(dir2).up()}, new BlockPos[]{start.offset(dir1).offset(dir2).down()}); } - private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPos dir1, BetterBlockPos dir2, EnumFacing drr2, int dy) { + private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPos dir1, BetterBlockPos dir2, Direction drr2, int dy) { this(baritone, start, dir1.offset(drr2).up(dy), dir1, dir2); } @@ -65,11 +65,11 @@ public double calculateCost(CalculationContext context) { } public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { - IBlockState destInto = context.get(destX, y, destZ); + BlockState destInto = context.get(destX, y, destZ); if (!MovementHelper.canWalkThrough(context.bsi, destX, y, destZ, destInto) || !MovementHelper.canWalkThrough(context.bsi, destX, y + 1, destZ)) { return; } - IBlockState destWalkOn = context.get(destX, y - 1, destZ); + BlockState destWalkOn = context.get(destX, y - 1, destZ); boolean descend = false; if (!MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn)) { descend = true; @@ -91,16 +91,16 @@ public static void cost(CalculationContext context, int x, int y, int z, int des if (fromDown == Blocks.SOUL_SAND) { multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; } - IBlockState cuttingOver1 = context.get(x, y - 1, destZ); + BlockState cuttingOver1 = context.get(x, y - 1, destZ); if (cuttingOver1.getBlock() == Blocks.MAGMA_BLOCK || MovementHelper.isLava(cuttingOver1)) { return; } - IBlockState cuttingOver2 = context.get(destX, y - 1, z); + BlockState cuttingOver2 = context.get(destX, y - 1, z); if (cuttingOver2.getBlock() == Blocks.MAGMA_BLOCK || MovementHelper.isLava(cuttingOver2)) { return; } - IBlockState pb0 = context.get(x, y, destZ); - IBlockState pb2 = context.get(destX, y, z); + BlockState pb0 = context.get(x, y, destZ); + BlockState pb2 = context.get(destX, y, z); double optionA = MovementHelper.getMiningDurationTicks(context, x, y, destZ, pb0, false); double optionB = MovementHelper.getMiningDurationTicks(context, destX, y, z, pb2, false); if (optionA != 0 && optionB != 0) { @@ -108,13 +108,13 @@ public static void cost(CalculationContext context, int x, int y, int z, int des // so no need to check pb1 as well, might as well return early here return; } - IBlockState pb1 = context.get(x, y + 1, destZ); + BlockState pb1 = context.get(x, y + 1, destZ); optionA += MovementHelper.getMiningDurationTicks(context, x, y + 1, destZ, pb1, true); if (optionA != 0 && optionB != 0) { // same deal, if pb1 makes optionA nonzero and option B already was nonzero, pb3 can't affect the result return; } - IBlockState pb3 = context.get(destX, y + 1, z); + BlockState pb3 = context.get(destX, y + 1, z); if (optionA == 0 && ((MovementHelper.avoidWalkingInto(pb2) && pb2.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb3))) { // at this point we're done calculating optionA, so we can check if it's actually possible to edge around in that direction return; @@ -129,7 +129,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des return; } boolean water = false; - IBlockState startState = context.get(x, y, z); + BlockState startState = context.get(x, y, z); Block startIn = startState.getBlock(); if (MovementHelper.isWater(startState) || MovementHelper.isWater(destInto)) { // Ignore previous multiplier diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 47ed95808..bc97a8911 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -25,7 +25,7 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.init.Blocks; public class MovementDownward extends Movement { @@ -54,7 +54,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (!MovementHelper.canWalkOn(context.bsi, x, y - 2, z)) { return COST_INF; } - IBlockState down = context.get(x, y - 1, z); + BlockState down = context.get(x, y - 1, z); Block downBlock = down.getBlock(); if (downBlock == Blocks.LADDER || downBlock == Blocks.VINE) { return LADDER_DOWN_ONE_COST; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index fc54a41f8..ff84e4f52 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -32,13 +32,13 @@ import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; import net.minecraft.block.BlockLadder; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.fluid.WaterFluid; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; @@ -80,7 +80,7 @@ public MovementState updateState(MovementState state) { BlockPos playerFeet = ctx.playerFeet(); Rotation toDest = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()); Rotation targetRotation = null; - IBlockState destState = ctx.world().getBlockState(dest); + BlockState destState = ctx.world().getBlockState(dest); Block destBlock = destState.getBlock(); boolean isWater = destState.getFluidState().getFluid() instanceof WaterFluid; if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { @@ -128,7 +128,7 @@ public MovementState updateState(MovementState state) { } state.setInput(Input.MOVE_FORWARD, true); } - Vec3i avoid = Optional.ofNullable(avoid()).map(EnumFacing::getDirectionVec).orElse(null); + Vec3i avoid = Optional.ofNullable(avoid()).map(Direction::getDirectionVec).orElse(null); if (avoid == null) { avoid = src.subtract(dest); } else { @@ -146,9 +146,9 @@ public MovementState updateState(MovementState state) { return state; } - private EnumFacing avoid() { + private Direction avoid() { for (int i = 0; i < 15; i++) { - IBlockState state = ctx.world().getBlockState(ctx.playerFeet().down(i)); + BlockState state = ctx.world().getBlockState(ctx.playerFeet().down(i)); if (state.getBlock() == Blocks.LADDER) { return state.get(BlockLadder.FACING); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index e993ebac0..c15b57b5d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -29,33 +29,33 @@ import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; import net.minecraft.block.BlockStairs; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.fluid.WaterFluid; import net.minecraft.init.Blocks; import net.minecraft.init.Fluids; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; public class MovementParkour extends Movement { private static final BetterBlockPos[] EMPTY = new BetterBlockPos[]{}; - private final EnumFacing direction; + private final Direction direction; private final int dist; - private MovementParkour(IBaritone baritone, BetterBlockPos src, int dist, EnumFacing dir) { + private MovementParkour(IBaritone baritone, BetterBlockPos src, int dist, Direction dir) { super(baritone, src, src.offset(dir, dist), EMPTY, src.offset(dir, dist).down()); this.direction = dir; this.dist = dist; } - public static MovementParkour cost(CalculationContext context, BetterBlockPos src, EnumFacing direction) { + public static MovementParkour cost(CalculationContext context, BetterBlockPos src, Direction direction) { MutableMoveResult res = new MutableMoveResult(); cost(context, src.x, src.y, src.z, direction, res); int dist = Math.abs(res.x - src.x) + Math.abs(res.z - src.z); return new MovementParkour(context.getBaritone(), src, dist, direction); } - public static void cost(CalculationContext context, int x, int y, int z, EnumFacing dir, MutableMoveResult res) { + public static void cost(CalculationContext context, int x, int y, int z, Direction dir, MutableMoveResult res) { if (!context.allowParkour) { return; } @@ -69,7 +69,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac // most common case at the top -- the adjacent block isn't air return; } - IBlockState adj = context.get(x + xDiff, y - 1, z + zDiff); + BlockState adj = context.get(x + xDiff, y - 1, z + zDiff); if (MovementHelper.canWalkOn(context.bsi, x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) // second most common case -- we could just traverse not parkour return; @@ -86,7 +86,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac if (!MovementHelper.fullyPassable(context, x, y + 2, z)) { return; } - IBlockState standingOn = context.get(x, y - 1, z); + BlockState standingOn = context.get(x, y - 1, z); if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof BlockStairs || MovementHelper.isBottomSlab(standingOn) || standingOn.getFluidState().getFluid() != Fluids.EMPTY) { return; } @@ -107,7 +107,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac return; } } - IBlockState landingOn = context.bsi.get0(x + xDiff * i, y - 1, z + zDiff * i); + BlockState landingOn = context.bsi.get0(x + xDiff * i, y - 1, z + zDiff * i); // farmland needs to be canwalkon otherwise farm can never work at all, but we want to specifically disallow ending a jumy on farmland haha if (landingOn.getBlock() != Blocks.FARMLAND && MovementHelper.canWalkOn(context.bsi, x + xDiff * i, y - 1, z + zDiff * i, landingOn)) { res.x = x + xDiff * i; @@ -130,7 +130,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac if (placeCost >= COST_INF) { return; } - IBlockState toReplace = context.get(destX, y - 1, destZ); + BlockState toReplace = context.get(destX, y - 1, destZ); if (!MovementHelper.isReplacable(destX, y - 1, destZ, toReplace, context.bsi)) { return; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 20f7fde31..6750a782f 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -31,7 +31,7 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import net.minecraft.block.*; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -50,10 +50,10 @@ public double calculateCost(CalculationContext context) { } public static double cost(CalculationContext context, int x, int y, int z) { - IBlockState fromState = context.get(x, y, z); + BlockState fromState = context.get(x, y, z); Block from = fromState.getBlock(); boolean ladder = from == Blocks.LADDER || from == Blocks.VINE; - IBlockState fromDown = context.get(x, y - 1, z); + BlockState fromDown = context.get(x, y - 1, z); if (!ladder) { if (fromDown.getBlock() == Blocks.LADDER || fromDown.getBlock() == Blocks.VINE) { return COST_INF; // can't pillar from a ladder or vine onto something that isn't also climbable @@ -65,12 +65,12 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (from == Blocks.VINE && !hasAgainst(context, x, y, z)) { // TODO this vine can't be climbed, but we could place a pillar still since vines are replacable, no? perhaps the pillar jump would be impossible because of the slowdown actually. return COST_INF; } - IBlockState toBreak = context.get(x, y + 2, z); + BlockState toBreak = context.get(x, y + 2, z); Block toBreakBlock = toBreak.getBlock(); if (toBreakBlock instanceof BlockFenceGate) { // see issue #172 return COST_INF; } - IBlockState srcUp = null; + BlockState srcUp = null; if (MovementHelper.isWater(toBreak) && MovementHelper.isWater(fromState)) { // TODO should this also be allowed if toBreakBlock is air? srcUp = context.get(x, y + 1, z); if (MovementHelper.isWater(srcUp)) { @@ -102,7 +102,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (toBreakBlock == Blocks.LADDER || toBreakBlock == Blocks.VINE) { hardness = 0; // we won't actually need to break the ladder / vine because we're going to use it } else { - IBlockState check = context.get(x, y + 3, z); // the block on top of the one we're going to break, could it fall on us? + BlockState check = context.get(x, y + 3, z); // the block on top of the one we're going to break, could it fall on us? if (check.getBlock() instanceof BlockFalling) { // see MovementAscend's identical check for breaking a falling block above our head if (srcUp == null) { @@ -162,7 +162,7 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.UNREACHABLE); } - IBlockState fromDown = BlockStateInterface.get(ctx, src); + BlockState fromDown = BlockStateInterface.get(ctx, src); if (MovementHelper.isWater(fromDown) && MovementHelper.isWater(ctx, dest)) { // stay centered while swimming up a water column state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()), false)); @@ -236,7 +236,7 @@ public MovementState updateState(MovementState state) { if (!blockIsThere) { - IBlockState frState = BlockStateInterface.get(ctx, src); + BlockState frState = BlockStateInterface.get(ctx, src); Block fr = frState.getBlock(); // TODO: Evaluate usage of getMaterial().isReplaceable() if (!(fr instanceof BlockAir || frState.getMaterial().isReplaceable())) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index d0d88cae7..68c4b4cc3 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -31,7 +31,7 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import net.minecraft.block.*; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.fluid.WaterFluid; import net.minecraft.init.Blocks; import net.minecraft.state.properties.SlabType; @@ -61,10 +61,10 @@ public double calculateCost(CalculationContext context) { } public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { - IBlockState pb0 = context.get(destX, y + 1, destZ); - IBlockState pb1 = context.get(destX, y, destZ); - IBlockState destOn = context.get(destX, y - 1, destZ); - IBlockState down = context.get(x, y - 1, z); + BlockState pb0 = context.get(destX, y + 1, destZ); + BlockState pb1 = context.get(destX, y, destZ); + BlockState destOn = context.get(destX, y - 1, destZ); + BlockState down = context.get(x, y - 1, z); Block srcDown = down.getBlock(); if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; @@ -149,8 +149,8 @@ public static double cost(CalculationContext context, int x, int y, int z, int d @Override public MovementState updateState(MovementState state) { super.updateState(state); - IBlockState pb0 = BlockStateInterface.get(ctx, positionsToBreak[0]); - IBlockState pb1 = BlockStateInterface.get(ctx, positionsToBreak[1]); + BlockState pb0 = BlockStateInterface.get(ctx, positionsToBreak[0]); + BlockState pb1 = BlockStateInterface.get(ctx, positionsToBreak[1]); if (state.getStatus() != MovementStatus.RUNNING) { // if the setting is enabled if (!Baritone.settings().walkWhileBreaking.value) { @@ -241,13 +241,13 @@ public MovementState updateState(MovementState state) { return state; } BlockPos into = dest.subtract(src).add(dest); - IBlockState intoBelow = BlockStateInterface.get(ctx, into); - IBlockState intoAbove = BlockStateInterface.get(ctx, into.up()); + BlockState intoBelow = BlockStateInterface.get(ctx, into); + BlockState intoAbove = BlockStateInterface.get(ctx, into.up()); if (wasTheBridgeBlockAlwaysThere && (!MovementHelper.isLiquid(ctx, feet) || Baritone.settings().sprintInWater.value) && (!MovementHelper.avoidWalkingInto(intoBelow) || MovementHelper.isWater(intoBelow)) && !MovementHelper.avoidWalkingInto(intoAbove)) { state.setInput(Input.SPRINT, true); } - IBlockState destDown = BlockStateInterface.get(ctx, dest.down()); + BlockState destDown = BlockStateInterface.get(ctx, dest.down()); BlockPos against = positionsToBreak[0]; if (feet.getY() != dest.getY() && ladder && (destDown.getBlock() == Blocks.VINE || destDown.getBlock() == Blocks.LADDER)) { against = destDown.getBlock() == Blocks.VINE ? MovementPillar.getAgainst(new CalculationContext(baritone), dest.down()) : dest.offset(destDown.get(BlockLadder.FACING).getOpposite()); diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java index 1c7b46f4d..49e17a8c6 100644 --- a/src/main/java/baritone/process/BackfillProcess.java +++ b/src/main/java/baritone/process/BackfillProcess.java @@ -26,7 +26,7 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.path.PathExecutor; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.chunk.EmptyChunk; @@ -36,7 +36,7 @@ public final class BackfillProcess extends BaritoneProcessHelper { - public HashMap blocksToReplace = new HashMap<>(); + public HashMap blocksToReplace = new HashMap<>(); public BackfillProcess(Baritone baritone) { super(baritone); diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 4921b6978..a0f957663 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -38,7 +38,7 @@ import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import net.minecraft.block.BlockAir; import net.minecraft.block.BlockFlowingFluid; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.init.Blocks; import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.ItemBlock; @@ -46,7 +46,7 @@ import net.minecraft.item.ItemUseContext; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.Tuple; import net.minecraft.util.math.*; import net.minecraft.util.math.shapes.VoxelShape; @@ -126,14 +126,14 @@ public boolean isActive() { return schematic != null; } - public IBlockState placeAt(int x, int y, int z) { + public BlockState placeAt(int x, int y, int z) { if (!isActive()) { return null; } if (!schematic.inSchematic(x - origin.getX(), y - origin.getY(), z - origin.getZ())) { return null; } - IBlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ()); + BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ()); if (state.getBlock() instanceof BlockAir) { return null; } @@ -152,11 +152,11 @@ private Optional> toBreakNearPlayer(BuilderCalcu if (dy == -1 && x == pathStart.x && z == pathStart.z) { continue; // dont mine what we're supported by, but not directly standing on } - IBlockState desired = bcc.getSchematic(x, y, z); + BlockState desired = bcc.getSchematic(x, y, z); if (desired == null) { continue; // irrelevant } - IBlockState curr = bcc.bsi.get0(x, y, z); + BlockState curr = bcc.bsi.get0(x, y, z); if (!(curr.getBlock() instanceof BlockAir) && !valid(curr, desired)) { BetterBlockPos pos = new BetterBlockPos(x, y, z); Optional rot = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); @@ -173,10 +173,10 @@ private Optional> toBreakNearPlayer(BuilderCalcu public class Placement { private final int hotbarSelection; private final BlockPos placeAgainst; - private final EnumFacing side; + private final Direction side; private final Rotation rot; - public Placement(int hotbarSelection, BlockPos placeAgainst, EnumFacing side, Rotation rot) { + public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { this.hotbarSelection = hotbarSelection; this.placeAgainst = placeAgainst; this.side = side; @@ -184,7 +184,7 @@ public Placement(int hotbarSelection, BlockPos placeAgainst, EnumFacing side, Ro } } - private Optional searchForPlacables(BuilderCalculationContext bcc, List desirableOnHotbar) { + private Optional searchForPlacables(BuilderCalculationContext bcc, List desirableOnHotbar) { BetterBlockPos center = ctx.playerFeet(); for (int dx = -5; dx <= 5; dx++) { for (int dy = -5; dy <= 1; dy++) { @@ -192,11 +192,11 @@ private Optional searchForPlacables(BuilderCalculationContext bcc, Li int x = center.x + dx; int y = center.y + dy; int z = center.z + dz; - IBlockState desired = bcc.getSchematic(x, y, z); + BlockState desired = bcc.getSchematic(x, y, z); if (desired == null) { continue; // irrelevant } - IBlockState curr = bcc.bsi.get0(x, y, z); + BlockState curr = bcc.bsi.get0(x, y, z); if (MovementHelper.isReplacable(x, y, z, curr, bcc.bsi) && !valid(curr, desired)) { if (dy == 1 && bcc.bsi.get0(x, y + 1, z).getBlock() instanceof BlockAir) { continue; @@ -213,15 +213,15 @@ private Optional searchForPlacables(BuilderCalculationContext bcc, Li return Optional.empty(); } - public boolean placementPlausible(BlockPos pos, IBlockState state) { + public boolean placementPlausible(BlockPos pos, BlockState state) { VoxelShape voxelshape = state.getCollisionShape(ctx.world(), pos); return voxelshape.isEmpty() || ctx.world().checkNoEntityCollision(null, voxelshape.withOffset(pos.getX(), pos.getY(), pos.getZ())); } - private Optional possibleToPlace(IBlockState toPlace, int x, int y, int z, BlockStateInterface bsi) { - for (EnumFacing against : EnumFacing.values()) { + private Optional possibleToPlace(BlockState toPlace, int x, int y, int z, BlockStateInterface bsi) { + for (Direction against : Direction.values()) { BetterBlockPos placeAgainstPos = new BetterBlockPos(x, y, z).offset(against); - IBlockState placeAgainstState = bsi.get0(placeAgainstPos); + BlockState placeAgainstState = bsi.get0(placeAgainstPos); if (MovementHelper.isReplacable(placeAgainstPos.x, placeAgainstPos.y, placeAgainstPos.z, placeAgainstState, bsi)) { continue; } @@ -238,7 +238,7 @@ private Optional possibleToPlace(IBlockState toPlace, int x, int y, i double placeZ = placeAgainstPos.z + aabb.minZ * placementMultiplier.z + aabb.maxZ * (1 - placementMultiplier.z); Rotation rot = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(placeX, placeY, placeZ), ctx.playerRotations()); RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot, ctx.playerController().getBlockReachDistance()); - if (result != null && result.type == RayTraceResult.Type.BLOCK && result.getBlockPos().equals(placeAgainstPos) && result.sideHit == against.getOpposite()) { + if (result != null && result.getType() == RayTraceResult.Type.BLOCK && result.getBlockPos().equals(placeAgainstPos) && result.sideHit == against.getOpposite()) { OptionalInt hotbar = hasAnyItemThatWouldPlace(toPlace, result, rot); if (hotbar.isPresent()) { return Optional.of(new Placement(hotbar.getAsInt(), placeAgainstPos, against.getOpposite(), rot)); @@ -249,7 +249,7 @@ private Optional possibleToPlace(IBlockState toPlace, int x, int y, i return Optional.empty(); } - private OptionalInt hasAnyItemThatWouldPlace(IBlockState desired, RayTraceResult result, Rotation rot) { + private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, RayTraceResult result, Rotation rot) { for (int i = 0; i < 9; i++) { ItemStack stack = ctx.player().inventory.mainInventory.get(i); if (stack.isEmpty() || !(stack.getItem() instanceof ItemBlock)) { @@ -269,7 +269,7 @@ private OptionalInt hasAnyItemThatWouldPlace(IBlockState desired, RayTraceResult (float) result.hitVec.y - result.getBlockPos().getY(), (float) result.hitVec.z - result.getBlockPos().getZ() )); - IBlockState wouldBePlaced = ((ItemBlock) stack.getItem()).getBlock().getStateForPlacement(meme); + BlockState wouldBePlaced = ((ItemBlock) stack.getItem()).getBlock().getStateForPlacement(meme); ctx.player().rotationYaw = originalYaw; ctx.player().rotationPitch = originalPitch; if (wouldBePlaced == null) { @@ -285,7 +285,7 @@ private OptionalInt hasAnyItemThatWouldPlace(IBlockState desired, RayTraceResult return OptionalInt.empty(); } - private static Vec3d[] aabbSideMultipliers(EnumFacing side) { + private static Vec3d[] aabbSideMultipliers(Direction side) { switch (side) { case UP: return new Vec3d[]{new Vec3d(0.5, 1, 0.5), new Vec3d(0.1, 1, 0.5), new Vec3d(0.9, 1, 0.5), new Vec3d(0.5, 1, 0.1), new Vec3d(0.5, 1, 0.9)}; @@ -332,7 +332,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } schematic = new ISchematic() { @Override - public IBlockState desiredState(int x, int y, int z) { + public BlockState desiredState(int x, int y, int z) { return realSchematic.desiredState(x, y, z); } @@ -397,7 +397,7 @@ public int lengthZ() { } return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - List desirableOnHotbar = new ArrayList<>(); + List desirableOnHotbar = new ArrayList<>(); Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); if (toPlace.isPresent() && isSafeToCancel && ctx.player().onGround && ticks <= 0) { Rotation rot = toPlace.get().rot; @@ -410,12 +410,12 @@ public int lengthZ() { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - List approxPlacable = placable(36); + List approxPlacable = placable(36); if (Baritone.settings().allowInventory.value) { ArrayList usefulSlots = new ArrayList<>(); - List noValidHotbarOption = new ArrayList<>(); + List noValidHotbarOption = new ArrayList<>(); outer: - for (IBlockState desired : desirableOnHotbar) { + for (BlockState desired : desirableOnHotbar) { for (int i = 0; i < 9; i++) { if (valid(approxPlacable.get(i), desired)) { usefulSlots.add(i); @@ -427,7 +427,7 @@ public int lengthZ() { outer: for (int i = 9; i < 36; i++) { - for (IBlockState desired : noValidHotbarOption) { + for (BlockState desired : noValidHotbarOption) { if (valid(approxPlacable.get(i), desired)) { baritone.getInventoryBehavior().attemptToPutOnHotbar(i, usefulSlots::contains); break outer; @@ -480,7 +480,7 @@ private void recalcNearby(BuilderCalculationContext bcc) { int x = center.x + dx; int y = center.y + dy; int z = center.z + dz; - IBlockState desired = bcc.getSchematic(x, y, z); + BlockState desired = bcc.getSchematic(x, y, z); if (desired != null) { // we care about this position BetterBlockPos pos = new BetterBlockPos(x, y, z); @@ -529,12 +529,12 @@ private void fullRecalc(BuilderCalculationContext bcc) { } } - private Goal assemble(BuilderCalculationContext bcc, List approxPlacable) { + private Goal assemble(BuilderCalculationContext bcc, List approxPlacable) { List placable = new ArrayList<>(); List breakable = new ArrayList<>(); List sourceLiquids = new ArrayList<>(); incorrectPositions.forEach(pos -> { - IBlockState state = bcc.bsi.get0(pos); + BlockState state = bcc.bsi.get0(pos); if (state.getBlock() instanceof BlockAir) { if (approxPlacable.contains(bcc.getSchematic(pos.x, pos.y, pos.z))) { placable.add(pos); @@ -619,7 +619,7 @@ private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { return new GoalPlace(pos); } boolean allowSameLevel = !(ctx.world().getBlockState(pos.up()).getBlock() instanceof BlockAir); - for (EnumFacing facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { + for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { if (MovementHelper.canPlaceAgainst(ctx, pos.offset(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ()))) { return new GoalAdjacent(pos, allowSameLevel); } @@ -696,8 +696,8 @@ public String displayName0() { return paused ? "Builder Paused" : "Building " + name; } - private List placable(int size) { - List result = new ArrayList<>(); + private List placable(int size) { + List result = new ArrayList<>(); for (int i = 0; i < size; i++) { ItemStack stack = ctx.player().inventory.mainInventory.get(i); if (stack.isEmpty() || !(stack.getItem() instanceof ItemBlock)) { @@ -705,13 +705,13 @@ private List placable(int size) { continue; } // - result.add(((ItemBlock) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.player(), stack, ctx.playerFeet(), EnumFacing.UP, (float) ctx.player().posX, (float) ctx.player().posY, (float) ctx.player().posZ)))); + result.add(((ItemBlock) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.player(), stack, ctx.playerFeet(), Direction.UP, (float) ctx.player().posX, (float) ctx.player().posY, (float) ctx.player().posZ)))); // } return result; } - private boolean valid(IBlockState current, IBlockState desired) { + private boolean valid(BlockState current, BlockState desired) { if (desired == null) { return true; } @@ -723,7 +723,7 @@ private boolean valid(IBlockState current, IBlockState desired) { } public class BuilderCalculationContext extends CalculationContext { - private final List placable; + private final List placable; private final ISchematic schematic; private final int originX; private final int originY; @@ -741,7 +741,7 @@ public BuilderCalculationContext() { this.backtrackCostFavoringCoefficient = 1; } - private IBlockState getSchematic(int x, int y, int z) { + private BlockState getSchematic(int x, int y, int z) { if (schematic.inSchematic(x - originX, y - originY, z - originZ)) { return schematic.desiredState(x - originX, y - originY, z - originZ); } else { @@ -754,7 +754,7 @@ public double costOfPlacingAt(int x, int y, int z) { if (isPossiblyProtected(x, y, z) || !worldBorder.canPlaceAt(x, z)) { // make calculation fail properly if we can't build return COST_INF; } - IBlockState sch = getSchematic(x, y, z); + BlockState sch = getSchematic(x, y, z); if (sch != null) { // TODO this can return true even when allowPlace is off.... is that an issue? if (sch.getBlock() instanceof BlockAir) { @@ -788,7 +788,7 @@ public double breakCostMultiplierAt(int x, int y, int z) { if (!allowBreak || isPossiblyProtected(x, y, z)) { return COST_INF; } - IBlockState sch = getSchematic(x, y, z); + BlockState sch = getSchematic(x, y, z); if (sch != null) { if (sch.getBlock() instanceof BlockAir) { // it should be air diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index a783cb495..3e9b47493 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -31,7 +31,7 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import net.minecraft.block.*; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; @@ -103,35 +103,35 @@ private enum Harvest { NETHERWART(Blocks.NETHER_WART, state -> state.get(BlockNetherWart.AGE) >= 3), SUGARCANE(Blocks.SUGAR_CANE, null) { @Override - public boolean readyToHarvest(World world, BlockPos pos, IBlockState state) { + public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { return world.getBlockState(pos.down()).getBlock() instanceof BlockReed; } }, CACTUS(Blocks.CACTUS, null) { @Override - public boolean readyToHarvest(World world, BlockPos pos, IBlockState state) { + public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { return world.getBlockState(pos.down()).getBlock() instanceof BlockCactus; } }; public final Block block; - public final Predicate readyToHarvest; + public final Predicate readyToHarvest; Harvest(BlockCrops blockCrops) { this(blockCrops, blockCrops::isMaxAge); // max age is 7 for wheat, carrots, and potatoes, but 3 for beetroot } - Harvest(Block block, Predicate readyToHarvest) { + Harvest(Block block, Predicate readyToHarvest) { this.block = block; this.readyToHarvest = readyToHarvest; } - public boolean readyToHarvest(World world, BlockPos pos, IBlockState state) { + public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { return readyToHarvest.test(state); } } - private boolean readyForHarvest(World world, BlockPos pos, IBlockState state) { + private boolean readyForHarvest(World world, BlockPos pos, BlockState state) { for (Harvest harvest : Harvest.values()) { if (harvest.block == state.getBlock()) { return harvest.readyToHarvest(world, pos, state); @@ -170,7 +170,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { List bonemealable = new ArrayList<>(); List openSoulsand = new ArrayList<>(); for (BlockPos pos : locations) { - IBlockState state = ctx.world().getBlockState(pos); + BlockState state = ctx.world().getBlockState(pos); boolean airAbove = ctx.world().getBlockState(pos.up()).getBlock() instanceof BlockAir; if (state.getBlock() == Blocks.FARMLAND) { if (airAbove) { diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 1590d1279..c3992e5e6 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -36,7 +36,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockAir; import net.minecraft.block.BlockFalling; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; @@ -116,7 +116,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { baritone.getInputOverrideHandler().clearAllKeys(); if (shaft.isPresent()) { BlockPos pos = shaft.get(); - IBlockState state = baritone.bsi.get0(pos); + BlockState state = baritone.bsi.get0(pos); if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { Optional rot = RotationUtils.reachable(ctx, pos); if (rot.isPresent() && isSafeToCancel) { diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index c55289f1d..6827f29eb 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -91,7 +91,7 @@ public void onTick(TickEvent event) { // If we're on the main menu then create the test world and launch the integrated server if (mc.currentScreen instanceof GuiMainMenu) { System.out.println("Beginning Baritone automatic test routine"); - mc.displayGuiScreen(null); + mc.displayScreen(null); WorldSettings worldsettings = new WorldSettings(TEST_SEED, GameType.getByName("survival"), true, false, WorldType.DEFAULT); mc.launchIntegratedServer("BaritoneAutoTest", "BaritoneAutoTest", worldsettings); } diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index 4b2dcfc65..449693976 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -19,7 +19,7 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; @@ -38,7 +38,7 @@ public BlockBreakHelper(IPlayerContext playerContext) { this.playerContext = playerContext; } - public void tryBreakBlock(BlockPos pos, EnumFacing side) { + public void tryBreakBlock(BlockPos pos, Direction side) { if (playerContext.playerController().onPlayerDamageBlock(pos, side)) { playerContext.player().swingArm(EnumHand.MAIN_HAND); } @@ -54,7 +54,7 @@ public void stopBreakingBlock() { public void tick(boolean isLeftClick) { RayTraceResult trace = playerContext.objectMouseOver(); - boolean isBlockTrace = trace != null && trace.type == RayTraceResult.Type.BLOCK; + boolean isBlockTrace = trace != null && trace.getType() == RayTraceResult.Type.BLOCK; if (isLeftClick && isBlockTrace) { tryBreakBlock(trace.getBlockPos(), trace.sideHit); diff --git a/src/main/java/baritone/utils/BlockPlaceHelper.java b/src/main/java/baritone/utils/BlockPlaceHelper.java index 1ffb0e1fc..a2f7e7572 100644 --- a/src/main/java/baritone/utils/BlockPlaceHelper.java +++ b/src/main/java/baritone/utils/BlockPlaceHelper.java @@ -38,7 +38,7 @@ public void tick(boolean rightClickRequested) { return; } RayTraceResult mouseOver = ctx.objectMouseOver(); - if (!rightClickRequested || ctx.player().isRowingBoat() || mouseOver == null || mouseOver.getBlockPos() == null || mouseOver.type != RayTraceResult.Type.BLOCK) { + if (!rightClickRequested || ctx.player().isRowingBoat() || mouseOver == null || mouseOver.getBlockPos() == null || mouseOver.getType() != RayTraceResult.Type.BLOCK) { return; } rightClickTimer = Baritone.settings().rightClickSpeed.value; diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index ebb16809d..1efca7e05 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -25,7 +25,7 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; @@ -48,7 +48,7 @@ public class BlockStateInterface { private final boolean useTheRealWorld; - private static final IBlockState AIR = Blocks.AIR.getDefaultState(); + private static final BlockState AIR = Blocks.AIR.getDefaultState(); public BlockStateInterface(IPlayerContext ctx) { this(ctx, false); @@ -80,17 +80,17 @@ public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be cal return get(ctx, pos).getBlock(); } - public static IBlockState get(IPlayerContext ctx, BlockPos pos) { + public static BlockState get(IPlayerContext ctx, BlockPos pos) { return new BlockStateInterface(ctx).get0(pos.getX(), pos.getY(), pos.getZ()); // immense iq // can't just do world().get because that doesn't work for out of bounds // and toBreak and stuff fails when the movement is instantiated out of load range but it's not able to BlockStateInterface.get what it's going to walk on } - public IBlockState get0(BlockPos pos) { + public BlockState get0(BlockPos pos) { return get0(pos.getX(), pos.getY(), pos.getZ()); } - public IBlockState get0(int x, int y, int z) { // Mickey resigned + public BlockState get0(int x, int y, int z) { // Mickey resigned // Invalid vertical position if (y < 0 || y >= 256) { @@ -129,7 +129,7 @@ public IBlockState get0(int x, int y, int z) { // Mickey resigned prevCached = region; cached = region; } - IBlockState type = cached.getBlock(x & 511, y, z & 511); + BlockState type = cached.getBlock(x & 511, y, z & 511); if (type == null) { return AIR; } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 567c9c502..7881e604e 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -22,7 +22,7 @@ import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalTwoBlocks; import baritone.api.utils.BetterBlockPos; -import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.Screen; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.Entity; import net.minecraft.util.math.*; @@ -36,7 +36,7 @@ import static org.lwjgl.opengl.GL11.*; -public class GuiClick extends GuiScreen { +public class GuiClick extends Screen { // My name is Brady and I grant leijurv permission to use this pasted code private final FloatBuffer MODELVIEW = BufferUtils.createFloatBuffer(16); @@ -64,7 +64,7 @@ public void render(int mouseX, int mouseY, float partialTicks) { if (near != null && far != null) { Vec3d viewerPos = new Vec3d(mc.getRenderManager().viewerPosX, mc.getRenderManager().viewerPosY, mc.getRenderManager().viewerPosZ); RayTraceResult result = mc.world.rayTraceBlocks(near.add(viewerPos), far.add(viewerPos), RayTraceFluidMode.NEVER, false, true); - if (result != null && result.type == RayTraceResult.Type.BLOCK) { + if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { currentMouseOver = result.getBlockPos(); } } diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index 4bd7982b3..5f393059f 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -115,4 +115,4 @@ private boolean inControl() { public BlockBreakHelper getBlockBreakHelper() { return blockBreakHelper; } -} \ No newline at end of file +} diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 1d313ed1e..86797548c 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -27,7 +27,7 @@ import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; @@ -219,7 +219,7 @@ public static void drawManySelectionBoxes(Entity player, Collection po //BlockPos blockpos = movingObjectPositionIn.getBlockPos(); BlockStateInterface bsi = new BlockStateInterface(BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext()); // TODO this assumes same dimension between primary baritone and render view? is this safe? positions.forEach(pos -> { - IBlockState state = bsi.get0(pos); + BlockState state = bsi.get0(pos); VoxelShape shape = state.getShape(player.world, pos); AxisAlignedBB toDraw = shape.isEmpty() ? VoxelShapes.fullCube().getBoundingBox() : shape.getBoundingBox(); toDraw = toDraw.offset(pos); diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 6fd032550..9e7cde488 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -19,8 +19,8 @@ import baritone.Baritone; import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.block.state.BlockState; +import net.minecraft.client.entity.ClientPlayerEntity; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.init.Enchantments; import net.minecraft.init.MobEffects; @@ -48,9 +48,9 @@ public class ToolSet { */ private final Function backendCalculation; - private final EntityPlayerSP player; + private final ClientPlayerEntity player; - public ToolSet(EntityPlayerSP player) { + public ToolSet(ClientPlayerEntity player) { breakStrengthCache = new HashMap<>(); this.player = player; @@ -69,7 +69,7 @@ public ToolSet(EntityPlayerSP player) { * @param state the blockstate to be mined * @return the speed of how fast we'll mine it. 1/(time in ticks) */ - public double getStrVsBlock(IBlockState state) { + public double getStrVsBlock(BlockState state) { return breakStrengthCache.computeIfAbsent(state.getBlock(), backendCalculation); } @@ -93,7 +93,7 @@ public byte getBestSlot(Block b) { byte best = 0; double value = Double.NEGATIVE_INFINITY; int materialCost = Integer.MIN_VALUE; - IBlockState blockState = b.getDefaultState(); + BlockState blockState = b.getDefaultState(); for (byte i = 0; i < 9; i++) { ItemStack itemStack = player.inventory.getStackInSlot(i); double v = calculateSpeedVsBlock(itemStack, blockState); @@ -136,7 +136,7 @@ private double avoidanceMultiplier(Block b) { * @param state the blockstate to be mined * @return how long it would take in ticks */ - public static double calculateSpeedVsBlock(ItemStack item, IBlockState state) { + public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { float hardness = state.getBlockHardness(null, null); if (hardness < 0) { return -1; diff --git a/src/main/java/baritone/utils/pathing/SegmentedCalculator.java b/src/main/java/baritone/utils/pathing/SegmentedCalculator.java index c1753a8b2..22dab0b17 100644 --- a/src/main/java/baritone/utils/pathing/SegmentedCalculator.java +++ b/src/main/java/baritone/utils/pathing/SegmentedCalculator.java @@ -27,7 +27,7 @@ import baritone.pathing.calc.AbstractNodeCostSearch; import baritone.pathing.movement.CalculationContext; import baritone.pathing.path.SplicedPath; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import java.util.Optional; import java.util.function.Consumer; @@ -80,7 +80,7 @@ private void loadAdjacent(int blockX, int blockZ) { // it checks if every chunk is loaded before getting blocks from it // so you see path segments ending at multiples of 512 (plus or minus one) on either x or z axis // this loads every adjacent chunk to the segment end, so it can continue into the next cached region - BetterBlockPos toLoad = bp.offset(EnumFacing.byHorizontalIndex(i), 16); + BetterBlockPos toLoad = bp.offset(Direction.byHorizontalIndex(i), 16); cached.tryLoadFromDisk(toLoad.x >> 9, toLoad.z >> 9); } } diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index 3cb498acd..07a66c5c2 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -23,7 +23,7 @@ import baritone.api.utils.IPlayerContext; import baritone.api.utils.IPlayerController; import baritone.api.utils.RayTraceUtils; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.entity.ClientPlayerEntity; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; @@ -38,7 +38,7 @@ public enum PrimaryPlayerContext implements IPlayerContext, Helper { INSTANCE; @Override - public EntityPlayerSP player() { + public ClientPlayerEntity player() { return mc.player; } diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index 120f996cc..f44d0c745 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -19,13 +19,13 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerController; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.client.entity.ClientPlayerEntity; +import net.minecraft.client.multiplayer.ClientWorld; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.ClickType; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -43,7 +43,7 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { INSTANCE; @Override - public boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side) { + public boolean onPlayerDamageBlock(BlockPos pos, Direction side) { return mc.playerController.onPlayerDamageBlock(pos, side); } @@ -53,7 +53,7 @@ public void resetBlockRemoving() { } @Override - public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, EntityPlayer player) { + public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, PlayerEntity player) { return mc.playerController.windowClick(windowId, slotId, mouseButton, type, player); } @@ -68,13 +68,13 @@ public GameType getGameType() { } @Override - public EnumActionResult processRightClickBlock(EntityPlayerSP player, World world, BlockPos pos, EnumFacing direction, Vec3d vec, EnumHand hand) { - // primaryplayercontroller is always in a WorldClient so this is ok - return mc.playerController.processRightClickBlock(player, (WorldClient) world, pos, direction, vec, hand); + public EnumActionResult processRightClickBlock(ClientPlayerEntity player, World world, BlockPos pos, Direction direction, Vec3d vec, EnumHand hand) { + // primaryplayercontroller is always in a ClientWorld so this is ok + return mc.playerController.processRightClickBlock(player, (ClientWorld) world, pos, direction, vec, hand); } @Override - public EnumActionResult processRightClick(EntityPlayerSP player, World world, EnumHand hand) { + public EnumActionResult processRightClick(ClientPlayerEntity player, World world, EnumHand hand) { return mc.playerController.processRightClick(player, world, hand); } } diff --git a/src/main/java/baritone/utils/schematic/AirSchematic.java b/src/main/java/baritone/utils/schematic/AirSchematic.java index fd253105e..5d58da564 100644 --- a/src/main/java/baritone/utils/schematic/AirSchematic.java +++ b/src/main/java/baritone/utils/schematic/AirSchematic.java @@ -18,7 +18,7 @@ package baritone.utils.schematic; import baritone.api.utils.ISchematic; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.init.Blocks; public class AirSchematic implements ISchematic { @@ -34,7 +34,7 @@ public AirSchematic(int widthX, int heightY, int lengthZ) { } @Override - public IBlockState desiredState(int x, int y, int z) { + public BlockState desiredState(int x, int y, int z) { return Blocks.AIR.getDefaultState(); } diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index 296401ee9..c9260b2b4 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -18,7 +18,7 @@ package baritone.utils.schematic; import net.minecraft.block.BlockAir; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.nbt.NBTTagCompound; import java.util.OptionalInt; @@ -34,7 +34,7 @@ public MapArtSchematic(NBTTagCompound schematic) { for (int x = 0; x < widthX; x++) { for (int z = 0; z < lengthZ; z++) { - IBlockState[] column = states[x][z]; + BlockState[] column = states[x][z]; OptionalInt lowestBlockY = lastIndexMatching(column, block -> !(block instanceof BlockAir)); if (lowestBlockY.isPresent()) { diff --git a/src/main/java/baritone/utils/schematic/Schematic.java b/src/main/java/baritone/utils/schematic/Schematic.java index 9e4b67cd5..16ce286a6 100644 --- a/src/main/java/baritone/utils/schematic/Schematic.java +++ b/src/main/java/baritone/utils/schematic/Schematic.java @@ -18,14 +18,14 @@ package baritone.utils.schematic; import baritone.api.utils.ISchematic; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.BlockState; import net.minecraft.nbt.NBTTagCompound; public class Schematic implements ISchematic { public final int widthX; public final int heightY; public final int lengthZ; - protected final IBlockState[][][] states; + protected final BlockState[][][] states; public Schematic(NBTTagCompound schematic) { /*String type = schematic.getString("Materials"); @@ -47,7 +47,7 @@ public Schematic(NBTTagCompound schematic) { additional[i * 2 + 1] = (byte) ((addBlocks[i] >> 0) & 0xF); // upper nibble } } - states = new IBlockState[widthX][lengthZ][heightY]; + states = new BlockState[widthX][lengthZ][heightY]; for (int y = 0; y < heightY; y++) { for (int z = 0; z < lengthZ; z++) { for (int x = 0; x < widthX; x++) { @@ -68,7 +68,7 @@ public Schematic(NBTTagCompound schematic) { } @Override - public IBlockState desiredState(int x, int y, int z) { + public BlockState desiredState(int x, int y, int z) { return states[x][z][y]; } diff --git a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java index 1cd4cf913..072c30062 100644 --- a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java +++ b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java @@ -18,7 +18,7 @@ package baritone.utils.pathing; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import org.junit.Test; @@ -57,7 +57,7 @@ public void testSimple() { assertEquals(pos.south(), better.south()); assertEquals(pos.east(), better.east()); assertEquals(pos.west(), better.west()); - for (EnumFacing dir : EnumFacing.values()) { + for (Direction dir : Direction.values()) { assertEquals(pos.offset(dir), better.offset(dir)); assertEquals(pos.offset(dir, 0), pos); assertEquals(better.offset(dir, 0), better); From 8758c77ac03226c25b602293440f9f449a87ccb7 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 10 Jun 2019 18:25:20 -0700 Subject: [PATCH 052/935] most of the way there --- .../api/event/events/RotationMoveEvent.java | 2 +- .../baritone/api/utils/IPlayerController.java | 3 +- .../mixins/MixinChunkRenderContainer.java | 55 ----- .../launch/mixins/MixinChunkRenderWorker.java | 57 ----- ...ent.java => MixinClientChunkProvider.java} | 6 +- ...nt.java => MixinClientPlayNetHandler.java} | 35 ++-- ...erSP.java => MixinClientPlayerEntity.java} | 12 +- .../baritone/launch/mixins/MixinEntity.java | 60 ++++++ .../launch/mixins/MixinGameRenderer.java | 2 +- ...LivingBase.java => MixinLivingEntity.java} | 36 +--- .../launch/mixins/MixinMinecraft.java | 32 +-- .../launch/mixins/MixinNetworkManager.java | 32 +-- ...kLoader.java => MixinRegionFileCache.java} | 10 +- .../launch/mixins/MixinRenderChunk.java | 57 ----- .../launch/mixins/MixinRenderChunkCache.java | 47 ----- .../launch/mixins/MixinRenderList.java | 47 ----- ...ver.java => MixinServerChunkProvider.java} | 12 +- .../launch/mixins/MixinVboRenderList.java | 47 ----- src/launch/resources/mixins.baritone.json | 18 +- src/main/java/baritone/Baritone.java | 2 +- .../baritone/behavior/InventoryBehavior.java | 20 +- .../baritone/behavior/MemoryBehavior.java | 197 +----------------- src/main/java/baritone/cache/CachedChunk.java | 4 +- .../java/baritone/cache/CachedRegion.java | 2 +- src/main/java/baritone/cache/ChunkPacker.java | 23 +- .../java/baritone/cache/WorldProvider.java | 4 +- .../java/baritone/cache/WorldScanner.java | 18 +- .../java/baritone/event/GameEventHandler.java | 2 +- .../pathing/movement/CalculationContext.java | 10 +- .../baritone/pathing/movement/Movement.java | 6 +- .../pathing/movement/MovementHelper.java | 94 +++++---- .../movement/movements/MovementAscend.java | 16 +- .../movement/movements/MovementDescend.java | 10 +- .../movement/movements/MovementDiagonal.java | 4 +- .../movement/movements/MovementDownward.java | 4 +- .../movement/movements/MovementFall.java | 24 +-- .../movement/movements/MovementParkour.java | 10 +- .../movement/movements/MovementPillar.java | 41 ++-- .../movement/movements/MovementTraverse.java | 18 +- .../baritone/pathing/path/PathExecutor.java | 4 +- .../baritone/process/BackfillProcess.java | 6 +- .../java/baritone/process/BuilderProcess.java | 63 +++--- .../java/baritone/process/FarmProcess.java | 28 ++- .../java/baritone/process/FollowProcess.java | 2 +- .../baritone/process/GetToBlockProcess.java | 11 +- .../java/baritone/process/MineProcess.java | 24 +-- .../java/baritone/utils/BaritoneAutoTest.java | 19 +- .../java/baritone/utils/BlockBreakHelper.java | 7 +- .../java/baritone/utils/BlockPlaceHelper.java | 13 +- .../baritone/utils/BlockStateInterface.java | 28 ++- src/main/java/baritone/utils/GuiClick.java | 31 ++- .../java/baritone/utils/PathRenderer.java | 50 +++-- src/main/java/baritone/utils/ToolSet.java | 20 +- .../utils/accessor/IChunkProviderServer.java | 4 +- .../baritone/utils/pathing/Avoidance.java | 4 +- .../utils/player/PrimaryPlayerContext.java | 2 +- .../utils/player/PrimaryPlayerController.java | 31 +-- .../utils/schematic/AirSchematic.java | 4 +- .../utils/schematic/MapArtSchematic.java | 10 +- .../baritone/utils/schematic/Schematic.java | 6 +- 60 files changed, 505 insertions(+), 941 deletions(-) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java rename src/launch/java/baritone/launch/mixins/{MixinChunkProviderClient.java => MixinClientChunkProvider.java} (88%) rename src/launch/java/baritone/launch/mixins/{MixinNetHandlerPlayClient.java => MixinClientPlayNetHandler.java} (78%) rename src/launch/java/baritone/launch/mixins/{MixinEntityPlayerSP.java => MixinClientPlayerEntity.java} (92%) create mode 100644 src/launch/java/baritone/launch/mixins/MixinEntity.java rename src/launch/java/baritone/launch/mixins/{MixinEntityLivingBase.java => MixinLivingEntity.java} (62%) rename src/launch/java/baritone/launch/mixins/{MixinAnvilChunkLoader.java => MixinRegionFileCache.java} (82%) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinRenderChunk.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinRenderList.java rename src/launch/java/baritone/launch/mixins/{MixinChunkProviderServer.java => MixinServerChunkProvider.java} (78%) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinVboRenderList.java diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index f9b7ba434..3d78b4b73 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -75,7 +75,7 @@ public enum Type { /** * Called when the player jumps. * - * @see EntityLivingBase#jump + * @see LivingEntity#jump */ JUMP } diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index 905825644..82a195dbd 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -25,6 +25,7 @@ import net.minecraft.util.Direction; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.GameType; import net.minecraft.world.World; @@ -49,7 +50,7 @@ default double getBlockReachDistance() { return this.getGameType().isCreative() ? 5.0F : 4.5F; } - ActionResultType processRightClickBlock(ClientPlayerEntity player, World world, BlockPos pos, Direction direction, Vec3d vec, Hand hand); + ActionResultType processRightClickBlock(ClientPlayerEntity player, World world, Hand hand, BlockRayTraceResult result); ActionResultType processRightClick(ClientPlayerEntity player, World world, Hand hand); } diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java b/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java deleted file mode 100644 index dc35f7570..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ChunkRenderContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.chunk.RenderChunk; -import net.minecraft.util.math.BlockPos; -import org.lwjgl.opengl.GL14; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import static org.lwjgl.opengl.GL11.GL_ONE; -import static org.lwjgl.opengl.GL11.GL_ZERO; -import static org.lwjgl.opengl.GL14.GL_CONSTANT_ALPHA; -import static org.lwjgl.opengl.GL14.GL_ONE_MINUS_CONSTANT_ALPHA; - -@Mixin(ChunkRenderContainer.class) -public class MixinChunkRenderContainer { - - @Redirect( // avoid creating CallbackInfo at all costs; this is called 40k times per second - method = "preRenderChunk", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/renderer/chunk/RenderChunk.getPosition()Lnet/minecraft/util/math/BlockPos;" - ) - ) - private BlockPos getPosition(RenderChunk renderChunkIn) { - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getInstance().isSingleplayer() && Minecraft.getInstance().world.getChunk(renderChunkIn.getPosition()).isEmpty()) { - GlStateManager.enableAlphaTest(); - GlStateManager.enableBlend(); - GL14.glBlendColor(0, 0, 0, Baritone.settings().cachedChunksOpacity.value); - GlStateManager.blendFuncSeparate(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE, GL_ZERO); - } - return renderChunkIn.getPosition(); - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java b/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java deleted file mode 100644 index 6e02d0f9c..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.Minecraft; -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.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(ChunkRenderWorker.class) -public abstract class MixinChunkRenderWorker { - - @Shadow - protected abstract boolean isChunkExisting(BlockPos pos, World worldIn); - - @Redirect( - method = "processTask", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/renderer/chunk/ChunkRenderWorker.isChunkExisting(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/World;)Z" - ) - ) - private boolean isChunkExisting(ChunkRenderWorker worker, BlockPos pos, World world) { - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getInstance().isSingleplayer()) { - Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); - IPlayerContext ctx = baritone.getPlayerContext(); - if (ctx.player() != null && ctx.world() != null && baritone.bsi != null) { - return baritone.bsi.isLoaded(pos.getX(), pos.getZ()) || this.isChunkExisting(pos, world); - } - } - - return this.isChunkExisting(pos, world); - } -} - diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkProviderClient.java b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java similarity index 88% rename from src/launch/java/baritone/launch/mixins/MixinChunkProviderClient.java rename to src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java index b4cada6ef..cdfd1cf56 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkProviderClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java @@ -19,14 +19,14 @@ import baritone.utils.accessor.IChunkProviderClient; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import net.minecraft.client.multiplayer.ChunkProviderClient; +import net.minecraft.client.multiplayer.ClientChunkProvider; import net.minecraft.world.chunk.Chunk; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -@Mixin(ChunkProviderClient.class) -public class MixinChunkProviderClient implements IChunkProviderClient { +@Mixin(ClientChunkProvider.class) +public class MixinClientChunkProvider implements IChunkProviderClient { @Shadow @Final diff --git a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java similarity index 78% rename from src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java rename to src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index a2d041c82..0562f24ae 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -21,10 +21,10 @@ import baritone.api.IBaritone; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.type.EventState; -import net.minecraft.client.network.NetHandlerPlayClient; -import net.minecraft.network.play.server.SPacketChunkData; -import net.minecraft.network.play.server.SPacketCombatEvent; -import net.minecraft.network.play.server.SPacketUnloadChunk; +import net.minecraft.client.network.play.ClientPlayNetHandler; +import net.minecraft.network.play.server.SChunkDataPacket; +import net.minecraft.network.play.server.SCombatPacket; +import net.minecraft.network.play.server.SUnloadChunkPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -34,10 +34,11 @@ * @author Brady * @since 8/3/2018 */ -@Mixin(NetHandlerPlayClient.class) -public class MixinNetHandlerPlayClient { +@Mixin(ClientPlayNetHandler.class) +public class MixinClientPlayNetHandler { - @Inject( + // unused lol + /*@Inject( method = "handleChunkData", at = @At( value = "INVOKE", @@ -57,15 +58,15 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { ); } } - } + }*/ @Inject( method = "handleChunkData", at = @At("RETURN") ) - private void postHandleChunkData(SPacketChunkData packetIn, CallbackInfo ci) { + private void postHandleChunkData(SChunkDataPacket packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + if (ibaritone.getPlayerContext().player().field_71174_a == (ClientPlayNetHandler) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent( EventState.POST, @@ -82,9 +83,9 @@ private void postHandleChunkData(SPacketChunkData packetIn, CallbackInfo ci) { method = "processChunkUnload", at = @At("HEAD") ) - private void preChunkUnload(SPacketUnloadChunk packet, CallbackInfo ci) { + private void preChunkUnload(SUnloadChunkPacket packet, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + if (ibaritone.getPlayerContext().player().field_71174_a == (ClientPlayNetHandler) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent(EventState.PRE, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) ); @@ -96,9 +97,9 @@ private void preChunkUnload(SPacketUnloadChunk packet, CallbackInfo ci) { method = "processChunkUnload", at = @At("RETURN") ) - private void postChunkUnload(SPacketUnloadChunk packet, CallbackInfo ci) { + private void postChunkUnload(SUnloadChunkPacket packet, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + if (ibaritone.getPlayerContext().player().field_71174_a == (ClientPlayNetHandler) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent(EventState.POST, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) ); @@ -110,12 +111,12 @@ private void postChunkUnload(SPacketUnloadChunk packet, CallbackInfo ci) { method = "handleCombatEvent", at = @At( value = "INVOKE", - target = "net/minecraft/client/Minecraft.displayScreen(Lnet/minecraft/client/gui/Screen;)V" + target = "net/minecraft/client/Minecraft.displayGuiScreen(Lnet/minecraft/client/gui/screen/Screen;)V" ) ) - private void onPlayerDeath(SPacketCombatEvent packetIn, CallbackInfo ci) { + private void onPlayerDeath(SCombatPacket packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + if (ibaritone.getPlayerContext().player().field_71174_a == (ClientPlayNetHandler) (Object) this) { ibaritone.getGameEventHandler().onPlayerDeath(); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java similarity index 92% rename from src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java rename to src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index 392323f02..c10a4831d 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -24,9 +24,9 @@ import baritone.api.event.events.SprintStateEvent; import baritone.api.event.events.type.EventState; import baritone.behavior.LookBehavior; -import net.minecraft.client.entity.ClientPlayerEntity; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.settings.KeyBinding; -import net.minecraft.entity.player.PlayerCapabilities; +import net.minecraft.entity.player.PlayerAbilities; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -61,7 +61,7 @@ private void sendChatMessage(String msg, CallbackInfo ci) { method = "tick", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/ClientPlayerEntity.isPassenger()Z", + target = "net/minecraft/client/entity/player/ClientPlayerEntity.isPassenger()Z", shift = At.Shift.BY, by = -3 ) @@ -77,7 +77,7 @@ private void onPreUpdate(CallbackInfo ci) { method = "tick", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/ClientPlayerEntity.onUpdateWalkingPlayer()V", + target = "net/minecraft/client/entity/player/ClientPlayerEntity.onUpdateWalkingPlayer()V", shift = At.Shift.BY, by = 2 ) @@ -93,10 +93,10 @@ private void onPostUpdate(CallbackInfo ci) { method = "livingTick", at = @At( value = "FIELD", - target = "net/minecraft/entity/player/PlayerCapabilities.allowFlying:Z" + target = "net/minecraft/entity/player/PlayerAbilities.allowFlying:Z" ) ) - private boolean isAllowFlying(PlayerCapabilities capabilities) { + private boolean isAllowFlying(PlayerAbilities capabilities) { IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); if (baritone == null) { return capabilities.allowFlying; diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java new file mode 100644 index 000000000..9cd2a3c96 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -0,0 +1,60 @@ +/* + * 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.api.BaritoneAPI; +import baritone.api.event.events.RotationMoveEvent; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Entity.class) +public class MixinEntity { + + @Shadow + private float rotationYaw; + + float yawRestore; + + @Inject( + method = "moveRelative", + at = @At("HEAD") + ) + private void moveRelativeHead(CallbackInfo info) { + this.yawRestore = this.rotationYaw; + // noinspection ConstantConditions + if (!ClientPlayerEntity.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this) == null) { + return; + } + RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw); + BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); + this.rotationYaw = motionUpdateRotationEvent.getYaw(); + } + + @Inject( + method = "moveRelative", + at = @At("RETURN") + ) + private void moveRelativeReturn(CallbackInfo info) { + this.rotationYaw = this.yawRestore; + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java index 57de55c7d..fb279ba0f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java @@ -33,7 +33,7 @@ public class MixinGameRenderer { method = "updateCameraAndRender(FJ)V", at = @At( value = "INVOKE_STRING", - target = "Lnet/minecraft/profiler/Profiler;endStartSection(Ljava/lang/String;)V", + target = "Lnet/minecraft/profiler/IProfiler;endStartSection(Ljava/lang/String;)V", args = {"ldc=hand"} ) ) diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java similarity index 62% rename from src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java rename to src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index 5cddbc7d7..45c5d4643 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -20,10 +20,11 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.RotationMoveEvent; -import net.minecraft.client.entity.ClientPlayerEntity; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -37,15 +38,15 @@ * @author Brady * @since 9/10/2018 */ -@Mixin(EntityLivingBase.class) -public abstract class MixinEntityLivingBase extends Entity { +@Mixin(LivingEntity.class) +public abstract class MixinLivingEntity extends Entity { /** * Event called to override the movement direction when jumping */ private RotationMoveEvent jumpRotationEvent; - public MixinEntityLivingBase(EntityType entityTypeIn, World worldIn) { + public MixinLivingEntity(EntityType entityTypeIn, World worldIn) { super(entityTypeIn, worldIn); } @@ -69,34 +70,15 @@ private void preMoveRelative(CallbackInfo ci) { at = @At( value = "FIELD", opcode = GETFIELD, - target = "net/minecraft/entity/EntityLivingBase.rotationYaw:F" + target = "net/minecraft/entity/LivingEntity.rotationYaw:F" ) ) - private float overrideYaw(EntityLivingBase self) { + private float overrideYaw(LivingEntity self) { if (self instanceof ClientPlayerEntity && BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this) != null) { return this.jumpRotationEvent.getYaw(); } return self.rotationYaw; } - @Redirect( - method = "travel", - at = @At( - value = "INVOKE", - target = "net/minecraft/entity/EntityLivingBase.moveRelative(FFFF)V" - ) - ) - private void travel(EntityLivingBase self, float strafe, float up, float forward, float friction) { - // noinspection ConstantConditions - if (!ClientPlayerEntity.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this) == null) { - moveRelative(strafe, up, forward, friction); - return; - } - RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw); - BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); - float originalYaw = this.rotationYaw; - this.rotationYaw = motionUpdateRotationEvent.getYaw(); - this.moveRelative(strafe, up, forward, friction); - this.rotationYaw = originalYaw; - } + } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 3490e359e..03951e68c 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -26,12 +26,12 @@ import baritone.api.event.events.type.EventState; import baritone.utils.BaritoneAutoTest; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.ClientPlayerEntity; -import net.minecraft.client.gui.Screen; -import net.minecraft.client.multiplayer.ClientWorld; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.world.ClientWorld; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import org.spongepowered.asm.lib.Opcodes; import org.spongepowered.asm.mixin.Mixin; @@ -78,7 +78,7 @@ private void preInit(CallbackInfo ci) { at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/Minecraft.currentScreen:Lnet/minecraft/client/gui/Screen;", + target = "net/minecraft/client/Minecraft.field_71462_r:Lnet/minecraft/client/gui/screen/Screen;", ordinal = 5, shift = At.Shift.BY, by = -3 @@ -97,10 +97,10 @@ private void runTick(CallbackInfo ci) { } @Inject( - method = "loadWorld(Lnet/minecraft/client/multiplayer/ClientWorld;Lnet/minecraft/client/gui/Screen;)V", + method = "loadWorld(Lnet/minecraft/client/world/ClientWorld;)V", at = @At("HEAD") ) - private void preLoadWorld(ClientWorld world, Screen loadingScreen, CallbackInfo ci) { + private void preLoadWorld(ClientWorld world, CallbackInfo ci) { // If we're unloading the world but one doesn't exist, ignore it if (this.world == null && world == null) { return; @@ -117,10 +117,10 @@ private void preLoadWorld(ClientWorld world, Screen loadingScreen, CallbackInfo } @Inject( - method = "loadWorld(Lnet/minecraft/client/multiplayer/ClientWorld;Lnet/minecraft/client/gui/Screen;)V", + method = "loadWorld(Lnet/minecraft/client/world/ClientWorld;)V", at = @At("RETURN") ) - private void postLoadWorld(ClientWorld world, Screen loadingScreen, CallbackInfo ci) { + private void postLoadWorld(ClientWorld world, CallbackInfo ci) { // still fire event for both null, as that means we've just finished exiting a world // mc.world changing is only the primary baritone @@ -137,19 +137,19 @@ private void postLoadWorld(ClientWorld world, Screen loadingScreen, CallbackInfo at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/gui/Screen.allowUserInput:Z" + target = "net/minecraft/client/gui/screen/Screen.passEvents:Z" ) ) - private boolean isAllowUserInput(Screen screen) { + private boolean passEvents(Screen screen) { // allow user input is only the primary baritone - return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().getCurrent() != null && player != null) || screen.allowUserInput; + return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().getCurrent() != null && player != null) || screen.passEvents; } @Inject( method = "clickMouse", at = @At( value = "INVOKE", - target = "net/minecraft/client/multiplayer/PlayerControllerMP.clickBlock(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/Direction;)Z" + target = "net/minecraft/client/multiplayer/PlayerController.clickBlock(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/Direction;)Z" ), locals = LocalCapture.CAPTURE_FAILHARD ) @@ -162,11 +162,11 @@ private void onBlockBreak(CallbackInfo ci, BlockPos pos) { method = "rightClickMouse", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/ClientPlayerEntity.swingArm(Lnet/minecraft/util/EnumHand;)V" + target = "net/minecraft/client/entity/player/ClientPlayerEntity.swingArm(Lnet/minecraft/util/Hand;)V" ), locals = LocalCapture.CAPTURE_FAILHARD ) - private void onBlockUse(CallbackInfo ci, EnumHand var1[], int var2, int var3, EnumHand enumhand, ItemStack itemstack, BlockPos blockpos, int i, EnumActionResult enumactionresult) { + private void onBlockUse(CallbackInfo ci, Hand var1[], int var2, int var3, Hand enumhand, ItemStack itemstack, BlockPos blockpos, int i, ActionResultType enumactionresult) { // rightClickMouse is only for the main player BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(blockpos, BlockInteractEvent.Type.USE)); } diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 895d2df7e..f781e4c4f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -25,9 +25,9 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; -import net.minecraft.network.EnumPacketDirection; +import net.minecraft.network.IPacket; import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; +import net.minecraft.network.PacketDirection; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -47,19 +47,19 @@ public class MixinNetworkManager { @Shadow @Final - private EnumPacketDirection direction; + private PacketDirection field_179294_g; @Inject( method = "dispatchPacket", at = @At("HEAD") ) - private void preDispatchPacket(Packet inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { - if (this.direction != EnumPacketDirection.CLIENTBOUND) { + private void preDispatchPacket(IPacket inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { + if (this.field_179294_g != PacketDirection.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().field_71174_a.getNetworkManager() == (NetworkManager) (Object) this) { ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, inPacket)); } } @@ -69,13 +69,13 @@ private void preDispatchPacket(Packet inPacket, final GenericFutureListener inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { - if (this.direction != EnumPacketDirection.CLIENTBOUND) { + private void postDispatchPacket(IPacket inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { + if (this.field_179294_g != PacketDirection.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().field_71174_a.getNetworkManager() == (NetworkManager) (Object) this) { ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, inPacket)); } } @@ -85,15 +85,15 @@ private void postDispatchPacket(Packet inPacket, final GenericFutureListener< method = "channelRead0", at = @At( value = "INVOKE", - target = "net/minecraft/network/NetworkManager.processPacket(Lnet/minecraft/network/Packet;Lnet/minecraft/network/INetHandler;)V" + target = "net/minecraft/network/NetworkManager.processPacket(Lnet/minecraft/network/IPacket;Lnet/minecraft/network/INetHandler;)V" ) ) - private void preProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { - if (this.direction != EnumPacketDirection.CLIENTBOUND) { + private void preProcessPacket(ChannelHandlerContext context, IPacket packet, CallbackInfo ci) { + if (this.field_179294_g != PacketDirection.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().field_71174_a.getNetworkManager() == (NetworkManager) (Object) this) { ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, packet)); } } @@ -103,12 +103,12 @@ private void preProcessPacket(ChannelHandlerContext context, Packet packet, C method = "channelRead0", at = @At("RETURN") ) - private void postProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { - if (!this.channel.isOpen() || this.direction != EnumPacketDirection.CLIENTBOUND) { + private void postProcessPacket(ChannelHandlerContext context, IPacket packet, CallbackInfo ci) { + if (!this.channel.isOpen() || this.field_179294_g != PacketDirection.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().field_71174_a.getNetworkManager() == (NetworkManager) (Object) this) { ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, packet)); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinAnvilChunkLoader.java b/src/launch/java/baritone/launch/mixins/MixinRegionFileCache.java similarity index 82% rename from src/launch/java/baritone/launch/mixins/MixinAnvilChunkLoader.java rename to src/launch/java/baritone/launch/mixins/MixinRegionFileCache.java index 8b3ea0afb..b9d8b2144 100644 --- a/src/launch/java/baritone/launch/mixins/MixinAnvilChunkLoader.java +++ b/src/launch/java/baritone/launch/mixins/MixinRegionFileCache.java @@ -18,7 +18,7 @@ package baritone.launch.mixins; import baritone.utils.accessor.IAnvilChunkLoader; -import net.minecraft.world.chunk.storage.AnvilChunkLoader; +import net.minecraft.world.chunk.storage.RegionFileCache; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -29,15 +29,15 @@ * @author Brady * @since 9/4/2018 */ -@Mixin(AnvilChunkLoader.class) -public class MixinAnvilChunkLoader implements IAnvilChunkLoader { +@Mixin(RegionFileCache.class) +public class MixinRegionFileCache implements IAnvilChunkLoader { @Shadow @Final - private File chunkSaveLocation; + private File folder; @Override public File getChunkSaveLocation() { - return this.chunkSaveLocation; + return this.folder; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java b/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java deleted file mode 100644 index 48a3fbce0..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.block.state.BlockState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.chunk.RenderChunk; -import net.minecraft.client.renderer.chunk.RenderChunkCache; -import net.minecraft.util.math.BlockPos; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -/** - * @author Brady - * @since 1/29/2019 - */ -@Mixin(RenderChunk.class) -public class MixinRenderChunk { - - @Redirect( - method = "rebuildChunk", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/renderer/chunk/RenderChunkCache.getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/BlockState;" - ) - ) - private BlockState getBlockState(RenderChunkCache chunkCache, BlockPos pos) { - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getInstance().isSingleplayer()) { - Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); - IPlayerContext ctx = baritone.getPlayerContext(); - if (ctx.player() != null && ctx.world() != null && baritone.bsi != null) { - return baritone.bsi.get0(pos); - } - } - - return chunkCache.getBlockState(pos); - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java b/src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java deleted file mode 100644 index 817743973..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinRenderChunkCache.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.chunk.RenderChunkCache; -import net.minecraft.world.chunk.Chunk; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(RenderChunkCache.class) -public class MixinRenderChunkCache { - - @Redirect( - method = "generateCache", - at = @At( - value = "INVOKE", - target = "net/minecraft/world/chunk/Chunk.isEmptyBetween(II)Z" - ) - ) - private static boolean isEmpty(Chunk chunk, int yStart, int yEnd) { - if (!chunk.isEmptyBetween(yStart, yEnd)) { - return false; - } - if (chunk.isEmpty() && Baritone.settings().renderCachedChunks.value && Minecraft.getInstance().getIntegratedServer() == null) { - return false; - } - return true; - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderList.java b/src/launch/java/baritone/launch/mixins/MixinRenderList.java deleted file mode 100644 index ec3053f11..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinRenderList.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderList; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import static org.lwjgl.opengl.GL11.*; - -@Mixin(RenderList.class) -public class MixinRenderList { - - @Redirect( // avoid creating CallbackInfo at all costs; this is called 40k times per second - method = "renderChunkLayer", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/renderer/GlStateManager.popMatrix()V" - ) - ) - private void popMatrix() { - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getInstance().isSingleplayer()) { - // reset the blend func to normal (not dependent on constant alpha) - GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - } - GlStateManager.popMatrix(); - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkProviderServer.java b/src/launch/java/baritone/launch/mixins/MixinServerChunkProvider.java similarity index 78% rename from src/launch/java/baritone/launch/mixins/MixinChunkProviderServer.java rename to src/launch/java/baritone/launch/mixins/MixinServerChunkProvider.java index 6d5a5421b..2ac467979 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkProviderServer.java +++ b/src/launch/java/baritone/launch/mixins/MixinServerChunkProvider.java @@ -18,8 +18,8 @@ package baritone.launch.mixins; import baritone.utils.accessor.IChunkProviderServer; -import net.minecraft.world.chunk.storage.IChunkLoader; -import net.minecraft.world.gen.ChunkProviderServer; +import net.minecraft.world.chunk.ServerChunkProvider; +import net.minecraft.world.chunk.storage.ChunkLoader; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -28,15 +28,15 @@ * @author Brady * @since 9/4/2018 */ -@Mixin(ChunkProviderServer.class) -public class MixinChunkProviderServer implements IChunkProviderServer { +@Mixin(ServerChunkProvider.class) +public class MixinServerChunkProvider implements IChunkProviderServer { @Shadow @Final - private IChunkLoader chunkLoader; + private ChunkLoader chunkLoader; @Override - public IChunkLoader getChunkLoader() { + public ChunkLoader getChunkLoader() { return this.chunkLoader; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinVboRenderList.java b/src/launch/java/baritone/launch/mixins/MixinVboRenderList.java deleted file mode 100644 index 5cda68034..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinVboRenderList.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.VboRenderList; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import static org.lwjgl.opengl.GL11.*; - -@Mixin(VboRenderList.class) -public class MixinVboRenderList { - - @Redirect( // avoid creating CallbackInfo at all costs; this is called 40k times per second - method = "renderChunkLayer", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/renderer/GlStateManager.popMatrix()V" - ) - ) - private void popMatrix() { - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getInstance().isSingleplayer()) { - // reset the blend func to normal (not dependent on constant alpha) - GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - } - GlStateManager.popMatrix(); - } -} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 056b17a42..dfe9c58fa 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -8,21 +8,15 @@ "maxShiftBy": 2 }, "client": [ - "MixinAnvilChunkLoader", "MixinBlockPos", - "MixinChunkProviderClient", - "MixinChunkProviderServer", - "MixinChunkRenderContainer", - "MixinChunkRenderWorker", - "MixinEntityLivingBase", - "MixinEntityPlayerSP", + "MixinClientPlayerEntity", + "MixinClientPlayNetHandler", + "MixinEntity", "MixinGameRenderer", + "MixinLivingEntity", "MixinMinecraft", - "MixinNetHandlerPlayClient", "MixinNetworkManager", - "MixinRenderChunk", - "MixinRenderChunkCache", - "MixinRenderList", - "MixinVboRenderList" + "MixinRegionFileCache", + "MixinServerChunkProvider" ] } \ No newline at end of file diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index e03d56332..52f64a91f 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -218,7 +218,7 @@ public void openClick() { new Thread(() -> { try { Thread.sleep(100); - Helper.mc.addScheduledTask(() -> Helper.mc.displayScreen(new GuiClick())); + Helper.mc.execute(() -> Helper.mc.displayGuiScreen(new GuiClick())); } catch (Exception ignored) {} }).start(); } diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index bcb11bb6c..3c2e15c72 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -21,10 +21,10 @@ import baritone.api.event.events.TickEvent; import baritone.utils.ToolSet; import net.minecraft.block.Block; -import net.minecraft.block.state.BlockState; -import net.minecraft.client.entity.ClientPlayerEntity; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.ClickType; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.inventory.container.ClickType; import net.minecraft.item.*; import net.minecraft.util.NonNullList; @@ -46,14 +46,14 @@ public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } - if (ctx.player().openContainer != ctx.player().inventoryContainer) { + if (ctx.player().openContainer != ctx.player().container) { // we have a crafting table or a chest or something open return; } if (firstValidThrowaway() >= 9) { // aka there are none on the hotbar, but there are some in main inventory swapWithHotBar(firstValidThrowaway(), 8); } - int pick = bestToolAgainst(Blocks.STONE, ItemPickaxe.class); + int pick = bestToolAgainst(Blocks.STONE, PickaxeItem.class); if (pick >= 9) { swapWithHotBar(pick, 0); } @@ -88,7 +88,7 @@ public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { } private void swapWithHotBar(int inInventory, int inHotbar) { - ctx.playerController().windowClick(ctx.player().inventoryContainer.windowId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); + ctx.playerController().windowClick(ctx.player().container.windowId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); } private int firstValidThrowaway() { // TODO offhand idk @@ -101,7 +101,7 @@ private int firstValidThrowaway() { // TODO offhand idk return -1; } - private int bestToolAgainst(Block against, Class klass) { + private int bestToolAgainst(Block against, Class klass) { NonNullList invy = ctx.player().inventory.mainInventory; int bestInd = -1; double bestSpeed = -1; @@ -132,7 +132,7 @@ public boolean hasGenericThrowaway() { public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z); - if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof ItemBlock && ((ItemBlock) stack.getItem()).getBlock().equals(maybe.getBlock()))) { + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && ((BlockItem) stack.getItem()).getBlock().equals(maybe.getBlock()))) { return true; // gotem } for (Item item : Baritone.settings().acceptableThrowawayItems.value) { @@ -168,7 +168,7 @@ public boolean throwaway(boolean select, Predicate desired) { // so not a shovel, not a hoe, not a block, etc for (byte i = 0; i < 9; i++) { ItemStack item = inv.get(i); - if (item.isEmpty() || item.getItem() instanceof ItemPickaxe) { + if (item.isEmpty() || item.getItem() instanceof PickaxeItem) { if (select) { p.inventory.currentItem = i; } diff --git a/src/main/java/baritone/behavior/MemoryBehavior.java b/src/main/java/baritone/behavior/MemoryBehavior.java index 0c1680b33..4c4c48a04 100644 --- a/src/main/java/baritone/behavior/MemoryBehavior.java +++ b/src/main/java/baritone/behavior/MemoryBehavior.java @@ -20,26 +20,10 @@ import baritone.Baritone; import baritone.api.cache.Waypoint; import baritone.api.event.events.BlockInteractEvent; -import baritone.api.event.events.PacketEvent; -import baritone.api.event.events.PlayerUpdateEvent; -import baritone.api.event.events.TickEvent; -import baritone.api.event.events.type.EventState; import baritone.cache.ContainerMemory; import baritone.utils.BlockStateInterface; -import net.minecraft.block.Block; -import net.minecraft.block.BlockBed; -import net.minecraft.init.Blocks; +import net.minecraft.block.BedBlock; import net.minecraft.item.ItemStack; -import net.minecraft.network.Packet; -import net.minecraft.network.play.client.CPacketCloseWindow; -import net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock; -import net.minecraft.network.play.server.SPacketCloseWindow; -import net.minecraft.network.play.server.SPacketOpenWindow; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityLockable; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentTranslation; import java.io.IOException; import java.nio.file.Files; @@ -54,111 +38,13 @@ */ public final class MemoryBehavior extends Behavior { - private final List futureInventories = new ArrayList<>(); // this is per-bot - - private Integer enderChestWindowId; // nae nae - public MemoryBehavior(Baritone baritone) { super(baritone); } - @Override - public synchronized void onTick(TickEvent event) { - if (!Baritone.settings().containerMemory.value) { - return; - } - if (event.getType() == TickEvent.Type.OUT) { - enderChestWindowId = null; - futureInventories.clear(); - } - } - - @Override - public synchronized void onPlayerUpdate(PlayerUpdateEvent event) { - if (event.getState() == EventState.PRE) { - updateInventory(); - } - } - - @Override - public synchronized void onSendPacket(PacketEvent event) { - if (!Baritone.settings().containerMemory.value) { - return; - } - Packet p = event.getPacket(); - - if (event.getState() == EventState.PRE) { - if (p instanceof CPacketPlayerTryUseItemOnBlock) { - CPacketPlayerTryUseItemOnBlock packet = event.cast(); - - TileEntity tileEntity = ctx.world().getTileEntity(packet.getPos()); - // if tileEntity is an ender chest, we don't need to do anything. ender chests are treated the same regardless of what coordinate right clicked - - // Ensure the TileEntity is a container of some sort - if (tileEntity instanceof TileEntityLockable) { - - TileEntityLockable lockable = (TileEntityLockable) tileEntity; - int size = lockable.getSizeInventory(); - BlockPos position = tileEntity.getPos(); - BlockPos adj = neighboringConnectedBlock(position); - System.out.println(position + " " + adj); - if (adj != null) { - size *= 2; // double chest or double trapped chest - if (adj.getX() < position.getX() || adj.getZ() < position.getZ()) { - position = adj; // standardize on the lower coordinate, regardless of which side of the large chest we right clicked - } - } - - this.futureInventories.add(new FutureInventory(System.nanoTime() / 1000000L, size, lockable.getGuiID(), position)); - } - } - - if (p instanceof CPacketCloseWindow) { - getCurrent().save(); - } - } - } - - @Override - public synchronized void onReceivePacket(PacketEvent event) { - if (!Baritone.settings().containerMemory.value) { - return; - } - Packet p = event.getPacket(); - - if (event.getState() == EventState.PRE) { - if (p instanceof SPacketOpenWindow) { - SPacketOpenWindow packet = event.cast(); - // Remove any entries that were created over a second ago, this should make up for INSANE latency - futureInventories.removeIf(i -> System.nanoTime() / 1000000L - i.time > 1000); - - System.out.println("Received packet " + packet.getGuiId() + " " + packet.getEntityId() + " " + packet.getSlotCount() + " " + packet.getWindowId()); - System.out.println(packet.getWindowTitle()); - if (packet.getWindowTitle() instanceof TextComponentTranslation && ((TextComponentTranslation) packet.getWindowTitle()).getKey().equals("container.enderchest")) { - // title is not customized (i.e. this isn't just a renamed shulker) - enderChestWindowId = packet.getWindowId(); - return; - } - futureInventories.stream() - .filter(i -> i.getType().equals(packet.getGuiId()) && i.slots == packet.getSlotCount()) - .findFirst().ifPresent(matched -> { - // Remove the future inventory - futureInventories.remove(matched); - - // Setup the remembered inventory - getCurrentContainer().setup(matched.pos, packet.getWindowId(), packet.getSlotCount()); - }); - } - - if (p instanceof SPacketCloseWindow) { - getCurrent().save(); - } - } - } - @Override public void onBlockInteract(BlockInteractEvent event) { - if (event.getType() == BlockInteractEvent.Type.USE && BlockStateInterface.getBlock(ctx, event.getPos()) instanceof BlockBed) { + if (event.getType() == BlockInteractEvent.Type.USE && BlockStateInterface.getBlock(ctx, event.getPos()) instanceof BedBlock) { baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(new Waypoint("bed", Waypoint.Tag.BED, event.getPos())); } } @@ -168,85 +54,6 @@ public void onPlayerDeath() { baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(new Waypoint("death", Waypoint.Tag.DEATH, ctx.playerFeet())); } - - private void updateInventory() { - if (!Baritone.settings().containerMemory.value) { - return; - } - int windowId = ctx.player().openContainer.windowId; - if (enderChestWindowId != null) { - if (windowId == enderChestWindowId) { - getCurrent().contents = ctx.player().openContainer.getInventory().subList(0, 27); - } else { - getCurrent().save(); - enderChestWindowId = null; - } - } - if (getCurrentContainer() != null) { - getCurrentContainer().getInventoryFromWindow(windowId).ifPresent(inventory -> inventory.updateFromOpenWindow(ctx)); - } - } - - private ContainerMemory getCurrentContainer() { - if (baritone.getWorldProvider().getCurrentWorld() == null) { - return null; - } - return (ContainerMemory) baritone.getWorldProvider().getCurrentWorld().getContainerMemory(); - } - - private BlockPos neighboringConnectedBlock(BlockPos in) { - BlockStateInterface bsi = baritone.bsi; - Block block = bsi.get0(in).getBlock(); - if (block != Blocks.TRAPPED_CHEST && block != Blocks.CHEST) { - return null; // other things that have contents, but can be placed adjacent without combining - } - for (int i = 0; i < 4; i++) { - BlockPos adj = in.offset(Direction.byHorizontalIndex(i)); - if (bsi.get0(adj).getBlock() == block) { - return adj; - } - } - return null; - } - - /** - * An inventory that we are not yet fully aware of, but are expecting to exist at some point in the future. - */ - private static final class FutureInventory { - - /** - * The time that we initially expected the inventory to be provided, in milliseconds - */ - private final long time; - - /** - * The amount of slots in the inventory - */ - private final int slots; - - /** - * The type of inventory - */ - private final String type; - - /** - * The position of the inventory container - */ - private final BlockPos pos; - - private FutureInventory(long time, int slots, String type, BlockPos pos) { - this.time = time; - this.slots = slots; - this.type = type; - this.pos = pos; - System.out.println("Future inventory created " + time + " " + slots + " " + type + " " + pos); - } - } - - public Optional> echest() { - return Optional.ofNullable(getCurrent().contents).map(Collections::unmodifiableList); - } - public EnderChestMemory getCurrent() { Path path = baritone.getWorldProvider().getCurrentWorld().directory; return EnderChestMemory.getByServerAndPlayer(path.getParent(), ctx.player().getUniqueID()); diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 829bd39bc..dac132613 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -22,8 +22,8 @@ import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minecraft.block.Block; -import net.minecraft.block.state.BlockState; -import net.minecraft.init.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.util.math.BlockPos; import java.util.ArrayList; diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index 84612908e..ed5e9df8b 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -20,7 +20,7 @@ import baritone.Baritone; import baritone.api.cache.ICachedRegion; import baritone.api.utils.BlockUtils; -import net.minecraft.block.state.BlockState; +import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import java.io.*; diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index e5d4a6526..e06c08077 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -21,8 +21,6 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; import net.minecraft.block.*; -import net.minecraft.block.state.BlockState; -import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.chunk.BlockStateContainer; @@ -31,6 +29,8 @@ import java.util.*; +import static baritone.utils.BlockStateInterface.getFromChunk; + /** * @author Brady * @since 8/3/2018 @@ -89,19 +89,20 @@ public static CachedChunk pack(Chunk chunk) { BlockState[] blocks = new BlockState[256]; for (int z = 0; z < 16; z++) { - https://www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html + https: +//www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html for (int x = 0; x < 16; x++) { for (int y = 255; y >= 0; y--) { int index = CachedChunk.getPositionIndex(x, y, z); if (bitSet.get(index) || bitSet.get(index + 1)) { - blocks[z << 4 | x] = chunk.getBlockState(x, y, z); + blocks[z << 4 | x] = getFromChunk(chunk, x, y, z); continue https; } } blocks[z << 4 | x] = Blocks.AIR.getDefaultState(); } } - return new CachedChunk(chunk.x, chunk.z, bitSet, blocks, specialBlocks, System.currentTimeMillis()); + return new CachedChunk(chunk.getPos().x, chunk.getPos().z, bitSet, blocks, specialBlocks, System.currentTimeMillis()); } private static PathingBlockType getPathingBlockType(BlockState state, Chunk chunk, int x, int y, int z) { @@ -113,15 +114,15 @@ private static PathingBlockType getPathingBlockType(BlockState state, Chunk chun return PathingBlockType.AVOID; } if ( - (x != 15 && MovementHelper.possiblyFlowing(chunk.getBlockState(x + 1, y, z))) - || (x != 0 && MovementHelper.possiblyFlowing(chunk.getBlockState(x - 1, y, z))) - || (z != 15 && MovementHelper.possiblyFlowing(chunk.getBlockState(x, y, z + 1))) - || (z != 0 && MovementHelper.possiblyFlowing(chunk.getBlockState(x, y, z - 1))) + (x != 15 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x + 1, y, z))) + || (x != 0 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x - 1, y, z))) + || (z != 15 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x, y, z + 1))) + || (z != 0 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x, y, z - 1))) ) { return PathingBlockType.AVOID; } if (x == 0 || x == 15 || z == 0 || z == 15) { - Vec3d flow = state.getFluidState().getFlow(chunk.getWorld(), new BlockPos(x + chunk.x << 4, y, z + chunk.z << 4)); + Vec3d flow = state.getFluidState().getFlow(chunk.getWorld(), new BlockPos(x + chunk.getPos().x << 4, y, z + chunk.getPos().z << 4)); if (flow.x != 0.0 || flow.z != 0.0) { return PathingBlockType.WATER; } @@ -137,7 +138,7 @@ private static PathingBlockType getPathingBlockType(BlockState state, Chunk chun // however, this failed in the nether when you were near a nether fortress // because fences check their adjacent blocks in the world for their fence connection status to determine AABB shape // this caused a nullpointerexception when we saved chunks on unload, because they were unable to check their neighbors - if (block instanceof BlockAir || block instanceof BlockTallGrass || block instanceof BlockDoublePlant || block instanceof BlockFlower) { + if (block instanceof AirBlock || block instanceof TallGrassBlock || block instanceof DoublePlantBlock || block instanceof FlowerBlock) { return PathingBlockType.AIR; } diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 412e16ee5..54cfb41cb 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -23,7 +23,7 @@ import baritone.utils.accessor.IAnvilChunkLoader; import baritone.utils.accessor.IChunkProviderServer; import net.minecraft.server.integrated.IntegratedServer; -import net.minecraft.world.WorldServer; +import net.minecraft.world.ServerWorld; import net.minecraft.world.dimension.DimensionType; import org.apache.commons.lang3.SystemUtils; @@ -64,7 +64,7 @@ public final void initWorld(DimensionType dimension) { // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file if (mc.isSingleplayer()) { - WorldServer localServerWorld = integratedServer.getWorld(dimension); + ServerWorld localServerWorld = integratedServer.getWorld(dimension); IChunkProviderServer provider = (IChunkProviderServer) localServerWorld.getChunkProvider(); IAnvilChunkLoader loader = (IAnvilChunkLoader) provider.getChunkLoader(); directory = loader.getChunkSaveLocation(); diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 6bfe58772..300af3824 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -20,8 +20,8 @@ import baritone.api.cache.IWorldScanner; import baritone.api.utils.IPlayerContext; import net.minecraft.block.Block; -import net.minecraft.block.state.BlockState; -import net.minecraft.client.multiplayer.ChunkProviderClient; +import net.minecraft.block.BlockState; +import net.minecraft.client.multiplayer.ClientChunkProvider; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.chunk.BlockStateContainer; @@ -46,7 +46,7 @@ public List scanChunkRadius(IPlayerContext ctx, List blocks, in if (blocks.isEmpty()) { return res; } - ChunkProviderClient chunkProvider = (ChunkProviderClient) ctx.world().getChunkProvider(); + ClientChunkProvider chunkProvider = (ClientChunkProvider) ctx.world().getChunkProvider(); int maxSearchRadiusSq = maxSearchRadius * maxSearchRadius; int playerChunkX = ctx.playerFeet().getX() >> 4; @@ -70,7 +70,7 @@ public List scanChunkRadius(IPlayerContext ctx, List blocks, in foundChunks = true; int chunkX = xoff + playerChunkX; int chunkZ = zoff + playerChunkZ; - Chunk chunk = chunkProvider.getChunk(chunkX, chunkZ, false, false); + Chunk chunk = chunkProvider.getChunk(chunkX, chunkZ, null, false); if (chunk == null) { continue; } @@ -96,8 +96,8 @@ public List scanChunk(IPlayerContext ctx, List blocks, ChunkPos return Collections.emptyList(); } - ChunkProviderClient chunkProvider = (ChunkProviderClient) ctx.world().getChunkProvider(); - Chunk chunk = chunkProvider.getChunk(pos.x, pos.z, false, false); + ClientChunkProvider chunkProvider = (ClientChunkProvider) ctx.world().getChunkProvider(); + Chunk chunk = chunkProvider.getChunk(pos.x, pos.z, null, false); int playerY = ctx.playerFeet().getY(); if (chunk == null || chunk.isEmpty()) { @@ -114,12 +114,12 @@ private boolean scanChunkInto(int chunkX, int chunkZ, Chunk chunk, List s boolean foundWithinY = false; for (int yIndex = 0; yIndex < 16; yIndex++) { int y0 = coordinateIterationOrder[yIndex]; - ChunkSection extendedblockstorage = chunkInternalStorageArray[y0]; - if (extendedblockstorage == null) { + ChunkSection section = chunkInternalStorageArray[y0]; + if (section == null || ChunkSection.isEmpty(section)) { continue; } int yReal = y0 << 4; - BlockStateContainer bsc = extendedblockstorage.getData(); + BlockStateContainer bsc = section.getData(); // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; // for better cache locality, iterate in that order for (int y = 0; y < 16; y++) { diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 5519d5023..e20a92be4 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -84,7 +84,7 @@ public final void onChunkEvent(ChunkEvent event) { // to make sure the chunk being unloaded is already loaded. boolean isPreUnload = state == EventState.PRE && type == ChunkEvent.Type.UNLOAD - && world.getChunkProvider().getChunk(event.getX(), event.getZ(), false, false) != null; + && world.getChunkProvider().getChunk(event.getX(), event.getZ(), null, false) != null; if (isPostPopulate || isPreUnload) { baritone.getWorldProvider().ifWorldLoaded(worldData -> { diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index bdad4e7cb..d485d9c4a 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -25,12 +25,12 @@ import baritone.utils.ToolSet; import baritone.utils.pathing.BetterWorldBorder; import net.minecraft.block.Block; -import net.minecraft.block.state.BlockState; -import net.minecraft.client.entity.ClientPlayerEntity; +import net.minecraft.block.BlockState; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.init.Items; +import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -83,7 +83,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); this.toolSet = new ToolSet(player); this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); - this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && InventoryPlayer.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && !world.getDimension().isNether(); + this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && PlayerInventory.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && !world.getDimension().isNether(); this.canSprint = Baritone.settings().allowSprint.value && player.getFoodStats().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; this.allowBreak = Baritone.settings().allowBreak.value; diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index eaa512a61..a021d8cce 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -24,7 +24,7 @@ import baritone.api.utils.*; import baritone.api.utils.input.Input; import baritone.utils.BlockStateInterface; -import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.item.FallingBlockEntity; import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -107,7 +107,7 @@ public void override(double cost) { */ @Override public MovementStatus update() { - ctx.player().abilities.isFlying = false; + ctx.player().playerAbilities.isFlying = false; currentState = updateState(currentState); if (MovementHelper.isLiquid(ctx, ctx.playerFeet())) { currentState.setInput(Input.JUMP, true); @@ -142,7 +142,7 @@ protected boolean prepared(MovementState state) { } boolean somethingInTheWay = false; for (BetterBlockPos blockPos : positionsToBreak) { - if (!ctx.world().getEntitiesWithinAABB(EntityFallingBlock.class, new AxisAlignedBB(0, 0, 0, 1, 1.1, 1).offset(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { + if (!ctx.world().getEntitiesWithinAABB(FallingBlockEntity.class, new AxisAlignedBB(0, 0, 0, 1, 1.1, 1).offset(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { return false; } if (!MovementHelper.canWalkThrough(ctx, blockPos)) { // can't break air, so don't try diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 79e98f8a8..edd26c32a 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -27,18 +27,13 @@ import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; import net.minecraft.block.*; -import net.minecraft.block.state.BlockState; -import net.minecraft.fluid.FlowingFluid; -import net.minecraft.fluid.Fluid; -import net.minecraft.fluid.IFluidState; -import net.minecraft.fluid.WaterFluid; -import net.minecraft.init.Blocks; -import net.minecraft.init.Fluids; +import net.minecraft.fluid.*; import net.minecraft.pathfinding.PathType; import net.minecraft.state.BooleanProperty; import net.minecraft.state.properties.SlabType; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; @@ -56,7 +51,7 @@ public interface MovementHelper extends ActionCosts, Helper { static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block b = state.getBlock(); return b == Blocks.ICE // ice becomes water, and water can mess up the path - || b instanceof BlockSilverfish // obvious reasons + || b instanceof SilverfishBlock // obvious reasons // call context.get directly with x,y,z. no need to make 5 new BlockPos for no reason || avoidAdjacentBreaking(bsi, x, y + 1, z, true) || avoidAdjacentBreaking(bsi, x + 1, y, z, false) @@ -73,9 +68,9 @@ static boolean avoidAdjacentBreaking(BlockStateInterface bsi, int x, int y, int Block block = state.getBlock(); if (!directlyAbove // it is fine to mine a block that has a falling block directly above, this (the cost of breaking the stacked fallings) is included in cost calculations // therefore if directlyAbove is true, we will actually ignore if this is falling - && block instanceof BlockFalling // obviously, this check is only valid for falling blocks + && block instanceof FallingBlock // obviously, this check is only valid for falling blocks && Baritone.settings().avoidUpdatingFallingBlocks.value // and if the setting is enabled - && BlockFalling.canFallThrough(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) + && FallingBlock.canFallThrough(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) return true; // dont break a block that is adjacent to unsupported gravel because it can cause really weird stuff } return !state.getFluidState().isEmpty(); @@ -91,25 +86,25 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); - if (block instanceof BlockAir) { // early return for most common case + if (block instanceof AirBlock) { // early return for most common case return true; } - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block == Blocks.BUBBLE_COLUMN || block instanceof BlockShulkerBox || block instanceof BlockSlab || block instanceof BlockTrapDoor) { + if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof SkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { return false; } - if (block instanceof BlockDoor || block instanceof BlockFenceGate) { + if (block instanceof DoorBlock || block instanceof FenceGateBlock) { // Because there's no nice method in vanilla to check if a door is openable or not, we just have to assume // that anything that isn't an iron door isn't openable, ignoring that some doors introduced in mods can't // be opened by just interacting. return block != Blocks.IRON_DOOR; } - if (block instanceof BlockCarpet) { + if (block instanceof CarpetBlock) { return canWalkOn(bsi, x, y - 1, z); } - if (block instanceof BlockSnowLayer) { + if (block instanceof SnowBlock) { // we've already checked doors and fence gates // so the only remaining dynamic isPassables are snow and trapdoor // if they're cached as a top block, we don't know their metadata @@ -119,7 +114,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc } // the check in BlockSnow.isPassable is layers < 5 // while actually, we want < 3 because 3 or greater makes it impassable in a 2 high ceiling - if (state.get(BlockSnowLayer.LAYERS) >= 3) { + if (state.get(SnowBlock.LAYERS) >= 3) { return false; } // ok, it's low enough we could walk through it, but is it supported? @@ -134,7 +129,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc return false; } BlockState up = bsi.get0(x, y + 1, z); - if (!up.getFluidState().isEmpty() || up.getBlock() instanceof BlockLilyPad) { + if (!up.getFluidState().isEmpty() || up.getBlock() instanceof LilyPadBlock) { return false; } return true; @@ -161,7 +156,7 @@ static boolean fullyPassable(CalculationContext context, int x, int y, int z) { static boolean fullyPassable(BlockState state) { Block block = state.getBlock(); - if (block instanceof BlockAir) { // early return for most common case + if (block instanceof AirBlock) { // early return for most common case return true; } // exceptions - blocks that are isPassable true, but we can't actually jump through @@ -171,14 +166,14 @@ static boolean fullyPassable(BlockState state) { || block == Blocks.VINE || block == Blocks.LADDER || block == Blocks.COCOA - || block instanceof BlockDoor - || block instanceof BlockFenceGate - || block instanceof BlockSnow + || block instanceof DoorBlock + || block instanceof FenceGateBlock + || block instanceof SnowBlock || !state.getFluidState().isEmpty() - || block instanceof BlockTrapDoor - || block instanceof BlockEndPortal - || block instanceof BlockSkull - || block instanceof BlockShulkerBox) { + || block instanceof TrapDoorBlock + || block instanceof EndPortalBlock + || block instanceof SkullBlock + || block instanceof ShulkerBoxBlock) { return false; } // door, fence gate, liquid, trapdoor have been accounted for, nothing else uses the world or pos parameters @@ -197,16 +192,16 @@ static boolean isReplacable(int x, int y, int z, BlockState state, BlockStateInt * } */ Block block = state.getBlock(); - if (block instanceof BlockAir) { + if (block instanceof AirBlock) { // early return for common cases hehe return true; } - if (block instanceof BlockSnowLayer) { + if (block instanceof SnowBlock) { // as before, default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) if (!bsi.worldContainsLoadedChunk(x, z)) { return true; } - return state.get(BlockSnowLayer.LAYERS) == 1; + return state.get(SnowBlock.LAYERS) == 1; } if (block == Blocks.LARGE_FERN || block == Blocks.TALL_GRASS) { return true; @@ -220,11 +215,11 @@ static boolean isDoorPassable(IPlayerContext ctx, BlockPos doorPos, BlockPos pla } BlockState state = BlockStateInterface.get(ctx, doorPos); - if (!(state.getBlock() instanceof BlockDoor)) { + if (!(state.getBlock() instanceof DoorBlock)) { return true; } - return isHorizontalBlockPassable(doorPos, state, playerPos, BlockDoor.OPEN); + return isHorizontalBlockPassable(doorPos, state, playerPos, DoorBlock.OPEN); } static boolean isGatePassable(IPlayerContext ctx, BlockPos gatePos, BlockPos playerPos) { @@ -233,11 +228,11 @@ static boolean isGatePassable(IPlayerContext ctx, BlockPos gatePos, BlockPos pla } BlockState state = BlockStateInterface.get(ctx, gatePos); - if (!(state.getBlock() instanceof BlockFenceGate)) { + if (!(state.getBlock() instanceof FenceGateBlock)) { return true; } - return state.get(BlockFenceGate.OPEN); + return state.get(FenceGateBlock.OPEN); } static boolean isHorizontalBlockPassable(BlockPos blockPos, BlockState blockState, BlockPos playerPos, BooleanProperty propertyOpen) { @@ -245,7 +240,7 @@ static boolean isHorizontalBlockPassable(BlockPos blockPos, BlockState blockStat return false; } - Direction.Axis facing = blockState.get(BlockHorizontal.HORIZONTAL_FACING).getAxis(); + Direction.Axis facing = blockState.get(HorizontalBlock.HORIZONTAL_FACING).getAxis(); boolean open = blockState.get(propertyOpen); Direction.Axis playerFacing; @@ -285,12 +280,12 @@ static boolean avoidWalkingInto(BlockState state) { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); - if (block instanceof BlockAir || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { + if (block instanceof AirBlock || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { // early return for most common case (air) // plus magma, which is a normal cube but it hurts you return false; } - if (state.isBlockNormalCube()) { + if (isBlockNormalCube(state)) { return true; } if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this @@ -307,7 +302,7 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think its a decrease in readability BlockState upState = bsi.get0(x, y + 1, z); Block up = upState.getBlock(); - if (up == Blocks.LILY_PAD || up instanceof BlockCarpet) { + if (up == Blocks.LILY_PAD || up instanceof CarpetBlock) { return true; } if (isFlowing(x, y, z, state, bsi) || upState.getFluidState().getFluid() == Fluids.FLOWING_WATER) { @@ -321,16 +316,16 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat if (Baritone.settings().assumeWalkOnLava.value && isLava(state) && !isFlowing(x, y, z, state, bsi)) { return true; } - if (block == Blocks.GLASS || block instanceof BlockStainedGlass) { + if (block == Blocks.GLASS || block instanceof StainedGlassBlock) { return true; } - if (block instanceof BlockSlab) { + if (block instanceof SlabBlock) { if (!Baritone.settings().allowWalkOnBottomSlab.value) { - return state.isTopSolid(); + return state.get(SlabBlock.TYPE) != SlabType.BOTTOM; } return true; } - return block instanceof BlockStairs; + return block instanceof StairsBlock; } static boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, BlockState state) { @@ -365,7 +360,7 @@ static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z, Blo // can we look at the center of a side face of this block and likely be able to place? // (thats how this check is used) // therefore dont include weird things that we technically could place against (like carpet) but practically can't - return state.isBlockNormalCube() || state.isFullCube() || state.getBlock() == Blocks.GLASS || state.getBlock() instanceof BlockStainedGlass; + return isBlockNormalCube(state) || isFullCube(state) || state.getBlock() == Blocks.GLASS || state.getBlock() instanceof StainedGlassBlock; } static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, boolean includeFalling) { @@ -394,7 +389,7 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i result *= mult; if (includeFalling) { BlockState above = context.get(x, y + 1, z); - if (above.getBlock() instanceof BlockFalling) { + if (above.getBlock() instanceof FallingBlock) { result += getMiningDurationTicks(context, x, y + 1, z, above, true); } } @@ -404,8 +399,8 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i } static boolean isBottomSlab(BlockState state) { - return state.getBlock() instanceof BlockSlab - && state.get(BlockSlab.TYPE) == SlabType.BOTTOM; + return state.getBlock() instanceof SlabBlock + && state.get(SlabBlock.TYPE) == SlabType.BOTTOM; } /** @@ -502,6 +497,13 @@ static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterf || possiblyFlowing(bsi.get0(x, y, z - 1)); } + static boolean isBlockNormalCube(BlockState state) { + return state.isBlockNormalCube(); + } + + static boolean isFullCube(BlockState state){ + return state.isFullCube(); + } static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, BlockPos placeAt, boolean preferDown) { IPlayerContext ctx = baritone.getPlayerContext(); @@ -524,7 +526,7 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, double faceZ = (placeAt.getZ() + against1.getZ() + 1.0D) * 0.5D; Rotation place = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()); RayTraceResult res = RayTraceUtils.rayTraceTowards(ctx.player(), place, ctx.playerController().getBlockReachDistance()); - if (res != null && res.getType() == RayTraceResult.Type.BLOCK && res.getBlockPos().equals(against1) && res.getBlockPos().offset(res.sideHit).equals(placeAt)) { + if (res != null && res.getType() == RayTraceResult.Type.BLOCK && ((BlockRayTraceResult) res).getPos().equals(against1) && ((BlockRayTraceResult) res).getPos().offset(((BlockRayTraceResult) res).getFace()).equals(placeAt)) { state.setTarget(new MovementState.MovementTarget(place, true)); found = true; @@ -538,7 +540,7 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, } if (ctx.getSelectedBlock().isPresent()) { BlockPos selectedBlock = ctx.getSelectedBlock().get(); - Direction side = ctx.objectMouseOver().sideHit; + Direction side = ((BlockRayTraceResult) ctx.objectMouseOver()).getFace(); // only way for selectedBlock.equals(placeAt) to be true is if it's replacable if (selectedBlock.equals(placeAt) || (MovementHelper.canPlaceAgainst(ctx, selectedBlock) && selectedBlock.offset(side).equals(placeAt))) { ((Baritone) baritone).getInventoryBehavior().selectThrowawayForLocation(true, placeAt.getX(), placeAt.getY(), placeAt.getZ()); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 5c61b3ca8..4ed671760 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -27,9 +27,9 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; -import net.minecraft.block.BlockFalling; -import net.minecraft.block.state.BlockState; -import net.minecraft.init.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.FallingBlock; import net.minecraft.util.Direction; public class MovementAscend extends Movement { @@ -80,18 +80,18 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } BlockState srcUp2 = context.get(x, y + 2, z); // used lower down anyway - if (context.get(x, y + 3, z).getBlock() instanceof BlockFalling && (MovementHelper.canWalkThrough(context.bsi, x, y + 1, z) || !(srcUp2.getBlock() instanceof BlockFalling))) {//it would fall on us and possibly suffocate us + if (context.get(x, y + 3, z).getBlock() instanceof FallingBlock && (MovementHelper.canWalkThrough(context.bsi, x, y + 1, z) || !(srcUp2.getBlock() instanceof FallingBlock))) {//it would fall on us and possibly suffocate us // HOWEVER, we assume that we're standing in the start position // that means that src and src.up(1) are both air // maybe they aren't now, but they will be by the time this starts // if the lower one is can't walk through and the upper one is falling, that means that by standing on src // (the presupposition of this Movement) - // we have necessarily already cleared the entire BlockFalling stack + // we have necessarily already cleared the entire FallingBlock stack // on top of our head - // as in, if we have a block, then two BlockFallings on top of it + // as in, if we have a block, then two FallingBlocks on top of it // and that block is x, y+1, z, and we'd have to clear it to even start this movement - // we don't need to worry about those BlockFallings because we've already cleared them + // we don't need to worry about those FallingBlocks because we've already cleared them return COST_INF; // you may think we only need to check srcUp2, not srcUp // however, in the scenario where glitchy world gen where unsupported sand / gravel generates @@ -189,7 +189,7 @@ public MovementState updateState(MovementState state) { double flatDistToNext = xAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().posX) + zAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().posZ); double sideDist = zAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().posX) + xAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().posZ); - double lateralMotion = xAxis * ctx.player().motionZ + zAxis * ctx.player().motionX; + double lateralMotion = xAxis * ctx.player().getMotion().z + zAxis * ctx.player().getMotion().x; if (Math.abs(lateralMotion) > 0.1) { return state; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index e46f868b9..1e28f5429 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -30,10 +30,10 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; -import net.minecraft.block.BlockFalling; -import net.minecraft.block.state.BlockState; -import net.minecraft.client.entity.ClientPlayerEntity; -import net.minecraft.init.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.FallingBlock; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -116,7 +116,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des } public static boolean dynamicFallCost(CalculationContext context, int x, int y, int z, int destX, int destZ, double frontBreak, BlockState below, MutableMoveResult res) { - if (frontBreak != 0 && context.get(destX, y + 2, destZ).getBlock() instanceof BlockFalling) { + if (frontBreak != 0 && context.get(destX, y + 2, destZ).getBlock() instanceof FallingBlock) { // if frontBreak is 0 we can actually get through this without updating the falling block and making it actually fall // but if frontBreak is nonzero, we're breaking blocks in front, so don't let anything fall through this column, // and potentially replace the water we're going to fall into diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 2f0d49cdc..f53748c52 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -29,8 +29,8 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; -import net.minecraft.block.state.BlockState; -import net.minecraft.init.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index bc97a8911..1429ecba2 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -25,8 +25,8 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import net.minecraft.block.Block; -import net.minecraft.block.state.BlockState; -import net.minecraft.init.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; public class MovementDownward extends Movement { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index ff84e4f52..1e6cc95d6 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -31,13 +31,13 @@ import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; -import net.minecraft.block.BlockLadder; -import net.minecraft.block.state.BlockState; -import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.LadderBlock; +import net.minecraft.entity.player.PlayerInventory; import net.minecraft.fluid.WaterFluid; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -84,7 +84,7 @@ public MovementState updateState(MovementState state) { Block destBlock = destState.getBlock(); boolean isWater = destState.getFluidState().getFluid() instanceof WaterFluid; if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { - if (!InventoryPlayer.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().getDimension().isNether()) { + if (!PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().getDimension().isNether()) { return state.setStatus(MovementStatus.UNREACHABLE); } @@ -105,15 +105,15 @@ public MovementState updateState(MovementState state) { } if (playerFeet.equals(dest) && (ctx.player().posY - playerFeet.getY() < 0.094 || isWater)) { // 0.094 because lilypads if (isWater) { // only match water, not flowing water (which we cannot pick up with a bucket) - if (InventoryPlayer.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY))) { + if (PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY))) { ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY); - if (ctx.player().motionY >= 0) { + if (ctx.player().getMotion().y >= 0) { return state.setInput(Input.CLICK_RIGHT, true); } else { return state; } } else { - if (ctx.player().motionY >= 0) { + if (ctx.player().getMotion().y >= 0) { return state.setStatus(MovementStatus.SUCCESS); } // don't else return state; we need to stay centered because this water might be flowing under the surface } @@ -122,8 +122,8 @@ public MovementState updateState(MovementState state) { } } Vec3d destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) - if (Math.abs(ctx.player().posX + ctx.player().motionX - destCenter.x) > 0.1 || Math.abs(ctx.player().posZ + ctx.player().motionZ - destCenter.z) > 0.1) { - if (!ctx.player().onGround && Math.abs(ctx.player().motionY) > 0.4) { + if (Math.abs(ctx.player().posX + ctx.player().getMotion().x - destCenter.x) > 0.1 || Math.abs(ctx.player().posZ + ctx.player().getMotion().z - destCenter.z) > 0.1) { + if (!ctx.player().onGround && Math.abs(ctx.player().getMotion().y) > 0.4) { state.setInput(Input.SNEAK, true); } state.setInput(Input.MOVE_FORWARD, true); @@ -150,7 +150,7 @@ private Direction avoid() { for (int i = 0; i < 15; i++) { BlockState state = ctx.world().getBlockState(ctx.playerFeet().down(i)); if (state.getBlock() == Blocks.LADDER) { - return state.get(BlockLadder.FACING); + return state.get(LadderBlock.FACING); } } return null; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index c15b57b5d..725bb7c22 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -28,11 +28,11 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; -import net.minecraft.block.BlockStairs; -import net.minecraft.block.state.BlockState; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.StairsBlock; +import net.minecraft.fluid.Fluids; import net.minecraft.fluid.WaterFluid; -import net.minecraft.init.Blocks; -import net.minecraft.init.Fluids; import net.minecraft.util.Direction; public class MovementParkour extends Movement { @@ -87,7 +87,7 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi return; } BlockState standingOn = context.get(x, y - 1, z); - if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof BlockStairs || MovementHelper.isBottomSlab(standingOn) || standingOn.getFluidState().getFluid() != Fluids.EMPTY) { + if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof StairsBlock || MovementHelper.isBottomSlab(standingOn) || standingOn.getFluidState().getFluid() != Fluids.EMPTY) { return; } int maxJump; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 6750a782f..d3bfb5218 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -31,13 +31,10 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import net.minecraft.block.*; -import net.minecraft.block.state.BlockState; -import net.minecraft.init.Blocks; +import net.minecraft.state.properties.SlabType; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import java.util.Objects; - public class MovementPillar extends Movement { public MovementPillar(IBaritone baritone, BetterBlockPos start, BetterBlockPos end) { @@ -58,7 +55,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (fromDown.getBlock() == Blocks.LADDER || fromDown.getBlock() == Blocks.VINE) { return COST_INF; // can't pillar from a ladder or vine onto something that isn't also climbable } - if (fromDown.getBlock() instanceof BlockSlab && !fromDown.isTopSolid()) { + if (fromDown.getBlock() instanceof SlabBlock && fromDown.get(SlabBlock.TYPE) == SlabType.BOTTOM) { return COST_INF; // can't pillar up from a bottom slab onto a non ladder } } @@ -67,7 +64,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { } BlockState toBreak = context.get(x, y + 2, z); Block toBreakBlock = toBreak.getBlock(); - if (toBreakBlock instanceof BlockFenceGate) { // see issue #172 + if (toBreakBlock instanceof FenceGateBlock) { // see issue #172 return COST_INF; } BlockState srcUp = null; @@ -84,7 +81,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (placeCost >= COST_INF) { return COST_INF; } - if (fromDown.getBlock() instanceof BlockAir) { + if (fromDown.getBlock() instanceof AirBlock) { placeCost += 0.1; // slightly (1/200th of a second) penalize pillaring on what's currently air } } @@ -103,19 +100,19 @@ public static double cost(CalculationContext context, int x, int y, int z) { hardness = 0; // we won't actually need to break the ladder / vine because we're going to use it } else { BlockState check = context.get(x, y + 3, z); // the block on top of the one we're going to break, could it fall on us? - if (check.getBlock() instanceof BlockFalling) { + if (check.getBlock() instanceof FallingBlock) { // see MovementAscend's identical check for breaking a falling block above our head if (srcUp == null) { srcUp = context.get(x, y + 1, z); } - if (!(toBreakBlock instanceof BlockFalling) || !(srcUp.getBlock() instanceof BlockFalling)) { + if (!(toBreakBlock instanceof FallingBlock) || !(srcUp.getBlock() instanceof FallingBlock)) { return COST_INF; } } // this is commented because it may have had a purpose, but it's very unclear what it was. it's from the minebot era. //if (!MovementHelper.canWalkOn(chkPos, check) || MovementHelper.canWalkThrough(chkPos, check)) {//if the block above where we want to break is not a full block, don't do it // TODO why does canWalkThrough mean this action is COST_INF? - // BlockFalling makes sense, and !canWalkOn deals with weird cases like if it were lava + // FallingBlock makes sense, and !canWalkOn deals with weird cases like if it were lava // but I don't understand why canWalkThrough makes it impossible // return COST_INF; //} @@ -129,23 +126,23 @@ public static double cost(CalculationContext context, int x, int y, int z) { } public static boolean hasAgainst(CalculationContext context, int x, int y, int z) { - return context.get(x + 1, y, z).isBlockNormalCube() || - context.get(x - 1, y, z).isBlockNormalCube() || - context.get(x, y, z + 1).isBlockNormalCube() || - context.get(x, y, z - 1).isBlockNormalCube(); + return MovementHelper.isBlockNormalCube(context.get(x + 1, y, z)) || + MovementHelper.isBlockNormalCube(context.get(x - 1, y, z)) || + MovementHelper.isBlockNormalCube(context.get(x, y, z + 1)) || + MovementHelper.isBlockNormalCube(context.get(x, y, z - 1)); } public static BlockPos getAgainst(CalculationContext context, BetterBlockPos vine) { - if (context.get(vine.north()).isBlockNormalCube()) { + if (MovementHelper.isBlockNormalCube(context.get(vine.north()))) { return vine.north(); } - if (context.get(vine.south()).isBlockNormalCube()) { + if (MovementHelper.isBlockNormalCube(context.get(vine.south()))) { return vine.south(); } - if (context.get(vine.east()).isBlockNormalCube()) { + if (MovementHelper.isBlockNormalCube(context.get(vine.east()))) { return vine.east(); } - if (context.get(vine.west()).isBlockNormalCube()) { + if (MovementHelper.isBlockNormalCube(context.get(vine.west()))) { return vine.west(); } return null; @@ -186,7 +183,7 @@ public MovementState updateState(MovementState state) { boolean blockIsThere = MovementHelper.canWalkOn(ctx, src) || ladder; if (ladder) { - BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.offset(fromDown.get(BlockLadder.FACING).getOpposite()); + BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.offset(fromDown.get(LadderBlock.FACING).getOpposite()); if (against == null) { logDebug("Unable to climb vines"); return state.setStatus(MovementStatus.UNREACHABLE); @@ -219,7 +216,7 @@ public MovementState updateState(MovementState state) { double diffX = ctx.player().posX - (dest.getX() + 0.5); double diffZ = ctx.player().posZ - (dest.getZ() + 0.5); double dist = Math.sqrt(diffX * diffX + diffZ * diffZ); - double flatMotion = Math.sqrt(ctx.player().motionX * ctx.player().motionX + ctx.player().motionZ * ctx.player().motionZ); + double flatMotion = Math.sqrt(ctx.player().getMotion().x * ctx.player().getMotion().x + ctx.player().getMotion().z * ctx.player().getMotion().z); if (dist > 0.17) {//why 0.17? because it seemed like a good number, that's why //[explanation added after baritone port lol] also because it needs to be less than 0.2 because of the 0.3 sneak limit //and 0.17 is reasonably less than 0.2 @@ -239,14 +236,14 @@ public MovementState updateState(MovementState state) { BlockState frState = BlockStateInterface.get(ctx, src); Block fr = frState.getBlock(); // TODO: Evaluate usage of getMaterial().isReplaceable() - if (!(fr instanceof BlockAir || frState.getMaterial().isReplaceable())) { + if (!(fr instanceof AirBlock || frState.getMaterial().isReplaceable())) { RotationUtils.reachable(ctx.player(), src, ctx.playerController().getBlockReachDistance()) .map(rot -> new MovementState.MovementTarget(rot, true)) .ifPresent(state::setTarget); state.setInput(Input.JUMP, false); // breaking is like 5x slower when you're jumping state.setInput(Input.CLICK_LEFT, true); blockIsThere = false; - } else if (ctx.player().isSneaking() && (Objects.equals(src.down(), ctx.objectMouseOver().getBlockPos()) || Objects.equals(src, ctx.objectMouseOver().getBlockPos())) && ctx.player().posY > dest.getY() + 0.1) { + } else if (ctx.player().isSneaking() && (ctx.isLookingAt(src.down()) || ctx.isLookingAt(src)) && ctx.player().posY > dest.getY() + 0.1) { state.setInput(Input.CLICK_RIGHT, true); } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 68c4b4cc3..b275c163b 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -31,9 +31,7 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import net.minecraft.block.*; -import net.minecraft.block.state.BlockState; import net.minecraft.fluid.WaterFluid; -import net.minecraft.init.Blocks; import net.minecraft.state.properties.SlabType; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -133,7 +131,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } // now that we've checked all possible directions to side place, we actually need to backplace - if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof BlockSlab && down.get(BlockSlab.TYPE) != SlabType.DOUBLE)) { + if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof SlabBlock && down.get(SlabBlock.TYPE) != SlabType.DOUBLE)) { return COST_INF; // can't sneak and backplace against soul sand or half slabs (regardless of whether it's top half or bottom half) =/ } if (down.getFluidState() instanceof WaterFluid) { @@ -181,7 +179,7 @@ public MovementState updateState(MovementState state) { // it's safe to do this since the two blocks we break (in a traverse) are right on top of each other and so will have the same yaw float yawToDest = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(ctx.world(), dest), ctx.playerRotations()).getYaw(); float pitchToBreak = state.getTarget().getRotation().get().getPitch(); - if ((pb0.isFullCube() || pb0.getBlock() instanceof BlockAir && (pb1.isFullCube() || pb1.getBlock() instanceof BlockAir))) { + if ((MovementHelper.isFullCube(pb0) || pb0.getBlock() instanceof AirBlock && (MovementHelper.isFullCube(pb1) || pb1.getBlock() instanceof AirBlock))) { // in the meantime, before we're right up against the block, we can break efficiently at this angle pitchToBreak = 26; } @@ -197,16 +195,16 @@ public MovementState updateState(MovementState state) { Block fd = BlockStateInterface.get(ctx, src.down()).getBlock(); boolean ladder = fd == Blocks.LADDER || fd == Blocks.VINE; - if (pb0.getBlock() instanceof BlockDoor || pb1.getBlock() instanceof BlockDoor) { - if ((pb0.getBlock() instanceof BlockDoor && !MovementHelper.isDoorPassable(ctx, src, dest) - || pb1.getBlock() instanceof BlockDoor && !MovementHelper.isDoorPassable(ctx, dest, src)) + if (pb0.getBlock() instanceof DoorBlock || pb1.getBlock() instanceof DoorBlock) { + if ((pb0.getBlock() instanceof DoorBlock && !MovementHelper.isDoorPassable(ctx, src, dest) + || pb1.getBlock() instanceof DoorBlock && !MovementHelper.isDoorPassable(ctx, dest, src)) && !(Blocks.IRON_DOOR.equals(pb0.getBlock()) || Blocks.IRON_DOOR.equals(pb1.getBlock()))) { return state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(ctx.world(), positionsToBreak[0]), ctx.playerRotations()), true)) .setInput(Input.CLICK_RIGHT, true); } } - if (pb0.getBlock() instanceof BlockFenceGate || pb1.getBlock() instanceof BlockFenceGate) { + if (pb0.getBlock() instanceof FenceGateBlock || pb1.getBlock() instanceof FenceGateBlock) { BlockPos blocked = !MovementHelper.isGatePassable(ctx, positionsToBreak[0], src.up()) ? positionsToBreak[0] : !MovementHelper.isGatePassable(ctx, positionsToBreak[1], src) ? positionsToBreak[1] : null; @@ -250,14 +248,14 @@ public MovementState updateState(MovementState state) { BlockState destDown = BlockStateInterface.get(ctx, dest.down()); BlockPos against = positionsToBreak[0]; if (feet.getY() != dest.getY() && ladder && (destDown.getBlock() == Blocks.VINE || destDown.getBlock() == Blocks.LADDER)) { - against = destDown.getBlock() == Blocks.VINE ? MovementPillar.getAgainst(new CalculationContext(baritone), dest.down()) : dest.offset(destDown.get(BlockLadder.FACING).getOpposite()); + against = destDown.getBlock() == Blocks.VINE ? MovementPillar.getAgainst(new CalculationContext(baritone), dest.down()) : dest.offset(destDown.get(LadderBlock.FACING).getOpposite()); } MovementHelper.moveTowards(ctx, state, against); return state; } else { wasTheBridgeBlockAlwaysThere = false; Block standingOn = BlockStateInterface.get(ctx, feet.down()).getBlock(); - if (standingOn.equals(Blocks.SOUL_SAND) || standingOn instanceof BlockSlab) { // see issue #118 + if (standingOn.equals(Blocks.SOUL_SAND) || standingOn instanceof SlabBlock) { // see issue #118 double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().posX), Math.abs(dest.getZ() + 0.5 - ctx.player().posZ)); if (dist < 0.85) { // 0.5 + 0.3 + epsilon MovementHelper.moveTowards(ctx, state, dest); diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 937c09db6..7710dcea3 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -32,7 +32,7 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.movements.*; import baritone.utils.BlockStateInterface; -import net.minecraft.init.Blocks; +import net.minecraft.block.Blocks; import net.minecraft.util.Tuple; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -353,7 +353,7 @@ public boolean snipsnapifpossible() { return false; } else { // we are either onGround or in liquid - if (ctx.player().motionY < -0.1) { + if (ctx.player().getMotion().y < -0.1) { // if we are strictly moving downwards (not stationary) // we could be falling through water, which could be unsafe to splice return false; // so don't diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java index 49e17a8c6..4bb8b9317 100644 --- a/src/main/java/baritone/process/BackfillProcess.java +++ b/src/main/java/baritone/process/BackfillProcess.java @@ -26,8 +26,8 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.path.PathExecutor; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.block.state.BlockState; -import net.minecraft.init.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.chunk.EmptyChunk; @@ -103,7 +103,7 @@ public List toFillIn() { .filter(pos -> ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) .filter(pos -> baritone.getBuilderProcess().placementPlausible(pos, Blocks.DIRT.getDefaultState())) .filter(pos -> !partOfCurrentMovement(pos)) - .sorted(Comparator.comparingDouble(ctx.player()::getDistanceSq).reversed()) + .sorted(Comparator.comparingDouble(ctx.playerFeet()::distanceSq).reversed()) .collect(Collectors.toList()); } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index a0f957663..368c9a509 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -36,17 +36,18 @@ import baritone.utils.schematic.AirSchematic; import baritone.utils.schematic.Schematic; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import net.minecraft.block.BlockAir; -import net.minecraft.block.BlockFlowingFluid; -import net.minecraft.block.state.BlockState; -import net.minecraft.init.Blocks; +import net.minecraft.block.AirBlock; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.FlowingFluidBlock; +import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItemUseContext; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; +import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompressedStreamTools; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Direction; +import net.minecraft.util.Hand; import net.minecraft.util.Tuple; import net.minecraft.util.math.*; import net.minecraft.util.math.shapes.VoxelShape; @@ -95,7 +96,7 @@ public void pause() { @Override public boolean build(String name, File schematic, Vec3i origin) { - NBTTagCompound tag; + CompoundNBT tag; try (FileInputStream fileIn = new FileInputStream(schematic)) { tag = CompressedStreamTools.readCompressed(fileIn); } catch (IOException e) { @@ -117,7 +118,7 @@ public void clearArea(BlockPos corner1, BlockPos corner2) { build("clear area", new AirSchematic(widthX, heightY, lengthZ), origin); } - private static ISchematic parse(NBTTagCompound schematic) { + private static ISchematic parse(CompoundNBT schematic) { return new Schematic(schematic); } @@ -134,7 +135,7 @@ public BlockState placeAt(int x, int y, int z) { return null; } BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ()); - if (state.getBlock() instanceof BlockAir) { + if (state.getBlock() instanceof AirBlock) { return null; } return state; @@ -157,7 +158,7 @@ private Optional> toBreakNearPlayer(BuilderCalcu continue; // irrelevant } BlockState curr = bcc.bsi.get0(x, y, z); - if (!(curr.getBlock() instanceof BlockAir) && !valid(curr, desired)) { + if (!(curr.getBlock() instanceof AirBlock) && !valid(curr, desired)) { BetterBlockPos pos = new BetterBlockPos(x, y, z); Optional rot = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); if (rot.isPresent()) { @@ -198,7 +199,7 @@ private Optional searchForPlacables(BuilderCalculationContext bcc, Li } BlockState curr = bcc.bsi.get0(x, y, z); if (MovementHelper.isReplacable(x, y, z, curr, bcc.bsi) && !valid(curr, desired)) { - if (dy == 1 && bcc.bsi.get0(x, y + 1, z).getBlock() instanceof BlockAir) { + if (dy == 1 && bcc.bsi.get0(x, y + 1, z).getBlock() instanceof AirBlock) { continue; } desirableOnHotbar.add(desired); @@ -238,7 +239,7 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in double placeZ = placeAgainstPos.z + aabb.minZ * placementMultiplier.z + aabb.maxZ * (1 - placementMultiplier.z); Rotation rot = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(placeX, placeY, placeZ), ctx.playerRotations()); RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot, ctx.playerController().getBlockReachDistance()); - if (result != null && result.getType() == RayTraceResult.Type.BLOCK && result.getBlockPos().equals(placeAgainstPos) && result.sideHit == against.getOpposite()) { + if (result != null && result.getType() == RayTraceResult.Type.BLOCK && ((BlockRayTraceResult) result).getPos().equals(placeAgainstPos) && ((BlockRayTraceResult) result).getFace() == against.getOpposite()) { OptionalInt hotbar = hasAnyItemThatWouldPlace(toPlace, result, rot); if (hotbar.isPresent()) { return Optional.of(new Placement(hotbar.getAsInt(), placeAgainstPos, against.getOpposite(), rot)); @@ -252,7 +253,7 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, RayTraceResult result, Rotation rot) { for (int i = 0; i < 9; i++) { ItemStack stack = ctx.player().inventory.mainInventory.get(i); - if (stack.isEmpty() || !(stack.getItem() instanceof ItemBlock)) { + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { continue; } float originalYaw = ctx.player().rotationYaw; @@ -261,15 +262,13 @@ private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, RayTraceResult ctx.player().rotationYaw = rot.getYaw(); ctx.player().rotationPitch = rot.getPitch(); BlockItemUseContext meme = new BlockItemUseContext(new ItemUseContext( + ctx.world(), ctx.player(), + Hand.MAIN_HAND, stack, - result.getBlockPos().offset(result.sideHit), - result.sideHit, - (float) result.hitVec.x - result.getBlockPos().getX(), - (float) result.hitVec.y - result.getBlockPos().getY(), - (float) result.hitVec.z - result.getBlockPos().getZ() - )); - BlockState wouldBePlaced = ((ItemBlock) stack.getItem()).getBlock().getStateForPlacement(meme); + (BlockRayTraceResult) result + ) {}); // that {} gives us access to a protected constructor lmfao + BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); ctx.player().rotationYaw = originalYaw; ctx.player().rotationPitch = originalPitch; if (wouldBePlaced == null) { @@ -404,7 +403,7 @@ public int lengthZ() { baritone.getLookBehavior().updateTarget(rot, true); ctx.player().inventory.currentItem = toPlace.get().hotbarSelection; baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); - if ((ctx.isLookingAt(toPlace.get().placeAgainst) && ctx.objectMouseOver().sideHit.equals(toPlace.get().side)) || ctx.playerRotations().isReallyCloseTo(rot)) { + if ((ctx.isLookingAt(toPlace.get().placeAgainst) && ((BlockRayTraceResult) ctx.objectMouseOver()).getFace().equals(toPlace.get().side)) || ctx.playerRotations().isReallyCloseTo(rot)) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); } return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); @@ -466,7 +465,7 @@ private boolean recalc(BuilderCalculationContext bcc) { private void trim() { HashSet copy = new HashSet<>(incorrectPositions); - copy.removeIf(pos -> pos.distanceSq(ctx.player().posX, ctx.player().posY, ctx.player().posZ) > 200); + copy.removeIf(pos -> pos.distanceSq(new BlockPos(ctx.player())) > 200); if (!copy.isEmpty()) { incorrectPositions = copy; } @@ -535,12 +534,12 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac List sourceLiquids = new ArrayList<>(); incorrectPositions.forEach(pos -> { BlockState state = bcc.bsi.get0(pos); - if (state.getBlock() instanceof BlockAir) { + if (state.getBlock() instanceof AirBlock) { if (approxPlacable.contains(bcc.getSchematic(pos.x, pos.y, pos.z))) { placable.add(pos); } } else { - if (state.getBlock() instanceof BlockFlowingFluid) { + if (state.getBlock() instanceof FlowingFluidBlock) { // if the block itself is JUST a liquid (i.e. not just a waterlogged block), we CANNOT break it // TODO for 1.13 make sure that this only matches pure water, not waterlogged blocks if (!MovementHelper.possiblyFlowing(state)) { @@ -615,10 +614,10 @@ public boolean isInGoal(int x, int y, int z) { } private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (!(ctx.world().getBlockState(pos).getBlock() instanceof BlockAir)) { // TODO can this even happen? + if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? return new GoalPlace(pos); } - boolean allowSameLevel = !(ctx.world().getBlockState(pos.up()).getBlock() instanceof BlockAir); + boolean allowSameLevel = !(ctx.world().getBlockState(pos.up()).getBlock() instanceof AirBlock); for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { if (MovementHelper.canPlaceAgainst(ctx, pos.offset(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ()))) { return new GoalAdjacent(pos, allowSameLevel); @@ -628,7 +627,7 @@ private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { } private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.up()).getBlock() instanceof BlockAir && bcc.bsi.get0(pos.up(2)).getBlock() instanceof BlockAir) { // TODO maybe possible without the up(2) check? + if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.up()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.up(2)).getBlock() instanceof AirBlock) { // TODO maybe possible without the up(2) check? return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.up()) { @Override public boolean isInGoal(int x, int y, int z) { @@ -700,12 +699,12 @@ private List placable(int size) { List result = new ArrayList<>(); for (int i = 0; i < size; i++) { ItemStack stack = ctx.player().inventory.mainInventory.get(i); - if (stack.isEmpty() || !(stack.getItem() instanceof ItemBlock)) { + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { result.add(Blocks.AIR.getDefaultState()); continue; } // - result.add(((ItemBlock) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.player(), stack, ctx.playerFeet(), Direction.UP, (float) ctx.player().posX, (float) ctx.player().posY, (float) ctx.player().posZ)))); + result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vec3d(ctx.player().posX, ctx.player().posY, ctx.player().posZ), Direction.UP, ctx.playerFeet(), false)) {}))); // } return result; @@ -715,7 +714,7 @@ private boolean valid(BlockState current, BlockState desired) { if (desired == null) { return true; } - if (current.getBlock() instanceof BlockAir && desired.getBlock() instanceof BlockAir) { + if (current.getBlock() instanceof AirBlock && desired.getBlock() instanceof AirBlock) { return true; } // TODO more complicated comparison logic I guess @@ -757,7 +756,7 @@ public double costOfPlacingAt(int x, int y, int z) { BlockState sch = getSchematic(x, y, z); if (sch != null) { // TODO this can return true even when allowPlace is off.... is that an issue? - if (sch.getBlock() instanceof BlockAir) { + if (sch.getBlock() instanceof AirBlock) { // we want this to be air, but they're asking if they can place here // this won't be a schematic block, this will be a throwaway return placeBlockCost * 2; // we're going to have to break it eventually @@ -790,7 +789,7 @@ public double breakCostMultiplierAt(int x, int y, int z) { } BlockState sch = getSchematic(x, y, z); if (sch != null) { - if (sch.getBlock() instanceof BlockAir) { + if (sch.getBlock() instanceof AirBlock) { // it should be air // regardless of current contents, we can break it return 1; diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 3e9b47493..d7bce3ae9 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -31,13 +31,11 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import net.minecraft.block.*; -import net.minecraft.block.state.BlockState; import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; +import net.minecraft.entity.item.ItemEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; @@ -94,29 +92,29 @@ public void farm() { } private enum Harvest { - WHEAT((BlockCrops) Blocks.WHEAT), - CARROTS((BlockCrops) Blocks.CARROTS), - POTATOES((BlockCrops) Blocks.POTATOES), - BEETROOT((BlockCrops) Blocks.BEETROOTS), + WHEAT((CropsBlock) Blocks.WHEAT), + CARROTS((CropsBlock) Blocks.CARROTS), + POTATOES((CropsBlock) Blocks.POTATOES), + BEETROOT((CropsBlock) Blocks.BEETROOTS), PUMPKIN(Blocks.PUMPKIN, state -> true), MELON(Blocks.MELON, state -> true), - NETHERWART(Blocks.NETHER_WART, state -> state.get(BlockNetherWart.AGE) >= 3), + NETHERWART(Blocks.NETHER_WART, state -> state.get(NetherWartBlock.AGE) >= 3), SUGARCANE(Blocks.SUGAR_CANE, null) { @Override public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { - return world.getBlockState(pos.down()).getBlock() instanceof BlockReed; + return world.getBlockState(pos.down()).getBlock() instanceof SugarCaneBlock; } }, CACTUS(Blocks.CACTUS, null) { @Override public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { - return world.getBlockState(pos.down()).getBlock() instanceof BlockCactus; + return world.getBlockState(pos.down()).getBlock() instanceof CactusBlock; } }; public final Block block; public final Predicate readyToHarvest; - Harvest(BlockCrops blockCrops) { + Harvest(CropsBlock blockCrops) { this(blockCrops, blockCrops::isMaxAge); // max age is 7 for wheat, carrots, and potatoes, but 3 for beetroot } @@ -171,7 +169,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { List openSoulsand = new ArrayList<>(); for (BlockPos pos : locations) { BlockState state = ctx.world().getBlockState(pos); - boolean airAbove = ctx.world().getBlockState(pos.up()).getBlock() instanceof BlockAir; + boolean airAbove = ctx.world().getBlockState(pos.up()).getBlock() instanceof AirBlock; if (state.getBlock() == Blocks.FARMLAND) { if (airAbove) { openFarmland.add(pos); @@ -258,8 +256,8 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } } for (Entity entity : ctx.world().loadedEntityList) { - if (entity instanceof EntityItem && entity.onGround) { - EntityItem ei = (EntityItem) entity; + if (entity instanceof ItemEntity && entity.onGround) { + ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol goalz.add(new GoalBlock(new BlockPos(entity.posX, entity.posY + 0.1, entity.posZ))); diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 4fcb13624..072943bd8 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -82,7 +82,7 @@ private boolean followable(Entity entity) { } private void scanWorld() { - cache = Stream.of(ctx.world().loadedEntityList, ctx.world().playerEntities).flatMap(List::stream).filter(this::followable).filter(this.filter).distinct().collect(Collectors.toCollection(ArrayList::new)); + cache = Stream.of(ctx.world().loadedEntityList, ctx.world().getPlayers()).flatMap(List::stream).filter(this::followable).filter(this.filter).distinct().collect(Collectors.toCollection(ArrayList::new)); } @Override diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 4c43cd6f2..ae4190e12 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -26,10 +26,11 @@ import baritone.api.utils.RotationUtils; import baritone.api.utils.input.Input; import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.ContainerPlayer; +import net.minecraft.block.Blocks; +import net.minecraft.inventory.container.PlayerContainer; import net.minecraft.util.math.BlockPos; import java.util.*; @@ -121,7 +122,7 @@ public boolean isInGoal(int x, int y, int z) { // blacklist the closest block and its adjacent blocks public synchronized boolean blacklistClosest() { List newBlacklist = new ArrayList<>(); - knownLocations.stream().min(Comparator.comparingDouble(ctx.player()::getDistanceSq)).ifPresent(newBlacklist::add); + knownLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)).ifPresent(newBlacklist::add); outer: while (true) { for (BlockPos known : knownLocations) { @@ -180,7 +181,7 @@ private Goal createGoal(BlockPos pos) { if (walkIntoInsteadOfAdjacent(gettingTo)) { return new GoalTwoBlocks(pos); } - if (blockOnTopMustBeRemoved(gettingTo) && baritone.bsi.get0(pos.up()).isBlockNormalCube()) { + if (blockOnTopMustBeRemoved(gettingTo) && MovementHelper.isBlockNormalCube(baritone.bsi.get0(pos.up()))) { // TODO this should be the check for chest openability return new GoalBlock(pos.up()); } return new GoalGetToBlock(pos); @@ -194,7 +195,7 @@ private boolean rightClick() { if (knownLocations.contains(ctx.getSelectedBlock().orElse(null))) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); // TODO find some way to right click even if we're in an ESC menu System.out.println(ctx.player().openContainer); - if (!(ctx.player().openContainer instanceof ContainerPlayer)) { + if (!(ctx.player().openContainer instanceof PlayerContainer)) { return true; } } diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index c3992e5e6..f1da9117e 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -33,13 +33,9 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; -import net.minecraft.block.Block; -import net.minecraft.block.BlockAir; -import net.minecraft.block.BlockFalling; -import net.minecraft.block.state.BlockState; +import net.minecraft.block.*; import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.init.Blocks; +import net.minecraft.entity.item.ItemEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; @@ -91,7 +87,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (calcFailed) { if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { logDirect("Unable to find any path to " + mining + ", blacklisting presumably unreachable closest instance..."); - knownOreLocations.stream().min(Comparator.comparingDouble(ctx.player()::getDistanceSq)).ifPresent(blacklist::add); + knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)).ifPresent(blacklist::add); knownOreLocations.removeIf(blacklist::contains); } else { logDirect("Unable to find any path to " + mining + ", canceling Mine"); @@ -111,8 +107,8 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { Optional shaft = curr.stream() .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) - .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof BlockAir)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( - .min(Comparator.comparingDouble(ctx.player()::getDistanceSq)); + .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( + .min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)); baritone.getInputOverrideHandler().clearAllKeys(); if (shaft.isPresent()) { BlockPos pos = shaft.get(); @@ -211,14 +207,14 @@ private boolean internalMiningGoal(BlockPos pos, IPlayerContext ctx, List locs) { - boolean assumeVerticalShaftMine = !(baritone.bsi.get0(loc.up()).getBlock() instanceof BlockFalling); + boolean assumeVerticalShaftMine = !(baritone.bsi.get0(loc.up()).getBlock() instanceof FallingBlock); if (!Baritone.settings().forceInternalMining.value) { if (assumeVerticalShaftMine) { // we can get directly below the block @@ -292,8 +288,8 @@ public static List droppedItemsScan(List mining, World world) { } List ret = new ArrayList<>(); for (Entity entity : world.loadedEntityList) { - if (entity instanceof EntityItem) { - EntityItem ei = (EntityItem) entity; + if (entity instanceof ItemEntity) { + ItemEntity ei = (ItemEntity) entity; if (searchingFor.contains(ei.getItem().getItem())) { ret.add(new BlockPos(entity)); } @@ -369,7 +365,7 @@ private static List prune(CalculationContext ctx, List locs2 .filter(pos -> !blacklist.contains(pos)) - .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player()::getDistanceSq)) + .sorted(Comparator.comparingDouble(new BlockPos(ctx.getBaritone().getPlayerContext().player())::distanceSq)) .collect(Collectors.toList()); if (locs.size() > max) { diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index 6827f29eb..bb4e7ede2 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -26,10 +26,13 @@ import baritone.api.utils.IPlayerContext; import net.minecraft.client.GameSettings; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.gui.screen.MainMenuScreen; +import net.minecraft.client.settings.AmbientOcclusionStatus; +import net.minecraft.client.settings.CloudOption; +import net.minecraft.client.settings.ParticleStatus; import net.minecraft.client.tutorial.TutorialSteps; import net.minecraft.server.integrated.IntegratedServer; -import net.minecraft.util.HttpUtil; +import net.minecraft.util.HTTPUtil; import net.minecraft.util.math.BlockPos; import net.minecraft.world.GameType; import net.minecraft.world.WorldSettings; @@ -71,14 +74,14 @@ public void onPreInit() { GameSettings s = mc.gameSettings; s.limitFramerate = 20; s.mipmapLevels = 0; - s.particleSetting = 2; + s.field_74362_aa = ParticleStatus.MINIMAL; s.overrideWidth = 128; s.overrideHeight = 128; s.heldItemTooltips = false; s.entityShadows = false; s.chatScale = 0.0F; - s.ambientOcclusion = 0; - s.clouds = 0; + s.ambientOcclusionStatus = AmbientOcclusionStatus.OFF; + s.field_74345_l = CloudOption.OFF; s.fancyGraphics = false; s.tutorialStep = TutorialSteps.NONE; s.hideGUI = true; @@ -89,9 +92,9 @@ public void onPreInit() { public void onTick(TickEvent event) { IPlayerContext ctx = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext(); // If we're on the main menu then create the test world and launch the integrated server - if (mc.currentScreen instanceof GuiMainMenu) { + if (mc.field_71462_r instanceof MainMenuScreen) { System.out.println("Beginning Baritone automatic test routine"); - mc.displayScreen(null); + mc.displayGuiScreen(null); WorldSettings worldsettings = new WorldSettings(TEST_SEED, GameType.getByName("survival"), true, false, WorldType.DEFAULT); mc.launchIntegratedServer("BaritoneAutoTest", "BaritoneAutoTest", worldsettings); } @@ -110,7 +113,7 @@ public void onTick(TickEvent event) { // Force the integrated server to share the world to LAN so that // the ingame pause menu gui doesn't actually pause our game if (mc.isSingleplayer() && !mc.getIntegratedServer().getPublic()) { - mc.getIntegratedServer().shareToLAN(GameType.getByName("survival"), false, HttpUtil.getSuitableLanPort()); + mc.getIntegratedServer().shareToLAN(GameType.getByName("survival"), false, HTTPUtil.getSuitableLanPort()); } // For the first 200 ticks, wait for the world to generate diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index 449693976..2b734f73f 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -20,8 +20,9 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; import net.minecraft.util.Direction; -import net.minecraft.util.EnumHand; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceResult; /** @@ -40,7 +41,7 @@ public BlockBreakHelper(IPlayerContext playerContext) { public void tryBreakBlock(BlockPos pos, Direction side) { if (playerContext.playerController().onPlayerDamageBlock(pos, side)) { - playerContext.player().swingArm(EnumHand.MAIN_HAND); + playerContext.player().swingArm(Hand.MAIN_HAND); } } @@ -57,7 +58,7 @@ public void tick(boolean isLeftClick) { boolean isBlockTrace = trace != null && trace.getType() == RayTraceResult.Type.BLOCK; if (isLeftClick && isBlockTrace) { - tryBreakBlock(trace.getBlockPos(), trace.sideHit); + tryBreakBlock(((BlockRayTraceResult) trace).getPos(), ((BlockRayTraceResult) trace).getFace()); didBreakLastTick = true; } else if (didBreakLastTick) { stopBreakingBlock(); diff --git a/src/main/java/baritone/utils/BlockPlaceHelper.java b/src/main/java/baritone/utils/BlockPlaceHelper.java index a2f7e7572..875cd14c8 100644 --- a/src/main/java/baritone/utils/BlockPlaceHelper.java +++ b/src/main/java/baritone/utils/BlockPlaceHelper.java @@ -20,8 +20,9 @@ import baritone.Baritone; import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceResult; public class BlockPlaceHelper implements Helper { @@ -38,16 +39,16 @@ public void tick(boolean rightClickRequested) { return; } RayTraceResult mouseOver = ctx.objectMouseOver(); - if (!rightClickRequested || ctx.player().isRowingBoat() || mouseOver == null || mouseOver.getBlockPos() == null || mouseOver.getType() != RayTraceResult.Type.BLOCK) { + if (!rightClickRequested || ctx.player().isRowingBoat() || mouseOver == null || mouseOver.getType() != RayTraceResult.Type.BLOCK) { return; } rightClickTimer = Baritone.settings().rightClickSpeed.value; - for (EnumHand hand : EnumHand.values()) { - if (ctx.playerController().processRightClickBlock(ctx.player(), ctx.world(), mouseOver.getBlockPos(), mouseOver.sideHit, mouseOver.hitVec, hand) == EnumActionResult.SUCCESS) { + for (Hand hand : Hand.values()) { + if (ctx.playerController().processRightClickBlock(ctx.player(), ctx.world(), hand, (BlockRayTraceResult) mouseOver) == ActionResultType.SUCCESS) { ctx.player().swingArm(hand); return; } - if (!ctx.player().getHeldItem(hand).isEmpty() && ctx.playerController().processRightClick(ctx.player(), ctx.world(), hand) == EnumActionResult.SUCCESS) { + if (!ctx.player().getHeldItem(hand).isEmpty() && ctx.playerController().processRightClick(ctx.player(), ctx.world(), hand) == ActionResultType.SUCCESS) { return; } } diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 1efca7e05..fce7e5149 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -25,13 +25,14 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import net.minecraft.block.Block; -import net.minecraft.block.state.BlockState; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkSection; /** * Wraps get for chuck caching capability @@ -67,7 +68,7 @@ public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedC this.loadedChunks = worldLoaded; // this will only be used on the main thread } this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.value; - if (!Minecraft.getInstance().isCallingFromMinecraftThread()) { + if (!Minecraft.getInstance().isOnExecutionThread()) { throw new IllegalStateException(); } } @@ -105,14 +106,14 @@ public BlockState get0(int x, int y, int z) { // Mickey resigned // we can just skip the mc.world.getChunk lookup // which is a Long2ObjectOpenHashMap.get // see issue #113 - if (cached != null && cached.x == x >> 4 && cached.z == z >> 4) { - return cached.getBlockState(x, y, z); + if (cached != null && cached.getPos().x == x >> 4 && cached.getPos().z == z >> 4) { + return getFromChunk(cached, x, y, z); } Chunk chunk = loadedChunks.get(ChunkPos.asLong(x >> 4, z >> 4)); - if (chunk != null && chunk.isLoaded()) { + if (chunk != null && !chunk.isEmpty()) { prev = chunk; - return chunk.getBlockState(x, y, z); + return getFromChunk(chunk, x, y, z); } } // same idea here, skip the Long2ObjectOpenHashMap.get if at all possible @@ -138,11 +139,11 @@ public BlockState get0(int x, int y, int z) { // Mickey resigned public boolean isLoaded(int x, int z) { Chunk prevChunk = prev; - if (prevChunk != null && prevChunk.x == x >> 4 && prevChunk.z == z >> 4) { + if (prevChunk != null && prevChunk.getPos().x == x >> 4 && prevChunk.getPos().z == z >> 4) { return true; } prevChunk = loadedChunks.get(ChunkPos.asLong(x >> 4, z >> 4)); - if (prevChunk != null && prevChunk.isLoaded()) { + if (prevChunk != null && !prevChunk.isEmpty()) { prev = prevChunk; return true; } @@ -160,4 +161,13 @@ public boolean isLoaded(int x, int z) { prevCached = prevRegion; return prevRegion.isCached(x & 511, z & 511); } + + // get the block at x,y,z from this chunk WITHOUT creating a single blockpos object + public static BlockState getFromChunk(Chunk chunk, int x, int y, int z) { + ChunkSection section = chunk.getSections()[y >> 4]; + if (ChunkSection.isEmpty(section)) { + return AIR; + } + return section.get(x & 15, y & 15, z & 15); + } } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 7881e604e..4429a8e7b 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -22,10 +22,13 @@ import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalTwoBlocks; import baritone.api.utils.BetterBlockPos; -import net.minecraft.client.gui.Screen; -import net.minecraft.client.renderer.GlStateManager; +import baritone.api.utils.Helper; +import com.mojang.blaze3d.platform.GlStateManager; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.entity.Entity; import net.minecraft.util.math.*; +import net.minecraft.util.text.StringTextComponent; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; @@ -36,7 +39,7 @@ import static org.lwjgl.opengl.GL11.*; -public class GuiClick extends Screen { +public class GuiClick extends Screen implements Helper { // My name is Brady and I grant leijurv permission to use this pasted code private final FloatBuffer MODELVIEW = BufferUtils.createFloatBuffer(16); @@ -47,8 +50,12 @@ public class GuiClick extends Screen { private BlockPos clickStart; private BlockPos currentMouseOver; + public GuiClick() { + super(new StringTextComponent("CLICK")); + } + @Override - public boolean doesGuiPauseGame() { + public boolean isPauseScreen() { return false; } @@ -62,10 +69,12 @@ public void render(int mouseX, int mouseY, float partialTicks) { Vec3d near = toWorld(mx, my, 0); Vec3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv if (near != null && far != null) { - Vec3d viewerPos = new Vec3d(mc.getRenderManager().viewerPosX, mc.getRenderManager().viewerPosY, mc.getRenderManager().viewerPosZ); - RayTraceResult result = mc.world.rayTraceBlocks(near.add(viewerPos), far.add(viewerPos), RayTraceFluidMode.NEVER, false, true); + /// + Vec3d viewerPos = new Vec3d(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); + ClientPlayerEntity player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); + RayTraceResult result = player.world.func_217299_a(new RayTraceContext(near.add(viewerPos), far.add(viewerPos), RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, player)); if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { - currentMouseOver = result.getBlockPos(); + currentMouseOver = ((BlockRayTraceResult) result).getPos(); } } @@ -94,8 +103,8 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { } public void onRender() { - GlStateManager.getFloatv(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); - GlStateManager.getFloatv(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); + GlStateManager.getMatrix(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); + GlStateManager.getMatrix(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); GL11.glGetIntegerv(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); if (currentMouseOver != null) { @@ -107,7 +116,7 @@ public void onRender() { GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); GlStateManager.color4f(Color.RED.getColorComponents(null)[0], Color.RED.getColorComponents(null)[1], Color.RED.getColorComponents(null)[2], 0.4F); GlStateManager.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); - GlStateManager.disableTexture2D(); + GlStateManager.disableTexture(); GlStateManager.depthMask(false); GlStateManager.disableDepthTest(); BetterBlockPos a = new BetterBlockPos(currentMouseOver); @@ -116,7 +125,7 @@ public void onRender() { GlStateManager.enableDepthTest(); GlStateManager.depthMask(true); - GlStateManager.enableTexture2D(); + GlStateManager.enableTexture(); GlStateManager.disableBlend(); } } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 86797548c..40b09ea97 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -27,11 +27,11 @@ import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import net.minecraft.block.state.BlockState; +import com.mojang.blaze3d.platform.GlStateManager; +import net.minecraft.block.BlockState; import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.tileentity.TileEntityBeaconRenderer; +import net.minecraft.client.renderer.tileentity.BeaconTileEntityRenderer; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; @@ -60,11 +60,23 @@ public final class PathRenderer implements Helper { private PathRenderer() {} + public static double posX() { + return mc.getRenderManager().viewerPosX; + } + + public static double posY() { + return mc.getRenderManager().viewerPosY; + } + + public static double posZ() { + return mc.getRenderManager().viewerPosZ; + } + public static void render(RenderEvent event, PathingBehavior behavior) { float partialTicks = event.getPartialTicks(); Goal goal = behavior.getGoal(); - if (mc.currentScreen instanceof GuiClick) { - ((GuiClick) mc.currentScreen).onRender(); + if (mc.field_71462_r instanceof GuiClick) { + ((GuiClick) mc.field_71462_r).onRender(); } int thisPlayerDimension = behavior.baritone.getPlayerContext().world().getDimension().getType().getId(); @@ -137,7 +149,7 @@ public static void drawPath(IPath path, int startIndex, Entity player, float par GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); GlStateManager.color4f(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F); GlStateManager.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); - GlStateManager.disableTexture2D(); + GlStateManager.disableTexture(); GlStateManager.depthMask(false); if (Baritone.settings().renderPathIgnoreDepth.value) { GlStateManager.disableDepthTest(); @@ -187,14 +199,14 @@ public static void drawPath(IPath path, int startIndex, Entity player, float par } //GlStateManager.color(0.0f, 0.0f, 0.0f, 0.4f); GlStateManager.depthMask(true); - GlStateManager.enableTexture2D(); + GlStateManager.enableTexture(); GlStateManager.disableBlend(); } public static void drawLine(double bp1x, double bp1y, double bp1z, double bp2x, double bp2y, double bp2z) { - double d0 = mc.getRenderManager().viewerPosX; - double d1 = mc.getRenderManager().viewerPosY; - double d2 = mc.getRenderManager().viewerPosZ; + double d0 = posX(); + double d1 = posY(); + double d2 = posZ(); BUFFER.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION); BUFFER.pos(bp1x + 0.5D - d0, bp1y + 0.5D - d1, bp1z + 0.5D - d2).endVertex(); BUFFER.pos(bp2x + 0.5D - d0, bp2y + 0.5D - d1, bp2z + 0.5D - d2).endVertex(); @@ -208,7 +220,7 @@ public static void drawManySelectionBoxes(Entity player, Collection po GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); GlStateManager.color4f(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F); GlStateManager.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); - GlStateManager.disableTexture2D(); + GlStateManager.disableTexture(); GlStateManager.depthMask(false); if (Baritone.settings().renderSelectionBoxesIgnoreDepth.value) { @@ -231,13 +243,13 @@ public static void drawManySelectionBoxes(Entity player, Collection po } GlStateManager.depthMask(true); - GlStateManager.enableTexture2D(); + GlStateManager.enableTexture(); GlStateManager.disableBlend(); } public static void drawAABB(AxisAlignedBB aabb) { float expand = 0.002F; - AxisAlignedBB toDraw = aabb.expand(expand, expand, expand).offset(-mc.getRenderManager().viewerPosX, -mc.getRenderManager().viewerPosY, -mc.getRenderManager().viewerPosZ); + AxisAlignedBB toDraw = aabb.expand(expand, expand, expand).offset(-posX(), -posY(), -posZ()); BUFFER.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION); BUFFER.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); BUFFER.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); @@ -265,9 +277,9 @@ public static void drawAABB(AxisAlignedBB aabb) { } public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTicks, Color color) { - double renderPosX = mc.getRenderManager().viewerPosX; - double renderPosY = mc.getRenderManager().viewerPosY; - double renderPosZ = mc.getRenderManager().viewerPosZ; + double renderPosX = posX(); + double renderPosY = posY(); + double renderPosZ = posZ(); double minX; double maxX; double minZ; @@ -307,7 +319,7 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic GlStateManager.disableDepthTest(); } - TileEntityBeaconRenderer.renderBeamSegment( + BeaconTileEntityRenderer.renderBeamSegment( goalPos.getX() - renderPosX, -renderPosY, goalPos.getZ() - renderPosZ, @@ -363,7 +375,7 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); GlStateManager.color4f(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.6F); GlStateManager.lineWidth(Baritone.settings().goalRenderLineWidthPixels.value); - GlStateManager.disableTexture2D(); + GlStateManager.disableTexture(); GlStateManager.depthMask(false); if (Baritone.settings().renderGoalIgnoreDepth.value) { GlStateManager.disableDepthTest(); @@ -387,7 +399,7 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic GlStateManager.enableDepthTest(); } GlStateManager.depthMask(true); - GlStateManager.enableTexture2D(); + GlStateManager.enableTexture(); GlStateManager.disableBlend(); } diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 9e7cde488..a3b8f5478 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -19,13 +19,13 @@ import baritone.Baritone; import net.minecraft.block.Block; -import net.minecraft.block.state.BlockState; -import net.minecraft.client.entity.ClientPlayerEntity; +import net.minecraft.block.BlockState; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.init.Enchantments; -import net.minecraft.init.MobEffects; +import net.minecraft.enchantment.Enchantments; import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemTool; +import net.minecraft.item.ToolItem; +import net.minecraft.potion.Effects; import java.util.HashMap; import java.util.Map; @@ -80,7 +80,7 @@ public double getStrVsBlock(BlockState state) { * @return Either 1 or -1 */ private int getMaterialCost(ItemStack itemStack) { - return itemStack.getItem() instanceof ItemTool ? 1 : -1; + return itemStack.getItem() instanceof ToolItem ? 1 : -1; } /** @@ -165,11 +165,11 @@ public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { */ private double potionAmplifier() { double speed = 1; - if (player.isPotionActive(MobEffects.HASTE)) { - speed *= 1 + (player.getActivePotionEffect(MobEffects.HASTE).getAmplifier() + 1) * 0.2; + if (player.isPotionActive(Effects.field_76422_e)) { + speed *= 1 + (player.getActivePotionEffect(Effects.field_76422_e).getAmplifier() + 1) * 0.2; } - if (player.isPotionActive(MobEffects.MINING_FATIGUE)) { - switch (player.getActivePotionEffect(MobEffects.MINING_FATIGUE).getAmplifier()) { + if (player.isPotionActive(Effects.field_76419_f)) { + switch (player.getActivePotionEffect(Effects.field_76419_f).getAmplifier()) { case 0: speed *= 0.3; break; diff --git a/src/main/java/baritone/utils/accessor/IChunkProviderServer.java b/src/main/java/baritone/utils/accessor/IChunkProviderServer.java index e527cb508..bf24fbfe5 100644 --- a/src/main/java/baritone/utils/accessor/IChunkProviderServer.java +++ b/src/main/java/baritone/utils/accessor/IChunkProviderServer.java @@ -17,7 +17,7 @@ package baritone.utils.accessor; -import net.minecraft.world.chunk.storage.IChunkLoader; +import net.minecraft.world.chunk.storage.ChunkLoader; /** * @author Brady @@ -25,5 +25,5 @@ */ public interface IChunkProviderServer { - IChunkLoader getChunkLoader(); + ChunkLoader getChunkLoader(); } diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index c4b12336e..2cee04c56 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -21,7 +21,7 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.IPlayerContext; import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; -import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.MobEntity; import net.minecraft.util.math.BlockPos; import java.util.ArrayList; @@ -69,7 +69,7 @@ public static List create(IPlayerContext ctx) { } if (mobCoeff != 1.0D) { ctx.world().loadedEntityList.stream() - .filter(entity -> entity instanceof EntityMob) + .filter(entity -> entity instanceof MobEntity) .forEach(entity -> res.add(new Avoidance(new BlockPos(entity), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); } return res; diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index 07a66c5c2..c1bfb3948 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -23,7 +23,7 @@ import baritone.api.utils.IPlayerContext; import baritone.api.utils.IPlayerController; import baritone.api.utils.RayTraceUtils; -import net.minecraft.client.entity.ClientPlayerEntity; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index f44d0c745..42904fef4 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -19,16 +19,16 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerController; -import net.minecraft.client.entity.ClientPlayerEntity; -import net.minecraft.client.multiplayer.ClientWorld; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.container.ClickType; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumActionResult; +import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; -import net.minecraft.util.EnumHand; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.GameType; import net.minecraft.world.World; @@ -44,37 +44,38 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { @Override public boolean onPlayerDamageBlock(BlockPos pos, Direction side) { - return mc.playerController.onPlayerDamageBlock(pos, side); + + return mc.field_71442_b.onPlayerDamageBlock(pos, side); } @Override public void resetBlockRemoving() { - mc.playerController.resetBlockRemoving(); + mc.field_71442_b.resetBlockRemoving(); } @Override public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, PlayerEntity player) { - return mc.playerController.windowClick(windowId, slotId, mouseButton, type, player); + return mc.field_71442_b.windowClick(windowId, slotId, mouseButton, type, player); } @Override public void setGameType(GameType type) { - mc.playerController.setGameType(type); + mc.field_71442_b.setGameType(type); } @Override public GameType getGameType() { - return mc.playerController.getCurrentGameType(); + return mc.field_71442_b.getCurrentGameType(); } @Override - public EnumActionResult processRightClickBlock(ClientPlayerEntity player, World world, BlockPos pos, Direction direction, Vec3d vec, EnumHand hand) { + public ActionResultType processRightClickBlock(ClientPlayerEntity player, World world, Hand hand, BlockRayTraceResult result) { // primaryplayercontroller is always in a ClientWorld so this is ok - return mc.playerController.processRightClickBlock(player, (ClientWorld) world, pos, direction, vec, hand); + return mc.field_71442_b.func_217292_a(player, (ClientWorld) world, hand, result); } @Override - public EnumActionResult processRightClick(ClientPlayerEntity player, World world, EnumHand hand) { - return mc.playerController.processRightClick(player, world, hand); + public ActionResultType processRightClick(ClientPlayerEntity player, World world, Hand hand) { + return mc.field_71442_b.processRightClick(player, world, hand); } } diff --git a/src/main/java/baritone/utils/schematic/AirSchematic.java b/src/main/java/baritone/utils/schematic/AirSchematic.java index 5d58da564..c314abaf1 100644 --- a/src/main/java/baritone/utils/schematic/AirSchematic.java +++ b/src/main/java/baritone/utils/schematic/AirSchematic.java @@ -18,8 +18,8 @@ package baritone.utils.schematic; import baritone.api.utils.ISchematic; -import net.minecraft.block.state.BlockState; -import net.minecraft.init.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; public class AirSchematic implements ISchematic { diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index c9260b2b4..347215722 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -17,9 +17,9 @@ package baritone.utils.schematic; -import net.minecraft.block.BlockAir; -import net.minecraft.block.state.BlockState; -import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.block.AirBlock; +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; import java.util.OptionalInt; import java.util.function.Predicate; @@ -28,7 +28,7 @@ public class MapArtSchematic extends Schematic { private final int[][] heightMap; - public MapArtSchematic(NBTTagCompound schematic) { + public MapArtSchematic(CompoundNBT schematic) { super(schematic); heightMap = new int[widthX][lengthZ]; @@ -36,7 +36,7 @@ public MapArtSchematic(NBTTagCompound schematic) { for (int z = 0; z < lengthZ; z++) { BlockState[] column = states[x][z]; - OptionalInt lowestBlockY = lastIndexMatching(column, block -> !(block instanceof BlockAir)); + OptionalInt lowestBlockY = lastIndexMatching(column, state -> !(state.getBlock() instanceof AirBlock)); if (lowestBlockY.isPresent()) { heightMap[x][z] = lowestBlockY.getAsInt(); } else { diff --git a/src/main/java/baritone/utils/schematic/Schematic.java b/src/main/java/baritone/utils/schematic/Schematic.java index 16ce286a6..736e09415 100644 --- a/src/main/java/baritone/utils/schematic/Schematic.java +++ b/src/main/java/baritone/utils/schematic/Schematic.java @@ -18,8 +18,8 @@ package baritone.utils.schematic; import baritone.api.utils.ISchematic; -import net.minecraft.block.state.BlockState; -import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; public class Schematic implements ISchematic { public final int widthX; @@ -27,7 +27,7 @@ public class Schematic implements ISchematic { public final int lengthZ; protected final BlockState[][][] states; - public Schematic(NBTTagCompound schematic) { + public Schematic(CompoundNBT schematic) { /*String type = schematic.getString("Materials"); if (!type.equals("Alpha")) { throw new IllegalStateException("bad schematic " + type); From c7e1c917c34cf96e6c6ab18dbf9a01c51e5fb678 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 8 Jul 2019 19:21:09 -0500 Subject: [PATCH 053/935] Fix Baritone thinking it can walk through wall-placed skulls Fixes #485 --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index eff91e123..0f66ce23d 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -94,7 +94,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo if (block instanceof BlockAir) { // early return for most common case return true; } - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block == Blocks.BUBBLE_COLUMN || block instanceof BlockShulkerBox || block instanceof BlockSlab || block instanceof BlockTrapDoor) { + if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockAbstractSkull || block == Blocks.BUBBLE_COLUMN || block instanceof BlockShulkerBox || block instanceof BlockSlab || block instanceof BlockTrapDoor) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { From d70243b4c03719a842f4b1e46e121670175d090d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 11 Jul 2019 11:08:45 -0700 Subject: [PATCH 054/935] leijurv would never do this --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 702af3744..db5be4c23 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,7 @@ [![Pull Requests](https://img.shields.io/github/issues-pr/cabaletta/baritone.svg)](https://github.com/cabaletta/baritone/pulls/) ![Code size](https://img.shields.io/github/languages/code-size/cabaletta/baritone.svg) ![GitHub repo size](https://img.shields.io/github/repo-size/cabaletta/baritone.svg) -<<<<<<< HEAD -![](https://tokei.rs/b1/github/cabaletta/baritone?category=code) -[![Minecraft](https://img.shields.io/badge/MC-1.13.2-brightgreen.svg)](https://minecraft.gamepedia.com/1.13.2) -======= ![Lines of Code](https://tokei.rs/b1/github/cabaletta/baritone?category=code) ->>>>>>> master [![GitHub contributors](https://img.shields.io/github/contributors/cabaletta/baritone.svg)](https://github.com/cabaletta/baritone/graphs/contributors/) [![GitHub commits](https://img.shields.io/github/commits-since/cabaletta/baritone/v1.0.0.svg)](https://github.com/cabaletta/baritone/commit/) [![Impact integration](https://img.shields.io/badge/Impact%20integration-v1.2.6%20/%20v1.3.2-brightgreen.svg)](https://impactdevelopment.github.io/) From 1427cf57a816b25746bd1d4b5a157f1f5573b071 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 11 Jul 2019 11:56:44 -0700 Subject: [PATCH 055/935] randomlooking --- src/api/java/baritone/api/Settings.java | 5 +++++ src/main/java/baritone/behavior/LookBehavior.java | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 373fd08eb..36db4400c 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -231,6 +231,11 @@ public final class Settings { */ public final Setting rightClickSpeed = new Setting<>(4); + /** + * How many degrees to randomize the yaw every tick. Set to 0 to disable + */ + public final Setting randomLooking = new Setting<>(2d); + /** * This is the big A* setting. * As long as your cost heuristic is an *underestimate*, it's guaranteed to find you the best path. diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index d6833a58f..2a8a4935b 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -50,6 +50,13 @@ public LookBehavior(Baritone baritone) { @Override public void updateTarget(Rotation target, boolean force) { this.target = target; + if (!force) { + double rand = Math.random() - 0.5; + if (Math.abs(rand) < 0.1) { + rand *= 4; + } + this.target = new Rotation(this.target.getYaw() + (float) (rand * Baritone.settings().randomLooking.value), this.target.getPitch()); + } this.force = force || !Baritone.settings().freeLook.value; } From 1390af20b6c4f487e1e93521f0485235eda5a90a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 11 Jul 2019 12:46:24 -0700 Subject: [PATCH 056/935] fix parkour and multithread farm --- .../pathing/movement/movements/MovementParkour.java | 2 +- src/main/java/baritone/process/FarmProcess.java | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index ebfb589a8..b0854e6bb 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -227,7 +227,7 @@ public MovementState updateState(MovementState state) { state.setStatus(MovementStatus.SUCCESS); } } else if (!ctx.playerFeet().equals(src)) { - if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().posY - ctx.playerFeet().getY() > 0.0001) { + if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().posY - src.y > 0.0001) { if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().onGround && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true) == PlaceResult.READY_TO_PLACE) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory state.setInput(Input.CLICK_RIGHT, true); diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index a783cb495..c8dc2ef2d 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -52,6 +52,9 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro private boolean active; + private List locations; + private int tickCount; + private static final List FARMLAND_PLANTABLE = Arrays.asList( Items.BEETROOT_SEEDS, Items.MELON_SEEDS, @@ -91,6 +94,7 @@ public boolean isActive() { @Override public void farm() { active = true; + locations = null; } private enum Harvest { @@ -162,9 +166,12 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (Baritone.settings().replantNetherWart.value) { scan.add(Blocks.SOUL_SAND); } - - List locations = WorldScanner.INSTANCE.scanChunkRadius(ctx, scan, 256, 10, 4); - + if (Baritone.settings().mineGoalUpdateInterval.value != 0 && tickCount++ % Baritone.settings().mineGoalUpdateInterval.value == 0) { + Baritone.getExecutor().execute(() -> locations = WorldScanner.INSTANCE.scanChunkRadius(ctx, scan, 256, 10, 10)); + } + if (locations == null) { + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } List toBreak = new ArrayList<>(); List openFarmland = new ArrayList<>(); List bonemealable = new ArrayList<>(); From 1a4635df16acb15ccfe257bd0017d86e59b57180 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 11 Jul 2019 12:47:44 -0700 Subject: [PATCH 057/935] v1.3.3 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b5a96f160..c144f8d67 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.3.2' +version '1.3.3' buildscript { repositories { From ed4753e968b14ac18cc16ee01b41ff41aeda1ad7 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 19 Jul 2019 22:33:08 -0700 Subject: [PATCH 058/935] now that impact locks to specific baritone versions this hack can finally be removed yay --- src/api/java/baritone/api/utils/BlockUtils.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index fd376c9a8..f7d0d9f6b 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -39,9 +39,6 @@ public static String blockToString(Block block) { } public static Block stringToBlockRequired(String name) { - if (name.equals("lit_redstone_ore")) { // workaround for Impact 4.6 only - return stringToBlockRequired("redstone_ore"); - } Block block = stringToBlockNullable(name); Objects.requireNonNull(block); return block; From 9dd68568720d5f62d1526484ed443f932e5d547e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 21 Jul 2019 14:36:02 -0700 Subject: [PATCH 059/935] get called out --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 0f66ce23d..bc8d0c2eb 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -142,7 +142,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo // every block that overrides isPassable with anything more complicated than a "return true;" or "return false;" // has already been accounted for above // therefore it's safe to not construct a blockpos from our x, y, z ints and instead just pass null - return state.allowsMovement(null, null, PathType.LAND); + return state.allowsMovement(null, BlockPos.ORIGIN, PathType.LAND); // workaround for future compatibility =P } /** From 4c8907c62999d8c5654b3052a748943c432e5827 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 23 Jul 2019 14:12:44 -0700 Subject: [PATCH 060/935] it launches --- build.gradle | 6 +-- src/api/java/baritone/api/Settings.java | 2 +- .../java/baritone/api/utils/BlockUtils.java | 4 +- .../api/utils/ExampleBaritoneControl.java | 5 +-- .../baritone/api/utils/IPlayerContext.java | 12 ++++++ .../baritone/api/utils/RayTraceUtils.java | 2 +- .../java/baritone/api/utils/SettingsUtil.java | 4 +- .../mixins/MixinClientPlayNetHandler.java | 8 ++-- ...che.java => MixinEntityRenderManager.java} | 35 +++++++++------- .../launch/mixins/MixinMinecraft.java | 20 ++------- .../launch/mixins/MixinNetworkManager.java | 18 ++++---- .../mixins/MixinServerChunkProvider.java | 42 ------------------- src/launch/resources/mixins.baritone.json | 4 +- .../java/baritone/cache/WorldProvider.java | 8 +--- .../baritone/pathing/movement/Movement.java | 2 +- .../pathing/movement/MovementHelper.java | 8 +--- .../pathing/movement/MovementState.java | 2 + .../movement/movements/MovementTraverse.java | 2 +- .../java/baritone/process/FarmProcess.java | 2 +- .../java/baritone/process/FollowProcess.java | 6 +-- .../java/baritone/process/MineProcess.java | 21 ++++++---- .../java/baritone/utils/BaritoneAutoTest.java | 13 +++--- .../baritone/utils/BlockStateInterface.java | 2 +- src/main/java/baritone/utils/GuiClick.java | 2 +- .../java/baritone/utils/PathRenderer.java | 11 ++--- src/main/java/baritone/utils/ToolSet.java | 8 ++-- .../utils/accessor/IAnvilChunkLoader.java | 32 -------------- ...rServer.java => IEntityRenderManager.java} | 11 ++--- .../baritone/utils/pathing/Avoidance.java | 4 +- .../utils/player/PrimaryPlayerController.java | 15 ++++--- .../schematica/SchematicAdapter.java | 4 +- .../lunatrius/schematica/api/ISchematic.java | 4 +- 32 files changed, 121 insertions(+), 198 deletions(-) rename src/launch/java/baritone/launch/mixins/{MixinRegionFileCache.java => MixinEntityRenderManager.java} (60%) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinServerChunkProvider.java delete mode 100644 src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java rename src/main/java/baritone/utils/accessor/{IChunkProviderServer.java => IEntityRenderManager.java} (81%) diff --git a/build.gradle b/build.gradle index 85a61f347..aeb5412c4 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.3.3' +version '1.4.0' buildscript { repositories { @@ -82,7 +82,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20190608-1.14.2' + mappings channel: 'snapshot', version: '20190723-1.14.3' reobfMappings 'notch' runs { @@ -138,7 +138,7 @@ repositories { } dependencies { - minecraft 'com.github.ImpactDevelopment:Vanilla:1.14.2' + minecraft 'com.github.ImpactDevelopment:Vanilla:1.14.4' runtime launchCompile('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 5f6d91838..7fc227cb4 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -812,7 +812,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ - public final Setting> logger = new Setting<>(Minecraft.getInstance().field_71456_v.getChatGUI()::printChatMessage); + public final Setting> logger = new Setting<>(Minecraft.getInstance().ingameGUI.getChatGUI()::printChatMessage); /** * The size of the box that is rendered when the current goal is a GoalYLevel diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index 57ab3e4cc..d7f17a0b7 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -29,7 +29,7 @@ public class BlockUtils { private static transient Map resourceCache = new HashMap<>(); public static String blockToString(Block block) { - ResourceLocation loc = Registry.field_212618_g.getKey(block); + ResourceLocation loc = Registry.BLOCK.getKey(block); String name = loc.getPath(); // normally, only write the part after the minecraft: if (!loc.getNamespace().equals("minecraft")) { // Baritone is running on top of forge with mods installed, perhaps? @@ -53,7 +53,7 @@ public static Block stringToBlockNullable(String name) { if (resourceCache.containsKey(name)) { return null; // cached as null } - block = Registry.field_212618_g.getOrDefault(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)); + block = Registry.BLOCK.getOrDefault(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)); // TODO this again returns air instead of null! Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); diff --git a/src/api/java/baritone/api/utils/ExampleBaritoneControl.java b/src/api/java/baritone/api/utils/ExampleBaritoneControl.java index de1fa2174..269033e5e 100644 --- a/src/api/java/baritone/api/utils/ExampleBaritoneControl.java +++ b/src/api/java/baritone/api/utils/ExampleBaritoneControl.java @@ -35,7 +35,6 @@ import net.minecraft.client.multiplayer.ClientChunkProvider; import net.minecraft.crash.CrashReport; import net.minecraft.entity.Entity; -import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; @@ -419,7 +418,7 @@ public boolean isInGoal(int x, int y, int z) { logDirect("Following any players"); return true; } - if (msg.startsWith("followentity")) { + /*if (msg.startsWith("followentity")) { String name = msg.substring(12).trim(); Optional toFollow = Optional.empty(); for (Entity entity : ctx.world().loadedEntityList) { @@ -436,7 +435,7 @@ public boolean isInGoal(int x, int y, int z) { baritone.getFollowProcess().follow(effectivelyFinal::equals); logDirect("Following entity " + toFollow.get()); return true; - } + }*/ if (msg.startsWith("follow")) { String name = msg.substring(6).trim(); Optional toFollow = Optional.empty(); diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 2de4e3c50..b7e5efc24 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -20,11 +20,14 @@ import baritone.api.cache.IWorldData; import net.minecraft.block.SlabBlock; import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.util.math.*; import net.minecraft.world.World; import java.util.Optional; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; /** * @author Brady @@ -38,6 +41,15 @@ public interface IPlayerContext { World world(); + default Iterable entities() { + return ((ClientWorld) world()).getAllEntities(); + } + + default Stream entitiesStream() { + return StreamSupport.stream(entities().spliterator(), false); + } + + IWorldData worldData(); RayTraceResult objectMouseOver(); diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 989734e37..3875448b7 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -48,6 +48,6 @@ public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, d direction.y * blockReachDistance, direction.z * blockReachDistance ); - return entity.world.func_217299_a(new RayTraceContext(start, end, RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, entity)); + return entity.world.rayTraceBlocks(new RayTraceContext(start, end, RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, entity)); } } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 979934cbc..fe21260ef 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -194,8 +194,8 @@ private enum Parser implements ISettingParser { ), ITEM( Item.class, - str -> Registry.field_212630_s.getOrDefault(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? - item -> Registry.field_212630_s.getKey(item).toString() + str -> Registry.ITEM.getOrDefault(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? + item -> Registry.ITEM.getKey(item).toString() ), LIST() { @Override diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index 0562f24ae..1fa6b54d0 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -66,7 +66,7 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { ) private void postHandleChunkData(SChunkDataPacket packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player().field_71174_a == (ClientPlayNetHandler) (Object) this) { + if (ibaritone.getPlayerContext().player().connection == (ClientPlayNetHandler) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent( EventState.POST, @@ -85,7 +85,7 @@ private void postHandleChunkData(SChunkDataPacket packetIn, CallbackInfo ci) { ) private void preChunkUnload(SUnloadChunkPacket packet, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player().field_71174_a == (ClientPlayNetHandler) (Object) this) { + if (ibaritone.getPlayerContext().player().connection == (ClientPlayNetHandler) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent(EventState.PRE, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) ); @@ -99,7 +99,7 @@ private void preChunkUnload(SUnloadChunkPacket packet, CallbackInfo ci) { ) private void postChunkUnload(SUnloadChunkPacket packet, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player().field_71174_a == (ClientPlayNetHandler) (Object) this) { + if (ibaritone.getPlayerContext().player().connection == (ClientPlayNetHandler) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent(EventState.POST, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) ); @@ -116,7 +116,7 @@ private void postChunkUnload(SUnloadChunkPacket packet, CallbackInfo ci) { ) private void onPlayerDeath(SCombatPacket packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player().field_71174_a == (ClientPlayNetHandler) (Object) this) { + if (ibaritone.getPlayerContext().player().connection == (ClientPlayNetHandler) (Object) this) { ibaritone.getGameEventHandler().onPlayerDeath(); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinRegionFileCache.java b/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java similarity index 60% rename from src/launch/java/baritone/launch/mixins/MixinRegionFileCache.java rename to src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java index b9d8b2144..6d4058c98 100644 --- a/src/launch/java/baritone/launch/mixins/MixinRegionFileCache.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java @@ -17,27 +17,32 @@ package baritone.launch.mixins; -import baritone.utils.accessor.IAnvilChunkLoader; -import net.minecraft.world.chunk.storage.RegionFileCache; -import org.spongepowered.asm.mixin.Final; +import baritone.utils.accessor.IEntityRenderManager; +import net.minecraft.client.renderer.entity.EntityRendererManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import java.io.File; +@Mixin(EntityRendererManager.class) +public class MixinEntityRenderManager implements IEntityRenderManager { + @Shadow + private double renderPosX; + @Shadow + private double renderPosY; + @Shadow + private double renderPosZ; -/** - * @author Brady - * @since 9/4/2018 - */ -@Mixin(RegionFileCache.class) -public class MixinRegionFileCache implements IAnvilChunkLoader { + @Override + public double renderPosX() { + return renderPosX; + } - @Shadow - @Final - private File folder; + @Override + public double renderPosY() { + return renderPosY; + } @Override - public File getChunkSaveLocation() { - return this.folder; + public double renderPosZ() { + return renderPosZ; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 03951e68c..0c2861135 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -33,6 +33,7 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import org.spongepowered.asm.lib.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -78,7 +79,7 @@ private void preInit(CallbackInfo ci) { at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/Minecraft.field_71462_r:Lnet/minecraft/client/gui/screen/Screen;", + target = "net/minecraft/client/Minecraft.currentScreen:Lnet/minecraft/client/gui/screen/Screen;", ordinal = 5, shift = At.Shift.BY, by = -3 @@ -145,19 +146,6 @@ private boolean passEvents(Screen screen) { return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().getCurrent() != null && player != null) || screen.passEvents; } - @Inject( - method = "clickMouse", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/multiplayer/PlayerController.clickBlock(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/Direction;)Z" - ), - locals = LocalCapture.CAPTURE_FAILHARD - ) - private void onBlockBreak(CallbackInfo ci, BlockPos pos) { - // clickMouse is only for the main player - BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(pos, BlockInteractEvent.Type.START_BREAK)); - } - @Inject( method = "rightClickMouse", at = @At( @@ -166,8 +154,8 @@ private void onBlockBreak(CallbackInfo ci, BlockPos pos) { ), locals = LocalCapture.CAPTURE_FAILHARD ) - private void onBlockUse(CallbackInfo ci, Hand var1[], int var2, int var3, Hand enumhand, ItemStack itemstack, BlockPos blockpos, int i, ActionResultType enumactionresult) { + private void onBlockUse(CallbackInfo ci, Hand var1[], int var2, int var3, Hand enumhand, ItemStack itemstack, BlockRayTraceResult raytrace, int i, ActionResultType enumactionresult) { // rightClickMouse is only for the main player - BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(blockpos, BlockInteractEvent.Type.USE)); + BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(raytrace.getPos(), BlockInteractEvent.Type.USE)); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index f781e4c4f..dba5df7bd 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -47,19 +47,19 @@ public class MixinNetworkManager { @Shadow @Final - private PacketDirection field_179294_g; + private PacketDirection direction; @Inject( method = "dispatchPacket", at = @At("HEAD") ) private void preDispatchPacket(IPacket inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { - if (this.field_179294_g != PacketDirection.CLIENTBOUND) { + if (this.direction != PacketDirection.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().field_71174_a.getNetworkManager() == (NetworkManager) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, inPacket)); } } @@ -70,12 +70,12 @@ private void preDispatchPacket(IPacket inPacket, final GenericFutureListener< at = @At("RETURN") ) private void postDispatchPacket(IPacket inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { - if (this.field_179294_g != PacketDirection.CLIENTBOUND) { + if (this.direction != PacketDirection.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().field_71174_a.getNetworkManager() == (NetworkManager) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, inPacket)); } } @@ -89,11 +89,11 @@ private void postDispatchPacket(IPacket inPacket, final GenericFutureListener ) ) private void preProcessPacket(ChannelHandlerContext context, IPacket packet, CallbackInfo ci) { - if (this.field_179294_g != PacketDirection.CLIENTBOUND) { + if (this.direction != PacketDirection.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().field_71174_a.getNetworkManager() == (NetworkManager) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, packet)); } } @@ -104,11 +104,11 @@ private void preProcessPacket(ChannelHandlerContext context, IPacket packet, at = @At("RETURN") ) private void postProcessPacket(ChannelHandlerContext context, IPacket packet, CallbackInfo ci) { - if (!this.channel.isOpen() || this.field_179294_g != PacketDirection.CLIENTBOUND) { + if (!this.channel.isOpen() || this.direction != PacketDirection.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().field_71174_a.getNetworkManager() == (NetworkManager) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, packet)); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinServerChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinServerChunkProvider.java deleted file mode 100644 index 2ac467979..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinServerChunkProvider.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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.utils.accessor.IChunkProviderServer; -import net.minecraft.world.chunk.ServerChunkProvider; -import net.minecraft.world.chunk.storage.ChunkLoader; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -/** - * @author Brady - * @since 9/4/2018 - */ -@Mixin(ServerChunkProvider.class) -public class MixinServerChunkProvider implements IChunkProviderServer { - - @Shadow - @Final - private ChunkLoader chunkLoader; - - @Override - public ChunkLoader getChunkLoader() { - return this.chunkLoader; - } -} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index dfe9c58fa..171ff4561 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -15,8 +15,6 @@ "MixinGameRenderer", "MixinLivingEntity", "MixinMinecraft", - "MixinNetworkManager", - "MixinRegionFileCache", - "MixinServerChunkProvider" + "MixinNetworkManager" ] } \ No newline at end of file diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 54cfb41cb..91ce534cf 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -20,11 +20,9 @@ import baritone.Baritone; import baritone.api.cache.IWorldProvider; import baritone.api.utils.Helper; -import baritone.utils.accessor.IAnvilChunkLoader; -import baritone.utils.accessor.IChunkProviderServer; import net.minecraft.server.integrated.IntegratedServer; -import net.minecraft.world.ServerWorld; import net.minecraft.world.dimension.DimensionType; +import net.minecraft.world.server.ServerWorld; import org.apache.commons.lang3.SystemUtils; import java.io.File; @@ -65,9 +63,7 @@ public final void initWorld(DimensionType dimension) { // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file if (mc.isSingleplayer()) { ServerWorld localServerWorld = integratedServer.getWorld(dimension); - IChunkProviderServer provider = (IChunkProviderServer) localServerWorld.getChunkProvider(); - IAnvilChunkLoader loader = (IAnvilChunkLoader) provider.getChunkLoader(); - directory = loader.getChunkSaveLocation(); + directory = dimension.getDirectory(localServerWorld.getSaveHandler().getWorldDirectory()); // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world if (directory.toPath().relativize(mc.gameDir.toPath()).getNameCount() != 2) { diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 95d6ec393..3e1aa4470 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -122,7 +122,7 @@ protected boolean playerInValidPosition() { */ @Override public MovementStatus update() { - ctx.player().playerAbilities.isFlying = false; + ctx.player().abilities.isFlying = false; currentState = updateState(currentState); if (MovementHelper.isLiquid(ctx, ctx.playerFeet())) { currentState.setInput(Input.JUMP, true); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 98c502e2e..8ce984fb9 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -360,7 +360,7 @@ static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z, Blo // can we look at the center of a side face of this block and likely be able to place? // (thats how this check is used) // therefore dont include weird things that we technically could place against (like carpet) but practically can't - return isBlockNormalCube(state) || isFullCube(state) || state.getBlock() == Blocks.GLASS || state.getBlock() instanceof StainedGlassBlock; + return isBlockNormalCube(state) || state.getBlock() == Blocks.GLASS || state.getBlock() instanceof StainedGlassBlock; } static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, boolean includeFalling) { @@ -498,11 +498,7 @@ static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterf } static boolean isBlockNormalCube(BlockState state) { - return state.isBlockNormalCube(); - } - - static boolean isFullCube(BlockState state){ - return state.isFullCube(); + return state.isNormalCube(null, null); } static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, BlockPos placeAt, boolean preferDown) { diff --git a/src/main/java/baritone/pathing/movement/MovementState.java b/src/main/java/baritone/pathing/movement/MovementState.java index 73539698a..4cd2d7dfd 100644 --- a/src/main/java/baritone/pathing/movement/MovementState.java +++ b/src/main/java/baritone/pathing/movement/MovementState.java @@ -20,6 +20,8 @@ import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.Rotation; import baritone.api.utils.input.Input; +import net.minecraft.client.Minecraft; +import net.minecraft.util.registry.Registry; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index b25d95bd3..6d245e2af 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -188,7 +188,7 @@ public MovementState updateState(MovementState state) { // it's safe to do this since the two blocks we break (in a traverse) are right on top of each other and so will have the same yaw float yawToDest = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(ctx.world(), dest), ctx.playerRotations()).getYaw(); float pitchToBreak = state.getTarget().getRotation().get().getPitch(); - if ((MovementHelper.isFullCube(pb0) || pb0.getBlock() instanceof AirBlock && (MovementHelper.isFullCube(pb1) || pb1.getBlock() instanceof AirBlock))) { + if ((MovementHelper.isBlockNormalCube(pb0) || pb0.getBlock() instanceof AirBlock && (MovementHelper.isBlockNormalCube(pb1) || pb1.getBlock() instanceof AirBlock))) { // in the meantime, before we're right up against the block, we can break efficiently at this angle pitchToBreak = 26; } diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 60623357b..afa0258f0 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -268,7 +268,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { goalz.add(new GoalBlock(pos)); } } - for (Entity entity : ctx.world().loadedEntityList) { + for (Entity entity : ctx.entities()) { if (entity instanceof ItemEntity && entity.onGround) { ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 728858e9d..c77d81c6f 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -33,7 +33,6 @@ import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * Follow an entity @@ -78,12 +77,11 @@ private boolean followable(Entity entity) { if (entity.equals(ctx.player())) { return false; } - return ctx.world().loadedEntityList.contains(entity); + return ctx.entitiesStream().anyMatch(entity::equals); } private void scanWorld() { - cache = Stream.of(ctx.world().loadedEntityList, ctx.world().getPlayers()) - .flatMap(List::stream) + cache = ctx.entitiesStream() .filter(this::followable) .filter(this.filter) .distinct() diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 16b2f3f94..b7982ea76 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -34,12 +34,15 @@ import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import net.minecraft.block.*; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.entity.item.ItemEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootParameters; import java.util.*; import java.util.stream.Collectors; @@ -75,11 +78,11 @@ public boolean isActive() { @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (desiredQuantity > 0) { - Item item = mining.get(0).getItemDropped(mining.get(0).getDefaultState(), ctx.world(), null, 0).asItem(); - int curr = ctx.player().inventory.mainInventory.stream().filter(stack -> item.equals(stack.getItem())).mapToInt(ItemStack::getCount).sum(); + List item = drops(mining.get(0)); + int curr = ctx.player().inventory.mainInventory.stream().filter(stack -> item.contains(stack.getItem())).mapToInt(ItemStack::getCount).sum(); System.out.println("Currently have " + curr + " " + item); if (curr >= desiredQuantity) { - logDirect("Have " + curr + " " + item.getDisplayName(new ItemStack(item, 1))); + logDirect("Have " + curr); cancel(); return null; } @@ -280,19 +283,21 @@ public double heuristic(int x, int y, int z) { } } + public static List drops(Block block) { + return block.getDefaultState().getDrops(new LootContext.Builder(null).withRandom(new Random()).withParameter(LootParameters.POSITION, BlockPos.ZERO).withParameter(LootParameters.TOOL, ItemStack.EMPTY).withNullableParameter(LootParameters.BLOCK_ENTITY, null)).stream().map(ItemStack::getItem).collect(Collectors.toList()); + } + public static List droppedItemsScan(List mining, World world) { if (!Baritone.settings().mineScanDroppedItems.value) { return Collections.emptyList(); } Set searchingFor = new HashSet<>(); for (Block block : mining) { - Item drop = block.getItemDropped(block.getDefaultState(), world, null, 0).asItem(); - Item ore = block.asItem(); - searchingFor.add(drop); - searchingFor.add(ore); + searchingFor.addAll(drops(block)); + searchingFor.add(block.asItem()); } List ret = new ArrayList<>(); - for (Entity entity : world.loadedEntityList) { + for (Entity entity : ((ClientWorld) world).getAllEntities()) { if (entity instanceof ItemEntity) { ItemEntity ei = (ItemEntity) entity; if (searchingFor.contains(ei.getItem().getItem())) { diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index bb4e7ede2..9c2b80618 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -72,27 +72,27 @@ public void onPreInit() { System.out.println("Optimizing Game Settings"); GameSettings s = mc.gameSettings; - s.limitFramerate = 20; + s.framerateLimit = 20; s.mipmapLevels = 0; - s.field_74362_aa = ParticleStatus.MINIMAL; + s.particles = ParticleStatus.MINIMAL; s.overrideWidth = 128; s.overrideHeight = 128; s.heldItemTooltips = false; s.entityShadows = false; s.chatScale = 0.0F; s.ambientOcclusionStatus = AmbientOcclusionStatus.OFF; - s.field_74345_l = CloudOption.OFF; + s.cloudOption = CloudOption.OFF; s.fancyGraphics = false; s.tutorialStep = TutorialSteps.NONE; s.hideGUI = true; - s.fovSetting = 30.0F; + s.fov = 30.0F; } @Override public void onTick(TickEvent event) { IPlayerContext ctx = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext(); // If we're on the main menu then create the test world and launch the integrated server - if (mc.field_71462_r instanceof MainMenuScreen) { + if (mc.currentScreen instanceof MainMenuScreen) { System.out.println("Beginning Baritone automatic test routine"); mc.displayGuiScreen(null); WorldSettings worldsettings = new WorldSettings(TEST_SEED, GameType.getByName("survival"), true, false, WorldType.DEFAULT); @@ -105,7 +105,8 @@ public void onTick(TickEvent event) { // to our defined starting position if (server != null && server.getWorld(DimensionType.OVERWORLD) != null) { server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); - server.getWorld(DimensionType.OVERWORLD).getGameRules().setOrCreateGameRule("spawnRadius", "0", server); + throw new UnsupportedOperationException("TODO figure out how to set SPAWN_RADIUS"); + //server.getWorld(DimensionType.OVERWORLD).getGameRules().get(GameRules.SPAWN_RADIUS).func_223554_b(null, "0"); // TODO I HAVE NO IDEA } if (event.getType() == TickEvent.Type.IN) { // If we're in-game diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index fce7e5149..1273eb7b2 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -168,6 +168,6 @@ public static BlockState getFromChunk(Chunk chunk, int x, int y, int z) { if (ChunkSection.isEmpty(section)) { return AIR; } - return section.get(x & 15, y & 15, z & 15); + return section.getBlockState(x & 15, y & 15, z & 15); } } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 1a62c071d..6569e8e7d 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -72,7 +72,7 @@ public void render(int mouseX, int mouseY, float partialTicks) { /// Vec3d viewerPos = new Vec3d(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); ClientPlayerEntity player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); - RayTraceResult result = player.world.func_217299_a(new RayTraceContext(near.add(viewerPos), far.add(viewerPos), RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, player)); + RayTraceResult result = player.world.rayTraceBlocks(new RayTraceContext(near.add(viewerPos), far.add(viewerPos), RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, player)); if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { currentMouseOver = ((BlockRayTraceResult) result).getPos(); } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 0c88693d3..f320822a8 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -27,6 +27,7 @@ import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; +import baritone.utils.accessor.IEntityRenderManager; import com.mojang.blaze3d.platform.GlStateManager; import net.minecraft.block.BlockState; import net.minecraft.client.renderer.BufferBuilder; @@ -61,22 +62,22 @@ public final class PathRenderer implements Helper { private PathRenderer() {} public static double posX() { - return mc.getRenderManager().viewerPosX; + return ((IEntityRenderManager) mc.getRenderManager()).renderPosX(); } public static double posY() { - return mc.getRenderManager().viewerPosY; + return ((IEntityRenderManager) mc.getRenderManager()).renderPosY(); } public static double posZ() { - return mc.getRenderManager().viewerPosZ; + return ((IEntityRenderManager) mc.getRenderManager()).renderPosZ(); } public static void render(RenderEvent event, PathingBehavior behavior) { float partialTicks = event.getPartialTicks(); Goal goal = behavior.getGoal(); - if (mc.field_71462_r instanceof GuiClick) { - ((GuiClick) mc.field_71462_r).onRender(); + if (mc.currentScreen instanceof GuiClick) { + ((GuiClick) mc.currentScreen).onRender(); } int thisPlayerDimension = behavior.baritone.getPlayerContext().world().getDimension().getType().getId(); diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index a3b8f5478..ecd8ff8c5 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -165,11 +165,11 @@ public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { */ private double potionAmplifier() { double speed = 1; - if (player.isPotionActive(Effects.field_76422_e)) { - speed *= 1 + (player.getActivePotionEffect(Effects.field_76422_e).getAmplifier() + 1) * 0.2; + if (player.isPotionActive(Effects.HASTE)) { + speed *= 1 + (player.getActivePotionEffect(Effects.HASTE).getAmplifier() + 1) * 0.2; } - if (player.isPotionActive(Effects.field_76419_f)) { - switch (player.getActivePotionEffect(Effects.field_76419_f).getAmplifier()) { + if (player.isPotionActive(Effects.MINING_FATIGUE)) { + switch (player.getActivePotionEffect(Effects.MINING_FATIGUE).getAmplifier()) { case 0: speed *= 0.3; break; diff --git a/src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java b/src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java deleted file mode 100644 index 50582b8fa..000000000 --- a/src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.accessor; - -import baritone.cache.WorldProvider; - -import java.io.File; - -/** - * @author Brady - * @see WorldProvider - * @since 8/4/2018 - */ -public interface IAnvilChunkLoader { - - File getChunkSaveLocation(); -} diff --git a/src/main/java/baritone/utils/accessor/IChunkProviderServer.java b/src/main/java/baritone/utils/accessor/IEntityRenderManager.java similarity index 81% rename from src/main/java/baritone/utils/accessor/IChunkProviderServer.java rename to src/main/java/baritone/utils/accessor/IEntityRenderManager.java index bf24fbfe5..3caa9223d 100644 --- a/src/main/java/baritone/utils/accessor/IChunkProviderServer.java +++ b/src/main/java/baritone/utils/accessor/IEntityRenderManager.java @@ -17,13 +17,10 @@ package baritone.utils.accessor; -import net.minecraft.world.chunk.storage.ChunkLoader; +public interface IEntityRenderManager { + double renderPosX(); -/** - * @author Brady - * @since 8/4/2018 - */ -public interface IChunkProviderServer { + double renderPosY(); - ChunkLoader getChunkLoader(); + double renderPosZ(); } diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index f6dd669aa..ab4c50d08 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -71,10 +71,10 @@ public static List create(IPlayerContext ctx) { .forEach(mobspawner -> res.add(new Avoidance(mobspawner, mobSpawnerCoeff, Baritone.settings().mobSpawnerAvoidanceRadius.value))); } if (mobCoeff != 1.0D) { - ctx.world().loadedEntityList.stream() + ctx.entitiesStream() .filter(entity -> entity instanceof MobEntity) .filter(entity -> (!(entity instanceof SpiderEntity)) || ctx.player().getBrightness() < 0.5) - .filter(entity -> !(entity instanceof ZombiePigmanEntity) || ((ZombiePigmanEntity) entity).isAngry()) + .filter(entity -> !(entity instanceof ZombiePigmanEntity) || ((ZombiePigmanEntity) entity).getRevengeTarget() != null) .filter(entity -> !(entity instanceof EndermanEntity) || ((EndermanEntity) entity).isScreaming()) .forEach(entity -> res.add(new Avoidance(new BlockPos(entity), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); } diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index 42904fef4..8defd8519 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -44,38 +44,37 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { @Override public boolean onPlayerDamageBlock(BlockPos pos, Direction side) { - - return mc.field_71442_b.onPlayerDamageBlock(pos, side); + return mc.playerController.onPlayerDamageBlock(pos, side); } @Override public void resetBlockRemoving() { - mc.field_71442_b.resetBlockRemoving(); + mc.playerController.resetBlockRemoving(); } @Override public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, PlayerEntity player) { - return mc.field_71442_b.windowClick(windowId, slotId, mouseButton, type, player); + return mc.playerController.windowClick(windowId, slotId, mouseButton, type, player); } @Override public void setGameType(GameType type) { - mc.field_71442_b.setGameType(type); + mc.playerController.setGameType(type); } @Override public GameType getGameType() { - return mc.field_71442_b.getCurrentGameType(); + return mc.playerController.getCurrentGameType(); } @Override public ActionResultType processRightClickBlock(ClientPlayerEntity player, World world, Hand hand, BlockRayTraceResult result) { // primaryplayercontroller is always in a ClientWorld so this is ok - return mc.field_71442_b.func_217292_a(player, (ClientWorld) world, hand, result); + return mc.playerController.func_217292_a(player, (ClientWorld) world, hand, result); } @Override public ActionResultType processRightClick(ClientPlayerEntity player, World world, Hand hand) { - return mc.field_71442_b.processRightClick(player, world, hand); + return mc.playerController.processRightClick(player, world, hand); } } diff --git a/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java b/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java index fd0ace8ca..1d54ae024 100644 --- a/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java +++ b/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java @@ -20,7 +20,7 @@ import baritone.api.utils.ISchematic; import com.github.lunatrius.schematica.client.world.SchematicWorld; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; public final class SchematicAdapter implements ISchematic { @@ -31,7 +31,7 @@ public SchematicAdapter(SchematicWorld schematicWorld) { } @Override - public IBlockState desiredState(int x, int y, int z) { + public BlockState desiredState(int x, int y, int z) { return schematic.getSchematic().getBlockState(new BlockPos(x, y, z)); } diff --git a/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java b/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java index 6430dbfcc..6705b402b 100644 --- a/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java +++ b/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java @@ -17,11 +17,11 @@ package com.github.lunatrius.schematica.api; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; public interface ISchematic { - IBlockState getBlockState(BlockPos var1); + BlockState getBlockState(BlockPos var1); int getWidth(); From 9f951f261df9684c83ed9633e111b8a3c156d6a5 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 23 Jul 2019 15:39:19 -0700 Subject: [PATCH 061/935] fixes --- .../api/utils/ExampleBaritoneControl.java | 24 ++------ .../mixins/MixinClientChunkProvider.java | 39 ------------- .../launch/mixins/MixinLootContext.java | 58 +++++++++++++++++++ .../launch/mixins/MixinMinecraft.java | 1 - src/launch/resources/mixins.baritone.json | 2 + .../java/baritone/process/MineProcess.java | 42 ++++++++++++-- .../baritone/utils/BlockStateInterface.java | 23 +++----- .../baritone/utils/PlayerMovementInput.java | 3 +- .../utils/accessor/IChunkProviderClient.java | 25 -------- 9 files changed, 112 insertions(+), 105 deletions(-) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinLootContext.java delete mode 100644 src/main/java/baritone/utils/accessor/IChunkProviderClient.java diff --git a/src/api/java/baritone/api/utils/ExampleBaritoneControl.java b/src/api/java/baritone/api/utils/ExampleBaritoneControl.java index 269033e5e..9b63d0b82 100644 --- a/src/api/java/baritone/api/utils/ExampleBaritoneControl.java +++ b/src/api/java/baritone/api/utils/ExampleBaritoneControl.java @@ -35,6 +35,7 @@ import net.minecraft.client.multiplayer.ClientChunkProvider; import net.minecraft.crash.CrashReport; import net.minecraft.entity.Entity; +import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; @@ -219,23 +220,6 @@ public boolean runCommand(String msg0) { // you may think this can be private, b } return true; } - /*if (msg.equals("fullpath")) { - if (pathingBehavior.getGoal() == null) { - logDirect("No goal."); - } else { - logDirect("Started segmented calculator"); - SegmentedCalculator.calculateSegmentsThreaded(pathingBehavior.pathStart(), pathingBehavior.getGoal(), new CalculationContext(baritone, true), ipath -> { - logDirect("Found a path"); - logDirect("Ends at " + ipath.getDest()); - logDirect("Length " + ipath.length()); - logDirect("Estimated time " + ipath.ticksRemainingFrom(0)); - pathingBehavior.secretCursedFunctionDoNotCall(ipath); // it's okay when *I* do it - }, () -> { - logDirect("Path calculation failed, no path"); - }); - } - return true; - }*/ if (msg.equals("proc")) { Optional proc = baritone.getPathingControlManager().mostRecentInControl(); if (!proc.isPresent()) { @@ -418,10 +402,10 @@ public boolean isInGoal(int x, int y, int z) { logDirect("Following any players"); return true; } - /*if (msg.startsWith("followentity")) { + if (msg.startsWith("followentity")) { String name = msg.substring(12).trim(); Optional toFollow = Optional.empty(); - for (Entity entity : ctx.world().loadedEntityList) { + for (Entity entity : ctx.entities()) { String entityName = entity.getName().getFormattedText().trim().toLowerCase(); if ((entityName.contains(name) || name.contains(entityName)) && !(entity instanceof ItemEntity || entity instanceof PlayerEntity)) { // We dont want it following players while `#follow` exists. toFollow = Optional.of(entity); @@ -435,7 +419,7 @@ public boolean isInGoal(int x, int y, int z) { baritone.getFollowProcess().follow(effectivelyFinal::equals); logDirect("Following entity " + toFollow.get()); return true; - }*/ + } if (msg.startsWith("follow")) { String name = msg.substring(6).trim(); Optional toFollow = Optional.empty(); diff --git a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java deleted file mode 100644 index cdfd1cf56..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.utils.accessor.IChunkProviderClient; -import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import net.minecraft.client.multiplayer.ClientChunkProvider; -import net.minecraft.world.chunk.Chunk; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(ClientChunkProvider.class) -public class MixinClientChunkProvider implements IChunkProviderClient { - - @Shadow - @Final - private Long2ObjectMap loadedChunks; - - @Override - public Long2ObjectMap loadedChunks() { - return this.loadedChunks; - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinLootContext.java b/src/launch/java/baritone/launch/mixins/MixinLootContext.java new file mode 100644 index 000000000..86beea446 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinLootContext.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.launch.mixins; + +import baritone.process.MineProcess; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.server.ServerWorld; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootTableManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(LootContext.Builder.class) +public class MixinLootContext { + @Redirect( + method = "build", + at = @At( + value = "INVOKE", + target = "net/minecraft/world/server/ServerWorld.getServer()Lnet/minecraft/server/MinecraftServer;" + ) + ) + private MinecraftServer getServer(ServerWorld world) { + if (world == null) { + return null; + } + return world.getServer(); + } + + @Redirect( + method = "build", + at = @At( + value = "INVOKE", + target = "net/minecraft/server/MinecraftServer.getLootTableManager()Lnet/minecraft/world/storage/loot/LootTableManager;" + ) + ) + private LootTableManager getLootTableManager(MinecraftServer server) { + if (server == null) { + return MineProcess.getManager(); + } + return server.getLootTableManager(); + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 0c2861135..557c184bd 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -32,7 +32,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import org.spongepowered.asm.lib.Opcodes; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 171ff4561..c908ccafd 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -12,8 +12,10 @@ "MixinClientPlayerEntity", "MixinClientPlayNetHandler", "MixinEntity", + "MixinEntityRenderManager", "MixinGameRenderer", "MixinLivingEntity", + "MixinLootContext", "MixinMinecraft", "MixinNetworkManager" ] diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index b7982ea76..0edbdf4e2 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -39,12 +39,15 @@ import net.minecraft.entity.item.ItemEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.resources.*; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Unit; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.world.storage.loot.LootContext; -import net.minecraft.world.storage.loot.LootParameters; +import net.minecraft.world.storage.loot.*; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import static baritone.api.pathing.movement.ActionCosts.COST_INF; @@ -66,6 +69,9 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro private int desiredQuantity; private int tickCount; + private static LootTableManager manager; + private static Map> drops; + public MineProcess(Baritone baritone) { super(baritone); } @@ -143,6 +149,35 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return command; } + public static LootTableManager getManager() { + if (manager == null) { + ResourcePackList rpl = new ResourcePackList<>(ResourcePackInfo::new); + rpl.addPackFinder(new ServerPackFinder()); + rpl.reloadPacksFromFinders(); + IResourcePack thePack = ((ResourcePackInfo) rpl.getAllPacks().iterator().next()).getResourcePack(); + IReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(ResourcePackType.SERVER_DATA, null); + manager = new LootTableManager(); + resourceManager.addReloadListener(manager); + try { + resourceManager.reloadResourcesAndThen(Baritone.getExecutor(), Baritone.getExecutor(), Collections.singletonList(thePack), CompletableFuture.completedFuture(Unit.INSTANCE)).get(); + } catch (Exception exception) { + throw new RuntimeException(exception); + } + } + return manager; + } + + private static List drops(Block b) { + return drops.computeIfAbsent(b, block -> { + ResourceLocation lootTableLocation = block.getLootTable(); + if (lootTableLocation == LootTables.EMPTY) { + return Collections.emptyList(); + } else { + return getManager().getLootTableFromLocation(lootTableLocation).generate(new LootContext.Builder(null).withRandom(new Random()).withParameter(LootParameters.POSITION, BlockPos.ZERO).withParameter(LootParameters.TOOL, ItemStack.EMPTY).withNullableParameter(LootParameters.BLOCK_ENTITY, null).withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()).build(LootParameterSets.BLOCK)).stream().map(ItemStack::getItem).collect(Collectors.toList()); + } + }); + } + @Override public void onLostControl() { mine(0, (Block[]) null); @@ -283,9 +318,6 @@ public double heuristic(int x, int y, int z) { } } - public static List drops(Block block) { - return block.getDefaultState().getDrops(new LootContext.Builder(null).withRandom(new Random()).withParameter(LootParameters.POSITION, BlockPos.ZERO).withParameter(LootParameters.TOOL, ItemStack.EMPTY).withNullableParameter(LootParameters.BLOCK_ENTITY, null)).stream().map(ItemStack::getItem).collect(Collectors.toList()); - } public static List droppedItemsScan(List mining, World world) { if (!Baritone.settings().mineScanDroppedItems.value) { diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 1273eb7b2..7dfd153e3 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -21,18 +21,16 @@ import baritone.api.utils.IPlayerContext; import baritone.cache.CachedRegion; import baritone.cache.WorldData; -import baritone.utils.accessor.IChunkProviderClient; -import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientChunkProvider; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkSection; +import net.minecraft.world.chunk.ChunkStatus; /** * Wraps get for chuck caching capability @@ -41,7 +39,7 @@ */ public class BlockStateInterface { - private final Long2ObjectMap loadedChunks; + private final ClientChunkProvider provider; private final WorldData worldData; private Chunk prev = null; @@ -61,11 +59,9 @@ public BlockStateInterface(IPlayerContext ctx, boolean copyLoadedChunks) { public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedChunks) { this.worldData = worldData; - Long2ObjectMap worldLoaded = ((IChunkProviderClient) world.getChunkProvider()).loadedChunks(); - if (copyLoadedChunks) { - this.loadedChunks = new Long2ObjectOpenHashMap<>(worldLoaded); // make a copy that we can safely access from another thread - } else { - this.loadedChunks = worldLoaded; // this will only be used on the main thread + this.provider = (ClientChunkProvider) world.getChunkProvider(); + if (copyLoadedChunks) { // todo + System.out.println("Really gotta do this"); } this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.value; if (!Minecraft.getInstance().isOnExecutionThread()) { @@ -74,7 +70,7 @@ public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedC } public boolean worldContainsLoadedChunk(int blockX, int blockZ) { - return loadedChunks.containsKey(ChunkPos.asLong(blockX >> 4, blockZ >> 4)); + return provider.chunkExists(blockX >> 4, blockZ >> 4); } public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be called from the pathing thread because the pathing thread doesn't make a single blockpos pog @@ -109,8 +105,7 @@ public BlockState get0(int x, int y, int z) { // Mickey resigned if (cached != null && cached.getPos().x == x >> 4 && cached.getPos().z == z >> 4) { return getFromChunk(cached, x, y, z); } - Chunk chunk = loadedChunks.get(ChunkPos.asLong(x >> 4, z >> 4)); - + Chunk chunk = provider.getChunk(x >> 4, z >> 4, ChunkStatus.FULL, false); if (chunk != null && !chunk.isEmpty()) { prev = chunk; return getFromChunk(chunk, x, y, z); @@ -142,7 +137,7 @@ public boolean isLoaded(int x, int z) { if (prevChunk != null && prevChunk.getPos().x == x >> 4 && prevChunk.getPos().z == z >> 4) { return true; } - prevChunk = loadedChunks.get(ChunkPos.asLong(x >> 4, z >> 4)); + prevChunk = provider.getChunk(x >> 4, z >> 4, ChunkStatus.FULL, false); if (prevChunk != null && !prevChunk.isEmpty()) { prev = prevChunk; return true; diff --git a/src/main/java/baritone/utils/PlayerMovementInput.java b/src/main/java/baritone/utils/PlayerMovementInput.java index f41e0f629..df89dc789 100644 --- a/src/main/java/baritone/utils/PlayerMovementInput.java +++ b/src/main/java/baritone/utils/PlayerMovementInput.java @@ -27,7 +27,8 @@ public class PlayerMovementInput extends MovementInput { this.handler = handler; } - public void updatePlayerMoveState() { + @Override + public void tick(boolean p_217607_1_, boolean p_217607_2_) { this.moveStrafe = 0.0F; this.moveForward = 0.0F; diff --git a/src/main/java/baritone/utils/accessor/IChunkProviderClient.java b/src/main/java/baritone/utils/accessor/IChunkProviderClient.java deleted file mode 100644 index 19f146854..000000000 --- a/src/main/java/baritone/utils/accessor/IChunkProviderClient.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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.accessor; - -import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import net.minecraft.world.chunk.Chunk; - -public interface IChunkProviderClient { - Long2ObjectMap loadedChunks(); -} From 36315c5151e2c940f5ac8d49803653053725efbc Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 23 Jul 2019 15:47:18 -0700 Subject: [PATCH 062/935] working for realsies --- src/api/java/baritone/api/utils/BlockUtils.java | 5 ++++- src/main/java/baritone/process/MineProcess.java | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index d7f17a0b7..32c24a54a 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -17,6 +17,7 @@ package baritone.api.utils; +import net.minecraft.block.AirBlock; import net.minecraft.block.Block; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; @@ -54,7 +55,9 @@ public static Block stringToBlockNullable(String name) { return null; // cached as null } block = Registry.BLOCK.getOrDefault(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)); - // TODO this again returns air instead of null! + if (block instanceof AirBlock && !name.equals("air")) { + block = null; + } Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); resourceCache = copy; diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 0edbdf4e2..63437611d 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -70,7 +70,7 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro private int tickCount; private static LootTableManager manager; - private static Map> drops; + private static Map> drops = new HashMap<>(); public MineProcess(Baritone baritone) { super(baritone); From 01cf3c67a6cc3e7adc84c300e6ad242121a3f40c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 23 Jul 2019 19:25:48 -0700 Subject: [PATCH 063/935] whatever this works lol --- src/main/java/baritone/utils/BaritoneAutoTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index 9c2b80618..b581839d4 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -105,8 +105,10 @@ public void onTick(TickEvent event) { // to our defined starting position if (server != null && server.getWorld(DimensionType.OVERWORLD) != null) { server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); - throw new UnsupportedOperationException("TODO figure out how to set SPAWN_RADIUS"); - //server.getWorld(DimensionType.OVERWORLD).getGameRules().get(GameRules.SPAWN_RADIUS).func_223554_b(null, "0"); // TODO I HAVE NO IDEA + int result = server.getCommandManager().handleCommand(server.getCommandSource(), "/gamerule spawnRadius 0"); + if (result != 0) { + throw new IllegalStateException(result + ""); + } } if (event.getType() == TickEvent.Type.IN) { // If we're in-game From 4e563c6130a89f7f8f4ad97dddccdad5873311a9 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 23 Jul 2019 20:44:07 -0700 Subject: [PATCH 064/935] could this be the worst possible way to copy a chunk array --- .../launch/mixins/MixinChunkArray.java | 92 +++++++++++++++++++ .../mixins/MixinClientChunkProvider.java | 61 ++++++++++++ src/launch/resources/mixins.baritone.json | 2 + .../java/baritone/event/GameEventHandler.java | 1 + .../baritone/utils/BlockStateInterface.java | 8 +- .../baritone/utils/accessor/IChunkArray.java | 34 +++++++ .../utils/accessor/IClientChunkProvider.java | 26 ++++++ 7 files changed, 221 insertions(+), 3 deletions(-) create mode 100644 src/launch/java/baritone/launch/mixins/MixinChunkArray.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java create mode 100644 src/main/java/baritone/utils/accessor/IChunkArray.java create mode 100644 src/main/java/baritone/utils/accessor/IClientChunkProvider.java diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java new file mode 100644 index 000000000..58ac3418f --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java @@ -0,0 +1,92 @@ +/* + * 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.utils.accessor.IChunkArray; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.chunk.Chunk; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.concurrent.atomic.AtomicReferenceArray; + +@Mixin(targets = "net.minecraft.client.multiplayer.ClientChunkProvider$ChunkArray") +public abstract class MixinChunkArray implements IChunkArray { + @Shadow + private AtomicReferenceArray chunks; + @Shadow + private int viewDistance; + @Shadow + private int sideLength; + @Shadow + private int centerX; + @Shadow + private int centerZ; + @Shadow + private int loaded; + + @Shadow + protected abstract boolean inView(int x, int z); + + @Shadow + protected abstract int getIndex(int x, int z); + + @Shadow + protected abstract void replace(int index, Chunk chunk); + + @Override + public int centerX() { + return centerX; + } + + @Override + public int centerZ() { + return centerZ; + } + + @Override + public int viewDistance() { + return viewDistance; + } + + @Override + public AtomicReferenceArray getChunks() { + return chunks; + } + + @Override + public void copyFrom(IChunkArray other) { + centerX = other.centerX(); + centerZ = other.centerZ(); + + AtomicReferenceArray copyingFrom = other.getChunks(); + for (int k = 0; k < copyingFrom.length(); ++k) { + Chunk chunk = copyingFrom.get(k); + if (chunk != null) { + ChunkPos chunkpos = chunk.getPos(); + if (inView(chunkpos.x, chunkpos.z)) { + int index = getIndex(chunkpos.x, chunkpos.z); + if (chunks.get(index) != null) { + throw new IllegalStateException("Doing this would mutate the client's REAL loaded chunks?!"); + } + replace(index, chunk); + } + } + } + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java new file mode 100644 index 000000000..700f54ae2 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java @@ -0,0 +1,61 @@ +/* + * 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.utils.accessor.IChunkArray; +import baritone.utils.accessor.IClientChunkProvider; +import net.minecraft.client.multiplayer.ClientChunkProvider; +import net.minecraft.client.world.ClientWorld; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.lang.reflect.Field; +import java.util.Arrays; + +@Mixin(ClientChunkProvider.class) +public class MixinClientChunkProvider implements IClientChunkProvider { + + @Shadow + private ClientWorld world; + + @Override + public ClientChunkProvider createThreadSafeCopy() { + IChunkArray arr = extractReferenceArray(); + ClientChunkProvider result = new ClientChunkProvider(world, arr.viewDistance() - 3); // -3 because its adds 3 for no reason lmao + IChunkArray copyArr = ((IClientChunkProvider) result).extractReferenceArray(); + copyArr.copyFrom(arr); + if (copyArr.viewDistance() != arr.viewDistance()) { + throw new IllegalStateException(copyArr.viewDistance() + " " + arr.viewDistance()); + } + return result; + } + + @Override + public IChunkArray extractReferenceArray() { + for (Field f : ClientChunkProvider.class.getDeclaredFields()) { + if (IChunkArray.class.isAssignableFrom(f.getType())) { + try { + return (IChunkArray) f.get(this); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + } + throw new RuntimeException(Arrays.toString(ClientChunkProvider.class.getDeclaredFields())); + } +} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index c908ccafd..1f09b1698 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -9,6 +9,8 @@ }, "client": [ "MixinBlockPos", + "MixinChunkArray", + "MixinClientChunkProvider", "MixinClientPlayerEntity", "MixinClientPlayNetHandler", "MixinEntity", diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index e20a92be4..18f03d956 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -51,6 +51,7 @@ public final void onTick(TickEvent event) { try { baritone.bsi = new BlockStateInterface(baritone.getPlayerContext(), true); } catch (Exception ex) { + ex.printStackTrace(); baritone.bsi = null; } } else { diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 7dfd153e3..5fd1a5909 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -21,6 +21,7 @@ import baritone.api.utils.IPlayerContext; import baritone.cache.CachedRegion; import baritone.cache.WorldData; +import baritone.utils.accessor.IClientChunkProvider; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -59,9 +60,10 @@ public BlockStateInterface(IPlayerContext ctx, boolean copyLoadedChunks) { public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedChunks) { this.worldData = worldData; - this.provider = (ClientChunkProvider) world.getChunkProvider(); - if (copyLoadedChunks) { // todo - System.out.println("Really gotta do this"); + if (copyLoadedChunks) { + this.provider = ((IClientChunkProvider) world.getChunkProvider()).createThreadSafeCopy(); + } else { + this.provider = (ClientChunkProvider) world.getChunkProvider(); } this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.value; if (!Minecraft.getInstance().isOnExecutionThread()) { diff --git a/src/main/java/baritone/utils/accessor/IChunkArray.java b/src/main/java/baritone/utils/accessor/IChunkArray.java new file mode 100644 index 000000000..147f64007 --- /dev/null +++ b/src/main/java/baritone/utils/accessor/IChunkArray.java @@ -0,0 +1,34 @@ +/* + * 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.accessor; + +import net.minecraft.world.chunk.Chunk; + +import java.util.concurrent.atomic.AtomicReferenceArray; + +public interface IChunkArray { + void copyFrom(IChunkArray other); + + AtomicReferenceArray getChunks(); + + int centerX(); + + int centerZ(); + + int viewDistance(); +} diff --git a/src/main/java/baritone/utils/accessor/IClientChunkProvider.java b/src/main/java/baritone/utils/accessor/IClientChunkProvider.java new file mode 100644 index 000000000..cc7483ab4 --- /dev/null +++ b/src/main/java/baritone/utils/accessor/IClientChunkProvider.java @@ -0,0 +1,26 @@ +/* + * 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.accessor; + +import net.minecraft.client.multiplayer.ClientChunkProvider; + +public interface IClientChunkProvider { + ClientChunkProvider createThreadSafeCopy(); + + IChunkArray extractReferenceArray(); +} From 8a5cc5b17df12e2b8ef38819e82b31bfd3e8ca75 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 23 Jul 2019 20:54:00 -0700 Subject: [PATCH 065/935] should be peaceful anyway --- src/main/java/baritone/utils/BaritoneAutoTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index b581839d4..d1139bfd0 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -105,6 +105,7 @@ public void onTick(TickEvent event) { // to our defined starting position if (server != null && server.getWorld(DimensionType.OVERWORLD) != null) { server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); + server.getCommandManager().handleCommand(server.getCommandSource(), "/difficulty 0"); int result = server.getCommandManager().handleCommand(server.getCommandSource(), "/gamerule spawnRadius 0"); if (result != 0) { throw new IllegalStateException(result + ""); From 6bee5828a0b78908bc695db8668dd30ea1420953 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 23 Jul 2019 21:38:42 -0700 Subject: [PATCH 066/935] thank you brigadier very cool --- src/main/java/baritone/utils/BaritoneAutoTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index d1139bfd0..2453f90cb 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -105,7 +105,7 @@ public void onTick(TickEvent event) { // to our defined starting position if (server != null && server.getWorld(DimensionType.OVERWORLD) != null) { server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); - server.getCommandManager().handleCommand(server.getCommandSource(), "/difficulty 0"); + server.getCommandManager().handleCommand(server.getCommandSource(), "/difficulty peaceful"); int result = server.getCommandManager().handleCommand(server.getCommandSource(), "/gamerule spawnRadius 0"); if (result != 0) { throw new IllegalStateException(result + ""); From a8226ba4c8351320b5ac69fc74c8787c452b82bb Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 24 Jul 2019 15:43:37 -0700 Subject: [PATCH 067/935] v1.3.4 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 60787748d..7edc527ee 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.3.3' +version '1.3.4' buildscript { repositories { From 2ca4c3042ac2f2f265d2626e92cbe1b95b7f8245 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 25 Jul 2019 15:50:58 -0700 Subject: [PATCH 068/935] fix realms --- src/main/java/baritone/cache/WorldProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 91ce534cf..dfc671532 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -74,7 +74,7 @@ public final void initWorld(DimensionType dimension) { directory = new File(directory, "baritone"); readme = directory; } else { // Otherwise, the server must be remote... - String folderName = mc.getCurrentServerData().serverIP; + String folderName = mc.isConnectedToRealms() ? "realms" : mc.getCurrentServerData().serverIP; if (SystemUtils.IS_OS_WINDOWS) { folderName = folderName.replace(":", "_"); } From afebdce1f82969a79d029222fc485668be16c094 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 25 Jul 2019 16:02:29 -0700 Subject: [PATCH 069/935] fix crash and ice behavior --- .../java/baritone/pathing/movement/MovementHelper.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 8ce984fb9..e62fcd732 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -498,7 +498,14 @@ static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterf } static boolean isBlockNormalCube(BlockState state) { - return state.isNormalCube(null, null); + Block block = state.getBlock(); + if (block instanceof BambooBlock + || block instanceof MovingPistonBlock + || block instanceof ScaffoldingBlock + || block instanceof ShulkerBoxBlock) { + return false; + } + return Block.isOpaque(state.getCollisionShape(null, null)); } static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, BlockPos placeAt, boolean preferDown) { From afc639ab4b43ace7ec0fa70559add2e9a6d86bca Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Aug 2019 22:31:46 -0700 Subject: [PATCH 070/935] bypass --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index aeb5412c4..9495f3f29 100755 --- a/build.gradle +++ b/build.gradle @@ -82,7 +82,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20190723-1.14.3' + mappings channel: 'snapshot', version: '20190814-1.14.3' reobfMappings 'notch' runs { From 4557bab3c47b6d79f30bf1d8297dde47e92098ea Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 20 Aug 2019 14:49:11 -0700 Subject: [PATCH 071/935] maybe travis fix --- src/main/java/baritone/utils/BaritoneAutoTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index 2453f90cb..1c5308de6 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -104,7 +104,9 @@ public void onTick(TickEvent event) { // If the integrated server is launched and the world has initialized, set the spawn point // to our defined starting position if (server != null && server.getWorld(DimensionType.OVERWORLD) != null) { - server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); + if (mc.player == null) { + server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); + } server.getCommandManager().handleCommand(server.getCommandSource(), "/difficulty peaceful"); int result = server.getCommandManager().handleCommand(server.getCommandSource(), "/gamerule spawnRadius 0"); if (result != 0) { From 8973b73bfacd410a89eeeb8e8e3823e0ad8ebcf3 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 20 Aug 2019 14:58:00 -0700 Subject: [PATCH 072/935] reduce spamminess --- src/main/java/baritone/utils/BaritoneAutoTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index 1c5308de6..e6f08e215 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -106,11 +106,11 @@ public void onTick(TickEvent event) { if (server != null && server.getWorld(DimensionType.OVERWORLD) != null) { if (mc.player == null) { server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); - } - server.getCommandManager().handleCommand(server.getCommandSource(), "/difficulty peaceful"); - int result = server.getCommandManager().handleCommand(server.getCommandSource(), "/gamerule spawnRadius 0"); - if (result != 0) { - throw new IllegalStateException(result + ""); + server.getCommandManager().handleCommand(server.getCommandSource(), "/difficulty peaceful"); + int result = server.getCommandManager().handleCommand(server.getCommandSource(), "/gamerule spawnRadius 0"); + if (result != 0) { + throw new IllegalStateException(result + ""); + } } } From ddeb2a5c14fbde81b0aa8d790f87c1633feab417 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 20 Aug 2019 15:07:36 -0700 Subject: [PATCH 073/935] perhaps fix concurrent modification issues --- src/main/java/baritone/utils/BaritoneAutoTest.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index e6f08e215..e17764243 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -105,12 +105,14 @@ public void onTick(TickEvent event) { // to our defined starting position if (server != null && server.getWorld(DimensionType.OVERWORLD) != null) { if (mc.player == null) { - server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); - server.getCommandManager().handleCommand(server.getCommandSource(), "/difficulty peaceful"); - int result = server.getCommandManager().handleCommand(server.getCommandSource(), "/gamerule spawnRadius 0"); - if (result != 0) { - throw new IllegalStateException(result + ""); - } + server.execute(() -> { + server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); + server.getCommandManager().handleCommand(server.getCommandSource(), "/difficulty peaceful"); + int result = server.getCommandManager().handleCommand(server.getCommandSource(), "/gamerule spawnRadius 0"); + if (result != 0) { + throw new IllegalStateException(result + ""); + } + }); } } From 02419f8b0789cd2a87a544b2e53831b5e21cafed Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 20 Aug 2019 15:25:30 -0700 Subject: [PATCH 074/935] v1.4.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8d8067b01..d34748330 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.4.0' +version '1.4.1' buildscript { repositories { From ae9671bff0137bee6116004967ac57f3383307c8 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 30 Sep 2019 17:57:09 -0700 Subject: [PATCH 075/935] meme fix, things work now --- .../baritone/api/utils/BlockOptionalMeta.java | 39 +++++-------------- 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 9a1891c8c..717aa91bc 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -30,39 +30,29 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.function.Consumer; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; public final class BlockOptionalMeta { private final Block block; - private final int meta; - private final boolean noMeta; private final Set blockstates; private final ImmutableSet stateHashes; private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); private static final Map normalizations; - public BlockOptionalMeta(@Nonnull Block block, @Nullable Integer meta) { + public BlockOptionalMeta(@Nonnull Block block) { this.block = block; - this.noMeta = meta == null; - this.meta = noMeta ? 0 : meta; - this.blockstates = getStates(block, meta); + this.blockstates = getStates(block); this.stateHashes = getStateHashes(blockstates); this.stackHashes = getStackHashes(blockstates); } - public BlockOptionalMeta(@Nonnull Block block) { - this(block, null); - } - public BlockOptionalMeta(@Nonnull String selector) { Matcher matcher = pattern.matcher(selector); @@ -71,7 +61,6 @@ public BlockOptionalMeta(@Nonnull String selector) { } MatchResult matchResult = matcher.toMatchResult(); - noMeta = matchResult.group(2) == null; ResourceLocation id = new ResourceLocation(matchResult.group(1)); @@ -80,8 +69,7 @@ public BlockOptionalMeta(@Nonnull String selector) { } block = IRegistry.BLOCK.get(id); - meta = noMeta ? 0 : Integer.parseInt(matchResult.group(2)); - blockstates = getStates(block, getMeta()); + blockstates = getStates(block); stateHashes = getStateHashes(blockstates); stackHashes = getStackHashes(blockstates); } @@ -219,14 +207,11 @@ public static IBlockState normalize(IBlockState state) { } public static int stateMeta(IBlockState state) { - throw new UnsupportedOperationException(); + return state.hashCode(); } - private static Set getStates(@Nonnull Block block, @Nullable Integer meta) { - throw new UnsupportedOperationException(); - /*return block.getBlockState().getValidStates().stream() - .filter(blockstate -> meta == null || stateMeta(blockstate) == meta) - .collect(Collectors.toSet());*/ + private static Set getStates(@Nonnull Block block) { + return new HashSet<>(block.getStateContainer().getValidStates()); } private static ImmutableSet getStateHashes(Set blockstates) { @@ -255,10 +240,6 @@ public Block getBlock() { return block; } - public Integer getMeta() { - return noMeta ? null : meta; - } - public boolean matches(@Nonnull Block block) { return block == this.block; } @@ -272,16 +253,14 @@ public boolean matches(ItemStack stack) { //noinspection ConstantConditions int hash = ((IItemStack) (Object) stack).getBaritoneHash(); - if (noMeta) { hash -= stack.getDamage(); - } return stackHashes.contains(hash); } @Override public String toString() { - return String.format("BlockOptionalMeta{block=%s,meta=%s}", block, getMeta()); + return String.format("BlockOptionalMeta{block=%s}", block); } public IBlockState getAnyBlockState() { From 7e505fc68f179dfc84407575bf4751122cf32f4c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 6 Oct 2019 16:00:26 -0700 Subject: [PATCH 076/935] fix dropped items scanning --- .../java/baritone/api/utils/BlockOptionalMeta.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 717aa91bc..5c32a9221 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -29,13 +29,11 @@ import net.minecraft.util.registry.IRegistry; import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.*; import java.util.function.Consumer; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; public final class BlockOptionalMeta { @@ -224,16 +222,15 @@ private static ImmutableSet getStateHashes(Set blockstates private static ImmutableSet getStackHashes(Set blockstates) { //noinspection ConstantConditions - /*return ImmutableSet.copyOf( + return ImmutableSet.copyOf( blockstates.stream() .map(state -> new ItemStack( - state.getBlock().getItemDropped(state, ctx.world(), null, 0), - state.getBlock().(state) + state.getBlock().getItemDropped(state, null, null, 0).asItem(), + 1 )) .map(stack -> ((IItemStack) (Object) stack).getBaritoneHash()) .toArray(Integer[]::new) - );*/ - return ImmutableSet.of(); + ); } public Block getBlock() { @@ -253,7 +250,7 @@ public boolean matches(ItemStack stack) { //noinspection ConstantConditions int hash = ((IItemStack) (Object) stack).getBaritoneHash(); - hash -= stack.getDamage(); + hash -= stack.getDamage(); return stackHashes.contains(hash); } From 84a257faf4655cb56bbe5a7e2ec2ffcb4ea4d10f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 6 Oct 2019 17:37:07 -0700 Subject: [PATCH 077/935] fix air scuff --- src/api/java/baritone/api/utils/BlockUtils.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index 96067a82e..d6ef34f3d 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -17,7 +17,6 @@ package baritone.api.utils; -import net.minecraft.block.AirBlock; import net.minecraft.block.Block; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; @@ -58,10 +57,7 @@ public static Block stringToBlockNullable(String name) { if (resourceCache.containsKey(name)) { return null; // cached as null } - block = Registry.BLOCK.getOrDefault(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)); - if (block instanceof AirBlock && !name.equals("air")) { - block = null; - } + block = Registry.BLOCK.getValue(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)).orElse(null); Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); resourceCache = copy; From 62df244db7638883f8ba9a32e5f1148c4629b2ee Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 9 Oct 2019 21:19:58 -0500 Subject: [PATCH 078/935] Initial Brigadier overriden tab completion --- .../api/event/events/TabCompleteEvent.java | 30 ++---- .../listener/AbstractGameEventListener.java | 5 +- .../event/listener/IGameEventListener.java | 10 +- .../baritone/launch/mixins/MixinGuiChat.java | 97 +++++++++++++++++++ src/launch/resources/mixins.baritone.json | 1 + .../baritone/command/BaritoneChatControl.java | 6 +- .../java/baritone/event/GameEventHandler.java | 7 +- .../utils/accessor/ITabCompleter.java | 10 -- 8 files changed, 110 insertions(+), 56 deletions(-) create mode 100644 src/launch/java/baritone/launch/mixins/MixinGuiChat.java delete mode 100644 src/main/java/baritone/utils/accessor/ITabCompleter.java diff --git a/src/api/java/baritone/api/event/events/TabCompleteEvent.java b/src/api/java/baritone/api/event/events/TabCompleteEvent.java index fea1da292..2a0ef87ba 100644 --- a/src/api/java/baritone/api/event/events/TabCompleteEvent.java +++ b/src/api/java/baritone/api/event/events/TabCompleteEvent.java @@ -23,31 +23,13 @@ /** * @author LoganDark */ -public abstract class TabCompleteEvent extends Cancellable { +public final class TabCompleteEvent extends Cancellable { - public final Overrideable prefix; - public final Overrideable completions; + public final String prefix; + public String[] completions; - TabCompleteEvent(String prefix, String[] completions) { - this.prefix = new Overrideable<>(prefix); - this.completions = new Overrideable<>(completions); - } - - public boolean wasModified() { - return prefix.wasModified() || completions.wasModified(); - } - - public static final class Pre extends TabCompleteEvent { - - public Pre(String prefix) { - super(prefix, null); - } - } - - public static final class Post extends TabCompleteEvent { - - public Post(String prefix, String[] completions) { - super(prefix, completions); - } + public TabCompleteEvent(String prefix) { + this.prefix = prefix; + this.completions = null; } } diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index e7d4dc292..9eac8de46 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -40,10 +40,7 @@ default void onPlayerUpdate(PlayerUpdateEvent event) {} default void onSendChatMessage(ChatEvent event) {} @Override - default void onPreTabComplete(TabCompleteEvent.Pre event) {} - - @Override - default void onPostTabComplete(TabCompleteEvent.Post event) {} + default void onPreTabComplete(TabCompleteEvent event) {} @Override default void onChunkEvent(ChunkEvent event) {} diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index 44db8f62f..c374c8913 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -61,15 +61,7 @@ public interface IGameEventListener { * * @param event The event */ - void onPreTabComplete(TabCompleteEvent.Pre event); - - /** - * Runs whenever the client player tries to tab complete in chat once completions have been recieved from the - * server. This will only be called if the {@link TabCompleteEvent#cancel()} method was not called. - * - * @param event The event - */ - void onPostTabComplete(TabCompleteEvent.Post event); + void onPreTabComplete(TabCompleteEvent event); /** * Runs before and after whenever a chunk is either loaded, unloaded, or populated. diff --git a/src/launch/java/baritone/launch/mixins/MixinGuiChat.java b/src/launch/java/baritone/launch/mixins/MixinGuiChat.java new file mode 100644 index 000000000..570847e9c --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinGuiChat.java @@ -0,0 +1,97 @@ +/* + * 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.api.BaritoneAPI; +import baritone.api.event.events.TabCompleteEvent; +import com.mojang.brigadier.context.StringRange; +import com.mojang.brigadier.suggestion.Suggestion; +import com.mojang.brigadier.suggestion.Suggestions; +import net.minecraft.client.gui.GuiChat; +import net.minecraft.client.gui.GuiTextField; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author Brady + * @since 10/9/2019 + */ +@Mixin(GuiChat.class) +public class MixinGuiChat { + + @Shadow + protected GuiTextField inputField; + + @Shadow + @Final + protected List commandUsage; + + @Shadow + private CompletableFuture pendingSuggestions; + + @Inject( + method = "updateSuggestion", + at = @At("HEAD"), + cancellable = true + ) + private void preUpdateSuggestion(CallbackInfo ci) { + // Anything that is present in the input text before the cursor position + String prefix = this.inputField.getText().substring(0, Math.min(this.inputField.getText().length(), this.inputField.getCursorPosition())); + + TabCompleteEvent event = new TabCompleteEvent(prefix); + BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onPreTabComplete(event); + + if (event.isCancelled()) { + ci.cancel(); + return; + } + + if (event.completions != null) { + ci.cancel(); + + // TODO: Support populating the command usage + this.commandUsage.clear(); + + if (event.completions.length == 0) { + this.pendingSuggestions = Suggestions.empty(); + } else { + int offset = this.inputField.getCursorPosition(); + + List suggestionList = Stream.of(event.completions) + .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s)) + .collect(Collectors.toList()); + + Suggestions suggestions = new Suggestions( + StringRange.between(offset, offset + suggestionList.stream().mapToInt(s -> s.getText().length()).max().orElse(0)), + suggestionList); + + this.pendingSuggestions = new CompletableFuture<>(); + this.pendingSuggestions.complete(suggestions); + } + } + } +} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index ceaba84de..84a77d22a 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -18,6 +18,7 @@ "MixinEntityLivingBase", "MixinEntityPlayerSP", "MixinGameRenderer", + "MixinGuiChat", "MixinGuiScreen", "MixinItemStack", "MixinMinecraft", diff --git a/src/main/java/baritone/command/BaritoneChatControl.java b/src/main/java/baritone/command/BaritoneChatControl.java index 79b8ee255..d5fba9645 100644 --- a/src/main/java/baritone/command/BaritoneChatControl.java +++ b/src/main/java/baritone/command/BaritoneChatControl.java @@ -146,11 +146,11 @@ public boolean runCommand(String msg) { } @Override - public void onPreTabComplete(TabCompleteEvent.Pre event) { + public void onPreTabComplete(TabCompleteEvent event) { if (!settings.prefixControl.value) { return; } - String prefix = event.prefix.get(); + String prefix = event.prefix; String commandPrefix = settings.prefix.value; if (!prefix.startsWith(commandPrefix)) { return; @@ -161,7 +161,7 @@ public void onPreTabComplete(TabCompleteEvent.Pre event) { if (args.size() == 1) { stream = stream.map(x -> commandPrefix + x); } - event.completions.set(stream.toArray(String[]::new)); + event.completions = stream.toArray(String[]::new); } public Stream tabComplete(String msg) { diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index f03378562..c2da8548e 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -70,15 +70,10 @@ public final void onSendChatMessage(ChatEvent event) { } @Override - public void onPreTabComplete(TabCompleteEvent.Pre event) { + public void onPreTabComplete(TabCompleteEvent event) { listeners.forEach(l -> l.onPreTabComplete(event)); } - @Override - public void onPostTabComplete(TabCompleteEvent.Post event) { - listeners.forEach(l -> l.onPostTabComplete(event)); - } - @Override public final void onChunkEvent(ChunkEvent event) { EventState state = event.getState(); diff --git a/src/main/java/baritone/utils/accessor/ITabCompleter.java b/src/main/java/baritone/utils/accessor/ITabCompleter.java deleted file mode 100644 index e187c3e6c..000000000 --- a/src/main/java/baritone/utils/accessor/ITabCompleter.java +++ /dev/null @@ -1,10 +0,0 @@ -package baritone.utils.accessor; - -public interface ITabCompleter { - - String getPrefix(); - - void setPrefix(String prefix); - - boolean onGuiChatSetCompletions(String[] newCompl); -} From 8fa2dac261eae7f20b259702fdb9aa35cba85b9a Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 11 Oct 2019 17:59:12 -0500 Subject: [PATCH 079/935] This should fix tab complete scuff --- src/launch/java/baritone/launch/mixins/MixinGuiChat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinGuiChat.java b/src/launch/java/baritone/launch/mixins/MixinGuiChat.java index 570847e9c..1c4b6d909 100644 --- a/src/launch/java/baritone/launch/mixins/MixinGuiChat.java +++ b/src/launch/java/baritone/launch/mixins/MixinGuiChat.java @@ -79,7 +79,7 @@ private void preUpdateSuggestion(CallbackInfo ci) { if (event.completions.length == 0) { this.pendingSuggestions = Suggestions.empty(); } else { - int offset = this.inputField.getCursorPosition(); + int offset = this.inputField.getText().endsWith(" ") ? this.inputField.getCursorPosition() : 0; List suggestionList = Stream.of(event.completions) .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s)) From c1fe588de4a0b09263a38f25376e3b3e57d0aa7d Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 11 Oct 2019 18:08:39 -0500 Subject: [PATCH 080/935] Leijurv is crying and shaking right now --- src/launch/java/baritone/launch/mixins/MixinGuiChat.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinGuiChat.java b/src/launch/java/baritone/launch/mixins/MixinGuiChat.java index 1c4b6d909..8d4c867e5 100644 --- a/src/launch/java/baritone/launch/mixins/MixinGuiChat.java +++ b/src/launch/java/baritone/launch/mixins/MixinGuiChat.java @@ -79,7 +79,9 @@ private void preUpdateSuggestion(CallbackInfo ci) { if (event.completions.length == 0) { this.pendingSuggestions = Suggestions.empty(); } else { - int offset = this.inputField.getText().endsWith(" ") ? this.inputField.getCursorPosition() : 0; + int offset = this.inputField.getText().endsWith(" ") + ? this.inputField.getCursorPosition() + : this.inputField.getText().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes List suggestionList = Stream.of(event.completions) .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s)) From 861ee5049a6ae6d2afa2eec364a32a0182f9d06f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 11 Oct 2019 16:15:38 -0700 Subject: [PATCH 081/935] unscuff --- src/api/java/baritone/api/command/datatypes/NearbyPlayer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java index 9d9473f58..e0e4f8d6d 100644 --- a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java +++ b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java @@ -18,8 +18,8 @@ package baritone.api.command.datatypes; import baritone.api.IBaritone; -import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.text.ITextComponent; @@ -37,7 +37,7 @@ public enum NearbyPlayer implements IDatatypeFor { public EntityPlayer get(IDatatypeContext ctx) throws CommandException { final String username = ctx.getConsumer().getString(); return getPlayers(ctx).stream() - .filter(s -> s.getName().toString().equalsIgnoreCase(username)) + .filter(s -> s.getName().getString().equalsIgnoreCase(username)) .findFirst().orElse(null); } From 105c7d438a45bf81cfc3acee2b74bf0219608c06 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 11 Oct 2019 17:29:27 -0700 Subject: [PATCH 082/935] v1.3.5 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 641d910ef..25be6d665 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.3.4' +version '1.3.5' buildscript { repositories { From c528dba0ea7f8adff55435a164bbd4e5443ddacb Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 11 Oct 2019 17:52:11 -0700 Subject: [PATCH 083/935] v1.4.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d34748330..e1f8f4ae0 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.4.1' +version '1.4.2' buildscript { repositories { From 05b5894348a1329a8e58a49f81543e507616343f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 13 Oct 2019 10:53:25 -0700 Subject: [PATCH 084/935] a much better way to deal with this --- src/api/java/baritone/api/utils/BlockOptionalMeta.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 1af94e354..85408ac95 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -21,7 +21,6 @@ import com.google.common.collect.ImmutableSet; import io.netty.util.concurrent.ThreadPerTaskExecutor; import net.minecraft.block.*; -import net.minecraft.client.Minecraft; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.resources.*; @@ -296,10 +295,7 @@ public static LootTableManager getManager() { return manager; } - private static List drops(Block b) { - if (!Minecraft.getInstance().isOnExecutionThread()) { - throw new IllegalStateException(); - } + private static synchronized List drops(Block b) { return drops.computeIfAbsent(b, block -> { ResourceLocation lootTableLocation = block.getLootTable(); if (lootTableLocation == LootTables.EMPTY) { From 214225c08d9d79cfd1870bbdcaaf0284cde7b025 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 13 Oct 2019 22:53:05 -0700 Subject: [PATCH 085/935] v1.4.3 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e1f8f4ae0..f3844ab91 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.4.2' +version '1.4.3' buildscript { repositories { From e3d3407de5b1f2dfda8d3a476fdd4a13e1fa6e43 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 31 Dec 2019 19:44:44 -0600 Subject: [PATCH 086/935] Remove normalizations from BlockOptionalMeta --- .../baritone/api/utils/BlockOptionalMeta.java | 157 ------------------ 1 file changed, 157 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 936b56e12..d5ecb395d 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -42,7 +42,6 @@ public final class BlockOptionalMeta { private final ImmutableSet stateHashes; private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); - private static final Map normalizations; public BlockOptionalMeta(@Nonnull Block block) { this.block = block; @@ -72,162 +71,6 @@ public BlockOptionalMeta(@Nonnull String selector) { stackHashes = getStackHashes(blockstates); } - static { - Map _normalizations = new HashMap<>(); - Consumer put = instance -> _normalizations.put(instance.getClass(), instance); - put.accept(EnumFacing.NORTH); - put.accept(EnumFacing.Axis.Y); - put.accept(Half.BOTTOM); - put.accept(StairsShape.STRAIGHT); - put.accept(AttachFace.FLOOR); - put.accept(DoubleBlockHalf.UPPER); - put.accept(SlabType.BOTTOM); - put.accept(DoorHingeSide.LEFT); - put.accept(BedPart.HEAD); - put.accept(RailShape.NORTH_SOUTH); - _normalizations.put(BlockBanner.ROTATION, 0); - _normalizations.put(BlockBed.OCCUPIED, false); - _normalizations.put(BlockBrewingStand.HAS_BOTTLE[0], false); - _normalizations.put(BlockBrewingStand.HAS_BOTTLE[1], false); - _normalizations.put(BlockBrewingStand.HAS_BOTTLE[2], false); - _normalizations.put(BlockButton.POWERED, false); - // _normalizations.put(BlockCactus.AGE, 0); - // _normalizations.put(BlockCauldron.LEVEL, 0); - // _normalizations.put(BlockChorusFlower.AGE, 0); - _normalizations.put(BlockChorusPlant.NORTH, false); - _normalizations.put(BlockChorusPlant.EAST, false); - _normalizations.put(BlockChorusPlant.SOUTH, false); - _normalizations.put(BlockChorusPlant.WEST, false); - _normalizations.put(BlockChorusPlant.UP, false); - _normalizations.put(BlockChorusPlant.DOWN, false); - // _normalizations.put(BlockCocoa.AGE, 0); - // _normalizations.put(BlockCrops.AGE, 0); - _normalizations.put(BlockDirtSnowy.SNOWY, false); - _normalizations.put(BlockDoor.OPEN, false); - _normalizations.put(BlockDoor.POWERED, false); - // _normalizations.put(BlockFarmland.MOISTURE, 0); - _normalizations.put(BlockFence.NORTH, false); - _normalizations.put(BlockFence.EAST, false); - _normalizations.put(BlockFence.WEST, false); - _normalizations.put(BlockFence.SOUTH, false); - // _normalizations.put(BlockFenceGate.POWERED, false); - // _normalizations.put(BlockFenceGate.IN_WALL, false); - _normalizations.put(BlockFire.AGE, 0); - _normalizations.put(BlockFire.NORTH, false); - _normalizations.put(BlockFire.EAST, false); - _normalizations.put(BlockFire.SOUTH, false); - _normalizations.put(BlockFire.WEST, false); - _normalizations.put(BlockFire.UP, false); - // _normalizations.put(BlockFrostedIce.AGE, 0); - _normalizations.put(BlockGrass.SNOWY, false); - // _normalizations.put(BlockHopper.ENABLED, true); - // _normalizations.put(BlockLever.POWERED, false); - // _normalizations.put(BlockLiquid.LEVEL, 0); - // _normalizations.put(BlockMycelium.SNOWY, false); - // _normalizations.put(BlockNetherWart.AGE, false); - _normalizations.put(BlockLeaves.DISTANCE, false); - // _normalizations.put(BlockLeaves.DECAYABLE, false); - // _normalizations.put(BlockObserver.POWERED, false); - _normalizations.put(BlockPane.NORTH, false); - _normalizations.put(BlockPane.EAST, false); - _normalizations.put(BlockPane.WEST, false); - _normalizations.put(BlockPane.SOUTH, false); - // _normalizations.put(BlockPistonBase.EXTENDED, false); - // _normalizations.put(BlockPressurePlate.POWERED, false); - // _normalizations.put(BlockPressurePlateWeighted.POWER, false); - // _normalizations.put(BlockRailDetector.POWERED, false); - // _normalizations.put(BlockRailPowered.POWERED, false); - _normalizations.put(BlockRedstoneWire.NORTH, false); - _normalizations.put(BlockRedstoneWire.EAST, false); - _normalizations.put(BlockRedstoneWire.SOUTH, false); - _normalizations.put(BlockRedstoneWire.WEST, false); - // _normalizations.put(BlockReed.AGE, false); - _normalizations.put(BlockSapling.STAGE, 0); - _normalizations.put(BlockStandingSign.ROTATION, 0); - _normalizations.put(BlockStem.AGE, 0); - _normalizations.put(BlockTripWire.NORTH, false); - _normalizations.put(BlockTripWire.EAST, false); - _normalizations.put(BlockTripWire.WEST, false); - _normalizations.put(BlockTripWire.SOUTH, false); - _normalizations.put(BlockVine.NORTH, false); - _normalizations.put(BlockVine.EAST, false); - _normalizations.put(BlockVine.SOUTH, false); - _normalizations.put(BlockVine.WEST, false); - _normalizations.put(BlockVine.UP, false); - _normalizations.put(BlockWall.UP, false); - _normalizations.put(BlockWall.NORTH, false); - _normalizations.put(BlockWall.EAST, false); - _normalizations.put(BlockWall.WEST, false); - _normalizations.put(BlockWall.SOUTH, false); - normalizations = Collections.unmodifiableMap(_normalizations); - } - - public static , P extends IProperty> P castToIProperty(Object value) { - //noinspection unchecked - return (P) value; - } - - public static , P extends IProperty> C castToIPropertyValue(P iproperty, Object value) { - //noinspection unchecked - return (C) value; - } - - /** - * Normalizes the specified blockstate by setting meta-affecting properties which - * are not being targeted by the meta parameter to their default values. - *

- * For example, block variant/color is the primary target for the meta value, so properties - * such as rotation/facing direction will be set to default values in order to nullify - * the effect that they have on the state's meta value. - * - * @param state The state to normalize - * @return The normalized block state - */ - public static IBlockState normalize(IBlockState state) { - IBlockState newState = state; - - for (IProperty property : state.getProperties()) { - Class valueClass = property.getValueClass(); - if (normalizations.containsKey(property)) { - try { - newState = newState.with( - castToIProperty(property), - castToIPropertyValue(property, normalizations.get(property)) - ); - } catch (IllegalArgumentException ignored) {} - } else if (normalizations.containsKey(state.get(property))) { - try { - newState = newState.with( - castToIProperty(property), - castToIPropertyValue(property, normalizations.get(state.get(property))) - ); - } catch (IllegalArgumentException ignored) {} - } else if (normalizations.containsKey(valueClass)) { - try { - newState = newState.with( - castToIProperty(property), - castToIPropertyValue(property, normalizations.get(valueClass)) - ); - } catch (IllegalArgumentException ignored) {} - } - } - - return newState; - } - - /** - * Evaluate the target meta value for the specified state. The target meta value is - * most often that which is influenced by the variant/color property of the block state. - * - * @see #normalize(IBlockState) - * - * @param state The state to check - * @return The target meta of the state - */ - public static int stateMeta(IBlockState state) { - return state.hashCode(); - } - private static Set getStates(@Nonnull Block block) { return new HashSet<>(block.getStateContainer().getValidStates()); } From dd76d2eabc227ded77b0b1a451abc12ce487b6d9 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 4 Jan 2020 21:58:21 -0800 Subject: [PATCH 087/935] v1.3.6 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a97f9b483..183eb5648 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.3.5' +version '1.3.6' buildscript { repositories { From 760ac5dd8f01478e12dad72cf60e85ae14c449c9 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 4 Jan 2020 21:58:55 -0800 Subject: [PATCH 088/935] v1.4.4 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c74538e35..2365ba5cf 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.4.3' +version '1.4.4' buildscript { repositories { From 80952e091db6aff7f7662da859b83bb0bd86b434 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 9 Jan 2020 17:15:05 -0800 Subject: [PATCH 089/935] comment out anything that isn't instantly obvious how to fix (e.g. anything involving rendering) --- build.gradle | 6 +- .../baritone/api/utils/BlockOptionalMeta.java | 5 +- .../baritone/api/utils/IPlayerContext.java | 6 +- src/api/java/baritone/api/utils/VecUtils.java | 4 +- .../launch/mixins/MixinChatScreen.java | 4 +- .../mixins/MixinEntityRenderManager.java | 14 ++--- .../launch/mixins/MixinGameRenderer.java | 4 +- .../launch/mixins/MixinMinecraft.java | 19 ++---- ...ainer.java => MixinPalettedContainer.java} | 12 ++-- src/launch/resources/mixins.baritone.json | 2 +- .../baritone/behavior/InventoryBehavior.java | 2 +- .../baritone/behavior/PathingBehavior.java | 4 +- src/main/java/baritone/cache/ChunkPacker.java | 4 +- .../java/baritone/cache/WorldScanner.java | 5 +- .../movement/movements/MovementAscend.java | 6 +- .../movement/movements/MovementDescend.java | 12 ++-- .../movement/movements/MovementDiagonal.java | 2 +- .../movement/movements/MovementDownward.java | 4 +- .../movement/movements/MovementFall.java | 8 +-- .../movement/movements/MovementParkour.java | 8 +-- .../movement/movements/MovementPillar.java | 12 ++-- .../movement/movements/MovementTraverse.java | 13 +++-- .../baritone/pathing/path/PathExecutor.java | 6 +- .../java/baritone/process/BuilderProcess.java | 4 +- .../java/baritone/process/FarmProcess.java | 2 +- .../java/baritone/process/FollowProcess.java | 2 +- .../baritone/utils/BlockStateInterface.java | 4 +- src/main/java/baritone/utils/GuiClick.java | 21 +++---- src/main/java/baritone/utils/IRenderer.java | 58 +++++++++---------- .../java/baritone/utils/PathRenderer.java | 50 ++++++++-------- .../baritone/utils/PlayerMovementInput.java | 4 +- ...Container.java => IPalettedContainer.java} | 2 +- .../format/defaults/MCEditSchematic.java | 2 +- 33 files changed, 146 insertions(+), 165 deletions(-) rename src/launch/java/baritone/launch/mixins/{MixinBlockStateContainer.java => MixinPalettedContainer.java} (78%) rename src/main/java/baritone/utils/accessor/{IBlockStateContainer.java => IPalettedContainer.java} (95%) diff --git a/build.gradle b/build.gradle index 2365ba5cf..803ace85d 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.4.4' +version '1.5.0' buildscript { repositories { @@ -82,7 +82,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20190814-1.14.3' + mappings channel: 'snapshot', version: '20190719-1.14.3' reobfMappings 'notch' runs { @@ -138,7 +138,7 @@ repositories { } dependencies { - minecraft 'com.github.ImpactDevelopment:Vanilla:1.14.4' + minecraft 'com.github.ImpactDevelopment:Vanilla:1.15.1' runtime launchCompile('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index a1b38cca1..ea79192a4 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -20,7 +20,8 @@ import baritone.api.utils.accessor.IItemStack; import com.google.common.collect.ImmutableSet; import io.netty.util.concurrent.ThreadPerTaskExecutor; -import net.minecraft.block.*; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.resources.*; @@ -143,7 +144,7 @@ public static LootTableManager getManager() { rpl.reloadPacksFromFinders(); IResourcePack thePack = ((ResourcePackInfo) rpl.getAllPacks().iterator().next()).getResourcePack(); IReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(ResourcePackType.SERVER_DATA, null); - manager = new LootTableManager(); + manager = new LootTableManager(new LootPredicateManager()); resourceManager.addReloadListener(manager); try { resourceManager.reloadResourcesAndThen(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), Collections.singletonList(thePack), CompletableFuture.completedFuture(Unit.INSTANCE)).get(); diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 872e331e2..765bfeb04 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -56,7 +56,7 @@ default Stream entitiesStream() { default BetterBlockPos playerFeet() { // TODO find a better way to deal with soul sand!!!!! - BetterBlockPos feet = new BetterBlockPos(player().posX, player().posY + 0.1251, player().posZ); + BetterBlockPos feet = new BetterBlockPos(player().getPositionVec().x, player().getPositionVec().y + 0.1251, player().getPositionVec().z); // sometimes when calling this from another thread or while world is null, it'll throw a NullPointerException // that causes the game to immediately crash @@ -76,11 +76,11 @@ default BetterBlockPos playerFeet() { } default Vec3d playerFeetAsVec() { - return new Vec3d(player().posX, player().posY, player().posZ); + return new Vec3d(player().getPositionVec().x, player().getPositionVec().y, player().getPositionVec().z); } default Vec3d playerHead() { - return new Vec3d(player().posX, player().posY + player().getEyeHeight(), player().posZ); + return new Vec3d(player().getPositionVec().x, player().getPositionVec().y + player().getEyeHeight(), player().getPositionVec().z); } default Rotation playerRotations() { diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index dfc71fc38..422a7efc8 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -105,7 +105,7 @@ public static double distanceToCenter(BlockPos pos, double x, double y, double z * @see #getBlockPosCenter(BlockPos) */ public static double entityDistanceToCenter(Entity entity, BlockPos pos) { - return distanceToCenter(pos, entity.posX, entity.posY, entity.posZ); + return distanceToCenter(pos, entity.getPositionVec().x, entity.getPositionVec().y, entity.getPositionVec().z); } /** @@ -118,6 +118,6 @@ public static double entityDistanceToCenter(Entity entity, BlockPos pos) { * @see #getBlockPosCenter(BlockPos) */ public static double entityFlatDistanceToCenter(Entity entity, BlockPos pos) { - return distanceToCenter(pos, entity.posX, pos.getY() + 0.5, entity.posZ); + return distanceToCenter(pos, entity.getPositionVec().x, pos.getY() + 0.5, entity.getPositionVec().z); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinChatScreen.java b/src/launch/java/baritone/launch/mixins/MixinChatScreen.java index fe52723df..238546bd1 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChatScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinChatScreen.java @@ -45,7 +45,7 @@ public class MixinChatScreen { @Shadow protected TextFieldWidget inputField; - +/* @Shadow @Final protected List commandUsage; @@ -95,5 +95,5 @@ private void preUpdateSuggestion(CallbackInfo ci) { this.pendingSuggestions.complete(suggestions); } } - } + }*/ } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java b/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java index 6d4058c98..d443095c6 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java @@ -20,29 +20,23 @@ import baritone.utils.accessor.IEntityRenderManager; import net.minecraft.client.renderer.entity.EntityRendererManager; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; @Mixin(EntityRendererManager.class) public class MixinEntityRenderManager implements IEntityRenderManager { - @Shadow - private double renderPosX; - @Shadow - private double renderPosY; - @Shadow - private double renderPosZ; + @Override public double renderPosX() { - return renderPosX; + return ((EntityRendererManager) (Object) this).info.getProjectedView().x; } @Override public double renderPosY() { - return renderPosY; + return ((EntityRendererManager) (Object) this).info.getProjectedView().y; } @Override public double renderPosZ() { - return renderPosZ; + return ((EntityRendererManager) (Object) this).info.getProjectedView().z; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java index fb279ba0f..ac1ff5aae 100644 --- a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java @@ -30,14 +30,14 @@ public class MixinGameRenderer { @Inject( - method = "updateCameraAndRender(FJ)V", + method = "updateCameraAndRender", at = @At( value = "INVOKE_STRING", target = "Lnet/minecraft/profiler/IProfiler;endStartSection(Ljava/lang/String;)V", args = {"ldc=hand"} ) ) - private void renderWorldPass(float partialTicks, long finishTimeNano, CallbackInfo ci) { + private void renderWorldPass(float partialTicks, long finishTimeNano, boolean idfk, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks)); } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 12f64bf21..08444bb09 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -19,7 +19,6 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; -import baritone.api.event.events.BlockInteractEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; @@ -28,10 +27,6 @@ import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.world.ClientWorld; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockRayTraceResult; import org.spongepowered.asm.lib.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,7 +34,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import java.util.function.BiFunction; @@ -56,7 +50,7 @@ public class MixinMinecraft { public ClientWorld world; @Inject( - method = "init", + method = "", at = @At("RETURN") ) private void postInit(CallbackInfo ci) { @@ -64,11 +58,8 @@ private void postInit(CallbackInfo ci) { } @Inject( - method = "init", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/Minecraft.startTimerHackThread()V" - ) + method = "startTimerHackThread", + at = @At("HEAD") ) private void preInit(CallbackInfo ci) { BaritoneAutoTest.INSTANCE.onPreInit(); @@ -147,7 +138,7 @@ private boolean passEvents(Screen screen) { // allow user input is only the primary baritone return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().getCurrent() != null && player != null) || screen.passEvents; } - +/* @Inject( method = "rightClickMouse", at = @At( @@ -159,5 +150,5 @@ private boolean passEvents(Screen screen) { private void onBlockUse(CallbackInfo ci, Hand var1[], int var2, int var3, Hand enumhand, ItemStack itemstack, BlockRayTraceResult raytrace, int i, ActionResultType enumactionresult) { // rightClickMouse is only for the main player BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(raytrace.getPos(), BlockInteractEvent.Type.USE)); - } + }*/ } diff --git a/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java b/src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java similarity index 78% rename from src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java rename to src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java index d6e223d99..c9f9e35c0 100644 --- a/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java +++ b/src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java @@ -18,22 +18,22 @@ package baritone.launch.mixins; import baritone.utils.accessor.IBitArray; -import baritone.utils.accessor.IBlockStateContainer; +import baritone.utils.accessor.IPalettedContainer; import net.minecraft.block.BlockState; import net.minecraft.util.BitArray; -import net.minecraft.world.chunk.BlockStateContainer; -import net.minecraft.world.chunk.IBlockStatePalette; +import net.minecraft.util.palette.IPalette; +import net.minecraft.util.palette.PalettedContainer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -@Mixin(BlockStateContainer.class) -public abstract class MixinBlockStateContainer implements IBlockStateContainer { +@Mixin(PalettedContainer.class) +public abstract class MixinPalettedContainer implements IPalettedContainer { @Shadow protected BitArray storage; @Shadow - protected IBlockStatePalette palette; + protected IPalette palette; @Override public BlockState getAtPalette(int index) { diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 9d0d1b600..cb7195d02 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -9,7 +9,6 @@ }, "client": [ "MixinBitArray", - "MixinBlockStateContainer", "MixinChatScreen", "MixinChunkArray", "MixinClientChunkProvider", @@ -23,6 +22,7 @@ "MixinLootContext", "MixinMinecraft", "MixinNetworkManager", + "MixinPalettedContainer", "MixinPlayerController", "MixinScreen" ] diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 97172d309..e142c99e7 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -137,7 +137,7 @@ public boolean hasGenericThrowaway() { public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); - if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vec3d(ctx.player().posX, ctx.player().posY, ctx.player().posZ), Direction.UP, ctx.playerFeet(), false)) {}))))) { + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vec3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { return true; // gotem } if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && ((BlockItem) stack.getItem()).getBlock().equals(maybe.getBlock()))) { diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 86fd95055..8ed7ce218 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -381,8 +381,8 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); if (!MovementHelper.canWalkOn(ctx, feet.down())) { if (ctx.player().onGround) { - double playerX = ctx.player().posX; - double playerZ = ctx.player().posZ; + double playerX = ctx.player().getPositionVec().x; + double playerZ = ctx.player().getPositionVec().z; ArrayList closest = new ArrayList<>(); for (int dx = -1; dx <= 1; dx++) { for (int dz = -1; dz <= 1; dz++) { diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 7387dc1d2..fda9116b8 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -23,7 +23,7 @@ import net.minecraft.block.*; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.chunk.BlockStateContainer; +import net.minecraft.util.palette.PalettedContainer; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkSection; @@ -59,7 +59,7 @@ public static CachedChunk pack(Chunk chunk) { // since a bitset is initialized to all zero, and air is saved as zeros continue; } - BlockStateContainer bsc = extendedblockstorage.getData(); + PalettedContainer bsc = extendedblockstorage.getData(); int yReal = y0 << 4; // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; // for better cache locality, iterate in that order diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 35297a470..b2c29415b 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -22,7 +22,7 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; -import baritone.utils.accessor.IBlockStateContainer; +import baritone.utils.accessor.IPalettedContainer; import net.minecraft.block.BlockState; import net.minecraft.client.multiplayer.ClientChunkProvider; import net.minecraft.util.math.BlockPos; @@ -30,7 +30,6 @@ import net.minecraft.world.chunk.AbstractChunkProvider; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkSection; -import net.minecraft.world.chunk.IChunk; import java.util.*; import java.util.stream.IntStream; @@ -156,7 +155,7 @@ private boolean scanChunkInto(int chunkX, int chunkZ, Chunk chunk, BlockOptional continue; } int yReal = y0 << 4; - IBlockStateContainer bsc = (IBlockStateContainer) section.getData(); + IPalettedContainer bsc = (IPalettedContainer) section.getData(); // storageArray uses an optimized algorithm that's faster than getAt // creating this array and then using getAtPalette is faster than even getFast(int index) int[] storage = bsc.storageArray(); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index cd36cf615..9313aed0c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -176,7 +176,7 @@ public MovementState updateState(MovementState state) { ticksWithoutPlacement++; if (MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), false) == PlaceResult.READY_TO_PLACE) { state.setInput(Input.SNEAK, true); - if (ctx.player().isSneaking()) { + if (ctx.player().movementInput.field_228350_h_) { state.setInput(Input.CLICK_RIGHT, true); } } @@ -199,8 +199,8 @@ public MovementState updateState(MovementState state) { int xAxis = Math.abs(src.getX() - dest.getX()); // either 0 or 1 int zAxis = Math.abs(src.getZ() - dest.getZ()); // either 0 or 1 - double flatDistToNext = xAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().posX) + zAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().posZ); - double sideDist = zAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().posX) + xAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().posZ); + double flatDistToNext = xAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().getPositionVec().x) + zAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().getPositionVec().z); + double sideDist = zAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().getPositionVec().x) + xAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().getPositionVec().z); double lateralMotion = xAxis * ctx.player().getMotion().z + zAxis * ctx.player().getMotion().x; if (Math.abs(lateralMotion) > 0.1) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 5d5e39c17..da74dd792 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -212,11 +212,11 @@ public MovementState updateState(MovementState state) { BlockPos playerFeet = ctx.playerFeet(); BlockPos fakeDest = new BlockPos(dest.getX() * 2 - src.getX(), dest.getY(), dest.getZ() * 2 - src.getZ()); - if ((playerFeet.equals(dest) || playerFeet.equals(fakeDest)) && (MovementHelper.isLiquid(ctx, dest) || ctx.player().posY - dest.getY() < 0.5)) { // lilypads + if ((playerFeet.equals(dest) || playerFeet.equals(fakeDest)) && (MovementHelper.isLiquid(ctx, dest) || ctx.player().getPositionVec().y - dest.getY() < 0.5)) { // lilypads // Wait until we're actually on the ground before saying we're done because sometimes we continue to fall if the next action starts immediately return state.setStatus(MovementStatus.SUCCESS); /* else { - // System.out.println(player().posY + " " + playerFeet.getY() + " " + (player().posY - playerFeet.getY())); + // System.out.println(player().getPositionVec().y + " " + playerFeet.getY() + " " + (player().getPositionVec().y - playerFeet.getY())); }*/ } if (safeMode()) { @@ -231,11 +231,11 @@ public MovementState updateState(MovementState state) { )).setInput(Input.MOVE_FORWARD, true); return state; } - double diffX = ctx.player().posX - (dest.getX() + 0.5); - double diffZ = ctx.player().posZ - (dest.getZ() + 0.5); + double diffX = ctx.player().getPositionVec().x - (dest.getX() + 0.5); + double diffZ = ctx.player().getPositionVec().z - (dest.getZ() + 0.5); double ab = Math.sqrt(diffX * diffX + diffZ * diffZ); - double x = ctx.player().posX - (src.getX() + 0.5); - double z = ctx.player().posZ - (src.getZ() + 0.5); + double x = ctx.player().getPositionVec().x - (src.getX() + 0.5); + double z = ctx.player().getPositionVec().z - (src.getZ() + 0.5); double fromStart = Math.sqrt(x * x + z * z); if (!playerFeet.equals(dest) || ab > 0.25) { if (numTicks++ < 20 && fromStart < 1.25) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index bff896b68..417d25a20 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -226,7 +226,7 @@ public MovementState updateState(MovementState state) { } else if (!playerInValidPosition() && !(MovementHelper.isLiquid(ctx, src) && getValidPositions().contains(ctx.playerFeet().up()))) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (dest.y > src.y && ctx.player().posY < src.y + 0.1 && ctx.player().collidedHorizontally) { + if (dest.y > src.y && ctx.player().getPositionVec().y < src.y + 0.1 && ctx.player().collidedHorizontally) { state.setInput(Input.JUMP, true); } if (sprint()) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 89c692e85..44afbb763 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -84,8 +84,8 @@ public MovementState updateState(MovementState state) { } else if (!playerInValidPosition()) { return state.setStatus(MovementStatus.UNREACHABLE); } - double diffX = ctx.player().posX - (dest.getX() + 0.5); - double diffZ = ctx.player().posZ - (dest.getZ() + 0.5); + double diffX = ctx.player().getPositionVec().x - (dest.getX() + 0.5); + double diffZ = ctx.player().getPositionVec().z - (dest.getZ() + 0.5); double ab = Math.sqrt(diffX * diffX + diffZ * diffZ); if (numTicks++ < 10 && ab < 0.2) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 0ee9b778e..9062cb50a 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -100,7 +100,7 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (ctx.player().posY - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().onGround) { + if (ctx.player().getPositionVec().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().onGround) { ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER); targetRotation = new Rotation(toDest.getYaw(), 90.0F); @@ -115,7 +115,7 @@ public MovementState updateState(MovementState state) { } else { state.setTarget(new MovementTarget(toDest, false)); } - if (playerFeet.equals(dest) && (ctx.player().posY - playerFeet.getY() < 0.094 || isWater)) { // 0.094 because lilypads + if (playerFeet.equals(dest) && (ctx.player().getPositionVec().y - playerFeet.getY() < 0.094 || isWater)) { // 0.094 because lilypads if (isWater) { // only match water, not flowing water (which we cannot pick up with a bucket) if (PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY))) { ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY); @@ -134,7 +134,7 @@ public MovementState updateState(MovementState state) { } } Vec3d destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) - if (Math.abs(ctx.player().posX + ctx.player().getMotion().x - destCenter.x) > 0.1 || Math.abs(ctx.player().posZ + ctx.player().getMotion().z - destCenter.z) > 0.1) { + if (Math.abs(ctx.player().getPositionVec().x + ctx.player().getMotion().x - destCenter.x) > 0.1 || Math.abs(ctx.player().getPositionVec().z + ctx.player().getMotion().z - destCenter.z) > 0.1) { if (!ctx.player().onGround && Math.abs(ctx.player().getMotion().y) > 0.4) { state.setInput(Input.SNEAK, true); } @@ -144,7 +144,7 @@ public MovementState updateState(MovementState state) { if (avoid == null) { avoid = src.subtract(dest); } else { - double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().posX)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().posZ)); + double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().getPositionVec().x)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().getPositionVec().z)); if (dist < 0.6) { state.setInput(Input.MOVE_FORWARD, true); } else if (!ctx.player().onGround) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index dcbede8d8..2f894e01e 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -246,19 +246,19 @@ public MovementState updateState(MovementState state) { // but i did it anyway return state.setStatus(MovementStatus.SUCCESS); } - if (ctx.player().posY - ctx.playerFeet().getY() < 0.094) { // lilypads + if (ctx.player().getPositionVec().y - ctx.playerFeet().getY() < 0.094) { // lilypads state.setStatus(MovementStatus.SUCCESS); } } else if (!ctx.playerFeet().equals(src)) { - if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().posY - src.y > 0.0001) { + if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().getPositionVec().y - src.y > 0.0001) { if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().onGround && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true) == PlaceResult.READY_TO_PLACE) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory state.setInput(Input.CLICK_RIGHT, true); } // prevent jumping too late by checking for ascend if (dist == 3 && !ascend) { // this is a 2 block gap, dest = src + direction * 3 - double xDiff = (src.x + 0.5) - ctx.player().posX; - double zDiff = (src.z + 0.5) - ctx.player().posZ; + double xDiff = (src.x + 0.5) - ctx.player().getPositionVec().x; + double zDiff = (src.z + 0.5) - ctx.player().getPositionVec().z; double distFromStart = Math.max(Math.abs(xDiff), Math.abs(zDiff)); if (distFromStart < 0.7) { return state; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 4510d4254..bb80645c5 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -172,7 +172,7 @@ public MovementState updateState(MovementState state) { // stay centered while swimming up a water column state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()), false)); Vec3d destCenter = VecUtils.getBlockPosCenter(dest); - if (Math.abs(ctx.player().posX - destCenter.x) > 0.2 || Math.abs(ctx.player().posZ - destCenter.z) > 0.2) { + if (Math.abs(ctx.player().getPositionVec().x - destCenter.x) > 0.2 || Math.abs(ctx.player().getPositionVec().z - destCenter.z) > 0.2) { state.setInput(Input.MOVE_FORWARD, true); } if (ctx.playerFeet().equals(dest)) { @@ -218,11 +218,11 @@ public MovementState updateState(MovementState state) { } - state.setInput(Input.SNEAK, ctx.player().posY > dest.getY() || ctx.player().posY < src.getY() + 0.2D); // delay placement by 1 tick for ncp compatibility + state.setInput(Input.SNEAK, ctx.player().getPositionVec().y > dest.getY() || ctx.player().getPositionVec().y < src.getY() + 0.2D); // delay placement by 1 tick for ncp compatibility // since (lower down) we only right click once player.isSneaking, and that happens the tick after we request to sneak - double diffX = ctx.player().posX - (dest.getX() + 0.5); - double diffZ = ctx.player().posZ - (dest.getZ() + 0.5); + double diffX = ctx.player().getPositionVec().x - (dest.getX() + 0.5); + double diffZ = ctx.player().getPositionVec().z - (dest.getZ() + 0.5); double dist = Math.sqrt(diffX * diffX + diffZ * diffZ); double flatMotion = Math.sqrt(ctx.player().getMotion().x * ctx.player().getMotion().x + ctx.player().getMotion().z * ctx.player().getMotion().z); if (dist > 0.17) {//why 0.17? because it seemed like a good number, that's why @@ -236,7 +236,7 @@ public MovementState updateState(MovementState state) { state.setTarget(new MovementState.MovementTarget(rotation, true)); } else if (flatMotion < 0.05) { // If our Y coordinate is above our goal, stop jumping - state.setInput(Input.JUMP, ctx.player().posY < dest.getY()); + state.setInput(Input.JUMP, ctx.player().getPositionVec().y < dest.getY()); } @@ -251,7 +251,7 @@ public MovementState updateState(MovementState state) { state.setInput(Input.JUMP, false); // breaking is like 5x slower when you're jumping state.setInput(Input.CLICK_LEFT, true); blockIsThere = false; - } else if (ctx.player().isSneaking() && (ctx.isLookingAt(src.down()) || ctx.isLookingAt(src)) && ctx.player().posY > dest.getY() + 0.1) { + } else if (ctx.player().movementInput.field_228350_h_ && (ctx.isLookingAt(src.down()) || ctx.isLookingAt(src)) && ctx.player().getPositionVec().y > dest.getY() + 0.1) { state.setInput(Input.CLICK_RIGHT, true); } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 909405bc9..097541f46 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -175,7 +175,7 @@ public MovementState updateState(MovementState state) { return state; } // and we aren't already pressed up against the block - double dist = Math.max(Math.abs(ctx.player().posX - (dest.getX() + 0.5D)), Math.abs(ctx.player().posZ - (dest.getZ() + 0.5D))); + double dist = Math.max(Math.abs(ctx.player().getPositionVec().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().getPositionVec().z - (dest.getZ() + 0.5D))); if (dist < 0.83) { return state; } @@ -245,7 +245,7 @@ public MovementState updateState(MovementState state) { } Block low = BlockStateInterface.get(ctx, src).getBlock(); Block high = BlockStateInterface.get(ctx, src.up()).getBlock(); - if (ctx.player().posY > src.y + 0.1D && !ctx.player().onGround && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { + if (ctx.player().getPositionVec().y > src.y + 0.1D && !ctx.player().onGround && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { // hitting W could cause us to climb the ladder instead of going forward // wait until we're on the ground return state; @@ -272,21 +272,22 @@ public MovementState updateState(MovementState state) { wasTheBridgeBlockAlwaysThere = false; Block standingOn = BlockStateInterface.get(ctx, feet.down()).getBlock(); if (standingOn.equals(Blocks.SOUL_SAND) || standingOn instanceof SlabBlock) { // see issue #118 - double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().posX), Math.abs(dest.getZ() + 0.5 - ctx.player().posZ)); + double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().getPositionVec().x), Math.abs(dest.getZ() + 0.5 - ctx.player().getPositionVec().z)); if (dist < 0.85) { // 0.5 + 0.3 + epsilon MovementHelper.moveTowards(ctx, state, dest); return state.setInput(Input.MOVE_FORWARD, false) .setInput(Input.MOVE_BACK, true); } } - double dist1 = Math.max(Math.abs(ctx.player().posX - (dest.getX() + 0.5D)), Math.abs(ctx.player().posZ - (dest.getZ() + 0.5D))); + double dist1 = Math.max(Math.abs(ctx.player().getPositionVec().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().getPositionVec().z - (dest.getZ() + 0.5D))); PlaceResult p = MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), false); if ((p == PlaceResult.READY_TO_PLACE || dist1 < 0.6) && !Baritone.settings().assumeSafeWalk.value) { state.setInput(Input.SNEAK, true); } switch (p) { case READY_TO_PLACE: { - if (ctx.player().isSneaking() || Baritone.settings().assumeSafeWalk.value) { + + if (ctx.player().movementInput.field_228350_h_ || Baritone.settings().assumeSafeWalk.value) { state.setInput(Input.CLICK_RIGHT, true); } return state; @@ -319,7 +320,7 @@ public MovementState updateState(MovementState state) { Rotation backToFace = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()); float pitch = backToFace.getPitch(); - double dist2 = Math.max(Math.abs(ctx.player().posX - faceX), Math.abs(ctx.player().posZ - faceZ)); + double dist2 = Math.max(Math.abs(ctx.player().getPositionVec().x - faceX), Math.abs(ctx.player().getPositionVec().z - faceZ)); if (dist2 < 0.29) { // see issue #208 float yaw = RotationUtils.calcRotationFromVec3d(VecUtils.getBlockPosCenter(dest), ctx.playerHead(), ctx.playerRotations()).getYaw(); state.setTarget(new MovementState.MovementTarget(new Rotation(yaw, pitch), true)); diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 451b0bdc1..1400875aa 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -414,7 +414,7 @@ private boolean shouldSprintNextTick() { // playerFeet adds 0.1251 to account for soul sand // farmland is 0.9375 // 0.07 is to account for farmland - if (ctx.player().posY >= center.getY() - 0.07) { + if (ctx.player().getPositionVec().y >= center.getY() - 0.07) { behavior.baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, false); return true; } @@ -485,7 +485,7 @@ private Tuple overrideFall(MovementFall movement) { } private static boolean skipNow(IPlayerContext ctx, IMovement current) { - double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().posZ)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().posX)); + double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().getPositionVec().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().getPositionVec().x)); if (offTarget > 0.1) { return false; } @@ -495,7 +495,7 @@ private static boolean skipNow(IPlayerContext ctx, IMovement current) { return true; } // wait 0.3 - double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().posX)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().posZ)); + double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().getPositionVec().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().getPositionVec().z)); return flatDist > 0.8; } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index f63df6cd5..548579532 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -445,7 +445,7 @@ public int lengthZ() { BetterBlockPos pos = toBreak.get().getA(); baritone.getLookBehavior().updateTarget(rot, true); MovementHelper.switchToBestToolFor(ctx, bcc.get(pos)); - if (ctx.player().isSneaking()) { + if (ctx.player().movementInput.field_228350_h_) { // really horrible bug where a block is visible for breaking while sneaking but not otherwise // so you can't see it, it goes to place something else, sneaks, then the next tick it tries to break // and is unable since it's unsneaked in the intermediary tick @@ -781,7 +781,7 @@ private List approxPlaceable(int size) { continue; } // - result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vec3d(ctx.player().posX, ctx.player().posY, ctx.player().posZ), Direction.UP, ctx.playerFeet(), false)) {}))); + result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vec3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))); // } return result; diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index ab3d55aff..c9d4d62d8 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -282,7 +282,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol - goalz.add(new GoalBlock(new BlockPos(entity.posX, entity.posY + 0.1, entity.posZ))); + goalz.add(new GoalBlock(new BlockPos(entity.getPositionVec().x, entity.getPositionVec().y + 0.1, entity.getPositionVec().z))); } } } diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 4f36e16da..63e280550 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -60,7 +60,7 @@ private Goal towards(Entity following) { pos = new BlockPos(following); } else { GoalXZ g = GoalXZ.fromDirection(following.getPositionVector(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); - pos = new BlockPos(g.getX(), following.posY, g.getZ()); + pos = new BlockPos(g.getX(), following.getPositionVec().y, g.getZ()); } return new GoalNear(pos, Baritone.settings().followRadius.value); } diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 6e4e36e23..60159f322 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -44,7 +44,7 @@ public class BlockStateInterface { private final ClientChunkProvider provider; private final WorldData worldData; protected final IBlockReader world; - public final BlockPos.MutableBlockPos isPassableBlockPos; + public final BlockPos.Mutable isPassableBlockPos; public final IBlockReader access; private Chunk prev = null; @@ -74,7 +74,7 @@ public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedC if (!Minecraft.getInstance().isOnExecutionThread()) { throw new IllegalStateException(); } - this.isPassableBlockPos = new BlockPos.MutableBlockPos(); + this.isPassableBlockPos = new BlockPos.Mutable(); this.access = new BlockStateInterfaceAccessWrapper(this); } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 126de2f19..c3a19f909 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -23,25 +23,19 @@ import baritone.api.pathing.goals.GoalTwoBlocks; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Helper; -import com.mojang.blaze3d.platform.GlStateManager; -import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.event.ClickEvent; import org.lwjgl.BufferUtils; -import org.lwjgl.opengl.GL11; -import java.awt.*; import java.nio.FloatBuffer; import java.nio.IntBuffer; -import java.util.Collections; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; -import static org.lwjgl.opengl.GL11.*; public class GuiClick extends Screen implements Helper { @@ -67,20 +61,21 @@ public boolean isPauseScreen() { public void render(int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHelper.getMouseX(); double my = mc.mouseHelper.getMouseY(); - my = mc.mainWindow.getHeight() - my; + + /*my = mc.mainWindow.getHeight() - my; my *= mc.mainWindow.getFramebufferHeight() / (double) mc.mainWindow.getHeight(); mx *= mc.mainWindow.getFramebufferWidth() / (double) mc.mainWindow.getWidth(); Vec3d near = toWorld(mx, my, 0); Vec3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv if (near != null && far != null) { /// - Vec3d viewerPos = new Vec3d(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); + Vec3d viewerPos = new Vec3d(PathRenderer.getPositionVec().x(), PathRenderer.getPositionVec().y(), PathRenderer.getPositionVec().z()); ClientPlayerEntity player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); RayTraceResult result = player.world.rayTraceBlocks(new RayTraceContext(near.add(viewerPos), far.add(viewerPos), RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, player)); if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { currentMouseOver = ((BlockRayTraceResult) result).getPos(); } - } + }*/ } @Override @@ -115,7 +110,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { } public void onRender() { - GlStateManager.getMatrix(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); + /*GlStateManager.getMatrix(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); GlStateManager.getMatrix(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); GL11.glGetIntegerv(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); @@ -140,7 +135,7 @@ public void onRender() { GlStateManager.enableTexture(); GlStateManager.disableBlend(); } - } + }*/ } private Vec3d toWorld(double x, double y, double z) { diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index ca200bf88..58424f53d 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -40,11 +40,11 @@ public interface IRenderer { static void glColor(Color color, float alpha) { float[] colorComponents = color.getColorComponents(null); - GlStateManager.color4f(colorComponents[0], colorComponents[1], colorComponents[2], alpha); + //GlStateManager.color4f(colorComponents[0], colorComponents[1], colorComponents[2], alpha); } static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { - GlStateManager.enableBlend(); + /*GlStateManager.enableBlend(); GlStateManager.disableLighting(); GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); glColor(color, alpha); @@ -54,7 +54,7 @@ static void startLines(Color color, float alpha, float lineWidth, boolean ignore if (ignoreDepth) { GlStateManager.disableDepthTest(); - } + }*/ } static void startLines(Color color, float lineWidth, boolean ignoreDepth) { @@ -62,14 +62,14 @@ static void startLines(Color color, float lineWidth, boolean ignoreDepth) { } static void endLines(boolean ignoredDepth) { - if (ignoredDepth) { + /*if (ignoredDepth) { GlStateManager.enableDepthTest(); } GlStateManager.depthMask(true); GlStateManager.enableTexture(); GlStateManager.enableLighting(); - GlStateManager.disableBlend(); + GlStateManager.disableBlend();*/ } static void drawAABB(AxisAlignedBB aabb) { @@ -77,32 +77,32 @@ static void drawAABB(AxisAlignedBB aabb) { buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); // bottom - buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); // top - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); // corners - buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); + buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); tessellator.draw(); } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 48fc21b6b..5664a60ed 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -185,13 +185,13 @@ public static void drawLine(double x1, double y1, double z1, double x2, double y boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; buffer.begin(renderPathAsFrickinThingy ? GL_LINE_STRIP : GL_LINES, DefaultVertexFormats.POSITION); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); - buffer.pos(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).endVertex(); + buffer.func_225582_a_(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); + buffer.func_225582_a_(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).endVertex(); if (renderPathAsFrickinThingy) { - buffer.pos(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).endVertex(); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).endVertex(); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); + buffer.func_225582_a_(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).endVertex(); + buffer.func_225582_a_(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).endVertex(); + buffer.func_225582_a_(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); } } @@ -247,10 +247,10 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic Helper.mc.getTextureManager().bindTexture(TEXTURE_BEACON_BEAM); if (settings.renderGoalIgnoreDepth.value) { - GlStateManager.disableDepthTest(); + //GlStateManager.disableDepthTest(); } - BeaconTileEntityRenderer.renderBeamSegment( + /* BeaconTileEntityRenderer.renderBeamSegment( goalPos.getX() - renderPosX, -renderPosY, goalPos.getZ() - renderPosZ, @@ -264,10 +264,10 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic // Arguments filled by the private method lol 0.2D, 0.25D - ); + );*/ if (settings.renderGoalIgnoreDepth.value) { - GlStateManager.enableDepthTest(); + //GlStateManager.enableDepthTest(); } glPopAttrib(); @@ -293,10 +293,10 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic return; } else if (goal instanceof GoalYLevel) { GoalYLevel goalpos = (GoalYLevel) goal; - minX = player.posX - settings.yLevelBoxSize.value - renderPosX; - minZ = player.posZ - settings.yLevelBoxSize.value - renderPosZ; - maxX = player.posX + settings.yLevelBoxSize.value - renderPosX; - maxZ = player.posZ + settings.yLevelBoxSize.value - renderPosZ; + minX = player.getPositionVec().x - settings.yLevelBoxSize.value - renderPosX; + minZ = player.getPositionVec().z - settings.yLevelBoxSize.value - renderPosZ; + maxX = player.getPositionVec().x + settings.yLevelBoxSize.value - renderPosX; + maxZ = player.getPositionVec().z + settings.yLevelBoxSize.value - renderPosZ; minY = ((GoalYLevel) goal).level - renderPosY; maxY = minY + 2; y1 = 1 + y + goalpos.level - renderPosY; @@ -312,14 +312,14 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); - buffer.pos(minX, minY, minZ).endVertex(); - buffer.pos(minX, maxY, minZ).endVertex(); - buffer.pos(maxX, minY, minZ).endVertex(); - buffer.pos(maxX, maxY, minZ).endVertex(); - buffer.pos(maxX, minY, maxZ).endVertex(); - buffer.pos(maxX, maxY, maxZ).endVertex(); - buffer.pos(minX, minY, maxZ).endVertex(); - buffer.pos(minX, maxY, maxZ).endVertex(); + buffer.func_225582_a_(minX, minY, minZ).endVertex(); + buffer.func_225582_a_(minX, maxY, minZ).endVertex(); + buffer.func_225582_a_(maxX, minY, minZ).endVertex(); + buffer.func_225582_a_(maxX, maxY, minZ).endVertex(); + buffer.func_225582_a_(maxX, minY, maxZ).endVertex(); + buffer.func_225582_a_(maxX, maxY, maxZ).endVertex(); + buffer.func_225582_a_(minX, minY, maxZ).endVertex(); + buffer.func_225582_a_(minX, maxY, maxZ).endVertex(); tessellator.draw(); IRenderer.endLines(settings.renderGoalIgnoreDepth.value); @@ -328,10 +328,10 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic private static void renderHorizontalQuad(double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { buffer.begin(GL_LINE_LOOP, DefaultVertexFormats.POSITION); - buffer.pos(minX, y, minZ).endVertex(); - buffer.pos(maxX, y, minZ).endVertex(); - buffer.pos(maxX, y, maxZ).endVertex(); - buffer.pos(minX, y, maxZ).endVertex(); + buffer.func_225582_a_(minX, y, minZ).endVertex(); + buffer.func_225582_a_(maxX, y, minZ).endVertex(); + buffer.func_225582_a_(maxX, y, maxZ).endVertex(); + buffer.func_225582_a_(minX, y, maxZ).endVertex(); tessellator.draw(); } } diff --git a/src/main/java/baritone/utils/PlayerMovementInput.java b/src/main/java/baritone/utils/PlayerMovementInput.java index 1474485da..c81a90b19 100644 --- a/src/main/java/baritone/utils/PlayerMovementInput.java +++ b/src/main/java/baritone/utils/PlayerMovementInput.java @@ -29,7 +29,7 @@ public class PlayerMovementInput extends MovementInput { } @Override - public void tick(boolean p_217607_1_, boolean p_217607_2_) { + public void func_225607_a_(boolean p_225607_1_) { this.moveStrafe = 0.0F; this.moveForward = 0.0F; @@ -51,7 +51,7 @@ public void tick(boolean p_217607_1_, boolean p_217607_2_) { this.moveStrafe--; } - if (this.sneak = handler.isInputForcedDown(Input.SNEAK)) { + if (this.field_228350_h_ = handler.isInputForcedDown(Input.SNEAK)) { this.moveStrafe *= 0.3D; this.moveForward *= 0.3D; } diff --git a/src/main/java/baritone/utils/accessor/IBlockStateContainer.java b/src/main/java/baritone/utils/accessor/IPalettedContainer.java similarity index 95% rename from src/main/java/baritone/utils/accessor/IBlockStateContainer.java rename to src/main/java/baritone/utils/accessor/IPalettedContainer.java index 1ca642ae3..1d0490832 100644 --- a/src/main/java/baritone/utils/accessor/IBlockStateContainer.java +++ b/src/main/java/baritone/utils/accessor/IPalettedContainer.java @@ -19,7 +19,7 @@ import net.minecraft.block.BlockState; -public interface IBlockStateContainer { +public interface IPalettedContainer { BlockState getAtPalette(int index); diff --git a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java index e62c25493..d5f69f1e9 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java @@ -70,4 +70,4 @@ public MCEditSchematic(CompoundNBT schematic) { } } } -} \ No newline at end of file +} From 36bbe430d4b9f57087dcd2313ee8131e4a239ce4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 9 Jan 2020 17:27:28 -0800 Subject: [PATCH 090/935] add fixmes --- src/launch/java/baritone/launch/mixins/MixinChatScreen.java | 1 + src/launch/java/baritone/launch/mixins/MixinMinecraft.java | 1 + .../pathing/movement/movements/MovementTraverse.java | 1 - src/main/java/baritone/utils/GuiClick.java | 3 ++- src/main/java/baritone/utils/IRenderer.java | 4 ++-- src/main/java/baritone/utils/PathRenderer.java | 6 +++--- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinChatScreen.java b/src/launch/java/baritone/launch/mixins/MixinChatScreen.java index 238546bd1..368d9db7e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChatScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinChatScreen.java @@ -45,6 +45,7 @@ public class MixinChatScreen { @Shadow protected TextFieldWidget inputField; + //FIXME /* @Shadow @Final diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 08444bb09..a36963a0c 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -138,6 +138,7 @@ private boolean passEvents(Screen screen) { // allow user input is only the primary baritone return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().getCurrent() != null && player != null) || screen.passEvents; } + //FIXME stupid LVT /* @Inject( method = "rightClickMouse", diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 097541f46..7f42a7e43 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -286,7 +286,6 @@ public MovementState updateState(MovementState state) { } switch (p) { case READY_TO_PLACE: { - if (ctx.player().movementInput.field_228350_h_ || Baritone.settings().assumeSafeWalk.value) { state.setInput(Input.CLICK_RIGHT, true); } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index c3a19f909..5aac47660 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -61,7 +61,7 @@ public boolean isPauseScreen() { public void render(int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHelper.getMouseX(); double my = mc.mouseHelper.getMouseY(); - +//FIXME this entire class /*my = mc.mainWindow.getHeight() - my; my *= mc.mainWindow.getFramebufferHeight() / (double) mc.mainWindow.getHeight(); mx *= mc.mainWindow.getFramebufferWidth() / (double) mc.mainWindow.getWidth(); @@ -110,6 +110,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { } public void onRender() { + //FIXME /*GlStateManager.getMatrix(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); GlStateManager.getMatrix(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); GL11.glGetIntegerv(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 58424f53d..06b95ada6 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -21,7 +21,6 @@ import baritone.api.Settings; import baritone.api.utils.Helper; import baritone.utils.accessor.IEntityRenderManager; -import com.mojang.blaze3d.platform.GlStateManager; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; @@ -29,7 +28,7 @@ import java.awt.*; -import static org.lwjgl.opengl.GL11.*; +import static org.lwjgl.opengl.GL11.GL_LINES; public interface IRenderer { @@ -38,6 +37,7 @@ public interface IRenderer { IEntityRenderManager renderManager = (IEntityRenderManager) Helper.mc.getRenderManager(); Settings settings = BaritoneAPI.getSettings(); + //FIXME this entire class static void glColor(Color color, float alpha) { float[] colorComponents = color.getColorComponents(null); //GlStateManager.color4f(colorComponents[0], colorComponents[1], colorComponents[2], alpha); diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 5664a60ed..fb08ad54e 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -26,9 +26,7 @@ import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import com.mojang.blaze3d.platform.GlStateManager; import net.minecraft.block.BlockState; -import net.minecraft.client.renderer.tileentity.BeaconTileEntityRenderer; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; @@ -247,9 +245,10 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic Helper.mc.getTextureManager().bindTexture(TEXTURE_BEACON_BEAM); if (settings.renderGoalIgnoreDepth.value) { + // FIXME //GlStateManager.disableDepthTest(); } - +//FIXME /* BeaconTileEntityRenderer.renderBeamSegment( goalPos.getX() - renderPosX, -renderPosY, @@ -267,6 +266,7 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic );*/ if (settings.renderGoalIgnoreDepth.value) { + //FIXME //GlStateManager.enableDepthTest(); } From 27cb708d40f4069d7455123d0f3c51651fe60455 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 9 Jan 2020 20:09:49 -0600 Subject: [PATCH 091/935] Fix some render stuff but it's still broken --- .../launch/mixins/MixinGameRenderer.java | 5 +- src/main/java/baritone/utils/GuiClick.java | 53 ++++++++++--------- src/main/java/baritone/utils/IRenderer.java | 34 ++++++------ .../java/baritone/utils/PathRenderer.java | 17 +++--- 4 files changed, 59 insertions(+), 50 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java index ac1ff5aae..13f6fb628 100644 --- a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java @@ -20,6 +20,7 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; +import com.mojang.blaze3d.matrix.MatrixStack; import net.minecraft.client.renderer.GameRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -30,14 +31,14 @@ public class MixinGameRenderer { @Inject( - method = "updateCameraAndRender", + method = "func_228378_a_", at = @At( value = "INVOKE_STRING", target = "Lnet/minecraft/profiler/IProfiler;endStartSection(Ljava/lang/String;)V", args = {"ldc=hand"} ) ) - private void renderWorldPass(float partialTicks, long finishTimeNano, boolean idfk, CallbackInfo ci) { + private void renderWorldPass(float partialTicks, long finishTimeNano, MatrixStack idfk, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks)); } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 5aac47660..02d0275da 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -23,19 +23,25 @@ import baritone.api.pathing.goals.GoalTwoBlocks; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Helper; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.*; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.event.ClickEvent; import org.lwjgl.BufferUtils; +import java.awt.*; import java.nio.FloatBuffer; import java.nio.IntBuffer; +import java.util.Collections; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; +import static org.lwjgl.opengl.GL11.*; public class GuiClick extends Screen implements Helper { @@ -61,21 +67,21 @@ public boolean isPauseScreen() { public void render(int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHelper.getMouseX(); double my = mc.mouseHelper.getMouseY(); -//FIXME this entire class - /*my = mc.mainWindow.getHeight() - my; - my *= mc.mainWindow.getFramebufferHeight() / (double) mc.mainWindow.getHeight(); - mx *= mc.mainWindow.getFramebufferWidth() / (double) mc.mainWindow.getWidth(); + + my = mc.func_228018_at_().getHeight() - my; + my *= mc.func_228018_at_().getFramebufferHeight() / (double) mc.func_228018_at_().getHeight(); + mx *= mc.func_228018_at_().getFramebufferWidth() / (double) mc.func_228018_at_().getWidth(); Vec3d near = toWorld(mx, my, 0); Vec3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv if (near != null && far != null) { /// - Vec3d viewerPos = new Vec3d(PathRenderer.getPositionVec().x(), PathRenderer.getPositionVec().y(), PathRenderer.getPositionVec().z()); + Vec3d viewerPos = new Vec3d(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); ClientPlayerEntity player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); RayTraceResult result = player.world.rayTraceBlocks(new RayTraceContext(near.add(viewerPos), far.add(viewerPos), RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, player)); if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { currentMouseOver = ((BlockRayTraceResult) result).getPos(); } - }*/ + } } @Override @@ -110,33 +116,32 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { } public void onRender() { - //FIXME - /*GlStateManager.getMatrix(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); - GlStateManager.getMatrix(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); - GL11.glGetIntegerv(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); + glGetFloatv(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); + glGetFloatv(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); + glGetIntegerv(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); if (currentMouseOver != null) { Entity e = mc.getRenderViewEntity(); // drawSingleSelectionBox WHEN? PathRenderer.drawManySelectionBoxes(e, Collections.singletonList(currentMouseOver), Color.CYAN); if (clickStart != null && !clickStart.equals(currentMouseOver)) { - GlStateManager.enableBlend(); - GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - GlStateManager.color4f(Color.RED.getColorComponents(null)[0], Color.RED.getColorComponents(null)[1], Color.RED.getColorComponents(null)[2], 0.4F); - GlStateManager.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); - GlStateManager.disableTexture(); - GlStateManager.depthMask(false); - GlStateManager.disableDepthTest(); + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + RenderSystem.color4f(Color.RED.getColorComponents(null)[0], Color.RED.getColorComponents(null)[1], Color.RED.getColorComponents(null)[2], 0.4F); + RenderSystem.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); + RenderSystem.disableTexture(); + RenderSystem.depthMask(false); + RenderSystem.disableDepthTest(); BetterBlockPos a = new BetterBlockPos(currentMouseOver); BetterBlockPos b = new BetterBlockPos(clickStart); IRenderer.drawAABB(new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); - GlStateManager.enableDepthTest(); + RenderSystem.enableDepthTest(); - GlStateManager.depthMask(true); - GlStateManager.enableTexture(); - GlStateManager.disableBlend(); + RenderSystem.depthMask(true); + RenderSystem.enableTexture(); + RenderSystem.disableBlend(); } - }*/ + } } private Vec3d toWorld(double x, double y, double z) { diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 06b95ada6..2a2f05f40 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -21,6 +21,7 @@ import baritone.api.Settings; import baritone.api.utils.Helper; import baritone.utils.accessor.IEntityRenderManager; +import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; @@ -28,7 +29,7 @@ import java.awt.*; -import static org.lwjgl.opengl.GL11.GL_LINES; +import static org.lwjgl.opengl.GL11.*; public interface IRenderer { @@ -37,24 +38,23 @@ public interface IRenderer { IEntityRenderManager renderManager = (IEntityRenderManager) Helper.mc.getRenderManager(); Settings settings = BaritoneAPI.getSettings(); - //FIXME this entire class static void glColor(Color color, float alpha) { float[] colorComponents = color.getColorComponents(null); - //GlStateManager.color4f(colorComponents[0], colorComponents[1], colorComponents[2], alpha); + RenderSystem.color4f(colorComponents[0], colorComponents[1], colorComponents[2], alpha); } static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { - /*GlStateManager.enableBlend(); - GlStateManager.disableLighting(); - GlStateManager.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + RenderSystem.enableBlend(); + RenderSystem.disableLighting(); + RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); glColor(color, alpha); - GlStateManager.lineWidth(lineWidth); - GlStateManager.disableTexture(); - GlStateManager.depthMask(false); + RenderSystem.lineWidth(lineWidth); + RenderSystem.disableTexture(); + RenderSystem.depthMask(false); if (ignoreDepth) { - GlStateManager.disableDepthTest(); - }*/ + RenderSystem.disableDepthTest(); + } } static void startLines(Color color, float lineWidth, boolean ignoreDepth) { @@ -62,14 +62,14 @@ static void startLines(Color color, float lineWidth, boolean ignoreDepth) { } static void endLines(boolean ignoredDepth) { - /*if (ignoredDepth) { - GlStateManager.enableDepthTest(); + if (ignoredDepth) { + RenderSystem.enableDepthTest(); } - GlStateManager.depthMask(true); - GlStateManager.enableTexture(); - GlStateManager.enableLighting(); - GlStateManager.disableBlend();*/ + RenderSystem.depthMask(true); + RenderSystem.enableTexture(); + RenderSystem.enableLighting(); + RenderSystem.disableBlend(); } static void drawAABB(AxisAlignedBB aabb) { diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index fb08ad54e..ffd840e4c 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -26,7 +26,9 @@ import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; +import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.tileentity.BeaconTileEntityRenderer; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; @@ -245,11 +247,12 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic Helper.mc.getTextureManager().bindTexture(TEXTURE_BEACON_BEAM); if (settings.renderGoalIgnoreDepth.value) { - // FIXME - //GlStateManager.disableDepthTest(); + RenderSystem.disableDepthTest(); } -//FIXME - /* BeaconTileEntityRenderer.renderBeamSegment( + + // FIXME + /* + BeaconTileEntityRenderer.renderBeamSegment( goalPos.getX() - renderPosX, -renderPosY, goalPos.getZ() - renderPosZ, @@ -263,11 +266,11 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic // Arguments filled by the private method lol 0.2D, 0.25D - );*/ + ); + */ if (settings.renderGoalIgnoreDepth.value) { - //FIXME - //GlStateManager.enableDepthTest(); + RenderSystem.enableDepthTest(); } glPopAttrib(); From eb348120d995ce74c881f5537626b3f8fac10145 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 10 Jan 2020 18:59:57 -0600 Subject: [PATCH 092/935] Fix Mixins --- ...java => MixinCommandSuggestionHelper.java} | 36 +++++++++---------- .../launch/mixins/MixinMinecraft.java | 14 +++++--- src/launch/resources/mixins.baritone.json | 2 +- 3 files changed, 29 insertions(+), 23 deletions(-) rename src/launch/java/baritone/launch/mixins/{MixinChatScreen.java => MixinCommandSuggestionHelper.java} (73%) diff --git a/src/launch/java/baritone/launch/mixins/MixinChatScreen.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java similarity index 73% rename from src/launch/java/baritone/launch/mixins/MixinChatScreen.java rename to src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index 368d9db7e..3ed72c27c 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChatScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -22,7 +22,7 @@ import com.mojang.brigadier.context.StringRange; import com.mojang.brigadier.suggestion.Suggestion; import com.mojang.brigadier.suggestion.Suggestions; -import net.minecraft.client.gui.screen.ChatScreen; +import net.minecraft.client.gui.CommandSuggestionHelper; import net.minecraft.client.gui.widget.TextFieldWidget; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -40,28 +40,28 @@ * @author Brady * @since 10/9/2019 */ -@Mixin(ChatScreen.class) -public class MixinChatScreen { +@Mixin(CommandSuggestionHelper.class) +public class MixinCommandSuggestionHelper { @Shadow - protected TextFieldWidget inputField; - //FIXME -/* + @Final + private TextFieldWidget field_228095_d_; + @Shadow @Final - protected List commandUsage; + private List field_228103_l_; @Shadow - private CompletableFuture pendingSuggestions; + private CompletableFuture field_228107_p_; @Inject( - method = "updateSuggestion", + method = "func_228111_a_", at = @At("HEAD"), cancellable = true ) private void preUpdateSuggestion(CallbackInfo ci) { // Anything that is present in the input text before the cursor position - String prefix = this.inputField.getText().substring(0, Math.min(this.inputField.getText().length(), this.inputField.getCursorPosition())); + String prefix = this.field_228095_d_.getText().substring(0, Math.min(this.field_228095_d_.getText().length(), this.field_228095_d_.getCursorPosition())); TabCompleteEvent event = new TabCompleteEvent(prefix); BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onPreTabComplete(event); @@ -75,14 +75,14 @@ private void preUpdateSuggestion(CallbackInfo ci) { ci.cancel(); // TODO: Support populating the command usage - this.commandUsage.clear(); + this.field_228103_l_.clear(); if (event.completions.length == 0) { - this.pendingSuggestions = Suggestions.empty(); + this.field_228107_p_ = Suggestions.empty(); } else { - int offset = this.inputField.getText().endsWith(" ") - ? this.inputField.getCursorPosition() - : this.inputField.getText().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes + int offset = this.field_228095_d_.getText().endsWith(" ") + ? this.field_228095_d_.getCursorPosition() + : this.field_228095_d_.getText().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes List suggestionList = Stream.of(event.completions) .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s)) @@ -92,9 +92,9 @@ private void preUpdateSuggestion(CallbackInfo ci) { StringRange.between(offset, offset + suggestionList.stream().mapToInt(s -> s.getText().length()).max().orElse(0)), suggestionList); - this.pendingSuggestions = new CompletableFuture<>(); - this.pendingSuggestions.complete(suggestions); + this.field_228107_p_ = new CompletableFuture<>(); + this.field_228107_p_.complete(suggestions); } } - }*/ + } } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index a36963a0c..03b87fbc6 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -19,6 +19,7 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import baritone.api.event.events.BlockInteractEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; @@ -27,6 +28,10 @@ import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.world.ClientWorld; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockRayTraceResult; import org.spongepowered.asm.lib.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -34,6 +39,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import java.util.function.BiFunction; @@ -138,18 +144,18 @@ private boolean passEvents(Screen screen) { // allow user input is only the primary baritone return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().getCurrent() != null && player != null) || screen.passEvents; } - //FIXME stupid LVT -/* + @Inject( method = "rightClickMouse", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/player/ClientPlayerEntity.swingArm(Lnet/minecraft/util/Hand;)V" + target = "net/minecraft/client/entity/player/ClientPlayerEntity.swingArm(Lnet/minecraft/util/Hand;)V", + ordinal = 1 ), locals = LocalCapture.CAPTURE_FAILHARD ) private void onBlockUse(CallbackInfo ci, Hand var1[], int var2, int var3, Hand enumhand, ItemStack itemstack, BlockRayTraceResult raytrace, int i, ActionResultType enumactionresult) { // rightClickMouse is only for the main player BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(raytrace.getPos(), BlockInteractEvent.Type.USE)); - }*/ + } } diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index cb7195d02..8b1c716fe 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -9,7 +9,7 @@ }, "client": [ "MixinBitArray", - "MixinChatScreen", + "MixinCommandSuggestionHelper", "MixinChunkArray", "MixinClientChunkProvider", "MixinClientPlayerEntity", From a3dec3a47ec6f10186d824d3c6e305b4ce7fe96e Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 10 Jan 2020 19:37:00 -0600 Subject: [PATCH 093/935] Render stuff should be fixed now. There is likely a better solution, but I think this is fine in order to keep things in-line with the development over at Mojang. --- .../api/event/events/RenderEvent.java | 11 ++- .../launch/mixins/MixinGameRenderer.java | 4 +- .../baritone/command/defaults/SelCommand.java | 2 +- .../baritone/selection/SelectionRenderer.java | 11 +-- src/main/java/baritone/utils/GuiClick.java | 7 +- src/main/java/baritone/utils/IRenderer.java | 57 +++++++------ .../java/baritone/utils/PathRenderer.java | 83 ++++++++++--------- 7 files changed, 97 insertions(+), 78 deletions(-) diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java index 1f879bfcb..356d3f920 100644 --- a/src/api/java/baritone/api/event/events/RenderEvent.java +++ b/src/api/java/baritone/api/event/events/RenderEvent.java @@ -17,6 +17,8 @@ package baritone.api.event.events; +import com.mojang.blaze3d.matrix.MatrixStack; + /** * @author Brady * @since 8/5/2018 @@ -28,8 +30,11 @@ public final class RenderEvent { */ private final float partialTicks; - public RenderEvent(float partialTicks) { + private final MatrixStack matrixStack; + + public RenderEvent(float partialTicks, MatrixStack matrixStack) { this.partialTicks = partialTicks; + this.matrixStack = matrixStack; } /** @@ -38,4 +43,8 @@ public RenderEvent(float partialTicks) { public final float getPartialTicks() { return this.partialTicks; } + + public final MatrixStack getMatrixStack() { + return this.matrixStack; + } } diff --git a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java index 13f6fb628..3e995cc69 100644 --- a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java @@ -38,9 +38,9 @@ public class MixinGameRenderer { args = {"ldc=hand"} ) ) - private void renderWorldPass(float partialTicks, long finishTimeNano, MatrixStack idfk, CallbackInfo ci) { + private void renderWorldPass(float partialTicks, long finishTimeNano, MatrixStack matrixStack, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks)); + ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks, matrixStack)); } } } diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 773b6812d..19805d912 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -68,7 +68,7 @@ public void onRenderPass(RenderEvent event) { float lineWidth = Baritone.settings().selectionLineWidth.value; boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value; IRenderer.startLines(color, opacity, lineWidth, ignoreDepth); - IRenderer.drawAABB(new AxisAlignedBB(pos1, pos1.add(1, 1, 1))); + IRenderer.drawAABB(event.getMatrixStack(), new AxisAlignedBB(pos1, pos1.add(1, 1, 1))); IRenderer.endLines(ignoreDepth); } }); diff --git a/src/main/java/baritone/selection/SelectionRenderer.java b/src/main/java/baritone/selection/SelectionRenderer.java index 89104d030..22a1d7fe9 100644 --- a/src/main/java/baritone/selection/SelectionRenderer.java +++ b/src/main/java/baritone/selection/SelectionRenderer.java @@ -5,6 +5,7 @@ import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.selection.ISelection; import baritone.utils.IRenderer; +import com.mojang.blaze3d.matrix.MatrixStack; import net.minecraft.util.math.AxisAlignedBB; public class SelectionRenderer implements IRenderer, AbstractGameEventListener { @@ -18,7 +19,7 @@ public class SelectionRenderer implements IRenderer, AbstractGameEventListener { baritone.getGameEventHandler().registerEventListener(this); } - public static void renderSelections(ISelection[] selections) { + public static void renderSelections(MatrixStack stack, ISelection[] selections) { float opacity = settings.selectionOpacity.value; boolean ignoreDepth = settings.renderSelectionIgnoreDepth.value; float lineWidth = settings.selectionLineWidth.value; @@ -30,20 +31,20 @@ public static void renderSelections(ISelection[] selections) { IRenderer.startLines(settings.colorSelection.value, opacity, lineWidth, ignoreDepth); for (ISelection selection : selections) { - IRenderer.drawAABB(selection.aabb(), SELECTION_BOX_EXPANSION); + IRenderer.drawAABB(stack, selection.aabb(), SELECTION_BOX_EXPANSION); } if (settings.renderSelectionCorners.value) { IRenderer.glColor(settings.colorSelectionPos1.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(new AxisAlignedBB(selection.pos1(), selection.pos1().add(1, 1, 1))); + IRenderer.drawAABB(stack, new AxisAlignedBB(selection.pos1(), selection.pos1().add(1, 1, 1))); } IRenderer.glColor(settings.colorSelectionPos2.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(new AxisAlignedBB(selection.pos2(), selection.pos2().add(1, 1, 1))); + IRenderer.drawAABB(stack, new AxisAlignedBB(selection.pos2(), selection.pos2().add(1, 1, 1))); } } @@ -52,6 +53,6 @@ public static void renderSelections(ISelection[] selections) { @Override public void onRenderPass(RenderEvent event) { - renderSelections(manager.getSelections()); + renderSelections(event.getMatrixStack(), manager.getSelections()); } } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 02d0275da..8d79a61cd 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -23,6 +23,7 @@ import baritone.api.pathing.goals.GoalTwoBlocks; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Helper; +import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.entity.player.ClientPlayerEntity; @@ -115,7 +116,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { return super.mouseClicked(mouseX, mouseY, mouseButton); } - public void onRender() { + public void onRender(MatrixStack stack) { glGetFloatv(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); glGetFloatv(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); glGetIntegerv(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); @@ -123,7 +124,7 @@ public void onRender() { if (currentMouseOver != null) { Entity e = mc.getRenderViewEntity(); // drawSingleSelectionBox WHEN? - PathRenderer.drawManySelectionBoxes(e, Collections.singletonList(currentMouseOver), Color.CYAN); + PathRenderer.drawManySelectionBoxes(stack, e, Collections.singletonList(currentMouseOver), Color.CYAN); if (clickStart != null && !clickStart.equals(currentMouseOver)) { RenderSystem.enableBlend(); RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); @@ -134,7 +135,7 @@ public void onRender() { RenderSystem.disableDepthTest(); BetterBlockPos a = new BetterBlockPos(currentMouseOver); BetterBlockPos b = new BetterBlockPos(clickStart); - IRenderer.drawAABB(new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); + IRenderer.drawAABB(stack, new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); RenderSystem.enableDepthTest(); RenderSystem.depthMask(true); diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 2a2f05f40..b94ea820d 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -21,8 +21,10 @@ import baritone.api.Settings; import baritone.api.utils.Helper; import baritone.utils.accessor.IEntityRenderManager; +import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Matrix4f; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.math.AxisAlignedBB; @@ -72,41 +74,42 @@ static void endLines(boolean ignoredDepth) { RenderSystem.disableBlend(); } - static void drawAABB(AxisAlignedBB aabb) { + static void drawAABB(MatrixStack stack, AxisAlignedBB aabb) { AxisAlignedBB toDraw = aabb.offset(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); + Matrix4f matrix4f = stack.func_227866_c_().func_227870_a_(); buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); // bottom - buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); // top - buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); // corners - buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.func_225582_a_(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); tessellator.draw(); } - static void drawAABB(AxisAlignedBB aabb, double expand) { - drawAABB(aabb.grow(expand, expand, expand)); + static void drawAABB(MatrixStack stack, AxisAlignedBB aabb, double expand) { + drawAABB(stack, aabb.grow(expand, expand, expand)); } } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index ffd840e4c..c759c3adb 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -26,8 +26,10 @@ import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; +import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.Matrix4f; import net.minecraft.client.renderer.tileentity.BeaconTileEntityRenderer; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; @@ -72,7 +74,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { float partialTicks = event.getPartialTicks(); Goal goal = behavior.getGoal(); if (Helper.mc.currentScreen instanceof GuiClick) { - ((GuiClick) Helper.mc.currentScreen).onRender(); + ((GuiClick) Helper.mc.currentScreen).onRender(event.getMatrixStack()); } int thisPlayerDimension = behavior.baritone.getPlayerContext().world().getDimension().getType().getId(); @@ -93,7 +95,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { } if (goal != null && settings.renderGoal.value) { - drawDankLitGoalBox(renderView, goal, partialTicks, settings.colorGoalBox.value); + drawDankLitGoalBox(event.getMatrixStack(), renderView, goal, partialTicks, settings.colorGoalBox.value); } if (!settings.renderPath.value) { @@ -103,9 +105,9 @@ public static void render(RenderEvent event, PathingBehavior behavior) { PathExecutor current = behavior.getCurrent(); // this should prevent most race conditions? PathExecutor next = behavior.getNext(); // like, now it's not possible for current!=null to be true, then suddenly false because of another thread if (current != null && settings.renderSelectionBoxes.value) { - drawManySelectionBoxes(renderView, current.toBreak(), settings.colorBlocksToBreak.value); - drawManySelectionBoxes(renderView, current.toPlace(), settings.colorBlocksToPlace.value); - drawManySelectionBoxes(renderView, current.toWalkInto(), settings.colorBlocksToWalkInto.value); + drawManySelectionBoxes(event.getMatrixStack(), renderView, current.toBreak(), settings.colorBlocksToBreak.value); + drawManySelectionBoxes(event.getMatrixStack(), renderView, current.toPlace(), settings.colorBlocksToPlace.value); + drawManySelectionBoxes(event.getMatrixStack(), renderView, current.toWalkInto(), settings.colorBlocksToWalkInto.value); } //drawManySelectionBoxes(player, Collections.singletonList(behavior.pathStart()), partialTicks, Color.WHITE); @@ -113,27 +115,27 @@ public static void render(RenderEvent event, PathingBehavior behavior) { // Render the current path, if there is one if (current != null && current.getPath() != null) { int renderBegin = Math.max(current.getPosition() - 3, 0); - drawPath(current.getPath(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); + drawPath(event.getMatrixStack(), current.getPath(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); } if (next != null && next.getPath() != null) { - drawPath(next.getPath(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); + drawPath(event.getMatrixStack(), next.getPath(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); } // If there is a path calculation currently running, render the path calculation process behavior.getInProgress().ifPresent(currentlyRunning -> { currentlyRunning.bestPathSoFar().ifPresent(p -> { - drawPath(p, 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); + drawPath(event.getMatrixStack(), p, 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); }); currentlyRunning.pathToMostRecentNodeConsidered().ifPresent(mr -> { - drawPath(mr, 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); - drawManySelectionBoxes(renderView, Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); + drawPath(event.getMatrixStack(), mr, 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); + drawManySelectionBoxes(event.getMatrixStack(), renderView, Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); }); }); } - public static void drawPath(IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + public static void drawPath(MatrixStack stack, IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); int fadeStart = fadeStart0 + startIndex; @@ -169,7 +171,7 @@ public static void drawPath(IPath path, int startIndex, Color color, boolean fad IRenderer.glColor(color, alpha); } - drawLine(start.x, start.y, start.z, end.x, end.y, end.z); + drawLine(stack, start.x, start.y, start.z, end.x, end.y, end.z); tessellator.draw(); } @@ -178,24 +180,26 @@ public static void drawPath(IPath path, int startIndex, Color color, boolean fad } - public static void drawLine(double x1, double y1, double z1, double x2, double y2, double z2) { + public static void drawLine(MatrixStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { + Matrix4f matrix4f = stack.func_227866_c_().func_227870_a_(); + double vpX = posX(); double vpY = posY(); double vpZ = posZ(); boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; buffer.begin(renderPathAsFrickinThingy ? GL_LINE_STRIP : GL_LINES, DefaultVertexFormats.POSITION); - buffer.func_225582_a_(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); - buffer.func_225582_a_(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); + buffer.func_227888_a_(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); if (renderPathAsFrickinThingy) { - buffer.func_225582_a_(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).endVertex(); - buffer.func_225582_a_(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).endVertex(); - buffer.func_225582_a_(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); + buffer.func_227888_a_(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); + buffer.func_227888_a_(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); } } - public static void drawManySelectionBoxes(Entity player, Collection positions, Color color) { + public static void drawManySelectionBoxes(MatrixStack stack, Entity player, Collection positions, Color color) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderSelectionBoxesIgnoreDepth.value); //BlockPos blockpos = movingObjectPositionIn.getBlockPos(); @@ -206,13 +210,13 @@ public static void drawManySelectionBoxes(Entity player, Collection po VoxelShape shape = state.getShape(player.world, pos); AxisAlignedBB toDraw = shape.isEmpty() ? VoxelShapes.fullCube().getBoundingBox() : shape.getBoundingBox(); toDraw = toDraw.offset(pos); - IRenderer.drawAABB(toDraw, .002D); + IRenderer.drawAABB(stack, toDraw, .002D); }); IRenderer.endLines(settings.renderSelectionBoxesIgnoreDepth.value); } - public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTicks, Color color) { + public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goal, float partialTicks, Color color) { double renderPosX = posX(); double renderPosY = posY(); double renderPosZ = posZ(); @@ -288,11 +292,11 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic maxY = 256 - renderPosY; } else if (goal instanceof GoalComposite) { for (Goal g : ((GoalComposite) goal).goals()) { - drawDankLitGoalBox(player, g, partialTicks, color); + drawDankLitGoalBox(stack, player, g, partialTicks, color); } return; } else if (goal instanceof GoalInverted) { - drawDankLitGoalBox(player, ((GoalInverted) goal).origin, partialTicks, settings.colorInvertedGoalBox.value); + drawDankLitGoalBox(stack, player, ((GoalInverted) goal).origin, partialTicks, settings.colorInvertedGoalBox.value); return; } else if (goal instanceof GoalYLevel) { GoalYLevel goalpos = (GoalYLevel) goal; @@ -310,31 +314,32 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic IRenderer.startLines(color, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); - renderHorizontalQuad(minX, maxX, minZ, maxZ, y1); - renderHorizontalQuad(minX, maxX, minZ, maxZ, y2); - + renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y1); + renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); + Matrix4f matrix4f = stack.func_227866_c_().func_227870_a_(); buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); - buffer.func_225582_a_(minX, minY, minZ).endVertex(); - buffer.func_225582_a_(minX, maxY, minZ).endVertex(); - buffer.func_225582_a_(maxX, minY, minZ).endVertex(); - buffer.func_225582_a_(maxX, maxY, minZ).endVertex(); - buffer.func_225582_a_(maxX, minY, maxZ).endVertex(); - buffer.func_225582_a_(maxX, maxY, maxZ).endVertex(); - buffer.func_225582_a_(minX, minY, maxZ).endVertex(); - buffer.func_225582_a_(minX, maxY, maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) minX, (float) minY, (float) minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) minX, (float) maxY, (float) minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) maxX, (float) minY, (float) minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) maxX, (float) maxY, (float) minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) maxX, (float) minY, (float) maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) maxX, (float) maxY, (float) maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) minX, (float) minY, (float) maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) minX, (float) maxY, (float) maxZ).endVertex(); tessellator.draw(); IRenderer.endLines(settings.renderGoalIgnoreDepth.value); } - private static void renderHorizontalQuad(double minX, double maxX, double minZ, double maxZ, double y) { + private static void renderHorizontalQuad(MatrixStack stack, double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { + Matrix4f matrix4f = stack.func_227866_c_().func_227870_a_(); buffer.begin(GL_LINE_LOOP, DefaultVertexFormats.POSITION); - buffer.func_225582_a_(minX, y, minZ).endVertex(); - buffer.func_225582_a_(maxX, y, minZ).endVertex(); - buffer.func_225582_a_(maxX, y, maxZ).endVertex(); - buffer.func_225582_a_(minX, y, maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) minX, (float) y, (float) minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) maxX, (float) y, (float) minZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) maxX, (float) y, (float) maxZ).endVertex(); + buffer.func_227888_a_(matrix4f, (float) minX, (float) y, (float) maxZ).endVertex(); tessellator.draw(); } } From 2d2030ecdfb65c77e2a7cbf27ceae22b08759218 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 10 Jan 2020 20:07:33 -0600 Subject: [PATCH 094/935] Fix renderGoalXZBeacon --- .../java/baritone/utils/PathRenderer.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index c759c3adb..6cd31ba1d 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -254,24 +254,26 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa RenderSystem.disableDepthTest(); } - // FIXME - /* - BeaconTileEntityRenderer.renderBeamSegment( - goalPos.getX() - renderPosX, - -renderPosY, - goalPos.getZ() - renderPosZ, + stack.func_227860_a_(); // push + stack.func_227861_a_(goalPos.getX() - renderPosX, -renderPosY, goalPos.getZ() - renderPosZ); // translate + + BeaconTileEntityRenderer.func_228842_a_( + stack, + mc.func_228019_au_().func_228489_c_(), + TEXTURE_BEACON_BEAM, partialTicks, - 1.0, + 1.0F, player.world.getGameTime(), 0, 256, color.getColorComponents(null), // Arguments filled by the private method lol - 0.2D, - 0.25D + 0.2F, + 0.25F ); - */ + + stack.func_227865_b_(); // pop if (settings.renderGoalIgnoreDepth.value) { RenderSystem.enableDepthTest(); From 8543a99fba484341ac32d5b779282c13de0cb6c9 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 5 Feb 2020 14:54:03 -0800 Subject: [PATCH 095/935] compiles and can path --- build.gradle | 4 +- .../launch/mixins/MixinGameRenderer.java | 2 +- src/main/java/baritone/utils/GuiClick.java | 7 ++- src/main/java/baritone/utils/IRenderer.java | 50 +++++++++---------- .../java/baritone/utils/PathRenderer.java | 50 +++++++++---------- 5 files changed, 56 insertions(+), 57 deletions(-) diff --git a/build.gradle b/build.gradle index 803ace85d..75febfc2f 100755 --- a/build.gradle +++ b/build.gradle @@ -82,7 +82,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20190719-1.14.3' + mappings channel: 'snapshot', version: '20200205-1.15.1' reobfMappings 'notch' runs { @@ -138,7 +138,7 @@ repositories { } dependencies { - minecraft 'com.github.ImpactDevelopment:Vanilla:1.15.1' + minecraft 'com.github.ImpactDevelopment:Vanilla:1.15.2' runtime launchCompile('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' diff --git a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java index 3e995cc69..85db7be32 100644 --- a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java @@ -31,7 +31,7 @@ public class MixinGameRenderer { @Inject( - method = "func_228378_a_", + method = "renderWorld", at = @At( value = "INVOKE_STRING", target = "Lnet/minecraft/profiler/IProfiler;endStartSection(Ljava/lang/String;)V", diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 8d79a61cd..026b498e7 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -24,7 +24,6 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Helper; import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.Screen; @@ -69,9 +68,9 @@ public void render(int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHelper.getMouseX(); double my = mc.mouseHelper.getMouseY(); - my = mc.func_228018_at_().getHeight() - my; - my *= mc.func_228018_at_().getFramebufferHeight() / (double) mc.func_228018_at_().getHeight(); - mx *= mc.func_228018_at_().getFramebufferWidth() / (double) mc.func_228018_at_().getWidth(); + my = mc.getMainWindow().getHeight() - my; + my *= mc.getMainWindow().getFramebufferHeight() / (double) mc.getMainWindow().getHeight(); + mx *= mc.getMainWindow().getFramebufferWidth() / (double) mc.getMainWindow().getWidth(); Vec3d near = toWorld(mx, my, 0); Vec3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv if (near != null && far != null) { diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index b94ea820d..f87db3df0 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -77,35 +77,35 @@ static void endLines(boolean ignoredDepth) { static void drawAABB(MatrixStack stack, AxisAlignedBB aabb) { AxisAlignedBB toDraw = aabb.offset(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); - Matrix4f matrix4f = stack.func_227866_c_().func_227870_a_(); + Matrix4f matrix4f = stack.getLast().getPositionMatrix(); buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); // bottom - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); // top - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); // corners - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); tessellator.draw(); } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 6cd31ba1d..a036ab3ae 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -181,7 +181,7 @@ public static void drawPath(MatrixStack stack, IPath path, int startIndex, Color public static void drawLine(MatrixStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { - Matrix4f matrix4f = stack.func_227866_c_().func_227870_a_(); + Matrix4f matrix4f = stack.getLast().getPositionMatrix(); double vpX = posX(); double vpY = posY(); @@ -189,13 +189,13 @@ public static void drawLine(MatrixStack stack, double x1, double y1, double z1, boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; buffer.begin(renderPathAsFrickinThingy ? GL_LINE_STRIP : GL_LINES, DefaultVertexFormats.POSITION); - buffer.func_227888_a_(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); - buffer.func_227888_a_(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); + buffer.pos(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); + buffer.pos(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); if (renderPathAsFrickinThingy) { - buffer.func_227888_a_(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); - buffer.func_227888_a_(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); - buffer.func_227888_a_(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); + buffer.pos(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); + buffer.pos(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); + buffer.pos(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); } } @@ -254,12 +254,12 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa RenderSystem.disableDepthTest(); } - stack.func_227860_a_(); // push - stack.func_227861_a_(goalPos.getX() - renderPosX, -renderPosY, goalPos.getZ() - renderPosZ); // translate + stack.push(); // push + stack.translate(goalPos.getX() - renderPosX, -renderPosY, goalPos.getZ() - renderPosZ); // translate - BeaconTileEntityRenderer.func_228842_a_( + BeaconTileEntityRenderer.renderBeamSegment( stack, - mc.func_228019_au_().func_228489_c_(), + mc.getRenderTypeBuffers().getBufferSource(), TEXTURE_BEACON_BEAM, partialTicks, 1.0F, @@ -273,7 +273,7 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa 0.25F ); - stack.func_227865_b_(); // pop + stack.pop(); // pop if (settings.renderGoalIgnoreDepth.value) { RenderSystem.enableDepthTest(); @@ -319,16 +319,16 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y1); renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); - Matrix4f matrix4f = stack.func_227866_c_().func_227870_a_(); + Matrix4f matrix4f = stack.getLast().getPositionMatrix(); buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); - buffer.func_227888_a_(matrix4f, (float) minX, (float) minY, (float) minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) minX, (float) maxY, (float) minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) maxX, (float) minY, (float) minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) maxX, (float) maxY, (float) minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) maxX, (float) minY, (float) maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) maxX, (float) maxY, (float) maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) minX, (float) minY, (float) maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) minX, (float) maxY, (float) maxZ).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) minY, (float) minZ).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) maxY, (float) minZ).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) minY, (float) minZ).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) maxY, (float) minZ).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) minY, (float) maxZ).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) maxY, (float) maxZ).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) minY, (float) maxZ).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) maxY, (float) maxZ).endVertex(); tessellator.draw(); IRenderer.endLines(settings.renderGoalIgnoreDepth.value); @@ -336,12 +336,12 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa private static void renderHorizontalQuad(MatrixStack stack, double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { - Matrix4f matrix4f = stack.func_227866_c_().func_227870_a_(); + Matrix4f matrix4f = stack.getLast().getPositionMatrix(); buffer.begin(GL_LINE_LOOP, DefaultVertexFormats.POSITION); - buffer.func_227888_a_(matrix4f, (float) minX, (float) y, (float) minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) maxX, (float) y, (float) minZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) maxX, (float) y, (float) maxZ).endVertex(); - buffer.func_227888_a_(matrix4f, (float) minX, (float) y, (float) maxZ).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) y, (float) minZ).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) y, (float) minZ).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) y, (float) maxZ).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) y, (float) maxZ).endVertex(); tessellator.draw(); } } From a022778fb62f1183d7224500d08743acf53c67d5 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 5 Feb 2020 15:14:32 -0800 Subject: [PATCH 096/935] cursed but fixes blockoptionalmeta --- src/api/java/baritone/api/Settings.java | 7 ++++++- .../baritone/api/utils/BlockOptionalMeta.java | 16 +++++++--------- .../baritone/launch/mixins/MixinLootContext.java | 15 +++++++++++++++ .../baritone/command/argument/ArgConsumer.java | 9 ++++++++- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 7fb9c53b9..675f5e60f 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -30,8 +30,8 @@ import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.util.*; import java.util.List; +import java.util.*; import java.util.function.Consumer; /** @@ -958,6 +958,11 @@ public final class Settings { */ public final Setting> logger = new Setting<>(Minecraft.getInstance().ingameGUI.getChatGUI()::printChatMessage); + /** + * Print out ALL command exceptions as a stack trace to stdout, even simple syntax errors + */ + public final Setting verboseCommandExceptions = new Setting<>(false); + /** * The size of the box that is rendered when the current goal is a GoalYLevel */ diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index ea79192a4..887e153f4 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -28,7 +28,6 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.Unit; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.registry.Registry; import net.minecraft.world.storage.loot.*; import javax.annotation.Nonnull; @@ -47,6 +46,7 @@ public final class BlockOptionalMeta { private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); private static LootTableManager manager; + private static LootPredicateManager predicate = new LootPredicateManager(); private static Map> drops = new HashMap<>(); public BlockOptionalMeta(@Nonnull Block block) { @@ -65,13 +65,7 @@ public BlockOptionalMeta(@Nonnull String selector) { MatchResult matchResult = matcher.toMatchResult(); - ResourceLocation id = new ResourceLocation(matchResult.group(1)); - - if (!Registry.BLOCK.containsKey(id)) { - throw new IllegalArgumentException("Invalid block ID"); - } - - block = Registry.BLOCK.getValue(id).orElse(null); + block = BlockUtils.stringToBlockRequired(matchResult.group(1)); blockstates = getStates(block); stateHashes = getStateHashes(blockstates); stackHashes = getStackHashes(blockstates); @@ -144,7 +138,7 @@ public static LootTableManager getManager() { rpl.reloadPacksFromFinders(); IResourcePack thePack = ((ResourcePackInfo) rpl.getAllPacks().iterator().next()).getResourcePack(); IReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(ResourcePackType.SERVER_DATA, null); - manager = new LootTableManager(new LootPredicateManager()); + manager = new LootTableManager(predicate); resourceManager.addReloadListener(manager); try { resourceManager.reloadResourcesAndThen(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), Collections.singletonList(thePack), CompletableFuture.completedFuture(Unit.INSTANCE)).get(); @@ -155,6 +149,10 @@ public static LootTableManager getManager() { return manager; } + public static LootPredicateManager getPredicateManager() { + return predicate; + } + private static synchronized List drops(Block b) { return drops.computeIfAbsent(b, block -> { ResourceLocation lootTableLocation = block.getLootTable(); diff --git a/src/launch/java/baritone/launch/mixins/MixinLootContext.java b/src/launch/java/baritone/launch/mixins/MixinLootContext.java index 9c1c8faca..5948f4442 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLootContext.java +++ b/src/launch/java/baritone/launch/mixins/MixinLootContext.java @@ -21,6 +21,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.world.server.ServerWorld; import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootPredicateManager; import net.minecraft.world.storage.loot.LootTableManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -56,4 +57,18 @@ private LootTableManager getLootTableManager(MinecraftServer server) { } return server.getLootTableManager(); } + + @Redirect( + method = "build", + at = @At( + value = "INVOKE", + target = "net/minecraft/server/MinecraftServer.func_229736_aP_()Lnet/minecraft/world/storage/loot/LootPredicateManager;" + ) + ) + private LootPredicateManager getLootPredicateManager(MinecraftServer server) { + if (server == null) { + return BlockOptionalMeta.getPredicateManager(); + } + return server.func_229736_aP_(); + } } diff --git a/src/main/java/baritone/command/argument/ArgConsumer.java b/src/main/java/baritone/command/argument/ArgConsumer.java index f4e7dd524..c4a6df002 100644 --- a/src/main/java/baritone/command/argument/ArgConsumer.java +++ b/src/main/java/baritone/command/argument/ArgConsumer.java @@ -17,7 +17,9 @@ package baritone.command.argument; +import baritone.Baritone; import baritone.api.IBaritone; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.ICommandArgument; import baritone.api.command.datatypes.IDatatype; import baritone.api.command.datatypes.IDatatypeContext; @@ -27,7 +29,6 @@ import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandNotEnoughArgumentsException; import baritone.api.command.exception.CommandTooManyArgumentsException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.manager.ICommandManager; import java.util.ArrayList; @@ -316,6 +317,9 @@ public > T getDatatypePost(D datatype, O ori try { return datatype.apply(this.context, original); } catch (Exception e) { + if (Baritone.settings().verboseCommandExceptions.value) { + e.printStackTrace(); + } throw new CommandInvalidTypeException(hasAny() ? peek() : consumed(), datatype.getClass().getSimpleName(), e); } } @@ -345,6 +349,9 @@ public > T getDatatypeFor(D datatype) throws Comman try { return datatype.get(this.context); } catch (Exception e) { + if (Baritone.settings().verboseCommandExceptions.value) { + e.printStackTrace(); + } throw new CommandInvalidTypeException(hasAny() ? peek() : consumed(), datatype.getClass().getSimpleName(), e); } } From f5380881f459829e1b12c280c516324a13016c34 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 5 Feb 2020 16:10:55 -0800 Subject: [PATCH 097/935] brady fix mixins im incompetent --- .../launch/mixins/MixinMinecraft.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 03b87fbc6..715619927 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -19,7 +19,6 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; -import baritone.api.event.events.BlockInteractEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; @@ -28,10 +27,6 @@ import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.world.ClientWorld; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockRayTraceResult; import org.spongepowered.asm.lib.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,7 +34,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import java.util.function.BiFunction; @@ -145,7 +139,14 @@ private boolean passEvents(Screen screen) { return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().getCurrent() != null && player != null) || screen.passEvents; } - @Inject( + // TODO + // FIXME + // bradyfix + // i cant mixin + // lol + // https://discordapp.com/channels/208753003996512258/503692253881958400/674760939681349652 + // https://discordapp.com/channels/208753003996512258/503692253881958400/674756457966862376 + /*@Inject( method = "rightClickMouse", at = @At( value = "INVOKE", @@ -154,8 +155,8 @@ private boolean passEvents(Screen screen) { ), locals = LocalCapture.CAPTURE_FAILHARD ) - private void onBlockUse(CallbackInfo ci, Hand var1[], int var2, int var3, Hand enumhand, ItemStack itemstack, BlockRayTraceResult raytrace, int i, ActionResultType enumactionresult) { + private void onBlockUse(CallbackInfo ci, Hand var1[], int var2, int var3, Hand enumhand, ItemStack itemstack, EntityRayTraceResult rt, Entity ent, ActionResultType art, BlockRayTraceResult raytrace, int i, ActionResultType enumactionresult) { // rightClickMouse is only for the main player BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(raytrace.getPos(), BlockInteractEvent.Type.USE)); - } + }*/ } From e03e25154115d167570a4d152f680ac5921ac1b4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 5 Feb 2020 17:45:22 -0800 Subject: [PATCH 098/935] fix crouching --- .../baritone/pathing/movement/movements/MovementAscend.java | 2 +- .../baritone/pathing/movement/movements/MovementPillar.java | 2 +- .../baritone/pathing/movement/movements/MovementTraverse.java | 2 +- src/main/java/baritone/process/BuilderProcess.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 9313aed0c..5490f4931 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -176,7 +176,7 @@ public MovementState updateState(MovementState state) { ticksWithoutPlacement++; if (MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), false) == PlaceResult.READY_TO_PLACE) { state.setInput(Input.SNEAK, true); - if (ctx.player().movementInput.field_228350_h_) { + if (ctx.player().isCrouching()) { state.setInput(Input.CLICK_RIGHT, true); } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index bb80645c5..afbac94b5 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -251,7 +251,7 @@ public MovementState updateState(MovementState state) { state.setInput(Input.JUMP, false); // breaking is like 5x slower when you're jumping state.setInput(Input.CLICK_LEFT, true); blockIsThere = false; - } else if (ctx.player().movementInput.field_228350_h_ && (ctx.isLookingAt(src.down()) || ctx.isLookingAt(src)) && ctx.player().getPositionVec().y > dest.getY() + 0.1) { + } else if (ctx.player().isCrouching() && (ctx.isLookingAt(src.down()) || ctx.isLookingAt(src)) && ctx.player().getPositionVec().y > dest.getY() + 0.1) { state.setInput(Input.CLICK_RIGHT, true); } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 7f42a7e43..4710a1f58 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -286,7 +286,7 @@ public MovementState updateState(MovementState state) { } switch (p) { case READY_TO_PLACE: { - if (ctx.player().movementInput.field_228350_h_ || Baritone.settings().assumeSafeWalk.value) { + if (ctx.player().isCrouching() || Baritone.settings().assumeSafeWalk.value) { state.setInput(Input.CLICK_RIGHT, true); } return state; diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 548579532..d533fe54f 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -445,7 +445,7 @@ public int lengthZ() { BetterBlockPos pos = toBreak.get().getA(); baritone.getLookBehavior().updateTarget(rot, true); MovementHelper.switchToBestToolFor(ctx, bcc.get(pos)); - if (ctx.player().movementInput.field_228350_h_) { + if (ctx.player().isCrouching()) { // really horrible bug where a block is visible for breaking while sneaking but not otherwise // so you can't see it, it goes to place something else, sneaks, then the next tick it tries to break // and is unable since it's unsneaked in the intermediary tick From 49aaa551728dcb2e68f98c8cd2efbb541d25627c Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 9 Feb 2020 13:38:46 -0600 Subject: [PATCH 099/935] Fix click --- .../api/event/events/RenderEvent.java | 15 +- .../launch/mixins/MixinGameRenderer.java | 10 +- .../baritone/command/defaults/SelCommand.java | 2 +- .../baritone/selection/SelectionRenderer.java | 2 +- src/main/java/baritone/utils/GuiClick.java | 219 ++---------------- .../java/baritone/utils/PathRenderer.java | 20 +- 6 files changed, 50 insertions(+), 218 deletions(-) diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java index 356d3f920..7995f07ee 100644 --- a/src/api/java/baritone/api/event/events/RenderEvent.java +++ b/src/api/java/baritone/api/event/events/RenderEvent.java @@ -30,11 +30,12 @@ public final class RenderEvent { */ private final float partialTicks; - private final MatrixStack matrixStack; + private final MatrixStack modelViewStack, projectionStack; - public RenderEvent(float partialTicks, MatrixStack matrixStack) { + public RenderEvent(float partialTicks, MatrixStack modelViewStack, MatrixStack projectionStack) { this.partialTicks = partialTicks; - this.matrixStack = matrixStack; + this.modelViewStack = modelViewStack; + this.projectionStack = projectionStack; } /** @@ -44,7 +45,11 @@ public final float getPartialTicks() { return this.partialTicks; } - public final MatrixStack getMatrixStack() { - return this.matrixStack; + public final MatrixStack getModelViewStack() { + return this.modelViewStack; + } + + public final MatrixStack getProjectionStack() { + return this.projectionStack; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java index 85db7be32..2753b17fc 100644 --- a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java @@ -21,11 +21,14 @@ import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.client.renderer.ActiveRenderInfo; import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.Matrix4f; 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.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(GameRenderer.class) public class MixinGameRenderer { @@ -36,11 +39,12 @@ public class MixinGameRenderer { value = "INVOKE_STRING", target = "Lnet/minecraft/profiler/IProfiler;endStartSection(Ljava/lang/String;)V", args = {"ldc=hand"} - ) + ), + locals = LocalCapture.CAPTURE_FAILHARD ) - private void renderWorldPass(float partialTicks, long finishTimeNano, MatrixStack matrixStack, CallbackInfo ci) { + private void renderWorldPass(float partialTicks, long finishTimeNano, MatrixStack modelViewMatrix, CallbackInfo ci, boolean flag, ActiveRenderInfo activerenderinfo, MatrixStack projectionMatrix, float f, Matrix4f matrix4f) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks, matrixStack)); + ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks, modelViewMatrix, projectionMatrix)); } } } diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 19805d912..7df047a54 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -68,7 +68,7 @@ public void onRenderPass(RenderEvent event) { float lineWidth = Baritone.settings().selectionLineWidth.value; boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value; IRenderer.startLines(color, opacity, lineWidth, ignoreDepth); - IRenderer.drawAABB(event.getMatrixStack(), new AxisAlignedBB(pos1, pos1.add(1, 1, 1))); + IRenderer.drawAABB(event.getModelViewStack(), new AxisAlignedBB(pos1, pos1.add(1, 1, 1))); IRenderer.endLines(ignoreDepth); } }); diff --git a/src/main/java/baritone/selection/SelectionRenderer.java b/src/main/java/baritone/selection/SelectionRenderer.java index 22a1d7fe9..e5493a7ea 100644 --- a/src/main/java/baritone/selection/SelectionRenderer.java +++ b/src/main/java/baritone/selection/SelectionRenderer.java @@ -53,6 +53,6 @@ public static void renderSelections(MatrixStack stack, ISelection[] selections) @Override public void onRenderPass(RenderEvent event) { - renderSelections(event.getMatrixStack(), manager.getSelections()); + renderSelections(event.getModelViewStack(), manager.getSelections()); } } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 026b498e7..a80322f7b 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -27,17 +27,16 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.renderer.Matrix4f; +import net.minecraft.client.renderer.Vector4f; import net.minecraft.entity.Entity; import net.minecraft.util.math.*; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.event.ClickEvent; -import org.lwjgl.BufferUtils; import java.awt.*; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; import java.util.Collections; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; @@ -45,11 +44,7 @@ public class GuiClick extends Screen implements Helper { - // My name is Brady and I grant leijurv permission to use this pasted code - private final FloatBuffer MODELVIEW = BufferUtils.createFloatBuffer(16); - private final FloatBuffer PROJECTION = BufferUtils.createFloatBuffer(16); - private final IntBuffer VIEWPORT = BufferUtils.createIntBuffer(16); - private final FloatBuffer TO_WORLD_BUFFER = BufferUtils.createFloatBuffer(3); + private Matrix4f projectionViewMatrix; private BlockPos clickStart; private BlockPos currentMouseOver; @@ -115,15 +110,15 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { return super.mouseClicked(mouseX, mouseY, mouseButton); } - public void onRender(MatrixStack stack) { - glGetFloatv(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); - glGetFloatv(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); - glGetIntegerv(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); + public void onRender(MatrixStack modelViewStack, MatrixStack projectionStack) { + this.projectionViewMatrix = projectionStack.getLast().getPositionMatrix().copy(); + this.projectionViewMatrix.multiply(modelViewStack.getLast().getPositionMatrix()); + this.projectionViewMatrix.invert(); if (currentMouseOver != null) { Entity e = mc.getRenderViewEntity(); // drawSingleSelectionBox WHEN? - PathRenderer.drawManySelectionBoxes(stack, e, Collections.singletonList(currentMouseOver), Color.CYAN); + PathRenderer.drawManySelectionBoxes(modelViewStack, e, Collections.singletonList(currentMouseOver), Color.CYAN); if (clickStart != null && !clickStart.equals(currentMouseOver)) { RenderSystem.enableBlend(); RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); @@ -134,7 +129,7 @@ public void onRender(MatrixStack stack) { RenderSystem.disableDepthTest(); BetterBlockPos a = new BetterBlockPos(currentMouseOver); BetterBlockPos b = new BetterBlockPos(clickStart); - IRenderer.drawAABB(stack, new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); + IRenderer.drawAABB(modelViewStack, new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); RenderSystem.enableDepthTest(); RenderSystem.depthMask(true); @@ -145,194 +140,22 @@ public void onRender(MatrixStack stack) { } private Vec3d toWorld(double x, double y, double z) { - boolean result = gluUnProject((float) x, (float) y, (float) z, MODELVIEW, PROJECTION, VIEWPORT, (FloatBuffer) TO_WORLD_BUFFER.clear()); - if (result) { - return new Vec3d(TO_WORLD_BUFFER.get(0), TO_WORLD_BUFFER.get(1), TO_WORLD_BUFFER.get(2)); + if (this.projectionViewMatrix == null) { + return null; } - return null; - } - - // skidded from lwjgl2 :ok_hand: - // its uhhhhh mit license so its ok - // here is the uhh license - /* - * Copyright (c) 2002-2007 Lightweight Java Game Library Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'Light Weight Java Game Library' nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - public static boolean gluUnProject( - float winx, - float winy, - float winz, - FloatBuffer modelMatrix, - FloatBuffer projMatrix, - IntBuffer viewport, - FloatBuffer obj_pos) { - FloatBuffer finalMatrix = BufferUtils.createFloatBuffer(16); - float[] in = new float[4]; - float[] out = new float[4]; - - __gluMultMatricesf(modelMatrix, projMatrix, finalMatrix); - - if (!__gluInvertMatrixf(finalMatrix, finalMatrix)) - return false; - - in[0] = winx; - in[1] = winy; - in[2] = winz; - in[3] = 1.0f; - - // Map x and y from window coordinates - in[0] = (in[0] - viewport.get(viewport.position() + 0)) / viewport.get(viewport.position() + 2); - in[1] = (in[1] - viewport.get(viewport.position() + 1)) / viewport.get(viewport.position() + 3); - - // Map to range -1 to 1 - in[0] = in[0] * 2 - 1; - in[1] = in[1] * 2 - 1; - in[2] = in[2] * 2 - 1; - - __gluMultMatrixVecf(finalMatrix, in, out); - - if (out[3] == 0.0) - return false; - - out[3] = 1.0f / out[3]; - - obj_pos.put(obj_pos.position() + 0, out[0] * out[3]); - obj_pos.put(obj_pos.position() + 1, out[1] * out[3]); - obj_pos.put(obj_pos.position() + 2, out[2] * out[3]); - - return true; - } - - private static void __gluMultMatrixVecf(FloatBuffer m, float[] in, float[] out) { - for (int i = 0; i < 4; i++) { - out[i] = - in[0] * m.get(m.position() + 0 * 4 + i) - + in[1] * m.get(m.position() + 1 * 4 + i) - + in[2] * m.get(m.position() + 2 * 4 + i) - + in[3] * m.get(m.position() + 3 * 4 + i); - - } - } - private static void __gluMultMatricesf(FloatBuffer a, FloatBuffer b, FloatBuffer r) { - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - r.put(r.position() + i * 4 + j, - a.get(a.position() + i * 4 + 0) * b.get(b.position() + 0 * 4 + j) + a.get(a.position() + i * 4 + 1) * b.get(b.position() + 1 * 4 + j) + a.get(a.position() + i * 4 + 2) * b.get(b.position() + 2 * 4 + j) + a.get(a.position() + i * 4 + 3) * b.get(b.position() + 3 * 4 + j)); - } - } - } - - private static boolean __gluInvertMatrixf(FloatBuffer src, FloatBuffer inverse) { - int i, j, k, swap; - float t; - FloatBuffer temp = BufferUtils.createFloatBuffer(16); - - - for (i = 0; i < 16; i++) { - temp.put(i, src.get(i + src.position())); - } - __gluMakeIdentityf(inverse); - - for (i = 0; i < 4; i++) { - /* - * * Look for largest element in column - */ - swap = i; - for (j = i + 1; j < 4; j++) { - /* - * if (fabs(temp[j][i]) > fabs(temp[i][i])) { swap = j; - */ - if (Math.abs(temp.get(j * 4 + i)) > Math.abs(temp.get(i * 4 + i))) { - swap = j; - } - } + x /= mc.getMainWindow().getWidth(); + y /= mc.getMainWindow().getHeight(); + x = x * 2 - 1; + y = y * 2 - 1; - if (swap != i) { - /* - * * Swap rows. - */ - for (k = 0; k < 4; k++) { - t = temp.get(i * 4 + k); - temp.put(i * 4 + k, temp.get(swap * 4 + k)); - temp.put(swap * 4 + k, t); - - t = inverse.get(i * 4 + k); - inverse.put(i * 4 + k, inverse.get(swap * 4 + k)); - //inverse.put((i << 2) + k, inverse.get((swap << 2) + k)); - inverse.put(swap * 4 + k, t); - //inverse.put((swap << 2) + k, t); - } - } - - if (temp.get(i * 4 + i) == 0) { - /* - * * No non-zero pivot. The matrix is singular, which shouldn't * - * happen. This means the user gave us a bad matrix. - */ - return false; - } - - t = temp.get(i * 4 + i); - for (k = 0; k < 4; k++) { - temp.put(i * 4 + k, temp.get(i * 4 + k) / t); - inverse.put(i * 4 + k, inverse.get(i * 4 + k) / t); - } - for (j = 0; j < 4; j++) { - if (j != i) { - t = temp.get(j * 4 + i); - for (k = 0; k < 4; k++) { - temp.put(j * 4 + k, temp.get(j * 4 + k) - temp.get(i * 4 + k) * t); - inverse.put(j * 4 + k, inverse.get(j * 4 + k) - inverse.get(i * 4 + k) * t); - /*inverse.put( - (j << 2) + k, - inverse.get((j << 2) + k) - inverse.get((i << 2) + k) * t);*/ - } - } - } + Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F); + pos.transform(this.projectionViewMatrix); + if (pos.getW() == 0) { + return null; } - return true; - } - - private static final float[] IDENTITY_MATRIX = - new float[]{ - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f}; - private static void __gluMakeIdentityf(FloatBuffer m) { - int oldPos = m.position(); - m.put(IDENTITY_MATRIX); - m.position(oldPos); + pos.perspectiveDivide(); + return new Vec3d(pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index a036ab3ae..bf05787b3 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -74,7 +74,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { float partialTicks = event.getPartialTicks(); Goal goal = behavior.getGoal(); if (Helper.mc.currentScreen instanceof GuiClick) { - ((GuiClick) Helper.mc.currentScreen).onRender(event.getMatrixStack()); + ((GuiClick) Helper.mc.currentScreen).onRender(event.getModelViewStack(), event.getProjectionStack()); } int thisPlayerDimension = behavior.baritone.getPlayerContext().world().getDimension().getType().getId(); @@ -95,7 +95,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { } if (goal != null && settings.renderGoal.value) { - drawDankLitGoalBox(event.getMatrixStack(), renderView, goal, partialTicks, settings.colorGoalBox.value); + drawDankLitGoalBox(event.getModelViewStack(), renderView, goal, partialTicks, settings.colorGoalBox.value); } if (!settings.renderPath.value) { @@ -105,9 +105,9 @@ public static void render(RenderEvent event, PathingBehavior behavior) { PathExecutor current = behavior.getCurrent(); // this should prevent most race conditions? PathExecutor next = behavior.getNext(); // like, now it's not possible for current!=null to be true, then suddenly false because of another thread if (current != null && settings.renderSelectionBoxes.value) { - drawManySelectionBoxes(event.getMatrixStack(), renderView, current.toBreak(), settings.colorBlocksToBreak.value); - drawManySelectionBoxes(event.getMatrixStack(), renderView, current.toPlace(), settings.colorBlocksToPlace.value); - drawManySelectionBoxes(event.getMatrixStack(), renderView, current.toWalkInto(), settings.colorBlocksToWalkInto.value); + drawManySelectionBoxes(event.getModelViewStack(), renderView, current.toBreak(), settings.colorBlocksToBreak.value); + drawManySelectionBoxes(event.getModelViewStack(), renderView, current.toPlace(), settings.colorBlocksToPlace.value); + drawManySelectionBoxes(event.getModelViewStack(), renderView, current.toWalkInto(), settings.colorBlocksToWalkInto.value); } //drawManySelectionBoxes(player, Collections.singletonList(behavior.pathStart()), partialTicks, Color.WHITE); @@ -115,22 +115,22 @@ public static void render(RenderEvent event, PathingBehavior behavior) { // Render the current path, if there is one if (current != null && current.getPath() != null) { int renderBegin = Math.max(current.getPosition() - 3, 0); - drawPath(event.getMatrixStack(), current.getPath(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); + drawPath(event.getModelViewStack(), current.getPath(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); } if (next != null && next.getPath() != null) { - drawPath(event.getMatrixStack(), next.getPath(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); + drawPath(event.getModelViewStack(), next.getPath(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); } // If there is a path calculation currently running, render the path calculation process behavior.getInProgress().ifPresent(currentlyRunning -> { currentlyRunning.bestPathSoFar().ifPresent(p -> { - drawPath(event.getMatrixStack(), p, 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); + drawPath(event.getModelViewStack(), p, 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); }); currentlyRunning.pathToMostRecentNodeConsidered().ifPresent(mr -> { - drawPath(event.getMatrixStack(), mr, 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); - drawManySelectionBoxes(event.getMatrixStack(), renderView, Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); + drawPath(event.getModelViewStack(), mr, 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); + drawManySelectionBoxes(event.getModelViewStack(), renderView, Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); }); }); } From 0a1fe857dceae2ef275bd8c9374a5ba65ab8c6ac Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 13 Feb 2020 12:03:00 -0800 Subject: [PATCH 100/935] cant walk through honey blocks --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 08a46139e..34c3f1a36 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -91,7 +91,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock) { + if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { From 96bcabff8bc86aa3c92b3abfd64cf400a0c852db Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 13 Feb 2020 12:04:29 -0800 Subject: [PATCH 101/935] v1.5.0 From db2f6ec78dd020c9211626855b0a68250ef50176 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 13 Feb 2020 14:42:29 -0600 Subject: [PATCH 102/935] Update mappings to 20200213-1.15.1 --- build.gradle | 2 +- src/main/java/baritone/utils/GuiClick.java | 4 ++-- src/main/java/baritone/utils/IRenderer.java | 2 +- src/main/java/baritone/utils/PathRenderer.java | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 75febfc2f..a3c1a8794 100755 --- a/build.gradle +++ b/build.gradle @@ -82,7 +82,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20200205-1.15.1' + mappings channel: 'snapshot', version: '20200213-1.15.1' reobfMappings 'notch' runs { diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index a80322f7b..b4e5e3a62 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -111,8 +111,8 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { } public void onRender(MatrixStack modelViewStack, MatrixStack projectionStack) { - this.projectionViewMatrix = projectionStack.getLast().getPositionMatrix().copy(); - this.projectionViewMatrix.multiply(modelViewStack.getLast().getPositionMatrix()); + this.projectionViewMatrix = projectionStack.getLast().getMatrix().copy(); + this.projectionViewMatrix.mul(modelViewStack.getLast().getMatrix()); this.projectionViewMatrix.invert(); if (currentMouseOver != null) { diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index f87db3df0..49aa976d2 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -77,7 +77,7 @@ static void endLines(boolean ignoredDepth) { static void drawAABB(MatrixStack stack, AxisAlignedBB aabb) { AxisAlignedBB toDraw = aabb.offset(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); - Matrix4f matrix4f = stack.getLast().getPositionMatrix(); + Matrix4f matrix4f = stack.getLast().getMatrix(); buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); // bottom buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index bf05787b3..75d4f938a 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -181,7 +181,7 @@ public static void drawPath(MatrixStack stack, IPath path, int startIndex, Color public static void drawLine(MatrixStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { - Matrix4f matrix4f = stack.getLast().getPositionMatrix(); + Matrix4f matrix4f = stack.getLast().getMatrix(); double vpX = posX(); double vpY = posY(); @@ -319,7 +319,7 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y1); renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); - Matrix4f matrix4f = stack.getLast().getPositionMatrix(); + Matrix4f matrix4f = stack.getLast().getMatrix(); buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); buffer.pos(matrix4f, (float) minX, (float) minY, (float) minZ).endVertex(); buffer.pos(matrix4f, (float) minX, (float) maxY, (float) minZ).endVertex(); @@ -336,7 +336,7 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa private static void renderHorizontalQuad(MatrixStack stack, double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { - Matrix4f matrix4f = stack.getLast().getPositionMatrix(); + Matrix4f matrix4f = stack.getLast().getMatrix(); buffer.begin(GL_LINE_LOOP, DefaultVertexFormats.POSITION); buffer.pos(matrix4f, (float) minX, (float) y, (float) minZ).endVertex(); buffer.pos(matrix4f, (float) maxX, (float) y, (float) minZ).endVertex(); From 746b7b5c88f9c7ee9eeeb2c34ce84e932fe80ffb Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 13 Feb 2020 18:57:32 -0800 Subject: [PATCH 103/935] not unscuffed, just differently scuffed --- .../api/event/events/RenderEvent.java | 14 ++++++---- ...eRenderer.java => MixinWorldRenderer.java} | 28 +++++++++---------- src/launch/resources/mixins.baritone.json | 6 ++-- src/main/java/baritone/utils/GuiClick.java | 8 +++--- .../java/baritone/utils/PathRenderer.java | 2 +- 5 files changed, 29 insertions(+), 29 deletions(-) rename src/launch/java/baritone/launch/mixins/{MixinGameRenderer.java => MixinWorldRenderer.java} (62%) diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java index 7995f07ee..a75b5c0a0 100644 --- a/src/api/java/baritone/api/event/events/RenderEvent.java +++ b/src/api/java/baritone/api/event/events/RenderEvent.java @@ -18,6 +18,7 @@ package baritone.api.event.events; import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.client.renderer.Matrix4f; /** * @author Brady @@ -30,12 +31,13 @@ public final class RenderEvent { */ private final float partialTicks; - private final MatrixStack modelViewStack, projectionStack; + private final Matrix4f projectionMatrix; + private final MatrixStack modelViewStack; - public RenderEvent(float partialTicks, MatrixStack modelViewStack, MatrixStack projectionStack) { + public RenderEvent(float partialTicks, MatrixStack modelViewStack, Matrix4f projectionMatrix) { this.partialTicks = partialTicks; this.modelViewStack = modelViewStack; - this.projectionStack = projectionStack; + this.projectionMatrix = projectionMatrix; } /** @@ -45,11 +47,11 @@ public final float getPartialTicks() { return this.partialTicks; } - public final MatrixStack getModelViewStack() { + public MatrixStack getModelViewStack() { return this.modelViewStack; } - public final MatrixStack getProjectionStack() { - return this.projectionStack; + public Matrix4f getProjectionMatrix() { + return this.projectionMatrix; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java similarity index 62% rename from src/launch/java/baritone/launch/mixins/MixinGameRenderer.java rename to src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java index 2753b17fc..e375624fa 100644 --- a/src/launch/java/baritone/launch/mixins/MixinGameRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java @@ -21,30 +21,28 @@ import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; import com.mojang.blaze3d.matrix.MatrixStack; -import net.minecraft.client.renderer.ActiveRenderInfo; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.Matrix4f; +import net.minecraft.client.renderer.*; 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.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -@Mixin(GameRenderer.class) -public class MixinGameRenderer { +/** + * @author Brady + * @since 2/13/2020 + */ +@Mixin(WorldRenderer.class) +public class MixinWorldRenderer { @Inject( - method = "renderWorld", - at = @At( - value = "INVOKE_STRING", - target = "Lnet/minecraft/profiler/IProfiler;endStartSection(Ljava/lang/String;)V", - args = {"ldc=hand"} - ), - locals = LocalCapture.CAPTURE_FAILHARD + method = "updateCameraAndRender", + at = @At("RETURN"), + locals = LocalCapture.CAPTURE_FAILSOFT ) - private void renderWorldPass(float partialTicks, long finishTimeNano, MatrixStack modelViewMatrix, CallbackInfo ci, boolean flag, ActiveRenderInfo activerenderinfo, MatrixStack projectionMatrix, float f, Matrix4f matrix4f) { + private void onStartHand(MatrixStack matrixStackIn, float partialTicks, long finishTimeNano, boolean drawBlockOutline, ActiveRenderInfo activeRenderInfoIn, GameRenderer gameRendererIn, LightTexture lightmapIn, Matrix4f projectionIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks, modelViewMatrix, projectionMatrix)); + ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks, matrixStackIn, projectionIn)); } } -} +} \ No newline at end of file diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 8b1c716fe..12584443f 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -9,14 +9,13 @@ }, "client": [ "MixinBitArray", - "MixinCommandSuggestionHelper", "MixinChunkArray", "MixinClientChunkProvider", "MixinClientPlayerEntity", "MixinClientPlayNetHandler", + "MixinCommandSuggestionHelper", "MixinEntity", "MixinEntityRenderManager", - "MixinGameRenderer", "MixinItemStack", "MixinLivingEntity", "MixinLootContext", @@ -24,6 +23,7 @@ "MixinNetworkManager", "MixinPalettedContainer", "MixinPlayerController", - "MixinScreen" + "MixinScreen", + "MixinWorldRenderer" ] } \ No newline at end of file diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index b4e5e3a62..292ecbad0 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -110,8 +110,8 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { return super.mouseClicked(mouseX, mouseY, mouseButton); } - public void onRender(MatrixStack modelViewStack, MatrixStack projectionStack) { - this.projectionViewMatrix = projectionStack.getLast().getMatrix().copy(); + public void onRender(MatrixStack modelViewStack, Matrix4f projectionMatrix) { + this.projectionViewMatrix = projectionMatrix.copy(); this.projectionViewMatrix.mul(modelViewStack.getLast().getMatrix()); this.projectionViewMatrix.invert(); @@ -144,8 +144,8 @@ private Vec3d toWorld(double x, double y, double z) { return null; } - x /= mc.getMainWindow().getWidth(); - y /= mc.getMainWindow().getHeight(); + x /= mc.getMainWindow().getFramebufferWidth(); + y /= mc.getMainWindow().getFramebufferHeight(); x = x * 2 - 1; y = y * 2 - 1; diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 75d4f938a..657c06168 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -74,7 +74,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { float partialTicks = event.getPartialTicks(); Goal goal = behavior.getGoal(); if (Helper.mc.currentScreen instanceof GuiClick) { - ((GuiClick) Helper.mc.currentScreen).onRender(event.getModelViewStack(), event.getProjectionStack()); + ((GuiClick) Helper.mc.currentScreen).onRender(event.getModelViewStack(), event.getProjectionMatrix()); } int thisPlayerDimension = behavior.baritone.getPlayerContext().world().getDimension().getType().getId(); From b3ba129fc57e852dbf2ed820cc1563acd659818a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 13 Feb 2020 18:59:08 -0800 Subject: [PATCH 104/935] honey is stupid lets just not --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 34c3f1a36..73acf7bf9 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -295,7 +295,7 @@ static boolean avoidWalkingInto(BlockState state) { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); - if (block instanceof AirBlock || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { + if (block instanceof AirBlock || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN || block == Blocks.HONEY_BLOCK) { // early return for most common case (air) // plus magma, which is a normal cube but it hurts you return false; From 25587e317a38c182606920fcac2a4a8657aa82f6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 14 Feb 2020 15:26:03 -0800 Subject: [PATCH 105/935] fix link click crash --- src/launch/java/baritone/launch/mixins/MixinScreen.java | 2 +- src/main/java/baritone/command/BaritoneChatControl.java | 2 +- src/main/java/baritone/utils/accessor/IGuiScreen.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java index ee7defec0..8d5a801cd 100644 --- a/src/launch/java/baritone/launch/mixins/MixinScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.java @@ -29,5 +29,5 @@ public abstract class MixinScreen implements IGuiScreen { @Override @Invoker("openLink") - public abstract void openLink(URI url); + public abstract void openLinkInvoker(URI url); } diff --git a/src/main/java/baritone/command/BaritoneChatControl.java b/src/main/java/baritone/command/BaritoneChatControl.java index b48502bc1..c4dc3c108 100644 --- a/src/main/java/baritone/command/BaritoneChatControl.java +++ b/src/main/java/baritone/command/BaritoneChatControl.java @@ -100,7 +100,7 @@ public boolean runCommand(String msg) { return false; } else if (msg.trim().equalsIgnoreCase("orderpizza")) { try { - ((IGuiScreen) mc.currentScreen).openLink(new URI("https://www.dominos.com/en/pages/order/")); + ((IGuiScreen) mc.currentScreen).openLinkInvoker(new URI("https://www.dominos.com/en/pages/order/")); } catch (NullPointerException | URISyntaxException ignored) {} return false; } diff --git a/src/main/java/baritone/utils/accessor/IGuiScreen.java b/src/main/java/baritone/utils/accessor/IGuiScreen.java index beb5df31b..90b22d1a9 100644 --- a/src/main/java/baritone/utils/accessor/IGuiScreen.java +++ b/src/main/java/baritone/utils/accessor/IGuiScreen.java @@ -21,5 +21,5 @@ public interface IGuiScreen { - void openLink(URI url); + void openLinkInvoker(URI url); } From 606e9bf97cca52be4cd134eda353f2f4d30a5ff1 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 14 Feb 2020 15:28:37 -0800 Subject: [PATCH 106/935] v1.5.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a3c1a8794..208a24088 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.5.0' +version '1.5.1' buildscript { repositories { From e0bd82d7ffe4addd156c91f7b9b98ba71180b765 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 2 Mar 2020 17:15:01 -0600 Subject: [PATCH 107/935] lol? --- .../baritone/pathing/movement/movements/MovementParkour.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index b684a7967..7eee528e5 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -249,7 +249,7 @@ public MovementState updateState(MovementState state) { if (ctx.player().getPositionVec().y - ctx.playerFeet().getY() < 0.094) { // lilypads state.setStatus(MovementStatus.SUCCESS); } - } else if (!ctx.playerFeet().equals(src)) {,, + } else if (!ctx.playerFeet().equals(src)) { if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().getPositionVec().y - src.y > 0.0001) { if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().onGround && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true, false) == PlaceResult.READY_TO_PLACE) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory From ebe3f457c6325bacbc3edbc5e576ddfdca568ae4 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 7 Mar 2020 20:27:29 -0600 Subject: [PATCH 108/935] Fix additional injection points in 1.13.2 --- .../baritone/launch/mixins/MixinNetHandlerPlayClient.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java index 31a5611a2..3c7725c33 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java @@ -87,7 +87,8 @@ private void postHandleChunkData(SPacketChunkData packetIn, CallbackInfo ci) { ) private void preChunkUnload(SPacketUnloadChunk packet, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + EntityPlayerSP player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent(EventState.PRE, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) ); @@ -101,7 +102,8 @@ private void preChunkUnload(SPacketUnloadChunk packet, CallbackInfo ci) { ) private void postChunkUnload(SPacketUnloadChunk packet, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + EntityPlayerSP player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent(EventState.POST, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) ); From 8794bfd79a531dc6a8b8b8165a52dfb92d19fca1 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 14 Mar 2020 12:35:03 -0700 Subject: [PATCH 109/935] fix javadoc errors --- .../api/event/events/RotationMoveEvent.java | 6 ++++-- .../api/event/listener/IGameEventListener.java | 15 ++++++++------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index 3d78b4b73..e8c8917a3 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -18,6 +18,8 @@ package baritone.api.event.events; import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.util.math.Vec3d; /** * @author Brady @@ -68,14 +70,14 @@ public enum Type { /** * Called when the player's motion is updated. * - * @see Entity#moveRelative(float, float, float, float) + * @see Entity#moveRelative(float, Vec3d) */ MOTION_UPDATE, /** * Called when the player jumps. * - * @see LivingEntity#jump + * @see LivingEntity */ JUMP } diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index 21474fb54..31f0b1454 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -21,9 +21,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.DeathScreen; -import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; +import net.minecraft.network.IPacket; +import net.minecraft.util.math.Vec3d; /** * @author Brady @@ -80,7 +81,7 @@ public interface IGameEventListener { * Runs before and after whenever a new world is loaded * * @param event The event - * @see Minecraft#loadWorld(ClientWorld, Screen) + * @see Minecraft#loadWorld(ClientWorld) */ void onWorldEvent(WorldEvent event); @@ -88,7 +89,7 @@ public interface IGameEventListener { * Runs before a outbound packet is sent * * @param event The event - * @see Packet + * @see IPacket */ void onSendPacket(PacketEvent event); @@ -96,7 +97,7 @@ public interface IGameEventListener { * Runs before an inbound packet is processed * * @param event The event - * @see Packet + * @see IPacket */ void onReceivePacket(PacketEvent event); @@ -105,7 +106,7 @@ public interface IGameEventListener { * and before and after the player jumps. * * @param event The event - * @see Entity#moveRelative(float, float, float, float) + * @see Entity#moveRelative(float, Vec3d) */ void onPlayerRotationMove(RotationMoveEvent event); @@ -125,9 +126,9 @@ public interface IGameEventListener { void onBlockInteract(BlockInteractEvent event); /** - * Called when the local player dies, as indicated by the creation of the {@link GuiGameOver} screen. + * Called when the local player dies, as indicated by the creation of the {@link DeathScreen} screen. * - * @see GuiGameOver + * @see DeathScreen */ void onPlayerDeath(); From 261bf005f60eb8b3cb554c3844cf36d6ba61fd58 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Wed, 25 Mar 2020 00:28:55 -0400 Subject: [PATCH 110/935] Scuffed support for forge and building a forge jar --- build.gradle | 52 +++++++++++++++-- .../gradle/task/BaritoneGradleTask.java | 35 +++++++++--- .../baritone/gradle/task/CreateDistTask.java | 15 +++-- .../baritone/gradle/task/ProguardTask.java | 56 +++++++++++++------ scripts/proguard.pro | 1 + src/api/java/baritone/api/BaritoneAPI.java | 11 ++-- .../launch/BaritoneMixinConnector.java | 30 ++++++++++ .../launch/mixins/MixinLivingEntity.java | 3 +- .../launch/mixins/MixinMinecraft.java | 3 +- src/launch/resources/META-INF/mods.toml | 36 ++++++++++++ .../services/baritone.api.IBaritoneProvider | 1 - 11 files changed, 199 insertions(+), 44 deletions(-) create mode 100644 src/launch/java/baritone/launch/BaritoneMixinConnector.java create mode 100644 src/launch/resources/META-INF/mods.toml delete mode 100644 src/main/resources/META-INF/services/baritone.api.IBaritoneProvider diff --git a/build.gradle b/build.gradle index 208a24088..d7a9de4f0 100755 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,9 @@ buildscript { import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask + +import net.minecraftforge.gradle.userdev.tasks.GenerateSRG +import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace import org.apache.tools.ant.taskdefs.condition.Os apply plugin: 'java' @@ -83,7 +86,13 @@ task sourceJar(type: Jar, dependsOn: classes) { minecraft { mappings channel: 'snapshot', version: '20200213-1.15.1' - reobfMappings 'notch' + + if (getProject().hasProperty("baritone.forge_build")) { + println 'searge mappings!!' + reobfMappings 'searge' + } else { + reobfMappings 'notch' + } runs { client { @@ -145,7 +154,8 @@ dependencies { } runtime launchCompile('org.ow2.asm:asm-debug-all:5.2') runtime launchCompile('com.github.ImpactDevelopment:SimpleTweaker:1.2') - runtime launchCompile('org.spongepowered:mixin:0.7.11-SNAPSHOT') { + //"org.spongepowered:mixin:0.8.+" + runtime launchCompile('org.spongepowered:mixin:0.8.+') { // Mixin includes a lot of dependencies that are too up-to-date exclude module: 'launchwrapper' exclude module: 'guava' @@ -178,14 +188,48 @@ jar { manifest { attributes( 'MixinConfigs': 'mixins.baritone.json', + "MixinConnector": "baritone.launch.BaritoneMixinConnector", 'Implementation-Title': 'Baritone', - 'Implementation-Version': version + 'Implementation-Version': version, ) } } -task proguard(type: ProguardTask) { +// skidded from ProguardTask +File getClientJar() { + return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() + .stream() + .filter({f -> f.toString().endsWith("client-extra.jar")}) + .map({f -> new File(f.getParentFile(), "client.jar")}) + .findFirst() + .get() +} + +task copyMcJar(type: Copy) { + def mcJar = {getClientJar()} + + from mcJar + into 'build/createMcSrgJar/' + rename {'client-srg.jar'} +} + +task createSrgMc(type: RenameJarInPlace) { + setInput(new File(copyMcJar.getOutputs().getFiles().getSingleFile(), "client-srg.jar")) + setClasspath(files({getClientJar()})) + + // fork + setMappingType(net.minecraftforge.gradle.common.util.MappingFile.Mapping.SEARGE) + setJarTask('nword') +} +project.afterEvaluate { + createSrgMc.dependsOn(extractSrg, copyMcJar) + createSrgMc.setMappings(extractSrg.getOutput()) + //println(createSrgMc.getClasspath().getFiles()) +} + + +task proguard(type: ProguardTask, dependsOn: createSrgMc) { // TODO: dont need to create srg mc if doing notch build url 'https://downloads.sourceforge.net/project/proguard/proguard/6.0/proguard6.0.3.zip' extract 'proguard6.0.3/lib/proguard.jar' } diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index e9c61f3fd..15da0903f 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -20,6 +20,7 @@ import org.gradle.api.DefaultTask; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; @@ -43,28 +44,44 @@ class BaritoneGradleTask extends DefaultTask { ARTIFACT_STANDARD = "%s-%s.jar", ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", ARTIFACT_API = "%s-api-%s.jar", - ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; + ARTIFACT_STANDALONE = "%s-standalone-%s.jar", + ARTIFACT_FORGE_API = "%s-api-forge-%s.jar"; + // TODO: forge standalone protected String artifactName, artifactVersion; - protected Path artifactPath, artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, proguardOut; - - protected void verifyArtifacts() throws IllegalStateException { + protected final Path + artifactPath, artifactUnoptimizedPath, + // processed by proguard + artifactApiPath, artifactStandalonePath, + proguardOut; + protected final Path artifactForgeApiPath; + { this.artifactName = getProject().getName(); this.artifactVersion = getProject().getVersion().toString(); - this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); + this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); + // just make it null if its not used lol + if (getProject().hasProperty("baritone.forge_build")) { + this.artifactForgeApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); + this.artifactApiPath = null; + this.artifactStandalonePath = null; + } else { + this.artifactForgeApiPath = null; + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); + } this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); + } + protected void verifyArtifacts() throws IllegalStateException { if (!Files.exists(this.artifactPath)) { throw new IllegalStateException("Artifact not found! Run build first!"); } } - protected void write(InputStream stream, Path file) throws Exception { + protected void write(InputStream stream, Path file) throws IOException { if (Files.exists(file)) { Files.delete(file); } diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index b29ed38f1..d5f42ef0f 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -45,6 +45,7 @@ protected void exec() throws Exception { Path api = getRelativeFile("dist/" + formatVersion(ARTIFACT_API)); Path standalone = getRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)); Path unoptimized = getRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)); + Path forgeApi = getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)); // NIO will not automatically create directories Path dir = getRelativeFile("dist/"); @@ -53,12 +54,18 @@ protected void exec() throws Exception { } // Copy build jars to dist/ - Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); - Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); - Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); + if (getProject().hasProperty("baritone.forge_build")) { + Files.copy(this.artifactForgeApiPath, forgeApi, REPLACE_EXISTING); + } else { + Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); + Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); + Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); + } + // Calculate all checksums and format them like "shasum" - List shasum = Stream.of(api, standalone, unoptimized) + List shasum = Stream.of(forgeApi, api, standalone, unoptimized) + .filter(f -> false) // TODO: dont sha nonexistant artifacts .map(path -> sha1(path) + " " + path.getFileName().toString()) .collect(Collectors.toList()); diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 107d82ffa..a4c58097b 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -56,8 +56,12 @@ protected void exec() throws Exception { downloadProguard(); extractProguard(); generateConfigs(); - proguardApi(); - proguardStandalone(); + if (getProject().hasProperty("baritone.forge_build")) { + proguardApi(this.artifactForgeApiPath.toString()); + } else { + proguardApi(this.artifactApiPath.toString()); + proguardStandalone(this.artifactStandalonePath.toString()); + } cleanup(); } @@ -99,18 +103,27 @@ private void generateConfigs() throws Exception { String out = IOUtils.toString(p.getInputStream(), "UTF-8").split("\n")[0].split("Opened ")[1].replace("]", ""); template.add(2, "-libraryjars '" + out + "'"); - // Discover all of the libraries that we will need to acquire from gradle - acquireDependencies().forEach(f -> { - if (f.toString().endsWith("-recomp.jar")) { - // remove MCP mapped jar - return; - } - if (f.toString().endsWith("client-extra.jar")) { - // go from the extra to the original downloaded client - f = new File(f.getParentFile(), "client.jar"); + { + final Stream libraries; + { + // Discover all of the libraries that we will need to acquire from gradle + final Stream dependencies = acquireDependencies() + // remove MCP mapped jar + .filter(f -> !f.toString().endsWith("-recomp.jar")) + // go from the extra to the original downloaded client + .map(f -> f.toString().endsWith("client-extra.jar") ? new File(f.getParentFile(), "client.jar") : f); + + if (getProject().hasProperty("baritone.forge_build")) { + libraries = dependencies + .map(f -> f.toString().endsWith("client.jar") ? getSrgMcJar() : f); + } else { + libraries = dependencies; + } } - template.add(2, "-libraryjars '" + f + "'"); - }); + libraries.forEach(f -> { + template.add(2, "-libraryjars '" + f + "'"); + }); + } // API config doesn't require any changes from the changes that we made to the template Files.write(getTemporaryFile(PROGUARD_API_CONFIG), template); @@ -121,18 +134,25 @@ private void generateConfigs() throws Exception { Files.write(getTemporaryFile(PROGUARD_STANDALONE_CONFIG), standalone); } + private File getSrgMcJar() { + return getProject().getTasks().findByName("copyMcJar").getOutputs().getFiles().getSingleFile(); + } + private Stream acquireDependencies() { - return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles().stream().filter(File::isFile); + return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() + .stream() + .filter(File::isFile); + //.peek(f -> System.out.println("xd: " + f)); } - private void proguardApi() throws Exception { + private void proguardApi(String artifact) throws Exception { runProguard(getTemporaryFile(PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); + Determinizer.determinize(this.proguardOut.toString(), artifact); } - private void proguardStandalone() throws Exception { + private void proguardStandalone(String artifact) throws Exception { runProguard(getTemporaryFile(PROGUARD_STANDALONE_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString()); + Determinizer.determinize(this.proguardOut.toString(), artifact); } private void cleanup() { diff --git a/scripts/proguard.pro b/scripts/proguard.pro index ac199e3bd..f12246722 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -17,6 +17,7 @@ # also lwjgl lol -dontwarn module-info +# please do not change the comment below -keep class baritone.api.** { *; } # this is the keep api # service provider needs these class names diff --git a/src/api/java/baritone/api/BaritoneAPI.java b/src/api/java/baritone/api/BaritoneAPI.java index 53937bd80..66875efe1 100644 --- a/src/api/java/baritone/api/BaritoneAPI.java +++ b/src/api/java/baritone/api/BaritoneAPI.java @@ -19,9 +19,6 @@ import baritone.api.utils.SettingsUtil; -import java.util.Iterator; -import java.util.ServiceLoader; - /** * Exposes the {@link IBaritoneProvider} instance and the {@link Settings} instance for API usage. * @@ -37,9 +34,11 @@ public final class BaritoneAPI { settings = new Settings(); SettingsUtil.readAndApply(settings); - ServiceLoader baritoneLoader = ServiceLoader.load(IBaritoneProvider.class); - Iterator instances = baritoneLoader.iterator(); - provider = instances.next(); + try { + provider = (IBaritoneProvider)Class.forName("baritone.BaritoneProvider").newInstance(); + } catch (ReflectiveOperationException ex) { + throw new RuntimeException(ex); + } } public static IBaritoneProvider getProvider() { diff --git a/src/launch/java/baritone/launch/BaritoneMixinConnector.java b/src/launch/java/baritone/launch/BaritoneMixinConnector.java new file mode 100644 index 000000000..25094ef08 --- /dev/null +++ b/src/launch/java/baritone/launch/BaritoneMixinConnector.java @@ -0,0 +1,30 @@ +/* + * 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; + +import org.spongepowered.asm.mixin.Mixins; +import org.spongepowered.asm.mixin.connect.IMixinConnector; + + +public class BaritoneMixinConnector implements IMixinConnector { + + @Override + public void connect() { + Mixins.addConfiguration("mixins.baritone.json"); + } +} \ No newline at end of file diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index 45c5d4643..2790dda8a 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -32,7 +32,8 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import static org.spongepowered.asm.lib.Opcodes.GETFIELD; +import static org.objectweb.asm.Opcodes.GETFIELD; +//import static org.spongepowered.asm.lib.Opcodes.GETFIELD; /** * @author Brady diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index ff36593e7..c137ec61f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -27,7 +27,8 @@ import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.world.ClientWorld; -import org.spongepowered.asm.lib.Opcodes; +//import org.spongepowered.asm.lib.Opcodes; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/launch/resources/META-INF/mods.toml b/src/launch/resources/META-INF/mods.toml new file mode 100644 index 000000000..7da9c21d6 --- /dev/null +++ b/src/launch/resources/META-INF/mods.toml @@ -0,0 +1,36 @@ +# This is an example mods.toml file. It contains the data relating to the loading mods. +# There are several mandatory fields (#mandatory), and many more that are optional (#optional). +# The overall format is standard TOML format, v0.5.0. +# Note that there are a couple of TOML lists in this file. +# Find more information on toml format here: https://github.com/toml-lang/toml +# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml +modLoader="javafml" #mandatory +# A version range to match for said mod loader - for regular FML @Mod it will be the forge version +loaderVersion="[31,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +# A URL to refer people to when problems occur with this mod +issueTrackerURL="http://my.issue.tracker/" #optional +# A list of mods - how many allowed here is determined by the individual mod loader +[[mods]] #mandatory +# The modid of the mod +modId="baritbone" #mandatory +# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it +version="${file.jarVersion}" #mandatory + # A display name for the mod +displayName="Example Mod" #mandatory +# A URL for the "homepage" for this mod, displayed in the mod UI +displayURL="http://example.com/" #optional +# A file name (in the root of the mod JAR) containing a logo for display +logoFile="examplemod.png" #optional +# A text field displayed in the mod UI +credits="Thanks for this example mod goes to Java" #optional +# A text field displayed in the mod UI +authors="Love, Cheese and small house plants" #optional +# The description text for the mod (multi line!) (#mandatory) +description=''' +This is a long form description of the mod. You can write whatever you want here + +Have some lorem ipsum. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mollis lacinia magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed sagittis luctus odio eu tempus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque volutpat ligula eget lacus auctor sagittis. In hac habitasse platea dictumst. Nunc gravida elit vitae sem vehicula efficitur. Donec mattis ipsum et arcu lobortis, eleifend sagittis sem rutrum. Cras pharetra quam eget posuere fermentum. Sed id tincidunt justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. +''' + diff --git a/src/main/resources/META-INF/services/baritone.api.IBaritoneProvider b/src/main/resources/META-INF/services/baritone.api.IBaritoneProvider deleted file mode 100644 index 934db7d33..000000000 --- a/src/main/resources/META-INF/services/baritone.api.IBaritoneProvider +++ /dev/null @@ -1 +0,0 @@ -baritone.BaritoneProvider \ No newline at end of file From db718a178182166d19920a876c4abaa0250c6354 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Wed, 25 Mar 2020 01:16:30 -0400 Subject: [PATCH 111/935] Add @Mod annotated class --- scripts/proguard.pro | 2 ++ .../baritone/launch/BaritoneForgeModXD.class | Bin 0 -> 414 bytes 2 files changed, 2 insertions(+) create mode 100644 src/launch/resources/baritone/launch/BaritoneForgeModXD.class diff --git a/scripts/proguard.pro b/scripts/proguard.pro index f12246722..7e67a22ac 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -16,6 +16,8 @@ -dontwarn org.lwjgl.** # also lwjgl lol -dontwarn module-info +# we dont have forge +-dontwarn baritone.launch.BaritoneForgeModXD # please do not change the comment below -keep class baritone.api.** { *; } # this is the keep api diff --git a/src/launch/resources/baritone/launch/BaritoneForgeModXD.class b/src/launch/resources/baritone/launch/BaritoneForgeModXD.class new file mode 100644 index 0000000000000000000000000000000000000000..d97e9e052d389464addb3706322f506ad6d5b240 GIT binary patch literal 414 zcmah^y-ve07(BO0L(@V_K|+lD48VXFHV_g&>J&f%6tOz4)4ED*DRKHfS~UGu4}=IX)D-tHqXhVfFY1bNJy zKV?fLU4$;f-e32*H!>V0Mmb(;qhuv=m-{rHmj#!$EUn>`e8~{5MA0aQe%m6W8VtQF zZM3^)=$@RWL-Y~H2rys>+(Oq3$I1VdDLS~bGfEpJRN=8HGgZBctRQ8QSSgB>zUlc| zj9+Y1Nj25pvH#o{r%RRUT9f6*80&=7*3>vahsyZF=u$Vr5i#C!AUylP@STJX#)LhR bJ#G^Y+jodfY_ Date: Wed, 25 Mar 2020 19:00:26 -0400 Subject: [PATCH 112/935] cleanup --- .../gradle/task/BaritoneGradleTask.java | 29 +++++++++---------- .../baritone/gradle/task/CreateDistTask.java | 28 +++++++++--------- .../baritone/gradle/task/ProguardTask.java | 17 ++++------- 3 files changed, 34 insertions(+), 40 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 15da0903f..9549d7e73 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -45,31 +45,30 @@ class BaritoneGradleTask extends DefaultTask { ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", ARTIFACT_API = "%s-api-%s.jar", ARTIFACT_STANDALONE = "%s-standalone-%s.jar", - ARTIFACT_FORGE_API = "%s-api-forge-%s.jar"; - // TODO: forge standalone + ARTIFACT_FORGE_UNOPTIMIZED = "%s-unoptimized-forge-%s.jar", + ARTIFACT_FORGE_API = "%s-api-forge-%s.jar", + ARTIFACT_FORGE_STANDALONE = "%s-standalone-forge-%s.jar"; protected String artifactName, artifactVersion; protected final Path - artifactPath, artifactUnoptimizedPath, - // processed by proguard - artifactApiPath, artifactStandalonePath, + artifactPath, + artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, // these are different for forge builds proguardOut; - protected final Path artifactForgeApiPath; - { + + public BaritoneGradleTask() { this.artifactName = getProject().getName(); this.artifactVersion = getProject().getVersion().toString(); this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); - // just make it null if its not used lol + if (getProject().hasProperty("baritone.forge_build")) { - this.artifactForgeApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); - this.artifactApiPath = null; - this.artifactStandalonePath = null; + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_STANDALONE)); } else { - this.artifactForgeApiPath = null; - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); } this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index d5f42ef0f..9b7861ef2 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -42,10 +42,9 @@ protected void exec() throws Exception { super.verifyArtifacts(); // Define the distribution file paths - Path api = getRelativeFile("dist/" + formatVersion(ARTIFACT_API)); - Path standalone = getRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)); - Path unoptimized = getRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)); - Path forgeApi = getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)); + Path api = getRelativeFile("dist/" + getFileName(artifactApiPath)); + Path standalone = getRelativeFile("dist/" + getFileName(artifactStandalonePath)); + Path unoptimized = getRelativeFile("dist/" + getFileName(artifactUnoptimizedPath)); // NIO will not automatically create directories Path dir = getRelativeFile("dist/"); @@ -54,18 +53,15 @@ protected void exec() throws Exception { } // Copy build jars to dist/ - if (getProject().hasProperty("baritone.forge_build")) { - Files.copy(this.artifactForgeApiPath, forgeApi, REPLACE_EXISTING); - } else { - Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); - Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); - Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); - } - + // TODO: dont copy files that dont exist + Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); + Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); + Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); // Calculate all checksums and format them like "shasum" - List shasum = Stream.of(forgeApi, api, standalone, unoptimized) - .filter(f -> false) // TODO: dont sha nonexistant artifacts + // TODO: get the hash for both forge and non forge jars + List shasum = Stream.of(api, standalone, unoptimized) + .filter(Files::exists) .map(path -> sha1(path) + " " + path.getFileName().toString()) .collect(Collectors.toList()); @@ -75,6 +71,10 @@ protected void exec() throws Exception { Files.write(getRelativeFile("dist/checksums.txt"), shasum); } + private static String getFileName(Path p) { + return p.getFileName().toString(); + } + private static synchronized String sha1(Path path) { try { if (SHA1_DIGEST == null) { diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index a4c58097b..b19efdedd 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -56,12 +56,8 @@ protected void exec() throws Exception { downloadProguard(); extractProguard(); generateConfigs(); - if (getProject().hasProperty("baritone.forge_build")) { - proguardApi(this.artifactForgeApiPath.toString()); - } else { - proguardApi(this.artifactApiPath.toString()); - proguardStandalone(this.artifactStandalonePath.toString()); - } + proguardApi(); + proguardStandalone(); cleanup(); } @@ -142,17 +138,16 @@ private Stream acquireDependencies() { return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() .stream() .filter(File::isFile); - //.peek(f -> System.out.println("xd: " + f)); } - private void proguardApi(String artifact) throws Exception { + private void proguardApi() throws Exception { runProguard(getTemporaryFile(PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), artifact); + Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); } - private void proguardStandalone(String artifact) throws Exception { + private void proguardStandalone() throws Exception { runProguard(getTemporaryFile(PROGUARD_STANDALONE_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), artifact); + Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString()); } private void cleanup() { From 6cc31a9422d26603142ce2708cf3f8273854c04e Mon Sep 17 00:00:00 2001 From: Babbaj Date: Wed, 25 Mar 2020 20:23:41 -0400 Subject: [PATCH 113/935] update mods.toml and fix modid --- build.gradle | 5 +---- .../launch/mixins/MixinLivingEntity.java | 1 - .../launch/mixins/MixinMinecraft.java | 1 - src/launch/resources/META-INF/mods.toml | 20 +++++++----------- .../baritone/launch/BaritoneForgeModXD.class | Bin 414 -> 412 bytes src/launch/resources/pack.mcmeta | 6 ++++++ 6 files changed, 15 insertions(+), 18 deletions(-) create mode 100644 src/launch/resources/pack.mcmeta diff --git a/build.gradle b/build.gradle index d7a9de4f0..fe4a22794 100755 --- a/build.gradle +++ b/build.gradle @@ -88,7 +88,6 @@ minecraft { mappings channel: 'snapshot', version: '20200213-1.15.1' if (getProject().hasProperty("baritone.forge_build")) { - println 'searge mappings!!' reobfMappings 'searge' } else { reobfMappings 'notch' @@ -154,7 +153,6 @@ dependencies { } runtime launchCompile('org.ow2.asm:asm-debug-all:5.2') runtime launchCompile('com.github.ImpactDevelopment:SimpleTweaker:1.2') - //"org.spongepowered:mixin:0.8.+" runtime launchCompile('org.spongepowered:mixin:0.8.+') { // Mixin includes a lot of dependencies that are too up-to-date exclude module: 'launchwrapper' @@ -220,12 +218,11 @@ task createSrgMc(type: RenameJarInPlace) { // fork setMappingType(net.minecraftforge.gradle.common.util.MappingFile.Mapping.SEARGE) - setJarTask('nword') + setJarTask('trans alaskan pipeline') } project.afterEvaluate { createSrgMc.dependsOn(extractSrg, copyMcJar) createSrgMc.setMappings(extractSrg.getOutput()) - //println(createSrgMc.getClasspath().getFiles()) } diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index 2790dda8a..026a23cfa 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -33,7 +33,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import static org.objectweb.asm.Opcodes.GETFIELD; -//import static org.spongepowered.asm.lib.Opcodes.GETFIELD; /** * @author Brady diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index c137ec61f..53df678f8 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -27,7 +27,6 @@ import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.world.ClientWorld; -//import org.spongepowered.asm.lib.Opcodes; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; diff --git a/src/launch/resources/META-INF/mods.toml b/src/launch/resources/META-INF/mods.toml index 7da9c21d6..2e788f382 100644 --- a/src/launch/resources/META-INF/mods.toml +++ b/src/launch/resources/META-INF/mods.toml @@ -8,29 +8,25 @@ modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version loaderVersion="[31,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. # A URL to refer people to when problems occur with this mod -issueTrackerURL="http://my.issue.tracker/" #optional +issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional # A list of mods - how many allowed here is determined by the individual mod loader [[mods]] #mandatory # The modid of the mod -modId="baritbone" #mandatory +modId="baritoe" #mandatory # The version number of the mod - there's a few well known ${} variables useable here or just hardcode it version="${file.jarVersion}" #mandatory # A display name for the mod -displayName="Example Mod" #mandatory +displayName="Baritone" #mandatory # A URL for the "homepage" for this mod, displayed in the mod UI -displayURL="http://example.com/" #optional +displayURL="https://github.com/cabaletta/baritone" #optional # A file name (in the root of the mod JAR) containing a logo for display -logoFile="examplemod.png" #optional +#logoFile="examplemod.png" #optional # A text field displayed in the mod UI -credits="Thanks for this example mod goes to Java" #optional +credits="Hat Gamers" #optional # A text field displayed in the mod UI -authors="Love, Cheese and small house plants" #optional +authors="leijurv, Brady" #optional # The description text for the mod (multi line!) (#mandatory) description=''' -This is a long form description of the mod. You can write whatever you want here - -Have some lorem ipsum. - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mollis lacinia magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed sagittis luctus odio eu tempus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque volutpat ligula eget lacus auctor sagittis. In hac habitasse platea dictumst. Nunc gravida elit vitae sem vehicula efficitur. Donec mattis ipsum et arcu lobortis, eleifend sagittis sem rutrum. Cras pharetra quam eget posuere fermentum. Sed id tincidunt justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. +A Minecraft pathfinder bot. ''' diff --git a/src/launch/resources/baritone/launch/BaritoneForgeModXD.class b/src/launch/resources/baritone/launch/BaritoneForgeModXD.class index d97e9e052d389464addb3706322f506ad6d5b240..cfb3137e28463732febb321bc6d1462d94b56cbd 100644 GIT binary patch delta 18 ZcmbQoJcoJ0BzE?s#G=fS{Ef4j838tx#G=fSr2M>%Gnp9yO4$b# diff --git a/src/launch/resources/pack.mcmeta b/src/launch/resources/pack.mcmeta new file mode 100644 index 000000000..1bc616027 --- /dev/null +++ b/src/launch/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "baritoe", + "pack_format": 5 + } +} From b9a7efc25bdcaabc9d9e5add025ac9b5bb507574 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 25 Mar 2020 17:26:18 -0700 Subject: [PATCH 114/935] v1.3.7 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 183eb5648..8b1649d24 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.3.6' +version '1.3.7' buildscript { repositories { From b13b86b67a3abdbdbc9b348a6dbb94a0b1286610 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Wed, 25 Mar 2020 20:34:54 -0400 Subject: [PATCH 115/935] get the hash of all jars in the dist directory --- .../src/main/java/baritone/gradle/task/CreateDistTask.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 9b7861ef2..6530830e0 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -59,9 +59,8 @@ protected void exec() throws Exception { Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); // Calculate all checksums and format them like "shasum" - // TODO: get the hash for both forge and non forge jars - List shasum = Stream.of(api, standalone, unoptimized) - .filter(Files::exists) + List shasum = Files.walk(getRelativeFile("dist"), 1) + .filter(p -> p.toString().endsWith(".jar")) .map(path -> sha1(path) + " " + path.getFileName().toString()) .collect(Collectors.toList()); From 16f6baf216f8a9036123e222aabb0cca21e73f56 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 25 Mar 2020 17:39:01 -0700 Subject: [PATCH 116/935] v1.4.5 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2365ba5cf..f6ea01a5c 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.4.4' +version '1.4.5' buildscript { repositories { From 2d421e66dcbc8a16c6e5a7327411fe9cfbf95691 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 25 Mar 2020 17:51:56 -0700 Subject: [PATCH 117/935] v1.5.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 208a24088..fdd02f5a0 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.5.1' +version '1.5.2' buildscript { repositories { From aead997b133411ecf9a969c90444b66dbd93a6f1 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Wed, 25 Mar 2020 20:53:37 -0400 Subject: [PATCH 118/935] dont sha old jars --- build.gradle | 2 +- .../gradle/task/BaritoneGradleTask.java | 8 ++++---- .../baritone/gradle/task/CreateDistTask.java | 17 ++++++++++++++--- src/api/java/baritone/api/BaritoneAPI.java | 2 +- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index fe4a22794..9943ad3d2 100755 --- a/build.gradle +++ b/build.gradle @@ -218,7 +218,7 @@ task createSrgMc(type: RenameJarInPlace) { // fork setMappingType(net.minecraftforge.gradle.common.util.MappingFile.Mapping.SEARGE) - setJarTask('trans alaskan pipeline') + setJarTask('trans alaska pipeline') } project.afterEvaluate { createSrgMc.dependsOn(extractSrg, copyMcJar) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 9549d7e73..b77889d79 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -41,10 +41,10 @@ class BaritoneGradleTask extends DefaultTask { PROGUARD_STANDALONE_CONFIG = "standalone.pro", PROGUARD_EXPORT_PATH = "proguard_out.jar", - ARTIFACT_STANDARD = "%s-%s.jar", - ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", - ARTIFACT_API = "%s-api-%s.jar", - ARTIFACT_STANDALONE = "%s-standalone-%s.jar", + ARTIFACT_STANDARD = "%s-%s.jar", + ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", + ARTIFACT_API = "%s-api-%s.jar", + ARTIFACT_STANDALONE = "%s-standalone-%s.jar", ARTIFACT_FORGE_UNOPTIMIZED = "%s-unoptimized-forge-%s.jar", ARTIFACT_FORGE_API = "%s-api-forge-%s.jar", ARTIFACT_FORGE_STANDALONE = "%s-standalone-forge-%s.jar"; diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 6530830e0..6b9f3bf9c 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -23,9 +23,9 @@ import java.nio.file.Files; import java.nio.file.Path; import java.security.MessageDigest; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; @@ -59,8 +59,8 @@ protected void exec() throws Exception { Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); // Calculate all checksums and format them like "shasum" - List shasum = Files.walk(getRelativeFile("dist"), 1) - .filter(p -> p.toString().endsWith(".jar")) + List shasum = getAllDistJars().stream() + .filter(Files::exists) .map(path -> sha1(path) + " " + path.getFileName().toString()) .collect(Collectors.toList()); @@ -74,6 +74,17 @@ private static String getFileName(Path p) { return p.getFileName().toString(); } + private List getAllDistJars() { + return Arrays.asList( + getRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_API)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_STANDALONE)) + ); + } + private static synchronized String sha1(Path path) { try { if (SHA1_DIGEST == null) { diff --git a/src/api/java/baritone/api/BaritoneAPI.java b/src/api/java/baritone/api/BaritoneAPI.java index 66875efe1..4a87449cd 100644 --- a/src/api/java/baritone/api/BaritoneAPI.java +++ b/src/api/java/baritone/api/BaritoneAPI.java @@ -35,7 +35,7 @@ public final class BaritoneAPI { SettingsUtil.readAndApply(settings); try { - provider = (IBaritoneProvider)Class.forName("baritone.BaritoneProvider").newInstance(); + provider = (IBaritoneProvider) Class.forName("baritone.BaritoneProvider").newInstance(); } catch (ReflectiveOperationException ex) { throw new RuntimeException(ex); } From a4f7207089d21b28ef9561a2435c0b2a95eebf94 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Wed, 25 Mar 2020 21:00:25 -0400 Subject: [PATCH 119/935] ok --- src/launch/java/baritone/launch/BaritoneMixinConnector.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/launch/java/baritone/launch/BaritoneMixinConnector.java b/src/launch/java/baritone/launch/BaritoneMixinConnector.java index 25094ef08..86069e14f 100644 --- a/src/launch/java/baritone/launch/BaritoneMixinConnector.java +++ b/src/launch/java/baritone/launch/BaritoneMixinConnector.java @@ -20,7 +20,6 @@ import org.spongepowered.asm.mixin.Mixins; import org.spongepowered.asm.mixin.connect.IMixinConnector; - public class BaritoneMixinConnector implements IMixinConnector { @Override From 8c3fac977e63950029868871b4f3658f051c73e6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 25 Mar 2020 21:19:15 -0700 Subject: [PATCH 120/935] unscuff --- Dockerfile | 1 + .../baritone/gradle/task/CreateDistTask.java | 22 +++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index 020bea0c4..d861c16ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,3 +21,4 @@ WORKDIR /code RUN dpkg -i scripts/xvfb_1.16.4-1_amd64.deb RUN ./gradlew build +RUN ./gradlew build -Pbaritone.forge_build diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 6b9f3bf9c..28be55127 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -42,9 +42,9 @@ protected void exec() throws Exception { super.verifyArtifacts(); // Define the distribution file paths - Path api = getRelativeFile("dist/" + getFileName(artifactApiPath)); - Path standalone = getRelativeFile("dist/" + getFileName(artifactStandalonePath)); - Path unoptimized = getRelativeFile("dist/" + getFileName(artifactUnoptimizedPath)); + Path api = getRelativeFile("dist/" + getFileName(artifactApiPath)); + Path standalone = getRelativeFile("dist/" + getFileName(artifactStandalonePath)); + Path unoptimized = getRelativeFile("dist/" + getFileName(artifactUnoptimizedPath)); // NIO will not automatically create directories Path dir = getRelativeFile("dist/"); @@ -54,8 +54,8 @@ protected void exec() throws Exception { // Copy build jars to dist/ // TODO: dont copy files that dont exist - Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); - Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); + Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); + Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); // Calculate all checksums and format them like "shasum" @@ -76,12 +76,12 @@ private static String getFileName(Path p) { private List getAllDistJars() { return Arrays.asList( - getRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_API)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_STANDALONE)) + getRelativeFile("dist/" + formatVersion(ARTIFACT_API)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_STANDALONE)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)) ); } From 2a830b6b68e396b7993afd37d129b48cc6cda4ed Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 21 Apr 2020 12:05:09 -0700 Subject: [PATCH 121/935] v1.3.8 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8b1649d24..a5edf8bcb 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.3.7' +version '1.3.8' buildscript { repositories { From fe0b54cfb403cba57c7eb810fcb67a233840c609 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 21 Apr 2020 12:23:47 -0700 Subject: [PATCH 122/935] v1.4.6 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f6ea01a5c..91cb0a091 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.4.5' +version '1.4.6' buildscript { repositories { From b7870d059c8418f778504e8000d834eb2b8ea6b6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 21 Apr 2020 12:34:46 -0700 Subject: [PATCH 123/935] v1.5.3 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 54bec8bef..e323e4a74 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.5.2' +version '1.5.3' buildscript { repositories { From 410ea059fc58b9c9d77ecb5b82420e28a18c887b Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 15 May 2020 21:03:08 -0500 Subject: [PATCH 124/935] Update mappings to 20200515-1.15.1 --- build.gradle | 2 +- .../baritone/launch/mixins/MixinCommandSuggestionHelper.java | 2 +- src/main/java/baritone/utils/PlayerMovementInput.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index e323e4a74..b9c6d9137 100755 --- a/build.gradle +++ b/build.gradle @@ -85,7 +85,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20200213-1.15.1' + mappings channel: 'snapshot', version: '20200515-1.15.1' if (getProject().hasProperty("baritone.forge_build")) { reobfMappings 'searge' diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index 3ed72c27c..d749c35b8 100644 --- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -55,7 +55,7 @@ public class MixinCommandSuggestionHelper { private CompletableFuture field_228107_p_; @Inject( - method = "func_228111_a_", + method = "init", at = @At("HEAD"), cancellable = true ) diff --git a/src/main/java/baritone/utils/PlayerMovementInput.java b/src/main/java/baritone/utils/PlayerMovementInput.java index c81a90b19..247fda702 100644 --- a/src/main/java/baritone/utils/PlayerMovementInput.java +++ b/src/main/java/baritone/utils/PlayerMovementInput.java @@ -33,7 +33,7 @@ public void func_225607_a_(boolean p_225607_1_) { this.moveStrafe = 0.0F; this.moveForward = 0.0F; - jump = handler.isInputForcedDown(Input.JUMP); // oppa gangnam style + this.jump = handler.isInputForcedDown(Input.JUMP); // oppa gangnam style if (this.forwardKeyDown = handler.isInputForcedDown(Input.MOVE_FORWARD)) { this.moveForward++; @@ -51,7 +51,7 @@ public void func_225607_a_(boolean p_225607_1_) { this.moveStrafe--; } - if (this.field_228350_h_ = handler.isInputForcedDown(Input.SNEAK)) { + if (this.sneaking = handler.isInputForcedDown(Input.SNEAK)) { this.moveStrafe *= 0.3D; this.moveForward *= 0.3D; } From 682de71ab7415e9788ffddecf834298a936d6cac Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sat, 16 May 2020 18:21:27 -0400 Subject: [PATCH 125/935] Fix #mine in forge --- src/api/java/baritone/api/utils/BlockOptionalMeta.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 887e153f4..8bac62c89 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -159,7 +159,14 @@ private static synchronized List drops(Block b) { if (lootTableLocation == LootTables.EMPTY) { return Collections.emptyList(); } else { - return getManager().getLootTableFromLocation(lootTableLocation).generate(new LootContext.Builder(null).withRandom(new Random()).withParameter(LootParameters.POSITION, BlockPos.ZERO).withParameter(LootParameters.TOOL, ItemStack.EMPTY).withNullableParameter(LootParameters.BLOCK_ENTITY, null).withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()).build(LootParameterSets.BLOCK)).stream().map(ItemStack::getItem).collect(Collectors.toList()); + List items = new ArrayList<>(); + + // the other overload for generate doesnt work in forge because forge adds code that requires a non null world + getManager().getLootTableFromLocation(lootTableLocation).generate( + new LootContext.Builder(null).withRandom(new Random()).withParameter(LootParameters.POSITION, BlockPos.ZERO).withParameter(LootParameters.TOOL, ItemStack.EMPTY).withNullableParameter(LootParameters.BLOCK_ENTITY, null).withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()).build(LootParameterSets.BLOCK), + stack -> items.add(stack.getItem()) + ); + return items; } }); } From 47501ab8e1504de74b8b0535ea20818904bff527 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sat, 16 May 2020 18:23:38 -0400 Subject: [PATCH 126/935] fix terrible formatting --- src/api/java/baritone/api/utils/BlockOptionalMeta.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 8bac62c89..4bedc0201 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -163,7 +163,13 @@ private static synchronized List drops(Block b) { // the other overload for generate doesnt work in forge because forge adds code that requires a non null world getManager().getLootTableFromLocation(lootTableLocation).generate( - new LootContext.Builder(null).withRandom(new Random()).withParameter(LootParameters.POSITION, BlockPos.ZERO).withParameter(LootParameters.TOOL, ItemStack.EMPTY).withNullableParameter(LootParameters.BLOCK_ENTITY, null).withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()).build(LootParameterSets.BLOCK), + new LootContext.Builder(null) + .withRandom(new Random()) + .withParameter(LootParameters.POSITION, BlockPos.ZERO) + .withParameter(LootParameters.TOOL, ItemStack.EMPTY) + .withNullableParameter(LootParameters.BLOCK_ENTITY, null) + .withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()) + .build(LootParameterSets.BLOCK), stack -> items.add(stack.getItem()) ); return items; From 854985e5b5ea19e35335bab9a7382eac47e22dd2 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 19 Jul 2020 15:50:56 -0500 Subject: [PATCH 127/935] Baritone 1.16.1 --- build.gradle | 6 +- src/api/java/baritone/api/Settings.java | 4 +- .../api/command/datatypes/ForDirection.java | 2 +- .../api/command/helpers/Paginator.java | 41 +++++++------- .../api/event/events/RenderEvent.java | 2 +- .../api/event/events/RotationMoveEvent.java | 4 +- .../event/listener/IGameEventListener.java | 4 +- .../baritone/api/pathing/goals/GoalXZ.java | 4 +- .../baritone/api/process/IBuilderProcess.java | 6 +- .../baritone/api/selection/ISelection.java | 4 +- .../baritone/api/utils/BetterBlockPos.java | 6 +- .../baritone/api/utils/BlockOptionalMeta.java | 8 +-- src/api/java/baritone/api/utils/Helper.java | 27 ++++----- .../baritone/api/utils/IPlayerContext.java | 10 ++-- .../baritone/api/utils/RayTraceUtils.java | 12 ++-- .../baritone/api/utils/RotationUtils.java | 33 +++++------ .../java/baritone/api/utils/SettingsUtil.java | 6 +- src/api/java/baritone/api/utils/VecUtils.java | 10 ++-- .../launch/mixins/MixinLivingEntity.java | 1 - .../launch/mixins/MixinLootContext.java | 10 ++-- .../launch/mixins/MixinMinecraft.java | 6 +- .../baritone/launch/mixins/MixinScreen.java | 2 +- .../launch/mixins/MixinWorldRenderer.java | 1 + .../baritone/behavior/InventoryBehavior.java | 4 +- .../baritone/behavior/PathingBehavior.java | 2 +- src/main/java/baritone/cache/CachedChunk.java | 8 ++- .../java/baritone/cache/CachedRegion.java | 6 +- src/main/java/baritone/cache/CachedWorld.java | 6 +- src/main/java/baritone/cache/ChunkPacker.java | 24 ++++---- src/main/java/baritone/cache/WorldData.java | 6 +- .../java/baritone/cache/WorldProvider.java | 17 +++--- .../baritone/command/BaritoneChatControl.java | 15 ++--- .../command/defaults/ChestsCommand.java | 6 +- .../command/defaults/ComeCommand.java | 2 +- .../command/defaults/HelpCommand.java | 38 ++++++------- .../baritone/command/defaults/SelCommand.java | 7 +-- .../baritone/command/defaults/SetCommand.java | 41 +++++++------- .../command/defaults/WaypointsCommand.java | 55 ++++++++++--------- .../java/baritone/event/GameEventHandler.java | 2 +- .../pathing/movement/CalculationContext.java | 3 +- .../pathing/movement/MovementHelper.java | 10 ++-- .../movement/movements/MovementDescend.java | 4 +- .../movement/movements/MovementFall.java | 19 ++++--- .../movement/movements/MovementParkour.java | 2 +- .../movement/movements/MovementPillar.java | 4 +- .../movement/movements/MovementTraverse.java | 8 +-- .../baritone/pathing/path/PathExecutor.java | 18 +++--- .../java/baritone/process/BuilderProcess.java | 35 ++++++------ .../java/baritone/process/FarmProcess.java | 6 +- .../java/baritone/process/FollowProcess.java | 4 +- .../java/baritone/process/MineProcess.java | 6 +- .../java/baritone/selection/Selection.java | 8 +-- .../java/baritone/utils/BaritoneAutoTest.java | 24 ++++---- .../BlockStateInterfaceAccessWrapper.java | 4 +- src/main/java/baritone/utils/GuiClick.java | 40 +++++++------- src/main/java/baritone/utils/IRenderer.java | 2 +- .../java/baritone/utils/PathRenderer.java | 7 ++- src/main/java/baritone/utils/ToolSet.java | 2 +- .../baritone/utils/pathing/Avoidance.java | 6 +- .../format/defaults/SpongeSchematic.java | 6 +- 60 files changed, 347 insertions(+), 319 deletions(-) diff --git a/build.gradle b/build.gradle index b9c6d9137..a9ea66a33 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.5.3' +version '1.6.1' buildscript { repositories { @@ -85,7 +85,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20200515-1.15.1' + mappings channel: 'snapshot', version: '20200514-1.16' if (getProject().hasProperty("baritone.forge_build")) { reobfMappings 'searge' @@ -146,7 +146,7 @@ repositories { } dependencies { - minecraft 'com.github.ImpactDevelopment:Vanilla:1.15.2' + minecraft 'com.github.ImpactDevelopment:Vanilla:1.16.1' runtime launchCompile('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 908544295..bfac065af 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -23,7 +23,7 @@ import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; import net.minecraft.item.Item; -import net.minecraft.util.math.Vec3i; +import net.minecraft.util.math.vector.Vector3i; import net.minecraft.util.text.ITextComponent; import java.awt.*; @@ -757,7 +757,7 @@ public final class Settings { /** * How far to move before repeating the build. 0 to disable repeating on a certain axis, 0,0,0 to disable entirely */ - public final Setting buildRepeat = new Setting<>(new Vec3i(0, 0, 0)); + public final Setting buildRepeat = new Setting<>(new Vector3i(0, 0, 0)); /** * How many times to buildrepeat. -1 for infinite. diff --git a/src/api/java/baritone/api/command/datatypes/ForDirection.java b/src/api/java/baritone/api/command/datatypes/ForDirection.java index cbfce3f20..f946b983f 100644 --- a/src/api/java/baritone/api/command/datatypes/ForDirection.java +++ b/src/api/java/baritone/api/command/datatypes/ForDirection.java @@ -36,7 +36,7 @@ public Direction get(IDatatypeContext ctx) throws CommandException { public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() .append(Stream.of(Direction.values()) - .map(Direction::getName).map(String::toLowerCase)) + .map(Direction::getName2).map(String::toLowerCase)) .filterPrefix(ctx.getConsumer().getString()) .stream(); } diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index a97d38dfa..4cea55261 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -23,6 +23,7 @@ import baritone.api.command.argument.IArgConsumer; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; @@ -74,40 +75,40 @@ public void display(Function transform, String commandPrefix) } boolean hasPrevPage = commandPrefix != null && validPage(page - 1); boolean hasNextPage = commandPrefix != null && validPage(page + 1); - ITextComponent prevPageComponent = new StringTextComponent("<<"); + TextComponent prevPageComponent = new StringTextComponent("<<"); if (hasPrevPage) { - prevPageComponent.getStyle() - .setClickEvent(new ClickEvent( + prevPageComponent.func_230530_a_(prevPageComponent.getStyle() + .func_240715_a_(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format("%s %d", commandPrefix, page - 1) )) - .setHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, + .func_240716_a_(new HoverEvent( + HoverEvent.Action.field_230550_a_, new StringTextComponent("Click to view previous page") - )); + ))); } else { - prevPageComponent.getStyle().setColor(TextFormatting.DARK_GRAY); + prevPageComponent.func_230530_a_(prevPageComponent.getStyle().func_240712_a_(TextFormatting.DARK_GRAY)); } - ITextComponent nextPageComponent = new StringTextComponent(">>"); + TextComponent nextPageComponent = new StringTextComponent(">>"); if (hasNextPage) { - nextPageComponent.getStyle() - .setClickEvent(new ClickEvent( + nextPageComponent.func_230530_a_(nextPageComponent.getStyle() + .func_240715_a_(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format("%s %d", commandPrefix, page + 1) )) - .setHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, + .func_240716_a_(new HoverEvent( + HoverEvent.Action.field_230550_a_, new StringTextComponent("Click to view next page") - )); + ))); } else { - nextPageComponent.getStyle().setColor(TextFormatting.DARK_GRAY); + nextPageComponent.func_230530_a_(nextPageComponent.getStyle().func_240712_a_(TextFormatting.DARK_GRAY)); } - ITextComponent pagerComponent = new StringTextComponent(""); - pagerComponent.getStyle().setColor(TextFormatting.GRAY); - pagerComponent.appendSibling(prevPageComponent); - pagerComponent.appendText(" | "); - pagerComponent.appendSibling(nextPageComponent); - pagerComponent.appendText(String.format(" %d/%d", page, getMaxPage())); + TextComponent pagerComponent = new StringTextComponent(""); + pagerComponent.func_230530_a_(pagerComponent.getStyle().func_240712_a_(TextFormatting.GRAY)); + pagerComponent.func_230529_a_(prevPageComponent); // appendSibling + pagerComponent.func_240702_b_(" | "); // appendText + pagerComponent.func_230529_a_(nextPageComponent); + pagerComponent.func_240702_b_(String.format(" %d/%d", page, getMaxPage())); logDirect(pagerComponent); } diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java index a75b5c0a0..0bd035c25 100644 --- a/src/api/java/baritone/api/event/events/RenderEvent.java +++ b/src/api/java/baritone/api/event/events/RenderEvent.java @@ -18,7 +18,7 @@ package baritone.api.event.events; import com.mojang.blaze3d.matrix.MatrixStack; -import net.minecraft.client.renderer.Matrix4f; +import net.minecraft.util.math.vector.Matrix4f; /** * @author Brady diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index e8c8917a3..24793ce89 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -19,7 +19,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; /** * @author Brady @@ -70,7 +70,7 @@ public enum Type { /** * Called when the player's motion is updated. * - * @see Entity#moveRelative(float, Vec3d) + * @see Entity#moveRelative(float, Vector3d) */ MOTION_UPDATE, diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index 31f0b1454..0785b170b 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -24,7 +24,7 @@ import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.network.IPacket; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; /** * @author Brady @@ -106,7 +106,7 @@ public interface IGameEventListener { * and before and after the player jumps. * * @param event The event - * @see Entity#moveRelative(float, Vec3d) + * @see Entity#moveRelative(float, Vector3d) */ void onPlayerRotationMove(RotationMoveEvent event); diff --git a/src/api/java/baritone/api/pathing/goals/GoalXZ.java b/src/api/java/baritone/api/pathing/goals/GoalXZ.java index 63d39cd78..d658cbf35 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalXZ.java +++ b/src/api/java/baritone/api/pathing/goals/GoalXZ.java @@ -21,7 +21,7 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; /** * Useful for long-range goals that don't have a specific Y level. @@ -94,7 +94,7 @@ public static double calculate(double xDiff, double zDiff) { return (diagonal + straight) * BaritoneAPI.getSettings().costHeuristic.value; // big TODO tune } - public static GoalXZ fromDirection(Vec3d origin, float yaw, double distance) { + public static GoalXZ fromDirection(Vector3d origin, float yaw, double distance) { float theta = (float) Math.toRadians(yaw); double x = origin.x - MathHelper.sin(theta) * distance; double z = origin.z + MathHelper.cos(theta) * distance; diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 7b98c56b5..67255d7e8 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -21,7 +21,7 @@ import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3i; +import net.minecraft.util.math.vector.Vector3i; import java.io.File; import java.util.List; @@ -39,7 +39,7 @@ public interface IBuilderProcess extends IBaritoneProcess { * @param schematic The object representation of the schematic * @param origin The origin position of the schematic being built */ - void build(String name, ISchematic schematic, Vec3i origin); + void build(String name, ISchematic schematic, Vector3i origin); /** * Requests a build for the specified schematic, labeled as specified, with the specified origin. @@ -49,7 +49,7 @@ public interface IBuilderProcess extends IBaritoneProcess { * @param origin The origin position of the schematic being built * @return Whether or not the schematic was able to load from file */ - boolean build(String name, File schematic, Vec3i origin); + boolean build(String name, File schematic, Vector3i origin); default boolean build(String schematicFile, BlockPos origin) { File file = new File(new File(Minecraft.getInstance().gameDir, "schematics"), schematicFile); diff --git a/src/api/java/baritone/api/selection/ISelection.java b/src/api/java/baritone/api/selection/ISelection.java index bd349c0c4..a2f706337 100644 --- a/src/api/java/baritone/api/selection/ISelection.java +++ b/src/api/java/baritone/api/selection/ISelection.java @@ -20,7 +20,7 @@ import baritone.api.utils.BetterBlockPos; import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.Vec3i; +import net.minecraft.util.math.vector.Vector3i; /** * A selection is an immutable object representing the current selection. The selection is commonly used for certain @@ -51,7 +51,7 @@ public interface ISelection { /** * @return The size of this ISelection. */ - Vec3i size(); + Vector3i size(); /** * @return An {@link AxisAlignedBB} encompassing all blocks in this selection. diff --git a/src/api/java/baritone/api/utils/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java index 5f967d291..83e8b68a0 100644 --- a/src/api/java/baritone/api/utils/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -20,7 +20,7 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3i; +import net.minecraft.util.math.vector.Vector3i; import javax.annotation.Nonnull; @@ -149,7 +149,7 @@ public BetterBlockPos down(int amt) { @Override public BetterBlockPos offset(Direction dir) { - Vec3i vec = dir.getDirectionVec(); + Vector3i vec = dir.getDirectionVec(); return new BetterBlockPos(x + vec.getX(), y + vec.getY(), z + vec.getZ()); } @@ -158,7 +158,7 @@ public BetterBlockPos offset(Direction dir, int dist) { if (dist == 0) { return this; } - Vec3i vec = dir.getDirectionVec(); + Vector3i vec = dir.getDirectionVec(); return new BetterBlockPos(x + vec.getX() * dist, y + vec.getY() * dist, z + vec.getZ() * dist); } diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 4bedc0201..0ad57ffb6 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -24,11 +24,11 @@ import net.minecraft.block.BlockState; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.loot.*; import net.minecraft.resources.*; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Unit; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.storage.loot.*; import javax.annotation.Nonnull; import java.util.*; @@ -36,7 +36,6 @@ import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; public final class BlockOptionalMeta { @@ -133,11 +132,10 @@ public BlockState getAnyBlockState() { public static LootTableManager getManager() { if (manager == null) { - ResourcePackList rpl = new ResourcePackList<>(ResourcePackInfo::new); - rpl.addPackFinder(new ServerPackFinder()); + ResourcePackList rpl = new ResourcePackList<>(ResourcePackInfo::new, new ServerPackFinder()); rpl.reloadPacksFromFinders(); IResourcePack thePack = ((ResourcePackInfo) rpl.getAllPacks().iterator().next()).getResourcePack(); - IReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(ResourcePackType.SERVER_DATA, null); + IReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(ResourcePackType.SERVER_DATA); manager = new LootTableManager(predicate); resourceManager.addReloadListener(manager); try { diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 43a5edb50..9a6020674 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -21,6 +21,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; import net.minecraft.util.text.TextFormatting; import java.util.Arrays; @@ -50,15 +51,15 @@ static ITextComponent getPrefix() { // Inner text component final Calendar now = Calendar.getInstance(); final boolean xd = now.get(Calendar.MONTH) == Calendar.APRIL && now.get(Calendar.DAY_OF_MONTH) <= 3; - ITextComponent baritone = new StringTextComponent(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); - baritone.getStyle().setColor(TextFormatting.LIGHT_PURPLE); + TextComponent baritone = new StringTextComponent(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); + baritone.func_230530_a_(baritone.getStyle().func_240712_a_(TextFormatting.LIGHT_PURPLE)); // Outer brackets - ITextComponent prefix = new StringTextComponent(""); - prefix.getStyle().setColor(TextFormatting.DARK_PURPLE); - prefix.appendText("["); - prefix.appendSibling(baritone); - prefix.appendText("]"); + TextComponent prefix = new StringTextComponent(""); + prefix.func_230530_a_(baritone.getStyle().func_240712_a_(TextFormatting.DARK_PURPLE)); + prefix.func_240702_b_("["); + prefix.func_230529_a_(baritone); + prefix.func_240702_b_("]"); return prefix; } @@ -83,10 +84,10 @@ default void logDebug(String message) { * @param components The components to send */ default void logDirect(ITextComponent... components) { - ITextComponent component = new StringTextComponent(""); - component.appendSibling(getPrefix()); - component.appendSibling(new StringTextComponent(" ")); - Arrays.asList(components).forEach(component::appendSibling); + TextComponent component = new StringTextComponent(""); + component.func_230529_a_(getPrefix()); + component.func_230529_a_(new StringTextComponent(" ")); + Arrays.asList(components).forEach(component::func_230529_a_); mc.execute(() -> BaritoneAPI.getSettings().logger.value.accept(component)); } @@ -99,8 +100,8 @@ default void logDirect(ITextComponent... components) { */ default void logDirect(String message, TextFormatting color) { Stream.of(message.split("\n")).forEach(line -> { - ITextComponent component = new StringTextComponent(line.replace("\t", " ")); - component.getStyle().setColor(color); + TextComponent component = new StringTextComponent(line.replace("\t", " ")); + component.func_230530_a_(component.getStyle().func_240712_a_(color)); logDirect(component); }); } diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 56cc84263..f143d7be5 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -23,6 +23,8 @@ import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.util.math.*; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector3f; import net.minecraft.world.World; import java.util.Optional; @@ -75,12 +77,12 @@ default BetterBlockPos playerFeet() { return feet; } - default Vec3d playerFeetAsVec() { - return new Vec3d(player().getPositionVec().x, player().getPositionVec().y, player().getPositionVec().z); + default Vector3d playerFeetAsVec() { + return new Vector3d(player().getPositionVec().x, player().getPositionVec().y, player().getPositionVec().z); } - default Vec3d playerHead() { - return new Vec3d(player().getPositionVec().x, player().getPositionVec().y + player().getEyeHeight(), player().getPositionVec().z); + default Vector3d playerHead() { + return new Vector3d(player().getPositionVec().x, player().getPositionVec().y + player().getEyeHeight(), player().getPositionVec().z); } default Rotation playerRotations() { diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index a8596dd1e..82a3e521c 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -20,7 +20,7 @@ import net.minecraft.entity.Entity; import net.minecraft.util.math.RayTraceContext; import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; /** * @author Brady @@ -45,14 +45,14 @@ public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, d } public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance, boolean wouldSneak) { - Vec3d start; + Vector3d start; if (wouldSneak) { start = inferSneakingEyePosition(entity); } else { start = entity.getEyePosition(1.0F); // do whatever is correct } - Vec3d direction = RotationUtils.calcVec3dFromRotation(rotation); - Vec3d end = start.add( + Vector3d direction = RotationUtils.calcVector3dFromRotation(rotation); + Vector3d end = start.add( direction.x * blockReachDistance, direction.y * blockReachDistance, direction.z * blockReachDistance @@ -60,7 +60,7 @@ public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, d return entity.world.rayTraceBlocks(new RayTraceContext(start, end, RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, entity)); } - public static Vec3d inferSneakingEyePosition(Entity entity) { - return new Vec3d(entity.getPosX(), entity.getPosY() + IPlayerContext.eyeHeight(true), entity.getPosZ()); + public static Vector3d inferSneakingEyePosition(Entity entity) { + return new Vector3d(entity.getPosX(), entity.getPosY() + IPlayerContext.eyeHeight(true), entity.getPosZ()); } } diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 38e72b0b3..3cc609f03 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -27,6 +27,7 @@ import net.minecraft.util.math.*; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.math.vector.Vector3d; import java.util.Optional; @@ -49,13 +50,13 @@ public final class RotationUtils { /** * Offsets from the root block position to the center of each side. */ - private static final Vec3d[] BLOCK_SIDE_MULTIPLIERS = new Vec3d[]{ - new Vec3d(0.5, 0, 0.5), // Down - new Vec3d(0.5, 1, 0.5), // Up - new Vec3d(0.5, 0.5, 0), // North - new Vec3d(0.5, 0.5, 1), // South - new Vec3d(0, 0.5, 0.5), // West - new Vec3d(1, 0.5, 0.5) // East + private static final Vector3d[] BLOCK_SIDE_MULTIPLIERS = new Vector3d[]{ + new Vector3d(0.5, 0, 0.5), // Down + new Vector3d(0.5, 1, 0.5), // Up + new Vector3d(0.5, 0.5, 0), // North + new Vector3d(0.5, 0.5, 1), // South + new Vector3d(0, 0.5, 0.5), // West + new Vector3d(1, 0.5, 0.5) // East }; private RotationUtils() {} @@ -68,7 +69,7 @@ private RotationUtils() {} * @return The rotation from the origin to the destination */ public static Rotation calcRotationFromCoords(BlockPos orig, BlockPos dest) { - return calcRotationFromVec3d(new Vec3d(orig), new Vec3d(dest)); + return calcRotationFromVec3d(new Vector3d(orig.getX(), orig.getY(), orig.getZ()), new Vector3d(dest.getX(), dest.getY(), dest.getZ())); } /** @@ -97,7 +98,7 @@ public static Rotation wrapAnglesToRelative(Rotation current, Rotation target) { * @return The rotation from the origin to the destination * @see #wrapAnglesToRelative(Rotation, Rotation) */ - public static Rotation calcRotationFromVec3d(Vec3d orig, Vec3d dest, Rotation current) { + public static Rotation calcRotationFromVec3d(Vector3d orig, Vector3d dest, Rotation current) { return wrapAnglesToRelative(current, calcRotationFromVec3d(orig, dest)); } @@ -108,7 +109,7 @@ public static Rotation calcRotationFromVec3d(Vec3d orig, Vec3d dest, Rotation cu * @param dest The destination position * @return The rotation from the origin to the destination */ - private static Rotation calcRotationFromVec3d(Vec3d orig, Vec3d dest) { + private static Rotation calcRotationFromVec3d(Vector3d orig, Vector3d dest) { double[] delta = {orig.x - dest.x, orig.y - dest.y, orig.z - dest.z}; double yaw = MathHelper.atan2(delta[0], -delta[2]); double dist = Math.sqrt(delta[0] * delta[0] + delta[2] * delta[2]); @@ -125,12 +126,12 @@ private static Rotation calcRotationFromVec3d(Vec3d orig, Vec3d dest) { * @param rotation The input rotation * @return Look vector for the rotation */ - public static Vec3d calcVec3dFromRotation(Rotation rotation) { + public static Vector3d calcVector3dFromRotation(Rotation rotation) { float f = MathHelper.cos(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); float f1 = MathHelper.sin(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); float f2 = -MathHelper.cos(-rotation.getPitch() * (float) DEG_TO_RAD); float f3 = MathHelper.sin(-rotation.getPitch() * (float) DEG_TO_RAD); - return new Vec3d((double) (f1 * f2), (double) f3, (double) (f * f2)); + return new Vector3d((double) (f1 * f2), (double) f3, (double) (f * f2)); } /** @@ -198,11 +199,11 @@ public static Optional reachable(ClientPlayerEntity entity, BlockPos p if (shape.isEmpty()) { shape = VoxelShapes.fullCube(); } - for (Vec3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { + for (Vector3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { double xDiff = shape.getStart(Direction.Axis.X) * sideOffset.x + shape.getEnd(Direction.Axis.X) * (1 - sideOffset.x); double yDiff = shape.getStart(Direction.Axis.Y) * sideOffset.y + shape.getEnd(Direction.Axis.Y) * (1 - sideOffset.y); double zDiff = shape.getStart(Direction.Axis.Z) * sideOffset.z + shape.getEnd(Direction.Axis.Z) * (1 - sideOffset.z); - possibleRotation = reachableOffset(entity, pos, new Vec3d(pos).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); + possibleRotation = reachableOffset(entity, pos, new Vector3d(pos.getX(), pos.getY(), pos.getZ()).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); if (possibleRotation.isPresent()) { return possibleRotation; } @@ -221,8 +222,8 @@ public static Optional reachable(ClientPlayerEntity entity, BlockPos p * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3d offsetPos, double blockReachDistance, boolean wouldSneak) { - Vec3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getEyePosition(1.0F); + public static Optional reachableOffset(Entity entity, BlockPos pos, Vector3d offsetPos, double blockReachDistance, boolean wouldSneak) { + Vector3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getEyePosition(1.0F); Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.rotationYaw, entity.rotationPitch)); RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); //System.out.println(result); diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 4d5de3c0e..da1778b28 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -24,7 +24,7 @@ import net.minecraft.item.Item; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.Vec3i; +import net.minecraft.util.math.vector.Vector3i; import net.minecraft.util.registry.Registry; import java.awt.*; @@ -225,8 +225,8 @@ private enum Parser implements ISettingParser { color -> color.getRed() + "," + color.getGreen() + "," + color.getBlue() ), VEC3I( - Vec3i.class, - str -> new Vec3i(Integer.parseInt(str.split(",")[0]), Integer.parseInt(str.split(",")[1]), Integer.parseInt(str.split(",")[2])), + Vector3i.class, + str -> new Vector3i(Integer.parseInt(str.split(",")[0]), Integer.parseInt(str.split(",")[1]), Integer.parseInt(str.split(",")[2])), vec -> vec.getX() + "," + vec.getY() + "," + vec.getZ() ), BLOCK( diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index 422a7efc8..6b478cfad 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -22,8 +22,8 @@ import net.minecraft.entity.Entity; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; /** @@ -42,7 +42,7 @@ private VecUtils() {} * @return The center of the block's bounding box * @see #getBlockPosCenter(BlockPos) */ - public static Vec3d calculateBlockCenter(World world, BlockPos pos) { + public static Vector3d calculateBlockCenter(World world, BlockPos pos) { BlockState b = world.getBlockState(pos); VoxelShape shape = b.getCollisionShape(world, pos); if (shape.isEmpty()) { @@ -57,7 +57,7 @@ public static Vec3d calculateBlockCenter(World world, BlockPos pos) { if (b.getBlock() instanceof FireBlock) {//look at bottom of fire when putting it out yDiff = 0; } - return new Vec3d( + return new Vector3d( pos.getX() + xDiff, pos.getY() + yDiff, pos.getZ() + zDiff @@ -74,8 +74,8 @@ public static Vec3d calculateBlockCenter(World world, BlockPos pos) { * @return The assumed center of the position * @see #calculateBlockCenter(World, BlockPos) */ - public static Vec3d getBlockPosCenter(BlockPos pos) { - return new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); + public static Vector3d getBlockPosCenter(BlockPos pos) { + return new Vector3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); } /** diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index 026a23cfa..41f4af731 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -24,7 +24,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/launch/java/baritone/launch/mixins/MixinLootContext.java b/src/launch/java/baritone/launch/mixins/MixinLootContext.java index 5948f4442..88b955173 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLootContext.java +++ b/src/launch/java/baritone/launch/mixins/MixinLootContext.java @@ -18,11 +18,11 @@ package baritone.launch.mixins; import baritone.api.utils.BlockOptionalMeta; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootPredicateManager; +import net.minecraft.loot.LootTableManager; import net.minecraft.server.MinecraftServer; import net.minecraft.world.server.ServerWorld; -import net.minecraft.world.storage.loot.LootContext; -import net.minecraft.world.storage.loot.LootPredicateManager; -import net.minecraft.world.storage.loot.LootTableManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -48,7 +48,7 @@ private MinecraftServer getServer(ServerWorld world) { method = "build", at = @At( value = "INVOKE", - target = "net/minecraft/server/MinecraftServer.getLootTableManager()Lnet/minecraft/world/storage/loot/LootTableManager;" + target = "net/minecraft/server/MinecraftServer.getLootTableManager()Lnet/minecraft/loot/LootTableManager;" ) ) private LootTableManager getLootTableManager(MinecraftServer server) { @@ -62,7 +62,7 @@ private LootTableManager getLootTableManager(MinecraftServer server) { method = "build", at = @At( value = "INVOKE", - target = "net/minecraft/server/MinecraftServer.func_229736_aP_()Lnet/minecraft/world/storage/loot/LootPredicateManager;" + target = "net/minecraft/server/MinecraftServer.func_229736_aP_()Lnet/minecraft/loot/LootPredicateManager;" ) ) private LootPredicateManager getLootPredicateManager(MinecraftServer server) { diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 53df678f8..ea627e830 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -57,6 +57,7 @@ private void postInit(CallbackInfo ci) { BaritoneAPI.getProvider().getPrimaryBaritone(); } + /* @Inject( method = "startTimerHackThread", at = @At("HEAD") @@ -64,6 +65,7 @@ private void postInit(CallbackInfo ci) { private void preInit(CallbackInfo ci) { BaritoneAutoTest.INSTANCE.onPreInit(); } + */ @Inject( method = "runTick", @@ -131,12 +133,12 @@ private void postLoadWorld(ClientWorld world, CallbackInfo ci) { at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/gui/screen/Screen.passEvents:Z" + target = "net/minecraft/client/gui/screen/Screen.field_230711_n_:Z" ) ) private boolean passEvents(Screen screen) { // allow user input is only the primary baritone - return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) || screen.passEvents; + return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) || screen.field_230711_n_; } // TODO diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java index 8d5a801cd..02578d540 100644 --- a/src/launch/java/baritone/launch/mixins/MixinScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.java @@ -28,6 +28,6 @@ public abstract class MixinScreen implements IGuiScreen { @Override - @Invoker("openLink") + @Invoker("func_231156_a_") public abstract void openLinkInvoker(URI url); } diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java index e375624fa..d110ed9c2 100644 --- a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java @@ -22,6 +22,7 @@ import baritone.api.event.events.RenderEvent; import com.mojang.blaze3d.matrix.MatrixStack; import net.minecraft.client.renderer.*; +import net.minecraft.util.math.vector.Matrix4f; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index e142c99e7..8a0054628 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -30,7 +30,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; import java.util.ArrayList; import java.util.OptionalInt; @@ -137,7 +137,7 @@ public boolean hasGenericThrowaway() { public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); - if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vec3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vector3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { return true; // gotem } if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && ((BlockItem) stack.getItem()).getBlock().equals(maybe.getBlock()))) { diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 90fd2d749..91f6a8504 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -380,7 +380,7 @@ public CalculationContext secretInternalGetCalculationContext() { public BetterBlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); if (!MovementHelper.canWalkOn(ctx, feet.down())) { - if (ctx.player().onGround) { + if (ctx.player().func_233570_aj_()) { double playerX = ctx.player().getPositionVec().x; double playerZ = ctx.player().getPositionVec().z; ArrayList closest = new ArrayList<>(); diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 126585249..0c931cefe 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -24,7 +24,9 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.util.RegistryKey; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import java.util.ArrayList; import java.util.BitSet; @@ -178,7 +180,7 @@ private final void setSpecial() { } } - public final BlockState getBlock(int x, int y, int z, int dimension) { + public final BlockState getBlock(int x, int y, int z, RegistryKey dimension) { int index = getPositionIndex(x, y, z); PathingBlockType type = getType(index); int internalPos = z << 4 | x; @@ -200,11 +202,11 @@ public final BlockState getBlock(int x, int y, int z, int dimension) { } if (type == PathingBlockType.SOLID) { - if (y == 127 && dimension == -1) { + if (y == 127 && dimension == World.field_234919_h_) { // nether roof is always unbreakable return Blocks.BEDROCK.getDefaultState(); } - if (y < 5 && dimension == 0) { + if (y < 5 && dimension == World.field_234918_g_) { // solid blocks below 5 are commonly bedrock // however, returning bedrock always would be a little yikes // discourage paths that include breaking blocks below 5 a little more heavily just so that it takes paths breaking what's known to be stone (at 5 or above) instead of what could maybe be bedrock (below 5) diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index ed5e9df8b..bdbe43a6e 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -21,7 +21,9 @@ import baritone.api.cache.ICachedRegion; import baritone.api.utils.BlockUtils; import net.minecraft.block.BlockState; +import net.minecraft.util.RegistryKey; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import java.io.*; import java.nio.file.Files; @@ -60,14 +62,14 @@ public final class CachedRegion implements ICachedRegion { */ private final int z; - private final int dimension; + private final RegistryKey dimension; /** * Has this region been modified since its most recent load or save */ private boolean hasUnsavedChanges; - CachedRegion(int x, int z, int dimension) { + CachedRegion(int x, int z, RegistryKey dimension) { this.x = x; this.z = z; this.hasUnsavedChanges = false; diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 23d7ca8c8..3cfb8623f 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -25,7 +25,9 @@ import baritone.api.utils.Helper; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import net.minecraft.util.RegistryKey; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import java.io.IOException; @@ -58,9 +60,9 @@ public final class CachedWorld implements ICachedWorld, Helper { private final LinkedBlockingQueue toPack = new LinkedBlockingQueue<>(); - private final int dimension; + private final RegistryKey dimension; - CachedWorld(Path directory, int dimension) { + CachedWorld(Path directory, RegistryKey dimension) { if (!Files.exists(directory)) { try { Files.createDirectories(directory); diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index fda9116b8..214a9b91c 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -21,9 +21,11 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; import net.minecraft.block.*; +import net.minecraft.util.RegistryKey; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.palette.PalettedContainer; +import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkSection; @@ -123,7 +125,7 @@ private static PathingBlockType getPathingBlockType(BlockState state, Chunk chun return PathingBlockType.AVOID; } if (x == 0 || x == 15 || z == 0 || z == 15) { - Vec3d flow = state.getFluidState().getFlow(chunk.getWorld(), new BlockPos(x + chunk.getPos().x << 4, y, z + chunk.getPos().z << 4)); + Vector3d flow = state.getFluidState().getFlow(chunk.getWorld(), new BlockPos(x + chunk.getPos().x << 4, y, z + chunk.getPos().z << 4)); if (flow.x != 0.0 || flow.z != 0.0) { return PathingBlockType.WATER; } @@ -146,7 +148,7 @@ private static PathingBlockType getPathingBlockType(BlockState state, Chunk chun return PathingBlockType.SOLID; } - public static BlockState pathingTypeToBlock(PathingBlockType type, int dimension) { + public static BlockState pathingTypeToBlock(PathingBlockType type, RegistryKey dimension) { switch (type) { case AIR: return Blocks.AIR.getDefaultState(); @@ -156,14 +158,14 @@ public static BlockState pathingTypeToBlock(PathingBlockType type, int dimension return Blocks.LAVA.getDefaultState(); case SOLID: // Dimension solid types - switch (dimension) { - case -1: - return Blocks.NETHERRACK.getDefaultState(); - case 0: - default: // The fallback solid type - return Blocks.STONE.getDefaultState(); - case 1: - return Blocks.END_STONE.getDefaultState(); + if (dimension == World.field_234918_g_) { + return Blocks.STONE.getDefaultState(); + } + if (dimension == World.field_234919_h_) { + return Blocks.NETHERRACK.getDefaultState(); + } + if (dimension == World.field_234920_i_) { + return Blocks.END_STONE.getDefaultState(); } default: return null; diff --git a/src/main/java/baritone/cache/WorldData.java b/src/main/java/baritone/cache/WorldData.java index 30fe8bd0d..29d321017 100644 --- a/src/main/java/baritone/cache/WorldData.java +++ b/src/main/java/baritone/cache/WorldData.java @@ -22,6 +22,8 @@ import baritone.api.cache.IContainerMemory; import baritone.api.cache.IWaypointCollection; import baritone.api.cache.IWorldData; +import net.minecraft.util.RegistryKey; +import net.minecraft.world.World; import java.io.IOException; import java.nio.file.Path; @@ -38,9 +40,9 @@ public class WorldData implements IWorldData { private final ContainerMemory containerMemory; //public final MapData map; public final Path directory; - public final int dimension; + public final RegistryKey dimension; - WorldData(Path directory, int dimension) { + WorldData(Path directory, RegistryKey dimension) { this.directory = directory; this.cache = new CachedWorld(directory.resolve("cache"), dimension); this.waypoints = new WaypointCollection(directory.resolve("waypoints")); diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index dfc671532..d0f34c380 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -21,8 +21,10 @@ import baritone.api.cache.IWorldProvider; import baritone.api.utils.Helper; import net.minecraft.server.integrated.IntegratedServer; -import net.minecraft.world.dimension.DimensionType; -import net.minecraft.world.server.ServerWorld; +import net.minecraft.util.RegistryKey; +import net.minecraft.world.DimensionType; +import net.minecraft.world.World; +import net.minecraft.world.storage.FolderName; import org.apache.commons.lang3.SystemUtils; import java.io.File; @@ -51,10 +53,8 @@ public final WorldData getCurrentWorld() { /** * Called when a new world is initialized to discover the - * - * @param dimension The ID of the world's dimension */ - public final void initWorld(DimensionType dimension) { + public final void initWorld(RegistryKey world) { File directory; File readme; @@ -62,8 +62,7 @@ public final void initWorld(DimensionType dimension) { // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file if (mc.isSingleplayer()) { - ServerWorld localServerWorld = integratedServer.getWorld(dimension); - directory = dimension.getDirectory(localServerWorld.getSaveHandler().getWorldDirectory()); + directory = DimensionType.func_236031_a_(world, integratedServer.func_240776_a_(FolderName.field_237253_i_).toFile()); // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world if (directory.toPath().relativize(mc.gameDir.toPath()).getNameCount() != 2) { @@ -89,7 +88,7 @@ public final void initWorld(DimensionType dimension) { } catch (IOException ignored) {} // We will actually store the world data in a subfolder: "DIM" - Path dir = new File(directory, "DIM" + dimension.getId()).toPath(); + Path dir = DimensionType.func_236031_a_(world, directory).toPath(); if (!Files.exists(dir)) { try { Files.createDirectories(dir); @@ -98,7 +97,7 @@ public final void initWorld(DimensionType dimension) { System.out.println("Baritone world data dir: " + dir); synchronized (worldCache) { - this.currentWorld = worldCache.computeIfAbsent(dir, d -> new WorldData(d, dimension.getId())); + this.currentWorld = worldCache.computeIfAbsent(dir, d -> new WorldData(d, world)); } } diff --git a/src/main/java/baritone/command/BaritoneChatControl.java b/src/main/java/baritone/command/BaritoneChatControl.java index c4dc3c108..58a8bed43 100644 --- a/src/main/java/baritone/command/BaritoneChatControl.java +++ b/src/main/java/baritone/command/BaritoneChatControl.java @@ -37,6 +37,7 @@ import net.minecraft.util.Tuple; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; @@ -79,17 +80,17 @@ private void logRanCommand(String command, String rest) { if (settings.echoCommands.value) { String msg = command + rest; String toDisplay = settings.censorRanCommands.value ? command + " ..." : msg; - ITextComponent component = new StringTextComponent(String.format("> %s", toDisplay)); - component.getStyle() - .setColor(TextFormatting.WHITE) - .setHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, + TextComponent component = new StringTextComponent(String.format("> %s", toDisplay)); + component.func_230530_a_(component.getStyle() + .func_240712_a_(TextFormatting.WHITE) + .func_240716_a_(new HoverEvent( + HoverEvent.Action.field_230550_a_, new StringTextComponent("Click to rerun command") )) - .setClickEvent(new ClickEvent( + .func_240715_a_(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + msg - )); + ))); logDirect(component); } } diff --git a/src/main/java/baritone/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java index fd084ad17..e2406b134 100644 --- a/src/main/java/baritone/command/defaults/ChestsCommand.java +++ b/src/main/java/baritone/command/defaults/ChestsCommand.java @@ -26,7 +26,9 @@ import baritone.api.command.argument.IArgConsumer; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.IFormattableTextComponent; import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponent; import java.util.Arrays; import java.util.List; @@ -54,8 +56,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { IRememberedInventory inv = entry.getValue(); logDirect(pos.toString()); for (ItemStack item : inv.getContents()) { - ITextComponent component = item.getTextComponent(); - component.appendText(String.format(" x %d", item.getCount())); + IFormattableTextComponent component = (IFormattableTextComponent) item.getTextComponent(); + component.func_240702_b_(String.format(" x %d", item.getCount())); logDirect(component); } } diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index b8033c3fb..fe245d0bd 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -43,7 +43,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (entity == null) { throw new CommandInvalidStateException("render view entity is null"); } - baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(new BlockPos(entity))); + baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(entity.func_233580_cy_())); logDirect("Coming"); } diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index f92039860..d80f8b84b 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -25,8 +25,8 @@ import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; @@ -58,22 +58,22 @@ public void execute(String label, IArgConsumer args) throws CommandException { command -> { String names = String.join("/", command.getNames()); String name = command.getNames().get(0); - ITextComponent shortDescComponent = new StringTextComponent(" - " + command.getShortDesc()); - shortDescComponent.getStyle().setColor(TextFormatting.DARK_GRAY); - ITextComponent namesComponent = new StringTextComponent(names); - namesComponent.getStyle().setColor(TextFormatting.WHITE); - ITextComponent hoverComponent = new StringTextComponent(""); - hoverComponent.getStyle().setColor(TextFormatting.GRAY); - hoverComponent.appendSibling(namesComponent); - hoverComponent.appendText("\n" + command.getShortDesc()); - hoverComponent.appendText("\n\nClick to view full help"); + TextComponent shortDescComponent = new StringTextComponent(" - " + command.getShortDesc()); + shortDescComponent.func_230530_a_(shortDescComponent.getStyle().func_240712_a_(TextFormatting.DARK_GRAY)); + TextComponent namesComponent = new StringTextComponent(names); + namesComponent.func_230530_a_(namesComponent.getStyle().func_240712_a_(TextFormatting.WHITE)); + TextComponent hoverComponent = new StringTextComponent(""); + hoverComponent.func_230530_a_(hoverComponent.getStyle().func_240712_a_(TextFormatting.GRAY)); + hoverComponent.func_230529_a_(namesComponent); + hoverComponent.func_240702_b_("\n" + command.getShortDesc()); + hoverComponent.func_240702_b_("\n\nClick to view full help"); String clickCommand = FORCE_COMMAND_PREFIX + String.format("%s %s", label, command.getNames().get(0)); - ITextComponent component = new StringTextComponent(name); - component.getStyle().setColor(TextFormatting.GRAY); - component.appendSibling(shortDescComponent); - component.getStyle() - .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) - .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, clickCommand)); + TextComponent component = new StringTextComponent(name); + component.func_230530_a_(component.getStyle().func_240712_a_(TextFormatting.GRAY)); + component.func_230529_a_(shortDescComponent); + component.func_230530_a_(component.getStyle() + .func_240716_a_(new HoverEvent(HoverEvent.Action.field_230550_a_, hoverComponent)) + .func_240715_a_(new ClickEvent(ClickEvent.Action.RUN_COMMAND, clickCommand))); return component; }, FORCE_COMMAND_PREFIX + label @@ -88,11 +88,11 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect(""); command.getLongDesc().forEach(this::logDirect); logDirect(""); - ITextComponent returnComponent = new StringTextComponent("Click to return to the help menu"); - returnComponent.getStyle().setClickEvent(new ClickEvent( + TextComponent returnComponent = new StringTextComponent("Click to return to the help menu"); + returnComponent.func_230530_a_(returnComponent.getStyle().func_240715_a_(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + label - )); + ))); logDirect(returnComponent); } } diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 7df047a54..529421f7a 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -41,8 +41,7 @@ import net.minecraft.block.Blocks; import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3i; +import net.minecraft.util.math.vector.Vector3i; import java.awt.*; import java.util.List; @@ -84,7 +83,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == Action.POS2 && pos1 == null) { throw new CommandInvalidStateException("Set pos1 first before using pos2"); } - BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(new BlockPos(mc.getRenderViewEntity())) : ctx.playerFeet(); + BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(mc.getRenderViewEntity().func_233580_cy_()) : ctx.playerFeet(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); if (action == Action.POS1) { @@ -145,7 +144,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { ); } for (ISelection selection : selections) { - Vec3i size = selection.size(); + Vector3i size = selection.size(); BetterBlockPos min = selection.min(); ISchematic schematic = new FillSchematic(size.getX(), size.getY(), size.getZ(), type); if (action == Action.WALLS) { diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 06e443bcb..8cb585d43 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -29,6 +29,7 @@ import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; @@ -78,23 +79,23 @@ public void execute(String label, IArgConsumer args) throws CommandException { : String.format("All %ssettings:", viewModified ? "modified " : "") ), setting -> { - ITextComponent typeComponent = new StringTextComponent(String.format( + TextComponent typeComponent = new StringTextComponent(String.format( " (%s)", settingTypeToString(setting) )); - typeComponent.getStyle().setColor(TextFormatting.DARK_GRAY); - ITextComponent hoverComponent = new StringTextComponent(""); - hoverComponent.getStyle().setColor(TextFormatting.GRAY); - hoverComponent.appendText(setting.getName()); - hoverComponent.appendText(String.format("\nType: %s", settingTypeToString(setting))); - hoverComponent.appendText(String.format("\n\nValue:\n%s", settingValueToString(setting))); + typeComponent.func_230530_a_(typeComponent.getStyle().func_240712_a_(TextFormatting.DARK_GRAY)); + TextComponent hoverComponent = new StringTextComponent(""); + hoverComponent.func_230530_a_(hoverComponent.getStyle().func_240712_a_(TextFormatting.GRAY)); + hoverComponent.func_240702_b_(setting.getName()); + hoverComponent.func_240702_b_(String.format("\nType: %s", settingTypeToString(setting))); + hoverComponent.func_240702_b_(String.format("\n\nValue:\n%s", settingValueToString(setting))); String commandSuggestion = Baritone.settings().prefix.value + String.format("set %s ", setting.getName()); - ITextComponent component = new StringTextComponent(setting.getName()); - component.getStyle().setColor(TextFormatting.GRAY); - component.appendSibling(typeComponent); - component.getStyle() - .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) - .setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, commandSuggestion)); + TextComponent component = new StringTextComponent(setting.getName()); + component.func_230530_a_(component.getStyle().func_240712_a_(TextFormatting.GRAY)); + component.func_230529_a_(typeComponent); + component.func_230530_a_(component.getStyle() + .func_240716_a_(new HoverEvent(HoverEvent.Action.field_230550_a_, hoverComponent)) + .func_240715_a_(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, commandSuggestion))); return component; }, FORCE_COMMAND_PREFIX + "set " + arg + " " + search @@ -163,17 +164,17 @@ public void execute(String label, IArgConsumer args) throws CommandException { settingValueToString(setting) )); } - ITextComponent oldValueComponent = new StringTextComponent(String.format("Old value: %s", oldValue)); - oldValueComponent.getStyle() - .setColor(TextFormatting.GRAY) - .setHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, + TextComponent oldValueComponent = new StringTextComponent(String.format("Old value: %s", oldValue)); + oldValueComponent.func_230530_a_(oldValueComponent.getStyle() + .func_240712_a_(TextFormatting.GRAY) + .func_240716_a_(new HoverEvent( + HoverEvent.Action.field_230550_a_, new StringTextComponent("Click to set the setting back to this value") )) - .setClickEvent(new ClickEvent( + .func_240715_a_(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + String.format("set %s %s", setting.getName(), oldValue) - )); + ))); logDirect(oldValueComponent); if ((setting.getName().equals("chatControl") && !(Boolean) setting.value && !Baritone.settings().chatControlAnyway.value) || setting.getName().equals("chatControlAnyway") && !(Boolean) setting.value && !Baritone.settings().chatControl.value) { diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 5d3f937fb..b0f115d97 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -34,6 +34,7 @@ import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; @@ -58,23 +59,23 @@ public void execute(String label, IArgConsumer args) throws CommandException { throw new CommandInvalidTypeException(args.consumed(), "an action"); } BiFunction toComponent = (waypoint, _action) -> { - ITextComponent component = new StringTextComponent(""); - ITextComponent tagComponent = new StringTextComponent(waypoint.getTag().name() + " "); - tagComponent.getStyle().setColor(TextFormatting.GRAY); + TextComponent component = new StringTextComponent(""); + TextComponent tagComponent = new StringTextComponent(waypoint.getTag().name() + " "); + tagComponent.func_230530_a_(tagComponent.getStyle().func_240712_a_(TextFormatting.GRAY)); String name = waypoint.getName(); - ITextComponent nameComponent = new StringTextComponent(!name.isEmpty() ? name : ""); - nameComponent.getStyle().setColor(!name.isEmpty() ? TextFormatting.GRAY : TextFormatting.DARK_GRAY); - ITextComponent timestamp = new StringTextComponent(" @ " + new Date(waypoint.getCreationTimestamp())); - timestamp.getStyle().setColor(TextFormatting.DARK_GRAY); - component.appendSibling(tagComponent); - component.appendSibling(nameComponent); - component.appendSibling(timestamp); - component.getStyle() - .setHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, + TextComponent nameComponent = new StringTextComponent(!name.isEmpty() ? name : ""); + nameComponent.func_230530_a_(nameComponent.getStyle().func_240712_a_(!name.isEmpty() ? TextFormatting.GRAY : TextFormatting.DARK_GRAY)); + TextComponent timestamp = new StringTextComponent(" @ " + new Date(waypoint.getCreationTimestamp())); + timestamp.func_230530_a_(timestamp.getStyle().func_240712_a_(TextFormatting.DARK_GRAY)); + component.func_230529_a_(tagComponent); + component.func_230529_a_(nameComponent); + component.func_230529_a_(timestamp); + component.func_230530_a_(component.getStyle() + .func_240716_a_(new HoverEvent( + HoverEvent.Action.field_230550_a_, new StringTextComponent("Click to select") )) - .setClickEvent(new ClickEvent( + .func_240715_a_(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s %s %s @ %d", @@ -84,7 +85,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getTag().getName(), waypoint.getCreationTimestamp() )) - ); + )); return component; }; Function transform = waypoint -> @@ -136,9 +137,9 @@ public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); IWaypoint waypoint = new Waypoint(name, tag, pos); ForWaypoints.waypoints(this.baritone).addWaypoint(waypoint); - ITextComponent component = new StringTextComponent("Waypoint added: "); - component.getStyle().setColor(TextFormatting.GRAY); - component.appendSibling(toComponent.apply(waypoint, Action.INFO)); + TextComponent component = new StringTextComponent("Waypoint added: "); + component.func_230530_a_(component.getStyle().func_240712_a_(TextFormatting.GRAY)); + component.func_230529_a_(toComponent.apply(waypoint, Action.INFO)); logDirect(component); } else if (action == Action.CLEAR) { args.requireMax(1); @@ -194,8 +195,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == Action.INFO) { logDirect(transform.apply(waypoint)); logDirect(String.format("Position: %s", waypoint.getLocation())); - ITextComponent deleteComponent = new StringTextComponent("Click to delete this waypoint"); - deleteComponent.getStyle().setClickEvent(new ClickEvent( + TextComponent deleteComponent = new StringTextComponent("Click to delete this waypoint"); + deleteComponent.func_230530_a_(deleteComponent.getStyle().func_240715_a_(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s delete %s @ %d", @@ -204,9 +205,9 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getTag().getName(), waypoint.getCreationTimestamp() ) - )); - ITextComponent goalComponent = new StringTextComponent("Click to set goal to this waypoint"); - goalComponent.getStyle().setClickEvent(new ClickEvent( + ))); + TextComponent goalComponent = new StringTextComponent("Click to set goal to this waypoint"); + goalComponent.func_230530_a_(goalComponent.getStyle().func_240715_a_(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s goal %s @ %d", @@ -215,16 +216,16 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getTag().getName(), waypoint.getCreationTimestamp() ) - )); - ITextComponent backComponent = new StringTextComponent("Click to return to the waypoints list"); - backComponent.getStyle().setClickEvent(new ClickEvent( + ))); + TextComponent backComponent = new StringTextComponent("Click to return to the waypoints list"); + backComponent.func_230530_a_(backComponent.getStyle().func_240715_a_(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s list", FORCE_COMMAND_PREFIX, label ) - )); + ))); logDirect(deleteComponent); logDirect(goalComponent); logDirect(backComponent); diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index ba40f1b6e..148f7c913 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -115,7 +115,7 @@ public final void onWorldEvent(WorldEvent event) { if (event.getState() == EventState.POST) { cache.closeWorld(); if (event.getWorld() != null) { - cache.initWorld(event.getWorld().getDimension().getType()); + cache.initWorld(event.getWorld().func_234923_W_()); } } diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index cd41ed7df..744707a50 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -32,6 +32,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.DimensionType; import net.minecraft.world.World; import static baritone.api.pathing.movement.ActionCosts.COST_INF; @@ -85,7 +86,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); this.toolSet = new ToolSet(player); this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); - this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && PlayerInventory.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && !world.getDimension().isNether(); + this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && PlayerInventory.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && world.func_234922_V_() != DimensionType.field_236000_d_; this.canSprint = Baritone.settings().allowSprint.value && player.getFoodStats().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; this.allowBreak = Baritone.settings().allowBreak.value; diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 6ab157bae..49851eebd 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -36,7 +36,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.IBlockReader; import java.util.Optional; @@ -125,7 +125,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (isFlowing(x, y, z, state, bsi)) { return false; // Don't walk through flowing liquids } - IFluidState fluidState = state.getFluidState(); + FluidState fluidState = state.getFluidState(); if (fluidState.getFluid() instanceof WaterFluid) { if (Baritone.settings().assumeWalkOnWater.value) { return false; @@ -493,13 +493,13 @@ static boolean isLiquid(BlockState blockState) { } static boolean possiblyFlowing(BlockState state) { - IFluidState fluidState = state.getFluidState(); + FluidState fluidState = state.getFluidState(); return fluidState.getFluid() instanceof FlowingFluid && fluidState.getFluid().getLevel(fluidState) != 8; } static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterface bsi) { - IFluidState fluidState = state.getFluidState(); + FluidState fluidState = state.getFluidState(); if (!(fluidState.getFluid() instanceof FlowingFluid)) { return false; } @@ -542,7 +542,7 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, double faceX = (placeAt.getX() + against1.getX() + 1.0D) * 0.5D; double faceY = (placeAt.getY() + against1.getY() + 0.5D) * 0.5D; double faceZ = (placeAt.getZ() + against1.getZ() + 1.0D) * 0.5D; - Rotation place = RotationUtils.calcRotationFromVec3d(wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()); + Rotation place = RotationUtils.calcRotationFromVec3d(wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.playerHead(), new Vector3d(faceX, faceY, faceZ), ctx.playerRotations()); RayTraceResult res = RayTraceUtils.rayTraceTowards(ctx.player(), place, ctx.playerController().getBlockReachDistance(), wouldSneak); if (res != null && res.getType() == RayTraceResult.Type.BLOCK && ((BlockRayTraceResult) res).getPos().equals(against1) && ((BlockRayTraceResult) res).getPos().offset(((BlockRayTraceResult) res).getFace()).equals(placeAt)) { state.setTarget(new MovementState.MovementTarget(place, true)); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 95f416e6c..67bb091f2 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -36,7 +36,7 @@ import net.minecraft.block.FallingBlock; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; import java.util.Set; @@ -225,7 +225,7 @@ public MovementState updateState(MovementState state) { ClientPlayerEntity player = ctx.player(); state.setTarget(new MovementState.MovementTarget( new Rotation(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), - new Vec3d(destX, dest.getY(), destZ), + new Vector3d(destX, dest.getY(), destZ), new Rotation(player.rotationYaw, player.rotationPitch)).getYaw(), player.rotationPitch), false )).setInput(Input.MOVE_FORWARD, true); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 9062cb50a..a6489384f 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -40,8 +40,9 @@ import net.minecraft.item.Items; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector3i; +import net.minecraft.world.DimensionType; import java.util.HashSet; import java.util.Optional; @@ -96,11 +97,11 @@ public MovementState updateState(MovementState state) { Block destBlock = destState.getBlock(); boolean isWater = destState.getFluidState().getFluid() instanceof WaterFluid; if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { - if (!PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().getDimension().isNether()) { + if (!PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().func_234922_V_() == DimensionType.field_236000_d_) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (ctx.player().getPositionVec().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().onGround) { + if (ctx.player().getPositionVec().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().func_233570_aj_()) { ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER); targetRotation = new Rotation(toDest.getYaw(), 90.0F); @@ -133,26 +134,26 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.SUCCESS); } } - Vec3d destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) + Vector3d destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) if (Math.abs(ctx.player().getPositionVec().x + ctx.player().getMotion().x - destCenter.x) > 0.1 || Math.abs(ctx.player().getPositionVec().z + ctx.player().getMotion().z - destCenter.z) > 0.1) { - if (!ctx.player().onGround && Math.abs(ctx.player().getMotion().y) > 0.4) { + if (!ctx.player().func_233570_aj_() && Math.abs(ctx.player().getMotion().y) > 0.4) { state.setInput(Input.SNEAK, true); } state.setInput(Input.MOVE_FORWARD, true); } - Vec3i avoid = Optional.ofNullable(avoid()).map(Direction::getDirectionVec).orElse(null); + Vector3i avoid = Optional.ofNullable(avoid()).map(Direction::getDirectionVec).orElse(null); if (avoid == null) { avoid = src.subtract(dest); } else { double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().getPositionVec().x)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().getPositionVec().z)); if (dist < 0.6) { state.setInput(Input.MOVE_FORWARD, true); - } else if (!ctx.player().onGround) { + } else if (!ctx.player().func_233570_aj_()) { state.setInput(Input.SNEAK, false); } } if (targetRotation == null) { - Vec3d destCenterOffset = new Vec3d(destCenter.x + 0.125 * avoid.getX(), destCenter.y, destCenter.z + 0.125 * avoid.getZ()); + Vector3d destCenterOffset = new Vector3d(destCenter.x + 0.125 * avoid.getX(), destCenter.y, destCenter.z + 0.125 * avoid.getZ()); state.setTarget(new MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), destCenterOffset, ctx.playerRotations()), false)); } return state; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 7eee528e5..9a538bd47 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -251,7 +251,7 @@ public MovementState updateState(MovementState state) { } } else if (!ctx.playerFeet().equals(src)) { if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().getPositionVec().y - src.y > 0.0001) { - if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().onGround && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true, false) == PlaceResult.READY_TO_PLACE) { + if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().func_233570_aj_() && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true, false) == PlaceResult.READY_TO_PLACE) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory state.setInput(Input.CLICK_RIGHT, true); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 69ab7b6bd..b5d7daec0 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -34,7 +34,7 @@ import net.minecraft.block.*; import net.minecraft.state.properties.SlabType; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; import java.util.Set; @@ -171,7 +171,7 @@ public MovementState updateState(MovementState state) { if (MovementHelper.isWater(fromDown) && MovementHelper.isWater(ctx, dest)) { // stay centered while swimming up a water column state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()), false)); - Vec3d destCenter = VecUtils.getBlockPosCenter(dest); + Vector3d destCenter = VecUtils.getBlockPosCenter(dest); if (Math.abs(ctx.player().getPositionVec().x - destCenter.x) > 0.2 || Math.abs(ctx.player().getPositionVec().z - destCenter.z) > 0.2) { state.setInput(Input.MOVE_FORWARD, true); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 19634b2e9..62274e2d7 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -35,7 +35,7 @@ import net.minecraft.fluid.WaterFluid; import net.minecraft.state.properties.SlabType; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; import java.util.Optional; import java.util.Set; @@ -143,7 +143,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof SlabBlock && down.get(SlabBlock.TYPE) != SlabType.DOUBLE)) { return COST_INF; // can't sneak and backplace against soul sand or half slabs (regardless of whether it's top half or bottom half) =/ } - if (down.getFluidState() instanceof WaterFluid) { + if (down.getFluidState().getFluid() instanceof WaterFluid) { return COST_INF; // this is obviously impossible } WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol @@ -245,7 +245,7 @@ public MovementState updateState(MovementState state) { } Block low = BlockStateInterface.get(ctx, src).getBlock(); Block high = BlockStateInterface.get(ctx, src.up()).getBlock(); - if (ctx.player().getPositionVec().y > src.y + 0.1D && !ctx.player().onGround && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { + if (ctx.player().getPositionVec().y > src.y + 0.1D && !ctx.player().func_233570_aj_() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { // hitting W could cause us to climb the ladder instead of going forward // wait until we're on the ground return state; @@ -317,7 +317,7 @@ public MovementState updateState(MovementState state) { // faceX, faceY, faceZ is the middle of the face between from and to BlockPos goalLook = src.down(); // this is the block we were just standing on, and the one we want to place against - Rotation backToFace = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()); + Rotation backToFace = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vector3d(faceX, faceY, faceZ), ctx.playerRotations()); float pitch = backToFace.getPitch(); double dist2 = Math.max(Math.abs(ctx.player().getPositionVec().x - faceX), Math.abs(ctx.player().getPositionVec().z - faceZ)); if (dist2 < 0.29) { // see issue #208 diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 1400875aa..7c03235c9 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -35,8 +35,8 @@ import net.minecraft.block.Blocks; import net.minecraft.util.Tuple; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector3i; import java.util.*; @@ -274,7 +274,7 @@ private boolean shouldPause() { if (!current.isPresent()) { return false; } - if (!ctx.player().onGround) { + if (!ctx.player().func_233570_aj_()) { return false; } if (!MovementHelper.canWalkOn(ctx, ctx.playerFeet().down())) { @@ -323,7 +323,7 @@ private boolean possiblyOffPath(Tuple status, double leniency) * @return Whether or not it was possible to snap to the current player feet */ public boolean snipsnapifpossible() { - if (!ctx.player().onGround && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { + if (!ctx.player().func_233570_aj_() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { // if we're falling in the air, and not in water, don't splice return false; } else { @@ -424,7 +424,7 @@ private boolean shouldSprintNextTick() { } } if (current instanceof MovementFall) { - Tuple data = overrideFall((MovementFall) current); + Tuple data = overrideFall((MovementFall) current); if (data != null) { BetterBlockPos fallDest = new BetterBlockPos(data.getB()); if (!path.positions().contains(fallDest)) { @@ -445,15 +445,15 @@ private boolean shouldSprintNextTick() { return false; } - private Tuple overrideFall(MovementFall movement) { - Vec3i dir = movement.getDirection(); + private Tuple overrideFall(MovementFall movement) { + Vector3i dir = movement.getDirection(); if (dir.getY() < -3) { return null; } if (!movement.toBreakCached.isEmpty()) { return null; // it's breaking } - Vec3i flatDir = new Vec3i(dir.getX(), 0, dir.getZ()); + Vector3i flatDir = new Vector3i(dir.getX(), 0, dir.getZ()); int i; outer: for (i = pathPosition + 1; i < path.length() - 1 && i < pathPosition + 3; i++) { @@ -480,7 +480,7 @@ private Tuple overrideFall(MovementFall movement) { } double len = i - pathPosition - 0.4; return new Tuple<>( - new Vec3d(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), + new Vector3d(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), movement.getDest().add(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index cf761bdd0..ac5157e56 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -57,6 +57,9 @@ import net.minecraft.util.Tuple; import net.minecraft.util.math.*; import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3i; import java.io.File; import java.io.FileInputStream; @@ -71,7 +74,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private String name; private ISchematic realSchematic; private ISchematic schematic; - private Vec3i origin; + private Vector3i origin; private int ticks; private boolean paused; private int layer; @@ -83,7 +86,7 @@ public BuilderProcess(Baritone baritone) { } @Override - public void build(String name, ISchematic schematic, Vec3i origin) { + public void build(String name, ISchematic schematic, Vector3i origin) { this.name = name; this.schematic = schematic; this.realSchematic = null; @@ -99,7 +102,7 @@ public void build(String name, ISchematic schematic, Vec3i origin) { if (Baritone.settings().schematicOrientationZ.value) { z += schematic.lengthZ(); } - this.origin = new Vec3i(x, y, z); + this.origin = new Vector3i(x, y, z); this.paused = false; this.layer = 0; this.numRepeats = 0; @@ -120,7 +123,7 @@ public boolean isPaused() { } @Override - public boolean build(String name, File schematic, Vec3i origin) { + public boolean build(String name, File schematic, Vector3i origin) { Optional format = SchematicSystem.INSTANCE.getByFile(schematic); if (!format.isPresent()) { return false; @@ -286,11 +289,11 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in continue; } AxisAlignedBB aabb = placeAgainstState.getShape(ctx.world(), placeAgainstPos).getBoundingBox(); - for (Vec3d placementMultiplier : aabbSideMultipliers(against)) { + for (Vector3d placementMultiplier : aabbSideMultipliers(against)) { double placeX = placeAgainstPos.x + aabb.minX * placementMultiplier.x + aabb.maxX * (1 - placementMultiplier.x); double placeY = placeAgainstPos.y + aabb.minY * placementMultiplier.y + aabb.maxY * (1 - placementMultiplier.y); double placeZ = placeAgainstPos.z + aabb.minZ * placementMultiplier.z + aabb.maxZ * (1 - placementMultiplier.z); - Rotation rot = RotationUtils.calcRotationFromVec3d(RayTraceUtils.inferSneakingEyePosition(ctx.player()), new Vec3d(placeX, placeY, placeZ), ctx.playerRotations()); + Rotation rot = RotationUtils.calcRotationFromVec3d(RayTraceUtils.inferSneakingEyePosition(ctx.player()), new Vector3d(placeX, placeY, placeZ), ctx.playerRotations()); RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot, ctx.playerController().getBlockReachDistance(), true); if (result != null && result.getType() == RayTraceResult.Type.BLOCK && ((BlockRayTraceResult) result).getPos().equals(placeAgainstPos) && ((BlockRayTraceResult) result).getFace() == against.getOpposite()) { OptionalInt hotbar = hasAnyItemThatWouldPlace(toPlace, result, rot); @@ -337,19 +340,19 @@ private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, RayTraceResult return OptionalInt.empty(); } - private static Vec3d[] aabbSideMultipliers(Direction side) { + private static Vector3d[] aabbSideMultipliers(Direction side) { switch (side) { case UP: - return new Vec3d[]{new Vec3d(0.5, 1, 0.5), new Vec3d(0.1, 1, 0.5), new Vec3d(0.9, 1, 0.5), new Vec3d(0.5, 1, 0.1), new Vec3d(0.5, 1, 0.9)}; + return new Vector3d[]{new Vector3d(0.5, 1, 0.5), new Vector3d(0.1, 1, 0.5), new Vector3d(0.9, 1, 0.5), new Vector3d(0.5, 1, 0.1), new Vector3d(0.5, 1, 0.9)}; case DOWN: - return new Vec3d[]{new Vec3d(0.5, 0, 0.5), new Vec3d(0.1, 0, 0.5), new Vec3d(0.9, 0, 0.5), new Vec3d(0.5, 0, 0.1), new Vec3d(0.5, 0, 0.9)}; + return new Vector3d[]{new Vector3d(0.5, 0, 0.5), new Vector3d(0.1, 0, 0.5), new Vector3d(0.9, 0, 0.5), new Vector3d(0.5, 0, 0.1), new Vector3d(0.5, 0, 0.9)}; case NORTH: case SOUTH: case EAST: case WEST: double x = side.getXOffset() == 0 ? 0.5 : (1 + side.getXOffset()) / 2D; double z = side.getZOffset() == 0 ? 0.5 : (1 + side.getZOffset()) / 2D; - return new Vec3d[]{new Vec3d(x, 0.25, z), new Vec3d(x, 0.75, z)}; + return new Vector3d[]{new Vector3d(x, 0.25, z), new Vector3d(x, 0.75, z)}; default: // null throw new IllegalStateException(); } @@ -417,10 +420,10 @@ public int lengthZ() { layer++; return onTick(calcFailed, isSafeToCancel); } - Vec3i repeat = Baritone.settings().buildRepeat.value; + Vector3i repeat = Baritone.settings().buildRepeat.value; int max = Baritone.settings().buildRepeatCount.value; numRepeats++; - if (repeat.equals(new Vec3i(0, 0, 0)) || (max != -1 && numRepeats >= max)) { + if (repeat.equals(new Vector3i(0, 0, 0)) || (max != -1 && numRepeats >= max)) { logDirect("Done building"); onLostControl(); return null; @@ -436,7 +439,7 @@ public int lengthZ() { } Optional> toBreak = toBreakNearPlayer(bcc); - if (toBreak.isPresent() && isSafeToCancel && ctx.player().onGround) { + if (toBreak.isPresent() && isSafeToCancel && ctx.player().func_233570_aj_()) { // we'd like to pause to break this block // only change look direction if it's safe (don't want to fuck up an in progress parkour for example Rotation rot = toBreak.get().getB(); @@ -456,7 +459,7 @@ public int lengthZ() { } List desirableOnHotbar = new ArrayList<>(); Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); - if (toPlace.isPresent() && isSafeToCancel && ctx.player().onGround && ticks <= 0) { + if (toPlace.isPresent() && isSafeToCancel && ctx.player().func_233570_aj_() && ticks <= 0) { Rotation rot = toPlace.get().rot; baritone.getLookBehavior().updateTarget(rot, true); ctx.player().inventory.currentItem = toPlace.get().hotbarSelection; @@ -521,7 +524,7 @@ private boolean recalc(BuilderCalculationContext bcc) { private void trim() { HashSet copy = new HashSet<>(incorrectPositions); - copy.removeIf(pos -> pos.distanceSq(new BlockPos(ctx.player())) > 200); + copy.removeIf(pos -> pos.distanceSq(ctx.player().func_233580_cy_()) > 200); if (!copy.isEmpty()) { incorrectPositions = copy; } @@ -779,7 +782,7 @@ private List approxPlaceable(int size) { continue; } // - result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vec3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))); + result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vector3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))); // } return result; diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 99ef324e9..8f93d54b3 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -41,7 +41,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import java.util.ArrayList; @@ -229,7 +229,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { both.addAll(openSoulsand); for (BlockPos pos : both) { boolean soulsand = openSoulsand.contains(pos); - Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, new Vec3d(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); + Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, new Vector3d(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, soulsand ? this::isNetherWart : this::isPlantable)) { RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); if (result instanceof BlockRayTraceResult && ((BlockRayTraceResult) result).getFace() == Direction.UP) { @@ -278,7 +278,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } } for (Entity entity : ctx.entities()) { - if (entity instanceof ItemEntity && entity.onGround) { + if (entity instanceof ItemEntity && entity.func_233570_aj_()) { ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 63e280550..a93ae0895 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -57,9 +57,9 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { private Goal towards(Entity following) { BlockPos pos; if (Baritone.settings().followOffsetDistance.value == 0) { - pos = new BlockPos(following); + pos = following.func_233580_cy_(); } else { - GoalXZ g = GoalXZ.fromDirection(following.getPositionVector(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); + GoalXZ g = GoalXZ.fromDirection(following.getPositionVec(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); pos = new BlockPos(g.getX(), following.getPositionVec().y, g.getZ()); } return new GoalNear(pos, Baritone.settings().followRadius.value); diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 148dc72c4..864cf162a 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -114,7 +114,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( .min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)); baritone.getInputOverrideHandler().clearAllKeys(); - if (shaft.isPresent() && ctx.player().onGround) { + if (shaft.isPresent() && ctx.player().func_233570_aj_()) { BlockPos pos = shaft.get(); BlockState state = baritone.bsi.get0(pos); if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { @@ -308,7 +308,7 @@ public List droppedItemsScan() { if (entity instanceof ItemEntity) { ItemEntity ei = (ItemEntity) entity; if (filter.has(ei.getItem())) { - ret.add(new BlockPos(entity)); + ret.add(entity.func_233580_cy_()); } } } @@ -399,7 +399,7 @@ private static List prune(CalculationContext ctx, List locs2 .filter(pos -> !blacklist.contains(pos)) - .sorted(Comparator.comparingDouble(new BlockPos(ctx.getBaritone().getPlayerContext().player())::distanceSq)) + .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().func_233580_cy_()::distanceSq)) .collect(Collectors.toList()); if (locs.size() > max) { diff --git a/src/main/java/baritone/selection/Selection.java b/src/main/java/baritone/selection/Selection.java index 5e793b907..df8e06c11 100644 --- a/src/main/java/baritone/selection/Selection.java +++ b/src/main/java/baritone/selection/Selection.java @@ -4,7 +4,7 @@ import baritone.api.utils.BetterBlockPos; import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.Vec3i; +import net.minecraft.util.math.vector.Vector3i; public class Selection implements ISelection { @@ -12,7 +12,7 @@ public class Selection implements ISelection { private final BetterBlockPos pos2; private final BetterBlockPos min; private final BetterBlockPos max; - private final Vec3i size; + private final Vector3i size; private final AxisAlignedBB aabb; public Selection(BetterBlockPos pos1, BetterBlockPos pos2) { @@ -31,7 +31,7 @@ public Selection(BetterBlockPos pos1, BetterBlockPos pos2) { Math.max(pos1.z, pos2.z) ); - this.size = new Vec3i( + this.size = new Vector3i( max.x - min.x + 1, max.y - min.y + 1, max.z - min.z + 1 @@ -61,7 +61,7 @@ public BetterBlockPos max() { } @Override - public Vec3i size() { + public Vector3i size() { return size; } diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index f0a29dfda..f90b34124 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -29,14 +29,16 @@ import net.minecraft.client.gui.screen.MainMenuScreen; import net.minecraft.client.settings.AmbientOcclusionStatus; import net.minecraft.client.settings.CloudOption; +import net.minecraft.client.settings.GraphicsFanciness; import net.minecraft.client.settings.ParticleStatus; import net.minecraft.client.tutorial.TutorialSteps; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.server.IDynamicRegistries; import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.util.HTTPUtil; import net.minecraft.util.math.BlockPos; import net.minecraft.world.*; -import net.minecraft.world.dimension.DimensionType; +import net.minecraft.world.gen.settings.DimensionGeneratorSettings; import net.minecraft.world.server.ServerWorld; import java.io.File; @@ -82,7 +84,7 @@ public void onPreInit() { s.chatScale = 0.0F; s.ambientOcclusionStatus = AmbientOcclusionStatus.OFF; s.cloudOption = CloudOption.OFF; - s.fancyGraphics = false; + s.field_238330_f_ = GraphicsFanciness.FAST; s.tutorialStep = TutorialSteps.NONE; s.hideGUI = true; s.fov = 30.0F; @@ -90,24 +92,27 @@ public void onPreInit() { @Override public void onTick(TickEvent event) { + // I don't want to make autotest work right now :) + System.exit(0); + /* IPlayerContext ctx = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext(); // If we're on the main menu then create the test world and launch the integrated server if (mc.currentScreen instanceof MainMenuScreen) { System.out.println("Beginning Baritone automatic test routine"); mc.displayGuiScreen(null); WorldSettings worldsettings = new WorldSettings(TEST_SEED, GameType.SURVIVAL, true, false, WorldType.DEFAULT); - mc.launchIntegratedServer("BaritoneAutoTest", "BaritoneAutoTest", worldsettings); + mc.func_238192_a_("BaritoneAutoTest", worldsettings, IDynamicRegistries.func_239770_b_(), DimensionGeneratorSettings.field_236202_b_); } IntegratedServer server = mc.getIntegratedServer(); // If the integrated server is launched and the world has initialized, set the spawn point // to our defined starting position - if (server != null && server.getWorld(DimensionType.OVERWORLD) != null) { + if (server != null && server.getWorld(World.field_234918_g_) != null) { server.setDifficultyForAllWorlds(Difficulty.PEACEFUL, true); if (mc.player == null) { server.execute(() -> { - server.getWorld(DimensionType.OVERWORLD).setSpawnPoint(STARTING_POSITION); + server.getWorld(World.field_234918_g_).func_241124_a__(STARTING_POSITION); server.getCommandManager().handleCommand(server.getCommandSource(), "/difficulty peaceful"); int result = server.getCommandManager().handleCommand(server.getCommandSource(), "/gamerule spawnRadius 0"); if (result != 0) { @@ -117,12 +122,8 @@ public void onTick(TickEvent event) { for (final ServerWorld world : mc.getIntegratedServer().getWorlds()) { // If the world has initialized, set the spawn point to our defined starting position if (world != null) { - // I would rather do this than try to mess with poz - CompoundNBT nbt = world.getGameRules().write(); - nbt.putString("spawnRadius", "0"); - world.getGameRules().read(nbt); - - world.setSpawnPoint(STARTING_POSITION); + world.getGameRules().get(GameRules.SPAWN_RADIUS).func_234909_b_("0"); + world.func_241124_a__(STARTING_POSITION); } } } @@ -173,6 +174,7 @@ public void onTick(TickEvent event) { throw new IllegalStateException("took too long"); } } + */ } private BaritoneAutoTest() { diff --git a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java index b76eeec92..cc0aef236 100644 --- a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java +++ b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java @@ -18,7 +18,7 @@ package baritone.utils; import net.minecraft.block.BlockState; -import net.minecraft.fluid.IFluidState; +import net.minecraft.fluid.FluidState; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; @@ -51,7 +51,7 @@ public BlockState getBlockState(BlockPos pos) { } @Override - public IFluidState getFluidState(BlockPos blockPos) { + public FluidState getFluidState(BlockPos blockPos) { return getBlockState(blockPos).getFluidState(); } } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 292ecbad0..fb37cc67f 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -27,12 +27,13 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.renderer.Matrix4f; -import net.minecraft.client.renderer.Vector4f; import net.minecraft.entity.Entity; import net.minecraft.util.math.*; -import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector4f; import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.event.ClickEvent; @@ -54,23 +55,24 @@ public GuiClick() { } @Override - public boolean isPauseScreen() { + public boolean func_231177_au__() { return false; } @Override - public void render(int mouseX, int mouseY, float partialTicks) { + public void func_230430_a_(MatrixStack stack, int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHelper.getMouseX(); double my = mc.mouseHelper.getMouseY(); my = mc.getMainWindow().getHeight() - my; my *= mc.getMainWindow().getFramebufferHeight() / (double) mc.getMainWindow().getHeight(); mx *= mc.getMainWindow().getFramebufferWidth() / (double) mc.getMainWindow().getWidth(); - Vec3d near = toWorld(mx, my, 0); - Vec3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv + Vector3d near = toWorld(mx, my, 0); + Vector3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv + if (near != null && far != null) { /// - Vec3d viewerPos = new Vec3d(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); + Vector3d viewerPos = new Vector3d(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); ClientPlayerEntity player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); RayTraceResult result = player.world.rayTraceBlocks(new RayTraceContext(near.add(viewerPos), far.add(viewerPos), RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, player)); if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { @@ -80,18 +82,18 @@ public void render(int mouseX, int mouseY, float partialTicks) { } @Override - public boolean mouseReleased(double mouseX, double mouseY, int mouseButton) { + public boolean func_231048_c_(double mouseX, double mouseY, int mouseButton) { if (mouseButton == 0) { if (clickStart != null && !clickStart.equals(currentMouseOver)) { BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().removeAllSelections(); BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().addSelection(BetterBlockPos.from(clickStart), BetterBlockPos.from(currentMouseOver)); - ITextComponent component = new StringTextComponent("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); - component.getStyle() - .setColor(TextFormatting.WHITE) - .setClickEvent(new ClickEvent( + TextComponent component = new StringTextComponent("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); + component.func_230530_a_(component.getStyle() + .func_240712_a_(TextFormatting.WHITE) + .func_240715_a_(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "help sel" - )); + ))); Helper.HELPER.logDirect(component); clickStart = null; } else { @@ -101,13 +103,13 @@ public boolean mouseReleased(double mouseX, double mouseY, int mouseButton) { BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(currentMouseOver.up())); } clickStart = null; - return super.mouseReleased(mouseX, mouseY, mouseButton); + return super.func_231048_c_(mouseX, mouseY, mouseButton); } @Override - public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { + public boolean func_231044_a_(double mouseX, double mouseY, int mouseButton) { clickStart = currentMouseOver; - return super.mouseClicked(mouseX, mouseY, mouseButton); + return super.func_231044_a_(mouseX, mouseY, mouseButton); } public void onRender(MatrixStack modelViewStack, Matrix4f projectionMatrix) { @@ -139,7 +141,7 @@ public void onRender(MatrixStack modelViewStack, Matrix4f projectionMatrix) { } } - private Vec3d toWorld(double x, double y, double z) { + private Vector3d toWorld(double x, double y, double z) { if (this.projectionViewMatrix == null) { return null; } @@ -156,6 +158,6 @@ private Vec3d toWorld(double x, double y, double z) { } pos.perspectiveDivide(); - return new Vec3d(pos.getX(), pos.getY(), pos.getZ()); + return new Vector3d(pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 49aa976d2..d7d9442f7 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -24,10 +24,10 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.Matrix4f; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.vector.Matrix4f; import java.awt.*; diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 657c06168..405199612 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -29,7 +29,6 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.block.BlockState; -import net.minecraft.client.renderer.Matrix4f; import net.minecraft.client.renderer.tileentity.BeaconTileEntityRenderer; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; @@ -39,6 +38,8 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.world.DimensionType; import java.awt.*; import java.util.Collection; @@ -77,8 +78,8 @@ public static void render(RenderEvent event, PathingBehavior behavior) { ((GuiClick) Helper.mc.currentScreen).onRender(event.getModelViewStack(), event.getProjectionMatrix()); } - int thisPlayerDimension = behavior.baritone.getPlayerContext().world().getDimension().getType().getId(); - int currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().getDimension().getType().getId(); + DimensionType thisPlayerDimension = behavior.baritone.getPlayerContext().world().func_230315_m_(); + DimensionType currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().func_230315_m_(); if (thisPlayerDimension != currentRenderViewDimension) { // this is a path for a bot in a different dimension, don't render it diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 8b33f5425..ffa5eb417 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -161,7 +161,7 @@ public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { } speed /= hardness; - if (state.getMaterial().isToolNotRequired() || (!item.isEmpty() && item.canHarvestBlock(state))) { + if (!state.func_235783_q_() || (!item.isEmpty() && item.canHarvestBlock(state))) { return speed / 30; } else { return speed / 100; diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index 1570cdd85..82a4c1796 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -24,7 +24,7 @@ import net.minecraft.entity.MobEntity; import net.minecraft.entity.monster.EndermanEntity; import net.minecraft.entity.monster.SpiderEntity; -import net.minecraft.entity.monster.ZombiePigmanEntity; +import net.minecraft.entity.monster.ZombifiedPiglinEntity; import net.minecraft.util.math.BlockPos; import java.util.ArrayList; @@ -75,9 +75,9 @@ public static List create(IPlayerContext ctx) { ctx.entitiesStream() .filter(entity -> entity instanceof MobEntity) .filter(entity -> (!(entity instanceof SpiderEntity)) || ctx.player().getBrightness() < 0.5) - .filter(entity -> !(entity instanceof ZombiePigmanEntity) || ((ZombiePigmanEntity) entity).getRevengeTarget() != null) + .filter(entity -> !(entity instanceof ZombifiedPiglinEntity) || ((ZombifiedPiglinEntity) entity).getRevengeTarget() != null) .filter(entity -> !(entity instanceof EndermanEntity) || ((EndermanEntity) entity).isScreaming()) - .forEach(entity -> res.add(new Avoidance(new BlockPos(entity), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); + .forEach(entity -> res.add(new Avoidance(entity.func_233580_cy_(), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); } return res; } diff --git a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java index 3ba3798c1..375b9a968 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java @@ -23,7 +23,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.nbt.CompoundNBT; -import net.minecraft.state.IProperty; +import net.minecraft.state.Property; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; @@ -111,7 +111,7 @@ private BlockState deserialize() { this.blockState = block.getDefaultState(); this.properties.keySet().stream().sorted(String::compareTo).forEachOrdered(key -> { - IProperty property = block.getStateContainer().getProperty(key); + Property property = block.getStateContainer().getProperty(key); if (property != null) { this.blockState = setPropertyValue(this.blockState, property, this.properties.get(key)); } @@ -146,7 +146,7 @@ private static SerializedBlockState getFromString(String s) { } } - private static > BlockState setPropertyValue(BlockState state, IProperty property, String value) { + private static > BlockState setPropertyValue(BlockState state, Property property, String value) { Optional parsed = property.parseValue(value); if (parsed.isPresent()) { return state.with(property, parsed.get()); From 039898c65457fa3ef2c9f2409fdb266caee7326d Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 19 Jul 2020 16:26:18 -0500 Subject: [PATCH 128/935] This null check should fix it lol --- src/main/java/baritone/cache/WorldScanner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index b2c29415b..662d600e1 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -162,7 +162,7 @@ private boolean scanChunkInto(int chunkX, int chunkZ, Chunk chunk, BlockOptional final int imax = 1 << 12; for (int i = 0; i < imax; i++) { BlockState state = bsc.getAtPalette(storage[i]); - if (filter.has(state)) { + if (state != null && filter.has(state)) { int y = yReal | ((i >> 8) & 15); if (result.size() >= max) { if (Math.abs(y - playerY) < yLevelThreshold) { From 819178b28038a117cc04a11e81ed08dfb19dcb82 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 19 Jul 2020 16:46:00 -0500 Subject: [PATCH 129/935] wildcard --- src/api/java/baritone/api/utils/BlockOptionalMeta.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 0ad57ffb6..3fa7778cf 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -132,9 +132,9 @@ public BlockState getAnyBlockState() { public static LootTableManager getManager() { if (manager == null) { - ResourcePackList rpl = new ResourcePackList<>(ResourcePackInfo::new, new ServerPackFinder()); + ResourcePackList rpl = new ResourcePackList<>(ResourcePackInfo::new, new ServerPackFinder()); rpl.reloadPacksFromFinders(); - IResourcePack thePack = ((ResourcePackInfo) rpl.getAllPacks().iterator().next()).getResourcePack(); + IResourcePack thePack = rpl.getAllPacks().iterator().next().getResourcePack(); IReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(ResourcePackType.SERVER_DATA); manager = new LootTableManager(predicate); resourceManager.addReloadListener(manager); From 807b1b5eb01bcc82f80da0cd055f728df937e70a Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Sun, 19 Jul 2020 16:47:30 -0500 Subject: [PATCH 130/935] [Change] Updated Mappings + Simplified Port --- build.gradle | 2 +- .../api/command/helpers/Paginator.java | 18 ++++++++--------- src/api/java/baritone/api/utils/Helper.java | 6 +++--- .../baritone/api/utils/IPlayerContext.java | 1 - .../launch/mixins/MixinMinecraft.java | 4 ++-- .../baritone/launch/mixins/MixinScreen.java | 2 +- .../java/baritone/cache/WorldProvider.java | 2 ++ .../baritone/command/BaritoneChatControl.java | 9 ++++----- .../command/defaults/ChestsCommand.java | 2 -- .../command/defaults/ComeCommand.java | 1 - .../command/defaults/HelpCommand.java | 14 ++++++------- .../baritone/command/defaults/SetCommand.java | 19 +++++++++--------- .../command/defaults/WaypointsCommand.java | 20 +++++++++---------- .../java/baritone/process/BuilderProcess.java | 1 - src/main/java/baritone/utils/GuiClick.java | 16 +++++++-------- src/main/java/baritone/utils/ToolSet.java | 2 +- 16 files changed, 57 insertions(+), 62 deletions(-) diff --git a/build.gradle b/build.gradle index a9ea66a33..5cb167351 100755 --- a/build.gradle +++ b/build.gradle @@ -85,7 +85,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20200514-1.16' + mappings channel: 'snapshot', version: '20200707-1.16.1' if (getProject().hasProperty("baritone.forge_build")) { reobfMappings 'searge' diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index 4cea55261..b4fe28941 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -78,33 +78,33 @@ public void display(Function transform, String commandPrefix) TextComponent prevPageComponent = new StringTextComponent("<<"); if (hasPrevPage) { prevPageComponent.func_230530_a_(prevPageComponent.getStyle() - .func_240715_a_(new ClickEvent( + .setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format("%s %d", commandPrefix, page - 1) )) - .func_240716_a_(new HoverEvent( - HoverEvent.Action.field_230550_a_, + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, new StringTextComponent("Click to view previous page") ))); } else { - prevPageComponent.func_230530_a_(prevPageComponent.getStyle().func_240712_a_(TextFormatting.DARK_GRAY)); + prevPageComponent.func_230530_a_(prevPageComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); } TextComponent nextPageComponent = new StringTextComponent(">>"); if (hasNextPage) { nextPageComponent.func_230530_a_(nextPageComponent.getStyle() - .func_240715_a_(new ClickEvent( + .setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format("%s %d", commandPrefix, page + 1) )) - .func_240716_a_(new HoverEvent( - HoverEvent.Action.field_230550_a_, + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, new StringTextComponent("Click to view next page") ))); } else { - nextPageComponent.func_230530_a_(nextPageComponent.getStyle().func_240712_a_(TextFormatting.DARK_GRAY)); + nextPageComponent.func_230530_a_(nextPageComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); } TextComponent pagerComponent = new StringTextComponent(""); - pagerComponent.func_230530_a_(pagerComponent.getStyle().func_240712_a_(TextFormatting.GRAY)); + pagerComponent.func_230530_a_(pagerComponent.getStyle().setFormatting(TextFormatting.GRAY)); pagerComponent.func_230529_a_(prevPageComponent); // appendSibling pagerComponent.func_240702_b_(" | "); // appendText pagerComponent.func_230529_a_(nextPageComponent); diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 9a6020674..c96c8d8d4 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -52,11 +52,11 @@ static ITextComponent getPrefix() { final Calendar now = Calendar.getInstance(); final boolean xd = now.get(Calendar.MONTH) == Calendar.APRIL && now.get(Calendar.DAY_OF_MONTH) <= 3; TextComponent baritone = new StringTextComponent(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); - baritone.func_230530_a_(baritone.getStyle().func_240712_a_(TextFormatting.LIGHT_PURPLE)); + baritone.func_230530_a_(baritone.getStyle().setFormatting(TextFormatting.LIGHT_PURPLE)); // Outer brackets TextComponent prefix = new StringTextComponent(""); - prefix.func_230530_a_(baritone.getStyle().func_240712_a_(TextFormatting.DARK_PURPLE)); + prefix.func_230530_a_(baritone.getStyle().setFormatting(TextFormatting.DARK_PURPLE)); prefix.func_240702_b_("["); prefix.func_230529_a_(baritone); prefix.func_240702_b_("]"); @@ -101,7 +101,7 @@ default void logDirect(ITextComponent... components) { default void logDirect(String message, TextFormatting color) { Stream.of(message.split("\n")).forEach(line -> { TextComponent component = new StringTextComponent(line.replace("\t", " ")); - component.func_230530_a_(component.getStyle().func_240712_a_(color)); + component.func_230530_a_(component.getStyle().setFormatting(color)); logDirect(component); }); } diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index f143d7be5..ffa7939b4 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -24,7 +24,6 @@ import net.minecraft.entity.Entity; import net.minecraft.util.math.*; import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector3f; import net.minecraft.world.World; import java.util.Optional; diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index ea627e830..6d771165e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -133,12 +133,12 @@ private void postLoadWorld(ClientWorld world, CallbackInfo ci) { at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/gui/screen/Screen.field_230711_n_:Z" + target = "net/minecraft/client/gui/screen/Screen.passEvents:Z" ) ) private boolean passEvents(Screen screen) { // allow user input is only the primary baritone - return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) || screen.field_230711_n_; + return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) || screen.passEvents; } // TODO diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java index 02578d540..8d5a801cd 100644 --- a/src/launch/java/baritone/launch/mixins/MixinScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.java @@ -28,6 +28,6 @@ public abstract class MixinScreen implements IGuiScreen { @Override - @Invoker("func_231156_a_") + @Invoker("openLink") public abstract void openLinkInvoker(URI url); } diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index d0f34c380..b56c0fdf8 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -53,6 +53,8 @@ public final WorldData getCurrentWorld() { /** * Called when a new world is initialized to discover the + * + * @param world The world's Registry Data */ public final void initWorld(RegistryKey world) { File directory; diff --git a/src/main/java/baritone/command/BaritoneChatControl.java b/src/main/java/baritone/command/BaritoneChatControl.java index 58a8bed43..7071cedd8 100644 --- a/src/main/java/baritone/command/BaritoneChatControl.java +++ b/src/main/java/baritone/command/BaritoneChatControl.java @@ -35,7 +35,6 @@ import baritone.command.argument.CommandArguments; import baritone.command.manager.CommandManager; import net.minecraft.util.Tuple; -import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextComponent; import net.minecraft.util.text.TextFormatting; @@ -82,12 +81,12 @@ private void logRanCommand(String command, String rest) { String toDisplay = settings.censorRanCommands.value ? command + " ..." : msg; TextComponent component = new StringTextComponent(String.format("> %s", toDisplay)); component.func_230530_a_(component.getStyle() - .func_240712_a_(TextFormatting.WHITE) - .func_240716_a_(new HoverEvent( - HoverEvent.Action.field_230550_a_, + .setFormatting(TextFormatting.WHITE) + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, new StringTextComponent("Click to rerun command") )) - .func_240715_a_(new ClickEvent( + .setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + msg ))); diff --git a/src/main/java/baritone/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java index e2406b134..2037e1f61 100644 --- a/src/main/java/baritone/command/defaults/ChestsCommand.java +++ b/src/main/java/baritone/command/defaults/ChestsCommand.java @@ -27,8 +27,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.IFormattableTextComponent; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponent; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index fe245d0bd..04d804b46 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -24,7 +24,6 @@ import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.argument.IArgConsumer; import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index d80f8b84b..19cdce6ca 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -59,21 +59,21 @@ public void execute(String label, IArgConsumer args) throws CommandException { String names = String.join("/", command.getNames()); String name = command.getNames().get(0); TextComponent shortDescComponent = new StringTextComponent(" - " + command.getShortDesc()); - shortDescComponent.func_230530_a_(shortDescComponent.getStyle().func_240712_a_(TextFormatting.DARK_GRAY)); + shortDescComponent.func_230530_a_(shortDescComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); TextComponent namesComponent = new StringTextComponent(names); - namesComponent.func_230530_a_(namesComponent.getStyle().func_240712_a_(TextFormatting.WHITE)); + namesComponent.func_230530_a_(namesComponent.getStyle().setFormatting(TextFormatting.WHITE)); TextComponent hoverComponent = new StringTextComponent(""); - hoverComponent.func_230530_a_(hoverComponent.getStyle().func_240712_a_(TextFormatting.GRAY)); + hoverComponent.func_230530_a_(hoverComponent.getStyle().setFormatting(TextFormatting.GRAY)); hoverComponent.func_230529_a_(namesComponent); hoverComponent.func_240702_b_("\n" + command.getShortDesc()); hoverComponent.func_240702_b_("\n\nClick to view full help"); String clickCommand = FORCE_COMMAND_PREFIX + String.format("%s %s", label, command.getNames().get(0)); TextComponent component = new StringTextComponent(name); - component.func_230530_a_(component.getStyle().func_240712_a_(TextFormatting.GRAY)); + component.func_230530_a_(component.getStyle().setFormatting(TextFormatting.GRAY)); component.func_230529_a_(shortDescComponent); component.func_230530_a_(component.getStyle() - .func_240716_a_(new HoverEvent(HoverEvent.Action.field_230550_a_, hoverComponent)) - .func_240715_a_(new ClickEvent(ClickEvent.Action.RUN_COMMAND, clickCommand))); + .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) + .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, clickCommand))); return component; }, FORCE_COMMAND_PREFIX + label @@ -89,7 +89,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { command.getLongDesc().forEach(this::logDirect); logDirect(""); TextComponent returnComponent = new StringTextComponent("Click to return to the help menu"); - returnComponent.func_230530_a_(returnComponent.getStyle().func_240715_a_(new ClickEvent( + returnComponent.func_230530_a_(returnComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + label ))); diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 8cb585d43..49430040b 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -27,7 +27,6 @@ import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextComponent; import net.minecraft.util.text.TextFormatting; @@ -83,19 +82,19 @@ public void execute(String label, IArgConsumer args) throws CommandException { " (%s)", settingTypeToString(setting) )); - typeComponent.func_230530_a_(typeComponent.getStyle().func_240712_a_(TextFormatting.DARK_GRAY)); + typeComponent.func_230530_a_(typeComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); TextComponent hoverComponent = new StringTextComponent(""); - hoverComponent.func_230530_a_(hoverComponent.getStyle().func_240712_a_(TextFormatting.GRAY)); + hoverComponent.func_230530_a_(hoverComponent.getStyle().setFormatting(TextFormatting.GRAY)); hoverComponent.func_240702_b_(setting.getName()); hoverComponent.func_240702_b_(String.format("\nType: %s", settingTypeToString(setting))); hoverComponent.func_240702_b_(String.format("\n\nValue:\n%s", settingValueToString(setting))); String commandSuggestion = Baritone.settings().prefix.value + String.format("set %s ", setting.getName()); TextComponent component = new StringTextComponent(setting.getName()); - component.func_230530_a_(component.getStyle().func_240712_a_(TextFormatting.GRAY)); + component.func_230530_a_(component.getStyle().setFormatting(TextFormatting.GRAY)); component.func_230529_a_(typeComponent); component.func_230530_a_(component.getStyle() - .func_240716_a_(new HoverEvent(HoverEvent.Action.field_230550_a_, hoverComponent)) - .func_240715_a_(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, commandSuggestion))); + .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) + .setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, commandSuggestion))); return component; }, FORCE_COMMAND_PREFIX + "set " + arg + " " + search @@ -166,12 +165,12 @@ public void execute(String label, IArgConsumer args) throws CommandException { } TextComponent oldValueComponent = new StringTextComponent(String.format("Old value: %s", oldValue)); oldValueComponent.func_230530_a_(oldValueComponent.getStyle() - .func_240712_a_(TextFormatting.GRAY) - .func_240716_a_(new HoverEvent( - HoverEvent.Action.field_230550_a_, + .setFormatting(TextFormatting.GRAY) + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, new StringTextComponent("Click to set the setting back to this value") )) - .func_240715_a_(new ClickEvent( + .setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + String.format("set %s %s", setting.getName(), oldValue) ))); diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index b0f115d97..df91d805f 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -61,21 +61,21 @@ public void execute(String label, IArgConsumer args) throws CommandException { BiFunction toComponent = (waypoint, _action) -> { TextComponent component = new StringTextComponent(""); TextComponent tagComponent = new StringTextComponent(waypoint.getTag().name() + " "); - tagComponent.func_230530_a_(tagComponent.getStyle().func_240712_a_(TextFormatting.GRAY)); + tagComponent.func_230530_a_(tagComponent.getStyle().setFormatting(TextFormatting.GRAY)); String name = waypoint.getName(); TextComponent nameComponent = new StringTextComponent(!name.isEmpty() ? name : ""); - nameComponent.func_230530_a_(nameComponent.getStyle().func_240712_a_(!name.isEmpty() ? TextFormatting.GRAY : TextFormatting.DARK_GRAY)); + nameComponent.func_230530_a_(nameComponent.getStyle().setFormatting(!name.isEmpty() ? TextFormatting.GRAY : TextFormatting.DARK_GRAY)); TextComponent timestamp = new StringTextComponent(" @ " + new Date(waypoint.getCreationTimestamp())); - timestamp.func_230530_a_(timestamp.getStyle().func_240712_a_(TextFormatting.DARK_GRAY)); + timestamp.func_230530_a_(timestamp.getStyle().setFormatting(TextFormatting.DARK_GRAY)); component.func_230529_a_(tagComponent); component.func_230529_a_(nameComponent); component.func_230529_a_(timestamp); component.func_230530_a_(component.getStyle() - .func_240716_a_(new HoverEvent( - HoverEvent.Action.field_230550_a_, + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, new StringTextComponent("Click to select") )) - .func_240715_a_(new ClickEvent( + .setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s %s %s @ %d", @@ -138,7 +138,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { IWaypoint waypoint = new Waypoint(name, tag, pos); ForWaypoints.waypoints(this.baritone).addWaypoint(waypoint); TextComponent component = new StringTextComponent("Waypoint added: "); - component.func_230530_a_(component.getStyle().func_240712_a_(TextFormatting.GRAY)); + component.func_230530_a_(component.getStyle().setFormatting(TextFormatting.GRAY)); component.func_230529_a_(toComponent.apply(waypoint, Action.INFO)); logDirect(component); } else if (action == Action.CLEAR) { @@ -196,7 +196,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect(transform.apply(waypoint)); logDirect(String.format("Position: %s", waypoint.getLocation())); TextComponent deleteComponent = new StringTextComponent("Click to delete this waypoint"); - deleteComponent.func_230530_a_(deleteComponent.getStyle().func_240715_a_(new ClickEvent( + deleteComponent.func_230530_a_(deleteComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s delete %s @ %d", @@ -207,7 +207,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { ) ))); TextComponent goalComponent = new StringTextComponent("Click to set goal to this waypoint"); - goalComponent.func_230530_a_(goalComponent.getStyle().func_240715_a_(new ClickEvent( + goalComponent.func_230530_a_(goalComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s goal %s @ %d", @@ -218,7 +218,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { ) ))); TextComponent backComponent = new StringTextComponent("Click to return to the waypoints list"); - backComponent.func_230530_a_(backComponent.getStyle().func_240715_a_(new ClickEvent( + backComponent.func_230530_a_(backComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s list", diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index ac5157e56..577244bd2 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -58,7 +58,6 @@ import net.minecraft.util.math.*; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector3f; import net.minecraft.util.math.vector.Vector3i; import java.io.File; diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index fb37cc67f..b2202c850 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -55,12 +55,12 @@ public GuiClick() { } @Override - public boolean func_231177_au__() { + public boolean isPauseScreen() { return false; } @Override - public void func_230430_a_(MatrixStack stack, int mouseX, int mouseY, float partialTicks) { + public void render(MatrixStack stack, int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHelper.getMouseX(); double my = mc.mouseHelper.getMouseY(); @@ -82,15 +82,15 @@ public void func_230430_a_(MatrixStack stack, int mouseX, int mouseY, float part } @Override - public boolean func_231048_c_(double mouseX, double mouseY, int mouseButton) { + public boolean mouseReleased(double mouseX, double mouseY, int mouseButton) { if (mouseButton == 0) { if (clickStart != null && !clickStart.equals(currentMouseOver)) { BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().removeAllSelections(); BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().addSelection(BetterBlockPos.from(clickStart), BetterBlockPos.from(currentMouseOver)); TextComponent component = new StringTextComponent("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); component.func_230530_a_(component.getStyle() - .func_240712_a_(TextFormatting.WHITE) - .func_240715_a_(new ClickEvent( + .setFormatting(TextFormatting.WHITE) + .setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "help sel" ))); @@ -103,13 +103,13 @@ public boolean func_231048_c_(double mouseX, double mouseY, int mouseButton) { BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(currentMouseOver.up())); } clickStart = null; - return super.func_231048_c_(mouseX, mouseY, mouseButton); + return super.mouseReleased(mouseX, mouseY, mouseButton); } @Override - public boolean func_231044_a_(double mouseX, double mouseY, int mouseButton) { + public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { clickStart = currentMouseOver; - return super.func_231044_a_(mouseX, mouseY, mouseButton); + return super.mouseClicked(mouseX, mouseY, mouseButton); } public void onRender(MatrixStack modelViewStack, Matrix4f projectionMatrix) { diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index ffa5eb417..edd033061 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -161,7 +161,7 @@ public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { } speed /= hardness; - if (!state.func_235783_q_() || (!item.isEmpty() && item.canHarvestBlock(state))) { + if (!state.getRequiresTool() || (!item.isEmpty() && item.canHarvestBlock(state))) { return speed / 30; } else { return speed / 100; From 2acb8f2a3708068701981c71ced3b2018dc6818a Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Sun, 19 Jul 2020 18:33:58 -0500 Subject: [PATCH 131/935] [Fix] Fixed BaritoneAutoTest in 1.16.1 --- .../java/baritone/launch/mixins/MixinMinecraft.java | 7 +++---- src/main/java/baritone/utils/BaritoneAutoTest.java | 11 ++++------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 6d771165e..01aebacad 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -57,15 +57,14 @@ private void postInit(CallbackInfo ci) { BaritoneAPI.getProvider().getPrimaryBaritone(); } - /* + @Inject( - method = "startTimerHackThread", - at = @At("HEAD") + method = "", + at = @At("RETURN") ) private void preInit(CallbackInfo ci) { BaritoneAutoTest.INSTANCE.onPreInit(); } - */ @Inject( method = "runTick", diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index f90b34124..37a7dc8d4 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -32,10 +32,10 @@ import net.minecraft.client.settings.GraphicsFanciness; import net.minecraft.client.settings.ParticleStatus; import net.minecraft.client.tutorial.TutorialSteps; -import net.minecraft.nbt.CompoundNBT; import net.minecraft.server.IDynamicRegistries; import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.util.HTTPUtil; +import net.minecraft.util.datafix.codec.DatapackCodec; import net.minecraft.util.math.BlockPos; import net.minecraft.world.*; import net.minecraft.world.gen.settings.DimensionGeneratorSettings; @@ -44,6 +44,7 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.util.OptionalLong; /** * Responsible for automatically testing Baritone's pathing algorithm by automatically creating a world with a specific @@ -92,16 +93,13 @@ public void onPreInit() { @Override public void onTick(TickEvent event) { - // I don't want to make autotest work right now :) - System.exit(0); - /* IPlayerContext ctx = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext(); // If we're on the main menu then create the test world and launch the integrated server if (mc.currentScreen instanceof MainMenuScreen) { System.out.println("Beginning Baritone automatic test routine"); mc.displayGuiScreen(null); - WorldSettings worldsettings = new WorldSettings(TEST_SEED, GameType.SURVIVAL, true, false, WorldType.DEFAULT); - mc.func_238192_a_("BaritoneAutoTest", worldsettings, IDynamicRegistries.func_239770_b_(), DimensionGeneratorSettings.field_236202_b_); + WorldSettings worldsettings = new WorldSettings("BaritoneAutoTest", GameType.SURVIVAL, false, Difficulty.NORMAL, true, new GameRules(), DatapackCodec.field_234880_a_); + mc.func_238192_a_("BaritoneAutoTest", worldsettings, IDynamicRegistries.func_239770_b_(), DimensionGeneratorSettings.field_236202_b_.func_236220_a_(false, OptionalLong.of(TEST_SEED))); } IntegratedServer server = mc.getIntegratedServer(); @@ -174,7 +172,6 @@ public void onTick(TickEvent event) { throw new IllegalStateException("took too long"); } } - */ } private BaritoneAutoTest() { From 246dd2b0ad2303bc6ac8a9b3810a29161ffaaf9e Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Sat, 25 Jul 2020 22:28:38 -0500 Subject: [PATCH 132/935] [Change] Added Auto Build Support --- .gitlab-ci.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 000000000..35220c614 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,13 @@ +image: java:8 + +before_script: + - which java + - which javac + +build: + script: + - ./gradlew build + artifacts: + paths: + - build/libs/*.jar + expire_in: 1 month From dbeee3365782560d344b0a728284ee8289e5f8f4 Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Sat, 25 Jul 2020 22:52:46 -0500 Subject: [PATCH 133/935] [Fix] Fix Proguard from Master Merge Someone didn't verify this even built xD --- buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 6ad9e5a4e..9a2e063f6 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -99,7 +99,7 @@ private void extractProguard() throws Exception { } } - private String getJavaBinPathForProguard() { + private String getJavaBinPathForProguard() throws Exception { String path; try { path = findJavaPathByGradleConfig(); From 4f1db04224db8f2c76e84e02055d2d8c09127aba Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Sat, 25 Jul 2020 22:53:22 -0500 Subject: [PATCH 134/935] [Change] Updated Mappings --- build.gradle | 2 +- .../api/command/helpers/Paginator.java | 18 +++++++------- src/api/java/baritone/api/utils/Helper.java | 18 +++++++------- .../mixins/MixinCommandSuggestionHelper.java | 8 +++---- .../baritone/behavior/PathingBehavior.java | 2 +- .../command/ExampleBaritoneControl.java | 2 +- .../command/defaults/ChestsCommand.java | 2 +- .../command/defaults/ComeCommand.java | 2 +- .../command/defaults/HelpCommand.java | 20 ++++++++-------- .../baritone/command/defaults/SelCommand.java | 2 +- .../baritone/command/defaults/SetCommand.java | 18 +++++++------- .../command/defaults/WaypointsCommand.java | 24 +++++++++---------- .../pathing/movement/CalculationContext.java | 2 +- .../movement/movements/MovementFall.java | 8 +++---- .../movement/movements/MovementParkour.java | 2 +- .../movement/movements/MovementTraverse.java | 2 +- .../baritone/pathing/path/PathExecutor.java | 4 ++-- .../java/baritone/process/BuilderProcess.java | 6 ++--- .../java/baritone/process/FarmProcess.java | 2 +- .../java/baritone/process/FollowProcess.java | 2 +- .../java/baritone/process/MineProcess.java | 6 ++--- .../java/baritone/utils/BaritoneAutoTest.java | 2 +- src/main/java/baritone/utils/GuiClick.java | 2 +- .../baritone/utils/PlayerMovementInput.java | 2 +- .../baritone/utils/pathing/Avoidance.java | 2 +- 25 files changed, 80 insertions(+), 80 deletions(-) diff --git a/build.gradle b/build.gradle index 5cb167351..f92ec606f 100755 --- a/build.gradle +++ b/build.gradle @@ -85,7 +85,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20200707-1.16.1' + mappings channel: 'snapshot', version: '20200723-1.16.1' if (getProject().hasProperty("baritone.forge_build")) { reobfMappings 'searge' diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index b4fe28941..dda510ecd 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -77,7 +77,7 @@ public void display(Function transform, String commandPrefix) boolean hasNextPage = commandPrefix != null && validPage(page + 1); TextComponent prevPageComponent = new StringTextComponent("<<"); if (hasPrevPage) { - prevPageComponent.func_230530_a_(prevPageComponent.getStyle() + prevPageComponent.setStyle(prevPageComponent.getStyle() .setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format("%s %d", commandPrefix, page - 1) @@ -87,11 +87,11 @@ public void display(Function transform, String commandPrefix) new StringTextComponent("Click to view previous page") ))); } else { - prevPageComponent.func_230530_a_(prevPageComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + prevPageComponent.setStyle(prevPageComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); } TextComponent nextPageComponent = new StringTextComponent(">>"); if (hasNextPage) { - nextPageComponent.func_230530_a_(nextPageComponent.getStyle() + nextPageComponent.setStyle(nextPageComponent.getStyle() .setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format("%s %d", commandPrefix, page + 1) @@ -101,14 +101,14 @@ public void display(Function transform, String commandPrefix) new StringTextComponent("Click to view next page") ))); } else { - nextPageComponent.func_230530_a_(nextPageComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + nextPageComponent.setStyle(nextPageComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); } TextComponent pagerComponent = new StringTextComponent(""); - pagerComponent.func_230530_a_(pagerComponent.getStyle().setFormatting(TextFormatting.GRAY)); - pagerComponent.func_230529_a_(prevPageComponent); // appendSibling - pagerComponent.func_240702_b_(" | "); // appendText - pagerComponent.func_230529_a_(nextPageComponent); - pagerComponent.func_240702_b_(String.format(" %d/%d", page, getMaxPage())); + pagerComponent.setStyle(pagerComponent.getStyle().setFormatting(TextFormatting.GRAY)); + pagerComponent.append(prevPageComponent); + pagerComponent.appendString(" | "); + pagerComponent.append(nextPageComponent); + pagerComponent.appendString(String.format(" %d/%d", page, getMaxPage())); logDirect(pagerComponent); } diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index c96c8d8d4..2562e563e 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -52,14 +52,14 @@ static ITextComponent getPrefix() { final Calendar now = Calendar.getInstance(); final boolean xd = now.get(Calendar.MONTH) == Calendar.APRIL && now.get(Calendar.DAY_OF_MONTH) <= 3; TextComponent baritone = new StringTextComponent(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); - baritone.func_230530_a_(baritone.getStyle().setFormatting(TextFormatting.LIGHT_PURPLE)); + baritone.setStyle(baritone.getStyle().setFormatting(TextFormatting.LIGHT_PURPLE)); // Outer brackets TextComponent prefix = new StringTextComponent(""); - prefix.func_230530_a_(baritone.getStyle().setFormatting(TextFormatting.DARK_PURPLE)); - prefix.func_240702_b_("["); - prefix.func_230529_a_(baritone); - prefix.func_240702_b_("]"); + prefix.setStyle(baritone.getStyle().setFormatting(TextFormatting.DARK_PURPLE)); + prefix.appendString("["); + prefix.append(baritone); + prefix.appendString("]"); return prefix; } @@ -85,9 +85,9 @@ default void logDebug(String message) { */ default void logDirect(ITextComponent... components) { TextComponent component = new StringTextComponent(""); - component.func_230529_a_(getPrefix()); - component.func_230529_a_(new StringTextComponent(" ")); - Arrays.asList(components).forEach(component::func_230529_a_); + component.append(getPrefix()); + component.append(new StringTextComponent(" ")); + Arrays.asList(components).forEach(component::append); mc.execute(() -> BaritoneAPI.getSettings().logger.value.accept(component)); } @@ -101,7 +101,7 @@ default void logDirect(ITextComponent... components) { default void logDirect(String message, TextFormatting color) { Stream.of(message.split("\n")).forEach(line -> { TextComponent component = new StringTextComponent(line.replace("\t", " ")); - component.func_230530_a_(component.getStyle().setFormatting(color)); + component.setStyle(component.getStyle().setFormatting(color)); logDirect(component); }); } diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index d749c35b8..06abfd674 100644 --- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -52,7 +52,7 @@ public class MixinCommandSuggestionHelper { private List field_228103_l_; @Shadow - private CompletableFuture field_228107_p_; + private CompletableFuture suggestionsFuture; @Inject( method = "init", @@ -78,7 +78,7 @@ private void preUpdateSuggestion(CallbackInfo ci) { this.field_228103_l_.clear(); if (event.completions.length == 0) { - this.field_228107_p_ = Suggestions.empty(); + this.suggestionsFuture = Suggestions.empty(); } else { int offset = this.field_228095_d_.getText().endsWith(" ") ? this.field_228095_d_.getCursorPosition() @@ -92,8 +92,8 @@ private void preUpdateSuggestion(CallbackInfo ci) { StringRange.between(offset, offset + suggestionList.stream().mapToInt(s -> s.getText().length()).max().orElse(0)), suggestionList); - this.field_228107_p_ = new CompletableFuture<>(); - this.field_228107_p_.complete(suggestions); + this.suggestionsFuture = new CompletableFuture<>(); + this.suggestionsFuture.complete(suggestions); } } } diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 91f6a8504..8db5a7416 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -380,7 +380,7 @@ public CalculationContext secretInternalGetCalculationContext() { public BetterBlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); if (!MovementHelper.canWalkOn(ctx, feet.down())) { - if (ctx.player().func_233570_aj_()) { + if (ctx.player().isOnGround()) { double playerX = ctx.player().getPositionVec().x; double playerZ = ctx.player().getPositionVec().z; ArrayList closest = new ArrayList<>(); diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index 9c6313dd2..ed2c1f06c 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -80,7 +80,7 @@ private void logRanCommand(String command, String rest) { String msg = command + rest; String toDisplay = settings.censorRanCommands.value ? command + " ..." : msg; TextComponent component = new StringTextComponent(String.format("> %s", toDisplay)); - component.func_230530_a_(component.getStyle() + component.setStyle(component.getStyle() .setFormatting(TextFormatting.WHITE) .setHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, diff --git a/src/main/java/baritone/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java index 2037e1f61..4e4f3a2c3 100644 --- a/src/main/java/baritone/command/defaults/ChestsCommand.java +++ b/src/main/java/baritone/command/defaults/ChestsCommand.java @@ -55,7 +55,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect(pos.toString()); for (ItemStack item : inv.getContents()) { IFormattableTextComponent component = (IFormattableTextComponent) item.getTextComponent(); - component.func_240702_b_(String.format(" x %d", item.getCount())); + component.appendString(String.format(" x %d", item.getCount())); logDirect(component); } } diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index 04d804b46..354acb9e4 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -42,7 +42,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (entity == null) { throw new CommandInvalidStateException("render view entity is null"); } - baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(entity.func_233580_cy_())); + baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(entity.getPosition())); logDirect("Coming"); } diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index 19cdce6ca..bdd49bc99 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -59,19 +59,19 @@ public void execute(String label, IArgConsumer args) throws CommandException { String names = String.join("/", command.getNames()); String name = command.getNames().get(0); TextComponent shortDescComponent = new StringTextComponent(" - " + command.getShortDesc()); - shortDescComponent.func_230530_a_(shortDescComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + shortDescComponent.setStyle(shortDescComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); TextComponent namesComponent = new StringTextComponent(names); - namesComponent.func_230530_a_(namesComponent.getStyle().setFormatting(TextFormatting.WHITE)); + namesComponent.setStyle(namesComponent.getStyle().setFormatting(TextFormatting.WHITE)); TextComponent hoverComponent = new StringTextComponent(""); - hoverComponent.func_230530_a_(hoverComponent.getStyle().setFormatting(TextFormatting.GRAY)); - hoverComponent.func_230529_a_(namesComponent); - hoverComponent.func_240702_b_("\n" + command.getShortDesc()); - hoverComponent.func_240702_b_("\n\nClick to view full help"); + hoverComponent.setStyle(hoverComponent.getStyle().setFormatting(TextFormatting.GRAY)); + hoverComponent.append(namesComponent); + hoverComponent.appendString("\n" + command.getShortDesc()); + hoverComponent.appendString("\n\nClick to view full help"); String clickCommand = FORCE_COMMAND_PREFIX + String.format("%s %s", label, command.getNames().get(0)); TextComponent component = new StringTextComponent(name); - component.func_230530_a_(component.getStyle().setFormatting(TextFormatting.GRAY)); - component.func_230529_a_(shortDescComponent); - component.func_230530_a_(component.getStyle() + component.setStyle(component.getStyle().setFormatting(TextFormatting.GRAY)); + component.append(shortDescComponent); + component.setStyle(component.getStyle() .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, clickCommand))); return component; @@ -89,7 +89,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { command.getLongDesc().forEach(this::logDirect); logDirect(""); TextComponent returnComponent = new StringTextComponent("Click to return to the help menu"); - returnComponent.func_230530_a_(returnComponent.getStyle().setClickEvent(new ClickEvent( + returnComponent.setStyle(returnComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + label ))); diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 529421f7a..5a04fc1df 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -83,7 +83,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == Action.POS2 && pos1 == null) { throw new CommandInvalidStateException("Set pos1 first before using pos2"); } - BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(mc.getRenderViewEntity().func_233580_cy_()) : ctx.playerFeet(); + BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(mc.getRenderViewEntity().getPosition()) : ctx.playerFeet(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); if (action == Action.POS1) { diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 49430040b..5654670db 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -82,17 +82,17 @@ public void execute(String label, IArgConsumer args) throws CommandException { " (%s)", settingTypeToString(setting) )); - typeComponent.func_230530_a_(typeComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + typeComponent.setStyle(typeComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); TextComponent hoverComponent = new StringTextComponent(""); - hoverComponent.func_230530_a_(hoverComponent.getStyle().setFormatting(TextFormatting.GRAY)); - hoverComponent.func_240702_b_(setting.getName()); - hoverComponent.func_240702_b_(String.format("\nType: %s", settingTypeToString(setting))); - hoverComponent.func_240702_b_(String.format("\n\nValue:\n%s", settingValueToString(setting))); + hoverComponent.setStyle(hoverComponent.getStyle().setFormatting(TextFormatting.GRAY)); + hoverComponent.appendString(setting.getName()); + hoverComponent.appendString(String.format("\nType: %s", settingTypeToString(setting))); + hoverComponent.appendString(String.format("\n\nValue:\n%s", settingValueToString(setting))); String commandSuggestion = Baritone.settings().prefix.value + String.format("set %s ", setting.getName()); TextComponent component = new StringTextComponent(setting.getName()); - component.func_230530_a_(component.getStyle().setFormatting(TextFormatting.GRAY)); - component.func_230529_a_(typeComponent); - component.func_230530_a_(component.getStyle() + component.setStyle(component.getStyle().setFormatting(TextFormatting.GRAY)); + component.append(typeComponent); + component.setStyle(component.getStyle() .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) .setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, commandSuggestion))); return component; @@ -164,7 +164,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { )); } TextComponent oldValueComponent = new StringTextComponent(String.format("Old value: %s", oldValue)); - oldValueComponent.func_230530_a_(oldValueComponent.getStyle() + oldValueComponent.setStyle(oldValueComponent.getStyle() .setFormatting(TextFormatting.GRAY) .setHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index df91d805f..c264088a9 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -61,16 +61,16 @@ public void execute(String label, IArgConsumer args) throws CommandException { BiFunction toComponent = (waypoint, _action) -> { TextComponent component = new StringTextComponent(""); TextComponent tagComponent = new StringTextComponent(waypoint.getTag().name() + " "); - tagComponent.func_230530_a_(tagComponent.getStyle().setFormatting(TextFormatting.GRAY)); + tagComponent.setStyle(tagComponent.getStyle().setFormatting(TextFormatting.GRAY)); String name = waypoint.getName(); TextComponent nameComponent = new StringTextComponent(!name.isEmpty() ? name : ""); - nameComponent.func_230530_a_(nameComponent.getStyle().setFormatting(!name.isEmpty() ? TextFormatting.GRAY : TextFormatting.DARK_GRAY)); + nameComponent.setStyle(nameComponent.getStyle().setFormatting(!name.isEmpty() ? TextFormatting.GRAY : TextFormatting.DARK_GRAY)); TextComponent timestamp = new StringTextComponent(" @ " + new Date(waypoint.getCreationTimestamp())); - timestamp.func_230530_a_(timestamp.getStyle().setFormatting(TextFormatting.DARK_GRAY)); - component.func_230529_a_(tagComponent); - component.func_230529_a_(nameComponent); - component.func_230529_a_(timestamp); - component.func_230530_a_(component.getStyle() + timestamp.setStyle(timestamp.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + component.append(tagComponent); + component.append(nameComponent); + component.append(timestamp); + component.setStyle(component.getStyle() .setHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, new StringTextComponent("Click to select") @@ -138,8 +138,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { IWaypoint waypoint = new Waypoint(name, tag, pos); ForWaypoints.waypoints(this.baritone).addWaypoint(waypoint); TextComponent component = new StringTextComponent("Waypoint added: "); - component.func_230530_a_(component.getStyle().setFormatting(TextFormatting.GRAY)); - component.func_230529_a_(toComponent.apply(waypoint, Action.INFO)); + component.setStyle(component.getStyle().setFormatting(TextFormatting.GRAY)); + component.append(toComponent.apply(waypoint, Action.INFO)); logDirect(component); } else if (action == Action.CLEAR) { args.requireMax(1); @@ -196,7 +196,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect(transform.apply(waypoint)); logDirect(String.format("Position: %s", waypoint.getLocation())); TextComponent deleteComponent = new StringTextComponent("Click to delete this waypoint"); - deleteComponent.func_230530_a_(deleteComponent.getStyle().setClickEvent(new ClickEvent( + deleteComponent.setStyle(deleteComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s delete %s @ %d", @@ -207,7 +207,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { ) ))); TextComponent goalComponent = new StringTextComponent("Click to set goal to this waypoint"); - goalComponent.func_230530_a_(goalComponent.getStyle().setClickEvent(new ClickEvent( + goalComponent.setStyle(goalComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s goal %s @ %d", @@ -218,7 +218,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { ) ))); TextComponent backComponent = new StringTextComponent("Click to return to the waypoints list"); - backComponent.func_230530_a_(backComponent.getStyle().setClickEvent(new ClickEvent( + backComponent.setStyle(backComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s list", diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 744707a50..260e403af 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -86,7 +86,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); this.toolSet = new ToolSet(player); this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); - this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && PlayerInventory.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && world.func_234922_V_() != DimensionType.field_236000_d_; + this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && PlayerInventory.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && world.func_234922_V_() != DimensionType.THE_NETHER; this.canSprint = Baritone.settings().allowSprint.value && player.getFoodStats().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; this.allowBreak = Baritone.settings().allowBreak.value; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index a6489384f..da36ac5f8 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -97,11 +97,11 @@ public MovementState updateState(MovementState state) { Block destBlock = destState.getBlock(); boolean isWater = destState.getFluidState().getFluid() instanceof WaterFluid; if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { - if (!PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().func_234922_V_() == DimensionType.field_236000_d_) { + if (!PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().func_234922_V_() == DimensionType.THE_NETHER) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (ctx.player().getPositionVec().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().func_233570_aj_()) { + if (ctx.player().getPositionVec().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().isOnGround()) { ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER); targetRotation = new Rotation(toDest.getYaw(), 90.0F); @@ -136,7 +136,7 @@ public MovementState updateState(MovementState state) { } Vector3d destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) if (Math.abs(ctx.player().getPositionVec().x + ctx.player().getMotion().x - destCenter.x) > 0.1 || Math.abs(ctx.player().getPositionVec().z + ctx.player().getMotion().z - destCenter.z) > 0.1) { - if (!ctx.player().func_233570_aj_() && Math.abs(ctx.player().getMotion().y) > 0.4) { + if (!ctx.player().isOnGround() && Math.abs(ctx.player().getMotion().y) > 0.4) { state.setInput(Input.SNEAK, true); } state.setInput(Input.MOVE_FORWARD, true); @@ -148,7 +148,7 @@ public MovementState updateState(MovementState state) { double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().getPositionVec().x)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().getPositionVec().z)); if (dist < 0.6) { state.setInput(Input.MOVE_FORWARD, true); - } else if (!ctx.player().func_233570_aj_()) { + } else if (!ctx.player().isOnGround()) { state.setInput(Input.SNEAK, false); } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 9a538bd47..a2afb1996 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -251,7 +251,7 @@ public MovementState updateState(MovementState state) { } } else if (!ctx.playerFeet().equals(src)) { if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().getPositionVec().y - src.y > 0.0001) { - if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().func_233570_aj_() && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true, false) == PlaceResult.READY_TO_PLACE) { + if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().isOnGround() && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true, false) == PlaceResult.READY_TO_PLACE) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory state.setInput(Input.CLICK_RIGHT, true); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 62274e2d7..73649a445 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -245,7 +245,7 @@ public MovementState updateState(MovementState state) { } Block low = BlockStateInterface.get(ctx, src).getBlock(); Block high = BlockStateInterface.get(ctx, src.up()).getBlock(); - if (ctx.player().getPositionVec().y > src.y + 0.1D && !ctx.player().func_233570_aj_() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { + if (ctx.player().getPositionVec().y > src.y + 0.1D && !ctx.player().isOnGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { // hitting W could cause us to climb the ladder instead of going forward // wait until we're on the ground return state; diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 7c03235c9..ac992cfa6 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -274,7 +274,7 @@ private boolean shouldPause() { if (!current.isPresent()) { return false; } - if (!ctx.player().func_233570_aj_()) { + if (!ctx.player().isOnGround()) { return false; } if (!MovementHelper.canWalkOn(ctx, ctx.playerFeet().down())) { @@ -323,7 +323,7 @@ private boolean possiblyOffPath(Tuple status, double leniency) * @return Whether or not it was possible to snap to the current player feet */ public boolean snipsnapifpossible() { - if (!ctx.player().func_233570_aj_() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { + if (!ctx.player().isOnGround() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { // if we're falling in the air, and not in water, don't splice return false; } else { diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 577244bd2..4acf38a0d 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -438,7 +438,7 @@ public int lengthZ() { } Optional> toBreak = toBreakNearPlayer(bcc); - if (toBreak.isPresent() && isSafeToCancel && ctx.player().func_233570_aj_()) { + if (toBreak.isPresent() && isSafeToCancel && ctx.player().isOnGround()) { // we'd like to pause to break this block // only change look direction if it's safe (don't want to fuck up an in progress parkour for example Rotation rot = toBreak.get().getB(); @@ -458,7 +458,7 @@ public int lengthZ() { } List desirableOnHotbar = new ArrayList<>(); Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); - if (toPlace.isPresent() && isSafeToCancel && ctx.player().func_233570_aj_() && ticks <= 0) { + if (toPlace.isPresent() && isSafeToCancel && ctx.player().isOnGround() && ticks <= 0) { Rotation rot = toPlace.get().rot; baritone.getLookBehavior().updateTarget(rot, true); ctx.player().inventory.currentItem = toPlace.get().hotbarSelection; @@ -523,7 +523,7 @@ private boolean recalc(BuilderCalculationContext bcc) { private void trim() { HashSet copy = new HashSet<>(incorrectPositions); - copy.removeIf(pos -> pos.distanceSq(ctx.player().func_233580_cy_()) > 200); + copy.removeIf(pos -> pos.distanceSq(ctx.player().getPosition()) > 200); if (!copy.isEmpty()) { incorrectPositions = copy; } diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 8f93d54b3..b8412de91 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -278,7 +278,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } } for (Entity entity : ctx.entities()) { - if (entity instanceof ItemEntity && entity.func_233570_aj_()) { + if (entity instanceof ItemEntity && entity.isOnGround()) { ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index a93ae0895..85a273e75 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -57,7 +57,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { private Goal towards(Entity following) { BlockPos pos; if (Baritone.settings().followOffsetDistance.value == 0) { - pos = following.func_233580_cy_(); + pos = following.getPosition(); } else { GoalXZ g = GoalXZ.fromDirection(following.getPositionVec(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); pos = new BlockPos(g.getX(), following.getPositionVec().y, g.getZ()); diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 864cf162a..108a0c780 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -114,7 +114,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( .min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)); baritone.getInputOverrideHandler().clearAllKeys(); - if (shaft.isPresent() && ctx.player().func_233570_aj_()) { + if (shaft.isPresent() && ctx.player().isOnGround()) { BlockPos pos = shaft.get(); BlockState state = baritone.bsi.get0(pos); if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { @@ -308,7 +308,7 @@ public List droppedItemsScan() { if (entity instanceof ItemEntity) { ItemEntity ei = (ItemEntity) entity; if (filter.has(ei.getItem())) { - ret.add(entity.func_233580_cy_()); + ret.add(entity.getPosition()); } } } @@ -399,7 +399,7 @@ private static List prune(CalculationContext ctx, List locs2 .filter(pos -> !blacklist.contains(pos)) - .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().func_233580_cy_()::distanceSq)) + .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().getPosition()::distanceSq)) .collect(Collectors.toList()); if (locs.size() > max) { diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index 37a7dc8d4..a54e85fa1 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -99,7 +99,7 @@ public void onTick(TickEvent event) { System.out.println("Beginning Baritone automatic test routine"); mc.displayGuiScreen(null); WorldSettings worldsettings = new WorldSettings("BaritoneAutoTest", GameType.SURVIVAL, false, Difficulty.NORMAL, true, new GameRules(), DatapackCodec.field_234880_a_); - mc.func_238192_a_("BaritoneAutoTest", worldsettings, IDynamicRegistries.func_239770_b_(), DimensionGeneratorSettings.field_236202_b_.func_236220_a_(false, OptionalLong.of(TEST_SEED))); + mc.func_238192_a_("BaritoneAutoTest", worldsettings, IDynamicRegistries.func_239770_b_(), DimensionGeneratorSettings.field_236202_b_.create(false, OptionalLong.of(TEST_SEED))); } IntegratedServer server = mc.getIntegratedServer(); diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index b2202c850..c6b2ea3e3 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -88,7 +88,7 @@ public boolean mouseReleased(double mouseX, double mouseY, int mouseButton) { BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().removeAllSelections(); BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().addSelection(BetterBlockPos.from(clickStart), BetterBlockPos.from(currentMouseOver)); TextComponent component = new StringTextComponent("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); - component.func_230530_a_(component.getStyle() + component.setStyle(component.getStyle() .setFormatting(TextFormatting.WHITE) .setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, diff --git a/src/main/java/baritone/utils/PlayerMovementInput.java b/src/main/java/baritone/utils/PlayerMovementInput.java index 247fda702..57745b922 100644 --- a/src/main/java/baritone/utils/PlayerMovementInput.java +++ b/src/main/java/baritone/utils/PlayerMovementInput.java @@ -29,7 +29,7 @@ public class PlayerMovementInput extends MovementInput { } @Override - public void func_225607_a_(boolean p_225607_1_) { + public void tickMovement(boolean p_225607_1_) { this.moveStrafe = 0.0F; this.moveForward = 0.0F; diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index 82a4c1796..b9848845a 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -77,7 +77,7 @@ public static List create(IPlayerContext ctx) { .filter(entity -> (!(entity instanceof SpiderEntity)) || ctx.player().getBrightness() < 0.5) .filter(entity -> !(entity instanceof ZombifiedPiglinEntity) || ((ZombifiedPiglinEntity) entity).getRevengeTarget() != null) .filter(entity -> !(entity instanceof EndermanEntity) || ((EndermanEntity) entity).isScreaming()) - .forEach(entity -> res.add(new Avoidance(entity.func_233580_cy_(), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); + .forEach(entity -> res.add(new Avoidance(entity.getPosition(), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); } return res; } From 8aaa49c80d97cc568111b97b761ca96ed129712f Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Sat, 25 Jul 2020 22:59:33 -0500 Subject: [PATCH 135/935] [Change] Edit CI to use Proguard Data --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 35220c614..38f2fa63a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,5 +9,5 @@ build: - ./gradlew build artifacts: paths: - - build/libs/*.jar - expire_in: 1 month + - dist/* + expire_in: 1 week From a09f5d41f676b8294b4c424de5599c51233ea854 Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Sat, 25 Jul 2020 23:16:08 -0500 Subject: [PATCH 136/935] [Change] Also allow Forge Building Also sets minimum Forge version to 32.0.72 so we don't need MixinBootstrap --- .gitlab-ci.yml | 1 + src/launch/resources/META-INF/mods.toml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 38f2fa63a..9efb58c97 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,6 +7,7 @@ before_script: build: script: - ./gradlew build + - ./gradlew build -Pbaritone.forge_build artifacts: paths: - dist/* diff --git a/src/launch/resources/META-INF/mods.toml b/src/launch/resources/META-INF/mods.toml index 2e788f382..a48c2b875 100644 --- a/src/launch/resources/META-INF/mods.toml +++ b/src/launch/resources/META-INF/mods.toml @@ -6,7 +6,7 @@ # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[31,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion="[32.0.72,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. # A URL to refer people to when problems occur with this mod issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional # A list of mods - how many allowed here is determined by the individual mod loader From 6cd12bf84dd3ddfc011383c9d35f35a90bac9a60 Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Sun, 26 Jul 2020 09:47:05 -0500 Subject: [PATCH 137/935] [Fix] Attempted Fix for Forge Version Error --- src/launch/resources/META-INF/mods.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/launch/resources/META-INF/mods.toml b/src/launch/resources/META-INF/mods.toml index a48c2b875..7b45a66db 100644 --- a/src/launch/resources/META-INF/mods.toml +++ b/src/launch/resources/META-INF/mods.toml @@ -6,7 +6,7 @@ # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[32.0.72,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion="[32,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. # A URL to refer people to when problems occur with this mod issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional # A list of mods - how many allowed here is determined by the individual mod loader From 17e16498b6618181036edfda7704bce759ca3e36 Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Thu, 13 Aug 2020 12:57:59 -0500 Subject: [PATCH 138/935] [Change] 1.16.1 -> 1.16.2 --- build.gradle | 13 +++++++++---- .../baritone/api/command/datatypes/BlockById.java | 2 +- .../api/command/datatypes/EntityClassById.java | 2 +- .../java/baritone/api/utils/BlockOptionalMeta.java | 5 +++-- src/api/java/baritone/api/utils/BlockUtils.java | 2 +- .../mixins/MixinCommandSuggestionHelper.java | 14 +++++++------- src/main/java/baritone/cache/CachedChunk.java | 4 ++-- src/main/java/baritone/cache/ChunkPacker.java | 6 +++--- src/main/java/baritone/cache/WorldProvider.java | 2 +- src/main/java/baritone/event/GameEventHandler.java | 2 +- .../pathing/movement/CalculationContext.java | 3 +-- .../pathing/movement/movements/MovementFall.java | 4 ++-- src/main/java/baritone/utils/BaritoneAutoTest.java | 13 +++++++------ 13 files changed, 39 insertions(+), 33 deletions(-) diff --git a/build.gradle b/build.gradle index f92ec606f..b510fa3e2 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.6.1' +version '1.6.2' buildscript { repositories { @@ -24,6 +24,9 @@ buildscript { name = 'forge' url = 'http://files.minecraftforge.net/maven' } + maven { + url = 'https://www.dogforce-games.com/maven/' + } maven { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' @@ -85,7 +88,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20200723-1.16.1' + mappings channel: 'snapshot', version: '20200813-1.16.1' if (getProject().hasProperty("baritone.forge_build")) { reobfMappings 'searge' @@ -138,7 +141,9 @@ repositories { name = 'spongepowered-repo' url = 'http://repo.spongepowered.org/maven/' } - + maven { + url = 'https://www.dogforce-games.com/maven/' + } maven { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' @@ -146,7 +151,7 @@ repositories { } dependencies { - minecraft 'com.github.ImpactDevelopment:Vanilla:1.16.1' + minecraft 'com.github.ImpactDevelopment:Vanilla:1.16.2' runtime launchCompile('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 113238df0..0c8270193 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -32,7 +32,7 @@ public enum BlockById implements IDatatypeFor { public Block get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); Block block; - if ((block = Registry.BLOCK.getValue(id).orElse(null)) == null) { + if ((block = Registry.BLOCK.func_241873_b(id).orElse(null)) == null) { throw new IllegalArgumentException("no block found by that id"); } return block; diff --git a/src/api/java/baritone/api/command/datatypes/EntityClassById.java b/src/api/java/baritone/api/command/datatypes/EntityClassById.java index 763815f0f..71870ef2e 100644 --- a/src/api/java/baritone/api/command/datatypes/EntityClassById.java +++ b/src/api/java/baritone/api/command/datatypes/EntityClassById.java @@ -32,7 +32,7 @@ public enum EntityClassById implements IDatatypeFor { public EntityType get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); EntityType entity; - if ((entity = Registry.ENTITY_TYPE.getValue(id).orElse(null)) == null) { + if ((entity = Registry.ENTITY_TYPE.func_241873_b(id).orElse(null)) == null) { throw new IllegalArgumentException("no entity found by that id"); } return entity; diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 3fa7778cf..4abd9087c 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -29,6 +29,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.Unit; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; import javax.annotation.Nonnull; import java.util.*; @@ -132,7 +133,7 @@ public BlockState getAnyBlockState() { public static LootTableManager getManager() { if (manager == null) { - ResourcePackList rpl = new ResourcePackList<>(ResourcePackInfo::new, new ServerPackFinder()); + ResourcePackList rpl = new ResourcePackList(ResourcePackInfo::new, new ServerPackFinder()); rpl.reloadPacksFromFinders(); IResourcePack thePack = rpl.getAllPacks().iterator().next().getResourcePack(); IReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(ResourcePackType.SERVER_DATA); @@ -163,7 +164,7 @@ private static synchronized List drops(Block b) { getManager().getLootTableFromLocation(lootTableLocation).generate( new LootContext.Builder(null) .withRandom(new Random()) - .withParameter(LootParameters.POSITION, BlockPos.ZERO) + .withParameter(LootParameters.field_237457_g_, Vector3d.copy(BlockPos.NULL_VECTOR)) .withParameter(LootParameters.TOOL, ItemStack.EMPTY) .withNullableParameter(LootParameters.BLOCK_ENTITY, null) .withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()) diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index d6ef34f3d..3ee95f6af 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -57,7 +57,7 @@ public static Block stringToBlockNullable(String name) { if (resourceCache.containsKey(name)) { return null; // cached as null } - block = Registry.BLOCK.getValue(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)).orElse(null); + block = Registry.BLOCK.func_241873_b(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)).orElse(null); Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); resourceCache = copy; diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index 06abfd674..00497ab6b 100644 --- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -45,11 +45,11 @@ public class MixinCommandSuggestionHelper { @Shadow @Final - private TextFieldWidget field_228095_d_; + private TextFieldWidget inputField; @Shadow @Final - private List field_228103_l_; + private List exceptionList; @Shadow private CompletableFuture suggestionsFuture; @@ -61,7 +61,7 @@ public class MixinCommandSuggestionHelper { ) private void preUpdateSuggestion(CallbackInfo ci) { // Anything that is present in the input text before the cursor position - String prefix = this.field_228095_d_.getText().substring(0, Math.min(this.field_228095_d_.getText().length(), this.field_228095_d_.getCursorPosition())); + String prefix = this.inputField.getText().substring(0, Math.min(this.inputField.getText().length(), this.inputField.getCursorPosition())); TabCompleteEvent event = new TabCompleteEvent(prefix); BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onPreTabComplete(event); @@ -75,14 +75,14 @@ private void preUpdateSuggestion(CallbackInfo ci) { ci.cancel(); // TODO: Support populating the command usage - this.field_228103_l_.clear(); + this.exceptionList.clear(); if (event.completions.length == 0) { this.suggestionsFuture = Suggestions.empty(); } else { - int offset = this.field_228095_d_.getText().endsWith(" ") - ? this.field_228095_d_.getCursorPosition() - : this.field_228095_d_.getText().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes + int offset = this.inputField.getText().endsWith(" ") + ? this.inputField.getCursorPosition() + : this.inputField.getText().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes List suggestionList = Stream.of(event.completions) .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s)) diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 0c931cefe..556a7e3c4 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -202,11 +202,11 @@ public final BlockState getBlock(int x, int y, int z, RegistryKey dimensi } if (type == PathingBlockType.SOLID) { - if (y == 127 && dimension == World.field_234919_h_) { + if (y == 127 && dimension == World.THE_NETHER) { // nether roof is always unbreakable return Blocks.BEDROCK.getDefaultState(); } - if (y < 5 && dimension == World.field_234918_g_) { + if (y < 5 && dimension == World.OVERWORLD) { // solid blocks below 5 are commonly bedrock // however, returning bedrock always would be a little yikes // discourage paths that include breaking blocks below 5 a little more heavily just so that it takes paths breaking what's known to be stone (at 5 or above) instead of what could maybe be bedrock (below 5) diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 214a9b91c..4791ad781 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -158,13 +158,13 @@ public static BlockState pathingTypeToBlock(PathingBlockType type, RegistryKey world) { // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file if (mc.isSingleplayer()) { - directory = DimensionType.func_236031_a_(world, integratedServer.func_240776_a_(FolderName.field_237253_i_).toFile()); + directory = DimensionType.func_236031_a_(world, integratedServer.func_240776_a_(FolderName.DOT).toFile()); // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world if (directory.toPath().relativize(mc.gameDir.toPath()).getNameCount() != 2) { diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 148f7c913..eff8689b5 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -115,7 +115,7 @@ public final void onWorldEvent(WorldEvent event) { if (event.getState() == EventState.POST) { cache.closeWorld(); if (event.getWorld() != null) { - cache.initWorld(event.getWorld().func_234923_W_()); + cache.initWorld(event.getWorld().getDimensionKey()); } } diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 260e403af..d47569b47 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -32,7 +32,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.DimensionType; import net.minecraft.world.World; import static baritone.api.pathing.movement.ActionCosts.COST_INF; @@ -86,7 +85,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); this.toolSet = new ToolSet(player); this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); - this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && PlayerInventory.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && world.func_234922_V_() != DimensionType.THE_NETHER; + this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && PlayerInventory.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && world.getDimensionKey() != World.THE_NETHER; this.canSprint = Baritone.settings().allowSprint.value && player.getFoodStats().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; this.allowBreak = Baritone.settings().allowBreak.value; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index da36ac5f8..9d36c4b5a 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -42,7 +42,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.math.vector.Vector3i; -import net.minecraft.world.DimensionType; +import net.minecraft.world.World; import java.util.HashSet; import java.util.Optional; @@ -97,7 +97,7 @@ public MovementState updateState(MovementState state) { Block destBlock = destState.getBlock(); boolean isWater = destState.getFluidState().getFluid() instanceof WaterFluid; if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { - if (!PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().func_234922_V_() == DimensionType.THE_NETHER) { + if (!PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().getDimensionKey() == World.THE_NETHER) { return state.setStatus(MovementStatus.UNREACHABLE); } diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index a54e85fa1..bc72a3627 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -32,11 +32,11 @@ import net.minecraft.client.settings.GraphicsFanciness; import net.minecraft.client.settings.ParticleStatus; import net.minecraft.client.tutorial.TutorialSteps; -import net.minecraft.server.IDynamicRegistries; import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.util.HTTPUtil; import net.minecraft.util.datafix.codec.DatapackCodec; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.registry.DynamicRegistries; import net.minecraft.world.*; import net.minecraft.world.gen.settings.DimensionGeneratorSettings; import net.minecraft.world.server.ServerWorld; @@ -85,7 +85,7 @@ public void onPreInit() { s.chatScale = 0.0F; s.ambientOcclusionStatus = AmbientOcclusionStatus.OFF; s.cloudOption = CloudOption.OFF; - s.field_238330_f_ = GraphicsFanciness.FAST; + s.graphicFanciness = GraphicsFanciness.FAST; s.tutorialStep = TutorialSteps.NONE; s.hideGUI = true; s.fov = 30.0F; @@ -99,18 +99,19 @@ public void onTick(TickEvent event) { System.out.println("Beginning Baritone automatic test routine"); mc.displayGuiScreen(null); WorldSettings worldsettings = new WorldSettings("BaritoneAutoTest", GameType.SURVIVAL, false, Difficulty.NORMAL, true, new GameRules(), DatapackCodec.field_234880_a_); - mc.func_238192_a_("BaritoneAutoTest", worldsettings, IDynamicRegistries.func_239770_b_(), DimensionGeneratorSettings.field_236202_b_.create(false, OptionalLong.of(TEST_SEED))); + final DynamicRegistries.Impl impl = DynamicRegistries.func_239770_b_(); + mc.func_238192_a_("BaritoneAutoTest", worldsettings, impl, DimensionGeneratorSettings.func_242752_a(impl).create(false, OptionalLong.of(TEST_SEED))); } IntegratedServer server = mc.getIntegratedServer(); // If the integrated server is launched and the world has initialized, set the spawn point // to our defined starting position - if (server != null && server.getWorld(World.field_234918_g_) != null) { + if (server != null && server.getWorld(World.OVERWORLD) != null) { server.setDifficultyForAllWorlds(Difficulty.PEACEFUL, true); if (mc.player == null) { server.execute(() -> { - server.getWorld(World.field_234918_g_).func_241124_a__(STARTING_POSITION); + server.getWorld(World.OVERWORLD).func_241124_a__(STARTING_POSITION, 0.0f); server.getCommandManager().handleCommand(server.getCommandSource(), "/difficulty peaceful"); int result = server.getCommandManager().handleCommand(server.getCommandSource(), "/gamerule spawnRadius 0"); if (result != 0) { @@ -121,7 +122,7 @@ public void onTick(TickEvent event) { // If the world has initialized, set the spawn point to our defined starting position if (world != null) { world.getGameRules().get(GameRules.SPAWN_RADIUS).func_234909_b_("0"); - world.func_241124_a__(STARTING_POSITION); + world.func_241124_a__(STARTING_POSITION, 0.0f); } } } From 750cc619fb0c1cbe89f59856ac1b27813bb1f2a1 Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Mon, 17 Aug 2020 18:50:58 -0500 Subject: [PATCH 139/935] =?UTF-8?q?=F0=9F=90=9B=20Fix=20broken=20mixin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mixins/MixinClientPlayNetHandler.java | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index 15766b98e..e29307ce7 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -120,19 +120,15 @@ private void postHandleMultiBlockChange(SMultiBlockChangePacket packetIn, Callba if (!Baritone.settings().repackOnAnyBlockChange.value) { return; } - if (packetIn.getChangedBlocks().length == 0) { - return; - } - https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.15 - { - for (SMultiBlockChangePacket.BlockUpdateData update : packetIn.getChangedBlocks()) { - if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(update.getBlockState().getBlock())) { - break https; - } + ChunkPos[] chunkPos = new ChunkPos[1]; + packetIn.func_244310_a((pos, state) -> { + if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(state.getBlock())) { + chunkPos[0] = new ChunkPos(pos); } + }); + if (chunkPos[0] == null) { return; } - ChunkPos pos = new ChunkPos(packetIn.getChangedBlocks()[0].getPos()); for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { ClientPlayerEntity player = ibaritone.getPlayerContext().player(); if (player != null && player.connection == (ClientPlayNetHandler) (Object) this) { @@ -140,8 +136,8 @@ private void postHandleMultiBlockChange(SMultiBlockChangePacket packetIn, Callba new ChunkEvent( EventState.POST, ChunkEvent.Type.POPULATE_FULL, - pos.x, - pos.z + chunkPos[0].x, + chunkPos[0].z ) ); } From 0b9bb9df2b9a07b3ddcd57c8329804574409a52d Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Mon, 17 Aug 2020 18:56:32 -0500 Subject: [PATCH 140/935] =?UTF-8?q?=F0=9F=91=8C=20Apply=20review=20suggest?= =?UTF-8?q?ions=20from=20leijurv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 12 ++++++------ src/main/java/baritone/cache/CachedWorld.java | 1 + src/main/java/baritone/process/BuilderProcess.java | 6 +++--- src/main/java/baritone/process/MineProcess.java | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index b510fa3e2..04c8fdbf4 100755 --- a/build.gradle +++ b/build.gradle @@ -24,13 +24,13 @@ buildscript { name = 'forge' url = 'http://files.minecraftforge.net/maven' } - maven { - url = 'https://www.dogforce-games.com/maven/' - } maven { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' } + maven { + url = 'https://www.dogforce-games.com/maven/' + } jcenter() } @@ -141,13 +141,13 @@ repositories { name = 'spongepowered-repo' url = 'http://repo.spongepowered.org/maven/' } - maven { - url = 'https://www.dogforce-games.com/maven/' - } maven { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' } + maven { + url = 'https://www.dogforce-games.com/maven/' + } } dependencies { diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 634a79040..20f554e6c 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -28,6 +28,7 @@ import net.minecraft.util.RegistryKey; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import java.io.IOException; diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index c4b55b5c8..b04c07ada 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -795,13 +795,13 @@ private boolean valid(BlockState current, BlockState desired, boolean itemVerify if (desired == null) { return true; } - if (current.getBlock() instanceof BlockLiquid && Baritone.settings().okIfWater.value) { + if (current.getBlock() instanceof FlowingFluidBlock && Baritone.settings().okIfWater.value) { return true; } - if (current.getBlock() instanceof BlockAir && Baritone.settings().okIfAir.value.contains(desired.getBlock())) { + if (current.getBlock() instanceof AirBlock && Baritone.settings().okIfAir.value.contains(desired.getBlock())) { return true; } - if (desired.getBlock() instanceof BlockAir && Baritone.settings().buildIgnoreBlocks.value.contains(current.getBlock())) { + if (desired.getBlock() instanceof AirBlock && Baritone.settings().buildIgnoreBlocks.value.contains(current.getBlock())) { return true; } // TODO more complicated comparison logic I guess diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 3609827b7..3991d8db4 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -89,7 +89,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnMineFail.value) { NotificationHelper.notify("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); } - knownOreLocations.stream().min(Comparator.comparingDouble(ctx.player()::distanceSq)).ifPresent(blacklist::add); + knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)).ifPresent(blacklist::add); knownOreLocations.removeIf(blacklist::contains); } else { logDirect("Unable to find any path to " + filter + ", canceling mine"); From 3b32c72d631fecea29264415045c67babc9748f4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 17 Aug 2020 17:41:13 -0700 Subject: [PATCH 141/935] remove broken furry cringe --- .../baritone/launch/mixins/MixinBitArray.java | 67 ------------------- .../launch/mixins/MixinPalettedContainer.java | 47 ------------- src/launch/resources/mixins.baritone.json | 2 - .../java/baritone/cache/WorldScanner.java | 38 +++++------ .../baritone/utils/accessor/IBitArray.java | 6 -- .../utils/accessor/IPalettedContainer.java | 27 -------- 6 files changed, 19 insertions(+), 168 deletions(-) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinBitArray.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java delete mode 100644 src/main/java/baritone/utils/accessor/IBitArray.java delete mode 100644 src/main/java/baritone/utils/accessor/IPalettedContainer.java diff --git a/src/launch/java/baritone/launch/mixins/MixinBitArray.java b/src/launch/java/baritone/launch/mixins/MixinBitArray.java deleted file mode 100644 index bece3e3bf..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinBitArray.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.utils.accessor.IBitArray; -import net.minecraft.util.BitArray; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(BitArray.class) -public abstract class MixinBitArray implements IBitArray { - - @Shadow - @Final - private long[] longArray; - - @Shadow - @Final - private int bitsPerEntry; - - @Shadow - @Final - private long maxEntryValue; - - @Shadow - @Final - private int arraySize; - - @Override - @Unique - public int[] toArray() { - int[] out = new int[arraySize]; - - for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) { - final int i = idx * bitsPerEntry; - final int j = i >> 6; - final int l = i & 63; - final int k = kl >> 6; - final long jl = longArray[j] >>> l; - - if (j == k) { - out[idx] = (int) (jl & maxEntryValue); - } else { - out[idx] = (int) ((jl | longArray[k] << (64 - l)) & maxEntryValue); - } - } - - return out; - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java b/src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java deleted file mode 100644 index c9f9e35c0..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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.utils.accessor.IBitArray; -import baritone.utils.accessor.IPalettedContainer; -import net.minecraft.block.BlockState; -import net.minecraft.util.BitArray; -import net.minecraft.util.palette.IPalette; -import net.minecraft.util.palette.PalettedContainer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(PalettedContainer.class) -public abstract class MixinPalettedContainer implements IPalettedContainer { - - @Shadow - protected BitArray storage; - - @Shadow - protected IPalette palette; - - @Override - public BlockState getAtPalette(int index) { - return palette.get(index); - } - - @Override - public int[] storageArray() { - return ((IBitArray) storage).toArray(); - } -} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 12584443f..de4f25e84 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -8,7 +8,6 @@ "maxShiftBy": 2 }, "client": [ - "MixinBitArray", "MixinChunkArray", "MixinClientChunkProvider", "MixinClientPlayerEntity", @@ -21,7 +20,6 @@ "MixinLootContext", "MixinMinecraft", "MixinNetworkManager", - "MixinPalettedContainer", "MixinPlayerController", "MixinScreen", "MixinWorldRenderer" diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 662d600e1..402e4844b 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -22,11 +22,11 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; -import baritone.utils.accessor.IPalettedContainer; import net.minecraft.block.BlockState; import net.minecraft.client.multiplayer.ClientChunkProvider; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.palette.PalettedContainer; import net.minecraft.world.chunk.AbstractChunkProvider; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkSection; @@ -155,27 +155,27 @@ private boolean scanChunkInto(int chunkX, int chunkZ, Chunk chunk, BlockOptional continue; } int yReal = y0 << 4; - IPalettedContainer bsc = (IPalettedContainer) section.getData(); - // storageArray uses an optimized algorithm that's faster than getAt - // creating this array and then using getAtPalette is faster than even getFast(int index) - int[] storage = bsc.storageArray(); - final int imax = 1 << 12; - for (int i = 0; i < imax; i++) { - BlockState state = bsc.getAtPalette(storage[i]); - if (state != null && filter.has(state)) { - int y = yReal | ((i >> 8) & 15); - if (result.size() >= max) { - if (Math.abs(y - playerY) < yLevelThreshold) { - foundWithinY = true; - } else { - if (foundWithinY) { - // have found within Y in this chunk, so don't need to consider outside Y - // TODO continue iteration to one more sorted Y coordinate block - return true; + PalettedContainer bsc = section.getData(); + for (int yy = 0; yy < 16; yy++) { + for (int z = 0; z < 16; z++) { + for (int x = 0; x < 16; x++) { + BlockState state = bsc.get(x, yy, z); + if (filter.has(state)) { + int y = yReal | yy; + if (result.size() >= max) { + if (Math.abs(y - playerY) < yLevelThreshold) { + foundWithinY = true; + } else { + if (foundWithinY) { + // have found within Y in this chunk, so don't need to consider outside Y + // TODO continue iteration to one more sorted Y coordinate block + return true; + } + } } + result.add(new BlockPos(chunkX | x, y, chunkZ | z)); } } - result.add(new BlockPos(chunkX | (i & 15), y, chunkZ | ((i >> 4) & 15))); } } } diff --git a/src/main/java/baritone/utils/accessor/IBitArray.java b/src/main/java/baritone/utils/accessor/IBitArray.java deleted file mode 100644 index baea5c1da..000000000 --- a/src/main/java/baritone/utils/accessor/IBitArray.java +++ /dev/null @@ -1,6 +0,0 @@ -package baritone.utils.accessor; - -public interface IBitArray { - - int[] toArray(); -} diff --git a/src/main/java/baritone/utils/accessor/IPalettedContainer.java b/src/main/java/baritone/utils/accessor/IPalettedContainer.java deleted file mode 100644 index 1d0490832..000000000 --- a/src/main/java/baritone/utils/accessor/IPalettedContainer.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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.accessor; - -import net.minecraft.block.BlockState; - -public interface IPalettedContainer { - - BlockState getAtPalette(int index); - - int[] storageArray(); -} From 69c4c7a3b82692ec7ac2c6d29287bf3c96509d90 Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Fri, 21 Aug 2020 19:36:15 -0500 Subject: [PATCH 142/935] Added the license field that forge is forcing --- src/launch/resources/META-INF/mods.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/launch/resources/META-INF/mods.toml b/src/launch/resources/META-INF/mods.toml index 7b45a66db..60f15841d 100644 --- a/src/launch/resources/META-INF/mods.toml +++ b/src/launch/resources/META-INF/mods.toml @@ -6,7 +6,8 @@ # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[32,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion="[33,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" # A URL to refer people to when problems occur with this mod issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional # A list of mods - how many allowed here is determined by the individual mod loader From a92675e1253cfe4751dd78e206a505bbb1b08636 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 7 Sep 2020 16:48:44 -0700 Subject: [PATCH 143/935] v1.6.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 04c8fdbf4..2b9074e69 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.6.2' +version '1.6.1' buildscript { repositories { From dcc0b82210bd7c90b6041336c12f60624ea6cd26 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 16 Dec 2020 16:42:35 -0600 Subject: [PATCH 144/935] Update to 1.16.4 --- build.gradle | 4 ++-- src/api/java/baritone/api/command/datatypes/BlockById.java | 2 +- .../baritone/api/command/datatypes/EntityClassById.java | 2 +- src/api/java/baritone/api/utils/BlockUtils.java | 2 +- src/main/java/baritone/cache/WorldProvider.java | 4 ++-- src/main/java/baritone/utils/BaritoneAutoTest.java | 6 +++--- src/main/java/baritone/utils/PathRenderer.java | 4 ++-- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/build.gradle b/build.gradle index 2b9074e69..250465eda 100755 --- a/build.gradle +++ b/build.gradle @@ -88,7 +88,7 @@ task sourceJar(type: Jar, dependsOn: classes) { } minecraft { - mappings channel: 'snapshot', version: '20200813-1.16.1' + mappings channel: 'snapshot', version: '20201028-1.16.3' if (getProject().hasProperty("baritone.forge_build")) { reobfMappings 'searge' @@ -151,7 +151,7 @@ repositories { } dependencies { - minecraft 'com.github.ImpactDevelopment:Vanilla:1.16.2' + minecraft 'com.github.ImpactDevelopment:Vanilla:1.16.4' runtime launchCompile('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 0c8270193..6293f825c 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -32,7 +32,7 @@ public enum BlockById implements IDatatypeFor { public Block get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); Block block; - if ((block = Registry.BLOCK.func_241873_b(id).orElse(null)) == null) { + if ((block = Registry.BLOCK.getOptional(id).orElse(null)) == null) { throw new IllegalArgumentException("no block found by that id"); } return block; diff --git a/src/api/java/baritone/api/command/datatypes/EntityClassById.java b/src/api/java/baritone/api/command/datatypes/EntityClassById.java index 71870ef2e..c6f264c2b 100644 --- a/src/api/java/baritone/api/command/datatypes/EntityClassById.java +++ b/src/api/java/baritone/api/command/datatypes/EntityClassById.java @@ -32,7 +32,7 @@ public enum EntityClassById implements IDatatypeFor { public EntityType get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); EntityType entity; - if ((entity = Registry.ENTITY_TYPE.func_241873_b(id).orElse(null)) == null) { + if ((entity = Registry.ENTITY_TYPE.getOptional(id).orElse(null)) == null) { throw new IllegalArgumentException("no entity found by that id"); } return entity; diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index 3ee95f6af..35f626bd6 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -57,7 +57,7 @@ public static Block stringToBlockNullable(String name) { if (resourceCache.containsKey(name)) { return null; // cached as null } - block = Registry.BLOCK.func_241873_b(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)).orElse(null); + block = Registry.BLOCK.getOptional(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)).orElse(null); Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); resourceCache = copy; diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index ac0ba2070..b4e43964d 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -64,7 +64,7 @@ public final void initWorld(RegistryKey world) { // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file if (mc.isSingleplayer()) { - directory = DimensionType.func_236031_a_(world, integratedServer.func_240776_a_(FolderName.DOT).toFile()); + directory = DimensionType.getDimensionFolder(world, integratedServer.func_240776_a_(FolderName.DOT).toFile()); // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world if (directory.toPath().relativize(mc.gameDir.toPath()).getNameCount() != 2) { @@ -90,7 +90,7 @@ public final void initWorld(RegistryKey world) { } catch (IOException ignored) {} // We will actually store the world data in a subfolder: "DIM" - Path dir = DimensionType.func_236031_a_(world, directory).toPath(); + Path dir = DimensionType.getDimensionFolder(world, directory).toPath(); if (!Files.exists(dir)) { try { Files.createDirectories(dir); diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index bc72a3627..4037a6fff 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -98,9 +98,9 @@ public void onTick(TickEvent event) { if (mc.currentScreen instanceof MainMenuScreen) { System.out.println("Beginning Baritone automatic test routine"); mc.displayGuiScreen(null); - WorldSettings worldsettings = new WorldSettings("BaritoneAutoTest", GameType.SURVIVAL, false, Difficulty.NORMAL, true, new GameRules(), DatapackCodec.field_234880_a_); + WorldSettings worldsettings = new WorldSettings("BaritoneAutoTest", GameType.SURVIVAL, false, Difficulty.NORMAL, true, new GameRules(), DatapackCodec.VANILLA_CODEC); final DynamicRegistries.Impl impl = DynamicRegistries.func_239770_b_(); - mc.func_238192_a_("BaritoneAutoTest", worldsettings, impl, DimensionGeneratorSettings.func_242752_a(impl).create(false, OptionalLong.of(TEST_SEED))); + mc.createWorld("BaritoneAutoTest", worldsettings, impl, DimensionGeneratorSettings.func_242752_a(impl).create(false, OptionalLong.of(TEST_SEED))); } IntegratedServer server = mc.getIntegratedServer(); @@ -121,7 +121,7 @@ public void onTick(TickEvent event) { for (final ServerWorld world : mc.getIntegratedServer().getWorlds()) { // If the world has initialized, set the spawn point to our defined starting position if (world != null) { - world.getGameRules().get(GameRules.SPAWN_RADIUS).func_234909_b_("0"); + world.getGameRules().get(GameRules.SPAWN_RADIUS).parseIntValue("0"); world.func_241124_a__(STARTING_POSITION, 0.0f); } } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 405199612..dc4b7a368 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -78,8 +78,8 @@ public static void render(RenderEvent event, PathingBehavior behavior) { ((GuiClick) Helper.mc.currentScreen).onRender(event.getModelViewStack(), event.getProjectionMatrix()); } - DimensionType thisPlayerDimension = behavior.baritone.getPlayerContext().world().func_230315_m_(); - DimensionType currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().func_230315_m_(); + DimensionType thisPlayerDimension = behavior.baritone.getPlayerContext().world().getDimensionType(); + DimensionType currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().getDimensionType(); if (thisPlayerDimension != currentRenderViewDimension) { // this is a path for a bot in a different dimension, don't render it From dbb0f599fc76a1c91c06eb6d406708188d224fc4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 16 Dec 2020 13:32:11 -1000 Subject: [PATCH 145/935] v1.6.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 250465eda..272b7729b 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.6.1' +version '1.6.2' buildscript { repositories { From d6cbb58e7e2279b93796bc801a0eaf7517a448b5 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 19 Jan 2021 23:03:03 -0700 Subject: [PATCH 146/935] fabric with volder-mappings, soo close to working --- build.gradle | 202 +- src/launch/resources/fabric.mod.json | 34 + volderyarn/mappings.tiny | 53741 +++++++++++++++++++++++++ volderyarn/volderyarn.jar | Bin 0 -> 578042 bytes 4 files changed, 53904 insertions(+), 73 deletions(-) create mode 100644 src/launch/resources/fabric.mod.json create mode 100644 volderyarn/mappings.tiny create mode 100644 volderyarn/volderyarn.jar diff --git a/build.gradle b/build.gradle index b9c6d9137..d665ec5ee 100755 --- a/build.gradle +++ b/build.gradle @@ -28,12 +28,20 @@ buildscript { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' } + maven { + url = 'https://maven.fabricmc.net/' + } + maven { + url = 'https://libraries.minecraft.net/' + } + mavenCentral() jcenter() } dependencies { classpath group: 'com.github.ImpactDevelopment', name: 'ForgeGradle', version: '3.0.115' classpath group: 'com.github.ImpactDevelopment', name: 'MixinGradle', version: '0.6.2' + classpath group: 'net.fabricmc', name: 'fabric-loom', version: '0.5-SNAPSHOT' } } @@ -44,9 +52,17 @@ import net.minecraftforge.gradle.userdev.tasks.GenerateSRG import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace import org.apache.tools.ant.taskdefs.condition.Os +def isMCP = false + + apply plugin: 'java' -apply plugin: 'net.minecraftforge.gradle' -apply plugin: 'org.spongepowered.mixin' +if (isMCP) { + apply plugin: 'net.minecraftforge.gradle' + apply plugin: 'org.spongepowered.mixin' +} else { + apply plugin: 'fabric-loom' +} + sourceCompatibility = targetCompatibility = '1.8' compileJava { @@ -54,6 +70,7 @@ compileJava { options.encoding = "UTF-8" // allow emoji in comments :^) } + sourceSets { api { compileClasspath += main.compileClasspath @@ -83,52 +100,58 @@ task sourceJar(type: Jar, dependsOn: classes) { classifier = 'sources' from sourceSets.api.allSource } +if (isMCP) { + minecraft { + mappings channel: 'snapshot', version: '20201028-1.16.3' + + if (getProject().hasProperty("baritone.forge_build")) { + reobfMappings 'searge' + } else { + reobfMappings 'notch' + } -minecraft { - mappings channel: 'snapshot', version: '20200515-1.15.1' - - if (getProject().hasProperty("baritone.forge_build")) { - reobfMappings 'searge' - } else { - reobfMappings 'notch' - } - - runs { - client { - workingDirectory project.file('run') - source sourceSets.launch + runs { + client { + workingDirectory project.file('run') + source sourceSets.launch - main 'baritone.launch.LaunchTesting' + main 'baritone.launch.LaunchTesting' - environment 'assetIndex', '{asset_index}' - environment 'assetDirectory', downloadAssets.output - environment 'nativesDirectory', extractNatives.output + environment 'assetIndex', '{asset_index}' + environment 'assetDirectory', downloadAssets.output + environment 'nativesDirectory', extractNatives.output - environment 'tweakClass', 'baritone.launch.BaritoneTweaker' + environment 'tweakClass', 'baritone.launch.BaritoneTweaker' - if (Os.isFamily(Os.FAMILY_MAC)) { - jvmArgs "-XstartOnFirstThread" + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XstartOnFirstThread" + } } - } - autoTest { - workingDirectory project.file('autotest') - source sourceSets.launch + autoTest { + workingDirectory project.file('autotest') + source sourceSets.launch - main 'baritone.launch.LaunchTesting' + main 'baritone.launch.LaunchTesting' - environment 'assetIndex', '{asset_index}' - environment 'assetDirectory', downloadAssets.output - environment 'nativesDirectory', extractNatives.output + environment 'assetIndex', '{asset_index}' + environment 'assetDirectory', downloadAssets.output + environment 'nativesDirectory', extractNatives.output - environment 'tweakClass', 'baritone.launch.BaritoneTweaker' - environment 'BARITONE_AUTO_TEST', 'true' + environment 'tweakClass', 'baritone.launch.BaritoneTweaker' + environment 'BARITONE_AUTO_TEST', 'true' - if (Os.isFamily(Os.FAMILY_MAC)) { - jvmArgs "-XstartOnFirstThread" + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XstartOnFirstThread" + } } } } + + mixin { + defaultObfuscationEnv searge + add sourceSets.launch, 'mixins.baritone.refmap.json' + } } repositories { @@ -146,30 +169,37 @@ repositories { } dependencies { + if (isMCP) { minecraft 'com.github.ImpactDevelopment:Vanilla:1.15.2' - runtime launchCompile('net.minecraft:launchwrapper:1.12') { - exclude module: 'lwjgl' - } - runtime launchCompile('org.ow2.asm:asm-debug-all:5.2') - runtime launchCompile('com.github.ImpactDevelopment:SimpleTweaker:1.2') - runtime launchCompile('org.spongepowered:mixin:0.8.+') { - // Mixin includes a lot of dependencies that are too up-to-date - exclude module: 'launchwrapper' - exclude module: 'guava' - exclude module: 'gson' - exclude module: 'commons-io' - exclude module: 'log4j-core' + runtime launchCompile('net.minecraft:launchwrapper:1.12') { + exclude module: 'lwjgl' + } + runtime launchCompile('org.ow2.asm:asm-debug-all:5.2') + runtime launchCompile('com.github.ImpactDevelopment:SimpleTweaker:1.2') + runtime launchCompile('org.spongepowered:mixin:0.8.+') { + // Mixin includes a lot of dependencies that are too up-to-date + exclude module: 'launchwrapper' + exclude module: 'guava' + exclude module: 'gson' + exclude module: 'commons-io' + exclude module: 'log4j-core' + } + } else { + minecraft "com.mojang:minecraft:1.16.4" + mappings fileTree(dir: "volderyarn", include: "**.jar") + modImplementation "net.fabricmc:fabric-loader:0.9.1+build.205" + + // this makes it compile with the forge tweak stuff + implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' + implementation 'net.minecraft:launchwrapper:1.12' + + implementation 'com.google.code.findbugs:jsr305:3.0.2' } testImplementation 'junit:junit:4.12' } -mixin { - defaultObfuscationEnv searge - add sourceSets.launch, 'mixins.baritone.refmap.json' -} - javadoc { options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error options.linkSource true @@ -178,11 +208,34 @@ javadoc { classpath += sourceSets.api.compileClasspath } +if (!isMCP) { + + tasks.withType(JavaCompile).configureEach { + // ensure that the encoding is set to UTF-8, no matter what the system default is + // this fixes some edge cases with special characters not displaying correctly + // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html + // If Javadoc is generated, this must be specified in that task too. + it.options.encoding = "UTF-8" + + // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too + // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. + // We'll use that if it's available, but otherwise we'll use the older option. + def targetVersion = 8 + if (JavaVersion.current().isJava9Compatible()) { + it.options.release = targetVersion + } + } +} + jar { from sourceSets.launch.output, sourceSets.api.output preserveFileTimestamps = false reproducibleFileOrder = true + filesMatching("fabric.mod.json") { + expand "version": version + } + manifest { attributes( 'MixinConfigs': 'mixins.baritone.json', @@ -204,33 +257,36 @@ File getClientJar() { .get() } -task copyMcJar(type: Copy) { - def mcJar = {getClientJar()} +if (isMCP) { + task copyMcJar(type: Copy) { + def mcJar = {getClientJar()} - from mcJar - into 'build/createMcSrgJar/' - rename {'client-srg.jar'} -} + from mcJar + into 'build/createMcSrgJar/' + rename {'client-srg.jar'} + } -task createSrgMc(type: RenameJarInPlace) { - setInput(new File(copyMcJar.getOutputs().getFiles().getSingleFile(), "client-srg.jar")) - setClasspath(files({getClientJar()})) + task createSrgMc(type: RenameJarInPlace) { + setInput(new File(copyMcJar.getOutputs().getFiles().getSingleFile(), "client-srg.jar")) + setClasspath(files({getClientJar()})) - // fork - setMappingType(net.minecraftforge.gradle.common.util.MappingFile.Mapping.SEARGE) - setJarTask('trans alaska pipeline') -} -project.afterEvaluate { - createSrgMc.dependsOn(extractSrg, copyMcJar) - createSrgMc.setMappings(extractSrg.getOutput()) + // fork + setMappingType(net.minecraftforge.gradle.common.util.MappingFile.Mapping.SEARGE) + setJarTask('trans alaska pipeline') } + project.afterEvaluate { + createSrgMc.dependsOn(extractSrg, copyMcJar) + createSrgMc.setMappings(extractSrg.getOutput()) + } -task proguard(type: ProguardTask, dependsOn: createSrgMc) { // TODO: dont need to create srg mc if doing notch build - url 'https://downloads.sourceforge.net/project/proguard/proguard/6.0/proguard6.0.3.zip' - extract 'proguard6.0.3/lib/proguard.jar' -} -task createDist(type: CreateDistTask, dependsOn: proguard) + task proguard(type: ProguardTask, dependsOn: createSrgMc) { // TODO: dont need to create srg mc if doing notch build + url 'https://downloads.sourceforge.net/project/proguard/proguard/6.0/proguard6.0.3.zip' + extract 'proguard6.0.3/lib/proguard.jar' + } + + task createDist(type: CreateDistTask, dependsOn: proguard) -build.finalizedBy(createDist) + build.finalizedBy(createDist) +} diff --git a/src/launch/resources/fabric.mod.json b/src/launch/resources/fabric.mod.json new file mode 100644 index 000000000..38be089eb --- /dev/null +++ b/src/launch/resources/fabric.mod.json @@ -0,0 +1,34 @@ + +{ + "schemaVersion": 1, + "id": "baritone", + "version": "${version}", + + "name": "Baritone", + "description": "Google Maps for Blockgame", + "authors": [ + "people" + ], + "contact": { + "homepage": "https://github.com/cabaletta/baritone", + "sources": "https://github.com/cabaletta/baritone" + }, + + "license": "LGPL-3.0", + "icon": "assets/modid/icon.png", + + "environment": "*", + "entrypoints": { + }, + "mixins": [ + "mixins.baritone.json" + ], + + "depends": { + "fabricloader": ">=0.7.4", + "minecraft": "1.16.x" + }, + "suggests": { + "another-mod": "*" + } +} \ No newline at end of file diff --git a/volderyarn/mappings.tiny b/volderyarn/mappings.tiny new file mode 100644 index 000000000..974d1bebb --- /dev/null +++ b/volderyarn/mappings.tiny @@ -0,0 +1,53741 @@ +tiny 2 0 intermediary named +c net/minecraft/class_2624 net/minecraft/tileentity/LockableTileEntity + m ()Lnet/minecraft/class_2561; method_17823 getDefaultName + m (Lnet/minecraft/class_1657;)Z method_17489 canOpen + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1273;Lnet/minecraft/class_2561;)Z method_17487 canUnlock + m (Lnet/minecraft/class_2561;)V method_17488 setCustomName + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1703; method_5465 createMenu + f Lnet/minecraft/class_2561; field_17376 customName + f Lnet/minecraft/class_1273; field_12045 code +c net/minecraft/class_2587 net/minecraft/tileentity/BedTileEntity + m (Lnet/minecraft/class_1767;)V method_11019 setColor + m ()Lnet/minecraft/class_1767; method_11018 getColor + f Lnet/minecraft/class_1767; field_11869 color +c net/minecraft/class_2580 net/minecraft/tileentity/BeaconTileEntity + m (Lnet/minecraft/class_2561;)V method_10936 setCustomName + m ()Ljava/util/List; method_10937 getBeamSegments + m (Lnet/minecraft/class_2580;)I method_17490 func_213929_a + m (Lnet/minecraft/class_3414;)V method_10938 playSound + m (Lnet/minecraft/class_2580;I)I method_17491 func_213930_a + m ()V method_10940 addEffectsToPlayers + m (Lnet/minecraft/class_2580;Lnet/minecraft/class_1291;)Lnet/minecraft/class_1291; method_17492 func_213931_a + m ()I method_10939 getLevels + m (Lnet/minecraft/class_2580;)Lnet/minecraft/class_1291; method_17494 func_213933_b + m (Lnet/minecraft/class_2580;Lnet/minecraft/class_1291;)Lnet/minecraft/class_1291; method_17495 func_213928_b + m (Lnet/minecraft/class_2580;)Ljava/util/List; method_20294 func_213925_d + m (I)Lnet/minecraft/class_1291; method_10934 isBeaconEffect + m (Lnet/minecraft/class_2580;)Lnet/minecraft/class_1291; method_17496 func_213926_c + m (I)Lnet/minecraft/class_1291; method_17493 func_213932_a + m (III)V method_20293 checkBeaconLevel + f Ljava/util/List; field_19178 beamColorSegments + f Lnet/minecraft/class_3913; field_17378 beaconData + f Lnet/minecraft/class_1273; field_17377 lockCode + f Lnet/minecraft/class_1291; field_11799 secondaryEffect + f Lnet/minecraft/class_1291; field_11795 primaryEffect + f Ljava/util/List; field_19177 beamSegments + f I field_19179 beaconSize + f Ljava/util/Set; field_11798 VALID_EFFECTS + f Lnet/minecraft/class_2561; field_11793 customName + f [[Lnet/minecraft/class_1291; field_11801 EFFECTS_LIST + f I field_11803 levels +c net/minecraft/class_2580$class_2581 net/minecraft/tileentity/BeaconTileEntity$BeamSegment + m (Lnet/minecraft/class_2580$class_2581;)[F method_20295 func_222482_a + m ()[F method_10944 getColors + m ()I method_10943 getHeight + m ()V method_10942 incrementHeight + f [F field_11805 colors + f I field_11804 height +c net/minecraft/class_2580$1 net/minecraft/tileentity/BeaconTileEntity$1 + f Lnet/minecraft/class_2580; field_17379 field_221481_a +c net/minecraft/class_3721 net/minecraft/tileentity/BellTileEntity + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)Z method_20217 func_222829_a + m ()V method_20522 resonate + m (Lnet/minecraft/class_2350;)V method_17031 ring + m (Lnet/minecraft/class_1309;)Z method_20518 isNearbyRaider + m (Lnet/minecraft/class_1937;)V method_20218 addRaiderParticles + m (Lnet/minecraft/class_1309;)V method_20520 glow + m (Lnet/minecraft/class_2338;ILorg/apache/commons/lang3/mutable/MutableInt;Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;)V method_20519 func_235655_a_ + m ()V method_20219 func_213941_c + m ()Z method_20523 hasRaidersNearby + m (Lnet/minecraft/class_1937;)V method_20521 glowRaiders + f I field_17095 ringingTicks + f Ljava/util/List; field_19156 entitiesAtRing + f Z field_19157 shouldReveal + f Lnet/minecraft/class_2350; field_17097 ringDirection + f J field_19155 ringTime + f Z field_17096 isRinging + f I field_19158 revealWarmup +c net/minecraft/class_4482 net/minecraft/tileentity/BeehiveTileEntity + m ()I method_23903 getBeeCount + m ()Z method_23280 isNearFire + m ()Z method_22400 hasNoBees + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4482$class_4483;Ljava/util/List;Lnet/minecraft/class_4482$class_4484;)Z method_21855 func_235651_a_ + m (ILnet/minecraft/class_4466;)V method_29562 func_235650_a_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4482$class_4484;)Ljava/util/List; method_21852 tryReleaseBee + m (Lnet/minecraft/class_1297;ZI)V method_21849 tryEnterHive + m (Lnet/minecraft/class_2680;Ljava/util/List;Lnet/minecraft/class_4482$class_4484;Lnet/minecraft/class_4482$class_4483;)Z method_21854 func_226966_a_ + m ()Z method_21856 isFullOfBees + m ()Lnet/minecraft/class_2499; method_21859 getBees + m ()Z method_23904 isSmoked + m (Lnet/minecraft/class_2680;)I method_23902 getHoneyLevel + m ()V method_23757 sendDebugData + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2680;Lnet/minecraft/class_4482$class_4484;)V method_21850 angerBees + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_23901 func_226960_a_ + m (Lnet/minecraft/class_1297;Z)V method_21848 tryEnterHive + m ()V method_21858 tickBees + m ()Z method_21857 hasFlowerPos + f Ljava/util/List; field_20423 bees + f Lnet/minecraft/class_2338; field_20424 flowerPos +c net/minecraft/class_4482$class_4483 net/minecraft/tileentity/BeehiveTileEntity$Bee + m (Lnet/minecraft/class_4482$class_4483;)I method_21860 func_226981_b_ + m (Lnet/minecraft/class_4482$class_4483;)I method_21861 func_235653_c_ + m (Lnet/minecraft/class_4482$class_4483;)Lnet/minecraft/class_2487; method_21862 func_235652_a_ + m (Lnet/minecraft/class_4482$class_4483;)I method_21863 func_235654_d_ + f I field_20427 minOccupationTicks + f I field_20426 ticksInHive + f Lnet/minecraft/class_2487; field_20425 entityData +c net/minecraft/class_4482$class_4484 net/minecraft/tileentity/BeehiveTileEntity$State + m ()[Lnet/minecraft/class_4482$class_4484; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4482$class_4484; valueOf valueOf + f [Lnet/minecraft/class_4482$class_4484; field_20430 $VALUES + f Lnet/minecraft/class_4482$class_4484; field_20428 HONEY_DELIVERED + f Lnet/minecraft/class_4482$class_4484; field_21052 EMERGENCY + f Lnet/minecraft/class_4482$class_4484; field_20429 BEE_RELEASED +c net/minecraft/class_4482$1 net/minecraft/tileentity/BeehiveTileEntity$1 +c net/minecraft/class_2586 net/minecraft/tileentity/TileEntity + m ()V method_10996 validate + m ()Z method_11015 isRemoved + m (Ljava/lang/String;Lnet/minecraft/class_2591;)Lnet/minecraft/class_2586; method_17899 func_213134_a + m ()V method_5431 markDirty + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2487;Ljava/lang/String;Lnet/minecraft/class_2586;)Lnet/minecraft/class_2586; method_17897 func_235656_a_ + m ()V method_11000 updateContainingBlockInfo + m (Lnet/minecraft/class_129;)V method_11003 addInfoToCrashReport + m ()V method_11012 remove + m ()Z method_11011 onlyOpsCanSetNbt + m (Lnet/minecraft/class_2338;)V method_10998 setPos + m ()Z method_11002 hasWorld + m (Lnet/minecraft/class_2470;)V method_11013 rotate + m ()Ljava/lang/String; method_10995 func_213135_f + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2487;)V method_11014 read + m (II)Z method_11004 receiveClientEvent + m ()Lnet/minecraft/class_2338; method_11016 getPos + m (Lnet/minecraft/class_2415;)V method_11001 mirror + m ()Lnet/minecraft/class_2622; method_16886 getUpdatePacket + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_10999 writeInternal + m ()Lnet/minecraft/class_2680; method_11010 getBlockState + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_11007 write + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_11009 setWorldAndPos + m ()Lnet/minecraft/class_2487; method_16887 getUpdateTag + m ()V method_20525 warnInvalidBlock + m ()Lnet/minecraft/class_2591; method_11017 getType + m ()D method_11006 getMaxRenderDistanceSquared + m ()Lnet/minecraft/class_1937; method_10997 getWorld + m ()Ljava/lang/Object; method_20524 func_222815_f + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2586; method_11005 readTileEntity + m (Ljava/lang/String;)Lnet/minecraft/class_2586; method_17898 func_213133_a + f Lorg/apache/logging/log4j/Logger; field_11868 LOGGER + f Lnet/minecraft/class_2591; field_11864 type + f Lnet/minecraft/class_2338; field_11867 pos + f Lnet/minecraft/class_2680; field_11866 cachedBlockState + f Lnet/minecraft/class_1937; field_11863 world + f Z field_11865 removed + f Z field_19314 warnedInvalidBlock +c net/minecraft/class_3720 net/minecraft/tileentity/BlastFurnaceTileEntity +c net/minecraft/class_2589 net/minecraft/tileentity/BrewingStandTileEntity + m (Lnet/minecraft/class_2589;I)I method_17499 func_213952_a + m (Lnet/minecraft/class_2589;I)I method_17501 func_213953_b + m (Lnet/minecraft/class_2589;)I method_17500 func_213951_b + m (Lnet/minecraft/class_2589;)I method_17498 func_213950_a + m ()Z method_11027 canBrew + m ()[Z method_11028 createFilledSlotsArray + m ()V method_11029 brewPotions + f I field_11878 brewTime + f Lnet/minecraft/class_1792; field_11881 ingredientID + f Lnet/minecraft/class_2371; field_11882 brewingItemStacks + f I field_11885 fuel + f [I field_11879 SLOTS_FOR_DOWN + f [I field_11886 SLOTS_FOR_UP + f [Z field_11883 filledSlots + f Lnet/minecraft/class_3913; field_17381 field_213954_a + f [I field_11880 OUTPUT_SLOTS +c net/minecraft/class_2589$1 net/minecraft/tileentity/BrewingStandTileEntity$1 + f Lnet/minecraft/class_2589; field_17382 field_221482_a +c net/minecraft/class_2591 net/minecraft/tileentity/TileEntityType + m ()Lnet/minecraft/class_2586; method_11032 create + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2586; method_24182 getIfExists + m (Lnet/minecraft/class_2591;)Lnet/minecraft/class_2960; method_11033 getId + m (Lnet/minecraft/class_2248;)Z method_20526 isValidBlock + m (Ljava/lang/String;Lnet/minecraft/class_2591$class_2592;)Lnet/minecraft/class_2591; method_11030 register + f Lcom/mojang/datafixers/types/Type; field_11909 datafixerType + f Lnet/minecraft/class_2591; field_16549 JIGSAW + f Lnet/minecraft/class_2591; field_11900 DAYLIGHT_DETECTOR + f Lnet/minecraft/class_2591; field_17380 CAMPFIRE + f Lnet/minecraft/class_2591; field_11888 HOPPER + f Lnet/minecraft/class_2591; field_20431 BEEHIVE + f Lnet/minecraft/class_2591; field_11908 COMPARATOR + f Lorg/apache/logging/log4j/Logger; field_11893 LOGGER + f Lnet/minecraft/class_2591; field_11905 BANNER + f Lnet/minecraft/class_2591; field_11895 STRUCTURE_BLOCK + f Lnet/minecraft/class_2591; field_11897 PISTON + f Lnet/minecraft/class_2591; field_11894 BREWING_STAND + f Lnet/minecraft/class_2591; field_16414 SMOKER + f Lnet/minecraft/class_2591; field_11912 ENCHANTING_TABLE + f Lnet/minecraft/class_2591; field_16415 BLAST_FURNACE + f Lnet/minecraft/class_2591; field_11898 END_PORTAL + f Lnet/minecraft/class_2591; field_16412 LECTERN + f Lnet/minecraft/class_2591; field_11890 BEACON + f Lnet/minecraft/class_2591; field_16413 BELL + f Lnet/minecraft/class_2591; field_11913 SKULL + f Lnet/minecraft/class_2591; field_16411 BARREL + f Lnet/minecraft/class_2591; field_11907 JUKEBOX + f Lnet/minecraft/class_2591; field_11887 DISPENSER + f Ljava/util/function/Supplier; field_11892 factory + f Lnet/minecraft/class_2591; field_11899 DROPPER + f Lnet/minecraft/class_2591; field_11911 SIGN + f Lnet/minecraft/class_2591; field_11889 MOB_SPAWNER + f Lnet/minecraft/class_2591; field_11906 END_GATEWAY + f Lnet/minecraft/class_2591; field_11904 COMMAND_BLOCK + f Lnet/minecraft/class_2591; field_11903 FURNACE + f Lnet/minecraft/class_2591; field_11896 SHULKER_BOX + f Lnet/minecraft/class_2591; field_11914 CHEST + f Lnet/minecraft/class_2591; field_11910 BED + f Lnet/minecraft/class_2591; field_11891 TRAPPED_CHEST + f Ljava/util/Set; field_19315 validBlocks + f Lnet/minecraft/class_2591; field_11902 CONDUIT + f Lnet/minecraft/class_2591; field_11901 ENDER_CHEST +c net/minecraft/class_2591$class_2592 net/minecraft/tileentity/TileEntityType$Builder + m (Ljava/util/function/Supplier;[Lnet/minecraft/class_2248;)Lnet/minecraft/class_2591$class_2592; method_20528 create + m (Lcom/mojang/datafixers/types/Type;)Lnet/minecraft/class_2591; method_11034 build + m (Lnet/minecraft/class_2591$class_2592;)Ljava/util/Set; method_20527 func_223043_a + f Ljava/util/function/Supplier; field_11915 factory + f Ljava/util/Set; field_19316 blocks +c net/minecraft/class_2595 net/minecraft/tileentity/ChestTileEntity + m (Lnet/minecraft/class_2595;Lnet/minecraft/class_2595;)V method_11047 swapContents + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2624;IIIII)I method_20364 calculatePlayersUsingSync + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2624;III)I method_17765 calculatePlayersUsing + m ()V method_11049 onOpenOrClose + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_11048 getPlayersUsing + m (Lnet/minecraft/class_3414;)V method_11050 playSound + f Lnet/minecraft/class_2371; field_11927 chestContents + f I field_11928 numPlayersUsing + f F field_11929 lidAngle + f I field_11930 ticksSinceSync + f F field_11926 prevLidAngle +c net/minecraft/class_3924 net/minecraft/tileentity/CampfireTileEntity + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_17507 writeItems + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_3920;)Lnet/minecraft/class_1799; method_17504 func_213979_a + m ()V method_17509 addParticles + m (Lnet/minecraft/class_1799;I)Z method_17503 addItem + m ()V method_17510 inventoryChanged + m (Lnet/minecraft/class_1799;)Ljava/util/Optional; method_17502 findMatchingRecipe + m ()V method_17506 dropAllItems + m ()V method_17508 cookAndDrop + m ()Lnet/minecraft/class_2371; method_17505 getInventory + f Lnet/minecraft/class_2371; field_17383 inventory + f [I field_17384 cookingTimes + f [I field_17385 cookingTotalTimes +c net/minecraft/class_2599 net/minecraft/tileentity/ComparatorTileEntity + m ()I method_11071 getOutputSignal + m (I)V method_11070 setOutputSignal + f I field_11943 outputSignal +c net/minecraft/class_2593 net/minecraft/tileentity/CommandBlockTileEntity + m ()Z method_11036 isSendToClient + m (Z)V method_11041 setAuto + m ()Z method_11046 isConditional + m ()V method_23360 func_226988_y_ + m (Z)V method_11038 setPowered + m (Z)V method_11037 setSendToClient + m ()Z method_11043 isPowered + m ()Lnet/minecraft/class_1918; method_11040 getCommandBlockLogic + m ()Z method_11042 isAuto + m ()V method_23359 func_226987_h_ + m ()Z method_11044 isConditionMet + m ()Lnet/minecraft/class_2593$class_2594; method_11039 getMode + m ()Z method_11045 setConditionMet + f Z field_11916 sendToClient + f Lnet/minecraft/class_1918; field_11920 commandBlockLogic + f Z field_11918 auto + f Z field_11919 powered + f Z field_11917 conditionMet +c net/minecraft/class_2593$class_2594 net/minecraft/tileentity/CommandBlockTileEntity$Mode + m (Ljava/lang/String;)Lnet/minecraft/class_2593$class_2594; valueOf valueOf + m ()[Lnet/minecraft/class_2593$class_2594; values values + f Lnet/minecraft/class_2593$class_2594; field_11922 SEQUENCE + f Lnet/minecraft/class_2593$class_2594; field_11923 AUTO + f Lnet/minecraft/class_2593$class_2594; field_11924 REDSTONE + f [Lnet/minecraft/class_2593$class_2594; field_11925 $VALUES +c net/minecraft/class_2593$1 net/minecraft/tileentity/CommandBlockTileEntity$1 + f Lnet/minecraft/class_2593; field_11921 field_145767_a +c net/minecraft/class_2603 net/minecraft/tileentity/DaylightDetectorTileEntity +c net/minecraft/class_2597 net/minecraft/tileentity/ConduitTileEntity + m ()Z method_11066 isEyeOpen + m (Lnet/minecraft/class_3414;)V method_11067 playSound + m ()Z method_11069 shouldBeActive + m (F)F method_11061 getActiveRotation + m ()Lnet/minecraft/class_1309; method_11056 findExistingTarget + m ()V method_11055 addEffectsToPlayers + m ()V method_11064 updateClientTarget + m ()V method_11068 attackMobs + m ()V method_11063 spawnParticles + m (Z)V method_11057 setActive + m ()Z method_11065 isActive + m (Lnet/minecraft/class_1309;)Z method_11058 func_205032_a + m (Z)V method_11062 setEyeOpen + m ()Lnet/minecraft/class_238; method_11059 getAreaOfEffect + m (Lnet/minecraft/class_1309;)Z method_11060 func_205033_b + f Ljava/util/UUID; field_11935 targetUuid + f Lnet/minecraft/class_1309; field_11939 target + f [Lnet/minecraft/class_2248; field_11931 field_205042_e + f J field_11938 nextSoundTime + f I field_11936 ticksExisted + f Z field_11933 eyeOpen + f Z field_11934 active + f F field_11932 activeRotation + f Ljava/util/List; field_11937 prismarinePositions +c net/minecraft/class_2608 net/minecraft/tileentity/DropperTileEntity +c net/minecraft/class_2601 net/minecraft/tileentity/DispenserTileEntity + m (Lnet/minecraft/class_1799;)I method_11075 addItemStack + m ()I method_11076 getDispenseSlot + f Lnet/minecraft/class_2371; field_11945 stacks + f Ljava/util/Random; field_11944 RNG +c net/minecraft/class_2611 net/minecraft/tileentity/EnderChestTileEntity + m (Lnet/minecraft/class_1657;)Z method_11218 canBeUsed + m ()V method_11219 openChest + m ()V method_11220 closeChest + f F field_12004 prevLidAngle + f I field_12005 ticksSinceSync + f I field_12006 numPlayersUsing + f F field_12007 lidAngle +c net/minecraft/class_2605 net/minecraft/tileentity/EnchantingTableTileEntity + m (Lnet/minecraft/class_2561;)V method_11179 setCustomName + f Lnet/minecraft/class_2561; field_11959 customname + f Ljava/util/Random; field_11968 random + f F field_11965 pageTurningSpeed + f F field_11963 pageAngle + f F field_11964 nextPageAngle + f F field_11967 field_195526_i + f F field_11962 field_195531_n + f F field_11958 field_195523_f + f I field_11961 ticks + f F field_11969 field_195525_h + f F field_11966 nextPageTurningSpeed + f F field_11960 field_195524_g +c net/minecraft/class_2615 net/minecraft/tileentity/IHopper + m ()D method_11266 getXPos + m ()D method_11264 getYPos + m ()Lnet/minecraft/class_265; method_11262 getCollectionArea + m ()Lnet/minecraft/class_1937; method_10997 getWorld + m ()D method_11265 getZPos + f Lnet/minecraft/class_265; field_12027 BLOCK_ABOVE_SHAPE + f Lnet/minecraft/class_265; field_12026 COLLECTION_AREA_SHAPE + f Lnet/minecraft/class_265; field_12025 INSIDE_BOWL_SHAPE +c net/minecraft/class_3866 net/minecraft/tileentity/FurnaceTileEntity +c net/minecraft/class_3751 net/minecraft/tileentity/JigsawTileEntity + m ()Lnet/minecraft/class_3751$class_4991; method_26400 func_235671_j_ + m (Lnet/minecraft/class_2960;)V method_16379 func_235664_a_ + m ()Lnet/minecraft/class_2960; method_16381 func_235668_d_ + m (Lnet/minecraft/class_3218;IZ)V method_27191 func_235665_a_ + m (Ljava/lang/String;)V method_16377 setFinalState + m (Lnet/minecraft/class_2960;)V method_26398 func_235667_c_ + m (Lnet/minecraft/class_2960;)V method_16378 func_235666_b_ + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_3751$class_4991; method_26397 func_235663_a_ + m (Lnet/minecraft/class_3751$class_4991;)V method_26396 func_235662_a_ + m ()Ljava/lang/String; method_16380 getFinalState + m ()Lnet/minecraft/class_2960; method_26399 func_235669_f_ + m ()Lnet/minecraft/class_2960; method_16382 func_235670_g_ + f Ljava/lang/String; field_16551 finalState + f Lnet/minecraft/class_2960; field_16552 field_235659_b_ + f Lnet/minecraft/class_3751$class_4991; field_23328 field_235661_g_ + f Lnet/minecraft/class_2960; field_23327 field_235660_c_ + f Lnet/minecraft/class_2960; field_16550 field_235658_a_ +c net/minecraft/class_3751$class_4991 net/minecraft/tileentity/JigsawTileEntity$OrientationType + m (Ljava/lang/String;Lnet/minecraft/class_3751$class_4991;)Z method_26402 func_235674_a_ + m (Ljava/lang/String;)Ljava/util/Optional; method_26401 func_235673_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_3751$class_4991; valueOf valueOf + m ()[Lnet/minecraft/class_3751$class_4991; values values + f Lnet/minecraft/class_3751$class_4991; field_23329 ROLLABLE + f Ljava/lang/String; field_23331 field_235672_c_ + f Lnet/minecraft/class_3751$class_4991; field_23330 ALIGNED + f [Lnet/minecraft/class_3751$class_4991; field_23332 $VALUES +c net/minecraft/class_2614 net/minecraft/tileentity/HopperTileEntity + m (Lnet/minecraft/class_2615;)Ljava/util/List; method_11237 getCaptureItems + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;ILnet/minecraft/class_2350;)Z method_11244 canInsertItemInSlot + m (Lnet/minecraft/class_1297;)Ljava/lang/Boolean; method_11240 func_213969_b + m (Ljava/util/function/Supplier;)Z method_11243 updateHopper + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;ILnet/minecraft/class_2350;)Z method_11252 canExtractItemFromSlot + m (Lnet/minecraft/class_1263;I)Z method_17766 func_213973_a + m ()Z method_11256 isFull + m (Lnet/minecraft/class_1937;DDD)Lnet/minecraft/class_1263; method_11251 getInventoryAtPosition + m ()Z method_11246 transferItemsOut + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_2350;)Ljava/util/stream/IntStream; method_17767 func_213972_a + m ()Z method_11239 isOnTransferCooldown + m (Lnet/minecraft/class_1263;I)Z method_17769 func_213970_b + m ()Z method_11242 mayTransfer + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_2350;)Z method_11257 isInventoryEmpty + m (Lnet/minecraft/class_1297;)V method_11236 onEntityCollision + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_2350;)Z method_11258 isInventoryFull + m (Lnet/minecraft/class_2615;Lnet/minecraft/class_1263;Lnet/minecraft/class_2350;I)Z method_17768 func_213971_a + m (Lnet/minecraft/class_2615;)Lnet/minecraft/class_1263; method_11248 getSourceInventory + m (Lnet/minecraft/class_2615;Lnet/minecraft/class_1263;ILnet/minecraft/class_2350;)Z method_11261 pullItemFromSlot + m ()Lnet/minecraft/class_1263; method_11255 getInventoryForHopperTransfer + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;ILnet/minecraft/class_2350;)Lnet/minecraft/class_1799; method_11253 insertStack + m ()Ljava/lang/Boolean; method_11249 func_200111_K + m (Lnet/minecraft/class_2615;)Z method_11241 pullItems + m (I)V method_11238 setTransferCooldown + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1263; method_11250 getInventoryAtPosition + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;Lnet/minecraft/class_2350;)Lnet/minecraft/class_1799; method_11260 putStackInInventoryAllSlots + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_11254 canCombine + m (Lnet/minecraft/class_2615;Lnet/minecraft/class_238;)Ljava/util/stream/Stream; method_11245 func_200110_a + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1542;)Z method_11247 captureItem + f I field_12023 transferCooldown + f J field_12022 tickedGameTime + f Lnet/minecraft/class_2371; field_12024 inventory +c net/minecraft/class_3722 net/minecraft/tileentity/LecternTileEntity + m (I)V method_17511 setPage + m ()Lnet/minecraft/class_1799; method_17520 getBook + m (Lnet/minecraft/class_3722;)V method_17519 func_214037_b + m ()Z method_17522 hasBook + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;)V method_17514 setBook + m (Lnet/minecraft/class_3722;I)V method_17516 func_214044_a + m ()V method_17525 bookRemoved + m (Lnet/minecraft/class_3722;)Lnet/minecraft/class_1799; method_17515 func_214036_a + m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_2168; method_17512 createCommandSource + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_17518 ensureResolved + m (Lnet/minecraft/class_3722;)I method_17521 func_214038_c + m (Lnet/minecraft/class_1799;)V method_17513 setBook + m (Lnet/minecraft/class_3722;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_17517 func_214043_a + m ()I method_17523 getPage + m ()I method_17524 getComparatorSignalLevel + f I field_17389 page + f Lnet/minecraft/class_1799; field_17388 book + f I field_17390 pages + f Lnet/minecraft/class_3913; field_17387 field_214049_b + f Lnet/minecraft/class_1263; field_17386 inventory +c net/minecraft/class_3722$2 net/minecraft/tileentity/LecternTileEntity$2 + f Lnet/minecraft/class_3722; field_17392 field_221483_a +c net/minecraft/class_3722$1 net/minecraft/tileentity/LecternTileEntity$1 + f Lnet/minecraft/class_3722; field_17391 field_214028_a +c net/minecraft/class_2619 net/minecraft/tileentity/JukeboxTileEntity + m ()Lnet/minecraft/class_1799; method_11275 getRecord + m (Lnet/minecraft/class_1799;)V method_11276 setRecord + f Lnet/minecraft/class_1799; field_12031 record +c net/minecraft/class_2618 net/minecraft/tileentity/IChestLid + m (F)F method_11274 getLidAngle +c net/minecraft/class_2627 net/minecraft/tileentity/ShulkerBoxTileEntity + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_11317 saveToNbt + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_238; method_11315 getTopBoundingBox + m ()V method_11318 updateAnimation + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_238; method_11311 getBoundingBox + m (F)F method_11312 getProgress + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_238; method_11314 getBoundingBox + m ()V method_11316 moveCollidedEntities + m (Lnet/minecraft/class_2487;)V method_11319 loadFromNbt + m ()V method_20047 func_213975_v + m ()Z method_27093 func_235676_l_ + m ()Lnet/minecraft/class_2627$class_2628; method_11313 getAnimationStatus + m ()Lnet/minecraft/class_1767; method_11320 getColor + f [I field_12059 SLOTS + f I field_12053 openCount + f Lnet/minecraft/class_2627$class_2628; field_12057 animationStatus + f Lnet/minecraft/class_2371; field_12054 items + f Z field_12058 needsColorFromWorld + f Lnet/minecraft/class_1767; field_12060 color + f F field_12056 progress + f F field_12055 progressOld +c net/minecraft/class_2627$1 net/minecraft/tileentity/ShulkerBoxTileEntity$1 + f [I field_12061 field_191052_b + f [I field_12062 field_191051_a +c net/minecraft/class_2627$class_2628 net/minecraft/tileentity/ShulkerBoxTileEntity$AnimationStatus + m ()[Lnet/minecraft/class_2627$class_2628; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2627$class_2628; valueOf valueOf + f Lnet/minecraft/class_2627$class_2628; field_12066 OPENING + f [Lnet/minecraft/class_2627$class_2628; field_12067 $VALUES + f Lnet/minecraft/class_2627$class_2628; field_12063 OPENED + f Lnet/minecraft/class_2627$class_2628; field_12064 CLOSING + f Lnet/minecraft/class_2627$class_2628; field_12065 CLOSED +c net/minecraft/class_2621 net/minecraft/tileentity/LockableLootTileEntity + m (Lnet/minecraft/class_2487;)Z method_11286 checkLootAndWrite + m (Lnet/minecraft/class_2487;)Z method_11283 checkLootAndRead + m (Lnet/minecraft/class_2960;J)V method_11285 setLootTable + m (Lnet/minecraft/class_1922;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2960;)V method_11287 setLootTable + m (Lnet/minecraft/class_1657;)V method_11289 fillWithLoot + m (Lnet/minecraft/class_2371;)V method_11281 setItems + m ()Lnet/minecraft/class_2371; method_11282 getItems + f Lnet/minecraft/class_2960; field_12037 lootTable + f J field_12036 lootTableSeed +c net/minecraft/class_2631 net/minecraft/tileentity/SkullTileEntity + m (Lcom/mojang/authlib/GameProfile;)Lcom/mojang/authlib/GameProfile; method_11335 updateGameProfile + m (Lcom/mojang/authlib/minecraft/MinecraftSessionService;)V method_11336 setSessionService + m (F)F method_11338 getAnimationProgress + m ()Lcom/mojang/authlib/GameProfile; method_11334 getPlayerProfile + m (Lcom/mojang/authlib/GameProfile;)V method_11333 setPlayerProfile + m (Lnet/minecraft/class_3312;)V method_11337 setProfileCache + m ()V method_11339 updatePlayerProfile + f I field_12085 dragonAnimatedTicks + f Lnet/minecraft/class_3312; field_12089 profileCache + f Lcom/mojang/authlib/GameProfile; field_12087 playerProfile + f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_12088 sessionService + f Z field_12086 dragonAnimated +c net/minecraft/class_2625 net/minecraft/tileentity/SignTileEntity + m (Lnet/minecraft/class_1657;)V method_11306 setPlayer + m (I)Lnet/minecraft/class_2561; method_30843 getText + m (Lnet/minecraft/class_1657;)Z method_11301 executeCommand + m (ILnet/minecraft/class_2561;)V method_11299 setText + m ()Z method_11307 getIsEditable + m (Z)V method_11303 setEditable + m ()Lnet/minecraft/class_1657; method_11305 getPlayer + m (Lnet/minecraft/class_1767;)Z method_16127 setTextColor + m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_2168; method_11304 getCommandSource + m ()Lnet/minecraft/class_1767; method_16126 getTextColor + m (ILjava/util/function/Function;)Lnet/minecraft/class_5481; method_11300 func_242686_a + f [Lnet/minecraft/class_5481; field_12049 renderText + f [Lnet/minecraft/class_2561; field_12050 signText + f Lnet/minecraft/class_1767; field_16419 textColor + f Z field_12048 isEditable + f Lnet/minecraft/class_1657; field_12046 player +c net/minecraft/class_2636 net/minecraft/tileentity/MobSpawnerTileEntity + m ()Lnet/minecraft/class_1917; method_11390 getSpawnerBaseLogic + f Lnet/minecraft/class_1917; field_12114 spawnerLogic +c net/minecraft/class_2636$1 net/minecraft/tileentity/MobSpawnerTileEntity$1 + f Lnet/minecraft/class_2636; field_12115 field_150825_a +c net/minecraft/class_3723 net/minecraft/tileentity/SmokerTileEntity +c net/minecraft/class_2643 net/minecraft/tileentity/EndGatewayTileEntity + m ()V method_11411 triggerCooldown + m ()Z method_11421 isCoolingDown + m (Lnet/minecraft/class_2818;)Lnet/minecraft/class_2338; method_11413 findSpawnpointInChunk + m (Lnet/minecraft/class_1297;)V method_11409 teleportEntity + m (F)F method_11412 getCooldownPercent + m (Lnet/minecraft/class_1297;)Z method_30276 func_242690_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_11416 func_227016_a_ + m (Lnet/minecraft/class_2338;Z)V method_11418 setExitPortal + m (F)F method_11417 getSpawnPercent + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;IZ)Lnet/minecraft/class_2338; method_11410 findHighestBlock + m (Lnet/minecraft/class_3218;)V method_11422 func_227015_a_ + m ()Z method_11420 isSpawning + m ()I method_11415 getParticleAmount + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_243;)Lnet/minecraft/class_2818; method_11414 getChunk + m ()Lnet/minecraft/class_2338; method_11419 findExitPosition + f Lnet/minecraft/class_2338; field_12132 exitPortal + f Z field_12129 exactTeleport + f I field_12130 teleportCooldown + f Lorg/apache/logging/log4j/Logger; field_12133 LOGGER + f J field_12131 age +c net/minecraft/class_2633 net/minecraft/tileentity/StructureBlockTileEntity + m (Lnet/minecraft/class_3218;ZLnet/minecraft/class_3499;)Z method_21864 func_242689_a + m (Lnet/minecraft/class_3218;Z)Z method_11368 func_242688_a + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Ljava/util/List; method_11369 getNearbyCornerBlocks + m (Lnet/minecraft/class_2776;)V method_11381 setMode + m ()Lnet/minecraft/class_2415; method_11345 getMirror + m ()Z method_11367 ignoresEntities + m ()Lnet/minecraft/class_2776; method_11374 getMode + m ()F method_11346 getIntegrity + m ()Z method_11384 hasName + m ()Ljava/lang/String; method_11358 getMetadata + m ()V method_11348 updateBlockState + m ()Ljava/lang/String; method_11362 getName + m (J)Ljava/util/Random; method_20048 func_214074_b + m ()Z method_11357 showsBoundingBox + m ()Ljava/lang/String; method_21865 func_227014_f_ + m ()V method_11380 nextMode + m (Lnet/minecraft/class_2338;)V method_11377 setSize + m (Ljava/lang/String;)V method_11343 setName + m (Z)Z method_11366 save + m (Z)V method_11347 setShowAir + m ()Z method_11383 detectSize + m (F)V method_11370 setIntegrity + m ()V method_11361 unloadStructure + m ()Z method_11354 isPowered + m (Lnet/minecraft/class_2338;Ljava/util/List;)Lnet/minecraft/class_3341; method_11355 calculateEnclosingBoundingBox + m (J)V method_11382 setSeed + m (Ljava/util/List;)Ljava/util/List; method_11364 filterRelatedCornerBlocks + m (Lnet/minecraft/class_2415;)V method_11356 setMirror + m ()Lnet/minecraft/class_2470; method_11353 getRotation + m (Lnet/minecraft/class_2960;)V method_11344 setName + m (Z)V method_11352 setIgnoresEntities + m ()J method_11371 getSeed + m ()Lnet/minecraft/class_2338; method_11349 getStructureSize + m (Lnet/minecraft/class_1657;)Z method_11351 usedBy + m ()Lnet/minecraft/class_2338; method_11359 getPosition + m (Lnet/minecraft/class_1309;)V method_11373 createdBy + m (Lnet/minecraft/class_2338;)V method_11378 setPosition + m (Z)V method_11379 setPowered + m (Ljava/lang/String;)V method_11363 setMetadata + m (Lnet/minecraft/class_2470;)V method_11385 setRotation + m ()Z method_11365 save + m (Lnet/minecraft/class_3218;)Z method_11376 func_242687_a + m (Lnet/minecraft/class_2633;)Z method_11350 func_200665_a + m ()Z method_11375 showsAir + m ()Z method_11372 isStructureLoadable + m (Z)V method_11360 setShowBoundingBox + f Z field_12096 showAir + f F field_12101 integrity + f Lnet/minecraft/class_2470; field_12105 rotation + f Lnet/minecraft/class_2960; field_12102 name + f Z field_12099 ignoreEntities + f Ljava/lang/String; field_12098 metadata + f Lnet/minecraft/class_2338; field_12100 size + f Lnet/minecraft/class_2776; field_12094 mode + f Z field_12097 powered + f Z field_12095 showBoundingBox + f Lnet/minecraft/class_2415; field_12093 mirror + f J field_12103 seed + f Ljava/lang/String; field_12104 author + f Lnet/minecraft/class_2338; field_12092 position +c net/minecraft/class_2633$1 net/minecraft/tileentity/StructureBlockTileEntity$1 + f [I field_12111 field_208124_a +c net/minecraft/class_2633$class_2634 net/minecraft/tileentity/StructureBlockTileEntity$UpdateCommand + m ()[Lnet/minecraft/class_2633$class_2634; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2633$class_2634; valueOf valueOf + f [Lnet/minecraft/class_2633$class_2634; field_12107 $VALUES + f Lnet/minecraft/class_2633$class_2634; field_12106 SCAN_AREA + f Lnet/minecraft/class_2633$class_2634; field_12110 SAVE_AREA + f Lnet/minecraft/class_2633$class_2634; field_12109 LOAD_AREA + f Lnet/minecraft/class_2633$class_2634; field_12108 UPDATE_DATA +c net/minecraft/class_3000 net/minecraft/tileentity/ITickableTileEntity + m ()V method_16896 tick +c net/minecraft/class_2640 net/minecraft/tileentity/EndPortalTileEntity + m (Lnet/minecraft/class_2350;)Z method_11400 shouldRenderFace +c net/minecraft/class_2646 net/minecraft/tileentity/TrappedChestTileEntity +c net/minecraft/class_2647 net/minecraft/block/trees/Tree + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Random;)Z method_11431 attemptGrowTree + m (Ljava/util/Random;Z)Lnet/minecraft/class_2975; method_11430 getTreeFeature + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_24282 hasNearbyFlora +c net/minecraft/class_2650 net/minecraft/block/trees/BigTree + m (Ljava/util/Random;)Lnet/minecraft/class_2975; method_11443 getHugeTreeFeature + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Random;II)Z method_11444 growBigTree + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;II)Z method_11442 canBigTreeSpawnAt +c net/minecraft/class_2652 net/minecraft/block/trees/BirchTree +c net/minecraft/class_2654 net/minecraft/block/trees/AcaciaTree +c net/minecraft/class_2655 net/minecraft/block/trees/JungleTree +c net/minecraft/class_2657 net/minecraft/block/trees/DarkOakTree +c net/minecraft/class_2659 net/minecraft/block/trees/SpruceTree +c net/minecraft/class_2662 net/minecraft/block/trees/OakTree +c net/minecraft/class_2665 net/minecraft/block/PistonBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Z)Z method_11481 doMove + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_11483 checkForMove + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_11482 shouldBeExtended + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;ZLnet/minecraft/class_2350;)Z method_11484 canPush + f Lnet/minecraft/class_265; field_12188 PISTON_BASE_EAST_AABB + f Lnet/minecraft/class_265; field_12186 PISTON_BASE_SOUTH_AABB + f Z field_12187 isSticky + f Lnet/minecraft/class_265; field_12184 PISTON_BASE_WEST_AABB + f Lnet/minecraft/class_265; field_12189 PISTON_BASE_NORTH_AABB + f Lnet/minecraft/class_2746; field_12191 EXTENDED + f Lnet/minecraft/class_265; field_12185 PISTON_BASE_UP_AABB + f Lnet/minecraft/class_265; field_12190 PISTON_BASE_DOWN_AABB +c net/minecraft/class_2665$1 net/minecraft/block/PistonBlock$1 + f [I field_12192 field_193399_b + f [I field_12193 field_177243_a +c net/minecraft/class_2667 net/minecraft/block/MovingPistonBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;ZZ)Lnet/minecraft/class_2586; method_11489 createTilePiston + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2669; method_11488 getTileEntity + f Lnet/minecraft/class_2753; field_12196 FACING + f Lnet/minecraft/class_2754; field_12197 TYPE +c net/minecraft/class_4623 net/minecraft/util/AabbHelper + m (Lnet/minecraft/class_238;Lnet/minecraft/class_2350;D)Lnet/minecraft/class_238; method_23362 func_227019_a_ +c net/minecraft/class_4623$1 net/minecraft/util/AabbHelper$1 + f [I field_21215 field_227020_a_ +c net/minecraft/class_2671 net/minecraft/block/PistonHeadBlock + m (ZLnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_31020 func_242695_a + m (Z)[Lnet/minecraft/class_265; method_31019 getShapesForExtension + m (Lnet/minecraft/class_2350;Z)Lnet/minecraft/class_265; method_11520 getShapeForDirection + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)Z method_26980 isExtended + m (I)[Lnet/minecraft/class_265; method_31021 func_242696_b + f Lnet/minecraft/class_265; field_12217 SHORT_DOWN_ARM_AABB + f Lnet/minecraft/class_265; field_12225 SHORT_NORTH_ARM_AABB + f Lnet/minecraft/class_265; field_12216 SHORT_SOUTH_ARM_AABB + f Lnet/minecraft/class_265; field_12219 SHORT_EAST_ARM_AABB + f Lnet/minecraft/class_265; field_12212 SHORT_WEST_ARM_AABB + f Lnet/minecraft/class_265; field_12221 SOUTH_ARM_AABB + f Lnet/minecraft/class_265; field_12229 NORTH_ARM_AABB + f Lnet/minecraft/class_265; field_12223 WEST_ARM_AABB + f Lnet/minecraft/class_265; field_12218 EAST_ARM_AABB + f Lnet/minecraft/class_2746; field_12227 SHORT + f Lnet/minecraft/class_265; field_12231 SHORT_UP_ARM_AABB + f Lnet/minecraft/class_265; field_12215 UP_ARM_AABB + f Lnet/minecraft/class_265; field_12220 PISTON_EXTENSION_DOWN_AABB + f Lnet/minecraft/class_265; field_12226 DOWN_ARM_AABB + f Lnet/minecraft/class_265; field_12222 PISTON_EXTENSION_EAST_AABB + f Lnet/minecraft/class_2754; field_12224 TYPE + f Lnet/minecraft/class_265; field_12228 PISTON_EXTENSION_SOUTH_AABB + f [Lnet/minecraft/class_265; field_26661 UNEXTENDED_SHAPES + f Lnet/minecraft/class_265; field_12214 PISTON_EXTENSION_WEST_AABB + f [Lnet/minecraft/class_265; field_26660 EXTENDED_SHAPES + f Lnet/minecraft/class_265; field_12213 PISTON_EXTENSION_NORTH_AABB + f Lnet/minecraft/class_265; field_12230 PISTON_EXTENSION_UP_AABB +c net/minecraft/class_2671$1 net/minecraft/block/PistonHeadBlock$1 + f [I field_12232 field_177247_a +c net/minecraft/class_2669 net/minecraft/tileentity/PistonTileEntity + m (F)V method_23674 func_227024_g_ + m (F)V method_11503 moveCollidedEntities + m (Lnet/minecraft/class_238;)Lnet/minecraft/class_238; method_11500 moveByPositionAndProgress + m ()Lnet/minecraft/class_2350; method_11506 getMotionDirection + m ()Lnet/minecraft/class_2350; method_11498 getFacing + m ()Lnet/minecraft/class_2680; method_11496 getCollisionRelatedBlockState + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2350;D)V method_11514 fixEntityWithinPistonBase + m (F)F method_11494 getOffsetX + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_11512 getCollisionShape + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_1297;DLnet/minecraft/class_2350;)V method_23672 func_227022_a_ + m ()Lnet/minecraft/class_2350; method_21866 func_227026_z_ + m (F)F method_11499 getProgress + m ()Z method_11515 shouldPistonHeadBeRendered + m (F)F method_11504 getExtendedProgress + m (F)F method_11507 getOffsetZ + m ()V method_11513 clearPistonTileEntity + m (F)F method_11511 getOffsetY + m ()Z method_11501 isExtending + m ()Z method_23364 func_227025_y_ + m (Lnet/minecraft/class_238;Lnet/minecraft/class_1297;)Z method_23671 func_227021_a_ + m ()Lnet/minecraft/class_2680; method_11495 getPistonState + m (Lnet/minecraft/class_238;Lnet/minecraft/class_1297;)Z method_23673 func_227023_b_ + m ()J method_11508 getLastTicked + m (Lnet/minecraft/class_238;Lnet/minecraft/class_2350;Lnet/minecraft/class_238;)D method_11497 getMovement + f F field_12206 lastProgress + f Z field_12203 extending + f F field_12207 progress + f I field_26705 field_242697_l + f J field_12208 lastTicked + f Ljava/lang/ThreadLocal; field_12205 MOVING_ENTITY + f Lnet/minecraft/class_2680; field_12204 pistonState + f Lnet/minecraft/class_2350; field_12201 pistonFacing + f Z field_12202 shouldHeadBeRendered +c net/minecraft/class_2669$1 net/minecraft/tileentity/PistonTileEntity$1 + f [I field_12210 field_227027_a_ + f [I field_21467 field_227028_b_ +c net/minecraft/class_2674 net/minecraft/block/PistonBlockStructureHelper + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Z method_23675 func_227030_a_ + m (Lnet/minecraft/class_2248;)Z method_23367 func_227029_a_ + m ()Z method_11537 canMove + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_11540 addBlockLine + m ()Ljava/util/List; method_11536 getBlocksToDestroy + m (II)V method_11539 reorderListAtCollision + m ()Ljava/util/List; method_11541 getBlocksToMove + m (Lnet/minecraft/class_2338;)Z method_11538 addBranchingBlocks + f Ljava/util/List; field_12245 toMove + f Lnet/minecraft/class_2338; field_12250 pistonPos + f Lnet/minecraft/class_2350; field_12243 moveDirection + f Z field_12247 extending + f Lnet/minecraft/class_1937; field_12249 world + f Lnet/minecraft/class_2350; field_12248 facing + f Ljava/util/List; field_12246 toDestroy + f Lnet/minecraft/class_2338; field_12244 blockToMove +c net/minecraft/class_2680 net/minecraft/block/BlockState + f Lcom/mojang/serialization/Codec; field_24734 CODEC +c net/minecraft/class_4970 net/minecraft/block/AbstractBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)V method_9548 onEntityCollision + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_9571 getRenderShape + m ()Lnet/minecraft/class_3620; method_26403 getMaterialColor + m ()Lnet/minecraft/class_4970$class_2250; method_16841 getOffsetType + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_3965;Lnet/minecraft/class_1676;)V method_19286 onProjectileCollision + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_9615 onBlockAdded + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_3619; method_9527 getPushReaction + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_47$class_48;)Ljava/util/List; method_9560 getDrops + m ()Lnet/minecraft/class_1792; method_8389 asItem + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_9558 isValidPosition + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9565 spawnAdditionalDrops + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_3610; method_9545 getFluidState + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;Lnet/minecraft/class_3965;)Lnet/minecraft/class_1269; method_9534 onBlockActivated + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)J method_9535 getPositionRandom + m (Lnet/minecraft/class_2680;)Z method_9498 hasComparatorInputOverride + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_9524 getWeakPower + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;II)V method_9517 updateDiagonalNeighbors + m ()Z method_26161 isTileEntityProvider + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;Lnet/minecraft/class_2338;Z)V method_9612 neighborChanged + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_26159 getRayTraceShape + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_9549 getCollisionShape + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_9514 randomTick + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_9559 updatePostPlacement + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_9575 getAmbientOcclusionLightValue + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;II)Z method_9592 eventReceived + m ()Lnet/minecraft/class_2248; method_26160 getSelf + m (Lnet/minecraft/class_2680;)Z method_9506 canProvidePower + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_25959 getCollisionShape + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1750;)Z method_9616 isReplaceable + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_9522 isSideInvisible + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_10;)Z method_9516 allowsMovement + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)I method_9572 getComparatorInputOverride + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1657;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_9594 getPlayerRelativeBlockHardness + m ()Lnet/minecraft/class_2960; method_26162 getLootTable + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2464; method_9604 getRenderType + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2415;)Lnet/minecraft/class_2680; method_9569 mirror + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_9536 onReplaced + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3611;)Z method_22358 isReplaceable + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3908; method_17454 getContainer + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2470;)Lnet/minecraft/class_2680; method_9598 rotate + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_9584 getRaytraceShape + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_9505 getOpacity + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_9603 getStrongPower + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_9588 tick + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_9530 getShape + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)V method_9606 onBlockClicked + m (Lnet/minecraft/class_2680;)Z method_9526 isTransparent + f F field_23163 slipperiness + f F field_23165 jumpFactor + f Lnet/minecraft/class_2498; field_23162 soundType + f Z field_23159 canCollide + f Z field_23161 ticksRandomly + f F field_23164 speedFactor + f F field_23160 blastResistance + f Z field_23154 variableOpacity + f [Lnet/minecraft/class_2350; field_23157 UPDATE_ORDER + f Lnet/minecraft/class_3614; field_23158 material + f Lnet/minecraft/class_2960; field_23156 lootTable + f Lnet/minecraft/class_4970$class_2251; field_23155 properties +c net/minecraft/class_4970$class_4972 net/minecraft/block/AbstractBlock$IExtendedPositionPredicate + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Ljava/lang/Object;)Z test test +c net/minecraft/class_4970$class_4973 net/minecraft/block/AbstractBlock$IPositionPredicate + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z test test +c net/minecraft/class_4970$class_2250 net/minecraft/block/AbstractBlock$OffsetType + m (Ljava/lang/String;)Lnet/minecraft/class_4970$class_2250; valueOf valueOf + m ()[Lnet/minecraft/class_4970$class_2250; values values + f Lnet/minecraft/class_4970$class_2250; field_10656 NONE + f [Lnet/minecraft/class_4970$class_2250; field_10658 $VALUES + f Lnet/minecraft/class_4970$class_2250; field_10657 XZ + f Lnet/minecraft/class_4970$class_2250; field_10655 XYZ +c net/minecraft/class_4970$class_2251 net/minecraft/block/AbstractBlock$Properties + m (Lnet/minecraft/class_4970$class_2251;)Z method_26242 func_235841_b_ + m (Lnet/minecraft/class_3614;Lnet/minecraft/class_3620;)Lnet/minecraft/class_4970$class_2251; method_9639 create + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_26239 func_235832_a_ + m ()Lnet/minecraft/class_4970$class_2251; method_9624 variableOpacity + m (Lnet/minecraft/class_4970$class_4973;)Lnet/minecraft/class_4970$class_2251; method_26243 setSuffocates + m (Ljava/util/function/ToIntFunction;)Lnet/minecraft/class_4970$class_2251; method_9631 setLightLevel + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26246 func_235848_c_ + m (Lnet/minecraft/class_4970$class_2251;)F method_9627 func_235862_h_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26238 func_235831_a_ + m (Lnet/minecraft/class_4970$class_4973;)Lnet/minecraft/class_4970$class_2251; method_26247 setNeedsPostProcessing + m ()Lnet/minecraft/class_4970$class_2251; method_26250 setAir + m (Lnet/minecraft/class_4970$class_2251;)F method_9625 func_235851_d_ + m (Lnet/minecraft/class_4970$class_2251;)Ljava/util/function/ToIntFunction; method_26253 func_235866_l_ + m (Lnet/minecraft/class_2680;)I method_26237 func_235830_a_ + m (Lnet/minecraft/class_3614;)Lnet/minecraft/class_4970$class_2251; method_9637 create + m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_2960; method_9641 func_235846_c_ + m (Lnet/minecraft/class_4970$class_2251;)Z method_22489 func_235869_o_ + m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4972; method_26260 func_235876_v_ + m (Lnet/minecraft/class_4970$class_2251;)Z method_26254 func_235867_m_ + m (Lnet/minecraft/class_4970$class_4972;)Lnet/minecraft/class_4970$class_2251; method_26235 setAllowsSpawn + m (F)Lnet/minecraft/class_4970$class_2251; method_9628 slipperiness + m (Lnet/minecraft/class_2498;)Lnet/minecraft/class_4970$class_2251; method_9626 sound + m (Lnet/minecraft/class_3614;Ljava/util/function/Function;)Lnet/minecraft/class_4970$class_2251; method_26240 create + m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_2498; method_9638 func_235858_f_ + m (F)Lnet/minecraft/class_4970$class_2251; method_23352 jumpFactor + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4970$class_2251; method_16228 lootFrom + m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4973; method_26256 func_235872_r_ + m ()Lnet/minecraft/class_4970$class_2251; method_22488 notSolid + m (Lnet/minecraft/class_4970$class_2251;)Z method_9619 func_235855_e_ + m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_3614; method_9623 func_235826_a_ + m (Lnet/minecraft/class_4970$class_4973;)Lnet/minecraft/class_4970$class_2251; method_26236 setOpaque + m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4973; method_26258 func_235874_t_ + m (Lnet/minecraft/class_4970$class_2251;)F method_23353 func_235863_i_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26248 func_235853_d_ + m (Lnet/minecraft/class_3620;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3620; method_26241 func_235837_a_ + m ()Lnet/minecraft/class_4970$class_2251; method_9640 tickRandomly + m (Lnet/minecraft/class_4970$class_4973;)Lnet/minecraft/class_4970$class_2251; method_26245 setBlocksVision + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26244 func_235843_b_ + m (Lnet/minecraft/class_4970$class_4973;)Lnet/minecraft/class_4970$class_2251; method_26249 setEmmisiveRendering + m ()Lnet/minecraft/class_4970$class_2251; method_29292 setRequiresTool + m (Lnet/minecraft/class_3614;Lnet/minecraft/class_1767;)Lnet/minecraft/class_4970$class_2251; method_9617 create + m (Lnet/minecraft/class_4970$class_2251;)F method_26251 func_235860_g_ + m ()Lnet/minecraft/class_4970$class_2251; method_16229 noDrops + m (Lnet/minecraft/class_4970$class_2251;)Z method_29293 func_235870_p_ + m (Lnet/minecraft/class_4970;)Lnet/minecraft/class_4970$class_2251; method_9630 from + m (Lnet/minecraft/class_4970$class_2251;)Z method_9621 func_235864_j_ + m (F)Lnet/minecraft/class_4970$class_2251; method_9632 hardnessAndResistance + m (F)Lnet/minecraft/class_4970$class_2251; method_23351 speedFactor + m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4973; method_26255 func_235871_q_ + m (Lnet/minecraft/class_4970$class_2251;)F method_9633 func_235868_n_ + m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4973; method_26257 func_235873_s_ + m ()Lnet/minecraft/class_4970$class_2251; method_9618 zeroHardnessAndResistance + m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4973; method_26259 func_235875_u_ + m (Lnet/minecraft/class_4970$class_2251;)Ljava/util/function/Function; method_26252 func_235865_k_ + m ()Lnet/minecraft/class_4970$class_2251; method_9634 doesNotBlockMovement + m (FF)Lnet/minecraft/class_4970$class_2251; method_9629 hardnessAndResistance + f Z field_10661 ticksRandomly + f Ljava/util/function/Function; field_10662 blockColors + f F field_23179 speedFactor + f Z field_10664 blocksMovement + f Z field_10670 variableOpacity + f Lnet/minecraft/class_4970$class_4973; field_23182 isOpaque + f F field_10669 hardness + f Lnet/minecraft/class_4970$class_4973; field_23186 emmissiveRendering + f Lnet/minecraft/class_4970$class_4973; field_23184 blocksVision + f Lnet/minecraft/class_2960; field_10666 lootTable + f Z field_20721 isSolid + f Lnet/minecraft/class_4970$class_4972; field_23181 allowsSpawn + f Ljava/util/function/ToIntFunction; field_10663 lightLevel + f Lnet/minecraft/class_2498; field_10665 soundType + f Z field_25185 requiresTool + f F field_21209 jumpFactor + f Lnet/minecraft/class_3614; field_10668 material + f F field_10667 slipperiness + f Lnet/minecraft/class_4970$class_4973; field_23183 suffocates + f Lnet/minecraft/class_4970$class_4973; field_23185 needsPostProcessing + f F field_10660 resistance + f Z field_23180 isAir +c net/minecraft/class_4970$class_4971 net/minecraft/block/AbstractBlock$AbstractBlockState + m ()Z method_26225 isSolid + m (Lnet/minecraft/class_3494;)Z method_26164 isIn + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_26173 getFaceOcclusionShape + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)V method_26178 onEntityCollision + m ()Lnet/minecraft/class_2680; method_26233 getSelf + m ()Z method_26221 hasComparatorInputOverride + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_26202 getRaytraceShape + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_26203 getStrongPower + m ()Lnet/minecraft/class_3614; method_26207 getMaterial + m (Lnet/minecraft/class_2248;)Z method_27852 isIn + m ()Z method_26209 isCollisionShapeLargerThanFullBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_26193 getOpacity + m ()I method_26213 getLightValue + m (Lnet/minecraft/class_2415;)Lnet/minecraft/class_2680; method_26185 mirror + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;Lnet/minecraft/class_3965;)Lnet/minecraft/class_1269; method_26174 onBlockActivated + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_26180 spawnAdditionalDrops + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_243; method_26226 getOffset + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_26222 getRenderShape + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_26210 getAmbientOcclusionLightValue + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;II)V method_26198 updateDiagonalNeighbors + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_26197 onReplaced + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_26194 getCollisionShape + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)V method_30101 updateNeighbours + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_26218 getShape + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_26214 getBlockHardness + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_26195 getWeakPower + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;Lnet/minecraft/class_2350;)Z method_26169 isTopSolid + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_26192 tick + m ()Z method_29291 getRequiresTool + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_5431;)Z method_30368 func_242698_a + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26228 isSuffocating + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26232 blockNeedsPostProcessing + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26212 isNormalCube + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_26201 getRenderShapeTrue + m (Lnet/minecraft/class_3611;)Z method_26188 isReplaceable + m ()Lnet/minecraft/class_3619; method_26223 getPushReaction + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26216 isOpaqueCube + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_26206 isSolidSide + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_3965;Lnet/minecraft/class_1676;)V method_26175 onProjectileCollision + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_10;)Z method_26171 allowsMovement + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_26165 getPlayerRelativeBlockHardness + m (Lnet/minecraft/class_2338;)J method_26190 getPositionRandom + m ()Z method_26219 canProvidePower + m ()Z method_26215 isAir + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_26199 randomTick + m ()Lnet/minecraft/class_3610; method_26227 getFluidState + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)I method_26176 getComparatorInputOverride + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3908; method_26196 getContainer + m (Lnet/minecraft/class_2470;)Lnet/minecraft/class_2680; method_26186 rotate + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)V method_26179 onBlockClicked + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26208 isEmissiveRendering + m ()Z method_26211 isTransparent + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_26191 updatePostPlacement + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26234 hasOpaqueCollisionShape + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;Lnet/minecraft/class_2338;Z)V method_26181 neighborChanged + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3620; method_26205 getMaterialColor + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_26224 getRayTraceShape + m ()Lnet/minecraft/class_2248; method_26204 getBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_26220 getCollisionShape + m ()V method_26200 cacheState + m ()Lnet/minecraft/class_2464; method_26217 getRenderType + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_26182 onBlockAdded + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)Z method_26168 canSpawnMobs + m (Lnet/minecraft/class_3494;Ljava/util/function/Predicate;)Z method_27851 isInAndMatches + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;II)V method_26183 updateNeighbours + m (Lnet/minecraft/class_1750;)Z method_26166 isReplaceable + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)V method_30102 updateDiagonalNeighbors + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26167 propagatesSkylightDown + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_26172 getShape + m ()Lnet/minecraft/class_2498; method_26231 getSoundType + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_26187 isSideInvisible + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_26170 canEntitySpawn + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_26184 isValidPosition + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26230 causesSuffocation + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;II)Z method_26177 receiveBlockEvent + m (Lnet/minecraft/class_47$class_48;)Ljava/util/List; method_26189 getDrops + m ()Z method_26229 ticksRandomly + f Lnet/minecraft/class_4970$class_4971$class_3752; field_23166 cache + f Lnet/minecraft/class_4970$class_4973; field_23177 needsPostProcessing + f Z field_23173 isSolid + f Z field_23168 transparent + f F field_23172 hardness + f Lnet/minecraft/class_3620; field_23171 materialColor + f Lnet/minecraft/class_4970$class_4973; field_23174 isNormalCube + f Lnet/minecraft/class_4970$class_4973; field_23178 emissiveRendering + f Lnet/minecraft/class_4970$class_4973; field_23176 blocksVision + f Lnet/minecraft/class_3614; field_23170 material + f Z field_25184 requiresTool + f Z field_23169 isAir + f Lnet/minecraft/class_4970$class_4973; field_23175 blocksVisionChecker + f I field_23167 lightLevel +c net/minecraft/class_4970$class_4971$class_3752 net/minecraft/block/AbstractBlock$AbstractBlockState$Cache + m (Lnet/minecraft/class_2350$class_2351;)Z method_17901 func_235796_a_ + m (Lnet/minecraft/class_4970$class_4971$class_3752;)Z method_16391 func_235795_a_ + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_5431;)Z method_30369 isSolidSide + m (Lnet/minecraft/class_4970$class_4971$class_3752;)[Lnet/minecraft/class_265; method_16389 func_235798_c_ + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_5431;)I method_30370 func_242701_b + m (Lnet/minecraft/class_4970$class_4971$class_3752;)I method_16390 func_235797_b_ + f Z field_16556 propagatesSkylightDown + f I field_16555 opacity + f Z field_17651 isCollisionShapeLargerThanFullBlock + f Z field_20337 opaqueCollisionShape + f [Lnet/minecraft/class_265; field_16560 renderShapes + f Lnet/minecraft/class_265; field_19360 collisionShape + f I field_25830 shapeValueLength + f [Lnet/minecraft/class_2350; field_16559 DIRECTIONS + f Z field_16557 opaqueCube + f [Z field_19429 solidSides +c net/minecraft/class_4970$1 net/minecraft/block/AbstractBlock$1 + f [I field_10659 field_235698_a_ +c net/minecraft/class_2688 net/minecraft/state/StateHolder + m (Ljava/util/function/Function;Ljava/lang/Object;)Lcom/mojang/serialization/Codec; method_28497 func_235900_a_ + m ()Lcom/google/common/collect/ImmutableMap; method_11656 getValues + m (Lnet/minecraft/class_2769;)Z method_28498 hasProperty + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/lang/Object; method_11657 with + m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/util/Map; method_28499 func_235902_b_ + m ()Ljava/util/Collection; method_28501 getProperties + m (Ljava/util/Map;)V method_28496 func_235899_a_ + m (Lnet/minecraft/class_2769;)Ljava/util/Optional; method_28500 func_235903_d_ + m (Lcom/mojang/serialization/Codec;Ljava/util/function/Function;)Lcom/mojang/serialization/Codec; method_28494 func_235897_a_ + m (Lnet/minecraft/class_2688;)Ljava/lang/Object; method_28492 func_235895_a_ + m (Lnet/minecraft/class_2769;)Ljava/lang/Object; method_28493 func_235896_a_ + m (Ljava/util/Collection;Ljava/lang/Object;)Ljava/lang/Object; method_28495 func_235898_a_ + m (Lnet/minecraft/class_2769;)Ljava/lang/Comparable; method_11654 get + f Lcom/google/common/collect/ImmutableMap; field_24738 properties + f Lcom/google/common/collect/Table; field_24741 field_235894_e_ + f Ljava/lang/Object; field_24739 instance + f Ljava/util/function/Function; field_24737 field_235890_a_ + f Lcom/mojang/serialization/MapCodec; field_24740 field_235893_d_ +c net/minecraft/class_2688$1 net/minecraft/state/StateHolder$1 + m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/lang/String; method_11575 func_235905_a_ + m (Ljava/lang/Object;)Ljava/lang/Object; apply apply + m (Ljava/util/Map$Entry;)Ljava/lang/String; method_11576 apply +c net/minecraft/class_2689 net/minecraft/state/StateContainer + m (Lnet/minecraft/class_2769;Lcom/mojang/datafixers/util/Pair;)Lnet/minecraft/class_2688; method_30038 func_241485_a_ + m ()Lcom/google/common/collect/ImmutableList; method_11662 getValidStates + m (Lnet/minecraft/class_2769;Lnet/minecraft/class_2688;)Lcom/mojang/datafixers/util/Pair; method_30037 func_241484_a_ + m ()Ljava/util/Collection; method_11659 getProperties + m ()Lnet/minecraft/class_2688; method_11664 getBaseState + m (Lcom/mojang/serialization/MapCodec;Ljava/util/function/Supplier;Ljava/lang/String;Lnet/minecraft/class_2769;)Lcom/mojang/serialization/MapCodec; method_30040 func_241487_a_ + m (Lnet/minecraft/class_2689$class_2691;Ljava/lang/Object;Lcom/mojang/serialization/MapCodec;Ljava/util/Map;Ljava/util/List;Ljava/util/List;)V method_28484 func_201000_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_2769; method_11663 getProperty + m (Ljava/util/function/Function;Ljava/lang/Object;)Lnet/minecraft/class_2688; method_28485 func_235881_a_ + m ()Ljava/lang/String; toString toString + m ()Ljava/util/regex/Pattern; method_11665 func_206901_e + m (Lnet/minecraft/class_2769;Ljava/util/function/Supplier;)Lnet/minecraft/class_2769$class_4933; method_30039 func_241486_a_ + m (Ljava/util/List;Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/util/List; method_11661 func_200998_a_ + m ()Ljava/lang/Object; method_11660 getOwner + m (Lnet/minecraft/class_2769;Ljava/util/List;)Ljava/util/stream/Stream; method_11666 func_200999_a_ + f Lcom/google/common/collect/ImmutableSortedMap; field_12316 properties + f Lcom/google/common/collect/ImmutableList; field_12315 validStates + f Ljava/util/regex/Pattern; field_12314 NAME_PATTERN + f Ljava/lang/Object; field_12317 owner +c net/minecraft/class_2689$class_2691 net/minecraft/state/StateContainer$IFactory + m (Ljava/lang/Object;Lcom/google/common/collect/ImmutableMap;Lcom/mojang/serialization/MapCodec;)Ljava/lang/Object; create create +c net/minecraft/class_2689$class_2690 net/minecraft/state/StateContainer$Builder + m (Ljava/util/function/Function;Lnet/minecraft/class_2689$class_2691;)Lnet/minecraft/class_2689; method_11668 func_235882_a_ + m ([Lnet/minecraft/class_2769;)Lnet/minecraft/class_2689$class_2690; method_11667 add + m (Lnet/minecraft/class_2769;)V method_11669 validateProperty + f Ljava/lang/Object; field_12318 owner + f Ljava/util/Map; field_12319 properties +c net/minecraft/class_2694 net/minecraft/util/CachedBlockInfo + m ()Lnet/minecraft/class_2338; method_11683 getPos + m ()Lnet/minecraft/class_2586; method_11680 getTileEntity + m (Ljava/util/function/Predicate;Lnet/minecraft/class_2694;)Z method_11682 func_201002_a + m (Ljava/util/function/Predicate;)Ljava/util/function/Predicate; method_11678 hasState + m ()Lnet/minecraft/class_2680; method_11681 getBlockState + m ()Lnet/minecraft/class_4538; method_11679 getWorld + f Z field_12328 tileEntityInitialized + f Lnet/minecraft/class_2338; field_12331 pos + f Lnet/minecraft/class_4538; field_12330 world + f Z field_12329 forceLoad + f Lnet/minecraft/class_2586; field_12327 tileEntity + f Lnet/minecraft/class_2680; field_12326 state +c net/minecraft/class_2697 net/minecraft/block/pattern/BlockPatternBuilder + m ()[[[Ljava/util/function/Predicate; method_11703 makePredicateArray + m ([Ljava/lang/String;)Lnet/minecraft/class_2697; method_11702 aisle + m ()Lnet/minecraft/class_2700; method_11704 build + m (CLjava/util/function/Predicate;)Lnet/minecraft/class_2697; method_11700 where + m ()V method_11705 checkMissingPredicates + m ()Lnet/minecraft/class_2697; method_11701 start + f I field_12341 rowWidth + f Lcom/google/common/base/Joiner; field_12340 COMMA_JOIN + f I field_12342 aisleHeight + f Ljava/util/Map; field_12343 symbolMap + f Ljava/util/List; field_12344 depth +c net/minecraft/class_2700 net/minecraft/block/pattern/BlockPattern + m (Lnet/minecraft/class_4538;Z)Lcom/google/common/cache/LoadingCache; method_11709 createLoadingCache + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2700$class_2702; method_11708 match + m ()I method_11713 getThumbLength + m ()I method_11712 getFingerLength + m ()I method_11710 getPalmLength + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;III)Lnet/minecraft/class_2338; method_11707 translateOffset + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Lcom/google/common/cache/LoadingCache;)Lnet/minecraft/class_2700$class_2702; method_11711 checkPatternAt + f I field_12356 thumbLength + f I field_12357 fingerLength + f I field_12355 palmLength + f [[[Ljava/util/function/Predicate; field_12358 blockMatches +c net/minecraft/class_2700$class_2702 net/minecraft/block/pattern/BlockPattern$PatternHelper + m ()Lnet/minecraft/class_2338; method_11715 getFrontTopLeft + m ()Lnet/minecraft/class_2350; method_11716 getUp + m ()Ljava/lang/String; toString toString + m ()Lnet/minecraft/class_2350; method_11719 getForwards + m (III)Lnet/minecraft/class_2694; method_11717 translateOffset + f I field_12363 width + f Lnet/minecraft/class_2350; field_12364 up + f I field_12362 height + f Lnet/minecraft/class_2350; field_12365 forwards + f I field_12361 depth + f Lcom/google/common/cache/LoadingCache; field_12366 lcache + f Lnet/minecraft/class_2338; field_12367 frontTopLeft +c net/minecraft/class_2700$class_2701 net/minecraft/block/pattern/BlockPattern$CacheLoader + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2694; method_11714 load + m (Ljava/lang/Object;)Ljava/lang/Object; load load + f Z field_12360 forceLoad + f Lnet/minecraft/class_4538; field_12359 world +c net/minecraft/class_2710 net/minecraft/block/pattern/BlockMaterialMatcher + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_3614;)Lnet/minecraft/class_2710; method_11746 forMaterial + m (Lnet/minecraft/class_2680;)Z method_11745 test + f Lnet/minecraft/class_3614; field_12405 material + f Lnet/minecraft/class_2710; field_12404 AIR_MATCHER +c net/minecraft/class_2710$1 net/minecraft/block/pattern/BlockMaterialMatcher$1 +c net/minecraft/class_2715 net/minecraft/block/pattern/BlockStateMatcher + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;Ljava/util/function/Predicate;)Z method_11761 matches + m (Lnet/minecraft/class_2680;)Z method_11759 func_201026_b + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2715; method_11758 forBlock + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_2769;Ljava/util/function/Predicate;)Lnet/minecraft/class_2715; method_11762 where + m (Lnet/minecraft/class_2680;)Z method_11760 test + f Ljava/util/Map; field_12421 propertyPredicates + f Ljava/util/function/Predicate; field_12419 ANY + f Lnet/minecraft/class_2689; field_12420 blockstate +c net/minecraft/class_2717 net/minecraft/block/pattern/BlockMatcher + m (Lnet/minecraft/class_2680;)Z method_11765 test + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2717; method_11766 forBlock + f Lnet/minecraft/class_2248; field_12423 block +c net/minecraft/class_2738 net/minecraft/state/properties/AttachFace + m ()[Lnet/minecraft/class_2738; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2738; valueOf valueOf + f [Lnet/minecraft/class_2738; field_12474 $VALUES + f Lnet/minecraft/class_2738; field_12471 WALL + f Lnet/minecraft/class_2738; field_12473 CEILING + f Lnet/minecraft/class_2738; field_12475 FLOOR + f Ljava/lang/String; field_12472 name +c net/minecraft/class_2742 net/minecraft/state/properties/BedPart + m ()Ljava/lang/String; toString toString + m ()[Lnet/minecraft/class_2742; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2742; valueOf valueOf + f Ljava/lang/String; field_12559 name + f [Lnet/minecraft/class_2742; field_12558 $VALUES + f Lnet/minecraft/class_2742; field_12557 FOOT + f Lnet/minecraft/class_2742; field_12560 HEAD +c net/minecraft/class_2737 net/minecraft/state/properties/BambooLeaves + m (Ljava/lang/String;)Lnet/minecraft/class_2737; valueOf valueOf + m ()Ljava/lang/String; toString toString + m ()[Lnet/minecraft/class_2737; values values + f Lnet/minecraft/class_2737; field_12469 NONE + f Ljava/lang/String; field_12467 name + f [Lnet/minecraft/class_2737; field_12470 $VALUES + f Lnet/minecraft/class_2737; field_12466 SMALL + f Lnet/minecraft/class_2737; field_12468 LARGE +c net/minecraft/class_2741 net/minecraft/state/properties/BlockStateProperties + m (Lnet/minecraft/class_2768;)Z method_11813 func_210409_a + m (Lnet/minecraft/class_2350;)Z method_11814 func_208125_a + f Lnet/minecraft/class_2746; field_16561 HANGING + f Lnet/minecraft/class_2758; field_12556 AGE_0_2 + f Lnet/minecraft/class_2746; field_12488 EYE + f Lnet/minecraft/class_2746; field_12500 HAS_BOTTLE_1 + f Lnet/minecraft/class_2746; field_12539 UNSTABLE + f Lnet/minecraft/class_2754; field_23333 ORIENTATION + f Lnet/minecraft/class_2758; field_12543 PICKLES_1_4 + f Lnet/minecraft/class_2754; field_12507 RAIL_SHAPE + f Lnet/minecraft/class_2754; field_12516 BAMBOO_LEAVES + f Lnet/minecraft/class_2746; field_12553 DISARMED + f Lnet/minecraft/class_2758; field_20432 HONEY_LEVEL + f Lnet/minecraft/class_2746; field_17394 SIGNAL_FIRE + f Lnet/minecraft/class_2754; field_12492 PISTON_TYPE + f Lnet/minecraft/class_2754; field_12496 AXIS + f Lnet/minecraft/class_2758; field_12510 MOISTURE_0_7 + f Lnet/minecraft/class_2754; field_12533 DOUBLE_BLOCK_HALF + f Lnet/minecraft/class_2754; field_12503 STAIRS_SHAPE + f Lnet/minecraft/class_2758; field_17586 LEVEL_0_8 + f Lnet/minecraft/class_2754; field_12520 DOOR_HINGE + f Lnet/minecraft/class_2746; field_12515 ENABLED + f Lnet/minecraft/class_2746; field_12489 NORTH + f Lnet/minecraft/class_2758; field_12536 LAYERS_1_8 + f Lnet/minecraft/class_2754; field_12506 CHEST_TYPE + f Lnet/minecraft/class_2754; field_12523 REDSTONE_EAST + f Lnet/minecraft/class_2746; field_12502 LOCKED + f Lnet/minecraft/class_2758; field_12494 DELAY_1_4 + f Lnet/minecraft/class_2746; field_16562 BOTTOM + f Lnet/minecraft/class_2758; field_23187 CHARGES + f Lnet/minecraft/class_2746; field_12484 POWERED + f Lnet/minecraft/class_2754; field_12551 REDSTONE_SOUTH + f Lnet/minecraft/class_2746; field_12537 OPEN + f Lnet/minecraft/class_2758; field_12509 EGGS_1_4 + f Lnet/minecraft/class_2746; field_12540 SOUTH + f Lnet/minecraft/class_2758; field_12517 AGE_0_25 + f Lnet/minecraft/class_2754; field_22174 WALL_HEIGHT_EAST + f Lnet/minecraft/class_2746; field_17393 HAS_BOOK + f Lnet/minecraft/class_2758; field_12549 STAGE_0_1 + f Lnet/minecraft/class_2754; field_12555 FACE + f Lnet/minecraft/class_2746; field_12531 HAS_BOTTLE_2 + f Lnet/minecraft/class_2753; field_12481 HORIZONTAL_FACING + f Lnet/minecraft/class_2746; field_12508 WATERLOGGED + f Lnet/minecraft/class_2754; field_22176 WALL_HEIGHT_SOUTH + f Lnet/minecraft/class_2746; field_12491 IN_WALL + f Lnet/minecraft/class_2746; field_12519 UP + f Lnet/minecraft/class_2758; field_12550 AGE_0_7 + f Lnet/minecraft/class_2758; field_12521 AGE_0_1 + f Lnet/minecraft/class_2746; field_12480 FALLING + f Lnet/minecraft/class_2758; field_12497 AGE_0_3 + f Lnet/minecraft/class_2753; field_12525 FACING + f Lnet/minecraft/class_2758; field_12524 NOTE_0_24 + f Lnet/minecraft/class_2754; field_12518 HALF + f Lnet/minecraft/class_2746; field_12522 TRIGGERED + f Lnet/minecraft/class_2754; field_12547 STRUCTURE_BLOCK_MODE + f Lnet/minecraft/class_2746; field_12554 HAS_BOTTLE_0 + f Lnet/minecraft/class_2758; field_12511 POWER_0_15 + f Lnet/minecraft/class_2754; field_12542 RAIL_SHAPE_STRAIGHT + f Lnet/minecraft/class_2746; field_12512 SNOWY + f Lnet/minecraft/class_2758; field_12538 LEVEL_0_15 + f Lnet/minecraft/class_2746; field_12535 SHORT + f Lnet/minecraft/class_2754; field_12485 SLAB_TYPE + f Lnet/minecraft/class_2746; field_12486 CONDITIONAL + f Lnet/minecraft/class_2754; field_12534 COMPARATOR_MODE + f Lnet/minecraft/class_2746; field_12552 EXTENDED + f Lnet/minecraft/class_2746; field_12526 DRAG + f Lnet/minecraft/class_2758; field_12490 LEVEL_1_8 + f Lnet/minecraft/class_2754; field_12499 NOTE_BLOCK_INSTRUMENT + f Lnet/minecraft/class_2746; field_12528 OCCUPIED + f Lnet/minecraft/class_2758; field_12530 HATCH_0_2 + f Lnet/minecraft/class_2754; field_12483 BED_PART + f Lnet/minecraft/class_2746; field_12487 EAST + f Lnet/minecraft/class_2754; field_12495 REDSTONE_NORTH + f Lnet/minecraft/class_2746; field_12546 DOWN + f Lnet/minecraft/class_2754; field_22177 WALL_HEIGHT_WEST + f Lnet/minecraft/class_2758; field_12513 LEVEL_0_3 + f Lnet/minecraft/class_2746; field_12527 WEST + f Lnet/minecraft/class_2754; field_12529 HORIZONTAL_AXIS + f Lnet/minecraft/class_2746; field_12493 ATTACHED + f Lnet/minecraft/class_2754; field_12504 REDSTONE_WEST + f Lnet/minecraft/class_2758; field_12541 DISTANCE_1_7 + f Lnet/minecraft/class_2758; field_12532 ROTATION_0_15 + f Lnet/minecraft/class_2746; field_12514 PERSISTENT + f Lnet/minecraft/class_2746; field_23084 field_235906_D_ + f Lnet/minecraft/class_2754; field_17104 BELL_ATTACHMENT + f Lnet/minecraft/class_2758; field_12505 BITES_0_6 + f Lnet/minecraft/class_2753; field_12545 FACING_EXCEPT_UP + f Lnet/minecraft/class_2746; field_12544 HAS_RECORD + f Lnet/minecraft/class_2758; field_16503 DISTANCE_0_7 + f Lnet/minecraft/class_2758; field_12482 AGE_0_5 + f Lnet/minecraft/class_2746; field_12548 LIT + f Lnet/minecraft/class_2746; field_12501 INVERTED + f Lnet/minecraft/class_2758; field_12498 AGE_0_15 + f Lnet/minecraft/class_2754; field_22175 WALL_HEIGHT_NORTH +c net/minecraft/class_3867 net/minecraft/state/properties/BellAttachment + m (Ljava/lang/String;)Lnet/minecraft/class_3867; valueOf valueOf + m ()[Lnet/minecraft/class_3867; values values + f Lnet/minecraft/class_3867; field_17098 FLOOR + f Ljava/lang/String; field_17102 name + f [Lnet/minecraft/class_3867; field_17103 $VALUES + f Lnet/minecraft/class_3867; field_17101 DOUBLE_WALL + f Lnet/minecraft/class_3867; field_17099 CEILING + f Lnet/minecraft/class_3867; field_17100 SINGLE_WALL +c net/minecraft/class_2745 net/minecraft/state/properties/ChestType + m ()[Lnet/minecraft/class_2745; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2745; valueOf valueOf + m ()Lnet/minecraft/class_2745; method_11824 opposite + f Ljava/lang/String; field_12572 name + f [Lnet/minecraft/class_2745; field_12570 VALUES + f Lnet/minecraft/class_2745; field_12574 LEFT + f Lnet/minecraft/class_2745; field_12571 RIGHT + f Lnet/minecraft/class_2745; field_12569 SINGLE + f [Lnet/minecraft/class_2745; field_12573 $VALUES + f I field_12568 opposite +c net/minecraft/class_2746 net/minecraft/state/BooleanProperty + m (Ljava/lang/Boolean;)Ljava/lang/String; method_11826 getName + m (Ljava/lang/String;)Lnet/minecraft/class_2746; method_11825 create + f Lcom/google/common/collect/ImmutableSet; field_12575 allowedValues +c net/minecraft/class_2753 net/minecraft/state/DirectionProperty + m (Ljava/lang/String;Ljava/util/Collection;)Lnet/minecraft/class_2753; method_11843 create + m (Ljava/lang/String;[Lnet/minecraft/class_2350;)Lnet/minecraft/class_2753; method_11845 create + m (Ljava/lang/String;Ljava/util/function/Predicate;)Lnet/minecraft/class_2753; method_11844 create +c net/minecraft/class_2747 net/minecraft/state/properties/ComparatorMode + m (Ljava/lang/String;)Lnet/minecraft/class_2747; valueOf valueOf + m ()Ljava/lang/String; toString toString + m ()[Lnet/minecraft/class_2747; values values + f Lnet/minecraft/class_2747; field_12576 COMPARE + f Ljava/lang/String; field_12577 name + f [Lnet/minecraft/class_2747; field_12579 $VALUES + f Lnet/minecraft/class_2747; field_12578 SUBTRACT +c net/minecraft/class_2750 net/minecraft/state/properties/DoorHingeSide + m (Ljava/lang/String;)Lnet/minecraft/class_2750; valueOf valueOf + m ()Ljava/lang/String; toString toString + m ()[Lnet/minecraft/class_2750; values values + f Lnet/minecraft/class_2750; field_12588 LEFT + f Lnet/minecraft/class_2750; field_12586 RIGHT + f [Lnet/minecraft/class_2750; field_12587 $VALUES +c net/minecraft/class_2754 net/minecraft/state/EnumProperty + m (Ljava/lang/Enum;)Ljava/lang/String; method_11846 getName + m (Ljava/lang/String;Ljava/lang/Class;Ljava/util/function/Predicate;)Lnet/minecraft/class_2754; method_11848 create + m (Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Enum;)Lnet/minecraft/class_2754; method_11849 create + m (Ljava/lang/String;Ljava/lang/Class;Ljava/util/Collection;)Lnet/minecraft/class_2754; method_11847 create + m (Ljava/lang/String;Ljava/lang/Class;)Lnet/minecraft/class_2754; method_11850 create + f Ljava/util/Map; field_12596 nameToValue + f Lcom/google/common/collect/ImmutableSet; field_12595 allowedValues +c net/minecraft/class_2756 net/minecraft/state/properties/DoubleBlockHalf + m (Ljava/lang/String;)Lnet/minecraft/class_2756; valueOf valueOf + m ()[Lnet/minecraft/class_2756; values values + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2756; field_12609 UPPER + f Lnet/minecraft/class_2756; field_12607 LOWER + f [Lnet/minecraft/class_2756; field_12608 $VALUES +c net/minecraft/class_2758 net/minecraft/state/IntegerProperty + m (Ljava/lang/String;II)Lnet/minecraft/class_2758; method_11867 create + m (Ljava/lang/Integer;)Ljava/lang/String; method_11868 getName + f Lcom/google/common/collect/ImmutableSet; field_12614 allowedValues +c net/minecraft/class_2760 net/minecraft/state/properties/Half + m (Ljava/lang/String;)Lnet/minecraft/class_2760; valueOf valueOf + m ()Ljava/lang/String; toString toString + m ()[Lnet/minecraft/class_2760; values values + f Lnet/minecraft/class_2760; field_12619 TOP + f Ljava/lang/String; field_12616 name + f [Lnet/minecraft/class_2760; field_12618 $VALUES + f Lnet/minecraft/class_2760; field_12617 BOTTOM +c net/minecraft/class_4581 net/minecraft/util/math/vector/Matrix3f + m ()Ljava/lang/String; toString toString + m ()V method_22847 transpose + m ()V method_22856 setIdentity + m ()Lorg/apache/commons/lang3/tuple/Triple; method_22853 svdDecompose + m ()F method_23731 adjugateAndDet + m ()Lnet/minecraft/class_4581; method_23296 copy + m (Lnet/minecraft/class_4581;)Lnet/minecraft/class_1158; method_22857 stepJacobi + m (Lnet/minecraft/class_1158;)V method_23274 mul + m ()Z method_23732 invert + m (FFF)Lnet/minecraft/class_4581; method_23963 makeScaleMatrix + m (FF)Lcom/mojang/datafixers/util/Pair; method_22848 qrGivensQuat + m (Lnet/minecraft/class_4581;)V method_22855 mul + m (FFF)Lcom/mojang/datafixers/util/Pair; method_22849 approxGivensQuat + m (Ljava/lang/Object;)Z equals equals + m (IIF)V method_26288 func_232605_a_ + m (Lnet/minecraft/class_4581;)V method_22852 set + m ()I hashCode hashCode + m (F)V method_23729 mul + f F field_20861 CS + f F field_20860 G + f F field_20862 SS + f F field_21640 m21 + f F field_21641 m22 + f F field_20863 SQ2 + f F field_21633 m00 + f F field_21637 m11 + f F field_21639 m20 + f F field_21638 m12 + f F field_21635 m02 + f F field_21634 m01 + f F field_21636 m10 +c net/minecraft/class_2764 net/minecraft/state/properties/PistonType + m ()[Lnet/minecraft/class_2764; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2764; valueOf valueOf + m ()Ljava/lang/String; toString toString + f [Lnet/minecraft/class_2764; field_12636 $VALUES + f Lnet/minecraft/class_2764; field_12634 STICKY + f Lnet/minecraft/class_2764; field_12637 DEFAULT + f Ljava/lang/String; field_12635 name +c net/minecraft/class_1159 net/minecraft/util/math/vector/Matrix4f + m (Lnet/minecraft/class_1159;)V method_22672 mul + m (Lnet/minecraft/class_1158;)V method_22670 mul + m ()F method_22868 adjugateAndDet + m ()V method_22871 transpose + m ()Z method_22870 invert + m (Ljava/nio/FloatBuffer;)V method_4932 write + m ()V method_22668 setIdentity + m (FFF)Lnet/minecraft/class_1159; method_24021 makeTranslate + m ()Lnet/minecraft/class_1159; method_22673 copy + m (II)I method_24020 bufferIndex + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_1160;)V method_22671 translate + m (F)V method_22866 mul + m (FFFF)Lnet/minecraft/class_1159; method_4933 orthographic + m ()Ljava/lang/String; toString toString + m (DFFF)Lnet/minecraft/class_1159; method_4929 perspective + m (FFF)Lnet/minecraft/class_1159; method_24019 makeScale + f F field_21659 m13 + f F field_21658 m12 + f F field_21660 m20 + f F field_21656 m10 + f F field_21657 m11 + f F field_21664 m30 + f F field_21665 m31 + f F field_21661 m21 + f F field_21663 m23 + f F field_21662 m22 + f F field_21667 m33 + f F field_21666 m32 + f F field_21653 m01 + f F field_21655 m03 + f F field_21654 m02 + f F field_21652 m00 +c net/minecraft/class_2766 net/minecraft/state/properties/NoteBlockInstrument + m (Ljava/lang/String;)Lnet/minecraft/class_2766; valueOf valueOf + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2766; method_11887 byState + m ()Lnet/minecraft/class_3414; method_11886 getSound + m ()[Lnet/minecraft/class_2766; values values + f Lnet/minecraft/class_2766; field_18285 COW_BELL + f Lnet/minecraft/class_2766; field_12648 HARP + f Lnet/minecraft/class_2766; field_18284 IRON_XYLOPHONE + f Lnet/minecraft/class_2766; field_12655 XYLOPHONE + f Lnet/minecraft/class_2766; field_12645 HAT + f Lnet/minecraft/class_2766; field_18288 BANJO + f Lnet/minecraft/class_3414; field_12649 sound + f Lnet/minecraft/class_2766; field_18287 BIT + f Lnet/minecraft/class_2766; field_12643 SNARE + f Lnet/minecraft/class_2766; field_12653 BASEDRUM + f [Lnet/minecraft/class_2766; field_12652 $VALUES + f Lnet/minecraft/class_2766; field_18286 DIDGERIDOO + f Lnet/minecraft/class_2766; field_12644 BELL + f Lnet/minecraft/class_2766; field_12650 FLUTE + f Lnet/minecraft/class_2766; field_18289 PLING + f Lnet/minecraft/class_2766; field_12651 BASS + f Lnet/minecraft/class_2766; field_12647 CHIME + f Lnet/minecraft/class_2766; field_12654 GUITAR + f Ljava/lang/String; field_12646 name +c net/minecraft/class_4990 net/minecraft/util/math/vector/Orientation + m (Lnet/minecraft/class_4990;)Lcom/mojang/datafixers/util/Pair; method_26394 func_235536_d_ + m ()[Lnet/minecraft/class_4990; values values + m (Lnet/minecraft/class_4990;)Lnet/minecraft/class_4990; method_26393 func_235535_c_ + m (Ljava/lang/String;)Lnet/minecraft/class_4990; valueOf valueOf + m (Lnet/minecraft/class_4990;)Lnet/minecraft/class_4990; method_26385 func_235527_a_ + m (Lnet/minecraft/class_5000;)Lnet/minecraft/class_5000; method_26389 func_235531_a_ + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_26388 func_235530_a_ + m (Lnet/minecraft/class_4990;Lnet/minecraft/class_4990;)Z method_26386 func_235528_a_ + m ()Lit/unimi/dsi/fastutil/booleans/BooleanList; method_26391 func_235533_b_ + m (Lnet/minecraft/class_2350$class_2351;)Z method_26387 isOnAxis + m (Lnet/minecraft/class_4990;)Lnet/minecraft/class_4990; method_26392 func_235534_b_ + m ([Lnet/minecraft/class_4990;)V method_26390 func_235532_a_ + m ()Ljava/lang/String; toString toString + m (I)[Lnet/minecraft/class_4990; method_26384 func_235526_a_ + f Lnet/minecraft/class_4990; field_23303 ROT_120_NNP + f Lnet/minecraft/class_4990; field_23282 ROT_90_REF_X_NEG + f Lnet/minecraft/class_4990; field_23322 INVERSION + f Lnet/minecraft/class_4990; field_23301 ROT_180_FACE_YZ + f Lnet/minecraft/class_4990; field_23280 SWAP_NEG_YZ + f Lnet/minecraft/class_4990; field_23299 ROT_180_FACE_XY + f Lnet/minecraft/class_4990; field_23278 SWAP_XZ + f Lnet/minecraft/class_4990; field_23309 ROT_120_PPP + f Lnet/minecraft/class_4990; field_23307 ROT_120_PNP + f Lnet/minecraft/class_4990; field_23286 ROT_90_REF_Z_NEG + f [[Lnet/minecraft/class_4990; field_23296 field_235524_ad_ + f Lnet/minecraft/class_4990; field_23305 ROT_120_NPP + f Z field_23293 field_235521_aa_ + f Lnet/minecraft/class_4990; field_23284 ROT_90_REF_Y_NEG + f Lnet/minecraft/class_4990; field_23271 ROT_60_REF_NPP + f Lnet/minecraft/class_4990; field_23313 ROT_180_EDGE_XZ_POS + f Lnet/minecraft/class_4990; field_23311 ROT_180_EDGE_XY_POS + f Lnet/minecraft/class_4990; field_23269 ROT_60_REF_NNP + f Lnet/minecraft/class_4990; field_23267 INVERT_Z + f Ljava/lang/String; field_23289 field_235518_X_ + f Lnet/minecraft/class_4990; field_23319 ROT_90_Y_POS + f Lnet/minecraft/class_4990; field_23292 IDENTITY + f [Lnet/minecraft/class_4990; field_23297 field_235525_ae_ + f Lnet/minecraft/class_4990; field_23277 SWAP_YZ + f Lnet/minecraft/class_4990; field_23275 ROT_60_REF_PPP + f Z field_23291 field_235520_Z_ + f Lnet/minecraft/class_4990; field_23317 ROT_90_X_POS + f Lnet/minecraft/class_4990; field_23315 ROT_180_EDGE_YZ_POS + f Lnet/minecraft/class_4990; field_23273 ROT_60_REF_PNP + f Lnet/minecraft/class_4990; field_23304 ROT_120_NPN + f Lnet/minecraft/class_4990; field_23323 INVERT_X + f Lnet/minecraft/class_4990; field_23302 ROT_120_NNN + f Lnet/minecraft/class_4990; field_23281 SWAP_NEG_XZ + f Lnet/minecraft/class_4990; field_23279 SWAP_NEG_XY + f Lnet/minecraft/class_4990; field_23321 ROT_90_Z_POS + f Lnet/minecraft/class_4990; field_23300 ROT_180_FACE_XZ + f Lnet/minecraft/class_4990; field_23287 ROT_90_REF_Z_POS + f Lnet/minecraft/class_4990; field_23266 INVERT_Y + f Lnet/minecraft/class_4990; field_23308 ROT_120_PPN + f Lnet/minecraft/class_4990; field_23306 ROT_120_PNN + f Lnet/minecraft/class_4990; field_23285 ROT_90_REF_Y_POS + f Lnet/minecraft/class_4990; field_23283 ROT_90_REF_X_POS + f Z field_23294 field_235522_ab_ + f Ljava/util/Map; field_23290 field_235519_Y_ + f Lnet/minecraft/class_4990; field_23314 ROT_180_EDGE_YZ_NEG + f Lnet/minecraft/class_4990; field_23272 ROT_60_REF_PNN + f Lnet/minecraft/class_4990; field_23270 ROT_60_REF_NPN + f Lnet/minecraft/class_4990; field_23312 ROT_180_EDGE_XZ_NEG + f Lnet/minecraft/class_4990; field_23310 ROT_180_EDGE_XY_NEG + f Lnet/minecraft/class_4581; field_23288 field_235517_W_ + f Lnet/minecraft/class_4990; field_23268 ROT_60_REF_NNN + f Lnet/minecraft/class_4998; field_23295 field_235523_ac_ + f Lnet/minecraft/class_4990; field_23320 ROT_90_Z_NEG + f Lnet/minecraft/class_4990; field_23318 ROT_90_Y_NEG + f [Lnet/minecraft/class_4990; field_23298 $VALUES + f Lnet/minecraft/class_4990; field_23276 SWAP_XY + f Lnet/minecraft/class_4990; field_23274 ROT_60_REF_PPN + f Lnet/minecraft/class_4990; field_23316 ROT_90_X_NEG +c net/minecraft/class_4990$1 net/minecraft/util/math/vector/Orientation$1 + f [I field_23324 field_235537_a_ +c net/minecraft/class_1158 net/minecraft/util/math/vector/Quaternion + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/String; toString toString + m (F)F method_16003 cos + m (F)F method_16002 sin + m ()Lnet/minecraft/class_1158; method_23695 copy + m ()F method_4923 getZ + m (FFFF)V method_23758 set + m ()F method_4924 getW + m ()V method_22873 normalize + m ()I hashCode hashCode + m ()V method_4926 conjugate + m (F)V method_22872 multiply + m ()F method_4922 getY + m (Lnet/minecraft/class_1158;)V method_4925 multiply + m ()F method_4921 getX + f F field_21582 x + f F field_21583 y + f Lnet/minecraft/class_1158; field_21493 ONE + f F field_21584 z + f F field_21585 w +c net/minecraft/class_2768 net/minecraft/state/properties/RailShape + m (Ljava/lang/String;)Lnet/minecraft/class_2768; valueOf valueOf + m ()Ljava/lang/String; toString toString + m ()Z method_11897 isAscending + m ()[Lnet/minecraft/class_2768; values values + f Lnet/minecraft/class_2768; field_12666 ASCENDING_WEST + f Lnet/minecraft/class_2768; field_12667 ASCENDING_EAST + f Ljava/lang/String; field_12669 name + f Lnet/minecraft/class_2768; field_12674 EAST_WEST + f Lnet/minecraft/class_2768; field_12664 SOUTH_EAST + f Lnet/minecraft/class_2768; field_12668 ASCENDING_SOUTH + f [Lnet/minecraft/class_2768; field_12673 $VALUES + f Lnet/minecraft/class_2768; field_12670 ASCENDING_NORTH + f Lnet/minecraft/class_2768; field_12672 NORTH_WEST + f Lnet/minecraft/class_2768; field_12671 SOUTH_WEST + f Lnet/minecraft/class_2768; field_12665 NORTH_SOUTH + f Lnet/minecraft/class_2768; field_12663 NORTH_EAST +c net/minecraft/class_4998 net/minecraft/util/TriplePermutation + m (Ljava/lang/String;)Lnet/minecraft/class_4998; valueOf valueOf + m (Lnet/minecraft/class_4998;)Lnet/minecraft/class_4998; method_26418 func_239188_a_ + m ([Lnet/minecraft/class_4998;)V method_26420 func_239190_a_ + m ()[Lnet/minecraft/class_4998; values values + m ()Lnet/minecraft/class_4581; method_26416 func_239186_a_ + m ([ILnet/minecraft/class_4998;)Z method_26419 func_239189_a_ + m (I)I method_26417 func_239187_a_ + f [I field_23368 field_239183_g_ + f Lnet/minecraft/class_4998; field_23362 P123 + f Lnet/minecraft/class_4581; field_23369 field_239184_h_ + f Lnet/minecraft/class_4998; field_23367 P321 + f Lnet/minecraft/class_4998; field_23366 P312 + f Lnet/minecraft/class_4998; field_23365 P231 + f [Lnet/minecraft/class_4998; field_23371 $VALUES + f Lnet/minecraft/class_4998; field_23363 P213 + f [[Lnet/minecraft/class_4998; field_23370 field_239185_i_ + f Lnet/minecraft/class_4998; field_23364 P132 +c net/minecraft/class_2769 net/minecraft/state/Property + m (Ljava/lang/Comparable;)Lnet/minecraft/class_2769$class_4933; method_30042 func_241490_b_ + m ()I method_11799 computeHashCode + m ()I hashCode hashCode + m (Ljava/lang/String;)Lcom/mojang/serialization/DataResult; method_28505 func_235920_c_ + m ()Lcom/mojang/serialization/Codec; method_30044 func_241492_e_ + m (Ljava/lang/String;)Lcom/mojang/serialization/DataResult; method_28504 func_235919_a_ + m (Ljava/lang/Comparable;)Ljava/lang/String; method_11901 getName + m ()Ljava/util/Collection; method_11898 getAllowedValues + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/String; method_11899 getName + m ()Ljava/lang/Class; method_11902 getValueClass + m ()Ljava/lang/String; toString toString + m ()Ljava/util/stream/Stream; method_30043 func_241491_c_ + m (Ljava/lang/String;)Ljava/util/Optional; method_11900 parseValue + m (Lnet/minecraft/class_2688;)Lnet/minecraft/class_2769$class_4933; method_30041 func_241489_a_ + f Ljava/lang/Integer; field_24744 field_235915_c_ + f Ljava/lang/Class; field_24742 field_235913_a_ + f Lcom/mojang/serialization/Codec; field_25670 field_241488_e_ + f Ljava/lang/String; field_24743 field_235914_b_ + f Lcom/mojang/serialization/Codec; field_24745 field_235916_d_ +c net/minecraft/class_2769$class_4933 net/minecraft/state/Property$ValuePair + m ()Ljava/lang/String; toString toString + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/Comparable; method_30045 func_241493_b_ + m ()Lnet/minecraft/class_2769; method_25815 func_240181_a_ + f Ljava/lang/Comparable; field_22880 field_240180_b_ + f Lnet/minecraft/class_2769; field_22879 field_240179_a_ +c net/minecraft/class_2769$1 net/minecraft/state/Property$1 +c net/minecraft/class_4590 net/minecraft/util/math/vector/TransformationMatrix + m ()Lnet/minecraft/class_1158; method_22937 getRotationLeft + m (Lnet/minecraft/class_1159;)Lcom/mojang/datafixers/util/Pair; method_22932 affine + m (Lnet/minecraft/class_4590;)Lnet/minecraft/class_4590; method_22933 composeVanilla + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1158;Lnet/minecraft/class_1160;Lnet/minecraft/class_1158;)Lnet/minecraft/class_1159; method_22934 composeVanilla + m ()Lnet/minecraft/class_1159; method_22936 getMatrix + m ()I hashCode hashCode + m ()Lnet/minecraft/class_4590; method_22935 inverseVanilla + m ()V method_22938 decompose + m ()Lnet/minecraft/class_4590; method_22931 identity + m (Ljava/lang/Object;)Z equals equals + m ()Lnet/minecraft/class_4590; method_22939 func_227991_f_ + f Lnet/minecraft/class_1158; field_20905 rotationRight + f Lnet/minecraft/class_4590; field_20906 IDENTITY + f Lnet/minecraft/class_1160; field_20904 scale + f Lnet/minecraft/class_1158; field_20903 rotationLeft + f Lnet/minecraft/class_1159; field_20900 matrix + f Lnet/minecraft/class_1160; field_20902 translation + f Z field_20901 decomposed +c net/minecraft/class_2771 net/minecraft/state/properties/SlabType + m ()[Lnet/minecraft/class_2771; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2771; valueOf valueOf + m ()Ljava/lang/String; toString toString + f [Lnet/minecraft/class_2771; field_12680 $VALUES + f Ljava/lang/String; field_12678 name + f Lnet/minecraft/class_2771; field_12682 DOUBLE + f Lnet/minecraft/class_2771; field_12681 BOTTOM + f Lnet/minecraft/class_2771; field_12679 TOP +c net/minecraft/class_1160 net/minecraft/util/math/vector/Vector3f + m (FFF)V method_4948 add + m (Lnet/minecraft/class_1160;)V method_23846 add + m (Lnet/minecraft/class_1160;)V method_4944 sub + m ()Z method_4952 normalize + m ()Ljava/lang/String; toString toString + m (Lit/unimi/dsi/fastutil/floats/Float2FloatFunction;)V method_23848 apply + m (Lnet/minecraft/class_1160;)F method_4950 dot + m (FFF)V method_4949 set + m (Lnet/minecraft/class_1158;)V method_19262 transform + m (FFF)V method_23849 mul + m ()F method_4943 getX + m (F)V method_4942 mul + m (Lnet/minecraft/class_1160;F)V method_23847 lerp + m (FF)V method_4946 clamp + m (Lnet/minecraft/class_4581;)V method_23215 transform + m (F)Lnet/minecraft/class_1158; method_23626 rotation + m (F)Lnet/minecraft/class_1158; method_23214 rotationDegrees + m (Ljava/lang/Object;)Z equals equals + m ()Lnet/minecraft/class_1160; method_23850 copy + m ()F method_4945 getY + m (Lnet/minecraft/class_1160;)V method_4951 cross + m ()F method_4947 getZ + m ()I hashCode hashCode + f Lnet/minecraft/class_1160; field_20702 XN + f Lnet/minecraft/class_1160; field_20707 ZP + f Lnet/minecraft/class_1160; field_20706 ZN + f Lnet/minecraft/class_1160; field_20705 YP + f Lnet/minecraft/class_1160; field_20703 XP + f Lnet/minecraft/class_1160; field_20704 YN + f F field_21485 z + f F field_21484 y + f F field_21483 x +c net/minecraft/class_2773 net/minecraft/state/properties/RedstoneSide + m ()Z method_27855 func_235921_b_ + m ()Ljava/lang/String; toString toString + m ()[Lnet/minecraft/class_2773; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2773; valueOf valueOf + f Ljava/lang/String; field_12685 name + f Lnet/minecraft/class_2773; field_12686 UP + f [Lnet/minecraft/class_2773; field_12688 $VALUES + f Lnet/minecraft/class_2773; field_12687 NONE + f Lnet/minecraft/class_2773; field_12689 SIDE +c net/minecraft/class_1162 net/minecraft/util/math/vector/Vector4f + m ()Ljava/lang/String; toString toString + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_1159;)V method_22674 transform + m ()F method_23853 getW + m ()F method_4956 getY + m (Lnet/minecraft/class_1158;)V method_23852 transform + m ()Z method_23218 normalize + m ()F method_4953 getX + m ()F method_4957 getZ + m ()I hashCode hashCode + m (Lnet/minecraft/class_1162;)F method_23217 dot + m (Lnet/minecraft/class_1160;)V method_4954 scale + m ()V method_23219 perspectiveDivide + m (FFFF)V method_23851 set + f F field_21487 y + f F field_21486 x + f F field_21488 z + f F field_21489 w +c net/minecraft/class_2776 net/minecraft/state/properties/StructureMode + m ()Lnet/minecraft/class_2561; method_30844 func_242703_b + m (Ljava/lang/String;)Lnet/minecraft/class_2776; valueOf valueOf + m ()[Lnet/minecraft/class_2776; values values + f Ljava/lang/String; field_12698 name + f Lnet/minecraft/class_2776; field_12696 DATA + f Lnet/minecraft/class_2561; field_26444 field_242702_f + f Lnet/minecraft/class_2776; field_12699 CORNER + f Lnet/minecraft/class_2776; field_12697 LOAD + f [Lnet/minecraft/class_2776; field_12700 $VALUES + f Lnet/minecraft/class_2776; field_12695 SAVE +c net/minecraft/class_5459 net/minecraft/util/TeleportationRepositioner + m ([I)Lcom/mojang/datafixers/util/Pair; method_30576 largestRectInHeights + m (Ljava/util/function/Predicate;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2350;I)I method_30575 distanceInDirection + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350$class_2351;ILnet/minecraft/class_2350$class_2351;ILjava/util/function/Predicate;)Lnet/minecraft/class_5459$class_5460; method_30574 findLargestRectangle +c net/minecraft/class_5459$class_5461 net/minecraft/util/TeleportationRepositioner$IntBounds + m ()Ljava/lang/String; toString toString + f I field_25939 min + f I field_25940 max +c net/minecraft/class_5459$class_5460 net/minecraft/util/TeleportationRepositioner$Result + f I field_25938 height + f I field_25937 width + f Lnet/minecraft/class_2338; field_25936 startPos +c net/minecraft/class_2778 net/minecraft/state/properties/StairsShape + m ()Ljava/lang/String; toString toString + m ()[Lnet/minecraft/class_2778; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2778; valueOf valueOf + f [Lnet/minecraft/class_2778; field_12711 $VALUES + f Lnet/minecraft/class_2778; field_12710 STRAIGHT + f Lnet/minecraft/class_2778; field_12709 OUTER_RIGHT + f Lnet/minecraft/class_2778; field_12708 OUTER_LEFT + f Ljava/lang/String; field_12714 name + f Lnet/minecraft/class_2778; field_12713 INNER_RIGHT + f Lnet/minecraft/class_2778; field_12712 INNER_LEFT +c net/minecraft/class_5462 net/minecraft/client/util/ICharacterPredicate + m (C)Z test test +c net/minecraft/class_4719 net/minecraft/block/WoodType + m (Lnet/minecraft/class_4719;)Lnet/minecraft/class_4719; method_24027 register + m ()Ljava/util/stream/Stream; method_24026 getValues + m ()Ljava/lang/String; method_24028 getName + f Lnet/minecraft/class_4719; field_21679 ACACIA + f Ljava/lang/String; field_21683 name + f Lnet/minecraft/class_4719; field_21678 BIRCH + f Lnet/minecraft/class_4719; field_22184 WARPED + f Lnet/minecraft/class_4719; field_21677 SPRUCE + f Lnet/minecraft/class_4719; field_22183 CRIMSON + f Ljava/util/Set; field_21682 VALUES + f Lnet/minecraft/class_4719; field_21676 OAK + f Lnet/minecraft/class_4719; field_21681 DARK_OAK + f Lnet/minecraft/class_4719; field_21680 JUNGLE +c net/minecraft/class_124 net/minecraft/util/text/TextFormatting + m (Lnet/minecraft/class_124;)Lnet/minecraft/class_124; method_541 func_199747_a + m ()I method_536 getColorIndex + m ()Ljava/lang/Integer; method_532 getColor + m ()[Lnet/minecraft/class_124; values values + m ()Z method_542 isFancyStyling + m (C)Lnet/minecraft/class_124; method_544 fromFormattingCode + m (Ljava/lang/String;)Ljava/lang/String; method_535 lowercaseAlpha + m ()Ljava/lang/String; toString toString + m ()Ljava/lang/String; method_537 getFriendlyName + m (Ljava/lang/String;)Lnet/minecraft/class_124; valueOf valueOf + m (I)Lnet/minecraft/class_124; method_534 fromColorIndex + m (ZZ)Ljava/util/Collection; method_540 getValidValues + m (Ljava/lang/String;)Ljava/lang/String; method_539 getTextWithoutFormattingCodes + m ()Z method_543 isColor + m (Lnet/minecraft/class_124;)Ljava/lang/String; method_531 func_199746_b + m (Ljava/lang/String;)Lnet/minecraft/class_124; method_533 getValueByName + f Lnet/minecraft/class_124; field_1064 DARK_PURPLE + f Lnet/minecraft/class_124; field_1065 GOLD + f C field_1059 formattingCode + f Lnet/minecraft/class_124; field_1079 DARK_RED + f Lnet/minecraft/class_124; field_1062 DARK_AQUA + f Lnet/minecraft/class_124; field_1058 DARK_BLUE + f Lnet/minecraft/class_124; field_1077 DARK_GREEN + f Lnet/minecraft/class_124; field_1075 AQUA + f Ljava/lang/String; field_1057 name + f Lnet/minecraft/class_124; field_1078 BLUE + f Lnet/minecraft/class_124; field_1060 GREEN + f Lnet/minecraft/class_124; field_1063 DARK_GRAY + f [Lnet/minecraft/class_124; field_1072 $VALUES + f Lnet/minecraft/class_124; field_1080 GRAY + f Lnet/minecraft/class_124; field_1051 OBFUSCATED + f Lnet/minecraft/class_124; field_1068 WHITE + f Lnet/minecraft/class_124; field_1076 LIGHT_PURPLE + f Ljava/lang/String; field_1069 controlString + f Lnet/minecraft/class_124; field_1054 YELLOW + f Lnet/minecraft/class_124; field_1061 RED + f Ljava/lang/Integer; field_1053 color + f Lnet/minecraft/class_124; field_1074 BLACK + f Z field_1081 fancyStyling + f Lnet/minecraft/class_124; field_1070 RESET + f Lnet/minecraft/class_124; field_1056 ITALIC + f Ljava/util/regex/Pattern; field_1066 FORMATTING_CODE_PATTERN + f Lnet/minecraft/class_124; field_1073 UNDERLINE + f I field_1071 colorIndex + f Ljava/util/Map; field_1052 NAME_MAPPING + f Lnet/minecraft/class_124; field_1067 BOLD + f Lnet/minecraft/class_124; field_1055 STRIKETHROUGH +c net/minecraft/class_4778 net/minecraft/block/WallHeight + m ()[Lnet/minecraft/class_4778; values values + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;)Lnet/minecraft/class_4778; valueOf valueOf + f Lnet/minecraft/class_4778; field_22178 NONE + f [Lnet/minecraft/class_4778; field_22182 $VALUES + f Lnet/minecraft/class_4778; field_22180 TALL + f Ljava/lang/String; field_22181 heightName + f Lnet/minecraft/class_4778; field_22179 LOW +c net/minecraft/class_128 net/minecraft/crash/CrashReport + m ()Ljava/lang/String; method_566 func_210205_m + m ()Ljava/lang/String; method_21685 func_210204_n + m (Ljava/lang/StringBuilder;)V method_555 getSectionsInStringBuilder + m ()V method_559 populateEnvironment + m ()Ljava/lang/Throwable; method_564 getCrashCause + m ()Ljava/lang/String; method_563 func_210203_j + m ()Ljava/lang/String; method_558 func_210202_k + m ()V method_24305 crash + m ()Ljava/lang/String; method_570 func_210201_l + m ()Ljava/lang/String; method_571 func_210206_o + m ()Ljava/lang/String; method_557 getCauseStackTraceOrString + m ()Ljava/lang/String; method_568 getCompleteReport + m (Ljava/lang/Throwable;Ljava/lang/String;)Lnet/minecraft/class_128; method_560 makeCrashReport + m ()Ljava/lang/String; method_561 getDescription + m ()Ljava/io/File; method_572 getFile + m ()Lnet/minecraft/class_129; method_567 getCategory + m ()Ljava/lang/String; method_573 getWittyComment + m (Ljava/lang/String;)Lnet/minecraft/class_129; method_562 makeCategory + m (Ljava/io/File;)Z method_569 saveToFile + m ()Ljava/lang/String; method_565 func_224735_j + m (Ljava/lang/String;I)Lnet/minecraft/class_129; method_556 makeCategoryDepth + f Lnet/minecraft/class_129; field_1092 systemDetailsCategory + f Ljava/util/List; field_1089 crashReportSections + f Ljava/lang/Throwable; field_1093 cause + f [Ljava/lang/StackTraceElement; field_1088 stacktrace + f Ljava/lang/String; field_1087 description + f Ljava/io/File; field_1090 crashReportFile + f Lorg/apache/logging/log4j/Logger; field_1091 LOGGER + f Z field_1086 firstCategoryInCrashReport +c net/minecraft/class_2780 net/minecraft/world/border/IBorderListener + m (Lnet/minecraft/class_2784;DD)V method_11930 onCenterChanged + m (Lnet/minecraft/class_2784;DDJ)V method_11931 onTransitionStarted + m (Lnet/minecraft/class_2784;I)V method_11933 onWarningDistanceChanged + m (Lnet/minecraft/class_2784;I)V method_11932 onWarningTimeChanged + m (Lnet/minecraft/class_2784;D)V method_11934 onSizeChanged + m (Lnet/minecraft/class_2784;D)V method_11935 onDamageBufferChanged + m (Lnet/minecraft/class_2784;D)V method_11929 onDamageAmountChanged +c net/minecraft/class_2780$class_3976 net/minecraft/world/border/IBorderListener$Impl + f Lnet/minecraft/class_2784; field_17652 worldBorder +c net/minecraft/class_129 net/minecraft/crash/CrashReportCategory + m (Lnet/minecraft/class_2338;)Ljava/lang/String; method_582 getCoordinateInfo + m (I)V method_580 trimStackTraceEntriesFromBottom + m (DDD)Ljava/lang/String; method_583 getCoordinateInfo + m (Lnet/minecraft/class_2338;)Ljava/lang/String; method_576 func_210207_b + m (Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;)Z method_584 firstTwoElementsOfStackTraceMatch + m (III)Ljava/lang/String; method_581 getCoordinateInfo + m (Ljava/lang/String;Ljava/lang/Object;)Lnet/minecraft/class_129; method_578 addDetail + m (I)I method_579 getPrunedStackTrace + m (Lnet/minecraft/class_129;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_586 addBlockInfo + m (Ljava/lang/String;Lnet/minecraft/class_133;)Lnet/minecraft/class_129; method_577 addDetail + m (Ljava/lang/StringBuilder;)V method_574 appendToStringBuilder + m (Ljava/lang/String;Ljava/lang/Throwable;)V method_585 addCrashSectionThrowable + m ()[Ljava/lang/StackTraceElement; method_575 getStackTrace + f [Ljava/lang/StackTraceElement; field_1097 stackTrace + f Lnet/minecraft/class_128; field_1095 crashReport + f Ljava/lang/String; field_1096 name + f Ljava/util/List; field_1094 children +c net/minecraft/class_129$class_130 net/minecraft/crash/CrashReportCategory$Entry + m ()Ljava/lang/String; method_588 getKey + m ()Ljava/lang/String; method_587 getValue + f Ljava/lang/String; field_1098 key + f Ljava/lang/String; field_1099 value +c net/minecraft/class_133 net/minecraft/crash/ICrashReportDetail +c net/minecraft/class_2784 net/minecraft/world/border/WorldBorder + m (DDJ)V method_11957 setTransition + m ()D method_11953 getDamagePerBlock + m ()I method_11959 getSize + m ()D method_11954 getTargetSize + m ()Lnet/minecraft/class_265; method_17903 getShape + m ()D method_11965 getDiameter + m ()D method_11976 minX + m (I)V method_11967 setWarningDistance + m (Lnet/minecraft/class_2780;)V method_11983 addListener + m ()D method_11963 maxX + m (Lnet/minecraft/class_2784$class_5200;)V method_17905 deserialize + m ()D method_11980 getCenterZ + m ()V method_11982 tick + m ()Lnet/minecraft/class_2789; method_11968 getStatus + m (I)V method_11975 setWarningTime + m (Lnet/minecraft/class_1923;)Z method_11951 contains + m (Lnet/minecraft/class_2784;)I method_11960 func_212672_a + m (Lnet/minecraft/class_1297;)D method_11979 getClosestDistance + m (D)V method_11955 setDamagePerBlock + m (Lnet/minecraft/class_2338;)Z method_11952 contains + m ()I method_11956 getWarningTime + m (D)V method_11969 setTransition + m ()Lnet/minecraft/class_2784$class_5200; method_27355 getSerializer + m ()D method_11971 getDamageBuffer + m ()J method_11962 getTimeUntilTarget + m (DD)V method_11978 setCenter + m ()D method_11977 maxZ + m ()D method_11958 minZ + m ()Ljava/util/List; method_11970 getListeners + m (DD)D method_11961 getClosestDistance + m (I)V method_11973 setSize + m (D)V method_11981 setDamageBuffer + m (Lnet/minecraft/class_238;)Z method_11966 contains + m ()D method_11964 getCenterX + m ()I method_11972 getWarningDistance + m ()D method_11974 getResizeSpeed + f D field_12738 centerX + f I field_12735 warningTime + f Ljava/util/List; field_12730 listeners + f I field_12732 worldSize + f I field_12734 warningDistance + f D field_12737 centerZ + f D field_12731 damageBuffer + f Lnet/minecraft/class_2784$class_2785; field_12736 state + f Lnet/minecraft/class_2784$class_5200; field_24122 DEFAULT_SERIALIZER + f D field_12733 damagePerBlock +c net/minecraft/class_2784$1 net/minecraft/world/border/WorldBorder$1 +c net/minecraft/class_2784$class_2787 net/minecraft/world/border/WorldBorder$StationaryBorderInfo + m ()V method_11996 updateBox + f Lnet/minecraft/class_2784; field_12748 field_212666_a + f D field_12745 minZ + f D field_12750 maxX + f Lnet/minecraft/class_265; field_17653 shape + f D field_12749 maxZ + f D field_12747 size + f D field_12746 minX +c net/minecraft/class_2784$class_5200 net/minecraft/world/border/WorldBorder$Serializer + m ()D method_27360 getDamagePerBlock + m ()D method_27361 getDamageBuffer + m (Lnet/minecraft/class_2487;)V method_27357 serialize + m ()I method_27362 getWarningDistance + m ()D method_27364 getSize + m ()I method_27363 getWarningTime + m ()D method_27366 getSizeLerpTarget + m ()J method_27365 getSizeLerpTime + m (Lcom/mojang/serialization/DynamicLike;Lnet/minecraft/class_2784$class_5200;)Lnet/minecraft/class_2784$class_5200; method_27358 deserialize + m ()D method_27356 getCenterX + m ()D method_27359 getCenterZ + f I field_24127 warningDistance + f D field_24129 size + f I field_24128 warningTime + f D field_24131 sizeLerpTarget + f J field_24130 sizeLerpTime + f D field_24123 centerX + f D field_24124 centerZ + f D field_24125 damagePerBlock + f D field_24126 damageBuffer +c net/minecraft/class_2784$class_2786 net/minecraft/world/border/WorldBorder$MovingBorderInfo + f D field_12739 newSize + f D field_12740 oldSize + f J field_12741 startTime + f Lnet/minecraft/class_2784; field_12743 field_212659_a + f D field_12744 transitionTime + f J field_12742 endTime +c net/minecraft/class_2784$class_2785 net/minecraft/world/border/WorldBorder$IBorderInfo + m ()D method_11988 getTargetSize + m ()Lnet/minecraft/class_265; method_17906 getShape + m ()D method_11991 getMaxX + m ()V method_11990 onCenterChanged + m ()D method_11994 getMinX + m ()D method_11987 getResizeSpeed + m ()V method_11989 onSizeChanged + m ()Lnet/minecraft/class_2784$class_2785; method_11986 tick + m ()D method_11984 getSize + m ()Lnet/minecraft/class_2789; method_11995 getStatus + m ()D method_11985 getMaxZ + m ()J method_11993 getTimeUntilTarget + m ()D method_11992 getMinZ +c net/minecraft/class_140 net/minecraft/util/DefaultUncaughtExceptionHandler + m (Ljava/lang/Thread;Ljava/lang/Throwable;)V uncaughtException uncaughtException + f Lorg/apache/logging/log4j/Logger; field_1113 logger +c net/minecraft/class_2789 net/minecraft/world/border/BorderStatus + m ()[Lnet/minecraft/class_2789; values values + m ()I method_11999 getColor + m (Ljava/lang/String;)Lnet/minecraft/class_2789; valueOf valueOf + f Lnet/minecraft/class_2789; field_12754 GROWING + f [Lnet/minecraft/class_2789; field_12752 $VALUES + f I field_12755 color + f Lnet/minecraft/class_2789; field_12753 STATIONARY + f Lnet/minecraft/class_2789; field_12756 SHRINKING +c net/minecraft/class_143 net/minecraft/util/DefaultWithNameUncaughtExceptionHandler + m (Ljava/lang/Thread;Ljava/lang/Throwable;)V uncaughtException uncaughtException + f Lorg/apache/logging/log4j/Logger; field_1115 logger +c net/minecraft/class_2791 net/minecraft/world/chunk/IChunk + m ([Lit/unimi/dsi/fastutil/shorts/ShortList;I)Lit/unimi/dsi/fastutil/shorts/ShortList; method_12026 getList + m (SI)V method_12029 addPackedPosition + m ()Lnet/minecraft/class_4548; method_12036 getBiomes + m (Lnet/minecraft/class_2487;)V method_12042 addTileEntity + m ()Z method_12038 hasLight + m ()Ljava/util/Set; method_12021 getTileEntitiesPos + m (J)V method_12043 setLastSaveTime + m (Lnet/minecraft/class_1297;)V method_12002 addEntity + m (J)V method_12028 setInhabitedTime + m ()[Lit/unimi/dsi/fastutil/shorts/ShortList; method_12012 getPackedPositions + m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_2902; method_12032 getHeightmap + m ()Ljava/util/Collection; method_12011 getHeightmaps + m ()I method_12031 getTopFilledSegment + m ()[Lnet/minecraft/class_2826; method_12006 getSections + m (Ljava/util/Map;)V method_12034 setStructureStarts + m (Lnet/minecraft/class_2902$class_2903;II)I method_12005 getTopBlockY + m (Lnet/minecraft/class_2338;)V method_12039 markBlockForPostprocessing + m (Z)V method_12008 setModified + m ()Lnet/minecraft/class_1923; method_12004 getPos + m (Z)V method_12020 setLight + m (Lnet/minecraft/class_2338;)V method_12041 removeTileEntity + m (II)Z method_12228 isEmptyBetween + m ()Lnet/minecraft/class_1951; method_12013 getBlocksToBeTicked + m ()Z method_12044 isModified + m ()Ljava/util/Map; method_12016 getStructureStarts + m ()Lnet/minecraft/class_2806; method_12009 getStatus + m ()Ljava/util/stream/Stream; method_12018 getLightSources + m ()J method_12033 getInhabitedTime + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)Lnet/minecraft/class_2680; method_12010 setBlockState + m ()Lnet/minecraft/class_1951; method_12014 getFluidsToBeTicked + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2487; method_12024 getDeferredTileEntity + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2487; method_20598 getTileEntityNBT + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;)V method_12007 addTileEntity + m ()Lnet/minecraft/class_2843; method_12003 getUpgradeData + m (Lnet/minecraft/class_2902$class_2903;[J)V method_12037 setHeightmap + m ()Lnet/minecraft/class_2826; method_12040 getLastExtendedBlockStorage +c net/minecraft/class_3797 net/minecraft/util/MinecraftVersion + m ()Ljava/lang/String; getName getName + m ()I getWorldVersion getWorldVersion + m ()Ljava/lang/String; getReleaseTarget getReleaseTarget + m ()I getPackVersion getPackVersion + m ()I getProtocolVersion getProtocolVersion + m ()Z isStable isStable + m ()Lcom/mojang/bridge/game/GameVersion; method_16672 load + m ()Ljava/util/Date; getBuildTime getBuildTime + m ()Ljava/lang/String; getId getId + f Ljava/lang/String; field_16733 name + f I field_16736 worldVersion + f Lcom/mojang/bridge/game/GameVersion; field_25319 GAME_VERSION + f Ljava/util/Date; field_16739 buildTime + f Lorg/apache/logging/log4j/Logger; field_16741 LOGGER + f Ljava/lang/String; field_16738 id + f Z field_16737 stable + f Ljava/lang/String; field_16740 releaseTarget + f I field_16734 packVersion + f I field_16735 protocolVersion +c net/minecraft/class_2794 net/minecraft/world/gen/ChunkGenerator + m (IILnet/minecraft/class_2902$class_2903;)I method_20402 getNoiseHeight + m (Lnet/minecraft/class_3233;)V method_12107 func_230354_a_ + m (IILnet/minecraft/class_2902$class_2903;)I method_16397 getHeight + m ()Lnet/minecraft/class_5311; method_12109 func_235957_b_ + m (Lnet/minecraft/class_1923;)Z method_28507 func_235952_a_ + m (Lnet/minecraft/class_1959;Lnet/minecraft/class_5138;Lnet/minecraft/class_1311;Lnet/minecraft/class_2338;)Ljava/util/List; method_12113 func_230353_a_ + m (IILnet/minecraft/class_2902$class_2903;)I method_18028 getNoiseHeightMinusOne + m (Lnet/minecraft/class_3233;Lnet/minecraft/class_2791;)V method_12110 generateSurface + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_5138;Lnet/minecraft/class_2791;Lnet/minecraft/class_3485;J)V method_16129 func_242707_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_3195;Lnet/minecraft/class_2338;IZ)Lnet/minecraft/class_2338; method_12103 func_235956_a_ + m (Lnet/minecraft/class_3233;Lnet/minecraft/class_5138;)V method_12102 func_230351_a_ + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2791;)V method_12106 func_242706_a + m ()V method_28509 func_235958_g_ + m (II)Lnet/minecraft/class_1922; method_26261 func_230348_a_ + m ()I method_12104 getMaxBuildHeight + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_5138;Lnet/minecraft/class_2791;)V method_12088 func_230352_b_ + m (Lnet/minecraft/class_5312;Lnet/minecraft/class_5455;Lnet/minecraft/class_5138;Lnet/minecraft/class_2791;Lnet/minecraft/class_3485;JLnet/minecraft/class_1923;Lnet/minecraft/class_1959;)V method_28508 func_242705_a + m ()Lcom/mojang/serialization/Codec; method_28506 func_230347_a_ + m (Lnet/minecraft/class_3449;)Ljava/lang/String; method_30150 func_241496_c_ + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_5138;Lnet/minecraft/class_2791;)V method_16130 func_235953_a_ + m (J)Lnet/minecraft/class_2794; method_27997 func_230349_a_ + m ()I method_16398 getSeaLevel + m ()Lnet/minecraft/class_1966; method_12098 getBiomeProvider + m (Lnet/minecraft/class_3449;)Ljava/lang/String; method_30149 func_241495_b_ + m ()I method_12100 getGroundHeight + m (Lnet/minecraft/class_3449;)Ljava/lang/String; method_30148 func_241494_a_ + m (JLnet/minecraft/class_4543;Lnet/minecraft/class_2791;Lnet/minecraft/class_2893$class_2894;)V method_12108 func_230350_a_ + f J field_24748 field_235950_e_ + f Lnet/minecraft/class_1966; field_24747 field_235949_c_ + f Lnet/minecraft/class_1966; field_12761 biomeProvider + f Lnet/minecraft/class_5311; field_16567 settings + f Ljava/util/List; field_24749 field_235951_f_ + f Lcom/mojang/serialization/Codec; field_24746 field_235948_a_ +c net/minecraft/class_4239 net/minecraft/util/FileUtil + m (Ljava/nio/file/Path;)Z method_20201 containsReservedName + m (Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/String;)Ljava/nio/file/Path; method_20202 resolveResourcePath + m (Ljava/nio/file/Path;)Z method_20200 isNormalized + m (Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_19773 findAvailableName + f Ljava/util/regex/Pattern; field_18956 DUPLICATE_NAME_COUNT_PATTERN + f Ljava/util/regex/Pattern; field_18955 RESERVED_FILENAMES_PATTERN +c net/minecraft/class_4548 net/minecraft/world/biome/BiomeContainer + m ()[I method_22401 getBiomeIds + f Lorg/apache/logging/log4j/Logger; field_21813 LOGGER + f I field_20649 BIOMES_SIZE + f I field_20653 HEIGHT_BITS + f I field_20651 VERTICAL_MASK + f I field_20650 HORIZONTAL_MASK + f [Lnet/minecraft/class_1959; field_20654 biomes + f Lnet/minecraft/class_2359; field_25831 biomeRegistry + f I field_20652 WIDTH_BITS +c net/minecraft/class_2806 net/minecraft/world/chunk/ChunkStatus + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_16556 func_222586_d + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16566 func_222602_b + m ()Ljava/util/EnumSet; method_12160 getHeightMaps + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16565 func_222587_g + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20615 func_222588_c + m (Ljava/lang/String;Lnet/minecraft/class_2806;ILjava/util/EnumSet;Lnet/minecraft/class_2806$class_2808;Lnet/minecraft/class_2806$class_3768;)Lnet/minecraft/class_2806; method_16555 registerSelective + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3227;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20610 lightChunk + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20609 func_223205_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16564 func_222592_e + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16563 func_222590_c + m (Ljava/lang/String;Lnet/minecraft/class_2806;ILjava/util/EnumSet;Lnet/minecraft/class_2806$class_2808;Lnet/minecraft/class_2806$class_2807;)Lnet/minecraft/class_2806; method_16557 register + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_17036 func_223194_i + m ()I method_16559 ordinal + m (Lit/unimi/dsi/fastutil/ints/IntArrayList;)V method_12166 func_223202_a + m (Lnet/minecraft/class_2806;)I method_12175 getDistance + m (Ljava/lang/String;)Lnet/minecraft/class_2806; method_12168 byName + m ()Ljava/util/List; method_16558 getAll + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20613 func_222604_b + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_2791;)Z method_20608 isLighted + m (Ljava/lang/String;Lnet/minecraft/class_2806;ILjava/util/EnumSet;Lnet/minecraft/class_2806$class_2808;Lnet/minecraft/class_2806$class_2807;Lnet/minecraft/class_2806$class_4305;)Lnet/minecraft/class_2806; method_20611 register + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16569 func_222601_c + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_12151 func_222605_b + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_17033 func_222603_a + m ()Lnet/minecraft/class_2806; method_16560 getParent + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20614 func_223195_b + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16570 func_222594_f + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16567 func_222589_d + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20612 doLoadingWork + m (Lnet/minecraft/class_2806;)Z method_12165 isAtLeast + m ()I method_12152 getTaskRange + m ()I method_12155 maxDistance + m ()Ljava/lang/String; method_12172 getName + m ()Lnet/minecraft/class_2806$class_2808; method_12164 getType + m (I)Lnet/minecraft/class_2806; method_12161 getStatus + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_17034 func_222598_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;)Ljava/util/concurrent/CompletableFuture; method_12154 doGenerationWork + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2806$class_2808; field_12787 type + f Lnet/minecraft/class_2806; field_12803 FULL + f Ljava/lang/String; field_12789 name + f Lnet/minecraft/class_2806; field_12795 FEATURES + f Ljava/util/EnumSet; field_19160 POST_FEATURES + f Lnet/minecraft/class_2806; field_12786 SPAWN + f Lnet/minecraft/class_2806$class_4305; field_19345 NOOP_LOADING_WORKER + f Lnet/minecraft/class_2806; field_16422 STRUCTURE_REFERENCES + f Lnet/minecraft/class_2806; field_12801 CARVERS + f Lnet/minecraft/class_2806; field_12804 NOISE + f Lnet/minecraft/class_2806$class_2807; field_12792 generationWorker + f Lnet/minecraft/class_2806; field_12798 EMPTY + f Ljava/util/EnumSet; field_12793 heightmaps + f I field_16646 ordinal + f Lnet/minecraft/class_2806$class_4305; field_19346 loadingWorker + f Lnet/minecraft/class_2806; field_12790 LIQUID_CARVERS + f Lnet/minecraft/class_2806; field_12800 HEIGHTMAPS + f Ljava/util/EnumSet; field_19159 PRE_FEATURES + f Ljava/util/List; field_12791 STATUS_BY_RANGE + f Lnet/minecraft/class_2806; field_12805 LIGHT + f Lnet/minecraft/class_2806; field_12794 BIOMES + f Lit/unimi/dsi/fastutil/ints/IntList; field_12788 RANGE_BY_STATUS + f Lnet/minecraft/class_2806; field_16423 STRUCTURE_STARTS + f Lnet/minecraft/class_2806; field_12796 SURFACE + f I field_12802 taskRange + f Lnet/minecraft/class_2806; field_16647 parent +c net/minecraft/class_2806$class_2807 net/minecraft/world/chunk/ChunkStatus$IGenerationWorker + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; doWork doWork +c net/minecraft/class_2806$class_2808 net/minecraft/world/chunk/ChunkStatus$Type + m ()[Lnet/minecraft/class_2806$class_2808; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2806$class_2808; valueOf valueOf + f Lnet/minecraft/class_2806$class_2808; field_12807 LEVELCHUNK + f [Lnet/minecraft/class_2806$class_2808; field_12806 $VALUES + f Lnet/minecraft/class_2806$class_2808; field_12808 PROTOCHUNK +c net/minecraft/class_2806$class_3768 net/minecraft/world/chunk/ChunkStatus$ISelectiveWorker + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V doWork doWork +c net/minecraft/class_2806$class_4305 net/minecraft/world/chunk/ChunkStatus$ILoadingWorker + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; doWork doWork +c net/minecraft/class_148 net/minecraft/crash/ReportedException + m ()Ljava/lang/String; getMessage getMessage + m ()Ljava/lang/Throwable; getCause getCause + m ()Lnet/minecraft/class_128; method_631 getCrashReport + f Lnet/minecraft/class_128; field_1119 crashReport +c net/minecraft/class_2802 net/minecraft/world/chunk/AbstractChunkProvider + m (Lnet/minecraft/class_1923;Z)V method_12124 forceChunk + m (IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2791; method_12121 getChunk + m ()Ljava/lang/String; method_12122 makeString + m (Lnet/minecraft/class_2338;)Z method_20529 canTick + m (Lnet/minecraft/class_1923;)Z method_20591 isChunkLoaded + m (II)Z method_12123 chunkExists + m ()V close close + m (ZZ)V method_12128 setAllowedSpawnTypes + m ()Lnet/minecraft/class_3568; method_12130 getLightManager + m (IIZ)Lnet/minecraft/class_2818; method_12126 getChunk + m (Lnet/minecraft/class_1297;)Z method_12125 isChunkLoaded + m (II)Lnet/minecraft/class_2818; method_21730 getChunkNow +c net/minecraft/class_151 net/minecraft/util/ResourceLocationException +c net/minecraft/class_2812 net/minecraft/world/chunk/EmptyChunk + m ([Lnet/minecraft/class_1959;)V method_12188 func_203406_b + f [Lnet/minecraft/class_1959; field_12814 BIOMES +c net/minecraft/class_155 net/minecraft/util/SharedConstants + m ()Lcom/mojang/bridge/game/GameVersion; method_16673 getVersion + m (C)Z method_643 isAllowedCharacter + m (Ljava/lang/String;)Ljava/lang/String; method_644 filterAllowedCharacters + f Z field_25135 useDatafixers + f J field_22251 field_240855_b_ + f Lio/netty/util/ResourceLeakDetector$Level; field_1124 NETTY_LEAK_DETECTION + f Lcom/mojang/bridge/game/GameVersion; field_16742 version + f Z field_1125 developmentMode + f [C field_1126 ILLEGAL_FILE_CHARACTERS +c net/minecraft/class_2804 net/minecraft/world/chunk/NibbleArray + m (III)I method_12140 getCoordinateIndex + m ()Lnet/minecraft/class_2804; method_12144 copy + m (IIII)V method_12145 set + m ()Ljava/lang/String; toString toString + m ()Z method_12146 isEmpty + m (I)I method_12141 getFromIndex + m (II)V method_12142 setIndex + m (III)I method_12139 get + m (I)I method_12138 getNibbleIndex + m ()[B method_12137 getData + m (I)Z method_12143 isLowerNibble + f [B field_12783 data +c net/minecraft/class_156 net/minecraft/util/Util + m (Ljava/util/stream/IntStream;I)Lcom/mojang/serialization/DataResult; method_29190 validateIntStreamSize + m ()Ljava/util/concurrent/ExecutorService; method_27959 startThreadedService + m (Ljava/lang/String;Ljava/util/function/Consumer;)Ljava/util/function/Consumer; method_29188 func_240982_a_ + m (Ljava/nio/file/Path;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_29775 func_240984_a_ + m (Ljava/util/function/Supplier;)Ljava/lang/Object; method_656 make + m (Ljava/nio/file/Path;)Ljava/util/function/BooleanSupplier; method_30628 func_244366_b + m (Ljava/util/List;)Ljava/util/concurrent/CompletableFuture; method_652 gather + m (Ljava/lang/Throwable;)Ljava/lang/String; method_22321 getMessage + m (Lnet/minecraft/class_5462;I)Ljava/lang/String; method_30623 func_244360_a + m (Lnet/minecraft/class_2769;Ljava/lang/Object;)Ljava/lang/String; method_650 getValueName + m (Ljava/lang/Throwable;)V method_24155 toRuntimeException + m ()Lnet/minecraft/class_156$class_158; method_668 getOSType + m (Ljava/util/concurrent/CompletableFuture;Ljava/util/List;ILjava/lang/Object;Ljava/lang/Throwable;)V method_18842 func_215085_a + m ()J method_648 nanoTime + m (Ljava/util/List;)Ljava/lang/Object; method_20793 getLast + m ([Ljava/lang/Object;Ljava/util/Random;)Ljava/lang/Object; method_27173 getRandomObject + m ()Ljava/util/concurrent/Executor; method_28124 getBootstrapService + m (Lcom/mojang/datafixers/DSL$TypeReference;Ljava/lang/String;)Lcom/mojang/datafixers/types/Type; method_29191 attemptDataFixInternal + m (Ljava/lang/Runnable;Ljava/util/function/Supplier;)Ljava/lang/Runnable; method_18839 namedRunnable + m (Ljava/util/List;[Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;)V method_18841 func_215083_a + m (Ljava/lang/Thread;Ljava/lang/Throwable;)V method_18347 printException + m (Ljava/lang/Object;Ljava/util/function/Consumer;)Ljava/lang/Object; method_654 make + m (Ljava/lang/Iterable;Ljava/lang/Object;)Ljava/lang/Object; method_660 getElementAfter + m ()Ljava/util/concurrent/Executor; method_27958 getRenderingService + m (Ljava/lang/String;Lnet/minecraft/class_5462;)Ljava/lang/String; method_30309 func_244361_a + m ([Ljava/util/function/BooleanSupplier;)Z method_30627 func_244365_a + m ()J method_658 milliTime + m (Ljava/util/List;Ljava/lang/Void;)Ljava/util/List; method_18840 func_215089_a + m (Ljava/lang/String;Ljava/util/concurrent/ForkJoinPool;)Ljava/util/concurrent/ForkJoinWorkerThread; method_28123 func_240981_a_ + m (Ljava/nio/file/Path;)Ljava/util/function/BooleanSupplier; method_30624 func_244362_a + m (Ljava/util/function/Consumer;Ljava/lang/String;Ljava/lang/String;)V method_29189 func_240986_a_ + m (Ljava/lang/Throwable;)Ljava/lang/Throwable; method_22320 pauseDevMode + m ()Ljava/util/stream/Collector; method_664 toMapCollector + m (Ljava/lang/String;Lnet/minecraft/class_2960;)Ljava/lang/String; method_646 makeTranslationKey + m (Ljava/nio/file/Path;)Ljava/util/function/BooleanSupplier; method_30629 func_244367_c + m (Ljava/io/File;Ljava/io/File;Ljava/io/File;)V method_27760 backupThenUpdate + m (Ljava/nio/file/Path;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_30626 func_244364_a + m (Ljava/lang/Runnable;)Ljava/lang/Thread; method_27956 func_240978_a_ + m ()J method_659 millisecondsSinceEpoch + m ()Lorg/apache/logging/log4j/Logger; method_667 access$100 + m ()Lit/unimi/dsi/fastutil/Hash$Strategy; method_655 identityHashStrategy + m ()V method_18350 shutdown + m ()Ljava/util/concurrent/Executor; method_18349 getServerExecutor + m (Lcom/mojang/datafixers/DSL$TypeReference;Ljava/lang/String;)Lcom/mojang/datafixers/types/Type; method_29187 attemptDataFix + m (Ljava/util/concurrent/ExecutorService;)V method_27957 shutdownService + m (Ljava/lang/String;)Ljava/util/concurrent/ExecutorService; method_28122 createNamedService + m (Ljava/lang/String;II)I method_27761 func_240980_a_ + m (Ljava/lang/String;)Z method_666 func_211566_a + m ([ILjava/util/Random;)I method_27172 getRandomInt + m (Ljava/lang/Throwable;)Ljava/util/concurrent/CompletableFuture; method_19483 completedExceptionallyFuture + m ()V method_29476 func_240994_l_ + m (Ljava/lang/Iterable;Ljava/lang/Object;)Ljava/lang/Object; method_645 getElementBefore + m ()Ljava/util/stream/Stream; method_651 getJvmFlags + m (Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/util/function/BooleanSupplier; method_30625 func_244363_a + m (ILjava/lang/String;[Ljava/util/function/BooleanSupplier;)Z method_30622 func_244359_a + m (Ljava/util/Optional;Ljava/util/function/Consumer;Ljava/lang/Runnable;)Ljava/util/Optional; method_17974 acceptOrElse + m (Ljava/util/Optional;)Ljava/util/stream/Stream; method_17815 streamOptional + f Ljava/util/UUID; field_25140 DUMMY_UUID + f Ljava/util/concurrent/atomic/AtomicInteger; field_18034 NEXT_SERVER_WORKER_ID + f Ljava/util/function/LongSupplier; field_1128 nanoTimeSupplier + f Ljava/util/concurrent/ExecutorService; field_18035 SERVER_EXECUTOR + f Ljava/util/concurrent/ExecutorService; field_24477 RENDERING_SERVICE + f Ljava/util/concurrent/ExecutorService; field_24622 BOOTSTRAP_SERVICE + f Lorg/apache/logging/log4j/Logger; field_1129 LOGGER +c net/minecraft/class_156$1 net/minecraft/util/Util$1 + m (Ljava/lang/Throwable;)V onTermination onTermination +c net/minecraft/class_156$3 net/minecraft/util/Util$3 + m ()Ljava/lang/String; toString toString + m ()Z getAsBoolean getAsBoolean + f Ljava/nio/file/Path; field_26350 field_244370_a +c net/minecraft/class_156$2 net/minecraft/util/Util$2 + m ()Ljava/lang/String; toString toString + m ()Z getAsBoolean getAsBoolean + f Ljava/nio/file/Path; field_26349 field_244369_b + f Ljava/nio/file/Path; field_26348 field_244368_a +c net/minecraft/class_156$5 net/minecraft/util/Util$5 + m ()Ljava/lang/String; toString toString + m ()Z getAsBoolean getAsBoolean + f Ljava/nio/file/Path; field_26352 field_244372_a +c net/minecraft/class_156$4 net/minecraft/util/Util$4 + m ()Z getAsBoolean getAsBoolean + m ()Ljava/lang/String; toString toString + f Ljava/nio/file/Path; field_26351 field_244371_a +c net/minecraft/class_156$6 net/minecraft/util/Util$6 + m ()V run run +c net/minecraft/class_156$class_157 net/minecraft/util/Util$IdentityStrategy + m (Ljava/lang/String;)Lnet/minecraft/class_156$class_157; valueOf valueOf + m (Ljava/lang/Object;Ljava/lang/Object;)Z equals equals + m (Ljava/lang/Object;)I hashCode hashCode + m ()[Lnet/minecraft/class_156$class_157; values values + f [Lnet/minecraft/class_156$class_157; field_1131 $VALUES + f Lnet/minecraft/class_156$class_157; field_1130 INSTANCE +c net/minecraft/class_156$class_158 net/minecraft/util/Util$OS + m (Ljava/net/URL;)[Ljava/lang/String; method_674 getOpenCommandLine + m (Ljava/net/URL;)Ljava/lang/Process; method_671 func_210208_c + m (Ljava/net/URI;)V method_673 openURI + m (Ljava/io/File;)V method_672 openFile + m ()[Lnet/minecraft/class_156$class_158; values values + m (Ljava/lang/String;)Lnet/minecraft/class_156$class_158; valueOf valueOf + m (Ljava/net/URL;)V method_669 openURL + m (Ljava/lang/String;)V method_670 openURI + f Lnet/minecraft/class_156$class_158; field_1134 SOLARIS + f Lnet/minecraft/class_156$class_158; field_1133 WINDOWS + f Lnet/minecraft/class_156$class_158; field_1137 OSX + f [Lnet/minecraft/class_156$class_158; field_1136 $VALUES + f Lnet/minecraft/class_156$class_158; field_1135 LINUX + f Lnet/minecraft/class_156$class_158; field_1132 UNKNOWN +c net/minecraft/class_156$class_158$2 net/minecraft/util/Util$OS$2 +c net/minecraft/class_156$class_158$1 net/minecraft/util/Util$OS$1 +c net/minecraft/class_161 net/minecraft/advancements/Advancement + m ()Lnet/minecraft/class_185; method_686 getDisplay + m ()Lnet/minecraft/class_2960; method_688 getId + m ()Ljava/util/Map; method_682 getCriteria + m ()Ljava/lang/String; toString toString + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_685 func_211567_a_ + m (Lnet/minecraft/class_161;)V method_690 addChild + m ()Ljava/lang/Iterable; method_681 getChildren + m ()Lnet/minecraft/class_2561; method_684 getDisplayText + m ()I hashCode hashCode + m ()I method_683 getRequirementCount + m ()[[Ljava/lang/String; method_680 getRequirements + m ()Lnet/minecraft/class_161$class_162; method_689 copy + m ()Lnet/minecraft/class_161; method_687 getParent + m ()Lnet/minecraft/class_170; method_691 getRewards + f Lnet/minecraft/class_170; field_1145 rewards + f Lnet/minecraft/class_2561; field_1141 displayText + f Lnet/minecraft/class_2960; field_1144 id + f [[Ljava/lang/String; field_1142 requirements + f Lnet/minecraft/class_185; field_1146 display + f Ljava/util/Set; field_1140 children + f Ljava/util/Map; field_1139 criteria + f Lnet/minecraft/class_161; field_1143 parent +c net/minecraft/class_161$1 net/minecraft/advancements/Advancement$1 +c net/minecraft/class_161$class_162 net/minecraft/advancements/Advancement$Builder + m (Lnet/minecraft/class_170$class_171;)Lnet/minecraft/class_161$class_162; method_703 withRewards + m (Lnet/minecraft/class_193;)Lnet/minecraft/class_161$class_162; method_704 withRequirementsStrategy + m ()Lcom/google/gson/JsonObject; method_698 serialize + m (Lnet/minecraft/class_161;)Lnet/minecraft/class_161$class_162; method_701 withParent + m (Ljava/lang/String;Lnet/minecraft/class_175;)Lnet/minecraft/class_161$class_162; method_705 withCriterion + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_161$class_162; method_709 withCriterion + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_161$class_162; method_696 readFrom + m (Ljava/util/function/Consumer;Ljava/lang/String;)Lnet/minecraft/class_161; method_694 register + m (Lnet/minecraft/class_1935;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;Lnet/minecraft/class_2960;Lnet/minecraft/class_189;ZZZ)Lnet/minecraft/class_161$class_162; method_697 withDisplay + m ()Lnet/minecraft/class_161$class_162; method_707 builder + m (Lnet/minecraft/class_185;)Lnet/minecraft/class_161$class_162; method_693 withDisplay + m ()Ljava/util/Map; method_710 getCriteria + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Lnet/minecraft/class_161$class_162; method_692 deserialize + m (Lnet/minecraft/class_2540;)V method_699 writeTo + m (Ljava/util/function/Function;)Z method_700 resolveParent + m (Lnet/minecraft/class_170;)Lnet/minecraft/class_161$class_162; method_706 withRewards + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_161$class_162; method_708 withParentId + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_161; method_702 func_199750_c + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_161; method_695 build + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;Lnet/minecraft/class_2960;Lnet/minecraft/class_189;ZZZ)Lnet/minecraft/class_161$class_162; method_20416 withDisplay + f Lnet/minecraft/class_170; field_1153 rewards + f Lnet/minecraft/class_193; field_1151 requirementsStrategy + f Lnet/minecraft/class_185; field_1147 display + f [[Ljava/lang/String; field_1150 requirements + f Lnet/minecraft/class_161; field_1149 parent + f Lnet/minecraft/class_2960; field_1152 parentId + f Ljava/util/Map; field_1148 criteria +c net/minecraft/class_163 net/minecraft/advancements/AdvancementList + m ()Ljava/lang/Iterable; method_715 getRoots + m (Ljava/util/Set;)V method_713 removeAll + m ()V method_714 clear + m ()Ljava/util/Collection; method_712 getAll + m (Ljava/util/Map;)V method_711 loadAdvancements + m (Lnet/minecraft/class_161;)V method_718 remove + m (Lnet/minecraft/class_163$class_164;)V method_717 setListener + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_161; method_716 getAdvancement + f Ljava/util/Set; field_1156 nonRoots + f Ljava/util/Map; field_1157 advancements + f Ljava/util/Set; field_1154 roots + f Lnet/minecraft/class_163$class_164; field_1155 listener + f Lorg/apache/logging/log4j/Logger; field_1158 LOGGER +c net/minecraft/class_163$class_164 net/minecraft/advancements/AdvancementList$IListener + m (Lnet/minecraft/class_161;)V method_720 rootAdvancementRemoved + m (Lnet/minecraft/class_161;)V method_723 rootAdvancementAdded + m (Lnet/minecraft/class_161;)V method_719 nonRootAdvancementRemoved + m ()V method_722 advancementsCleared + m (Lnet/minecraft/class_161;)V method_721 nonRootAdvancementAdded +c net/minecraft/class_2810 net/minecraft/world/IStructureReader + m (Ljava/util/Map;)V method_12183 setStructureReferences + m (Lnet/minecraft/class_3195;Lnet/minecraft/class_3449;)V method_12184 func_230344_a_ + m (Lnet/minecraft/class_3195;)Lnet/minecraft/class_3449; method_12181 func_230342_a_ + m ()Ljava/util/Map; method_12179 getStructureReferences + m (Lnet/minecraft/class_3195;J)V method_12182 func_230343_a_ + m (Lnet/minecraft/class_3195;)Lit/unimi/dsi/fastutil/longs/LongSet; method_12180 func_230346_b_ +c net/minecraft/class_2814 net/minecraft/util/palette/HashMapPalette + m ()I method_12197 getPaletteSize + m (Lnet/minecraft/class_2499;)V method_12196 writePaletteToList + f Ljava/util/function/Function; field_12823 deserializer + f Lnet/minecraft/class_2835; field_12825 paletteResizer + f Lnet/minecraft/class_3513; field_12824 statePaletteMap + f I field_12822 bits + f Lnet/minecraft/class_2361; field_12821 registry + f Ljava/util/function/Function; field_12826 serializer +c net/minecraft/class_2816 net/minecraft/util/palette/IdentityPalette + f Lnet/minecraft/class_2361; field_12828 registry + f Ljava/lang/Object; field_12829 defaultState +c net/minecraft/class_2818 net/minecraft/world/chunk/Chunk + m (Lnet/minecraft/class_1297;I)V method_12219 removeEntityAtIndex + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_3611; method_12230 func_222878_k + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_238;Ljava/util/List;Ljava/util/function/Predicate;)V method_18029 getEntitiesWithinAABBForList + m (Lnet/minecraft/class_2338;)Z method_18320 func_217315_n + m (III)Ljava/lang/String; method_12227 func_217322_c + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2818$class_2819;)Lnet/minecraft/class_2586; method_12201 getTileEntity + m (Z)V method_12226 setLoaded + m ()Lnet/minecraft/class_3568; method_12023 getWorldLightManager + m (Lnet/minecraft/class_3195;)Lit/unimi/dsi/fastutil/longs/LongSet; method_12222 func_235960_c_ + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_18089 func_217325_c + m ()V method_20530 rescheduleTicks + m (ILnet/minecraft/class_2338;)Z method_18319 func_217323_a + m ()Lnet/minecraft/class_1937; method_12200 getWorld + m (Lnet/minecraft/class_1297;)V method_12203 removeEntity + m ()Ljava/util/Map; method_12214 getTileEntityMap + m (Ljava/util/function/Supplier;)V method_12207 setLocationType + m (III)Lnet/minecraft/class_3610; method_12234 getFluidState + m (Lnet/minecraft/class_3218;)V method_20471 saveScheduledTicks + m (Lnet/minecraft/class_2586;)V method_12216 addTileEntity + m ()Z method_12223 isEmpty + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2248; method_12209 func_222881_l + m (Lnet/minecraft/class_4548;Lnet/minecraft/class_2540;Lnet/minecraft/class_2487;I)V method_12224 read + m (Ljava/lang/Class;Lnet/minecraft/class_238;Ljava/util/List;Ljava/util/function/Predicate;)V method_12210 getEntitiesOfTypeWithinAABB + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/List;Ljava/util/function/Predicate;)V method_12205 getEntitiesWithinAABBForEntity + m (Z)V method_12232 setHasEntities + m ()V method_12220 markDirty + m (Lnet/minecraft/class_2338;)Z method_12217 func_217312_m + m (III)Ljava/lang/String; method_12202 func_217327_b + m ()V method_12221 postProcess + m (Lnet/minecraft/class_3195;)Lit/unimi/dsi/fastutil/longs/LongSet; method_12212 func_235961_d_ + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2586; method_12208 createNewTileEntity + m ()V method_12206 postLoad + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2586; method_12204 setDeferredTileEntity + m ()[Lnet/minecraft/class_3509; method_12215 getEntityLists + m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_2902; method_12231 func_217319_d + m ()Lnet/minecraft/class_3193$class_3194; method_12225 getLocationType + f Lorg/apache/logging/log4j/Logger; field_12839 LOGGER + f Lnet/minecraft/class_2843; field_12849 upgradeData + f Z field_12837 hasEntities + f Z field_12834 dirty + f Ljava/util/function/Consumer; field_12850 postLoadConsumer + f [Lnet/minecraft/class_2826; field_12840 sections + f Ljava/util/Map; field_12846 deferredTileEntities + f Lnet/minecraft/class_1951; field_12841 blocksToBeTicked + f Lnet/minecraft/class_1923; field_12848 pos + f Z field_12855 loaded + f Ljava/util/Map; field_12845 structureReferences + f Lnet/minecraft/class_2826; field_12852 EMPTY_SECTION + f [Lnet/minecraft/class_3509; field_12833 entityLists + f J field_12843 inhabitedTime + f Lnet/minecraft/class_1951; field_12857 fluidsToBeTicked + f Lnet/minecraft/class_4548; field_20655 blockBiomeArray + f J field_12844 lastSaveTime + f Lnet/minecraft/class_1937; field_12858 world + f Ljava/util/Map; field_12853 heightMap + f Ljava/util/function/Supplier; field_12856 locationType + f Ljava/util/Map; field_12854 tileEntities + f Ljava/util/Map; field_12838 structureStarts + f [Lit/unimi/dsi/fastutil/shorts/ShortList; field_12836 packedBlockPositions + f Z field_12847 lightCorrect +c net/minecraft/class_2818$class_2819 net/minecraft/world/chunk/Chunk$CreateEntityType + m (Ljava/lang/String;)Lnet/minecraft/class_2818$class_2819; valueOf valueOf + m ()[Lnet/minecraft/class_2818$class_2819; values values + f Lnet/minecraft/class_2818$class_2819; field_12860 IMMEDIATE + f [Lnet/minecraft/class_2818$class_2819; field_12862 $VALUES + f Lnet/minecraft/class_2818$class_2819; field_12861 QUEUED + f Lnet/minecraft/class_2818$class_2819; field_12859 CHECK +c net/minecraft/class_2821 net/minecraft/world/chunk/ChunkPrimerWrapper + m ()Lnet/minecraft/class_2818; method_12240 getChunk + m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_2902$class_2903; method_12239 func_209532_c + m (Lnet/minecraft/class_3611;)Z method_12241 func_209218_a + m (Lnet/minecraft/class_2248;)Z method_12242 func_209219_a + f Lnet/minecraft/class_2818; field_12866 chunk +c net/minecraft/class_2823 net/minecraft/world/chunk/IChunkLightProvider + m (Lnet/minecraft/class_1944;Lnet/minecraft/class_4076;)V method_12247 markLightChanged + m (II)Lnet/minecraft/class_1922; method_12246 getChunkForLight + m ()Lnet/minecraft/class_1922; method_16399 getWorld +c net/minecraft/class_2826 net/minecraft/world/chunk/ChunkSection + m (Lnet/minecraft/class_2540;)V method_12257 write + m ()Z method_12262 needsRandomTickAny + m (Lnet/minecraft/class_2540;)V method_12258 read + m (Ljava/util/function/Predicate;)Z method_19523 isValidPOIState + m ()Z method_12261 isEmpty + m (Lnet/minecraft/class_2680;I)V method_21731 func_225496_a + m (Lnet/minecraft/class_2826;)Z method_18090 isEmpty + m ()V method_16676 lock + m (IIILnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_16675 setBlockState + m ()Lnet/minecraft/class_2841; method_12265 getData + m ()I method_12259 getYLocation + m ()V method_16677 unlock + m (III)Lnet/minecraft/class_2680; method_12254 getBlockState + m ()Z method_12263 needsRandomTick + m (III)Lnet/minecraft/class_3610; method_12255 getFluidState + m ()I method_12260 getSize + m (IIILnet/minecraft/class_2680;Z)Lnet/minecraft/class_2680; method_12256 setBlockState + m ()V method_12253 recalculateRefCounts + m ()Z method_12264 needsRandomTickFluid + f Lnet/minecraft/class_2841; field_12878 data + f I field_12880 yBase + f Lnet/minecraft/class_2837; field_12879 REGISTRY_PALETTE + f S field_12877 blockRefCount + f S field_12881 fluidRefCount + f S field_12882 blockTickRefCount +c net/minecraft/class_2832 net/minecraft/world/chunk/storage/NibbleArrayReader + m (III)I method_12275 get + f I field_12892 depthBitsPlusFour + f [B field_12894 data + f I field_12893 depthBits +c net/minecraft/class_2834 net/minecraft/util/palette/ArrayPalette + m ()I method_12282 getPaletteSize + f Lnet/minecraft/class_2835; field_12905 resizeHandler + f I field_12901 arraySize + f [Ljava/lang/Object; field_12904 states + f Ljava/util/function/Function; field_12902 deserializer + f I field_12903 bits + f Lnet/minecraft/class_2361; field_12900 registry +c net/minecraft/class_2835 net/minecraft/util/palette/IResizeCallback + m (ILjava/lang/Object;)I onResize onResize +c net/minecraft/class_2837 net/minecraft/util/palette/IPalette + m (Lnet/minecraft/class_2540;)V method_12289 read + m (Lnet/minecraft/class_2499;)V method_12286 read + m ()I method_12290 getSerializedSize + m (I)Ljava/lang/Object; method_12288 get + m (Ljava/util/function/Predicate;)Z method_19525 func_230341_a_ + m (Lnet/minecraft/class_2540;)V method_12287 write + m (Ljava/lang/Object;)I method_12291 idFor +c net/minecraft/class_2839 net/minecraft/world/chunk/ChunkPrimer + m (Lnet/minecraft/class_2893$class_2894;)Ljava/util/BitSet; method_12025 getCarvingMask + m (Lnet/minecraft/class_3195;)Lit/unimi/dsi/fastutil/longs/LongSet; method_12298 func_235966_d_ + m ()[Lit/unimi/dsi/fastutil/shorts/ShortList; method_12296 getPackedLightPositions + m (SILnet/minecraft/class_1923;)Lnet/minecraft/class_2338; method_12314 unpackToWorld + m ()Lnet/minecraft/class_3568; method_12023 getWorldLightManager + m (Lnet/minecraft/class_2338;)S method_12300 packToLocal + m (Lnet/minecraft/class_2338;)V method_12315 addLightPosition + m (Lnet/minecraft/class_3568;)V method_17032 setLightManager + m (Lnet/minecraft/class_3195;)Lit/unimi/dsi/fastutil/longs/LongSet; method_12305 func_235965_c_ + m (Lnet/minecraft/class_4548;)V method_22405 setBiomes + m (Lnet/minecraft/class_2248;)Z method_12311 func_205332_a + m (Lnet/minecraft/class_2487;)V method_12302 addEntity + m ()Ljava/util/Map; method_12309 getTileEntities + m ()Lnet/minecraft/class_2850; method_12313 getFluidsToBeTicked + m (SI)V method_12304 addLightValue + m (I)Lnet/minecraft/class_2826; method_16679 getSection + m (Lnet/minecraft/class_2893$class_2894;Ljava/util/BitSet;)V method_12307 setCarvingMask + m ()Ljava/util/Map; method_12316 getDeferredTileEntities + m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_2902; method_12299 func_217333_d + m ()Ljava/util/List; method_12295 getEntities + m ()Lnet/minecraft/class_2850; method_12303 getBlocksToBeTicked + m (Lnet/minecraft/class_2806;)V method_12308 setStatus + m (Lnet/minecraft/class_2893$class_2894;)Ljava/util/BitSet; method_12297 func_235964_c_ + m (Lnet/minecraft/class_3611;)Z method_12310 func_205766_a + m (Lnet/minecraft/class_2893$class_2894;)Ljava/util/BitSet; method_28510 getOrAddCarvingMask + f Ljava/util/List; field_12919 lightPositions + f Ljava/util/Map; field_12915 structureStartMap + f Lnet/minecraft/class_2850; field_12911 pendingBlockTicks + f Lnet/minecraft/class_2850; field_12923 pendingFluidTicks + f Ljava/util/Map; field_12930 structureReferenceMap + f Lorg/apache/logging/log4j/Logger; field_12920 LOGGER + f Ljava/util/Map; field_12926 carvingMasks + f Lnet/minecraft/class_1923; field_12928 pos + f Lnet/minecraft/class_3568; field_17105 lightManager + f J field_12925 inhabitedTime + f Lnet/minecraft/class_4548; field_20656 biomes + f Lnet/minecraft/class_2843; field_12916 upgradeData + f Lnet/minecraft/class_2806; field_12918 status + f Ljava/util/Map; field_12912 heightmaps + f Ljava/util/Map; field_12917 tileEntities + f Ljava/util/Map; field_12927 deferredTileEntities + f Z field_12924 modified + f [Lnet/minecraft/class_2826; field_12909 sections + f [Lit/unimi/dsi/fastutil/shorts/ShortList; field_12921 packedPositions + f Z field_12914 hasLight + f Ljava/util/List; field_12929 entities +c net/minecraft/class_2841 net/minecraft/util/palette/PalettedContainer + m (Ljava/lang/Thread;)Ljava/lang/String; method_12332 func_210458_a + m (ILjava/lang/Object;)Ljava/lang/Object; method_12336 doSwap + m (Lit/unimi/dsi/fastutil/ints/Int2IntMap;I)V method_21734 func_225498_a + m (IIILjava/lang/Object;)Ljava/lang/Object; method_16678 swap + m (Lnet/minecraft/class_2841$class_4464;)V method_21732 count + m (ILjava/lang/Object;)V method_12322 set + m (Lnet/minecraft/class_2841$class_4464;Lit/unimi/dsi/fastutil/ints/Int2IntMap$Entry;)V method_21733 func_225499_a + m (IIILjava/lang/Object;)Ljava/lang/Object; method_12328 lockedSwap + m (Lnet/minecraft/class_2487;Ljava/lang/String;Ljava/lang/String;)V method_12330 writeChunkPalette + m (Ljava/util/function/Predicate;)Z method_19526 func_235963_a_ + m ()V method_12335 unlock + m (Lnet/minecraft/class_2540;)V method_12326 read + m (Lnet/minecraft/class_2499;[J)V method_12329 readChunkPalette + m ()V method_12334 lock + m (ILjava/lang/Object;)I method_12333 func_205517_b + m (III)I method_12323 getIndex + m (I)Ljava/lang/Object; method_12331 get + m ()I method_12327 getSerializedSize + m (I)V method_12324 setBits + m (III)Ljava/lang/Object; method_12321 get + m (Lnet/minecraft/class_2540;)V method_12325 write + f Lnet/minecraft/class_2361; field_12938 registry + f Lnet/minecraft/class_2835; field_12942 dummyPaletteResize + f Ljava/util/concurrent/locks/ReentrantLock; field_12937 lock + f Ljava/lang/Object; field_12935 defaultState + f Ljava/util/function/Function; field_12943 deserializer + f Lnet/minecraft/class_2837; field_12936 palette + f Ljava/util/function/Function; field_12939 serializer + f Lnet/minecraft/class_2837; field_12940 registryPalette + f Lnet/minecraft/class_3508; field_12941 storage + f I field_12934 bits +c net/minecraft/class_2841$class_4464 net/minecraft/util/palette/PalettedContainer$ICountConsumer + m (Ljava/lang/Object;I)V accept accept +c net/minecraft/class_2843 net/minecraft/util/palette/UpgradeData + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_12351 func_196987_a + m (Lnet/minecraft/class_2818;)V method_12348 func_196989_a + m ()Lnet/minecraft/class_2487; method_12350 write + m (Lnet/minecraft/class_2818;)V method_12356 postProcessChunk + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2843$class_2844;)V method_12353 func_208829_a + m ()Z method_12349 isEmpty + m ()Ljava/util/Set; method_12355 func_208831_d + m ()Ljava/util/Map; method_12354 func_208830_c + m (Lnet/minecraft/class_2818;Lnet/minecraft/class_2355;)V method_12352 func_196991_a + f Ljava/util/EnumSet; field_12951 field_196995_b + f Lnet/minecraft/class_2843; field_12950 EMPTY + f Lorg/apache/logging/log4j/Logger; field_12956 LOGGER + f [[I field_12955 field_196996_c + f [Lnet/minecraft/class_2355; field_12952 field_208832_b + f Ljava/util/Map; field_12953 field_196997_d + f Ljava/util/Set; field_12954 FIXERS +c net/minecraft/class_2843$class_2845 net/minecraft/util/palette/UpgradeData$BlockFixers + m (Ljava/lang/String;)Lnet/minecraft/class_2843$class_2845; valueOf valueOf + m ()[Lnet/minecraft/class_2843$class_2845; values values + f [Lnet/minecraft/class_2350; field_12959 field_208827_f + f Lnet/minecraft/class_2843$class_2845; field_12957 BLACKLIST + f [Lnet/minecraft/class_2843$class_2845; field_12961 $VALUES + f Lnet/minecraft/class_2843$class_2845; field_12958 STEM_BLOCK + f Lnet/minecraft/class_2843$class_2845; field_12960 CHEST + f Lnet/minecraft/class_2843$class_2845; field_12962 DEFAULT + f Lnet/minecraft/class_2843$class_2845; field_12963 LEAVES +c net/minecraft/class_2843$class_2845$5 net/minecraft/util/palette/UpgradeData$BlockFixers$5 +c net/minecraft/class_2843$class_2845$3 net/minecraft/util/palette/UpgradeData$BlockFixers$3 +c net/minecraft/class_2843$class_2845$4 net/minecraft/util/palette/UpgradeData$BlockFixers$4 + m ()Ljava/util/List; method_12359 func_209161_a + f Ljava/lang/ThreadLocal; field_12964 field_208828_g +c net/minecraft/class_2843$class_2845$1 net/minecraft/util/palette/UpgradeData$BlockFixers$1 +c net/minecraft/class_2843$class_2845$2 net/minecraft/util/palette/UpgradeData$BlockFixers$2 +c net/minecraft/class_2843$class_2844 net/minecraft/util/palette/UpgradeData$IBlockFixer + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_12358 func_196982_a + m (Lnet/minecraft/class_1936;)V method_12357 func_208826_a +c net/minecraft/class_2843$1 net/minecraft/util/palette/UpgradeData$1 +c net/minecraft/class_2850 net/minecraft/world/chunk/ChunkPrimerTickList + m ()Lnet/minecraft/class_2499; method_12367 write + m (Lnet/minecraft/class_1951;Ljava/util/function/Function;)V method_12368 postProcess + f Lnet/minecraft/class_1923; field_12993 pos + f Ljava/util/function/Predicate; field_12991 filter + f [Lit/unimi/dsi/fastutil/shorts/ShortList; field_12990 packedPositions +c net/minecraft/class_2852 net/minecraft/world/chunk/storage/ChunkSerializer + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2818;)V method_12386 readEntities + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2806$class_2808; method_12377 getChunkStatus + m (Lnet/minecraft/class_1923;Ljava/lang/String;J)Z method_24029 func_227074_a_ + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2487;J)Ljava/util/Map; method_12392 func_235967_a_ + m (Lnet/minecraft/class_3611;)Z method_12391 func_222646_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_4153;Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2839; method_12395 read + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2791;)Lnet/minecraft/class_2487; method_12410 write + m (Lnet/minecraft/class_2818;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_18091 func_222655_a + m (Lnet/minecraft/class_1923;Ljava/util/Map;Ljava/util/Map;)Lnet/minecraft/class_2487; method_12385 writeStructures + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)Ljava/util/Map; method_12387 unpackStructureReferences + m (ILnet/minecraft/class_2826;)Z method_12376 func_222657_a + m ([Lit/unimi/dsi/fastutil/shorts/ShortList;)Lnet/minecraft/class_2499; method_12393 toNbt + m (Lnet/minecraft/class_2248;)Z method_12396 func_222652_a + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2818;)V method_12388 func_222648_b + f Lorg/apache/logging/log4j/Logger; field_13001 LOGGER +c net/minecraft/class_4698 net/minecraft/world/chunk/storage/IOWorker + m (Lnet/minecraft/class_1923;)Lcom/mojang/datafixers/util/Either; method_27943 func_235980_b_ + m (Lnet/minecraft/class_3906;)V method_27942 func_235979_b_ + m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_23700 func_227090_a_ + m (Lnet/minecraft/class_3906;Ljava/util/function/Supplier;)V method_27939 func_235972_a_ + m (Ljava/util/function/Supplier;Lnet/minecraft/class_3906;)Lnet/minecraft/class_3847$class_3907; method_27941 func_235976_a_ + m (I)[Ljava/util/concurrent/CompletableFuture; method_23699 func_235970_a_ + m ()Lcom/mojang/datafixers/util/Either; method_27946 func_235983_d_ + m (Lnet/minecraft/class_4698$class_4699;)Ljava/util/concurrent/CompletableFuture; method_23705 func_235973_a_ + m (Lnet/minecraft/class_3906;)Lnet/minecraft/class_3847$class_3907; method_27938 func_235971_a_ + m ()Lcom/mojang/datafixers/util/Either; method_27947 func_235984_e_ + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)Ljava/util/concurrent/CompletableFuture; method_23703 func_227093_a_ + m (Ljava/lang/Void;)Ljava/util/concurrent/CompletionStage; method_27940 func_235974_a_ + m (Ljava/util/function/Supplier;)Ljava/util/concurrent/CompletableFuture; method_23709 func_235975_a_ + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_4698$class_4699;)V method_23701 func_227091_a_ + m ()V close close + m ()Ljava/util/concurrent/CompletableFuture; method_23698 func_227088_a_ + m ()V method_27945 func_235982_c_ + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1923;)Lnet/minecraft/class_4698$class_4699; method_23711 func_235977_a_ + m ()V method_23719 func_235978_b_ + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)Lcom/mojang/datafixers/util/Either; method_27944 func_235981_b_ + f Lorg/apache/logging/log4j/Logger; field_21495 LOGGER + f Ljava/util/concurrent/atomic/AtomicBoolean; field_21497 field_227082_c_ + f Lnet/minecraft/class_2867; field_21499 field_227084_e_ + f Ljava/util/Map; field_21500 field_227085_f_ + f Lnet/minecraft/class_3846; field_24468 field_235969_c_ +c net/minecraft/class_4698$class_5276 net/minecraft/world/chunk/storage/IOWorker$Priority + m ()[Lnet/minecraft/class_4698$class_5276; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4698$class_5276; valueOf valueOf + f Lnet/minecraft/class_4698$class_5276; field_24470 LOW + f [Lnet/minecraft/class_4698$class_5276; field_24471 $VALUES + f Lnet/minecraft/class_4698$class_5276; field_24469 HIGH +c net/minecraft/class_4698$class_4699 net/minecraft/world/chunk/storage/IOWorker$Entry + m (Lnet/minecraft/class_4698$class_4699;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_23724 func_227116_a_ + m (Lnet/minecraft/class_4698$class_4699;)Ljava/util/concurrent/CompletableFuture; method_23725 func_227117_b_ + m (Lnet/minecraft/class_4698$class_4699;)Lnet/minecraft/class_2487; method_23723 func_227115_a_ + f Ljava/util/concurrent/CompletableFuture; field_21504 field_227114_b_ + f Lnet/minecraft/class_2487; field_21503 field_227113_a_ +c net/minecraft/class_3977 net/minecraft/world/chunk/storage/ChunkLoader + m (Lnet/minecraft/class_5321;Ljava/util/function/Supplier;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_17907 func_235968_a_ + m (Lnet/minecraft/class_2487;)I method_17908 getDataVersion + m ()V close close + m ()V method_23697 func_227079_i_ + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)V method_17910 writeChunk + m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_23696 readChunk + f Lcom/mojang/datafixers/DataFixer; field_17655 dataFixer + f Lnet/minecraft/class_3360; field_17654 field_219167_a + f Lnet/minecraft/class_4698; field_21494 field_227077_a_ +c net/minecraft/class_4485 net/minecraft/world/chunk/storage/RegionBitmap + m (II)V method_21869 func_227121_b_ + m (II)V method_21868 func_227120_a_ + m (I)I method_21867 func_227119_a_ + f Ljava/util/BitSet; field_20433 field_227118_a_ +c net/minecraft/class_2864 net/minecraft/world/chunk/storage/ChunkLoaderUtil + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_2864$class_2865;Lnet/minecraft/class_2487;Lnet/minecraft/class_1966;)V method_12432 func_242708_a + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2864$class_2865; method_12433 load +c net/minecraft/class_2864$class_2865 net/minecraft/world/chunk/storage/ChunkLoaderUtil$AnvilConverterData + f Lnet/minecraft/class_2499; field_13041 tileTicks + f [B field_13048 blocks + f I field_13046 z + f J field_13043 lastUpdated + f I field_13047 x + f Lnet/minecraft/class_2832; field_13038 blockLight + f Lnet/minecraft/class_2832; field_13039 skyLight + f Lnet/minecraft/class_2499; field_13037 entities + f [B field_13045 heightmap + f Z field_13042 terrainPopulated + f Lnet/minecraft/class_2499; field_13040 tileEntities + f Lnet/minecraft/class_2832; field_13044 data +c net/minecraft/class_2867 net/minecraft/world/chunk/storage/RegionFileCache + m ()V close close + m ()V method_26982 func_235987_a_ + m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2861; method_12440 loadFile + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)V method_23726 writeChunk + m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_17911 readChunk + f Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; field_17657 cache + f Ljava/io/File; field_18690 folder + f Z field_23748 field_235986_c_ +c net/minecraft/class_2861 net/minecraft/world/chunk/storage/RegionFile + m ()V close close + m (Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_22411 func_227139_a_ + m (II)I method_21872 func_227132_a_ + m (B)B method_22412 func_227141_b_ + m (Lnet/minecraft/class_1923;)Ljava/nio/file/Path; method_22413 func_227145_e_ + m ()V method_21870 func_227140_b_ + m ()V method_21877 func_227143_c_ + m (Lnet/minecraft/class_1923;Ljava/nio/ByteBuffer;)V method_21874 func_227135_a_ + m ()V method_26981 func_235985_a_ + m (Lnet/minecraft/class_1923;)I method_17909 getIndex + m (Ljava/nio/file/Path;Ljava/nio/ByteBuffer;)Lnet/minecraft/class_2861$class_4549; method_22410 func_227138_a_ + m (Lnet/minecraft/class_1923;)I method_12419 getOffset + m (Lnet/minecraft/class_1923;)Z method_21879 func_222662_b + m (Lnet/minecraft/class_1923;)Z method_12423 contains + m (Lnet/minecraft/class_1923;)Ljava/io/DataOutputStream; method_21881 func_222661_c + m (Lnet/minecraft/class_1923;BLjava/io/InputStream;)Ljava/io/DataInputStream; method_22409 func_227134_a_ + m (I)I method_21880 func_227144_c_ + m (Ljava/nio/ByteBuffer;I)Ljava/io/ByteArrayInputStream; method_21876 func_227137_a_ + m (Lnet/minecraft/class_2861;)Lnet/minecraft/class_4486; method_21875 func_227136_a_ + m (Lnet/minecraft/class_1923;B)Ljava/io/DataInputStream; method_22408 func_227133_a_ + m (Lnet/minecraft/class_1923;)V method_22414 func_227146_h_ + m (I)I method_21878 func_227142_b_ + m (Lnet/minecraft/class_1923;)Ljava/io/DataInputStream; method_21873 func_222666_a + m (I)I method_21871 func_227131_a_ + m (B)Z method_22407 func_227130_a_ + m ()Ljava/nio/ByteBuffer; method_22406 func_227129_a_ + f Ljava/nio/ByteBuffer; field_20435 field_227123_b_ + f Lnet/minecraft/class_4485; field_20441 field_227128_i_ + f Ljava/nio/IntBuffer; field_20440 chunkTimestamps + f Lorg/apache/logging/log4j/Logger; field_20434 LOGGER + f Lnet/minecraft/class_4486; field_20437 field_227125_e_ + f Ljava/nio/file/Path; field_20657 field_227124_d_ + f Ljava/nio/IntBuffer; field_20439 offsets + f Ljava/nio/channels/FileChannel; field_20436 dataFile + f Ljava/nio/ByteBuffer; field_20438 field_227126_f_ +c net/minecraft/class_2861$class_2862 net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer + m ()V close close + f Lnet/minecraft/class_1923; field_17656 pos + f Lnet/minecraft/class_2861; field_13035 field_76724_a +c net/minecraft/class_2861$class_4549 net/minecraft/world/chunk/storage/RegionFile$ICompleteCallback + m ()V run run +c net/minecraft/class_4180 net/minecraft/world/chunk/storage/RegionSectionCache + m (Lnet/minecraft/class_1923;)V method_20370 save + m (J)V method_19291 onSectionLoad + m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_20621 func_223138_c + m (J)V method_19288 markDirty + m (Ljava/util/Map;Lcom/mojang/serialization/DynamicOps;Ljava/lang/String;Ljava/lang/Object;)V method_28512 func_235994_a_ + m (Lcom/mojang/serialization/Dynamic;)I method_20369 func_235993_a_ + m (J)Ljava/util/Optional; method_19294 func_219113_d + m (J)Ljava/util/Optional; method_19293 func_219106_c + m (Lnet/minecraft/class_1923;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)V method_20368 func_235992_a_ + m ()V close close + m (Ljava/util/function/BooleanSupplier;)V method_19290 tick + m (Lnet/minecraft/class_1923;Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_20367 func_235991_a_ + m (JZLjava/lang/Object;)V method_20366 func_235990_a_ + m (J)Ljava/lang/Object; method_19295 func_235995_e_ + m (J)V method_19297 func_219109_g + m (J)V method_28513 func_235996_f_ + m (Lnet/minecraft/class_1923;)V method_20436 saveIfDirty + m (J)V method_19296 func_219104_f + m (JLcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_28511 func_235989_a_ + m (Lnet/minecraft/class_4076;)Z method_19292 func_219114_b + m (Lnet/minecraft/class_1923;)V method_19289 func_219107_b + f Lcom/mojang/datafixers/DataFixer; field_19228 field_219125_g + f Lit/unimi/dsi/fastutil/longs/LongLinkedOpenHashSet; field_18693 dirtySections + f Ljava/util/function/Function; field_24750 field_235988_e_ + f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_18692 data + f Ljava/util/function/Function; field_18695 field_219124_f + f Lnet/minecraft/class_4698; field_21505 field_227173_b_ + f Lnet/minecraft/class_4284; field_19229 field_219126_h + f Lorg/apache/logging/log4j/Logger; field_18691 LOGGER +c net/minecraft/class_4486 net/minecraft/world/chunk/storage/RegionFileVersion + m (I)Z method_21887 func_227170_b_ + m (Ljava/io/OutputStream;)Ljava/io/OutputStream; method_21886 func_227169_a_ + m (Ljava/io/OutputStream;)Ljava/io/OutputStream; method_21889 func_227172_b_ + m (Lnet/minecraft/class_4486;)Lnet/minecraft/class_4486; method_21884 func_227167_a_ + m (Ljava/io/InputStream;)Ljava/io/InputStream; method_21885 func_227168_a_ + m (Ljava/io/InputStream;)Ljava/io/InputStream; method_21888 func_227171_b_ + m ()I method_21882 func_227165_a_ + m (I)Lnet/minecraft/class_4486; method_21883 func_227166_a_ + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_20445 field_227161_d_ + f Lnet/minecraft/class_4486; field_20443 field_227159_b_ + f Lnet/minecraft/class_4486$class_4487; field_20448 field_227164_g_ + f Lnet/minecraft/class_4486; field_20444 field_227160_c_ + f I field_20446 field_227162_e_ + f Lnet/minecraft/class_4486; field_20442 field_227158_a_ + f Lnet/minecraft/class_4486$class_4487; field_20447 field_227163_f_ +c net/minecraft/class_4486$class_4487 net/minecraft/world/chunk/storage/RegionFileVersion$IWrapper + m (Ljava/lang/Object;)Ljava/lang/Object; wrap wrap +c net/minecraft/class_5363 net/minecraft/world/Dimension + m (JLnet/minecraft/class_2370;)Z method_29567 func_236060_a_ + m ()Lnet/minecraft/class_2794; method_29571 getChunkGenerator + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_29568 func_236061_a_ + m ()Lnet/minecraft/class_2874; method_29570 getDimensionType + m (Lnet/minecraft/class_2370;)Lnet/minecraft/class_2370; method_29569 func_236062_a_ + m ()Ljava/util/function/Supplier; method_29566 getDimensionTypeSupplier + f Lnet/minecraft/class_5321; field_25412 OVERWORLD + f Lnet/minecraft/class_2794; field_25417 chunkGenerator + f Lnet/minecraft/class_5321; field_25413 THE_NETHER + f Lnet/minecraft/class_5321; field_25414 THE_END + f Ljava/util/function/Supplier; field_25416 dimensionTypeSupplier + f Ljava/util/LinkedHashSet; field_25415 DIMENSION_KEYS + f Lcom/mojang/serialization/Codec; field_25411 CODEC +c net/minecraft/class_2874 net/minecraft/world/DimensionType + m (Lnet/minecraft/class_5321;Ljava/io/File;)Ljava/io/File; method_12488 getDimensionFolder + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_2874; method_29565 func_242719_b + m ()Lnet/minecraft/class_3494; method_29961 isInfiniBurn + m ()Ljava/lang/String; method_12489 getSuffix + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_28521 decodeWorldKey + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30640 func_242723_d + m (J)I method_28531 getMoonPhase + m (Ljava/util/Optional;)Ljava/util/OptionalLong; method_28525 func_236028_a_ + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;J)Lnet/minecraft/class_2794; method_28533 getEndChunkGenerator + m ()Z method_29960 doesFixedTimeExist + m (I)F method_28516 getAmbientLight + m ()Z method_28540 doesHasDragonFight + m (F)[F method_28515 defaultAmbientLightWorld + m (Lnet/minecraft/class_2874;)Ljava/util/OptionalLong; method_28538 func_236044_f_ + m ()Z method_29957 doesRespawnAnchorWorks + m (Lnet/minecraft/class_5455$class_5457;)Lnet/minecraft/class_5455$class_5457; method_28523 registerTypes + m (Ljava/util/OptionalLong;)Ljava/util/Optional; method_28526 func_236029_a_ + m ()Z method_29955 isPiglinSafe + m ()Z method_28537 isNatural + m ()I method_29959 getLogicalHeight + m (Lnet/minecraft/class_2874;)Ljava/lang/Float; method_28536 func_236042_a_ + m ()Z method_27998 getHasCeiling + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;J)Lnet/minecraft/class_2370; method_28517 getDefaultSimpleRegistry + m (Lnet/minecraft/class_2874;)Lnet/minecraft/class_2960; method_31180 func_242721_c + m ()D method_31110 getCoordinateScale + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_2874; method_29564 func_242716_a + m ()Lnet/minecraft/class_2960; method_31181 getEffects + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30639 func_242722_c + m (J)F method_28528 getCelestrialAngleByTime + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;J)Lnet/minecraft/class_2794; method_28535 getNetherChunkGenerator + m (Lnet/minecraft/class_2874;)Z method_31108 isSame + m ()Z method_29958 isHasRaids + m ()Z method_29956 doesBedWork + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28522 func_236026_a_ + m ()Lnet/minecraft/class_4545; method_22415 getMagnifier + m (Lnet/minecraft/class_2874;Lnet/minecraft/class_2874;)D method_31109 getCoordinateDifference + m ()Z method_27999 isUltrawarm + m (Lnet/minecraft/class_2874;)Lnet/minecraft/class_2960; method_29954 func_241508_b_ + m ()Z method_12491 hasSkyLight + f Z field_25615 hasRaids + f Lnet/minecraft/class_5321; field_24754 THE_NETHER + f Lnet/minecraft/class_2874; field_25407 OVERWORLD_TYPE + f Z field_25613 bedWorks + f Z field_24764 hasDragonFight + f Lnet/minecraft/class_2960; field_26752 OVERWORLD_ID + f Z field_24762 natural + f Z field_24504 hasCeiling + f Lnet/minecraft/class_2960; field_26754 THE_END_ID + f D field_26706 coordinateScale + f F field_24766 ambientLight + f Lnet/minecraft/class_2874; field_25408 NETHER_TYPE + f Lnet/minecraft/class_2960; field_26751 effects + f Lnet/minecraft/class_4545; field_20658 magnifier + f Z field_25614 respawnAnchorWorks + f Lnet/minecraft/class_5321; field_24753 OVERWORLD + f Lnet/minecraft/class_5321; field_24755 THE_END + f [F field_24752 MOON_PHASE_FACTORS + f Z field_25612 piglinSafe + f I field_25616 logicalHeight + f Ljava/util/OptionalLong; field_24761 fixedTime + f Lnet/minecraft/class_2960; field_26753 THE_NETHER_ID + f Lnet/minecraft/class_5321; field_25610 OVERWORLD_CAVES + f Lcom/mojang/serialization/Codec; field_24756 DIMENSION_TYPE_CODEC + f Z field_24505 ultrawarm + f Z field_13073 hasSkyLight + f [F field_24767 ambientWorldLight + f Lnet/minecraft/class_2874; field_25611 OVERWORLD_CAVES_TYPE + f Lnet/minecraft/class_2960; field_25617 infiniburn + f Lnet/minecraft/class_2874; field_25409 END_TYPE + f Lcom/mojang/serialization/Codec; field_24757 CODEC +c net/minecraft/class_2881 net/minecraft/world/end/DragonFightManager + m (Z)V method_12518 generatePortal + m ()V method_12519 spawnNewGateway + m ()Z method_12533 isFightAreaLoaded + m ()V method_12520 updatePlayers + m ()V method_12535 findAliveCrystals + m (Lnet/minecraft/class_1510;)V method_12532 dragonUpdate + m (Lnet/minecraft/class_1510;)V method_12528 processDragonDeath + m ()Z method_12514 exitPortalExists + m ()V method_12525 findOrCreateDragon + m ()V method_12515 scanForLegacyFight + m (Lnet/minecraft/class_2876;)V method_12521 setRespawnState + m ()Lnet/minecraft/class_2487; method_12530 write + m ()Z method_12536 hasPreviouslyKilledDragon + m ()Lnet/minecraft/class_2700$class_2702; method_12531 findExitPortal + m ()V method_12524 resetSpikeCrystals + m ()V method_12522 tryRespawnDragon + m (Ljava/util/List;)V method_12529 respawnDragon + m ()V method_12538 tick + m (Lnet/minecraft/class_2338;)V method_12516 generateGateway + m ()I method_12517 getNumAliveCrystals + m ()Lnet/minecraft/class_1510; method_12523 createNewDragon + m (Lnet/minecraft/class_1511;Lnet/minecraft/class_1282;)V method_12526 onCrystalDestroyed + f Lnet/minecraft/class_3218; field_13108 world + f Z field_13111 scanForLegacyFight + f Z field_13114 previouslyKilled + f Z field_13115 dragonKilled + f Lnet/minecraft/class_2876; field_13120 respawnState + f I field_13118 respawnStateTicks + f Ljava/util/UUID; field_13116 dragonUniqueId + f Ljava/util/function/Predicate; field_13113 VALID_PLAYER + f Lnet/minecraft/class_2700; field_13110 portalPattern + f Lorg/apache/logging/log4j/Logger; field_13112 LOGGER + f Ljava/util/List; field_13109 crystals + f Lnet/minecraft/class_2338; field_13117 exitPortalLocation + f I field_13122 ticksSinceLastPlayerScan + f Lnet/minecraft/class_3213; field_13119 bossInfo + f I field_13105 ticksSinceCrystalsScanned + f I field_13107 ticksSinceDragonSeen + f I field_13106 aliveCrystals + f Ljava/util/List; field_13121 gateways +c net/minecraft/class_2876 net/minecraft/world/end/DragonSpawnState + m ()[Lnet/minecraft/class_2876; values values + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2881;Ljava/util/List;ILnet/minecraft/class_2338;)V method_12507 process + m (Ljava/lang/String;)Lnet/minecraft/class_2876; valueOf valueOf + f Lnet/minecraft/class_2876; field_13094 SUMMONING_PILLARS + f Lnet/minecraft/class_2876; field_13095 PREPARING_TO_SUMMON_PILLARS + f Lnet/minecraft/class_2876; field_13098 SUMMONING_DRAGON + f [Lnet/minecraft/class_2876; field_13096 $VALUES + f Lnet/minecraft/class_2876; field_13097 START + f Lnet/minecraft/class_2876; field_13099 END +c net/minecraft/class_2876$1 net/minecraft/world/end/DragonSpawnState$1 +c net/minecraft/class_2876$5 net/minecraft/world/end/DragonSpawnState$5 +c net/minecraft/class_2876$4 net/minecraft/world/end/DragonSpawnState$4 +c net/minecraft/class_2876$3 net/minecraft/world/end/DragonSpawnState$3 +c net/minecraft/class_2876$2 net/minecraft/world/end/DragonSpawnState$2 +c net/minecraft/class_5432 net/minecraft/world/gen/IDecoratable + m (I)Ljava/lang/Object; method_30372 chance + m (Lnet/minecraft/class_5428;)Ljava/lang/Object; method_30373 func_242730_a + m ()Ljava/lang/Object; method_30371 square + m (I)Ljava/lang/Object; method_30377 range + m (Lnet/minecraft/class_3243;)Ljava/lang/Object; method_30374 withPlacement + m (I)Ljava/lang/Object; method_30376 func_242732_c + m (I)Ljava/lang/Object; method_30375 func_242731_b +c net/minecraft/class_2891 net/minecraft/world/gen/DebugChunkGenerator + m (Lnet/minecraft/class_2248;)Ljava/util/stream/Stream; method_12579 func_236067_a_ + m ()Lnet/minecraft/class_2378; method_31169 func_242727_g + m (II)Lnet/minecraft/class_2680; method_12578 getBlockStateFor + f Ljava/util/List; field_13163 ALL_VALID_STATES + f Lcom/mojang/serialization/Codec; field_24768 field_236066_e_ + f I field_13161 GRID_WIDTH + f Lnet/minecraft/class_2378; field_26747 field_242726_j + f Lnet/minecraft/class_2680; field_13164 BARRIER + f Lnet/minecraft/class_2680; field_13162 AIR + f I field_13160 GRID_HEIGHT +c net/minecraft/class_2893 net/minecraft/world/gen/GenerationStage +c net/minecraft/class_2893$class_2895 net/minecraft/world/gen/GenerationStage$Decoration + m ()[Lnet/minecraft/class_2893$class_2895; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2893$class_2895; valueOf valueOf + f Lnet/minecraft/class_2893$class_2895; field_13172 UNDERGROUND_STRUCTURES + f [Lnet/minecraft/class_2893$class_2895; field_13181 $VALUES + f Lnet/minecraft/class_2893$class_2895; field_13178 VEGETAL_DECORATION + f Lnet/minecraft/class_2893$class_2895; field_13177 UNDERGROUND_DECORATION + f Lnet/minecraft/class_2893$class_2895; field_13171 LOCAL_MODIFICATIONS + f Lnet/minecraft/class_2893$class_2895; field_25186 LAKES + f Lnet/minecraft/class_2893$class_2895; field_13176 UNDERGROUND_ORES + f Lnet/minecraft/class_2893$class_2895; field_25187 STRONGHOLDS + f Lnet/minecraft/class_2893$class_2895; field_13174 RAW_GENERATION + f Lnet/minecraft/class_2893$class_2895; field_13179 TOP_LAYER_MODIFICATION + f Lnet/minecraft/class_2893$class_2895; field_13173 SURFACE_STRUCTURES +c net/minecraft/class_2893$class_2894 net/minecraft/world/gen/GenerationStage$Carving + m ()[Lnet/minecraft/class_2893$class_2894; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2893$class_2894; valueOf valueOf + m (Lnet/minecraft/class_2893$class_2894;)Lnet/minecraft/class_2893$class_2894; method_12580 func_222672_a + m ()Ljava/lang/String; method_12581 getName + m (Ljava/lang/String;)Lnet/minecraft/class_2893$class_2894; method_28546 getByName + f Lnet/minecraft/class_2893$class_2894; field_13169 AIR + f [Lnet/minecraft/class_2893$class_2894; field_13170 $VALUES + f Ljava/lang/String; field_13167 name + f Lcom/mojang/serialization/Codec; field_24770 CODEC + f Ljava/util/Map; field_13168 BY_NAME + f Lnet/minecraft/class_2893$class_2894; field_13166 LIQUID +c net/minecraft/class_2897 net/minecraft/world/gen/FlatChunkGenerator + m (I)[Lnet/minecraft/class_2680; method_28001 func_236071_a_ + m ()Lnet/minecraft/class_3232; method_28545 func_236073_g_ + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_28002 func_236072_a_ + f Lcom/mojang/serialization/Codec; field_24769 field_236069_d_ + f Lnet/minecraft/class_3232; field_24510 field_236070_e_ +c net/minecraft/class_3754 net/minecraft/world/gen/NoiseChunkGenerator + m ([DII)V method_16405 fillNoiseColumn + m (III)D method_16571 func_222554_b + m (III)D method_16572 func_222556_a + m (Lnet/minecraft/class_2791;Ljava/util/Random;)V method_16412 makeBedrock + m (Lnet/minecraft/class_1923;Lit/unimi/dsi/fastutil/objects/ObjectList;IILit/unimi/dsi/fastutil/objects/ObjectList;Lnet/minecraft/class_3449;)V method_26983 func_236089_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28550 func_236091_a_ + m ([F)V method_28551 func_236092_a_ + m (Lnet/minecraft/class_3754;)Lnet/minecraft/class_1966; method_28554 func_236096_c_ + m ([F)V method_16573 func_236094_b_ + m (II[Lnet/minecraft/class_2680;Ljava/util/function/Predicate;)I method_26263 func_236087_a_ + m (DI)Lnet/minecraft/class_2680; method_26262 func_236086_a_ + m (Lnet/minecraft/class_3754;)Ljava/lang/Long; method_28552 func_236093_b_ + m (Lnet/minecraft/class_3754;)Ljava/util/function/Supplier; method_28549 func_236090_a_ + m (II)D method_28553 func_236095_c_ + m (II)[D method_16406 func_222547_b + m (JLnet/minecraft/class_5321;)Z method_28548 func_236088_a_ + m (IIIDDDD)D method_16411 func_222552_a + f Lnet/minecraft/class_3537; field_24776 field_236082_u_ + f Lnet/minecraft/class_3537; field_16575 field_222570_q + f I field_16579 noiseSizeY + f I field_16578 noiseSizeZ + f I field_16580 noiseSizeX + f Lnet/minecraft/class_3537; field_16581 field_222569_p + f Lnet/minecraft/class_3757; field_16571 surfaceDepthNoise + f Lnet/minecraft/class_3537; field_16574 field_222568_o + f I field_16570 horizontalNoiseGranularity + f Ljava/util/function/Supplier; field_24774 field_236080_h_ + f I field_16572 verticalNoiseGranularity + f Lcom/mojang/serialization/Codec; field_24773 field_236079_d_ + f [F field_16649 field_222561_h + f [F field_24775 field_236081_j_ + f Lnet/minecraft/class_2680; field_16648 AIR + f Lnet/minecraft/class_2680; field_16573 defaultFluid + f Lnet/minecraft/class_2680; field_16576 defaultBlock + f Lnet/minecraft/class_3541; field_24777 field_236083_v_ + f J field_24778 field_236084_w_ + f I field_24779 field_236085_x_ + f Lnet/minecraft/class_2919; field_16577 randomSeed +c net/minecraft/class_2902 net/minecraft/world/gen/Heightmap + m (I)I method_12601 getHeight + m (II)I method_12603 getHeight + m ()Ljava/util/function/Predicate; method_16681 func_222686_c + m (IIILnet/minecraft/class_2680;)Z method_12597 update + m ()Ljava/util/function/Predicate; method_16683 func_222687_b + m (III)V method_12602 set + m (II)I method_12595 getDataArrayIndex + m ()[J method_12598 getDataArray + m (Lnet/minecraft/class_2680;)Z method_16682 func_222688_b + m (Lnet/minecraft/class_2680;)Z method_16680 func_222689_a + m (Lnet/minecraft/class_2791;Ljava/util/Set;)V method_16684 updateChunkHeightmaps + m ([J)V method_12600 setDataArray + f Lnet/minecraft/class_2791; field_13191 chunk + f Lnet/minecraft/class_3508; field_13192 data + f Ljava/util/function/Predicate; field_13193 heightLimitPredicate + f Ljava/util/function/Predicate; field_16745 BLOCKS_MOVEMENT + f Ljava/util/function/Predicate; field_16744 IS_NOT_AIR +c net/minecraft/class_2902$class_2903 net/minecraft/world/gen/Heightmap$Type + m ()Ljava/lang/String; method_12605 getId + m (Lnet/minecraft/class_2680;)Z method_16685 func_222680_b + m (Lnet/minecraft/class_2680;)Z method_16686 func_222682_a + m ()Z method_16137 isUsageClient + m ()Ljava/util/function/Predicate; method_16402 getHeightLimitPredicate + m (Ljava/lang/String;)Lnet/minecraft/class_2902$class_2903; method_12609 getTypeFromId + m (Ljava/lang/String;)Lnet/minecraft/class_2902$class_2903; valueOf valueOf + m ()[Lnet/minecraft/class_2902$class_2903; values values + m ()Z method_20454 isUsageNotWorldgen + m (Ljava/util/HashMap;)V method_12608 func_222679_a + f Lnet/minecraft/class_2902$class_2903; field_13197 MOTION_BLOCKING + f Lnet/minecraft/class_2902$class_2903; field_13203 MOTION_BLOCKING_NO_LEAVES + f Ljava/lang/String; field_13204 id + f Lnet/minecraft/class_2902$class_2903; field_13202 WORLD_SURFACE + f Lnet/minecraft/class_2902$class_2903; field_13195 OCEAN_FLOOR_WG + f Lnet/minecraft/class_2902$class_2903; field_13200 OCEAN_FLOOR + f [Lnet/minecraft/class_2902$class_2903; field_13199 $VALUES + f Ljava/util/function/Predicate; field_16568 heightLimitPredicate + f Lnet/minecraft/class_2902$class_2903; field_13194 WORLD_SURFACE_WG + f Lcom/mojang/serialization/Codec; field_24772 CODEC + f Lnet/minecraft/class_2902$class_2904; field_13198 usage + f Ljava/util/Map; field_13205 BY_ID +c net/minecraft/class_2902$class_2904 net/minecraft/world/gen/Heightmap$Usage + m ()[Lnet/minecraft/class_2902$class_2904; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2902$class_2904; valueOf valueOf + f [Lnet/minecraft/class_2902$class_2904; field_13208 $VALUES + f Lnet/minecraft/class_2902$class_2904; field_13206 LIVE_WORLD + f Lnet/minecraft/class_2902$class_2904; field_16424 CLIENT + f Lnet/minecraft/class_2902$class_2904; field_13207 WORLDGEN +c net/minecraft/class_5308 net/minecraft/world/gen/settings/ScalingSettings + m ()D method_28576 func_236151_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28577 func_236152_a_ + m ()D method_28580 func_236155_d_ + m ()D method_28579 func_236154_c_ + m ()D method_28578 func_236153_b_ + f D field_24801 field_236148_d_ + f D field_24802 field_236149_e_ + f D field_24800 field_236147_c_ + f Lcom/mojang/serialization/Codec; field_24799 field_236145_a_ + f Lcom/mojang/serialization/Codec; field_25188 field_236146_b_ + f D field_24803 field_236150_f_ +c net/minecraft/class_5284 net/minecraft/world/gen/DimensionSettings + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28558 func_236112_a_ + m (Lnet/minecraft/class_5321;)Z method_28555 func_242744_a + m ()I method_28561 func_236119_g_ + m ()Lnet/minecraft/class_5284; method_31111 func_242746_i + m ()I method_16401 func_236118_f_ + m ()I method_16400 func_236117_e_ + m (Lnet/minecraft/class_5311;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2960;ZZ)Lnet/minecraft/class_5284; method_30642 func_242742_a + m ()Lnet/minecraft/class_2680; method_28006 getDefaultFluid + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_5284;)Lnet/minecraft/class_5284; method_30644 func_242745_a + m ()Lnet/minecraft/class_2680; method_28005 getDefaultBlock + m ()Lnet/minecraft/class_5309; method_28559 getNoise + m ()Lnet/minecraft/class_5311; method_28007 getStructures + m (Lnet/minecraft/class_5311;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2960;)Lnet/minecraft/class_5284; method_30641 func_242741_a + m ()Z method_28562 func_236120_h_ + m (Lnet/minecraft/class_5311;ZLnet/minecraft/class_2960;)Lnet/minecraft/class_5284; method_30643 func_242743_a + f Lcom/mojang/serialization/Codec; field_24781 field_236098_b_ + f I field_24785 field_236105_i_ + f I field_24784 field_236104_h_ + f Lnet/minecraft/class_5284; field_26707 field_242740_q + f I field_24783 field_236103_g_ + f Lnet/minecraft/class_2680; field_24515 defaultFluid + f Lnet/minecraft/class_2680; field_24514 defaultBlock + f Lcom/mojang/serialization/Codec; field_24780 field_236097_a_ + f Lnet/minecraft/class_5309; field_24782 noise + f Lnet/minecraft/class_5321; field_26355 field_242734_c + f Lnet/minecraft/class_5321; field_26356 field_242735_d + f Lnet/minecraft/class_5311; field_24516 structures + f Lnet/minecraft/class_5321; field_26357 field_242736_e + f Z field_24786 field_236106_j_ + f Lnet/minecraft/class_5321; field_26359 field_242738_g + f Lnet/minecraft/class_5321; field_26358 field_242737_f + f Lnet/minecraft/class_5321; field_26360 field_242739_h +c net/minecraft/class_5310 net/minecraft/world/gen/settings/SlideSettings + m ()I method_28597 func_236189_c_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28595 func_236187_a_ + m ()I method_28596 func_236188_b_ + m ()I method_28594 func_236186_a_ + f I field_24818 field_236183_b_ + f Lcom/mojang/serialization/Codec; field_24817 field_236182_a_ + f I field_24819 field_236184_c_ + f I field_24820 field_236185_d_ +c net/minecraft/class_5309 net/minecraft/world/gen/settings/NoiseSettings + m ()D method_28589 func_236177_h_ + m ()I method_28587 func_236175_f_ + m ()I method_28586 func_236174_e_ + m ()D method_28588 func_236176_g_ + m ()I method_28581 func_236169_a_ + m ()Z method_28592 func_236180_k_ + m ()Z method_28593 func_236181_l_ + m ()Z method_28591 func_236179_j_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28582 func_236170_a_ + m ()Z method_28590 func_236178_i_ + m ()Lnet/minecraft/class_5310; method_28585 func_236173_d_ + m ()Lnet/minecraft/class_5310; method_28584 func_236172_c_ + m ()Lnet/minecraft/class_5308; method_28583 func_236171_b_ + f Lnet/minecraft/class_5310; field_24807 field_236159_d_ + f Lnet/minecraft/class_5308; field_24806 field_236158_c_ + f D field_24812 field_236164_i_ + f D field_24811 field_236163_h_ + f I field_24809 field_236161_f_ + f Lcom/mojang/serialization/Codec; field_24804 field_236156_a_ + f I field_24810 field_236162_g_ + f I field_24805 field_236157_b_ + f Z field_24816 field_236168_m_ + f Z field_24814 field_236166_k_ + f Z field_24815 field_236167_l_ + f Z field_24813 field_236165_j_ + f Lnet/minecraft/class_5310; field_24808 field_236160_e_ +c net/minecraft/class_2910 net/minecraft/world/spawner/PhantomSpawner + f I field_13244 ticksUntilSpawn +c net/minecraft/class_3769 net/minecraft/world/spawner/PatrolSpawner + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/util/Random;Z)Z method_16575 spawnPatroller + f I field_16652 field_222698_b +c net/minecraft/class_5285 net/minecraft/world/gen/settings/DimensionGeneratorSettings + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;J)Lnet/minecraft/class_3754; method_28604 func_242750_a + m ()Lcom/google/common/collect/ImmutableSet; method_29575 func_236226_g_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28606 func_236214_a_ + m ()Z method_28033 func_236227_h_ + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;)Lnet/minecraft/class_5285; method_28009 func_242751_a + m ()Lnet/minecraft/class_2370; method_28609 func_236224_e_ + m ()Lnet/minecraft/class_2794; method_28032 func_236225_f_ + m (Lnet/minecraft/class_2370;Ljava/util/function/Supplier;Lnet/minecraft/class_2794;)Lnet/minecraft/class_2370; method_29962 func_241520_a_ + m ()Z method_28030 hasBonusChest + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2370;Lnet/minecraft/class_2794;)Lnet/minecraft/class_2370; method_28608 func_242749_a + m ()Z method_28029 doesGenerateFeatures + m (Lnet/minecraft/class_5455;)Lnet/minecraft/class_5285; method_31112 func_242752_a + m (ZLjava/util/OptionalLong;)Lnet/minecraft/class_5285; method_28024 create + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30647 func_242758_d + m (Lnet/minecraft/class_5455;Ljava/util/Properties;)Lnet/minecraft/class_5285; method_28021 func_242753_a + m ()J method_28028 getSeed + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30646 func_242756_b + m (Ljava/util/Map$Entry;)Lnet/minecraft/class_5321; method_29574 func_236218_a + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30645 func_242748_a + m ()Lcom/mojang/serialization/DataResult; method_28610 func_236233_n_ + m ()Z method_28611 func_236234_o_ + m (Lnet/minecraft/class_5363;Lnet/minecraft/class_2378;)Lnet/minecraft/class_2874; method_29572 func_242747_a + m ()Lnet/minecraft/class_5285; method_28038 func_236232_m_ + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_3232; method_31170 func_242757_c + m (Lnet/minecraft/class_5285;)Ljava/util/Optional; method_28605 func_236213_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_28607 func_236217_a + m ()Lnet/minecraft/class_5285; method_28037 func_236231_l_ + m ()Z method_28035 func_236229_j_ + m ()Z method_28034 func_236228_i_ + m ()Lnet/minecraft/class_5285; method_28036 func_236230_k_ + f Lnet/minecraft/class_2370; field_24827 field_236208_h_ + f Z field_24528 bonusChest + f Z field_24527 generateFeatures + f Lcom/mojang/serialization/Codec; field_24826 field_236201_a_ + f J field_24526 seed + f Lorg/apache/logging/log4j/Logger; field_24525 LOGGER + f Ljava/util/Optional; field_24532 field_236209_i_ +c net/minecraft/class_5311 net/minecraft/world/gen/settings/DimensionStructuresSettings + m ()Ljava/util/Map; method_28598 func_236195_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28601 func_236198_a_ + m (Lnet/minecraft/class_3195;)Lnet/minecraft/class_5314; method_28600 func_236197_a_ + m (Lnet/minecraft/class_5311;)Ljava/util/Map; method_28599 func_236196_a_ + m (Lnet/minecraft/class_5311;)Ljava/util/Optional; method_28603 func_236200_b_ + m ()Lnet/minecraft/class_5313; method_28602 func_236199_b_ + f Lcom/mojang/serialization/Codec; field_24821 field_236190_a_ + f Ljava/util/Map; field_24824 field_236193_d_ + f Lnet/minecraft/class_5313; field_24823 field_236192_c_ + f Lcom/google/common/collect/ImmutableMap; field_24822 field_236191_b_ + f Lnet/minecraft/class_5313; field_24825 field_236194_e_ +c net/minecraft/class_2918 net/minecraft/world/gen/carver/CanyonWorldCarver + m (Lnet/minecraft/class_2791;Ljava/util/function/Function;JIIIDDDFFFIIDLjava/util/BitSet;)V method_12657 func_227204_a_ + m (Ljava/util/Random;IILnet/minecraft/class_3133;)Z method_12658 shouldCarve + m (Lnet/minecraft/class_2791;Ljava/util/function/Function;Ljava/util/Random;IIIIILjava/util/BitSet;Lnet/minecraft/class_3133;)Z method_12656 carveRegion + f [F field_13275 field_202536_i +c net/minecraft/class_2919 net/minecraft/util/SharedSeedRandom + m (IIJJ)Ljava/util/Random; method_12662 seedSlimeChunk + m (I)I next next + m (JII)J method_12663 setLargeFeatureSeed + m (II)J method_12659 setBaseChunkSeed + m (JIII)J method_12665 setLargeFeatureSeedWithSalt + m (JII)J method_12664 setFeatureSeed + m (JII)J method_12661 setDecorationSeed + m (I)V method_12660 skip + f I field_13276 usageCount +c net/minecraft/class_2925 net/minecraft/world/gen/carver/CaveWorldCarver + m (Lnet/minecraft/class_2791;Ljava/util/function/Function;Ljava/util/Random;IIIIILjava/util/BitSet;Lnet/minecraft/class_3133;)Z method_12673 carveRegion + m ()I method_16577 func_230357_a_ + m ()D method_16578 func_230360_b_ + m (Ljava/util/Random;)F method_16576 func_230359_a_ + m (Lnet/minecraft/class_2791;Ljava/util/function/Function;JIIIDDDFFFIIDLjava/util/BitSet;)V method_12675 func_227206_a_ + m (Ljava/util/Random;)I method_16579 func_230361_b_ + m (Ljava/util/Random;IILnet/minecraft/class_3133;)Z method_12676 shouldCarve + m (Lnet/minecraft/class_2791;Ljava/util/function/Function;JIIIDDDFDLjava/util/BitSet;)V method_12674 func_227205_a_ +c net/minecraft/class_2920 net/minecraft/world/gen/carver/ICarverConfig + f Lnet/minecraft/class_2932; field_13277 field_214644_a +c net/minecraft/class_2934 net/minecraft/world/gen/carver/NetherCaveCarver +c net/minecraft/class_2922 net/minecraft/world/gen/carver/ConfiguredCarver + m (Ljava/util/Random;II)Z method_12669 shouldCarve + m (Lnet/minecraft/class_2922;)Lnet/minecraft/class_2939; method_28612 func_236236_a_ + m (Lnet/minecraft/class_2791;Ljava/util/function/Function;Ljava/util/Random;IIIIILjava/util/BitSet;)Z method_12668 carveRegion + m ()Lnet/minecraft/class_2920; method_30378 func_242760_a + f Lnet/minecraft/class_2939; field_13279 carver + f Lcom/mojang/serialization/Codec; field_25832 field_236235_a_ + f Lcom/mojang/serialization/Codec; field_26755 field_242759_c + f Lcom/mojang/serialization/Codec; field_24828 field_244390_b_ + f Lnet/minecraft/class_2920; field_13278 config +c net/minecraft/class_2932 net/minecraft/world/gen/carver/EmptyCarverConfig + m ()Lnet/minecraft/class_2932; method_28613 func_236239_a_ + f Lcom/mojang/serialization/Codec; field_24829 field_236237_b_ + f Lnet/minecraft/class_2932; field_24830 field_236238_c_ +c net/minecraft/class_2936 net/minecraft/world/gen/carver/UnderwaterCaveWorldCarver + m (Lnet/minecraft/class_2939;Lnet/minecraft/class_2791;Ljava/util/BitSet;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;IIIIIIII)Z method_16138 func_222728_a +c net/minecraft/class_2938 net/minecraft/world/gen/carver/UnderwaterCanyonWorldCarver +c net/minecraft/class_2939 net/minecraft/world/gen/carver/WorldCarver + m (Lnet/minecraft/class_2680;)Z method_12709 isCarvable + m (IIIIII)Z method_12706 isOnEdge + m (DDDI)Z method_16582 func_222708_a + m (Lnet/minecraft/class_2791;IIIIIIII)Z method_12711 func_222700_a + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)Z method_12703 canCarveBlock + m ()I method_12710 func_222704_c + m (Lnet/minecraft/class_2791;Ljava/util/function/Function;Ljava/util/BitSet;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2338$class_2339;IIIIIIIILorg/apache/commons/lang3/mutable/MutableBoolean;)Z method_16581 carveBlock + m (Lnet/minecraft/class_2920;)Lnet/minecraft/class_2922; method_28614 func_242761_a + m (Ljava/lang/String;Lnet/minecraft/class_2939;)Lnet/minecraft/class_2939; method_12704 register + m (Lnet/minecraft/class_2791;Ljava/util/function/Function;Ljava/util/Random;IIIIILjava/util/BitSet;Lnet/minecraft/class_2920;)Z method_12702 carveRegion + m (Lnet/minecraft/class_2791;Ljava/util/function/Function;JIIIDDDDDLjava/util/BitSet;)Z method_16580 func_227208_a_ + m (IIDDIIF)Z method_12707 func_222702_a + m (Ljava/util/Random;IILnet/minecraft/class_2920;)Z method_12705 shouldCarve + m ()Lcom/mojang/serialization/Codec; method_28616 getCodec + f Lnet/minecraft/class_2939; field_13303 UNDERWATER_CANYON + f Lnet/minecraft/class_2939; field_13297 NETHER_CAVE + f Ljava/util/Set; field_13302 carvableBlocks + f Ljava/util/Set; field_13298 carvableFluids + f Lnet/minecraft/class_2939; field_13295 CANYON + f I field_16653 maxHeight + f Lnet/minecraft/class_2939; field_13304 CAVE + f Lnet/minecraft/class_3610; field_13296 LAVA + f Lnet/minecraft/class_3610; field_13305 WATER + f Lnet/minecraft/class_2680; field_13294 CAVE_AIR + f Lnet/minecraft/class_2680; field_13301 AIR + f Lcom/mojang/serialization/Codec; field_24831 codec + f Lnet/minecraft/class_2939; field_13300 UNDERWATER_CAVE +c net/minecraft/class_4625 net/minecraft/world/gen/feature/AbstractBigMushroomFeature + m (Ljava/util/Random;)I method_23377 func_227211_a_ + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4635;ILnet/minecraft/class_2338$class_2339;)V method_23376 func_227210_a_ + m (IIII)I method_23372 func_225563_a_ + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;ILnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_4635;)Z method_23374 func_227209_a_ + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4635;)Z method_23373 generate + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;ILnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_4635;)V method_23375 func_225564_a_ +c net/minecraft/class_4624 net/minecraft/world/gen/feature/FlowersFeature + m (Lnet/minecraft/class_3037;)I method_23370 getFlowerCount + m (Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3037;)Lnet/minecraft/class_2338; method_23371 getNearbyPos + m (Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3037;)Lnet/minecraft/class_2680; method_13175 getFlowerToPlace + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_3037;)Z method_23369 isValidPosition +c net/minecraft/class_5153 net/minecraft/world/gen/feature/BasaltColumnFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_5156;)Z method_27097 generate + m (Lnet/minecraft/class_1936;ILnet/minecraft/class_2338$class_2339;)Z method_30379 func_242762_a + m (Lnet/minecraft/class_1936;ILnet/minecraft/class_2338;II)Z method_27096 func_236248_a_ + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338$class_2339;I)Lnet/minecraft/class_2338; method_27098 func_236249_a_ + m (Lnet/minecraft/class_1936;ILnet/minecraft/class_2338;)Z method_27095 func_236247_a_ + m (Lnet/minecraft/class_1936;ILnet/minecraft/class_2338$class_2339;I)Lnet/minecraft/class_2338; method_27094 func_236246_a_ + f Lcom/google/common/collect/ImmutableList; field_24132 field_236245_a_ +c net/minecraft/class_2942 net/minecraft/world/gen/feature/BambooFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3133;)Z method_12718 generate + f Lnet/minecraft/class_2680; field_13311 BAMBOO_LARGE_LEAVES_GROWN + f Lnet/minecraft/class_2680; field_13310 BAMBOO_LARGE_LEAVES + f Lnet/minecraft/class_2680; field_13308 BAMBOO_BASE + f Lnet/minecraft/class_2680; field_13309 BAMBOO_SMALL_LEAVES +c net/minecraft/class_3011 net/minecraft/world/gen/feature/AbstractSphereReplaceConfig + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3013;)Z method_13005 generate +c net/minecraft/class_4779 net/minecraft/world/gen/feature/BasaltPillarFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_24433 generate + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_24434 func_236252_a_ + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;)Z method_24435 func_236253_b_ +c net/minecraft/class_2950 net/minecraft/world/gen/feature/BlockBlobFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2963;)Z method_12813 generate +c net/minecraft/class_5175 net/minecraft/world/gen/feature/structure/BastionRemantsStructure + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3812;)Z method_28617 func_230363_a_ +c net/minecraft/class_2954 net/minecraft/world/gen/feature/BlueIceFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_12818 generate +c net/minecraft/class_3805 net/minecraft/world/gen/feature/BlockPileFeature + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_16707 canPlaceOn + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4634;)Z method_16709 generate + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/Random;Lnet/minecraft/class_4634;)V method_16708 func_227225_a_ +c net/minecraft/class_2956 net/minecraft/world/gen/feature/structure/BuriedTreasureStructure + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3133;)Z method_28619 func_230363_a_ +c net/minecraft/class_2956$class_2957 net/minecraft/world/gen/feature/structure/BuriedTreasureStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3133;)V method_28620 func_230364_a_ +c net/minecraft/class_2953 net/minecraft/world/gen/feature/BonusChestFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_12817 generate +c net/minecraft/class_2975 net/minecraft/world/gen/feature/ConfiguredFeature + m ()Ljava/util/stream/Stream; method_30648 func_242768_d + m ()Lnet/minecraft/class_3037; method_30381 getConfig + m (F)Lnet/minecraft/class_3226; method_23387 withChance + m (Lnet/minecraft/class_3243;)Lnet/minecraft/class_2975; method_23388 withPlacement + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;)Z method_12862 generate + m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_3031; method_28621 func_236266_a_ + m ()Lnet/minecraft/class_2975; method_30383 func_242769_e + m ()Lnet/minecraft/class_3031; method_30380 getFeature + f Lnet/minecraft/class_3037; field_13375 config + f Lcom/mojang/serialization/Codec; field_24833 field_236264_b_ + f Lcom/mojang/serialization/Codec; field_25833 field_242763_a + f Lorg/apache/logging/log4j/Logger; field_21589 LOGGER + f Lcom/mojang/serialization/Codec; field_26756 field_242764_c + f Lnet/minecraft/class_3031; field_13376 feature +c net/minecraft/class_2964 net/minecraft/world/gen/feature/ChorusPlantFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_12843 generate +c net/minecraft/class_2972 net/minecraft/world/gen/feature/CoralClawFeature +c net/minecraft/class_5312 net/minecraft/world/gen/feature/StructureFeature + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;Lnet/minecraft/class_3485;JLnet/minecraft/class_1923;Lnet/minecraft/class_1959;ILnet/minecraft/class_5314;)Lnet/minecraft/class_3449; method_28622 func_242771_a + m (Lnet/minecraft/class_5312;)Lnet/minecraft/class_3195; method_28623 func_236271_a_ + f Lnet/minecraft/class_3195; field_24835 field_236268_b_ + f Lcom/mojang/serialization/Codec; field_24834 field_244391_b_ + f Lcom/mojang/serialization/Codec; field_25834 field_236267_a_ + f Lnet/minecraft/class_3037; field_24836 field_236269_c_ + f Lcom/mojang/serialization/Codec; field_26757 field_242770_c +c net/minecraft/class_2977 net/minecraft/world/gen/feature/CoralMushroomFeature +c net/minecraft/class_2978 net/minecraft/world/gen/feature/CoralFeature + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_12863 func_204623_a + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_12864 func_204624_b + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_12865 generate +c net/minecraft/class_2988 net/minecraft/world/gen/feature/DecoratedFeature + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2986;Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lorg/apache/commons/lang3/mutable/MutableBoolean;Lnet/minecraft/class_2338;)V method_30384 func_242772_a + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2986;)Z method_12892 generate +c net/minecraft/class_2979 net/minecraft/world/gen/feature/CoralTreeFeature +c net/minecraft/class_3001 net/minecraft/world/gen/feature/DefaultFlowersFeature + m (Lnet/minecraft/class_4638;)I method_23391 getFlowerCount + m (Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4638;)Lnet/minecraft/class_2680; method_23393 getFlowerToPlace + m (Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4638;)Lnet/minecraft/class_2338; method_23392 getNearbyPos + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_4638;)Z method_23390 isValidPosition +c net/minecraft/class_3006 net/minecraft/world/gen/feature/structure/DesertPyramidStructure +c net/minecraft/class_3006$class_3007 net/minecraft/world/gen/feature/structure/DesertPyramidStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28624 func_230364_a_ +c net/minecraft/class_5154 net/minecraft/world/gen/feature/structure/BasaltDeltasStructure + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_5158;)Z method_27101 generate + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_5158;)Z method_27103 func_236277_a_ + f [Lnet/minecraft/class_2350; field_23883 field_236275_ac_ + f Lcom/google/common/collect/ImmutableList; field_24133 field_236274_a_ +c net/minecraft/class_5433 net/minecraft/world/gen/feature/SphereReplaceFeature +c net/minecraft/class_3005 net/minecraft/world/gen/feature/DesertWellsFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_12977 generate + f Lnet/minecraft/class_2680; field_13451 sandstone + f Lnet/minecraft/class_2680; field_13449 water + f Lnet/minecraft/class_2715; field_13450 IS_SAND + f Lnet/minecraft/class_2680; field_13452 sandSlab +c net/minecraft/class_3029 net/minecraft/world/gen/feature/EndGatewayFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3018;)Z method_13142 generate + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2338;Lnet/minecraft/class_3018;Lnet/minecraft/class_2338;)V method_18037 func_236280_a_ +c net/minecraft/class_3021 net/minecraft/world/gen/feature/structure/EndCityStructure + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3111;)Z method_28625 func_230363_a_ + m (IILnet/minecraft/class_2794;)I method_13084 access$000 + m (IILnet/minecraft/class_2794;)I method_13085 getYPosForStructure +c net/minecraft/class_3021$class_3022 net/minecraft/world/gen/feature/structure/EndCityStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28626 func_230364_a_ +c net/minecraft/class_3033 net/minecraft/world/gen/feature/EndPodiumFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13163 generate + f Lnet/minecraft/class_2338; field_13600 END_PODIUM_LOCATION + f Z field_13599 activePortal +c net/minecraft/class_3026 net/minecraft/world/gen/feature/EndIslandFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13110 generate +c net/minecraft/class_4278 net/minecraft/world/gen/feature/FillLayerFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4279;)Z method_20312 generate +c net/minecraft/class_3031 net/minecraft/world/gen/feature/Feature + m (Lnet/minecraft/class_1945;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_13153 setBlockState + m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_27370 isAirAt + m (Lnet/minecraft/class_3037;)Lnet/minecraft/class_2975; method_28629 func_236296_a_ + m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_3037; method_28628 func_236295_a_ + m (Lnet/minecraft/class_2248;)Z method_23396 isDirt + m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_27368 isDirtAt + m (Lnet/minecraft/class_2680;)Z method_27369 func_236294_a_ + m (Ljava/lang/String;Lnet/minecraft/class_3031;)Lnet/minecraft/class_3031; method_13150 register + m (Lnet/minecraft/class_3037;)Lnet/minecraft/class_2975; method_23397 withConfiguration + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3037;)Z method_13151 generate + m (Lnet/minecraft/class_2248;)Z method_23395 isStone + m ()Lcom/mojang/serialization/Codec; method_28627 getCodec + f Lnet/minecraft/class_3031; field_13531 HUGE_BROWN_MUSHROOM + f Lnet/minecraft/class_3168; field_13567 SEAGRASS + f Lnet/minecraft/class_3031; field_13574 END_ISLAND + f Lnet/minecraft/class_3031; field_13593 RANDOM_SELECTOR + f Lnet/minecraft/class_3031; field_13516 FOSSIL + f Lnet/minecraft/class_3031; field_13517 ORE + f Lnet/minecraft/class_3031; field_22188 BASALT_PILLAR + f Lnet/minecraft/class_3031; field_13591 VOID_START_PLATFORM + f Lnet/minecraft/class_3031; field_19201 FILL_LAYER + f Lnet/minecraft/class_3031; field_13552 CHORUS_PLANT + f Lnet/minecraft/class_3031; field_23885 DELTA_FEATURE + f Lnet/minecraft/class_3031; field_21221 BLOCK_PILE + f Lnet/minecraft/class_3031; field_23088 TWISTING_VINES + f Lnet/minecraft/class_3031; field_13573 LAKE + f Lnet/minecraft/class_3031; field_22186 NETHER_FOREST_VEGETATION + f Lnet/minecraft/class_3031; field_24134 TREE + f Lnet/minecraft/class_3031; field_13509 DISK + f Lnet/minecraft/class_3031; field_13540 BAMBOO + f Lnet/minecraft/class_3031; field_13544 ICEBERG + f Lnet/minecraft/class_3031; field_13575 SEA_PICKLE + f Lnet/minecraft/class_3031; field_13579 MONSTER_ROOM + f Lnet/minecraft/class_3031; field_13585 CORAL_MUSHROOM + f Lnet/minecraft/class_2953; field_13526 BONUS_CHEST + f Lnet/minecraft/class_3031; field_13539 FREEZE_TOP_LAYER + f Lnet/minecraft/class_3031; field_13535 KELP + f Lnet/minecraft/class_4624; field_26361 NO_BONEMEAL_FLOWER + f Lnet/minecraft/class_3031; field_13562 ICE_SPIKE + f Lnet/minecraft/class_3031; field_13564 END_GATEWAY + f Lcom/mojang/serialization/Codec; field_24837 codec + f Lnet/minecraft/class_3031; field_13555 SIMPLE_RANDOM_SELECTOR + f Lnet/minecraft/class_3031; field_13571 HUGE_RED_MUSHROOM + f Lnet/minecraft/class_3031; field_13522 END_SPIKE + f Lnet/minecraft/class_3031; field_22189 NO_SURFACE_ORE + f Lnet/minecraft/class_3031; field_13592 DESERT_WELL + f Lnet/minecraft/class_3031; field_13594 EMERALD_ORE + f Lnet/minecraft/class_3031; field_21217 DECORATED + f Lnet/minecraft/class_3031; field_23886 NETHERRACK_REPLACE_BLOBS + f Lnet/minecraft/class_3031; field_13513 SPRING_FEATURE + f Lnet/minecraft/class_3031; field_23884 BASALT_COLUMNS + f Lnet/minecraft/class_3031; field_21220 RANDOM_PATCH + f Lnet/minecraft/class_3031; field_22187 WEEPING_VINES + f Lnet/minecraft/class_3031; field_13551 ICE_PATCH + f Lnet/minecraft/class_3031; field_22185 HUGE_FUNGUS + f Lnet/minecraft/class_3031; field_21590 NO_OP + f Lnet/minecraft/class_3031; field_13584 FOREST_ROCK + f Lnet/minecraft/class_3031; field_13518 SIMPLE_BLOCK + f Lnet/minecraft/class_3031; field_13560 BLUE_ICE + f Lnet/minecraft/class_3031; field_13546 CORAL_CLAW + f Lnet/minecraft/class_3031; field_13559 VINES + f Lnet/minecraft/class_3031; field_13525 CORAL_TREE + f Lnet/minecraft/class_3031; field_13568 GLOWSTONE_BLOB + f Lnet/minecraft/class_4624; field_21219 FLOWER + f Lnet/minecraft/class_3031; field_13550 RANDOM_BOOLEAN_SELECTOR +c net/minecraft/class_3047 net/minecraft/world/gen/feature/GlowstoneBlobFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13239 generate +c net/minecraft/class_3044 net/minecraft/world/gen/feature/FossilsFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13236 generate + f Lnet/minecraft/class_2960; field_13618 STRUCTURE_SPINE_02_COAL + f Lnet/minecraft/class_2960; field_13625 STRUCTURE_SPINE_03_COAL + f Lnet/minecraft/class_2960; field_13616 STRUCTURE_SPINE_04_COAL + f Lnet/minecraft/class_2960; field_13613 STRUCTURE_SKULL_02_COAL + f Lnet/minecraft/class_2960; field_13623 STRUCTURE_SKULL_03_COAL + f Lnet/minecraft/class_2960; field_13619 STRUCTURE_SPINE_04 + f [Lnet/minecraft/class_2960; field_13626 FOSSILS_COAL + f Lnet/minecraft/class_2960; field_13620 STRUCTURE_SPINE_01_COAL + f [Lnet/minecraft/class_2960; field_13617 FOSSILS + f Lnet/minecraft/class_2960; field_13610 STRUCTURE_SKULL_04_COAL + f Lnet/minecraft/class_2960; field_13622 STRUCTURE_SKULL_04 + f Lnet/minecraft/class_2960; field_13614 STRUCTURE_SKULL_01_COAL + f Lnet/minecraft/class_2960; field_13615 STRUCTURE_SPINE_02 + f Lnet/minecraft/class_2960; field_13627 STRUCTURE_SPINE_03 + f Lnet/minecraft/class_2960; field_13611 STRUCTURE_SKULL_01 + f Lnet/minecraft/class_2960; field_13624 STRUCTURE_SPINE_01 + f Lnet/minecraft/class_2960; field_13621 STRUCTURE_SKULL_02 + f Lnet/minecraft/class_2960; field_13612 STRUCTURE_SKULL_03 +c net/minecraft/class_4780 net/minecraft/world/gen/feature/HugeFungusConfig + m (Lnet/minecraft/class_4780;)Ljava/lang/Boolean; method_28630 func_236308_a_ + m (Lnet/minecraft/class_4780;)Lnet/minecraft/class_2680; method_28635 func_236313_e_ + m (Lnet/minecraft/class_4780;)Lnet/minecraft/class_2680; method_28634 func_236312_d_ + m (Lnet/minecraft/class_4780;)Lnet/minecraft/class_2680; method_28633 func_236311_c_ + m (Lnet/minecraft/class_4780;)Lnet/minecraft/class_2680; method_28632 func_236310_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28631 func_236309_a_ + f Lnet/minecraft/class_2680; field_22193 field_236306_i_ + f Lnet/minecraft/class_2680; field_22192 field_236305_h_ + f Lnet/minecraft/class_2680; field_22191 field_236304_g_ + f Lnet/minecraft/class_2680; field_22435 field_236303_f_ + f Z field_22194 field_236307_j_ + f Lcom/mojang/serialization/Codec; field_24838 field_236298_a_ + f Lnet/minecraft/class_4780; field_22434 field_236302_e_ + f Lnet/minecraft/class_4780; field_22433 field_236301_d_ + f Lnet/minecraft/class_4780; field_22432 field_236300_c_ + f Lnet/minecraft/class_4780; field_22431 field_236299_b_ +c net/minecraft/class_3059 net/minecraft/world/gen/feature/BigBrownMushroomFeature +c net/minecraft/class_3066 net/minecraft/world/gen/feature/BigRedMushroomFeature +c net/minecraft/class_4781 net/minecraft/world/gen/feature/HugeFungusFeature + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1936;Ljava/util/Random;)V method_24442 func_236319_a_ + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4780;)Z method_24437 generate + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_4780;Lnet/minecraft/class_2338;IZ)V method_24440 func_236317_a_ + m (ZLnet/minecraft/class_2680;)Z method_29297 func_236320_a_ + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_4780;Lnet/minecraft/class_2338;IZ)V method_24443 func_236321_b_ + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Z)Z method_24866 func_236315_a_ + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_24441 func_236318_a_ + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_4780;Lnet/minecraft/class_2338$class_2339;FFF)V method_24439 func_236316_a_ +c net/minecraft/class_3070 net/minecraft/world/gen/feature/IceSpikeFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13408 generate +c net/minecraft/class_3063 net/minecraft/world/gen/feature/IcePathFeature +c net/minecraft/class_3071 net/minecraft/world/gen/feature/structure/IglooStructure +c net/minecraft/class_3071$class_3072 net/minecraft/world/gen/feature/structure/IglooStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28636 func_230364_a_ +c net/minecraft/class_3074 net/minecraft/world/gen/feature/IcebergFeature + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1936;Ljava/util/Random;IIZZLnet/minecraft/class_2680;)V method_13425 func_205175_a + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2963;)Z method_13423 generate + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;IIIIIIZIDZLnet/minecraft/class_2680;)V method_13426 func_205181_a + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_13414 isAirBellow + m (IILnet/minecraft/class_2338;Lnet/minecraft/class_1936;ZDLnet/minecraft/class_2338;II)V method_13415 func_205174_a + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_13422 removeSnowLayer + m (Ljava/util/Random;III)I method_13419 func_205183_a + m (IILnet/minecraft/class_2338;ILjava/util/Random;)D method_13421 func_205177_a + m (Ljava/util/Random;Lnet/minecraft/class_1936;IILnet/minecraft/class_2338;ZIDI)V method_13428 func_205184_a + m (Lnet/minecraft/class_2248;)Z method_13420 isIce + m (IILnet/minecraft/class_2338;IID)D method_13424 func_205180_a + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;IIZI)V method_13418 func_205186_a + m (III)I method_13417 func_205178_b + m (III)I method_13416 func_205176_a + m (Ljava/util/Random;III)I method_13427 func_205187_b +c net/minecraft/class_3076 net/minecraft/world/gen/feature/structure/JunglePyramidStructure +c net/minecraft/class_3076$class_3077 net/minecraft/world/gen/feature/structure/JunglePyramidStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28637 func_230364_a_ +c net/minecraft/class_5434 net/minecraft/world/gen/feature/structure/JigsawStructure + m (Lnet/minecraft/class_3195;IILnet/minecraft/class_3341;IJ)Lnet/minecraft/class_3449; method_30386 func_242778_a + m (Lnet/minecraft/class_5434;)I method_30385 func_242777_a + m (Lnet/minecraft/class_5434;)Z method_30387 func_242779_b + m (Lnet/minecraft/class_5434;)Z method_30388 func_242780_c + f I field_25835 field_242774_u + f Z field_25836 field_242775_v + f Z field_25837 field_242776_w +c net/minecraft/class_5434$class_5435 net/minecraft/world/gen/feature/structure/JigsawStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3812;)V method_30389 func_230364_a_ + f Lnet/minecraft/class_5434; field_25838 field_242781_e +c net/minecraft/class_3085 net/minecraft/world/gen/feature/LakesFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2963;)Z method_13471 generate + f Lnet/minecraft/class_2680; field_13668 AIR +c net/minecraft/class_3081 net/minecraft/world/gen/feature/KelpFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13460 generate +c net/minecraft/class_3103 net/minecraft/world/gen/feature/DungeonsFeature + m (Ljava/util/Random;)Lnet/minecraft/class_1299; method_13547 getRandomDungeonMob + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13548 generate + f Lnet/minecraft/class_2680; field_13698 CAVE_AIR + f [Lnet/minecraft/class_1299; field_13699 SPAWNERTYPES + f Lorg/apache/logging/log4j/Logger; field_13700 LOGGER +c net/minecraft/class_3098 net/minecraft/world/gen/feature/structure/MineshaftStructure + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3101;)Z method_28638 func_230363_a_ +c net/minecraft/class_3098$class_3100 net/minecraft/world/gen/feature/structure/MineshaftStructure$Type + m ()[Lnet/minecraft/class_3098$class_3100; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3098$class_3100; valueOf valueOf + m (I)Lnet/minecraft/class_3098$class_3100; method_13535 byId + m (Lnet/minecraft/class_3098$class_3100;)Lnet/minecraft/class_3098$class_3100; method_13533 func_214716_a + m ()Ljava/lang/String; method_13534 getName + m (Ljava/lang/String;)Lnet/minecraft/class_3098$class_3100; method_13532 byName + f Lnet/minecraft/class_3098$class_3100; field_13692 NORMAL + f Ljava/util/Map; field_13690 BY_NAME + f Lcom/mojang/serialization/Codec; field_24839 field_236324_c_ + f [Lnet/minecraft/class_3098$class_3100; field_13688 $VALUES + f Lnet/minecraft/class_3098$class_3100; field_13691 MESA + f Ljava/lang/String; field_13689 name +c net/minecraft/class_3098$class_3099 net/minecraft/world/gen/feature/structure/MineshaftStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3101;)V method_28639 func_230364_a_ +c net/minecraft/class_4782 net/minecraft/world/gen/feature/NetherVegetationFeature + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4634;II)Z method_26264 func_236325_a_ + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4634;)Z method_24444 generate +c net/minecraft/class_4715 net/minecraft/world/gen/feature/NoOpFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_23914 generate +c net/minecraft/class_3108 net/minecraft/world/gen/feature/structure/FortressStructure + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3111;)Z method_28640 func_230363_a_ + f Ljava/util/List; field_13705 field_202381_d +c net/minecraft/class_3108$class_3109 net/minecraft/world/gen/feature/structure/FortressStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28641 func_230364_a_ +c net/minecraft/class_3116 net/minecraft/world/gen/feature/structure/OceanMonumentStructure + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3111;)Z method_28642 func_230363_a_ + f Ljava/util/List; field_13716 MONUMENT_ENEMIES +c net/minecraft/class_3116$class_3117 net/minecraft/world/gen/feature/structure/OceanMonumentStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28643 func_230364_a_ + m (II)V method_16588 generateStart + f Z field_13717 wasCreated +c net/minecraft/class_4783 net/minecraft/world/gen/feature/NoExposedOreFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3124;)Z method_24445 generate + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_24446 func_236326_a_ + m (Ljava/util/Random;I)I method_24448 func_236328_a_ + m (Lnet/minecraft/class_2338$class_2339;Ljava/util/Random;Lnet/minecraft/class_2338;I)V method_24447 func_236327_a_ +c net/minecraft/class_3770 net/minecraft/world/gen/feature/structure/PillagerOutpostStructure + m (Lnet/minecraft/class_2794;JLnet/minecraft/class_2919;II)Z method_30845 func_242782_a + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3812;)Z method_28644 func_230363_a_ + f Ljava/util/List; field_16656 PILLAGE_OUTPOST_ENEMIES +c net/minecraft/class_3122 net/minecraft/world/gen/feature/OreFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3124;)Z method_13628 generate + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_3124;DDDDDDIIIII)Z method_13629 func_207803_a +c net/minecraft/class_4628 net/minecraft/world/gen/feature/RandomPatchFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4638;)Z method_23401 generate +c net/minecraft/class_3135 net/minecraft/world/gen/feature/TwoFeatureChoiceFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3137;)Z method_13679 generate +c net/minecraft/class_5155 net/minecraft/world/gen/feature/structure/NetherackBlobReplacementStructure + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_5437;)Z method_27106 generate + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2248;)Lnet/minecraft/class_2338; method_27107 func_236329_a_ +c net/minecraft/class_3150 net/minecraft/world/gen/feature/MultipleWithChanceRandomFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3141;)Z method_13798 generate +c net/minecraft/class_5183 net/minecraft/world/gen/feature/structure/RuinedPortalStructure + m (Ljava/util/Random;II)I method_27207 func_236335_a_ + m ()[Ljava/lang/String; method_27212 func_236340_d_ + m ()[Ljava/lang/String; method_27213 func_236341_e_ + m (Ljava/util/Random;Lnet/minecraft/class_2794;Lnet/minecraft/class_5189$class_5191;ZIILnet/minecraft/class_3341;)I method_27211 func_236339_b_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1959;)Z method_27206 func_236334_a_ + m (Ljava/util/Random;Lnet/minecraft/class_2794;Lnet/minecraft/class_5189$class_5191;ZIILnet/minecraft/class_3341;)I method_27208 func_236336_a_ + m (Ljava/util/Random;II)I method_27210 func_236338_b_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1959;)Z method_27209 func_236337_b_ + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1922; method_27205 func_236333_a_ + f [Ljava/lang/String; field_23999 field_236331_u_ + f [Ljava/lang/String; field_23998 field_236332_v_ +c net/minecraft/class_5183$class_5185 net/minecraft/world/gen/feature/structure/RuinedPortalStructure$Location + m (Ljava/lang/String;)Lnet/minecraft/class_5183$class_5185; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_5183$class_5185; method_27216 func_236346_a_ + m ()Ljava/lang/String; method_27214 func_236347_b_ + m ()[Lnet/minecraft/class_5183$class_5185; values values + m (Lnet/minecraft/class_5183$class_5185;)Lnet/minecraft/class_5183$class_5185; method_27215 func_236345_a_ + f Lcom/mojang/serialization/Codec; field_24840 field_236342_h_ + f Lnet/minecraft/class_5183$class_5185; field_24001 DESERT + f Lnet/minecraft/class_5183$class_5185; field_24002 JUNGLE + f Ljava/lang/String; field_24008 field_236344_j_ + f Lnet/minecraft/class_5183$class_5185; field_24003 SWAMP + f Lnet/minecraft/class_5183$class_5185; field_24004 MOUNTAIN + f [Lnet/minecraft/class_5183$class_5185; field_24009 $VALUES + f Lnet/minecraft/class_5183$class_5185; field_24005 OCEAN + f Lnet/minecraft/class_5183$class_5185; field_24006 NETHER + f Ljava/util/Map; field_24007 field_236343_i_ + f Lnet/minecraft/class_5183$class_5185; field_24000 STANDARD +c net/minecraft/class_5183$class_5184 net/minecraft/world/gen/feature/structure/RuinedPortalStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_5187;)V method_28646 func_230364_a_ +c net/minecraft/class_3152 net/minecraft/world/gen/feature/ReplaceBlockFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3154;)Z method_13811 generate +c net/minecraft/class_3168 net/minecraft/world/gen/feature/SeaGrassFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3133;)Z method_13926 generate +c net/minecraft/class_3160 net/minecraft/world/gen/feature/SeaPickleFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2984;)Z method_13876 generate +c net/minecraft/class_3173 net/minecraft/world/gen/feature/BlockWithContextFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3175;)Z method_13929 generate +c net/minecraft/class_3170 net/minecraft/world/gen/feature/structure/ShipwreckStructure +c net/minecraft/class_3170$class_3171 net/minecraft/world/gen/feature/structure/ShipwreckStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3172;)V method_28647 func_230364_a_ +c net/minecraft/class_3177 net/minecraft/world/gen/feature/SingleRandomFeatureConfig + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3179;)Z method_13953 generate +c net/minecraft/class_3310 net/minecraft/world/gen/feature/EndSpikeFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3666;)Z method_15887 generate + m (Lnet/minecraft/class_5425;Ljava/util/Random;Lnet/minecraft/class_3666;Lnet/minecraft/class_3310$class_3181;)V method_15888 placeSpike + m (Lnet/minecraft/class_5281;)Ljava/util/List; method_14506 func_236356_a_ + f Lcom/google/common/cache/LoadingCache; field_14309 LOADING_CACHE +c net/minecraft/class_3310$class_3311 net/minecraft/world/gen/feature/EndSpikeFeature$EndSpikeCacheLoader + m (Ljava/lang/Object;)Ljava/lang/Object; load load + m (Ljava/lang/Long;)Ljava/util/List; method_14507 load +c net/minecraft/class_3310$class_3181 net/minecraft/world/gen/feature/EndSpikeFeature$EndSpike + m ()I method_13967 getCenterZ + m (Lnet/minecraft/class_3310$class_3181;)Ljava/lang/Integer; method_28650 func_236360_b_ + m ()I method_13963 getRadius + m (Lnet/minecraft/class_3310$class_3181;)Ljava/lang/Boolean; method_28648 func_236358_a_ + m ()I method_13964 getHeight + m (Lnet/minecraft/class_3310$class_3181;)Ljava/lang/Integer; method_28653 func_236363_e_ + m (Lnet/minecraft/class_3310$class_3181;)Ljava/lang/Integer; method_28651 func_236361_c_ + m (Lnet/minecraft/class_2338;)Z method_13962 doesStartInChunk + m (Lnet/minecraft/class_3310$class_3181;)Ljava/lang/Integer; method_28652 func_236362_d_ + m ()Z method_13965 isGuarded + m ()Lnet/minecraft/class_238; method_13968 getTopBoundingBox + m ()I method_13966 getCenterX + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28649 func_236359_a_ + f Lnet/minecraft/class_238; field_13835 topBoundingBox + f Z field_13832 guarded + f I field_13836 centerX + f I field_13834 centerZ + f I field_13833 radius + f Lcom/mojang/serialization/Codec; field_24841 field_236357_a_ + f I field_13831 height +c net/minecraft/class_3310$1 net/minecraft/world/gen/feature/EndSpikeFeature$1 +c net/minecraft/class_3183 net/minecraft/world/gen/feature/IceAndSnowFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13978 generate +c net/minecraft/class_3188 net/minecraft/world/gen/feature/structure/StrongholdStructure + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3111;)Z method_28654 func_230363_a_ +c net/minecraft/class_3188$class_3189 net/minecraft/world/gen/feature/structure/StrongholdStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28655 func_230364_a_ + f J field_24559 field_236364_e_ +c net/minecraft/class_3185 net/minecraft/world/gen/feature/SpringFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4642;)Z method_13979 generate +c net/minecraft/class_3773 net/minecraft/world/gen/feature/structure/IStructurePieceType + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2487;)Lnet/minecraft/class_3443; load load + m (Lnet/minecraft/class_3773;Ljava/lang/String;)Lnet/minecraft/class_3773; method_16813 register + f Lnet/minecraft/class_3773; field_16930 NECCS + f Lnet/minecraft/class_3773; field_16925 OMDZR + f Lnet/minecraft/class_3773; field_16952 NECE + f Lnet/minecraft/class_3773; field_16966 OMPENTHOUSE + f Lnet/minecraft/class_3773; field_16962 NESCLT + f Lnet/minecraft/class_3773; field_16944 OMSIMPLET + f Lnet/minecraft/class_3773; field_16941 SHRC + f Lnet/minecraft/class_3773; field_16914 SHSTART + f Lnet/minecraft/class_3773; field_16945 NESCRT + f Lnet/minecraft/class_3773; field_16936 ECP + f Lnet/minecraft/class_3773; field_16931 NEMT + f Lnet/minecraft/class_3773; field_16949 SHSSD + f Lnet/minecraft/class_3773; field_16932 ORP + f Lnet/minecraft/class_3773; field_16967 NESR + f Lnet/minecraft/class_3773; field_16955 SHCC + f Lnet/minecraft/class_3773; field_24010 RUINED_PORTAL + f Lnet/minecraft/class_3773; field_16933 TEDP + f Lnet/minecraft/class_3773; field_16937 SH5C + f Lnet/minecraft/class_3773; field_16960 BTP + f Lnet/minecraft/class_3773; field_16969 MSCORRIDOR + f Lnet/minecraft/class_3773; field_16959 SHLI + f Lnet/minecraft/class_3773; field_16915 MSROOM + f Lnet/minecraft/class_3773; field_22195 NETHER_FOSSIL + f Lnet/minecraft/class_3773; field_16911 OMCR + f Lnet/minecraft/class_3773; field_16927 OMDXYR + f Lnet/minecraft/class_3773; field_16948 SHPH + f Lnet/minecraft/class_3773; field_16926 NEBCR + f Lnet/minecraft/class_3773; field_16917 NEBS + f Lnet/minecraft/class_3773; field_16970 OMDYZR + f Lnet/minecraft/class_3773; field_16905 OMENTRY + f Lnet/minecraft/class_3773; field_16943 NECTB + f Lnet/minecraft/class_3773; field_16929 NESCSC + f Lnet/minecraft/class_3773; field_16928 OMSIMPLE + f Lnet/minecraft/class_3773; field_16958 SHRT + f Lnet/minecraft/class_3773; field_16957 OMWR + f Lnet/minecraft/class_3773; field_16904 SHSD + f Lnet/minecraft/class_3773; field_16921 NESC + f Lnet/minecraft/class_3773; field_16961 NECSR + f Lnet/minecraft/class_3773; field_16907 WMP + f Lnet/minecraft/class_3773; field_16934 SHS + f Lnet/minecraft/class_3773; field_16953 TEJP + f Lnet/minecraft/class_3773; field_16908 NERC + f Lnet/minecraft/class_3773; field_16924 NESTART + f Lnet/minecraft/class_3773; field_16909 IGLU + f Lnet/minecraft/class_3773; field_16935 SHIPWRECK + f Lnet/minecraft/class_3773; field_16918 TESH + f Lnet/minecraft/class_3773; field_16965 SHFC + f Lnet/minecraft/class_3773; field_16906 SHLT + f Lnet/minecraft/class_3773; field_16919 MSCROSSING + f Lnet/minecraft/class_3773; field_16922 OMB + f Lnet/minecraft/class_3773; field_16968 MSSTAIRS + f Lnet/minecraft/class_3773; field_16963 OMDXR + f Lnet/minecraft/class_3773; field_25840 field_242786_ad + f Lnet/minecraft/class_3773; field_16939 SHPR + f Lnet/minecraft/class_3773; field_16903 NEBEF + f Lnet/minecraft/class_3773; field_16946 OMDYR +c net/minecraft/class_3195 net/minecraft/world/gen/feature/structure/Structure + m ()Ljava/util/List; method_16140 getCreatureSpawnList + m ()Lcom/mojang/serialization/Codec; method_28665 getFeatureCodec + m ()Z method_27219 func_230365_b_ + m (Lnet/minecraft/class_3037;)Lnet/minecraft/class_5312; method_28659 withConfiguration + m (Lnet/minecraft/class_5312;)Lnet/minecraft/class_3037; method_28658 func_236390_a_ + m (Lnet/minecraft/class_5314;JLnet/minecraft/class_2919;II)Lnet/minecraft/class_1923; method_27218 getChunkPosForStructure + m (Lnet/minecraft/class_3037;)Lnet/minecraft/class_5312; method_28662 func_236395_b_ + m ()Ljava/lang/String; method_14019 getStructureName + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;Lnet/minecraft/class_3485;JLnet/minecraft/class_1923;Lnet/minecraft/class_1959;ILnet/minecraft/class_2919;Lnet/minecraft/class_5314;Lnet/minecraft/class_3037;)Lnet/minecraft/class_3449; method_28657 func_242785_a + m ()V method_28664 init + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_5138;Lnet/minecraft/class_2338;IZJLnet/minecraft/class_5314;)Lnet/minecraft/class_2338; method_14015 func_236388_a_ + m (IILnet/minecraft/class_3341;IJ)Lnet/minecraft/class_3449; method_28656 createStructureStart + m (Ljava/lang/String;Lnet/minecraft/class_3195;Lnet/minecraft/class_2893$class_2895;)Lnet/minecraft/class_3195; method_28661 register + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2487;J)Lnet/minecraft/class_3449; method_28660 deserializeStructureStart + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3037;)Z method_14026 func_230363_a_ + m ()Lnet/minecraft/class_2893$class_2895; method_28663 getDecorationStage + m ()Ljava/util/List; method_13149 getSpawnList + m ()Lnet/minecraft/class_3195$class_3774; method_14016 getStartFactory + f Lnet/minecraft/class_3195; field_24844 MINESHAFT + f Lnet/minecraft/class_3195; field_24843 PILLAGER_OUTPOST + f Lnet/minecraft/class_3195; field_24845 WOODLAND_MANSION + f Ljava/util/Map; field_25839 OLD_TO_NEW_NAMING_MAP + f Ljava/util/List; field_24861 field_236384_t_ + f Lnet/minecraft/class_3195; field_24846 JUNGLE_PYRAMID + f Lnet/minecraft/class_3195; field_24848 IGLOO + f Lnet/minecraft/class_3195; field_24847 DESERT_PYRAMID + f Lnet/minecraft/class_3195; field_24849 RUINED_PORTAL + f Lorg/apache/logging/log4j/Logger; field_13879 LOGGER + f Ljava/util/Map; field_24862 STRUCTURE_DECORATION_STAGE_MAP + f Lnet/minecraft/class_3197; field_24851 SWAMP_HUT + f Lnet/minecraft/class_3195; field_24850 SHIPWRECK + f Lnet/minecraft/class_3195; field_24852 STRONGHOLD + f Lnet/minecraft/class_2960; field_26362 JIGSAW + f Lcom/mojang/serialization/Codec; field_24863 field_236386_w_ + f Lnet/minecraft/class_3195; field_24853 MONUMENT + f Lnet/minecraft/class_3195; field_24854 OCEAN_RUIN + f Lnet/minecraft/class_3195; field_24856 END_CITY + f Lnet/minecraft/class_3195; field_24855 FORTRESS + f Lcom/google/common/collect/BiMap; field_24842 NAME_STRUCTURE_BIMAP + f Lnet/minecraft/class_3195; field_24857 BURIED_TREASURE + f Lnet/minecraft/class_3195; field_24858 VILLAGE + f Lnet/minecraft/class_3195; field_24860 BASTION_REMNANT + f Lnet/minecraft/class_3195; field_24859 NETHER_FOSSIL +c net/minecraft/class_3195$class_3774 net/minecraft/world/gen/feature/structure/Structure$IStartFactory + m (Lnet/minecraft/class_3195;IILnet/minecraft/class_3341;IJ)Lnet/minecraft/class_3449; create create +c net/minecraft/class_3197 net/minecraft/world/gen/feature/structure/SwampHutStructure + f Ljava/util/List; field_13882 SPAWN_LIST + f Ljava/util/List; field_16435 CREATURE_SPAWN_LIST +c net/minecraft/class_3197$class_3198 net/minecraft/world/gen/feature/structure/SwampHutStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28666 func_230364_a_ +c net/minecraft/class_4953 net/minecraft/world/gen/feature/TwistingVineFeature + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338$class_2339;)Z method_27220 func_236420_a_ + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;III)V method_25987 func_236422_a_ + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_25985 generate + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;III)Z method_26265 func_236423_a_ + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;III)V method_25988 func_236424_b_ + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_25986 func_236421_a_ +c net/minecraft/class_2944 net/minecraft/world/gen/feature/TreeFeature + m (Lnet/minecraft/class_3746;ILnet/minecraft/class_2338;Lnet/minecraft/class_4643;)I method_29963 func_241521_a_ + m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16425 isTallPlantAt + m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338;Ljava/util/Set;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)Z method_12775 place + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_3341;Ljava/util/Set;Ljava/util/Set;)Lnet/minecraft/class_251; method_23380 func_236403_a_ + m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16433 isDirtOrFarmlandAt + m (Lnet/minecraft/class_1945;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_12774 func_236408_b_ + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4643;)Z method_22362 generate + m (Lnet/minecraft/class_2680;)Z method_16431 func_236417_f_ + m (Lnet/minecraft/class_2680;)Z method_23384 func_236415_e_ + m (Lnet/minecraft/class_5281;Ljava/util/Random;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4662;)V method_23381 func_236405_a_ + m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16420 isAirOrLeavesAt + m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16432 func_236410_c_ + m (Lnet/minecraft/class_2680;)Z method_16421 func_236413_d_ + m (Lnet/minecraft/class_2680;)Z method_16417 func_236411_c_ + m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16422 isWaterAt + m (Lnet/minecraft/class_2680;)Z method_16426 func_236409_b_ + m (Lnet/minecraft/class_2680;)Z method_16428 func_236406_a_ + m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16416 func_236414_e_ + m (Lnet/minecraft/class_4643;Lnet/minecraft/class_3747;Ljava/util/Random;IIILjava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4647$class_5208;)V method_27372 func_236407_a_ + m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_27371 isReplaceableAt +c net/minecraft/class_3219 net/minecraft/world/gen/feature/VinesFeature + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_14201 generate + f [Lnet/minecraft/class_2350; field_17396 DIRECTIONS +c net/minecraft/class_3211 net/minecraft/world/gen/feature/structure/VillageStructure +c net/minecraft/class_4784 net/minecraft/world/gen/feature/WeepingVineFeature + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_24451 func_236428_a_ + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_24449 generate + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;III)V method_24450 func_236427_a_ + m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_24452 func_236429_b_ + f [Lnet/minecraft/class_2350; field_22196 field_236426_a_ +c net/minecraft/class_3217 net/minecraft/world/gen/feature/VoidStartPlatformFeature + m (IIII)I method_20403 distance + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_14165 generate + f Lnet/minecraft/class_1923; field_19242 VOID_SPAWN_CHUNK_POS + f Lnet/minecraft/class_2338; field_19241 VOID_SPAWN_POS +c net/minecraft/class_3223 net/minecraft/world/gen/feature/structure/WoodlandMansionStructure + m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3111;)Z method_28671 func_230363_a_ +c net/minecraft/class_3223$class_3224 net/minecraft/world/gen/feature/structure/WoodlandMansionStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28672 func_230364_a_ +c net/minecraft/class_3226 net/minecraft/world/gen/feature/ConfiguredRandomFeatureList + m (Lnet/minecraft/class_3226;)Ljava/util/function/Supplier; method_28670 func_242789_b + m (Lnet/minecraft/class_3226;)Ljava/lang/Float; method_28668 func_236432_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28669 func_236433_a_ + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;)Z method_14271 func_242787_a + m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_2975; method_30390 func_242788_a + f Ljava/util/function/Supplier; field_14013 feature + f Lcom/mojang/serialization/Codec; field_24864 field_236430_a_ + f F field_14011 chance +c net/minecraft/class_4630 net/minecraft/world/gen/blockplacer/BlockPlacerType + m ()Lcom/mojang/serialization/Codec; method_28674 getCodec + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4630; method_23405 register + f Lnet/minecraft/class_4630; field_21225 COLUMN + f Lnet/minecraft/class_4630; field_21224 DOUBLE_PLANT + f Lcom/mojang/serialization/Codec; field_24866 codec + f Lnet/minecraft/class_4630; field_21223 SIMPLE_BLOCK +c net/minecraft/class_4629 net/minecraft/world/gen/blockplacer/BlockPlacer + m ()Lnet/minecraft/class_4630; method_28673 getBlockPlacerType + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Random;)V method_23403 place + f Lcom/mojang/serialization/Codec; field_24865 CODEC +c net/minecraft/class_4632 net/minecraft/world/gen/blockplacer/DoublePlantBlockPlacer + m ()Lnet/minecraft/class_4632; method_28678 func_236445_b_ + f Lnet/minecraft/class_4632; field_24869 PLACER + f Lcom/mojang/serialization/Codec; field_24868 CODEC +c net/minecraft/class_4631 net/minecraft/world/gen/blockplacer/ColumnBlockPlacer + m (Lnet/minecraft/class_4631;)Ljava/lang/Integer; method_28677 func_236442_b_ + m (Lnet/minecraft/class_4631;)Ljava/lang/Integer; method_28675 func_236440_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28676 func_236441_a_ + f Lcom/mojang/serialization/Codec; field_24867 CODEC + f I field_21228 extraSize + f I field_21227 minSize +c net/minecraft/class_4633 net/minecraft/world/gen/blockplacer/SimpleBlockPlacer + m ()Lnet/minecraft/class_4633; method_28679 func_236448_b_ + f Lcom/mojang/serialization/Codec; field_24870 CODEC + f Lnet/minecraft/class_4633; field_24871 PLACER +c net/minecraft/class_2963 net/minecraft/world/gen/feature/BlockStateFeatureConfig + m (Lnet/minecraft/class_2963;)Lnet/minecraft/class_2680; method_28684 func_236456_a_ + f Lnet/minecraft/class_2680; field_13356 state + f Lcom/mojang/serialization/Codec; field_24874 field_236455_a_ +c net/minecraft/class_4634 net/minecraft/world/gen/feature/BlockStateProvidingFeatureConfig + m (Lnet/minecraft/class_4634;)Lnet/minecraft/class_4651; method_28683 func_236454_a_ + f Lcom/mojang/serialization/Codec; field_24873 field_236453_a_ + f Lnet/minecraft/class_4651; field_21229 field_227268_a_ +c net/minecraft/class_2984 net/minecraft/world/gen/feature/FeatureSpreadConfig + m ()Lnet/minecraft/class_5428; method_30396 func_242799_a + f Lcom/mojang/serialization/Codec; field_24878 CODEC + f Lnet/minecraft/class_5428; field_13385 field_242798_c +c net/minecraft/class_5156 net/minecraft/world/gen/feature/ColumnConfig + m (Lnet/minecraft/class_5156;)Lnet/minecraft/class_5428; method_30392 func_242792_a + m ()Lnet/minecraft/class_5428; method_30391 func_242794_am_ + m (Lnet/minecraft/class_5156;)Lnet/minecraft/class_5428; method_30395 func_242796_b + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30393 func_242793_a + m ()Lnet/minecraft/class_5428; method_30394 func_242795_b + f Lnet/minecraft/class_5428; field_25841 field_242790_b + f Lnet/minecraft/class_5428; field_25842 field_242791_c + f Lcom/mojang/serialization/Codec; field_24877 CODEC +c net/minecraft/class_2998 net/minecraft/world/gen/placement/IPlacementConfig + f Lnet/minecraft/class_3113; field_13436 NO_PLACEMENT_CONFIG +c net/minecraft/class_2986 net/minecraft/world/gen/feature/DecoratedFeatureConfig + m (Lnet/minecraft/class_2986;)Ljava/util/function/Supplier; method_28704 func_236494_b_ + m ()Ljava/lang/String; toString toString + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28703 func_236493_a_ + m (Lnet/minecraft/class_2986;)Lnet/minecraft/class_3243; method_28702 func_236492_a_ + f Lnet/minecraft/class_3243; field_13398 decorator + f Lcom/mojang/serialization/Codec; field_24880 field_236491_a_ + f Ljava/util/function/Supplier; field_13399 feature +c net/minecraft/class_3013 net/minecraft/world/gen/feature/SphereReplaceConfig + m (Lnet/minecraft/class_3013;)Lnet/minecraft/class_2680; method_28715 func_236521_d_ + m (Lnet/minecraft/class_3013;)Lnet/minecraft/class_5428; method_28714 func_236520_c_ + m (Lnet/minecraft/class_3013;)Ljava/lang/Integer; method_28713 func_236519_b_ + m (Lnet/minecraft/class_3013;)Ljava/util/List; method_28711 func_236517_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28712 func_236518_a_ + f Lcom/mojang/serialization/Codec; field_24882 field_236516_a_ + f Lnet/minecraft/class_5428; field_13472 radius + f I field_13471 field_242809_d + f Ljava/util/List; field_13469 targets + f Lnet/minecraft/class_2680; field_13470 state +c net/minecraft/class_5158 net/minecraft/world/gen/feature/BasaltDeltasFeature + m ()Lnet/minecraft/class_2680; method_30400 func_242806_c + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30399 func_242803_a + m (Lnet/minecraft/class_5158;)Lnet/minecraft/class_2680; method_28710 func_236506_e_ + m (Lnet/minecraft/class_5158;)Lnet/minecraft/class_2680; method_28709 func_236505_d_ + m ()Lnet/minecraft/class_5428; method_30402 func_242807_d + m (Lnet/minecraft/class_5158;)Lnet/minecraft/class_5428; method_30401 func_242805_b + m ()Lnet/minecraft/class_5428; method_30403 func_242808_e + m ()Lnet/minecraft/class_2680; method_30397 func_242804_b + m (Lnet/minecraft/class_5158;)Lnet/minecraft/class_5428; method_30398 func_242802_a + f Lnet/minecraft/class_5428; field_25843 field_242800_d + f Lcom/mojang/serialization/Codec; field_24881 field_236495_a_ + f Lnet/minecraft/class_5428; field_25844 field_242801_e + f Lnet/minecraft/class_2680; field_23896 field_236497_c_ + f Lnet/minecraft/class_2680; field_23895 field_236496_b_ +c net/minecraft/class_3037 net/minecraft/world/gen/feature/IFeatureConfig + m ()Ljava/util/stream/Stream; method_30649 func_241856_an_ + f Lnet/minecraft/class_3111; field_13603 NO_FEATURE_CONFIG +c net/minecraft/class_3018 net/minecraft/world/gen/feature/EndGatewayConfig + m ()Lnet/minecraft/class_3018; method_18030 func_214698_a + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28717 func_236524_a_ + m (Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_3018; method_18034 func_214702_a + m ()Ljava/util/Optional; method_18036 func_214700_b + m ()Z method_13026 func_214701_c + m (Lnet/minecraft/class_3018;)Ljava/lang/Boolean; method_28716 func_236523_a_ + m (Lnet/minecraft/class_3018;)Ljava/util/Optional; method_28718 func_236525_b_ + f Lcom/mojang/serialization/Codec; field_24883 field_236522_a_ + f Z field_13475 exact + f Ljava/util/Optional; field_17735 exit +c net/minecraft/server/Main net/minecraft/server/Main + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_32$class_5143;Lnet/minecraft/class_3283;Lnet/minecraft/class_5350;Lnet/minecraft/class_5219;Lnet/minecraft/class_3807;Lcom/mojang/authlib/minecraft/MinecraftSessionService;Lcom/mojang/authlib/GameProfileRepository;Lnet/minecraft/class_3312;Ljoptsimple/OptionSet;Ljoptsimple/OptionSpec;Ljoptsimple/OptionSpec;Ljoptsimple/OptionSpec;Ljoptsimple/OptionSpec;Ljoptsimple/OptionSpec;Ljoptsimple/OptionSpec;Ljava/lang/Thread;)Lnet/minecraft/class_3176; method_29734 func_240762_a_ + m (Lnet/minecraft/class_32$class_5143;Lcom/mojang/datafixers/DataFixer;ZLjava/util/function/BooleanSupplier;Lcom/google/common/collect/ImmutableSet;)V method_29173 forceWorldUpgrade + m ([Ljava/lang/String;)V main main + m ()Z method_28126 func_240760_a_ + f Lorg/apache/logging/log4j/Logger; field_24625 LOGGER +c net/minecraft/server/Main$1 net/minecraft/server/Main$1 + m ()V run run + f Lnet/minecraft/class_3176; field_4611 field_240763_a_ +c net/minecraft/class_3812 net/minecraft/world/gen/feature/structure/VillageConfig + m ()Ljava/util/function/Supplier; method_27223 func_242810_c + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28724 func_236535_a_ + m ()I method_27222 func_236534_a_ + f I field_16860 size + f Lcom/mojang/serialization/Codec; field_24886 field_236533_a_ + f Ljava/util/function/Supplier; field_16861 startPool +c net/minecraft/class_4635 net/minecraft/world/gen/feature/BigMushroomFeatureConfig + m (Lnet/minecraft/class_4635;)Ljava/lang/Integer; method_28720 func_236529_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28721 func_236530_a_ + m (Lnet/minecraft/class_4635;)Lnet/minecraft/class_4651; method_28723 func_236532_c_ + m (Lnet/minecraft/class_4635;)Lnet/minecraft/class_4651; method_28722 func_236531_b_ + f Lnet/minecraft/class_4651; field_21231 stemProvider + f Lnet/minecraft/class_4651; field_21230 capProvider + f I field_21232 foliageRadius + f Lcom/mojang/serialization/Codec; field_24885 CODEC +c net/minecraft/class_4279 net/minecraft/world/gen/feature/FillLayerConfig + m (Lnet/minecraft/class_4279;)Lnet/minecraft/class_2680; method_28725 func_236538_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28726 func_236539_a_ + m (Lnet/minecraft/class_4279;)Ljava/lang/Integer; method_28727 func_236540_b_ + f Lnet/minecraft/class_2680; field_19203 state + f I field_19202 height + f Lcom/mojang/serialization/Codec; field_24887 field_236537_a_ +c net/minecraft/class_3003 net/minecraft/world/gen/placement/NoiseDependant + m (Lnet/minecraft/class_3003;)Ljava/lang/Integer; method_28734 func_236553_b_ + m (Lnet/minecraft/class_3003;)Ljava/lang/Double; method_28735 func_236554_c_ + m (Lnet/minecraft/class_3003;)Ljava/lang/Integer; method_28732 func_236551_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28733 func_236552_a_ + f I field_13445 aboveNoise + f I field_13446 belowNoise + f Lcom/mojang/serialization/Codec; field_24890 CODEC + f D field_13444 noiseLevel +c net/minecraft/class_3101 net/minecraft/world/gen/feature/structure/MineshaftConfig + m (Lnet/minecraft/class_3101;)Ljava/lang/Float; method_28730 func_236544_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28729 func_236543_a_ + m (Lnet/minecraft/class_3101;)Lnet/minecraft/class_3098$class_3100; method_28728 func_236542_a_ + f Lcom/mojang/serialization/Codec; field_24888 field_236541_a_ + f F field_13693 probability + f Lnet/minecraft/class_3098$class_3100; field_13694 type +c net/minecraft/class_3111 net/minecraft/world/gen/feature/NoFeatureConfig + m ()Lnet/minecraft/class_3111; method_28737 func_236560_a_ + f Lcom/mojang/serialization/Codec; field_24893 field_236558_a_ + f Lnet/minecraft/class_3111; field_24894 field_236559_b_ +c net/minecraft/class_3113 net/minecraft/world/gen/placement/NoPlacementConfig + m ()Lnet/minecraft/class_3113; method_28736 func_236557_a_ + f Lcom/mojang/serialization/Codec; field_24891 CODEC + f Lnet/minecraft/class_3113; field_24892 INSTANCE +c net/minecraft/class_3124 net/minecraft/world/gen/feature/OreFeatureConfig + m (Lnet/minecraft/class_3124;)Ljava/lang/Integer; method_28742 func_236567_a_ + m (Lnet/minecraft/class_3124;)Lnet/minecraft/class_3825; method_28745 func_236570_c_ + m (Lnet/minecraft/class_3124;)Lnet/minecraft/class_2680; method_28744 func_236569_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28743 func_236568_a_ + f Lnet/minecraft/class_2680; field_13724 state + f I field_13723 size + f Lcom/mojang/serialization/Codec; field_24896 CODEC + f Lnet/minecraft/class_3825; field_13725 target +c net/minecraft/class_3124$class_5436 net/minecraft/world/gen/feature/OreFeatureConfig$FillerBlockType + f Lnet/minecraft/class_3825; field_25846 NETHERRACK + f Lnet/minecraft/class_3825; field_25847 BASE_STONE_NETHER + f Lnet/minecraft/class_3825; field_25845 BASE_STONE_OVERWORLD +c net/minecraft/class_3114 net/minecraft/world/gen/feature/structure/OceanRuinConfig + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28739 func_236563_a_ + m (Lnet/minecraft/class_3114;)Ljava/lang/Float; method_28740 func_236564_b_ + m (Lnet/minecraft/class_3114;)Ljava/lang/Float; method_28738 func_236562_a_ + m (Lnet/minecraft/class_3114;)Lnet/minecraft/class_3411$class_3413; method_28741 func_236565_c_ + f F field_13708 largeProbability + f Lnet/minecraft/class_3411$class_3413; field_13709 field_204031_a + f Lcom/mojang/serialization/Codec; field_24895 field_236561_a_ + f F field_13707 clusterProbability +c net/minecraft/class_3137 net/minecraft/world/gen/feature/TwoFeatureChoiceConfig + m (Lnet/minecraft/class_3137;)Ljava/util/function/Supplier; method_28751 func_236582_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28750 func_236581_a_ + m (Lnet/minecraft/class_3137;)Ljava/util/function/Supplier; method_28749 func_236580_a_ + f Lcom/mojang/serialization/Codec; field_24900 field_236579_a_ + f Ljava/util/function/Supplier; field_13740 field_227285_a_ + f Ljava/util/function/Supplier; field_13739 field_227286_b_ +c net/minecraft/class_3133 net/minecraft/world/gen/feature/ProbabilityConfig + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28748 func_236578_a_ + m (Lnet/minecraft/class_3133;)Ljava/lang/Float; method_28747 func_236577_a_ + f Lcom/mojang/serialization/Codec; field_24899 CODEC + f F field_13738 probability +c net/minecraft/class_4638 net/minecraft/world/gen/feature/BlockClusterFeatureConfig + m (Lnet/minecraft/class_4638;)Ljava/lang/Integer; method_28759 func_236592_d_ + m (Lnet/minecraft/class_4638;)Ljava/util/List; method_28764 func_236597_i_ + m (Lnet/minecraft/class_4638;)Ljava/lang/Boolean; method_28758 func_236591_c_ + m (Lnet/minecraft/class_4638;)Ljava/lang/Integer; method_28762 func_236595_g_ + m (Lnet/minecraft/class_4638;)Ljava/util/List; method_28763 func_236596_h_ + m (Lnet/minecraft/class_4638;)Ljava/lang/Boolean; method_28757 func_236590_b_ + m (Lnet/minecraft/class_4638;)Ljava/lang/Integer; method_28761 func_236594_f_ + m (Lnet/minecraft/class_4638;)Ljava/lang/Boolean; method_28755 func_236588_a_ + m (Lnet/minecraft/class_4638;)Ljava/lang/Integer; method_28760 func_236593_e_ + m (Lnet/minecraft/class_4638;)Lnet/minecraft/class_4651; method_28766 func_236599_k_ + m (Lnet/minecraft/class_4638;)Lnet/minecraft/class_4629; method_28765 func_236598_j_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28756 func_236589_a_ + f I field_21244 zSpread + f Ljava/util/Set; field_21239 whitelist + f I field_21242 xSpread + f Ljava/util/Set; field_21240 blacklist + f I field_21243 ySpread + f Z field_21245 isReplaceable + f Z field_21246 field_227298_k_ + f Z field_21247 requiresWater + f Lnet/minecraft/class_4651; field_21237 stateProvider + f Lnet/minecraft/class_4629; field_21238 blockPlacer + f Lcom/mojang/serialization/Codec; field_24902 field_236587_a_ + f I field_21241 tryCount +c net/minecraft/class_4638$class_4639 net/minecraft/world/gen/feature/BlockClusterFeatureConfig$Builder + m (Ljava/util/Set;)Lnet/minecraft/class_4638$class_4639; method_23421 blacklist + m (Ljava/util/Set;)Lnet/minecraft/class_4638$class_4639; method_23418 whitelist + m ()Lnet/minecraft/class_4638$class_4639; method_23416 replaceable + m ()Lnet/minecraft/class_4638; method_23424 build + m ()Lnet/minecraft/class_4638$class_4639; method_23419 func_227317_b_ + m ()Lnet/minecraft/class_4638$class_4639; method_23422 requiresWater + m (I)Lnet/minecraft/class_4638$class_4639; method_23420 xSpread + m (I)Lnet/minecraft/class_4638$class_4639; method_23423 ySpread + m (I)Lnet/minecraft/class_4638$class_4639; method_23425 zSpread + m (I)Lnet/minecraft/class_4638$class_4639; method_23417 tries + f Lnet/minecraft/class_4651; field_21248 stateProvider + f Ljava/util/Set; field_21251 blacklist + f I field_21255 zSpread + f I field_21254 ySpread + f Z field_21258 requiresWater + f I field_21253 xSpread + f Z field_21257 field_227312_j_ + f I field_21252 tryCount + f Ljava/util/Set; field_21250 whitelist + f Z field_21256 isReplaceable + f Lnet/minecraft/class_4629; field_21249 blockPlacer +c net/minecraft/class_4638$1 net/minecraft/world/gen/feature/BlockClusterFeatureConfig$1 +c net/minecraft/class_3141 net/minecraft/world/gen/feature/MultipleRandomFeatureConfig + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28753 func_236585_a_ + m (Lnet/minecraft/class_3141;)Ljava/util/List; method_28754 func_236586_b_ + m (Lnet/minecraft/class_3141;)Ljava/util/function/Supplier; method_28752 func_236584_a_ + m (Lnet/minecraft/class_3226;)Ljava/util/stream/Stream; method_30650 func_242812_a + m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_2975; method_30404 func_242811_a + f Ljava/util/function/Supplier; field_13745 defaultFeature + f Lcom/mojang/serialization/Codec; field_24901 field_236583_a_ + f Ljava/util/List; field_13744 features +c net/minecraft/class_3154 net/minecraft/world/gen/feature/ReplaceBlockConfig + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28771 func_236606_a_ + m (Lnet/minecraft/class_3154;)Lnet/minecraft/class_2680; method_28772 func_236607_b_ + m (Lnet/minecraft/class_3154;)Lnet/minecraft/class_2680; method_28770 func_236605_a_ + f Lnet/minecraft/class_2680; field_13765 target + f Lnet/minecraft/class_2680; field_13766 state + f Lcom/mojang/serialization/Codec; field_24904 field_236604_a_ +c net/minecraft/class_2997 net/minecraft/world/gen/placement/TopSolidRangeConfig + m (Lnet/minecraft/class_2997;)Ljava/lang/Integer; method_28700 func_236988_b_ + m (Lnet/minecraft/class_2997;)Ljava/lang/Integer; method_28697 func_242816_a + m (Lnet/minecraft/class_2997;)Ljava/lang/Integer; method_28699 func_236987_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28698 func_236986_a_ + f I field_13434 bottomOffset + f I field_13433 topOffset + f Lcom/mojang/serialization/Codec; field_24879 CODEC + f I field_13432 maximum +c net/minecraft/class_5187 net/minecraft/world/gen/feature/RuinedPortalFeature + m (Lnet/minecraft/class_5187;)Lnet/minecraft/class_5183$class_5185; method_28778 func_236629_a_ + f Lnet/minecraft/class_5183$class_5185; field_24014 field_236628_b_ + f Lcom/mojang/serialization/Codec; field_24906 field_236627_a_ +c net/minecraft/class_5437 net/minecraft/world/gen/feature/BlobReplacementConfig + m (Lnet/minecraft/class_5437;)Lnet/minecraft/class_2680; method_30409 func_242825_c + m ()Lnet/minecraft/class_5428; method_30405 func_242823_b + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30406 func_242822_a + m (Lnet/minecraft/class_5437;)Lnet/minecraft/class_2680; method_30408 func_242824_b + m (Lnet/minecraft/class_5437;)Lnet/minecraft/class_5428; method_30407 func_242821_a + f Lcom/mojang/serialization/Codec; field_25848 CODEC + f Lnet/minecraft/class_5428; field_25851 field_242820_d + f Lnet/minecraft/class_2680; field_25850 field_242819_c + f Lnet/minecraft/class_2680; field_25849 field_242818_b +c net/minecraft/class_3175 net/minecraft/world/gen/feature/BlockWithContextConfig + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28784 func_236638_a_ + m (Lnet/minecraft/class_3175;)Ljava/util/List; method_28783 func_236637_a_ + m (Lnet/minecraft/class_3175;)Lnet/minecraft/class_2680; method_28787 func_236641_d_ + m (Lnet/minecraft/class_3175;)Ljava/util/List; method_28785 func_236639_b_ + m (Lnet/minecraft/class_3175;)Ljava/util/List; method_28786 func_236640_c_ + f Lnet/minecraft/class_2680; field_13807 toPlace + f Ljava/util/List; field_13806 placeUnder + f Lcom/mojang/serialization/Codec; field_24909 field_236636_a_ + f Ljava/util/List; field_13805 placeIn + f Ljava/util/List; field_13808 placeOn +c net/minecraft/class_3172 net/minecraft/world/gen/feature/structure/ShipwreckConfig + m (Lnet/minecraft/class_3172;)Ljava/lang/Boolean; method_28782 func_236635_a_ + f Lcom/mojang/serialization/Codec; field_24908 field_236634_a_ + f Z field_13803 isBeached +c net/minecraft/class_3666 net/minecraft/world/gen/feature/EndSpikeFeatureConfig + m ()Z method_15883 isCrystalInvulnerable + m (Lnet/minecraft/class_3666;)Ljava/util/List; method_28791 func_236647_b_ + m (Lnet/minecraft/class_3666;)Ljava/lang/Boolean; method_28792 func_236648_c_ + m (Lnet/minecraft/class_3666;)Ljava/util/Optional; method_28789 func_236646_a_ + m ()Lnet/minecraft/class_2338; method_15884 getCrystalBeamTarget + m ()Ljava/util/List; method_15885 getSpikes + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28790 func_236645_a_ + f Z field_16207 crystalInvulnerable + f Lnet/minecraft/class_2338; field_16206 crystalBeamTarget + f Ljava/util/List; field_16208 spikes + f Lcom/mojang/serialization/Codec; field_24911 field_236644_a_ +c net/minecraft/class_3179 net/minecraft/world/gen/feature/SingleRandomFeature + m (Ljava/util/function/Supplier;)Ljava/util/stream/Stream; method_30651 func_242826_a + m (Lnet/minecraft/class_3179;)Ljava/util/List; method_28788 func_236643_a_ + f Lcom/mojang/serialization/Codec; field_24910 field_236642_a_ + f Ljava/util/List; field_13827 features +c net/minecraft/class_5313 net/minecraft/world/gen/settings/StructureSpreadSettings + m ()I method_28801 func_236662_b_ + m ()I method_28802 func_236663_c_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28800 func_236661_a_ + m ()I method_28799 func_236660_a_ + f I field_24914 field_236657_b_ + f Lcom/mojang/serialization/Codec; field_24913 field_236656_a_ + f I field_24915 field_236658_c_ + f I field_24916 field_236659_d_ +c net/minecraft/class_4642 net/minecraft/world/gen/feature/LiquidsConfig + m (Lnet/minecraft/class_4642;)Ljava/lang/Integer; method_28796 func_236653_c_ + m (Lnet/minecraft/class_4642;)Ljava/lang/Boolean; method_28797 func_236654_d_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28794 func_236650_a_ + m (Lnet/minecraft/class_4642;)Lnet/minecraft/class_3610; method_28798 func_236655_e_ + m (Lnet/minecraft/class_4642;)Ljava/lang/Integer; method_28795 func_236652_b_ + m (Lnet/minecraft/class_4642;)Ljava/util/Set; method_28793 func_236651_a_ + f Z field_21284 needsBlockBelow + f I field_21285 rockAmount + f Lcom/mojang/serialization/Codec; field_24912 field_236649_a_ + f I field_21286 holeAmount + f Lnet/minecraft/class_3610; field_21283 state + f Ljava/util/Set; field_21287 acceptedBlocks +c net/minecraft/class_4643 net/minecraft/world/gen/feature/BaseTreeFeatureConfig + m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_5201; method_28815 func_236689_e_ + m (Lnet/minecraft/class_4643;)Ljava/lang/Integer; method_28813 func_236687_c_ + m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_4651; method_28819 func_236693_i_ + m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_4647; method_28817 func_236691_g_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28811 func_236683_a_ + m (Lnet/minecraft/class_4643;)Ljava/util/List; method_28814 func_236688_d_ + m ()V method_23916 forcePlacement + m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_4651; method_28818 func_236692_h_ + m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_2902$class_2903; method_28810 func_236684_a_ + m (Ljava/util/List;)Lnet/minecraft/class_4643; method_27373 func_236685_a_ + m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_5141; method_28816 func_236690_f_ + m (Lnet/minecraft/class_4643;)Ljava/lang/Boolean; method_28812 func_236686_b_ + f Z field_24138 ignoreVines + f Ljava/util/List; field_21290 decorators + f Lnet/minecraft/class_2902$class_2903; field_24139 field_236682_l_ + f Lnet/minecraft/class_5201; field_24137 minimumSize + f Lcom/mojang/serialization/Codec; field_24921 CODEC + f Lnet/minecraft/class_4647; field_24135 foliagePlacer + f Z field_21593 forcePlacement + f Lnet/minecraft/class_4651; field_21288 trunkProvider + f Lnet/minecraft/class_5141; field_24136 trunkPlacer + f Lnet/minecraft/class_4651; field_21289 leavesProvider + f I field_21291 maxWaterDepth +c net/minecraft/class_4643$class_4644 net/minecraft/world/gen/feature/BaseTreeFeatureConfig$Builder + m (Ljava/util/List;)Lnet/minecraft/class_4643$class_4644; method_27376 setDecorators + m ()Lnet/minecraft/class_4643; method_23445 build + m ()Lnet/minecraft/class_4643$class_4644; method_27374 setIgnoreVines + m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_4643$class_4644; method_27375 func_236702_a_ + m (I)Lnet/minecraft/class_4643$class_4644; method_23446 setMaxWaterDepth + f Z field_24143 ignoreVines + f Lnet/minecraft/class_4647; field_24140 foliagePlacer + f Lnet/minecraft/class_2902$class_2903; field_24144 field_236699_i_ + f Ljava/util/List; field_21294 decorators + f I field_21295 maxWaterDepth + f Lnet/minecraft/class_5141; field_24141 trunkPlacer + f Lnet/minecraft/class_4651; field_21292 trunkProvider + f Lnet/minecraft/class_5201; field_24142 minimumSize + f Lnet/minecraft/class_4651; field_21293 leavesProvider +c net/minecraft/class_5314 net/minecraft/world/gen/settings/StructureSeparationSettings + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28805 func_236669_a_ + m ()I method_28803 func_236668_a_ + m (Lnet/minecraft/class_5314;)Ljava/lang/Integer; method_28804 func_236672_b_ + m ()I method_28806 func_236671_b_ + m (Lnet/minecraft/class_5314;)Lcom/mojang/serialization/DataResult; method_29298 func_236670_a_ + m ()I method_28808 func_236673_c_ + m (Lnet/minecraft/class_5314;)Ljava/lang/Integer; method_28807 func_236674_c_ + m (Lnet/minecraft/class_5314;)Ljava/lang/Integer; method_28809 func_236675_d_ + f I field_24919 field_236666_c_ + f I field_24920 field_236667_d_ + f Lcom/mojang/serialization/Codec; field_24917 field_236664_a_ + f I field_24918 field_236665_b_ +c net/minecraft/class_5201 net/minecraft/world/gen/feature/AbstractFeatureSizeType + m (Ljava/util/Optional;)Ljava/util/OptionalInt; method_28822 func_236708_a_ + m (II)I method_27378 func_230369_a_ + m (Ljava/util/OptionalInt;)Ljava/util/Optional; method_28823 func_236709_a_ + m ()Ljava/util/OptionalInt; method_27377 func_236710_c_ + m ()Lnet/minecraft/class_5202; method_28824 func_230370_b_ + m (Lnet/minecraft/class_5201;)Ljava/util/OptionalInt; method_28821 func_236707_a_ + m ()Lcom/mojang/serialization/codecs/RecordCodecBuilder; method_28820 func_236706_a_ + f Lcom/mojang/serialization/Codec; field_24922 CODEC + f Ljava/util/OptionalInt; field_24146 field_236705_b_ +c net/minecraft/class_5202 net/minecraft/world/gen/feature/FeatureSizeType + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_5202; method_27382 register + m ()Lcom/mojang/serialization/Codec; method_28825 getCodec + f Lnet/minecraft/class_5202; field_24147 TWO_LAYERS_FEATURE_SIZE + f Lcom/mojang/serialization/Codec; field_24923 codec + f Lnet/minecraft/class_5202; field_24148 THREE_LAYERS_FEATURE_SIZE +c net/minecraft/class_5204 net/minecraft/world/gen/feature/TwoLayerFeature + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28833 func_236732_a_ + m (Lnet/minecraft/class_5204;)Ljava/lang/Integer; method_28834 func_236734_b_ + m (Lnet/minecraft/class_5204;)Ljava/lang/Integer; method_28832 func_236733_a_ + m (Lnet/minecraft/class_5204;)Ljava/lang/Integer; method_28835 func_236735_c_ + f I field_24155 field_236729_d_ + f Lcom/mojang/serialization/Codec; field_24925 field_236728_c_ + f I field_24156 field_236730_e_ + f I field_24157 field_236731_f_ +c net/minecraft/class_5203 net/minecraft/world/gen/feature/ThreeLayerFeature + m (Lnet/minecraft/class_5203;)Ljava/lang/Integer; method_28826 func_236723_a_ + m (Lnet/minecraft/class_5203;)Ljava/lang/Integer; method_28828 func_236724_b_ + m (Lnet/minecraft/class_5203;)Ljava/lang/Integer; method_28830 func_236726_d_ + m (Lnet/minecraft/class_5203;)Ljava/lang/Integer; method_28829 func_236725_c_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28827 func_236722_a_ + m (Lnet/minecraft/class_5203;)Ljava/lang/Integer; method_28831 func_236727_e_ + f I field_24151 field_236718_e_ + f I field_24152 field_236719_f_ + f I field_24153 field_236720_g_ + f I field_24154 field_236721_h_ + f Lcom/mojang/serialization/Codec; field_24924 field_236716_c_ + f I field_24150 field_236717_d_ +c net/minecraft/class_4645 net/minecraft/world/gen/foliageplacer/AcaciaFoliagePlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28836 func_236737_a_ + f Lcom/mojang/serialization/Codec; field_24926 field_236736_a_ +c net/minecraft/class_5205 net/minecraft/world/gen/foliageplacer/BushFoliagePlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28840 func_236744_c_ + f Lcom/mojang/serialization/Codec; field_24928 field_236743_c_ +c net/minecraft/class_4646 net/minecraft/world/gen/foliageplacer/BlobFoliagePlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28839 func_236742_c_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/Products$P3; method_28838 func_236740_a_ + m (Lnet/minecraft/class_4646;)Ljava/lang/Integer; method_28837 func_236741_a_ + f Lcom/mojang/serialization/Codec; field_24927 field_236738_a_ + f I field_23752 field_236739_b_ +c net/minecraft/class_5207 net/minecraft/world/gen/foliageplacer/FancyFoliagePlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28842 func_236748_c_ + f Lcom/mojang/serialization/Codec; field_24930 field_236747_c_ +c net/minecraft/class_5206 net/minecraft/world/gen/foliageplacer/DarkOakFoliagePlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28841 func_236746_a_ + f Lcom/mojang/serialization/Codec; field_24929 field_236745_a_ +c net/minecraft/class_4648 net/minecraft/world/gen/foliageplacer/FoliagePlacerType + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4648; method_28850 func_236773_a_ + m ()Lcom/mojang/serialization/Codec; method_28849 func_236772_a_ + f Lnet/minecraft/class_4648; field_21302 ACACIA + f Lnet/minecraft/class_4648; field_24165 field_236770_i_ + f Lnet/minecraft/class_4648; field_21301 PINE + f Lnet/minecraft/class_4648; field_24164 field_236769_h_ + f Lnet/minecraft/class_4648; field_21300 SPRUCE + f Lnet/minecraft/class_4648; field_24163 field_236768_g_ + f Lcom/mojang/serialization/Codec; field_24932 field_236771_j_ + f Lnet/minecraft/class_4648; field_21299 BLOB + f Lnet/minecraft/class_4648; field_24162 field_236767_f_ + f Lnet/minecraft/class_4648; field_24161 field_236766_e_ +c net/minecraft/class_4647 net/minecraft/world/gen/foliageplacer/FoliagePlacer + m (Lnet/minecraft/class_4647;)Lnet/minecraft/class_5428; method_30412 func_242829_b + m ()Lnet/minecraft/class_4648; method_28843 func_230371_a_ + m (Ljava/util/Random;)I method_27386 func_236755_a_ + m (Lnet/minecraft/class_4647;)Lnet/minecraft/class_5428; method_30410 func_242828_a + m (Ljava/util/Random;I)I method_23452 func_230376_a_ + m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_4643;Lnet/minecraft/class_2338;ILjava/util/Set;IZLnet/minecraft/class_3341;)V method_23449 func_236753_a_ + m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_4643;ILnet/minecraft/class_4647$class_5208;IILjava/util/Set;ILnet/minecraft/class_3341;)V method_23448 func_230372_a_ + m (Ljava/util/Random;ILnet/minecraft/class_4643;)I method_26989 func_230374_a_ + m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_4643;ILnet/minecraft/class_4647$class_5208;IILjava/util/Set;Lnet/minecraft/class_3341;)V method_27385 func_236752_a_ + m (Ljava/util/Random;IIIIZ)Z method_27387 func_230375_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/Products$P2; method_30411 func_242830_b + m (Ljava/util/Random;IIIIZ)Z method_23451 func_230373_a_ + f Lcom/mojang/serialization/Codec; field_24931 field_236749_d_ + f Lnet/minecraft/class_5428; field_23753 field_236750_g_ + f Lnet/minecraft/class_5428; field_21296 field_227381_a_ +c net/minecraft/class_4647$class_5208 net/minecraft/world/gen/foliageplacer/FoliagePlacer$Foliage + m ()Z method_27390 func_236765_c_ + m ()I method_27389 func_236764_b_ + m ()Lnet/minecraft/class_2338; method_27388 func_236763_a_ + f I field_24159 field_236761_b_ + f Z field_24160 field_236762_c_ + f Lnet/minecraft/class_2338; field_24158 field_236760_a_ +c net/minecraft/class_5210 net/minecraft/world/gen/foliageplacer/MegaPineFoliagePlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30413 func_242832_a + m (Lnet/minecraft/class_5210;)Lnet/minecraft/class_5428; method_30414 func_242831_a + f Lcom/mojang/serialization/Codec; field_24934 field_236778_a_ + f Lnet/minecraft/class_5428; field_24168 field_236780_c_ +c net/minecraft/class_5209 net/minecraft/world/gen/foliageplacer/JungleFoliagePlacer + m (Lnet/minecraft/class_5209;)Ljava/lang/Integer; method_28851 func_236777_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28852 func_236776_a_ + f I field_24166 field_236775_b_ + f Lcom/mojang/serialization/Codec; field_24933 field_236774_a_ +c net/minecraft/class_4650 net/minecraft/world/gen/foliageplacer/SpruceFoliagePlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30417 func_242836_a + m (Lnet/minecraft/class_4650;)Lnet/minecraft/class_5428; method_30418 func_242835_a + f Lnet/minecraft/class_5428; field_23757 field_236791_b_ + f Lcom/mojang/serialization/Codec; field_24936 field_236790_a_ +c net/minecraft/class_4649 net/minecraft/world/gen/foliageplacer/PineFoliagePlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30415 func_242834_a + m (Lnet/minecraft/class_4649;)Lnet/minecraft/class_5428; method_30416 func_242833_a + f Lcom/mojang/serialization/Codec; field_24935 field_236784_a_ + f Lnet/minecraft/class_5428; field_23755 field_236785_b_ +c net/minecraft/class_4652 net/minecraft/world/gen/blockstateprovider/BlockStateProviderType + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4652; method_23457 register + m ()Lcom/mojang/serialization/Codec; method_28863 getCodec + f Lnet/minecraft/class_4652; field_24938 AXIS_ROTATING_STATE_PROVIDER + f Lnet/minecraft/class_4652; field_21305 SIMPLE_STATE_PROVIDER + f Lnet/minecraft/class_4652; field_21306 WEIGHTED_STATE_PROVIDER + f Lnet/minecraft/class_4652; field_21307 PLAIN_FLOWER_PROVIDER + f Lcom/mojang/serialization/Codec; field_24939 codec + f Lnet/minecraft/class_4652; field_21308 FOREST_FLOWER_PROVIDER +c net/minecraft/class_4651 net/minecraft/world/gen/blockstateprovider/BlockStateProvider + m ()Lnet/minecraft/class_4652; method_28862 getProviderType + m (Ljava/util/Random;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_23455 getBlockState + f Lcom/mojang/serialization/Codec; field_24937 CODEC +c net/minecraft/class_4654 net/minecraft/world/gen/blockstateprovider/PlainFlowerBlockStateProvider + m ()Lnet/minecraft/class_4654; method_28865 func_236806_b_ + f [Lnet/minecraft/class_2680; field_21311 RARE_FLOWERS + f [Lnet/minecraft/class_2680; field_21312 COMMON_FLOWERS + f Lcom/mojang/serialization/Codec; field_24942 CODEC + f Lnet/minecraft/class_4654; field_24943 PROVIDER +c net/minecraft/class_4653 net/minecraft/world/gen/blockstateprovider/ForestFlowerBlockStateProvider + m ()Lnet/minecraft/class_4653; method_28864 func_236803_b_ + f Lnet/minecraft/class_4653; field_24941 PROVIDER + f [Lnet/minecraft/class_2680; field_21310 STATES + f Lcom/mojang/serialization/Codec; field_24940 CODEC +c net/minecraft/class_4656 net/minecraft/world/gen/blockstateprovider/SimpleBlockStateProvider + m (Lnet/minecraft/class_4656;)Lnet/minecraft/class_2680; method_28867 func_236810_a_ + f Lnet/minecraft/class_2680; field_21314 state + f Lcom/mojang/serialization/Codec; field_24945 CODEC +c net/minecraft/class_4655 net/minecraft/world/gen/blockstateprovider/AxisRotatingBlockStateProvider + m (Lnet/minecraft/class_4655;)Lnet/minecraft/class_2248; method_28866 func_236808_a_ + f Lnet/minecraft/class_2248; field_21313 block + f Lcom/mojang/serialization/Codec; field_24944 CODEC +c net/minecraft/class_4657 net/minecraft/world/gen/blockstateprovider/WeightedBlockStateProvider + m (Lnet/minecraft/class_4657;)Lnet/minecraft/class_4131; method_28869 func_236813_a_ + m (Lnet/minecraft/class_2680;I)Lnet/minecraft/class_4657; method_23458 addWeightedBlockstate + m (Lnet/minecraft/class_4131;)Lcom/mojang/serialization/DataResult; method_28868 encode + f Lnet/minecraft/class_4131; field_21315 weightedStates + f Lcom/mojang/serialization/Codec; field_24946 CODEC +c net/minecraft/class_3776 net/minecraft/world/gen/feature/jigsaw/FeatureJigsawPiece + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2470;)Lnet/minecraft/class_2338; method_16601 getSize + m ()Lnet/minecraft/class_2487; method_19299 writeNBT + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28871 func_236817_a_ + m (Lnet/minecraft/class_3776;)Ljava/util/function/Supplier; method_28872 func_236818_a_ + f Ljava/util/function/Supplier; field_16661 configuredFeature + f Lcom/mojang/serialization/Codec; field_24948 field_236816_a_ + f Lnet/minecraft/class_2487; field_16662 nbt +c net/minecraft/class_3777 net/minecraft/world/gen/feature/jigsaw/EmptyJigsawPiece + m ()Lnet/minecraft/class_3777; method_28870 func_236815_b_ + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_3777; field_16663 INSTANCE + f Lcom/mojang/serialization/Codec; field_24947 field_236814_a_ +c net/minecraft/class_3780 net/minecraft/world/gen/feature/jigsaw/JigsawJunction + m ()I hashCode hashCode + m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_3780; method_28873 func_236819_a_ + m ()I method_16611 getSourceGroundY + m (Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_16612 func_236820_a_ + m (Ljava/lang/Object;)Z equals equals + m ()I method_16610 getSourceX + m ()Ljava/lang/String; toString toString + m ()I method_16609 getSourceZ + f I field_16668 sourceZ + f Lnet/minecraft/class_3785$class_3786; field_16671 destProjection + f I field_16667 deltaY + f I field_16669 sourceGroundY + f I field_16670 sourceX +c net/minecraft/class_5188 net/minecraft/world/gen/feature/jigsaw/LegacySingleJigsawPiece + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28874 func_236833_a_ + f Lcom/mojang/serialization/Codec; field_24949 field_236832_a_ +c net/minecraft/class_3778 net/minecraft/world/gen/feature/jigsaw/JigsawManager + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_3812;Lnet/minecraft/class_3778$class_3779;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Ljava/util/List;Ljava/util/Random;ZZ)V method_30419 func_242837_a + m ()Lorg/apache/logging/log4j/Logger; method_19300 func_236824_b_ + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_3790;ILnet/minecraft/class_3778$class_3779;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Ljava/util/List;Ljava/util/Random;)V method_27230 func_242838_a + f Lorg/apache/logging/log4j/Logger; field_16665 LOGGER +c net/minecraft/class_3778$class_4182 net/minecraft/world/gen/feature/jigsaw/JigsawManager$Assembler + m (Lnet/minecraft/class_3778$class_4182;Lnet/minecraft/class_3790;Lorg/apache/commons/lang3/mutable/MutableObject;IIZ)V method_27232 func_236830_a_ + m (Lnet/minecraft/class_3778$class_4182;)Ljava/util/Deque; method_27231 func_236829_a_ + m (Lnet/minecraft/class_3341;Lnet/minecraft/class_3499$class_3501;)I method_19305 func_242841_a + m (Lnet/minecraft/class_3785;)Ljava/lang/Integer; method_31113 func_242840_a + m (Lnet/minecraft/class_3785;)Ljava/lang/Integer; method_31114 func_242842_b + m (Lnet/minecraft/class_3785;)Ljava/util/Optional; method_31115 func_242843_c + m (Lnet/minecraft/class_3790;Lorg/apache/commons/lang3/mutable/MutableObject;IIZ)V method_19306 func_236831_a_ + f Ljava/util/Deque; field_18706 availablePieces + f Ljava/util/Random; field_18705 rand + f Lnet/minecraft/class_3485; field_18703 templateManager + f Ljava/util/List; field_18704 structurePieces + f Lnet/minecraft/class_2378; field_25852 field_242839_a + f Lnet/minecraft/class_2794; field_18702 chunkGenerator + f Lnet/minecraft/class_3778$class_3779; field_18701 pieceFactory + f I field_18700 maxDepth +c net/minecraft/class_3778$class_4181 net/minecraft/world/gen/feature/jigsaw/JigsawManager$Entry + m (Lnet/minecraft/class_3778$class_4181;)I method_19304 func_236828_d_ + m (Lnet/minecraft/class_3778$class_4181;)I method_19303 func_236827_c_ + m (Lnet/minecraft/class_3778$class_4181;)Lorg/apache/commons/lang3/mutable/MutableObject; method_19302 func_236826_b_ + m (Lnet/minecraft/class_3778$class_4181;)Lnet/minecraft/class_3790; method_19301 func_236825_a_ + f I field_18698 boundsTop + f Lnet/minecraft/class_3790; field_18696 villagePiece + f I field_18699 depth + f Lorg/apache/commons/lang3/mutable/MutableObject; field_18697 free +c net/minecraft/class_3778$class_3779 net/minecraft/world/gen/feature/jigsaw/JigsawManager$IPieceFactory + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3784;Lnet/minecraft/class_2338;ILnet/minecraft/class_2470;Lnet/minecraft/class_3341;)Lnet/minecraft/class_3790; create create +c net/minecraft/class_3778$1 net/minecraft/world/gen/feature/jigsaw/JigsawManager$1 +c net/minecraft/class_3781 net/minecraft/world/gen/feature/jigsaw/SingleJigsawPiece + m (Lnet/minecraft/class_2470;Lnet/minecraft/class_3341;Z)Lnet/minecraft/class_3492; method_16616 func_230379_a_ + m ()Ljava/lang/String; toString toString + m ()Lnet/minecraft/class_5497; method_31022 func_242844_h + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Z)Ljava/util/List; method_16614 getDataMarkers + m (Lcom/mojang/datafixers/util/Either;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_28877 func_236840_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28878 func_236841_a_ + m (Lnet/minecraft/class_3781;)Ljava/util/function/Supplier; method_28881 func_236845_b_ + m ()Lcom/mojang/serialization/codecs/RecordCodecBuilder; method_28880 func_236844_b_ + m ()Lcom/mojang/serialization/codecs/RecordCodecBuilder; method_28882 func_236846_c_ + m (Lnet/minecraft/class_3485;)Lnet/minecraft/class_3499; method_27233 func_236843_a_ + m (Lnet/minecraft/class_3781;)Lcom/mojang/datafixers/util/Either; method_28879 func_236842_a_ + f Lcom/mojang/serialization/Codec; field_24951 field_236837_a_ + f Lcom/mojang/serialization/Codec; field_24952 field_236838_b_ + f Lcom/mojang/datafixers/util/Either; field_24015 field_236839_c_ + f Ljava/util/function/Supplier; field_16674 processors +c net/minecraft/class_3782 net/minecraft/world/gen/feature/jigsaw/ListJigsawPiece + m ()Ljava/lang/String; toString toString + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28875 func_236835_a_ + m (Lnet/minecraft/class_3785$class_3786;)V method_19307 setProjectionOnEachElement + m (Lnet/minecraft/class_3785$class_3786;Lnet/minecraft/class_3784;)V method_16620 func_214863_a + m (Lnet/minecraft/class_3782;)Ljava/util/List; method_28876 func_236836_a_ + f Ljava/util/List; field_16676 elements + f Lcom/mojang/serialization/Codec; field_24950 field_236834_a_ +c net/minecraft/class_3816 net/minecraft/world/gen/feature/jigsaw/IJigsawDeserializer + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_3816; method_28885 func_236851_a_ + m ()Lcom/mojang/serialization/Codec; codec codec + m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28884 func_236850_a_ + f Lnet/minecraft/class_3816; field_24016 field_236849_e_ + f Lnet/minecraft/class_3816; field_16973 SINGLE_POOL_ELEMENT + f Lnet/minecraft/class_3816; field_16974 LIST_POOL_ELEMENT + f Lnet/minecraft/class_3816; field_16971 FEATURE_POOL_ELEMENT + f Lnet/minecraft/class_3816; field_16972 EMPTY_POOL_ELEMENT +c net/minecraft/class_3784 net/minecraft/world/gen/feature/jigsaw/JigsawPiece + m ()I method_19308 getGroundLevelDelta + m (Lnet/minecraft/class_2975;)Ljava/util/function/Function; method_30421 func_242845_a + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/Random;)Ljava/util/List; method_16627 getJigsawBlocks + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;)Lnet/minecraft/class_3341; method_16628 getBoundingBox + m ()Lnet/minecraft/class_3816; method_16757 getType + m (Ljava/util/List;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3782; method_30430 func_242854_a + m ()Lnet/minecraft/class_3785$class_3786; method_16624 getPlacementBehaviour + m (Lnet/minecraft/class_2975;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3776; method_30422 func_242846_a + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_3499$class_3501;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_16756 handleDataMarker + m (Ljava/util/List;)Ljava/util/function/Function; method_30429 func_242853_a + m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_2975; method_30431 func_242856_b + m (Ljava/lang/String;)Ljava/util/function/Function; method_30434 func_242859_b + m (Lnet/minecraft/class_5497;)Lnet/minecraft/class_5497; method_31025 func_242858_b + m (Lnet/minecraft/class_3785$class_3786;Ljava/util/function/Function;)Lnet/minecraft/class_3784; method_30424 func_242847_a + m (Ljava/lang/String;Lnet/minecraft/class_5497;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3781; method_30427 func_242852_a + m (Ljava/lang/String;)Ljava/util/function/Function; method_30425 func_242849_a + m (Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3784; method_16622 setPlacementBehaviour + m ()Ljava/util/function/Function; method_30438 func_242864_g + m (Ljava/lang/String;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3781; method_30428 func_242850_a + m ()Lcom/mojang/serialization/codecs/RecordCodecBuilder; method_28883 func_236848_d_ + m (Ljava/lang/String;Lnet/minecraft/class_5497;)Ljava/util/function/Function; method_30426 func_242851_a + m (Ljava/lang/String;Lnet/minecraft/class_5497;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_5188; method_30436 func_242862_b + m (Ljava/lang/String;Lnet/minecraft/class_5497;)Ljava/util/function/Function; method_30435 func_242861_b + m ()Lnet/minecraft/class_5497; method_31026 func_242863_c + m (Ljava/lang/String;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_5188; method_30437 func_242860_b + m (Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3777; method_30433 func_242857_b + m ()Lnet/minecraft/class_5497; method_31024 func_242855_b + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_5281;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3341;Ljava/util/Random;Z)Z method_16626 func_230378_a_ + m (Lnet/minecraft/class_5497;)Lnet/minecraft/class_5497; method_31023 func_242848_a + f Lcom/mojang/serialization/Codec; field_24953 field_236847_e_ + f Lnet/minecraft/class_3785$class_3786; field_16862 projection +c net/minecraft/class_3785 net/minecraft/world/gen/feature/jigsaw/JigsawPattern + m (Lnet/minecraft/class_3485;)I method_19309 getMaxSize + m (Ljava/util/Random;)Lnet/minecraft/class_3784; method_16631 getRandomPiece + m (Ljava/util/Random;)Ljava/util/List; method_16633 getShuffledPieces + m (Lnet/minecraft/class_3785;)Ljava/util/List; method_28888 func_236857_b_ + m ()Lnet/minecraft/class_2960; method_16634 getFallback + m ()Lnet/minecraft/class_2960; method_16629 getName + m ()I method_16632 getNumberOfPieces + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28886 func_236854_a_ + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3784;)I method_19310 func_236856_a_ + f Lcom/mojang/serialization/Codec; field_25853 field_236852_a_ + f Lcom/mojang/serialization/Codec; field_24954 field_244392_b_ + f Ljava/util/List; field_16864 rawTemplates + f Ljava/util/List; field_16680 jigsawPieces + f Lorg/apache/logging/log4j/Logger; field_24955 field_236853_d_ + f Lnet/minecraft/class_2960; field_16678 name + f I field_18707 maxSize + f Lnet/minecraft/class_2960; field_16681 fallback +c net/minecraft/class_3785$class_3786 net/minecraft/world/gen/feature/jigsaw/JigsawPattern$PlacementBehaviour + m ()Lcom/google/common/collect/ImmutableList; method_16636 getStructureProcessors + m ()[Lnet/minecraft/class_3785$class_3786; values values + m (Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3785$class_3786; method_16637 func_214935_a + m ()Ljava/lang/String; method_16635 getName + m (Ljava/lang/String;)Lnet/minecraft/class_3785$class_3786; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_3785$class_3786; method_16638 getBehaviour + f Lnet/minecraft/class_3785$class_3786; field_16687 RIGID + f Ljava/util/Map; field_16684 BEHAVIOURS + f Ljava/lang/String; field_16682 name + f Lcom/mojang/serialization/Codec; field_24956 field_236858_c_ + f Lnet/minecraft/class_3785$class_3786; field_16686 TERRAIN_MATCHING + f Lcom/google/common/collect/ImmutableList; field_16685 structureProcessors + f [Lnet/minecraft/class_3785$class_3786; field_16683 $VALUES +c net/minecraft/class_4659 net/minecraft/world/gen/treedecorator/BeehiveTreeDecorator + m (Lnet/minecraft/class_4659;)Ljava/lang/Float; method_28890 func_236865_a_ + m (ILnet/minecraft/class_2338;)Z method_23464 func_236864_a_ + f F field_21317 probability + f Lcom/mojang/serialization/Codec; field_24958 field_236863_a_ +c net/minecraft/class_4658 net/minecraft/world/gen/treedecorator/AlterGroundTreeDecorator + m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_23463 func_227414_b_ + m (Lnet/minecraft/class_4658;)Lnet/minecraft/class_4651; method_28889 func_236862_a_ + m (ILnet/minecraft/class_2338;)Z method_23460 func_236860_a_ + m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_23462 func_227413_a_ + m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_23461 func_236861_a_ + f Lcom/mojang/serialization/Codec; field_24957 field_236859_a_ + f Lnet/minecraft/class_4651; field_21316 field_227410_b_ +c net/minecraft/class_4661 net/minecraft/world/gen/treedecorator/LeaveVineTreeDecorator + m (Lnet/minecraft/class_3747;Lnet/minecraft/class_2338;Lnet/minecraft/class_2746;Ljava/util/Set;Lnet/minecraft/class_3341;)V method_23467 func_227420_a_ + m (Ljava/util/Random;Lnet/minecraft/class_5281;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;)V method_23468 func_242866_a + m ()Lnet/minecraft/class_4661; method_28892 func_236873_b_ + f Lnet/minecraft/class_4661; field_24961 field_236871_b_ + f Lcom/mojang/serialization/Codec; field_24960 field_236870_a_ +c net/minecraft/class_4660 net/minecraft/world/gen/treedecorator/CocoaTreeDecorator + m (ILnet/minecraft/class_2338;)Z method_23465 func_236867_a_ + m (Ljava/util/Random;Lnet/minecraft/class_5281;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;)V method_23466 func_242865_a + m (Lnet/minecraft/class_4660;)Ljava/lang/Float; method_28891 func_236868_a_ + f Lcom/mojang/serialization/Codec; field_24959 field_236866_a_ + f F field_21318 field_227417_b_ +c net/minecraft/class_4662 net/minecraft/world/gen/treedecorator/TreeDecorator + m ()Lnet/minecraft/class_4663; method_28893 func_230380_a_ + m (Lnet/minecraft/class_1945;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Set;Lnet/minecraft/class_3341;)V method_23470 func_227423_a_ + m (Lnet/minecraft/class_5281;Ljava/util/Random;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Lnet/minecraft/class_3341;)V method_23469 func_225576_a_ + m (Lnet/minecraft/class_1945;Lnet/minecraft/class_2338;Lnet/minecraft/class_2746;Ljava/util/Set;Lnet/minecraft/class_3341;)V method_23471 func_227424_a_ + f Lcom/mojang/serialization/Codec; field_24962 field_236874_c_ +c net/minecraft/class_4664 net/minecraft/world/gen/treedecorator/TrunkVineTreeDecorator + m (Ljava/util/Random;Lnet/minecraft/class_5281;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;)V method_23474 func_236880_a_ + m ()Lnet/minecraft/class_4664; method_28896 func_236881_b_ + f Lcom/mojang/serialization/Codec; field_24964 field_236878_a_ + f Lnet/minecraft/class_4664; field_24965 field_236879_b_ +c net/minecraft/class_4663 net/minecraft/world/gen/treedecorator/TreeDecoratorType + m ()Lcom/mojang/serialization/Codec; method_28894 func_236876_a_ + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4663; method_28895 register + f Lnet/minecraft/class_4663; field_21322 COCOA + f Lnet/minecraft/class_4663; field_21321 LEAVE_VINE + f Lnet/minecraft/class_4663; field_21323 BEEHIVE + f Lcom/mojang/serialization/Codec; field_24963 field_236875_f_ + f Lnet/minecraft/class_4663; field_21324 ALTER_GROUND + f Lnet/minecraft/class_4663; field_21320 TRUNK_VINE +c net/minecraft/class_5211 net/minecraft/world/gen/trunkplacer/DarkOakTrunkPlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28897 func_236883_b_ + f Lcom/mojang/serialization/Codec; field_24966 field_236882_a_ +c net/minecraft/class_5139 net/minecraft/world/gen/trunkplacer/ForkyTrunkPlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28899 func_236897_b_ + f Lcom/mojang/serialization/Codec; field_24968 field_236896_a_ +c net/minecraft/class_5212 net/minecraft/world/gen/trunkplacer/FancyTrunkPlacer + m (Lnet/minecraft/class_2338;)I method_27394 func_236888_a_ + m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;ZLjava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)Z method_27393 func_236887_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2350$class_2351; method_27395 func_236889_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28898 func_236891_b_ + m (II)F method_27396 func_236890_b_ + m (II)Z method_27391 func_236885_a_ + m (Lnet/minecraft/class_3747;Ljava/util/Random;ILnet/minecraft/class_2338;Ljava/util/List;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)V method_27392 func_236886_a_ + f Lcom/mojang/serialization/Codec; field_24967 field_236884_a_ +c net/minecraft/class_5212$class_5213 net/minecraft/world/gen/trunkplacer/FancyTrunkPlacer$Foliage + m ()I method_27397 func_236894_a_ + m (Lnet/minecraft/class_5212$class_5213;)Lnet/minecraft/class_4647$class_5208; method_27398 func_236895_a_ + f I field_24170 field_236893_b_ + f Lnet/minecraft/class_4647$class_5208; field_24169 field_236892_a_ +c net/minecraft/class_5215 net/minecraft/world/gen/trunkplacer/MegaJungleTrunkPlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28901 func_236902_b_ + f Lcom/mojang/serialization/Codec; field_24970 field_236901_b_ +c net/minecraft/class_5214 net/minecraft/world/gen/trunkplacer/GiantTrunkPlacer + m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;Lnet/minecraft/class_2338;III)V method_27399 func_236899_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28900 func_236900_b_ + f Lcom/mojang/serialization/Codec; field_24969 field_236898_a_ +c net/minecraft/class_5141 net/minecraft/world/gen/trunkplacer/AbstractTrunkPlacer + m (Lnet/minecraft/class_5141;)Ljava/lang/Integer; method_28907 func_236919_c_ + m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_27403 func_236912_a_ + m (Lnet/minecraft/class_5141;)Ljava/lang/Integer; method_28906 func_236918_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/Products$P3; method_28904 func_236915_a_ + m (Lnet/minecraft/class_5141;)Ljava/lang/Integer; method_28905 func_236916_a_ + m (Lnet/minecraft/class_1945;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3341;)V method_27404 func_236913_a_ + m (Lnet/minecraft/class_3747;Lnet/minecraft/class_2338;)V method_27400 func_236909_a_ + m (Lnet/minecraft/class_3747;Ljava/util/Random;ILnet/minecraft/class_2338;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)Ljava/util/List; method_26991 func_230382_a_ + m ()Lnet/minecraft/class_5142; method_28903 func_230381_a_ + m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)V method_27401 func_236910_a_ + m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)Z method_27402 func_236911_a_ + m (Lnet/minecraft/class_2680;)Z method_27405 func_236914_a_ + m (Ljava/util/Random;)I method_26993 func_236917_a_ + f Lcom/mojang/serialization/Codec; field_24972 field_236905_c_ + f I field_23761 field_236907_e_ + f I field_23762 field_236908_f_ + f I field_23760 field_236906_d_ +c net/minecraft/class_5140 net/minecraft/world/gen/trunkplacer/StraightTrunkPlacer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28902 func_236904_b_ + f Lcom/mojang/serialization/Codec; field_24971 field_236903_a_ +c net/minecraft/class_5142 net/minecraft/world/gen/trunkplacer/TrunkPlacerType + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_5142; method_26995 register + m ()Lcom/mojang/serialization/Codec; method_28908 func_236927_a_ + f Lnet/minecraft/class_5142; field_24171 GIANT_TRUNK_PLACER + f Lnet/minecraft/class_5142; field_23764 FORKING_TRUNK_PLACER + f Lcom/mojang/serialization/Codec; field_24973 field_236926_g_ + f Lnet/minecraft/class_5142; field_24172 MEGA_TRUNK_PLACER + f Lnet/minecraft/class_5142; field_24173 DARK_OAK_TRUNK_PLACER + f Lnet/minecraft/class_5142; field_23763 STRAIGHT_TRUNK_PLACER + f Lnet/minecraft/class_5142; field_24174 FANCY_TRUNK_PLACER +c net/minecraft/class_3229 net/minecraft/world/gen/FlatLayerInfo + m ()Ljava/lang/String; toString toString + m ()Lnet/minecraft/class_2680; method_14286 getLayerMaterial + m ()I method_14288 getMinY + m (Lnet/minecraft/class_3229;)Lnet/minecraft/class_2248; method_28910 func_236931_a_ + m (I)V method_14287 setMinY + m ()I method_14289 getLayerCount + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28909 func_236930_a_ + f I field_14027 layerMinimumY + f Lcom/mojang/serialization/Codec; field_24974 field_236929_a_ + f I field_14028 layerCount + f Lnet/minecraft/class_2680; field_14026 layerMaterial +c net/minecraft/class_3232 net/minecraft/world/gen/FlatGenerationSettings + m (Lnet/minecraft/class_3232;)Ljava/util/Optional; method_31182 func_242868_a + m (Ljava/util/List;Lnet/minecraft/class_5311;)Lnet/minecraft/class_3232; method_29965 func_241527_a_ + m ()V method_28916 func_236941_b_ + m ()V method_28911 func_236936_a_ + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_3232; method_14309 func_242869_a + m ()Lnet/minecraft/class_1959; method_28917 func_236942_c_ + m (Lnet/minecraft/class_3232;)Ljava/lang/Boolean; method_30047 func_241528_b_ + m (Ljava/util/HashMap;)V method_28915 func_236940_a_ + m (Lnet/minecraft/class_3232;)Ljava/lang/Boolean; method_30046 func_242871_b + m ()V method_14330 updateLayers + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28913 func_236938_a_ + m (Lnet/minecraft/class_3232;)Lnet/minecraft/class_2378; method_31171 func_242874_d + m ()[Lnet/minecraft/class_2680; method_14312 getStates + m ()Ljava/util/List; method_14327 getFlatLayers + m ()Lnet/minecraft/class_1959; method_14326 getBiome + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31185 func_242875_d + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31184 func_242873_c + m (Lnet/minecraft/class_5311;)Lnet/minecraft/class_3232; method_28912 func_236937_a_ + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31183 func_242872_b + m ()Lnet/minecraft/class_5311; method_28051 func_236943_d_ + m (Ljava/util/function/Supplier;)V method_14325 func_242870_a + f Ljava/util/Map; field_14073 STRUCTURES + f Lnet/minecraft/class_2378; field_26748 field_242867_d + f Lcom/mojang/serialization/Codec; field_24975 field_236932_a_ + f Z field_24977 field_236935_l_ + f [Lnet/minecraft/class_2680; field_14082 states + f Z field_24976 field_236934_k_ + f Z field_14077 allAir + f Lorg/apache/logging/log4j/Logger; field_14064 LOGGER + f Lnet/minecraft/class_5311; field_24560 field_236933_f_ + f Ljava/util/function/Supplier; field_14081 biomeToUse + f Ljava/util/List; field_14072 flatLayers +c net/minecraft/class_5438 net/minecraft/world/gen/placement/SimpleHeightmapBasedPlacement +c net/minecraft/class_3234 net/minecraft/world/gen/placement/CaveEdge + m (Ljava/util/BitSet;Ljava/util/Random;Lnet/minecraft/class_3269;I)Z method_15895 func_215067_a + m (Lnet/minecraft/class_1923;I)Lnet/minecraft/class_2338; method_15894 func_215068_a + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3269;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14341 getPositions +c net/minecraft/class_5439 net/minecraft/world/gen/placement/RangeBiasedPlacement + m (Ljava/util/Random;Lnet/minecraft/class_2997;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30443 getPositions +c net/minecraft/class_3241 net/minecraft/world/gen/placement/ChancePlacement + m (Ljava/util/Random;Lnet/minecraft/class_3297;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14347 getPositions +c net/minecraft/class_3269 net/minecraft/world/gen/placement/CaveEdgeConfig + m (Lnet/minecraft/class_3269;)Ljava/lang/Float; method_28920 func_236948_a_ + m (Lnet/minecraft/class_3269;)Lnet/minecraft/class_2893$class_2894; method_28921 func_236949_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28919 func_236947_a_ + f Lcom/mojang/serialization/Codec; field_24979 CODEC + f F field_14197 probability + f Lnet/minecraft/class_2893$class_2894; field_14198 step +c net/minecraft/class_3243 net/minecraft/world/gen/placement/ConfiguredPlacement + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30444 func_242876_a + m (Lnet/minecraft/class_3243;)Lnet/minecraft/class_3284; method_28923 func_236954_a_ + m ()Lnet/minecraft/class_2998; method_30445 func_242877_b + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_3243;)Lnet/minecraft/class_3243; method_30446 withPlacement + f Lnet/minecraft/class_2998; field_14114 config + f Lnet/minecraft/class_3284; field_14115 decorator + f Lcom/mojang/serialization/Codec; field_24981 CODEC +c net/minecraft/class_3297 net/minecraft/world/gen/placement/ChanceConfig + m (Lnet/minecraft/class_3297;)Ljava/lang/Integer; method_28922 func_236951_a_ + f Lcom/mojang/serialization/Codec; field_24980 CODEC + f I field_14289 chance +c net/minecraft/class_5441 net/minecraft/world/gen/placement/CountNoisePlacement + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3003;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30449 getPositions + m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_30450 func_242879_a +c net/minecraft/class_5440 net/minecraft/world/gen/placement/CountPlacement + m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_30447 func_242878_a + m (Ljava/util/Random;Lnet/minecraft/class_2984;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30448 getPositions +c net/minecraft/class_3315 net/minecraft/world/gen/placement/DarkOakTreePlacement + m (Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_5444;Lnet/minecraft/class_3113;I)Lnet/minecraft/class_2338; method_15938 func_242881_a + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14524 getPositions + m (Lnet/minecraft/class_3113;)Lnet/minecraft/class_2902$class_2903; method_30452 func_241858_a +c net/minecraft/class_3265 net/minecraft/world/gen/placement/CountExtraPlacement + m (Ljava/util/Random;Lnet/minecraft/class_3276;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30451 getPositions + m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_15920 func_242880_a +c net/minecraft/class_5443 net/minecraft/world/gen/placement/DecoratedPlacementConfig + m ()Lnet/minecraft/class_3243; method_30455 getOuter + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30456 func_242887_a + m ()Lnet/minecraft/class_3243; method_30457 getInner + f Lnet/minecraft/class_3243; field_25856 inner + f Lcom/mojang/serialization/Codec; field_25854 CODEC + f Lnet/minecraft/class_3243; field_25855 outer +c net/minecraft/class_5442 net/minecraft/world/gen/placement/DecoratedPlacement + m (Lnet/minecraft/class_5443;Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30453 func_242882_a + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_5443;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30454 getPositions +c net/minecraft/class_3277 net/minecraft/world/gen/placement/DepthAverageConfig + m (Lnet/minecraft/class_3277;)Ljava/lang/Integer; method_28927 func_236959_c_ + m (Lnet/minecraft/class_3277;)Ljava/lang/Integer; method_28925 func_236958_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28924 func_236956_a_ + f I field_14212 spread + f I field_14214 baseline + f Lcom/mojang/serialization/Codec; field_24982 CODEC +c net/minecraft/class_5444 net/minecraft/world/gen/feature/WorldDecoratingHelper + m ()I method_30462 func_242895_b + m ()I method_30458 func_242891_a + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_30461 func_242894_a + m (Lnet/minecraft/class_2902$class_2903;II)I method_30460 func_242893_a + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2893$class_2894;)Ljava/util/BitSet; method_30459 func_242892_a + f Lnet/minecraft/class_5281; field_25857 field_242889_a + f Lnet/minecraft/class_2794; field_25858 chunkGenerator +c net/minecraft/class_5445 net/minecraft/world/gen/placement/HeightmapBasedPlacement + m (Lnet/minecraft/class_2998;)Lnet/minecraft/class_2902$class_2903; method_30463 func_241858_a +c net/minecraft/class_3252 net/minecraft/world/gen/placement/DepthAveragePlacement + m (Ljava/util/Random;Lnet/minecraft/class_3277;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15907 getPositions +c net/minecraft/class_3280 net/minecraft/world/gen/placement/EndGateway + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15924 getPositions +c net/minecraft/class_3282 net/minecraft/world/gen/placement/Height4To32 + m (Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15922 getPositions + m (Ljava/util/Random;Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_15921 func_215060_a +c net/minecraft/class_3284 net/minecraft/world/gen/placement/Placement + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;Lnet/minecraft/class_3284;)Lnet/minecraft/class_3284; method_14450 register + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_2998;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14452 getPositions + m ()Lcom/mojang/serialization/Codec; method_28928 getCodec + m (Lnet/minecraft/class_2998;)Lnet/minecraft/class_3243; method_23475 configure + m (Lnet/minecraft/class_2998;)Lnet/minecraft/class_3243; method_28930 func_236966_b_ + f Lnet/minecraft/class_3284; field_14250 NOPE + f Lcom/mojang/serialization/Codec; field_24983 codec + f Lnet/minecraft/class_3284; field_14242 WATER_LAKE + f Lnet/minecraft/class_3284; field_25875 GLOWSTONE + f Lnet/minecraft/class_3284; field_14237 LAVA_LAKE + f Lnet/minecraft/class_3284; field_14268 EMERALD_ORE + f Lnet/minecraft/class_3284; field_14235 FIRE + f Lnet/minecraft/class_3284; field_14244 MAGMA + f Lnet/minecraft/class_3284; field_25865 COUNT_EXTRA + f Lnet/minecraft/class_3284; field_25866 SQUARE + f Lnet/minecraft/class_3284; field_25864 COUNT_NOISE_BIASED + f Lnet/minecraft/class_3284; field_14243 ICEBERG + f Lnet/minecraft/class_3284; field_14239 DARK_OAK_TREE + f Lnet/minecraft/class_3284; field_25863 COUNT_NOISE + f Lnet/minecraft/class_3284; field_25861 CHANCE + f Lnet/minecraft/class_3284; field_25862 COUNT + f Lnet/minecraft/class_3284; field_14230 END_GATEWAY + f Lnet/minecraft/class_3284; field_14251 END_ISLAND + f Lnet/minecraft/class_3284; field_25870 RANGE + f Lnet/minecraft/class_3284; field_14231 TOP_SOLID_HEIGHTMAP + f Lnet/minecraft/class_3284; field_25869 HEIGHTMAP_WORLD_SURFACE + f Lnet/minecraft/class_3284; field_25868 HEIGHTMAP_SPREAD_DOUBLE + f Lnet/minecraft/class_3284; field_25867 HEIGHTMAP + f Lnet/minecraft/class_3284; field_14229 CARVING_MASK + f Lnet/minecraft/class_3284; field_25874 SPREAD_32_ABOVE + f Lnet/minecraft/class_3284; field_25872 RANGE_VERY_BIASED + f Lnet/minecraft/class_3284; field_25873 DEPTH_AVERAGE + f Lnet/minecraft/class_3284; field_25871 RANGE_BIASED + f Lnet/minecraft/class_3284; field_25859 DECORATED + f Lnet/minecraft/class_3284; field_25860 COUNT_MULTILAYER +c net/minecraft/class_3287 net/minecraft/world/gen/placement/EndIsland + m (Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15923 getPositions +c net/minecraft/class_3276 net/minecraft/world/gen/placement/AtSurfaceWithExtraConfig + m (Lnet/minecraft/class_3276;)Ljava/lang/Float; method_28937 func_236976_b_ + m (Lnet/minecraft/class_3276;)Ljava/lang/Integer; method_28936 func_236975_a_ + m (Lnet/minecraft/class_3276;)Ljava/lang/Integer; method_28938 func_236977_c_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28935 func_236974_a_ + f I field_14210 extraCount + f Lcom/mojang/serialization/Codec; field_24986 CODEC + f F field_14209 extraChance + f I field_14211 count +c net/minecraft/class_5447 net/minecraft/world/gen/placement/HeightmapPlacement +c net/minecraft/class_5446 net/minecraft/world/gen/placement/HeightmapWorldSurfacePlacement + m (Lnet/minecraft/class_3113;)Lnet/minecraft/class_2902$class_2903; method_30464 func_241858_a +c net/minecraft/class_3291 net/minecraft/world/gen/placement/IcebergPlacement + m (Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30465 getPositions +c net/minecraft/class_5448 net/minecraft/world/gen/placement/HeightmapSpreadDoublePlacement +c net/minecraft/class_3301 net/minecraft/world/gen/placement/LakeWater + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3297;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15930 getPositions +c net/minecraft/class_3293 net/minecraft/world/gen/placement/LakeLava + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3297;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15931 getPositions +c net/minecraft/class_3275 net/minecraft/world/gen/placement/TopSolidWithNoiseConfig + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28939 func_236980_a_ + m (Lnet/minecraft/class_3275;)Ljava/lang/Double; method_28941 func_236982_b_ + m (Lnet/minecraft/class_3275;)Ljava/lang/Integer; method_28943 func_236984_d_ + m (Lnet/minecraft/class_3275;)Ljava/lang/Double; method_28942 func_236983_c_ + f I field_14208 noiseToCountRatio + f D field_14205 noiseOffset + f Lcom/mojang/serialization/Codec; field_24987 CODEC + f D field_14206 noiseFactor +c net/minecraft/class_3316 net/minecraft/world/gen/placement/CountNoiseBiasedPlacement + m (Ljava/util/Random;Lnet/minecraft/class_3275;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30467 getPositions + m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_30466 func_242913_a +c net/minecraft/class_5449 net/minecraft/world/gen/placement/RangePlacement + m (Ljava/util/Random;Lnet/minecraft/class_2997;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30468 getPositions +c net/minecraft/class_3307 net/minecraft/world/gen/placement/Passthrough + m (Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15939 getPositions +c net/minecraft/class_3245 net/minecraft/world/gen/placement/Spread32AbovePlacement + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14373 getPositions +c net/minecraft/class_3667 net/minecraft/world/gen/placement/SimplePlacement + m (Ljava/util/Random;Lnet/minecraft/class_2998;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14452 getPositions +c net/minecraft/class_3318 net/minecraft/world/gen/placement/TopSolidOnce + m (Lnet/minecraft/class_3113;)Lnet/minecraft/class_2902$class_2903; method_30470 func_241858_a +c net/minecraft/class_5450 net/minecraft/world/gen/placement/SquarePlacement + m (Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30469 getPositions +c net/minecraft/class_5452 net/minecraft/world/gen/placement/CountMultilayerPlacement + m (Lnet/minecraft/class_5444;IIII)I method_30473 func_242915_a + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_2984;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30474 getPositions + m (Lnet/minecraft/class_2680;)Z method_30472 func_242914_a +c net/minecraft/class_5451 net/minecraft/world/gen/placement/RangeVeryBiasedPlacement + m (Ljava/util/Random;Lnet/minecraft/class_2997;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30471 getPositions +c net/minecraft/class_5453 net/minecraft/world/gen/placement/GlowstonePlacement + m (Ljava/util/Random;Lnet/minecraft/class_2984;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30475 getPositions + m (Ljava/util/Random;Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_30476 func_242916_a +c net/minecraft/class_3329 net/minecraft/world/gen/placement/FirePlacement + m (Ljava/util/Random;Lnet/minecraft/class_2984;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15947 getPositions +c net/minecraft/class_3334 net/minecraft/world/gen/placement/NetherMagma + m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15951 getPositions +c net/minecraft/class_4183 net/minecraft/world/gen/feature/structure/MarginedStructureStart +c net/minecraft/class_3789 net/minecraft/world/gen/feature/structure/BuriedTreasure +c net/minecraft/class_3789$class_3339 net/minecraft/world/gen/feature/structure/BuriedTreasure$Piece + m (Lnet/minecraft/class_2680;)Z method_14655 func_204295_a +c net/minecraft/class_3341 net/minecraft/util/math/MutableBoundingBox + m ()I method_14660 getXSize + m ()I method_14663 getYSize + m ()Ljava/lang/String; toString toString + m (IIIIIIIIILnet/minecraft/class_2350;)Lnet/minecraft/class_3341; method_14667 getComponentToAddBoundingBox + m ()I method_14664 getZSize + m (III)Lnet/minecraft/class_3341; method_19311 func_215127_b + m ()Lnet/minecraft/class_2382; method_22874 func_215126_f + m (III)V method_14661 offset + m ()Lnet/minecraft/class_2382; method_14659 getLength + m (Lnet/minecraft/class_2382;)Z method_14662 isVecInside + m (Lnet/minecraft/class_3341;)Z method_14657 intersectsWith + m (Lnet/minecraft/class_2382;)V method_29299 func_236989_a_ + m (IIII)Z method_14669 intersectsWith + m (Lnet/minecraft/class_3341;)V method_14668 expandTo + m (IIIIII)Lnet/minecraft/class_3341; method_14666 createProper + m ()Lnet/minecraft/class_3341; method_27234 func_236990_b_ + m ()Lnet/minecraft/class_3341; method_14665 getNewBoundingBox + m ()Lnet/minecraft/class_2495; method_14658 toNBTTagIntArray + f I field_14376 maxZ + f I field_14381 minX + f I field_14380 minY + f I field_14379 minZ + f I field_14378 maxX + f I field_14377 maxY +c net/minecraft/class_3341$1 net/minecraft/util/math/MutableBoundingBox$1 + f [I field_14382 field_175895_a +c net/minecraft/class_3346 net/minecraft/world/gen/feature/structure/DesertPyramidPiece + f [Z field_14397 hasPlacedChest +c net/minecraft/class_3351 net/minecraft/world/gen/feature/structure/IglooPieces + m ()Lnet/minecraft/class_2960; method_14703 func_207620_d + m ()Ljava/util/Map; method_14706 func_207618_c + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;)V method_14705 func_236991_a_ + m ()Ljava/util/Map; method_14707 func_207619_b + f Lnet/minecraft/class_2960; field_14407 field_202593_f + f Ljava/util/Map; field_14408 field_207621_d + f Lnet/minecraft/class_2960; field_14409 field_202592_e + f Ljava/util/Map; field_14406 field_207622_e + f Lnet/minecraft/class_2960; field_14410 field_202594_g +c net/minecraft/class_3351$class_3352 net/minecraft/world/gen/feature/structure/IglooPieces$Piece + m (Lnet/minecraft/class_3485;)V method_14708 func_207614_a + f Lnet/minecraft/class_2470; field_14412 field_207616_e + f Lnet/minecraft/class_2960; field_14411 field_207615_d +c net/minecraft/class_3342 net/minecraft/world/gen/feature/structure/EndCityPieces + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;)V method_14679 startHouseTower + m ()Lnet/minecraft/class_3342$class_3344; method_14674 access$700 + m ()Lnet/minecraft/class_3492; method_14676 access$000 + m ()Lnet/minecraft/class_3342$class_3344; method_14685 access$400 + m ()Ljava/util/List; method_14678 access$1000 + m (Ljava/util/List;Lnet/minecraft/class_3342$class_3343;)Lnet/minecraft/class_3342$class_3343; method_14681 addHelper + m (Ljava/util/List;Lnet/minecraft/class_3342$class_3343;)Lnet/minecraft/class_3342$class_3343; method_14683 access$300 + m ()Lnet/minecraft/class_3342$class_3344; method_14677 access$900 + m ()Lnet/minecraft/class_3342$class_3344; method_14671 access$800 + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3342$class_3344;ILnet/minecraft/class_3342$class_3343;Lnet/minecraft/class_2338;Ljava/util/List;Ljava/util/Random;)Z method_14680 access$500 + m ()Ljava/util/List; method_14672 access$600 + m ()Lnet/minecraft/class_3492; method_14675 access$100 + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3342$class_3344;ILnet/minecraft/class_3342$class_3343;Lnet/minecraft/class_2338;Ljava/util/List;Ljava/util/Random;)Z method_14673 recursiveChildren + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3342$class_3343;Lnet/minecraft/class_2338;Ljava/lang/String;Lnet/minecraft/class_2470;Z)Lnet/minecraft/class_3342$class_3343; method_14670 access$200 + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3342$class_3343;Lnet/minecraft/class_2338;Ljava/lang/String;Lnet/minecraft/class_2470;Z)Lnet/minecraft/class_3342$class_3343; method_14684 addPiece + f Lnet/minecraft/class_3342$class_3344; field_14384 FAT_TOWER_GENERATOR + f Lnet/minecraft/class_3342$class_3344; field_14387 TOWER_BRIDGE_GENERATOR + f Lnet/minecraft/class_3492; field_14389 INSERT + f Lnet/minecraft/class_3342$class_3344; field_14386 TOWER_GENERATOR + f Lnet/minecraft/class_3492; field_14383 OVERWRITE + f Ljava/util/List; field_14388 FAT_TOWER_BRIDGES + f Ljava/util/List; field_14385 TOWER_BRIDGES + f Lnet/minecraft/class_3342$class_3344; field_14390 HOUSE_TOWER_GENERATOR +c net/minecraft/class_3342$2 net/minecraft/world/gen/feature/structure/EndCityPieces$2 +c net/minecraft/class_3342$3 net/minecraft/world/gen/feature/structure/EndCityPieces$3 + f Z field_14394 shipCreated +c net/minecraft/class_3342$4 net/minecraft/world/gen/feature/structure/EndCityPieces$4 +c net/minecraft/class_3342$class_3343 net/minecraft/world/gen/feature/structure/EndCityPieces$CityTemplate + m (Lnet/minecraft/class_3485;)V method_14686 loadTemplate + f Lnet/minecraft/class_2470; field_14393 rotation + f Z field_14392 overwrite + f Ljava/lang/String; field_14391 pieceName +c net/minecraft/class_3342$1 net/minecraft/world/gen/feature/structure/EndCityPieces$1 +c net/minecraft/class_3342$class_3344 net/minecraft/world/gen/feature/structure/EndCityPieces$IGenerator + m (Lnet/minecraft/class_3485;ILnet/minecraft/class_3342$class_3343;Lnet/minecraft/class_2338;Ljava/util/List;Ljava/util/Random;)Z method_14687 generate + m ()V method_14688 init +c net/minecraft/class_3360 net/minecraft/world/gen/feature/structure/LegacyStructureDataUtil + m (Lnet/minecraft/class_26;)V method_14734 func_212184_a + m (J)V method_14744 func_208216_a + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_14735 func_212181_a + m (IILjava/lang/String;)Z method_14738 func_208211_a + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_26;)Lnet/minecraft/class_3360; method_14745 func_236992_a_ + m (II)Z method_14737 func_208209_a + m (Ljava/lang/String;)Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; method_14736 func_208208_a + m (Ljava/util/HashMap;)V method_14739 func_208213_b + m (Ljava/lang/String;)Lnet/minecraft/class_3440; method_17915 func_215131_a + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_14741 func_212182_a + m (Ljava/util/HashMap;)V method_14742 func_208215_a + f Ljava/util/List; field_17658 field_215132_f + f Ljava/util/List; field_17659 field_215133_g + f Ljava/util/Map; field_14433 field_208224_f + f Z field_14434 field_208222_d + f Ljava/util/Map; field_14436 field_208221_c + f Ljava/util/Map; field_14432 field_208223_e + f Ljava/util/Map; field_14435 field_208220_b +c net/minecraft/class_3348 net/minecraft/world/gen/feature/structure/JunglePyramidPiece + f Z field_14399 placedTrap2 + f Z field_14401 placedHiddenChest + f Z field_14402 placedMainChest + f Z field_14400 placedTrap1 + f Lnet/minecraft/class_3348$class_3349; field_14403 MOSS_STONE_SELECTOR +c net/minecraft/class_3348$class_3349 net/minecraft/world/gen/feature/structure/JunglePyramidPiece$Selector +c net/minecraft/class_3348$1 net/minecraft/world/gen/feature/structure/JunglePyramidPiece$1 +c net/minecraft/class_3390 net/minecraft/world/gen/feature/structure/FortressPieces + m (Lnet/minecraft/class_3390$class_3404;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3403; method_14795 findAndCreateBridgePieceFactory + m (Lnet/minecraft/class_3390$class_3404;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3403; method_14794 access$000 + m ()[Lnet/minecraft/class_3390$class_3404; method_14791 access$100 + m ()[Lnet/minecraft/class_3390$class_3404; method_14792 access$200 + f [Lnet/minecraft/class_3390$class_3404; field_14494 PRIMARY_COMPONENTS + f [Lnet/minecraft/class_3390$class_3404; field_14493 SECONDARY_COMPONENTS +c net/minecraft/class_3390$class_3403 net/minecraft/world/gen/feature/structure/FortressPieces$Piece + m (Lnet/minecraft/class_3390$class_3407;Ljava/util/List;Ljava/util/Random;IIZ)Lnet/minecraft/class_3443; method_14814 getNextComponentNormal + m (Lnet/minecraft/class_3341;)Z method_14809 isAboveGround + m (Lnet/minecraft/class_3390$class_3407;Ljava/util/List;Ljava/util/Random;IIZ)Lnet/minecraft/class_3443; method_14812 getNextComponentX + m (Lnet/minecraft/class_3390$class_3407;Ljava/util/List;Ljava/util/Random;IIZ)Lnet/minecraft/class_3443; method_14808 getNextComponentZ + m (Lnet/minecraft/class_3390$class_3407;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;IZ)Lnet/minecraft/class_3443; method_14813 generateAndAddPiece + m (Ljava/util/List;)I method_14810 getTotalWeight + m (Lnet/minecraft/class_3390$class_3407;Ljava/util/List;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3403; method_14811 generatePiece +c net/minecraft/class_3390$class_3404 net/minecraft/world/gen/feature/structure/FortressPieces$PieceWeight + m (I)Z method_14816 doPlace + m ()Z method_14815 isValid + f I field_14503 weight + f I field_14502 placeCount + f I field_14499 maxPlaceCount + f Ljava/lang/Class; field_14501 weightClass + f Z field_14500 allowInRow +c net/minecraft/class_3390$class_3405 net/minecraft/world/gen/feature/structure/FortressPieces$Crossing + m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3405; method_14817 createPiece +c net/minecraft/class_3390$class_3406 net/minecraft/world/gen/feature/structure/FortressPieces$Stairs + m (Ljava/util/List;IIIILnet/minecraft/class_2350;)Lnet/minecraft/class_3390$class_3406; method_14818 createPiece +c net/minecraft/class_3390$class_3407 net/minecraft/world/gen/feature/structure/FortressPieces$Start + f Ljava/util/List; field_14504 secondaryWeights + f Ljava/util/List; field_14505 pendingChildren + f Lnet/minecraft/class_3390$class_3404; field_14506 lastPlaced + f Ljava/util/List; field_14507 primaryWeights +c net/minecraft/class_3390$1 net/minecraft/world/gen/feature/structure/FortressPieces$1 + f [I field_14508 field_175888_a +c net/minecraft/class_3390$class_3395 net/minecraft/world/gen/feature/structure/FortressPieces$Corridor4 + m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3395; method_14800 func_214814_a +c net/minecraft/class_3390$class_3396 net/minecraft/world/gen/feature/structure/FortressPieces$Entrance + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3396; method_14801 createPiece +c net/minecraft/class_3390$class_3397 net/minecraft/world/gen/feature/structure/FortressPieces$Crossing2 + m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3397; method_14802 createPiece +c net/minecraft/class_3390$class_3398 net/minecraft/world/gen/feature/structure/FortressPieces$Corridor + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3398; method_14803 createPiece + f Z field_14496 chest +c net/minecraft/class_3390$class_3399 net/minecraft/world/gen/feature/structure/FortressPieces$Corridor5 + m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3399; method_14804 createPiece +c net/minecraft/class_3390$class_3400 net/minecraft/world/gen/feature/structure/FortressPieces$Corridor2 + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3400; method_14805 createPiece + f Z field_14497 chest +c net/minecraft/class_3390$class_3401 net/minecraft/world/gen/feature/structure/FortressPieces$NetherStalkRoom + m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3401; method_14806 createPiece +c net/minecraft/class_3390$class_3402 net/minecraft/world/gen/feature/structure/FortressPieces$Throne + m (Ljava/util/List;IIIILnet/minecraft/class_2350;)Lnet/minecraft/class_3390$class_3402; method_14807 createPiece + f Z field_14498 hasSpawner +c net/minecraft/class_3390$class_3391 net/minecraft/world/gen/feature/structure/FortressPieces$Crossing3 + m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3391; method_14796 createPiece +c net/minecraft/class_3390$class_3392 net/minecraft/world/gen/feature/structure/FortressPieces$End + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3392; method_14797 createPiece + f I field_14495 fillSeed +c net/minecraft/class_3390$class_3393 net/minecraft/world/gen/feature/structure/FortressPieces$Straight + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3393; method_14798 createPiece +c net/minecraft/class_3390$class_3394 net/minecraft/world/gen/feature/structure/FortressPieces$Corridor3 + m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3394; method_14799 createPiece +c net/minecraft/class_3353 net/minecraft/world/gen/feature/structure/MineshaftPieces + m (Lnet/minecraft/class_3443;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3353$class_3356; method_14709 access$000 + m (Lnet/minecraft/class_3443;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3353$class_3356; method_14711 generateAndAddPiece + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;ILnet/minecraft/class_3098$class_3100;)Lnet/minecraft/class_3353$class_3356; method_14712 createRandomShaftPiece +c net/minecraft/class_3353$class_3354 net/minecraft/world/gen/feature/structure/MineshaftPieces$Corridor + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;Ljava/util/Random;FIII)V method_14715 placeCobWeb + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIILjava/util/Random;)V method_14713 placeSupport + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;)Lnet/minecraft/class_3341; method_14714 findCorridorSize + f I field_14413 sectionCount + f Z field_14414 spawnerPlaced + f Z field_14415 hasSpiders + f Z field_14416 hasRails +c net/minecraft/class_3353$1 net/minecraft/world/gen/feature/structure/MineshaftPieces$1 + f [I field_14417 field_175894_a + f [I field_14418 field_202599_a +c net/minecraft/class_3353$class_3355 net/minecraft/world/gen/feature/structure/MineshaftPieces$Cross + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;)Lnet/minecraft/class_3341; method_14717 findCrossing + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIII)V method_14716 placeSupportPillar + f Lnet/minecraft/class_2350; field_14420 corridorDirection + f Z field_14419 isMultipleFloors +c net/minecraft/class_3353$class_3356 net/minecraft/world/gen/feature/structure/MineshaftPieces$Piece + m ()Lnet/minecraft/class_2680; method_14718 getFenceBlock + m ()Lnet/minecraft/class_2680; method_16443 getPlanksBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_3341;IIII)Z method_14719 isSupportingBox + f Lnet/minecraft/class_3098$class_3100; field_14421 mineShaftType +c net/minecraft/class_3353$class_3357 net/minecraft/world/gen/feature/structure/MineshaftPieces$Room + f Ljava/util/List; field_14422 connectedRooms +c net/minecraft/class_3353$class_3358 net/minecraft/world/gen/feature/structure/MineshaftPieces$Stairs + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;)Lnet/minecraft/class_3341; method_14720 findStairs +c net/minecraft/class_4787 net/minecraft/world/gen/feature/structure/NetherFossilStructures + m (Lnet/minecraft/class_3485;Ljava/util/List;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_24453 func_236994_a_ + f [Lnet/minecraft/class_2960; field_22197 field_236993_a_ +c net/minecraft/class_4787$class_4788 net/minecraft/world/gen/feature/structure/NetherFossilStructures$Piece + m (Lnet/minecraft/class_3485;)V method_24454 func_236997_a_ + f Lnet/minecraft/class_2470; field_22199 field_236996_e_ + f Lnet/minecraft/class_2960; field_22198 field_236995_d_ +c net/minecraft/class_4785 net/minecraft/world/gen/feature/structure/NetherFossilStructure +c net/minecraft/class_4785$class_4786 net/minecraft/world/gen/feature/structure/NetherFossilStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28947 func_230364_a_ +c net/minecraft/class_3411 net/minecraft/world/gen/feature/structure/OceanRuinStructure +c net/minecraft/class_3411$class_3412 net/minecraft/world/gen/feature/structure/OceanRuinStructure$Start + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3114;)V method_28948 func_230364_a_ +c net/minecraft/class_3411$class_3413 net/minecraft/world/gen/feature/structure/OceanRuinStructure$Type + m (Ljava/lang/String;)Lnet/minecraft/class_3411$class_3413; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_3411$class_3413; method_14830 getType + m ()Ljava/lang/String; method_14831 getName + m ()[Lnet/minecraft/class_3411$class_3413; values values + m (Lnet/minecraft/class_3411$class_3413;)Lnet/minecraft/class_3411$class_3413; method_14832 func_215134_a + f Lcom/mojang/serialization/Codec; field_24990 field_236998_c_ + f Ljava/lang/String; field_14529 name + f [Lnet/minecraft/class_3411$class_3413; field_14531 $VALUES + f Ljava/util/Map; field_14530 BY_NAME + f Lnet/minecraft/class_3411$class_3413; field_14532 WARM + f Lnet/minecraft/class_3411$class_3413; field_14528 COLD +c net/minecraft/class_3366 net/minecraft/world/gen/feature/structure/OceanMonumentPieces +c net/minecraft/class_3366$class_3384 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$Piece + m (III)I method_14770 getRoomIndex + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIII)V method_14773 makeOpening + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;III)Z method_14772 spawnElder + m (Lnet/minecraft/class_3341;IIII)Z method_14775 doesChunkIntersect + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIIILnet/minecraft/class_2680;)V method_14771 generateBoxOnFillOnly + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIZ)V method_14774 generateDefaultFloor + f I field_14468 GRIDROOM_TOP_CONNECT_INDEX + f I field_14469 GRIDROOM_SOURCE_INDEX + f Lnet/minecraft/class_3366$class_3388; field_14479 roomDefinition + f Lnet/minecraft/class_2680; field_14476 BRICKS_PRISMARINE + f I field_14477 GRIDROOM_RIGHTWING_CONNECT_INDEX + f I field_14478 GRIDROOM_LEFTWING_CONNECT_INDEX + f Ljava/util/Set; field_14472 field_212180_g + f Lnet/minecraft/class_2680; field_14473 ROUGH_PRISMARINE + f Lnet/minecraft/class_2680; field_14471 SEA_LANTERN + f Lnet/minecraft/class_2680; field_14474 DARK_PRISMARINE + f Lnet/minecraft/class_2680; field_14470 DOT_DECO_DATA + f Lnet/minecraft/class_2680; field_14475 WATER +c net/minecraft/class_3366$class_3385 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$SimpleRoom + f I field_14480 mainDesign +c net/minecraft/class_3366$class_3386 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$SimpleTopRoom +c net/minecraft/class_3366$class_3387 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$WingRoom + f I field_14481 mainDesign +c net/minecraft/class_3366$class_3388 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$RoomDefinition + m ()I method_14781 countOpenings + m (Lnet/minecraft/class_3366$class_3388;Z)Z method_14784 access$902 + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_3366$class_3388;)V method_14786 setConnection + m ()V method_14780 updateOpenings + m (I)Z method_14783 findSource + m (Lnet/minecraft/class_3366$class_3388;)Z method_14778 access$100 + m ()Z method_14785 isSpecial + m (Lnet/minecraft/class_3366$class_3388;)[Z method_14779 access$1100 + m (Lnet/minecraft/class_3366$class_3388;Z)Z method_14777 access$102 + m (Lnet/minecraft/class_3366$class_3388;)[Lnet/minecraft/class_3366$class_3388; method_14782 access$1000 + m (Lnet/minecraft/class_3366$class_3388;)I method_14776 access$000 + f I field_14483 scanIndex + f [Z field_14482 hasOpening + f Z field_14485 claimed + f I field_14486 index + f Z field_14484 isSource + f [Lnet/minecraft/class_3366$class_3388; field_14487 connections +c net/minecraft/class_3366$class_3376 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$MonumentCoreRoom +c net/minecraft/class_3366$class_3377 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$DoubleXRoom +c net/minecraft/class_3366$class_3378 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$DoubleXYRoom +c net/minecraft/class_3366$class_3379 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$DoubleYRoom +c net/minecraft/class_3366$class_3380 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$DoubleYZRoom +c net/minecraft/class_3366$class_3381 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$DoubleZRoom +c net/minecraft/class_3366$class_3382 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$EntryRoom +c net/minecraft/class_3366$class_3383 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$Penthouse +c net/minecraft/class_3366$1 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$1 + f [I field_14467 field_175971_a +c net/minecraft/class_3366$class_3368 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$XYDoubleRoomFitHelper +c net/minecraft/class_3366$class_3369 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$YDoubleRoomFitHelper +c net/minecraft/class_3366$class_3370 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$YZDoubleRoomFitHelper +c net/minecraft/class_3366$class_3371 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$ZDoubleRoomFitHelper +c net/minecraft/class_3366$class_3372 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$FitSimpleRoomHelper +c net/minecraft/class_3366$class_3373 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$FitSimpleRoomTopHelper +c net/minecraft/class_3366$class_3374 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$MonumentBuilding + m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14767 generateUpperWall + m (ZILnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14761 generateWing + m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14763 generateEntranceArchs + m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14766 generateMiddleWall + m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14765 generateRoofPiece + m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14764 generateLowerWall + m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14762 generateEntranceWall + m (Ljava/util/Random;)Ljava/util/List; method_14760 generateRoomGraph + f Lnet/minecraft/class_3366$class_3388; field_14466 coreRoom + f Lnet/minecraft/class_3366$class_3388; field_14464 sourceRoom + f Ljava/util/List; field_14465 childPieces +c net/minecraft/class_3366$class_3375 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$IMonumentRoomFitHelper + m (Lnet/minecraft/class_3366$class_3388;)Z method_14769 fits + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_3366$class_3388;Ljava/util/Random;)Lnet/minecraft/class_3366$class_3384; method_14768 create +c net/minecraft/class_3366$class_3367 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$XDoubleRoomFitHelper +c net/minecraft/class_3790 net/minecraft/world/gen/feature/structure/AbstractVillagePiece + m (Lnet/minecraft/class_3780;)V method_16647 addJunction + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28949 func_237002_a_ + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Z)Z method_27236 func_237001_a_ + m ()Lnet/minecraft/class_2338; method_16648 getPos + m ()Lnet/minecraft/class_3784; method_16644 getJigsawPiece + m ()I method_16646 getGroundLevelDelta + m ()Ljava/util/List; method_16645 getJunctions + m (Lnet/minecraft/class_2520;)V method_16649 func_214827_a + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_3784; field_16693 jigsawPiece + f Lnet/minecraft/class_3485; field_17660 templateManager + f I field_16692 groundLevelDelta + f Lnet/minecraft/class_2470; field_16694 rotation + f Lnet/minecraft/class_2338; field_16695 pos + f Lorg/apache/logging/log4j/Logger; field_24991 field_237000_d_ + f Ljava/util/List; field_16696 junctions +c net/minecraft/class_3409 net/minecraft/world/gen/feature/structure/OceanRuinPieces + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;Lnet/minecraft/class_3114;)V method_14827 func_204041_a + m (Ljava/util/Random;)Lnet/minecraft/class_2960; method_14826 getRandomPieceWarmBig + m (Ljava/util/Random;II)Ljava/util/List; method_14821 func_204044_a + m (Lnet/minecraft/class_3485;Ljava/util/Random;Lnet/minecraft/class_2470;Lnet/minecraft/class_2338;Lnet/minecraft/class_3114;Ljava/util/List;)V method_14825 func_204047_a + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;Lnet/minecraft/class_3114;ZF)V method_14822 func_204045_a + m (Ljava/util/Random;)Lnet/minecraft/class_2960; method_14824 getRandomPieceWarm + f [Lnet/minecraft/class_2960; field_14522 STRUCTURE_MOSSY + f [Lnet/minecraft/class_2960; field_14516 STRUCTURE_BRICK_BIG + f [Lnet/minecraft/class_2960; field_14517 STRUCTURE_MOSSY_BIG + f [Lnet/minecraft/class_2960; field_14518 STRUCTURE_BRICK + f [Lnet/minecraft/class_2960; field_14519 STRUCTURE_CRACKED + f [Lnet/minecraft/class_2960; field_14521 STRUCTURE_WARM + f [Lnet/minecraft/class_2960; field_14520 STRUCTURE_CRACKED_BIG + f [Lnet/minecraft/class_2960; field_14515 STRUCTURE_WARM_BIG +c net/minecraft/class_3409$class_3410 net/minecraft/world/gen/feature/structure/OceanRuinPieces$Piece + m (Lnet/minecraft/class_3485;)V method_14828 setup + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_14829 func_204035_a + f Lnet/minecraft/class_2470; field_14526 rotation + f Z field_14525 isLarge + f Lnet/minecraft/class_2960; field_14523 templateName + f F field_14524 integrity + f Lnet/minecraft/class_3411$class_3413; field_14527 biomeType +c net/minecraft/class_3418 net/minecraft/world/gen/feature/structure/ScatteredStructurePiece + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_3341;I)Z method_14839 isInsideBounds + f I field_15243 height + f I field_15241 hPos + f I field_15242 depth + f I field_15244 width +c net/minecraft/class_5189 net/minecraft/world/gen/feature/structure/RuinedPortalPiece + m (Ljava/util/Random;Lnet/minecraft/class_5281;Lnet/minecraft/class_2338;)V method_27250 func_237017_a_ + m (Ljava/util/Random;Lnet/minecraft/class_1936;)V method_27243 func_237015_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_3821; method_27240 func_237012_a_ + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_27238 func_237010_a_ + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28950 func_237018_a_ + m (Lnet/minecraft/class_1936;IILnet/minecraft/class_5189$class_5191;)I method_27237 func_237009_a_ + m (Lnet/minecraft/class_2248;FLnet/minecraft/class_2248;)Lnet/minecraft/class_3821; method_27239 func_237011_a_ + m (Ljava/util/Random;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_27248 func_237022_c_ + m (Ljava/util/Random;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_27244 func_237016_a_ + m (Ljava/util/Random;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_27246 func_237020_b_ + m ()Lnet/minecraft/class_3821; method_27247 func_237021_c_ + m (Ljava/util/Random;Lnet/minecraft/class_1936;)V method_27245 func_237019_b_ + m (Lnet/minecraft/class_3499;Lnet/minecraft/class_2338;)V method_27242 func_237014_a_ + m (Ljava/util/Random;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_27249 func_237023_d_ + m (Lnet/minecraft/class_5189$class_5191;)Lnet/minecraft/class_2902$class_2903; method_27241 func_237013_a_ + f Lnet/minecraft/class_2470; field_24019 field_237005_f_ + f Lnet/minecraft/class_5189$class_5190; field_24022 field_237008_i_ + f Lnet/minecraft/class_2960; field_24018 field_237004_e_ + f Lnet/minecraft/class_2415; field_24020 field_237006_g_ + f Lorg/apache/logging/log4j/Logger; field_24992 field_237003_d_ + f Lnet/minecraft/class_5189$class_5191; field_24021 field_237007_h_ +c net/minecraft/class_5189$class_5190 net/minecraft/world/gen/feature/structure/RuinedPortalPiece$Serializer + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28951 func_237031_a_ + m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Boolean; method_28952 func_237032_a_ + m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Boolean; method_28955 func_237035_d_ + m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Boolean; method_28954 func_237034_c_ + m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Float; method_28956 func_237036_e_ + m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Boolean; method_28953 func_237033_b_ + m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Boolean; method_28957 func_237037_f_ + f Z field_24023 field_237025_b_ + f Z field_24028 field_237030_g_ + f F field_24024 field_237026_c_ + f Z field_24027 field_237029_f_ + f Z field_24025 field_237027_d_ + f Lcom/mojang/serialization/Codec; field_24993 field_237024_a_ + f Z field_24026 field_237028_e_ +c net/minecraft/class_5189$class_5191 net/minecraft/world/gen/feature/structure/RuinedPortalPiece$Location + m ()[Lnet/minecraft/class_5189$class_5191; values values + m (Ljava/lang/String;)Lnet/minecraft/class_5189$class_5191; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_5189$class_5191; method_27254 func_237042_a_ + m ()Ljava/lang/String; method_27252 func_237040_a_ + m (Lnet/minecraft/class_5189$class_5191;)Lnet/minecraft/class_5189$class_5191; method_27253 func_237041_a_ + f Lnet/minecraft/class_5189$class_5191; field_24032 IN_MOUNTAIN + f Ljava/util/Map; field_24035 field_237038_g_ + f Lnet/minecraft/class_5189$class_5191; field_24031 ON_OCEAN_FLOOR + f Lnet/minecraft/class_5189$class_5191; field_24030 PARTLY_BURIED + f Lnet/minecraft/class_5189$class_5191; field_24029 ON_LAND_SURFACE + f Ljava/lang/String; field_24036 field_237039_h_ + f [Lnet/minecraft/class_5189$class_5191; field_24037 $VALUES + f Lnet/minecraft/class_5189$class_5191; field_24034 IN_NETHER + f Lnet/minecraft/class_5189$class_5191; field_24033 UNDERGROUND +c net/minecraft/class_3421 net/minecraft/world/gen/feature/structure/StrongholdPieces + m (Ljava/lang/Class;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3437; method_14847 findAndCreatePieceFactory + m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3437; method_14851 generatePieceFromSmallDoor + m ()Z method_14852 canAddStructurePieces + m ()Lnet/minecraft/class_3421$class_3432; method_14848 access$200 + m (Ljava/lang/Class;)Ljava/lang/Class; method_14849 access$102 + m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3443; method_14853 access$000 + m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3443; method_14854 generateAndAddPiece + m ()V method_14855 prepareStructurePieces + f Ljava/lang/Class; field_15266 strongComponentType + f I field_15264 totalWeight + f Ljava/util/List; field_15267 structurePieceList + f Lnet/minecraft/class_3421$class_3432; field_15263 STRONGHOLD_STONES + f [Lnet/minecraft/class_3421$class_3427; field_15265 PIECE_WEIGHTS +c net/minecraft/class_3421$class_3432 net/minecraft/world/gen/feature/structure/StrongholdPieces$Stones +c net/minecraft/class_3421$class_3433 net/minecraft/world/gen/feature/structure/StrongholdPieces$Stairs + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3433; method_14866 createPiece + f Z field_15281 source +c net/minecraft/class_3421$class_3434 net/minecraft/world/gen/feature/structure/StrongholdPieces$Stairs2 + f Ljava/util/List; field_15282 pendingChildren + f Lnet/minecraft/class_3421$class_3428; field_15283 strongholdPortalRoom + f Lnet/minecraft/class_3421$class_3427; field_15284 lastPlaced +c net/minecraft/class_3421$class_3435 net/minecraft/world/gen/feature/structure/StrongholdPieces$Straight + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3435; method_14867 createPiece + f Z field_15285 expandsZ + f Z field_15286 expandsX +c net/minecraft/class_3421$class_3436 net/minecraft/world/gen/feature/structure/StrongholdPieces$StairsStraight + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3436; method_14868 createPiece +c net/minecraft/class_3421$class_3437 net/minecraft/world/gen/feature/structure/StrongholdPieces$Stronghold + m (Ljava/util/Random;)Lnet/minecraft/class_3421$class_3437$class_3438; method_14869 getRandomDoor + m (Lnet/minecraft/class_3341;)Z method_14871 canStrongholdGoDeeper + m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;II)Lnet/minecraft/class_3443; method_14873 getNextComponentZ + m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;Lnet/minecraft/class_3421$class_3437$class_3438;III)V method_14872 func_242917_a + m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;II)Lnet/minecraft/class_3443; method_14870 getNextComponentX + m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;II)Lnet/minecraft/class_3443; method_14874 getNextComponentNormal + f Lnet/minecraft/class_3421$class_3437$class_3438; field_15287 entryDoor +c net/minecraft/class_3421$class_3437$class_3438 net/minecraft/world/gen/feature/structure/StrongholdPieces$Stronghold$Door + m (Ljava/lang/String;)Lnet/minecraft/class_3421$class_3437$class_3438; valueOf valueOf + m ()[Lnet/minecraft/class_3421$class_3437$class_3438; values values + f Lnet/minecraft/class_3421$class_3437$class_3438; field_15291 IRON_DOOR + f Lnet/minecraft/class_3421$class_3437$class_3438; field_15289 GRATES + f Lnet/minecraft/class_3421$class_3437$class_3438; field_15290 WOOD_DOOR + f Lnet/minecraft/class_3421$class_3437$class_3438; field_15288 OPENING + f [Lnet/minecraft/class_3421$class_3437$class_3438; field_15292 $VALUES +c net/minecraft/class_3421$class_3466 net/minecraft/world/gen/feature/structure/StrongholdPieces$Turn +c net/minecraft/class_3421$1 net/minecraft/world/gen/feature/structure/StrongholdPieces$1 +c net/minecraft/class_3421$2 net/minecraft/world/gen/feature/structure/StrongholdPieces$2 +c net/minecraft/class_3421$class_3424 net/minecraft/world/gen/feature/structure/StrongholdPieces$Crossing + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3424; method_14858 createPiece + f Z field_15270 rightHigh + f Z field_15272 leftHigh + f Z field_15273 leftLow + f Z field_15271 rightLow +c net/minecraft/class_3421$class_3425 net/minecraft/world/gen/feature/structure/StrongholdPieces$LeftTurn + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3425; method_14859 createPiece +c net/minecraft/class_3421$class_3426 net/minecraft/world/gen/feature/structure/StrongholdPieces$Library + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3426; method_14860 createPiece + f Z field_15274 isLargeRoom +c net/minecraft/class_3421$class_3427 net/minecraft/world/gen/feature/structure/StrongholdPieces$PieceWeight + m (I)Z method_14862 canSpawnMoreStructuresOfType + m ()Z method_14861 canSpawnMoreStructures + f I field_15278 pieceWeight + f I field_15275 instancesLimit + f I field_15277 instancesSpawned + f Ljava/lang/Class; field_15276 pieceClass +c net/minecraft/class_3421$class_3428 net/minecraft/world/gen/feature/structure/StrongholdPieces$PortalRoom + m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3428; method_14863 createPiece + f Z field_15279 hasSpawner +c net/minecraft/class_3421$class_3429 net/minecraft/world/gen/feature/structure/StrongholdPieces$Prison + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3429; method_14864 createPiece +c net/minecraft/class_3421$class_3430 net/minecraft/world/gen/feature/structure/StrongholdPieces$RightTurn + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3430; method_16652 func_214824_a +c net/minecraft/class_3421$class_3431 net/minecraft/world/gen/feature/structure/StrongholdPieces$RoomCrossing + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3431; method_14865 createPiece + f I field_15280 roomType +c net/minecraft/class_3421$3 net/minecraft/world/gen/feature/structure/StrongholdPieces$3 + f [I field_15294 field_75245_a + f [I field_15293 field_175951_b +c net/minecraft/class_3421$class_3422 net/minecraft/world/gen/feature/structure/StrongholdPieces$ChestCorridor + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3422; method_14856 createPiece + f Z field_15268 hasMadeChest +c net/minecraft/class_3421$class_3423 net/minecraft/world/gen/feature/structure/StrongholdPieces$Corridor + m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;)Lnet/minecraft/class_3341; method_14857 findPieceBox + f I field_15269 steps +c net/minecraft/class_3415 net/minecraft/world/gen/feature/structure/ShipwreckPieces + m ()Lnet/minecraft/class_2338; method_14836 func_207662_b + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;Lnet/minecraft/class_3172;)V method_14834 func_204760_a + f [Lnet/minecraft/class_2960; field_14535 field_204762_b + f Lnet/minecraft/class_2338; field_14536 STRUCTURE_OFFSET + f [Lnet/minecraft/class_2960; field_14534 STRUCTURE_VARIANT_A +c net/minecraft/class_3415$class_3416 net/minecraft/world/gen/feature/structure/ShipwreckPieces$Piece + m (Lnet/minecraft/class_3485;)V method_14837 func_204754_a + f Lnet/minecraft/class_2960; field_14537 field_204756_e + f Z field_14538 isBeached + f Lnet/minecraft/class_2470; field_14539 rotation +c net/minecraft/class_3443 net/minecraft/world/gen/feature/structure/StructurePiece + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_3341;Lnet/minecraft/class_1923;Lnet/minecraft/class_2338;)Z method_14931 func_230383_a_ + m (Lnet/minecraft/class_1923;I)Z method_16654 func_214810_a + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;Ljava/util/Random;FIIIIIILnet/minecraft/class_2680;Lnet/minecraft/class_2680;ZZ)V method_14933 generateMaybeBox + m ()Lnet/minecraft/class_3341; method_14935 getBoundingBox + m (II)I method_14941 getZWithOffset + m (Lnet/minecraft/class_2350;)V method_14926 setCoordBaseMode + m ()I method_14923 getComponentType + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIII)V method_14942 fillWithAir + m (II)I method_14928 getXWithOffset + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;Ljava/util/Random;IIILnet/minecraft/class_2350;Lnet/minecraft/class_2960;)Z method_14930 createDispenser + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_3341;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2960;Lnet/minecraft/class_2680;)Z method_14921 generateChest + m ()Lnet/minecraft/class_2487; method_14946 write + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;Ljava/util/Random;FIIILnet/minecraft/class_2680;)V method_14945 randomlyPlaceBlock + m (Ljava/util/List;Lnet/minecraft/class_3341;)Lnet/minecraft/class_3443; method_14932 findIntersecting + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIIIZLjava/util/Random;Lnet/minecraft/class_3443$class_3444;)V method_14938 fillWithRandomizedBlocks + m ()Lnet/minecraft/class_2350; method_14934 getCoordBaseMode + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_14916 correctFacing + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2680;IIILnet/minecraft/class_3341;)V method_14936 replaceAirAndLiquidDownwards + m ()Lnet/minecraft/class_3773; method_16653 getStructurePieceType + m (Lnet/minecraft/class_4538;IIILnet/minecraft/class_3341;)Z method_14939 getSkyBrightness + m (Lnet/minecraft/class_1922;IIILnet/minecraft/class_3341;)Lnet/minecraft/class_2680; method_14929 getBlockStateFromPos + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2680;IIILnet/minecraft/class_3341;)V method_14917 setBlockState + m (III)V method_14922 offset + m (Lnet/minecraft/class_3443;Ljava/util/List;Ljava/util/Random;)V method_14918 buildComponent + m (Lnet/minecraft/class_2487;)V method_14943 readAdditional + m ()Lnet/minecraft/class_2470; method_16888 getRotation + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;Ljava/util/Random;IIILnet/minecraft/class_2960;)Z method_14915 generateChest + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_3341;)Z method_14937 isLiquidInStructureBoundingBox + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIIILnet/minecraft/class_2680;Lnet/minecraft/class_2680;Z)V method_14940 fillWithBlocks + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIIILnet/minecraft/class_2680;Z)V method_14919 randomlyRareFillWithBlocks + m (I)I method_14924 getYWithOffset + f Lnet/minecraft/class_3773; field_16712 structurePieceType + f Lnet/minecraft/class_3341; field_15315 boundingBox + f Lnet/minecraft/class_2680; field_15314 CAVE_AIR + f Ljava/util/Set; field_15311 BLOCKS_NEEDING_POSTPROCESSING + f Lnet/minecraft/class_2350; field_15312 coordBaseMode + f I field_15316 componentType + f Lnet/minecraft/class_2470; field_15313 rotation + f Lnet/minecraft/class_2415; field_15310 mirror +c net/minecraft/class_3443$class_3444 net/minecraft/world/gen/feature/structure/StructurePiece$BlockSelector + m (Ljava/util/Random;IIIZ)V method_14948 selectBlocks + m ()Lnet/minecraft/class_2680; method_14947 getBlockState + f Lnet/minecraft/class_2680; field_15317 blockstate +c net/minecraft/class_3443$1 net/minecraft/world/gen/feature/structure/StructurePiece$1 + f [I field_15318 field_176100_a +c net/minecraft/class_3440 net/minecraft/world/gen/feature/structure/StructureIndexesSavedData + m (J)V method_14895 removeStructureIndex + m ()Lit/unimi/dsi/fastutil/longs/LongSet; method_14898 getAll + m (J)Z method_14897 hasStructureIndexInAll + m (J)Z method_14894 hasStructureIndexInRemaining + m (J)V method_14896 addStructureIndex + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15301 all + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15302 remaining +c net/minecraft/class_3447 net/minecraft/world/gen/feature/structure/SwampHutPiece + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_3341;)V method_16181 func_214821_a + f Z field_15322 witch + f Z field_16445 field_214822_f +c net/minecraft/class_3449 net/minecraft/world/gen/feature/structure/StructureStart + m ()Lnet/minecraft/class_3341; method_14968 getBoundingBox + m ()I method_23676 getRefCount + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3037;)V method_16655 func_230364_a_ + m ()I method_14970 getMaxRefCount + m ()Z method_16657 isValid + m ()Z method_14979 isRefCountBelowMax + m ()V method_14964 incrementRefCount + m ()V method_14969 recalculateStructureSize + m ()I method_14967 getChunkPosX + m (ILjava/util/Random;I)V method_14978 func_214628_a + m ()I method_14966 getChunkPosZ + m (Ljava/util/Random;II)V method_14976 func_214626_a + m ()Ljava/util/List; method_14963 getComponents + m ()Lnet/minecraft/class_3195; method_16656 getStructure + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_3341;Lnet/minecraft/class_1923;)V method_14974 func_230366_a_ + m (II)Lnet/minecraft/class_2487; method_14972 write + m ()Lnet/minecraft/class_2338; method_14962 getPos + f Ljava/util/List; field_15325 components + f I field_15326 references + f Lnet/minecraft/class_3341; field_15330 bounds + f Lnet/minecraft/class_3195; field_16714 structure + f I field_15329 chunkPosX + f I field_15327 chunkPosZ + f Lnet/minecraft/class_2919; field_16715 rand + f Lnet/minecraft/class_3449; field_16713 DUMMY +c net/minecraft/class_3449$1 net/minecraft/world/gen/feature/structure/StructureStart$1 + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3101;)V method_28958 func_230364_a_ +c net/minecraft/class_3471 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces + m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;)V method_15029 generateMansion +c net/minecraft/class_3471$class_3476 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$PlacementData + f Lnet/minecraft/class_2470; field_15450 rotation + f Lnet/minecraft/class_2338; field_15449 position + f Ljava/lang/String; field_15448 wallType +c net/minecraft/class_3471$class_3477 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$SecondFloor +c net/minecraft/class_3471$class_3478 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$SimpleGrid + m (III)Z method_15067 edgesTo + m (Lnet/minecraft/class_3471$class_3478;)I method_15063 access$600 + m (IIII)V method_15061 setIf + m (IIIII)V method_15062 set + m (III)V method_15065 set + m (Lnet/minecraft/class_3471$class_3478;)I method_15064 access$500 + m (II)I method_15066 get + f [[I field_15451 grid + f I field_15452 valueIfOutside + f I field_15453 height + f I field_15454 width +c net/minecraft/class_3471$class_3479 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$ThirdFloor +c net/minecraft/class_3471$class_3480 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$MansionTemplate + m (Lnet/minecraft/class_3485;)V method_15068 loadTemplate + f Lnet/minecraft/class_2470; field_15457 rotation + f Ljava/lang/String; field_15455 templateName + f Lnet/minecraft/class_2415; field_15456 mirror +c net/minecraft/class_3471$class_3472 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$FirstFloor +c net/minecraft/class_3471$1 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$1 +c net/minecraft/class_3471$class_3473 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$RoomCollection + m (Ljava/util/Random;)Ljava/lang/String; method_15035 get1x2Secret + m (Ljava/util/Random;)Ljava/lang/String; method_15032 get1x1Secret + m (Ljava/util/Random;Z)Ljava/lang/String; method_15031 get1x2FrontEntrance + m (Ljava/util/Random;)Ljava/lang/String; method_15037 get1x1 + m (Ljava/util/Random;Z)Ljava/lang/String; method_15033 get1x2SideEntrance + m (Ljava/util/Random;)Ljava/lang/String; method_15036 get2x2Secret + m (Ljava/util/Random;)Ljava/lang/String; method_15034 get2x2 +c net/minecraft/class_3471$class_3474 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$Grid + m (Lnet/minecraft/class_3471$class_3474;)Lnet/minecraft/class_3471$class_3478; method_15043 access$100 + m (Lnet/minecraft/class_3471$class_3474;)Lnet/minecraft/class_3471$class_3478; method_15041 access$200 + m ()V method_15048 setupThirdFloor + m (Lnet/minecraft/class_3471$class_3478;IILnet/minecraft/class_2350;I)V method_15045 recursiveCorridor + m (Lnet/minecraft/class_3471$class_3474;)[Lnet/minecraft/class_3471$class_3478; method_15044 access$1000 + m (Lnet/minecraft/class_3471$class_3478;IIII)Z method_15039 isRoomId + m (Lnet/minecraft/class_3471$class_3478;II)Z method_15047 isHouse + m (Lnet/minecraft/class_3471$class_3478;Lnet/minecraft/class_3471$class_3478;)V method_15042 identifyRooms + m (Lnet/minecraft/class_3471$class_3478;)Z method_15046 cleanEdges + m (Lnet/minecraft/class_3471$class_3478;IIII)Lnet/minecraft/class_2350; method_15040 get1x2RoomDirection + m (Lnet/minecraft/class_3471$class_3474;)I method_15038 access$400 + m (Lnet/minecraft/class_3471$class_3474;)I method_15049 access$300 + f Ljava/util/Random; field_15438 random + f [Lnet/minecraft/class_3471$class_3478; field_15443 floorRooms + f Lnet/minecraft/class_3471$class_3478; field_15440 baseGrid + f I field_15441 entranceY + f Lnet/minecraft/class_3471$class_3478; field_15439 thirdFloorGrid + f I field_15442 entranceX +c net/minecraft/class_3471$class_3475 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$Placer + m (Ljava/util/List;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3471$class_3478;Lnet/minecraft/class_3471$class_3478;)V method_15055 createRoof + m (Ljava/util/List;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Lnet/minecraft/class_3471$class_3473;Z)V method_15059 addRoom1x2 + m (Ljava/util/List;Lnet/minecraft/class_3471$class_3476;)V method_15058 traverseTurn + m (Ljava/util/List;Lnet/minecraft/class_3471$class_3476;)V method_15052 traverseWallPiece + m (Ljava/util/List;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3471$class_3473;)V method_15053 addRoom2x2Secret + m (Ljava/util/List;Lnet/minecraft/class_3471$class_3476;Lnet/minecraft/class_3471$class_3478;Lnet/minecraft/class_2350;IIII)V method_15051 traverseOuterWalls + m (Ljava/util/List;Lnet/minecraft/class_3471$class_3476;)V method_15054 entrance + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Lnet/minecraft/class_3471$class_3474;)V method_15050 createMansion + m (Ljava/util/List;Lnet/minecraft/class_3471$class_3476;)V method_15060 traverseInnerTurn + m (Ljava/util/List;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Lnet/minecraft/class_3471$class_3473;)V method_15056 addRoom2x2 + m (Ljava/util/List;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_2350;Lnet/minecraft/class_3471$class_3473;)V method_15057 addRoom1x1 + f Ljava/util/Random; field_15447 random + f I field_15445 startY + f I field_15446 startX + f Lnet/minecraft/class_3485; field_15444 templateManager +c net/minecraft/class_3470 net/minecraft/world/gen/feature/structure/TemplateStructurePiece + m (Ljava/lang/String;Lnet/minecraft/class_2338;Lnet/minecraft/class_5425;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_15026 handleDataMarker + m (Lnet/minecraft/class_3499;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;)V method_15027 setup + f Lnet/minecraft/class_2338; field_15432 templatePosition + f Lnet/minecraft/class_3499; field_15433 template + f Lorg/apache/logging/log4j/Logger; field_16586 LOGGER + f Lnet/minecraft/class_3492; field_15434 placeSettings +c net/minecraft/class_3818 net/minecraft/world/gen/feature/template/AlwaysTrueRuleTest + m ()Lnet/minecraft/class_3818; method_28959 func_237044_b_ + f Lnet/minecraft/class_3818; field_16868 INSTANCE + f Lcom/mojang/serialization/Codec; field_24994 field_237043_a_ +c net/minecraft/class_5192 net/minecraft/world/gen/feature/template/BlackStoneReplacementProcessor + m (Ljava/util/HashMap;)V method_27255 func_237060_a_ + m ()Lnet/minecraft/class_5192; method_28966 func_237061_b_ + f Lcom/mojang/serialization/Codec; field_24996 field_237057_a_ + f Lnet/minecraft/class_5192; field_24040 field_237058_b_ + f Ljava/util/Map; field_24041 field_237059_c_ +c net/minecraft/class_4992 net/minecraft/world/gen/feature/template/AxisAlignedLinearPosTest + m (Lnet/minecraft/class_4992;)Ljava/lang/Float; method_28964 func_237055_d_ + m (Lnet/minecraft/class_4992;)Ljava/lang/Integer; method_28963 func_237054_c_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28960 func_237051_a_ + m (Lnet/minecraft/class_4992;)Lnet/minecraft/class_2350$class_2351; method_28961 func_237052_a_ + m (Lnet/minecraft/class_4992;)Ljava/lang/Float; method_28965 func_237056_e_ + m (Lnet/minecraft/class_4992;)Ljava/lang/Integer; method_28962 func_237053_b_ + f F field_23334 field_237046_b_ + f I field_23337 field_237049_f_ + f F field_23335 field_237047_d_ + f Lcom/mojang/serialization/Codec; field_24995 field_237045_a_ + f Lnet/minecraft/class_2350$class_2351; field_23338 field_237050_g_ + f I field_23336 field_237048_e_ +c net/minecraft/class_5193 net/minecraft/world/gen/feature/template/BlockMosinessProcessor + m (Ljava/util/Random;)Lnet/minecraft/class_2680; method_27263 func_237072_d_ + m (Lnet/minecraft/class_5193;)Ljava/lang/Float; method_28967 func_237064_a_ + m (Ljava/util/Random;Lnet/minecraft/class_2248;)Lnet/minecraft/class_2680; method_27257 func_237066_a_ + m (Ljava/util/Random;)Lnet/minecraft/class_2680; method_27261 func_237070_b_ + m (Ljava/util/Random;)Lnet/minecraft/class_2680; method_27262 func_237071_c_ + m (Ljava/util/Random;[Lnet/minecraft/class_2680;[Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_27260 func_237069_a_ + m (Ljava/util/Random;Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_27258 func_237067_a_ + m (Ljava/util/Random;)Lnet/minecraft/class_2680; method_27256 func_237065_a_ + m (Ljava/util/Random;[Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_27259 func_237068_a_ + f F field_24042 field_237063_b_ + f Lcom/mojang/serialization/Codec; field_24997 field_237062_a_ +c net/minecraft/class_3819 net/minecraft/world/gen/feature/template/BlockMatchRuleTest + m (Lnet/minecraft/class_3819;)Lnet/minecraft/class_2248; method_28969 func_237076_a_ + f Lcom/mojang/serialization/Codec; field_24999 field_237075_a_ + f Lnet/minecraft/class_2248; field_16869 block +c net/minecraft/class_3793 net/minecraft/world/gen/feature/template/BlockIgnoreStructureProcessor + m (Lnet/minecraft/class_3793;)Ljava/util/List; method_28968 func_237074_a_ + f Lcom/google/common/collect/ImmutableList; field_16720 blocks + f Lnet/minecraft/class_3793; field_16719 AIR + f Lnet/minecraft/class_3793; field_16718 STRUCTURE_BLOCK + f Lnet/minecraft/class_3793; field_16721 AIR_AND_STRUCTURE_BLOCK + f Lcom/mojang/serialization/Codec; field_24998 field_237073_a_ +c net/minecraft/class_3820 net/minecraft/world/gen/feature/template/BlockStateMatchRuleTest + m (Lnet/minecraft/class_3820;)Lnet/minecraft/class_2680; method_28971 func_237080_a_ + f Lnet/minecraft/class_2680; field_16870 state + f Lcom/mojang/serialization/Codec; field_25001 field_237079_a_ +c net/minecraft/class_3488 net/minecraft/world/gen/feature/template/IntegrityProcessor + m (Lnet/minecraft/class_3488;)Ljava/lang/Float; method_28970 func_237078_a_ + f Lcom/mojang/serialization/Codec; field_25000 field_237077_a_ + f F field_15523 integrity +c net/minecraft/class_3794 net/minecraft/world/gen/feature/template/JigsawReplacementStructureProcessor + m ()Lnet/minecraft/class_3794; method_28975 func_237086_b_ + f Lnet/minecraft/class_3794; field_16871 INSTANCE + f Lcom/mojang/serialization/Codec; field_25003 field_237085_a_ +c net/minecraft/class_3795 net/minecraft/world/gen/feature/template/GravityStructureProcessor + m (Lnet/minecraft/class_3795;)Ljava/lang/Integer; method_28973 func_237083_a_ + m (Lnet/minecraft/class_3795;)Lnet/minecraft/class_2902$class_2903; method_28974 func_237084_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28972 func_237082_a_ + f Lnet/minecraft/class_2902$class_2903; field_16723 heightmap + f Lcom/mojang/serialization/Codec; field_25002 field_237081_a_ + f I field_16725 offset +c net/minecraft/class_4993 net/minecraft/world/gen/feature/template/LinearPosTest + m (Lnet/minecraft/class_4993;)Ljava/lang/Integer; method_28978 func_237094_b_ + m (Lnet/minecraft/class_4993;)Ljava/lang/Integer; method_28977 func_237093_a_ + m (Lnet/minecraft/class_4993;)Ljava/lang/Float; method_28980 func_237096_d_ + m (Lnet/minecraft/class_4993;)Ljava/lang/Float; method_28979 func_237095_c_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28976 func_237092_a_ + f I field_23341 field_237090_e_ + f I field_23342 field_237091_f_ + f F field_23340 field_237089_d_ + f F field_23339 field_237088_b_ + f Lcom/mojang/serialization/Codec; field_25004 field_237087_a_ +c net/minecraft/class_5399 net/minecraft/world/gen/feature/template/LavaSubmergingProcessor + m ()Lnet/minecraft/class_5399; method_29966 func_241533_b_ + f Lcom/mojang/serialization/Codec; field_25618 field_241531_a_ + f Lnet/minecraft/class_5399; field_25619 field_241532_b_ +c net/minecraft/class_4994 net/minecraft/world/gen/feature/template/AlwaysTrueTest + m ()Lnet/minecraft/class_4994; method_28982 func_237101_b_ + f Lcom/mojang/serialization/Codec; field_25006 field_237099_a_ + f Lnet/minecraft/class_4994; field_23343 field_237100_b_ +c net/minecraft/class_3822 net/minecraft/world/gen/feature/template/NopProcessor + m ()Lnet/minecraft/class_3822; method_28981 func_237098_b_ + f Lcom/mojang/serialization/Codec; field_25005 field_237097_a_ + f Lnet/minecraft/class_3822; field_16876 INSTANCE +c net/minecraft/class_4996 net/minecraft/world/gen/feature/template/IPosRuleTests + m ()Lcom/mojang/serialization/Codec; codec codec + m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28983 func_237106_a_ + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4996; method_26409 func_237107_a_ + f Lnet/minecraft/class_4996; field_23346 field_237105_c_ + f Lnet/minecraft/class_4996; field_23345 field_237104_b_ + f Lnet/minecraft/class_4996; field_23344 field_237103_a_ +c net/minecraft/class_4995 net/minecraft/world/gen/feature/template/PosRuleTest + m ()Lnet/minecraft/class_4996; method_26404 func_230384_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_26406 func_230385_a_ + f Lcom/mojang/serialization/Codec; field_25007 field_237102_c_ +c net/minecraft/class_3824 net/minecraft/world/gen/feature/template/RandomBlockMatchRuleTest + m (Lnet/minecraft/class_3824;)Lnet/minecraft/class_2248; method_28992 func_237120_b_ + m (Lnet/minecraft/class_3824;)Ljava/lang/Float; method_28991 func_237119_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28990 func_237118_a_ + f F field_16879 probability + f Lnet/minecraft/class_2248; field_16880 block + f Lcom/mojang/serialization/Codec; field_25009 field_237117_a_ +c net/minecraft/class_3821 net/minecraft/world/gen/feature/template/RuleEntry + m (Lnet/minecraft/class_3821;)Lnet/minecraft/class_3825; method_28988 func_237115_d_ + m (Lnet/minecraft/class_3821;)Lnet/minecraft/class_3825; method_28989 func_237116_e_ + m (Lnet/minecraft/class_3821;)Lnet/minecraft/class_4995; method_28987 func_237114_c_ + m ()Lnet/minecraft/class_2487; method_16760 getOutputNbt + m (Lnet/minecraft/class_3821;)Ljava/util/Optional; method_28985 func_237112_a_ + m (Lnet/minecraft/class_3821;)Lnet/minecraft/class_2680; method_28986 func_237113_b_ + m ()Lnet/minecraft/class_2680; method_16763 getOutputState + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28984 func_237111_a_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_16762 func_237110_a_ + f Lnet/minecraft/class_3825; field_16873 locationPredicate + f Lnet/minecraft/class_3825; field_16872 inputPredicate + f Lnet/minecraft/class_2487; field_16875 outputNbt + f Lnet/minecraft/class_2680; field_16874 outputState + f Lnet/minecraft/class_4995; field_23347 field_237109_d_ + f Lcom/mojang/serialization/Codec; field_25008 field_237108_a_ +c net/minecraft/class_3826 net/minecraft/world/gen/feature/template/RuleStructureProcessor + m (Lnet/minecraft/class_3826;)Ljava/util/List; method_28996 func_237126_a_ + f Lcom/google/common/collect/ImmutableList; field_16881 rules + f Lcom/mojang/serialization/Codec; field_25011 field_237125_a_ +c net/minecraft/class_3823 net/minecraft/world/gen/feature/template/RandomBlockStateMatchRuleTest + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28993 func_237122_a_ + m (Lnet/minecraft/class_3823;)Ljava/lang/Float; method_28994 func_237123_a_ + m (Lnet/minecraft/class_3823;)Lnet/minecraft/class_2680; method_28995 func_237124_b_ + f Lnet/minecraft/class_2680; field_16878 state + f F field_16877 probability + f Lcom/mojang/serialization/Codec; field_25010 field_237121_a_ +c net/minecraft/class_3827 net/minecraft/world/gen/feature/template/IRuleTestType + m ()Lcom/mojang/serialization/Codec; codec codec + m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28997 func_237128_a_ + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_3827; method_16821 func_237129_a_ + f Lnet/minecraft/class_3827; field_16985 BLOCKSTATE_MATCH + f Lnet/minecraft/class_3827; field_16981 BLOCK_MATCH + f Lnet/minecraft/class_3827; field_16983 TAG_MATCH + f Lnet/minecraft/class_3827; field_16980 RANDOM_BLOCK_MATCH + f Lnet/minecraft/class_3827; field_16982 ALWAYS_TRUE + f Lnet/minecraft/class_3827; field_16984 RANDOM_BLOCKSTATE_MATCH +c net/minecraft/class_3825 net/minecraft/world/gen/feature/template/RuleTest + m (Lnet/minecraft/class_2680;Ljava/util/Random;)Z method_16768 test + m ()Lnet/minecraft/class_3827; method_16766 getType + f Lcom/mojang/serialization/Codec; field_25012 field_237127_c_ +c net/minecraft/class_3492 net/minecraft/world/gen/feature/template/PlacementSettings + m ()Z method_27265 func_237134_m_ + m ()Z method_15120 func_204763_l + m (Ljava/util/Random;)Lnet/minecraft/class_3492; method_15112 setRandom + m ()Lnet/minecraft/class_3492; method_15128 copy + m (Ljava/util/List;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3499$class_5162; method_15121 func_237132_a_ + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_3492; method_15119 setCenterOffset + m ()Lnet/minecraft/class_3492; method_16183 clearProcessors + m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_3492; method_15130 setChunk + m (Lnet/minecraft/class_2470;)Lnet/minecraft/class_3492; method_15123 setRotation + m (Z)Lnet/minecraft/class_3492; method_15133 setIgnoreEntities + m (Z)Lnet/minecraft/class_3492; method_15131 func_215223_c + m ()Z method_15135 getIgnoreEntities + m (Z)Lnet/minecraft/class_3492; method_27264 func_237133_d_ + m ()Lnet/minecraft/class_3341; method_15124 getBoundingBox + m ()Z method_16444 func_215218_i + m ()V method_15132 setBoundingBoxFromChunk + m (Lnet/minecraft/class_2415;)Lnet/minecraft/class_3492; method_15125 setMirror + m (Lnet/minecraft/class_2338;)Ljava/util/Random; method_15115 getRandom + m (Lnet/minecraft/class_3491;)Lnet/minecraft/class_3492; method_16664 removeProcessor + m ()Lnet/minecraft/class_2415; method_15114 getMirror + m ()Lnet/minecraft/class_2470; method_15113 getRotation + m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_3341; method_15117 getBoundingBoxFromChunk + m (Lnet/minecraft/class_3491;)Lnet/minecraft/class_3492; method_16184 addProcessor + m (Lnet/minecraft/class_3341;)Lnet/minecraft/class_3492; method_15126 setBoundingBox + m ()Lnet/minecraft/class_2338; method_15134 getCenterOffset + m ()Ljava/util/List; method_16182 getProcessors + f Ljava/util/List; field_16446 processors + f Z field_24043 field_237131_l_ + f Z field_16587 field_215225_l + f Lnet/minecraft/class_2338; field_15566 centerOffset + f Lnet/minecraft/class_1923; field_15563 chunk + f Z field_15567 field_204765_h + f Lnet/minecraft/class_3341; field_15565 boundingBox + f Ljava/util/Random; field_15570 random + f Lnet/minecraft/class_2470; field_15569 rotation + f Lnet/minecraft/class_2415; field_15564 mirror + f I field_15575 field_204767_m + f Z field_15571 ignoreEntities +c net/minecraft/class_3485 net/minecraft/world/gen/feature/template/TemplateManager + m (Lnet/minecraft/class_2960;Ljava/lang/String;)Ljava/nio/file/Path; method_15085 resolvePathStructures + m (Lnet/minecraft/class_2960;)Z method_15093 writeToFile + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3499; method_15091 getTemplateDefaulted + m (Lnet/minecraft/class_2960;)V method_15087 remove + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3499; method_15094 getTemplate + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_3499; method_21891 func_227458_a_ + m (Lnet/minecraft/class_3300;)V method_29300 onResourceManagerReload + m (Ljava/io/InputStream;)Lnet/minecraft/class_3499; method_15090 loadTemplate + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3499; method_15089 func_209204_g + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3499; method_15088 loadTemplateResource + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3499; method_15092 loadTemplateFile + m (Lnet/minecraft/class_2960;Ljava/lang/String;)Ljava/nio/file/Path; method_15086 resolvePath + f Ljava/nio/file/Path; field_15512 pathGenerated + f Lcom/mojang/datafixers/DataFixer; field_15515 fixer + f Ljava/util/Map; field_15513 templates + f Lnet/minecraft/class_3300; field_25189 field_237130_d_ + f Lorg/apache/logging/log4j/Logger; field_15514 LOGGER +c net/minecraft/class_5497 net/minecraft/world/gen/feature/template/StructureProcessorList + m ()Ljava/util/List; method_31027 func_242919_a + m ()Ljava/lang/String; toString toString + f Ljava/util/List; field_26662 field_242918_a +c net/minecraft/class_3491 net/minecraft/world/gen/feature/template/StructureProcessor + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_3499$class_3501;Lnet/minecraft/class_3499$class_3501;Lnet/minecraft/class_3492;)Lnet/minecraft/class_3499$class_3501; method_15110 func_230386_a_ + m ()Lnet/minecraft/class_3828; method_16772 getType +c net/minecraft/class_3499 net/minecraft/world/gen/feature/template/Template + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_15168 getTransformedPos + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;)Lnet/minecraft/class_2338; method_15167 getZeroPositionWithTransform + m (Lnet/minecraft/class_2470;IILnet/minecraft/class_3341;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)V method_16186 func_215385_a + m (Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;Lnet/minecraft/class_243;ZLnet/minecraft/class_5425;Lnet/minecraft/class_2487;Lnet/minecraft/class_1297;)V method_17917 func_242927_a + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_15175 writeToNBT + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;ZLnet/minecraft/class_2248;)V method_15174 takeBlocksFromWorld + m ([I)Lnet/minecraft/class_2499; method_15169 writeInts + m (Ljava/lang/String;)V method_15161 setAuthor + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)V method_15164 takeEntitiesFromWorld + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;II)Lnet/minecraft/class_2338; method_15162 getZeroPositionWithTransform + m (Lnet/minecraft/class_3499$class_3501;)I method_16185 func_237154_c_ + m (Lnet/minecraft/class_2487;)V method_15183 read + m ()Ljava/lang/String; method_15181 getAuthor + m (Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/util/List; method_28055 func_237151_a_ + m (Lnet/minecraft/class_1936;ILnet/minecraft/class_251;III)V method_20532 func_222857_a + m (Lnet/minecraft/class_3492;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_15180 calculateConnectedPos + m (Lnet/minecraft/class_3492;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_15171 transformedBlockPos + m (Lnet/minecraft/class_243;Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;Lnet/minecraft/class_2338;)Lnet/minecraft/class_243; method_15176 getTransformedPos + m ([D)Lnet/minecraft/class_2499; method_15184 writeDoubles + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Lnet/minecraft/class_2248;)Ljava/util/List; method_16445 func_215381_a + m (IIILnet/minecraft/class_1936;ILnet/minecraft/class_2350;III)V method_15173 func_237141_a_ + m (Lnet/minecraft/class_3492;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3341; method_16187 getMutableBoundingBox + m ()Lnet/minecraft/class_2338; method_15160 getSize + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Lnet/minecraft/class_2248;Z)Ljava/util/List; method_15165 func_215386_a + m (Lnet/minecraft/class_3499$class_3501;)I method_28056 func_237153_b_ + m (Lnet/minecraft/class_2499;Lnet/minecraft/class_2499;)V method_15177 readPalletesAndBlocks + m (Lnet/minecraft/class_3499$class_3501;)I method_28053 func_237148_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_2338;Lnet/minecraft/class_2415;)Lnet/minecraft/class_3341; method_27267 func_237150_a_ + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Ljava/util/Random;I)Z method_15172 func_237146_a_ + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Ljava/util/Random;)V method_15182 func_237144_a_ + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Ljava/util/List;)Ljava/util/List; method_16446 func_237145_a_ + m (Lnet/minecraft/class_1297;)Z method_15163 func_237142_a_ + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2487;)Ljava/util/Optional; method_17916 loadEntity + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2338;Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;Lnet/minecraft/class_2338;Lnet/minecraft/class_3341;Z)V method_15179 func_237143_a_ + m (Lnet/minecraft/class_2470;)Lnet/minecraft/class_2338; method_15166 transformedSize + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Ljava/util/Random;)V method_15178 func_237152_b_ + m (Lnet/minecraft/class_3499$class_3501;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V method_28054 func_237149_a_ + f Ljava/lang/String; field_15588 author + f Lnet/minecraft/class_2338; field_15587 size + f Ljava/util/List; field_15586 blocks + f Ljava/util/List; field_15589 entities +c net/minecraft/class_3499$class_3502 net/minecraft/world/gen/feature/template/Template$EntityInfo + f Lnet/minecraft/class_243; field_15599 pos + f Lnet/minecraft/class_2487; field_15598 nbt + f Lnet/minecraft/class_2338; field_15600 blockPos +c net/minecraft/class_3499$class_3501 net/minecraft/world/gen/feature/template/Template$BlockInfo + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2338; field_15597 pos + f Lnet/minecraft/class_2487; field_15595 nbt + f Lnet/minecraft/class_2680; field_15596 state +c net/minecraft/class_3499$class_3500 net/minecraft/world/gen/feature/template/Template$BasicPalette + m ()Ljava/util/Iterator; iterator iterator + m (Lnet/minecraft/class_2680;I)V method_15186 addMapping + m (I)Lnet/minecraft/class_2680; method_15185 stateFor + m (Lnet/minecraft/class_2680;)I method_15187 idFor + f I field_15592 lastId + f Lnet/minecraft/class_2680; field_15590 DEFAULT_BLOCK_STATE + f Lnet/minecraft/class_2361; field_15591 ids +c net/minecraft/class_3499$class_5162 net/minecraft/world/gen/feature/template/Template$Palette + m ()Ljava/util/List; method_27125 func_237157_a_ + m (Lnet/minecraft/class_2248;)Ljava/util/List; method_27128 func_237160_b_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_3499$class_3501;)Z method_27127 func_237159_a_ + m (Lnet/minecraft/class_2248;)Ljava/util/List; method_27126 func_237158_a_ + f Ljava/util/Map; field_23914 field_237156_b_ + f Ljava/util/List; field_23913 field_237155_a_ +c net/minecraft/class_3499$1 net/minecraft/world/gen/feature/template/Template$1 + f [I field_15594 field_206965_a + f [I field_15593 field_206966_b +c net/minecraft/class_3828 net/minecraft/world/gen/feature/template/IStructureProcessorType + m (Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_5497; method_31028 func_242923_a + m (Lnet/minecraft/class_5497;)Lnet/minecraft/class_5497; method_31030 func_242926_b + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_3828; method_16822 register + m (Lnet/minecraft/class_5497;)Lnet/minecraft/class_5497; method_31029 func_242925_a + m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28998 func_242924_a + m ()Lcom/mojang/serialization/Codec; codec codec + f Lcom/mojang/serialization/Codec; field_26663 field_242920_k + f Lcom/mojang/serialization/Codec; field_25013 PROCESSOR_TYPE + f Lnet/minecraft/class_3828; field_16990 RULE + f Lcom/mojang/serialization/Codec; field_25876 field_242921_l + f Lnet/minecraft/class_3828; field_24044 BLOCK_AGE + f Lnet/minecraft/class_3828; field_16987 NOP + f Lnet/minecraft/class_3828; field_24045 BLACKSTONE_REPLACE + f Lnet/minecraft/class_3828; field_25620 LAVA_SUBMERGED_BLOCK + f Lnet/minecraft/class_3828; field_16986 BLOCK_IGNORE + f Lnet/minecraft/class_3828; field_16989 GRAVITY + f Lcom/mojang/serialization/Codec; field_25877 field_242922_m + f Lnet/minecraft/class_3828; field_16988 BLOCK_ROT + f Lnet/minecraft/class_3828; field_16991 JIGSAW_REPLACEMENT +c net/minecraft/class_3798 net/minecraft/world/gen/feature/template/TagMatchRuleTest + m ()Lnet/minecraft/class_5414; method_30477 func_242928_b + m (Lnet/minecraft/class_3798;)Lnet/minecraft/class_3494; method_28999 func_237162_a_ + f Lcom/mojang/serialization/Codec; field_25014 field_237161_a_ + f Lnet/minecraft/class_3494; field_16747 tag +c net/minecraft/class_3506 net/minecraft/world/gen/surfacebuilders/BadlandsSurfaceBuilder + m (III)Lnet/minecraft/class_2680; method_15207 func_215431_a + m (J)V method_15209 func_215430_b + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15208 buildSurface + f Lnet/minecraft/class_3543; field_15618 field_215437_d + f Lnet/minecraft/class_2680; field_15624 WHITE_TERRACOTTA + f Lnet/minecraft/class_2680; field_15625 TERRACOTTA + f Lnet/minecraft/class_3543; field_15623 field_215435_c + f Lnet/minecraft/class_2680; field_15620 ORANGE_TERRACOTTA + f Lnet/minecraft/class_2680; field_15626 YELLOW_TERRACOTTA + f J field_15622 field_215433_b + f Lnet/minecraft/class_3543; field_15619 field_215439_e + f Lnet/minecraft/class_2680; field_15616 BROWN_TERRACOTTA + f Lnet/minecraft/class_2680; field_15617 LIGHT_GRAY_TERRACOTTA + f Lnet/minecraft/class_2680; field_15621 RED_TERRACOTTA + f [Lnet/minecraft/class_2680; field_15627 field_215432_a +c net/minecraft/class_3504 net/minecraft/world/gen/surfacebuilders/ConfiguredSurfaceBuilder + m (J)V method_15199 setSeed + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJ)V method_15198 buildSurface + m (Lnet/minecraft/class_3504;)Lnet/minecraft/class_3523; method_29000 func_237169_a_ + m ()Lnet/minecraft/class_3531; method_15197 getConfig + f Lnet/minecraft/class_3523; field_15610 builder + f Lnet/minecraft/class_3531; field_15611 config + f Lcom/mojang/serialization/Codec; field_25015 field_244393_b_ + f Lcom/mojang/serialization/Codec; field_25878 field_237168_a_ +c net/minecraft/class_5163 net/minecraft/world/gen/surfacebuilders/BasaltDeltasSurfaceBuilder + f Lcom/google/common/collect/ImmutableList; field_23919 field_237167_e_ + f Lnet/minecraft/class_2680; field_23915 field_237163_a_ + f Lnet/minecraft/class_2680; field_23916 field_237164_b_ + f Lcom/google/common/collect/ImmutableList; field_23918 field_237166_d_ + f Lnet/minecraft/class_2680; field_23917 field_237165_c_ +c net/minecraft/class_3507 net/minecraft/world/gen/surfacebuilders/ErodedBadlandsSurfaceBuilder + f Lnet/minecraft/class_2680; field_15628 ORANGE_TERRACOTTA + f Lnet/minecraft/class_2680; field_15630 TERRACOTTA + f Lnet/minecraft/class_2680; field_15629 WHITE_TERRACOTTA +c net/minecraft/class_3510 net/minecraft/world/gen/surfacebuilders/DefaultSurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15219 buildSurface + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;I)V method_15218 buildSurface +c net/minecraft/class_3511 net/minecraft/world/gen/surfacebuilders/GiantTreeTaigaSurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15220 buildSurface +c net/minecraft/class_3512 net/minecraft/world/gen/surfacebuilders/FrozenOceanSurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15221 buildSurface + f Lnet/minecraft/class_2680; field_15639 ICE + f J field_15641 seed + f Lnet/minecraft/class_3543; field_15644 field_205199_h + f Lnet/minecraft/class_2680; field_15638 GRAVEL + f Lnet/minecraft/class_3543; field_15642 field_205200_i + f Lnet/minecraft/class_2680; field_15643 AIR + f Lnet/minecraft/class_2680; field_15640 PACKED_ICE + f Lnet/minecraft/class_2680; field_15645 SNOW_BLOCK +c net/minecraft/class_3514 net/minecraft/world/gen/surfacebuilders/MountainSurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15233 buildSurface +c net/minecraft/class_3516 net/minecraft/world/gen/surfacebuilders/GravellyMountainSurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15245 buildSurface +c net/minecraft/class_4789 net/minecraft/world/gen/surfacebuilders/NetherForestsSurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_24455 buildSurface + f Lnet/minecraft/class_3537; field_22203 field_237179_c_ + f Lnet/minecraft/class_2680; field_22202 field_237178_b_ + f J field_22201 field_237177_a_ +c net/minecraft/class_5164 net/minecraft/world/gen/surfacebuilders/ValleySurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_27132 buildSurface + m ()Lcom/google/common/collect/ImmutableList; method_27129 func_230387_a_ + m ()Lnet/minecraft/class_2680; method_27135 func_230389_c_ + m (IIILjava/util/Map$Entry;)Ljava/lang/Double; method_27130 func_237174_a_ + m ()Lcom/google/common/collect/ImmutableList; method_27133 func_230388_b_ + m (IIILjava/util/Map$Entry;)Ljava/lang/Double; method_27134 func_237176_b_ + m (Lcom/google/common/collect/ImmutableList;J)Lcom/google/common/collect/ImmutableMap; method_27131 func_237175_a_ + f Lcom/google/common/collect/ImmutableMap; field_23922 field_237172_c_ + f Lnet/minecraft/class_3537; field_23923 field_237173_d_ + f J field_23920 field_237170_a_ + f Lcom/google/common/collect/ImmutableMap; field_23921 field_237171_b_ +c net/minecraft/class_3519 net/minecraft/world/gen/surfacebuilders/NoopSurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15299 buildSurface +c net/minecraft/class_3520 net/minecraft/world/gen/surfacebuilders/NetherSurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15300 buildSurface + f Lnet/minecraft/class_2680; field_15660 CAVE_AIR + f Lnet/minecraft/class_2680; field_15659 GRAVEL + f J field_15661 field_205552_a + f Lnet/minecraft/class_3537; field_15663 field_205553_b + f Lnet/minecraft/class_2680; field_15662 SOUL_SAND +c net/minecraft/class_4790 net/minecraft/world/gen/surfacebuilders/SoulSandValleySurfaceBuilder + f Lcom/google/common/collect/ImmutableList; field_23924 field_237183_d_ + f Lnet/minecraft/class_2680; field_22210 field_237181_b_ + f Lnet/minecraft/class_2680; field_22204 field_237182_c_ + f Lnet/minecraft/class_2680; field_22209 field_237180_a_ +c net/minecraft/class_3524 net/minecraft/world/gen/surfacebuilders/ShatteredSavannaSurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15308 buildSurface +c net/minecraft/class_3527 net/minecraft/world/gen/surfacebuilders/SurfaceBuilderConfig + m (Lnet/minecraft/class_3527;)Lnet/minecraft/class_2680; method_29007 func_237207_c_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_29004 func_237204_a_ + m ()Lnet/minecraft/class_2680; method_15330 getUnderWaterMaterial + m (Lnet/minecraft/class_3527;)Lnet/minecraft/class_2680; method_29006 func_237206_b_ + m (Lnet/minecraft/class_3527;)Lnet/minecraft/class_2680; method_29005 func_237205_a_ + f Lnet/minecraft/class_2680; field_15716 underWaterMaterial + f Lnet/minecraft/class_2680; field_15717 underMaterial + f Lcom/mojang/serialization/Codec; field_25017 field_237203_a_ + f Lnet/minecraft/class_2680; field_15715 topMaterial +c net/minecraft/class_3523 net/minecraft/world/gen/surfacebuilders/SurfaceBuilder + m (J)V method_15306 setSeed + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3531;)V method_15305 buildSurface + m (Lnet/minecraft/class_3531;)Lnet/minecraft/class_3504; method_30478 func_242929_a + m (Ljava/lang/String;Lnet/minecraft/class_3523;)Lnet/minecraft/class_3523; method_15307 register + m ()Lcom/mojang/serialization/Codec; method_29003 func_237202_d_ + f Lnet/minecraft/class_3527; field_15671 END_STONE_CONFIG + f Lnet/minecraft/class_3527; field_15690 NETHERRACK_CONFIG + f Lnet/minecraft/class_3523; field_15688 GIANT_TREE_TAIGA + f Lnet/minecraft/class_2680; field_15700 NETHERRACK + f Lnet/minecraft/class_3527; field_22215 field_237186_Q_ + f Lnet/minecraft/class_2680; field_22221 field_237195_v_ + f Lnet/minecraft/class_2680; field_22219 field_237193_t_ + f Lnet/minecraft/class_3527; field_15697 GRASS_DIRT_SAND_CONFIG + f Lnet/minecraft/class_3523; field_15701 DEFAULT + f Lnet/minecraft/class_2680; field_15703 GRASS_BLOCK + f Lnet/minecraft/class_2680; field_15704 RED_SAND + f Lnet/minecraft/class_2680; field_15668 COARSE_DIRT + f Lnet/minecraft/class_3523; field_15683 NOPE + f Lnet/minecraft/class_2680; field_15686 MYCELIUM + f Lcom/mojang/serialization/Codec; field_25016 field_237188_a_ + f Lnet/minecraft/class_3527; field_15672 RED_SAND_WHITE_TERRACOTTA_GRAVEL_CONFIG + f Lnet/minecraft/class_3523; field_15680 SHATTERED_SAVANNA + f Lnet/minecraft/class_2680; field_15679 GRAVEL + f Lnet/minecraft/class_3523; field_22216 field_237189_ad_ + f Lnet/minecraft/class_3527; field_15673 GRAVEL_CONFIG + f Lnet/minecraft/class_3523; field_15699 FROZEN_OCEAN + f Lnet/minecraft/class_3523; field_23926 field_237191_af_ + f Lnet/minecraft/class_3527; field_15670 STONE_STONE_GRAVEL_CONFIG + f Lnet/minecraft/class_2680; field_23927 field_237197_x_ + f Lnet/minecraft/class_3523; field_15681 SWAMP + f Lnet/minecraft/class_2680; field_23929 field_237199_z_ + f Lnet/minecraft/class_3523; field_15689 WOODED_BADLANDS + f Lnet/minecraft/class_3527; field_22213 field_237184_N_ + f Lnet/minecraft/class_2680; field_15667 END_STONE + f Lnet/minecraft/class_3527; field_22214 field_237185_P_ + f Lnet/minecraft/class_2680; field_22220 field_237194_u_ + f Lnet/minecraft/class_3523; field_15692 MOUNTAIN + f Lnet/minecraft/class_2680; field_15696 DIRT + f Lnet/minecraft/class_3527; field_15694 SAND_SAND_GRAVEL_CONFIG + f Lnet/minecraft/class_2680; field_15682 SAND + f Lnet/minecraft/class_3523; field_15702 GRAVELLY_MOUNTAIN + f Lnet/minecraft/class_2680; field_15706 STONE + f Lnet/minecraft/class_3527; field_15705 MYCELIUM_DIRT_GRAVEL_CONFIG + f Lnet/minecraft/class_2680; field_22218 field_237192_q_ + f Lnet/minecraft/class_2680; field_15669 PODZOL + f Lnet/minecraft/class_3527; field_15687 SAND_CONFIG + f Lnet/minecraft/class_2680; field_15675 WHITE_TERRACOTTA + f Lnet/minecraft/class_3523; field_15693 NETHER + f Lnet/minecraft/class_3527; field_15691 PODZOL_DIRT_GRAVEL_CONFIG + f Lnet/minecraft/class_3527; field_15678 CORASE_DIRT_DIRT_GRAVEL_CONFIG + f Lnet/minecraft/class_3527; field_15677 GRASS_DIRT_GRAVEL_CONFIG + f Lnet/minecraft/class_3523; field_22217 field_237190_ae_ + f Lnet/minecraft/class_2680; field_23928 field_237198_y_ + f Lnet/minecraft/class_3527; field_23925 field_237187_R_ + f Lnet/minecraft/class_2680; field_22222 field_237196_w_ + f Lnet/minecraft/class_3523; field_15684 ERODED_BADLANDS + f Lnet/minecraft/class_3523; field_15698 BADLANDS +c net/minecraft/class_3529 net/minecraft/world/gen/surfacebuilders/SwampSurfaceBuilder + m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15333 buildSurface +c net/minecraft/class_3531 net/minecraft/world/gen/surfacebuilders/ISurfaceBuilderConfig + m ()Lnet/minecraft/class_2680; method_15337 getTop + m ()Lnet/minecraft/class_2680; method_15336 getUnder +c net/minecraft/class_3535 net/minecraft/world/gen/surfacebuilders/WoodedBadlandsSurfaceBuilder + f Lnet/minecraft/class_2680; field_15741 WHITE_TERRACOTTA + f Lnet/minecraft/class_2680; field_15740 ORANGE_TERRACOTTA + f Lnet/minecraft/class_2680; field_15742 TERRACOTTA +c net/minecraft/class_5216 net/minecraft/world/gen/MaxMinNoiseMixer + m (Lnet/minecraft/class_2919;ILit/unimi/dsi/fastutil/doubles/DoubleList;)Lnet/minecraft/class_5216; method_30846 func_242930_a + m (DDD)D method_27406 func_237211_a_ + m (I)D method_27407 func_237212_a_ + f D field_24175 field_237208_a_ + f Lnet/minecraft/class_3537; field_24177 field_237210_c_ + f Lnet/minecraft/class_3537; field_24176 field_237209_b_ +c net/minecraft/class_3756 net/minecraft/world/gen/ImprovedNoiseGenerator + m (IIIDDDDDD)D method_16450 func_215459_a + m (I)I method_16449 getPermutValue + m (DDDDD)D method_16447 func_215456_a + m (IDDD)D method_16448 dotGrad + f [B field_16590 permutations + f D field_16588 zCoord + f D field_16589 yCoord + f D field_16591 xCoord +c net/minecraft/class_3543 net/minecraft/world/gen/PerlinNoiseGenerator + m (DDZ)D method_16451 noiseAt + f D field_20662 field_227463_c_ + f [Lnet/minecraft/class_3541; field_15770 noiseLevels + f D field_20661 field_227462_b_ +c net/minecraft/class_3537 net/minecraft/world/gen/OctavesNoiseGenerator + m (D)D method_16452 maintainPrecision + m (DDDDDZ)D method_16453 getValue + m (DDD)D method_15416 func_205563_a + m (Lnet/minecraft/class_2919;ILit/unimi/dsi/fastutil/doubles/DoubleList;)Lnet/minecraft/class_3537; method_30847 func_242932_a + m (Lit/unimi/dsi/fastutil/ints/IntSortedSet;)Lcom/mojang/datafixers/util/Pair; method_30848 func_242933_a + m (I)Lnet/minecraft/class_3756; method_16668 getOctave + f [Lnet/minecraft/class_3756; field_15744 octaves + f D field_20659 field_227460_b_ + f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_26445 field_242931_b + f D field_20660 field_227461_c_ +c net/minecraft/class_3541 net/minecraft/world/gen/SimplexNoiseGenerator + m (I)I method_16456 getPermutValue + m (DDD)D method_22416 func_227464_a_ + m ([IDDD)D method_15431 processGrad + m (IDDDD)D method_16455 getContrib + m (DD)D method_15433 getValue + f [I field_15765 p + f D field_15768 F2 + f D field_15767 G2 + f D field_15763 xo + f D field_15762 yo + f [[I field_15766 GRADS + f D field_15761 zo + f D field_15764 SQRT_3 +c net/minecraft/class_3757 net/minecraft/world/gen/INoiseGenerator + m (DDDD)D method_16454 noiseAt +c net/minecraft/class_3547 net/minecraft/world/lighting/BlockLightStorage +c net/minecraft/class_3547$class_3548 net/minecraft/world/lighting/BlockLightStorage$StorageMap + m ()Lnet/minecraft/class_3547$class_3548; method_15443 copy +c net/minecraft/class_3552 net/minecraft/world/lighting/BlockLightEngine + m (J)I method_15474 getLightValue + f Lnet/minecraft/class_2338$class_2339; field_16511 mutablePos + f [Lnet/minecraft/class_2350; field_15778 DIRECTIONS +c net/minecraft/class_3554 net/minecraft/world/lighting/LevelBasedGraph + m (J)Z method_15494 isRoot + m (JI)V method_15485 setLevel + m (JJI)I method_15486 computeLevel + m (JJI)I method_15488 getEdgeLevel + m (Ljava/util/function/LongPredicate;)V method_24206 func_227465_a_ + m (I)V method_15481 updateMinLevel + m (JIIZ)V method_15493 removeToUpdate + m ()I method_24208 func_227467_c_ + m (Ljava/util/function/LongPredicate;Lit/unimi/dsi/fastutil/longs/LongList;J)V method_24207 func_229982_a_ + m (JJIZ)V method_15484 propagateLevel + m (I)I method_15492 processUpdates + m (JJIZ)V method_15478 scheduleUpdate + m (J)I method_15480 getLevel + m (JJIIIZ)V method_15482 propagateLevel + m (JIZ)V method_15487 notifyNeighbors + m (II)I method_15490 minLevel + m (JII)V method_15479 addToUpdate + m (J)V method_15483 cancelUpdate + m ()Z method_15489 needsUpdate + m (J)V method_15491 scheduleUpdate + f [Lit/unimi/dsi/fastutil/longs/LongLinkedOpenHashSet; field_15785 updatesByLevel + f I field_15781 minLevelToUpdate + f I field_15783 levelCount + f Lit/unimi/dsi/fastutil/longs/Long2ByteMap; field_15784 propagationLevels + f Z field_15782 needsUpdate +c net/minecraft/class_3554$2 net/minecraft/world/lighting/LevelBasedGraph$2 + m (I)V rehash rehash + f Lnet/minecraft/class_3554; field_15786 field_215659_b + f I field_15787 field_215658_a +c net/minecraft/class_3554$1 net/minecraft/world/lighting/LevelBasedGraph$1 + m (I)V rehash rehash + f I field_16728 field_215656_a + f Lnet/minecraft/class_3554; field_16727 field_215657_b +c net/minecraft/class_3556 net/minecraft/world/lighting/LightDataMap + m ()V method_15505 invalidateCaches + m ()Lnet/minecraft/class_3556; method_15504 copy + m (J)V method_15502 copyArray + m ()V method_16188 disableCaching + m (J)Lnet/minecraft/class_2804; method_15500 removeArray + m (J)Lnet/minecraft/class_2804; method_15501 getArray + m (J)Z method_15503 hasArray + m (JLnet/minecraft/class_2804;)V method_15499 setArray + f [Lnet/minecraft/class_2804; field_15790 recentArrays + f Lit/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap; field_15791 arrays + f [J field_15789 recentPositions + f Z field_16447 useCaching +c net/minecraft/class_3558 net/minecraft/world/lighting/LightEngine + m (Lnet/minecraft/class_1923;Z)V method_20599 retainChunkData + m ()V method_17530 invalidateCaches + m (Lnet/minecraft/class_1923;Z)V method_15512 func_215620_a + m (Lnet/minecraft/class_2680;JLnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_20710 getVoxelShape + m ()Z method_15518 func_215619_a + m (J)Ljava/lang/String; method_22875 getDebugString + m (Lnet/minecraft/class_2338;)V method_15513 checkLight + m (Lnet/minecraft/class_2338;I)V method_15514 func_215623_a + m (II)Lnet/minecraft/class_1922; method_17529 getChunkReader + m (Lnet/minecraft/class_2804;J)I method_15517 getLevelFromArray + m (IZZ)I method_15516 tick + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;I)I method_20049 func_215613_a + m (JLorg/apache/commons/lang3/mutable/MutableInt;)Lnet/minecraft/class_2680; method_20479 getBlockAndOpacity + m (JLnet/minecraft/class_2804;Z)V method_15515 setData + f Lnet/minecraft/class_2823; field_15795 chunkProvider + f Lnet/minecraft/class_2338$class_2339; field_19284 scratchPos + f Z field_15794 field_215629_e + f Lnet/minecraft/class_1944; field_15792 type + f [J field_17397 recentPositions + f Lnet/minecraft/class_3560; field_15793 storage + f [Lnet/minecraft/class_2350; field_16513 DIRECTIONS + f [Lnet/minecraft/class_1922; field_17398 recentChunks +c net/minecraft/class_4298 net/minecraft/world/lighting/NibbleArrayRepeater +c net/minecraft/class_3560 net/minecraft/world/lighting/SectionLightStorage + m (J)V method_15534 removeSection + m (Lnet/minecraft/class_3558;ZZ)V method_15527 updateSections + m (Lnet/minecraft/class_3556;J)Lnet/minecraft/class_2804; method_15533 getArray + m (J)V method_15523 addSection + m ()V method_15539 processAllLevelUpdates + m ()V method_15530 updateAndNotify + m (J)Z method_15524 hasSection + m (JZ)Lnet/minecraft/class_2804; method_15522 getArray + m (JJ)Z method_24209 func_227469_a_ + m ()Z method_15528 hasSectionsToUpdate + m (J)I method_15537 getLight + m (JI)V method_15525 setLight + m (Lnet/minecraft/class_3558;J)V method_29967 func_241538_b_ + m (JZ)V method_15526 updateSectionStatus + m (JZ)V method_15535 setColumnEnabled + m (JZ)V method_20600 retainChunkData + m (JLnet/minecraft/class_2804;Z)V method_15532 setData + m (J)I method_15538 getLightOrDefault + m (J)Lnet/minecraft/class_2804; method_15529 getOrCreateArray + m (Lnet/minecraft/class_3558;J)V method_15536 cancelSectionUpdates + m (J)Lnet/minecraft/class_2804; method_20533 getArray + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15808 activeLightSections + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15797 addedEmptySections + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15804 addedActiveLightSections + f Lnet/minecraft/class_2804; field_15801 EMPTY_ARRAY + f Lnet/minecraft/class_3556; field_15806 uncachedLightData + f Z field_15800 hasSectionsToUpdate + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15802 dirtyCachedSections + f Lnet/minecraft/class_2823; field_15803 chunkProvider + f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_15807 newArrays + f [Lnet/minecraft/class_2350; field_15799 DIRECTIONS + f Lnet/minecraft/class_1944; field_15805 type + f Lit/unimi/dsi/fastutil/longs/LongSet; field_25621 field_241536_n_ + f Lit/unimi/dsi/fastutil/longs/LongSet; field_19342 chunksToRetain + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15798 noLightSections + f Lit/unimi/dsi/fastutil/longs/LongSet; field_16448 changedLightPositions + f Lnet/minecraft/class_3556; field_15796 cachedLightData +c net/minecraft/class_3560$1 net/minecraft/world/lighting/SectionLightStorage$1 + f [I field_15809 field_215660_a +c net/minecraft/class_3562 net/minecraft/world/lighting/IWorldLightListener + m (Lnet/minecraft/class_2338;)I method_15543 getLightFor + m (Lnet/minecraft/class_4076;)Lnet/minecraft/class_2804; method_15544 getData +c net/minecraft/class_3562$class_3563 net/minecraft/world/lighting/IWorldLightListener$Dummy + m (Ljava/lang/String;)Lnet/minecraft/class_3562$class_3563; valueOf valueOf + m ()[Lnet/minecraft/class_3562$class_3563; values values + f Lnet/minecraft/class_3562$class_3563; field_15812 INSTANCE + f [Lnet/minecraft/class_3562$class_3563; field_15811 $VALUES +c net/minecraft/class_3565 net/minecraft/world/lighting/ILightListener + m (Lnet/minecraft/class_4076;Z)V method_15551 updateSectionStatus + m (Lnet/minecraft/class_2338;Z)V method_15552 func_215567_a +c net/minecraft/class_3568 net/minecraft/world/lighting/WorldLightManager + m (IZZ)I method_15563 tick + m (Lnet/minecraft/class_1944;)Lnet/minecraft/class_3562; method_15562 getLightEngine + m (Lnet/minecraft/class_2338;I)I method_22363 getLightSubtracted + m (Lnet/minecraft/class_1944;Lnet/minecraft/class_4076;Lnet/minecraft/class_2804;Z)V method_15558 setData + m (Lnet/minecraft/class_1923;Z)V method_20601 retainData + m (Lnet/minecraft/class_2338;)V method_15559 checkBlock + m ()Z method_15561 hasLightWork + m (Lnet/minecraft/class_1923;Z)V method_15557 enableLightSources + m (Lnet/minecraft/class_2338;I)V method_15560 onBlockEmissionIncrease + m (Lnet/minecraft/class_1944;Lnet/minecraft/class_4076;)Ljava/lang/String; method_22876 getDebugInfo + f Lnet/minecraft/class_3558; field_15813 skyLight + f Lnet/minecraft/class_3558; field_15814 blockLight +c net/minecraft/class_3569 net/minecraft/world/lighting/SkyLightStorage + m (I)Z method_15567 isAboveBottom + m ()V method_15569 updateHasPendingUpdates + m (J)Z method_15568 isAboveWorld + m (J)Z method_15566 isSectionEnabled + m (J)V method_20809 scheduleSurfaceUpdate + m (J)V method_20810 scheduleFullUpdate + m (J)Z method_15565 func_215551_l + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15820 sectionsWithLight + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15815 pendingAdditions + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15816 pendingRemovals + f Lit/unimi/dsi/fastutil/longs/LongSet; field_15817 enabledColumns + f [Lnet/minecraft/class_2350; field_15818 field_215554_k + f Z field_15819 hasPendingUpdates +c net/minecraft/class_3569$1 net/minecraft/world/lighting/SkyLightStorage$1 + f [I field_15823 field_215661_a +c net/minecraft/class_3569$class_3570 net/minecraft/world/lighting/SkyLightStorage$StorageMap + m (Lnet/minecraft/class_3569$class_3570;I)I method_15570 func_215649_a + m ()Lnet/minecraft/class_3569$class_3570; method_15572 copy + m (Lnet/minecraft/class_3569$class_3570;)I method_15573 func_215650_b + m (Lnet/minecraft/class_3569$class_3570;)Lit/unimi/dsi/fastutil/longs/Long2IntOpenHashMap; method_15571 func_215651_a + f Lit/unimi/dsi/fastutil/longs/Long2IntOpenHashMap; field_15821 surfaceSections + f I field_15822 minY +c net/minecraft/class_3572 net/minecraft/world/lighting/SkyLightEngine + f [Lnet/minecraft/class_2350; field_15825 CARDINALS + f [Lnet/minecraft/class_2350; field_15826 DIRECTIONS +c net/minecraft/class_3609 net/minecraft/fluid/FlowingFluid + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;)V method_15725 flowAround + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3610; method_15727 calculateCorrectFlowingState + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;Lnet/minecraft/class_3611;)Z method_15738 canFlow + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;Lnet/minecraft/class_2680;)V method_15744 func_207937_a + m ()Z method_15737 canSourcesMultiply + m (Lnet/minecraft/class_3610;)Z method_15748 isSameOrEmpty + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;I)Z method_15731 func_212753_a + m (Z)Lnet/minecraft/class_3610; method_15729 getStillFluidState + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_3610;)V method_15745 flowInto + m (Lnet/minecraft/class_3610;)Z method_15752 isSameAs + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;I)Lcom/mojang/datafixers/util/Pair; method_15734 func_212755_a + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3611;)Z method_15754 isBlocked + m (IZ)Lnet/minecraft/class_3610; method_15728 getFlowingFluidState + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_15730 beforeReplacingBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_15749 causesDownwardCurrent + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)S method_15747 func_212752_a + m (Lnet/minecraft/class_3610;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_17774 isFullHeight + m (Lnet/minecraft/class_4538;)I method_15733 getSlopeFindDistance + m (Lnet/minecraft/class_4538;)I method_15739 getLevelDecreasePerBlock + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;I)Lcom/mojang/datafixers/util/Pair; method_15755 func_212748_b + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Ljava/util/Map; method_15726 func_205572_b + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_3611;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;)Z method_15746 func_211760_a + m (Lnet/minecraft/class_3610;)I method_15741 getLevelFromState + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_15732 doesSideHaveHoles + m ()Lnet/minecraft/class_3611; method_15751 getStillFluid + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;Lnet/minecraft/class_3610;)I method_15753 func_215667_a + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4538;Lnet/minecraft/class_2680;I)Z method_15743 func_212749_a + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)I method_15740 getNumHorizontallyAdjacentSources + m ()Lnet/minecraft/class_3611; method_15750 getFlowingFluid + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_3611;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_15736 func_211759_a + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;)Lnet/minecraft/class_265; method_17773 func_215668_b + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;ILnet/minecraft/class_2350;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lit/unimi/dsi/fastutil/shorts/Short2ObjectMap;Lit/unimi/dsi/fastutil/shorts/Short2BooleanMap;)I method_15742 func_205571_a + m ()Lit/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap; method_15735 func_212750_m + f Ljava/util/Map; field_17587 field_215669_f + f Lnet/minecraft/class_2758; field_15900 LEVEL_1_8 + f Lnet/minecraft/class_2746; field_15902 FALLING + f Ljava/lang/ThreadLocal; field_15901 field_212756_e +c net/minecraft/class_3609$1 net/minecraft/fluid/FlowingFluid$1 + m (I)V rehash rehash +c net/minecraft/class_3576 net/minecraft/fluid/EmptyFluid +c net/minecraft/class_3610 net/minecraft/fluid/FluidState + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_15763 getActualHeight + m ()I method_15761 getLevel + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_243; method_15758 getFlow + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_15756 shouldRenderSides + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_15770 tick + m (Lnet/minecraft/class_3494;)Z method_15767 isTagged + m ()Lnet/minecraft/class_2680; method_15759 getBlockState + m ()F method_20785 getHeight + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3611;Lnet/minecraft/class_2350;)Z method_15764 canDisplace + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_15757 randomTick + m ()Lnet/minecraft/class_2394; method_15766 getDripParticleData + m ()Z method_15773 ticksRandomly + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_15768 animateTick + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_17776 getShape + m ()F method_15760 getExplosionResistance + m ()Z method_15771 isSource + m ()Z method_15769 isEmpty + m ()Lnet/minecraft/class_3611; method_15772 getFluid + f Lcom/mojang/serialization/Codec; field_25018 field_237213_a_ +c net/minecraft/class_3611 net/minecraft/fluid/Fluid + m ()Z method_15794 isEmpty + m (Lnet/minecraft/class_3610;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3611;Lnet/minecraft/class_2350;)Z method_15777 canDisplace + m (Lnet/minecraft/class_3610;)Z method_15793 isSource + m ()Lnet/minecraft/class_3610; method_15785 getDefaultState + m (Lnet/minecraft/class_3610;)V method_15781 setDefaultState + m (Lnet/minecraft/class_2689$class_2690;)V method_15775 fillStateContainer + m (Lnet/minecraft/class_3610;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_15788 getActualHeight + m ()Lnet/minecraft/class_1792; method_15774 getFilledBucket + m ()F method_15784 getExplosionResistance + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;Ljava/util/Random;)V method_15776 animateTick + m (Lnet/minecraft/class_3611;)Z method_15780 isEquivalentTo + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;Ljava/util/Random;)V method_15792 randomTick + m (Lnet/minecraft/class_4538;)I method_15789 getTickRate + m (Lnet/minecraft/class_3494;)Z method_15791 isIn + m ()Lnet/minecraft/class_2689; method_15783 getStateContainer + m ()Z method_15795 ticksRandomly + m (Lnet/minecraft/class_3610;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_17775 func_215664_b + m (Lnet/minecraft/class_3610;)Lnet/minecraft/class_2680; method_15790 getBlockState + m (Lnet/minecraft/class_3610;)F method_20784 getHeight + m (Lnet/minecraft/class_3610;)I method_15779 getLevel + m ()Lnet/minecraft/class_2394; method_15787 getDripParticleData + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;)Lnet/minecraft/class_243; method_15782 getFlow + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;)V method_15778 tick + f Lnet/minecraft/class_2689; field_15905 stateContainer + f Lnet/minecraft/class_2361; field_15904 STATE_REGISTRY + f Lnet/minecraft/class_3610; field_15903 defaultState +c net/minecraft/class_3616 net/minecraft/fluid/LavaFluid + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_15819 isSurroundingBlockFlammable + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_15817 getCanBlockBurn + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_15818 triggerEffects +c net/minecraft/class_3616$class_3617 net/minecraft/fluid/LavaFluid$Flowing +c net/minecraft/class_3616$class_3618 net/minecraft/fluid/LavaFluid$Source +c net/minecraft/class_3612 net/minecraft/fluid/Fluids + m (Ljava/lang/String;Lnet/minecraft/class_3611;)Lnet/minecraft/class_3611; method_15796 register + f Lnet/minecraft/class_3611; field_15906 EMPTY + f Lnet/minecraft/class_3609; field_15908 LAVA + f Lnet/minecraft/class_3609; field_15907 FLOWING_LAVA + f Lnet/minecraft/class_3609; field_15910 WATER + f Lnet/minecraft/class_3609; field_15909 FLOWING_WATER +c net/minecraft/class_3620 net/minecraft/block/material/MaterialColor + m (I)I method_15820 getMapColor + f Lnet/minecraft/class_3620; field_16007 BLACK_TERRACOTTA + f Lnet/minecraft/class_3620; field_16010 YELLOW + f Lnet/minecraft/class_3620; field_15980 LAPIS + f Lnet/minecraft/class_3620; field_15998 MAGENTA + f Lnet/minecraft/class_3620; field_16003 WHITE_TERRACOTTA + f Lnet/minecraft/class_3620; field_16030 PINK + f Lnet/minecraft/class_3620; field_16017 OBSIDIAN + f Lnet/minecraft/class_3620; field_16020 RED + f Lnet/minecraft/class_3620; field_16028 GREEN_TERRACOTTA + f Lnet/minecraft/class_3620; field_16019 WATER + f Lnet/minecraft/class_3620; field_15977 BROWN + f Lnet/minecraft/class_3620; field_15994 GOLD + f Lnet/minecraft/class_3620; field_16025 QUARTZ + f Lnet/minecraft/class_3620; field_15988 LIGHT_GRAY_TERRACOTTA + f Lnet/minecraft/class_3620; field_16004 FOLIAGE + f I field_16021 colorIndex + f Lnet/minecraft/class_3620; field_15989 PINK_TERRACOTTA + f Lnet/minecraft/class_3620; field_15984 BLUE + f Lnet/minecraft/class_3620; field_16029 PURPLE_TERRACOTTA + f Lnet/minecraft/class_3620; field_15976 CLAY + f Lnet/minecraft/class_3620; field_15985 MAGENTA_TERRACOTTA + f Lnet/minecraft/class_3620; field_15999 GRASS + f Lnet/minecraft/class_3620; field_15993 LIGHT_GRAY + f Lnet/minecraft/class_3620; field_25707 WARPED_HYPHAE + f Lnet/minecraft/class_3620; field_16016 ICE + f Lnet/minecraft/class_3620; field_25703 CRIMSON_STEM + f Lnet/minecraft/class_3620; field_25705 WARPED_NYLIUM + f Lnet/minecraft/class_3620; field_16013 YELLOW_TERRACOTTA + f Lnet/minecraft/class_3620; field_15979 WOOL + f Lnet/minecraft/class_3620; field_16014 PURPLE + f [Lnet/minecraft/class_3620; field_16006 COLORS + f Lnet/minecraft/class_3620; field_16001 EMERALD + f Lnet/minecraft/class_3620; field_16024 LIGHT_BLUE + f Lnet/minecraft/class_3620; field_25702 CRIMSON_NYLIUM + f Lnet/minecraft/class_3620; field_15978 GRAY + f Lnet/minecraft/class_3620; field_16012 NETHERRACK + f Lnet/minecraft/class_3620; field_15997 LIME + f Lnet/minecraft/class_3620; field_15996 WOOD + f Lnet/minecraft/class_3620; field_15995 GREEN + f Lnet/minecraft/class_3620; field_15992 BROWN_TERRACOTTA + f Lnet/minecraft/class_3620; field_16023 STONE + f Lnet/minecraft/class_3620; field_15983 DIAMOND + f Lnet/minecraft/class_3620; field_15987 ADOBE + f Lnet/minecraft/class_3620; field_16009 BLACK + f Lnet/minecraft/class_3620; field_15982 RED_TERRACOTTA + f Lnet/minecraft/class_3620; field_16027 GRAY_TERRACOTTA + f Lnet/minecraft/class_3620; field_16005 IRON + f I field_16011 colorValue + f Lnet/minecraft/class_3620; field_16015 BLUE_TERRACOTTA + f Lnet/minecraft/class_3620; field_16000 DIRT + f Lnet/minecraft/class_3620; field_15990 CYAN_TERRACOTTA + f Lnet/minecraft/class_3620; field_16022 SNOW + f Lnet/minecraft/class_3620; field_15991 LIGHT_BLUE_TERRACOTTA + f Lnet/minecraft/class_3620; field_15986 SAND + f Lnet/minecraft/class_3620; field_16026 CYAN + f Lnet/minecraft/class_3620; field_25706 WARPED_STEM + f Lnet/minecraft/class_3620; field_25708 WARPED_WART + f Lnet/minecraft/class_3620; field_15981 ORANGE_TERRACOTTA + f Lnet/minecraft/class_3620; field_16008 AIR + f Lnet/minecraft/class_3620; field_25704 CRIMSON_HYPHAE + f Lnet/minecraft/class_3620; field_16018 LIME_TERRACOTTA + f Lnet/minecraft/class_3620; field_16002 TNT +c net/minecraft/class_3614 net/minecraft/block/material/Material + m ()Lnet/minecraft/class_3619; method_15798 getPushReaction + m ()Z method_15801 blocksMovement + m ()Z method_15800 isReplaceable + m ()Z method_15797 isLiquid + m ()Lnet/minecraft/class_3620; method_15803 getColor + m ()Z method_15804 isOpaque + m ()Z method_15802 isFlammable + m ()Z method_15799 isSolid + f Lnet/minecraft/class_3614; field_15938 BAMBOO_SAPLING + f Lnet/minecraft/class_3614; field_15915 BUBBLE_COLUMN + f Lnet/minecraft/class_3614; field_15924 MISCELLANEOUS + f Z field_15929 isLiquid + f Z field_15950 replaceable + f Lnet/minecraft/class_3614; field_15931 WOOL + f Lnet/minecraft/class_3614; field_15948 SNOW + f Lnet/minecraft/class_3614; field_15956 TALL_PLANTS + f Z field_15940 blocksMovement + f Lnet/minecraft/class_3614; field_15954 GOURD + f Lnet/minecraft/class_3614; field_15935 PLANTS + f Lnet/minecraft/class_3614; field_22223 NETHER_WOOD + f Lnet/minecraft/class_3614; field_15926 SEA_GRASS + f Lnet/minecraft/class_3614; field_15937 CAKE + f Lnet/minecraft/class_3614; field_15917 SPONGE + f Lnet/minecraft/class_3614; field_15934 SNOW_BLOCK + f Lnet/minecraft/class_3614; field_15928 PACKED_ICE + f Lnet/minecraft/class_3614; field_15921 CORAL + f Lnet/minecraft/class_3614; field_15957 CARPET + f Lnet/minecraft/class_3614; field_15932 WOOD + f Lnet/minecraft/class_3614; field_15952 BARRIER + f Lnet/minecraft/class_3614; field_15927 STRUCTURE_VOID + f Lnet/minecraft/class_3614; field_15958 ICE + f Lnet/minecraft/class_3614; field_15918 REDSTONE_LIGHT + f Lnet/minecraft/class_3614; field_15923 LEAVES + f Lnet/minecraft/class_3614; field_15914 ROCK + f Lnet/minecraft/class_3614; field_15941 EARTH + f Lnet/minecraft/class_3614; field_15922 LAVA + f Z field_15911 isSolid + f Lnet/minecraft/class_3614; field_15920 WATER + f Z field_15939 isOpaque + f Lnet/minecraft/class_3614; field_15955 TNT + f Lnet/minecraft/class_3614; field_15943 FIRE + f Lnet/minecraft/class_3614; field_15946 BAMBOO + f Lnet/minecraft/class_3614; field_15930 DRAGON_EGG + f Lnet/minecraft/class_3614; field_15947 OCEAN_PLANT + f Z field_15951 flammable + f Lnet/minecraft/class_3619; field_15960 pushReaction + f Lnet/minecraft/class_3614; field_26708 NETHER_PLANTS + f Lnet/minecraft/class_3614; field_15949 ANVIL + f Lnet/minecraft/class_3614; field_15959 AIR + f Lnet/minecraft/class_3614; field_15916 SAND + f Lnet/minecraft/class_3614; field_15953 IRON + f Lnet/minecraft/class_3614; field_15933 PISTON + f Lnet/minecraft/class_3614; field_15919 PORTAL + f Lnet/minecraft/class_3614; field_17008 SHULKER + f Lnet/minecraft/class_3614; field_15942 GLASS + f Lnet/minecraft/class_3614; field_15913 WEB + f Lnet/minecraft/class_3614; field_15945 ORGANIC + f Lnet/minecraft/class_3620; field_15944 color + f Lnet/minecraft/class_3614; field_15925 CACTUS + f Lnet/minecraft/class_3614; field_15936 CLAY +c net/minecraft/class_3614$class_3615 net/minecraft/block/material/Material$Builder + m ()Lnet/minecraft/class_3614$class_3615; method_15809 pushDestroys + m ()Lnet/minecraft/class_3614$class_3615; method_15816 pushBlocks + m ()Lnet/minecraft/class_3614$class_3615; method_15815 replaceable + m ()Lnet/minecraft/class_3614$class_3615; method_15807 flammable + m ()Lnet/minecraft/class_3614$class_3615; method_15806 notSolid + m (Lnet/minecraft/class_3614$class_3615;)Lnet/minecraft/class_3614$class_3615; method_15808 access$000 + m ()Lnet/minecraft/class_3614; method_15813 build + m ()Lnet/minecraft/class_3614$class_3615; method_15811 doesNotBlockMovement + m ()Lnet/minecraft/class_3614$class_3615; method_15810 liquid + m ()Lnet/minecraft/class_3614$class_3615; method_15812 notOpaque + f Lnet/minecraft/class_3620; field_15961 color + f Z field_15962 isOpaque + f Z field_15963 isSolid + f Lnet/minecraft/class_3619; field_15968 pushReaction + f Z field_15967 canBurn + f Z field_15964 isReplaceable + f Z field_15965 isLiquid + f Z field_15969 blocksMovement +c net/minecraft/class_3619 net/minecraft/block/material/PushReaction + m ()[Lnet/minecraft/class_3619; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3619; valueOf valueOf + f Lnet/minecraft/class_3619; field_15974 NORMAL + f Lnet/minecraft/class_3619; field_15970 PUSH_ONLY + f [Lnet/minecraft/class_3619; field_15973 $VALUES + f Lnet/minecraft/class_3619; field_15975 IGNORE + f Lnet/minecraft/class_3619; field_15972 BLOCK + f Lnet/minecraft/class_3619; field_15971 DESTROY +c net/minecraft/class_3621 net/minecraft/fluid/WaterFluid +c net/minecraft/class_3621$class_3622 net/minecraft/fluid/WaterFluid$Flowing +c net/minecraft/class_3621$class_3623 net/minecraft/fluid/WaterFluid$Source +c net/minecraft/class_3627 net/minecraft/world/gen/area/IAreaFactory + m ()Lnet/minecraft/class_3625; make make +c net/minecraft/class_3625 net/minecraft/world/gen/area/IArea + m (II)I method_15825 getValue +c net/minecraft/class_3626 net/minecraft/world/gen/area/LazyArea + m ()I method_15827 getmaxCacheSize + f Lnet/minecraft/class_4; field_16035 pixelTransformer + f I field_16036 maxCacheSize + f Lit/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap; field_16038 cachedValues +c net/minecraft/class_3630 net/minecraft/world/gen/INoiseRandom + m ()Lnet/minecraft/class_3756; method_15835 getNoiseGenerator + m (I)I method_15834 random +c net/minecraft/class_3628 net/minecraft/world/gen/IExtendedNoiseRandom + m (Lnet/minecraft/class_4;Lnet/minecraft/class_3625;)Lnet/minecraft/class_3625; method_15832 makeArea + m (Lnet/minecraft/class_4;)Lnet/minecraft/class_3625; method_15831 makeArea + m (IIII)I method_16669 pickRandom + m (Lnet/minecraft/class_4;Lnet/minecraft/class_3625;Lnet/minecraft/class_3625;)Lnet/minecraft/class_3625; method_15828 makeArea + m (II)I method_16670 pickRandom + m (JJ)V method_15830 setPosition +c net/minecraft/class_3631 net/minecraft/world/gen/LazyAreaLayerContext + m (JJ)J method_22417 hash + m (Lnet/minecraft/class_4;Lnet/minecraft/class_3626;Lnet/minecraft/class_3626;)Lnet/minecraft/class_3626; method_15836 makeArea + m (Lnet/minecraft/class_4;)Lnet/minecraft/class_3626; method_15837 makeArea + m (Lnet/minecraft/class_4;Lnet/minecraft/class_3626;)Lnet/minecraft/class_3626; method_15838 makeArea + f J field_16729 positionSeed + f Lnet/minecraft/class_3756; field_16732 noise + f Lit/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap; field_16045 cache + f I field_16044 maxCacheSize + f J field_16730 seed +c net/minecraft/class_3632 net/minecraft/world/gen/layer/EdgeLayer +c net/minecraft/class_3632$class_3635 net/minecraft/world/gen/layer/EdgeLayer$Special + m ()[Lnet/minecraft/class_3632$class_3635; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3632$class_3635; valueOf valueOf + f Lnet/minecraft/class_3632$class_3635; field_16051 INSTANCE + f [Lnet/minecraft/class_3632$class_3635; field_16050 $VALUES +c net/minecraft/class_3632$class_3926 net/minecraft/world/gen/layer/EdgeLayer$CoolWarm + m ()[Lnet/minecraft/class_3632$class_3926; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3632$class_3926; valueOf valueOf + f Lnet/minecraft/class_3632$class_3926; field_17399 INSTANCE + f [Lnet/minecraft/class_3632$class_3926; field_17400 $VALUES +c net/minecraft/class_3632$class_3927 net/minecraft/world/gen/layer/EdgeLayer$HeatIce + m (Ljava/lang/String;)Lnet/minecraft/class_3632$class_3927; valueOf valueOf + m ()[Lnet/minecraft/class_3632$class_3927; values values + f Lnet/minecraft/class_3632$class_3927; field_17401 INSTANCE + f [Lnet/minecraft/class_3632$class_3927; field_17402 $VALUES +c net/minecraft/class_3636 net/minecraft/world/gen/layer/DeepOceanLayer + m ()[Lnet/minecraft/class_3636; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3636; valueOf valueOf + f Lnet/minecraft/class_3636; field_16052 INSTANCE + f [Lnet/minecraft/class_3636; field_16053 $VALUES +c net/minecraft/class_3637 net/minecraft/world/gen/layer/AddMushroomIslandLayer + m (Ljava/lang/String;)Lnet/minecraft/class_3637; valueOf valueOf + m ()[Lnet/minecraft/class_3637; values values + f Lnet/minecraft/class_3637; field_16055 INSTANCE + f [Lnet/minecraft/class_3637; field_16056 $VALUES +c net/minecraft/class_3638 net/minecraft/world/gen/layer/AddIslandLayer + m ()[Lnet/minecraft/class_3638; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3638; valueOf valueOf + f Lnet/minecraft/class_3638; field_16058 INSTANCE + f [Lnet/minecraft/class_3638; field_16057 $VALUES +c net/minecraft/class_3641 net/minecraft/world/gen/layer/EdgeBiomeLayer + m ([II)Z method_15841 func_242935_a + m ([IIIIIIII)Z method_15840 replaceBiomeEdge + m (Ljava/lang/String;)Lnet/minecraft/class_3641; valueOf valueOf + m ()[Lnet/minecraft/class_3641; values values + f Lnet/minecraft/class_3641; field_16091 INSTANCE + f [Lnet/minecraft/class_3641; field_16093 $VALUES +c net/minecraft/class_3639 net/minecraft/world/gen/layer/AddSnowLayer + m ()[Lnet/minecraft/class_3639; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3639; valueOf valueOf + f Lnet/minecraft/class_3639; field_16059 INSTANCE + f [Lnet/minecraft/class_3639; field_16060 $VALUES +c net/minecraft/class_3643 net/minecraft/world/gen/layer/IslandLayer + m (Ljava/lang/String;)Lnet/minecraft/class_3643; valueOf valueOf + m ()[Lnet/minecraft/class_3643; values values + f Lnet/minecraft/class_3643; field_16103 INSTANCE + f [Lnet/minecraft/class_3643; field_16104 $VALUES +c net/minecraft/class_3640 net/minecraft/world/gen/layer/BiomeLayer + f [I field_16082 field_202743_q + f [I field_16070 warmBiomes + f [I field_16064 field_202744_r + f [I field_16068 field_202746_t + f [I field_16062 field_202745_s + f [I field_16066 field_202747_u +c net/minecraft/class_3642 net/minecraft/world/gen/layer/Layer + m (Lnet/minecraft/class_2378;II)Lnet/minecraft/class_1959; method_16341 func_242936_a + f Lorg/apache/logging/log4j/Logger; field_16592 LOGGER + f Lnet/minecraft/class_3626; field_16516 field_215742_b +c net/minecraft/class_3644 net/minecraft/world/gen/layer/OceanLayer + m (Ljava/lang/String;)Lnet/minecraft/class_3644; valueOf valueOf + m ()[Lnet/minecraft/class_3644; values values + f Lnet/minecraft/class_3644; field_16105 INSTANCE + f [Lnet/minecraft/class_3644; field_16106 $VALUES +c net/minecraft/class_3645 net/minecraft/world/gen/layer/LayerUtil + m (JLnet/minecraft/class_3660;Lnet/minecraft/class_3627;ILjava/util/function/LongFunction;)Lnet/minecraft/class_3627; method_15848 repeat + m (JJ)Lnet/minecraft/class_3631; method_15849 func_227473_a_ + m (JZII)Lnet/minecraft/class_3642; method_15843 func_237215_a_ + m (I)Z method_15846 isShallowOcean + m (I)Z method_15845 isOcean + m (ZIILjava/util/function/LongFunction;)Lnet/minecraft/class_3627; method_15847 func_237216_a_ + m (II)Z method_15844 areBiomesSimilar + m (Lit/unimi/dsi/fastutil/ints/Int2IntOpenHashMap;Lnet/minecraft/class_3645$class_5503;I)V method_31117 func_242939_a + m (Lit/unimi/dsi/fastutil/ints/Int2IntOpenHashMap;)V method_31116 func_242938_a + f Lit/unimi/dsi/fastutil/ints/Int2IntMap; field_26709 field_242937_a +c net/minecraft/class_3645$class_5503 net/minecraft/world/gen/layer/LayerUtil$Type + m (Ljava/lang/String;)Lnet/minecraft/class_3645$class_5503; valueOf valueOf + m ()[Lnet/minecraft/class_3645$class_5503; values values + f Lnet/minecraft/class_3645$class_5503; field_26710 NONE + f Lnet/minecraft/class_3645$class_5503; field_26721 OCEAN + f Lnet/minecraft/class_3645$class_5503; field_26719 BEACH + f Lnet/minecraft/class_3645$class_5503; field_26720 FOREST + f Lnet/minecraft/class_3645$class_5503; field_26718 ICY + f Lnet/minecraft/class_3645$class_5503; field_26717 SAVANNA + f Lnet/minecraft/class_3645$class_5503; field_26715 BADLANDS_PLATEAU + f Lnet/minecraft/class_3645$class_5503; field_26716 PLAINS + f [Lnet/minecraft/class_3645$class_5503; field_26726 $VALUES + f Lnet/minecraft/class_3645$class_5503; field_26714 MESA + f Lnet/minecraft/class_3645$class_5503; field_26725 MUSHROOM + f Lnet/minecraft/class_3645$class_5503; field_26723 RIVER + f Lnet/minecraft/class_3645$class_5503; field_26713 JUNGLE + f Lnet/minecraft/class_3645$class_5503; field_26724 SWAMP + f Lnet/minecraft/class_3645$class_5503; field_26711 TAIGA + f Lnet/minecraft/class_3645$class_5503; field_26722 DESERT + f Lnet/minecraft/class_3645$class_5503; field_26712 EXTREME_HILLS +c net/minecraft/class_3646 net/minecraft/world/gen/layer/AddBambooForestLayer + m (Ljava/lang/String;)Lnet/minecraft/class_3646; valueOf valueOf + m ()[Lnet/minecraft/class_3646; values values + f Lnet/minecraft/class_3646; field_16120 INSTANCE + f [Lnet/minecraft/class_3646; field_16117 $VALUES +c net/minecraft/class_3647 net/minecraft/world/gen/layer/MixOceansLayer + m ()[Lnet/minecraft/class_3647; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3647; valueOf valueOf + f Lnet/minecraft/class_3647; field_16121 INSTANCE + f [Lnet/minecraft/class_3647; field_16122 $VALUES +c net/minecraft/class_3648 net/minecraft/world/gen/layer/HillsLayer + m (Ljava/lang/String;)Lnet/minecraft/class_3648; valueOf valueOf + m ()[Lnet/minecraft/class_3648; values values + m (Lit/unimi/dsi/fastutil/ints/Int2IntOpenHashMap;)V method_31118 func_242941_a + f Lit/unimi/dsi/fastutil/ints/Int2IntMap; field_26727 field_242940_c + f Lorg/apache/logging/log4j/Logger; field_16128 LOGGER + f Lnet/minecraft/class_3648; field_16134 INSTANCE + f [Lnet/minecraft/class_3648; field_16141 $VALUES +c net/minecraft/class_3649 net/minecraft/world/gen/layer/RareBiomeLayer + m ()[Lnet/minecraft/class_3649; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3649; valueOf valueOf + f [Lnet/minecraft/class_3649; field_16152 $VALUES + f Lnet/minecraft/class_3649; field_16155 INSTANCE +c net/minecraft/class_3651 net/minecraft/world/gen/layer/RemoveTooMuchOceanLayer + m (Ljava/lang/String;)Lnet/minecraft/class_3651; valueOf valueOf + m ()[Lnet/minecraft/class_3651; values values + f [Lnet/minecraft/class_3651; field_16159 $VALUES + f Lnet/minecraft/class_3651; field_16158 INSTANCE +c net/minecraft/class_3653 net/minecraft/world/gen/layer/RiverLayer + m (Ljava/lang/String;)Lnet/minecraft/class_3653; valueOf valueOf + m (I)I method_15850 riverFilter + m ()[Lnet/minecraft/class_3653; values values + f [Lnet/minecraft/class_3653; field_16169 $VALUES + f Lnet/minecraft/class_3653; field_16168 INSTANCE +c net/minecraft/class_3650 net/minecraft/world/gen/layer/StartRiverLayer + m ()[Lnet/minecraft/class_3650; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3650; valueOf valueOf + f [Lnet/minecraft/class_3650; field_16156 $VALUES + f Lnet/minecraft/class_3650; field_16157 INSTANCE +c net/minecraft/class_3655 net/minecraft/world/gen/layer/ShoreLayer + m (Ljava/lang/String;)Lnet/minecraft/class_3655; valueOf valueOf + m (I)Z method_15851 isJungleCompatible + m (I)Z method_15852 isMesa + m ()[Lnet/minecraft/class_3655; values values + f Lnet/minecraft/class_3655; field_16184 INSTANCE + f [Lnet/minecraft/class_3655; field_16179 $VALUES + f Lit/unimi/dsi/fastutil/ints/IntSet; field_26729 field_242943_c + f Lit/unimi/dsi/fastutil/ints/IntSet; field_26728 field_242942_b +c net/minecraft/class_3652 net/minecraft/world/gen/layer/MixRiverLayer + m ()[Lnet/minecraft/class_3652; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3652; valueOf valueOf + f [Lnet/minecraft/class_3652; field_16166 $VALUES + f Lnet/minecraft/class_3652; field_16161 INSTANCE +c net/minecraft/class_3656 net/minecraft/world/gen/layer/ZoomLayer + m (Ljava/lang/String;)Lnet/minecraft/class_3656; valueOf valueOf + m (Lnet/minecraft/class_3628;IIII)I method_15853 pickZoomed + m ()[Lnet/minecraft/class_3656; values values + f Lnet/minecraft/class_3656; field_16196 NORMAL + f Lnet/minecraft/class_3656; field_16198 FUZZY + f [Lnet/minecraft/class_3656; field_16197 $VALUES +c net/minecraft/class_3656$1 net/minecraft/world/gen/layer/ZoomLayer$1 +c net/minecraft/class_3654 net/minecraft/world/gen/layer/SmoothLayer + m ()[Lnet/minecraft/class_3654; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3654; valueOf valueOf + f [Lnet/minecraft/class_3654; field_16170 $VALUES + f Lnet/minecraft/class_3654; field_16171 INSTANCE +c net/minecraft/class_3658 net/minecraft/world/gen/layer/traits/IAreaTransformer0 + m (Lnet/minecraft/class_3628;)Lnet/minecraft/class_3625; method_15856 func_215734_b + m (Lnet/minecraft/class_3628;)Lnet/minecraft/class_3627; method_15854 apply + m (Lnet/minecraft/class_3630;II)I method_15855 apply + m (Lnet/minecraft/class_3628;II)I method_15857 func_202820_a +c net/minecraft/class_3659 net/minecraft/world/gen/layer/traits/IAreaTransformer2 + m (Lnet/minecraft/class_3628;Lnet/minecraft/class_3625;Lnet/minecraft/class_3625;II)I method_15858 func_215724_a + m (Lnet/minecraft/class_3630;Lnet/minecraft/class_3625;Lnet/minecraft/class_3625;II)I method_15861 apply + m (Lnet/minecraft/class_3628;Lnet/minecraft/class_3627;Lnet/minecraft/class_3627;)Lnet/minecraft/class_3627; method_15860 apply + m (Lnet/minecraft/class_3627;Lnet/minecraft/class_3627;Lnet/minecraft/class_3628;)Lnet/minecraft/class_3625; method_15859 func_215725_a +c net/minecraft/class_3660 net/minecraft/world/gen/layer/traits/IAreaTransformer1 + m (Lnet/minecraft/class_3628;Lnet/minecraft/class_3625;II)I method_15864 func_202711_b + m (Lnet/minecraft/class_3628;Lnet/minecraft/class_3627;)Lnet/minecraft/class_3627; method_15862 apply + m (Lnet/minecraft/class_3627;Lnet/minecraft/class_3628;)Lnet/minecraft/class_3625; method_15865 func_215726_a + m (Lnet/minecraft/class_3628;Lnet/minecraft/class_3625;II)I method_15863 apply +c net/minecraft/class_3661 net/minecraft/world/gen/layer/traits/IC0Transformer + m (Lnet/minecraft/class_3630;I)I method_15866 apply +c net/minecraft/class_3662 net/minecraft/world/gen/layer/traits/IBishopTransformer + m (Lnet/minecraft/class_3630;IIIII)I method_15867 apply +c net/minecraft/class_3663 net/minecraft/world/gen/layer/traits/ICastleTransformer + m (Lnet/minecraft/class_3630;IIIII)I method_15868 apply +c net/minecraft/class_3664 net/minecraft/world/gen/layer/traits/IC1Transformer + m (Lnet/minecraft/class_3630;I)I method_15869 apply +c net/minecraft/class_3739 net/minecraft/world/gen/layer/traits/IDimOffset1Transformer +c net/minecraft/class_3740 net/minecraft/world/gen/layer/traits/IDimOffset0Transformer +c net/minecraft/class_4 net/minecraft/world/gen/layer/traits/IPixelTransformer + m (II)I apply apply +c net/minecraft/class_3741 net/minecraft/world/gen/layer/traits/IDimTransformer + m (I)I method_16343 getOffsetZ + m (I)I method_16342 getOffsetX +c net/minecraft/class_7 net/minecraft/pathfinding/PathNodeType + m ()F method_11 getPriority + m (Ljava/lang/String;)Lnet/minecraft/class_7; valueOf valueOf + m ()[Lnet/minecraft/class_7; values values + f Lnet/minecraft/class_7; field_9 DANGER_FIRE + f Lnet/minecraft/class_7; field_21 RAIL + f Lnet/minecraft/class_7; field_25418 UNPASSABLE_RAIL + f Lnet/minecraft/class_7; field_4 WATER_BORDER + f Lnet/minecraft/class_7; field_18 WATER + f Lnet/minecraft/class_7; field_10 FENCE + f Lnet/minecraft/class_7; field_14 LAVA + f Lnet/minecraft/class_7; field_19 TRAPDOOR + f F field_13 priority + f Lnet/minecraft/class_7; field_26446 WALKABLE_DOOR + f Lnet/minecraft/class_7; field_7 OPEN + f Lnet/minecraft/class_7; field_21516 COCOA + f Lnet/minecraft/class_7; field_12 WALKABLE + f Lnet/minecraft/class_7; field_6 LEAVES + f Lnet/minecraft/class_7; field_22 BLOCKED + f Lnet/minecraft/class_7; field_21326 STICKY_HONEY + f Lnet/minecraft/class_7; field_16 BREACH + f [Lnet/minecraft/class_7; field_24 $VALUES + f Lnet/minecraft/class_7; field_8 DOOR_IRON_CLOSED + f Lnet/minecraft/class_7; field_15 DOOR_OPEN + f Lnet/minecraft/class_7; field_23 DOOR_WOOD_CLOSED + f Lnet/minecraft/class_7; field_17 DAMAGE_OTHER + f Lnet/minecraft/class_7; field_5 DANGER_OTHER + f Lnet/minecraft/class_7; field_20 DANGER_CACTUS + f Lnet/minecraft/class_7; field_11 DAMAGE_CACTUS + f Lnet/minecraft/class_7; field_3 DAMAGE_FIRE +c net/minecraft/class_5 net/minecraft/pathfinding/PathHeap + m (I)V method_7 sortForward + m ()Lnet/minecraft/class_9; method_6 dequeue + m (Lnet/minecraft/class_9;)Lnet/minecraft/class_9; method_2 addPoint + m (I)V method_4 sortBack + m (Lnet/minecraft/class_9;F)V method_3 changeDistance + m ()Z method_8 isPathEmpty + m ()V method_5 clearPath + f I field_2 count + f [Lnet/minecraft/class_9; field_1 pathPoints +c net/minecraft/class_9 net/minecraft/pathfinding/PathPoint + m (Lnet/minecraft/class_2338;)F method_21654 func_224758_c + m ()Z method_27 isAssigned + m (Lnet/minecraft/class_9;)F method_32 distanceToSquared + m (Lnet/minecraft/class_9;)F method_21653 func_224757_c + m (III)Lnet/minecraft/class_9; method_26 cloneMove + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_9; method_28 createFromBuffer + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_9;)F method_31 distanceTo + m ()Lnet/minecraft/class_2338; method_22879 func_224759_a + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m (III)I method_30 makeHash + f Z field_42 visited + f F field_36 totalPathDistance + f I field_37 index + f I field_38 z + f I field_44 hash + f I field_39 y + f I field_40 x + f Lnet/minecraft/class_7; field_41 nodeType + f F field_43 costMalus + f F field_46 field_222861_j + f F field_47 distanceToTarget + f Lnet/minecraft/class_9; field_35 previous + f F field_34 distanceToNext +c net/minecraft/class_6 net/minecraft/pathfinding/FlyingNodeProcessor + m (Lnet/minecraft/class_9;)Z method_22877 func_227476_a_ + m (Lnet/minecraft/class_9;)Z method_22878 func_227477_b_ + m (Lnet/minecraft/class_1308;III)Lnet/minecraft/class_7; method_9 getPathNodeType + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2338;)Lnet/minecraft/class_7; method_10 getPathNodeType +c net/minecraft/class_8 net/minecraft/pathfinding/NodeProcessor + m (Z)V method_15 setCanEnterDoors + m (DDD)Lnet/minecraft/class_4459; method_16 func_224768_a + m ([Lnet/minecraft/class_9;Lnet/minecraft/class_9;)I method_18 func_222859_a + m (IIII)Lnet/minecraft/class_9; method_18482 func_215743_a + m ()V method_19 postProcess + m (Lnet/minecraft/class_1922;IIILnet/minecraft/class_1308;IIIZZ)Lnet/minecraft/class_7; method_17 getPathNodeType + m (Lnet/minecraft/class_1950;Lnet/minecraft/class_1308;)V method_12 func_225578_a_ + m (Lnet/minecraft/class_1922;III)Lnet/minecraft/class_7; method_25 getPathNodeType + m (III)Lnet/minecraft/class_9; method_13 openPoint + m ()Z method_22 getCanSwim + m ()Lnet/minecraft/class_9; method_21 getStart + m (Z)V method_14 setCanSwim + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_9; method_27137 func_237223_a_ + m ()Z method_24 getCanOpenDoors + m ()Z method_23 getCanEnterDoors + m (Z)V method_20 setCanOpenDoors + f I field_28 entitySizeZ + f I field_30 entitySizeY + f Z field_25 canSwim + f I field_31 entitySizeX + f Lnet/minecraft/class_1308; field_33 entity + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_32 pointMap + f Z field_27 canOpenDoors + f Lnet/minecraft/class_1950; field_20622 blockaccess + f Z field_29 canEnterDoors +c net/minecraft/class_10 net/minecraft/pathfinding/PathType + m (Ljava/lang/String;)Lnet/minecraft/class_10; valueOf valueOf + m ()[Lnet/minecraft/class_10; values values + f Lnet/minecraft/class_10; field_50 LAND + f Lnet/minecraft/class_10; field_48 WATER + f [Lnet/minecraft/class_10; field_49 $VALUES + f Lnet/minecraft/class_10; field_51 AIR +c net/minecraft/class_11 net/minecraft/pathfinding/Path + m ()Lnet/minecraft/class_2338; method_31032 func_242948_g + m (Lnet/minecraft/class_11;)Z method_41 isSamePath + m (I)Lnet/minecraft/class_9; method_40 getPathPointFromIndex + m ()Lnet/minecraft/class_2338; method_48 getTarget + m ()Z method_21655 reachesTarget + m ()[Lnet/minecraft/class_9; method_22881 getClosedSet + m ()F method_21656 func_224769_l + m ()[Lnet/minecraft/class_9; method_22880 getOpenSet + m (Lnet/minecraft/class_1297;I)Lnet/minecraft/class_243; method_47 getVectorFromIndex + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_243; method_49 getPosition + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_11; method_34 read + m ()Z method_46 isFinished + m ()Lnet/minecraft/class_9; method_30850 func_242950_i + m ()Z method_30849 func_242945_b + m ()I method_39 getCurrentPathIndex + m ()Lnet/minecraft/class_9; method_29301 func_237225_h_ + m (I)Lnet/minecraft/class_2338; method_31031 func_242947_d + m ()V method_44 incrementPathIndex + m ()Ljava/lang/String; toString toString + m ()I method_38 getCurrentPathLength + m (I)V method_42 setCurrentPathIndex + m (ILnet/minecraft/class_9;)V method_33 setPoint + m (I)V method_36 setCurrentPathLength + m ()Lnet/minecraft/class_9; method_45 getFinalPathPoint + f I field_54 currentPathIndex + f Ljava/util/Set; field_20300 field_224772_d + f Ljava/util/List; field_52 points + f Z field_20303 field_224774_h + f [Lnet/minecraft/class_9; field_57 openSet + f [Lnet/minecraft/class_9; field_55 closedSet + f Lnet/minecraft/class_2338; field_20301 target + f F field_20302 field_224773_g +c net/minecraft/class_12 net/minecraft/pathfinding/SwimNodeProcessor + m (III)Lnet/minecraft/class_7; method_50 isFree + m (III)Lnet/minecraft/class_9; method_51 getWaterNode + f Z field_58 field_205202_j +c net/minecraft/class_13 net/minecraft/pathfinding/PathFinder + m (Lnet/minecraft/class_9;Ljava/util/Set;)F method_21658 func_224776_a + m (Ljava/util/Map;Lnet/minecraft/class_4459;)Lnet/minecraft/class_11; method_21661 func_224778_b_ + m (Lnet/minecraft/class_1950;Lnet/minecraft/class_1308;Ljava/util/Set;FIF)Lnet/minecraft/class_11; method_52 func_227478_a_ + m (Lnet/minecraft/class_9;Ljava/util/Map;FIF)Lnet/minecraft/class_11; method_54 func_227479_a_ + m (Ljava/util/Map;Lnet/minecraft/class_4459;)Lnet/minecraft/class_11; method_21660 func_224777_b + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_4459; method_21659 func_224782_a + m (Lnet/minecraft/class_9;Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_11; method_55 func_224780_a + f Lnet/minecraft/class_5; field_62 path + f I field_18708 field_215751_d + f [Lnet/minecraft/class_9; field_60 pathOptions + f Lnet/minecraft/class_8; field_61 nodeProcessor +c net/minecraft/class_15 net/minecraft/pathfinding/WalkAndSwimNodeProcessor + m (Lnet/minecraft/class_2338;)D method_66 func_203246_a + m (IIIID)Lnet/minecraft/class_9; method_65 func_203245_a + f F field_64 field_203248_l + f F field_65 field_203247_k +c net/minecraft/class_4459 net/minecraft/pathfinding/FlaggedPathPoint + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_4459; method_21663 func_224760_c + m ()V method_21665 func_224764_e + m ()Lnet/minecraft/class_9; method_21664 func_224763_d + m (FLnet/minecraft/class_9;)V method_21662 func_224761_a + f F field_20304 field_224765_m + f Lnet/minecraft/class_9; field_20305 field_224766_n + f Z field_20306 field_224767_o +c net/minecraft/class_14 net/minecraft/pathfinding/WalkNodeProcessor + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)D method_60 getGroundY + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338$class_2339;)Lnet/minecraft/class_7; method_23476 func_237231_a_ + m (Lnet/minecraft/class_2338;)Z method_27139 func_237239_b_ + m (Lnet/minecraft/class_9;Lnet/minecraft/class_9;Lnet/minecraft/class_9;Lnet/minecraft/class_9;)Z method_29579 func_222860_a + m (Lnet/minecraft/class_9;)Z method_29578 func_237234_a_ + m (IIIIDLnet/minecraft/class_2350;Lnet/minecraft/class_7;)Lnet/minecraft/class_9; method_62 getSafePoint + m (Lnet/minecraft/class_238;Lnet/minecraft/class_238;)Ljava/lang/Boolean; method_29305 func_237237_a_ + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2338;)Lnet/minecraft/class_7; method_63 getPathNodeType + m (Lnet/minecraft/class_2680;)Z method_27138 func_237233_a_ + m (Lnet/minecraft/class_238;)Z method_29304 func_237236_a_ + m (Lnet/minecraft/class_9;Lnet/minecraft/class_9;)Z method_20536 func_237235_a_ + m (Lnet/minecraft/class_1922;ZZLnet/minecraft/class_2338;Lnet/minecraft/class_7;)Lnet/minecraft/class_7; method_61 func_215744_a + m (Lnet/minecraft/class_1308;III)Lnet/minecraft/class_7; method_29303 func_237230_a_ + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_7; method_58 func_237238_b_ + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_7;)Lnet/minecraft/class_7; method_59 func_237232_a_ + m (Lnet/minecraft/class_1922;IIIIIIZZLjava/util/EnumSet;Lnet/minecraft/class_7;Lnet/minecraft/class_2338;)Lnet/minecraft/class_7; method_64 getPathNodeType + m (IIILnet/minecraft/class_1308;J)Lnet/minecraft/class_7; method_29302 func_237229_a_ + f Lit/unimi/dsi/fastutil/objects/Object2BooleanMap; field_25191 field_237227_l_ + f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_25190 field_237226_k_ + f F field_63 avoidsWater +c net/minecraft/class_5454 net/minecraft/block/PortalInfo + f Lnet/minecraft/class_243; field_25880 motion + f F field_25882 rotationPitch + f F field_25881 rotationYaw + f Lnet/minecraft/class_243; field_25879 pos +c net/minecraft/class_1946 net/minecraft/world/Teleporter + m (Lnet/minecraft/class_4156;)I method_22388 func_242959_c + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4156;)D method_22390 func_242954_a + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_30480 func_242953_a + m (Lnet/minecraft/class_2338;Z)Ljava/util/Optional; method_30483 getExistingPortal + m (Lnet/minecraft/class_4158;)Z method_22389 func_242952_a + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350$class_2351;)Ljava/util/Optional; method_30482 makePortal + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2350;I)Z method_30481 checkRegionForPlacement + m (Lnet/minecraft/class_4156;)Lnet/minecraft/class_5459$class_5460; method_30479 func_242951_a + m (Lnet/minecraft/class_4156;)Z method_31119 func_242958_b + f Lnet/minecraft/class_3218; field_9286 world +c net/minecraft/class_2424 net/minecraft/block/PortalSize + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_30493 func_242972_a + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350$class_2351;)Ljava/util/Optional; method_30485 func_242964_a + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_30492 func_242971_a + m (Lnet/minecraft/class_2338$class_2339;I)Z method_30491 func_242970_a + m (Lnet/minecraft/class_2680;)Z method_10359 canConnect + m ()Z method_10362 validatePortal + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)V method_30488 func_242967_a + m (Lnet/minecraft/class_2338$class_2339;)I method_30490 func_242969_a + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_30487 func_242966_a + m ()Z method_10360 isValid + m ()V method_10363 placePortalBlocks + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/function/Predicate;Lnet/minecraft/class_2350$class_2351;)Ljava/util/Optional; method_30486 func_242965_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5459$class_5460;Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_243;Lnet/minecraft/class_4048;Lnet/minecraft/class_243;FF)Lnet/minecraft/class_5454; method_30484 func_242963_a + m ()I method_30496 func_242975_e + m (Lnet/minecraft/class_2424;)Z method_30489 func_242968_a + m ()I method_30495 func_242974_d + m (Lnet/minecraft/class_5459$class_5460;Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_243;Lnet/minecraft/class_4048;)Lnet/minecraft/class_243; method_30494 func_242973_a + f I field_11312 height + f Lnet/minecraft/class_2350; field_11314 rightDir + f I field_11313 portalBlockCount + f Lnet/minecraft/class_2350$class_2351; field_11317 axis + f Lnet/minecraft/class_4970$class_4973; field_25883 POSITION_PREDICATE + f Lnet/minecraft/class_2338; field_11316 bottomLeft + f Lnet/minecraft/class_1936; field_11318 world + f I field_11311 width +c net/minecraft/class_18 net/minecraft/world/storage/WorldSavedData + m ()Z method_79 isDirty + m (Ljava/io/File;)V method_17919 save + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_75 write + m ()V method_80 markDirty + m ()Ljava/lang/String; method_76 getName + m (Z)V method_78 setDirty + m (Lnet/minecraft/class_2487;)V method_77 read + f Ljava/lang/String; field_71 name + f Lorg/apache/logging/log4j/Logger; field_17661 LOGGER + f Z field_72 dirty +c net/minecraft/class_16 net/minecraft/world/storage/WorldSavedDataCallableSave + m ()V run run + f Lnet/minecraft/class_18; field_66 data +c net/minecraft/class_20 net/minecraft/world/storage/MapDecoration + m ()Lnet/minecraft/class_20$class_21; method_93 getType + m ()Lnet/minecraft/class_2561; method_88 getCustomName + m ()B method_92 getImage + m ()I hashCode hashCode + m ()B method_90 getX + m ()Z method_94 renderOnFrame + m (Ljava/lang/Object;)Z equals equals + m ()B method_91 getY + m ()B method_89 getRotation + f B field_76 x + f Lnet/minecraft/class_20$class_21; field_77 type + f B field_80 y + f B field_79 rotation + f Lnet/minecraft/class_2561; field_78 customName +c net/minecraft/class_20$class_21 net/minecraft/world/storage/MapDecoration$Type + m ()I method_96 getMapColor + m (Ljava/lang/String;)Lnet/minecraft/class_20$class_21; valueOf valueOf + m ()Z method_95 isRenderedOnFrame + m ()Z method_97 hasMapColor + m (B)Lnet/minecraft/class_20$class_21; method_99 byIcon + m ()[Lnet/minecraft/class_20$class_21; values values + m ()B method_98 getIcon + f Lnet/minecraft/class_20$class_21; field_84 TARGET_X + f Lnet/minecraft/class_20$class_21; field_103 BANNER_BLACK + f Lnet/minecraft/class_20$class_21; field_86 PLAYER_OFF_MAP + f Lnet/minecraft/class_20$class_21; field_85 TARGET_POINT + f B field_81 icon + f Lnet/minecraft/class_20$class_21; field_87 PLAYER_OFF_LIMITS + f Lnet/minecraft/class_20$class_21; field_88 MANSION + f Lnet/minecraft/class_20$class_21; field_96 BANNER_WHITE + f I field_82 mapColor + f Lnet/minecraft/class_20$class_21; field_98 MONUMENT + f Lnet/minecraft/class_20$class_21; field_92 BANNER_ORANGE + f Lnet/minecraft/class_20$class_21; field_110 RED_X + f Lnet/minecraft/class_20$class_21; field_97 BANNER_MAGENTA + f Lnet/minecraft/class_20$class_21; field_93 BANNER_YELLOW + f Lnet/minecraft/class_20$class_21; field_90 BANNER_LIGHT_BLUE + f Lnet/minecraft/class_20$class_21; field_94 BANNER_LIME + f Z field_111 renderedOnFrame + f Lnet/minecraft/class_20$class_21; field_100 BANNER_PINK + f Lnet/minecraft/class_20$class_21; field_107 BANNER_LIGHT_GRAY + f [Lnet/minecraft/class_20$class_21; field_109 $VALUES + f Lnet/minecraft/class_20$class_21; field_101 BANNER_GRAY + f Lnet/minecraft/class_20$class_21; field_108 BANNER_CYAN + f Lnet/minecraft/class_20$class_21; field_104 BANNER_PURPLE + f Lnet/minecraft/class_20$class_21; field_106 BANNER_BROWN + f Lnet/minecraft/class_20$class_21; field_91 PLAYER + f Lnet/minecraft/class_20$class_21; field_105 BANNER_BLUE + f Lnet/minecraft/class_20$class_21; field_89 RED_MARKER + f Lnet/minecraft/class_20$class_21; field_102 BANNER_GREEN + f Lnet/minecraft/class_20$class_21; field_95 FRAME + f Lnet/minecraft/class_20$class_21; field_83 BLUE_MARKER + f Lnet/minecraft/class_20$class_21; field_99 BANNER_RED +c net/minecraft/class_17 net/minecraft/world/storage/MapBanner + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_69 func_211446_b + m ()Lnet/minecraft/class_20$class_21; method_72 getDecorationType + m ()Ljava/lang/String; method_71 getMapDecorationId + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_17; method_73 fromWorld + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_17; method_67 read + m ()Lnet/minecraft/class_2338; method_70 getPos + m ()I hashCode hashCode + m ()Lnet/minecraft/class_2487; method_74 write + m (Ljava/lang/Object;)Z equals equals + m ()Lnet/minecraft/class_2561; method_68 getName + f Lnet/minecraft/class_1767; field_68 color + f Lnet/minecraft/class_2561; field_67 name + f Lnet/minecraft/class_2338; field_69 pos +c net/minecraft/class_17$1 net/minecraft/world/storage/MapBanner$1 + f [I field_70 field_204298_a +c net/minecraft/class_3978 net/minecraft/world/storage/MapIdTracker + m ()I method_17920 getNextId + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_17662 usedIds +c net/minecraft/class_19 net/minecraft/world/storage/MapFrame + m ()Ljava/lang/String; method_82 getFrameName + m ()Lnet/minecraft/class_2487; method_84 write + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_19; method_87 read + m ()I method_83 getRotation + m ()I method_85 getEntityId + m ()Lnet/minecraft/class_2338; method_86 getPos + m (Lnet/minecraft/class_2338;)Ljava/lang/String; method_81 getFrameNameWithPos + f I field_74 rotation + f I field_73 entityId + f Lnet/minecraft/class_2338; field_75 pos +c net/minecraft/class_22 net/minecraft/world/storage/MapData + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;Ljava/lang/String;Lnet/minecraft/class_20$class_21;)V method_110 addTargetDecoration + m (Lnet/minecraft/class_2338;I)V method_104 removeItemFrame + m (Lnet/minecraft/class_22;)V method_18818 copyFrom + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)V method_102 updateVisiblePlayers + m (DDI)V method_106 calculateMapCenter + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_108 tryAddBanner + m (II)V method_103 updateMapData + m (Lnet/minecraft/class_20$class_21;Lnet/minecraft/class_1936;Ljava/lang/String;DDDLnet/minecraft/class_2561;)V method_107 updateDecorations + m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_22$class_23; method_101 getMapInfo + m (IIIZZLnet/minecraft/class_5321;)V method_105 initData + m (Lnet/minecraft/class_1922;II)V method_109 removeStaleBanners + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_29008 func_237242_a_ + m (Lnet/minecraft/class_2487;)Ljava/lang/IllegalArgumentException; method_29009 func_237243_c_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1922;Lnet/minecraft/class_1657;)Lnet/minecraft/class_2596; method_100 getMapPacket + f Z field_114 trackingPosition + f Z field_113 unlimitedTracking + f Z field_17403 locked + f Lorg/apache/logging/log4j/Logger; field_25019 LOGGER + f Ljava/util/List; field_112 playersArrayList + f Ljava/util/Map; field_117 mapDecorations + f I field_116 xCenter + f Ljava/util/Map; field_123 banners + f I field_115 zCenter + f Ljava/util/Map; field_120 playersHashMap + f B field_119 scale + f Ljava/util/Map; field_121 frames + f [B field_122 colors + f Lnet/minecraft/class_5321; field_118 dimension +c net/minecraft/class_22$class_23 net/minecraft/world/storage/MapData$MapInfo + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2596; method_112 getPacket + m (II)V method_111 update + f I field_131 step + f I field_127 maxX + f I field_128 minY + f Lnet/minecraft/class_1657; field_125 player + f I field_129 minX + f Z field_130 isDirty + f I field_124 tick + f Lnet/minecraft/class_22; field_132 field_176107_c + f I field_126 maxY +c net/minecraft/class_4565 net/minecraft/world/storage/CommandStorage + m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4565$class_4566; method_22544 createContainer + m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4565$class_4566; method_22548 func_227490_b_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2487; method_22546 getData + m (Ljava/util/Map$Entry;)Ljava/util/stream/Stream; method_22545 func_227487_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_22543 prefixStorageNamespace + m ()Ljava/util/stream/Stream; method_22542 getSavedDataKeys + m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4565$class_4566; method_22549 func_227491_c_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2487;)V method_22547 setData + f Lnet/minecraft/class_26; field_20748 manager + f Ljava/util/Map; field_20747 loadedContainers +c net/minecraft/class_4565$class_4566 net/minecraft/world/storage/CommandStorage$Container + m (Ljava/lang/String;)Lnet/minecraft/class_2487; method_22550 getData + m (Ljava/lang/String;)Ljava/util/stream/Stream; method_22554 getSavedKeys + m (Ljava/lang/String;Lnet/minecraft/class_2487;)V method_22552 setData + m (Lnet/minecraft/class_2487;Ljava/lang/String;Lnet/minecraft/class_2487;)V method_22553 func_227496_a_ + m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_2960; method_22551 func_227494_a_ + f Ljava/util/Map; field_20749 contents +c net/minecraft/class_26 net/minecraft/world/storage/DimensionSavedDataManager + m (Ljava/util/function/Supplier;Ljava/lang/String;)Lnet/minecraft/class_18; method_120 loadSavedData + m (Ljava/util/function/Supplier;Ljava/lang/String;)Lnet/minecraft/class_18; method_20786 get + m (Ljava/lang/String;)Ljava/io/File; method_17922 getDataFile + m (Ljava/io/PushbackInputStream;)Z method_17921 isCompressed + m (Lnet/minecraft/class_18;)V method_123 set + m (Ljava/lang/String;I)Lnet/minecraft/class_2487; method_17923 load + m ()V method_125 save + m (Ljava/util/function/Supplier;Ljava/lang/String;)Lnet/minecraft/class_18; method_17924 getOrCreate + f Ljava/util/Map; field_134 savedDatum + f Lcom/mojang/datafixers/DataFixer; field_17663 dataFixer + f Lorg/apache/logging/log4j/Logger; field_136 LOGGER + f Ljava/io/File; field_17664 folder +c net/minecraft/class_27 net/minecraft/world/storage/DerivedWorldInfo + f Lnet/minecraft/class_5268; field_139 delegate + f Lnet/minecraft/class_5219; field_24179 configuration +c net/minecraft/class_5217 net/minecraft/world/storage/IWorldInfo + m ()Z method_197 isDifficultyLocked + m ()J method_188 getGameTime + m ()Z method_156 isRaining + m (Lnet/minecraft/class_129;)V method_151 addToCrashReport + m ()J method_217 getDayTime + m ()Z method_152 isHardcore + m (Z)V method_157 setRaining + m ()Ljava/lang/String; method_27411 func_210211_Z + m ()Lnet/minecraft/class_1267; method_207 getDifficulty + m ()Ljava/lang/String; method_27410 func_210215_Y + m ()I method_215 getSpawnX + m ()I method_144 getSpawnY + m ()Lnet/minecraft/class_1928; method_146 getGameRulesInstance + m ()F method_30656 getSpawnAngle + m ()I method_166 getSpawnZ + m ()Z method_203 isThundering +c net/minecraft/class_33 net/minecraft/client/AnvilConverterException +c net/minecraft/class_5218 net/minecraft/world/storage/FolderName + m ()Ljava/lang/String; toString toString + m ()Ljava/lang/String; method_27423 getFileName + f Lnet/minecraft/class_5218; field_24183 PLAYERS + f Ljava/lang/String; field_24189 fileName + f Lnet/minecraft/class_5218; field_24188 DOT + f Lnet/minecraft/class_5218; field_24187 RESOURCES_ZIP + f Lnet/minecraft/class_5218; field_24182 PLAYERDATA + f Lnet/minecraft/class_5218; field_24181 STATS + f Lnet/minecraft/class_5218; field_24186 DATAPACKS + f Lnet/minecraft/class_5218; field_24185 GENERATED + f Lnet/minecraft/class_5218; field_24180 ADVANCEMENTS + f Lnet/minecraft/class_5218; field_24184 LEVEL_DAT +c net/minecraft/class_34 net/minecraft/world/storage/WorldSummary + m ()Z method_257 isHardcoreModeEnabled + m ()Z method_259 getCheatsEnabled + m ()Ljava/lang/String; method_252 getDisplayName + m ()J method_249 getLastTimePlayed + m ()Ljava/lang/String; method_248 getFileName + m ()Ljava/io/File; method_27020 getIconFile + m ()Lnet/minecraft/class_2561; method_27430 createDescription + m ()Lnet/minecraft/class_2561; method_27429 getDescription + m ()Z method_256 markVersionInList + m ()Z method_260 askToOpenWorld + m (Lnet/minecraft/class_34;)I method_251 compareTo + m ()Z method_254 askToCreateBackup + m ()Z method_27021 isLocked + m ()Lnet/minecraft/class_5250; method_258 getVersionName + m ()Z method_255 requiresConversion + m ()Lnet/minecraft/class_1934; method_247 getEnumGameType + m ()Lnet/minecraft/class_5315; method_29586 getVersionData + m (Ljava/lang/Object;)I compareTo compareTo + f Lnet/minecraft/class_5315; field_25023 versionData + f Lnet/minecraft/class_2561; field_24191 description + f Ljava/lang/String; field_205 fileName + f Z field_209 requiresConversion + f Z field_23772 locked + f Ljava/io/File; field_23773 iconFile + f Lnet/minecraft/class_1940; field_25022 settings +c net/minecraft/class_32 net/minecraft/world/storage/SaveFormat + m (Ljava/io/File;Lcom/mojang/datafixers/DataFixer;)Lnet/minecraft/class_5359; method_29013 func_237265_a_ + m ()I method_17931 getStorageVersionId + m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_5285; method_31120 func_242978_b + m (Ljava/io/File;Z)Ljava/util/function/BiFunction; method_29014 readWorldSummary + m (Lnet/minecraft/class_32;)I method_27001 func_237273_c_ + m (Ljava/lang/String;)Z method_230 canLoadWorld + m (Ljava/lang/String;)Z method_240 isNewLevelIdAcceptable + m (Lnet/minecraft/class_32;Ljava/io/File;Ljava/util/function/BiFunction;)Ljava/lang/Object; method_29011 func_237263_a_ + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5359;Ljava/io/File;Lcom/mojang/datafixers/DataFixer;)Lnet/minecraft/class_31; method_29582 func_242976_a + m ()Ljava/time/format/DateTimeFormatter; method_27004 func_237276_f_ + m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_5359; method_29580 decodeDatapackCodec + m (Ljava/nio/file/Path;)Lnet/minecraft/class_32; method_26999 create + m ()Ljava/util/List; method_235 getSaveList + m ()Lorg/apache/logging/log4j/Logger; method_27003 func_237275_e_ + m (Lnet/minecraft/class_32;Ljava/io/File;Z)Ljava/util/function/BiFunction; method_29012 func_237264_a_ + m (Ljava/io/File;Lcom/mojang/datafixers/DataFixer;)Lnet/minecraft/class_5359; method_29583 readWorldDatapackCodec + m (Ljava/io/File;Ljava/util/function/BiFunction;)Ljava/lang/Object; method_26998 readFromLevelData + m ()Ljava/lang/IllegalStateException; method_31121 func_242979_h + m ()Ljava/lang/IllegalStateException; method_31122 func_242980_i + m ()Ljava/nio/file/Path; method_236 getBackupsFolder + m ()Ljava/lang/IllegalStateException; method_31123 func_242981_j + m (Lnet/minecraft/class_32;)Ljava/nio/file/Path; method_26996 func_237262_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_32$class_5143; method_27002 getLevelSave + m ()Ljava/nio/file/Path; method_19636 getSavesDir + m (Lnet/minecraft/class_32;)Lcom/mojang/datafixers/DataFixer; method_27000 func_237271_b_ + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5359;)Ljava/util/function/BiFunction; method_29581 func_237260_a_ + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5359;)Ljava/util/function/BiFunction; method_17926 readServerWorldInfo + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/DataFixer;I)Lcom/mojang/datafixers/util/Pair; method_29010 getSettingLifecyclePair + m (Ljava/io/File;ZLjava/io/File;Lcom/mojang/datafixers/DataFixer;)Lnet/minecraft/class_34; method_29015 func_242977_a + f Ljava/time/format/DateTimeFormatter; field_200 BACKUP_DATE_FORMAT + f Lcom/google/common/collect/ImmutableList; field_25020 WORLD_GEN_SETTING_STRINGS + f Lorg/apache/logging/log4j/Logger; field_17665 LOGGER + f Lcom/mojang/datafixers/DataFixer; field_17668 dataFixer + f Ljava/nio/file/Path; field_17666 savesDir + f Ljava/nio/file/Path; field_17667 backupsDir +c net/minecraft/class_32$class_5143 net/minecraft/world/storage/SaveFormat$LevelSave + m (Ljava/lang/String;)V method_27008 updateSaveName + m (Lnet/minecraft/class_3536;)Z method_27006 convertRegions + m ()Z method_27012 isSaveFormatOutdated + m (Ljava/io/File;Lcom/mojang/datafixers/DataFixer;)Lnet/minecraft/class_5359; method_29018 func_237289_a_ + m ()J method_27016 createBackup + m ()Lnet/minecraft/class_34; method_29584 readWorldSummary + m ()Lnet/minecraft/class_5359; method_29585 readDatapackCodec + m ()V method_27017 validateSaveDirLock + m (Lnet/minecraft/class_32$class_5143;)Ljava/nio/file/Path; method_27007 func_237286_a_ + m ()V method_27015 deleteSave + m ()Ljava/io/File; method_27014 getIconFile + m (Lnet/minecraft/class_5321;)Ljava/io/File; method_27424 getDimensionFolder + m ()Lnet/minecraft/class_29; method_27427 getPlayerDataManager + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_5219;Lnet/minecraft/class_2487;)V method_27426 saveLevel + m ()Ljava/lang/String; method_27005 getSaveName + m (Lnet/minecraft/class_32$class_5143;)Lnet/minecraft/class_5125; method_27011 func_237294_b_ + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_5219;)V method_27425 saveLevel + m (Lnet/minecraft/class_5218;)Ljava/nio/file/Path; method_27428 func_237293_b_ + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5359;)Lnet/minecraft/class_5219; method_27013 readServerConfiguration + m (Lnet/minecraft/class_5218;)Ljava/nio/file/Path; method_27010 resolveFilePath + m ()V close close + f Ljava/nio/file/Path; field_23768 saveDir + f Ljava/util/Map; field_24190 localPathCache + f Lnet/minecraft/class_5125; field_23767 saveDirLockManager + f Lnet/minecraft/class_32; field_23766 field_237277_a_ + f Ljava/lang/String; field_23769 saveName +c net/minecraft/class_32$class_5143$1 net/minecraft/world/storage/SaveFormat$LevelSave$1 + m (Ljava/lang/Object;Ljava/io/IOException;)Ljava/nio/file/FileVisitResult; postVisitDirectory postVisitDirectory + m (Ljava/lang/Object;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult; visitFile visitFile + m (Ljava/nio/file/Path;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult; method_27019 visitFile + m (Ljava/nio/file/Path;Ljava/io/IOException;)Ljava/nio/file/FileVisitResult; method_27018 postVisitDirectory + f Lnet/minecraft/class_32$class_5143; field_23771 field_237303_b_ + f Ljava/nio/file/Path; field_23770 field_237302_a_ +c net/minecraft/class_32$class_5143$2 net/minecraft/world/storage/SaveFormat$LevelSave$2 + m (Ljava/lang/Object;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult; visitFile visitFile + m (Ljava/nio/file/Path;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult; method_246 visitFile + f Ljava/nio/file/Path; field_204 field_237304_a_ + f Ljava/util/zip/ZipOutputStream; field_201 field_237305_b_ + f Lnet/minecraft/class_32$class_5143; field_203 field_237306_c_ +c net/minecraft/class_24 net/minecraft/world/storage/AnvilSaveConverter + m (Ljava/io/File;Ljava/util/Collection;)V method_117 collectRegionFiles + m (Ljava/io/File;Ljava/lang/String;)Z method_114 func_215791_a + m (Lnet/minecraft/class_32$class_5143;)V method_118 backupLevelData + m (Lnet/minecraft/class_5455$class_5457;Ljava/io/File;Ljava/lang/Iterable;Lnet/minecraft/class_1966;IILnet/minecraft/class_3536;)V method_113 func_242983_a + m (Lnet/minecraft/class_5455$class_5457;Ljava/io/File;Ljava/io/File;Lnet/minecraft/class_1966;IILnet/minecraft/class_3536;)V method_116 func_242982_a + m (Lnet/minecraft/class_32$class_5143;Lnet/minecraft/class_3536;)Z method_234 convertRegions + f Lorg/apache/logging/log4j/Logger; field_133 LOGGER +c net/minecraft/class_5315 net/minecraft/world/storage/VersionData + m ()Z method_29027 isSnapshot + m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_5315; method_29023 getVersionData + m ()I method_29022 getStorageVersionID + m ()J method_29024 getLastPlayed + m ()Ljava/lang/String; method_29025 getName + m ()I method_29026 getID + f I field_25027 id + f Ljava/lang/String; field_25026 name + f Z field_25028 snapshot + f I field_25024 storageVersion + f J field_25025 lastPlayed +c net/minecraft/class_31 net/minecraft/world/storage/ServerWorldInfo + m (Lcom/mojang/serialization/Dynamic;)Ljava/util/stream/Stream; method_29032 func_237368_a_ + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_29587 func_237371_a_ + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_29030 func_237373_b_ + m ()V method_185 updatePlayerData + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2487;Lnet/minecraft/class_2487;)V method_158 serialize + m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_2520; method_29033 func_237372_b_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/class_2487;Lnet/minecraft/class_1940;Lnet/minecraft/class_5315;Lnet/minecraft/class_5285;Lcom/mojang/serialization/Lifecycle;)Lnet/minecraft/class_31; method_29029 decodeWorldInfo + f Lcom/mojang/serialization/Lifecycle; field_25426 lifecycle + f I field_192 rainTime + f Z field_172 dataFixed + f I field_173 thunderTime + f Lnet/minecraft/class_2487; field_170 loadedPlayerNBT + f Z field_21838 wasModded + f Z field_190 raining + f Z field_168 thundering + f Lnet/minecraft/class_5285; field_25425 generatorSettings + f Ljava/util/Set; field_21837 serverBrands + f I field_17736 wanderingTraderSpawnDelay + f Z field_185 initialized + f I field_151 spawnX + f I field_167 spawnY + f Lnet/minecraft/class_2487; field_25031 dragonFightNBT + f Z field_157 difficultyLocked + f F field_26367 spawnAngle + f I field_182 spawnZ + f Lnet/minecraft/class_236; field_191 schedueledEvents + f Lorg/apache/logging/log4j/Logger; field_25029 LOGGER + f J field_189 gameTime + f Lnet/minecraft/class_2487; field_156 customBossEventNBT + f J field_198 dayTime + f I field_196 version + f I field_17737 wanderingTraderSpawnChance + f Lnet/minecraft/class_1940; field_25030 worldSettings + f Lnet/minecraft/class_2784$class_5200; field_24193 borderSerializer + f Ljava/util/UUID; field_17738 wanderingTraderID + f I field_158 levelStorageVersion + f Lcom/mojang/datafixers/DataFixer; field_184 dataFixer + f I field_176 clearWeatherTime +c net/minecraft/class_29 net/minecraft/world/storage/PlayerData + m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_2487; method_261 loadPlayerData + m (Lnet/minecraft/class_1657;)V method_262 savePlayerData + m ()[Ljava/lang/String; method_263 getSeenPlayerUUIDs + f Lorg/apache/logging/log4j/Logger; field_149 LOGGER + f Lcom/mojang/datafixers/DataFixer; field_148 fixer + f Ljava/io/File; field_144 playerDataFolder +c net/minecraft/class_5219 net/minecraft/world/storage/IServerConfiguration + m (Lnet/minecraft/class_1267;)V method_208 setDifficulty + m ()Lnet/minecraft/class_2487; method_226 getHostPlayerNBT + m ()Lnet/minecraft/class_1928; method_146 getGameRulesInstance + m (I)Ljava/lang/String; method_27440 getStorageVersionName + m (Lnet/minecraft/class_2487;)V method_29037 setDragonFightData + m ()Ljava/lang/String; method_27438 func_237377_b_ + m (Ljava/lang/String;Z)V method_24285 addServerBranding + m ()Ljava/lang/String; method_27439 func_237378_c_ + m (Lnet/minecraft/class_129;)V method_151 addToCrashReport + m ()Ljava/lang/String; method_27436 func_237376_a_ + m (Lnet/minecraft/class_5359;)V method_29590 setDatapackCodec + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_163 serialize + m ()Lnet/minecraft/class_1267; method_207 getDifficulty + m ()Lnet/minecraft/class_1940; method_27433 getWorldSettings + m ()Lnet/minecraft/class_2487; method_29036 getDragonFightData + m ()Lnet/minecraft/class_5285; method_28057 getDimensionGeneratorSettings + m ()Lnet/minecraft/class_5359; method_29589 getDatapackCodec + m ()Z method_152 isHardcore + m ()Z method_194 areCommandsAllowed + m ()Lnet/minecraft/class_1934; method_210 getGameType + m ()Lnet/minecraft/class_2487; method_228 getCustomBossEventData + m (Z)V method_186 setDifficultyLocked + m (Lnet/minecraft/class_1934;)V method_193 setGameType + m ()Lnet/minecraft/class_5268; method_27859 getServerWorldInfo + m ()Z method_27431 isModded + m ()Ljava/util/Set; method_27432 getServerBranding + m (Lnet/minecraft/class_2487;)V method_221 setCustomBossEventData + m ()I method_168 getStorageVersionId + m ()Lcom/mojang/serialization/Lifecycle; method_29588 getLifecycle + m ()Z method_197 isDifficultyLocked + m ()Ljava/lang/String; method_150 getWorldName +c net/minecraft/class_5268 net/minecraft/world/storage/IServerWorldInfo + m ()Lnet/minecraft/class_236; method_143 getScheduledEvents + m (Lnet/minecraft/class_2784$class_5200;)V method_27415 setWorldBorderSerializer + m ()Z method_194 areCommandsAllowed + m ()I method_145 getThunderTime + m (Z)V method_223 setInitialized + m ()Z method_222 isInitialized + m ()I method_18038 getWanderingTraderSpawnDelay + m ()Ljava/lang/String; method_150 getWorldName + m ()I method_18039 getWanderingTraderSpawnChance + m (I)V method_167 setClearWeatherTime + m ()I method_190 getRainTime + m ()Ljava/lang/String; method_27856 func_237374_x_ + m (J)V method_29034 setGameTime + m ()Ljava/lang/String; method_27858 func_237375_y_ + m (J)V method_29035 setDayTime + m (I)V method_173 setThunderTime + m (Lnet/minecraft/class_1934;)V method_193 setGameType + m ()Lnet/minecraft/class_2784$class_5200; method_27422 getWorldBorderSerializer + m ()Lnet/minecraft/class_1934; method_210 getGameType + m (I)V method_164 setRainTime + m (I)V method_18041 setWanderingTraderSpawnDelay + m (Ljava/util/UUID;)V method_18040 setWanderingTraderID + m ()I method_155 getClearWeatherTime + m (Z)V method_147 setThundering + m (I)V method_18042 setWanderingTraderSpawnChance +c net/minecraft/class_40 net/minecraft/loot/BinomialRange + m (Lnet/minecraft/class_40;)F method_274 func_215839_b + m (Lnet/minecraft/class_40;)I method_272 func_215840_a + m (IF)Lnet/minecraft/class_40; method_273 of + f F field_917 p + f I field_918 n +c net/minecraft/class_40$class_41 net/minecraft/loot/BinomialRange$Serializer + m (Lnet/minecraft/class_40;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_276 serialize + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_40; method_275 deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize +c net/minecraft/class_5269 net/minecraft/world/storage/ISpawnWorldInfo + m (I)V method_27417 setSpawnY + m (F)V method_30657 setSpawnAngle + m (I)V method_27419 setSpawnZ + m (Lnet/minecraft/class_2338;F)V method_187 setSpawn + m (I)V method_27416 setSpawnX +c net/minecraft/class_44 net/minecraft/loot/ConstantRange + m (I)Lnet/minecraft/class_44; method_289 of + m (Lnet/minecraft/class_44;)I method_288 func_215834_a + f I field_922 value +c net/minecraft/class_44$class_45 net/minecraft/loot/ConstantRange$Serializer + m (Lnet/minecraft/class_44;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_290 serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_44; method_291 deserialize + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize +c net/minecraft/class_39 net/minecraft/loot/LootTables + m (Ljava/lang/String;)Lnet/minecraft/class_2960; method_269 register + m ()Ljava/util/Set; method_270 getReadOnlyLootTables + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_271 register + f Lnet/minecraft/class_2960; field_16216 GAMEPLAY_CAT_MORNING_GIFT + f Lnet/minecraft/class_2960; field_17009 CHESTS_VILLAGE_VILLAGE_ARMORER + f Lnet/minecraft/class_2960; field_814 ENTITIES_SHEEP_ORANGE + f Lnet/minecraft/class_2960; field_17012 CHESTS_VILLAGE_VILLAGE_BUTCHER + f Lnet/minecraft/class_2960; field_702 ENTITIES_SHEEP_LIME + f Lnet/minecraft/class_2960; field_854 GAMEPLAY_FISHING_TREASURE + f Lnet/minecraft/class_2960; field_17010 CHESTS_VILLAGE_VILLAGE_MASON + f Lnet/minecraft/class_2960; field_461 ENTITIES_SHEEP_LIGHT_BLUE + f Lnet/minecraft/class_2960; field_662 CHESTS_IGLOO_CHEST + f Lnet/minecraft/class_2960; field_18007 CHESTS_VILLAGE_VILLAGE_FISHER + f Lnet/minecraft/class_2960; field_878 ENTITIES_SHEEP_GRAY + f Lnet/minecraft/class_2960; field_19067 GAMEPLAY_HERO_OF_THE_VILLAGE_FISHERMAN_GIFT + f Lnet/minecraft/class_2960; field_803 CHESTS_JUNGLE_TEMPLE + f Lnet/minecraft/class_2960; field_19063 GAMEPLAY_HERO_OF_THE_VILLAGE_BUTCHER_GIFT + f Lnet/minecraft/class_2960; field_397 CHESTS_UNDERWATER_RUIN_SMALL + f Lnet/minecraft/class_2960; field_17109 CHESTS_VILLAGE_VILLAGE_TEMPLE + f Lnet/minecraft/class_2960; field_365 ENTITIES_SHEEP_CYAN + f Lnet/minecraft/class_2960; field_19065 GAMEPLAY_HERO_OF_THE_VILLAGE_CLERIC_GIFT + f Lnet/minecraft/class_2960; field_841 CHESTS_SHIPWRECK_MAP + f Lnet/minecraft/class_2960; field_285 ENTITIES_SHEEP_PURPLE + f Lnet/minecraft/class_2960; field_16749 CHESTS_VILLAGE_VILLAGE_TAIGA_HOUSE + f Lnet/minecraft/class_2960; field_19072 GAMEPLAY_HERO_OF_THE_VILLAGE_SHEPHERD_GIFT + f Lnet/minecraft/class_2960; field_615 CHESTS_NETHER_BRIDGE + f Lnet/minecraft/class_2960; field_19068 GAMEPLAY_HERO_OF_THE_VILLAGE_FLETCHER_GIFT + f Lnet/minecraft/class_2960; field_665 CHESTS_SHIPWRECK_TREASURE + f Lnet/minecraft/class_2960; field_16753 CHESTS_VILLAGE_VILLAGE_SAVANNA_HOUSE + f Lnet/minecraft/class_2960; field_19070 GAMEPLAY_HERO_OF_THE_VILLAGE_LIBRARIAN_GIFT + f Lnet/minecraft/class_2960; field_274 CHESTS_END_CITY_TREASURE + f Lnet/minecraft/class_2960; field_716 ENTITIES_SHEEP_RED + f Lnet/minecraft/class_2960; field_24048 BASTION_BRIDGE + f Lnet/minecraft/class_2960; field_800 CHESTS_STRONGHOLD_CROSSING + f Lnet/minecraft/class_2960; field_353 GAMEPLAY_FISHING + f Lnet/minecraft/class_2960; field_844 EMPTY + f Lnet/minecraft/class_2960; field_24046 BASTION_TREASURE + f Lnet/minecraft/class_2960; field_434 CHESTS_VILLAGE_VILLAGE_WEAPONSMITH + f Lnet/minecraft/class_2960; field_489 ENTITIES_SHEEP_BROWN + f Lnet/minecraft/class_2960; field_19074 GAMEPLAY_HERO_OF_THE_VILLAGE_WEAPONSMITH_GIFT + f Lnet/minecraft/class_2960; field_24050 RUINED_PORTAL + f Lnet/minecraft/class_2960; field_885 CHESTS_DESERT_PYRAMID + f Lnet/minecraft/class_2960; field_224 ENTITIES_SHEEP_MAGENTA + f Lnet/minecraft/class_2960; field_795 GAMEPLAY_FISHING_FISH + f Lnet/minecraft/class_2960; field_16751 CHESTS_VILLAGE_VILLAGE_CARTOGRAPHER + f Lnet/minecraft/class_2960; field_869 ENTITIES_SHEEP_WHITE + f Lnet/minecraft/class_2960; field_19062 GAMEPLAY_HERO_OF_THE_VILLAGE_ARMORER_GIFT + f Lnet/minecraft/class_2960; field_385 ENTITIES_SHEEP_YELLOW + f Lnet/minecraft/class_2960; field_266 GAMEPLAY_FISHING_JUNK + f Lnet/minecraft/class_2960; field_17011 CHESTS_VILLAGE_VILLAGE_SHEPHERD + f Lnet/minecraft/class_2960; field_16750 CHESTS_VILLAGE_VILLAGE_TANNERY + f Lnet/minecraft/class_2960; field_19066 GAMEPLAY_HERO_OF_THE_VILLAGE_FARMER_GIFT + f Lnet/minecraft/class_2960; field_629 ENTITIES_SHEEP_PINK + f Lnet/minecraft/class_2960; field_751 CHESTS_JUNGLE_TEMPLE_DISPENSER + f Lnet/minecraft/class_2960; field_17108 CHESTS_VILLAGE_VILLAGE_FLETCHER + f Lnet/minecraft/class_2960; field_300 CHESTS_UNDERWATER_RUIN_BIG + f Lnet/minecraft/class_2960; field_16752 CHESTS_VILLAGE_VILLAGE_DESERT_HOUSE + f Lnet/minecraft/class_2960; field_19064 GAMEPLAY_HERO_OF_THE_VILLAGE_CARTOGRAPHER_GIFT + f Lnet/minecraft/class_2960; field_806 ENTITIES_SHEEP_LIGHT_GRAY + f Lnet/minecraft/class_2960; field_484 CHESTS_WOODLAND_MANSION + f Lnet/minecraft/class_2960; field_16754 CHESTS_VILLAGE_VILLAGE_SNOWY_HOUSE + f Lnet/minecraft/class_2960; field_19071 GAMEPLAY_HERO_OF_THE_VILLAGE_MASON_GIFT + f Lnet/minecraft/class_2960; field_251 CHESTS_BURIED_TREASURE + f Lnet/minecraft/class_2960; field_16748 CHESTS_VILLAGE_VILLAGE_PLAINS_HOUSE + f Lnet/minecraft/class_2960; field_19073 GAMEPLAY_HERO_OF_THE_VILLAGE_TOOLSMITH_GIFT + f Lnet/minecraft/class_2960; field_16593 CHESTS_PILLAGER_OUTPOST + f Lnet/minecraft/class_2960; field_472 CHESTS_ABANDONED_MINESHAFT + f Lnet/minecraft/class_2960; field_19069 GAMEPLAY_HERO_OF_THE_VILLAGE_LEATHERWORKER_GIFT + f Ljava/util/Set; field_667 LOOT_TABLES + f Lnet/minecraft/class_2960; field_880 CHESTS_SHIPWRECK_SUPPLY + f Lnet/minecraft/class_2960; field_24047 BASTION_OTHER + f Lnet/minecraft/class_2960; field_683 CHESTS_STRONGHOLD_LIBRARY + f Lnet/minecraft/class_2960; field_850 CHESTS_SPAWN_BONUS_CHEST + f Lnet/minecraft/class_2960; field_778 ENTITIES_SHEEP_BLACK + f Ljava/util/Set; field_600 READ_ONLY_LOOT_TABLES + f Lnet/minecraft/class_2960; field_17107 CHESTS_VILLAGE_VILLAGE_TOOLSMITH + f Lnet/minecraft/class_2960; field_394 ENTITIES_SHEEP_BLUE + f Lnet/minecraft/class_2960; field_22402 PIGLIN_BARTERING + f Lnet/minecraft/class_2960; field_24049 BASTION_HOGLIN_STABLE + f Lnet/minecraft/class_2960; field_842 CHESTS_STRONGHOLD_CORRIDOR + f Lnet/minecraft/class_2960; field_356 CHESTS_SIMPLE_DUNGEON + f Lnet/minecraft/class_2960; field_607 ENTITIES_SHEEP_GREEN +c net/minecraft/class_5330 net/minecraft/loot/LootTypesManager + m (Lnet/minecraft/class_2378;Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Function;)Lnet/minecraft/class_5330$class_5331; method_29306 getLootTypeRegistryWrapper +c net/minecraft/class_5330$class_5333 net/minecraft/loot/LootTypesManager$Serializer + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + f Lnet/minecraft/class_2378; field_25197 registry + f Ljava/lang/String; field_25199 name + f Ljava/util/function/Function; field_25200 typeFunction + f Ljava/lang/String; field_25198 id + f Lcom/mojang/datafixers/util/Pair; field_25201 typeSerializer +c net/minecraft/class_5330$class_5332 net/minecraft/loot/LootTypesManager$ISerializer + m (Ljava/lang/Object;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_29309 serializer + m (Lcom/google/gson/JsonElement;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; method_29308 deserialize +c net/minecraft/class_5330$class_5331 net/minecraft/loot/LootTypesManager$LootTypeRegistryWrapper + m ()Ljava/lang/Object; method_29307 getSerializer + f Lcom/mojang/datafixers/util/Pair; field_25196 typeSerializer + f Ljava/util/function/Function; field_25195 typeFunction + f Lnet/minecraft/class_2378; field_25192 registry + f Ljava/lang/String; field_25194 name + f Ljava/lang/String; field_25193 id +c net/minecraft/class_5330$1 net/minecraft/loot/LootTypesManager$1 +c net/minecraft/class_5270 net/minecraft/loot/LootSerializers + m ()Lcom/google/gson/GsonBuilder; method_27862 func_237388_c_ + m ()Lcom/google/gson/GsonBuilder; method_27861 func_237387_b_ + m ()Lcom/google/gson/GsonBuilder; method_27860 func_237386_a_ +c net/minecraft/class_47 net/minecraft/loot/LootContext + m ()Lnet/minecraft/class_3218; method_299 getWorld + m ()Ljava/util/Random; method_294 getRandom + m (Lnet/minecraft/class_2960;Ljava/util/function/Consumer;)V method_297 generateDynamicDrop + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5341; method_22558 getLootCondition + m (Lnet/minecraft/class_52;)Z method_298 addLootTable + m (Lnet/minecraft/class_52;)V method_295 removeLootTable + m (Lnet/minecraft/class_5341;)Z method_22555 addCondition + m (Lnet/minecraft/class_5341;)V method_22557 removeCondition + m ()F method_302 getLuck + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_52; method_22556 getLootTable + m (Lnet/minecraft/class_169;)Z method_300 has + m (Lnet/minecraft/class_169;)Ljava/lang/Object; method_296 get + f Ljava/util/Set; field_20751 conditions + f Lnet/minecraft/class_3218; field_928 world + f Ljava/util/Set; field_927 lootTables + f Ljava/util/Random; field_923 random + f Ljava/util/function/Function; field_20750 field_227499_f_ + f Ljava/util/Map; field_925 parameters + f Ljava/util/function/Function; field_924 lootTableManager + f F field_926 luck + f Ljava/util/Map; field_929 field_216037_g +c net/minecraft/class_47$class_49 net/minecraft/loot/LootContext$IDynamicDropProvider + m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)V add add +c net/minecraft/class_47$class_48 net/minecraft/loot/LootContext$Builder + m (Lnet/minecraft/class_169;Ljava/lang/Object;)Lnet/minecraft/class_47$class_48; method_306 withNullableParameter + m (F)Lnet/minecraft/class_47$class_48; method_303 withLuck + m (Lnet/minecraft/class_169;)Ljava/lang/Object; method_308 assertPresent + m (Lnet/minecraft/class_169;)Ljava/lang/Object; method_305 get + m (Ljava/util/Random;)Lnet/minecraft/class_47$class_48; method_311 withRandom + m (Lnet/minecraft/class_176;)Lnet/minecraft/class_47; method_309 build + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_47$class_49;)Lnet/minecraft/class_47$class_48; method_307 withDynamicDrop + m (J)Lnet/minecraft/class_47$class_48; method_304 withSeed + m ()Lnet/minecraft/class_3218; method_313 getWorld + m (JLjava/util/Random;)Lnet/minecraft/class_47$class_48; method_310 withSeededRandom + m (Lnet/minecraft/class_169;Ljava/lang/Object;)Lnet/minecraft/class_47$class_48; method_312 withParameter + f Lnet/minecraft/class_3218; field_930 world + f Ljava/util/Random; field_934 rand + f Ljava/util/Map; field_933 field_216026_c + f Ljava/util/Map; field_932 lootParameters + f F field_931 luck +c net/minecraft/class_47$class_50 net/minecraft/loot/LootContext$EntityTarget + m (Lnet/minecraft/class_47$class_50;)Ljava/lang/String; method_316 func_216028_a + m ()Lnet/minecraft/class_169; method_315 getParameter + m (Ljava/lang/String;)Lnet/minecraft/class_47$class_50; method_314 fromString + m ()[Lnet/minecraft/class_47$class_50; values values + m (Ljava/lang/String;)Lnet/minecraft/class_47$class_50; valueOf valueOf + f Lnet/minecraft/class_47$class_50; field_937 KILLER_PLAYER + f Lnet/minecraft/class_47$class_50; field_936 KILLER + f Lnet/minecraft/class_47$class_50; field_939 DIRECT_KILLER + f Lnet/minecraft/class_47$class_50; field_935 THIS + f [Lnet/minecraft/class_47$class_50; field_940 $VALUES + f Ljava/lang/String; field_941 targetType + f Lnet/minecraft/class_169; field_938 parameter +c net/minecraft/class_47$class_50$class_51 net/minecraft/loot/LootContext$EntityTarget$Serializer + m (Lcom/google/gson/stream/JsonReader;)Lnet/minecraft/class_47$class_50; method_317 read + m (Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V write write + m (Lcom/google/gson/stream/JsonReader;)Ljava/lang/Object; read read + m (Lcom/google/gson/stream/JsonWriter;Lnet/minecraft/class_47$class_50;)V method_318 write +c net/minecraft/class_47$1 net/minecraft/loot/LootContext$1 +c net/minecraft/class_42 net/minecraft/loot/IntClamper + m (I)Lnet/minecraft/class_42; method_280 func_215848_a + m (I)I method_279 func_215845_c + m (I)Lnet/minecraft/class_42; method_277 func_215851_b + m (Lnet/minecraft/class_42;)Ljava/lang/Integer; method_285 func_215849_b + m (III)I method_284 func_215847_a + m (II)I method_278 func_215844_c + m (I)I applyAsInt applyAsInt + m (II)Lnet/minecraft/class_42; method_282 func_215843_a + m (Lnet/minecraft/class_42;)Ljava/lang/Integer; method_281 func_215850_a + m (II)I method_283 func_215846_b + f Ljava/util/function/IntUnaryOperator; field_919 field_215854_c + f Ljava/lang/Integer; field_921 field_215852_a + f Ljava/lang/Integer; field_920 field_215853_b +c net/minecraft/class_42$1 net/minecraft/loot/IntClamper$1 +c net/minecraft/class_42$class_43 net/minecraft/loot/IntClamper$Serializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_42; method_286 deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lnet/minecraft/class_42;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_287 serialize + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize +c net/minecraft/class_55 net/minecraft/loot/LootPool + m ()Lnet/minecraft/class_55$class_56; method_347 builder + m (Lnet/minecraft/class_55;)[Lnet/minecraft/class_5341; method_348 func_216094_d + m (Lnet/minecraft/class_47;Ljava/util/List;Lorg/apache/commons/lang3/mutable/MutableInt;Lnet/minecraft/class_82;)V method_342 func_216097_a + m (Lnet/minecraft/class_58;)V method_349 func_227505_a_ + m (Ljava/util/function/Consumer;Lnet/minecraft/class_47;)V method_345 generateRoll + m (Lnet/minecraft/class_55;)[Lnet/minecraft/class_117; method_344 func_216098_e + m (Ljava/util/function/Consumer;Lnet/minecraft/class_47;)V method_341 generate + m (Lnet/minecraft/class_55;)Lnet/minecraft/class_59; method_346 func_216092_a + m (Lnet/minecraft/class_55;)Lnet/minecraft/class_61; method_343 func_216100_c + m (Lnet/minecraft/class_55;)[Lnet/minecraft/class_79; method_350 func_216093_b + f [Lnet/minecraft/class_79; field_953 lootEntries + f Lnet/minecraft/class_61; field_958 bonusRolls + f Lnet/minecraft/class_59; field_957 rolls + f [Lnet/minecraft/class_117; field_956 functions + f Ljava/util/function/Predicate; field_955 combinedConditions + f Ljava/util/function/BiFunction; field_952 combinedFunctions + f [Lnet/minecraft/class_5341; field_954 conditions +c net/minecraft/class_55$1 net/minecraft/loot/LootPool$1 +c net/minecraft/class_55$class_57 net/minecraft/loot/LootPool$Serializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lnet/minecraft/class_55;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_357 serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_55; method_358 deserialize +c net/minecraft/class_55$class_56 net/minecraft/loot/LootPool$Builder + m ()Lnet/minecraft/class_55$class_56; method_354 cast + m (Lnet/minecraft/class_117$class_118;)Lnet/minecraft/class_55$class_56; method_353 acceptFunction + m ()Lnet/minecraft/class_55; method_355 build + m (Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_55$class_56; method_351 addEntry + m (Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_55$class_56; method_356 acceptCondition + m (Lnet/minecraft/class_59;)Lnet/minecraft/class_55$class_56; method_352 rolls + f Ljava/util/List; field_963 conditions + f Lnet/minecraft/class_59; field_959 rolls + f Lnet/minecraft/class_61; field_962 bonusRolls + f Ljava/util/List; field_960 entries + f Ljava/util/List; field_961 functions +c net/minecraft/class_46 net/minecraft/loot/IParameterized + m ()Ljava/util/Set; method_293 getRequiredParameters + m (Lnet/minecraft/class_58;)V method_292 func_225580_a_ +c net/minecraft/class_60 net/minecraft/loot/LootTableManager + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_52; method_367 getLootTableFromLocation + m ()Ljava/util/Set; method_370 getLootTableKeys + m (Lnet/minecraft/class_52;)Lcom/google/gson/JsonElement; method_372 toJson + m (Ljava/lang/String;Ljava/lang/String;)V method_368 func_215303_a + m (Ljava/util/Map;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_20712 apply + m (Lnet/minecraft/class_58;Lnet/minecraft/class_2960;Lnet/minecraft/class_52;)V method_369 validateLootTable + m (Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_2960;Lcom/google/gson/JsonElement;)V method_20711 func_237403_a_ + m (Lnet/minecraft/class_58;Lnet/minecraft/class_2960;Lnet/minecraft/class_52;)V method_373 func_227509_b_ + f Ljava/util/Map; field_970 registeredLootTables + f Lnet/minecraft/class_4567; field_20752 lootPredicateManager + f Lcom/google/gson/Gson; field_974 GSON_INSTANCE + f Lorg/apache/logging/log4j/Logger; field_975 LOGGER +c net/minecraft/class_52 net/minecraft/loot/LootTable + m (Lnet/minecraft/class_47;)Ljava/util/List; method_319 generate + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1799;)V method_331 func_216125_a + m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)V method_320 generate + m (Ljava/util/function/Consumer;)Ljava/util/function/Consumer; method_332 capStackSizes + m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)V method_328 recursiveGenerate + m (Lnet/minecraft/class_58;)V method_330 validate + m ()Lnet/minecraft/class_52$class_53; method_324 builder + m (Lnet/minecraft/class_52;)[Lnet/minecraft/class_55; method_326 func_216121_b + m ()Lorg/apache/logging/log4j/Logger; method_323 func_216115_c + m (Lnet/minecraft/class_52;)Lnet/minecraft/class_176; method_327 func_216123_a + m (Ljava/util/List;ILjava/util/Random;)V method_333 shuffleItems + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_47;)V method_329 fillInventory + m ()Lnet/minecraft/class_176; method_322 getParameterSet + m (Lnet/minecraft/class_52;)[Lnet/minecraft/class_117; method_325 func_216116_c + m (Lnet/minecraft/class_1263;Ljava/util/Random;)Ljava/util/List; method_321 getEmptySlotsRandomized + f [Lnet/minecraft/class_55; field_943 pools + f Ljava/util/function/BiFunction; field_945 combinedFunctions + f Lnet/minecraft/class_52; field_948 EMPTY_LOOT_TABLE + f [Lnet/minecraft/class_117; field_944 functions + f Lnet/minecraft/class_176; field_947 DEFAULT_PARAMETER_SET + f Lorg/apache/logging/log4j/Logger; field_946 LOGGER + f Lnet/minecraft/class_176; field_942 parameterSet +c net/minecraft/class_52$class_54 net/minecraft/loot/LootTable$Serializer + m (Lnet/minecraft/class_52;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_339 serialize + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_52; method_340 deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize +c net/minecraft/class_52$class_53 net/minecraft/loot/LootTable$Builder + m (Lnet/minecraft/class_176;)Lnet/minecraft/class_52$class_53; method_334 setParameterSet + m ()Lnet/minecraft/class_52; method_338 build + m (Lnet/minecraft/class_117$class_118;)Lnet/minecraft/class_52$class_53; method_335 acceptFunction + m ()Lnet/minecraft/class_52$class_53; method_337 cast + m (Lnet/minecraft/class_55$class_56;)Lnet/minecraft/class_52$class_53; method_336 addLootPool + f Ljava/util/List; field_949 lootPools + f Ljava/util/List; field_951 lootFunctions + f Lnet/minecraft/class_176; field_950 parameterSet +c net/minecraft/class_52$1 net/minecraft/loot/LootTable$1 +c net/minecraft/class_59 net/minecraft/loot/IRandomRange + m (Ljava/util/Random;)I method_366 generateInt + m ()Lnet/minecraft/class_2960; method_365 getType + f Lnet/minecraft/class_2960; field_967 UNIFORM + f Lnet/minecraft/class_2960; field_968 CONSTANT + f Lnet/minecraft/class_2960; field_969 BINOMIAL +c net/minecraft/class_4567 net/minecraft/loot/LootPredicateManager + m (Ljava/util/Map;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_22563 apply + m (Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_2960;Lcom/google/gson/JsonElement;)V method_22560 func_237404_a_ + m (Ljava/lang/String;Ljava/lang/String;)V method_22562 func_227516_a_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_52; method_22566 func_227518_b_ + m (Lnet/minecraft/class_58;Lnet/minecraft/class_2960;Lnet/minecraft/class_5341;)V method_22561 func_227515_a_ + m ()Ljava/util/Set; method_22559 func_227513_a_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5341; method_22564 func_227517_a_ + f Lcom/google/gson/Gson; field_20754 field_227511_b_ + f Lorg/apache/logging/log4j/Logger; field_20753 field_227510_a_ + f Ljava/util/Map; field_20755 field_227512_c_ +c net/minecraft/class_4567$class_5334 net/minecraft/loot/LootPredicateManager$AndCombiner + m (Lnet/minecraft/class_47;)Z method_29311 test + m (Ljava/lang/Object;)Z test test + f Ljava/util/function/Predicate; field_25203 field_237406_b_ + f [Lnet/minecraft/class_5341; field_25202 field_237405_a_ +c net/minecraft/class_4567$1 net/minecraft/loot/LootPredicateManager$1 +c net/minecraft/class_63 net/minecraft/loot/RandomRanges + m (Lcom/google/gson/JsonElement;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_59; method_383 deserialize + m (Lnet/minecraft/class_59;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_384 serialize + f Ljava/util/Map; field_978 GENERATOR_MAP +c net/minecraft/class_5335 net/minecraft/loot/ILootSerializer + m (Lcom/google/gson/JsonObject;Ljava/lang/Object;Lcom/google/gson/JsonSerializationContext;)V method_516 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; method_517 deserialize +c net/minecraft/class_61 net/minecraft/loot/RandomValueRange + m (I)Z method_376 isInRange + m ()F method_380 getMax + m (Ljava/util/Random;)F method_374 generateFloat + m (FF)Lnet/minecraft/class_61; method_377 of + m (Lnet/minecraft/class_61;)F method_379 access$000 + m (Lnet/minecraft/class_61;)F method_375 access$100 + m ()F method_378 getMin + f F field_977 min + f F field_976 max +c net/minecraft/class_61$class_62 net/minecraft/loot/RandomValueRange$Serializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_61; method_381 deserialize + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lnet/minecraft/class_61;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_382 serialize +c net/minecraft/class_58 net/minecraft/loot/ValidationTracker + m (Ljava/lang/String;)Ljava/lang/String; method_363 func_227542_e_ + m (Lnet/minecraft/class_2960;)Z method_22572 func_227536_b_ + m (Lnet/minecraft/class_176;)Lnet/minecraft/class_58; method_22568 func_227529_a_ + m (Lnet/minecraft/class_2960;)Z method_22570 func_227532_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_22575 func_227540_d_ + m ()Lcom/google/common/collect/Multimap; method_361 getProblems + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5341; method_22576 func_227541_d_ + m (Ljava/lang/String;)Ljava/lang/String; method_22573 func_227538_c_ + m (Ljava/lang/String;Lnet/minecraft/class_2960;)Lnet/minecraft/class_58; method_22571 func_227535_b_ + m (Ljava/lang/String;Lnet/minecraft/class_2960;)Lnet/minecraft/class_58; method_22569 func_227531_a_ + m ()Ljava/lang/String; method_362 func_227537_c_ + m ()Ljava/lang/String; method_359 func_227533_b_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_52; method_22574 func_227539_c_ + m (Lnet/minecraft/class_46;)V method_22567 func_227528_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_58; method_364 func_227534_b_ + m (Ljava/lang/String;)V method_360 addProblem + f Ljava/util/function/Function; field_20757 field_227522_d_ + f Lnet/minecraft/class_176; field_20756 field_227521_c_ + f Ljava/util/Set; field_20760 field_227525_g_ + f Ljava/util/Set; field_20758 field_227523_e_ + f Ljava/util/function/Function; field_20759 field_227524_f_ + f Ljava/lang/String; field_964 field_227526_h_ + f Ljava/util/function/Supplier; field_966 field_227520_b_ + f Lcom/google/common/collect/Multimap; field_965 field_227519_a_ +c net/minecraft/class_5336 net/minecraft/loot/LootType + m ()Lnet/minecraft/class_5335; method_29312 getSerializer + f Lnet/minecraft/class_5335; field_25204 serializer +c net/minecraft/class_64 net/minecraft/loot/ILootEntry + m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z expand expand + m (Lnet/minecraft/class_64;)Lnet/minecraft/class_64; method_385 alternate + m (Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_16779 func_216137_b + m (Lnet/minecraft/class_64;)Lnet/minecraft/class_64; method_16778 sequence + m (Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_16777 func_216138_a + m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_16775 func_216134_b + m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_16776 func_216136_a + f Lnet/minecraft/class_64; field_16884 field_216140_b + f Lnet/minecraft/class_64; field_16883 field_216139_a +c net/minecraft/class_65 net/minecraft/loot/AlternativesLootEntry + m ([Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_387 func_216150_a + m ([Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_65$class_66; method_386 builder +c net/minecraft/class_65$class_66 net/minecraft/loot/AlternativesLootEntry$Builder + m ()Lnet/minecraft/class_65$class_66; method_388 func_212845_d_ + f Ljava/util/List; field_979 lootEntries +c net/minecraft/class_67 net/minecraft/loot/DynamicLootEntry + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_85$class_86; method_390 func_216162_a + m (Lnet/minecraft/class_2960;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; method_391 func_216164_a + m (Lnet/minecraft/class_67;)Lnet/minecraft/class_2960; method_389 func_216163_a + f Lnet/minecraft/class_2960; field_980 name +c net/minecraft/class_67$class_68 net/minecraft/loot/DynamicLootEntry$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_67; method_392 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_67;Lcom/google/gson/JsonSerializationContext;)V method_393 doSerialize +c net/minecraft/class_67$1 net/minecraft/loot/DynamicLootEntry$1 +c net/minecraft/class_69 net/minecraft/loot/ParentedLootEntry + m (Lnet/minecraft/class_69$class_70;)Lnet/minecraft/class_79$class_5337; method_395 getSerializer + m ([Lnet/minecraft/class_64;)Lnet/minecraft/class_64; method_394 combineChildren + f Lnet/minecraft/class_64; field_983 children + f [Lnet/minecraft/class_79; field_982 entries +c net/minecraft/class_69$class_70 net/minecraft/loot/ParentedLootEntry$IFactory + m ([Lnet/minecraft/class_79;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_69; create create +c net/minecraft/class_69$1 net/minecraft/loot/ParentedLootEntry$1 + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_69; method_29313 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_69;Lcom/google/gson/JsonSerializationContext;)V method_29314 doSerialize + f Lnet/minecraft/class_69$class_70; field_25205 field_216187_a +c net/minecraft/class_93 net/minecraft/loot/GroupLootEntry + m ([Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_452 func_216152_a + m (Lnet/minecraft/class_64;Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_29315 func_216151_a +c net/minecraft/class_73 net/minecraft/loot/EmptyLootEntry + m ()Lnet/minecraft/class_85$class_86; method_401 func_216167_a +c net/minecraft/class_73$class_74 net/minecraft/loot/EmptyLootEntry$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_73; method_402 deserialize +c net/minecraft/class_73$1 net/minecraft/loot/EmptyLootEntry$1 +c net/minecraft/class_75 net/minecraft/loot/LootEntryManager + m (Ljava/lang/String;Lnet/minecraft/class_5335;)Lnet/minecraft/class_5338; method_29317 register + m ()Ljava/lang/Object; method_29316 func_237418_a_ + f Lnet/minecraft/class_5338; field_25208 LOOT_TABLE + f Lnet/minecraft/class_5338; field_25209 DYNAMIC + f Lnet/minecraft/class_5338; field_25210 TAG + f Lnet/minecraft/class_5338; field_25211 ALTERNATIVE + f Lnet/minecraft/class_5338; field_25206 EMPTY + f Lnet/minecraft/class_5338; field_25207 ITEM + f Lnet/minecraft/class_5338; field_25212 SEQUENCE + f Lnet/minecraft/class_5338; field_25213 GROUP +c net/minecraft/class_77 net/minecraft/loot/ItemLootEntry + m (Lnet/minecraft/class_77;)Lnet/minecraft/class_1792; method_410 func_216170_a + m (Lnet/minecraft/class_1935;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; method_409 func_216169_a + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_85$class_86; method_411 builder + f Lnet/minecraft/class_1792; field_987 item +c net/minecraft/class_77$class_78 net/minecraft/loot/ItemLootEntry$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_77; method_413 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_77;Lcom/google/gson/JsonSerializationContext;)V method_412 doSerialize +c net/minecraft/class_77$1 net/minecraft/loot/ItemLootEntry$1 +c net/minecraft/class_79 net/minecraft/loot/LootEntry + m (Lnet/minecraft/class_58;)V method_415 func_225579_a_ + m ()Lnet/minecraft/class_5338; method_29318 func_230420_a_ + m (Lnet/minecraft/class_47;)Z method_414 test + f Ljava/util/function/Predicate; field_989 field_216143_c + f [Lnet/minecraft/class_5341; field_988 conditions +c net/minecraft/class_79$class_80 net/minecraft/loot/LootEntry$Builder + m ()[Lnet/minecraft/class_5341; method_420 func_216079_f + m (Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_79$class_80; method_421 acceptCondition + m ()Lnet/minecraft/class_79; method_419 build + m (Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_65$class_66; method_417 alternatively + m ()Lnet/minecraft/class_79$class_80; method_416 cast + m ()Lnet/minecraft/class_79$class_80; method_418 func_212845_d_ + f Ljava/util/List; field_990 field_216082_a +c net/minecraft/class_79$class_5337 net/minecraft/loot/LootEntry$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_79; method_424 deserialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_79; method_29319 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_79;Lcom/google/gson/JsonSerializationContext;)V method_29320 serialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_79;Lcom/google/gson/JsonSerializationContext;)V method_422 doSerialize +c net/minecraft/class_82 net/minecraft/loot/ILootGenerator + m (F)I method_427 getEffectiveWeight + m (Ljava/util/function/Consumer;Lnet/minecraft/class_47;)V method_426 func_216188_a +c net/minecraft/class_85 net/minecraft/loot/StandaloneLootEntry + m (Ljava/util/function/Consumer;Lnet/minecraft/class_47;)V method_433 func_216154_a + m (Lnet/minecraft/class_85;)Ljava/util/function/BiFunction; method_435 func_216155_a + m (Lnet/minecraft/class_85$class_89;)Lnet/minecraft/class_85$class_86; method_434 builder + f Lnet/minecraft/class_82; field_998 generator + f Ljava/util/function/BiFunction; field_997 combinedFunctions + f I field_995 weight + f I field_994 quality + f [Lnet/minecraft/class_117; field_996 functions +c net/minecraft/class_85$1 net/minecraft/loot/StandaloneLootEntry$1 + f Lnet/minecraft/class_85; field_1002 field_216190_a +c net/minecraft/class_85$class_88 net/minecraft/loot/StandaloneLootEntry$Generator + f Lnet/minecraft/class_85; field_1004 field_216189_b +c net/minecraft/class_85$class_89 net/minecraft/loot/StandaloneLootEntry$ILootEntryBuilder + m (II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; build build +c net/minecraft/class_85$class_90 net/minecraft/loot/StandaloneLootEntry$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_85; method_441 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_85;Lcom/google/gson/JsonSerializationContext;)V method_442 doSerialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; method_443 deserialize +c net/minecraft/class_85$class_86 net/minecraft/loot/StandaloneLootEntry$Builder + m (Lnet/minecraft/class_117$class_118;)Lnet/minecraft/class_85$class_86; method_438 acceptFunction + m (I)Lnet/minecraft/class_85$class_86; method_436 quality + m (I)Lnet/minecraft/class_85$class_86; method_437 weight + m ()[Lnet/minecraft/class_117; method_439 getFunctions + f Ljava/util/List; field_999 functions + f I field_1000 quality + f I field_1001 weight +c net/minecraft/class_85$class_87 net/minecraft/loot/StandaloneLootEntry$BuilderImpl + m ()Lnet/minecraft/class_85$class_87; method_440 func_212845_d_ + f Lnet/minecraft/class_85$class_89; field_1003 builder +c net/minecraft/class_5338 net/minecraft/loot/LootPoolEntryType +c net/minecraft/class_72 net/minecraft/loot/SequenceLootEntry + m ([Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_400 func_216153_a +c net/minecraft/class_83 net/minecraft/loot/TableLootEntry + m (Lnet/minecraft/class_2960;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; method_430 func_216173_a + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_85$class_86; method_428 builder + m (Lnet/minecraft/class_83;)Lnet/minecraft/class_2960; method_429 func_216172_a + f Lnet/minecraft/class_2960; field_993 table +c net/minecraft/class_83$class_84 net/minecraft/loot/TableLootEntry$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_83;Lcom/google/gson/JsonSerializationContext;)V method_431 doSerialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_83; method_432 deserialize +c net/minecraft/class_83$1 net/minecraft/loot/TableLootEntry$1 +c net/minecraft/class_91 net/minecraft/loot/TagLootEntry + m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_85$class_86; method_445 getBuilder + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1792;)V method_449 func_216174_a + m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_447 generateLoot + m (Lnet/minecraft/class_3494;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; method_444 func_216177_a + m (Lnet/minecraft/class_91;)Z method_448 func_216175_b + m (Lnet/minecraft/class_91;)Lnet/minecraft/class_3494; method_446 func_216178_a + f Z field_1006 expand + f Lnet/minecraft/class_3494; field_1005 tag +c net/minecraft/class_91$class_92 net/minecraft/loot/TagLootEntry$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_91;Lcom/google/gson/JsonSerializationContext;)V method_451 doSerialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_91; method_450 deserialize +c net/minecraft/class_91$1 net/minecraft/loot/TagLootEntry$1 + f Lnet/minecraft/class_91; field_1008 field_216192_c + f Lnet/minecraft/class_1792; field_1007 field_216191_a +c net/minecraft/class_104 net/minecraft/loot/functions/ExplosionDecay + m ()Lnet/minecraft/class_120$class_121; method_478 builder +c net/minecraft/class_104$class_105 net/minecraft/loot/functions/ExplosionDecay$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_104; method_479 deserialize +c net/minecraft/class_104$1 net/minecraft/loot/functions/ExplosionDecay$1 +c net/minecraft/class_94 net/minecraft/loot/functions/ApplyBonus + m (Lnet/minecraft/class_94;)Lnet/minecraft/class_1887; method_454 func_215873_a + m ()Ljava/util/Map; method_458 func_215867_b + m (Lnet/minecraft/class_1887;I)Lnet/minecraft/class_120$class_121; method_461 uniformBonusCount + m (Lnet/minecraft/class_1887;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_453 func_215866_b + m (Lnet/minecraft/class_1887;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_457 func_215872_a + m (Lnet/minecraft/class_1887;)Lnet/minecraft/class_120$class_121; method_456 uniformBonusCount + m (Lnet/minecraft/class_1887;)Lnet/minecraft/class_120$class_121; method_455 oreDrops + m (Lnet/minecraft/class_1887;IF[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_459 func_215864_a + m (Lnet/minecraft/class_1887;FI)Lnet/minecraft/class_120$class_121; method_463 binomialWithBonusCount + m (Lnet/minecraft/class_94;)Lnet/minecraft/class_94$class_96; method_460 func_215874_b + m (Lnet/minecraft/class_1887;I[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_462 func_215868_a + f Lnet/minecraft/class_1887; field_1011 enchantment + f Lnet/minecraft/class_94$class_96; field_1009 field_215877_d + f Ljava/util/Map; field_1010 field_215875_a +c net/minecraft/class_94$1 net/minecraft/loot/functions/ApplyBonus$1 +c net/minecraft/class_94$class_100 net/minecraft/loot/functions/ApplyBonus$UniformBonusCountFormula + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_94$class_96; method_471 func_216207_a + f I field_1017 bonusMultiplier + f Lnet/minecraft/class_2960; field_1016 field_216208_a +c net/minecraft/class_94$class_96 net/minecraft/loot/functions/ApplyBonus$IFormula + m ()Lnet/minecraft/class_2960; method_466 func_216203_a + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonSerializationContext;)V method_465 func_216202_a + m (Ljava/util/Random;II)I method_467 func_216204_a +c net/minecraft/class_94$class_97 net/minecraft/loot/functions/ApplyBonus$IFormulaDeserializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_94$class_96; deserialize deserialize +c net/minecraft/class_94$class_98 net/minecraft/loot/functions/ApplyBonus$OreDropsFormula + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_94$class_96; method_468 func_216205_a + f Lnet/minecraft/class_2960; field_1015 field_216206_a +c net/minecraft/class_94$class_99 net/minecraft/loot/functions/ApplyBonus$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_94; method_470 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_94;Lcom/google/gson/JsonSerializationContext;)V method_469 serialize + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonParseException; method_17932 func_216199_a +c net/minecraft/class_94$class_95 net/minecraft/loot/functions/ApplyBonus$BinomialWithBonusCountFormula + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_94$class_96; method_464 func_216210_a + f F field_1012 probability + f I field_1014 extra + f Lnet/minecraft/class_2960; field_1013 field_216211_a +c net/minecraft/class_101 net/minecraft/loot/functions/CopyName + m (Lnet/minecraft/class_101;)Lnet/minecraft/class_101$class_102; method_472 func_215892_a + m (Lnet/minecraft/class_101$class_102;)Lnet/minecraft/class_120$class_121; method_473 builder + m (Lnet/minecraft/class_101$class_102;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_474 func_215891_a + f Lnet/minecraft/class_101$class_102; field_1018 source +c net/minecraft/class_101$class_102 net/minecraft/loot/functions/CopyName$Source + m (Ljava/lang/String;)Lnet/minecraft/class_101$class_102; method_475 byName + m ()[Lnet/minecraft/class_101$class_102; values values + m (Ljava/lang/String;)Lnet/minecraft/class_101$class_102; valueOf valueOf + f Ljava/lang/String; field_1025 name + f Lnet/minecraft/class_101$class_102; field_1023 BLOCK_ENTITY + f [Lnet/minecraft/class_101$class_102; field_1021 $VALUES + f Lnet/minecraft/class_101$class_102; field_1020 KILLER_PLAYER + f Lnet/minecraft/class_101$class_102; field_1019 KILLER + f Lnet/minecraft/class_101$class_102; field_1022 THIS + f Lnet/minecraft/class_169; field_1024 parameter +c net/minecraft/class_101$1 net/minecraft/loot/functions/CopyName$1 +c net/minecraft/class_101$class_103 net/minecraft/loot/functions/CopyName$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_101; method_477 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_101;Lcom/google/gson/JsonSerializationContext;)V method_476 serialize +c net/minecraft/class_4488 net/minecraft/loot/functions/CopyBlockState + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;)V method_21895 func_227548_a_ + m (Lnet/minecraft/class_4488;)Lnet/minecraft/class_2248; method_21894 func_227547_a_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;)Ljava/lang/String; method_21893 func_227546_a_ + m (Lnet/minecraft/class_4488;)Ljava/util/Set; method_21896 func_227549_b_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4488$class_4489; method_21892 func_227545_a_ + f Ljava/util/Set; field_20450 field_227544_c_ + f Lnet/minecraft/class_2248; field_20449 field_227543_a_ +c net/minecraft/class_4488$class_4489 net/minecraft/loot/functions/CopyBlockState$Builder + m ()Lnet/minecraft/class_4488$class_4489; method_21897 doCast + m (Lnet/minecraft/class_2769;)Lnet/minecraft/class_4488$class_4489; method_21898 func_227552_a_ + f Lnet/minecraft/class_2248; field_20451 field_227550_a_ + f Ljava/util/Set; field_20452 field_227551_b_ +c net/minecraft/class_4488$1 net/minecraft/loot/functions/CopyBlockState$1 +c net/minecraft/class_4488$class_4490 net/minecraft/loot/functions/CopyBlockState$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_4488; method_21900 deserialize + m (Lcom/google/gson/JsonArray;Lnet/minecraft/class_2769;)V method_21899 func_227553_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4488;Lcom/google/gson/JsonSerializationContext;)V method_21901 serialize + m (Ljava/util/Set;Lnet/minecraft/class_2689;Lcom/google/gson/JsonElement;)V method_21902 func_227554_a_ + m (Lnet/minecraft/class_2960;)Ljava/lang/IllegalArgumentException; method_21903 func_227555_a_ +c net/minecraft/class_109 net/minecraft/loot/functions/EnchantRandomly + m ([Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_488 func_237422_a_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1887;Ljava/util/Random;)Lnet/minecraft/class_1799; method_26266 func_237420_a_ + m (Lnet/minecraft/class_109;)Ljava/util/List; method_487 func_215898_a + m ()Lnet/minecraft/class_120$class_121; method_489 func_215900_c + m (ZLnet/minecraft/class_1799;Lnet/minecraft/class_1887;)Z method_26267 func_237421_a_ + f Lorg/apache/logging/log4j/Logger; field_1031 LOGGER + f Ljava/util/List; field_1030 enchantments +c net/minecraft/class_109$class_4954 net/minecraft/loot/functions/EnchantRandomly$Builder + m (Lnet/minecraft/class_1887;)Lnet/minecraft/class_109$class_4954; method_25992 func_237424_a_ + m ()Lnet/minecraft/class_109$class_4954; method_25991 doCast + f Ljava/util/Set; field_23090 field_237423_a_ +c net/minecraft/class_109$1 net/minecraft/loot/functions/EnchantRandomly$1 +c net/minecraft/class_109$class_110 net/minecraft/loot/functions/EnchantRandomly$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_109; method_490 deserialize + m (Ljava/lang/String;)Lcom/google/gson/JsonSyntaxException; method_17933 func_216200_a + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_109;Lcom/google/gson/JsonSerializationContext;)V method_491 serialize +c net/minecraft/class_3837 net/minecraft/loot/functions/CopyNbt + m (Lnet/minecraft/class_3837;)Ljava/util/List; method_16852 func_215886_b + m (Lnet/minecraft/class_3837;)Lnet/minecraft/class_3837$class_3840; method_16849 func_215879_a + m (Ljava/lang/String;)Lnet/minecraft/class_2203$class_2209; method_16850 func_215878_a + m ()Ljava/util/function/Function; method_16851 func_215884_b + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2520;Lnet/minecraft/class_3837$class_3839;)V method_16846 func_215885_a + m ()Ljava/util/function/Function; method_16854 func_215883_c + m (Ljava/lang/String;)Lnet/minecraft/class_2203$class_2209; method_16853 parsePath + m (Lnet/minecraft/class_3837$class_3840;)Lnet/minecraft/class_3837$class_3838; method_16848 builder + m (Lnet/minecraft/class_2586;)Lnet/minecraft/class_2520; method_16847 func_215882_a + f Ljava/util/function/Function; field_17015 field_215889_d + f Ljava/util/function/Function; field_17016 field_215890_e + f Lnet/minecraft/class_3837$class_3840; field_17013 field_215887_a + f Ljava/util/List; field_17014 field_215888_c +c net/minecraft/class_3837$1 net/minecraft/loot/functions/CopyNbt$1 +c net/minecraft/class_3837$class_3839 net/minecraft/loot/functions/CopyNbt$Operation + m ()Lcom/google/gson/JsonObject; method_16858 serialize + m (Ljava/util/function/Supplier;Lnet/minecraft/class_2520;)V method_16860 func_216216_a + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3837$class_3839; method_16859 deserialize + f Lnet/minecraft/class_2203$class_2209; field_17020 field_216218_b + f Lnet/minecraft/class_2203$class_2209; field_17022 field_216220_d + f Ljava/lang/String; field_17021 target + f Ljava/lang/String; field_17019 source + f Lnet/minecraft/class_3837$class_3841; field_17023 action +c net/minecraft/class_3837$class_3840 net/minecraft/loot/functions/CopyNbt$Source + m ()[Lnet/minecraft/class_3837$class_3840; values values + m (Lnet/minecraft/class_169;Ljava/util/function/Function;Lnet/minecraft/class_47;)Lnet/minecraft/class_2520; method_16861 func_216222_a + m (Ljava/lang/String;)Lnet/minecraft/class_3837$class_3840; method_16862 getByName + m (Ljava/lang/String;)Lnet/minecraft/class_3837$class_3840; valueOf valueOf + f Lnet/minecraft/class_3837$class_3840; field_17025 KILLER + f Lnet/minecraft/class_3837$class_3840; field_17026 KILLER_PLAYER + f Ljava/util/function/Function; field_17030 field_216226_g + f Lnet/minecraft/class_169; field_17029 lootParam + f Lnet/minecraft/class_3837$class_3840; field_17027 BLOCK_ENTITY + f Ljava/lang/String; field_17028 sourceName + f [Lnet/minecraft/class_3837$class_3840; field_17031 $VALUES + f Lnet/minecraft/class_3837$class_3840; field_17024 THIS +c net/minecraft/class_3837$class_3841 net/minecraft/loot/functions/CopyNbt$Action + m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)V method_16864 runAction + m ()[Lnet/minecraft/class_3837$class_3841; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3837$class_3841; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_3837$class_3841; method_16865 getByName + m (Lnet/minecraft/class_3837$class_3841;)Ljava/lang/String; method_16863 func_216228_a + f Ljava/lang/String; field_17035 op + f [Lnet/minecraft/class_3837$class_3841; field_17036 $VALUES + f Lnet/minecraft/class_3837$class_3841; field_17032 REPLACE + f Lnet/minecraft/class_3837$class_3841; field_17033 APPEND + f Lnet/minecraft/class_3837$class_3841; field_17034 MERGE +c net/minecraft/class_3837$class_3841$3 net/minecraft/loot/functions/CopyNbt$Action$3 + m (Ljava/util/List;Lnet/minecraft/class_2520;)V method_16869 func_216234_a + m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;)V method_16868 func_216233_a +c net/minecraft/class_3837$class_3841$2 net/minecraft/loot/functions/CopyNbt$Action$2 + m (Ljava/util/List;Lnet/minecraft/class_2520;)V method_16867 func_216232_a + m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;)V method_16866 func_216231_a +c net/minecraft/class_3837$class_3841$1 net/minecraft/loot/functions/CopyNbt$Action$1 +c net/minecraft/class_3837$class_3842 net/minecraft/loot/functions/CopyNbt$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_3837; method_16871 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_3837;Lcom/google/gson/JsonSerializationContext;)V method_16870 serialize +c net/minecraft/class_3837$class_3838 net/minecraft/loot/functions/CopyNbt$Builder + m ()Lnet/minecraft/class_3837$class_3838; method_16855 doCast + m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_3837$class_3838; method_16856 replaceOperation + m (Ljava/lang/String;Ljava/lang/String;Lnet/minecraft/class_3837$class_3841;)Lnet/minecraft/class_3837$class_3838; method_16857 addOperation + f Ljava/util/List; field_17018 operations + f Lnet/minecraft/class_3837$class_3840; field_17017 source +c net/minecraft/class_111 net/minecraft/loot/functions/ExplorationMap + m ()Lorg/apache/logging/log4j/Logger; method_498 func_215907_c + m (Lnet/minecraft/class_111;)I method_494 func_215909_d + m (Lnet/minecraft/class_111;)Lnet/minecraft/class_3195; method_497 func_237426_a_ + m ()Lnet/minecraft/class_111$class_112; method_492 func_215903_b + m (Lnet/minecraft/class_111;)Lnet/minecraft/class_20$class_21; method_493 func_215908_b + m (Lnet/minecraft/class_111;)B method_496 func_215906_c + m (Lnet/minecraft/class_111;)Z method_495 func_215905_e + f Lnet/minecraft/class_3195; field_1035 destination + f I field_1032 searchRadius + f Lorg/apache/logging/log4j/Logger; field_1038 LOGGER + f Lnet/minecraft/class_20$class_21; field_1036 decoration + f Lnet/minecraft/class_3195; field_25032 field_237425_a_ + f B field_1037 zoom + f Z field_1033 skipExistingChunks + f Lnet/minecraft/class_20$class_21; field_1034 field_215910_a +c net/minecraft/class_111$class_112 net/minecraft/loot/functions/ExplorationMap$Builder + m (Lnet/minecraft/class_20$class_21;)Lnet/minecraft/class_111$class_112; method_499 func_216064_a + m (Lnet/minecraft/class_3195;)Lnet/minecraft/class_111$class_112; method_502 func_237427_a_ + m (B)Lnet/minecraft/class_111$class_112; method_500 func_216062_a + m ()Lnet/minecraft/class_111$class_112; method_501 doCast + m (Z)Lnet/minecraft/class_111$class_112; method_503 func_216063_a + f I field_1040 field_216069_d + f Z field_1041 field_216070_e + f Lnet/minecraft/class_3195; field_1039 field_216066_a + f B field_1043 field_216068_c + f Lnet/minecraft/class_20$class_21; field_1042 field_216067_b +c net/minecraft/class_111$class_113 net/minecraft/loot/functions/ExplorationMap$Serializer + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3195; method_29039 func_237428_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_111;Lcom/google/gson/JsonSerializationContext;)V method_505 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_111; method_504 deserialize +c net/minecraft/class_111$1 net/minecraft/loot/functions/ExplorationMap$1 +c net/minecraft/class_106 net/minecraft/loot/functions/EnchantWithLevels + m (Lnet/minecraft/class_106;)Lnet/minecraft/class_59; method_480 func_215897_a + m (Lnet/minecraft/class_59;)Lnet/minecraft/class_106$class_107; method_481 func_215895_a + m (Lnet/minecraft/class_106;)Z method_482 func_215896_b + f Z field_1027 isTreasure + f Lnet/minecraft/class_59; field_1026 randomLevel +c net/minecraft/class_106$class_108 net/minecraft/loot/functions/EnchantWithLevels$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_106;Lcom/google/gson/JsonSerializationContext;)V method_485 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_106; method_486 deserialize +c net/minecraft/class_106$class_107 net/minecraft/loot/functions/EnchantWithLevels$Builder + m ()Lnet/minecraft/class_106$class_107; method_484 func_216059_e + m ()Lnet/minecraft/class_106$class_107; method_483 doCast + f Z field_1029 field_216061_b + f Lnet/minecraft/class_59; field_1028 field_216060_a +c net/minecraft/class_106$1 net/minecraft/loot/functions/EnchantWithLevels$1 +c net/minecraft/class_116 net/minecraft/loot/ILootFunctionConsumer + m ()Ljava/lang/Object; method_512 cast + m (Lnet/minecraft/class_117$class_118;)Ljava/lang/Object; method_511 acceptFunction +c net/minecraft/class_3668 net/minecraft/loot/functions/FillPlayerHead + m (Lnet/minecraft/class_3668;)Lnet/minecraft/class_47$class_50; method_15956 func_215901_a + f Lnet/minecraft/class_47$class_50; field_16227 field_215902_a +c net/minecraft/class_3668$class_3669 net/minecraft/loot/functions/FillPlayerHead$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_3668;Lcom/google/gson/JsonSerializationContext;)V method_15957 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_3668; method_15958 deserialize +c net/minecraft/class_120 net/minecraft/loot/LootFunction + m (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; apply apply + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Lnet/minecraft/class_1799; method_522 doApply + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Lnet/minecraft/class_1799; method_521 apply + m (Ljava/util/function/Function;)Lnet/minecraft/class_120$class_121; method_520 builder + f [Lnet/minecraft/class_5341; field_1047 conditions + f Ljava/util/function/Predicate; field_1048 combinedConditions +c net/minecraft/class_120$class_123 net/minecraft/loot/LootFunction$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_120; method_530 deserialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_120; method_528 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_120;Lcom/google/gson/JsonSerializationContext;)V method_529 serialize +c net/minecraft/class_120$class_121 net/minecraft/loot/LootFunction$Builder + m ()[Lnet/minecraft/class_5341; method_526 getConditions + m ()Lnet/minecraft/class_120$class_121; method_523 doCast + m (Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_120$class_121; method_524 acceptCondition + m ()Lnet/minecraft/class_120$class_121; method_525 cast + f Ljava/util/List; field_1049 conditions +c net/minecraft/class_120$class_122 net/minecraft/loot/LootFunction$SimpleBuilder + m ()Lnet/minecraft/class_120$class_122; method_527 doCast + f Ljava/util/function/Function; field_1050 function +c net/minecraft/class_114 net/minecraft/loot/functions/LimitCount + m (Lnet/minecraft/class_42;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_508 func_215912_a + m (Lnet/minecraft/class_114;)Lnet/minecraft/class_42; method_507 func_215913_a + m (Lnet/minecraft/class_42;)Lnet/minecraft/class_120$class_121; method_506 func_215911_a + f Lnet/minecraft/class_42; field_1044 field_215914_a +c net/minecraft/class_114$class_115 net/minecraft/loot/functions/LimitCount$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_114; method_509 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_114;Lcom/google/gson/JsonSerializationContext;)V method_510 serialize +c net/minecraft/class_114$1 net/minecraft/loot/functions/LimitCount$1 +c net/minecraft/class_5339 net/minecraft/loot/LootFunctionType +c net/minecraft/class_117 net/minecraft/loot/functions/ILootFunction + m (Ljava/util/function/BiFunction;Ljava/util/function/Consumer;Lnet/minecraft/class_47;)Ljava/util/function/Consumer; method_513 func_215858_a + m (Ljava/util/function/Consumer;Ljava/util/function/BiFunction;Lnet/minecraft/class_47;Lnet/minecraft/class_1799;)V method_514 func_215857_a + m ()Lnet/minecraft/class_5339; method_29321 getFunctionType +c net/minecraft/class_117$class_118 net/minecraft/loot/functions/ILootFunction$IBuilder + m ()Lnet/minecraft/class_117; method_515 build +c net/minecraft/class_125 net/minecraft/loot/functions/LootingEnchantBonus + m (Lnet/minecraft/class_125;)Z method_548 func_215918_b + m (Lnet/minecraft/class_125;)I method_546 func_215916_c + m (Lnet/minecraft/class_125;)Lnet/minecraft/class_61; method_550 func_215919_a + m (Lnet/minecraft/class_61;)Lnet/minecraft/class_125$class_126; method_547 builder + m ()Z method_549 func_215917_b + f Lnet/minecraft/class_61; field_1082 count + f I field_1083 limit +c net/minecraft/class_125$class_126 net/minecraft/loot/functions/LootingEnchantBonus$Builder + m (I)Lnet/minecraft/class_125$class_126; method_551 func_216072_a + m ()Lnet/minecraft/class_125$class_126; method_552 doCast + f I field_1085 field_216074_b + f Lnet/minecraft/class_61; field_1084 field_216073_a +c net/minecraft/class_125$1 net/minecraft/loot/functions/LootingEnchantBonus$1 +c net/minecraft/class_125$class_127 net/minecraft/loot/functions/LootingEnchantBonus$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_125;Lcom/google/gson/JsonSerializationContext;)V method_553 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_125; method_554 deserialize +c net/minecraft/class_131 net/minecraft/loot/functions/LootFunctionManager + m (Ljava/lang/String;Lnet/minecraft/class_5335;)Lnet/minecraft/class_5339; method_29323 func_237451_a_ + m ()Ljava/lang/Object; method_29322 func_237450_a_ + m ([Ljava/util/function/BiFunction;)Ljava/util/function/BiFunction; method_594 combine + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Lnet/minecraft/class_1799; method_592 func_216240_a + m (Ljava/util/function/BiFunction;Ljava/util/function/BiFunction;Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Lnet/minecraft/class_1799; method_591 func_216239_a + m ([Ljava/util/function/BiFunction;Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Lnet/minecraft/class_1799; method_595 func_216238_a + f Lnet/minecraft/class_5339; field_25226 SET_CONTENTS + f Lnet/minecraft/class_5339; field_25225 COPY_NAME + f Lnet/minecraft/class_5339; field_25224 SET_STEW_EFFECT + f Lnet/minecraft/class_5339; field_25223 EXPLORATION_MAP + f Lnet/minecraft/class_5339; field_25222 SET_NAME + f Lnet/minecraft/class_5339; field_25232 FILL_PLAYER_HEAD + f Lnet/minecraft/class_5339; field_25231 SET_LORE + f Lnet/minecraft/class_5339; field_25230 EXPLOSION_DECAY + f Lnet/minecraft/class_5339; field_25229 SET_LOOT_TABLE + f Lnet/minecraft/class_5339; field_25228 APPLY_BONUS + f Lnet/minecraft/class_5339; field_25227 LIMIT_COUNT + f Lnet/minecraft/class_5339; field_25216 ENCHANT_RANDOMLY + f Lnet/minecraft/class_5339; field_25215 ENCHANT_WITH_LEVELS + f Lnet/minecraft/class_5339; field_25214 SET_COUNT + f Ljava/util/function/BiFunction; field_1102 IDENTITY + f Lnet/minecraft/class_5339; field_25234 COPY_STATE + f Lnet/minecraft/class_5339; field_25233 COPY_NBT + f Lnet/minecraft/class_5339; field_25221 SET_ATTRIBUTES + f Lnet/minecraft/class_5339; field_25220 SET_DAMAGE + f Lnet/minecraft/class_5339; field_25219 LOOTING_ENCHANT + f Lnet/minecraft/class_5339; field_25218 FURNACE_SMELT + f Lnet/minecraft/class_5339; field_25217 SET_NBT +c net/minecraft/class_134 net/minecraft/loot/functions/SetContents + m ()Lnet/minecraft/class_134$class_135; method_601 builderIn + m (Lnet/minecraft/class_2371;Lnet/minecraft/class_47;Lnet/minecraft/class_82;)V method_600 func_215922_a + m (Lnet/minecraft/class_47;Lnet/minecraft/class_2371;Lnet/minecraft/class_79;)V method_599 func_215921_a + m (Lnet/minecraft/class_134;)Ljava/util/List; method_598 func_215923_a + f Ljava/util/List; field_1103 field_215924_a +c net/minecraft/class_134$class_135 net/minecraft/loot/functions/SetContents$Builder + m (Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_134$class_135; method_602 addLootEntry + m ()Lnet/minecraft/class_134$class_135; method_603 doCast + f Ljava/util/List; field_1104 lootEntries +c net/minecraft/class_134$1 net/minecraft/loot/functions/SetContents$1 +c net/minecraft/class_134$class_136 net/minecraft/loot/functions/SetContents$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_134;Lcom/google/gson/JsonSerializationContext;)V method_604 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_134; method_605 deserialize +c net/minecraft/class_137 net/minecraft/loot/functions/SetAttributes + m (Lnet/minecraft/class_137;)Ljava/util/List; method_606 func_215925_a + f Ljava/util/List; field_1105 modifiers +c net/minecraft/class_137$class_139 net/minecraft/loot/functions/SetAttributes$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_137;Lcom/google/gson/JsonSerializationContext;)V method_618 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_137; method_617 deserialize +c net/minecraft/class_137$class_138 net/minecraft/loot/functions/SetAttributes$Modifier + m (Lnet/minecraft/class_137$class_138;)Lnet/minecraft/class_61; method_616 access$400 + m (Lnet/minecraft/class_137$class_138;)Lnet/minecraft/class_1322$class_1323; method_607 func_216245_f + m (Ljava/lang/String;)Lnet/minecraft/class_1322$class_1323; method_609 func_216246_a + m (Lnet/minecraft/class_137$class_138;)[Lnet/minecraft/class_1304; method_608 access$100 + m (Lnet/minecraft/class_137$class_138;)Ljava/util/UUID; method_613 access$000 + m (Lnet/minecraft/class_137$class_138;)Ljava/lang/String; method_611 access$300 + m (Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonObject; method_615 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_137$class_138; method_614 deserialize + m (Lnet/minecraft/class_1322$class_1323;)Ljava/lang/String; method_612 func_216244_a + m (Lnet/minecraft/class_137$class_138;)Lnet/minecraft/class_1320; method_610 func_237452_c_ + f Ljava/lang/String; field_1107 modifierName + f Lnet/minecraft/class_61; field_1108 amount + f Lnet/minecraft/class_1322$class_1323; field_1109 operation + f Ljava/util/UUID; field_1111 uuid + f [Lnet/minecraft/class_1304; field_1112 slots + f Lnet/minecraft/class_1320; field_1110 attributeName +c net/minecraft/class_137$1 net/minecraft/loot/functions/SetAttributes$1 + f [I field_1106 field_216243_a +c net/minecraft/class_141 net/minecraft/loot/functions/SetCount + m (Lnet/minecraft/class_141;)Lnet/minecraft/class_59; method_619 func_215933_a + m (Lnet/minecraft/class_59;)Lnet/minecraft/class_120$class_121; method_621 builder + m (Lnet/minecraft/class_59;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_620 func_215934_a + f Lnet/minecraft/class_59; field_1114 countRange +c net/minecraft/class_141$class_142 net/minecraft/loot/functions/SetCount$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_141;Lcom/google/gson/JsonSerializationContext;)V method_623 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_141; method_622 deserialize +c net/minecraft/class_141$1 net/minecraft/loot/functions/SetCount$1 +c net/minecraft/class_144 net/minecraft/loot/functions/SetLootTable + m (Lnet/minecraft/class_144;)J method_625 func_215927_b + m (Lnet/minecraft/class_144;)Lnet/minecraft/class_2960; method_624 func_215926_a + f J field_1117 field_215929_c + f Lnet/minecraft/class_2960; field_1116 field_215928_a +c net/minecraft/class_144$class_145 net/minecraft/loot/functions/SetLootTable$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_144;Lcom/google/gson/JsonSerializationContext;)V method_626 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_144; method_627 deserialize +c net/minecraft/class_144$1 net/minecraft/loot/functions/SetLootTable$1 +c net/minecraft/class_3671 net/minecraft/loot/functions/SetLore + m (Lnet/minecraft/class_3671;)Lnet/minecraft/class_47$class_50; method_15967 func_215941_c + m (Lnet/minecraft/class_3671;)Z method_15961 func_215944_a + m (Lnet/minecraft/class_3671;)Ljava/util/List; method_15963 func_215943_b + m (Lnet/minecraft/class_1799;Z)Lnet/minecraft/class_2499; method_15964 func_215942_a + f Z field_16232 replace + f Lnet/minecraft/class_47$class_50; field_16233 field_215947_d + f Ljava/util/List; field_16231 lore +c net/minecraft/class_3671$class_3672 net/minecraft/loot/functions/SetLore$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_3671; method_15968 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_3671;Lcom/google/gson/JsonSerializationContext;)V method_15969 serialize +c net/minecraft/class_149 net/minecraft/loot/functions/SetDamage + m (Lnet/minecraft/class_149;)Lnet/minecraft/class_61; method_632 access$000 + m (Lnet/minecraft/class_61;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_634 func_215930_a + m (Lnet/minecraft/class_61;)Lnet/minecraft/class_120$class_121; method_633 func_215931_a + f Lorg/apache/logging/log4j/Logger; field_1121 LOGGER + f Lnet/minecraft/class_61; field_1120 damageRange +c net/minecraft/class_149$class_150 net/minecraft/loot/functions/SetDamage$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_149; method_635 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_149;Lcom/google/gson/JsonSerializationContext;)V method_636 serialize +c net/minecraft/class_149$1 net/minecraft/loot/functions/SetDamage$1 +c net/minecraft/class_159 net/minecraft/loot/functions/SetNBT + m (Lnet/minecraft/class_2487;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_675 func_215951_a + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_120$class_121; method_677 builder + m (Lnet/minecraft/class_159;)Lnet/minecraft/class_2487; method_676 access$000 + f Lnet/minecraft/class_2487; field_1138 tag +c net/minecraft/class_159$class_160 net/minecraft/loot/functions/SetNBT$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_159; method_679 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_159;Lcom/google/gson/JsonSerializationContext;)V method_678 serialize +c net/minecraft/class_159$1 net/minecraft/loot/functions/SetNBT$1 +c net/minecraft/class_3670 net/minecraft/loot/functions/SetName + m (Lnet/minecraft/class_3670;)Lnet/minecraft/class_47$class_50; method_15959 func_215935_b + m (Lnet/minecraft/class_3670;)Lnet/minecraft/class_2561; method_15960 access$000 + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_16191 func_215938_b + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_16189 func_215937_a + m (Lnet/minecraft/class_47;Lnet/minecraft/class_47$class_50;)Ljava/util/function/UnaryOperator; method_16190 func_215936_a + f Lorg/apache/logging/log4j/Logger; field_16230 LOGGER + f Lnet/minecraft/class_2561; field_16228 name + f Lnet/minecraft/class_47$class_50; field_16229 field_215940_d +c net/minecraft/class_3670$class_147 net/minecraft/loot/functions/SetName$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_3670; method_629 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_3670;Lcom/google/gson/JsonSerializationContext;)V method_630 serialize +c net/minecraft/class_3670$1 net/minecraft/loot/functions/SetName$1 +c net/minecraft/class_165 net/minecraft/loot/functions/Smelt + m ()Lnet/minecraft/class_120$class_121; method_724 func_215953_b + f Lorg/apache/logging/log4j/Logger; field_1159 LOGGER +c net/minecraft/class_165$class_5340 net/minecraft/loot/functions/Smelt$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_165; method_29324 deserialize +c net/minecraft/class_165$1 net/minecraft/loot/functions/Smelt$1 +c net/minecraft/class_152 net/minecraft/loot/functions/SetStewEffect + m ()Lnet/minecraft/class_152$class_153; method_637 func_215948_b + m (Lnet/minecraft/class_152;)Ljava/util/Map; method_638 func_215949_a + f Ljava/util/Map; field_1122 field_215950_a +c net/minecraft/class_152$class_154 net/minecraft/loot/functions/SetStewEffect$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_152; method_641 deserialize + m (Ljava/lang/String;)Lcom/google/gson/JsonSyntaxException; method_17935 func_216201_a + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_152;Lcom/google/gson/JsonSerializationContext;)V method_642 serialize +c net/minecraft/class_152$class_153 net/minecraft/loot/functions/SetStewEffect$Builder + m ()Lnet/minecraft/class_152$class_153; method_639 doCast + m (Lnet/minecraft/class_1291;Lnet/minecraft/class_61;)Lnet/minecraft/class_152$class_153; method_640 func_216077_a + f Ljava/util/Map; field_1123 field_216078_a +c net/minecraft/class_152$1 net/minecraft/loot/functions/SetStewEffect$1 +c net/minecraft/server/MinecraftServer net/minecraft/server/MinecraftServer + m ()Lnet/minecraft/class_3218; method_30002 func_241755_D_ + m ()Z method_20415 driveOneInternal + m (Lnet/minecraft/class_3222;)V method_19465 sendDifficultyToPlayer + m ()Z method_3775 getPreventProxyConnections + m (Lnet/minecraft/class_1267;Z)V method_3776 setDifficultyForAllWorlds + m (Ljava/util/Collection;Ljava/lang/String;)Z method_29738 func_240781_a_ + m ()Lnet/minecraft/class_3324; method_3760 getPlayerList + m ()Lnet/minecraft/class_1928; method_3767 getGameRules + m ()V method_3821 systemExitNow + m (Lnet/minecraft/class_1934;ZI)Z method_3763 shareToLAN + m (Ljava/lang/String;Ljava/lang/String;)V method_3843 setResourcePack + m ()Z method_24488 func_240789_aP_ + m ()V method_3782 stopServer + m (Z)V method_3745 setAllowFlight + m (Ljava/nio/file/Path;)V method_21616 dumpClasspath + m (Lnet/minecraft/class_3218;)I method_3829 getSpawnRadius + m (Ljava/util/concurrent/atomic/AtomicReference;)V method_29739 func_240783_a_ + m (Ljava/util/Collection;)Lcom/google/common/collect/ImmutableList; method_29442 func_244269_b + m (Ljava/util/Collection;)Ljava/util/concurrent/CompletableFuture; method_29439 func_240780_a_ + m ()Lorg/apache/logging/log4j/Logger; method_3753 access$000 + m ()J method_3826 getServerTime + m (I)V method_3779 setServerPort + m ()Z method_3828 isServerInOnlineMode + m ()Z method_3759 shouldUseNativeTransport + m ()Z method_3823 init + m (Lnet/minecraft/class_3324;)V method_3846 setPlayerList + m (Lnet/minecraft/class_2926;)V method_3791 applyServerIconToResponse + m (Ljava/nio/file/Path;)V method_21713 dumpThreads + m ()Ljava/util/Set; method_29435 func_240770_D_ + m ()I method_3780 getTickCounter + m ()Ljava/util/Optional; method_24307 func_230045_q_ + m (Lnet/minecraft/class_3738;)V method_24306 run + m ()Lcom/mojang/authlib/GameProfileRepository; method_3719 getGameProfileRepository + m ()I method_3773 getNetworkCompressionThreshold + m (Z)V method_3815 setAllowPvp + m ()I method_3756 getServerPort + m ()Z method_3761 getForceGamemode + m (Lcom/mojang/authlib/GameProfile;)Z method_19466 isServerOwner + m (Lnet/minecraft/class_128;)Lnet/minecraft/class_128; method_3859 addServerInfoToCrashReport + m ()Lnet/minecraft/class_2995; method_3845 getScoreboard + m ()Lnet/minecraft/class_2168; method_3739 getCommandSource + m ()Ljava/lang/String; getServerModName getServerModName + m ()Lnet/minecraft/class_1934; method_3790 getGameType + m (Lcom/google/common/collect/ImmutableList;)Ljava/util/concurrent/CompletionStage; method_29437 func_240775_a_ + m ()Z method_3783 func_230536_N_ + m ()Lnet/minecraft/class_5455; method_30611 func_244267_aX + m ()Ljava/lang/String; method_3825 func_244270_be + m (Ljava/security/KeyPair;)V method_3853 setKeyPair + m ()Lnet/minecraft/class_2989; method_3851 getAdvancementManager + m (I)V method_3850 setBuildLimit + m ()Lnet/minecraft/class_3283; method_3836 getResourcePacks + m (Ljava/nio/file/Path;)V method_21614 dumpDummyCrashReport + m (Z)V method_3731 setWhitelistEnabled + m ()Z method_3806 isServerRunning + m ()Z method_3750 isServerStopped + m ()I method_3798 getOpPermissionLevel + m (Z)V method_3747 initiateShutdown + m (Lnet/minecraft/class_3738;)Z method_19464 canRun + m ()Z method_3860 getPublic + m (Ljava/lang/String;)Ljava/io/File; method_3758 getFile + m ()Ljava/lang/String; method_3784 getResourcePackUrl + m (Lcom/mojang/authlib/GameProfile;)I method_3835 getPermissionLevel + m (Lnet/minecraft/class_1934;)V method_3838 setGameType + m (Lnet/minecraft/class_4758;)V method_24487 func_240773_a_ + m ()Lnet/minecraft/class_1276; method_3795 getSnooper + m ()V method_27729 func_240794_aZ_ + m ()Z method_3796 func_230537_U_ + m ()Ljava/lang/String; method_3805 getResourcePackHash + m ()I method_3841 getSpawnProtectionSize + m ()Z method_3724 isSinglePlayer + m ()V method_3832 func_240790_aQ_ + m (Ljava/util/function/Function;)Lnet/minecraft/server/MinecraftServer; method_29740 startServer + m ()Z method_3754 isHardcore + m (Ljava/lang/Runnable;)Lnet/minecraft/class_3738; method_16209 wrapTask + m (Lnet/minecraft/class_1959;)Z method_31146 func_244265_a + m (Z)V method_3794 setForceGamemode + m ()Lcom/mojang/authlib/minecraft/MinecraftSessionService; method_3844 getMinecraftSessionService + m ()Lnet/minecraft/class_3242; method_3787 getNetworkSystem + m (Ljava/nio/file/Path;)V method_21615 dumpGameRules + m ()Z method_3812 isCommandBlockEnabled + m ()Lnet/minecraft/class_3485; method_27727 getTemplateManager + m (I)I method_27903 func_230512_b_ + m (Ljava/util/function/BooleanSupplier;)V method_3748 tick + m (Lnet/minecraft/class_3283;Lnet/minecraft/class_5359;Z)Lnet/minecraft/class_5359; method_29736 func_240772_a_ + m ()Z method_3866 isAheadOfTime + m ()I method_3833 getBuildLimit + m (Ljava/util/Collection;Lnet/minecraft/class_5350;)V method_29440 func_240782_a_ + m (Lnet/minecraft/class_4758;)V method_24490 func_240795_b_ + m ()Lnet/minecraft/class_5219; method_27728 getServerConfiguration + m ()Ljava/lang/String; method_17818 func_240798_ba_ + m ()Z method_3732 allowLoggingRcon + m (Ljava/lang/String;)V method_17819 setServerId + m ()Ljava/io/File; method_3725 getWorldIconFile + m ()Lnet/minecraft/class_2991; method_3740 getFunctionManager + m ()Lnet/minecraft/class_3312; method_3793 getPlayerProfileCache + m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_3218; method_3847 getWorld + m ()Lnet/minecraft/class_3696; method_24489 func_240791_aR_ + m ()V method_16208 runScheduledTasks + m ()Ljava/lang/String; method_3827 getMinecraftVersion + m ()Lnet/minecraft/class_4567; method_22828 func_229736_aP_ + m (ZZZ)Z method_3723 save + m (Ljava/util/function/BooleanSupplier;)V method_3813 updateTimeLightAndEntities + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)Z method_3785 isBlockProtected + m ()I method_3749 getMaxWorldSize + m ()Z method_3852 isPVPEnabled + m (Z)V method_3730 setDemo + m ()I method_3802 getMaxPlayers + m (Lnet/minecraft/class_5218;)Ljava/nio/file/Path; method_27050 func_240776_a_ + m (Ljava/nio/file/Path;)V method_21613 dumpDebugInfo + m (Lnet/minecraft/class_3949;)V method_3786 func_240787_a_ + m ()F method_3830 getTickTime + m ()Ljava/lang/String; method_3808 func_212373_aU + m ()Z method_27051 func_230540_aS_ + m ()Z method_27902 func_230541_aj_ + m ()Ljava/io/File; method_3831 getDataDirectory + m ()Lnet/minecraft/class_60; method_3857 getLootTableManager + m ()I method_21714 getFunctionLevel + m ()Lnet/minecraft/class_3004; method_3837 getCustomBossEvents + m ()Z method_3799 isDemo + m ()Ljava/lang/Iterable; method_3738 getWorlds + m ()Lnet/minecraft/class_1863; method_3772 getRecipeManager + m (Ljava/nio/file/Path;)V method_21692 dumpStats + m ()Lnet/minecraft/class_2170; method_3734 getCommandManager + m (Ljava/lang/String;)V method_3842 setHostname + m (Lnet/minecraft/class_2168;)V method_3728 kickPlayersNotWhitelisted + m (I)V method_3803 setPlayerIdleTimeout + m ()Lnet/minecraft/class_4565; method_22827 func_229735_aN_ + m ()V method_29741 func_240802_v_ + m ()Lnet/minecraft/class_3517; method_15876 getFrameTimer + m (Lnet/minecraft/class_3218;)Ljava/lang/String; method_3733 func_244268_b + m ()Z method_3729 isWhitelistEnabled + m ()Z method_3736 func_230538_V_ + m (Z)V method_19467 setDifficultyLocked + m (Lnet/minecraft/class_3949;)V method_3774 loadInitialChunks + m ()I method_3788 getCurrentPlayerCount + m ()V method_3856 refreshStatusNextTick + m ()V method_3735 func_240800_l__ + m ()Lnet/minecraft/class_5415; method_3801 func_244266_aF + m (Lnet/minecraft/class_128;)V method_3744 finalTick + m (Ljava/lang/String;)V method_3849 setServerOwner + m ()Z method_3771 isWorldIconSet + m ()Z method_3727 getGuiEnabled + m ()I method_30612 func_241871_k + m ()Ljava/lang/String; method_3818 getMOTD + m (Ljava/lang/Runnable;)V method_3742 registerTickable + m ()Z method_16043 isThreadAlive + m ()Z method_5387 func_244271_bf + m ()V method_3861 setResourcePackFromWorld + m (Z)V method_3764 setPreventProxyConnections + m ()Ljava/lang/String; method_3811 getServerOwner + m (Ljava/lang/String;)V method_3834 setMOTD + m (Lnet/minecraft/class_3283;)Lnet/minecraft/class_5359; method_29735 func_240771_a_ + m (Lnet/minecraft/class_26;)V method_17976 func_213204_a + m ()Z method_3816 isDedicatedServer + m ()Ljava/security/KeyPair; method_3716 getKeyPair + m (Ljava/lang/Thread;Ljava/lang/Throwable;)V method_3854 func_240779_a_ + m (Lnet/minecraft/class_32$class_5143;)V method_27725 func_240777_a_ + m ()[Ljava/lang/String; method_3858 getOnlinePlayerNames + m ()Z method_3820 serverIsInRunLoop + m ()I method_3862 getMaxPlayerIdleMinutes + m ()Lnet/minecraft/class_3695; method_16044 getProfiler + m ()Lcom/mojang/datafixers/DataFixer; method_3855 getDataFixer + m ()Ljava/lang/String; method_3819 getServerHostname + m ()Lnet/minecraft/class_2926; method_3765 getServerStatusResponse + m ()Z method_3839 getAllowNether + m (Lnet/minecraft/class_5219;)V method_17977 func_240778_a_ + m ()Z method_3718 isFlightAllowed + m ()V method_27731 func_230543_p_ + m (Z)V method_3864 setOnlineMode + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5268;ZZZ)V method_27901 func_240786_a_ + f I field_4579 buildLimit + f Lnet/minecraft/class_5350; field_25318 resourceManager + f Z field_4547 serverIsRunning + f [J field_4573 tickTimeArray + f Ljava/lang/String; field_4564 motd + f J field_4551 nanoTimeSinceStatusRefresh + f Lnet/minecraft/class_32$class_5143; field_23784 anvilConverterForAnvilFile + f Lnet/minecraft/class_4565; field_20850 field_229733_al_ + f Ljava/lang/String; field_4584 resourcePackHash + f Lnet/minecraft/class_2991; field_4591 functionManager + f F field_4592 tickTime + f I field_4572 tickCounter + f J field_19248 runTasksUntil + f Lcom/mojang/authlib/GameProfileRepository; field_4608 profileRepo + f Lnet/minecraft/class_29; field_24371 playerDataManager + f Ljava/security/KeyPair; field_4552 serverKeyPair + f Z field_4597 startProfiling + f Ljava/util/List; field_4568 tickables + f I field_4596 maxPlayerIdleMinutes + f Lnet/minecraft/class_3242; field_4563 networkSystem + f Lnet/minecraft/class_2926; field_4593 statusResponse + f I field_4555 serverPort + f Lnet/minecraft/class_3695; field_16258 profiler + f Ljava/lang/String; field_4607 resourcePackUrl + f J field_4571 serverTime + f J field_4557 timeOfLastWarning + f Lnet/minecraft/class_1276; field_4582 snooper + f Z field_4560 preventProxyConnections + f Lnet/minecraft/class_3485; field_24370 templateManager + f Z field_4577 worldIconSet + f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_4603 sessionService + f Lnet/minecraft/class_5219; field_24372 serverConfig + f Ljava/util/Map; field_4589 worlds + f Lnet/minecraft/class_3283; field_4595 resourcePacks + f Z field_4543 onlineMode + f Ljava/net/Proxy; field_4599 serverProxy + f Z field_19249 isRunningScheduledTasks + f Lnet/minecraft/class_5455$class_5457; field_25132 field_240767_f_ + f Ljava/lang/String; field_4578 serverOwner + f Ljava/lang/Thread; field_16257 serverThread + f Lnet/minecraft/class_3517; field_16205 frameTimer + f Lnet/minecraft/class_3004; field_4548 customBossEvents + f Ljava/util/Random; field_4602 random + f Z field_4545 isGamemodeForced + f Lnet/minecraft/class_2995; field_4558 scoreboard + f Z field_4554 allowFlight + f Lorg/apache/logging/log4j/Logger; field_4546 LOGGER + f Ljava/lang/String; field_4585 hostname + f Ljava/util/concurrent/Executor; field_17200 backgroundExecutor + f Z field_4561 serverStopped + f Z field_4570 whitelistEnabled + f Lnet/minecraft/class_3950; field_17439 chunkStatusListenerFactory + f Lcom/mojang/datafixers/DataFixer; field_4587 dataFixer + f Lnet/minecraft/class_3324; field_4550 playerList + f Z field_4604 pvpEnabled + f Lnet/minecraft/class_1940; field_17704 DEMO_WORLD_SETTINGS + f Z field_4544 serverRunning + f Ljava/io/File; field_4588 USER_CACHE_FILE + f Lnet/minecraft/class_3312; field_4556 profileCache + f Lnet/minecraft/class_4757; field_22250 timeTracker + f Ljava/lang/String; field_17601 serverId + f Z field_4549 isDemo +c net/minecraft/server/MinecraftServer$1 net/minecraft/server/MinecraftServer$1 + f J field_4609 startTime +c net/minecraft/server/MinecraftServer$2 net/minecraft/server/MinecraftServer$2 + f Ljava/util/List; field_20280 field_240803_a_ + f Lnet/minecraft/class_1928; field_20281 field_240804_b_ + f Lnet/minecraft/server/MinecraftServer; field_20282 field_240805_c_ +c net/minecraft/class_176 net/minecraft/loot/LootParameterSet + m ()Ljava/util/Set; method_777 getAllParameters + m (Lnet/minecraft/class_169;)Ljava/lang/String; method_779 func_216275_b + m (Lnet/minecraft/class_58;Lnet/minecraft/class_46;)V method_776 func_227556_a_ + m ()Ljava/lang/String; toString toString + m ()Ljava/util/Set; method_778 getRequiredParameters + f Ljava/util/Set; field_1215 all + f Ljava/util/Set; field_1216 required +c net/minecraft/class_176$class_177 net/minecraft/loot/LootParameterSet$Builder + m ()Lnet/minecraft/class_176; method_782 build + m (Lnet/minecraft/class_169;)Lnet/minecraft/class_176$class_177; method_781 required + m (Lnet/minecraft/class_169;)Lnet/minecraft/class_176$class_177; method_780 optional + f Ljava/util/Set; field_1217 optional + f Ljava/util/Set; field_1218 required +c net/minecraft/class_176$1 net/minecraft/loot/LootParameterSet$1 +c net/minecraft/class_169 net/minecraft/loot/LootParameter + m ()Ljava/lang/String; toString toString + m ()Lnet/minecraft/class_2960; method_746 getId + f Lnet/minecraft/class_2960; field_1162 id +c net/minecraft/class_181 net/minecraft/loot/LootParameters + m (Ljava/lang/String;)Lnet/minecraft/class_169; method_798 register + f Lnet/minecraft/class_169; field_24424 field_237457_g_ + f Lnet/minecraft/class_169; field_1227 DIRECT_KILLER_ENTITY + f Lnet/minecraft/class_169; field_1225 EXPLOSION_RADIUS + f Lnet/minecraft/class_169; field_1230 KILLER_ENTITY + f Lnet/minecraft/class_169; field_1229 TOOL + f Lnet/minecraft/class_169; field_1231 DAMAGE_SOURCE + f Lnet/minecraft/class_169; field_1228 BLOCK_ENTITY + f Lnet/minecraft/class_169; field_1233 LAST_DAMAGE_PLAYER + f Lnet/minecraft/class_169; field_1224 BLOCK_STATE + f Lnet/minecraft/class_169; field_1226 THIS_ENTITY +c net/minecraft/class_173 net/minecraft/loot/LootParameterSets + m (Lnet/minecraft/class_176$class_177;)V method_763 func_237456_b_ + m (Lnet/minecraft/class_176$class_177;)V method_760 func_237455_a_ + m (Lnet/minecraft/class_176$class_177;)V method_756 func_227560_b_ + m (Lnet/minecraft/class_176$class_177;)V method_24800 func_216252_a + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_176; method_757 getValue + m (Lnet/minecraft/class_176$class_177;)V method_27863 func_227559_a_ + m (Lnet/minecraft/class_176$class_177;)V method_758 func_216251_c + m (Ljava/lang/String;Ljava/util/function/Consumer;)Lnet/minecraft/class_176; method_759 register + m (Lnet/minecraft/class_176;)Lnet/minecraft/class_2960; method_762 getKey + m (Lnet/minecraft/class_176$class_177;)V method_15971 func_216255_b + m (Lnet/minecraft/class_176$class_177;)V method_22578 func_216250_f + m (Lnet/minecraft/class_176$class_177;)V method_764 func_216258_d + m (Lnet/minecraft/class_176$class_177;)V method_22577 func_216254_e + m (Lnet/minecraft/class_176$class_177;)V method_755 func_216249_h + m (Lnet/minecraft/class_176$class_177;)V method_15970 func_216259_g + f Lnet/minecraft/class_176; field_1172 BLOCK + f Lcom/google/common/collect/BiMap; field_1178 REGISTRY + f Lnet/minecraft/class_176; field_1177 GENERIC + f Lnet/minecraft/class_176; field_24423 field_237454_j_ + f Lnet/minecraft/class_176; field_20762 SELECTOR + f Lnet/minecraft/class_176; field_20761 COMMAND + f Lnet/minecraft/class_176; field_1179 CHEST + f Lnet/minecraft/class_176; field_1175 EMPTY + f Lnet/minecraft/class_176; field_1174 ADVANCEMENT + f Lnet/minecraft/class_176; field_22403 field_237453_h_ + f Lnet/minecraft/class_176; field_16235 GIFT + f Lnet/minecraft/class_176; field_1173 ENTITY + f Lnet/minecraft/class_176; field_1176 FISHING +c net/minecraft/class_182 net/minecraft/loot/conditions/TableBonus + m (Lnet/minecraft/class_182;)[F method_803 func_215956_b + m (Lnet/minecraft/class_1887;[F)Lnet/minecraft/class_5341$class_210; method_800 builder + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_47;)Z method_799 test + m (Lnet/minecraft/class_182;)Lnet/minecraft/class_1887; method_802 func_215954_a + m (Lnet/minecraft/class_1887;[F)Lnet/minecraft/class_5341; method_801 func_215957_b + f [F field_1235 chances + f Lnet/minecraft/class_1887; field_1234 enchantment +c net/minecraft/class_182$class_183 net/minecraft/loot/conditions/TableBonus$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_182; method_804 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_182;Lcom/google/gson/JsonSerializationContext;)V method_805 serialize + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonParseException; method_17936 func_216296_a +c net/minecraft/class_182$1 net/minecraft/loot/conditions/TableBonus$1 +c net/minecraft/class_186 net/minecraft/loot/conditions/Alternative + m (Lnet/minecraft/class_186;)[Lnet/minecraft/class_5341; method_827 func_215961_a + m ([Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_186$class_187; method_826 builder + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_47;)Z method_825 test + f Ljava/util/function/Predicate; field_1247 field_215963_b + f [Lnet/minecraft/class_5341; field_1246 conditions +c net/minecraft/class_186$class_188 net/minecraft/loot/conditions/Alternative$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_186; method_829 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_186;Lcom/google/gson/JsonSerializationContext;)V method_828 serialize +c net/minecraft/class_186$class_187 net/minecraft/loot/conditions/Alternative$Builder + f Ljava/util/List; field_1248 conditions +c net/minecraft/class_186$1 net/minecraft/loot/conditions/Alternative$1 +c net/minecraft/class_192 net/minecraft/loot/ILootConditionConsumer + m ()Ljava/lang/Object; method_512 cast + m (Lnet/minecraft/class_5341$class_210;)Ljava/lang/Object; method_840 acceptCondition +c net/minecraft/class_4568 net/minecraft/loot/conditions/Reference + m (Lnet/minecraft/class_4568;)Lnet/minecraft/class_2960; method_22580 func_227563_a_ + m (Lnet/minecraft/class_47;)Z method_22579 test + m (Ljava/lang/Object;)Z test test + f Lnet/minecraft/class_2960; field_20764 field_227562_b_ + f Lorg/apache/logging/log4j/Logger; field_20763 field_227561_a_ +c net/minecraft/class_4568$class_4569 net/minecraft/loot/conditions/Reference$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4568;Lcom/google/gson/JsonSerializationContext;)V method_22582 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_4568; method_22581 deserialize +c net/minecraft/class_4568$1 net/minecraft/loot/conditions/Reference$1 +c net/minecraft/class_199 net/minecraft/loot/conditions/EntityHasScore + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_47;)Z method_864 test + m (Lnet/minecraft/class_199;)Lnet/minecraft/class_47$class_50; method_863 func_215973_b + m (Lnet/minecraft/class_199;)Ljava/util/Map; method_866 func_215972_a + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_269;Ljava/lang/String;Lnet/minecraft/class_61;)Z method_865 entityScoreMatch + f Ljava/util/Map; field_1279 scores + f Lnet/minecraft/class_47$class_50; field_1278 target +c net/minecraft/class_199$class_200 net/minecraft/loot/conditions/EntityHasScore$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_199; method_867 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_199;Lcom/google/gson/JsonSerializationContext;)V method_868 serialize +c net/minecraft/class_199$1 net/minecraft/loot/conditions/EntityHasScore$1 +c net/minecraft/class_190 net/minecraft/loot/conditions/DamageSourceProperties + m (Lnet/minecraft/class_2022$class_2023;)Lnet/minecraft/class_5341$class_210; method_837 builder + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_190;)Lnet/minecraft/class_2022; method_835 func_215965_a + m (Lnet/minecraft/class_47;)Z method_834 test + m (Lnet/minecraft/class_2022$class_2023;)Lnet/minecraft/class_5341; method_836 func_215964_b + f Lnet/minecraft/class_2022; field_1256 predicate +c net/minecraft/class_190$class_191 net/minecraft/loot/conditions/DamageSourceProperties$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_190; method_839 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_190;Lcom/google/gson/JsonSerializationContext;)V method_838 serialize +c net/minecraft/class_190$1 net/minecraft/loot/conditions/DamageSourceProperties$1 +c net/minecraft/class_207 net/minecraft/loot/conditions/Inverted + m (Lnet/minecraft/class_47;)Z method_888 test + m (Lnet/minecraft/class_207;)Lnet/minecraft/class_5341; method_890 func_215980_a + m (Lnet/minecraft/class_207;)Lnet/minecraft/class_5341; method_887 func_215978_b + m (Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_5341$class_210; method_889 builder + m (Ljava/lang/Object;)Z test test + f Lnet/minecraft/class_5341; field_1283 term +c net/minecraft/class_207$class_208 net/minecraft/loot/conditions/Inverted$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_207;Lcom/google/gson/JsonSerializationContext;)V method_892 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_207; method_891 deserialize +c net/minecraft/class_207$1 net/minecraft/loot/conditions/Inverted$1 +c net/minecraft/class_201 net/minecraft/loot/conditions/SurvivesExplosion + m ()Lnet/minecraft/class_5341$class_210; method_871 builder + m ()Lnet/minecraft/class_5341; method_872 func_215969_d + m (Lnet/minecraft/class_47;)Z method_869 test + m ()Lnet/minecraft/class_201; method_870 func_215970_c + m (Ljava/lang/Object;)Z test test + f Lnet/minecraft/class_201; field_1280 INSTANCE +c net/minecraft/class_201$class_202 net/minecraft/loot/conditions/SurvivesExplosion$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_201; method_873 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_201;Lcom/google/gson/JsonSerializationContext;)V method_874 serialize +c net/minecraft/class_212 net/minecraft/loot/conditions/BlockStateProperty + m (Lnet/minecraft/class_212;)Lnet/minecraft/class_2248; method_903 func_215988_a + m (Lnet/minecraft/class_47;)Z method_899 test + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_212$class_213; method_900 builder + m (Lnet/minecraft/class_212;)Lnet/minecraft/class_4559; method_904 func_227566_b_ + m (Ljava/lang/Object;)Z test test + f Lnet/minecraft/class_4559; field_1288 properties + f Lnet/minecraft/class_2248; field_1286 block +c net/minecraft/class_212$class_214 net/minecraft/loot/conditions/BlockStateProperty$Serializer + m (Lnet/minecraft/class_2248;Ljava/lang/String;)V method_22585 func_227568_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_212;Lcom/google/gson/JsonSerializationContext;)V method_909 serialize + m (Lnet/minecraft/class_2960;)Ljava/lang/IllegalArgumentException; method_17937 func_227569_a_ + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_212; method_910 deserialize +c net/minecraft/class_212$class_213 net/minecraft/loot/conditions/BlockStateProperty$Builder + m (Lnet/minecraft/class_4559$class_4560;)Lnet/minecraft/class_212$class_213; method_22584 fromProperties + f Lnet/minecraft/class_4559; field_1291 desiredProperties + f Lnet/minecraft/class_2248; field_1290 block +c net/minecraft/class_212$1 net/minecraft/loot/conditions/BlockStateProperty$1 +c net/minecraft/class_205 net/minecraft/loot/conditions/LocationCheck + m (Lnet/minecraft/class_205;)Lnet/minecraft/class_2090; method_883 func_215974_a + m (Lnet/minecraft/class_2090$class_2091;)Lnet/minecraft/class_5341; method_882 func_215976_b + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_47;)Z method_881 test + m (Lnet/minecraft/class_2090$class_2091;Lnet/minecraft/class_2338;)Lnet/minecraft/class_5341$class_210; method_30151 func_241547_a_ + m (Lnet/minecraft/class_205;)Lnet/minecraft/class_2338; method_22583 func_227565_b_ + m (Lnet/minecraft/class_2090$class_2091;)Lnet/minecraft/class_5341$class_210; method_884 builder + m (Lnet/minecraft/class_2090$class_2091;Lnet/minecraft/class_2338;)Lnet/minecraft/class_5341; method_30152 func_241548_b_ + f Lnet/minecraft/class_2090; field_1282 predicate + f Lnet/minecraft/class_2338; field_20765 field_227564_b_ +c net/minecraft/class_205$class_206 net/minecraft/loot/conditions/LocationCheck$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_205;Lcom/google/gson/JsonSerializationContext;)V method_886 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_205; method_885 deserialize +c net/minecraft/class_205$1 net/minecraft/loot/conditions/LocationCheck$1 +c net/minecraft/class_5342 net/minecraft/loot/LootConditionType +c net/minecraft/class_5341 net/minecraft/loot/conditions/ILootCondition + m ()Lnet/minecraft/class_5342; method_29325 func_230419_b_ +c net/minecraft/class_5341$class_210 net/minecraft/loot/conditions/ILootCondition$IBuilder + m ()Lnet/minecraft/class_5341; build build + m (Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_186$class_187; method_893 alternative + m ()Lnet/minecraft/class_5341$class_210; method_16780 inverted +c net/minecraft/class_215 net/minecraft/loot/conditions/EntityHasProperty + m (Lnet/minecraft/class_215;)Lnet/minecraft/class_47$class_50; method_918 access$100 + m (Lnet/minecraft/class_215;)Lnet/minecraft/class_2048; method_915 func_215997_a + m (Lnet/minecraft/class_47$class_50;)Lnet/minecraft/class_5341$class_210; method_15972 builder + m (Lnet/minecraft/class_2048;Lnet/minecraft/class_47$class_50;)Lnet/minecraft/class_5341; method_27864 func_237476_a_ + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_47$class_50;Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_5341$class_210; method_917 builder + m (Lnet/minecraft/class_2048$class_2049;Lnet/minecraft/class_47$class_50;)Lnet/minecraft/class_5341; method_916 func_216000_a + m (Lnet/minecraft/class_47;)Z method_914 test + m (Lnet/minecraft/class_47$class_50;Lnet/minecraft/class_2048;)Lnet/minecraft/class_5341$class_210; method_27865 func_237477_a_ + f Lnet/minecraft/class_2048; field_1293 predicate + f Lnet/minecraft/class_47$class_50; field_1292 target +c net/minecraft/class_215$class_216 net/minecraft/loot/conditions/EntityHasProperty$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_215;Lcom/google/gson/JsonSerializationContext;)V method_919 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_215; method_920 deserialize +c net/minecraft/class_215$1 net/minecraft/loot/conditions/EntityHasProperty$1 +c net/minecraft/class_217 net/minecraft/loot/conditions/LootConditionManager + m (Ljava/lang/Object;)Z method_928 func_216308_a + m (Ljava/lang/Object;)Z method_921 func_216304_b + m (Ljava/lang/String;Lnet/minecraft/class_5335;)Lnet/minecraft/class_5342; method_29327 register + m ([Ljava/util/function/Predicate;)Ljava/util/function/Predicate; method_925 or + m ([Ljava/util/function/Predicate;Ljava/lang/Object;)Z method_929 func_216309_a + m ([Ljava/util/function/Predicate;Ljava/lang/Object;)Z method_927 func_216307_b + m ([Ljava/util/function/Predicate;)Ljava/util/function/Predicate; method_924 and + m ()Ljava/lang/Object; method_29326 func_237474_a_ + f Lnet/minecraft/class_5342; field_25249 REFERENCE + f Lnet/minecraft/class_5342; field_25239 ENTITY_PROPERTIES + f Lnet/minecraft/class_5342; field_25250 TIME_CHECK + f Lnet/minecraft/class_5342; field_25240 KILLED_BY_PLAYER + f Lnet/minecraft/class_5342; field_25241 ENTITY_SCORES + f Lnet/minecraft/class_5342; field_25242 BLOCK_STATE_PROPERTY + f Lnet/minecraft/class_5342; field_25243 MATCH_TOOL + f Lnet/minecraft/class_5342; field_25244 TABLE_BONUS + f Lnet/minecraft/class_5342; field_25245 SURVIVES_EXPLOSION + f Lnet/minecraft/class_5342; field_25235 INVERTED + f Lnet/minecraft/class_5342; field_25246 DAMAGE_SOURCE_PROPERTIES + f Lnet/minecraft/class_5342; field_25236 ALTERNATIVE + f Lnet/minecraft/class_5342; field_25247 LOCATION_CHECK + f Lnet/minecraft/class_5342; field_25237 RANDOM_CHANCE + f Lnet/minecraft/class_5342; field_25248 WEATHER_CHECK + f Lnet/minecraft/class_5342; field_25238 RANDOM_CHANCE_WITH_LOOTING +c net/minecraft/class_219 net/minecraft/loot/conditions/RandomChance + m (Ljava/lang/Object;)Z test test + m (F)Lnet/minecraft/class_5341$class_210; method_932 builder + m (Lnet/minecraft/class_47;)Z method_934 test + m (Lnet/minecraft/class_219;)F method_935 access$000 + m (F)Lnet/minecraft/class_5341; method_933 func_216005_b + f F field_1296 chance +c net/minecraft/class_219$class_220 net/minecraft/loot/conditions/RandomChance$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_219;Lcom/google/gson/JsonSerializationContext;)V method_936 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_219; method_937 deserialize +c net/minecraft/class_219$1 net/minecraft/loot/conditions/RandomChance$1 +c net/minecraft/class_221 net/minecraft/loot/conditions/KilledByPlayer + m ()Lnet/minecraft/class_5341; method_940 func_215995_d + m (Ljava/lang/Object;)Z test test + m ()Lnet/minecraft/class_5341$class_210; method_939 builder + m ()Lnet/minecraft/class_221; method_941 func_215993_c + m (Lnet/minecraft/class_47;)Z method_938 test + f Lnet/minecraft/class_221; field_1297 INSTANCE +c net/minecraft/class_221$class_222 net/minecraft/loot/conditions/KilledByPlayer$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_221;Lcom/google/gson/JsonSerializationContext;)V method_942 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_221; method_943 deserialize +c net/minecraft/class_223 net/minecraft/loot/conditions/MatchTool + m (Lnet/minecraft/class_2073$class_2074;)Lnet/minecraft/class_5341$class_210; method_945 builder + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_47;)Z method_946 test + m (Lnet/minecraft/class_2073$class_2074;)Lnet/minecraft/class_5341; method_944 func_216013_b + m (Lnet/minecraft/class_223;)Lnet/minecraft/class_2073; method_947 func_216011_a + f Lnet/minecraft/class_2073; field_1298 predicate +c net/minecraft/class_223$class_224 net/minecraft/loot/conditions/MatchTool$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_223; method_949 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_223;Lcom/google/gson/JsonSerializationContext;)V method_948 serialize +c net/minecraft/class_225 net/minecraft/loot/conditions/RandomChanceWithLooting + m (Lnet/minecraft/class_47;)Z method_950 test + m (FF)Lnet/minecraft/class_5341$class_210; method_953 builder + m (Lnet/minecraft/class_225;)F method_954 access$100 + m (Ljava/lang/Object;)Z test test + m (FF)Lnet/minecraft/class_5341; method_952 func_216002_b + m (Lnet/minecraft/class_225;)F method_951 access$000 + f F field_1299 lootingMultiplier + f F field_1300 chance +c net/minecraft/class_225$class_226 net/minecraft/loot/conditions/RandomChanceWithLooting$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_225; method_956 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_225;Lcom/google/gson/JsonSerializationContext;)V method_955 serialize +c net/minecraft/class_225$1 net/minecraft/loot/conditions/RandomChanceWithLooting$1 +c net/minecraft/class_227 net/minecraft/loot/conditions/WeatherCheck + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_227;)Ljava/lang/Boolean; method_959 func_216007_b + m (Lnet/minecraft/class_227;)Ljava/lang/Boolean; method_958 func_216008_a + m (Lnet/minecraft/class_47;)Z method_957 test + f Ljava/lang/Boolean; field_1302 raining + f Ljava/lang/Boolean; field_1301 thundering +c net/minecraft/class_227$class_228 net/minecraft/loot/conditions/WeatherCheck$Serializer + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_227;Lcom/google/gson/JsonSerializationContext;)V method_960 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_227; method_961 deserialize +c net/minecraft/class_227$1 net/minecraft/loot/conditions/WeatherCheck$1 +c net/minecraft/class_4571 net/minecraft/loot/conditions/TimeCheck + m (Lnet/minecraft/class_47;)Z method_22587 test + m (Lnet/minecraft/class_4571;)Ljava/lang/Long; method_22588 func_227572_a_ + m (Lnet/minecraft/class_4571;)Lnet/minecraft/class_61; method_22589 func_227573_b_ + m (Ljava/lang/Object;)Z test test + f Lnet/minecraft/class_61; field_20768 field_227571_b_ + f Ljava/lang/Long; field_20767 field_227570_a_ +c net/minecraft/class_4571$class_4572 net/minecraft/loot/conditions/TimeCheck$Serializer + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_4571; method_22590 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4571;Lcom/google/gson/JsonSerializationContext;)V method_22591 serialize +c net/minecraft/class_4571$1 net/minecraft/loot/conditions/TimeCheck$1 +c net/minecraft/class_231 net/minecraft/command/TimedFunction + m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_236;J)V method_967 run + m (Lnet/minecraft/class_2991;Lnet/minecraft/class_2158;)V method_17938 func_216316_a + m (Lnet/minecraft/class_231;)Lnet/minecraft/class_2960; method_966 func_216317_a + f Lnet/minecraft/class_2960; field_1304 field_216318_a +c net/minecraft/class_231$class_232 net/minecraft/command/TimedFunction$Serializer + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_231;)V method_968 write + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_231; method_969 read +c net/minecraft/class_229 net/minecraft/command/TimedFunctionTag + m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_236;J)V method_962 run + m (Lnet/minecraft/class_229;)Lnet/minecraft/class_2960; method_963 func_216314_a + f Lnet/minecraft/class_2960; field_1303 tagName +c net/minecraft/class_229$class_230 net/minecraft/command/TimedFunctionTag$Serializer + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_229; method_965 read + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_229;)V method_964 write +c net/minecraft/class_233 net/minecraft/command/TimerCallbackSerializers + m (Lnet/minecraft/class_234$class_235;)Lnet/minecraft/class_233; method_971 func_216340_a + m (Ljava/lang/Class;)Lnet/minecraft/class_234$class_235; method_970 func_216338_a + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_234; method_972 func_216341_a + m (Lnet/minecraft/class_234;)Lnet/minecraft/class_2487; method_973 func_216339_a + f Ljava/util/Map; field_1307 field_216344_c + f Ljava/util/Map; field_1305 field_216345_d + f Lorg/apache/logging/log4j/Logger; field_1308 LOGGER + f Lnet/minecraft/class_233; field_1306 field_216342_a +c net/minecraft/class_234 net/minecraft/command/ITimerCallback + m (Ljava/lang/Object;Lnet/minecraft/class_236;J)V method_974 run +c net/minecraft/class_234$class_235 net/minecraft/command/ITimerCallback$Serializer + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_234;)V method_975 write + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_234; method_976 read + m ()Ljava/lang/Class; method_978 func_216311_b + m ()Lnet/minecraft/class_2960; method_977 func_216310_a + f Ljava/lang/Class; field_1310 clazz + f Lnet/minecraft/class_2960; field_1309 typeId +c net/minecraft/class_236 net/minecraft/command/TimerCallbackManager + m ()Ljava/util/Comparator; method_987 sorter + m (Lnet/minecraft/class_236$class_237;)J method_21905 func_227578_c_ + m (Lnet/minecraft/class_236$class_237;)Lcom/google/common/primitives/UnsignedLong; method_21904 func_227577_b_ + m (Lnet/minecraft/class_2487;)V method_986 readEntry + m (Ljava/lang/String;JLnet/minecraft/class_234;)V method_985 func_227576_a_ + m (Ljava/lang/String;)I method_22593 func_227575_a_ + m ()Ljava/util/Set; method_22592 func_227574_a_ + m (Lcom/mojang/serialization/Dynamic;)V method_29040 func_237478_a_ + m (Ljava/lang/Object;J)V method_988 run + m ()Lnet/minecraft/class_2499; method_982 write + m (Lnet/minecraft/class_236$class_237;)Lnet/minecraft/class_2487; method_980 writeEntry + f Lorg/apache/logging/log4j/Logger; field_1315 LOGGER + f Lcom/google/common/collect/Table; field_1312 byName + f Lcom/google/common/primitives/UnsignedLong; field_1311 nextUniqueId + f Ljava/util/Queue; field_1313 entries + f Lnet/minecraft/class_233; field_1314 field_216334_b +c net/minecraft/class_236$class_237 net/minecraft/command/TimerCallbackManager$Entry + f J field_1318 triggerTime + f Lnet/minecraft/class_234; field_1316 callback + f Ljava/lang/String; field_1317 name + f Lcom/google/common/primitives/UnsignedLong; field_1319 uniqueId +c net/minecraft/class_236$1 net/minecraft/command/TimerCallbackManager$1 +c net/minecraft/class_238 net/minecraft/util/math/AxisAlignedBB + m (DDD)Lnet/minecraft/class_238; method_1009 grow + m ()D method_17941 getZSize + m (Lnet/minecraft/class_3341;)Lnet/minecraft/class_238; method_19316 toImmutable + m ()D method_17939 getXSize + m ()D method_17940 getYSize + m (DDD)Lnet/minecraft/class_238; method_1012 expand + m (Lnet/minecraft/class_238;)Z method_994 intersects + m (Lnet/minecraft/class_2350$class_2351;)D method_990 getMax + m (DDD)Lnet/minecraft/class_238; method_989 offset + m ([DLnet/minecraft/class_2350;DDDDDDDDLnet/minecraft/class_2350;DDD)Lnet/minecraft/class_2350; method_998 checkSideForHit + m (Lnet/minecraft/class_2350$class_2351;)D method_1001 getMin + m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;)Ljava/util/Optional; method_992 rayTrace + m (Ljava/lang/Iterable;Lnet/minecraft/class_243;Lnet/minecraft/class_243;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3965; method_1010 rayTrace + m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;)Z method_993 intersects + m ()Ljava/lang/String; toString toString + m (D)Lnet/minecraft/class_238; method_1014 grow + m (D)Lnet/minecraft/class_238; method_1011 shrink + m (Ljava/lang/Object;)Z equals equals + m (DDDDDD)Z method_1003 intersects + m ()D method_995 getAverageEdgeLength + m (DDD)Lnet/minecraft/class_238; method_1002 contract + m (Lnet/minecraft/class_243;)Z method_1006 contains + m ()Lnet/minecraft/class_243; method_1005 getCenter + m (DDD)Z method_1008 contains + m (Lnet/minecraft/class_238;Lnet/minecraft/class_243;[DLnet/minecraft/class_2350;DDD)Lnet/minecraft/class_2350; method_1007 calcSideHit + m ()I hashCode hashCode + m (Lnet/minecraft/class_238;)Lnet/minecraft/class_238; method_999 intersect + m (Lnet/minecraft/class_238;)Lnet/minecraft/class_238; method_991 union + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_238; method_997 offset + m (DDD)Lnet/minecraft/class_238; method_30048 withSizeAtOrigin + m ()Z method_1013 hasNaN + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_238; method_29968 fromVector + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_238; method_18804 expand + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_238; method_996 offset + f D field_1324 maxZ + f D field_1322 minY + f D field_1321 minZ + f D field_1323 minX + f D field_1325 maxY + f D field_1320 maxX +c net/minecraft/class_3966 net/minecraft/util/math/EntityRayTraceResult + m ()Lnet/minecraft/class_1297; method_17782 getEntity + f Lnet/minecraft/class_1297; field_17592 entity +c net/minecraft/class_3965 net/minecraft/util/math/BlockRayTraceResult + m ()Lnet/minecraft/class_2350; method_17780 getFace + m ()Z method_17781 isInside + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_3965; method_17779 withFace + m (Lnet/minecraft/class_243;Lnet/minecraft/class_2350;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3965; method_17778 createMiss + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_3965; method_29328 withPosition + m ()Lnet/minecraft/class_2338; method_17777 getPos + f Lnet/minecraft/class_2338; field_17589 pos + f Lnet/minecraft/class_2350; field_17588 face + f Z field_17591 inside + f Z field_17590 isMiss +c net/minecraft/class_241 net/minecraft/util/math/vector/Vector2f + m (Lnet/minecraft/class_241;)Z method_1016 equals + f Lnet/minecraft/class_241; field_1339 MIN + f Lnet/minecraft/class_241; field_1341 UNIT_X + f Lnet/minecraft/class_241; field_1335 ONE + f Lnet/minecraft/class_241; field_1338 NEGATIVE_UNIT_X + f F field_1342 y + f F field_1343 x + f Lnet/minecraft/class_241; field_1336 UNIT_Y + f Lnet/minecraft/class_241; field_1337 MAX + f Lnet/minecraft/class_241; field_1344 NEGATIVE_UNIT_Y + f Lnet/minecraft/class_241; field_1340 ZERO +c net/minecraft/class_239 net/minecraft/util/math/RayTraceResult + m (Lnet/minecraft/class_1297;)D method_24801 func_237486_a_ + m ()Lnet/minecraft/class_243; method_17784 getHitVec + m ()Lnet/minecraft/class_239$class_240; method_17783 getType + f Lnet/minecraft/class_243; field_1329 hitResult +c net/minecraft/class_239$class_240 net/minecraft/util/math/RayTraceResult$Type + m ()[Lnet/minecraft/class_239$class_240; values values + m (Ljava/lang/String;)Lnet/minecraft/class_239$class_240; valueOf valueOf + f Lnet/minecraft/class_239$class_240; field_1332 BLOCK + f Lnet/minecraft/class_239$class_240; field_1331 ENTITY + f [Lnet/minecraft/class_239$class_240; field_1334 $VALUES + f Lnet/minecraft/class_239$class_240; field_1333 MISS +c net/minecraft/class_243 net/minecraft/util/math/vector/Vector3d + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_1019 add + m (DDD)Lnet/minecraft/class_243; method_1023 subtract + m ()I hashCode hashCode + m (FF)Lnet/minecraft/class_243; method_1030 fromPitchYaw + m ()Lnet/minecraft/class_243; method_1029 normalize + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_1036 crossProduct + m (DDD)Lnet/minecraft/class_243; method_1031 add + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_1020 subtract + m ()Lnet/minecraft/class_243; method_22882 inverse + m (F)Lnet/minecraft/class_243; method_31033 rotateRoll + m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_243; method_24953 copyCentered + m (F)Lnet/minecraft/class_243; method_1024 rotateYaw + m (I)Lnet/minecraft/class_243; method_24457 unpack + m (Lnet/minecraft/class_2374;D)Z method_24802 isWithinDistanceOf + m (Lnet/minecraft/class_241;)Lnet/minecraft/class_243; method_1034 fromPitchYaw + m ()D method_1027 lengthSquared + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_18806 mul + m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_243; method_24955 copyCenteredHorizontally + m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_243; method_24954 copy + m ()D method_1033 length + m (DDD)D method_1028 squareDistanceTo + m (Lnet/minecraft/class_243;)D method_1026 dotProduct + m (Lnet/minecraft/class_2382;D)Lnet/minecraft/class_243; method_26410 copyCenteredWithVerticalOffset + m (Ljava/lang/Object;)Z equals equals + m (D)Lnet/minecraft/class_243; method_1021 scale + m (Ljava/util/EnumSet;)Lnet/minecraft/class_243; method_1032 align + m (F)Lnet/minecraft/class_243; method_1037 rotatePitch + m (Lnet/minecraft/class_2350$class_2351;)D method_18043 getCoordinate + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_1035 subtractReverse + m (DDD)Lnet/minecraft/class_243; method_18805 mul + m (Lnet/minecraft/class_243;)D method_1025 squareDistanceTo + m (Lnet/minecraft/class_243;)D method_1022 distanceTo + f Lnet/minecraft/class_243; field_1353 ZERO + f D field_1351 y + f D field_1350 z + f D field_1352 x +c net/minecraft/class_244 net/minecraft/util/math/shapes/BitSetVoxelShapePart + m (Lnet/minecraft/class_247;Lnet/minecraft/class_251;IILnet/minecraft/class_251;IILnet/minecraft/class_244;II[I[ZIII)Z method_1038 func_199629_a + m (Lnet/minecraft/class_255;Lnet/minecraft/class_247;Lnet/minecraft/class_251;ILnet/minecraft/class_251;ILnet/minecraft/class_244;I[I[ZIII)Z method_1042 func_199627_a + m (III)I method_1039 getIndex + m (Lnet/minecraft/class_251;Lnet/minecraft/class_251;Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_247;)Lnet/minecraft/class_244; method_1040 func_197852_a + m (Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_247;Lnet/minecraft/class_251;Lnet/minecraft/class_251;Lnet/minecraft/class_244;[IIII)Z method_1041 func_199628_a + f I field_1354 endY + f I field_1356 startZ + f I field_1355 endX + f I field_1357 startY + f Ljava/util/BitSet; field_1359 bitSet + f I field_1360 endZ + f I field_1358 startX +c net/minecraft/class_245 net/minecraft/util/math/shapes/VoxelShapeArray + f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1361 xPoints + f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1362 yPoints + f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1363 zPoints +c net/minecraft/class_245$1 net/minecraft/util/math/shapes/VoxelShapeArray$1 + f [I field_1364 field_197747_a +c net/minecraft/class_3726 net/minecraft/util/math/shapes/ISelectionContext + m (Lnet/minecraft/class_3610;Lnet/minecraft/class_3609;)Z method_27866 func_230426_a_ + m ()Z method_16193 getPosY + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_3726; method_16195 forEntity + m (Lnet/minecraft/class_265;Lnet/minecraft/class_2338;Z)Z method_16192 func_216378_a + m ()Lnet/minecraft/class_3726; method_16194 dummy + m (Lnet/minecraft/class_1792;)Z method_17785 hasItem +c net/minecraft/class_247 net/minecraft/util/math/shapes/IBooleanFunction + m (ZZ)Z method_16787 func_223269_m_ + m (ZZ)Z method_16791 func_223270_n_ + m (ZZ)Z method_16784 func_223271_o_ + m (ZZ)Z apply apply + m (ZZ)Z method_16793 func_223267_k_ + m (ZZ)Z method_16783 func_223268_l_ + m (ZZ)Z method_16782 func_223264_h_ + m (ZZ)Z method_16792 func_223265_i_ + m (ZZ)Z method_16786 func_223266_j_ + m (ZZ)Z method_16781 func_223261_e_ + m (ZZ)Z method_16796 func_223262_f_ + m (ZZ)Z method_16788 func_223263_g_ + m (ZZ)Z method_16794 func_223259_c_ + m (ZZ)Z method_16790 func_223260_d_ + m (ZZ)Z method_16795 func_223257_a_ + m (ZZ)Z method_16785 func_223258_b_ + m (ZZ)Z method_16789 func_223272_p_ + f Lnet/minecraft/class_247; field_16895 TRUE + f Lnet/minecraft/class_247; field_16887 SECOND + f Lnet/minecraft/class_247; field_16890 SAME + f Lnet/minecraft/class_247; field_16889 CAUSES + f Lnet/minecraft/class_247; field_16891 FIRST + f Lnet/minecraft/class_247; field_1366 OR + f Lnet/minecraft/class_247; field_16899 CAUSED_BY + f Lnet/minecraft/class_247; field_16886 ONLY_FIRST + f Lnet/minecraft/class_247; field_16892 NOT_SAME + f Lnet/minecraft/class_247; field_16898 NOT_SECOND + f Lnet/minecraft/class_247; field_16888 NOT_AND + f Lnet/minecraft/class_247; field_16896 AND + f Lnet/minecraft/class_247; field_16897 FALSE + f Lnet/minecraft/class_247; field_16893 ONLY_SECOND + f Lnet/minecraft/class_247; field_16885 NOT_OR + f Lnet/minecraft/class_247; field_16894 NOT_FIRST +c net/minecraft/class_249 net/minecraft/util/math/shapes/VoxelShapeCube +c net/minecraft/class_246 net/minecraft/util/math/shapes/DoubleRangeList + m ()I size size + m (I)D getDouble getDouble + f I field_1365 field_197854_a +c net/minecraft/class_251 net/minecraft/util/math/shapes/VoxelShapePart + m (III)Z method_1044 contains + m ()I method_1047 getYSize + m ()I method_1050 getXSize + m (III)Z method_1063 isFilled + m (Lnet/minecraft/class_251$class_252;Lnet/minecraft/class_2335;)V method_1061 forEachFaceOnAxis + m (Lnet/minecraft/class_2350$class_2351;)I method_1045 getEnd + m (IIIII)Z method_1054 isXZRectangleFull + m (Lnet/minecraft/class_2350$class_2351;)I method_1055 getStart + m ()I method_1048 getZSize + m (Lnet/minecraft/class_2350$class_2351;II)I method_1058 lastFilled + m (Lnet/minecraft/class_2350$class_2351;)I method_1051 getSize + m (Lnet/minecraft/class_2335;III)Z method_1057 isFilledWithRotation + m (IIIIZ)V method_1060 setZAxisLine + m (IIII)Z method_1059 isZAxisLineFull + m (Lnet/minecraft/class_251$class_253;Z)V method_1064 forEachEdge + m (Lnet/minecraft/class_2335;III)Z method_1062 containsWithRotation + m (Lnet/minecraft/class_251$class_253;Lnet/minecraft/class_2335;Z)V method_1052 forEachEdgeOnAxis + m (IIIZZ)V method_1049 setFilled + m ()Z method_1056 isEmpty + m (Lnet/minecraft/class_251$class_253;Z)V method_1053 forEachBox + m (Lnet/minecraft/class_251$class_252;)V method_1046 forEachFace + f I field_1374 xSize + f I field_1373 ySize + f I field_1372 zSize + f [Lnet/minecraft/class_2350$class_2351; field_1375 AXIS_VALUES +c net/minecraft/class_251$class_253 net/minecraft/util/math/shapes/VoxelShapePart$ILineConsumer + m (IIIIII)V consume consume +c net/minecraft/class_251$class_252 net/minecraft/util/math/shapes/VoxelShapePart$IFaceConsumer + m (Lnet/minecraft/class_2350;III)V consume consume +c net/minecraft/class_248 net/minecraft/util/math/shapes/DoubleCubeMergingList + f I field_1368 gcd + f I field_1369 secondSize + f Lnet/minecraft/class_246; field_1367 field_212436_a + f I field_1370 firstSize +c net/minecraft/class_250 net/minecraft/util/math/shapes/SimpleDoubleMerger + f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1371 list +c net/minecraft/class_3727 net/minecraft/util/math/shapes/EntitySelectionContext + m (Lnet/minecraft/class_3611;)Z method_27868 func_237495_b_ + m (Lnet/minecraft/class_3611;)Z method_27867 func_237494_a_ + f Z field_16451 sneaking + f Ljava/util/function/Predicate; field_24425 fluidPredicate + f Lnet/minecraft/class_3726; field_17593 DUMMY + f Lnet/minecraft/class_1792; field_17594 item + f D field_16450 posY +c net/minecraft/class_3727$1 net/minecraft/util/math/shapes/EntitySelectionContext$1 +c net/minecraft/class_254 net/minecraft/util/math/shapes/IndirectMerger + f Lit/unimi/dsi/fastutil/ints/IntArrayList; field_1376 list1 + f Lit/unimi/dsi/fastutil/ints/IntArrayList; field_1378 list2 + f Lit/unimi/dsi/fastutil/doubles/DoubleArrayList; field_1377 field_197856_a +c net/minecraft/class_255 net/minecraft/util/math/shapes/IDoubleListMerger + m (Lnet/minecraft/class_255$class_256;)Z method_1065 forMergedIndexes + m ()Lit/unimi/dsi/fastutil/doubles/DoubleList; method_1066 func_212435_a +c net/minecraft/class_255$class_256 net/minecraft/util/math/shapes/IDoubleListMerger$IConsumer + m (III)Z merge merge +c net/minecraft/class_257 net/minecraft/util/math/shapes/NonOverlappingMerger + m (I)D getDouble getDouble + m (Lnet/minecraft/class_255$class_256;)Z method_1067 func_199637_b + m (Lnet/minecraft/class_255$class_256;III)Z method_1068 func_199636_a + m ()I size size + f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1381 list1 + f Z field_1380 field_199640_c + f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1379 list2 +c net/minecraft/class_261 net/minecraft/util/math/shapes/OffsetDoubleList + m ()I size size + m (I)D getDouble getDouble + f D field_1386 offset + f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1387 delegate +c net/minecraft/class_263 net/minecraft/util/math/shapes/SplitVoxelShape + m (Lnet/minecraft/class_251;Lnet/minecraft/class_2350$class_2351;I)Lnet/minecraft/class_251; method_1088 makeShapePart + f Lnet/minecraft/class_2350$class_2351; field_1396 axis + f Lnet/minecraft/class_265; field_1397 shape + f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1395 field_223415_d +c net/minecraft/class_259 net/minecraft/util/math/shapes/VoxelShapes + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_247;)Lnet/minecraft/class_265; method_1072 combineAndSimplify + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_247;)Z method_1074 compare + m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_238;Ljava/util/stream/Stream;D)D method_1085 getAllowedOffset + m (Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_247;Lnet/minecraft/class_251;Lnet/minecraft/class_251;III)Z method_1075 func_199861_a + m ()Lnet/minecraft/class_265; method_1073 empty + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_2350;)Z method_1083 isCubeSideCovered + m (DDD)I method_17943 getDifferenceFloored + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_2350;)Z method_1080 doAdjacentCubeSidesFillSquare + m (Lnet/minecraft/class_265;Lnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_16344 getFaceShape + m (DD)I method_1086 getPrecisionBits + m (Lnet/minecraft/class_255;Lnet/minecraft/class_247;Lnet/minecraft/class_251;ILnet/minecraft/class_251;IIII)Z method_1076 func_199860_a + m ()Lnet/minecraft/class_249; method_1087 func_199863_c + m (Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_251;Lnet/minecraft/class_251;Lnet/minecraft/class_247;)Z method_1071 join + m (DDDDDD)Lnet/minecraft/class_265; method_1081 create + m ([DLnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_238;Lnet/minecraft/class_265;)V method_17946 func_216388_a + m (Lnet/minecraft/class_247;Lnet/minecraft/class_251;IILnet/minecraft/class_251;IIIII)Z method_1070 func_199862_a + m (Lnet/minecraft/class_265;[Lnet/minecraft/class_265;)Lnet/minecraft/class_265; method_17786 or + m (Lnet/minecraft/class_238;Lnet/minecraft/class_4538;DLnet/minecraft/class_3726;Lnet/minecraft/class_2335;Ljava/util/stream/Stream;)D method_17944 getAllowedOffset + m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_238;Lnet/minecraft/class_4538;DLnet/minecraft/class_3726;Ljava/util/stream/Stream;)D method_17945 getAllowedOffset + m (ILit/unimi/dsi/fastutil/doubles/DoubleList;Lit/unimi/dsi/fastutil/doubles/DoubleList;ZZ)Lnet/minecraft/class_255; method_1069 makeListMerger + m (Lnet/minecraft/class_238;)Lnet/minecraft/class_265; method_1078 create + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Lnet/minecraft/class_265; method_1084 or + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Z method_20713 faceShapeCovers + m ()Lnet/minecraft/class_265; method_1077 fullCube + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_247;)Lnet/minecraft/class_265; method_1082 combine + m (II)J method_1079 lcm + f Lnet/minecraft/class_265; field_1385 FULL_CUBE + f Lnet/minecraft/class_265; field_17669 INFINITY + f Lnet/minecraft/class_265; field_1384 EMPTY +c net/minecraft/class_259$class_260 net/minecraft/util/math/shapes/VoxelShapes$ILineConsumer + m (DDDDDD)V consume consume +c net/minecraft/class_265 net/minecraft/util/math/shapes/VoxelShape + m (Lnet/minecraft/class_2350$class_2351;DI)Z method_1101 func_197761_a + m (Lnet/minecraft/class_2350$class_2351;)Lit/unimi/dsi/fastutil/doubles/DoubleList; method_1109 getValues + m ()Lnet/minecraft/class_238; method_1107 getBoundingBox + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_1098 doProject + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_20538 project + m ()Ljava/util/List; method_1090 toBoundingBoxList + m (Lnet/minecraft/class_2335;Lnet/minecraft/class_238;D)D method_1103 getAllowedOffset + m (Lnet/minecraft/class_2350$class_2351;)D method_1091 getStart + m (Lnet/minecraft/class_2350$class_2351;)D method_1105 getEnd + m (Lnet/minecraft/class_259$class_260;)V method_1089 forEachBox + m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_238;D)D method_1108 getAllowedOffset + m (DDD)Z method_1095 contains + m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3965; method_1092 rayTrace + m ()Z method_1110 isEmpty + m (Lnet/minecraft/class_259$class_260;)V method_1104 forEachEdge + m (Lnet/minecraft/class_2350$class_2351;DD)D method_1102 max + m (Ljava/util/List;DDDDDD)V method_1111 func_203431_a + m (Lnet/minecraft/class_259$class_260;IIIIII)V method_1106 func_197750_b + m (DDD)Lnet/minecraft/class_265; method_1096 withOffset + m ()Ljava/lang/String; toString toString + m ()Lnet/minecraft/class_265; method_1097 simplify + m (Lnet/minecraft/class_2350$class_2351;D)I method_1100 getClosestIndex + m ([Lnet/minecraft/class_265;DDDDDD)V method_1094 func_197763_a + m (Lnet/minecraft/class_2350$class_2351;I)D method_1099 getValueUnchecked + m (Lnet/minecraft/class_259$class_260;Lit/unimi/dsi/fastutil/doubles/DoubleList;Lit/unimi/dsi/fastutil/doubles/DoubleList;Lit/unimi/dsi/fastutil/doubles/DoubleList;IIIIII)V method_1112 func_224789_a + f [Lnet/minecraft/class_265; field_19318 projectionCache + f Lnet/minecraft/class_251; field_1401 part +c net/minecraft/class_262 net/minecraft/util/math/shapes/PartSplitVoxelShape + f I field_1394 endZ + f I field_1392 startX + f I field_1388 endY + f I field_1389 endX + f Lnet/minecraft/class_251; field_1393 part + f I field_1390 startZ + f I field_1391 startY +c net/minecraft/class_268 net/minecraft/scoreboard/ScorePlayerTeam + m ()Lnet/minecraft/class_2561; method_1144 getPrefix + m ()Lnet/minecraft/class_2561; method_1136 getSuffix + m (Lnet/minecraft/class_270$class_271;)V method_1145 setCollisionRule + m (Lnet/minecraft/class_270;Lnet/minecraft/class_2561;)Lnet/minecraft/class_5250; method_1142 func_237500_a_ + m (I)V method_1146 setFriendlyFlags + m ()Lnet/minecraft/class_5250; method_1148 func_237501_d_ + m (Lnet/minecraft/class_270$class_272;)V method_1149 setNameTagVisibility + m ()Lnet/minecraft/class_2561; method_1140 getDisplayName + m (Lnet/minecraft/class_2561;)V method_1139 setSuffix + m (Z)V method_1143 setSeeFriendlyInvisiblesEnabled + m (Lnet/minecraft/class_270$class_272;)V method_1133 setDeathMessageVisibility + m (Z)V method_1135 setAllowFriendlyFire + m (Lnet/minecraft/class_124;)V method_1141 setColor + m (Lnet/minecraft/class_2561;)V method_1137 setDisplayName + m ()I method_1147 getFriendlyFlags + m (Lnet/minecraft/class_2561;)V method_1138 setPrefix + f Z field_1416 canSeeFriendlyInvisibles + f Lnet/minecraft/class_270$class_272; field_1423 nameTagVisibility + f Z field_1417 allowFriendlyFire + f Lnet/minecraft/class_270$class_272; field_1422 deathMessageVisibility + f Lnet/minecraft/class_2561; field_1419 suffix + f Lnet/minecraft/class_2561; field_1414 displayName + f Lnet/minecraft/class_2561; field_1418 prefix + f Lnet/minecraft/class_124; field_1424 color + f Lnet/minecraft/class_269; field_1420 scoreboard + f Lnet/minecraft/class_270$class_271; field_1425 collisionRule + f Ljava/lang/String; field_1421 name + f Lnet/minecraft/class_2583; field_24195 field_237499_m_ + f Ljava/util/Set; field_1415 membershipSet +c net/minecraft/class_266 net/minecraft/scoreboard/ScoreObjective + m ()Lnet/minecraft/class_274; method_1116 getCriteria + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_1119 func_237497_a_ + m ()Ljava/lang/String; method_1113 getName + m (Lnet/minecraft/class_2561;)V method_1121 setDisplayName + m ()Lnet/minecraft/class_2561; method_1120 func_197890_e + m ()Lnet/minecraft/class_2561; method_27441 func_237498_g_ + m ()Lnet/minecraft/class_274$class_275; method_1118 getRenderType + m ()Lnet/minecraft/class_269; method_1117 getScoreboard + m ()Lnet/minecraft/class_2561; method_1114 getDisplayName + m (Lnet/minecraft/class_274$class_275;)V method_1115 setRenderType + f Lnet/minecraft/class_2561; field_1402 displayName + f Ljava/lang/String; field_1405 name + f Lnet/minecraft/class_2561; field_24194 field_237496_e_ + f Lnet/minecraft/class_274; field_1406 objectiveCriteria + f Lnet/minecraft/class_269; field_1404 scoreboard + f Lnet/minecraft/class_274$class_275; field_1403 renderType +c net/minecraft/class_269 net/minecraft/scoreboard/Scoreboard + m ()Ljava/util/Collection; method_1196 getTeamNames + m (Ljava/lang/String;Lnet/minecraft/class_266;)Lnet/minecraft/class_267; method_1180 getOrCreateScore + m (Lnet/minecraft/class_2499;Ljava/util/Collection;)V method_1156 func_197894_a + m ()Ljava/util/Collection; method_1163 func_197897_d + m (Lnet/minecraft/class_266;)V method_1173 onObjectiveRemoved + m (Ljava/lang/String;)Lnet/minecraft/class_266; method_1170 getObjective + m (Lnet/minecraft/class_268;)V method_1193 onTeamRemoved + m (Ljava/lang/String;Lnet/minecraft/class_268;)Z method_1172 addPlayerToTeam + m (I)Lnet/minecraft/class_266; method_1189 getObjectiveInDisplaySlot + m (Lnet/minecraft/class_274;)Ljava/util/List; method_1179 func_197903_a + m (Lnet/minecraft/class_268;)V method_1160 onTeamAdded + m (Ljava/lang/String;Lnet/minecraft/class_266;)Lnet/minecraft/class_267; method_1187 func_197904_e + m ()[Ljava/lang/String; method_1186 getDisplaySlotStrings + m (Ljava/lang/String;)Z method_1181 hasObjective + m (Lnet/minecraft/class_1297;)V method_1150 removeEntity + m (Ljava/lang/String;)I method_1192 getObjectiveDisplaySlotNumber + m (Lnet/minecraft/class_268;)V method_1191 removeTeam + m (Ljava/lang/String;)Z method_1195 removePlayerFromTeams + m (Ljava/lang/String;)Lnet/minecraft/class_268; method_1171 createTeam + m (Lnet/minecraft/class_267;)Z method_1177 func_209546_b + m (Ljava/lang/String;Lnet/minecraft/class_274;Lnet/minecraft/class_2561;Lnet/minecraft/class_274$class_275;)Lnet/minecraft/class_266; method_1168 addObjective + m (Lnet/minecraft/class_266;)V method_1185 onObjectiveAdded + m (Ljava/lang/String;)Lnet/minecraft/class_268; method_1164 getPlayersTeam + m (Ljava/lang/String;Lnet/minecraft/class_266;)Z method_1183 entityHasObjective + m (Ljava/lang/String;Lnet/minecraft/class_266;)V method_1155 removeObjectiveFromEntity + m (Lnet/minecraft/class_274;Ljava/lang/String;Ljava/util/function/Consumer;)V method_1162 forAllObjectives + m (Ljava/lang/String;)Ljava/util/Map; method_1174 func_197898_k + m (Lnet/minecraft/class_2499;)V method_1188 func_197905_a + m ()Ljava/util/Collection; method_1178 getObjectiveNames + m (Ljava/lang/String;)Lnet/minecraft/class_266; method_1165 getOrCreateObjective + m ()Ljava/util/Collection; method_1151 getScoreObjectives + m (Ljava/lang/String;Lnet/minecraft/class_268;)V method_1157 removePlayerFromTeam + m (Lnet/minecraft/class_268;)V method_1154 onTeamChanged + m (Lnet/minecraft/class_266;)V method_1194 removeObjective + m ()Ljava/util/Collection; method_1159 getTeams + m (I)Ljava/lang/String; method_1167 getObjectiveDisplaySlot + m (Ljava/lang/String;)V method_1152 onPlayerRemoved + m (Lnet/minecraft/class_266;)Ljava/util/Collection; method_1184 getSortedScores + m ()Lnet/minecraft/class_2499; method_1169 func_197902_i + m (Lnet/minecraft/class_266;)V method_1175 onObjectiveChanged + m (Ljava/lang/String;)Lnet/minecraft/class_268; method_1153 getTeam + m (Ljava/lang/String;)Ljava/util/Map; method_1166 getObjectivesForEntity + m (Ljava/lang/String;Lnet/minecraft/class_266;)V method_1190 onPlayerScoreRemoved + m (ILnet/minecraft/class_266;)V method_1158 setObjectiveInDisplaySlot + m (Ljava/util/function/Consumer;Ljava/lang/String;Lnet/minecraft/class_266;)V method_1182 func_197906_a + m (Lnet/minecraft/class_2499;Lnet/minecraft/class_267;)V method_1161 func_197896_a + m (Lnet/minecraft/class_267;)V method_1176 onScoreChanged + f Ljava/util/Map; field_1427 teamMemberships + f Ljava/util/Map; field_1429 scoreObjectiveCriterias + f [Lnet/minecraft/class_266; field_1432 objectiveDisplaySlots + f [Ljava/lang/String; field_1430 displaySlots + f Ljava/util/Map; field_1426 teams + f Ljava/util/Map; field_1431 entitiesScoreObjectives + f Ljava/util/Map; field_1428 scoreObjectives +c net/minecraft/class_267 net/minecraft/scoreboard/Score + m (I)V method_1128 setScorePoints + m ()Z method_1131 isLocked + m ()I method_1126 getScorePoints + m ()Ljava/lang/String; method_1129 getPlayerName + m ()V method_1130 incrementScore + m (Z)V method_1125 setLocked + m ()V method_1132 reset + m ()Lnet/minecraft/class_266; method_1127 getObjective + m (I)V method_1124 increaseScore + m ()Lnet/minecraft/class_269; method_1122 getScoreScoreboard + m (Lnet/minecraft/class_267;Lnet/minecraft/class_267;)I method_1123 func_210221_a + f Lnet/minecraft/class_269; field_1407 scoreboard + f Lnet/minecraft/class_266; field_1412 objective + f Z field_1408 forceUpdate + f Z field_1411 locked + f Ljava/lang/String; field_1409 scorePlayerName + f I field_1410 scorePoints + f Ljava/util/Comparator; field_1413 SCORE_COMPARATOR +c net/minecraft/class_270 net/minecraft/scoreboard/Team + m ()Lnet/minecraft/class_270$class_272; method_1200 getDeathMessageVisibility + m ()Lnet/minecraft/class_270$class_271; method_1203 getCollisionRule + m ()Z method_1199 getSeeFriendlyInvisiblesEnabled + m ()Z method_1205 getAllowFriendlyFire + m ()Lnet/minecraft/class_124; method_1202 getColor + m ()Ljava/util/Collection; method_1204 getMembershipCollection + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_5250; method_1198 func_230427_d_ + m ()Lnet/minecraft/class_270$class_272; method_1201 getNameTagVisibility + m ()Ljava/lang/String; method_1197 getName + m (Lnet/minecraft/class_270;)Z method_1206 isSameTeam +c net/minecraft/class_270$class_271 net/minecraft/scoreboard/Team$CollisionRule + m (Lnet/minecraft/class_270$class_271;)Ljava/lang/String; method_1207 func_199871_b + m (Lnet/minecraft/class_270$class_271;)Lnet/minecraft/class_270$class_271; method_1208 func_199870_a + m ()Lnet/minecraft/class_2561; method_1209 getDisplayName + m ()[Lnet/minecraft/class_270$class_271; values values + m (Ljava/lang/String;)Lnet/minecraft/class_270$class_271; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_270$class_271; method_1210 getByName + f Ljava/util/Map; field_1438 nameMap + f [Lnet/minecraft/class_270$class_271; field_1439 $VALUES + f Ljava/lang/String; field_1436 name + f Lnet/minecraft/class_270$class_271; field_1437 ALWAYS + f Lnet/minecraft/class_270$class_271; field_1435 NEVER + f Lnet/minecraft/class_270$class_271; field_1434 PUSH_OTHER_TEAMS + f I field_1433 id + f Lnet/minecraft/class_270$class_271; field_1440 PUSH_OWN_TEAM +c net/minecraft/class_270$class_272 net/minecraft/scoreboard/Team$Visible + m (Lnet/minecraft/class_270$class_272;)Lnet/minecraft/class_270$class_272; method_1211 func_199872_a + m (Lnet/minecraft/class_270$class_272;)Ljava/lang/String; method_1212 func_199873_b + m (Ljava/lang/String;)Lnet/minecraft/class_270$class_272; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_270$class_272; method_1213 getByName + m ()Lnet/minecraft/class_2561; method_1214 getDisplayName + m ()[Lnet/minecraft/class_270$class_272; values values + f Lnet/minecraft/class_270$class_272; field_1443 NEVER + f Lnet/minecraft/class_270$class_272; field_1444 HIDE_FOR_OTHER_TEAMS + f Lnet/minecraft/class_270$class_272; field_1446 HIDE_FOR_OWN_TEAM + f Ljava/util/Map; field_1447 nameMap + f I field_1441 id + f [Lnet/minecraft/class_270$class_272; field_1448 $VALUES + f Ljava/lang/String; field_1445 internalName + f Lnet/minecraft/class_270$class_272; field_1442 ALWAYS +c net/minecraft/class_273 net/minecraft/scoreboard/ScoreboardSaveData + m ()Lnet/minecraft/class_2499; method_1217 teamsToNbt + m (Lnet/minecraft/class_2487;)V method_1221 readDisplayConfig + m (Lnet/minecraft/class_2487;)V method_1222 fillInDisplaySlots + m (Lnet/minecraft/class_269;)V method_1218 setScoreboard + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_274;)V method_17947 func_215164_a + m (Lnet/minecraft/class_268;Lnet/minecraft/class_2499;)V method_1215 loadTeamPlayers + m (Lnet/minecraft/class_2499;)V method_1219 readTeams + m ()Lnet/minecraft/class_2499; method_1216 objectivesToNbt + m (Lnet/minecraft/class_2499;)V method_1220 readObjectives + f Lnet/minecraft/class_2487; field_1450 delayedInitNbt + f Lorg/apache/logging/log4j/Logger; field_1451 LOGGER + f Lnet/minecraft/class_269; field_1449 scoreboard +c net/minecraft/class_274 net/minecraft/scoreboard/ScoreCriteria + m (Ljava/lang/String;ILnet/minecraft/class_3448;)Ljava/util/Optional; method_17948 func_216392_a + m ()Ljava/lang/String; method_1225 getName + m (Ljava/lang/String;)Ljava/util/Optional; method_1224 func_216390_a + m ()Lnet/minecraft/class_274$class_275; method_1227 getRenderType + m (Lnet/minecraft/class_3448;Lnet/minecraft/class_2960;)Ljava/util/Optional; method_1223 func_216391_a + m ()Z method_1226 isReadOnly + f [Lnet/minecraft/class_274; field_1466 TEAM_KILL + f Lnet/minecraft/class_274$class_275; field_1467 renderType + f Ljava/lang/String; field_1454 name + f Lnet/minecraft/class_274; field_1465 LEVEL + f Lnet/minecraft/class_274; field_1452 ARMOR + f Lnet/minecraft/class_274; field_1460 XP + f Lnet/minecraft/class_274; field_1456 DEATH_COUNT + f Lnet/minecraft/class_274; field_1468 DUMMY + f Lnet/minecraft/class_274; field_1462 TRIGGER + f Lnet/minecraft/class_274; field_1457 TOTAL_KILL_COUNT + f Lnet/minecraft/class_274; field_1453 HEALTH + f Z field_1461 readOnly + f Lnet/minecraft/class_274; field_1463 PLAYER_KILL_COUNT + f Lnet/minecraft/class_274; field_1459 AIR + f Ljava/util/Map; field_1455 INSTANCES + f [Lnet/minecraft/class_274; field_1458 KILLED_BY_TEAM + f Lnet/minecraft/class_274; field_1464 FOOD +c net/minecraft/class_274$class_275 net/minecraft/scoreboard/ScoreCriteria$RenderType + m (Ljava/lang/String;)Lnet/minecraft/class_274$class_275; method_1229 byId + m ()[Lnet/minecraft/class_274$class_275; values values + m (Ljava/lang/String;)Lnet/minecraft/class_274$class_275; valueOf valueOf + m ()Ljava/lang/String; method_1228 getId + f [Lnet/minecraft/class_274$class_275; field_1473 $VALUES + f Lnet/minecraft/class_274$class_275; field_1471 HEARTS + f Ljava/util/Map; field_1470 field_211841_d + f Ljava/lang/String; field_1469 field_211840_c + f Lnet/minecraft/class_274$class_275; field_1472 INTEGER +c net/minecraft/class_3673 net/minecraft/client/util/NativeUtil + m ()D method_15974 getTime + m ()V method_15973 crash +c net/minecraft/class_4225 net/minecraft/client/audio/SoundSystem + m (Lnet/minecraft/class_4225$class_4105;)Lnet/minecraft/class_4224; method_19663 getSource + m ()J method_20050 openDevice + m (Lnet/minecraft/class_4224;)V method_19662 release + m ()V method_19664 unload + m ()I method_20297 getMaxChannels + m ()Ljava/lang/String; method_20296 getDebugString + m ()Lnet/minecraft/class_4227; method_19665 getListener + m ()V method_19661 init + m ()Lorg/apache/logging/log4j/Logger; method_24869 func_237502_e_ + f J field_18898 device + f Lnet/minecraft/class_4225$class_4276; field_19183 DUMMY_HANDLER + f Lnet/minecraft/class_4225$class_4276; field_19185 streamingHandler + f Lorg/apache/logging/log4j/Logger; field_18897 LOGGER + f Lnet/minecraft/class_4225$class_4276; field_19184 staticHandler + f J field_18899 context + f Lnet/minecraft/class_4227; field_18902 listener +c net/minecraft/class_4225$class_4276 net/minecraft/client/audio/SoundSystem$IHandler + m ()I method_20298 getMaxSoundSources + m ()I method_20299 getActiveSoundSourceCount + m ()Lnet/minecraft/class_4224; method_19666 getSource + m ()V method_19668 unload + m (Lnet/minecraft/class_4224;)Z method_19667 freeSource +c net/minecraft/class_4225$class_4226 net/minecraft/client/audio/SoundSystem$HandlerImpl + f Ljava/util/Set; field_18904 activeSoundSources + f I field_18903 maxSoundSources +c net/minecraft/class_4225$class_4105 net/minecraft/client/audio/SoundSystem$Mode + m (Ljava/lang/String;)Lnet/minecraft/class_4225$class_4105; valueOf valueOf + m ()[Lnet/minecraft/class_4225$class_4105; values values + f Lnet/minecraft/class_4225$class_4105; field_18353 STREAMING + f [Lnet/minecraft/class_4225$class_4105; field_18354 $VALUES + f Lnet/minecraft/class_4225$class_4105; field_18352 STATIC +c net/minecraft/class_4225$1 net/minecraft/client/audio/SoundSystem$1 +c net/minecraft/class_4224 net/minecraft/client/audio/SoundSource + m (Lnet/minecraft/class_243;)V method_19641 updateSource + m (I)V method_19640 readFromStream + m (F)V method_19651 setLinearAttenuation + m (F)V method_19647 setGain + m (I)V method_19652 func_216431_c + m (I)V method_19648 func_216424_b + m ()Lnet/minecraft/class_4224; method_19638 allocateNewSource + m (F)V method_19639 setPitch + m (Z)V method_19649 setRelative + m (Z)V method_19645 setLooping + m ()V method_19657 setNoAttenuation + m (Lnet/minecraft/class_4231;)V method_19642 bindBuffer + m ()I method_19660 removeProcessedBuffers + m ()V method_19655 stop + m ()I method_19659 getState + m (Lnet/minecraft/class_4234;)V method_19643 playStreamableSounds + m ()V method_19658 tick + m ()Z method_19656 isStopped + m ()V method_19646 close + m ()V method_19654 resume + m ()V method_19653 pause + m ()V method_19650 play + m (Ljavax/sound/sampled/AudioFormat;I)I method_19644 getSampleSize + f Lnet/minecraft/class_4234; field_18896 audioStream + f I field_18895 defaultByteBufferCapacity + f Ljava/util/concurrent/atomic/AtomicBoolean; field_18894 playing + f I field_18893 id + f Lorg/apache/logging/log4j/Logger; field_18892 LOGGER +c net/minecraft/class_4228 net/minecraft/client/audio/OggAudioStream + m ()Z method_19677 readToBuffer + m ()V method_19678 clearInputBuffer + m (Ljava/nio/FloatBuffer;Ljava/nio/FloatBuffer;Lnet/minecraft/class_4228$class_4229;)V method_19676 copyFromDualChannels + m ()V close close + m (Ljava/nio/FloatBuffer;Lnet/minecraft/class_4228$class_4229;)V method_19675 copyFromSingleChannel + m ()Ljava/nio/ByteBuffer; method_19721 readOggSound + m (Lnet/minecraft/class_4228$class_4229;)Z method_19674 readOgg + f J field_18907 pointer + f Ljavax/sound/sampled/AudioFormat; field_18908 format + f Ljava/nio/ByteBuffer; field_18910 buffer + f Ljava/io/InputStream; field_18909 stream +c net/minecraft/class_4228$class_4229 net/minecraft/client/audio/OggAudioStream$Buffer + m (F)V method_19680 appendOggAudioBytes + m (Lnet/minecraft/class_4228$class_4229;)I method_19681 func_216448_a + m ()V method_19682 createBuffer + m ()Ljava/nio/ByteBuffer; method_19679 mergeBuffers + f I field_18913 filledBytes + f I field_18912 bufferCapacity + f Ljava/util/List; field_18911 storedBuffers + f Ljava/nio/ByteBuffer; field_18914 currentBuffer +c net/minecraft/class_4227 net/minecraft/client/audio/Listener + m ()F method_19669 getGain + m (Lnet/minecraft/class_243;)V method_19671 setPosition + m (F)V method_19670 setGain + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V method_19672 setOrientation + m ()Lnet/minecraft/class_243; method_27268 getClientLocation + m ()V method_19673 init + f Lnet/minecraft/class_243; field_24051 clientLocation + f F field_18906 gain +c net/minecraft/class_4231 net/minecraft/client/audio/AudioStreamBuffer + m ()Ljava/util/OptionalInt; method_19686 getBuffer + m ()Ljava/util/OptionalInt; method_19688 getUntrackedBuffer + m ()V method_19687 deleteBuffer + f Ljava/nio/ByteBuffer; field_18916 inputBuffer + f Ljavax/sound/sampled/AudioFormat; field_18917 audioFormat + f I field_18919 buffer + f Z field_18918 hasBuffer +c net/minecraft/class_4230 net/minecraft/client/audio/ALUtils + m (I)Ljava/lang/String; method_20052 toALCErrorString + m (JLjava/lang/String;)Z method_20051 checkALCError + m (Ljava/lang/String;)Z method_19684 checkALError + m (I)Ljava/lang/String; method_19683 toALErrorString + m (Ljavax/sound/sampled/AudioFormat;)I method_19685 getFormat + f Lorg/apache/logging/log4j/Logger; field_18915 LOGGER +c net/minecraft/class_390 net/minecraft/client/gui/fonts/providers/IGlyphProvider + m ()V close close + m (I)Lnet/minecraft/class_383; method_2040 getGlyphInfo + m ()Lit/unimi/dsi/fastutil/ints/IntSet; method_27442 func_230428_a_ +c net/minecraft/class_379 net/minecraft/client/gui/fonts/IGlyph + m (Z)F method_16798 getAdvance + m ()F getAdvance getAdvance + m ()F method_16800 getShadowOffset + m ()F method_16799 getBoldOffset + m ()F method_16797 getBearingX +c net/minecraft/class_383 net/minecraft/client/gui/fonts/IGlyphInfo + m ()I method_2031 getWidth + m (II)V method_2030 uploadGlyph + m ()F method_2028 func_211200_h + m ()F method_2027 func_211199_g + m ()F method_2034 func_211198_f + m ()Z method_2033 isColored + m ()F method_2035 getOversample + m ()F method_15976 getBearingY + m ()I method_2032 getHeight + m ()F method_2029 func_211204_i +c net/minecraft/class_4573 com/mojang/blaze3d/systems/IRenderCall + m ()V execute execute +c net/minecraft/class_395 net/minecraft/client/gui/fonts/providers/TrueTypeGlyphProvider + m (Lnet/minecraft/class_395;)F method_2058 func_211613_f + m (Lnet/minecraft/class_395;)F method_2052 func_211615_d + m (I)Z method_27443 func_237505_c_ + m (Lnet/minecraft/class_395;)F method_2057 func_211616_c + m (Lnet/minecraft/class_395;)F method_2054 func_211611_b + m (Lnet/minecraft/class_395;)F method_2055 func_211261_a + m (Lnet/minecraft/class_395;)Lorg/lwjgl/stb/STBTTFontinfo; method_2050 func_211612_e + m (I)Lnet/minecraft/class_395$class_397; method_2051 getGlyphInfo + f F field_2324 ascent + f Ljava/nio/ByteBuffer; field_21839 field_230146_a_ + f F field_2320 shiftX + f F field_2318 shiftY + f F field_2325 scale + f F field_2321 oversample + f Lit/unimi/dsi/fastutil/ints/IntSet; field_2319 chars + f Lorg/lwjgl/stb/STBTTFontinfo; field_2323 fontInfo +c net/minecraft/class_395$class_397 net/minecraft/client/gui/fonts/providers/TrueTypeGlyphProvider$GlpyhInfo + f F field_2334 field_212464_d + f I field_2337 height + f F field_2333 field_212465_e + f F field_2332 advanceWidth + f Lnet/minecraft/class_395; field_2336 field_211590_a + f I field_2335 glyphIndex + f I field_2338 width +c net/minecraft/class_395$1 net/minecraft/client/gui/fonts/providers/TrueTypeGlyphProvider$1 +c net/minecraft/class_276 net/minecraft/client/shader/Framebuffer + m (II)V method_1237 framebufferRender + m (IIZ)V method_1234 resize + m (IIZ)V method_1231 createBuffers + m ()V method_22598 func_227589_f_ + m (IIZ)V method_22594 framebufferRenderExt + m (IIZ)V method_22596 resizeRaw + m (IIZ)V method_1233 framebufferRenderExtRaw + m (IIZ)V method_22599 func_227590_f_ + m (IIZ)V method_22600 func_227591_g_ + m ()I method_30278 func_242997_g + m (FFFF)V method_1236 setFramebufferColor + m ()V method_1241 bindFramebufferTexture + m ()V method_1242 unbindFramebufferTexture + m ()V method_1240 unbindFramebuffer + m ()V method_1238 deleteFramebuffer + m ()I method_30277 func_242996_f + m ()V method_1239 checkFramebufferComplete + m (I)V method_1232 setFramebufferFilter + m (Z)V method_22595 bindFramebufferRaw + m (Lnet/minecraft/class_276;)V method_29329 func_237506_a_ + m (Z)V method_22597 func_227587_d_ + m (Z)V method_1235 bindFramebuffer + m (Z)V method_1230 framebufferClear + f I field_1475 framebufferTexture + f I field_1474 depthBuffer + f Z field_1478 useDepth + f I field_1476 framebufferObject + f [F field_1479 framebufferColor + f I field_1483 framebufferFilter + f I field_1480 framebufferWidth + f I field_1477 framebufferHeight + f I field_1482 framebufferTextureWidth + f I field_1481 framebufferTextureHeight +c net/minecraft/class_4491 com/mojang/blaze3d/Empty3i + f I field_20454 x + f I field_20455 y + f I field_20456 z + f Ljava/util/List; field_20453 linkedRenderCalls +c net/minecraft/class_301 net/minecraft/client/util/LWJGLMemoryUntracker + m ()Ljava/lang/invoke/MethodHandle; method_1408 func_199874_a + m (Lorg/lwjgl/system/Pointer;)V method_1406 untrack + m (J)V method_1407 untrack + f Ljava/lang/invoke/MethodHandle; field_1643 HANDLE +c net/minecraft/class_3674 net/minecraft/client/ClipboardHelper + m (JLorg/lwjgl/glfw/GLFWErrorCallbackI;)Ljava/lang/String; method_15977 getClipboardString + m (JLjava/nio/ByteBuffer;[B)V method_15978 copyToClipboard + m (JLjava/lang/String;)V method_15979 setClipboardString + f Ljava/nio/ByteBuffer; field_16236 buffer +c net/minecraft/class_4492 net/minecraft/client/shader/FramebufferConstants + f I field_20463 GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT + f I field_20458 GL_RENDERBUFFER + f I field_20464 GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER + f I field_20459 GL_COLOR_ATTACHMENT0 + f I field_20465 GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER + f I field_20460 GL_DEPTH_ATTACHMENT + f I field_20461 GL_FRAMEBUFFER_COMPLETE + f I field_20462 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT + f I field_20457 GL_FRAMEBUFFER +c net/minecraft/class_543 net/minecraft/client/renderer/ScreenSize + f Ljava/util/OptionalInt; field_3282 fullscreenWidth + f Z field_3283 fullscreen + f I field_3285 width + f Ljava/util/OptionalInt; field_3286 fullscreenHeight + f I field_3284 height +c net/minecraft/class_4493 com/mojang/blaze3d/platform/GlStateManager + m ()V method_22082 disablePolygonOffset + m (Lnet/minecraft/class_4493$class_1036;I)V method_21969 texGenMode + m ()I method_29334 getActiveTextureId + m ()Z method_29330 isFabulous + m (I)V method_22069 clientActiveTexture + m ()V method_22047 disableDepthTest + m (I)V method_22045 useProgram + m (II)V method_22886 alpha + m (FFF)V method_21942 normal3f + m ()V method_22074 disableFog + m ()V method_21920 enableRescaleNormal + m (ILjava/nio/FloatBuffer;)V method_22019 uniform3f + m ()V method_21997 popAttributes + m (IIIIIIII)V method_29331 copySubImage + m (IIII)V method_21950 blendFuncSeparate + m (IIIIIILjava/nio/ByteBuffer;)V method_21956 readPixels + m (F)V method_21978 fogStart + m (II)V method_22042 bindFramebuffer + m (I)V method_22087 clearStencil + m ()V method_22084 enableLineOffset + m (I)V method_22071 fogMode + m (II)V method_21947 colorMaterial + m (III)V method_22017 stencilFunc + m ()V method_22050 enableDepthTest + m (I)V method_22607 glEnableVertexAttribArray + m (I)V method_22048 deleteProgram + m ()V method_22012 disableAlphaTest + m (Ljava/nio/FloatBuffer;)V method_22884 func_209238_c + m (IFF)V method_21946 multiTexCoord2f + m ()V method_21922 disableRescaleNormal + m (I)V method_21907 matrixMode + m (FFFF)Ljava/nio/FloatBuffer; method_22613 getBuffer + m (ILjava/nio/FloatBuffer;)V method_22007 uniform2f + m (F)V method_21998 fogEnd + m (IIIIIIIIII)V method_29332 blitFramebuffer + m ()V method_23282 setupOutline + m (ILjava/lang/CharSequence;)V method_21961 shaderSource + m (I)V method_22083 shadeModel + m ()I method_29333 getFrameBufferAttachmentParam + m (Lnet/minecraft/class_4493$class_1036;ILjava/nio/FloatBuffer;)V method_21970 texGenParam + m (I)[Lnet/minecraft/class_4493$class_1039; method_21925 func_227614_E_ + m ()V method_22078 disableCull + m (III)V method_22024 stencilOp + m (IF)V method_21945 alphaFunc + m ()V method_21930 clearCurrentColor + m ()V method_22040 enableColorMaterial + m (II)V method_22067 pixelStore + m ()V method_21935 pushLightingAttributes + m (ILjava/nio/FloatBuffer;)V method_21989 getMatrix + m ()I method_21934 getError + m ()V method_22889 mulTextureByProjModelView + m (I)Lnet/minecraft/class_4493$class_1039; method_21927 func_227616_F_ + m ()V method_21912 disableTexture + m (IIII)V method_22025 viewport + m (IIIJ)V method_22038 vertexPointer + m (II)V method_22030 uniform1i + m (I)I method_22035 createShader + m (IIF)V method_21985 texParameter + m (IIIII)V method_21951 framebufferTexture2D + m (F)V method_21940 fogDensity + m (I[F)V method_22033 fog + m ()I method_22068 genFramebuffers + m ()V method_22080 enablePolygonOffset + m ()V method_22044 disableColorMaterial + m (I)V method_22066 glActiveTexture + m (III)V method_22037 drawArrays + m (IF)V method_21983 pixelTransfer + m ()V method_22072 enableFog + m (II)V method_23281 color + m (ILjava/nio/FloatBuffer;)V method_22026 uniform4f + m (I)V method_22041 compileShader + m ()V method_21976 pushTextureAttributes + m (DDDDDD)V method_21939 ortho + m (IIII)V method_22018 glBlendFuncSeparate + m (IIIJ)V method_22032 texCoordPointer + m ()I method_21914 genTexture + m (I)V method_22085 stencilMask + m (ILjava/lang/CharSequence;)I method_21990 getUniformLocation + m (II)V method_22036 bindBuffer + m (I)V method_22079 deleteTexture + m (Z)V method_21974 depthMask + m (II)V method_22016 attachShader + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;Lnet/minecraft/class_1159;)V method_22616 setupLighting + m (ILjava/nio/IntBuffer;)V method_21992 uniform2i + m (IIIIJ)V method_21957 getTexImage + m (IZLjava/nio/FloatBuffer;)V method_22009 uniformMatrix4f + m ()I method_22062 createProgram + m (I)V method_22054 deleteBuffers + m ()V method_22028 enableLighting + m (FFFF)V method_22000 color4f + m ([I)V method_30499 deleteTextures + m ()V method_21928 popMatrix + m (I)V method_22606 enableVertexAttribArray + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V method_24221 setupScaledLighting + m ()V method_22887 setupEndPortalTexGen + m (FF)V method_21941 polygonOffset + m (II)V method_22055 fogi + m (Lnet/minecraft/class_4493$class_1036;)Lnet/minecraft/class_4493$class_1037; method_22010 getTexGen + m (I)V method_22015 blendEquation + m (II)Ljava/lang/String; method_22052 getProgramInfoLog + m (ILjava/lang/CharSequence;)I method_22006 getAttribLocation + m ()V method_21908 disableColorLogicOp + m (IIIZIJ)V method_22609 vertexAttribPointer + m (I)V method_22081 bindTexture + m (II)Ljava/lang/String; method_22049 getShaderInfoLog + m ()V method_22076 enableCull + m (II)I method_22023 getShader + m (IZLjava/nio/FloatBuffer;)V method_21993 uniformMatrix3f + m (D)V method_21936 clearDepth + m (FFFF)V method_21981 rotatef + m (I)Lnet/minecraft/class_4493$class_1018; method_21931 func_227620_H_ + m ()I method_22065 genBuffers + m (ILjava/nio/IntBuffer;)V method_21964 uniform1i + m ()V method_22034 disableLighting + m (I)V method_22060 deleteFramebuffers + m (ILjava/nio/ByteBuffer;I)V method_21962 bufferData + m (I)[Lnet/minecraft/class_4493$class_1018; method_21929 func_227618_G_ + m (I)I method_22063 checkFramebufferStatus + m (ZZZZ)V method_21975 colorMask + m (I)Ljava/lang/String; method_21921 getString + m (II)V method_22058 polygonMode + m ()V method_22888 clearTexGen + m ()V method_21910 enableTexture + m (I)V method_22029 deleteShader + m (IIII)V method_22885 color + m (IIIJ)V method_22043 colorPointer + m (III)V method_21949 texEnv + m (II)V method_21984 blendFunc + m (IZLjava/nio/FloatBuffer;)V method_21966 uniformMatrix2f + m (I)V method_22075 logicOp + m (IIIIIIIIJ)V method_21953 texSubImage2D + m ()V method_22053 disableBlend + m (ILjava/nio/IntBuffer;)V method_22020 uniform4i + m (FFFF)V method_21943 clearColor + m (Lnet/minecraft/class_4493$class_1036;)V method_21995 disableTexGen + m (Lnet/minecraft/class_1159;)V method_21971 multMatrix + m (IILjava/nio/FloatBuffer;)V method_21960 light + m (FFF)V method_21999 translatef + m ()V method_21924 loadIdentity + m ()V method_22021 enableAlphaTest + m (Ljava/nio/FloatBuffer;)V method_21972 multMatrix + m (DDD)V method_21938 translated + m (I)I method_21923 getInteger + m (I)V method_22051 linkProgram + m (ILjava/nio/FloatBuffer;)V method_21991 uniform1f + m (I)V method_21913 enableClientState + m ()V method_23283 teardownOutline + m ()V method_22086 disableLineOffset + m (F)V method_22013 lineWidth + m (I)V method_21944 enableLight + m (IIIIIIIILjava/nio/IntBuffer;)V method_21954 texImage2D + m (III)V method_21986 texParameter + m (IIJ)V method_22031 normalPointer + m ()V method_22056 enableBlend + m (ILjava/nio/IntBuffer;)V method_22008 uniform3i + m (I)V method_22077 activeTexture + m (FFFF)V method_22883 blendColor + m (II)I method_22002 getProgram + m (Lnet/minecraft/class_4493$class_1036;)V method_21968 enableTexGen + m (IZ)V method_21965 clear + m (Lorg/lwjgl/opengl/GLCapabilities;)Ljava/lang/String; method_21973 init + m (FFF)V method_21980 scalef + m ()V method_21926 pushMatrix + m ([I)V method_30498 genTextures + m (DDD)V method_21937 scaled + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V method_24222 setupGui3DMatrix + m (I)V method_22001 depthFunc + m (II)V method_22610 setupOverlayColor + m ()V method_22618 teardownOverlayColor + m (I)V method_21911 disableClientState + m ()V method_21906 enableColorLogicOp + m (ILjava/nio/FloatBuffer;)V method_21963 lightModel + m (III)I method_22003 getTexLevelParameter + f I field_20484 shadeModel + f Ljava/nio/FloatBuffer; field_20466 MATRIX_BUFFER + f Lnet/minecraft/class_4493$class_1017; field_20472 BLEND + f Lnet/minecraft/class_4493$class_1038; field_20478 TEX_GEN + f Lnet/minecraft/class_4493$class_1029; field_20474 FOG + f Lnet/minecraft/class_4493$class_1020; field_20487 COLOR + f Lnet/minecraft/class_4493$class_1035; field_20480 STENCIL + f Lnet/minecraft/class_4493$class_1022; field_20486 COLOR_MASK + f [Lnet/minecraft/class_4493$class_1018; field_20470 LIGHT_ENABLE + f I field_20482 activeTexture + f Lnet/minecraft/class_4493$class_1031; field_20476 POLY_OFFSET + f Ljava/nio/FloatBuffer; field_20771 FLOAT_4_BUFFER + f Lnet/minecraft/class_4493$class_1023; field_20471 COLOR_MATERIAL + f Lnet/minecraft/class_4493$class_1026; field_20473 DEPTH + f Lnet/minecraft/class_4493$class_1010; field_20488 fboMode + f Lnet/minecraft/class_4493$class_1016; field_20468 ALPHA_TEST + f Lnet/minecraft/class_4493$class_1025; field_20475 CULL + f Lnet/minecraft/class_4493$class_1021; field_20477 COLOR_LOGIC + f Lnet/minecraft/class_4493$class_1018; field_20469 LIGHTING + f [Lnet/minecraft/class_4493$class_1039; field_20483 TEXTURES + f Lnet/minecraft/class_4493$class_5343; field_25251 supportType + f Lnet/minecraft/class_4493$class_1018; field_20485 RESCALE_NORMAL +c net/minecraft/class_4493$class_5343 com/mojang/blaze3d/platform/GlStateManager$SupportType + m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_5343; valueOf valueOf + m ()[Lnet/minecraft/class_4493$class_5343; values values + f Lnet/minecraft/class_4493$class_5343; field_25253 BASE + f Lnet/minecraft/class_4493$class_5343; field_25254 EXT + f Lnet/minecraft/class_4493$class_5343; field_25255 NONE + f [Lnet/minecraft/class_4493$class_5343; field_25256 $VALUES +c net/minecraft/class_4493$class_1010 com/mojang/blaze3d/platform/GlStateManager$FramebufferExtension + m ()[Lnet/minecraft/class_4493$class_1010; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_1010; valueOf valueOf + f Lnet/minecraft/class_4493$class_1010; field_4983 ARB + f Lnet/minecraft/class_4493$class_1010; field_4984 EXT + f [Lnet/minecraft/class_4493$class_1010; field_4982 $VALUES + f Lnet/minecraft/class_4493$class_1010; field_4981 BASE +c net/minecraft/class_4493$class_1028 com/mojang/blaze3d/platform/GlStateManager$FogMode + m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_1028; valueOf valueOf + m ()[Lnet/minecraft/class_4493$class_1028; values values + f I field_5093 param + f Lnet/minecraft/class_4493$class_1028; field_5095 LINEAR + f Lnet/minecraft/class_4493$class_1028; field_5096 EXP + f [Lnet/minecraft/class_4493$class_1028; field_5094 $VALUES + f Lnet/minecraft/class_4493$class_1028; field_5097 EXP2 +c net/minecraft/class_4493$class_1029 com/mojang/blaze3d/platform/GlStateManager$FogState + f F field_5101 density + f I field_5102 mode + f F field_5098 end + f Lnet/minecraft/class_4493$class_1018; field_5100 fog + f F field_5099 start +c net/minecraft/class_4493$class_1030 com/mojang/blaze3d/platform/GlStateManager$LogicOp + m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_1030; valueOf valueOf + m ()[Lnet/minecraft/class_4493$class_1030; values values + f Lnet/minecraft/class_4493$class_1030; field_5104 NOR + f Lnet/minecraft/class_4493$class_1030; field_5115 NOOP + f Lnet/minecraft/class_4493$class_1030; field_5105 OR + f Lnet/minecraft/class_4493$class_1030; field_5120 AND + f I field_5108 opcode + f Lnet/minecraft/class_4493$class_1030; field_5117 AND_REVERSE + f Lnet/minecraft/class_4493$class_1030; field_5112 AND_INVERTED + f Lnet/minecraft/class_4493$class_1030; field_5116 OR_INVERTED + f Lnet/minecraft/class_4493$class_1030; field_5103 CLEAR + f Lnet/minecraft/class_4493$class_1030; field_5107 SET + f Lnet/minecraft/class_4493$class_1030; field_5110 OR_REVERSE + f [Lnet/minecraft/class_4493$class_1030; field_5106 $VALUES + f Lnet/minecraft/class_4493$class_1030; field_5111 XOR + f Lnet/minecraft/class_4493$class_1030; field_5118 COPY + f Lnet/minecraft/class_4493$class_1030; field_5119 EQUIV + f Lnet/minecraft/class_4493$class_1030; field_5113 COPY_INVERTED + f Lnet/minecraft/class_4493$class_1030; field_5109 INVERT + f Lnet/minecraft/class_4493$class_1030; field_5114 NAND +c net/minecraft/class_4493$class_1031 com/mojang/blaze3d/platform/GlStateManager$PolygonOffsetState + f F field_5124 factor + f Lnet/minecraft/class_4493$class_1018; field_5123 polyOffset + f F field_5122 units + f Lnet/minecraft/class_4493$class_1018; field_5121 lineOffset +c net/minecraft/class_4493$class_4535 com/mojang/blaze3d/platform/GlStateManager$SourceFactor + m ()[Lnet/minecraft/class_4493$class_4535; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_4535; valueOf valueOf + f Lnet/minecraft/class_4493$class_4535; field_22534 ONE + f Lnet/minecraft/class_4493$class_4535; field_22536 ONE_MINUS_CONSTANT_COLOR + f Lnet/minecraft/class_4493$class_4535; field_22535 ONE_MINUS_CONSTANT_ALPHA + f [Lnet/minecraft/class_4493$class_4535; field_22546 $VALUES + f Lnet/minecraft/class_4493$class_4535; field_22537 ONE_MINUS_DST_ALPHA + f Lnet/minecraft/class_4493$class_4535; field_22538 ONE_MINUS_DST_COLOR + f Lnet/minecraft/class_4493$class_4535; field_22540 ONE_MINUS_SRC_COLOR + f Lnet/minecraft/class_4493$class_4535; field_22539 ONE_MINUS_SRC_ALPHA + f Lnet/minecraft/class_4493$class_4535; field_22541 SRC_ALPHA + f Lnet/minecraft/class_4493$class_4535; field_22530 CONSTANT_ALPHA + f I field_22545 param + f Lnet/minecraft/class_4493$class_4535; field_22532 DST_ALPHA + f Lnet/minecraft/class_4493$class_4535; field_22531 CONSTANT_COLOR + f Lnet/minecraft/class_4493$class_4535; field_22542 SRC_ALPHA_SATURATE + f Lnet/minecraft/class_4493$class_4535; field_22533 DST_COLOR + f Lnet/minecraft/class_4493$class_4535; field_22544 ZERO + f Lnet/minecraft/class_4493$class_4535; field_22543 SRC_COLOR +c net/minecraft/class_4493$class_1034 com/mojang/blaze3d/platform/GlStateManager$StencilFunc + f I field_5148 func + f I field_5147 mask + f I field_16203 ref +c net/minecraft/class_4493$class_1035 com/mojang/blaze3d/platform/GlStateManager$StencilState + f I field_5152 sfail + f Lnet/minecraft/class_4493$class_1034; field_5149 func + f I field_5153 mask + f I field_5151 dpfail + f I field_5150 dppass +c net/minecraft/class_4493$class_1036 com/mojang/blaze3d/platform/GlStateManager$TexGen + m ()[Lnet/minecraft/class_4493$class_1036; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_1036; valueOf valueOf + f Lnet/minecraft/class_4493$class_1036; field_5156 R + f Lnet/minecraft/class_4493$class_1036; field_5155 T + f [Lnet/minecraft/class_4493$class_1036; field_5158 $VALUES + f Lnet/minecraft/class_4493$class_1036; field_5157 Q + f Lnet/minecraft/class_4493$class_1036; field_5154 S +c net/minecraft/class_4493$class_1037 com/mojang/blaze3d/platform/GlStateManager$TexGenCoord + f I field_5161 coord + f I field_5160 mode + f Lnet/minecraft/class_4493$class_1018; field_5159 textureGen +c net/minecraft/class_4493$class_1038 com/mojang/blaze3d/platform/GlStateManager$TexGenState + f Lnet/minecraft/class_4493$class_1037; field_5163 t + f Lnet/minecraft/class_4493$class_1037; field_5165 q + f Lnet/minecraft/class_4493$class_1037; field_5164 r + f Lnet/minecraft/class_4493$class_1037; field_5162 s +c net/minecraft/class_4493$class_1039 com/mojang/blaze3d/platform/GlStateManager$TextureState + f I field_5167 textureName + f Lnet/minecraft/class_4493$class_1018; field_5166 texture2DState +c net/minecraft/class_4493$class_1040 com/mojang/blaze3d/platform/GlStateManager$Viewport + m ()[Lnet/minecraft/class_4493$class_1040; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_1040; valueOf valueOf + f I field_5170 w + f I field_5171 y + f I field_5172 x + f [Lnet/minecraft/class_4493$class_1040; field_5173 $VALUES + f I field_5168 h + f Lnet/minecraft/class_4493$class_1040; field_5169 INSTANCE +c net/minecraft/class_4493$class_1016 com/mojang/blaze3d/platform/GlStateManager$AlphaState + f F field_5043 ref + f I field_5044 func + f Lnet/minecraft/class_4493$class_1018; field_5042 test +c net/minecraft/class_4493$class_1017 com/mojang/blaze3d/platform/GlStateManager$BlendState + f I field_5046 dstFactorAlpha + f I field_5049 srcFactorRgb + f I field_5047 srcFactorAlpha + f Lnet/minecraft/class_4493$class_1018; field_5045 blend + f I field_5048 dstFactorRgb +c net/minecraft/class_4493$class_1018 com/mojang/blaze3d/platform/GlStateManager$BooleanState + m (Z)V method_4470 setEnabled + m ()V method_4471 enable + m ()V method_4469 disable + f Z field_5051 currentState + f I field_5050 capability +c net/minecraft/class_4493$class_1020 com/mojang/blaze3d/platform/GlStateManager$Color + f F field_5057 red + f F field_5055 blue + f F field_5056 green + f F field_5054 alpha +c net/minecraft/class_4493$class_1021 com/mojang/blaze3d/platform/GlStateManager$ColorLogicState + f Lnet/minecraft/class_4493$class_1018; field_5058 colorLogicOp + f I field_5059 logicOpcode +c net/minecraft/class_4493$class_1022 com/mojang/blaze3d/platform/GlStateManager$ColorMask + f Z field_5061 blue + f Z field_5060 alpha + f Z field_5063 red + f Z field_5062 green +c net/minecraft/class_4493$class_1023 com/mojang/blaze3d/platform/GlStateManager$ColorMaterialState + f I field_5066 face + f Lnet/minecraft/class_4493$class_1018; field_5064 colorMaterial + f I field_5065 mode +c net/minecraft/class_4493$class_1025 com/mojang/blaze3d/platform/GlStateManager$CullState + f Lnet/minecraft/class_4493$class_1018; field_5072 cullFace + f I field_5073 mode +c net/minecraft/class_4493$class_1026 com/mojang/blaze3d/platform/GlStateManager$DepthState + f I field_5075 func + f Z field_5076 mask + f Lnet/minecraft/class_4493$class_1018; field_5074 test +c net/minecraft/class_4493$class_4534 com/mojang/blaze3d/platform/GlStateManager$DestFactor + m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_4534; valueOf valueOf + m ()[Lnet/minecraft/class_4493$class_4534; values values + f Lnet/minecraft/class_4493$class_4534; field_22526 SRC_COLOR + f Lnet/minecraft/class_4493$class_4534; field_22515 CONSTANT_COLOR + f Lnet/minecraft/class_4493$class_4534; field_22516 DST_ALPHA + f [Lnet/minecraft/class_4493$class_4534; field_22529 $VALUES + f Lnet/minecraft/class_4493$class_4534; field_22527 ZERO + f Lnet/minecraft/class_4493$class_4534; field_22517 DST_COLOR + f Lnet/minecraft/class_4493$class_4534; field_22518 ONE + f Lnet/minecraft/class_4493$class_4534; field_22519 ONE_MINUS_CONSTANT_ALPHA + f Lnet/minecraft/class_4493$class_4534; field_22520 ONE_MINUS_CONSTANT_COLOR + f Lnet/minecraft/class_4493$class_4534; field_22521 ONE_MINUS_DST_ALPHA + f Lnet/minecraft/class_4493$class_4534; field_22522 ONE_MINUS_DST_COLOR + f Lnet/minecraft/class_4493$class_4534; field_22523 ONE_MINUS_SRC_ALPHA + f Lnet/minecraft/class_4493$class_4534; field_22524 ONE_MINUS_SRC_COLOR + f I field_22528 param + f Lnet/minecraft/class_4493$class_4534; field_22514 CONSTANT_ALPHA + f Lnet/minecraft/class_4493$class_4534; field_22525 SRC_ALPHA +c net/minecraft/class_4493$1 com/mojang/blaze3d/platform/GlStateManager$1 + f [I field_5129 field_212903_a + f [I field_25252 field_237516_b_ + f [I field_20489 field_227773_a_ +c net/minecraft/class_1008 net/minecraft/client/renderer/GlDebugTextUtils + m (I)Ljava/lang/String; method_4222 getSource + m (ILjava/lang/String;)V method_4223 registerGlConstantName + m (I)Ljava/lang/String; method_4228 getType + m (I)Ljava/lang/String; method_4225 getFallbackString + m (IZ)V method_4227 setDebugVerbosity + m (IIIIIJJ)V method_4224 logDebugMessage + m (I)Ljava/lang/String; method_4226 getSeverity + m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_4229 func_209249_b + f Lcom/google/common/base/Joiner; field_4920 NEWLINE_JOINER + f Ljava/nio/FloatBuffer; field_4916 FLOAT_BUFFER + f Ljava/util/Map; field_4922 GL_CONSTANT_NAMES + f Lcom/google/common/base/Joiner; field_4918 STATEMENT_JOINER + f Ljava/nio/IntBuffer; field_4917 INT_BUFFER + f Ljava/nio/ByteBuffer; field_4924 BYTE_BUFFER + f Ljava/util/Map; field_4923 SAVED_STATES + f Lorg/apache/logging/log4j/Logger; field_4921 LOGGER + f Ljava/util/List; field_4919 DEBUG_LEVELS_ARB + f Ljava/util/List; field_4915 DEBUG_LEVELS +c net/minecraft/class_3675 net/minecraft/client/util/InputMappings + m (JIDD)V method_15984 setCursorPosAndMode + m (Ljava/lang/String;)Lnet/minecraft/class_3675$class_306; method_15981 getInputByName + m (JLorg/lwjgl/glfw/GLFWKeyCallbackI;Lorg/lwjgl/glfw/GLFWCharModsCallbackI;)V method_15986 setKeyCallbacks + m (JLorg/lwjgl/glfw/GLFWCursorPosCallbackI;Lorg/lwjgl/glfw/GLFWMouseButtonCallbackI;Lorg/lwjgl/glfw/GLFWScrollCallbackI;Lorg/lwjgl/glfw/GLFWDropCallbackI;)V method_15983 setMouseCallbacks + m (JZ)V method_21736 setRawMouseInput + m (II)Lnet/minecraft/class_3675$class_306; method_15985 getInputByCode + m (JI)Z method_15987 isKeyDown + m ()Z method_21735 func_224790_a + f I field_20334 GLFW_RAW_MOUSE + f Ljava/lang/invoke/MethodHandle; field_20333 GLFW_RAW_MOUSE_SUPPORTED + f Lnet/minecraft/class_3675$class_306; field_16237 INPUT_INVALID +c net/minecraft/class_3675$1 net/minecraft/client/util/InputMappings$1 +c net/minecraft/class_3675$class_306 net/minecraft/client/util/InputMappings$Input + m ()Ljava/lang/String; method_1441 getTranslationKey + m ()Ljava/util/Map; method_1445 func_237521_e_ + m ()Ljava/lang/String; toString toString + m ()Lnet/minecraft/class_2561; method_27445 func_237520_d_ + m ()I hashCode hashCode + m (Lnet/minecraft/class_3675$class_307;ILjava/lang/String;)Lnet/minecraft/class_2561; method_27444 func_237519_a_ + m ()Lnet/minecraft/class_3675$class_307; method_1442 getType + m ()Ljava/util/OptionalInt; method_30103 func_241552_e_ + m ()I method_1444 getKeyCode + m (Ljava/lang/Object;)Z equals equals + f Lnet/minecraft/class_3675$class_307; field_1666 type + f Ljava/lang/String; field_1663 name + f Ljava/util/Map; field_1664 REGISTRY + f I field_1665 keyCode + f Lnet/minecraft/class_3528; field_24196 field_237518_d_ +c net/minecraft/class_3675$class_307 net/minecraft/client/util/InputMappings$Type + m ()[Lnet/minecraft/class_3675$class_307; values values + m (I)Lnet/minecraft/class_3675$class_306; method_1447 getOrMakeInput + m (Ljava/lang/Integer;Ljava/lang/String;)Lnet/minecraft/class_2561; method_27449 func_237527_b_ + m (Ljava/lang/Integer;Ljava/lang/String;)Lnet/minecraft/class_2561; method_27450 func_237528_c_ + m (Ljava/lang/Integer;Ljava/lang/String;)Lnet/minecraft/class_2561; method_27447 func_237524_a_ + m (Lnet/minecraft/class_3675$class_307;)Ljava/util/function/BiFunction; method_27446 func_237523_a_ + m (Lnet/minecraft/class_3675$class_307;)Ljava/lang/String; method_1448 func_237526_b_ + m (Lnet/minecraft/class_3675$class_307;Ljava/lang/String;I)V method_1446 registerInput + m (I)Lnet/minecraft/class_3675$class_306; method_27448 func_237525_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_3675$class_307; valueOf valueOf + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_1674 inputs + f Ljava/util/function/BiFunction; field_24197 field_237522_f_ + f Ljava/lang/String; field_1673 name + f Lnet/minecraft/class_3675$class_307; field_1668 KEYSYM + f [Lnet/minecraft/class_3675$class_307; field_1670 $VALUES + f Lnet/minecraft/class_3675$class_307; field_1671 SCANCODE + f Lnet/minecraft/class_3675$class_307; field_1672 MOUSE +c net/minecraft/class_4494 com/mojang/blaze3d/platform/PlatformDescriptors + m ()Ljava/lang/String; method_22090 getGlRenderer + m ()Ljava/lang/String; method_22091 getGlVersion + m ()Ljava/lang/String; method_22089 getCpuInfo + m ()Ljava/lang/String; method_22088 getGlVendor +c net/minecraft/class_311 net/minecraft/client/renderer/GLAllocation + m (I)Ljava/nio/ByteBuffer; method_1596 createDirectByteBuffer + m (I)Ljava/nio/FloatBuffer; method_1597 createDirectFloatBuffer +c net/minecraft/class_308 net/minecraft/client/renderer/RenderHelper + m (Lnet/minecraft/class_1159;)V method_1452 setupDiffuseGuiLighting + m ()V method_22890 enableStandardItemLighting + m ()V method_1450 disableStandardItemLighting + m ()V method_24210 setupGuiFlatDiffuseLighting + m ()V method_24211 setupGui3DDiffuseLighting + m (Lnet/minecraft/class_1159;)V method_27869 setupLevelDiffuseLighting + f Lnet/minecraft/class_1160; field_24426 DEFAULT_LIGHTING + f Lnet/minecraft/class_1160; field_24427 DIFFUSE_LIGHTING + f Lnet/minecraft/class_1160; field_24429 GUI_3D_DIFFUSE_LIGHTING + f Lnet/minecraft/class_1160; field_24428 GUI_FLAT_DIFFUSE_LIGHTING +c net/minecraft/class_3676 net/minecraft/client/renderer/IMonitorFactory + m (J)Lnet/minecraft/class_313; createMonitor createMonitor +c net/minecraft/class_313 net/minecraft/client/Monitor + m ()I method_1618 getVirtualPosY + m ()I method_1621 getVideoModeCount + m ()V method_1615 setup + m (Ljava/util/Optional;)Lnet/minecraft/class_319; method_1614 getVideoModeOrDefault + m ()Lnet/minecraft/class_319; method_1617 getDefaultVideoMode + m ()I method_1616 getVirtualPosX + m (Lnet/minecraft/class_319;)I method_1619 getVideoModeIndex + m ()J method_1622 getMonitorPointer + m (I)Lnet/minecraft/class_319; method_1620 getVideoModeFromIndex + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_319; field_1802 defaultVideoMode + f I field_1798 virtualPosY + f Ljava/util/List; field_1797 videoModes + f I field_1799 virtualPosX + f J field_1800 monitorPointer +c net/minecraft/class_1050 net/minecraft/client/renderer/texture/PngSizeInfo + m (Ljava/io/InputStream;)Lnet/minecraft/class_1050$class_1051; method_4542 func_195695_a + f I field_5227 width + f I field_5226 height +c net/minecraft/class_1050$class_1053 net/minecraft/client/renderer/texture/PngSizeInfo$ReaderSeekable + f Ljava/nio/channels/SeekableByteChannel; field_5234 channel +c net/minecraft/class_1050$class_1051 net/minecraft/client/renderer/texture/PngSizeInfo$Reader + m (I)V method_4545 func_195684_a + m (JI)I method_4544 func_195683_b + m (J)I method_4546 func_195685_a + m ()V close close + m (JJI)I method_4543 func_195682_a + m (JI)V method_4547 func_195686_a + f Z field_5228 field_195687_a +c net/minecraft/class_1050$1 net/minecraft/client/renderer/texture/PngSizeInfo$1 +c net/minecraft/class_1050$class_1052 net/minecraft/client/renderer/texture/PngSizeInfo$ReaderBuffer + m (I)V method_4548 func_195688_b + f J field_5233 field_195690_c + f Ljava/nio/channels/ReadableByteChannel; field_5229 channel + f I field_5232 field_195691_d + f I field_5231 field_195692_e + f I field_5230 field_195693_f +c net/minecraft/class_1011 net/minecraft/client/renderer/texture/NativeImage + m (IIIIIIIZZZZ)V method_4321 uploadTextureSubRaw + m (I)I method_24033 getRed + m (Ljava/io/File;)V method_4325 write + m (IIIII)V method_4326 fillAreaRGBA + m (IIIILnet/minecraft/class_1011;)V method_4300 resizeSubRectTo + m ()V method_4302 untrack + m (Ljava/nio/ByteBuffer;)Lnet/minecraft/class_1011; method_4324 read + m (IZ)V method_4327 downloadFromTexture + m (II)I method_4315 getPixelRGBA + m ()Lnet/minecraft/class_1011$class_1012; method_4318 getFormat + m (IIIIIIIZZ)V method_4312 uploadTextureSub + m (II)B method_4311 getPixelLuminanceOrAlpha + m ()V method_4319 flip + m ()[I method_4322 makePixelArray + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;)Lnet/minecraft/class_1011; method_15990 readBase64 + m (Lnet/minecraft/class_1011$class_1012;Ljava/nio/ByteBuffer;)Lnet/minecraft/class_1011; method_4303 read + m (Lorg/lwjgl/stb/STBTTFontinfo;IIIFFFFII)V method_4316 renderGlyph + m (I)I method_24035 getBlue + m ()I method_4323 getHeight + m (Z)V method_4313 setWrapST + m (I)I method_24030 getAlpha + m (IIIIIIIZZZZ)V method_22620 func_227794_c_ + m (I)I method_24034 getGreen + m (III)V method_4305 setPixelRGBA + m (IIIIIIIZZZZ)V method_22619 uploadTextureSub + m (Ljava/io/InputStream;)Lnet/minecraft/class_1011; method_4309 read + m ()V method_4320 checkImage + m (Lnet/minecraft/class_1011;)V method_4317 copyImageData + m (IIIZ)V method_4301 uploadTextureSub + m (IIII)I method_24031 getCombined + m (Ljava/nio/channels/WritableByteChannel;)Z method_24032 write + m (ZZ)V method_4308 setMinMagFilters + m (IIIIIIZZ)V method_4304 copyAreaRGBA + m ()[B method_24036 getBytes + m ()V close close + m ()I method_4307 getWidth + m (Ljava/nio/file/Path;)V method_4314 write + m (Lnet/minecraft/class_1011$class_1012;Ljava/io/InputStream;)Lnet/minecraft/class_1011; method_4310 read + f Lorg/apache/logging/log4j/Logger; field_21684 LOGGER + f J field_4988 imagePointer + f I field_4989 height + f Ljava/util/Set; field_4992 OPEN_OPTIONS + f Z field_4990 stbiPointer + f J field_4987 size + f Lnet/minecraft/class_1011$class_1012; field_4986 pixelFormat + f I field_4991 width +c net/minecraft/class_1011$1 net/minecraft/client/renderer/texture/NativeImage$1 +c net/minecraft/class_1011$class_1012 net/minecraft/client/renderer/texture/NativeImage$PixelFormat + m ()Z method_4337 hasLuminanceOrAlpha + m ()Z method_4329 hasAlpha + m ()Z method_4338 isSerializable + m (I)Lnet/minecraft/class_1011$class_1012; method_4336 fromChannelCount + m ()I method_4335 getPixelSize + m (Ljava/lang/String;)Lnet/minecraft/class_1011$class_1012; valueOf valueOf + m ()I method_4330 getOffsetAlphaBits + m ()V method_4340 setGlUnpackAlignment + m ()[Lnet/minecraft/class_1011$class_1012; values values + m ()V method_4339 setGlPackAlignment + m ()I method_4332 getOffsetAlpha + m ()I method_4333 getGlFormat + m (Lnet/minecraft/class_1011$class_1012;)I method_4331 func_211655_a + m (I)Lnet/minecraft/class_1011$class_1012; method_4334 func_211652_a + f Z field_4999 hasAlpha + f I field_5006 offsetAlpha + f Z field_5000 hasLuminance + f I field_5007 offsetLuminance + f Z field_5003 blue + f I field_5008 offsetBlue + f Z field_5004 green + f I field_5009 offsetGreen + f Z field_4996 serializable + f Lnet/minecraft/class_1011$class_1012; field_5001 RGB + f Lnet/minecraft/class_1011$class_1012; field_5002 LUMINANCE_ALPHA + f I field_4993 glFormat + f I field_4994 pixelSize + f Lnet/minecraft/class_1011$class_1012; field_4998 LUMINANCE + f Z field_5005 red + f I field_5010 offsetRed + f [Lnet/minecraft/class_1011$class_1012; field_4995 $VALUES + f Lnet/minecraft/class_1011$class_1012; field_4997 RGBA +c net/minecraft/class_1011$class_1013 net/minecraft/client/renderer/texture/NativeImage$PixelFormatGLCode + m (Ljava/lang/String;)Lnet/minecraft/class_1011$class_1013; valueOf valueOf + m ()[Lnet/minecraft/class_1011$class_1013; values values + m ()I method_4341 getGlFormat + f [Lnet/minecraft/class_1011$class_1013; field_5014 $VALUES + f Lnet/minecraft/class_1011$class_1013; field_5016 INTENSITY + f Lnet/minecraft/class_1011$class_1013; field_5012 RGBA + f Lnet/minecraft/class_1011$class_1013; field_5011 RGB + f Lnet/minecraft/class_1011$class_1013; field_5013 LUMINANCE_ALPHA + f I field_5015 glConstant + f Lnet/minecraft/class_1011$class_1013; field_5017 LUMINANCE +c net/minecraft/class_1011$class_1014 net/minecraft/client/renderer/texture/NativeImage$WriteCallback + m (JJI)V invoke invoke + m ()V method_4342 propagateException + f Ljava/nio/channels/WritableByteChannel; field_5018 channel + f Ljava/io/IOException; field_5019 exception +c net/minecraft/class_323 net/minecraft/client/renderer/MonitorHandler + m (JI)V method_1683 onMonitorUpdate + m (III)I method_15991 clamp + m (J)Lnet/minecraft/class_313; method_1680 getMonitor + m ()V method_15992 close + m (Lnet/minecraft/class_1041;)Lnet/minecraft/class_313; method_1681 getMonitor + f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_1993 monitorsById + f Lnet/minecraft/class_3676; field_1991 monitorFactory +c net/minecraft/class_319 net/minecraft/client/renderer/VideoMode + m ()I method_1667 getGreenBits + m ()I method_1672 getBlueBits + m ()I method_1671 getRefreshRate + m (Ljava/lang/Object;)Z equals equals + m ()I method_1668 getWidth + m ()I method_1669 getHeight + m (Ljava/lang/String;)Ljava/util/Optional; method_1665 parseFromSettings + m ()I method_1666 getRedBits + m ()I hashCode hashCode + m ()Ljava/lang/String; method_1670 getSettingsString + m ()Ljava/lang/String; toString toString + f Ljava/util/regex/Pattern; field_1981 PATTERN + f I field_1976 blueBits + f I field_1975 refreshRate + f I field_1978 redBits + f I field_1977 greenBits + f I field_1980 width + f I field_1979 height +c net/minecraft/class_4536 net/minecraft/client/renderer/texture/TextureUtil + m (I)V method_24957 releaseTextureId + m (Ljava/io/InputStream;)Ljava/lang/String; method_24965 readResourceAsString + m (I)V method_24964 bindTexture + m (Lnet/minecraft/class_1011$class_1013;III)V method_24960 prepareImage + m (IIII)V method_24959 prepareImage + m (III)V method_24958 prepareImage + m (Ljava/nio/IntBuffer;II)V method_24963 initTexture + m (Lnet/minecraft/class_1011$class_1013;IIII)V method_24961 prepareImage + m ()I method_24956 generateTextureId + m (Ljava/io/InputStream;)Ljava/nio/ByteBuffer; method_24962 readToBuffer + f Lorg/apache/logging/log4j/Logger; field_22547 LOGGER +c net/minecraft/class_3678 net/minecraft/client/renderer/IWindowEventListener + m ()V method_15993 updateWindowSize + m ()V method_30133 ignoreFirstMove + m (Z)V method_15995 setGameFocused +c net/minecraft/class_1041 net/minecraft/client/MainWindow + m ()I method_22092 getRefreshRate + m (I)V method_15999 setFramerateLimit + m (JZ)V method_30132 onWindowEnterUpdate + m (Ljava/util/Optional;)V method_4505 setVideoMode + m (JII)V method_4488 onWindowSizeUpdate + m (Z)V method_4485 toggleFullscreen + m (Z)V method_4497 setVsync + m (IJ)V method_4482 logGlError + m ()I method_4477 getWindowY + m ()I method_4507 getHeight + m ()Z method_4498 isFullscreen + m ()Ljava/util/Optional; method_4511 getVideoMode + m ()I method_4502 getScaledHeight + m ()V method_4475 update + m ()I method_4480 getWidth + m ()V close close + m (Ljava/lang/String;)V method_24286 setWindowTitle + m ()J method_4490 getHandle + m ()V method_15998 flipFrame + m ()I method_4489 getFramebufferWidth + m (IZ)I method_4476 calcGuiScale + m ()V method_4513 setLogOnGlError + m ()V method_4483 updateFramebufferSize + m (JII)V method_4504 onFramebufferSizeUpdate + m (Z)V method_21668 setRawMouseInput + m (JZ)V method_4494 onWindowFocusUpdate + m ()I method_4499 getWindowX + m (IJ)V method_4501 throwExceptionForGlError + m ()D method_4495 getGuiScaleFactor + m (Ljava/io/InputStream;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/nio/ByteBuffer; method_4510 loadIcon + m (Ljava/lang/String;)V method_4474 setRenderPhase + m (D)V method_15997 setGuiScale + m ()I method_4486 getScaledWidth + m (Ljava/util/function/BiConsumer;)V method_4492 checkGlfwError + m ()V method_4500 toggleFullscreen + m ()I method_4506 getFramebufferHeight + m (Ljava/io/InputStream;Ljava/io/InputStream;)V method_4491 setWindowIcon + m ()V method_4479 updateVideoMode + m ()Z method_22093 shouldClose + m ()Lnet/minecraft/class_313; method_20831 getMonitor + m ()V method_4481 setThrowExceptionOnGlError + m ()I method_16000 getLimitFramerate + m (JII)V method_4478 onWindowPosUpdate + f I field_5175 prevWindowX + f I field_5180 scaledWidth + f D field_5179 guiScaleFactor + f I field_5197 height + f Z field_5177 lastFullscreen + f I field_5198 windowY + f Lnet/minecraft/class_3678; field_5176 mc + f Z field_5186 videoModeChanged + f I field_5174 prevWindowWidth + f Z field_16517 vsync + f J field_5187 handle + f Lorg/apache/logging/log4j/Logger; field_5178 LOGGER + f I field_5185 prevWindowY + f I field_16238 framerateLimit + f Lorg/lwjgl/glfw/GLFWErrorCallback; field_5190 loggingErrorCallback + f Ljava/lang/String; field_5192 renderPhase + f I field_5196 framebufferHeight + f Ljava/util/Optional; field_5193 videoMode + f I field_5194 scaledHeight + f I field_5181 framebufferWidth + f Z field_5191 fullscreen + f I field_5183 windowX + f I field_5182 width + f Lnet/minecraft/class_323; field_5195 monitorHandler + f I field_5184 prevWindowHeight +c net/minecraft/class_1041$1 net/minecraft/client/MainWindow$1 +c net/minecraft/class_1041$class_4716 net/minecraft/client/MainWindow$GlException +c net/minecraft/class_277 net/minecraft/client/util/JSONBlendingMode + m (Ljava/lang/String;)I method_1247 stringToBlendFunction + m (Ljava/lang/String;)I method_1243 stringToBlendFactor + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m ()Z method_1245 isOpaque + m ()V method_1244 apply + f I field_1489 destColorFactor + f I field_1486 blendFunction + f I field_1488 destAlphaFactor + f Z field_1487 separateBlend + f I field_1491 srcColorFactor + f Z field_1485 opaque + f I field_1490 srcAlphaFactor + f Lnet/minecraft/class_277; field_1484 lastApplied +c net/minecraft/class_278 net/minecraft/client/shader/ShaderDefault + m (FF)V method_1255 set + m (Lnet/minecraft/class_1159;)V method_1250 set + m (IIII)V method_1248 set + m (FFF)V method_1249 set + m (FFFF)V method_1254 set + m (FFFF)V method_1252 setSafe + m ([F)V method_1253 set + m (F)V method_1251 set +c net/minecraft/class_3679 net/minecraft/client/shader/IShaderManager + m ()V method_1279 markDirty + m ()I method_1270 getProgram + m ()Lnet/minecraft/class_281; method_1274 getVertexShaderLoader + m ()Lnet/minecraft/class_281; method_1278 getFragmentShaderLoader +c net/minecraft/class_285 net/minecraft/client/shader/ShaderLinkHelper + m (I)V method_22094 func_227804_a_ + m ()I method_1306 createProgram + m (Lnet/minecraft/class_3679;)V method_1304 deleteShader + m (Lnet/minecraft/class_3679;)V method_1307 linkProgram + f Lorg/apache/logging/log4j/Logger; field_1551 LOGGER +c net/minecraft/class_281 net/minecraft/client/shader/ShaderLoader + m (Lnet/minecraft/class_281$class_282;Ljava/lang/String;Ljava/io/InputStream;Ljava/lang/String;)Lnet/minecraft/class_281; method_1283 func_216534_a + m ()Ljava/lang/String; method_1280 getShaderFilename + m (Lnet/minecraft/class_3679;)V method_1281 attachShader + m ()V method_1282 detachShader + f I field_1523 shader + f I field_1522 shaderAttachCount + f Lnet/minecraft/class_281$class_282; field_1524 shaderType + f Ljava/lang/String; field_1525 shaderFilename +c net/minecraft/class_281$class_282 net/minecraft/client/shader/ShaderLoader$ShaderType + m (Lnet/minecraft/class_281$class_282;)I method_1288 func_216533_a + m (Ljava/lang/String;)Lnet/minecraft/class_281$class_282; valueOf valueOf + m ()I method_1287 getShaderMode + m ()Ljava/lang/String; method_1286 getShaderName + m ()Ljava/util/Map; method_1289 getLoadedShaders + m ()Ljava/lang/String; method_1284 getShaderExtension + m ()[Lnet/minecraft/class_281$class_282; values values + f [Lnet/minecraft/class_281$class_282; field_1532 $VALUES + f Lnet/minecraft/class_281$class_282; field_1531 FRAGMENT + f Ljava/util/Map; field_1527 loadedShaders + f I field_1529 shaderMode + f Lnet/minecraft/class_281$class_282; field_1530 VERTEX + f Ljava/lang/String; field_1526 shaderName + f Ljava/lang/String; field_1528 shaderExtension +c net/minecraft/class_287 net/minecraft/client/renderer/BufferBuilder + m ()V method_22892 growBuffer + m (FFF)V method_1341 sortVertexData + m (I)V method_1335 growBuffer + m (Lnet/minecraft/class_293;)V method_23918 setVertexFormat + m (I)I method_16005 roundUpPositive + m ()Z method_22893 isDrawing + m (Ljava/nio/FloatBuffer;FFFII)F method_1319 getDistanceSq + m (Ljava/nio/FloatBuffer;I)V method_22628 limitToVertex + m ()Lcom/mojang/datafixers/util/Pair; method_22632 getNextBuffer + m ()V method_23477 discard + m ()Lnet/minecraft/class_287$class_288; method_1334 getVertexState + m ()V method_1343 reset + m (ILnet/minecraft/class_293;)V method_1328 begin + m ([FII)I method_22625 func_227830_a_ + m ()V method_1326 finishDrawing + m (Lnet/minecraft/class_287$class_288;)V method_1324 setVertexState + f Lorg/apache/logging/log4j/Logger; field_1557 LOGGER + f Lnet/minecraft/class_296; field_1558 vertexFormatElement + f I field_20775 drawStateIndex + f Z field_21594 fastFormat + f Z field_1556 isDrawing + f Z field_21595 fullFormat + f Lnet/minecraft/class_293; field_1565 vertexFormat + f Ljava/nio/ByteBuffer; field_1555 byteBuffer + f Ljava/util/List; field_20774 drawStates + f I field_1567 drawMode + f I field_1554 vertexCount + f I field_1553 vertexFormatIndex + f I field_20884 nextElementBytes + f I field_20776 renderedBytes + f I field_20777 uploadedBytes +c net/minecraft/class_287$1 net/minecraft/client/renderer/BufferBuilder$1 +c net/minecraft/class_287$class_288 net/minecraft/client/renderer/BufferBuilder$State + m (Lnet/minecraft/class_287$class_288;)Ljava/nio/ByteBuffer; method_22894 func_227842_a_ + m (Lnet/minecraft/class_287$class_288;)Lnet/minecraft/class_293; method_22895 func_227843_b_ + f Lnet/minecraft/class_293; field_1570 stateVertexFormat + f Ljava/nio/ByteBuffer; field_20885 stateByteBuffer +c net/minecraft/class_287$class_4574 net/minecraft/client/renderer/BufferBuilder$DrawState + m ()I method_22635 getVertexCount + m ()Lnet/minecraft/class_293; method_22634 getFormat + m ()I method_22636 getDrawMode + f I field_20780 vertexCount + f Lnet/minecraft/class_293; field_20779 format + f I field_20781 drawMode +c net/minecraft/class_284 net/minecraft/client/shader/ShaderUniform + m ()V method_1303 uploadInt + m ()V method_1302 markDirty + m ()V method_1301 uploadFloat + m (II)V method_22095 func_227805_a_ + m ()V method_1300 upload + m ()Ljava/lang/String; method_1298 getShaderName + m (ILjava/lang/CharSequence;)I method_22096 func_227806_a_ + m ()V close close + m (Ljava/lang/String;)I method_1299 parseType + m ()V method_1296 uploadFloatMatrix + m (ILjava/lang/CharSequence;)I method_22097 func_227807_b_ + m (I)V method_1297 setUniformLocation + f Z field_1542 dirty + f I field_1544 uniformCount + f I field_1545 uniformLocation + f Lnet/minecraft/class_3679; field_1541 shaderManager + f Lorg/apache/logging/log4j/Logger; field_1548 LOGGER + f Ljava/nio/IntBuffer; field_1547 uniformIntBuffer + f I field_1543 uniformType + f Ljava/lang/String; field_1546 shaderName + f Ljava/nio/FloatBuffer; field_1549 uniformFloatBuffer +c net/minecraft/class_4584 com/mojang/blaze3d/vertex/IVertexConsumer + m ()Lnet/minecraft/class_296; method_22900 getCurrentElement + m ()V method_1325 nextVertexFormatIndex + m (IS)V method_22898 putShort + m (IB)V method_22896 putByte + m (IF)V method_22897 putFloat + m (SSI)Lnet/minecraft/class_4588; method_22899 texShort + m (F)B method_24212 normalInt +c net/minecraft/class_286 net/minecraft/client/renderer/WorldVertexBufferUploader + m (Ljava/nio/ByteBuffer;ILnet/minecraft/class_293;I)V method_22639 draw + m (Lnet/minecraft/class_287;)V method_1309 draw + m (Lnet/minecraft/class_287;)V method_22638 func_227845_b_ +c net/minecraft/class_4585 com/mojang/blaze3d/vertex/DefaultColorVertexBuilder + m (IIII)V method_22901 setDefaultColor + f I field_20890 defaultRed + f I field_20892 defaultBlue + f I field_20891 defaultGreen + f I field_20893 defaultAlpha + f Z field_20889 defaultColor +c net/minecraft/class_290 net/minecraft/client/renderer/vertex/DefaultVertexFormats + f Lnet/minecraft/class_293; field_20887 POSITION_COLOR_TEX + f Lnet/minecraft/class_296; field_20886 TEX_2SB + f Lnet/minecraft/class_293; field_1575 POSITION_TEX_COLOR + f Lnet/minecraft/class_296; field_1579 NORMAL_3B + f Lnet/minecraft/class_293; field_20888 POSITION_COLOR_TEX_LIGHTMAP + f Lnet/minecraft/class_296; field_1578 PADDING_1B + f Lnet/minecraft/class_296; field_1581 COLOR_4UB + f Lnet/minecraft/class_293; field_21468 POSITION_COLOR_LIGHTMAP + f Lnet/minecraft/class_296; field_1591 TEX_2F + f Lnet/minecraft/class_293; field_1585 POSITION_TEX + f Lnet/minecraft/class_296; field_1583 TEX_2S + f Lnet/minecraft/class_293; field_1584 PARTICLE_POSITION_TEX_COLOR_LMAP + f Lnet/minecraft/class_293; field_1592 POSITION + f Lnet/minecraft/class_296; field_1587 POSITION_3F + f Lnet/minecraft/class_293; field_1576 POSITION_COLOR + f Lnet/minecraft/class_293; field_1586 POSITION_TEX_LIGHTMAP_COLOR + f Lnet/minecraft/class_293; field_1590 BLOCK + f Lnet/minecraft/class_293; field_1577 POSITION_TEX_COLOR_NORMAL + f Lnet/minecraft/class_293; field_1580 ENTITY +c net/minecraft/class_4583 com/mojang/blaze3d/vertex/MatrixApplyingVertexBuilder + m ()V method_22891 reset + f Lnet/minecraft/class_4581; field_21054 normalMatrixInverted + f F field_20882 normalZ + f I field_20878 v + f Lnet/minecraft/class_1159; field_21053 currentTransformMatrixInverted + f Lnet/minecraft/class_4588; field_20866 vertexBuilder + f I field_20877 u + f F field_20871 posY + f F field_20880 normalX + f I field_20879 light + f F field_20870 posX + f F field_20872 posZ + f F field_20881 normalY +c net/minecraft/class_4587 com/mojang/blaze3d/matrix/MatrixStack + m ()V method_22909 pop + m (DDD)V method_22904 translate + m (Lnet/minecraft/class_1158;)V method_22907 rotate + m ()V method_22903 push + m (FFF)V method_22905 scale + m ()Lnet/minecraft/class_4587$class_4665; method_23760 getLast + m (Ljava/util/ArrayDeque;)V method_22908 func_227864_a_ + m ()Z method_22911 clear + f Ljava/util/Deque; field_20898 stack +c net/minecraft/class_4587$class_4665 com/mojang/blaze3d/matrix/MatrixStack$Entry + m ()Lnet/minecraft/class_1159; method_23761 getMatrix + m (Lnet/minecraft/class_4587$class_4665;)Lnet/minecraft/class_4581; method_23480 func_227873_b_ + m (Lnet/minecraft/class_4587$class_4665;)Lnet/minecraft/class_1159; method_23479 func_227871_a_ + m ()Lnet/minecraft/class_4581; method_23762 getNormal + f Lnet/minecraft/class_4581; field_21328 normal + f Lnet/minecraft/class_1159; field_21327 matrix +c net/minecraft/class_4587$1 com/mojang/blaze3d/matrix/MatrixStack$1 +c net/minecraft/class_291 net/minecraft/client/renderer/vertex/VertexBuffer + m (Ljava/lang/Integer;)V method_22641 func_227876_a_ + m (Lnet/minecraft/class_287;)V method_22648 func_227883_e_ + m (Lnet/minecraft/class_287;)V method_22646 func_227882_d_ + m (Lnet/minecraft/class_1159;I)V method_1351 draw + m ()Ljava/lang/Integer; method_22645 func_227879_c_ + m ()Ljava/lang/Integer; method_22647 func_227881_d_ + m ()V close close + m (Lnet/minecraft/class_287;)Ljava/util/concurrent/CompletableFuture; method_22643 uploadLater + m (Ljava/lang/Runnable;)V method_22642 func_227877_a_ + m ()V method_1353 bindBuffer + m (Lnet/minecraft/class_287;)V method_22644 uploadRaw + m ()V method_1354 unbindBuffer + m (Lnet/minecraft/class_287;)V method_1352 upload + f Lnet/minecraft/class_293; field_1595 vertexFormat + f I field_1593 count + f I field_1594 glBufferId +c net/minecraft/class_289 net/minecraft/client/renderer/Tessellator + m ()V method_1350 draw + m ()Lnet/minecraft/class_287; method_1349 getBuffer + m ()Lnet/minecraft/class_289; method_1348 getInstance + f Lnet/minecraft/class_289; field_1573 INSTANCE + f Lnet/minecraft/class_287; field_1574 buffer +c net/minecraft/class_293 net/minecraft/client/renderer/vertex/VertexFormat + m ()I method_1362 getSize + m (Ljava/lang/Object;)Z equals equals + m ()I method_1359 getIntegerSize + m ()Ljava/lang/String; toString toString + m ()Lcom/google/common/collect/ImmutableList; method_1357 getElements + m ()V method_22651 clearBufferState + m (J)V method_22649 setupBufferState + m ()I hashCode hashCode + m (J)V method_22650 func_227893_b_ + f Lcom/google/common/collect/ImmutableList; field_1602 elements + f I field_1600 vertexSize + f Lit/unimi/dsi/fastutil/ints/IntList; field_1597 offsets +c net/minecraft/class_4588 com/mojang/blaze3d/vertex/IVertexBuilder + m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_777;FFFII)V method_22919 addQuad + m (II)Lnet/minecraft/class_4588; method_22921 lightmap + m (Lnet/minecraft/class_4581;FFF)Lnet/minecraft/class_4588; method_23763 normal + m (FFFFFFFFFIIFFF)V method_23919 addVertex + m (DDD)Lnet/minecraft/class_4588; method_22912 pos + m (II)Lnet/minecraft/class_4588; method_22917 overlay + m (FF)Lnet/minecraft/class_4588; method_22913 tex + m ()V method_1344 endVertex + m (I)Lnet/minecraft/class_4588; method_22922 overlay + m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_777;[FFFF[IIZ)V method_22920 addQuad + m (IIII)Lnet/minecraft/class_4588; method_1336 color + m (FFFF)Lnet/minecraft/class_4588; method_22915 color + m (Lnet/minecraft/class_1159;FFF)Lnet/minecraft/class_4588; method_22918 pos + m (FFF)Lnet/minecraft/class_4588; method_22914 normal + m (I)Lnet/minecraft/class_4588; method_22916 lightmap + f Lorg/apache/logging/log4j/Logger; field_21055 LOGGER +c net/minecraft/class_4720 com/mojang/blaze3d/vertex/VertexBuilderUtils + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_4588;)Lnet/minecraft/class_4588; method_24037 newDelegate +c net/minecraft/class_4720$class_4589 com/mojang/blaze3d/vertex/VertexBuilderUtils$DelegatingVertexBuilder + f Lnet/minecraft/class_4588; field_21685 vertexBuilder + f Lnet/minecraft/class_4588; field_21686 delegateBuilder +c net/minecraft/class_296 net/minecraft/client/renderer/vertex/VertexFormatElement + m ()I method_1387 getSize + m (JI)V method_22652 setupBufferState + m (Ljava/lang/Object;)Z equals equals + m ()I method_1385 getIndex + m ()Lnet/minecraft/class_296$class_298; method_1382 getUsage + m ()Lnet/minecraft/class_296$class_297; method_1386 getType + m ()I hashCode hashCode + m ()V method_22653 clearBufferState + m (ILnet/minecraft/class_296$class_298;)Z method_1383 isFirstOrUV + m ()Ljava/lang/String; toString toString + f I field_1612 elementCount + f I field_21329 sizeBytes + f Lnet/minecraft/class_296$class_297; field_1615 type + f I field_1613 index + f Lnet/minecraft/class_296$class_298; field_1614 usage + f Lorg/apache/logging/log4j/Logger; field_1616 LOGGER +c net/minecraft/class_296$class_297 net/minecraft/client/renderer/vertex/VertexFormatElement$Type + m ()[Lnet/minecraft/class_296$class_297; values values + m ()I method_1391 getSize + m (Ljava/lang/String;)Lnet/minecraft/class_296$class_297; valueOf valueOf + m ()Ljava/lang/String; method_1389 getDisplayName + m ()I method_1390 getGlConstant + f [Lnet/minecraft/class_296$class_297; field_1620 $VALUES + f Ljava/lang/String; field_1626 displayName + f I field_1627 glConstant + f Lnet/minecraft/class_296$class_297; field_1623 FLOAT + f Lnet/minecraft/class_296$class_297; field_1622 USHORT + f Lnet/minecraft/class_296$class_297; field_1624 UBYTE + f Lnet/minecraft/class_296$class_297; field_1621 BYTE + f I field_1618 size + f Lnet/minecraft/class_296$class_297; field_1619 UINT + f Lnet/minecraft/class_296$class_297; field_1617 INT + f Lnet/minecraft/class_296$class_297; field_1625 SHORT +c net/minecraft/class_296$class_298 net/minecraft/client/renderer/vertex/VertexFormatElement$Usage + m (I)V method_22659 func_227906_c_ + m (I)V method_22657 func_227904_b_ + m ()Ljava/lang/String; method_1392 getDisplayName + m (I)V method_22654 clearBufferState + m (I)V method_22663 func_227910_e_ + m (I)V method_22661 func_227908_d_ + m (Lnet/minecraft/class_296$class_298;IIIJI)V method_22656 func_227903_a_ + m (IIIJI)V method_22655 setupBufferState + m (I)V method_22665 func_227912_f_ + m ()[Lnet/minecraft/class_296$class_298; values values + m (IIIJI)V method_22666 func_227913_f_ + m (IIIJI)V method_22664 func_227911_e_ + m (IIIJI)V method_22662 func_227909_d_ + m (IIIJI)V method_22660 func_227907_c_ + m (IIIJI)V method_22658 func_227905_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_296$class_298; valueOf valueOf + m (IIIJI)V method_22667 func_227914_g_ + f Lnet/minecraft/class_296$class_298; field_20782 GENERIC + f Ljava/lang/String; field_1630 displayName + f Lnet/minecraft/class_296$class_298; field_1629 PADDING + f [Lnet/minecraft/class_296$class_298; field_1631 $VALUES + f Ljava/util/function/IntConsumer; field_20784 clearState + f Lnet/minecraft/class_296$class_298; field_1633 POSITION + f Lnet/minecraft/class_296$class_298; field_1636 UV + f Lnet/minecraft/class_296$class_298; field_1635 NORMAL + f Lnet/minecraft/class_296$class_298; field_1632 COLOR + f Lnet/minecraft/class_296$class_298$class_4575; field_20783 setupState +c net/minecraft/class_296$class_298$class_4575 net/minecraft/client/renderer/vertex/VertexFormatElement$Usage$ISetupState + m (IIIJI)V setupBufferState setupBufferState +c net/minecraft/class_4324 net/minecraft/client/util/KeyCombo + m ()Ljava/lang/String; toString toString + m ()V method_20832 func_224800_a + m (C)Z method_20833 func_224799_a + f [C field_19453 field_224801_a + f Ljava/lang/Runnable; field_19455 field_224803_c + f I field_19454 field_224802_b +c net/minecraft/class_1161 net/minecraft/util/math/Tuple3d + f D field_5659 z + f D field_5661 x + f D field_5660 y +c net/minecraft/class_4428 net/minecraft/client/util/UploadSpeed + m (JLnet/minecraft/class_4428;)Ljava/lang/String; method_25030 func_237685_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_4428; valueOf valueOf + m (J)Lnet/minecraft/class_4428; method_25027 func_237682_a_ + m ()[Lnet/minecraft/class_4428; values values + m (J)Ljava/lang/String; method_25029 func_237684_b_ + m (JLnet/minecraft/class_4428;)D method_25028 func_237683_a_ + f Lnet/minecraft/class_4428; field_20200 B + f Lnet/minecraft/class_4428; field_20201 KB + f Lnet/minecraft/class_4428; field_20202 MB + f [Lnet/minecraft/class_4428; field_20204 $VALUES + f Lnet/minecraft/class_4428; field_20203 GB +c net/minecraft/class_4325 com/mojang/realmsclient/RealmsMainScreen + m ()Lnet/minecraft/class_4325; method_20902 func_223942_f + m ()V method_20932 func_223895_s + m ()Lnet/minecraft/class_2960; method_25007 func_243064_o + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIIII)V method_20857 func_243044_a + m (Z)Z method_20881 func_237602_a_ + m ()Z method_20916 func_243063_n + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24977 func_243029_M + m (Lnet/minecraft/class_4877;)Z method_25001 func_223991_i + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_31175 func_243066_p + m ()Lnet/minecraft/class_437; method_20911 func_237640_j_ + m (Lnet/minecraft/class_4185;)V method_24997 func_237635_g_ + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4185;)V method_24984 func_243050_a + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25000 func_237639_i_ + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4877;)V method_20879 func_243056_d + m (Lnet/minecraft/class_4877;)Z method_20874 func_223897_b + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24970 func_243025_F + m (Lnet/minecraft/class_4587;)V method_20837 func_237604_b_ + m ()Lnet/minecraft/class_2561; method_30860 func_243073_t + m ()V method_20834 func_223955_A + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_437; method_24983 func_237584_a_ + m (Lnet/minecraft/class_4325;)Ljava/lang/String; method_20929 func_243035_T + m (Lnet/minecraft/class_4325;)I method_20935 func_243037_V + m (Lnet/minecraft/class_4587;IIII)V method_20846 func_237614_c_ + m (Lnet/minecraft/class_4325;Z)Z method_20888 func_243054_b + m ()V method_20934 func_223965_t + m (Lnet/minecraft/class_4587;IIII)V method_20873 func_237620_d_ + m (Z)Z method_20889 func_223934_c + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_20876 func_237607_b_ + m (Lnet/minecraft/class_4185;)V method_24999 func_237637_h_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25010 func_243068_q + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIII)V method_20856 func_243043_a + m ()Lorg/apache/logging/log4j/Logger; method_20908 func_237638_i_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24978 func_243030_N + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4877;)V method_20862 func_237617_c_ + m (Lnet/minecraft/class_4325;J)Lnet/minecraft/class_4877; method_20861 func_237586_a_ + m (Lnet/minecraft/class_4325;)I method_20937 func_243038_W + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25002 func_237641_j_ + m (Lnet/minecraft/class_4587;)V method_20838 func_237613_c_ + m ()Lnet/minecraft/class_2561; method_30859 func_243071_s + m (Lnet/minecraft/class_4877;)Z method_20884 func_223920_c + m ()I method_20835 func_223989_B + m (Lnet/minecraft/class_4587;IIII)V method_20883 func_237626_e_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25008 func_237649_n_ + m (Lnet/minecraft/class_2960;)Z method_23764 func_227931_a_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_4325$class_5220; method_20921 func_243078_w + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_25012 func_243080_y + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4877;)V method_20887 func_243053_b + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIII)V method_20877 func_237616_c_ + m ()Lnet/minecraft/class_2960; method_25009 func_243075_u + m (Lnet/minecraft/class_4877;)Z method_20892 func_223941_d + m (Lnet/minecraft/class_4325;)Ljava/util/List; method_20913 func_243076_u + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24966 func_243020_A + m ()Lnet/minecraft/class_2561; method_30858 func_243069_r + m (Ljava/lang/String;)Z method_23766 func_227934_a_ + m (Lnet/minecraft/class_4325;)J method_20854 func_237651_o_ + m (Lnet/minecraft/class_4185;)V method_24985 func_237598_a_ + m (Lnet/minecraft/class_4877;Lnet/minecraft/class_437;)V method_20853 func_223911_a + m ()V method_20942 func_223939_y + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24968 func_243023_D + m ()Ljava/util/List; method_30854 func_243060_k + m (Lnet/minecraft/class_4587;Ljava/util/List;II)V method_20867 func_237583_a_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24996 func_237634_g_ + m ()Lnet/minecraft/class_2960; method_25004 func_243061_l + m (Lnet/minecraft/class_4587;IIII)V method_20891 func_237630_f_ + m ()Ljava/util/List; method_20924 func_223952_o + m ()V method_20928 func_223930_q + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24976 func_243028_L + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24982 func_243039_X + m (Lnet/minecraft/class_4877;)Z method_20899 func_223959_e + m ()V method_20897 func_223978_e + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4877;)V method_31173 func_243049_a + m (Lnet/minecraft/class_4325;)V method_20939 func_243040_Y + m ()V method_20841 func_223887_H + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIII)V method_20886 func_237628_e_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24998 func_237636_h_ + m (Lnet/minecraft/class_4325;)I method_20925 func_243021_B + m ()Lnet/minecraft/class_2561; method_30857 func_243067_q + m (Lnet/minecraft/class_4325;[Lnet/minecraft/class_2561;)V method_27451 func_243052_a + m (Lnet/minecraft/class_4185;)V method_24988 func_237612_b_ + m ()Z method_20870 func_223990_b + m (DD)Z method_20871 func_223931_b + m ()V method_20943 func_223949_z + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24969 func_243024_E + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIIIZZ)V method_20859 func_243046_a + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24981 func_243033_Q + m (Lnet/minecraft/class_4587;IIII)V method_20898 func_237633_g_ + m ()Lnet/minecraft/class_4360; method_20914 func_237642_k_ + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIII)V method_20894 func_243055_d + m ()Z method_20920 func_223977_m + m (Lnet/minecraft/class_4587;IIIIZZ)V method_20849 func_237581_a_ + m (Lnet/minecraft/class_4185;)V method_24989 func_237618_c_ + m ()V method_20839 func_223923_F + m ()Lnet/minecraft/class_2561; method_30856 func_243065_p + m (Lnet/minecraft/class_4877;)V method_20903 func_223966_f + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25006 func_237647_m_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24974 func_237569_P_ + m ()V method_20882 func_223901_c + m (Lnet/minecraft/class_4325;)V method_20900 func_243079_x + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24992 func_237627_e_ + m (Lnet/minecraft/class_4325;)I method_20927 func_237575_V_ + m ()V method_20940 func_223962_w + m ([Lnet/minecraft/class_2561;)V method_27452 func_237603_a_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_4185; method_20915 func_243077_v + m (Lnet/minecraft/class_4325$class_4866;)Z method_31172 func_243041_a + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIII)V method_20901 func_243057_e + m ()V method_20922 func_223944_n + m (Lnet/minecraft/class_4877;)V method_20906 func_223906_g + m (J)Lnet/minecraft/class_4877; method_20851 func_223967_a + m (Lnet/minecraft/class_4587;IIIIZ)V method_20848 func_237580_a_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24971 func_243026_G + m (Lnet/minecraft/class_4325;)Z method_20931 func_243034_S + m ()V method_20840 func_223984_G + m (Lnet/minecraft/class_4185;)V method_24990 func_237624_d_ + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIZIIZZ)V method_20860 func_243047_a + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24975 func_243027_K + m (Lnet/minecraft/class_4587;IIIII)V method_24987 func_237606_b_ + m (Lnet/minecraft/class_437;)Lnet/minecraft/class_437; method_24986 func_237599_a_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24967 func_243022_C + m (Lnet/minecraft/class_4325;I)I method_20855 func_243042_a + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24994 func_237631_f_ + m (DD)Z method_20844 func_223979_a + m ()V method_20941 func_223973_x + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIIIZ)V method_20858 func_243045_a + m ()V method_20936 func_223975_u + m (Z)Z method_20896 func_237619_c_ + m (Lnet/minecraft/class_4877;)V method_31174 func_243059_h + m ()Z method_20842 func_223928_a + m (Lnet/minecraft/class_3300;)V method_23765 func_227932_a_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24979 func_243031_O + m (Lnet/minecraft/class_4185;)V method_24993 func_237629_e_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25011 func_243070_r + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24972 func_237567_N_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25003 func_237643_k_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_20885 func_237615_c_ + m ()I method_20836 func_223932_C + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25013 func_237662_z_ + m (Lnet/minecraft/class_4587;II)V method_20872 func_237605_b_ + m (Lnet/minecraft/class_4587;IIZIIZZ)V method_20850 func_237582_a_ + m (Z)V method_24991 func_237625_d_ + m (Lnet/minecraft/class_4325;)I method_20919 func_243074_t + m ()Z method_20918 func_223968_l + m (Lnet/minecraft/class_4877;)Z method_20909 func_223885_h + m (Lnet/minecraft/class_4185;)V method_24995 func_237632_f_ + m ()Lnet/minecraft/class_2561; method_30855 func_243062_m + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24980 func_243032_P + m (CLnet/minecraft/class_4324;)V method_20843 func_237578_a_ + m ()V method_22098 func_237564_L_ + m (Lnet/minecraft/class_4877;)V method_20852 func_223915_a + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4877;)Z method_20895 func_243058_e + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4325$class_5220;)Lnet/minecraft/class_4325$class_5220; method_20863 func_243048_a + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_4325$class_4329; method_20917 func_243072_s + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24973 func_237568_O_ + m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25005 func_237645_l_ + m (Lnet/minecraft/class_4325;)Z method_20933 func_243036_U + m (Lnet/minecraft/class_4325;)V method_20910 func_237621_d_ + m (Lnet/minecraft/class_4325;Z)Z method_20864 func_243051_a + m (Lnet/minecraft/class_4587;II)V method_20845 func_237579_a_ + m ()V method_20938 func_223884_v + m (Lnet/minecraft/class_4325;J)J method_20878 func_237608_b_ + f Z field_19456 field_223993_A + f Z field_19494 field_224031_t + f Lnet/minecraft/class_4185; field_19487 field_224024_m + f Lnet/minecraft/class_2561; field_26454 field_243007_L + f Lnet/minecraft/class_2960; field_22560 REALMS + f Ljava/lang/String; field_19459 field_223996_D + f I field_19461 field_223998_F + f Lnet/minecraft/class_4185; field_19473 field_224010_R + f Ljava/util/List; field_19465 field_224002_J + f Lnet/minecraft/class_2960; field_22548 DARKEN + f Lnet/minecraft/class_2561; field_26461 field_243014_S + f Lnet/minecraft/class_4325$class_5220; field_24198 field_237539_ap_ + f Z field_19495 field_224032_u + f Lnet/minecraft/class_2561; field_26455 field_243008_M + f Lnet/minecraft/class_4185; field_19486 field_224023_l + f Lnet/minecraft/class_2960; field_22559 WORLD_ICON + f I field_19492 field_224029_r + f Lnet/minecraft/class_2561; field_26447 field_243000_E + f Lnet/minecraft/class_5489; field_26466 field_243019_aI + f Lnet/minecraft/class_4185; field_19472 field_224009_Q + f J field_19484 field_224021_j + f Lnet/minecraft/class_2561; field_26462 field_243015_T + f Z field_19457 field_223994_B + f Lnet/minecraft/class_2561; field_26460 field_243013_R + f Lnet/minecraft/class_4325$class_4329; field_19483 field_224020_i + f Z field_19499 field_224036_y + f Lnet/minecraft/class_2960; field_22558 INVITE_ICON + f Lnet/minecraft/class_2561; field_26452 field_243005_J + f Lnet/minecraft/class_4185; field_19485 field_224022_k + f Z field_19478 field_224015_d + f Lnet/minecraft/class_4185; field_19471 field_224008_P + f Z field_19500 field_224037_z + f Lnet/minecraft/class_2960; field_22557 field_237545_s_ + f Lnet/minecraft/class_2561; field_26453 field_243006_K + f I field_19481 field_224018_g + f Lnet/minecraft/class_437; field_19482 field_224019_h + f I field_19460 field_223997_E + f Lnet/minecraft/class_4185; field_19470 field_224007_O + f Lnet/minecraft/class_2960; field_22551 WIDGETS + f Lnet/minecraft/class_2561; field_26458 field_243011_P + f Lnet/minecraft/class_2960; field_22556 LEAVE_ICON + f Z field_19497 field_224034_w + f Z field_19476 field_224013_b + f Lnet/minecraft/class_2561; field_26450 field_243003_H + f Lnet/minecraft/class_2960; field_22553 OFF_ICON + f Lnet/minecraft/class_2960; field_22564 POPUP + f Lnet/minecraft/class_2561; field_26465 field_243018_W + f Z field_19464 field_224001_I + f Ljava/util/concurrent/locks/ReentrantLock; field_19467 field_224004_L + f Lnet/minecraft/class_4185; field_19469 field_224006_N + f Lnet/minecraft/class_2960; field_22550 TRIAL_ICON + f Ljava/util/List; field_26449 field_243002_G + f Lnet/minecraft/class_2561; field_26459 field_243012_Q + f Z field_19498 field_224035_x + f Lnet/minecraft/class_2960; field_22555 EXPIRES_SOON_ICON + f Lnet/minecraft/class_4360; field_19480 field_224017_f + f Lnet/minecraft/class_2561; field_26451 field_243004_I + f Lnet/minecraft/class_2960; field_22552 ON_ICON + f Lnet/minecraft/class_2960; field_22563 NEWS_ICON + f Z field_19458 field_223995_C + f Ljava/util/List; field_19490 field_224027_p + f Ljava/util/List; field_19491 field_224028_q + f Lnet/minecraft/class_2960; field_22554 EXPIRED_ICON + f Lnet/minecraft/class_2561; field_26456 field_243009_N + f Lnet/minecraft/class_4185; field_19489 field_224026_o + f Z field_19462 field_223999_G + f Lnet/minecraft/class_2960; field_22562 QUESTIONMARK + f I field_19493 field_224030_s + f Lnet/minecraft/class_2561; field_26448 field_243001_F + f Lnet/minecraft/class_2561; field_26463 field_243016_U + f Z field_19496 field_224033_v + f Lnet/minecraft/class_2561; field_26457 field_243010_O + f Lnet/minecraft/class_4185; field_19488 field_224025_n + f Lnet/minecraft/class_2960; field_22561 CONFIGURE_ICON + f I field_19466 field_224003_K + f Lnet/minecraft/class_4185; field_19474 field_224011_S + f Ljava/util/List; field_21517 field_227918_e_ + f Lcom/google/common/util/concurrent/RateLimiter; field_19477 field_224014_c + f Lnet/minecraft/class_2561; field_26464 field_243017_V + f Lnet/minecraft/class_437; field_19463 field_224000_H + f Lorg/apache/logging/log4j/Logger; field_19475 LOGGER + f Lnet/minecraft/class_2960; field_22549 CROSS_ICON +c net/minecraft/class_4325$1 com/mojang/realmsclient/RealmsMainScreen$1 + m ()V method_25016 func_237665_b_ + m (Lnet/minecraft/class_4355;)V method_25015 func_237664_a_ + m ()V method_25017 func_237666_c_ + m ()V run run + m ()V method_25014 func_237663_a_ + f Lnet/minecraft/class_4325; field_22565 field_223766_a +c net/minecraft/class_4325$class_5220 com/mojang/realmsclient/RealmsMainScreen$ServerState + m ()[Lnet/minecraft/class_4325$class_5220; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4325$class_5220; valueOf valueOf + f Lnet/minecraft/class_4325$class_5220; field_24199 NONE + f [Lnet/minecraft/class_4325$class_5220; field_24203 $VALUES + f Lnet/minecraft/class_4325$class_5220; field_24202 CONFIGURE + f Lnet/minecraft/class_4325$class_5220; field_24201 LEAVE + f Lnet/minecraft/class_4325$class_5220; field_24200 EXPIRED +c net/minecraft/class_4325$class_4866 com/mojang/realmsclient/RealmsMainScreen$ListEntry + f Lnet/minecraft/class_4325; field_22567 field_237672_a_ +c net/minecraft/class_4325$class_4328 com/mojang/realmsclient/RealmsMainScreen$PendingInvitesButton + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4185;)V method_25023 func_237674_a_ + f Lnet/minecraft/class_4325; field_19516 field_223764_a +c net/minecraft/class_4325$class_4327 com/mojang/realmsclient/RealmsMainScreen$NewsButton + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4185;)V method_25022 func_237673_a_ + f Lnet/minecraft/class_4325; field_19515 field_223763_a +c net/minecraft/class_4325$class_4330 com/mojang/realmsclient/RealmsMainScreen$ServerEntry + m (Lnet/minecraft/class_4325$class_4330;)Lnet/minecraft/class_4877; method_25025 func_243082_a + m (Lnet/minecraft/class_4877;Lnet/minecraft/class_4587;IIII)V method_20945 func_237678_a_ + m (Lnet/minecraft/class_4587;II)V method_20944 func_237676_a_ + m (Lnet/minecraft/class_4877;Lnet/minecraft/class_4587;IIII)V method_20946 func_237679_b_ + f Lnet/minecraft/class_4877; field_19518 field_223734_a + f Lnet/minecraft/class_4325; field_19519 field_223735_b +c net/minecraft/class_4325$class_4329 com/mojang/realmsclient/RealmsMainScreen$ServerList + m (Lnet/minecraft/class_4325$class_4866;)V method_25024 setSelected + m (Lnet/minecraft/class_4325$class_4866;)I method_30161 func_241825_a_ + f Z field_25723 field_241824_o_ + f Lnet/minecraft/class_4325; field_19517 field_223865_a +c net/minecraft/class_4325$class_4331 com/mojang/realmsclient/RealmsMainScreen$TrialServerEntry + m (Lnet/minecraft/class_4587;IIIII)V method_20947 func_237681_a_ + f Lnet/minecraft/class_4325; field_19520 field_223737_a +c net/minecraft/class_4325$class_4332 com/mojang/realmsclient/RealmsMainScreen$InfoButton + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4185;)V method_25026 func_237680_a_ + f Lnet/minecraft/class_4325; field_19521 field_223765_a +c net/minecraft/class_4325$class_4326 com/mojang/realmsclient/RealmsMainScreen$CloseButton + m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4185;)V method_25021 func_237671_a_ + f Lnet/minecraft/class_4325; field_19514 field_223762_a +c net/minecraft/class_4325$3 com/mojang/realmsclient/RealmsMainScreen$3 + m ()V run run + f Lnet/minecraft/class_4325; field_19507 field_223768_a +c net/minecraft/class_4325$2 com/mojang/realmsclient/RealmsMainScreen$2 + m ()V run run + m ()V method_25018 func_237667_a_ + m (Lnet/minecraft/class_4355;)V method_25019 func_237668_a_ + f Lnet/minecraft/class_4325; field_22566 field_223767_a +c net/minecraft/class_4325$5 com/mojang/realmsclient/RealmsMainScreen$5 + m (Lnet/minecraft/class_4355;)V method_25020 func_237670_a_ + m ()V run run + m (Lnet/minecraft/class_4877;)V method_24235 func_243081_a + f Lnet/minecraft/class_4325; field_19509 field_223770_a +c net/minecraft/class_4325$4 com/mojang/realmsclient/RealmsMainScreen$4 + m ()V run run + f Lnet/minecraft/class_4325; field_19508 field_223769_a +c net/minecraft/class_4337 com/mojang/realmsclient/client/FileUpload + m (JI)Z method_20972 func_224882_a + m ()V method_20970 func_224878_a + m (Ljava/util/function/Consumer;)V method_20973 func_224874_a + m (I)Lnet/minecraft/class_4429; method_20971 func_224879_a + m (Lorg/apache/http/client/methods/HttpPost;)V method_20976 func_224872_a + m (Lorg/apache/http/HttpResponse;)J method_20974 func_224880_a + m (Lorg/apache/http/client/methods/HttpPost;Lorg/apache/http/impl/client/CloseableHttpClient;)V method_20977 func_224877_a + m (Lorg/apache/http/HttpResponse;Lnet/minecraft/class_4429$class_4430;)V method_20975 func_224875_a + m ()Lnet/minecraft/class_4429; method_20980 func_224873_c + m ()Z method_20978 func_224881_b + m (JI)Lnet/minecraft/class_4429; method_20979 func_224876_b + f Ljava/lang/String; field_19556 field_224889_g + f Lnet/minecraft/class_4888; field_19554 field_224887_e + f Ljava/util/concurrent/atomic/AtomicBoolean; field_19559 field_224892_j + f Lnet/minecraft/class_4351; field_19558 field_224891_i + f Ljava/lang/String; field_19555 field_224888_f + f Ljava/lang/String; field_19557 field_224890_h + f Lorg/apache/http/client/config/RequestConfig; field_19561 field_224894_l + f J field_19552 field_224885_c + f Lorg/apache/logging/log4j/Logger; field_19550 field_224883_a + f Ljava/io/File; field_19551 field_224884_b + f Ljava/util/concurrent/CompletableFuture; field_19560 field_224893_k + f I field_19553 field_224886_d +c net/minecraft/class_4337$class_4338 com/mojang/realmsclient/client/FileUpload$CustomInputStreamEntity + m (Ljava/io/OutputStream;)V writeTo writeTo + f J field_19562 field_224869_a + f Lnet/minecraft/class_4351; field_19564 field_224871_c + f Ljava/io/InputStream; field_19563 field_224870_b +c net/minecraft/class_4333 com/mojang/realmsclient/client/FileDownload + m (Lnet/minecraft/class_4333;Z)Z method_20963 func_227962_a_ + m (Lnet/minecraft/class_4889;Ljava/lang/String;Lnet/minecraft/class_4392$class_4393;Lnet/minecraft/class_32;)V method_22100 func_237688_a_ + m (Ljava/lang/String;Ljava/io/File;Lnet/minecraft/class_32;)V method_20956 func_237690_a_ + m (Lnet/minecraft/class_4889;Lnet/minecraft/class_4392$class_4393;Ljava/lang/String;Lnet/minecraft/class_32;)V method_22099 func_237687_a_ + m (Lnet/minecraft/class_4333;Z)Z method_20954 func_227964_b_ + m ()Z method_20964 func_224837_d + m (Lnet/minecraft/class_4333;Z)Z method_20959 func_227966_c_ + m (Lnet/minecraft/class_4333;Ljava/lang/String;Ljava/io/File;Lnet/minecraft/class_32;)V method_20952 func_237686_a_ + m (Ljava/io/File;)V method_25031 func_237689_a_ + m ()Z method_20957 func_224835_b + m ()Lorg/apache/logging/log4j/Logger; method_20966 func_227967_e_ + m ()Z method_20961 func_224836_c + m (Ljava/lang/String;)Ljava/lang/String; method_20960 func_224828_b + m (Ljava/lang/String;)J method_20955 func_224827_a + m ()V method_20948 func_224834_a + m (Lnet/minecraft/class_4333;)Ljava/io/File; method_20968 func_227965_c_ + m (Lnet/minecraft/class_4333;)Z method_20965 func_227963_b_ + m (Lnet/minecraft/class_4333;)Z method_20967 func_227960_a_ + f Lorg/apache/http/client/config/RequestConfig; field_19531 field_224852_j + f Lorg/apache/logging/log4j/Logger; field_19522 LOGGER + f Ljava/io/File; field_20490 field_224848_f + f Ljava/lang/Thread; field_19530 field_224851_i + f Ljava/io/File; field_19528 field_224849_g + f Z field_19526 field_224847_e + f Lorg/apache/http/client/methods/HttpGet; field_20491 field_224850_h + f Z field_19524 field_224845_c + f Z field_19525 field_224846_d + f Z field_19523 field_224844_b + f [Ljava/lang/String; field_19532 field_224853_k +c net/minecraft/class_4333$class_4334 com/mojang/realmsclient/client/FileDownload$DownloadCountingOutputStream + m (I)V afterWrite afterWrite + m (Ljava/awt/event/ActionListener;)V method_20969 func_224804_a + f Lnet/minecraft/class_4333; field_19538 field_224805_a + f Ljava/awt/event/ActionListener; field_19539 field_224806_b +c net/minecraft/class_4333$class_4336 com/mojang/realmsclient/client/FileDownload$ResourcePackProgressListener + m (Ljava/awt/event/ActionEvent;)V actionPerformed actionPerformed + f Lnet/minecraft/class_4889; field_19549 field_224821_d + f Lnet/minecraft/class_4333; field_19546 field_224818_a + f Lnet/minecraft/class_4392$class_4393; field_19548 field_224820_c + f Ljava/io/File; field_19547 field_224819_b +c net/minecraft/class_4333$class_4335 com/mojang/realmsclient/client/FileDownload$ProgressListener + m (Ljava/awt/event/ActionEvent;)V actionPerformed actionPerformed + f Ljava/lang/String; field_19541 field_224813_b + f Lnet/minecraft/class_4392$class_4393; field_19544 field_224816_e + f Ljava/io/File; field_19542 field_224814_c + f Lnet/minecraft/class_4333; field_19540 field_224812_a + f Lnet/minecraft/class_32; field_19543 field_224815_d +c net/minecraft/class_4333$1 com/mojang/realmsclient/client/FileDownload$1 +c net/minecraft/class_4341 com/mojang/realmsclient/client/RealmsClient + m ()I method_21029 func_224909_j + m ()V method_21012 func_224941_d + m ()Lnet/minecraft/class_4882; method_21018 func_224915_f + m (J)Lnet/minecraft/class_4868; method_21016 func_224923_d + m (Ljava/lang/String;)Ljava/lang/String; method_21011 func_224926_c + m ()Lnet/minecraft/class_4341$class_4342; method_21027 func_224939_i + m (Ljava/lang/String;)V method_20999 func_224901_a + m ()V method_21001 func_224940_b + m (JI)Z method_20992 func_224927_a + m (J)V method_21013 func_224912_c + m (JILnet/minecraft/class_4883;)V method_20993 func_224925_a + m (JLjava/lang/String;Ljava/lang/String;)V method_21005 func_224922_b + m (J)Ljava/lang/Boolean; method_21022 func_224932_f + m (JLjava/lang/String;)Lnet/minecraft/class_4870; method_21017 func_224906_e + m (Lnet/minecraft/class_4346;)Ljava/lang/String; method_20998 func_224938_a + m ()Lnet/minecraft/class_4879; method_21015 func_224902_e + m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_21007 func_224907_b + m ()V method_21031 func_224937_l + m ()Ljava/lang/Boolean; method_21021 func_224918_g + m (JLjava/lang/String;)Lnet/minecraft/class_4877; method_21004 func_224910_b + m (J)Lnet/minecraft/class_4877; method_20991 func_224935_a + m (Lnet/minecraft/class_4873;)V method_20997 func_224903_a + m (JLjava/lang/String;)Ljava/lang/Boolean; method_21023 func_224924_g + m (JI)Lnet/minecraft/class_4889; method_21003 func_224917_b + m (J)V method_21028 func_224916_h + m (Ljava/lang/String;)V method_21006 func_224913_b + m ()Ljava/lang/Boolean; method_21033 func_224914_n + m (JLjava/lang/String;)V method_20994 func_224908_a + m ()V method_21008 func_224921_c + m (JLjava/lang/String;Ljava/lang/Integer;Z)Ljava/lang/Boolean; method_20995 func_224943_a + m (JLjava/lang/String;)Lnet/minecraft/class_4888; method_21026 func_224934_h + m ()Ljava/lang/Boolean; method_21024 func_224931_h + m ()Lnet/minecraft/class_4341; method_20989 func_224911_a + m (JLjava/lang/String;Ljava/lang/String;)V method_20996 func_224900_a + m (J)Lnet/minecraft/class_4878; method_21009 func_224904_b + m (JLjava/lang/String;)V method_21010 func_224928_c + m ()Lnet/minecraft/class_4876; method_21032 func_224920_m + m ()Lnet/minecraft/class_4872; method_21030 func_224919_k + m (J)Ljava/lang/Boolean; method_21019 func_224942_e + m (JLjava/lang/String;)Lnet/minecraft/class_4870; method_21020 func_224929_f + m (J)Lnet/minecraft/class_4887; method_21025 func_224933_g + m (IILnet/minecraft/class_4877$class_4321;)Lnet/minecraft/class_4891; method_20990 func_224930_a + m (JLjava/lang/String;)Ljava/lang/Boolean; method_21014 func_224905_d + f Ljava/lang/String; field_19580 field_224948_e + f Lorg/apache/logging/log4j/Logger; field_19578 field_224946_c + f Z field_19577 field_224945_b + f Ljava/lang/String; field_19579 field_224947_d + f Lnet/minecraft/class_4869; field_22568 field_237691_f_ + f Lnet/minecraft/class_4341$class_4343; field_19576 field_224944_a +c net/minecraft/class_4341$class_4343 com/mojang/realmsclient/client/RealmsClient$Environment + m (Ljava/lang/String;)Lnet/minecraft/class_4341$class_4343; valueOf valueOf + m ()[Lnet/minecraft/class_4341$class_4343; values values + f Ljava/lang/String; field_19590 field_224899_e + f [Lnet/minecraft/class_4341$class_4343; field_19591 $VALUES + f Lnet/minecraft/class_4341$class_4343; field_19586 PRODUCTION + f Lnet/minecraft/class_4341$class_4343; field_19588 LOCAL + f Lnet/minecraft/class_4341$class_4343; field_19587 STAGE + f Ljava/lang/String; field_19589 field_224898_d +c net/minecraft/class_4341$class_4342 com/mojang/realmsclient/client/RealmsClient$CompatibleVersionResponse + m ()[Lnet/minecraft/class_4341$class_4342; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4341$class_4342; valueOf valueOf + f Lnet/minecraft/class_4341$class_4342; field_19583 OUTDATED + f Lnet/minecraft/class_4341$class_4342; field_19584 OTHER + f [Lnet/minecraft/class_4341$class_4342; field_19585 $VALUES + f Lnet/minecraft/class_4341$class_4342; field_19582 COMPATIBLE +c net/minecraft/class_4339 com/mojang/realmsclient/client/Ping + m ()J method_20985 func_224865_b + m ([Lnet/minecraft/class_4339$class_4340;)Ljava/util/List; method_20984 func_224867_a + m ()Ljava/util/List; method_20981 func_224864_a + m (Ljava/net/Socket;)V method_20983 func_224866_a + m (Ljava/lang/String;)I method_20982 func_224868_a +c net/minecraft/class_4339$class_4340 com/mojang/realmsclient/client/Ping$Region + m (Lnet/minecraft/class_4339$class_4340;)Ljava/lang/String; method_20987 func_224860_a + m (Lnet/minecraft/class_4339$class_4340;)Ljava/lang/String; method_20988 func_224861_b + m (Ljava/lang/String;)Lnet/minecraft/class_4339$class_4340; valueOf valueOf + m ()[Lnet/minecraft/class_4339$class_4340; values values + f Lnet/minecraft/class_4339$class_4340; field_19568 EU_WEST_1 + f Lnet/minecraft/class_4339$class_4340; field_19567 US_WEST_1 + f Lnet/minecraft/class_4339$class_4340; field_19566 US_WEST_2 + f Lnet/minecraft/class_4339$class_4340; field_19571 AP_NORTHEAST_1 + f Lnet/minecraft/class_4339$class_4340; field_19570 AP_SOUTHEAST_2 + f Lnet/minecraft/class_4339$class_4340; field_19569 AP_SOUTHEAST_1 + f [Lnet/minecraft/class_4339$class_4340; field_19575 $VALUES + f Lnet/minecraft/class_4339$class_4340; field_19572 SA_EAST_1 + f Lnet/minecraft/class_4339$class_4340; field_19565 US_EAST_1 + f Ljava/lang/String; field_19573 field_224862_i + f Ljava/lang/String; field_19574 field_224863_j +c net/minecraft/class_4344 com/mojang/realmsclient/client/RealmsClientConfig + m (Ljava/net/Proxy;)V method_21035 func_224896_a + m ()Ljava/net/Proxy; method_21034 func_224895_a + f Ljava/net/Proxy; field_19592 field_224897_a +c net/minecraft/class_4346 com/mojang/realmsclient/client/Request + m ()Lnet/minecraft/class_4346; method_21054 func_224955_d + m (Ljava/lang/String;)Lnet/minecraft/class_4346; method_21040 func_224953_a + m ()Ljava/lang/String; method_21051 func_224963_c + m (Ljava/lang/String;)Lnet/minecraft/class_4346; method_21048 func_224952_b + m (Ljava/lang/String;)Ljava/lang/String; method_21052 func_224956_c + m (Ljava/net/HttpURLConnection;)I method_21044 func_224964_a + m ()Lnet/minecraft/class_4346; method_21055 func_223626_e_ + m ()I method_21047 func_224958_b + m ()I method_21038 func_224957_a + m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4346; method_21049 func_224951_b + m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4346; method_21053 func_224965_c + m (Ljava/lang/String;Ljava/lang/String;II)Lnet/minecraft/class_4346; method_21050 func_224966_b + m (Ljava/lang/String;Ljava/lang/String;II)Lnet/minecraft/class_4346; method_21043 func_224959_a + m (Ljava/net/HttpURLConnection;Ljava/lang/String;)Ljava/lang/String; method_21045 func_224961_a + m (Ljava/net/HttpURLConnection;Ljava/lang/String;Ljava/lang/String;)V method_21046 func_224967_a + m (Ljava/io/InputStream;)Ljava/lang/String; method_21039 func_224954_a + m (Ljava/lang/String;II)Lnet/minecraft/class_4346; method_21041 func_224960_a + m (Ljava/lang/String;Ljava/lang/String;)V method_21042 func_224962_a + m ()V method_21056 func_224950_f + f Ljava/net/HttpURLConnection; field_19596 field_224968_a + f Z field_19598 field_224970_c + f Ljava/lang/String; field_19597 field_224969_b +c net/minecraft/class_4346$class_4348 com/mojang/realmsclient/client/Request$Get + m ()Lnet/minecraft/class_4346$class_4348; method_21058 func_223626_e_ +c net/minecraft/class_4346$class_4347 com/mojang/realmsclient/client/Request$Delete + m ()Lnet/minecraft/class_4346$class_4347; method_21057 func_223626_e_ +c net/minecraft/class_4346$class_4350 com/mojang/realmsclient/client/Request$Put + m ()Lnet/minecraft/class_4346$class_4350; method_21060 func_223626_e_ + f Ljava/lang/String; field_19600 field_224972_c +c net/minecraft/class_4346$class_4349 com/mojang/realmsclient/client/Request$Post + m ()Lnet/minecraft/class_4346$class_4349; method_21059 func_223626_e_ + f Ljava/lang/String; field_19599 field_224971_c +c net/minecraft/class_4345 com/mojang/realmsclient/client/RealmsError + m (Ljava/lang/String;)Lnet/minecraft/class_4345; method_30162 func_241826_a_ + m ()I method_21037 func_224974_b + m ()Ljava/lang/String; method_21036 func_224973_a + f Lorg/apache/logging/log4j/Logger; field_19593 field_224975_a + f Ljava/lang/String; field_19594 field_224976_b + f I field_19595 field_224977_c +c net/minecraft/class_4867 com/mojang/realmsclient/dto/Backup + m ()Z method_25032 func_230749_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_25034 func_230751_a_ + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4867; method_25033 func_230750_a_ + m (Z)V method_25035 func_230752_a_ + f Ljava/util/Date; field_22570 field_230554_b_ + f Ljava/lang/String; field_22569 field_230553_a_ + f Lorg/apache/logging/log4j/Logger; field_22574 field_230558_f_ + f Ljava/util/Map; field_22573 field_230557_e_ + f J field_22571 field_230555_c_ + f Z field_22575 field_230559_g_ + f Ljava/util/Map; field_22572 field_230556_d_ +c net/minecraft/class_4351 com/mojang/realmsclient/client/UploadStatus + f J field_19601 field_224978_a + f J field_19602 field_224979_b +c net/minecraft/class_4869 net/minecraft/realms/PersistenceSerializer + m (Ljava/lang/String;Ljava/lang/Class;)Lnet/minecraft/class_4885; method_25038 func_237695_a_ + m (Lnet/minecraft/class_4885;)Ljava/lang/String; method_25037 func_237694_a_ + f Lcom/google/gson/Gson; field_22578 field_237693_a_ +c net/minecraft/class_4868 com/mojang/realmsclient/dto/BackupList + m (Ljava/lang/String;)Lnet/minecraft/class_4868; method_25036 func_230753_a_ + f Ljava/util/List; field_22576 field_230560_a_ + f Lorg/apache/logging/log4j/Logger; field_22577 field_230561_b_ +c net/minecraft/class_4871 com/mojang/realmsclient/dto/PendingInvite + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4871; method_25040 func_230755_a_ + f Ljava/lang/String; field_22581 field_230564_b_ + f Ljava/lang/String; field_22582 field_230565_c_ + f Ljava/lang/String; field_22583 field_230566_d_ + f Ljava/util/Date; field_22584 field_230567_e_ + f Ljava/lang/String; field_22580 field_230563_a_ + f Lorg/apache/logging/log4j/Logger; field_22585 field_230568_f_ +c net/minecraft/class_4870 com/mojang/realmsclient/dto/Ops + m (Ljava/lang/String;)Lnet/minecraft/class_4870; method_25039 func_230754_a_ + f Ljava/util/Set; field_22579 field_230562_a_ +c net/minecraft/class_4873 com/mojang/realmsclient/dto/PingResult + f Ljava/util/List; field_22589 field_230572_b_ + f Ljava/util/List; field_22588 field_230571_a_ +c net/minecraft/class_4872 com/mojang/realmsclient/dto/PendingInvitesList + m (Ljava/lang/String;)Lnet/minecraft/class_4872; method_25041 func_230756_a_ + f Ljava/util/List; field_22586 field_230569_a_ + f Lorg/apache/logging/log4j/Logger; field_22587 field_230570_b_ +c net/minecraft/class_4875 com/mojang/realmsclient/dto/RealmsDescriptionDto + f Ljava/lang/String; field_22595 field_230578_a_ + f Ljava/lang/String; field_22596 field_230579_b_ +c net/minecraft/class_4874 com/mojang/realmsclient/dto/PlayerInfo + m ()Z method_25051 func_230766_e_ + m ()Ljava/lang/String; method_25042 func_230757_a_ + m ()Ljava/lang/String; method_25045 func_230760_b_ + m ()Z method_25050 func_230765_d_ + m (Ljava/lang/String;)V method_25046 func_230761_b_ + m (Z)V method_25049 func_230764_c_ + m (Ljava/lang/String;)V method_25043 func_230758_a_ + m (Z)V method_25044 func_230759_a_ + m (Z)V method_25047 func_230762_b_ + m ()Z method_25048 func_230763_c_ + f Ljava/lang/String; field_22590 field_230573_a_ + f Ljava/lang/String; field_22591 field_230574_b_ + f Z field_22594 field_230577_e_ + f Z field_22593 field_230576_d_ + f Z field_22592 field_230575_c_ +c net/minecraft/class_4877 com/mojang/realmsclient/dto/RealmsServer + m ()Ljava/util/Map; method_25069 func_237697_e_ + m ()Ljava/lang/Object; clone clone + m (Ljava/lang/String;)Lnet/minecraft/class_4877$class_4321; method_25070 func_230781_e_ + m (Lnet/minecraft/class_4877;)V method_25058 func_230771_a_ + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4877; method_25056 func_230770_a_ + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_4874;Lnet/minecraft/class_4874;)I method_25057 func_229951_lam_ + m (Lnet/minecraft/class_4881;)V method_25059 func_230772_a_ + m ()I hashCode hashCode + m (Ljava/util/Map;)Ljava/util/Map; method_25061 func_230774_a_ + m ()Ljava/lang/String; method_25062 func_230775_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_4877$class_4320; method_25068 func_230780_d_ + m ()Ljava/lang/String; method_25065 func_230778_c_ + m ()Lnet/minecraft/class_4877; method_25067 clone + m (Ljava/lang/String;)Lnet/minecraft/class_4877; method_25066 func_230779_c_ + m ()Ljava/lang/String; method_25053 func_230768_a_ + m (Ljava/lang/String;)V method_25064 func_230777_b_ + m (I)Ljava/lang/String; method_25054 func_237696_a_ + m (Ljava/lang/String;)V method_25060 func_230773_a_ + m (Lcom/google/gson/JsonArray;)Ljava/util/Map; method_25063 func_230776_b_ + m (Lcom/google/gson/JsonArray;)Ljava/util/List; method_25055 func_230769_a_ + f Ljava/util/Map; field_22607 field_230590_i_ + f Ljava/lang/String; field_22615 field_230598_q_ + f Z field_22609 field_230592_k_ + f Ljava/util/List; field_22606 field_230589_h_ + f I field_22614 field_230597_p_ + f Z field_22608 field_230591_j_ + f Ljava/lang/String; field_22613 field_230596_o_ + f I field_22612 field_230595_n_ + f I field_22610 field_230593_l_ + f Lorg/apache/logging/log4j/Logger; field_22617 field_230600_s_ + f Ljava/lang/String; field_22604 field_230587_f_ + f Ljava/lang/String; field_22605 field_230588_g_ + f Ljava/lang/String; field_22601 field_230584_c_ + f Ljava/lang/String; field_22602 field_230585_d_ + f Lnet/minecraft/class_4877$class_4320; field_22603 field_230586_e_ + f Lnet/minecraft/class_4880; field_22616 field_230599_r_ + f J field_22599 field_230582_a_ + f Ljava/lang/String; field_22600 field_230583_b_ + f Lnet/minecraft/class_4877$class_4321; field_22611 field_230594_m_ +c net/minecraft/class_4877$class_4320 com/mojang/realmsclient/dto/RealmsServer$Status + m (Ljava/lang/String;)Lnet/minecraft/class_4877$class_4320; valueOf valueOf + m ()[Lnet/minecraft/class_4877$class_4320; values values + f Lnet/minecraft/class_4877$class_4320; field_19435 UNINITIALIZED + f Lnet/minecraft/class_4877$class_4320; field_19434 OPEN + f [Lnet/minecraft/class_4877$class_4320; field_19436 $VALUES + f Lnet/minecraft/class_4877$class_4320; field_19433 CLOSED +c net/minecraft/class_4877$class_4319 com/mojang/realmsclient/dto/RealmsServer$ServerComparator + m (Lnet/minecraft/class_4877;Lnet/minecraft/class_4877;)I method_20830 compare + m (Ljava/lang/Object;Ljava/lang/Object;)I compare compare + f Ljava/lang/String; field_19432 field_223701_a +c net/minecraft/class_4877$class_4321 com/mojang/realmsclient/dto/RealmsServer$ServerType + m ()[Lnet/minecraft/class_4877$class_4321; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4877$class_4321; valueOf valueOf + f Lnet/minecraft/class_4877$class_4321; field_19437 NORMAL + f Lnet/minecraft/class_4877$class_4321; field_19441 INSPIRATION + f Lnet/minecraft/class_4877$class_4321; field_19440 EXPERIENCE + f [Lnet/minecraft/class_4877$class_4321; field_19442 $VALUES + f Lnet/minecraft/class_4877$class_4321; field_19439 ADVENTUREMAP + f Lnet/minecraft/class_4877$class_4321; field_19438 MINIGAME +c net/minecraft/class_4876 com/mojang/realmsclient/dto/RealmsNews + m (Ljava/lang/String;)Lnet/minecraft/class_4876; method_25052 func_230767_a_ + f Ljava/lang/String; field_22597 field_230580_a_ + f Lorg/apache/logging/log4j/Logger; field_22598 field_230581_b_ +c net/minecraft/class_4879 com/mojang/realmsclient/dto/RealmsServerList + m (Ljava/lang/String;)Lnet/minecraft/class_4879; method_25072 func_230783_a_ + f Ljava/util/List; field_22622 field_230605_a_ + f Lorg/apache/logging/log4j/Logger; field_22623 field_230606_b_ +c net/minecraft/class_4878 com/mojang/realmsclient/dto/RealmsServerAddress + m (Ljava/lang/String;)Lnet/minecraft/class_4878; method_25071 func_230782_a_ + f Ljava/lang/String; field_22620 field_230603_c_ + f Lorg/apache/logging/log4j/Logger; field_22621 field_230604_d_ + f Ljava/lang/String; field_22618 field_230601_a_ + f Ljava/lang/String; field_22619 field_230602_b_ +c net/minecraft/class_4881 com/mojang/realmsclient/dto/RealmsServerPlayerList + m (Lcom/google/gson/JsonArray;)Ljava/util/List; method_25073 func_230784_a_ + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4881; method_25074 func_230785_a_ + f Lcom/google/gson/JsonParser; field_22629 field_237698_d_ + f J field_22626 field_230609_a_ + f Ljava/util/List; field_22627 field_230610_b_ + f Lorg/apache/logging/log4j/Logger; field_22628 field_230611_c_ +c net/minecraft/class_4880 com/mojang/realmsclient/dto/RealmsServerPing + f Ljava/lang/String; field_22625 field_230608_b_ + f Ljava/lang/String; field_22624 field_230607_a_ +c net/minecraft/class_4883 com/mojang/realmsclient/dto/RealmsWorldOptions + m ()Lnet/minecraft/class_4883; method_25076 func_237700_a_ + m ()Lnet/minecraft/class_4883; method_25080 func_237701_b_ + m ()Ljava/lang/String; method_25082 func_230791_c_ + m ()Ljava/lang/Object; clone clone + m ()Lnet/minecraft/class_4883; method_25083 clone + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4883; method_25078 func_230788_a_ + m (I)Ljava/lang/String; method_25077 func_230787_a_ + m (I)Ljava/lang/String; method_25081 func_230790_b_ + m (Z)V method_25079 func_230789_a_ + f Ljava/lang/Boolean; field_22635 field_230617_d_ + f J field_22642 field_230624_k_ + f Ljava/lang/Boolean; field_22634 field_230616_c_ + f Z field_22645 field_230627_n_ + f Ljava/lang/String; field_22641 field_230623_j_ + f Z field_22644 field_230626_m_ + f Ljava/lang/Boolean; field_22637 field_230619_f_ + f Ljava/lang/Boolean; field_22638 field_230620_g_ + f Ljava/lang/Integer; field_22640 field_230622_i_ + f Ljava/lang/String; field_22646 field_237699_o_ + f Ljava/lang/Integer; field_22639 field_230621_h_ + f Ljava/lang/Boolean; field_22632 field_230614_a_ + f Ljava/lang/String; field_22643 field_230625_l_ + f Ljava/lang/Integer; field_22636 field_230618_e_ + f Ljava/lang/Boolean; field_22633 field_230615_b_ +c net/minecraft/class_4882 com/mojang/realmsclient/dto/RealmsServerPlayerLists + m (Ljava/lang/String;)Lnet/minecraft/class_4882; method_25075 func_230786_a_ + f Lorg/apache/logging/log4j/Logger; field_22631 field_230613_b_ + f Ljava/util/List; field_22630 field_230612_a_ +c net/minecraft/class_4885 net/minecraft/realms/IPersistentSerializable +c net/minecraft/class_4884 com/mojang/realmsclient/dto/RealmsWorldResetDto + f J field_22648 field_230629_b_ + f I field_22649 field_230630_c_ + f Ljava/lang/String; field_22647 field_230628_a_ + f Z field_22650 field_230631_d_ +c net/minecraft/class_4887 com/mojang/realmsclient/dto/Subscription + m (Ljava/lang/String;)Lnet/minecraft/class_4887$class_4322; method_25086 func_230794_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_4887; method_25085 func_230793_a_ + f Lnet/minecraft/class_4887$class_4322; field_22655 field_230636_c_ + f Lorg/apache/logging/log4j/Logger; field_22656 field_230637_d_ + f I field_22654 field_230635_b_ + f J field_22653 field_230634_a_ +c net/minecraft/class_4887$class_4322 com/mojang/realmsclient/dto/Subscription$Type + m ()[Lnet/minecraft/class_4887$class_4322; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4887$class_4322; valueOf valueOf + f Lnet/minecraft/class_4887$class_4322; field_19444 RECURRING + f [Lnet/minecraft/class_4887$class_4322; field_19445 $VALUES + f Lnet/minecraft/class_4887$class_4322; field_19443 NORMAL +c net/minecraft/class_4886 com/mojang/realmsclient/dto/RegionPingResult + m ()I method_25084 func_230792_a_ + f I field_22652 field_230633_b_ + f Ljava/lang/String; field_22651 field_230632_a_ +c net/minecraft/class_4352 com/mojang/realmsclient/dto/ValueObject + m (Ljava/lang/reflect/Field;)Z method_25094 func_230801_b_ + m (Ljava/lang/reflect/Field;)Ljava/lang/String; method_25093 func_237702_a_ + m ()Ljava/lang/String; toString toString +c net/minecraft/class_4888 com/mojang/realmsclient/dto/UploadInfo + m (Ljava/lang/String;I)Ljava/net/URI; method_30862 func_243087_a + m ()Ljava/lang/String; method_25087 func_230795_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_4888; method_25088 func_230796_a_ + m (II)I method_30861 func_243086_a + m ()Ljava/net/URI; method_25089 func_243089_b + m (Ljava/lang/String;Ljava/util/regex/Matcher;)Ljava/lang/String; method_30863 func_243088_a + m (Ljava/lang/String;)Ljava/lang/String; method_30864 func_243090_b + m ()Z method_25091 func_230799_c_ + f Ljava/util/regex/Pattern; field_26467 field_243085_b + f Lorg/apache/logging/log4j/Logger; field_22657 field_230638_a_ + f Z field_22658 field_230639_b_ + f Ljava/lang/String; field_22659 field_230640_c_ + f Ljava/net/URI; field_22660 field_230641_d_ +c net/minecraft/class_4889 com/mojang/realmsclient/dto/WorldDownload + m (Ljava/lang/String;)Lnet/minecraft/class_4889; method_25095 func_230802_a_ + f Lorg/apache/logging/log4j/Logger; field_22665 field_230646_d_ + f Ljava/lang/String; field_22662 field_230643_a_ + f Ljava/lang/String; field_22664 field_230645_c_ + f Ljava/lang/String; field_22663 field_230644_b_ +c net/minecraft/class_4891 com/mojang/realmsclient/dto/WorldTemplatePaginatedList + m (Ljava/lang/String;)Lnet/minecraft/class_4891; method_25097 func_230804_a_ + f Ljava/util/List; field_22676 field_230657_a_ + f Lorg/apache/logging/log4j/Logger; field_22680 field_230661_e_ + f I field_22679 field_230660_d_ + f I field_22678 field_230659_c_ + f I field_22677 field_230658_b_ +c net/minecraft/class_4890 com/mojang/realmsclient/dto/WorldTemplate + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4890; method_25096 func_230803_a_ + f Ljava/lang/String; field_22673 field_230654_h_ + f Ljava/lang/String; field_22672 field_230653_g_ + f Lnet/minecraft/class_4890$class_4323; field_22674 field_230655_i_ + f Ljava/lang/String; field_22667 field_230648_b_ + f Ljava/lang/String; field_22669 field_230650_d_ + f Ljava/lang/String; field_22668 field_230649_c_ + f Ljava/lang/String; field_22670 field_230651_e_ + f Lorg/apache/logging/log4j/Logger; field_22675 field_230656_j_ + f Ljava/lang/String; field_22666 field_230647_a_ + f Ljava/lang/String; field_22671 field_230652_f_ +c net/minecraft/class_4890$class_4323 com/mojang/realmsclient/dto/WorldTemplate$Type + m ()[Lnet/minecraft/class_4890$class_4323; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4890$class_4323; valueOf valueOf + f Lnet/minecraft/class_4890$class_4323; field_19449 ADVENTUREMAP + f Lnet/minecraft/class_4890$class_4323; field_19448 MINIGAME + f Lnet/minecraft/class_4890$class_4323; field_19450 EXPERIENCE + f Lnet/minecraft/class_4890$class_4323; field_19451 INSPIRATION + f [Lnet/minecraft/class_4890$class_4323; field_19452 $VALUES + f Lnet/minecraft/class_4890$class_4323; field_19447 WORLD_TEMPLATE +c net/minecraft/class_4354 com/mojang/realmsclient/exception/RealmsHttpException +c net/minecraft/class_4353 com/mojang/realmsclient/exception/RealmsDefaultUncaughtExceptionHandler + m (Ljava/lang/Thread;Ljava/lang/Throwable;)V uncaughtException uncaughtException + f Lorg/apache/logging/log4j/Logger; field_19603 field_224980_a +c net/minecraft/class_4356 com/mojang/realmsclient/exception/RetryCallException + f I field_19608 field_224985_e +c net/minecraft/class_4355 com/mojang/realmsclient/exception/RealmsServiceException + m ()Ljava/lang/String; toString toString + f I field_19606 field_224983_c + f I field_19604 field_224981_a + f Ljava/lang/String; field_19605 field_224982_b + f Ljava/lang/String; field_19607 field_224984_d +c net/minecraft/class_4360 com/mojang/realmsclient/gui/RealmsDataFetcher + m ()V method_21100 func_225084_n + m ()Lnet/minecraft/class_4882; method_21094 func_225079_h + m (Lnet/minecraft/class_4360;Z)Z method_21086 func_237709_b_ + m (Lnet/minecraft/class_4877;)V method_21074 func_225085_a + m (Lnet/minecraft/class_4360;)Ljava/util/Map; method_21084 func_237708_b_ + m ()V method_21088 func_225072_c + m (Lnet/minecraft/class_4360;)Z method_21076 func_225067_a + m ()V method_21083 func_225086_b + m ()Ljava/util/List; method_21091 func_225078_e + m (Lnet/minecraft/class_4360;Lnet/minecraft/class_4882;)Lnet/minecraft/class_4882; method_21078 func_237705_a_ + m ()Lorg/apache/logging/log4j/Logger; method_21098 func_237711_m_ + m (Lnet/minecraft/class_4360;Ljava/lang/String;)Ljava/lang/String; method_21079 func_237706_a_ + m ()Z method_21101 func_225068_o + m (Lnet/minecraft/class_4360$class_4364;)Z method_21075 func_225083_a + m ()V method_21099 func_225069_m + m ()V method_21097 func_225070_k + m ()Z method_21095 func_225059_i + m (Ljava/util/List;)V method_21087 func_225080_b + m ()Z method_21093 func_225071_g + m ()Ljava/lang/String; method_21096 func_225063_j + m (Lnet/minecraft/class_4360;Z)Z method_21081 func_237707_a_ + m ()V method_21090 func_225087_d + m (Lnet/minecraft/class_4360;I)I method_21077 func_237704_a_ + m ()V method_21082 func_237710_c_ + m ()I method_21092 func_225081_f + m ()Z method_21073 func_225065_a + m (Lnet/minecraft/class_4360;Ljava/util/List;)V method_21085 func_225061_a + f Ljava/lang/Runnable; field_19645 field_225094_g + f Ljava/lang/Runnable; field_19643 field_225092_e + f Lorg/apache/logging/log4j/Logger; field_19639 field_225088_a + f Z field_19652 field_225101_n + f Ljava/util/Map; field_19659 field_225108_u + f Ljava/util/Set; field_19647 field_225096_i + f Ljava/lang/String; field_19653 field_225102_o + f Ljava/util/concurrent/ScheduledFuture; field_19656 field_225105_r + f Ljava/util/concurrent/ScheduledFuture; field_19658 field_225107_t + f Z field_19641 field_225090_c + f Ljava/util/concurrent/ScheduledFuture; field_19654 field_225103_p + f Ljava/lang/Runnable; field_19646 field_225095_h + f Ljava/lang/Runnable; field_19644 field_225093_f + f Ljava/util/concurrent/ScheduledExecutorService; field_19640 field_225089_b + f Ljava/lang/Runnable; field_19642 field_225091_d + f Z field_19651 field_225100_m + f Lnet/minecraft/class_4882; field_19649 field_225098_k + f Ljava/util/concurrent/ScheduledFuture; field_19655 field_225104_q + f I field_19650 field_225099_l + f Ljava/util/concurrent/ScheduledFuture; field_19657 field_225106_s + f Ljava/util/List; field_19648 field_225097_j +c net/minecraft/class_4360$1 com/mojang/realmsclient/gui/RealmsDataFetcher$1 +c net/minecraft/class_4360$class_4361 com/mojang/realmsclient/gui/RealmsDataFetcher$LiveStatsTask + m ()V method_21102 func_225048_a + m ()V run run + f Lnet/minecraft/class_4360; field_19661 field_225049_a +c net/minecraft/class_4360$class_4362 com/mojang/realmsclient/gui/RealmsDataFetcher$PendingInviteUpdateTask + m ()V method_21103 func_225051_a + m ()V run run + f Lnet/minecraft/class_4360; field_19662 field_225052_a +c net/minecraft/class_4360$class_4365 com/mojang/realmsclient/gui/RealmsDataFetcher$TrialAvailabilityTask + m ()V run run + m ()V method_21105 func_225055_a + f Lnet/minecraft/class_4360; field_19670 field_225056_a +c net/minecraft/class_4360$class_4366 com/mojang/realmsclient/gui/RealmsDataFetcher$UnreadNewsTask + m ()V run run + m ()V method_21106 func_225057_a + f Lnet/minecraft/class_4360; field_19671 field_225058_a +c net/minecraft/class_4360$class_4363 com/mojang/realmsclient/gui/RealmsDataFetcher$ServerListUpdateTask + m ()V run run + m ()V method_21104 func_225053_a + f Lnet/minecraft/class_4360; field_19663 field_225054_a +c net/minecraft/class_4360$class_4364 com/mojang/realmsclient/gui/RealmsDataFetcher$Task + m ()[Lnet/minecraft/class_4360$class_4364; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4360$class_4364; valueOf valueOf + f Lnet/minecraft/class_4360$class_4364; field_19666 TRIAL_AVAILABLE + f Lnet/minecraft/class_4360$class_4364; field_19665 PENDING_INVITE + f Lnet/minecraft/class_4360$class_4364; field_19667 LIVE_STATS + f Lnet/minecraft/class_4360$class_4364; field_19668 UNREAD_NEWS + f [Lnet/minecraft/class_4360$class_4364; field_19669 $VALUES + f Lnet/minecraft/class_4360$class_4364; field_19664 SERVER_LIST +c net/minecraft/class_5221 net/minecraft/realms/IErrorConsumer + m (Ljava/lang/String;)V method_27453 func_237703_a_ + m (Lnet/minecraft/class_2561;)V method_21067 func_230434_a_ +c net/minecraft/class_4371 com/mojang/realmsclient/gui/ListButton + m (Lnet/minecraft/class_4904;Lnet/minecraft/class_4280$class_4281;Ljava/util/List;IDD)V method_21114 func_237728_a_ + m (Lnet/minecraft/class_4587;IIII)V method_21111 func_237726_a_ + m (Lnet/minecraft/class_4587;IIZ)V method_21112 func_230435_a_ + m (Lnet/minecraft/class_4587;Ljava/util/List;Lnet/minecraft/class_4904;IIII)V method_21113 func_237727_a_ + m ()I method_21115 func_225123_b + m (I)V method_21110 func_225121_a + m ()I method_21109 func_225122_a + f I field_19693 field_225128_d + f I field_19692 field_225127_c + f I field_19691 field_225126_b + f I field_19690 field_225125_a +c net/minecraft/class_4367 com/mojang/realmsclient/gui/RealmsServerSlotButton + m ()Lnet/minecraft/class_4367$class_4370; method_25099 func_237717_a_ + m (Lnet/minecraft/class_4587;IIIIZLjava/lang/String;IJLjava/lang/String;ZZLnet/minecraft/class_4367$class_4368;Lnet/minecraft/class_2561;)V method_21107 func_237718_a_ + m (Lnet/minecraft/class_4877;Ljava/lang/String;ZZLnet/minecraft/class_4367$class_4368;)Lcom/mojang/datafixers/util/Pair; method_27454 func_237719_a_ + m (Lnet/minecraft/class_4877;ZZ)Lnet/minecraft/class_4367$class_4368; method_27455 func_237720_a_ + f Lnet/minecraft/class_2561; field_26469 field_243092_w + f I field_19675 field_223776_d + f Lnet/minecraft/class_2561; field_26470 field_243093_x + f Ljava/util/function/Consumer; field_19673 field_223774_b + f Lnet/minecraft/class_2960; field_22681 field_237712_a_ + f Ljava/util/function/Supplier; field_19672 field_223773_a + f Lnet/minecraft/class_2960; field_22682 field_237713_b_ + f Lnet/minecraft/class_2960; field_22684 field_237715_d_ + f Lnet/minecraft/class_2960; field_22683 field_237714_c_ + f Lnet/minecraft/class_2960; field_22685 field_237716_e_ + f Lnet/minecraft/class_4367$class_4370; field_19677 field_223778_f + f Lnet/minecraft/class_2561; field_26468 field_243091_v + f I field_19676 field_223777_e +c net/minecraft/class_4367$class_4368 com/mojang/realmsclient/gui/RealmsServerSlotButton$Action + m (Ljava/lang/String;)Lnet/minecraft/class_4367$class_4368; valueOf valueOf + m ()[Lnet/minecraft/class_4367$class_4368; values values + f Lnet/minecraft/class_4367$class_4368; field_19679 SWITCH_SLOT + f Lnet/minecraft/class_4367$class_4368; field_19680 JOIN + f Lnet/minecraft/class_4367$class_4368; field_19678 NOTHING + f [Lnet/minecraft/class_4367$class_4368; field_19681 $VALUES +c net/minecraft/class_4367$class_4370 com/mojang/realmsclient/gui/RealmsServerSlotButton$ServerData + m (Lnet/minecraft/class_4367$class_4370;)Lnet/minecraft/class_2561; method_27456 func_237725_e_ + m (Lnet/minecraft/class_4367$class_4370;)J method_25103 func_237723_c_ + m (Lnet/minecraft/class_4367$class_4370;)Ljava/lang/String; method_25104 func_237724_d_ + m (Lnet/minecraft/class_4367$class_4370;)Z method_25102 func_237721_a_ + m (Lnet/minecraft/class_4367$class_4370;)Ljava/lang/String; method_25100 func_237722_b_ + f Ljava/lang/String; field_19683 field_225111_b + f Z field_19686 field_225114_e + f Lnet/minecraft/class_2561; field_19689 field_225117_h + f Z field_19687 field_225115_f + f Ljava/lang/String; field_19685 field_225113_d + f J field_19684 field_225112_c + f Z field_19682 field_225110_a + f Lnet/minecraft/class_4367$class_4368; field_19688 field_225116_g +c net/minecraft/class_4381 com/mojang/realmsclient/gui/screens/RealmsBackupScreen + m (Lnet/minecraft/class_4381;I)I method_21157 func_224089_b + m (Lnet/minecraft/class_4381;)V method_21161 func_224093_e + m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_310; method_25108 func_237750_b_ + m (Lnet/minecraft/class_4381;Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_21151 func_243099_a + m (Lnet/minecraft/class_4381;Ljava/util/List;)Ljava/util/List; method_21152 func_237747_a_ + m (Lnet/minecraft/class_4867;Ljava/lang/String;)V method_21147 func_224103_a + m ()V method_21168 func_224100_h + m ()Z method_21164 func_224111_f + m ()V method_21160 func_224113_d + m ()V method_21154 func_224112_b + m (Lnet/minecraft/class_4185;)V method_25110 func_237754_c_ + m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_310; method_25118 func_243103_j + m ()Lorg/apache/logging/log4j/Logger; method_21145 func_237742_a_ + m (Lnet/minecraft/class_4185;)V method_25106 func_237748_a_ + m (Lnet/minecraft/class_4381;Ljava/lang/Boolean;)Ljava/lang/Boolean; method_21150 func_237745_a_ + m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_310; method_25117 func_237763_i_ + m (Lnet/minecraft/class_4381;)Ljava/util/List; method_21156 func_237753_c_ + m (Lnet/minecraft/class_4381;)V method_21169 func_237760_f_ + m (Lnet/minecraft/class_4381;I)V method_21149 func_237751_b_ + m (I)V method_21155 func_224104_b + m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_327; method_25116 func_237762_h_ + m ()Lnet/minecraft/class_2960; method_25107 func_237749_b_ + m (Z)V method_25114 func_237759_d_ + m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_4381$class_4382; method_21159 func_237757_d_ + m (Z)V method_25111 func_237755_c_ + m ()V method_21170 func_224097_i + m ()Lnet/minecraft/class_2960; method_25112 func_243101_g + m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_327; method_25115 func_237761_g_ + m (I)I method_21146 func_237743_a_ + m ()V method_21166 func_224088_g + m ()Z method_21162 func_224096_e + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_21153 func_237744_a_ + m (Lnet/minecraft/class_4185;)V method_25113 func_237758_d_ + m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_4877; method_21148 func_224099_a + m ()Lnet/minecraft/class_2561; method_30865 func_243100_f + m ()Lnet/minecraft/class_2561; method_30866 func_243102_h + m (Lnet/minecraft/class_4185;)V method_25109 func_237752_b_ + f Lnet/minecraft/class_2561; field_26472 field_243095_q + f Lnet/minecraft/class_2960; field_22687 field_237741_c_ + f Lnet/minecraft/class_2561; field_26474 field_243097_s + f I field_19747 field_224120_g + f Lnet/minecraft/class_2561; field_19745 field_224118_e + f Lnet/minecraft/class_4185; field_19750 field_224123_j + f I field_19742 field_224115_b + f Lnet/minecraft/class_4903; field_19754 field_224127_n + f Ljava/util/List; field_19744 field_224117_d + f Lnet/minecraft/class_4388; field_19743 field_224116_c + f Lnet/minecraft/class_2561; field_26471 field_243094_p + f Lnet/minecraft/class_4877; field_19753 field_224126_m + f Lnet/minecraft/class_2561; field_26473 field_243096_r + f Lnet/minecraft/class_2960; field_22686 field_237740_b_ + f I field_19748 field_224121_h + f Lnet/minecraft/class_4381$class_4382; field_19746 field_224119_f + f Ljava/lang/Boolean; field_19752 field_224125_l + f Lorg/apache/logging/log4j/Logger; field_19741 field_224114_a + f Lnet/minecraft/class_4185; field_19751 field_224124_k + f Lnet/minecraft/class_4185; field_19749 field_224122_i +c net/minecraft/class_4381$1 com/mojang/realmsclient/gui/screens/RealmsBackupScreen$1 + m ()V run run + m (Ljava/util/List;)V method_21171 func_225134_a + f Lnet/minecraft/class_4381; field_19755 field_225135_a +c net/minecraft/class_4381$class_4382 com/mojang/realmsclient/gui/screens/RealmsBackupScreen$BackupObjectSelectionList + m (Lnet/minecraft/class_4381$class_4383;)V method_25119 setSelected + m (Lnet/minecraft/class_4867;)V method_21173 func_223867_a + m (I)V method_21172 func_223866_a + f Lnet/minecraft/class_4381; field_19760 field_223868_a +c net/minecraft/class_4381$class_4383 com/mojang/realmsclient/gui/screens/RealmsBackupScreen$BackupObjectSelectionListEntry + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4867;IIII)V method_21175 func_237767_a_ + m (Lnet/minecraft/class_4587;IIII)V method_21174 func_237766_a_ + m (Ljava/util/Date;)Ljava/lang/String; method_21176 func_223738_a + m (Lnet/minecraft/class_4587;IIII)V method_21177 func_237768_b_ + f Lnet/minecraft/class_4867; field_19761 field_237765_b_ + f Lnet/minecraft/class_4381; field_19762 field_223743_b +c net/minecraft/class_4379 com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen + m (Lnet/minecraft/class_4185;)V method_25105 func_237731_a_ + m (Lnet/minecraft/class_4379;)Lnet/minecraft/class_310; method_29335 func_237729_a_ + m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_2561; method_21141 func_237733_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_21143 func_237735_b_ + m (Lnet/minecraft/class_4379;Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_2561; method_21139 func_237730_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_21140 func_237732_a_ + m (Lnet/minecraft/class_4379;)Lnet/minecraft/class_4867; method_21142 func_237734_b_ + f Lnet/minecraft/class_4867; field_19736 field_224049_e + f Lnet/minecraft/class_4379$class_4380; field_19738 field_224051_g + f Lnet/minecraft/class_437; field_19734 field_224047_c +c net/minecraft/class_4379$class_5344 com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen$BackupInfoEntry + f Ljava/lang/String; field_25259 field_237739_c_ + f Ljava/lang/String; field_25258 field_237738_b_ + f Lnet/minecraft/class_4379; field_25257 field_237737_a_ +c net/minecraft/class_4379$class_4380 com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen$BackupInfoList + m (Ljava/lang/String;Ljava/lang/String;)V method_29336 func_237736_a_ + f Lnet/minecraft/class_4379; field_19740 field_223864_a +c net/minecraft/class_4387 com/mojang/realmsclient/gui/screens/RealmsClientOutdatedScreen + m (Lnet/minecraft/class_4185;)V method_25132 func_237786_a_ + f Z field_19788 field_224130_b + f Lnet/minecraft/class_2561; field_26477 field_243106_c + f [Lnet/minecraft/class_2561; field_26478 field_243107_p + f [Lnet/minecraft/class_2561; field_26476 field_243105_b + f Lnet/minecraft/class_437; field_19787 field_224129_a + f Lnet/minecraft/class_2561; field_26475 field_243104_a +c net/minecraft/class_4384 com/mojang/realmsclient/gui/screens/RealmsBrokenWorldScreen + m ()V method_25123 func_237772_a_ + m (J)V method_22101 func_237779_b_ + m (I)V method_21187 func_224066_b + m (J)V method_21181 func_224068_a + m (IZ)V method_25121 func_237774_a_ + m ()V method_25131 func_237785_x_ + m (IZ)V method_25125 func_237778_b_ + m (Lnet/minecraft/class_4587;IIIIZLjava/lang/String;IJLjava/lang/String;Z)V method_21180 func_237775_a_ + m ()V method_25130 func_237784_w_ + m ()V method_25129 func_237783_v_ + m (I)I method_21179 func_224065_a + m ()V method_25128 func_237782_n_ + m ()Z method_21196 func_224069_f + m ()V method_25127 func_237781_m_ + m ()V method_21194 func_224060_e + m ()V method_21178 func_224058_a + m (Lnet/minecraft/class_4185;)V method_25122 func_237776_a_ + m (ILnet/minecraft/class_4185;)V method_25120 func_237773_a_ + m (ILnet/minecraft/class_4185;)V method_25124 func_237777_b_ + m (ILnet/minecraft/class_4185;)V method_25126 func_237780_c_ + f Lnet/minecraft/class_437; field_19764 field_224072_b + f Ljava/util/List; field_19778 field_224086_p + f Lnet/minecraft/class_2561; field_24204 field_237769_r_ + f I field_19779 field_224087_q + f I field_19771 field_224079_i + f I field_19770 field_224078_h + f J field_19767 field_224075_e + f Lnet/minecraft/class_4325; field_19765 field_224073_c + f [Lnet/minecraft/class_2561; field_19769 field_224077_g + f Lnet/minecraft/class_4877; field_20492 field_224074_d + f Lorg/apache/logging/log4j/Logger; field_19763 field_224071_a +c net/minecraft/class_4389 com/mojang/realmsclient/gui/screens/RealmsConfirmScreen + m (Lnet/minecraft/class_4185;)V method_25153 func_237826_b_ + m (Lnet/minecraft/class_4185;)V method_25152 func_237825_a_ + f Lnet/minecraft/class_2561; field_19825 field_224146_f + f Lnet/minecraft/class_2561; field_19821 field_224142_b + f I field_19826 field_224147_g + f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_22692 field_237824_a_ +c net/minecraft/class_4388 com/mojang/realmsclient/gui/screens/RealmsConfigureWorldScreen + m ()V method_25150 func_237820_x_ + m (I)I method_21228 func_224368_c + m ()V method_25149 func_237819_w_ + m (Lnet/minecraft/class_4185;)V method_25147 func_237817_i_ + m (Lnet/minecraft/class_437;)V method_21217 func_237800_a_ + m (ILnet/minecraft/class_4185;)V method_25135 func_237795_a_ + m ()Lnet/minecraft/class_4388; method_21219 func_224407_b + m (Lnet/minecraft/class_4587;IIII)V method_21229 func_237811_e_ + m ()V method_21240 func_224377_h + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_21214 func_237796_a_ + m (Lnet/minecraft/class_4587;IIII)V method_21201 func_237807_c_ + m (Lnet/minecraft/class_4185;)V method_25145 func_237815_g_ + m ()V method_25134 func_237794_B_ + m ()V method_21236 func_224401_f + m (Lnet/minecraft/class_4185;)V method_25142 func_237812_e_ + m (Lnet/minecraft/class_4877;IZ)V method_25136 func_237797_a_ + m ()Lnet/minecraft/class_4877; method_21244 func_237822_z_ + m (Lnet/minecraft/class_4185;)V method_25140 func_237808_c_ + m (Lnet/minecraft/class_4185;)V method_25138 func_237799_a_ + m (II)I method_21200 func_224374_a + m (ZLnet/minecraft/class_437;)V method_21218 func_237802_a_ + m (Lnet/minecraft/class_4883;)V method_21208 func_224386_a + m ()V method_21198 func_224398_a + m (J)V method_22103 func_237803_b_ + m (ILnet/minecraft/class_4877;)V method_21203 func_224403_a + m (I)V method_21199 func_224402_a + m (Lnet/minecraft/class_4185;)V method_25148 func_237818_j_ + m (Lnet/minecraft/class_4587;IIII)V method_21221 func_237809_d_ + m (Lnet/minecraft/class_4877;IZ)V method_25139 func_237805_b_ + m (I)I method_21220 func_224411_b + m ()V method_21242 func_224412_j + m ()Z method_21238 func_224376_g + m (Lnet/minecraft/class_4185;)V method_25146 func_237816_h_ + m (Lnet/minecraft/class_4355;)V method_25137 func_237798_a_ + m (Lnet/minecraft/class_4185;)V method_25144 func_237814_f_ + m ()V method_21234 func_224400_e + m (Lnet/minecraft/class_4587;IIII)V method_25143 func_237813_f_ + m (Lnet/minecraft/class_4185;)V method_25141 func_237810_d_ + m ()V method_21231 func_224390_d + m (Lnet/minecraft/class_2561;)V method_27457 func_237801_a_ + m (Ljava/lang/String;Ljava/lang/String;)V method_21215 func_224410_a + m (Lnet/minecraft/class_4185;)V method_21226 func_237806_b_ + m (Lnet/minecraft/class_4877;)V method_21206 func_224385_a + m (ILnet/minecraft/class_4877;)V method_21222 func_224388_b + m ()V method_25133 func_237793_A_ + m (J)V method_21204 func_224387_a + m (Lnet/minecraft/class_4587;IIIII)V method_21202 func_237804_b_ + m ()V method_25151 func_237821_y_ + f I field_19808 field_224431_s + f Lnet/minecraft/class_2561; field_19791 field_224414_b + f Lnet/minecraft/class_2960; field_22690 field_237789_p_ + f I field_19795 field_224418_f + f Lnet/minecraft/class_2561; field_26480 field_243109_s + f Lnet/minecraft/class_4185; field_19804 field_224427_o + f Lnet/minecraft/class_2960; field_22689 field_237788_c_ + f Lnet/minecraft/class_2561; field_26482 field_243111_u + f Lnet/minecraft/class_2561; field_26484 field_243113_w + f Z field_19806 field_224429_q + f Lnet/minecraft/class_4185; field_19802 field_224425_m + f Lnet/minecraft/class_4185; field_19800 field_224423_k + f Lnet/minecraft/class_2561; field_26486 field_243115_y + f Lnet/minecraft/class_4325; field_19792 field_224415_c + f I field_19807 field_224430_r + f Lorg/apache/logging/log4j/Logger; field_19790 field_224413_a + f Lnet/minecraft/class_2960; field_22691 field_237790_q_ + f I field_19796 field_224419_g + f Lnet/minecraft/class_2960; field_22688 field_237787_b_ + f J field_19794 field_224417_e + f Lnet/minecraft/class_2561; field_26479 field_243108_r + f Lnet/minecraft/class_2561; field_26481 field_243110_t + f Lnet/minecraft/class_4185; field_19805 field_224428_p + f Lnet/minecraft/class_4185; field_19803 field_224426_n + f Lnet/minecraft/class_4877; field_20493 field_224416_d + f Lnet/minecraft/class_2561; field_26483 field_243112_v + f Lnet/minecraft/class_2561; field_26485 field_243114_x + f Lnet/minecraft/class_4185; field_19801 field_224424_l + f Lnet/minecraft/class_4185; field_19799 field_224422_j +c net/minecraft/class_4388$1 com/mojang/realmsclient/gui/screens/RealmsConfigureWorldScreen$1 + f [I field_19812 field_237823_a_ +c net/minecraft/class_4392 com/mojang/realmsclient/gui/screens/RealmsDownloadLatestWorldScreen + m ()V method_21269 func_224174_d + m (Lnet/minecraft/class_4185;)V method_25158 func_237834_a_ + m ()V method_21278 func_224165_h + m (Lnet/minecraft/class_4587;J)V method_21266 func_237833_a_ + m ()V method_21279 func_224159_i + m ()V method_22104 func_237839_n_ + m (Z)V method_25159 func_237837_c_ + m (Ljava/lang/String;)J method_21259 func_224152_a + m (Lnet/minecraft/class_4587;)V method_21272 func_237835_b_ + m (Lnet/minecraft/class_4587;)V method_21274 func_237836_c_ + m ()V method_21265 func_224162_c + m (Lnet/minecraft/class_4587;)V method_21276 func_237838_d_ + f Z field_19857 field_224188_n + f I field_19862 field_224193_s + f Lnet/minecraft/class_2561; field_19847 field_224178_d + f J field_19861 field_224192_r + f Lnet/minecraft/class_2561; field_20494 field_224183_i + f Ljava/util/concurrent/locks/ReentrantLock; field_19868 field_237832_b_ + f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_22693 field_237831_J_ + f [Ljava/lang/String; field_19863 field_224194_t + f Lnet/minecraft/class_437; field_19845 field_224176_b + f Z field_19856 field_224187_m + f Lnet/minecraft/class_2561; field_19853 field_224184_j + f Z field_19855 field_224186_l + f Lnet/minecraft/class_4185; field_22694 field_224180_f + f Lnet/minecraft/class_4889; field_19846 field_224177_c + f Z field_19867 field_224198_x + f Lorg/apache/logging/log4j/Logger; field_19844 field_224175_a + f Ljava/lang/Long; field_19860 field_224191_q + f Ljava/lang/Long; field_19859 field_224190_p + f Ljava/lang/String; field_19854 field_224185_k + f Lnet/minecraft/class_4392$class_4393; field_19851 field_224182_h + f Ljava/lang/String; field_19850 field_224181_g + f I field_19864 field_224195_u + f Z field_19858 field_224189_o + f Lcom/google/common/util/concurrent/RateLimiter; field_19848 field_224179_e +c net/minecraft/class_4392$class_4393 com/mojang/realmsclient/gui/screens/RealmsDownloadLatestWorldScreen$DownloadStatus + f Lnet/minecraft/class_4392; field_19873 field_225141_c + f J field_19871 field_225139_a + f J field_19872 field_225140_b +c net/minecraft/class_4390 com/mojang/realmsclient/gui/screens/RealmsCreateRealmScreen + m ()V method_25156 func_237829_l_ + m ()V method_21245 func_224132_a + m (Lnet/minecraft/class_4185;)V method_25155 func_237828_b_ + m (Lnet/minecraft/class_4185;)V method_25154 func_237827_a_ + m ()V method_25157 func_237830_m_ + m ()Z method_21247 func_224133_b + f Lnet/minecraft/class_4325; field_19830 field_224136_b + f Lnet/minecraft/class_4877; field_19829 field_224135_a + f Lnet/minecraft/class_2561; field_26487 field_243116_a + f Lnet/minecraft/class_4185; field_19833 field_224139_e + f Lnet/minecraft/class_342; field_19832 field_224138_d + f Lnet/minecraft/class_2561; field_26488 field_243117_b + f Lnet/minecraft/class_342; field_19831 field_224137_c + f Lnet/minecraft/class_4903; field_19834 field_224140_f +c net/minecraft/class_4395 com/mojang/realmsclient/gui/screens/RealmsInviteScreen + m (Lnet/minecraft/class_4185;)V method_25162 func_237844_b_ + m ()V method_21284 func_224211_a + m (Lnet/minecraft/class_4185;)V method_25161 func_237843_a_ + m (Lnet/minecraft/class_2561;)V method_21286 func_224209_a + f Lnet/minecraft/class_437; field_19882 field_224217_e + f Lnet/minecraft/class_2561; field_26489 field_243118_b + f Lorg/apache/logging/log4j/Logger; field_19878 field_224213_a + f Lnet/minecraft/class_4388; field_19881 field_224216_d + f Lnet/minecraft/class_342; field_22696 field_224214_b + f Lnet/minecraft/class_2561; field_26490 field_243119_c + f Lnet/minecraft/class_4877; field_19880 field_224215_c + f Lnet/minecraft/class_2561; field_19887 field_224222_j +c net/minecraft/class_4394 com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen + m (Lnet/minecraft/class_2561;)V method_21282 func_237841_a_ + m (Lnet/minecraft/class_4355;)V method_21280 func_224224_a + m (Lnet/minecraft/class_4185;)V method_25160 func_237840_a_ + m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_21283 func_237842_a_ + f Lnet/minecraft/class_437; field_22695 field_224228_a + f Lnet/minecraft/class_2561; field_19875 field_224229_b + f Lnet/minecraft/class_2561; field_19876 field_224230_c +c net/minecraft/class_4398 com/mojang/realmsclient/gui/screens/RealmsLongRunningMcoTaskScreen + m ()V method_21293 func_224236_c + m (Lnet/minecraft/class_4185;)V method_25167 func_237851_a_ + m ()V method_25166 func_237850_a_ + m ()Z method_21291 func_224235_b + m (Lnet/minecraft/class_2561;)V method_21292 func_224234_b + m (Lnet/minecraft/class_4185;)V method_25168 func_237852_b_ + f Lnet/minecraft/class_2561; field_19916 field_224245_i + f [Ljava/lang/String; field_19908 field_224237_a + f Lorg/apache/logging/log4j/Logger; field_19909 field_224238_b + f Lnet/minecraft/class_2561; field_19914 field_224243_g + f Lnet/minecraft/class_4358; field_19919 field_224248_l + f I field_19918 field_224247_k + f I field_19920 field_224249_m + f Lnet/minecraft/class_437; field_19912 field_224241_e + f Z field_19917 field_224246_j +c net/minecraft/class_4396 com/mojang/realmsclient/gui/screens/RealmsLongConfirmationScreen + m (Lnet/minecraft/class_4185;)V method_25165 func_237848_c_ + m (Lnet/minecraft/class_4185;)V method_25164 func_237847_b_ + m (Lnet/minecraft/class_4185;)V method_25163 func_237846_a_ + f Lnet/minecraft/class_2561; field_19896 field_224255_f + f Lnet/minecraft/class_4396$class_4397; field_19895 field_224254_e + f Z field_19899 field_224258_i + f Lnet/minecraft/class_2561; field_19897 field_224256_g + f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_22697 field_237845_a_ +c net/minecraft/class_4396$class_4397 com/mojang/realmsclient/gui/screens/RealmsLongConfirmationScreen$Type + m ()[Lnet/minecraft/class_4396$class_4397; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4396$class_4397; valueOf valueOf + f Lnet/minecraft/class_4396$class_4397; field_19904 Info + f [Lnet/minecraft/class_4396$class_4397; field_19907 $VALUES + f Ljava/lang/String; field_19906 field_225144_d + f I field_19905 field_225143_c + f Lnet/minecraft/class_4396$class_4397; field_19903 Warning +c net/minecraft/class_4400 com/mojang/realmsclient/gui/screens/RealmsParentalConsentScreen + m (Lnet/minecraft/class_4185;)V method_25171 func_237860_a_ + m (Lnet/minecraft/class_4185;)V method_25173 func_237862_c_ + m (Lnet/minecraft/class_4185;)V method_25172 func_237861_b_ + f Lnet/minecraft/class_5489; field_26492 field_243123_c + f Lnet/minecraft/class_437; field_22701 field_224260_a + f Lnet/minecraft/class_2561; field_26491 field_243122_a +c net/minecraft/class_4399 com/mojang/realmsclient/gui/screens/RealmsNotificationsScreen + m (Z)Z method_21296 func_224264_a + m (Z)Z method_21297 func_224263_b + m (Lnet/minecraft/class_4587;II)V method_21295 func_237857_a_ + m ()Z method_25169 func_237858_g_ + m ()V method_21294 func_224261_a + m ()Z method_25170 func_237859_j_ + f Z field_19926 field_224268_d + f Z field_19927 field_224269_e + f Z field_19928 field_224270_f + f Lnet/minecraft/class_2960; field_22698 field_237853_a_ + f I field_19924 field_224266_b + f Lnet/minecraft/class_2960; field_22699 field_237854_b_ + f Lnet/minecraft/class_2960; field_22700 field_237855_c_ + f Z field_19925 field_224267_c + f Lnet/minecraft/class_4360; field_19923 field_237856_p_ +c net/minecraft/class_4399$1 com/mojang/realmsclient/gui/screens/RealmsNotificationsScreen$1 + m ()V run run + f Lnet/minecraft/class_4399; field_19930 field_225145_a +c net/minecraft/class_4401 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen + m (Lnet/minecraft/class_4185;)V method_25177 func_237875_b_ + m (Lnet/minecraft/class_4401;Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_21304 func_243128_a + m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_310; method_25182 func_237883_f_ + m (I)V method_21308 func_224321_b + m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_310; method_25178 func_237876_c_ + m ()Lorg/apache/logging/log4j/Logger; method_21299 func_237865_a_ + m (I)V method_21311 func_224329_c + m (Lnet/minecraft/class_4401;)V method_21312 func_237882_e_ + m (Lnet/minecraft/class_4401;I)I method_21310 func_237874_b_ + m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_310; method_25174 func_237867_a_ + m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_327; method_25186 func_243136_j + m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_327; method_25184 func_237887_j_ + m (Lnet/minecraft/class_4401;I)V method_21313 func_243130_d + m (I)Z method_21314 func_224316_d + m ()V method_21307 func_224331_b + m (Lnet/minecraft/class_4185;)V method_25179 func_237878_c_ + m (Lnet/minecraft/class_4185;)V method_25175 func_237871_a_ + m ()Lnet/minecraft/class_2960; method_25176 func_237872_b_ + m ()Lnet/minecraft/class_2960; method_25180 func_243132_g + m (I)V method_21300 func_224318_a + m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_310; method_25183 func_243133_g + m (Lnet/minecraft/class_4401;I)V method_21316 func_237868_a_ + m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_310; method_25181 func_237880_d_ + m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_327; method_25185 func_243135_i + m (Lnet/minecraft/class_4401;Z)Z method_21305 func_237870_a_ + m ()Lnet/minecraft/class_2561; method_30867 func_243131_f + m ()Lnet/minecraft/class_2561; method_30868 func_243134_h + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_21306 func_237866_a_ + m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_4401$class_4402; method_21302 func_237873_b_ + m (Lnet/minecraft/class_4401;I)V method_21303 func_243129_c + f Lnet/minecraft/class_2960; field_22703 field_237864_c_ + f Lnet/minecraft/class_4185; field_19943 field_224341_i + f I field_19941 field_224339_g + f Lnet/minecraft/class_4401$class_4402; field_19939 field_224337_e + f Lnet/minecraft/class_2561; field_26493 field_243124_p + f Lnet/minecraft/class_2960; field_22702 field_237863_b_ + f Lnet/minecraft/class_2561; field_26495 field_243126_r + f Lnet/minecraft/class_4185; field_19942 field_224340_h + f Lnet/minecraft/class_2561; field_19937 field_224335_c + f Z field_19938 field_224336_d + f Lnet/minecraft/class_437; field_19936 field_224334_b + f Lorg/apache/logging/log4j/Logger; field_19935 field_224333_a + f Lnet/minecraft/class_4903; field_19940 field_224338_f + f Lnet/minecraft/class_2561; field_26494 field_243125_q +c net/minecraft/class_4401$class_4403 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$InvitationEntry + m (Lnet/minecraft/class_4401$class_4403;)Lnet/minecraft/class_4871; method_25187 func_237894_a_ + m (Lnet/minecraft/class_4587;II)V method_21323 func_237892_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4871;IIII)V method_21324 func_237893_a_ + f Ljava/util/List; field_19955 field_223752_c + f Lnet/minecraft/class_4871; field_19953 field_223750_a + f Lnet/minecraft/class_4401; field_19954 field_223751_b +c net/minecraft/class_4401$class_4403$class_4404 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$InvitationEntry$AcceptButton + f Lnet/minecraft/class_4401$class_4403; field_19956 field_225129_e +c net/minecraft/class_4401$class_4403$class_4405 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$InvitationEntry$RejectButton + f Lnet/minecraft/class_4401$class_4403; field_19957 field_225130_e +c net/minecraft/class_4401$class_4402 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$InvitationList + m (Lnet/minecraft/class_4401$class_4403;)V method_25188 setSelected + m (I)V method_21322 func_223873_b + m (I)V method_21321 func_223872_a + f Lnet/minecraft/class_4401; field_19952 field_223874_a +c net/minecraft/class_4401$1 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$1 + m ()V run run + m (Ljava/util/List;)V method_21318 func_225147_a + m (Lnet/minecraft/class_4871;)Lnet/minecraft/class_4401$class_4403; method_21317 func_225146_a + f Lnet/minecraft/class_4401; field_19944 field_225148_a +c net/minecraft/class_4401$2 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$2 + m ()V run run + m (I)V method_21319 func_237889_a_ + f Lnet/minecraft/class_4401; field_19949 field_223819_a + f I field_19948 field_237888_a_ +c net/minecraft/class_4401$3 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$3 + m ()V run run + m (I)V method_21320 func_237891_a_ + f I field_19950 field_237890_a_ + f Lnet/minecraft/class_4401; field_19951 field_223820_a +c net/minecraft/class_4409 com/mojang/realmsclient/gui/screens/RealmsResetNormalWorldScreen + m (Lnet/minecraft/class_4185;)V method_25203 func_237935_c_ + m (Lnet/minecraft/class_4185;)V method_25202 func_237934_b_ + m (Lnet/minecraft/class_4185;)V method_25201 func_237933_a_ + m ()Lnet/minecraft/class_2561; method_27458 func_237937_g_ + m ()Lnet/minecraft/class_2561; method_27459 func_237938_j_ + m (Lnet/minecraft/class_4185;)V method_25204 func_237936_d_ + f Lnet/minecraft/class_2561; field_24206 field_224365_m + f Lnet/minecraft/class_4903; field_19983 field_224355_c + f Ljava/lang/Integer; field_19986 field_224358_f + f Lnet/minecraft/class_342; field_19984 field_224356_d + f [Lnet/minecraft/class_2561; field_24205 field_243145_b + f Lnet/minecraft/class_2561; field_26506 field_243144_a + f Lnet/minecraft/class_4410; field_19982 field_224354_b + f Ljava/lang/Boolean; field_19985 field_224357_e +c net/minecraft/class_4406 com/mojang/realmsclient/gui/screens/RealmsPlayerScreen + m (I)I method_25189 func_237902_a_ + m (Z)V method_25195 func_237919_c_ + m (Lnet/minecraft/class_4185;)V method_25194 func_237918_c_ + m (I)I method_25193 func_237913_c_ + m (Lnet/minecraft/class_4406;)I method_21349 func_237909_b_ + m (Lnet/minecraft/class_4185;)V method_25190 func_237907_a_ + m (Lnet/minecraft/class_4406;)Lnet/minecraft/class_327; method_31124 func_237927_f_ + m (Lnet/minecraft/class_4587;IIII)V method_21340 func_237925_e_ + m (Lnet/minecraft/class_4587;IIII)V method_21327 func_237914_c_ + m (Lnet/minecraft/class_4406;I)V method_21337 func_237905_a_ + m (Lnet/minecraft/class_4870;)V method_21328 func_224283_a + m (Lnet/minecraft/class_4406;I)V method_21330 func_237916_c_ + m (I)V method_21334 func_224289_b + m (Lnet/minecraft/class_4406;Lnet/minecraft/class_4587;IIII)V method_21338 func_237911_b_ + m (Lnet/minecraft/class_4406;)Lnet/minecraft/class_4406$class_5488; method_21350 func_243143_d + m (I)V method_21344 func_224274_d + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_21332 func_237903_a_ + m (Lnet/minecraft/class_4406;)V method_21351 func_237926_e_ + m (I)I method_25191 func_237908_b_ + m (Lnet/minecraft/class_4185;)V method_25197 func_237924_d_ + m (Lnet/minecraft/class_4185;)V method_25192 func_237912_b_ + m (Lnet/minecraft/class_4406;)I method_21348 func_237904_a_ + m (Lnet/minecraft/class_4587;IIII)V method_21335 func_237921_d_ + m (Lnet/minecraft/class_4406;)Lnet/minecraft/class_4877; method_21336 func_237915_c_ + m (Lnet/minecraft/class_4406;I)I method_21346 func_237923_d_ + m (Lnet/minecraft/class_4406;I)V method_21342 func_237910_b_ + m (I)Z method_21326 func_224296_a + m (Lnet/minecraft/class_4406;Lnet/minecraft/class_4587;IIII)V method_21343 func_237917_c_ + m (I)V method_21339 func_224279_c + m ()V method_21325 func_224280_a + m (Lnet/minecraft/class_4406;Lnet/minecraft/class_4587;IIII)V method_21331 func_237906_a_ + m (I)V method_21347 func_224292_e + m ()V method_21333 func_224298_b + f Lnet/minecraft/class_2561; field_19959 field_224301_b + f Lnet/minecraft/class_4388; field_19960 field_224302_c + f I field_19964 field_224306_g + f Lnet/minecraft/class_2960; field_22706 field_237897_p_ + f I field_19968 field_224310_k + f I field_19970 field_224312_m + f Lnet/minecraft/class_4185; field_19966 field_224308_i + f Lnet/minecraft/class_2561; field_26499 field_243139_s + f Lnet/minecraft/class_2960; field_22705 field_237896_c_ + f Lnet/minecraft/class_4903; field_19972 field_224314_o + f Lnet/minecraft/class_2561; field_26501 field_243141_u + f Lnet/minecraft/class_4877; field_19961 field_224303_d + f Z field_19971 field_224313_n + f I field_19963 field_224305_f + f Ljava/lang/String; field_19969 field_224311_l + f Lnet/minecraft/class_4406$class_5488; field_26496 field_243137_J + f Lorg/apache/logging/log4j/Logger; field_19958 field_224300_a + f Lnet/minecraft/class_2960; field_22707 field_237898_q_ + f I field_19965 field_224307_h + f Lnet/minecraft/class_2960; field_22704 field_237895_b_ + f Lnet/minecraft/class_4185; field_19967 field_224309_j + f Lnet/minecraft/class_2561; field_26500 field_243140_t + f Lnet/minecraft/class_4406$class_4407; field_19962 field_224304_e + f Lnet/minecraft/class_2561; field_26498 field_243138_r +c net/minecraft/class_4406$class_4407 com/mojang/realmsclient/gui/screens/RealmsPlayerScreen$InvitedList + m (Lnet/minecraft/class_4406$class_4408;)V method_25200 setSelected + m (I)V method_21353 func_223869_a + m (Lnet/minecraft/class_4874;)V method_21354 func_223870_a + f Lnet/minecraft/class_4406; field_19978 field_223871_a +c net/minecraft/class_4406$class_5488 com/mojang/realmsclient/gui/screens/RealmsPlayerScreen$GuestAction + m (Ljava/lang/String;)Lnet/minecraft/class_4406$class_5488; valueOf valueOf + m ()[Lnet/minecraft/class_4406$class_5488; values values + f Lnet/minecraft/class_4406$class_5488; field_26504 NONE + f Lnet/minecraft/class_4406$class_5488; field_26503 REMOVE + f [Lnet/minecraft/class_4406$class_5488; field_26505 $VALUES + f Lnet/minecraft/class_4406$class_5488; field_26502 TOGGLE_OP +c net/minecraft/class_4406$class_4408 com/mojang/realmsclient/gui/screens/RealmsPlayerScreen$InvitedEntry + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4874;IIII)V method_21356 func_237932_a_ + m (Lnet/minecraft/class_4587;I)V method_21355 func_237931_a_ + f Lnet/minecraft/class_4874; field_19979 field_237930_b_ + f Lnet/minecraft/class_4406; field_19980 field_223747_b +c net/minecraft/class_4415 com/mojang/realmsclient/gui/screens/NotifableRealmsScreen + m (Lnet/minecraft/class_4890;)V method_21395 func_223627_a_ +c net/minecraft/class_4410 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen + m (Lnet/minecraft/class_4410;Lnet/minecraft/class_4891;)Lnet/minecraft/class_4891; method_21388 func_224442_d + m (Lnet/minecraft/class_4410;Lnet/minecraft/class_4587;IILnet/minecraft/class_2561;Lnet/minecraft/class_2960;ZZ)V method_21374 func_237950_a_ + m (Lnet/minecraft/class_4410;Lnet/minecraft/class_4891;)Lnet/minecraft/class_4891; method_21383 func_224449_b + m (Ljava/lang/Runnable;)V method_21377 func_237952_a_ + m (Lnet/minecraft/class_4185;)V method_25212 func_237958_f_ + m (Lnet/minecraft/class_4410$class_4413;)V method_21372 func_224438_a + m (Lnet/minecraft/class_4185;)V method_25210 func_237956_d_ + m (Lnet/minecraft/class_4185;)V method_25208 func_237954_b_ + m (Lnet/minecraft/class_4587;IILnet/minecraft/class_2561;Lnet/minecraft/class_2960;ZZ)V method_21370 func_237948_a_ + m ()V method_21378 func_224454_b + m (Ljava/lang/String;Lnet/minecraft/class_4890;IZ)V method_25207 func_237953_a_ + m (Lnet/minecraft/class_4410;Lnet/minecraft/class_4891;)Lnet/minecraft/class_4891; method_21386 func_224433_c + m ()V method_25214 func_237960_j_ + m (I)I method_21384 func_224434_c + m (Lnet/minecraft/class_4890;)V method_21380 func_224435_b + m (I)V method_21379 func_224445_b + m (Lnet/minecraft/class_4185;)V method_25213 func_237959_g_ + m (Lnet/minecraft/class_2561;)V method_21376 func_224432_a + m (Lnet/minecraft/class_4410;Lnet/minecraft/class_4891;)Lnet/minecraft/class_4891; method_21375 func_224443_a + m (Lnet/minecraft/class_4185;)V method_25211 func_237957_e_ + m ()Lorg/apache/logging/log4j/Logger; method_21368 func_224436_a + m (Lnet/minecraft/class_4185;)V method_25209 func_237955_c_ + m (Lnet/minecraft/class_4410;)Lnet/minecraft/class_310; method_25205 func_237949_a_ + m (Lnet/minecraft/class_4410$class_4413;)V method_21381 func_224437_b + m (Lnet/minecraft/class_4185;)V method_25206 func_237951_a_ + f Lnet/minecraft/class_2960; field_22715 field_237946_y_ + f Lnet/minecraft/class_2960; field_22713 field_237944_w_ + f Ljava/lang/Runnable; field_22712 field_237943_M_ + f Lnet/minecraft/class_2561; field_20006 field_224463_i + f Lnet/minecraft/class_4891; field_20498 field_224471_q + f Lnet/minecraft/class_4891; field_20496 field_224469_o + f Lnet/minecraft/class_2960; field_22709 field_237940_B_ + f Lnet/minecraft/class_4903; field_20003 field_224460_f + f Lnet/minecraft/class_2561; field_20005 field_224462_h + f Ljava/lang/Runnable; field_22711 field_237942_L_ + f Lnet/minecraft/class_4877; field_20001 field_224458_d + f Lnet/minecraft/class_437; field_20000 field_224457_c + f Lnet/minecraft/class_2960; field_22714 field_237945_x_ + f Lnet/minecraft/class_2561; field_20501 field_224475_u + f Lnet/minecraft/class_2960; field_22716 field_237947_z_ + f I field_20008 field_224465_k + f I field_19998 field_224455_a + f Lnet/minecraft/class_2561; field_20007 field_224464_j + f Lnet/minecraft/class_4410$class_4413; field_20499 field_224473_s + f Lnet/minecraft/class_4891; field_20497 field_224470_p + f Lnet/minecraft/class_4891; field_20495 field_224468_n + f Lnet/minecraft/class_2960; field_22708 field_237939_A_ + f Lorg/apache/logging/log4j/Logger; field_19999 field_224456_b + f Lnet/minecraft/class_2960; field_22710 field_237941_C_ + f Lnet/minecraft/class_4890; field_20500 field_224474_t + f Lnet/minecraft/class_4903; field_20004 field_224461_g + f Lnet/minecraft/class_4410$class_4412; field_20015 field_224472_r +c net/minecraft/class_4410$class_4411 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$TexturedButton + f Lnet/minecraft/class_2960; field_20032 field_223824_c + f Lnet/minecraft/class_4410; field_20031 field_223823_b +c net/minecraft/class_4410$class_4412 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$ResetType + m ()[Lnet/minecraft/class_4410$class_4412; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4410$class_4412; valueOf valueOf + f Lnet/minecraft/class_4410$class_4412; field_20036 UPLOAD + f Lnet/minecraft/class_4410$class_4412; field_20035 GENERATE + f Lnet/minecraft/class_4410$class_4412; field_20037 ADVENTURE + f [Lnet/minecraft/class_4410$class_4412; field_20041 $VALUES + f Lnet/minecraft/class_4410$class_4412; field_20038 SURVIVAL_SPAWN + f Lnet/minecraft/class_4410$class_4412; field_20040 INSPIRATION + f Lnet/minecraft/class_4410$class_4412; field_20034 NONE + f Lnet/minecraft/class_4410$class_4412; field_20039 EXPERIENCE +c net/minecraft/class_4410$class_4413 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$ResetWorldInfo + m (Lnet/minecraft/class_4410$class_4413;)Z method_25217 func_237966_c_ + m (Lnet/minecraft/class_4410$class_4413;)Ljava/lang/String; method_25215 func_237964_a_ + m (Lnet/minecraft/class_4410$class_4413;)I method_25216 func_237965_b_ + f I field_20043 field_225158_b + f Ljava/lang/String; field_20042 field_225157_a + f Z field_20044 field_225159_c +c net/minecraft/class_4410$1 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$1 + m (Lnet/minecraft/class_4891;Lnet/minecraft/class_4891;Lnet/minecraft/class_4891;Lnet/minecraft/class_4891;)V method_21392 func_237961_a_ + m ()V run run + f Lnet/minecraft/class_4410; field_20021 field_223832_a +c net/minecraft/class_4410$2 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$2 + f [I field_20028 field_237962_a_ + f [I field_20029 field_237963_b_ +c net/minecraft/class_4419 com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen + m ()Z method_25247 func_238024_y_ + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25241 func_238018_k_ + m (Lnet/minecraft/class_4419;)Z method_21437 func_238007_c_ + m ()V method_21444 func_224511_j + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25243 func_238020_m_ + m (Lnet/minecraft/class_4419;)I method_21443 func_238012_e_ + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25239 func_238016_i_ + m (Lnet/minecraft/class_4419;Lnet/minecraft/class_4891;Lnet/minecraft/class_4341;)Lcom/mojang/datafixers/util/Either; method_21419 func_237996_a_ + m (Lnet/minecraft/class_4419;Ljava/util/List;)Ljava/util/List; method_21421 func_237998_a_ + m ()Lnet/minecraft/class_2561; method_30874 func_243168_i + m (Lnet/minecraft/class_4419;Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_21420 func_243166_a + m (Lnet/minecraft/class_4185;)V method_25236 func_238011_d_ + m ()Lnet/minecraft/class_4890; method_21434 func_224487_e + m (Lnet/minecraft/class_2561;)V method_21423 func_238001_a_ + m (Lnet/minecraft/class_4891;Lnet/minecraft/class_4341;)Lcom/mojang/datafixers/util/Either; method_21416 func_224509_a + m (Lnet/minecraft/class_4185;)V method_25233 func_238006_b_ + m ()V method_21425 func_224514_b + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_310; method_25242 func_238019_l_ + m (Lnet/minecraft/class_4419;Ljava/lang/String;)Ljava/lang/String; method_21428 func_238005_b_ + m (Lnet/minecraft/class_4587;IILjava/util/List;)V method_21414 func_237992_a_ + m ()Z method_21432 func_224510_d + m (Lnet/minecraft/class_4419;I)I method_21418 func_224508_a + m ()Z method_21436 func_224512_f + m ()Lnet/minecraft/class_2960; method_25232 func_238003_b_ + m (Lnet/minecraft/class_4419;)V method_21426 func_238013_f_ + m ()Lnet/minecraft/class_2960; method_25237 func_238014_g_ + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_4419$class_4420; method_21435 func_238004_b_ + m ()V method_21442 func_224496_i + m ()Lorg/apache/logging/log4j/Logger; method_21413 func_237990_a_ + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25238 func_238015_h_ + m (Lnet/minecraft/class_4419;)Ljava/lang/String; method_21439 func_238010_d_ + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25240 func_238017_j_ + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_310; method_25229 func_237994_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_21424 func_237993_a_ + m (Lnet/minecraft/class_4450$class_4452;)I method_25230 func_237999_a_ + m ()Lnet/minecraft/class_2561; method_30873 func_243167_h + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_310; method_25246 func_238023_p_ + m (Lnet/minecraft/class_4185;)V method_25234 func_238008_c_ + m (Lnet/minecraft/class_4891;)V method_21415 func_224497_a + m (Lnet/minecraft/class_4185;)V method_25231 func_238000_a_ + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_310; method_25245 func_238022_o_ + m ([Lnet/minecraft/class_2561;)V method_21429 func_238002_a_ + m ()Z method_21430 func_224495_c + m (I)I method_25228 func_237991_a_ + m ()V method_21438 func_224484_g + m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25244 func_238021_n_ + m ()Lnet/minecraft/class_2960; method_25235 func_238009_d_ + m (Lnet/minecraft/class_4419;)V method_21441 func_224501_h + m ()V method_21440 func_224500_h + m (Lnet/minecraft/class_4419;I)I method_21427 func_237995_a_ + f Lorg/apache/logging/log4j/Logger; field_20069 field_224515_a + f I field_20080 field_224526_l + f Lnet/minecraft/class_4415; field_20070 field_224516_b + f Lnet/minecraft/class_2561; field_26513 field_243164_r + f Ljava/lang/String; field_20082 field_224528_n + f Lnet/minecraft/class_2960; field_22719 field_237987_b_ + f Lnet/minecraft/class_4185; field_20075 field_224521_g + f Ljava/lang/String; field_20078 field_224524_j + f Z field_20083 field_224529_o + f Lnet/minecraft/class_2561; field_20073 field_224519_e + f Lnet/minecraft/class_2561; field_20077 field_224523_i + f Lnet/minecraft/class_4419$class_4420; field_20071 field_224517_c + f Ljava/util/List; field_20085 field_224531_q + f Lnet/minecraft/class_2960; field_22721 field_237989_p_ + f Lnet/minecraft/class_4877$class_4321; field_20079 field_224525_k + f Lnet/minecraft/class_2960; field_22720 field_237988_c_ + f Lnet/minecraft/class_2561; field_26512 field_243163_q + f Lnet/minecraft/class_4185; field_20076 field_224522_h + f I field_20072 field_224518_d + f Lnet/minecraft/class_4185; field_20074 field_224520_f + f [Lnet/minecraft/class_2561; field_20081 field_224527_m + f Z field_20084 field_224530_p +c net/minecraft/class_4419$class_4421 com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen$WorldTemplateSelectionEntry + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4890;IIII)V method_21453 func_238029_a_ + m (Lnet/minecraft/class_4587;IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V method_21452 func_238028_a_ + m (Lnet/minecraft/class_4587;IIIILnet/minecraft/class_4890;)V method_21451 func_238027_a_ + m (Lnet/minecraft/class_4419$class_4421;)Lnet/minecraft/class_4890; method_25248 func_238030_a_ + f Lnet/minecraft/class_4890; field_20094 field_223756_a + f Lnet/minecraft/class_4419; field_20095 field_223757_b +c net/minecraft/class_4419$class_4420 com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen$WorldTemplateSelectionList + m ()Ljava/util/List; method_21450 func_223879_b + m (Lnet/minecraft/class_4419$class_4421;)V method_25249 setSelected + m ()Z method_21446 func_223878_a + m (Lnet/minecraft/class_4890;)V method_21448 func_223876_a + m (I)Lnet/minecraft/class_4890; method_21447 func_223877_a + m (Lnet/minecraft/class_4419$class_4421;)Lnet/minecraft/class_4890; method_25250 func_223875_a + f Lnet/minecraft/class_4419; field_20093 field_223880_a +c net/minecraft/class_4419$1 com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen$1 + m ()V run run + m (Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_4891; method_21445 func_238026_a_ + f Lnet/minecraft/class_4891; field_20091 field_238025_a_ + f Lnet/minecraft/class_4419; field_20092 field_223837_a +c net/minecraft/class_4416 com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen + m (Lnet/minecraft/class_4416;I)I method_21398 func_237972_a_ + m ()Lnet/minecraft/class_2561; method_21410 func_243156_f + m ()Lnet/minecraft/class_2561; method_25225 func_243158_g + m ()V method_21396 func_224541_a + m (Lnet/minecraft/class_4416;)Lnet/minecraft/class_4185; method_21407 func_237975_b_ + m ()V method_21401 func_224544_b + m (Lnet/minecraft/class_34;)Lnet/minecraft/class_2561; method_25222 func_243152_b + m (Lnet/minecraft/class_4416;)Ljava/util/List; method_21405 func_237971_a_ + m (I)I method_25218 func_237968_a_ + m (Lnet/minecraft/class_4185;)V method_25223 func_237976_b_ + m (Lnet/minecraft/class_4185;)V method_25221 func_237973_a_ + m (Lnet/minecraft/class_34;Lnet/minecraft/class_34;)I method_25220 func_237970_a_ + m (Lnet/minecraft/class_34;)Lnet/minecraft/class_2561; method_21400 func_237977_c_ + m ()Lnet/minecraft/class_2561; method_30870 func_243151_a + m (Lnet/minecraft/class_4416;)I method_21406 func_237978_c_ + m (Lnet/minecraft/class_34;)Ljava/lang/String; method_21404 func_237979_d_ + m (Lnet/minecraft/class_4416;)Lnet/minecraft/class_4416$class_4418; method_21408 func_243155_d + m (Lnet/minecraft/class_4416;)Lnet/minecraft/class_327; method_25226 func_237984_i_ + m (Lnet/minecraft/class_4416;)Lnet/minecraft/class_327; method_30872 func_243159_g + m (Lnet/minecraft/class_4416;)Lnet/minecraft/class_327; method_30871 func_243157_f + m ()Lnet/minecraft/class_2561; method_21409 func_243153_c + m (Lnet/minecraft/class_34;)Ljava/lang/String; method_25219 func_237969_a_ + f Lnet/minecraft/class_4410; field_20050 field_224548_b + f Ljava/lang/Runnable; field_22717 field_237967_A_ + f Lnet/minecraft/class_4903; field_20061 field_224559_m + f Lnet/minecraft/class_2561; field_26507 field_243149_p + f Ljava/util/List; field_20055 field_224553_g + f Lnet/minecraft/class_4416$class_4418; field_20057 field_224555_i + f Ljava/text/DateFormat; field_20054 field_224552_f + f Lnet/minecraft/class_2561; field_26508 field_243150_q + f J field_20051 field_224549_c + f I field_20052 field_224550_d + f Lnet/minecraft/class_2561; field_20058 field_243147_b + f Lnet/minecraft/class_2561; field_20059 field_243148_c + f I field_20056 field_224554_h + f Lnet/minecraft/class_4903; field_20063 field_224561_o + f Lnet/minecraft/class_4903; field_20062 field_224560_n + f Lorg/apache/logging/log4j/Logger; field_20049 field_224547_a + f Lnet/minecraft/class_4185; field_20053 field_224551_e +c net/minecraft/class_4416$class_4418 com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen$WorldSelectionList + m (Lnet/minecraft/class_4416$class_4417;)V method_25227 setSelected + m (Lnet/minecraft/class_34;)V method_21412 func_237986_a_ + f Lnet/minecraft/class_4416; field_20068 field_223882_a +c net/minecraft/class_4416$class_4417 com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen$WorldSelectionEntry + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_34;III)V method_21411 func_237985_a_ + f Lnet/minecraft/class_4416; field_20067 field_223760_b + f Ljava/lang/String; field_26510 field_243161_d + f Ljava/lang/String; field_26509 field_243160_c + f Lnet/minecraft/class_34; field_22718 field_223759_a + f Lnet/minecraft/class_2561; field_26511 field_243162_e +c net/minecraft/class_4423 com/mojang/realmsclient/gui/screens/RealmsSlotOptionsScreen + m (Lnet/minecraft/class_4423;)Lnet/minecraft/class_4423$class_4424; method_21496 func_238044_a_ + m (Lnet/minecraft/class_4185;)V method_25261 func_238053_f_ + m ()Lnet/minecraft/class_2561; method_21482 func_224634_i + m (Lnet/minecraft/class_4185;)V method_25265 func_238059_j_ + m (Lnet/minecraft/class_4185;)V method_25259 func_238051_d_ + m (Lnet/minecraft/class_4185;)V method_25256 func_238048_b_ + m (Lnet/minecraft/class_4423;)Ljava/lang/Integer; method_21497 func_238047_b_ + m ()Lnet/minecraft/class_2561; method_21466 func_224610_c + m ()Lnet/minecraft/class_2561; method_21462 func_224625_b + m ()Lnet/minecraft/class_2561; method_21472 func_224606_e + m ()Ljava/lang/String; method_21484 func_224604_j + m ()Lnet/minecraft/class_2561; method_21478 func_224621_g + m (Lnet/minecraft/class_4185;)V method_25262 func_238055_g_ + m (Lnet/minecraft/class_4185;)V method_25264 func_238057_i_ + m (Lnet/minecraft/class_4185;)V method_25260 func_238052_e_ + m (Lnet/minecraft/class_4185;)V method_25257 func_238049_c_ + m (Lnet/minecraft/class_4185;)V method_25255 func_238046_a_ + m ()V method_21486 func_224613_k + m ()Lnet/minecraft/class_2561; method_21475 func_224626_f + m ()Lnet/minecraft/class_2561; method_21469 func_224618_d + m ()Lnet/minecraft/class_2561; method_21480 func_224594_h + m (Z)Lnet/minecraft/class_2561; method_25258 func_238050_c_ + m (Lnet/minecraft/class_4185;)V method_25263 func_238056_h_ + m (Lnet/minecraft/class_4423;Ljava/lang/Integer;)Ljava/lang/Integer; method_21461 func_238045_a_ + f I field_20115 field_224644_g + f Lnet/minecraft/class_4388; field_20109 field_224638_a + f I field_20119 field_224648_k + f Lnet/minecraft/class_4185; field_22722 field_224635_A + f Ljava/lang/Boolean; field_20128 field_224657_t + f [Lnet/minecraft/class_2561; field_22723 field_238035_a_ + f Lnet/minecraft/class_4185; field_20131 field_224660_w + f Lnet/minecraft/class_4185; field_20129 field_224658_u + f I field_20121 field_224650_m + f Ljava/lang/Boolean; field_20122 field_224651_n + f Lnet/minecraft/class_4903; field_20502 field_224637_C + f Ljava/lang/Boolean; field_20124 field_224653_p + f Lnet/minecraft/class_2561; field_25884 field_243171_r + f Lnet/minecraft/class_2561; field_24207 field_238037_p_ + f I field_20116 field_224645_h + f Lnet/minecraft/class_4883; field_20117 field_224646_i + f Lnet/minecraft/class_342; field_20113 field_224642_e + f Lnet/minecraft/class_4185; field_20134 field_224663_z + f Ljava/lang/Boolean; field_20127 field_224656_s + f Ljava/lang/Integer; field_20126 field_224655_r + f Lnet/minecraft/class_4185; field_20132 field_224661_x + f Lnet/minecraft/class_4185; field_20130 field_224659_v + f Ljava/lang/Boolean; field_20123 field_224652_o + f Lnet/minecraft/class_4877$class_4321; field_20118 field_224647_j + f I field_20120 field_224649_l + f [Lnet/minecraft/class_2561; field_22724 field_238036_b_ + f Lnet/minecraft/class_4903; field_20107 field_224636_B + f Ljava/lang/Boolean; field_20125 field_224654_q + f Lnet/minecraft/class_2561; field_24208 field_238038_q_ + f Lnet/minecraft/class_4423$class_4424; field_20133 field_224662_y + f I field_20114 field_224643_f + f Lnet/minecraft/class_2561; field_26516 field_243172_s +c net/minecraft/class_4423$class_4424 com/mojang/realmsclient/gui/screens/RealmsSlotOptionsScreen$SettingsSlider + f D field_22725 field_238066_c_ + f D field_22726 field_238067_d_ + f Lnet/minecraft/class_4423; field_20145 field_223863_a +c net/minecraft/class_4422 com/mojang/realmsclient/gui/screens/RealmsSettingsScreen + m (Z)V method_25254 func_238034_c_ + m ()V method_21454 func_224563_a + m (Lnet/minecraft/class_4185;)V method_25253 func_238033_c_ + m (Lnet/minecraft/class_4185;)V method_25252 func_238032_b_ + m (Lnet/minecraft/class_4185;)V method_25251 func_238031_a_ + f Lnet/minecraft/class_4877; field_20097 field_224566_b + f Lnet/minecraft/class_4185; field_20099 field_224568_d + f Lnet/minecraft/class_342; field_20101 field_224570_f + f Lnet/minecraft/class_4903; field_20102 field_224571_g + f Lnet/minecraft/class_342; field_20100 field_224569_e + f Lnet/minecraft/class_2561; field_26515 field_243170_b + f Lnet/minecraft/class_4388; field_20096 field_224565_a + f Lnet/minecraft/class_2561; field_26514 field_243169_a +c net/minecraft/class_4426 com/mojang/realmsclient/gui/screens/RealmsTermsScreen + m (Lnet/minecraft/class_4185;)V method_25275 func_238078_b_ + m ()V method_21505 func_224721_a + m (Lnet/minecraft/class_4185;)V method_25274 func_238077_a_ + f Lnet/minecraft/class_4877; field_20168 guiScreenServer + f Lnet/minecraft/class_437; field_22727 field_224723_b + f Lnet/minecraft/class_2561; field_26525 field_243186_p + f Lnet/minecraft/class_2561; field_26524 field_243185_c + f Lorg/apache/logging/log4j/Logger; field_20165 field_224722_a + f Ljava/lang/String; field_20171 field_224728_g + f Lnet/minecraft/class_4325; field_20167 field_224724_c + f Lnet/minecraft/class_2561; field_26523 field_243184_b + f Z field_20170 field_224727_f +c net/minecraft/class_4425 com/mojang/realmsclient/gui/screens/RealmsSubscriptionInfoScreen + m (Lnet/minecraft/class_4425;)Lnet/minecraft/class_437; method_25269 func_238072_c_ + m (Lnet/minecraft/class_4425;)Lnet/minecraft/class_310; method_25272 func_238075_d_ + m (I)Lnet/minecraft/class_2561; method_21499 func_224576_a + m (Lnet/minecraft/class_4425;)Lnet/minecraft/class_310; method_25267 func_238070_b_ + m (Z)V method_25271 func_238074_c_ + m (J)V method_21500 func_224573_a + m ()Lorg/apache/logging/log4j/Logger; method_21498 func_238068_a_ + m (J)Ljava/lang/String; method_21502 func_224574_b + m (Lnet/minecraft/class_4185;)V method_25266 func_238069_a_ + m (Lnet/minecraft/class_4425;)Lnet/minecraft/class_4877; method_21501 func_224575_a + m (Lnet/minecraft/class_4185;)V method_25268 func_238071_b_ + m (Lnet/minecraft/class_4185;)V method_25270 func_238073_c_ + f Lnet/minecraft/class_2561; field_26519 field_243179_t + f Lnet/minecraft/class_2561; field_26517 field_243177_r + f Lnet/minecraft/class_2561; field_26518 field_243178_s + f Lnet/minecraft/class_2561; field_26521 field_243181_v + f Lnet/minecraft/class_2561; field_26522 field_243182_w + f Lnet/minecraft/class_2561; field_26520 field_243180_u + f Lnet/minecraft/class_437; field_20149 field_224582_d + f Ljava/lang/String; field_20158 field_224591_m + f Lorg/apache/logging/log4j/Logger; field_20146 field_224579_a + f Lnet/minecraft/class_2561; field_20153 field_243173_b + f Lnet/minecraft/class_2561; field_20154 field_243174_c + f Lnet/minecraft/class_437; field_20147 field_224580_b + f Lnet/minecraft/class_2561; field_20157 field_224590_l + f Lnet/minecraft/class_2561; field_20156 field_243176_q + f Lnet/minecraft/class_4877; field_20148 field_224581_c + f Lnet/minecraft/class_2561; field_20155 field_243175_p + f Lnet/minecraft/class_4887$class_4322; field_20159 field_224592_n +c net/minecraft/class_4425$1 com/mojang/realmsclient/gui/screens/RealmsSubscriptionInfoScreen$1 + m ()V run run + m ()V method_25273 func_238076_a_ + f Lnet/minecraft/class_4425; field_20164 field_223846_a +c net/minecraft/class_4429 com/mojang/realmsclient/gui/screens/UploadResult + f Ljava/lang/String; field_20206 field_225180_b + f I field_20205 field_225179_a +c net/minecraft/class_4429$class_4430 com/mojang/realmsclient/gui/screens/UploadResult$Builder + m (I)Lnet/minecraft/class_4429$class_4430; method_21542 func_225175_a + m (Ljava/lang/String;)Lnet/minecraft/class_4429$class_4430; method_21543 func_225176_a + m ()Lnet/minecraft/class_4429; method_21541 func_225174_a + f I field_20207 field_225177_a + f Ljava/lang/String; field_20208 field_225178_b +c net/minecraft/class_4429$1 com/mojang/realmsclient/gui/screens/UploadResult$1 +c net/minecraft/class_4427 com/mojang/realmsclient/gui/screens/RealmsUploadScreen + m (Lnet/minecraft/class_4185;)V method_25276 func_238084_a_ + m (Lnet/minecraft/class_4185;)V method_25277 func_238087_b_ + m ()V method_21525 func_224679_c + m (Lnet/minecraft/class_4587;J)V method_21526 func_238083_a_ + m ()V method_21528 func_224695_d + m ()V method_21536 func_224682_h + m (JLnet/minecraft/class_4429;)V method_22105 func_238082_a_ + m ()V method_21538 func_224676_i + m ()V method_22106 func_238090_n_ + m ()V method_25278 func_238091_v_ + m (Lnet/minecraft/class_4587;)V method_21532 func_238088_c_ + m (Lnet/minecraft/class_4587;)V method_21530 func_238086_b_ + m (Ljava/io/File;)Z method_21515 func_224692_a + m (Lnet/minecraft/class_4587;)V method_21534 func_238089_d_ + m (Ljava/io/File;)Ljava/io/File; method_21524 func_224675_b + m (Lorg/apache/commons/compress/archivers/tar/TarArchiveOutputStream;Ljava/lang/String;Ljava/lang/String;Z)V method_21516 func_224669_a + m ([Lnet/minecraft/class_2561;)V method_27460 func_238085_a_ + f Ljava/lang/Long; field_20193 field_224715_t + f Lnet/minecraft/class_4351; field_20179 field_224701_f + f Lnet/minecraft/class_2561; field_26526 field_243187_p + f I field_20190 field_238079_E_ + f Ljava/lang/Runnable; field_22728 field_238080_I_ + f Ljava/lang/Long; field_20194 field_224716_u + f Z field_20185 field_224707_l + f Z field_20186 field_224708_m + f Lnet/minecraft/class_4410; field_20175 field_224697_b + f J field_20177 field_224699_d + f Z field_20187 field_224709_n + f I field_20178 field_224700_e + f J field_20195 field_224717_v + f Lnet/minecraft/class_4185; field_20189 field_224711_p + f Lnet/minecraft/class_4185; field_20188 field_224710_o + f Ljava/lang/String; field_20183 field_224705_j + f Lcom/google/common/util/concurrent/RateLimiter; field_20180 field_224702_g + f Lnet/minecraft/class_34; field_20176 field_224698_c + f Lnet/minecraft/class_2561; field_20182 field_224704_i + f [Ljava/lang/String; field_20191 field_224713_r + f [Lnet/minecraft/class_2561; field_20503 field_224703_h + f Z field_20184 field_224706_k + f Ljava/util/concurrent/locks/ReentrantLock; field_20196 field_238081_b_ + f Lorg/apache/logging/log4j/Logger; field_20174 field_224696_a +c net/minecraft/class_4432 com/mojang/realmsclient/util/RealmsPersistence + m ()Ljava/io/File; method_25279 func_238093_b_ + m ()Lnet/minecraft/class_4432$class_4433; method_21549 func_225188_a + m (Lnet/minecraft/class_4432$class_4433;)V method_21550 func_225187_a + f Lnet/minecraft/class_4869; field_22729 field_238092_a_ +c net/minecraft/class_4432$class_4433 com/mojang/realmsclient/util/RealmsPersistence$RealmsPersistenceData + f Ljava/lang/String; field_20209 field_225185_a + f Z field_20210 field_225186_b +c net/minecraft/class_4431 com/mojang/realmsclient/util/JsonUtils + m (Ljava/lang/String;Lcom/google/gson/JsonObject;)Ljava/util/Date; method_21544 func_225173_a + m (Ljava/lang/String;Lcom/google/gson/JsonObject;I)I method_21545 func_225172_a + m (Ljava/lang/String;Lcom/google/gson/JsonObject;Z)Z method_21548 func_225170_a + m (Ljava/lang/String;Lcom/google/gson/JsonObject;J)J method_21546 func_225169_a + m (Ljava/lang/String;Lcom/google/gson/JsonObject;Ljava/lang/String;)Ljava/lang/String; method_21547 func_225171_a +c net/minecraft/class_4448 com/mojang/realmsclient/util/RealmsUtil + m (J)Ljava/lang/String; method_21567 func_225192_a + m (Ljava/lang/String;)Ljava/lang/String; method_21568 func_225193_a + m ()Lcom/mojang/authlib/minecraft/MinecraftSessionService; method_21566 func_225189_a + m (Ljava/util/Date;)Ljava/lang/String; method_25282 func_238105_a_ + m (Ljava/lang/String;)Ljava/util/Map; method_21569 func_225191_b + f Lcom/google/common/cache/LoadingCache; field_20260 field_225194_a + f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_20262 field_225196_c + f Lcom/mojang/authlib/yggdrasil/YggdrasilAuthenticationService; field_20261 field_225195_b +c net/minecraft/class_4448$1 com/mojang/realmsclient/util/RealmsUtil$1 + m (Ljava/lang/Object;)Ljava/lang/Object; load load + m (Ljava/lang/String;)Lcom/mojang/authlib/GameProfile; method_21571 load +c net/minecraft/class_4446 com/mojang/realmsclient/util/RealmsTextureManager + m (Ljava/util/UUID;)V method_21561 func_225204_a + m (Ljava/lang/String;)V method_21558 func_225200_a + m (Ljava/lang/String;Ljava/lang/String;)I method_21564 func_225203_b + m (Ljava/lang/String;Ljava/lang/Runnable;)V method_21559 func_225205_a + m (Ljava/lang/String;Ljava/lang/String;)V method_21560 func_225202_a + m ()Lorg/apache/logging/log4j/Logger; method_21557 func_238098_a_ + m ()Ljava/util/Map; method_21562 func_225207_c + m ()Ljava/util/Map; method_21565 func_238099_c_ + f Ljava/util/Map; field_20255 field_225211_c + f Ljava/util/Map; field_20253 field_225209_a + f Ljava/util/Map; field_20254 field_225210_b + f Lorg/apache/logging/log4j/Logger; field_20256 field_225212_d + f Lnet/minecraft/class_2960; field_22730 field_238097_e_ +c net/minecraft/class_4446$1 com/mojang/realmsclient/util/RealmsTextureManager$1 + m ()V run run + f Ljava/lang/String; field_20257 field_225199_a +c net/minecraft/class_4446$class_4447 com/mojang/realmsclient/util/RealmsTextureManager$RealmsTexture + m (Lnet/minecraft/class_4446$class_4447;)Ljava/lang/String; method_25281 func_238101_b_ + m (Lnet/minecraft/class_4446$class_4447;)I method_25280 func_238100_a_ + f I field_20259 field_225198_b + f Ljava/lang/String; field_20258 field_225197_a +c net/minecraft/class_4450 com/mojang/realmsclient/util/TextRenderingUtils + m (Ljava/lang/String;Ljava/util/List;)Ljava/util/List; method_21577 func_225225_a + m (Ljava/lang/String;[Lnet/minecraft/class_4450$class_4452;)Ljava/util/List; method_21578 func_225224_a + m (Ljava/util/List;Ljava/util/List;)Ljava/util/List; method_21579 func_225222_a + m (Ljava/lang/String;Ljava/lang/String;)Ljava/util/List; method_21576 func_225226_a + m (Ljava/lang/String;)Ljava/util/List; method_21575 func_225223_a +c net/minecraft/class_4450$class_4451 com/mojang/realmsclient/util/TextRenderingUtils$Line + m ()Ljava/lang/String; toString toString + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + f Ljava/util/List; field_20266 field_225213_a +c net/minecraft/class_4450$class_4452 com/mojang/realmsclient/util/TextRenderingUtils$LineSegment + m ()Ljava/lang/String; method_21584 func_225216_c + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4450$class_4452; method_21582 func_225214_a + m ()Ljava/lang/String; method_21580 func_225215_a + m ()Z method_21583 func_225217_b + m (Ljava/lang/String;)Lnet/minecraft/class_4450$class_4452; method_21581 func_225218_a + m ()Ljava/lang/String; toString toString + f Ljava/lang/String; field_20268 field_225220_b + f Ljava/lang/String; field_20267 field_225219_a + f Ljava/lang/String; field_20269 field_225221_c +c net/minecraft/class_4449 com/mojang/realmsclient/util/SkinProcessor + m (IIII)V method_21574 func_225229_b + m (IIII)V method_21572 func_225227_a + m (Ljava/awt/image/BufferedImage;)Ljava/awt/image/BufferedImage; method_21573 func_225228_a + f I field_20264 field_225231_b + f I field_20265 field_225232_c + f [I field_20263 field_225230_a +c net/minecraft/class_4435 net/minecraft/realms/action/CloseRealmsAction + m ()V run run + f Lnet/minecraft/class_4877; field_20212 field_238107_c_ + f Lnet/minecraft/class_4388; field_20213 field_238108_d_ +c net/minecraft/class_4453 com/mojang/realmsclient/util/UploadTokenCache + m (J)Ljava/lang/String; method_21585 func_225235_a + m (J)V method_21587 func_225233_b + m (JLjava/lang/String;)V method_21586 func_225234_a + f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_20270 field_225236_a +c net/minecraft/class_4436 net/minecraft/realms/action/PrepareDownloadRealmsAction + m ()V run run + m (Z)V method_25283 func_238115_a_ + f Lnet/minecraft/class_437; field_20216 field_238113_e_ + f J field_20214 field_238111_c_ + f I field_20215 field_238112_d_ + f Ljava/lang/String; field_20217 field_238114_f_ +c net/minecraft/class_4438 net/minecraft/realms/action/ConnectedToRealmsAction + m ()V run run + f Lnet/minecraft/class_4902; field_20222 field_238109_c_ + f Lnet/minecraft/class_4878; field_20223 field_238110_d_ +c net/minecraft/class_4358 com/mojang/realmsclient/gui/LongRunningTask + m (Lnet/minecraft/class_310;Lnet/minecraft/class_437;)V method_25288 func_238126_a_ + m (I)V method_25287 func_238125_a_ + m (Lnet/minecraft/class_2561;)V method_21069 func_224989_b + m ()V method_21070 func_224991_c + m ()Z method_21065 func_224988_a + m ()V method_21071 func_224992_d + m ()V method_21068 func_224990_b + m (Lnet/minecraft/class_437;)V method_25289 func_238127_a_ + m (Lnet/minecraft/class_4398;)V method_21066 func_224987_a + f Lnet/minecraft/class_4398; field_19638 field_224993_a + f Lorg/apache/logging/log4j/Logger; field_22731 field_238124_a_ +c net/minecraft/class_4439 net/minecraft/realms/action/ConnectingToRealmsAction + m (Lnet/minecraft/class_4878;)V method_25284 func_238120_a_ + m (Ljava/lang/Throwable;)Ljava/lang/Void; method_25286 func_238122_a_ + m ()V run run + m (I)V method_21554 func_238123_b_ + m (Lnet/minecraft/class_4878;Z)V method_25285 func_238121_a_ + f Ljava/util/concurrent/locks/ReentrantLock; field_20227 field_238119_f_ + f Lnet/minecraft/class_4325; field_20226 field_238118_e_ + f Lnet/minecraft/class_4877; field_20224 field_238116_c_ + f Lnet/minecraft/class_437; field_20225 field_238117_d_ +c net/minecraft/class_4440 net/minecraft/realms/action/ResetWorldRealmsAction + m ()V run run + f Ljava/lang/Runnable; field_22732 field_238138_i_ + f I field_20230 field_238134_e_ + f J field_20232 field_238136_g_ + f Ljava/lang/String; field_20228 field_238132_c_ + f Z field_20231 field_238135_f_ + f Lnet/minecraft/class_2561; field_20235 field_238137_h_ + f Lnet/minecraft/class_4890; field_20229 field_238133_d_ +c net/minecraft/class_4437 net/minecraft/realms/action/OpeningWorldRealmsAction + m ()V run run + f Lnet/minecraft/class_4877; field_20218 field_238128_c_ + f Lnet/minecraft/class_4325; field_20221 field_238131_f_ + f Z field_20220 field_238130_e_ + f Lnet/minecraft/class_437; field_20219 field_238129_d_ +c net/minecraft/class_4441 net/minecraft/realms/action/RestoringBackupRealmsAction + m ()V run run + f J field_20237 field_238140_d_ + f Lnet/minecraft/class_4388; field_20238 field_238141_e_ + f Lnet/minecraft/class_4867; field_20236 field_238139_c_ +c net/minecraft/class_4443 net/minecraft/realms/action/SwitchMinigameRealmsAction + m ()V run run + f J field_20242 field_238145_c_ + f I field_20243 field_238146_d_ + f Ljava/lang/Runnable; field_22733 field_238147_e_ +c net/minecraft/class_4442 net/minecraft/realms/action/StartMinigameRealmsAction + m ()V run run + f Lnet/minecraft/class_4388; field_20241 field_238144_e_ + f J field_20239 field_238142_c_ + f Lnet/minecraft/class_4890; field_20240 field_238143_d_ +c net/minecraft/class_4060 net/minecraft/client/settings/AmbientOcclusionStatus + m ()Ljava/lang/String; method_18485 getResourceKey + m ()[Lnet/minecraft/class_4060; values values + m ()I method_18483 getId + m (Ljava/lang/String;)Lnet/minecraft/class_4060; valueOf valueOf + m (I)[Lnet/minecraft/class_4060; method_18486 func_216571_b + m (I)Lnet/minecraft/class_4060; method_18484 getValue + f Ljava/lang/String; field_18149 resourceKey + f [Lnet/minecraft/class_4060; field_18147 VALUES + f Lnet/minecraft/class_4060; field_18145 MIN + f Lnet/minecraft/class_4060; field_18146 MAX + f I field_18148 id + f Lnet/minecraft/class_4060; field_18144 OFF + f [Lnet/minecraft/class_4060; field_18150 $VALUES +c net/minecraft/class_4445 net/minecraft/realms/action/CreateWorldRealmsAction + m ()V run run + f Ljava/lang/String; field_20250 field_238149_d_ + f J field_20251 field_238150_e_ + f Ljava/lang/String; field_20249 field_238148_c_ + f Lnet/minecraft/class_437; field_20252 field_238151_f_ +c net/minecraft/class_4062 net/minecraft/client/settings/BooleanOption + m (Lnet/minecraft/class_315;)Lnet/minecraft/class_2561; method_18495 func_238152_c_ + m (Lnet/minecraft/class_315;)Z method_18494 get + m (Lnet/minecraft/class_315;Ljava/lang/String;)V method_18492 set + m (Lnet/minecraft/class_315;Z)V method_18493 set + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4185;)V method_19786 func_216745_a + m (Lnet/minecraft/class_315;)V method_18491 nextValue + f Ljava/util/function/BiConsumer; field_18159 setter + f Ljava/util/function/Predicate; field_18158 getter +c net/minecraft/class_4061 net/minecraft/client/settings/AttackIndicatorStatus + m ()I method_18487 getId + m (Ljava/lang/String;)Lnet/minecraft/class_4061; valueOf valueOf + m (I)[Lnet/minecraft/class_4061; method_18490 func_216750_b + m (I)Lnet/minecraft/class_4061; method_18488 byId + m ()Ljava/lang/String; method_18489 getResourceKey + m ()[Lnet/minecraft/class_4061; values values + f I field_18155 id + f Lnet/minecraft/class_4061; field_18151 OFF + f [Lnet/minecraft/class_4061; field_18157 $VALUES + f Ljava/lang/String; field_18156 resourceKey + f [Lnet/minecraft/class_4061; field_18154 BY_ID + f Lnet/minecraft/class_4061; field_18152 CROSSHAIR + f Lnet/minecraft/class_4061; field_18153 HOTBAR +c net/minecraft/class_5498 net/minecraft/client/settings/PointOfView + m ()Z method_31035 func_243193_b + m ()[Lnet/minecraft/class_5498; values values + m (Ljava/lang/String;)Lnet/minecraft/class_5498; valueOf valueOf + m ()Z method_31034 func_243192_a + m ()Lnet/minecraft/class_5498; method_31036 func_243194_c + f Z field_26669 field_243191_f + f [Lnet/minecraft/class_5498; field_26667 field_243189_d + f Lnet/minecraft/class_5498; field_26665 THIRD_PERSON_BACK + f Lnet/minecraft/class_5498; field_26666 THIRD_PERSON_FRONT + f Z field_26668 field_243190_e + f Lnet/minecraft/class_5498; field_26664 FIRST_PERSON + f [Lnet/minecraft/class_5498; field_26670 $VALUES +c net/minecraft/class_4184 net/minecraft/client/renderer/ActiveRenderInfo + m ()Lnet/minecraft/class_1160; method_19336 getUpVector + m (D)D method_19318 calcCameraDistance + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_1297;ZZF)V method_19321 update + m ()Z method_19332 isValid + m ()Lnet/minecraft/class_1158; method_23767 getRotation + m ()Lnet/minecraft/class_1297; method_19331 getRenderViewEntity + m ()Z method_19333 isThirdPerson + m ()Lnet/minecraft/class_2338; method_19328 getBlockPos + m ()V method_19337 clear + m (Lnet/minecraft/class_243;)V method_19322 setPosition + m ()F method_19329 getPitch + m ()F method_19330 getYaw + m ()V method_19317 interpolateHeight + m (FF)V method_19325 setDirection + m ()Lnet/minecraft/class_1160; method_19335 getViewVector + m ()Lnet/minecraft/class_243; method_19326 getProjectedView + m (DDD)V method_19327 setPosition + m (DDD)V method_19324 movePosition + m ()Lnet/minecraft/class_3610; method_19334 getFluidState + f F field_18722 previousHeight + f Z field_18719 thirdPerson + f Z field_18720 thirdPersonReverse + f Lnet/minecraft/class_1922; field_18710 world + f Lnet/minecraft/class_2338$class_2339; field_18713 blockPos + f Lnet/minecraft/class_1158; field_21518 rotation + f Lnet/minecraft/class_1160; field_18714 look + f Lnet/minecraft/class_1160; field_18716 left + f Lnet/minecraft/class_1160; field_18715 up + f Z field_18709 valid + f F field_18717 pitch + f F field_18718 yaw + f Lnet/minecraft/class_1297; field_18711 renderViewEntity + f Lnet/minecraft/class_243; field_18712 pos + f F field_18721 height +c net/minecraft/class_4063 net/minecraft/client/settings/CloudOption + m ()[Lnet/minecraft/class_4063; values values + m ()I method_18496 getId + m ()Ljava/lang/String; method_18498 getKey + m (I)[Lnet/minecraft/class_4063; method_18499 func_216805_b + m (Ljava/lang/String;)Lnet/minecraft/class_4063; valueOf valueOf + m (I)Lnet/minecraft/class_4063; method_18497 byId + f [Lnet/minecraft/class_4063; field_18165 BY_ID + f Lnet/minecraft/class_4063; field_18163 FAST + f Lnet/minecraft/class_4063; field_18164 FANCY + f I field_18166 id + f Ljava/lang/String; field_18167 key + f Lnet/minecraft/class_4063; field_18162 OFF + f [Lnet/minecraft/class_4063; field_18168 $VALUES +c net/minecraft/class_299 net/minecraft/client/util/ClientRecipeBook + m (Ljava/util/Map;Lnet/minecraft/class_314;)Ljava/util/stream/Stream; method_30280 func_243198_a + m (Ljava/util/Map;Lcom/google/common/collect/ImmutableList$Builder;Lnet/minecraft/class_314;Ljava/util/List;)V method_30279 func_243197_a + m (Lnet/minecraft/class_1860;)Ljava/lang/Object; method_29969 func_243203_h + m ()Ljava/util/List; method_1393 getRecipes + m (Ljava/lang/Iterable;)V method_1401 func_243196_a + m (Ljava/lang/Iterable;)Ljava/util/Map; method_30283 func_243201_b + m (Lnet/minecraft/class_1860;)Lnet/minecraft/class_314; method_1400 getCategory + m (Lnet/minecraft/class_314;)Ljava/util/List; method_1396 getRecipes + m (Lnet/minecraft/class_314;)Ljava/util/List; method_30284 func_243202_c + m (Ljava/util/Map;Lnet/minecraft/class_314;Ljava/util/List;)V method_30281 func_243199_a + m (Lnet/minecraft/class_314;)Ljava/util/List; method_30282 func_202890_b + f Lorg/apache/logging/log4j/Logger; field_25622 field_241555_k_ + f Ljava/util/List; field_25778 allRecipes + f Ljava/util/Map; field_1638 recipesByCategory +c net/minecraft/class_4064 net/minecraft/client/settings/IteratableOption + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4185;)V method_19787 func_216721_a + m (Lnet/minecraft/class_315;I)V method_18500 setValueIndex + m (Lnet/minecraft/class_315;)Lnet/minecraft/class_2561; method_18501 getName + f Ljava/util/function/BiFunction; field_18170 getter + f Ljava/util/function/BiConsumer; field_18169 setter +c net/minecraft/class_5222 net/minecraft/util/text/TextPropertiesManager + m (Lnet/minecraft/class_5348;)V method_27462 func_238155_a_ + m ()Lnet/minecraft/class_5348; method_27463 func_238156_b_ + m ()Lnet/minecraft/class_5348; method_27461 func_238154_a_ + f Ljava/util/List; field_25260 field_238153_a_ +c net/minecraft/class_4454 net/minecraft/client/FullscreenResolutionOption + m (Lnet/minecraft/class_313;Lnet/minecraft/class_319;)Ljava/lang/Double; method_21588 func_225304_a + m (Lnet/minecraft/class_313;Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_27464 func_225305_a_ + m (Lnet/minecraft/class_313;Lnet/minecraft/class_1041;Lnet/minecraft/class_315;Ljava/lang/Double;)V method_21590 func_225303_a + m (Lnet/minecraft/class_313;Lnet/minecraft/class_1041;Lnet/minecraft/class_315;)Ljava/lang/Double; method_21589 func_225306_a +c net/minecraft/class_300 net/minecraft/client/util/NBTQueryManager + m (Lnet/minecraft/class_2338;Ljava/util/function/Consumer;)V method_1403 queryTileEntity + m (ILjava/util/function/Consumer;)V method_1405 queryEntity + m (ILnet/minecraft/class_2487;)Z method_1404 handleResponse + m (Ljava/util/function/Consumer;)I method_1402 setHandler + f I field_1641 transactionId + f Lnet/minecraft/class_634; field_1640 connection + f Ljava/util/function/Consumer; field_1642 handler +c net/minecraft/class_5365 net/minecraft/client/settings/GraphicsFanciness + m (Ljava/lang/String;)Lnet/minecraft/class_5365; valueOf valueOf + m ()Lnet/minecraft/class_5365; method_29595 func_238166_c_ + m (I)[Lnet/minecraft/class_5365; method_29594 func_238165_b_ + m ()Ljava/lang/String; toString toString + m ()[Lnet/minecraft/class_5365; values values + m ()I method_29591 func_238162_a_ + m ()Ljava/lang/String; method_29593 func_238164_b_ + m (I)Lnet/minecraft/class_5365; method_29592 func_238163_a_ + f [Lnet/minecraft/class_5365; field_25430 field_238159_d_ + f Lnet/minecraft/class_5365; field_25429 FABULOUS + f Lnet/minecraft/class_5365; field_25428 FANCY + f Ljava/lang/String; field_25432 field_238161_f_ + f I field_25431 field_238160_e_ + f [Lnet/minecraft/class_5365; field_25433 $VALUES + f Lnet/minecraft/class_5365; field_25427 FAST +c net/minecraft/class_5365$1 net/minecraft/client/settings/GraphicsFanciness$1 + f [I field_25434 field_238168_a_ +c net/minecraft/class_3799 net/minecraft/client/MinecraftGame + m ()Lcom/mojang/bridge/game/GameVersion; getVersion getVersion + m ()Lcom/mojang/bridge/game/GameSession; getCurrentSession getCurrentSession + m (Lcom/mojang/bridge/launcher/SessionEventListener;)V setSessionEventListener setSessionEventListener + m ()V method_16688 leaveGameSession + m ()Lcom/mojang/bridge/game/PerformanceMetrics; getPerformanceMetrics getPerformanceMetrics + m ()Lcom/mojang/bridge/game/Language; getSelectedLanguage getSelectedLanguage + m ()V method_16687 startGameSession + f Lcom/mojang/bridge/launcher/Launcher; field_16755 launcher + f Lcom/mojang/bridge/launcher/SessionEventListener; field_16756 sessionListener + f Lnet/minecraft/class_310; field_16757 gameInstance +c net/minecraft/class_3799$class_3800 net/minecraft/client/MinecraftGame$MinecraftPerformanceMetrics + m ()I getMinTime getMinTime + m ()I getAverageTime getAverageTime + m ()I getSampleCount getSampleCount + m ()I getMaxTime getMaxTime + f I field_16760 maxTime + f I field_16759 averageTime + f I field_16758 sampleCount + f I field_16761 minTime +c net/minecraft/class_302 net/minecraft/client/settings/CreativeSettings + m ()V method_1409 save + m (I)Lnet/minecraft/class_748; method_1410 getHotbarSnapshot + m ()V method_1411 load + f Lorg/apache/logging/log4j/Logger; field_1647 LOGGER + f Lcom/mojang/datafixers/DataFixer; field_1648 dataFixer + f Ljava/io/File; field_1646 dataFile + f [Lnet/minecraft/class_748; field_1644 hotbarSnapshots + f Z field_1645 loaded +c net/minecraft/class_303 net/minecraft/client/gui/ChatLine + m ()I method_1413 getChatLineID + m ()I method_1414 getUpdatedCounter + m ()Ljava/lang/Object; method_1412 getLineString + f Ljava/lang/Object; field_1651 lineString + f I field_1650 updateCounterCreated + f I field_1649 chatLineID +c net/minecraft/class_309 net/minecraft/client/KeyboardListener + m (Ljava/lang/String;[Ljava/lang/Object;)V method_1456 printDebugWarning + m (I[ZLnet/minecraft/class_4069;III)V method_1454 func_216820_a + m (Z)V method_1462 enableRepeatEvents + m (IJ)V method_1461 func_227998_a_ + m (JII)V method_1457 onCharEvent + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2487;)V method_1467 func_211561_b + m (Lnet/minecraft/class_364;II)V method_1458 func_212444_a + m (Ljava/lang/String;[Ljava/lang/Object;)V method_1459 printDebugMessage + m (JIIII)V method_22678 func_228003_c_ + m (J)V method_1472 setupCallbacks + m ()Ljava/lang/String; method_1460 getClipboardString + m (JIIII)V method_22676 func_228001_b_ + m (JIIII)V method_1466 onKeyEvent + m (I)Z method_1468 processKeyF3 + m (JII)V method_22677 func_228002_c_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1297;Lnet/minecraft/class_2487;)V method_1471 func_227999_a_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_243;Lnet/minecraft/class_2487;)V method_1469 setEntityClipboardString + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2487;)V method_1475 setBlockClipboardString + m (Ljava/lang/String;)V method_1455 setClipboardString + m ()V method_1474 tick + m (JII)V method_22675 func_228000_b_ + m (ZZ)V method_1465 copyHoveredObject + m (Lnet/minecraft/class_2561;)V method_1464 func_212448_b + m (Lnet/minecraft/class_364;CI)V method_1473 func_212445_a + m (Lnet/minecraft/class_2561;)V method_1463 func_212449_a + f Lnet/minecraft/class_310; field_1678 mc + f J field_1680 debugCrashWarningsSent + f J field_1682 debugCrashKeyPressTime + f J field_1681 lastDebugCrashWarning + f Z field_1683 repeatEventsEnabled + f Lnet/minecraft/class_3674; field_16241 clipboardHelper + f Z field_1679 actionKeyF3 +c net/minecraft/class_309$1 net/minecraft/client/KeyboardListener$1 + f [I field_1685 field_211160_a +c net/minecraft/class_304 net/minecraft/client/settings/KeyBinding + m (Ljava/lang/String;)Ljava/util/function/Supplier; method_1419 getDisplayString + m (Z)V method_23481 setPressed + m ()Z method_1427 isDefault + m (II)Z method_1417 matchesKey + m ()V method_1425 unpressKey + m (I)Z method_1433 matchesMouseKey + m (Lnet/minecraft/class_304;)I method_1430 compareTo + m ()V method_1424 updateKeyBindState + m ()Ljava/lang/String; method_1423 getKeyCategory + m ()Lnet/minecraft/class_3675$class_306; method_1429 getDefault + m ()V method_1426 resetKeyBindingArrayAndHash + m (Ljava/lang/Object;)I compareTo compareTo + m ()Ljava/lang/String; method_1431 getKeyDescription + m ()V method_1437 unPressAllKeys + m ()Lnet/minecraft/class_2561; method_16007 func_238171_j_ + m (Lnet/minecraft/class_304;)Z method_1435 conflicts + m (Ljava/util/HashMap;)V method_1418 func_205215_a + m ()Z method_1434 isKeyDown + m (Lnet/minecraft/class_3675$class_306;Z)V method_1416 setKeyBindState + m ()Ljava/lang/String; method_1428 getTranslationKey + m (Lnet/minecraft/class_3675$class_306;)V method_1422 bind + m ()Z method_1436 isPressed + m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_27465 func_238170_b_ + m ()Z method_1415 isInvalid + m (Lnet/minecraft/class_3675$class_306;)V method_1420 onTick + f Lnet/minecraft/class_3675$class_306; field_1654 keyCodeDefault + f Ljava/lang/String; field_1660 keyDescription + f Lnet/minecraft/class_3675$class_306; field_1655 keyCode + f Ljava/lang/String; field_1659 keyCategory + f I field_1661 pressTime + f Ljava/util/Map; field_1658 HASH + f Ljava/util/Set; field_1652 KEYBIND_SET + f Z field_1653 pressed + f Ljava/util/Map; field_1657 KEYBIND_ARRAY + f Ljava/util/Map; field_1656 CATEGORY_ORDER +c net/minecraft/class_310 net/minecraft/client/Minecraft + m ()Lnet/minecraft/class_1144; method_1483 getSoundHandler + m ()Z method_1589 isConnectedToRealms + m ()Lnet/minecraft/class_3300; method_1478 getResourceManager + m ()Z method_29611 isFabulousGraphicsEnabled + m (Ljava/lang/String;)Z method_1500 func_213238_a + m ()Lnet/minecraft/class_1076; method_1526 getLanguageManager + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_3696;)V method_1492 drawProfilerResult + m ()Z method_22107 isRenderOnThread + m (Lnet/minecraft/class_1799;)Ljava/util/stream/Stream; method_1502 func_213251_b + m ()V method_18099 unloadWorld + m ()Z method_24459 isDebugMode + m (Z)V method_1523 runGameLoop + m (Ljava/lang/String;Lnet/minecraft/class_1940;Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5285;)V method_29607 createWorld + m ()Ljava/lang/String; method_1563 getCurrentAction + m (Ljava/lang/String;Lnet/minecraft/class_5455$class_5457;Ljava/util/function/Function;Lcom/mojang/datafixers/util/Function4;Z)V method_29609 func_243207_a + m ()Lnet/minecraft/class_1276; method_1552 getSnooper + m (Lnet/minecraft/class_128;)V method_1565 displayCrashReport + m (Lnet/minecraft/class_1940;Lnet/minecraft/class_32$class_5143;)Lnet/minecraft/class_5359; method_29597 func_238179_a_ + m ()Lnet/minecraft/class_898; method_1561 getRenderManager + m (Ljava/util/concurrent/CompletableFuture;Ljava/util/Optional;)V method_24228 func_238200_a_ + m ()Lnet/minecraft/class_1142; method_1538 getMusicTicker + m ()V method_24288 setDefaultMinecraftTitle + m ()Lnet/minecraft/class_3695; method_16011 getProfiler + m ()Lnet/minecraft/class_4599; method_22940 getRenderTypeBuffers + m ()Ljava/lang/String; method_1547 getVersionType + m ()Z method_24289 isModdedClient + m (Lnet/minecraft/class_1076;)Ljava/lang/String; method_22680 func_243205_a + m (Ljava/lang/String;)Ljava/lang/String; method_22682 func_243211_c + m (ZLnet/minecraft/class_4758;)V method_24460 func_238210_b_ + m ()Ljava/util/concurrent/CompletableFuture; method_1513 scheduleResourcesRefresh + m ()Z method_1491 func_229995_aK_ + m ()Lnet/minecraft/class_759; method_1489 getFirstPersonRenderer + m (Ljava/util/concurrent/CompletableFuture;)V method_18508 func_229997_b_ + m (Lnet/minecraft/class_1799;)Ljava/util/stream/Stream; method_1525 func_213235_a + m (IJ)V method_1506 disableVSyncAfterGlError + m ()Lnet/minecraft/class_3283; method_1520 getResourcePackList + m ()V method_1490 shutdownMinecraftApplet + m (Lnet/minecraft/class_5455$class_5457;Ljava/util/function/Function;Lcom/mojang/datafixers/util/Function4;ZLnet/minecraft/class_32$class_5143;)Lnet/minecraft/class_310$class_5367; method_29604 reloadDatapacks + m ()Lcom/mojang/authlib/properties/PropertyMap; method_1539 getProfileProperties + m ()Z method_1569 isGameFocused + m ()I method_16009 getFramerateLimit + m (Lnet/minecraft/class_2561;)V method_1510 func_229998_b_ + m ()Lnet/minecraft/class_1297; method_1560 getRenderViewEntity + m ()Z method_1542 isIntegratedServerRunning + m (Lnet/minecraft/class_5382;Lcom/google/gson/JsonElement;)Lcom/mojang/serialization/DataResult; method_31126 func_243209_a + m (Lnet/minecraft/class_315;)Ljava/lang/String; method_22679 func_243204_a + m (Z)V method_1590 sendClickBlockToController + m (I)Lnet/minecraft/class_3949; method_17533 func_238211_c_ + m ()Lnet/minecraft/class_1092; method_1554 getModelManager + m (Lnet/minecraft/class_128;)V method_1494 crashed + m ()Z method_29043 isMultiplayerEnabled + m ()Ljava/util/concurrent/CompletableFuture; method_1521 reloadResources + m (Ljava/lang/Runnable;Ljava/lang/String;Z)V method_29605 func_241560_a_ + m (Lnet/minecraft/class_32$class_5143;)Lnet/minecraft/class_5359; method_29598 loadDataPackCodec + m ()Z method_1517 isFancyGraphicsEnabled + m ()Lnet/minecraft/class_1156; method_1577 getTutorial + m (Lnet/minecraft/class_516;)Ljava/util/stream/Stream; method_1529 func_213258_a + m (ZLnet/minecraft/class_4758;)V method_24458 tick + m ()Z method_1573 getForceUnicodeFont + m ()Z method_1540 isJava64bit + m (Ljava/util/Optional;)V method_24040 func_238197_a_ + m ()Lnet/minecraft/class_3799; method_16689 getMinecraftGame + m ()Lnet/minecraft/class_320; method_1548 getSession + m ()Lnet/minecraft/class_310; method_1551 getInstance + m (Z)V method_20539 displayInGameMenu + m ()Z method_1476 isJvm64bit + m (Ljava/lang/Throwable;)V method_24226 restoreResourcePacks + m ()Lnet/minecraft/class_4044; method_18321 getPaintingSpriteUploader + m ()Lnet/minecraft/class_1066; method_1516 getPackFinder + m ()Lnet/minecraft/class_4074; method_18505 getPotionSpriteUploader + m ()Ljava/lang/String; method_1515 getVersion + m ()Ljava/net/Proxy; method_1487 getProxy + m ()Lnet/minecraft/class_324; method_1505 getBlockColors + m (Lnet/minecraft/class_310$class_5366;Ljava/lang/String;ZLjava/lang/Runnable;)V method_29601 deleteWorld + m (Lnet/minecraft/class_516;)Ljava/util/stream/Stream; method_1518 func_213252_b + m (Lnet/minecraft/class_4071;)V method_18502 setLoadingGui + m ()Lnet/minecraft/class_4008; method_18095 getSplashes + m ()Ljava/lang/String; method_24287 getWindowTitle + m ()Lnet/minecraft/class_1041; method_22683 getMainWindow + m ()Lcom/mojang/authlib/minecraft/MinecraftSessionService; method_1495 getSessionService + m ()Z method_1493 isGamePaused + m (Lnet/minecraft/class_1297;)Z method_27022 isEntityGlowing + m (Lnet/minecraft/class_32$class_5143;Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_3300;Lnet/minecraft/class_5359;)Lnet/minecraft/class_5219; method_29599 loadWorld + m (Lnet/minecraft/class_1799;)Ljava/util/stream/Stream; method_1485 func_213242_c + m ()V method_1574 runTick + m (Z)V method_1537 setConnectedToRealms + m ()V method_17044 checkMissingData + m (Ljava/lang/String;)Z method_1579 func_213267_b + m (Lnet/minecraft/class_638;)V method_1481 loadWorld + m ()Lnet/minecraft/class_276; method_1522 getFramebuffer + m ()Lnet/minecraft/class_32; method_1586 getSaveLoader + m (Ljava/util/UUID;)Z method_29042 cannotSendChatMessages + m (Lnet/minecraft/class_1297;)V method_1504 setRenderViewEntity + m ()Lcom/mojang/datafixers/DataFixer; method_1543 getDataFixer + m (Lnet/minecraft/class_1860;)Lnet/minecraft/class_2960; method_1556 func_213244_a + m ()I method_16010 func_213247_aS + m (Ljava/util/function/Supplier;)Ljava/util/function/Supplier; method_24043 wrapV4 + m ()Z method_1588 isAmbientOcclusionEnabled + m ()Lnet/minecraft/class_374; method_1566 getToastGui + m ()Lnet/minecraft/class_302; method_1571 getCreativeSettings + m ()Lnet/minecraft/class_5195; method_1544 getBackgroundMusicSelector + m ()V method_1592 shutdown + m (Lnet/minecraft/class_642;)V method_1584 setServerData + m ()Lnet/minecraft/class_5407; method_30049 getGPUWarning + m ()V method_1508 processKeyBinds + m (Lnet/minecraft/class_2561;)Ljava/lang/String; method_1557 func_213264_c + m (Ljava/util/function/Supplier;)Lnet/minecraft/class_3262; method_1528 func_243213_e + m (Lnet/minecraft/class_437;)V method_18096 unloadWorld + m (Lnet/minecraft/class_638;)V method_18097 updateWorldRenderer + m ()Lnet/minecraft/class_1071; method_1582 getSkinManager + m (Lnet/minecraft/class_2960;)Ljava/util/function/Function; method_1549 getAtlasSpriteGetter + m ()Lnet/minecraft/class_642; method_1558 getCurrentServerData + m ()Z method_1555 isReducedDebug + m (Lnet/minecraft/class_2561;)V method_24229 func_243214_e + m (Z)V method_27466 forceUnicodeFont + m (Lnet/minecraft/class_1126;Lnet/minecraft/class_1121;Lnet/minecraft/class_1799;)V method_1535 func_213232_a + m ()Z method_22108 isRunning + m (Ljava/lang/String;Lnet/minecraft/class_5455$class_5457;Ljava/util/function/Function;Lcom/mojang/datafixers/util/Function4;Lnet/minecraft/class_310$class_5366;)V method_29608 func_243206_a + m ()V method_1546 populateSearchTreeManager + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2586;)Lnet/minecraft/class_1799; method_1499 storeTEInStack + m (Lnet/minecraft/class_437;)V method_1507 displayGuiScreen + m (Ljava/lang/String;Lnet/minecraft/class_5455$class_5457;Ljava/util/function/Function;Lcom/mojang/datafixers/util/Function4;ZLnet/minecraft/class_310$class_5366;)V method_29610 loadWorld + m ()Lnet/minecraft/class_776; method_1541 getBlockRendererDispatcher + m ()Lnet/minecraft/class_1060; method_1531 getTextureManager + m (Ljava/util/function/Supplier;)Lnet/minecraft/class_3262; method_24044 func_243212_d + m ()Z method_1498 isGuiEnabled + m ()V method_1511 middleClickMouse + m ()V method_1514 run + m ()Lnet/minecraft/class_3517; method_1570 getFrameTimer + m (Lnet/minecraft/class_1124$class_1125;)Lnet/minecraft/class_1123; method_1484 getSearchTree + m (Ljava/lang/String;)V method_29041 openChatScreen + m ()Ljava/io/File; method_1479 getFileResourcePacks + m ()V method_1572 func_229996_aL_ + m (Lnet/minecraft/class_1076;Ljava/lang/String;Lnet/minecraft/class_315;Lnet/minecraft/class_128;)V method_22681 fillCrashReport + m ()Lnet/minecraft/class_4071; method_18506 getLoadingGui + m ()V method_1519 freeMemory + m (Ljava/util/concurrent/CompletableFuture;)V method_29339 func_238213_c_ + m ()Lnet/minecraft/class_918; method_1480 getItemRenderer + m (Ljava/lang/String;ZLjava/util/function/Supplier;Lnet/minecraft/class_3262;Lnet/minecraft/class_3272;Lnet/minecraft/class_3288$class_3289;Lnet/minecraft/class_5352;)Lnet/minecraft/class_3288; method_24038 makePackInfo + m ()Z method_1496 isSingleplayer + m (I)V method_1524 updateDebugProfilerName + m ()Z method_29044 isChatEnabled + m ()Ljava/lang/String; method_16012 func_238203_aM_ + m ()V method_1536 clickMouse + m (Lnet/minecraft/class_437;)V method_18098 updateScreenTick + m ()F method_1488 getRenderPartialTicks + m (Lnet/minecraft/class_128;)Lnet/minecraft/class_128; method_1587 addGraphicsAndWorldToCrashReport + m (Ljava/lang/String;)V method_29606 loadWorld + m ()F method_1534 getTickLength + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_32$class_5143;Lnet/minecraft/class_310$class_5367;Lnet/minecraft/class_5219;Lcom/mojang/authlib/minecraft/MinecraftSessionService;Lcom/mojang/authlib/GameProfileRepository;Lnet/minecraft/class_3312;Ljava/lang/Thread;)Lnet/minecraft/class_1132; method_29603 func_238188_a_ + m ()Lnet/minecraft/class_1132; method_1576 getIntegratedServer + m ()V method_29338 func_238205_aQ_ + m ()Lnet/minecraft/class_634; method_1562 getConnection + m (Ljava/util/function/Supplier;)Ljava/util/function/Supplier; method_24042 wrapV3 + m (Lnet/minecraft/class_1860;)Ljava/util/stream/Stream; method_1591 func_213234_b + m (Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletionStage; method_18507 func_229993_a_ + m (Lnet/minecraft/class_2561;)Ljava/lang/String; method_1581 func_213230_d + m (Ljava/lang/Throwable;Lnet/minecraft/class_2561;)V method_31186 throwResourcePackLoadError + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5285;Lnet/minecraft/class_1940;Lnet/minecraft/class_32$class_5143;Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_3300;Lnet/minecraft/class_5359;)Lnet/minecraft/class_5219; method_31125 func_238187_a_ + m ()V method_1583 rightClickMouse + m (I)V method_24041 setMipmapLevels + m (Ljava/lang/String;Ljava/lang/Runnable;ZZ)V method_29600 func_241561_a_ + m ()Ljava/lang/String; method_1509 func_243210_aO + m (Lnet/minecraft/class_437;)V method_29970 forcedScreenTick + m ()Z method_1530 isDemo + f F field_1741 renderPartialTicksPaused + f Lnet/minecraft/class_3695; field_16240 profiler + f Ljava/lang/String; field_1711 launchedVersion + f Lnet/minecraft/class_761; field_1769 worldRenderer + f Lnet/minecraft/class_302; field_1732 creativeSettings + f Lnet/minecraft/class_2535; field_1746 networkManager + f Ljava/util/concurrent/atomic/AtomicReference; field_17405 refChunkStatusListener + f Z field_20908 debugChunkPath + f Lnet/minecraft/class_2960; field_24211 UNIFORM_FONT_RENDERER_NAME + f Lnet/minecraft/class_317; field_1728 timer + f Z field_1734 isGamePaused + f Lcom/mojang/authlib/properties/PropertyMap; field_1694 profileProperties + f Lnet/minecraft/class_757; field_1773 gameRenderer + f Lnet/minecraft/class_4074; field_18173 potionSprites + f Lnet/minecraft/class_320; field_1726 session + f Z field_25034 enableChat + f Lnet/minecraft/class_4044; field_18008 paintingSprites + f Ljava/lang/String; field_1770 debug + f Lnet/minecraft/class_642; field_1699 currentServerData + f J field_1750 startNanoTime + f Z field_1730 renderChunksMany + f Lnet/minecraft/class_2960; field_1740 DEFAULT_FONT_RENDERER_NAME + f I field_1738 debugFPS + f Ljava/io/File; field_1757 fileResourcepacks + f Lnet/minecraft/class_239; field_1765 objectMouseOver + f Lnet/minecraft/class_128; field_1747 crashReporter + f Lnet/minecraft/class_374; field_1702 toastGui + f Lnet/minecraft/class_1066; field_1722 packFinder + f Lnet/minecraft/class_1276; field_1775 snooper + f I field_1752 rightClickDelayTimer + f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_1723 sessionService + f Lnet/minecraft/class_329; field_1705 ingameGUI + f Lnet/minecraft/class_378; field_1708 fontResourceMananger + f Lnet/minecraft/class_3283; field_1715 resourcePackRepository + f Lnet/minecraft/class_315; field_1690 gameSettings + f Ljava/lang/Thread; field_1696 thread + f I field_1771 leftClickCounter + f Lnet/minecraft/class_918; field_1742 itemRenderer + f Z field_1721 isDemo + f Lnet/minecraft/class_3696; field_22226 profilerResult + f I field_22224 gameTime + f Lnet/minecraft/class_4071; field_18175 loadingGui + f Z field_20907 debugWireframe + f Lnet/minecraft/class_638; field_1687 world + f Lnet/minecraft/class_4008; field_17763 splashes + f Lnet/minecraft/class_1156; field_1758 tutorial + f Lnet/minecraft/class_636; field_1761 playerController + f Lnet/minecraft/class_324; field_1751 blockColors + f Z field_1743 skipRenderWorld + f Z field_1698 running + f Z field_1703 IS_RUNNING_ON_MAC + f Z field_25033 enableMultiplayer + f Lnet/minecraft/class_1124; field_1733 searchTreeManager + f Lnet/minecraft/class_3517; field_1688 frameTimer + f Lnet/minecraft/class_3682; field_1686 virtualScreen + f Lnet/minecraft/class_1142; field_1714 musicTicker + f Lnet/minecraft/class_776; field_1756 blockRenderDispatcher + f Lnet/minecraft/class_4599; field_20909 renderTypeBuffers + f Lnet/minecraft/class_1041; field_1704 mainWindow + f Lorg/apache/logging/log4j/Logger; field_1762 LOGGER + f Ljava/lang/String; field_1701 debugProfilerName + f Lnet/minecraft/class_437; field_1755 currentScreen + f Lnet/minecraft/class_898; field_1731 renderManager + f Lnet/minecraft/class_759; field_1737 firstPersonRenderer + f Z field_1759 integratedServerIsRunning + f Lcom/mojang/datafixers/DataFixer; field_1768 dataFixer + f Z field_1744 connectedToRealms + f Lnet/minecraft/class_1060; field_1764 textureManager + f Lnet/minecraft/class_1297; field_1719 renderViewEntity + f Z field_1693 jvm64bit + f Lnet/minecraft/class_863; field_1709 debugRenderer + f Lnet/minecraft/class_1144; field_1727 soundHandler + f Lnet/minecraft/class_746; field_1724 player + f Lnet/minecraft/class_1071; field_1707 skinManager + f [B field_1718 memoryReserve + f Lnet/minecraft/class_3799; field_16762 game + f Ljava/io/File; field_1697 gameDir + f J field_1712 debugUpdateTime + f Ljava/util/concurrent/CompletableFuture; field_18174 futureRefreshResources + f Lnet/minecraft/class_327; field_1772 fontRenderer + f Lnet/minecraft/class_1132; field_1766 integratedServer + f Lnet/minecraft/class_1297; field_1692 pointedEntity + f Lnet/minecraft/class_1092; field_1763 modelManager + f Lnet/minecraft/class_325; field_1760 itemColors + f Z field_1695 isWindowFocused + f Ljava/util/concurrent/CompletableFuture; field_18009 RESOURCE_RELOAD_INIT_TASK + f Lnet/minecraft/class_1076; field_1717 languageManager + f Ljava/lang/String; field_1720 versionType + f Lnet/minecraft/class_3296; field_1745 resourceManager + f Lnet/minecraft/class_309; field_1774 keyboardListener + f Lnet/minecraft/class_2960; field_1749 standardGalacticFontRenderer + f Lnet/minecraft/class_32; field_1748 saveFormat + f I field_1735 fpsCounter + f Lnet/minecraft/class_4757; field_22225 gameTimeTracker + f Lnet/minecraft/class_310; field_1700 instance + f Lnet/minecraft/class_702; field_1713 particles + f Ljava/util/Queue; field_17404 queueChunkTracking + f Lnet/minecraft/class_312; field_1729 mouseHelper + f Ljava/net/Proxy; field_1739 proxy + f Lnet/minecraft/class_5407; field_25671 warningGPU + f Lnet/minecraft/class_276; field_1689 framebuffer +c net/minecraft/class_310$class_5367 net/minecraft/client/Minecraft$PackManager + m ()V close close + m ()Lnet/minecraft/class_5350; method_29613 getDataPackRegistries + m ()Lnet/minecraft/class_3283; method_29612 getResourcePacks + m ()Lnet/minecraft/class_5219; method_29614 getServerConfiguration + f Lnet/minecraft/class_5350; field_25440 datapackRegistries + f Lnet/minecraft/class_3283; field_25439 resourcePackList + f Lnet/minecraft/class_5219; field_25441 serverConfiguration +c net/minecraft/class_310$class_5366 net/minecraft/client/Minecraft$WorldSelectionType + m (Ljava/lang/String;)Lnet/minecraft/class_310$class_5366; valueOf valueOf + m ()[Lnet/minecraft/class_310$class_5366; values values + f Lnet/minecraft/class_310$class_5366; field_25435 NONE + f [Lnet/minecraft/class_310$class_5366; field_25438 $VALUES + f Lnet/minecraft/class_310$class_5366; field_25436 CREATE + f Lnet/minecraft/class_310$class_5366; field_25437 BACKUP +c net/minecraft/class_310$1 net/minecraft/client/Minecraft$1 + f [I field_1778 field_238219_a_ + f [I field_1777 field_238220_b_ +c net/minecraft/class_4287 net/minecraft/client/settings/SliderMultiplierOption +c net/minecraft/class_4065 net/minecraft/client/settings/NarratorStatus + m ()Lnet/minecraft/class_2561; method_18511 func_238233_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_4065; valueOf valueOf + m (I)[Lnet/minecraft/class_4065; method_18512 func_216826_b + m ()[Lnet/minecraft/class_4065; values values + m ()I method_18509 getId + m (I)Lnet/minecraft/class_4065; method_18510 byId + f Lnet/minecraft/class_4065; field_18178 CHAT + f Lnet/minecraft/class_4065; field_18177 ALL + f Lnet/minecraft/class_4065; field_18179 SYSTEM + f I field_18181 id + f [Lnet/minecraft/class_4065; field_18180 BY_ID + f Lnet/minecraft/class_2561; field_24212 field_238232_g_ + f [Lnet/minecraft/class_4065; field_18183 $VALUES + f Lnet/minecraft/class_4065; field_18176 OFF +c net/minecraft/class_312 net/minecraft/client/MouseHelper + m (JLjava/util/List;)V method_29616 addPacksToScreen + m ()V method_1606 updatePlayerLook + m ()Z method_1609 isRightDown + m ()Z method_1608 isLeftDown + m ()V method_1599 setIgnoreFirstMove + m (JDD)V method_1600 cursorPosCallback + m (Lnet/minecraft/class_364;DD)V method_16013 func_238230_a_ + m (JIII)V method_1601 mouseButtonCallback + m (JDD)V method_1598 scrollCallback + m ()V method_1610 ungrabMouse + m ()V method_1612 grabMouse + m ()Z method_1613 isMouseGrabbed + m ()V method_30134 ignoreFirstMove + m (JDD)V method_22689 func_228033_f_ + m (JIII)V method_22686 func_228030_c_ + m (JDD)V method_22688 func_228032_e_ + m (J[Ljava/nio/file/Path;)V method_29617 func_238229_a_ + m ([ZDDI)V method_1605 func_198027_a + m (JDD)V method_22685 func_228029_c_ + m (JDD)V method_22687 func_228031_d_ + m (JIII)V method_22684 func_228028_b_ + m ([ZDDI)V method_1611 func_198033_b + m (JIJ)V method_29615 func_238227_a_ + m ()D method_1603 getMouseX + m (Lnet/minecraft/class_364;DDDD)V method_1602 func_238231_a_ + m ()D method_1604 getMouseY + m (J)V method_1607 registerCallbacks + f I field_1796 touchScreenCounter + f Lnet/minecraft/class_3540; field_1793 xSmoother + f Lnet/minecraft/class_3540; field_1782 ySmoother + f Z field_1790 middleDown + f D field_1792 eventTime + f Z field_1788 rightDown + f D field_1787 yVelocity + f D field_1789 xVelocity + f D field_1785 lastLookTime + f D field_1786 accumulatedScrollDelta + f Z field_1784 ignoreFirstMove + f Z field_1783 mouseGrabbed + f D field_1795 mouseX + f Lnet/minecraft/class_310; field_1779 minecraft + f D field_1794 mouseY + f Z field_1791 leftDown + f I field_1780 activeButton + f I field_1781 simulatedRightClicks +c net/minecraft/class_316 net/minecraft/client/AbstractOption + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_19342 func_216597_s_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18545 func_216594_g_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18541 func_216585_f_ + m (I)Lnet/minecraft/class_2561; method_30502 getPercentageAddMessage + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18558 func_216618_d_ + m (Lnet/minecraft/class_315;)Z method_18549 func_216663_f_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_27140 func_238271_z + m ()Ljava/util/Optional; method_29619 getOptionValues + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18524 func_216644_b_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18568 func_216630_i_ + m (Lnet/minecraft/class_315;)Z method_18573 func_216657_j_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18604 func_244406_A_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18534 func_216580_c_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_27467 func_238254_c + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18588 func_216600_n + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18586 func_216642_p_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18544 func_216668_h_ + m (Lnet/minecraft/class_315;)Z method_18585 func_216610_k_ + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_19341 func_216665_c_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_21669 func_225259_r_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18571 func_216620_j + m (Lnet/minecraft/class_315;)Z method_18597 func_216619_o_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18575 func_216588_g_ + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18542 func_216584_g_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_31042 func_216608_f + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18587 func_216670_k_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18569 func_216673_l_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18521 func_216602_d_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18514 func_216649_D + m ()Lnet/minecraft/class_2561; method_18518 getBaseMessageTranslation + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18547 func_216651_g_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18539 func_216629_f_ + m (Lnet/minecraft/class_315;)Z method_18543 func_216638_e_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_27141 func_238287_A + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_31041 func_216645_h_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18564 func_216603_h_ + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18566 func_216615_h_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_27468 func_238256_c_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18522 func_216641_b_ + m (Lnet/minecraft/class_315;)Z method_18567 func_216627_i_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_31037 func_244419_w + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18562 func_216609_h_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18540 func_216676_d_ + m (Lnet/minecraft/class_315;)Z method_20405 func_216634_j_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18591 func_216659_l_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18538 func_216596_g_ + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18525 func_216605_d_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18582 func_216604_o_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18576 func_216624_k + m (Lnet/minecraft/class_315;)Z method_18595 func_216643_n_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_27144 func_238297_k_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18600 func_216581_x_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18579 func_216635_h_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18565 func_216612_g + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18548 func_216674_h_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18515 func_216611_E + m (D)Lnet/minecraft/class_2561; method_30503 getPercentValueComponent + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18598 func_216654_t_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_19338 func_216639_c_ + m (Lnet/minecraft/class_315;)Z method_18526 func_228040_b_ + m (Lnet/minecraft/class_315;)Z method_18537 func_216647_d_ + m (Lnet/minecraft/class_315;III)Lnet/minecraft/class_339; method_18520 createWidget + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18546 func_216662_e_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18606 func_216601_B + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18572 func_216653_i_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18530 func_216579_d_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_31039 func_244416_g_ + m (Lnet/minecraft/class_315;)Z method_18561 func_216606_e_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18570 func_216631_i + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_31038 func_216672_x + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_19339 func_216626_a_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18523 func_228038_a_ + m (Lnet/minecraft/class_315;)Z method_18581 func_216661_i_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18533 func_216675_e_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18592 func_216660_o + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18594 func_216656_m_ + m (Lnet/minecraft/class_315;)Z method_18593 func_216669_m_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18580 func_216578_l + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18578 func_216592_n_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18532 func_216632_f + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_23483 func_228039_a_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18556 func_216598_g_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18601 func_216667_y_ + m (Ljava/util/List;)V method_29618 setOptionValues + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18554 func_216577_f_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_27143 func_238273_h + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_27142 func_238292_j_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_23484 func_228041_b_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_20404 func_216625_i_ + m (I)Lnet/minecraft/class_2561; method_30500 getPixelValueComponent + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18516 func_216587_F + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_27469 func_238324_u_ + m (Lnet/minecraft/class_315;)Z method_18519 func_228036_a_ + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18531 func_216622_e_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18559 func_244411_h_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18513 func_216591_C + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18552 func_216613_f_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18535 func_216628_e_ + m (Lnet/minecraft/class_315;)Z method_18555 func_216582_g_ + m (I)Lnet/minecraft/class_2561; method_30504 getMessageWithValue + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18605 func_216655_y + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18557 func_244413_h_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_19340 func_216593_a_ + m (Lnet/minecraft/class_315;)Z method_18577 func_216576_h_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18529 func_228042_b_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18528 func_216664_d_ + m (Lnet/minecraft/class_315;)Z method_18589 func_216583_l_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18584 func_216650_m + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18596 func_216621_n_ + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_30501 getGenericValueComponent + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_23485 func_228043_b_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18602 func_216636_z_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18550 func_216633_f_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18590 func_216595_q_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_27145 func_238282_i + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18560 func_216640_g_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_23482 func_228037_a_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18517 func_216607_G + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18563 func_216590_i_ + m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18599 func_216658_v_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18527 func_216616_e_ + m (Lnet/minecraft/class_315;)Z method_21670 func_225287_w_ + m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18574 func_216637_m_ + m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18583 func_216652_j_ + m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_31040 func_244415_e + m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18536 func_216648_f_ + f Lnet/minecraft/class_4067; field_1945 GAMMA + f Lnet/minecraft/class_4067; field_1933 RENDER_DISTANCE + f Lnet/minecraft/class_4062; field_1920 CHAT_LINKS + f Lnet/minecraft/class_4064; field_1923 CHAT_VISIBILITY + f Lnet/minecraft/class_4062; field_18184 ENTITY_SHADOWS + f Lnet/minecraft/class_2561; field_25672 FAST_GRAPHICS + f Lnet/minecraft/class_4067; field_1940 CHAT_HEIGHT_FOCUSED + f Lnet/minecraft/class_4062; field_18187 REDUCED_DEBUG_INFO + f Lnet/minecraft/class_4067; field_1941 CHAT_WIDTH + f Lnet/minecraft/class_2561; field_25674 FANCY_GRAPHICS + f Lnet/minecraft/class_4064; field_1919 PARTICLES + f Lnet/minecraft/class_4067; field_26673 FOV_EFFECT_SCALE_SLIDER + f Lnet/minecraft/class_4067; field_18190 MIPMAP_LEVELS + f Lnet/minecraft/class_4062; field_18195 AUTO_JUMP + f Lnet/minecraft/class_4067; field_24213 ENTITY_DISTANCE_SCALING + f Lnet/minecraft/class_4062; field_1925 CHAT_LINKS_PROMPT + f Lnet/minecraft/class_4064; field_1938 GRAPHICS + f Lnet/minecraft/class_4062; field_18185 FORCE_UNICODE_FONT + f Lnet/minecraft/class_4067; field_1939 CHAT_HEIGHT_UNFOCUSED + f Ljava/util/Optional; field_25442 optionValues + f Lnet/minecraft/class_4062; field_18188 SHOW_SUBTITLES + f Lnet/minecraft/class_4067; field_23930 LINE_SPACING + f Lnet/minecraft/class_2561; field_26672 SCREEN_EFFECT_SCALE_TOOLTIP + f Lnet/minecraft/class_2561; field_25673 FABULOUS_GRAPHICS + f Lnet/minecraft/class_4062; field_1930 TOUCHSCREEN + f Lnet/minecraft/class_4067; field_26674 SCREEN_EFFECT_SCALE_SLIDER + f Lnet/minecraft/class_4064; field_1937 RENDER_CLOUDS + f Lnet/minecraft/class_4067; field_18191 MOUSE_WHEEL_SENSITIVITY + f Lnet/minecraft/class_4062; field_18196 AUTO_SUGGEST_COMMANDS + f Lnet/minecraft/class_4062; field_20307 RAW_MOUSE_INPUT + f Lnet/minecraft/class_2561; field_1966 translatedBaseMessage + f Lnet/minecraft/class_4064; field_1924 AO + f Lnet/minecraft/class_4067; field_1944 SENSITIVITY + f Lnet/minecraft/class_4062; field_19243 DISCRETE_MOUSE_SCROLL + f Lnet/minecraft/class_4064; field_1922 GUI_SCALE + f Lnet/minecraft/class_4062; field_1963 INVERT_MOUSE + f Lnet/minecraft/class_4067; field_1921 CHAT_OPACITY + f Lnet/minecraft/class_4062; field_1926 SNOOPER + f Lnet/minecraft/class_2561; field_26671 FOV_EFFECT_SCALE_TOOLTIP + f Lnet/minecraft/class_4064; field_21330 SNEAK + f Lnet/minecraft/class_4067; field_23931 DELAY_INSTANT + f Lnet/minecraft/class_4062; field_1932 FULLSCREEN + f Lnet/minecraft/class_4064; field_18724 ACCESSIBILITY_TEXT_BACKGROUND + f Lnet/minecraft/class_4067; field_1935 FRAMERATE_LIMIT + f Lnet/minecraft/class_4062; field_1917 CHAT_COLOR + f Lnet/minecraft/class_4064; field_18192 ATTACK_INDICATOR + f Lnet/minecraft/class_4067; field_18723 ACCESSIBILITY_TEXT_BACKGROUND_OPACITY + f Lnet/minecraft/class_4062; field_1927 VSYNC + f Lnet/minecraft/class_4064; field_18193 MAIN_HAND + f Lnet/minecraft/class_4067; field_18189 BIOME_BLEND_RADIUS + f Lnet/minecraft/class_4062; field_18186 REALMS_NOTIFICATIONS + f Lnet/minecraft/class_4064; field_21331 SPRINT + f Lnet/minecraft/class_4067; field_1946 CHAT_SCALE + f Lnet/minecraft/class_4064; field_18194 NARRATOR + f Lnet/minecraft/class_4067; field_1964 FOV + f Lnet/minecraft/class_4062; field_1934 VIEW_BOBBING +c net/minecraft/class_316$1 net/minecraft/client/AbstractOption$1 + f [I field_25443 field_238328_a_ +c net/minecraft/class_4066 net/minecraft/client/settings/ParticleStatus + m ()[Lnet/minecraft/class_4066; values values + m ()Ljava/lang/String; method_18607 getResourceKey + m (Ljava/lang/String;)Lnet/minecraft/class_4066; valueOf valueOf + m (I)[Lnet/minecraft/class_4066; method_18610 func_216834_b + m ()I method_18609 getId + m (I)Lnet/minecraft/class_4066; method_18608 byId + f Lnet/minecraft/class_4066; field_18199 MINIMAL + f I field_18201 id + f Lnet/minecraft/class_4066; field_18198 DECREASED + f [Lnet/minecraft/class_4066; field_18200 BY_ID + f [Lnet/minecraft/class_4066; field_18203 $VALUES + f Ljava/lang/String; field_18202 resourceKey + f Lnet/minecraft/class_4066; field_18197 ALL +c net/minecraft/class_315 net/minecraft/client/GameSettings + m (Ljava/lang/String;)F method_1634 parseFloat + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_1626 dataFix + m (Lnet/minecraft/class_304;Lnet/minecraft/class_3675$class_306;)V method_1641 setKeyBindingCode + m ()Lnet/minecraft/class_4063; method_1632 getCloudOption + m (Lnet/minecraft/class_1664;)V method_1631 switchModelPartEnabled + m ()Ljava/util/Set; method_1633 getModelParts + m (Lnet/minecraft/class_3419;)F method_1630 getSoundLevel + m (Lnet/minecraft/class_1664;Z)V method_1635 setModelPartEnabled + m ()V method_1636 loadOptions + m (Lnet/minecraft/class_2487;Ljava/lang/String;)V method_24230 func_230004_a_ + m ()Z method_23486 func_228047_g_ + m ()Lnet/minecraft/class_5498; method_31044 getPointOfView + m (I)I method_19344 getChatBackgroundColor + m ()V method_1640 saveOptions + m (Lnet/minecraft/class_3419;F)V method_1624 setSoundLevel + m ()Z method_1639 isUsingNativeTransport + m ()Z method_23487 func_228048_h_ + m (F)F method_19343 getTextBackgroundOpacity + m (Lnet/minecraft/class_5498;)V method_31043 setPointOfView + m ()V method_1643 sendSettingsToServer + m (Lnet/minecraft/class_3283;)V method_1627 fillResourcePackList + m (F)I method_19345 getTextBackgroundColor + f Z field_1911 chatLinks + f Lnet/minecraft/class_4065; field_1896 narrator + f Z field_1819 forceUnicodeFont + f Z field_21840 skipMultiplayerWarning + f Lnet/minecraft/class_304; field_1886 keyBindAttack + f D field_1820 chatOpacity + f Z field_25623 syncChunkWrites + f Lnet/minecraft/class_304; field_1845 keyBindCommand + f Lnet/minecraft/class_1267; field_1851 difficulty + f Ljava/io/File; field_1897 optionsFile + f I field_1856 mipmapLevels + f I field_1878 biomeBlendRadius + f Z field_1910 reducedDebugInfo + f Lnet/minecraft/class_4060; field_1841 ambientOcclusionStatus + f [Lnet/minecraft/class_304; field_1852 keyBindsHotbar + f Lnet/minecraft/class_304; field_1894 keyBindForward + f Z field_18725 accessibilityTextBackground + f D field_1826 fov + f Lnet/minecraft/class_310; field_1863 mc + f I field_1901 glDebugVerbosity + f Lnet/minecraft/class_304; field_1836 keyBindFullscreen + f D field_1908 chatScale + f Ljava/lang/String; field_1864 lastServer + f F field_24214 entityDistanceScaling + f D field_23933 chatDelay + f I field_1868 guiScale + f Lnet/minecraft/class_304; field_1903 keyBindJump + f Lcom/google/common/base/Splitter; field_1853 KEY_VALUE_SPLITTER + f Lnet/minecraft/class_304; field_1831 keyBindSwapHands + f Ljava/util/List; field_1846 incompatibleResourcePacks + f Z field_1880 showDebugProfilerChart + f Z field_1817 chatLinksPrompt + f [Lnet/minecraft/class_304; field_1839 keyBindings + f Lnet/minecraft/class_304; field_1874 keyBindLoadToolbar + f D field_23932 chatLineSpacing + f Lnet/minecraft/class_1306; field_1829 mainHand + f Lnet/minecraft/class_304; field_1871 keyBindPickBlock + f Lorg/apache/logging/log4j/Logger; field_1834 LOGGER + f Lnet/minecraft/class_5365; field_25444 graphicFanciness + f Lnet/minecraft/class_304; field_1835 keyBindScreenshot + f Lnet/minecraft/class_4063; field_1814 cloudOption + f Z field_1865 invertMouse + f Z field_1847 snooper + f D field_1889 mouseWheelSensitivity + f Ljava/util/Set; field_1892 setModelParts + f I field_1872 overrideWidth + f Z field_1854 touchscreen + f Lnet/minecraft/class_304; field_1906 keyBindSpectatorOutlines + f F field_26675 screenEffectScale + f Z field_1815 hideServerAddress + f D field_1915 chatWidth + f Lnet/minecraft/class_304; field_1913 keyBindLeft + f Lnet/minecraft/class_5498; field_26677 pointOfView + f Lnet/minecraft/class_304; field_1832 keyBindSneak + f Lcom/google/gson/Gson; field_1823 GSON + f I field_1909 framerateLimit + f Z field_1893 showLagometer + f Z field_1848 autoJump + f Lnet/minecraft/class_304; field_1869 keyBindDrop + f Lnet/minecraft/class_304; field_1890 keyBindChat + f Z field_1884 vsync + f Z field_19244 discreteMouseScroll + f D field_18726 accessibilityTextBackgroundOpacity + f Lnet/minecraft/class_304; field_1824 keyBindTogglePerspective + f Lnet/minecraft/class_304; field_1844 keyBindAdvancements + f Z field_1876 useNativeTransport + f Z field_1842 hideGUI + f D field_1843 mouseSensitivity + f Z field_1827 advancedItemTooltips + f Lnet/minecraft/class_304; field_1881 keyBindBack + f I field_1885 overrideHeight + f Z field_1857 fullscreen + f D field_1825 chatHeightUnfocused + f Z field_21332 toggleCrouch + f Z field_1873 autoSuggestCommands + f F field_26676 fovScaleEffect + f Lnet/minecraft/class_1659; field_1877 chatVisibility + f Lnet/minecraft/class_304; field_1867 keyBindSprint + f Ljava/lang/String; field_1883 language + f Lnet/minecraft/class_304; field_1904 keyBindUseItem + f Z field_1900 chatColor + f Lnet/minecraft/class_4066; field_1882 particles + f Z field_1888 entityShadows + f Z field_21333 toggleSprint + f Lnet/minecraft/class_1157; field_1875 tutorialStep + f Lnet/minecraft/class_4061; field_1895 attackIndicator + f Lnet/minecraft/class_304; field_1907 keyBindPlayerList + f Ljava/lang/String; field_1828 fullscreenResolution + f Lnet/minecraft/class_304; field_1816 keyBindSmoothCamera + f Z field_1830 realmsNotifications + f Z field_1818 showSubtitles + f Ljava/util/List; field_1887 resourcePacks + f Z field_1891 viewBobbing + f D field_1838 chatHeightFocused + f I field_1870 renderDistanceChunks + f Z field_20308 rawMouseInput + f Lcom/google/gson/reflect/TypeToken; field_1859 TYPE_LIST_STRING + f Ljava/util/Map; field_1916 soundLevels + f Z field_1914 smoothCamera + f Lnet/minecraft/class_304; field_1849 keyBindRight + f Z field_1837 pauseOnLostFocus + f Lnet/minecraft/class_304; field_1879 keyBindSaveToolbar + f Z field_1866 showDebugInfo + f Lnet/minecraft/class_304; field_1822 keyBindInventory + f Z field_1905 heldItemTooltips + f D field_1840 gamma +c net/minecraft/class_315$1 net/minecraft/client/GameSettings$1 +c net/minecraft/class_315$2 net/minecraft/client/GameSettings$2 + f [I field_1967 field_216838_a +c net/minecraft/class_314 net/minecraft/client/util/RecipeBookCategories + m ()[Lnet/minecraft/class_314; values values + m ()Ljava/util/List; method_1623 getIcons + m (Lnet/minecraft/class_5421;)Ljava/util/List; method_30285 func_243236_a + m (Ljava/lang/String;)Lnet/minecraft/class_314; valueOf valueOf + f Lnet/minecraft/class_314; field_25625 UNKNOWN + f Lnet/minecraft/class_314; field_1809 CRAFTING_SEARCH + f Lnet/minecraft/class_314; field_1803 CRAFTING_REDSTONE + f Lnet/minecraft/class_314; field_1806 CRAFTING_BUILDING_BLOCKS + f Lnet/minecraft/class_314; field_1813 CRAFTING_EQUIPMENT + f [Lnet/minecraft/class_314; field_1805 $VALUES + f Lnet/minecraft/class_314; field_1810 CRAFTING_MISC + f Lnet/minecraft/class_314; field_1808 FURNACE_FOOD + f Lnet/minecraft/class_314; field_1804 FURNACE_SEARCH + f Ljava/util/List; field_25779 field_243231_s + f Lnet/minecraft/class_314; field_1811 FURNACE_BLOCKS + f Ljava/util/List; field_25780 field_243232_t + f Lnet/minecraft/class_314; field_1812 FURNACE_MISC + f Lnet/minecraft/class_314; field_17111 BLAST_FURNACE_BLOCKS + f Lnet/minecraft/class_314; field_17110 BLAST_FURNACE_SEARCH + f Lnet/minecraft/class_314; field_17112 BLAST_FURNACE_MISC + f Ljava/util/List; field_1807 icons + f Lnet/minecraft/class_314; field_17113 SMOKER_SEARCH + f Lnet/minecraft/class_314; field_17764 STONECUTTER + f Lnet/minecraft/class_314; field_17114 SMOKER_FOOD + f Ljava/util/List; field_25782 field_243234_v + f Lnet/minecraft/class_314; field_25624 SMITHING + f Ljava/util/List; field_25781 field_243233_u + f Ljava/util/Map; field_25783 field_243235_w + f Lnet/minecraft/class_314; field_17765 CAMPFIRE +c net/minecraft/class_314$1 net/minecraft/client/util/RecipeBookCategories$1 + f [I field_25784 field_243237_a +c net/minecraft/class_4067 net/minecraft/client/settings/SliderPercentageOption + m (Lnet/minecraft/class_315;)D method_18613 get + m (F)V method_18612 setMaxValue + m ()D method_18615 getMinValue + m (D)D method_18611 normalizeValue + m ()D method_18617 getMaxValue + m (D)D method_18616 denormalizeValue + m (Lnet/minecraft/class_315;D)V method_18614 set + m (D)D method_18618 snapToStepClamp + m (Lnet/minecraft/class_315;)Lnet/minecraft/class_2561; method_18619 func_238334_c_ + f F field_18204 stepSize + f D field_18205 minValue + f Ljava/util/function/BiFunction; field_18209 getDisplayStringFunc + f D field_18206 maxValue + f Ljava/util/function/BiConsumer; field_18208 setter + f Ljava/util/function/Function; field_18207 getter +c net/minecraft/class_3801 net/minecraft/client/ClientGameSession + m ()Ljava/util/UUID; getSessionId getSessionId + m ()Ljava/lang/String; getGameMode getGameMode + m ()I getPlayerCount getPlayerCount + m ()Z isRemoteServer isRemoteServer + m ()Ljava/lang/String; getDifficulty getDifficulty + f Ljava/lang/String; field_16763 difficulty + f Ljava/util/UUID; field_16767 sessionId + f Z field_16766 remoteServer + f Ljava/lang/String; field_16764 gameMode + f I field_16765 playerCount +c net/minecraft/class_318 net/minecraft/util/ScreenShotHelper + m (Ljava/io/File;)Ljava/io/File; method_1660 getTimestampedPNGFileForDirectory + m (IILnet/minecraft/class_276;)Lnet/minecraft/class_1011; method_1663 createScreenshot + m (Ljava/io/File;Ljava/lang/String;IILnet/minecraft/class_276;Ljava/util/function/Consumer;)V method_1662 saveScreenshotRaw + m (Lnet/minecraft/class_1011;Ljava/io/File;Ljava/util/function/Consumer;)V method_1661 func_228049_a_ + m (Ljava/io/File;Ljava/lang/String;IILnet/minecraft/class_276;Ljava/util/function/Consumer;)V method_22691 func_228052_c_ + m (Ljava/io/File;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_1664 func_238335_a_ + m (Ljava/io/File;IILnet/minecraft/class_276;Ljava/util/function/Consumer;)V method_1659 saveScreenshot + m (Ljava/io/File;Ljava/lang/String;IILnet/minecraft/class_276;Ljava/util/function/Consumer;)V method_22690 saveScreenshot + f Ljava/text/DateFormat; field_1973 DATE_FORMAT + f Lorg/apache/logging/log4j/Logger; field_1974 LOGGER +c net/minecraft/class_317 net/minecraft/util/Timer + m (J)I method_1658 getPartialTicks + f J field_1971 lastSyncSysClock + f F field_1968 tickLength + f F field_1969 elapsedPartialTicks + f F field_1970 renderPartialTicks +c net/minecraft/class_5225 net/minecraft/util/text/CharacterManager + m (Lnet/minecraft/class_5481;I)Lnet/minecraft/class_2583; method_30876 func_243239_a + m (Lorg/apache/commons/lang3/mutable/MutableFloat;ILnet/minecraft/class_2583;I)Z method_30879 func_243243_a + m (Lorg/apache/commons/lang3/mutable/MutableFloat;ILnet/minecraft/class_2583;I)Z method_27492 func_238359_a_ + m (Lorg/apache/commons/lang3/mutable/MutableFloat;ILnet/minecraft/class_2583;I)Z method_27496 func_238363_b_ + m (Lnet/minecraft/class_5348;ILnet/minecraft/class_2583;Ljava/util/function/BiConsumer;)V method_29971 func_243242_a + m (Ljava/lang/String;ILnet/minecraft/class_2583;)Ljava/lang/String; method_27494 func_238361_b_ + m (Ljava/lang/String;ILnet/minecraft/class_2583;)Ljava/lang/String; method_27497 func_238364_c_ + m (Ljava/lang/String;ILnet/minecraft/class_2583;ZLnet/minecraft/class_5225$class_5229;)V method_27485 func_238353_a_ + m (Lnet/minecraft/class_5225$class_5230;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_27480 func_238348_a_ + m (Ljava/lang/String;ILnet/minecraft/class_2583;)I method_27484 func_238352_a_ + m (Ljava/lang/String;)F method_27482 func_238350_a_ + m (Ljava/lang/String;ILnet/minecraft/class_2583;)Ljava/util/List; method_27498 func_238365_g_ + m (Lnet/minecraft/class_5348;ILnet/minecraft/class_2583;)Lnet/minecraft/class_5348; method_27490 func_238358_a_ + m (Ljava/util/List;Ljava/lang/String;Lnet/minecraft/class_2583;II)V method_27486 func_238354_a_ + m (Lnet/minecraft/class_5481;)F method_30875 func_243238_a + m (Lnet/minecraft/class_5348;)F method_27488 func_238356_a_ + m (Lorg/apache/commons/lang3/mutable/MutableFloat;ILorg/apache/commons/lang3/mutable/MutableInt;ILnet/minecraft/class_2583;I)Z method_27493 func_238360_a + m (Ljava/lang/String;IIZ)I method_27483 func_238351_a_ + m (Lnet/minecraft/class_5225$class_5230;Lorg/apache/commons/lang3/mutable/MutableObject;ILnet/minecraft/class_2583;I)Z method_30877 func_243240_a + m (Lnet/minecraft/class_5348;I)Lnet/minecraft/class_2583; method_27489 func_238357_a_ + m (Ljava/util/List;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_27487 func_238355_a_ + m (Lnet/minecraft/class_5225;)Lnet/minecraft/class_5225$class_5231; method_27481 func_238349_a_ + m (Lnet/minecraft/class_5348;ILnet/minecraft/class_2583;)Ljava/util/List; method_27495 func_238362_b_ + m (Ljava/util/List;Lnet/minecraft/class_5348;Ljava/lang/Boolean;)V method_30878 func_243241_a + f Lnet/minecraft/class_5225$class_5231; field_24216 field_238347_a_ +c net/minecraft/class_5225$class_5345 net/minecraft/util/text/CharacterManager$StyleOverridingTextComponent + m (Lnet/minecraft/class_5225$class_5345;)Ljava/lang/String; method_29340 func_238393_a_ + m (Lnet/minecraft/class_5225$class_5345;)Lnet/minecraft/class_2583; method_29341 func_238394_b_ + f Ljava/lang/String; field_25261 field_238391_a_ + f Lnet/minecraft/class_2583; field_25262 field_238392_d_ +c net/minecraft/class_5225$class_5227 net/minecraft/util/text/CharacterManager$MultilineProcessor + m ()Lnet/minecraft/class_2583; method_27508 func_238389_b_ + m (ILnet/minecraft/class_2583;)Z method_27507 func_238388_a_ + m ()Z method_27509 func_238390_c_ + m ()I method_27505 func_238386_a_ + m (I)V method_27506 func_238387_a_ + f I field_24231 field_238385_j_ + f Z field_24226 field_238380_e_ + f Lnet/minecraft/class_2583; field_24225 field_238379_d_ + f F field_24223 field_238377_b_ + f Lnet/minecraft/class_2583; field_24229 field_238383_h_ + f I field_24224 field_238378_c_ + f F field_24227 field_238381_f_ + f I field_24228 field_238382_g_ + f Lnet/minecraft/class_5225; field_24222 field_238376_a_ + f I field_24230 field_238384_i_ +c net/minecraft/class_5225$class_5226 net/minecraft/util/text/CharacterManager$SubstyledText + m ()Lnet/minecraft/class_5348; method_27499 func_238371_a_ + m (I)C method_27500 func_238372_a_ + m (Lnet/minecraft/class_5225$class_5345;)Ljava/lang/String; method_27504 func_238375_a_ + m (IILnet/minecraft/class_2583;)Lnet/minecraft/class_5348; method_27501 func_238373_a_ + m (Lnet/minecraft/class_5225$class_5226;)Ljava/util/List; method_27503 func_238374_a_ + f Ljava/util/List; field_24220 field_238369_a_ + f Ljava/lang/String; field_24221 field_238370_b_ +c net/minecraft/class_5225$class_5231 net/minecraft/util/text/CharacterManager$ICharWidthProvider + m (ILnet/minecraft/class_2583;)F getWidth getWidth +c net/minecraft/class_5225$class_5230 net/minecraft/util/text/CharacterManager$StringWidthProcessor + m ()V method_27514 func_238399_b_ + m ()I method_27513 func_238398_a_ + f F field_24235 field_238396_b_ + f Lnet/minecraft/class_5225; field_24234 field_238395_a_ + f I field_24236 field_238397_c_ +c net/minecraft/class_5225$class_5229 net/minecraft/util/text/CharacterManager$ISliceAcceptor + m (Lnet/minecraft/class_2583;II)V accept accept +c net/minecraft/class_5225$1 net/minecraft/util/text/CharacterManager$1 + f Lnet/minecraft/class_5222; field_24219 field_238368_c_ + f Lnet/minecraft/class_5225; field_24218 field_238367_b_ + f Lnet/minecraft/class_5225$class_5230; field_24217 field_238366_a_ +c net/minecraft/class_320 net/minecraft/util/Session + m ()Ljava/lang/String; method_1673 getPlayerID + m ()Ljava/lang/String; method_1676 getUsername + m ()Ljava/lang/String; method_1674 getToken + m ()Lcom/mojang/authlib/GameProfile; method_1677 getProfile + m ()Ljava/lang/String; method_1675 getSessionID + f Lnet/minecraft/class_320$class_321; field_1984 sessionType + f Ljava/lang/String; field_1982 username + f Ljava/lang/String; field_1985 playerID + f Ljava/lang/String; field_1983 token +c net/minecraft/class_320$class_321 net/minecraft/util/Session$Type + m ()[Lnet/minecraft/class_320$class_321; values values + m (Ljava/lang/String;)Lnet/minecraft/class_320$class_321; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_320$class_321; method_1679 setSessionType + m (Lnet/minecraft/class_320$class_321;)Ljava/lang/String; method_1678 func_199876_a + f Ljava/util/Map; field_1989 SESSION_TYPES + f Lnet/minecraft/class_320$class_321; field_1988 MOJANG + f [Lnet/minecraft/class_320$class_321; field_1987 $VALUES + f Ljava/lang/String; field_1986 sessionType + f Lnet/minecraft/class_320$class_321; field_1990 LEGACY +c net/minecraft/class_4666 net/minecraft/client/settings/ToggleableKeyBinding + f Ljava/util/function/BooleanSupplier; field_21334 getterToggle +c net/minecraft/class_324 net/minecraft/client/renderer/color/BlockColors + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1688 func_228059_f_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1694 func_228060_g_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1692 func_228061_h_ + m (Lnet/minecraft/class_2769;[Lnet/minecraft/class_2248;)V method_21593 addColorState + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1687 func_228062_i_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1695 func_228063_j_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1693 func_228064_k_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1697 getColor + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1686 func_228065_l_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1684 func_228055_b_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)I method_1691 getColorOrMaterialColor + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1696 func_228056_c_ + m ()Lnet/minecraft/class_324; method_1689 init + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1698 func_228057_d_ + m (Ljava/util/Set;[Lnet/minecraft/class_2248;)V method_21594 addColorStates + m (Lnet/minecraft/class_322;[Lnet/minecraft/class_2248;)V method_1690 register + m (Lnet/minecraft/class_2248;)Ljava/util/Set; method_21592 getColorProperties + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1685 func_228058_e_ + f Lnet/minecraft/class_2361; field_1995 colors + f Ljava/util/Map; field_20271 colorStates +c net/minecraft/class_322 net/minecraft/client/renderer/color/IBlockColor + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I getColor getColor +c net/minecraft/class_4700 net/minecraft/client/renderer/color/ColorCache + m ()V method_23768 invalidateAll + m (II)[I method_23772 getChunkCache + m (Lnet/minecraft/class_2338;Ljava/util/function/IntSupplier;)I method_23770 getColor + m ()Lnet/minecraft/class_4700$class_4701; method_23771 func_228072_b_ + m (II)V method_23769 invalidateChunk + f Ljava/util/concurrent/locks/ReentrantReadWriteLock; field_21521 lock + f Ljava/lang/ThreadLocal; field_21519 threadCacheEntry + f Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; field_21520 cache +c net/minecraft/class_4700$class_4701 net/minecraft/client/renderer/color/ColorCache$Entry + f [I field_21524 colorCache + f I field_21522 chunkX + f I field_21523 chunkZ +c net/minecraft/class_4700$1 net/minecraft/client/renderer/color/ColorCache$1 +c net/minecraft/class_325 net/minecraft/client/renderer/color/ItemColors + m (Lnet/minecraft/class_1799;I)I method_1703 func_210242_c + m (Lnet/minecraft/class_324;Lnet/minecraft/class_1799;I)I method_1702 func_210235_a + m (Lnet/minecraft/class_1799;I)I method_1707 func_210239_g + m (Lnet/minecraft/class_1826;Lnet/minecraft/class_1799;I)I method_1699 func_198141_a + m (Lnet/minecraft/class_1799;I)I method_1709 func_210237_b + m (Lnet/minecraft/class_1799;I)I method_1701 func_210236_f + m (Lnet/minecraft/class_326;[Lnet/minecraft/class_1935;)V method_1708 register + m (Lnet/minecraft/class_324;)Lnet/minecraft/class_325; method_1706 init + m (Lnet/minecraft/class_1799;I)I method_1704 getColor + m (Lnet/minecraft/class_1799;I)I method_1705 func_210238_d + m (Lnet/minecraft/class_1799;I)I method_1700 func_210241_e + f Lnet/minecraft/class_2361; field_1996 colors +c net/minecraft/class_326 net/minecraft/client/renderer/color/IItemColor + m (Lnet/minecraft/class_1799;I)I getColor getColor +c net/minecraft/class_327 net/minecraft/client/gui/FontRenderer + m (Lnet/minecraft/class_5481;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)F method_27530 func_238426_c_ + m (Lnet/minecraft/class_5481;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)I method_1723 func_238424_b_ + m (Ljava/lang/String;FFILnet/minecraft/class_1159;ZZ)I method_27520 renderString + m (Lnet/minecraft/class_5481;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)I method_22942 func_238416_a_ + m (Lnet/minecraft/class_5348;)I method_27525 getStringPropertyWidth + m (ILnet/minecraft/class_2583;)F method_27516 func_238404_a_ + m (Lnet/minecraft/class_5481;)I method_30880 func_243245_a + m (I)I method_27515 fixAlpha + m (Lnet/minecraft/class_5348;I)Lnet/minecraft/class_5348; method_1714 func_238417_a_ + m (Ljava/lang/String;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)F method_1724 renderStringAtPos + m (Ljava/lang/String;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZIIZ)I method_27522 func_238411_a_ + m (Ljava/lang/String;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)I method_27521 renderString + m (Ljava/lang/String;IZ)Ljava/lang/String; method_27524 func_238413_a_ + m (Lnet/minecraft/class_5348;I)Ljava/util/List; method_1728 trimStringToWidth + m ()Z method_1726 getBidiFlag + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;FFI)I method_30881 func_243246_a + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_5481;FFI)I method_27517 func_238407_a_ + m (Ljava/lang/String;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZIIZ)I method_27529 func_238423_b_ + m (Ljava/lang/String;)I method_1727 getStringWidth + m (Lnet/minecraft/class_327;Lnet/minecraft/class_382;ZZFFFLnet/minecraft/class_1159;Lnet/minecraft/class_4588;FFFFI)V method_27518 func_238408_a_ + m (Lnet/minecraft/class_327;Lnet/minecraft/class_2960;)Lnet/minecraft/class_377; method_27519 func_238409_a_ + m (Lnet/minecraft/class_4587;Ljava/lang/String;FFIZ)I method_29342 func_238406_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;FFI)I method_30883 func_243248_b + m (Ljava/lang/String;I)Ljava/lang/String; method_27523 func_238412_a_ + m (Lnet/minecraft/class_4587;Ljava/lang/String;FFI)I method_1729 drawString + m ()Lnet/minecraft/class_5225; method_27527 getCharacterManager + m (Lnet/minecraft/class_4587;Ljava/lang/String;FFI)I method_1720 drawStringWithShadow + m (Lnet/minecraft/class_5481;FFILnet/minecraft/class_1159;Z)I method_22941 func_238415_a_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_377; method_27526 getFont + m (Lnet/minecraft/class_382;ZZFFFLnet/minecraft/class_1159;Lnet/minecraft/class_4588;FFFFI)V method_1710 drawGlyph + m (Lnet/minecraft/class_5348;IIII)V method_1712 func_238418_a_ + m (Lnet/minecraft/class_2561;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)I method_30882 func_243247_a + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_5481;FFI)I method_27528 func_238422_b_ + m (Ljava/lang/String;I)I method_1713 getWordWrappedHeight + m (Ljava/lang/String;)Ljava/lang/String; method_1721 bidiReorder + f Lnet/minecraft/class_1160; field_24237 FONT_OFFSET + f I field_2000 FONT_HEIGHT + f Ljava/util/function/Function; field_1997 font + f Ljava/util/Random; field_2001 random + f Lnet/minecraft/class_5225; field_24238 characterManager +c net/minecraft/class_327$class_5232 net/minecraft/client/gui/FontRenderer$CharacterRenderer + m (IF)F method_27531 func_238441_a_ + m (Lnet/minecraft/class_382$class_328;)V method_27532 func_238442_a_ + f Z field_24241 field_238429_c_ + f Lnet/minecraft/class_1159; field_24247 field_238435_i_ + f F field_24246 field_238434_h_ + f Lnet/minecraft/class_327; field_24240 field_238428_b_ + f F field_24250 field_238438_l_ + f I field_24249 field_238437_k_ + f Lnet/minecraft/class_4597; field_24239 field_238427_a_ + f F field_24242 field_238430_d_ + f F field_24251 field_238439_m_ + f Ljava/util/List; field_24252 field_238440_n_ + f F field_24245 field_238433_g_ + f F field_24243 field_238431_e_ + f Z field_24248 field_238436_j_ + f F field_24244 field_238432_f_ +c net/minecraft/class_332 net/minecraft/client/gui/AbstractGui + m (Lnet/minecraft/class_4587;IIIIII)V method_25302 blit + m (Lnet/minecraft/class_4587;IIIIFFIIII)V method_25293 blit + m ()I method_25305 getBlitOffset + m (Lnet/minecraft/class_4587;IIIIII)V method_25296 fillGradient + m (Lnet/minecraft/class_4587;IIII)V method_25301 vLine + m (Lnet/minecraft/class_4587;IIII)V method_25292 hLine + m (Lnet/minecraft/class_4587;IIIII)V method_25294 fill + m (Lnet/minecraft/class_4587;IIFFIIII)V method_25290 blit + m (IILjava/util/function/BiConsumer;)V method_29343 blitBlackOutline + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_327;Ljava/lang/String;III)V method_25300 drawCenteredString + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_327;Ljava/lang/String;III)V method_25303 drawString + m (Lnet/minecraft/class_4587;IIIIIIIFFII)V method_25297 innerBlit + m (Lnet/minecraft/class_1159;IIIII)V method_25299 fill + m (I)V method_25304 setBlitOffset + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_327;Lnet/minecraft/class_2561;III)V method_27535 drawString + m (Lnet/minecraft/class_4587;IIIFFIIII)V method_25291 blit + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_327;Lnet/minecraft/class_2561;III)V method_27534 drawCenteredString + m (Lnet/minecraft/class_1159;Lnet/minecraft/class_287;IIIIIII)V method_27533 fillGradient + m (Lnet/minecraft/class_4587;IIIIILnet/minecraft/class_1058;)V method_25298 blit + m (Lnet/minecraft/class_1159;IIIIIFFFF)V method_25295 innerBlit + f Lnet/minecraft/class_2960; field_22737 GUI_ICONS_LOCATION + f Lnet/minecraft/class_2960; field_22736 STATS_ICON_LOCATION + f Lnet/minecraft/class_2960; field_22735 BACKGROUND_LOCATION + f I field_22734 blitOffset +c net/minecraft/class_329 net/minecraft/client/gui/IngameGui + m (Lnet/minecraft/class_2561;)V method_1732 func_238451_a_ + m ()Lnet/minecraft/class_365; method_1739 getSpectatorGui + m (Lnet/minecraft/class_4587;I)V method_1752 renderHorseJumpBar + m (Lnet/minecraft/class_1297;)V method_1731 updateVignetteBrightness + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_266;)V method_1757 func_238447_a_ + m ()V method_1761 renderPumpkinOverlay + m (Lnet/minecraft/class_239;)Z method_17534 isTargetNamedMenuProvider + m (F)V method_1746 renderPortal + m ()Lnet/minecraft/class_355; method_1750 getTabList + m ()Lnet/minecraft/class_1309; method_1734 getMountEntity + m ()Lnet/minecraft/class_1657; method_1737 getRenderViewPlayer + m ()V method_1742 setDefaultTitlesTimes + m (Lnet/minecraft/class_4587;)V method_1741 func_238458_f_ + m (IIFLnet/minecraft/class_1657;Lnet/minecraft/class_1799;)V method_1762 renderHotbarItem + m (Lnet/minecraft/class_1309;)I method_1744 getRenderMountHealth + m ()Lnet/minecraft/class_337; method_1740 getBossOverlay + m (Lnet/minecraft/class_4587;)V method_1736 func_238456_d_ + m (Lnet/minecraft/class_4587;)V method_1749 func_238453_b_ + m (Lnet/minecraft/class_2556;Lnet/minecraft/class_2561;Ljava/util/UUID;)V method_1755 func_238450_a_ + m ()V method_1745 reset + m (Lnet/minecraft/class_2561;Z)V method_1758 setOverlayMessage + m (Lnet/minecraft/class_4587;F)V method_1753 renderIngameGui + m ()V method_1747 resetPlayersOverlayFooterHeader + m (Lnet/minecraft/class_4587;I)V method_1754 func_238454_b_ + m (Lnet/minecraft/class_1297;)V method_1735 renderVignette + m (I)I method_1733 getVisibleMountHealthRows + m (FLnet/minecraft/class_4587;)V method_1759 renderHotbar + m ()Lnet/minecraft/class_327; method_1756 getFontRenderer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_327;III)V method_19346 func_238448_a_ + m ()Lnet/minecraft/class_338; method_1743 getChatGUI + m ()V method_1748 tick + m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;III)V method_1763 func_238452_a_ + m ()I method_1738 getTicks + m (Lnet/minecraft/class_4587;)V method_1760 func_238457_e_ + m (Lnet/minecraft/class_4587;)V method_1766 func_238455_c_ + m (Lnet/minecraft/class_1058;FLnet/minecraft/class_4587;II)V method_18620 func_238449_a_ + m (Lnet/minecraft/class_4587;)V method_1765 renderPotionIcons + m (Lnet/minecraft/class_267;)Z method_1751 func_212911_a + f Lnet/minecraft/class_2960; field_2028 WIDGETS_TEX_PATH + f J field_2012 lastSystemTime + f I field_2011 scaledWidth + f Lnet/minecraft/class_337; field_2030 overlayBoss + f F field_2013 prevVignetteBrightness + f Lnet/minecraft/class_2561; field_2016 displayedTitle + f Z field_2038 animateOverlayMessageColor + f Lnet/minecraft/class_359; field_2027 overlaySubtitle + f I field_2023 titlesTimer + f Lnet/minecraft/class_365; field_2025 spectatorGui + f I field_2017 titleDisplayTime + f Lnet/minecraft/class_2561; field_2018 overlayMessage + f I field_2014 playerHealth + f Lnet/minecraft/class_310; field_2035 mc + f J field_2032 healthUpdateCounter + f I field_2040 remainingHighlightTicks + f Lnet/minecraft/class_355; field_2015 overlayPlayerList + f Lnet/minecraft/class_2960; field_2019 PUMPKIN_BLUR_TEX_PATH + f Lnet/minecraft/class_2960; field_2020 VIGNETTE_TEX_PATH + f I field_2029 scaledHeight + f Lnet/minecraft/class_1799; field_2031 highlightingItemStack + f Ljava/util/Random; field_2034 rand + f Lnet/minecraft/class_340; field_2026 overlayDebug + f Lnet/minecraft/class_2561; field_2039 displayedSubTitle + f Lnet/minecraft/class_2561; field_26527 field_243249_e + f Lnet/minecraft/class_918; field_2024 itemRenderer + f I field_2042 ticks + f I field_2037 titleFadeIn + f Lnet/minecraft/class_338; field_2021 persistantChatGUI + f I field_2033 lastPlayerHealth + f I field_2041 overlayMessageTime + f Ljava/util/Map; field_2022 chatListeners + f I field_2036 titleFadeOut +c net/minecraft/class_334 net/minecraft/client/gui/chat/IChatListener + m (Lnet/minecraft/class_2556;Lnet/minecraft/class_2561;Ljava/util/UUID;)V method_1794 say +c net/minecraft/class_330 net/minecraft/client/gui/MapItemRenderer + m (Lnet/minecraft/class_330;)Lnet/minecraft/class_1060; method_1767 access$400 + m ()Lnet/minecraft/class_1921; method_1770 func_228087_b_ + m (Lnet/minecraft/class_330$class_331;)Lnet/minecraft/class_22; method_1772 getData + m ()V close close + m (Ljava/lang/String;)Lnet/minecraft/class_330$class_331; method_1768 getMapInstanceIfExists + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_22;ZI)V method_1773 renderMap + m ()V method_1771 clearLoadedMaps + m (Lnet/minecraft/class_22;)Lnet/minecraft/class_330$class_331; method_1774 getMapRendererInstance + m (Lnet/minecraft/class_22;)V method_1769 updateMapTexture + f Lnet/minecraft/class_1060; field_2043 textureManager + f Lnet/minecraft/class_2960; field_2044 TEXTURE_MAP_ICONS + f Ljava/util/Map; field_2045 loadedMaps + f Lnet/minecraft/class_1921; field_21688 field_228085_d_ +c net/minecraft/class_330$1 net/minecraft/client/gui/MapItemRenderer$1 +c net/minecraft/class_330$class_331 net/minecraft/client/gui/MapItemRenderer$Instance + m (Lnet/minecraft/class_330$class_331;)V method_1778 access$000 + m (Lnet/minecraft/class_330$class_331;)Lnet/minecraft/class_22; method_1779 access$300 + m ()V method_1776 updateMapTexture + m ()V close close + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ZI)V method_1777 func_228089_a_ + m (Lnet/minecraft/class_330$class_331;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ZI)V method_1775 func_228090_a_ + f Lnet/minecraft/class_1043; field_2048 mapTexture + f Lnet/minecraft/class_330; field_2047 field_148244_a + f Lnet/minecraft/class_22; field_2046 mapData + f Lnet/minecraft/class_1921; field_21689 field_228088_d_ +c net/minecraft/class_336 net/minecraft/client/gui/chat/OverlayChatListener + f Lnet/minecraft/class_310; field_2057 mc +c net/minecraft/class_333 net/minecraft/client/gui/chat/NarratorChatListener + m ()V method_20371 close + m ()Z method_1791 isActive + m ()Lnet/minecraft/class_4065; method_20602 getNarratorStatus + m ()V method_1793 clear + m (Lnet/minecraft/class_4065;)V method_1792 announceMode + m (ZLjava/lang/String;)V method_18621 say + m (Ljava/lang/String;)V method_19788 say + f Lcom/mojang/text2speech/Narrator; field_2055 narrator + f Lorg/apache/logging/log4j/Logger; field_18210 LOGGER + f Lnet/minecraft/class_2561; field_18967 EMPTY + f Lnet/minecraft/class_333; field_2054 INSTANCE +c net/minecraft/class_335 net/minecraft/client/gui/chat/NormalChatListener + f Lnet/minecraft/class_310; field_2056 mc +c net/minecraft/class_4264 net/minecraft/client/gui/widget/button/AbstractButton + m ()V method_25306 onPress +c net/minecraft/class_350 net/minecraft/client/gui/widget/list/AbstractList + m (DDI)V method_25318 updateScrollingState + m ()D method_25341 getScrollAmount + m (IIII)V method_25323 updateSize + m ()Lnet/minecraft/class_350$class_351; method_25334 getSelected + m (Lnet/minecraft/class_4587;)V method_25325 renderBackground + m (ZI)V method_25315 setRenderHeader + m (Lnet/minecraft/class_4587;IIIIF)V method_25311 renderList + m ()V method_25339 clearEntries + m (I)I method_25319 getRowBottom + m (II)V method_25310 clickedHeader + m ()V method_30015 func_241574_n_ + m (Lnet/minecraft/class_350$class_351;)I method_25321 addEntry + m (D)V method_25307 setScrollAmount + m (Lnet/minecraft/class_350$class_351;)Z method_25330 removeEntry + m (I)Lnet/minecraft/class_350$class_351; method_25326 getEntry + m (Lnet/minecraft/class_4587;IILnet/minecraft/class_289;)V method_25312 renderHeader + m ()I method_25317 getMaxPosition + m (Lnet/minecraft/class_350$class_351;)V method_25324 centerScrollOn + m (I)V method_25309 scroll + m ()I method_25329 getScrollbarPosition + m (Lnet/minecraft/class_350$class_5403;)V method_25335 moveSelection + m (I)Lnet/minecraft/class_350$class_351; method_25338 remove + m (Lnet/minecraft/class_350$class_351;)Z method_30014 func_241573_g_ + m (I)V method_25333 setLeftPos + m ()I method_25340 getItemCount + m ()Lnet/minecraft/class_350$class_351; method_25336 getListener + m (Ljava/util/Collection;)V method_25314 replaceEntries + m ()I method_25342 getRowLeft + m (Lnet/minecraft/class_350$class_351;)V method_25313 setSelected + m (Z)V method_29344 setRenderSelection + m (Lnet/minecraft/class_350;Lnet/minecraft/class_350$class_351;)V method_29620 func_238479_a_ + m (Lnet/minecraft/class_350$class_351;)V method_29621 func_238480_f_ + m (DD)Lnet/minecraft/class_350$class_351; method_25308 getEntryAtPosition + m ()I method_25322 getRowWidth + m (Lnet/minecraft/class_350$class_351;)V method_25328 ensureVisible + m ()I method_25331 getMaxScroll + m (Lnet/minecraft/class_350$class_5403;Ljava/util/function/Predicate;)V method_30013 func_241572_a_ + m (I)I method_25337 getRowTop + m (I)Z method_25332 isSelectedItem + m (Lnet/minecraft/class_4587;II)V method_25320 renderDecorations + m ()Z method_25316 isFocused + f I field_22748 headerHeight + f Ljava/util/List; field_22739 children + f Lnet/minecraft/class_350$class_351; field_22751 selected + f Z field_22750 scrolling + f Z field_22746 renderSelection + f I field_22742 width + f Lnet/minecraft/class_310; field_22740 minecraft + f I field_19086 y1 + f I field_19088 x0 + f Z field_22744 centerListVertically + f Z field_22747 renderHeader + f I field_22743 height + f I field_22741 itemHeight + f I field_19085 y0 + f D field_22749 scrollAmount + f I field_19087 x1 +c net/minecraft/class_350$1 net/minecraft/client/gui/widget/list/AbstractList$1 +c net/minecraft/class_350$class_352 net/minecraft/client/gui/widget/list/AbstractList$SimpleArrayList + m (I)Ljava/lang/Object; remove remove + m (ILnet/minecraft/class_350$class_351;)V method_1910 add + m (ILjava/lang/Object;)V add add + m ()I size size + m (I)Ljava/lang/Object; get get + m (I)Lnet/minecraft/class_350$class_351; method_1912 get + m (I)Lnet/minecraft/class_350$class_351; method_1911 remove + m (ILnet/minecraft/class_350$class_351;)Lnet/minecraft/class_350$class_351; method_1909 set + m (ILjava/lang/Object;)Ljava/lang/Object; set set + f Ljava/util/List; field_2146 field_216871_b + f Lnet/minecraft/class_350; field_2145 field_216870_a +c net/minecraft/class_350$class_5403 net/minecraft/client/gui/widget/list/AbstractList$Ordering + m ()[Lnet/minecraft/class_350$class_5403; values values + m (Ljava/lang/String;)Lnet/minecraft/class_350$class_5403; valueOf valueOf + f [Lnet/minecraft/class_350$class_5403; field_25663 $VALUES + f Lnet/minecraft/class_350$class_5403; field_25661 UP + f Lnet/minecraft/class_350$class_5403; field_25662 DOWN +c net/minecraft/class_350$class_351 net/minecraft/client/gui/widget/list/AbstractList$AbstractListEntry + m (Lnet/minecraft/class_4587;IIIIIIIZF)V method_25343 render + m (Lnet/minecraft/class_350$class_351;Lnet/minecraft/class_350;)Lnet/minecraft/class_350; method_29622 func_238481_a_ + f Lnet/minecraft/class_350; field_22752 list +c net/minecraft/class_4892 net/minecraft/client/gui/widget/GameSettingsSlider + f Lnet/minecraft/class_315; field_22738 settings +c net/minecraft/class_339 net/minecraft/client/gui/widget/Widget + m ()I method_25364 getHeightRealms + m (DD)Z method_25361 clicked + m (I)V method_25362 queueNarration + m ()I method_25368 getWidth + m (Lnet/minecraft/class_1144;)V method_25354 playDownSound + m (DD)V method_25348 onClick + m (Lnet/minecraft/class_4587;IIF)V method_25359 renderButton + m ()V method_25366 narrate + m (DDDD)V method_25349 onDrag + m ()Lnet/minecraft/class_2561; method_25369 getMessage + m ()Z method_25367 isHovered + m (Lnet/minecraft/class_2561;)V method_25355 setMessage + m ()Z method_25370 isFocused + m (Z)I method_25356 getYImage + m (Lnet/minecraft/class_4587;II)V method_25352 renderToolTip + m (Z)V method_25365 setFocused + m ()Lnet/minecraft/class_5250; method_25360 getNarrationMessage + m (DD)V method_25357 onRelease + m (Z)V method_25363 onFocusedChanged + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_310;II)V method_25353 renderBg + m (F)V method_25350 setAlpha + m (I)Z method_25351 isValidClickButton + m (I)V method_25358 setWidth + f I field_22758 width + f Z field_22756 focused + f Z field_22755 wasHovered + f I field_22760 x + f I field_22759 height + f I field_22761 y + f F field_22765 alpha + f Z field_22763 active + f Z field_22762 isHovered + f Lnet/minecraft/class_2561; field_22754 message + f J field_22766 nextNarration + f Z field_22764 visible + f Lnet/minecraft/class_2960; field_22757 WIDGETS_LOCATION +c net/minecraft/class_357 net/minecraft/client/gui/widget/AbstractSlider + m (D)V method_25347 setSliderValue + m (D)V method_25345 changeSliderValue + m ()V method_25346 func_230979_b_ + m ()V method_25344 func_230972_a_ + f D field_22753 sliderValue +c net/minecraft/class_4185 net/minecraft/client/gui/widget/button/Button + m (Lnet/minecraft/class_4185;Lnet/minecraft/class_4587;II)V method_29045 func_238488_a_ + f Lnet/minecraft/class_4185$class_5316; field_25035 field_238486_s_ + f Lnet/minecraft/class_4185$class_5316; field_25036 onTooltip + f Lnet/minecraft/class_4185$class_4241; field_22767 onPress +c net/minecraft/class_4185$class_5316 net/minecraft/client/gui/widget/button/Button$ITooltip + m (Lnet/minecraft/class_4185;Lnet/minecraft/class_4587;II)V onTooltip onTooltip +c net/minecraft/class_4185$class_4241 net/minecraft/client/gui/widget/button/Button$IPressable + m (Lnet/minecraft/class_4185;)V onPress onPress +c net/minecraft/class_337 net/minecraft/client/gui/overlay/BossOverlayGui + m (Lnet/minecraft/class_4587;)V method_1796 func_238484_a_ + m (Lnet/minecraft/class_2629;)V method_1795 read + m ()Z method_1800 shouldCreateFog + m ()V method_1801 clearBossInfos + m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1259;)V method_1799 func_238485_a_ + m ()Z method_1797 shouldDarkenSky + m ()Z method_1798 shouldPlayEndBossMusic + f Lnet/minecraft/class_310; field_2058 client + f Ljava/util/Map; field_2060 mapBossInfos + f Lnet/minecraft/class_2960; field_2059 GUI_BARS_TEXTURES +c net/minecraft/class_4286 net/minecraft/client/gui/widget/button/CheckboxButton + m ()Z method_20372 isChecked + f Z field_24253 field_238499_c_ + f Z field_19230 checked + f Lnet/minecraft/class_2960; field_19231 TEXTURE +c net/minecraft/class_338 net/minecraft/client/gui/NewChatGui + m (D)V method_1802 addScrollPos + m (I)D method_19348 getLineBrightness + m (Lnet/minecraft/class_2561;I)V method_1804 printChatMessageWithOptionalDeletion + m (Z)V method_1808 clearChatMessages + m (ILnet/minecraft/class_303;)Z method_30884 func_243250_a + m (ILnet/minecraft/class_303;)Z method_30885 func_243251_b + m ()I method_1810 getChatHeight + m ()D method_1814 getScale + m ()I method_1811 getChatWidth + m (I)V method_1807 deleteChatLine + m ()V method_1820 resetScroll + m ()I method_1813 getLineCount + m (Lnet/minecraft/class_2561;IIZ)V method_1815 func_238493_a_ + m (DD)Lnet/minecraft/class_2583; method_1816 func_238494_b_ + m ()V method_1817 refreshChat + m ()J method_27148 func_238497_j_ + m (Ljava/lang/String;)V method_1803 addToSentMessages + m (DD)Z method_27146 func_238491_a_ + m ()Ljava/util/List; method_1809 getSentMessages + m (Lnet/minecraft/class_4587;I)V method_1805 func_238492_a_ + m (D)I method_1818 calculateChatboxHeight + m ()V method_27149 func_238498_k_ + m (Lnet/minecraft/class_2561;)V method_1812 printChatMessage + m ()Z method_1819 getChatOpen + m (D)I method_1806 calculateChatboxWidth + m (Lnet/minecraft/class_2561;)V method_27147 func_238495_b_ + m ()Z method_23677 func_238496_i_ + f Lorg/apache/logging/log4j/Logger; field_2065 LOGGER + f Lnet/minecraft/class_310; field_2062 mc + f I field_2066 scrollPos + f J field_23935 field_238490_l_ + f Z field_2067 isScrolled + f Ljava/util/Deque; field_23934 field_238489_i_ + f Ljava/util/List; field_2064 drawnChatLines + f Ljava/util/List; field_2061 chatLines + f Ljava/util/List; field_2063 sentMessages +c net/minecraft/class_341 net/minecraft/client/gui/RenderComponentsUtil + m (Ljava/lang/String;)Ljava/lang/String; method_1849 func_238504_a_ + m (Lnet/minecraft/class_5348;ILnet/minecraft/class_327;)Ljava/util/List; method_1850 func_238505_a_ + m (Lnet/minecraft/class_5222;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_27536 func_238503_a_ + m (Ljava/util/List;Lnet/minecraft/class_5348;Ljava/lang/Boolean;)V method_30886 func_243256_a + f Lnet/minecraft/class_5481; field_25263 field_238502_a_ +c net/minecraft/class_4717 net/minecraft/client/gui/CommandSuggestionHelper + m (DDI)Z method_23922 onClick + m (Lnet/minecraft/class_4717;)Lnet/minecraft/class_342; method_23938 func_228130_c_ + m (Ljava/lang/String;I)Lnet/minecraft/class_5481; method_23931 getParsedSuggestion + m (Lnet/minecraft/class_4717;)I method_23940 func_228132_d_ + m (Lcom/mojang/brigadier/ParseResults;Ljava/lang/String;I)Lnet/minecraft/class_5481; method_23925 getFinalSuggestion + m (Z)V method_23933 shouldAutoSuggest + m (Lnet/minecraft/class_4717;)I method_23935 func_228126_b_ + m (Lnet/minecraft/class_4717;)I method_23944 func_228136_h_ + m ()Ljava/lang/String; method_23958 getSuggestionMessage + m (Lnet/minecraft/class_4717;)Lnet/minecraft/class_437; method_23942 func_228134_f_ + m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_23932 func_228123_a_ + m (III)Z method_23924 onKeyPressed + m ()V method_23939 func_228131_d_ + m (Lnet/minecraft/class_4587;II)V method_23923 drawSuggestionList + m (Lnet/minecraft/class_4717;)Lnet/minecraft/class_327; method_23941 func_228133_e_ + m (Lcom/mojang/brigadier/exceptions/CommandSyntaxException;)Lnet/minecraft/class_5481; method_30505 parseException + m (Lnet/minecraft/class_4717;Lnet/minecraft/class_4717$class_464;)Lnet/minecraft/class_4717$class_464; method_23927 func_228118_a_ + m (Z)V method_23920 updateSuggestions + m (Lnet/minecraft/class_124;)V method_23929 applyFormattingToCommand + m (Lnet/minecraft/class_4717;)Z method_23926 func_228117_a_ + m (D)Z method_23921 onScroll + m (Lnet/minecraft/class_4717;)Lnet/minecraft/class_310; method_23943 func_228135_g_ + m (Ljava/lang/String;)I method_23930 getLastWhitespace + m (Lcom/mojang/brigadier/suggestion/Suggestions;)Ljava/util/List; method_30104 getSuggestions + m (Lnet/minecraft/class_4717;Z)Z method_23928 func_228119_a_ + m ()V method_23934 init + m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_23936 getMatchedSuggestionText + m ()V method_23937 recompileSuggestions + f Ljava/util/List; field_25887 COMMAND_COLOR_STYLES + f Z field_21601 commandsOnly + f Lnet/minecraft/class_437; field_21598 screen + f Z field_21605 isChat + f I field_21609 width + f Lnet/minecraft/class_2583; field_25885 EMPTY_ERROR_STYLE + f Lnet/minecraft/class_327; field_21600 font + f Ljava/util/List; field_21607 exceptionList + f Lnet/minecraft/class_342; field_21599 inputField + f Z field_21614 isApplyingSuggestion + f I field_21603 minAmountRendered + f Ljava/util/regex/Pattern; field_21596 WHITESPACE_PATTERN + f Lnet/minecraft/class_310; field_21597 mc + f Lnet/minecraft/class_4717$class_464; field_21612 suggestions + f I field_21608 x + f Z field_21602 hasCursor + f I field_21606 color + f Ljava/util/concurrent/CompletableFuture; field_21611 suggestionsFuture + f Z field_21613 autoSuggest + f Lcom/mojang/brigadier/ParseResults; field_21610 parseResults + f I field_21604 maxAmountRendered + f Lnet/minecraft/class_2583; field_25886 EMPTY_PASS_STYLE +c net/minecraft/class_4717$class_464 net/minecraft/client/gui/CommandSuggestionHelper$Suggestions + m (I)V method_2374 selectSuggestion + m (I)V method_2371 changeSelection + m (III)Z method_2377 onKeyPressed + m (III)Z method_2372 onClick + m (D)Z method_2370 onScroll + m (Lnet/minecraft/class_4587;II)V method_2373 drawSuggestions + m ()V method_2376 clearSuggestions + m ()V method_2375 applySuggestionToInput + m ()Ljava/lang/String; method_23960 getCurrentSuggestionMessage + m (Lnet/minecraft/class_4717$class_464;)Ljava/lang/String; method_23959 func_228151_a_ + f I field_2766 selectedIndex + f I field_2769 lowestDisplayedSuggestionIndex + f Z field_2765 changeSelectionOnNextTabInput + f Lnet/minecraft/class_241; field_2767 lastMousePosition + f Ljava/lang/String; field_2768 originalInputText + f Lnet/minecraft/class_4717; field_21615 field_228137_a_ + f I field_21630 lastObtainedSuggestionMessageIndex + f Ljava/util/List; field_25709 suggestions + f Lnet/minecraft/class_768; field_2771 suggestionRenderBox +c net/minecraft/class_4717$1 net/minecraft/client/gui/CommandSuggestionHelper$1 +c net/minecraft/class_340 net/minecraft/client/gui/overlay/DebugOverlayGui + m (Lnet/minecraft/class_1132;)Ljava/util/Optional; method_1841 func_212917_a_ + m ()Lnet/minecraft/class_3218; method_20603 func_238515_d_ + m (Ljava/util/Map$Entry;)Ljava/lang/String; method_1845 getPropertyString + m ()V method_1842 resetChunk + m ()Ljava/lang/String; method_27871 getServerChunkStats + m ()Lnet/minecraft/class_2818; method_1834 getServerChunk + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_3517;IIZ)V method_15870 func_238509_a_ + m ()Lnet/minecraft/class_2818; method_1836 getChunk + m (Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_2818; method_20541 func_222802_a_ + m (Ljava/util/EnumMap;)V method_20455 func_212918_a + m ()Ljava/util/List; method_1839 getDebugInfoRight + m (Lnet/minecraft/class_4587;)V method_1846 render + m ()Ljava/util/List; method_1835 getDebugInfoLeft + m (Lnet/minecraft/class_4587;)V method_1847 renderDebugInfoLeft + m (Lnet/minecraft/class_4587;)V method_1848 renderDebugInfoRight + m (Lit/unimi/dsi/fastutil/objects/Object2IntMap;Lnet/minecraft/class_1311;)Ljava/lang/String; method_27870 func_238511_a_ + m ()Lnet/minecraft/class_1937; method_1840 getWorld + m (J)J method_1838 bytesToMb + m (IIII)I method_1833 getFrameColor + m (Lnet/minecraft/class_3193$class_3724;)Lnet/minecraft/class_2818; method_20542 func_222801_a_ + m (Lnet/minecraft/class_2791;)Lnet/minecraft/class_2818; method_20540 func_222803_a_ + m (IIF)I method_1843 blendColors + f Lnet/minecraft/class_310; field_2079 mc + f Ljava/util/concurrent/CompletableFuture; field_2080 futureChunk + f Lnet/minecraft/class_2818; field_2084 chunk + f Lnet/minecraft/class_239; field_2083 rayTraceFluid + f Lnet/minecraft/class_239; field_2082 rayTraceBlock + f Ljava/util/Map; field_19274 HEIGHTMAP_NAMES + f Lnet/minecraft/class_327; field_2081 fontRenderer + f Lnet/minecraft/class_1923; field_2085 chunkPos +c net/minecraft/class_340$1 net/minecraft/client/gui/overlay/DebugOverlayGui$1 + f [I field_2086 field_178907_a +c net/minecraft/class_4265 net/minecraft/client/gui/widget/list/AbstractOptionList +c net/minecraft/class_4265$class_4266 net/minecraft/client/gui/widget/list/AbstractOptionList$Entry + f Lnet/minecraft/class_364; field_19077 field_214380_a + f Z field_19078 field_214381_b +c net/minecraft/class_344 net/minecraft/client/gui/widget/button/ImageButton + m (II)V method_1893 setPosition + f I field_2126 xTexStart + f I field_2125 yTexStart + f I field_19079 yDiffText + f I field_2124 textureWidth + f Lnet/minecraft/class_2960; field_2127 resourceLocation + f I field_19080 textureHeight +c net/minecraft/class_342 net/minecraft/client/gui/widget/TextFieldWidget + m (Z)V method_1858 setEnableBackgroundDrawing + m ()Ljava/lang/String; method_1882 getText + m (I)V method_1878 deleteFromCursor + m ()Ljava/lang/String; method_1866 getSelectedText + m ()Z method_20316 isEnabled + m (Z)V method_1856 setCanLoseFocus + m (I)I method_1889 func_195611_j + m (I)V method_1880 setMaxStringLength + m (IIZ)I method_1864 getNthWordFromPosWS + m (Ljava/lang/String;)V method_1887 setSuggestion + m (II)I method_1869 getNthWordFromPos + m (I)V method_1860 setDisabledTextColour + m (I)V method_1883 setCursorPosition + m ()I method_1861 getMaxStringLength + m (Ljava/util/function/Consumer;)V method_1863 setResponder + m (I)V method_16873 delete + m ()Z method_20315 canWrite + m (Ljava/lang/String;)V method_1852 setText + m (Ljava/util/function/BiFunction;)V method_1854 setTextFormatter + m ()I method_1859 getAdjustedWidth + m ()V method_1870 setCursorPositionZero + m (Z)V method_1876 setFocused2 + m ()Z method_1851 getEnableBackgroundDrawing + m ()Z method_1885 getVisible + m (Z)V method_1888 setEnabled + m (I)I method_1853 getNthWordFromCursor + m (Ljava/util/function/Predicate;)V method_1890 setValidator + m (Z)V method_1862 setVisible + m ()V method_1865 tick + m (I)V method_1877 deleteWords + m (Ljava/lang/String;)V method_1874 onTextChanged + m (I)V method_1868 setTextColor + m (Ljava/lang/String;)V method_1867 writeText + m (IIII)V method_1886 drawSelectionBox + m (I)V method_1855 moveCursorBy + m (Ljava/lang/String;Ljava/lang/Integer;)Lnet/minecraft/class_5481; method_1873 func_195610_a + m (I)V method_1875 clampCursorPosition + m (I)V method_16872 setX + m ()I method_1881 getCursorPosition + m (I)I method_27537 func_238516_r_ + m (I)V method_1884 setSelectionPos + m ()V method_1872 setCursorPositionEnd + f I field_2098 disabledColor + f Ljava/util/function/Predicate; field_2104 validator + f I field_2101 selectionEnd + f I field_2108 maxStringLength + f Z field_2094 isEnabled + f Z field_2095 enableBackgroundDrawing + f Ljava/lang/String; field_2106 suggestion + f Ljava/util/function/Consumer; field_2088 guiResponder + f I field_2103 lineScrollOffset + f Z field_17037 field_212956_h + f Ljava/lang/String; field_2092 text + f Z field_2096 canLoseFocus + f I field_2100 enabledColor + f I field_2107 cursorCounter + f Ljava/util/function/BiFunction; field_2099 textFormatter + f Lnet/minecraft/class_327; field_2105 fontRenderer + f I field_2102 cursorPosition +c net/minecraft/class_347 net/minecraft/client/gui/widget/button/LockIconButton + m (Z)V method_1895 setLocked + m ()Z method_1896 isLocked + f Z field_2131 locked +c net/minecraft/class_347$class_348 net/minecraft/client/gui/widget/button/LockIconButton$Icon + m ()I method_1897 getX + m (Ljava/lang/String;)Lnet/minecraft/class_347$class_348; valueOf valueOf + m ()I method_1898 getY + m ()[Lnet/minecraft/class_347$class_348; values values + f Lnet/minecraft/class_347$class_348; field_2132 UNLOCKED + f I field_2135 x + f Lnet/minecraft/class_347$class_348; field_2139 LOCKED_DISABLED + f Lnet/minecraft/class_347$class_348; field_2138 LOCKED_HOVER + f [Lnet/minecraft/class_347$class_348; field_2136 $VALUES + f I field_2134 y + f Lnet/minecraft/class_347$class_348; field_2137 LOCKED + f Lnet/minecraft/class_347$class_348; field_2140 UNLOCKED_DISABLED + f Lnet/minecraft/class_347$class_348; field_2133 UNLOCKED_HOVER +c net/minecraft/class_345 net/minecraft/client/gui/ClientBossInfo + m (Lnet/minecraft/class_2629;)V method_1894 updateFromPacket + f J field_2128 percentSetTime + f F field_2129 rawPercent +c net/minecraft/class_345$1 net/minecraft/client/gui/ClientBossInfo$1 + f [I field_2130 field_186733_a +c net/minecraft/class_4280 net/minecraft/client/gui/widget/list/ExtendedList + f Z field_22768 field_230698_a_ +c net/minecraft/class_4280$class_4281 net/minecraft/client/gui/widget/list/ExtendedList$AbstractListEntry +c net/minecraft/class_5489 net/minecraft/client/gui/IBidiRenderer + m (Lnet/minecraft/class_327;Lnet/minecraft/class_5348;II)Lnet/minecraft/class_5489; method_30891 func_243259_a + m (Lnet/minecraft/class_327;Lnet/minecraft/class_5481;)Lnet/minecraft/class_5489$class_5490; method_30897 func_243263_c + m ()I method_30887 func_241862_a + m (Lnet/minecraft/class_4587;IIII)I method_30896 func_241866_c + m (Lnet/minecraft/class_327;Lnet/minecraft/class_5481;)Lnet/minecraft/class_5489$class_5490; method_30894 func_243261_b + m (Lnet/minecraft/class_4587;IIII)I method_30889 func_241864_a + m (Lnet/minecraft/class_4587;IIII)I method_30893 func_241865_b + m (Lnet/minecraft/class_327;Ljava/util/List;)Lnet/minecraft/class_5489; method_30895 func_243262_b + m (Lnet/minecraft/class_4587;II)I method_30888 func_241863_a + m (Lnet/minecraft/class_327;Lnet/minecraft/class_5481;)Lnet/minecraft/class_5489$class_5490; method_30898 func_243264_d + m (Lnet/minecraft/class_327;[Lnet/minecraft/class_2561;)Lnet/minecraft/class_5489; method_30892 func_243260_a + m (Lnet/minecraft/class_327;Lnet/minecraft/class_5348;I)Lnet/minecraft/class_5489; method_30890 func_243258_a + f Lnet/minecraft/class_5489; field_26528 field_243257_a +c net/minecraft/class_5489$1 net/minecraft/client/gui/IBidiRenderer$1 +c net/minecraft/class_5489$2 net/minecraft/client/gui/IBidiRenderer$2 + f Ljava/util/List; field_26530 field_243266_c + f Lnet/minecraft/class_327; field_26529 field_243265_b +c net/minecraft/class_5489$class_5490 net/minecraft/client/gui/IBidiRenderer$Entry + m (Lnet/minecraft/class_5489$class_5490;)I method_30900 func_243270_b + m (Lnet/minecraft/class_5489$class_5490;)Lnet/minecraft/class_5481; method_30899 func_243269_a + f I field_26532 field_243268_b + f Lnet/minecraft/class_5481; field_26531 field_243267_a +c net/minecraft/class_353 net/minecraft/client/gui/widget/list/OptionsRowList + m (DD)Ljava/util/Optional; method_29624 func_238518_c_ + m (Lnet/minecraft/class_316;Lnet/minecraft/class_316;)V method_20407 addOption + m ([Lnet/minecraft/class_316;)V method_20408 addOptions + m (Lnet/minecraft/class_316;)Lnet/minecraft/class_339; method_31046 func_243271_b + m (Lnet/minecraft/class_316;)I method_20406 addOption +c net/minecraft/class_353$class_354 net/minecraft/client/gui/widget/list/OptionsRowList$Row + m (ILnet/minecraft/class_4587;IIFLnet/minecraft/class_339;)V method_18622 func_238519_a_ + m (Lnet/minecraft/class_315;ILnet/minecraft/class_316;)Lnet/minecraft/class_353$class_354; method_20409 create + m (Lnet/minecraft/class_353$class_354;)Ljava/util/List; method_29625 func_238520_a_ + m (Lnet/minecraft/class_315;ILnet/minecraft/class_316;Lnet/minecraft/class_316;)Lnet/minecraft/class_353$class_354; method_20410 create + f Ljava/util/List; field_18214 widgets +c net/minecraft/class_349 net/minecraft/client/gui/widget/button/OptionButton + m ()Lnet/minecraft/class_316; method_29623 func_238517_a_ + f Lnet/minecraft/class_316; field_18970 enumOptions +c net/minecraft/class_4040 net/minecraft/client/gui/widget/OptionSlider + f Lnet/minecraft/class_4067; field_18012 option +c net/minecraft/class_355 net/minecraft/client/gui/overlay/PlayerTabOverlayGui + m (Lnet/minecraft/class_4587;ILnet/minecraft/class_269;Lnet/minecraft/class_266;)V method_1919 func_238523_a_ + m (Lnet/minecraft/class_266;ILjava/lang/String;IILnet/minecraft/class_640;Lnet/minecraft/class_4587;)V method_1922 func_175247_a_ + m (Z)V method_1921 setVisible + m (Lnet/minecraft/class_4587;IIILnet/minecraft/class_640;)V method_1923 func_238522_a_ + m (Lnet/minecraft/class_640;Lnet/minecraft/class_5250;)Lnet/minecraft/class_2561; method_27538 func_238524_a_ + m ()V method_1920 resetFooterHeader + m (Lnet/minecraft/class_2561;)V method_1924 setFooter + m (Lnet/minecraft/class_640;)Lnet/minecraft/class_2561; method_1918 getDisplayName + m (Lnet/minecraft/class_2561;)V method_1925 setHeader + f Lcom/google/common/collect/Ordering; field_2156 ENTRY_ORDERING + f Lnet/minecraft/class_310; field_2155 mc + f J field_2152 lastTimeOpened + f Z field_2158 visible + f Lnet/minecraft/class_329; field_2157 guiIngame + f Lnet/minecraft/class_2561; field_2154 footer + f Lnet/minecraft/class_2561; field_2153 header +c net/minecraft/class_355$1 net/minecraft/client/gui/overlay/PlayerTabOverlayGui$1 +c net/minecraft/class_355$class_356 net/minecraft/client/gui/overlay/PlayerTabOverlayGui$PlayerComparator + m (Lnet/minecraft/class_640;Lnet/minecraft/class_640;)I method_1926 compare + m (Ljava/lang/Object;Ljava/lang/Object;)I compare compare +c net/minecraft/class_359 net/minecraft/client/gui/overlay/SubtitleOverlayGui + m (Lnet/minecraft/class_4587;)V method_1957 render + f Ljava/util/List; field_2183 subtitles + f Lnet/minecraft/class_310; field_2182 client + f Z field_2184 enabled +c net/minecraft/class_359$class_360 net/minecraft/client/gui/overlay/SubtitleOverlayGui$Subtitle + m ()Lnet/minecraft/class_243; method_1959 getLocation + m (Lnet/minecraft/class_243;)V method_1958 refresh + m ()Lnet/minecraft/class_2561; method_1960 func_238526_a_ + m ()J method_1961 getStartTime + f Lnet/minecraft/class_2561; field_2188 subtitle + f J field_2185 startTime + f Lnet/minecraft/class_243; field_2186 location + f Lnet/minecraft/class_359; field_2187 field_186827_a +c net/minecraft/class_361 net/minecraft/client/gui/widget/ToggleWidget + m (Z)V method_1964 setStateTriggered + m (IIIILnet/minecraft/class_2960;)V method_1962 initTextureValues + m (II)V method_1963 setPosition + m ()Z method_1965 isStateTriggered + f Z field_2194 stateTriggered + f I field_2189 yDiffTex + f I field_2192 xTexStart + f Lnet/minecraft/class_2960; field_2193 resourceLocation + f I field_2191 yTexStart + f I field_2190 xDiffTex +c net/minecraft/class_4893 net/minecraft/client/gui/screen/IScreen + m ()V method_25393 tick +c net/minecraft/class_444 net/minecraft/client/gui/widget/SoundSlider + f Lnet/minecraft/class_3419; field_2622 category +c net/minecraft/class_5499 net/minecraft/client/gui/IBidiTooltip + m ()Ljava/util/Optional; method_31047 func_241867_d +c net/minecraft/class_362 net/minecraft/client/gui/FocusableGui + f Z field_22781 isDragging + f Lnet/minecraft/class_364; field_22780 listener +c net/minecraft/class_4068 net/minecraft/client/gui/IRenderable + m (Lnet/minecraft/class_4587;IIF)V method_25394 render +c net/minecraft/class_364 net/minecraft/client/gui/IGuiEventListener + m (DD)Z method_25405 isMouseOver + m (DDD)Z method_25401 mouseScrolled + m (III)Z method_16803 keyReleased + m (DDI)Z method_25402 mouseClicked + m (DDIDD)Z method_25403 mouseDragged + m (CI)Z method_25400 charTyped + m (DDI)Z method_25406 mouseReleased + m (III)Z method_25404 keyPressed + m (DD)V method_16014 mouseMoved + m (Z)Z method_25407 changeFocus +c net/minecraft/class_4069 net/minecraft/client/gui/INestedGuiEventHandler + m ()Ljava/util/List; method_25396 getEventListeners + m ()Lnet/minecraft/class_364; method_25399 getListener + m (Lnet/minecraft/class_364;)V method_20086 setListenerDefault + m (Z)V method_25398 setDragging + m (DDILnet/minecraft/class_364;)Z method_20083 func_212931_a + m (DDDLnet/minecraft/class_364;)Z method_20082 func_212929_a + m (DD)Ljava/util/Optional; method_19355 getEventListenerForPos + m ()Z method_25397 isDragging + m (Lnet/minecraft/class_364;)V method_25395 setListener + m (Lnet/minecraft/class_364;)V method_20085 setFocusedDefault +c net/minecraft/class_365 net/minecraft/client/gui/SpectatorGui + m ()V method_1983 onMiddleClick + m (D)V method_1976 onMouseScroll + m ()Z method_1980 isMenuActive + m (Lnet/minecraft/class_4587;)V method_1979 func_238527_a_ + m (Lnet/minecraft/class_4587;FIILnet/minecraft/class_539;)V method_1975 func_238529_a_ + m (Lnet/minecraft/class_4587;IIFFLnet/minecraft/class_537;)V method_1982 func_238530_a_ + m (Lnet/minecraft/class_4587;F)V method_1978 func_238528_a_ + m ()F method_1981 getHotbarAlpha + m (I)V method_1977 onHotbarSelected + f Lnet/minecraft/class_2960; field_2197 WIDGETS + f Lnet/minecraft/class_2960; field_2199 SPECTATOR_WIDGETS + f J field_2198 lastSelectionTime + f Lnet/minecraft/class_310; field_2201 mc + f Lnet/minecraft/class_531; field_2200 menu +c net/minecraft/class_366 net/minecraft/client/gui/toasts/RecipeToast + m (Lnet/minecraft/class_374;Lnet/minecraft/class_1860;)V method_1985 addOrUpdate + m (Lnet/minecraft/class_1860;)V method_1984 addRecipe + f Lnet/minecraft/class_2561; field_26534 field_243273_d + f Lnet/minecraft/class_2561; field_26533 field_243272_c + f Ljava/util/List; field_2202 recipes + f J field_2204 firstDrawTime + f Z field_2203 hasNewOutputs +c net/minecraft/class_367 net/minecraft/client/gui/toasts/AdvancementToast + f Z field_2206 hasPlayedSound + f Lnet/minecraft/class_161; field_2205 advancement +c net/minecraft/class_368 net/minecraft/client/gui/toasts/IToast + m ()I method_29050 func_238540_d_ + m ()Ljava/lang/Object; method_1987 getType + m ()I method_29049 func_230445_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_374;J)Lnet/minecraft/class_368$class_369; method_1986 func_230444_a_ + f Ljava/lang/Object; field_2208 NO_TOKEN + f Lnet/minecraft/class_2960; field_2207 TEXTURE_TOASTS +c net/minecraft/class_368$class_369 net/minecraft/client/gui/toasts/IToast$Visibility + m (Ljava/lang/String;)Lnet/minecraft/class_368$class_369; valueOf valueOf + m ()[Lnet/minecraft/class_368$class_369; values values + m (Lnet/minecraft/class_1144;)V method_1988 playSound + f Lnet/minecraft/class_368$class_369; field_2209 HIDE + f [Lnet/minecraft/class_368$class_369; field_2212 $VALUES + f Lnet/minecraft/class_3414; field_2211 sound + f Lnet/minecraft/class_368$class_369; field_2210 SHOW +c net/minecraft/class_370 net/minecraft/client/gui/toasts/SystemToast + m (Lnet/minecraft/class_310;Ljava/lang/String;)V method_27023 func_238535_a_ + m (Lnet/minecraft/class_310;Ljava/lang/String;)V method_27025 func_238538_b_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_374;IIII)V method_29046 func_238533_a_ + m (Lnet/minecraft/class_310;Ljava/lang/String;)V method_29627 func_238539_c_ + m (Lnet/minecraft/class_310;Lnet/minecraft/class_370$class_371;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)Lnet/minecraft/class_370; method_29047 func_238534_a_ + m ()Lnet/minecraft/class_370$class_371; method_1989 getType + m (Lnet/minecraft/class_374;Lnet/minecraft/class_370$class_371;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_1990 addOrUpdate + m (Lnet/minecraft/class_2561;)Lcom/google/common/collect/ImmutableList; method_29626 func_238537_a_ + m (Lnet/minecraft/class_374;Lnet/minecraft/class_370$class_371;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_27024 func_238536_a_ + m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_1991 setDisplayedText + f Z field_2214 newDisplay + f I field_25038 field_238532_h_ + f Ljava/util/List; field_25037 field_238531_e_ + f J field_2216 firstDrawTime + f Lnet/minecraft/class_370$class_371; field_2213 type + f Lnet/minecraft/class_2561; field_2215 title +c net/minecraft/class_370$class_371 net/minecraft/client/gui/toasts/SystemToast$Type + m (Ljava/lang/String;)Lnet/minecraft/class_370$class_371; valueOf valueOf + m ()[Lnet/minecraft/class_370$class_371; values values + f Lnet/minecraft/class_370$class_371; field_2218 TUTORIAL_HINT + f Lnet/minecraft/class_370$class_371; field_23774 WORLD_ACCESS_FAILURE + f Lnet/minecraft/class_370$class_371; field_25445 PACK_COPY_FAILURE + f Lnet/minecraft/class_370$class_371; field_21809 PACK_LOAD_FAILURE + f Lnet/minecraft/class_370$class_371; field_25039 WORLD_GEN_SETTINGS_TRANSFER + f Lnet/minecraft/class_370$class_371; field_2219 NARRATOR_TOGGLE + f Lnet/minecraft/class_370$class_371; field_2220 WORLD_BACKUP + f [Lnet/minecraft/class_370$class_371; field_2221 $VALUES +c net/minecraft/class_372 net/minecraft/client/gui/toasts/TutorialToast + m (F)V method_1992 setProgress + m ()V method_1993 hide + f F field_2228 currentProgress + f F field_2229 displayedProgress + f J field_2223 lastDelta + f Z field_2222 hasProgressBar + f Lnet/minecraft/class_368$class_369; field_2227 visibility + f Lnet/minecraft/class_2561; field_2226 subtitle + f Lnet/minecraft/class_372$class_373; field_2225 icon + f Lnet/minecraft/class_2561; field_2224 title +c net/minecraft/class_372$class_373 net/minecraft/client/gui/toasts/TutorialToast$Icons + m (Ljava/lang/String;)Lnet/minecraft/class_372$class_373; valueOf valueOf + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_332;II)V method_1994 func_238543_a_ + m ()[Lnet/minecraft/class_372$class_373; values values + f [Lnet/minecraft/class_372$class_373; field_2234 $VALUES + f Lnet/minecraft/class_372$class_373; field_2230 MOVEMENT_KEYS + f Lnet/minecraft/class_372$class_373; field_2236 WOODEN_PLANKS + f I field_2232 column + f Lnet/minecraft/class_372$class_373; field_2233 RECIPE_BOOK + f Lnet/minecraft/class_372$class_373; field_2237 MOUSE + f I field_2231 row + f Lnet/minecraft/class_372$class_373; field_2235 TREE +c net/minecraft/class_374 net/minecraft/client/gui/toasts/ToastGui + m ()Lnet/minecraft/class_310; method_1995 getMinecraft + m (Ljava/lang/Class;Ljava/lang/Object;)Lnet/minecraft/class_368; method_1997 getToast + m (Lnet/minecraft/class_374;)Lnet/minecraft/class_310; method_1998 access$100 + m (Lnet/minecraft/class_368;)V method_1999 add + m ()V method_2000 clear + m (Lnet/minecraft/class_4587;)V method_1996 func_238541_a_ + f Lnet/minecraft/class_310; field_2238 mc + f [Lnet/minecraft/class_374$class_375; field_2239 visible + f Ljava/util/Deque; field_2240 toastsQueue +c net/minecraft/class_374$class_375 net/minecraft/client/gui/toasts/ToastGui$ToastInstance + m (J)F method_2003 getVisibility + m (IILnet/minecraft/class_4587;)Z method_2002 render + m ()Lnet/minecraft/class_368; method_2001 getToast + f Lnet/minecraft/class_368; field_2241 toast + f Lnet/minecraft/class_374; field_2245 field_193687_a + f J field_2243 animationTime + f Lnet/minecraft/class_368$class_369; field_2244 visibility + f J field_2242 visibleTime +c net/minecraft/class_374$1 net/minecraft/client/gui/toasts/ToastGui$1 +c net/minecraft/class_376 net/minecraft/client/gui/fonts/providers/DefaultGlyphProvider +c net/minecraft/class_377 net/minecraft/client/gui/fonts/Font + m (Lnet/minecraft/class_383;)Lnet/minecraft/class_382; method_2012 createTexturedGlyph + m (Lnet/minecraft/class_379;)Lnet/minecraft/class_382; method_2013 obfuscate + m ()F method_2006 func_212459_b + m (I)Lnet/minecraft/class_382; method_2014 func_238559_b_ + m (I)Lit/unimi/dsi/fastutil/ints/IntList; method_27546 func_238563_f_ + m ()V close close + m ()V method_2010 deleteTextures + m (Ljava/util/List;)V method_2004 setGlyphProviders + m (I)Lnet/minecraft/class_382; method_2009 func_212458_d_ + m ()V method_24290 func_230154_b_ + m ()Lnet/minecraft/class_382; method_22943 getWhiteGlyph + m (Ljava/util/List;Ljava/util/Set;I)V method_27545 func_238558_a_ + m (I)Lnet/minecraft/class_379; method_2005 func_212457_e_ + m (I)Lnet/minecraft/class_379; method_2011 func_238557_a_ + m (I)Lnet/minecraft/class_383; method_2008 getGlyphInfo + f Ljava/util/List; field_2254 textures + f Lnet/minecraft/class_2960; field_2246 id + f Ljava/util/List; field_2247 glyphProviders + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_2257 glyphs + f Lnet/minecraft/class_382; field_2256 fallbackGlyph + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_2253 mapTexturedGlyphs + f Lnet/minecraft/class_382; field_20910 whiteGlyph + f Lnet/minecraft/class_1060; field_2248 textureManager + f Ljava/util/Random; field_2252 RANDOM + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_2249 glyphsByWidth + f Lnet/minecraft/class_384; field_2250 EMPTY_GLYPH + f Lnet/minecraft/class_379; field_2251 GLYPH_ADVANCE_SPACE +c net/minecraft/class_378 net/minecraft/client/gui/fonts/FontResourceManager + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_377; method_27542 func_238552_a_ + m (Lnet/minecraft/class_377;)V method_27540 func_238550_a_ + m (Lnet/minecraft/class_378;)Lnet/minecraft/class_1060; method_18632 func_238553_b_ + m (Ljava/util/Map;)V method_27541 func_238551_a_ + m ()Lnet/minecraft/class_3302; method_18627 getReloadListener + m ()Lnet/minecraft/class_327; method_27539 func_238548_a_ + m ()V close close + m ()Lorg/apache/logging/log4j/Logger; method_18629 func_238554_c_ + m (Lnet/minecraft/class_378;)Ljava/util/Map; method_18630 func_238549_a_ + f Ljava/util/Map; field_24256 field_238547_f_ + f Lorg/apache/logging/log4j/Logger; field_2261 LOGGER + f Lnet/minecraft/class_377; field_24255 field_238545_c_ + f Lnet/minecraft/class_1060; field_2260 textureManager + f Lnet/minecraft/class_3302; field_18215 reloadListener + f Lnet/minecraft/class_2960; field_24254 field_238544_a_ + f Ljava/util/Map; field_2259 field_238546_d_ +c net/minecraft/class_378$1 net/minecraft/client/gui/fonts/FontResourceManager$1 + m (Ljava/util/List;I)V method_27543 func_238555_a_ + m (Ljava/util/Map;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18635 apply + m (Ljava/lang/String;)Z method_18633 func_215274_a + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Ljava/util/Map; method_18638 prepare + m (Lnet/minecraft/class_2960;Ljava/util/List;)V method_27544 func_238556_a_ + m (Lnet/minecraft/class_2960;)Ljava/util/List; method_18637 func_215272_b + f Lnet/minecraft/class_378; field_18216 field_215275_a +c net/minecraft/class_3728 net/minecraft/client/gui/fonts/TextInputUtil + m (IZ)V method_27560 moveCursorTo + m (Lnet/minecraft/class_310;)Ljava/util/function/Consumer; method_27561 getClipboardTextSetter + m (IZ)V method_27555 moveCursorByWords + m (IZ)V method_27549 moveCursorByChar + m (Lnet/minecraft/class_310;)Ljava/lang/String; method_27556 getClipboardText + m (Lnet/minecraft/class_310;)Ljava/lang/String; method_27565 func_238587_d_ + m ()V method_16204 moveCursorToEnd + m (Ljava/lang/String;)Ljava/lang/String; method_16200 getSelectedText + m (Ljava/lang/String;)Ljava/lang/String; method_16198 deleteSelectionFromText + m (Ljava/lang/String;)V method_16197 putText + m (C)Z method_16199 putChar + m (Z)V method_27562 deselectSelection + m ()Z method_27568 hasSelection + m (II)V method_27548 setSelection + m (I)Z method_16202 specialKeyPressed + m (I)I method_27567 clampIndexToTextLength + m (Lnet/minecraft/class_310;)Ljava/util/function/Supplier; method_27550 getClipboardTextSupplier + m (Z)V method_27558 moveCursorToEnd + m (Ljava/lang/String;Ljava/lang/String;)V method_27552 insertTextAtSelection + m (Z)V method_27553 moveCursorToStart + m ()I method_16201 getEndIndex + m (Lnet/minecraft/class_310;Ljava/lang/String;)V method_27551 setClipboardText + m ()V method_27559 copySelectedText + m ()V method_27554 insertClipboardText + m ()V method_27563 selectAll + m (Lnet/minecraft/class_310;Ljava/lang/String;)V method_27557 func_238577_b_ + m ()I method_16203 getStartIndex + m (I)V method_27564 deleteCharAtSelection + m ()V method_27547 cutText + f Ljava/util/function/Supplier; field_16456 clipboardSupplier + f Ljava/util/function/Predicate; field_24259 textLimiter + f Ljava/util/function/Supplier; field_24257 textSupplier + f Ljava/util/function/Consumer; field_24258 textConsumer + f Ljava/util/function/Consumer; field_16458 clipboardConsumer + f I field_16453 endIndex + f I field_16452 startIndex +c net/minecraft/class_380 net/minecraft/client/gui/fonts/FontTexture + m (Lnet/minecraft/class_383;)Lnet/minecraft/class_382; method_2022 createTexturedGlyph + m ()Lnet/minecraft/class_2960; method_2023 getTextureLocation + f Lnet/minecraft/class_2960; field_2262 textureLocation + f Lnet/minecraft/class_380$class_381; field_2264 entry + f Lnet/minecraft/class_1921; field_21690 field_228158_e_ + f Z field_2263 colored + f Lnet/minecraft/class_1921; field_21691 field_228159_f_ +c net/minecraft/class_380$class_381 net/minecraft/client/gui/fonts/FontTexture$Entry + m (Lnet/minecraft/class_380$class_381;)I method_17536 func_216890_b + m (Lnet/minecraft/class_383;)Lnet/minecraft/class_380$class_381; method_2024 func_211224_a + m (Lnet/minecraft/class_380$class_381;)I method_17535 func_216891_a + f Z field_2265 field_211231_g + f I field_2268 yOffset + f Lnet/minecraft/class_380$class_381; field_2271 field_211230_f + f I field_2269 xOffset + f I field_2267 field_211227_c + f Lnet/minecraft/class_380$class_381; field_2270 field_211229_e + f I field_2266 field_211228_d +c net/minecraft/class_380$1 net/minecraft/client/gui/fonts/FontTexture$1 +c net/minecraft/class_384 net/minecraft/client/gui/fonts/EmptyGlyph +c net/minecraft/class_382 net/minecraft/client/gui/fonts/TexturedGlyph + m (Z)Lnet/minecraft/class_1921; method_24045 getRenderType + m (ZFFLnet/minecraft/class_1159;Lnet/minecraft/class_4588;FFFFI)V method_2025 render + m (Lnet/minecraft/class_382$class_328;Lnet/minecraft/class_1159;Lnet/minecraft/class_4588;I)V method_22944 renderEffect + f F field_2275 u1 + f F field_2276 u0 + f F field_2274 v0 + f F field_2279 minY + f Lnet/minecraft/class_1921; field_21692 normalType + f Lnet/minecraft/class_1921; field_21693 seeThroughType + f F field_2278 maxY + f F field_2273 v1 + f F field_2280 maxX + f F field_2272 minX +c net/minecraft/class_382$class_328 net/minecraft/client/gui/fonts/TexturedGlyph$Effect + f F field_2009 a + f F field_2006 x1 + f F field_2010 b + f F field_2007 y0 + f F field_2003 g + f F field_2008 x0 + f F field_2004 r + f F field_20911 depth + f F field_2005 y1 +c net/minecraft/class_4591 net/minecraft/client/gui/fonts/WhiteGlyph + m (Ljava/lang/String;)Lnet/minecraft/class_4591; valueOf valueOf + m ()[Lnet/minecraft/class_4591; values values + m (Lnet/minecraft/class_1011;)V method_22945 func_228173_a_ + f Lnet/minecraft/class_4591; field_20912 INSTANCE + f Lnet/minecraft/class_1011; field_20913 WHITE_GLYPH + f [Lnet/minecraft/class_4591; field_20914 $VALUES +c net/minecraft/class_385 net/minecraft/client/gui/fonts/DefaultGlyph + m ()[Lnet/minecraft/class_385; values values + m (Ljava/lang/String;)Lnet/minecraft/class_385; valueOf valueOf + m (Lnet/minecraft/class_1011;)V method_2036 func_211580_a + f Lnet/minecraft/class_1011; field_2281 NATIVE_IMAGE + f [Lnet/minecraft/class_385; field_2282 $VALUES + f Lnet/minecraft/class_385; field_2283 INSTANCE +c net/minecraft/class_386 net/minecraft/client/gui/fonts/providers/TextureGlyphProvider + m ()Lorg/apache/logging/log4j/Logger; method_20480 func_216486_a + f Lnet/minecraft/class_1011; field_2285 texture + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_2284 glyphInfos + f Lorg/apache/logging/log4j/Logger; field_2286 LOGGER +c net/minecraft/class_386$class_387 net/minecraft/client/gui/fonts/providers/TextureGlyphProvider$Factory + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_386$class_387; method_2037 deserialize + m (Lnet/minecraft/class_1011;IIII)I method_2038 getCharacterWidth + f I field_2288 height + f Ljava/util/List; field_2290 chars + f I field_2287 ascent + f Lnet/minecraft/class_2960; field_2289 file +c net/minecraft/class_386$1 net/minecraft/client/gui/fonts/providers/TextureGlyphProvider$1 +c net/minecraft/class_386$class_388 net/minecraft/client/gui/fonts/providers/TextureGlyphProvider$GlyphInfo + f F field_2296 scale + f I field_2295 width + f I field_2293 height + f Lnet/minecraft/class_1011; field_2294 texture + f I field_2291 ascent + f I field_2292 advanceWidth + f I field_2297 unpackSkipRows + f I field_2298 unpackSkipPixels +c net/minecraft/class_394 net/minecraft/client/gui/fonts/providers/GlyphProviderTypes + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_389; method_2047 getFactory + m (Ljava/lang/String;)Lnet/minecraft/class_394; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_394; method_2048 byName + m ()[Lnet/minecraft/class_394; values values + m (Ljava/util/HashMap;)V method_2049 func_211639_a + f Ljava/util/function/Function; field_2315 factoryDeserializer + f Ljava/lang/String; field_2314 name + f Lnet/minecraft/class_394; field_2312 BITMAP + f [Lnet/minecraft/class_394; field_2316 $VALUES + f Ljava/util/Map; field_2311 TYPES_BY_NAME + f Lnet/minecraft/class_394; field_2317 TTF + f Lnet/minecraft/class_394; field_2313 LEGACY_UNICODE +c net/minecraft/class_389 net/minecraft/client/gui/fonts/providers/IGlyphProviderFactory + m (Lnet/minecraft/class_3300;)Lnet/minecraft/class_390; method_2039 create +c net/minecraft/class_396 net/minecraft/client/gui/fonts/providers/TrueTypeGlyphProviderFactory + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_389; method_2059 deserialize + f Lnet/minecraft/class_2960; field_2330 file + f F field_2326 shiftY + f F field_2329 size + f Ljava/lang/String; field_2331 chars + f Lorg/apache/logging/log4j/Logger; field_16242 RANDOM + f F field_2328 oversample + f F field_2327 shiftX +c net/minecraft/class_391 net/minecraft/client/gui/fonts/providers/UnicodeTextureGlyphProvider + m (B)I method_2043 func_212453_a + m (I)Lnet/minecraft/class_2960; method_2041 func_238591_b_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1011; method_2042 loadTexture + m ()Lorg/apache/logging/log4j/Logger; method_2045 func_211254_a + m (B)I method_2044 func_212454_b + f Lorg/apache/logging/log4j/Logger; field_2303 LOGGER + f Ljava/util/Map; field_2299 field_211845_e + f Lnet/minecraft/class_3300; field_2302 resourceManager + f Ljava/lang/String; field_2300 template + f [B field_2301 sizes +c net/minecraft/class_391$class_392 net/minecraft/client/gui/fonts/providers/UnicodeTextureGlyphProvider$Factory + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_389; method_2046 deserialize + f Lnet/minecraft/class_2960; field_2304 sizes + f Ljava/lang/String; field_2305 template +c net/minecraft/class_391$class_393 net/minecraft/client/gui/fonts/providers/UnicodeTextureGlyphProvider$GlpyhInfo + f I field_2306 unpackSkipRows + f I field_2309 width + f I field_2308 height + f Lnet/minecraft/class_1011; field_2310 texture + f I field_2307 unpackSkipPixels +c net/minecraft/class_391$1 net/minecraft/client/gui/fonts/providers/UnicodeTextureGlyphProvider$1 +c net/minecraft/class_403 net/minecraft/client/gui/screen/AlertScreen + m (Lnet/minecraft/class_4185;)V method_19790 func_212983_a + f Lnet/minecraft/class_2561; field_2346 field_201550_f + f Lnet/minecraft/class_2561; field_2349 field_201551_g + f Ljava/lang/Runnable; field_2345 field_201552_h + f Lnet/minecraft/class_5489; field_2348 field_243274_p + f I field_2347 buttonDelay +c net/minecraft/class_4189 net/minecraft/client/gui/AccessibilityScreen + f [Lnet/minecraft/class_316; field_18730 OPTIONS +c net/minecraft/class_404 net/minecraft/client/gui/screen/ChatOptionsScreen + f [Lnet/minecraft/class_316; field_2352 CHAT_OPTIONS +c net/minecraft/class_405 net/minecraft/client/gui/screen/ConfirmBackupScreen + m (Lnet/minecraft/class_4185;)V method_19793 func_212993_c + m (Lnet/minecraft/class_4185;)V method_19792 func_212992_b + m (Lnet/minecraft/class_4185;)V method_19791 func_212991_a + f Lnet/minecraft/class_2561; field_2364 message + f Lnet/minecraft/class_405$class_406; field_18971 callback + f Lnet/minecraft/class_4286; field_19234 field_212996_j + f Lnet/minecraft/class_5489; field_2365 field_243275_q + f Z field_19232 field_212994_d + f Lnet/minecraft/class_437; field_2360 parentScreen +c net/minecraft/class_405$class_406 net/minecraft/client/gui/screen/ConfirmBackupScreen$ICallback + m (ZZ)V proceed proceed +c net/minecraft/class_407 net/minecraft/client/gui/screen/ConfirmOpenLinkScreen + m ()V method_2100 copyLinkToClipboard + m (Lnet/minecraft/class_4185;)V method_19795 func_213004_a + m (Lnet/minecraft/class_4185;)V method_19796 func_213005_b + m (Lnet/minecraft/class_4185;)V method_19797 func_213006_c + f Ljava/lang/String; field_2371 linkText + f Lnet/minecraft/class_2561; field_2372 openLinkWarning + f Lnet/minecraft/class_2561; field_2373 copyLinkButtonText + f Z field_2370 showSecurityWarning +c net/minecraft/class_408 net/minecraft/client/gui/screen/ChatScreen + m (Ljava/lang/String;)V method_23945 func_212997_a + m (I)V method_2114 getSentHistory + m (Ljava/lang/String;)V method_2108 setChatLine + m (Lnet/minecraft/class_408;)Lnet/minecraft/class_4717; method_23961 func_228175_a_ + f Ljava/lang/String; field_18973 defaultInputFieldText + f Ljava/lang/String; field_2389 historyBuffer + f Lnet/minecraft/class_342; field_2382 inputField + f Lnet/minecraft/class_4717; field_21616 commandSuggestionHelper + f I field_2387 sentHistoryCursor +c net/minecraft/class_408$1 net/minecraft/client/gui/screen/ChatScreen$1 + f Lnet/minecraft/class_408; field_21631 field_228176_a_ +c net/minecraft/class_412 net/minecraft/client/gui/screen/ConnectingScreen + m (Lnet/minecraft/class_412;)Lnet/minecraft/class_437; method_2128 access$200 + m (Lnet/minecraft/class_412;Lnet/minecraft/class_2561;)V method_2132 func_209513_a + m (Lnet/minecraft/class_412;Lnet/minecraft/class_2535;)Lnet/minecraft/class_2535; method_2126 access$102 + m (Lnet/minecraft/class_412;)Lnet/minecraft/class_2535; method_2129 access$100 + m ()Lorg/apache/logging/log4j/Logger; method_2133 access$300 + m (Lnet/minecraft/class_412;)Z method_2134 access$000 + m (Ljava/lang/String;I)V method_2130 connect + m (Lnet/minecraft/class_4185;)V method_19800 func_212999_a + m (Lnet/minecraft/class_2561;)V method_2131 func_209514_a + f Lnet/minecraft/class_437; field_2412 previousGuiScreen + f Lorg/apache/logging/log4j/Logger; field_2410 LOGGER + f Z field_2409 cancel + f Lnet/minecraft/class_2561; field_2413 field_209515_s + f Lnet/minecraft/class_2535; field_2411 networkManager + f J field_19097 field_213000_g + f Ljava/util/concurrent/atomic/AtomicInteger; field_2408 CONNECTION_ID +c net/minecraft/class_412$1 net/minecraft/client/gui/screen/ConnectingScreen$1 + m (Ljava/lang/String;)V method_2135 func_211643_a + m (Lnet/minecraft/class_412;Lnet/minecraft/class_2561;)V method_2137 func_209549_a + m ()V method_2136 func_211644_a + m ()V run run + f I field_2415 field_148229_b + f Ljava/lang/String; field_2414 field_148231_a + f Lnet/minecraft/class_412; field_2416 field_148230_c +c net/minecraft/class_410 net/minecraft/client/gui/screen/ConfirmScreen + m (Lnet/minecraft/class_4185;)V method_19799 func_213002_b + m (Lnet/minecraft/class_4185;)V method_19798 func_213001_a + m (I)V method_2125 setButtonDelay + f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_2403 callbackFunction + f Lnet/minecraft/class_2561; field_2399 cancelButtonText + f Lnet/minecraft/class_5489; field_2404 field_243276_q + f I field_2400 ticksUntilEnable + f Lnet/minecraft/class_2561; field_2401 messageLine2 + f Lnet/minecraft/class_2561; field_2402 confirmButtonText +c net/minecraft/class_413 net/minecraft/client/gui/screen/CreateFlatWorldScreen + m (Lnet/minecraft/class_4185;)V method_19806 func_213011_c + m ()V method_2145 onLayersChanged + m (Lnet/minecraft/class_413;)V method_30153 func_241580_b_ + m (Lnet/minecraft/class_4185;)V method_20093 func_213007_d + m (Lnet/minecraft/class_4185;)V method_19804 func_213009_a + m (Lnet/minecraft/class_413;)Lnet/minecraft/class_3232; method_2142 access$000 + m (Lnet/minecraft/class_4185;)V method_19805 func_213010_b + m ()Lnet/minecraft/class_3232; method_29055 func_238603_g_ + m (Lnet/minecraft/class_3232;)V method_29054 func_238602_a_ + m ()Z method_2147 hasSelectedLayer + f Lnet/minecraft/class_525; field_2422 createWorldGui + f Lnet/minecraft/class_4185; field_2421 removeLayerButton + f Lnet/minecraft/class_3232; field_2419 generatorInfo + f Lnet/minecraft/class_413$class_4192; field_2424 createFlatWorldListSlotGui + f Ljava/util/function/Consumer; field_24565 field_238601_b_ + f Lnet/minecraft/class_2561; field_2418 materialText + f Lnet/minecraft/class_2561; field_2425 heightText +c net/minecraft/class_413$1 net/minecraft/client/gui/screen/CreateFlatWorldScreen$1 +c net/minecraft/class_413$class_4192 net/minecraft/client/gui/screen/CreateFlatWorldScreen$DetailsList + m ()V method_19372 func_214345_a + m (Lnet/minecraft/class_413$class_4192$class_4193;)V method_20094 setSelected + m (Lnet/minecraft/class_413$class_4192;)Lnet/minecraft/class_310; method_20095 func_241581_a_ + f Lnet/minecraft/class_413; field_18738 field_148227_l +c net/minecraft/class_413$class_4192$class_4193 net/minecraft/client/gui/screen/CreateFlatWorldScreen$DetailsList$LayerEntry + m (Lnet/minecraft/class_4587;II)V method_19373 func_238604_a_ + m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1799;)V method_19375 func_238605_a_ + f Lnet/minecraft/class_413$class_4192; field_18739 field_214391_a +c net/minecraft/class_415 net/minecraft/client/gui/screen/CreateBuffetWorldScreen + m (Lnet/minecraft/class_415;Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959; method_29053 func_243280_a + m (Lnet/minecraft/class_415$class_4190$class_4191;)Z method_29051 func_241578_a_ + m ()V method_2151 func_205306_h + m (Lnet/minecraft/class_415;)V method_29052 func_243281_b + m (Lnet/minecraft/class_4185;)V method_19801 func_213015_c + m (Lnet/minecraft/class_4185;)V method_28059 func_241579_b_ + m (Lnet/minecraft/class_415;)Lnet/minecraft/class_2385; method_30506 func_243279_a + f Lnet/minecraft/class_437; field_24562 parent + f Lnet/minecraft/class_2561; field_26535 field_243277_a + f Ljava/util/function/Consumer; field_24563 field_238592_b_ + f Lnet/minecraft/class_2385; field_25888 field_243278_p + f Lnet/minecraft/class_4185; field_2438 field_205313_u + f Lnet/minecraft/class_415$class_4190; field_2441 biomeList + f Lnet/minecraft/class_1959; field_25040 field_238593_p_ +c net/minecraft/class_415$1 net/minecraft/client/gui/screen/CreateBuffetWorldScreen$1 +c net/minecraft/class_415$class_4190 net/minecraft/client/gui/screen/CreateBuffetWorldScreen$BiomeList + m (Lnet/minecraft/class_415$class_4190$class_4191;)V method_20089 setSelected + m (Ljava/util/Map$Entry;)Ljava/lang/String; method_28061 func_238598_b_ + m (Ljava/util/Map$Entry;)V method_28060 func_238597_a_ + f Lnet/minecraft/class_415; field_18736 field_205303_v +c net/minecraft/class_415$class_4190$class_4191 net/minecraft/client/gui/screen/CreateBuffetWorldScreen$BiomeList$BiomeEntry + m (Lnet/minecraft/class_415$class_4190$class_4191;)Lnet/minecraft/class_1959; method_20092 func_243283_a + f Lnet/minecraft/class_415$class_4190; field_18737 field_214393_a + f Lnet/minecraft/class_2561; field_26536 field_243282_c + f Lnet/minecraft/class_1959; field_24564 field_238599_b_ +c net/minecraft/class_418 net/minecraft/client/gui/screen/DeathScreen + m (Lnet/minecraft/class_4185;)V method_19809 func_213021_b + m ()V method_22364 func_228177_a_ + m (Z)V method_20373 confirmCallback + m (Lnet/minecraft/class_4185;)V method_19808 func_213020_a + m (I)Lnet/minecraft/class_2583; method_2164 func_238623_a_ + f I field_2451 enableButtonsTimer + f Lnet/minecraft/class_2561; field_26537 field_243285_p + f Z field_18974 isHardcoreMode + f Lnet/minecraft/class_2561; field_2450 causeOfDeath +c net/minecraft/class_5346 net/minecraft/client/gui/screen/DatapackFailureScreen + m (Lnet/minecraft/class_4185;)V method_29346 func_238622_b_ + m (Lnet/minecraft/class_4185;)V method_29345 func_238621_a_ + f Ljava/lang/Runnable; field_25452 field_238620_b_ + f Lnet/minecraft/class_5489; field_25265 field_243284_a +c net/minecraft/class_420 net/minecraft/client/gui/screen/ServerListScreen + m ()V method_2167 func_195167_h + m (Lnet/minecraft/class_4185;)V method_19813 func_213026_b + m (Ljava/lang/String;)V method_19376 func_213024_a + m (Lnet/minecraft/class_4185;)V method_19812 func_213025_a + m ()V method_2169 func_195168_i + f Lnet/minecraft/class_4185; field_2462 field_195170_a + f Lnet/minecraft/class_342; field_2463 ipEdit + f Lnet/minecraft/class_642; field_2460 serverData + f Lnet/minecraft/class_437; field_21790 previousScreen + f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_19235 field_213027_d + f Lnet/minecraft/class_2561; field_26540 field_243288_a +c net/minecraft/class_417 net/minecraft/client/gui/screen/DemoScreen + m (Lnet/minecraft/class_4185;)V method_19810 func_213018_a + m (Lnet/minecraft/class_4185;)V method_19811 func_213019_b + f Lnet/minecraft/class_5489; field_26538 field_243286_b + f Lnet/minecraft/class_2960; field_2447 DEMO_BACKGROUND_LOCATION + f Lnet/minecraft/class_5489; field_26539 field_243287_c +c net/minecraft/class_422 net/minecraft/client/gui/screen/AddServerScreen + m (Lnet/minecraft/class_642$class_643;)Lnet/minecraft/class_2561; method_27570 func_238624_a_ + m ()V method_24183 func_228180_b_ + m ()V method_2172 onButtonServerAddPressed + m (Ljava/lang/String;)Z method_2178 func_210141_a + m (Lnet/minecraft/class_4185;)V method_19815 func_213029_a + m (Lnet/minecraft/class_4185;)V method_19817 func_213031_c + m (Lnet/minecraft/class_4185;)V method_19816 func_213030_b + m (Ljava/lang/String;)V method_2171 func_213028_a + f Lnet/minecraft/class_2561; field_26541 field_243290_a + f Lnet/minecraft/class_2561; field_26542 field_243291_b + f Lnet/minecraft/class_437; field_21791 field_228179_g_ + f Lnet/minecraft/class_4185; field_2473 buttonResourcePack + f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_19236 field_213032_b + f Lnet/minecraft/class_342; field_2474 textFieldServerAddress + f Lnet/minecraft/class_642; field_2469 serverData + f Lnet/minecraft/class_342; field_2471 textFieldServerName + f Lnet/minecraft/class_4185; field_2472 buttonAddServer + f Ljava/util/function/Predicate; field_2475 addressFilter +c net/minecraft/class_419 net/minecraft/client/gui/screen/DisconnectedScreen + m (Lnet/minecraft/class_4185;)V method_19814 func_213033_a + f Lnet/minecraft/class_2561; field_2457 message + f Lnet/minecraft/class_5489; field_2458 field_243289_b + f Lnet/minecraft/class_437; field_2456 nextScreen + f I field_2454 textHeight +c net/minecraft/class_421 net/minecraft/client/gui/screen/ErrorScreen + m (Lnet/minecraft/class_4185;)V method_19818 func_213034_a + f Lnet/minecraft/class_2561; field_2467 message +c net/minecraft/class_423 net/minecraft/client/gui/screen/SleepInMultiplayerScreen + m ()V method_2180 wakeFromSleep + m (Lnet/minecraft/class_4185;)V method_19819 func_212998_a +c net/minecraft/class_424 net/minecraft/client/gui/screen/DirtMessageScreen +c net/minecraft/class_3928 net/minecraft/client/gui/screen/WorldLoadProgressScreen + m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_17537 func_213039_a + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_3953;IIII)V method_17538 func_238625_a_ + f J field_19101 lastNarratorUpdateTime + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_17407 COLORS + f Lnet/minecraft/class_3953; field_17406 tracker +c net/minecraft/class_426 net/minecraft/client/gui/screen/LanguageScreen + m (Lnet/minecraft/class_4185;)V method_19821 func_213037_b + m (Lnet/minecraft/class_4185;)V method_19820 func_213036_a + m (Lnet/minecraft/class_426;)Lnet/minecraft/class_1076; method_2182 func_213035_a + f Lnet/minecraft/class_426$class_4195; field_2486 list + f Lnet/minecraft/class_2561; field_26543 field_243292_c + f Lnet/minecraft/class_1076; field_2488 languageManager + f Lnet/minecraft/class_4185; field_2491 confirmSettingsBtn + f Lnet/minecraft/class_349; field_2487 field_211832_i +c net/minecraft/class_426$class_4195 net/minecraft/client/gui/screen/LanguageScreen$List + m (Lnet/minecraft/class_426$class_4195;)I method_20101 func_214349_a + m (Lnet/minecraft/class_426$class_4195$class_4194;)V method_20100 setSelected + f Lnet/minecraft/class_426; field_18744 field_148178_k +c net/minecraft/class_426$class_4195$class_4194 net/minecraft/client/gui/screen/LanguageScreen$List$LanguageEntry + m (Lnet/minecraft/class_426$class_4195$class_4194;)Lnet/minecraft/class_1077; method_19380 func_214396_a + m ()V method_19381 func_214395_a + f Lnet/minecraft/class_1077; field_18743 field_214398_b + f Lnet/minecraft/class_426$class_4195; field_19100 field_214397_a +c net/minecraft/class_3929 net/minecraft/client/gui/ScreenManager + m (Lnet/minecraft/class_3917;Lnet/minecraft/class_310;ILnet/minecraft/class_2561;)V method_17541 openScreen + m ()Z method_17539 isMissingScreen + m (Lnet/minecraft/class_3917;Lnet/minecraft/class_3929$class_3930;)V method_17542 registerFactory + m (Lnet/minecraft/class_3917;)Lnet/minecraft/class_3929$class_3930; method_17540 getFactory + f Lorg/apache/logging/log4j/Logger; field_17408 LOG + f Ljava/util/Map; field_17409 FACTORIES +c net/minecraft/class_3929$class_3930 net/minecraft/client/gui/ScreenManager$IScreenFactory + m (Lnet/minecraft/class_2561;Lnet/minecraft/class_3917;Lnet/minecraft/class_310;I)V method_17543 createScreen + m (Lnet/minecraft/class_1703;Lnet/minecraft/class_1661;Lnet/minecraft/class_2561;)Lnet/minecraft/class_437; create create +c net/minecraft/class_425 net/minecraft/client/gui/ResourceLoadProgressGui + m (Lnet/minecraft/class_4587;IIIIF)V method_18103 func_238629_a_ + m ()Lnet/minecraft/class_2960; method_18639 func_212971_b + m (Lnet/minecraft/class_310;)V method_18819 loadLogoTexture + f F field_17770 progress + f Lnet/minecraft/class_310; field_18217 mc + f Z field_18219 reloading + f Lnet/minecraft/class_4011; field_17767 asyncReloader + f Lnet/minecraft/class_2960; field_2483 MOJANG_LOGO_TEXTURE + f Ljava/util/function/Consumer; field_18218 completedCallback + f I field_25041 field_238627_b_ + f I field_25042 field_238628_c_ + f J field_18220 fadeInStart + f J field_17771 fadeOutStart +c net/minecraft/class_425$class_4070 net/minecraft/client/gui/ResourceLoadProgressGui$MojangLogoTexture +c net/minecraft/class_429 net/minecraft/client/gui/screen/OptionsScreen + m (Lnet/minecraft/class_4185;)V method_19829 func_213061_h + m (Lnet/minecraft/class_4185;)V method_19830 func_213055_i + m (Lnet/minecraft/class_4185;)V method_19828 func_213059_g + m (Lnet/minecraft/class_4185;)V method_19827 func_213052_f + m (Lnet/minecraft/class_4185;)V method_19825 func_213049_d + m (Lnet/minecraft/class_4185;)V method_19826 func_213053_e + m (Lnet/minecraft/class_4185;)V method_19824 func_213060_c + m (Lnet/minecraft/class_4185;)V method_19833 func_213051_l + m (Lnet/minecraft/class_4185;)V method_19823 func_213058_b + m (Lnet/minecraft/class_4185;)V method_19832 func_213054_k + m (Lnet/minecraft/class_4185;)V method_19822 func_213056_a + m (Z)V method_20374 accept + m (Lnet/minecraft/class_4185;)V method_19831 func_213057_j + m (Lnet/minecraft/class_1267;)Lnet/minecraft/class_2561; method_2189 func_238630_a_ + m (Lnet/minecraft/class_3283;)V method_29975 func_241584_a_ + f Lnet/minecraft/class_437; field_2501 lastScreen + f [Lnet/minecraft/class_316; field_2504 SCREEN_OPTIONS + f Lnet/minecraft/class_4185; field_2500 difficultyButton + f Lnet/minecraft/class_1267; field_18745 worldDifficulty + f Lnet/minecraft/class_315; field_2502 settings + f Lnet/minecraft/class_347; field_2503 lockButton +c net/minecraft/class_4288 net/minecraft/client/gui/screen/MouseSettingsScreen + m (Lnet/minecraft/class_4185;)V method_20411 func_223703_a + m (I)[Lnet/minecraft/class_316; method_21671 func_223702_a + f Lnet/minecraft/class_353; field_19246 field_213045_b + f [Lnet/minecraft/class_316; field_19247 OPTIONS +c net/minecraft/class_428 net/minecraft/client/gui/screen/MemoryErrorScreen + m (Lnet/minecraft/class_4185;)V method_19835 func_213048_b + m (Lnet/minecraft/class_4185;)V method_19834 func_213047_a +c net/minecraft/class_4667 net/minecraft/client/gui/screen/SettingsScreen + m (Lnet/minecraft/class_353;II)Ljava/util/List; method_31048 func_243293_a + f Lnet/minecraft/class_315; field_21336 gameSettings + f Lnet/minecraft/class_437; field_21335 parentScreen +c net/minecraft/class_433 net/minecraft/client/gui/screen/IngameMenuScreen + m (Lnet/minecraft/class_4185;)V method_19845 func_213070_g + m (Lnet/minecraft/class_4185;)V method_19838 func_213068_b + m (Lnet/minecraft/class_4185;)V method_19836 func_213067_a + m (Lnet/minecraft/class_4185;)V method_19844 func_213065_f + m (Lnet/minecraft/class_4185;)V method_19841 func_213063_d + m (Z)V method_19837 func_213064_a + m (Lnet/minecraft/class_4185;)V method_19843 func_213066_e + m (Lnet/minecraft/class_4185;)V method_19840 func_213071_c + m (Ljava/lang/String;Lnet/minecraft/class_4185;)V method_19842 func_213072_a + m (Ljava/lang/String;Z)V method_19839 func_213069_a + m ()V method_20543 addButtons + f Z field_19319 isFullMenu +c net/minecraft/class_4071 net/minecraft/client/gui/LoadingGui + m ()Z method_18640 isPauseScreen +c net/minecraft/class_430 net/minecraft/client/gui/screen/FlatPresetsScreen + m (Lnet/minecraft/class_2561;Lnet/minecraft/class_1935;Lnet/minecraft/class_5321;Ljava/util/List;ZZZ[Lnet/minecraft/class_3229;)V method_2195 func_238640_a_ + m (Lnet/minecraft/class_2378;Ljava/lang/String;Lnet/minecraft/class_3232;)Lnet/minecraft/class_3232; method_29060 func_243299_a + m (Z)V method_20102 func_213074_a + m (Lnet/minecraft/class_430;)Lnet/minecraft/class_413; method_30507 func_243295_a + m ()Ljava/util/List; method_2194 func_213073_a + m (Lnet/minecraft/class_430;Lnet/minecraft/class_3232;)Lnet/minecraft/class_3232; method_29057 func_243296_a + m (Ljava/lang/String;I)Lnet/minecraft/class_3229; method_29059 func_238638_a_ + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_4185;)V method_19847 func_243298_a + m (Lnet/minecraft/class_4185;)V method_19846 func_243294_a + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_3232;)Ljava/lang/String; method_29062 func_243303_b + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_5321;)Lnet/minecraft/class_1959; method_31187 func_243300_a + m (Ljava/util/List;ZZZ[Lnet/minecraft/class_3229;Lnet/minecraft/class_5321;Lnet/minecraft/class_2378;)Lnet/minecraft/class_3232; method_31127 func_243301_a + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_5321;)Lnet/minecraft/class_1959; method_31188 func_243304_b + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_3232;)Ljava/lang/String; method_29056 func_243297_a + m (Lnet/minecraft/class_2960;)Ljava/lang/IllegalArgumentException; method_29061 func_238641_a_ + m (Ljava/lang/String;)Ljava/util/List; method_29058 func_238637_a_ + m (Lnet/minecraft/class_430;)Lnet/minecraft/class_3232; method_31128 func_243302_b + m (Lnet/minecraft/class_430;)Lnet/minecraft/class_342; method_2193 func_243305_c + f Lnet/minecraft/class_430$class_4196; field_2521 list + f Lnet/minecraft/class_3232; field_25044 field_241594_u_ + f Lorg/apache/logging/log4j/Logger; field_25043 field_238631_a_ + f Lnet/minecraft/class_413; field_2519 parentScreen + f Lnet/minecraft/class_4185; field_2525 btnSelect + f Lnet/minecraft/class_2561; field_2520 presetsShare + f Lnet/minecraft/class_2561; field_2524 listText + f Ljava/util/List; field_2518 FLAT_WORLD_PRESETS + f Lnet/minecraft/class_342; field_2523 export +c net/minecraft/class_430$class_4196 net/minecraft/client/gui/screen/FlatPresetsScreen$SlotList + m (Lnet/minecraft/class_430$class_4196;)Lnet/minecraft/class_310; method_20104 func_243306_a + m (Lnet/minecraft/class_430$class_4196$class_432;)V method_20103 setSelected + f Lnet/minecraft/class_430; field_18747 field_148174_l +c net/minecraft/class_430$class_4196$class_432 net/minecraft/client/gui/screen/FlatPresetsScreen$SlotList$PresetEntry + m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1792;)V method_2200 func_238647_a_ + m ()V method_19389 func_214399_a + m (Lnet/minecraft/class_430$class_4196$class_432;)V method_19388 func_214401_a + m (Lnet/minecraft/class_4587;II)V method_2198 func_238646_a_ + f Lnet/minecraft/class_430$class_4196; field_2532 field_214403_a +c net/minecraft/class_430$class_431 net/minecraft/client/gui/screen/FlatPresetsScreen$LayerItem + m ()Lnet/minecraft/class_2561; method_27571 func_238644_a_ + f Ljava/util/function/Function; field_25045 field_238643_c_ + f Lnet/minecraft/class_1792; field_2527 icon + f Lnet/minecraft/class_2561; field_2528 name +c net/minecraft/class_5405 net/minecraft/client/gui/screen/GPUWarningScreen + f I field_25679 field_241589_q_ + f Lcom/google/common/collect/ImmutableList; field_25676 options + f I field_25678 field_241588_p_ + f Lnet/minecraft/class_5348; field_25675 warnings + f Lnet/minecraft/class_5489; field_25677 warningRenderer +c net/minecraft/class_5405$class_5406 net/minecraft/client/gui/screen/GPUWarningScreen$Option + m (Lnet/minecraft/class_5405$class_5406;)Lnet/minecraft/class_4185$class_4241; method_30051 func_241593_b_ + m (Lnet/minecraft/class_5405$class_5406;)Lnet/minecraft/class_2561; method_30050 func_241592_a_ + f Lnet/minecraft/class_2561; field_25680 field_241590_a_ + f Lnet/minecraft/class_4185$class_4241; field_25681 field_241591_b_ +c net/minecraft/class_434 net/minecraft/client/gui/screen/DownloadTerrainScreen + f Lnet/minecraft/class_2561; field_26544 field_243307_a +c net/minecraft/class_435 net/minecraft/client/gui/screen/WorkingScreen + f Lnet/minecraft/class_2561; field_2544 stage + f Z field_2543 doneWorking + f I field_2542 progress + f Lnet/minecraft/class_2561; field_2541 field_238648_a_ +c net/minecraft/class_436 net/minecraft/client/gui/screen/ShareToLanScreen + m (Lnet/minecraft/class_4185;)V method_19851 func_213082_d + m ()V method_2204 updateDisplayNames + m (Lnet/minecraft/class_4185;)V method_19849 func_213084_b + m (Lnet/minecraft/class_4185;)V method_19850 func_213085_c + m (Lnet/minecraft/class_4185;)V method_19848 func_213083_a + f Lnet/minecraft/class_4185; field_2549 gameModeButton + f Ljava/lang/String; field_2545 gameMode + f Lnet/minecraft/class_437; field_2548 lastScreen + f Lnet/minecraft/class_4185; field_2547 allowCheatsButton + f Lnet/minecraft/class_2561; field_25890 field_243311_b + f Lnet/minecraft/class_2561; field_25889 field_243310_a + f Lnet/minecraft/class_2561; field_26545 field_243312_c + f Z field_2546 allowCheats +c net/minecraft/class_437 net/minecraft/client/gui/screen/Screen + m (Lnet/minecraft/class_2583;)Z method_25430 handleComponentClicked + m (Ljava/lang/String;)V method_25427 sendMessage + m (Lnet/minecraft/class_4587;I)V method_25433 renderBackground + m (Ljava/net/URI;)V method_25416 openLink + m (Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/String;)V method_25412 wrapScreenError + m (I)Z method_25439 isSelectAll + m (I)Z method_25438 isCopy + m ()Z method_25422 shouldCloseOnEsc + m (Lnet/minecraft/class_4587;)V method_25420 renderBackground + m ()Z method_25443 hasAltDown + m ()Z method_25442 hasShiftDown + m ()V method_25432 onClose + m (I)Z method_25437 isPaste + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_25424 renderTooltip + m (Ljava/lang/String;Z)V method_25415 insertText + m (Ljava/lang/String;Z)V method_25425 sendMessage + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2583;II)V method_25418 renderComponentHoverEffect + m (Ljava/util/List;)V method_29638 addPacks + m (Lnet/minecraft/class_310;II)V method_25410 resize + m (Ljava/lang/String;)Ljava/lang/String; method_25413 func_229875_lam_ + m (Lnet/minecraft/class_310;II)V method_25423 init + m ()Ljava/lang/String; method_25435 getNarrationMessage + m (Lnet/minecraft/class_4587;Ljava/util/List;II)V method_25417 renderTooltip + m (Lnet/minecraft/class_1799;)Ljava/util/List; method_25408 getTooltipFromItem + m ()V method_25419 closeScreen + m (Lnet/minecraft/class_364;)Lnet/minecraft/class_364; method_25429 addListener + m (Lnet/minecraft/class_339;)Lnet/minecraft/class_339; method_25411 addButton + m (Z)V method_25428 confirmLink + m (Ljava/lang/String;CI)Z method_25414 isValidCharacterForName + m (I)Z method_25436 isCut + m ()Z method_25441 hasControlDown + m ()V method_25426 init + m (I)V method_25434 renderDirtBackground + m (Lnet/minecraft/class_4587;Ljava/util/List;II)V method_30901 func_243308_b + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1799;II)V method_25409 renderTooltip + m ()Z method_25421 isPauseScreen + m ()Lnet/minecraft/class_2561; method_25440 getTitle + f Ljava/util/List; field_22786 children + f Lnet/minecraft/class_310; field_22787 minecraft + f Z field_22792 passEvents + f Ljava/util/Set; field_22783 ALLOWED_PROTOCOLS + f Lorg/apache/logging/log4j/Logger; field_22782 LOGGER + f I field_22790 height + f Ljava/net/URI; field_22784 clickedLink + f I field_22789 width + f Lnet/minecraft/class_327; field_22793 font + f Lnet/minecraft/class_2561; field_22785 title + f Ljava/util/List; field_22791 buttons + f Lnet/minecraft/class_918; field_22788 itemRenderer +c net/minecraft/class_440 net/minecraft/client/gui/screen/CustomizeSkinScreen + m (Lnet/minecraft/class_4185;)V method_19854 func_213081_b + m (Lnet/minecraft/class_1664;)Lnet/minecraft/class_2561; method_2248 func_238655_a_ + m (Lnet/minecraft/class_4185;)V method_19853 func_213079_a + m (Lnet/minecraft/class_1664;Lnet/minecraft/class_4185;)V method_19852 func_213080_a +c net/minecraft/class_5500 net/minecraft/client/gui/screen/WithNarratorSettingsScreen + m (Lnet/minecraft/class_4185;)V method_31049 func_243316_a + m ()V method_31050 func_243317_i + f Lnet/minecraft/class_339; field_26680 field_243314_p + f [Lnet/minecraft/class_316; field_26679 field_243313_c + f Lnet/minecraft/class_353; field_26681 field_243315_q +c net/minecraft/class_442 net/minecraft/client/gui/screen/MainMenuScreen + m (Lnet/minecraft/class_4185;)V method_19864 func_213090_i + m (Lnet/minecraft/class_4185;)V method_19862 func_213094_g + m ()Z method_31129 func_243319_k + m (Lnet/minecraft/class_4185;)V method_19863 func_213096_h + m ()V method_2252 switchToRealms + m (Lnet/minecraft/class_4185;)V method_20109 func_213088_f + m (II)V method_2249 addSingleplayerMultiplayerButtons + m (II)V method_2251 addDemoButtons + m (ZLnet/minecraft/class_4185;)V method_19858 func_213091_a + m (Z)V method_20375 deleteDemoWorld + m (Lnet/minecraft/class_4587;Ljava/lang/Integer;Ljava/lang/Integer;)V method_29066 func_238660_b_ + m (Lnet/minecraft/class_4587;Ljava/lang/Integer;Ljava/lang/Integer;)V method_29064 func_238657_a_ + m (Lnet/minecraft/class_1060;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_18105 loadAsync + m (Lnet/minecraft/class_4185;Lnet/minecraft/class_4587;II)V method_29065 func_238659_a_ + m ()Z method_2253 areRealmsNotificationsEnabled + m (Lnet/minecraft/class_4185;)V method_19861 func_213089_e + m (Lnet/minecraft/class_4185;)V method_19859 func_238661_c_ + m (Lnet/minecraft/class_4185;)V method_19860 func_213095_c + m (Lnet/minecraft/class_4185;)V method_19857 func_238658_a_ + f I field_2584 widthCopyright + f Lnet/minecraft/class_766; field_2585 panorama + f Z field_17776 showTitleWronglySpelled + f Lnet/minecraft/class_4185; field_2590 buttonResetDemo + f Lnet/minecraft/class_2960; field_17775 PANORAMA_OVERLAY_TEXTURES + f Z field_2599 hasCheckedForRealmsNotification + f I field_2606 widthCopyrightRest + f J field_17772 firstRenderTime + f Lnet/minecraft/class_2960; field_2594 MINECRAFT_TITLE_EDITION + f Lnet/minecraft/class_2960; field_2583 MINECRAFT_TITLE_TEXTURES + f Lnet/minecraft/class_437; field_2592 realmsNotification + f Ljava/lang/String; field_2586 splashText + f Z field_18222 showFadeInAnimation + f Lorg/apache/logging/log4j/Logger; field_23775 field_238656_b_ + f Lnet/minecraft/class_2960; field_19102 ACCESSIBILITY_TEXTURES + f Lnet/minecraft/class_751; field_17774 PANORAMA_RESOURCES +c net/minecraft/class_443 net/minecraft/client/gui/screen/OptionsSoundsScreen + m (Lnet/minecraft/class_4185;)V method_19855 func_213104_a + m (Lnet/minecraft/class_4185;)V method_19856 func_213105_b +c net/minecraft/class_445 net/minecraft/client/gui/screen/WinGameScreen + m ()V method_2257 sendRespawnPacket + m (IIF)V method_2258 drawWinGameScreen + m (Lnet/minecraft/class_4587;Ljava/lang/Integer;Ljava/lang/Integer;)V method_29347 func_238665_a_ + f Lnet/minecraft/class_2960; field_2631 MINECRAFT_EDITION + f Lnet/minecraft/class_2960; field_2626 MINECRAFT_LOGO + f Ljava/lang/String; field_24260 field_238663_q_ + f Ljava/lang/Runnable; field_2630 onFinished + f Lnet/minecraft/class_2960; field_2633 VIGNETTE_TEXTURE + f Z field_2627 poem + f F field_2635 scrollSpeed + f I field_2629 totalScrollLength + f Ljava/util/List; field_2634 lines + f Lorg/apache/logging/log4j/Logger; field_2632 LOGGER + f Lit/unimi/dsi/fastutil/ints/IntSet; field_24261 field_238664_v_ + f F field_2628 time +c net/minecraft/class_446 net/minecraft/client/gui/screen/VideoSettingsScreen + m (Lnet/minecraft/class_4185;)V method_30052 func_241605_a_ + m (Lnet/minecraft/class_4185;)V method_19865 func_213106_a + m (Lnet/minecraft/class_4185;)V method_30053 func_241606_b_ + f Lnet/minecraft/class_2561; field_25683 field_241599_p_ + f Lnet/minecraft/class_2561; field_25684 field_241600_q_ + f I field_19186 mipmapLevels + f [Lnet/minecraft/class_316; field_2640 OPTIONS + f Lnet/minecraft/class_2561; field_25686 field_241602_s_ + f Lnet/minecraft/class_2561; field_25682 field_241598_c_ + f Lnet/minecraft/class_5407; field_25688 field_241604_x_ + f Lnet/minecraft/class_2561; field_25685 field_241601_r_ + f Lnet/minecraft/class_2561; field_25687 field_241603_t_ + f Lnet/minecraft/class_353; field_2639 optionsRowList +c net/minecraft/class_452 net/minecraft/client/gui/IProgressMeter + m ()V method_2300 onStatsUpdated + f [Ljava/lang/String; field_2668 LOADING_STRINGS +c net/minecraft/class_447 net/minecraft/client/gui/screen/StatsScreen + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19392 func_213122_d + m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1792;)V method_2289 func_238667_a_ + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19391 func_238668_a_ + m (Lnet/minecraft/class_447;Lnet/minecraft/class_4587;IIII)V method_2260 func_238670_a_ + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19396 access$1400 + m ()V method_2267 initButtons + m (Lnet/minecraft/class_4185;)V method_19868 func_213109_d + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19395 func_238676_f_ + m ()V method_2270 initLists + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19394 func_213117_f + m (Lnet/minecraft/class_4185;)V method_19867 func_213115_c + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19393 func_238675_d_ + m (Lnet/minecraft/class_4185;)V method_19869 func_213113_a + m (Lnet/minecraft/class_4185;)V method_19866 func_213114_b + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19402 access$1900 + m (Lnet/minecraft/class_4280;)V method_19390 func_213110_a + m ()Lnet/minecraft/class_4280; method_19399 func_213116_d + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19401 access$1800 + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19400 access$1700 + m (Lnet/minecraft/class_4587;IIII)V method_2282 func_238674_c_ + m (I)I method_2285 func_195224_b + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19398 access$1600 + m (Lnet/minecraft/class_3445;)Ljava/lang/String; method_27027 func_238672_b_ + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19397 access$1500 + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_3469; method_2271 func_238673_b_ + m (Lnet/minecraft/class_447;Lnet/minecraft/class_4587;IILnet/minecraft/class_1792;)V method_2288 func_238671_a_ + m (Lnet/minecraft/class_3445;)Ljava/lang/String; method_27026 func_238666_a_ + m (Lnet/minecraft/class_447;I)I method_2284 func_238669_a_ + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_447$class_4200; method_2276 func_238677_g_ + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19404 func_238678_o_ + m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19403 access$2000 + f Lnet/minecraft/class_447$class_4198; field_2644 generalStats + f Lnet/minecraft/class_447$class_4202; field_2646 mobStats + f Lnet/minecraft/class_447$class_4200; field_2642 itemStats + f Lnet/minecraft/class_3469; field_2647 stats + f Lnet/minecraft/class_437; field_2648 parentScreen + f Lnet/minecraft/class_4280; field_2643 displaySlot + f Z field_2645 doesGuiPauseGame + f Lnet/minecraft/class_2561; field_26546 field_243320_c +c net/minecraft/class_447$1 net/minecraft/client/gui/screen/StatsScreen$1 +c net/minecraft/class_447$class_4202 net/minecraft/client/gui/screen/StatsScreen$MobStatsList + f Lnet/minecraft/class_447; field_18763 field_148223_k +c net/minecraft/class_447$class_4202$class_4201 net/minecraft/client/gui/screen/StatsScreen$MobStatsList$Entry + f Lnet/minecraft/class_2561; field_26551 field_243325_f + f Z field_26550 field_243324_e + f Lnet/minecraft/class_447$class_4202; field_18761 field_214410_a + f Lnet/minecraft/class_2561; field_26548 field_243322_c + f Z field_26552 field_243326_g + f Lnet/minecraft/class_1299; field_18762 field_214411_b + f Lnet/minecraft/class_2561; field_26549 field_243323_d +c net/minecraft/class_447$class_4200 net/minecraft/client/gui/screen/StatsScreen$StatsList + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_19407 func_238680_a_ + m (Lnet/minecraft/class_3448;)I method_19409 func_195105_b + m (Lnet/minecraft/class_3448;)V method_19408 func_195107_a + m (I)Lnet/minecraft/class_3448; method_19410 func_195108_d + m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_2561; method_19406 func_200208_a + f Ljava/util/List; field_18754 field_195113_v + f Lnet/minecraft/class_3448; field_18759 field_195110_A + f [I field_18753 field_195112_D + f Lnet/minecraft/class_447; field_18752 field_148220_k + f Ljava/util/List; field_18757 field_195116_y + f I field_18756 field_195115_x + f I field_18760 field_195111_B + f Ljava/util/Comparator; field_18758 field_195117_z + f Ljava/util/List; field_18755 field_195114_w +c net/minecraft/class_447$class_4200$class_450 net/minecraft/client/gui/screen/StatsScreen$StatsList$Comparator + m (Ljava/lang/Object;Ljava/lang/Object;)I compare compare + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;)I method_2297 compare + f Lnet/minecraft/class_447$class_4200; field_2662 field_198835_a +c net/minecraft/class_447$class_4200$class_4199 net/minecraft/client/gui/screen/StatsScreen$StatsList$Entry + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_3445;IIZ)V method_19405 func_238681_a_ + f Lnet/minecraft/class_447$class_4200; field_18751 field_214407_a +c net/minecraft/class_447$class_4198 net/minecraft/client/gui/screen/StatsScreen$CustomStatsList + m (Lnet/minecraft/class_3445;)Ljava/lang/String; method_27028 func_238679_a_ + f Lnet/minecraft/class_447; field_18750 field_148208_k +c net/minecraft/class_447$class_4198$class_4197 net/minecraft/client/gui/screen/StatsScreen$CustomStatsList$Entry + f Lnet/minecraft/class_3445; field_18749 field_214405_b + f Lnet/minecraft/class_2561; field_26547 field_243321_c + f Lnet/minecraft/class_447$class_4198; field_18748 field_214404_a +c net/minecraft/class_453 net/minecraft/client/gui/advancements/AdvancementTabType + m (I)I method_2305 getY + m ()I method_2304 getMax + m (IIILnet/minecraft/class_918;Lnet/minecraft/class_1799;)V method_2306 drawIcon + m (IIIDD)Z method_2303 inInsideTabSelector + m (Ljava/lang/String;)Lnet/minecraft/class_453; valueOf valueOf + m (I)I method_2302 getX + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_332;IIZI)V method_2301 renderTabSelectorBackground + m ()[Lnet/minecraft/class_453; values values + f I field_2669 max + f I field_2670 height + f I field_2671 width + f I field_2672 textureY + f [Lnet/minecraft/class_453; field_2676 $VALUES + f Lnet/minecraft/class_453; field_2677 RIGHT + f I field_2674 textureX + f Lnet/minecraft/class_453; field_2673 BELOW + f Lnet/minecraft/class_453; field_2675 LEFT + f Lnet/minecraft/class_453; field_2678 ABOVE +c net/minecraft/class_453$1 net/minecraft/client/gui/advancements/AdvancementTabType$1 + f [I field_2679 field_192647_a +c net/minecraft/class_454 net/minecraft/client/gui/advancements/AdvancementTabGui + m ()Lnet/minecraft/class_457; method_2312 getScreen + m (Lnet/minecraft/class_310;Lnet/minecraft/class_457;ILnet/minecraft/class_161;)Lnet/minecraft/class_454; method_2317 create + m (Lnet/minecraft/class_4587;IIZ)V method_2311 renderTabSelectorBackground + m (IILnet/minecraft/class_918;)V method_2315 drawIcon + m ()Lnet/minecraft/class_2561; method_2309 getTitle + m (IIDD)Z method_2316 isInsideTabSelector + m (Lnet/minecraft/class_4587;)V method_2310 drawTabBackground + m (DD)V method_2313 dragSelectedGui + m (Lnet/minecraft/class_4587;IIII)V method_2314 drawTabTooltips + m (Lnet/minecraft/class_456;Lnet/minecraft/class_161;)V method_2319 addGuiAdvancement + m ()Lnet/minecraft/class_161; method_2307 getAdvancement + m (Lnet/minecraft/class_161;)V method_2318 addAdvancement + m (Lnet/minecraft/class_161;)Lnet/minecraft/class_456; method_2308 getAdvancementGui + f D field_2690 scrollX + f Lnet/minecraft/class_161; field_2682 advancement + f I field_2693 minY + f I field_2694 minX + f Lnet/minecraft/class_185; field_2695 display + f Lnet/minecraft/class_453; field_2684 type + f Lnet/minecraft/class_456; field_2696 root + f Lnet/minecraft/class_1799; field_2697 icon + f D field_2689 scrollY + f Lnet/minecraft/class_2561; field_2686 title + f Ljava/util/Map; field_2685 guis + f F field_2688 fade + f I field_2691 maxY + f I field_2692 maxX + f Z field_2683 centered + f Lnet/minecraft/class_310; field_2680 minecraft + f I field_2681 index + f Lnet/minecraft/class_457; field_2687 screen +c net/minecraft/class_455 net/minecraft/client/gui/advancements/AdvancementState + m (Ljava/lang/String;)Lnet/minecraft/class_455; valueOf valueOf + m ()I method_2320 getId + m ()[Lnet/minecraft/class_455; values values + f I field_2700 id + f Lnet/minecraft/class_455; field_2701 OBTAINED + f [Lnet/minecraft/class_455; field_2698 $VALUES + f Lnet/minecraft/class_455; field_2699 UNOBTAINED +c net/minecraft/class_456 net/minecraft/client/gui/advancements/AdvancementEntryGui + m (Lnet/minecraft/class_2561;I)Ljava/util/List; method_2330 getDescriptionLines + m (Lnet/minecraft/class_456;)V method_2322 addGuiAdvancement + m (Lnet/minecraft/class_4587;II)V method_2325 drawAdvancement + m ()V method_2332 attachToParent + m ()I method_2327 getX + m ()I method_2326 getY + m (Lnet/minecraft/class_167;)V method_2333 setAdvancementProgress + m (IIII)Z method_2329 isMouseOver + m (Lnet/minecraft/class_161;)Lnet/minecraft/class_456; method_2328 getFirstVisibleParent + m (Lnet/minecraft/class_4587;IIIIIIIII)V method_2324 drawDescriptionBox + m (Lnet/minecraft/class_4587;IIFII)V method_2331 drawAdvancementHover + m (Lnet/minecraft/class_5225;Ljava/util/List;)F method_27572 getTextWidth + m (Lnet/minecraft/class_4587;IIIIIIII)V method_2321 drawDescriptionBoxBorder + m (Lnet/minecraft/class_4587;IIZ)V method_2323 drawConnectionLineToParent + f Lnet/minecraft/class_454; field_2703 guiAdvancementTab + f [I field_24262 LINE_BREAK_VALUES + f Ljava/util/List; field_2705 description + f I field_2715 width + f Ljava/util/List; field_2707 children + f Lnet/minecraft/class_185; field_2712 displayInfo + f Lnet/minecraft/class_167; field_2714 advancementProgress + f I field_2710 y + f Lnet/minecraft/class_310; field_2704 minecraft + f I field_2711 x + f Lnet/minecraft/class_2960; field_2709 WIDGETS + f Lnet/minecraft/class_456; field_2706 parent + f Lnet/minecraft/class_5481; field_2713 title + f Lnet/minecraft/class_161; field_2702 advancement +c net/minecraft/class_457 net/minecraft/client/gui/advancements/AdvancementsScreen + m (Lnet/minecraft/class_161;)Lnet/minecraft/class_454; method_2336 getTab + m (Lnet/minecraft/class_161;)Lnet/minecraft/class_456; method_2335 getAdvancementGui + m (Lnet/minecraft/class_4587;IIII)V method_2337 drawWindowBackground + m (Lnet/minecraft/class_4587;IIII)V method_2338 drawWindowTooltips + m (Lnet/minecraft/class_4587;II)V method_2334 renderWindow + f Lnet/minecraft/class_632; field_2721 clientAdvancementManager + f Lnet/minecraft/class_2561; field_26553 SAD_LABEL + f Z field_2718 isScrolling + f Lnet/minecraft/class_2960; field_2716 TABS + f Lnet/minecraft/class_2561; field_26554 EMPTY + f Lnet/minecraft/class_2960; field_2717 WINDOW + f Lnet/minecraft/class_2561; field_26555 GUI_LABEL + f Lnet/minecraft/class_454; field_2720 selectedTab + f Ljava/util/Map; field_2719 tabs +c net/minecraft/class_458 net/minecraft/client/gui/screen/ControlsScreen + m (Lnet/minecraft/class_4185;)V method_20412 func_213126_c + m (Lnet/minecraft/class_4185;)V method_19872 func_213125_b + m (Lnet/minecraft/class_4185;)V method_19873 func_213124_a + f Lnet/minecraft/class_4185; field_2725 buttonReset + f Lnet/minecraft/class_459; field_2728 keyBindingList + f J field_2723 time + f Lnet/minecraft/class_304; field_2727 buttonId +c net/minecraft/class_459 net/minecraft/client/gui/widget/list/KeyBindingList + m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20117 func_214340_i + m (Lnet/minecraft/class_459;)Lnet/minecraft/class_458; method_2343 func_238698_e_ + m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20110 access$100 + m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20111 func_214341_b + m (Lnet/minecraft/class_459;)I method_2345 func_238699_f_ + m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20112 func_214336_c + m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20113 func_214337_d + m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20114 func_238700_g_ + m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20115 func_214342_g + m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20116 func_214343_h + f Lnet/minecraft/class_458; field_2735 controlsScreen + f I field_2733 maxListLabelWidth +c net/minecraft/class_459$class_460 net/minecraft/client/gui/widget/list/KeyBindingList$CategoryEntry + f Lnet/minecraft/class_459; field_2738 field_148287_a + f I field_2737 labelWidth + f Lnet/minecraft/class_2561; field_2736 labelText +c net/minecraft/class_459$class_462 net/minecraft/client/gui/widget/list/KeyBindingList$KeyEntry + m (Lnet/minecraft/class_304;Lnet/minecraft/class_4185;)V method_19870 func_214387_a + m (Lnet/minecraft/class_304;Lnet/minecraft/class_4185;)V method_19871 func_214386_b + f Lnet/minecraft/class_2561; field_2741 keyDesc + f Lnet/minecraft/class_304; field_2740 keybinding + f Lnet/minecraft/class_459; field_2742 field_148284_a + f Lnet/minecraft/class_4185; field_2739 btnChangeKeyBinding + f Lnet/minecraft/class_4185; field_2743 btnReset +c net/minecraft/class_459$class_462$2 net/minecraft/client/gui/widget/list/KeyBindingList$KeyEntry$2 + f Lnet/minecraft/class_459; field_19190 field_194936_o + f Lnet/minecraft/class_459$class_462; field_24266 field_194935_q + f Lnet/minecraft/class_2561; field_24265 field_238702_b_ +c net/minecraft/class_459$class_462$1 net/minecraft/client/gui/widget/list/KeyBindingList$KeyEntry$1 + f Lnet/minecraft/class_459$class_462; field_24264 field_194932_q + f Lnet/minecraft/class_2561; field_24263 field_238701_c_ + f Lnet/minecraft/class_459; field_19187 field_194933_o + f Lnet/minecraft/class_304; field_19188 field_194931_p +c net/minecraft/class_459$class_461 net/minecraft/client/gui/widget/list/KeyBindingList$Entry +c net/minecraft/class_459$1 net/minecraft/client/gui/widget/list/KeyBindingList$1 +c net/minecraft/class_5289 net/minecraft/client/gui/screen/GamemodeSelectionScreen + m (Lnet/minecraft/class_5289$class_5291;Lnet/minecraft/class_5289$class_5290;)V method_28065 func_238714_a_ + m (Lnet/minecraft/class_5289;)Lnet/minecraft/class_918; method_28066 func_238715_a_ + m ()Lnet/minecraft/class_2960; method_28067 func_238716_g_ + m ()V method_28068 func_238717_j_ + m (Lnet/minecraft/class_310;Ljava/util/Optional;)V method_28064 func_238713_a_ + m ()Lnet/minecraft/class_1934; method_30106 func_241608_k_ + m ()Z method_28069 func_238718_l_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_5289$class_5290;)V method_28062 func_238712_a_ + f I field_24570 field_238708_r_ + f I field_24571 field_238709_s_ + f I field_24567 field_238704_b_ + f Lnet/minecraft/class_2561; field_25454 field_238705_c_ + f Ljava/util/List; field_24573 field_238711_u_ + f Z field_24572 field_238710_t_ + f Ljava/util/Optional; field_24568 field_238706_p_ + f Lnet/minecraft/class_2960; field_24566 field_238703_a_ + f Ljava/util/Optional; field_24569 field_238707_q_ +c net/minecraft/class_5289$class_5291 net/minecraft/client/gui/screen/GamemodeSelectionScreen$SelectorWidget + m (Lnet/minecraft/class_5289$class_5291;)Lnet/minecraft/class_5289$class_5290; method_28081 func_238739_a_ + m (Z)V method_28083 func_238741_e_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1060;)V method_28080 func_238738_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1060;)V method_28082 func_238740_b_ + f Z field_24587 field_238737_c_ + f Lnet/minecraft/class_5289; field_24585 field_238735_a_ + f Lnet/minecraft/class_5289$class_5290; field_24586 field_238736_b_ +c net/minecraft/class_5289$class_5290 net/minecraft/client/gui/screen/GamemodeSelectionScreen$Mode + m (Lnet/minecraft/class_918;II)V method_28074 func_238729_a_ + m (Lnet/minecraft/class_5289$class_5290;)Ljava/lang/String; method_28072 func_238727_a_ + m (Lnet/minecraft/class_5289$class_5290;)Lnet/minecraft/class_2561; method_28079 func_238734_c_ + m ()Lnet/minecraft/class_2561; method_28070 func_238725_a_ + m (Lnet/minecraft/class_1934;)Ljava/util/Optional; method_28071 func_238726_a_ + m (Lnet/minecraft/class_5289$class_5290;)Ljava/util/Optional; method_28077 func_238732_b_ + m (Lnet/minecraft/class_1934;)Ljava/util/Optional; method_28076 func_238731_b_ + m ()[Lnet/minecraft/class_5289$class_5290; values values + m ()Ljava/util/Optional; method_28078 func_238733_c_ + m (Ljava/lang/String;)Lnet/minecraft/class_5289$class_5290; valueOf valueOf + m (Lnet/minecraft/class_5289$class_5290;Lnet/minecraft/class_918;II)V method_28073 func_238728_a_ + m ()Ljava/lang/String; method_28075 func_238730_b_ + f [Lnet/minecraft/class_5289$class_5290; field_24580 field_238721_e_ + f Lnet/minecraft/class_5289$class_5290; field_24579 SPECTATOR + f Lnet/minecraft/class_2561; field_24581 field_238722_f_ + f Lnet/minecraft/class_5289$class_5290; field_24577 SURVIVAL + f Lnet/minecraft/class_5289$class_5290; field_24578 ADVENTURE + f Lnet/minecraft/class_5289$class_5290; field_24576 CREATIVE + f [Lnet/minecraft/class_5289$class_5290; field_24584 $VALUES + f Lnet/minecraft/class_1799; field_24583 field_238724_h_ + f Ljava/lang/String; field_24582 field_238723_g_ +c net/minecraft/class_5289$1 net/minecraft/client/gui/screen/GamemodeSelectionScreen$1 + f [I field_24575 field_238720_b_ + f [I field_24574 field_238719_a_ +c net/minecraft/class_465 net/minecraft/client/gui/screen/inventory/ContainerScreen + m (IIIIDD)Z method_2378 isPointInRegion + m (II)Z method_2384 itemStackMoved + m (I)V method_30107 hotkeySwapItems + m (Lnet/minecraft/class_1799;IILjava/lang/String;)V method_2382 drawItemStack + m (DDIII)Z method_2381 hasClickedOutside + m ()V method_2379 updateDragSplitting + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1735;)V method_2385 moveItems + m (DD)Lnet/minecraft/class_1735; method_2386 getSelectedSlot + m (Lnet/minecraft/class_1735;DD)Z method_2387 isSlotSelected + m (Lnet/minecraft/class_4587;FII)V method_2389 drawGuiContainerBackgroundLayer + m (Lnet/minecraft/class_1735;IILnet/minecraft/class_1713;)V method_2383 handleMouseClick + m (Lnet/minecraft/class_4587;II)V method_2388 drawGuiContainerForegroundLayer + m (Lnet/minecraft/class_4587;II)V method_2380 renderHoveredTooltip + f Lnet/minecraft/class_1735; field_2780 currentDragTargetSlot + f I field_2790 dragSplittingLimit + f I field_2776 guiLeft + f I field_2792 xSize + f Lnet/minecraft/class_1799; field_2782 draggedStack + f I field_2778 dragSplittingButton + f I field_2800 guiTop + f I field_2779 ySize + f Lnet/minecraft/class_1735; field_2802 returningStackDestSlot + f I field_2803 dragSplittingRemnant + f Lnet/minecraft/class_1735; field_2777 clickedSlot + f J field_2788 lastClickTime + f I field_25268 titleY + f I field_2784 touchUpX + f I field_25269 playerInventoryTitleX + f Lnet/minecraft/class_2960; field_2801 INVENTORY_BACKGROUND + f I field_2796 touchUpY + f Lnet/minecraft/class_1661; field_17410 playerInventory + f I field_25270 playerInventoryTitleY + f Lnet/minecraft/class_1799; field_2785 returningStack + f J field_2795 returningStackTime + f Z field_2789 isRightMouseClick + f Lnet/minecraft/class_1735; field_2799 lastClickSlot + f J field_2781 dragItemDropDelay + f Z field_2783 doubleClick + f Lnet/minecraft/class_1735; field_2787 hoveredSlot + f I field_25267 titleX + f Ljava/util/Set; field_2793 dragSplittingSlots + f I field_2786 lastClickButton + f Lnet/minecraft/class_1799; field_2791 shiftClickedSlot + f Z field_2798 ignoreMouseUp + f Z field_2794 dragSplitting + f Lnet/minecraft/class_1703; field_2797 container +c net/minecraft/class_463 net/minecraft/client/gui/screen/AbstractCommandBlockScreen + m ()I method_2364 func_195236_i + m (Ljava/lang/String;)V method_2360 func_214185_b + m (Lnet/minecraft/class_1918;)V method_2352 func_195235_a + m ()Lnet/minecraft/class_1918; method_2351 getLogic + m (Lnet/minecraft/class_463;)Lnet/minecraft/class_4717; method_23962 func_228185_a_ + m ()V method_2368 updateTrackOutput + m ()V method_2359 func_195234_k + m (Lnet/minecraft/class_4185;)V method_19876 func_214187_c + m (Lnet/minecraft/class_4185;)V method_19875 func_214186_b + m (Lnet/minecraft/class_4185;)V method_19874 func_214184_a + f Lnet/minecraft/class_4185; field_2762 doneButton + f Lnet/minecraft/class_2561; field_26556 field_243330_s + f Lnet/minecraft/class_4717; field_21617 suggestionHelper + f Lnet/minecraft/class_342; field_2755 resultTextField + f Lnet/minecraft/class_2561; field_26558 field_243332_u + f Lnet/minecraft/class_342; field_2751 commandTextField + f Lnet/minecraft/class_2561; field_26557 field_243331_t + f Lnet/minecraft/class_4185; field_2760 trackOutputButton + f Z field_2752 trackOutput + f Lnet/minecraft/class_4185; field_2753 cancelButton +c net/minecraft/class_463$1 net/minecraft/client/gui/screen/AbstractCommandBlockScreen$1 + f Lnet/minecraft/class_463; field_21632 field_228186_a_ +c net/minecraft/class_471 net/minecraft/client/gui/screen/inventory/AnvilScreen + m (Ljava/lang/String;)V method_2403 renameItem + f Lnet/minecraft/class_2561; field_26559 field_243333_B + f Lnet/minecraft/class_2960; field_2819 ANVIL_RESOURCE + f Lnet/minecraft/class_342; field_2821 nameField +c net/minecraft/class_489 net/minecraft/client/gui/screen/inventory/AbstractFurnaceScreen + m (Lnet/minecraft/class_4185;)V method_19877 func_214087_a + f Z field_2925 widthTooNarrowIn + f Lnet/minecraft/class_517; field_2924 recipeGui + f Lnet/minecraft/class_2960; field_18975 guiTexture + f Lnet/minecraft/class_2960; field_2926 BUTTON_TEXTURE +c net/minecraft/class_3871 net/minecraft/client/gui/screen/inventory/BlastFurnaceScreen + f Lnet/minecraft/class_2960; field_17115 GUI_TEXTURE +c net/minecraft/class_466 net/minecraft/client/gui/screen/inventory/BeaconScreen + m (Lnet/minecraft/class_466;Z)Z method_17545 func_214099_a + m (Lnet/minecraft/class_466;)Lnet/minecraft/class_1291; method_17548 func_214096_d + m (Lnet/minecraft/class_466;Lnet/minecraft/class_1291;)Lnet/minecraft/class_1291; method_17544 func_214095_a + m ()Lnet/minecraft/class_2960; method_2398 func_214103_b + m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2400 func_214102_j + m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2399 func_214098_k + m (Lnet/minecraft/class_466;)Ljava/util/List; method_2396 func_214104_a + m (Lnet/minecraft/class_466;)Ljava/util/List; method_2397 func_214101_b + m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2393 access$600 + m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2395 access$700 + m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2394 access$800 + m (Lnet/minecraft/class_466;Lnet/minecraft/class_1291;)Lnet/minecraft/class_1291; method_17546 func_214100_b + m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2392 access$900 + m (Lnet/minecraft/class_466;)Lnet/minecraft/class_1291; method_17547 func_214097_c + m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2390 access$1000 + f Lnet/minecraft/class_2561; field_26560 field_243334_B + f Lnet/minecraft/class_2561; field_26561 field_243335_C + f Lnet/minecraft/class_466$class_468; field_2804 beaconConfirmButton + f Lnet/minecraft/class_2960; field_2808 BEACON_GUI_TEXTURES + f Lnet/minecraft/class_1291; field_17413 secondaryEffect + f Z field_2805 buttonsNotDrawn + f Lnet/minecraft/class_1291; field_17412 primaryEffect +c net/minecraft/class_466$1 net/minecraft/client/gui/screen/inventory/BeaconScreen$1 + f Lnet/minecraft/class_1704; field_17414 field_213128_a + f Lnet/minecraft/class_466; field_17415 field_213129_b +c net/minecraft/class_466$class_4072 net/minecraft/client/gui/screen/inventory/BeaconScreen$SpriteButton + f I field_18224 u + f I field_18225 v +c net/minecraft/class_466$class_470 net/minecraft/client/gui/screen/inventory/BeaconScreen$Button + m (Z)V method_2401 setSelected + m ()Z method_2402 isSelected + m (Lnet/minecraft/class_4587;)V method_18641 func_230454_a_ + f Z field_2815 selected +c net/minecraft/class_466$class_467 net/minecraft/client/gui/screen/inventory/BeaconScreen$CancelButton + f Lnet/minecraft/class_466; field_2809 field_146146_o +c net/minecraft/class_466$class_469 net/minecraft/client/gui/screen/inventory/BeaconScreen$PowerButton + m (Lnet/minecraft/class_1291;Z)Lnet/minecraft/class_2561; method_30902 func_243337_a + f Lnet/minecraft/class_2561; field_26562 field_243336_e + f Z field_17416 field_212947_d + f Lnet/minecraft/class_466; field_2811 field_146150_o + f Lnet/minecraft/class_1291; field_2813 effect + f Lnet/minecraft/class_1058; field_18223 field_212946_c +c net/minecraft/class_466$class_468 net/minecraft/client/gui/screen/inventory/BeaconScreen$ConfirmButton + f Lnet/minecraft/class_466; field_2810 field_146147_o +c net/minecraft/class_3872 net/minecraft/client/gui/screen/ReadBookScreen + m (I)Z method_17556 showPage + m (I)Z method_17789 showPage2 + m ()V method_17558 addChangePageButtons + m ()V method_17057 previousPage + m ()V method_17058 nextPage + m ()V method_17059 updateButtons + m (Lnet/minecraft/class_3872$class_3931;)V method_17554 func_214155_a + m ()V method_17557 addDoneButton + m (Lnet/minecraft/class_2487;)Ljava/util/List; method_17555 nbtPagesToStrings + m (Lnet/minecraft/class_4185;)V method_19886 func_214161_c + m ()I method_17055 getPageCount + m (Lnet/minecraft/class_4185;)V method_19885 func_214159_b + m (DD)Lnet/minecraft/class_2583; method_17048 func_238805_a_ + m (Lnet/minecraft/class_4185;)V method_19884 func_214158_a + f Z field_18976 pageTurnSounds + f Lnet/minecraft/class_3872$class_3931; field_17418 bookInfo + f Ljava/util/List; field_17120 cachedPageLines + f Lnet/minecraft/class_3872$class_3931; field_17417 EMPTY_BOOK + f Lnet/minecraft/class_474; field_17123 buttonPreviousPage + f Lnet/minecraft/class_474; field_17122 buttonNextPage + f I field_17119 currPage + f I field_17121 cachedPage + f Lnet/minecraft/class_2561; field_25897 field_243344_s + f Lnet/minecraft/class_2960; field_17117 BOOK_TEXTURES +c net/minecraft/class_3872$1 net/minecraft/client/gui/screen/ReadBookScreen$1 +c net/minecraft/class_3872$class_3932 net/minecraft/client/gui/screen/ReadBookScreen$UnwrittenBookInfo + m (Lnet/minecraft/class_1799;)Ljava/util/List; method_17564 func_216919_b + f Ljava/util/List; field_17419 pages +c net/minecraft/class_3872$class_3931 net/minecraft/client/gui/screen/ReadBookScreen$IBookInfo + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_3872$class_3931; method_17562 func_216917_a + m ()I method_17560 getPageCount + m (I)Lnet/minecraft/class_5348; method_17563 func_238806_b_ + m (I)Lnet/minecraft/class_5348; method_17561 func_230456_a_ +c net/minecraft/class_3872$class_3933 net/minecraft/client/gui/screen/ReadBookScreen$WrittenBookInfo + m (Lnet/minecraft/class_1799;)Ljava/util/List; method_17565 func_216921_b + f Ljava/util/List; field_17420 pages +c net/minecraft/class_473 net/minecraft/client/gui/screen/EditBookScreen + m (III)Z method_2446 keyPressedInTitle + m ()V method_2414 func_238778_z_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_473$class_5234;Z)V method_27581 func_238756_a_ + m ()V method_17047 trimEmptyPages + m ([II)I method_27587 func_238763_a_ + m (Lnet/minecraft/class_473$class_5234;)Lnet/minecraft/class_473$class_5234; method_27590 func_238767_b_ + m ()V method_27598 func_238776_x_ + m ()Lnet/minecraft/class_473$class_5233; method_27578 func_238753_E_ + m (Ljava/lang/String;)Z method_27596 func_238774_g_ + m (I)V method_27589 func_238765_b_ + m (Lnet/minecraft/class_4185;)V method_19880 func_214212_c_ + m (Ljava/lang/String;)V method_27594 func_238772_f_ + m ()Ljava/lang/String; method_2427 getCurrPageText + m (Lnet/minecraft/class_4185;)V method_19878 func_214205_a_ + m ()V method_2444 nextPage + m (Ljava/lang/String;)V method_2439 func_214217_j + m ()V method_27577 func_238751_C_ + m ()Ljava/lang/String; method_27595 func_238773_g_ + m ()I method_17046 getPageCount + m (Lnet/minecraft/class_4185;)V method_19882 func_214204_a + m (Ljava/lang/String;Lnet/minecraft/class_5225;IIII)Lnet/minecraft/class_768; method_27585 func_238761_a_ + m ()Lnet/minecraft/class_473$class_5233; method_27576 func_238750_B_ + m (Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/lang/String;Lorg/apache/commons/lang3/mutable/MutableBoolean;Lit/unimi/dsi/fastutil/ints/IntList;Ljava/util/List;Lnet/minecraft/class_2583;II)V method_27586 func_238762_a_ + m (III)Z method_27592 keyPressedInBook + m ([II)I method_27591 func_238768_b_ + m ()V method_2436 addNewPage + m (Z)V method_2407 sendBookToServer + m ()V method_27597 func_238775_w_ + m (I)V method_27580 func_238755_a_ + m (Lnet/minecraft/class_473$class_5234;Lnet/minecraft/class_473$class_5234;)Lnet/minecraft/class_768; method_27583 func_238759_a_ + m ()V method_2421 func_238777_y_ + m (Lnet/minecraft/class_473$class_5234;)Lnet/minecraft/class_473$class_5234; method_27582 func_238758_a_ + m ([Lnet/minecraft/class_768;)V method_27588 func_238764_a_ + m (Ljava/lang/String;)Z method_27593 func_238771_e_ + m (Lnet/minecraft/class_4185;)V method_19879 func_214208_b_ + m ()V method_2437 previousPage + m ()V method_2413 updateButtons + m (Ljava/lang/String;)V method_27584 func_238760_a_ + m ()V method_27872 func_238752_D_ + m ()Ljava/lang/String; method_27579 func_238754_F_ + m (Lnet/minecraft/class_4185;)V method_19883 func_214201_b + m (Lnet/minecraft/class_4185;)V method_19881 func_214195_d_ + f Lnet/minecraft/class_5481; field_25895 field_243342_c + f Lnet/minecraft/class_4185; field_2841 buttonFinalize + f Lnet/minecraft/class_4185; field_2848 buttonDone + f J field_2830 lastClickTime + f Ljava/lang/String; field_2847 bookTitle + f Z field_2828 bookGettingSigned + f Lnet/minecraft/class_2561; field_25894 field_243341_b + f Lnet/minecraft/class_473$class_5233; field_24268 field_238747_F_ + f Lnet/minecraft/class_2561; field_25893 field_243340_a + f I field_2840 currPage + f I field_2827 cachedPage + f Lnet/minecraft/class_1799; field_2835 book + f Lnet/minecraft/class_3728; field_24269 field_238748_u_ + f Lnet/minecraft/class_4185; field_2831 buttonSign + f Lnet/minecraft/class_474; field_2839 buttonPreviousPage + f Z field_2837 bookIsModified + f Lnet/minecraft/class_2561; field_25892 field_243339_L + f Lnet/minecraft/class_1657; field_2826 editingPlayer + f Lnet/minecraft/class_4185; field_2849 buttonCancel + f Lnet/minecraft/class_2561; field_25891 field_243338_K + f I field_2844 updateCount + f Ljava/util/List; field_17116 bookPages + f Lnet/minecraft/class_474; field_2843 buttonNextPage + f Lnet/minecraft/class_3728; field_24270 field_238749_v_ + f Lnet/minecraft/class_5481; field_25896 field_243343_p + f Lnet/minecraft/class_1268; field_2832 hand +c net/minecraft/class_473$class_5234 net/minecraft/client/gui/screen/EditBookScreen$Point + f I field_24281 x + f I field_24282 y +c net/minecraft/class_473$class_475 net/minecraft/client/gui/screen/EditBookScreen$BookLine + m (Lnet/minecraft/class_473$class_475;)I method_17552 func_238801_b_ + m (Lnet/minecraft/class_473$class_475;)Lnet/minecraft/class_2583; method_27610 func_238804_e_ + m (Lnet/minecraft/class_473$class_475;)Ljava/lang/String; method_27609 func_238803_d_ + m (Lnet/minecraft/class_473$class_475;)I method_17550 func_238802_c_ + m (Lnet/minecraft/class_473$class_475;)Lnet/minecraft/class_2561; method_27608 func_238800_a_ + f Ljava/lang/String; field_24279 field_238796_b_ + f Lnet/minecraft/class_2561; field_24280 field_238797_c_ + f I field_2853 field_238799_e_ + f Lnet/minecraft/class_2583; field_24278 field_238795_a_ + f I field_2854 field_238798_d_ +c net/minecraft/class_473$class_5233 net/minecraft/client/gui/screen/EditBookScreen$BookPage + m (Lnet/minecraft/class_473$class_5233;)Z method_27607 func_238794_d_ + m (I)I method_27600 func_238787_a_ + m (Lnet/minecraft/class_473$class_5233;)[Lnet/minecraft/class_768; method_27605 func_238792_b_ + m (Lnet/minecraft/class_473$class_5233;)[Lnet/minecraft/class_473$class_475; method_27603 func_238790_a_ + m (I)I method_27604 func_238791_b_ + m (II)I method_27601 func_238788_a_ + m (Lnet/minecraft/class_327;Lnet/minecraft/class_473$class_5234;)I method_27602 func_238789_a_ + m ()Lnet/minecraft/class_473$class_5233; method_27599 func_238786_a_ + m (Lnet/minecraft/class_473$class_5233;)Lnet/minecraft/class_473$class_5234; method_27606 func_238793_c_ + f Lnet/minecraft/class_473$class_5233; field_24271 field_238779_a_ + f Z field_24274 field_238782_d_ + f [Lnet/minecraft/class_768; field_24277 field_238785_g_ + f [I field_24275 field_238783_e_ + f [Lnet/minecraft/class_473$class_475; field_24276 field_238784_f_ + f Lnet/minecraft/class_473$class_5234; field_24273 field_238781_c_ + f Ljava/lang/String; field_24272 field_238780_b_ +c net/minecraft/class_3934 net/minecraft/client/gui/screen/inventory/CartographyTableScreen + m (Lnet/minecraft/class_22;IIF)V method_17566 drawMapItem + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_22;ZZZZ)V method_17567 func_238807_a_ + f Lnet/minecraft/class_2960; field_17421 CONTAINER_TEXTURE +c net/minecraft/class_472 net/minecraft/client/gui/screen/inventory/BrewingStandScreen + f Lnet/minecraft/class_2960; field_2823 BREWING_STAND_GUI_TEXTURES + f [I field_2824 BUBBLELENGTHS +c net/minecraft/class_476 net/minecraft/client/gui/screen/inventory/ChestScreen + f I field_2864 inventoryRows + f Lnet/minecraft/class_2960; field_2861 CHEST_GUI_TEXTURE +c net/minecraft/class_477 net/minecraft/client/gui/screen/CommandBlockScreen + m (Lnet/minecraft/class_4185;)V method_19888 func_214190_b + m ()V method_2454 updateAutoExec + m (Lnet/minecraft/class_4185;)V method_19887 func_214189_a + m ()V method_2457 updateGui + m ()V method_2451 updateMode + m ()V method_2450 nextMode + m ()V method_2452 updateConditional + m (Lnet/minecraft/class_4185;)V method_19889 func_214191_c + f Z field_2868 conditional + f Lnet/minecraft/class_2593$class_2594; field_2870 commandBlockMode + f Lnet/minecraft/class_2593; field_2865 commandBlock + f Z field_2867 automatic + f Lnet/minecraft/class_4185; field_2866 autoExecBtn + f Lnet/minecraft/class_4185; field_2871 conditionalBtn + f Lnet/minecraft/class_4185; field_2869 modeBtn +c net/minecraft/class_477$1 net/minecraft/client/gui/screen/CommandBlockScreen$1 + f [I field_2875 field_216930_a +c net/minecraft/class_478 net/minecraft/client/gui/screen/inventory/CreativeCraftingListener + f Lnet/minecraft/class_310; field_2876 mc +c net/minecraft/class_479 net/minecraft/client/gui/screen/inventory/CraftingScreen + m (Lnet/minecraft/class_4185;)V method_19890 func_214076_a + f Lnet/minecraft/class_2960; field_2878 CRAFTING_TABLE_GUI_TEXTURES + f Lnet/minecraft/class_2960; field_2881 RECIPE_BUTTON_TEXTURE + f Lnet/minecraft/class_507; field_2880 recipeBookGui + f Z field_2877 widthTooNarrow +c net/minecraft/class_481 net/minecraft/client/gui/screen/inventory/CreativeScreen + m ()Lnet/minecraft/class_1277; method_2472 access$000 + m (Lnet/minecraft/class_1735;)Z method_2470 hasTmpInventory + m ()V method_2464 updateCreativeSearch + m (Ljava/lang/String;)V method_15871 searchTags + m ()Z method_2465 needsScrollBars + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1761;II)Z method_2471 func_238809_a_ + m (Lnet/minecraft/class_1761;DD)Z method_2463 isMouseOverGroup + m ()I method_2469 getSelectedTabIndex + m (Ljava/lang/String;Lnet/minecraft/class_2960;)Z method_15875 func_214084_a + m (Lnet/minecraft/class_1761;)V method_2466 setCurrentCreativeTab + m (Lnet/minecraft/class_310;IZZ)V method_2462 handleHotbarSnapshots + m (Lnet/minecraft/class_5414;Lnet/minecraft/class_2960;)V method_15873 func_214082_a + m (Lnet/minecraft/class_1792;Ljava/util/List;Lnet/minecraft/class_2960;Lnet/minecraft/class_3494;)V method_15872 func_214083_a + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1761;)V method_2468 func_238808_a_ + m (DD)Z method_2467 func_195376_a + m (Ljava/lang/String;Ljava/lang/String;Lnet/minecraft/class_2960;)Z method_15874 func_214081_a + f Z field_2888 field_195377_F + f Z field_2887 field_199506_G + f Lnet/minecraft/class_2960; field_2893 CREATIVE_INVENTORY_TABS + f Lnet/minecraft/class_1735; field_2889 destroyItemSlot + f Z field_2892 isScrolling + f Lnet/minecraft/class_478; field_2891 listener + f F field_2890 currentScroll + f I field_2896 selectedTabIndex + f Lnet/minecraft/class_2561; field_26563 field_243345_D + f Lnet/minecraft/class_1277; field_2895 TMP_INVENTORY + f Ljava/util/List; field_2886 originalSlots + f Ljava/util/Map; field_16201 tagSearchResults + f Lnet/minecraft/class_342; field_2894 searchField +c net/minecraft/class_481$class_484 net/minecraft/client/gui/screen/inventory/CreativeScreen$CreativeSlot + m (Lnet/minecraft/class_481$class_484;)Lnet/minecraft/class_1735; method_2475 access$100 + f Lnet/minecraft/class_1735; field_2898 slot +c net/minecraft/class_481$class_483 net/minecraft/client/gui/screen/inventory/CreativeScreen$CreativeContainer + m ()Z method_2474 canScroll + m (F)V method_2473 scrollTo + f Lnet/minecraft/class_2371; field_2897 itemList +c net/minecraft/class_481$class_482 net/minecraft/client/gui/screen/inventory/CreativeScreen$LockedSlot +c net/minecraft/class_485 net/minecraft/client/gui/DisplayEffectsScreen + m (Lnet/minecraft/class_4587;IILjava/lang/Iterable;)V method_18642 renderEffectBackground + m (Lnet/minecraft/class_4587;IILjava/lang/Iterable;)V method_18643 renderEffectSprites + m (Lnet/minecraft/class_4587;IILjava/lang/Iterable;)V method_18644 renderEffectText + m ()V method_2476 updateActivePotionEffects + m (Lnet/minecraft/class_4587;)V method_2477 renderEffects + f Z field_2900 hasActivePotionEffects +c net/minecraft/class_480 net/minecraft/client/gui/screen/inventory/DispenserScreen + f Lnet/minecraft/class_2960; field_2885 DISPENSER_GUI_TEXTURES +c net/minecraft/class_486 net/minecraft/client/gui/screen/EnchantmentScreen + m ()V method_2478 tickBook + f F field_2905 open + f F field_2904 oOpen + f Ljava/util/Random; field_2911 random + f F field_2912 flip + f I field_2915 ticks + f Lnet/minecraft/class_557; field_2908 MODEL_BOOK + f F field_2914 oFlip + f Lnet/minecraft/class_1799; field_2913 last + f Lnet/minecraft/class_2960; field_2901 ENCHANTMENT_TABLE_BOOK_TEXTURE + f Lnet/minecraft/class_2960; field_2910 ENCHANTMENT_TABLE_GUI_TEXTURE + f F field_2909 flipT + f F field_2906 flipA +c net/minecraft/class_487 net/minecraft/util/EnchantmentNameParts + m ()Lnet/minecraft/class_487; method_2481 getInstance + m (Lnet/minecraft/class_327;I)Lnet/minecraft/class_5348; method_2479 getGalacticEnchantmentName + m (J)V method_2480 reseedRandomGenerator + f Lnet/minecraft/class_2583; field_24284 GALACTIC_STYLE + f Ljava/util/Random; field_2918 rand + f Lnet/minecraft/class_2960; field_24283 GALACTIC_ALT_FONT + f [Ljava/lang/String; field_2916 namePartsArray + f Lnet/minecraft/class_487; field_2917 INSTANCE +c net/minecraft/class_3802 net/minecraft/client/gui/screen/GrindstoneScreen + f Lnet/minecraft/class_2960; field_16769 GRINDSTONE_GUI_TEXTURES +c net/minecraft/class_3873 net/minecraft/client/gui/screen/inventory/FurnaceScreen + f Lnet/minecraft/class_2960; field_17127 FURNACE_GUI_TEXTURES +c net/minecraft/class_491 net/minecraft/client/gui/screen/inventory/HorseInventoryScreen + f F field_2938 mousePosY + f Lnet/minecraft/class_2960; field_2937 HORSE_GUI_TEXTURES + f Lnet/minecraft/class_1496; field_2941 horseEntity + f F field_2939 mousePosx +c net/minecraft/class_488 net/minecraft/client/gui/screen/HopperScreen + f Lnet/minecraft/class_2960; field_2919 HOPPER_GUI_TEXTURE +c net/minecraft/class_4894 net/minecraft/client/gui/screen/inventory/AbstractRepairScreen + m ()V method_25445 initFields + m (Lnet/minecraft/class_4587;IIF)V method_25444 renderNameField + f Lnet/minecraft/class_2960; field_22794 guiTexture +c net/minecraft/class_490 net/minecraft/client/gui/screen/inventory/InventoryScreen + m (Lnet/minecraft/class_898;Lnet/minecraft/class_1309;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597$class_4598;)V method_29977 func_241611_a_ + m (IIIFFLnet/minecraft/class_1309;)V method_2486 drawEntityOnScreen + m (Lnet/minecraft/class_4185;)V method_19891 func_214086_a + f Z field_2932 removeRecipeBookGui + f Lnet/minecraft/class_2960; field_2933 RECIPE_BUTTON_TEXTURE + f Z field_2931 widthTooNarrow + f F field_2935 oldMouseX + f Z field_2930 buttonClicked + f F field_2934 oldMouseY + f Lnet/minecraft/class_507; field_2929 recipeBookGui +c net/minecraft/class_3935 net/minecraft/client/gui/screen/LecternScreen + m (I)V method_17572 func_214179_c + m ()V method_17574 func_214175_g + m ()V method_17575 func_214176_h + m (Lnet/minecraft/class_4185;)V method_19894 func_214178_a + m (Lnet/minecraft/class_3935;)V method_17570 func_214180_b + m (Lnet/minecraft/class_4185;)V method_19895 func_214181_b + m ()Lnet/minecraft/class_3916; method_17573 getContainer + m (Lnet/minecraft/class_3935;)V method_17568 func_214177_a + f Lnet/minecraft/class_1712; field_17423 field_214183_d + f Lnet/minecraft/class_3916; field_17422 field_214182_c +c net/minecraft/class_3935$1 net/minecraft/client/gui/screen/LecternScreen$1 + f Lnet/minecraft/class_3935; field_17424 field_213130_a +c net/minecraft/class_3742 net/minecraft/client/gui/screen/JigsawScreen + m ()V method_27272 func_238835_m_ + m ()V method_20118 func_214253_a + m (Lnet/minecraft/class_4185;)V method_19892 func_238825_a_ + m (Lnet/minecraft/class_4185;)V method_19893 func_238828_b_ + m ()V method_16346 func_214256_b + m (Lnet/minecraft/class_4185;)V method_27271 func_238831_c_ + m (Lnet/minecraft/class_4185;)V method_29349 func_238832_d_ + m ()Lnet/minecraft/class_2561; method_26413 func_238836_u_ + m (Lnet/minecraft/class_3742;)Z method_29348 func_238829_b_ + m ()V method_16348 func_214258_d + m (Lnet/minecraft/class_4185;)V method_26411 func_238834_e_ + m ()V method_16349 func_214257_c + m (Lnet/minecraft/class_3742;)I method_27269 func_238826_a_ + m (Lnet/minecraft/class_3742;I)I method_27270 func_238827_a_ + m (Ljava/lang/String;)V method_26412 func_214254_b + m (Ljava/lang/String;)V method_20119 func_238830_b_ + m (Ljava/lang/String;)V method_20120 func_238833_d_ + f Lnet/minecraft/class_2561; field_26564 field_243346_a + f I field_24052 field_238821_r_ + f Lnet/minecraft/class_2561; field_26566 field_243348_c + f Lnet/minecraft/class_2561; field_26565 field_243347_b + f Lnet/minecraft/class_2561; field_26568 field_243350_q + f Lnet/minecraft/class_2561; field_26567 field_243349_p + f Lnet/minecraft/class_342; field_23348 field_238818_b_ + f Lnet/minecraft/class_342; field_23349 field_238819_c_ + f Lnet/minecraft/class_342; field_23350 field_238820_p_ + f Lnet/minecraft/class_3751$class_4991; field_23352 field_238824_v_ + f Lnet/minecraft/class_342; field_16519 finalStateField + f Lnet/minecraft/class_4185; field_23351 field_238823_t_ + f Lnet/minecraft/class_4185; field_19103 doneButton + f Z field_25271 field_238822_s_ + f Lnet/minecraft/class_3751; field_16522 field_214259_a +c net/minecraft/class_3742$2 net/minecraft/client/gui/screen/JigsawScreen$2 + f Lnet/minecraft/class_3742; field_25272 field_238838_a_ +c net/minecraft/class_3742$1 net/minecraft/client/gui/screen/JigsawScreen$1 + f Lnet/minecraft/class_3742; field_24053 field_238837_a_ +c net/minecraft/class_3936 net/minecraft/client/gui/IHasContainer + m ()Lnet/minecraft/class_1703; method_17577 getContainer +c net/minecraft/class_494 net/minecraft/client/gui/screen/LoomScreen + m (III)V method_22692 func_228190_b_ + m ()V method_17576 containerChange + f Ljava/util/List; field_21841 field_230155_n_ + f Z field_2961 field_214125_w + f Z field_2962 field_214124_v + f Lnet/minecraft/class_1799; field_2967 patternStack + f Lnet/minecraft/class_630; field_21694 modelRender + f Lnet/minecraft/class_1799; field_2954 dyeStack + f Z field_2958 isScrolling + f Lnet/minecraft/class_1799; field_2955 bannerStack + f Lnet/minecraft/class_2960; field_2966 LOOM_GUI_TEXTURES + f F field_2968 field_214126_x + f I field_2963 field_214114_l + f I field_2970 indexStarting + f Z field_2965 displayPatternsIn +c net/minecraft/class_496 net/minecraft/client/gui/screen/EditMinecartCommandBlockScreen + f Lnet/minecraft/class_1918; field_2976 commandBlockLogic +c net/minecraft/class_492 net/minecraft/client/gui/screen/inventory/MerchantScreen + m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1914;)V method_19413 func_238839_a_ + m ()V method_2496 func_195391_j + m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1916;)V method_20221 func_238840_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1914;II)V method_20223 func_238842_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;II)V method_20222 func_238841_a_ + m (Lnet/minecraft/class_4185;)V method_19896 func_214132_a + m (Lnet/minecraft/class_492;Lnet/minecraft/class_4587;Lnet/minecraft/class_1799;II)V method_20225 func_238843_a_ + m (Lnet/minecraft/class_492;Lnet/minecraft/class_4587;Lnet/minecraft/class_1799;II)V method_20226 func_238844_b_ + m (Lnet/minecraft/class_492;)I method_20224 access$000 + m (I)Z method_20220 func_214135_a + m (Lnet/minecraft/class_492;Lnet/minecraft/class_4587;Lnet/minecraft/class_1799;II)V method_20227 func_238845_c_ + f Lnet/minecraft/class_2561; field_26569 field_243351_B + f [Lnet/minecraft/class_492$class_493; field_19162 field_214138_m + f Z field_19164 field_214140_o + f Lnet/minecraft/class_2561; field_26571 field_243353_D + f I field_19161 selectedMerchantRecipe + f Lnet/minecraft/class_2561; field_26570 field_243352_C + f I field_19163 field_214139_n + f Lnet/minecraft/class_2960; field_2950 MERCHANT_GUI_TEXTURE +c net/minecraft/class_492$class_493 net/minecraft/client/gui/screen/inventory/MerchantScreen$TradeButton + m ()I method_20228 func_212937_a + f Lnet/minecraft/class_492; field_19166 field_212939_b + f I field_19165 field_212938_a +c net/minecraft/class_495 net/minecraft/client/gui/screen/inventory/ShulkerBoxScreen + f Lnet/minecraft/class_2960; field_2973 GUI_TEXTURE +c net/minecraft/class_474 net/minecraft/client/gui/widget/button/ChangePageButton + f Z field_18977 playTurnSound + f Z field_2851 isForward +c net/minecraft/class_4895 net/minecraft/client/gui/screen/inventory/SmithingTableScreen + f Lnet/minecraft/class_2960; field_22795 GUI_TEXTURE +c net/minecraft/class_498 net/minecraft/client/gui/screen/EditSignScreen + m (Ljava/lang/String;)Z method_27611 func_238848_a_ + m (Ljava/lang/String;)V method_16205 func_238850_b_ + m (I)[Ljava/lang/String; method_27612 func_243354_a + m ()Ljava/lang/String; method_27613 func_238851_j_ + m (Lnet/minecraft/class_4185;)V method_2527 func_238847_a_ + m ()V method_2526 close + f I field_3030 updateCounter + f [Ljava/lang/String; field_24285 field_238846_r_ + f I field_3029 editLine + f Lnet/minecraft/class_2625; field_3031 tileSign + f Lnet/minecraft/class_837$class_4702; field_21525 signModel + f Lnet/minecraft/class_3728; field_3032 textInputUtil +c net/minecraft/class_3979 net/minecraft/client/gui/screen/inventory/StonecutterScreen + m ()I method_17953 getHiddenRows + m ()Z method_17954 canScroll + m ()V method_17955 onInventoryUpdate + m (III)V method_17951 drawRecipesItems + m (Lnet/minecraft/class_4587;IIIII)V method_17952 func_238853_b_ + f I field_17671 recipeIndexOffset + f Z field_17672 hasItemsInInputSlot + f F field_17674 sliderProgress + f Z field_17670 clickedOnSroll + f Lnet/minecraft/class_2960; field_17673 BACKGROUND_TEXTURE +c net/minecraft/class_3874 net/minecraft/client/gui/screen/inventory/SmokerScreen + f Lnet/minecraft/class_2960; field_17128 GUI_TEXTURE +c net/minecraft/class_497 net/minecraft/client/gui/screen/EditStructureScreen + m (Lnet/minecraft/class_4185;)V method_19910 func_214275_m + m (Ljava/lang/String;)J method_2504 parseSeed + m (Ljava/lang/String;)I method_2517 parseCoordinate + m ()V method_2511 updateToggleBoundingBox + m ()V method_2510 updateDirectionButtons + m (Lnet/minecraft/class_4185;)V method_19906 func_214278_i + m (Lnet/minecraft/class_4185;)V method_19908 func_214277_k + m ()V method_2509 updateMode + m (Lnet/minecraft/class_4185;)V method_19901 func_214268_d + m ()V method_2524 updateEntitiesButton + m (Lnet/minecraft/class_4185;)V method_19903 func_214269_f + m (Lnet/minecraft/class_2633$class_2634;)Z method_2516 func_210143_a + m (Lnet/minecraft/class_4185;)V method_19899 func_214272_b + m (Lnet/minecraft/class_4185;)V method_19911 func_214274_n + m (Ljava/lang/String;)F method_2500 parseIntegrity + m (Lnet/minecraft/class_4185;)V method_19905 func_214282_h + m (Lnet/minecraft/class_4185;)V method_19907 func_214280_j + m ()V method_2508 updateMirrorButton + m (Lnet/minecraft/class_4185;)V method_19909 func_214276_l + m (Lnet/minecraft/class_4185;)V method_19900 func_214273_c + m ()V method_2515 func_195275_h + m (Lnet/minecraft/class_4185;)V method_19902 func_214270_e + m ()V method_2514 func_195272_i + m (Lnet/minecraft/class_4185;)V method_19904 func_214281_g + m ()V method_2513 updateToggleAirButton + m (Lnet/minecraft/class_497;Ljava/lang/String;CI)Z method_16017 func_214279_a + m (Lnet/minecraft/class_4185;)V method_19898 func_214271_a + f Lnet/minecraft/class_2415; field_2996 mirror + f Lnet/minecraft/class_2776; field_3004 mode + f Lnet/minecraft/class_342; field_3005 nameEdit + f Lnet/minecraft/class_4185; field_2990 showEntitiesButton + f Lnet/minecraft/class_2561; field_26572 field_243355_a + f Lnet/minecraft/class_4185; field_3008 showAirButton + f Lnet/minecraft/class_2561; field_26574 field_243357_c + f Lnet/minecraft/class_342; field_2978 sizeZEdit + f Z field_2997 showAir + f Lnet/minecraft/class_4185; field_2981 rotateNinetyDegreesButton + f Lnet/minecraft/class_2561; field_26576 field_243359_q + f Lnet/minecraft/class_342; field_2992 seedEdit + f Lnet/minecraft/class_2633; field_2980 tileStructure + f Lnet/minecraft/class_2561; field_26580 field_243363_u + f Lnet/minecraft/class_4185; field_2993 rotate270DegressButton + f Lnet/minecraft/class_2561; field_26578 field_243361_s + f Lnet/minecraft/class_4185; field_3009 detectSizeButton + f Lnet/minecraft/class_342; field_2999 posYEdit + f Lnet/minecraft/class_4185; field_2994 cancelButton + f Lnet/minecraft/class_342; field_2988 sizeXEdit + f Lnet/minecraft/class_4185; field_3006 loadButton + f Lnet/minecraft/class_2470; field_3003 rotation + f Z field_2985 ignoreEntities + f Lnet/minecraft/class_2561; field_26573 field_243356_b + f Lnet/minecraft/class_4185; field_2979 mirrorButton + f Lnet/minecraft/class_4185; field_3001 showBoundingBoxButton + f Lnet/minecraft/class_2561; field_26577 field_243360_r + f Lnet/minecraft/class_4185; field_2995 rotateZeroDegreesButton + f Lnet/minecraft/class_342; field_3000 integrityEdit + f Z field_2983 showBoundingBox + f Lnet/minecraft/class_2561; field_26575 field_243358_p + f Lnet/minecraft/class_4185; field_3007 rotate180DegreesButton + f Lnet/minecraft/class_2561; field_26579 field_243362_t + f Lnet/minecraft/class_342; field_2986 dataEdit + f Lnet/minecraft/class_4185; field_2977 modeButton + f Lnet/minecraft/class_342; field_2982 posXEdit + f Lnet/minecraft/class_4185; field_3002 doneButton + f Lnet/minecraft/class_342; field_3010 posZEdit + f Lnet/minecraft/class_4185; field_2987 saveButton + f Ljava/text/DecimalFormat; field_2991 decimalFormat + f Lnet/minecraft/class_342; field_2998 sizeYEdit +c net/minecraft/class_497$1 net/minecraft/client/gui/screen/EditStructureScreen$1 + f Lnet/minecraft/class_497; field_3023 field_194960_o +c net/minecraft/class_497$2 net/minecraft/client/gui/screen/EditStructureScreen$2 + f [I field_3024 field_217098_c + f [I field_3025 field_217097_b + f [I field_3026 field_217096_a +c net/minecraft/class_500 net/minecraft/client/gui/screen/MultiplayerScreen + m ()V method_20121 func_214295_b + m (Lnet/minecraft/class_4185;)V method_19916 func_214288_e + m (Lnet/minecraft/class_4185;)V method_19915 func_214283_d + m (Lnet/minecraft/class_4185;)V method_19917 func_214286_f + m (Lnet/minecraft/class_4185;)V method_19918 func_214293_g + m (Lnet/minecraft/class_4267$class_504;)V method_2531 func_214287_a + m ()V method_2534 refreshServerList + m (Lnet/minecraft/class_4185;)V method_19912 func_214289_a + m ()Lnet/minecraft/class_644; method_2538 getOldServerPinger + m (Ljava/util/List;)V method_2528 func_238854_b_ + m (Lnet/minecraft/class_4185;)V method_19913 func_214291_b + m ()V method_2536 connectToSelected + m (Lnet/minecraft/class_4185;)V method_19914 func_214294_c + m (Z)V method_20377 func_214285_a + m (Z)V method_20378 func_214292_b + m (Z)V method_20379 func_214284_c + m (Lnet/minecraft/class_642;)V method_2548 connectToServer + m ()Lnet/minecraft/class_641; method_2529 getServerList + m (Z)V method_20380 func_214290_d + f Lnet/minecraft/class_1134$class_1136; field_3046 lanServerList + f Lnet/minecraft/class_642; field_3051 selectedServer + f Lnet/minecraft/class_644; field_3037 oldServerPinger + f Ljava/util/List; field_3042 hoveringText + f Lnet/minecraft/class_4185; field_3050 btnSelectServer + f Lnet/minecraft/class_4185; field_3047 btnDeleteServer + f Z field_3048 initialized + f Lnet/minecraft/class_1134$class_1135; field_3045 lanServerDetector + f Lorg/apache/logging/log4j/Logger; field_3044 LOGGER + f Lnet/minecraft/class_437; field_3049 parentScreen + f Lnet/minecraft/class_4267; field_3043 serverListSelector + f Lnet/minecraft/class_641; field_3040 savedServerList + f Lnet/minecraft/class_4185; field_3041 btnEditServer +c net/minecraft/class_4749 net/minecraft/client/gui/screen/MultiplayerWarningScreen + m (Lnet/minecraft/class_4185;)V method_24292 func_230165_b_ + m (Lnet/minecraft/class_4185;)V method_24291 func_230164_a_ + f Lnet/minecraft/class_4286; field_21848 field_230162_g_ + f Lnet/minecraft/class_2561; field_21844 field_230158_c_ + f Lnet/minecraft/class_437; field_21842 field_230156_a_ + f Lnet/minecraft/class_2561; field_21845 field_230159_d_ + f Lnet/minecraft/class_2561; field_21846 field_238858_q_ + f Lnet/minecraft/class_5489; field_21849 field_243364_s + f Lnet/minecraft/class_2561; field_21843 field_230157_b_ +c net/minecraft/class_4267 net/minecraft/client/gui/screen/ServerSelectionList + m ()Lnet/minecraft/class_2960; method_20128 func_243382_w + m ()V method_20131 setList + m ()Lnet/minecraft/class_2561; method_30905 func_243378_r + m ()Lnet/minecraft/class_2960; method_20129 func_243383_x + m ()Lnet/minecraft/class_2561; method_30906 func_243379_s + m (Lnet/minecraft/class_4267;Lnet/minecraft/class_350$class_351;)V method_22109 func_243375_a + m (Lnet/minecraft/class_4267$class_504;)Z method_30016 func_241612_b_ + m (Lnet/minecraft/class_4267$class_504;)V method_20122 setSelected + m ()Lnet/minecraft/class_2561; method_30903 func_243372_A + m (Ljava/util/List;)V method_20126 updateNetworkServers + m ()Lorg/apache/logging/log4j/Logger; method_20130 func_243384_y + m (Lnet/minecraft/class_641;)V method_20125 updateOnlineServers + m ()Lnet/minecraft/class_2561; method_30904 func_243376_f + m (Lnet/minecraft/class_4267;)I method_20123 func_243373_a + m ()Lnet/minecraft/class_2561; method_30909 func_243385_z + m ()Ljava/util/concurrent/ThreadPoolExecutor; method_20127 func_243377_g + m (Lnet/minecraft/class_4267;I)I method_20124 func_243374_a + m ()Lnet/minecraft/class_2561; method_30907 func_243380_t + m ()Lnet/minecraft/class_2561; method_30908 func_243381_u + f Lnet/minecraft/class_2561; field_26584 field_243368_u + f Lnet/minecraft/class_2561; field_26585 field_243369_v + f Lnet/minecraft/class_500; field_19108 owner + f Lnet/minecraft/class_2561; field_26586 field_243370_w + f Lnet/minecraft/class_2561; field_26581 field_243365_r + f Lnet/minecraft/class_2561; field_26582 field_243366_s + f Lnet/minecraft/class_4267$class_504; field_19110 lanScanEntry + f Lnet/minecraft/class_2561; field_26583 field_243367_t + f Ljava/util/List; field_19109 serverListInternet + f Lnet/minecraft/class_2960; field_19106 field_214359_c + f Lnet/minecraft/class_2960; field_19107 field_214360_d + f Lorg/apache/logging/log4j/Logger; field_19104 LOGGER + f Lnet/minecraft/class_2561; field_26587 field_243371_x + f Ljava/util/concurrent/ThreadPoolExecutor; field_19105 field_214358_b + f Ljava/util/List; field_19111 serverListLan +c net/minecraft/class_4267$class_4270 net/minecraft/client/gui/screen/ServerSelectionList$NormalEntry + m ()V method_29978 func_241613_a_ + m (Lnet/minecraft/class_4267$class_4270;)Lnet/minecraft/class_642; method_20135 func_214412_a + m (II)V method_22110 func_228196_a_ + m ()V method_20138 func_241615_d_ + m ()Z method_20136 canJoin + m (Ljava/lang/String;)Z method_29979 func_241614_a_ + m ()V method_29980 func_241616_e_ + m ()Lnet/minecraft/class_642; method_20133 getServerData + m (Lnet/minecraft/class_4587;IILnet/minecraft/class_2960;)V method_20134 func_238859_a_ + f Lnet/minecraft/class_2960; field_19121 serverIcon + f Ljava/lang/String; field_19122 lastIconB64 + f J field_19124 lastClickTime + f Lnet/minecraft/class_642; field_19120 server + f Lnet/minecraft/class_1043; field_19123 icon + f Lnet/minecraft/class_4267; field_19117 field_214413_a + f Lnet/minecraft/class_310; field_19119 mc + f Lnet/minecraft/class_500; field_19118 owner +c net/minecraft/class_4267$class_4268 net/minecraft/client/gui/screen/ServerSelectionList$LanScanEntry + f Lnet/minecraft/class_310; field_19112 mc +c net/minecraft/class_4267$class_4269 net/minecraft/client/gui/screen/ServerSelectionList$LanDetectedEntry + m ()Lnet/minecraft/class_1131; method_20132 getServerData + f J field_19116 lastClickTime + f Lnet/minecraft/class_2561; field_26588 field_243386_c + f Lnet/minecraft/class_1131; field_19114 serverData + f Lnet/minecraft/class_2561; field_26589 field_243387_d + f Lnet/minecraft/class_500; field_19115 screen + f Lnet/minecraft/class_310; field_19113 mc +c net/minecraft/class_4267$class_504 net/minecraft/client/gui/screen/ServerSelectionList$Entry +c net/minecraft/class_5369 net/minecraft/client/gui/screen/PackLoadingManager + m ()Ljava/util/stream/Stream; method_29643 func_238869_b_ + m ()V method_29642 func_241618_c_ + m (Lnet/minecraft/class_5369;)Ljava/util/List; method_29647 func_238873_d_ + m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_5369$class_5371; method_29640 func_238866_a_ + m (Lnet/minecraft/class_5369;)Ljava/util/List; method_29646 func_238872_c_ + m ()Ljava/util/stream/Stream; method_29639 func_238865_a_ + m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_5369$class_5371; method_29644 func_238870_b_ + m ()V method_29981 func_241619_d_ + m (Lnet/minecraft/class_5369;)Ljava/lang/Runnable; method_29645 func_238871_b_ + m (Lnet/minecraft/class_5369;)Ljava/util/function/Function; method_29641 func_243389_a + f Ljava/lang/Runnable; field_25458 field_238863_d_ + f Ljava/util/function/Function; field_25785 field_243388_d + f Lnet/minecraft/class_3283; field_25626 field_241617_a_ + f Ljava/util/List; field_25455 field_238860_a_ + f Ljava/util/function/Consumer; field_25459 field_238864_e_ + f Ljava/util/List; field_25456 field_238861_b_ +c net/minecraft/class_5369$class_5373 net/minecraft/client/gui/screen/PackLoadingManager$EnabledPack + f Lnet/minecraft/class_5369; field_25462 field_238881_b_ +c net/minecraft/class_5369$class_5374 net/minecraft/client/gui/screen/PackLoadingManager$DisabledPack + f Lnet/minecraft/class_5369; field_25463 field_238882_b_ +c net/minecraft/class_5369$class_5371 net/minecraft/client/gui/screen/PackLoadingManager$IPack + m ()Lnet/minecraft/class_3281; method_29648 func_230460_a_ + m ()Z method_29660 func_230473_l_ + m ()Lnet/minecraft/class_2561; method_29653 func_243390_f + m ()Lnet/minecraft/class_2960; method_30286 func_241868_a + m ()Z method_29661 func_238875_m_ + m ()Lnet/minecraft/class_5352; method_29652 func_230464_d_ + m ()V method_29658 func_230467_j_ + m ()V method_29659 func_230468_k_ + m ()Lnet/minecraft/class_2561; method_29651 func_230463_c_ + m ()Z method_29664 func_230470_p_ + m ()Lnet/minecraft/class_2561; method_29650 func_230462_b_ + m ()Z method_29654 func_230465_f_ + m ()Z method_29655 func_230466_g_ + m ()V method_29656 func_230471_h_ + m ()V method_29657 func_230472_i_ + m ()Z method_29662 func_238876_n_ + m ()Z method_29663 func_230469_o_ +c net/minecraft/class_5369$class_5372 net/minecraft/client/gui/screen/PackLoadingManager$AbstractPack + m ()Ljava/util/List; method_29667 func_230475_r_ + m ()Ljava/util/List; method_29666 func_230474_q_ + m (I)V method_29665 func_238879_a_ + m ()V method_29668 func_238880_s_ + f Lnet/minecraft/class_3288; field_25461 field_238878_b_ + f Lnet/minecraft/class_5369; field_25460 field_238877_a_ +c net/minecraft/class_521 net/minecraft/client/gui/widget/list/ResourcePackList + m (Lnet/minecraft/class_521;)I method_20139 func_238911_a_ + m ()Lnet/minecraft/class_2561; method_20143 func_238915_q_ + m (Lnet/minecraft/class_521;I)I method_20140 func_238912_a_ + m ()Lnet/minecraft/class_2561; method_20142 func_243405_f + m ()Lnet/minecraft/class_2960; method_20141 func_243406_g + f Lnet/minecraft/class_2960; field_19125 field_214367_b + f Lnet/minecraft/class_2561; field_18978 field_214370_e + f Lnet/minecraft/class_2561; field_19126 field_214368_c + f Lnet/minecraft/class_2561; field_19127 field_214369_d +c net/minecraft/class_521$class_4271 net/minecraft/client/gui/widget/list/ResourcePackList$ResourcePackEntry + m (Lnet/minecraft/class_310;Lnet/minecraft/class_2561;)Lnet/minecraft/class_5489; method_31230 func_244425_b + m (Z)V method_20146 func_238921_a_ + m ()Z method_20152 func_238920_a_ + m (Lnet/minecraft/class_310;Lnet/minecraft/class_2561;)Lnet/minecraft/class_5481; method_31229 func_244424_a + f Lnet/minecraft/class_5481; field_26784 field_244422_g + f Lnet/minecraft/class_5369$class_5371; field_19129 field_214431_d + f Lnet/minecraft/class_310; field_19128 field_214428_a + f Lnet/minecraft/class_521; field_19130 field_214430_c + f Lnet/minecraft/class_437; field_25476 field_214429_b + f Lnet/minecraft/class_5481; field_26590 field_243407_e + f Lnet/minecraft/class_5489; field_26591 field_243408_f + f Lnet/minecraft/class_5489; field_26785 field_244423_h +c net/minecraft/class_5375 net/minecraft/client/gui/screen/PackScreen + m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_2960; method_30287 func_243395_a + m (Ljava/nio/file/Path;Lorg/apache/commons/lang3/mutable/MutableBoolean;Ljava/nio/file/Path;)V method_29675 func_238901_a_ + m (Lnet/minecraft/class_1060;Lnet/minecraft/class_3288;)Lnet/minecraft/class_2960; method_30289 func_243397_a + m (Ljava/util/List;Z)V method_29676 func_238902_a_ + m ()Lorg/apache/logging/log4j/Logger; method_30290 func_243398_i + m (Lnet/minecraft/class_4185;Lnet/minecraft/class_4587;II)V method_29671 func_238897_a_ + m (Lnet/minecraft/class_310;Ljava/util/List;Ljava/nio/file/Path;)V method_29669 func_238895_a_ + m ()V method_30291 func_243399_k + m (Lnet/minecraft/class_521;Lnet/minecraft/class_5369$class_5371;)V method_29672 func_238898_a_ + m ()V method_29680 func_238906_l_ + m (Ljava/nio/file/Path;Ljava/nio/file/Path;Lorg/apache/commons/lang3/mutable/MutableBoolean;Ljava/nio/file/Path;)V method_29674 func_238900_a_ + m ()V method_29678 func_238904_g_ + m (Lnet/minecraft/class_521;Ljava/util/stream/Stream;)V method_29673 func_238899_a_ + m (Lnet/minecraft/class_4185;)V method_29670 func_238896_a_ + m (Lnet/minecraft/class_3288;Ljava/lang/String;)Lnet/minecraft/class_2960; method_30288 func_243396_a + m (Lnet/minecraft/class_4185;)V method_29982 func_238903_b_ + f Lnet/minecraft/class_5369; field_25468 field_238887_q_ + f Lnet/minecraft/class_2960; field_25786 field_243391_p + f Lorg/apache/logging/log4j/Logger; field_25464 field_238883_a_ + f Ljava/io/File; field_25474 field_241817_w_ + f Lnet/minecraft/class_437; field_25469 field_238888_r_ + f Lnet/minecraft/class_2561; field_25465 field_238884_b_ + f Lnet/minecraft/class_2561; field_25466 field_238885_c_ + f J field_25788 field_243393_t + f Lnet/minecraft/class_4185; field_25475 field_238894_x_ + f Lnet/minecraft/class_521; field_25473 field_238892_v_ + f Lnet/minecraft/class_521; field_25472 field_238891_u_ + f Ljava/util/Map; field_25789 field_243394_y + f Lnet/minecraft/class_5375$class_5426; field_25787 field_243392_s +c net/minecraft/class_5375$class_5426 net/minecraft/client/gui/screen/PackScreen$PackDirectoryWatcher + m ()V close close + m (Ljava/io/File;)Lnet/minecraft/class_5375$class_5426; method_30293 func_243403_a + m (Ljava/nio/file/Path;)V method_30294 func_243404_a + m ()Z method_30292 func_243402_a + f Ljava/nio/file/WatchService; field_25790 field_243400_a + f Ljava/nio/file/Path; field_25791 field_243401_b +c net/minecraft/class_517 net/minecraft/client/gui/recipebook/AbstractRecipeBookGui + m ()Lnet/minecraft/class_1792; method_2658 func_212961_n + m ()Ljava/util/Set; method_17065 func_212958_h + f Lnet/minecraft/class_1735; field_3150 field_212966_k + f Ljava/util/Set; field_3149 field_212965_j + f Ljava/util/Iterator; field_3153 field_212964_i + f F field_3151 field_212968_m + f Lnet/minecraft/class_1792; field_3152 field_212967_l +c net/minecraft/class_505 net/minecraft/client/gui/recipebook/GhostRecipe + m ()V method_2571 clear + m (Lnet/minecraft/class_1856;II)V method_2569 addIngredient + m (Lnet/minecraft/class_505;)F method_2568 access$000 + m (Lnet/minecraft/class_1860;)V method_2565 setRecipe + m ()Lnet/minecraft/class_1860; method_2566 getRecipe + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_310;IIZF)V method_2567 func_238922_a_ + m (I)Lnet/minecraft/class_505$class_506; method_2570 get + m ()I method_2572 size + f Lnet/minecraft/class_1860; field_3079 recipe + f F field_3080 time + f Ljava/util/List; field_3081 ingredients +c net/minecraft/class_505$class_506 net/minecraft/client/gui/recipebook/GhostRecipe$GhostIngredient + m ()Lnet/minecraft/class_1799; method_2573 getItem + m ()I method_2575 getY + m ()I method_2574 getX + f Lnet/minecraft/class_505; field_3085 field_194185_a + f I field_3084 x + f Lnet/minecraft/class_1856; field_3082 ingredient + f I field_3083 y +c net/minecraft/class_3875 net/minecraft/client/gui/recipebook/BlastFurnaceRecipeGui + f Lnet/minecraft/class_2561; field_26592 field_243409_i +c net/minecraft/class_507 net/minecraft/client/gui/recipebook/RecipeBookGui + m (Lnet/minecraft/class_1735;)V method_2600 slotClicked + m ()Lnet/minecraft/class_2561; method_17064 func_230479_g_ + m (Ljava/lang/String;)V method_2576 pirateRecipe + m (Lnet/minecraft/class_1860;Ljava/util/List;)V method_2596 setupGhostRecipe + m (Lnet/minecraft/class_4587;IIII)V method_2602 func_238925_d_ + m ()V method_2606 updateTabs + m (Z)V method_2603 updateCollections + m (Lit/unimi/dsi/fastutil/objects/ObjectSet;Lnet/minecraft/class_516;)Z method_2594 func_193947_a + m (Lnet/minecraft/class_4587;IIZF)V method_2581 func_230477_a_ + m ()V method_2586 updateSearch + m ()Lnet/minecraft/class_2561; method_2599 func_230478_f_ + m ()V method_2591 toggleVisibility + m ()V method_2588 sendUpdateSettings + m ()V method_2590 tick + m (Lnet/minecraft/class_516;)Z method_2583 func_193953_b + m (Lnet/minecraft/class_512;)Z method_2582 func_209505_a + m (Lnet/minecraft/class_516;)V method_2577 func_193944_d + m ()V method_2585 func_205702_a + m (Lnet/minecraft/class_4587;IIII)V method_2601 func_238924_c_ + m (DDIIIII)Z method_2598 func_195604_a + m (Z)V method_2593 setVisible + m ()Z method_2604 isOffsetNextToMainGUI + m (ZII)I method_2595 updateScreenPosition + m ()V method_2587 updateStackedContents + m ()Z method_2589 toggleCraftableFilter + m (Z)V method_2579 initSearchBar + m (IILnet/minecraft/class_310;ZLnet/minecraft/class_1729;)V method_2597 init + m ()V method_2607 removed + m ()V method_2592 recipesUpdated + m (Lnet/minecraft/class_516;)Z method_2584 func_193958_a + m ()Z method_2605 isVisible + m (Lnet/minecraft/class_516;)Z method_2580 func_193952_b + f Lnet/minecraft/class_2561; field_26593 field_243410_j + f Ljava/util/List; field_3094 recipeTabs + f Ljava/lang/String; field_3099 lastSearch + f Lnet/minecraft/class_513; field_3086 recipeBookPage + f I field_3093 timesInventoryChanged + f Lnet/minecraft/class_505; field_3092 ghostRecipe + f I field_3100 height + f Lnet/minecraft/class_1662; field_3090 stackedContents + f Lnet/minecraft/class_2561; field_25711 field_241620_l_ + f Z field_3087 field_199738_u + f Lnet/minecraft/class_310; field_3091 mc + f Lnet/minecraft/class_2561; field_26594 field_243411_k + f I field_3102 xOffset + f Lnet/minecraft/class_512; field_3098 currentTab + f Lnet/minecraft/class_361; field_3088 toggleRecipesBtn + f Lnet/minecraft/class_342; field_3089 searchBar + f I field_3101 width + f Lnet/minecraft/class_2960; field_3097 RECIPE_BOOK + f Lnet/minecraft/class_1729; field_3095 field_201522_g + f Lnet/minecraft/class_299; field_3096 recipeBook +c net/minecraft/class_508 net/minecraft/client/gui/recipebook/RecipeOverlayGui + m (Lnet/minecraft/class_508;)F method_2610 access$400 + m ()Lnet/minecraft/class_2960; method_2611 access$100 + m (Z)V method_2613 setVisible + m (Lnet/minecraft/class_310;Lnet/minecraft/class_516;IIIIF)V method_2617 func_201703_a + m ()Z method_2616 isVisible + m ()Lnet/minecraft/class_516; method_2614 getRecipeList + m ()Lnet/minecraft/class_1860; method_2615 getLastRecipeClicked + m (Lnet/minecraft/class_508;)Z method_2609 access$300 + m (Lnet/minecraft/class_508;)Lnet/minecraft/class_310; method_2608 access$200 + m (Lnet/minecraft/class_4587;IIIIII)V method_2618 func_238923_c_ + f Lnet/minecraft/class_1860; field_3104 lastRecipeClicked + f F field_3110 time + f Lnet/minecraft/class_310; field_3108 mc + f I field_3105 x + f I field_3103 y + f Z field_3107 visible + f Lnet/minecraft/class_516; field_3111 recipeList + f Ljava/util/List; field_3106 buttonList + f Z field_3112 field_201704_n + f Lnet/minecraft/class_2960; field_3109 RECIPE_BOOK_TEXTURE +c net/minecraft/class_508$class_511 net/minecraft/client/gui/recipebook/RecipeOverlayGui$FurnaceRecipeButtonWidget + f Lnet/minecraft/class_508; field_3121 field_201507_q +c net/minecraft/class_508$class_509 net/minecraft/client/gui/recipebook/RecipeOverlayGui$RecipeButtonWidget + m (Lnet/minecraft/class_1860;)V method_2619 func_201505_a + m (Lnet/minecraft/class_508$class_509;)Lnet/minecraft/class_1860; method_2620 access$000 + f Z field_3115 isCraftable + f Lnet/minecraft/class_508; field_3113 field_193926_o + f Lnet/minecraft/class_1860; field_3114 recipe + f Ljava/util/List; field_3116 field_201506_o +c net/minecraft/class_508$class_509$class_510 net/minecraft/client/gui/recipebook/RecipeOverlayGui$RecipeButtonWidget$Child + f I field_3118 field_201707_c + f I field_3119 field_201706_b + f Lnet/minecraft/class_508$class_509; field_3117 field_201708_d + f [Lnet/minecraft/class_1799; field_3120 field_201705_a +c net/minecraft/class_512 net/minecraft/client/gui/recipebook/RecipeTabToggleWidget + m (Lnet/minecraft/class_299;)Z method_2624 func_199500_a + m ()Lnet/minecraft/class_314; method_2623 func_201503_d + m (Lnet/minecraft/class_310;)V method_2622 startAnimation + m (Lnet/minecraft/class_918;)V method_2621 renderIcon + f Lnet/minecraft/class_314; field_3123 category + f F field_3122 animationTime +c net/minecraft/class_513 net/minecraft/client/gui/recipebook/RecipeBookPage + m ()Lnet/minecraft/class_1860; method_2631 getLastClickedRecipe + m (DDIIIII)Z method_2632 func_198955_a + m (Lnet/minecraft/class_4587;IIIIF)V method_2634 func_238927_a_ + m (Ljava/util/List;Z)V method_2627 updateLists + m ()Lnet/minecraft/class_516; method_2635 getLastClickedRecipeList + m ()V method_2626 updateArrowButtons + m (Lnet/minecraft/class_507;)V method_2630 addListener + m (Lnet/minecraft/class_310;II)V method_2636 init + m ()V method_2638 setInvisible + m (Ljava/util/List;)V method_2629 recipesShown + m (Lnet/minecraft/class_4587;II)V method_2628 func_238926_a_ + m ()V method_2625 updateButtonsForPage + m ()Lnet/minecraft/class_310; method_2637 func_203411_d + m ()Lnet/minecraft/class_3439; method_2633 func_203412_e + f I field_3124 totalPages + f Lnet/minecraft/class_310; field_3126 minecraft + f Lnet/minecraft/class_516; field_3133 lastClickedRecipeList + f Lnet/minecraft/class_514; field_3129 hoveredButton + f Lnet/minecraft/class_361; field_3128 forwardButton + f Lnet/minecraft/class_361; field_3130 backButton + f Lnet/minecraft/class_508; field_3132 overlay + f Ljava/util/List; field_3134 listeners + f Lnet/minecraft/class_3439; field_3136 recipeBook + f Ljava/util/List; field_3127 recipeLists + f Ljava/util/List; field_3131 buttons + f I field_3135 currentPage + f Lnet/minecraft/class_1860; field_3125 lastClickedRecipe +c net/minecraft/class_516 net/minecraft/client/gui/recipebook/RecipeList + m ()Ljava/util/List; method_2650 getRecipes + m (Z)Ljava/util/List; method_2651 getRecipes + m ()Z method_2652 isNotEmpty + m (Lnet/minecraft/class_3439;)V method_2647 updateKnownRecipes + m ()Z method_2657 containsValidRecipes + m (Lnet/minecraft/class_1662;IILnet/minecraft/class_3439;)V method_2649 canCraft + m (Ljava/util/List;)Z method_30295 func_243413_a + m (Lnet/minecraft/class_1860;)Z method_2653 isCraftable + m ()Z method_2655 containsCraftableRecipes + m (Z)Ljava/util/List; method_2648 getDisplayRecipes + m ()Z method_2656 hasSingleResultItem + f Z field_3148 singleResultItem + f Ljava/util/List; field_3144 recipes + f Ljava/util/Set; field_3147 inBook + f Ljava/util/Set; field_3145 canFit + f Ljava/util/Set; field_3146 craftable +c net/minecraft/class_514 net/minecraft/client/gui/recipebook/RecipeWidget + m (II)V method_2641 setPosition + m ()Z method_2642 isOnlyOption + m ()Ljava/util/List; method_2639 getOrderedRecipes + m ()Lnet/minecraft/class_516; method_2645 getList + m (Lnet/minecraft/class_516;Lnet/minecraft/class_513;)V method_2640 func_203400_a + m (Lnet/minecraft/class_437;)Ljava/util/List; method_2644 getToolTipText + m ()Lnet/minecraft/class_1860; method_2643 getRecipe + f Lnet/minecraft/class_3439; field_3138 book + f I field_3141 currentIndex + f Lnet/minecraft/class_2561; field_26595 field_243412_b + f Lnet/minecraft/class_1729; field_3137 field_203401_p + f Lnet/minecraft/class_516; field_3142 list + f Lnet/minecraft/class_2960; field_3143 RECIPE_BOOK + f F field_3140 time + f F field_3139 animationTime +c net/minecraft/class_518 net/minecraft/client/gui/recipebook/IRecipeShownListener + m ()Lnet/minecraft/class_507; method_2659 getRecipeGui + m ()V method_16891 recipesUpdated +c net/minecraft/class_515 net/minecraft/client/gui/recipebook/IRecipeUpdateListener + m (Ljava/util/List;)V method_2646 recipesShown +c net/minecraft/class_3877 net/minecraft/client/gui/recipebook/SmokerRecipeGui + f Lnet/minecraft/class_2561; field_26597 field_243415_i +c net/minecraft/class_3876 net/minecraft/client/gui/recipebook/FurnaceRecipeGui + f Lnet/minecraft/class_2561; field_26596 field_243414_i +c net/minecraft/class_5235 net/minecraft/client/gui/screen/EditGamerulesScreen + m (Lnet/minecraft/class_4185;)V method_27619 func_238971_a_ + m (Ljava/util/List;)V method_27624 func_238980_b_ + m (Lnet/minecraft/class_4185;)V method_27625 func_238976_b_ + m ()V method_27632 func_238984_g_ + m (Lnet/minecraft/class_5235$class_5240;)V method_27620 func_238972_a_ + m (Lnet/minecraft/class_5235$class_5240;)V method_27626 func_238977_b_ + m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_27627 func_243437_f + m (Lnet/minecraft/class_5235;Lnet/minecraft/class_5235$class_5240;)V method_27628 func_241633_a_ + m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_27630 func_243438_g + m (Lnet/minecraft/class_5235;Ljava/util/List;)V method_27623 func_243436_a + m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_29985 func_241636_d_ + m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_29986 func_241637_e_ + m (Lnet/minecraft/class_5235;Lnet/minecraft/class_5235$class_5240;)V method_27622 func_243435_a + m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_27621 func_238973_a_ + m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_29984 func_238978_b_ + m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_27629 func_238981_c_ + m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_327; method_27631 func_243439_h + f Ljava/util/function/Consumer; field_24293 field_238965_a_ + f Ljava/util/List; field_24297 field_238969_q_ + f Lnet/minecraft/class_4185; field_24296 field_238968_p_ + f Lnet/minecraft/class_1928; field_24298 field_238970_r_ + f Ljava/util/Set; field_24295 field_238967_c_ + f Lnet/minecraft/class_5235$class_5241; field_24294 field_238966_b_ +c net/minecraft/class_5235$class_5241 net/minecraft/client/gui/screen/EditGamerulesScreen$GamerulesList + m (Ljava/util/Map$Entry;)V method_27638 func_239005_b_ + m (Ljava/util/Map$Entry;)V method_27637 func_239004_a_ + f Lnet/minecraft/class_5235; field_24313 field_239003_a_ +c net/minecraft/class_5235$class_5241$1 net/minecraft/client/gui/screen/EditGamerulesScreen$GamerulesList$1 + m (Lnet/minecraft/class_2561;Ljava/util/List;Ljava/lang/String;Lnet/minecraft/class_1928$class_4310;)Lnet/minecraft/class_5235$class_5240; method_27641 func_239012_a_ + m (Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_5235$class_5238;)V method_27640 func_239011_a_ + m (Lnet/minecraft/class_1928$class_5198;)Ljava/util/Map; method_27639 func_239010_a_ + m (Lnet/minecraft/class_2561;Ljava/util/List;Ljava/lang/String;Lnet/minecraft/class_1928$class_4312;)Lnet/minecraft/class_5235$class_5240; method_27642 func_239013_a_ + f Ljava/util/Map; field_24316 field_239008_c_ + f Lnet/minecraft/class_1928; field_24315 field_239007_b_ + f Lnet/minecraft/class_5235$class_5241; field_24317 field_239009_d_ + f Lnet/minecraft/class_5235; field_24314 field_239006_a_ +c net/minecraft/class_5235$class_5239 net/minecraft/client/gui/screen/EditGamerulesScreen$IntegerEntry + m (Lnet/minecraft/class_1928$class_4312;Ljava/lang/String;)V method_27635 func_238999_a_ + f Lnet/minecraft/class_5235; field_24307 field_238995_a_ + f Lnet/minecraft/class_342; field_24309 field_238997_d_ +c net/minecraft/class_5235$class_5240 net/minecraft/client/gui/screen/EditGamerulesScreen$Gamerule + m (Lnet/minecraft/class_5235$class_5240;)Ljava/util/List; method_27636 func_243440_a + f Ljava/util/List; field_24311 field_239000_a_ + f Lnet/minecraft/class_5235; field_24312 field_239001_b_ +c net/minecraft/class_5235$class_5238 net/minecraft/client/gui/screen/EditGamerulesScreen$IRuleEntry + m (Lnet/minecraft/class_2561;Ljava/util/List;Ljava/lang/String;Lnet/minecraft/class_1928$class_4315;)Lnet/minecraft/class_5235$class_5240; create create +c net/minecraft/class_5235$class_5400 net/minecraft/client/gui/screen/EditGamerulesScreen$ValueEntry + m (Lnet/minecraft/class_4587;II)V method_29989 func_241649_a_ + f Ljava/util/List; field_25630 field_241647_b_ + f Ljava/util/List; field_25629 field_241646_a_ + f Lnet/minecraft/class_5235; field_25631 field_241648_c_ +c net/minecraft/class_5235$class_5236 net/minecraft/client/gui/screen/EditGamerulesScreen$BooleanEntry + m (Lnet/minecraft/class_1928$class_4310;Lnet/minecraft/class_4185;)V method_29987 func_238988_a_ + f Lnet/minecraft/class_4185; field_24300 field_238986_c_ + f Lnet/minecraft/class_5235; field_24299 field_238985_a_ +c net/minecraft/class_5235$class_5236$1 net/minecraft/client/gui/screen/EditGamerulesScreen$BooleanEntry$1 + f Lnet/minecraft/class_5235; field_24302 field_238990_a_ + f Lnet/minecraft/class_5235$class_5236; field_24304 field_238992_c_ + f Lnet/minecraft/class_2561; field_25627 field_241644_b_ + f Lnet/minecraft/class_1928$class_4310; field_25628 field_241645_c_ + f Ljava/lang/String; field_24303 field_238991_b_ +c net/minecraft/class_5235$class_5237 net/minecraft/client/gui/screen/EditGamerulesScreen$NameEntry + f Lnet/minecraft/class_5235; field_24305 field_238993_a_ + f Lnet/minecraft/class_2561; field_24306 field_238994_c_ +c net/minecraft/class_525 net/minecraft/client/gui/screen/CreateWorldScreen + m (Lnet/minecraft/class_525;)Lnet/minecraft/class_525$class_4539; method_23489 func_243426_b + m (Lnet/minecraft/class_4185;)V method_19923 func_214321_c + m ()Lnet/minecraft/class_2561; method_30508 func_243431_m + m (Lnet/minecraft/class_4185;)V method_27618 func_238956_g_ + m (Lnet/minecraft/class_437;)Lnet/minecraft/class_525; method_31130 func_243425_a + m (Lnet/minecraft/class_4185;)V method_29692 func_214320_g + m (Lnet/minecraft/class_525;)Lnet/minecraft/class_1267; method_27617 func_243428_e + m (Lnet/minecraft/class_525;)Lnet/minecraft/class_2561; method_23492 func_243427_d + m (Lorg/apache/commons/lang3/mutable/MutableObject;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_29688 func_238947_a_ + m (Lnet/minecraft/class_4185;)V method_19921 func_214317_a + m ()V method_29695 func_238959_w_ + m ()V method_30298 func_243432_s + m ()Ljava/nio/file/Path; method_29693 func_238957_j_ + m (Lnet/minecraft/class_5359;Lnet/minecraft/class_5350;)V method_29681 func_243424_a + m (Ljava/nio/file/Path;)V method_29689 func_238948_b_ + m ()V method_2727 calcSaveDirName + m ()V method_29697 func_241631_y_ + m (Ljava/nio/file/Path;Ljava/nio/file/Path;)Z method_29686 func_238944_a_ + m (Z)V method_29691 func_241630_d_ + m (Ljava/util/List;Ljava/lang/String;)Z method_29983 func_241626_a_ + m (Lnet/minecraft/class_4185;)V method_27615 func_214312_d + m (Lnet/minecraft/class_3283;)V method_29682 func_241621_a_ + m (Lnet/minecraft/class_525;)Z method_23494 func_243429_f + m ()V method_28084 func_238955_g_ + m ()Z method_29696 func_238960_x_ + m ()V method_30297 func_243430_k + m (Lnet/minecraft/class_525$class_4539;)V method_22365 func_228200_a_ + m (Lnet/minecraft/class_4185;)V method_23493 func_214322_h + m (Ljava/nio/file/Path;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_29687 func_238945_a_ + m (Lnet/minecraft/class_525;)Lnet/minecraft/class_2561; method_23490 func_238951_d_ + m (Lnet/minecraft/class_4185;)V method_19922 func_214318_b + m (Lnet/minecraft/class_1928;)V method_27614 func_238941_a_ + m (Ljava/nio/file/Path;Lnet/minecraft/class_310;)Ljava/nio/file/Path; method_29685 func_238943_a_ + m ()V method_29694 func_238958_v_ + m (Ljava/util/Optional;)V method_27616 func_238946_a_ + m ()Lcom/mojang/datafixers/util/Pair; method_30296 func_243423_B + m (Lnet/minecraft/class_525;)Ljava/lang/String; method_23488 func_228201_a_ + m (Ljava/nio/file/Path;)Z method_29684 func_238942_a_ + m (Ljava/lang/String;)V method_19416 func_214319_b + m ()V method_2736 createWorld + m ()V method_2722 func_228199_a_ + m (Lnet/minecraft/class_4185;)V method_19929 func_214316_i + m ()V method_29698 func_241632_z_ + m ()V method_2721 toggleMoreWorldOptions + m (Lnet/minecraft/class_5359;Lnet/minecraft/class_5350;Ljava/lang/Throwable;)Ljava/lang/Object; method_29683 func_241623_a_ + m (Z)V method_2710 showMoreWorldOptions + m (Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_29690 func_238949_b_ + f Lnet/minecraft/class_5292; field_24588 field_238934_c_ + f Lnet/minecraft/class_2561; field_26600 field_243420_t + f Lnet/minecraft/class_1928; field_24288 field_238932_M_ + f Z field_3179 allowCheatsWasSetByUser + f Lnet/minecraft/class_342; field_3188 worldNameField + f Lnet/minecraft/class_2561; field_26598 field_243418_r + f Lnet/minecraft/class_1267; field_24290 field_238937_w_ + f Lnet/minecraft/class_4185; field_24287 field_238930_G_ + f Lnet/minecraft/class_4185; field_3182 btnAllowCommands + f Ljava/lang/String; field_3195 worldName + f Z field_3178 hardCoreMode + f Lnet/minecraft/class_4185; field_3186 btnGameMode + f Lnet/minecraft/class_2561; field_3194 gameModeDesc1 + f Z field_3202 inMoreWorldOptionsDisplay + f Lnet/minecraft/class_2561; field_26602 field_243422_v + f Lnet/minecraft/class_2561; field_26599 field_243419_s + f Lorg/apache/logging/log4j/Logger; field_25480 field_238935_p_ + f Lnet/minecraft/class_2561; field_26601 field_243421_u + f Lnet/minecraft/class_525$class_4539; field_3185 field_228198_g_ + f Lnet/minecraft/class_2561; field_25898 field_243417_q + f Z field_3192 allowCheats + f Lnet/minecraft/class_4185; field_3193 btnMoreOptions + f Lnet/minecraft/class_525$class_4539; field_3201 field_228197_f_ + f Lnet/minecraft/class_1267; field_24289 field_238936_v_ + f Lnet/minecraft/class_4185; field_25478 field_238931_H_ + f Lnet/minecraft/class_437; field_3187 parentScreen + f Lnet/minecraft/class_2561; field_3199 gameModeDesc2 + f Lnet/minecraft/class_4185; field_3205 btnCreateWorld + f Ljava/nio/file/Path; field_25477 field_238928_A_ + f Lnet/minecraft/class_4185; field_24286 field_238929_E_ + f Lnet/minecraft/class_3283; field_25792 field_243416_G + f Lnet/minecraft/class_5359; field_25479 field_238933_b_ + f Ljava/lang/String; field_3196 saveDirName +c net/minecraft/class_525$1 net/minecraft/client/gui/screen/CreateWorldScreen$1 + f Lnet/minecraft/class_525; field_21337 field_228210_a_ +c net/minecraft/class_525$4 net/minecraft/client/gui/screen/CreateWorldScreen$4 + f Lnet/minecraft/class_525; field_21339 field_228213_a_ +c net/minecraft/class_525$5 net/minecraft/client/gui/screen/CreateWorldScreen$5 + f [I field_20623 field_238963_a_ +c net/minecraft/class_525$2 net/minecraft/client/gui/screen/CreateWorldScreen$2 + f Lnet/minecraft/class_525; field_21338 field_228211_a_ +c net/minecraft/class_525$3 net/minecraft/client/gui/screen/CreateWorldScreen$3 + f Lnet/minecraft/class_525; field_24291 field_228212_a_ +c net/minecraft/class_525$class_5376 net/minecraft/client/gui/screen/CreateWorldScreen$DatapackException +c net/minecraft/class_525$class_4539 net/minecraft/client/gui/screen/CreateWorldScreen$GameMode + m ()[Lnet/minecraft/class_525$class_4539; values values + m (Lnet/minecraft/class_525$class_4539;)Ljava/lang/String; method_22366 func_243433_a + m (Lnet/minecraft/class_525$class_4539;)Lnet/minecraft/class_1934; method_22367 func_243434_b + m (Ljava/lang/String;)Lnet/minecraft/class_525$class_4539; valueOf valueOf + f Lnet/minecraft/class_525$class_4539; field_20624 SURVIVAL + f Lnet/minecraft/class_1934; field_20629 field_228218_f_ + f Lnet/minecraft/class_525$class_4539; field_20627 DEBUG + f Ljava/lang/String; field_20628 field_228217_e_ + f Lnet/minecraft/class_525$class_4539; field_20626 CREATIVE + f [Lnet/minecraft/class_525$class_4539; field_20630 $VALUES + f Lnet/minecraft/class_525$class_4539; field_20625 HARDCORE +c net/minecraft/class_524 net/minecraft/client/gui/screen/EditWorldScreen + m (Lcom/google/gson/JsonElement;)Lcom/mojang/serialization/DataResult; method_29699 func_239017_a_ + m (Ljava/lang/String;)V method_19417 func_214301_a_ + m (Lnet/minecraft/class_4185;)V method_27029 func_214303_f + m (Lcom/mojang/serialization/DataResult$PartialResult;)V method_29067 func_239018_a_ + m (Lnet/minecraft/class_4185;)V method_27030 func_214309_g + m (Lnet/minecraft/class_32$class_5143;)Z method_2701 func_239019_a_ + m (Lnet/minecraft/class_4185;)V method_19930 func_214306_a_ + m (Lnet/minecraft/class_32;Ljava/lang/String;)V method_29784 func_241651_a_ + m (Lnet/minecraft/class_4185;)V method_29068 func_239023_c_ + m ()V method_2691 saveChanges + m (Lnet/minecraft/class_4185;)V method_19933 func_214310_c + m (Lnet/minecraft/class_4185;)V method_19932 func_214308_b_ + m (ZZ)V method_19931 func_214305_a + m (Lnet/minecraft/class_4185;)V method_19935 func_214304_e + m (Lnet/minecraft/class_4185;)V method_19934 func_214302_d + f Lnet/minecraft/class_2561; field_26603 field_243441_c + f Lorg/apache/logging/log4j/Logger; field_23776 field_239014_a_ + f Lnet/minecraft/class_32$class_5143; field_23777 field_239016_r_ + f Lnet/minecraft/class_4185; field_3168 saveButton + f Lnet/minecraft/class_342; field_3170 nameEdit + f Lcom/google/gson/Gson; field_25481 field_239015_b_ + f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_3169 field_214311_b +c net/minecraft/class_526 net/minecraft/client/gui/screen/WorldSelectionScreen + m (Ljava/lang/String;)V method_2744 func_214329_b + m ()Ljava/lang/String; method_2740 func_212349_h + m (Lnet/minecraft/class_4185;)V method_19939 func_214327_a + m (Z)V method_19940 func_214324_a + m (Lnet/minecraft/class_4185;)V method_19943 func_214323_d + m (Lnet/minecraft/class_4185;)V method_19941 func_214328_b + m (Lnet/minecraft/class_4185;)V method_19942 func_214330_c + m (Lnet/minecraft/class_4185;)V method_19945 func_214325_f + m (Ljava/util/List;)V method_2739 func_239026_b_ + m (Lnet/minecraft/class_4185;)V method_19944 func_214326_e + m (Ljava/lang/String;)Ljava/lang/String; method_2745 func_212351_b + f Lnet/minecraft/class_528; field_3218 selectionList + f Lnet/minecraft/class_4185; field_3219 deleteButton + f Lnet/minecraft/class_4185; field_3215 renameButton + f Lnet/minecraft/class_4185; field_3216 copyButton + f Lnet/minecraft/class_4185; field_3224 selectButton + f Lnet/minecraft/class_342; field_3220 searchField + f Ljava/util/List; field_3222 worldVersTooltip + f Lnet/minecraft/class_437; field_3221 prevScreen +c net/minecraft/class_527 net/minecraft/client/gui/screen/OptimizeWorldScreen + m (Lnet/minecraft/class_4185;)V method_19938 func_214331_a + m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap;)V method_2747 func_212346_a + m (Lnet/minecraft/class_310;Lit/unimi/dsi/fastutil/booleans/BooleanConsumer;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/class_32$class_5143;Z)Lnet/minecraft/class_527; method_27031 func_239025_a_ + f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_3233 field_214332_b + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_3232 PROGRESS_BAR_COLORS + f Lorg/apache/logging/log4j/Logger; field_25482 field_239024_a_ + f Lnet/minecraft/class_1257; field_3234 optimizer +c net/minecraft/class_5317 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30664 func_243454_c + m ()Lnet/minecraft/class_2561; method_29075 func_239077_a_ + m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;)Lnet/minecraft/class_437; method_29084 func_239085_b_ + m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;)Lnet/minecraft/class_437; method_29086 func_239087_c_ + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;J)Lnet/minecraft/class_2794; method_29076 func_241869_a + m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;)Lnet/minecraft/class_437; method_29080 func_239081_a_ + m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;Lnet/minecraft/class_1959;)V method_29087 func_239088_c_ + m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;Lnet/minecraft/class_1959;)V method_29085 func_239086_b_ + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_5285;)Lnet/minecraft/class_1959; method_29083 func_243451_a + m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;Lnet/minecraft/class_1959;)V method_29081 func_239082_a_ + m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;)Lnet/minecraft/class_437; method_29088 func_239089_d_ + m (Lnet/minecraft/class_5455$class_5457;JZZ)Lnet/minecraft/class_5285; method_29077 func_241220_a_ + m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;Lnet/minecraft/class_3232;)V method_29082 func_239083_a_ + m (Lnet/minecraft/class_5455;Lnet/minecraft/class_5285;Lnet/minecraft/class_5317;Lnet/minecraft/class_1959;)Lnet/minecraft/class_5285; method_29079 func_243452_a + m (Lnet/minecraft/class_5285;)Ljava/util/Optional; method_29078 func_239079_a_ + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30663 func_243453_b + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30662 func_243450_a + f Lnet/minecraft/class_5317; field_25051 field_239067_b_ + f Lnet/minecraft/class_5317; field_25055 field_239071_f_ + f Lnet/minecraft/class_5317; field_25056 field_239072_g_ + f Lnet/minecraft/class_5317; field_25054 field_239070_e_ + f Lnet/minecraft/class_5317; field_25050 field_239066_a_ + f Ljava/util/List; field_25052 field_239068_c_ + f Lnet/minecraft/class_5317; field_25058 field_239074_i_ + f Ljava/util/Map; field_25053 field_239069_d_ + f Lnet/minecraft/class_5317; field_25057 field_239073_h_ + f Lnet/minecraft/class_5317; field_25059 field_239075_j_ + f Lnet/minecraft/class_2561; field_25060 field_239076_k_ +c net/minecraft/class_5317$class_5293 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$IFactory + m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;)Lnet/minecraft/class_437; createEditScreen createEditScreen +c net/minecraft/class_5317$5 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$5 + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30668 func_243458_a +c net/minecraft/class_5317$6 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$6 + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_2874; method_31135 func_243460_b + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_31134 func_243459_a +c net/minecraft/class_5317$3 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$3 + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30666 func_243456_a +c net/minecraft/class_5317$4 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$4 + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30667 func_243457_a +c net/minecraft/class_5317$1 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$1 + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30665 func_243455_a +c net/minecraft/class_5317$2 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$2 +c net/minecraft/class_5317$7 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$7 + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30670 func_243461_a +c net/minecraft/class_5317$8 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$8 +c net/minecraft/class_5292 net/minecraft/client/gui/screen/WorldOptionsScreen + m (Ljava/lang/String;)Ljava/util/OptionalLong; method_28095 func_239053_a_ + m (Lnet/minecraft/class_525;Lnet/minecraft/class_4185;)V method_28093 func_239050_a_ + m (Lnet/minecraft/class_5285;)V method_28086 func_239043_a_ + m (Ljava/lang/String;)V method_28100 func_239058_b_ + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5285;)V method_29073 func_239052_a_ + m ()Z method_28085 func_239042_a_ + m ()Lnet/minecraft/class_2561; method_28097 func_239061_d_ + m ()Lnet/minecraft/class_5455$class_5457; method_29700 func_239055_b_ + m (Lnet/minecraft/class_5292;)Lnet/minecraft/class_5285; method_28094 func_239051_a_ + m ()Lnet/minecraft/class_2561; method_29072 func_239060_c_ + m (Lnet/minecraft/class_310;Lnet/minecraft/class_525;Lnet/minecraft/class_4185;)V method_28087 func_239044_a_ + m (Lnet/minecraft/class_525;Lnet/minecraft/class_310;Lnet/minecraft/class_327;)V method_28092 func_239048_a_ + m (Lnet/minecraft/class_310;Lnet/minecraft/class_525;Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5285;Z)V method_29069 func_239045_a_ + m (Z)V method_28101 func_239059_b_ + m (Lnet/minecraft/class_5382;Lcom/google/gson/JsonElement;)Lcom/mojang/serialization/DataResult; method_31131 func_243446_a + m (Z)Lnet/minecraft/class_5285; method_28096 func_239054_a_ + m (Lnet/minecraft/class_525;Lnet/minecraft/class_310;Lnet/minecraft/class_4185;)V method_29071 func_239049_a_ + m (Lnet/minecraft/class_310;Lnet/minecraft/class_525;Lnet/minecraft/class_5455$class_5457;Lcom/mojang/serialization/Lifecycle;Lnet/minecraft/class_5285;)V method_29070 func_239046_a_ + m (Lnet/minecraft/class_4185;)V method_28088 func_239047_a_ + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5285;)V method_31133 func_243448_b + m (Lnet/minecraft/class_5292;)Ljava/util/Optional; method_29074 func_239057_b_ + m (Lnet/minecraft/class_5350;)V method_31132 func_243447_a + m (Ljava/util/OptionalLong;)Ljava/lang/String; method_30510 func_243445_a + m (Lnet/minecraft/class_4185;)V method_28098 func_239056_b_ + m ()Ljava/util/OptionalLong; method_30511 func_243449_f + f I field_24593 field_239032_f_ + f Lnet/minecraft/class_4185; field_24589 field_239027_a_ + f Lnet/minecraft/class_2561; field_26604 field_243442_e + f Lnet/minecraft/class_327; field_24592 field_239031_e_ + f Lnet/minecraft/class_2561; field_25047 field_239029_c_ + f Lnet/minecraft/class_2561; field_24591 field_239030_d_ + f Ljava/util/Optional; field_25049 field_239040_n_ + f Lnet/minecraft/class_342; field_24594 field_239033_g_ + f Lnet/minecraft/class_4185; field_24595 field_239034_h_ + f Lnet/minecraft/class_5285; field_24598 field_239039_m_ + f Lnet/minecraft/class_5455$class_5457; field_25483 field_239038_l_ + f Ljava/util/OptionalLong; field_24600 field_243444_q + f Lnet/minecraft/class_4185; field_25048 field_239037_k_ + f Lnet/minecraft/class_5489; field_26605 field_243443_f + f Lnet/minecraft/class_4185; field_24596 field_239035_i_ + f Lnet/minecraft/class_4185; field_24597 field_239036_j_ + f Lorg/apache/logging/log4j/Logger; field_25046 field_239028_b_ +c net/minecraft/class_5292$2 net/minecraft/client/gui/screen/WorldOptionsScreen$2 + f Lnet/minecraft/class_5292; field_24602 field_239063_a_ +c net/minecraft/class_5292$3 net/minecraft/client/gui/screen/WorldOptionsScreen$3 + f Lnet/minecraft/class_5292; field_24604 field_239065_b_ + f Lnet/minecraft/class_525; field_24603 field_239064_a_ +c net/minecraft/class_5292$1 net/minecraft/client/gui/screen/WorldOptionsScreen$1 + f Lnet/minecraft/class_5292; field_24601 field_239062_a_ +c net/minecraft/class_528 net/minecraft/client/gui/screen/WorldSelectionList + m ()Lnet/minecraft/class_2561; method_30911 func_243470_w + m ()Ljava/text/DateFormat; method_20160 func_214371_c + m (Lnet/minecraft/class_528$class_4272;)Z method_30017 func_241652_b_ + m ()Lnet/minecraft/class_2561; method_30910 func_243469_u + m ()Lnet/minecraft/class_2960; method_20162 func_214374_e + m ()Lnet/minecraft/class_2960; method_20161 func_214372_d + m (Lnet/minecraft/class_528;)I method_20158 func_243468_a + m ()Ljava/util/Optional; method_20159 func_214376_a + m ()Lnet/minecraft/class_526; method_2752 getGuiWorldSelection + m (Ljava/util/function/Supplier;Z)V method_2750 func_212330_a + m ()Lorg/apache/logging/log4j/Logger; method_20163 func_243467_A + m (Lnet/minecraft/class_528$class_4272;)V method_20157 setSelected + m ()Lnet/minecraft/class_2561; method_30913 func_243472_y + m ()Lnet/minecraft/class_2561; method_30912 func_243471_x + m ()Lnet/minecraft/class_2561; method_30914 func_243473_z + f Lorg/apache/logging/log4j/Logger; field_3238 LOGGER + f Lnet/minecraft/class_526; field_3237 worldSelection + f Lnet/minecraft/class_2561; field_26609 field_243465_u + f Lnet/minecraft/class_2561; field_26608 field_243464_t + f Ljava/text/DateFormat; field_19132 field_214377_b + f Lnet/minecraft/class_2561; field_26610 field_243466_v + f Lnet/minecraft/class_2561; field_26606 field_243462_r + f Lnet/minecraft/class_2561; field_26607 field_243463_s + f Ljava/util/List; field_3239 field_212331_y + f Lnet/minecraft/class_2960; field_19133 field_214378_c + f Lnet/minecraft/class_2960; field_19134 field_214379_d +c net/minecraft/class_528$class_4272 net/minecraft/client/gui/screen/WorldSelectionList$Entry + m ()V method_20171 func_214444_c + m ()V method_20173 func_214445_d + m ()V method_20174 func_214443_e + m ()V method_29990 func_241653_f_ + m ()Ljava/lang/String; method_20178 func_214447_i + m ()Ljava/lang/String; method_27034 func_214433_h + m ()Lnet/minecraft/class_1043; method_20175 func_214446_f + m ()Ljava/lang/String; method_27033 func_239098_h_ + m ()V method_20164 func_214438_a + m (Lnet/minecraft/class_1940;Lnet/minecraft/class_5285;Ljava/nio/file/Path;Lnet/minecraft/class_5359;Lnet/minecraft/class_5455$class_5457;Z)V method_20165 func_239095_a + m (ZZ)V method_20167 func_214436_a + m ()V method_20169 func_214442_b + m (Lnet/minecraft/class_528$class_4272;)Lnet/minecraft/class_34; method_20166 func_214437_a + m (Z)V method_20170 func_214440_b + m (Lnet/minecraft/class_32$class_5143;Ljava/lang/String;Z)V method_27032 func_239096_a_ + m ()V close close + m (Z)V method_20172 func_214434_c + m ()V method_20176 func_239097_g_ + m ()V method_20179 func_214441_j + f Lnet/minecraft/class_34; field_19138 field_214451_d + f Lnet/minecraft/class_528; field_19135 field_214448_a + f Lnet/minecraft/class_310; field_19136 field_214449_b + f Lnet/minecraft/class_526; field_19137 field_214450_c + f Ljava/io/File; field_19140 field_214453_f + f J field_19142 field_214455_h + f Lnet/minecraft/class_1043; field_19141 field_214454_g + f Lnet/minecraft/class_2960; field_19139 field_214452_e +c net/minecraft/class_534 net/minecraft/client/gui/spectator/BaseSpectatorGroup + f Lnet/minecraft/class_2561; field_26612 field_243476_a + f Ljava/util/List; field_3266 items +c net/minecraft/class_530 net/minecraft/client/gui/spectator/PlayerMenuObject + f Lnet/minecraft/class_2960; field_3252 resourceLocation + f Lcom/mojang/authlib/GameProfile; field_3253 profile + f Lnet/minecraft/class_2585; field_26611 field_243475_c +c net/minecraft/class_535 net/minecraft/client/gui/spectator/ISpectatorMenuView + m ()Lnet/minecraft/class_2561; method_2781 getPrompt + m ()Ljava/util/List; method_2780 getItems +c net/minecraft/class_531 net/minecraft/client/gui/spectator/SpectatorMenu + m (I)Lnet/minecraft/class_537; method_2777 getItem + m (Lnet/minecraft/class_531;)I method_2769 func_243480_a + m ()V method_2779 exit + m ()Lnet/minecraft/class_2561; method_30915 func_243482_g + m ()Lnet/minecraft/class_2561; method_30917 func_243484_i + m ()Lnet/minecraft/class_2561; method_30916 func_243483_h + m ()Lnet/minecraft/class_535; method_2776 getSelectedCategory + m (I)V method_2771 selectSlot + m (Lnet/minecraft/class_535;)V method_2778 selectCategory + m ()I method_2773 getSelectedSlot + m (Lnet/minecraft/class_531;I)I method_2775 func_243481_a + m ()Lnet/minecraft/class_537; method_2774 getSelectedItem + m ()Lnet/minecraft/class_539; method_2772 getCurrentPage + m ()Ljava/util/List; method_2770 getItems + f Lnet/minecraft/class_537; field_3261 CLOSE_ITEM + f I field_3263 page + f Lnet/minecraft/class_537; field_3260 EMPTY_SLOT + f Lnet/minecraft/class_537; field_3256 SCROLL_RIGHT_ENABLED + f Lnet/minecraft/class_537; field_3259 SCROLL_RIGHT_DISABLED + f Lnet/minecraft/class_537; field_3262 SCROLL_LEFT + f Lnet/minecraft/class_2561; field_26615 field_243479_h + f Lnet/minecraft/class_2561; field_26613 field_243477_f + f I field_3254 selectedSlot + f Lnet/minecraft/class_535; field_3258 category + f Lnet/minecraft/class_536; field_3255 listener + f Lnet/minecraft/class_2561; field_26614 field_243478_g +c net/minecraft/class_531$class_532 net/minecraft/client/gui/spectator/SpectatorMenu$EndSpectatorObject +c net/minecraft/class_531$class_533 net/minecraft/client/gui/spectator/SpectatorMenu$MoveMenuObject + f I field_3264 direction + f Z field_3265 enabled +c net/minecraft/class_531$1 net/minecraft/client/gui/spectator/SpectatorMenu$1 +c net/minecraft/class_536 net/minecraft/client/gui/spectator/ISpectatorMenuRecipient + m (Lnet/minecraft/class_531;)V method_2782 onSpectatorMenuClosed +c net/minecraft/class_537 net/minecraft/client/gui/spectator/ISpectatorMenuObject + m (Lnet/minecraft/class_531;)V method_2783 selectItem + m ()Lnet/minecraft/class_2561; method_16892 getSpectatorName + m (Lnet/minecraft/class_4587;FI)V method_2784 func_230485_a_ + m ()Z method_16893 isEnabled +c net/minecraft/class_538 net/minecraft/client/gui/spectator/categories/TeleportToPlayer + m (Lnet/minecraft/class_640;Lnet/minecraft/class_640;)I method_2785 func_210243_a + f Ljava/util/List; field_3268 items + f Lcom/google/common/collect/Ordering; field_3267 PROFILE_ORDER + f Lnet/minecraft/class_2561; field_26616 field_243485_b + f Lnet/minecraft/class_2561; field_26617 field_243486_c +c net/minecraft/class_539 net/minecraft/client/gui/spectator/categories/SpectatorDetails + m ()I method_2787 getSelectedSlot + m (I)Lnet/minecraft/class_537; method_2786 getObject + f I field_3269 selectedSlot + f Ljava/util/List; field_3271 items + f Lnet/minecraft/class_535; field_3270 category +c net/minecraft/class_540 net/minecraft/client/gui/spectator/categories/TeleportToTeam + f Lnet/minecraft/class_2561; field_26618 field_243487_a + f Lnet/minecraft/class_2561; field_26619 field_243488_b + f Ljava/util/List; field_3272 items +c net/minecraft/class_540$class_541 net/minecraft/client/gui/spectator/categories/TeleportToTeam$TeamSelectionObject + f Lnet/minecraft/class_268; field_3275 team + f Ljava/util/List; field_3274 players + f Lnet/minecraft/class_540; field_3273 field_178678_a + f Lnet/minecraft/class_2960; field_3276 location +c net/minecraft/class_542 net/minecraft/client/GameConfiguration + f Lnet/minecraft/class_542$class_547; field_3278 userInfo + f Lnet/minecraft/class_542$class_546; field_3281 serverInfo + f Lnet/minecraft/class_542$class_545; field_3280 gameInfo + f Lnet/minecraft/class_542$class_544; field_3277 folderInfo + f Lnet/minecraft/class_543; field_3279 displayInfo +c net/minecraft/class_542$class_547 net/minecraft/client/GameConfiguration$UserInformation + f Ljava/net/Proxy; field_3296 proxy + f Lcom/mojang/authlib/properties/PropertyMap; field_3297 profileProperties + f Lcom/mojang/authlib/properties/PropertyMap; field_3298 userProperties + f Lnet/minecraft/class_320; field_3299 session +c net/minecraft/class_542$class_546 net/minecraft/client/GameConfiguration$ServerInformation + f I field_3295 serverPort + f Ljava/lang/String; field_3294 serverName +c net/minecraft/class_542$class_545 net/minecraft/client/GameConfiguration$GameInformation + f Ljava/lang/String; field_3293 version + f Ljava/lang/String; field_3291 versionType + f Z field_25061 disableMultiplayer + f Z field_25062 disableChat + f Z field_3292 isDemo +c net/minecraft/class_542$class_544 net/minecraft/client/GameConfiguration$FolderInformation + m ()Lnet/minecraft/class_1064; method_2788 getAssetsIndex + f Ljava/lang/String; field_3288 assetIndex + f Ljava/io/File; field_3289 assetsDir + f Ljava/io/File; field_3290 resourcePacksDir + f Ljava/io/File; field_3287 gameDir +c net/minecraft/class_4718 net/minecraft/client/util/UndeclaredException +c net/minecraft/class_4592 net/minecraft/client/renderer/entity/model/AgeableModel + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22947 func_228227_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22949 func_228228_b_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22950 func_228229_c_ + m ()Ljava/lang/Iterable; method_22948 getBodyParts + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22951 func_228230_d_ + m ()Ljava/lang/Iterable; method_22946 getHeadParts + f F field_20918 childHeadScale + f F field_20917 childHeadOffsetZ + f F field_20920 childBodyOffsetY + f F field_20919 childBodyScale + f Z field_20915 isChildHeadScaled + f F field_20916 childHeadOffsetY +c net/minecraft/class_3968 net/minecraft/client/renderer/entity/model/AbstractZombieModel + m (Lnet/minecraft/class_1588;)Z method_17790 isAggressive + m (Lnet/minecraft/class_1588;FFFFF)V method_17791 setRotationAngles +c net/minecraft/class_3881 net/minecraft/client/renderer/entity/model/IHasArm + m (Lnet/minecraft/class_1306;Lnet/minecraft/class_4587;)V method_2803 translateHand +c net/minecraft/class_4896 net/minecraft/client/renderer/model/ModelHelper + m (Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_1309;Z)V method_25446 func_239102_a_ + m (Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Z)V method_25447 func_239104_a_ + m (Lnet/minecraft/class_630;Lnet/minecraft/class_630;F)V method_29350 func_239101_a_ + m (Lnet/minecraft/class_630;Lnet/minecraft/class_630;ZFF)V method_29352 func_239105_a_ + m (Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_1308;FF)V method_29351 func_239103_a_ +c net/minecraft/class_548 net/minecraft/client/renderer/entity/model/ArmorStandArmorModel + m (Lnet/minecraft/class_1531;FFFFF)V method_17066 setRotationAngles +c net/minecraft/class_553 net/minecraft/client/renderer/entity/model/BatModel + m (Lnet/minecraft/class_1420;FFFFF)V method_17069 setRotationAngles + f Lnet/minecraft/class_630; field_3324 batOuterLeftWing + f Lnet/minecraft/class_630; field_3319 batOuterRightWing + f Lnet/minecraft/class_630; field_3323 batBody + f Lnet/minecraft/class_630; field_3320 batLeftWing + f Lnet/minecraft/class_630; field_3322 batRightWing + f Lnet/minecraft/class_630; field_3321 batHead +c net/minecraft/class_551 net/minecraft/client/renderer/entity/model/ArmorStandModel + m (Lnet/minecraft/class_1531;FFF)V method_24223 setLivingAnimations + f Lnet/minecraft/class_630; field_3315 standLeftSide + f Lnet/minecraft/class_630; field_3314 standRightSide + f Lnet/minecraft/class_630; field_3312 standBase + f Lnet/minecraft/class_630; field_3313 standWaist +c net/minecraft/class_555 net/minecraft/client/renderer/entity/model/BlazeModel + f Lcom/google/common/collect/ImmutableList; field_20921 field_228242_f_ + f Lnet/minecraft/class_630; field_3329 blazeHead + f [Lnet/minecraft/class_630; field_3328 blazeSticks +c net/minecraft/class_4495 net/minecraft/client/renderer/entity/model/BeeModel + m (Lnet/minecraft/class_4466;FFFFF)V method_22112 setRotationAngles + m (Lnet/minecraft/class_4466;FFF)V method_22111 setLivingAnimations + f Lnet/minecraft/class_630; field_20504 body + f Lnet/minecraft/class_630; field_20512 leftAntenna + f Lnet/minecraft/class_630; field_20511 stinger + f Lnet/minecraft/class_630; field_20506 rightWing + f F field_20514 bodyPitch + f Lnet/minecraft/class_630; field_20510 backLegs + f Lnet/minecraft/class_630; field_20509 middleLegs + f Lnet/minecraft/class_630; field_20513 rightAntenna + f Lnet/minecraft/class_630; field_20508 frontLegs + f Lnet/minecraft/class_630; field_20507 leftWing + f Lnet/minecraft/class_630; field_20505 torso +c net/minecraft/class_557 net/minecraft/client/renderer/entity/model/BookModel + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22695 func_228248_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFF)V method_24184 renderAll + m (FFFF)V method_17073 setBookState + f Lnet/minecraft/class_630; field_3337 pagesRight + f Lnet/minecraft/class_630; field_3338 coverLeft + f Lnet/minecraft/class_630; field_3333 bookSpine + f Lnet/minecraft/class_630; field_3339 flippingPageLeft + f Lnet/minecraft/class_630; field_3336 coverRight + f Lnet/minecraft/class_630; field_3334 flippingPageRight + f Lnet/minecraft/class_630; field_3335 pagesLeft + f Ljava/util/List; field_20786 bookParts +c net/minecraft/class_554 net/minecraft/client/renderer/entity/model/BoatModel + m (Lnet/minecraft/class_1690;IF)V method_2797 func_228244_a_ + m (Z)Lnet/minecraft/class_630; method_2796 makePaddle + m (Lnet/minecraft/class_1690;FFFFF)V method_22952 setRotationAngles + m ()Lnet/minecraft/class_630; method_22954 func_228245_c_ + m ()Lcom/google/common/collect/ImmutableList; method_22953 getParts + f [Lnet/minecraft/class_630; field_3325 paddles + f Lcom/google/common/collect/ImmutableList; field_20922 field_228243_f_ + f Lnet/minecraft/class_630; field_3326 noWater +c net/minecraft/class_559 net/minecraft/client/renderer/entity/model/HorseArmorChestsModel + m (Lnet/minecraft/class_1492;FFFFF)V method_17076 setRotationAngles + f Lnet/minecraft/class_630; field_3348 field_199058_d + f Lnet/minecraft/class_630; field_3349 field_199057_c +c net/minecraft/class_3680 net/minecraft/client/renderer/entity/model/CatModel + m (Lnet/minecraft/class_1451;FFF)V method_17074 setLivingAnimations + m (Lnet/minecraft/class_1451;FFFFF)V method_17075 setRotationAngles + f F field_16245 field_217155_m + f F field_16244 field_217156_n + f F field_16243 field_217157_o +c net/minecraft/class_561 net/minecraft/client/renderer/entity/model/CodModel + f Lnet/minecraft/class_630; field_3352 headFront + f Lnet/minecraft/class_630; field_3353 body + f Lnet/minecraft/class_630; field_3354 head + f Lnet/minecraft/class_630; field_3350 tail + f Lnet/minecraft/class_630; field_3356 finLeft + f Lnet/minecraft/class_630; field_3351 finRight + f Lnet/minecraft/class_630; field_3355 finTop +c net/minecraft/class_558 net/minecraft/client/renderer/entity/model/ChickenModel + f Lnet/minecraft/class_630; field_3340 bill + f Lnet/minecraft/class_630; field_3347 leftWing + f Lnet/minecraft/class_630; field_3341 rightWing + f Lnet/minecraft/class_630; field_3346 body + f Lnet/minecraft/class_630; field_3343 leftLeg + f Lnet/minecraft/class_630; field_3344 head + f Lnet/minecraft/class_630; field_3345 rightLeg + f Lnet/minecraft/class_630; field_3342 chin +c net/minecraft/class_4594 net/minecraft/client/renderer/entity/model/AbstractTropicalFishModel + m (FFF)V method_22956 func_228257_a_ + f F field_20926 field_228254_a_ + f F field_20928 field_228256_f_ + f F field_20927 field_228255_b_ +c net/minecraft/class_4593 net/minecraft/client/renderer/entity/model/TintedAgeableModel + m (FFF)V method_22955 setTint + f F field_20925 blueTint + f F field_20923 redTint + f F field_20924 greenTint +c net/minecraft/class_562 net/minecraft/client/renderer/entity/model/CreeperModel + f Lnet/minecraft/class_630; field_3357 leg4 + f Lnet/minecraft/class_630; field_3363 leg3 + f Lnet/minecraft/class_630; field_3358 leg2 + f Lnet/minecraft/class_630; field_3362 creeperArmor + f Lnet/minecraft/class_630; field_3359 leg1 + f Lnet/minecraft/class_630; field_3360 head + f Lnet/minecraft/class_630; field_3361 body +c net/minecraft/class_560 net/minecraft/client/renderer/entity/model/CowModel + m ()Lnet/minecraft/class_630; method_2800 getHead +c net/minecraft/class_564 net/minecraft/client/renderer/entity/model/DrownedModel + m (Lnet/minecraft/class_1642;FFF)V method_17077 setLivingAnimations + m (Lnet/minecraft/class_1642;FFFFF)V method_17134 setRotationAngles +c net/minecraft/class_889 net/minecraft/client/renderer/entity/model/DolphinModel + f Lnet/minecraft/class_630; field_4657 tail + f Lnet/minecraft/class_630; field_4658 body + f Lnet/minecraft/class_630; field_4655 tailFin +c net/minecraft/class_566 net/minecraft/client/renderer/entity/model/EndermanModel + f Z field_3371 isCarrying + f Z field_3370 isAttacking +c net/minecraft/class_563 net/minecraft/client/renderer/entity/model/ElytraModel + m (Lnet/minecraft/class_1309;FFFFF)V method_17079 setRotationAngles + f Lnet/minecraft/class_630; field_3365 leftWing + f Lnet/minecraft/class_630; field_3364 rightWing +c net/minecraft/class_583 net/minecraft/client/renderer/entity/model/EntityModel + m (Lnet/minecraft/class_1297;FFFFF)V method_2819 setRotationAngles + m (Lnet/minecraft/class_583;)V method_17081 copyModelAttributesTo + m (Lnet/minecraft/class_1297;FFF)V method_2816 setLivingAnimations + f Z field_3449 isSitting + f Z field_3448 isChild + f F field_3447 swingProgress +c net/minecraft/class_565 net/minecraft/client/renderer/entity/model/EndermiteModel + f [[I field_3366 BODY_SIZES + f I field_3367 BODY_COUNT + f [[I field_3369 BODY_TEXS + f [Lnet/minecraft/class_630; field_3368 bodyParts +c net/minecraft/class_4041 net/minecraft/client/renderer/entity/model/FoxModel + m (Lnet/minecraft/class_4019;FFFFF)V method_18332 setRotationAngles + m (Lnet/minecraft/class_4019;FFF)V method_18330 setLivingAnimations + f Lnet/minecraft/class_630; field_18019 body + f Lnet/minecraft/class_630; field_18024 tail + f F field_18025 field_217125_n + f Lnet/minecraft/class_630; field_18016 rightEar + f Lnet/minecraft/class_630; field_18018 snout + f Lnet/minecraft/class_630; field_18023 legFrontLeft + f Lnet/minecraft/class_630; field_18015 head + f Lnet/minecraft/class_630; field_18017 leftEar + f Lnet/minecraft/class_630; field_18022 legFrontRight + f Lnet/minecraft/class_630; field_18021 legBackLeft + f Lnet/minecraft/class_630; field_18020 legBackRight +c net/minecraft/class_568 net/minecraft/client/renderer/entity/model/EvokerFangsModel + f Lnet/minecraft/class_630; field_3375 lowerJaw + f Lnet/minecraft/class_630; field_3376 upperJaw + f Lnet/minecraft/class_630; field_3374 base +c net/minecraft/class_3969 net/minecraft/client/renderer/entity/model/GiantModel + m (Lnet/minecraft/class_1570;)Z method_17792 isAggressive +c net/minecraft/class_567 net/minecraft/client/renderer/entity/model/GhastModel + f Lcom/google/common/collect/ImmutableList; field_20929 field_228260_b_ + f [Lnet/minecraft/class_630; field_3372 tentacles +c net/minecraft/class_570 net/minecraft/client/renderer/entity/model/GuardianModel + m (Lnet/minecraft/class_1577;FFFFF)V method_17083 setRotationAngles + m (FF)V method_24185 func_228261_a_ + f [F field_17135 field_217140_h + f Lnet/minecraft/class_630; field_3381 guardianEye + f [F field_17136 field_217141_i + f [Lnet/minecraft/class_630; field_3380 guardianSpines + f [Lnet/minecraft/class_630; field_3378 guardianTail + f [F field_17131 field_217136_a + f [F field_17133 field_217138_f + f [F field_17134 field_217139_g + f Lnet/minecraft/class_630; field_3379 guardianBody + f [F field_17132 field_217137_b +c net/minecraft/class_4791 net/minecraft/client/renderer/entity/model/BoarModel + m (Lnet/minecraft/class_1308;FFFFF)V method_24461 setRotationAngles + f Lnet/minecraft/class_630; field_22234 field_239113_k_ + f Lnet/minecraft/class_630; field_22229 field_239108_f_ + f Lnet/minecraft/class_630; field_22227 field_239106_a_ + f Lnet/minecraft/class_630; field_25484 field_239114_l_ + f Lnet/minecraft/class_630; field_22230 field_239109_g_ + f Lnet/minecraft/class_630; field_22228 field_239107_b_ + f Lnet/minecraft/class_630; field_22231 field_239110_h_ + f Lnet/minecraft/class_630; field_22232 field_239111_i_ + f Lnet/minecraft/class_630; field_22233 field_239112_j_ +c net/minecraft/class_3882 net/minecraft/client/renderer/entity/model/IHasHead + m ()Lnet/minecraft/class_630; method_2838 getModelHead +c net/minecraft/class_569 net/minecraft/client/renderer/entity/model/HumanoidHeadModel + f Lnet/minecraft/class_630; field_3377 head +c net/minecraft/class_549 net/minecraft/client/renderer/entity/model/HorseModel + m (Lnet/minecraft/class_1496;FFF)V method_17084 setLivingAnimations + m (Lnet/minecraft/class_1496;FFFFF)V method_17085 setRotationAngles + m (Lnet/minecraft/class_630;)V method_2789 func_199047_a + f Lnet/minecraft/class_630; field_20933 field_228269_m_ + f [Lnet/minecraft/class_630; field_3304 field_217134_k + f Lnet/minecraft/class_630; field_3300 field_217133_j + f [Lnet/minecraft/class_630; field_3301 field_217135_l + f Lnet/minecraft/class_630; field_20931 field_228267_k_ + f Lnet/minecraft/class_630; field_3305 body + f Lnet/minecraft/class_630; field_20932 field_228268_l_ + f Lnet/minecraft/class_630; field_3307 head + f Lnet/minecraft/class_630; field_3302 field_228264_h_ + f Lnet/minecraft/class_630; field_3308 field_228265_i_ + f Lnet/minecraft/class_630; field_20930 field_228266_j_ + f Lnet/minecraft/class_630; field_3306 field_228262_f_ + f Lnet/minecraft/class_630; field_3303 field_228263_g_ +c net/minecraft/class_575 net/minecraft/client/renderer/entity/model/IllagerModel + m ()Lnet/minecraft/class_630; method_2812 func_205062_a + m (Lnet/minecraft/class_1543;FFFFF)V method_17094 setRotationAngles + m (Lnet/minecraft/class_1306;)Lnet/minecraft/class_630; method_2813 getArm + f Lnet/minecraft/class_630; field_3426 rightArm + f Lnet/minecraft/class_630; field_3417 leftArm + f Lnet/minecraft/class_630; field_3425 body + f Lnet/minecraft/class_630; field_3422 head + f Lnet/minecraft/class_630; field_3423 arms + f Lnet/minecraft/class_630; field_3419 hat + f Lnet/minecraft/class_630; field_3420 field_217143_g + f Lnet/minecraft/class_630; field_3418 field_217144_h +c net/minecraft/class_572 net/minecraft/client/renderer/entity/model/BipedModel + m (Lnet/minecraft/class_1309;FFF)V method_17086 setLivingAnimations + m (Lnet/minecraft/class_572;)V method_2818 setModelAttributes + m (Lnet/minecraft/class_1309;F)V method_29353 func_230486_a_ + m (F)F method_2807 getArmAngleSq + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1306; method_2806 getMainHand + m (FFF)F method_2804 rotLerpRad + m (Z)V method_2805 setVisible + m (Lnet/minecraft/class_1309;)V method_30155 func_241655_c_ + m (Lnet/minecraft/class_1309;)V method_30154 func_241654_b_ + m (Lnet/minecraft/class_1309;FFFFF)V method_17087 setRotationAngles + m (Lnet/minecraft/class_1306;)Lnet/minecraft/class_630; method_2808 getArmForSide + f Lnet/minecraft/class_630; field_3394 bipedHeadwear + f Lnet/minecraft/class_630; field_3391 bipedBody + f Lnet/minecraft/class_630; field_3401 bipedRightArm + f Z field_3400 isSneak + f Lnet/minecraft/class_630; field_3398 bipedHead + f Lnet/minecraft/class_572$class_573; field_3399 leftArmPose + f Lnet/minecraft/class_572$class_573; field_3395 rightArmPose + f Lnet/minecraft/class_630; field_3390 bipedLeftArm + f Lnet/minecraft/class_630; field_3392 bipedRightLeg + f F field_3396 swimAnimation + f Lnet/minecraft/class_630; field_3397 bipedLeftLeg +c net/minecraft/class_572$class_573 net/minecraft/client/renderer/entity/model/BipedModel$ArmPose + m ()[Lnet/minecraft/class_572$class_573; values values + m ()Z method_30156 func_241657_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_572$class_573; valueOf valueOf + f Lnet/minecraft/class_572$class_573; field_3410 ITEM + f [Lnet/minecraft/class_572$class_573; field_3404 $VALUES + f Lnet/minecraft/class_572$class_573; field_3406 BLOCK + f Z field_25722 field_241656_h_ + f Lnet/minecraft/class_572$class_573; field_3403 BOW_AND_ARROW + f Lnet/minecraft/class_572$class_573; field_3407 THROW_SPEAR + f Lnet/minecraft/class_572$class_573; field_3405 CROSSBOW_CHARGE + f Lnet/minecraft/class_572$class_573; field_3409 EMPTY + f Lnet/minecraft/class_572$class_573; field_3408 CROSSBOW_HOLD +c net/minecraft/class_572$1 net/minecraft/client/renderer/entity/model/BipedModel$1 + f [I field_3402 field_187083_a +c net/minecraft/class_576 net/minecraft/client/renderer/entity/model/MagmaCubeModel + m (Lnet/minecraft/class_1621;FFF)V method_17098 setLivingAnimations + m (Lnet/minecraft/class_1621;FFFFF)V method_22958 setRotationAngles + m ()Lcom/google/common/collect/ImmutableList; method_22959 getParts + f [Lnet/minecraft/class_630; field_3427 segments + f Lcom/google/common/collect/ImmutableList; field_20934 field_228271_f_ + f Lnet/minecraft/class_630; field_3428 core +c net/minecraft/class_574 net/minecraft/client/renderer/entity/model/IronGolemModel + m (Lnet/minecraft/class_1439;FFFFF)V method_17097 setRotationAngles + m (Lnet/minecraft/class_1439;FFF)V method_17095 setLivingAnimations + m ()Lnet/minecraft/class_630; method_2809 getArmHoldingRose + f Lnet/minecraft/class_630; field_3415 ironGolemHead + f Lnet/minecraft/class_630; field_3412 ironGolemLeftArm + f Lnet/minecraft/class_630; field_3413 ironGolemBody + f Lnet/minecraft/class_630; field_3411 ironGolemLeftLeg + f Lnet/minecraft/class_630; field_3416 ironGolemRightLeg + f Lnet/minecraft/class_630; field_3414 ironGolemRightArm +c net/minecraft/class_4595 net/minecraft/client/renderer/entity/model/SegmentedModel + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22961 func_228272_a_ + m ()Ljava/lang/Iterable; method_22960 getParts +c net/minecraft/class_579 net/minecraft/client/renderer/entity/model/LeashKnotModel + f Lnet/minecraft/class_630; field_3431 knotRenderer +c net/minecraft/class_581 net/minecraft/client/renderer/entity/model/LlamaSpitModel + f Lnet/minecraft/class_630; field_3433 main +c net/minecraft/class_578 net/minecraft/client/renderer/entity/model/LlamaModel + m (Lnet/minecraft/class_1492;FFFFF)V method_22962 setRotationAngles + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22963 func_228279_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22964 func_228280_b_ + f Lnet/minecraft/class_630; field_20937 legBackRight + f Lnet/minecraft/class_630; field_3429 chest2 + f Lnet/minecraft/class_630; field_20935 head + f Lnet/minecraft/class_630; field_20936 body + f Lnet/minecraft/class_630; field_20938 legBackLeft + f Lnet/minecraft/class_630; field_20939 legFrontRight + f Lnet/minecraft/class_630; field_20940 legFrontLeft + f Lnet/minecraft/class_630; field_3430 chest1 +c net/minecraft/class_3879 net/minecraft/client/renderer/model/Model + m (Ljava/lang/Object;)V accept accept + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23500 getRenderType + m (Lnet/minecraft/class_630;)V method_22696 accept + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFF)V method_2828 render + f Ljava/util/function/Function; field_21343 renderType + f I field_17138 textureWidth + f I field_17139 textureHeight +c net/minecraft/class_580 net/minecraft/client/renderer/entity/model/MinecartModel + f [Lnet/minecraft/class_630; field_3432 sideModels +c net/minecraft/class_582 net/minecraft/client/renderer/entity/model/OcelotModel + f Lnet/minecraft/class_630; field_3439 ocelotBackLeftLeg + f Lnet/minecraft/class_630; field_3440 ocelotFrontLeftLeg + f Lnet/minecraft/class_630; field_3438 ocelotFrontRightLeg + f I field_3434 state + f Lnet/minecraft/class_630; field_3441 ocelotBackRightLeg + f Lnet/minecraft/class_630; field_3436 ocelotTail + f Lnet/minecraft/class_630; field_3442 ocelotTail2 + f Lnet/minecraft/class_630; field_3435 ocelotHead + f Lnet/minecraft/class_630; field_3437 ocelotBody +c net/minecraft/class_4496 net/minecraft/client/renderer/entity/model/ModelUtils + m (FFF)F method_22114 func_228283_a_ +c net/minecraft/class_584 net/minecraft/client/renderer/entity/model/ParrotModel + m (Lnet/minecraft/class_584$class_585;)V method_17110 setLivingAnimations + m (Lnet/minecraft/class_1453;FFFFF)V method_17112 setRotationAngles + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFI)V method_17106 renderOnShoulder + m (Lnet/minecraft/class_584$class_585;IFFFFF)V method_17111 setRotationAngles + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IILnet/minecraft/class_630;)V method_22965 func_228285_a_ + m (Lnet/minecraft/class_1453;FFF)V method_17108 setLivingAnimations + m (Lnet/minecraft/class_1453;)Lnet/minecraft/class_584$class_585; method_17107 getParrotState + f Lnet/minecraft/class_630; field_3453 beak2 + f Lnet/minecraft/class_630; field_3458 body + f Lnet/minecraft/class_630; field_3456 feather + f Lnet/minecraft/class_630; field_3450 legLeft + f Lnet/minecraft/class_630; field_3460 tail + f Lnet/minecraft/class_630; field_3452 head + f Lnet/minecraft/class_630; field_3461 head2 + f Lnet/minecraft/class_630; field_3451 beak1 + f Lnet/minecraft/class_630; field_3459 wingLeft + f Lnet/minecraft/class_630; field_3455 wingRight + f Lnet/minecraft/class_630; field_3457 legRight +c net/minecraft/class_584$class_585 net/minecraft/client/renderer/entity/model/ParrotModel$State + m ()[Lnet/minecraft/class_584$class_585; values values + m (Ljava/lang/String;)Lnet/minecraft/class_584$class_585; valueOf valueOf + f [Lnet/minecraft/class_584$class_585; field_3467 $VALUES + f Lnet/minecraft/class_584$class_585; field_3463 PARTY + f Lnet/minecraft/class_584$class_585; field_3466 SITTING + f Lnet/minecraft/class_584$class_585; field_3465 STANDING + f Lnet/minecraft/class_584$class_585; field_3462 FLYING + f Lnet/minecraft/class_584$class_585; field_3464 ON_SHOULDER +c net/minecraft/class_584$1 net/minecraft/client/renderer/entity/model/ParrotModel$1 + f [I field_17140 field_217176_a +c net/minecraft/class_586 net/minecraft/client/renderer/entity/model/PandaModel + m (Lnet/minecraft/class_1440;FFF)V method_17102 setLivingAnimations + m (Lnet/minecraft/class_1440;FFFFF)V method_17103 setRotationAngles + f F field_3470 field_217164_l + f F field_3469 field_217165_m + f F field_3468 field_217166_n +c net/minecraft/class_587 net/minecraft/client/renderer/entity/model/PigModel +c net/minecraft/class_588 net/minecraft/client/renderer/entity/model/PhantomModel + f Lnet/minecraft/class_630; field_3472 rightWing + f Lnet/minecraft/class_630; field_3471 tail1 + f Lnet/minecraft/class_630; field_3473 tail2 + f Lnet/minecraft/class_630; field_3476 leftWing + f Lnet/minecraft/class_630; field_3475 body + f Lnet/minecraft/class_630; field_3477 leftWingBody + f Lnet/minecraft/class_630; field_3474 rightWingBody +c net/minecraft/class_591 net/minecraft/client/renderer/entity/model/PlayerModel + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;II)V method_2824 renderEars + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;II)V method_2823 renderCape + m (Ljava/util/Random;)Lnet/minecraft/class_630; method_22697 getRandomModelRenderer + f Lnet/minecraft/class_630; field_3484 bipedLeftArmwear + f Lnet/minecraft/class_630; field_3486 bipedRightArmwear + f Lnet/minecraft/class_630; field_3482 bipedLeftLegwear + f Lnet/minecraft/class_630; field_3479 bipedRightLegwear + f Z field_3480 smallArms + f Lnet/minecraft/class_630; field_3485 bipedCape + f Lnet/minecraft/class_630; field_3483 bipedBodyWear + f Lnet/minecraft/class_630; field_3481 bipedDeadmau5Head + f Ljava/util/List; field_20787 modelRenderers +c net/minecraft/class_4840 net/minecraft/client/renderer/entity/model/PiglinModel + m (Lnet/minecraft/class_1308;FFFFF)V method_24803 setRotationAngles + m (Lnet/minecraft/class_1308;)V method_29354 func_239117_a_ + m (Lnet/minecraft/class_1308;F)V method_29355 func_230486_a_ + f Lnet/minecraft/class_630; field_22405 field_239116_b_ + f Lnet/minecraft/class_630; field_25633 field_241659_B_ + f Lnet/minecraft/class_630; field_25634 field_241660_y_ + f Lnet/minecraft/class_630; field_25635 field_241661_z_ + f Lnet/minecraft/class_630; field_22404 field_239115_a_ + f Lnet/minecraft/class_630; field_25632 field_241658_A_ +c net/minecraft/class_592 net/minecraft/client/renderer/entity/model/PufferFishBigModel + f Lnet/minecraft/class_630; field_3498 backRightSpines + f Lnet/minecraft/class_630; field_3492 bottomMidSpines + f Lnet/minecraft/class_630; field_3495 backTopSpines + f Lnet/minecraft/class_630; field_3488 backLeftSpines + f Lnet/minecraft/class_630; field_3497 frontLeftSpines + f Lnet/minecraft/class_630; field_3489 frontRightSpines + f Lnet/minecraft/class_630; field_3491 frontBottomSpines + f Lnet/minecraft/class_630; field_3490 frontTopSpines + f Lnet/minecraft/class_630; field_3494 leftFin + f Lnet/minecraft/class_630; field_3493 body + f Lnet/minecraft/class_630; field_3496 topMidSpines + f Lnet/minecraft/class_630; field_3499 rightFin + f Lnet/minecraft/class_630; field_3487 bottomBackSpines +c net/minecraft/class_590 net/minecraft/client/renderer/entity/model/PolarBearModel + m (Lnet/minecraft/class_1456;FFFFF)V method_17114 setRotationAngles +c net/minecraft/class_594 net/minecraft/client/renderer/entity/model/PufferFishSmallModel + f Lnet/minecraft/class_630; field_3508 tail + f Lnet/minecraft/class_630; field_3503 leftFin + f Lnet/minecraft/class_630; field_3506 leftEye + f Lnet/minecraft/class_630; field_3505 body + f Lnet/minecraft/class_630; field_3507 rightEye + f Lnet/minecraft/class_630; field_3504 rightFin +c net/minecraft/class_595 net/minecraft/client/renderer/entity/model/PufferFishMediumModel + f Lnet/minecraft/class_630; field_3516 body + f Lnet/minecraft/class_630; field_3514 frontLeftSpines + f Lnet/minecraft/class_630; field_3512 backLeftSpines + f Lnet/minecraft/class_630; field_3517 leftFin + f Lnet/minecraft/class_630; field_3509 backBottomSpine + f Lnet/minecraft/class_630; field_3511 backTopSpines + f Lnet/minecraft/class_630; field_3513 frontTopSpines + f Lnet/minecraft/class_630; field_3518 rightFin + f Lnet/minecraft/class_630; field_3519 frontRightSpines + f Lnet/minecraft/class_630; field_3515 frontBottomSpines + f Lnet/minecraft/class_630; field_3510 backRightSpines +c net/minecraft/class_597 net/minecraft/client/renderer/entity/model/QuadrupedModel + f Lnet/minecraft/class_630; field_3534 legBackLeft + f Lnet/minecraft/class_630; field_3536 legBackRight + f Lnet/minecraft/class_630; field_3535 headModel + f Lnet/minecraft/class_630; field_3533 legFrontRight + f Lnet/minecraft/class_630; field_3538 body + f Lnet/minecraft/class_630; field_3539 legFrontLeft +c net/minecraft/class_571 net/minecraft/client/renderer/entity/model/RavagerModel + m (Lnet/minecraft/class_1584;FFFFF)V method_17091 setRotationAngles + m (Lnet/minecraft/class_1584;FFF)V method_17089 setLivingAnimations + f Lnet/minecraft/class_630; field_3387 body + f Lnet/minecraft/class_630; field_3386 head + f Lnet/minecraft/class_630; field_3384 neck + f Lnet/minecraft/class_630; field_3388 jaw + f Lnet/minecraft/class_630; field_3385 legBackRight + f Lnet/minecraft/class_630; field_3389 legFrontRight + f Lnet/minecraft/class_630; field_3383 legBackLeft + f Lnet/minecraft/class_630; field_3382 legFrontLeft +c net/minecraft/class_596 net/minecraft/client/renderer/entity/model/RabbitModel + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22967 func_228291_b_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22966 func_228290_a_ + m (Lnet/minecraft/class_1463;FFF)V method_17115 setLivingAnimations + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22968 func_228292_c_ + m (Lnet/minecraft/class_1463;FFFFF)V method_17117 setRotationAngles + m (Lnet/minecraft/class_630;FFF)V method_2827 setRotationOffset + f Lnet/minecraft/class_630; field_3527 rabbitLeftArm + f Lnet/minecraft/class_630; field_3521 rabbitRightArm + f Lnet/minecraft/class_630; field_3526 rabbitLeftThigh + f Lnet/minecraft/class_630; field_3528 rabbitBody + f Lnet/minecraft/class_630; field_3522 rabbitRightThigh + f Lnet/minecraft/class_630; field_3524 rabbitTail + f Lnet/minecraft/class_630; field_3530 rabbitNose + f Lnet/minecraft/class_630; field_3525 rabbitLeftFoot + f Lnet/minecraft/class_630; field_3523 rabbitRightEar + f Lnet/minecraft/class_630; field_3529 rabbitHead + f Lnet/minecraft/class_630; field_3520 rabbitLeftEar + f F field_3531 jumpRotation + f Lnet/minecraft/class_630; field_3532 rabbitRightFoot +c net/minecraft/class_598 net/minecraft/client/renderer/entity/model/SheepWoolModel + m (Lnet/minecraft/class_1472;FFFFF)V method_17119 setRotationAngles + m (Lnet/minecraft/class_1472;FFF)V method_17118 setLivingAnimations + f F field_3541 headRotationAngleX +c net/minecraft/class_599 net/minecraft/client/renderer/entity/model/SalmonModel + f Lnet/minecraft/class_630; field_3544 finLeft + f Lnet/minecraft/class_630; field_3547 head + f Lnet/minecraft/class_630; field_3542 finRight + f Lnet/minecraft/class_630; field_3548 bodyRear + f Lnet/minecraft/class_630; field_3546 bodyFront +c net/minecraft/class_600 net/minecraft/client/renderer/entity/model/ShieldModel + m ()Lnet/minecraft/class_630; method_23774 func_228293_a_ + m ()Lnet/minecraft/class_630; method_23775 func_228294_b_ + f Lnet/minecraft/class_630; field_3550 plate + f Lnet/minecraft/class_630; field_3551 handle +c net/minecraft/class_601 net/minecraft/client/renderer/entity/model/SheepModel + m (Lnet/minecraft/class_1472;FFF)V method_17120 setLivingAnimations + m (Lnet/minecraft/class_1472;FFFFF)V method_17121 setRotationAngles + f F field_3552 headRotationAngleX +c net/minecraft/class_602 net/minecraft/client/renderer/entity/model/ShulkerModel + m ()Lnet/minecraft/class_630; method_2829 getLid + m ()Lnet/minecraft/class_630; method_2831 getBase + m ()Lnet/minecraft/class_630; method_2830 getHead + m (Lnet/minecraft/class_1606;FFFFF)V method_17122 setRotationAngles + f Lnet/minecraft/class_630; field_3553 base + f Lnet/minecraft/class_630; field_3554 head + f Lnet/minecraft/class_630; field_3555 lid +c net/minecraft/class_603 net/minecraft/client/renderer/entity/model/ShulkerBulletModel + f Lnet/minecraft/class_630; field_3556 renderer +c net/minecraft/class_606 net/minecraft/client/renderer/entity/model/SkeletonModel + m (Lnet/minecraft/class_1308;FFF)V method_19689 setLivingAnimations + m (Lnet/minecraft/class_1308;FFFFF)V method_19690 setRotationAngles +c net/minecraft/class_604 net/minecraft/client/renderer/entity/model/SilverfishModel + m ()Lcom/google/common/collect/ImmutableList; method_22969 getParts + f [Lnet/minecraft/class_630; field_3557 silverfishWings + f Lcom/google/common/collect/ImmutableList; field_20941 field_228295_f_ + f [[I field_3559 SILVERFISH_TEXTURE_POSITIONS + f [[I field_3558 SILVERFISH_BOX_LENGTH + f [Lnet/minecraft/class_630; field_3560 silverfishBodyParts + f [F field_3561 zPlacement +c net/minecraft/class_609 net/minecraft/client/renderer/entity/model/SlimeModel + f Lnet/minecraft/class_630; field_3573 slimeRightEye + f Lnet/minecraft/class_630; field_3570 slimeMouth + f Lnet/minecraft/class_630; field_3571 slimeBodies + f Lnet/minecraft/class_630; field_3572 slimeLeftEye +c net/minecraft/class_607 net/minecraft/client/renderer/entity/model/GenericHeadModel + m (FFF)V method_2821 func_225603_a_ + f Lnet/minecraft/class_630; field_3564 field_217105_a +c net/minecraft/class_611 net/minecraft/client/renderer/entity/model/SpiderModel + f Lnet/minecraft/class_630; field_3576 spiderLeg7 + f Lnet/minecraft/class_630; field_3585 spiderNeck + f Lnet/minecraft/class_630; field_3580 spiderLeg1 + f Lnet/minecraft/class_630; field_3581 spiderLeg6 + f Lnet/minecraft/class_630; field_3586 spiderLeg3 + f Lnet/minecraft/class_630; field_3582 spiderLeg8 + f Lnet/minecraft/class_630; field_3578 spiderLeg2 + f Lnet/minecraft/class_630; field_3577 spiderLeg4 + f Lnet/minecraft/class_630; field_3583 spiderHead + f Lnet/minecraft/class_630; field_3584 spiderBody + f Lnet/minecraft/class_630; field_3579 spiderLeg5 +c net/minecraft/class_608 net/minecraft/client/renderer/entity/model/SnowManModel + m ()Lnet/minecraft/class_630; method_2834 func_205070_a + f Lnet/minecraft/class_630; field_3567 body + f Lnet/minecraft/class_630; field_3568 head + f Lnet/minecraft/class_630; field_3565 leftHand + f Lnet/minecraft/class_630; field_3569 bottomBody + f Lnet/minecraft/class_630; field_3566 rightHand +c net/minecraft/class_4997 net/minecraft/client/renderer/entity/model/StriderModel + m (Lnet/minecraft/class_630;FFF)V method_26415 func_239127_a_ + m (Lnet/minecraft/class_4985;FFFFF)V method_26414 setRotationAngles + f Lnet/minecraft/class_630; field_23356 field_239121_g_ + f Lnet/minecraft/class_630; field_23361 field_239126_l_ + f Lnet/minecraft/class_630; field_23353 field_239118_a_ + f Lnet/minecraft/class_630; field_23355 field_239120_f_ + f Lnet/minecraft/class_630; field_23357 field_239122_h_ + f Lnet/minecraft/class_630; field_23354 field_239119_b_ + f Lnet/minecraft/class_630; field_23358 field_239123_i_ + f Lnet/minecraft/class_630; field_23360 field_239125_k_ + f Lnet/minecraft/class_630; field_23359 field_239124_j_ +c net/minecraft/class_610 net/minecraft/client/renderer/entity/model/SquidModel + f Lcom/google/common/collect/ImmutableList; field_20942 field_228296_f_ + f Lnet/minecraft/class_630; field_3575 body + f [Lnet/minecraft/class_630; field_3574 legs +c net/minecraft/class_612 net/minecraft/client/renderer/entity/model/TropicalFishAModel + f Lnet/minecraft/class_630; field_3589 body + f Lnet/minecraft/class_630; field_3590 finRight + f Lnet/minecraft/class_630; field_3591 tail + f Lnet/minecraft/class_630; field_3588 finLeft + f Lnet/minecraft/class_630; field_3587 finTop +c net/minecraft/class_613 net/minecraft/client/renderer/entity/model/TridentModel + f Lnet/minecraft/class_2960; field_3592 TEXTURE_LOCATION + f Lnet/minecraft/class_630; field_3593 modelRenderer +c net/minecraft/class_614 net/minecraft/client/renderer/entity/model/TurtleModel + m (Lnet/minecraft/class_1481;FFFFF)V method_17125 setRotationAngles + f Lnet/minecraft/class_630; field_3594 pregnant +c net/minecraft/class_615 net/minecraft/client/renderer/entity/model/TropicalFishBModel + f Lnet/minecraft/class_630; field_3595 finTop + f Lnet/minecraft/class_630; field_3600 finBottom + f Lnet/minecraft/class_630; field_3598 finRight + f Lnet/minecraft/class_630; field_3599 tail + f Lnet/minecraft/class_630; field_3596 finLeft + f Lnet/minecraft/class_630; field_3597 body +c net/minecraft/class_3884 net/minecraft/client/renderer/entity/model/IHeadToggle + m (Z)V method_17150 func_217146_a +c net/minecraft/class_617 net/minecraft/client/renderer/entity/model/VexModel + m (Lnet/minecraft/class_1634;FFFFF)V method_17127 setRotationAngles + f Lnet/minecraft/class_630; field_3602 rightWing + f Lnet/minecraft/class_630; field_3601 leftWing +c net/minecraft/class_622 net/minecraft/client/renderer/entity/model/WitchModel + m (Z)V method_2840 func_205074_a + m ()Lnet/minecraft/class_630; method_2839 func_205073_b + f Lnet/minecraft/class_630; field_3615 mole + f Z field_3614 holdingItem +c net/minecraft/class_620 net/minecraft/client/renderer/entity/model/VillagerModel + f Lnet/minecraft/class_630; field_17143 clothing + f Lnet/minecraft/class_630; field_3608 villagerHead + f Lnet/minecraft/class_630; field_3611 villagerNose + f Lnet/minecraft/class_630; field_3610 villagerBody + f Lnet/minecraft/class_630; field_17141 hat + f Lnet/minecraft/class_630; field_3606 leftVillagerLeg + f Lnet/minecraft/class_630; field_17142 hatBrim + f Lnet/minecraft/class_630; field_3609 villagerArms + f Lnet/minecraft/class_630; field_3607 rightVillagerLeg +c net/minecraft/class_621 net/minecraft/client/renderer/entity/model/WitherModel + m (Lnet/minecraft/class_1528;FFF)V method_17128 setLivingAnimations + m ()Lcom/google/common/collect/ImmutableList; method_22970 getParts + m (Lnet/minecraft/class_1528;FFFFF)V method_17130 setRotationAngles + f Lcom/google/common/collect/ImmutableList; field_20943 field_228297_f_ + f [Lnet/minecraft/class_630; field_3612 heads + f [Lnet/minecraft/class_630; field_3613 upperBodyParts +c net/minecraft/class_623 net/minecraft/client/renderer/entity/model/ZombieModel + m (Lnet/minecraft/class_1642;)Z method_17793 isAggressive +c net/minecraft/class_624 net/minecraft/client/renderer/entity/model/WolfModel + m (Lnet/minecraft/class_1493;FFFFF)V method_17133 setRotationAngles + m (Lnet/minecraft/class_1493;FFF)V method_17131 setLivingAnimations + f Lnet/minecraft/class_630; field_3617 tail + f Lnet/minecraft/class_630; field_3623 body + f Lnet/minecraft/class_630; field_3618 legFrontRight + f Lnet/minecraft/class_630; field_3624 legFrontLeft + f Lnet/minecraft/class_630; field_3619 mane + f Lnet/minecraft/class_630; field_3620 legBackLeft + f Lnet/minecraft/class_630; field_3621 head + f Lnet/minecraft/class_630; field_20789 tailChild + f Lnet/minecraft/class_630; field_3622 legBackRight + f Lnet/minecraft/class_630; field_20788 headChild +c net/minecraft/class_626 net/minecraft/client/renderer/tileentity/model/DragonHeadModel + f Lnet/minecraft/class_630; field_3638 head + f Lnet/minecraft/class_630; field_3639 jaw +c net/minecraft/class_619 net/minecraft/client/renderer/entity/model/ZombieVillagerModel + m (Lnet/minecraft/class_1642;FFFFF)V method_17135 setRotationAngles + f Lnet/minecraft/class_630; field_17144 field_217150_a +c net/minecraft/class_630 net/minecraft/client/renderer/model/ModelRenderer + m (FFFFFF)Lnet/minecraft/class_630; method_2844 addBox + m (FFFFFFFFF)V method_22971 addBox + m (Lnet/minecraft/class_630;)V method_17138 copyModelAngles + m (II)Lnet/minecraft/class_630; method_2850 setTextureOffset + m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;IIFFFF)V method_22702 doRender + m (Lnet/minecraft/class_630;)V method_2845 addChild + m (II)Lnet/minecraft/class_630; method_2853 setTextureSize + m (Ljava/lang/String;FFFIIIFII)Lnet/minecraft/class_630; method_2848 addBox + m (FFFFFFZ)Lnet/minecraft/class_630; method_2854 addBox + m (FFFFFFF)V method_2856 addBox + m ()Lnet/minecraft/class_630; method_29991 getModelAngleCopy + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFF)V method_22699 render + m (FFFFFFFZ)V method_2849 addBox + m (Ljava/util/Random;)Lnet/minecraft/class_630$class_628; method_22700 getRandomCube + m (FFF)V method_2851 setRotationPoint + m (Lnet/minecraft/class_4587;)V method_22703 translateRotate + m (IIFFFFFFFFFZZ)V method_22972 addBox + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;II)V method_22698 render + f Z field_3665 showModel + f Z field_3666 mirror + f I field_3670 textureOffsetY + f I field_3672 textureOffsetX + f F field_3658 textureHeight + f F field_3659 textureWidth + f F field_3674 rotateAngleZ + f Lit/unimi/dsi/fastutil/objects/ObjectList; field_3663 cubeList + f F field_3675 rotateAngleY + f F field_3654 rotateAngleX + f F field_3655 rotationPointZ + f F field_3656 rotationPointY + f F field_3657 rotationPointX + f Lit/unimi/dsi/fastutil/objects/ObjectList; field_3661 childModels +c net/minecraft/class_630$class_628 net/minecraft/client/renderer/model/ModelRenderer$ModelBox + m (Lnet/minecraft/class_630$class_628;)[Lnet/minecraft/class_630$class_593; method_22704 func_228311_a_ + f [Lnet/minecraft/class_630$class_593; field_3649 quads + f F field_3644 posY1 + f F field_3645 posX1 + f F field_3646 posZ2 + f F field_3647 posY2 + f F field_3648 posX2 + f F field_3643 posZ1 +c net/minecraft/class_630$class_593 net/minecraft/client/renderer/model/ModelRenderer$TexturedQuad + f [Lnet/minecraft/class_630$class_618; field_3502 vertexPositions + f Lnet/minecraft/class_1160; field_21618 normal +c net/minecraft/class_630$class_618 net/minecraft/client/renderer/model/ModelRenderer$PositionTextureVertex + m (FF)Lnet/minecraft/class_630$class_618; method_2837 setTextureUV + f Lnet/minecraft/class_1160; field_3605 position + f F field_3603 textureV + f F field_3604 textureU +c net/minecraft/class_631 net/minecraft/client/multiplayer/ClientChunkProvider + m (I)I method_20230 adjustViewDistance + m ()I method_20182 getLoadedChunksCount + m (Lnet/minecraft/class_2818;II)Z method_20181 isValid + m (IILnet/minecraft/class_4548;Lnet/minecraft/class_2540;Lnet/minecraft/class_2487;IZ)Lnet/minecraft/class_2818; method_16020 loadChunk + m (Ljava/util/function/BooleanSupplier;)V method_28102 tick + m (Lnet/minecraft/class_631;)Lnet/minecraft/class_638; method_18106 func_217253_a + m (IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2818; method_2857 getChunk + m (II)V method_20317 setCenter + m (II)V method_2859 unloadChunk + m (I)V method_20180 setViewDistance + f Lorg/apache/logging/log4j/Logger; field_3679 LOGGER + f Lnet/minecraft/class_2818; field_3676 empty + f Lnet/minecraft/class_631$class_3681; field_16246 array + f Lnet/minecraft/class_638; field_16525 world + f Lnet/minecraft/class_3568; field_3677 lightManager +c net/minecraft/class_631$class_3681 net/minecraft/client/multiplayer/ClientChunkProvider$ChunkArray + m (Lnet/minecraft/class_631$class_3681;II)I method_16032 func_217188_b + m (Lnet/minecraft/class_631$class_3681;I)I method_20319 func_217187_b + m (I)Lnet/minecraft/class_2818; method_16033 get + m (Lnet/minecraft/class_631$class_3681;I)I method_20318 func_217189_a + m (II)I method_16027 getIndex + m (Lnet/minecraft/class_631$class_3681;)I method_20382 func_217185_d + m (Lnet/minecraft/class_631$class_3681;)I method_20381 func_217182_c + m (Lnet/minecraft/class_631$class_3681;)I method_20184 func_217186_e + m (ILnet/minecraft/class_2818;)V method_16031 replace + m (Lnet/minecraft/class_631$class_3681;II)Z method_16029 func_217193_a + m (Lnet/minecraft/class_631$class_3681;)I method_16030 func_217180_b + m (Lnet/minecraft/class_631$class_3681;)Ljava/util/concurrent/atomic/AtomicReferenceArray; method_16028 func_217184_a + m (II)Z method_16034 inView + m (ILnet/minecraft/class_2818;Lnet/minecraft/class_2818;)Lnet/minecraft/class_2818; method_20183 unload + f Ljava/util/concurrent/atomic/AtomicReferenceArray; field_16251 chunks + f I field_19143 loaded + f I field_19205 centerZ + f I field_16252 sideLength + f Lnet/minecraft/class_631; field_16254 field_217194_a + f I field_19204 centerX + f I field_16253 viewDistance +c net/minecraft/class_631$1 net/minecraft/client/multiplayer/ClientChunkProvider$1 +c net/minecraft/class_632 net/minecraft/client/multiplayer/ClientAdvancementManager + m (Lnet/minecraft/class_632$class_633;)V method_2862 setListener + m (Lnet/minecraft/class_161;Z)V method_2864 setSelectedTab + m (Lnet/minecraft/class_2779;)V method_2861 read + m ()Lnet/minecraft/class_163; method_2863 getAdvancementList + f Lnet/minecraft/class_310; field_3684 mc + f Lnet/minecraft/class_161; field_3685 selectedTab + f Lnet/minecraft/class_163; field_3683 advancementList + f Lorg/apache/logging/log4j/Logger; field_3686 LOGGER + f Lnet/minecraft/class_632$class_633; field_3682 listener + f Ljava/util/Map; field_3681 advancementToProgress +c net/minecraft/class_632$class_633 net/minecraft/client/multiplayer/ClientAdvancementManager$IListener + m (Lnet/minecraft/class_161;)V method_2866 setSelectedTab + m (Lnet/minecraft/class_161;Lnet/minecraft/class_167;)V method_2865 onUpdateAdvancementProgress +c net/minecraft/class_638 net/minecraft/client/world/ClientWorld + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2394;Lnet/minecraft/class_265;D)V method_2948 spawnParticle + m (Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_4761;)V method_24462 func_239135_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2394;Z)V method_2938 spawnFluidParticle + m ()I method_18120 getCountLoadedEntities + m (Lnet/minecraft/class_2338;Lnet/minecraft/world/level/ColorResolver;)I method_23781 func_239138_c_ + m ()V method_29090 func_239141_x_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3414;Lnet/minecraft/class_3419;FFZ)V method_2947 playSound + m (Lnet/minecraft/class_2818;)V method_18110 onChunkUnloaded + m (IIIILjava/util/Random;ZLnet/minecraft/class_2338$class_2339;)V method_2943 animateTick + m (Lnet/minecraft/class_2338;F)V method_27873 func_239136_a_ + m (III)V method_2941 animateTick + m (Ljava/util/function/BooleanSupplier;)V method_8441 tick + m (I)V method_2945 removeEntityFromWorld + m ()Lnet/minecraft/class_638$class_5271; method_28104 getWorldInfo + m ()Ljava/lang/String; toString toString + m (J)V method_29089 func_239134_a_ + m (ILnet/minecraft/class_1297;)V method_18114 addEntityImpl + m (F)F method_23787 getStarBrightness + m (F)F method_23783 getSunBrightness + m (Lnet/minecraft/class_1297;)V method_18646 updateEntity + m (DDDDDLnet/minecraft/class_2394;)V method_2932 spawnParticle + m ()I method_23789 getTimeLightningFlash + m (Lnet/minecraft/class_1297;)Ljava/lang/String; method_18649 func_239139_e_ + m ()V method_2936 removeAllEntities + m (Lnet/minecraft/world/level/ColorResolver;Lnet/minecraft/class_4700;)V method_23779 func_228320_a_ + m ()Lnet/minecraft/class_631; method_2935 getChunkProvider + m ()V method_23784 clearColorCaches + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_2937 invalidateRegionAndSetBlock + m ()Lnet/minecraft/class_2338; method_27874 func_239140_u_ + m (Lnet/minecraft/class_2818;)V method_18115 addEntitiesToChunk + m ()V method_18116 tickEntities + m (Lnet/minecraft/class_2338;Lnet/minecraft/world/level/ColorResolver;)I method_23780 getBlockColorRaw + m ()Ljava/lang/String; method_2946 func_239142_z_ + m (II)V method_23782 onChunkLoaded + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)V method_18647 updateEntityRidden + m (III)V method_18113 markSurroundingsForRerender + m (F)Lnet/minecraft/class_243; method_23785 getCloudColor + m ()Ljava/lang/String; method_2933 func_228334_x_ + m (J)V method_8435 setDayTime + m (Lit/unimi/dsi/fastutil/objects/Object2ObjectArrayMap;)V method_23778 func_228319_a_ + m ()Ljava/lang/Iterable; method_18112 getAllEntities + m (Lnet/minecraft/class_2338;F)Lnet/minecraft/class_243; method_23777 getSkyColor + m (IILnet/minecraft/world/level/ColorResolver;Lnet/minecraft/class_4700;)V method_23776 func_228316_a_ + m ()Lnet/minecraft/class_5294; method_28103 func_239132_a_ + m (ILnet/minecraft/class_1297;)V method_2942 addEntity + m ()F method_30671 func_243489_v + m (Lnet/minecraft/class_1297;)V method_18117 removeEntity + m (Lnet/minecraft/class_269;)V method_2944 setScoreboard + m (ILnet/minecraft/class_742;)V method_18107 addPlayer + m (Lnet/minecraft/class_1297;)V method_18648 checkChunk + f Lnet/minecraft/class_631; field_24605 field_239129_E_ + f Ljava/util/Map; field_17675 maps + f I field_21526 timeLightningFlash + f Lnet/minecraft/class_634; field_3727 connection + f Lnet/minecraft/class_5294; field_24606 field_239131_x_ + f Ljava/util/List; field_18226 players + f Lit/unimi/dsi/fastutil/objects/Object2ObjectArrayMap; field_21527 colorCaches + f Lnet/minecraft/class_269; field_3733 scoreboard + f Lnet/minecraft/class_761; field_17780 worldRenderer + f Lnet/minecraft/class_310; field_3729 mc + f Lnet/minecraft/class_638$class_5271; field_24430 field_239130_d_ + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_17778 entitiesById +c net/minecraft/class_638$class_5271 net/minecraft/client/world/ClientWorld$ClientWorldInfo + m (J)V method_165 setDayTime + m ()D method_28105 getVoidFogHeight + m ()D method_28106 getFogDistance + m (Z)V method_27876 setDifficultyLocked + m (Lnet/minecraft/class_1267;)V method_27875 setDifficulty + m (J)V method_177 setGameTime + f J field_24438 gameTime + f Z field_24607 flatWorld + f J field_24439 dayTime + f Lnet/minecraft/class_1928; field_24434 gameRules + f Lnet/minecraft/class_1267; field_24441 difficulty + f I field_24435 spawnX + f Z field_24440 raining + f I field_24436 spawnY + f F field_26372 field_243490_g + f I field_24437 spawnZ + f Z field_24442 field_239154_k_ + f Z field_24433 hardcore +c net/minecraft/class_638$1 net/minecraft/client/world/ClientWorld$1 + f [I field_22436 field_239143_a_ +c net/minecraft/class_635 net/minecraft/client/network/login/ClientLoginNetHandler + m (Ljavax/crypto/SecretKey;Lio/netty/util/concurrent/Future;)V method_2893 func_209523_a + m (Ljava/lang/String;Lnet/minecraft/class_2917;Ljavax/crypto/SecretKey;)V method_2894 func_209524_a + m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_2892 joinServer + m ()Lcom/mojang/authlib/minecraft/MinecraftSessionService; method_2891 getSessionService + f Lnet/minecraft/class_437; field_3706 previousGuiScreen + f Lnet/minecraft/class_310; field_3708 mc + f Lcom/mojang/authlib/GameProfile; field_3709 gameProfile + f Lnet/minecraft/class_2535; field_3707 networkManager + f Lorg/apache/logging/log4j/Logger; field_3710 LOGGER + f Ljava/util/function/Consumer; field_3711 statusMessageConsumer +c net/minecraft/class_637 net/minecraft/client/multiplayer/ClientSuggestionProvider + m (D)Ljava/lang/String; method_2929 formatDouble + m (I)Ljava/lang/String; method_2930 formatInt + m (ILcom/mojang/brigadier/suggestion/Suggestions;)V method_2931 handleResponse + f Lnet/minecraft/class_634; field_3722 connection + f Lnet/minecraft/class_310; field_3725 mc + f Ljava/util/concurrent/CompletableFuture; field_3723 future + f I field_3724 currentTransaction +c net/minecraft/class_634 net/minecraft/client/network/play/ClientPlayNetHandler + m ()Lnet/minecraft/class_5455; method_29091 func_239165_n_ + m ()Lcom/mojang/authlib/GameProfile; method_2879 getGameProfile + m ()Lnet/minecraft/class_638; method_2890 getWorld + m ()Lnet/minecraft/class_300; method_2876 getNBTQueryManager + m (Lnet/minecraft/class_299;Lnet/minecraft/class_1860;)V method_17795 func_217278_a_ + m (Lnet/minecraft/class_1703;Lnet/minecraft/class_1860;)V method_17794 func_241665_a_ + m (Lnet/minecraft/class_2596;)V method_2883 sendPacket + m ()Lnet/minecraft/class_637; method_2875 getSuggestionProvider + m ()Ljava/util/Collection; method_2880 getPlayerInfoMap + m ()Lnet/minecraft/class_632; method_2869 getAdvancementManager + m ()V method_2882 func_241672_o_ + m ()Lnet/minecraft/class_5415; method_2867 getTags + m (Ljava/util/UUID;)Lnet/minecraft/class_640; method_2871 getPlayerInfo + m (Ljava/lang/String;)Lnet/minecraft/class_640; method_2874 getPlayerInfo + m (Ljava/lang/String;)Z method_2888 validateResourcePackUrl + m (Ljava/lang/String;Ljava/lang/String;Z)V method_2884 func_217274_a_ + m ()V method_2868 cleanup + m (ILnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_31176 func_243492_a + m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_19691 getTotemItem + m ()Ljava/util/Set; method_29356 func_239164_m_ + m (Lnet/minecraft/class_2856$class_2857;)V method_2873 sendResourcePackStatus + m (Lnet/minecraft/class_1297;Lcom/mojang/datafixers/util/Pair;)V method_30135 func_241664_a_ + m ()Lcom/mojang/brigadier/CommandDispatcher; method_2886 getCommandDispatcher + m (IILnet/minecraft/class_3568;Lnet/minecraft/class_1944;IILjava/util/Iterator;Z)V method_2870 setLightData + m ()V method_2887 func_241673_p_ + m (Lnet/minecraft/class_299;Lnet/minecraft/class_516;)V method_2881 func_199527_a_ + m ()Ljava/util/UUID; method_16690 getSessionId + m (Ljava/lang/String;Ljava/lang/String;)V method_2889 func_241669_a_ + m (Ljava/util/concurrent/CompletableFuture;)V method_2885 handlePackFuture + m ()Lnet/minecraft/class_1863; method_2877 getRecipeManager + m (Ljava/lang/Throwable;)Ljava/lang/Void; method_2878 func_217276_a_ + f I field_19144 viewDistance + f Z field_3698 doneLoadingTerrain + f Ljava/util/Map; field_3693 playerInfoMap + f Lnet/minecraft/class_5455; field_25063 field_239163_t_ + f Lnet/minecraft/class_310; field_3690 client + f Lnet/minecraft/class_300; field_3692 nbtQueryManager + f Lnet/minecraft/class_2535; field_3689 netManager + f Ljava/util/Set; field_25273 field_239162_s_ + f Lnet/minecraft/class_5415; field_3694 networkTagManager + f Lnet/minecraft/class_637; field_3691 clientSuggestionProvider + f Lnet/minecraft/class_437; field_3701 guiScreenServer + f Lnet/minecraft/class_638$class_5271; field_24321 field_239161_g_ + f Lnet/minecraft/class_638; field_3699 world + f Lnet/minecraft/class_2561; field_26620 field_243491_b + f Lcom/mojang/brigadier/CommandDispatcher; field_3696 commandDispatcher + f Lcom/mojang/authlib/GameProfile; field_3697 profile + f Lnet/minecraft/class_1863; field_3688 recipeManager + f Ljava/util/UUID; field_16771 sessionId + f Lnet/minecraft/class_632; field_3700 advancementManager + f Ljava/util/Random; field_3687 avRandomizer + f Lorg/apache/logging/log4j/Logger; field_3695 LOGGER +c net/minecraft/class_634$1 net/minecraft/client/network/play/ClientPlayNetHandler$1 + f [I field_3703 field_217258_b + f [I field_3705 field_217257_a + f [I field_3704 field_217260_d + f [I field_3702 field_217259_c +c net/minecraft/class_640 net/minecraft/client/network/play/NetworkPlayerInfo + m ()I method_2959 getResponseTime + m ()Lnet/minecraft/class_2960; method_2957 getLocationElytra + m (I)V method_2972 setLastHealth + m (J)V method_2978 setLastHealthTime + m (I)V method_2970 setResponseTime + m ()Lnet/minecraft/class_1934; method_2958 getGameType + m ()Lnet/minecraft/class_268; method_2955 getPlayerTeam + m ()J method_2976 getRenderVisibilityId + m ()Lnet/minecraft/class_2561; method_2971 getDisplayName + m ()J method_2961 getHealthBlinkTime + m (Lnet/minecraft/class_2561;)V method_2962 setDisplayName + m ()J method_2974 getLastHealthTime + m ()V method_2969 loadPlayerTextures + m (Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/class_2960;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V method_2956 func_210250_a + m ()I method_2960 getDisplayHealth + m ()I method_2973 getLastHealth + m (Lnet/minecraft/class_1934;)V method_2963 setGameType + m ()Z method_2967 hasLocationSkin + m ()Ljava/lang/String; method_2977 getSkinType + m ()Lcom/mojang/authlib/GameProfile; method_2966 getGameProfile + m ()Lnet/minecraft/class_2960; method_2968 getLocationSkin + m (J)V method_2964 setRenderVisibilityId + m ()Lnet/minecraft/class_2960; method_2979 getLocationCape + m (I)V method_2965 setDisplayHealth + m (J)V method_2975 setHealthBlinkTime + f Lcom/mojang/authlib/GameProfile; field_3741 gameProfile + f Lnet/minecraft/class_2561; field_3743 displayName + f Ljava/lang/String; field_3745 skinType + f I field_3739 responseTime + f Lnet/minecraft/class_1934; field_3744 gameType + f Ljava/util/Map; field_3742 playerTextures + f J field_3746 renderVisibilityId + f J field_3747 healthBlinkTime + f Z field_3740 playerTexturesLoaded + f J field_3737 lastHealthTime + f I field_3736 displayHealth + f I field_3738 lastHealth +c net/minecraft/class_636 net/minecraft/client/multiplayer/PlayerController + m ()V method_2925 resetBlockRemoving + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_2919 processRightClick + m (Lnet/minecraft/class_1657;)V method_2903 setPlayerCapabilities + m (Lnet/minecraft/class_2338;)Z method_2899 onPlayerDestroyBlock + m (Lnet/minecraft/class_638;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2846$class_2847;Z)V method_21705 acknowledgePlayerDiggingReceived + m ()Z method_2923 getIsHittingBlock + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_2902 onPlayerDamageBlock + m (Lnet/minecraft/class_1799;)V method_2915 sendPacketDropItem + m (Lnet/minecraft/class_638;Lnet/minecraft/class_3469;Lnet/minecraft/class_299;)Lnet/minecraft/class_746; method_29357 createPlayer + m (Lnet/minecraft/class_1934;)V method_30108 func_241675_a_ + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1297;)V method_2918 attackEntity + m ()Z method_2895 isRidingHorse + m ()Z method_2914 isInCreativeMode + m ()Lnet/minecraft/class_1934; method_2920 getCurrentGameType + m ()Z method_2913 gameIsSurvivalOrAdventure + m ()Z method_2908 shouldDrawHUD + m (Lnet/minecraft/class_1657;)V method_2897 onStoppedUsingItem + m (Lnet/minecraft/class_2338;)Z method_2922 isHittingPosition + m (Lnet/minecraft/class_638;Lnet/minecraft/class_3469;Lnet/minecraft/class_299;ZZ)Lnet/minecraft/class_746; method_2901 func_239167_a_ + m (Lnet/minecraft/class_1799;I)V method_2909 sendSlotPacket + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1297;Lnet/minecraft/class_3966;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_2917 interactWithEntity + m ()F method_2904 getBlockReachDistance + m (I)V method_2916 pickItem + m (ILnet/minecraft/class_1860;Z)V method_2912 sendPlaceRecipePacket + m (Lnet/minecraft/class_2846$class_2847;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)V method_21706 sendDiggingPacket + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_2910 clickBlock + m ()V method_2911 syncCurrentPlayItem + m (II)V method_2900 sendEnchantPacket + m ()Z method_2928 isSpectatorMode + m ()Z method_2926 extendedReach + m (Lnet/minecraft/class_1934;)V method_2907 setGameType + m ()Z method_2924 isNotCreative + m ()Lnet/minecraft/class_1934; method_28107 func_241822_k + m ()V method_2927 tick + m (Lnet/minecraft/class_746;Lnet/minecraft/class_638;Lnet/minecraft/class_1268;Lnet/minecraft/class_3965;)Lnet/minecraft/class_1269; method_2896 func_217292_a + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1297;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_2905 interactWithEntity + m (IIILnet/minecraft/class_1713;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_2906 windowClick + f Lnet/minecraft/class_1934; field_24608 field_239166_k_ + f F field_3713 stepSoundTickCounter + f Lnet/minecraft/class_310; field_3712 mc + f Lnet/minecraft/class_1799; field_3718 currentItemHittingBlock + f Lnet/minecraft/class_1934; field_3719 currentGameType + f I field_3716 blockHitDelay + f F field_3715 curBlockDamageMP + f Lnet/minecraft/class_2338; field_3714 currentBlock + f Lit/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap; field_20317 unacknowledgedDiggingPackets + f Lnet/minecraft/class_634; field_3720 connection + f Z field_3717 isHittingBlock + f I field_3721 currentPlayerItem + f Lorg/apache/logging/log4j/Logger; field_20316 LOGGER +c net/minecraft/class_642 net/minecraft/client/multiplayer/ServerData + m (Lnet/minecraft/class_642;)V method_2996 copyFrom + m (Ljava/lang/String;)V method_2989 setBase64EncodedIconData + m ()Ljava/lang/String; method_2991 getBase64EncodedIconData + m ()Lnet/minecraft/class_642$class_643; method_2990 getResourceMode + m (Lnet/minecraft/class_642$class_643;)V method_2995 setResourceMode + m ()Lnet/minecraft/class_2487; method_2992 getNBTCompound + m ()Z method_2994 isOnLAN + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_642; method_2993 getServerDataFromNBTCompound + f Lnet/minecraft/class_642$class_643; field_3755 resourceMode + f Ljava/lang/String; field_3752 serverName + f Lnet/minecraft/class_2561; field_3753 populationInfo + f Ljava/lang/String; field_3759 serverIcon + f Lnet/minecraft/class_2561; field_3757 serverMOTD + f Z field_3763 lanServer + f Lnet/minecraft/class_2561; field_3760 gameVersion + f I field_3756 version + f J field_3758 pingToServer + f Ljava/util/List; field_3762 playerList + f Ljava/lang/String; field_3761 serverIP + f Z field_3754 pinged +c net/minecraft/class_642$class_643 net/minecraft/client/multiplayer/ServerData$ServerResourceMode + m ()Lnet/minecraft/class_2561; method_2997 getMotd + m ()[Lnet/minecraft/class_642$class_643; values values + m (Ljava/lang/String;)Lnet/minecraft/class_642$class_643; valueOf valueOf + f [Lnet/minecraft/class_642$class_643; field_3766 $VALUES + f Lnet/minecraft/class_642$class_643; field_3767 PROMPT + f Lnet/minecraft/class_642$class_643; field_3764 DISABLED + f Lnet/minecraft/class_2561; field_3765 motd + f Lnet/minecraft/class_642$class_643; field_3768 ENABLED +c net/minecraft/class_639 net/minecraft/client/multiplayer/ServerAddress + m (Ljava/lang/String;)Lnet/minecraft/class_639; method_2950 fromString + m ()Ljava/lang/String; method_2952 getIP + m ()I method_2954 getPort + m (Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair; method_2953 func_241677_b_ + m (Ljava/lang/String;I)I method_2951 getInt + f I field_3735 serverPort + f Ljava/lang/String; field_3734 ipAddress +c net/minecraft/class_644 net/minecraft/client/network/ServerPinger + m (II)Lnet/minecraft/class_2561; method_27647 func_239171_b_ + m (Lnet/minecraft/class_642;Ljava/lang/Runnable;)V method_3003 ping + m ()Lcom/google/common/base/Splitter; method_2999 func_239173_d_ + m (Lnet/minecraft/class_642;)V method_3001 tryCompatibilityPing + m ()V method_3004 clearPendingNetworks + m (Lnet/minecraft/class_644;Lnet/minecraft/class_642;)V method_2998 func_239170_a_ + m ()V method_3000 pingPendingNetworks + m (II)Lnet/minecraft/class_2561; method_27646 func_239169_a_ + m ()Lorg/apache/logging/log4j/Logger; method_3002 func_239172_c_ + f Lcom/google/common/base/Splitter; field_3770 PING_RESPONSE_SPLITTER + f Lorg/apache/logging/log4j/Logger; field_3771 LOGGER + f Ljava/util/List; field_3769 pingDestinations +c net/minecraft/class_644$1 net/minecraft/client/network/ServerPinger$1 + f Lnet/minecraft/class_644; field_3777 field_147405_c + f J field_3772 pingSentAt + f Lnet/minecraft/class_2535; field_3774 field_147404_b + f Z field_3773 receivedStatus + f Ljava/lang/Runnable; field_25636 field_241679_c_ + f Lnet/minecraft/class_642; field_3776 field_147406_a + f Z field_3775 successful +c net/minecraft/class_644$2 net/minecraft/client/network/ServerPinger$2 + m (Lio/netty/channel/Channel;)V initChannel initChannel + f Lnet/minecraft/class_639; field_3778 field_147218_a + f Lnet/minecraft/class_642; field_3779 field_147216_b + f Lnet/minecraft/class_644; field_3780 field_147217_c +c net/minecraft/class_644$2$1 net/minecraft/client/network/ServerPinger$2$1 + m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;)V method_3005 channelRead0 + m (Lio/netty/channel/ChannelHandlerContext;)V channelActive channelActive + m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Throwable;)V exceptionCaught exceptionCaught + m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;)V channelRead0 channelRead0 + f Lnet/minecraft/class_644$2; field_3781 field_147220_a +c net/minecraft/class_641 net/minecraft/client/multiplayer/ServerList + m (Lnet/minecraft/class_642;)V method_2986 saveSingleServer + m (ILnet/minecraft/class_642;)V method_2980 set + m (II)V method_2985 swapServers + m ()I method_2984 countServers + m (I)Lnet/minecraft/class_642; method_2982 getServerData + m (Lnet/minecraft/class_642;)V method_2983 func_217506_a + m (Lnet/minecraft/class_642;)V method_2988 addServerData + m ()V method_2987 saveServerList + m ()V method_2981 loadServerList + f Lorg/apache/logging/log4j/Logger; field_3751 LOGGER + f Ljava/util/List; field_3749 servers + f Lnet/minecraft/class_310; field_3750 mc +c net/minecraft/class_645 net/minecraft/client/particle/SweepAttackParticle + f Lnet/minecraft/class_4002; field_17781 spriteWithAge +c net/minecraft/class_645$class_646 net/minecraft/client/particle/SweepAttackParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3006 makeParticle + f Lnet/minecraft/class_4002; field_17782 spriteSet +c net/minecraft/class_645$1 net/minecraft/client/particle/SweepAttackParticle$1 +c net/minecraft/class_4792 net/minecraft/client/particle/AshParticle +c net/minecraft/class_4792$class_4793 net/minecraft/client/particle/AshParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24463 makeParticle + f Lnet/minecraft/class_4002; field_22235 spriteSet +c net/minecraft/class_4794 net/minecraft/client/particle/RisingParticle + f D field_22236 yAccel + f Lnet/minecraft/class_4002; field_22237 spriteWithAge +c net/minecraft/class_651 net/minecraft/client/particle/BarrierParticle +c net/minecraft/class_651$class_652 net/minecraft/client/particle/BarrierParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3010 makeParticle +c net/minecraft/class_651$1 net/minecraft/client/particle/BarrierParticle$1 +c net/minecraft/class_647 net/minecraft/client/particle/BreakingParticle + f F field_17783 uCoord + f F field_17784 vCoord +c net/minecraft/class_647$class_649 net/minecraft/client/particle/BreakingParticle$SlimeFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3008 makeParticle +c net/minecraft/class_647$class_648 net/minecraft/client/particle/BreakingParticle$Factory + m (Lnet/minecraft/class_2392;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3007 makeParticle +c net/minecraft/class_647$1 net/minecraft/client/particle/BreakingParticle$1 +c net/minecraft/class_647$class_650 net/minecraft/client/particle/BreakingParticle$SnowballFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3009 makeParticle +c net/minecraft/class_655 net/minecraft/client/particle/BubbleParticle +c net/minecraft/class_655$class_656 net/minecraft/client/particle/BubbleParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3012 makeParticle + f Lnet/minecraft/class_4002; field_17785 spriteSet +c net/minecraft/class_655$1 net/minecraft/client/particle/BubbleParticle$1 +c net/minecraft/class_653 net/minecraft/client/particle/BubbleColumnUpParticle +c net/minecraft/class_653$class_654 net/minecraft/client/particle/BubbleColumnUpParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3011 makeParticle + f Lnet/minecraft/class_4002; field_17786 spriteSet +c net/minecraft/class_653$1 net/minecraft/client/particle/BubbleColumnUpParticle$1 +c net/minecraft/class_3937 net/minecraft/client/particle/CampfireParticle +c net/minecraft/class_3937$class_3995 net/minecraft/client/particle/CampfireParticle$SignalSmokeFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18820 makeParticle + f Lnet/minecraft/class_4002; field_17789 spriteSet +c net/minecraft/class_3937$class_3938 net/minecraft/client/particle/CampfireParticle$CozySmokeFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_17579 makeParticle + f Lnet/minecraft/class_4002; field_18290 spriteSet +c net/minecraft/class_3937$1 net/minecraft/client/particle/CampfireParticle$1 +c net/minecraft/class_661 net/minecraft/client/particle/BubblePopParticle + f Lnet/minecraft/class_4002; field_17787 spriteSetWithAge +c net/minecraft/class_661$class_662 net/minecraft/client/particle/BubblePopParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3016 makeParticle + f Lnet/minecraft/class_4002; field_17788 spriteSet +c net/minecraft/class_661$1 net/minecraft/client/particle/BubblePopParticle$1 +c net/minecraft/class_666 net/minecraft/client/particle/DragonBreathParticle + f Z field_3792 hasHitGround + f Lnet/minecraft/class_4002; field_17793 spriteWithAge +c net/minecraft/class_666$class_667 net/minecraft/client/particle/DragonBreathParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3019 makeParticle + f Lnet/minecraft/class_4002; field_17794 spriteSet +c net/minecraft/class_666$1 net/minecraft/client/particle/DragonBreathParticle$1 +c net/minecraft/class_657 net/minecraft/client/particle/CritParticle +c net/minecraft/class_657$class_658 net/minecraft/client/particle/CritParticle$DamageIndicatorFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3013 makeParticle + f Lnet/minecraft/class_4002; field_17790 spriteSet +c net/minecraft/class_657$1 net/minecraft/client/particle/CritParticle$1 +c net/minecraft/class_657$class_3939 net/minecraft/client/particle/CritParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_17580 makeParticle + f Lnet/minecraft/class_4002; field_18291 spriteSet +c net/minecraft/class_657$class_659 net/minecraft/client/particle/CritParticle$MagicFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3014 makeParticle + f Lnet/minecraft/class_4002; field_17791 spriteSet +c net/minecraft/class_671 net/minecraft/client/particle/RedstoneParticle + f Lnet/minecraft/class_4002; field_17801 spriteWithAge +c net/minecraft/class_671$class_672 net/minecraft/client/particle/RedstoneParticle$Factory + m (Lnet/minecraft/class_2390;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3022 makeParticle + f Lnet/minecraft/class_4002; field_17802 spriteSet +c net/minecraft/class_671$1 net/minecraft/client/particle/RedstoneParticle$1 +c net/minecraft/class_663 net/minecraft/client/particle/DripParticle + m ()V method_18821 ageParticle + m ()V method_18822 updateMotion + f Lnet/minecraft/class_3611; field_3789 fluid + f Z field_22437 fullbright +c net/minecraft/class_663$class_4501 net/minecraft/client/particle/DripParticle$LandingHoneyFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_22117 makeParticle + f Lnet/minecraft/class_4002; field_20517 spriteSet +c net/minecraft/class_663$class_4500 net/minecraft/client/particle/DripParticle$DrippingHoneyFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_22116 makeParticle + f Lnet/minecraft/class_4002; field_20516 spriteWithAge +c net/minecraft/class_663$class_664 net/minecraft/client/particle/DripParticle$DrippingLavaFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3017 makeParticle + f Lnet/minecraft/class_4002; field_18295 spriteSet +c net/minecraft/class_663$class_4086 net/minecraft/client/particle/DripParticle$FallingLavaFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18823 makeParticle + f Lnet/minecraft/class_4002; field_18294 spriteSet +c net/minecraft/class_663$class_4502 net/minecraft/client/particle/DripParticle$FallingNectarFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_22118 makeParticle + f Lnet/minecraft/class_4002; field_20518 spriteSet +c net/minecraft/class_663$class_4087 net/minecraft/client/particle/DripParticle$LandingLavaFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18824 makeParticle + f Lnet/minecraft/class_4002; field_18296 spriteSet +c net/minecraft/class_663$class_4854 net/minecraft/client/particle/DripParticle$DrippingObsidianTearFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24871 makeParticle + f Lnet/minecraft/class_4002; field_22439 spriteSet +c net/minecraft/class_663$class_4853 net/minecraft/client/particle/DripParticle$FallingObsidianTearFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24870 makeParticle + f Lnet/minecraft/class_4002; field_22438 spriteSet +c net/minecraft/class_663$class_4082 net/minecraft/client/particle/DripParticle$DrippingLava +c net/minecraft/class_663$class_4085 net/minecraft/client/particle/DripParticle$Landing +c net/minecraft/class_663$class_4084 net/minecraft/client/particle/DripParticle$Dripping + f Lnet/minecraft/class_2394; field_18293 particleData +c net/minecraft/class_663$class_4497 net/minecraft/client/particle/DripParticle$FallingNectarParticle +c net/minecraft/class_663$class_4083 net/minecraft/client/particle/DripParticle$FallingLiquidParticle + f Lnet/minecraft/class_2394; field_18292 particleData +c net/minecraft/class_663$class_4499 net/minecraft/client/particle/DripParticle$FallingHoneyFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_22115 makeParticle + f Lnet/minecraft/class_4002; field_20515 spriteSet +c net/minecraft/class_663$class_4498 net/minecraft/client/particle/DripParticle$FallingHoneyParticle +c net/minecraft/class_663$class_665 net/minecraft/client/particle/DripParticle$FallingWaterFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3018 makeParticle + f Lnet/minecraft/class_4002; field_18297 spriteSet +c net/minecraft/class_663$1 net/minecraft/client/particle/DripParticle$1 +c net/minecraft/class_663$class_4855 net/minecraft/client/particle/DripParticle$LandingObsidianTearFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24872 makeParticle + f Lnet/minecraft/class_4002; field_22440 spriteSet +c net/minecraft/class_663$class_4088 net/minecraft/client/particle/DripParticle$DrippingWaterFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18825 makeParticle + f Lnet/minecraft/class_4002; field_18298 spriteSet +c net/minecraft/class_675 net/minecraft/client/particle/EndRodParticle +c net/minecraft/class_675$class_676 net/minecraft/client/particle/EndRodParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3024 makeParticle + f Lnet/minecraft/class_4002; field_17805 spriteSet +c net/minecraft/class_675$1 net/minecraft/client/particle/EndRodParticle$1 +c net/minecraft/class_668 net/minecraft/client/particle/EnchantmentTableParticle + f D field_3793 coordZ + f D field_3795 coordX + f D field_3794 coordY +c net/minecraft/class_668$class_669 net/minecraft/client/particle/EnchantmentTableParticle$NautilusFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3020 makeParticle + f Lnet/minecraft/class_4002; field_17804 spriteSet +c net/minecraft/class_668$1 net/minecraft/client/particle/EnchantmentTableParticle$1 +c net/minecraft/class_668$class_670 net/minecraft/client/particle/EnchantmentTableParticle$EnchantmentTable + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3021 makeParticle + f Lnet/minecraft/class_4002; field_17803 spriteSet +c net/minecraft/class_682 net/minecraft/client/particle/FallingDustParticle + f Lnet/minecraft/class_4002; field_17808 spriteWithAge + f F field_3809 rotSpeed +c net/minecraft/class_682$class_683 net/minecraft/client/particle/FallingDustParticle$Factory + m (Lnet/minecraft/class_2388;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3033 makeParticle + f Lnet/minecraft/class_4002; field_17809 spriteSet +c net/minecraft/class_682$1 net/minecraft/client/particle/FallingDustParticle$1 +c net/minecraft/class_673 net/minecraft/client/particle/PoofParticle + f Lnet/minecraft/class_4002; field_17806 spriteWithAge +c net/minecraft/class_673$class_674 net/minecraft/client/particle/PoofParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3023 makeParticle + f Lnet/minecraft/class_4002; field_17807 spriteSet +c net/minecraft/class_687 net/minecraft/client/particle/FlameParticle +c net/minecraft/class_687$class_688 net/minecraft/client/particle/FlameParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3036 makeParticle + f Lnet/minecraft/class_4002; field_17812 spriteSet +c net/minecraft/class_687$1 net/minecraft/client/particle/FlameParticle$1 +c net/minecraft/class_677 net/minecraft/client/particle/FireworkParticle +c net/minecraft/class_677$class_680 net/minecraft/client/particle/FireworkParticle$Spark + m (Z)V method_3026 setTwinkle + m (Z)V method_3027 setTrail + f Z field_3804 trail + f F field_3799 fadeColourBlue + f F field_3801 fadeColourRed + f F field_3800 fadeColourGreen + f Z field_3802 hasFadeColour + f Lnet/minecraft/class_702; field_3798 effectRenderer + f Z field_3803 twinkle +c net/minecraft/class_677$class_678 net/minecraft/client/particle/FireworkParticle$Overlay +c net/minecraft/class_677$class_681 net/minecraft/client/particle/FireworkParticle$Starter + m ()Z method_3029 isFarFromCamera + m (DI[I[IZZ)V method_3031 createBall + m ([I[IZZ)V method_3032 createBurst + m (D[D[I[IZZZ)V method_3028 createShaped + m (DDDDDD[I[IZZ)V method_3030 createParticle + f Lnet/minecraft/class_702; field_3805 manager + f I field_3808 fireworkAge + f Lnet/minecraft/class_2499; field_3806 fireworkExplosions + f Z field_3807 twinkle +c net/minecraft/class_677$class_679 net/minecraft/client/particle/FireworkParticle$SparkFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3025 makeParticle + f Lnet/minecraft/class_4002; field_17811 spriteSet +c net/minecraft/class_677$class_3997 net/minecraft/client/particle/FireworkParticle$OverlayFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18121 makeParticle + f Lnet/minecraft/class_4002; field_17810 spriteSet +c net/minecraft/class_677$1 net/minecraft/client/particle/FireworkParticle$1 + f [I field_3797 field_199279_a +c net/minecraft/class_691 net/minecraft/client/particle/LargeExplosionParticle + f Lnet/minecraft/class_4002; field_17815 spriteWithAge +c net/minecraft/class_691$class_692 net/minecraft/client/particle/LargeExplosionParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3038 makeParticle + f Lnet/minecraft/class_4002; field_17816 spriteSet +c net/minecraft/class_691$1 net/minecraft/client/particle/LargeExplosionParticle$1 +c net/minecraft/class_684 net/minecraft/client/particle/HeartParticle +c net/minecraft/class_684$class_685 net/minecraft/client/particle/HeartParticle$AngryVillagerFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3034 makeParticle + f Lnet/minecraft/class_4002; field_17813 spriteSet +c net/minecraft/class_684$1 net/minecraft/client/particle/HeartParticle$1 +c net/minecraft/class_684$class_686 net/minecraft/client/particle/HeartParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3035 makeParticle + f Lnet/minecraft/class_4002; field_17814 spriteSet +c net/minecraft/class_693 net/minecraft/client/particle/ItemPickupParticle + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_29358 func_239181_a_ + f Lnet/minecraft/class_4599; field_20944 renderTypeBuffers + f I field_3826 particleAge + f Lnet/minecraft/class_1297; field_3823 item + f Lnet/minecraft/class_1297; field_3821 target + f Lnet/minecraft/class_898; field_3824 renderManager +c net/minecraft/class_689 net/minecraft/client/particle/HugeExplosionParticle + f I field_3814 timeSinceStart + f I field_3813 maximumTime +c net/minecraft/class_689$class_690 net/minecraft/client/particle/HugeExplosionParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3037 makeParticle +c net/minecraft/class_689$1 net/minecraft/client/particle/HugeExplosionParticle$1 +c net/minecraft/class_694 net/minecraft/client/particle/LavaParticle +c net/minecraft/class_694$class_695 net/minecraft/client/particle/LavaParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3039 makeParticle + f Lnet/minecraft/class_4002; field_17818 spriteSet +c net/minecraft/class_694$1 net/minecraft/client/particle/LavaParticle$1 +c net/minecraft/class_696 net/minecraft/client/particle/LargeSmokeParticle +c net/minecraft/class_696$class_697 net/minecraft/client/particle/LargeSmokeParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3040 makeParticle + f Lnet/minecraft/class_4002; field_17817 spriteSet +c net/minecraft/class_3998 net/minecraft/client/particle/MetaParticle +c net/minecraft/class_700 net/minecraft/client/particle/MobAppearanceParticle + f Lnet/minecraft/class_3879; field_21793 model + f Lnet/minecraft/class_1921; field_21792 renderType +c net/minecraft/class_700$class_701 net/minecraft/client/particle/MobAppearanceParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3042 makeParticle +c net/minecraft/class_700$1 net/minecraft/client/particle/MobAppearanceParticle$1 +c net/minecraft/class_703 net/minecraft/client/particle/Particle + m ()V method_3072 resetPositionToBB + m ()V method_3085 setExpired + m (F)I method_3068 getBrightnessForRender + m ()Z method_3086 isAlive + m ()Lnet/minecraft/class_3999; method_18122 getRenderType + m ()Ljava/lang/String; toString toString + m (I)V method_3077 setMaxAge + m (F)V method_3083 setAlphaF + m (FF)V method_3080 setSize + m (F)Lnet/minecraft/class_703; method_3075 multiplyVelocity + m (F)Lnet/minecraft/class_703; method_3087 multiplyParticleScaleBy + m ()V method_3070 tick + m (DDD)V method_3063 setPosition + m (DDD)V method_3069 move + m ()I method_3082 getMaxAge + m ()Lnet/minecraft/class_238; method_3064 getBoundingBox + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_4184;F)V method_3074 renderParticle + m (FFF)V method_3084 setColor + m (Lnet/minecraft/class_238;)V method_3067 setBoundingBox + f F field_3867 height + f I field_3866 age + f Z field_21507 collidedY + f Z field_3845 onGround + f Lnet/minecraft/class_238; field_3860 EMPTY_AABB + f Z field_3843 isExpired + f Z field_3862 canCollide + f Lnet/minecraft/class_238; field_3872 boundingBox + f F field_3844 particleGravity + f I field_3847 maxAge + f F field_3842 particleGreen + f F field_3861 particleRed + f F field_3859 particleBlue + f D field_3838 prevPosY + f D field_3858 prevPosX + f F field_3841 particleAlpha + f D field_3856 prevPosZ + f F field_3839 particleAngle + f Lnet/minecraft/class_638; field_3851 world + f D field_3874 posX + f D field_3871 posZ + f D field_3854 posY + f D field_3852 motionX + f D field_3869 motionY + f D field_3850 motionZ + f F field_3857 prevParticleAngle + f Ljava/util/Random; field_3840 rand + f F field_3849 width +c net/minecraft/class_698 net/minecraft/client/particle/NoteParticle +c net/minecraft/class_698$class_699 net/minecraft/client/particle/NoteParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3041 makeParticle + f Lnet/minecraft/class_4002; field_17819 spriteSet +c net/minecraft/class_698$1 net/minecraft/client/particle/NoteParticle$1 +c net/minecraft/class_4089 net/minecraft/client/particle/TexturesParticle + m (Lcom/google/gson/JsonElement;)Ljava/lang/String; method_18827 func_217597_a + m ()Ljava/util/List; method_18826 getTextures + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4089; method_18828 deserialize + f Ljava/util/List; field_18299 textures +c net/minecraft/class_707 net/minecraft/client/particle/IParticleFactory + m (Lnet/minecraft/class_2394;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3090 makeParticle +c net/minecraft/class_702 net/minecraft/client/particle/ParticleManager + m (Lnet/minecraft/class_2396;Lnet/minecraft/class_702$class_4091;)V method_18834 registerFactory + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597$class_4598;Lnet/minecraft/class_765;Lnet/minecraft/class_4184;F)V method_3049 renderParticles + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_3046 addBlockDestroyEffects + m (Lnet/minecraft/class_3300;Ljava/util/Map;Ljava/util/concurrent/Executor;Lnet/minecraft/class_2960;)Ljava/util/concurrent/CompletableFuture; method_18835 func_215228_a + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;DDDDDD)V method_3050 func_228348_a_ + m (Lnet/minecraft/class_3695;Ljava/util/Map;Lnet/minecraft/class_1059$class_4007;)V method_18831 func_215229_a + m ()Ljava/lang/String; method_3052 getStatistics + m (I)[Ljava/util/concurrent/CompletableFuture; method_18830 func_215239_a + m (Lnet/minecraft/class_2394;DDDDDD)Lnet/minecraft/class_703; method_3055 makeParticle + m (Lnet/minecraft/class_703;)V method_3058 addEffect + m (Lnet/minecraft/class_703;)V method_3059 tickParticle + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2394;)V method_3061 addParticleEmitter + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2394;I)V method_3051 emitParticleAtEntity + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;Ljava/util/Map;)V method_18837 func_215238_b + m (Lnet/minecraft/class_2396;Lnet/minecraft/class_707;)V method_3043 registerFactory + m (Lnet/minecraft/class_2394;DDDDDD)Lnet/minecraft/class_703; method_3056 addParticle + m ()V method_3057 tick + m (Lnet/minecraft/class_1058;Lnet/minecraft/class_2960;Ljava/util/List;)V method_18833 func_215227_a + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;Ljava/util/Map;)V method_18836 loadTextureLists + m ()V method_18829 close + m (Lnet/minecraft/class_3999;)Ljava/util/Queue; method_18125 func_228346_a_ + m (Lnet/minecraft/class_3999;Ljava/util/Queue;)V method_18126 func_228347_a_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_24046 func_228349_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)V method_3054 addBlockHitEffects + m (Lnet/minecraft/class_3695;Lnet/minecraft/class_3300;Ljava/util/Map;Ljava/lang/Void;)Lnet/minecraft/class_1059$class_4007; method_18832 func_228344_a_ + m ()V method_3062 registerFactories + m (Ljava/util/Collection;)V method_3048 tickParticleList + m (Lnet/minecraft/class_638;)V method_3045 clearEffects + f Ljava/util/Map; field_18300 sprites + f Ljava/util/Random; field_3832 rand + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_3835 factories + f Lnet/minecraft/class_638; field_3834 world + f Ljava/util/Queue; field_3836 queue + f Lnet/minecraft/class_1060; field_3831 renderer + f Ljava/util/Map; field_3830 byType + f Ljava/util/List; field_17820 TYPES + f Ljava/util/Queue; field_3837 particleEmitters + f Lnet/minecraft/class_1059; field_18301 atlas +c net/minecraft/class_702$1 net/minecraft/client/particle/ParticleManager$1 +c net/minecraft/class_702$class_4090 net/minecraft/client/particle/ParticleManager$AnimatedSpriteImpl + m (Ljava/util/List;)V method_18838 setSprites + f Lnet/minecraft/class_702; field_18302 field_217593_a + f Ljava/util/List; field_18303 sprites +c net/minecraft/class_702$class_4091 net/minecraft/client/particle/ParticleManager$IParticleMetaFactory + m (Lnet/minecraft/class_4002;)Lnet/minecraft/class_707; create create +c net/minecraft/class_704 net/minecraft/client/particle/CloudParticle + f Lnet/minecraft/class_4002; field_17862 spriteSetWithAge +c net/minecraft/class_704$class_706 net/minecraft/client/particle/CloudParticle$SneezeFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3089 makeParticle + f Lnet/minecraft/class_4002; field_17864 spriteSet +c net/minecraft/class_704$class_705 net/minecraft/client/particle/CloudParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3088 makeParticle + f Lnet/minecraft/class_4002; field_17863 spriteSet +c net/minecraft/class_704$1 net/minecraft/client/particle/CloudParticle$1 +c net/minecraft/class_3999 net/minecraft/client/particle/IParticleRenderType + m (Lnet/minecraft/class_287;Lnet/minecraft/class_1060;)V method_18130 beginRender + m (Lnet/minecraft/class_289;)V method_18131 finishRender + f Lnet/minecraft/class_3999; field_17831 CUSTOM + f Lnet/minecraft/class_3999; field_17832 NO_RENDER + f Lnet/minecraft/class_3999; field_17827 TERRAIN_SHEET + f Lnet/minecraft/class_3999; field_17828 PARTICLE_SHEET_OPAQUE + f Lnet/minecraft/class_3999; field_17829 PARTICLE_SHEET_TRANSLUCENT + f Lnet/minecraft/class_3999; field_17830 PARTICLE_SHEET_LIT +c net/minecraft/class_3999$1 net/minecraft/client/particle/IParticleRenderType$1 + m ()Ljava/lang/String; toString toString +c net/minecraft/class_3999$3 net/minecraft/client/particle/IParticleRenderType$3 + m ()Ljava/lang/String; toString toString +c net/minecraft/class_3999$2 net/minecraft/client/particle/IParticleRenderType$2 + m ()Ljava/lang/String; toString toString +c net/minecraft/class_3999$5 net/minecraft/client/particle/IParticleRenderType$5 + m ()Ljava/lang/String; toString toString +c net/minecraft/class_3999$4 net/minecraft/client/particle/IParticleRenderType$4 + m ()Ljava/lang/String; toString toString +c net/minecraft/class_3999$6 net/minecraft/client/particle/IParticleRenderType$6 + m ()Ljava/lang/String; toString toString +c net/minecraft/class_4974 net/minecraft/client/particle/ReversePortalParticle +c net/minecraft/class_4974$class_4975 net/minecraft/client/particle/ReversePortalParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_26268 makeParticle + f Lnet/minecraft/class_4002; field_23188 spriteSet +c net/minecraft/class_4974$1 net/minecraft/client/particle/ReversePortalParticle$1 +c net/minecraft/class_709 net/minecraft/client/particle/PortalParticle + f D field_3886 portalPosX + f D field_3885 portalPosY + f D field_3884 portalPosZ +c net/minecraft/class_709$class_710 net/minecraft/client/particle/PortalParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3094 makeParticle + f Lnet/minecraft/class_4002; field_17865 spriteSet +c net/minecraft/class_708 net/minecraft/client/particle/SimpleAnimatedParticle + m (I)V method_3093 setColor + m (F)V method_3091 setBaseAirFriction + m (I)V method_3092 setColorFade + f F field_3881 yAccel + f F field_3876 fadeTargetBlue + f Lnet/minecraft/class_4002; field_17866 spriteWithAge + f F field_3878 fadeTargetRed + f Z field_3880 fadingColor + f F field_3879 baseAirFriction + f F field_3877 fadeTargetGreen +c net/minecraft/class_4955 net/minecraft/client/particle/DeceleratingParticle +c net/minecraft/class_717 net/minecraft/client/particle/SmokeParticle +c net/minecraft/class_717$class_718 net/minecraft/client/particle/SmokeParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3101 makeParticle + f Lnet/minecraft/class_4002; field_17869 spriteSet +c net/minecraft/class_3940 net/minecraft/client/particle/TexturedParticle + m ()F method_18136 getMaxV + m (F)F method_18132 getScale + m ()F method_18135 getMinV + m ()F method_18133 getMinU + m ()F method_18134 getMaxU + f F field_17867 particleScale +c net/minecraft/class_711 net/minecraft/client/particle/SpellParticle + f Ljava/util/Random; field_3888 RANDOM + f Lnet/minecraft/class_4002; field_17870 spriteWithAge +c net/minecraft/class_711$class_716 net/minecraft/client/particle/SpellParticle$WitchFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3100 makeParticle + f Lnet/minecraft/class_4002; field_17875 spriteSet +c net/minecraft/class_711$class_713 net/minecraft/client/particle/SpellParticle$InstantFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3097 makeParticle + f Lnet/minecraft/class_4002; field_17872 spriteSet +c net/minecraft/class_711$class_712 net/minecraft/client/particle/SpellParticle$AmbientMobFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3096 makeParticle + f Lnet/minecraft/class_4002; field_17871 spriteSet +c net/minecraft/class_711$1 net/minecraft/client/particle/SpellParticle$1 +c net/minecraft/class_711$class_715 net/minecraft/client/particle/SpellParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3099 makeParticle + f Lnet/minecraft/class_4002; field_17874 spriteSet +c net/minecraft/class_711$class_714 net/minecraft/client/particle/SpellParticle$MobFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3098 makeParticle + f Lnet/minecraft/class_4002; field_17873 spriteSet +c net/minecraft/class_4956 net/minecraft/client/particle/SoulParticle + f Lnet/minecraft/class_4002; field_23091 spriteWithAge +c net/minecraft/class_4956$class_4957 net/minecraft/client/particle/SoulParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_25994 makeParticle + f Lnet/minecraft/class_4002; field_23092 spriteSet +c net/minecraft/class_4956$1 net/minecraft/client/particle/SoulParticle$1 +c net/minecraft/class_719 net/minecraft/client/particle/SplashParticle +c net/minecraft/class_719$class_720 net/minecraft/client/particle/SplashParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3102 makeParticle + f Lnet/minecraft/class_4002; field_17877 spriteSet +c net/minecraft/class_719$1 net/minecraft/client/particle/SplashParticle$1 +c net/minecraft/class_721 net/minecraft/client/particle/SpitParticle +c net/minecraft/class_721$class_722 net/minecraft/client/particle/SpitParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3103 makeParticle + f Lnet/minecraft/class_4002; field_17876 spriteSet +c net/minecraft/class_721$1 net/minecraft/client/particle/SpitParticle$1 +c net/minecraft/class_725 net/minecraft/client/particle/SquidInkParticle +c net/minecraft/class_725$class_726 net/minecraft/client/particle/SquidInkParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3105 makeParticle + f Lnet/minecraft/class_4002; field_17878 spriteSet +c net/minecraft/class_725$1 net/minecraft/client/particle/SquidInkParticle$1 +c net/minecraft/class_4002 net/minecraft/client/particle/IAnimatedSprite + m (Ljava/util/Random;)Lnet/minecraft/class_1058; method_18139 get + m (II)Lnet/minecraft/class_1058; method_18138 get +c net/minecraft/class_729 net/minecraft/client/particle/SuspendedTownParticle +c net/minecraft/class_729$class_730 net/minecraft/client/particle/SuspendedTownParticle$DolphinSpeedFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3110 makeParticle + f Lnet/minecraft/class_4002; field_17881 spriteSet +c net/minecraft/class_729$class_3991 net/minecraft/client/particle/SuspendedTownParticle$ComposterFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18044 makeParticle + f Lnet/minecraft/class_4002; field_17880 spriteSet +c net/minecraft/class_729$1 net/minecraft/client/particle/SuspendedTownParticle$1 +c net/minecraft/class_729$class_732 net/minecraft/client/particle/SuspendedTownParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3112 makeParticle + f Lnet/minecraft/class_4002; field_17883 spriteSet +c net/minecraft/class_729$class_731 net/minecraft/client/particle/SuspendedTownParticle$HappyVillagerFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3111 makeParticle + f Lnet/minecraft/class_4002; field_17882 spriteSet +c net/minecraft/class_723 net/minecraft/client/particle/UnderwaterParticle +c net/minecraft/class_723$class_4795 net/minecraft/client/particle/UnderwaterParticle$CrimsonSporeFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24464 makeParticle + f Lnet/minecraft/class_4002; field_22238 spriteSet +c net/minecraft/class_723$1 net/minecraft/client/particle/UnderwaterParticle$1 +c net/minecraft/class_723$class_4797 net/minecraft/client/particle/UnderwaterParticle$WarpedSporeFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24466 makeParticle + f Lnet/minecraft/class_4002; field_22240 spriteSet +c net/minecraft/class_723$class_4796 net/minecraft/client/particle/UnderwaterParticle$UnderwaterFactory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24465 makeParticle + f Lnet/minecraft/class_4002; field_22239 spriteSet +c net/minecraft/class_4003 net/minecraft/client/particle/SpriteTexturedParticle + m (Lnet/minecraft/class_4002;)V method_18142 selectSpriteWithAge + m (Lnet/minecraft/class_4002;)V method_18140 selectSpriteRandomly + m (Lnet/minecraft/class_1058;)V method_18141 setSprite + f Lnet/minecraft/class_1058; field_17886 sprite +c net/minecraft/class_727 net/minecraft/client/particle/DiggingParticle + m ()Lnet/minecraft/class_727; method_3106 init + m (Lnet/minecraft/class_2338;)V method_3107 multiplyColor + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_727; method_3108 setBlockPos + f Lnet/minecraft/class_2680; field_3892 sourceState + f Lnet/minecraft/class_2338; field_3891 sourcePos + f F field_17885 vCoord + f F field_17884 uCoord +c net/minecraft/class_727$class_728 net/minecraft/client/particle/DiggingParticle$Factory + m (Lnet/minecraft/class_2388;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3109 makeParticle +c net/minecraft/class_733 net/minecraft/client/particle/EmitterParticle + f Lnet/minecraft/class_1297; field_3894 attachedEntity + f Lnet/minecraft/class_2394; field_3893 particleTypes + f I field_3896 particleAge + f I field_3895 lifetime +c net/minecraft/class_734 net/minecraft/client/particle/TotemOfUndyingParticle +c net/minecraft/class_734$class_735 net/minecraft/client/particle/TotemOfUndyingParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3113 makeParticle + f Lnet/minecraft/class_4002; field_17887 spriteSet +c net/minecraft/class_734$1 net/minecraft/client/particle/TotemOfUndyingParticle$1 +c net/minecraft/class_736 net/minecraft/client/particle/CurrentDownParticle + f F field_3897 motionAngle +c net/minecraft/class_736$class_737 net/minecraft/client/particle/CurrentDownParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3114 makeParticle + f Lnet/minecraft/class_4002; field_17890 spriteSet +c net/minecraft/class_736$1 net/minecraft/client/particle/CurrentDownParticle$1 +c net/minecraft/class_738 net/minecraft/client/particle/WaterWakeParticle + f Lnet/minecraft/class_4002; field_17888 spriteWithAge +c net/minecraft/class_738$class_739 net/minecraft/client/particle/WaterWakeParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3115 makeParticle + f Lnet/minecraft/class_4002; field_17889 spriteSet +c net/minecraft/class_738$1 net/minecraft/client/particle/WaterWakeParticle$1 +c net/minecraft/class_5165 net/minecraft/client/particle/WhiteAshParticle +c net/minecraft/class_5165$class_5166 net/minecraft/client/particle/WhiteAshParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_27150 makeParticle + f Lnet/minecraft/class_4002; field_23936 spriteSet +c net/minecraft/class_740 net/minecraft/client/particle/RainParticle +c net/minecraft/class_740$class_741 net/minecraft/client/particle/RainParticle$Factory + m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3116 makeParticle + f Lnet/minecraft/class_4002; field_17891 spriteSet +c net/minecraft/class_744 net/minecraft/util/MovementInput + m (Z)V method_3129 tickMovement + m ()Lnet/minecraft/class_241; method_3128 getMoveVector + m ()Z method_20622 isMovingForward + f Z field_3909 backKeyDown + f Z field_3910 forwardKeyDown + f Z field_3903 sneaking + f Z field_3906 rightKeyDown + f F field_3905 moveForward + f Z field_3904 jump + f Z field_3908 leftKeyDown + f F field_3907 moveStrafe +c net/minecraft/class_742 net/minecraft/client/entity/player/AbstractClientPlayerEntity + m ()Z method_3126 isPlayerInfoSet + m (Ljava/lang/String;)Lnet/minecraft/class_2960; method_3124 getLocationSkin + m ()Lnet/minecraft/class_2960; method_3122 getLocationElytra + m ()Lnet/minecraft/class_640; method_3123 getPlayerInfo + m ()Z method_3127 hasSkin + m ()Lnet/minecraft/class_2960; method_3117 getLocationSkin + m ()Z method_3125 hasPlayerInfo + m ()Lnet/minecraft/class_2960; method_3119 getLocationCape + m (Lnet/minecraft/class_2960;Ljava/lang/String;)Lnet/minecraft/class_1046; method_3120 getDownloadImageSkin + m ()Ljava/lang/String; method_3121 getSkinType + m ()F method_3118 getFovModifier + f Lnet/minecraft/class_638; field_17892 worldClient + f Lnet/minecraft/class_640; field_3901 playerInfo + f F field_3898 rotateElytraZ + f F field_3900 rotateElytraX + f F field_3899 rotateElytraY +c net/minecraft/class_746 net/minecraft/client/entity/player/ClientPlayerEntity + m (Ljava/lang/String;)V method_3146 setServerBrand + m ()Lnet/minecraft/class_3469; method_3143 getStats + m ()Z method_20623 isUsingSwimmingAnimation + m (Lnet/minecraft/class_2338;)Z method_30674 shouldBlockPushPlayer + m (I)V method_3147 setPermissionLevel + m (FII)V method_3145 setXPStats + m ()F method_3140 getWaterBrightness + m (DD)V method_30673 setPlayerOffsetMotion + m ()Z method_20303 isForcedDown + m ()Z method_3131 isRidingHorse + m ()V method_3137 closeScreenAndDropStack + m ()Z method_3144 isRowingBoat + m (FF)V method_3148 updateAutoJump + m ()V method_3133 sendHorseJump + m ()V method_18654 handlePortalTeleportation + m ()Lnet/minecraft/class_299; method_3130 getRecipeBook + m ()V method_3132 sendHorseInventory + m ()Z method_22120 isMoving + m (Lnet/minecraft/class_1297;)Z method_27035 func_239205_c_ + m ()F method_3151 getHorseJumpPower + m (Lnet/minecraft/class_265;)Ljava/util/stream/Stream; method_3139 func_212329_a_ + m (F)V method_3138 setPlayerSPHealth + m (Z)V method_22420 setShowDeathScreen + m ()Z method_22419 isShowDeathScreen + m (Lnet/minecraft/class_1860;)V method_3141 removeRecipeHighlight + m ()F method_26269 getDarknessAmbience + m (Ljava/lang/String;)V method_3142 sendChatMessage + m ()Z method_3149 isAutoJumpEnabled + m ()Z method_3134 isCurrentViewEntity + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_30672 func_243494_a + m ()V method_3136 onUpdateWalkingPlayer + m ()Z method_22119 canAutoJump + m ()Ljava/lang/String; method_3135 getServerBrand + f D field_3924 lastReportedPosZ + f Lnet/minecraft/class_3469; field_3928 stats + f D field_3926 lastReportedPosX + f Lnet/minecraft/class_744; field_3913 movementInput + f F field_3922 horseJumpPower + f Z field_3936 clientSneakState + f F field_3925 lastReportedPitch + f I field_3923 positionUpdateTicks + f Ljava/lang/String; field_3943 serverBrand + f Z field_3920 prevOnGround + f F field_3916 renderArmPitch + f F field_3914 prevRenderArmPitch + f I field_3921 sprintingTicksLeft + f Z field_3927 autoJumpEnabled + f F field_3911 prevTimeInPortal + f Lnet/minecraft/class_299; field_3930 recipeBook + f F field_3941 lastReportedYaw + f Z field_3939 wasFallFlying + f I field_3912 permissionLevel + f D field_3940 lastReportedPosY + f Z field_20663 showDeathScreen + f Z field_23093 isCrouching + f I field_3938 horseJumpPowerCounter + f Z field_3919 serverSprintState + f Lnet/minecraft/class_1268; field_3945 activeHand + f I field_3934 autoJumpTime + f F field_3931 prevRenderArmYaw + f Ljava/util/List; field_3933 ambientSoundHandlers + f I field_3935 sprintToggleTimer + f Z field_3918 hasValidHealth + f Lnet/minecraft/class_310; field_3937 mc + f F field_3932 renderArmYaw + f Z field_3915 handActive + f I field_3917 counterInWater + f F field_3929 timeInPortal + f Lnet/minecraft/class_634; field_3944 connection + f Z field_3942 rowingBoat +c net/minecraft/class_743 net/minecraft/util/MovementInputFromOptions + f Lnet/minecraft/class_315; field_3902 gameSettings +c net/minecraft/class_748 net/minecraft/client/settings/HotbarSnapshot + m ()Z isEmpty isEmpty + m ()Ljava/util/List; delegate delegate + m ()Ljava/util/Collection; delegate delegate + m (Lnet/minecraft/class_2499;)V method_3152 fromTag + m ()Ljava/lang/Object; delegate delegate + m ()Lnet/minecraft/class_2499; method_3153 createTag + f Lnet/minecraft/class_2371; field_3948 hotbarItems +c net/minecraft/class_745 net/minecraft/client/entity/player/RemoteClientPlayerEntity +c net/minecraft/class_756 net/minecraft/client/renderer/tileentity/ItemStackTileEntityRenderer + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3166 func_239207_a_ + m (I)[Lnet/minecraft/class_2627; method_3165 func_199929_a + f Lnet/minecraft/class_2595; field_3978 chestTrap + f Lnet/minecraft/class_613; field_3985 trident + f Lnet/minecraft/class_2595; field_3976 chestBasic + f Lnet/minecraft/class_2627; field_3984 SHULKER_BOX + f [Lnet/minecraft/class_2627; field_3981 SHULKER_BOXES + f Lnet/minecraft/class_2587; field_3982 bed + f Lnet/minecraft/class_2573; field_3983 banner + f Lnet/minecraft/class_600; field_3980 modelShield + f Lnet/minecraft/class_2611; field_3977 enderChest + f Lnet/minecraft/class_756; field_3986 instance + f Lnet/minecraft/class_2597; field_3979 conduit +c net/minecraft/class_1163 net/minecraft/world/biome/BiomeColors + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_4966 getFoliageColor + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_4962 getGrassColor + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;Lnet/minecraft/world/level/ColorResolver;)I method_4965 getBlockColor + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_4961 getWaterColor + m (Lnet/minecraft/class_1959;DD)I method_23791 func_228362_b_ + m (Lnet/minecraft/class_1959;DD)I method_23790 func_228360_a_ + f Lnet/minecraft/world/level/ColorResolver; field_5664 FOLIAGE_COLOR + f Lnet/minecraft/world/level/ColorResolver; field_5665 GRASS_COLOR + f Lnet/minecraft/world/level/ColorResolver; field_5666 WATER_COLOR +c net/minecraft/class_751 net/minecraft/client/renderer/RenderSkyboxCube + m (Lnet/minecraft/class_1060;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_18143 loadAsync + m (Lnet/minecraft/class_310;FFF)V method_3156 render + f [Lnet/minecraft/class_2960; field_3952 locations +c net/minecraft/class_750 net/minecraft/client/renderer/RegionRenderCacheBuilder + m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_287; method_22706 func_228368_b_ + m ()V method_22705 resetBuilders + m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_1921; method_22707 func_228369_c_ + m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_287; method_3154 getBuilder + m ()V method_23501 discardBuilders + f Ljava/util/Map; field_3951 builders +c net/minecraft/class_280 net/minecraft/client/shader/ShaderInstance + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_277; method_16035 func_216543_a + m (Ljava/lang/String;)Lnet/minecraft/class_278; method_1275 getShaderUniform + m ()V method_1273 func_216544_e + m ()V method_1268 func_216536_h + m ()V method_1277 func_216535_f + m (Lcom/google/gson/JsonElement;)V method_1276 func_216541_a + m (Ljava/lang/String;)Lnet/minecraft/class_284; method_1271 func_216539_a + m (Lcom/google/gson/JsonElement;)V method_1272 func_216540_b + m ()V close close + m (Ljava/lang/String;Ljava/util/function/IntSupplier;)V method_1269 func_216537_a + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_281$class_282;Ljava/lang/String;)Lnet/minecraft/class_281; method_16036 func_216542_a + f I field_1521 field_216555_k + f Ljava/lang/String; field_1509 field_216556_l + f Ljava/util/List; field_1503 field_216550_f + f Lnet/minecraft/class_281; field_1508 field_216562_r + f Lnet/minecraft/class_280; field_1512 field_216547_c + f Z field_1511 field_216558_n + f Lnet/minecraft/class_281; field_1519 field_216563_s + f Ljava/util/Map; field_1516 field_216549_e + f Ljava/util/List; field_1507 field_216553_i + f Ljava/util/Map; field_1510 field_216554_j + f Ljava/util/List; field_1515 field_216552_h + f Lorg/apache/logging/log4j/Logger; field_1514 LOGGER + f Ljava/util/List; field_1506 field_216551_g + f Ljava/util/List; field_1504 field_216561_q + f Lnet/minecraft/class_278; field_1520 field_216546_b + f I field_1505 field_216548_d + f Ljava/util/List; field_1518 field_216560_p + f Lnet/minecraft/class_277; field_1517 field_216559_o +c net/minecraft/class_5294 net/minecraft/client/world/DimensionRenderInfo + m ()Z method_28114 func_241684_d_ + m (FF)[F method_28109 func_230492_a_ + m (Lnet/minecraft/class_2874;)Lnet/minecraft/class_5294; method_28111 func_243495_a + m ()Z method_29993 func_239217_c_ + m ()F method_28108 func_239213_a_ + m (Lit/unimi/dsi/fastutil/objects/Object2ObjectArrayMap;)V method_29092 func_239214_a_ + m (Lnet/minecraft/class_243;F)Lnet/minecraft/class_243; method_28112 func_230494_a_ + m (II)Z method_28110 func_230493_a_ + m ()Lnet/minecraft/class_5294$class_5401; method_29992 func_241683_c_ + m ()Z method_28113 func_239216_b_ + f Lit/unimi/dsi/fastutil/objects/Object2ObjectMap; field_24609 field_239208_a_ + f [F field_24610 field_239209_b_ + f Z field_25638 field_239212_e_ + f F field_24611 field_239210_c_ + f Z field_24613 field_241681_f_ + f Lnet/minecraft/class_5294$class_5401; field_25637 field_241680_e_ + f Z field_24612 field_239211_d_ +c net/minecraft/class_5294$class_5401 net/minecraft/client/world/DimensionRenderInfo$FogType + m ()[Lnet/minecraft/class_5294$class_5401; values values + m (Ljava/lang/String;)Lnet/minecraft/class_5294$class_5401; valueOf valueOf + f [Lnet/minecraft/class_5294$class_5401; field_25642 $VALUES + f Lnet/minecraft/class_5294$class_5401; field_25639 NONE + f Lnet/minecraft/class_5294$class_5401; field_25641 END + f Lnet/minecraft/class_5294$class_5401; field_25640 NORMAL +c net/minecraft/class_5294$class_5296 net/minecraft/client/world/DimensionRenderInfo$Nether +c net/minecraft/class_5294$class_5297 net/minecraft/client/world/DimensionRenderInfo$Overworld +c net/minecraft/class_5294$class_5295 net/minecraft/client/world/DimensionRenderInfo$End +c net/minecraft/class_758 net/minecraft/client/renderer/FogRenderer + m ()V method_3212 applyFog + m (Lnet/minecraft/class_4184;Lnet/minecraft/class_758$class_4596;FZ)V method_3211 setupFog + m ()V method_23792 resetFog + m (Lnet/minecraft/class_4184;FLnet/minecraft/class_638;IF)V method_3210 updateFogColor + m (Lnet/minecraft/class_638;Lnet/minecraft/class_4543;FIII)Lnet/minecraft/class_243; method_24873 func_239218_a_ + f I field_4041 waterFogColor + f F field_4034 red + f I field_4031 lastWaterFogColor + f F field_4032 blue + f J field_4042 waterFogUpdateTime + f F field_4033 green +c net/minecraft/class_758$class_4596 net/minecraft/client/renderer/FogRenderer$FogType + m (Ljava/lang/String;)Lnet/minecraft/class_758$class_4596; valueOf valueOf + m ()[Lnet/minecraft/class_758$class_4596; values values + f Lnet/minecraft/class_758$class_4596; field_20946 FOG_TERRAIN + f [Lnet/minecraft/class_758$class_4596; field_20947 $VALUES + f Lnet/minecraft/class_758$class_4596; field_20945 FOG_SKY +c net/minecraft/class_753 net/minecraft/client/renderer/FaceDirection + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_753; method_3163 getFacing + m ()[Lnet/minecraft/class_753; values values + m (Ljava/lang/String;)Lnet/minecraft/class_753; valueOf valueOf + m ([Lnet/minecraft/class_753;)V method_3161 func_209235_a + m (I)Lnet/minecraft/class_753$class_755; method_3162 getVertexInformation + f Lnet/minecraft/class_753; field_3961 EAST + f [Lnet/minecraft/class_753; field_3958 FACINGS + f Lnet/minecraft/class_753; field_3966 WEST + f [Lnet/minecraft/class_753$class_755; field_3959 vertexInfos + f Lnet/minecraft/class_753; field_3965 DOWN + f Lnet/minecraft/class_753; field_3963 SOUTH + f Lnet/minecraft/class_753; field_3960 UP + f [Lnet/minecraft/class_753; field_3964 $VALUES + f Lnet/minecraft/class_753; field_3962 NORTH +c net/minecraft/class_753$class_755 net/minecraft/client/renderer/FaceDirection$VertexInformation + f I field_3974 yIndex + f I field_3973 zIndex + f I field_3975 xIndex +c net/minecraft/class_753$class_754 net/minecraft/client/renderer/FaceDirection$Constants + f I field_3968 DOWN_INDEX + f I field_3972 SOUTH_INDEX + f I field_3967 WEST_INDEX + f I field_3971 UP_INDEX + f I field_3969 NORTH_INDEX + f I field_3970 EAST_INDEX +c net/minecraft/class_753$1 net/minecraft/client/renderer/FaceDirection$1 +c net/minecraft/class_5407 net/minecraft/client/renderer/GPUWarning + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Lnet/minecraft/class_5407$class_5408; method_30056 prepare + m (Lcom/google/gson/JsonArray;Ljava/util/List;)V method_30057 func_241693_a_ + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Lcom/google/gson/JsonObject; method_30061 func_241696_c_ + m (Lnet/minecraft/class_5407$class_5408;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_30058 apply + m ()V method_30138 func_241697_d_ + m (Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V method_30919 func_243498_a + m ()Z method_30137 func_241695_b_ + m ()Z method_30055 func_241692_a_ + m ()V method_30140 func_241699_f_ + m ()Ljava/lang/String; method_30062 func_241704_k_ + m ()Ljava/lang/String; method_30060 func_241703_j_ + m ()V method_30139 func_241698_e_ + m ()Ljava/lang/String; method_30063 func_241705_l_ + m ()Z method_30142 func_241701_h_ + m ()V method_30143 func_241702_i_ + m (Ljava/util/List;Lcom/google/gson/JsonElement;)V method_30059 func_241694_a_ + m ()Z method_30141 func_241700_g_ + m ()Ljava/lang/String; method_30920 func_243499_m + f Lnet/minecraft/class_2960; field_25689 field_241687_b_ + f Lorg/apache/logging/log4j/Logger; field_25716 field_241686_a_ + f Z field_25717 field_241689_d_ + f Z field_25719 field_241691_f_ + f Lcom/google/common/collect/ImmutableMap; field_25690 field_241688_c_ + f Z field_25718 field_241690_e_ +c net/minecraft/class_5407$1 net/minecraft/client/renderer/GPUWarning$1 +c net/minecraft/class_5407$class_5408 net/minecraft/client/renderer/GPUWarning$GPUInfo + m (Lnet/minecraft/class_5407$class_5408;)Lcom/google/common/collect/ImmutableMap; method_30065 func_241710_a_ + m ()Lcom/google/common/collect/ImmutableMap; method_30064 func_241709_a_ + m (Ljava/util/List;Ljava/lang/String;)Ljava/lang/String; method_30066 func_241711_a_ + f Ljava/util/List; field_25692 field_241707_b_ + f Ljava/util/List; field_25693 field_241708_c_ + f Ljava/util/List; field_25691 field_241706_a_ +c net/minecraft/class_757 net/minecraft/client/renderer/GameRenderer + m ()Ljava/lang/String; method_3205 func_210112_r + m ()V method_3199 updateFovModifierHand + m (Lnet/minecraft/class_1011;)V method_3181 func_215310_a + m (Lnet/minecraft/class_4184;FZ)Lnet/minecraft/class_1159; method_22973 getProjectionMatrix + m ()Z method_3202 isDrawBlockOutline + m (Lnet/minecraft/class_2960;)V method_3168 loadShader + m (FJZ)V method_3192 updateCameraAndRender + m ()V method_3207 stopUseShader + m ()Lnet/minecraft/class_4608; method_22975 getOverlayTexture + m ()Lnet/minecraft/class_765; method_22974 getLightTexture + m ()V method_3203 resetData + m ()V method_3182 tick + m (Lnet/minecraft/class_1159;)V method_22709 resetProjectionMatrix + m (Lnet/minecraft/class_4587;F)V method_3186 applyBobbing + m (II)V method_3169 updateShaderGroupSize + m (Lnet/minecraft/class_1799;)V method_3189 displayItemActivation + m (Lnet/minecraft/class_1297;)V method_3167 loadEntityShader + m ()V method_3176 createWorldIcon + m ()Ljava/lang/String; method_3173 func_215315_s + m (FJLnet/minecraft/class_4587;)V method_3188 renderWorld + m ()Ljava/lang/String; method_18655 func_215314_u + m (IIF)V method_3171 renderItemActivation + m (F)V method_31136 func_243497_c + m ()V close close + m (F)V method_3190 getMouseOver + m (Lnet/minecraft/class_1309;F)F method_3174 getNightVisionBrightness + m ()V method_3184 switchUseShader + m ()F method_3193 getFarPlaneDistance + m (Lnet/minecraft/class_4184;FZ)D method_3196 getFOVModifier + m ()Lnet/minecraft/class_4184; method_19418 getActiveRenderInfo + m ()Lnet/minecraft/class_330; method_3194 getMapItemRenderer + m ()Lnet/minecraft/class_279; method_3183 getShaderGroup + m (II)Ljava/lang/String; method_3191 func_215309_b + m (Lnet/minecraft/class_4587;F)V method_3198 hurtCameraEffect + m (Lnet/minecraft/class_1297;)Z method_18144 func_215312_b + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4184;F)V method_3172 renderHand + m (F)F method_3195 getBossColorModifier + f I field_4010 SHADER_COUNT + f Z field_4013 useShader + f Lnet/minecraft/class_279; field_4024 shaderGroup + f Z field_4009 drawBlockOutline + f F field_4005 cameraZoom + f F field_4004 cameraPitch + f Lorg/apache/logging/log4j/Logger; field_3993 LOGGER + f F field_4025 farPlaneDistance + f Lnet/minecraft/class_310; field_4015 mc + f Lnet/minecraft/class_1799; field_4006 itemActivationItem + f F field_4002 bossColorModifier + f F field_4029 itemActivationOffX + f Lnet/minecraft/class_759; field_4012 itemRenderer + f F field_4019 fovModifierHand + f Lnet/minecraft/class_3300; field_4018 resourceManager + f J field_4017 timeWorldIcon + f I field_4023 shaderIndex + f F field_3988 cameraYaw + f Z field_3992 renderHand + f Z field_4001 debugView + f Lnet/minecraft/class_4599; field_20948 renderTypeBuffers + f F field_4003 itemActivationOffY + f F field_3999 fovModifierHandPrev + f I field_4007 itemActivationTicks + f I field_4027 rendererUpdateCount + f F field_3997 bossColorModifierPrev + f Ljava/util/Random; field_3994 random + f Lnet/minecraft/class_330; field_4026 mapItemRenderer + f Lnet/minecraft/class_2960; field_26730 field_243496_c + f Lnet/minecraft/class_4184; field_18765 activeRender + f Lnet/minecraft/class_4608; field_20949 overlayTexture + f [Lnet/minecraft/class_2960; field_3996 SHADERS_TEXTURES + f Lnet/minecraft/class_765; field_4028 lightmapTexture + f J field_3998 prevFrameTime +c net/minecraft/class_759 net/minecraft/client/renderer/FirstPersonRenderer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1306;F)V method_3217 transformFirstPerson + m (Lnet/minecraft/class_742;FFLnet/minecraft/class_1268;FLnet/minecraft/class_1799;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3228 renderItemInFirstPerson + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IFFLnet/minecraft/class_1306;)V method_3219 renderArmFirstPerson + m (F)F method_3227 getMapAngleFromPitch + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;ZLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3233 renderItemSide + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1306;F)V method_3224 transformSideFirstPerson + m (Lnet/minecraft/class_4587;FLnet/minecraft/class_1306;Lnet/minecraft/class_1799;)V method_3218 transformEatFirstPerson + m (FLnet/minecraft/class_4587;Lnet/minecraft/class_4597$class_4598;Lnet/minecraft/class_746;I)V method_22976 renderItemInFirstPerson + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1799;)V method_3223 renderMapFirstPerson + m (Lnet/minecraft/class_1268;)V method_3215 resetEquippedProgress + m ()V method_3220 tick + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IFFF)V method_3231 renderMapFirstPerson + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1306;)V method_3216 renderArm + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IFLnet/minecraft/class_1306;FLnet/minecraft/class_1799;)V method_3222 renderMapFirstPersonSide + f Lnet/minecraft/class_898; field_4046 renderManager + f Lnet/minecraft/class_1921; field_21808 MAP_BACKGROUND_CHECKERBOARD + f Lnet/minecraft/class_1921; field_21807 MAP_BACKGROUND + f F field_4053 prevEquippedProgressMainHand + f F field_4043 equippedProgressMainHand + f Lnet/minecraft/class_918; field_4044 itemRenderer + f F field_4051 prevEquippedProgressOffHand + f Lnet/minecraft/class_1799; field_4047 itemStackMainHand + f Lnet/minecraft/class_310; field_4050 mc + f F field_4052 equippedProgressOffHand + f Lnet/minecraft/class_1799; field_4048 itemStackOffHand +c net/minecraft/class_759$1 net/minecraft/client/renderer/FirstPersonRenderer$1 + f [I field_4054 field_178094_a +c net/minecraft/class_4696 net/minecraft/client/renderer/RenderTypeLookup + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1921; method_29359 func_239221_b_ + m (Z)V method_23682 setFancyGraphics + m (Lnet/minecraft/class_1799;Z)Lnet/minecraft/class_1921; method_23678 func_239219_a_ + m (Ljava/util/HashMap;)V method_23681 func_228392_a_ + m (Lnet/minecraft/class_3610;)Lnet/minecraft/class_1921; method_23680 getRenderType + m (Lnet/minecraft/class_2680;Z)Lnet/minecraft/class_1921; method_23683 func_239220_a_ + m (Ljava/util/HashMap;)V method_23685 func_228395_b_ + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1921; method_23679 getChunkRenderType + f Ljava/util/Map; field_21471 TYPES_BY_FLUID + f Z field_21472 fancyGraphics + f Ljava/util/Map; field_21469 TYPES_BY_BLOCK +c net/minecraft/class_761 net/minecraft/client/renderer/WorldRenderer + m (Lnet/minecraft/class_287;DDDDIDFF)V method_22978 addVertex + m (J)V method_3269 updateChunks + m ()V method_3254 renderEntityOutlineFramebuffer + m (IIIIII)V method_18146 markBlockRangeForRenderUpdate + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_761$class_762;)D method_24224 func_230016_a_ + m (III)V method_8571 markForRerender + m (Lnet/minecraft/class_1657;ILnet/minecraft/class_2338;I)V method_8567 playEvent + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;DDDFFFFDDDDDD)V method_3278 func_230013_a_ + m (Lnet/minecraft/class_4587;FDDD)V method_3259 renderClouds + m ()V method_3277 generateSky + m (Lnet/minecraft/class_2394;ZDDDDDD)Lnet/minecraft/class_703; method_3282 addParticleUnchecked + m (Lnet/minecraft/class_3414;Lnet/minecraft/class_2338;)V method_8562 playRecord + m ()V method_3280 stopChunkUpdates + m (Lnet/minecraft/class_4587;)V method_22979 checkMatrixStack + m ()Lnet/minecraft/class_276; method_22990 getEntityOutlineFramebuffer + m ()V close close + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_846$class_851;Lnet/minecraft/class_2350;)Lnet/minecraft/class_846$class_851; method_3241 getRenderChunkOffset + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;I)V method_8570 notifyBlockUpdate + m ()Z method_3281 hasNoChunkUpdates + m ()Lnet/minecraft/class_276; method_29363 func_239231_t_ + m (Lnet/minecraft/class_4597$class_4598;Lnet/minecraft/class_4588;Lnet/minecraft/class_1921;)Lnet/minecraft/class_4588; method_22986 func_230014_a_ + m (Lnet/minecraft/class_4184;)V method_22989 renderDebug + m (Lnet/minecraft/class_287;FZ)V method_3283 renderSky + m (DDD)Ljava/lang/String; method_3264 func_230012_a_ + m ()V method_3265 generateSky2 + m (Lnet/minecraft/class_287;DDDLnet/minecraft/class_243;)V method_3239 drawClouds + m (Lnet/minecraft/class_2394;ZZDDDDDD)V method_8563 addParticle + m (IIIZ)V method_3295 markForRerender + m ()V method_3296 makeEntityOutlineShader + m ()V method_3279 loadRenderers + m (Lnet/minecraft/class_1297;DDDFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;)V method_22977 renderEntity + m ()Ljava/lang/String; method_3272 getDebugInfoEntities + m (Lnet/minecraft/class_638;)V method_3244 setWorldAndLoadRenderers + m (Lnet/minecraft/class_1921;)Ljava/lang/String; method_3248 func_230015_a_ + m ()Lnet/minecraft/class_276; method_29360 func_239228_q_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)V method_21596 markBlockRangeForRenderUpdate + m (Lnet/minecraft/class_765;FDDD)V method_22714 renderRainSnow + m ()V method_3267 deleteAllDisplayLists + m (Lnet/minecraft/class_1921;Lnet/minecraft/class_4587;DDD)V method_3251 renderBlockLayer + m (Lnet/minecraft/class_4588;IIIIIII)V method_22985 addDebugQuad + m (Lnet/minecraft/class_4184;)V method_22713 addRainParticles + m ()Lnet/minecraft/class_276; method_29364 func_239232_u_ + m (J)Ljava/util/SortedSet; method_22988 func_230017_b_ + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)I method_23793 getPackedLightmapCoords + m (Lnet/minecraft/class_1159;Lnet/minecraft/class_1159;DDDLnet/minecraft/class_4604;)V method_3275 captureFrustum + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)V method_3247 setPartying + m (Lnet/minecraft/class_4587;FJZLnet/minecraft/class_4184;Lnet/minecraft/class_757;Lnet/minecraft/class_765;Lnet/minecraft/class_1159;)V method_22710 updateCameraAndRender + m ()V method_29701 func_239234_w_ + m ()Z method_3270 isRenderEntityOutlines + m ()I method_3246 getRenderedChunks + m (Lnet/minecraft/class_4587;F)V method_3257 renderSky + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_238;FFFF)V method_22982 drawBoundingBox + m ()V method_3252 tick + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_265;DDDFFFF)V method_3291 drawShape + m ()Lnet/minecraft/class_276; method_29361 func_239229_r_ + m (ILnet/minecraft/class_2338;I)V method_8564 broadcastSound + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;DDDDDDFFFF)V method_22980 drawBoundingBox + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_1297;DDDLnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_22712 drawSelectionBox + m (Lnet/minecraft/class_2394;ZZDDDDDD)Lnet/minecraft/class_703; method_3288 addParticleUnchecked + m (Lnet/minecraft/class_2394;DDDDDD)V method_3276 addParticleUnchecked + m (Lnet/minecraft/class_287;DDDDDDFFFF)V method_3258 addChainedFilledBoxVertices + m (Lnet/minecraft/class_4184;Lnet/minecraft/class_4604;ZIZ)V method_3273 setupTerrain + m ()Ljava/lang/String; method_3289 getDebugInfoRenders + m (Lnet/minecraft/class_2338;Z)V method_16037 notifyBlockUpdate + m ()V method_29365 func_239233_v_ + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_23794 getCombinedLight + m ()V method_3293 generateStars + m (Lnet/minecraft/class_2394;ZDDDDDD)V method_8568 addParticle + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;DDDDDDFFFFFFF)V method_22981 drawBoundingBox + m (Lnet/minecraft/class_4587;)V method_3250 renderSkyEnd + m (II)V method_3242 createBindEntityOutlineFbs + m (Z)Lnet/minecraft/class_4066; method_3268 calculateParticleLevel + m (Lnet/minecraft/class_3191;)V method_22987 removeDamageProgress + m ()Lnet/minecraft/class_276; method_29362 func_239230_s_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_265;DDDFFFF)V method_22983 drawVoxelShapeParts + m (Lnet/minecraft/class_287;)V method_3255 renderStars + m (III)V method_18145 markSurroundingsForRerender + m ()V method_3292 setDisplayListEntitiesDirty + m (ILnet/minecraft/class_2338;I)V method_8569 sendBlockBreakProgress + m (Lnet/minecraft/class_4588;I)V method_22984 addDebugVertex + m (Lnet/minecraft/class_4184;)V method_3243 renderWorldBorder + m (Ljava/util/Collection;Ljava/util/Collection;)V method_3245 updateTileEntities + f D field_4118 prevRenderSortZ + f Lnet/minecraft/class_291; field_4094 cloudsVBO + f D field_4064 lastViewEntityYaw + f [F field_20794 rainSizeX + f Lnet/minecraft/class_638; field_4085 world + f Lnet/minecraft/class_276; field_25274 field_239222_F_ + f Lnet/minecraft/class_1060; field_4057 textureManager + f Lnet/minecraft/class_2960; field_4108 CLOUDS_TEXTURES + f Lnet/minecraft/class_276; field_25277 field_239225_I_ + f Lnet/minecraft/class_279; field_4059 entityOutlineShader + f Lnet/minecraft/class_1161; field_4091 debugTerrainFrustumPosition + f Lnet/minecraft/class_293; field_4100 skyVertexFormat + f Lnet/minecraft/class_2960; field_20798 SNOW_TEXTURES + f Lnet/minecraft/class_769; field_4112 viewFrustum + f I field_4110 countEntitiesHidden + f Lnet/minecraft/class_291; field_4113 starVBO + f I field_4084 frustumUpdatePosChunkX + f D field_4103 prevRenderSortY + f D field_4115 lastViewEntityPitch + f Z field_4107 cloudsNeedUpdate + f I field_4121 frustumUpdatePosChunkZ + f Lnet/minecraft/class_4740; field_21799 renderTimeManager + f I field_20793 rainSoundTime + f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_20950 damageProgress + f Lnet/minecraft/class_846; field_4106 renderDispatcher + f Lnet/minecraft/class_276; field_25275 field_239223_G_ + f I field_4116 cloudsCheckZ + f Lnet/minecraft/class_2960; field_4111 SUN_TEXTURES + f Lnet/minecraft/class_276; field_25278 field_239226_J_ + f Ljava/util/Set; field_4055 setTileEntities + f I field_4089 countEntitiesRendered + f D field_4070 frustumUpdatePosZ + f D field_4069 lastViewEntityX + f Lnet/minecraft/class_291; field_4087 skyVBO + f Lnet/minecraft/class_2960; field_20797 RAIN_TEXTURES + f D field_4096 lastViewEntityZ + f Lnet/minecraft/class_279; field_25279 field_239227_K_ + f Lit/unimi/dsi/fastutil/objects/ObjectList; field_4086 renderInfos + f Lnet/minecraft/class_291; field_4102 sky2VBO + f Lnet/minecraft/class_4604; field_4056 debugFixedClippingHelper + f D field_4083 prevRenderSortX + f Lnet/minecraft/class_276; field_4101 entityOutlineFramebuffer + f I field_4097 cloudsCheckY + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_4058 damagedBlocks + f [Lnet/minecraft/class_1162; field_4065 debugTerrainMatrix + f Z field_4090 debugFixTerrainFrustum + f Lnet/minecraft/class_310; field_4088 mc + f I field_20792 frameId + f Lnet/minecraft/class_898; field_4109 renderManager + f D field_4120 frustumUpdatePosY + f Lnet/minecraft/class_2960; field_4098 MOON_PHASES_TEXTURES + f Ljava/util/Map; field_4119 mapSoundPositions + f Lnet/minecraft/class_2960; field_4071 FORCEFIELD_TEXTURES + f [Lnet/minecraft/class_2350; field_4095 FACINGS + f I field_4062 renderDistanceChunks + f Lnet/minecraft/class_4063; field_4080 cloudOption + f Lnet/minecraft/class_293; field_20791 blockVertexFormat + f D field_4081 lastViewEntityY + f Lnet/minecraft/class_4599; field_20951 renderTypeTextures + f Lorg/apache/logging/log4j/Logger; field_4060 LOGGER + f I field_4082 cloudsCheckX + f Lnet/minecraft/class_276; field_25276 field_239224_H_ + f Ljava/util/Set; field_4075 chunksToUpdate + f Lnet/minecraft/class_243; field_4072 cloudsCheckColor + f D field_4104 frustumUpdatePosX + f [F field_20795 rainSizeZ + f Z field_4077 displayListEntitiesDirty + f Lnet/minecraft/class_2960; field_4061 END_SKY_TEXTURES + f I field_4105 frustumUpdatePosChunkY + f I field_4073 ticks +c net/minecraft/class_761$1 net/minecraft/client/renderer/WorldRenderer$1 +c net/minecraft/class_761$class_762 net/minecraft/client/renderer/WorldRenderer$LocalRenderInformationContainer + m (Lnet/minecraft/class_761$class_762;)B method_3301 access$400 + m (Lnet/minecraft/class_761$class_762;)I method_3297 access$300 + m (BLnet/minecraft/class_2350;)V method_3299 setDirection + m (Lnet/minecraft/class_761$class_762;)Lnet/minecraft/class_846$class_851; method_3302 access$000 + m (Lnet/minecraft/class_2350;)Z method_3298 hasDirection + m (Lnet/minecraft/class_761$class_762;)Lnet/minecraft/class_2350; method_3300 access$200 + f Lnet/minecraft/class_2350; field_4125 facing + f B field_4126 setFacing + f I field_4122 counter + f Lnet/minecraft/class_846$class_851; field_4124 renderChunk + f Lnet/minecraft/class_761; field_4123 field_178033_e +c net/minecraft/class_761$class_5347 net/minecraft/client/renderer/WorldRenderer$ShaderException +c net/minecraft/class_763 net/minecraft/client/renderer/ItemModelMesher + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1087; method_3308 getItemModel + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1058; method_3305 getParticleIcon + m ()V method_3310 rebuildCache + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_1058; method_3307 getParticleIcon + m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_1087; method_3304 getItemModel + m ()Lnet/minecraft/class_1092; method_3303 getModelManager + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1091;)V method_3309 register + m (Lnet/minecraft/class_1792;)I method_3306 getIndex + f Lnet/minecraft/class_1092; field_4128 modelManager + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_4129 modelLocations + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_4130 itemModels +c net/minecraft/class_4597 net/minecraft/client/renderer/IRenderTypeBuffer + m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_4588; getBuffer getBuffer + m (Ljava/util/Map;Lnet/minecraft/class_287;)Lnet/minecraft/class_4597$class_4598; method_22992 getImpl + m (Lnet/minecraft/class_287;)Lnet/minecraft/class_4597$class_4598; method_22991 getImpl +c net/minecraft/class_4597$class_4598 net/minecraft/client/renderer/IRenderTypeBuffer$Impl + m (Lnet/minecraft/class_1921;)V method_24213 func_228464_c_ + m ()V method_22993 finish + m (Lnet/minecraft/class_1921;)V method_22994 finish + m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_287; method_22995 getBufferRaw + f Ljava/util/Set; field_20955 startedBuffers + f Lnet/minecraft/class_287; field_20952 buffer + f Ljava/util/Map; field_20953 fixedBuffers + f Ljava/util/Optional; field_20954 lastRenderType +c net/minecraft/class_765 net/minecraft/client/renderer/LightTexture + m (II)I method_23687 packLight + m ()V method_3315 disableLightmap + m ()V method_3314 tick + m (F)F method_23795 invGamma + m (Lnet/minecraft/class_1937;I)F method_23284 getLightBrightness + m ()V close close + m (F)V method_3313 updateLightmap + m (I)I method_24187 getLightSky + m (I)I method_24186 getLightBlock + m ()V method_3316 enableLightmap + f F field_21528 torchFlicker + f Lnet/minecraft/class_757; field_4134 entityRenderer + f Lnet/minecraft/class_1011; field_4133 nativeImage + f Z field_4135 needsUpdate + f Lnet/minecraft/class_1043; field_4138 dynamicTexture + f Lnet/minecraft/class_2960; field_4136 resourceLocation + f Lnet/minecraft/class_310; field_4137 client +c net/minecraft/class_4618 net/minecraft/client/renderer/OutlineLayerBuffer + m ()V method_23285 finish + m (IIII)V method_23286 setColor + f I field_21062 blue + f I field_21061 green + f I field_21060 red + f Lnet/minecraft/class_4597$class_4598; field_21058 buffer + f I field_21063 alpha + f Lnet/minecraft/class_4597$class_4598; field_21059 outlineBuffer +c net/minecraft/class_4618$class_4586 net/minecraft/client/renderer/OutlineLayerBuffer$ColoredOutline + f D field_21066 z + f D field_21064 x + f Lnet/minecraft/class_4588; field_20897 coloredBuffer + f D field_21065 y + f F field_21068 v + f F field_21067 u +c net/minecraft/class_4618$1 net/minecraft/client/renderer/OutlineLayerBuffer$1 +c net/minecraft/class_766 net/minecraft/client/renderer/RenderSkybox + m (FF)V method_3317 render + f Lnet/minecraft/class_751; field_4141 renderer + f F field_4140 time + f Lnet/minecraft/class_310; field_4139 mc +c net/minecraft/class_283 net/minecraft/client/shader/Shader + m (Lnet/minecraft/class_1159;)V method_1291 setProjectionMatrix + m (Ljava/lang/String;Ljava/util/function/IntSupplier;II)V method_1292 addAuxFramebuffer + m ()Lnet/minecraft/class_280; method_1295 getShaderManager + m (F)V method_1293 render + m ()V close close + f Lnet/minecraft/class_280; field_1540 manager + f Ljava/util/List; field_1539 listAuxNames + f Lnet/minecraft/class_1159; field_1535 projectionMatrix + f Ljava/util/List; field_1533 listAuxWidths + f Ljava/util/List; field_1537 listAuxHeights + f Lnet/minecraft/class_276; field_1538 framebufferOut + f Lnet/minecraft/class_276; field_1536 framebufferIn + f Ljava/util/List; field_1534 listAuxFramebuffers +c net/minecraft/class_279 net/minecraft/client/shader/ShaderGroup + m (Ljava/lang/String;II)V method_1261 addFramebuffer + m ()V close close + m (Ljava/lang/String;)Lnet/minecraft/class_276; method_1266 getFramebuffer + m (Ljava/lang/String;)Lnet/minecraft/class_276; method_1264 getFramebufferRaw + m (II)V method_1259 createBindFramebuffers + m (Ljava/lang/String;Lnet/minecraft/class_276;Lnet/minecraft/class_276;)Lnet/minecraft/class_283; method_1262 addShader + m (Lcom/google/gson/JsonElement;)V method_1265 initTarget + m ()Ljava/lang/String; method_1260 getShaderGroupName + m ()V method_1267 resetProjectionMatrix + m (Lnet/minecraft/class_1060;Lnet/minecraft/class_2960;)V method_1256 parseGroup + m (Lnet/minecraft/class_1060;Lcom/google/gson/JsonElement;)V method_1257 parsePass + m (F)V method_1258 render + m (Lcom/google/gson/JsonElement;)V method_1263 initUniform + f I field_1493 mainFramebufferWidth + f F field_1501 time + f I field_1492 mainFramebufferHeight + f F field_1500 lastStamp + f Ljava/lang/String; field_1494 shaderGroupName + f Ljava/util/List; field_1496 listFramebuffers + f Ljava/util/Map; field_1495 mapFramebuffers + f Lnet/minecraft/class_3300; field_1502 resourceManager + f Ljava/util/List; field_1497 listShaders + f Lnet/minecraft/class_276; field_1499 mainFramebuffer + f Lnet/minecraft/class_1159; field_1498 projectionMatrix +c net/minecraft/class_4599 net/minecraft/client/renderer/RenderTypeBuffers + m (Lit/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap;Lnet/minecraft/class_1921;)V method_24047 func_228488_b_ + m (Lit/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap;Lnet/minecraft/class_1921;)V method_23798 put + m ()Lnet/minecraft/class_4597$class_4598; method_23001 getCrumblingBufferSource + m ()Lnet/minecraft/class_4618; method_23003 getOutlineBufferSource + m ()Lnet/minecraft/class_4597$class_4598; method_23000 getBufferSource + m (Lit/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap;)V method_22999 func_228485_a_ + m ()Lnet/minecraft/class_750; method_22997 getFixedBuilder + f Lnet/minecraft/class_750; field_20956 fixedBuilder + f Lnet/minecraft/class_4597$class_4598; field_20959 crumblingBufferSource + f Lnet/minecraft/class_4597$class_4598; field_20958 bufferSource + f Ljava/util/SortedMap; field_20957 fixedBuffers + f Lnet/minecraft/class_4618; field_20961 outlineBufferSource +c net/minecraft/class_768 net/minecraft/client/renderer/Rectangle2d + m ()I method_3319 getWidth + m ()I method_3320 getHeight + m (II)Z method_3318 contains + m ()I method_3321 getX + m ()I method_3322 getY + f I field_4144 y + f I field_4143 width + f I field_4142 height + f I field_4145 x +c net/minecraft/class_1921 net/minecraft/client/renderer/RenderType + m ()Lnet/minecraft/class_1921; method_23590 getGlint + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_25448 getArmorCutoutNoCull + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23576 getEntityCutout + m ()Lnet/minecraft/class_1921; method_23591 getEntityGlint + m ()Lnet/minecraft/class_1921; method_23593 getLightning + m (I)Lnet/minecraft/class_1921; method_23574 getEndPortal + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_28116 getEntityCutoutNoCullZOffset + m ()Lnet/minecraft/class_1921; method_23589 getWaterMask + m ()Lnet/minecraft/class_1921; method_27949 getArmorEntityGlint + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_24469 getEntityShadow + m ()Lnet/minecraft/class_1921; method_23579 getCutoutMipped + m ()I method_22722 getBufferSize + m ()Ljava/util/Optional; method_23289 getOutline + m ()Lnet/minecraft/class_1921; method_23583 getTranslucent + m ()I method_23033 getDrawMode + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23287 getOutline + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23028 getText + m (Lnet/minecraft/class_2960;FF)Lnet/minecraft/class_1921; method_23018 getEnergySwirl + m ()Lnet/minecraft/class_1921; method_23585 getTranslucentNoCrumbling + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_29379 getItemEntityTranslucentCull + m ()Ljava/util/Optional; method_24296 getRenderType + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23580 getEntityTranslucent + m (Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_1921; method_24293 getEntityCutoutNoCull + m ()Lnet/minecraft/class_1921$class_4688; method_24051 getTranslucentState + m ()Lnet/minecraft/class_1921$class_4688; method_29996 getWeatherState + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23586 getEntityDecal + m (Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_1921; method_24294 getEntityTranslucent + m ()Z method_24295 isColoredOutlineBuffer + m (Ljava/lang/String;Lnet/minecraft/class_293;IILnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_1921$class_4687; method_24048 makeType + m ()Ljava/util/List; method_22720 getBlockRenderTypes + m ()Lnet/minecraft/class_1921; method_29706 getGlintDirect + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4668$class_4671;)Lnet/minecraft/class_1921; method_24468 getOutline + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23572 getEntitySolid + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23578 getEntityCutoutNoCull + m ()Lnet/minecraft/class_1921; method_29707 getEntityGlintDirect + m ()Lnet/minecraft/class_1921; method_29997 getTripwire + m (Ljava/lang/String;Lnet/minecraft/class_293;IIZZLnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_1921$class_4687; method_24049 makeType + m ()Lnet/minecraft/class_1921; method_23587 getLeash + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23030 getTextSeeThrough + m ()Lnet/minecraft/class_1921; method_27948 getArmorGlint + m ()Lnet/minecraft/class_293; method_23031 getVertexFormat + m ()Lnet/minecraft/class_1921; method_30676 getGlintTranslucent + m (Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_1921; method_23592 getBeaconBeam + m ()Lnet/minecraft/class_1921; method_23581 getCutout + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23026 getEyes + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23570 getCrumbling + m ()Lnet/minecraft/class_1921; method_29380 getTranslucentMovingBlock + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23689 getEntityTranslucentCull + m ()Lnet/minecraft/class_1921; method_23594 getLines + m (Lnet/minecraft/class_287;III)V method_23012 finish + m ()Z method_23037 isUseDelegate + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23584 getEntitySmoothCutout + m (Lnet/minecraft/class_2960;F)Lnet/minecraft/class_1921; method_23573 getEntityAlpha + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23588 getEntityNoOutline + m (Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_1921; method_28115 getEntityCutoutNoCullZOffset + m ()Lnet/minecraft/class_1921; method_23577 getSolid + m ()Lnet/minecraft/class_1921$class_4688; method_29381 getItemEntityState + f I field_20973 drawMode + f Lnet/minecraft/class_293; field_20972 vertexFormat + f Lnet/minecraft/class_1921; field_20963 TRANSLUCENT_NO_CRUMBLING + f Lnet/minecraft/class_1921; field_9175 CUTOUT_MIPPED + f Lnet/minecraft/class_1921; field_9179 TRANSLUCENT + f Lnet/minecraft/class_1921; field_25487 GLINT_DIRECT + f Lnet/minecraft/class_1921; field_25488 ENTITY_GLINT_DIRECT + f Lnet/minecraft/class_1921; field_25644 TRIPWIRE + f Lnet/minecraft/class_1921; field_20964 LEASH + f Lnet/minecraft/class_1921$class_4687; field_21695 LINES + f Lnet/minecraft/class_1921; field_24472 ARMOR_GLINT + f Z field_20975 useDelegate + f Lnet/minecraft/class_1921; field_26373 GLINT_TRANSLUCENT + f I field_20806 bufferSize + f Lnet/minecraft/class_1921; field_25285 TRANSLUCENT_MOVING__BLOCK + f Ljava/util/Optional; field_21850 renderType + f Lnet/minecraft/class_1921; field_9174 CUTOUT + f Lnet/minecraft/class_1921; field_20968 ENTITY_GLINT + f Lnet/minecraft/class_1921; field_20970 LIGHTNING + f Lnet/minecraft/class_1921; field_9178 SOLID + f Lnet/minecraft/class_1921; field_20965 WATER_MASK + f Lnet/minecraft/class_1921; field_24473 ARMOR_ENTITY_GLINT + f Lnet/minecraft/class_1921; field_20967 GLINT + f Z field_21402 needsSorting +c net/minecraft/class_1921$1 net/minecraft/client/renderer/RenderType$1 +c net/minecraft/class_1921$class_4687 net/minecraft/client/renderer/RenderType$Type + m (Lnet/minecraft/class_1921$class_4688;)V method_23595 func_228672_a_ + m (Lnet/minecraft/class_1921$class_4688;)V method_23596 func_228674_b_ + m (Lnet/minecraft/class_1921$class_4687;)I method_24052 func_228671_a_ + m (Lnet/minecraft/class_1921$class_4688;Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_24470 func_239275_a_ + m (Ljava/lang/String;Lnet/minecraft/class_293;IIZZLnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_1921$class_4687; method_24055 getOrCreate + m (Ljava/lang/String;Lnet/minecraft/class_293;IIZZLnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_1921$class_4687; method_24054 func_228675_b_ + m (Lnet/minecraft/class_1921$class_4687;)Lnet/minecraft/class_1921$class_4688; method_24053 func_228673_b_ + f I field_21404 hashCode + f Z field_21851 field_230170_V_ + f Lnet/minecraft/class_1921$class_4688; field_21403 renderState + f Ljava/util/Optional; field_21697 outlineRenderType + f Lit/unimi/dsi/fastutil/objects/ObjectOpenCustomHashSet; field_21696 TYPES +c net/minecraft/class_1921$class_4687$class_4721 net/minecraft/client/renderer/RenderType$Type$EqualityStrategy + m (Lnet/minecraft/class_1921$class_4687;Lnet/minecraft/class_1921$class_4687;)Z method_24058 equals + m (Ljava/lang/String;)Lnet/minecraft/class_1921$class_4687$class_4721; valueOf valueOf + m (Ljava/lang/Object;)I hashCode hashCode + m (Ljava/lang/Object;Ljava/lang/Object;)Z equals equals + m ()[Lnet/minecraft/class_1921$class_4687$class_4721; values values + m (Lnet/minecraft/class_1921$class_4687;)I method_24057 hashCode + f [Lnet/minecraft/class_1921$class_4687$class_4721; field_21699 $VALUES + f Lnet/minecraft/class_1921$class_4687$class_4721; field_21698 INSTANCE +c net/minecraft/class_1921$class_4688 net/minecraft/client/renderer/RenderType$State + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_1921$class_4750; method_23599 func_230172_a_ + m (Lnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_4668$class_4671; method_24471 func_239276_c_ + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_4668$class_4683; method_23600 func_228696_b_ + m (Lnet/minecraft/class_1921$class_4688;)Lcom/google/common/collect/ImmutableList; method_23601 func_239277_d_ + m ()Lnet/minecraft/class_1921$class_4688$class_4689; method_23598 getBuilder + m ()I hashCode hashCode + f Lnet/minecraft/class_4668$class_4681; field_21409 shadowModel + f Lnet/minecraft/class_4668$class_4678; field_21417 target + f Lnet/minecraft/class_4668$class_4675; field_21416 layer + f Lnet/minecraft/class_4668$class_4679; field_21414 overlay + f Lnet/minecraft/class_4668$class_4676; field_21413 lightmap + f Lcom/google/common/collect/ImmutableList; field_21422 renderStates + f Lnet/minecraft/class_4668$class_4672; field_21411 depthTest + f Lnet/minecraft/class_4668$class_4677; field_21420 line + f Lnet/minecraft/class_4668$class_4684; field_21418 texturing + f Lnet/minecraft/class_4668$class_4686; field_21419 writeMask + f Lnet/minecraft/class_4668$class_4674; field_21415 fog + f Lnet/minecraft/class_4668$class_4685; field_21407 transparency + f Lnet/minecraft/class_4668$class_4683; field_21406 texture + f Lnet/minecraft/class_4668$class_4671; field_21412 cull + f Lnet/minecraft/class_4668$class_4669; field_21410 alpha + f Lnet/minecraft/class_1921$class_4750; field_21852 field_230171_p_ + f Lnet/minecraft/class_4668$class_4673; field_21408 diffuseLighting +c net/minecraft/class_1921$class_4688$class_4689 net/minecraft/client/renderer/RenderType$State$Builder + m (Lnet/minecraft/class_4668$class_4684;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23614 texturing + m (Lnet/minecraft/class_4668$class_4673;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23605 diffuseLighting + m (Lnet/minecraft/class_4668$class_4675;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23607 layer + m (Lnet/minecraft/class_4668$class_4686;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23616 writeMask + m (Lnet/minecraft/class_4668$class_4677;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23609 line + m (Lnet/minecraft/class_4668$class_4669;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23602 alpha + m (Lnet/minecraft/class_4668$class_4679;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23611 overlay + m (Lnet/minecraft/class_4668$class_4671;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23603 cull + m (Lnet/minecraft/class_4668$class_4681;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23612 shadeModel + m (Lnet/minecraft/class_1921$class_4750;)Lnet/minecraft/class_1921$class_4688; method_24297 func_230173_a_ + m (Lnet/minecraft/class_4668$class_4674;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23606 fog + m (Lnet/minecraft/class_4668$class_4685;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23615 transparency + m (Lnet/minecraft/class_4668$class_4676;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23608 lightmap + m (Lnet/minecraft/class_4668$class_4678;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23610 target + m (Z)Lnet/minecraft/class_1921$class_4688; method_23617 build + m (Lnet/minecraft/class_4668$class_4683;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23613 texture + m (Lnet/minecraft/class_4668$class_4672;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23604 depthTest + f Lnet/minecraft/class_4668$class_4681; field_21426 shadeModel + f Lnet/minecraft/class_4668$class_4677; field_21437 line + f Lnet/minecraft/class_4668$class_4669; field_21427 alpha + f Lnet/minecraft/class_4668$class_4671; field_21429 cull + f Lnet/minecraft/class_4668$class_4678; field_21434 target + f Lnet/minecraft/class_4668$class_4675; field_21433 layer + f Lnet/minecraft/class_4668$class_4673; field_21425 diffuseLighting + f Lnet/minecraft/class_4668$class_4676; field_21430 lightmap + f Lnet/minecraft/class_4668$class_4672; field_21428 depthTest + f Lnet/minecraft/class_4668$class_4679; field_21431 overlay + f Lnet/minecraft/class_4668$class_4683; field_21423 texture + f Lnet/minecraft/class_4668$class_4685; field_21424 transparency + f Lnet/minecraft/class_4668$class_4686; field_21436 writeMask + f Lnet/minecraft/class_4668$class_4674; field_21432 fog + f Lnet/minecraft/class_4668$class_4684; field_21435 texturing +c net/minecraft/class_1921$class_4750 net/minecraft/client/renderer/RenderType$OutlineState + m (Ljava/lang/String;)Lnet/minecraft/class_1921$class_4750; valueOf valueOf + m ()Ljava/lang/String; toString toString + m ()[Lnet/minecraft/class_1921$class_4750; values values + f Lnet/minecraft/class_1921$class_4750; field_21855 AFFECTS_OUTLINE + f Lnet/minecraft/class_1921$class_4750; field_21854 IS_OUTLINE + f Ljava/lang/String; field_22243 name + f Lnet/minecraft/class_1921$class_4750; field_21853 NONE + f [Lnet/minecraft/class_1921$class_4750; field_21856 $VALUES +c net/minecraft/class_4668 net/minecraft/client/renderer/RenderState + m ()V method_23515 func_228546_L_ + m ()V method_29378 func_228550_c_ + m ()V method_23535 func_228566_s_ + m ()V method_29703 func_239248_h_ + m ()V method_29370 func_228542_H_ + m ()V method_29374 func_239252_l_ + m ()V method_23524 func_228558_k_ + m ()V method_23502 func_228535_A_ + m ()V method_23516 setupRenderState + m ()V method_23531 func_228562_o_ + m ()V method_23522 func_228554_g_ + m ()V method_23539 func_228570_w_ + m ()I hashCode hashCode + m ()V method_23514 func_228545_K_ + m ()V method_23534 func_228565_r_ + m ()V method_29377 func_239255_o_ + m ()V method_29702 func_239247_g_ + m ()V method_29995 func_228541_G_ + m ()V method_23533 func_228564_q_ + m ()V method_29373 func_239251_k_ + m ()V method_23542 func_228573_z_ + m ()V method_23527 func_228557_j_ + m ()Ljava/lang/String; toString toString + m ()V method_23505 func_228538_D_ + m ()V method_24467 func_228561_n_ + m ()V method_23538 func_228569_v_ + m ()V method_23521 func_228553_f_ + m ()V method_23511 func_228544_J_ + m ()V method_29376 func_239254_n_ + m ()V method_23532 func_228563_p_ + m ()V method_30675 func_228540_F_ + m ()V method_29372 func_239250_j_ + m ()V method_23504 func_228537_C_ + m ()V method_23801 func_228560_m_ + m ()V method_23537 func_228568_u_ + m ()V method_23520 func_228552_e_ + m (Ljava/lang/Object;)Z equals equals + m ()V method_23541 func_228572_y_ + m ()V method_23799 func_228556_i_ + m ()V method_29375 func_239253_m_ + m ()V method_23519 func_228551_d_ + m ()V method_29994 func_228539_E_ + m ()V method_29371 func_239249_i_ + m ()V method_23510 func_228543_I_ + m ()V method_23800 func_228559_l_ + m ()V method_29368 func_228536_B_ + m ()V method_23518 clearRenderState + m ()V method_23536 func_228567_t_ + m (F)V method_23517 setupGlintTexturing + m ()V method_23523 func_228555_h_ + m ()V method_23540 func_228571_x_ + f Lnet/minecraft/class_4668$class_4678; field_25282 field_239238_U_ + f Lnet/minecraft/class_4668$class_4669; field_21373 HALF_ALPHA + f Lnet/minecraft/class_4668$class_4674; field_21357 BLACK_FOG + f Lnet/minecraft/class_4668$class_4683; field_21378 NO_TEXTURE + f Lnet/minecraft/class_4668$class_4675; field_21353 POLYGON_OFFSET_LAYERING + f Lnet/minecraft/class_4668$class_4685; field_21366 ADDITIVE_TRANSPARENCY + f Lnet/minecraft/class_4668$class_4681; field_21375 SHADE_ENABLED + f Ljava/lang/Runnable; field_21362 clearTask + f Lnet/minecraft/class_4668$class_4685; field_21370 TRANSLUCENT_TRANSPARENCY + f Lnet/minecraft/class_4668$class_4672; field_21347 DEPTH_EQUAL + f Lnet/minecraft/class_4668$class_4678; field_21359 OUTLINE_TARGET + f Lnet/minecraft/class_4668$class_4673; field_21387 DIFFUSE_LIGHTING_ENABLED + f Lnet/minecraft/class_4668$class_4684; field_21382 ENTITY_GLINT_TEXTURING + f Lnet/minecraft/class_4668$class_4678; field_25283 field_239239_V_ + f Lnet/minecraft/class_4668$class_4675; field_22241 field_239235_M_ + f Lnet/minecraft/class_4668$class_4678; field_25280 field_239236_S_ + f Lnet/minecraft/class_4668$class_4672; field_21348 DEPTH_LEQUAL + f Lnet/minecraft/class_4668$class_4673; field_21388 DIFFUSE_LIGHTING_DISABLED + f Lnet/minecraft/class_4668$class_4686; field_21349 COLOR_DEPTH_WRITE + f Lnet/minecraft/class_4668$class_4685; field_21367 LIGHTNING_TRANSPARENCY + f Lnet/minecraft/class_4668$class_4684; field_21379 DEFAULT_TEXTURING + f Lnet/minecraft/class_4668$class_4676; field_21383 LIGHTMAP_ENABLED + f Lnet/minecraft/class_4668$class_4683; field_21376 BLOCK_SHEET_MIPPED + f Lnet/minecraft/class_4668$class_4679; field_21385 OVERLAY_ENABLED + f Lnet/minecraft/class_4668$class_4677; field_21360 DEFAULT_LINE + f Lnet/minecraft/class_4668$class_4669; field_21371 ZERO_ALPHA + f Lnet/minecraft/class_4668$class_4671; field_21344 CULL_ENABLED + f Lnet/minecraft/class_4668$class_4678; field_25643 field_241712_U_ + f Lnet/minecraft/class_4668$class_4674; field_21355 NO_FOG + f Lnet/minecraft/class_4668$class_4671; field_21345 CULL_DISABLED + f Lnet/minecraft/class_4668$class_4684; field_21380 OUTLINE_TEXTURING + f Lnet/minecraft/class_4668$class_4678; field_25281 field_239237_T_ + f Lnet/minecraft/class_4668$class_4686; field_21350 COLOR_WRITE + f Lnet/minecraft/class_4668$class_4685; field_21368 GLINT_TRANSPARENCY + f Lnet/minecraft/class_4668$class_4679; field_21386 OVERLAY_DISABLED + f Lnet/minecraft/class_4668$class_4676; field_21384 LIGHTMAP_DISABLED + f Lnet/minecraft/class_4668$class_4669; field_21372 DEFAULT_ALPHA + f Lnet/minecraft/class_4668$class_4683; field_21377 BLOCK_SHEET + f Lnet/minecraft/class_4668$class_4674; field_21356 FOG + f Lnet/minecraft/class_4668$class_4685; field_21364 NO_TRANSPARENCY + f Lnet/minecraft/class_4668$class_4681; field_21374 SHADE_DISABLED + f Ljava/lang/Runnable; field_21361 setupTask + f Lnet/minecraft/class_4668$class_4675; field_21352 NO_LAYERING + f Ljava/lang/String; field_21363 name + f Lnet/minecraft/class_4668$class_4672; field_21346 DEPTH_ALWAYS + f Lnet/minecraft/class_4668$class_4686; field_21351 DEPTH_WRITE + f Lnet/minecraft/class_4668$class_4684; field_21381 GLINT_TEXTURING + f Lnet/minecraft/class_4668$class_4685; field_21369 CRUMBLING_TRANSPARENCY + f Lnet/minecraft/class_4668$class_4678; field_21358 MAIN_TARGET +c net/minecraft/class_4668$class_4686 net/minecraft/client/renderer/RenderState$WriteMaskState + m (ZZ)V method_23568 func_228612_a_ + m (ZZ)V method_23569 func_228613_b_ + f Z field_21401 depthMask + f Z field_21400 colorMask +c net/minecraft/class_4668$class_4681 net/minecraft/client/renderer/RenderState$ShadeModelState + m (Z)V method_23559 func_228600_a_ + m ()V method_23560 func_228601_c_ + f Z field_21394 smooth +c net/minecraft/class_4668$class_4683 net/minecraft/client/renderer/RenderState$TextureState + m ()V method_23565 func_228607_d_ + m ()Ljava/util/Optional; method_23564 texture + m (Lnet/minecraft/class_2960;ZZ)V method_23563 func_228605_a_ + m ()V method_23567 func_228609_f_ + m ()V method_23566 func_228608_e_ + f Z field_21398 blur + f Ljava/util/Optional; field_21397 texture + f Z field_21399 mipmap +c net/minecraft/class_4668$class_4684 net/minecraft/client/renderer/RenderState$TexturingState +c net/minecraft/class_4668$class_4685 net/minecraft/client/renderer/RenderState$TransparencyState +c net/minecraft/class_4668$class_4682 net/minecraft/client/renderer/RenderState$OffsetTexturingState + m ()V method_23562 func_228593_c_ + m (FF)V method_23561 func_228592_a_ + f F field_21395 offsetU + f F field_21396 offsetV +c net/minecraft/class_4668$class_4678 net/minecraft/client/renderer/RenderState$TargetState +c net/minecraft/class_4668$class_4679 net/minecraft/client/renderer/RenderState$OverlayState + m (Z)V method_23556 func_228595_b_ + m (Z)V method_23555 func_228594_a_ +c net/minecraft/class_4668$class_4680 net/minecraft/client/renderer/RenderState$PortalTexturingState + m (I)V method_23557 func_228597_a_ + m ()V method_23558 func_228598_c_ + f I field_21393 iteration +c net/minecraft/class_4668$class_4674 net/minecraft/client/renderer/RenderState$FogState +c net/minecraft/class_4668$class_4675 net/minecraft/client/renderer/RenderState$LayerState +c net/minecraft/class_4668$class_4676 net/minecraft/client/renderer/RenderState$LightmapState + m (Z)V method_23551 func_228585_a_ + m (Z)V method_23552 func_228586_b_ +c net/minecraft/class_4668$class_4677 net/minecraft/client/renderer/RenderState$LineState + m (Ljava/util/OptionalDouble;)V method_23554 func_228589_b_ + m (Ljava/util/OptionalDouble;)V method_23553 func_228588_a_ + f Ljava/util/OptionalDouble; field_21392 width +c net/minecraft/class_4668$class_4670 net/minecraft/client/renderer/RenderState$BooleanState + f Z field_21390 enabled +c net/minecraft/class_4668$class_4671 net/minecraft/client/renderer/RenderState$CullState + m (Z)V method_23545 func_228578_a_ + m (Z)V method_23546 func_228579_b_ +c net/minecraft/class_4668$class_4672 net/minecraft/client/renderer/RenderState$DepthTestState + m (I)V method_23548 func_228582_b_ + m (I)V method_23547 func_228581_a_ + f I field_21391 func + f Ljava/lang/String; field_22242 field_239256_X_ +c net/minecraft/class_4668$class_4673 net/minecraft/client/renderer/RenderState$DiffuseLightingState + m (Z)V method_23549 func_228583_a_ + m (Z)V method_23550 func_228584_b_ +c net/minecraft/class_4668$class_4669 net/minecraft/client/renderer/RenderState$AlphaState + m ()V method_23544 func_228576_c_ + m (F)V method_23543 func_228575_a_ + f F field_21389 ref +c net/minecraft/class_4603 net/minecraft/client/renderer/OverlayRenderer + m (Lnet/minecraft/class_310;Lnet/minecraft/class_4587;)V method_23069 renderUnderwater + m (Lnet/minecraft/class_310;Lnet/minecraft/class_1058;Lnet/minecraft/class_4587;)V method_23068 renderTexture + m (Lnet/minecraft/class_310;Lnet/minecraft/class_4587;)V method_23067 renderOverlays + m (Lnet/minecraft/class_310;Lnet/minecraft/class_4587;)V method_23070 renderFire + m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_2680; method_24225 getViewBlockingState + f Lnet/minecraft/class_2960; field_20986 TEXTURE_UNDERWATER +c net/minecraft/class_4740 net/minecraft/client/renderer/RenderTimeManager + m (J)J method_24214 nextValue + f I field_21801 count + f I field_21802 index + f [J field_21800 values +c net/minecraft/class_4723 net/minecraft/client/renderer/SpriteAwareVertexBuilder + f Lnet/minecraft/class_4588; field_21730 vertexBuilder + f Lnet/minecraft/class_1058; field_21731 atlasSprite +c net/minecraft/class_4722 net/minecraft/client/renderer/Atlases + m ()Lnet/minecraft/class_1921; method_24072 getChestType + m ()Lnet/minecraft/class_1921; method_24074 getCutoutBlockType + m ()Lnet/minecraft/class_1921; method_24076 getTranslucentCullBlockType + m ()Lnet/minecraft/class_1921; method_24067 getShieldType + m (Ljava/lang/String;)Lnet/minecraft/class_4730; method_24068 func_228777_b_ + m ()Lnet/minecraft/class_1921; method_24070 getShulkerBoxType + m (Lnet/minecraft/class_2745;Lnet/minecraft/class_4730;Lnet/minecraft/class_4730;Lnet/minecraft/class_4730;)Lnet/minecraft/class_4730; method_24063 getChestMaterial + m ()Lnet/minecraft/class_1921; method_24071 getSignType + m (Lnet/minecraft/class_2586;Lnet/minecraft/class_2745;Z)Lnet/minecraft/class_4730; method_24062 getChestMaterial + m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_4730; method_24061 func_228770_a_ + m ()Lnet/minecraft/class_1921; method_24073 getSolidBlockType + m ()Lnet/minecraft/class_1921; method_29382 getItemEntityTranslucentCullType + m (Ljava/util/function/Consumer;)V method_24066 collectAllMaterials + m ()Lnet/minecraft/class_1921; method_24059 getBannerType + m ()Lnet/minecraft/class_1921; method_24069 getBedType + m (Ljava/lang/String;)Lnet/minecraft/class_4730; method_24065 getChestMaterial + m (Lnet/minecraft/class_4719;)Lnet/minecraft/class_4730; method_24064 getSignMaterial + m (I)[Lnet/minecraft/class_4730; method_24060 func_228769_a_ + f Lnet/minecraft/class_4730; field_21721 CHEST_LEFT_MATERIAL + f Lnet/minecraft/class_1921; field_21700 SOLID_BLOCK_TYPE + f Lnet/minecraft/class_4730; field_21723 ENDER_CHEST_MATERIAL + f Lnet/minecraft/class_1921; field_25286 ITEM_ENTITY_TRANSLUCENT_CULL_BLOCK_TYPE + f Lnet/minecraft/class_4730; field_21715 CHEST_TRAPPED_LEFT_MATERIAL + f Lnet/minecraft/class_1921; field_21729 CHEST_TYPE + f Lnet/minecraft/class_2960; field_21708 SIGN_ATLAS + f Lnet/minecraft/class_4730; field_21717 CHEST_XMAS_MATERIAL + f Lnet/minecraft/class_4730; field_21719 CHEST_XMAS_RIGHT_MATERIAL + f Lnet/minecraft/class_2960; field_21704 SHULKER_BOX_ATLAS + f Ljava/util/Map; field_21712 SIGN_MATERIALS + f Lnet/minecraft/class_1921; field_21725 BED_TYPE + f Lnet/minecraft/class_2960; field_21706 BANNER_ATLAS + f Lnet/minecraft/class_1921; field_21727 SHIELD_TYPE + f Lnet/minecraft/class_1921; field_21703 TRANSLUCENT_CULL_BLOCK_TYPE + f Lnet/minecraft/class_4730; field_21720 CHEST_MATERIAL + f Lnet/minecraft/class_4730; field_21722 CHEST_RIGHT_MATERIAL + f Lnet/minecraft/class_1921; field_21701 CUTOUT_BLOCK_TYPE + f Lnet/minecraft/class_1921; field_21728 SIGN_TYPE + f Lnet/minecraft/class_2960; field_21709 CHEST_ATLAS + f Lnet/minecraft/class_4730; field_21716 CHEST_TRAPPED_RIGHT_MATERIAL + f [Lnet/minecraft/class_4730; field_21713 BED_TEXTURES + f Lnet/minecraft/class_4730; field_21718 CHEST_XMAS_LEFT_MATERIAL + f Ljava/util/List; field_21711 SHULKER_TEXTURES + f Lnet/minecraft/class_4730; field_21710 DEFAULT_SHULKER_TEXTURE + f Lnet/minecraft/class_1921; field_21724 SHULKER_BOX_TYPE + f Lnet/minecraft/class_2960; field_21707 SHIELD_ATLAS + f Lnet/minecraft/class_1921; field_21726 BANNER_TYPE + f Lnet/minecraft/class_4730; field_21714 CHEST_TRAPPED_MATERIAL + f Lnet/minecraft/class_2960; field_21705 BED_ATLAS +c net/minecraft/class_4722$1 net/minecraft/client/renderer/Atlases$1 + f [I field_21482 field_228786_a_ +c net/minecraft/class_3682 net/minecraft/client/renderer/VirtualScreen + m (Lnet/minecraft/class_543;Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_1041; method_16038 create + m ()V close close + f Lnet/minecraft/class_310; field_16256 mc + f Lnet/minecraft/class_323; field_16255 monitorHandler +c net/minecraft/class_769 net/minecraft/client/renderer/ViewFrustum + m ()V method_3327 deleteGlResources + m (III)I method_3326 getIndex + m (Lnet/minecraft/class_846;)V method_3324 createRenderChunks + m (DD)V method_3330 updateChunkPositions + m (I)V method_3325 setCountChunksXYZ + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_846$class_851; method_3323 getRenderChunk + m (IIIZ)V method_16040 markForRerender + f I field_4147 countChunksZ + f I field_4148 countChunksX + f Lnet/minecraft/class_761; field_4146 renderGlobal + f Lnet/minecraft/class_1937; field_4151 world + f [Lnet/minecraft/class_846$class_851; field_4150 renderChunks + f I field_4149 countChunksY +c net/minecraft/class_773 net/minecraft/client/renderer/BlockModelShapes + m (Lnet/minecraft/class_2680;)V method_3337 func_209551_d + m ()Lnet/minecraft/class_1092; method_3333 getModelManager + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1091; method_3340 getModelLocation + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1058; method_3339 getTexture + m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/lang/String; method_3334 getPropertyValueString + m ()V method_3341 reloadModels + m (Ljava/util/Map;)Ljava/lang/String; method_3338 getPropertyMapString + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1087; method_3335 getModel + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2680;)Lnet/minecraft/class_1091; method_3336 getModelLocation + f Ljava/util/Map; field_4162 bakedModelStore + f Lnet/minecraft/class_1092; field_4163 modelManager +c net/minecraft/class_775 net/minecraft/client/renderer/FluidBlockRenderer + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_29708 func_239281_a_ + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_29709 func_239282_a_ + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2350;FLnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_29710 func_239284_a_ + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_3610;)Z method_3348 isAdjacentFluidSameAs + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;F)Z method_3344 func_239283_a_ + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;Lnet/minecraft/class_4588;Lnet/minecraft/class_3610;)Z method_3347 render + m (Lnet/minecraft/class_4588;DDDFFFFFI)V method_23072 vertexVanilla + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3611;)F method_3346 getFluidHeight + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_3343 getCombinedAverageLight + m ()V method_3345 initAtlasSprites + f [Lnet/minecraft/class_1058; field_4166 atlasSpritesWater + f Lnet/minecraft/class_1058; field_4164 atlasSpriteWaterOverlay + f [Lnet/minecraft/class_1058; field_4165 atlasSpritesLava +c net/minecraft/class_776 net/minecraft/client/renderer/BlockRendererDispatcher + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_1920;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;ZLjava/util/Random;)Z method_3355 renderModel + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1087; method_3349 getModelForState + m ()Lnet/minecraft/class_778; method_3350 getBlockModelRenderer + m ()Lnet/minecraft/class_773; method_3351 getBlockModelShapes + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3353 renderBlock + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1920;Lnet/minecraft/class_4588;Lnet/minecraft/class_3610;)Z method_3352 renderFluid + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_1920;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;)V method_23071 renderBlockDamage + f Ljava/util/Random; field_4169 random + f Lnet/minecraft/class_324; field_20987 blockColors + f Lnet/minecraft/class_778; field_4170 blockModelRenderer + f Lnet/minecraft/class_773; field_4168 blockModelShapes + f Lnet/minecraft/class_775; field_4167 fluidRenderer +c net/minecraft/class_776$1 net/minecraft/client/renderer/BlockRendererDispatcher$1 + f [I field_4172 field_187488_a +c net/minecraft/class_777 net/minecraft/client/renderer/model/BakedQuad + m ()Z method_24874 applyDiffuseLighting + m ()I method_3359 getTintIndex + m ()[I method_3357 getVertexData + m ()Z method_3360 hasTintIndex + m ()Lnet/minecraft/class_2350; method_3358 getFace + f Z field_22441 applyDiffuseLighting + f Lnet/minecraft/class_2350; field_4173 face + f [I field_4175 vertexData + f I field_4174 tintIndex + f Lnet/minecraft/class_1058; field_4176 sprite +c net/minecraft/class_778 net/minecraft/client/renderer/BlockModelRenderer + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_4588;Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_777;FFFFIIIII)V method_23073 renderQuadSmooth + m ()Ljava/lang/ThreadLocal; method_20546 func_222901_c + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Ljava/util/List;[FLjava/util/BitSet;Lnet/minecraft/class_778$class_780;I)V method_3363 renderQuadsSmooth + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;IIZLnet/minecraft/class_4587;Lnet/minecraft/class_4588;Ljava/util/List;Ljava/util/BitSet;)V method_3370 renderQuadsFlat + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_1087;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;ZLjava/util/Random;JI)Z method_3361 renderModelSmooth + m ()V method_20544 enableCache + m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;FFFLjava/util/List;II)V method_3365 renderModelBrightnessColorQuads + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_1087;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;ZLjava/util/Random;JI)Z method_3373 renderModelFlat + m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;Lnet/minecraft/class_2680;Lnet/minecraft/class_1087;FFFII)V method_3367 renderModelBrightnessColor + m ()Lnet/minecraft/class_778$class_4303; method_20547 func_222902_d + m ()V method_20545 disableCache + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_1087;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;ZLjava/util/Random;JI)Z method_3374 renderModel + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;[ILnet/minecraft/class_2350;[FLjava/util/BitSet;)V method_3364 fillQuadBounds + f Ljava/lang/ThreadLocal; field_4179 CACHE_COMBINED_LIGHT + f Lnet/minecraft/class_324; field_4178 blockColors +c net/minecraft/class_778$class_781 net/minecraft/client/renderer/BlockModelRenderer$VertexTranslations + m ([Lnet/minecraft/class_778$class_781;)V method_3390 func_209261_a + m (Ljava/lang/String;)Lnet/minecraft/class_778$class_781; valueOf valueOf + m ()[Lnet/minecraft/class_778$class_781; values values + m (Lnet/minecraft/class_778$class_781;)I method_3393 func_210261_d + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_778$class_781; method_3394 getVertexTranslations + m (Lnet/minecraft/class_778$class_781;)I method_3395 access$600 + m (Lnet/minecraft/class_778$class_781;)I method_3392 access$500 + m (Lnet/minecraft/class_778$class_781;)I method_3391 access$700 + f [Lnet/minecraft/class_778$class_781; field_4208 $VALUES + f [Lnet/minecraft/class_778$class_781; field_4202 VALUES + f Lnet/minecraft/class_778$class_781; field_4199 DOWN + f I field_4201 vert1 + f Lnet/minecraft/class_778$class_781; field_4205 SOUTH + f Lnet/minecraft/class_778$class_781; field_4204 NORTH + f I field_4198 vert2 + f I field_4209 vert3 + f Lnet/minecraft/class_778$class_781; field_4200 UP + f Lnet/minecraft/class_778$class_781; field_4207 EAST + f Lnet/minecraft/class_778$class_781; field_4206 WEST + f I field_4203 vert0 +c net/minecraft/class_778$class_780 net/minecraft/client/renderer/BlockModelRenderer$AmbientOcclusionFace + m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;[FLjava/util/BitSet;Z)V method_3388 renderBlockModel + m (IIII)I method_3386 getAoBrightness + m (IIIIFFFF)I method_3389 getVertexBrightness + m (Lnet/minecraft/class_778$class_780;)[F method_3387 func_228808_a_ + m (Lnet/minecraft/class_778$class_780;)[I method_3385 func_228809_b_ + f Lnet/minecraft/class_778; field_4195 field_178208_a + f [F field_4196 vertexColorMultiplier + f [I field_4194 vertexBrightness +c net/minecraft/class_778$class_782 net/minecraft/client/renderer/BlockModelRenderer$Orientation + m (Ljava/lang/String;)Lnet/minecraft/class_778$class_782; valueOf valueOf + m (Lnet/minecraft/class_778$class_782;)I method_3396 func_210262_a + m ()[Lnet/minecraft/class_778$class_782; values values + f Lnet/minecraft/class_778$class_782; field_4213 SOUTH + f Lnet/minecraft/class_778$class_782; field_4211 NORTH + f Lnet/minecraft/class_778$class_782; field_4212 UP + f Lnet/minecraft/class_778$class_782; field_4220 FLIP_DOWN + f Lnet/minecraft/class_778$class_782; field_4219 EAST + f Lnet/minecraft/class_778$class_782; field_4215 WEST + f Lnet/minecraft/class_778$class_782; field_4218 FLIP_NORTH + f I field_4222 shape + f Lnet/minecraft/class_778$class_782; field_4217 FLIP_UP + f Lnet/minecraft/class_778$class_782; field_4214 FLIP_EAST + f Lnet/minecraft/class_778$class_782; field_4210 DOWN + f [Lnet/minecraft/class_778$class_782; field_4223 $VALUES + f Lnet/minecraft/class_778$class_782; field_4216 FLIP_WEST + f Lnet/minecraft/class_778$class_782; field_4221 FLIP_SOUTH +c net/minecraft/class_778$class_4303 net/minecraft/client/renderer/BlockModelRenderer$Cache + m ()V method_20550 disable + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)F method_20551 getBrightness + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_20549 getPackedLight + m ()Lit/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap; method_20553 func_225329_d + m ()Lit/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap; method_20552 func_225328_c + m ()V method_20548 enable + f Lit/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap; field_19322 brightnessCache + f Lit/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap; field_19321 packedLightCache + f Z field_19320 enabled +c net/minecraft/class_778$class_4303$1 net/minecraft/client/renderer/BlockModelRenderer$Cache$1 + m (I)V rehash rehash + f Lnet/minecraft/class_778$class_4303; field_19323 field_222890_a +c net/minecraft/class_778$class_4303$2 net/minecraft/client/renderer/BlockModelRenderer$Cache$2 + m (I)V rehash rehash + f Lnet/minecraft/class_778$class_4303; field_19324 field_222891_a +c net/minecraft/class_778$class_779 net/minecraft/client/renderer/BlockModelRenderer$NeighborInfo + m (Lnet/minecraft/class_778$class_779;)[Lnet/minecraft/class_778$class_782; method_3384 func_210257_c + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_778$class_779; method_3378 getNeighbourInfo + m (Lnet/minecraft/class_778$class_779;)[Lnet/minecraft/class_778$class_782; method_3380 access$1200 + m ([Lnet/minecraft/class_778$class_779;)V method_3383 func_209260_a + m (Lnet/minecraft/class_778$class_779;)[Lnet/minecraft/class_778$class_782; method_3379 func_210258_f + m (Lnet/minecraft/class_778$class_779;)[Lnet/minecraft/class_778$class_782; method_3382 access$1100 + m (Lnet/minecraft/class_778$class_779;)Z method_3381 func_210259_b + m (Ljava/lang/String;)Lnet/minecraft/class_778$class_779; valueOf valueOf + m (Lnet/minecraft/class_778$class_779;)[Lnet/minecraft/class_2350; method_3377 func_222888_a + m ()[Lnet/minecraft/class_778$class_779; values values + f Lnet/minecraft/class_778$class_779; field_4184 SOUTH + f [Lnet/minecraft/class_778$class_782; field_4192 vert0Weights + f Lnet/minecraft/class_778$class_779; field_4183 NORTH + f [Lnet/minecraft/class_2350; field_4191 corners + f Lnet/minecraft/class_778$class_779; field_4182 UP + f [Lnet/minecraft/class_778$class_782; field_4185 vert1Weights + f Lnet/minecraft/class_778$class_779; field_4186 EAST + f [Lnet/minecraft/class_778$class_782; field_4188 vert3Weights + f [Lnet/minecraft/class_778$class_782; field_4180 vert2Weights + f Lnet/minecraft/class_778$class_779; field_4187 WEST + f Z field_4189 doNonCubicWeight + f [Lnet/minecraft/class_778$class_779; field_4190 VALUES + f Lnet/minecraft/class_778$class_779; field_4181 DOWN + f [Lnet/minecraft/class_778$class_779; field_4193 $VALUES +c net/minecraft/class_778$1 net/minecraft/client/renderer/BlockModelRenderer$1 + f [I field_4197 field_222889_a +c net/minecraft/class_783 net/minecraft/client/renderer/model/BlockPartFace + f Ljava/lang/String; field_4224 texture + f Lnet/minecraft/class_787; field_4227 blockFaceUV + f Lnet/minecraft/class_2350; field_4225 cullFace + f I field_4226 tintIndex +c net/minecraft/class_783$class_784 net/minecraft/client/renderer/model/BlockPartFace$Deserializer + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2350; method_3398 parseCullFace + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonObject;)Ljava/lang/String; method_3399 parseTexture + m (Lcom/google/gson/JsonObject;)I method_3400 parseTintIndex + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_783; method_3397 deserialize +c net/minecraft/class_785 net/minecraft/client/renderer/model/BlockPart + m (Lnet/minecraft/class_2350;)[F method_3401 getFaceUvs + m ()V method_3402 setDefaultUvs + f Lnet/minecraft/class_1160; field_4228 positionFrom + f Lnet/minecraft/class_789; field_4232 partRotation + f Ljava/util/Map; field_4230 mapFaces + f Lnet/minecraft/class_1160; field_4231 positionTo + f Z field_4229 shade +c net/minecraft/class_785$class_786 net/minecraft/client/renderer/model/BlockPart$Deserializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_785; method_3406 deserialize + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1160; method_3407 validateFromVector + m (Lcom/google/gson/JsonObject;)F method_3403 parseAngle + m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Ljava/util/Map; method_3404 parseFaces + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Lnet/minecraft/class_1160; method_3409 deserializeVec3f + m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Ljava/util/Map; method_3412 parseFacesCheck + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2350$class_2351; method_3411 parseAxis + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Ljava/lang/String;)Lnet/minecraft/class_2350; method_3408 parseEnumFacing + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1160; method_3405 validateToVector + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_789; method_3410 parseRotation +c net/minecraft/class_785$1 net/minecraft/client/renderer/model/BlockPart$1 + f [I field_4233 field_178234_a +c net/minecraft/class_787 net/minecraft/client/renderer/model/BlockFaceUV + m (I)I method_3414 getVertexRotatedRev + m (I)I method_3413 getVertexRotated + m (I)F method_3416 getVertexV + m ([F)V method_3417 setUvs + m (I)F method_3415 getVertexU + f I field_4234 rotation + f [F field_4235 uvs +c net/minecraft/class_787$class_788 net/minecraft/client/renderer/model/BlockFaceUV$Deserializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonObject;)[F method_3419 parseUV + m (Lcom/google/gson/JsonObject;)I method_3420 parseRotation + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_787; method_3418 deserialize +c net/minecraft/class_789 net/minecraft/client/renderer/model/BlockPartRotation + f F field_4237 angle + f Z field_4238 rescale + f Lnet/minecraft/class_1160; field_4236 origin + f Lnet/minecraft/class_2350$class_2351; field_4239 axis +c net/minecraft/class_790 net/minecraft/client/renderer/model/BlockModelDefinition + m ()Lnet/minecraft/class_816; method_3421 getMultipartData + m ()I hashCode hashCode + m ()Ljava/util/Map; method_3423 getVariants + m (Lnet/minecraft/class_790$class_791;Ljava/io/Reader;)Lnet/minecraft/class_790; method_3424 fromJson + m (Ljava/lang/Object;)Z equals equals + m ()Z method_3422 hasMultipartData + f Ljava/util/Map; field_4241 mapVariants + f Lnet/minecraft/class_816; field_4240 multipart +c net/minecraft/class_790$class_792 net/minecraft/client/renderer/model/BlockModelDefinition$Deserializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_816; method_3427 parseMultipart + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_790; method_3428 deserialize + m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Ljava/util/Map; method_3429 parseMapVariants +c net/minecraft/class_790$class_791 net/minecraft/client/renderer/model/BlockModelDefinition$ContainerHolder + m (Lnet/minecraft/class_2689;)V method_3426 setStateContainer + m ()Lnet/minecraft/class_2689; method_3425 getStateContainer + f Lnet/minecraft/class_2689; field_4242 stateContainer + f Lcom/google/gson/Gson; field_4243 gson +c net/minecraft/class_793 net/minecraft/client/renderer/model/BlockModel + m (Ljava/util/Set;Ljava/lang/String;)V method_3435 func_228814_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_793; method_3430 deserialize + m ()Lnet/minecraft/class_809; method_3443 getAllTransforms + m (Lnet/minecraft/class_1088;Lnet/minecraft/class_793;)Lnet/minecraft/class_806; method_3440 getItemOverrideList + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_785;Lnet/minecraft/class_783;Lnet/minecraft/class_1058;Lnet/minecraft/class_2350;Lnet/minecraft/class_3665;Lnet/minecraft/class_2960;)Lnet/minecraft/class_777; method_3447 bakeFace + m ()Ljava/util/List; method_3434 getOverrides + m (Ljava/lang/String;)Z method_3432 isTexturePresent + m (Ljava/lang/String;)Z method_24078 func_228817_d_ + m (Ljava/util/function/Function;Ljava/util/Set;Ljava/util/Set;Lnet/minecraft/class_799;)V method_3441 func_228815_a_ + m (Lnet/minecraft/class_809$class_811;)Lnet/minecraft/class_804; method_3438 getTransform + m (Ljava/lang/String;)Z method_3439 startsWithHash + m (Ljava/lang/String;)Lnet/minecraft/class_4730; method_24077 resolveTextureName + m (Ljava/io/Reader;)Lnet/minecraft/class_793; method_3437 deserialize + m ()Lnet/minecraft/class_793$class_4751; method_24298 getGuiLight + m (Ljava/lang/String;)Lcom/mojang/datafixers/util/Either; method_3442 findTexture + m ()Ljava/util/List; method_3433 getElements + m ()Z method_3444 isAmbientOcclusion + m ()Lnet/minecraft/class_793; method_3431 getRootModel + m (Lnet/minecraft/class_1088;Lnet/minecraft/class_793;Ljava/util/function/Function;Lnet/minecraft/class_3665;Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_1087; method_3446 bakeModel + f Lnet/minecraft/class_796; field_4249 FACE_BAKERY + f Lnet/minecraft/class_809; field_4250 cameraTransforms + f Ljava/lang/String; field_4252 name + f Lcom/google/gson/Gson; field_4254 SERIALIZER + f Ljava/util/List; field_4255 overrides + f Lnet/minecraft/class_2960; field_4247 parentLocation + f Ljava/util/List; field_4245 elements + f Lnet/minecraft/class_793; field_4253 parent + f Lnet/minecraft/class_793$class_4751; field_21857 guiLight3d + f Ljava/util/Map; field_4251 textures + f Lorg/apache/logging/log4j/Logger; field_4248 LOGGER + f Z field_4244 ambientOcclusion +c net/minecraft/class_793$class_795 net/minecraft/client/renderer/model/BlockModel$Deserializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Ljava/util/List; method_3449 getModelElements + m (Lcom/google/gson/JsonObject;)Z method_3453 getAmbientOcclusionEnabled + m (Lcom/google/gson/JsonObject;)Ljava/util/Map; method_3448 getTextures + m (Lnet/minecraft/class_2960;Ljava/lang/String;)Lcom/mojang/datafixers/util/Either; method_24079 findTexture + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_793; method_3451 deserialize + m (Lcom/google/gson/JsonObject;)Ljava/lang/String; method_3450 getParent + m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Ljava/util/List; method_3452 getItemOverrides +c net/minecraft/class_793$class_4751 net/minecraft/client/renderer/model/BlockModel$GuiLight + m (Ljava/lang/String;)Lnet/minecraft/class_793$class_4751; valueOf valueOf + m ()[Lnet/minecraft/class_793$class_4751; values values + m (Ljava/lang/String;)Lnet/minecraft/class_793$class_4751; method_24300 getLightFromName + m ()Z method_24299 isSideLit + f Lnet/minecraft/class_793$class_4751; field_21858 FRONT + f [Lnet/minecraft/class_793$class_4751; field_21861 $VALUES + f Ljava/lang/String; field_21860 name + f Lnet/minecraft/class_793$class_4751; field_21859 SIDE +c net/minecraft/class_796 net/minecraft/client/renderer/model/FaceBakery + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_4590;)V method_3455 rotateVertex + m ([IILnet/minecraft/class_1160;Lnet/minecraft/class_1058;Lnet/minecraft/class_787;)V method_3460 fillVertexData + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_789;)V method_3463 rotatePart + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;Lnet/minecraft/class_1159;Lnet/minecraft/class_1160;)V method_3464 rotateScale + m (Lnet/minecraft/class_787;Lnet/minecraft/class_1058;Lnet/minecraft/class_2350;[FLnet/minecraft/class_4590;Lnet/minecraft/class_789;Z)[I method_3458 makeQuadVertexData + m ([I)Lnet/minecraft/class_2350; method_3467 getFacingFromVertexData + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;Lnet/minecraft/class_783;Lnet/minecraft/class_1058;Lnet/minecraft/class_2350;Lnet/minecraft/class_3665;Lnet/minecraft/class_789;ZLnet/minecraft/class_2960;)Lnet/minecraft/class_777; method_3468 bakeQuad + m (Lnet/minecraft/class_787;Lnet/minecraft/class_2350;Lnet/minecraft/class_4590;Lnet/minecraft/class_2960;)Lnet/minecraft/class_787; method_3454 updateFaceUV + m ([IILnet/minecraft/class_2350;Lnet/minecraft/class_787;[FLnet/minecraft/class_1058;Lnet/minecraft/class_4590;Lnet/minecraft/class_789;Z)V method_3461 fillVertexData + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)[F method_3459 getPositionsDiv16 + m (Lnet/minecraft/class_2960;)Ljava/lang/String; method_23074 func_228825_a_ + m ([ILnet/minecraft/class_2350;)V method_3462 applyFacing + f F field_4260 SCALE_ROTATION_22_5 + f F field_4259 SCALE_ROTATION_GENERAL +c net/minecraft/class_796$1 net/minecraft/client/renderer/model/FaceBakery$1 + f [I field_4265 field_228829_b_ +c net/minecraft/class_799 net/minecraft/client/renderer/model/ItemOverride + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)Z method_3473 matchesOverride + m ()Lnet/minecraft/class_2960; method_3472 getLocation + f Ljava/util/Map; field_4269 mapResourceValues + f Lnet/minecraft/class_2960; field_4268 location +c net/minecraft/class_799$class_800 net/minecraft/client/renderer/model/ItemOverride$Deserializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_799; method_3475 deserialize + m (Lcom/google/gson/JsonObject;)Ljava/util/Map; method_3474 makeMapResourceValues +c net/minecraft/class_801 net/minecraft/client/renderer/model/ItemModelGenerator + m (Lnet/minecraft/class_1058;IIIII)Z method_3477 isTransparent + m (Ljava/util/function/Function;Lnet/minecraft/class_793;)Lnet/minecraft/class_793; method_3479 makeItemModel + m (ILjava/lang/String;Lnet/minecraft/class_1058;)Ljava/util/List; method_3480 getBlockParts + m (Ljava/util/List;Lnet/minecraft/class_801$class_803;II)V method_3482 createOrExpandSpan + m (Lnet/minecraft/class_1058;Ljava/lang/String;I)Ljava/util/List; method_3481 getBlockParts + m (Lnet/minecraft/class_801$class_803;Ljava/util/List;Lnet/minecraft/class_1058;IIIIIZ)V method_3476 checkTransition + m (Lnet/minecraft/class_1058;)Ljava/util/List; method_3478 getSpans + f Ljava/util/List; field_4270 LAYERS +c net/minecraft/class_801$class_802 net/minecraft/client/renderer/model/ItemModelGenerator$Span + m ()I method_3485 getMax + m ()I method_3486 getAnchor + m (I)V method_3483 expand + m ()I method_3487 getMin + m ()Lnet/minecraft/class_801$class_803; method_3484 getFacing + f I field_4274 min + f I field_4273 max + f I field_4272 anchor + f Lnet/minecraft/class_801$class_803; field_4271 spanFacing +c net/minecraft/class_801$1 net/minecraft/client/renderer/model/ItemModelGenerator$1 + f [I field_4275 field_178390_a +c net/minecraft/class_801$class_803 net/minecraft/client/renderer/model/ItemModelGenerator$SpanFacing + m (Lnet/minecraft/class_801$class_803;)Z method_3492 access$000 + m ()[Lnet/minecraft/class_801$class_803; values values + m ()Lnet/minecraft/class_2350; method_3488 getFacing + m ()I method_3489 getYOffset + m ()I method_3490 getXOffset + m (Ljava/lang/String;)Lnet/minecraft/class_801$class_803; valueOf valueOf + m ()Z method_3491 isHorizontal + f I field_4279 yOffset + f Lnet/minecraft/class_2350; field_4276 facing + f I field_4280 xOffset + f Lnet/minecraft/class_801$class_803; field_4281 UP + f Lnet/minecraft/class_801$class_803; field_4283 RIGHT + f Lnet/minecraft/class_801$class_803; field_4278 LEFT + f [Lnet/minecraft/class_801$class_803; field_4282 $VALUES + f Lnet/minecraft/class_801$class_803; field_4277 DOWN +c net/minecraft/class_804 net/minecraft/client/renderer/model/ItemTransformVec3f + m (Ljava/lang/Object;)Z equals equals + m ()I hashCode hashCode + m (ZLnet/minecraft/class_4587;)V method_23075 apply + f Lnet/minecraft/class_1160; field_4285 scale + f Lnet/minecraft/class_1160; field_4287 rotation + f Lnet/minecraft/class_1160; field_4286 translation + f Lnet/minecraft/class_804; field_4284 DEFAULT +c net/minecraft/class_804$class_805 net/minecraft/client/renderer/model/ItemTransformVec3f$Deserializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_804; method_3494 deserialize + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lnet/minecraft/class_1160;)Lnet/minecraft/class_1160; method_3493 parseVector + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + f Lnet/minecraft/class_1160; field_4289 SCALE_DEFAULT + f Lnet/minecraft/class_1160; field_4288 ROTATION_DEFAULT + f Lnet/minecraft/class_1160; field_4290 TRANSLATION_DEFAULT +c net/minecraft/class_806 net/minecraft/client/renderer/model/ItemOverrideList + m (Ljava/util/function/Function;Lnet/minecraft/class_793;Lnet/minecraft/class_1088;Lnet/minecraft/class_799;)Lnet/minecraft/class_1087; method_3496 func_217649_a + m (Lnet/minecraft/class_1087;Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1087; method_3495 getOverrideModel + f Ljava/util/List; field_4291 overrideBakedModels + f Ljava/util/List; field_4293 overrides + f Lnet/minecraft/class_806; field_4292 EMPTY +c net/minecraft/class_807 net/minecraft/client/renderer/model/VariantList + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/util/List; method_3497 getVariantList + m ()I hashCode hashCode + m (Ljava/util/function/Function;Ljava/util/Set;Lnet/minecraft/class_2960;)Ljava/util/stream/Stream; method_3498 func_228831_a_ + f Ljava/util/List; field_4294 variantList +c net/minecraft/class_807$class_808 net/minecraft/client/renderer/model/VariantList$Deserializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_807; method_3499 deserialize +c net/minecraft/class_809 net/minecraft/client/renderer/model/ItemCameraTransforms + m (Lnet/minecraft/class_809$class_811;)Z method_3501 hasCustomTransform + m (Lnet/minecraft/class_809$class_811;)Lnet/minecraft/class_804; method_3503 getTransform + f Lnet/minecraft/class_804; field_4304 firstperson_right + f Lnet/minecraft/class_804; field_4311 head + f Lnet/minecraft/class_804; field_4303 ground + f Lnet/minecraft/class_804; field_4300 gui + f Lnet/minecraft/class_804; field_4306 fixed + f Lnet/minecraft/class_809; field_4301 DEFAULT + f Lnet/minecraft/class_804; field_4305 thirdperson_left + f Lnet/minecraft/class_804; field_4302 firstperson_left + f Lnet/minecraft/class_804; field_4307 thirdperson_right +c net/minecraft/class_809$1 net/minecraft/client/renderer/model/ItemCameraTransforms$1 + f [I field_4313 field_181684_a +c net/minecraft/class_809$class_810 net/minecraft/client/renderer/model/ItemCameraTransforms$Deserializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;Ljava/lang/String;)Lnet/minecraft/class_804; method_3504 getTransform + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_809; method_3505 deserialize +c net/minecraft/class_809$class_811 net/minecraft/client/renderer/model/ItemCameraTransforms$TransformType + m ()Z method_29998 isFirstPerson + m (Ljava/lang/String;)Lnet/minecraft/class_809$class_811; valueOf valueOf + m ()[Lnet/minecraft/class_809$class_811; values values + f Lnet/minecraft/class_809$class_811; field_4322 FIRST_PERSON_RIGHT_HAND + f Lnet/minecraft/class_809$class_811; field_4316 HEAD + f Lnet/minecraft/class_809$class_811; field_4315 NONE + f Lnet/minecraft/class_809$class_811; field_4317 GUI + f Lnet/minecraft/class_809$class_811; field_4323 THIRD_PERSON_LEFT_HAND + f Lnet/minecraft/class_809$class_811; field_4318 GROUND + f Lnet/minecraft/class_809$class_811; field_4320 THIRD_PERSON_RIGHT_HAND + f Lnet/minecraft/class_809$class_811; field_4319 FIXED + f [Lnet/minecraft/class_809$class_811; field_4314 $VALUES + f Lnet/minecraft/class_809$class_811; field_4321 FIRST_PERSON_LEFT_HAND +c net/minecraft/class_812 net/minecraft/client/renderer/model/multipart/AndCondition + m (Ljava/util/List;Lnet/minecraft/class_2680;)Z method_3506 func_212481_a + m (Lnet/minecraft/class_2680;Ljava/util/function/Predicate;)Z method_3507 func_212480_a + m (Lnet/minecraft/class_2689;Lnet/minecraft/class_815;)Ljava/util/function/Predicate; method_3508 func_200683_a + f Ljava/lang/Iterable; field_4324 conditions +c net/minecraft/class_813 net/minecraft/client/renderer/model/Variant + m ()I method_3511 getWeight + m ()I hashCode hashCode + m ()Lnet/minecraft/class_2960; method_3510 getModelLocation + m ()Ljava/lang/String; toString toString + m (Ljava/lang/Object;)Z equals equals + f Lnet/minecraft/class_4590; field_4328 rotation + f Lnet/minecraft/class_2960; field_4326 modelLocation + f Z field_4327 uvLock + f I field_4325 weight +c net/minecraft/class_813$class_814 net/minecraft/client/renderer/model/Variant$Deserializer + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2960; method_3514 getStringModel + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1086; method_3515 parseModelRotation + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_813; method_3513 deserialize + m (Lcom/google/gson/JsonObject;)I method_3517 parseWeight + m (Lcom/google/gson/JsonObject;)Z method_3516 parseUvLock + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize +c net/minecraft/class_818 net/minecraft/client/renderer/model/multipart/PropertyValueCondition + m (Ljava/util/List;Lnet/minecraft/class_2680;)Z method_3524 func_200687_a + m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2769;Ljava/lang/String;)Ljava/util/function/Predicate; method_3525 makePropertyPredicate + m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2769;Ljava/lang/String;)Ljava/util/function/Predicate; method_3526 func_212482_b + m (Lnet/minecraft/class_2769;Ljava/util/Optional;Lnet/minecraft/class_2680;)Z method_3528 func_212483_a + m (Lnet/minecraft/class_2680;Ljava/util/function/Predicate;)Z method_3527 func_200685_a + m ()Ljava/lang/String; toString toString + f Ljava/lang/String; field_4333 key + f Ljava/lang/String; field_4332 value + f Lcom/google/common/base/Splitter; field_4334 SPLITTER +c net/minecraft/class_815 net/minecraft/client/renderer/model/multipart/ICondition + m (Lnet/minecraft/class_2680;)Z method_16809 func_223289_b_ + m (Lnet/minecraft/class_2689;)Ljava/util/function/Predicate; method_16810 func_223288_a_ + m (Lnet/minecraft/class_2689;)Ljava/util/function/Predicate; getPredicate getPredicate + m (Lnet/minecraft/class_2689;)Ljava/util/function/Predicate; method_16808 func_223290_b_ + m (Lnet/minecraft/class_2680;)Z method_16811 func_223287_a_ + f Lnet/minecraft/class_815; field_16900 TRUE + f Lnet/minecraft/class_815; field_16901 FALSE +c net/minecraft/class_821 net/minecraft/client/renderer/model/multipart/OrCondition + m (Lnet/minecraft/class_2689;Lnet/minecraft/class_815;)Ljava/util/function/Predicate; method_3540 func_200689_a + m (Ljava/util/List;Lnet/minecraft/class_2680;)Z method_3538 func_200690_a + m (Lnet/minecraft/class_2680;Ljava/util/function/Predicate;)Z method_3539 func_212488_a + f Ljava/lang/Iterable; field_4337 conditions +c net/minecraft/class_816 net/minecraft/client/renderer/model/multipart/Multipart + m ()Ljava/util/List; method_3519 getSelectors + m (Ljava/lang/Object;)Z equals equals + m ()I hashCode hashCode + m (Lnet/minecraft/class_819;)Ljava/util/stream/Stream; method_3518 func_209563_a + m (Ljava/util/function/Function;Ljava/util/Set;Lnet/minecraft/class_819;)Ljava/util/stream/Stream; method_3521 func_228832_a_ + m ()Ljava/util/Set; method_3520 getVariants + f Ljava/util/List; field_4330 selectors + f Lnet/minecraft/class_2689; field_4329 stateContainer +c net/minecraft/class_816$class_817 net/minecraft/client/renderer/model/multipart/Multipart$Deserializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_816; method_3523 deserialize + m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonArray;)Ljava/util/List; method_3522 getSelectors + f Lnet/minecraft/class_790$class_791; field_4331 containerHolder +c net/minecraft/class_819 net/minecraft/client/renderer/model/multipart/Selector + m (Ljava/lang/Object;)Z equals equals + m ()I hashCode hashCode + m ()Lnet/minecraft/class_807; method_3529 getVariantList + m (Lnet/minecraft/class_2689;)Ljava/util/function/Predicate; method_3530 getPredicate + f Lnet/minecraft/class_815; field_4335 condition + f Lnet/minecraft/class_807; field_4336 variantList +c net/minecraft/class_819$class_820 net/minecraft/client/renderer/model/multipart/Selector$Deserializer + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_815; method_3537 func_200691_a + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_815; method_3536 getOrAndCondition + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_815; method_3531 getWhenCondition + m (Ljava/util/Map$Entry;)Lnet/minecraft/class_815; method_3533 makePropertyValue + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_815; method_3534 func_200692_b + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_819; method_3535 deserialize +c net/minecraft/class_823 net/minecraft/client/renderer/tileentity/BannerTileEntityRenderer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IILnet/minecraft/class_630;Lnet/minecraft/class_4730;ZLjava/util/List;Z)V method_23802 func_241717_a_ + m (Lnet/minecraft/class_2573;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3546 render + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IILnet/minecraft/class_630;Lnet/minecraft/class_4730;ZLjava/util/List;)V method_29999 func_230180_a_ + m ()Lnet/minecraft/class_630; method_24080 getModelRender + f Lnet/minecraft/class_630; field_20811 field_228834_c_ + f Lnet/minecraft/class_630; field_20812 field_228835_d_ + f Lnet/minecraft/class_630; field_20810 field_228833_a_ +c net/minecraft/class_825 net/minecraft/client/renderer/tileentity/BedTileEntityRenderer + m (Lnet/minecraft/class_2587;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3557 render + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_24188 func_228846_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ZLnet/minecraft/class_2350;Lnet/minecraft/class_4730;IIZ)V method_3558 func_228847_a_ + f Lnet/minecraft/class_630; field_20813 field_228843_a_ + f [Lnet/minecraft/class_630; field_20815 field_228845_d_ + f Lnet/minecraft/class_630; field_20814 field_228844_c_ +c net/minecraft/class_822 net/minecraft/client/renderer/tileentity/BeaconTileEntityRenderer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;FJII[F)V method_3543 renderBeamSegment + m (Lnet/minecraft/class_2580;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3541 render + m (Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;Lnet/minecraft/class_4588;FFFFIFFFF)V method_23076 addVertex + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_2960;FFJII[FFF)V method_3545 renderBeamSegment + m (Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;Lnet/minecraft/class_4588;FFFFIIFFFFFFFF)V method_22740 addQuad + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;FFFFIIFFFFFFFFFFFF)V method_22741 renderPart + m (Lnet/minecraft/class_2580;)Z method_3542 isGlobalRenderer + f Lnet/minecraft/class_2960; field_4338 TEXTURE_BEACON_BEAM +c net/minecraft/class_824 net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher + m (Lnet/minecraft/class_827;Lnet/minecraft/class_2586;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;)V method_23079 render + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1060;Lnet/minecraft/class_327;Lnet/minecraft/class_4184;Lnet/minecraft/class_239;)V method_3549 prepare + m (Lnet/minecraft/class_827;Lnet/minecraft/class_2586;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;)V method_23081 func_228857_b_ + m (Lnet/minecraft/class_827;Lnet/minecraft/class_2586;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_23080 func_228856_a_ + m (Lnet/minecraft/class_2586;Ljava/lang/Runnable;)V method_3554 runCrashReportable + m (Lnet/minecraft/class_2586;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;)V method_3555 renderTileEntity + m ()Lnet/minecraft/class_327; method_3556 getFontRenderer + m (Lnet/minecraft/class_2591;Lnet/minecraft/class_827;)V method_23078 register + m (Lnet/minecraft/class_2586;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)Z method_23077 renderItem + m (Lnet/minecraft/class_2586;)Lnet/minecraft/class_827; method_3550 getRenderer + m (Lnet/minecraft/class_1937;)V method_3551 setWorld + f Lnet/minecraft/class_327; field_4342 fontRenderer + f Ljava/util/Map; field_4345 renderers + f Lnet/minecraft/class_287; field_20988 fixedRenderBuffer + f Lnet/minecraft/class_1060; field_4347 textureManager + f Lnet/minecraft/class_1937; field_4348 world + f Lnet/minecraft/class_239; field_4350 cameraHitResult + f Lnet/minecraft/class_4184; field_4344 renderInfo + f Lnet/minecraft/class_824; field_4346 instance +c net/minecraft/class_3880 net/minecraft/client/renderer/tileentity/BellTileEntityRenderer + m (Lnet/minecraft/class_3721;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_17139 render + f Lnet/minecraft/class_630; field_20816 modelRenderer + f Lnet/minecraft/class_4730; field_17145 BELL_BODY_TEXTURE +c net/minecraft/class_4737 net/minecraft/client/renderer/tileentity/DualBrightnessCallback + m ()Lit/unimi/dsi/fastutil/ints/Int2IntFunction; method_24189 func_225537_b_ + m (Lnet/minecraft/class_2586;Lnet/minecraft/class_2586;I)I method_24193 func_228860_a_ + m (Lnet/minecraft/class_2586;)Lit/unimi/dsi/fastutil/ints/Int2IntFunction; method_24191 func_225538_a_ + m (I)I method_24194 func_228861_b_ + m (Lnet/minecraft/class_2586;Lnet/minecraft/class_2586;)Lit/unimi/dsi/fastutil/ints/Int2IntFunction; method_24192 func_225539_a_ + m (I)I method_24190 func_228859_a_ +c net/minecraft/class_827 net/minecraft/client/renderer/tileentity/TileEntityRenderer + m (Lnet/minecraft/class_2586;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3569 render + m (Lnet/minecraft/class_2586;)Z method_3563 isGlobalRenderer + f Lnet/minecraft/class_824; field_20989 renderDispatcher +c net/minecraft/class_826 net/minecraft/client/renderer/tileentity/ChestTileEntityRenderer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;FII)V method_22749 renderModels + f Lnet/minecraft/class_630; field_20820 rightLid + f Lnet/minecraft/class_630; field_21481 leftLatch + f Lnet/minecraft/class_630; field_20819 singleLatch + f Lnet/minecraft/class_630; field_20817 singleLid + f Lnet/minecraft/class_630; field_20821 rightBottom + f Lnet/minecraft/class_630; field_20822 rightLatch + f Lnet/minecraft/class_630; field_21480 leftBottom + f Z field_4365 isChristmas + f Lnet/minecraft/class_630; field_20818 singleBottom + f Lnet/minecraft/class_630; field_21479 leftLid +c net/minecraft/class_3941 net/minecraft/client/renderer/tileentity/CampfireTileEntityRenderer + m (Lnet/minecraft/class_3924;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_17581 render +c net/minecraft/class_829 net/minecraft/client/renderer/tileentity/ConduitTileEntityRenderer + m (Lnet/minecraft/class_2597;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_22750 render + f Lnet/minecraft/class_630; field_20824 field_228873_i_ + f Lnet/minecraft/class_4730; field_4373 WIND_TEXTURE + f Lnet/minecraft/class_630; field_20823 field_228872_h_ + f Lnet/minecraft/class_4730; field_4378 CAGE_TEXTURE + f Lnet/minecraft/class_4730; field_4379 OPEN_EYE_TEXTURE + f Lnet/minecraft/class_4730; field_4377 BASE_TEXTURE + f Lnet/minecraft/class_4730; field_4380 CLOSED_EYE_TEXTURE + f Lnet/minecraft/class_630; field_20825 field_228874_j_ + f Lnet/minecraft/class_4730; field_4371 VERTICAL_WIND_TEXTURE + f Lnet/minecraft/class_630; field_20826 field_228875_k_ +c net/minecraft/class_3942 net/minecraft/client/renderer/tileentity/LecternTileEntityRenderer + m (Lnet/minecraft/class_3722;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_17582 render + f Lnet/minecraft/class_557; field_17428 field_217656_d +c net/minecraft/class_828 net/minecraft/client/renderer/tileentity/EnchantmentTableTileEntityRenderer + m (Lnet/minecraft/class_2605;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3571 render + f Lnet/minecraft/class_4730; field_4369 TEXTURE_BOOK + f Lnet/minecraft/class_557; field_4370 modelBook +c net/minecraft/class_834 net/minecraft/client/renderer/tileentity/ShulkerBoxTileEntityRenderer + m (Lnet/minecraft/class_2627;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3574 render + f Lnet/minecraft/class_602; field_4387 model +c net/minecraft/class_835 net/minecraft/client/renderer/tileentity/PistonTileEntityRenderer + m (Lnet/minecraft/class_2669;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3576 render + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1937;ZI)V method_3575 func_228876_a_ + f Lnet/minecraft/class_776; field_4389 blockRenderer +c net/minecraft/class_836 net/minecraft/client/renderer/tileentity/SkullTileEntityRenderer + m (Lnet/minecraft/class_2631;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3577 render + m (Lnet/minecraft/class_2484$class_2485;Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/class_1921; method_3578 getRenderType + m (Ljava/util/HashMap;)V method_3580 func_209263_a + m (Ljava/util/HashMap;)V method_3579 func_209262_b + m (Lnet/minecraft/class_2350;FLnet/minecraft/class_2484$class_2485;Lcom/mojang/authlib/GameProfile;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3581 render + f Ljava/util/Map; field_4391 MODELS + f Ljava/util/Map; field_4390 SKINS +c net/minecraft/class_837 net/minecraft/client/renderer/tileentity/SignTileEntityRenderer + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4730; method_3584 getMaterial + m (Lnet/minecraft/class_327;Lnet/minecraft/class_2561;)Lnet/minecraft/class_5481; method_3583 func_243502_a + m (Lnet/minecraft/class_2625;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_23083 render + f Lnet/minecraft/class_837$class_4702; field_21529 model +c net/minecraft/class_837$class_4702 net/minecraft/client/renderer/tileentity/SignTileEntityRenderer$SignModel + f Lnet/minecraft/class_630; field_21531 signStick + f Lnet/minecraft/class_630; field_21530 signBoard +c net/minecraft/class_838 net/minecraft/client/renderer/tileentity/StructureTileEntityRenderer + m (Lnet/minecraft/class_2633;)Z method_3588 isGlobalRenderer + m (Lnet/minecraft/class_2633;Lnet/minecraft/class_4588;Lnet/minecraft/class_2338;ZLnet/minecraft/class_4587;)V method_3585 func_228880_a_ + m (Lnet/minecraft/class_2633;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3587 render +c net/minecraft/class_838$1 net/minecraft/client/renderer/tileentity/StructureTileEntityRenderer$1 + f [I field_4401 field_190059_b + f [I field_4402 field_190058_a +c net/minecraft/class_839 net/minecraft/client/renderer/tileentity/MobSpawnerTileEntityRenderer + m (Lnet/minecraft/class_2636;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3589 render +c net/minecraft/class_840 net/minecraft/client/renderer/tileentity/EndPortalTileEntityRenderer + m ()F method_3594 getOffset + m (Lnet/minecraft/class_2640;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3591 render + m (I)Lnet/minecraft/class_1921; method_24195 func_228882_a_ + m (Lnet/minecraft/class_2640;FFLnet/minecraft/class_1159;Lnet/minecraft/class_4588;)V method_23084 renderCube + m (Lnet/minecraft/class_2640;Lnet/minecraft/class_1159;Lnet/minecraft/class_4588;FFFFFFFFFFFLnet/minecraft/class_2350;)V method_23085 renderFace + m (D)I method_3592 getPasses + f Lnet/minecraft/class_2960; field_4406 END_SKY_TEXTURE + f Lnet/minecraft/class_2960; field_4407 END_PORTAL_TEXTURE + f Ljava/util/List; field_21732 RENDER_TYPES + f Ljava/util/Random; field_4405 RANDOM +c net/minecraft/class_841 net/minecraft/client/renderer/tileentity/EndGatewayTileEntityRenderer + m (Lnet/minecraft/class_2643;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_22751 render + f Lnet/minecraft/class_2960; field_4409 END_GATEWAY_BEAM_TEXTURE +c net/minecraft/class_846 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher + m (Lnet/minecraft/class_846$class_851$class_4577;Lnet/minecraft/class_750;Ljava/lang/Void;)Ljava/util/concurrent/CompletionStage; method_22757 func_228901_a_ + m (Lnet/minecraft/class_846;)Lnet/minecraft/class_750; method_22762 func_228907_c_ + m (Lnet/minecraft/class_287;Lnet/minecraft/class_291;)Ljava/util/concurrent/CompletableFuture; method_3635 uploadChunkLayer + m (Lnet/minecraft/class_287;Lnet/minecraft/class_291;)Ljava/util/concurrent/CompletableFuture; method_22759 uploadChunkLayerRaw + m ()Ljava/lang/String; method_3622 getDebugInfo + m (Lnet/minecraft/class_846$class_4690;Lnet/minecraft/class_750;)V method_23618 func_228899_a_ + m ()V method_22765 func_228911_k_ + m ()V method_22764 func_228910_j_ + m (Lnet/minecraft/class_846;)Lnet/minecraft/class_761; method_22760 func_228906_b_ + m (Lnet/minecraft/class_846$class_851$class_4577;)V method_23086 func_228905_b_ + m (Lnet/minecraft/class_846$class_851$class_4577;)V method_22756 schedule + m (Lnet/minecraft/class_846$class_851;)V method_3627 rebuildChunk + m (Lnet/minecraft/class_846;)Lnet/minecraft/class_1937; method_22758 func_228903_a_ + m (Lnet/minecraft/class_243;)V method_19419 setRenderPosition + m ()Z method_22761 runChunkUploads + m ()V method_3632 stopChunkUpdates + m ()Lnet/minecraft/class_243; method_19420 getRenderPosition + m ()V method_3633 clearChunkUpdates + m ()V method_22763 runTask + m ()Z method_3630 hasNoChunkUpdates + m ()V method_3619 stopWorkerThreads + m (Lnet/minecraft/class_287;Lnet/minecraft/class_291;Ljava/lang/Void;)Ljava/util/concurrent/CompletionStage; method_22753 func_228897_a_ + m (Lnet/minecraft/class_750;Lnet/minecraft/class_846$class_4690;Ljava/lang/Throwable;)V method_22755 func_228898_a_ + m (Lnet/minecraft/class_1937;)V method_22752 setWorld + f Ljava/util/Queue; field_4443 uploadTasks + f Lorg/apache/logging/log4j/Logger; field_4445 LOGGER + f Ljava/util/Queue; field_20827 freeBuilders + f Ljava/util/PriorityQueue; field_4435 renderTasks + f I field_20993 countFreeBuilders + f I field_20992 countRenderTasks + f Lnet/minecraft/class_1937; field_20831 world + f Lnet/minecraft/class_243; field_18766 renderPosition + f Lnet/minecraft/class_761; field_20832 worldRenderer + f Lnet/minecraft/class_3846; field_20829 delegatedTaskExecutor + f Ljava/util/concurrent/Executor; field_20830 executor + f Lnet/minecraft/class_750; field_20828 fixedBuilder +c net/minecraft/class_846$class_849 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$CompiledChunk + m (Lnet/minecraft/class_846$class_849;)Lnet/minecraft/class_287$class_288; method_22772 func_228919_d_ + m ()Ljava/util/List; method_3642 getTileEntities + m (Lnet/minecraft/class_1921;)Z method_3641 isLayerEmpty + m ()Z method_3645 isEmpty + m (Lnet/minecraft/class_846$class_849;Lnet/minecraft/class_287$class_288;)Lnet/minecraft/class_287$class_288; method_22767 func_228914_a_ + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Z method_3650 isVisible + m (Lnet/minecraft/class_846$class_849;Lnet/minecraft/class_854;)Lnet/minecraft/class_854; method_22768 func_228915_a_ + m (Lnet/minecraft/class_846$class_849;Z)Z method_22769 func_228916_a_ + m (Lnet/minecraft/class_846$class_849;)Ljava/util/List; method_22770 func_228918_c_ + m (Lnet/minecraft/class_846$class_849;)Ljava/util/Set; method_22766 func_228913_a_ + m (Lnet/minecraft/class_846$class_849;)Ljava/util/Set; method_22771 func_228917_b_ + f Ljava/util/Set; field_4450 layersUsed + f Lnet/minecraft/class_846$class_849; field_4451 DUMMY + f Ljava/util/Set; field_4452 layersStarted + f Ljava/util/List; field_4456 tileEntities + f Z field_4454 empty + f Lnet/minecraft/class_287$class_288; field_4453 state + f Lnet/minecraft/class_854; field_4455 setVisibility +c net/minecraft/class_846$class_849$1 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$CompiledChunk$1 +c net/minecraft/class_846$class_4690 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkTaskResult + m ()[Lnet/minecraft/class_846$class_4690; values values + m (Ljava/lang/String;)Lnet/minecraft/class_846$class_4690; valueOf valueOf + f Lnet/minecraft/class_846$class_4690; field_21439 CANCELLED + f [Lnet/minecraft/class_846$class_4690; field_21440 $VALUES + f Lnet/minecraft/class_846$class_4690; field_21438 SUCCESSFUL +c net/minecraft/class_846$class_851 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkRender + m ()Lnet/minecraft/class_846$class_849; method_3677 getCompiledChunk + m ()Lnet/minecraft/class_2338; method_3670 getPosition + m (Lnet/minecraft/class_846;)V method_22777 rebuildChunkLater + m (I)Z method_3671 setFrameIndex + m (III)V method_3653 setPosition + m (Lnet/minecraft/class_1921;Lnet/minecraft/class_846;)Z method_22773 resortTransparency + m (Lnet/minecraft/class_846$class_851;Lnet/minecraft/class_287;)V method_22775 func_228927_a_ + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2338; method_3676 getBlockPosOffset16 + m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_291; method_3656 getVertexBuffer + m ()Lnet/minecraft/class_846$class_851$class_4577; method_3674 makeCompileTaskChunk + m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_291; method_22779 func_228933_b_ + m ([Lnet/minecraft/class_2338$class_2339;)V method_3660 func_228932_a_ + m (Z)V method_3654 setNeedsUpdate + m (Lnet/minecraft/class_2338;)Z method_3651 isChunkLoaded + m ()D method_3668 getDistanceSq + m ()Z method_3672 needsUpdate + m ()Z method_3661 needsImmediateUpdate + m ()V method_3663 stopTasks + m ()V method_22781 rebuildChunk + m ()V method_3675 stopCompileTask + m (Lnet/minecraft/class_287;)V method_3655 beginLayer + m (Ljava/util/Set;)V method_22778 updateGlobalTileEntities + m ()Z method_3673 shouldStayLoaded + m ()V method_3659 deleteGlResources + m (Lnet/minecraft/class_846$class_851;Ljava/util/Set;)V method_22776 func_228928_a_ + m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_1921; method_22780 func_228934_c_ + m ()V method_3662 clearNeedsUpdate + m (Lnet/minecraft/class_846$class_851;)Lnet/minecraft/class_2338$class_2339; method_22774 func_228926_a_ + f Lnet/minecraft/class_2338$class_2339; field_4467 position + f Lnet/minecraft/class_846$class_851$class_4579; field_4461 lastResortTransparencyTask + f I field_4471 frameIndex + f Ljava/util/concurrent/atomic/AtomicReference; field_4459 compiledChunk + f [Lnet/minecraft/class_2338$class_2339; field_4472 mapEnumFacing + f Ljava/util/Map; field_4462 vertexBuffers + f Z field_4463 needsImmediateUpdate + f Ljava/util/Set; field_4457 globalTileEntities + f Lnet/minecraft/class_846$class_851$class_4578; field_20834 lastRebuildTask + f Lnet/minecraft/class_238; field_4458 boundingBox + f Lnet/minecraft/class_846; field_20833 field_228920_c_ + f Z field_4464 needsUpdate +c net/minecraft/class_846$class_851$class_4578 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkRender$RebuildTask + m (Ljava/util/List;Lnet/minecraft/class_750;Lnet/minecraft/class_1921;)V method_22788 func_228943_a_ + m (Lnet/minecraft/class_846$class_849;Ljava/util/Set;Lnet/minecraft/class_2586;)V method_23087 handleTileEntity + m (FFFLnet/minecraft/class_846$class_849;Lnet/minecraft/class_750;)Ljava/util/Set; method_22785 compile + m (Lnet/minecraft/class_846$class_849;Ljava/util/List;Ljava/lang/Throwable;)Lnet/minecraft/class_846$class_4690; method_23619 func_228941_a_ + f Lnet/minecraft/class_853; field_20838 chunkRenderCache + f Lnet/minecraft/class_846$class_851; field_20839 field_228939_e_ +c net/minecraft/class_846$class_851$class_4579 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkRender$SortTransparencyTask + m (Lnet/minecraft/class_846$class_4690;Ljava/lang/Throwable;)Lnet/minecraft/class_846$class_4690; method_22789 func_228946_a_ + m (Ljava/lang/Void;)Lnet/minecraft/class_846$class_4690; method_22790 func_228947_a_ + f Lnet/minecraft/class_846$class_851; field_20840 field_228944_d_ + f Lnet/minecraft/class_846$class_849; field_20841 sortCompiledChunk +c net/minecraft/class_846$class_851$class_4577 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkRender$ChunkRenderTask + m (Lnet/minecraft/class_846$class_851$class_4577;)I method_22784 compareTo + m (Ljava/lang/Object;)I compareTo compareTo + m (Lnet/minecraft/class_750;)Ljava/util/concurrent/CompletableFuture; method_22783 execute + m ()V method_22782 cancel + f Lnet/minecraft/class_846$class_851; field_20837 field_228937_c_ + f Ljava/util/concurrent/atomic/AtomicBoolean; field_20836 finished + f D field_20835 distanceSq +c net/minecraft/class_852 net/minecraft/client/renderer/chunk/VisGraph + m (Lnet/minecraft/class_2338;)V method_3682 setOpaqueCube + m ([I)V method_3680 func_209264_a + m (ILnet/minecraft/class_2350;)I method_3685 getNeighborIndexAtFace + m (Lnet/minecraft/class_2338;)I method_3683 getIndex + m ()Lnet/minecraft/class_854; method_3679 computeVisibility + m (ILjava/util/Set;)V method_3684 addEdges + m (I)Ljava/util/Set; method_3687 floodFill + m (III)I method_3681 getIndex + f [I field_4474 INDEX_OF_EDGES + f I field_4473 empty + f Ljava/util/BitSet; field_4478 bitSet + f I field_4475 DY + f [Lnet/minecraft/class_2350; field_4479 DIRECTIONS + f I field_4476 DZ + f I field_4477 DX +c net/minecraft/class_852$1 net/minecraft/client/renderer/chunk/VisGraph$1 + f [I field_4480 field_178617_a +c net/minecraft/class_853 net/minecraft/client/renderer/chunk/ChunkRenderCache + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;II[Lnet/minecraft/class_2818;)Z method_30000 func_241718_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2818$class_2819;)Lnet/minecraft/class_2586; method_3688 getTileEntity + m (III)I method_3690 getIndex + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;I)Lnet/minecraft/class_853; method_3689 generateCache + m (Lnet/minecraft/class_2338;)I method_3691 getIndex + f I field_4488 chunkStartX + f Lnet/minecraft/class_2338; field_4481 cacheStartPos + f I field_4487 chunkStartZ + f I field_4482 cacheSizeZ + f [Lnet/minecraft/class_2680; field_4489 blockStates + f [Lnet/minecraft/class_3610; field_4485 fluidStates + f [[Lnet/minecraft/class_2818; field_4483 chunks + f I field_4484 cacheSizeY + f I field_4486 cacheSizeX + f Lnet/minecraft/class_1937; field_4490 world +c net/minecraft/class_854 net/minecraft/client/renderer/chunk/SetVisibility + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Z)V method_3692 setVisible + m (Ljava/util/Set;)V method_3693 setManyVisible + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Z method_3695 isVisible + m ()Ljava/lang/String; toString toString + m (Z)V method_3694 setAllVisible + f Ljava/util/BitSet; field_4492 bitSet + f I field_4491 COUNT_FACES +c net/minecraft/class_4604 net/minecraft/client/renderer/culling/ClippingHelper + m (DDD)V method_23088 setCameraPosition + m (Lnet/minecraft/class_1159;IIII)V method_23091 setFrustumPlane + m (Lnet/minecraft/class_1159;Lnet/minecraft/class_1159;)V method_23092 calculateFrustum + m (DDDDDD)Z method_23089 isBoxInFrustum + m (Lnet/minecraft/class_238;)Z method_23093 isBoundingBoxInFrustum + m (FFFFFF)Z method_23090 isBoxInFrustumRaw + f [Lnet/minecraft/class_1162; field_20994 frustum + f D field_20997 cameraZ + f D field_20996 cameraY + f D field_20995 cameraX +c net/minecraft/class_4207 net/minecraft/client/renderer/debug/PointOfInterestDebugRenderer + m (Lnet/minecraft/class_2338;)Ljava/util/Collection; method_23142 func_239340_c_ + m (Lnet/minecraft/class_2338;)Ljava/util/Collection; method_29386 func_239343_d_ + m (Lnet/minecraft/class_4207$class_4232;)V method_19432 func_217692_a + m (Lnet/minecraft/class_4207$class_4232;)Z method_23147 func_217694_d + m (Lnet/minecraft/class_4207$class_4232;)Z method_23145 func_217703_c + m (Ljava/lang/String;Lnet/minecraft/class_2338;II)V method_23134 func_222923_a + m (DDDLnet/minecraft/class_4207$class_4232;)V method_23148 func_222924_a_ + m (Lnet/minecraft/class_2374;ILjava/lang/String;IF)V method_23132 func_217693_a + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4207$class_4232;)Z method_23127 func_239336_b_ + m ()Ljava/util/Map; method_23144 func_222915_d + m (Lnet/minecraft/class_2338;)Ljava/util/List; method_30112 func_241729_e_ + m (Lnet/minecraft/class_4207$class_4233;)V method_19701 func_217691_a + m (Lnet/minecraft/class_1297;)V method_23126 func_239317_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4207$class_4232;)Z method_29384 func_239323_a_ + m (Lnet/minecraft/class_2338;Ljava/util/List;)V method_23131 func_222921_a + m (Ljava/lang/String;Lnet/minecraft/class_4207$class_4233;II)V method_23133 func_217695_a + m ()V method_24805 func_239331_b_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4207$class_4233;)V method_23128 func_239324_a_ + m (Lnet/minecraft/class_4207$class_4233;)V method_23137 func_217705_b + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/util/List;)V method_23129 func_239325_a_ + m (Lnet/minecraft/class_2338;)V method_23138 func_217699_b + m (Lnet/minecraft/class_2338;)V method_19434 func_217698_a + m (Ljava/util/Map$Entry;)Z method_24804 func_239330_a_ + m (Lnet/minecraft/class_2338;I)V method_19702 func_217706_a + m ()V method_23146 func_217710_d + m (DDD)V method_23135 func_229035_a_ + m (Lnet/minecraft/class_4207$class_4233;)Ljava/util/Set; method_29385 func_239342_d_ + m (Lnet/minecraft/class_4207$class_4232;DDD)V method_23140 func_229038_b_ + m (Lnet/minecraft/class_4207$class_4233;)Ljava/util/Set; method_23141 func_217696_c + m (Lnet/minecraft/class_4207$class_4232;DDD)V method_23136 func_229037_a_ + f Lorg/apache/logging/log4j/Logger; field_18920 LOGGER + f Ljava/util/Map; field_18921 field_239313_d_ + f Ljava/util/Map; field_18787 field_217713_c + f Lnet/minecraft/class_310; field_18786 client + f Ljava/util/UUID; field_18922 field_217716_f +c net/minecraft/class_4207$class_4232 net/minecraft/client/renderer/debug/PointOfInterestDebugRenderer$BrainInfo + m (Lnet/minecraft/class_4207$class_4232;Lnet/minecraft/class_2338;)Z method_23150 func_239364_b_ + m ()Ljava/util/UUID; method_23149 func_217746_a + m (Lnet/minecraft/class_4207$class_4232;Lnet/minecraft/class_2338;)Z method_29387 func_239362_a_ + m (Lnet/minecraft/class_2338;)Z method_23151 func_217744_a + m (Lnet/minecraft/class_2338;)Z method_29388 func_239365_b_ + f Ljava/util/List; field_18928 field_217752_f + f I field_18924 field_217748_b + f Ljava/util/List; field_18927 field_217751_e + f Ljava/util/List; field_19375 field_223457_m + f Ljava/util/List; field_19374 field_217753_g + f Ljava/util/Set; field_25287 field_239360_q_ + f Ljava/util/Set; field_18930 field_217754_h + f Ljava/lang/String; field_19372 field_223455_g + f Z field_19373 field_223456_i + f Lnet/minecraft/class_11; field_19330 field_222930_g + f F field_22407 field_239350_g_ + f Lnet/minecraft/class_2374; field_18926 field_217750_d + f F field_22406 field_239349_f_ + f I field_19329 field_222929_e + f Ljava/lang/String; field_19328 field_217749_c + f Ljava/util/UUID; field_18923 field_217747_a + f Ljava/lang/String; field_18925 field_222928_d +c net/minecraft/class_4207$class_4233 net/minecraft/client/renderer/debug/PointOfInterestDebugRenderer$POIInfo + f Ljava/lang/String; field_18932 field_217756_b + f I field_18933 field_217757_c + f Lnet/minecraft/class_2338; field_18931 field_217755_a +c net/minecraft/class_4703 net/minecraft/client/renderer/debug/BeeDebugRenderer + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4703$class_5243;)Z method_23810 func_228970_a_ + m (Lnet/minecraft/class_4703$class_5243;)V method_23824 func_228988_c_ + m (Ljava/util/Map;Lnet/minecraft/class_4703$class_5243;)V method_23818 func_241722_a_ + m (Lnet/minecraft/class_4703$class_5243;)Z method_23829 func_228992_e_ + m (Ljava/util/Map;Lnet/minecraft/class_4703$class_5243;)V method_24082 func_228985_b_ + m (Lnet/minecraft/class_4703$class_5243;)V method_23831 func_228994_f_ + m (Lnet/minecraft/class_4703$class_5243;Lnet/minecraft/class_2338;)Ljava/lang/String; method_23806 func_228965_a_ + m ()Ljava/util/Map; method_23830 func_228996_h_ + m (Lnet/minecraft/class_4703$class_5243;)Z method_23827 func_228990_d_ + m (Ljava/util/Map;Lnet/minecraft/class_4703$class_5243;Lnet/minecraft/class_2338;)V method_24083 func_228986_a_ + m (Ljava/util/Map$Entry;)Z method_23953 func_228984_b_ + m ()Ljava/util/Map; method_24084 func_228991_e_ + m (Lnet/minecraft/class_2338;)V method_23808 func_228968_a_ + m (Ljava/util/Map$Entry;)V method_23817 func_228978_a_ + m (Lnet/minecraft/class_4703$class_4705;)V method_23807 func_228966_a_ + m ()V method_23826 func_228993_f_ + m (Lnet/minecraft/class_1297;)V method_23804 func_228963_a_ + m (Lnet/minecraft/class_2338;Ljava/util/List;)V method_23813 func_228972_a_ + m (Lnet/minecraft/class_2338;)Ljava/util/Set; method_30111 func_241727_e_ + m (Lnet/minecraft/class_2338;)Ljava/util/List; method_30109 func_241725_c_ + m ()V method_23832 func_228997_i_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/util/List;)V method_23812 func_228971_a_ + m (Lnet/minecraft/class_2338;FFFFF)V method_23809 func_228969_a_ + m (Ljava/lang/String;Lnet/minecraft/class_4703$class_4705;II)V method_23815 func_228975_a_ + m (Lnet/minecraft/class_4703$class_4705;Ljava/util/Collection;)V method_23821 func_228967_a_ + m (JLjava/util/Map$Entry;)Z method_23803 func_228962_a_ + m (Lnet/minecraft/class_2374;ILjava/lang/String;IF)V method_23814 func_228974_a_ + m ()Lnet/minecraft/class_4184; method_23828 func_228995_g_ + m (Lnet/minecraft/class_2338;)Ljava/util/Collection; method_23822 func_228983_b_ + m (Ljava/util/Collection;)Ljava/lang/String; method_23825 func_228977_a_ + m (Lnet/minecraft/class_2338;Ljava/util/Map;Lnet/minecraft/class_4703$class_4705;)V method_23811 func_228973_a_ + m ()V method_23823 func_228989_d_ + m (Lnet/minecraft/class_4703$class_5243;)V method_23820 func_228982_b_ + m (Ljava/lang/String;Lnet/minecraft/class_2338;II)V method_23816 func_228976_a_ + m (Lnet/minecraft/class_4703$class_5243;)V method_23805 func_228964_a_ + m (Lnet/minecraft/class_2338;)Ljava/util/Set; method_30110 func_241726_d_ + m ()V method_23819 func_228987_c_ + m ()V method_23952 func_228981_b_ + f Lnet/minecraft/class_310; field_21532 field_228958_a_ + f Ljava/util/Map; field_21534 field_228960_c_ + f Ljava/util/Map; field_21533 field_228959_b_ + f Ljava/util/UUID; field_21535 field_228961_d_ +c net/minecraft/class_4703$class_4705 net/minecraft/client/renderer/debug/BeeDebugRenderer$Hive + f J field_21546 field_229016_f_ + f Ljava/lang/String; field_21544 field_229012_b_ + f Z field_21626 field_229015_e_ + f I field_21625 field_229014_d_ + f Lnet/minecraft/class_2338; field_21543 field_229011_a_ + f I field_21545 field_229013_c_ +c net/minecraft/class_4703$class_5243 net/minecraft/client/renderer/debug/BeeDebugRenderer$Bee + m ()Z method_27651 func_229010_c_ + m (Lnet/minecraft/class_2338;)Z method_27649 func_229008_a_ + m ()Ljava/util/UUID; method_27648 func_229007_a_ + m ()Ljava/lang/String; toString toString + m ()Ljava/lang/String; method_27650 func_229009_b_ + f Ljava/util/UUID; field_24322 field_228998_a_ + f Ljava/util/List; field_24329 field_229005_h_ + f I field_24323 field_228999_b_ + f Ljava/util/Set; field_24330 field_229006_i_ + f Lnet/minecraft/class_2338; field_24326 field_229002_e_ + f Lnet/minecraft/class_11; field_24325 field_229001_d_ + f Lnet/minecraft/class_2338; field_24327 field_229003_f_ + f Lnet/minecraft/class_2374; field_24324 field_229000_c_ + f I field_24328 field_229004_g_ +c net/minecraft/class_862 net/minecraft/client/renderer/debug/ChunkBorderDebugRenderer + f Lnet/minecraft/class_310; field_4516 minecraft +c net/minecraft/class_859 net/minecraft/client/renderer/debug/CaveDebugRenderer + m (Lnet/minecraft/class_2338;Ljava/util/List;Ljava/util/List;)V method_3704 addCave + f Ljava/util/List; field_4506 caves + f Ljava/util/Map; field_4508 sizes + f Ljava/util/Map; field_4507 subCaves +c net/minecraft/class_865 net/minecraft/client/renderer/debug/CollisionBoxDebugRenderer + m (Lnet/minecraft/class_1297;)Z method_27036 func_239370_a_ + f Lnet/minecraft/class_310; field_4540 minecraft + f Ljava/util/List; field_4542 collisionData + f D field_4541 lastUpdate +c net/minecraft/class_860 net/minecraft/client/renderer/debug/ChunkInfoDebugRenderer + m (Lnet/minecraft/class_860;)Lnet/minecraft/class_310; method_23094 func_217677_a + f I field_4511 field_217680_c + f Lnet/minecraft/class_860$class_4605; field_20998 field_217681_d + f D field_4510 field_217679_b + f Lnet/minecraft/class_310; field_4509 client +c net/minecraft/class_860$class_4605 net/minecraft/client/renderer/debug/ChunkInfoDebugRenderer$Entry + m (Lnet/minecraft/class_860$class_4605;)Ljava/util/concurrent/CompletableFuture; method_23095 func_217718_a + m (Lnet/minecraft/class_860$class_4605;)Ljava/util/Map; method_23097 func_217717_b + m (Lnet/minecraft/class_1132;Lnet/minecraft/class_5321;II)Ljava/util/Map; method_23096 func_239369_a_ + f Ljava/util/Map; field_21000 field_217721_b + f Lnet/minecraft/class_860; field_20999 field_217720_a + f Ljava/util/concurrent/CompletableFuture; field_21001 field_217722_c +c net/minecraft/class_860$1 net/minecraft/client/renderer/debug/ChunkInfoDebugRenderer$1 +c net/minecraft/class_863 net/minecraft/client/renderer/debug/DebugRenderer + m (DDDDDDFFFF)V method_23098 renderBox + m ()V method_20413 clear + m (Ljava/lang/String;DDDI)V method_23105 renderText + m (Lnet/minecraft/class_1297;I)Ljava/util/Optional; method_23101 getTargetEntity + m (Ljava/lang/String;IIII)V method_23108 renderText + m (Ljava/lang/String;DDDIFZFZ)V method_23107 renderText + m (Lnet/minecraft/class_2338;FFFFF)V method_23103 renderBox + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597$class_4598;DDD)V method_23099 render + m (Ljava/lang/String;DDDIF)V method_23106 renderText + m (Lnet/minecraft/class_1297;)Z method_23100 func_217727_a + m (Lnet/minecraft/class_238;FFFF)V method_23102 renderBox + m ()Z method_3713 toggleChunkBorders + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;FFFF)V method_23104 renderBox + f Lnet/minecraft/class_868; field_4523 pathfinding + f Lnet/minecraft/class_859; field_4529 cave + f Lnet/minecraft/class_863$class_864; field_4517 solidFace + f Lnet/minecraft/class_863$class_864; field_4536 light + f Lnet/minecraft/class_863$class_864; field_4537 worldGenAttempts + f Lnet/minecraft/class_4205; field_18778 field_217742_n + f Lnet/minecraft/class_4207; field_18777 field_239371_m_ + f Lnet/minecraft/class_870; field_4539 structure + f Lnet/minecraft/class_863$class_864; field_4533 field_217740_l + f Z field_4531 chunkBorderEnabled + f Lnet/minecraft/class_863$class_864; field_4534 collisionBox + f Lnet/minecraft/class_863$class_864; field_4535 neighborsUpdate + f Lnet/minecraft/class_4703; field_21547 field_229017_n_ + f Lnet/minecraft/class_4503; field_20519 field_229018_q_ + f Lnet/minecraft/class_863$class_864; field_4538 heightMap + f Lnet/minecraft/class_4841; field_22408 field_239372_n_ + f Lnet/minecraft/class_4304; field_19325 field_222927_n + f Lnet/minecraft/class_863$class_864; field_4532 chunkBorder + f Lnet/minecraft/class_863$class_864; field_4528 water +c net/minecraft/class_863$class_864 net/minecraft/client/renderer/debug/DebugRenderer$IDebugRenderer + m ()V method_20414 clear + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;DDD)V method_23109 render +c net/minecraft/class_4205 net/minecraft/client/renderer/debug/EntityAIDebugRenderer + m (Lnet/minecraft/class_2338;Ljava/lang/Integer;Ljava/util/List;)V method_23116 func_217683_a + m (ILjava/util/List;)V method_19430 func_217682_a + f Ljava/util/Map; field_18781 field_217685_b + f Lnet/minecraft/class_310; field_18780 client +c net/minecraft/class_4205$class_4206 net/minecraft/client/renderer/debug/EntityAIDebugRenderer$Entry + f Lnet/minecraft/class_2338; field_18782 field_217723_a + f Z field_18785 field_217726_d + f Ljava/lang/String; field_18784 field_217725_c + f I field_18783 field_217724_b +c net/minecraft/class_4503 net/minecraft/client/renderer/debug/GameTestDebugRenderer + m (JLjava/util/Map$Entry;)Z method_23110 func_229021_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4503$class_4504;)V method_23111 func_229023_a_ + m (Lnet/minecraft/class_2338;ILjava/lang/String;I)V method_22123 func_229022_a_ + f Ljava/util/Map; field_20520 field_229020_a_ +c net/minecraft/class_4503$class_4504 net/minecraft/client/renderer/debug/GameTestDebugRenderer$Marker + m ()F method_23112 func_229027_a_ + m ()F method_23115 func_229030_d_ + m ()F method_23114 func_229029_c_ + m ()F method_23113 func_229028_b_ + f J field_20523 field_229026_c_ + f Ljava/lang/String; field_20522 field_229025_b_ + f I field_20521 field_229024_a_ +c net/minecraft/class_866 net/minecraft/client/renderer/debug/LightDebugRenderer + f Lnet/minecraft/class_310; field_4612 minecraft +c net/minecraft/class_867 net/minecraft/client/renderer/debug/HeightMapDebugRenderer + m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_1160; method_27037 func_239373_a_ + f Lnet/minecraft/class_310; field_4613 minecraft +c net/minecraft/class_867$1 net/minecraft/client/renderer/debug/HeightMapDebugRenderer$1 + f [I field_23778 field_239374_a_ +c net/minecraft/class_868 net/minecraft/client/renderer/debug/PathfindingDebugRenderer + m (Lnet/minecraft/class_11;DDD)V method_23117 func_229031_a_ + m (Lnet/minecraft/class_2338;DDD)F method_23119 func_229033_a_ + m (Lnet/minecraft/class_11;FZZDDD)V method_23118 func_229032_a_ + m (Lnet/minecraft/class_11;FZZDDD)V method_23121 func_229034_b_ + m (ILnet/minecraft/class_11;F)V method_3869 addPath + f Ljava/util/Map; field_4616 pathMap + f Ljava/util/Map; field_4617 pathMaxDistance + f Ljava/util/Map; field_4615 creationMap +c net/minecraft/class_869 net/minecraft/client/renderer/debug/NeighborsUpdateDebugRenderer + m (JLnet/minecraft/class_2338;)V method_3870 addUpdate + m (Ljava/lang/Long;)Ljava/util/Map; method_30113 func_241730_a_ + f Ljava/util/Map; field_4623 lastUpdate + f Lnet/minecraft/class_310; field_4622 minecraft +c net/minecraft/class_871 net/minecraft/client/renderer/debug/SolidFaceDebugRenderer + f Lnet/minecraft/class_310; field_4628 minecraft +c net/minecraft/class_4304 net/minecraft/client/renderer/debug/RaidDebugRenderer + m (Lnet/minecraft/class_2338;)V method_23122 func_222903_a + m ()Lnet/minecraft/class_4184; method_23125 func_222904_c + m (Ljava/lang/String;Lnet/minecraft/class_2338;I)V method_23123 func_222905_a + m (Ljava/util/Collection;)V method_20561 func_222906_a + f Ljava/util/Collection; field_19327 field_222909_b + f Lnet/minecraft/class_310; field_19326 client +c net/minecraft/class_4841 net/minecraft/client/renderer/debug/VillageSectionsDebugRender + m (Lnet/minecraft/class_4076;)V method_24808 func_239378_a_ + m (DDD)V method_24806 func_239376_a_ + m (Lnet/minecraft/class_4076;)V method_24810 func_239380_c_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4076;)V method_24807 func_239377_a_ + m (Lnet/minecraft/class_4076;)V method_24809 func_239379_b_ + f Ljava/util/Set; field_22409 field_239375_a_ +c net/minecraft/class_870 net/minecraft/client/renderer/debug/StructureDebugRenderer + m (Lnet/minecraft/class_3341;Ljava/util/List;Ljava/util/List;Lnet/minecraft/class_2874;)V method_3871 func_223454_a + f Ljava/util/Map; field_4626 mainBoxes + f Lnet/minecraft/class_310; field_4624 minecraft + f Ljava/util/Map; field_4627 subBoxes + f Ljava/util/Map; field_4625 subBoxFlags +c net/minecraft/class_873 net/minecraft/client/renderer/debug/WorldGenAttemptsDebugRenderer + m (Lnet/minecraft/class_2338;FFFFF)V method_3872 addAttempt + f Ljava/util/List; field_4639 reds + f Ljava/util/List; field_4637 alphas + f Ljava/util/List; field_4635 sizes + f Ljava/util/List; field_4640 locations + f Ljava/util/List; field_4638 blues + f Ljava/util/List; field_4636 greens +c net/minecraft/class_872 net/minecraft/client/renderer/debug/WaterDebugRenderer + f Lnet/minecraft/class_310; field_4629 minecraft +c net/minecraft/class_875 net/minecraft/client/renderer/entity/AbstractHorseRenderer + m (Lnet/minecraft/class_1496;Lnet/minecraft/class_4587;F)V method_3874 preRenderCallback + f F field_4641 scale +c net/minecraft/class_874 net/minecraft/client/renderer/entity/AreaEffectCloudRenderer + m (Lnet/minecraft/class_1295;)Lnet/minecraft/class_2960; method_3873 getEntityTexture +c net/minecraft/class_968 net/minecraft/client/renderer/entity/AbstractZombieRenderer + m (Lnet/minecraft/class_1642;)Z method_25449 func_230495_a_ + m (Lnet/minecraft/class_1642;)Lnet/minecraft/class_2960; method_4163 getEntityTexture + f Lnet/minecraft/class_2960; field_4819 field_217771_a +c net/minecraft/class_876 net/minecraft/client/renderer/entity/ArrowRenderer + m (Lnet/minecraft/class_1665;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3875 render + m (Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;Lnet/minecraft/class_4588;IIIFFIIII)V method_23153 drawVertex +c net/minecraft/class_877 net/minecraft/client/renderer/entity/ArmorStandRenderer + m (Lnet/minecraft/class_1531;Lnet/minecraft/class_4587;FFF)V method_3877 applyRotations + m (Lnet/minecraft/class_1531;)Lnet/minecraft/class_2960; method_3880 getEntityTexture + m (Lnet/minecraft/class_1531;ZZZ)Lnet/minecraft/class_1921; method_24301 func_230496_a_ + m (Lnet/minecraft/class_1531;)Z method_3878 canRenderName + f Lnet/minecraft/class_2960; field_4642 TEXTURE_ARMOR_STAND +c net/minecraft/class_4505 net/minecraft/client/renderer/entity/BeeRenderer + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_2960; method_22129 getEntityTexture + f Lnet/minecraft/class_2960; field_20527 field_229043_i_ + f Lnet/minecraft/class_2960; field_20526 field_229042_h_ + f Lnet/minecraft/class_2960; field_20524 field_229040_a_ + f Lnet/minecraft/class_2960; field_20525 field_229041_g_ +c net/minecraft/class_879 net/minecraft/client/renderer/entity/BatRenderer + m (Lnet/minecraft/class_1420;Lnet/minecraft/class_4587;FFF)V method_3882 applyRotations + m (Lnet/minecraft/class_1420;Lnet/minecraft/class_4587;F)V method_3884 preRenderCallback + m (Lnet/minecraft/class_1420;)Lnet/minecraft/class_2960; method_3883 getEntityTexture + f Lnet/minecraft/class_2960; field_4645 BAT_TEXTURES +c net/minecraft/class_881 net/minecraft/client/renderer/entity/BoatRenderer + m (Lnet/minecraft/class_1690;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3888 render + m (Lnet/minecraft/class_1690;)Lnet/minecraft/class_2960; method_3891 getEntityTexture + f Lnet/minecraft/class_554; field_4647 modelBoat + f [Lnet/minecraft/class_2960; field_4648 BOAT_TEXTURES +c net/minecraft/class_878 net/minecraft/client/renderer/entity/BlazeRenderer + m (Lnet/minecraft/class_1545;)Lnet/minecraft/class_2960; method_3881 getEntityTexture + m (Lnet/minecraft/class_1545;Lnet/minecraft/class_2338;)I method_24085 getBlockLight + f Lnet/minecraft/class_2960; field_4644 BLAZE_TEXTURES +c net/minecraft/class_880 net/minecraft/client/renderer/entity/CaveSpiderRenderer + m (Lnet/minecraft/class_1549;Lnet/minecraft/class_4587;F)V method_3886 preRenderCallback + m (Lnet/minecraft/class_1549;)Lnet/minecraft/class_2960; method_3885 getEntityTexture + f Lnet/minecraft/class_2960; field_4646 CAVE_SPIDER_TEXTURES +c net/minecraft/class_929 net/minecraft/client/renderer/entity/CatRenderer + m (Lnet/minecraft/class_1451;Lnet/minecraft/class_4587;FFF)V method_16045 applyRotations + m (Lnet/minecraft/class_1451;)Lnet/minecraft/class_2960; method_4078 getEntityTexture + m (Lnet/minecraft/class_1451;Lnet/minecraft/class_4587;F)V method_4079 preRenderCallback +c net/minecraft/class_882 net/minecraft/client/renderer/entity/ChickenRenderer + m (Lnet/minecraft/class_1428;F)F method_3893 handleRotationFloat + m (Lnet/minecraft/class_1428;)Lnet/minecraft/class_2960; method_3892 getEntityTexture + f Lnet/minecraft/class_2960; field_4649 CHICKEN_TEXTURES +c net/minecraft/class_883 net/minecraft/client/renderer/entity/ChestedHorseRenderer + m (Lnet/minecraft/class_1492;)Lnet/minecraft/class_2960; method_3894 getEntityTexture + f Ljava/util/Map; field_4650 field_195635_a +c net/minecraft/class_885 net/minecraft/client/renderer/entity/CodRenderer + m (Lnet/minecraft/class_1431;)Lnet/minecraft/class_2960; method_3897 getEntityTexture + m (Lnet/minecraft/class_1431;Lnet/minecraft/class_4587;FFF)V method_3896 applyRotations + f Lnet/minecraft/class_2960; field_4652 COD_LOCATION +c net/minecraft/class_887 net/minecraft/client/renderer/entity/CreeperRenderer + m (Lnet/minecraft/class_1548;Lnet/minecraft/class_4587;F)V method_3900 preRenderCallback + m (Lnet/minecraft/class_1548;)Lnet/minecraft/class_2960; method_3899 getEntityTexture + m (Lnet/minecraft/class_1548;F)F method_23154 getOverlayProgress + f Lnet/minecraft/class_2960; field_4653 CREEPER_TEXTURES +c net/minecraft/class_884 net/minecraft/client/renderer/entity/CowRenderer + m (Lnet/minecraft/class_1430;)Lnet/minecraft/class_2960; method_3895 getEntityTexture + f Lnet/minecraft/class_2960; field_4651 COW_TEXTURES +c net/minecraft/class_891 net/minecraft/client/renderer/entity/DragonFireballRenderer + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;IFIII)V method_23837 func_229045_a_ + m (Lnet/minecraft/class_1670;Lnet/minecraft/class_2338;)I method_24086 getBlockLight + m (Lnet/minecraft/class_1670;)Lnet/minecraft/class_2960; method_3905 getEntityTexture + m (Lnet/minecraft/class_1670;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3906 render + f Lnet/minecraft/class_1921; field_21735 field_229044_e_ + f Lnet/minecraft/class_2960; field_4661 DRAGON_FIREBALL_TEXTURE +c net/minecraft/class_888 net/minecraft/client/renderer/entity/DolphinRenderer + m (Lnet/minecraft/class_1433;)Lnet/minecraft/class_2960; method_3903 getEntityTexture + f Lnet/minecraft/class_2960; field_4654 DOLPHIN_LOCATION +c net/minecraft/class_893 net/minecraft/client/renderer/entity/ElderGuardianRenderer + m (Lnet/minecraft/class_1577;Lnet/minecraft/class_4587;F)V method_3910 preRenderCallback + f Lnet/minecraft/class_2960; field_4665 GUARDIAN_ELDER_TEXTURE +c net/minecraft/class_890 net/minecraft/client/renderer/entity/DrownedRenderer + m (Lnet/minecraft/class_1551;Lnet/minecraft/class_4587;FFF)V method_4164 applyRotations + f Lnet/minecraft/class_2960; field_4659 DROWNED_LOCATION +c net/minecraft/class_895 net/minecraft/client/renderer/entity/EnderDragonRenderer + m (Lnet/minecraft/class_1510;)Lnet/minecraft/class_2960; method_3914 getEntityTexture + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;I)V method_23157 func_229061_a_ + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;FF)V method_23156 func_229060_a_ + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;FF)V method_23159 func_229063_c_ + m (FFFFILnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3917 func_229059_a_ + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;FF)V method_23158 func_229062_b_ + m (Lnet/minecraft/class_1510;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3918 render + f Lnet/minecraft/class_2960; field_21006 field_229052_g_ + f Lnet/minecraft/class_2960; field_4670 DRAGON_TEXTURES + f Lnet/minecraft/class_2960; field_4669 DRAGON_EXPLODING_TEXTURES + f F field_21007 field_229057_l_ + f Lnet/minecraft/class_1921; field_21740 field_229056_k_ + f Lnet/minecraft/class_2960; field_4668 ENDERCRYSTAL_BEAM_TEXTURES + f Lnet/minecraft/class_895$class_625; field_21008 model + f Lnet/minecraft/class_1921; field_21737 field_229053_h_ + f Lnet/minecraft/class_1921; field_21738 field_229054_i_ + f Lnet/minecraft/class_1921; field_21739 field_229055_j_ +c net/minecraft/class_895$class_625 net/minecraft/client/renderer/entity/EnderDragonRenderer$EnderDragonModel + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFLnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;)V method_23838 func_229081_a_ + m (Lnet/minecraft/class_1510;FFFFF)V method_23621 setRotationAngles + m (Lnet/minecraft/class_1510;FFF)V method_23620 setLivingAnimations + f Lnet/minecraft/class_630; field_3627 body + f Lnet/minecraft/class_630; field_3629 leftProximalWing + f F field_21442 partialTicks + f Lnet/minecraft/class_630; field_3626 rightHindLeg + f Lnet/minecraft/class_630; field_3628 rightHindFoot + f Lnet/minecraft/class_630; field_21554 leftHindFoot + f Lnet/minecraft/class_630; field_21555 rightProximalWing + f Lnet/minecraft/class_630; field_3631 jaw + f Lnet/minecraft/class_630; field_21551 leftForeFoot + f Lnet/minecraft/class_630; field_3630 head + f Lnet/minecraft/class_630; field_3637 spine + f Lnet/minecraft/class_630; field_3625 rightForeFoot + f Lnet/minecraft/class_630; field_3633 rightHindThigh + f Lnet/minecraft/class_1510; field_21441 dragonInstance + f Lnet/minecraft/class_630; field_21552 leftHindThigh + f Lnet/minecraft/class_630; field_21553 leftHindLeg + f Lnet/minecraft/class_630; field_3635 rightDistalWing + f Lnet/minecraft/class_630; field_21548 leftDistalWing + f Lnet/minecraft/class_630; field_21549 leftForeThigh + f Lnet/minecraft/class_630; field_3632 rightForeThigh + f Lnet/minecraft/class_630; field_3634 rightForeLeg + f Lnet/minecraft/class_630; field_21550 leftForeLeg +c net/minecraft/class_892 net/minecraft/client/renderer/entity/EnderCrystalRenderer + m (Lnet/minecraft/class_1511;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3908 render + m (Lnet/minecraft/class_1511;)Lnet/minecraft/class_2960; method_3909 getEntityTexture + m (Lnet/minecraft/class_1511;F)F method_23155 func_229051_a_ + m (Lnet/minecraft/class_1511;Lnet/minecraft/class_4604;DDD)Z method_3907 shouldRender + f F field_21002 field_229047_f_ + f Lnet/minecraft/class_630; field_21003 field_229048_g_ + f Lnet/minecraft/class_1921; field_21736 field_229046_e_ + f Lnet/minecraft/class_630; field_21004 field_229049_h_ + f Lnet/minecraft/class_630; field_21005 field_229050_i_ + f Lnet/minecraft/class_2960; field_4663 ENDER_CRYSTAL_TEXTURES +c net/minecraft/class_896 net/minecraft/client/renderer/entity/EndermiteRenderer + m (Lnet/minecraft/class_1559;)Lnet/minecraft/class_2960; method_3920 getEntityTexture + m (Lnet/minecraft/class_1559;)F method_3919 getDeathMaxRotation + f Lnet/minecraft/class_2960; field_4671 ENDERMITE_TEXTURES +c net/minecraft/class_894 net/minecraft/client/renderer/entity/EndermanRenderer + m (Lnet/minecraft/class_1560;F)Lnet/minecraft/class_243; method_23160 getRenderOffset + m (Lnet/minecraft/class_1560;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3911 render + m (Lnet/minecraft/class_1560;)Lnet/minecraft/class_2960; method_3912 getEntityTexture + f Lnet/minecraft/class_2960; field_4666 ENDERMAN_TEXTURES + f Ljava/util/Random; field_4667 rnd +c net/minecraft/class_897 net/minecraft/client/renderer/entity/EntityRenderer + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2561;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3926 renderName + m ()Lnet/minecraft/class_327; method_3932 getFontRendererFromRenderManager + m ()Lnet/minecraft/class_898; method_3940 getRenderManager + m (Lnet/minecraft/class_1297;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3936 render + m (Lnet/minecraft/class_1297;F)I method_24088 getPackedLight + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_2960; method_3931 getEntityTexture + m (Lnet/minecraft/class_1297;)Z method_3921 canRenderName + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2338;)I method_27950 func_239381_b_ + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2338;)I method_24087 getBlockLight + m (Lnet/minecraft/class_1297;F)Lnet/minecraft/class_243; method_23169 getRenderOffset + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_4604;DDD)Z method_3933 shouldRender + f F field_4673 shadowSize + f Lnet/minecraft/class_898; field_4676 renderManager + f F field_4672 shadowOpaque +c net/minecraft/class_898 net/minecraft/client/renderer/entity/EntityRendererManager + m ()Lnet/minecraft/class_1158; method_24197 getCameraOrientation + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_4604;DDD)Z method_3950 shouldRender + m ()Z method_3958 isDebugBoundingBox + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1297;)V method_23165 renderFire + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1297;FFLnet/minecraft/class_4538;F)V method_23166 renderShadow + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_1297;F)V method_3956 renderDebugBoundingBox + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_1297;FFF)V method_23164 renderBoundingBox + m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;DDDFF)V method_23163 renderBlockShadow + m (Lnet/minecraft/class_918;Lnet/minecraft/class_3296;)V method_23167 registerRenderers + m (Lnet/minecraft/class_1297;F)I method_23839 getPackedLight + m (Lnet/minecraft/class_1297;DDDFFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3954 renderEntityStatic + m (DDD)D method_3959 getDistanceToCamera + m ()Lnet/minecraft/class_327; method_3949 getFontRenderer + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_897; method_3953 getRenderer + m (Lnet/minecraft/class_1158;)V method_24196 setCameraOrientation + m (Z)V method_3955 setDebugBoundingBox + m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;FFFFF)V method_23161 fireVertex + m (Z)V method_3948 setRenderShadow + m (Lnet/minecraft/class_1937;)V method_3944 setWorld + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_897;)V method_17145 register + m (Lnet/minecraft/class_1297;)D method_23168 squareDistanceTo + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_4184;Lnet/minecraft/class_1297;)V method_3941 cacheActiveRenderInfo + m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;FFFFFF)V method_23162 shadowVertex + f Ljava/util/Map; field_4687 skinMap + f Ljava/util/Map; field_4696 renderers + f Lnet/minecraft/class_1007; field_4683 playerRenderer + f Lnet/minecraft/class_1297; field_4678 pointedEntity + f Lnet/minecraft/class_1060; field_4685 textureManager + f Lnet/minecraft/class_327; field_4689 textRenderer + f Lnet/minecraft/class_4184; field_4686 info + f Lnet/minecraft/class_1921; field_21009 SHADOW_RENDER_TYPE + f Z field_4680 debugBoundingBox + f Lnet/minecraft/class_1158; field_21794 cameraOrientation + f Lnet/minecraft/class_315; field_4692 options + f Z field_4681 renderShadow + f Lnet/minecraft/class_1937; field_4684 world +c net/minecraft/class_899 net/minecraft/client/renderer/entity/EvokerRenderer + m (Lnet/minecraft/class_1617;)Lnet/minecraft/class_2960; method_3961 getEntityTexture + f Lnet/minecraft/class_2960; field_4697 EVOKER_ILLAGER +c net/minecraft/class_899$1 net/minecraft/client/renderer/entity/EvokerRenderer$1 + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1617;FFFFFF)V method_23170 render + f Lnet/minecraft/class_899; field_4698 field_193113_a +c net/minecraft/class_900 net/minecraft/client/renderer/entity/EvokerFangsRenderer + m (Lnet/minecraft/class_1669;)Lnet/minecraft/class_2960; method_3963 getEntityTexture + m (Lnet/minecraft/class_1669;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3962 render + f Lnet/minecraft/class_568; field_4700 model + f Lnet/minecraft/class_2960; field_4699 EVOKER_ILLAGER_FANGS +c net/minecraft/class_901 net/minecraft/client/renderer/entity/FallingBlockRenderer + m (Lnet/minecraft/class_1540;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3965 render + m (Lnet/minecraft/class_1540;)Lnet/minecraft/class_2960; method_3964 getEntityTexture +c net/minecraft/class_902 net/minecraft/client/renderer/entity/ExperienceOrbRenderer + m (Lnet/minecraft/class_1303;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3966 render + m (Lnet/minecraft/class_1303;)Lnet/minecraft/class_2960; method_3967 getEntityTexture + m (Lnet/minecraft/class_1303;Lnet/minecraft/class_2338;)I method_24089 getBlockLight + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;FFIIIFFI)V method_23171 vertex + f Lnet/minecraft/class_2960; field_4701 EXPERIENCE_ORB_TEXTURES + f Lnet/minecraft/class_1921; field_21741 RENDER_TYPE +c net/minecraft/class_906 net/minecraft/client/renderer/entity/FishRenderer + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;IFIII)V method_23840 func_229106_a_ + m (II)F method_23954 func_229105_a_ + m (FFFLnet/minecraft/class_4588;Lnet/minecraft/class_1159;F)V method_23172 func_229104_a_ + m (Lnet/minecraft/class_1536;)Lnet/minecraft/class_2960; method_3975 getEntityTexture + m (Lnet/minecraft/class_1536;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3974 render + f Lnet/minecraft/class_1921; field_21742 field_229103_e_ + f Lnet/minecraft/class_2960; field_4707 BOBBER +c net/minecraft/class_903 net/minecraft/client/renderer/entity/FireworkRocketRenderer + m (Lnet/minecraft/class_1671;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3968 render + m (Lnet/minecraft/class_1671;)Lnet/minecraft/class_2960; method_3969 getEntityTexture + f Lnet/minecraft/class_918; field_4703 itemRenderer +c net/minecraft/class_905 net/minecraft/client/renderer/entity/GhastRenderer + m (Lnet/minecraft/class_1571;)Lnet/minecraft/class_2960; method_3972 getEntityTexture + m (Lnet/minecraft/class_1571;Lnet/minecraft/class_4587;F)V method_3973 preRenderCallback + f Lnet/minecraft/class_2960; field_4706 GHAST_SHOOTING_TEXTURES + f Lnet/minecraft/class_2960; field_4705 GHAST_TEXTURES +c net/minecraft/class_4042 net/minecraft/client/renderer/entity/FoxRenderer + m (Lnet/minecraft/class_4019;)Lnet/minecraft/class_2960; method_18333 getEntityTexture + m (Lnet/minecraft/class_4019;Lnet/minecraft/class_4587;FFF)V method_18334 applyRotations + f Lnet/minecraft/class_2960; field_18027 SLEEPING_FOX + f Lnet/minecraft/class_2960; field_18026 FOX + f Lnet/minecraft/class_2960; field_18029 SLEEPING_SNOW_FOX + f Lnet/minecraft/class_2960; field_18028 SNOW_FOX +c net/minecraft/class_907 net/minecraft/client/renderer/entity/GuardianRenderer + m (Lnet/minecraft/class_1577;)Lnet/minecraft/class_2960; method_3976 getEntityTexture + m (Lnet/minecraft/class_1309;DF)Lnet/minecraft/class_243; method_3979 getPosition + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;FFFIIIFF)V method_23173 func_229108_a_ + m (Lnet/minecraft/class_1577;Lnet/minecraft/class_4604;DDD)Z method_3978 shouldRender + m (Lnet/minecraft/class_1577;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3977 render + f Lnet/minecraft/class_1921; field_21743 field_229107_h_ + f Lnet/minecraft/class_2960; field_4709 GUARDIAN_BEAM_TEXTURE + f Lnet/minecraft/class_2960; field_4708 GUARDIAN_TEXTURE +c net/minecraft/class_908 net/minecraft/client/renderer/entity/GiantZombieRenderer + m (Lnet/minecraft/class_1570;Lnet/minecraft/class_4587;F)V method_3980 preRenderCallback + m (Lnet/minecraft/class_1570;)Lnet/minecraft/class_2960; method_3981 getEntityTexture + f Lnet/minecraft/class_2960; field_4710 ZOMBIE_TEXTURES + f F field_4711 scale +c net/minecraft/class_910 net/minecraft/client/renderer/entity/HorseRenderer + m (Lnet/minecraft/class_1498;)Lnet/minecraft/class_2960; method_3983 getEntityTexture + m (Ljava/util/EnumMap;)V method_27151 func_239384_a_ + f Ljava/util/Map; field_4714 field_239383_a_ +c net/minecraft/class_4798 net/minecraft/client/renderer/entity/HoglinRenderer + m (Lnet/minecraft/class_4760;)Lnet/minecraft/class_2960; method_24472 getEntityTexture + m (Lnet/minecraft/class_4760;)Z method_27038 func_230495_a_ + f Lnet/minecraft/class_2960; field_22244 field_239382_a_ +c net/minecraft/class_909 net/minecraft/client/renderer/entity/BipedRenderer + m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_2960; method_3982 getEntityTexture + f Lnet/minecraft/class_2960; field_4713 DEFAULT_RES_LOC +c net/minecraft/class_3729 net/minecraft/client/renderer/entity/IllagerRenderer + m (Lnet/minecraft/class_1543;Lnet/minecraft/class_4587;F)V method_16460 preRenderCallback +c net/minecraft/class_912 net/minecraft/client/renderer/entity/HuskRenderer + m (Lnet/minecraft/class_1642;Lnet/minecraft/class_4587;F)V method_3985 preRenderCallback + f Lnet/minecraft/class_2960; field_4716 HUSK_ZOMBIE_TEXTURES +c net/minecraft/class_913 net/minecraft/client/renderer/entity/IronGolemRenderer + m (Lnet/minecraft/class_1439;Lnet/minecraft/class_4587;FFF)V method_3986 applyRotations + m (Lnet/minecraft/class_1439;)Lnet/minecraft/class_2960; method_3987 getEntityTexture + f Lnet/minecraft/class_2960; field_4717 IRON_GOLEM_TEXTURES +c net/minecraft/class_914 net/minecraft/client/renderer/entity/IllusionerRenderer + m (Lnet/minecraft/class_1581;)Z method_3988 isVisible + m (Lnet/minecraft/class_1581;)Lnet/minecraft/class_2960; method_3990 getEntityTexture + m (Lnet/minecraft/class_1581;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3991 render + f Lnet/minecraft/class_2960; field_4718 ILLUSIONIST +c net/minecraft/class_914$1 net/minecraft/client/renderer/entity/IllusionerRenderer$1 + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1581;FFFFFF)V method_17149 render + f Lnet/minecraft/class_914; field_4719 field_193114_a +c net/minecraft/class_915 net/minecraft/client/renderer/entity/ItemFrameRenderer + m (Lnet/minecraft/class_1533;F)Lnet/minecraft/class_243; method_23174 getRenderOffset + m (Lnet/minecraft/class_1533;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3994 render + m (Lnet/minecraft/class_1533;)Lnet/minecraft/class_2960; method_3993 getEntityTexture + m (Lnet/minecraft/class_1533;)Z method_23176 canRenderName + m (Lnet/minecraft/class_1533;Lnet/minecraft/class_2561;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_23175 renderName + f Lnet/minecraft/class_1091; field_4723 LOCATION_MODEL_MAP + f Lnet/minecraft/class_918; field_4720 itemRenderer + f Lnet/minecraft/class_1091; field_4721 LOCATION_MODEL + f Lnet/minecraft/class_310; field_4724 mc +c net/minecraft/class_916 net/minecraft/client/renderer/entity/ItemRenderer + m (Lnet/minecraft/class_1542;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3996 render + m (Lnet/minecraft/class_1799;)I method_3998 getModelCount + m (Lnet/minecraft/class_1542;)Lnet/minecraft/class_2960; method_3999 getEntityTexture + f Ljava/util/Random; field_4725 random + f Lnet/minecraft/class_918; field_4726 itemRenderer +c net/minecraft/class_920 net/minecraft/client/renderer/entity/LeashKnotRenderer + m (Lnet/minecraft/class_1532;)Lnet/minecraft/class_2960; method_4036 getEntityTexture + m (Lnet/minecraft/class_1532;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4035 render + f Lnet/minecraft/class_579; field_4735 leashKnotModel + f Lnet/minecraft/class_2960; field_4734 LEASH_KNOT_TEXTURES +c net/minecraft/class_918 net/minecraft/client/renderer/ItemRenderer + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;ZLnet/minecraft/class_4587;Lnet/minecraft/class_4597;IILnet/minecraft/class_1087;)V method_23179 renderItem + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;IILnet/minecraft/class_4587;Lnet/minecraft/class_4597;)V method_23178 renderItem + m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_4032 func_239389_c_ + m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_4005 func_239392_d_ + m (Lnet/minecraft/class_1799;II)V method_4023 renderItemAndEffectIntoGUI + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;II)V method_27951 renderItemAndEffectIntoGUI + m (Lnet/minecraft/class_4597;Lnet/minecraft/class_1921;Lnet/minecraft/class_4587$class_4665;)Lnet/minecraft/class_4588; method_30114 getGlintVertexBuilder + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;ZLnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1937;II)V method_23177 renderItem + m (Lnet/minecraft/class_1799;II)V method_4010 renderItemIntoGUI + m (Lnet/minecraft/class_4597;Lnet/minecraft/class_1921;Lnet/minecraft/class_4587$class_4665;)Lnet/minecraft/class_4588; method_30115 getDirectGlintVertexBuilder + m (Lnet/minecraft/class_1799;II)V method_27953 renderItemAndEffectIntoGuiWithoutEntity + m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_4029 func_239388_b_ + m (Lnet/minecraft/class_4597;Lnet/minecraft/class_1921;ZZ)Lnet/minecraft/class_4588; method_29711 getEntityGlintVertexBuilder + m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_4008 func_239385_a_ + m (Lnet/minecraft/class_4597;Lnet/minecraft/class_1921;ZZ)Lnet/minecraft/class_4588; method_23181 getBuffer + m (Lnet/minecraft/class_327;Lnet/minecraft/class_1799;II)V method_4025 renderItemOverlays + m (Lnet/minecraft/class_4597;Lnet/minecraft/class_1921;ZZ)Lnet/minecraft/class_4588; method_27952 getArmorVertexBuilder + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;II)V method_4026 renderItemIntoGUI + m (Lnet/minecraft/class_1087;Lnet/minecraft/class_1799;IILnet/minecraft/class_4587;Lnet/minecraft/class_4588;)V method_23182 renderModel + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1087; method_4019 getItemModelWithOverrides + m (Lnet/minecraft/class_1799;IILnet/minecraft/class_1087;)V method_4021 renderItemModelIntoGUI + m (Lnet/minecraft/class_287;IIIIIIII)V method_4004 draw + m ()Lnet/minecraft/class_763; method_4012 getItemModelMesher + m (Lnet/minecraft/class_327;Lnet/minecraft/class_1799;IILjava/lang/String;)V method_4022 renderItemOverlayIntoGUI + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Ljava/util/List;Lnet/minecraft/class_1799;II)V method_23180 renderQuads + f F field_4730 zLevel + f Ljava/util/Set; field_4728 ITEM_MODEL_BLACKLIST + f Lnet/minecraft/class_1060; field_4729 textureManager + f Lnet/minecraft/class_2960; field_21010 RES_ITEM_GLINT + f Lnet/minecraft/class_325; field_4733 itemColors + f Lnet/minecraft/class_763; field_4732 itemModelMesher +c net/minecraft/class_922 net/minecraft/client/renderer/entity/LivingRenderer + m (Lnet/minecraft/class_2350;)F method_18656 getFacingAngle + m (Lnet/minecraft/class_1309;F)F method_4044 getSwingProgress + m (Lnet/minecraft/class_1309;F)I method_23622 getPackedOverlay + m (Lnet/minecraft/class_1309;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4054 render + m (Lnet/minecraft/class_1309;)F method_4039 getDeathMaxRotation + m (Lnet/minecraft/class_1309;ZZZ)Lnet/minecraft/class_1921; method_24302 func_230496_a_ + m (Lnet/minecraft/class_1309;F)F method_4045 handleRotationFloat + m (Lnet/minecraft/class_1309;F)F method_23185 getOverlayProgress + m (Lnet/minecraft/class_1309;)Z method_25450 func_230495_a_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4587;FFF)V method_4058 applyRotations + m (Lnet/minecraft/class_1309;)Z method_4056 isVisible + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4587;F)V method_4042 preRenderCallback + m (Lnet/minecraft/class_3887;)Z method_4046 addLayer + m (Lnet/minecraft/class_1309;)Z method_4055 canRenderName + f Lorg/apache/logging/log4j/Logger; field_21011 LOGGER + f Lnet/minecraft/class_583; field_4737 entityModel + f Ljava/util/List; field_4738 layerRenderers +c net/minecraft/class_922$1 net/minecraft/client/renderer/entity/LivingRenderer$1 + f [I field_18227 field_217784_a + f [I field_4743 field_178679_a +c net/minecraft/class_919 net/minecraft/client/renderer/entity/LightningBoltRenderer + m (Lnet/minecraft/class_1538;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4034 render + m (Lnet/minecraft/class_1159;Lnet/minecraft/class_4588;FFIFFFFFFFZZZZ)V method_23183 func_229116_a_ + m (Lnet/minecraft/class_1538;)Lnet/minecraft/class_2960; method_4033 getEntityTexture +c net/minecraft/class_923 net/minecraft/client/renderer/entity/LlamaSpitRenderer + m (Lnet/minecraft/class_1673;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4061 render + m (Lnet/minecraft/class_1673;)Lnet/minecraft/class_2960; method_4062 getEntityTexture + f Lnet/minecraft/class_581; field_4744 model + f Lnet/minecraft/class_2960; field_4745 LLAMA_SPIT_TEXTURE +c net/minecraft/class_921 net/minecraft/client/renderer/entity/LlamaRenderer + m (Lnet/minecraft/class_1501;)Lnet/minecraft/class_2960; method_4037 getEntityTexture + f [Lnet/minecraft/class_2960; field_4736 LLAMA_TEXTURES +c net/minecraft/class_925 net/minecraft/client/renderer/entity/MinecartRenderer + m (Lnet/minecraft/class_1688;)Lnet/minecraft/class_2960; method_4065 getEntityTexture + m (Lnet/minecraft/class_1688;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4063 render + m (Lnet/minecraft/class_1688;FLnet/minecraft/class_2680;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4064 renderBlockState + f Lnet/minecraft/class_2960; field_4746 MINECART_TEXTURES + f Lnet/minecraft/class_583; field_4747 modelMinecart +c net/minecraft/class_917 net/minecraft/client/renderer/entity/MagmaCubeRenderer + m (Lnet/minecraft/class_1589;Lnet/minecraft/class_4587;F)V method_4000 preRenderCallback + m (Lnet/minecraft/class_1589;Lnet/minecraft/class_2338;)I method_24090 getBlockLight + m (Lnet/minecraft/class_1589;)Lnet/minecraft/class_2960; method_4001 getEntityTexture + f Lnet/minecraft/class_2960; field_4727 MAGMA_CUBE_TEXTURES +c net/minecraft/class_926 net/minecraft/client/renderer/entity/MooshroomRenderer + m (Ljava/util/HashMap;)V method_18657 func_217773_a + m (Lnet/minecraft/class_1438;)Lnet/minecraft/class_2960; method_4066 getEntityTexture + f Ljava/util/Map; field_4748 field_217774_a +c net/minecraft/class_927 net/minecraft/client/renderer/entity/MobRenderer + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;IFFFFFIIZFF)V method_23187 addVertexPair + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;FFFIIIIFFFF)V method_23186 renderSide + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4604;DDD)Z method_4068 shouldRender + m (Lnet/minecraft/class_1308;)Z method_4071 canRenderName + m (Lnet/minecraft/class_1308;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4072 render + m (Lnet/minecraft/class_1308;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1297;)V method_4073 renderLeash +c net/minecraft/class_928 net/minecraft/client/renderer/entity/PaintingRenderer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_1534;IILnet/minecraft/class_1058;Lnet/minecraft/class_1058;)V method_4074 func_229122_a_ + m (Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;Lnet/minecraft/class_4588;FFFFFIIII)V method_23188 func_229121_a_ + m (Lnet/minecraft/class_1534;)Lnet/minecraft/class_2960; method_4077 getEntityTexture + m (Lnet/minecraft/class_1534;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4075 render +c net/minecraft/class_3683 net/minecraft/client/renderer/entity/OcelotRenderer + m (Lnet/minecraft/class_3701;)Lnet/minecraft/class_2960; method_16046 getEntityTexture + f Lnet/minecraft/class_2960; field_16259 OCELOT_TEXTURES +c net/minecraft/class_930 net/minecraft/client/renderer/entity/ParrotRenderer + m (Lnet/minecraft/class_1453;)Lnet/minecraft/class_2960; method_4080 getEntityTexture + m (Lnet/minecraft/class_1453;F)F method_4081 handleRotationFloat + f [Lnet/minecraft/class_2960; field_4754 PARROT_TEXTURES +c net/minecraft/class_931 net/minecraft/client/renderer/entity/PandaRenderer + m (Lnet/minecraft/class_1440;Lnet/minecraft/class_4587;FFF)V method_4085 applyRotations + m (Ljava/util/EnumMap;)V method_17796 func_217776_a + m (FFIFF)F method_4086 func_217775_a + m (Lnet/minecraft/class_1440;)Lnet/minecraft/class_2960; method_4083 getEntityTexture + f Ljava/util/Map; field_17595 field_217777_a +c net/minecraft/class_932 net/minecraft/client/renderer/entity/PigRenderer + m (Lnet/minecraft/class_1452;)Lnet/minecraft/class_2960; method_4087 getEntityTexture + f Lnet/minecraft/class_2960; field_4755 PIG_TEXTURES +c net/minecraft/class_933 net/minecraft/client/renderer/entity/PhantomRenderer + m (Lnet/minecraft/class_1593;)Lnet/minecraft/class_2960; method_4090 getEntityTexture + m (Lnet/minecraft/class_1593;Lnet/minecraft/class_4587;FFF)V method_4089 applyRotations + m (Lnet/minecraft/class_1593;Lnet/minecraft/class_4587;F)V method_4088 preRenderCallback + f Lnet/minecraft/class_2960; field_4756 PHANTOM_LOCATION +c net/minecraft/class_934 net/minecraft/client/renderer/entity/PillagerRenderer + m (Lnet/minecraft/class_1604;)Lnet/minecraft/class_2960; method_4092 getEntityTexture + f Lnet/minecraft/class_2960; field_4757 field_217772_a +c net/minecraft/class_4842 net/minecraft/client/renderer/entity/PiglinRenderer + m (Z)Lnet/minecraft/class_4840; method_24875 func_239395_a_ + m (Lnet/minecraft/class_1308;)Z method_25451 func_230495_a_ + f Ljava/util/Map; field_25793 field_243503_a +c net/minecraft/class_936 net/minecraft/client/renderer/entity/PufferfishRenderer + m (Lnet/minecraft/class_1454;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4094 render + m (Lnet/minecraft/class_1454;)Lnet/minecraft/class_2960; method_4096 getEntityTexture + m (Lnet/minecraft/class_1454;Lnet/minecraft/class_4587;FFF)V method_4095 applyRotations + f Lnet/minecraft/class_592; field_4763 modelLarge + f I field_4765 lastPuffState + f Lnet/minecraft/class_595; field_4764 modelMedium + f Lnet/minecraft/class_2960; field_4762 PUFFERFISH_TEXTURES + f Lnet/minecraft/class_594; field_4761 modelSmall +c net/minecraft/class_937 net/minecraft/client/renderer/entity/PolarBearRenderer + m (Lnet/minecraft/class_1456;Lnet/minecraft/class_4587;F)V method_4099 preRenderCallback + m (Lnet/minecraft/class_1456;)Lnet/minecraft/class_2960; method_4097 getEntityTexture + f Lnet/minecraft/class_2960; field_4766 POLAR_BEAR_TEXTURE +c net/minecraft/class_939 net/minecraft/client/renderer/entity/RabbitRenderer + m (Lnet/minecraft/class_1463;)Lnet/minecraft/class_2960; method_4102 getEntityTexture + f Lnet/minecraft/class_2960; field_4769 CAERBANNOG + f Lnet/minecraft/class_2960; field_4771 TOAST + f Lnet/minecraft/class_2960; field_4773 WHITE + f Lnet/minecraft/class_2960; field_4768 GOLD + f Lnet/minecraft/class_2960; field_4775 BLACK + f Lnet/minecraft/class_2960; field_4774 SALT + f Lnet/minecraft/class_2960; field_4770 BROWN + f Lnet/minecraft/class_2960; field_4772 WHITE_SPLOTCHED +c net/minecraft/class_3883 net/minecraft/client/renderer/entity/IEntityRenderer + m ()Lnet/minecraft/class_583; method_4038 getEntityModel + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_2960; method_3931 getEntityTexture +c net/minecraft/class_911 net/minecraft/client/renderer/entity/RavagerRenderer + m (Lnet/minecraft/class_1584;)Lnet/minecraft/class_2960; method_3984 getEntityTexture + f Lnet/minecraft/class_2960; field_4715 RAVAGER_TEXTURES +c net/minecraft/class_941 net/minecraft/client/renderer/entity/SheepRenderer + m (Lnet/minecraft/class_1472;)Lnet/minecraft/class_2960; method_4106 getEntityTexture + f Lnet/minecraft/class_2960; field_4778 SHEARED_SHEEP_TEXTURES +c net/minecraft/class_938 net/minecraft/client/renderer/entity/SalmonRenderer + m (Lnet/minecraft/class_1462;Lnet/minecraft/class_4587;FFF)V method_4100 applyRotations + m (Lnet/minecraft/class_1462;)Lnet/minecraft/class_2960; method_4101 getEntityTexture + f Lnet/minecraft/class_2960; field_4767 SALMON_LOCATION +c net/minecraft/class_943 net/minecraft/client/renderer/entity/ShulkerRenderer + m (Lnet/minecraft/class_1606;Lnet/minecraft/class_4604;DDD)Z method_4112 shouldRender + m (Lnet/minecraft/class_1606;Lnet/minecraft/class_4587;FFF)V method_4114 applyRotations + m (I)[Lnet/minecraft/class_2960; method_22791 func_229124_a_ + m (Lnet/minecraft/class_4730;)Lnet/minecraft/class_2960; method_22792 func_229125_a_ + m (Lnet/minecraft/class_1606;)Lnet/minecraft/class_2960; method_4111 getEntityTexture + m (Lnet/minecraft/class_1606;F)Lnet/minecraft/class_243; method_23189 getRenderOffset + f Lnet/minecraft/class_2960; field_4781 field_204402_a + f [Lnet/minecraft/class_2960; field_4780 SHULKER_ENDERGOLEM_TEXTURE +c net/minecraft/class_940 net/minecraft/client/renderer/entity/ShulkerBulletRenderer + m (Lnet/minecraft/class_1678;)Lnet/minecraft/class_2960; method_4105 getEntityTexture + m (Lnet/minecraft/class_1678;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4103 render + m (Lnet/minecraft/class_1678;Lnet/minecraft/class_2338;)I method_24091 getBlockLight + f Lnet/minecraft/class_1921; field_21744 field_229123_e_ + f Lnet/minecraft/class_603; field_4777 model + f Lnet/minecraft/class_2960; field_4776 SHULKER_SPARK_TEXTURE +c net/minecraft/class_946 net/minecraft/client/renderer/entity/SkeletonRenderer + m (Lnet/minecraft/class_1547;)Lnet/minecraft/class_2960; method_4119 getEntityTexture + f Lnet/minecraft/class_2960; field_4785 SKELETON_TEXTURES +c net/minecraft/class_942 net/minecraft/client/renderer/entity/SilverfishRenderer + m (Lnet/minecraft/class_1614;)F method_4107 getDeathMaxRotation + m (Lnet/minecraft/class_1614;)Lnet/minecraft/class_2960; method_4108 getEntityTexture + f Lnet/minecraft/class_2960; field_4779 SILVERFISH_TEXTURES +c net/minecraft/class_948 net/minecraft/client/renderer/entity/SnowManRenderer + m (Lnet/minecraft/class_1473;)Lnet/minecraft/class_2960; method_4122 getEntityTexture + f Lnet/minecraft/class_2960; field_4788 SNOW_MAN_TEXTURES +c net/minecraft/class_945 net/minecraft/client/renderer/entity/SlimeRenderer + m (Lnet/minecraft/class_1621;)Lnet/minecraft/class_2960; method_4116 getEntityTexture + m (Lnet/minecraft/class_1621;Lnet/minecraft/class_4587;F)V method_4118 preRenderCallback + m (Lnet/minecraft/class_1621;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4117 render + f Lnet/minecraft/class_2960; field_4784 SLIME_TEXTURES +c net/minecraft/class_949 net/minecraft/client/renderer/entity/SpiderRenderer + m (Lnet/minecraft/class_1628;)F method_4124 getDeathMaxRotation + m (Lnet/minecraft/class_1628;)Lnet/minecraft/class_2960; method_4123 getEntityTexture + f Lnet/minecraft/class_2960; field_4789 SPIDER_TEXTURES +c net/minecraft/class_947 net/minecraft/client/renderer/entity/SpectralArrowRenderer + m (Lnet/minecraft/class_1679;)Lnet/minecraft/class_2960; method_4120 getEntityTexture + f Lnet/minecraft/class_2960; field_4787 RES_SPECTRAL_ARROW +c net/minecraft/class_950 net/minecraft/client/renderer/entity/StrayRenderer + f Lnet/minecraft/class_2960; field_4790 STRAY_SKELETON_TEXTURES +c net/minecraft/class_951 net/minecraft/client/renderer/entity/SquidRenderer + m (Lnet/minecraft/class_1477;F)F method_4125 handleRotationFloat + m (Lnet/minecraft/class_1477;Lnet/minecraft/class_4587;FFF)V method_4126 applyRotations + m (Lnet/minecraft/class_1477;)Lnet/minecraft/class_2960; method_4127 getEntityTexture + f Lnet/minecraft/class_2960; field_4791 SQUID_TEXTURES +c net/minecraft/class_953 net/minecraft/client/renderer/entity/SpriteRenderer + f Z field_21745 field_229126_f_ + f F field_17147 scale + f Lnet/minecraft/class_918; field_4792 itemRenderer +c net/minecraft/class_4999 net/minecraft/client/renderer/entity/StriderRenderer + m (Lnet/minecraft/class_4985;)Z method_26423 func_230495_a_ + m (Lnet/minecraft/class_4985;Lnet/minecraft/class_4587;F)V method_26422 preRenderCallback + m (Lnet/minecraft/class_4985;)Lnet/minecraft/class_2960; method_26421 getEntityTexture + f Lnet/minecraft/class_2960; field_23372 field_239397_a_ + f Lnet/minecraft/class_2960; field_23937 field_239398_g_ +c net/minecraft/class_954 net/minecraft/client/renderer/entity/TippedArrowRenderer + m (Lnet/minecraft/class_1667;)Lnet/minecraft/class_2960; method_4130 getEntityTexture + f Lnet/minecraft/class_2960; field_4795 RES_ARROW + f Lnet/minecraft/class_2960; field_4794 RES_TIPPED_ARROW +c net/minecraft/class_955 net/minecraft/client/renderer/entity/TridentRenderer + m (Lnet/minecraft/class_1685;)Lnet/minecraft/class_2960; method_4134 getEntityTexture + m (Lnet/minecraft/class_1685;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4133 render + f Lnet/minecraft/class_2960; field_4796 TRIDENT + f Lnet/minecraft/class_613; field_4797 tridentModel +c net/minecraft/class_956 net/minecraft/client/renderer/entity/TNTRenderer + m (Lnet/minecraft/class_1541;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4135 render + m (Lnet/minecraft/class_1541;)Lnet/minecraft/class_2960; method_4136 getEntityTexture +c net/minecraft/class_957 net/minecraft/client/renderer/entity/TNTMinecartRenderer + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IZ)V method_23190 renderTntFlash + m (Lnet/minecraft/class_1701;FLnet/minecraft/class_2680;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4137 renderBlockState +c net/minecraft/class_958 net/minecraft/client/renderer/entity/TurtleRenderer + m (Lnet/minecraft/class_1481;)Lnet/minecraft/class_2960; method_4139 getEntityTexture + m (Lnet/minecraft/class_1481;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4138 render + f Lnet/minecraft/class_2960; field_4798 BIG_SEA_TURTLE +c net/minecraft/class_959 net/minecraft/client/renderer/entity/TropicalFishRenderer + m (Lnet/minecraft/class_1474;)Lnet/minecraft/class_2960; method_4141 getEntityTexture + m (Lnet/minecraft/class_1474;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4140 render + m (Lnet/minecraft/class_1474;Lnet/minecraft/class_4587;FFF)V method_4142 applyRotations + f Lnet/minecraft/class_612; field_4800 aModel + f Lnet/minecraft/class_615; field_4799 bModel +c net/minecraft/class_960 net/minecraft/client/renderer/entity/VexRenderer + m (Lnet/minecraft/class_1634;Lnet/minecraft/class_4587;F)V method_4143 preRenderCallback + m (Lnet/minecraft/class_1634;)Lnet/minecraft/class_2960; method_4144 getEntityTexture + m (Lnet/minecraft/class_1634;Lnet/minecraft/class_2338;)I method_24092 getBlockLight + f Lnet/minecraft/class_2960; field_4801 VEX_TEXTURE + f Lnet/minecraft/class_2960; field_4802 VEX_CHARGING_TEXTURE +c net/minecraft/class_961 net/minecraft/client/renderer/entity/UndeadHorseRenderer + m (Lnet/minecraft/class_1496;)Lnet/minecraft/class_2960; method_4145 getEntityTexture + f Ljava/util/Map; field_4803 UNDEAD_HORSE_TEXTURES +c net/minecraft/class_963 net/minecraft/client/renderer/entity/VillagerRenderer + m (Lnet/minecraft/class_1646;)Lnet/minecraft/class_2960; method_4151 getEntityTexture + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4587;F)V method_4149 preRenderCallback + f Lnet/minecraft/class_2960; field_4807 VILLAGER_TEXTURES +c net/minecraft/class_3992 net/minecraft/client/renderer/entity/WanderingTraderRenderer + m (Lnet/minecraft/class_3989;Lnet/minecraft/class_4587;F)V method_18046 preRenderCallback + m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_2960; method_18045 getEntityTexture + f Lnet/minecraft/class_2960; field_17739 field_217780_a +c net/minecraft/class_962 net/minecraft/client/renderer/entity/VindicatorRenderer + m (Lnet/minecraft/class_1632;)Lnet/minecraft/class_2960; method_4147 getEntityTexture + f Lnet/minecraft/class_2960; field_4804 VINDICATOR_TEXTURE +c net/minecraft/class_962$1 net/minecraft/client/renderer/entity/VindicatorRenderer$1 + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1632;FFFFFF)V method_17156 render + f Lnet/minecraft/class_962; field_4805 field_191362_a +c net/minecraft/class_964 net/minecraft/client/renderer/entity/WitherRenderer + m (Lnet/minecraft/class_1528;Lnet/minecraft/class_4587;F)V method_4152 preRenderCallback + m (Lnet/minecraft/class_1528;)Lnet/minecraft/class_2960; method_4153 getEntityTexture + m (Lnet/minecraft/class_1528;Lnet/minecraft/class_2338;)I method_24093 getBlockLight + f Lnet/minecraft/class_2960; field_4812 INVULNERABLE_WITHER_TEXTURES + f Lnet/minecraft/class_2960; field_4813 WITHER_TEXTURES +c net/minecraft/class_965 net/minecraft/client/renderer/entity/WitchRenderer + m (Lnet/minecraft/class_1640;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4155 render + m (Lnet/minecraft/class_1640;Lnet/minecraft/class_4587;F)V method_4157 preRenderCallback + m (Lnet/minecraft/class_1640;)Lnet/minecraft/class_2960; method_4154 getEntityTexture + f Lnet/minecraft/class_2960; field_4814 WITCH_TEXTURES +c net/minecraft/class_966 net/minecraft/client/renderer/entity/WitherSkullRenderer + m (Lnet/minecraft/class_1687;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4159 render + m (Lnet/minecraft/class_1687;Lnet/minecraft/class_2338;)I method_24094 getBlockLight + m (Lnet/minecraft/class_1687;)Lnet/minecraft/class_2960; method_4160 getEntityTexture + f Lnet/minecraft/class_2960; field_4817 INVULNERABLE_WITHER_TEXTURES + f Lnet/minecraft/class_607; field_4816 skeletonHeadModel + f Lnet/minecraft/class_2960; field_4815 WITHER_TEXTURES +c net/minecraft/class_967 net/minecraft/client/renderer/entity/WitherSkeletonRenderer + m (Lnet/minecraft/class_1547;Lnet/minecraft/class_4587;F)V method_4161 preRenderCallback + f Lnet/minecraft/class_2960; field_4818 WITHER_SKELETON_TEXTURES +c net/minecraft/class_5144 net/minecraft/client/renderer/entity/ZoglinRenderer + m (Lnet/minecraft/class_5136;)Lnet/minecraft/class_2960; method_27039 getEntityTexture + f Lnet/minecraft/class_2960; field_23779 field_239399_a_ +c net/minecraft/class_969 net/minecraft/client/renderer/entity/WolfRenderer + m (Lnet/minecraft/class_1493;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4166 render + m (Lnet/minecraft/class_1493;)Lnet/minecraft/class_2960; method_4165 getEntityTexture + m (Lnet/minecraft/class_1493;F)F method_4167 handleRotationFloat + f Lnet/minecraft/class_2960; field_4823 ANGRY_WOLF_TEXTURES + f Lnet/minecraft/class_2960; field_4821 WOLF_TEXTURES + f Lnet/minecraft/class_2960; field_4822 TAMED_WOLF_TEXTURES +c net/minecraft/class_971 net/minecraft/client/renderer/entity/ZombieVillagerRenderer + m (Lnet/minecraft/class_1641;)Lnet/minecraft/class_2960; method_4175 getEntityTexture + m (Lnet/minecraft/class_1641;)Z method_25452 func_230495_a_ + f Lnet/minecraft/class_2960; field_4835 ZOMBIE_VILLAGER_TEXTURES +c net/minecraft/class_3886 net/minecraft/client/renderer/entity/ZombieRenderer +c net/minecraft/class_4506 net/minecraft/client/renderer/entity/layers/BeeStingerLayer + m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;FIFFI)V method_23295 func_229132_a_ + f Lnet/minecraft/class_2960; field_20529 field_229131_a_ +c net/minecraft/class_973 net/minecraft/client/renderer/entity/layers/ArrowLayer + f Lnet/minecraft/class_1667; field_20528 field_229130_b_ + f Lnet/minecraft/class_898; field_17153 field_215336_a +c net/minecraft/class_975 net/minecraft/client/renderer/entity/layers/HeldBlockLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1560;FFFFFF)V method_4179 render +c net/minecraft/class_972 net/minecraft/client/renderer/entity/layers/CapeLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_742;FFFFFF)V method_4177 render +c net/minecraft/class_974 net/minecraft/client/renderer/entity/layers/CreeperChargeLayer + f Lnet/minecraft/class_562; field_4844 creeperModel + f Lnet/minecraft/class_2960; field_4842 LIGHTNING_TEXTURE +c net/minecraft/class_3684 net/minecraft/client/renderer/entity/layers/CatCollarLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1451;FFFFFF)V method_16047 render + f Lnet/minecraft/class_2960; field_16260 CAT_COLLAR + f Lnet/minecraft/class_3680; field_16261 model +c net/minecraft/class_976 net/minecraft/client/renderer/entity/layers/HeadLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_17159 render + f F field_24476 field_239404_c_ + f F field_24474 field_239402_a_ + f F field_24475 field_239403_b_ +c net/minecraft/class_4004 net/minecraft/client/renderer/entity/layers/CrossedArmsItemLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_4208 render +c net/minecraft/class_977 net/minecraft/client/renderer/entity/layers/DolphinCarriedItemLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1433;FFFFFF)V method_17160 render +c net/minecraft/class_978 net/minecraft/client/renderer/entity/layers/Deadmau5HeadLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_742;FFFFFF)V method_4181 render +c net/minecraft/class_979 net/minecraft/client/renderer/entity/layers/ElytraLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_17161 render + f Lnet/minecraft/class_563; field_4852 modelElytra + f Lnet/minecraft/class_2960; field_4850 TEXTURE_ELYTRA +c net/minecraft/class_980 net/minecraft/client/renderer/entity/layers/DrownedOuterLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1551;FFFFFF)V method_4182 render + f Lnet/minecraft/class_564; field_4855 modelOuterLayer + f Lnet/minecraft/class_2960; field_4854 LOCATION_OUTER_LAYER +c net/minecraft/class_4607 net/minecraft/client/renderer/entity/layers/EnergyLayer + m ()Lnet/minecraft/class_2960; method_23201 func_225633_a_ + m (F)F method_23202 func_225634_a_ + m ()Lnet/minecraft/class_583; method_23203 func_225635_b_ +c net/minecraft/class_985 net/minecraft/client/renderer/entity/layers/EndermanEyesLayer + f Lnet/minecraft/class_1921; field_4876 RENDER_TYPE +c net/minecraft/class_4043 net/minecraft/client/renderer/entity/layers/FoxHeldItemLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_4019;FFFFFF)V method_18335 render +c net/minecraft/class_4606 net/minecraft/client/renderer/entity/layers/AbstractEyesLayer + m ()Lnet/minecraft/class_1921; method_23193 getRenderType +c net/minecraft/class_4073 net/minecraft/client/renderer/entity/layers/LeatherHorseArmorLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1498;FFFFFF)V method_18658 render + f Lnet/minecraft/class_549; field_18228 field_215341_a +c net/minecraft/class_970 net/minecraft/client/renderer/entity/layers/BipedArmorLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1309;Lnet/minecraft/class_1304;ILnet/minecraft/class_572;)V method_4169 func_241739_a_ + m (Lnet/minecraft/class_1304;)Lnet/minecraft/class_572; method_4172 func_241736_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1738;ZLnet/minecraft/class_572;ZFFFLjava/lang/String;)V method_23192 func_241738_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_17157 render + m (Lnet/minecraft/class_1738;ZLjava/lang/String;)Lnet/minecraft/class_2960; method_4174 func_241737_a_ + m (Lnet/minecraft/class_572;Lnet/minecraft/class_1304;)V method_4170 setModelSlotVisible + m (Lnet/minecraft/class_1304;)Z method_4173 isLegSlot + f Ljava/util/Map; field_4829 ARMOR_TEXTURE_RES_MAP + f Lnet/minecraft/class_572; field_4830 modelLeggings + f Lnet/minecraft/class_572; field_4831 modelArmor +c net/minecraft/class_970$1 net/minecraft/client/renderer/entity/layers/BipedArmorLayer$1 + f [I field_4878 field_188481_a +c net/minecraft/class_5167 net/minecraft/client/renderer/entity/layers/HorseMarkingsLayer + m (Ljava/util/EnumMap;)V method_27153 func_239406_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1498;FFFFFF)V method_27152 render + f Ljava/util/Map; field_23938 field_239405_a_ +c net/minecraft/class_986 net/minecraft/client/renderer/entity/layers/IronGolenFlowerLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1439;FFFFFF)V method_4188 render +c net/minecraft/class_4691 net/minecraft/client/renderer/entity/layers/IronGolemCracksLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1439;FFFFFF)V method_23623 render + f Ljava/util/Map; field_21443 field_229134_a_ +c net/minecraft/class_988 net/minecraft/client/renderer/entity/layers/LlamaDecorLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1501;FFFFFF)V method_4191 render + f Lnet/minecraft/class_2960; field_17740 TRADER_LLAMA + f [Lnet/minecraft/class_2960; field_4880 LLAMA_DECOR_TEXTURES + f Lnet/minecraft/class_578; field_4881 model +c net/minecraft/class_989 net/minecraft/client/renderer/entity/layers/HeldItemLayer + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;Lnet/minecraft/class_1306;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4192 func_229135_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_17162 render +c net/minecraft/class_990 net/minecraft/client/renderer/entity/layers/PandaHeldItemLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1440;FFFFFF)V method_4194 render +c net/minecraft/class_991 net/minecraft/client/renderer/entity/layers/MooshroomMushroomLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1438;FFFFFF)V method_4195 render +c net/minecraft/class_993 net/minecraft/client/renderer/entity/layers/PhantomEyesLayer + f Lnet/minecraft/class_1921; field_4890 field_229138_a_ +c net/minecraft/class_983 net/minecraft/client/renderer/entity/layers/ParrotVariantLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1657;FFFFFF)V method_4185 render + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1657;FFFFZ)V method_4186 renderParrot + m (Lnet/minecraft/class_1299;)Z method_17957 func_215344_a + m (Lnet/minecraft/class_4587;ZLnet/minecraft/class_1657;Lnet/minecraft/class_4597;Lnet/minecraft/class_2487;IFFFFLnet/minecraft/class_1299;)V method_17958 func_229137_a_ + f Lnet/minecraft/class_584; field_17154 parrotModel +c net/minecraft/class_992 net/minecraft/client/renderer/entity/layers/SaddleLayer + f Lnet/minecraft/class_583; field_4887 field_239409_b_ + f Lnet/minecraft/class_2960; field_4888 field_239408_a_ +c net/minecraft/class_3887 net/minecraft/client/renderer/entity/layers/LayerRenderer + m (Lnet/minecraft/class_583;Lnet/minecraft/class_2960;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFF)V method_23199 renderCutoutModel + m (Lnet/minecraft/class_583;Lnet/minecraft/class_583;Lnet/minecraft/class_2960;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFFFFF)V method_23196 renderCopyCutoutModel + m ()Lnet/minecraft/class_583; method_17165 getEntityModel + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1297;FFFFFF)V method_4199 render + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_2960; method_23194 getEntityTexture + f Lnet/minecraft/class_3883; field_17155 entityRenderer +c net/minecraft/class_944 net/minecraft/client/renderer/entity/layers/ShulkerColorLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1606;FFFFFF)V method_4115 render +c net/minecraft/class_994 net/minecraft/client/renderer/entity/layers/SheepWoolLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1472;FFFFFF)V method_4198 render + f Lnet/minecraft/class_2960; field_4892 TEXTURE + f Lnet/minecraft/class_598; field_4891 sheepModel +c net/minecraft/class_996 net/minecraft/client/renderer/entity/layers/SnowmanHeadLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1473;FFFFFF)V method_4201 render +c net/minecraft/class_997 net/minecraft/client/renderer/entity/layers/SlimeGelLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_23200 render + f Lnet/minecraft/class_583; field_4895 slimeModel +c net/minecraft/class_998 net/minecraft/client/renderer/entity/layers/SpinAttackEffectLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_4203 render + f Lnet/minecraft/class_2960; field_4898 field_204836_a + f Lnet/minecraft/class_630; field_21012 field_229143_b_ +c net/minecraft/class_1000 net/minecraft/client/renderer/entity/layers/SpiderEyesLayer + f Lnet/minecraft/class_1921; field_4902 RENDER_TYPE +c net/minecraft/class_4507 net/minecraft/client/renderer/entity/layers/StuckInBodyLayer + m (Lnet/minecraft/class_1309;)I method_22134 func_225631_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_22132 render + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1297;FFFF)V method_22130 func_225632_a_ +c net/minecraft/class_1002 net/minecraft/client/renderer/entity/layers/StayClothingLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1308;FFFFFF)V method_23204 render + f Lnet/minecraft/class_2960; field_4907 STRAY_CLOTHES_TEXTURES + f Lnet/minecraft/class_606; field_4908 layerModel +c net/minecraft/class_3885 net/minecraft/client/renderer/entity/layers/VillagerLevelPendantLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_17151 render + m (Ljava/lang/String;Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_17155 func_215351_a + m (Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap;)V method_17152 func_215348_a + m (Lit/unimi/dsi/fastutil/objects/Object2ObjectMap;Ljava/lang/String;Lnet/minecraft/class_2348;Ljava/lang/Object;)Lnet/minecraft/class_3888$class_3889; method_17153 func_215350_a + m (Ljava/lang/String;Lnet/minecraft/class_2348;Ljava/lang/Object;Ljava/lang/Object;)Lnet/minecraft/class_3888$class_3889; method_17154 func_215349_a + f Lnet/minecraft/class_3296; field_17151 field_215355_d + f Lit/unimi/dsi/fastutil/objects/Object2ObjectMap; field_17149 field_215353_b + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_17148 field_215352_a + f Lit/unimi/dsi/fastutil/objects/Object2ObjectMap; field_17150 field_215354_c + f Ljava/lang/String; field_17152 field_215356_e +c net/minecraft/class_1001 net/minecraft/client/renderer/entity/layers/TropicalFishPatternLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1474;FFFFFF)V method_4205 render + f Lnet/minecraft/class_612; field_17157 modelA + f Lnet/minecraft/class_615; field_4903 modelB +c net/minecraft/class_1004 net/minecraft/client/renderer/entity/layers/WitherAuraLayer + f Lnet/minecraft/class_2960; field_4910 WITHER_ARMOR + f Lnet/minecraft/class_621; field_4909 witherModel +c net/minecraft/class_1005 net/minecraft/client/renderer/entity/layers/WitchHeldItemLayer +c net/minecraft/class_1006 net/minecraft/client/renderer/entity/layers/WolfCollarLayer + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1493;FFFFFF)V method_4209 render + f Lnet/minecraft/class_2960; field_4913 WOLF_COLLAR +c net/minecraft/class_1007 net/minecraft/client/renderer/entity/PlayerRenderer + m (Lnet/minecraft/class_742;Lnet/minecraft/class_2561;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4213 renderName + m (Lnet/minecraft/class_742;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4215 render + m (Lnet/minecraft/class_742;Lnet/minecraft/class_4587;FFF)V method_4212 applyRotations + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_742;Lnet/minecraft/class_630;Lnet/minecraft/class_630;)V method_23205 renderItem + m (Lnet/minecraft/class_742;)Lnet/minecraft/class_2960; method_4216 getEntityTexture + m (Lnet/minecraft/class_742;F)Lnet/minecraft/class_243; method_23206 getRenderOffset + m (Lnet/minecraft/class_742;Lnet/minecraft/class_1268;)Lnet/minecraft/class_572$class_573; method_4210 func_241741_a_ + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_742;)V method_4220 renderRightArm + m (Lnet/minecraft/class_742;)V method_4218 setModelVisibilities + m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_742;)V method_4221 renderLeftArm + m (Lnet/minecraft/class_742;Lnet/minecraft/class_4587;F)V method_4217 preRenderCallback +c net/minecraft/class_1800 net/minecraft/item/IItemPropertyGetter + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F call call +c net/minecraft/class_5272 net/minecraft/item/ItemModelsProperties + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_2960;Lnet/minecraft/class_1800;)V method_27879 registerProperty + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27887 func_239426_g_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27889 func_239428_i_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27888 func_239427_h_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27890 func_239429_j_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27891 func_239430_k_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27893 func_239432_m_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27892 func_239431_l_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27894 func_239433_n_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27895 func_239434_o_ + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_2960;)Lnet/minecraft/class_1800; method_27878 func_239417_a_ + m (Lnet/minecraft/class_1792;)Ljava/util/Map; method_27877 func_239416_a_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27880 func_239419_a_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27882 func_239421_b_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1800;)Lnet/minecraft/class_1800; method_27881 registerGlobalProperty + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27883 func_239422_c_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27885 func_239424_e_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27884 func_239423_d_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27886 func_239425_f_ + f Ljava/util/Map; field_24443 GLOBAL_PROPERTY_MAP + f Lnet/minecraft/class_1800; field_24446 field_239413_d_ + f Lnet/minecraft/class_2960; field_24444 DAMAGED + f Lnet/minecraft/class_1800; field_24447 field_239414_e_ + f Ljava/util/Map; field_24448 ITEM_PROPERTY_MAP + f Lnet/minecraft/class_2960; field_24445 DAMAGE +c net/minecraft/class_5272$class_5171 net/minecraft/item/ItemModelsProperties$Angle + m (JD)V method_27190 func_239449_a_ + m (Lnet/minecraft/class_5272$class_5171;J)Z method_27318 func_239451_a_ + m (Lnet/minecraft/class_5272$class_5171;)D method_27317 func_239450_a_ + m (Lnet/minecraft/class_5272$class_5171;JD)V method_27189 func_239452_a_ + m (J)Z method_27316 func_239448_a_ + f D field_23981 field_239446_b_ + f D field_23980 field_239445_a_ + f J field_23982 field_239447_c_ +c net/minecraft/class_5272$1 net/minecraft/item/ItemModelsProperties$1 + m (Lnet/minecraft/class_1937;D)D method_7736 func_239438_a_ + f D field_7910 field_239436_b_ + f J field_7913 field_239437_c_ + f D field_7911 field_239435_a_ +c net/minecraft/class_5272$2 net/minecraft/item/ItemModelsProperties$2 + m (Lnet/minecraft/class_638;)Lnet/minecraft/class_2338; method_27899 func_239444_a_ + m (Lnet/minecraft/class_1533;)D method_27896 func_239441_a_ + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2338; method_27897 func_239442_a_ + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)D method_27898 func_239443_a_ + f Lnet/minecraft/class_5272$class_5171; field_24449 field_239439_a_ + f Lnet/minecraft/class_5272$class_5171; field_24450 field_239440_b_ +c net/minecraft/class_4724 net/minecraft/client/renderer/texture/SpriteMap + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1059; method_24098 getAtlasTexture + m (Lnet/minecraft/class_4730;)Lnet/minecraft/class_1058; method_24097 getSprite + m ()V close close + f Ljava/util/Map; field_21746 atlasTextures +c net/minecraft/class_1044 net/minecraft/client/renderer/texture/Texture + m ()V method_23208 func_229147_a_ + m (Lnet/minecraft/class_1060;Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;Ljava/util/concurrent/Executor;)V method_18169 loadTexture + m ()V method_22604 func_229149_e_ + m ()V close close + m ()V method_23207 bindTexture + m (Lnet/minecraft/class_3300;)V method_4625 loadTexture + m (ZZ)V method_4527 setBlurMipmapDirect + m ()V method_4528 deleteGlTexture + m ()I method_4624 getGlTextureId + f Z field_5203 mipmap + f Z field_5205 blur + f I field_5204 glTextureId +c net/minecraft/class_1046 net/minecraft/client/renderer/texture/DownloadingTexture + m (Lnet/minecraft/class_1011;)V method_4534 setImage + m (Lnet/minecraft/class_1011;IIII)V method_22794 setAreaTransparent + m (Ljava/io/InputStream;)Lnet/minecraft/class_1011; method_22795 loadTexture + m (Ljava/io/InputStream;)V method_22797 func_229162_b_ + m (Lnet/minecraft/class_1011;)V method_22802 func_229166_e_ + m (Lnet/minecraft/class_3300;)V method_22799 func_229164_c_ + m (Lnet/minecraft/class_1011;IIII)V method_22796 setAreaOpaque + m (Lnet/minecraft/class_1011;)V method_22800 func_229165_d_ + m ()V method_22801 func_229157_a_ + m (Lnet/minecraft/class_1011;)V method_4531 upload + m (Lnet/minecraft/class_1011;)Lnet/minecraft/class_1011; method_22798 processLegacySkin + f Ljava/io/File; field_5210 cacheFile + f Z field_20842 legacySkin + f Z field_5215 textureUploaded + f Lorg/apache/logging/log4j/Logger; field_5212 LOGGER + f Ljava/lang/Runnable; field_20843 processTask + f Ljava/lang/String; field_5214 imageUrl + f Ljava/util/concurrent/CompletableFuture; field_20844 future +c net/minecraft/class_1043 net/minecraft/client/renderer/texture/DynamicTexture + m ()V method_22793 func_229153_f_ + m ()Lnet/minecraft/class_1011; method_4525 getTextureData + m ()V method_4524 updateDynamicTexture + m (Lnet/minecraft/class_1011;)V method_4526 setTextureData + f Lnet/minecraft/class_1011; field_5200 dynamicTextureData + f Lorg/apache/logging/log4j/Logger; field_25794 field_243504_d +c net/minecraft/class_1047 net/minecraft/client/renderer/texture/MissingTextureSprite + m (Lnet/minecraft/class_1059;IIIII)Lnet/minecraft/class_1047; method_4541 create + m ()Lnet/minecraft/class_1043; method_4540 getDynamicTexture + m ()Lnet/minecraft/class_1011; method_4538 func_217791_r + m ()Lnet/minecraft/class_1058$class_4727; method_24104 getSpriteInfo + m ()Lnet/minecraft/class_2960; method_4539 getLocation + f Lnet/minecraft/class_1058$class_4727; field_21748 spriteInfo + f Lnet/minecraft/class_1043; field_5220 dynamicTexture + f Lnet/minecraft/class_2960; field_5219 LOCATION + f Lnet/minecraft/class_3528; field_5221 IMAGE +c net/minecraft/class_4725 net/minecraft/client/renderer/texture/MipmapGenerator + m (Lnet/minecraft/class_1011;I)[Lnet/minecraft/class_1011; method_24102 generateMipmaps + m (I)F method_24099 getPow22 + m ([F)V method_24103 func_229174_a_ + m (IIIIZ)I method_24101 alphaBlend + m (IIIII)I method_24100 gammaBlend + f [F field_21747 POWS22 +c net/minecraft/class_4005 net/minecraft/client/renderer/texture/PreloadedTexture + m (Ljava/lang/Runnable;)V method_22807 func_229204_a_ + m (Lnet/minecraft/class_1049$class_4006;)Ljava/lang/Void; method_18149 func_215247_a + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;)Lnet/minecraft/class_1049$class_4006; method_18151 func_215249_a + m ()Ljava/util/concurrent/CompletableFuture; method_18148 getCompletableFuture + m (Lnet/minecraft/class_3300;)Lnet/minecraft/class_1049$class_4006; method_18152 func_215251_c + m (Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V method_22809 func_229206_a_ + m (Ljava/util/concurrent/Executor;)Ljava/util/concurrent/Executor; method_22808 getExecutor + m (Lnet/minecraft/class_1060;)V method_18150 func_215250_a + f Ljava/util/concurrent/CompletableFuture; field_17894 textureDataFuture +c net/minecraft/class_4608 net/minecraft/client/renderer/texture/OverlayTexture + m (Z)I method_23212 getV + m (FZ)I method_23624 getPackedUV + m ()V close close + m (II)I method_23625 getPackedUV + m ()V method_23213 teardownOverlayColor + m (F)I method_23210 getU + m ()V method_23209 setupOverlayColor + f I field_21444 NO_OVERLAY + f Lnet/minecraft/class_1043; field_21013 texture +c net/minecraft/class_1055 net/minecraft/client/renderer/texture/Stitcher + m (Lnet/minecraft/class_1055$class_1056;)Z method_4550 allocateSlot + m (Lnet/minecraft/class_1055$class_1056;)Z method_4552 expandAndAllocateSlot + m (Lnet/minecraft/class_1055$class_4726;)V method_4549 getStitchSlots + m ()I method_4555 getCurrentHeight + m ()I method_4554 getCurrentWidth + m ()V method_4557 doStitch + m (II)I method_4556 access$000 + m (II)I method_4551 getMipmapDimension + m (Lnet/minecraft/class_1055$class_4726;Lnet/minecraft/class_1055$class_1057;)V method_18336 func_229210_a_ + m (Lnet/minecraft/class_1055$class_1056;)Lnet/minecraft/class_1058$class_4727; method_21686 func_229212_c_ + m (Lnet/minecraft/class_1058$class_4727;)V method_4553 addSprite + m (Lnet/minecraft/class_1055$class_1056;)Ljava/lang/Integer; method_18339 func_217793_e + m (Lnet/minecraft/class_1055$class_1056;)Ljava/lang/Integer; method_18338 func_217795_d + m (Lnet/minecraft/class_1055$class_1056;)Lnet/minecraft/class_2960; method_18337 func_217794_c + f I field_5240 maxWidth + f I field_5242 currentWidth + f I field_5241 currentHeight + f Ljava/util/Set; field_5237 setStitchHolders + f Ljava/util/Comparator; field_18030 COMPARATOR_HOLDER + f I field_5238 maxHeight + f Ljava/util/List; field_5239 stitchSlots + f I field_5243 mipmapLevelStitcher +c net/minecraft/class_1055$class_1057 net/minecraft/client/renderer/texture/Stitcher$Slot + m (Ljava/util/function/Consumer;)V method_4568 getAllStitchSlots + m (Lnet/minecraft/class_1055$class_1056;)Z method_4566 addSlot + m ()Ljava/lang/String; toString toString + m ()Lnet/minecraft/class_1055$class_1056; method_4565 getStitchHolder + m ()I method_4567 getOriginY + m ()I method_4569 getOriginX + f Ljava/util/List; field_5255 subSlots + f I field_5250 height + f I field_5251 width + f I field_5252 originY + f I field_5253 originX + f Lnet/minecraft/class_1055$class_1056; field_5254 holder +c net/minecraft/class_1055$class_1056 net/minecraft/client/renderer/texture/Stitcher$Holder + m ()Ljava/lang/String; toString toString + f I field_5247 height + f I field_5248 width + f Lnet/minecraft/class_1058$class_4727; field_5249 spriteInfo +c net/minecraft/class_1055$class_4726 net/minecraft/client/renderer/texture/Stitcher$ISpriteLoader + m (Lnet/minecraft/class_1058$class_4727;IIII)V load load +c net/minecraft/class_1049 net/minecraft/client/renderer/texture/SimpleTexture + m (Lnet/minecraft/class_1011;ZZ)V method_22810 loadImage + m (Lnet/minecraft/class_1011;ZZ)V method_22811 func_229208_b_ + m (Lnet/minecraft/class_3300;)Lnet/minecraft/class_1049$class_4006; method_18153 getTextureData + m ()Lorg/apache/logging/log4j/Logger; method_18154 func_215245_f + f Lorg/apache/logging/log4j/Logger; field_5225 LOGGER + f Lnet/minecraft/class_2960; field_5224 textureLocation +c net/minecraft/class_1049$class_4006 net/minecraft/client/renderer/texture/SimpleTexture$TextureData + m ()V method_18158 checkException + m ()Lnet/minecraft/class_1084; method_18155 getMetadata + m ()Lnet/minecraft/class_1011; method_18157 getNativeImage + m ()V close close + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;)Lnet/minecraft/class_1049$class_4006; method_18156 getTextureData + f Lnet/minecraft/class_1084; field_17895 metadata + f Lnet/minecraft/class_1011; field_17896 nativeImage + f Ljava/io/IOException; field_17897 exception +c net/minecraft/class_1059 net/minecraft/client/renderer/texture/AtlasTexture + m (Lnet/minecraft/class_1058$class_4727;)Ljava/lang/String; method_21688 func_229216_a_ + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_1058$class_4727;IIIII)Lnet/minecraft/class_1058; method_4604 loadSprite + m (Lnet/minecraft/class_1059$class_4007;)V method_24198 setBlurMipmap + m (Lnet/minecraft/class_1059$class_4007;)V method_18159 upload + m ()Lnet/minecraft/class_2960; method_24106 getTextureLocation + m (Lnet/minecraft/class_3300;Ljava/util/Set;)Ljava/util/Collection; method_18164 makeSprites + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_1058$class_4727;IIIIILjava/util/concurrent/ConcurrentLinkedQueue;)V method_18162 func_229219_a_ + m (Lnet/minecraft/class_2960;)V method_18165 func_229222_c_ + m (ILjava/util/concurrent/ConcurrentLinkedQueue;Ljava/util/List;Lnet/minecraft/class_3300;Lnet/minecraft/class_1058$class_4727;IIII)V method_24105 func_229215_a_ + m ()V method_4612 updateAnimations + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_3300;Ljava/util/concurrent/ConcurrentLinkedQueue;)V method_18160 func_224738_a + m ()V method_4601 clear + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_1055;I)Ljava/util/List; method_18161 getStitchedSprites + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1058; method_4608 getSprite + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_4603 getSpritePath + m (Lnet/minecraft/class_3300;Ljava/util/stream/Stream;Lnet/minecraft/class_3695;I)Lnet/minecraft/class_1059$class_4007; method_18163 stitch + f Lnet/minecraft/class_2960; field_17898 LOCATION_PARTICLES_TEXTURE + f Lnet/minecraft/class_2960; field_5275 LOCATION_BLOCKS_TEXTURE + f Ljava/util/List; field_5276 listAnimatedSprites + f Ljava/util/Map; field_5280 mapUploadedSprites + f Lnet/minecraft/class_2960; field_21749 textureLocation + f Lorg/apache/logging/log4j/Logger; field_5278 LOGGER + f I field_17899 maximumTextureSize + f Ljava/util/Set; field_5277 sprites +c net/minecraft/class_1059$class_4007 net/minecraft/client/renderer/texture/AtlasTexture$SheetData + f I field_17902 height + f I field_21795 mipmapLevel + f Ljava/util/List; field_17903 sprites + f Ljava/util/Set; field_17900 spriteLocations + f I field_17901 width +c net/minecraft/class_1054 net/minecraft/client/renderer/StitcherException + m ()Ljava/util/Collection; method_21687 getSpriteInfos + f Ljava/util/Collection; field_20311 spriteInfos +c net/minecraft/class_1060 net/minecraft/client/renderer/texture/TextureManager + m (Ljava/lang/Runnable;)V method_22815 func_229268_c_ + m (Lnet/minecraft/class_2960;)V method_4618 bindTextureRaw + m (Ljava/lang/Runnable;)V method_22814 func_229266_b_ + m (Lnet/minecraft/class_2960;)V method_22816 func_229270_e_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1044;)Lnet/minecraft/class_1044; method_24303 func_230183_b_ + m (Lnet/minecraft/class_2960;)V method_22813 bindTexture + m (Ljava/lang/String;Lnet/minecraft/class_1043;)Lnet/minecraft/class_2960; method_4617 getDynamicTextureLocation + m (Lnet/minecraft/class_1044;)Ljava/lang/String; method_4621 func_230181_a_ + m (Lnet/minecraft/class_2960;)V method_4615 deleteTexture + m ()V close close + m (Lnet/minecraft/class_2960;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_18168 loadAsync + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1044;)V method_30299 func_243505_b + m (Lnet/minecraft/class_3300;Ljava/util/concurrent/Executor;Ljava/lang/Void;)V method_18167 func_229265_a_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1044;)V method_4616 loadTexture + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1044; method_4619 getTexture + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4005;)V method_18166 func_229264_a_ + m (Ljava/lang/Runnable;)V method_22812 execute + f Ljava/util/Map; field_5283 mapTextureCounters + f Ljava/util/Map; field_5286 mapTextureObjects + f Lorg/apache/logging/log4j/Logger; field_5288 LOGGER + f Lnet/minecraft/class_3300; field_5287 resourceManager + f Ljava/util/Set; field_5284 listTickables + f Lnet/minecraft/class_2960; field_5285 RESOURCE_LOCATION_EMPTY +c net/minecraft/class_1058 net/minecraft/client/renderer/texture/TextureAtlasSprite + m (D)F method_4580 getInterpolatedU + m (Lnet/minecraft/class_1058;)I method_24110 func_229232_a_ + m (Lnet/minecraft/class_1058;)[I method_24117 func_229239_e_ + m ()Ljava/lang/String; method_24120 func_229243_s_ + m ()V close close + m ()Ljava/lang/String; toString toString + m ()V method_4584 uploadMipmaps + m ()Z method_4599 hasAnimationMetadata + m (I)V method_4573 uploadFrames + m ()F method_23841 getAtlasSize + m ()Ljava/lang/String; method_24114 func_229236_c_ + m ()I method_4595 getHeight + m (Lnet/minecraft/class_1058;)Lnet/minecraft/class_1079; method_24115 func_229237_c_ + m ()F method_4575 getMaxV + m (Lnet/minecraft/class_1011;)Ljava/lang/String; method_24107 func_229229_a_ + m ()F method_4577 getMaxU + m ()Lnet/minecraft/class_2960; method_4598 getName + m (Lnet/minecraft/class_1058;)I method_24113 func_229235_b_ + m ()F method_23842 getUvShrinkRatio + m ()I method_4592 getFrameCount + m (D)F method_4570 getInterpolatedV + m ()Lnet/minecraft/class_1059; method_24119 getAtlasTexture + m (Lnet/minecraft/class_1058;)[I method_24118 func_229240_f_ + m (Lnet/minecraft/class_1058;II[Lnet/minecraft/class_1011;)V method_24111 func_229233_a_ + m (Lnet/minecraft/class_4588;)Lnet/minecraft/class_4588; method_24108 wrapBuffer + m ()Ljava/lang/String; method_24112 func_229234_b_ + m ()V method_4597 updateAnimation + m (III)Z method_4583 isPixelTransparent + m (Lnet/minecraft/class_1058$class_4728;)V method_24109 func_229231_a_ + m ()F method_4594 getMinU + m ()I method_4578 getWidth + m (Lnet/minecraft/class_1058;)Lnet/minecraft/class_1058$class_4727; method_24116 func_229238_d_ + m ()F method_4593 getMinV + m (II[Lnet/minecraft/class_1011;)V method_4579 uploadFrames + f Lnet/minecraft/class_1058$class_4727; field_21751 spriteInfo + f Lnet/minecraft/class_1079; field_5271 animationMetadata + f [Lnet/minecraft/class_1011; field_5262 frames + f F field_5270 minU + f I field_5258 x + f [I field_5264 framesY + f Lnet/minecraft/class_1059; field_21750 atlasTexture + f F field_5268 minV + f I field_5273 frameCounter + f I field_5272 tickCounter + f I field_5256 y + f [I field_5265 framesX + f F field_5269 maxU + f Lnet/minecraft/class_1058$class_4728; field_21752 interpolationData + f F field_5267 maxV +c net/minecraft/class_1058$1 net/minecraft/client/renderer/texture/TextureAtlasSprite$1 +c net/minecraft/class_1058$class_4727 net/minecraft/client/renderer/texture/TextureAtlasSprite$Info + m ()I method_24125 getSpriteHeight + m (Lnet/minecraft/class_1058$class_4727;)Lnet/minecraft/class_2960; method_24127 func_229254_d_ + m (Lnet/minecraft/class_1058$class_4727;)Lnet/minecraft/class_1079; method_24122 func_229249_a_ + m ()I method_24123 getSpriteWidth + m (Lnet/minecraft/class_1058$class_4727;)I method_24124 func_229251_b_ + m ()Lnet/minecraft/class_2960; method_24121 getSpriteLocation + m (Lnet/minecraft/class_1058$class_4727;)I method_24126 func_229253_c_ + f I field_21754 spriteWidth + f I field_21755 spriteHeight + f Lnet/minecraft/class_2960; field_21753 spriteLocation + f Lnet/minecraft/class_1079; field_21756 spriteAnimationMetadata +c net/minecraft/class_1058$class_4728 net/minecraft/client/renderer/texture/TextureAtlasSprite$InterpolationData + m ()V method_24128 uploadInterpolated + m (IIII)I method_24130 getPixelColor + m ()V close close + m (DII)I method_24129 mix + m (Lnet/minecraft/class_1058$class_4728;)V method_24131 func_229260_a_ + f [Lnet/minecraft/class_1011; field_21758 images + f Lnet/minecraft/class_1058; field_21757 field_229255_a_ +c net/minecraft/class_1061 net/minecraft/client/renderer/texture/ITickable + m ()V method_4622 tick +c net/minecraft/class_1066 net/minecraft/client/resources/DownloadingPackFinder + m ()Lnet/minecraft/class_3268; method_4633 getVanillaPack + m (Ljava/io/File;Ljava/lang/Void;Ljava/lang/Throwable;)V method_19436 func_217815_a_ + m (Ljava/io/File;)V method_19437 deleteQuiet + m (Ljava/lang/String;Ljava/io/File;)Z method_4641 checkHash + m (Ljava/lang/String;Ljava/io/File;Ljava/lang/Object;)Ljava/util/concurrent/CompletionStage; method_4634 func_217812_a_ + m (Lnet/minecraft/class_3288$class_5351;Ljava/util/function/Supplier;)Lnet/minecraft/class_3288; method_25453 func_239454_a_ + m (Ljava/io/File;)Lnet/minecraft/class_3259; method_25455 func_239459_b_ + m (Ljava/lang/String;Ljava/lang/String;)Ljava/util/concurrent/CompletableFuture; method_4640 downloadResourcePack + m (Ljava/io/File;Lnet/minecraft/class_5352;)Ljava/util/concurrent/CompletableFuture; method_4638 setServerPack + m ()V method_4643 clearDownloads + m (Ljava/io/File;)Lnet/minecraft/class_3262; method_25457 func_239462_e_ + m (Ljava/io/File;)Lnet/minecraft/class_3262; method_4637 func_239463_f_ + m ()V method_4642 clearResourcePack + m (Lnet/minecraft/class_3288$class_5351;)Lnet/minecraft/class_3288; method_25454 func_239453_a_ + m ()Lnet/minecraft/class_3262; method_4635 func_195739_f + m (Lnet/minecraft/class_310;Lnet/minecraft/class_435;)V method_4639 func_239455_a_ + m ()Ljava/util/Map; method_4636 getPackDownloadRequestProperties + m (Ljava/io/File;)Lnet/minecraft/class_3262; method_25456 func_239461_d_ + m (Ljava/io/File;)Lnet/minecraft/class_3262; method_16048 func_239460_c_ + f Ljava/util/concurrent/locks/ReentrantLock; field_5297 lockDownload + f Lorg/apache/logging/log4j/Logger; field_5298 LOGGER + f Lnet/minecraft/class_3288; field_5295 serverPack + f Ljava/util/concurrent/CompletableFuture; field_5294 currentDownload + f Ljava/util/regex/Pattern; field_5296 PATTERN_SHA1 + f Ljava/io/File; field_5292 serverPackDir + f Lnet/minecraft/class_1064; field_16263 resourceIndex + f Lnet/minecraft/class_3268; field_5293 vanillaPack +c net/minecraft/class_1066$2 net/minecraft/client/resources/DownloadingPackFinder$2 +c net/minecraft/class_1066$1 net/minecraft/client/resources/DownloadingPackFinder$1 +c net/minecraft/class_1064 net/minecraft/client/resources/ResourceIndex + m (Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Predicate;Lnet/minecraft/class_2960;)Z method_23843 func_229273_a_ + m (Ljava/lang/String;Ljava/lang/String;ILjava/util/function/Predicate;)Ljava/util/Collection; method_4632 getFiles + m (Lnet/minecraft/class_2960;)Ljava/io/File; method_4630 getFile + m (Ljava/lang/String;)Ljava/io/File; method_4631 getFile + f Lorg/apache/logging/log4j/Logger; field_5290 LOGGER + f Ljava/util/Map; field_21556 namespaceFiles + f Ljava/util/Map; field_5289 rootFiles +c net/minecraft/class_1065 net/minecraft/client/resources/VirtualAssetsPack + f Lnet/minecraft/class_1064; field_5291 field_195785_b +c net/minecraft/class_1067 net/minecraft/client/resources/FolderResourceIndex + m (Ljava/lang/String;Ljava/nio/file/Path;Ljava/nio/file/Path;)Lnet/minecraft/class_2960; method_23844 func_229274_a_ + m (Ljava/nio/file/Path;)Z method_4646 func_211687_a + m (Ljava/nio/file/Path;)Z method_4644 func_211686_b + m (Ljava/util/function/Predicate;Ljava/nio/file/Path;)Z method_23845 func_229275_a_ + f Ljava/io/File; field_5299 baseDir +c net/minecraft/class_1068 net/minecraft/client/resources/DefaultPlayerSkin + m (Ljava/util/UUID;)Z method_4650 isSlimSkin + m (Ljava/util/UUID;)Ljava/lang/String; method_4647 getSkinType + m ()Lnet/minecraft/class_2960; method_4649 getDefaultSkinLegacy + m (Ljava/util/UUID;)Lnet/minecraft/class_2960; method_4648 getDefaultSkin + f Lnet/minecraft/class_2960; field_5300 TEXTURE_ALEX + f Lnet/minecraft/class_2960; field_5301 TEXTURE_STEVE +c net/minecraft/class_1069 net/minecraft/client/resources/GrassColorReloadListener + m ([ILnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18661 apply + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)[I method_18662 prepare + f Lnet/minecraft/class_2960; field_5302 GRASS_LOCATION +c net/minecraft/class_1070 net/minecraft/client/resources/FoliageColorReloadListener + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)[I method_18660 prepare + m ([ILnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18659 apply + f Lnet/minecraft/class_2960; field_5303 FOLIAGE_LOCATION +c net/minecraft/class_3685 net/minecraft/client/resources/ColorMapLoader + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;)[I method_16049 loadColors +c net/minecraft/class_1073 net/minecraft/client/resources/LegacyResourcePackWrapper + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_4660 getMetaFileLocation + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_4658 toLegacyLocation + m ()Lcom/google/common/collect/ImmutableMap; method_4659 func_239470_b_ + m (Lcom/google/common/collect/ImmutableMap$Builder;Ljava/lang/String;Ljava/lang/String;)V method_29712 func_239468_a_ + f Ljava/util/Map; field_5318 field_211855_c + f Lnet/minecraft/class_3262; field_5316 locationMap + f Ljava/util/Map; field_5317 NEW_TO_LEGACY_MAP +c net/minecraft/class_4729 net/minecraft/client/resources/LegacyResourcePackWrapperV4 + m (Lnet/minecraft/class_1011;Lnet/minecraft/class_1011;IIIIIIIZZ)V method_24132 func_229284_a_ + m (Ljava/io/InputStream;)Ljava/io/InputStream; method_24199 func_229285_a_ + m (Ljava/util/HashMap;)V method_24136 func_229288_a_ + m (Ljava/io/InputStream;)Ljava/io/InputStream; method_24133 func_229289_b_ + m (Ljava/lang/String;)Ljava/lang/String; method_24135 func_229287_a_ + m (Ljava/io/InputStream;)Ljava/io/InputStream; method_24137 func_229290_c_ + m (Ljava/lang/String;)Ljava/lang/String; method_24139 func_229291_c_ + m (Ljava/io/InputStream;Ljava/io/InputStream;IIIII)Ljava/io/InputStream; method_24134 func_229286_a_ + m (Ljava/io/InputStream;)Ljava/io/InputStream; method_24138 func_229292_d_ + f Ljava/util/Set; field_21765 BANNERS + f Ljava/util/Map; field_21762 field_239475_d_ + f Lnet/minecraft/class_3262; field_21766 field_239479_h_ + f Lnet/minecraft/class_2960; field_21761 OLD_IRON_GOLEM_LOCATION + f Lnet/minecraft/class_2960; field_21759 SHIELD_BASE + f Ljava/util/List; field_21763 PATTERNS + f Lnet/minecraft/class_2960; field_21760 BANNER_BASE + f Ljava/util/Set; field_21764 SHIELDS +c net/minecraft/class_4074 net/minecraft/client/renderer/texture/PotionSpriteUploader + m (Lnet/minecraft/class_1291;)Lnet/minecraft/class_1058; method_18663 getSprite +c net/minecraft/class_1071 net/minecraft/client/resources/SkinManager + m (Lcom/mojang/authlib/GameProfile;ZLnet/minecraft/class_1071$class_1072;)V method_4653 func_229293_a_ + m (Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/class_1071$class_1072;)Lnet/minecraft/class_2960; method_4651 loadSkin + m (Lcom/mojang/authlib/GameProfile;)Ljava/util/Map; method_4654 loadSkinFromCache + m (Lcom/mojang/authlib/GameProfile;Lnet/minecraft/class_1071$class_1072;Z)V method_4652 loadProfileTextures + m (Lnet/minecraft/class_1071$class_1072;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/class_2960;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V method_22817 func_229294_a_ + m (Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;)Lnet/minecraft/class_2960; method_4656 loadSkin + m (Ljava/util/Map;Lnet/minecraft/class_1071$class_1072;)V method_22818 func_229295_a_ + m (Ljava/util/Map;Lnet/minecraft/class_1071$class_1072;)V method_4655 func_229297_b_ + m (Ljava/util/Map;Lnet/minecraft/class_1071$class_1072;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;)V method_22819 func_229296_a_ + f Lcom/google/common/cache/LoadingCache; field_5306 skinCacheLoader + f Lnet/minecraft/class_1060; field_5304 textureManager + f Ljava/io/File; field_5305 skinCacheDir + f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_5308 sessionService +c net/minecraft/class_1071$class_1072 net/minecraft/client/resources/SkinManager$ISkinAvailableCallback + m (Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/class_2960;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V onSkinTextureAvailable onSkinTextureAvailable +c net/minecraft/class_1071$1 net/minecraft/client/resources/SkinManager$1 + m (Ljava/lang/Object;)Ljava/lang/Object; load load + m (Ljava/lang/String;)Ljava/util/Map; method_30300 load + f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_25795 field_243506_a + f Lnet/minecraft/class_1071; field_25796 field_152787_a +c net/minecraft/class_4044 net/minecraft/client/renderer/texture/PaintingSpriteUploader + m (Lnet/minecraft/class_1535;)Lnet/minecraft/class_1058; method_18345 getSpriteForPainting + m ()Lnet/minecraft/class_1058; method_18342 getBackSprite + f Lnet/minecraft/class_2960; field_18032 LOCATION_BACK_SPRITE +c net/minecraft/class_4075 net/minecraft/client/renderer/texture/SpriteUploader + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_24140 resolveLocation + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1058; method_18667 getSprite + m ()V close close + m (Lnet/minecraft/class_1059$class_4007;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18666 apply + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Lnet/minecraft/class_1059$class_4007; method_18668 prepare + m ()Ljava/util/stream/Stream; method_18665 getResourceLocations + f Lnet/minecraft/class_1059; field_18230 textureAtlas + f Ljava/lang/String; field_21767 prefix +c net/minecraft/class_4008 net/minecraft/client/util/Splashes + m (Ljava/lang/String;)Z method_18664 func_215277_a + m ()Ljava/lang/String; method_18174 getSplashText + m (Ljava/util/List;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18175 apply + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Ljava/util/List; method_18176 prepare + f Lnet/minecraft/class_320; field_18934 gameSession + f Ljava/util/List; field_17906 possibleSplashes + f Lnet/minecraft/class_2960; field_17904 SPLASHES_LOCATION + f Ljava/util/Random; field_17905 RANDOM +c net/minecraft/class_5491 net/minecraft/client/util/BidiReorderer + m (Lnet/minecraft/class_5348;Z)Lnet/minecraft/class_5481; method_30922 func_243508_a + m (Ljava/lang/String;)Ljava/lang/String; method_30921 func_243507_a +c net/minecraft/class_1078 net/minecraft/client/resources/ClientLanguageMap + m (Ljava/util/List;Ljava/util/Map;)V method_4676 func_239498_a_ + m (Lnet/minecraft/class_3300;Ljava/util/List;)Lnet/minecraft/class_1078; method_4675 func_239497_a_ + f Z field_25289 field_239496_d_ + f Lorg/apache/logging/log4j/Logger; field_5332 field_239493_a_ + f Ljava/util/Map; field_5330 field_239495_c_ +c net/minecraft/class_1077 net/minecraft/client/resources/Language + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_1077;)I method_4673 compareTo + m ()Ljava/lang/String; getName getName + m ()Ljava/lang/String; toString toString + m (Ljava/lang/Object;)I compareTo compareTo + m ()Ljava/lang/String; getRegion getRegion + m ()I hashCode hashCode + m ()Ljava/lang/String; getCode getCode + m ()Z method_4672 isBidirectional + f Ljava/lang/String; field_5327 name + f Z field_5328 bidirectional + f Ljava/lang/String; field_5326 languageCode + f Ljava/lang/String; field_5329 region +c net/minecraft/class_1074 net/minecraft/client/resources/I18n + m (Ljava/lang/String;)Z method_4663 hasKey + m (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; method_4662 format + m (Lnet/minecraft/class_2477;)V method_29391 func_239502_a_ + f Lnet/minecraft/class_2477; field_25290 field_239501_a_ +c net/minecraft/class_1076 net/minecraft/client/resources/LanguageManager + m ()Lnet/minecraft/class_1077; method_4669 getCurrentLanguage + m (Ljava/util/stream/Stream;)Ljava/util/Map; method_29393 func_239506_a_ + m ()Ljava/util/SortedSet; method_4665 getLanguages + m (Lnet/minecraft/class_1077;)V method_4667 setCurrentLanguage + m (Ljava/util/Map;Lnet/minecraft/class_3262;)V method_29392 func_239505_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_1077; method_4668 getLanguage + f Lnet/minecraft/class_1077; field_25292 field_239504_e_ + f Ljava/util/Map; field_5324 languageMap + f Lorg/apache/logging/log4j/Logger; field_5325 LOGGER + f Ljava/lang/String; field_5323 currentLanguage + f Lnet/minecraft/class_1077; field_25291 field_239503_b_ +c net/minecraft/class_1079 net/minecraft/client/resources/data/AnimationMetadataSection + m (II)Z method_24142 isMultipleOf + m (I)I method_4686 getFrameHeight + m (I)Lnet/minecraft/class_1080; method_4681 getAnimationFrame + m ()Ljava/util/Set; method_4688 getFrameIndexSet + m ()I method_4682 getFrameCount + m (I)I method_4680 getFrameIndex + m ()I method_4684 getFrameTime + m (II)Lcom/mojang/datafixers/util/Pair; method_24141 getSpriteSize + m ()Z method_4685 isInterpolate + m (I)I method_4687 getFrameWidth + m (II)Lcom/mojang/datafixers/util/Pair; method_24143 getFrameSize + m (I)I method_4683 getFrameTimeSingle + f Lnet/minecraft/class_1079; field_21768 EMPTY + f I field_5336 frameHeight + f Ljava/util/List; field_5339 animationFrames + f I field_5334 frameTime + f Z field_5335 interpolate + f Lnet/minecraft/class_1081; field_5337 SERIALIZER + f I field_5338 frameWidth +c net/minecraft/class_1079$1 net/minecraft/client/resources/data/AnimationMetadataSection$1 +c net/minecraft/class_1080 net/minecraft/client/resources/data/AnimationFrame + m ()Z method_4689 hasNoTime + m ()I method_4691 getFrameTime + m ()I method_4690 getFrameIndex + f I field_5340 frameTime + f I field_5341 frameIndex +c net/minecraft/class_3888 net/minecraft/client/resources/data/VillagerMetadataSection + m ()Lnet/minecraft/class_3888$class_3889; method_17167 func_217826_a + f Lnet/minecraft/class_3888$class_3889; field_17159 field_217828_b + f Lnet/minecraft/class_3890; field_17158 field_217827_a +c net/minecraft/class_3888$class_3889 net/minecraft/client/resources/data/VillagerMetadataSection$HatType + m ()[Lnet/minecraft/class_3888$class_3889; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3888$class_3889; valueOf valueOf + m ()Ljava/lang/String; method_17168 func_217823_a + m (Lnet/minecraft/class_3888$class_3889;)Lnet/minecraft/class_3888$class_3889; method_17169 func_217822_a + m (Ljava/lang/String;)Lnet/minecraft/class_3888$class_3889; method_17170 func_217821_a + f Lnet/minecraft/class_3888$class_3889; field_17160 NONE + f Ljava/lang/String; field_17164 field_217825_e + f [Lnet/minecraft/class_3888$class_3889; field_17165 $VALUES + f Lnet/minecraft/class_3888$class_3889; field_17161 PARTIAL + f Lnet/minecraft/class_3888$class_3889; field_17162 FULL + f Ljava/util/Map; field_17163 field_217824_d +c net/minecraft/class_1081 net/minecraft/client/resources/data/AnimationMetadataSectionSerializer + m (ILcom/google/gson/JsonElement;)Lnet/minecraft/class_1080; method_4693 parseAnimationFrame + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1079; method_4692 deserialize +c net/minecraft/class_3890 net/minecraft/client/renderer/texture/TextureAtlasSpriteStitcher + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3888; method_17171 deserialize +c net/minecraft/class_1082 net/minecraft/client/resources/data/LanguageMetadataSection + m ()Ljava/util/Collection; method_4694 getLanguages + f Lnet/minecraft/class_1083; field_5343 field_195818_a + f Ljava/util/Collection; field_5342 languages +c net/minecraft/class_1083 net/minecraft/client/resources/data/LanguageMetadataSectionSerializer + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1082; method_4695 deserialize +c net/minecraft/class_1084 net/minecraft/client/resources/data/TextureMetadataSection + m ()Z method_4696 getTextureBlur + m ()Z method_4697 getTextureClamp + f Z field_5346 textureBlur + f Z field_5345 textureClamp + f Lnet/minecraft/class_1085; field_5344 SERIALIZER +c net/minecraft/class_1085 net/minecraft/client/resources/data/TextureMetadataSectionSerializer + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1084; method_4698 deserialize +c net/minecraft/class_1086 net/minecraft/client/renderer/model/ModelRotation + m (II)Lnet/minecraft/class_1086; method_4699 getModelRotation + m (Lnet/minecraft/class_1086;)Lnet/minecraft/class_1086; method_4700 func_229305_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_1086; valueOf valueOf + m ()[Lnet/minecraft/class_1086; values values + m (II)I method_4703 combineXY + m (Lnet/minecraft/class_1086;)Ljava/lang/Integer; method_4701 func_229306_b_ + f I field_5364 combinedXY + f Lnet/minecraft/class_1086; field_5348 X180_Y90 + f Lnet/minecraft/class_1086; field_5356 X180_Y180 + f Lnet/minecraft/class_1086; field_5359 X180_Y270 + f Lnet/minecraft/class_1086; field_5354 X90_Y270 + f Lnet/minecraft/class_4990; field_23374 orientation + f Lnet/minecraft/class_1086; field_5358 X180_Y0 + f Lnet/minecraft/class_4590; field_23373 transformation + f Lnet/minecraft/class_1086; field_5352 X270_Y270 + f Lnet/minecraft/class_1086; field_5353 X270_Y0 + f Lnet/minecraft/class_1086; field_5349 X270_Y90 + f Lnet/minecraft/class_1086; field_5361 X270_Y180 + f Lnet/minecraft/class_1086; field_5350 X0_Y0 + f Lnet/minecraft/class_1086; field_5351 X90_Y0 + f Ljava/util/Map; field_5357 MAP_ROTATIONS + f Lnet/minecraft/class_1086; field_5360 X90_Y90 + f Lnet/minecraft/class_1086; field_5367 X90_Y180 + f Lnet/minecraft/class_1086; field_5366 X0_Y90 + f Lnet/minecraft/class_1086; field_5355 X0_Y180 + f Lnet/minecraft/class_1086; field_5347 X0_Y270 + f [Lnet/minecraft/class_1086; field_5365 $VALUES +c net/minecraft/class_1087 net/minecraft/client/renderer/model/IBakedModel + m ()Z method_24304 isSideLit + m ()Z method_4713 isBuiltInRenderer + m ()Lnet/minecraft/class_1058; method_4711 getParticleTexture + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Ljava/util/Random;)Ljava/util/List; method_4707 getQuads + m ()Lnet/minecraft/class_806; method_4710 getOverrides + m ()Z method_4708 isAmbientOcclusion + m ()Z method_4712 isGui3d + m ()Lnet/minecraft/class_809; method_4709 getItemCameraTransforms +c net/minecraft/class_4730 net/minecraft/client/renderer/model/RenderMaterial + m ()I hashCode hashCode + m ()Lnet/minecraft/class_2960; method_24144 getAtlasLocation + m (Lnet/minecraft/class_4597;Ljava/util/function/Function;Z)Lnet/minecraft/class_4588; method_30001 getItemRendererBuffer + m (Ljava/lang/Object;)Z equals equals + m (Ljava/util/function/Function;)Lnet/minecraft/class_1921; method_24146 getRenderType + m (Lnet/minecraft/class_4597;Ljava/util/function/Function;)Lnet/minecraft/class_4588; method_24145 getBuffer + m ()Lnet/minecraft/class_1058; method_24148 getSprite + m ()Lnet/minecraft/class_2960; method_24147 getTextureLocation + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2960; field_21770 textureLocation + f Lnet/minecraft/class_1921; field_21771 renderType + f Lnet/minecraft/class_2960; field_21769 atlasLocation +c net/minecraft/class_1090 net/minecraft/client/renderer/model/BuiltInModel + f Lnet/minecraft/class_806; field_5405 overrides + f Lnet/minecraft/class_1058; field_16594 sprite + f Lnet/minecraft/class_809; field_5404 cameraTransforms + f Z field_21862 isSideLit +c net/minecraft/class_1092 net/minecraft/client/renderer/model/ModelManager + m ()V close close + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)Z method_21611 needsRenderUpdate + m ()Lnet/minecraft/class_773; method_4743 getBlockModelShapes + m (Lnet/minecraft/class_1088;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18179 apply + m (I)V method_24152 setMaxMipmapLevel + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Lnet/minecraft/class_1088; method_18178 prepare + m ()Lnet/minecraft/class_1087; method_4744 getMissingModel + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1059; method_24153 getAtlasTexture + m (Lnet/minecraft/class_1091;)Lnet/minecraft/class_1087; method_4742 getModel + f Lnet/minecraft/class_1060; field_21776 textureManager + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_20278 stateModelIds + f Ljava/util/Map; field_5408 modelRegistry + f I field_21777 maxMipmapLevel + f Lnet/minecraft/class_1087; field_5407 defaultModel + f Lnet/minecraft/class_773; field_5410 modelProvider + f Lnet/minecraft/class_4724; field_21775 atlases + f Lnet/minecraft/class_324; field_20277 blockColors +c net/minecraft/class_1088 net/minecraft/client/renderer/model/ModelBakery + m (Lnet/minecraft/class_1091;)V method_4727 loadTopModel + m (Lnet/minecraft/class_2680;)V method_4716 func_229326_a_ + m ()Ljava/util/Map; method_4734 getTopBakedModels + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2689; method_4736 func_229349_d_ + m (Lcom/mojang/datafixers/util/Pair;)V method_24149 func_229330_a_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_816;Ljava/util/List;)Lnet/minecraft/class_1088$class_4455; method_21599 func_229328_a_ + m (Ljava/util/Map;Lnet/minecraft/class_2960;Lcom/mojang/datafixers/util/Pair;Ljava/util/Map;Lnet/minecraft/class_1091;Lnet/minecraft/class_2680;)V method_21604 func_229341_a_ + m (I)Lnet/minecraft/class_2960; method_22820 func_229323_a_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1100; method_4726 getUnbakedModel + m (Lnet/minecraft/class_793;)V method_4719 func_229347_b_ + m (Lnet/minecraft/class_3298;)Lcom/mojang/datafixers/util/Pair; method_4737 func_229345_a_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_3665;)Lnet/minecraft/class_1087; method_15878 bake + m (Lnet/minecraft/class_2248;Ljava/util/Map;Lnet/minecraft/class_2680;)Z method_4739 func_229325_a_ + m (Ljava/lang/Iterable;)V method_21603 registerModelIds + m (Lnet/minecraft/class_793;)V method_4721 func_229332_a_ + m (Lnet/minecraft/class_2960;)V method_4715 loadBlockstate + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2680;)V method_4717 func_229343_a_ + m (Lnet/minecraft/class_1060;Lnet/minecraft/class_3695;)Lnet/minecraft/class_4724; method_18177 uploadTextures + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_793; method_4718 loadModel + m (Lnet/minecraft/class_2769;Ljava/lang/String;)Ljava/lang/Comparable; method_4724 parseValue + m (Ljava/util/HashSet;)V method_24150 func_229337_a_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_807;Ljava/util/List;)Lnet/minecraft/class_1088$class_4455; method_21598 func_229327_a_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2689;)V method_4723 func_229344_a_ + m ()Lit/unimi/dsi/fastutil/objects/Object2IntMap; method_21605 getStateModelIds + m (Lnet/minecraft/class_1088$class_4455;)Ljava/util/Set; method_21600 func_229334_a_ + m (Ljava/util/Map;Lnet/minecraft/class_816;Ljava/util/List;Lnet/minecraft/class_2680;)V method_4738 func_229339_a_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1100;)V method_4729 putModel + m (Lcom/mojang/datafixers/util/Pair;)Z method_24151 func_229346_b_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_23216 func_229351_f_ + m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_21602 func_229336_a_ + m (Ljava/util/Set;Lnet/minecraft/class_1100;)Ljava/util/stream/Stream; method_4732 func_229342_a_ + m (Lnet/minecraft/class_1088$class_4455;Ljava/util/Set;)V method_21601 func_229335_a_ + m (Ljava/util/Map;Lnet/minecraft/class_2960;Lnet/minecraft/class_2680;)V method_4720 func_229340_a_ + m (Lnet/minecraft/class_1088$class_4455;)Lnet/minecraft/class_1088$class_4455; method_21606 func_229348_b_ + m (Ljava/util/Map;Lnet/minecraft/class_807;Ljava/util/List;Lnet/minecraft/class_816;Lcom/mojang/datafixers/util/Pair;Lnet/minecraft/class_790;Lnet/minecraft/class_2680;)V method_4722 func_229338_a_ + m (Lnet/minecraft/class_2960;)V method_4733 func_229350_e_ + m (ILnet/minecraft/class_2680;)V method_21597 func_229324_a_ + m (Lcom/google/common/collect/ImmutableList;Lnet/minecraft/class_2689;Ljava/util/Map;Ljava/util/List;Lnet/minecraft/class_816;Lcom/mojang/datafixers/util/Pair;Lnet/minecraft/class_790;Lnet/minecraft/class_2960;Lcom/mojang/datafixers/util/Pair;Ljava/lang/String;Lnet/minecraft/class_807;)V method_4731 func_229329_a_ + m (Lnet/minecraft/class_2689;Ljava/lang/String;)Ljava/util/function/Predicate; method_4725 parseVariantKey + m (Lcom/mojang/datafixers/util/Pair;Ljava/util/Map$Entry;)Z method_4730 func_229331_a_ + f Lnet/minecraft/class_2689; field_5395 STATE_CONTAINER_ITEM_FRAME + f Lnet/minecraft/class_4730; field_5381 LOCATION_LAVA_FLOW + f Lnet/minecraft/class_4724; field_21774 spriteMap + f Lnet/minecraft/class_3300; field_5379 resourceManager + f Lnet/minecraft/class_4730; field_5397 LOCATION_FIRE_0 + f Lnet/minecraft/class_4730; field_21557 LOCATION_SHIELD_BASE + f Ljava/util/Map; field_5396 BUILT_IN_MODELS + f Ljava/lang/String; field_5371 MISSING_MODEL_MESH + f Lnet/minecraft/class_4730; field_5388 LOCATION_WATER_OVERLAY + f Lnet/minecraft/class_793; field_5389 MODEL_ENTITY + f Ljava/util/List; field_21772 DESTROY_RENDER_TYPES + f Ljava/util/Map; field_5376 unbakedModels + f Lcom/google/common/base/Splitter; field_5372 EQUALS_SPLITTER + f Ljava/util/Map; field_5394 topUnbakedModels + f Lnet/minecraft/class_801; field_5384 ITEM_MODEL_GENERATOR + f Ljava/util/List; field_20848 DESTROY_STAGES + f Lnet/minecraft/class_790$class_791; field_5399 containerHolder + f Lnet/minecraft/class_4730; field_5370 LOCATION_FIRE_1 + f Ljava/util/Map; field_5383 STATE_CONTAINER_OVERRIDES + f Lnet/minecraft/class_324; field_20272 blockColors + f Lnet/minecraft/class_4730; field_5391 LOCATION_WATER_FLOW + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_20274 stateModelIds + f Lnet/minecraft/class_1091; field_5374 MODEL_MISSING + f Lnet/minecraft/class_4730; field_21558 LOCATION_SHIELD_NO_PATTERN + f Ljava/util/Map; field_17907 sheetData + f Ljava/lang/String; field_21773 MODEL_MISSING_STRING + f Lnet/minecraft/class_793; field_5400 MODEL_GENERATED + f Lnet/minecraft/class_4730; field_20847 LOCATION_BANNER_BASE + f Ljava/util/Set; field_5378 LOCATIONS_BUILTIN_TEXTURES + f Lcom/google/common/base/Splitter; field_5373 SPLITTER_COMMA + f Ljava/util/Map; field_5398 bakedModels + f I field_20273 counterModelId + f Ljava/util/Map; field_5387 topBakedModels + f Lorg/apache/logging/log4j/Logger; field_5380 LOGGER + f Ljava/util/List; field_21020 DESTROY_LOCATIONS + f Ljava/util/Set; field_5390 unbakedModelLoadingQueue +c net/minecraft/class_1088$class_1089 net/minecraft/client/renderer/model/ModelBakery$BlockStateDefinitionException +c net/minecraft/class_1088$class_4455 net/minecraft/client/renderer/model/ModelBakery$ModelListWrapper + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_816;Ljava/util/Collection;)Lnet/minecraft/class_1088$class_4455; method_21607 makeWrapper + m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2680;Lnet/minecraft/class_819;)Z method_21610 func_225338_a + m (Lnet/minecraft/class_2680;Ljava/util/Collection;)Ljava/util/List; method_21609 getColorValues + m (Ljava/lang/Object;)Z equals equals + m ()I hashCode hashCode + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1100;Ljava/util/Collection;)Lnet/minecraft/class_1088$class_4455; method_21608 makeWrapper + f Ljava/util/List; field_20275 models + f Ljava/util/List; field_20276 colorValues +c net/minecraft/class_3665 net/minecraft/client/renderer/model/IModelTransform + m ()Z method_3512 isUvLock + m ()Lnet/minecraft/class_4590; method_3509 getRotation +c net/minecraft/class_1091 net/minecraft/client/renderer/model/ModelResourceLocation + m ()Ljava/lang/String; method_4740 getVariant + m (Ljava/lang/String;)[Ljava/lang/String; method_4741 parsePathString + f Ljava/lang/String; field_5406 variant +c net/minecraft/class_1093 net/minecraft/client/renderer/model/SimpleBakedModel + f Ljava/util/List; field_5411 generalQuads + f Z field_5415 ambientOcclusion + f Lnet/minecraft/class_809; field_5417 cameraTransforms + f Z field_5413 gui3d + f Ljava/util/Map; field_5414 faceQuads + f Lnet/minecraft/class_806; field_5412 itemOverrideList + f Lnet/minecraft/class_1058; field_5416 texture + f Z field_21864 isSideLit +c net/minecraft/class_1093$class_1094 net/minecraft/client/renderer/model/SimpleBakedModel$Builder + m (Lnet/minecraft/class_777;)Lnet/minecraft/class_1093$class_1094; method_4748 addGeneralQuad + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_777;)Lnet/minecraft/class_1093$class_1094; method_4745 addFaceQuad + m ()Lnet/minecraft/class_1087; method_4746 build + m (Lnet/minecraft/class_1058;)Lnet/minecraft/class_1093$class_1094; method_4747 setTexture + f Z field_5421 builderAmbientOcclusion + f Z field_21865 builderGui3d + f Lnet/minecraft/class_1058; field_5424 builderTexture + f Z field_5420 isSideLit + f Lnet/minecraft/class_806; field_5423 builderItemOverrideList + f Ljava/util/Map; field_5422 builderFaceQuads + f Lnet/minecraft/class_809; field_5418 builderCameraTransforms + f Ljava/util/List; field_5419 builderGeneralQuads +c net/minecraft/class_1095 net/minecraft/client/renderer/model/MultipartBakedModel + f Ljava/util/Map; field_5431 bitSetCache + f Ljava/util/List; field_5427 selectors + f Lnet/minecraft/class_809; field_5426 cameraTransforms + f Z field_5430 ambientOcclusion + f Z field_5429 gui3D + f Lnet/minecraft/class_806; field_5428 overrides + f Lnet/minecraft/class_1058; field_5425 particleTexture + f Z field_21863 isSideLit +c net/minecraft/class_1095$class_1096 net/minecraft/client/renderer/model/MultipartBakedModel$Builder + m (Ljava/util/function/Predicate;Lnet/minecraft/class_1087;)V method_4749 putModel + m ()Lnet/minecraft/class_1087; method_4750 build + f Ljava/util/List; field_5432 selectors +c net/minecraft/class_1097 net/minecraft/client/renderer/model/WeightedBakedModel + f I field_5433 totalWeight + f Ljava/util/List; field_5434 models + f Lnet/minecraft/class_1087; field_5435 baseModel +c net/minecraft/class_1097$class_1098 net/minecraft/client/renderer/model/WeightedBakedModel$Builder + m (Lnet/minecraft/class_1087;I)Lnet/minecraft/class_1097$class_1098; method_4752 add + m ()Lnet/minecraft/class_1087; method_4751 build + f Ljava/util/List; field_5436 listItems +c net/minecraft/class_1097$class_1099 net/minecraft/client/renderer/model/WeightedBakedModel$WeightedModel + f Lnet/minecraft/class_1087; field_5437 model +c net/minecraft/class_1100 net/minecraft/client/renderer/model/IUnbakedModel + m (Lnet/minecraft/class_1088;Ljava/util/function/Function;Lnet/minecraft/class_3665;Lnet/minecraft/class_2960;)Lnet/minecraft/class_1087; method_4753 bakeModel + m ()Ljava/util/Collection; method_4755 getDependencies + m (Ljava/util/function/Function;Ljava/util/Set;)Ljava/util/Collection; method_4754 getTextures +c net/minecraft/class_1101 net/minecraft/client/audio/TickableSound + m ()V method_24876 finishPlaying + f Z field_5438 donePlaying +c net/minecraft/class_1102 net/minecraft/client/audio/LocatableSound + m ()Ljava/lang/String; toString toString + f F field_5442 volume + f Z field_5446 repeat + f F field_5441 pitch + f D field_5439 x + f I field_5451 repeatDelay + f Lnet/minecraft/class_1111; field_5444 sound + f Lnet/minecraft/class_1113$class_1114; field_5440 attenuationType + f Z field_18936 global + f Lnet/minecraft/class_2960; field_5448 positionedSoundLocation + f D field_5450 y + f Z field_18935 priority + f D field_5449 z + f Lnet/minecraft/class_3419; field_5447 category +c net/minecraft/class_4508 net/minecraft/client/audio/BeeAngrySound +c net/minecraft/class_1104 net/minecraft/client/audio/IAmbientSoundHandler + m ()V method_4756 tick +c net/minecraft/class_4510 net/minecraft/client/audio/BeeSound + m ()F method_22138 getMaxPitch + m ()Lnet/minecraft/class_1101; method_22135 getNextSound + m ()Z method_22136 shouldSwitchSound + m ()F method_22137 getMinPitch + f Z field_20531 hasSwitchedSound + f Lnet/minecraft/class_4466; field_20530 beeInstance +c net/minecraft/class_4509 net/minecraft/client/audio/BeeFlightSound +c net/minecraft/class_4897 net/minecraft/client/audio/BiomeSoundHandler + m (Lnet/minecraft/class_4968;)V method_26271 func_239521_a_ + m (Lnet/minecraft/class_4967;)V method_26270 func_239520_a_ + m (Lnet/minecraft/class_1959;Lnet/minecraft/class_3414;)V method_25460 func_239522_a_ + m (Lnet/minecraft/class_3414;Lnet/minecraft/class_1959;Lnet/minecraft/class_4897$class_4898;)Lnet/minecraft/class_4897$class_4898; method_25459 func_239519_a_ + m ()F method_26272 getDarknessAmbienceChance + f Lnet/minecraft/class_4543; field_22798 biomeManager + f Ljava/util/Optional; field_22802 currentAmbientAdditionalSound + f Lnet/minecraft/class_1144; field_22797 soundHandler + f Ljava/util/Random; field_22799 random + f F field_23189 darknessAmbienceChance + f Lnet/minecraft/class_1959; field_22804 currentBiome + f Ljava/util/Optional; field_22801 currentAmbientMoodSound + f Lit/unimi/dsi/fastutil/objects/Object2ObjectArrayMap; field_22800 activeBiomeSoundsMap + f Lnet/minecraft/class_746; field_22796 player +c net/minecraft/class_4897$class_4898 net/minecraft/client/audio/BiomeSoundHandler$Sound + m ()V method_25464 fadeOutSound + m ()V method_25465 fadeInSound + f I field_22805 fadeSpeed + f I field_22806 fadeInTicks +c net/minecraft/class_1103 net/minecraft/client/audio/ElytraSound + f Lnet/minecraft/class_746; field_5452 player + f I field_5453 time +c net/minecraft/class_4277 net/minecraft/client/audio/BubbleColumnAmbientSoundHandler + m (Lnet/minecraft/class_2680;)Z method_29714 func_239528_a_ + f Z field_19194 firstTick + f Lnet/minecraft/class_746; field_19192 player + f Z field_19193 prevTickInColumn +c net/minecraft/class_1105 net/minecraft/client/audio/GuardianSound + f Lnet/minecraft/class_1577; field_5454 guardian +c net/minecraft/class_1106 net/minecraft/client/audio/EntityTickableSound + f Lnet/minecraft/class_1297; field_5455 entity +c net/minecraft/class_1107 net/minecraft/client/audio/RidingMinecartTickableSound + f Lnet/minecraft/class_1688; field_5456 minecart + f Lnet/minecraft/class_1657; field_5457 player +c net/minecraft/class_1108 net/minecraft/client/audio/MinecartTickableSound + f F field_5459 distance + f Lnet/minecraft/class_1688; field_5458 minecart +c net/minecraft/class_1111 net/minecraft/client/audio/Sound + m ()Lnet/minecraft/class_2960; method_4766 getSoundAsOggLocation + m ()Ljava/lang/String; toString toString + m ()Lnet/minecraft/class_1111$class_1112; method_4768 getType + m ()Lnet/minecraft/class_1111; method_4765 cloneEntry + m ()Z method_4769 isStreaming + m ()F method_4772 getPitch + m ()Z method_4764 shouldPreload + m ()F method_4771 getVolume + m ()I method_4770 getAttenuationDistance + m ()Lnet/minecraft/class_2960; method_4767 getSoundLocation + f I field_5463 attenuationDistance + f Lnet/minecraft/class_2960; field_5469 name + f I field_5468 weight + f Lnet/minecraft/class_1111$class_1112; field_5470 type + f Z field_5465 preload + f F field_5464 pitch + f Z field_5467 streaming + f F field_5466 volume +c net/minecraft/class_1111$class_1112 net/minecraft/client/audio/Sound$Type + m (Ljava/lang/String;)Lnet/minecraft/class_1111$class_1112; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_1111$class_1112; method_4773 getByName + m ()[Lnet/minecraft/class_1111$class_1112; values values + f Lnet/minecraft/class_1111$class_1112; field_5474 FILE + f Ljava/lang/String; field_5472 name + f Lnet/minecraft/class_1111$class_1112; field_5473 SOUND_EVENT + f [Lnet/minecraft/class_1111$class_1112; field_5471 $VALUES +c net/minecraft/class_1109 net/minecraft/client/audio/SimpleSound + m (Lnet/minecraft/class_3414;DDD)Lnet/minecraft/class_1109; method_25467 ambientWithAttenuation + m (Lnet/minecraft/class_3414;DDD)Lnet/minecraft/class_1109; method_4760 record + m (Lnet/minecraft/class_3414;FF)Lnet/minecraft/class_1109; method_24877 ambientWithoutAttenuation + m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_1109; method_25466 ambient + m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_1109; method_4759 music + m (Lnet/minecraft/class_3414;FF)Lnet/minecraft/class_1109; method_4757 master + m (Lnet/minecraft/class_3414;F)Lnet/minecraft/class_1109; method_4758 master +c net/minecraft/class_1115 net/minecraft/client/audio/SoundListSerializer + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1111; method_4790 deserializeSound + m (Lcom/google/gson/JsonObject;)Ljava/util/List; method_4792 deserializeSounds + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_1110; method_4791 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_1111$class_1112;)Lnet/minecraft/class_1111$class_1112; method_4789 deserializeType +c net/minecraft/class_1110 net/minecraft/client/audio/SoundList + m ()Z method_4763 canReplaceExisting + m ()Ljava/lang/String; method_4762 getSubtitle + m ()Ljava/util/List; method_4761 getSounds + f Ljava/util/List; field_5460 sounds + f Z field_5462 replaceExisting + f Ljava/lang/String; field_5461 subtitle +c net/minecraft/class_1117 net/minecraft/client/audio/ITickableSound + m ()Z method_4793 isDonePlaying + m ()V method_16896 tick +c net/minecraft/class_1113 net/minecraft/client/audio/ISound + m ()D method_4779 getY + m ()Lnet/minecraft/class_1113$class_1114; method_4777 getAttenuationType + m ()D method_4778 getZ + m ()Lnet/minecraft/class_3419; method_4774 getCategory + m ()Z method_4787 isGlobal + m ()F method_4781 getVolume + m ()I method_4780 getRepeatDelay + m ()Z method_26273 shouldPlaySound + m ()D method_4784 getX + m ()F method_4782 getPitch + m ()Z method_4785 canBeSilent + m ()Lnet/minecraft/class_2960; method_4775 getSoundLocation + m ()Z method_4786 canRepeat + m (Lnet/minecraft/class_1144;)Lnet/minecraft/class_1146; method_4783 createAccessor + m ()Lnet/minecraft/class_1111; method_4776 getSound +c net/minecraft/class_1113$class_1114 net/minecraft/client/audio/ISound$AttenuationType + m (Ljava/lang/String;)Lnet/minecraft/class_1113$class_1114; valueOf valueOf + m ()[Lnet/minecraft/class_1113$class_1114; values values + f Lnet/minecraft/class_1113$class_1114; field_5478 NONE + f Lnet/minecraft/class_1113$class_1114; field_5476 LINEAR + f [Lnet/minecraft/class_1113$class_1114; field_5477 $VALUES +c net/minecraft/class_1118 net/minecraft/client/audio/UnderwaterAmbientSounds +c net/minecraft/class_1118$class_1119 net/minecraft/client/audio/UnderwaterAmbientSounds$SubSound + f Lnet/minecraft/class_746; field_5482 player +c net/minecraft/class_1118$class_1120 net/minecraft/client/audio/UnderwaterAmbientSounds$UnderWaterSound + f Lnet/minecraft/class_746; field_5483 player + f I field_5484 ticksInWater +c net/minecraft/class_1116 net/minecraft/client/audio/UnderwaterAmbientSoundHandler + f Lnet/minecraft/class_1144; field_5479 soundHandler + f Lnet/minecraft/class_746; field_5481 player + f I field_5480 delay +c net/minecraft/class_1123 net/minecraft/client/util/IMutableSearchTree + m (Ljava/lang/Object;)V method_4798 func_217872_a + m ()V method_4799 recalculate + m ()V method_4797 clear +c net/minecraft/class_1126 net/minecraft/client/util/SearchTree + m (Ljava/lang/Object;Ljava/lang/String;)V method_4802 func_217880_a + f Lnet/minecraft/class_1128; field_5498 byName + f Ljava/util/function/Function; field_5497 nameFunc +c net/minecraft/class_1126$class_1127 net/minecraft/client/util/SearchTree$MergingIterator + m ()Ljava/lang/Object; computeNext computeNext + f Lcom/google/common/collect/PeekingIterator; field_5500 rightItr + f Lcom/google/common/collect/PeekingIterator; field_5499 leftItr + f Ljava/util/Comparator; field_5501 numbers +c net/minecraft/class_1121 net/minecraft/client/util/SearchTreeReloadable + m (Ljava/lang/Object;)V method_4795 index + m (Ljava/lang/Object;Ljava/lang/Object;)I method_4796 compare + m (Ljava/lang/Object;Lnet/minecraft/class_2960;)V method_4794 func_217873_a + f Ljava/util/List; field_5486 field_217878_d + f Lnet/minecraft/class_1128; field_5489 namespaceList + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_5488 field_217879_e + f Lnet/minecraft/class_1128; field_5485 pathList + f Ljava/util/function/Function; field_5487 field_217877_c +c net/minecraft/class_1121$class_1122 net/minecraft/client/util/SearchTreeReloadable$JoinedIterator + m ()Ljava/lang/Object; computeNext computeNext + f Lcom/google/common/collect/PeekingIterator; field_5490 field_217881_a + f Ljava/util/Comparator; field_5492 field_217883_c + f Lcom/google/common/collect/PeekingIterator; field_5491 field_217882_b +c net/minecraft/class_1129 net/minecraft/client/util/ISearchTree + m (Ljava/lang/String;)Ljava/util/List; method_4810 search +c net/minecraft/class_1124 net/minecraft/client/util/SearchTreeManager + m (Lnet/minecraft/class_1124$class_1125;Lnet/minecraft/class_1123;)V method_4801 add + m (Lnet/minecraft/class_1124$class_1125;)Lnet/minecraft/class_1123; method_4800 get + f Ljava/util/Map; field_5493 trees + f Lnet/minecraft/class_1124$class_1125; field_5496 RECIPES + f Lnet/minecraft/class_1124$class_1125; field_5495 ITEMS + f Lnet/minecraft/class_1124$class_1125; field_5494 TAGS +c net/minecraft/class_1124$class_1125 net/minecraft/client/util/SearchTreeManager$Key +c net/minecraft/class_1128 net/minecraft/client/util/SuffixArray + m ([I[I[III)V method_4803 func_194054_a + m (Ljava/lang/String;I)I method_4805 compare + m ()V method_4809 printArray + m (I)Ljava/lang/String; method_4808 getString + m (Ljava/lang/String;)Ljava/util/List; method_4804 search + m ()V method_4807 generate + m (Ljava/lang/Object;Ljava/lang/String;)V method_4806 add + f Z field_5507 DEBUG_PRINT_ARRAY + f I field_5502 maxStringLength + f Lit/unimi/dsi/fastutil/ints/IntList; field_5504 suffixToT + f Lit/unimi/dsi/fastutil/ints/IntList; field_5505 chars + f Z field_5508 DEBUG_PRINT_COMPARISONS + f Lit/unimi/dsi/fastutil/ints/IntList; field_5509 wordStarts + f Lorg/apache/logging/log4j/Logger; field_5510 LOGGER + f Lit/unimi/dsi/fastutil/ints/IntList; field_5506 offsets + f Ljava/util/List; field_5503 list +c net/minecraft/class_1128$1 net/minecraft/client/util/SuffixArray$1 + m (Ljava/lang/Integer;Ljava/lang/Integer;)I compare compare + m (Ljava/lang/Object;Ljava/lang/Object;)I compare compare + m (II)I compare compare + f Lnet/minecraft/class_1128; field_5512 field_194053_c + f [I field_5511 field_194052_b + f [I field_5513 field_194051_a +c net/minecraft/class_1132 net/minecraft/server/integrated/IntegratedServer + m ()Ljava/lang/String; method_4815 func_210175_e + m ()V method_4816 func_210176_c + m (Ljava/util/UUID;)V method_4817 setPlayerUuid + f Lnet/minecraft/class_1133; field_5519 lanServerPing + f Lnet/minecraft/class_310; field_5518 mc + f Z field_5524 isGamePaused + f Ljava/util/UUID; field_5521 playerUuid + f Lorg/apache/logging/log4j/Logger; field_5520 LOGGER + f I field_5522 serverPort +c net/minecraft/class_1130 net/minecraft/server/integrated/IntegratedPlayerList + m ()Lnet/minecraft/class_1132; method_4811 getServer + f Lnet/minecraft/class_2487; field_5514 hostPlayerData +c net/minecraft/class_1131 net/minecraft/client/network/LanServerInfo + m ()Ljava/lang/String; method_4812 getServerIpPort + m ()V method_4814 updateLastSeen + m ()Ljava/lang/String; method_4813 getServerMotd + f Ljava/lang/String; field_5515 lanServerMotd + f Ljava/lang/String; field_5517 lanServerIpPort + f J field_5516 timeLastSeen +c net/minecraft/class_1133 net/minecraft/client/multiplayer/LanServerPingThread + m (Ljava/lang/String;)Ljava/lang/String; method_4820 getAdFromPingResponse + m (Ljava/lang/String;)Ljava/lang/String; method_4819 getMotdFromPingResponse + m ()V interrupt interrupt + m ()V run run + m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_4818 getPingResponse + f Ljava/lang/String; field_5530 address + f Ljava/lang/String; field_5526 motd + f Lorg/apache/logging/log4j/Logger; field_5529 LOGGER + f Ljava/util/concurrent/atomic/AtomicInteger; field_5525 UNIQUE_THREAD_ID + f Z field_5527 isStopping + f Ljava/net/DatagramSocket; field_5528 socket +c net/minecraft/class_1134 net/minecraft/client/network/LanServerDetector + m ()Lorg/apache/logging/log4j/Logger; method_4821 access$100 + m ()Ljava/util/concurrent/atomic/AtomicInteger; method_4822 access$000 + f Lorg/apache/logging/log4j/Logger; field_5532 LOGGER + f Ljava/util/concurrent/atomic/AtomicInteger; field_5531 ATOMIC_COUNTER +c net/minecraft/class_1134$class_1136 net/minecraft/client/network/LanServerDetector$LanServerList + m ()V method_4825 setWasNotUpdated + m ()Z method_4823 getWasUpdated + m ()Ljava/util/List; method_4826 getLanServers + m (Ljava/lang/String;Ljava/net/InetAddress;)V method_4824 addServer + f Ljava/util/List; field_5536 listOfLanServers + f Z field_5537 wasUpdated +c net/minecraft/class_1134$class_1135 net/minecraft/client/network/LanServerDetector$LanServerFindThread + m ()V run run + f Ljava/net/InetAddress; field_5534 broadcastAddress + f Ljava/net/MulticastSocket; field_5535 socket + f Lnet/minecraft/class_1134$class_1136; field_5533 localServerList +c net/minecraft/class_4235 net/minecraft/client/audio/ChannelManager + m (Ljava/util/function/Consumer;)V method_19730 func_217900_b + m ()V method_19728 releaseAll + m ()V method_19731 func_217904_c + m (Lnet/minecraft/class_4225$class_4105;)Ljava/util/concurrent/CompletableFuture; method_19723 requestSoundEntry + m (Lnet/minecraft/class_4235$class_4236;)Lnet/minecraft/class_4224; method_19725 func_217896_a + m (Lnet/minecraft/class_4235;)Ljava/util/concurrent/Executor; method_19726 func_217898_a + m ()V method_19722 tick + m (Lnet/minecraft/class_4225$class_4105;Ljava/util/concurrent/CompletableFuture;)V method_19724 func_239535_a_ + m (Lnet/minecraft/class_4235;)Lnet/minecraft/class_4225; method_19729 func_217902_b + m (Ljava/util/function/Consumer;)V method_19727 runForAllSoundSources + f Ljava/util/concurrent/Executor; field_18939 soundExecutor + f Ljava/util/Set; field_18937 channels + f Lnet/minecraft/class_4225; field_18938 sndSystem +c net/minecraft/class_4235$class_4236 net/minecraft/client/audio/ChannelManager$Entry + m (Ljava/util/function/Consumer;)V method_19737 func_217890_b + m (Ljava/util/function/Consumer;)V method_19735 runOnSoundExecutor + m (Lnet/minecraft/class_4235$class_4236;)Lnet/minecraft/class_4224; method_19733 func_217886_a + m ()Z method_19732 isReleased + m ()V method_19736 release + f Lnet/minecraft/class_4224; field_18941 source + f Lnet/minecraft/class_4235; field_18940 field_217892_a + f Z field_18942 released +c net/minecraft/class_4234 net/minecraft/client/audio/IAudioStream + m ()Ljavax/sound/sampled/AudioFormat; method_19719 getAudioFormat + m (I)Ljava/nio/ByteBuffer; method_19720 readOggSoundWithCapacity +c net/minecraft/class_1142 net/minecraft/client/audio/MusicTicker + m (Lnet/minecraft/class_5195;)V method_4858 selectRandomBackgroundMusic + m ()V method_4859 stop + m ()V method_18669 tick + m (Lnet/minecraft/class_5195;)Z method_4860 isBackgroundMusicPlaying + f Lnet/minecraft/class_1113; field_5574 currentMusic + f Lnet/minecraft/class_310; field_5575 client + f I field_5572 timeUntilNextMusic + f Ljava/util/Random; field_5571 random +c net/minecraft/class_4856 net/minecraft/client/audio/OggAudioStreamWrapper + m ()V close close + f Lnet/minecraft/class_4234; field_22444 audioStream + f Lnet/minecraft/class_4856$class_4857; field_22443 wrapperFactoryOGG + f Ljava/io/BufferedInputStream; field_22445 inputStream +c net/minecraft/class_4856$class_4857 net/minecraft/client/audio/OggAudioStreamWrapper$IFactory + m (Ljava/io/InputStream;)Lnet/minecraft/class_4234; create create +c net/minecraft/class_4856$1 net/minecraft/client/audio/OggAudioStreamWrapper$1 +c net/minecraft/class_4856$class_4858 net/minecraft/client/audio/OggAudioStreamWrapper$Stream + m ()V close close +c net/minecraft/class_1140 net/minecraft/client/audio/SoundEngine + m (Lnet/minecraft/class_1113;)V method_19753 stop + m (Lnet/minecraft/class_1113;)F method_4849 getClampedPitch + m (Lnet/minecraft/class_1145;)V method_4855 addListener + m (Lnet/minecraft/class_4234;Lnet/minecraft/class_4224;)V method_19755 func_217935_a + m (FFLnet/minecraft/class_243;Lnet/minecraft/class_4224;)V method_19748 func_217924_a + m (Lnet/minecraft/class_4235$class_4236;Lnet/minecraft/class_4234;)V method_19758 func_217928_a + m (Lnet/minecraft/class_3419;F)V method_4844 setVolume + m (Lnet/minecraft/class_1113;)Z method_24879 canRepeatAndHasDelay + m (Ljava/util/stream/Stream;)V method_19760 func_217929_b + m (Lnet/minecraft/class_1113;)V method_4854 play + m ()V method_4843 stopAllSounds + m (FFLnet/minecraft/class_1113$class_1114;FZZLnet/minecraft/class_243;ZLnet/minecraft/class_4224;)V method_19749 func_239543_a_ + m ()V method_4837 reload + m (Lnet/minecraft/class_3419;)F method_4850 getVolume + m (Lnet/minecraft/class_4231;Lnet/minecraft/class_4224;)V method_19752 func_217925_a + m ()V method_4846 load + m ()V method_19762 resume + m (FLnet/minecraft/class_4224;)V method_19750 func_217923_a + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_3419;)V method_4838 stop + m (Lnet/minecraft/class_1113;I)V method_4852 playDelayed + m (Lnet/minecraft/class_4235$class_4236;Lnet/minecraft/class_4231;)V method_19757 func_217934_a + m (Lnet/minecraft/class_1113;)Z method_24880 canRepeatAndHasNoDelay + m (Lnet/minecraft/class_1113;)Z method_24878 hasRepeatDelay + m (Lnet/minecraft/class_4184;)V method_4840 updateListener + m (Ljava/util/stream/Stream;)V method_19759 func_217936_a + m (Lnet/minecraft/class_1113;)F method_4853 getClampedVolume + m (Lnet/minecraft/class_1145;)V method_4847 removeListener + m (Lnet/minecraft/class_1113;)Z method_4835 isPlaying + m (Z)V method_20185 tick + m ()V method_4856 unload + m ()Ljava/lang/String; method_20304 getDebugString + m (Lnet/minecraft/class_1117;)V method_22139 playOnNextTick + m (Lnet/minecraft/class_1113;Lnet/minecraft/class_4235$class_4236;)V method_19754 func_217926_a + m (Lnet/minecraft/class_4235$class_4236;)V method_19756 func_217922_a + m ()V method_4857 tickNonPaused + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V method_19751 func_229362_a_ + m (Lnet/minecraft/class_1111;)V method_4851 enqueuePreload + m ()V method_19761 pause + f Lorg/apache/logging/log4j/Marker; field_5553 LOG_MARKER + f Ljava/util/Map; field_18950 playingSoundsChannel + f Lnet/minecraft/class_315; field_5555 options + f Ljava/util/List; field_5551 soundsToPreload + f Lnet/minecraft/class_4237; field_18947 audioStreamManager + f Ljava/util/Set; field_5561 UNABLE_TO_PLAY + f Lnet/minecraft/class_4238; field_18948 executor + f Ljava/util/Map; field_18952 playingSoundsStopTime + f I field_5550 ticks + f Z field_5563 loaded + f Ljava/util/List; field_5558 listeners + f Lorg/apache/logging/log4j/Logger; field_5559 LOGGER + f Lnet/minecraft/class_4235; field_18949 channelManager + f Lnet/minecraft/class_4227; field_18946 listener + f Ljava/util/Map; field_5566 delayedSounds + f Lnet/minecraft/class_1144; field_5552 sndHandler + f Lnet/minecraft/class_4225; field_18945 sndSystem + f Lcom/google/common/collect/Multimap; field_18951 categorySounds + f Ljava/util/List; field_5557 tickableSounds + f Ljava/util/List; field_20532 tickableSoundsToPlayOnNextTick +c net/minecraft/class_4237 net/minecraft/client/audio/AudioStreamManager + m (Ljava/util/Collection;)Ljava/util/concurrent/CompletableFuture; method_19741 preload + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4231; method_19747 func_217914_e + m (Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_4234; method_19745 func_239542_b_ + m (Lnet/minecraft/class_2960;)Ljava/util/concurrent/CompletableFuture; method_19746 func_217913_d + m (Ljava/util/concurrent/CompletableFuture;)V method_19742 func_217910_a + m (Lnet/minecraft/class_2960;)Ljava/util/concurrent/CompletableFuture; method_19743 createResource + m (Lnet/minecraft/class_1111;)Ljava/util/concurrent/CompletableFuture; method_19740 func_217911_a + m (I)[Ljava/util/concurrent/CompletableFuture; method_19739 func_217916_a + m ()V method_19738 clearAudioBufferCache + m (Lnet/minecraft/class_2960;Z)Ljava/util/concurrent/CompletableFuture; method_19744 createStreamingResource + f Ljava/util/Map; field_18944 bufferCache + f Lnet/minecraft/class_3300; field_18943 resourceManager +c net/minecraft/class_1145 net/minecraft/client/audio/ISoundEventListener + m (Lnet/minecraft/class_1113;Lnet/minecraft/class_1146;)V method_4884 onPlaySound +c net/minecraft/class_4238 net/minecraft/client/audio/SoundEngineExecutor + m ()Z method_19766 func_213177_d + m ()Ljava/lang/Thread; method_19764 createExecutionThread + m ()V method_19765 run + m ()V method_19763 restart + f Z field_18954 stopped + f Ljava/lang/Thread; field_18953 executionThread +c net/minecraft/class_1146 net/minecraft/client/audio/SoundEventAccessor + m ()Lnet/minecraft/class_1111; method_4887 cloneEntry + m (Lnet/minecraft/class_1148;)V method_4885 addSound + m ()Lnet/minecraft/class_2561; method_4886 getSubtitle + f Ljava/util/Random; field_5601 rnd + f Ljava/util/List; field_5600 accessorList + f Lnet/minecraft/class_2960; field_5602 location + f Lnet/minecraft/class_2561; field_5599 subtitle +c net/minecraft/class_1144 net/minecraft/client/audio/SoundHandler + m ()Ljava/lang/String; method_20305 getDebugString + m ()V method_4881 stop + m ()Lorg/apache/logging/log4j/Logger; method_18183 func_215291_g + m (Lnet/minecraft/class_1117;)V method_22140 playOnNextTick + m ()V method_4879 pause + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Lnet/minecraft/class_1144$class_4009; method_18180 prepare + m ()Ljava/util/Collection; method_4864 getAvailableSounds + m ()V method_4880 resume + m ()V method_4882 unloadSounds + m (Lnet/minecraft/class_1145;)V method_4866 removeListener + m (Lnet/minecraft/class_1113;I)V method_4872 playDelayed + m (Lnet/minecraft/class_3419;F)V method_4865 setSoundLevel + m (Z)V method_18670 tick + m (Lnet/minecraft/class_1144$class_4009;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18182 apply + m (Lnet/minecraft/class_1113;)V method_4870 stop + m (Lnet/minecraft/class_1145;)V method_4878 addListener + m (Lnet/minecraft/class_4184;)V method_4876 updateListener + m (Lnet/minecraft/class_1113;)V method_4873 play + m (Lnet/minecraft/class_1111;Lnet/minecraft/class_2960;Lnet/minecraft/class_3300;)Z method_4868 isValidSound + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_3419;)V method_4875 stop + m (Lnet/minecraft/class_1111;Lnet/minecraft/class_2960;Lnet/minecraft/class_3300;)Z method_18181 func_215295_a + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1146; method_4869 getAccessor + m (Lnet/minecraft/class_1113;)Z method_4877 isPlaying + f Ljava/util/Map; field_5588 soundRegistry + f Lorg/apache/logging/log4j/Logger; field_5593 LOGGER + f Lnet/minecraft/class_1140; field_5590 sndManager + f Lnet/minecraft/class_1111; field_5592 MISSING_SOUND + f Lcom/google/gson/reflect/TypeToken; field_5591 TYPE + f Lcom/google/gson/Gson; field_5594 GSON +c net/minecraft/class_1144$class_4009 net/minecraft/client/audio/SoundHandler$Loader + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1110;Lnet/minecraft/class_3300;)V method_18187 registerSoundEvent + m (Lnet/minecraft/class_1144$class_4009;)Ljava/util/Map; method_18184 func_217945_a + m (Ljava/util/Map;Lnet/minecraft/class_1140;)V method_18186 preloadSounds + m (Lnet/minecraft/class_1144$class_4009;Lnet/minecraft/class_2960;Lnet/minecraft/class_1110;Lnet/minecraft/class_3300;)V method_18185 func_217947_a + f Ljava/util/Map; field_17908 soundRegistry +c net/minecraft/class_1144$class_4009$1 net/minecraft/client/audio/SoundHandler$Loader$1 + m ()Lnet/minecraft/class_1111; method_4883 cloneEntry + f Lnet/minecraft/class_1111; field_5595 field_217869_b + f Lnet/minecraft/class_1144$class_4009; field_5597 field_217870_c + f Lnet/minecraft/class_2960; field_5596 field_217868_a +c net/minecraft/class_1144$2 net/minecraft/client/audio/SoundHandler$2 + f [I field_5598 field_217949_a +c net/minecraft/class_1144$1 net/minecraft/client/audio/SoundHandler$1 +c net/minecraft/class_1148 net/minecraft/client/audio/ISoundEventAccessor + m ()I method_4894 getWeight + m ()Ljava/lang/Object; method_4893 cloneEntry + m (Lnet/minecraft/class_1140;)V method_18188 enqueuePreload +c net/minecraft/class_1149 net/minecraft/client/tutorial/CraftPlanksStep + m (Lnet/minecraft/class_746;Lnet/minecraft/class_3494;)Z method_4895 hasCrafted + f Lnet/minecraft/class_1156; field_5608 tutorial + f Lnet/minecraft/class_372; field_5610 toast + f Lnet/minecraft/class_2561; field_5611 TITLE + f I field_5609 timeWaiting + f Lnet/minecraft/class_2561; field_5612 DESCRIPTION +c net/minecraft/class_1150 net/minecraft/client/tutorial/CompletedTutorialStep + f Lnet/minecraft/class_1156; field_5613 tutorial +c net/minecraft/class_1151 net/minecraft/client/tutorial/MovementStep + f I field_5626 moveCompleted + f Lnet/minecraft/class_2561; field_5621 LOOK_TITLE + f Lnet/minecraft/class_2561; field_5614 LOOK_DESCRIPTION + f I field_5627 timeLooked + f Lnet/minecraft/class_1156; field_5618 tutorial + f I field_5615 timeMoved + f I field_5616 timeWaiting + f Z field_5619 turned + f Z field_5620 moved + f Lnet/minecraft/class_372; field_5622 moveToast + f Lnet/minecraft/class_2561; field_5617 MOVE_DESCRIPTION + f Lnet/minecraft/class_2561; field_5624 MOVE_TITLE + f I field_5625 lookCompleted + f Lnet/minecraft/class_372; field_5623 lookToast +c net/minecraft/class_1152 net/minecraft/client/tutorial/FindTreeStep + m (Lnet/minecraft/class_746;)Z method_4896 hasPunchedTreesPreviously + f Lnet/minecraft/class_2561; field_5631 TITLE + f Ljava/util/Set; field_5632 TREE_BLOCKS + f Lnet/minecraft/class_1156; field_5630 tutorial + f Lnet/minecraft/class_372; field_5633 toast + f Lnet/minecraft/class_2561; field_5628 DESCRIPTION + f I field_5629 timeWaiting +c net/minecraft/class_1153 net/minecraft/client/tutorial/PunchTreeStep + f Lnet/minecraft/class_372; field_5637 toast + f Lnet/minecraft/class_2561; field_5639 DESCRIPTION + f I field_5635 resetCount + f I field_5636 timeWaiting + f Lnet/minecraft/class_2561; field_5638 TITLE + f Lnet/minecraft/class_1156; field_5634 tutorial +c net/minecraft/class_1154 net/minecraft/client/tutorial/OpenInventoryStep + f I field_5641 timeWaiting + f Lnet/minecraft/class_1156; field_5640 tutorial + f Lnet/minecraft/class_2561; field_5643 TITLE + f Lnet/minecraft/class_2561; field_5644 DESCRIPTION + f Lnet/minecraft/class_372; field_5642 toast +c net/minecraft/class_1155 net/minecraft/client/tutorial/ITutorialStep + m ()V method_4904 openInventory + m ()V method_4902 onStop + m (Lnet/minecraft/class_744;)V method_4903 handleMovement + m (DD)V method_4901 onMouseMove + m (Lnet/minecraft/class_638;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;F)V method_4900 onHitBlock + m (Lnet/minecraft/class_1799;)V method_4897 handleSetSlot + m (Lnet/minecraft/class_638;Lnet/minecraft/class_239;)V method_4898 onMouseHover + m ()V method_4899 tick +c net/minecraft/class_1156 net/minecraft/client/tutorial/Tutorial + m ()Lnet/minecraft/class_310; method_4914 getMinecraft + m (Lnet/minecraft/class_638;Lnet/minecraft/class_239;)V method_4911 onMouseHover + m ()V method_4917 tick + m ()V method_4916 reload + m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_4913 createKeybindComponent + m (DD)V method_4908 onMouseMove + m ()V method_4915 stop + m ()Lnet/minecraft/class_1934; method_4905 getGameType + m ()V method_4912 openInventory + m (Lnet/minecraft/class_1799;)V method_4906 handleSetSlot + m (Lnet/minecraft/class_1157;)V method_4910 setStep + m (Lnet/minecraft/class_744;)V method_4909 handleMovement + m (Lnet/minecraft/class_638;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;F)V method_4907 onHitBlock + f Lnet/minecraft/class_1155; field_5646 tutorialStep + f Lnet/minecraft/class_310; field_5645 minecraft +c net/minecraft/class_1157 net/minecraft/client/tutorial/TutorialSteps + m ()Ljava/lang/String; method_4920 getName + m (Ljava/lang/String;)Lnet/minecraft/class_1157; method_4919 byName + m ()[Lnet/minecraft/class_1157; values values + m (Ljava/lang/String;)Lnet/minecraft/class_1157; valueOf valueOf + m (Lnet/minecraft/class_1156;)Lnet/minecraft/class_1155; method_4918 create + f Ljava/lang/String; field_5651 name + f Lnet/minecraft/class_1157; field_5652 OPEN_INVENTORY + f Lnet/minecraft/class_1157; field_5648 FIND_TREE + f Lnet/minecraft/class_1157; field_5649 PUNCH_TREE + f Ljava/util/function/Function; field_5647 tutorial + f Lnet/minecraft/class_1157; field_5650 MOVEMENT + f [Lnet/minecraft/class_1157; field_5654 $VALUES + f Lnet/minecraft/class_1157; field_5653 NONE + f Lnet/minecraft/class_1157; field_5655 CRAFT_PLANKS +c net/minecraft/class_4899 net/minecraft/realms/DisconnectedRealmsScreen + m (Lnet/minecraft/class_310;Lnet/minecraft/class_4185;)V method_25468 func_239547_a_ + f Lnet/minecraft/class_437; field_22810 field_230716_p_ + f Lnet/minecraft/class_2561; field_22808 field_230714_b_ + f I field_22811 field_230717_q_ + f Lnet/minecraft/class_2561; field_22807 field_230713_a_ + f Lnet/minecraft/class_5489; field_22809 field_243509_c +c net/minecraft/class_4901 net/minecraft/realms/RealmsBridgeScreen + m (Lnet/minecraft/class_437;)Lnet/minecraft/class_4905; method_25476 func_239555_b_ + m (Lnet/minecraft/class_437;)V method_25475 func_231394_a_ + f Lnet/minecraft/class_437; field_22813 field_230718_a_ +c net/minecraft/class_4900 net/minecraft/realms/RealmsNarratorHelper + m ([Ljava/lang/String;)V method_25471 func_239551_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_25474 func_239554_c_ + m (Ljava/lang/Iterable;)Ljava/lang/String; method_25472 func_239552_b_ + m (Ljava/lang/String;)V method_25473 func_239553_b_ + m (Ljava/lang/Iterable;)V method_25469 func_239549_a_ + m (Ljava/lang/String;)V method_25470 func_239550_a_ + f Lnet/minecraft/class_4907; field_22812 field_239548_a_ +c net/minecraft/class_4903 net/minecraft/realms/RealmsLabel + m ()Ljava/lang/String; method_25487 func_231399_a_ + m (Lnet/minecraft/class_437;Lnet/minecraft/class_4587;)V method_25488 func_239560_a_ + f I field_22820 field_230724_b_ + f I field_22822 field_230726_d_ + f I field_22821 field_230725_c_ + f Lnet/minecraft/class_2561; field_22819 field_230723_a_ +c net/minecraft/class_4902 net/minecraft/realms/RealmsConnect + m (Lnet/minecraft/class_4902;)Z method_25478 access$000 + m (Lnet/minecraft/class_4902;)Lnet/minecraft/class_2535; method_25482 access$100 + m ()V method_25481 func_231398_b_ + m ()V method_25477 func_231396_a_ + m ()Lorg/apache/logging/log4j/Logger; method_25483 access$300 + m (Lnet/minecraft/class_4902;)Lnet/minecraft/class_437; method_25484 func_239556_c_ + m (Ljava/lang/String;I)V method_25480 func_231397_a_ + m (Lnet/minecraft/class_4902;Lnet/minecraft/class_2535;)Lnet/minecraft/class_2535; method_25479 access$102 + f Lnet/minecraft/class_437; field_22815 field_230720_b_ + f Z field_22816 field_230721_c_ + f Lnet/minecraft/class_2535; field_22817 field_230722_d_ + f Lorg/apache/logging/log4j/Logger; field_22814 field_230719_a_ +c net/minecraft/class_4902$1 net/minecraft/realms/RealmsConnect$1 + m (Lnet/minecraft/class_310;Lnet/minecraft/class_4899;)V method_25485 func_239558_a_ + m ()V run run + m (Lnet/minecraft/class_2561;)V method_10210 func_209500_a + m (Lnet/minecraft/class_310;Lnet/minecraft/class_4899;)V method_25486 func_239559_b_ + f Lnet/minecraft/class_4902; field_11113 field_207703_c + f Ljava/lang/String; field_11112 field_207701_a + f Lnet/minecraft/class_310; field_22818 field_239557_c_ + f I field_11114 field_207702_b +c net/minecraft/class_4905 net/minecraft/realms/RealmsScreen + m (I)I method_25494 func_239562_k_ + m ()V method_25495 func_231411_u_ +c net/minecraft/class_4904 net/minecraft/realms/RealmsObjectSelectionList + m (IIDDI)V method_25490 func_231401_a_ + m (I)V method_25492 func_239561_k_ + m ()V method_25493 func_231409_q_ + m (Lnet/minecraft/class_4280$class_4281;)I method_25491 addEntry + m (I)V method_25489 func_231400_a_ +c net/minecraft/class_4907 net/minecraft/realms/RepeatedNarrator + m (Ljava/lang/String;)V method_25499 func_231415_a_ + m (Ljava/lang/String;Lnet/minecraft/class_4907$class_4908;)Lnet/minecraft/class_4907$class_4908; method_25500 func_229956_lam_ + f F field_22825 field_230729_a_ + f Ljava/util/concurrent/atomic/AtomicReference; field_22826 field_230730_b_ +c net/minecraft/class_4907$class_4908 net/minecraft/realms/RepeatedNarrator$Parameter + m (Lnet/minecraft/class_4907$class_4908;)Ljava/lang/String; method_25502 func_239564_b_ + m (Lnet/minecraft/class_4907$class_4908;)Lcom/google/common/util/concurrent/RateLimiter; method_25501 func_239563_a_ + f Lcom/google/common/util/concurrent/RateLimiter; field_22828 field_214463_b + f Ljava/lang/String; field_22827 field_214462_a +c net/minecraft/class_4906 net/minecraft/realms/RealmsServerAddress + m (Ljava/lang/String;)Lnet/minecraft/class_4906; method_25497 func_231413_a_ + m ()Ljava/lang/String; method_25496 func_231412_a_ + m ()I method_25498 func_231414_b_ + f I field_22824 field_230728_b_ + f Ljava/lang/String; field_22823 field_230727_a_ +c net/minecraft/class_167 net/minecraft/advancements/AdvancementProgress + m (Ljava/util/Set;Ljava/util/Map$Entry;)Z method_730 func_209539_a + m ()Ljava/lang/String; method_728 getProgressText + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_167; method_732 fromNetwork + m (Lnet/minecraft/class_2540;)V method_733 serializeToNetwork + m (Ljava/lang/Object;)I compareTo compareTo + m ()Ljava/lang/Iterable; method_734 getCompletedCriteria + m ()F method_735 getPercent + m ()I method_736 countCompletedRequirements + m (Lnet/minecraft/class_167;)Ljava/util/Map; method_739 access$000 + m (Ljava/util/Map;[Ljava/lang/String;)V method_727 update + m ()Ljava/lang/Iterable; method_731 getRemaningCriteria + m ()Ljava/util/Date; method_741 getFirstProgressDate + m (Ljava/lang/String;)Lnet/minecraft/class_178; method_737 getCriterionProgress + m (Ljava/lang/String;)Z method_729 revokeCriterion + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;)Z method_743 grantCriterion + m (Lnet/minecraft/class_167;)I method_738 compareTo + m ()Z method_740 isDone + m ()Z method_742 hasProgress + f [[Ljava/lang/String; field_1161 requirements + f Ljava/util/Map; field_1160 criteria +c net/minecraft/class_167$class_168 net/minecraft/advancements/AdvancementProgress$Serializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lnet/minecraft/class_167;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_744 serialize + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_167; method_745 deserialize +c net/minecraft/class_170 net/minecraft/advancements/AdvancementRewards + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_170; method_27912 deserializeRewards + m (Lnet/minecraft/class_3222;)V method_748 apply + m ()Ljava/lang/String; toString toString + m ()Lcom/google/gson/JsonElement; method_747 serialize + m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_3222;Lnet/minecraft/class_2158;)V method_17978 func_215098_a + f [Lnet/minecraft/class_2960; field_1164 loot + f [Lnet/minecraft/class_2960; field_1166 recipes + f Lnet/minecraft/class_170; field_1167 EMPTY + f I field_1165 experience + f Lnet/minecraft/class_2158$class_2159; field_1163 function +c net/minecraft/class_170$class_171 net/minecraft/advancements/AdvancementRewards$Builder + m (I)Lnet/minecraft/class_170$class_171; method_750 experience + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_170$class_171; method_753 recipe + m ()Lnet/minecraft/class_170; method_751 build + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_170$class_171; method_752 addRecipe + m (I)Lnet/minecraft/class_170$class_171; method_749 addExperience + f Lnet/minecraft/class_2960; field_1170 function + f Ljava/util/List; field_1171 loot + f Ljava/util/List; field_1168 recipes + f I field_1169 experience +c net/minecraft/class_174 net/minecraft/advancements/CriteriaTriggers + m ()Ljava/lang/Iterable; method_766 getAll + m (Lnet/minecraft/class_179;)Lnet/minecraft/class_179; method_767 register + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_179; method_765 get + f Lnet/minecraft/class_2092; field_19250 HERO_OF_THE_VILLAGE + f Lnet/minecraft/class_2092; field_1212 SLEPT_IN_BED + f Lnet/minecraft/class_2131; field_1201 TAME_ANIMAL + f Lnet/minecraft/class_2128; field_1182 SUMMONED_ENTITY + f Lnet/minecraft/class_2002; field_1202 CHANNELED_LIGHTNING + f Lnet/minecraft/class_2062; field_1184 IMPOSSIBLE + f Ljava/util/Map; field_1205 REGISTRY + f Lnet/minecraft/class_2092; field_1194 LOCATION + f Lnet/minecraft/class_4708; field_21629 BEE_NEST_DESTROYED + f Lnet/minecraft/class_2148; field_1204 USED_TOTEM + f Lnet/minecraft/class_2044; field_1209 ENTITY_HURT_PLAYER + f Lnet/minecraft/class_2135; field_1187 TICK + f Lnet/minecraft/class_5282; field_24479 PLAYER_GENERATES_CONTAINER_LOOT + f Lnet/minecraft/class_1999; field_1183 CHANGED_DIMENSION + f Lnet/minecraft/class_1996; field_1213 BREWED_POTION + f Lnet/minecraft/class_2119; field_1207 RECIPE_UNLOCKED + f Lnet/minecraft/class_5409; field_25694 PLAYER_ENTITY_INTERACTION + f Lnet/minecraft/class_2085; field_1200 LEVITATION + f Lnet/minecraft/class_2069; field_1185 ITEM_DURABILITY_CHANGED + f Lnet/minecraft/class_2108; field_1211 NETHER_TRAVEL + f Lnet/minecraft/class_2111; field_1191 PLACED_BLOCK + f Lnet/minecraft/class_2027; field_1193 EFFECTS_CHANGED + f Lnet/minecraft/class_2076; field_1197 KILLED_BY_CROSSBOW + f Lnet/minecraft/class_2066; field_1195 INVENTORY_CHANGED + f Lnet/minecraft/class_2058; field_1203 FISHING_ROD_HOOKED + f Lnet/minecraft/class_2014; field_1210 CURED_ZOMBIE_VILLAGER + f Lnet/minecraft/class_2030; field_1181 ENCHANTED_ITEM + f Lnet/minecraft/class_196; field_1190 BRED_ANIMALS + f Lnet/minecraft/class_5279; field_24480 THROWN_ITEM_PICKED_UP_BY_ENTITY + f Lnet/minecraft/class_2010; field_1198 CONSUME_ITEM + f Lnet/minecraft/class_4713; field_21628 SLIDE_DOWN_BLOCK + f Lnet/minecraft/class_2080; field_1192 PLAYER_KILLED_ENTITY + f Lnet/minecraft/class_2143; field_1186 USED_ENDER_EYE + f Lnet/minecraft/class_2054; field_1208 FILLED_BUCKET + f Lnet/minecraft/class_2080; field_1188 ENTITY_KILLED_PLAYER + f Lnet/minecraft/class_4711; field_24478 RIGHT_CLICK_BLOCK_WITH_ITEM + f Lnet/minecraft/class_4851; field_22450 TARGET_HIT + f Lnet/minecraft/class_2115; field_1199 PLAYER_HURT_ENTITY + f Lnet/minecraft/class_2006; field_1189 CONSTRUCT_BEACON + f Lnet/minecraft/class_2037; field_1180 ENTER_BLOCK + f Lnet/minecraft/class_2123; field_1196 SHOT_CROSSBOW + f Lnet/minecraft/class_2140; field_1206 VILLAGER_TRADE + f Lnet/minecraft/class_2092; field_19251 VOLUNTARY_EXILE +c net/minecraft/class_175 net/minecraft/advancements/Criterion + m ()Lnet/minecraft/class_184; method_774 getCriterionInstance + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_175; method_769 criterionFromNetwork + m ()Lcom/google/gson/JsonElement; method_773 serialize + m (Lnet/minecraft/class_2540;)V method_771 serializeToNetwork + m (Ljava/util/Map;Lnet/minecraft/class_2540;)V method_775 serializeToNetwork + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Ljava/util/Map; method_772 deserializeAll + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Lnet/minecraft/class_175; method_770 deserializeCriterion + m (Lnet/minecraft/class_2540;)Ljava/util/Map; method_768 criteriaFromNetwork + f Lnet/minecraft/class_184; field_1214 criterionInstance +c net/minecraft/class_178 net/minecraft/advancements/CriterionProgress + m (Lnet/minecraft/class_2540;)V method_787 write + m ()Z method_784 isObtained + m ()Ljava/util/Date; method_786 getObtained + m ()V method_790 reset + m ()Ljava/lang/String; toString toString + m ()Lcom/google/gson/JsonElement; method_783 serialize + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_178; method_785 read + m (Ljava/lang/String;)Lnet/minecraft/class_178; method_788 fromJson + m ()V method_789 obtain + f Ljava/text/SimpleDateFormat; field_1220 DATE_TIME_FORMATTER + f Ljava/util/Date; field_1219 obtained +c net/minecraft/class_179 net/minecraft/advancements/ICriterionTrigger + m (Lnet/minecraft/class_2985;Lnet/minecraft/class_179$class_180;)V method_792 addListener + m (Lnet/minecraft/class_2985;Lnet/minecraft/class_179$class_180;)V method_793 removeListener + m (Lnet/minecraft/class_2985;)V method_791 removeAllListeners + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Lnet/minecraft/class_184; method_795 deserialize + m ()Lnet/minecraft/class_2960; method_794 getId +c net/minecraft/class_179$class_180 net/minecraft/advancements/ICriterionTrigger$Listener + m ()Lnet/minecraft/class_184; method_797 getCriterionInstance + m (Ljava/lang/Object;)Z equals equals + m ()I hashCode hashCode + m (Lnet/minecraft/class_2985;)V method_796 grantCriterion + f Lnet/minecraft/class_161; field_1222 advancement + f Ljava/lang/String; field_1221 criterionName + f Lnet/minecraft/class_184; field_1223 criterionInstance +c net/minecraft/class_184 net/minecraft/advancements/ICriterionInstance + m ()Lnet/minecraft/class_2960; method_806 getId + m (Lnet/minecraft/class_5267;)Lcom/google/gson/JsonObject; method_807 serialize +c net/minecraft/class_185 net/minecraft/advancements/DisplayInfo + m ()Z method_823 shouldShowToast + m ()Lnet/minecraft/class_189; method_815 getFrame + m ()Z method_808 shouldAnnounceToChat + m ()Lcom/google/gson/JsonElement; method_814 serialize + m ()Z method_824 isHidden + m ()Lcom/google/gson/JsonObject; method_810 serializeIcon + m ()Lnet/minecraft/class_1799; method_821 getIcon + m ()F method_819 getY + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_185; method_809 deserialize + m (FF)V method_816 setPosition + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_185; method_820 read + m ()F method_818 getX + m ()Lnet/minecraft/class_2561; method_817 getDescription + m ()Lnet/minecraft/class_2561; method_811 getTitle + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1799; method_822 deserializeIcon + m (Lnet/minecraft/class_2540;)V method_813 write + m ()Lnet/minecraft/class_2960; method_812 getBackground + f Lnet/minecraft/class_189; field_1237 frame + f Z field_1238 announceToChat + f Z field_1236 hidden + f Z field_1239 showToast + f F field_1245 x + f F field_1244 y + f Lnet/minecraft/class_1799; field_1241 icon + f Lnet/minecraft/class_2561; field_1240 title + f Lnet/minecraft/class_2561; field_1242 description + f Lnet/minecraft/class_2960; field_1243 background +c net/minecraft/class_189 net/minecraft/advancements/FrameType + m ()I method_832 getIcon + m ()Ljava/lang/String; method_831 getName + m ()[Lnet/minecraft/class_189; values values + m ()Lnet/minecraft/class_124; method_830 getFormat + m (Ljava/lang/String;)Lnet/minecraft/class_189; valueOf valueOf + m ()Lnet/minecraft/class_2561; method_30756 getTranslatedToast + m (Ljava/lang/String;)Lnet/minecraft/class_189; method_833 byName + f I field_1252 icon + f Lnet/minecraft/class_124; field_1255 format + f Ljava/lang/String; field_1251 name + f Lnet/minecraft/class_189; field_1250 CHALLENGE + f Lnet/minecraft/class_189; field_1249 GOAL + f Lnet/minecraft/class_189; field_1254 TASK + f [Lnet/minecraft/class_189; field_1253 $VALUES + f Lnet/minecraft/class_2561; field_26386 translatedToast +c net/minecraft/class_193 net/minecraft/advancements/IRequirementsStrategy + m (Ljava/util/Collection;)[[Ljava/lang/String; createRequirements createRequirements + m (Ljava/util/Collection;)[[Ljava/lang/String; method_16774 func_223249_b_ + m (Ljava/util/Collection;)[[Ljava/lang/String; method_16773 func_223248_a_ + f Lnet/minecraft/class_193; field_1257 OR + f Lnet/minecraft/class_193; field_16882 AND +c net/minecraft/class_194 net/minecraft/advancements/AdvancementTreeNode + m ()V method_847 firstWalk + m (Lnet/minecraft/class_161;Lnet/minecraft/class_194;)Lnet/minecraft/class_194; method_846 buildSubTree + m (Lnet/minecraft/class_194;Lnet/minecraft/class_194;)Lnet/minecraft/class_194; method_845 getAncestor + m (Lnet/minecraft/class_194;F)V method_848 moveSubtree + m ()V method_850 executeShifts + m ()Lnet/minecraft/class_194; method_844 getLastChild + m ()Lnet/minecraft/class_194; method_849 getFirstChild + m (FIF)F method_842 secondWalk + m (Lnet/minecraft/class_161;)V method_852 layout + m (Lnet/minecraft/class_194;)Lnet/minecraft/class_194; method_841 apportion + m ()V method_851 updatePosition + m (F)V method_843 thirdWalk + f F field_1268 mod + f F field_1266 change + f F field_1265 shift + f F field_1269 y + f I field_1259 x + f Lnet/minecraft/class_194; field_1264 thread + f Lnet/minecraft/class_194; field_1262 ancestor + f I field_1261 index + f Ljava/util/List; field_1267 children + f Lnet/minecraft/class_194; field_1260 sibling + f Lnet/minecraft/class_161; field_1263 advancement + f Lnet/minecraft/class_194; field_1258 parent +c net/minecraft/class_195 net/minecraft/advancements/criterion/CriterionInstance + m ()Lnet/minecraft/class_2048$class_5258; method_27790 getPlayerCondition + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2960; field_1270 criterion + f Lnet/minecraft/class_2048$class_5258; field_24381 playerCondition +c net/minecraft/class_4708 net/minecraft/advancements/criterion/BeeNestDestroyedTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_4708$class_4709; method_23877 deserializeTrigger + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_23874 func_226222_a_ + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2248; method_23873 deserializeBlock + m ()Lnet/minecraft/class_2960; method_23876 func_226224_b_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1799;ILnet/minecraft/class_4708$class_4709;)Z method_23872 func_226220_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2248;Lnet/minecraft/class_1799;I)V method_23875 test + f Lnet/minecraft/class_2960; field_21568 ID +c net/minecraft/class_4708$class_4709 net/minecraft/advancements/criterion/BeeNestDestroyedTrigger$Instance + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2073$class_2074;Lnet/minecraft/class_2096$class_2100;)Lnet/minecraft/class_4708$class_4709; method_23879 createNewInstance + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1799;I)Z method_23878 test + f Lnet/minecraft/class_2096$class_2100; field_21571 beesContained + f Lnet/minecraft/class_2073; field_21570 itemPredicate + f Lnet/minecraft/class_2248; field_21569 block +c net/minecraft/class_4550 net/minecraft/advancements/criterion/BlockPredicate + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4550; method_22453 deserialize + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_22454 test + m ()Lcom/google/gson/JsonElement; method_22452 serialize + f Lnet/minecraft/class_2248; field_20694 block + f Lnet/minecraft/class_2105; field_20696 nbtPredicate + f Lnet/minecraft/class_3494; field_20693 tag + f Lnet/minecraft/class_4550; field_20692 ANY + f Lnet/minecraft/class_4559; field_20695 statePredicate +c net/minecraft/class_4550$class_4710 net/minecraft/advancements/criterion/BlockPredicate$Builder + m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_4550$class_4710; method_29233 setTag + m ()Lnet/minecraft/class_4550$class_4710; method_23880 createBuilder + m (Lnet/minecraft/class_4559;)Lnet/minecraft/class_4550$class_4710; method_27963 setStatePredicate + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4550$class_4710; method_27962 setBlock + m ()Lnet/minecraft/class_4550; method_23882 build + f Lnet/minecraft/class_3494; field_21573 tag + f Lnet/minecraft/class_2105; field_21575 nbtPredicate + f Lnet/minecraft/class_4559; field_21574 statePredicate + f Lnet/minecraft/class_2248; field_21572 block +c net/minecraft/class_196 net/minecraft/advancements/criterion/BredAnimalsTrigger + m (Lnet/minecraft/class_47;Lnet/minecraft/class_47;Lnet/minecraft/class_47;Lnet/minecraft/class_196$class_198;)Z method_22455 func_233510_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_196$class_198; method_854 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_853 access$000 + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1429;Lnet/minecraft/class_1429;Lnet/minecraft/class_1296;)V method_855 trigger + f Lnet/minecraft/class_2960; field_1271 ID +c net/minecraft/class_196$class_198 net/minecraft/advancements/criterion/BredAnimalsTrigger$Instance + m (Lnet/minecraft/class_47;Lnet/minecraft/class_47;Lnet/minecraft/class_47;)Z method_862 test + m ()Lnet/minecraft/class_196$class_198; method_860 any + m (Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_196$class_198; method_861 forParent + m (Lnet/minecraft/class_2048;Lnet/minecraft/class_2048;Lnet/minecraft/class_2048;)Lnet/minecraft/class_196$class_198; method_29918 forAll + f Lnet/minecraft/class_2048$class_5258; field_1275 child + f Lnet/minecraft/class_2048$class_5258; field_1277 partner + f Lnet/minecraft/class_2048$class_5258; field_1276 parent +c net/minecraft/class_1996 net/minecraft/advancements/criterion/BrewedPotionTrigger + m ()Lnet/minecraft/class_2960; method_8783 access$000 + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1842;)V method_8784 trigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_1996$class_1998; method_8785 deserializeTrigger + m (Lnet/minecraft/class_1842;Lnet/minecraft/class_1996$class_1998;)Z method_22456 func_226301_a_ + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17826 func_215103_a + f Lnet/minecraft/class_2960; field_9488 ID +c net/minecraft/class_1996$class_1998 net/minecraft/advancements/criterion/BrewedPotionTrigger$Instance + m ()Lnet/minecraft/class_1996$class_1998; method_8791 brewedPotion + m (Lnet/minecraft/class_1842;)Z method_8790 test + f Lnet/minecraft/class_1842; field_9492 potion +c net/minecraft/class_1999 net/minecraft/advancements/criterion/ChangeDimensionTrigger + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;Lnet/minecraft/class_1999$class_2001;)Z method_22457 func_233550_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_1999$class_2001; method_8793 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_8792 access$000 + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;)V method_8794 testForAll + f Lnet/minecraft/class_2960; field_9493 ID +c net/minecraft/class_1999$class_2001 net/minecraft/advancements/criterion/ChangeDimensionTrigger$Instance + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;)Z method_8800 test + m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_1999$class_2001; method_8799 toWorld + f Lnet/minecraft/class_5321; field_9497 from + f Lnet/minecraft/class_5321; field_9498 to +c net/minecraft/class_2002 net/minecraft/advancements/criterion/ChanneledLightningTrigger + m (Ljava/util/List;Lnet/minecraft/class_2002$class_2004;)Z method_22458 func_233673_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;)Lnet/minecraft/class_47; method_27791 func_233674_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2002$class_2004; method_8801 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_8802 access$000 + m (Lnet/minecraft/class_3222;Ljava/util/Collection;)V method_8803 trigger + f Lnet/minecraft/class_2960; field_9499 ID +c net/minecraft/class_2002$class_2004 net/minecraft/advancements/criterion/ChanneledLightningTrigger$Instance + m (I)[Lnet/minecraft/class_2048$class_5258; method_27792 func_233675_a_ + m ([Lnet/minecraft/class_2048;)Lnet/minecraft/class_2002$class_2004; method_8809 channeledLightning + m (Ljava/util/Collection;)Z method_8808 test + f [Lnet/minecraft/class_2048$class_5258; field_9503 victims +c net/minecraft/class_2006 net/minecraft/advancements/criterion/ConstructBeaconTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2006$class_2008; method_8811 deserializeTrigger + m (Lnet/minecraft/class_2580;Lnet/minecraft/class_2006$class_2008;)Z method_22459 func_226308_a_ + m ()Lnet/minecraft/class_2960; method_8810 access$000 + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2580;)V method_8812 trigger + f Lnet/minecraft/class_2960; field_9504 ID +c net/minecraft/class_2006$class_2008 net/minecraft/advancements/criterion/ConstructBeaconTrigger$Instance + m (Lnet/minecraft/class_2096$class_2100;)Lnet/minecraft/class_2006$class_2008; method_8818 forLevel + m (Lnet/minecraft/class_2580;)Z method_8817 test + f Lnet/minecraft/class_2096$class_2100; field_9508 level +c net/minecraft/class_2010 net/minecraft/advancements/criterion/ConsumeItemTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;)V method_8821 trigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2010$class_2012; method_8820 deserializeTrigger + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2010$class_2012;)Z method_22460 func_226325_a_ + m ()Lnet/minecraft/class_2960; method_8819 access$000 + f Lnet/minecraft/class_2960; field_9509 ID +c net/minecraft/class_2010$class_2012 net/minecraft/advancements/criterion/ConsumeItemTrigger$Instance + m ()Lnet/minecraft/class_2010$class_2012; method_8827 any + m (Lnet/minecraft/class_1799;)Z method_8826 test + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2010$class_2012; method_8828 forItem + f Lnet/minecraft/class_2073; field_9513 item +c net/minecraft/class_2014 net/minecraft/advancements/criterion/CuredZombieVillagerTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2014$class_2016; method_8830 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_8829 access$000 + m (Lnet/minecraft/class_47;Lnet/minecraft/class_47;Lnet/minecraft/class_2014$class_2016;)Z method_22461 func_233969_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1642;Lnet/minecraft/class_1646;)V method_8831 trigger + f Lnet/minecraft/class_2960; field_9514 ID +c net/minecraft/class_2014$class_2016 net/minecraft/advancements/criterion/CuredZombieVillagerTrigger$Instance + m (Lnet/minecraft/class_47;Lnet/minecraft/class_47;)Z method_8837 test + m ()Lnet/minecraft/class_2014$class_2016; method_8836 any + f Lnet/minecraft/class_2048$class_5258; field_9518 zombie + f Lnet/minecraft/class_2048$class_5258; field_9519 villager +c net/minecraft/class_2019 net/minecraft/advancements/criterion/DamagePredicate + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2019; method_8839 deserialize + m ()Lcom/google/gson/JsonElement; method_8840 serialize + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1282;FFZ)Z method_8838 test + f Lnet/minecraft/class_2048; field_9521 sourceEntity + f Lnet/minecraft/class_2096$class_2099; field_9524 taken + f Ljava/lang/Boolean; field_9522 blocked + f Lnet/minecraft/class_2019; field_9520 ANY + f Lnet/minecraft/class_2022; field_9525 type + f Lnet/minecraft/class_2096$class_2099; field_9523 dealt +c net/minecraft/class_2019$class_2020 net/minecraft/advancements/criterion/DamagePredicate$Builder + m ()Lnet/minecraft/class_2019$class_2020; method_8844 create + m (Ljava/lang/Boolean;)Lnet/minecraft/class_2019$class_2020; method_8841 blocked + m (Lnet/minecraft/class_2022$class_2023;)Lnet/minecraft/class_2019$class_2020; method_8842 type + m ()Lnet/minecraft/class_2019; method_8843 build + f Lnet/minecraft/class_2048; field_9528 sourceEntity + f Lnet/minecraft/class_2096$class_2099; field_9530 dealt + f Lnet/minecraft/class_2022; field_9529 type + f Lnet/minecraft/class_2096$class_2099; field_9527 taken + f Ljava/lang/Boolean; field_9526 blocked +c net/minecraft/class_2022 net/minecraft/advancements/criterion/DamageSourcePredicate + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Ljava/lang/Boolean; method_8849 optionalBoolean + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/Boolean;)V method_8850 addProperty + m ()Lcom/google/gson/JsonElement; method_8848 serialize + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1282;)Z method_8847 test + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_243;Lnet/minecraft/class_1282;)Z method_8845 test + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2022; method_8846 deserialize + f Lnet/minecraft/class_2022; field_9533 ANY + f Ljava/lang/Boolean; field_9535 isProjectile + f Ljava/lang/Boolean; field_9536 isExplosion + f Ljava/lang/Boolean; field_9532 bypassesArmor + f Lnet/minecraft/class_2048; field_9539 sourceEntity + f Ljava/lang/Boolean; field_9531 bypassesInvulnerability + f Ljava/lang/Boolean; field_9537 bypassesMagic + f Lnet/minecraft/class_2048; field_9534 directEntity + f Ljava/lang/Boolean; field_9540 isFire + f Ljava/lang/Boolean; field_9541 isMagic + f Ljava/lang/Boolean; field_9538 isLightning +c net/minecraft/class_2022$class_2023 net/minecraft/advancements/criterion/DamageSourcePredicate$Builder + m (Ljava/lang/Boolean;)Lnet/minecraft/class_2022$class_2023; method_8853 isLightning + m (Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_2022$class_2023; method_8854 direct + m ()Lnet/minecraft/class_2022$class_2023; method_8855 damageType + m ()Lnet/minecraft/class_2022; method_8851 build + m (Ljava/lang/Boolean;)Lnet/minecraft/class_2022$class_2023; method_8852 isProjectile + f Ljava/lang/Boolean; field_9551 isLightning + f Ljava/lang/Boolean; field_9546 isExplosion + f Lnet/minecraft/class_2048; field_9545 sourceEntity + f Ljava/lang/Boolean; field_9547 isProjectile + f Lnet/minecraft/class_2048; field_9544 directEntity + f Ljava/lang/Boolean; field_9543 bypassesInvulnerability + f Ljava/lang/Boolean; field_9548 bypassesArmor + f Ljava/lang/Boolean; field_9550 isMagic + f Ljava/lang/Boolean; field_9549 isFire + f Ljava/lang/Boolean; field_9542 bypassesMagic +c net/minecraft/class_5257 net/minecraft/loot/ConditionArrayParser + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_52; method_27798 func_234052_a_ + m (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V method_27797 func_234051_a_ + m (Lcom/google/gson/JsonArray;Ljava/lang/String;Lnet/minecraft/class_176;)[Lnet/minecraft/class_5341; method_27796 func_234050_a_ + m ()Lnet/minecraft/class_2960; method_27795 func_234049_a_ + f Lnet/minecraft/class_4567; field_24385 field_234047_c_ + f Lnet/minecraft/class_2960; field_24384 field_234046_b_ + f Lcom/google/gson/Gson; field_24386 field_234048_d_ + f Lorg/apache/logging/log4j/Logger; field_24383 field_234045_a_ +c net/minecraft/class_2025 net/minecraft/advancements/criterion/DistancePredicate + m (Lnet/minecraft/class_2096$class_2099;)Lnet/minecraft/class_2025; method_8856 forVertical + m ()Lcom/google/gson/JsonElement; method_8858 serialize + m (Lnet/minecraft/class_2096$class_2099;)Lnet/minecraft/class_2025; method_8860 forHorizontal + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2025; method_8857 deserialize + m (DDDDDD)Z method_8859 test + f Lnet/minecraft/class_2096$class_2099; field_9557 horizontal + f Lnet/minecraft/class_2025; field_9553 ANY + f Lnet/minecraft/class_2096$class_2099; field_9556 absolute + f Lnet/minecraft/class_2096$class_2099; field_9554 x + f Lnet/minecraft/class_2096$class_2099; field_9555 y + f Lnet/minecraft/class_2096$class_2099; field_9552 z +c net/minecraft/class_2027 net/minecraft/advancements/criterion/EffectsChangedTrigger + m ()Lnet/minecraft/class_2960; method_8861 access$000 + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2027$class_2029; method_8862 deserializeTrigger + m (Lnet/minecraft/class_3222;)V method_8863 trigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2027$class_2029;)Z method_22462 func_226524_a_ + f Lnet/minecraft/class_2960; field_9558 ID +c net/minecraft/class_2027$class_2029 net/minecraft/advancements/criterion/EffectsChangedTrigger$Instance + m (Lnet/minecraft/class_2102;)Lnet/minecraft/class_2027$class_2029; method_8869 forEffect + m (Lnet/minecraft/class_3222;)Z method_8868 test + f Lnet/minecraft/class_2102; field_9562 effects +c net/minecraft/class_2030 net/minecraft/advancements/criterion/EnchantedItemTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;I)V method_8870 trigger + m ()Lnet/minecraft/class_2960; method_8871 access$000 + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2030$class_2032; method_8872 deserializeTrigger + m (Lnet/minecraft/class_1799;ILnet/minecraft/class_2030$class_2032;)Z method_22463 func_226528_a_ + f Lnet/minecraft/class_2960; field_9563 ID +c net/minecraft/class_2030$class_2032 net/minecraft/advancements/criterion/EnchantedItemTrigger$Instance + m ()Lnet/minecraft/class_2030$class_2032; method_8877 any + m (Lnet/minecraft/class_1799;I)Z method_8878 test + f Lnet/minecraft/class_2096$class_2100; field_9568 levels + f Lnet/minecraft/class_2073; field_9567 item +c net/minecraft/class_2035 net/minecraft/advancements/criterion/EnchantmentPredicate + m (Lcom/google/gson/JsonElement;)[Lnet/minecraft/class_2035; method_8879 deserializeArray + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17849 func_217954_a + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2035; method_8882 deserialize + m (Ljava/util/Map;)Z method_8880 test + m ()Lcom/google/gson/JsonElement; method_8881 serialize + f Lnet/minecraft/class_1887; field_9569 enchantment + f Lnet/minecraft/class_2035; field_9571 ANY + f Lnet/minecraft/class_2096$class_2100; field_9570 levels + f [Lnet/minecraft/class_2035; field_20687 enchantments +c net/minecraft/class_2037 net/minecraft/advancements/criterion/EnterBlockTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2680;)V method_8885 trigger + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2248; method_22466 deserializeBlock + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2037$class_2039; method_8883 deserializeTrigger + m (Lnet/minecraft/class_2248;Ljava/lang/String;)V method_22464 func_226548_a_ + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17850 func_226551_a_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2037$class_2039;)Z method_22465 func_226549_a_ + m ()Lnet/minecraft/class_2960; method_8884 access$000 + f Lnet/minecraft/class_2960; field_9572 ID +c net/minecraft/class_2037$class_2039 net/minecraft/advancements/criterion/EnterBlockTrigger$Instance + m (Lnet/minecraft/class_2680;)Z method_8891 test + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2037$class_2039; method_8890 forBlock + f Lnet/minecraft/class_2248; field_9576 block + f Lnet/minecraft/class_4559; field_9577 properties +c net/minecraft/class_3735 net/minecraft/advancements/criterion/EntityEquipmentPredicate + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_3735; method_16224 deserialize + m (Lnet/minecraft/class_1297;)Z method_16226 test + m ()Lcom/google/gson/JsonElement; method_16225 serialize + f Lnet/minecraft/class_2073; field_16489 feet + f Lnet/minecraft/class_3735; field_16485 ANY + f Lnet/minecraft/class_2073; field_16488 legs + f Lnet/minecraft/class_2073; field_16487 chest + f Lnet/minecraft/class_2073; field_16483 head + f Lnet/minecraft/class_2073; field_16484 offHand + f Lnet/minecraft/class_2073; field_16486 mainHand + f Lnet/minecraft/class_3735; field_19240 WEARING_ILLAGER_BANNER +c net/minecraft/class_3735$class_5278 net/minecraft/advancements/criterion/EntityEquipmentPredicate$Builder + m (Lnet/minecraft/class_2073;)Lnet/minecraft/class_3735$class_5278; method_27966 setHeadCondition + m (Lnet/minecraft/class_2073;)Lnet/minecraft/class_3735$class_5278; method_27968 setChestCondition + m (Lnet/minecraft/class_2073;)Lnet/minecraft/class_3735$class_5278; method_27969 setLegsCondition + m ()Lnet/minecraft/class_3735; method_27967 build + m ()Lnet/minecraft/class_3735$class_5278; method_27965 createBuilder + m (Lnet/minecraft/class_2073;)Lnet/minecraft/class_3735$class_5278; method_27970 setFeetCondition + f Lnet/minecraft/class_2073; field_24484 legs + f Lnet/minecraft/class_2073; field_24483 chest + f Lnet/minecraft/class_2073; field_24485 feet + f Lnet/minecraft/class_2073; field_24486 mainHand + f Lnet/minecraft/class_2073; field_24482 head + f Lnet/minecraft/class_2073; field_24487 offHand +c net/minecraft/class_2040 net/minecraft/advancements/criterion/EntityFlagsPredicate + m (Lnet/minecraft/class_1297;)Z method_8892 test + m ()Lcom/google/gson/JsonElement; method_8894 serialize + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2040; method_8893 deserialize + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/Boolean;)V method_8896 putBoolean + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Ljava/lang/Boolean; method_8895 getBoolean + f Ljava/lang/Boolean; field_9582 sneaking + f Ljava/lang/Boolean; field_9579 sprinting + f Ljava/lang/Boolean; field_9578 swimming + f Ljava/lang/Boolean; field_9583 baby + f Lnet/minecraft/class_2040; field_9581 ALWAYS_TRUE + f Ljava/lang/Boolean; field_9580 onFire +c net/minecraft/class_2040$class_2041 net/minecraft/advancements/criterion/EntityFlagsPredicate$Builder + m (Ljava/lang/Boolean;)Lnet/minecraft/class_2040$class_2041; method_29935 isBaby + m ()Lnet/minecraft/class_2040; method_8899 build + m ()Lnet/minecraft/class_2040$class_2041; method_8897 create + m (Ljava/lang/Boolean;)Lnet/minecraft/class_2040$class_2041; method_8898 onFire + f Ljava/lang/Boolean; field_9584 baby + f Ljava/lang/Boolean; field_9585 swimming + f Ljava/lang/Boolean; field_9588 sprinting + f Ljava/lang/Boolean; field_9586 sneaking + f Ljava/lang/Boolean; field_9587 onFire +c net/minecraft/class_2044 net/minecraft/advancements/criterion/EntityHurtPlayerTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1282;FFZLnet/minecraft/class_2044$class_2046;)Z method_22468 func_226603_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1282;FFZ)V method_22467 trigger + m ()Lnet/minecraft/class_2960; method_8900 access$000 + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2044$class_2046; method_8902 deserializeTrigger + f Lnet/minecraft/class_2960; field_9589 ID +c net/minecraft/class_2044$class_2046 net/minecraft/advancements/criterion/EntityHurtPlayerTrigger$Instance + m (Lnet/minecraft/class_2019$class_2020;)Lnet/minecraft/class_2044$class_2046; method_8908 forDamage + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1282;FFZ)Z method_8907 test + f Lnet/minecraft/class_2019; field_9593 damage +c net/minecraft/class_2048 net/minecraft/advancements/criterion/EntityPredicate + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2048; method_8913 deserialize + m ()Lcom/google/gson/JsonElement; method_8912 serialize + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;)Z method_8914 test + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;)Lnet/minecraft/class_47; method_27802 getLootContext + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)Z method_8909 test + f Lnet/minecraft/class_2050; field_9595 type + f Lnet/minecraft/class_2048; field_24489 targetCondition + f Lnet/minecraft/class_2048; field_9599 ANY + f Lnet/minecraft/class_2960; field_16317 catType + f Lnet/minecraft/class_2048; field_24488 mountCondition + f Ljava/lang/String; field_20698 team + f Lnet/minecraft/class_4553; field_20697 player + f Lnet/minecraft/class_2090; field_9596 location + f Lnet/minecraft/class_4965; field_23135 fishingCondition + f Lnet/minecraft/class_3735; field_16490 equipment + f Lnet/minecraft/class_2105; field_9600 nbt + f Lnet/minecraft/class_2040; field_9597 flags + f Lnet/minecraft/class_2102; field_9594 effects + f Lnet/minecraft/class_2025; field_9601 distance +c net/minecraft/class_2048$class_2049 net/minecraft/advancements/criterion/EntityPredicate$Builder + m (Lnet/minecraft/class_2105;)Lnet/minecraft/class_2048$class_2049; method_8915 nbt + m ()Lnet/minecraft/class_2048; method_8920 build + m ()Lnet/minecraft/class_2048$class_2049; method_8916 create + m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2048$class_2049; method_8922 type + m (Lnet/minecraft/class_3735;)Lnet/minecraft/class_2048$class_2049; method_16227 equipment + m (Lnet/minecraft/class_2090;)Lnet/minecraft/class_2048$class_2049; method_8918 location + m (Lnet/minecraft/class_2102;)Lnet/minecraft/class_2048$class_2049; method_8923 effects + m (Lnet/minecraft/class_2025;)Lnet/minecraft/class_2048$class_2049; method_8924 distance + m (Lnet/minecraft/class_4965;)Lnet/minecraft/class_2048$class_2049; method_26090 fishing + m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_2048$class_2049; method_8921 type + m (Lnet/minecraft/class_2050;)Lnet/minecraft/class_2048$class_2049; method_8917 type + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2048$class_2049; method_16112 catTypeOrNull + m (Ljava/lang/String;)Lnet/minecraft/class_2048$class_2049; method_22470 team + m (Lnet/minecraft/class_2048;)Lnet/minecraft/class_2048$class_2049; method_27971 mount + m (Lnet/minecraft/class_2048;)Lnet/minecraft/class_2048$class_2049; method_27972 target + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2048$class_2049; method_16113 catType + m (Lnet/minecraft/class_4553;)Lnet/minecraft/class_2048$class_2049; method_22469 player + m (Lnet/minecraft/class_2040;)Lnet/minecraft/class_2048$class_2049; method_8919 flags + f Ljava/lang/String; field_20700 team + f Lnet/minecraft/class_2040; field_9606 flags + f Lnet/minecraft/class_2102; field_9605 effects + f Lnet/minecraft/class_4553; field_20699 player + f Lnet/minecraft/class_2048; field_24490 mount + f Lnet/minecraft/class_2050; field_9607 type + f Lnet/minecraft/class_2048; field_24491 target + f Lnet/minecraft/class_2025; field_9602 distance + f Lnet/minecraft/class_2105; field_9603 nbt + f Lnet/minecraft/class_4965; field_23136 fishing + f Lnet/minecraft/class_3735; field_16491 equipment + f Lnet/minecraft/class_2960; field_16318 catType + f Lnet/minecraft/class_2090; field_9604 location +c net/minecraft/class_2048$class_5258 net/minecraft/advancements/criterion/EntityPredicate$AndPredicate + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lnet/minecraft/class_5257;)[Lnet/minecraft/class_2048$class_5258; method_27809 deserialize + m ([Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5267;)Lcom/google/gson/JsonElement; method_27808 serializeConditionsIn + m ([Lnet/minecraft/class_5341;)Lnet/minecraft/class_2048$class_5258; method_27973 serializePredicate + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2048$class_5258; method_27805 deserializeJSONObject + m (Lnet/minecraft/class_2048;)Lnet/minecraft/class_2048$class_5258; method_27803 createAndFromEntityCondition + m (Ljava/lang/String;Lnet/minecraft/class_5257;Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2048$class_5258; method_27807 fromJSONElement + m (Lnet/minecraft/class_5267;)Lcom/google/gson/JsonElement; method_27804 serializeConditions + m (Lnet/minecraft/class_47;)Z method_27806 testContext + f Ljava/util/function/Predicate; field_24390 lootContext + f Lnet/minecraft/class_2048$class_5258; field_24388 ANY_AND + f [Lnet/minecraft/class_5341; field_24389 lootConditions +c net/minecraft/class_2048$1 net/minecraft/advancements/criterion/EntityPredicate$1 +c net/minecraft/class_2050 net/minecraft/advancements/criterion/EntityTypePredicate + m (Lnet/minecraft/class_1299;)Z method_8925 test + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2050; method_8928 deserialize + m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2050; method_8926 fromTag + m ()Lcom/google/gson/JsonElement; method_8927 serialize + m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_2050; method_8929 fromType + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17854 func_217997_a + f Lnet/minecraft/class_2050; field_9609 ANY + f Lcom/google/common/base/Joiner; field_9608 JOINER +c net/minecraft/class_2050$class_2052 net/minecraft/advancements/criterion/EntityTypePredicate$TypePredicate + f Lnet/minecraft/class_1299; field_9611 type +c net/minecraft/class_2050$class_2051 net/minecraft/advancements/criterion/EntityTypePredicate$TagPredicate + f Lnet/minecraft/class_3494; field_9610 tag +c net/minecraft/class_2050$1 net/minecraft/advancements/criterion/EntityTypePredicate$1 +c net/minecraft/class_2054 net/minecraft/advancements/criterion/FilledBucketTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2054$class_2056; method_8931 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_8930 access$000 + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2054$class_2056;)Z method_22471 func_226627_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;)V method_8932 trigger + f Lnet/minecraft/class_2960; field_9612 ID +c net/minecraft/class_2054$class_2056 net/minecraft/advancements/criterion/FilledBucketTrigger$Instance + m (Lnet/minecraft/class_2073;)Lnet/minecraft/class_2054$class_2056; method_8937 forItem + m (Lnet/minecraft/class_1799;)Z method_8938 test + f Lnet/minecraft/class_2073; field_9616 item +c net/minecraft/class_4965 net/minecraft/loot/FishingPredicate + m (Z)Lnet/minecraft/class_4965; method_26095 func_234640_a_ + m (Lnet/minecraft/class_1297;)Z method_26093 func_234638_a_ + m ()Lcom/google/gson/JsonElement; method_26092 func_234637_a_ + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4965; method_26094 func_234639_a_ + f Lnet/minecraft/class_4965; field_23137 field_234635_a_ + f Z field_23138 field_234636_b_ +c net/minecraft/class_2058 net/minecraft/advancements/criterion/FishingRodHookedTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2058$class_2060; method_8941 deserializeTrigger + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;Ljava/util/Collection;Lnet/minecraft/class_2058$class_2060;)Z method_22472 func_234658_a_ + m ()Lnet/minecraft/class_2960; method_8940 access$000 + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_1536;Ljava/util/Collection;)V method_8939 trigger + f Lnet/minecraft/class_2960; field_9617 ID +c net/minecraft/class_2058$class_2060 net/minecraft/advancements/criterion/FishingRodHookedTrigger$Instance + m (Lnet/minecraft/class_2073;Lnet/minecraft/class_2048;Lnet/minecraft/class_2073;)Lnet/minecraft/class_2058$class_2060; method_8947 create + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;Ljava/util/Collection;)Z method_27810 test + f Lnet/minecraft/class_2073; field_9623 item + f Lnet/minecraft/class_2048$class_5258; field_24391 entity + f Lnet/minecraft/class_2073; field_9621 rod +c net/minecraft/class_4551 net/minecraft/advancements/criterion/FluidPredicate + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_22475 test + m ()Lcom/google/gson/JsonElement; method_22473 serialize + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4551; method_22474 deserialize + f Lnet/minecraft/class_3494; field_20709 fluidTag + f Lnet/minecraft/class_4559; field_20711 stateCondition + f Lnet/minecraft/class_3611; field_20710 fluid + f Lnet/minecraft/class_4551; field_20708 ANY +c net/minecraft/class_2062 net/minecraft/advancements/criterion/ImpossibleTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2062$class_2063; method_8949 deserialize + m ()Lnet/minecraft/class_2960; method_8948 access$000 + f Lnet/minecraft/class_2960; field_9624 ID +c net/minecraft/class_2062$class_2063 net/minecraft/advancements/criterion/ImpossibleTrigger$Instance +c net/minecraft/class_2066 net/minecraft/advancements/criterion/InventoryChangeTrigger + m (Lnet/minecraft/class_1661;Lnet/minecraft/class_1799;IIILnet/minecraft/class_2066$class_2068;)Z method_22476 func_234802_a_ + m ()Lnet/minecraft/class_2960; method_8951 access$000 + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2066$class_2068; method_8952 deserializeTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1661;Lnet/minecraft/class_1799;)V method_8950 test + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1661;Lnet/minecraft/class_1799;III)V method_24362 trigger + f Lnet/minecraft/class_2960; field_9625 ID +c net/minecraft/class_2066$class_2068 net/minecraft/advancements/criterion/InventoryChangeTrigger$Instance + m ([Lnet/minecraft/class_2073;)Lnet/minecraft/class_2066$class_2068; method_8957 forItems + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2073;)Z method_24363 func_234806_a_ + m ([Lnet/minecraft/class_1935;)Lnet/minecraft/class_2066$class_2068; method_8959 forItems + m (Lnet/minecraft/class_1661;Lnet/minecraft/class_1799;III)Z method_8958 test + f Lnet/minecraft/class_2096$class_2100; field_9629 occupied + f [Lnet/minecraft/class_2073; field_9632 items + f Lnet/minecraft/class_2096$class_2100; field_9631 empty + f Lnet/minecraft/class_2096$class_2100; field_9630 full +c net/minecraft/class_2069 net/minecraft/advancements/criterion/ItemDurabilityTrigger + m (Lnet/minecraft/class_1799;ILnet/minecraft/class_2069$class_2071;)Z method_22477 func_226653_a_ + m ()Lnet/minecraft/class_2960; method_8961 access$000 + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;I)V method_8960 trigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2069$class_2071; method_8962 deserializeTrigger + f Lnet/minecraft/class_2960; field_9633 ID +c net/minecraft/class_2069$class_2071 net/minecraft/advancements/criterion/ItemDurabilityTrigger$Instance + m (Lnet/minecraft/class_1799;I)Z method_8968 test + m (Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_2073;Lnet/minecraft/class_2096$class_2100;)Lnet/minecraft/class_2069$class_2071; method_8967 create + f Lnet/minecraft/class_2073; field_9637 item + f Lnet/minecraft/class_2096$class_2100; field_9638 durability + f Lnet/minecraft/class_2096$class_2100; field_9639 delta +c net/minecraft/class_5279 net/minecraft/advancements/criterion/ThrownItemPickedUpByEntityTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_5279$class_5280; method_27974 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_27977 func_234832_b_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_47;Lnet/minecraft/class_5279$class_5280;)Z method_27976 func_234831_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_1297;)V method_27975 test + f Lnet/minecraft/class_2960; field_24492 ID +c net/minecraft/class_5279$class_5280 net/minecraft/advancements/criterion/ThrownItemPickedUpByEntityTrigger$Instance + m (Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_2073$class_2074;Lnet/minecraft/class_2048$class_5258;)Lnet/minecraft/class_5279$class_5280; method_27978 create + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Z method_27979 test + f Lnet/minecraft/class_2073; field_24493 stack + f Lnet/minecraft/class_2048$class_5258; field_24494 entity +c net/minecraft/class_2073 net/minecraft/advancements/criterion/ItemPredicate + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17871 func_218005_a + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17872 func_218004_b + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2073; method_8969 deserialize + m (Lnet/minecraft/class_1799;)Z method_8970 test + m ()Lcom/google/gson/JsonElement; method_8971 serialize + m (Lcom/google/gson/JsonElement;)[Lnet/minecraft/class_2073; method_8972 deserializeArray + f Lnet/minecraft/class_2096$class_2100; field_9646 durability + f [Lnet/minecraft/class_2035; field_20689 bookEnchantments + f Lnet/minecraft/class_1842; field_9642 potion + f Lnet/minecraft/class_2073; field_9640 ANY + f Lnet/minecraft/class_2096$class_2100; field_9641 count + f Lnet/minecraft/class_2105; field_9645 nbt + f Lnet/minecraft/class_3494; field_9643 tag + f [Lnet/minecraft/class_2035; field_9647 enchantments + f Lnet/minecraft/class_1792; field_9644 item +c net/minecraft/class_2073$class_2074 net/minecraft/advancements/criterion/ItemPredicate$Builder + m ()Lnet/minecraft/class_2073$class_2074; method_8973 create + m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2073$class_2074; method_8975 tag + m (Lnet/minecraft/class_2035;)Lnet/minecraft/class_2073$class_2074; method_8978 enchantment + m ()Lnet/minecraft/class_2073; method_8976 build + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2073$class_2074; method_20399 nbt + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2073$class_2074; method_8977 item + f Lnet/minecraft/class_1792; field_9650 item + f Ljava/util/List; field_20690 bookEnchantments + f Lnet/minecraft/class_2096$class_2100; field_9653 durability + f Ljava/util/List; field_9649 enchantments + f Lnet/minecraft/class_2096$class_2100; field_9648 count + f Lnet/minecraft/class_1842; field_9651 potion + f Lnet/minecraft/class_3494; field_9652 tag + f Lnet/minecraft/class_2105; field_9654 nbt +c net/minecraft/class_4711 net/minecraft/advancements/criterion/RightClickBlockWithItemTrigger + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3222;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;Lnet/minecraft/class_4711$class_4712;)Z method_23888 func_226694_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_4711$class_4712; method_23890 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_27980 func_234850_b_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_23889 test + f Lnet/minecraft/class_2960; field_21576 ID +c net/minecraft/class_4711$class_4712 net/minecraft/advancements/criterion/RightClickBlockWithItemTrigger$Instance + m (Lnet/minecraft/class_2090$class_2091;Lnet/minecraft/class_2073$class_2074;)Lnet/minecraft/class_4711$class_4712; method_27981 create + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)Z method_23892 test + f Lnet/minecraft/class_2073; field_21579 stack + f Lnet/minecraft/class_2090; field_24495 location +c net/minecraft/class_2076 net/minecraft/advancements/criterion/KilledByCrossbowTrigger + m ()Lnet/minecraft/class_2960; method_8981 func_215106_b + m (Ljava/util/List;Ljava/util/Set;Lnet/minecraft/class_2076$class_2078;)Z method_22478 func_234940_a_ + m (Lnet/minecraft/class_3222;Ljava/util/Collection;)V method_8980 test + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2076$class_2078; method_8979 deserializeTrigger + f Lnet/minecraft/class_2960; field_9655 ID +c net/minecraft/class_2076$class_2078 net/minecraft/advancements/criterion/KilledByCrossbowTrigger$Instance + m (Lnet/minecraft/class_2096$class_2100;)Lnet/minecraft/class_2076$class_2078; method_8987 fromBounds + m (Ljava/util/Collection;I)Z method_8988 test + m ([Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_2076$class_2078; method_8986 fromBuilders + f Lnet/minecraft/class_2096$class_2100; field_9659 bounds + f [Lnet/minecraft/class_2048$class_5258; field_9660 entities +c net/minecraft/class_2080 net/minecraft/advancements/criterion/KilledTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2080$class_2083; method_8989 deserializeTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_47;Lnet/minecraft/class_1282;Lnet/minecraft/class_2080$class_2083;)Z method_22479 func_226846_a_ + m (Lnet/minecraft/class_2080;)Lnet/minecraft/class_2960; method_8991 access$000 + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;Lnet/minecraft/class_1282;)V method_8990 trigger + f Lnet/minecraft/class_2960; field_9661 id +c net/minecraft/class_2080$class_2083 net/minecraft/advancements/criterion/KilledTrigger$Instance + m (Lnet/minecraft/class_2048$class_2049;Lnet/minecraft/class_2022$class_2023;)Lnet/minecraft/class_2080$class_2083; method_9001 playerKilledEntity + m ()Lnet/minecraft/class_2080$class_2083; method_8998 entityKilledPlayer + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_47;Lnet/minecraft/class_1282;)Z method_9000 test + m ()Lnet/minecraft/class_2080$class_2083; method_8999 playerKilledEntity + m (Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_2080$class_2083; method_8997 playerKilledEntity + f Lnet/minecraft/class_2048$class_5258; field_9668 entity + f Lnet/minecraft/class_2022; field_9667 killingBlow +c net/minecraft/class_2085 net/minecraft/advancements/criterion/LevitationTrigger + m ()Lnet/minecraft/class_2960; method_9007 access$000 + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2085$class_2087; method_9006 deserializeTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_243;ILnet/minecraft/class_2085$class_2087;)Z method_22480 func_226852_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_243;I)V method_9008 trigger + f Lnet/minecraft/class_2960; field_9671 ID +c net/minecraft/class_2085$class_2087 net/minecraft/advancements/criterion/LevitationTrigger$Instance + m (Lnet/minecraft/class_2025;)Lnet/minecraft/class_2085$class_2087; method_9013 forDistance + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_243;I)Z method_9014 test + f Lnet/minecraft/class_2096$class_2100; field_9676 duration + f Lnet/minecraft/class_2025; field_9675 distance +c net/minecraft/class_4552 net/minecraft/advancements/criterion/LightPredicate + m ()Lcom/google/gson/JsonElement; method_22481 serialize + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_22483 test + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4552; method_22482 deserialize + f Lnet/minecraft/class_2096$class_2100; field_20713 bounds + f Lnet/minecraft/class_4552; field_20712 ANY +c net/minecraft/class_2090 net/minecraft/advancements/criterion/LocationPredicate + m (Lnet/minecraft/class_3195;)Lnet/minecraft/class_2090; method_9017 forFeature + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2090; method_9021 deserialize + m ()Lcom/google/gson/JsonElement; method_9019 serialize + m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonElement;)V method_28480 func_235307_a_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5321; method_28481 func_235310_b_ + m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_2090; method_9016 forRegistryKey + m (Lnet/minecraft/class_3218;DDD)Z method_9018 test + m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_2090; method_9022 forBiome + m (Lnet/minecraft/class_3218;FFF)Z method_9020 test + f Lnet/minecraft/class_4551; field_20716 fluid + f Lnet/minecraft/class_5321; field_9683 biome + f Lnet/minecraft/class_5321; field_9686 dimension + f Lnet/minecraft/class_4552; field_20714 light + f Lorg/apache/logging/log4j/Logger; field_24732 LOGGER + f Lnet/minecraft/class_2096$class_2099; field_9682 x + f Ljava/lang/Boolean; field_24500 smokey + f Lnet/minecraft/class_2096$class_2099; field_9681 z + f Lnet/minecraft/class_2090; field_9685 ANY + f Lnet/minecraft/class_2096$class_2099; field_9684 y + f Lnet/minecraft/class_4550; field_20715 block + f Lnet/minecraft/class_3195; field_9687 feature +c net/minecraft/class_2090$class_2091 net/minecraft/advancements/criterion/LocationPredicate$Builder + m ()Lnet/minecraft/class_2090$class_2091; method_22484 builder + m ()Lnet/minecraft/class_2090; method_9023 build + m (Lnet/minecraft/class_4550;)Lnet/minecraft/class_2090$class_2091; method_27989 block + m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_2090$class_2091; method_9024 biome + m (Ljava/lang/Boolean;)Lnet/minecraft/class_2090$class_2091; method_27990 smokey + f Lnet/minecraft/class_4550; field_20718 block + f Lnet/minecraft/class_4552; field_20717 light + f Lnet/minecraft/class_5321; field_9691 dimension + f Lnet/minecraft/class_3195; field_9688 feature + f Ljava/lang/Boolean; field_24501 smokey + f Lnet/minecraft/class_2096$class_2099; field_9692 z + f Lnet/minecraft/class_5321; field_9690 biome + f Lnet/minecraft/class_2096$class_2099; field_9689 y + f Lnet/minecraft/class_4551; field_20719 fluid + f Lnet/minecraft/class_2096$class_2099; field_9693 x +c net/minecraft/class_2092 net/minecraft/advancements/criterion/PositionTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2092$class_2094; method_9026 deserializeTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2092$class_2094;)Z method_22485 func_226923_a_ + m (Lnet/minecraft/class_3222;)V method_9027 trigger + m (Lnet/minecraft/class_2092;)Lnet/minecraft/class_2960; method_9025 access$000 + f Lnet/minecraft/class_2960; field_9694 id +c net/minecraft/class_2092$class_2094 net/minecraft/advancements/criterion/PositionTrigger$Instance + m ()Lnet/minecraft/class_2092$class_2094; method_20400 villageHero + m (Lnet/minecraft/class_3218;DDD)Z method_9033 test + m (Lnet/minecraft/class_2090;)Lnet/minecraft/class_2092$class_2094; method_9034 forLocation + m ()Lnet/minecraft/class_2092$class_2094; method_9032 sleptInBed + f Lnet/minecraft/class_2090; field_9698 location +c net/minecraft/class_5282 net/minecraft/advancements/criterion/PlayerGeneratesContainerLootTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2960;)V method_27993 test + m ()Lnet/minecraft/class_2960; method_27994 func_235479_b_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_5282$class_5283; method_27991 deserializeTrigger + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_5282$class_5283;)Z method_27992 func_235477_a_ + f Lnet/minecraft/class_2960; field_24502 ID +c net/minecraft/class_5282$class_5283 net/minecraft/advancements/criterion/PlayerGeneratesContainerLootTrigger$Instance + m (Lnet/minecraft/class_2960;)Z method_27996 test + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5282$class_5283; method_27995 create + f Lnet/minecraft/class_2960; field_24503 generatedLoot +c net/minecraft/class_2096 net/minecraft/advancements/criterion/MinMaxBounds + m (Lcom/mojang/brigadier/StringReader;Ljava/util/function/Function;Ljava/util/function/Supplier;)Ljava/lang/Number; method_9037 readNumber + m (Lcom/google/gson/JsonElement;Lnet/minecraft/class_2096;Ljava/util/function/BiFunction;Lnet/minecraft/class_2096$class_2097;)Lnet/minecraft/class_2096; method_9039 fromJson + m ()Lcom/google/gson/JsonElement; method_9036 serialize + m ()Ljava/lang/Number; method_9038 getMin + m ()Ljava/lang/Number; method_9042 getMax + m (Lcom/mojang/brigadier/StringReader;)Z method_9040 isAllowedInputChat + m (Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object; method_9035 optionallyFormat + m ()Z method_9041 isUnbounded + m (Lcom/mojang/brigadier/StringReader;Lnet/minecraft/class_2096$class_2098;Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/function/Function;)Lnet/minecraft/class_2096; method_9043 fromReader + f Ljava/lang/Number; field_9702 min + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9700 ERROR_EMPTY + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9701 ERROR_SWAPPED + f Ljava/lang/Number; field_9699 max +c net/minecraft/class_2096$class_2100 net/minecraft/advancements/criterion/MinMaxBounds$IntBound + m (I)Lnet/minecraft/class_2096$class_2100; method_9058 exactly + m (Ljava/lang/Integer;)Ljava/lang/Integer; method_9061 func_211346_b + m (Lcom/mojang/brigadier/StringReader;Ljava/lang/Integer;Ljava/lang/Integer;)Lnet/minecraft/class_2096$class_2100; method_9055 create + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2096$class_2100; method_9060 fromReader + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2096$class_2100; method_9056 fromJson + m (I)Z method_9054 test + m (I)Lnet/minecraft/class_2096$class_2100; method_9053 atLeast + m (Lcom/mojang/brigadier/StringReader;Ljava/util/function/Function;)Lnet/minecraft/class_2096$class_2100; method_9057 fromReader + m (Ljava/lang/Integer;)Ljava/lang/Long; method_9059 square + f Ljava/lang/Long; field_9707 maxSquared + f Ljava/lang/Long; field_9706 minSquared + f Lnet/minecraft/class_2096$class_2100; field_9708 UNBOUNDED +c net/minecraft/class_2096$class_2098 net/minecraft/advancements/criterion/MinMaxBounds$IBoundReader + m (Lcom/mojang/brigadier/StringReader;Ljava/lang/Number;Ljava/lang/Number;)Lnet/minecraft/class_2096; create create +c net/minecraft/class_2096$class_2099 net/minecraft/advancements/criterion/MinMaxBounds$FloatBound + m (Lcom/mojang/brigadier/StringReader;Ljava/lang/Float;Ljava/lang/Float;)Lnet/minecraft/class_2096$class_2099; method_9046 create + m (Lcom/mojang/brigadier/StringReader;Ljava/util/function/Function;)Lnet/minecraft/class_2096$class_2099; method_9048 fromReader + m (F)Z method_9047 test + m (D)Z method_9045 testSquared + m (F)Lnet/minecraft/class_2096$class_2099; method_9050 atLeast + m (Ljava/lang/Float;)Ljava/lang/Double; method_9044 square + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2096$class_2099; method_9049 fromReader + m (Ljava/lang/Float;)Ljava/lang/Float; method_9052 func_211358_b + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2096$class_2099; method_9051 fromJson + f Ljava/lang/Double; field_9704 maxSquared + f Ljava/lang/Double; field_9703 minSquared + f Lnet/minecraft/class_2096$class_2099; field_9705 UNBOUNDED +c net/minecraft/class_2096$class_2097 net/minecraft/advancements/criterion/MinMaxBounds$IBoundFactory + m (Ljava/lang/Number;Ljava/lang/Number;)Lnet/minecraft/class_2096; create create +c net/minecraft/class_2102 net/minecraft/advancements/criterion/MobEffectsPredicate + m (Lnet/minecraft/class_1297;)Z method_9062 test + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17894 func_218022_a + m (Lnet/minecraft/class_1309;)Z method_9067 test + m (Ljava/util/Map;)Z method_9063 test + m ()Lnet/minecraft/class_2102; method_9066 any + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2102; method_9064 deserialize + m ()Lcom/google/gson/JsonElement; method_9068 serialize + m (Lnet/minecraft/class_1291;)Lnet/minecraft/class_2102; method_9065 addEffect + f Lnet/minecraft/class_2102; field_9709 ANY + f Ljava/util/Map; field_9710 effects +c net/minecraft/class_2102$class_2103 net/minecraft/advancements/criterion/MobEffectsPredicate$InstancePredicate + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2102$class_2103; method_9070 deserialize + m (Lnet/minecraft/class_1293;)Z method_9069 test + m ()Lcom/google/gson/JsonElement; method_9071 serialize + f Lnet/minecraft/class_2096$class_2100; field_9711 amplifier + f Lnet/minecraft/class_2096$class_2100; field_9713 duration + f Ljava/lang/Boolean; field_9714 ambient + f Ljava/lang/Boolean; field_9712 visible +c net/minecraft/class_2105 net/minecraft/advancements/criterion/NBTPredicate + m (Lnet/minecraft/class_1799;)Z method_9074 test + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2105; method_9073 deserialize + m ()Lcom/google/gson/JsonElement; method_9075 serialize + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_2487; method_9076 writeToNBTWithSelectedItem + m (Lnet/minecraft/class_2520;)Z method_9077 test + m (Lnet/minecraft/class_1297;)Z method_9072 test + f Lnet/minecraft/class_2487; field_9715 tag + f Lnet/minecraft/class_2105; field_9716 ANY +c net/minecraft/class_2108 net/minecraft/advancements/criterion/NetherTravelTrigger + m ()Lnet/minecraft/class_2960; method_9079 access$000 + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_243;Lnet/minecraft/class_2108$class_2110;)Z method_22486 func_226945_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2108$class_2110; method_9078 deserializeTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_243;)V method_9080 trigger + f Lnet/minecraft/class_2960; field_9717 ID +c net/minecraft/class_2108$class_2110 net/minecraft/advancements/criterion/NetherTravelTrigger$Instance + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_243;DDD)Z method_9086 test + m (Lnet/minecraft/class_2025;)Lnet/minecraft/class_2108$class_2110; method_9085 forDistance + f Lnet/minecraft/class_2025; field_9723 distance + f Lnet/minecraft/class_2090; field_9722 exited + f Lnet/minecraft/class_2090; field_9721 entered +c net/minecraft/class_2111 net/minecraft/advancements/criterion/PlacedBlockTrigger + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17895 func_226951_a_ + m ()Lnet/minecraft/class_2960; method_9089 access$000 + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2111$class_2113; method_9088 deserializeTrigger + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2248; method_22492 deserializeBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_2111$class_2113;)Z method_22491 func_226949_a_ + m (Lnet/minecraft/class_2248;Ljava/lang/String;)V method_22490 func_226948_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9087 trigger + f Lnet/minecraft/class_2960; field_9724 ID +c net/minecraft/class_2111$class_2113 net/minecraft/advancements/criterion/PlacedBlockTrigger$Instance + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2111$class_2113; method_9095 placedBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;Lnet/minecraft/class_1799;)Z method_9094 test + f Lnet/minecraft/class_4559; field_9730 properties + f Lnet/minecraft/class_2073; field_9731 item + f Lnet/minecraft/class_2248; field_9728 block + f Lnet/minecraft/class_2090; field_9729 location +c net/minecraft/class_2115 net/minecraft/advancements/criterion/PlayerHurtEntityTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_47;Lnet/minecraft/class_1282;FFZLnet/minecraft/class_2115$class_2117;)Z method_22493 func_226956_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;Lnet/minecraft/class_1282;FFZ)V method_9097 trigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2115$class_2117; method_9098 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_9096 access$000 + f Lnet/minecraft/class_2960; field_9732 ID +c net/minecraft/class_2115$class_2117 net/minecraft/advancements/criterion/PlayerHurtEntityTrigger$Instance + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_47;Lnet/minecraft/class_1282;FFZ)Z method_9104 test + m (Lnet/minecraft/class_2019$class_2020;)Lnet/minecraft/class_2115$class_2117; method_9103 forDamage + f Lnet/minecraft/class_2048$class_5258; field_9737 entity + f Lnet/minecraft/class_2019; field_9736 damage +c net/minecraft/class_5409 net/minecraft/advancements/criterion/PlayerEntityInteractionTrigger + m ()Lnet/minecraft/class_2960; method_30098 func_241477_b_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_5409$class_5410; method_30096 deserializeTrigger + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;Lnet/minecraft/class_5409$class_5410;)Z method_30095 func_241475_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_1297;)V method_30097 test + f Lnet/minecraft/class_2960; field_25699 ID +c net/minecraft/class_5409$class_5410 net/minecraft/advancements/criterion/PlayerEntityInteractionTrigger$Instance + m (Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_2073$class_2074;Lnet/minecraft/class_2048$class_5258;)Lnet/minecraft/class_5409$class_5410; method_30099 create + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Z method_30100 test + f Lnet/minecraft/class_2048$class_5258; field_25701 entity + f Lnet/minecraft/class_2073; field_25700 stack +c net/minecraft/class_4553 net/minecraft/advancements/criterion/PlayerPredicate + m (Lit/unimi/dsi/fastutil/objects/Object2BooleanMap;Ljava/util/Map$Entry;)V method_22502 func_227003_a_ + m (Lnet/minecraft/class_3445;)Lnet/minecraft/class_2960; method_22495 getRegistryKeyForStat + m (Lnet/minecraft/class_3448;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3445; method_22496 getStat + m ()Lcom/google/gson/JsonElement; method_22494 serialize + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4553; method_22499 deserialize + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2960;Lnet/minecraft/class_4553$class_4556;)V method_22500 func_227001_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2960;Ljava/lang/Boolean;)V method_22501 func_227002_a_ + m (Lnet/minecraft/class_1297;)Z method_22497 test + m (Lcom/google/gson/JsonArray;Lnet/minecraft/class_3445;Lnet/minecraft/class_2096$class_2100;)V method_22498 func_226999_a_ + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4553$class_4556; method_22503 deserializeAdvancementPredicate + f Lnet/minecraft/class_4553; field_20722 ANY + f Lit/unimi/dsi/fastutil/objects/Object2BooleanMap; field_20726 recipes + f Ljava/util/Map; field_20725 stats + f Lnet/minecraft/class_1934; field_20724 gamemode + f Lnet/minecraft/class_2096$class_2100; field_20723 level + f Ljava/util/Map; field_20727 advancements +c net/minecraft/class_4553$class_4557 net/minecraft/advancements/criterion/PlayerPredicate$Default + m ()Lnet/minecraft/class_4553; method_22507 create + f Ljava/util/Map; field_20734 advancements + f Lnet/minecraft/class_1934; field_20731 gameType + f Lnet/minecraft/class_2096$class_2100; field_20730 level + f Lit/unimi/dsi/fastutil/objects/Object2BooleanMap; field_20733 recipes + f Ljava/util/Map; field_20732 statValues +c net/minecraft/class_4553$class_4555 net/minecraft/advancements/criterion/PlayerPredicate$CompletedAdvancementPredicate + m (Lnet/minecraft/class_167;)Z method_22505 test + m (Ljava/lang/Object;)Z test test + f Z field_20729 completion +c net/minecraft/class_4553$class_4556 net/minecraft/advancements/criterion/PlayerPredicate$IAdvancementPredicate + m ()Lcom/google/gson/JsonElement; method_22506 serialize +c net/minecraft/class_4553$class_4554 net/minecraft/advancements/criterion/PlayerPredicate$CriteriaPredicate + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_167;)Z method_22504 test + f Lit/unimi/dsi/fastutil/objects/Object2BooleanMap; field_20728 completion +c net/minecraft/class_4553$1 net/minecraft/advancements/criterion/PlayerPredicate$1 +c net/minecraft/class_2119 net/minecraft/advancements/criterion/RecipeUnlockedTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2119$class_2121; method_9106 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_9105 access$000 + m (Lnet/minecraft/class_1860;Lnet/minecraft/class_2119$class_2121;)Z method_22508 func_227018_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1860;)V method_9107 trigger + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2119$class_2121; method_27847 create + f Lnet/minecraft/class_2960; field_9738 ID +c net/minecraft/class_2119$class_2121 net/minecraft/advancements/criterion/RecipeUnlockedTrigger$Instance + m (Lnet/minecraft/class_1860;)Z method_9112 test + f Lnet/minecraft/class_2960; field_9742 recipe +c net/minecraft/class_5267 net/minecraft/loot/ConditionArraySerializer + m ([Lnet/minecraft/class_5341;)Lcom/google/gson/JsonElement; method_27849 func_235681_a_ + f Lcom/google/gson/Gson; field_24421 field_235680_b_ + f Lnet/minecraft/class_5267; field_24420 field_235679_a_ +c net/minecraft/class_2123 net/minecraft/advancements/criterion/ShotCrossbowTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2123$class_2125; method_9114 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_9113 func_215110_b + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2123$class_2125;)Z method_22509 func_227037_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;)V method_9115 test + f Lnet/minecraft/class_2960; field_9743 ID +c net/minecraft/class_2123$class_2125 net/minecraft/advancements/criterion/ShotCrossbowTrigger$Instance + m (Lnet/minecraft/class_1799;)Z method_9121 test + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2123$class_2125; method_9120 create + f Lnet/minecraft/class_2073; field_9747 itemPredicate +c net/minecraft/class_4558 net/minecraft/advancements/criterion/AbstractCriterionTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Lnet/minecraft/class_195; method_27853 deserialize + m (Lnet/minecraft/class_3222;Ljava/util/function/Predicate;)V method_22510 triggerListeners + m (Lnet/minecraft/class_2985;)Ljava/util/Set; method_22512 func_227072_c_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_195; method_27854 deserializeTrigger + f Ljava/util/Map; field_20735 triggerListeners +c net/minecraft/class_4713 net/minecraft/advancements/criterion/SlideDownBlockTrigger + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_23908 func_227151_a_ + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2248; method_23907 deserializeBlock + m ()Lnet/minecraft/class_2960; method_23910 func_227153_b_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4713$class_4714;)Z method_23906 func_227149_a_ + m (Lnet/minecraft/class_2248;Ljava/lang/String;)V method_23905 func_227148_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_4713$class_4714; method_23911 deserializeTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2680;)V method_23909 test + f Lnet/minecraft/class_2960; field_21586 ID +c net/minecraft/class_4713$class_4714 net/minecraft/advancements/criterion/SlideDownBlockTrigger$Instance + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4713$class_4714; method_23912 create + m (Lnet/minecraft/class_2680;)Z method_23913 test + f Lnet/minecraft/class_4559; field_21588 stateCondition + f Lnet/minecraft/class_2248; field_21587 block +c net/minecraft/class_4559 net/minecraft/advancements/criterion/StatePropertiesPredicate + m (Lnet/minecraft/class_3610;)Z method_22518 matches + m ()Lcom/google/gson/JsonElement; method_22513 toJsonElement + m (Lnet/minecraft/class_2689;Ljava/util/function/Consumer;)V method_22516 forEachNotPresent + m (Lnet/minecraft/class_2680;)Z method_22514 matches + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4559$class_4562;)V method_22520 func_227187_a_ + m (Ljava/lang/String;Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4559$class_4562; method_22521 deserializeProperty + m (Lcom/google/gson/JsonElement;)Ljava/lang/String; method_22522 getNullableString + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4559; method_22519 deserializeProperties + m (Lnet/minecraft/class_2689;Ljava/util/function/Consumer;Lnet/minecraft/class_4559$class_4562;)V method_22517 func_227184_a_ + m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2688;)Z method_22515 matchesAll + f Ljava/util/List; field_20737 matchers + f Lnet/minecraft/class_4559; field_20736 EMPTY +c net/minecraft/class_4559$class_4563 net/minecraft/advancements/criterion/StatePropertiesPredicate$RangedMacher + f Ljava/lang/String; field_20742 maximum + f Ljava/lang/String; field_20741 minimum +c net/minecraft/class_4559$class_4561 net/minecraft/advancements/criterion/StatePropertiesPredicate$ExactMatcher + f Ljava/lang/String; field_20739 valueToMatch +c net/minecraft/class_4559$class_4562 net/minecraft/advancements/criterion/StatePropertiesPredicate$Matcher + m (Lnet/minecraft/class_2688;Lnet/minecraft/class_2769;)Z method_22532 matchesExact + m (Lnet/minecraft/class_2689;Ljava/util/function/Consumer;)V method_22531 runIfNotPresent + m ()Lcom/google/gson/JsonElement; method_22529 toJsonElement + m ()Ljava/lang/String; method_22533 getPropertyName + m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2688;)Z method_22530 test + f Ljava/lang/String; field_20740 propertyName +c net/minecraft/class_4559$class_4560 net/minecraft/advancements/criterion/StatePropertiesPredicate$Builder + m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Lnet/minecraft/class_4559$class_4560; method_22525 withProp + m (Lnet/minecraft/class_2769;Z)Lnet/minecraft/class_4559$class_4560; method_22527 withBoolProp + m ()Lnet/minecraft/class_4559; method_22528 build + m (Lnet/minecraft/class_2769;Ljava/lang/String;)Lnet/minecraft/class_4559$class_4560; method_22526 withStringProp + m (Lnet/minecraft/class_2769;I)Lnet/minecraft/class_4559$class_4560; method_22524 withIntProp + m ()Lnet/minecraft/class_4559$class_4560; method_22523 newBuilder + f Ljava/util/List; field_20738 matchers +c net/minecraft/class_4559$1 net/minecraft/advancements/criterion/StatePropertiesPredicate$1 +c net/minecraft/class_2128 net/minecraft/advancements/criterion/SummonedEntityTrigger + m (Lnet/minecraft/class_47;Lnet/minecraft/class_2128$class_2130;)Z method_22537 func_227229_a_ + m ()Lnet/minecraft/class_2960; method_9122 access$000 + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;)V method_9124 trigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2128$class_2130; method_9123 deserializeTrigger + f Lnet/minecraft/class_2960; field_9748 ID +c net/minecraft/class_2128$class_2130 net/minecraft/advancements/criterion/SummonedEntityTrigger$Instance + m (Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_2128$class_2130; method_9129 summonedEntity + m (Lnet/minecraft/class_47;)Z method_9130 test + f Lnet/minecraft/class_2048$class_5258; field_9752 entity +c net/minecraft/class_2131 net/minecraft/advancements/criterion/TameAnimalTrigger + m ()Lnet/minecraft/class_2960; method_9131 access$000 + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2131$class_2133; method_9133 deserializeTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1429;)V method_9132 trigger + m (Lnet/minecraft/class_47;Lnet/minecraft/class_2131$class_2133;)Z method_22538 func_227251_a_ + f Lnet/minecraft/class_2960; field_9753 ID +c net/minecraft/class_2131$class_2133 net/minecraft/advancements/criterion/TameAnimalTrigger$Instance + m (Lnet/minecraft/class_2048;)Lnet/minecraft/class_2131$class_2133; method_16114 create + m (Lnet/minecraft/class_47;)Z method_9139 test + m ()Lnet/minecraft/class_2131$class_2133; method_9138 any + f Lnet/minecraft/class_2048$class_5258; field_9757 entity +c net/minecraft/class_4851 net/minecraft/advancements/criterion/TargetHitTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;Lnet/minecraft/class_243;I)V method_24861 test + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_4851$class_4852; method_24863 deserializeTrigger + m ()Lnet/minecraft/class_2960; method_24862 func_236351_b_ + m (Lnet/minecraft/class_47;Lnet/minecraft/class_243;ILnet/minecraft/class_4851$class_4852;)Z method_24951 func_236349_a_ + f Lnet/minecraft/class_2960; field_22429 ID +c net/minecraft/class_4851$class_4852 net/minecraft/advancements/criterion/TargetHitTrigger$Instance + m (Lnet/minecraft/class_47;Lnet/minecraft/class_243;I)Z method_24952 test + m (Lnet/minecraft/class_2096$class_2100;Lnet/minecraft/class_2048$class_5258;)Lnet/minecraft/class_4851$class_4852; method_24865 create + f Lnet/minecraft/class_2096$class_2100; field_22430 signalStrength + f Lnet/minecraft/class_2048$class_5258; field_22512 projectile +c net/minecraft/class_2135 net/minecraft/advancements/criterion/TickTrigger + m (Lnet/minecraft/class_2135$class_2137;)Z method_29964 func_241523_a_ + m (Lnet/minecraft/class_3222;)V method_9141 trigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2135$class_2137; method_9140 deserializeTrigger + f Lnet/minecraft/class_2960; field_9758 ID +c net/minecraft/class_2135$class_2137 net/minecraft/advancements/criterion/TickTrigger$Instance +c net/minecraft/class_2140 net/minecraft/advancements/criterion/VillagerTradeTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_3988;Lnet/minecraft/class_1799;)V method_9146 test + m ()Lnet/minecraft/class_2960; method_9147 access$000 + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2140$class_2142; method_9148 deserializeTrigger + m (Lnet/minecraft/class_47;Lnet/minecraft/class_1799;Lnet/minecraft/class_2140$class_2142;)Z method_22539 func_227267_a_ + f Lnet/minecraft/class_2960; field_9762 ID +c net/minecraft/class_2140$class_2142 net/minecraft/advancements/criterion/VillagerTradeTrigger$Instance + m (Lnet/minecraft/class_47;Lnet/minecraft/class_1799;)Z method_9154 test + m ()Lnet/minecraft/class_2140$class_2142; method_9153 any + f Lnet/minecraft/class_2073; field_9766 item + f Lnet/minecraft/class_2048$class_5258; field_9767 villager +c net/minecraft/class_2143 net/minecraft/advancements/criterion/UsedEnderEyeTrigger + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2143$class_2145; method_9156 deserializeTrigger + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2338;)V method_9157 trigger + m ()Lnet/minecraft/class_2960; method_9155 access$000 + m (DLnet/minecraft/class_2143$class_2145;)Z method_22540 func_227325_a_ + f Lnet/minecraft/class_2960; field_9768 ID +c net/minecraft/class_2143$class_2145 net/minecraft/advancements/criterion/UsedEnderEyeTrigger$Instance + m (D)Z method_9162 test + f Lnet/minecraft/class_2096$class_2099; field_9772 distance +c net/minecraft/class_2148 net/minecraft/advancements/criterion/UsedTotemTrigger + m ()Lnet/minecraft/class_2960; method_9164 access$000 + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;)V method_9165 trigger + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2148$class_2150;)Z method_22541 func_227409_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2148$class_2150; method_9163 deserializeTrigger + f Lnet/minecraft/class_2960; field_9773 ID +c net/minecraft/class_2148$class_2150 net/minecraft/advancements/criterion/UsedTotemTrigger$Instance + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2148$class_2150; method_9170 usedTotem + m (Lnet/minecraft/class_1799;)Z method_9171 test + f Lnet/minecraft/class_2073; field_9777 item +c net/minecraft/class_2152 net/minecraft/advancements/criterion/MinMaxBoundsWrapped + m (Ljava/lang/Float;Ljava/util/function/Function;)Ljava/lang/Float; method_9174 map + m (Lcom/mojang/brigadier/StringReader;Z)Z method_9173 isValidNumber + m (Lcom/mojang/brigadier/StringReader;Z)Ljava/lang/Float; method_9176 fromReader + m ()Ljava/lang/Float; method_9175 getMin + m (Lcom/mojang/brigadier/StringReader;ZLjava/util/function/Function;)Lnet/minecraft/class_2152; method_9172 fromReader + m ()Ljava/lang/Float; method_9177 getMax + f Ljava/lang/Float; field_9778 min + f Ljava/lang/Float; field_9779 max + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9781 ERROR_INTS_ONLY + f Lnet/minecraft/class_2152; field_9780 UNBOUNDED +c net/minecraft/class_2156 net/minecraft/command/TranslatableExceptionProvider + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedStartOfQuote readerExpectedStartOfQuote + m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidLong readerInvalidLong + m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; integerTooLow integerTooLow + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedDouble readerExpectedDouble + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedFloat readerExpectedFloat + m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; floatTooHigh floatTooHigh + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_18481 func_218855_b + m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidFloat readerInvalidFloat + m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; literalIncorrect literalIncorrect + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedEndOfQuote readerExpectedEndOfQuote + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9185 func_208629_d + m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; doubleTooLow doubleTooLow + m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; doubleTooHigh doubleTooHigh + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; dispatcherUnknownCommand dispatcherUnknownCommand + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9189 func_208633_f + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9178 func_208622_c + m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidInt readerInvalidInt + m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; longTooLow longTooLow + m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; floatTooLow floatTooLow + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9188 func_208632_b + m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; dispatcherParseException dispatcherParseException + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9183 func_208627_e + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9182 func_208626_a + m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidBool readerInvalidBool + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9186 func_208630_a + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_18479 func_218032_a + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedBool readerExpectedBool + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; dispatcherExpectedArgumentSeparator dispatcherExpectedArgumentSeparator + m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerExpectedSymbol readerExpectedSymbol + m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; longTooHigh longTooHigh + m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidEscape readerInvalidEscape + m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidDouble readerInvalidDouble + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9181 func_208625_c + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedLong readerExpectedLong + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9191 func_208635_e + m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; integerTooHigh integerTooHigh + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedInt readerExpectedInt + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9180 func_208624_d + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9190 func_208634_b + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9184 func_208628_a + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9187 func_208631_f + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9179 func_208623_c + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; dispatcherUnknownArgument dispatcherUnknownArgument + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_18480 func_218034_b + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9787 READER_EXPECTED_FLOAT + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9785 READER_EXPECTED_SYMBOL + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9792 DISPATCHER_UNKNOWN_ARGUMENT + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9784 INTEGER_TOO_LOW + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_18140 field_218035_g + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9803 READER_EXPECTED_END_OF_QUOTE + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9796 LITERAL_INCORRECT + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_18143 field_218038_q + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9798 READER_EXPECTED_DOUBLE + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9799 DOUBLE_TOO_LOW + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9790 DISPATCHER_PARSE_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9801 READER_EXPECTED_INT + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9789 READER_INVALID_BOOL + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9802 FLOAT_TOO_LOW + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_18142 field_218037_p + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9797 DISPATCHER_UNKNOWN_COMMAND + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9800 READER_INVALID_DOUBLE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9794 READER_EXPECTED_BOOL + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9804 READER_INVALID_FLOAT + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9782 DISPATCHER_EXPECTED_ARGUMENT_SEPARATOR + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9795 FLOAT_TOO_HIGH + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9793 INTEGER_TOO_HIGH + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9783 READER_EXPECTED_START_OF_QUOTE + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_18141 field_218036_h + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9791 READER_INVALID_ESCAPE + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9788 DOUBLE_TOO_HIGH + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9786 READER_INVALID_INT +c net/minecraft/class_2158 net/minecraft/command/FunctionObject + m ()[Lnet/minecraft/class_2158$class_2161; method_9193 getEntries + m (Lnet/minecraft/class_2960;Lcom/mojang/brigadier/CommandDispatcher;Lnet/minecraft/class_2168;Ljava/util/List;)Lnet/minecraft/class_2158; method_9195 func_237140_a_ + m ()Lnet/minecraft/class_2960; method_9194 getId + m (Lnet/minecraft/class_2158;)Lnet/minecraft/class_2960; method_9192 access$000 + f Lnet/minecraft/class_2960; field_9806 id + f [Lnet/minecraft/class_2158$class_2161; field_9805 entries +c net/minecraft/class_2158$class_2162 net/minecraft/command/FunctionObject$FunctionEntry + m ()Ljava/lang/String; toString toString + m (ILjava/util/ArrayDeque;Lnet/minecraft/class_2991;Lnet/minecraft/class_2168;Lnet/minecraft/class_2158;)V method_17914 func_218041_a + f Lnet/minecraft/class_2158$class_2159; field_9812 function +c net/minecraft/class_2158$class_2160 net/minecraft/command/FunctionObject$CommandEntry + m ()Ljava/lang/String; toString toString + f Lcom/mojang/brigadier/ParseResults; field_9811 field_196999_a +c net/minecraft/class_2158$class_2161 net/minecraft/command/FunctionObject$IEntry + m (Lnet/minecraft/class_2991;Lnet/minecraft/class_2168;Ljava/util/ArrayDeque;I)V method_9198 execute +c net/minecraft/class_2158$class_2159 net/minecraft/command/FunctionObject$CacheableFunction + m ()Lnet/minecraft/class_2960; method_9197 getId + m (Lnet/minecraft/class_2991;)Ljava/util/Optional; method_9196 func_218039_a + m (Lnet/minecraft/class_2158;)Lnet/minecraft/class_2960; method_17913 func_218040_a + f Ljava/util/Optional; field_9808 function + f Lnet/minecraft/class_2158$class_2159; field_9809 EMPTY + f Lnet/minecraft/class_2960; field_9807 id + f Z field_9810 isValid +c net/minecraft/class_2164 net/minecraft/command/CommandException + m ()Lnet/minecraft/class_2561; method_9199 getComponent + f Lnet/minecraft/class_2561; field_9813 component +c net/minecraft/class_2165 net/minecraft/command/ICommandSource + m ()Z method_9202 shouldReceiveErrors + m (Lnet/minecraft/class_2561;Ljava/util/UUID;)V method_9203 sendMessage + m ()Z method_9200 shouldReceiveFeedback + m ()Z method_9201 allowLogging + f Lnet/minecraft/class_2165; field_17395 DUMMY +c net/minecraft/class_2165$1 net/minecraft/command/ICommandSource$1 +c net/minecraft/class_2168 net/minecraft/command/CommandSource + m ()Lnet/minecraft/class_243; method_9222 getPos + m (Lnet/minecraft/class_241;)Lnet/minecraft/class_2168; method_9216 withRotation + m (Lnet/minecraft/class_2561;Z)V method_9226 sendFeedback + m (Lcom/mojang/brigadier/context/CommandContext;ZI)V method_9215 onCommandComplete + m ()Lnet/minecraft/class_241; method_9210 getRotation + m ()Ljava/lang/String; method_9214 getName + m (Lcom/mojang/brigadier/context/CommandContext;ZI)V method_9224 func_197032_b + m (Lcom/mojang/brigadier/ResultConsumer;)Lnet/minecraft/class_2168; method_9231 withResultConsumer + m ()Lnet/minecraft/class_3218; method_9225 getWorld + m (Lnet/minecraft/class_2183$class_2184;)Lnet/minecraft/class_2168; method_9218 withEntityAnchorType + m (I)Lnet/minecraft/class_2168; method_9206 withPermissionLevel + m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_2168; method_9227 withWorld + m ()Lnet/minecraft/class_2183$class_2184; method_9219 getEntityAnchorType + m (I)Lnet/minecraft/class_2168; method_9230 withMinPermissionLevel + m ()Lnet/minecraft/class_2561; method_9223 getDisplayName + m ()Lnet/minecraft/class_2168; method_9217 withFeedbackDisabled + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_2168; method_9208 withPos + m ()Lnet/minecraft/server/MinecraftServer; method_9211 getServer + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_2168; method_9221 withRotation + m ()Lnet/minecraft/class_3222; method_9207 asPlayer + m (Lnet/minecraft/class_2561;)V method_9213 sendErrorMessage + m ()Lnet/minecraft/class_1297; method_9229 assertIsEntity + m (Lcom/mojang/brigadier/ResultConsumer;Ljava/util/function/BinaryOperator;)Lnet/minecraft/class_2168; method_9209 withResultConsumer + m (Lnet/minecraft/class_2561;)V method_9212 logFeedback + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_2168; method_9232 withEntity + m ()Lnet/minecraft/class_1297; method_9228 getEntity + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2183$class_2184;)Lnet/minecraft/class_2168; method_9220 withRotation + f Lnet/minecraft/class_2165; field_9819 source + f Lnet/minecraft/class_243; field_9817 pos + f Lnet/minecraft/class_241; field_9822 rotation + f Ljava/lang/String; field_9826 name + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9824 REQUIRES_PLAYER_EXCEPTION_TYPE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9827 REQUIRES_ENTITY_EXCEPTION_TYPE + f Lnet/minecraft/server/MinecraftServer; field_9818 server + f I field_9815 permissionLevel + f Lnet/minecraft/class_2183$class_2184; field_9816 entityAnchorType + f Lnet/minecraft/class_3218; field_9828 world + f Lcom/mojang/brigadier/ResultConsumer; field_9821 resultConsumer + f Lnet/minecraft/class_2561; field_9825 displayName + f Lnet/minecraft/class_1297; field_9820 entity + f Z field_9823 feedbackDisabled +c net/minecraft/class_2170 net/minecraft/command/Commands + m (Lnet/minecraft/class_2170$class_2171;Ljava/lang/String;)Z method_9240 func_212591_a + m (Lnet/minecraft/class_2170$class_2171;)Ljava/util/function/Predicate; method_9238 predicate + m ()V method_30852 func_242986_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_9246 func_197053_a + m (Lcom/mojang/brigadier/arguments/ArgumentType;)Ljava/lang/String; method_30851 func_242985_a + m (Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder; method_9244 argument + m (Lcom/mojang/brigadier/arguments/ArgumentType;)Z method_30853 func_242987_b + m ()Lcom/mojang/brigadier/CommandDispatcher; method_9235 getDispatcher + m (Ljava/lang/String;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_9236 func_211705_a_ + m (Lnet/minecraft/class_2172;)Z method_9245 func_197060_a + m (Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/tree/CommandNode;Lnet/minecraft/class_2168;Ljava/util/Map;)V method_9239 commandSourceNodesToSuggestionNodes + m (Lnet/minecraft/class_3222;)V method_9241 send + m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_9249 handleCommand + m (Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder; method_9247 literal + m (Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/tree/CommandNode;Ljava/util/Collection;)V method_9237 func_201302_a + m (Lnet/minecraft/class_5250;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_9242 func_211704_a_ + m (Lcom/mojang/brigadier/ParseResults;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_23917 func_227481_a_ + m (Lcom/mojang/brigadier/context/CommandContext;ZI)V method_9248 func_197058_a + f Lcom/mojang/brigadier/CommandDispatcher; field_9832 dispatcher + f Lorg/apache/logging/log4j/Logger; field_9833 LOGGER +c net/minecraft/class_2170$class_5364 net/minecraft/command/Commands$EnvironmentType + m ()[Lnet/minecraft/class_2170$class_5364; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2170$class_5364; valueOf valueOf + m (Lnet/minecraft/class_2170$class_5364;)Z method_29576 func_237221_a_ + m (Lnet/minecraft/class_2170$class_5364;)Z method_29577 func_237222_b_ + f Lnet/minecraft/class_2170$class_5364; field_25421 INTEGRATED + f Lnet/minecraft/class_2170$class_5364; field_25420 DEDICATED + f Z field_25423 field_237220_e_ + f [Lnet/minecraft/class_2170$class_5364; field_25424 $VALUES + f Z field_25422 field_237219_d_ + f Lnet/minecraft/class_2170$class_5364; field_25419 ALL +c net/minecraft/class_2170$class_2171 net/minecraft/command/Commands$IParser + m (Lcom/mojang/brigadier/StringReader;)V parse parse +c net/minecraft/class_2172 net/minecraft/command/ISuggestionProvider + m ()Ljava/util/Collection; method_9267 getTeamNames + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_9251 func_210519_b + m (Ljava/util/stream/Stream;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; method_9271 func_201725_a + m ()Ljava/util/Collection; method_9262 getPlayerNames + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_9263 func_210517_a + m (Ljava/lang/Iterable;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; method_9255 func_210514_a + m ([Ljava/lang/String;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9253 suggest + m (Ljava/lang/String;Ljava/util/Collection;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Predicate;)Ljava/util/concurrent/CompletableFuture; method_9260 func_209000_a + m (Ljava/lang/String;Ljava/lang/String;)Z method_27136 func_237256_a_ + m (Ljava/lang/String;Ljava/lang/String;)Z method_9272 func_197007_a + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Function;Ljava/util/function/Function;Ljava/lang/Object;)V method_9256 func_210515_a + m (Ljava/lang/String;Ljava/util/Collection;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Predicate;)Ljava/util/concurrent/CompletableFuture; method_9252 func_211269_a + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_2960;)V method_9275 func_210513_a + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/lang/String;Lnet/minecraft/class_2960;)V method_9266 func_210518_a + m ()Ljava/util/Collection; method_17772 func_217293_r + m ()Lnet/minecraft/class_5455; method_30497 func_241861_q + m ()Ljava/util/Collection; method_17771 func_217294_q + m (Ljava/util/stream/Stream;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9257 func_212476_a + m ()Ljava/util/stream/Stream; method_9273 getRecipeResourceLocations + m (Ljava/util/stream/Stream;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9264 suggest + m (Ljava/lang/Iterable;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/lang/String;)Ljava/util/concurrent/CompletableFuture; method_9258 suggestIterable + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9261 getSuggestionsFromServer + m ()Ljava/util/Collection; method_9254 getSoundResourceLocations + m (Ljava/lang/Iterable;Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/Consumer;)V method_9268 func_210512_a + m (Ljava/lang/Iterable;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9265 suggest + m ()Ljava/util/Set; method_29310 func_230390_p_ + m (Ljava/lang/Iterable;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9270 suggestIterable + m ()Ljava/util/Collection; method_9269 getTargetedEntity + m (Ljava/lang/Iterable;Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/Consumer;)V method_9250 func_210511_a + m (I)Z method_9259 hasPermissionLevel +c net/minecraft/class_2172$class_2173 net/minecraft/command/ISuggestionProvider$Coordinates + f Lnet/minecraft/class_2172$class_2173; field_9838 DEFAULT_GLOBAL + f Ljava/lang/String; field_9836 y + f Ljava/lang/String; field_9835 x + f Ljava/lang/String; field_9837 z + f Lnet/minecraft/class_2172$class_2173; field_9834 DEFAULT_LOCAL +c net/minecraft/class_5473 net/minecraft/command/arguments/AngleArgument + m ()Lnet/minecraft/class_5473; method_30658 func_242991_a + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_5473$class_5474; method_30659 parse + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F method_30660 func_242992_a + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + f Ljava/util/Collection; field_26369 field_242990_b + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_26368 field_242989_a +c net/minecraft/class_5473$class_5474 net/minecraft/command/arguments/AngleArgument$Result + m (Lnet/minecraft/class_2168;)F method_30661 func_242995_a + f Z field_26371 field_242994_b + f F field_26370 field_242993_a +c net/minecraft/class_5473$1 net/minecraft/command/arguments/AngleArgument$1 +c net/minecraft/class_2177 net/minecraft/command/arguments/ColorArgument + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9278 func_208659_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_124; method_9277 getColor + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_124; method_9279 parse + m ()Lnet/minecraft/class_2177; method_9276 color + f Ljava/util/Collection; field_9839 EXAMPLES + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9840 COLOR_INVALID +c net/minecraft/class_2178 net/minecraft/command/arguments/ComponentArgument + m ()Ljava/util/Collection; getExamples getExamples + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9282 func_208660_a + m ()Lnet/minecraft/class_2178; method_9281 component + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2561; method_9280 getComponent + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2561; method_9283 parse + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9842 COMPONENT_INVALID + f Ljava/util/Collection; field_9841 EXAMPLES +c net/minecraft/class_2179 net/minecraft/command/arguments/NBTCompoundTagArgument + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2487; method_9285 getNbt + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2487; method_9286 parse + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m ()Lnet/minecraft/class_2179; method_9284 nbt + f Ljava/util/Collection; field_9843 EXAMPLES +c net/minecraft/class_2181 net/minecraft/command/arguments/DimensionArgument + m ()Ljava/util/Collection; getExamples getExamples + m (Lnet/minecraft/class_5321;)Ljava/lang/String; method_9291 func_212593_a_ + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Lnet/minecraft/class_2181; method_9288 getDimension + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2960; method_9287 parse + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9290 func_212594_a_ + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_3218; method_9289 getDimensionArgument + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9845 INVALID_DIMENSION_EXCEPTION + f Ljava/util/Collection; field_9844 EXAMPLES +c net/minecraft/class_2183 net/minecraft/command/arguments/EntityAnchorArgument + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2183$class_2184; method_9294 getEntityAnchor + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2183$class_2184; method_9292 parse + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9293 func_208661_a + m ()Lnet/minecraft/class_2183; method_9295 entityAnchor + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9846 ANCHOR_INVALID + f Ljava/util/Collection; field_9847 EXMAPLES +c net/minecraft/class_2183$class_2184 net/minecraft/command/arguments/EntityAnchorArgument$Type + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)Lnet/minecraft/class_243; method_9298 func_201018_a + m ()[Lnet/minecraft/class_2183$class_2184; values values + m ()Ljava/util/Map; method_9301 access$000 + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)Lnet/minecraft/class_243; method_9300 func_201019_b + m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_243; method_9299 apply + m (Ljava/lang/String;)Lnet/minecraft/class_2183$class_2184; method_9296 getByName + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_243; method_9302 apply + m (Ljava/lang/String;)Lnet/minecraft/class_2183$class_2184; valueOf valueOf + m (Ljava/util/HashMap;)V method_9297 func_209384_a + f Ljava/util/function/BiFunction; field_9848 offsetFunc + f [Lnet/minecraft/class_2183$class_2184; field_9850 $VALUES + f Ljava/lang/String; field_9849 name + f Ljava/util/Map; field_9852 BY_NAME + f Lnet/minecraft/class_2183$class_2184; field_9853 FEET + f Lnet/minecraft/class_2183$class_2184; field_9851 EYES +c net/minecraft/class_2186 net/minecraft/command/arguments/EntityArgument + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lnet/minecraft/class_2186;)Z method_9314 access$000 + m (Lnet/minecraft/class_2186;)Z method_9316 access$100 + m (Lnet/minecraft/class_2172;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)V method_9311 func_201942_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9312 getPlayers + m ()Lnet/minecraft/class_2186; method_9306 entities + m ()Lnet/minecraft/class_2186; method_9305 player + m ()Lnet/minecraft/class_2186; method_9309 entity + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9307 getEntitiesAllowingNone + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9310 getPlayersAllowingNone + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2300; method_9318 parse + m ()Lnet/minecraft/class_2186; method_9308 players + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9317 getEntities + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_3222; method_9315 getPlayer + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_1297; method_9313 getEntity + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + f Z field_9858 single + f Z field_9857 playersOnly + f Ljava/util/Collection; field_9859 EXAMPLES + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9860 TOO_MANY_ENTITIES + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9864 TOO_MANY_PLAYERS + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9862 SELECTOR_NOT_ALLOWED + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9863 ENTITY_NOT_FOUND + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9861 ONLY_PLAYERS_ALLOWED + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9856 PLAYER_NOT_FOUND +c net/minecraft/class_2186$class_2187 net/minecraft/command/arguments/EntityArgument$Serializer + m (Lnet/minecraft/class_2186;Lcom/google/gson/JsonObject;)V method_9319 write + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2186; method_9321 read + m (Lnet/minecraft/class_2186;Lnet/minecraft/class_2540;)V method_9320 write +c net/minecraft/class_2188 net/minecraft/command/arguments/EntitySummonArgument + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_9326 checkIfEntityExists + m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17925 func_218046_b + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9323 func_211367_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2960; method_9322 getEntityId + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2960; method_9325 parse + m ()Lnet/minecraft/class_2188; method_9324 entitySummon + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9866 ENTITY_UNKNOWN_TYPE + f Ljava/util/Collection; field_9865 EXAMPLES +c net/minecraft/class_2191 net/minecraft/command/arguments/GameProfileArgument + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2191$class_2192; method_9331 parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9330 getGameProfiles + m ()Lnet/minecraft/class_2191; method_9329 gameProfile + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Ljava/lang/String;Lnet/minecraft/class_2168;)Ljava/util/Collection; method_9328 func_197107_a + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)V method_9332 func_201943_a + f Ljava/util/Collection; field_9868 EXAMPLES + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9869 PLAYER_UNKNOWN +c net/minecraft/class_2191$class_2193 net/minecraft/command/arguments/GameProfileArgument$ProfileProvider + f Lnet/minecraft/class_2300; field_9870 selector +c net/minecraft/class_2191$class_2192 net/minecraft/command/arguments/GameProfileArgument$IProfileProvider + m (Lnet/minecraft/class_2168;)Ljava/util/Collection; getNames getNames +c net/minecraft/class_2194 net/minecraft/command/arguments/EnchantmentArgument + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9333 func_208662_a + m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17934 func_218048_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_1887; method_9334 getEnchantment + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_1887; method_9335 parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Lnet/minecraft/class_2194; method_9336 enchantment + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9872 ENCHANTMENT_UNKNOWN + f Ljava/util/Collection; field_9871 EXAMPLES +c net/minecraft/class_2196 net/minecraft/command/arguments/MessageArgument + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2196$class_2197; method_9338 parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2561; method_9339 getMessage + m ()Lnet/minecraft/class_2196; method_9340 message + f Ljava/util/Collection; field_9876 EXAMPLES +c net/minecraft/class_2196$class_2198 net/minecraft/command/arguments/MessageArgument$Part + m ()I method_9343 getStart + m ()I method_9344 getEnd + m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_2561; method_9345 toComponent + f Lnet/minecraft/class_2300; field_9881 selector + f I field_9879 end + f I field_9880 start +c net/minecraft/class_2196$class_2197 net/minecraft/command/arguments/MessageArgument$Message + m (Lnet/minecraft/class_2168;Z)Lnet/minecraft/class_2561; method_9341 toComponent + m (Lcom/mojang/brigadier/StringReader;Z)Lnet/minecraft/class_2196$class_2197; method_9342 parse + f Ljava/lang/String; field_9877 text + f [Lnet/minecraft/class_2196$class_2198; field_9878 selectors +c net/minecraft/class_2201 net/minecraft/command/arguments/PotionArgument + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_1291; method_9348 parse + m ()Lnet/minecraft/class_2201; method_9350 mobEffect + m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17942 func_218049_a + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_1291; method_9347 getMobEffect + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9349 func_208663_a + m ()Ljava/util/Collection; getExamples getExamples + f Ljava/util/Collection; field_9895 EXAMPLES + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9896 EFFECT_NOT_FOUND +c net/minecraft/class_2203 net/minecraft/command/arguments/NBTPathArgument + m (Lnet/minecraft/class_2487;)Ljava/util/function/Predicate; method_9359 equalToCompoundPredicate + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (C)Z method_9355 isSimpleNameChar + m (Lnet/minecraft/class_2487;)Ljava/util/function/Predicate; method_9354 func_218082_a + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9356 func_208665_b + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/String; method_9357 readTagName + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2203$class_2209; method_9362 parse + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2203$class_2209; method_9358 getNBTPath + m ()Lnet/minecraft/class_2203; method_9360 nbtPath + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)Z method_9353 func_218081_a + m (Lcom/mojang/brigadier/StringReader;Ljava/lang/String;)Lnet/minecraft/class_2203$class_2210; method_9352 func_218083_a + m (Lcom/mojang/brigadier/StringReader;Z)Lnet/minecraft/class_2203$class_2210; method_9361 func_218079_a + f Ljava/util/Collection; field_9898 EXAMPLES + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9900 PATH_MALFORMED + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9899 NOTHING_FOUND +c net/minecraft/class_2203$class_2207 net/minecraft/command/arguments/NBTPathArgument$ListNode + m (Ljava/util/List;Lorg/apache/commons/lang3/mutable/MutableBoolean;Lnet/minecraft/class_2520;)V method_9365 func_218060_a + f Ljava/util/function/Predicate; field_9905 equalToPredicate + f Lnet/minecraft/class_2487; field_9904 compound +c net/minecraft/class_2203$class_2206 net/minecraft/command/arguments/NBTPathArgument$CollectionNode + f I field_9903 field_218059_a +c net/minecraft/class_2203$class_2205 net/minecraft/command/arguments/NBTPathArgument$StringNode + f Ljava/lang/String; field_9902 field_218058_a +c net/minecraft/class_2203$class_2204 net/minecraft/command/arguments/NBTPathArgument$EmptyListNode + f Lnet/minecraft/class_2203$class_2204; field_9901 field_218067_a +c net/minecraft/class_2203$class_2210 net/minecraft/command/arguments/NBTPathArgument$INode + m (Lnet/minecraft/class_2520;Ljava/util/function/Supplier;Ljava/util/List;)V method_9380 func_218054_a + m (Lnet/minecraft/class_2520;Ljava/util/function/Supplier;)I method_9376 func_218051_a + m (Ljava/util/List;)Ljava/util/List; method_9381 func_218056_a + m (Lnet/minecraft/class_2520;Ljava/util/List;)V method_9378 addMatchingElements + m (Ljava/util/List;Ljava/util/function/BiConsumer;)Ljava/util/List; method_9384 func_218057_a + m ()Lnet/minecraft/class_2520; method_9382 createEmptyElement + m (Ljava/util/function/Supplier;Lnet/minecraft/class_2520;Ljava/util/List;)V method_9379 func_218055_a + m (Lnet/minecraft/class_2520;)I method_9383 func_218053_a + m (Ljava/util/List;Ljava/util/function/Supplier;)Ljava/util/List; method_9377 func_218052_a +c net/minecraft/class_2203$class_2209 net/minecraft/command/arguments/NBTPathArgument$NBTPath + m ()Ljava/lang/String; toString toString + m (Ljava/util/List;Ljava/util/function/Function;)I method_9371 reduceToInt + m (Lnet/minecraft/class_2520;)Ljava/util/List; method_9366 func_218071_a + m (Lnet/minecraft/class_2520;Ljava/util/function/Supplier;)I method_9368 func_218076_b + m (Lnet/minecraft/class_2520;)I method_9372 func_218068_c + m (Lnet/minecraft/class_2203$class_2210;Ljava/util/function/Supplier;Lnet/minecraft/class_2520;)Ljava/lang/Integer; method_9373 func_218077_a + m (Lnet/minecraft/class_2203$class_2210;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_9375 createNothingFoundException + m (Lnet/minecraft/class_2520;)I method_9374 func_218069_b + m (Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer; method_9370 func_218074_a + m (Lnet/minecraft/class_2520;Ljava/util/function/Supplier;)Ljava/util/List; method_9367 func_218073_a + m (Lnet/minecraft/class_2520;)Ljava/util/List; method_9369 func_218072_d + f [Lnet/minecraft/class_2203$class_2210; field_9911 nodes + f Ljava/lang/String; field_9909 rawText + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_9910 field_218078_b +c net/minecraft/class_2203$class_3707 net/minecraft/command/arguments/NBTPathArgument$CompoundNode + f Ljava/util/function/Predicate; field_16319 field_218066_a +c net/minecraft/class_2203$class_2208 net/minecraft/command/arguments/NBTPathArgument$JsonNode + f Ljava/util/function/Predicate; field_9908 field_218065_c + f Ljava/lang/String; field_9906 field_218063_a + f Lnet/minecraft/class_2487; field_9907 field_218064_b +c net/minecraft/class_2212 net/minecraft/command/arguments/NBTTagArgument + m ()Lnet/minecraft/class_2212; method_9389 func_218085_a + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2520; method_9390 func_218086_a + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2520; method_9388 parse + f Ljava/util/Collection; field_9918 field_218087_a +c net/minecraft/class_2214 net/minecraft/command/arguments/ObjectiveArgument + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_266; method_9395 getObjective + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9394 func_208670_a + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/String; method_9396 parse + m ()Lnet/minecraft/class_2214; method_9391 objective + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9397 func_208671_c + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_266; method_9393 getWritableObjective + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9392 func_208669_b + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9920 OBJECTIVE_NAME_TOO_LONG + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9921 OBJECTIVE_READ_ONLY + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9922 OBJECTIVE_NOT_FOUND + f Ljava/util/Collection; field_9919 EXAMPLES +c net/minecraft/class_2216 net/minecraft/command/arguments/ObjectiveCriteriaArgument + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9401 func_208672_a + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m ()Lnet/minecraft/class_2216; method_9399 objectiveCriteria + m (Lnet/minecraft/class_3448;Ljava/lang/Object;)Ljava/lang/String; method_9400 makeStatName + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_274; method_9402 getObjectiveCriteria + m (Lcom/mojang/brigadier/StringReader;ILjava/lang/String;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17949 func_218088_a + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_274; method_9403 parse + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9927 OBJECTIVE_INVALID_CRITERIA + f Ljava/util/Collection; field_9926 EXAMPLES +c net/minecraft/class_2218 net/minecraft/command/arguments/OperationArgument + m (II)I method_9406 func_197174_f + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (II)I method_9408 func_197176_e + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2218$class_2219; method_9409 getOperation + m ()Lnet/minecraft/class_2218; method_9404 operation + m (Ljava/lang/String;)Lnet/minecraft/class_2218$class_2220; method_9407 parseOperation0 + m (II)I method_9414 func_197181_a + m (Ljava/lang/String;)Lnet/minecraft/class_2218$class_2219; method_9413 parseOperation + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2218$class_2219; method_9412 parse + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (II)I method_9415 func_197183_d + m (II)I method_9411 func_197178_b + m (Lnet/minecraft/class_267;Lnet/minecraft/class_267;)V method_9410 func_197175_a + m (II)I method_9405 func_197173_c + f Ljava/util/Collection; field_9929 EXAMPLES + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9931 OPERATION_INVALID + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9930 OPERATION_DIVIDE_BY_ZERO +c net/minecraft/class_2218$class_2219 net/minecraft/command/arguments/OperationArgument$IOperation + m (Lnet/minecraft/class_267;Lnet/minecraft/class_267;)V apply apply +c net/minecraft/class_2218$class_2220 net/minecraft/command/arguments/OperationArgument$IIntOperation + m (II)I apply apply +c net/minecraft/class_2223 net/minecraft/command/arguments/ParticleArgument + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2394; method_9421 getParticle + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2394; method_9416 parse + m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17950 func_218089_a + m ()Ljava/util/Collection; getExamples getExamples + m ()Lnet/minecraft/class_2223; method_9417 particle + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9419 func_208673_a + m (Lcom/mojang/brigadier/StringReader;Lnet/minecraft/class_2396;)Lnet/minecraft/class_2394; method_9420 deserializeParticle + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2394; method_9418 parseParticle + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + f Ljava/util/Collection; field_9935 EXAMPLES + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9936 PARTICLE_NOT_FOUND +c net/minecraft/class_2224 net/minecraft/command/arguments/IRangeArgument + m ()Lnet/minecraft/class_2224$class_2227; method_9422 intRange + m ()Lnet/minecraft/class_2224$class_2225; method_30918 func_243493_b +c net/minecraft/class_2224$class_2227 net/minecraft/command/arguments/IRangeArgument$IntRange + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2096$class_2100; method_9426 parse + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2096$class_2100; method_9425 getIntRange + f Ljava/util/Collection; field_9938 EXAMPLES +c net/minecraft/class_2224$class_2225 net/minecraft/command/arguments/IRangeArgument$FloatRange + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2096$class_2099; method_9423 parse + m ()Ljava/util/Collection; getExamples getExamples + f Ljava/util/Collection; field_9937 EXAMPLES +c net/minecraft/class_2232 net/minecraft/command/arguments/ResourceLocationArgument + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_1320; method_27575 func_239094_d_ + m ()Lnet/minecraft/class_2232; method_9441 resourceLocation + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_27573 func_239091_a_ + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_5341; method_23727 func_228259_c_ + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2960; method_9446 parse + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2960; method_9443 getResourceLocation + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9445 func_208674_b + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9440 func_208676_d + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9444 func_208677_c + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_1860; method_9442 getRecipe + m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_27574 func_239092_a_ + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_161; method_9439 getAdvancement + m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17788 func_239093_b_ + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_24267 field_239090_e_ + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_21506 field_228258_d_ + f Ljava/util/Collection; field_9946 EXAMPLES + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9945 ADVANCEMENT_NOT_FOUND + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9947 RECIPE_NOT_FOUND +c net/minecraft/class_2233 net/minecraft/command/arguments/ScoreHolderArgument + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;Ljava/util/function/Supplier;)Ljava/util/Collection; method_9450 getScoreHolder + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String; method_9452 getSingleScoreHolderNoObjectives + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Lnet/minecraft/class_2233; method_9451 scoreHolders + m ()Lnet/minecraft/class_2233; method_9447 scoreHolder + m (Lnet/minecraft/class_2168;Ljava/util/function/Supplier;)Ljava/util/Collection; method_9457 func_197208_a + m ()Ljava/util/Collection; getExamples getExamples + m (Ljava/util/Collection;Lnet/minecraft/class_2168;Ljava/util/function/Supplier;)Ljava/util/Collection; method_9456 func_197212_a + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2233$class_2234; method_9453 parse + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9455 func_201323_a + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)V method_9448 func_201949_b + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9449 getScoreHolder + m (Lnet/minecraft/class_2233;)Z method_9454 access$000 + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9458 getScoreHolderNoObjectives + f Ljava/util/Collection; field_9948 EXAMPLES + f Z field_9949 allowMultiple + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_9951 SUGGEST_ENTITY_SELECTOR + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9950 EMPTY_EXCEPTION +c net/minecraft/class_2233$class_2236 net/minecraft/command/arguments/ScoreHolderArgument$Serializer + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2233; method_9460 read + m (Lnet/minecraft/class_2233;Lnet/minecraft/class_2540;)V method_9461 write + m (Lnet/minecraft/class_2233;Lcom/google/gson/JsonObject;)V method_9459 write +c net/minecraft/class_2233$class_2235 net/minecraft/command/arguments/ScoreHolderArgument$NameProvider + f Lnet/minecraft/class_2300; field_9952 selector +c net/minecraft/class_2233$class_2234 net/minecraft/command/arguments/ScoreHolderArgument$INameProvider + m (Lnet/minecraft/class_2168;Ljava/util/function/Supplier;)Ljava/util/Collection; getNames getNames +c net/minecraft/class_2239 net/minecraft/command/arguments/ScoreboardSlotArgument + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Integer; method_9466 parse + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9467 func_208678_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I method_9465 getScoreboardSlot + m ()Lnet/minecraft/class_2239; method_9468 scoreboardSlot + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9954 SCOREBOARD_UNKNOWN_DISPLAY_SLOT + f Ljava/util/Collection; field_9953 EXAMPLES +c net/minecraft/class_2240 net/minecraft/command/arguments/SlotArgument + m (Ljava/util/HashMap;)V method_9472 func_209386_a + m ()Lnet/minecraft/class_2240; method_9473 slot + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I method_9469 getSlot + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9471 func_208679_a + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Integer; method_9470 parse + m ()Ljava/util/Collection; getExamples getExamples + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9955 SLOT_UNKNOWN + f Ljava/util/Collection; field_9956 EXAMPLES + f Ljava/util/Map; field_9957 KNOWN_SLOTS +c net/minecraft/class_2243 net/minecraft/command/arguments/TeamArgument + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/String; method_9483 parse + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9481 func_208680_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_268; method_9480 getTeam + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m ()Lnet/minecraft/class_2243; method_9482 team + f Ljava/util/Collection; field_9964 EXAMPLES + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9963 TEAM_NOT_FOUND +c net/minecraft/class_2245 net/minecraft/command/arguments/TimeArgument + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9491 func_218092_a + m ()Lnet/minecraft/class_2245; method_9489 func_218091_a + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Integer; method_9490 parse + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9971 field_218095_c + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9970 field_218094_b + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_9972 field_218096_d + f Ljava/util/Collection; field_9969 field_218093_a +c net/minecraft/class_5242 net/minecraft/command/arguments/UUIDArgument + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/UUID; method_27645 func_239195_a_ + m (Lcom/mojang/brigadier/StringReader;)Ljava/util/UUID; method_27644 parse + m ()Lnet/minecraft/class_5242; method_27643 func_239194_a_ + f Ljava/util/regex/Pattern; field_24320 field_239193_c_ + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_24318 field_239191_a_ + f Ljava/util/Collection; field_24319 field_239192_b_ +c net/minecraft/class_2247 net/minecraft/command/arguments/BlockStateInput + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;I)Z method_9495 place + m ()Lnet/minecraft/class_2680; method_9494 getState + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_2694;)Z method_9493 test + f Lnet/minecraft/class_2487; field_10633 tag + f Ljava/util/Set; field_10631 properties + f Lnet/minecraft/class_2680; field_10632 state +c net/minecraft/class_2252 net/minecraft/command/arguments/BlockPredicateArgument + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2259;Lnet/minecraft/class_5415;)Ljava/util/function/Predicate; method_9646 func_199822_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/function/Predicate; method_9644 getBlockPredicate + m ()Lnet/minecraft/class_2252; method_9645 blockPredicate + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9643 func_208682_a + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2252$class_2254; method_9642 parse + m (Lnet/minecraft/class_2252$class_2253;Lnet/minecraft/class_5415;)Ljava/util/function/Predicate; method_9647 func_199823_a + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10671 UNKNOWN_TAG + f Ljava/util/Collection; field_10672 EXAMPLES +c net/minecraft/class_2252$1 net/minecraft/command/arguments/BlockPredicateArgument$1 +c net/minecraft/class_2252$class_2255 net/minecraft/command/arguments/BlockPredicateArgument$TagPredicate + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_2694;)Z method_9649 test + f Ljava/util/Map; field_10678 properties + f Lnet/minecraft/class_2487; field_10677 nbt + f Lnet/minecraft/class_3494; field_10676 tag +c net/minecraft/class_2252$class_2254 net/minecraft/command/arguments/BlockPredicateArgument$IResult + m (Lnet/minecraft/class_5415;)Ljava/util/function/Predicate; create create +c net/minecraft/class_2252$class_2253 net/minecraft/command/arguments/BlockPredicateArgument$BlockPredicate + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_2694;)Z method_9648 test + f Lnet/minecraft/class_2487; field_10675 nbt + f Ljava/util/Set; field_10673 properties + f Lnet/minecraft/class_2680; field_10674 state +c net/minecraft/class_2257 net/minecraft/command/arguments/BlockStateArgument + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m ()Ljava/util/Collection; getExamples getExamples + m ()Lnet/minecraft/class_2257; method_9653 blockState + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2247; method_9655 getBlockState + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2247; method_9654 parse + f Ljava/util/Collection; field_10679 EXAMPLES +c net/minecraft/class_2259 net/minecraft/command/arguments/BlockStateParser + m (Z)Lnet/minecraft/class_2259; method_9678 parse + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9682 func_208687_a + m (Lnet/minecraft/class_2680;)Ljava/lang/String; method_9685 toString + m ()Lnet/minecraft/class_2487; method_9694 getNbt + m ()Lnet/minecraft/class_2680; method_9669 getState + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9661 func_208685_c + m ()V method_9677 readTag + m (Ljava/lang/String;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9683 func_200138_a_ + m ()Ljava/util/Map; method_9692 getProperties + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9671 suggestPropertyOrEnd + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9686 func_208689_a + m ()V method_9680 readStringProperties + m (Lnet/minecraft/class_2769;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9684 func_197251_a_ + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9693 suggestEquals + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9667 suggestStringProperty + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_2769;)Lcom/mojang/brigadier/suggestion/SuggestionsBuilder; method_9662 suggestValue + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_29383 func_239308_m_ + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9679 func_212599_i + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9670 suggestTag + m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9660 func_208684_a + m (I)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17956 func_239291_a_ + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9691 func_208690_b + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9666 getSuggestions + m ()V method_9675 readBlock + m (Ljava/lang/StringBuilder;Lnet/minecraft/class_2769;Ljava/lang/Comparable;)V method_9663 propValToString + m ()V method_9659 readProperties + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9674 suggestStringPropertyOrEnd + m ()V method_9672 readNBT + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9687 suggestNbt + m (Lnet/minecraft/class_2769;Ljava/lang/String;I)V method_9668 parseValue + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9689 suggestPropertyEndOrContinue + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9665 suggestProperty + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9673 suggestTagOrBlock + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;Ljava/lang/String;)Ljava/util/concurrent/CompletableFuture; method_9690 func_239295_a_ + m ()Lnet/minecraft/class_2960; method_9664 getTag + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9681 suggestPropertyOrNbt + m (Lnet/minecraft/class_5414;)Z method_9676 func_212598_k + m ()Ljava/util/Map; method_9688 getStringProperties + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_10692 STATE_DUPLICATE_PROPERTY + f Lnet/minecraft/class_2960; field_10697 blockID + f Lnet/minecraft/class_2960; field_10681 tag + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_10688 STATE_NO_VALUE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10684 STATE_UNCLOSED + f Ljava/util/function/BiFunction; field_10682 SUGGEST_NONE + f Lnet/minecraft/class_2689; field_10689 blockStateContainer + f Lnet/minecraft/class_2487; field_10693 nbt + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10691 STATE_TAGS_NOT_ALLOWED + f Ljava/util/Map; field_10685 stringProperties + f Ljava/util/function/BiFunction; field_10696 suggestor + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_10695 STATE_UNKNOWN_PROPERTY + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10690 STATE_BAD_ID + f Z field_10687 tagsAllowed + f I field_10694 cursorPos + f Ljava/util/Map; field_10699 properties + f Lcom/mojang/brigadier/exceptions/Dynamic3CommandExceptionType; field_10683 STATE_INVALID_PROPERTY_VALUE + f Lnet/minecraft/class_2680; field_10686 state + f Lcom/mojang/brigadier/StringReader; field_10698 reader +c net/minecraft/class_2262 net/minecraft/command/arguments/BlockPosArgument + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2338; method_9696 getLoadedBlockPos + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2338; method_9697 getBlockPos + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2267; method_9699 parse + m ()Lnet/minecraft/class_2262; method_9698 blockPos + f Ljava/util/Collection; field_10702 EXAMPLES + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10704 POS_OUT_OF_WORLD + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10703 POS_UNLOADED +c net/minecraft/class_2264 net/minecraft/command/arguments/ColumnPosArgument + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2265; method_9702 fromBlockPos + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Lnet/minecraft/class_2264; method_9701 columnPos + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2267; method_9703 parse + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10706 INCOMPLETE_EXCEPTION + f Ljava/util/Collection; field_10705 EXAMPLES +c net/minecraft/class_2267 net/minecraft/command/arguments/ILocationArgument + m ()Z method_9707 isZRelative + m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_2338; method_9704 getBlockPos + m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_243; method_9708 getPosition + m ()Z method_9706 isYRelative + m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_241; method_9709 getRotation + m ()Z method_9705 isXRelative +c net/minecraft/class_2268 net/minecraft/command/arguments/LocalLocationArgument + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2268; method_9711 parse + m (Lcom/mojang/brigadier/StringReader;I)D method_9710 parseCoord + f D field_10714 left + f D field_10713 up + f D field_10712 forwards +c net/minecraft/class_2270 net/minecraft/command/arguments/RotationArgument + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2267; method_9716 getRotation + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2267; method_9718 parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Lnet/minecraft/class_2270; method_9717 rotation + f Ljava/util/Collection; field_10735 EXAMPLES + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10736 ROTATION_INCOMPLETE +c net/minecraft/class_2273 net/minecraft/command/arguments/SwizzleArgument + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Lnet/minecraft/class_2273; method_9721 swizzle + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/EnumSet; method_9720 getSwizzle + m (Lcom/mojang/brigadier/StringReader;)Ljava/util/EnumSet; method_9722 parse + f Ljava/util/Collection; field_10740 EXAMPLES + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10741 SWIZZLE_INVALID +c net/minecraft/class_2274 net/minecraft/command/arguments/Vec2Argument + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_241; method_9724 getVec2f + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2267; method_9725 parse + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m ()Lnet/minecraft/class_2274; method_9723 vec2 + f Ljava/util/Collection; field_10742 EXAMPLES + f Z field_10744 centerIntegers + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10743 VEC2_INCOMPLETE +c net/minecraft/class_2277 net/minecraft/command/arguments/Vec3Argument + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2267; method_9734 getLocation + m ()Lnet/minecraft/class_2277; method_9737 vec3 + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_243; method_9736 getVec3 + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m (Z)Lnet/minecraft/class_2277; method_9735 vec3 + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2267; method_9738 parse + f Ljava/util/Collection; field_10754 EXAMPLES + f Z field_10756 centerIntegers + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10757 POS_MIXED_TYPES + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10755 POS_INCOMPLETE +c net/minecraft/class_2278 net/minecraft/command/arguments/LocationPart + m (Lcom/mojang/brigadier/StringReader;)Z method_9742 isRelative + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2278; method_9739 parseInt + m (Ljava/lang/Object;)Z equals equals + m (D)D method_9740 get + m ()Z method_9741 isRelative + m (Lcom/mojang/brigadier/StringReader;Z)Lnet/minecraft/class_2278; method_9743 parseDouble + m ()I hashCode hashCode + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10761 EXPECTED_INT + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10759 EXPECTED_DOUBLE + f D field_10758 value + f Z field_10760 relative +c net/minecraft/class_2280 net/minecraft/command/arguments/LocationInput + m (Ljava/lang/Object;)Z equals equals + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2280; method_9749 parseInt + m ()Lnet/minecraft/class_2280; method_9751 current + m (Lcom/mojang/brigadier/StringReader;Z)Lnet/minecraft/class_2280; method_9750 parseDouble + m ()I hashCode hashCode + f Lnet/minecraft/class_2278; field_10765 x + f Lnet/minecraft/class_2278; field_10766 z + f Lnet/minecraft/class_2278; field_10764 y +c net/minecraft/class_2284 net/minecraft/command/arguments/FunctionArgument + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9765 func_208691_b + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_9766 func_218107_a + m ()Lnet/minecraft/class_2284; method_9760 function + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9762 func_208694_a + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_9767 func_218111_d + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9769 getFunctions + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;)Lnet/minecraft/class_2158; method_9761 func_218108_c + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair; method_9768 func_218110_b + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;)Lnet/minecraft/class_2158; method_9763 func_218112_b + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17959 func_218109_a + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2284$class_2285; method_9764 parse + f Ljava/util/Collection; field_10783 EXAMPLES + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10782 FUNCTION_UNKNOWN_TAG + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10784 FUNCTION_UNKNOWN +c net/minecraft/class_2284$class_2285 net/minecraft/command/arguments/FunctionArgument$IResult + m (Lcom/mojang/brigadier/context/CommandContext;)Lcom/mojang/datafixers/util/Pair; method_9770 func_218102_b + m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_9771 create +c net/minecraft/class_2284$2 net/minecraft/command/arguments/FunctionArgument$2 + f Lnet/minecraft/class_2284; field_10788 field_218106_b + f Lnet/minecraft/class_2960; field_10787 field_218105_a +c net/minecraft/class_2284$1 net/minecraft/command/arguments/FunctionArgument$1 + f Lnet/minecraft/class_2960; field_10785 field_218103_a + f Lnet/minecraft/class_2284; field_10786 field_218104_b +c net/minecraft/class_2287 net/minecraft/command/arguments/ItemArgument + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2290; method_9777 getItem + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2290; method_9778 parse + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m ()Lnet/minecraft/class_2287; method_9776 item + f Ljava/util/Collection; field_10790 EXAMPLES +c net/minecraft/class_2290 net/minecraft/command/arguments/ItemInput + m ()Lnet/minecraft/class_1792; method_9785 getItem + m (IZ)Lnet/minecraft/class_1799; method_9781 createStack + m (Lnet/minecraft/class_1799;)Z method_9783 test + m (Ljava/lang/Object;)Z test test + m ()Ljava/lang/String; method_9782 serialize + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9784 func_208695_a + f Lnet/minecraft/class_2487; field_10798 tag + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_10797 STACK_TOO_LARGE + f Lnet/minecraft/class_1792; field_10796 item +c net/minecraft/class_2291 net/minecraft/command/arguments/ItemParser + m ()V method_9787 readTag + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9793 fillSuggestions + m ()V method_9795 readItem + m ()V method_9788 readNBT + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9794 suggestItem + m ()Lnet/minecraft/class_2960; method_9790 getTag + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9796 suggestTag + m ()Lnet/minecraft/class_2291; method_9789 parse + m (ILnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17960 func_239566_a_ + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9792 func_208696_a + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9791 suggestTagOrItem + m ()Lnet/minecraft/class_2487; method_9797 getNbt + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_29394 func_239571_e_ + m ()Lnet/minecraft/class_1792; method_9786 getItem + f Lnet/minecraft/class_1792; field_10803 item + f Lnet/minecraft/class_2960; field_10808 tag + f Ljava/util/function/BiFunction; field_10805 suggestionsBuilder + f Ljava/util/Map; field_10801 field_197336_d + f Ljava/util/function/BiFunction; field_10806 DEFAULT_SUGGESTIONS_BUILDER + f Lcom/mojang/brigadier/StringReader; field_10802 reader + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10800 ITEM_TAGS_NOT_ALLOWED + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10799 ITEM_BAD_ID + f I field_10809 readerCursor + f Lnet/minecraft/class_2487; field_10807 nbt + f Z field_10804 allowTags +c net/minecraft/class_2293 net/minecraft/command/arguments/ItemPredicateArgument + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9802 func_208699_a + m ()Ljava/util/Collection; getExamples getExamples + m ()Lnet/minecraft/class_2293; method_9801 itemPredicate + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2291;Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/function/Predicate; method_9803 func_199845_a + m (Lnet/minecraft/class_2293$class_2294;Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/function/Predicate; method_9805 func_199848_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/function/Predicate; method_9804 getItemPredicate + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2293$class_2295; method_9800 parse + f Ljava/util/Collection; field_10812 EXAMPLES + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10811 UNKNOWN_TAG +c net/minecraft/class_2293$class_2296 net/minecraft/command/arguments/ItemPredicateArgument$TagPredicate + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_1799;)Z method_9807 test + f Lnet/minecraft/class_2487; field_10816 nbt + f Lnet/minecraft/class_3494; field_10815 tag +c net/minecraft/class_2293$class_2295 net/minecraft/command/arguments/ItemPredicateArgument$IResult + m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/function/Predicate; create create +c net/minecraft/class_2293$class_2294 net/minecraft/command/arguments/ItemPredicateArgument$ItemPredicate + m (Lnet/minecraft/class_1799;)Z method_9806 test + m (Ljava/lang/Object;)Z test test + f Lnet/minecraft/class_2487; field_10814 nbt + f Lnet/minecraft/class_1792; field_10813 item +c net/minecraft/class_2300 net/minecraft/command/arguments/EntitySelector + m (Ljava/util/List;Lnet/minecraft/class_3218;Lnet/minecraft/class_243;Ljava/util/function/Predicate;)V method_9823 getEntities + m (Lnet/minecraft/class_2168;)Ljava/util/List; method_9816 select + m (Lnet/minecraft/class_2168;)Ljava/util/List; method_9813 selectPlayers + m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_3222; method_9811 selectOnePlayer + m (Lnet/minecraft/class_243;)Ljava/util/function/Predicate; method_9817 updateFilter + m (Lnet/minecraft/class_243;Ljava/util/List;)Ljava/util/List; method_9814 sortAndLimit + m ()I method_9815 getLimit + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)Z method_9812 func_211376_a + m ()Z method_9819 includesEntities + m (Lnet/minecraft/class_2168;)V method_9818 checkPermission + m ()Z method_9820 isSelfSelector + m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_1297; method_9809 selectOne + m (Lnet/minecraft/class_238;Lnet/minecraft/class_1297;)Z method_9810 func_197344_a + m (Ljava/util/List;)Lnet/minecraft/class_5250; method_9822 joinNames + m ()Z method_9821 isWorldLimited + f field_10829 currentWorldOnly + f Z field_10827 checkPermission + f I field_10822 limit + f Ljava/util/UUID; field_10821 uuid + f Lnet/minecraft/class_238; field_10824 aabb + f Lnet/minecraft/class_2096$class_2099; field_10825 distance + f Ljava/lang/String; field_10831 username + f Lnet/minecraft/class_1299; field_10832 type + f Ljava/util/function/BiConsumer; field_10826 sorter + f Ljava/util/function/Function; field_10823 positionGetter + f Z field_10830 includeNonPlayers + f Z field_10828 self + f Ljava/util/function/Predicate; field_10820 filter +c net/minecraft/class_2303 net/minecraft/command/arguments/EntitySelectorParser + m ()Lnet/minecraft/class_2300; method_9871 build + m ()V method_9852 setCurrentWorldOnly + m ()Lnet/minecraft/class_2300; method_9882 parse + m (Ljava/util/function/BiConsumer;)V method_9845 setSorter + m ()Z method_9904 hasTeamEquals + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9911 suggestOptionsOrEnd + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9903 func_208711_a + m (D)V method_9864 setY + m (Z)V method_9913 setHasNameNotEquals + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9854 func_201342_j + m (Z)V method_9890 setHasGamemodeEquals + m ()V method_9878 updateFilter + m (D)V method_9905 setDy + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9858 suggestName + m (Lnet/minecraft/class_243;Ljava/util/List;)V method_9901 func_197383_b + m ()Ljava/lang/Double; method_9884 getY + m ()Z method_9844 hasNameNotEquals + m ()V method_9874 parseArguments + m ()Ljava/lang/Double; method_9907 getDz + m (Z)V method_9848 setHasScores + m (Lnet/minecraft/class_1297;)D method_9914 func_197385_b + m ()Lnet/minecraft/class_2096$class_2099; method_9873 getDistance + m (D)V method_9850 setX + m ()Z method_9837 hasGamemodeNotEquals + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_9869 func_197379_b + m ()Z method_9886 isTypeLimited + m ()Lnet/minecraft/class_2096$class_2100; method_9895 getLevel + m (Z)V method_9899 setHasNameEquals + m (Lnet/minecraft/class_243;Ljava/util/List;)V method_9888 func_197392_b + m ()Z method_9861 hasAdvancements + m (Z)V method_9887 setSorted + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9880 suggestNameOrSelector + m (Lnet/minecraft/class_2152;Ljava/util/function/ToDoubleFunction;)Ljava/util/function/Predicate; method_9859 createRotationPredicate + m ()Ljava/lang/Double; method_9902 getX + m (Z)V method_9833 setHasTeamNotEquals + m ()V method_9849 parseSingleEntity + m (Lnet/minecraft/class_2152;)V method_9855 setYRotation + m ()Ljava/lang/Double; method_9840 getDy + m ()Z method_9912 hasNameEquals + m ()Z method_9839 hasGamemodeEquals + m (Lnet/minecraft/class_1297;)D method_9856 func_197386_c + m (Lnet/minecraft/class_1297;)Z method_9838 func_197375_d + m ()Z method_9915 func_218115_f + m (Lnet/minecraft/class_2152;)V method_9898 setXRotation + m (Lnet/minecraft/class_2096$class_2100;)V method_9846 setLevel + m (Z)V method_9841 setIncludeNonPlayers + m ()V method_9860 setTypeLimitedInversely + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9847 suggestCommaOrEnd + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)I method_9862 func_197369_a + m (D)V method_9891 setDx + m ()Lnet/minecraft/class_2152; method_9883 getXRotation + m (DDD)Lnet/minecraft/class_238; method_9894 createAABB + m ()Z method_9843 hasScores + m ()Lcom/mojang/brigadier/StringReader; method_9835 getReader + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9908 fillSuggestions + m ()Z method_9885 isCurrentEntity + m (Lnet/minecraft/class_243;Ljava/util/List;)V method_9836 func_197402_c + m ()Ljava/lang/Double; method_9851 getDx + m (Z)V method_9865 setHasTeamEquals + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9893 suggestOpenBracket + m (Lnet/minecraft/class_2096$class_2099;)V method_9870 setDistance + m ()V method_9917 parseSelector + m ()Z method_9889 isSorted + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)V method_9896 fillSelectorSuggestions + m (Ljava/util/function/ToDoubleFunction;DDLnet/minecraft/class_1297;)Z method_9881 func_197374_a + m (Lnet/minecraft/class_1299;)V method_9842 func_218114_a + m (Lnet/minecraft/class_1297;)Z method_9876 func_197371_a + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9909 suggestOptions + m (Z)V method_9877 setLimited + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)I method_9897 func_197393_a + m ()Lnet/minecraft/class_2152; method_9853 getYRotation + m (D)V method_9879 setZ + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9863 func_208703_b + m (Lnet/minecraft/class_243;Ljava/util/List;)V method_9867 func_197368_a + m ()Z method_9910 isTypeLimitedInversely + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_9872 func_197367_a + m (D)V method_9918 setDz + m (I)V method_9900 setLimit + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9834 suggestSelector + m (Z)V method_9857 setHasGamemodeNotEquals + m ()Ljava/lang/Double; method_9868 getZ + m (Ljava/util/function/BiFunction;)V method_9875 setSuggestionHandler + m (Z)V method_9906 setHasAdvancements + m ()Z method_9866 isLimited + m (Ljava/util/function/Predicate;)V method_9916 addFilter + m ()Z method_9892 shouldInvertValue + f field_10844 SELECTOR_TYPE_MISSING + f Ljava/util/function/BiConsumer; field_10856 ARBITRARY + f I field_10861 cursorStart + f Z field_10843 includeNonPlayers + f Z field_10874 hasNameNotEquals + f Lcom/mojang/brigadier/StringReader; field_10860 reader + f Z field_10849 hasGamemodeEquals + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10837 EXPECTED_END_OF_OPTIONS + f Ljava/lang/Double; field_10839 z + f Z field_10840 checkPermission + f Ljava/util/function/BiConsumer; field_10869 NEAREST + f Lnet/minecraft/class_1299; field_10863 type + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10880 SELECTOR_NOT_ALLOWED + f Ljava/util/function/Predicate; field_10870 filter + f Z field_10854 hasNameEquals + f Z field_10873 isSorted + f Lnet/minecraft/class_2096$class_2099; field_10838 distance + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10853 UNKNOWN_SELECTOR_TYPE + f Ljava/lang/Double; field_10872 y + f Ljava/util/UUID; field_10878 uuid + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10855 EXPECTED_VALUE_FOR_OPTION + f Z field_10868 hasTeamNotEquals + f I field_10858 limit + f Z field_10864 hasAdvancements + f Lnet/minecraft/class_2152; field_10877 xRotation + f Ljava/lang/Double; field_10881 dz + f Ljava/util/function/BiFunction; field_10867 SUGGEST_NONE + f Ljava/lang/String; field_10876 username + f Lnet/minecraft/class_2096$class_2100; field_10842 level + f Ljava/util/function/BiConsumer; field_10882 FURTHEST + f Z field_10879 self + f Z field_10846 hasPermission + f Z field_10851 isLimited + f Z field_10845 hasTeamEquals + f Ljava/lang/Double; field_10857 x + f Ljava/util/function/BiConsumer; field_10847 sorter + f Ljava/lang/Double; field_10852 dy + f Lnet/minecraft/class_2152; field_10859 yRotation + f Z field_10841 hasScores + f Ljava/util/function/BiFunction; field_10848 suggestionHandler + f Ljava/util/function/BiConsumer; field_10850 RANDOM + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10875 INVALID_ENTITY_NAME_OR_UUID + f Z field_10866 currentWorldOnly + f Z field_10871 hasGamemodeNotEquals + f Z field_10865 typeInverse + f Ljava/lang/Double; field_10862 dx +c net/minecraft/class_2306 net/minecraft/command/arguments/EntityOptions + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9956 func_208749_c + m (Lnet/minecraft/class_2303;)Z method_9943 func_202016_M + m (Lnet/minecraft/class_2303;)V method_9975 func_197457_d + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9964 func_208758_a + m (Lnet/minecraft/class_2303;)Z method_9933 func_202030_w + m (Lnet/minecraft/class_2303;)V method_9968 func_197448_h + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9959 func_208752_e + m (Lnet/minecraft/class_2303;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9946 func_202018_b + m (Lnet/minecraft/class_2303;Ljava/lang/String;I)Lnet/minecraft/class_2306$class_2307; method_9976 get + m (Lnet/minecraft/class_2303;)V method_9966 func_197450_f + m (Lnet/minecraft/class_2303;)Z method_9945 func_202019_I + m (Lnet/minecraft/class_2303;)V method_22824 func_229367_b_ + m (Lnet/minecraft/class_2303;)Z method_9955 func_202036_o + m (Ljava/lang/String;ZLnet/minecraft/class_1297;)Z method_9965 func_197466_a + m (Lnet/minecraft/class_2303;)Z method_9942 func_202022_G + m (Ljava/util/Map;Lnet/minecraft/class_1297;)Z method_9958 func_197441_a + m (Lnet/minecraft/class_2303;)Z method_9934 func_202020_K + m (Lnet/minecraft/class_2303;)V method_9974 func_197453_b + m (Lnet/minecraft/class_2487;ZLnet/minecraft/class_1297;)Z method_9957 func_197443_a + m (Lnet/minecraft/class_2303;)Z method_9935 func_202028_u + m (Lnet/minecraft/class_2303;)V method_9953 func_197455_p + m (Lnet/minecraft/class_2303;)V method_9977 func_197464_D + m (Lnet/minecraft/class_2303;)V method_9948 func_197452_n + m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9967 func_202056_a + m (Lnet/minecraft/class_2303;)V method_9979 func_197437_H + m (Lnet/minecraft/class_2960;ZLnet/minecraft/class_1297;)Z method_9950 func_239573_b_ + m (Lnet/minecraft/class_2303;)V method_9969 func_197456_r + m (Ljava/lang/String;ZLnet/minecraft/class_1297;)Z method_9922 func_197454_b + m (Lnet/minecraft/class_2303;)V method_9978 func_197442_F + m (Lnet/minecraft/class_2303;)V method_9963 func_197463_z + m (Lnet/minecraft/class_2303;)V method_9973 func_197447_j + m (Ljava/lang/String;Lnet/minecraft/class_2306$class_2307;Ljava/util/function/Predicate;Lnet/minecraft/class_2561;)V method_9961 register + m (Lnet/minecraft/class_2303;)V method_9962 func_197460_B + m (Lnet/minecraft/class_2303;)V method_9951 func_197449_l + m (Lnet/minecraft/class_2303;)Z method_9927 func_202033_c + m (Lnet/minecraft/class_2303;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9921 func_202052_a + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9932 func_208740_b + m (Lnet/minecraft/class_2303;)V method_9982 func_197440_N + m (Lnet/minecraft/class_2303;)Z method_9941 func_202046_e + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9923 func_208726_d + m (Lnet/minecraft/class_2303;)V method_9980 func_197438_J + m (Lnet/minecraft/class_2303;)V method_9970 func_197461_p + m (ZLnet/minecraft/class_1934;Lnet/minecraft/class_1297;)Z method_9924 func_202055_a + m (Lnet/minecraft/class_2303;)Z method_9926 func_202032_a + m (Lnet/minecraft/class_2303;)V method_9972 func_197458_x + m (Ljava/util/Map;Lnet/minecraft/class_1297;)Z method_9937 func_197465_b + m (Lnet/minecraft/class_1299;ZLnet/minecraft/class_1297;)Z method_9919 func_202057_a + m (Lnet/minecraft/class_2303;)V method_9981 func_197439_L + m (Lnet/minecraft/class_2303;)Z method_22822 func_229365_a_ + m (Lnet/minecraft/class_2303;)V method_9971 func_197462_v + m (Lnet/minecraft/class_2303;)Z method_9925 func_202029_C + m (Lnet/minecraft/class_2303;)Z method_9952 func_202048_m + m (Lnet/minecraft/class_2303;)Z method_9954 func_202035_q + m (Ljava/lang/String;ZLnet/minecraft/class_1297;)Z method_9920 func_197446_c + m (Lnet/minecraft/class_2303;)Z method_9944 func_202021_E + m (Lnet/minecraft/class_2303;)Z method_9949 func_202043_o + m (ZLnet/minecraft/class_167;)Z method_9936 func_197451_a + m (Lnet/minecraft/class_2303;ILnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17961 func_218135_a + m (Lnet/minecraft/class_2303;)Z method_9939 func_202047_i + m ()V method_9960 registerOptions + m (Ljava/util/Map;Lnet/minecraft/class_167;)Z method_9929 func_197435_a + m (Lnet/minecraft/class_2303;)Z method_9938 func_202041_g + m (Lnet/minecraft/class_2960;ZLnet/minecraft/class_1297;)Z method_22823 func_229366_a_ + m (Lnet/minecraft/class_2303;)Z method_9947 func_202027_A + m (Lnet/minecraft/class_2303;)Z method_9940 func_202038_k + m (ZLnet/minecraft/class_178;)Z method_9931 func_197444_a + m (Lnet/minecraft/class_2303;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)V method_9930 suggestOptions + m (Lnet/minecraft/class_2303;)Z method_9928 func_202026_y + f field_10886 NONPOSITIVE_LIMIT + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10889 INVALID_GAME_MODE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10890 NEGATIVE_DISTANCE + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10885 UNKNOWN_ENTITY_OPTION + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10892 INVALID_ENTITY_TYPE + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10888 INVALID_SORT + f Ljava/util/Map; field_10891 REGISTRY + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10893 NEGATIVE_LEVEL + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10887 INAPPLICABLE_ENTITY_OPTION +c net/minecraft/class_2306$class_2308 net/minecraft/command/arguments/EntityOptions$OptionHandler + f Lnet/minecraft/class_2561; field_10894 tooltip + f Ljava/util/function/Predicate; field_10896 canHandle + f Lnet/minecraft/class_2306$class_2307; field_10895 handler +c net/minecraft/class_2306$class_2307 net/minecraft/command/arguments/EntityOptions$IFilter + m (Lnet/minecraft/class_2303;)V handle handle +c net/minecraft/class_2306$1 net/minecraft/command/arguments/EntityOptions$1 +c net/minecraft/class_2314 net/minecraft/command/arguments/IArgumentSerializer + m (Lcom/mojang/brigadier/arguments/ArgumentType;Lcom/google/gson/JsonObject;)V method_10006 write + m (Lcom/mojang/brigadier/arguments/ArgumentType;Lnet/minecraft/class_2540;)V method_10007 write + m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/ArgumentType; method_10005 read +c net/minecraft/class_2316 net/minecraft/command/arguments/ArgumentTypes + m (Lcom/mojang/brigadier/tree/CommandNode;)Ljava/util/Set; method_30924 func_243511_a + m (Lcom/mojang/brigadier/arguments/ArgumentType;)Z method_30923 func_243510_a + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2316$class_2317; method_10018 get + m (Lnet/minecraft/class_2540;Lcom/mojang/brigadier/arguments/ArgumentType;)V method_10019 serialize + m ()V method_10015 registerArgumentTypes + m (Lcom/mojang/brigadier/tree/CommandNode;Ljava/util/Set;Ljava/util/Set;)V method_30925 func_243512_a + m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/ArgumentType; method_10014 deserialize + m (Lcom/mojang/brigadier/arguments/ArgumentType;)Lnet/minecraft/class_2316$class_2317; method_10013 get + m (Ljava/util/Set;Ljava/util/Set;Lcom/mojang/brigadier/tree/CommandNode;)V method_30926 func_243513_a + m (Lcom/mojang/brigadier/CommandDispatcher;Lcom/mojang/brigadier/tree/CommandNode;)Lcom/google/gson/JsonObject; method_10016 serialize + m (Lcom/google/gson/JsonObject;Lcom/mojang/brigadier/arguments/ArgumentType;)V method_10020 serialize + m (Ljava/lang/String;Ljava/lang/Class;Lnet/minecraft/class_2314;)V method_10017 register + f Ljava/util/Map; field_10922 ID_TYPE_MAP + f Ljava/util/Map; field_10921 CLASS_TYPE_MAP + f Lorg/apache/logging/log4j/Logger; field_10923 LOGGER +c net/minecraft/class_2316$class_2317 net/minecraft/command/arguments/ArgumentTypes$Entry + f Lnet/minecraft/class_2314; field_10926 serializer + f Ljava/lang/Class; field_10924 argumentClass + f Lnet/minecraft/class_2960; field_10925 id +c net/minecraft/class_2316$1 net/minecraft/command/arguments/ArgumentTypes$1 +c net/minecraft/class_2319 net/minecraft/command/arguments/ArgumentSerializer + f Ljava/util/function/Supplier; field_10928 factory +c net/minecraft/class_2321 net/minecraft/command/arguments/SuggestionProviders + m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/suggestion/SuggestionProvider; method_10024 get + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_24473 func_239577_b_ + m (Lnet/minecraft/class_1299;)Lcom/mojang/brigadier/Message; method_10023 func_201209_a_ + m (Lcom/mojang/brigadier/suggestion/SuggestionProvider;)Lnet/minecraft/class_2960; method_10027 getId + m (Lcom/mojang/brigadier/suggestion/SuggestionProvider;)Lcom/mojang/brigadier/suggestion/SuggestionProvider; method_10026 ensureKnown + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_10028 func_201210_a_ + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_10025 func_197495_b + m (Lnet/minecraft/class_2960;Lcom/mojang/brigadier/suggestion/SuggestionProvider;)Lcom/mojang/brigadier/suggestion/SuggestionProvider; method_10022 register + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_10030 func_197501_c + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_10029 func_197500_d + f Lnet/minecraft/class_2960; field_10930 ASK_SERVER_ID + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_10935 SUMMONABLE_ENTITIES + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_10932 ALL_RECIPES + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_10934 AVAILABLE_SOUNDS + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_22245 field_239574_d_ + f Ljava/util/Map; field_10931 REGISTRY + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_10933 ASK_SERVER +c net/minecraft/class_2321$class_2322 net/minecraft/command/arguments/SuggestionProviders$Wrapper + m (Lnet/minecraft/class_2321$class_2322;)Lnet/minecraft/class_2960; method_10031 access$000 + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; getSuggestions getSuggestions + f Lnet/minecraft/class_2960; field_10936 id + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_10937 provider +c net/minecraft/class_2324 net/minecraft/command/arguments/serializers/BrigadierSerializers + m (B)Z method_10039 hasMin + m (B)Z method_10038 hasMax + m (ZZ)B method_10037 minMaxFlags + m ()V method_10040 registerArgumentTypes +c net/minecraft/class_2326 net/minecraft/command/arguments/serializers/DoubleArgumentSerializer + m (Lcom/mojang/brigadier/arguments/DoubleArgumentType;Lnet/minecraft/class_2540;)V method_10041 write + m (Lcom/mojang/brigadier/arguments/DoubleArgumentType;Lcom/google/gson/JsonObject;)V method_10043 write + m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/DoubleArgumentType; method_10042 read +c net/minecraft/class_2327 net/minecraft/command/arguments/serializers/FloatArgumentSerializer + m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/FloatArgumentType; method_10045 read + m (Lcom/mojang/brigadier/arguments/FloatArgumentType;Lcom/google/gson/JsonObject;)V method_10046 write + m (Lcom/mojang/brigadier/arguments/FloatArgumentType;Lnet/minecraft/class_2540;)V method_10044 write +c net/minecraft/class_2330 net/minecraft/command/arguments/serializers/IntArgumentSerializer + m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/IntegerArgumentType; method_10050 read + m (Lcom/mojang/brigadier/arguments/IntegerArgumentType;Lcom/google/gson/JsonObject;)V method_10049 write + m (Lcom/mojang/brigadier/arguments/IntegerArgumentType;Lnet/minecraft/class_2540;)V method_10048 write +c net/minecraft/class_4461 net/minecraft/command/arguments/serializers/LongArgumentSerializer + m (Lcom/mojang/brigadier/arguments/LongArgumentType;Lnet/minecraft/class_2540;)V method_21690 write + m (Lcom/mojang/brigadier/arguments/LongArgumentType;Lcom/google/gson/JsonObject;)V method_21689 write + m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/LongArgumentType; method_21691 read +c net/minecraft/class_2332 net/minecraft/command/arguments/serializers/StringArgumentSerializer + m (Lcom/mojang/brigadier/arguments/StringArgumentType;Lcom/google/gson/JsonObject;)V method_10051 write + m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/StringArgumentType; method_10052 read + m (Lcom/mojang/brigadier/arguments/StringArgumentType;Lnet/minecraft/class_2540;)V method_10053 write +c net/minecraft/class_2332$1 net/minecraft/command/arguments/serializers/StringArgumentSerializer$1 + f [I field_10952 field_197512_a +c net/minecraft/class_2335 net/minecraft/util/AxisRotation + m (Ljava/lang/String;)Lnet/minecraft/class_2335; valueOf valueOf + m (IIILnet/minecraft/class_2350$class_2351;)I method_10056 getCoordinate + m (Lnet/minecraft/class_2350$class_2351;)Lnet/minecraft/class_2350$class_2351; method_10058 rotate + m ()Lnet/minecraft/class_2335; method_10055 reverse + m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_2350$class_2351;)Lnet/minecraft/class_2335; method_10057 from + m ()[Lnet/minecraft/class_2335; values values + f Lnet/minecraft/class_2335; field_10962 NONE + f [Lnet/minecraft/class_2350$class_2351; field_10961 AXES + f Lnet/minecraft/class_2335; field_10963 FORWARD + f Lnet/minecraft/class_2335; field_10965 BACKWARD + f [Lnet/minecraft/class_2335; field_10964 $VALUES + f [Lnet/minecraft/class_2335; field_10960 AXIS_ROTATIONS +c net/minecraft/class_2335$1 net/minecraft/util/AxisRotation$1 +c net/minecraft/class_2335$2 net/minecraft/util/AxisRotation$2 +c net/minecraft/class_2335$3 net/minecraft/util/AxisRotation$3 +c net/minecraft/class_4609 net/minecraft/client/renderer/model/UVTransformationUtil + m (Lnet/minecraft/class_4590;Lnet/minecraft/class_2350;Ljava/util/function/Supplier;)Lnet/minecraft/class_4590; method_23221 getUVLockTransform + m (Ljava/util/EnumMap;)V method_23222 func_229381_a_ + m (Lnet/minecraft/class_4590;)Lnet/minecraft/class_4590; method_23220 blockCenterToCorner + m (Ljava/util/EnumMap;)V method_23223 func_229382_b_ + f Lorg/apache/logging/log4j/Logger; field_21023 LOGGER + f Ljava/util/EnumMap; field_21021 TRANSFORM_LOCAL_TO_GLOBAL + f Ljava/util/EnumMap; field_21022 TRANSFORM_GLOBAL_TO_LOCAL +c net/minecraft/class_2338 net/minecraft/util/math/BlockPos + m ([I)Lnet/minecraft/class_2338; method_29095 func_239587_a_ + m (I)Lnet/minecraft/class_2338; method_10088 west + m (J)Lnet/minecraft/class_2338; method_10092 fromLong + m ()Lnet/minecraft/class_2338; method_10084 up + m (Lnet/minecraft/class_238;)Ljava/util/stream/Stream; method_29715 getAllInBox + m (I)Lnet/minecraft/class_2338; method_10086 up + m (JLnet/minecraft/class_2350;)J method_10060 offset + m (I)Lnet/minecraft/class_2338; method_10076 north + m ()Lnet/minecraft/class_2338; method_10067 west + m (Ljava/util/Random;IIIIIII)Ljava/lang/Iterable; method_27156 getRandomPositions + m (III)Lnet/minecraft/class_2338; method_10069 add + m (J)I method_10071 unpackY + m ()Lnet/minecraft/class_2338; method_10062 toImmutable + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_20437 getAllInBox + m ()Lnet/minecraft/class_2338; method_10095 north + m (Lnet/minecraft/class_2338;III)Ljava/util/stream/Stream; method_25998 getProximitySortedBoxPositions + m (IIIIII)Ljava/util/stream/Stream; method_17962 getAllInBox + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Ljava/lang/Iterable; method_10097 getAllInBoxMutable + m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2338; method_10075 crossProduct + m ()Lnet/minecraft/class_2338$class_2339; method_25503 toMutable + m (Lnet/minecraft/class_2350;I)Lnet/minecraft/class_2338; method_10079 offset + m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2338; method_10081 add + m (Ljava/util/stream/IntStream;)Lcom/mojang/serialization/DataResult; method_29094 func_239586_a_ + m (Lnet/minecraft/class_3341;)Ljava/util/stream/Stream; method_23627 getAllInBox + m (Lnet/minecraft/class_2338;ILnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Ljava/lang/Iterable; method_30512 func_243514_a + m (DDD)Lnet/minecraft/class_2338; method_10080 add + m (I)Lnet/minecraft/class_2338; method_10077 south + m (III)J method_10064 pack + m ()Lnet/minecraft/class_2338; method_10074 down + m (I)Lnet/minecraft/class_2338; method_10087 down + m (Lnet/minecraft/class_2338;IILjava/util/function/Predicate;)Ljava/util/Optional; method_25997 getClosestMatchingPosition + m ()Lnet/minecraft/class_2338; method_10078 east + m (J)I method_10083 unpackZ + m ()J method_10063 toLong + m (J)I method_10061 unpackX + m (J)J method_10091 atSectionBottomY + m (I)Lnet/minecraft/class_2338; method_10089 east + m (Lnet/minecraft/class_2350$class_2351;I)Lnet/minecraft/class_2338; method_30513 func_241872_a + m ()Lnet/minecraft/class_2338; method_10072 south + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2338; method_10093 offset + m (Lnet/minecraft/class_2338;III)Ljava/lang/Iterable; method_25996 getProximitySortedBoxPositionsIterator + m (Lnet/minecraft/class_2338;)Ljava/util/stream/IntStream; method_29093 func_239582_a_ + m (IILjava/util/Random;IIIII)Ljava/util/Iterator; method_27155 func_239580_a_ + m (IIIIII)Ljava/lang/Iterable; method_10094 getAllInBoxMutable + m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2338; method_10059 subtract + m (IIIIII)Ljava/util/Iterator; method_10073 func_239589_c_ + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Lnet/minecraft/class_2338;I)Ljava/util/Iterator; method_30514 func_243515_a + m (Lnet/minecraft/class_2470;)Lnet/minecraft/class_2338; method_10070 rotate + m (JIII)J method_10096 offset + m (IIIIIII)Ljava/util/Iterator; method_25995 func_239579_a_ + f I field_10977 NUM_Z_BITS + f J field_10974 Y_MASK + f I field_10983 INVERSE_START_BITS_Z + f Lnet/minecraft/class_2338; field_10980 ZERO + f I field_10975 NUM_Y_BITS + f I field_10978 NUM_X_BITS + f Lcom/mojang/serialization/Codec; field_25064 CODEC + f J field_10976 X_MASK + f I field_10981 INVERSE_START_BITS_X + f J field_10973 Z_MASK + f Lorg/apache/logging/log4j/Logger; field_18789 LOGGER +c net/minecraft/class_2338$class_2339 net/minecraft/util/math/BlockPos$Mutable + m (III)Lnet/minecraft/class_2338$class_2339; method_10103 setPos + m (Lnet/minecraft/class_2350$class_2351;II)Lnet/minecraft/class_2338$class_2339; method_27158 clampAxisCoordinate + m (J)Lnet/minecraft/class_2338$class_2339; method_16363 setPos + m (III)Lnet/minecraft/class_2338$class_2339; method_10100 move + m (Lnet/minecraft/class_2382;III)Lnet/minecraft/class_2338$class_2339; method_25504 setAndOffset + m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2338$class_2339; method_30927 func_243531_h + m (Lnet/minecraft/class_2335;III)Lnet/minecraft/class_2338$class_2339; method_17965 setPos + m (DDD)Lnet/minecraft/class_2338$class_2339; method_10102 setPos + m (Lnet/minecraft/class_2382;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2338$class_2339; method_25505 setAndMove + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2338$class_2339; method_10098 move + m (Lnet/minecraft/class_2350;I)Lnet/minecraft/class_2338$class_2339; method_10104 move + m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2338$class_2339; method_10101 setPos +c net/minecraft/class_2338$2 net/minecraft/util/math/BlockPos$2 + m ()Ljava/lang/Object; computeNext computeNext + m ()Lnet/minecraft/class_2338; method_25999 computeNext + f I field_23377 field_239603_g_ + f Z field_23379 field_239609_n_ + f I field_23099 field_239604_i_ + f I field_23097 field_239601_e_ + f I field_23096 field_239600_d_ + f I field_23376 field_239602_f_ + f I field_23103 field_239608_m_ + f I field_23094 field_239598_b_ + f I field_23102 field_239607_l_ + f Lnet/minecraft/class_2338$class_2339; field_23378 coordinateIterator + f I field_23095 field_239599_c_ + f I field_23100 field_239605_j_ + f I field_23375 field_239597_a_ + f I field_23101 field_239606_k_ +c net/minecraft/class_2338$3 net/minecraft/util/math/BlockPos$3 + m ()Ljava/lang/Object; computeNext computeNext + m ()Lnet/minecraft/class_2338; method_10106 computeNext + f I field_23108 field_239613_d_ + f I field_23110 field_239615_f_ + f I field_23109 field_239614_e_ + f I field_23106 field_239611_b_ + f Lnet/minecraft/class_2338$class_2339; field_23380 mutablePos + f I field_23105 field_239610_a_ + f I field_23107 field_239612_c_ + f I field_23111 totalAmount +c net/minecraft/class_2338$4 net/minecraft/util/math/BlockPos$4 + m ()Ljava/lang/Object; computeNext computeNext + m ()Lnet/minecraft/class_2338$class_2339; method_30515 computeNext + f I field_25910 field_243527_l + f I field_25911 field_243528_m + f I field_25907 field_243524_i + f [Lnet/minecraft/class_2350; field_25903 field_243520_e + f I field_25909 field_243526_k + f Lnet/minecraft/class_2338; field_25901 field_243518_c + f I field_25908 field_243525_j + f I field_25905 field_243522_g + f I field_25906 field_243523_h + f I field_25902 field_243519_d + f Lnet/minecraft/class_2350; field_25900 field_243517_b + f Lnet/minecraft/class_2350; field_25899 field_243516_a + f Lnet/minecraft/class_2338$class_2339; field_25904 field_243521_f +c net/minecraft/class_2338$5 net/minecraft/util/math/BlockPos$5 + f [I field_23955 field_243530_b + f [I field_11006 field_243529_a +c net/minecraft/class_2338$1 net/minecraft/util/math/BlockPos$1 + m ()Lnet/minecraft/class_2338; method_27157 computeNext + m ()Ljava/lang/Object; computeNext computeNext + f I field_23954 field_239596_j_ + f Ljava/util/Random; field_23949 field_239593_e_ + f Lnet/minecraft/class_2338$class_2339; field_23945 pos + f I field_23950 field_239594_f_ + f I field_23952 field_239595_h_ + f I field_23946 remainingAmount + f I field_23951 field_191539_b + f I field_23948 field_191538_a + f I field_23953 field_191540_c + f I field_23947 field_239592_c_ +c net/minecraft/class_2342 net/minecraft/dispenser/IBlockSource + m ()Lnet/minecraft/class_2338; method_10122 getBlockPos + m ()Lnet/minecraft/class_2586; method_10121 getBlockTileEntity + m ()Lnet/minecraft/class_2680; method_10120 getBlockState + m ()Lnet/minecraft/class_3218; method_10207 getWorld +c net/minecraft/class_2345 net/minecraft/dispenser/ProxyBlockSource + f Lnet/minecraft/class_3218; field_11011 world + f Lnet/minecraft/class_2338; field_11012 pos +c net/minecraft/class_3980 net/minecraft/util/math/CubeCoordinateIterator + m ()I method_18673 getZ + m ()I method_18672 getY + m ()I method_18671 getX + m ()Z method_17963 hasNext + m ()I method_20789 numBoundariesTouched + f I field_23113 currentAmount + f I field_23112 totalAmount + f I field_17688 zWidth + f I field_18235 z + f I field_18234 y + f I field_18233 x + f I field_17685 startZ + f I field_17684 startY + f I field_17683 startX + f I field_17687 yHeight + f I field_17686 xWidth +c net/minecraft/class_2348 net/minecraft/util/registry/DefaultedRegistry + m ()Lnet/minecraft/class_2960; method_10137 getDefaultKey + f Lnet/minecraft/class_2960; field_11014 defaultValueKey + f Ljava/lang/Object; field_11015 defaultValue +c net/minecraft/class_2350 net/minecraft/util/Direction + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_10149 func_199787_d + m ()Lnet/minecraft/class_2350$class_2352; method_10171 getAxisDirection + m ()I method_10164 getYOffset + m (Lnet/minecraft/class_2350$class_2352;Lnet/minecraft/class_2350$class_2351;)Lnet/minecraft/class_2350; method_10156 getFacingFromAxis + m ()[Lnet/minecraft/class_2350; values values + m (I)Lnet/minecraft/class_2350; method_10139 byHorizontalIndex + m ()Lnet/minecraft/class_2382; method_10163 getDirectionVec + m ()Lnet/minecraft/class_2350; method_10153 getOpposite + m (I)[Lnet/minecraft/class_2350; method_10158 func_199791_c + m ()Lnet/minecraft/class_2350; method_10160 rotateYCCW + m (F)Z method_30928 hasOrientation + m (Lnet/minecraft/class_2350;)I method_10141 func_199789_a + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)[Lnet/minecraft/class_2350; method_10145 compose + m (Lnet/minecraft/class_2350;)I method_10140 func_199790_c + m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_2350$class_2352;)Lnet/minecraft/class_2350; method_10169 getFacingFromAxisDirection + m ()I method_10161 getHorizontalIndex + m ()Lnet/minecraft/class_1160; method_23955 toVector3f + m ()I method_10148 getXOffset + m (Ljava/util/Random;)Lnet/minecraft/class_2350; method_10162 getRandomDirection + m (Lnet/minecraft/class_2350;)Ljava/lang/Long; method_16366 func_218385_b + m (I)Lnet/minecraft/class_2350; method_10143 byIndex + m (Ljava/lang/String;)Lnet/minecraft/class_2350; valueOf valueOf + m ()Ljava/lang/String; toString toString + m ()I method_10165 getZOffset + m ()Lnet/minecraft/class_1158; method_23224 getRotation + m ()Lnet/minecraft/class_2350$class_2351; method_10166 getAxis + m ()F method_10144 getHorizontalAngle + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_16367 func_218384_a + m (DDD)Lnet/minecraft/class_2350; method_10142 getFacingFromVector + m ()Ljava/lang/String; method_10151 getName2 + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_16364 func_218386_a + m (Lnet/minecraft/class_1297;)[Lnet/minecraft/class_2350; method_10159 getFacingDirections + m (III)Lnet/minecraft/class_2350; method_16365 byLong + m ()Lnet/minecraft/class_2350; method_10170 rotateY + m (Lnet/minecraft/class_2350;)Z method_10155 func_199786_b + m (Lnet/minecraft/class_1159;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_23225 rotateFace + m (Ljava/lang/String;)Lnet/minecraft/class_2350; method_10168 byName + m (FFF)Lnet/minecraft/class_2350; method_10147 getFacingFromVector + m ()I method_10146 getIndex + m (D)Lnet/minecraft/class_2350; method_10150 fromAngle + m (I)[Lnet/minecraft/class_2350; method_10157 func_199788_d + f Lnet/minecraft/class_2350; field_11033 DOWN + f Lnet/minecraft/class_2382; field_11042 directionVec + f [Lnet/minecraft/class_2350; field_11037 $VALUES + f Lnet/minecraft/class_2350; field_11039 WEST + f [Lnet/minecraft/class_2350; field_11041 BY_HORIZONTAL_INDEX + f Lnet/minecraft/class_2350; field_11043 NORTH + f Lnet/minecraft/class_2350$class_2352; field_11044 axisDirection + f I field_11032 index + f I field_11030 horizontalIndex + f [Lnet/minecraft/class_2350; field_11040 VALUES + f Lnet/minecraft/class_2350; field_11034 EAST + f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_16542 BY_LONG + f [Lnet/minecraft/class_2350; field_11038 BY_INDEX + f Lnet/minecraft/class_2350; field_11036 UP + f Lnet/minecraft/class_2350; field_11035 SOUTH + f Lnet/minecraft/class_2350$class_2351; field_11047 axis + f Ljava/util/Map; field_11045 NAME_LOOKUP + f Ljava/lang/String; field_11046 name + f I field_11031 opposite +c net/minecraft/class_2350$class_2351 net/minecraft/util/Direction$Axis + m (DDD)D method_10172 getCoordinate + m (III)I method_10173 getCoordinate + m ()Lnet/minecraft/class_2350$class_2353; method_10180 getPlane + m (Ljava/lang/String;)Lnet/minecraft/class_2350$class_2351; method_10177 byName + m (Lnet/minecraft/class_2350$class_2351;)Lnet/minecraft/class_2350$class_2351; method_10175 func_199785_a + m ()Ljava/lang/String; toString toString + m ()Ljava/lang/String; method_10174 getName2 + m (Ljava/lang/Object;)Z test test + m ()[Lnet/minecraft/class_2350$class_2351; values values + m (Ljava/util/Random;)Lnet/minecraft/class_2350$class_2351; method_16699 getRandomAxis + m ()Z method_10178 isVertical + m (Lnet/minecraft/class_2350;)Z method_10176 test + m (Ljava/lang/String;)Lnet/minecraft/class_2350$class_2351; valueOf valueOf + m ()Z method_10179 isHorizontal + f Ljava/util/Map; field_11050 NAME_LOOKUP + f Lnet/minecraft/class_2350$class_2351; field_11051 Z + f Lnet/minecraft/class_2350$class_2351; field_11052 Y + f Lcom/mojang/serialization/Codec; field_25065 CODEC + f [Lnet/minecraft/class_2350$class_2351; field_23780 VALUES + f Lnet/minecraft/class_2350$class_2351; field_11048 X + f [Lnet/minecraft/class_2350$class_2351; field_11049 $VALUES + f Ljava/lang/String; field_11053 name +c net/minecraft/class_2350$class_2351$3 net/minecraft/util/Direction$Axis$3 +c net/minecraft/class_2350$class_2351$1 net/minecraft/util/Direction$Axis$1 +c net/minecraft/class_2350$class_2351$2 net/minecraft/util/Direction$Axis$2 +c net/minecraft/class_2350$class_2352 net/minecraft/util/Direction$AxisDirection + m (Ljava/lang/String;)Lnet/minecraft/class_2350$class_2352; valueOf valueOf + m ()Lnet/minecraft/class_2350$class_2352; method_26424 inverted + m ()Ljava/lang/String; toString toString + m ()I method_10181 getOffset + m ()[Lnet/minecraft/class_2350$class_2352; values values + f [Lnet/minecraft/class_2350$class_2352; field_11058 $VALUES + f Ljava/lang/String; field_11057 description + f I field_11059 offset + f Lnet/minecraft/class_2350$class_2352; field_11056 POSITIVE + f Lnet/minecraft/class_2350$class_2352; field_11060 NEGATIVE +c net/minecraft/class_2350$class_2353 net/minecraft/util/Direction$Plane + m ()Ljava/util/Iterator; iterator iterator + m ()Ljava/util/stream/Stream; method_29716 getDirectionValues + m ()[Lnet/minecraft/class_2350$class_2353; values values + m (Ljava/lang/Object;)Z test test + m (Ljava/lang/String;)Lnet/minecraft/class_2350$class_2353; valueOf valueOf + m (Ljava/util/Random;)Lnet/minecraft/class_2350; method_10183 random + m (Lnet/minecraft/class_2350;)Z method_10182 test + f [Lnet/minecraft/class_2350; field_11061 facingValues + f Lnet/minecraft/class_2350$class_2353; field_11064 VERTICAL + f [Lnet/minecraft/class_2350$class_2351; field_11065 axisValues + f [Lnet/minecraft/class_2350$class_2353; field_11063 $VALUES + f Lnet/minecraft/class_2350$class_2353; field_11062 HORIZONTAL +c net/minecraft/class_2350$1 net/minecraft/util/Direction$1 + f [I field_11054 field_179513_b + f [I field_11055 field_179515_a +c net/minecraft/class_2355 net/minecraft/util/Direction8 + m ()Ljava/util/Set; method_10186 getDirections + m (Ljava/lang/String;)Lnet/minecraft/class_2355; valueOf valueOf + m ()[Lnet/minecraft/class_2355; values values + f Lnet/minecraft/class_2355; field_11076 NORTH_WEST + f I field_11084 W_DIR_MASK + f I field_11067 NW_DIR_MASK + f Ljava/util/Set; field_11078 directions + f I field_11082 S_DIR_MASK + f Lnet/minecraft/class_2355; field_11073 SOUTH + f I field_11083 SW_DIR_MASK + f Lnet/minecraft/class_2355; field_11072 WEST + f Lnet/minecraft/class_2355; field_11068 SOUTH_WEST + f [Lnet/minecraft/class_2355; field_11071 $VALUES + f I field_11079 NE_DIR_MASK + f Lnet/minecraft/class_2355; field_11075 EAST + f Lnet/minecraft/class_2355; field_11074 NORTH_EAST + f Lnet/minecraft/class_2355; field_11070 SOUTH_EAST + f I field_11080 E_DIR_MASK + f I field_11081 SE_DIR_MASK + f I field_11077 N_DIR_MASK + f Lnet/minecraft/class_2355; field_11069 NORTH +c net/minecraft/class_5000 net/minecraft/world/gen/feature/jigsaw/JigsawOrientation + m ()[Lnet/minecraft/class_5000; values values + m ()Lnet/minecraft/class_2350; method_26426 func_239642_b_ + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Lnet/minecraft/class_5000; method_26425 func_239641_a_ + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)I method_26427 func_239643_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_5000; valueOf valueOf + m ()Lnet/minecraft/class_2350; method_26428 func_239644_c_ + f Lnet/minecraft/class_2350; field_23395 field_239639_o_ + f Lnet/minecraft/class_5000; field_23385 UP_EAST + f [Lnet/minecraft/class_5000; field_23397 $VALUES + f Lnet/minecraft/class_5000; field_23387 UP_SOUTH + f Lnet/minecraft/class_2350; field_23396 field_239640_p_ + f Lnet/minecraft/class_5000; field_23386 UP_NORTH + f Lnet/minecraft/class_5000; field_23383 DOWN_SOUTH + f Lnet/minecraft/class_5000; field_23382 DOWN_NORTH + f Lnet/minecraft/class_5000; field_23384 DOWN_WEST + f Lnet/minecraft/class_5000; field_23391 NORTH_UP + f Lnet/minecraft/class_5000; field_23390 EAST_UP + f Lnet/minecraft/class_5000; field_23392 SOUTH_UP + f Lnet/minecraft/class_5000; field_23381 DOWN_EAST + f Lnet/minecraft/class_5000; field_23388 UP_WEST + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_23393 field_239637_m_ + f Ljava/lang/String; field_23394 field_239638_n_ + f Lnet/minecraft/class_5000; field_23389 WEST_UP +c net/minecraft/class_4208 net/minecraft/util/math/GlobalPos + m ()I hashCode hashCode + m ()Ljava/lang/String; toString toString + m ()Lnet/minecraft/class_5321; method_19442 getDimension + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2338;)Lnet/minecraft/class_4208; method_19443 getPosition + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_29096 func_239647_a_ + m ()Lnet/minecraft/class_2338; method_19446 getPos + m (Ljava/lang/Object;)Z equals equals + f Lnet/minecraft/class_2338; field_18791 pos + f Lcom/mojang/serialization/Codec; field_25066 CODEC + f Lnet/minecraft/class_5321; field_18790 dimension +c net/minecraft/class_2359 net/minecraft/util/IObjectIntIterable + m (Ljava/lang/Object;)I method_10206 getId + m (I)Ljava/lang/Object; method_10200 getByValue +c net/minecraft/class_2361 net/minecraft/util/ObjectIntIdentityMap + m ()Ljava/util/Iterator; iterator iterator + m ()I method_10204 size + m (Ljava/lang/Object;I)V method_10203 put + m (Ljava/lang/Object;)V method_10205 add + f Ljava/util/List; field_11098 objectList + f I field_11099 nextId + f Ljava/util/IdentityHashMap; field_11100 identityMap +c net/minecraft/class_2370 net/minecraft/util/registry/SimpleRegistry + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/MapCodec;)Lcom/mojang/serialization/MapCodec; method_30929 getRegistryEntryCodec + m (ILnet/minecraft/class_5321;Ljava/lang/Object;Lcom/mojang/serialization/Lifecycle;Z)Ljava/lang/Object; method_31051 register + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Ljava/util/Map;)Lnet/minecraft/class_2370; method_29720 func_239656_a_ + m (Lnet/minecraft/class_2370;)Ljava/util/Map; method_31053 func_239651_a_ + m (Lnet/minecraft/class_2370$class_5501;)Ljava/lang/Object; method_31052 func_243538_a + m (Lnet/minecraft/class_2370;)Ljava/util/List; method_31057 func_243544_b + m (Lnet/minecraft/class_2370$class_5501;)Lnet/minecraft/class_5321; method_31058 func_243545_c + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/MapCodec;Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_31055 func_243542_a + m ()Ljava/util/Iterator; iterator iterator + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Ljava/util/List;)Lnet/minecraft/class_2370; method_31054 func_243540_a + m (Lnet/minecraft/class_2370;Lcom/mojang/serialization/Lifecycle;Lnet/minecraft/class_5321;Ljava/lang/Object;)V method_31137 func_239653_a_ + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_29721 getSimpleRegistryCodec + m (Lnet/minecraft/class_2370$class_5501;)Ljava/lang/Integer; method_31056 func_243543_b + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_29098 createSimpleRegistryCodec + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_31059 getUnboundedRegistryCodec + m (Ljava/util/Random;)Ljava/lang/Object; method_10240 getRandom + f [Ljava/lang/Object; field_11108 values + f I field_11109 nextFreeId + f Lcom/google/common/collect/BiMap; field_11107 registryObjects + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_26683 entryIndexMap + f Ljava/util/Map; field_26731 objectToLifecycleMap + f Lit/unimi/dsi/fastutil/objects/ObjectList; field_26682 entryList + f Lcom/google/common/collect/BiMap; field_25067 keyToObjectMap + f Lcom/mojang/serialization/Lifecycle; field_26732 lifecycle + f Lorg/apache/logging/log4j/Logger; field_11111 LOGGER0 +c net/minecraft/class_2370$class_5501 net/minecraft/util/registry/SimpleRegistry$Entry + f Lnet/minecraft/class_5321; field_26684 name + f Ljava/lang/Object; field_26686 value + f I field_26685 index +c net/minecraft/class_2371 net/minecraft/util/NonNullList + m (I)Ljava/lang/Object; remove remove + m (ILjava/lang/Object;)Lnet/minecraft/class_2371; method_10213 withSize + m (ILjava/lang/Object;)Ljava/lang/Object; set set + m ()V clear clear + m ()Lnet/minecraft/class_2371; method_10211 create + m (I)Ljava/lang/Object; get get + m (Ljava/lang/Object;[Ljava/lang/Object;)Lnet/minecraft/class_2371; method_10212 from + m ()I size size + m (ILjava/lang/Object;)V add add + f Ljava/lang/Object; field_11116 defaultElement + f Ljava/util/List; field_11115 delegate +c net/minecraft/class_2374 net/minecraft/dispenser/IPosition + m ()D method_10214 getY + m ()D method_10216 getX + m ()D method_10215 getZ +c net/minecraft/class_2376 net/minecraft/dispenser/Position + f D field_11117 z + f D field_11118 y + f D field_11119 x +c net/minecraft/class_2378 net/minecraft/util/registry/Registry + m (Lnet/minecraft/class_2960;)Z method_10250 containsKey + m ()Lnet/minecraft/class_4663; method_23628 func_243582_k + m ()Lnet/minecraft/class_4149; method_19451 func_243556_A + m ()Lnet/minecraft/class_3414; method_10233 func_218335_L + m ()Lnet/minecraft/class_4648; method_23629 func_243584_m + m ()Lnet/minecraft/class_1299; method_10252 func_218332_G + m ()Lnet/minecraft/class_3611; method_10248 func_218338_K + m (Ljava/lang/Object;)Lcom/mojang/serialization/Lifecycle; method_31139 getLifecycleByRegistry + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Ljava/util/function/Supplier;)Lnet/minecraft/class_2378; method_29108 register + m ()Lnet/minecraft/class_5342; method_29396 func_243593_v + m ()Lnet/minecraft/class_1535; method_10246 func_243570_O + m (Lnet/minecraft/class_2378;ILjava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; method_10231 register + m (Lnet/minecraft/class_2378;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; method_10226 register + m ()Lnet/minecraft/class_2248; method_10237 func_218344_I + m (Lnet/minecraft/class_5321;)Ljava/lang/Object; method_31140 getOrThrow + m (Lnet/minecraft/class_5321;Ljava/util/function/Supplier;)Lnet/minecraft/class_2378; method_10247 createRegistry + m ()Ljava/util/Set; method_10235 keySet + m (Ljava/lang/Number;)Lcom/mojang/serialization/DataResult; method_29105 func_239740_a_ + m (Lnet/minecraft/class_2385;)V method_29103 validateMutableRegistry + m ()Lnet/minecraft/class_4630; method_23630 func_243585_n + m ()Lnet/minecraft/class_1291; method_10219 func_218347_J + m ()Lnet/minecraft/class_2396; method_10228 func_243572_Q + m (Ljava/lang/Object;)Ljava/util/Optional; method_29113 getOptionalKey + m (Lnet/minecraft/class_5321;Ljava/lang/String;Ljava/util/function/Supplier;)Lnet/minecraft/class_2348; method_10224 registerDefaulted + m ()Lnet/minecraft/class_3195; method_16545 func_243589_r + m (Lnet/minecraft/class_2960;)Ljava/util/Optional; method_17966 getOptional + m ()Lnet/minecraft/class_3956; method_17798 func_243564_I + m ()Lnet/minecraft/class_2591; method_10218 func_243571_P + m ()Lnet/minecraft/class_3852; method_17172 func_243559_D + m (Ljava/lang/String;)Lnet/minecraft/class_5321; method_29106 createKey + m ()Ljava/util/stream/Stream; method_10220 stream + m ()Lnet/minecraft/class_4158; method_19453 func_243558_C + m ()Lnet/minecraft/class_4170; method_19450 func_243597_z + m ()Lnet/minecraft/class_5339; method_29397 func_243594_w + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/stream/Stream; keys keys + m (Lnet/minecraft/class_5321;)Ljava/util/Optional; method_31189 getOptionalValue + m ()Lnet/minecraft/class_3523; method_10229 func_243592_u + m ()Lcom/mojang/serialization/Codec; method_29114 func_243579_h + m ()Lnet/minecraft/class_2960; method_10236 func_243569_N + m (Lnet/minecraft/class_2385;Lnet/minecraft/class_2385;)V method_29104 func_239739_a_ + m ()Lnet/minecraft/class_3917; method_17583 func_243565_J + m ()Lnet/minecraft/class_4652; method_23631 func_243586_o + m ()Lnet/minecraft/class_5338; method_29398 func_243595_x + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/serialization/DataResult; method_29100 func_239735_a_ + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2960;Ljava/lang/Object;)Ljava/lang/Object; method_10230 register + m (Lnet/minecraft/class_2960;Ljava/util/function/Supplier;)V method_29110 func_239747_a_ + m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; encode encode + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2385;Ljava/util/function/Supplier;Lcom/mojang/serialization/Lifecycle;)Lnet/minecraft/class_2385; method_10227 addRegistry + m ()Lnet/minecraft/class_5321; method_30517 getRegistryKey + m ()Lnet/minecraft/class_3773; method_16544 func_243588_q + m ()Lnet/minecraft/class_1887; method_10243 func_218354_H + m ()Lnet/minecraft/class_1320; method_27041 func_243562_G + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/datafixers/util/Pair; method_29101 func_239736_a_ + m (Lnet/minecraft/class_5321;Ljava/lang/String;Lcom/mojang/serialization/Lifecycle;Ljava/util/function/Supplier;)Lnet/minecraft/class_2348; method_29109 registerDefaulted + m ()Lnet/minecraft/class_1792; method_10234 func_218353_F + m ()Lcom/mojang/serialization/Lifecycle; method_31138 getLifecycle + m ()Lnet/minecraft/class_3827; method_16701 func_243567_L + m ()Lnet/minecraft/class_3448; method_20574 func_243561_F + m ()Lnet/minecraft/class_4140; method_19452 func_243557_B + m ()Lnet/minecraft/class_3284; method_10241 func_243587_p + m ()Lcom/mojang/serialization/Codec; method_29115 func_243580_i + m (Lnet/minecraft/class_2960;)Ljava/lang/Object; method_10223 getOrDefault + m ()Lnet/minecraft/class_3816; method_16702 func_243573_a + m ()Lnet/minecraft/class_4996; method_26429 func_243566_K + m (Ljava/lang/Object;)Lnet/minecraft/class_2960; method_10221 getKey + m ()Lnet/minecraft/class_2806; method_16543 func_243568_M + m (Lnet/minecraft/class_5321;)Ljava/lang/Object; method_29107 getValueForKey + m ()Lnet/minecraft/class_2939; method_10222 func_243591_t + m ()Lnet/minecraft/class_3854; method_17173 func_243560_E + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; decode decode + m ()Lnet/minecraft/class_3828; method_16700 func_243577_e + m ()Ljava/lang/String; toString toString + m ()Lnet/minecraft/class_1842; method_10245 func_218348_E + m ()Lnet/minecraft/class_4168; method_19449 func_243596_y + m ()Lnet/minecraft/class_5202; method_27652 func_243581_j + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_2960;)Ljava/lang/Object; method_29102 func_243574_a + m ()Lnet/minecraft/class_1865; method_17797 func_243563_H + m ()Lnet/minecraft/class_5142; method_27040 func_243583_l + m ()Lnet/minecraft/class_3031; method_10251 func_243590_s + m ()Ljava/util/Set; method_29722 getEntries + f Lnet/minecraft/class_5321; field_25115 BLOCK_STATE_PROVIDER_TYPE_KEY + f Lnet/minecraft/class_5321; field_25083 MENU_KEY + f Lnet/minecraft/class_5321; field_25915 CONFIGURED_STRUCTURE_FEATURE_KEY + f Lnet/minecraft/class_5321; field_25075 CUSTOM_STAT_KEY + f Lnet/minecraft/class_2378; field_18796 ACTIVITY + f Lnet/minecraft/class_5321; field_25078 STRUCTURE_PIECE_KEY + f Lnet/minecraft/class_5321; field_25295 LOOT_POOL_ENTRY_TYPE_KEY + f Lnet/minecraft/class_5321; field_25087 STAT_TYPE_KEY + f Ljava/util/Map; field_11140 LOCATION_TO_SUPPLIER + f Lnet/minecraft/class_2348; field_11146 BLOCK + f Lnet/minecraft/class_2348; field_17166 VILLAGER_TYPE + f Lnet/minecraft/class_5321; field_25068 TREE_DECORATOR_TYPE_KEY + f Lnet/minecraft/class_5321; field_25111 SURFACE_BUILDER_KEY + f Lnet/minecraft/class_5321; field_25298 WORLD_KEY + f Lnet/minecraft/class_2378; field_11159 EFFECTS + f Lnet/minecraft/class_2378; field_11152 STATS + f Lnet/minecraft/class_5321; field_25088 VILLAGER_TYPE_KEY + f Lnet/minecraft/class_5321; field_25106 ENCHANTMENT_KEY + f Lnet/minecraft/class_2348; field_18794 SENSOR_TYPE + f Lnet/minecraft/class_5321; field_25102 SOUND_EVENT_KEY + f Lnet/minecraft/class_5321; field_25081 STRUCTURE_PROCESSOR_KEY + f Lnet/minecraft/class_2378; field_17429 MENU + f Lnet/minecraft/class_2348; field_11143 POTION + f Lnet/minecraft/class_5321; field_25092 SENSOR_TYPE_KEY + f Lnet/minecraft/class_2378; field_21447 FOLIAGE_PLACER_TYPE + f Lnet/minecraft/class_5321; field_25070 PARTICLE_TYPE_KEY + f Lnet/minecraft/class_2378; field_25097 CHUNK_GENERATOR_CODEC + f Lnet/minecraft/class_2378; field_11147 SURFACE_BUILDER + f Lnet/minecraft/class_5321; field_25916 STRUCTURE_PROCESSOR_LIST_KEY + f Lnet/minecraft/class_2378; field_11138 FEATURE + f Lnet/minecraft/class_2378; field_25293 LOOT_POOL_ENTRY_TYPE + f Lnet/minecraft/class_5321; field_25912 CONFIGURED_SURFACE_BUILDER_KEY + f Lnet/minecraft/class_5321; field_25296 LOOT_FUNCTION_TYPE_KEY + f Lnet/minecraft/class_5321; field_25076 CHUNK_STATUS_KEY + f Lnet/minecraft/class_5321; field_25069 FEATURE_SIZE_TYPE_KEY + f Lnet/minecraft/class_2348; field_17167 VILLAGER_PROFESSION + f Lnet/minecraft/class_5321; field_25490 DIMENSION_KEY + f Lnet/minecraft/class_5321; field_25084 RECIPE_TYPE_KEY + f Lnet/minecraft/class_2378; field_16645 STRUCTURE_PIECE + f Lnet/minecraft/class_5321; field_25116 BLOCK_PLACER_TYPE_KEY + f Lcom/mojang/serialization/Lifecycle; field_25099 lifecycle + f Lnet/minecraft/class_5321; field_25110 CARVER_KEY + f Lnet/minecraft/class_5321; field_25082 STRUCTURE_POOL_ELEMENT_KEY + f Lnet/minecraft/class_2385; field_25101 ROOT_REGISTRY + f Lnet/minecraft/class_2378; field_17597 RECIPE_TYPE + f Lnet/minecraft/class_5321; field_25103 FLUID_KEY + f Lnet/minecraft/class_5321; field_25077 STRUCTURE_FEATURE_KEY + f Lnet/minecraft/class_5321; field_25093 SCHEDULE_KEY + f Lnet/minecraft/class_5321; field_25073 BLOCK_ENTITY_TYPE_KEY + f Lnet/minecraft/class_2348; field_16643 CHUNK_STATUS + f Lnet/minecraft/class_5321; field_25089 VILLAGER_PROFESSION_KEY + f Lnet/minecraft/class_5321; field_25107 ENTITY_TYPE_KEY + f Lnet/minecraft/class_2960; field_25100 ROOT + f Lnet/minecraft/class_5321; field_25297 LOOT_CONDITION_TYPE_KEY + f Lnet/minecraft/class_5321; field_25079 RULE_TEST_KEY + f Lnet/minecraft/class_2378; field_25294 LOOT_FUNCTION_TYPE + f Lnet/minecraft/class_5321; field_25113 DECORATOR_KEY + f Lnet/minecraft/class_5321; field_25913 CONFIGURED_CARVER_KEY + f Lnet/minecraft/class_2378; field_23782 TRUNK_REPLACER + f Lnet/minecraft/class_2378; field_16794 STRUCTURE_PROCESSOR + f Lnet/minecraft/class_2378; field_11158 CUSTOM_STAT + f Lnet/minecraft/class_5321; field_25071 BIOME_SOURCE_KEY + f Lnet/minecraft/class_2378; field_16792 RULE_TEST + f Lnet/minecraft/class_2348; field_11145 ENTITY_TYPE + f Lnet/minecraft/class_2348; field_11154 FLUID + f Lnet/minecraft/class_5321; field_25117 FOLIAGE_PLACER_TYPE_KEY + f Lnet/minecraft/class_5321; field_25085 RECIPE_SERIALIZER_KEY + f Lnet/minecraft/class_5321; field_25917 JIGSAW_POOL_KEY + f Lnet/minecraft/class_2378; field_17598 RECIPE_SERIALIZER + f Lnet/minecraft/class_5321; field_25104 MOB_EFFECT_KEY + f Lnet/minecraft/class_2348; field_18792 POINT_OF_INTEREST_TYPE + f Lnet/minecraft/class_2378; field_11156 SOUND_EVENT + f Lnet/minecraft/class_2378; field_18795 SCHEDULE + f Lnet/minecraft/class_5321; field_25074 MOTIVE_KEY + f Lnet/minecraft/class_2378; field_11141 PARTICLE_TYPE + f Lnet/minecraft/class_2378; field_21445 BLOCK_STATE_PROVIDER_TYPE + f Lnet/minecraft/class_5321; field_25108 ITEM_KEY + f Lnet/minecraft/class_2378; field_24331 FEATURE_SIZE_TYPE + f Lnet/minecraft/class_2378; field_11160 ENCHANTMENT + f Lnet/minecraft/class_5321; field_25090 POINT_OF_INTEREST_TYPE_KEY + f Lnet/minecraft/class_5321; field_25080 POS_RULE_TEST_KEY + f Lnet/minecraft/class_2378; field_16644 STRUCTURE_FEATURE + f Lorg/apache/logging/log4j/Logger; field_11139 LOGGER + f Lnet/minecraft/class_2378; field_25299 LOOT_CONDITION_TYPE + f Lnet/minecraft/class_5321; field_25914 CONFIGURED_FEATURE_KEY + f Lnet/minecraft/class_5321; field_25095 DIMENSION_TYPE_KEY + f Lnet/minecraft/class_5321; field_25094 ACTIVITY_KEY + f Lnet/minecraft/class_2378; field_21448 TREE_DECORATOR_TYPE + f Lnet/minecraft/class_2378; field_16793 STRUCTURE_POOL_ELEMENT + f Lnet/minecraft/class_2378; field_11157 CARVER + f Lnet/minecraft/class_2378; field_23398 POS_RULE_TEST + f Lnet/minecraft/class_2378; field_11148 DECORATOR + f Lnet/minecraft/class_5321; field_25118 TRUNK_PLACER_TYPE_KEY + f Lnet/minecraft/class_5321; field_25098 registryKey + f Lnet/minecraft/class_5321; field_25114 BIOME_KEY + f Lnet/minecraft/class_5321; field_25086 ATTRIBUTE_KEY + f Lnet/minecraft/class_5321; field_25105 BLOCK_KEY + f Lnet/minecraft/class_2378; field_11144 REGISTRY + f Lnet/minecraft/class_2378; field_23781 ATTRIBUTE + f Lnet/minecraft/class_2348; field_11150 MOTIVE + f Lnet/minecraft/class_2348; field_11142 ITEM + f Lnet/minecraft/class_5321; field_25072 CHUNK_GENERATOR_KEY + f Lnet/minecraft/class_2348; field_18793 MEMORY_MODULE_TYPE + f Lnet/minecraft/class_5321; field_26374 NOISE_SETTINGS_KEY + f Lnet/minecraft/class_2378; field_21446 BLOCK_PLACER_TYPE + f Lnet/minecraft/class_5321; field_25091 MEMORY_MODULE_TYPE_KEY + f Lnet/minecraft/class_2378; field_25096 BIOME_PROVIDER_CODEC + f Lnet/minecraft/class_2378; field_11137 BLOCK_ENTITY_TYPE + f Lnet/minecraft/class_5321; field_25112 FEATURE_KEY + f Lnet/minecraft/class_5321; field_25109 POTION_KEY +c net/minecraft/class_5455 net/minecraft/util/registry/DynamicRegistries + m (Lnet/minecraft/class_5321;)Ljava/lang/IllegalStateException; method_30534 func_243618_e + m (Lnet/minecraft/class_5321;)Ljava/util/Optional; method_30527 func_230521_a_ + m (Lnet/minecraft/class_5321;)Ljava/lang/IllegalStateException; method_30532 func_243614_c + m (Lnet/minecraft/class_2370;)Lnet/minecraft/class_2370; method_30522 func_243604_a + m (Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)V method_30520 put + m ()Lcom/google/common/collect/ImmutableMap; method_30531 func_243617_e + m (Lnet/minecraft/class_2378;)Ljava/lang/IllegalStateException; method_30523 func_243605_a + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_2378;)V method_30524 registerRegistry + m (Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;Lcom/mojang/serialization/Codec;)V method_31060 put + m ()Lnet/minecraft/class_5455$class_5457; method_30528 func_239770_b_ + m (Lnet/minecraft/class_5382;Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5455$class_5456;)V method_30526 loadRegistryData + m ()Lnet/minecraft/class_5455$class_5457; method_31143 func_243615_d + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5382;)V method_30519 loadRegistryData + m ()Ljava/util/Map; method_31142 func_243613_c + m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_2385; method_30530 getRegistry + m (Lcom/mojang/serialization/DataResult$PartialResult;)V method_30521 func_243603_a + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5321;)V method_30525 getWorldGenRegistry + m ()Lnet/minecraft/class_2378; method_30518 func_230520_a_ + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5382$class_5506$class_5507;Lnet/minecraft/class_5455$class_5456;)V method_31141 registerRegistry + m (Lnet/minecraft/class_5321;)Z method_30533 func_243616_d + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5321;)V method_30529 func_243611_b + f Lorg/apache/logging/log4j/Logger; field_25918 LOGGER + f Ljava/util/Map; field_25919 registryCodecMap + f Lnet/minecraft/class_5455$class_5457; field_26733 registries +c net/minecraft/class_5455$class_5456 net/minecraft/util/registry/DynamicRegistries$CodecHolder + m ()Lnet/minecraft/class_5321; method_30535 getRegistryKey + m ()Lcom/mojang/serialization/Codec; method_30536 getRegistryCodec + m ()Lcom/mojang/serialization/Codec; method_31061 getPacketCodec + m ()Z method_30537 hasPacketCodec + f Lnet/minecraft/class_5321; field_25920 registryKey + f Lcom/mojang/serialization/Codec; field_25921 registryCodec + f Lcom/mojang/serialization/Codec; field_26687 packetCodec +c net/minecraft/class_5455$class_5457 net/minecraft/util/registry/DynamicRegistries$Impl + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_30543 func_243633_a + m (Lcom/mojang/serialization/codecs/UnboundedMapCodec;)Lcom/mojang/serialization/Codec; method_30538 getSerializableCodec + m (Lnet/minecraft/class_5455$class_5456;)Lcom/mojang/serialization/Codec; method_30540 func_243630_a + m (Lnet/minecraft/class_2370;)Lnet/minecraft/class_2385; method_30539 func_243629_a + m (Lnet/minecraft/class_2370;)Lcom/mojang/serialization/DataResult; method_30544 func_243634_b + m (Lnet/minecraft/class_5321;)Lcom/mojang/serialization/DataResult; method_30547 serializeRegistry + m (Lnet/minecraft/class_5455$class_5457;)Ljava/util/Map; method_30545 func_243635_b + m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_2370; method_30548 createStableRegistry + m (Lnet/minecraft/class_5321;)Lcom/mojang/serialization/DataResult; method_30549 func_243639_e + m (Ljava/util/Map$Entry;)Z method_30542 func_243632_a + m (Lnet/minecraft/class_5321;)Lcom/mojang/serialization/DataResult; method_30550 func_243640_f + m (Lnet/minecraft/class_5455$class_5457;)Ljava/util/Map; method_30541 func_243631_a + m ()Lcom/mojang/serialization/Codec; method_30546 getCodec + f Lcom/mojang/serialization/Codec; field_25923 registryCodec + f Ljava/util/Map; field_25924 keyToSimpleRegistryMap +c net/minecraft/class_2379 net/minecraft/util/math/Rotations + m ()F method_10258 getZ + m ()F method_10257 getY + m (Ljava/lang/Object;)Z equals equals + m ()F method_10256 getX + m ()Lnet/minecraft/class_2499; method_10255 writeToNBT + f F field_11163 z + f F field_11164 y + f F field_11165 x +c net/minecraft/class_4076 net/minecraft/util/math/SectionPos + m ()Lnet/minecraft/class_1923; method_18692 asChunkPos + m (S)I method_30556 func_243646_f + m (Lnet/minecraft/class_1923;I)Ljava/util/stream/Stream; method_22446 func_229421_b_ + m ()Lnet/minecraft/class_2338; method_19768 getCenter + m (S)I method_30555 func_243645_e + m (III)Lnet/minecraft/class_4076; method_18676 of + m (S)I method_30554 func_243644_d + m (JIII)J method_18678 withOffset + m ()Lnet/minecraft/class_2338; method_19767 asBlockPos + m (III)J method_18685 asLong + m (J)Lnet/minecraft/class_4076; method_18677 from + m (I)I method_18688 toWorld + m (J)I method_18686 extractX + m (Lnet/minecraft/class_4076;I)Ljava/util/stream/Stream; method_20439 getAllInBox + m (Lnet/minecraft/class_2338;)S method_19454 toRelativeOffset + m (I)I method_18684 mask + m ()J method_18694 asLong + m (I)I method_18675 toChunk + m ()I method_18683 getSectionY + m (J)I method_18690 extractZ + m ()I method_18674 getSectionX + m (J)I method_18689 extractY + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_4076; method_18680 from + m ()I method_19527 getWorldStartX + m ()Ljava/util/stream/Stream; method_19533 allBlocksWithin + m (J)J method_18693 toSectionColumnPos + m (Lnet/minecraft/class_1923;I)Lnet/minecraft/class_4076; method_18681 from + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_4076; method_18682 from + m ()I method_18687 getSectionZ + m (J)J method_18691 worldToSection + m (S)I method_30551 func_243641_a + m (IIIIII)Ljava/util/stream/Stream; method_20438 getAllInBox + m ()I method_19530 getWorldEndX + m ()I method_19529 getWorldStartZ + m (S)Lnet/minecraft/class_2338; method_30557 func_243647_g + m ()I method_19528 getWorldStartY + m (S)I method_30553 func_243643_c + m ()I method_19532 getWorldEndZ + m (S)I method_30552 func_243642_b + m (JLnet/minecraft/class_2350;)J method_18679 withOffset + m ()I method_19531 getWorldEndY +c net/minecraft/class_4076$1 net/minecraft/util/math/SectionPos$1 + m (Ljava/util/function/Consumer;)Z tryAdvance tryAdvance + f Lnet/minecraft/class_3980; field_19263 field_218394_a + f I field_19266 field_218397_d + f I field_19264 field_218395_b + f I field_19265 field_218396_c + f I field_19268 field_218399_f + f I field_19269 field_218400_g + f I field_19267 field_218398_e +c net/minecraft/class_4844 net/minecraft/util/UUIDCodec + m (Ljava/util/UUID;)Ljava/util/stream/IntStream; method_29727 func_239780_b_ + m (Ljava/util/stream/IntStream;)Lcom/mojang/serialization/DataResult; method_29122 func_239778_a_ + m (JJ)[I method_26274 encodeBits + m ([I)Ljava/util/UUID; method_26276 decodeUUID + m (Ljava/util/UUID;)[I method_26275 encodeUUID + f Lcom/mojang/serialization/Codec; field_25122 CODEC +c net/minecraft/class_2382 net/minecraft/util/math/vector/Vector3i + m (Ljava/lang/Object;)I compareTo compareTo + m (I)Lnet/minecraft/class_2382; method_30930 up + m (Lnet/minecraft/class_2374;Z)D method_19770 distanceSq + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2350;I)Lnet/minecraft/class_2382; method_23226 offset + m (Lnet/minecraft/class_2350$class_2351;)I method_30558 func_243648_a + m (I)Lnet/minecraft/class_2382; method_23227 down + m ()Lnet/minecraft/class_2382; method_30931 up + m ()Lnet/minecraft/class_2382; method_23228 down + m (Ljava/util/stream/IntStream;)Lcom/mojang/serialization/DataResult; method_29125 func_239783_a_ + m (Lnet/minecraft/class_2382;)I method_19455 manhattanDistance + m (Ljava/lang/Object;)Z equals equals + m (DDDZ)D method_10268 distanceSq + m (Lnet/minecraft/class_2382;D)Z method_19771 withinDistance + m (I)V method_10099 setY + m (I)V method_20787 setX + m (Lnet/minecraft/class_2382;)D method_10262 distanceSq + m (Lnet/minecraft/class_2374;D)Z method_19769 withinDistance + m (Lnet/minecraft/class_2382;)I method_10265 compareTo + m (I)V method_20788 setZ + m ()I method_10264 getY + m (Lnet/minecraft/class_2382;)Ljava/util/stream/IntStream; method_29124 func_239782_a_ + m ()I method_10263 getX + m ([I)Lnet/minecraft/class_2382; method_29126 func_239784_a_ + m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2382; method_10259 crossProduct + m ()Ljava/lang/String; method_23854 getCoordinatesAsString + m ()I method_10260 getZ + m ()I hashCode hashCode + f Lnet/minecraft/class_2382; field_11176 NULL_VECTOR + f I field_11174 y + f I field_11175 x + f I field_11173 z + f Lcom/mojang/serialization/Codec; field_25123 CODEC +c net/minecraft/class_2385 net/minecraft/util/registry/MutableRegistry + m (Lnet/minecraft/class_5321;Ljava/lang/Object;Lcom/mojang/serialization/Lifecycle;)Ljava/lang/Object; method_10272 register + m (Ljava/util/OptionalInt;Lnet/minecraft/class_5321;Ljava/lang/Object;Lcom/mojang/serialization/Lifecycle;)Ljava/lang/Object; method_31062 validateAndRegister + m (ILnet/minecraft/class_5321;Ljava/lang/Object;Lcom/mojang/serialization/Lifecycle;)Ljava/lang/Object; method_10273 register +c net/minecraft/class_2965 net/minecraft/dispenser/ProjectileDispenseBehavior + m ()F method_12845 getProjectileInaccuracy + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2374;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1676; method_12844 getProjectileEntity + m ()F method_12846 getProjectileVelocity +c net/minecraft/class_2967 net/minecraft/dispenser/DispenseBoatBehavior + f Lnet/minecraft/class_1690$class_1692; field_13361 type + f Lnet/minecraft/class_2347; field_13360 dispenseItemBehaviour +c net/minecraft/class_2347 net/minecraft/dispenser/DefaultDispenseItemBehavior + m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_10135 dispenseStack + m (Lnet/minecraft/class_2342;Lnet/minecraft/class_2350;)V method_10133 spawnDispenseParticles + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;ILnet/minecraft/class_2350;Lnet/minecraft/class_2374;)V method_10134 doDispense + m (Lnet/minecraft/class_2342;)V method_10136 playDispenseSound +c net/minecraft/class_2357 net/minecraft/dispenser/IDispenseItemBehavior + m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1297;Lnet/minecraft/class_2350;)V method_27042 dispenseEntity + m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; dispense dispense + m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_16812 func_210297_lambda$static$0 + m ()V method_18346 init + f Lnet/minecraft/class_2357; field_16902 NOOP +c net/minecraft/class_2357$1 net/minecraft/dispenser/IDispenseItemBehavior$1 +c net/minecraft/class_2357$2 net/minecraft/dispenser/IDispenseItemBehavior$10 +c net/minecraft/class_2357$3 net/minecraft/dispenser/IDispenseItemBehavior$11 + m (Lnet/minecraft/class_1309;)Z method_27159 func_239789_a_ +c net/minecraft/class_2357$20 net/minecraft/dispenser/IDispenseItemBehavior$4 + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1681;)V method_17199 func_218408_a +c net/minecraft/class_2357$21 net/minecraft/dispenser/IDispenseItemBehavior$5 + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1680;)V method_17200 func_218409_a +c net/minecraft/class_2357$24 net/minecraft/dispenser/IDispenseItemBehavior$8 +c net/minecraft/class_2357$24$1 net/minecraft/dispenser/IDispenseItemBehavior$8$1 + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1686;)V method_17202 func_218413_a + f Lnet/minecraft/class_2357$24; field_13366 field_218414_b +c net/minecraft/class_2357$25 net/minecraft/dispenser/IDispenseItemBehavior$9 +c net/minecraft/class_2357$22 net/minecraft/dispenser/IDispenseItemBehavior$6 + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1683;)V method_17201 func_218410_a +c net/minecraft/class_2357$23 net/minecraft/dispenser/IDispenseItemBehavior$7 +c net/minecraft/class_2357$23$1 net/minecraft/dispenser/IDispenseItemBehavior$7$1 + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1686;)V method_17203 func_218411_a + f Lnet/minecraft/class_2357$23; field_13369 field_218412_b +c net/minecraft/class_2357$4 net/minecraft/dispenser/IDispenseItemBehavior$12 + m (Lnet/minecraft/class_1496;)Z method_27160 func_239790_a_ +c net/minecraft/class_2357$5 net/minecraft/dispenser/IDispenseItemBehavior$13 + m (Lnet/minecraft/class_1492;)Z method_27161 func_239791_a_ +c net/minecraft/class_2357$10 net/minecraft/dispenser/IDispenseItemBehavior$18 +c net/minecraft/class_2357$6 net/minecraft/dispenser/IDispenseItemBehavior$14 +c net/minecraft/class_2357$7 net/minecraft/dispenser/IDispenseItemBehavior$15 + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1677;)V method_17204 func_229425_a_ +c net/minecraft/class_2357$8 net/minecraft/dispenser/IDispenseItemBehavior$16 + f Lnet/minecraft/class_2347; field_13367 defaultBehaviour +c net/minecraft/class_2357$13 net/minecraft/dispenser/IDispenseItemBehavior$20 +c net/minecraft/class_2357$9 net/minecraft/dispenser/IDispenseItemBehavior$17 + f Lnet/minecraft/class_2347; field_13368 defaultBehaviour +c net/minecraft/class_2357$14 net/minecraft/dispenser/IDispenseItemBehavior$21 +c net/minecraft/class_2357$11 net/minecraft/dispenser/IDispenseItemBehavior$19 +c net/minecraft/class_2357$12 net/minecraft/dispenser/IDispenseItemBehavior$2 +c net/minecraft/class_2357$17 net/minecraft/dispenser/IDispenseItemBehavior$24 + m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_22141 glassBottleFill + m (Lnet/minecraft/class_4970$class_4971;)Z method_27900 func_239787_a_ + f Lnet/minecraft/class_2347; field_20533 defaultBehaviour +c net/minecraft/class_2357$18 net/minecraft/dispenser/IDispenseItemBehavior$25 +c net/minecraft/class_2357$15 net/minecraft/dispenser/IDispenseItemBehavior$22 +c net/minecraft/class_2357$16 net/minecraft/dispenser/IDispenseItemBehavior$23 +c net/minecraft/class_2357$19 net/minecraft/dispenser/IDispenseItemBehavior$3 +c net/minecraft/class_2969 net/minecraft/dispenser/OptionalDispenseBehavior + m (Z)V method_27955 setSuccessful + m ()Z method_27954 isSuccessful + f Z field_13364 successful +c net/minecraft/class_5168 net/minecraft/dispenser/BeehiveDispenseBehavior + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_27163 shear + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_27162 shearComb +c net/minecraft/class_2970 net/minecraft/dispenser/ShulkerBoxDispenseBehavior +c net/minecraft/class_2388 net/minecraft/particles/BlockParticleData + m ()Lnet/minecraft/class_2680; method_10278 getBlockState + m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2680;)Lnet/minecraft/class_2388; method_29129 func_239801_a_ + m (Lnet/minecraft/class_2396;)Lcom/mojang/serialization/Codec; method_29128 func_239800_a_ + m (Lnet/minecraft/class_2388;)Lnet/minecraft/class_2680; method_29127 func_239799_a_ + f Lnet/minecraft/class_2394$class_2395; field_11181 DESERIALIZER + f Lnet/minecraft/class_2396; field_11183 particleType + f Lnet/minecraft/class_2680; field_11182 blockState +c net/minecraft/class_2388$1 net/minecraft/particles/BlockParticleData$1 + m (Lnet/minecraft/class_2396;Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2388; method_10279 deserialize + m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2540;)Lnet/minecraft/class_2388; method_10280 read +c net/minecraft/class_2390 net/minecraft/particles/RedstoneParticleData + m (Lnet/minecraft/class_2390;)Ljava/lang/Float; method_29133 func_239806_c_ + m (Lnet/minecraft/class_2390;)Ljava/lang/Float; method_29132 func_239805_b_ + m (Lnet/minecraft/class_2390;)Ljava/lang/Float; method_29131 func_239804_a_ + m ()F method_10284 getBlue + m ()F method_10283 getAlpha + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_29130 func_239803_a_ + m ()F method_10285 getRed + m ()F method_10286 getGreen + m (Lnet/minecraft/class_2390;)Ljava/lang/Float; method_29134 func_239807_d_ + f F field_11187 red + f Lnet/minecraft/class_2390; field_11188 REDSTONE_DUST + f F field_11186 green + f F field_11185 blue + f Lnet/minecraft/class_2394$class_2395; field_11189 DESERIALIZER + f Lcom/mojang/serialization/Codec; field_25124 field_239802_b_ + f F field_11184 alpha +c net/minecraft/class_2390$1 net/minecraft/particles/RedstoneParticleData$1 + m (Lnet/minecraft/class_2396;Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2390; method_10287 deserialize + m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2540;)Lnet/minecraft/class_2390; method_10288 read +c net/minecraft/class_2392 net/minecraft/particles/ItemParticleData + m (Lnet/minecraft/class_2396;)Lcom/mojang/serialization/Codec; method_29136 func_239809_a_ + m ()Lnet/minecraft/class_1799; method_10289 getItemStack + m (Lnet/minecraft/class_2396;Lnet/minecraft/class_1799;)Lnet/minecraft/class_2392; method_29137 func_239810_a_ + m (Lnet/minecraft/class_2392;)Lnet/minecraft/class_1799; method_29135 func_239808_a_ + f Lnet/minecraft/class_1799; field_11192 itemStack + f Lnet/minecraft/class_2394$class_2395; field_11191 DESERIALIZER + f Lnet/minecraft/class_2396; field_11193 particleType +c net/minecraft/class_2392$1 net/minecraft/particles/ItemParticleData$1 + m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2540;)Lnet/minecraft/class_2392; method_10291 read + m (Lnet/minecraft/class_2396;Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2392; method_10290 deserialize +c net/minecraft/class_2394 net/minecraft/particles/IParticleData + m ()Ljava/lang/String; method_10293 getParameters + m ()Lnet/minecraft/class_2396; method_10295 getType + m (Lnet/minecraft/class_2540;)V method_10294 write +c net/minecraft/class_2394$class_2395 net/minecraft/particles/IParticleData$IDeserializer + m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2540;)Lnet/minecraft/class_2394; method_10297 read + m (Lnet/minecraft/class_2396;Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2394; method_10296 deserialize +c net/minecraft/class_2396 net/minecraft/particles/ParticleType + m ()Lcom/mojang/serialization/Codec; method_29138 func_230522_e_ + m ()Z method_10299 getAlwaysShow + m ()Lnet/minecraft/class_2394$class_2395; method_10298 getDeserializer + f Z field_11196 alwaysShow + f Lnet/minecraft/class_2394$class_2395; field_11197 deserializer +c net/minecraft/class_2398 net/minecraft/particles/ParticleTypes + m (Ljava/lang/String;Lnet/minecraft/class_2394$class_2395;Ljava/util/function/Function;)Lnet/minecraft/class_2396; method_10304 register + m (Ljava/lang/String;Z)Lnet/minecraft/class_2400; method_10303 register + m (Lnet/minecraft/class_2396;)Lcom/mojang/serialization/Codec; method_29139 func_239822_a_ + f Lcom/mojang/serialization/Codec; field_25125 CODEC + f Lnet/minecraft/class_2400; field_11236 EXPLOSION + f Lnet/minecraft/class_2400; field_11231 ANGRY_VILLAGER + f Lnet/minecraft/class_2400; field_11241 BUBBLE_POP + f Lnet/minecraft/class_2400; field_11226 ENTITY_EFFECT + f Lnet/minecraft/class_2400; field_11230 ITEM_SNOWBALL + f Lnet/minecraft/class_2400; field_11215 ENCHANT + f Lnet/minecraft/class_2400; field_11214 PORTAL + f Lnet/minecraft/class_2400; field_17431 CAMPFIRE_SIGNAL_SMOKE + f Lnet/minecraft/class_2400; field_11204 CLOUD + f Lnet/minecraft/class_2400; field_11222 DOLPHIN + f Lnet/minecraft/class_2400; field_11248 FIREWORK + f Lnet/minecraft/class_2400; field_11224 NOTE + f Lnet/minecraft/class_2400; field_11239 LAVA + f Lnet/minecraft/class_2400; field_11238 BUBBLE_COLUMN_UP + f Lnet/minecraft/class_2396; field_11206 FALLING_DUST + f Lnet/minecraft/class_2400; field_18305 LANDING_LAVA + f Lnet/minecraft/class_2400; field_11227 SWEEP_ATTACK + f Lnet/minecraft/class_2400; field_22246 SOUL_FIRE_FLAME + f Lnet/minecraft/class_2400; field_11228 SPIT + f Lnet/minecraft/class_2400; field_20537 FALLING_NECTAR + f Lnet/minecraft/class_2400; field_11223 DRIPPING_LAVA + f Lnet/minecraft/class_2400; field_20535 FALLING_HONEY + f Lnet/minecraft/class_2400; field_11209 DAMAGE_INDICATOR + f Lnet/minecraft/class_2400; field_11251 SMOKE + f Lnet/minecraft/class_2400; field_11208 ENCHANTED_HIT + f Lnet/minecraft/class_2400; field_22448 LANDING_OBSIDIAN_TEAR + f Lnet/minecraft/class_2396; field_11212 DUST + f Lnet/minecraft/class_2400; field_11245 EFFECT + f Lnet/minecraft/class_2400; field_17741 COMPOSTER + f Lnet/minecraft/class_2400; field_11210 UNDERWATER + f Lnet/minecraft/class_2400; field_22446 DRIPPING_OBSIDIAN_TEAR + f Lnet/minecraft/class_2400; field_17909 FLASH + f Lnet/minecraft/class_2400; field_18306 FALLING_WATER + f Lnet/minecraft/class_2400; field_22248 CRIMSON_SPORE + f Lnet/minecraft/class_2400; field_11243 CURRENT_DOWN + f Lnet/minecraft/class_2400; field_11225 AMBIENT_ENTITY_EFFECT + f Lnet/minecraft/class_2400; field_11237 LARGE_SMOKE + f Lnet/minecraft/class_2400; field_11249 WITCH + f Lnet/minecraft/class_2400; field_11221 EXPLOSION_EMITTER + f Lnet/minecraft/class_2400; field_11207 END_ROD + f Lnet/minecraft/class_2396; field_11218 ITEM + f Lnet/minecraft/class_2400; field_11246 ITEM_SLIME + f Lnet/minecraft/class_2400; field_23956 WHITE_ASH + f Lnet/minecraft/class_2400; field_11213 INSTANT_EFFECT + f Lnet/minecraft/class_2400; field_11205 CRIT + f Lnet/minecraft/class_2400; field_11242 RAIN + f Lnet/minecraft/class_2400; field_11247 BUBBLE + f Lnet/minecraft/class_2400; field_17430 CAMPFIRE_COSY_SMOKE + f Lnet/minecraft/class_2400; field_11203 POOF + f Lnet/minecraft/class_2400; field_11229 NAUTILUS + f Lnet/minecraft/class_2400; field_11244 FISHING + f Lnet/minecraft/class_2396; field_11217 BLOCK + f Lnet/minecraft/class_2400; field_11235 BARRIER + f Lnet/minecraft/class_2400; field_11219 MYCELIUM + f Lnet/minecraft/class_2400; field_11240 FLAME + f Lnet/minecraft/class_2400; field_22247 ASH + f Lnet/minecraft/class_2400; field_18304 FALLING_LAVA + f Lnet/minecraft/class_2400; field_11233 SQUID_INK + f Lnet/minecraft/class_2400; field_11216 DRAGON_BREATH + f Lnet/minecraft/class_2400; field_20536 LANDING_HONEY + f Lnet/minecraft/class_2400; field_11234 SNEEZE + f Lnet/minecraft/class_2400; field_20534 DRIPPING_HONEY + f Lnet/minecraft/class_2400; field_11250 ELDER_GUARDIAN + f Lnet/minecraft/class_2400; field_23190 REVERSE_PORTAL + f Lnet/minecraft/class_2400; field_11201 HEART + f Lnet/minecraft/class_2400; field_11211 HAPPY_VILLAGER + f Lnet/minecraft/class_2400; field_22447 FALLING_OBSIDIAN_TEAR + f Lnet/minecraft/class_2400; field_11202 SPLASH + f Lnet/minecraft/class_2400; field_11232 DRIPPING_WATER + f Lnet/minecraft/class_2400; field_22249 WARPED_SPORE + f Lnet/minecraft/class_2400; field_11220 TOTEM_OF_UNDYING + f Lnet/minecraft/class_2400; field_23114 SOUL +c net/minecraft/class_2398$1 net/minecraft/particles/ParticleTypes$1 + f Ljava/util/function/Function; field_25126 field_239824_a_ +c net/minecraft/class_2400 net/minecraft/particles/BasicParticleType + m ()Lnet/minecraft/class_2400; method_29140 getType + f Lnet/minecraft/class_2394$class_2395; field_11259 DESERIALIZER + f Lcom/mojang/serialization/Codec; field_25127 field_239825_b_ +c net/minecraft/class_2400$1 net/minecraft/particles/BasicParticleType$1 + m (Lnet/minecraft/class_2396;Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2400; method_10307 deserialize + m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2540;)Lnet/minecraft/class_2400; method_10306 read +c net/minecraft/class_5458 net/minecraft/util/registry/WorldGenRegistries + m ()Lnet/minecraft/class_2922; method_30572 func_243673_f + m (Lnet/minecraft/class_2960;Ljava/util/function/Supplier;)V method_30566 func_243668_a + m ()Lnet/minecraft/class_3504; method_30573 func_243674_g + m ()Lnet/minecraft/class_2975; method_30571 func_243672_e + m ()Lnet/minecraft/class_5497; method_30569 func_243670_c + m ()V method_30559 init + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2385;Ljava/util/function/Supplier;Lcom/mojang/serialization/Lifecycle;)Lnet/minecraft/class_2385; method_30564 createRegistry + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2960;Ljava/lang/Object;)Ljava/lang/Object; method_30562 register + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Ljava/util/function/Supplier;)Lnet/minecraft/class_2378; method_30563 createRegistry + m ()Lnet/minecraft/class_5312; method_30570 func_243671_d + m (Lnet/minecraft/class_2378;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; method_30561 register + m ()Lnet/minecraft/class_1959; method_30567 func_243669_b + m (Lnet/minecraft/class_2378;ILnet/minecraft/class_5321;Ljava/lang/Object;)Ljava/lang/Object; method_30560 register + m (Lnet/minecraft/class_5321;Ljava/util/function/Supplier;)Lnet/minecraft/class_2378; method_30565 createRegistry + f Lorg/apache/logging/log4j/Logger; field_25925 LOGGER + f Ljava/util/Map; field_25934 REGISTRY_NAME_TO_DEFAULT + f Lnet/minecraft/class_2378; field_25929 CONFIGURED_FEATURE + f Lnet/minecraft/class_2378; field_25927 CONFIGURED_SURFACE_BUILDER + f Lnet/minecraft/class_2378; field_25928 CONFIGURED_CARVER + f Lnet/minecraft/class_2378; field_25926 ROOT_REGISTRIES + f Lnet/minecraft/class_2385; field_25935 INTERNAL_ROOT_REGISTRIES + f Lnet/minecraft/class_2378; field_26375 NOISE_SETTINGS + f Lnet/minecraft/class_2378; field_25933 BIOME + f Lnet/minecraft/class_2378; field_25931 STRUCTURE_PROCESSOR_LIST + f Lnet/minecraft/class_2378; field_25932 JIGSAW_POOL + f Lnet/minecraft/class_2378; field_25930 CONFIGURED_STRUCTURE_FEATURE +c net/minecraft/class_2403 net/minecraft/data/DataGenerator + m ()Ljava/util/Collection; method_10312 getInputFolders + m ()Ljava/nio/file/Path; method_10313 getOutputFolder + m (Lnet/minecraft/class_2405;)V method_10314 addProvider + m ()V method_10315 run + f Ljava/util/List; field_11273 providers + f Ljava/nio/file/Path; field_11274 outputFolder + f Ljava/util/Collection; field_11272 inputFolders + f Lorg/apache/logging/log4j/Logger; field_11275 LOGGER +c net/minecraft/class_2405 net/minecraft/data/IDataProvider + m ()Ljava/lang/String; method_10321 getName + m (Lcom/google/gson/Gson;Lnet/minecraft/class_2408;Lcom/google/gson/JsonElement;Ljava/nio/file/Path;)V method_10320 save + m (Lnet/minecraft/class_2408;)V method_10319 act + f Lcom/google/common/hash/HashFunction; field_11280 HASH_FUNCTION +c net/minecraft/class_2408 net/minecraft/data/DirectoryCache + m (Ljava/nio/file/Path;)Ljava/lang/String; method_10323 getPreviousHash + m (Ljava/util/Map$Entry;)Ljava/lang/String; method_10329 func_208319_a + m ()V method_10331 deleteStale + m (Ljava/nio/file/Path;)Z method_10327 func_209397_c + m (Ljava/nio/file/Path;)V method_10332 func_208322_d + m (Ljava/nio/file/Path;Ljava/lang/String;)V method_10325 recordHash + m (Ljava/nio/file/Path;)V method_10322 func_209395_e + m ()Ljava/util/stream/Stream; method_10328 getFiles + m (Ljava/nio/file/Path;)V method_16674 addProtectedPath + m (Ljava/nio/file/Path;Ljava/lang/String;)V method_10324 func_208315_b + m (Ljava/nio/file/Path;)Z method_10330 isStale + m ()V method_10326 writeCache + f Lorg/apache/logging/log4j/Logger; field_11287 LOGGER + f I field_11284 hits + f Ljava/nio/file/Path; field_11285 outputFolder + f Ljava/util/Set; field_16743 protectedPaths + f Ljava/nio/file/Path; field_11286 cacheFile + f Ljava/util/Map; field_11282 staleFiles + f Ljava/util/Map; field_11283 createdFiles +c net/minecraft/class_2409 net/minecraft/data/AdvancementProvider + m (Ljava/util/Set;Ljava/nio/file/Path;Lnet/minecraft/class_2408;Lnet/minecraft/class_161;)V method_10333 func_204017_a + m (Ljava/nio/file/Path;Lnet/minecraft/class_161;)Ljava/nio/file/Path; method_10334 getPath + f Ljava/util/List; field_11289 advancements + f Lorg/apache/logging/log4j/Logger; field_11290 LOGGER + f Lcom/google/gson/Gson; field_11291 GSON + f Lnet/minecraft/class_2403; field_11288 generator +c net/minecraft/class_2412 net/minecraft/data/advancements/AdventureAdvancements + m (Ljava/lang/Object;)V accept accept + m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_10336 makeMobAdvancement + m (Lnet/minecraft/class_161$class_162;Ljava/util/List;)Lnet/minecraft/class_161$class_162; method_10337 makeBiomesAdvancement + m (Ljava/util/function/Consumer;)V method_10335 accept + f Ljava/util/List; field_11293 EXPLORATION_BIOMES + f [Lnet/minecraft/class_1299; field_11294 MOB_ENTITIES +c net/minecraft/class_2414 net/minecraft/data/advancements/HusbandryAdvancements + m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_16118 makeCompleteAdvancement + m (Lnet/minecraft/class_161$class_162;Ljava/lang/Integer;Lnet/minecraft/class_2960;)V method_16117 func_218461_a + m (Ljava/util/function/Consumer;)V method_10338 accept + m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_10339 makeFish + m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_10340 makeFishBucket + m (Ljava/lang/Object;)V accept accept + m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_10342 makeBredAllAnimals + m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_10341 makeBalancedDiet + f [Lnet/minecraft/class_1792; field_11298 BALANCED_DIET + f [Lnet/minecraft/class_1299; field_11296 BREEDABLE_ANIMALS + f [Lnet/minecraft/class_1792; field_11297 FISH_BUCKETS + f [Lnet/minecraft/class_1792; field_11295 FISH_ITEMS +c net/minecraft/class_2416 net/minecraft/data/advancements/NetherAdvancements + m (Ljava/lang/Object;)V accept accept + m (Ljava/util/function/Consumer;)V method_10346 accept + f Ljava/util/List; field_24614 BIOMES + f Lnet/minecraft/class_2048$class_5258; field_25712 DISTRACT_PIGLIN_PREDICATE +c net/minecraft/class_2417 net/minecraft/data/advancements/StoryAdvancements + m (Ljava/util/function/Consumer;)V method_10347 accept + m (Ljava/lang/Object;)V accept accept +c net/minecraft/class_2419 net/minecraft/data/advancements/EndAdvancements + m (Ljava/lang/Object;)V accept accept + m (Ljava/util/function/Consumer;)V method_10348 accept +c net/minecraft/class_2422 net/minecraft/data/BlockListReport + f Lnet/minecraft/class_2403; field_11307 generator + f Lcom/google/gson/Gson; field_17168 GSON +c net/minecraft/class_2425 net/minecraft/data/CommandsReport + f Lcom/google/gson/Gson; field_17169 GSON + f Lnet/minecraft/class_2403; field_11321 generator +c net/minecraft/class_2427 net/minecraft/data/RegistryDumpReport + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2960;)V method_17174 func_218431_a + m (Lnet/minecraft/class_2378;)Lcom/google/gson/JsonElement; method_17175 serialize + f Lnet/minecraft/class_2403; field_11323 generator + f Lcom/google/gson/Gson; field_17170 GSON +c net/minecraft/class_2430 net/minecraft/data/loot/BlockLootTables + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16266 func_229431_G + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;[F)Lnet/minecraft/class_52$class_53; method_10378 droppingWithChancesSticksAndApples + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16268 func_218549_ab + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_52$class_53; method_10380 droppingWithShears + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16298 func_218464_u + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16250 func_218548_F_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16312 func_218566_af + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16236 func_218533_q + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10372 onlyWithShears + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16327 func_218504_V + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_30157 func_241752_C + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10382 droppingWithSilkTouch + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16270 func_218470_aj + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16269 func_218539_az + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;)Lnet/minecraft/class_52$class_53; method_10377 droppingItemWithFortune + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16301 func_241751_m_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16875 func_218565_R + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16235 func_218555_an + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16311 func_218490_aD + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_22142 droppingAndBees + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16317 func_218500_N + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16300 func_218465_ar + m (Lnet/minecraft/class_2248;)V method_16262 registerSilkTouch + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_10383 droppingSlab + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16281 func_229434_J + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16233 func_218488_Y + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16260 func_218512_x + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16328 func_218502_av + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_52$class_53; method_10397 droppingWithSilkTouch + m ()Lnet/minecraft/class_52$class_53; method_10395 blockNoDrop + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_24817 registerDoor + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_26000 droppingNetherVines + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16280 func_218554_F + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16296 func_218537_ac + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16254 func_218571_t + m (Lnet/minecraft/class_1935;Lnet/minecraft/class_116;)Ljava/lang/Object; method_10393 withExplosionDecay + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1935;Lnet/minecraft/class_59;)Lnet/minecraft/class_52$class_53; method_10386 droppingWithSilkTouchOrRandomly + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16307 func_218487_E_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16316 func_218557_ag + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16282 func_218499_aw + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_17584 func_218469_p + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16234 func_218516_U + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16288 func_218550_B + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16263 func_218521_ak + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16275 func_218501_aA + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10389 droppingAndFlowerPot + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_30159 droppingSheared + m (Ljava/util/function/BiConsumer;)V method_10379 accept + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16247 func_218473_Q + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16322 func_218567_ao + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_30158 droppingSeedsTall + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16877 droppingWithPatterns + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16303 func_218506_M + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16313 func_218534_as + m (Lnet/minecraft/class_2248;)V method_16285 registerFlowerPot + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16292 func_218517_Z + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16279 func_218496_w + m (Lnet/minecraft/class_1935;Lnet/minecraft/class_59;)Lnet/minecraft/class_52$class_53; method_10384 droppingRandomly + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16243 func_229433_I + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16232 func_218472_ad + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16314 func_218553_s + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_52$class_53;)V method_16258 registerLootTable + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16290 func_218568_H_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16306 func_218545_ah + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_27165 func_229432_o + m (Ljava/lang/Object;)V accept accept + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16251 func_218505_ax + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16324 func_218525_E + m (Lnet/minecraft/class_2248;Ljava/util/function/Function;)V method_16293 registerLootTable + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16237 func_218478_T + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16255 func_218479_al + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_10371 droppingSeeds + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;)Lnet/minecraft/class_52$class_53; method_23229 dropSeedsForStem + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10373 onlyWithSilkTouch + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16283 func_218514_aB + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_23231 func_218531_A + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16284 func_218518_P + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16277 func_218556_ap + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16876 droppingWithContents + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16310 func_218497_W + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16249 func_218467_z + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16245 func_241172_L + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_5341$class_210;Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_52$class_53; method_10381 dropping + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_29399 func_239293_at + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_16238 registerSilkTouch + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16273 func_218569_aa + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Lnet/minecraft/class_52$class_53; method_10375 droppingWhen + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;[F)Lnet/minecraft/class_52$class_53; method_10390 droppingWithChancesAndSticks + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16242 func_218532_v + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16264 func_241170_H + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_52$class_53; method_10388 droppingWithSilkTouchOrShears + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16326 func_218520_ae + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16321 func_218485_r + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_26277 func_218471_G_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16246 func_218536_ai + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_27164 func_218538_n_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1935;)V method_16256 registerDropping + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10385 droppingItemRarely + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16302 func_218462_ay + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16297 func_218572_D + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_17967 func_218551_S + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;)Lnet/minecraft/class_52$class_53; method_10387 droppingByAge + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10394 dropping + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16286 func_218543_am + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_22143 droppingAndBeesWithAlternative + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16252 func_218529_aC + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16325 func_218477_O + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_52$class_53; method_10391 droppingAndBonusWhen + m (Lnet/minecraft/class_1935;Lnet/minecraft/class_192;)Ljava/lang/Object; method_10392 withSurvivesExplosion + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16241 func_218558_aq + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_10396 droppingWithName + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16874 func_241171_K + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16295 func_218503_X + m (Lnet/minecraft/class_2248;)V method_16329 registerDropSelfLootTable + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_23230 func_218509_y + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_29400 func_239296_au + f Lnet/minecraft/class_5341$class_210; field_11343 SHEARS + f Ljava/util/Map; field_16493 lootTables + f [F field_11339 DEFAULT_SAPLING_DROP_RATES + f Lnet/minecraft/class_5341$class_210; field_11337 NO_SILK_TOUCH + f Lnet/minecraft/class_5341$class_210; field_11341 NOT_SILK_TOUCH_OR_SHEARS + f Ljava/util/Set; field_11340 IMMUNE_TO_EXPLOSIONS + f Lnet/minecraft/class_5341$class_210; field_11336 SILK_TOUCH + f Lnet/minecraft/class_5341$class_210; field_11342 SILK_TOUCH_OR_SHEARS + f [F field_11338 RARE_SAPLING_DROP_RATES +c net/minecraft/class_2432 net/minecraft/data/loot/ChestLootTables + m (Ljava/lang/Object;)V accept accept + m (Ljava/util/function/BiConsumer;)V method_10399 accept +c net/minecraft/class_2434 net/minecraft/data/loot/EntityLootTables + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_52$class_53;)V method_16369 registerLootTable + m (Lnet/minecraft/class_2487;)V method_10402 func_218584_a + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10401 sheepLootTableBuilderWithDrop + m (Ljava/util/function/BiConsumer;)V method_10400 accept + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_52$class_53;)V method_16368 registerLootTable + m (Ljava/lang/Object;)V accept accept + f Ljava/util/Map; field_16543 lootTables + f Ljava/util/Set; field_19339 NO_DROPS + f Lnet/minecraft/class_2048$class_2049; field_11344 ON_FIRE +c net/minecraft/class_2437 net/minecraft/data/loot/FishingLootTables + m (Ljava/lang/Object;)V accept accept + m (Ljava/util/function/BiConsumer;)V method_10405 accept + m (Lnet/minecraft/class_2487;)V method_10406 func_218588_a + f Lnet/minecraft/class_5341$class_210; field_11349 IN_BAMBOO_JUNGLE + f Lnet/minecraft/class_5341$class_210; field_11350 IN_JUNGLE_EDGE + f Lnet/minecraft/class_5341$class_210; field_11347 IN_JUNGLE_HILLS + f Lnet/minecraft/class_5341$class_210; field_11352 IN_BAMBOO_JUNGLE_HILLS + f Lnet/minecraft/class_5341$class_210; field_11346 IN_JUNGLE + f Lnet/minecraft/class_5341$class_210; field_11351 IN_MODIFIED_JUNGLE_EDGE + f Lnet/minecraft/class_5341$class_210; field_11348 IN_MODIFIED_JUNGLE +c net/minecraft/class_3714 net/minecraft/data/loot/GiftLootTables + m (Lnet/minecraft/class_2487;)V method_20191 func_218599_e + m (Lnet/minecraft/class_2487;)V method_20193 func_218601_g + m (Lnet/minecraft/class_2487;)V method_20192 func_218600_f + m (Lnet/minecraft/class_2487;)V method_20194 func_218607_h + m (Ljava/lang/Object;)V accept accept + m (Lnet/minecraft/class_2487;)V method_20195 func_218603_i + m (Lnet/minecraft/class_2487;)V method_20197 func_218608_k + m (Lnet/minecraft/class_2487;)V method_20196 func_218606_j + m (Lnet/minecraft/class_2487;)V method_20198 func_218597_l + m (Ljava/util/function/BiConsumer;)V method_20187 accept + m (Lnet/minecraft/class_2487;)V method_20186 func_218604_a + m (Lnet/minecraft/class_2487;)V method_20189 func_218605_c + m (Lnet/minecraft/class_2487;)V method_20199 func_218596_m + m (Lnet/minecraft/class_2487;)V method_20188 func_218602_b + m (Lnet/minecraft/class_2487;)V method_20190 func_218598_d +c net/minecraft/class_2438 net/minecraft/data/LootTableProvider + m (Ljava/lang/String;Ljava/lang/String;)V method_10407 func_229440_a_ + m (Ljava/nio/file/Path;Lnet/minecraft/class_2408;Lnet/minecraft/class_2960;Lnet/minecraft/class_52;)V method_10408 func_229441_a_ + m (Ljava/util/Map;Lcom/mojang/datafixers/util/Pair;Lnet/minecraft/class_2960;Lnet/minecraft/class_52$class_53;)V method_10412 func_218437_a + m (Ljava/nio/file/Path;Lnet/minecraft/class_2960;)Ljava/nio/file/Path; method_10409 getPath + m (Lnet/minecraft/class_58;Lnet/minecraft/class_2960;Lnet/minecraft/class_52;)V method_10411 func_229439_a_ + m (Ljava/util/Map;Lcom/mojang/datafixers/util/Pair;)V method_10410 func_218438_a + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5341; method_22825 func_229442_a_ + f Lnet/minecraft/class_2403; field_11353 dataGenerator + f Ljava/util/List; field_11354 field_218444_e + f Lcom/google/gson/Gson; field_11356 GSON + f Lorg/apache/logging/log4j/Logger; field_11355 LOGGER +c net/minecraft/class_4845 net/minecraft/loot/PiglinBarteringAddition + m (Lnet/minecraft/class_2487;)V method_24881 func_239832_a_ + m (Lnet/minecraft/class_2487;)V method_30577 func_243684_a + m (Lnet/minecraft/class_2487;)V method_24882 func_239833_b_ + m (Ljava/util/function/BiConsumer;)V method_24818 accept + m (Ljava/lang/Object;)V accept accept +c net/minecraft/class_4910 net/minecraft/data/BlockModelProvider + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)V method_25678 func_240011_j_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)V method_25660 func_239993_g_ + m ()V method_25513 func_239841_E_ + m (Lnet/minecraft/class_2248;)V method_25694 func_240027_p_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4914; method_25676 func_240009_j_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25651 func_239985_f_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25609 func_239943_b_ + m (Lnet/minecraft/class_2248;Ljava/lang/String;)V method_25556 func_239885_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;)V method_25621 func_239955_c_ + m ()Lnet/minecraft/class_4926; method_25630 func_239964_d_ + m ()V method_25699 func_240030_r_ + m (Lnet/minecraft/class_4944;)V method_25628 func_239962_c_ + m (Lnet/minecraft/class_5000;)Lnet/minecraft/class_4935; method_26432 func_239897_a_ + m ()V method_25597 func_239929_ag_ + m (I)Ljava/util/List; method_25535 func_239864_a_ + m ()V method_25712 func_240044_y_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25662 func_239995_g_ + m (Lnet/minecraft/class_2248;)V method_25671 func_240004_i_ + m (Lnet/minecraft/class_4944;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25575 func_239906_a_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25663 func_239996_g_ + m (Ljava/util/List;Ljava/util/function/UnaryOperator;)Ljava/util/List; method_25583 func_239914_a_ + m (Lnet/minecraft/class_2776;)Lnet/minecraft/class_4935; method_25567 func_239896_a_ + m (Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/util/List; method_25615 func_239949_b_ + m (Lnet/minecraft/class_2248;)V method_25540 func_239869_a_ + m (Lnet/minecraft/class_4910;Lnet/minecraft/class_2248;)V method_25570 func_239901_a_ + m (ILjava/lang/String;Lnet/minecraft/class_4944;)Lnet/minecraft/class_2960; method_25536 func_239865_a_ + m (Lnet/minecraft/class_2248;)V method_25708 func_240041_w_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;Lnet/minecraft/class_4944;)V method_25604 func_239938_b_ + m ()V method_25528 func_239856_T_ + m (Ljava/lang/String;I)Lnet/minecraft/class_4935; method_25582 func_239913_a_ + m ()V method_25591 func_239923_aa_ + m (Lnet/minecraft/class_4944;)Lnet/minecraft/class_2960; method_25638 func_239972_d_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4925; method_25559 func_239888_a_ + m ([Lnet/minecraft/class_2960;Ljava/lang/Integer;)Lnet/minecraft/class_4935; method_26278 func_239922_a_ + m ()V method_25512 func_239840_D_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25642 func_239976_e_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)V method_31063 func_243685_g + m ()Lnet/minecraft/class_4926; method_25640 func_239974_e_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;)V method_25542 func_239871_a_ + m ()V method_25520 func_239848_L_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;)V method_25603 func_239937_b_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25564 func_239893_a_ + m (Lnet/minecraft/class_4944;)V method_25612 func_239946_b_ + m ()V method_25697 func_240028_q_ + m (Lnet/minecraft/class_2248;)V method_25692 func_240025_o_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25635 func_239969_d_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25606 func_239940_b_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25655 func_239988_f_ + m ()V method_25596 func_239928_af_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4911; method_25585 func_239916_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;)V method_25652 func_239977_e_ + m ()V method_25534 func_239863_a_ + m (Lnet/minecraft/class_2248;)V method_25665 func_239998_h_ + m ()V method_25711 func_240042_x_ + m ()V method_25670 func_240003_i_ + m ([ILit/unimi/dsi/fastutil/ints/Int2ObjectMap;Lnet/minecraft/class_2248;Ljava/lang/Integer;)Lnet/minecraft/class_4935; method_25589 func_239920_a_ + m (Lnet/minecraft/class_2248;)V method_25706 func_240039_v_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25669 func_240002_h_ + m (Ljava/lang/Boolean;Ljava/lang/Boolean;)Lnet/minecraft/class_4935; method_25577 func_239908_a_ + m ()V method_25527 func_239855_S_ + m (Lnet/minecraft/class_2248;)V method_25698 func_240031_r_ + m ()V method_25590 func_239862_Z_ + m (Lnet/minecraft/class_4946$class_4947;[Lnet/minecraft/class_2248;)V method_25576 func_239907_a_ + m ()V method_25695 func_240026_p_ + m (Ljava/lang/Integer;Ljava/lang/Integer;)Lnet/minecraft/class_2960; method_25581 func_239912_a_ + m ()V method_25510 func_239838_B_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25563 func_239892_a_ + m ()V method_25519 func_239847_K_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25666 func_239999_h_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;Lnet/minecraft/class_4946$class_4947;)V method_25554 func_239883_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;)V method_25548 func_239877_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4944;Lnet/minecraft/class_4942;)V method_25551 func_239880_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25624 func_239958_c_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25544 func_239873_a_ + m (Lnet/minecraft/class_4910;Lnet/minecraft/class_1792;)V method_25569 func_239900_a_ + m ()V method_25709 func_240040_w_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4935; method_25616 func_239950_b_ + m ()V method_25595 func_239927_ae_ + m (Lnet/minecraft/class_2248;II)Lnet/minecraft/class_2960; method_25541 func_239870_a_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25647 func_239981_e_ + m ()Lnet/minecraft/class_4926; method_25649 func_239983_f_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;)V method_25586 func_239917_a_ + m ()V method_25526 func_239854_R_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;)V method_25605 func_239939_b_ + m ()V method_25664 func_239997_h_ + m (Lnet/minecraft/class_2248;)V method_25619 func_239953_c_ + m ()V method_25693 func_240024_o_ + m (Lnet/minecraft/class_4946$class_4947;[Lnet/minecraft/class_2248;)V method_25614 func_239948_b_ + m (Lnet/minecraft/class_2248;)V method_25696 func_240029_q_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;)V method_25561 func_239890_a_ + m (Ljava/lang/Integer;)Lnet/minecraft/class_4935; method_25579 func_239910_a_ + m ()V method_25509 func_239837_A_ + m ()V method_25533 func_239861_Y_ + m ()V method_25518 func_239846_J_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25659 func_239992_g_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4944;)V method_25550 func_239879_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25668 func_240001_h_ + m (Lnet/minecraft/class_4944;)Lnet/minecraft/class_4910$class_4912; method_25574 func_239905_a_ + m ()V method_25525 func_239853_Q_ + m (Lnet/minecraft/class_2248;Ljava/lang/String;Lnet/minecraft/class_4942;Ljava/util/function/Function;)Lnet/minecraft/class_2960; method_25557 func_239886_a_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;)V method_25617 func_239951_b_ + m ()V method_25594 func_239926_ad_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25656 func_239989_f_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;)V method_25622 func_239956_c_ + m (Lnet/minecraft/class_2248;)V method_25600 func_239934_b_ + m ()V method_25657 func_239990_g_ + m (Lnet/minecraft/class_2248;)V method_25710 func_240043_x_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25601 func_239935_b_ + m ()V method_25532 func_239860_X_ + m ()V method_25691 func_240022_n_ + m (Lnet/minecraft/class_2248;)V method_25685 func_240018_l_ + m (Lnet/minecraft/class_2960;Ljava/lang/Integer;)Lnet/minecraft/class_4935; method_25587 func_239918_a_ + m ()V method_25707 func_240038_v_ + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_2960;)V method_25538 func_239867_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25677 func_240010_j_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;)V method_25602 func_239936_b_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25607 func_239941_b_ + m ()V method_25517 func_239845_I_ + m ()V method_25524 func_239852_P_ + m (Lnet/minecraft/class_2746;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4926; method_25565 func_239894_a_ + m (Lnet/minecraft/class_2248;)V method_25641 func_239975_e_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25627 func_239961_c_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25625 func_239959_c_ + m ()V method_25593 func_239925_ac_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;)V method_25629 func_239963_c_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25673 func_240006_i_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_4935;)V method_25560 func_239889_a_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25683 func_240016_k_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4925; method_25644 func_239978_e_ + m (Lnet/minecraft/class_2960;)[Lnet/minecraft/class_4935; method_25584 func_239915_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25543 func_239872_a_ + m ([Lnet/minecraft/class_2248;)V method_27166 func_239921_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4911; method_25632 func_239966_d_ + m ()V method_25687 func_240020_m_ + m (Lnet/minecraft/class_2248;)V method_31064 func_239839_C_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)V method_25623 func_239957_c_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25650 func_239984_f_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25653 func_239986_f_ + m ()V method_25705 func_240036_u_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25608 func_239942_b_ + m (Lnet/minecraft/class_2248;)V method_25681 func_240014_k_ + m ()V method_25516 func_239844_H_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25672 func_240005_i_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25562 func_239891_a_ + m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4926; method_25566 func_239895_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;)V method_25545 func_239874_a_ + m (Lnet/minecraft/class_4944;)V method_25648 func_239982_e_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25637 func_239971_d_ + m (Lnet/minecraft/class_4926$class_4930;Lnet/minecraft/class_2756;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4926$class_4930; method_25572 func_239903_a_ + m (Lnet/minecraft/class_2248;)Ljava/util/List; method_25704 func_240037_u_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25667 func_240000_h_ + m ()V method_25523 func_239851_O_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Ljava/util/function/BiFunction;)V method_25546 func_239875_a_ + m ()V method_25531 func_239859_W_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;)V method_25639 func_239973_d_ + m (Lnet/minecraft/class_2248;)V method_25631 func_239965_d_ + m ()V method_26434 func_239932_aj_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4925; method_25634 func_239968_d_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;)V method_25553 func_239882_a_ + m (Lnet/minecraft/class_1792;)V method_25537 func_239866_a_ + m ()V method_25515 func_239843_G_ + m ()V method_25684 func_240017_l_ + m (Ljava/lang/Integer;Ljava/lang/Boolean;Ljava/lang/Boolean;)Lnet/minecraft/class_4935; method_25580 func_239911_a_ + m ()V method_25592 func_239924_ab_ + m ()V method_25703 func_240034_t_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25573 func_239904_a_ + m ()Lnet/minecraft/class_4926; method_25599 func_239933_b_ + m (Lnet/minecraft/class_2248;)V method_25690 func_240023_n_ + m (Lnet/minecraft/class_2248;)Ljava/util/List; method_25702 func_240035_t_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25686 func_240019_l_ + m ()Lnet/minecraft/class_4926; method_25675 func_240008_j_ + m (Lnet/minecraft/class_2248;)V method_25658 func_239991_g_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946;)Lnet/minecraft/class_4910$class_4912; method_25555 func_239884_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25626 func_239960_c_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4944;Ljava/lang/Integer;)Lnet/minecraft/class_4935; method_25552 func_239881_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25646 func_239980_e_ + m ()V method_25522 func_239850_N_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25661 func_239994_g_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25674 func_240007_i_ + m ()V method_25530 func_239858_V_ + m (Lnet/minecraft/class_4910;)Ljava/util/function/Consumer; method_25610 func_239944_b_ + m ()V method_26279 func_239931_ai_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4925; method_25645 func_239979_e_ + m ()V method_25514 func_239842_F_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25620 func_239954_c_ + m (Lnet/minecraft/class_4910;)Ljava/util/function/BiConsumer; method_25568 func_239899_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2769;[I)V method_25547 func_239876_a_ + m ()Lnet/minecraft/class_4926; method_25618 func_239952_c_ + m (Lnet/minecraft/class_5000;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_26433 func_239898_a_ + m (Lnet/minecraft/class_4910;Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)V method_25571 func_239902_a_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25611 func_239945_b_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Ljava/lang/Boolean;Lnet/minecraft/class_2768;)Lnet/minecraft/class_4935; method_25588 func_239919_a_ + m ()V method_25701 func_240032_s_ + m (Lnet/minecraft/class_2248;)V method_25688 func_240021_m_ + m (Lnet/minecraft/class_2248;Ljava/util/function/Function;)V method_25558 func_239887_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25682 func_240015_k_ + m ()V method_25508 func_240045_z_ + m ()V method_25598 func_239930_ah_ + m (Lnet/minecraft/class_2248;)Ljava/util/List; method_25700 func_240033_s_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;Lnet/minecraft/class_4944;)V method_25549 func_239878_a_ + m (Lnet/minecraft/class_1826;)V method_25539 func_239868_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25636 func_239970_d_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25654 func_239987_f_ + m (Lnet/minecraft/class_4944;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25613 func_239947_b_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;)Lnet/minecraft/class_4910$class_4912; method_25633 func_239967_d_ + m ()V method_25521 func_239849_M_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25679 func_240012_j_ + m ()V method_25529 func_239857_U_ + m ()V method_25680 func_240013_k_ + m (Ljava/lang/Comparable;Lnet/minecraft/class_4935;Lnet/minecraft/class_4935;Ljava/lang/Comparable;)Lnet/minecraft/class_4935; method_25578 func_239909_a_ + f Ljava/util/function/Consumer; field_22832 field_239836_c_ + f Ljava/util/function/BiConsumer; field_22831 field_239835_b_ + f Ljava/util/function/Consumer; field_22830 field_239834_a_ +c net/minecraft/class_4910$1 net/minecraft/data/BlockModelProvider$1 + f [I field_23399 field_240046_a_ + f [I field_22833 field_240047_b_ +c net/minecraft/class_4910$class_4914 net/minecraft/data/BlockModelProvider$LogsVariantHelper + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4914; method_25729 func_240071_b_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4914; method_25730 func_240072_c_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4914; method_25728 func_240070_a_ + f Lnet/minecraft/class_4910; field_22842 field_240068_a_ + f Lnet/minecraft/class_4944; field_22843 field_240069_b_ +c net/minecraft/class_4910$class_4911 net/minecraft/data/BlockModelProvider$BreakParticleHelper + m (Lnet/minecraft/class_4942;[Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4911; method_25713 func_240050_a_ + m ([Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4911; method_25715 func_240052_b_ + m ([Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4911; method_25714 func_240051_a_ + f Lnet/minecraft/class_2960; field_22835 field_240049_b_ + f Lnet/minecraft/class_4910; field_22834 field_240048_a_ +c net/minecraft/class_4910$class_4913 net/minecraft/data/BlockModelProvider$TintMode + m (Ljava/lang/String;)Lnet/minecraft/class_4910$class_4913; valueOf valueOf + m ()Lnet/minecraft/class_4942; method_25726 func_240066_a_ + m ()Lnet/minecraft/class_4942; method_25727 func_240067_b_ + m ()[Lnet/minecraft/class_4910$class_4913; values values + f Lnet/minecraft/class_4910$class_4913; field_22839 TINTED + f [Lnet/minecraft/class_4910$class_4913; field_22841 $VALUES + f Lnet/minecraft/class_4910$class_4913; field_22840 NOT_TINTED +c net/minecraft/class_4910$class_4912 net/minecraft/data/BlockModelProvider$BlockTextureCombiner + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25725 func_240065_g_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25717 func_240057_a_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25716 func_240056_a_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25724 func_240064_f_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25723 func_240063_e_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25722 func_240062_d_ + m (Ljava/util/function/Function;)Lnet/minecraft/class_4910$class_4912; method_25719 func_240059_a_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4942;)Lnet/minecraft/class_4910$class_4912; method_25718 func_240058_a_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25721 func_240061_c_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25720 func_240060_b_ + f Lnet/minecraft/class_4910; field_22836 field_240053_a_ + f Lnet/minecraft/class_4944; field_22837 field_240054_b_ + f Lnet/minecraft/class_2960; field_22838 field_240055_c_ +c net/minecraft/class_4915 net/minecraft/data/ItemModelProvider + m ()V method_25731 func_240074_a_ + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_4942;)V method_25733 func_240076_a_ + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;Lnet/minecraft/class_4942;)V method_25732 func_240075_a_ + m (Lnet/minecraft/class_1792;Ljava/lang/String;Lnet/minecraft/class_4942;)V method_25734 func_240077_a_ + f Ljava/util/function/BiConsumer; field_22844 field_240073_a_ +c net/minecraft/class_4916 net/minecraft/data/BlockStateProvider + m (Ljava/nio/file/Path;Lnet/minecraft/class_2248;)Ljava/nio/file/Path; method_25736 func_240082_a_ + m (Lnet/minecraft/class_2408;Ljava/nio/file/Path;Ljava/util/Map;Ljava/util/function/BiFunction;)V method_25735 func_240081_a_ + m (Ljava/util/Map;Lnet/minecraft/class_4917;)V method_25739 func_240085_a_ + m (Ljava/util/Map;Lnet/minecraft/class_2248;)Z method_25738 func_240084_a_ + m (Ljava/util/Set;Ljava/util/Map;Lnet/minecraft/class_2248;)V method_25741 func_240087_a_ + m (Ljava/util/function/BiFunction;Ljava/nio/file/Path;Lnet/minecraft/class_2408;Ljava/lang/Object;Ljava/util/function/Supplier;)V method_25742 func_240088_a_ + m (Ljava/util/Map;Lnet/minecraft/class_2960;Ljava/util/function/Supplier;)V method_25740 func_240086_a_ + m (Ljava/nio/file/Path;Lnet/minecraft/class_2960;)Ljava/nio/file/Path; method_25737 func_240083_a_ + f Lorg/apache/logging/log4j/Logger; field_22845 field_240078_b_ + f Lnet/minecraft/class_2403; field_22847 field_240080_d_ + f Lcom/google/gson/Gson; field_22846 field_240079_c_ +c net/minecraft/class_4917 net/minecraft/data/IFinishedBlockState + m ()Lnet/minecraft/class_2248; method_25743 func_230524_a_ +c net/minecraft/class_4918 net/minecraft/data/IMultiPartPredicateBuilder + m (Lnet/minecraft/class_2689;)V method_25745 func_230523_a_ + m ([Lnet/minecraft/class_4918;)Lnet/minecraft/class_4918; method_25746 func_240090_b_ + m ()Lnet/minecraft/class_4918$class_4921; method_25744 func_240089_a_ +c net/minecraft/class_4918$class_4919 net/minecraft/data/IMultiPartPredicateBuilder$Serializer + m ()Lcom/google/gson/JsonElement; method_25748 get + m (Lnet/minecraft/class_2689;Lnet/minecraft/class_4918;)V method_25747 func_240093_a_ + m ()Ljava/lang/Object; get get + f Ljava/util/List; field_22849 field_240092_b_ + f Lnet/minecraft/class_4918$class_4920; field_22848 field_240091_a_ +c net/minecraft/class_4918$1 net/minecraft/data/IMultiPartPredicateBuilder$1 +c net/minecraft/class_4918$class_4921 net/minecraft/data/IMultiPartPredicateBuilder$Properties + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2769;Ljava/lang/String;)V method_25755 func_240102_a_ + m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;[Ljava/lang/Comparable;)Ljava/lang/String; method_25757 func_240103_c_ + m (Lnet/minecraft/class_2769;Ljava/lang/String;)V method_25753 func_240100_a_ + m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2769;)Z method_25750 func_240097_a_ + m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;[Ljava/lang/Comparable;)Lnet/minecraft/class_4918$class_4921; method_25752 func_240099_a_ + m ()Ljava/lang/Object; get get + m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Lnet/minecraft/class_4918$class_4921; method_25751 func_240098_a_ + m ()Lcom/google/gson/JsonElement; method_25756 get + m (Lnet/minecraft/class_2769;Ljava/util/stream/Stream;)Ljava/lang/String; method_25754 func_240101_a_ + f Ljava/util/Map; field_22854 field_240096_a_ +c net/minecraft/class_4918$class_4920 net/minecraft/data/IMultiPartPredicateBuilder$Operator + m (Ljava/lang/String;)Lnet/minecraft/class_4918$class_4920; valueOf valueOf + m (Lnet/minecraft/class_4918$class_4920;)Ljava/lang/String; method_25749 func_240095_a_ + m ()[Lnet/minecraft/class_4918$class_4920; values values + f Ljava/lang/String; field_22852 field_240094_c_ + f Lnet/minecraft/class_4918$class_4920; field_22850 AND + f [Lnet/minecraft/class_4918$class_4920; field_22853 $VALUES + f Lnet/minecraft/class_4918$class_4920; field_22851 OR +c net/minecraft/class_4922 net/minecraft/data/FinishedMultiPartBlockState + m (Lnet/minecraft/class_4918;Ljava/util/List;)Lnet/minecraft/class_4922; method_25761 func_240109_a_ + m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4922; method_25763 func_240111_a_ + m ()Lcom/google/gson/JsonElement; method_25765 get + m (Lnet/minecraft/class_4918;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4922; method_25760 func_240108_a_ + m (Lnet/minecraft/class_2689;Lnet/minecraft/class_4922$class_4924;)V method_25759 func_240107_a_ + m (Ljava/util/List;)Lnet/minecraft/class_4922; method_25764 func_240112_a_ + m (Lnet/minecraft/class_4918;[Lnet/minecraft/class_4935;)Lnet/minecraft/class_4922; method_25762 func_240110_a_ + m ()Ljava/lang/Object; get get + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4922; method_25758 func_240106_a_ + f Ljava/util/List; field_22856 field_240105_b_ + f Lnet/minecraft/class_2248; field_22855 field_240104_a_ +c net/minecraft/class_4922$1 net/minecraft/data/FinishedMultiPartBlockState$1 +c net/minecraft/class_4922$class_4924 net/minecraft/data/FinishedMultiPartBlockState$Part + m (Lcom/google/gson/JsonObject;)V method_25768 func_230526_a_ + m (Lnet/minecraft/class_2689;)V method_25767 func_230525_a_ + m ()Ljava/lang/Object; get get + m ()Lcom/google/gson/JsonElement; method_25766 get + f Ljava/util/List; field_22858 field_240114_a_ +c net/minecraft/class_4922$class_4923 net/minecraft/data/FinishedMultiPartBlockState$ConditionalPart + f Lnet/minecraft/class_4918; field_22857 field_240113_a_ +c net/minecraft/class_4925 net/minecraft/data/FinishedVariantBlockState + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4925; method_25770 func_240120_a_ + m (Ljava/util/Map;Lcom/mojang/datafixers/util/Pair;)V method_25779 func_240129_a_ + m (Lcom/mojang/datafixers/util/Pair;Ljava/util/Map$Entry;)Lcom/mojang/datafixers/util/Pair; method_25774 func_240124_a_ + m (Ljava/util/Map;Lcom/mojang/datafixers/util/Pair;)Ljava/util/stream/Stream; method_25781 func_240130_b_ + m (Lnet/minecraft/class_2248;[Lnet/minecraft/class_4935;)Lnet/minecraft/class_4925; method_25771 func_240121_a_ + m ()Lcom/google/gson/JsonElement; method_25780 get + m (Ljava/util/List;Lcom/google/common/collect/ImmutableList$Builder;Lnet/minecraft/class_4935;)V method_25776 func_240126_a_ + m ()Ljava/lang/Object; get get + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4925; method_25769 func_240119_a_ + m (Ljava/util/Map;Lcom/google/gson/JsonObject;)V method_25778 func_240128_a_ + m (Lcom/google/common/collect/ImmutableList$Builder;Lnet/minecraft/class_4935;Lnet/minecraft/class_4935;)V method_25773 func_240123_a_ + m (Lnet/minecraft/class_2769;)V method_25772 func_240122_a_ + m (Ljava/util/List;Ljava/util/List;)Ljava/util/List; method_25777 func_240127_a_ + m (Lnet/minecraft/class_4926;)Lnet/minecraft/class_4925; method_25775 func_240125_a_ + f Ljava/util/Set; field_22861 field_240117_c_ + f Lnet/minecraft/class_2248; field_22859 field_240115_a_ + f Ljava/util/List; field_22860 field_240116_b_ + f Ljava/util/List; field_22862 field_240118_d_ +c net/minecraft/class_4926 net/minecraft/data/BlockStateVariantBuilder + m (Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;)Lnet/minecraft/class_4926$class_4931; method_25787 func_240137_a_ + m (Lnet/minecraft/class_2769;Lnet/minecraft/class_4934;)Ljava/util/stream/Stream; method_25788 func_240138_a_ + m (Lnet/minecraft/class_2769;)Lnet/minecraft/class_4926$class_4927; method_25783 func_240133_a_ + m ()Ljava/util/Map; method_25782 func_240132_a_ + m ()Ljava/util/List; method_25791 func_230527_b_ + m (Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;)Lnet/minecraft/class_4926$class_4928; method_25784 func_240134_a_ + m (Lnet/minecraft/class_4934;Ljava/util/List;)V method_25790 func_240140_a_ + m ()V method_25792 func_240141_c_ + m (Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;)Lnet/minecraft/class_4926$class_4929; method_25785 func_240135_a_ + m (Lnet/minecraft/class_4934;)Z method_25789 func_240139_a_ + m (Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;)Lnet/minecraft/class_4926$class_4930; method_25786 func_240136_a_ + f Ljava/util/Map; field_22863 field_240131_a_ +c net/minecraft/class_4926$1 net/minecraft/data/BlockStateVariantBuilder$1 +c net/minecraft/class_4926$class_4928 net/minecraft/data/BlockStateVariantBuilder$Two + m (Ljava/util/function/BiFunction;)Lnet/minecraft/class_4926; method_25803 func_240155_b_ + m (Ljava/lang/Comparable;Ljava/util/function/BiFunction;Ljava/lang/Comparable;)V method_25799 func_240151_a_ + m (Ljava/util/function/BiFunction;Ljava/lang/Comparable;)V method_25801 func_240153_a_ + m (Ljava/util/function/BiFunction;)Lnet/minecraft/class_4926; method_25800 func_240152_a_ + m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/util/List;)Lnet/minecraft/class_4926$class_4928; method_25798 func_240150_a_ + m (Ljava/lang/Comparable;Ljava/lang/Comparable;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4926$class_4928; method_25797 func_240149_a_ + m (Ljava/lang/Comparable;Ljava/util/function/BiFunction;Ljava/lang/Comparable;)V method_25802 func_240154_b_ + m (Ljava/util/function/BiFunction;Ljava/lang/Comparable;)V method_25804 func_240156_b_ + f Lnet/minecraft/class_2769; field_22866 field_240148_b_ + f Lnet/minecraft/class_2769; field_22865 field_240147_a_ +c net/minecraft/class_4926$class_4927 net/minecraft/data/BlockStateVariantBuilder$One + m (Ljava/util/function/Function;)Lnet/minecraft/class_4926; method_25795 func_240145_a_ + m (Ljava/lang/Comparable;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4926$class_4927; method_25793 func_240143_a_ + m (Ljava/lang/Comparable;Ljava/util/List;)Lnet/minecraft/class_4926$class_4927; method_25794 func_240144_a_ + m (Ljava/util/function/Function;Ljava/lang/Comparable;)V method_25796 func_240146_b_ + f Lnet/minecraft/class_2769; field_22864 field_240142_a_ +c net/minecraft/class_4926$class_4930 net/minecraft/data/BlockStateVariantBuilder$Four + m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4926$class_4930; method_25811 func_240170_a_ + m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/util/List;)Lnet/minecraft/class_4926$class_4930; method_25812 func_240171_a_ + f Lnet/minecraft/class_2769; field_22872 field_240168_c_ + f Lnet/minecraft/class_2769; field_22871 field_240167_b_ + f Lnet/minecraft/class_2769; field_22870 field_240166_a_ + f Lnet/minecraft/class_2769; field_22873 field_240169_d_ +c net/minecraft/class_4926$class_4929 net/minecraft/data/BlockStateVariantBuilder$Three + m (Lnet/minecraft/class_4926$class_4932;Ljava/lang/Comparable;)V method_25808 func_240163_b_ + m (Lnet/minecraft/class_4926$class_4932;)Lnet/minecraft/class_4926; method_25805 func_240160_a_ + m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/util/List;)Lnet/minecraft/class_4926$class_4929; method_25807 func_240162_a_ + m (Ljava/lang/Comparable;Lnet/minecraft/class_4926$class_4932;Ljava/lang/Comparable;)V method_25809 func_240164_b_ + m (Ljava/lang/Comparable;Ljava/lang/Comparable;Lnet/minecraft/class_4926$class_4932;Ljava/lang/Comparable;)V method_25810 func_240165_b_ + m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4926$class_4929; method_25806 func_240161_a_ + f Lnet/minecraft/class_2769; field_22867 field_240157_a_ + f Lnet/minecraft/class_2769; field_22869 field_240159_c_ + f Lnet/minecraft/class_2769; field_22868 field_240158_b_ +c net/minecraft/class_4926$class_4931 net/minecraft/data/BlockStateVariantBuilder$Five + m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/util/List;)Lnet/minecraft/class_4926$class_4931; method_25814 func_240178_a_ + m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4926$class_4931; method_25813 func_240177_a_ + f Lnet/minecraft/class_2769; field_22878 field_240176_e_ + f Lnet/minecraft/class_2769; field_22877 field_240175_d_ + f Lnet/minecraft/class_2769; field_22876 field_240174_c_ + f Lnet/minecraft/class_2769; field_22875 field_240173_b_ + f Lnet/minecraft/class_2769; field_22874 field_240172_a_ +c net/minecraft/class_4926$class_4932 net/minecraft/data/BlockStateVariantBuilder$ITriFunction + m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; apply apply +c net/minecraft/class_4934 net/minecraft/data/VariantPropertyBuilder + m ()Ljava/lang/String; toString toString + m ([Lnet/minecraft/class_2769$class_4933;)Lnet/minecraft/class_4934; method_25821 func_240190_a_ + m ()I hashCode hashCode + m ()Lnet/minecraft/class_4934; method_25818 func_240187_a_ + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/String; method_25822 func_240191_b_ + m (Lnet/minecraft/class_2769$class_4933;)Ljava/lang/String; method_25823 func_240192_b_ + m (Lnet/minecraft/class_2769$class_4933;)Lnet/minecraft/class_4934; method_25819 func_240188_a_ + m (Lnet/minecraft/class_4934;)Lnet/minecraft/class_4934; method_25820 func_240189_a_ + f Lnet/minecraft/class_4934; field_22881 field_240184_a_ + f Ljava/util/Comparator; field_22882 field_240185_b_ + f Ljava/util/List; field_22883 field_240186_c_ +c net/minecraft/class_4935 net/minecraft/data/BlockModelDefinition + m (Lnet/minecraft/class_4935;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25827 mergeDefinitions + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4938$class_4939;)V method_25826 func_240196_a_ + m (Lnet/minecraft/class_4938;Ljava/lang/Object;)Lnet/minecraft/class_4935; method_25828 replaceInfoValue + m (Lcom/google/gson/JsonArray;Lnet/minecraft/class_4935;)V method_25825 func_240195_a_ + m ()Lcom/google/gson/JsonElement; method_25830 get + m ()Ljava/lang/Object; get get + m (Ljava/util/List;)Lcom/google/gson/JsonElement; method_25829 serialize + m ()Lnet/minecraft/class_4935; method_25824 getNewModelDefinition + f Ljava/util/Map; field_22884 infoToInfoFieldMap +c net/minecraft/class_4936 net/minecraft/data/BlockModelFields + m (Lnet/minecraft/class_4936$class_4937;)Lcom/google/gson/JsonElement; method_25833 func_240207_b_ + m (Lnet/minecraft/class_4936$class_4937;)Lcom/google/gson/JsonElement; method_25831 func_240205_a_ + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonElement; method_25832 func_240206_a_ + f Lnet/minecraft/class_4938; field_22886 field_240201_b_ + f Lnet/minecraft/class_4938; field_22885 field_240200_a_ + f Lnet/minecraft/class_4938; field_22889 field_240204_e_ + f Lnet/minecraft/class_4938; field_22888 field_240203_d_ + f Lnet/minecraft/class_4938; field_22887 field_240202_c_ +c net/minecraft/class_4936$class_4937 net/minecraft/data/BlockModelFields$Rotation + m ()[Lnet/minecraft/class_4936$class_4937; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4936$class_4937; valueOf valueOf + m (Lnet/minecraft/class_4936$class_4937;)I method_25834 func_240209_a_ + f Lnet/minecraft/class_4936$class_4937; field_22892 R180 + f Lnet/minecraft/class_4936$class_4937; field_22891 R90 + f Lnet/minecraft/class_4936$class_4937; field_22893 R270 + f [Lnet/minecraft/class_4936$class_4937; field_22895 $VALUES + f I field_22894 field_240208_e_ + f Lnet/minecraft/class_4936$class_4937; field_22890 R0 +c net/minecraft/class_4938 net/minecraft/data/BlockModeInfo + m (Lnet/minecraft/class_4938;)Ljava/util/function/Function; method_25837 func_240214_b_ + m (Lnet/minecraft/class_4938;)Ljava/lang/String; method_25835 func_240212_a_ + m (Ljava/lang/Object;)Lnet/minecraft/class_4938$class_4939; method_25836 getFieldInfo + m ()Ljava/lang/String; toString toString + f Ljava/util/function/Function; field_22897 value + f Ljava/lang/String; field_22896 property +c net/minecraft/class_4938$class_4939 net/minecraft/data/BlockModeInfo$Field + m (Lcom/google/gson/JsonObject;)V method_25838 serialize + m ()Ljava/lang/String; toString toString + f Ljava/lang/Object; field_22899 element + f Lnet/minecraft/class_4938; field_22898 field_240215_a_ +c net/minecraft/class_4940 net/minecraft/data/BlockModelWriter + m ()Ljava/lang/Object; get get + m ()Lcom/google/gson/JsonElement; method_25839 get + f Lnet/minecraft/class_2960; field_22900 field_240218_a_ +c net/minecraft/class_4941 net/minecraft/data/ModelsResourceUtil + m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_2960; method_25840 func_240219_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_2960; method_25845 func_240224_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_2960; method_25844 func_240223_a_ + m (Lnet/minecraft/class_2248;Ljava/lang/String;)Lnet/minecraft/class_2960; method_25843 func_240222_a_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2960; method_25842 func_240221_a_ + m (Lnet/minecraft/class_1792;Ljava/lang/String;)Lnet/minecraft/class_2960; method_25841 func_240220_a_ +c net/minecraft/class_4942 net/minecraft/data/ModelsUtil + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4944;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25846 func_240228_a_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25852 func_240234_a_ + m (Lnet/minecraft/class_2248;Ljava/lang/String;Lnet/minecraft/class_4944;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25853 func_240235_b_ + m (Ljava/util/Map;)Lcom/google/gson/JsonElement; method_25851 func_240233_a_ + m (Lnet/minecraft/class_4944;)Ljava/util/Map; method_25850 func_240232_a_ + m (Lnet/minecraft/class_2248;Ljava/lang/String;Lnet/minecraft/class_4944;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25847 func_240229_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2960;)V method_25849 func_240231_a_ + m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4945;Lnet/minecraft/class_2960;)V method_25848 func_240230_a_ + f Ljava/util/Optional; field_22901 field_240225_a_ + f Ljava/util/Set; field_22902 field_240226_b_ + f Ljava/util/Optional; field_22903 field_240227_c_ +c net/minecraft/class_4943 net/minecraft/data/StockModelShapes + m (I)Lnet/minecraft/class_4942; method_25858 func_240335_b_ + m (Ljava/lang/String;[Lnet/minecraft/class_4945;)Lnet/minecraft/class_4942; method_25859 makeItemModel + m ([Lnet/minecraft/class_4945;)Lnet/minecraft/class_4942; method_25857 makeEmptyModel + m (Ljava/lang/String;[Lnet/minecraft/class_4945;)Lnet/minecraft/class_4942; method_25856 makeBlockModel + m (I)[Lnet/minecraft/class_4942; method_25854 func_240331_a_ + m (Ljava/lang/String;Ljava/lang/String;[Lnet/minecraft/class_4945;)Lnet/minecraft/class_4942; method_25855 makeBlockModel + f Lnet/minecraft/class_4942; field_22941 TEMPLATE_SHULKER_BOX + f Lnet/minecraft/class_4942; field_22993 TEMPLATE_WALL_SIDE_TALL + f Lnet/minecraft/class_4942; field_22967 TEMPLATE_LANTERN + f Lnet/minecraft/class_4942; field_22949 TEMPLATE_CHORUS_FLOWER + f Lnet/minecraft/class_4942; field_22916 TEMPLATE_TRAPDOOR_BOTTOM + f Lnet/minecraft/class_4942; field_22974 CUBE_COLUMN + f Lnet/minecraft/class_4942; field_22937 TEMPLATE_SINGLE_FACE + f Lnet/minecraft/class_4942; field_22989 FENCE_SIDE + f Lnet/minecraft/class_4942; field_22964 TEMPLATE_FIRE_SIDE_ALT + f Lnet/minecraft/class_4942; field_22929 CARPET + f Lnet/minecraft/class_4942; field_22912 STAIRS + f Lnet/minecraft/class_4942; field_22942 CUBE + f Lnet/minecraft/class_4942; field_22982 BUTTON_PRESSED + f Lnet/minecraft/class_4942; field_22930 TEMPLATE_PISTON_HEAD + f Lnet/minecraft/class_4942; field_22905 TEMPLATE_FENCE_GATE_WALL_OPEN + f Lnet/minecraft/class_4942; field_22961 TEMPLATE_FARMLAND + f Lnet/minecraft/class_4942; field_22928 TEMPLATE_RAIL_RAISED_SW + f Lnet/minecraft/class_4942; field_22986 DOOR_TOP + f Lnet/minecraft/class_4942; field_22934 TEMPLATE_TWO_TURTLE_EGGS + f Lnet/minecraft/class_4942; field_22953 TEMPLATE_GLASS_PANE_POST + f Lnet/minecraft/class_4942; field_22920 TEMPLATE_ORIENTABLE_TRAPDOOR_OPEN + f Lnet/minecraft/class_4942; field_22978 ORIENTABLE + f Lnet/minecraft/class_4942; field_22957 TEMPLATE_ANVIL + f Lnet/minecraft/class_4942; field_22924 TINTED_FLOWER_POT_CROSS + f Lnet/minecraft/class_4942; field_22968 TEMPLATE_HANGING_LANTERN + f Lnet/minecraft/class_4942; field_23400 CUBE_DIRECTIONAL + f Lnet/minecraft/class_4942; field_22994 WALL_INVENTORY + f Lnet/minecraft/class_4942; field_22943 TEMPLATE_BED + f Lnet/minecraft/class_4942; field_22917 TEMPLATE_TRAPDOOR_OPEN + f Lnet/minecraft/class_4942; field_22950 TEMPLATE_DAYLIGHT_SENSOR + f Lnet/minecraft/class_4942; field_22975 CUBE_COLUMN_HORIZONTAL + f Lnet/minecraft/class_4942; field_22909 SLAB + f Lnet/minecraft/class_4942; field_22965 TEMPLATE_FIRE_UP + f [Lnet/minecraft/class_4942; field_22958 STEM_GROWTH_STAGES + f Lnet/minecraft/class_4942; field_22990 FENCE_INVENTORY + f Lnet/minecraft/class_4942; field_22938 GENERATED + f Lnet/minecraft/class_4942; field_22913 INNER_STAIRS + f Lnet/minecraft/class_4942; field_22946 CORAL_FAN + f Lnet/minecraft/class_4942; field_22925 RAIL_FLAT + f Lnet/minecraft/class_4942; field_22983 BUTTON_INVENTORY + f Lnet/minecraft/class_4942; field_22931 TEMPLATE_PISTON_HEAD_SHORT + f Lnet/minecraft/class_4942; field_22906 PRESSURE_PLATE_UP + f Lnet/minecraft/class_4942; field_22962 TEMPLATE_FIRE_FLOOR + f Lnet/minecraft/class_4942; field_22921 CROSS + f Lnet/minecraft/class_4942; field_22954 TEMPLATE_GLASS_PANE_SIDE + f Lnet/minecraft/class_4942; field_22979 ORIENTABLE_WITH_BOTTOM + f Lnet/minecraft/class_4942; field_22947 CORAL_WALL_FAN + f Lnet/minecraft/class_4942; field_22972 CUBE_ALL + f Lnet/minecraft/class_4942; field_22969 TEMPLATE_TORCH + f Lnet/minecraft/class_4942; field_22995 TEMPLATE_FENCE_GATE + f Lnet/minecraft/class_4942; field_22944 TEMPLATE_BANNER + f Lnet/minecraft/class_4942; field_22918 TEMPLATE_ORIENTABLE_TRAPDOOR_TOP + f Lnet/minecraft/class_4942; field_22951 TEMPLATE_GLASS_PANE_NOSIDE + f Lnet/minecraft/class_4942; field_22987 DOOR_TOP_RH + f Lnet/minecraft/class_4942; field_22935 TEMPLATE_THREE_TURTLE_EGGS + f Lnet/minecraft/class_4942; field_22910 SLAB_TOP + f Lnet/minecraft/class_4942; field_22966 TEMPLATE_FIRE_UP_ALT + f Lnet/minecraft/class_4942; field_22991 TEMPLATE_WALL_POST + f Lnet/minecraft/class_4942; field_22939 HANDHELD + f Lnet/minecraft/class_4942; field_22914 OUTER_STAIRS + f Lnet/minecraft/class_4942; field_22926 RAIL_CURVED + f Lnet/minecraft/class_4942; field_22932 TEMPLATE_SEAGRASS + f Lnet/minecraft/class_4942; field_22959 STEM_FRUIT + f Lnet/minecraft/class_4942; field_22984 DOOR_BOTTOM + f Lnet/minecraft/class_4942; field_22907 PRESSURE_PLATE_DOWN + f Lnet/minecraft/class_4942; field_22976 CUBE_TOP + f Lnet/minecraft/class_4942; field_22922 TINTED_CROSS + f Lnet/minecraft/class_4942; field_22970 TEMPLATE_TORCH_WALL + f Lnet/minecraft/class_4942; field_22955 TEMPLATE_GLASS_PANE_SIDE_ALT + f Lnet/minecraft/class_4942; field_22980 ORIENTABLE_VERTICAL + f Lnet/minecraft/class_4942; field_22996 TEMPLATE_FENCE_GATE_OPEN + f Lnet/minecraft/class_4942; field_22992 TEMPLATE_WALL_SIDE + f Lnet/minecraft/class_4942; field_22915 TEMPLATE_TRAPDOOR_TOP + f Lnet/minecraft/class_4942; field_22973 CUBE_MIRRORED_ALL + f Lnet/minecraft/class_4942; field_22948 TEMPLATE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_4942; field_22945 TEMPLATE_SKULL + f Lnet/minecraft/class_4942; field_22919 TEMPLATE_ORIENTABLE_TRAPDOOR_BOTTOM + f Lnet/minecraft/class_4942; field_22936 TEMPLATE_FOUR_TURTLE_EGGS + f Lnet/minecraft/class_4942; field_22963 TEMPLATE_FIRE_SIDE + f Lnet/minecraft/class_4942; field_22988 FENCE_POST + f Lnet/minecraft/class_4942; field_22911 LEAVES + f Lnet/minecraft/class_4942; field_22940 HANDHELD_ROD + f Lnet/minecraft/class_4942; field_23957 TEMPLATE_CAMPFIRE + f Lnet/minecraft/class_4942; field_22904 TEMPLATE_FENCE_GATE_WALL + f Lnet/minecraft/class_4942; field_22927 TEMPLATE_RAIL_RAISED_NE + f Lnet/minecraft/class_4942; field_22933 TEMPLATE_TURTLE_EGG + f Lnet/minecraft/class_4942; field_22985 DOOR_BOTTOM_RH + f Lnet/minecraft/class_4942; field_22960 CROP + f Lnet/minecraft/class_4942; field_22908 PARTICLE + f Lnet/minecraft/class_4942; field_22977 CUBE_BOTTOM_TOP + f Lnet/minecraft/class_4942; field_22952 TEMPLATE_GLASS_PANE_NOSIDE_ALT + f Lnet/minecraft/class_4942; field_22923 FLOWER_POT_CROSS + f Lnet/minecraft/class_4942; field_22971 TEMPLATE_PISTON + f Lnet/minecraft/class_4942; field_22981 BUTTON + f Lnet/minecraft/class_4942; field_22956 TEMPLATE_COMMAND_BLOCK +c net/minecraft/class_4944 net/minecraft/data/ModelTextures + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25902 func_240384_r_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25873 func_240354_b_ + m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_2960; method_25876 func_240357_c_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25904 func_240386_t_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25886 func_240367_e_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25900 func_240382_p_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25889 func_240370_g_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25882 func_240363_d_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25911 func_240340_B_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25899 func_240380_n_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25894 func_240375_j_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25869 func_240350_a_ + m (Lnet/minecraft/class_2248;Ljava/lang/String;)Lnet/minecraft/class_2960; method_25866 func_240347_a_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25897 func_240378_l_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25880 func_240361_c_ + m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_4944; method_25862 func_240343_a_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25890 func_240371_h_ + m (Lnet/minecraft/class_1792;Ljava/lang/String;)Lnet/minecraft/class_2960; method_25863 func_240344_a_ + m (Lnet/minecraft/class_4945;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25883 func_240364_d_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25887 func_240368_f_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25872 func_240353_b_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25893 func_240374_i_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25881 func_240362_d_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25909 func_240391_y_ + m (Lnet/minecraft/class_4945;)Lnet/minecraft/class_2960; method_25867 func_240348_a_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25905 func_240387_u_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25907 func_240389_w_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25884 func_240365_d_ + m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_4944; method_25871 func_240352_b_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25903 func_240385_s_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25878 func_240359_c_ + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25865 func_240346_a_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25891 func_240372_h_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25901 func_240383_q_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25898 func_240379_m_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_27168 func_240381_o_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25896 func_240377_k_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2960; method_25860 func_240341_C_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25875 func_240356_b_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_27167 func_240339_A_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25892 func_240373_i_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25910 func_240392_z_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25885 func_240366_e_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25888 func_240369_g_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25908 func_240390_x_ + m (Lnet/minecraft/class_4945;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25879 func_240360_c_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25877 func_240358_c_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25870 func_240351_a_ + m (Lnet/minecraft/class_4945;Lnet/minecraft/class_4945;)Lnet/minecraft/class_4944; method_25874 func_240355_b_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25895 func_240376_j_ + m ()Ljava/util/stream/Stream; method_25861 func_240342_a_ + m (Lnet/minecraft/class_4945;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25868 func_240349_a_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25906 func_240388_v_ + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25864 func_240345_a_ + f Ljava/util/Set; field_22998 field_240338_b_ + f Ljava/util/Map; field_22997 field_240337_a_ +c net/minecraft/class_4945 net/minecraft/data/StockTextureAliases + m ()Lnet/minecraft/class_4945; method_25913 getAlias + m (Ljava/lang/String;Lnet/minecraft/class_4945;)Lnet/minecraft/class_4945; method_27044 createTextureAlias + m ()Ljava/lang/String; toString toString + m ()Ljava/lang/String; method_25912 getName + m (Ljava/lang/String;)Lnet/minecraft/class_4945; method_27043 createTextureAlias + f Lnet/minecraft/class_4945; field_23035 UPPERSTEM + f Lnet/minecraft/class_4945; field_23014 BOTTOM + f Lnet/minecraft/class_4945; field_23015 TOP + f Lnet/minecraft/class_4945; field_23016 FRONT + f Lnet/minecraft/class_4945; field_23017 BACK + f Lnet/minecraft/class_4945; field_23018 SIDE + f Lnet/minecraft/class_4945; field_23030 PATTERN + f Lnet/minecraft/class_4945; field_23008 textureAlias + f Lnet/minecraft/class_4945; field_23031 PANE + f Lnet/minecraft/class_4945; field_23010 ALL + f Lnet/minecraft/class_4945; field_23032 EDGE + f Lnet/minecraft/class_4945; field_23011 TEXTURE + f Lnet/minecraft/class_4945; field_23033 FAN + f Ljava/lang/String; field_23007 name + f Lnet/minecraft/class_4945; field_23012 PARTICLE + f Lnet/minecraft/class_4945; field_23034 STEM + f Lnet/minecraft/class_4945; field_23013 END + f Lnet/minecraft/class_4945; field_23003 PLATFORM + f Lnet/minecraft/class_4945; field_23025 CROSS + f Lnet/minecraft/class_4945; field_23004 UNSTICKY + f Lnet/minecraft/class_4945; field_23026 PLANT + f Lnet/minecraft/class_4945; field_23005 TORCH + f Lnet/minecraft/class_4945; field_23027 WALL + f Lnet/minecraft/class_4945; field_23006 LAYER_ZERO + f Lnet/minecraft/class_4945; field_23028 RAIL + f Lnet/minecraft/class_4945; field_23958 LIT_LOG + f Lnet/minecraft/class_4945; field_23029 WOOL + f Lnet/minecraft/class_4945; field_23019 NORTH + f Lnet/minecraft/class_4945; field_23020 SOUTH + f Lnet/minecraft/class_4945; field_22999 CROP + f Lnet/minecraft/class_4945; field_23021 EAST + f Lnet/minecraft/class_4945; field_23000 DIRT + f Lnet/minecraft/class_4945; field_23022 WEST + f Lnet/minecraft/class_4945; field_23001 FIRE + f Lnet/minecraft/class_4945; field_23023 UP + f Lnet/minecraft/class_4945; field_23002 LANTERN + f Lnet/minecraft/class_4945; field_23024 DOWN +c net/minecraft/class_4946 net/minecraft/data/TexturedModel + m (Lnet/minecraft/class_2248;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25916 func_240459_a_ + m (Ljava/util/function/Function;Lnet/minecraft/class_4942;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4946; method_25919 func_240462_a_ + m (Ljava/util/function/Function;Lnet/minecraft/class_4942;)Lnet/minecraft/class_4946$class_4947; method_25918 func_240461_a_ + m (Lnet/minecraft/class_2248;Ljava/lang/String;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25915 func_240458_a_ + m ()Lnet/minecraft/class_4942; method_25914 func_240457_a_ + m ()Lnet/minecraft/class_4944; method_25921 func_240464_b_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4946; method_25920 func_240463_a_ + m (Ljava/util/function/Consumer;)Lnet/minecraft/class_4946; method_25917 func_240460_a_ + f Lnet/minecraft/class_4946$class_4947; field_23041 field_240439_f_ + f Lnet/minecraft/class_4944; field_23058 field_240455_v_ + f Lnet/minecraft/class_4946$class_4947; field_23040 field_240438_e_ + f Lnet/minecraft/class_4946$class_4947; field_23039 field_240437_d_ + f Lnet/minecraft/class_4942; field_23059 field_240456_w_ + f Lnet/minecraft/class_4946$class_4947; field_23038 field_240436_c_ + f Lnet/minecraft/class_4946$class_4947; field_23037 field_240435_b_ + f Lnet/minecraft/class_4946$class_4947; field_23036 field_240434_a_ + f Lnet/minecraft/class_4946$class_4947; field_23959 field_240454_u_ + f Lnet/minecraft/class_4946$class_4947; field_23057 field_240453_t_ + f Lnet/minecraft/class_4946$class_4947; field_23056 field_240452_s_ + f Lnet/minecraft/class_4946$class_4947; field_23055 field_240451_r_ + f Lnet/minecraft/class_4946$class_4947; field_23054 field_240450_q_ + f Lnet/minecraft/class_4946$class_4947; field_23051 field_240449_p_ + f Lnet/minecraft/class_4946$class_4947; field_23050 field_240448_o_ + f Lnet/minecraft/class_4946$class_4947; field_23049 field_240447_n_ + f Lnet/minecraft/class_4946$class_4947; field_23048 field_240446_m_ + f Lnet/minecraft/class_4946$class_4947; field_23047 field_240445_l_ + f Lnet/minecraft/class_4946$class_4947; field_23046 field_240444_k_ + f Lnet/minecraft/class_4946$class_4947; field_23045 field_240443_j_ + f Lnet/minecraft/class_4946$class_4947; field_23044 field_240442_i_ + f Lnet/minecraft/class_4946$class_4947; field_23043 field_240441_h_ + f Lnet/minecraft/class_4946$class_4947; field_23042 field_240440_g_ +c net/minecraft/class_4946$class_4947 net/minecraft/data/TexturedModel$ISupplier + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4946; get get + m (Lnet/minecraft/class_2248;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25923 func_240466_a_ + m (Ljava/util/function/Consumer;)Lnet/minecraft/class_4946$class_4947; method_25924 func_240467_a_ + m (Lnet/minecraft/class_2248;Ljava/lang/String;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25922 func_240465_a_ + m (Ljava/util/function/Consumer;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4946; method_25925 func_240468_a_ +c net/minecraft/class_2444 net/minecraft/data/IFinishedRecipe + m ()Lnet/minecraft/class_2960; method_10417 getID + m ()Lcom/google/gson/JsonObject; method_17799 getRecipeJson + m (Lcom/google/gson/JsonObject;)V method_10416 serialize + m ()Lcom/google/gson/JsonObject; method_10415 getAdvancementJson + m ()Lnet/minecraft/class_1865; method_17800 getSerializer + m ()Lnet/minecraft/class_2960; method_10418 getAdvancementID +c net/minecraft/class_2446 net/minecraft/data/RecipeProvider + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24481 shapedWoodenFence + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_3494;)V method_24477 shapelessPlanks + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24483 shapedWoodenPressurePlate + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24482 shapedWoodenFenceGate + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24479 shapelessWoodenButton + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24478 shapedBoat + m (Ljava/util/function/Consumer;Ljava/lang/String;Lnet/minecraft/class_3957;I)V method_17585 cookingRecipesForMethod + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_3494;)V method_24475 shapelessPlanksNew + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24480 shapedWoodenDoor + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24893 shapedColoredTerracotta + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24476 shapelessStrippedToPlanks + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24894 shapedColorConcretePowder + m (Lnet/minecraft/class_2408;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V method_10427 saveRecipeAdvancement + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24891 shapedGlassPane + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24890 shapedColoredGlass + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24892 shapedColoredPane + m (Ljava/util/function/Consumer;)V method_10419 registerRecipes + m (Ljava/util/Set;Lnet/minecraft/class_2408;Ljava/nio/file/Path;Lnet/minecraft/class_2444;)V method_10421 func_200410_a + m (Lnet/minecraft/class_2408;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V method_10425 saveRecipe + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2037$class_2039; method_10422 enteredBlock + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24888 shapedColoredBed + m ([Lnet/minecraft/class_2073;)Lnet/minecraft/class_2066$class_2068; method_10423 hasItem + m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2066$class_2068; method_10420 hasItem + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2066$class_2068; method_10426 hasItem + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24889 shapedBanner + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24885 shapedCarpet + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24887 shapedBed + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24886 shapelessColoredCarpet + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24883 shapedSign + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24486 shapedWoodenTrapdoor + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;)V method_29728 smithingReinforce + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24884 shapelessColoredWool + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24484 shapedWoodenSlab + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24485 shapedWoodenStairs + f Lnet/minecraft/class_2403; field_11373 generator + f Lcom/google/gson/Gson; field_11375 GSON + f Lorg/apache/logging/log4j/Logger; field_11374 LOGGER +c net/minecraft/class_2447 net/minecraft/data/ShapedRecipeBuilder + m (Ljava/lang/Character;Lnet/minecraft/class_3494;)Lnet/minecraft/class_2447; method_10433 key + m (Ljava/util/function/Consumer;)V method_10431 build + m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_2447; method_10429 addCriterion + m (Ljava/util/function/Consumer;Lnet/minecraft/class_2960;)V method_10430 build + m (Lnet/minecraft/class_1935;I)Lnet/minecraft/class_2447; method_10436 shapedRecipe + m (Ljava/lang/Character;Lnet/minecraft/class_1856;)Lnet/minecraft/class_2447; method_10428 key + m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_10438 build + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2447; method_10437 shapedRecipe + m (Lnet/minecraft/class_2960;)V method_10432 validate + m (Ljava/lang/String;)Lnet/minecraft/class_2447; method_10435 setGroup + m (Ljava/lang/Character;Lnet/minecraft/class_1935;)Lnet/minecraft/class_2447; method_10434 key + m (Ljava/lang/String;)Lnet/minecraft/class_2447; method_10439 patternLine + f Ljava/lang/String; field_11381 group + f Lnet/minecraft/class_1792; field_11380 result + f Lorg/apache/logging/log4j/Logger; field_11382 LOGGER + f Ljava/util/List; field_11377 pattern + f Ljava/util/Map; field_11376 key + f I field_11378 count + f Lnet/minecraft/class_161$class_162; field_11379 advancementBuilder +c net/minecraft/class_2447$class_2448 net/minecraft/data/ShapedRecipeBuilder$Result + f I field_11386 count + f Lnet/minecraft/class_1792; field_11383 result + f Lnet/minecraft/class_2960; field_11390 advancementId + f Ljava/util/Map; field_11388 key + f Lnet/minecraft/class_2447; field_11391 field_200444_a + f Ljava/lang/String; field_11387 group + f Lnet/minecraft/class_2960; field_11385 id + f Ljava/util/List; field_11384 pattern + f Lnet/minecraft/class_161$class_162; field_11389 advancementBuilder +c net/minecraft/class_2450 net/minecraft/data/ShapelessRecipeBuilder + m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2450; method_10446 addIngredient + m (Ljava/util/function/Consumer;Lnet/minecraft/class_2960;)V method_10443 build + m (Lnet/minecraft/class_1935;I)Lnet/minecraft/class_2450; method_10448 shapelessRecipe + m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_10450 build + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2450; method_10447 shapelessRecipe + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2450; method_10454 addIngredient + m (Ljava/util/function/Consumer;)V method_10444 build + m (Lnet/minecraft/class_1935;I)Lnet/minecraft/class_2450; method_10449 addIngredient + m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_2450; method_10442 addCriterion + m (Lnet/minecraft/class_2960;)V method_10445 validate + m (Lnet/minecraft/class_1856;)Lnet/minecraft/class_2450; method_10451 addIngredient + m (Lnet/minecraft/class_1856;I)Lnet/minecraft/class_2450; method_10453 addIngredient + m (Ljava/lang/String;)Lnet/minecraft/class_2450; method_10452 setGroup + f Lnet/minecraft/class_161$class_162; field_11393 advancementBuilder + f Ljava/lang/String; field_11398 group + f I field_11395 count + f Lorg/apache/logging/log4j/Logger; field_11397 LOGGER + f Ljava/util/List; field_11394 ingredients + f Lnet/minecraft/class_1792; field_11396 result +c net/minecraft/class_2450$class_2451 net/minecraft/data/ShapelessRecipeBuilder$Result + f Lnet/minecraft/class_161$class_162; field_11401 advancementBuilder + f Lnet/minecraft/class_1792; field_11403 result + f Ljava/util/List; field_11404 ingredients + f Ljava/lang/String; field_11399 group + f I field_11400 count + f Lnet/minecraft/class_2960; field_11402 id + f Lnet/minecraft/class_2960; field_11405 advancementId +c net/minecraft/class_2454 net/minecraft/data/CookingRecipeBuilder + m (Lnet/minecraft/class_2960;)V method_10471 validate + m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_2454; method_10469 addCriterion + m (Ljava/util/function/Consumer;)V method_10470 build + m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1935;FI)Lnet/minecraft/class_2454; method_17802 smeltingRecipe + m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_10472 build + m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1935;FILnet/minecraft/class_3957;)Lnet/minecraft/class_2454; method_17801 cookingRecipe + m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1935;FI)Lnet/minecraft/class_2454; method_10473 blastingRecipe + m (Ljava/util/function/Consumer;Lnet/minecraft/class_2960;)V method_10468 build + f Lnet/minecraft/class_1856; field_11418 ingredient + f Lnet/minecraft/class_3957; field_17599 recipeSerializer + f F field_11414 experience + f Lnet/minecraft/class_161$class_162; field_11416 advancementBuilder + f Lnet/minecraft/class_1792; field_11417 result + f I field_11415 cookingTime + f Ljava/lang/String; field_11419 group +c net/minecraft/class_2454$class_2455 net/minecraft/data/CookingRecipeBuilder$Result + f F field_11421 experience + f Ljava/lang/String; field_11426 group + f Lnet/minecraft/class_1856; field_11425 ingredient + f Lnet/minecraft/class_2960; field_11424 id + f Lnet/minecraft/class_2960; field_11427 advancementId + f Lnet/minecraft/class_1865; field_17600 serializer + f Lnet/minecraft/class_161$class_162; field_11423 advancementBuilder + f I field_11422 cookingTime + f Lnet/minecraft/class_1792; field_11428 result +c net/minecraft/class_3981 net/minecraft/data/SingleItemRecipeBuilder + m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1935;)Lnet/minecraft/class_3981; method_17968 stonecuttingRecipe + m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_17971 build + m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1935;I)Lnet/minecraft/class_3981; method_17969 stonecuttingRecipe + m (Ljava/util/function/Consumer;Lnet/minecraft/class_2960;)V method_17972 build + m (Lnet/minecraft/class_2960;)V method_17973 validate + m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_3981; method_17970 addCriterion + f Lnet/minecraft/class_1792; field_17690 result + f Lnet/minecraft/class_1865; field_17695 serializer + f Lnet/minecraft/class_161$class_162; field_17693 advancementBuilder + f Ljava/lang/String; field_17694 group + f Lnet/minecraft/class_1856; field_17691 ingredient + f I field_17692 count +c net/minecraft/class_3981$class_3982 net/minecraft/data/SingleItemRecipeBuilder$Result + f Lnet/minecraft/class_1865; field_17703 serializer + f Lnet/minecraft/class_161$class_162; field_17701 advancementBuilder + f Lnet/minecraft/class_2960; field_17702 advancementId + f Lnet/minecraft/class_1792; field_17699 result + f I field_17700 count + f Lnet/minecraft/class_2960; field_17696 id + f Ljava/lang/String; field_17697 group + f Lnet/minecraft/class_1856; field_17698 ingredient +c net/minecraft/class_2456 net/minecraft/data/CustomRecipeBuilder + m (Lnet/minecraft/class_1866;)Lnet/minecraft/class_2456; method_10476 customRecipe + m (Lnet/minecraft/class_2456;)Lnet/minecraft/class_1866; method_10474 func_218655_a + m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_10475 build + f Lnet/minecraft/class_1866; field_11429 serializer +c net/minecraft/class_2456$1 net/minecraft/data/CustomRecipeBuilder$1 + f Ljava/lang/String; field_11430 field_200460_a + f Lnet/minecraft/class_2456; field_11431 field_200461_b +c net/minecraft/class_5377 net/minecraft/data/SmithingRecipeBuilder + m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_29731 build + m (Ljava/util/function/Consumer;Lnet/minecraft/class_2960;)V method_29732 build + m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1856;Lnet/minecraft/class_1792;)Lnet/minecraft/class_5377; method_29729 smithingRecipe + m (Lnet/minecraft/class_2960;)V method_29733 validate + m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_5377; method_29730 addCriterion + f Lnet/minecraft/class_161$class_162; field_25494 advancementBuilder + f Lnet/minecraft/class_1792; field_25493 output + f Lnet/minecraft/class_1865; field_25495 serializer + f Lnet/minecraft/class_1856; field_25491 base + f Lnet/minecraft/class_1856; field_25492 addition +c net/minecraft/class_5377$class_5378 net/minecraft/data/SmithingRecipeBuilder$Result + f Lnet/minecraft/class_1856; field_25497 base + f Lnet/minecraft/class_1856; field_25498 addition + f Lnet/minecraft/class_2960; field_25501 advancementId + f Lnet/minecraft/class_161$class_162; field_25500 advancementBuilder + f Lnet/minecraft/class_2960; field_25496 id + f Lnet/minecraft/class_1792; field_25499 output + f Lnet/minecraft/class_1865; field_25502 serializer +c net/minecraft/class_2461 net/minecraft/data/NBTToSNBTConverter + m (Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/lang/String; method_10496 getFileName + m (Ljava/nio/file/Path;Ljava/lang/String;Ljava/nio/file/Path;)Ljava/nio/file/Path; method_10493 convertNBTToSNBT + m (Ljava/nio/file/Path;)Z method_10495 func_200416_a + m (Ljava/nio/file/Path;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_10494 func_200415_a + f Lorg/apache/logging/log4j/Logger; field_11450 LOGGER + f Lnet/minecraft/class_2403; field_11449 generator +c net/minecraft/class_2463 net/minecraft/data/SNBTToNBTConverter + m (Ljava/util/List;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_22145 func_229447_a_ + m (Lnet/minecraft/class_2408;Ljava/nio/file/Path;Lnet/minecraft/class_2463$class_4511;)V method_10498 func_229445_a_ + m (Lnet/minecraft/class_2463$class_4460;)Lnet/minecraft/class_2463; method_21672 addTransformer + m (Ljava/nio/file/Path;Ljava/lang/String;)Lnet/minecraft/class_2463$class_4511; method_22144 convertSNBTToNBT + m (Ljava/lang/String;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_21673 snbtToNBT + m (Lnet/minecraft/class_2408;Lnet/minecraft/class_2463$class_4511;Ljava/nio/file/Path;)V method_10497 writeStructureSNBT + m (Ljava/nio/file/Path;Ljava/nio/file/Path;)Lnet/minecraft/class_2463$class_4511; method_22146 func_229448_b_ + m (Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/lang/String; method_10500 getFileName + m (Ljava/nio/file/Path;)Z method_10499 func_200422_a + f Ljava/util/List; field_20309 transformers + f Lorg/apache/logging/log4j/Logger; field_11454 LOGGER + f Ljava/nio/file/Path; field_24615 EMPTY + f Lnet/minecraft/class_2403; field_11453 generator +c net/minecraft/class_2463$class_4460 net/minecraft/data/SNBTToNBTConverter$ITransformer + m (Ljava/lang/String;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_21674 func_225371_a +c net/minecraft/class_2463$class_4511 net/minecraft/data/SNBTToNBTConverter$TaskResult + m (Lnet/minecraft/class_2463$class_4511;)Ljava/lang/String; method_22148 func_240516_c_ + m (Lnet/minecraft/class_2463$class_4511;)[B method_22149 func_240517_d_ + m (Lnet/minecraft/class_2463$class_4511;)Ljava/lang/String; method_22147 func_229453_b_ + m (Lnet/minecraft/class_2463$class_4511;)Ljava/lang/String; method_28117 func_229452_a_ + f Ljava/lang/String; field_20538 fileName + f Ljava/lang/String; field_20540 bytesHash + f Ljava/lang/String; field_24616 field_240515_c_ + f [B field_20539 nbtBytes +c net/minecraft/class_3843 net/minecraft/data/StructureUpdater + m (Ljava/lang/String;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_16878 updateSNBT + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_16880 addDataVersion + f Lorg/apache/logging/log4j/Logger; field_24617 LOGGER +c net/minecraft/class_2466 net/minecraft/data/BlockTagsProvider +c net/minecraft/class_2467 net/minecraft/data/EntityTypeTagsProvider +c net/minecraft/class_2469 net/minecraft/data/FluidTagsProvider +c net/minecraft/class_2471 net/minecraft/data/ItemTagsProvider + m (Lnet/minecraft/class_3494$class_5123;Lnet/minecraft/class_3494$class_5123;)V method_10505 copy + f Ljava/util/function/Function; field_23783 blockTagResolver +c net/minecraft/class_2474 net/minecraft/data/TagsProvider + m (Lnet/minecraft/class_2960;)Ljava/lang/Object; method_27049 func_240527_c_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494$class_3495; method_27170 func_240526_b_ + m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_2474$class_5124; method_10512 getOrCreateBuilder + m (Lnet/minecraft/class_2960;)Ljava/nio/file/Path; method_10510 makePath + m (Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/class_2408;Lnet/minecraft/class_2960;Lnet/minecraft/class_3494$class_3495;)V method_27046 func_240524_a_ + m (Lnet/minecraft/class_3494;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_27045 func_240523_a_ + m ()V method_10514 registerTags + m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_3494$class_3495; method_27169 createBuilderIfAbsent + f Lorg/apache/logging/log4j/Logger; field_11479 LOGGER + f Lcom/google/gson/Gson; field_11480 GSON + f Lnet/minecraft/class_2378; field_11482 registry + f Lnet/minecraft/class_2403; field_11483 generator + f Ljava/util/Map; field_11481 tagToBuilder +c net/minecraft/class_2474$1 net/minecraft/data/TagsProvider$1 +c net/minecraft/class_2474$class_5124 net/minecraft/data/TagsProvider$Builder + m ([Ljava/lang/Object;)Lnet/minecraft/class_2474$class_5124; method_26795 add + m (Lnet/minecraft/class_2960;)V method_27171 func_240533_a_ + m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_2474$class_5124; method_26792 addTag + m (Ljava/lang/Object;)Lnet/minecraft/class_2474$class_5124; method_26793 addItemEntry + f Ljava/lang/String; field_23962 id + f Lnet/minecraft/class_3494$class_3495; field_23960 builder + f Lnet/minecraft/class_2378; field_23961 registry +c net/minecraft/class_5174 net/minecraft/world/gen/feature/structure/BastionRemnantsBridgePools + m ()V method_27198 func_236254_a_ +c net/minecraft/class_5177 net/minecraft/world/gen/feature/structure/BastionRemnantsStablesPools + m ()V method_27199 func_236255_a_ +c net/minecraft/class_5178 net/minecraft/world/gen/feature/structure/BastionRemnantsMainPools + m ()V method_27200 func_236256_a_ +c net/minecraft/class_5179 net/minecraft/world/gen/feature/structure/BastionRemnantsPieces + m ()V method_27201 func_236258_a_ + f Lnet/minecraft/class_3785; field_25941 field_243686_a +c net/minecraft/class_5181 net/minecraft/world/gen/feature/structure/BastionRemnantsMobsPools + m ()V method_27203 func_236261_a_ +c net/minecraft/class_5182 net/minecraft/world/gen/feature/structure/BastionRemnantsTreasurePools + m ()V method_27204 func_236262_a_ +c net/minecraft/class_3864 net/minecraft/world/biome/DefaultBiomeFeatures + m (Lnet/minecraft/class_5485$class_5495;)V method_16958 withMountainEdgeTrees + m (Lnet/minecraft/class_5485$class_5495;)V method_17010 withDisks + m (Lnet/minecraft/class_5485$class_5495;)V method_16981 withNoiseTallGrass + m (Lnet/minecraft/class_5485$class_5495;)V method_17012 withForestRocks + m (Lnet/minecraft/class_5483$class_5496;)V method_30579 withBats + m (Lnet/minecraft/class_5485$class_5495;)V method_28439 withDebrisOre + m (Lnet/minecraft/class_5485$class_5495;)V method_16960 withJungleEdgeTrees + m (Lnet/minecraft/class_5485$class_5495;)V method_16962 withSnowySpruces + m (Lnet/minecraft/class_5485$class_5495;)V method_17014 withChanceBerries + m (Lnet/minecraft/class_5485$class_5495;)V method_17016 withLightBambooVegetation + m (Lnet/minecraft/class_5483$class_5496;)V method_30583 withDesertMobs + m (Lnet/minecraft/class_5485$class_5495;)V method_16984 withSugarCaneAndPumpkins + m (Lnet/minecraft/class_5485$class_5495;)V method_16966 withTallGrass + m (Lnet/minecraft/class_5485$class_5495;)V method_16968 withSavannaGrass + m (Lnet/minecraft/class_5485$class_5495;)V method_16986 withMelonPatchesAndVines + m (Lnet/minecraft/class_5485$class_5495;)V method_17018 withTaigaVegetation + m (Lnet/minecraft/class_5485$class_5495;)V method_28437 withBadlandsStructures + m (Lnet/minecraft/class_5485$class_5495;)V method_17020 withBirchTrees + m (Lnet/minecraft/class_5485$class_5495;)V method_28441 withOceanStructures + m (Lnet/minecraft/class_5483$class_5496;)V method_30680 withSpawnsWithHorseAndDonkey + m (Lnet/minecraft/class_5485$class_5495;)V method_16983 withCavesAndCanyons + m (Lnet/minecraft/class_5485$class_5495;)V method_16989 withDesertWells + m (Lnet/minecraft/class_5485$class_5495;)V method_16971 withForestGrass + m (Lnet/minecraft/class_5485$class_5495;)V method_17021 withForestBirchTrees + m (Lnet/minecraft/class_5485$class_5495;)V method_17002 withLavaAndWaterLakes + m (Lnet/minecraft/class_5485$class_5495;)V method_16973 withMushroomBiomeVegetation + m (Lnet/minecraft/class_5485$class_5495;)V method_17004 withMonsterRoom + m (Lnet/minecraft/class_5485$class_5495;)V method_16975 withDesertDeadBushes + m (Lnet/minecraft/class_5485$class_5495;)V method_16991 withColdKelp + m (Lnet/minecraft/class_5483$class_5496;)V method_30587 withEndermen + m (Lnet/minecraft/class_5485$class_5495;)V method_16997 withIcebergs + m (Lnet/minecraft/class_5485$class_5495;)V method_16995 withWarmKelp + m (Lnet/minecraft/class_5485$class_5495;)V method_17006 withOverworldOres + m (Lnet/minecraft/class_5485$class_5495;)V method_16977 withDefaultFlowers + m (Lnet/minecraft/class_5485$class_5495;)V method_17008 withEmeraldOre + m (Lnet/minecraft/class_5485$class_5495;)V method_16999 withFrozenTopLayer + m (Lnet/minecraft/class_5485$class_5495;)V method_16979 withBadlandsGrass + m (Lnet/minecraft/class_5485$class_5495;)V method_17024 withShatteredSavannaTrees + m (Lnet/minecraft/class_5485$class_5495;)V method_17011 withClayDisks + m (Lnet/minecraft/class_5485$class_5495;)V method_24382 withCommonNetherBlocks + m (Lnet/minecraft/class_5485$class_5495;)V method_16982 withNormalMushroomGeneration + m (Lnet/minecraft/class_5483$class_5496;)V method_30580 withPassiveMobs + m (Lnet/minecraft/class_5485$class_5495;)V method_16959 withJungleTrees + m (Lnet/minecraft/class_5485$class_5495;)V method_16961 withBadlandsOakTrees + m (Lnet/minecraft/class_5485$class_5495;)V method_17013 withLargeFern + m (Lnet/minecraft/class_5485$class_5495;)V method_17015 withSparseBerries + m (Lnet/minecraft/class_5483$class_5496;)V method_30582 withSnowyBiomeMobs + m (Lnet/minecraft/class_5485$class_5495;)V method_16965 withJungleGrass + m (Lnet/minecraft/class_5483$class_5496;)V method_30585 withMooshroomsAndBats + m (Lnet/minecraft/class_5485$class_5495;)V method_16967 withNormalGrassPatch + m (Lnet/minecraft/class_5485$class_5495;)V method_17017 withBambooVegetation + m (Lnet/minecraft/class_5485$class_5495;)V method_17019 withTreesInWater + m (Lnet/minecraft/class_5483$class_5496;)V method_30581 withBatsAndHostiles + m (Lnet/minecraft/class_5485$class_5495;)V method_16987 withDesertVegetation + m (Lnet/minecraft/class_5485$class_5495;)V method_16985 withBadlandsVegetation + m (Lnet/minecraft/class_5485$class_5495;)V method_28440 withStrongholdAndMineshaft + m (Lnet/minecraft/class_5483$class_5496;III)V method_30578 withHostileMobs + m (Lnet/minecraft/class_5485$class_5495;)V method_16969 withBadlandsGrassAndBush + m (Lnet/minecraft/class_5483$class_5496;III)V method_30679 withOceanMobs + m (Lnet/minecraft/class_5485$class_5495;)V method_16970 withAllForestFlowerGeneration + m (Lnet/minecraft/class_5485$class_5495;)V method_16972 withSwampVegetation + m (Lnet/minecraft/class_5485$class_5495;)V method_17022 withTallBirches + m (Lnet/minecraft/class_5485$class_5495;)V method_17000 withOceanCavesAndCanyons + m (Lnet/minecraft/class_5485$class_5495;)V method_16988 withSwampSugarcaneAndPumpkin + m (Lnet/minecraft/class_5485$class_5495;)V method_17003 withLavaLakes + m (Lnet/minecraft/class_5483$class_5496;)V method_30586 withSpawnsWithExtraChickens + m (Lnet/minecraft/class_5485$class_5495;)V method_16992 withSimpleSeagrass + m (Lnet/minecraft/class_5485$class_5495;)V method_16990 withFossils + m (Lnet/minecraft/class_5485$class_5495;)V method_16974 withPlainGrassVegetation + m (Lnet/minecraft/class_5485$class_5495;)V method_16976 withGiantTaigaGrassVegetation + m (Lnet/minecraft/class_5485$class_5495;)V method_16996 withLavaAndWaterSprings + m (Lnet/minecraft/class_5485$class_5495;)V method_17005 withCommonOverworldBlocks + m (Lnet/minecraft/class_5485$class_5495;)V method_17007 withExtraGoldOre + m (Lnet/minecraft/class_5485$class_5495;)V method_16978 withWarmFlowers + m (Lnet/minecraft/class_5485$class_5495;)V method_17023 withSavannaTrees + m (Lnet/minecraft/class_5485$class_5495;)V method_16980 withTaigaGrassVegetation + m (Lnet/minecraft/class_5485$class_5495;)V method_16957 withMountainTrees + m (Lnet/minecraft/class_5483$class_5496;II)V method_30678 withWarmOceanMobs + m (Lnet/minecraft/class_5485$class_5495;)V method_17009 withInfestedStone + m (Lnet/minecraft/class_5485$class_5495;)V method_16998 withBlueIce +c net/minecraft/class_5463 net/minecraft/world/gen/carver/ConfiguredCarvers + m (Ljava/lang/String;Lnet/minecraft/class_2922;)Lnet/minecraft/class_2922; method_30588 func_243773_a + f Lnet/minecraft/class_2922; field_25945 field_243770_d + f Lnet/minecraft/class_2922; field_25944 field_243769_c + f Lnet/minecraft/class_2922; field_25942 field_243767_a + f Lnet/minecraft/class_2922; field_25943 field_243768_b + f Lnet/minecraft/class_2922; field_25946 field_243771_e + f Lnet/minecraft/class_2922; field_25947 field_243772_f +c net/minecraft/class_3868 net/minecraft/world/gen/feature/structure/DesertVillagePools + m ()V method_17037 init + f Lnet/minecraft/class_3785; field_25948 field_243774_a +c net/minecraft/class_5464 net/minecraft/world/gen/feature/Features + m ()Lnet/minecraft/class_2975; method_30598 func_243976_i + m ()Lnet/minecraft/class_2975; method_30591 func_243969_b + m ()Lnet/minecraft/class_2975; method_30589 func_243967_a + m ()Lnet/minecraft/class_2975; method_30593 func_243971_d + m ()Lnet/minecraft/class_2975; method_30592 func_243970_c + m (Ljava/lang/String;Lnet/minecraft/class_2975;)Lnet/minecraft/class_2975; method_30590 register + m ()Lnet/minecraft/class_2975; method_30595 func_243973_f + m ()Lnet/minecraft/class_2975; method_30594 func_243972_e + m ()Lnet/minecraft/class_2975; method_30597 func_243975_h + m ()Lnet/minecraft/class_2975; method_30596 func_243974_g + f Lnet/minecraft/class_2975; field_26111 FOREST_FLOWER_TREES + f Lnet/minecraft/class_2975; field_26131 NETHER_SPROUTS + f Lnet/minecraft/class_2975; field_25981 PATCH_MELON + f Lnet/minecraft/class_2975; field_25974 FOSSIL + f Lnet/minecraft/class_2975; field_25951 SEA_PICKLE + f Lnet/minecraft/class_2975; field_26085 TREES_GIANT_SPRUCE + f Lnet/minecraft/class_2975; field_26059 ORE_MAGMA + f Lnet/minecraft/class_2975; field_26040 END_SPIKE + f Lnet/minecraft/class_2975; field_26096 FANCY_OAK_BEES_002 + f Lnet/minecraft/class_2975; field_25959 KELP_WARM + f Lnet/minecraft/class_2975; field_26067 ORE_DIRT + f Lnet/minecraft/class_2975; field_26050 SWAMP_TREE + f Lnet/minecraft/class_2975; field_26022 PATCH_BERRY_BUSH + f Lnet/minecraft/class_2975; field_26034 HUGE_BROWN_MUSHROOM + f Lnet/minecraft/class_2975; field_26007 SPRING_OPEN + f Lnet/minecraft/class_2975; field_26139 SEAGRASS_DEEP + f Lnet/minecraft/class_2975; field_25990 PATCH_CACTUS_DESERT + f Lnet/minecraft/class_2975; field_26043 JUNGLE_TREE + f Lnet/minecraft/class_2975; field_26015 PATCH_SOUL_FIRE + f Lnet/minecraft/class_2975; field_25998 BROWN_MUSHROOM_NORMAL + f Lnet/minecraft/class_2975; field_26124 LARGE_BASALT_COLUMNS + f Lnet/minecraft/class_2975; field_26104 FLOWER_PLAIN + f Lnet/minecraft/class_2975; field_25967 DISK_GRAVEL + f Lnet/minecraft/class_2975; field_26075 ORE_GOLD + f Lnet/minecraft/class_2975; field_26110 WARM_OCEAN_VEGETATION + f Lnet/minecraft/class_2975; field_25980 PATCH_DEAD_BUSH_BADLANDS + f Lnet/minecraft/class_2975; field_26130 WARPED_FOREST_VEGETATION + f Lnet/minecraft/class_2975; field_26028 ORE_DEBRIS_LARGE + f Lnet/minecraft/class_2975; field_25973 DESERT_WELL + f Lnet/minecraft/class_2975; field_26117 TREES_MOUNTAIN + f Lnet/minecraft/class_2975; field_25989 PATCH_CACTUS + f Lnet/minecraft/class_2975; field_26138 SEAGRASS_RIVER + f Lnet/minecraft/class_2975; field_26095 FANCY_OAK_BEES_0002 + f Lnet/minecraft/class_2975; field_25958 KELP_COLD + f Lnet/minecraft/class_2975; field_26066 ORE_BLACKSTONE + f Lnet/minecraft/class_2975; field_26049 SUPER_BIRCH_BEES_0002 + f Lnet/minecraft/class_2975; field_26021 PATCH_TAIGA_GRASS + f Lnet/minecraft/class_2975; field_25966 DISK_CLAY + f Lnet/minecraft/class_2975; field_26074 ORE_GOLD_EXTRA + f Lnet/minecraft/class_2975; field_26033 WARPED_FUNGI_PLANTED + f Lnet/minecraft/class_2975; field_26006 SPRING_CLOSED_DOUBLE + f Lnet/minecraft/class_2975; field_26042 PINE + f Lnet/minecraft/class_2975; field_26014 PATCH_FIRE + f Lnet/minecraft/class_2975; field_25997 RED_MUSHROOM_NETHER + f Lnet/minecraft/class_2975; field_26103 FLOWER_SWAMP + f Lnet/minecraft/class_2975; field_26123 SMALL_BASALT_COLUMNS + f Lnet/minecraft/class_2975; field_25983 PATCH_BERRY_DECORATED + f Lnet/minecraft/class_2975; field_26087 TREES_JUNGLE + f Lnet/minecraft/class_2975; field_26061 ORE_GOLD_DELTAS + f Lnet/minecraft/class_2975; field_25953 ICE_PATCH + f Lnet/minecraft/class_2975; field_26044 FANCY_OAK + f Lnet/minecraft/class_2975; field_26016 PATCH_BROWN_MUSHROOM + f Lnet/minecraft/class_2975; field_26069 ORE_GRANITE + f Lnet/minecraft/class_2975; field_25961 BAMBOO_LIGHT + f Lnet/minecraft/class_2975; field_26052 OAK_BEES_0002 + f Lnet/minecraft/class_2975; field_26024 PATCH_GRASS_FOREST + f Lnet/minecraft/class_2975; field_26133 WEEPING_VINES + f Lnet/minecraft/class_2975; field_26113 TREES_SHATTERED_SAVANNA + f Lnet/minecraft/class_2975; field_26036 OAK + f Lnet/minecraft/class_2975; field_26009 PILE_HAY + f Lnet/minecraft/class_2975; field_25949 SEAGRASS_WARM + f Lnet/minecraft/class_2975; field_25992 PATCH_SUGAR_CANE_SWAMP + f Lnet/minecraft/class_2975; field_26098 OAK_BADLANDS + f Lnet/minecraft/class_2975; field_26118 END_GATEWAY_DELAYED + f Lnet/minecraft/class_2975; field_26000 BROWN_MUSHROOM_TAIGA + f Lnet/minecraft/class_2975; field_26106 FOREST_FLOWER_VEGETATION_COMMON + f Lnet/minecraft/class_2975; field_25976 PATCH_GRASS_TAIGA + f Lnet/minecraft/class_2975; field_26126 BLACKSTONE_BLOBS + f Lnet/minecraft/class_2975; field_26077 ORE_DIAMOND + f Lnet/minecraft/class_2975; field_25969 FREEZE_TOP_LAYER + f Lnet/minecraft/class_2975; field_26132 TWISTING_VINES + f Lnet/minecraft/class_2975; field_26112 TAIGA_VEGETATION + f Lnet/minecraft/class_2975; field_25982 PATCH_BERRY_SPARSE + f Lnet/minecraft/class_2975; field_26002 SPRING_LAVA_DOUBLE + f Lnet/minecraft/class_2975; field_26086 TREES_GIANT + f Lnet/minecraft/class_2975; field_26060 ORE_SOUL_SAND + f Lnet/minecraft/class_2975; field_25952 ICE_SPIKE + f Lcom/google/common/collect/ImmutableList; field_26090 FOREST_FLOWER_VEGETATION_LIST + f Lnet/minecraft/class_2975; field_26068 ORE_GRAVEL + f Lnet/minecraft/class_2975; field_25960 BLUE_ICE + f Lnet/minecraft/class_2975; field_26051 JUNGLE_BUSH + f Lnet/minecraft/class_2975; field_26023 PATCH_GRASS_PLAIN + f Lnet/minecraft/class_2975; field_26035 HUGE_RED_MUSHROOM + f Lnet/minecraft/class_2975; field_26008 SPRING_WATER + f Lnet/minecraft/class_2975; field_26140 SEAGRASS_SWAMP + f Lnet/minecraft/class_2975; field_25991 PATCH_CACTUS_DECORATED + f Lnet/minecraft/class_2975; field_26091 END_GATEWAY + f Lnet/minecraft/class_2975; field_26097 FANCY_OAK_BEES_005 + f Lnet/minecraft/class_2975; field_25999 RED_MUSHROOM_NORMAL + f Lnet/minecraft/class_2975; field_26125 BASALT_BLOBS + f Lnet/minecraft/class_2975; field_26105 FLOWER_PLAIN_DECORATED + f Lnet/minecraft/class_2975; field_26076 ORE_REDSTONE + f Lnet/minecraft/class_2975; field_25968 DISK_SAND + f Lnet/minecraft/class_2975; field_25955 SEAGRASS_SIMPLE + f Lnet/minecraft/class_2975; field_26089 MUSHROOM_FIELD_VEGETATION + f Lnet/minecraft/class_2975; field_26063 ORE_GOLD_NETHER + f Lnet/minecraft/class_2975; field_26046 MEGA_JUNGLE_TREE + f Lnet/minecraft/class_2975; field_26018 PATCH_CRIMSON_ROOTS + f Lnet/minecraft/class_2975; field_26001 RED_MUSHROOM_TAIGA + f Lnet/minecraft/class_2975; field_26054 OAK_BEES_005 + f Lnet/minecraft/class_2975; field_26026 PATCH_GRASS_SAVANNA + f Lnet/minecraft/class_2975; field_26030 CRIMSON_FUNGI + f Lnet/minecraft/class_2975; field_26003 SPRING_LAVA + f Lnet/minecraft/class_2975; field_26115 BIRCH_TALL + f Lnet/minecraft/class_2975; field_26135 SEAGRASS_COLD + f Lnet/minecraft/class_2975; field_25985 PATCH_TALL_GRASS_2 + f Lnet/minecraft/class_2975; field_25994 PATCH_SUGAR_CANE_BADLANDS + f Lnet/minecraft/class_2975; field_26120 END_ISLAND + f Lnet/minecraft/class_2975; field_26100 FLOWER_WARM + f Lnet/minecraft/class_2975; field_25963 VINES + f Lnet/minecraft/class_2975; field_26071 ORE_ANDESITE + f Lnet/minecraft/class_2975; field_25971 VOID_START_PLATFORM + f Lnet/minecraft/class_2975; field_26079 ORE_INFESTED + f Lnet/minecraft/class_2975; field_26082 BIRCH_OTHER + f Lnet/minecraft/class_2975; field_26056 RED_MUSHROOM_GIANT + f Lnet/minecraft/class_2975; field_26038 BIRCH + f Lnet/minecraft/class_2975; field_26011 PILE_SNOW + f Lnet/minecraft/class_2975; field_25954 FOREST_ROCK + f Lnet/minecraft/class_2975; field_26088 BAMBOO_VEGETATION + f Lnet/minecraft/class_2975; field_26062 ORE_QUARTZ_DELTAS + f Lnet/minecraft/class_2975; field_26045 JUNGLE_TREE_NO_VINE + f Lnet/minecraft/class_2975; field_26017 PATCH_RED_MUSHROOM + f Lnet/minecraft/class_2975; field_26053 OAK_BEES_002 + f Lnet/minecraft/class_2975; field_26025 PATCH_GRASS_BADLANDS + f Lnet/minecraft/class_2975; field_26029 ORE_DEBRIS_SMALL + f Lnet/minecraft/class_2975; field_26114 TREES_SAVANNA + f Lnet/minecraft/class_2975; field_25984 PATCH_WATERLILLY + f Lnet/minecraft/class_2975; field_26134 BASALT_PILLAR + f Lnet/minecraft/class_2975; field_26037 DARK_OAK + f Lnet/minecraft/class_2975; field_26010 PILE_MELON + f Lnet/minecraft/class_2975; field_25993 PATCH_SUGAR_CANE_DESERT + f Lnet/minecraft/class_2975; field_26099 SPRUCE_SNOWY + f Lnet/minecraft/class_2975; field_26119 CHORUS_PLANT + f Lnet/minecraft/class_2975; field_25962 BAMBOO + f Lnet/minecraft/class_2975; field_26070 ORE_DIORITE + f Lnet/minecraft/class_2975; field_26107 FOREST_FLOWER_VEGETATION + f Lnet/minecraft/class_2975; field_26127 GLOWSTONE_EXTRA + f Lnet/minecraft/class_2975; field_25977 PATCH_GRASS_JUNGLE + f Lnet/minecraft/class_2975; field_25970 BONUS_CHEST + f Lnet/minecraft/class_2975; field_26078 ORE_LAPIS + f Lnet/minecraft/class_2975; field_26081 TREES_WATER + f Lnet/minecraft/class_2975; field_26048 MEGA_PINE + f Lnet/minecraft/class_2975; field_26020 PATCH_PUMPKIN + f Lnet/minecraft/class_2975; field_26129 CRIMSON_FOREST_VEGETATION + f Lnet/minecraft/class_2975; field_26109 DARK_FOREST_VEGETATION_RED + f Lnet/minecraft/class_2975; field_25979 PATCH_DEAD_BUSH + f Lnet/minecraft/class_2975; field_26137 SEAGRASS_NORMAL + f Lnet/minecraft/class_2975; field_26116 TREES_MOUNTAIN_EDGE + f Lnet/minecraft/class_2975; field_25988 PATCH_LARGE_FERN + f Lnet/minecraft/class_2975; field_26094 BIRCH_BEES_005 + f Lnet/minecraft/class_2975; field_26065 ORE_GRAVEL_NETHER + f Lnet/minecraft/class_2975; field_25957 ICEBERG_BLUE + f Lnet/minecraft/class_2975; field_26102 FLOWER_FOREST + f Lnet/minecraft/class_2975; field_26122 DELTA + f Lnet/minecraft/class_2975; field_26073 ORE_IRON + f Lnet/minecraft/class_2975; field_25965 LAKE_LAVA + f Lnet/minecraft/class_2975; field_25975 PATCH_GRASS_TAIGA_2 + f Lnet/minecraft/class_2975; field_26032 WARPED_FUNGI + f Lnet/minecraft/class_2975; field_26005 SPRING_CLOSED + f Lnet/minecraft/class_2975; field_25950 SEAGRASS_DEEP_WARM + f Lnet/minecraft/class_2975; field_26084 TREES_JUNGLE_EDGE + f Lnet/minecraft/class_2975; field_26058 RED_MUSHROOM_SWAMP + f Lnet/minecraft/class_2975; field_26041 SPRUCE + f Lnet/minecraft/class_2975; field_26013 PILE_PUMPKIN + f Lnet/minecraft/class_2975; field_25996 BROWN_MUSHROOM_NETHER + f Lnet/minecraft/class_2975; field_26064 ORE_QUARTZ_NETHER + f Lnet/minecraft/class_2975; field_25956 ICEBERG_PACKED + f Lnet/minecraft/class_2975; field_26047 MEGA_SPRUCE + f Lnet/minecraft/class_2975; field_26019 PATCH_SUNFLOWER + f Lnet/minecraft/class_2975; field_26055 BROWN_MUSHROOM_GIANT + f Lnet/minecraft/class_2975; field_26128 GLOWSTONE + f Lnet/minecraft/class_2975; field_26108 DARK_FOREST_VEGETATION_BROWN + f Lnet/minecraft/class_2975; field_25978 PATCH_DEAD_BUSH_2 + f Lnet/minecraft/class_2975; field_26031 CRIMSON_FUNGI_PLANTED + f Lnet/minecraft/class_2975; field_26004 SPRING_DELTA + f Lnet/minecraft/class_2975; field_26136 SEAGRASS_DEEP_COLD + f Lnet/minecraft/class_2975; field_26376 TREES_BIRCH + f Lnet/minecraft/class_2975; field_25986 PATCH_TALL_GRASS + f Lnet/minecraft/class_2975; field_26093 BIRCH_BEES_002 + f Lnet/minecraft/class_2975; field_26121 END_ISLAND_DECORATED + f Lnet/minecraft/class_2975; field_26101 FLOWER_DEFAULT + f Lnet/minecraft/class_2975; field_26072 ORE_COAL + f Lnet/minecraft/class_2975; field_25964 LAKE_WATER + f Lnet/minecraft/class_2975; field_26092 BIRCH_BEES_0002 + f Lnet/minecraft/class_2975; field_26027 PATCH_GRASS_NORMAL + f Lnet/minecraft/class_2975; field_26080 ORE_EMERALD + f Lnet/minecraft/class_2975; field_25972 MONSTER_ROOM + f Lnet/minecraft/class_2975; field_26083 PLAIN_VEGETATION + f Lnet/minecraft/class_2975; field_26057 BROWN_MUSHROOM_SWAMP + f Lnet/minecraft/class_2975; field_26039 ACACIA + f Lnet/minecraft/class_2975; field_26012 PILE_ICE + f Lnet/minecraft/class_2975; field_25995 PATCH_SUGAR_CANE +c net/minecraft/class_5464$class_5465 net/minecraft/world/gen/feature/Features$Configs + f Lnet/minecraft/class_4634; field_26152 WARPED_FOREST_VEGETATION_CONFIG + f Lnet/minecraft/class_4638; field_26145 DEAD_BUSH_CONFIG + f Lnet/minecraft/class_4634; field_26153 NETHER_SPROUTS_CONFIG + f Lnet/minecraft/class_4642; field_26149 LAVA_SPRING_CONFIG + f Lnet/minecraft/class_4638; field_26146 BERRY_BUSH_PATCH_CONFIG + f Lnet/minecraft/class_4638; field_26141 GRASS_PATCH_CONFIG + f Lnet/minecraft/class_4638; field_26142 TAIGA_GRASS_CONFIG + f Lnet/minecraft/class_4642; field_26150 CLOSED_SPRING_CONFIG + f Lnet/minecraft/class_4638; field_26147 TALL_GRASS_CONFIG + f Lnet/minecraft/class_4638; field_26148 SUGAR_CANE_PATCH_CONFIG + f Lnet/minecraft/class_4638; field_26143 JUNGLE_VEGETATION_CONFIG + f Lnet/minecraft/class_4634; field_26151 CRIMSON_FOREST_VEGETATION_CONFIG + f Lnet/minecraft/class_4638; field_26144 NORMAL_FLOWER_CONFIG +c net/minecraft/class_5464$class_5466 net/minecraft/world/gen/feature/Features$Placements + f Lnet/minecraft/class_4659; field_26154 BEES_0002_PLACEMENT + f Lnet/minecraft/class_3243; field_26165 HEIGHTMAP_PLACEMENT + f Lnet/minecraft/class_3243; field_26166 PATCH_PLACEMENT + f Lnet/minecraft/class_4659; field_26155 BEES_002_PLACEMENT + f Lnet/minecraft/class_4659; field_26156 BEES_005_PLACEMENT + f Lnet/minecraft/class_3243; field_26162 NETHER_SPRING_ORE_PLACEMENT + f Lnet/minecraft/class_3243; field_26163 SPRING_PLACEMENT + f Lnet/minecraft/class_3243; field_26164 VEGETATION_PLACEMENT + f Lnet/minecraft/class_3243; field_26159 KELP_PLACEMENT + f Lnet/minecraft/class_3243; field_26160 BAMBOO_PLACEMENT + f Lnet/minecraft/class_3243; field_26161 HEIGHTMAP_SPREAD_DOUBLE_PLACEMENT + f Lnet/minecraft/class_3243; field_26167 SEAGRASS_DISK_PLACEMENT + f Lnet/minecraft/class_3243; field_26157 FIRE_PLACEMENT + f Lnet/minecraft/class_3243; field_26158 FLOWER_TALL_GRASS_PLACEMENT +c net/minecraft/class_5464$class_5467 net/minecraft/world/gen/feature/Features$States + f Lnet/minecraft/class_2680; field_26223 SOUL_SAND + f Lnet/minecraft/class_2680; field_26202 WATER_BLOCK + f Lnet/minecraft/class_2680; field_26246 LARGE_FERN + f Lnet/minecraft/class_2680; field_26178 SWEET_BERRY_BUSH + f Lnet/minecraft/class_2680; field_26174 DANDELION + f Lnet/minecraft/class_2680; field_26221 SEAGRASS + f Lnet/minecraft/class_2680; field_26244 DARK_OAK_LEAVES + f Lnet/minecraft/class_2680; field_26219 CLAY + f Lnet/minecraft/class_2680; field_26176 MELON + f Lnet/minecraft/class_2680; field_26240 ACACIA_LEAVES + f Lnet/minecraft/class_3610; field_26193 WATER + f Lnet/minecraft/class_2680; field_26172 BLUE_ORCHID + f Lnet/minecraft/class_2680; field_26242 BIRCH_LEAVES + f Lnet/minecraft/class_2680; field_26217 INFESTED_STONE + f Lnet/minecraft/class_2680; field_26215 STONE + f Lnet/minecraft/class_2680; field_26191 BROWN_MUSHROOM_BLOCK_UP + f Lnet/minecraft/class_2680; field_26238 SPRUCE_LEAVES + f Lnet/minecraft/class_2680; field_26198 WARPED_ROOTS + f Lnet/minecraft/class_2680; field_26196 CRIMSON_FUNGUS + f Lnet/minecraft/class_2680; field_26170 BLUE_ICE + f Lnet/minecraft/class_2680; field_26235 JUNGLE_LOG + f Lnet/minecraft/class_2680; field_26212 REDSTONE_ORE + f Lnet/minecraft/class_2680; field_26195 BASALT + f Lnet/minecraft/class_2680; field_26188 CACTUS + f Lnet/minecraft/class_2680; field_26237 SPRUCE_LOG + f Lnet/minecraft/class_2680; field_26233 OAK_LOG + f Lnet/minecraft/class_2680; field_26210 IRON_ORE + f Lnet/minecraft/class_2680; field_26208 ANDESITE + f Lnet/minecraft/class_2680; field_26186 JACK_O_LANTERN + f Lnet/minecraft/class_2680; field_26182 SOUL_SOIL + f Lnet/minecraft/class_2680; field_26231 SNOW_BLOCK + f Lnet/minecraft/class_2680; field_26206 GRANITE + f Lnet/minecraft/class_2680; field_26184 LILY_PAD + f Lnet/minecraft/class_2680; field_26227 FERN + f Lnet/minecraft/class_2680; field_26204 DIRT + f Lnet/minecraft/class_2680; field_26248 LILAC + f Lnet/minecraft/class_2680; field_26180 SOUL_FIRE + f Lnet/minecraft/class_2680; field_26229 COARSE_DIRT + f Lnet/minecraft/class_2680; field_26250 PEONY + f Lnet/minecraft/class_2680; field_26225 NETHER_QUARTZ_ORE + f Lnet/minecraft/class_2680; field_26177 PUMPKIN + f Lnet/minecraft/class_2680; field_26247 TALL_GRASS + f Lnet/minecraft/class_2680; field_26222 MAGMA_BLOCK + f Lnet/minecraft/class_3610; field_26201 LAVA + f Lnet/minecraft/class_2680; field_26179 FIRE + f Lnet/minecraft/class_2680; field_26200 GRASS + f Lnet/minecraft/class_2680; field_26243 DARK_OAK_LOG + f Lnet/minecraft/class_2680; field_26220 MOSSY_COBBLESTONE + f Lnet/minecraft/class_2680; field_26175 DEAD_BUSH + f Lnet/minecraft/class_2680; field_26245 GRASS_BLOCK + f Lnet/minecraft/class_2680; field_26241 BIRCH_LOG + f Lnet/minecraft/class_2680; field_26218 SAND + f Lnet/minecraft/class_2680; field_26216 EMERALD_ORE + f Lnet/minecraft/class_2680; field_26173 POPPY + f Lnet/minecraft/class_2680; field_26199 NETHER_SPROUTS + f Lnet/minecraft/class_2680; field_26197 WARPED_FUNGUS + f Lnet/minecraft/class_2680; field_26169 PACKED_ICE + f Lnet/minecraft/class_2680; field_26190 RED_MUSHROOM_BLOCK_DOWN + f Lnet/minecraft/class_2680; field_26239 ACACIA_LOG + f Lnet/minecraft/class_2680; field_26214 LAPIS_ORE + f Lnet/minecraft/class_2680; field_26171 LILY_OF_THE_VALLEY + f Lnet/minecraft/class_2680; field_26192 MUSHROOM_STEM + f Lnet/minecraft/class_2680; field_26213 DIAMOND_ORE + f Lnet/minecraft/class_2680; field_26189 SUGAR_CANE + f Lnet/minecraft/class_2680; field_26236 JUNGLE_LEAVES + f Lnet/minecraft/class_2680; field_26211 GOLD_ORE + f Lnet/minecraft/class_2680; field_26194 ANCIENT_DEBRIS + f Lnet/minecraft/class_2680; field_26168 RED_MUSHROOM + f Lnet/minecraft/class_2680; field_26185 SNOW + f Lnet/minecraft/class_2680; field_26232 ICE + f Lnet/minecraft/class_2680; field_26187 SUNFLOWER + f Lnet/minecraft/class_2680; field_26234 OAK_LEAVES + f Lnet/minecraft/class_2680; field_26209 COAL_ORE + f Lnet/minecraft/class_2680; field_26251 BROWN_MUSHROOM + f Lnet/minecraft/class_2680; field_26207 DIORITE + f Lnet/minecraft/class_2680; field_26183 CRIMSON_ROOTS + f Lnet/minecraft/class_2680; field_26230 MYCELIUM + f Lnet/minecraft/class_2680; field_26249 ROSE_BUSH + f Lnet/minecraft/class_2680; field_26226 BLACKSTONE + f Lnet/minecraft/class_2680; field_26205 GRAVEL + f Lnet/minecraft/class_2680; field_26224 NETHER_GOLD_ORE + f Lnet/minecraft/class_2680; field_26181 NETHERRACK + f Lnet/minecraft/class_2680; field_26228 PODZOL + f Lnet/minecraft/class_2680; field_26203 LAVA_BLOCK +c net/minecraft/class_3791 net/minecraft/world/gen/feature/structure/PillagerOutpostPools + m ()V method_27235 func_244089_a + f Lnet/minecraft/class_3785; field_26252 field_244088_a +c net/minecraft/class_3815 net/minecraft/world/gen/feature/structure/PlainsVillagePools + m ()V method_16754 init + f Lnet/minecraft/class_3785; field_26253 field_244090_a +c net/minecraft/class_5468 net/minecraft/world/gen/feature/jigsaw/JigsawPatternRegistry + m (Lnet/minecraft/class_3785;)Lnet/minecraft/class_3785; method_30600 func_244094_a + m ()Lnet/minecraft/class_3785; method_30599 func_244093_a + f Lnet/minecraft/class_3785; field_26255 field_244092_b + f Lnet/minecraft/class_5321; field_26254 field_244091_a +c net/minecraft/class_5469 net/minecraft/world/gen/feature/template/ProcessorLists + m (Ljava/lang/String;Lcom/google/common/collect/ImmutableList;)Lnet/minecraft/class_5497; method_30601 func_244127_a + f Lnet/minecraft/class_5497; field_26260 field_244103_c + f Lnet/minecraft/class_5497; field_26280 field_244124_x + f Lnet/minecraft/class_5497; field_26281 field_244125_y + f Lnet/minecraft/class_5497; field_26279 field_244123_w + f Lnet/minecraft/class_5497; field_26259 field_244102_b + f Lnet/minecraft/class_5497; field_26688 field_244101_a + f Lnet/minecraft/class_5497; field_26278 field_244122_v + f Lnet/minecraft/class_5497; field_26276 field_244120_t + f Lnet/minecraft/class_5497; field_26277 field_244121_u + f Lnet/minecraft/class_3821; field_26621 field_244099_E + f Lnet/minecraft/class_5497; field_26265 field_244108_h + f Lnet/minecraft/class_5497; field_26266 field_244109_i + f Lnet/minecraft/class_3821; field_26622 field_244100_F + f Lnet/minecraft/class_5497; field_26264 field_244107_g + f Lnet/minecraft/class_5497; field_26263 field_244106_f + f Lnet/minecraft/class_5497; field_26261 field_244104_d + f Lnet/minecraft/class_5497; field_26262 field_244105_e + f Lnet/minecraft/class_5497; field_26282 field_244126_z + f Lnet/minecraft/class_5497; field_26256 field_244097_C + f Lnet/minecraft/class_5497; field_26271 field_244114_n + f Lnet/minecraft/class_5497; field_26269 field_244112_l + f Lnet/minecraft/class_5497; field_26270 field_244113_m + f Lnet/minecraft/class_5497; field_26284 field_244096_B + f Lnet/minecraft/class_5497; field_26268 field_244111_k + f Lnet/minecraft/class_5497; field_26283 field_244095_A + f Lnet/minecraft/class_5497; field_26267 field_244110_j + f Lnet/minecraft/class_5497; field_26275 field_244119_s + f Lnet/minecraft/class_5497; field_26689 field_244118_r + f Lnet/minecraft/class_5497; field_26273 field_244116_p + f Lnet/minecraft/class_5497; field_26274 field_244117_q + f Lnet/minecraft/class_5497; field_26272 field_244115_o + f Lnet/minecraft/class_5497; field_26257 field_244098_D +c net/minecraft/class_3834 net/minecraft/world/gen/feature/structure/SavannaVillagePools + m ()V method_16844 init + f Lnet/minecraft/class_3785; field_26285 field_244128_a +c net/minecraft/class_3836 net/minecraft/world/gen/feature/structure/SnowyVillagePools + m ()V method_16845 init + f Lnet/minecraft/class_3785; field_26286 field_244129_a +c net/minecraft/class_5470 net/minecraft/world/gen/feature/structure/StructureFeatures + m ()Lnet/minecraft/class_3785; method_30604 func_244163_b + m ()Lnet/minecraft/class_3785; method_30605 func_244164_c + m ()Lnet/minecraft/class_3785; method_30602 func_244161_a + m ()Lnet/minecraft/class_3785; method_30608 func_244167_f + m ()Lnet/minecraft/class_3785; method_30609 func_244168_g + m ()Lnet/minecraft/class_3785; method_30607 func_244166_e + m ()Lnet/minecraft/class_3785; method_30606 func_244165_d + m (Ljava/lang/String;Lnet/minecraft/class_5312;)Lnet/minecraft/class_5312; method_30603 register + f Lnet/minecraft/class_5312; field_26298 IGLOO + f Lnet/minecraft/class_5312; field_26297 DESERT_PYRAMID + f Lnet/minecraft/class_5312; field_26295 MANSION + f Lnet/minecraft/class_5312; field_26296 JUNGLE_PYRAMID + f Lnet/minecraft/class_5312; field_26317 RUINED_PORTAL_DESERT + f Lnet/minecraft/class_5312; field_26294 MINESHAFT_BADLANDS + f Lnet/minecraft/class_5312; field_26315 VILLAGE_TAIGA + f Lnet/minecraft/class_5312; field_26316 RUINED_PORTAL + f Lnet/minecraft/class_5312; field_26303 MONUMENT + f Lnet/minecraft/class_5312; field_26304 OCEAN_RUIN_COLD + f Lnet/minecraft/class_5312; field_26288 RUINED_PORTAL_SWAMP + f Lnet/minecraft/class_5312; field_26302 STRONGHOLD + f Lnet/minecraft/class_5312; field_26287 RUINED_PORTAL_JUNGLE + f Lnet/minecraft/class_5312; field_26301 SWAMP_HUT + f Lnet/minecraft/class_5312; field_26299 SHIPWRECK + f Lnet/minecraft/class_5312; field_26300 SHIPWRECK_BEACHED + f Lnet/minecraft/class_5312; field_26309 BURIED_TREASURE + f Lnet/minecraft/class_5312; field_26307 NETHER_FOSSIL + f Lnet/minecraft/class_5312; field_26308 END_CITY + f Lnet/minecraft/class_5312; field_26306 FORTRESS + f Lnet/minecraft/class_5312; field_26290 RUINED_PORTAL_OCEAN + f Lnet/minecraft/class_5312; field_26291 RUINED_PORTAL_NETHER + f Lnet/minecraft/class_5312; field_26289 RUINED_PORTAL_MOUNTAIN + f Lnet/minecraft/class_5312; field_26305 OCEAN_RUIN_WARM + f Lnet/minecraft/class_5312; field_26314 VILLAGE_SNOWY + f Lnet/minecraft/class_5312; field_26293 MINESHAFT + f Lnet/minecraft/class_5312; field_26292 PILLAGER_OUTPOST + f Lnet/minecraft/class_5312; field_26313 VILLAGE_SAVANNA + f Lnet/minecraft/class_5312; field_26311 VILLAGE_PLAINS + f Lnet/minecraft/class_5312; field_26312 VILLAGE_DESERT + f Lnet/minecraft/class_5312; field_26310 BASTION_REMNANT +c net/minecraft/class_5471 net/minecraft/world/gen/surfacebuilders/ConfiguredSurfaceBuilders + m (Ljava/lang/String;Lnet/minecraft/class_3504;)Lnet/minecraft/class_3504; method_30610 func_244192_a + f Lnet/minecraft/class_3504; field_26333 field_244184_p + f Lnet/minecraft/class_3504; field_26334 field_244185_q + f Lnet/minecraft/class_3504; field_26323 field_244174_f + f Lnet/minecraft/class_3504; field_26332 field_244183_o + f Lnet/minecraft/class_3504; field_26321 field_244172_d + f Lnet/minecraft/class_3504; field_26322 field_244173_e + f Lnet/minecraft/class_3504; field_26320 field_244171_c + f Lnet/minecraft/class_3504; field_26331 field_244182_n + f Lnet/minecraft/class_3504; field_26340 field_244191_w + f Lnet/minecraft/class_3504; field_26329 field_244180_l + f Lnet/minecraft/class_3504; field_26330 field_244181_m + f Lnet/minecraft/class_3504; field_26319 field_244170_b + f Lnet/minecraft/class_3504; field_26328 field_244179_k + f Lnet/minecraft/class_3504; field_26318 field_244169_a + f Lnet/minecraft/class_3504; field_26339 field_244190_v + f Lnet/minecraft/class_3504; field_26337 field_244188_t + f Lnet/minecraft/class_3504; field_26338 field_244189_u + f Lnet/minecraft/class_3504; field_26327 field_244178_j + f Lnet/minecraft/class_3504; field_26336 field_244187_s + f Lnet/minecraft/class_3504; field_26325 field_244176_h + f Lnet/minecraft/class_3504; field_26326 field_244177_i + f Lnet/minecraft/class_3504; field_26324 field_244175_g + f Lnet/minecraft/class_3504; field_26335 field_244186_r +c net/minecraft/class_3870 net/minecraft/world/gen/feature/structure/TaigaVillagePools + m ()V method_17038 init + f Lnet/minecraft/class_3785; field_26341 field_244193_a +c net/minecraft/class_3813 net/minecraft/world/gen/feature/structure/VillagesPools + m ()V method_27221 func_244194_a +c net/minecraft/class_5475 net/minecraft/data/BiomeProvider + m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959; method_30681 func_244198_a + m (Ljava/nio/file/Path;Lnet/minecraft/class_2960;)Ljava/nio/file/Path; method_30682 getPath + f Lcom/google/gson/Gson; field_26378 GSON + f Lnet/minecraft/class_2403; field_26379 generator + f Lorg/apache/logging/log4j/Logger; field_26377 LOGGER +c net/minecraft/class_5504 net/minecraft/world/biome/BiomeRegistry + m (ILnet/minecraft/class_5321;Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959; method_31145 register + m (I)Lnet/minecraft/class_5321; method_31144 getKeyFromID + f Lnet/minecraft/class_1959; field_26734 PLAINS + f Lnet/minecraft/class_1959; field_26735 THE_VOID + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_26736 idToKeyMap +c net/minecraft/class_5478 net/minecraft/world/biome/BiomeMaker + m (Lnet/minecraft/class_3504;FFZZ)Lnet/minecraft/class_1959; method_30700 makeGenericBadlandsBiome + m ()Lnet/minecraft/class_1959; method_30707 makeModifiedJungleEdgeBiome + m (FFZ)Lnet/minecraft/class_1959; method_30691 makeBirchForestBiome + m ()Lnet/minecraft/class_1959; method_30683 makeJungleBiome + m ()Lnet/minecraft/class_1959; method_30730 makeCrimsonForestBiome + m (FFZ)Lnet/minecraft/class_1959; method_30705 makeDarkForestBiome + m ()Lnet/minecraft/class_1959; method_30728 makeSoulSandValleyBiome + m (FFLnet/minecraft/class_3504;Z)Lnet/minecraft/class_1959; method_30690 makeMountainBiome + m ()Lnet/minecraft/class_1959; method_30715 makeBambooJungleHillsBiome + m (FFZLnet/minecraft/class_5483$class_5496;)Lnet/minecraft/class_1959; method_30711 makeGenericForestBiome + m ()Lnet/minecraft/class_1959; method_30713 makeJungleHillsBiome + m (FF)Lnet/minecraft/class_1959; method_30684 makeMushroomBiome + m (FFFZZ)Lnet/minecraft/class_1959; method_30694 makeGenericSavannaBiome + m (FFFZ)Lnet/minecraft/class_1959; method_30687 makeGiantTaigaBiome + m (FF)Lnet/minecraft/class_1959; method_30704 makeForestBiome + m ()Lnet/minecraft/class_1959; method_30721 makeSavannaPlateauBiome + m (Lnet/minecraft/class_5483$class_5496;IIZLnet/minecraft/class_5485$class_5495;)Lnet/minecraft/class_1959; method_30692 makeGenericOceanBiome + m ()Lnet/minecraft/class_1959; method_30719 makeEndHighlandsBiome + m (FFFZZZLnet/minecraft/class_5483$class_5496;)Lnet/minecraft/class_1959; method_30695 makeTropicalBiome + m ()Lnet/minecraft/class_1959; method_30717 makeTheEndBiome + m ()Lnet/minecraft/class_1959; method_30727 makeNetherWastesBiome + m (FFFZZLnet/minecraft/class_5483$class_5496;)Lnet/minecraft/class_1959; method_31067 makeGenericSavannaBiome + m ()Lnet/minecraft/class_5483$class_5496; method_31068 getSpawnsWithHorseAndDonkey + m ()Lnet/minecraft/class_1959; method_30725 makeFlowerForestBiome + m (Z)Lnet/minecraft/class_1959; method_30709 makeLukewarmOceanBiome + m (Z)Lnet/minecraft/class_1959; method_30702 makeColdOceanBiome + m (FFZZZZ)Lnet/minecraft/class_1959; method_30699 makeTaigaBiome + m ()Lnet/minecraft/class_1959; method_30723 makeWarmOceanBiome + m ()Lnet/minecraft/class_1959; method_30703 makeJungleEdgeBiome + m ()Lnet/minecraft/class_1959; method_30731 makeWarpedForestBiome + m (FFZ)Lnet/minecraft/class_1959; method_30696 makeBadlandsBiome + m ()Lnet/minecraft/class_1959; method_30729 makeBasaltDeltasBiome + m (FFZ)Lnet/minecraft/class_1959; method_30708 makeGenericSwampBiome + m (F)I method_30932 getSkyColorWithTemperatureModifier + m (FFZZZ)Lnet/minecraft/class_1959; method_30698 makeDesertBiome + m (FFZZ)Lnet/minecraft/class_1959; method_30697 makeSnowyBiome + m ()Lnet/minecraft/class_1959; method_30716 makeEndBarrensBiome + m ()Lnet/minecraft/class_1959; method_30714 makeBambooJungleBiome + m (Lnet/minecraft/class_3504;ZZZ)Lnet/minecraft/class_5485$class_5495; method_31066 getOceanGenerationSettingsBuilder + m (FF)Lnet/minecraft/class_1959; method_30693 makeWoodedBadlandsPlateauBiome + m ()Lnet/minecraft/class_1959; method_30710 makeModifiedJungleBiome + m ()Lnet/minecraft/class_1959; method_30720 makeSmallEndIslandsBiome + m ()Lnet/minecraft/class_1959; method_30718 makeEndMidlandsBiome + m (FFFFIZZ)Lnet/minecraft/class_1959; method_30685 makeGenericBeachBiome + m (FFFIZ)Lnet/minecraft/class_1959; method_30686 makeRiverBiome + m (Z)Lnet/minecraft/class_1959; method_30712 makeFrozenOceanBiome + m ()Lnet/minecraft/class_5483$class_5496; method_31069 getStandardMobSpawnBuilder + m ()Lnet/minecraft/class_1959; method_30726 makeVoidBiome + m (FFII)Lnet/minecraft/class_1959; method_30688 makeGenericBambooBiome + m (FFIII)Lnet/minecraft/class_1959; method_30689 makeGenericJungleBiome + m (Lnet/minecraft/class_5485$class_5495;)Lnet/minecraft/class_1959; method_31065 makeEndBiome + m (Z)Lnet/minecraft/class_1959; method_30706 makeOceanBiome + m ()Lnet/minecraft/class_1959; method_30724 makeDeepWarmOceanBiome + m (Z)Lnet/minecraft/class_1959; method_30701 makePlainsBiome + m ()Lnet/minecraft/class_1959; method_30722 makeErodedBadlandsBiome +c net/minecraft/class_4512 net/minecraft/test/TestRuntimeException +c net/minecraft/class_4513 net/minecraft/test/TestBlockPosException + m ()Lnet/minecraft/class_2338; method_22151 func_229459_c_ + m ()Ljava/lang/String; method_22150 func_229458_a_ + m ()Ljava/lang/String; getMessage getMessage + f Lnet/minecraft/class_2338; field_20542 field_229456_b_ + f J field_21449 field_229457_c_ + f Lnet/minecraft/class_2338; field_20541 field_229455_a_ +c net/minecraft/class_4514 net/minecraft/test/TestBatch + m ()Ljava/util/Collection; method_22154 func_229465_b_ + m ()Ljava/lang/String; method_22152 func_229463_a_ + m (Lnet/minecraft/class_3218;)V method_22153 func_229464_a_ + f Ljava/util/Collection; field_20544 field_229461_b_ + f Ljava/lang/String; field_20543 field_229460_a_ + f Ljava/util/function/Consumer; field_20545 field_229462_c_ +c net/minecraft/class_4515 net/minecraft/test/TestExecutor + m (Ljava/util/Collection;)V method_29401 func_229480_a_ + m (Lnet/minecraft/class_4517;)V method_22164 func_229483_b_ + m (Lnet/minecraft/class_4515;Lnet/minecraft/class_4517;)V method_22158 func_229478_a_ + m (I)V method_22156 func_229477_a_ + m (Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;Lnet/minecraft/class_4514;)V method_23633 func_240539_a_ + m ()Ljava/util/List; method_22155 func_229476_a_ + m (Lnet/minecraft/class_4517;)V method_22159 func_229479_a_ + m ()V method_22160 func_229482_b_ + f Lnet/minecraft/class_3218; field_20549 field_229468_c_ + f Lnet/minecraft/class_4521; field_20550 field_229469_d_ + f I field_20556 field_240536_e_ + f Lnet/minecraft/class_2338; field_20548 field_229467_b_ + f Lnet/minecraft/class_4524; field_20553 field_229472_g_ + f Ljava/util/List; field_20551 field_229470_e_ + f Lnet/minecraft/class_2338$class_2339; field_20555 field_229474_i_ + f I field_20554 field_229473_h_ + f Ljava/util/Map; field_25300 field_240537_g_ + f Lorg/apache/logging/log4j/Logger; field_20546 field_229466_a_ + f Ljava/util/List; field_20547 field_229471_f_ +c net/minecraft/class_4515$1 net/minecraft/test/TestExecutor$1 + f Lnet/minecraft/class_4515; field_20557 field_229484_a_ +c net/minecraft/class_4692 net/minecraft/test/TestTickResult + f Ljava/lang/Long; field_21450 field_229485_a_ + f Ljava/lang/Runnable; field_21451 field_229486_b_ +c net/minecraft/class_4516 net/minecraft/test/TestTrackerHolder + f Lnet/minecraft/class_4517; field_20558 field_229487_a_ +c net/minecraft/class_4517 net/minecraft/test/TestTracker + m ()Lnet/minecraft/class_4529; method_29403 func_240546_u_ + m ()Ljava/lang/String; method_22169 func_229510_c_ + m ()Lnet/minecraft/class_3218; method_22176 func_229514_g_ + m ()Lnet/minecraft/class_2470; method_29402 func_240545_t_ + m ()Z method_22184 func_229521_r_ + m ()V method_23639 func_229523_t_ + m (Lnet/minecraft/class_2338;I)V method_22166 func_240543_a_ + m ()V method_23634 func_229501_a_ + m ()V method_22165 func_229507_b_ + m ()V method_23640 func_229525_v_ + m (Ljava/lang/Throwable;)V method_22168 func_229506_a_ + m (Lnet/minecraft/class_4518;)V method_22167 func_229504_a_ + m (Lnet/minecraft/class_4518;)V method_22175 func_229508_b_ + m ()Z method_22183 func_229520_q_ + m ()Lnet/minecraft/class_2338; method_22172 func_229512_d_ + m (Lnet/minecraft/class_4518;)V method_22171 func_229511_c_ + m ()Z method_22177 func_229515_h_ + m (Lnet/minecraft/class_4693;)V method_23637 func_229509_b_ + m ()Ljava/lang/Throwable; method_22182 func_229519_n_ + m ()Z method_22178 func_229516_i_ + m ()Z method_22179 func_229517_j_ + m (Lnet/minecraft/class_2338;)V method_23635 func_229503_a_ + m ()Ljava/lang/String; method_23638 func_229522_s_ + m ()Ljava/lang/String; toString toString + m ()Z method_22180 func_229518_k_ + m (Lnet/minecraft/class_4693;)V method_23636 func_229505_a_ + f Z field_20565 field_229497_j_ + f Lit/unimi/dsi/fastutil/objects/Object2LongMap; field_21453 field_229494_g_ + f J field_21454 field_229495_h_ + f J field_21455 field_229496_i_ + f Lnet/minecraft/class_4529; field_20559 field_229488_a_ + f Lnet/minecraft/class_3218; field_20561 field_229490_c_ + f Ljava/util/Collection; field_20562 field_229491_d_ + f Ljava/lang/Throwable; field_20569 field_229500_m_ + f I field_20563 field_229492_e_ + f Lcom/google/common/base/Stopwatch; field_21456 field_229498_k_ + f Lnet/minecraft/class_2470; field_25301 field_240541_m_ + f Ljava/util/Collection; field_21452 field_229493_f_ + f Z field_20567 field_229499_l_ + f Lnet/minecraft/class_2338; field_20560 field_229489_b_ +c net/minecraft/class_4518 net/minecraft/test/ITestCallback + m (Lnet/minecraft/class_4517;)V method_22188 func_225644_a_ + m (Lnet/minecraft/class_4517;)V method_22190 func_225645_c_ +c net/minecraft/class_4519 net/minecraft/test/TestRegistry + m (Lnet/minecraft/class_4529;)V method_29404 func_240548_a_ + m (Ljava/lang/String;)Z method_22196 func_229534_b_ + m (Ljava/lang/String;)Ljava/util/function/Consumer; method_22198 func_229536_c_ + m (Ljava/lang/String;)Ljava/util/Optional; method_22199 func_229537_d_ + m ()Ljava/util/Collection; method_22195 func_229533_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_4529; method_22200 func_229538_e_ + m ()V method_29406 func_240550_d_ + m ()Ljava/util/Collection; method_29405 func_240549_c_ + m (Lnet/minecraft/class_4529;Ljava/lang/String;)Z method_22192 func_229532_a_ + m (Ljava/lang/String;Lnet/minecraft/class_4529;)Z method_22194 func_229531_a_ + m (Ljava/lang/String;)Ljava/util/Collection; method_22193 func_229530_a_ + m (Ljava/lang/String;Lnet/minecraft/class_4529;)Z method_22197 func_229535_b_ + m ()Ljava/util/Collection; method_22191 func_229529_a_ + f Ljava/util/Collection; field_20570 field_229526_a_ + f Ljava/util/Map; field_20572 field_229528_c_ + f Ljava/util/Set; field_20571 field_229527_b_ + f Ljava/util/Collection; field_25302 field_240547_d_ +c net/minecraft/class_4520 net/minecraft/test/TestUtils + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/lang/String;)V method_22217 func_229554_a_ + m (Ljava/util/Collection;)Ljava/util/Collection; method_22209 func_229548_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_22215 func_229553_a_ + m (Lnet/minecraft/class_3222;)Z method_22218 func_229557_a_ + m (Lnet/minecraft/class_4517;Ljava/lang/String;)V method_22221 func_229560_b_ + m (Ljava/lang/String;)Ljava/util/Collection; method_22205 func_229543_a_ + m (Lnet/minecraft/class_4517;Ljava/lang/String;)V method_22204 func_229541_a_ + m (Ljava/lang/String;ZLjava/lang/String;)Lnet/minecraft/class_1799; method_22207 func_229546_a_ + m (Lnet/minecraft/class_3218;)V method_22213 func_229552_a_ + m (Ljava/util/Map;Lnet/minecraft/class_4529;)V method_22211 func_229551_a_ + m (Ljava/lang/StringBuffer;Ljava/lang/String;)V method_22208 func_229547_a_ + m (Ljava/lang/String;Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/util/Collection;Ljava/util/function/Consumer;Ljava/util/List;)Lnet/minecraft/class_4514; method_23641 func_240551_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_124;Ljava/lang/String;)V method_22214 func_229556_a_ + m (Ljava/lang/String;Lnet/minecraft/class_124;Lnet/minecraft/class_3222;)V method_22206 func_229544_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_4521;I)V method_22216 func_229555_a_ + m (Ljava/util/Map;Ljava/lang/String;)Ljava/util/stream/Stream; method_23642 func_229550_a_ + m (Lnet/minecraft/class_4517;)V method_22219 func_229558_b_ + m (Ljava/util/Collection;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;Lnet/minecraft/class_4521;I)Ljava/util/Collection; method_22222 func_240554_b_ + m (Lnet/minecraft/class_4517;Lnet/minecraft/class_2338;Lnet/minecraft/class_4521;)V method_22203 func_240553_a_ + m (Lnet/minecraft/class_4517;)V method_22224 func_229563_c_ + m (Ljava/util/Collection;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;Lnet/minecraft/class_4521;I)Ljava/util/Collection; method_22210 func_240552_a_ + m (Lnet/minecraft/class_4517;Lnet/minecraft/class_2248;)V method_22220 func_229559_b_ + m (Lnet/minecraft/class_4517;Lnet/minecraft/class_2248;)V method_22202 func_229540_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_22223 func_229562_b_ + f Lnet/minecraft/class_4531; field_20573 field_229539_a_ +c net/minecraft/class_4520$1 net/minecraft/test/TestUtils$1 +c net/minecraft/class_4693 net/minecraft/test/TestList + m (J)V method_23643 func_229567_a_ + m (J)V method_23644 func_229568_b_ + m (J)V method_23645 func_229569_c_ + f Lnet/minecraft/class_4517; field_21457 field_229564_a_ + f Ljava/util/List; field_21458 field_229565_b_ + f J field_21459 field_229566_c_ +c net/minecraft/class_4521 net/minecraft/test/TestCollection + m (Lnet/minecraft/class_4517;)V method_22227 func_229573_a_ + m ()V method_22226 func_229572_a_ + m ()V method_22228 func_229574_b_ + f Lnet/minecraft/class_4521; field_20574 field_229570_a_ + f Ljava/util/Collection; field_20575 field_229571_b_ +c net/minecraft/class_4522 net/minecraft/test/TestTimeoutException +c net/minecraft/class_4523 net/minecraft/test/TestLogger + f Lorg/apache/logging/log4j/Logger; field_20576 field_229575_a_ +c net/minecraft/class_4524 net/minecraft/test/TestResultList + m ()Z method_22236 func_229585_d_ + m ()Z method_22237 func_229586_e_ + m ()I method_22229 func_229578_a_ + m ()I method_22234 func_229583_b_ + m ()I method_22235 func_229584_c_ + m (Ljava/lang/StringBuffer;Lnet/minecraft/class_4517;)V method_22233 func_229582_a_ + m ()Z method_22239 func_229588_i_ + m (Lnet/minecraft/class_4518;Lnet/minecraft/class_4517;)V method_22232 func_240559_a_ + m (Lnet/minecraft/class_4518;)V method_22231 func_240558_a_ + m (Lnet/minecraft/class_4517;)V method_22230 func_229579_a_ + m (Ljava/util/function/Consumer;)V method_29407 func_240556_a_ + m ()Ljava/lang/String; toString toString + m ()I method_22238 func_229587_h_ + m ()Ljava/lang/String; method_22240 func_229589_j_ + f Ljava/util/Collection; field_20577 field_229576_a_ + f Ljava/util/Collection; field_25303 field_240555_b_ +c net/minecraft/class_4524$1 net/minecraft/test/TestResultList$1 + f Lnet/minecraft/class_4524; field_25305 field_240561_b_ + f Ljava/util/function/Consumer; field_25304 field_240560_a_ +c net/minecraft/class_4525 net/minecraft/test/StructureHelper + m (Ljava/lang/String;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;)V method_22251 func_229603_a_ + m (Lnet/minecraft/class_3341;ILnet/minecraft/class_3218;)V method_22246 func_229595_a_ + m (Lnet/minecraft/class_2338;ILnet/minecraft/class_3218;)Ljava/util/Optional; method_22244 func_229596_a_ + m (ILnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_22254 func_229592_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;)V method_22256 func_229608_b_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;)Z method_22247 func_229599_a_ + m (Lnet/minecraft/class_2338;ILnet/minecraft/class_3218;)Lnet/minecraft/class_2338; method_22255 func_229607_b_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)I method_22245 func_229597_a_ + m (I)Lnet/minecraft/class_2470; method_29408 func_240562_a_ + m (Lnet/minecraft/class_2338;ILnet/minecraft/class_3218;)Ljava/util/Collection; method_22258 func_229609_c_ + m (Lnet/minecraft/class_2633;)Lnet/minecraft/class_3341; method_29410 func_240568_b_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;)Lnet/minecraft/class_3341; method_29409 func_229598_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_22249 func_229601_a_ + m (Ljava/lang/String;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;Z)Lnet/minecraft/class_2633; method_22252 func_240566_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;)V method_22248 func_240564_a_ + m (Ljava/lang/String;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;ILnet/minecraft/class_3218;Z)Lnet/minecraft/class_2633; method_22250 func_240565_a_ + m (Lnet/minecraft/class_2633;)Lnet/minecraft/class_238; method_22242 func_229594_a_ + m (Lnet/minecraft/class_1297;)Z method_22241 func_229593_a_ + m (Ljava/lang/String;Lnet/minecraft/class_3218;)Lnet/minecraft/class_3499; method_22369 func_229605_a_ + m (ILnet/minecraft/class_2338;Lnet/minecraft/class_3218;)V method_22368 func_229591_a_ + m (Ljava/nio/file/Path;)Lnet/minecraft/class_2487; method_22253 func_229606_a_ + f Ljava/lang/String; field_20579 field_229590_a_ +c net/minecraft/class_4526 net/minecraft/test/TestTypeArgument + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String; method_22262 func_229612_a_ + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/String; method_22261 parse + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Lnet/minecraft/class_4526; method_22370 func_229611_a_ + f Ljava/util/Collection; field_20580 field_229610_a_ +c net/minecraft/class_4527 net/minecraft/test/TestCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29417 func_240579_c_ + m (Lnet/minecraft/class_2168;I)I method_22265 func_229616_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29415 func_218527_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22291 func_229643_e_ + m (Lnet/minecraft/class_4517;)V method_29412 func_240576_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4524;)V method_22280 func_229631_b_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_4529;I)I method_22266 func_229620_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22288 func_229640_g_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29414 func_240587_i_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_4524;)V method_22272 func_229623_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29423 func_240582_l_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22271 func_229614_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22287 func_229637_e_ + m (Lnet/minecraft/class_3222;)Z method_22276 func_229627_a_ + m (Lnet/minecraft/class_2168;)I method_22277 func_229615_a_ + m (Lnet/minecraft/class_2168;)I method_29413 func_240581_c_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22295 func_229647_n_ + m (Lnet/minecraft/class_2168;ZII)I method_29411 func_240574_a_ + m (Lnet/minecraft/class_2168;Ljava/util/Collection;II)V method_22269 func_229619_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22283 func_229632_c_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22293 func_229645_h_ + m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_22264 func_229617_a_ + m (Lnet/minecraft/class_4529;Lnet/minecraft/class_3218;)V method_23647 func_229622_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29419 func_229644_f_ + m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_22282 func_229636_d_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29422 func_240588_j_ + m (Lnet/minecraft/class_2168;II)I method_22284 func_229633_c_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29416 func_240569_b_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4524;Lnet/minecraft/class_2338;)V method_22274 func_229626_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4524;)V method_22273 func_229625_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29418 func_240580_d_ + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_22270 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_23648 func_229639_f_ + m (Lnet/minecraft/class_2168;Ljava/lang/String;III)I method_22268 func_229618_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22290 func_229642_j_ + m (Lnet/minecraft/class_2168;Ljava/lang/String;II)I method_22267 func_229630_b_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22289 func_229641_h_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22279 func_229628_b_ + m (Lnet/minecraft/class_2168;Ljava/lang/String;)V method_22278 func_229634_c_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22294 func_229646_m_ + m (Lnet/minecraft/class_2168;)I method_22281 func_229629_b_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22286 func_229635_d_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29420 func_240584_g_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22292 func_240585_k_ + m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_22285 func_229638_e_ + m (Lnet/minecraft/class_3218;Ljava/lang/String;Lnet/minecraft/class_124;)V method_22275 func_229624_a_ + m (Lnet/minecraft/class_124;Ljava/lang/String;Lnet/minecraft/class_3222;)V method_22263 func_229621_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29421 func_240586_i_ +c net/minecraft/class_4527$class_4528 net/minecraft/test/TestCommand$Callback + f Lnet/minecraft/class_4524; field_20582 field_229649_b_ + f Lnet/minecraft/class_3218; field_20581 field_229648_a_ +c net/minecraft/class_4529 net/minecraft/test/TestFunctionInfo + m ()Ljava/lang/String; toString toString + m ()J method_23649 func_229663_f_ + m ()Ljava/lang/String; method_22298 func_229659_b_ + m (Lnet/minecraft/class_4516;)V method_22297 func_229658_a_ + m ()Ljava/lang/String; method_22296 func_229657_a_ + m ()Z method_22300 func_229661_d_ + m ()Lnet/minecraft/class_2470; method_29424 func_240590_g_ + m ()I method_22299 func_229660_c_ + m ()Ljava/lang/String; method_22301 func_229662_e_ + f Z field_20586 field_229653_d_ + f Ljava/lang/String; field_20584 field_229651_b_ + f Ljava/lang/String; field_20585 field_229652_c_ + f Ljava/lang/String; field_20583 field_229650_a_ + f I field_20588 field_229655_f_ + f Lnet/minecraft/class_2470; field_25306 field_240589_h_ + f J field_21460 field_229656_g_ + f Ljava/util/function/Consumer; field_20587 field_229654_e_ +c net/minecraft/class_4530 net/minecraft/test/TestArgArgument + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_4529; method_22303 func_229666_a_ + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_4529; method_22302 parse + m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse + m ()Ljava/util/Collection; getExamples getExamples + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions + m ()Lnet/minecraft/class_4530; method_22371 func_229665_a_ + f Ljava/util/Collection; field_20589 field_229664_a_ +c net/minecraft/class_4531 net/minecraft/test/ITestLogger + m (Lnet/minecraft/class_4517;)V method_22304 func_225646_a_ +c net/minecraft/class_2477 net/minecraft/util/text/LanguageMap + m (Lnet/minecraft/class_5348;)Lnet/minecraft/class_5481; method_30934 func_241870_a + m ()Z method_29428 func_230505_b_ + m ()Lnet/minecraft/class_2477; method_29429 func_240595_c_ + m (Ljava/lang/String;)Z method_4678 func_230506_b_ + m (Ljava/io/InputStream;Ljava/util/function/BiConsumer;)V method_29425 func_240593_a_ + m ()Lnet/minecraft/class_2477; method_10517 getInstance + m (Ljava/lang/String;)Ljava/lang/String; method_4679 func_230503_a_ + m (Lnet/minecraft/class_2477;)V method_29427 func_240594_a_ + m (Ljava/util/List;)Ljava/util/List; method_30933 func_244260_a + f Lnet/minecraft/class_2477; field_11486 field_240592_d_ + f Lorg/apache/logging/log4j/Logger; field_11490 LOGGER + f Lcom/google/gson/Gson; field_25307 field_240591_b_ + f Ljava/util/regex/Pattern; field_11489 NUMERIC_VARIABLE_PATTERN +c net/minecraft/class_2477$1 net/minecraft/util/text/LanguageMap$1 + m (Lnet/minecraft/class_5348;Lnet/minecraft/class_5224;)Z method_30936 func_244262_a + m (Lnet/minecraft/class_5224;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_30935 func_244261_a + f Ljava/util/Map; field_25308 field_240596_a_ +c net/minecraft/class_2479 net/minecraft/nbt/ByteArrayNBT + m (ILnet/minecraft/class_2481;)V method_17805 add + m (I)Lnet/minecraft/class_2481; method_17804 remove + m ()V clear clear + m ()I size size + m (Ljava/util/List;)[B method_10522 toArray + m ()I hashCode hashCode + m (ILnet/minecraft/class_2481;)Lnet/minecraft/class_2481; method_17803 set + m (I)Ljava/lang/Object; get get + m (Ljava/lang/Object;)Z equals equals + m (I)Lnet/minecraft/class_2481; method_10523 get + m ()[B method_10521 getByteArray + f [B field_11493 data + f Lnet/minecraft/class_4614; field_21024 TYPE +c net/minecraft/class_2479$1 net/minecraft/nbt/ByteArrayNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2479; method_23232 readNBT +c net/minecraft/class_2481 net/minecraft/nbt/ByteNBT + m (Ljava/lang/Object;)Z equals equals + m (B)Lnet/minecraft/class_2481; method_23233 valueOf + m ()I hashCode hashCode + m ()Lnet/minecraft/class_2481; method_10530 copy + m (Z)Lnet/minecraft/class_2481; method_23234 valueOf + f B field_11498 data + f Lnet/minecraft/class_4614; field_21025 TYPE + f Lnet/minecraft/class_2481; field_21027 ONE + f Lnet/minecraft/class_2481; field_21026 ZERO +c net/minecraft/class_2481$class_4610 net/minecraft/nbt/ByteNBT$Cache + m ()[Lnet/minecraft/class_2481; method_23236 func_229674_a_ + f [Lnet/minecraft/class_2481; field_21028 CACHE +c net/minecraft/class_2481$1 net/minecraft/nbt/ByteNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2481; method_23235 readNBT +c net/minecraft/class_2483 net/minecraft/nbt/CollectionNBT + m (I)Ljava/lang/Object; remove remove + m (I)Lnet/minecraft/class_2520; method_10536 remove + m (ILnet/minecraft/class_2520;)Z method_10533 addNBTByIndex + m ()B method_10601 getTagType + m (ILnet/minecraft/class_2520;)V method_10531 add + m (ILjava/lang/Object;)V add add + m (ILnet/minecraft/class_2520;)Z method_10535 setNBTByIndex + m (ILjava/lang/Object;)Ljava/lang/Object; set set + m (ILnet/minecraft/class_2520;)Lnet/minecraft/class_2520; method_10606 set +c net/minecraft/class_2487 net/minecraft/nbt/CompoundNBT + m (Lnet/minecraft/class_4614;Ljava/lang/String;Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2520; method_23238 func_229678_a_ + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_10543 merge + m (Ljava/lang/String;Z)V method_10556 putBoolean + m (Ljava/lang/String;)D method_10574 getDouble + m (Ljava/lang/String;)J method_10537 getLong + m (Ljava/lang/String;)Z method_10545 contains + m ()I hashCode hashCode + m (Ljava/lang/String;)S method_10568 getShort + m ()Z isEmpty isEmpty + m (Ljava/lang/String;Ljava/util/List;)V method_10572 putIntArray + m (Ljava/lang/String;)[B method_10547 getByteArray + m (Ljava/lang/String;I)Z method_10573 contains + m (Ljava/io/DataInput;Lnet/minecraft/class_2505;)Ljava/lang/String; method_23239 func_229679_b_ + m (Ljava/lang/String;[J)V method_10564 putLongArray + m (Ljava/lang/String;)[I method_10561 getIntArray + m (Ljava/lang/String;I)Lnet/minecraft/class_2499; method_10554 getList + m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_10557 getNameComponent + m (Ljava/lang/String;)Lnet/minecraft/class_2487; method_10562 getCompound + m ()Lnet/minecraft/class_2487; method_10553 copy + m (Ljava/lang/String;)Ljava/util/UUID; method_25926 getUniqueId + m (Ljava/io/DataInput;Lnet/minecraft/class_2505;)Ljava/lang/String; method_10552 readKey + m ()Ljava/util/Set; method_10541 keySet + m (Ljava/lang/String;)Lnet/minecraft/class_2520; method_10580 get + m (Ljava/lang/String;)V method_10551 remove + m (Ljava/lang/String;[B)V method_10570 putByteArray + m (Ljava/lang/String;B)V method_10567 putByte + m (Ljava/lang/String;)B method_10571 getByte + m (Lnet/minecraft/class_4614;Ljava/lang/String;Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2520; method_10581 loadNBT + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_29141 func_240598_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_10579 func_240601_u_ + m (Ljava/lang/String;D)V method_10549 putDouble + m (Ljava/lang/String;)Ljava/lang/String; method_10578 handleEscape + m (Ljava/lang/String;Lnet/minecraft/class_2520;Ljava/io/DataOutput;)V method_10555 writeEntry + m (Ljava/lang/String;)I method_10550 getInt + m (Ljava/lang/String;)Z method_25928 hasUniqueId + m (Ljava/io/DataInput;Lnet/minecraft/class_2505;)B method_23237 func_229676_a_ + m (Ljava/lang/String;)F method_10583 getFloat + m (Ljava/lang/String;Ljava/util/List;)V method_10538 putLongArray + m (Ljava/lang/String;S)V method_10575 putShort + m ()I method_10546 size + m (Ljava/lang/String;)Ljava/lang/String; method_10558 getString + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/util/Map; method_29143 getTagMap + m (Ljava/lang/String;[I)V method_10539 putIntArray + m (Ljava/io/DataInput;Lnet/minecraft/class_2505;)B method_10542 readType + m (Lnet/minecraft/class_2487;)Lcom/mojang/serialization/Dynamic; method_29142 func_240599_b_ + m (Ljava/lang/String;Lnet/minecraft/class_2520;)Lnet/minecraft/class_2520; method_10566 put + m (Ljava/lang/String;Ljava/util/UUID;)V method_25927 putUniqueId + m (Ljava/lang/String;)[J method_10565 getLongArray + m (Ljava/lang/String;Ljava/lang/String;)V method_10582 putString + m (Ljava/lang/String;F)V method_10548 putFloat + m (Ljava/lang/String;I)V method_10569 putInt + m (Ljava/lang/String;J)V method_10544 putLong + m (Ljava/lang/String;)Z method_10577 getBoolean + m (Ljava/lang/String;)B method_10540 getTagId + m (Ljava/lang/String;Lnet/minecraft/class_4614;Ljava/lang/ClassCastException;)Lnet/minecraft/class_128; method_10559 generateCrashReport + f Lorg/apache/logging/log4j/Logger; field_11514 LOGGER + f Lcom/mojang/serialization/Codec; field_25128 CODEC + f Lnet/minecraft/class_4614; field_21029 TYPE + f Ljava/util/regex/Pattern; field_11516 SIMPLE_VALUE + f Ljava/util/Map; field_11515 tagMap +c net/minecraft/class_2487$1 net/minecraft/nbt/CompoundNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2487; method_23240 readNBT +c net/minecraft/class_2489 net/minecraft/nbt/DoubleNBT + m ()Lnet/minecraft/class_2489; method_10585 copy + m (D)Lnet/minecraft/class_2489; method_23241 valueOf + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + f D field_11520 data + f Lnet/minecraft/class_4614; field_21031 TYPE + f Lnet/minecraft/class_2489; field_21030 ZERO +c net/minecraft/class_2489$1 net/minecraft/nbt/DoubleNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2489; method_23242 readNBT +c net/minecraft/class_2491 net/minecraft/nbt/EndNBT + m ()Lnet/minecraft/class_2491; method_10586 copy + f Lnet/minecraft/class_4614; field_21032 TYPE + f Lnet/minecraft/class_2491; field_21033 INSTANCE +c net/minecraft/class_2491$1 net/minecraft/nbt/EndNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2491; method_23243 readNBT +c net/minecraft/class_2494 net/minecraft/nbt/FloatNBT + m (F)Lnet/minecraft/class_2494; method_23244 valueOf + m ()Lnet/minecraft/class_2494; method_10587 copy + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + f Lnet/minecraft/class_4614; field_21035 TYPE + f F field_11523 data + f Lnet/minecraft/class_2494; field_21034 ZERO +c net/minecraft/class_2494$1 net/minecraft/nbt/FloatNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2494; method_23245 readNBT +c net/minecraft/class_2495 net/minecraft/nbt/IntArrayNBT + m (Ljava/lang/Object;)Z equals equals + m (Ljava/util/List;)[I method_10590 toArray + m ()V clear clear + m ()I size size + m ()Lnet/minecraft/class_2495; method_10591 copy + m ()[I method_10588 getIntArray + m (I)Lnet/minecraft/class_2497; method_10589 get + m ()I hashCode hashCode + m (I)Ljava/lang/Object; get get + m (ILnet/minecraft/class_2497;)V method_17808 add + m (ILnet/minecraft/class_2497;)Lnet/minecraft/class_2497; method_17806 set + m (I)Lnet/minecraft/class_2497; method_17807 remove + f Lnet/minecraft/class_4614; field_21036 TYPE + f [I field_11524 intArray +c net/minecraft/class_2495$1 net/minecraft/nbt/IntArrayNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2495; method_23246 readNBT +c net/minecraft/class_2497 net/minecraft/nbt/IntNBT + m (Ljava/lang/Object;)Z equals equals + m ()Lnet/minecraft/class_2497; method_10592 copy + m (I)Lnet/minecraft/class_2497; method_23247 valueOf + m ()I hashCode hashCode + f I field_11525 data + f Lnet/minecraft/class_4614; field_21037 TYPE +c net/minecraft/class_2497$class_4611 net/minecraft/nbt/IntNBT$Cache + f [Lnet/minecraft/class_2497; field_21038 CACHE +c net/minecraft/class_2497$1 net/minecraft/nbt/IntNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2497; method_23248 readNBT +c net/minecraft/class_2499 net/minecraft/nbt/ListNBT + m ()I hashCode hashCode + m ()V method_17809 checkEmpty + m (I)Ljava/lang/String; method_10608 getString + m (I)Ljava/lang/Object; get get + m (Ljava/lang/Object;)Z equals equals + m (I)I method_10600 getInt + m (I)Lnet/minecraft/class_2487; method_10602 getCompound + m ()Z isEmpty isEmpty + m (I)D method_10611 getDouble + m (I)Lnet/minecraft/class_2499; method_10603 getList + m (I)F method_10604 getFloat + m (I)[I method_10610 getIntArray + m (I)S method_10609 getShort + m ()I size size + m (Lnet/minecraft/class_2520;)Z method_10605 canInsert + m ()V clear clear + m (I)Lnet/minecraft/class_2520; method_10534 get + m ()Lnet/minecraft/class_2499; method_10612 copy + f Ljava/util/List; field_11550 tagList + f B field_11551 tagType + f Lnet/minecraft/class_4614; field_21039 TYPE + f Lit/unimi/dsi/fastutil/bytes/ByteSet; field_21461 typeSet +c net/minecraft/class_2499$1 net/minecraft/nbt/ListNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2499; method_23249 readNBT +c net/minecraft/class_2501 net/minecraft/nbt/LongArrayNBT + m ()V clear clear + m (Ljava/lang/Object;)Z equals equals + m ()Lnet/minecraft/class_2501; method_10618 copy + m ()I hashCode hashCode + m (Ljava/util/List;)[J method_10617 toArray + m (ILnet/minecraft/class_2503;)Lnet/minecraft/class_2503; method_17810 set + m ()[J method_10615 getAsLongArray + m (I)Lnet/minecraft/class_2503; method_10616 get + m ()I size size + m (ILnet/minecraft/class_2503;)V method_17812 add + m (I)Lnet/minecraft/class_2503; method_17811 remove + m (I)Ljava/lang/Object; get get + f Lnet/minecraft/class_4614; field_21040 TYPE + f [J field_11552 data +c net/minecraft/class_2501$1 net/minecraft/nbt/LongArrayNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2501; method_23250 readNBT +c net/minecraft/class_2503 net/minecraft/nbt/LongNBT + m (Ljava/lang/Object;)Z equals equals + m ()Lnet/minecraft/class_2503; method_10621 copy + m (J)Lnet/minecraft/class_2503; method_23251 valueOf + m ()I hashCode hashCode + f J field_11553 data + f Lnet/minecraft/class_4614; field_21041 TYPE +c net/minecraft/class_2503$class_4612 net/minecraft/nbt/LongNBT$Cache + f [Lnet/minecraft/class_2503; field_21042 CACHE +c net/minecraft/class_2503$1 net/minecraft/nbt/LongNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2503; method_23252 readNBT +c net/minecraft/class_2505 net/minecraft/nbt/NBTSizeTracker + m (J)V method_10623 read + f J field_11557 max + f Lnet/minecraft/class_2505; field_11556 INFINITE + f J field_11555 read +c net/minecraft/class_2505$1 net/minecraft/nbt/NBTSizeTracker$1 +c net/minecraft/class_2507 net/minecraft/nbt/CompressedStreamTools + m (Ljava/io/File;)Lnet/minecraft/class_2487; method_30613 readCompressed + m (Lnet/minecraft/class_2487;Ljava/io/OutputStream;)V method_10634 writeCompressed + m (Ljava/io/InputStream;)Lnet/minecraft/class_2487; method_10629 readCompressed + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2520; method_10626 read + m (Lnet/minecraft/class_2487;Ljava/io/File;)V method_10630 write + m (Ljava/io/File;)Lnet/minecraft/class_2487; method_10633 read + m (Ljava/io/DataInput;)Lnet/minecraft/class_2487; method_10627 read + m (Lnet/minecraft/class_2520;Ljava/io/DataOutput;)V method_10631 writeTag + m (Lnet/minecraft/class_2487;Ljava/io/DataOutput;)V method_10628 write + m (Lnet/minecraft/class_2487;Ljava/io/File;)V method_30614 writeCompressed + m (Ljava/io/DataInput;Lnet/minecraft/class_2505;)Lnet/minecraft/class_2487; method_10625 read +c net/minecraft/class_2509 net/minecraft/nbt/NBTDynamicOps + m (J)Ljava/lang/Object; createLong createLong + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMapEntries getMapEntries + m (S)Ljava/lang/Object; createShort createShort + m (J)Lnet/minecraft/class_2520; method_10654 createLong + m (Lnet/minecraft/class_2487;Ljava/util/function/BiConsumer;)V method_29153 func_240612_a_ + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getByteBuffer getByteBuffer + m (F)Lnet/minecraft/class_2520; method_10662 createFloat + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getStream getStream + m (Lnet/minecraft/class_2483;Lnet/minecraft/class_2520;)V method_29149 func_240607_a_ + m (Lnet/minecraft/class_2520;)Lnet/minecraft/class_2520; method_10667 func_240621_n_ + m (Lnet/minecraft/class_2520;)Ljava/lang/Byte; method_10659 func_210815_m_ + m (Ljava/util/stream/LongStream;)Ljava/lang/Object; createLongList createLongList + m (D)Lnet/minecraft/class_2520; method_10652 createDouble + m (Ljava/util/stream/IntStream;)Lnet/minecraft/class_2520; method_10663 createIntList + m (Ljava/util/stream/Stream;)Lnet/minecraft/class_2520; method_10665 createList + m (Lnet/minecraft/class_2520;)Ljava/lang/Long; method_10649 func_210816_k_ + m (Ljava/lang/String;)Lnet/minecraft/class_2520; method_10639 createString + m (B)Lnet/minecraft/class_2520; method_10640 createByte + m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29156 mergeToList + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; mergeToList mergeToList + m (Lnet/minecraft/class_2483;Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;)V method_29151 func_240609_a_ + m (Ljava/util/function/BiConsumer;Lnet/minecraft/class_2487;Ljava/lang/String;)V method_29148 func_240606_a_ + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10637 getLongStream + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2487;Ljava/lang/String;)V method_29159 func_240615_b_ + m (Ljava/nio/ByteBuffer;)Ljava/lang/Object; createByteList createByteList + m (D)Ljava/lang/Object; createDouble createDouble + m (Lnet/minecraft/class_2520;Ljava/util/List;)Lcom/mojang/serialization/DataResult; method_29155 mergeToList + m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10646 getByteBuffer + m (Lnet/minecraft/class_2483;Lnet/minecraft/class_2520;)V method_29160 func_240616_c_ + m (Ljava/util/List;Lnet/minecraft/class_2487;Lcom/mojang/datafixers/util/Pair;)V method_29147 func_240605_a_ + m (Ljava/lang/Number;)Lnet/minecraft/class_2520; method_10660 createNumeric + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getStringValue getStringValue + m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29162 getMapEntries + m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10664 getStream + m (Lnet/minecraft/class_2520;Ljava/lang/String;)Lnet/minecraft/class_2520; method_10648 remove + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMap getMap + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; convertTo convertTo + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getNumberValue getNumberValue + m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10656 getStringValue + m (Lnet/minecraft/class_2520;Lcom/mojang/serialization/MapLike;)Lcom/mojang/serialization/DataResult; method_29154 mergeToMap + m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; mergeToMap mergeToMap + m (Ljava/util/stream/IntStream;)Ljava/lang/Object; createIntList createIntList + m (Ljava/lang/Object;Lcom/mojang/serialization/MapLike;)Lcom/mojang/serialization/DataResult; mergeToMap mergeToMap + m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29157 mergeToMap + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMapValues getMapValues + m (I)Lnet/minecraft/class_2520; method_10661 createInt + m (Lnet/minecraft/class_2520;)Ljava/lang/Integer; method_10658 func_210818_l_ + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getList getList + m ()Ljava/lang/Object; empty empty + m (Lnet/minecraft/class_2483;Lnet/minecraft/class_2520;Ljava/util/List;)V method_29150 func_240608_a_ + m (Ljava/nio/ByteBuffer;)Lnet/minecraft/class_2520; method_10657 createByteList + m (I)Ljava/lang/Object; createInt createInt + m (BB)Lnet/minecraft/class_2483; method_29144 func_240602_a_ + m (B)Ljava/lang/Object; createByte createByte + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getLongStream getLongStream + m (F)Ljava/lang/Object; createFloat createFloat + m (Ljava/lang/String;Ljava/lang/String;)Z method_10666 func_212019_a_ + m (Z)Lnet/minecraft/class_2520; method_23253 createBoolean + m (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; remove remove + m (Lnet/minecraft/class_2487;Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair; method_10638 func_240611_a_ + m (Z)Ljava/lang/Object; createBoolean createBoolean + m (Ljava/util/stream/Stream;)Lnet/minecraft/class_2520; method_10655 createMap + m (Ljava/util/stream/LongStream;)Lnet/minecraft/class_2520; method_10643 createLongList + m (Ljava/util/stream/Stream;)Ljava/lang/Object; createMap createMap + m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10651 getIntStream + m (BBB)Z method_29145 func_240603_a_ + m (Ljava/lang/Object;Ljava/util/List;)Lcom/mojang/serialization/DataResult; mergeToList mergeToList + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2487;Ljava/lang/String;)V method_10670 func_212010_a_ + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getIntStream getIntStream + m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29164 getList + m (Lnet/minecraft/class_2487;Lcom/mojang/datafixers/util/Pair;)V method_29152 func_240610_a_ + m (S)Lnet/minecraft/class_2520; method_10635 createShort + m (Ljava/util/stream/Stream;)Ljava/lang/Object; createList createList + m (Ljava/lang/Number;)Ljava/lang/Object; createNumeric createNumeric + m (Lnet/minecraft/class_2483;Lnet/minecraft/class_2520;)V method_29158 func_240614_b_ + m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29163 getMap + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_2520;)Ljava/lang/Object; method_29146 convertTo + m ()Lcom/mojang/serialization/RecordBuilder; mapBuilder mapBuilder + m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10645 getNumberValue + m ()Lnet/minecraft/class_2520; method_10668 empty + m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10669 getMapValues + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2487;Ljava/lang/String;)V method_29161 func_240617_c_ + m (Ljava/lang/String;)Ljava/lang/Object; createString createString + f Lnet/minecraft/class_2509; field_11560 INSTANCE +c net/minecraft/class_2509$1 net/minecraft/nbt/NBTDynamicOps$1 + m (Ljava/lang/String;)Ljava/lang/Object; get get + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;)Lnet/minecraft/class_2520; method_29165 get + m ()Ljava/util/stream/Stream; entries entries + m (Ljava/lang/Object;)Ljava/lang/Object; get get + m (Lnet/minecraft/class_2520;)Lnet/minecraft/class_2520; method_29167 get + m (Lnet/minecraft/class_2487;Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair; method_29166 func_240624_a_ + f Lnet/minecraft/class_2487; field_25129 field_240622_a_ + f Lnet/minecraft/class_2509; field_25130 field_240623_b_ +c net/minecraft/class_2509$class_5320 net/minecraft/nbt/NBTDynamicOps$NBTRecordBuilder + m (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; append append + m ()Ljava/lang/Object; initBuilder initBuilder + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; build build + m ()Lnet/minecraft/class_2487; method_29168 initBuilder + m (Ljava/lang/String;Lnet/minecraft/class_2520;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_29169 append + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29170 build + f Lnet/minecraft/class_2509; field_25131 field_240625_a_ +c net/minecraft/class_2512 net/minecraft/nbt/NBTUtil + m (Lnet/minecraft/class_2520;)Ljava/util/UUID; method_25930 readUniqueId + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2487; method_10692 writeBlockPos + m (Ljava/util/UUID;)Lnet/minecraft/class_2495; method_25929 func_240626_a_ + m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/lang/String; method_10685 getName + m (Lnet/minecraft/class_2487;)Lcom/mojang/authlib/GameProfile; method_10683 readGameProfile + m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;Z)Z method_10687 areNBTEquals + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2487; method_10686 writeBlockState + m (Lnet/minecraft/class_2487;Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/class_2487; method_10684 writeGameProfile + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2338; method_10691 readBlockPos + m (Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/class_4284;Lnet/minecraft/class_2487;II)Lnet/minecraft/class_2487; method_10693 update + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2680; method_10681 readBlockState + m (Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/class_4284;Lnet/minecraft/class_2487;I)Lnet/minecraft/class_2487; method_10688 update + m (Lnet/minecraft/class_2688;Lnet/minecraft/class_2769;Ljava/lang/String;Lnet/minecraft/class_2487;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2688; method_10682 setValueHelper + f Lorg/apache/logging/log4j/Logger; field_11582 LOGGER +c net/minecraft/class_2514 net/minecraft/nbt/NumberNBT + m ()S method_10696 getShort + m ()Ljava/lang/Number; method_10702 getAsNumber + m ()I method_10701 getInt + m ()B method_10698 getByte + m ()J method_10699 getLong + m ()D method_10697 getDouble + m ()F method_10700 getFloat +c net/minecraft/class_2516 net/minecraft/nbt/ShortNBT + m (Ljava/lang/Object;)Z equals equals + m ()Lnet/minecraft/class_2516; method_10704 copy + m ()I hashCode hashCode + m (S)Lnet/minecraft/class_2516; method_23254 valueOf + f S field_11588 data + f Lnet/minecraft/class_4614; field_21043 TYPE +c net/minecraft/class_2516$class_4613 net/minecraft/nbt/ShortNBT$Cache + f [Lnet/minecraft/class_2516; field_21044 CACHE +c net/minecraft/class_2516$1 net/minecraft/nbt/ShortNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2516; method_23255 readNBT +c net/minecraft/class_2519 net/minecraft/nbt/StringNBT + m (Ljava/lang/String;)Lnet/minecraft/class_2519; method_23256 valueOf + m ()Lnet/minecraft/class_2519; method_10705 copy + m (Ljava/lang/String;)Ljava/lang/String; method_10706 quoteAndEscape + m (Ljava/lang/Object;)Z equals equals + m ()I hashCode hashCode + f Lnet/minecraft/class_4614; field_21045 TYPE + f Lnet/minecraft/class_2519; field_21046 EMPTY_STRING + f Ljava/lang/String; field_11590 data +c net/minecraft/class_2519$1 net/minecraft/nbt/StringNBT$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2519; method_23257 readNBT +c net/minecraft/class_2520 net/minecraft/nbt/INBT + m ()Ljava/lang/String; toString toString + m ()Ljava/lang/String; method_10714 getString + m (Ljava/io/DataOutput;)V method_10713 write + m ()Lnet/minecraft/class_4614; method_23258 getType + m (Ljava/lang/String;I)Lnet/minecraft/class_2561; method_10710 toFormattedComponent + m ()Lnet/minecraft/class_2561; method_10715 toFormattedComponent + m ()Lnet/minecraft/class_2520; method_10707 copy + m ()B method_10711 getId + f Lnet/minecraft/class_124; field_11594 SYNTAX_HIGHLIGHTING_STRING + f Lnet/minecraft/class_124; field_11591 SYNTAX_HIGHLIGHTING_KEY + f Lnet/minecraft/class_124; field_11593 SYNTAX_HIGHLIGHTING_NUMBER + f Lnet/minecraft/class_124; field_11595 SYNTAX_HIGHLIGHTING_NUMBER_TYPE +c net/minecraft/class_2522 net/minecraft/nbt/JsonToNBT + m (Lnet/minecraft/class_4614;Lnet/minecraft/class_4614;)Ljava/util/List; method_10728 getNumberList + m ()Ljava/lang/String; method_10725 readKey + m ()Z method_10716 hasElementSeparator + m (Ljava/lang/String;)Lnet/minecraft/class_2520; method_10731 type + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_10724 func_208774_a + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_10730 func_208775_b + m (C)V method_10719 expect + m ()Lnet/minecraft/class_2487; method_10727 readStruct + m (Ljava/lang/String;)Lnet/minecraft/class_2487; method_10718 getTagFromJson + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_10720 func_208773_a + m ()Lnet/minecraft/class_2487; method_10721 readSingleStruct + m ()Lnet/minecraft/class_2520; method_10729 readListTag + m ()Lnet/minecraft/class_2520; method_10726 readArrayTag + m ()Lnet/minecraft/class_2520; method_10722 readTypedValue + m ()Lnet/minecraft/class_2520; method_10723 readValue + m ()Lnet/minecraft/class_2520; method_10717 readList + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_11605 ERROR_EXPECTED_VALUE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_11608 ERROR_EXPECTED_KEY + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_11602 ERROR_TRAILING_DATA + f Ljava/util/regex/Pattern; field_11607 DOUBLE_PATTERN_NOSUFFIX + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_11603 ERROR_INSERT_MIXED_LIST + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_11597 ERROR_INSERT_MIXED_ARRAY + f Ljava/util/regex/Pattern; field_11596 FLOAT_PATTERN + f Ljava/util/regex/Pattern; field_11600 DOUBLE_PATTERN + f Ljava/util/regex/Pattern; field_11601 SHORT_PATTERN + f Ljava/util/regex/Pattern; field_11609 LONG_PATTERN + f Ljava/util/regex/Pattern; field_11606 BYTE_PATTERN + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_11604 ERROR_INVALID_ARRAY + f Ljava/util/regex/Pattern; field_11599 INT_PATTERN + f Lcom/mojang/brigadier/StringReader; field_11598 reader +c net/minecraft/class_4614 net/minecraft/nbt/INBTType + m ()Ljava/lang/String; method_23259 getName + m ()Ljava/lang/String; method_23261 getTagName + m (I)Lnet/minecraft/class_4614; method_23260 getEndNBT + m ()Z method_23263 isPrimitive + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2520; method_23262 readNBT +c net/minecraft/class_4614$1 net/minecraft/nbt/INBTType$1 + m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2491; method_23264 readNBT + f I field_21047 field_229708_a_ +c net/minecraft/class_4615 net/minecraft/nbt/NBTTypes + m (I)Lnet/minecraft/class_4614; method_23265 getGetTypeByID + f [Lnet/minecraft/class_4614; field_21048 TYPES +c net/minecraft/class_2524 net/minecraft/network/NettyEncryptionTranslator + m (Lio/netty/buffer/ByteBuf;)[B method_10733 bufToBytes + m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;)Lio/netty/buffer/ByteBuf; method_10734 decipher + m (Lio/netty/buffer/ByteBuf;Lio/netty/buffer/ByteBuf;)V method_10732 cipher + f [B field_11613 inputBuffer + f [B field_11614 outputBuffer + f Ljavax/crypto/Cipher; field_11612 cipher +c net/minecraft/class_2528 net/minecraft/network/NettyEncryptingDecoder + m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List;)V method_10735 decode + m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Ljava/util/List;)V decode decode + f Lnet/minecraft/class_2524; field_11619 decryptionCodec +c net/minecraft/class_2529 net/minecraft/network/NettyEncryptingEncoder + m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Lio/netty/buffer/ByteBuf;)V encode encode + m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Lio/netty/buffer/ByteBuf;)V method_10736 encode + f Lnet/minecraft/class_2524; field_11620 encryptionCodec +c net/minecraft/class_2532 net/minecraft/network/NettyCompressionDecoder + m (I)V method_10739 setCompressionThreshold + m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List;)V decode decode + f Ljava/util/zip/Inflater; field_11622 inflater + f I field_11623 threshold +c net/minecraft/class_2534 net/minecraft/network/NettyCompressionEncoder + m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Lio/netty/buffer/ByteBuf;)V encode encode + m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Lio/netty/buffer/ByteBuf;)V method_10741 encode + m (I)V method_10742 setCompressionThreshold + f Ljava/util/zip/Deflater; field_11638 deflater + f [B field_11637 buffer + f I field_11636 threshold +c net/minecraft/class_2535 net/minecraft/network/NetworkManager + m (Lnet/minecraft/class_2539;)V method_10750 setConnectionState + m (Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/class_2596;)V method_10770 channelRead0 + m (Lnet/minecraft/class_2596;)V method_10743 sendPacket + m (Lnet/minecraft/class_2561;)V method_10747 closeChannel + m ()F method_10745 getPacketsSent + m (Lnet/minecraft/class_2539;Lnet/minecraft/class_2539;Lnet/minecraft/class_2596;Lio/netty/util/concurrent/GenericFutureListener;)V method_10761 func_211392_a + m ()Z method_10772 hasNoChannel + m (Lio/netty/channel/ChannelHandlerContext;)V channelActive channelActive + m ()V method_10768 handleDisconnection + m ()Lnet/minecraft/class_2561; method_10748 getExitMessage + m ()Lio/netty/channel/DefaultEventLoopGroup; method_10766 func_201057_n + m ()Z method_10771 isEncrypted + m (Ljava/net/InetAddress;IZ)Lnet/minecraft/class_2535; method_10753 createNetworkManagerAndConnect + m (Lnet/minecraft/class_2547;)V method_10763 setNetHandler + m ()V method_10754 tick + m (Ljavax/crypto/SecretKey;)V method_10746 enableEncryption + m (Lnet/minecraft/class_2596;Lio/netty/util/concurrent/GenericFutureListener;)V method_10752 sendPacket + m (Lnet/minecraft/class_2596;Lnet/minecraft/class_2547;)V method_10759 processPacket + m (Lnet/minecraft/class_2561;Lio/netty/util/concurrent/Future;)V method_10749 func_211391_a + m ()V method_10751 flushOutboundQueue + m ()Lnet/minecraft/class_2547; method_10744 getNetHandler + m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Throwable;)V exceptionCaught exceptionCaught + m (Lio/netty/channel/ChannelHandlerContext;)V channelInactive channelInactive + m (I)V method_10760 setCompressionThreshold + m ()V method_10757 disableAutoRead + m ()Z method_10756 isLocalChannel + m ()Lio/netty/channel/nio/NioEventLoopGroup; method_10767 func_201061_p + m ()Ljava/net/SocketAddress; method_10755 getRemoteAddress + m ()F method_10762 getPacketsReceived + m ()Z method_10758 isChannelOpen + m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;)V channelRead0 channelRead0 + m (Ljava/net/SocketAddress;)Lnet/minecraft/class_2535; method_10769 provideLocalClient + m (Lnet/minecraft/class_2596;Lio/netty/util/concurrent/GenericFutureListener;)V method_10764 dispatchPacket + m ()V method_30615 func_241877_b + m ()Lio/netty/channel/epoll/EpollEventLoopGroup; method_10765 func_201060_o + f Lnet/minecraft/class_2547; field_11652 packetListener + f Z field_11647 isEncrypted + f Lorg/apache/logging/log4j/Logger; field_11642 LOGGER + f I field_11655 ticks + f Lnet/minecraft/class_2598; field_11643 direction + f Lnet/minecraft/class_3528; field_11657 CLIENT_EPOLL_EVENTLOOP + f F field_11654 field_211396_s + f Ljava/net/SocketAddress; field_11645 socketAddress + f I field_11658 field_211394_q + f Lorg/apache/logging/log4j/Marker; field_11641 NETWORK_MARKER + f Lio/netty/util/AttributeKey; field_11648 PROTOCOL_ATTRIBUTE_KEY + f Lio/netty/channel/Channel; field_11651 channel + f Z field_11640 field_211399_v + f F field_11653 field_211397_t + f Ljava/util/Queue; field_11644 outboundPacketsQueue + f Z field_11646 disconnected + f Lnet/minecraft/class_3528; field_11650 CLIENT_NIO_EVENTLOOP + f I field_11656 field_211395_r + f Lnet/minecraft/class_3528; field_11649 CLIENT_LOCAL_EVENTLOOP + f Lnet/minecraft/class_2561; field_11660 terminationReason + f Lorg/apache/logging/log4j/Marker; field_11639 NETWORK_PACKETS_MARKER +c net/minecraft/class_2535$class_2536 net/minecraft/network/NetworkManager$QueuedPacket + m (Lnet/minecraft/class_2535$class_2536;)Lnet/minecraft/class_2596; method_10773 func_210341_a + m (Lnet/minecraft/class_2535$class_2536;)Lio/netty/util/concurrent/GenericFutureListener; method_10774 func_210340_b + f Lio/netty/util/concurrent/GenericFutureListener; field_11662 field_201049_b + f Lnet/minecraft/class_2596; field_11661 packet +c net/minecraft/class_2535$1 net/minecraft/network/NetworkManager$1 + m (Lio/netty/channel/Channel;)V initChannel initChannel + f Lnet/minecraft/class_2535; field_11663 field_210342_a +c net/minecraft/class_2535$2 net/minecraft/network/NetworkManager$2 + m (Lio/netty/channel/Channel;)V initChannel initChannel + f Lnet/minecraft/class_2535; field_11664 field_201055_a +c net/minecraft/class_2539 net/minecraft/network/ProtocolType + m (Lnet/minecraft/class_2598;Lnet/minecraft/class_2596;)Ljava/lang/Integer; method_10781 getPacketId + m (Lnet/minecraft/class_2598;I)Lnet/minecraft/class_2596; method_10783 getPacket + m (Ljava/lang/String;)Lnet/minecraft/class_2539; valueOf valueOf + m (Lnet/minecraft/class_2539;Ljava/lang/Class;)V method_22306 func_229712_a_ + m (Lnet/minecraft/class_2596;)Lnet/minecraft/class_2539; method_10786 getFromPacket + m ()Lnet/minecraft/class_2539$class_4533; method_22308 func_229714_b_ + m ()I method_10785 getId + m (Lnet/minecraft/class_2539;Lnet/minecraft/class_2598;Lnet/minecraft/class_2539$class_4532;)V method_22307 func_229713_a_ + m ()[Lnet/minecraft/class_2539; values values + m (I)Lnet/minecraft/class_2539; method_10782 getById + f [Lnet/minecraft/class_2539; field_11694 $VALUES + f Ljava/util/Map; field_20595 field_229711_h_ + f Lnet/minecraft/class_2539; field_20591 PLAY + f Lnet/minecraft/class_2539; field_20592 STATUS + f [Lnet/minecraft/class_2539; field_11693 STATES_BY_ID + f Lnet/minecraft/class_2539; field_20593 LOGIN + f Ljava/util/Map; field_11687 STATES_BY_CLASS + f Lnet/minecraft/class_2539; field_20590 HANDSHAKING + f I field_20594 id +c net/minecraft/class_2539$class_4533 net/minecraft/network/ProtocolType$PacketRegistry + m (Lnet/minecraft/class_2598;Lnet/minecraft/class_2539$class_4532;)Lnet/minecraft/class_2539$class_4533; method_22315 func_229724_a_ + m (Lnet/minecraft/class_2539$class_4533;)Ljava/util/Map; method_22314 func_229723_a_ + f Ljava/util/Map; field_20598 field_229722_a_ +c net/minecraft/class_2539$class_4532 net/minecraft/network/ProtocolType$PacketList + m (I)Lnet/minecraft/class_2596; method_22310 func_229718_a_ + m (Ljava/lang/Class;Ljava/util/function/Supplier;)Lnet/minecraft/class_2539$class_4532; method_22313 func_229721_a_ + m ()Ljava/lang/Iterable; method_22309 func_229717_a_ + m (Ljava/lang/Class;)Ljava/lang/Integer; method_22312 func_229720_a_ + m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_22311 func_229719_a_ + f Ljava/util/List; field_20597 field_229716_b_ + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_20596 field_229715_a_ +c net/minecraft/class_2539$1 net/minecraft/network/ProtocolType$1 +c net/minecraft/class_2540 net/minecraft/network/PacketBuffer + m (II)Lio/netty/buffer/ByteBuf; setZero setZero + m (I)Z isWritable isWritable + m ()Lio/netty/buffer/ByteBuf; slice slice + m (I)I getUnsignedMedium getUnsignedMedium + m ()[B array array + m (ILjava/nio/charset/Charset;)Ljava/lang/CharSequence; readCharSequence readCharSequence + m ()Z release release + m (I)I getUnsignedShort getUnsignedShort + m (I)S getShort getShort + m (I)Lio/netty/buffer/ByteBuf; writeShort writeShort + m (I)Lio/netty/buffer/ByteBuf; skipBytes skipBytes + m (Lio/netty/buffer/ByteBuf;)Lio/netty/buffer/ByteBuf; writeBytes writeBytes + m (I)Lio/netty/buffer/ByteBuf; writeMedium writeMedium + m (IJ)Lio/netty/buffer/ByteBuf; setLongLE setLongLE + m (IF)Lio/netty/buffer/ByteBuf; setFloat setFloat + m (Ljava/nio/channels/ScatteringByteChannel;I)I writeBytes writeBytes + m (ILjava/lang/CharSequence;Ljava/nio/charset/Charset;)I setCharSequence setCharSequence + m (II)Lio/netty/buffer/ByteBuf; setInt setInt + m (I)I getUnsignedMediumLE getUnsignedMediumLE + m ()Lio/netty/buffer/ByteBuf; clear clear + m (I)I method_10815 getVarIntSize + m (II)Lio/netty/buffer/ByteBuf; copy copy + m ()Lio/netty/buffer/ByteBuf; touch touch + m (I)Lio/netty/buffer/ByteBuf; writeChar writeChar + m (IILio/netty/util/ByteProcessor;)I forEachByte forEachByte + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2540; method_10812 writeResourceLocation + m (ILjava/nio/ByteBuffer;)Lio/netty/buffer/ByteBuf; setBytes setBytes + m ()[B method_10795 readByteArray + m (I[BII)Lio/netty/buffer/ByteBuf; getBytes getBytes + m (I[B)Lio/netty/buffer/ByteBuf; setBytes setBytes + m (II)Lio/netty/buffer/ByteBuf; setIntLE setIntLE + m (II)Lio/netty/buffer/ByteBuf; retainedSlice retainedSlice + m ([JI)[J method_10809 readLongArray + m (I)Lio/netty/buffer/ByteBuf; ensureWritable ensureWritable + m (I)Lio/netty/buffer/ByteBuf; writeShortLE writeShortLE + m (I)Lio/netty/buffer/ByteBuf; writeZero writeZero + m (I)Lio/netty/buffer/ByteBuf; writeInt writeInt + m ()F readFloat readFloat + m ()Ljava/nio/ByteOrder; order order + m ([J)[J method_10801 readLongArray + m ()Ljava/lang/String; toString toString + m ()S readUnsignedByte readUnsignedByte + m ()Lio/netty/buffer/ByteBuf; markReaderIndex markReaderIndex + m (Ljava/util/UUID;)Lnet/minecraft/class_2540; method_10797 writeUniqueId + m (I)I getInt getInt + m ()Lio/netty/buffer/ByteBuf; retain retain + m (J)Lio/netty/buffer/ByteBuf; writeLong writeLong + m (II)Lio/netty/buffer/ByteBuf; setByte setByte + m (Ljava/lang/String;)Lnet/minecraft/class_2540; method_10814 writeString + m (Ljava/nio/channels/GatheringByteChannel;I)I readBytes readBytes + m (II)Lio/netty/buffer/ByteBuf; setMediumLE setMediumLE + m ()Lio/netty/buffer/ByteBuf; discardReadBytes discardReadBytes + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2540; method_10793 writeItemStack + m ()Z readBoolean readBoolean + m (IB)I bytesBefore bytesBefore + m (Ljava/lang/String;I)Lnet/minecraft/class_2540; method_10788 writeString + m (II)Lio/netty/buffer/ByteBuf; setShortLE setShortLE + m (II)Ljava/nio/ByteBuffer; internalNioBuffer internalNioBuffer + m (ILio/netty/buffer/ByteBuf;)Lio/netty/buffer/ByteBuf; getBytes getBytes + m ()I readUnsignedShortLE readUnsignedShortLE + m ()Lio/netty/buffer/ByteBuf; markWriterIndex markWriterIndex + m (Ljava/nio/charset/Charset;)Ljava/lang/String; toString toString + m ()Lio/netty/buffer/ByteBuf; copy copy + m ()Lio/netty/util/ReferenceCounted; retain retain + m (IILjava/nio/charset/Charset;)Ljava/lang/String; toString toString + m ()Lio/netty/util/ReferenceCounted; touch touch + m (IJ)Lio/netty/buffer/ByteBuf; setLong setLong + m ()Lnet/minecraft/class_4076; method_19456 readSectionPos + m ()Z isReadable isReadable + m ()I readUnsignedMedium readUnsignedMedium + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2540; method_10794 writeCompoundTag + m (I)I getIntLE getIntLE + m ()Lnet/minecraft/class_1799; method_10819 readItemStack + m (I)J getLong getLong + m (II)Lio/netty/buffer/ByteBuf; setIndex setIndex + m ()I maxCapacity maxCapacity + m (ILjava/nio/channels/FileChannel;JI)I getBytes getBytes + m (I)Lio/netty/buffer/ByteBuf; writerIndex writerIndex + m (Lio/netty/buffer/ByteBuf;I)Lio/netty/buffer/ByteBuf; writeBytes writeBytes + m (I)[I method_10799 readVarIntArray + m ()I readMediumLE readMediumLE + m (II)Lio/netty/buffer/ByteBuf; setChar setChar + m (Ljava/lang/Enum;)Lnet/minecraft/class_2540; method_10817 writeEnumValue + m (IIB)I bytesBefore bytesBefore + m (Ljava/io/InputStream;I)I writeBytes writeBytes + m ()Lnet/minecraft/class_2960; method_10810 readResourceLocation + m ()J method_10792 readVarLong + m ()[Ljava/nio/ByteBuffer; nioBuffers nioBuffers + m ()I nioBufferCount nioBufferCount + m ()Lnet/minecraft/class_3965; method_17814 readBlockRay + m (I)Lio/netty/buffer/ByteBuf; writeIntLE writeIntLE + m (I)Lio/netty/buffer/ByteBuf; readRetainedSlice readRetainedSlice + m ()Lio/netty/buffer/ByteBuf; asReadOnly asReadOnly + m (II)Lio/netty/buffer/ByteBuf; setShort setShort + m (Lio/netty/util/ByteProcessor;)I forEachByte forEachByte + m (I)[B method_10803 readByteArray + m ()I maxWritableBytes maxWritableBytes + m ()I refCnt refCnt + m ()S readShortLE readShortLE + m (B)I bytesBefore bytesBefore + m (I)Z release release + m (II)Ljava/nio/ByteBuffer; nioBuffer nioBuffer + m ()Lnet/minecraft/class_2487; method_10798 readCompoundTag + m ()Ljava/util/UUID; method_10790 readUniqueId + m ()Ljava/lang/String; method_19772 readString + m (I)Lio/netty/buffer/ByteBuf; retain retain + m (ILjava/nio/ByteBuffer;)Lio/netty/buffer/ByteBuf; getBytes getBytes + m ()I capacity capacity + m (I[BII)Lio/netty/buffer/ByteBuf; setBytes setBytes + m (IILjava/nio/charset/Charset;)Ljava/lang/CharSequence; getCharSequence getCharSequence + m (Ljava/nio/ByteBuffer;)Lio/netty/buffer/ByteBuf; readBytes readBytes + m ()Lio/netty/buffer/ByteBuf; unwrap unwrap + m ()I method_10816 readVarInt + m (J)Lio/netty/buffer/ByteBuf; writeLongLE writeLongLE + m ()I readerIndex readerIndex + m (II)Lio/netty/buffer/ByteBuf; setMedium setMedium + m ()Z isWritable isWritable + m (IZ)Lio/netty/buffer/ByteBuf; setBoolean setBoolean + m ()I readUnsignedShort readUnsignedShort + m (Lio/netty/buffer/ByteBuf;I)Lio/netty/buffer/ByteBuf; readBytes readBytes + m ()J memoryAddress memoryAddress + m (Lnet/minecraft/class_3965;)V method_17813 writeBlockRay + m ()I readableBytes readableBytes + m (I[B)Lio/netty/buffer/ByteBuf; getBytes getBytes + m (D)Lio/netty/buffer/ByteBuf; writeDouble writeDouble + m ()Lio/netty/buffer/ByteBufAllocator; alloc alloc + m (Ljava/lang/Object;)Z equals equals + m (Ljava/lang/Object;)I compareTo compareTo + m ()B readByte readByte + m (I)J getLongLE getLongLE + m ()S readShort readShort + m ()Lnet/minecraft/class_2487; method_30617 func_244273_m + m (I)C getChar getChar + m ()Z isDirect isDirect + m (I)Lio/netty/buffer/ByteBuf; writeMediumLE writeMediumLE + m ()I readMedium readMedium + m ()Z hasArray hasArray + m (Z)Lio/netty/buffer/ByteBuf; writeBoolean writeBoolean + m ()D readDouble readDouble + m ()I arrayOffset arrayOffset + m ([I)Lnet/minecraft/class_2540; method_10806 writeVarIntArray + m (I)J getUnsignedIntLE getUnsignedIntLE + m (Ljava/nio/channels/FileChannel;JI)I writeBytes writeBytes + m (Ljava/lang/Class;)Ljava/lang/Enum; method_10818 readEnumValue + m ()I readIntLE readIntLE + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2540; method_10807 writeBlockPos + m (I)Lio/netty/buffer/ByteBuf; readBytes readBytes + m ()Lio/netty/buffer/ByteBuf; retainedDuplicate retainedDuplicate + m ()I readInt readInt + m (ILjava/nio/channels/ScatteringByteChannel;I)I setBytes setBytes + m ()Lio/netty/buffer/ByteBuf; duplicate duplicate + m (Ljava/io/OutputStream;I)Lio/netty/buffer/ByteBuf; readBytes readBytes + m ()I writerIndex writerIndex + m (Ljava/nio/channels/FileChannel;JI)I readBytes readBytes + m ()Lnet/minecraft/class_2338; method_10811 readBlockPos + m ()Lio/netty/buffer/ByteBuf; discardSomeReadBytes discardSomeReadBytes + m (I)Lio/netty/buffer/ByteBuf; readerIndex readerIndex + m ()I writableBytes writableBytes + m (I)Lio/netty/buffer/ByteBuf; capacity capacity + m (Ljava/util/Date;)Lnet/minecraft/class_2540; method_10796 writeTime + m (Lcom/mojang/serialization/Codec;)Ljava/lang/Object; method_29171 func_240628_a_ + m (I)F getFloat getFloat + m (ILio/netty/buffer/ByteBuf;I)Lio/netty/buffer/ByteBuf; getBytes getBytes + m ()J readUnsignedInt readUnsignedInt + m (I)S getShortLE getShortLE + m (Lio/netty/buffer/ByteBuf;)Lio/netty/buffer/ByteBuf; readBytes readBytes + m (Ljava/lang/Object;)Lio/netty/util/ReferenceCounted; touch touch + m ()J readLongLE readLongLE + m ()Z hasMemoryAddress hasMemoryAddress + m (I)I getMediumLE getMediumLE + m (ILjava/nio/channels/FileChannel;JI)I setBytes setBytes + m (I)J getUnsignedInt getUnsignedInt + m (I)S getUnsignedByte getUnsignedByte + m (Ljava/nio/ByteBuffer;)Lio/netty/buffer/ByteBuf; writeBytes writeBytes + m (IZ)I ensureWritable ensureWritable + m ()Z isReadOnly isReadOnly + m (Ljava/nio/ByteOrder;)Lio/netty/buffer/ByteBuf; order order + m (Lio/netty/util/ByteProcessor;)I forEachByteDesc forEachByteDesc + m ()Lnet/minecraft/class_2561; method_10808 readTextComponent + m (IILio/netty/util/ByteProcessor;)I forEachByteDesc forEachByteDesc + m (I)Z isReadable isReadable + m (I)D getDouble getDouble + m (J)Lnet/minecraft/class_2540; method_10791 writeVarLong + m ()I readUnsignedMediumLE readUnsignedMediumLE + m ()I hashCode hashCode + m (I)I getUnsignedShortLE getUnsignedShortLE + m (I)B getByte getByte + m ()J readUnsignedIntLE readUnsignedIntLE + m (ILjava/nio/channels/GatheringByteChannel;I)I getBytes getBytes + m ([B)Lnet/minecraft/class_2540; method_10813 writeByteArray + m (I)Lio/netty/buffer/ByteBuf; readSlice readSlice + m (II)[Ljava/nio/ByteBuffer; nioBuffers nioBuffers + m (ILio/netty/buffer/ByteBuf;)Lio/netty/buffer/ByteBuf; setBytes setBytes + m ()Lio/netty/buffer/ByteBuf; resetWriterIndex resetWriterIndex + m (I)Ljava/lang/String; method_10800 readString + m (I)Lio/netty/buffer/ByteBuf; writeByte writeByte + m (I)I getMedium getMedium + m (ILio/netty/buffer/ByteBuf;II)Lio/netty/buffer/ByteBuf; setBytes setBytes + m ()Ljava/nio/ByteBuffer; nioBuffer nioBuffer + m (Lio/netty/buffer/ByteBuf;II)Lio/netty/buffer/ByteBuf; writeBytes writeBytes + m (Lio/netty/buffer/ByteBuf;)I compareTo compareTo + m (Lcom/mojang/serialization/Codec;Ljava/lang/Object;)V method_29172 func_240629_a_ + m ([BII)Lio/netty/buffer/ByteBuf; writeBytes writeBytes + m ([BII)Lio/netty/buffer/ByteBuf; readBytes readBytes + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2540; method_10805 writeTextComponent + m (ILio/netty/buffer/ByteBuf;I)Lio/netty/buffer/ByteBuf; setBytes setBytes + m (ILio/netty/buffer/ByteBuf;II)Lio/netty/buffer/ByteBuf; getBytes getBytes + m (F)Lio/netty/buffer/ByteBuf; writeFloat writeFloat + m (ILjava/io/OutputStream;I)Lio/netty/buffer/ByteBuf; getBytes getBytes + m (Ljava/lang/CharSequence;Ljava/nio/charset/Charset;)I writeCharSequence writeCharSequence + m (Lnet/minecraft/class_2505;)Lnet/minecraft/class_2487; method_30616 func_244272_a + m ()Ljava/util/Date; method_10802 readTime + m (Lio/netty/buffer/ByteBuf;II)Lio/netty/buffer/ByteBuf; readBytes readBytes + m ([J)Lnet/minecraft/class_2540; method_10789 writeLongArray + m (I)Z getBoolean getBoolean + m ()C readChar readChar + m ()[I method_10787 readVarIntArray + m ([B)Lio/netty/buffer/ByteBuf; writeBytes writeBytes + m (Ljava/lang/Object;)Lio/netty/buffer/ByteBuf; touch touch + m (I)Lio/netty/util/ReferenceCounted; retain retain + m ()Lio/netty/buffer/ByteBuf; retainedSlice retainedSlice + m (I)Lnet/minecraft/class_2540; method_10804 writeVarInt + m (IIB)I indexOf indexOf + m ()Lio/netty/buffer/ByteBuf; resetReaderIndex resetReaderIndex + m ([B)Lio/netty/buffer/ByteBuf; readBytes readBytes + m (ID)Lio/netty/buffer/ByteBuf; setDouble setDouble + m (II)Lio/netty/buffer/ByteBuf; slice slice + m (ILjava/io/InputStream;I)I setBytes setBytes + m ()J readLong readLong + f Lio/netty/buffer/ByteBuf; field_11695 buf +c net/minecraft/class_2543 net/minecraft/network/NettyPacketDecoder + m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List;)V decode decode + f Lnet/minecraft/class_2598; field_11714 direction + f Lorg/apache/logging/log4j/Marker; field_11713 RECEIVED_PACKET_MARKER + f Lorg/apache/logging/log4j/Logger; field_11715 LOGGER +c net/minecraft/class_2545 net/minecraft/network/NettyPacketEncoder + m (Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/class_2596;Lio/netty/buffer/ByteBuf;)V method_10838 encode + m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Lio/netty/buffer/ByteBuf;)V encode encode + f Lorg/apache/logging/log4j/Logger; field_11721 LOGGER + f Lnet/minecraft/class_2598; field_11720 direction + f Lorg/apache/logging/log4j/Marker; field_11719 RECEIVED_PACKET_MARKER +c net/minecraft/class_2547 net/minecraft/network/INetHandler + m (Lnet/minecraft/class_2561;)V method_10839 onDisconnect + m ()Lnet/minecraft/class_2535; method_2872 getNetworkManager +c net/minecraft/class_5472 net/minecraft/network/RateLimitedNetworkManager + m (Lio/netty/util/concurrent/Future;)V method_30618 func_244277_a + f Lnet/minecraft/class_2561; field_26343 field_244275_h + f Lorg/apache/logging/log4j/Logger; field_26342 field_244274_g + f I field_26344 field_244276_i +c net/minecraft/class_2548 net/minecraft/network/SkipableEncoderException +c net/minecraft/class_2550 net/minecraft/network/NettyVarint21FrameDecoder + m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List;)V decode decode +c net/minecraft/class_2552 net/minecraft/network/NettyVarint21FrameEncoder + m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Lio/netty/buffer/ByteBuf;)V encode encode + m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Lio/netty/buffer/ByteBuf;)V method_10840 encode +c net/minecraft/class_2554 net/minecraft/util/text/TextComponent + m (Ljava/lang/Object;)Z equals equals + m ()I hashCode hashCode + m ()Lnet/minecraft/class_2554; method_27653 copyRaw + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2583; field_11730 style + f Ljava/util/List; field_11729 siblings + f Lnet/minecraft/class_2477; field_26624 field_244279_e + f Lnet/minecraft/class_5481; field_26623 field_244278_d +c net/minecraft/class_2556 net/minecraft/util/text/ChatType + m ()B method_10843 getId + m ()Z method_19457 getInterrupts + m ()[Lnet/minecraft/class_2556; values values + m (B)Lnet/minecraft/class_2556; method_10842 byId + m (Ljava/lang/String;)Lnet/minecraft/class_2556; valueOf valueOf + f Lnet/minecraft/class_2556; field_11733 GAME_INFO + f Lnet/minecraft/class_2556; field_11735 SYSTEM + f [Lnet/minecraft/class_2556; field_11734 $VALUES + f B field_11736 id + f Z field_18797 interrupts + f Lnet/minecraft/class_2556; field_11737 CHAT +c net/minecraft/class_2558 net/minecraft/util/text/event/ClickEvent + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/String; method_10844 getValue + m ()I hashCode hashCode + m ()Lnet/minecraft/class_2558$class_2559; method_10845 getAction + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2558$class_2559; field_11741 action + f Ljava/lang/String; field_11740 value +c net/minecraft/class_2558$class_2559 net/minecraft/util/text/event/ClickEvent$Action + m (Ljava/lang/String;)Lnet/minecraft/class_2558$class_2559; valueOf valueOf + m (Lnet/minecraft/class_2558$class_2559;)Lnet/minecraft/class_2558$class_2559; method_10849 func_199851_a + m ()Z method_10847 shouldAllowInChat + m ()[Lnet/minecraft/class_2558$class_2559; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2558$class_2559; method_10848 getValueByCanonicalName + m ()Ljava/lang/String; method_10846 getCanonicalName + f Lnet/minecraft/class_2558$class_2559; field_11749 OPEN_URL + f [Lnet/minecraft/class_2558$class_2559; field_11747 $VALUES + f Ljava/lang/String; field_11742 canonicalName + f Lnet/minecraft/class_2558$class_2559; field_11745 SUGGEST_COMMAND + f Lnet/minecraft/class_2558$class_2559; field_11750 RUN_COMMAND + f Ljava/util/Map; field_11743 NAME_MAPPING + f Lnet/minecraft/class_2558$class_2559; field_11746 OPEN_FILE + f Z field_11744 allowedInChat + f Lnet/minecraft/class_2558$class_2559; field_21462 COPY_TO_CLIPBOARD + f Lnet/minecraft/class_2558$class_2559; field_11748 CHANGE_PAGE +c net/minecraft/class_5244 net/minecraft/client/gui/DialogTexts + m (Z)Lnet/minecraft/class_2561; method_27654 optionsEnabled + m (Lnet/minecraft/class_2561;Z)Lnet/minecraft/class_5250; method_30619 getComposedOptionMessage + f Lnet/minecraft/class_2561; field_24334 GUI_DONE + f Lnet/minecraft/class_2561; field_24339 GUI_BACK + f Lnet/minecraft/class_2561; field_26625 CONNECTION_FAILED + f Lnet/minecraft/class_2561; field_24335 GUI_CANCEL + f Lnet/minecraft/class_2561; field_24337 GUI_NO + f Lnet/minecraft/class_2561; field_24336 GUI_YES + f Lnet/minecraft/class_2561; field_24338 GUI_PROCEED + f Lnet/minecraft/class_2561; field_24333 OPTIONS_OFF + f Lnet/minecraft/class_2561; field_24332 OPTIONS_ON +c net/minecraft/class_2561 net/minecraft/util/text/ITextComponent + m ()Lnet/minecraft/class_5481; method_30937 func_241878_f + m ()Lnet/minecraft/class_5250; method_27661 deepCopy + m (Lnet/minecraft/class_5348$class_5246;Lnet/minecraft/class_2583;)Ljava/util/Optional; method_27660 func_230534_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_30163 getTextComponentOrEmpty + m ()Lnet/minecraft/class_2583; method_10866 getStyle + m (ILjava/lang/StringBuilder;Ljava/lang/String;)Ljava/util/Optional; method_27655 func_240639_a_ + m ()Ljava/lang/String; method_10851 getUnformattedComponentText + m (Lnet/minecraft/class_5348$class_5245;)Ljava/util/Optional; method_27659 func_230533_b_ + m ()Ljava/util/List; method_10855 getSiblings + m ()Lnet/minecraft/class_5250; method_27662 copyRaw + m (I)Ljava/lang/String; method_10858 getStringTruncated +c net/minecraft/class_2561$class_2562 net/minecraft/util/text/ITextComponent$Serializer + m ()Ljava/lang/reflect/Field; method_10869 func_199853_a + m (Lnet/minecraft/class_2561;)Lcom/google/gson/JsonElement; method_10868 toJsonTree + m ()Ljava/lang/reflect/Field; method_10876 func_200529_a + m ()Lcom/google/gson/Gson; method_10878 func_199852_b + m (Lnet/minecraft/class_2583;Lcom/google/gson/JsonObject;Lcom/google/gson/JsonSerializationContext;)V method_10875 serializeChatStyle + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_5250; method_10871 deserialize + m (Lnet/minecraft/class_2561;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_10874 serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/stream/JsonReader;)I method_10880 getPos + m (Lnet/minecraft/class_2561;)Ljava/lang/String; method_10867 toJson + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_5250; method_10879 getComponentFromReader + m (Ljava/lang/String;)Lnet/minecraft/class_5250; method_10873 getComponentFromJsonLenient + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_5250; method_10872 getComponentFromJson + m (Ljava/lang/String;)Lnet/minecraft/class_5250; method_10877 getComponentFromJson + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + f Lcom/google/gson/Gson; field_11754 GSON + f Ljava/lang/reflect/Field; field_11752 JSON_READER_LINESTART_FIELD + f Ljava/lang/reflect/Field; field_11753 JSON_READER_POS_FIELD +c net/minecraft/class_2564 net/minecraft/util/text/TextComponentUtils + m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_10886 func_197681_a + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_5250; method_10885 wrapWithSquareBrackets + m (Ljava/util/Collection;Ljava/util/function/Function;)Lnet/minecraft/class_2561; method_10887 makeSortedList + m (Ljava/util/Collection;)Lnet/minecraft/class_2561; method_10888 makeGreenSortedList + m (Lcom/mojang/brigadier/Message;)Lnet/minecraft/class_2561; method_10883 toTextComponent + m (Ljava/util/Collection;Ljava/util/function/Function;)Lnet/minecraft/class_5250; method_10884 func_240649_b_ + m (Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/class_2561; method_10882 getDisplayName + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2583;Lnet/minecraft/class_1297;I)Lnet/minecraft/class_2583; method_27663 func_240646_a_ + m (Lnet/minecraft/class_5250;Lnet/minecraft/class_2583;)Lnet/minecraft/class_5250; method_10889 func_240648_a_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2561;Lnet/minecraft/class_1297;I)Lnet/minecraft/class_5250; method_10881 func_240645_a_ +c net/minecraft/class_2566 net/minecraft/util/text/ITargetedTextComponent + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;I)Lnet/minecraft/class_5250; method_10890 func_230535_a_ +c net/minecraft/class_5348 net/minecraft/util/text/ITextProperties + m (Lnet/minecraft/class_5348$class_5246;Lnet/minecraft/class_2583;)Ljava/util/Optional; method_27658 getComponentWithStyle + m (Lnet/minecraft/class_5348$class_5245;)Ljava/util/Optional; method_27657 getComponent + m (Ljava/lang/String;)Lnet/minecraft/class_5348; method_29430 func_240652_a_ + m ([Lnet/minecraft/class_5348;)Lnet/minecraft/class_5348; method_29433 func_240655_a_ + m (Ljava/lang/StringBuilder;Ljava/lang/String;)Ljava/util/Optional; method_30067 func_241754_a_ + m (Ljava/util/List;)Lnet/minecraft/class_5348; method_29432 func_240654_a_ + m ()Ljava/lang/String; getString getString + m (Ljava/lang/String;Lnet/minecraft/class_2583;)Lnet/minecraft/class_5348; method_29431 func_240653_a_ + f Lnet/minecraft/class_5348; field_25310 field_240651_c_ + f Ljava/util/Optional; field_25309 field_240650_b_ +c net/minecraft/class_5348$4 net/minecraft/util/text/ITextProperties$4 + f Ljava/util/List; field_25314 field_240659_a_ +c net/minecraft/class_5348$3 net/minecraft/util/text/ITextProperties$3 + f Lnet/minecraft/class_2583; field_25313 field_240658_d_ + f Ljava/lang/String; field_25312 field_240657_a_ +c net/minecraft/class_5348$2 net/minecraft/util/text/ITextProperties$2 + f Ljava/lang/String; field_25311 field_240656_a_ +c net/minecraft/class_5348$1 net/minecraft/util/text/ITextProperties$1 +c net/minecraft/class_5348$class_5246 net/minecraft/util/text/ITextProperties$IStyledTextAcceptor + m (Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; accept accept +c net/minecraft/class_5348$class_5245 net/minecraft/util/text/ITextProperties$ITextAcceptor + m (Ljava/lang/String;)Ljava/util/Optional; accept accept +c net/minecraft/class_2568 net/minecraft/util/text/event/HoverEvent + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_2568$class_5247;)Ljava/lang/Object; method_10891 getParameter + m ()Ljava/lang/String; toString toString + m ()Lorg/apache/logging/log4j/Logger; method_27666 func_240664_c_ + m ()Lnet/minecraft/class_2568$class_5247; method_10892 getAction + m ()Lcom/google/gson/JsonObject; method_27665 serialize + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2568; method_27664 deserialize + f Lorg/apache/logging/log4j/Logger; field_24341 LOGGER + f Ljava/lang/Object; field_11755 value + f Lnet/minecraft/class_2568$class_5247; field_11756 action +c net/minecraft/class_2568$class_5249 net/minecraft/util/text/event/HoverEvent$ItemHover + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2568$class_5249; method_27689 deserialize + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2568$class_5249; method_27685 func_240691_a_ + m ()I hashCode hashCode + m ()Lcom/google/gson/JsonElement; method_27687 serialize + m (Lnet/minecraft/class_2568$class_5249;)Lcom/google/gson/JsonElement; method_27686 func_240692_a_ + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2568$class_5249; method_27688 deserialize + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2568$class_5249; method_27684 func_240690_a_ + m (Ljava/lang/Object;)Z equals equals + m ()Lnet/minecraft/class_1799; method_27683 createStack + f Lnet/minecraft/class_1799; field_24358 stack + f Lnet/minecraft/class_1792; field_24355 item + f I field_24356 count + f Lnet/minecraft/class_2487; field_24357 tag +c net/minecraft/class_2568$class_5248 net/minecraft/util/text/event/HoverEvent$EntityHover + m ()Ljava/util/List; method_27682 getTooltip + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m ()Lcom/google/gson/JsonElement; method_27679 serialize + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2568$class_5248; method_27681 deserialize + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2568$class_5248; method_27680 deserialize + f Ljava/util/UUID; field_24352 id + f Lnet/minecraft/class_1299; field_24351 type + f Lnet/minecraft/class_2561; field_24353 name + f Ljava/util/List; field_24354 tooltip +c net/minecraft/class_2568$class_5247 net/minecraft/util/text/event/HoverEvent$Action + m (Ljava/lang/Object;)Ljava/lang/Object; method_27676 castParameter + m (Lnet/minecraft/class_2568$class_5247;)Lnet/minecraft/class_2568$class_5247; method_27672 func_240671_a_ + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2568; method_27671 deserialize + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2568; method_27668 deserialize + m ()Z method_27667 shouldAllowInChat + m ()Ljava/lang/String; toString toString + m (Ljava/lang/Object;)Lcom/google/gson/JsonElement; method_27669 serialize + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2568$class_5249; method_27677 func_240675_b_ + m (Lnet/minecraft/class_2568$class_5247;Ljava/lang/Object;)Ljava/lang/Object; method_27673 func_240672_a_ + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2568$class_5249; method_27675 func_240673_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_2568$class_5247; method_27670 getValueByCanonicalName + m (Ljava/lang/Object;)Lcom/google/gson/JsonElement; method_27678 func_240676_c_ + m ()Ljava/lang/String; method_27674 getCanonicalName + f Lnet/minecraft/class_2568$class_5247; field_24342 SHOW_TEXT + f Z field_24347 allowedInChat + f Lnet/minecraft/class_2568$class_5247; field_24343 SHOW_ITEM + f Lnet/minecraft/class_2568$class_5247; field_24344 SHOW_ENTITY + f Ljava/util/function/Function; field_24349 serializeToJSON + f Ljava/util/function/Function; field_24350 deserializeFromTextComponent + f Ljava/util/Map; field_24345 NAME_MAPPING + f Ljava/util/function/Function; field_24348 deserializeFromJSON + f Ljava/lang/String; field_24346 canonicalName +c net/minecraft/class_2572 net/minecraft/util/text/KeybindTextComponent + m (Ljava/util/function/Function;)V method_27690 func_240696_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_10903 func_240697_d_ + m (Ljava/lang/String;)Ljava/util/function/Supplier; method_10904 func_193635_b + m ()Lnet/minecraft/class_2561; method_27691 func_240698_i_ + m ()Lnet/minecraft/class_2572; method_10902 copyRaw + m ()Ljava/lang/String; method_10901 getKeybind + f Ljava/util/function/Function; field_11766 displaySupplierFunction + f Ljava/util/function/Supplier; field_11768 displaySupplier + f Ljava/lang/String; field_11767 keybind +c net/minecraft/class_5250 net/minecraft/util/text/IFormattableTextComponent + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_5250; method_10852 append + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_5250; method_10862 setStyle + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_5250; method_27696 mergeStyle + m ([Lnet/minecraft/class_124;)Lnet/minecraft/class_5250; method_27695 mergeStyle + m (Ljava/util/function/UnaryOperator;)Lnet/minecraft/class_5250; method_27694 modifyStyle + m (Ljava/lang/String;)Lnet/minecraft/class_5250; method_27693 appendString + m (Lnet/minecraft/class_124;)Lnet/minecraft/class_5250; method_27692 mergeStyle +c net/minecraft/class_2574 net/minecraft/util/text/NBTTextComponent + m (Ljava/lang/String;)Lnet/minecraft/class_2203$class_2209; method_10919 func_218672_b + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;ILjava/lang/String;)Ljava/util/stream/Stream; method_10917 func_223137_a + m (Lnet/minecraft/class_2487;)Ljava/util/stream/Stream; method_10918 func_218675_a + m ()Z method_10921 func_218677_j + m (Lnet/minecraft/class_2168;)Ljava/util/stream/Stream; method_10916 func_218673_a + m (Lnet/minecraft/class_5250;Lnet/minecraft/class_5250;)Lnet/minecraft/class_5250; method_15880 func_240704_a_ + m ()Ljava/lang/String; method_10920 func_218676_i + f Ljava/lang/String; field_11776 field_218679_c + f Lorg/apache/logging/log4j/Logger; field_11777 field_218681_e + f Lnet/minecraft/class_2203$class_2209; field_11779 field_218680_d + f Z field_11778 field_218678_b +c net/minecraft/class_2574$class_4616 net/minecraft/util/text/NBTTextComponent$Storage + m ()Lnet/minecraft/class_2960; method_23728 func_229726_k_ + m ()Lnet/minecraft/class_2574$class_4616; method_27698 copyRaw + f Lnet/minecraft/class_2960; field_21049 field_229725_e_ +c net/minecraft/class_2574$class_2576 net/minecraft/util/text/NBTTextComponent$Entity + m ()Ljava/lang/String; method_10924 func_218687_k + m ()Lnet/minecraft/class_2574$class_2576; method_27697 copyRaw + m (Ljava/lang/String;)Lnet/minecraft/class_2300; method_10923 func_218686_b + f Ljava/lang/String; field_11782 field_218688_e + f Lnet/minecraft/class_2300; field_11781 field_218689_f +c net/minecraft/class_2574$class_2575 net/minecraft/util/text/NBTTextComponent$Block + m ()Ljava/lang/String; method_10922 func_218683_k + m ()Lnet/minecraft/class_2574$class_2575; method_10850 copyRaw + m (Ljava/lang/String;)Lnet/minecraft/class_2267; method_16121 func_218682_b + f Ljava/lang/String; field_11780 field_218684_e + f Lnet/minecraft/class_2267; field_16408 field_218685_f +c net/minecraft/class_2578 net/minecraft/util/text/ScoreTextComponent + m (Ljava/lang/String;)Lnet/minecraft/class_2300; method_27701 func_240707_c_ + m (Ljava/lang/String;Lnet/minecraft/class_2168;)Ljava/lang/String; method_27700 func_240706_a_ + m ()Ljava/lang/String; method_10930 getName + m ()Ljava/lang/String; method_10928 getObjective + m ()Lnet/minecraft/class_2578; method_10929 copyRaw + m (Lnet/minecraft/class_2168;)Ljava/lang/String; method_27699 func_240705_a_ + f Ljava/lang/String; field_11785 objective + f Lnet/minecraft/class_2300; field_11786 selector + f Ljava/lang/String; field_11787 name +c net/minecraft/class_2579 net/minecraft/util/text/SelectorTextComponent + m ()Ljava/lang/String; method_10932 getSelector + m ()Lnet/minecraft/class_2579; method_10931 copyRaw + f Ljava/lang/String; field_11789 selector + f Lorg/apache/logging/log4j/Logger; field_11791 LOGGER + f Lnet/minecraft/class_2300; field_11790 field_197670_d +c net/minecraft/class_2583 net/minecraft/util/text/Style + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_2583;)Ljava/lang/String; method_10988 func_240726_h_ + m (Lnet/minecraft/class_2583;)Ljava/lang/Boolean; method_10972 access$100 + m (Ljava/lang/Boolean;)Lnet/minecraft/class_2583; method_10982 setBold + m (Lnet/minecraft/class_2568;)Lnet/minecraft/class_2583; method_10949 setHoverEvent + m ()Z method_10967 isEmpty + m (Lnet/minecraft/class_2583;)Ljava/lang/Boolean; method_10962 access$300 + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_5251; method_10974 func_240725_g_ + m (Ljava/lang/Boolean;)Lnet/minecraft/class_2583; method_30938 func_244282_c + m (Ljava/lang/String;)Lnet/minecraft/class_2583; method_10975 setInsertion + m ()Z method_10966 getItalic + m ()I hashCode hashCode + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_27702 mergeStyle + m ()Lnet/minecraft/class_2558; method_10970 getClickEvent + m ()Z method_10965 getUnderlined + m (Lnet/minecraft/class_124;)Lnet/minecraft/class_2583; method_27707 forceFormatting + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2960; method_27709 func_240730_k_ + m (Lnet/minecraft/class_2583;)Ljava/lang/Boolean; method_10951 func_240724_f_ + m ()Lnet/minecraft/class_2568; method_10969 getHoverEvent + m ()Lnet/minecraft/class_5251; method_10973 getColor + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2583; method_27704 setFontId + m (Lnet/minecraft/class_2558;)Lnet/minecraft/class_2583; method_10958 setClickEvent + m (Ljava/lang/Boolean;)Lnet/minecraft/class_2583; method_10978 setItalic + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2568; method_10963 func_240728_j_ + m (Lnet/minecraft/class_2583;)Ljava/lang/Boolean; method_10964 access$200 + m (Lnet/minecraft/class_124;)Lnet/minecraft/class_2583; method_10977 setFormatting + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2558; method_10950 func_240727_i_ + m ()Z method_10984 getBold + m ()Ljava/lang/String; method_10955 getInsertion + m ()Z method_10987 getObfuscated + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2583;)Ljava/lang/Boolean; method_10954 access$400 + m (Lnet/minecraft/class_124;)Lnet/minecraft/class_2583; method_27706 applyFormatting + m ()Z method_10986 getStrikethrough + m (Lnet/minecraft/class_5251;)Lnet/minecraft/class_2583; method_27703 setColor + m ([Lnet/minecraft/class_124;)Lnet/minecraft/class_2583; method_27705 createStyleFromFormattings + m ()Lnet/minecraft/class_2960; method_27708 getFontId + f Ljava/lang/Boolean; field_11851 underlined + f Ljava/lang/Boolean; field_11856 bold + f Ljava/lang/Boolean; field_11861 obfuscated + f Lnet/minecraft/class_2568; field_11858 hoverEvent + f Lnet/minecraft/class_2558; field_11853 clickEvent + f Lnet/minecraft/class_2583; field_24360 EMPTY + f Ljava/lang/Boolean; field_11857 strikethrough + f Ljava/lang/Boolean; field_11852 italic + f Lnet/minecraft/class_2960; field_24359 DEFAULT_FONT + f Ljava/lang/String; field_11859 insertion + f Lnet/minecraft/class_5251; field_11855 color + f Lnet/minecraft/class_2960; field_24361 fontId +c net/minecraft/class_2583$1 net/minecraft/util/text/Style$1 + f [I field_11751 field_240731_a_ +c net/minecraft/class_2583$class_2584 net/minecraft/util/text/Style$Serializer + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2558; method_27713 deserializeClickEvent + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Ljava/lang/Boolean; method_27711 deserializeBooleanValue + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_5251; method_27715 deserializeColor + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2568; method_27712 deserializeHoverEvent + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2960; method_27710 deserializeFont + m (Lcom/google/gson/JsonObject;)Ljava/lang/String; method_27714 deserializeInsertion + m (Lnet/minecraft/class_2583;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_10990 serialize + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_2583; method_10991 deserialize +c net/minecraft/class_5492 net/minecraft/client/util/BidiReorder + m (IIZ)Ljava/util/List; method_30940 func_244287_a + m (Lnet/minecraft/class_5348;Lit/unimi/dsi/fastutil/ints/Int2IntFunction;Ljava/util/function/UnaryOperator;)Lnet/minecraft/class_5492; method_30943 func_244290_a + m (Ljava/lang/StringBuilder;Ljava/util/List;ILnet/minecraft/class_2583;I)Z method_30941 func_244288_a + m ()Ljava/lang/String; method_30939 func_244286_a + m (Ljava/lang/StringBuilder;Ljava/util/List;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_30942 func_244289_a + f Lit/unimi/dsi/fastutil/ints/Int2IntFunction; field_26628 field_244285_c + f Ljava/util/List; field_26627 field_244284_b + f Ljava/lang/String; field_26626 field_244283_a +c net/minecraft/class_5251 net/minecraft/util/text/Color + m ()Ljava/lang/String; method_27723 getHex + m (Lnet/minecraft/class_124;)Lnet/minecraft/class_5251; method_27718 fromTextFormatting + m ()Ljava/lang/String; method_27721 getName + m ()I method_27716 getColor + m (I)Lnet/minecraft/class_5251; method_27717 fromInt + m (Ljava/lang/String;)Lnet/minecraft/class_5251; method_27719 fromHex + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_5251;)Ljava/lang/String; method_27720 func_240746_a_ + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_124;)Lnet/minecraft/class_5251; method_27722 func_240748_b_ + f Ljava/util/Map; field_24363 NAME_TO_COLOR_MAP + f Ljava/util/Map; field_24362 FORMATTING_TO_COLOR_MAP + f Ljava/lang/String; field_24365 name + f I field_24364 color +c net/minecraft/class_2585 net/minecraft/util/text/StringTextComponent + m ()Lnet/minecraft/class_2585; method_10992 copyRaw + m ()Ljava/lang/String; method_10993 getText + f Lnet/minecraft/class_2561; field_24366 EMPTY + f Ljava/lang/String; field_11862 text +c net/minecraft/class_2588 net/minecraft/util/text/TranslationTextComponent + m (I)Lnet/minecraft/class_5348; method_29434 func_240757_a_ + m ()Ljava/lang/String; method_11022 getKey + m ()[Ljava/lang/Object; method_11023 getFormatArgs + m (Ljava/lang/String;)V method_11024 func_240758_a_ + m ()V method_11025 ensureInitialized + m ()Lnet/minecraft/class_2588; method_11020 copyRaw + f Ljava/util/regex/Pattern; field_11872 STRING_VARIABLE_PATTERN + f Ljava/util/List; field_11877 children + f [Ljava/lang/Object; field_24367 field_240753_d_ + f [Ljava/lang/Object; field_11875 formatArgs + f Ljava/lang/String; field_11876 key + f Lnet/minecraft/class_5348; field_24368 field_240754_e_ + f Lnet/minecraft/class_2477; field_25317 field_240756_i_ + f Lnet/minecraft/class_5348; field_24369 field_240755_f_ +c net/minecraft/class_2590 net/minecraft/util/text/TranslationTextComponentFormatException +c net/minecraft/class_2596 net/minecraft/network/IPacket + m ()Z method_11051 shouldSkipErrors + m (Lnet/minecraft/class_2540;)V method_11053 readPacketData + m (Lnet/minecraft/class_2540;)V method_11052 writePacketData + m (Lnet/minecraft/class_2547;)V method_11054 processPacket +c net/minecraft/class_2598 net/minecraft/network/PacketDirection + m ()[Lnet/minecraft/class_2598; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2598; valueOf valueOf + f [Lnet/minecraft/class_2598; field_11940 $VALUES + f Lnet/minecraft/class_2598; field_11941 SERVERBOUND + f Lnet/minecraft/class_2598; field_11942 CLIENTBOUND +c net/minecraft/class_2600 net/minecraft/network/PacketThreadUtil + m (Lnet/minecraft/class_2596;Lnet/minecraft/class_2547;Lnet/minecraft/class_1255;)V method_11074 checkThreadAndEnqueue + m (Lnet/minecraft/class_2596;Lnet/minecraft/class_2547;Lnet/minecraft/class_3218;)V method_11073 checkThreadAndEnqueue + m (Lnet/minecraft/class_2547;Lnet/minecraft/class_2596;)V method_11072 func_225383_a + f Lorg/apache/logging/log4j/Logger; field_20318 LOGGER +c net/minecraft/class_2602 net/minecraft/client/network/play/IClientPlayNetHandler + m (Lnet/minecraft/class_2645;)V method_11102 handleCloseWindow + m (Lnet/minecraft/class_2695;)V method_11090 handlePlaceGhostRecipe + m (Lnet/minecraft/class_2777;)V method_11086 handleEntityTeleport + m (Lnet/minecraft/class_2606;)V method_11091 handleSpawnExperienceOrb + m (Lnet/minecraft/class_2770;)V method_11082 handleStopSound + m (Lnet/minecraft/class_2678;)V method_11120 handleJoinGame + m (Lnet/minecraft/class_2623;)V method_11158 handleBlockAction + m (Lnet/minecraft/class_2749;)V method_11122 handleUpdateHealth + m (Lnet/minecraft/class_2664;)V method_11124 handleExplosion + m (Lnet/minecraft/class_2635;)V method_11121 handleChat + m (Lnet/minecraft/class_2720;)V method_11141 handleResourcePack + m (Lnet/minecraft/class_2788;)V method_11106 handleUpdateRecipes + m (Lnet/minecraft/class_2684;)V method_11155 handleEntityMovement + m (Lnet/minecraft/class_2632;)V method_11140 handleServerDifficulty + m (Lnet/minecraft/class_2656;)V method_11087 handleCooldown + m (Lnet/minecraft/class_2676;)V method_11143 handleUpdateLight + m (Lnet/minecraft/class_4282;)V method_20320 handleChunkPositionPacket + m (Lnet/minecraft/class_2767;)V method_11146 handleSoundEffect + m (Lnet/minecraft/class_2670;)V method_11147 handleKeepAlive + m (Lnet/minecraft/class_2729;)V method_11161 handleSelectAdvancementsTab + m (Lnet/minecraft/class_2616;)V method_11160 handleAnimation + m (Lnet/minecraft/class_2757;)V method_11118 handleUpdateScore + m (Lnet/minecraft/class_2739;)V method_11093 handleEntityMetadata + m (Lnet/minecraft/class_2707;)V method_11092 handlePlayerLook + m (Lnet/minecraft/class_2775;)V method_11150 handleCollectItem + m (Lnet/minecraft/class_2644;)V method_11123 handleConfirmTransaction + m (Lnet/minecraft/class_2755;)V method_11099 handleTeams + m (Lnet/minecraft/class_2637;)V method_11100 handleMultiBlockChange + m (Lnet/minecraft/class_2748;)V method_11101 handleSetExperience + m (Lnet/minecraft/class_2718;)V method_11119 handleRemoveEntityEffect + m (Lnet/minecraft/class_2604;)V method_11112 handleSpawnObject + m (Lnet/minecraft/class_2693;)V method_11108 handleSignEditorOpen + m (Lnet/minecraft/class_2622;)V method_11094 handleUpdateTileEntity + m (Lnet/minecraft/class_2663;)V method_11148 handleEntityStatus + m (Lnet/minecraft/class_2765;)V method_11125 handleSpawnMovingSoundEffect + m (Lnet/minecraft/class_2735;)V method_11135 handleHeldItemChange + m (Lnet/minecraft/class_2620;)V method_11116 handleBlockBreakAnim + m (Lnet/minecraft/class_2716;)V method_11095 handleDestroyEntities + m (Lnet/minecraft/class_2675;)V method_11077 handleParticles + m (Lnet/minecraft/class_2703;)V method_11113 handlePlayerListItem + m (Lnet/minecraft/class_2648;)V method_11089 handleOpenHorseWindow + m (Lnet/minecraft/class_2653;)V method_11109 handleSetSlot + m (Lnet/minecraft/class_2783;)V method_11084 handleEntityEffect + m (Lnet/minecraft/class_2613;)V method_11097 handleSpawnPlayer + m (Lnet/minecraft/class_2726;)V method_11139 handleEntityHeadLook + m (Lnet/minecraft/class_3943;)V method_17586 handleMerchantOffers + m (Lnet/minecraft/class_2752;)V method_11080 handleSetPassengers + m (Lnet/minecraft/class_2698;)V method_11133 handleCombatEvent + m (Lnet/minecraft/class_2668;)V method_11085 handleChangeGameState + m (Lnet/minecraft/class_2629;)V method_11078 handleUpdateBossInfo + m (Lnet/minecraft/class_3944;)V method_17587 handleOpenWindowPacket + m (Lnet/minecraft/class_2744;)V method_11151 handleEntityEquipment + m (Lnet/minecraft/class_2661;)V method_11083 handleDisconnect + m (Lnet/minecraft/class_2641;)V method_11145 handleCommandList + m (Lnet/minecraft/class_2774;)V method_11127 handleNBTQueryResponse + m (Lnet/minecraft/class_2736;)V method_11159 handleDisplayObjective + m (Lnet/minecraft/class_4463;)V method_21707 handleAcknowledgePlayerDigging + m (Lnet/minecraft/class_2762;)V method_11103 handleTitle + m (Lnet/minecraft/class_2713;)V method_11115 handleRecipeBook + m (Lnet/minecraft/class_2673;)V method_11098 handleEffect + m (Lnet/minecraft/class_2660;)V method_11104 handleCustomSound + m (Lnet/minecraft/class_2743;)V method_11132 handleEntityVelocity + m (Lnet/minecraft/class_2651;)V method_11131 handleWindowProperty + m (Lnet/minecraft/class_2781;)V method_11149 handleEntityProperties + m (Lnet/minecraft/class_2734;)V method_11111 handleCamera + m (Lnet/minecraft/class_2612;)V method_11114 handleSpawnPainting + m (Lnet/minecraft/class_2666;)V method_11107 processChunkUnload + m (Lnet/minecraft/class_2610;)V method_11138 handleSpawnMob + m (Lnet/minecraft/class_2751;)V method_11144 handleScoreboardObjective + m (Lnet/minecraft/class_2649;)V method_11153 handleWindowItems + m (Lnet/minecraft/class_2626;)V method_11136 handleBlockChange + m (Lnet/minecraft/class_2696;)V method_11154 handlePlayerAbilities + m (Lnet/minecraft/class_2759;)V method_11142 func_230488_a_ + m (Lnet/minecraft/class_3895;)V method_17186 handleOpenBookPacket + m (Lnet/minecraft/class_2772;)V method_11105 handlePlayerListHeaderFooter + m (Lnet/minecraft/class_2724;)V method_11117 handleRespawn + m (Lnet/minecraft/class_2683;)V method_11088 handleMaps + m (Lnet/minecraft/class_2639;)V method_11081 handleTabComplete + m (Lnet/minecraft/class_2740;)V method_11110 handleEntityAttach + m (Lnet/minecraft/class_2658;)V method_11152 handleCustomPayload + m (Lnet/minecraft/class_2708;)V method_11157 handlePlayerPosLook + m (Lnet/minecraft/class_2790;)V method_11126 handleTags + m (Lnet/minecraft/class_4273;)V method_20203 handleUpdateViewDistancePacket + m (Lnet/minecraft/class_2617;)V method_11129 handleStatistics + m (Lnet/minecraft/class_2692;)V method_11134 handleMoveVehicle + m (Lnet/minecraft/class_2779;)V method_11130 handleAdvancementInfo + m (Lnet/minecraft/class_2730;)V method_11096 handleWorldBorder + m (Lnet/minecraft/class_2761;)V method_11079 handleTimeUpdate + m (Lnet/minecraft/class_2672;)V method_11128 handleChunkData +c net/minecraft/class_2604 net/minecraft/network/play/server/SSpawnObjectPacket + m ()D method_11170 func_218693_g + m ()Lnet/minecraft/class_1299; method_11169 getType + m ()D method_11176 getZ + m ()D method_11174 getY + m ()Ljava/util/UUID; method_11164 getUniqueId + m ()D method_11173 func_218692_i + m ()D method_11172 func_218695_h + m ()I method_11168 getYaw + m ()I method_11166 getData + m (Lnet/minecraft/class_2602;)V method_11178 processPacket + m ()D method_11175 getX + m ()I method_11167 getEntityID + m ()I method_11171 getPitch + f I field_11947 pitch + f I field_11949 speedZ + f I field_11950 speedY + f I field_11954 data + f D field_11948 x + f I field_11953 entityId + f I field_11957 yaw + f D field_11956 z + f D field_11946 y + f I field_11951 speedX + f Lnet/minecraft/class_1299; field_11955 type + f Ljava/util/UUID; field_11952 uniqueId +c net/minecraft/class_2606 net/minecraft/network/play/server/SSpawnExperienceOrbPacket + m ()D method_11180 getZ + m ()I method_11184 getXPValue + m ()D method_11185 getX + m ()I method_11183 getEntityID + m (Lnet/minecraft/class_2602;)V method_11182 processPacket + m ()D method_11181 getY + f I field_11974 entityID + f D field_11972 posX + f I field_11973 xpValue + f D field_11970 posZ + f D field_11971 posY +c net/minecraft/class_2610 net/minecraft/network/play/server/SSpawnMobPacket + m ()B method_11204 getHeadPitch + m (Lnet/minecraft/class_2602;)V method_11217 processPacket + m ()I method_11207 getEntityID + m ()I method_11212 getVelocityX + m ()B method_11205 getYaw + m ()I method_11211 getVelocityY + m ()B method_11206 getPitch + m ()I method_11209 getVelocityZ + m ()D method_11216 getZ + m ()D method_11214 getX + m ()I method_11210 getEntityType + m ()D method_11215 getY + m ()Ljava/util/UUID; method_11213 getUniqueId + f D field_12002 z + f I field_11996 entityId + f D field_11990 x + f Ljava/util/UUID; field_11997 uniqueId + f I field_11995 type + f D field_12003 y + f I field_11991 velocityZ + f B field_11998 headPitch + f I field_11993 velocityX + f B field_12000 yaw + f I field_11992 velocityY + f B field_11999 pitch +c net/minecraft/class_2612 net/minecraft/network/play/server/SSpawnPaintingPacket + m ()I method_11225 getEntityID + m ()Lnet/minecraft/class_1535; method_11221 getType + m ()Ljava/util/UUID; method_11222 getUniqueId + m ()Lnet/minecraft/class_2350; method_11223 getFacing + m (Lnet/minecraft/class_2602;)V method_11224 processPacket + m ()Lnet/minecraft/class_2338; method_11226 getPosition + f Lnet/minecraft/class_2350; field_12011 facing + f I field_12012 entityID + f Ljava/util/UUID; field_12009 uniqueId + f I field_12010 title + f Lnet/minecraft/class_2338; field_12008 position +c net/minecraft/class_2613 net/minecraft/network/play/server/SSpawnPlayerPacket + m ()D method_11233 getZ + m ()B method_11234 getYaw + m ()B method_11228 getPitch + m ()I method_11227 getEntityID + m ()D method_11231 getX + m ()Ljava/util/UUID; method_11230 getUniqueId + m ()D method_11232 getY + m (Lnet/minecraft/class_2602;)V method_11235 processPacket + f Ljava/util/UUID; field_12015 uniqueId + f D field_12021 z + f B field_12020 yaw + f B field_12019 pitch + f I field_12017 entityId + f D field_12014 x + f D field_12013 y +c net/minecraft/class_2616 net/minecraft/network/play/server/SAnimateHandPacket + m ()I method_11269 getEntityID + m (Lnet/minecraft/class_2602;)V method_11268 processPacket + m ()I method_11267 getAnimationType + f I field_12029 entityId + f I field_12028 type +c net/minecraft/class_2617 net/minecraft/network/play/server/SStatisticsPacket + m (Lnet/minecraft/class_3445;)I method_11272 func_197683_a + m ()Ljava/util/Map; method_11273 getStatisticMap + m (Lnet/minecraft/class_3448;Lnet/minecraft/class_2540;)V method_11271 readValues + m (Lnet/minecraft/class_2602;)V method_11270 processPacket + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_12030 statisticMap +c net/minecraft/class_4463 net/minecraft/network/play/server/SPlayerDiggingPacket + m (Lnet/minecraft/class_2602;)V method_21708 processPacket + m ()Lnet/minecraft/class_2846$class_2847; method_21712 getAction + m ()Lnet/minecraft/class_2680; method_21709 getBlockState + m ()Z method_21711 wasSuccessful + m ()Lnet/minecraft/class_2338; method_21710 getPosition + f Z field_20323 successful + f Lnet/minecraft/class_2680; field_20322 state + f Lorg/apache/logging/log4j/Logger; field_20320 LOGGER + f Lnet/minecraft/class_2846$class_2847; field_20319 action + f Lnet/minecraft/class_2338; field_20321 pos +c net/minecraft/class_2620 net/minecraft/network/play/server/SAnimateBlockBreakPacket + m ()Lnet/minecraft/class_2338; method_11277 getPosition + m ()I method_11278 getProgress + m ()I method_11280 getBreakerId + m (Lnet/minecraft/class_2602;)V method_11279 processPacket + f Lnet/minecraft/class_2338; field_12034 position + f I field_12032 progress + f I field_12033 breakerId +c net/minecraft/class_2622 net/minecraft/network/play/server/SUpdateTileEntityPacket + m (Lnet/minecraft/class_2602;)V method_11292 processPacket + m ()I method_11291 getTileEntityType + m ()Lnet/minecraft/class_2338; method_11293 getPos + m ()Lnet/minecraft/class_2487; method_11290 getNbtCompound + f Lnet/minecraft/class_2487; field_12039 nbt + f I field_12038 tileEntityType + f Lnet/minecraft/class_2338; field_12040 blockPos +c net/minecraft/class_2623 net/minecraft/network/play/server/SBlockActionPacket + m ()Lnet/minecraft/class_2248; method_11295 getBlockType + m ()I method_11294 getData1 + m ()I method_11296 getData2 + m ()Lnet/minecraft/class_2338; method_11298 getBlockPosition + m (Lnet/minecraft/class_2602;)V method_11297 processPacket + f Lnet/minecraft/class_2338; field_12044 blockPosition + f Lnet/minecraft/class_2248; field_12043 block + f I field_12042 instrument + f I field_12041 pitch +c net/minecraft/class_2626 net/minecraft/network/play/server/SChangeBlockPacket + m (Lnet/minecraft/class_2602;)V method_11310 processPacket + m ()Lnet/minecraft/class_2338; method_11309 getPos + m ()Lnet/minecraft/class_2680; method_11308 getState + f Lnet/minecraft/class_2680; field_12051 state + f Lnet/minecraft/class_2338; field_12052 pos +c net/minecraft/class_2629 net/minecraft/network/play/server/SUpdateBossInfoPacket + m (I)V method_11323 setFlags + m ()Z method_11331 shouldDarkenSky + m (Lnet/minecraft/class_2602;)V method_11330 processPacket + m ()Z method_11321 shouldPlayEndBossMusic + m ()F method_11327 getPercent + m ()Lnet/minecraft/class_2629$class_2630; method_11324 getOperation + m ()Lnet/minecraft/class_1259$class_1260; method_11325 getColor + m ()Lnet/minecraft/class_1259$class_1261; method_11329 getOverlay + m ()I method_11326 getFlags + m ()Ljava/util/UUID; method_11322 getUniqueId + m ()Z method_11332 shouldCreateFog + m ()Lnet/minecraft/class_2561; method_11328 getName + f Ljava/util/UUID; field_12074 uniqueId + f Z field_12070 playEndBossMusic + f F field_12069 percent + f Z field_12068 createFog + f Lnet/minecraft/class_2561; field_12071 name + f Z field_12072 darkenSky + f Lnet/minecraft/class_2629$class_2630; field_12075 operation + f Lnet/minecraft/class_1259$class_1260; field_12073 color + f Lnet/minecraft/class_1259$class_1261; field_12076 overlay +c net/minecraft/class_2629$1 net/minecraft/network/play/server/SUpdateBossInfoPacket$1 + f [I field_12077 field_187039_a +c net/minecraft/class_2629$class_2630 net/minecraft/network/play/server/SUpdateBossInfoPacket$Operation + m ()[Lnet/minecraft/class_2629$class_2630; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2629$class_2630; valueOf valueOf + f Lnet/minecraft/class_2629$class_2630; field_12080 UPDATE_PCT + f [Lnet/minecraft/class_2629$class_2630; field_12079 $VALUES + f Lnet/minecraft/class_2629$class_2630; field_12082 REMOVE + f Lnet/minecraft/class_2629$class_2630; field_12084 UPDATE_NAME + f Lnet/minecraft/class_2629$class_2630; field_12081 UPDATE_STYLE + f Lnet/minecraft/class_2629$class_2630; field_12078 ADD + f Lnet/minecraft/class_2629$class_2630; field_12083 UPDATE_PROPERTIES +c net/minecraft/class_2632 net/minecraft/network/play/server/SServerDifficultyPacket + m (Lnet/minecraft/class_2602;)V method_11341 processPacket + m ()Z method_11340 isDifficultyLocked + m ()Lnet/minecraft/class_1267; method_11342 getDifficulty + f Lnet/minecraft/class_1267; field_12090 difficulty + f Z field_12091 difficultyLocked +c net/minecraft/class_2635 net/minecraft/network/play/server/SChatPacket + m ()Z method_11387 isSystem + m ()Lnet/minecraft/class_2561; method_11388 getChatComponent + m ()Ljava/util/UUID; method_29175 func_240810_e_ + m (Lnet/minecraft/class_2602;)V method_11386 processPacket + m ()Lnet/minecraft/class_2556; method_11389 getType + f Lnet/minecraft/class_2561; field_12112 chatComponent + f Lnet/minecraft/class_2556; field_12113 type + f Ljava/util/UUID; field_25133 field_240809_c_ +c net/minecraft/class_2639 net/minecraft/network/play/server/STabCompletePacket + m ()Lcom/mojang/brigadier/suggestion/Suggestions; method_11397 getSuggestions + m ()I method_11399 getTransactionId + m (Lnet/minecraft/class_2602;)V method_11398 processPacket + f Lcom/mojang/brigadier/suggestion/Suggestions; field_12121 suggestions + f I field_12122 transactionId +c net/minecraft/class_2641 net/minecraft/network/play/server/SCommandListPacket + m (Lnet/minecraft/class_2540;B)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_11402 readArgumentBuilder + m ([Lnet/minecraft/class_2641$class_2642;Lnet/minecraft/class_2641$class_2642;)Z method_30947 func_244295_a + m (Lnet/minecraft/class_2602;)V method_11404 processPacket + m (Lnet/minecraft/class_2540;Lcom/mojang/brigadier/tree/CommandNode;Ljava/util/Map;)V method_11401 writeCommandNode + m ()Lcom/mojang/brigadier/tree/RootCommandNode; method_11403 getRoot + m (Lit/unimi/dsi/fastutil/objects/Object2IntMap;)[Lcom/mojang/brigadier/tree/CommandNode; method_30945 func_244293_a + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2641$class_2642; method_11405 readEntry + m ([Lnet/minecraft/class_2641$class_2642;)V method_30946 func_244294_a + m (Lcom/mojang/brigadier/tree/RootCommandNode;)Lit/unimi/dsi/fastutil/objects/Object2IntMap; method_30944 func_244292_a + f Lcom/mojang/brigadier/tree/RootCommandNode; field_12123 root +c net/minecraft/class_2641$class_2642 net/minecraft/network/play/server/SCommandListPacket$Entry + m (Lcom/mojang/brigadier/context/CommandContext;)I method_11408 func_197724_a + m ([Lnet/minecraft/class_2641$class_2642;)Z method_11406 createCommandNode + m (Lnet/minecraft/class_2641$class_2642;)Lcom/mojang/brigadier/tree/CommandNode; method_11407 access$000 + f [I field_12125 children + f B field_12124 flags + f Lcom/mojang/brigadier/tree/CommandNode; field_12128 node + f Lcom/mojang/brigadier/builder/ArgumentBuilder; field_12127 argBuilder + f I field_12126 redirectTarget +c net/minecraft/class_2641$1 net/minecraft/network/play/server/SCommandListPacket$1 +c net/minecraft/class_2644 net/minecraft/network/play/server/SConfirmTransactionPacket + m ()Z method_11426 wasAccepted + m ()S method_11423 getActionNumber + m ()I method_11425 getWindowId + m (Lnet/minecraft/class_2602;)V method_11424 processPacket + f Z field_12135 accepted + f S field_12134 actionNumber + f I field_12136 windowId +c net/minecraft/class_2645 net/minecraft/network/play/server/SCloseWindowPacket + m (Lnet/minecraft/class_2602;)V method_11427 processPacket + f I field_12137 windowId +c net/minecraft/class_2649 net/minecraft/network/play/server/SWindowItemsPacket + m (Lnet/minecraft/class_2602;)V method_11439 processPacket + m ()I method_11440 getWindowId + m ()Ljava/util/List; method_11441 getItemStacks + f Ljava/util/List; field_12147 itemStacks + f I field_12146 windowId +c net/minecraft/class_2651 net/minecraft/network/play/server/SWindowPropertyPacket + m (Lnet/minecraft/class_2602;)V method_11447 processPacket + m ()I method_11448 getWindowId + m ()I method_11445 getProperty + m ()I method_11446 getValue + f I field_12150 windowId + f I field_12149 property + f I field_12148 value +c net/minecraft/class_2653 net/minecraft/network/play/server/SSetSlotPacket + m ()I method_11450 getSlot + m ()Lnet/minecraft/class_1799; method_11449 getStack + m (Lnet/minecraft/class_2602;)V method_11451 processPacket + m ()I method_11452 getWindowId + f I field_12152 windowId + f I field_12151 slot + f Lnet/minecraft/class_1799; field_12153 item +c net/minecraft/class_2656 net/minecraft/network/play/server/SCooldownPacket + m (Lnet/minecraft/class_2602;)V method_11455 processPacket + m ()Lnet/minecraft/class_1792; method_11453 getItem + m ()I method_11454 getTicks + f Lnet/minecraft/class_1792; field_12154 item + f I field_12155 ticks +c net/minecraft/class_2658 net/minecraft/network/play/server/SCustomPayloadPlayPacket + m ()Lnet/minecraft/class_2540; method_11458 getBufferData + m ()Lnet/minecraft/class_2960; method_11456 getChannelName + m (Lnet/minecraft/class_2602;)V method_11457 processPacket + f Lnet/minecraft/class_2540; field_12162 data + f Lnet/minecraft/class_2960; field_12165 channel + f Lnet/minecraft/class_2960; field_18957 DEBUG_POI_TICKET_COUNT + f Lnet/minecraft/class_2960; field_12164 DEBUG_WORLDGEN_ATTEMPT + f Lnet/minecraft/class_2960; field_19331 DEBUG_RAIDS + f Lnet/minecraft/class_2960; field_20600 field_229730_p_ + f Lnet/minecraft/class_2960; field_12163 DEBUG_STRUCTURES + f Lnet/minecraft/class_2960; field_12156 DEBUG_CAVES + f Lnet/minecraft/class_2960; field_20599 field_229729_o_ + f Lnet/minecraft/class_2960; field_21560 field_229728_n_ + f Lnet/minecraft/class_2960; field_12157 DEBUG_NEIGHBORS_UPDATE + f Lnet/minecraft/class_2960; field_12161 DEBUG_PATH + f Lnet/minecraft/class_2960; field_21559 field_229727_m_ + f Lnet/minecraft/class_2960; field_18800 DEBUG_BRAIN + f Lnet/minecraft/class_2960; field_12158 BRAND + f Lnet/minecraft/class_2960; field_18799 DEBUG_GOAL_SELECTOR + f Lnet/minecraft/class_2960; field_18960 DEBUG_VILLAGE_SECTIONS + f Lnet/minecraft/class_2960; field_18959 DEBUG_POI_REMOVED + f Lnet/minecraft/class_2960; field_18958 DEBUG_POI_ADDED +c net/minecraft/class_2660 net/minecraft/network/play/server/SPlaySoundPacket + m ()D method_11465 getZ + m ()F method_11463 getVolume + m ()D method_11462 getX + m ()D method_11461 getY + m ()Lnet/minecraft/class_3419; method_11459 getCategory + m ()F method_11464 getPitch + m (Lnet/minecraft/class_2602;)V method_11466 processPacket + m ()Lnet/minecraft/class_2960; method_11460 getSoundName + f Lnet/minecraft/class_3419; field_12171 category + f Lnet/minecraft/class_2960; field_12170 soundName + f F field_12172 pitch + f I field_12169 x + f I field_12168 y + f F field_12166 volume + f I field_12167 z +c net/minecraft/class_2661 net/minecraft/network/play/server/SDisconnectPacket + m ()Lnet/minecraft/class_2561; method_11468 getReason + m (Lnet/minecraft/class_2602;)V method_11467 processPacket + f Lnet/minecraft/class_2561; field_12173 reason +c net/minecraft/class_2663 net/minecraft/network/play/server/SEntityStatusPacket + m ()B method_11470 getOpCode + m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_11469 getEntity + m (Lnet/minecraft/class_2602;)V method_11471 processPacket + f B field_12174 logicOpcode + f I field_12175 entityId +c net/minecraft/class_2664 net/minecraft/network/play/server/SExplosionPacket + m ()F method_11476 getStrength + m ()Ljava/util/List; method_11479 getAffectedBlockPositions + m ()F method_11474 getMotionZ + m ()D method_11475 getX + m ()D method_11478 getZ + m ()D method_11477 getY + m ()F method_11472 getMotionX + m (Lnet/minecraft/class_2602;)V method_11480 processPacket + m ()F method_11473 getMotionY + f D field_12180 posX + f D field_12177 posZ + f D field_12178 posY + f F field_12182 motionZ + f F field_12176 motionX + f Ljava/util/List; field_12181 affectedBlockPositions + f F field_12183 motionY + f F field_12179 strength +c net/minecraft/class_2666 net/minecraft/network/play/server/SUnloadChunkPacket + m ()I method_11485 getZ + m (Lnet/minecraft/class_2602;)V method_11486 processPacket + m ()I method_11487 getX + f I field_12194 z + f I field_12195 x +c net/minecraft/class_2668 net/minecraft/network/play/server/SChangeGameStatePacket + m (Lnet/minecraft/class_2602;)V method_11490 processPacket + m ()F method_11492 getValue + m ()Lnet/minecraft/class_2668$class_5402; method_11491 func_241776_b_ + f Lnet/minecraft/class_2668$class_5402; field_25651 field_241770_g_ + f Lnet/minecraft/class_2668$class_5402; field_25652 field_241771_h_ + f Lnet/minecraft/class_2668$class_5402; field_25648 field_241767_d_ + f Lnet/minecraft/class_2668$class_5402; field_25649 field_241768_e_ + f F field_12198 value + f Lnet/minecraft/class_2668$class_5402; field_25650 field_241769_f_ + f Lnet/minecraft/class_2668$class_5402; field_25645 field_241764_a_ + f Lnet/minecraft/class_2668$class_5402; field_25656 field_241775_l_ + f Lnet/minecraft/class_2668$class_5402; field_25646 field_241765_b_ + f Lnet/minecraft/class_2668$class_5402; field_12199 state + f Lnet/minecraft/class_2668$class_5402; field_25647 field_241766_c_ + f Lnet/minecraft/class_2668$class_5402; field_25653 field_241772_i_ + f Lnet/minecraft/class_2668$class_5402; field_25654 field_241773_j_ + f Lnet/minecraft/class_2668$class_5402; field_25655 field_241774_k_ +c net/minecraft/class_2668$class_5402 net/minecraft/network/play/server/SChangeGameStatePacket$State + m ()Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; method_30004 func_241779_a_ + m (Lnet/minecraft/class_2668$class_5402;)I method_30005 func_241780_a_ + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_25657 field_241777_a_ + f I field_25658 field_241778_b_ +c net/minecraft/class_2648 net/minecraft/network/play/server/SOpenHorseWindowPacket + m ()I method_11434 func_218702_c + m ()I method_11432 func_218704_b + m ()I method_11433 func_218703_d + m (Lnet/minecraft/class_2602;)V method_11437 processPacket + f I field_12144 field_218705_a + f I field_12142 field_218707_c + f I field_12143 field_218706_b +c net/minecraft/class_2670 net/minecraft/network/play/server/SKeepAlivePacket + m ()J method_11517 getId + m (Lnet/minecraft/class_2602;)V method_11518 processPacket + f J field_12211 id +c net/minecraft/class_2672 net/minecraft/network/play/server/SChunkDataPacket + m (Lnet/minecraft/class_2602;)V method_11528 processPacket + m (Lnet/minecraft/class_2818;I)I method_11522 calculateChunkSize + m ()Lnet/minecraft/class_2487; method_16123 getHeightmapTags + m ()I method_11523 getChunkX + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2818;I)I method_11529 extractChunkData + m ()Z method_11530 isFullChunk + m ()[I method_22422 func_244296_i + m ()Lio/netty/buffer/ByteBuf; method_11527 getWriteBuffer + m ()Ljava/util/List; method_11525 getTileEntityTags + m ()Lnet/minecraft/class_2540; method_11521 getReadBuffer + m ()I method_11526 getAvailableSections + m ()I method_11524 getChunkZ + f [B field_12237 buffer + f Ljava/util/List; field_12238 tileEntityTags + f [I field_20664 biomes + f Z field_12233 fullChunk + f I field_12234 availableSections + f I field_12236 chunkX + f I field_12235 chunkZ + f Lnet/minecraft/class_2487; field_16416 heightmapTags +c net/minecraft/class_2673 net/minecraft/network/play/server/SPlaySoundEventPacket + m ()I method_11534 getSoundData + m ()I method_11532 getSoundType + m ()Lnet/minecraft/class_2338; method_11531 getSoundPos + m ()Z method_11533 isSoundServerwide + m (Lnet/minecraft/class_2602;)V method_11535 processPacket + f I field_12239 soundData + f Z field_12240 serverWide + f Lnet/minecraft/class_2338; field_12242 soundPos + f I field_12241 soundType +c net/minecraft/class_2675 net/minecraft/network/play/server/SSpawnParticlePacket + m ()F method_11550 getZOffset + m ()F method_11549 getYOffset + m ()F method_11543 getParticleSpeed + m ()Z method_11552 isLongDistance + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2396;)Lnet/minecraft/class_2394; method_11542 readParticle + m ()D method_11546 getZCoordinate + m ()F method_11548 getXOffset + m ()D method_11544 getXCoordinate + m ()Lnet/minecraft/class_2394; method_11551 getParticle + m (Lnet/minecraft/class_2602;)V method_11553 processPacket + m ()D method_11547 getYCoordinate + m ()I method_11545 getParticleCount + f D field_12257 yCoord + f D field_12258 xCoord + f D field_12256 zCoord + f I field_12253 particleCount + f F field_12251 zOffset + f F field_12260 particleSpeed + f F field_12255 xOffset + f Z field_12254 longDistance + f F field_12252 yOffset + f Lnet/minecraft/class_2394; field_12259 particle +c net/minecraft/class_2676 net/minecraft/network/play/server/SUpdateLightPacket + m ()I method_11556 getSkyLightUpdateMask + m ()I method_11554 getChunkZ + m ()Z method_30006 func_241784_j_ + m ()I method_16124 getSkyLightResetMask + m ()Ljava/util/List; method_11555 getSkyLightData + m ()I method_11558 getChunkX + m ()Ljava/util/List; method_11557 getBlockLightData + m (Lnet/minecraft/class_2602;)V method_11560 processPacket + m ()I method_16125 getBlockLightResetMask + m ()I method_11559 getBlockLightUpdateMask + f Ljava/util/List; field_12266 skyLightData + f Ljava/util/List; field_12261 blockLightData + f I field_16418 skyLightResetMask + f I field_16417 blockLightResetMask + f I field_12264 chunkZ + f Z field_25659 field_241783_i_ + f I field_12262 blockLightUpdateMask + f I field_12263 skyLightUpdateMask + f I field_12265 chunkX +c net/minecraft/class_2678 net/minecraft/network/play/server/SJoinGamePacket + m (Lnet/minecraft/class_2602;)V method_11567 processPacket + m ()I method_20204 getViewDistance + m ()Ljava/util/Set; method_29443 func_240816_f_ + m ()Lnet/minecraft/class_2874; method_29444 func_244297_i + m ()Z method_28118 isHardcoreMode + m ()Lnet/minecraft/class_5455; method_11565 func_240817_g_ + m ()J method_22423 getHashedSeed + m ()Lnet/minecraft/class_1934; method_11561 getGameType + m ()Lnet/minecraft/class_1934; method_30116 func_241786_f_ + m ()Z method_11568 func_240821_o_ + m ()I method_11564 getPlayerId + m ()Z method_22424 func_229743_k_ + m ()Z method_11562 isReducedDebugInfo + m ()Z method_28119 func_240820_n_ + m ()Lnet/minecraft/class_2874; method_31177 func_244298_q + m ()Lnet/minecraft/class_5321; method_29176 func_240819_i_ + f Lnet/minecraft/class_5321; field_25134 dimension + f Lnet/minecraft/class_5455$class_5457; field_12284 field_240812_f_ + f I field_12279 maxPlayers + f I field_19145 viewDistance + f Z field_12281 hardcoreMode + f Lnet/minecraft/class_2874; field_25321 field_240813_g_ + f Lnet/minecraft/class_1934; field_25713 field_241785_e_ + f Lnet/minecraft/class_1934; field_12282 gameType + f J field_20665 hashedSeed + f Z field_20666 field_240815_n_ + f I field_12280 playerId + f Z field_24618 reducedDebugInfo + f Z field_12278 field_240814_m_ + f Z field_24619 enableRespawnScreen + f Ljava/util/Set; field_25320 field_240811_e_ +c net/minecraft/class_2683 net/minecraft/network/play/server/SMapDataPacket + m (Lnet/minecraft/class_22;)V method_11642 setMapdataTo + m (Lnet/minecraft/class_2602;)V method_11643 processPacket + m ()I method_11644 getMapId + f I field_12300 minZ + f I field_12303 mapId + f Z field_12302 trackingPosition + f I field_12299 columns + f Z field_17433 field_218730_d + f I field_12297 rows + f [B field_12298 mapDataBytes + f [Lnet/minecraft/class_20; field_12304 icons + f I field_12301 minX + f B field_12296 mapScale +c net/minecraft/class_3943 net/minecraft/network/play/server/SMerchantOffersPacket + m (Lnet/minecraft/class_2602;)V method_17588 processPacket + m ()I method_19459 getExp + m ()Lnet/minecraft/class_1916; method_17590 getOffers + m ()Z method_19460 func_218735_f + m ()Z method_20722 func_223477_g + m ()I method_17589 getContainerId + m ()I method_19458 getLevel + f I field_18802 xp + f Z field_18803 field_218740_e + f Lnet/minecraft/class_1916; field_17435 offers + f Z field_19376 field_223478_f + f I field_17434 containerId + f I field_18801 level +c net/minecraft/class_2684 net/minecraft/network/play/server/SEntityPacket + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2602;)V method_11651 processPacket + m (J)D method_30301 func_244299_a + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_30302 func_244300_a + m (JJJ)Lnet/minecraft/class_243; method_18695 func_218744_a + m ()B method_11650 getPitch + m (D)J method_18047 func_218743_a + m ()Z method_22826 func_229745_h_ + m ()B method_11649 getYaw + m ()Z method_11653 getOnGround + m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_11645 getEntity + m ()Z method_11652 isRotating + f Z field_12306 onGround + f B field_12311 pitch + f Z field_12305 rotating + f B field_12312 yaw + f I field_12310 entityId + f S field_12307 posZ + f Z field_20849 isMovePacket + f S field_12308 posY + f S field_12309 posX +c net/minecraft/class_2684$class_2685 net/minecraft/network/play/server/SEntityPacket$RelativeMovePacket +c net/minecraft/class_2684$class_2686 net/minecraft/network/play/server/SEntityPacket$MovePacket +c net/minecraft/class_2684$class_2687 net/minecraft/network/play/server/SEntityPacket$LookPacket +c net/minecraft/class_2692 net/minecraft/network/play/server/SMoveVehiclePacket + m (Lnet/minecraft/class_2602;)V method_11672 processPacket + m ()D method_11673 getX + m ()F method_11671 getPitch + m ()D method_11674 getY + m ()D method_11670 getZ + m ()F method_11675 getYaw + f D field_12324 x + f F field_12321 pitch + f D field_12322 y + f D field_12320 z + f F field_12323 yaw +c net/minecraft/class_3895 net/minecraft/network/play/server/SOpenBookWindowPacket + m (Lnet/minecraft/class_2602;)V method_17187 processPacket + m ()Lnet/minecraft/class_1268; method_17188 getHand + f Lnet/minecraft/class_1268; field_17199 hand +c net/minecraft/class_3944 net/minecraft/network/play/server/SOpenWindowPacket + m ()Lnet/minecraft/class_3917; method_17593 getContainerType + m ()Lnet/minecraft/class_2561; method_17594 getTitle + m ()I method_17592 getWindowId + m (Lnet/minecraft/class_2602;)V method_17591 processPacket + f Lnet/minecraft/class_2561; field_17438 title + f I field_17436 windowId + f I field_17437 menuId +c net/minecraft/class_2693 net/minecraft/network/play/server/SOpenSignMenuPacket + m ()Lnet/minecraft/class_2338; method_11677 getSignPosition + m (Lnet/minecraft/class_2602;)V method_11676 processPacket + f Lnet/minecraft/class_2338; field_12325 signPosition +c net/minecraft/class_2695 net/minecraft/network/play/server/SPlaceGhostRecipePacket + m ()Lnet/minecraft/class_2960; method_11684 getRecipeId + m (Lnet/minecraft/class_2602;)V method_11686 processPacket + m ()I method_11685 getWindowId + f Lnet/minecraft/class_2960; field_12332 recipe + f I field_12333 windowId +c net/minecraft/class_2696 net/minecraft/network/play/server/SPlayerAbilitiesPacket + m ()F method_11691 getWalkSpeed + m (Lnet/minecraft/class_2602;)V method_11697 processPacket + m ()Z method_11695 isInvulnerable + m ()Z method_11699 isAllowFlying + m ()Z method_11698 isFlying + m ()Z method_11696 isCreativeMode + m ()F method_11690 getFlySpeed + f F field_12334 walkSpeed + f Z field_12339 invulnerable + f Z field_12338 flying + f Z field_12336 creativeMode + f F field_12335 flySpeed + f Z field_12337 allowFlying +c net/minecraft/class_2698 net/minecraft/network/play/server/SCombatPacket + m (Lnet/minecraft/class_2602;)V method_11706 processPacket + f I field_12349 playerId + f I field_12345 duration + f I field_12348 entityId + f Lnet/minecraft/class_2561; field_12346 deathMessage + f Lnet/minecraft/class_2698$class_2699; field_12347 eventType +c net/minecraft/class_2698$class_2699 net/minecraft/network/play/server/SCombatPacket$Event + m ()[Lnet/minecraft/class_2698$class_2699; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2698$class_2699; valueOf valueOf + f Lnet/minecraft/class_2698$class_2699; field_12352 ENTER_COMBAT + f Lnet/minecraft/class_2698$class_2699; field_12353 END_COMBAT + f Lnet/minecraft/class_2698$class_2699; field_12350 ENTITY_DIED + f [Lnet/minecraft/class_2698$class_2699; field_12351 $VALUES +c net/minecraft/class_2698$1 net/minecraft/network/play/server/SCombatPacket$1 + f [I field_12354 field_179944_a +c net/minecraft/class_2703 net/minecraft/network/play/server/SPlayerListItemPacket + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2602;)V method_11721 processPacket + m ()Ljava/util/List; method_11722 getEntries + m ()Lnet/minecraft/class_2703$class_2704; method_11723 getAction + f Lnet/minecraft/class_2703$class_2704; field_12368 action + f Ljava/util/List; field_12369 players +c net/minecraft/class_2703$class_2704 net/minecraft/network/play/server/SPlayerListItemPacket$Action + m ()[Lnet/minecraft/class_2703$class_2704; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2703$class_2704; valueOf valueOf + f Lnet/minecraft/class_2703$class_2704; field_12371 UPDATE_LATENCY + f Lnet/minecraft/class_2703$class_2704; field_12375 UPDATE_GAME_MODE + f Lnet/minecraft/class_2703$class_2704; field_12374 UPDATE_DISPLAY_NAME + f Lnet/minecraft/class_2703$class_2704; field_12376 REMOVE_PLAYER + f [Lnet/minecraft/class_2703$class_2704; field_12373 $VALUES + f Lnet/minecraft/class_2703$class_2704; field_12372 ADD_PLAYER +c net/minecraft/class_2703$1 net/minecraft/network/play/server/SPlayerListItemPacket$1 + f [I field_12370 field_179938_a +c net/minecraft/class_2703$class_2705 net/minecraft/network/play/server/SPlayerListItemPacket$AddPlayerData + m ()Lnet/minecraft/class_2561; method_11724 getDisplayName + m ()Lnet/minecraft/class_1934; method_11725 getGameMode + m ()Lcom/mojang/authlib/GameProfile; method_11726 getProfile + m ()I method_11727 getPing + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_1934; field_12379 gamemode + f I field_12378 ping + f Lcom/mojang/authlib/GameProfile; field_12380 profile + f Lnet/minecraft/class_2561; field_12377 displayName + f Lnet/minecraft/class_2703; field_12381 field_179968_a +c net/minecraft/class_2707 net/minecraft/network/play/server/SPlayerLookPacket + m ()Lnet/minecraft/class_2183$class_2184; method_11730 getSourceAnchor + m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_243; method_11732 getTargetPosition + m (Lnet/minecraft/class_2602;)V method_11731 processPacket + f Z field_12387 isEntity + f D field_12383 z + f Lnet/minecraft/class_2183$class_2184; field_12389 targetAnchor + f D field_12386 x + f Lnet/minecraft/class_2183$class_2184; field_12385 sourceAnchor + f I field_12388 entityId + f D field_12384 y +c net/minecraft/class_2708 net/minecraft/network/play/server/SPlayerPositionLookPacket + m (Lnet/minecraft/class_2602;)V method_11740 processPacket + m ()D method_11735 getY + m ()D method_11734 getX + m ()Ljava/util/Set; method_11733 getFlags + m ()I method_11737 getTeleportId + m ()F method_11739 getPitch + m ()F method_11736 getYaw + m ()D method_11738 getZ + f F field_12391 pitch + f D field_12390 z + f F field_12393 yaw + f D field_12392 y + f D field_12395 x + f I field_12394 teleportId + f Ljava/util/Set; field_12396 flags +c net/minecraft/class_2708$class_2709 net/minecraft/network/play/server/SPlayerPositionLookPacket$Flags + m ()[Lnet/minecraft/class_2708$class_2709; values values + m (Ljava/util/Set;)I method_11741 pack + m (Ljava/lang/String;)Lnet/minecraft/class_2708$class_2709; valueOf valueOf + m ()I method_11742 getMask + m (I)Ljava/util/Set; method_11744 unpack + m (I)Z method_11743 isSet + f I field_12399 bit + f Lnet/minecraft/class_2708$class_2709; field_12401 Y_ROT + f [Lnet/minecraft/class_2708$class_2709; field_12402 $VALUES + f Lnet/minecraft/class_2708$class_2709; field_12403 Z + f Lnet/minecraft/class_2708$class_2709; field_12398 Y + f Lnet/minecraft/class_2708$class_2709; field_12400 X + f Lnet/minecraft/class_2708$class_2709; field_12397 X_ROT +c net/minecraft/class_2713 net/minecraft/network/play/server/SRecipeBookPacket + m ()Ljava/util/List; method_11750 getRecipes + m ()Lnet/minecraft/class_5411; method_11756 func_244302_d + m ()Lnet/minecraft/class_2713$class_2714; method_11751 getState + m ()Ljava/util/List; method_11757 getDisplayedRecipes + m (Lnet/minecraft/class_2602;)V method_11753 processPacket + f Ljava/util/List; field_12414 recipes + f Lnet/minecraft/class_5411; field_25797 field_244301_d + f Ljava/util/List; field_12409 displayedRecipes + f Lnet/minecraft/class_2713$class_2714; field_12408 state +c net/minecraft/class_2713$class_2714 net/minecraft/network/play/server/SRecipeBookPacket$State + m ()[Lnet/minecraft/class_2713$class_2714; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2713$class_2714; valueOf valueOf + f Lnet/minecraft/class_2713$class_2714; field_12415 ADD + f Lnet/minecraft/class_2713$class_2714; field_12417 REMOVE + f [Lnet/minecraft/class_2713$class_2714; field_12418 $VALUES + f Lnet/minecraft/class_2713$class_2714; field_12416 INIT +c net/minecraft/class_2716 net/minecraft/network/play/server/SDestroyEntitiesPacket + m ()[I method_11763 getEntityIDs + m (Lnet/minecraft/class_2602;)V method_11764 processPacket + f [I field_12422 entityIDs +c net/minecraft/class_2718 net/minecraft/network/play/server/SRemoveEntityEffectPacket + m ()Lnet/minecraft/class_1291; method_11768 getPotion + m (Lnet/minecraft/class_2602;)V method_11769 processPacket + m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_11767 getEntity + f I field_12424 entityId + f Lnet/minecraft/class_1291; field_12425 effectId +c net/minecraft/class_2720 net/minecraft/network/play/server/SSendResourcePackPacket + m ()Ljava/lang/String; method_11773 getHash + m (Lnet/minecraft/class_2602;)V method_11774 processPacket + m ()Ljava/lang/String; method_11772 getURL + f Ljava/lang/String; field_12428 hash + f Ljava/lang/String; field_12427 url +c net/minecraft/class_2724 net/minecraft/network/play/server/SRespawnPacket + m ()Lnet/minecraft/class_5321; method_11779 func_240827_c_ + m ()J method_22425 getHashedSeed + m ()Lnet/minecraft/class_1934; method_11780 getGameType + m ()Z method_28121 func_240829_g_ + m ()Lnet/minecraft/class_1934; method_30117 func_241788_f_ + m ()Z method_27904 func_240830_h_ + m ()Z method_28120 func_240828_f_ + m (Lnet/minecraft/class_2602;)V method_11782 processPacket + m ()Lnet/minecraft/class_2874; method_29445 func_244303_b + m ()Lnet/minecraft/class_2874; method_31178 func_244304_j + f Z field_24620 field_240823_e_ + f Lnet/minecraft/class_5321; field_12431 dimensionID + f Z field_24451 field_240825_g_ + f J field_20667 hashedSeed + f Lnet/minecraft/class_2874; field_25322 field_240822_a_ + f Lnet/minecraft/class_1934; field_12434 gameType + f Z field_24621 field_240824_f_ + f Lnet/minecraft/class_1934; field_25714 field_241787_e_ +c net/minecraft/class_2726 net/minecraft/network/play/server/SEntityHeadLookPacket + m ()B method_11787 getYaw + m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_11786 getEntity + m (Lnet/minecraft/class_2602;)V method_11788 processPacket + f I field_12437 entityId + f B field_12436 yaw +c net/minecraft/class_2637 net/minecraft/network/play/server/SMultiBlockChangePacket + m (Lnet/minecraft/class_2602;)V method_11392 processPacket + m (I)V method_30620 func_244309_a + m (Ljava/util/function/BiConsumer;)V method_30621 func_244310_a + m ()Z method_31179 func_244311_b + f [Lnet/minecraft/class_2680; field_26347 field_244307_c + f Z field_26749 field_244308_d + f Lnet/minecraft/class_4076; field_26345 field_244305_a + f [S field_26346 field_244306_b +c net/minecraft/class_2729 net/minecraft/network/play/server/SSelectAdvancementsTabPacket + m (Lnet/minecraft/class_2602;)V method_11794 processPacket + m ()Lnet/minecraft/class_2960; method_11793 getTab + f Lnet/minecraft/class_2960; field_12440 tab +c net/minecraft/class_2730 net/minecraft/network/play/server/SWorldBorderPacket + m (Lnet/minecraft/class_2784;)V method_11795 apply + m (Lnet/minecraft/class_2602;)V method_11796 processPacket + f I field_12442 warningDistance + f J field_12445 timeUntilTarget + f I field_12444 warningTime + f D field_12447 diameter + f Lnet/minecraft/class_2730$class_2731; field_12448 action + f D field_12449 targetSize + f I field_12446 size + f D field_12441 centerZ + f D field_12443 centerX +c net/minecraft/class_2730$1 net/minecraft/network/play/server/SWorldBorderPacket$1 + f [I field_12457 field_179947_a +c net/minecraft/class_2730$class_2731 net/minecraft/network/play/server/SWorldBorderPacket$Action + m ()[Lnet/minecraft/class_2730$class_2731; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2730$class_2731; valueOf valueOf + f [Lnet/minecraft/class_2730$class_2731; field_12453 $VALUES + f Lnet/minecraft/class_2730$class_2731; field_12450 SET_CENTER + f Lnet/minecraft/class_2730$class_2731; field_12452 LERP_SIZE + f Lnet/minecraft/class_2730$class_2731; field_12454 INITIALIZE + f Lnet/minecraft/class_2730$class_2731; field_12455 SET_WARNING_TIME + f Lnet/minecraft/class_2730$class_2731; field_12456 SET_SIZE + f Lnet/minecraft/class_2730$class_2731; field_12451 SET_WARNING_BLOCKS +c net/minecraft/class_2734 net/minecraft/network/play/server/SCameraPacket + m (Lnet/minecraft/class_2602;)V method_11801 processPacket + m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_11800 getEntity + f I field_12462 entityId +c net/minecraft/class_2735 net/minecraft/network/play/server/SHeldItemChangePacket + m (Lnet/minecraft/class_2602;)V method_11802 processPacket + m ()I method_11803 getHeldItemHotbarIndex + f I field_12463 heldItemHotbarIndex +c net/minecraft/class_4282 net/minecraft/network/play/server/SUpdateChunkPositionPacket + m ()I method_20322 func_218755_b + m ()I method_20323 func_218754_c + m (Lnet/minecraft/class_2602;)V method_20321 processPacket + f I field_19206 field_218756_a + f I field_19207 field_218757_b +c net/minecraft/class_4273 net/minecraft/network/play/server/SUpdateViewDistancePacket + m (Lnet/minecraft/class_2602;)V method_20205 processPacket + m ()I method_20206 getViewDistance + f I field_19146 viewDistance +c net/minecraft/class_2759 net/minecraft/network/play/server/SWorldSpawnChangedPacket + m ()F method_30732 func_244313_c + m ()Lnet/minecraft/class_2338; method_11870 func_240832_b_ + m (Lnet/minecraft/class_2602;)V method_11869 processPacket + f Lnet/minecraft/class_2338; field_12615 field_240831_a_ + f F field_26381 field_244312_b +c net/minecraft/class_2736 net/minecraft/network/play/server/SDisplayObjectivePacket + m ()Ljava/lang/String; method_11804 getName + m (Lnet/minecraft/class_2602;)V method_11805 processPacket + m ()I method_11806 getPosition + f Ljava/lang/String; field_12465 scoreName + f I field_12464 position +c net/minecraft/class_2739 net/minecraft/network/play/server/SEntityMetadataPacket + m ()Ljava/util/List; method_11809 getDataManagerEntries + m (Lnet/minecraft/class_2602;)V method_11808 processPacket + m ()I method_11807 getEntityId + f I field_12476 entityId + f Ljava/util/List; field_12477 dataManagerEntries +c net/minecraft/class_2740 net/minecraft/network/play/server/SMountEntityPacket + m ()I method_11810 getVehicleEntityId + m (Lnet/minecraft/class_2602;)V method_11811 processPacket + m ()I method_11812 getEntityId + f I field_12478 vehicleEntityId + f I field_12479 entityId +c net/minecraft/class_2743 net/minecraft/network/play/server/SEntityVelocityPacket + m ()I method_11818 getEntityID + m ()I method_11819 getMotionZ + m ()I method_11816 getMotionY + m (Lnet/minecraft/class_2602;)V method_11817 processPacket + m ()I method_11815 getMotionX + f I field_12561 motionZ + f I field_12562 motionY + f I field_12564 entityID + f I field_12563 motionX +c net/minecraft/class_2744 net/minecraft/network/play/server/SEntityEquipmentPacket + m ()I method_11820 getEntityID + m ()Ljava/util/List; method_30145 func_241790_c_ + m (Lnet/minecraft/class_2602;)V method_11823 processPacket + f I field_12565 entityID + f Ljava/util/List; field_25721 field_241789_b_ +c net/minecraft/class_2748 net/minecraft/network/play/server/SSetExperiencePacket + m (Lnet/minecraft/class_2602;)V method_11829 processPacket + m ()F method_11830 getExperienceBar + m ()I method_11827 getTotalExperience + m ()I method_11828 getLevel + f F field_12580 experienceBar + f I field_12581 level + f I field_12582 totalExperience +c net/minecraft/class_2749 net/minecraft/network/play/server/SUpdateHealthPacket + m ()F method_11834 getSaturationLevel + m ()I method_11831 getFoodLevel + m (Lnet/minecraft/class_2602;)V method_11832 processPacket + m ()F method_11833 getHealth + f F field_12583 saturationLevel + f I field_12585 foodLevel + f F field_12584 health +c net/minecraft/class_2751 net/minecraft/network/play/server/SScoreboardObjectivePacket + m ()Lnet/minecraft/class_274$class_275; method_11839 getRenderType + m (Lnet/minecraft/class_2602;)V method_11838 processPacket + m ()I method_11837 getAction + m ()Lnet/minecraft/class_2561; method_11836 getDisplayName + m ()Ljava/lang/String; method_11835 getObjectiveName + f I field_12590 action + f Lnet/minecraft/class_274$class_275; field_12592 renderType + f Lnet/minecraft/class_2561; field_12591 displayName + f Ljava/lang/String; field_12589 objectiveName +c net/minecraft/class_2752 net/minecraft/network/play/server/SSetPassengersPacket + m ()I method_11841 getEntityId + m (Lnet/minecraft/class_2602;)V method_11842 processPacket + m ()[I method_11840 getPassengerIds + f I field_12594 entityId + f [I field_12593 passengerIds +c net/minecraft/class_2755 net/minecraft/network/play/server/STeamsPacket + m ()Lnet/minecraft/class_2561; method_11854 getSuffix + m ()Ljava/lang/String; method_11851 getNameTagVisibility + m ()Ljava/lang/String; method_11861 getCollisionRule + m (Lnet/minecraft/class_2602;)V method_11860 processPacket + m ()Ljava/util/Collection; method_11857 getPlayers + m ()Lnet/minecraft/class_2561; method_11859 getDisplayName + m ()I method_11852 getFriendlyFlags + m ()I method_11853 getAction + m ()Lnet/minecraft/class_124; method_11858 getColor + m ()Lnet/minecraft/class_2561; method_11856 getPrefix + m ()Ljava/lang/String; method_11855 getName + f Lnet/minecraft/class_2561; field_12597 suffix + f Lnet/minecraft/class_124; field_12598 color + f Ljava/util/Collection; field_12602 players + f I field_12606 friendlyFlags + f Ljava/lang/String; field_12600 name + f I field_12599 action + f Lnet/minecraft/class_2561; field_12603 displayName + f Ljava/lang/String; field_12604 nameTagVisibility + f Lnet/minecraft/class_2561; field_12601 prefix + f Ljava/lang/String; field_12605 collisionRule +c net/minecraft/class_2757 net/minecraft/network/play/server/SUpdateScorePacket + m ()Lnet/minecraft/class_2995$class_2996; method_11863 getAction + m ()Ljava/lang/String; method_11862 getPlayerName + m ()Ljava/lang/String; method_11864 getObjectiveName + m ()I method_11865 getScoreValue + m (Lnet/minecraft/class_2602;)V method_11866 processPacket + f Lnet/minecraft/class_2995$class_2996; field_12612 action + f Ljava/lang/String; field_12610 name + f Ljava/lang/String; field_12613 objective + f I field_12611 value +c net/minecraft/class_2761 net/minecraft/network/play/server/SUpdateTimePacket + m ()J method_11873 getWorldTime + m ()J method_11871 getTotalWorldTime + m (Lnet/minecraft/class_2602;)V method_11872 processPacket + f J field_12620 worldTime + f J field_12621 totalWorldTime +c net/minecraft/class_2762 net/minecraft/network/play/server/STitlePacket + m ()I method_11875 getFadeOutTime + m ()I method_11876 getDisplayTime + m ()Lnet/minecraft/class_2561; method_11877 getMessage + m ()I method_11874 getFadeInTime + m ()Lnet/minecraft/class_2762$class_2763; method_11878 getType + m (Lnet/minecraft/class_2602;)V method_11879 processPacket + f I field_12622 fadeOutTime + f I field_12623 displayTime + f Lnet/minecraft/class_2561; field_12626 message + f Lnet/minecraft/class_2762$class_2763; field_12625 type + f I field_12624 fadeInTime +c net/minecraft/class_2762$class_2763 net/minecraft/network/play/server/STitlePacket$Type + m ()[Lnet/minecraft/class_2762$class_2763; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2762$class_2763; valueOf valueOf + f Lnet/minecraft/class_2762$class_2763; field_12632 SUBTITLE + f Lnet/minecraft/class_2762$class_2763; field_12627 ACTIONBAR + f Lnet/minecraft/class_2762$class_2763; field_12629 TIMES + f Lnet/minecraft/class_2762$class_2763; field_12633 CLEAR + f Lnet/minecraft/class_2762$class_2763; field_12628 RESET + f [Lnet/minecraft/class_2762$class_2763; field_12631 $VALUES + f Lnet/minecraft/class_2762$class_2763; field_12630 TITLE +c net/minecraft/class_2765 net/minecraft/network/play/server/SSpawnMovingSoundEffectPacket + m ()F method_11885 func_218764_e + m ()I method_11883 func_218762_d + m ()Lnet/minecraft/class_3414; method_11882 func_218763_b + m ()Lnet/minecraft/class_3419; method_11881 func_218760_c + m (Lnet/minecraft/class_2602;)V method_11884 processPacket + m ()F method_11880 func_218761_f + f Lnet/minecraft/class_3419; field_12641 field_218766_b + f Lnet/minecraft/class_3414; field_12642 field_218765_a + f F field_12638 field_218769_e + f F field_12639 field_218768_d + f I field_12640 field_218767_c +c net/minecraft/class_2767 net/minecraft/network/play/server/SPlaySoundEffectPacket + m ()F method_11891 getVolume + m ()D method_11893 getZ + m ()D method_11889 getY + m ()D method_11890 getX + m (Lnet/minecraft/class_2602;)V method_11895 processPacket + m ()Lnet/minecraft/class_3419; method_11888 getCategory + m ()F method_11892 getPitch + m ()Lnet/minecraft/class_3414; method_11894 getSound + f F field_12662 soundPitch + f Lnet/minecraft/class_3414; field_12661 sound + f Lnet/minecraft/class_3419; field_12660 category + f F field_12656 soundVolume + f I field_12657 posZ + f I field_12658 posY + f I field_12659 posX +c net/minecraft/class_2770 net/minecraft/network/play/server/SStopSoundPacket + m ()Lnet/minecraft/class_3419; method_11903 getCategory + m (Lnet/minecraft/class_2602;)V method_11905 processPacket + m ()Lnet/minecraft/class_2960; method_11904 getName + f Lnet/minecraft/class_3419; field_12677 category + f Lnet/minecraft/class_2960; field_12676 name +c net/minecraft/class_2772 net/minecraft/network/play/server/SPlayerListHeaderFooterPacket + m (Lnet/minecraft/class_2602;)V method_11907 processPacket + m ()Lnet/minecraft/class_2561; method_11908 getHeader + m ()Lnet/minecraft/class_2561; method_11906 getFooter + f Lnet/minecraft/class_2561; field_12683 header + f Lnet/minecraft/class_2561; field_12684 footer +c net/minecraft/class_2774 net/minecraft/network/play/server/SQueryNBTResponsePacket + m ()I method_11910 getTransactionId + m ()Lnet/minecraft/class_2487; method_11911 getTag + m (Lnet/minecraft/class_2602;)V method_11909 processPacket + f I field_12691 transactionId + f Lnet/minecraft/class_2487; field_12690 tag +c net/minecraft/class_2775 net/minecraft/network/play/server/SCollectItemPacket + m ()I method_11913 getAmount + m (Lnet/minecraft/class_2602;)V method_11914 processPacket + m ()I method_11912 getEntityID + m ()I method_11915 getCollectedItemEntityID + f I field_12692 collectedQuantity + f I field_12693 entityId + f I field_12694 collectedItemEntityId +c net/minecraft/class_2777 net/minecraft/network/play/server/SEntityTeleportPacket + m ()I method_11916 getEntityId + m ()D method_11917 getX + m (Lnet/minecraft/class_2602;)V method_11922 processPacket + m ()B method_11921 getPitch + m ()B method_11920 getYaw + m ()Z method_11923 isOnGround + m ()D method_11918 getZ + m ()D method_11919 getY + f B field_12706 pitch + f D field_12701 posZ + f B field_12707 yaw + f Z field_12704 onGround + f I field_12705 entityId + f D field_12702 posY + f D field_12703 posX +c net/minecraft/class_2779 net/minecraft/network/play/server/SAdvancementInfoPacket + m (Lnet/minecraft/class_2602;)V method_11925 processPacket + m ()Ljava/util/Map; method_11927 getProgressUpdates + m ()Z method_11924 isFirstSync + m ()Ljava/util/Map; method_11928 getAdvancementsToAdd + m ()Ljava/util/Set; method_11926 getAdvancementsToRemove + f Ljava/util/Map; field_12716 progressUpdates + f Ljava/util/Set; field_12715 advancementsToRemove + f Z field_12718 firstSync + f Ljava/util/Map; field_12717 advancementsToAdd +c net/minecraft/class_2781 net/minecraft/network/play/server/SEntityPropertiesPacket + m (Lnet/minecraft/class_2602;)V method_11936 processPacket + m ()Ljava/util/List; method_11938 getSnapshots + m ()I method_11937 getEntityId + f Ljava/util/List; field_12720 snapshots + f I field_12719 entityId +c net/minecraft/class_2781$class_2782 net/minecraft/network/play/server/SEntityPropertiesPacket$Snapshot + m ()D method_11941 getBaseValue + m ()Lnet/minecraft/class_1320; method_11940 func_240834_a_ + m ()Ljava/util/Collection; method_11939 getModifiers + f D field_12722 baseValue + f Lnet/minecraft/class_1320; field_12724 field_240833_b_ + f Ljava/util/Collection; field_12723 modifiers + f Lnet/minecraft/class_2781; field_12721 field_151414_a +c net/minecraft/class_2783 net/minecraft/network/play/server/SPlayEntityEffectPacket + m ()B method_11945 getAmplifier + m ()Z method_11950 getIsAmbient + m ()I method_11943 getEntityId + m ()Z method_11949 doesShowParticles + m ()B method_11946 getEffectId + m (Lnet/minecraft/class_2602;)V method_11948 processPacket + m ()Z method_11947 isMaxDuration + m ()I method_11944 getDuration + m ()Z method_11942 shouldShowIcon + f I field_12726 duration + f B field_12728 flags + f B field_12729 amplifier + f I field_12727 entityId + f B field_12725 effectId +c net/minecraft/class_2788 net/minecraft/network/play/server/SUpdateRecipesPacket + m (Lnet/minecraft/class_2602;)V method_11997 processPacket + m (Lnet/minecraft/class_1860;Lnet/minecraft/class_2540;)V method_17816 func_218771_a + m (Lnet/minecraft/class_2960;)Ljava/lang/IllegalArgumentException; method_17975 func_218770_a + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_1860; method_17817 func_218772_c + m ()Ljava/util/List; method_11998 getRecipes + f Ljava/util/List; field_12751 recipes +c net/minecraft/class_2790 net/minecraft/network/play/server/STagsListPacket + m ()Lnet/minecraft/class_5415; method_12000 getTags + m (Lnet/minecraft/class_2602;)V method_12001 processPacket + f Lnet/minecraft/class_5415; field_12757 tags +c net/minecraft/class_4617 net/minecraft/util/RandomObjectDescriptor + m (Ljava/util/UUID;)Ljava/util/Random; method_23268 getRandomFromUUID + m (Ljava/util/UUID;)Ljava/lang/String; method_23267 getRandomObjectDescriptor + m (Ljava/util/Random;[Ljava/lang/String;)Ljava/lang/String; method_23266 getRandomString + f [Ljava/lang/String; field_21050 FIRST_PART + f [Ljava/lang/String; field_21051 SECOND_PART +c net/minecraft/class_4209 net/minecraft/network/DebugPacketSender + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2540;Lnet/minecraft/class_2960;)V method_22319 func_229753_a_ + m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3449;)V method_19474 sendStructureStart + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_19778 func_218801_c + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_19777 func_218805_b + m (Lnet/minecraft/class_4466;)V method_23855 func_229749_a_ + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1308;Lnet/minecraft/class_11;F)V method_19470 sendPath + m (Lnet/minecraft/class_1309;)V method_19774 sendLivingEntity + m (Lnet/minecraft/class_3218;Ljava/util/Collection;)V method_20575 sendRaids + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_24819 func_240840_d_ + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_19472 func_218806_a + m (Lnet/minecraft/class_3218;)V method_22317 func_229751_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/lang/String;II)V method_22318 func_229752_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1923;)V method_19775 sendChuckPos + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_19776 func_218799_a + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1308;Lnet/minecraft/class_1355;)V method_19469 sendGoal + m (Lnet/minecraft/class_4482;)V method_23856 sendBeehiveDebugData + f Lorg/apache/logging/log4j/Logger; field_18961 LOGGER +c net/minecraft/class_2792 net/minecraft/network/play/IServerPlayNetHandler + m (Lnet/minecraft/class_2836;)V method_12064 processSteerBoat + m (Lnet/minecraft/class_2813;)V method_12076 processClickWindow + m (Lnet/minecraft/class_2851;)V method_12067 processInput + m (Lnet/minecraft/class_2886;)V method_12065 processTryUseItem + m (Lnet/minecraft/class_2873;)V method_12070 processCreativeInventoryAction + m (Lnet/minecraft/class_2793;)V method_12050 processConfirmTeleport + m (Lnet/minecraft/class_2840;)V method_12061 processPlaceRecipe + m (Lnet/minecraft/class_2817;)V method_12075 processCustomPayload + m (Lnet/minecraft/class_2853;)V method_12047 handleRecipeBookUpdate + m (Lnet/minecraft/class_2875;)V method_12051 processUpdateStructureBlock + m (Lnet/minecraft/class_4210;)V method_19475 func_217263_a + m (Lnet/minecraft/class_2846;)V method_12066 processPlayerDigging + m (Lnet/minecraft/class_2822;)V method_12074 processNBTQueryEntity + m (Lnet/minecraft/class_2856;)V method_12081 handleResourcePackStatus + m (Lnet/minecraft/class_2879;)V method_12052 handleAnimation + m (Lnet/minecraft/class_2799;)V method_12068 processClientStatus + m (Lnet/minecraft/class_5194;)V method_27273 func_230549_a_ + m (Lnet/minecraft/class_2863;)V method_12080 processSelectTrade + m (Lnet/minecraft/class_2885;)V method_12046 processTryUseItemOnBlock + m (Lnet/minecraft/class_2805;)V method_12059 processTabComplete + m (Lnet/minecraft/class_4211;)V method_19476 func_217261_a + m (Lnet/minecraft/class_2868;)V method_12056 processHeldItemChange + m (Lnet/minecraft/class_2811;)V method_12055 processEnchantItem + m (Lnet/minecraft/class_2833;)V method_12078 processVehicleMove + m (Lnet/minecraft/class_2848;)V method_12045 processEntityAction + m (Lnet/minecraft/class_2871;)V method_12049 processUpdateCommandMinecart + m (Lnet/minecraft/class_2815;)V method_12054 processCloseWindow + m (Lnet/minecraft/class_2838;)V method_12084 processPickItem + m (Lnet/minecraft/class_5427;)V method_30303 func_241831_a + m (Lnet/minecraft/class_3753;)V method_16383 func_217262_a + m (Lnet/minecraft/class_2820;)V method_12053 processEditBook + m (Lnet/minecraft/class_2795;)V method_12072 processNBTQueryBlockEntity + m (Lnet/minecraft/class_2842;)V method_12083 processPlayerAbilities + m (Lnet/minecraft/class_2855;)V method_12060 processRenameItem + m (Lnet/minecraft/class_2877;)V method_12071 processUpdateSign + m (Lnet/minecraft/class_2824;)V method_12062 processUseEntity + m (Lnet/minecraft/class_2797;)V method_12048 processChatMessage + m (Lnet/minecraft/class_2859;)V method_12058 handleSeenAdvancements + m (Lnet/minecraft/class_2884;)V method_12073 handleSpectate + m (Lnet/minecraft/class_2827;)V method_12082 processKeepAlive + m (Lnet/minecraft/class_2803;)V method_12069 processClientSettings + m (Lnet/minecraft/class_2866;)V method_12057 processUpdateBeacon + m (Lnet/minecraft/class_2828;)V method_12063 processPlayer + m (Lnet/minecraft/class_2809;)V method_12079 processConfirmTransaction + m (Lnet/minecraft/class_2870;)V method_12077 processUpdateCommandBlock +c net/minecraft/class_2793 net/minecraft/network/play/client/CConfirmTeleportPacket + m ()I method_12086 getTeleportId + m (Lnet/minecraft/class_2792;)V method_12085 processPacket + f I field_12758 telportId +c net/minecraft/class_2795 net/minecraft/network/play/client/CQueryTileEntityNBTPacket + m (Lnet/minecraft/class_2792;)V method_12095 processPacket + m ()I method_12096 getTransactionId + m ()Lnet/minecraft/class_2338; method_12094 getPosition + f I field_12762 transactionId + f Lnet/minecraft/class_2338; field_12763 pos +c net/minecraft/class_4210 net/minecraft/network/play/client/CSetDifficultyPacket + m ()Lnet/minecraft/class_1267; method_19478 func_218773_b + m (Lnet/minecraft/class_2792;)V method_19477 processPacket + f Lnet/minecraft/class_1267; field_18805 field_218774_a +c net/minecraft/class_2797 net/minecraft/network/play/client/CChatMessagePacket + m (Lnet/minecraft/class_2792;)V method_12115 processPacket + m ()Ljava/lang/String; method_12114 getMessage + f Ljava/lang/String; field_12764 message +c net/minecraft/class_2799 net/minecraft/network/play/client/CClientStatusPacket + m ()Lnet/minecraft/class_2799$class_2800; method_12119 getStatus + m (Lnet/minecraft/class_2792;)V method_12120 processPacket + f Lnet/minecraft/class_2799$class_2800; field_12773 status +c net/minecraft/class_2799$class_2800 net/minecraft/network/play/client/CClientStatusPacket$State + m ()[Lnet/minecraft/class_2799$class_2800; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2799$class_2800; valueOf valueOf + f Lnet/minecraft/class_2799$class_2800; field_12775 REQUEST_STATS + f [Lnet/minecraft/class_2799$class_2800; field_12776 $VALUES + f Lnet/minecraft/class_2799$class_2800; field_12774 PERFORM_RESPAWN +c net/minecraft/class_2803 net/minecraft/network/play/client/CClientSettingsPacket + m ()Z method_12135 isColorsEnabled + m ()I method_12136 getModelPartFlags + m ()Lnet/minecraft/class_1306; method_12132 getMainHand + m ()Lnet/minecraft/class_1659; method_12134 getChatVisibility + m (Lnet/minecraft/class_2792;)V method_12133 processPacket + f I field_12780 view + f Ljava/lang/String; field_12777 lang + f I field_12778 modelPartFlags + f Z field_12779 enableColors + f Lnet/minecraft/class_1659; field_12781 chatVisibility + f Lnet/minecraft/class_1306; field_12782 mainHand +c net/minecraft/class_2805 net/minecraft/network/play/client/CTabCompletePacket + m ()I method_12149 getTransactionId + m (Lnet/minecraft/class_2792;)V method_12147 processPacket + m ()Ljava/lang/String; method_12148 getCommand + f Ljava/lang/String; field_12785 command + f I field_12784 transactionId +c net/minecraft/class_2809 net/minecraft/network/play/client/CConfirmTransactionPacket + m ()S method_12176 getUid + m ()I method_12178 getWindowId + m (Lnet/minecraft/class_2792;)V method_12177 processPacket + f Z field_12810 accepted + f S field_12809 uid + f I field_12811 windowId +c net/minecraft/class_2811 net/minecraft/network/play/client/CEnchantItemPacket + m (Lnet/minecraft/class_2792;)V method_12185 processPacket + m ()I method_12187 getWindowId + m ()I method_12186 getButton + f I field_12813 windowId + f I field_12812 button +c net/minecraft/class_2813 net/minecraft/network/play/client/CClickWindowPacket + m ()S method_12189 getActionNumber + m ()I method_12192 getSlotId + m ()Lnet/minecraft/class_1799; method_12190 getClickedItem + m ()I method_12193 getUsedButton + m ()Lnet/minecraft/class_1713; method_12195 getClickType + m (Lnet/minecraft/class_2792;)V method_12191 processPacket + m ()I method_12194 getWindowId + f S field_12820 actionNumber + f I field_12818 slotId + f I field_12817 packedClickData + f Lnet/minecraft/class_1713; field_12815 mode + f Lnet/minecraft/class_1799; field_12816 clickedItem + f I field_12819 windowId +c net/minecraft/class_2815 net/minecraft/network/play/client/CCloseWindowPacket + m (Lnet/minecraft/class_2792;)V method_12198 processPacket + f I field_12827 windowId +c net/minecraft/class_2817 net/minecraft/network/play/client/CCustomPayloadPacket + m (Lnet/minecraft/class_2792;)V method_12199 processPacket + f Lnet/minecraft/class_2540; field_12832 data + f Lnet/minecraft/class_2960; field_12830 channel + f Lnet/minecraft/class_2960; field_12831 BRAND +c net/minecraft/class_2820 net/minecraft/network/play/client/CEditBookPacket + m ()Lnet/minecraft/class_1799; method_12237 getStack + m ()Lnet/minecraft/class_1268; method_12235 getHand + m ()Z method_12238 shouldUpdateAll + m (Lnet/minecraft/class_2792;)V method_12236 processPacket + f Lnet/minecraft/class_1799; field_12863 stack + f Lnet/minecraft/class_1268; field_12865 hand + f Z field_12864 updateAll +c net/minecraft/class_2822 net/minecraft/network/play/client/CQueryEntityNBTPacket + m ()I method_12245 getTransactionId + m ()I method_12244 getEntityId + m (Lnet/minecraft/class_2792;)V method_12243 processPacket + f I field_12868 transactionId + f I field_12867 entityId +c net/minecraft/class_2824 net/minecraft/network/play/client/CUseEntityPacket + m ()Lnet/minecraft/class_1268; method_12249 getHand + m ()Z method_30007 func_241792_e_ + m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_12248 getEntityFromWorld + m ()Lnet/minecraft/class_243; method_12250 getHitVec + m (Lnet/minecraft/class_2792;)V method_12251 processPacket + m ()Lnet/minecraft/class_2824$class_2825; method_12252 getAction + f Lnet/minecraft/class_2824$class_2825; field_12871 action + f Z field_25660 field_241791_e_ + f Lnet/minecraft/class_243; field_12872 hitVec + f I field_12870 entityId + f Lnet/minecraft/class_1268; field_12869 hand +c net/minecraft/class_2824$class_2825 net/minecraft/network/play/client/CUseEntityPacket$Action + m ()[Lnet/minecraft/class_2824$class_2825; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2824$class_2825; valueOf valueOf + f Lnet/minecraft/class_2824$class_2825; field_12873 INTERACT_AT + f Lnet/minecraft/class_2824$class_2825; field_12875 ATTACK + f Lnet/minecraft/class_2824$class_2825; field_12876 INTERACT + f [Lnet/minecraft/class_2824$class_2825; field_12874 $VALUES +c net/minecraft/class_5194 net/minecraft/network/play/client/CJigsawBlockGeneratePacket + m (Lnet/minecraft/class_2792;)V method_27274 processPacket + m ()I method_27276 func_240845_c_ + m ()Z method_29446 func_240846_d_ + m ()Lnet/minecraft/class_2338; method_27275 func_240844_b_ + f I field_24055 field_240842_b_ + f Z field_25323 field_240843_c_ + f Lnet/minecraft/class_2338; field_24054 field_240841_a_ +c net/minecraft/class_2827 net/minecraft/network/play/client/CKeepAlivePacket + m (Lnet/minecraft/class_2792;)V method_12266 processPacket + m ()J method_12267 getKey + f J field_12883 key +c net/minecraft/class_4211 net/minecraft/network/play/client/CLockDifficultyPacket + m (Lnet/minecraft/class_2792;)V method_19484 processPacket + m ()Z method_19485 func_218776_b + f Z field_18806 field_218777_a +c net/minecraft/class_2828 net/minecraft/network/play/client/CPlayerPacket + m (D)D method_12268 getY + m (D)D method_12274 getZ + m (F)F method_12271 getYaw + m (F)F method_12270 getPitch + m ()Z method_12273 isOnGround + m (Lnet/minecraft/class_2792;)V method_12272 processPacket + m (D)D method_12269 getX + f D field_12889 x + f D field_12886 y + f Z field_12891 onGround + f D field_12884 z + f Z field_12890 moving + f Z field_12888 rotating + f F field_12887 yaw + f F field_12885 pitch +c net/minecraft/class_2828$class_2830 net/minecraft/network/play/client/CPlayerPacket$PositionRotationPacket +c net/minecraft/class_2828$class_2829 net/minecraft/network/play/client/CPlayerPacket$PositionPacket +c net/minecraft/class_2828$class_2831 net/minecraft/network/play/client/CPlayerPacket$RotationPacket +c net/minecraft/class_2833 net/minecraft/network/play/client/CMoveVehiclePacket + m (Lnet/minecraft/class_2792;)V method_12278 processPacket + m ()F method_12277 getPitch + m ()D method_12279 getX + m ()D method_12280 getY + m ()D method_12276 getZ + m ()F method_12281 getYaw + f F field_12896 pitch + f D field_12899 x + f D field_12897 y + f D field_12895 z + f F field_12898 yaw +c net/minecraft/class_2836 net/minecraft/network/play/client/CSteerBoatPacket + m ()Z method_12284 getLeft + m ()Z method_12285 getRight + m (Lnet/minecraft/class_2792;)V method_12283 processPacket + f Z field_12907 left + f Z field_12906 right +c net/minecraft/class_2838 net/minecraft/network/play/client/CPickItemPacket + m ()I method_12293 getPickIndex + m (Lnet/minecraft/class_2792;)V method_12292 processPacket + f I field_12908 pickIndex +c net/minecraft/class_2840 net/minecraft/network/play/client/CPlaceRecipePacket + m ()Lnet/minecraft/class_2960; method_12320 getRecipeId + m ()I method_12318 getWindowId + m (Lnet/minecraft/class_2792;)V method_12317 processPacket + m ()Z method_12319 shouldPlaceAll + f I field_12933 windowId + f Z field_12932 placeAll + f Lnet/minecraft/class_2960; field_12931 recipeId +c net/minecraft/class_2842 net/minecraft/network/play/client/CPlayerAbilitiesPacket + m (Lnet/minecraft/class_2792;)V method_12339 processPacket + m ()Z method_12346 isFlying + f Z field_12948 flying +c net/minecraft/class_2846 net/minecraft/network/play/client/CPlayerDiggingPacket + m ()Lnet/minecraft/class_2846$class_2847; method_12363 getAction + m ()Lnet/minecraft/class_2350; method_12360 getFacing + m ()Lnet/minecraft/class_2338; method_12362 getPosition + m (Lnet/minecraft/class_2792;)V method_12361 processPacket + f Lnet/minecraft/class_2846$class_2847; field_12966 action + f Lnet/minecraft/class_2350; field_12965 facing + f Lnet/minecraft/class_2338; field_12967 position +c net/minecraft/class_2846$class_2847 net/minecraft/network/play/client/CPlayerDiggingPacket$Action + m ()[Lnet/minecraft/class_2846$class_2847; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2846$class_2847; valueOf valueOf + f Lnet/minecraft/class_2846$class_2847; field_12969 SWAP_ITEM_WITH_OFFHAND + f Lnet/minecraft/class_2846$class_2847; field_12974 RELEASE_USE_ITEM + f Lnet/minecraft/class_2846$class_2847; field_12968 START_DESTROY_BLOCK + f Lnet/minecraft/class_2846$class_2847; field_12975 DROP_ITEM + f [Lnet/minecraft/class_2846$class_2847; field_12972 $VALUES + f Lnet/minecraft/class_2846$class_2847; field_12970 DROP_ALL_ITEMS + f Lnet/minecraft/class_2846$class_2847; field_12973 STOP_DESTROY_BLOCK + f Lnet/minecraft/class_2846$class_2847; field_12971 ABORT_DESTROY_BLOCK +c net/minecraft/class_2848 net/minecraft/network/play/client/CEntityActionPacket + m ()I method_12366 getAuxData + m (Lnet/minecraft/class_2792;)V method_12364 processPacket + m ()Lnet/minecraft/class_2848$class_2849; method_12365 getAction + f I field_12976 auxData + f Lnet/minecraft/class_2848$class_2849; field_12978 action + f I field_12977 entityID +c net/minecraft/class_2848$class_2849 net/minecraft/network/play/client/CEntityActionPacket$Action + m (Ljava/lang/String;)Lnet/minecraft/class_2848$class_2849; valueOf valueOf + m ()[Lnet/minecraft/class_2848$class_2849; values values + f [Lnet/minecraft/class_2848$class_2849; field_12983 $VALUES + f Lnet/minecraft/class_2848$class_2849; field_12987 START_RIDING_JUMP + f Lnet/minecraft/class_2848$class_2849; field_12979 PRESS_SHIFT_KEY + f Lnet/minecraft/class_2848$class_2849; field_12980 STOP_RIDING_JUMP + f Lnet/minecraft/class_2848$class_2849; field_12985 STOP_SPRINTING + f Lnet/minecraft/class_2848$class_2849; field_12982 START_FALL_FLYING + f Lnet/minecraft/class_2848$class_2849; field_12981 START_SPRINTING + f Lnet/minecraft/class_2848$class_2849; field_12984 RELEASE_SHIFT_KEY + f Lnet/minecraft/class_2848$class_2849; field_12988 OPEN_INVENTORY + f Lnet/minecraft/class_2848$class_2849; field_12986 STOP_SLEEPING +c net/minecraft/class_2851 net/minecraft/network/play/client/CInputPacket + m ()F method_12372 getStrafeSpeed + m ()F method_12373 getForwardSpeed + m ()Z method_12371 isJumping + m (Lnet/minecraft/class_2792;)V method_12369 processPacket + m ()Z method_12370 isSneaking + f F field_12995 strafeSpeed + f F field_12994 forwardSpeed + f Z field_12997 jumping + f Z field_12996 sneaking +c net/minecraft/class_5427 net/minecraft/network/play/client/CUpdateRecipeBookStatusPacket + m ()Z method_30306 func_244318_c + m (Lnet/minecraft/class_2792;)V method_30304 processPacket + m ()Z method_30307 func_244319_d + m ()Lnet/minecraft/class_5421; method_30305 func_244317_b + f Lnet/minecraft/class_5421; field_25798 field_244314_a + f Z field_25799 field_244315_b + f Z field_25800 field_244316_c +c net/minecraft/class_2853 net/minecraft/network/play/client/CMarkRecipeSeenPacket + m ()Lnet/minecraft/class_2960; method_12406 func_244321_b + m (Lnet/minecraft/class_2792;)V method_12400 processPacket + f Lnet/minecraft/class_2960; field_13004 field_244320_a +c net/minecraft/class_2855 net/minecraft/network/play/client/CRenameItemPacket + m (Lnet/minecraft/class_2792;)V method_12408 processPacket + m ()Ljava/lang/String; method_12407 getName + f Ljava/lang/String; field_13013 name +c net/minecraft/class_2856 net/minecraft/network/play/client/CResourcePackStatusPacket + m (Lnet/minecraft/class_2792;)V method_12409 processPacket + f Lnet/minecraft/class_2856$class_2857; field_13014 action +c net/minecraft/class_2856$class_2857 net/minecraft/network/play/client/CResourcePackStatusPacket$Action + m ()[Lnet/minecraft/class_2856$class_2857; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2856$class_2857; valueOf valueOf + f [Lnet/minecraft/class_2856$class_2857; field_13019 $VALUES + f Lnet/minecraft/class_2856$class_2857; field_13017 SUCCESSFULLY_LOADED + f Lnet/minecraft/class_2856$class_2857; field_13016 ACCEPTED + f Lnet/minecraft/class_2856$class_2857; field_13015 FAILED_DOWNLOAD + f Lnet/minecraft/class_2856$class_2857; field_13018 DECLINED +c net/minecraft/class_2859 net/minecraft/network/play/client/CSeenAdvancementsPacket + m (Lnet/minecraft/class_161;)Lnet/minecraft/class_2859; method_12418 openedTab + m ()Lnet/minecraft/class_2859; method_12414 closedScreen + m (Lnet/minecraft/class_2792;)V method_12417 processPacket + m ()Lnet/minecraft/class_2960; method_12416 getTab + m ()Lnet/minecraft/class_2859$class_2860; method_12415 getAction + f Lnet/minecraft/class_2960; field_13020 tab + f Lnet/minecraft/class_2859$class_2860; field_13021 action +c net/minecraft/class_2859$class_2860 net/minecraft/network/play/client/CSeenAdvancementsPacket$Action + m (Ljava/lang/String;)Lnet/minecraft/class_2859$class_2860; valueOf valueOf + m ()[Lnet/minecraft/class_2859$class_2860; values values + f Lnet/minecraft/class_2859$class_2860; field_13024 OPENED_TAB + f Lnet/minecraft/class_2859$class_2860; field_13023 CLOSED_SCREEN + f [Lnet/minecraft/class_2859$class_2860; field_13022 $VALUES +c net/minecraft/class_2863 net/minecraft/network/play/client/CSelectTradePacket + m (Lnet/minecraft/class_2792;)V method_12430 processPacket + m ()I method_12431 func_210353_a + f I field_13036 field_210354_a +c net/minecraft/class_2866 net/minecraft/network/play/client/CUpdateBeaconPacket + m ()I method_12436 getPrimaryEffect + m ()I method_12435 getSecondaryEffect + m (Lnet/minecraft/class_2792;)V method_12434 processPacket + f I field_13049 secondaryEffect + f I field_13050 primaryEffect +c net/minecraft/class_2868 net/minecraft/network/play/client/CHeldItemChangePacket + m (Lnet/minecraft/class_2792;)V method_12441 processPacket + m ()I method_12442 getSlotId + f I field_13052 slotId +c net/minecraft/class_2870 net/minecraft/network/play/client/CUpdateCommandBlockPacket + m ()Z method_12474 isAuto + m ()Ljava/lang/String; method_12470 getCommand + m ()Lnet/minecraft/class_2593$class_2594; method_12468 getMode + m ()Z method_12471 isConditional + m (Lnet/minecraft/class_2792;)V method_12469 processPacket + m ()Z method_12472 shouldTrackOutput + m ()Lnet/minecraft/class_2338; method_12473 getPos + f Z field_13061 auto + f Z field_13062 conditional + f Ljava/lang/String; field_13064 command + f Lnet/minecraft/class_2593$class_2594; field_13060 mode + f Lnet/minecraft/class_2338; field_13065 pos + f Z field_13063 trackOutput +c net/minecraft/class_2871 net/minecraft/network/play/client/CUpdateMinecartCommandBlockPacket + m ()Z method_12478 shouldTrackOutput + m ()Ljava/lang/String; method_12475 getCommand + m (Lnet/minecraft/class_2792;)V method_12477 processPacket + m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1918; method_12476 getCommandBlock + f Z field_13066 trackOutput + f Ljava/lang/String; field_13068 command + f I field_13067 entityId +c net/minecraft/class_2873 net/minecraft/network/play/client/CCreativeInventoryActionPacket + m ()I method_12481 getSlotId + m ()Lnet/minecraft/class_1799; method_12479 getStack + m (Lnet/minecraft/class_2792;)V method_12480 processPacket + f Lnet/minecraft/class_1799; field_13070 stack + f I field_13071 slotId +c net/minecraft/class_3753 net/minecraft/network/play/client/CUpdateJigsawBlockPacket + m ()Lnet/minecraft/class_2960; method_16394 func_240852_d_ + m ()Lnet/minecraft/class_2960; method_16395 func_240851_c_ + m ()Lnet/minecraft/class_2338; method_16396 func_218789_b + m ()Ljava/lang/String; method_16393 func_218788_e + m (Lnet/minecraft/class_2792;)V method_16392 processPacket + m ()Lnet/minecraft/class_3751$class_4991; method_26436 func_240854_g_ + m ()Lnet/minecraft/class_2960; method_26435 func_240853_e_ + f Ljava/lang/String; field_16564 field_218793_d + f Lnet/minecraft/class_2960; field_16563 field_240847_b_ + f Lnet/minecraft/class_2338; field_16565 field_218790_a + f Lnet/minecraft/class_2960; field_23401 field_240849_d_ + f Lnet/minecraft/class_2960; field_16566 field_240848_c_ + f Lnet/minecraft/class_3751$class_4991; field_23402 field_240850_f_ +c net/minecraft/class_2875 net/minecraft/network/play/client/CUpdateStructureBlockPacket + m ()Lnet/minecraft/class_2776; method_12504 getMode + m ()F method_12494 getIntegrity + m ()Lnet/minecraft/class_2470; method_12498 getRotation + m ()Lnet/minecraft/class_2415; method_12493 getMirror + m ()Ljava/lang/String; method_12502 getName + m ()J method_12497 getSeed + m ()Z method_12506 shouldIgnoreEntities + m ()Z method_12505 shouldShowBoundingBox + m ()Z method_12503 shouldShowAir + m ()Lnet/minecraft/class_2633$class_2634; method_12500 func_210384_b + m ()Lnet/minecraft/class_2338; method_12499 getPos + m ()Lnet/minecraft/class_2338; method_12492 getSize + m ()Lnet/minecraft/class_2338; method_12496 getPosition + m (Lnet/minecraft/class_2792;)V method_12495 processPacket + m ()Ljava/lang/String; method_12501 getMetadata + f J field_13092 seed + f Lnet/minecraft/class_2415; field_13081 mirror + f Z field_13089 field_210400_j + f Lnet/minecraft/class_2470; field_13088 rotation + f Lnet/minecraft/class_2338; field_13093 pos + f Z field_13087 field_210401_k + f Ljava/lang/String; field_13085 field_210399_i + f Z field_13086 field_210402_l + f Ljava/lang/String; field_13080 name + f Lnet/minecraft/class_2338; field_13083 size + f Lnet/minecraft/class_2338; field_13091 field_210395_e + f Lnet/minecraft/class_2633$class_2634; field_13082 field_210392_b + f Lnet/minecraft/class_2776; field_13084 mode + f F field_13090 integrity +c net/minecraft/class_2877 net/minecraft/network/play/client/CUpdateSignPacket + m ()Lnet/minecraft/class_2338; method_12510 getPosition + m (Lnet/minecraft/class_2792;)V method_12509 processPacket + m ()[Ljava/lang/String; method_12508 getLines + f Lnet/minecraft/class_2338; field_13101 pos + f [Ljava/lang/String; field_13100 lines +c net/minecraft/class_2879 net/minecraft/network/play/client/CAnimateHandPacket + m (Lnet/minecraft/class_2792;)V method_12511 processPacket + m ()Lnet/minecraft/class_1268; method_12512 getHand + f Lnet/minecraft/class_1268; field_13102 hand +c net/minecraft/class_2884 net/minecraft/network/play/client/CSpectatePacket + m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_1297; method_12541 getEntity + m (Lnet/minecraft/class_2792;)V method_12542 processPacket + f Ljava/util/UUID; field_13129 id +c net/minecraft/class_2885 net/minecraft/network/play/client/CPlayerTryUseItemOnBlockPacket + m (Lnet/minecraft/class_2792;)V method_12547 processPacket + m ()Lnet/minecraft/class_3965; method_12543 func_218794_c + m ()Lnet/minecraft/class_1268; method_12546 getHand + f Lnet/minecraft/class_1268; field_13134 hand + f Lnet/minecraft/class_3965; field_17602 field_218795_a +c net/minecraft/class_2886 net/minecraft/network/play/client/CPlayerTryUseItemPacket + m (Lnet/minecraft/class_2792;)V method_12550 processPacket + m ()Lnet/minecraft/class_1268; method_12551 getHand + f Lnet/minecraft/class_1268; field_13136 hand +c net/minecraft/class_2889 net/minecraft/network/handshake/client/CHandshakePacket + m ()Lnet/minecraft/class_2539; method_12573 getRequestedState + m (Lnet/minecraft/class_2890;)V method_12575 processPacket + m ()I method_12574 getProtocolVersion + f Ljava/lang/String; field_13159 ip + f Lnet/minecraft/class_2539; field_13156 requestedState + f I field_13158 protocolVersion + f I field_13157 port +c net/minecraft/class_2890 net/minecraft/network/handshake/IHandshakeNetHandler + m (Lnet/minecraft/class_2889;)V method_12576 processHandshake +c net/minecraft/class_2896 net/minecraft/client/network/login/IClientLoginNetHandler + m (Lnet/minecraft/class_2899;)V method_12586 handleCustomPayloadLogin + m (Lnet/minecraft/class_2909;)V method_12584 handleDisconnect + m (Lnet/minecraft/class_2901;)V method_12588 handleLoginSuccess + m (Lnet/minecraft/class_2905;)V method_12587 handleEncryptionRequest + m (Lnet/minecraft/class_2907;)V method_12585 handleEnableCompression +c net/minecraft/class_2899 net/minecraft/network/login/server/SCustomPayloadLoginPacket + m (Lnet/minecraft/class_2896;)V method_12591 processPacket + m ()I method_12592 getTransaction + f Lnet/minecraft/class_2540; field_13189 payload + f Lnet/minecraft/class_2960; field_13187 channel + f I field_13188 transaction +c net/minecraft/class_2901 net/minecraft/network/login/server/SLoginSuccessPacket + m ()Lcom/mojang/authlib/GameProfile; method_12593 getProfile + m (Lnet/minecraft/class_2896;)V method_12594 processPacket + f Lcom/mojang/authlib/GameProfile; field_13190 profile +c net/minecraft/class_2905 net/minecraft/network/login/server/SEncryptionRequestPacket + m ()Ljava/lang/String; method_12610 getServerId + m ()Ljava/security/PublicKey; method_12611 getPublicKey + m (Lnet/minecraft/class_2896;)V method_12612 processPacket + m ()[B method_12613 getVerifyToken + f Ljava/lang/String; field_13209 hashedServerId + f [B field_13210 verifyToken + f Ljava/security/PublicKey; field_13211 publicKey +c net/minecraft/class_2907 net/minecraft/network/login/server/SEnableCompressionPacket + m (Lnet/minecraft/class_2896;)V method_12633 processPacket + m ()I method_12634 getCompressionThreshold + f I field_13232 compressionThreshold +c net/minecraft/class_2909 net/minecraft/network/login/server/SDisconnectLoginPacket + m ()Lnet/minecraft/class_2561; method_12638 getReason + m (Lnet/minecraft/class_2896;)V method_12637 processPacket + f Lnet/minecraft/class_2561; field_13243 reason +c net/minecraft/class_2911 net/minecraft/network/login/IServerLoginNetHandler + m (Lnet/minecraft/class_2913;)V method_12640 processCustomPayloadLogin + m (Lnet/minecraft/class_2915;)V method_12641 processLoginStart + m (Lnet/minecraft/class_2917;)V method_12642 processEncryptionResponse +c net/minecraft/class_2913 net/minecraft/network/login/client/CCustomPayloadLoginPacket + m (Lnet/minecraft/class_2911;)V method_12645 processPacket + f I field_13259 transaction + f Lnet/minecraft/class_2540; field_13258 payload +c net/minecraft/class_2915 net/minecraft/network/login/client/CLoginStartPacket + m ()Lcom/mojang/authlib/GameProfile; method_12650 getProfile + m (Lnet/minecraft/class_2911;)V method_12649 processPacket + f Lcom/mojang/authlib/GameProfile; field_13271 profile +c net/minecraft/class_2917 net/minecraft/network/login/client/CEncryptionResponsePacket + m (Lnet/minecraft/class_2911;)V method_12653 processPacket + m (Ljava/security/PrivateKey;)[B method_12655 getVerifyToken + m (Ljava/security/PrivateKey;)Ljavax/crypto/SecretKey; method_12654 getSecretKey + f [B field_13274 secretKeyEncrypted + f [B field_13273 verifyTokenEncrypted +c net/minecraft/class_2921 net/minecraft/client/network/status/IClientStatusNetHandler + m (Lnet/minecraft/class_2924;)V method_12667 handleServerInfo + m (Lnet/minecraft/class_2923;)V method_12666 handlePong +c net/minecraft/class_2923 net/minecraft/network/status/server/SPongPacket + m (Lnet/minecraft/class_2921;)V method_12670 processPacket + f J field_13280 clientTime +c net/minecraft/class_2924 net/minecraft/network/status/server/SServerInfoPacket + m ()Lnet/minecraft/class_2926; method_12672 getResponse + m (Lnet/minecraft/class_2921;)V method_12671 processPacket + f Lcom/google/gson/Gson; field_13282 GSON + f Lnet/minecraft/class_2926; field_13281 response +c net/minecraft/class_2926 net/minecraft/network/ServerStatusResponse + m (Lnet/minecraft/class_2926$class_2927;)V method_12681 setPlayers + m (Lnet/minecraft/class_2561;)V method_12684 setServerDescription + m (Lnet/minecraft/class_2926$class_2930;)V method_12679 setVersion + m (Ljava/lang/String;)V method_12677 setFavicon + m ()Lnet/minecraft/class_2926$class_2930; method_12683 getVersion + m ()Ljava/lang/String; method_12678 getFavicon + m ()Lnet/minecraft/class_2561; method_12680 getServerDescription + m ()Lnet/minecraft/class_2926$class_2927; method_12682 getPlayers + f Lnet/minecraft/class_2561; field_13284 description + f Lnet/minecraft/class_2926$class_2927; field_13285 players + f Lnet/minecraft/class_2926$class_2930; field_13286 version + f Ljava/lang/String; field_13283 favicon +c net/minecraft/class_2926$class_2927 net/minecraft/network/ServerStatusResponse$Players + m ()[Lcom/mojang/authlib/GameProfile; method_12685 getPlayers + m ()I method_12688 getOnlinePlayerCount + m ()I method_12687 getMaxPlayers + m ([Lcom/mojang/authlib/GameProfile;)V method_12686 setPlayers + f I field_13289 maxPlayers + f [Lcom/mojang/authlib/GameProfile; field_13287 players + f I field_13288 onlinePlayerCount +c net/minecraft/class_2926$class_2927$class_2928 net/minecraft/network/ServerStatusResponse$Players$Serializer + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_2926$class_2927; method_12689 deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lnet/minecraft/class_2926$class_2927;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_12690 serialize +c net/minecraft/class_2926$class_2929 net/minecraft/network/ServerStatusResponse$Serializer + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lnet/minecraft/class_2926;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_12692 serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_2926; method_12691 deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize +c net/minecraft/class_2926$class_2930 net/minecraft/network/ServerStatusResponse$Version + m ()I method_12694 getProtocol + m ()Ljava/lang/String; method_12693 getName + f Ljava/lang/String; field_13290 name + f I field_13291 protocol +c net/minecraft/class_2926$class_2930$class_2931 net/minecraft/network/ServerStatusResponse$Version$Serializer + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lnet/minecraft/class_2926$class_2930;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_12696 serialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_2926$class_2930; method_12695 deserialize +c net/minecraft/class_2933 net/minecraft/network/status/IServerStatusNetHandler + m (Lnet/minecraft/class_2935;)V method_12697 processPing + m (Lnet/minecraft/class_2937;)V method_12698 processServerQuery +c net/minecraft/class_2935 net/minecraft/network/status/client/CPingPacket + m (Lnet/minecraft/class_2933;)V method_12699 processPacket + m ()J method_12700 getClientTime + f J field_13292 clientTime +c net/minecraft/class_2937 net/minecraft/network/status/client/CServerQueryPacket + m (Lnet/minecraft/class_2933;)V method_12701 processPacket +c net/minecraft/class_2940 net/minecraft/network/datasync/DataParameter + m ()Lnet/minecraft/class_2941; method_12712 getSerializer + m ()I method_12713 getId + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/String; toString toString + f I field_13306 id + f Lnet/minecraft/class_2941; field_13307 serializer +c net/minecraft/class_2941 net/minecraft/network/datasync/IDataSerializer + m (Lnet/minecraft/class_2540;)Ljava/lang/Object; method_12716 read + m (Ljava/lang/Object;)Ljava/lang/Object; method_12714 copyValue + m (Lnet/minecraft/class_2540;Ljava/lang/Object;)V method_12715 write + m (I)Lnet/minecraft/class_2940; method_12717 createKey +c net/minecraft/class_2943 net/minecraft/network/datasync/DataSerializers + m (Lnet/minecraft/class_2941;)I method_12719 getSerializerId + m (I)Lnet/minecraft/class_2941; method_12721 getSerializer + m (Lnet/minecraft/class_2941;)V method_12720 registerSerializer + f Lnet/minecraft/class_2941; field_13314 PARTICLE_DATA + f Lnet/minecraft/class_2941; field_13316 ROTATIONS + f Lnet/minecraft/class_2941; field_13324 BLOCK_POS + f Lnet/minecraft/class_2941; field_13322 ITEMSTACK + f Lnet/minecraft/class_2941; field_13312 OPTIONAL_BLOCK_STATE + f Lnet/minecraft/class_2941; field_13323 BOOLEAN + f Lnet/minecraft/class_2941; field_13313 OPTIONAL_UNIQUE_ID + f Lnet/minecraft/class_2941; field_13318 COMPOUND_NBT + f Lnet/minecraft/class_2941; field_17207 VILLAGER_DATA + f Lnet/minecraft/class_2941; field_13315 OPTIONAL_BLOCK_POS + f Lnet/minecraft/class_2941; field_13321 DIRECTION + f Lnet/minecraft/class_2941; field_13319 BYTE + f Lnet/minecraft/class_2941; field_17910 OPTIONAL_VARINT + f Lnet/minecraft/class_2941; field_18238 POSE + f Lnet/minecraft/class_3513; field_13328 REGISTRY + f Lnet/minecraft/class_2941; field_13317 TEXT_COMPONENT + f Lnet/minecraft/class_2941; field_13325 OPTIONAL_TEXT_COMPONENT + f Lnet/minecraft/class_2941; field_13327 VARINT + f Lnet/minecraft/class_2941; field_13320 FLOAT + f Lnet/minecraft/class_2941; field_13326 STRING +c net/minecraft/class_2943$13 net/minecraft/network/datasync/DataSerializers$3 + m (Ljava/lang/Float;)Ljava/lang/Float; method_12770 copyValue + m (Lnet/minecraft/class_2540;Ljava/lang/Float;)V method_12769 write + m (Lnet/minecraft/class_2540;)Ljava/lang/Float; method_12768 read +c net/minecraft/class_2943$14 net/minecraft/network/datasync/DataSerializers$4 + m (Lnet/minecraft/class_2540;Ljava/lang/String;)V method_12723 write + m (Ljava/lang/String;)Ljava/lang/String; method_12724 copyValue + m (Lnet/minecraft/class_2540;)Ljava/lang/String; method_12722 read +c net/minecraft/class_2943$8 net/minecraft/network/datasync/DataSerializers$16 + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_12762 copyValue + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2487; method_12764 read + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2487;)V method_12763 write +c net/minecraft/class_2943$11 net/minecraft/network/datasync/DataSerializers$19 + m (Lnet/minecraft/class_4050;)Lnet/minecraft/class_4050; method_18696 copyValue + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_4050;)V method_18697 write + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_4050; method_18698 read +c net/minecraft/class_2943$9 net/minecraft/network/datasync/DataSerializers$17 + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_3850; method_17198 read + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_3850;)V method_17197 write + m (Lnet/minecraft/class_3850;)Lnet/minecraft/class_3850; method_17196 copyValue +c net/minecraft/class_2943$12 net/minecraft/network/datasync/DataSerializers$2 + m (Lnet/minecraft/class_2540;Ljava/lang/Integer;)V method_12766 write + m (Ljava/lang/Integer;)Ljava/lang/Integer; method_12767 copyValue + m (Lnet/minecraft/class_2540;)Ljava/lang/Integer; method_12765 read +c net/minecraft/class_2943$6 net/minecraft/network/datasync/DataSerializers$14 + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2350; method_12756 read + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2350;)V method_12757 write + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_12758 copyValue +c net/minecraft/class_2943$7 net/minecraft/network/datasync/DataSerializers$15 + m (Lnet/minecraft/class_2540;Ljava/util/Optional;)V method_12759 write + m (Ljava/util/Optional;)Ljava/util/Optional; method_12761 copyValue + m (Lnet/minecraft/class_2540;)Ljava/util/Optional; method_12760 read +c net/minecraft/class_2943$10 net/minecraft/network/datasync/DataSerializers$18 + m (Ljava/util/OptionalInt;)Ljava/util/OptionalInt; method_18190 copyValue + m (Lnet/minecraft/class_2540;Ljava/util/OptionalInt;)V method_18189 write + m (Lnet/minecraft/class_2540;)Ljava/util/OptionalInt; method_18191 read +c net/minecraft/class_2943$4 net/minecraft/network/datasync/DataSerializers$12 + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2338;)V method_12751 write + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_12752 copyValue + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2338; method_12750 read +c net/minecraft/class_2943$5 net/minecraft/network/datasync/DataSerializers$13 + m (Lnet/minecraft/class_2540;Ljava/util/Optional;)V method_12753 write + m (Ljava/util/Optional;)Ljava/util/Optional; method_12755 copyValue + m (Lnet/minecraft/class_2540;)Ljava/util/Optional; method_12754 read +c net/minecraft/class_2943$19 net/minecraft/network/datasync/DataSerializers$9 + m (Lnet/minecraft/class_2540;Ljava/lang/Boolean;)V method_12738 write + m (Lnet/minecraft/class_2540;)Ljava/lang/Boolean; method_12737 read + m (Ljava/lang/Boolean;)Ljava/lang/Boolean; method_12739 copyValue +c net/minecraft/class_2943$17 net/minecraft/network/datasync/DataSerializers$7 + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_1799;)V method_12731 write + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_1799; method_12733 read + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_12732 copyValue +c net/minecraft/class_2943$18 net/minecraft/network/datasync/DataSerializers$8 + m (Lnet/minecraft/class_2540;Ljava/util/Optional;)V method_12734 write + m (Lnet/minecraft/class_2540;)Ljava/util/Optional; method_12735 read + m (Ljava/util/Optional;)Ljava/util/Optional; method_12736 copyValue +c net/minecraft/class_2943$15 net/minecraft/network/datasync/DataSerializers$5 + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2561; method_12725 read + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2561;)V method_12727 write + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_12726 copyValue +c net/minecraft/class_2943$16 net/minecraft/network/datasync/DataSerializers$6 + m (Lnet/minecraft/class_2540;Ljava/util/Optional;)V method_12728 write + m (Lnet/minecraft/class_2540;)Ljava/util/Optional; method_12729 read + m (Ljava/util/Optional;)Ljava/util/Optional; method_12730 copyValue +c net/minecraft/class_2943$2 net/minecraft/network/datasync/DataSerializers$10 + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2396;)Lnet/minecraft/class_2394; method_12744 read + m (Lnet/minecraft/class_2394;)Lnet/minecraft/class_2394; method_12745 copyValue + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2394; method_12743 read + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2394;)V method_12746 write +c net/minecraft/class_2943$3 net/minecraft/network/datasync/DataSerializers$11 + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2379;)V method_12747 write + m (Lnet/minecraft/class_2379;)Lnet/minecraft/class_2379; method_12749 copyValue + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2379; method_12748 read +c net/minecraft/class_2943$1 net/minecraft/network/datasync/DataSerializers$1 + m (Lnet/minecraft/class_2540;Ljava/lang/Byte;)V method_12741 write + m (Ljava/lang/Byte;)Ljava/lang/Byte; method_12742 copyValue + m (Lnet/minecraft/class_2540;)Ljava/lang/Byte; method_12740 read +c net/minecraft/class_2945 net/minecraft/network/datasync/EntityDataManager + m ()Z method_12786 isDirty + m (Lnet/minecraft/class_2940;)Lnet/minecraft/class_2945$class_2946; method_12783 getEntry + m (Lnet/minecraft/class_2945$class_2946;Lnet/minecraft/class_2945$class_2946;)V method_12785 setEntryValue + m (Lnet/minecraft/class_2940;Ljava/lang/Object;)V method_12776 setEntry + m ()V method_12792 setClean + m ()Z method_12790 isEmpty + m (Lnet/minecraft/class_2940;Ljava/lang/Object;)V method_12778 set + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2945$class_2946;)V method_12782 writeEntry + m (Lnet/minecraft/class_2940;Ljava/lang/Object;)V method_12784 register + m (Ljava/util/List;)V method_12779 setEntryValues + m ()Ljava/util/List; method_12793 getAll + m (Lnet/minecraft/class_2940;)Ljava/lang/Object; method_12789 get + m (Lnet/minecraft/class_2540;)Ljava/util/List; method_12788 readEntries + m (Lnet/minecraft/class_2540;ILnet/minecraft/class_2941;)Lnet/minecraft/class_2945$class_2946; method_12777 makeDataEntry + m (Ljava/util/List;Lnet/minecraft/class_2540;)V method_12787 writeEntries + m ()Ljava/util/List; method_12781 getDirty + m (Ljava/lang/Class;Lnet/minecraft/class_2941;)Lnet/minecraft/class_2940; method_12791 createKey + f Lnet/minecraft/class_1297; field_13333 entity + f Ljava/util/concurrent/locks/ReadWriteLock; field_13335 lock + f Lorg/apache/logging/log4j/Logger; field_13334 LOGGER + f Z field_13330 empty + f Z field_13329 dirty + f Ljava/util/Map; field_13331 entries + f Ljava/util/Map; field_13332 NEXT_ID_MAP +c net/minecraft/class_2945$class_2946 net/minecraft/network/datasync/EntityDataManager$DataEntry + m ()Lnet/minecraft/class_2945$class_2946; method_12798 copy + m (Lnet/minecraft/class_2945$class_2946;)Lnet/minecraft/class_2940; method_20794 func_223479_a + m ()Z method_12796 isDirty + m ()Ljava/lang/Object; method_12794 getValue + m (Ljava/lang/Object;)V method_12799 setValue + m ()Lnet/minecraft/class_2940; method_12797 getKey + m (Z)V method_12795 setDirty + m (Lnet/minecraft/class_2945$class_2946;)Ljava/lang/Object; method_20795 func_223480_b + f Lnet/minecraft/class_2940; field_13337 key + f Z field_13336 dirty + f Ljava/lang/Object; field_13338 value +c net/minecraft/class_2952 net/minecraft/item/crafting/IRecipePlacer + m (Ljava/util/Iterator;IIII)V method_12815 setSlotContents + m (IIILnet/minecraft/class_1860;Ljava/util/Iterator;I)V method_12816 placeRecipe +c net/minecraft/class_2955 net/minecraft/item/crafting/ServerRecipePlacer + m (Lnet/minecraft/class_1860;Z)V method_12821 tryPlaceRecipe + m (Lnet/minecraft/class_1735;Lnet/minecraft/class_1799;)V method_12824 consumeIngredient + m ()V method_12822 clear + m ()I method_12823 getEmptyPlayerSlots + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1860;Z)V method_12826 place + m (ZIZ)I method_12819 getMaxAmount + m (I)V method_12820 giveToPlayer + m ()Z method_12825 placeIntoInventory + f Lnet/minecraft/class_1729; field_13348 recipeBookContainer + f Lnet/minecraft/class_1662; field_13347 recipeItemHelper + f Lorg/apache/logging/log4j/Logger; field_13349 LOGGER + f Lnet/minecraft/class_1661; field_13350 playerInventory +c net/minecraft/class_2958 net/minecraft/item/crafting/ServerRecipePlacerFurnace + m (ILit/unimi/dsi/fastutil/ints/IntList;)V method_12827 func_201516_a + f Z field_13351 matches +c net/minecraft/class_5379 net/minecraft/util/datafix/DelegatingDynamicOps + m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; mergeToMap mergeToMap + m ()Z compressMaps compressMaps + m (Ljava/lang/Object;Lcom/mojang/serialization/MapLike;)Lcom/mojang/serialization/DataResult; mergeToMap mergeToMap + m (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; remove remove + m (Ljava/lang/Object;Ljava/util/List;)Lcom/mojang/serialization/DataResult; mergeToList mergeToList + m (Z)Ljava/lang/Object; createBoolean createBoolean + m (F)Ljava/lang/Object; createFloat createFloat + m (Ljava/util/stream/Stream;)Ljava/lang/Object; createMap createMap + m (B)Ljava/lang/Object; createByte createByte + m (I)Ljava/lang/Object; createInt createInt + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getByteBuffer getByteBuffer + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getLongStream getLongStream + m (D)Ljava/lang/Object; createDouble createDouble + m (Ljava/nio/ByteBuffer;)Ljava/lang/Object; createByteList createByteList + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; mergeToList mergeToList + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMapValues getMapValues + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getBooleanValue getBooleanValue + m ()Ljava/lang/Object; empty empty + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getStream getStream + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMapEntries getMapEntries + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMap getMap + m (J)Ljava/lang/Object; createLong createLong + m (S)Ljava/lang/Object; createShort createShort + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; convertTo convertTo + m (Ljava/util/stream/LongStream;)Ljava/lang/Object; createLongList createLongList + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getList getList + m ()Lcom/mojang/serialization/RecordBuilder; mapBuilder mapBuilder + m ()Lcom/mojang/serialization/ListBuilder; listBuilder listBuilder + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getIntStream getIntStream + m (Ljava/util/stream/Stream;)Ljava/lang/Object; createList createList + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getNumberValue getNumberValue + m (Ljava/lang/Number;)Ljava/lang/Object; createNumeric createNumeric + m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getStringValue getStringValue + m (Ljava/lang/String;)Ljava/lang/Object; createString createString + m (Ljava/util/stream/IntStream;)Ljava/lang/Object; createIntList createIntList + f Lcom/mojang/serialization/DynamicOps; field_25503 ops +c net/minecraft/class_5380 net/minecraft/util/registry/SimpleRegistryCodec + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; decode decode + m ()Ljava/lang/String; toString toString + m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/serialization/DataResult; method_29743 func_240862_a_ + m (Lnet/minecraft/class_2370;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_29744 encode + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_5380; method_29745 create + m (Lcom/mojang/datafixers/util/Pair;Lnet/minecraft/class_2370;)Lcom/mojang/datafixers/util/Pair; method_29742 func_240861_a_ + m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; encode encode + f Lcom/mojang/serialization/Codec; field_25504 registryCodec + f Lcom/mojang/serialization/Codec; field_25506 rawCodec + f Lnet/minecraft/class_5321; field_25505 registryKey +c net/minecraft/class_5381 net/minecraft/util/registry/RegistryKeyCodec + m (Ljava/lang/Object;)Ljava/lang/Object; method_31196 func_240869_b_ + m (Ljava/util/function/Supplier;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_29748 encode + m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; encode encode + m (Ljava/lang/Object;)Ljava/lang/Object; method_29750 func_244326_b + m (Ljava/lang/Object;)Ljava/util/function/Supplier; method_29747 func_240867_a_ + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_31194 getValueCodecs + m (Ljava/util/List;)Ljava/util/List; method_31193 func_244327_b + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_5381; method_29749 create + m (Ljava/util/List;)Ljava/util/List; method_31191 func_244324_a + m (Ljava/lang/Object;)Ljava/util/function/Supplier; method_31195 func_244329_c + m (Lcom/mojang/datafixers/util/Either;)Ljava/util/List; method_31190 func_244323_a + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;Z)Lnet/minecraft/class_5381; method_31192 create + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_29746 func_240866_a_ + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; decode decode + m ()Ljava/lang/String; toString toString + f Lcom/mojang/serialization/Codec; field_25508 registryCodec + f Lnet/minecraft/class_5321; field_25507 registryKey + f Z field_26758 allowInlineDefinitions +c net/minecraft/class_5505 net/minecraft/util/registry/RegistryLookupCodec + m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_5505; method_31148 getLookUpCodec + m (Lnet/minecraft/class_2378;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;)Lcom/mojang/serialization/RecordBuilder; method_31147 encode + m ()Ljava/lang/String; toString toString + m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;)Lcom/mojang/serialization/RecordBuilder; encode encode + m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/MapLike;)Lcom/mojang/serialization/DataResult; decode decode + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/stream/Stream; keys keys + f Lnet/minecraft/class_5321; field_26737 registryKey +c net/minecraft/class_5382 net/minecraft/util/registry/WorldSettingsImport + m (Ljava/lang/Object;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;Z)Lcom/mojang/serialization/DataResult; method_29759 decode + m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;Lnet/minecraft/class_2960;Lnet/minecraft/class_2370;)Lcom/mojang/serialization/DataResult; method_29762 func_240885_a_ + m (Lnet/minecraft/class_5321;)Lcom/mojang/serialization/DataResult; method_31153 func_244343_c + m (Lcom/mojang/datafixers/util/Pair;Ljava/util/function/Supplier;)Lcom/mojang/datafixers/util/Pair; method_29752 func_240875_a_ + m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_5382$class_5383; method_29761 getResultMap + m (Lnet/minecraft/class_5321;)Lcom/mojang/serialization/DataResult; method_31152 getRegistryByKey + m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_5382$class_5383; method_29766 func_244344_d + m (Lnet/minecraft/class_2385;Lnet/minecraft/class_5321;Lcom/mojang/datafixers/util/Pair;)Ljava/util/function/Supplier; method_31198 func_244339_a + m (Lnet/minecraft/class_2385;)Lcom/mojang/serialization/DataResult; method_31151 func_244337_a + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_29751 func_240874_a_ + m (Lnet/minecraft/class_2385;Lnet/minecraft/class_5321;)Ljava/lang/Object; method_31197 func_244338_a + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_3300;Lnet/minecraft/class_5455$class_5457;)Lnet/minecraft/class_5382; method_29753 create + m (Lnet/minecraft/class_2385;Lnet/minecraft/class_5321;)Ljava/lang/Object; method_31199 func_241799_a_ + m (Lnet/minecraft/class_2370;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/DataResult; method_29755 decode + m (Lnet/minecraft/class_2370;Ljava/util/function/Supplier;)Lnet/minecraft/class_2370; method_29754 func_240877_a_ + m (Lnet/minecraft/class_2385;Lnet/minecraft/class_5321;)Ljava/lang/Object; method_29756 func_244342_c + m (Ljava/lang/Object;)Ljava/lang/Object; method_29767 func_244341_b + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5382$class_5506;Lnet/minecraft/class_5455$class_5457;)Lnet/minecraft/class_5382; method_31150 create + m (Ljava/lang/Object;)Ljava/util/function/Supplier; method_31070 func_240891_b_ + m ()Lorg/apache/logging/log4j/Logger; method_31149 func_244334_a + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2385;Lcom/mojang/serialization/Codec;Lnet/minecraft/class_2960;)Lcom/mojang/serialization/DataResult; method_29763 createRegistry + f Lorg/apache/logging/log4j/Logger; field_25509 LOGGER + f Lnet/minecraft/class_5382$class_5506; field_26738 resourceAccess + f Lnet/minecraft/class_5382; field_26739 jsonOps + f Lnet/minecraft/class_5455$class_5457; field_25511 dynamicRegistries + f Ljava/util/Map; field_25512 registryToResultMap +c net/minecraft/class_5382$class_5506 net/minecraft/util/registry/WorldSettingsImport$IResourceAccess + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Decoder;)Lcom/mojang/serialization/DataResult; method_31155 decode + m (Lnet/minecraft/class_5321;)Ljava/util/Collection; method_31156 getRegistryObjects + m (Lnet/minecraft/class_3300;)Lnet/minecraft/class_5382$class_5506; method_31154 create +c net/minecraft/class_5382$class_5506$class_5507 net/minecraft/util/registry/WorldSettingsImport$IResourceAccess$RegistryAccess + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;)Lnet/minecraft/class_2960; method_31161 func_244354_a + m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Encoder;ILjava/lang/Object;Lcom/mojang/serialization/Lifecycle;)V method_31159 encode + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;)Z method_31162 func_244355_b + m (Lnet/minecraft/class_5321;Ljava/lang/Object;)Lcom/mojang/datafixers/util/Pair; method_31160 func_244353_a + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_26742 keyToIDMap + f Ljava/util/Map; field_26741 keyToElementMap + f Ljava/util/Map; field_26743 keyToLifecycleMap +c net/minecraft/class_5382$class_5506$1 net/minecraft/util/registry/WorldSettingsImport$IResourceAccess$1 + m (Ljava/lang/Object;)Lcom/mojang/datafixers/util/Pair; method_31157 func_244347_a + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;)Z method_31158 func_244348_a + f Lnet/minecraft/class_3300; field_26740 field_244346_a +c net/minecraft/class_5382$1 net/minecraft/util/registry/WorldSettingsImport$1 +c net/minecraft/class_5382$class_5383 net/minecraft/util/registry/WorldSettingsImport$ResultMap + m (Lnet/minecraft/class_5382$class_5383;)Ljava/util/Map; method_29770 func_240894_a_ + f Ljava/util/Map; field_25513 resultMap +c net/minecraft/class_5384 net/minecraft/util/registry/WorldGenSettingsExport + m (Ljava/lang/Object;Ljava/lang/Object;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/DataResult; method_29772 encode + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5455;)Lnet/minecraft/class_5384; method_29771 create + f Lnet/minecraft/class_5455; field_25514 dynamicRegistries +c net/minecraft/class_5321 net/minecraft/util/RegistryKey + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_5321;)Ljava/util/function/Function; method_29178 getKeyCreator + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Ljava/lang/String;)Lnet/minecraft/class_5321; method_29182 func_240906_a_ + m ()Lnet/minecraft/class_2960; method_29177 getLocation + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2960;)Lnet/minecraft/class_5321; method_29183 func_240907_b_ + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_5321; method_29181 getOrCreateKey + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2960;)Lnet/minecraft/class_5321; method_29179 getOrCreateKey + m (Lnet/minecraft/class_5321;)Z method_31163 isParent + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5321; method_29180 getOrCreateRootKey + f Ljava/util/Map; field_25136 UNIVERSAL_KEY_MAP + f Lnet/minecraft/class_2960; field_25137 parent + f Lnet/minecraft/class_2960; field_25138 location +c net/minecraft/class_2960 net/minecraft/util/ResourceLocation + m (Ljava/lang/String;)Lnet/minecraft/class_2960; method_12829 tryCreate + m (C)Z method_29184 validatePathChar + m (Ljava/lang/String;C)Lnet/minecraft/class_2960; method_12838 create + m (C)Z method_12831 isValidPathCharacter + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;)Z method_20207 isResouceNameValid + m (C)Z method_29185 validateNamespaceChar + m (Ljava/lang/String;C)[Ljava/lang/String; method_12830 decompose + m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2960; method_12835 read + m (Ljava/lang/String;)Z method_20209 isValidNamespace + m (Lnet/minecraft/class_2960;)I method_12833 compareTo + m ()Ljava/lang/String; method_12832 getPath + m (Ljava/lang/String;)Lcom/mojang/serialization/DataResult; method_29186 decodeResourceLocation + m ()Ljava/lang/String; method_12836 getNamespace + m (Ljava/lang/String;)Z method_20208 isPathValid + m (Ljava/lang/Object;)I compareTo compareTo + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13354 INVALID_EXCEPTION + f Ljava/lang/String; field_13355 path + f Ljava/lang/String; field_13353 namespace + f Lcom/mojang/serialization/Codec; field_25139 CODEC +c net/minecraft/class_2960$class_2961 net/minecraft/util/ResourceLocation$Serializer + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_2960; method_12840 deserialize + m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize + m (Lnet/minecraft/class_2960;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_12839 serialize +c net/minecraft/class_2966 net/minecraft/util/registry/Bootstrap + m (Ljava/util/function/Function;Lnet/minecraft/class_2477;Ljava/util/Set;Ljava/lang/Object;)V method_12850 func_218818_a + m ()V method_12851 register + m (Lnet/minecraft/class_2960;)Ljava/lang/String; method_17595 func_218820_a + m ()Ljava/util/Set; method_17597 getTranslationStrings + m (Ljava/lang/Iterable;Ljava/util/function/Function;Ljava/util/Set;)V method_12848 addTranslationStrings + m (Ljava/util/Set;)V method_27732 addGameRuleTranslationStrings + m (Ljava/lang/String;)V method_12847 printToSYSOUT + m ()V method_17598 checkTranslations + m ()V method_12852 redirectOutputToLog + m (Ljava/lang/String;)V method_17596 func_218817_b + f Z field_13357 alreadyRegistered + f Ljava/io/PrintStream; field_13358 SYSOUT + f Lorg/apache/logging/log4j/Logger; field_13359 LOGGER +c net/minecraft/class_2966$1 net/minecraft/util/registry/Bootstrap$1 + f Lnet/minecraft/class_2477; field_24373 field_240914_a_ + f Ljava/util/Set; field_24374 field_240915_b_ +c net/minecraft/class_2973 net/minecraft/client/util/JSONException + m (Ljava/lang/String;)V method_12854 prependJsonKey + m ()Ljava/lang/String; getMessage getMessage + m (Ljava/lang/String;)V method_12855 setFilenameAndFlush + m (Ljava/lang/Exception;)Lnet/minecraft/class_2973; method_12856 forException + f Ljava/lang/String; field_13372 message + f Ljava/util/List; field_13371 entries +c net/minecraft/class_2973$class_2974 net/minecraft/client/util/JSONException$Entry + m (Ljava/lang/String;)V method_12858 addJsonKey + m (Lnet/minecraft/class_2973$class_2974;Ljava/lang/String;)Ljava/lang/String; method_12860 access$202 + m ()Ljava/lang/String; method_12857 getJsonKeys + m (Lnet/minecraft/class_2973$class_2974;Ljava/lang/String;)V method_12859 access$100 + m ()Ljava/lang/String; toString toString + f Ljava/util/List; field_13374 jsonKeys + f Ljava/lang/String; field_13373 filename +c net/minecraft/class_2973$1 net/minecraft/client/util/JSONException$1 +c net/minecraft/class_2976 net/minecraft/server/dedicated/PendingCommand + f Lnet/minecraft/class_2168; field_13378 sender + f Ljava/lang/String; field_13377 command +c net/minecraft/class_2980 net/minecraft/server/DebugLoggingPrintStream +c net/minecraft/class_2981 net/minecraft/server/ServerEula + m ()Z method_12867 loadEulaStatus + m ()V method_12868 createEULAFile + m ()Z method_12866 hasAcceptedEULA + f Ljava/nio/file/Path; field_13380 eulaFile + f Lorg/apache/logging/log4j/Logger; field_13381 LOG + f Z field_13379 acceptedEULA +c net/minecraft/class_2983 net/minecraft/util/LoggingPrintStream + m (Ljava/lang/String;)V println println + m (Ljava/lang/String;)V method_12870 logString + m (Ljava/lang/Object;)V println println + f Ljava/lang/String; field_13383 domain + f Lorg/apache/logging/log4j/Logger; field_13384 LOGGER +c net/minecraft/class_2985 net/minecraft/advancements/PlayerAdvancements + m (Lnet/minecraft/class_161;Lnet/minecraft/class_167;)V method_12884 startProgress + m ()V method_12881 dispose + m (Lnet/minecraft/class_161;)Z method_12879 shouldBeVisible + m ()V method_12887 ensureAllVisible + m (Lnet/minecraft/class_161;Ljava/lang/String;)Z method_12883 revokeCriterion + m ()V method_12890 save + m (Lnet/minecraft/class_161;)Lnet/minecraft/class_167; method_12882 getProgress + m (Lnet/minecraft/class_3222;)V method_12876 flushDirty + m (Lnet/minecraft/class_3222;)V method_12875 setPlayer + m (Lnet/minecraft/class_161;Ljava/lang/String;)Z method_12878 grantCriterion + m (Lnet/minecraft/class_161;)Z method_12877 hasCompletedChildrenOrSelf + m (Lnet/minecraft/class_161;)V method_12888 setSelectedTab + m (Lnet/minecraft/class_161;)V method_12885 ensureVisibility + m (Lnet/minecraft/class_161;)V method_12874 registerListeners + m (Lnet/minecraft/class_161;)V method_12880 unregisterListeners + m (Lnet/minecraft/class_2989;)V method_12889 registerAchievementListeners + m (Lnet/minecraft/class_2989;)V method_12872 unlockDefaultAdvancements + m (Lnet/minecraft/class_2989;)V method_12873 deserialize + m (Lnet/minecraft/class_2989;)V method_12886 reset + f Lcom/mojang/datafixers/DataFixer; field_25324 dataFixer + f Lcom/google/gson/Gson; field_13395 GSON + f Lorg/apache/logging/log4j/Logger; field_13394 LOGGER + f Ljava/io/File; field_13393 progressFile + f Lcom/google/gson/reflect/TypeToken; field_13392 MAP_TOKEN + f Ljava/util/Map; field_13389 progress + f Lnet/minecraft/class_3222; field_13391 player + f Z field_13396 isFirstPacket + f Lnet/minecraft/class_3324; field_25325 playerList + f Lnet/minecraft/class_161; field_13387 lastSelectedTab + f Ljava/util/Set; field_13390 visible + f Ljava/util/Set; field_13386 visibilityChanged + f Ljava/util/Set; field_13388 progressChanged +c net/minecraft/class_2985$1 net/minecraft/advancements/PlayerAdvancements$1 +c net/minecraft/class_2987 net/minecraft/network/ThreadQuickExitException + m ()Ljava/lang/Throwable; fillInStackTrace fillInStackTrace + f Lnet/minecraft/class_2987; field_13400 INSTANCE +c net/minecraft/class_2989 net/minecraft/advancements/AdvancementManager + m ()Ljava/util/Collection; method_12893 getAllAdvancements + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_161; method_12896 getAdvancement + m (Ljava/util/Map;Lnet/minecraft/class_2960;Lcom/google/gson/JsonElement;)V method_20723 func_240923_a_ + m (Ljava/util/Map;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_20724 apply + f Lcom/google/gson/Gson; field_13405 GSON + f Lnet/minecraft/class_4567; field_24452 lootPredicateManager + f Lnet/minecraft/class_163; field_13404 advancementList + f Lorg/apache/logging/log4j/Logger; field_13406 LOGGER +c net/minecraft/class_5349 net/minecraft/resources/FunctionReloader + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;)Ljava/util/List; method_29450 func_240934_a_ + m (Lnet/minecraft/class_2960;)Ljava/util/Optional; method_29456 func_240940_a_ + m (Lcom/mojang/datafixers/util/Pair;)V method_29453 func_240937_a_ + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2168;)Lnet/minecraft/class_2158; method_29451 func_240935_a_ + m (Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_2960;Ljava/util/concurrent/CompletableFuture;)V method_29452 func_240936_a_ + m (Lnet/minecraft/class_2960;Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_2158;Ljava/lang/Throwable;)Ljava/lang/Object; method_29457 func_240941_a_ + m (Ljava/util/Map;Ljava/lang/Void;Ljava/lang/Throwable;)Ljava/util/Map; method_29455 func_240939_a_ + m ()Ljava/util/Map; method_29447 func_240931_a_ + m ()Lnet/minecraft/class_5414; method_29458 func_240942_b_ + m (Ljava/lang/String;)Z method_29454 func_240938_a_ + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_29459 func_240943_b_ + m (Lnet/minecraft/class_3300;Ljava/util/concurrent/Executor;Ljava/util/Collection;)Ljava/util/concurrent/CompletionStage; method_29449 func_240933_a_ + m (Lnet/minecraft/class_3300;)Ljava/util/Collection; method_29448 func_240932_a_ + f I field_25331 field_240929_f_ + f Lorg/apache/logging/log4j/Logger; field_25326 field_240924_a_ + f I field_25328 field_240926_c_ + f Lcom/mojang/brigadier/CommandDispatcher; field_25332 field_240930_g_ + f Lnet/minecraft/class_5414; field_25801 field_240928_e_ + f Ljava/util/Map; field_25329 field_240927_d_ + f I field_25327 field_240925_b_ + f Lnet/minecraft/class_3503; field_25330 field_244357_e +c net/minecraft/class_2991 net/minecraft/advancements/FunctionManager + m (Lnet/minecraft/class_2158;Lnet/minecraft/class_2168;)I method_12904 execute + m ()Ljava/lang/Iterable; method_29464 getFunctionTagIdentifiers + m ()Ljava/lang/Iterable; method_29463 getFunctionIdentifiers + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_29462 getFunctionTag + m ()I method_12902 getMaxCommandChainLength + m (Lnet/minecraft/class_2960;)Ljava/util/Optional; method_12905 get + m ()Lnet/minecraft/class_2168; method_12899 getCommandSource + m (Lnet/minecraft/class_5349;)V method_29773 clearAndResetTickFunctions + m ()Lcom/mojang/brigadier/CommandDispatcher; method_12900 getCommandDispatcher + m (Ljava/util/Collection;Lnet/minecraft/class_2960;)V method_29460 executeAndProfile + m ()V method_18699 tick + m (Lnet/minecraft/class_5349;)V method_29461 setFunctionReloader + f Ljava/util/ArrayDeque; field_13413 commandQueue + f Lnet/minecraft/class_2960; field_13417 TICK_TAG_ID + f Lnet/minecraft/server/MinecraftServer; field_13419 server + f Lnet/minecraft/class_2960; field_13412 LOAD_TAG_ID + f Z field_13411 isExecuting + f Z field_13422 loadFunctionsRun + f Lnet/minecraft/class_5349; field_25333 reloader + f Ljava/util/List; field_19332 commandChain + f Ljava/util/List; field_13418 tickFunctions +c net/minecraft/class_2991$class_2992 net/minecraft/advancements/FunctionManager$QueuedCommand + m (Ljava/util/ArrayDeque;I)V method_12914 execute + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2168; field_13424 sender + f Lnet/minecraft/class_2158$class_2161; field_13425 entry + f Lnet/minecraft/class_2991; field_13423 functionManager +c net/minecraft/class_2994 net/minecraft/network/rcon/IServer + m ()I method_3788 getCurrentPlayerCount + m ()Lnet/minecraft/class_3806; method_16705 getServerProperties + m (Ljava/lang/String;)Ljava/lang/String; method_12934 handleRConCommand + m ()Ljava/lang/String; method_12929 getHostname + m ()Ljava/lang/String; method_3827 getMinecraftVersion + m ()Ljava/lang/String; method_12930 getMotd + m ()I method_12918 getPort + m ()[Ljava/lang/String; method_3858 getOnlinePlayerNames + m ()Ljava/lang/String; method_12916 getPlugins + m ()Ljava/lang/String; method_3865 func_230542_k__ + m ()I method_3802 getMaxPlayers +c net/minecraft/class_5350 net/minecraft/resources/DataPackRegistries + m ()Lnet/minecraft/class_3300; method_29474 getResourceManager + m ()Lnet/minecraft/class_2989; method_29473 getAdvancementManager + m (Lnet/minecraft/class_5350;Lnet/minecraft/class_3902;)Lnet/minecraft/class_5350; method_29467 func_240962_a_ + m ()Lnet/minecraft/class_2170; method_29472 getCommandManager + m (Lnet/minecraft/class_5350;Lnet/minecraft/class_3902;Ljava/lang/Throwable;)V method_29774 func_240963_a_ + m ()Lnet/minecraft/class_5349; method_29465 getFunctionReloader + m ()Lnet/minecraft/class_5415; method_29470 func_244358_d + m ()Lnet/minecraft/class_4567; method_29468 getLootPredicateManager + m ()V close close + m ()V method_29475 updateTags + m ()Lnet/minecraft/class_1863; method_29471 getRecipeManager + m ()Lnet/minecraft/class_60; method_29469 getLootTableManager + m (Ljava/util/List;Lnet/minecraft/class_2170$class_5364;ILjava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_29466 func_240961_a_ + f Lnet/minecraft/class_5349; field_25342 functionReloader + f Lnet/minecraft/class_2989; field_25341 advancementManager + f Lnet/minecraft/class_3296; field_25335 resourceManager + f Ljava/util/concurrent/CompletableFuture; field_25334 field_240951_a_ + f Lnet/minecraft/class_3505; field_25338 tagManager + f Lnet/minecraft/class_4567; field_25339 lootPredicateManager + f Lnet/minecraft/class_2170; field_25336 commands + f Lnet/minecraft/class_1863; field_25337 recipeManager + f Lnet/minecraft/class_60; field_25340 lootTableManager +c net/minecraft/class_2995 net/minecraft/scoreboard/ServerScoreboard + m (Lnet/minecraft/class_266;)Ljava/util/List; method_12937 getCreatePackets + m (Lnet/minecraft/class_266;)V method_12939 addObjective + m ()V method_12941 markSaveDataDirty + m (Lnet/minecraft/class_266;)I method_12936 getObjectiveDisplaySlotCount + m (Ljava/lang/Runnable;)V method_12935 addDirtyRunnable + m (Lnet/minecraft/class_266;)V method_12938 sendDisplaySlotRemovalPackets + m (Lnet/minecraft/class_266;)Ljava/util/List; method_12940 getDestroyPackets + f [Ljava/lang/Runnable; field_13426 dirtyRunnables + f Ljava/util/Set; field_13427 addedObjectives + f Lnet/minecraft/server/MinecraftServer; field_13428 server +c net/minecraft/class_2995$class_2996 net/minecraft/scoreboard/ServerScoreboard$Action + m ()[Lnet/minecraft/class_2995$class_2996; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2995$class_2996; valueOf valueOf + f [Lnet/minecraft/class_2995$class_2996; field_13429 $VALUES + f Lnet/minecraft/class_2995$class_2996; field_13431 CHANGE + f Lnet/minecraft/class_2995$class_2996; field_13430 REMOVE +c net/minecraft/class_3738 net/minecraft/util/concurrent/TickDelayedTask + m ()V run run + m ()I method_16338 getScheduledTime + f I field_16504 field_218824_a + f Ljava/lang/Runnable; field_16505 field_218825_b +c net/minecraft/class_3002 net/minecraft/server/CustomServerBossInfo + m ()I method_12960 getMax + m ()Lnet/minecraft/class_2561; method_12965 getFormattedName + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_12958 func_211569_a_ + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3002; method_12966 read + m (Lnet/minecraft/class_3222;)V method_12957 onPlayerLogin + m (I)V method_12954 setValue + m (Lnet/minecraft/class_3222;)V method_12961 onPlayerLogout + m (I)V method_12956 setMax + m ()I method_12955 getValue + m ()Lnet/minecraft/class_2487; method_12963 write + m (Ljava/util/UUID;)V method_12964 addPlayer + m (Ljava/util/Collection;)Z method_12962 setPlayers + m ()Lnet/minecraft/class_2960; method_12959 getId + f I field_13443 value + f Ljava/util/Set; field_13440 players + f Lnet/minecraft/class_2960; field_13441 id + f I field_13442 max +c net/minecraft/class_3004 net/minecraft/server/CustomServerBossInfoManager + m ()Lnet/minecraft/class_2487; method_12974 write + m (Lnet/minecraft/class_3002;)V method_12973 remove + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3002; method_12971 get + m (Lnet/minecraft/class_2487;)V method_12972 read + m ()Ljava/util/Collection; method_12969 getBossbars + m (Lnet/minecraft/class_3222;)V method_12975 onPlayerLogin + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2561;)Lnet/minecraft/class_3002; method_12970 add + m (Lnet/minecraft/class_3222;)V method_12976 onPlayerLogout + m ()Ljava/util/Collection; method_12968 getIDs + f Ljava/util/Map; field_13447 bars +c net/minecraft/class_3008 net/minecraft/command/impl/AdvancementCommand + m (Lnet/minecraft/class_161;Ljava/util/List;)V method_12990 addAllChildren + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12982 func_198200_e + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12983 func_198201_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12989 func_198208_d + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12978 func_198197_b + m (Lnet/minecraft/class_161;Lnet/minecraft/class_3008$class_3010;)Ljava/util/List; method_12996 getMatchingAdvancements + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12995 func_198213_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12997 func_198215_j + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_3008$class_3009;Ljava/util/Collection;)I method_12988 forEachAdvancement + m (Lnet/minecraft/class_2168;)Z method_12984 func_198205_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_12980 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12986 func_198204_i + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12998 func_198217_g + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12993 func_198211_h + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12979 func_198198_f + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_3008$class_3009;Lnet/minecraft/class_161;Ljava/lang/String;)I method_12981 updateCriterion + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_12991 func_198209_b + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_12992 func_198210_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12994 func_198212_k + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_12987 func_198206_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_12985 func_198202_l + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13453 SUGGEST_ADVANCEMENTS +c net/minecraft/class_3008$1 net/minecraft/command/impl/AdvancementCommand$1 +c net/minecraft/class_3008$class_3010 net/minecraft/command/impl/AdvancementCommand$Mode + m (Lnet/minecraft/class_3008$class_3010;)Z method_13003 access$100 + m ()[Lnet/minecraft/class_3008$class_3010; values values + m (Lnet/minecraft/class_3008$class_3010;)Z method_13004 access$000 + m (Ljava/lang/String;)Lnet/minecraft/class_3008$class_3010; valueOf valueOf + f Z field_13459 includesChildren + f Lnet/minecraft/class_3008$class_3010; field_13458 FROM + f Z field_13460 includesParents + f Lnet/minecraft/class_3008$class_3010; field_13462 THROUGH + f Lnet/minecraft/class_3008$class_3010; field_13465 UNTIL + f [Lnet/minecraft/class_3008$class_3010; field_13463 $VALUES + f Lnet/minecraft/class_3008$class_3010; field_13461 EVERYTHING + f Lnet/minecraft/class_3008$class_3010; field_13464 ONLY +c net/minecraft/class_3008$class_3009 net/minecraft/command/impl/AdvancementCommand$Action + m (Ljava/lang/String;)Lnet/minecraft/class_3008$class_3009; valueOf valueOf + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_161;Ljava/lang/String;)Z method_13000 applyToCriterion + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_161;)Z method_13002 applyToAdvancement + m (Lnet/minecraft/class_3222;Ljava/lang/Iterable;)I method_12999 applyToAdvancements + m ()Ljava/lang/String; method_13001 getPrefix + m ()[Lnet/minecraft/class_3008$class_3009; values values + f Ljava/lang/String; field_13454 prefix + f [Lnet/minecraft/class_3008$class_3009; field_13455 $VALUES + f Lnet/minecraft/class_3008$class_3009; field_13457 GRANT + f Lnet/minecraft/class_3008$class_3009; field_13456 REVOKE +c net/minecraft/class_3008$class_3009$2 net/minecraft/command/impl/AdvancementCommand$Action$2 +c net/minecraft/class_3008$class_3009$1 net/minecraft/command/impl/AdvancementCommand$Action$1 +c net/minecraft/class_5252 net/minecraft/command/impl/AttributeCommand + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;Ljava/util/UUID;D)I method_27741 func_241009_a_ + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_27734 func_241002_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27747 func_241015_b_ + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_27743 func_241011_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27736 func_241004_a_ + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_1309; method_27733 func_241001_a_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;Ljava/util/UUID;Ljava/lang/String;DLnet/minecraft/class_1322$class_1323;)I method_27742 func_241010_a_ + m (Lnet/minecraft/class_2168;)Z method_27738 func_241006_a_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;D)I method_27748 func_241016_b_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;Ljava/util/UUID;)I method_27740 func_241008_a_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;D)I method_27739 func_241007_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27755 func_241023_g_ + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_27744 func_241012_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27754 func_241022_f_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;D)I method_27751 func_241019_c_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27752 func_241020_d_ + m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_27749 func_241017_b_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27753 func_241021_e_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27750 func_241018_c_ + m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_27745 func_241013_a_ + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_27735 register + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;)Lnet/minecraft/class_1309; method_27746 func_241014_b_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27759 func_241027_k_ + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_27737 func_241005_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27758 func_241026_j_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27756 func_241024_h_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_27757 func_241025_i_ + f Lcom/mojang/brigadier/exceptions/Dynamic3CommandExceptionType; field_24378 field_240999_d_ + f Lcom/mojang/brigadier/exceptions/Dynamic3CommandExceptionType; field_24379 field_241000_e_ + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_24375 field_240996_a_ + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_24377 field_240998_c_ + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_24376 field_240997_b_ +c net/minecraft/class_3012 net/minecraft/command/impl/BanIpCommand + m (Lnet/minecraft/class_2168;)Z method_13011 func_198222_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13008 register + m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_2561;)I method_13009 banUsernameOrIp + m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_2561;)I method_13007 banIpAddress + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13010 func_198221_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13006 func_198219_b + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13468 IP_INVALID + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13467 FAILED_EXCEPTION + f Ljava/util/regex/Pattern; field_13466 IP_PATTERN +c net/minecraft/class_3014 net/minecraft/command/impl/BanListCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13017 func_198232_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13015 sendBanList + m (Lnet/minecraft/class_2168;)Z method_13018 func_198233_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13013 func_198228_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13016 func_198231_c + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13014 register +c net/minecraft/class_3016 net/minecraft/command/impl/BanCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13020 func_198234_b + m (Lnet/minecraft/class_2168;)Z method_13024 func_198238_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13021 register + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2561;)I method_13022 banGameProfiles + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13023 func_198237_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13473 FAILED_EXCEPTION +c net/minecraft/class_3019 net/minecraft/command/impl/BossBarCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13057 func_201418_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13064 func_201426_x + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13033 func_201392_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13038 func_201396_v + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;Ljava/util/Collection;)I method_13031 setPlayers + m (Lnet/minecraft/class_2168;)I method_13045 listBars + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13043 func_201403_i + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;)I method_13030 getPlayers + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13037 func_201395_g + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13072 func_201430_e + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;I)I method_13066 setMax + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;)I method_13056 getMax + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13032 func_201391_o + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;)I method_13065 getValue + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13040 func_201399_m + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13063 func_208783_b + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;Z)I method_13068 setVisibility + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13052 func_201412_k + m (Lnet/minecraft/class_2168;)Z method_13035 func_201423_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13061 func_201422_s + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13062 func_201424_q + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;Lnet/minecraft/class_1259$class_1260;)I method_13028 setColor + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13051 func_201411_d + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13039 func_201398_b + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13044 func_201404_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13070 func_201429_w + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13042 func_201401_u + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13029 func_201388_b + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13053 register + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;I)I method_13036 setValue + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;)I method_13069 removeBossbar + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13047 func_201408_h + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13067 func_201427_f + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;)I method_13041 getVisibility + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;Lnet/minecraft/class_1259$class_1261;)I method_13050 setStyle + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2960;Lnet/minecraft/class_2561;)I method_13049 createBossbar + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13046 func_201406_n + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;Lnet/minecraft/class_2561;)I method_13071 setName + m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_3002; method_13054 getBossbar + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13058 func_201419_l + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13060 func_201421_j + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13048 func_201409_t + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13055 func_201417_r + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13059 func_208782_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13034 func_201393_p + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13481 ALREADY_STYLE_OF_BOSSBAR + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13484 ALREADY_MAX_OF_BOSSBAR + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13485 BOSSBAR_ALREADY_VISIBLE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13476 ALREADY_NAME_OF_BOSSBAR + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13486 NO_BOSSBAR_WITH_ID + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13482 SUGGESTIONS_PROVIDER + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13477 ALREADY_VALUE_OF_BOSSBAR + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13479 BOSSBAR_ALREADY_HIDDEN + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13483 PLAYERS_ALREADY_ON_BOSSBAR + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13478 BOSS_BAR_ID_TAKEN + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13480 ALREADY_COLOR_OF_BOSSBAR +c net/minecraft/class_3020 net/minecraft/command/impl/ClearCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13078 func_198245_a + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13075 func_208785_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13080 func_198246_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13073 func_198240_b + m (Lnet/minecraft/class_2168;)Z method_13082 func_198247_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13076 register + m (Lnet/minecraft/class_1799;)Z method_13081 func_198242_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Ljava/util/function/Predicate;I)I method_13077 clearInventory + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13074 func_198241_c + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13079 func_208787_a + m (Lnet/minecraft/class_1799;)Z method_13083 func_198248_a + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13488 MULTIPLE_FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13487 SINGLE_FAILED_EXCEPTION +c net/minecraft/class_3023 net/minecraft/command/impl/CloneCommand + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/util/function/Predicate;Lnet/minecraft/class_3023$class_3025;)I method_13090 doClone + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13091 func_198266_d + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13100 func_198273_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13086 func_198261_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13093 func_198267_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13105 func_198278_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13106 func_198280_j + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13104 func_198277_k + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13089 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13097 func_198270_h + m (Lnet/minecraft/class_2694;)Z method_13108 func_198281_b + m (Lnet/minecraft/class_2694;)Z method_13092 func_198279_a + m (Lnet/minecraft/class_2694;)Z method_13101 func_198262_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13103 func_198276_g + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13087 func_198263_e + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13107 func_198282_f + m (Lnet/minecraft/class_2168;)Z method_13094 func_198271_a + m (Lnet/minecraft/class_2694;)Z method_13102 func_198272_d + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13099 func_208796_a + m (Lnet/minecraft/class_2694;)Z method_13096 func_198275_f + m (Lnet/minecraft/class_2694;)Z method_13098 func_198269_e + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13088 func_198264_m + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13095 func_198268_l + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13493 OVERLAP_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13492 FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13491 CLONE_TOO_BIG_EXCEPTION + f Ljava/util/function/Predicate; field_13490 NOT_AIR +c net/minecraft/class_3023$class_3025 net/minecraft/command/impl/CloneCommand$Mode + m (Ljava/lang/String;)Lnet/minecraft/class_3023$class_3025; valueOf valueOf + m ()Z method_13109 allowsOverlap + m ()[Lnet/minecraft/class_3023$class_3025; values values + f [Lnet/minecraft/class_3023$class_3025; field_13501 $VALUES + f Lnet/minecraft/class_3023$class_3025; field_13497 FORCE + f Lnet/minecraft/class_3023$class_3025; field_13499 NORMAL + f Z field_13498 allowOverlap + f Lnet/minecraft/class_3023$class_3025; field_13500 MOVE +c net/minecraft/class_3023$class_3024 net/minecraft/command/impl/CloneCommand$BlockInfo + f Lnet/minecraft/class_2338; field_13496 pos + f Lnet/minecraft/class_2487; field_13494 tag + f Lnet/minecraft/class_2680; field_13495 state +c net/minecraft/class_3027 net/minecraft/command/impl/DataPackCommand + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3288;Lnet/minecraft/class_3027$class_3028;)I method_13114 enablePack + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3288;)V method_13133 func_198308_b_ + m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_2561; method_13132 func_198293_b + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3288;)V method_13112 func_198302_a_ + m (Lnet/minecraft/class_2168;)Z method_13119 func_198301_d_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13111 func_198288_a + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13135 func_208818_b + m (Ljava/util/Collection;Lnet/minecraft/class_3288;)Z method_29477 func_241032_a_ + m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_3288; method_13113 func_198304_c_ + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13131 func_208815_a + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13117 func_208808_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13138 func_198309_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13141 func_198311_d + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13137 func_198307_h_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13123 func_198298_f_ + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13125 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13130 func_198300_a + m (Ljava/util/List;Lnet/minecraft/class_3288;)V method_13122 func_198289_b_ + m (Lnet/minecraft/class_2168;)I method_13128 listAvailablePacks + m (Lnet/minecraft/class_2168;)I method_13126 listEnabledPacks + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13115 func_198290_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13118 func_198295_c + m (Ljava/util/List;Lnet/minecraft/class_3288;)V method_13139 func_241034_a_ + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13120 func_241030_a_ + m (Lnet/minecraft/class_2168;)I method_13121 listAllPacks + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13136 func_198305_b + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3288;)I method_13140 disablePack + m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_2561; method_13134 func_198306_a + m (Ljava/util/Collection;Ljava/lang/String;)Z method_29776 func_241033_a_ + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;Z)Lnet/minecraft/class_3288; method_13127 parsePackInfo + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13116 func_198292_i_ + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13506 SUGGEST_ENABLED_PACK + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13503 UNKNOWN_DATA_PACK_EXCEPTION + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13505 DISABLE_FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13504 ENABLE_FAILED_EXCEPTION + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13502 field_241028_e_ +c net/minecraft/class_3027$class_3028 net/minecraft/command/impl/DataPackCommand$IHandler + m (Ljava/util/List;Lnet/minecraft/class_3288;)V apply apply +c net/minecraft/class_3030 net/minecraft/command/impl/DeOpCommand + m (Lnet/minecraft/class_2168;)Z method_13147 func_198325_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13144 deopPlayers + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13143 register + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13145 func_198323_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13146 func_198324_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13507 FAILED_EXCEPTION +c net/minecraft/class_3032 net/minecraft/command/impl/DebugCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_21617 func_225388_a + m (Lnet/minecraft/class_2168;)Z method_13157 func_198332_d + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13161 func_198333_b + m (Lnet/minecraft/class_2168;)I method_13159 startDebug + m (Lnet/minecraft/class_2168;)I method_13158 stopDebug + m (Lnet/minecraft/class_2168;)I method_21618 writeDebugReport + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13154 func_198329_a + m (Ljava/nio/file/spi/FileSystemProvider;)Z method_21675 func_225386_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13156 register + f Ljava/nio/file/spi/FileSystemProvider; field_20310 JAR_FILESYSTEM_PROVIDER + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13596 ALREADY_RUNNING_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13597 NOT_RUNNING_EXCEPTION + f Lorg/apache/logging/log4j/Logger; field_20283 LOGGER +c net/minecraft/class_3035 net/minecraft/command/impl/DefaultGameModeCommand + m (Lnet/minecraft/class_2168;)Z method_13168 func_198342_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13166 register + m (Lnet/minecraft/class_1934;Lcom/mojang/brigadier/context/CommandContext;)I method_13165 func_198343_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1934;)I method_13167 setGameType +c net/minecraft/class_3036 net/minecraft/command/impl/DifficultyCommand + m (Lnet/minecraft/class_1267;Lcom/mojang/brigadier/context/CommandContext;)I method_13174 func_198347_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1267;)I method_13173 setDifficulty + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13169 register + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13170 func_208823_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13171 func_198346_a + m (Lnet/minecraft/class_2168;)Z method_13172 func_198348_a + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13602 FAILED_EXCEPTION +c net/minecraft/class_3043 net/minecraft/command/impl/EffectCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_23650 func_198352_f + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13228 func_198356_e + m (Lnet/minecraft/class_2168;)Z method_13235 func_198359_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13229 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13232 func_198351_d + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13226 func_198357_c + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_1291;Ljava/lang/Integer;IZ)I method_13227 addEffect + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13233 func_198350_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13225 func_198358_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13234 func_229759_a_ + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_1291;)I method_13231 clearEffect + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13230 clearAllEffects + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13609 CLEAR_EVERYTHING_FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13608 CLEAR_SPECIFIC_FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13607 GIVE_FAILED_EXCEPTION +c net/minecraft/class_3045 net/minecraft/command/impl/MeCommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13237 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13238 func_198365_a +c net/minecraft/class_3048 net/minecraft/command/impl/EnchantCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13240 func_202648_b + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13244 func_208837_a + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13247 func_208839_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13245 func_202650_a + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13242 func_208835_b + m (Lnet/minecraft/class_2168;)Z method_13246 func_203630_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_1887;I)I method_13241 enchant + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13248 func_208840_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13243 register + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13630 FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13633 INCOMPATIBLE_ENCHANTS_EXCEPTION + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13632 INVALID_LEVEL + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13629 NONLIVING_ENTITY_EXCEPTION + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13631 ITEMLESS_EXCEPTION +c net/minecraft/class_3050 net/minecraft/command/impl/ExecuteCommand + m (Lnet/minecraft/class_2168;)Z method_13254 func_229766_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13286 func_229804_j_ + m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13262 func_229787_c_ + m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13291 func_229805_n_ + m (Lnet/minecraft/class_3162;ZLnet/minecraft/class_2203$class_2209;Ljava/util/function/IntFunction;Lcom/mojang/brigadier/context/CommandContext;ZI)V method_13294 func_229772_a_ + m (ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13285 func_229795_d_ + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13316 func_208885_a + m (Lcom/mojang/brigadier/context/CommandContext;)Z method_22830 func_229761_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13252 func_201091_a + m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13292 func_198384_w + m (Ljava/lang/Integer;Ljava/lang/Integer;)Z method_13257 func_229793_d_ + m (ZZLnet/minecraft/class_3002;Lcom/mojang/brigadier/context/CommandContext;ZI)V method_13277 func_229779_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13274 func_210438_g + m (Ljava/lang/Integer;Ljava/lang/Integer;)Z method_13250 func_229782_b_ + m (Lnet/minecraft/class_3162;Lnet/minecraft/class_2203$class_2209;)I method_13303 func_218831_a + m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13317 func_229773_a_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_5341;)Z method_22829 func_229767_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13282 func_229802_g_ + m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13275 func_229762_a_ + m (Lnet/minecraft/class_3050$class_3051;Lcom/mojang/brigadier/context/CommandContext;)I method_13296 func_229771_a_ + m (ZLcom/mojang/brigadier/context/CommandContext;)I method_13273 func_229775_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13249 func_229796_e_ + m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13276 func_229788_c_ + m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13309 func_229774_a_ + m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13283 func_229797_e_ + m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13264 func_229790_c_ + m (Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/builder/ArgumentBuilder;ZLnet/minecraft/class_3050$class_3052;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13310 buildIfResult + m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13268 func_198381_a + m (Lcom/mojang/brigadier/context/CommandContext;Z)I method_13304 checkBlockCountUnless + m (ZLcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13300 func_229791_c_ + m (ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13322 func_201457_v + m (Ljava/util/function/IntFunction;I)Lnet/minecraft/class_2520; method_17205 func_229770_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13321 func_229780_b_ + m (Lcom/mojang/brigadier/tree/CommandNode;ZLnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13258 func_229764_a_ + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/function/BiPredicate;)Z method_13263 compareScores + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Z)Ljava/util/OptionalInt; method_13261 countMatchingBlocks + m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13256 func_229798_e_ + m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13266 func_201088_b + m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13293 func_201083_r + m (Lnet/minecraft/class_2168;)Z method_13255 func_198387_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13271 register + m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13259 func_201089_b + m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13281 func_229807_q_ + m (Ljava/lang/Integer;Ljava/lang/Integer;)Z method_13302 func_229768_a_ + m (Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;Z)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13298 makeIfCommand + m (Lcom/mojang/brigadier/tree/LiteralCommandNode;Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13253 func_229765_a_ + m (ZLnet/minecraft/class_3050$class_3051;)Lcom/mojang/brigadier/Command; method_13323 func_218834_a + m (Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/builder/ArgumentBuilder;ZZ)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13320 buildIfBlocks + m (Lcom/mojang/brigadier/ResultConsumer;Lcom/mojang/brigadier/ResultConsumer;Lcom/mojang/brigadier/context/CommandContext;ZI)V method_13279 func_209939_a + m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13280 func_229803_h_ + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;Z)Lnet/minecraft/class_2168; method_13290 storeIntoScore + m (Ljava/lang/Integer;Ljava/lang/Integer;)Z method_13299 func_229789_c_ + m (Lnet/minecraft/class_3050$class_3051;Lcom/mojang/brigadier/context/CommandContext;)I method_13305 func_229783_b_ + m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13295 func_229809_s_ + m (ZLnet/minecraft/class_3050$class_3052;Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13267 func_229786_b_ + m (Lcom/mojang/brigadier/context/CommandContext;Z)Ljava/util/OptionalInt; method_13272 countMatchingBlocks + m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13288 func_229799_f_ + m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13307 func_229781_b_ + m (ZLnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13301 func_229777_a_ + m (ZLcom/mojang/brigadier/context/CommandContext;)I method_13315 func_229785_b_ + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_22831 func_229763_a_ + m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13318 func_229792_d_ + m (ZLnet/minecraft/class_3050$class_3052;Lcom/mojang/brigadier/context/CommandContext;)I method_13270 func_229776_a_ + m (ZZLcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13287 func_229778_a_ + m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13324 func_229800_f_ + m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13311 func_229784_b_ + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2096$class_2100;)Z method_13313 checkScore + m (Lcom/mojang/brigadier/context/CommandContext;Z)I method_13306 checkBlockCountIf + m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13284 func_229801_f_ + m (Lcom/mojang/brigadier/ResultConsumer;Lcom/mojang/brigadier/ResultConsumer;)Lcom/mojang/brigadier/ResultConsumer; method_13278 func_209937_a + m (ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13269 func_201468_e + m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13251 func_229794_d_ + m (Lcom/mojang/brigadier/context/CommandContext;ZZ)Ljava/util/Collection; method_13319 checkIfMatches + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13312 func_210446_a + m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13308 func_229806_p_ + m (Ljava/util/Collection;Lnet/minecraft/class_269;Lnet/minecraft/class_266;ZLcom/mojang/brigadier/context/CommandContext;ZI)V method_13260 func_229769_a_ + m (Lcom/mojang/brigadier/tree/LiteralCommandNode;Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;Z)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13289 makeStoreSubcommand + m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13314 func_229808_r_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;ZZ)Lnet/minecraft/class_2168; method_13297 storeIntoBossbar + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;Lnet/minecraft/class_2203$class_2209;Ljava/util/function/IntFunction;Z)Lnet/minecraft/class_2168; method_13265 storeIntoNBT + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13637 TEST_FAILED_COUNT + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13636 TEST_FAILED + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_20852 field_229760_e_ + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13635 TOO_MANY_BLOCKS + f Ljava/util/function/BinaryOperator; field_13634 COMBINE_ON_RESULT_COMPLETE +c net/minecraft/class_3050$class_3052 net/minecraft/command/impl/ExecuteCommand$IBooleanTest + m (Lcom/mojang/brigadier/context/CommandContext;)Z test test +c net/minecraft/class_3050$class_3051 net/minecraft/command/impl/ExecuteCommand$INumericTest + m (Lcom/mojang/brigadier/context/CommandContext;)I test test +c net/minecraft/class_3054 net/minecraft/command/impl/ExperienceCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13339 func_198447_g + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13329 func_198436_f + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3222;Lnet/minecraft/class_3054$class_3055;)I method_13328 queryExperience + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13331 func_198439_e + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13336 func_198444_d + m (Lnet/minecraft/class_2168;Ljava/util/Collection;ILnet/minecraft/class_3054$class_3055;)I method_13326 addExperience + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13330 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13332 func_198440_c + m (Lnet/minecraft/class_2168;Ljava/util/Collection;ILnet/minecraft/class_3054$class_3055;)I method_13333 setExperience + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13327 func_198435_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13338 func_198446_a + m (Lnet/minecraft/class_2168;)Z method_13334 func_198441_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13337 func_198445_h + m (Lnet/minecraft/class_2168;)Z method_13335 func_198442_b + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13638 SET_POINTS_INVALID_EXCEPTION +c net/minecraft/class_3054$class_3055 net/minecraft/command/impl/ExperienceCommand$Type + m (Lnet/minecraft/class_3054$class_3055;)Ljava/util/function/ToIntFunction; method_13344 access$000 + m (Lnet/minecraft/class_3222;Ljava/lang/Integer;)Z method_13342 func_198425_a + m ()[Lnet/minecraft/class_3054$class_3055; values values + m (Lnet/minecraft/class_3222;Ljava/lang/Integer;)Z method_13343 func_198424_b + m (Ljava/lang/String;)Lnet/minecraft/class_3054$class_3055; valueOf valueOf + m (Lnet/minecraft/class_3222;)I method_13340 func_198427_a + m (Lnet/minecraft/class_3222;)I method_13341 func_198422_b + f Ljava/util/function/BiConsumer; field_13639 xpAdder + f Ljava/util/function/ToIntFunction; field_13645 xpGetter + f Lnet/minecraft/class_3054$class_3055; field_13644 POINTS + f Ljava/lang/String; field_13643 name + f Ljava/util/function/BiPredicate; field_13642 xpSetter + f [Lnet/minecraft/class_3054$class_3055; field_13640 $VALUES + f Lnet/minecraft/class_3054$class_3055; field_13641 LEVELS +c net/minecraft/class_3057 net/minecraft/command/impl/FillCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13353 func_198462_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13350 func_198467_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13345 func_198461_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13355 func_198468_a + m (Lnet/minecraft/class_2168;)Z method_13351 func_198471_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13347 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13356 func_198472_f + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3341;Lnet/minecraft/class_2247;Lnet/minecraft/class_3057$class_3058;Ljava/util/function/Predicate;)I method_13354 doFill + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13352 func_208897_a + m (Lnet/minecraft/class_2694;)Z method_13348 func_198469_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13346 func_198464_e + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13349 func_198466_e + m ()Lnet/minecraft/class_2247; method_13357 access$000 + f Lnet/minecraft/class_2247; field_13648 AIR + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13650 FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13649 TOO_BIG_EXCEPTION +c net/minecraft/class_3057$class_3058 net/minecraft/command/impl/FillCommand$Mode + m (Ljava/lang/String;)Lnet/minecraft/class_3057$class_3058; valueOf valueOf + m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3218;)Lnet/minecraft/class_2247; method_13360 func_198452_a + m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3218;)Lnet/minecraft/class_2247; method_13361 func_198453_b + m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3218;)Lnet/minecraft/class_2247; method_13358 func_198450_d + m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3218;)Lnet/minecraft/class_2247; method_13359 func_198454_c + m ()[Lnet/minecraft/class_3057$class_3058; values values + f Lnet/minecraft/class_3057$class_3058; field_13655 REPLACE + f [Lnet/minecraft/class_3057$class_3058; field_13653 $VALUES + f Lnet/minecraft/class_3057$class_3058; field_13652 OUTLINE + f Lnet/minecraft/class_3057$class_3058; field_13656 HOLLOW + f Lnet/minecraft/class_3119$class_3120; field_13654 filter + f Lnet/minecraft/class_3057$class_3058; field_13651 DESTROY +c net/minecraft/class_3060 net/minecraft/command/impl/ForceLoadCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13378 func_212711_g + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2265;)I method_13374 doQuery + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13364 func_212714_f + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13367 func_218850_e + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2265;Lnet/minecraft/class_2265;Z)I method_13372 doAddOrRemove + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13370 func_212718_d + m (Lnet/minecraft/class_2168;)I method_13373 doList + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13368 func_212715_c + m (Lnet/minecraft/class_2168;)I method_13366 removeAll + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13365 register + m (Lnet/minecraft/class_3218;J)V method_13377 func_212720_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13363 func_212710_b + m (Lnet/minecraft/class_2168;)Z method_13371 func_212716_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13375 func_212723_a + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13369 func_212717_a + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13376 func_212724_b + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13659 QUERY_FAILURE_EXCEPTION + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13657 TOO_BIG_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13660 REMOVE_FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13658 FAILED_ADD_EXCEPTION +c net/minecraft/class_3062 net/minecraft/command/impl/FunctionCommand + m (Lnet/minecraft/class_2168;)Z method_13384 func_198480_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13381 executeFunctions + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13380 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13383 func_198479_a + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13382 func_198477_a + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13662 FUNCTION_SUGGESTER +c net/minecraft/class_3064 net/minecraft/command/impl/GameModeCommand + m (Lnet/minecraft/class_1934;Lcom/mojang/brigadier/context/CommandContext;)I method_13386 func_198486_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/Collection;Lnet/minecraft/class_1934;)I method_13387 setGameMode + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13388 register + m (Lnet/minecraft/class_1934;Lcom/mojang/brigadier/context/CommandContext;)I method_13391 func_198483_b + m (Lnet/minecraft/class_2168;)Z method_13389 func_198485_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3222;Lnet/minecraft/class_1934;)V method_13390 sendGameModeFeedback +c net/minecraft/class_3065 net/minecraft/command/impl/GameRuleCommand + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_1928$class_4313;)I method_13394 func_223485_b + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_1928$class_4313;)I method_13396 func_223488_a + m (Lnet/minecraft/class_2168;)Z method_13393 func_198491_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1928$class_4313;)I method_13397 func_223486_b + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13392 register + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1928$class_4313;)I method_13395 func_223487_a +c net/minecraft/class_3065$1 net/minecraft/command/impl/GameRuleCommand$1 + m (Lnet/minecraft/class_1928$class_4313;Lcom/mojang/brigadier/context/CommandContext;)I method_20797 func_223482_a + m (Lnet/minecraft/class_1928$class_4313;Lcom/mojang/brigadier/context/CommandContext;)I method_20798 func_223483_b + f Lcom/mojang/brigadier/builder/LiteralArgumentBuilder; field_19419 field_223484_a +c net/minecraft/class_3068 net/minecraft/command/impl/GiveCommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13402 register + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2290;Ljava/util/Collection;I)I method_13401 giveItem + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13400 func_198493_b + m (Lnet/minecraft/class_2168;)Z method_13404 func_198496_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13403 func_198495_a +c net/minecraft/class_3069 net/minecraft/command/impl/HelpCommand + m (Lcom/mojang/brigadier/CommandDispatcher;Lcom/mojang/brigadier/context/CommandContext;)I method_13406 func_198511_b + m (Lcom/mojang/brigadier/CommandDispatcher;Lcom/mojang/brigadier/context/CommandContext;)I method_13407 func_198512_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13405 register + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13665 FAILED_EXCEPTION +c net/minecraft/class_3073 net/minecraft/command/impl/KickCommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13410 register + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2561;)I method_13411 kickPlayers + m (Lnet/minecraft/class_2168;)Z method_13413 func_198517_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13409 func_198513_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13412 func_198516_a +c net/minecraft/class_3075 net/minecraft/command/impl/KillCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22832 func_198520_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13431 func_229810_a_ + m (Lnet/minecraft/class_2168;)Z method_13432 func_198521_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13430 killEntities + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13429 register +c net/minecraft/util/CubicSampler net/minecraft/util/CubicSampler + m (Lnet/minecraft/class_243;Lnet/minecraft/util/CubicSampler$class_4859;)Lnet/minecraft/class_243; method_24895 func_240807_a_ + f [D field_22449 field_240806_a_ +c net/minecraft/util/CubicSampler$class_4859 net/minecraft/util/CubicSampler$Vec3Fetcher + m (III)Lnet/minecraft/class_243; fetch fetch +c net/minecraft/class_3078 net/minecraft/command/impl/ListCommand + m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_2561; method_30310 func_244373_a + m (Lnet/minecraft/class_2168;)I method_13437 listNames + m (Lnet/minecraft/class_2168;)I method_13436 listUUIDs + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13435 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13433 func_198523_a + m (Lnet/minecraft/class_2168;Ljava/util/function/Function;)I method_13434 listPlayers + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13438 func_208202_a +c net/minecraft/class_4799 net/minecraft/command/impl/LocateBiomeCommand + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2960;)I method_24495 func_241049_a_ + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_24498 func_241052_b_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_24492 func_241047_a_ + m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_24497 func_241051_a_ + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_24496 func_241050_a_ + m (Lnet/minecraft/class_2168;)Z method_24494 func_241048_a_ + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_24491 register + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_22252 field_241044_a_ + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_22253 field_241045_b_ +c net/minecraft/class_3079 net/minecraft/command/impl/LocateCommand + m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/lang/String;)I method_24499 func_241054_a_ + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13443 register + m (Ljava/util/Map$Entry;Lcom/mojang/brigadier/context/CommandContext;)I method_29192 func_241056_a_ + m (Lnet/minecraft/class_2168;)Z method_13448 func_198533_a + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_13447 func_241055_a_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3195;)I method_13457 func_241053_a_ + m (IIII)F method_13439 getDistance + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13666 FAILED_EXCEPTION +c net/minecraft/class_3039 net/minecraft/command/impl/LootCommand + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1263; method_13207 func_218862_a + m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13204 func_218878_c + m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13198 func_218891_e + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13195 func_218896_b + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_1297;Lnet/minecraft/class_3039$class_3041;)I method_13189 func_218869_a + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;)Z method_13223 func_218890_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_243;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13183 func_218881_a + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;Lnet/minecraft/class_3039$class_3041;)I method_13219 func_218879_a + m (Ljava/util/Collection;IILjava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13187 func_218865_a + m (Lnet/minecraft/class_2168;Ljava/util/List;)V method_13184 func_218902_b + m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13215 func_218888_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13202 func_218864_e + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13196 func_218900_a + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;Lnet/minecraft/class_3039$class_3041;)I method_13197 func_218887_a + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13210 func_218873_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13182 func_218866_g + m (Ljava/util/Collection;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13201 func_218859_a + m (Lnet/minecraft/class_2168;Ljava/util/List;Lnet/minecraft/class_2960;)V method_13212 func_218860_a + m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13216 func_218892_h + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13220 func_218877_a + m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13208 func_218899_j + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13214 func_218885_c + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1304;)Lnet/minecraft/class_1799; method_13178 func_218872_a + m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13222 func_218895_b + m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13211 func_218897_d + m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13177 func_218861_f + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2960;Ljava/util/List;)V method_13185 func_218863_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;IILjava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13209 func_218894_a + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13217 func_218889_a + m (Lnet/minecraft/class_2168;Ljava/util/List;)V method_13213 func_218875_a + m (Lcom/mojang/brigadier/builder/ArgumentBuilder;Lnet/minecraft/class_3039$class_3042;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13206 func_218868_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2680;Ljava/util/List;)V method_13224 func_218893_a + m (Lnet/minecraft/class_2168;)Z method_13181 func_218903_a + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13221 func_218884_f + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_13218 func_218883_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_243;Lnet/minecraft/class_1799;)V method_13179 func_218882_a + m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13188 func_218898_g + m (Lcom/mojang/brigadier/builder/ArgumentBuilder;Lnet/minecraft/class_3039$class_3041;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13203 func_218880_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13193 register + m (Lnet/minecraft/class_1297;Ljava/util/List;IILjava/util/List;)V method_16139 func_218901_a + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;Lnet/minecraft/class_47;Lnet/minecraft/class_3039$class_3041;)I method_13180 func_218871_a + m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13205 func_218874_i + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_16339 func_218870_d + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13191 func_218867_b + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;Lnet/minecraft/class_3039$class_3041;)I method_13199 func_218876_a + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13606 field_218906_c + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13605 field_218904_a + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13604 field_218905_b +c net/minecraft/class_3039$class_3040 net/minecraft/command/impl/LootCommand$ISuccessListener + m (Ljava/util/List;)V accept accept +c net/minecraft/class_3039$class_3041 net/minecraft/command/impl/LootCommand$ITargetHandler + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I accept accept +c net/minecraft/class_3039$class_3042 net/minecraft/command/impl/LootCommand$ISourceArgumentBuilder + m (Lcom/mojang/brigadier/builder/ArgumentBuilder;Lnet/minecraft/class_3039$class_3041;)Lcom/mojang/brigadier/builder/ArgumentBuilder; construct construct +c net/minecraft/class_3082 net/minecraft/command/impl/MessageCommand + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_31165 func_244375_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13463 func_198539_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13461 register + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_31164 func_244374_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2561;)I method_13462 sendPrivateMessage +c net/minecraft/class_3083 net/minecraft/command/impl/OpCommand + m (Lnet/minecraft/class_3324;Lnet/minecraft/class_3222;)Z method_13466 func_198540_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13465 opPlayers + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13464 register + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13467 func_198543_a + m (Lnet/minecraft/class_2168;)Z method_13470 func_198545_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13468 func_198544_a + m (Lnet/minecraft/class_3222;)Ljava/lang/String; method_13469 func_200545_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13667 ALREADY_OP +c net/minecraft/class_3086 net/minecraft/command/impl/PardonCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13475 func_198550_a + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13474 func_198549_a + m (Lnet/minecraft/class_2168;)Z method_13476 func_198551_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13473 unbanPlayers + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13472 register + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13669 FAILED_EXCEPTION +c net/minecraft/class_3088 net/minecraft/command/impl/PardonIpCommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13478 register + m (Lnet/minecraft/class_2168;)Z method_13481 func_198556_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13480 func_198555_a + m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_13482 unbanIp + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13479 func_198554_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13672 FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13671 IP_INVALID_EXCEPTION +c net/minecraft/class_3089 net/minecraft/command/impl/ParticleCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13488 func_198566_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13484 func_198561_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13487 func_198565_d + m (Lnet/minecraft/class_2168;)Z method_13490 func_198568_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13486 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13485 func_201226_e + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13489 func_198567_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13492 func_198562_f + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2394;Lnet/minecraft/class_243;Lnet/minecraft/class_243;FIZLjava/util/Collection;)I method_13491 spawnParticle + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13483 func_198560_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13673 FAILED_EXCEPTION +c net/minecraft/class_3091 net/minecraft/command/impl/PlaySoundCommand + m (Lnet/minecraft/class_2168;)Z method_13502 func_198576_a + m (Lnet/minecraft/class_3419;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder; method_13497 buildCategorySubcommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13500 register + m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13499 func_198575_e + m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13503 func_198570_a + m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13498 func_198571_c + m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13505 func_198574_b + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2960;Lnet/minecraft/class_3419;Lnet/minecraft/class_243;FFF)I method_13504 playSound + m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13501 func_198578_d + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13678 FAILED_EXCEPTION +c net/minecraft/class_3093 net/minecraft/command/impl/PublishCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13508 func_198580_a + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13511 func_208900_a + m (Lnet/minecraft/class_2168;I)I method_13509 publish + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13510 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13512 func_198582_a + m (Lnet/minecraft/class_2168;)Z method_13513 func_198583_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13680 FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13679 ALREADY_PUBLISHED_EXCEPTION +c net/minecraft/class_3095 net/minecraft/command/impl/RecipeCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13521 func_198592_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Ljava/util/Collection;)I method_13518 takeRecipes + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13515 func_198587_b + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13517 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13519 func_198591_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13516 func_198588_d + m (Lnet/minecraft/class_2168;)Z method_13522 func_198593_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Ljava/util/Collection;)I method_13520 giveRecipes + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13682 TAKE_FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13681 GIVE_FAILED_EXCEPTION +c net/minecraft/class_3097 net/minecraft/command/impl/ReloadCommand + m (Lnet/minecraft/class_2168;Ljava/lang/Throwable;)Ljava/lang/Void; method_29479 func_241061_a_ + m (Lnet/minecraft/class_2168;)Z method_13531 func_198599_a_ + m (Ljava/util/Collection;Lnet/minecraft/class_2168;)V method_29480 func_241062_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13530 func_198598_a_ + m (Lnet/minecraft/class_3283;Lnet/minecraft/class_5219;Ljava/util/Collection;)Ljava/util/Collection; method_29478 func_241058_a_ + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13529 register + f Lorg/apache/logging/log4j/Logger; field_25343 field_241057_a_ +c net/minecraft/class_3102 net/minecraft/command/impl/ReplaceItemCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13544 func_198606_a + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13546 func_211411_a + m (Lnet/minecraft/class_2168;)Z method_13545 func_198607_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13538 func_198600_b + m (Lnet/minecraft/class_2168;Ljava/util/Collection;ILnet/minecraft/class_1799;)I method_13537 replaceItemEntities + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13541 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13542 func_198605_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;ILnet/minecraft/class_1799;)I method_13539 replaceItemBlock + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13540 func_198601_b + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13543 func_211409_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13696 BLOCK_FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13697 ENTITY_FAILED_EXCEPTION + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13695 INAPPLICABLE_SLOT_EXCEPTION +c net/minecraft/class_3104 net/minecraft/command/impl/SaveAllCommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13551 register + m (Lnet/minecraft/class_2168;)Z method_13554 func_198615_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13553 func_198613_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13549 func_198610_b + m (Lnet/minecraft/class_2168;Z)I method_13550 saveAll + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13701 FAILED_EXCEPTION +c net/minecraft/class_3106 net/minecraft/command/impl/SaveOffCommand + m (Lnet/minecraft/class_2168;)Z method_13558 func_198619_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13556 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13557 func_198618_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13703 SAVE_ALREADY_OFF_EXCEPTION +c net/minecraft/class_3107 net/minecraft/command/impl/SaveOnCommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13559 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13560 func_198622_a + m (Lnet/minecraft/class_2168;)Z method_13561 func_198623_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13704 SAVE_ALREADY_ON_EXCEPTION +c net/minecraft/class_3110 net/minecraft/command/impl/SayCommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13562 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13563 func_198626_a + m (Lnet/minecraft/class_2168;)Z method_13564 func_198627_a +c net/minecraft/class_3112 net/minecraft/command/impl/ScheduleCommand + m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_22833 func_229817_a_ + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13567 register + m (Lnet/minecraft/class_2960;ZLnet/minecraft/class_236;JLnet/minecraft/class_2168;ILnet/minecraft/class_2158;)V method_13571 func_229820_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22834 func_229813_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22837 func_229821_b_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_22838 func_229822_c_ + m (Lnet/minecraft/class_2960;ZLnet/minecraft/class_236;JLnet/minecraft/class_2168;ILnet/minecraft/class_3494;)V method_13570 func_229819_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13568 func_229823_d_ + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_22836 func_229818_a_ + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_22835 func_229814_a_ + m (Lnet/minecraft/class_2168;Lcom/mojang/datafixers/util/Pair;IZ)I method_13566 func_241063_a_ + m (Lnet/minecraft/class_2168;)Z method_13569 func_229815_a_ + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_20853 field_229811_b_ + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13706 field_218913_a + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_20854 field_229812_c_ +c net/minecraft/class_3115 net/minecraft/command/impl/ScoreboardCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13590 func_198636_n + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13577 func_198640_q + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;)I method_13586 resetPlayerScore + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;)I method_13609 enableTrigger + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_266;Lnet/minecraft/class_274$class_275;)I method_13581 setRenderType + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13575 resetPlayerAllScores + m (Lnet/minecraft/class_2168;)Z method_13585 func_198650_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13591 func_198642_h + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13588 func_198639_i + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;Lnet/minecraft/class_2218$class_2219;Ljava/util/Collection;Lnet/minecraft/class_266;)I method_13584 applyScoreOperation + m ()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder; method_13606 createRenderTypeArgument + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13603 func_198652_j + m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_13614 listPlayerScores + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13594 func_198646_k + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13599 func_211750_l + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13583 func_198649_m + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13598 func_198648_c + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_266;)I method_13602 removeObjective + m (Lnet/minecraft/class_2168;)I method_13597 listObjectives + m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_266;)I method_13607 getPlayerScore + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_266;Lnet/minecraft/class_2561;)I method_13576 setDisplayName + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13593 func_198645_d + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13612 func_198660_e + m (Lnet/minecraft/class_2168;ILnet/minecraft/class_266;)I method_13596 setObjectiveDisplaySlot + m (Lnet/minecraft/class_2168;)I method_13589 listPlayers + m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13605 func_208907_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13613 suggestTriggers + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13608 func_198655_f + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13580 func_198631_g + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13587 func_198638_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;I)I method_13600 removeFromPlayerScore + m (Lnet/minecraft/class_274$class_275;Lcom/mojang/brigadier/context/CommandContext;)I method_13601 func_211912_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;I)I method_13578 addToPlayerScore + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13595 register + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;I)I method_13604 setPlayerScore + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13610 func_198657_a + m (Lnet/minecraft/class_2168;I)I method_13592 clearObjectiveDisplaySlot + m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_274;Lnet/minecraft/class_2561;)I method_13611 addObjective + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13574 func_198628_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13579 func_198630_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13582 func_198635_d + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13710 ENABLE_TRIGGER_INVALID + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13712 OBJECTIVE_ALREADY_EXISTS_EXCEPTION + f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13711 SCOREBOARD_PLAYER_NOT_FOUND_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13714 ENABLE_TRIGGER_FAILED + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13713 DISPLAY_ALREADY_SET_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13715 DISPLAY_ALREADY_CLEAR_EXCEPTION +c net/minecraft/class_3118 net/minecraft/command/impl/SeedCommand + m (JLnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_13619 func_211752_a_ + m (ZLnet/minecraft/class_2168;)Z method_13618 func_198673_a_ + m (Lcom/mojang/brigadier/CommandDispatcher;Z)V method_13616 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13617 func_198672_a +c net/minecraft/class_3119 net/minecraft/command/impl/SetBlockCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13622 func_198682_d + m (Lnet/minecraft/class_2168;)Z method_13627 func_198688_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3119$class_3121;Ljava/util/function/Predicate;)I method_13620 setBlock + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13626 func_198686_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13621 func_198681_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13625 func_198685_c + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13623 register + m (Lnet/minecraft/class_2694;)Z method_13624 func_198687_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13719 FAILED_EXCEPTION +c net/minecraft/class_3119$class_3120 net/minecraft/command/impl/SetBlockCommand$IFilter + m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3218;)Lnet/minecraft/class_2247; filter filter +c net/minecraft/class_3119$class_3121 net/minecraft/command/impl/SetBlockCommand$Mode + m ()[Lnet/minecraft/class_3119$class_3121; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3119$class_3121; valueOf valueOf + f [Lnet/minecraft/class_3119$class_3121; field_13720 $VALUES + f Lnet/minecraft/class_3119$class_3121; field_13721 DESTROY + f Lnet/minecraft/class_3119$class_3121; field_13722 REPLACE +c net/minecraft/class_3123 net/minecraft/command/impl/SetIdleTimeoutCommand + m (Lnet/minecraft/class_2168;I)I method_13630 setTimeout + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13632 func_198691_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13631 register + m (Lnet/minecraft/class_2168;)Z method_13633 func_198692_a +c net/minecraft/class_3127 net/minecraft/command/impl/SpawnPointCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13642 func_198697_c + m (Lnet/minecraft/class_2168;)Z method_13644 func_198699_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2338;F)I method_13645 setSpawnPoint + m (Lcom/mojang/brigadier/context/CommandContext;)I method_30733 func_244376_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13643 func_198698_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13640 func_198694_b + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13641 register +c net/minecraft/class_3128 net/minecraft/command/impl/SetWorldSpawnCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_30734 func_244377_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13648 func_198703_a + m (Lnet/minecraft/class_2168;)Z method_13649 func_198704_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;F)I method_13650 setSpawn + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13647 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13646 func_198700_b +c net/minecraft/class_4694 net/minecraft/command/impl/SpectateCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_23657 func_229832_c_ + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_23655 func_229830_a_ + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_23653 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_23654 func_229827_a_ + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_3222;)I method_23652 func_229829_a_ + m (Lnet/minecraft/class_2168;)Z method_23651 func_229828_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_23656 func_229831_b_ + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_21464 field_229825_b_ + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_21463 field_229824_a_ +c net/minecraft/class_3131 net/minecraft/command/impl/SpreadPlayersCommand + m (Ljava/util/Collection;Lnet/minecraft/class_3218;[Lnet/minecraft/class_3131$class_3132;IZ)D method_13657 func_241072_a_ + m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13655 func_208910_b + m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13660 func_208912_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_241;FFIZLjava/util/Collection;)I method_13656 func_241070_a_ + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13654 register + m (Ljava/util/Collection;)I method_13652 getNumberOfTeams + m (Lcom/mojang/brigadier/context/CommandContext;)I method_29193 func_241069_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13658 func_198718_a + m (Lnet/minecraft/class_2168;)Z method_13659 func_198721_a + m (Ljava/util/Random;IDDDD)[Lnet/minecraft/class_3131$class_3132; method_13653 getPositions + m (Lnet/minecraft/class_241;DLnet/minecraft/class_3218;Ljava/util/Random;DDDDI[Lnet/minecraft/class_3131$class_3132;Z)V method_13661 func_241071_a_ + f Lcom/mojang/brigadier/exceptions/Dynamic4CommandExceptionType; field_13735 SPREAD_ENTITIES_FAILED + f Lcom/mojang/brigadier/exceptions/Dynamic4CommandExceptionType; field_13734 SPREAD_TEAMS_FAILED +c net/minecraft/class_3131$class_3132 net/minecraft/command/impl/SpreadPlayersCommand$Position + m (Lnet/minecraft/class_1922;I)I method_13669 getHighestNonAirBlock + m (DDDD)Z method_13666 clampWithinRange + m ()V method_13671 normalize + m ()F method_13668 getMagnitude + m (Ljava/util/Random;DDDD)V method_13667 computeCoords + m (Lnet/minecraft/class_3131$class_3132;)D method_13665 getDistance + m (Lnet/minecraft/class_3131$class_3132;)D method_13673 access$000 + m (Lnet/minecraft/class_3131$class_3132;)D method_13672 access$100 + m (Lnet/minecraft/class_1922;I)Z method_13662 func_241074_b_ + m (Lnet/minecraft/class_3131$class_3132;D)D method_13664 access$102 + m (Lnet/minecraft/class_3131$class_3132;D)D method_13663 access$002 + m (Lnet/minecraft/class_3131$class_3132;)V method_13670 subtract + f D field_13737 x + f D field_13736 z +c net/minecraft/class_3134 net/minecraft/command/impl/StopCommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13675 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13676 func_198726_a + m (Lnet/minecraft/class_2168;)Z method_13677 func_198727_a +c net/minecraft/class_3136 net/minecraft/command/impl/StopSoundCommand + m (Lnet/minecraft/class_2168;)Z method_13682 func_198734_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13681 register + m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13684 func_198728_a + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_3419;Lnet/minecraft/class_2960;)I method_13685 stopSound + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13683 func_198732_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13680 func_198729_b + m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13686 func_198731_b +c net/minecraft/class_3138 net/minecraft/command/impl/SummonCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13689 func_198735_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13691 func_198738_c + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13690 register + m (Lnet/minecraft/class_2168;)Z method_13693 func_198740_a + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_18192 func_218914_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13692 func_198739_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2960;Lnet/minecraft/class_243;Lnet/minecraft/class_2487;Z)I method_13694 summonEntity + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13741 SUMMON_FAILED + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_26629 field_244378_b + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_22254 field_241075_b_ +c net/minecraft/class_3140 net/minecraft/command/impl/TagCommand + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Ljava/lang/String;)I method_13699 removeTag + m (Ljava/util/Collection;)Ljava/util/Collection; method_13706 getAllTags + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13700 listTags + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Ljava/lang/String;)I method_13702 addTag + m (Lnet/minecraft/class_2168;)Z method_13705 func_198751_a + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13701 func_198745_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13704 func_198747_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13697 func_198742_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13703 func_198746_c + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13698 register + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13742 ADD_FAILED + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13743 REMOVE_FAILED +c net/minecraft/class_3142 net/minecraft/command/impl/TeamCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13726 func_198773_s + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13712 func_207514_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13724 func_198754_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13753 func_198767_u + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13716 func_198762_m + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13746 func_198765_o + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;)I method_13723 emptyTeam + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_270$class_271;)I method_13713 setCollisionRule + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;)I method_13748 listMembers + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Z)I method_13751 setCanSeeFriendlyInvisibles + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13744 func_198758_q + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13742 func_198766_h + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13741 func_208916_b + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13736 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13740 func_198778_j + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13729 func_198775_l + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_2561;)I method_13756 setSuffix + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13733 func_198761_b + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_2561;)I method_13711 setDisplayName + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13750 func_198769_d + m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_2561;)I method_13715 addTeam + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13714 leaveFromTeams + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_270$class_272;)I method_13735 setDeathMessageVisibility + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Ljava/util/Collection;)I method_13720 joinTeam + m (Lnet/minecraft/class_2168;)I method_13728 listTeams + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13730 func_198789_f + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13731 func_198785_r + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13752 func_207516_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13722 func_198779_t + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13717 func_198790_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13749 func_198763_v + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13739 func_198756_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_124;)I method_13745 setColor + m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_13757 addTeam + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13718 func_211919_n + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13738 func_198755_p + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Z)I method_13754 setAllowFriendlyFire + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;)I method_13747 removeTeam + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13737 func_198760_A + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13734 func_198764_i + m (Lnet/minecraft/class_2168;)Z method_13719 func_198780_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13725 func_198770_k + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_2561;)I method_13743 setPrefix + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13755 func_198774_c + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_270$class_272;)I method_13732 setNameTagVisibility + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13721 func_198791_e + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13727 func_198759_g + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13755 NAME_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13750 COLLISION_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13748 TEAM_NAME_TOO_LONG + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13752 NAMETAG_VISIBILITY_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13753 FRIENDLY_FIRE_ALREADY_ON + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13747 SEE_FRIENDLY_INVISIBLES_ALREADY_ON + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13746 COLOR_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13749 DUPLICATE_TEAM_NAME + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13751 EMPTY_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13756 SEE_FRIENDLY_INVISIBLES_ALREADY_OFF + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13757 DEATH_MESSAGE_VISIBILITY_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13754 FRIENDLY_FIRE_ALREADY_OFF +c net/minecraft/class_3945 net/minecraft/command/impl/TeamMsgCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_17601 func_218916_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2561;)I method_17599 func_218917_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_17600 register + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_17440 field_218919_a + f Lnet/minecraft/class_2583; field_24380 field_241076_a_ +c net/minecraft/class_3143 net/minecraft/command/impl/TeleportCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13759 func_198806_d + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_3218;Lnet/minecraft/class_2267;Lnet/minecraft/class_2267;Lnet/minecraft/class_3143$class_3144;)I method_13765 teleportToPos + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13770 func_198811_e + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13768 func_198807_f + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_1297;)I method_13771 teleportToEntity + m (Lnet/minecraft/class_2168;)Z method_13764 func_198816_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13769 func_200562_g + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13760 register + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_3218;DDDLjava/util/Set;FFLnet/minecraft/class_3143$class_3144;)V method_13766 teleport + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13758 func_200560_h + m (Lnet/minecraft/class_2168;)Z method_13763 func_200556_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13762 func_198814_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13761 func_198812_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13767 func_198805_b + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_22255 field_241077_a_ +c net/minecraft/class_3143$class_3144 net/minecraft/command/impl/TeleportCommand$Facing + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;)V method_13772 updateLook + f Lnet/minecraft/class_243; field_13760 position + f Lnet/minecraft/class_2183$class_2184; field_13759 anchor + f Lnet/minecraft/class_1297; field_13758 entity +c net/minecraft/class_3146 net/minecraft/command/impl/TellRawCommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13776 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13777 func_198819_a + m (Lnet/minecraft/class_2168;)Z method_13778 func_198820_a +c net/minecraft/class_3149 net/minecraft/command/impl/TimeCommand + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13786 register + m (Lnet/minecraft/class_2168;I)I method_13784 setTime + m (Lnet/minecraft/class_2168;)Z method_13791 func_198828_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13795 func_198831_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13790 func_198827_a + m (Lnet/minecraft/class_2168;I)I method_13788 addTime + m (Lnet/minecraft/class_2168;I)I method_13796 sendQueryResults + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13783 func_198821_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13793 func_198830_b + m (Lnet/minecraft/class_3218;)I method_13787 getDayTime + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13789 func_200564_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13797 func_198822_e + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13785 func_200563_d + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13794 func_198825_f + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13792 func_198832_g +c net/minecraft/class_3151 net/minecraft/command/impl/TitleCommand + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13800 func_198836_b + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13805 clear + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13801 func_198837_d + m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2561;Lnet/minecraft/class_2762$class_2763;)I method_13802 show + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13808 func_198842_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13807 func_198841_e + m (Lnet/minecraft/class_2168;)Z method_13810 func_198847_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13804 register + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13799 reset + m (Lnet/minecraft/class_2168;Ljava/util/Collection;III)I method_13806 setTimes + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13809 func_198843_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13803 func_198838_f +c net/minecraft/class_3153 net/minecraft/command/impl/TriggerCommand + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_267;I)I method_13820 setTrigger + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13814 func_198853_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13816 func_198855_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_267;I)I method_13817 addToTrigger + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13812 func_198849_b + m (Lnet/minecraft/class_2168;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13819 suggestTriggers + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_266;)Lnet/minecraft/class_267; method_13821 checkValidTrigger + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_267;)I method_13818 incrementTrigger + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13813 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13815 func_198854_c + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13764 NOT_A_TRIGGER + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13763 NOT_PRIMED +c net/minecraft/class_3155 net/minecraft/command/impl/WeatherCommand + m (Lnet/minecraft/class_2168;I)I method_13828 setRain + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13823 func_198859_b + m (Lnet/minecraft/class_2168;I)I method_13824 setClear + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13831 func_198867_a + m (Lnet/minecraft/class_2168;I)I method_13833 setThunder + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13830 func_198866_c + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13827 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13825 func_198860_d + m (Lnet/minecraft/class_2168;)Z method_13832 func_198868_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13826 func_198861_f + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13829 func_198864_e +c net/minecraft/class_3156 net/minecraft/command/impl/WhitelistCommand + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13838 addPlayers + m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13845 removePlayers + m (Lnet/minecraft/class_2168;)I method_13837 disableWhiteList + m (Lnet/minecraft/class_3324;Lnet/minecraft/class_3222;)Z method_13841 func_198871_a + m (Lnet/minecraft/class_2168;)I method_13840 listWhitelistedPlayers + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13851 func_198882_a + m (Lnet/minecraft/class_2168;)I method_13839 enableWhiteList + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13836 register + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13843 func_198875_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13834 func_198870_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13846 func_198878_d + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13848 func_198879_b + m (Lnet/minecraft/class_2168;)I method_13850 reload + m (Lnet/minecraft/class_2168;)Z method_13847 func_198877_e + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13842 func_198874_e + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13849 func_198881_a + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13835 func_198872_f + m (Lnet/minecraft/class_3222;)Ljava/lang/String; method_13844 func_200567_a + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13767 ALREADY_ON + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13770 ALREADY_OFF + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13768 PLAYER_ALREADY_WHITELISTED + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13769 PLAYER_NOT_WHITELISTED +c net/minecraft/class_3158 net/minecraft/command/impl/WorldBorderCommand + m (Lnet/minecraft/class_2168;)Z method_13862 func_198903_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13857 func_198893_f + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13867 func_198906_h + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13872 func_198909_g + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13864 func_198901_i + m (Lnet/minecraft/class_2168;)I method_13868 getSize + m (Lnet/minecraft/class_2168;F)I method_13865 setDamageBuffer + m (Lnet/minecraft/class_2168;DJ)I method_13854 setSize + m (Lnet/minecraft/class_2168;F)I method_13863 setDamageAmount + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13871 func_198908_j + m (Lnet/minecraft/class_2168;I)I method_13856 setWarningTime + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13870 func_198907_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_241;)I method_13869 setCenter + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13858 register + m (Lnet/minecraft/class_2168;I)I method_13859 setWarningDistance + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13855 func_198892_b + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13866 func_198905_d + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13861 func_198900_c + m (Lcom/mojang/brigadier/context/CommandContext;)I method_13860 func_198897_e + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13777 WARNING_DISTANCE_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13778 DAMAGE_BUFFER_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13774 DAMAGE_AMOUNT_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13776 SIZE_TOO_SMALL + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13779 SIZE_TOO_BIG + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13773 WARNING_TIME_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13775 CENTER_NO_CHANGE + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13780 SIZE_NO_CHANGE +c net/minecraft/class_3161 net/minecraft/command/impl/data/BlockDataAccessor + m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; method_13877 access$000 + m (Ljava/lang/String;)Lnet/minecraft/class_3164$class_3167; method_13878 func_218923_a + f Lnet/minecraft/class_2338; field_13783 pos + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13785 DATA_BLOCK_INVALID_EXCEPTION + f Ljava/util/function/Function; field_13786 DATA_PROVIDER + f Lnet/minecraft/class_2586; field_13784 tileEntity +c net/minecraft/class_3161$1 net/minecraft/command/impl/data/BlockDataAccessor$1 + f Ljava/lang/String; field_13787 field_218921_a +c net/minecraft/class_3162 net/minecraft/command/impl/data/IDataAccessor + m ()Lnet/minecraft/class_2561; method_13883 getModifiedMessage + m ()Lnet/minecraft/class_2487; method_13881 getData + m (Lnet/minecraft/class_2520;)Lnet/minecraft/class_2561; method_13882 getQueryMessage + m (Lnet/minecraft/class_2487;)V method_13880 mergeData + m (Lnet/minecraft/class_2203$class_2209;DI)Lnet/minecraft/class_2561; method_13879 getGetMessage +c net/minecraft/class_3164 net/minecraft/command/impl/data/DataCommand + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13897 func_218932_d + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13902 func_208922_b + m (Lnet/minecraft/class_2168;)Z method_13890 func_198939_a + m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13904 func_198945_c + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;Lnet/minecraft/class_2203$class_2209;D)I method_13903 getScaled + m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13912 func_198941_a + m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;Lcom/mojang/brigadier/context/CommandContext;)I method_13900 func_218952_a + m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13911 func_218934_a + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;Ljava/util/List;)I method_13920 func_218933_a + m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;Lcom/mojang/brigadier/context/CommandContext;)I method_13917 func_218936_a + m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13887 func_198936_e + m (Ljava/util/function/BiConsumer;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13898 func_218935_a + m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13923 func_198934_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;Lnet/minecraft/class_2203$class_2209;)I method_13916 get + m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13896 func_198943_c + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13888 func_218954_b + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13907 func_218948_b + m (Ljava/util/function/Function;)Lnet/minecraft/class_3164$class_3167; method_13906 func_218947_a + m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13905 register + m (ILnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13910 func_218944_a + m (Lcom/mojang/brigadier/builder/ArgumentBuilder;Lnet/minecraft/class_3164$class_3166;)V method_13895 func_218924_a + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13892 func_208919_a + m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13899 func_218949_a + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13891 func_218930_e + m (Lnet/minecraft/class_2203$class_2209;Lnet/minecraft/class_3162;)Lnet/minecraft/class_2520; method_13921 func_218928_a + m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13893 func_218929_a + m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13909 func_198944_d + m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13886 func_198935_b + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;Lnet/minecraft/class_2487;)I method_13901 merge + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;)I method_13908 get + m (Ljava/util/function/BiConsumer;Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13922 func_218940_a + m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;Lnet/minecraft/class_2203$class_2209;)I method_13885 remove + m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;Lcom/mojang/brigadier/context/CommandContext;)I method_13913 func_218937_b + m (Ljava/util/function/Function;)Lnet/minecraft/class_3164$class_3167; method_13919 func_218925_b + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_17603 func_218943_a + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13894 func_218927_a + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13918 func_218941_c + m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13889 func_198940_b + m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13915 func_218931_c + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13797 field_218959_i + f Ljava/util/List; field_13798 field_218955_b + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13791 GET_INVALID_EXCEPTION + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13796 NOTHING_CHANGED + f Ljava/util/List; field_13792 field_218956_c + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_17441 field_218960_j + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13793 GET_UNKNOWN_EXCEPTION + f Ljava/util/List; field_13790 DATA_PROVIDERS + f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13795 field_218958_h + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13794 field_218957_g +c net/minecraft/class_3164$class_3165 net/minecraft/command/impl/data/DataCommand$IModificationType + m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I modify modify +c net/minecraft/class_3164$class_3166 net/minecraft/command/impl/data/DataCommand$IModificationSourceArgumentBuilder + m (Lnet/minecraft/class_3164$class_3165;)Lcom/mojang/brigadier/builder/ArgumentBuilder; create create +c net/minecraft/class_3164$class_3167 net/minecraft/command/impl/data/DataCommand$IDataProvider + m (Lcom/mojang/brigadier/builder/ArgumentBuilder;Ljava/util/function/Function;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13925 createArgument + m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_3162; method_13924 createAccessor +c net/minecraft/class_3169 net/minecraft/command/impl/data/EntityDataAccessor + m (Ljava/lang/String;)Lnet/minecraft/class_3164$class_3167; method_13927 func_218922_a + f Lnet/minecraft/class_1297; field_13801 entity + f Ljava/util/function/Function; field_13800 DATA_PROVIDER + f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13799 DATA_ENTITY_INVALID +c net/minecraft/class_3169$1 net/minecraft/command/impl/data/EntityDataAccessor$1 + f Ljava/lang/String; field_13802 field_218920_a +c net/minecraft/class_4580 net/minecraft/command/impl/data/StorageAccessor + m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_22840 func_229838_a_ + m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_4565; method_22839 func_229837_a_ + m ()Lcom/mojang/brigadier/suggestion/SuggestionProvider; method_22843 func_229841_c_ + m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_4565; method_22842 func_229840_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_3164$class_3167; method_22841 func_229839_a_ + f Lnet/minecraft/class_2960; field_20858 field_229836_d_ + f Lnet/minecraft/class_4565; field_20857 field_229835_c_ + f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_20856 field_229834_b_ + f Ljava/util/function/Function; field_20855 field_229833_a_ +c net/minecraft/class_4580$1 net/minecraft/command/impl/data/StorageAccessor$1 + f Ljava/lang/String; field_20859 field_229842_a_ +c net/minecraft/class_3174 net/minecraft/server/dedicated/DedicatedPlayerList + m ()V method_13930 savePlayerBanList + m ()V method_13936 readWhiteList + m ()V method_13935 saveOpsList + m ()V method_13932 saveIPBanList + m ()Lnet/minecraft/class_3176; method_13938 getServer + m ()V method_13934 loadOpsList + m ()V method_13933 loadPlayerBanList + m ()V method_13937 saveWhiteList + m ()V method_13931 loadIPBanList + f Lorg/apache/logging/log4j/Logger; field_13804 LOGGER +c net/minecraft/class_3176 net/minecraft/server/dedicated/DedicatedServer + m ()Ljava/lang/String; method_13943 func_210177_bd + m (Ljava/lang/String;)V method_20799 func_223305_l + m ()V method_13948 setGuiEnabled + m ()V method_13942 sleepFiveSeconds + m ()Lnet/minecraft/class_3174; method_13949 getPlayerList + m (ZLnet/minecraft/class_3806;)Lnet/minecraft/class_3806; method_16711 func_213222_a + m (Ljava/lang/String;Lnet/minecraft/class_2168;)V method_13947 handleConsoleInput + m ()Z method_13951 convertFiles + m (ILnet/minecraft/class_3806;)Lnet/minecraft/class_3806; method_16710 func_213224_a + m (Z)V method_16712 func_213223_o + m ()Lorg/apache/logging/log4j/Logger; method_13940 access$000 + m ()Ljava/lang/String; method_13950 loadResourcePackSHA + m ()Ljava/lang/String; method_13946 func_210178_be + m ()J method_13944 getMaxTickTime + m ()V method_13941 executePendingCommands + f Lnet/minecraft/class_3182; field_16800 serverGui + f Ljava/util/List; field_13815 pendingCommandList + f Lorg/apache/logging/log4j/Logger; field_13814 LOGGER + f Lnet/minecraft/class_3364; field_13816 rconQueryThread + f Ljava/util/regex/Pattern; field_13810 RESOURCE_PACK_SHA1_PATTERN + f Lnet/minecraft/class_3807; field_16799 settings + f Lnet/minecraft/class_3350; field_13811 rconConsoleSource + f Lnet/minecraft/class_3408; field_13819 rconThread +c net/minecraft/class_3176$1 net/minecraft/server/dedicated/DedicatedServer$1 + m ()V run run + f Lnet/minecraft/class_3176; field_13822 field_72451_a +c net/minecraft/class_3806 net/minecraft/server/dedicated/ServerProperties + m (Ljava/lang/Integer;)Ljava/lang/Integer; method_27905 func_241083_a_ + m (Ljava/lang/Integer;)Ljava/lang/Integer; method_16716 func_218987_b + m (Lnet/minecraft/class_5455;Ljava/util/Properties;)Lnet/minecraft/class_3806; method_16713 func_241881_b + m (Ljava/lang/Integer;)Ljava/lang/Integer; method_16715 func_218986_a + m (Lnet/minecraft/class_5455;Ljava/nio/file/Path;)Lnet/minecraft/class_3806; method_16714 func_244380_a + f Ljava/lang/String; field_16820 worldName + f Lnet/minecraft/class_1267; field_16840 difficulty + f Z field_24056 field_241079_P_ + f Z field_16833 allowPvp + f Z field_16806 enableCommandBlock + f J field_16815 maxTickTime + f Z field_16808 field_218993_F + f I field_16845 opPermissionLevel + f I field_16810 maxBuildHeight + f Lnet/minecraft/class_3808$class_3809; field_16804 whitelistEnabled + f Z field_16827 forceGamemode + f Ljava/lang/String; field_16821 resourcePackSha1 + f Z field_16818 enableRcon + f Ljava/lang/String; field_16829 serverIp + f Z field_16819 enableQuery + f I field_16842 networkCompressionThreshold + f I field_16844 viewDistance + f Ljava/lang/String; field_16823 rconPassword + f Z field_16802 broadcastConsoleToOps + f Ljava/lang/String; field_16825 motd + f Z field_16813 onlineMode + f Ljava/lang/Boolean; field_16830 announceAdvancements + f I field_16837 serverPort + f Z field_16807 allowFlight + f Z field_24453 field_241080_Q_ + f Lnet/minecraft/class_1934; field_16841 gamemode + f Z field_16809 spawnNPCs + f Z field_23785 field_241078_O_ + f Z field_16811 allowNether + f Lnet/minecraft/class_3808$class_3809; field_16817 playerIdleTimeout + f Z field_16832 useNativeTransport + f I field_25802 rateLimit + f I field_16831 queryPort + f Z field_16835 spawnMonsters + f I field_20324 functionPermissionLevel + f Z field_16805 enforceWhitelist + f Lnet/minecraft/class_5285; field_24623 field_241082_U_ + f I field_16816 spawnProtection + f I field_16812 maxWorldSize + f Ljava/lang/String; field_16834 resourcePackHash + f I field_16814 maxPlayers + f I field_16828 rconPort + f Z field_16838 hardcore + f Ljava/lang/String; field_16801 resourcePack + f Z field_16836 spawnAnimals + f Z field_16824 broadcastRconToOps + f I field_24454 field_241081_R_ + f Z field_16839 preventProxyConnections +c net/minecraft/class_3807 net/minecraft/server/ServerPropertiesProvider + m ()Lnet/minecraft/class_3806; method_16717 getProperties + m ()V method_16719 save + m (Ljava/util/function/UnaryOperator;)Lnet/minecraft/class_3807; method_16718 func_219033_a + f Ljava/nio/file/Path; field_16846 propertiesPath + f Lnet/minecraft/class_3806; field_16847 properties +c net/minecraft/class_3178 net/minecraft/server/dedicated/ServerHangWatchdog + m ()V run run + m ()V method_13954 scheduleHalt + f Lnet/minecraft/class_3176; field_13823 server + f Lorg/apache/logging/log4j/Logger; field_13825 LOGGER + f J field_13824 maxTickTime +c net/minecraft/class_3178$1 net/minecraft/server/dedicated/ServerHangWatchdog$1 + m ()V run run + f Lnet/minecraft/class_3178; field_13826 field_180252_a +c net/minecraft/class_3808 net/minecraft/server/dedicated/PropertyManager + m (Ljava/nio/file/Path;)V method_16728 save + m (Ljava/lang/String;)Ljava/lang/Boolean; method_16736 func_218978_b + m (Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/Function;Ljava/lang/Object;)Ljava/lang/Object; method_16741 func_218983_a + m (Ljava/util/function/IntFunction;Ljava/util/function/Function;Ljava/lang/String;)Ljava/lang/Object; method_16729 func_218971_a + m (Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/Function;Ljava/lang/Object;)Lnet/minecraft/class_3808$class_3809; method_16724 func_218981_b + m (Ljava/lang/String;I)Lnet/minecraft/class_3808$class_3809; method_16743 func_218974_b + m (Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/UnaryOperator;Ljava/util/function/Function;Ljava/lang/Object;)Ljava/lang/Object; method_16735 func_218977_a + m (Ljava/lang/String;Ljava/util/function/UnaryOperator;I)I method_16720 func_218962_a + m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_16732 registerString + m (Ljava/lang/String;Ljava/util/function/Function;Ljava/lang/Object;)Lnet/minecraft/class_3808$class_3809; method_16730 func_218965_b + m ()Ljava/util/Properties; method_16723 func_218966_a + m (Lnet/minecraft/class_5455;Ljava/util/Properties;)Lnet/minecraft/class_3808; method_16739 func_241881_b + m (Ljava/nio/file/Path;)Ljava/util/Properties; method_16727 load + m (Ljava/util/function/Function;Ljava/util/function/UnaryOperator;Ljava/lang/String;)Ljava/lang/Object; method_16731 func_218972_a + m (Ljava/lang/String;Ljava/util/function/Function;Ljava/lang/Object;)Ljava/lang/Object; method_16737 func_218979_a + m (Ljava/util/function/Function;Ljava/lang/String;)Ljava/lang/Number; method_16733 func_218975_a + m (Ljava/lang/String;)Ljava/lang/String; method_16734 getStringValue + m (Ljava/util/function/Function;)Ljava/util/function/Function; method_16721 safeParseNumber + m (Ljava/util/function/IntFunction;Ljava/util/function/Function;)Ljava/util/function/Function; method_16722 enumConverter + m (Ljava/lang/String;I)I method_16726 registerInt + m (Ljava/lang/String;)Ljava/lang/String; method_16738 func_218980_a + m (Ljava/lang/String;Z)Lnet/minecraft/class_3808$class_3809; method_16744 func_218961_b + m (Ljava/lang/String;Ljava/util/function/Function;)Ljava/lang/Object; method_16742 func_218984_a + m (Ljava/lang/String;Z)Z method_16740 registerBool + m (Ljava/lang/String;J)J method_16725 func_218967_a + f Lorg/apache/logging/log4j/Logger; field_16849 LOGGER + f Ljava/util/Properties; field_16848 serverProperties +c net/minecraft/class_3808$1 net/minecraft/server/dedicated/PropertyManager$1 +c net/minecraft/class_3808$class_3809 net/minecraft/server/dedicated/PropertyManager$Property + m (Lnet/minecraft/class_5455;Ljava/lang/Object;)Lnet/minecraft/class_3808; method_16745 func_244381_a + m ()Ljava/lang/Object; get get + f Ljava/util/function/Function; field_16851 field_219042_d + f Ljava/lang/Object; field_16850 field_219041_c + f Ljava/lang/String; field_16852 name + f Lnet/minecraft/class_3808; field_16853 field_219039_a +c net/minecraft/class_3182 net/minecraft/server/gui/MinecraftServerGui + m ()Ljavax/swing/JComponent; method_13973 getLogComponent + m ()V method_16750 func_219050_b + m (Ljavax/swing/JTextArea;Ljavax/swing/JScrollPane;Ljava/lang/String;)V method_13970 appendLine + m (Ljavax/swing/JTextArea;Ljavax/swing/JScrollPane;Ljava/lang/String;)V method_13971 func_210463_b + m ()Ljavax/swing/JComponent; method_13975 getPlayerListComponent + m (Ljava/lang/Runnable;)V method_16746 func_219045_a + m ()V method_13974 start + m (Lnet/minecraft/class_3176;)Lnet/minecraft/class_3182; method_13969 func_219048_a + m (Lnet/minecraft/class_3182;)V method_16749 func_219049_b + m (Ljavax/swing/JTextArea;Ljavax/swing/JScrollPane;)V method_13972 func_210464_a + m (Lnet/minecraft/class_3182;)Ljava/util/concurrent/atomic/AtomicBoolean; method_16748 func_219047_a + m ()V method_16747 func_219046_f + m (Ljavax/swing/JTextField;Ljava/awt/event/ActionEvent;)V method_13977 func_210465_a + m ()Ljavax/swing/JComponent; method_13976 getStatsComponent + f Ljava/util/Collection; field_16855 field_219051_e + f Ljava/awt/Font; field_13837 SERVER_GUI_FONT + f Lnet/minecraft/class_3176; field_13839 server + f Ljava/util/concurrent/atomic/AtomicBoolean; field_16854 field_219052_f + f Lorg/apache/logging/log4j/Logger; field_13840 LOGGER + f Ljava/lang/Thread; field_13838 field_206932_d +c net/minecraft/class_3182$2 net/minecraft/server/gui/MinecraftServerGui$2 + m (Ljava/awt/event/FocusEvent;)V focusGained focusGained + f Lnet/minecraft/class_3182; field_13842 field_120024_b +c net/minecraft/class_3182$1 net/minecraft/server/gui/MinecraftServerGui$1 + m (Ljava/awt/event/WindowEvent;)V windowClosing windowClosing + f Lnet/minecraft/class_3176; field_13841 field_120023_a + f Ljavax/swing/JFrame; field_16856 field_219044_b + f Lnet/minecraft/class_3182; field_16857 field_219043_a +c net/minecraft/class_3184 net/minecraft/server/gui/PlayerListComponent + m ()V method_18700 tick + f I field_13843 ticks + f Lnet/minecraft/server/MinecraftServer; field_13844 server +c net/minecraft/class_3186 net/minecraft/server/gui/StatsComponent + m ([J)D method_13980 mean + m ()V method_16751 func_219053_a + m (Ljava/awt/Graphics;)V paint paint + m (Ljava/awt/event/ActionEvent;)V method_13983 func_210466_a + m (Ljava/text/DecimalFormat;)V method_13981 func_212730_a + m ()V method_13982 tick + f Ljava/text/DecimalFormat; field_13846 FORMATTER + f [I field_13845 values + f [Ljava/lang/String; field_13847 msgs + f I field_13848 vp + f Ljavax/swing/Timer; field_16858 field_219054_f + f Lnet/minecraft/server/MinecraftServer; field_13849 server +c net/minecraft/class_3191 net/minecraft/client/renderer/DestroyBlockProgress + m (Lnet/minecraft/class_3191;)I method_23269 compareTo + m ()I hashCode hashCode + m ()I method_13990 getCreationCloudUpdateTick + m (Ljava/lang/Object;)I compareTo compareTo + m ()I method_13988 getPartialBlockDamage + m (I)V method_13989 setCloudUpdateTick + m ()Lnet/minecraft/class_2338; method_13991 getPosition + m (I)V method_13987 setPartialBlockDamage + m (Ljava/lang/Object;)Z equals equals + f I field_13857 createdAtCloudUpdateTick + f I field_13858 partialBlockProgress + f I field_13859 miningPlayerEntId + f Lnet/minecraft/class_2338; field_13860 position +c net/minecraft/class_3193 net/minecraft/world/server/ChunkHolder + m (I)Lnet/minecraft/class_2806; method_14011 getChunkStatusFromLevel + m ()Ljava/util/concurrent/CompletableFuture; method_14000 func_219302_f + m (Lnet/minecraft/class_2596;Lnet/minecraft/class_3222;)V method_13996 func_219304_a + m (Lnet/minecraft/class_2338;)V method_14002 func_244386_a + m (Lnet/minecraft/class_2821;)V method_20456 func_219294_a + m ()Ljava/util/concurrent/CompletableFuture; method_20725 getBorderFuture + m ()Ljava/util/concurrent/CompletableFuture; method_16145 getTickingFuture + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3898;)Ljava/util/concurrent/CompletableFuture; method_13993 func_219276_a + m (I)V method_17207 func_219275_d + m ()Lnet/minecraft/class_2818; method_16144 getChunkIfComplete + m (I)Lnet/minecraft/class_3193$class_3194; method_14008 getLocationTypeFromLevel + m (Lnet/minecraft/class_3898;)V method_14007 processUpdates + m (Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; method_16146 func_219301_a + m (Lnet/minecraft/class_1944;I)V method_14012 markLightChanged + m (Lnet/minecraft/class_3193;)Lnet/minecraft/class_1923; method_17206 func_219290_a + m (Lnet/minecraft/class_2791;Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_2791; method_16147 func_219295_a + m ()I method_14005 getChunkLevel + m ()Lnet/minecraft/class_2806; method_23270 func_219285_d + m (Lnet/minecraft/class_2818;)V method_14006 sendChanges + m (Lnet/minecraft/class_2596;Z)V method_13992 sendToTracking + m ()Z method_20384 isAccessible + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_30312 func_244387_b + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_14009 sendTileEntity + m ()Lnet/minecraft/class_3193$class_3194; method_23271 func_219300_g + m (Ljava/util/concurrent/CompletableFuture;)V method_16143 chain + m (I)V method_15890 setChunkLevel + m (Lnet/minecraft/class_2791;)Lnet/minecraft/class_2791; method_16142 func_219283_a + m ()Ljava/util/concurrent/CompletableFuture; method_14003 getEntityTickingFuture + m ()Lnet/minecraft/class_1923; method_13994 getPosition + m (Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; method_21737 func_225410_b + m ()I method_17208 func_219281_j + m ()Lnet/minecraft/class_2791; method_14010 func_219287_e + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_30311 func_244385_a + m (Lnet/minecraft/class_2791;Lnet/minecraft/class_3193$class_3724;)Lnet/minecraft/class_2791; method_16148 func_219288_a + m ()V method_20385 updateAccessible + m (Lnet/minecraft/class_3898;Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_20457 func_222982_a + f Lnet/minecraft/class_3193$class_3897; field_17210 playerProvider + f Ljava/util/concurrent/atomic/AtomicReferenceArray; field_16425 field_219312_g + f Ljava/util/concurrent/CompletableFuture; field_13865 entityTickingFuture + f Z field_26744 field_244384_x + f Lnet/minecraft/class_1923; field_13864 pos + f Ljava/util/concurrent/CompletableFuture; field_16431 borderFuture + f Ljava/util/concurrent/CompletableFuture; field_16430 MISSING_CHUNK_FUTURE + f Ljava/util/concurrent/CompletableFuture; field_16429 UNLOADED_CHUNK_FUTURE + f I field_13862 chunkLevel + f I field_13870 skyLightChangeMask + f Ljava/util/concurrent/CompletableFuture; field_16428 field_219315_j + f Lcom/mojang/datafixers/util/Either; field_16426 MISSING_CHUNK + f Lcom/mojang/datafixers/util/Either; field_16427 UNLOADED_CHUNK + f Lnet/minecraft/class_3568; field_13863 lightManager + f Ljava/util/concurrent/CompletableFuture; field_19333 tickingFuture + f [Lnet/minecraft/class_3193$class_3194; field_13873 LOCATION_TYPES + f Z field_19238 accessible + f Lnet/minecraft/class_3193$class_3896; field_17209 field_219327_v + f Ljava/util/List; field_13868 CHUNK_STATUS_LIST + f I field_17208 field_219318_m + f I field_16432 prevChunkLevel + f [Lit/unimi/dsi/fastutil/shorts/ShortSet; field_25804 field_244383_q + f Z field_25803 field_244382_p + f I field_13871 blockLightChangeMask +c net/minecraft/class_3193$class_3897 net/minecraft/world/server/ChunkHolder$IPlayerProvider + m (Lnet/minecraft/class_1923;Z)Ljava/util/stream/Stream; method_17210 getTrackingPlayers +c net/minecraft/class_3193$class_3724 net/minecraft/world/server/ChunkHolder$IChunkLoadingError + f Lnet/minecraft/class_3193$class_3724; field_16433 UNLOADED +c net/minecraft/class_3193$class_3724$1 net/minecraft/world/server/ChunkHolder$IChunkLoadingError$1 + m ()Ljava/lang/String; toString toString +c net/minecraft/class_3193$class_3896 net/minecraft/world/server/ChunkHolder$IListener + m (Lnet/minecraft/class_1923;Ljava/util/function/IntSupplier;ILjava/util/function/IntConsumer;)V method_17209 func_219066_a +c net/minecraft/class_3193$class_3194 net/minecraft/world/server/ChunkHolder$LocationType + m (Ljava/lang/String;)Lnet/minecraft/class_3193$class_3194; valueOf valueOf + m (Lnet/minecraft/class_3193$class_3194;)Z method_14014 isAtLeast + m ()[Lnet/minecraft/class_3193$class_3194; values values + f [Lnet/minecraft/class_3193$class_3194; field_13878 $VALUES + f Lnet/minecraft/class_3193$class_3194; field_19334 INACCESSIBLE + f Lnet/minecraft/class_3193$class_3194; field_13875 TICKING + f Lnet/minecraft/class_3193$class_3194; field_13876 BORDER + f Lnet/minecraft/class_3193$class_3194; field_13877 ENTITY_TICKING +c net/minecraft/class_3193$1 net/minecraft/world/server/ChunkHolder$1 + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_3193; field_17211 field_219056_a +c net/minecraft/class_3898 net/minecraft/world/server/ChunkManager + m (Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_20577 func_222976_a_ + m (Lnet/minecraft/class_1923;)Ljava/lang/String; method_23272 getDebugInfo + m (J)Lnet/minecraft/class_3193; method_17216 func_219219_b + m (Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; method_20617 chunkGenerate + m (Ljava/util/function/BooleanSupplier;)V method_20605 scheduleUnloads + m (I)Lnet/minecraft/class_2806; method_17245 func_219172_b_ + m (Lnet/minecraft/class_2791;)Z method_20582 func_222952_e + m (Lnet/minecraft/class_2818;)Ljava/lang/String; method_21678 func_225408_c_ + m (Lnet/minecraft/class_3898;)I method_18725 func_219182_c + m (Lnet/minecraft/class_3193$class_3724;)Ljava/lang/String; method_21677 func_225400_a_ + m (Ljava/util/concurrent/CompletableFuture;)Ljava/lang/String; method_21676 func_225402_a + m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)V method_19486 func_219202_b_ + m ()Z method_17244 refreshOffThreadCache + m (Lnet/minecraft/class_3222;Z)V method_18714 setPlayerTracking + m (Ljava/io/Writer;)V method_21619 func_225406_a + m (Ljava/util/List;)Lnet/minecraft/class_2818; method_17232 func_219238_b + m (IIILjava/util/List;)Lcom/mojang/datafixers/util/Either; method_17215 func_219227_a + m (Lnet/minecraft/class_3222;)Z method_18722 cannotGenerateChunks + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3222;Z)I method_18719 func_219215_b + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3193$class_3724;)Ljava/util/concurrent/CompletableFuture; method_20440 func_219211_a_ + m (Lnet/minecraft/class_2791;)Ljava/util/Optional; method_21620 func_225407_b_ + m (Lnet/minecraft/class_3193;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20618 func_223175_b + m (Lnet/minecraft/class_2818;)Ljava/util/concurrent/CompletableFuture; method_20576 func_222973_a + m (Z)V method_17242 save + m (Lnet/minecraft/class_2806;I)Lnet/minecraft/class_2806; method_17248 func_219195_b + m (Lnet/minecraft/class_3193;Ljava/lang/Void;Ljava/lang/Throwable;)V method_20604 func_223171_a + m ()Z method_20606 func_223161_i + m (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; method_17226 func_219200_b + m ()I method_17253 func_219174_c + m (Lnet/minecraft/class_1923;)Lcom/mojang/datafixers/util/Either; method_17256 func_223170_j + m (Lnet/minecraft/class_2806;Lnet/minecraft/class_1923;Lnet/minecraft/class_3193;Lcom/mojang/datafixers/util/Either;)Ljava/util/concurrent/CompletionStage; method_20616 func_223180_a + m (Lnet/minecraft/class_1923;Lcom/mojang/datafixers/util/Either;)V method_18194 func_219176_a_ + m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)V method_19487 func_219230_c_ + m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_4076; method_20726 func_223489_c + m ()Lnet/minecraft/class_3227; method_17212 getLightManager + m (Lnet/minecraft/class_2791;)Z method_17228 chunkSave + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3222;)Z method_18705 func_219201_a_ + m (Lnet/minecraft/class_3222;)V method_18713 updatePlayerPosition + m (JLnet/minecraft/class_3193;)V method_20458 scheduleSave + m (Lnet/minecraft/class_3193;Lnet/minecraft/class_2791;)Lnet/minecraft/class_2791; method_17227 func_219237_a_ + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;Ljava/util/List;)Ljava/util/concurrent/CompletableFuture; method_17225 func_223148_a_ + m (J)Ljava/util/function/IntSupplier; method_17604 func_219191_c + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2596;)V method_18702 sendToAllTracking + m (Lnet/minecraft/class_2818;)V method_20461 func_230207_b_ + m ()V method_18727 tickEntityTracker + m (Lnet/minecraft/class_3193;Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_20460 func_219193_a_ + m (Lorg/apache/commons/lang3/mutable/MutableBoolean;Lnet/minecraft/class_2791;)V method_20578 func_222959_a + m (Lnet/minecraft/class_1923;)Ljava/util/concurrent/CompletableFuture; method_20619 chunkLoad + m (Lnet/minecraft/class_1923;ZLnet/minecraft/class_3222;)Z method_18707 func_219192_a_ + m (Lnet/minecraft/class_3222;[Lnet/minecraft/class_2596;Lnet/minecraft/class_2818;)V method_18715 sendChunkData + m (Lnet/minecraft/class_2806;I)Lnet/minecraft/class_2806; method_17229 func_219205_a + m (Ljava/util/List;)Lcom/mojang/datafixers/util/Either; method_18711 func_219208_a_ + m ()I method_17260 getLoadedChunkCount + m (Lnet/minecraft/class_1923;)Ljava/util/concurrent/CompletableFuture; method_17247 func_219188_b + m (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; method_20580 func_222961_b + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1923;[Lnet/minecraft/class_2596;ZZ)V method_17241 setChunkLoadedAtClient + m ()Lnet/minecraft/class_4153; method_19488 getPointOfInterestManager + m (Lnet/minecraft/class_3898;)Lit/unimi/dsi/fastutil/longs/LongSet; method_17238 func_219203_a + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;Lcom/mojang/datafixers/util/Either;)Ljava/util/concurrent/CompletionStage; method_17224 func_219235_a_ + m (Lnet/minecraft/class_1923;ILjava/util/function/IntFunction;)Ljava/util/concurrent/CompletableFuture; method_17220 func_219236_a + m (Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_17230 func_219242_b + m (Lnet/minecraft/class_1923;I[Lnet/minecraft/class_2596;Lnet/minecraft/class_3222;)V method_17219 func_219224_a_ + m (Lnet/minecraft/class_1923;)Z method_27055 func_241090_h_ + m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)V method_17252 func_219228_d_ + m (Lnet/minecraft/class_2818;)Ljava/lang/Integer; method_21622 func_225401_d + m (Lnet/minecraft/class_3898;JILnet/minecraft/class_3193;I)Lnet/minecraft/class_3193; method_17240 func_219240_a + m (Lnet/minecraft/class_1297;)V method_18716 untrack + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2806$class_2808;)B method_27053 func_241088_a_ + m (Lnet/minecraft/class_3898;)Lnet/minecraft/class_3218; method_18721 func_219181_b + m (Lnet/minecraft/class_3193;)V method_20583 func_222965_e + m (Lnet/minecraft/class_3193;)Lnet/minecraft/class_2791; method_20584 func_222974_f + m ()Lnet/minecraft/class_3898$class_3216; method_17263 getTicketManager + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2596;)V method_18717 sendToTrackingAndSelf + m (Lnet/minecraft/class_1923;)Z method_18724 isOutsideSpawningRadius + m (Lnet/minecraft/class_1923;)Ljava/lang/String; method_20442 func_230218_h_ + m (Lnet/minecraft/class_2806;)Ljava/lang/String; method_24308 func_230197_a_ + m ([Lnet/minecraft/class_2596;Lnet/minecraft/class_2818;Lnet/minecraft/class_3222;)V method_17243 func_219233_a_ + m (Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; method_17236 func_219244_a + m (Ljava/util/function/BooleanSupplier;)V method_17233 tick + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2818;)Lcom/mojang/datafixers/util/Either; method_18193 func_219196_a_ + m (Lnet/minecraft/class_3193;Ljava/util/concurrent/CompletableFuture;JLnet/minecraft/class_2791;)V method_18843 func_219185_a + m (J)Lnet/minecraft/class_3193; method_17255 func_219220_a + m (Lnet/minecraft/class_2818;)Ljava/lang/Integer; method_21621 func_225405_d_ + m (Lnet/minecraft/class_2791;)Lnet/minecraft/class_2818; method_20581 func_222955_c_ + m (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; method_17235 func_219179_a + m (Lnet/minecraft/class_1923;II)I method_18703 getChunkDistance + m (I)Lnet/minecraft/class_2806; method_17254 func_219218_b + m (I)V method_17214 setViewDistance + m (J)I method_17605 func_219223_d + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_1297;)D method_18704 getDistanceSquaredToChunk + m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)V method_17259 func_219216_e_ + m (Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_17222 func_219239_b_ + m ()Ljava/lang/Iterable; method_17264 getLoadedChunksIterable + m (Lnet/minecraft/class_1297;)V method_18701 track + m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)V method_20579 func_222962_a_ + m (Lnet/minecraft/class_1923;)V method_20443 func_230219_i_ + m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_17979 loadChunkData + m (JILnet/minecraft/class_3193;I)Lnet/minecraft/class_3193; method_17217 setChunkLevel + m (Lnet/minecraft/class_1923;)V method_20441 func_219209_c + m (Lnet/minecraft/class_1923;)V method_27054 func_241089_g_ + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3222;Z)I method_18706 func_219173_a + m (Lnet/minecraft/class_3193;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_19534 func_222954_b_ + m (Lnet/minecraft/class_3193;)Lnet/minecraft/class_3193$class_3194; method_17251 func_230215_d_ + f I field_18239 MAX_LOADED_LEVEL + f Ljava/util/concurrent/atomic/AtomicInteger; field_17230 field_219268_v + f Lnet/minecraft/class_4153; field_18808 pointOfInterestManager + f Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; field_18807 chunksToUnload + f Ljava/util/Queue; field_19343 saveTasks + f Lnet/minecraft/class_3485; field_17706 templateManager + f Lnet/minecraft/class_3227; field_17215 lightManager + f Ljava/util/function/Supplier; field_17705 field_219259_m + f Lnet/minecraft/class_3210; field_18241 playerGenerationTracker + f Lnet/minecraft/class_3906; field_17226 field_219265_s + f Ljava/io/File; field_17707 dimensionDirectory + f Lit/unimi/dsi/fastutil/longs/LongSet; field_17221 unloadableChunks + f Lnet/minecraft/class_1255; field_17216 mainThread + f Lnet/minecraft/class_3900; field_17223 field_219263_q + f Lnet/minecraft/class_3906; field_17224 field_219264_r + f Lnet/minecraft/class_3898$class_3216; field_17228 ticketManager + f Lit/unimi/dsi/fastutil/longs/Long2ByteMap; field_23786 field_241087_z_ + f Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; field_17213 loadedChunks + f Lit/unimi/dsi/fastutil/longs/LongSet; field_18307 loadedPositions + f Lorg/apache/logging/log4j/Logger; field_17212 LOGGER + f Lnet/minecraft/class_2794; field_17218 generator + f Lnet/minecraft/class_3949; field_17442 field_219266_t + f Z field_17222 immutableLoadedChunksDirty + f Lnet/minecraft/class_3218; field_17214 world + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_18242 entities + f I field_18243 viewDistance + f Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; field_17220 immutableLoadedChunks +c net/minecraft/class_3898$class_3208 net/minecraft/world/server/ChunkManager$EntityTracker + m ()I method_22844 func_229843_b_ + m ()I hashCode hashCode + m (Lnet/minecraft/class_3898$class_3208;)Lnet/minecraft/class_3231; method_18737 func_219393_c + m ()V method_18728 removeAllTrackers + m (Lnet/minecraft/class_3222;)V method_18736 updateTrackingState + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_3898$class_3208;)Lnet/minecraft/class_1297; method_18731 func_219394_a + m (Lnet/minecraft/class_2596;)V method_18734 sendToTrackingAndSelf + m (Lnet/minecraft/class_3898$class_3208;)Lnet/minecraft/class_4076; method_18735 func_219398_b + m (I)I method_27906 func_241091_a_ + m (Ljava/util/List;)V method_18729 updateTrackingState + m (Lnet/minecraft/class_2596;)V method_18730 sendToAllTracking + m (Lnet/minecraft/class_3898$class_3208;Lnet/minecraft/class_4076;)Lnet/minecraft/class_4076; method_18732 func_219395_a + m (Lnet/minecraft/class_3222;)V method_18733 removeTracker + f Lnet/minecraft/class_3898; field_18245 field_219401_a + f Ljava/util/Set; field_18250 trackingPlayers + f Lnet/minecraft/class_1297; field_18247 entity + f Lnet/minecraft/class_3231; field_18246 entry + f Lnet/minecraft/class_4076; field_18249 pos + f I field_18248 range +c net/minecraft/class_3898$class_3216 net/minecraft/world/server/ChunkManager$ProxyTicketManager + f Lnet/minecraft/class_3898; field_17443 field_219390_a +c net/minecraft/class_3898$2 net/minecraft/world/server/ChunkManager$2 + m ()Ljava/lang/String; toString toString + f Lcom/mojang/datafixers/util/Either; field_17237 field_219063_f + f I field_17234 field_219060_c + f I field_17235 field_219061_d + f Lnet/minecraft/class_3898; field_17238 field_219064_g + f I field_17233 field_219059_a + f I field_17236 field_219062_e +c net/minecraft/class_3898$1 net/minecraft/world/server/ChunkManager$1 + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_1923; field_17231 field_219057_a + f Lnet/minecraft/class_3898; field_17232 field_219058_c +c net/minecraft/class_3899 net/minecraft/world/chunk/ChunkTaskPriorityQueue + m ()Lit/unimi/dsi/fastutil/longs/LongSet; method_21679 getLoadedChunks + m (ILnet/minecraft/class_1923;I)V method_17272 func_219407_a + m ()Ljava/util/stream/Stream; method_17606 func_219417_a + m (Ljava/util/Optional;JI)V method_17274 addTaskToChunk + m (J)V method_17612 func_219414_c + m (JZ)V method_17609 clearChunkFromQueue + m (I)Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; method_17271 func_219415_a + m (J)Ljava/util/List; method_17273 func_219410_d + m (JLjava/util/Optional;)Lcom/mojang/datafixers/util/Either; method_17608 func_219408_a + m (J)Lcom/mojang/datafixers/util/Either; method_17611 func_219409_b + m (Ljava/util/Optional;)Z method_17610 func_219413_a + m (J)Ljava/lang/Runnable; method_17607 func_219418_a + m ()Ljava/lang/String; toString toString + m (J)Ljava/util/List; method_17277 func_219411_e + f Lit/unimi/dsi/fastutil/longs/LongSet; field_17444 loadedChunks + f Ljava/util/List; field_17243 chunkPriorityQueue + f I field_17445 priority + f Ljava/lang/String; field_17247 queueName + f I field_17244 maxLoaded + f I field_17241 MAX_LOADED_LEVELS +c net/minecraft/class_3900 net/minecraft/world/chunk/ChunkTaskPriorityQueueSorter + m ()V close close + m (Ljava/lang/Long;)Ljava/lang/String; method_21681 func_225398_a + m (Ljava/util/function/IntSupplier;Lnet/minecraft/class_1923;ILjava/util/function/IntConsumer;)V method_17285 func_219085_a + m (Lnet/minecraft/class_3906;Lcom/mojang/datafixers/util/Either;)Ljava/util/concurrent/CompletableFuture; method_17619 func_219092_a + m (Lnet/minecraft/class_3906;JZLjava/lang/Runnable;)V method_17616 func_219082_a + m (Lnet/minecraft/class_3899;Lnet/minecraft/class_3906;)V method_17630 func_219078_a + m (Lnet/minecraft/class_3906;ZLnet/minecraft/class_3900$class_3946;)V method_17624 func_219071_a + m (Lnet/minecraft/class_3906;Lnet/minecraft/class_3906;)Lnet/minecraft/class_3847$class_3907; method_17617 func_219080_a + m (Lnet/minecraft/class_3899;Lnet/minecraft/class_3906;)V method_17635 func_219079_b + m (Ljava/lang/Runnable;Lnet/minecraft/class_3906;)Ljava/lang/Runnable; method_17628 func_219072_a + m (Lnet/minecraft/class_3899;Lnet/minecraft/class_3906;Ljava/util/List;)V method_17631 func_219088_a + m (Lnet/minecraft/class_3906;Lnet/minecraft/class_3906;Z)V method_17618 func_219090_a + m (ILnet/minecraft/class_3906;)Lnet/minecraft/class_3899; method_17613 func_219084_a + m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)Lnet/minecraft/class_3900$class_3946; method_17629 func_219081_a + m (ILnet/minecraft/class_1923;ILnet/minecraft/class_3899;)V method_17280 func_219076_a + m (Lnet/minecraft/class_3906;JLjava/lang/Runnable;Z)V method_17615 func_219074_a + m (Ljava/lang/Runnable;JZ)Lnet/minecraft/class_3900$class_3947; method_17627 func_219073_a + m (Lnet/minecraft/class_3906;Z)Lnet/minecraft/class_3906; method_17622 func_219087_a + m (Lnet/minecraft/class_3906;Lnet/minecraft/class_3906;)V method_17633 func_219089_b + m (Ljava/util/Map$Entry;)Ljava/lang/String; method_21682 func_225397_a + m (Lnet/minecraft/class_3906;Lnet/minecraft/class_3900$class_3947;)V method_17621 func_219075_a + m ()Ljava/lang/String; method_21680 func_225396_a + m (Ljava/lang/Runnable;Lnet/minecraft/class_3906;)V method_17634 func_219083_b + m (Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture; method_17625 func_219077_a + m (Lnet/minecraft/class_3906;)Lnet/minecraft/class_3899; method_17632 getQueue + m (Ljava/lang/Runnable;JLjava/util/function/IntSupplier;)Lnet/minecraft/class_3900$class_3946; method_17626 func_219069_a + m (Lnet/minecraft/class_3906;Ljava/util/function/Function;JLjava/util/function/IntSupplier;Z)V method_17282 func_219067_a + m (Lnet/minecraft/class_3906;Ljava/util/function/IntSupplier;JLjava/util/function/Function;Z)V method_17620 func_219070_a + m (Lnet/minecraft/class_3906;)Lnet/minecraft/class_3906; method_17614 func_219091_a + m (Lnet/minecraft/class_3906;ZLnet/minecraft/class_3906;)Lnet/minecraft/class_3847$class_3907; method_17623 func_219086_a + f Lnet/minecraft/class_3846; field_17251 sorter + f Ljava/util/Set; field_17250 field_219095_c + f Ljava/util/Map; field_17249 queues + f Lorg/apache/logging/log4j/Logger; field_17248 LOGGER +c net/minecraft/class_3900$class_3947 net/minecraft/world/chunk/ChunkTaskPriorityQueueSorter$RunnableEntry + m (Lnet/minecraft/class_3900$class_3947;)Ljava/lang/Runnable; method_17640 func_219431_b + m (Lnet/minecraft/class_3900$class_3947;)Z method_17641 func_219432_c + m (Lnet/minecraft/class_3900$class_3947;)J method_17639 func_219433_a + f J field_17450 field_219435_b + f Ljava/lang/Runnable; field_17449 field_219434_a + f Z field_17451 field_219436_c +c net/minecraft/class_3900$class_3946 net/minecraft/world/chunk/ChunkTaskPriorityQueueSorter$FunctionEntry + m (Lnet/minecraft/class_3900$class_3946;)Ljava/util/function/Function; method_17636 func_219425_a + m (Lnet/minecraft/class_3900$class_3946;)J method_17637 func_219427_b + m (Lnet/minecraft/class_3900$class_3946;)Ljava/util/function/IntSupplier; method_17638 func_219426_c + f Ljava/util/function/IntSupplier; field_17448 field_219430_c + f J field_17447 chunkPos + f Ljava/util/function/Function; field_17446 task +c net/minecraft/class_3900$1 net/minecraft/world/chunk/ChunkTaskPriorityQueueSorter$1 +c net/minecraft/class_3196 net/minecraft/world/chunk/ChunkDistanceGraph + m (JIZ)V method_14027 updateSourceLevel + m (J)I method_14028 getSourceLevel +c net/minecraft/class_2265 net/minecraft/util/math/ColumnPos + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/String; toString toString + f I field_10707 z + f I field_10708 x +c net/minecraft/class_3201 net/minecraft/server/management/DemoPlayerInteractionManager + m ()V method_14031 sendDemoReminder + f Z field_13889 demoTimeExpired + f Z field_13890 displayedIntro + f I field_13887 gameModeTicks + f I field_13888 demoEndedReminder +c net/minecraft/class_3204 net/minecraft/world/server/TicketManager + m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_20444 releaseWithLevel + m (Lnet/minecraft/class_3228;)Z method_14040 func_219369_a + m ()I method_17649 func_223501_d + m ()V method_14045 tick + m (Lnet/minecraft/class_3204;JLnet/minecraft/class_3228;)V method_17644 func_229845_a_ + m (J)Z method_20800 isOutsideSpawningRadius + m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_17292 release + m (Lnet/minecraft/class_3204;)Lnet/minecraft/class_3900; method_17651 func_229847_d_ + m (JLnet/minecraft/class_3228;)V method_17645 release + m (I)V method_14049 setViewDistance + m ()Ljava/lang/String; method_21683 func_225412_c + m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3222;)V method_14051 removePlayer + m (Lnet/minecraft/class_3898;Lnet/minecraft/class_3193;)V method_15891 func_219343_a + m (J)Lnet/minecraft/class_4706; method_14041 func_229851_g_ + m (Lnet/minecraft/class_3204;)Ljava/util/concurrent/Executor; method_17653 func_229849_e_ + m (J)Lnet/minecraft/class_4706; method_14050 getTicketSet + m (JILnet/minecraft/class_3193;I)Lnet/minecraft/class_3193; method_14053 setChunkLevel + m (J)V method_17656 func_219342_h + m (Lnet/minecraft/class_3204;)Lnet/minecraft/class_3906; method_17650 func_223493_c + m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_17291 register + m (J)Z method_14035 contains + m (Lnet/minecraft/class_3228;)Z method_14037 func_219370_b + m (J)Ljava/lang/String; method_21623 func_225413_c + m (Lnet/minecraft/class_3204;JLnet/minecraft/class_3228;)V method_17647 func_223500_a + m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_17290 registerWithLevel + m (Lnet/minecraft/class_3204;)Lit/unimi/dsi/fastutil/longs/LongSet; method_17654 func_229850_f_ + m (JLnet/minecraft/class_3228;)V method_14042 register + m (J)Lnet/minecraft/class_3193; method_14038 getChunkHolder + m (JLcom/mojang/datafixers/util/Either;)V method_17642 func_219363_a + m (Lnet/minecraft/class_4706;)I method_14046 getLevel + m ()I method_14052 getSpawningChunksCount + m (Lnet/minecraft/class_3898;)Z method_15892 processUpdates + m (Lnet/minecraft/class_3204;)Ljava/util/Set; method_18745 func_229853_h_ + m (Lnet/minecraft/class_3204;)Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; method_17643 func_219330_a + m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3222;)V method_14048 updatePlayerPosition + m (J)Lit/unimi/dsi/fastutil/objects/ObjectSet; method_17655 func_219361_f + m (Lnet/minecraft/class_3204;)Lnet/minecraft/class_3906; method_17648 func_229846_b_ + m ()V method_17652 func_219348_f + m (Lnet/minecraft/class_1923;Z)V method_14036 forceChunk + m (Lnet/minecraft/class_3204;)Lit/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap; method_18744 func_229852_g_ + f Lit/unimi/dsi/fastutil/longs/LongSet; field_17459 chunkPositions + f I field_17452 PLAYER_TICKET_LEVEL + f Lnet/minecraft/class_3900; field_17456 field_219384_l + f Lit/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap; field_13895 tickets + f Lnet/minecraft/class_3204$class_4077; field_18252 ticketTracker + f Lnet/minecraft/class_3906; field_17457 field_219385_m + f J field_13894 currentTime + f Lnet/minecraft/class_3204$class_3205; field_17454 playerChunkTracker + f Lorg/apache/logging/log4j/Logger; field_16211 LOGGER + f Lnet/minecraft/class_3204$class_3948; field_17455 playerTicketTracker + f Lnet/minecraft/class_3906; field_17458 field_219386_n + f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_17453 playersByChunkPos + f Ljava/util/Set; field_16210 chunkHolders + f Ljava/util/concurrent/Executor; field_17460 field_219388_p +c net/minecraft/class_3204$class_3205 net/minecraft/world/server/TicketManager$PlayerChunkTracker + m (J)Z method_14056 hasPlayerInChunk + m (JII)V method_17657 chunkLevelChanged + m ()V method_14057 processAllUpdates + f I field_17461 range + f Lnet/minecraft/class_3204; field_17462 field_215500_c + f Lit/unimi/dsi/fastutil/longs/Long2ByteMap; field_13896 chunksInRange +c net/minecraft/class_3204$class_4077 net/minecraft/world/server/TicketManager$ChunkTicketTracker + m (I)I method_18746 func_215493_a + f Lnet/minecraft/class_3204; field_18255 field_215494_a +c net/minecraft/class_3204$class_3948 net/minecraft/world/server/TicketManager$PlayerTicketTracker + m (I)Z method_17664 func_215505_c + m (JI)V method_17662 func_215506_b + m (JLnet/minecraft/class_3228;)V method_17665 func_224753_c + m (JLnet/minecraft/class_3228;)V method_17667 func_224749_d + m (JLnet/minecraft/class_3228;)V method_17661 func_224748_a + m (J)I method_17659 func_224751_d + m (JLnet/minecraft/class_3228;)V method_17663 func_224752_b + m (I)V method_17658 setViewDistance + m (I)I method_17666 func_224750_d + m ()V method_21693 func_224754_c + m (JIZZ)V method_17660 func_215504_a + f I field_17464 viewDistance + f Lit/unimi/dsi/fastutil/longs/LongSet; field_17466 field_215514_g + f Lnet/minecraft/class_3204; field_17463 field_215511_d + f Lit/unimi/dsi/fastutil/longs/Long2IntMap; field_17465 field_215513_f +c com/mojang/blaze3d/platform/GLX com/mojang/blaze3d/platform/GLX + m ()Ljava/lang/String; getOpenGLVersionString getOpenGLVersionString + m ()Ljava/lang/String; _getCpuInfo _getCpuInfo + m (Lorg/lwjgl/glfw/GLFWErrorCallbackI;)V _setGlfwErrorCallback _setGlfwErrorCallback + m ()J lambda$_initGlfw$2 func_229881_lam_ + m ()V _setupNvFogDistance _setupNvFogDistance + m (Ljava/lang/Integer;Ljava/lang/String;)V lambda$_initGlfw$0 func_229879_lam_ + m (IZ)V _init _init + m ()Ljava/lang/String; _getLWJGLVersion _getLWJGLVersion + m ()Ljava/lang/String; _getCapsString _getCapsString + m (IZZZ)V _renderCrosshair _renderCrosshair + m (I)Ljava/lang/String; getErrorString getErrorString + m (Ljava/util/HashMap;)V lambda$static$3 func_229878_lam_ + m ()Ljava/util/function/LongSupplier; _initGlfw _initGlfw + m (Lnet/minecraft/class_1041;)Z _shouldClose _shouldClose + m (Ljava/lang/Object;Ljava/util/function/Consumer;)Ljava/lang/Object; make make + m (Ljava/util/function/Supplier;)Ljava/lang/Object; make make + m (Ljava/util/List;IJ)V lambda$_initGlfw$1 func_229880_lam_ + m (Lnet/minecraft/class_1041;)I _getRefreshRate _getRefreshRate + f Ljava/lang/String; cpuInfo cpuInfo + f Ljava/util/Map; LOOKUP_MAP LOOKUP_MAP + f Ljava/lang/String; capsString capsString + f Lorg/apache/logging/log4j/Logger; LOGGER LOGGER +c net/minecraft/data/Main net/minecraft/data/Main + m ([Ljava/lang/String;)V main main + m (Ljava/nio/file/Path;Ljava/util/Collection;ZZZZZ)Lnet/minecraft/class_2403; method_4968 makeGenerator + m (Ljava/lang/String;)Ljava/nio/file/Path; method_4967 func_200263_a +c net/minecraft/world/level/ColorResolver net/minecraft/world/level/ColorResolver + m (Lnet/minecraft/class_1959;DD)I getColor getColor +c net/minecraft/class_3210 net/minecraft/world/chunk/PlayerGenerationTracker + m (Lnet/minecraft/class_3222;)V method_14087 enableGeneration + m (Lnet/minecraft/class_3222;)V method_14086 disableGeneration + m (JLnet/minecraft/class_3222;Z)V method_14085 addPlayer + m (Lnet/minecraft/class_3222;)Z method_21715 cannotGenerateChunks + m (J)Ljava/util/stream/Stream; method_14083 getGeneratingPlayers + m (JJLnet/minecraft/class_3222;)V method_14081 updatePlayerPosition + m (JLnet/minecraft/class_3222;)V method_14084 removePlayer + m (Lnet/minecraft/class_3222;)Z method_14082 canGeneratePlayer + f Lit/unimi/dsi/fastutil/objects/Object2BooleanMap; field_13910 generatingPlayers +c net/minecraft/class_4079 net/minecraft/util/SectionDistanceGraph + m (J)I method_18749 getSourceLevel + m (JIZ)V method_18750 updateSourceLevel +c net/minecraft/class_5322 net/minecraft/entity/player/SpawnLocationHelper + m (Lnet/minecraft/class_3218;IIZ)Lnet/minecraft/class_2338; method_29194 func_241092_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1923;Z)Lnet/minecraft/class_2338; method_29196 func_241094_a_ +c net/minecraft/class_3215 net/minecraft/world/server/ServerChunkProvider + m (IILnet/minecraft/class_2806;Z)Ljava/util/concurrent/CompletableFuture; method_14098 func_222867_d + m (Lnet/minecraft/class_3215;)Ljava/lang/Thread; method_19489 func_217212_a + m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_17300 releaseTicket + m (Lnet/minecraft/class_3215;)Lnet/minecraft/class_3218; method_24309 func_230220_b_ + m (IILnet/minecraft/class_2806;Z)Ljava/util/concurrent/CompletableFuture; method_17299 func_217232_b + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2596;)V method_18754 sendToAllTracking + m (I)V method_14144 setViewDistance + m (J)Lnet/minecraft/class_3193; method_14131 func_217213_a + m (Lnet/minecraft/class_2791;)Lnet/minecraft/class_2791; method_16150 func_222874_a + m (Lnet/minecraft/class_1923;)Ljava/lang/String; method_23273 getDebugInfo + m (ZLnet/minecraft/class_3193$class_3724;)Lnet/minecraft/class_2791; method_16173 func_222870_a + m (Lnet/minecraft/class_3222;)V method_14096 updatePlayerPosition + m ()Lnet/minecraft/class_1948$class_5262; method_27908 func_241101_k_ + m (Ljava/util/function/BooleanSupplier;)V method_12127 tick + m ()Z method_16155 func_217235_l + m (Lnet/minecraft/class_1297;)V method_18755 track + m ()Lnet/minecraft/class_26; method_17981 getSavedData + m ()Lnet/minecraft/class_4153; method_19493 getPointOfInterestManager + m ()I method_21694 func_225314_f + m (IILnet/minecraft/class_2806;Z)Ljava/util/concurrent/CompletableFuture; method_14134 func_217233_c + m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_17297 registerTicket + m ()I method_17301 getLoadedChunksCount + m (Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletionStage; method_14159 func_217211_a + m ()Z method_19492 driveOneTask + m ()Lnet/minecraft/class_3227; method_17293 getLightManager + m (Lnet/minecraft/class_3215;)Z method_19490 func_230221_c_ + m ()Lnet/minecraft/class_2794; method_12129 getChunkGenerator + m ()Lnet/minecraft/class_1937; method_16434 getWorld + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2596;)V method_18751 sendToTrackingAndSelf + m ()I method_14151 getLoadedChunkCount + m (JLjava/util/function/Function;)Z method_20585 isChunkLoaded + m (Lnet/minecraft/class_3215;)Lnet/minecraft/class_3227; method_19491 func_230222_d_ + m (Lnet/minecraft/class_4076;Lnet/minecraft/class_1944;)V method_14118 func_223437_a + m (Lnet/minecraft/class_3193;I)Z method_18752 func_217224_a + m (JLjava/util/function/Consumer;)V method_27907 func_241098_a_ + m ()V method_14161 tickChunks + m (Lnet/minecraft/class_1297;)V method_18753 untrack + m (JZLnet/minecraft/class_1948$class_5262;ZILnet/minecraft/class_3193;)V method_20801 func_241099_a_ + m (IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2791; method_20586 func_222868_e + m (Lnet/minecraft/class_2338;)V method_14128 markBlockChanged + m ()V method_20587 invalidateCaches + m (Z)V method_17298 save + m (JLnet/minecraft/class_2791;Lnet/minecraft/class_2806;)V method_21738 func_225315_a + f J field_13928 lastGameTime + f Lnet/minecraft/class_3227; field_13921 lightManager + f Lnet/minecraft/class_3215$class_4212; field_18809 executor + f Z field_13941 spawnPassives + f Lnet/minecraft/class_1948$class_5262; field_24455 field_241097_p_ + f Lnet/minecraft/class_3204; field_17252 ticketManager + f [Lnet/minecraft/class_2806; field_19336 recentStatuses + f Lnet/minecraft/class_2794; field_13939 generator + f Ljava/util/List; field_13934 field_217239_c + f [J field_19335 recentPositions + f Ljava/lang/Thread; field_17253 mainThread + f [Lnet/minecraft/class_2791; field_19337 recentChunks + f Z field_13929 spawnHostiles + f Lnet/minecraft/class_26; field_17708 savedData + f Lnet/minecraft/class_3898; field_17254 chunkManager + f Lnet/minecraft/class_3218; field_13945 world +c net/minecraft/class_3215$1 net/minecraft/world/server/ServerChunkProvider$1 +c net/minecraft/class_3215$class_4212 net/minecraft/world/server/ServerChunkProvider$ChunkExecutor + f Lnet/minecraft/class_3215; field_18810 field_213181_a +c net/minecraft/class_3213 net/minecraft/world/server/ServerBossInfo + m ()Z method_14093 isVisible + m ()Ljava/util/Collection; method_14092 getPlayers + m (Lnet/minecraft/class_3222;)V method_14088 addPlayer + m (Lnet/minecraft/class_2629$class_2630;)V method_14090 sendUpdate + m (Lnet/minecraft/class_3222;)V method_14089 removePlayer + m ()V method_14094 removeAllPlayers + m (Z)V method_14091 setVisible + f Ljava/util/Set; field_13913 players + f Ljava/util/Set; field_13914 readOnlyPlayers + f Z field_13912 visible +c net/minecraft/class_3218 net/minecraft/world/server/ServerWorld + m ()F method_30630 func_242107_v + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_29201 func_241122_a_ + m (Lnet/minecraft/class_3222;)V method_18771 addPlayer + m (Ljava/io/Writer;Ljava/lang/Iterable;)V method_21624 dumpEntities + m ()Lnet/minecraft/class_2995; method_14170 getScoreboard + m (Lnet/minecraft/class_1299;Ljava/util/function/Predicate;)Ljava/util/List; method_18198 getEntities + m (Lnet/minecraft/class_1297;)Z method_18768 summonEntity + m ()Lnet/minecraft/class_2881; method_29198 func_241110_C_ + m (Lnet/minecraft/class_1297;)Ljava/lang/String; method_18781 func_241134_p_ + m (IIZ)Z method_17988 forceChunk + m (Lnet/minecraft/class_1297;)V method_18772 onEntityRemoved + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_3765; method_19502 findRaid + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)V method_18763 tickPassenger + m (Lnet/minecraft/class_3341;)V method_23658 clearBlockEvents + m (Lnet/minecraft/class_1297;)V method_18762 updateEntity + m ()V method_23660 wakeUpAllPlayers + m ()Lnet/minecraft/class_3215; method_14178 getChunkProvider + m ()Ljava/lang/String; toString toString + m (Ljava/util/UUID;)Lnet/minecraft/class_1297; method_14190 getEntityByUuid + m (Lnet/minecraft/class_1297;)V method_18769 addFromAnotherDimension + m (Lnet/minecraft/class_1297;)V method_18780 removeFromChunk + m (Lnet/minecraft/class_1959;Lnet/minecraft/class_2338;II)Lnet/minecraft/class_2338; method_24500 func_241116_a_ + m (Lnet/minecraft/class_1309;)Z method_18199 func_241115_a_ + m (Lnet/minecraft/class_3222;)V method_18213 addNewPlayer + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19536 func_241130_c_ + m (Lnet/minecraft/class_2394;DDDIDDDD)I method_14199 spawnParticle + m (Lnet/minecraft/class_2338;)V method_19501 func_242101_D + m ()V method_14197 resetUpdateEntityTick + m (Lnet/minecraft/class_1297;)Z method_14175 addEntity0 + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_29204 func_244430_b + m (Lnet/minecraft/class_3222;)V method_18773 func_241131_g_ + m (Lnet/minecraft/class_2338;F)V method_8554 func_241124_a__ + m (Lnet/minecraft/class_3611;)Z method_14194 func_205774_a + m (Lnet/minecraft/class_1297;)Ljava/lang/String; method_24310 func_241133_o_ + m (Lnet/minecraft/class_1297;)V method_18774 removeEntity + m ()Lnet/minecraft/class_3485; method_14183 getStructureTemplateManager + m (J)V method_29199 setDayTime + m (Lnet/minecraft/class_1297;)V method_18767 chunkCheck + m ()V method_29203 func_241126_b_ + m ()Lnet/minecraft/class_26; method_17983 getSavedData + m (Lnet/minecraft/class_1954;)V method_14171 tickFluid + m (Lnet/minecraft/class_1959;Lnet/minecraft/class_1959;)Z method_31071 func_242102_a + m (Lnet/minecraft/class_2818;)V method_18764 onChunkUnloading + m (Lnet/minecraft/class_2248;)Z method_14198 func_205341_a + m (Lnet/minecraft/class_2338;I)Z method_19497 func_241119_a_ + m ()V method_14192 sendQueuedBlockEvents + m (Lnet/minecraft/class_3222;)V method_18215 addRespawnedPlayer + m (Ljava/lang/String;)Lnet/minecraft/class_22; method_17989 func_242104_b + m ()V method_8448 updateAllPlayersSleepingFlag + m (Lnet/minecraft/class_2338;)Z method_19503 hasRaid + m (Lnet/minecraft/class_1919;)Z method_14174 fireBlockEvent + m ()Lnet/minecraft/class_3767; method_19495 getRaids + m ()Lnet/minecraft/class_1946; method_14173 getDefaultTeleporter + m (Lnet/minecraft/server/MinecraftServer;)Lnet/minecraft/class_26; method_17985 func_241120_a_ + m (IIZZ)V method_27910 func_241113_a_ + m (Lnet/minecraft/class_1297;)Z method_18777 hasDuplicateEntity + m (Lnet/minecraft/class_3222;)Z method_18775 func_241132_h_ + m ()Z method_28125 func_241109_A_ + m (Ljava/util/function/Predicate;)Ljava/util/List; method_18766 getPlayers + m ()Ljava/lang/Iterable; method_27909 func_241136_z_ + m (ZZ)V method_29202 func_241123_a_ + m (Lnet/minecraft/class_4076;)Z method_20588 isVillage + m (Lnet/minecraft/class_1297;)Z method_18214 addEntityIfNotDuplicate + m (Ljava/util/UUID;)Lnet/minecraft/class_1297; method_30735 func_242105_c + m ()Lnet/minecraft/class_1949; method_14179 getPendingFluidTicks + m (Ljava/util/function/BooleanSupplier;)V method_18765 tick + m (Lnet/minecraft/class_3218;)V method_29200 func_241121_a_ + m ()Lnet/minecraft/class_1949; method_14196 getPendingBlockTicks + m ()Lnet/minecraft/class_3767; method_17987 func_241125_ai_ + m (Ljava/nio/file/Path;)V method_21625 writeDebugInfo + m ()Ljava/util/List; method_18776 getDragons + m (Lnet/minecraft/class_3195;Lnet/minecraft/class_2338;IZ)Lnet/minecraft/class_2338; method_8487 func_241117_a_ + m (Lnet/minecraft/class_3341;Lnet/minecraft/class_1919;)Z method_23659 func_241118_a_ + m ()Lnet/minecraft/class_3222; method_18779 getRandomPlayer + m (Lnet/minecraft/class_1954;)V method_14189 tickBlock + m (Lnet/minecraft/class_3222;)V method_18207 addDuringCommandTeleport + m ()V method_14188 saveLevel + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19535 func_217476_c_ + m (Lnet/minecraft/class_2818;I)V method_18203 tickEnvironment + m ()Lnet/minecraft/class_5138; method_27056 func_241112_a_ + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2394;ZDDDIDDDD)Z method_14166 spawnParticle + m (Lnet/minecraft/class_3222;)V method_18770 removePlayer + m ()Lnet/minecraft/class_4153; method_19494 getPointOfInterestManager + m (Lnet/minecraft/class_3536;ZZ)V method_14176 save + m (Lnet/minecraft/class_2338;)Z method_19500 isVillage + m ()Lnet/minecraft/class_2338; method_27911 getSpawnPoint + m (Lnet/minecraft/class_1297;)V method_18778 onEntityAdded + m (Lnet/minecraft/class_4151;Lnet/minecraft/class_1297;Lnet/minecraft/class_4094;)V method_19496 updateReputation + m (Lnet/minecraft/class_1297;)Z method_30736 func_242106_g + m (Lnet/minecraft/class_4076;)I method_19498 sectionsToVillage + m (Lnet/minecraft/class_3222;ZDDDLnet/minecraft/class_2596;)Z method_14191 sendPacketWithinDistance + m (Ljava/io/Writer;)V method_21626 dumpBlockEntities + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_18210 adjustPosToNearbyEntity + m ()Z method_14177 isInsideTick + m (Lnet/minecraft/class_3222;)V method_18211 addDuringPortalTeleport + m ()Lit/unimi/dsi/fastutil/longs/LongSet; method_17984 getForcedChunks + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19499 func_242103_b + m ()V method_14195 resetRainAndThunder + f Ljava/util/List; field_18261 players + f Lnet/minecraft/class_1946; field_13956 worldTeleporter + f Z field_18264 tickingEntities + f Lnet/minecraft/server/MinecraftServer; field_13959 server + f Lnet/minecraft/class_5268; field_24456 field_241103_E_ + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_17915 entitiesById + f Ljava/util/List; field_25141 field_241104_N_ + f Lnet/minecraft/class_3767; field_18811 raids + f Lorg/apache/logging/log4j/Logger; field_13952 LOGGER + f Z field_13955 allPlayersSleeping + f Lit/unimi/dsi/fastutil/objects/ObjectLinkedOpenHashSet; field_13950 blockEventQueue + f Lnet/minecraft/class_3215; field_24624 field_241102_C_ + f Lnet/minecraft/class_2881; field_25142 field_241105_O_ + f Lnet/minecraft/class_1949; field_13949 pendingBlockTicks + f I field_13948 updateEntityTick + f Ljava/util/Set; field_18262 navigations + f Lnet/minecraft/class_5138; field_23787 field_241106_P_ + f Z field_13953 insideTick + f Z field_25143 field_241107_Q_ + f Lnet/minecraft/class_1949; field_13951 pendingFluidTicks + f Z field_13957 disableLevelSaving + f Ljava/util/Map; field_13960 entitiesByUuid + f Ljava/util/Queue; field_18260 entitiesToAdd + f Lnet/minecraft/class_2338; field_25144 field_241108_a_ +c net/minecraft/class_3231 net/minecraft/world/TrackedEntity + m (Lnet/minecraft/class_2596;)V method_18758 sendPacket + m ()V method_18761 updateEncodedPosition + m ()V method_14306 sendMetadata + m ()Lnet/minecraft/class_243; method_18759 getDecodedPosition + m ()V method_18756 tick + m (Lnet/minecraft/class_3222;)V method_14302 untrack + m (Ljava/util/function/Consumer;)V method_18757 sendSpawnPackets + m (Lnet/minecraft/class_3222;)V method_18760 track + f Ljava/util/List; field_14045 passengers + f Lorg/apache/logging/log4j/Logger; field_14041 LOGGER + f Z field_14036 onGround + f I field_14037 updateFrequency + f Z field_14039 sendVelocityUpdates + f I field_14047 encodedRotationPitch + f I field_14060 encodedRotationYaw + f I field_14059 encodedRotationYawHead + f J field_14035 encodedPosY + f J field_14050 encodedPosX + f J field_14048 encodedPosZ + f Lnet/minecraft/class_1297; field_14049 trackedEntity + f I field_14043 ticksSinceAbsoluteTeleport + f I field_14040 updateCounter + f Lnet/minecraft/class_3218; field_18258 world + f Z field_14051 riding + f Lnet/minecraft/class_243; field_18278 velocity + f Ljava/util/function/Consumer; field_18259 packetConsumer +c net/minecraft/class_3225 net/minecraft/server/management/PlayerInteractionManager + m (Lnet/minecraft/class_1934;)V method_30118 setGameType + m ()Z method_14268 isCreative + m (Lnet/minecraft/class_1934;)V method_14260 initializeGameType + m (Lnet/minecraft/class_1934;Lnet/minecraft/class_1934;)V method_14261 func_241820_a + m (Lnet/minecraft/class_2338;)Z method_14266 tryHarvestBlock + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_14256 processRightClick + m (Lnet/minecraft/class_3218;)V method_14259 setWorld + m ()Lnet/minecraft/class_1934; method_14257 getGameType + m ()Lnet/minecraft/class_1934; method_30119 func_241815_c_ + m ()Z method_14267 survivalOrAdventure + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;I)F method_21716 func_229859_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2846$class_2847;Ljava/lang/String;)V method_21717 func_229860_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2846$class_2847;Lnet/minecraft/class_2350;I)V method_14263 func_225416_a + m ()V method_14264 tick + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;Lnet/minecraft/class_1268;Lnet/minecraft/class_3965;)Lnet/minecraft/class_1269; method_14262 func_219441_a + f Lnet/minecraft/class_3218; field_14007 world + f Z field_20328 receivedFinishDiggingPacket + f Lnet/minecraft/class_1934; field_14005 gameType + f I field_20326 initialDamage + f Lnet/minecraft/class_2338; field_20329 delayedDestroyPos + f Lorg/apache/logging/log4j/Logger; field_20325 field_225418_c + f Lnet/minecraft/class_1934; field_25715 field_241813_e_ + f Lnet/minecraft/class_2338; field_20327 destroyPos + f Z field_14003 isDestroyingBlock + f I field_20330 initialBlockDamage + f I field_20331 durabilityRemainingOnBlock + f Lnet/minecraft/class_3222; field_14008 player + f I field_14000 ticks +c net/minecraft/class_3222 net/minecraft/entity/player/ServerPlayerEntity + m ()Lnet/minecraft/class_2561; method_14206 getTabListDisplayName + m ()J method_14219 getLastActiveTime + m (Ljava/lang/String;Ljava/lang/String;[Lnet/minecraft/class_274;)V method_14227 handleTeamKill + m (Lnet/minecraft/class_4076;)V method_17668 setManagedSectionPos + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_26285 func_241147_a_ + m ()V method_14226 playerTick + m ()Lnet/minecraft/class_2985; method_14236 getAdvancements + m (Lnet/minecraft/class_2338;)Z method_26287 func_241158_g_ + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_29205 func_241148_a_ + m (I)V method_14228 func_195394_a + m ()Lnet/minecraft/class_1659; method_14238 getChatVisibility + m (Lnet/minecraft/class_2803;)V method_14213 handleClientSettings + m ()Ljava/lang/String; method_14209 getPlayerIP + m (Lnet/minecraft/class_1308;)Z method_29778 func_241155_b_ + m ()V method_14231 disconnect + m (ILnet/minecraft/class_267;)V method_14221 func_195396_a_ + m ()V method_14237 getNextWindowId + m (Lnet/minecraft/class_1923;)V method_14246 sendChunkUnload + m (Lnet/minecraft/class_2561;Lio/netty/util/concurrent/Future;)V method_14223 func_212356_a_ + m ()Z method_26282 func_241142_M_ + m ()Lnet/minecraft/class_2338; method_26280 func_241140_K_ + m (Lnet/minecraft/class_274;I)V method_14212 updateScorePoints + m ()Lnet/minecraft/class_3441; method_14253 getRecipeBook + m (Lnet/minecraft/class_3902;)V method_19504 func_241144_a_ + m (Lnet/minecraft/class_1297;)V method_14249 removeEntity + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_26286 func_241156_b_ + m ()V method_14247 closeContainer + m ()Lnet/minecraft/class_1297; method_14242 getSpectatingEntity + m ()Lnet/minecraft/class_3442; method_14248 getStats + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2338;FZZ)V method_26284 func_242111_a + m ()V method_14240 clearInvulnerableDimensionChange + m ()Lnet/minecraft/class_4076; method_14232 getManagedSectionPos + m (Lnet/minecraft/class_2183$class_2184;Lnet/minecraft/class_1297;Lnet/minecraft/class_2183$class_2184;)V method_14222 lookAt + m ()Z method_14230 canPlayersAttack + m (Lnet/minecraft/class_3218;DDDFF)V method_14251 teleport + m (Lnet/minecraft/class_1588;)Z method_26283 func_241146_a_ + m (Ljava/lang/String;Ljava/lang/String;)V method_14255 loadResourcePack + m (Lnet/minecraft/class_3222;Z)V method_14203 copyFrom + m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2556;Ljava/util/UUID;)V method_14254 func_241151_a_ + m (FFZZ)V method_14218 setEntityActionState + m ()Lnet/minecraft/class_5321; method_26281 func_241141_L_ + m ()V method_14241 updateHeldItem + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_30313 func_242110_a + m ()V method_14217 setPlayerHealthUpdated + m (Lnet/minecraft/class_1703;)V method_14204 sendContainerToPlayer + m ()F method_30631 func_242109_L + m (Lnet/minecraft/class_1297;)V method_14211 addEntity + m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_14210 func_212357_a_ + m (Lnet/minecraft/class_2586;)V method_14216 sendTileEntityUpdate + m (DZ)V method_14207 handleFalling + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2596;Lnet/minecraft/class_2596;)V method_14205 sendChunkLoad + m (Lnet/minecraft/class_3218;)V method_14245 func_205734_a + m ()Z method_14208 isInvulnerableDimensionChange + m ()V method_29779 func_241157_eT_ + m (Lnet/minecraft/class_2556;Lnet/minecraft/class_2561;Ljava/util/UUID;Lio/netty/util/concurrent/Future;)V method_14233 func_241149_a_ + m ()V method_14234 markPlayerActive + m (I)I method_14244 func_205735_q + m ()Lnet/minecraft/class_3218; method_14220 getServerWorld + m (Lnet/minecraft/class_1308;)V method_29777 func_241145_a_ + m ()Z method_14239 hasDisconnected + m (Lnet/minecraft/class_1297;)V method_14224 setSpectatingEntity + m (ILnet/minecraft/class_267;)V method_14250 func_195397_b_ + m (Lnet/minecraft/class_3218;)V method_18783 func_213846_b + m (I)V method_14252 setExperienceLevel + m ()V method_14235 addSelfToInternalCraftingInventory + f I field_13998 respawnInvulnerabilityTicks + f Lnet/minecraft/class_4076; field_13990 managedSectionPos + f Z field_13985 invulnerableDimensionChange + f I field_13973 levitatingSince + f Ljava/util/List; field_13988 entityRemoveQueue + f Lnet/minecraft/class_2985; field_13970 advancements + f Lnet/minecraft/class_5321; field_23191 field_241137_cq_ + f I field_13982 lastArmorScore + f I field_13986 currentWindowId + f I field_13978 lastExperience + f Lnet/minecraft/class_2338; field_23192 field_241138_cr_ + f Lnet/minecraft/class_1659; field_13993 chatVisibility + f Lnet/minecraft/server/MinecraftServer; field_13995 server + f F field_26353 field_242108_cn + f Lnet/minecraft/class_3244; field_13987 connection + f F field_13997 lastHealth + f Z field_13989 queuedEndExit + f Lnet/minecraft/class_243; field_13994 enteredNetherPosition + f I field_13968 lastAirScore + f J field_13976 playerLastActiveTime + f Lnet/minecraft/class_3442; field_13966 stats + f I field_13967 ping + f Lnet/minecraft/class_1297; field_13984 spectatingEntity + f Z field_13972 wasHungry + f Z field_13971 chatColours + f Lnet/minecraft/class_243; field_13992 levitationStartPos + f I field_13980 lastExperienceScore + f Z field_23193 field_241139_cs_ + f I field_13983 lastFoodScore + f I field_13979 lastFoodLevel + f Lnet/minecraft/class_3225; field_13974 interactionManager + f Lnet/minecraft/class_3441; field_13996 recipeBook + f F field_13963 lastHealthScore + f Z field_13964 disconnected + f Z field_13991 isChangingQuantityOnly + f Z field_13969 seenCredits + f Lorg/apache/logging/log4j/Logger; field_13975 LOGGER + f I field_13965 lastLevelScore +c net/minecraft/class_3228 net/minecraft/world/server/Ticket + m (J)V method_23956 setTimestamp + m ()I method_14283 getLevel + m (Ljava/lang/Object;)I compareTo compareTo + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_3228;)I method_14285 compareTo + m (J)Z method_20627 isExpired + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m ()Lnet/minecraft/class_3230; method_14281 getType + f I field_14025 level + f Ljava/lang/Object; field_14022 value + f Lnet/minecraft/class_3230; field_14023 type + f J field_14024 timestamp +c net/minecraft/class_3227 net/minecraft/world/server/ServerWorldLightManager + m (Lnet/minecraft/class_4076;)Ljava/lang/String; method_18844 func_223121_a + m (Lnet/minecraft/class_1944;Lnet/minecraft/class_4076;Lnet/minecraft/class_2804;Z)V method_14280 func_241816_b_ + m (Lnet/minecraft/class_1923;Z)V method_14278 func_215582_d + m ()V method_17303 func_215588_z_ + m (Lnet/minecraft/class_3227$class_3901;Ljava/lang/Runnable;)V method_17313 func_223119_a + m (Lnet/minecraft/class_4076;Z)Ljava/lang/String; method_18847 func_215601_b + m (Lnet/minecraft/class_1923;Z)Ljava/lang/String; method_18848 func_215591_c + m ()V close close + m ()V method_19505 func_223124_c + m (Lnet/minecraft/class_2338;)V method_14279 func_215589_c + m (Lnet/minecraft/class_1923;Z)Ljava/lang/String; method_18845 func_223126_c + m (Lnet/minecraft/class_1923;Ljava/lang/Runnable;)V method_17306 func_215597_a + m (Lnet/minecraft/class_2791;Lnet/minecraft/class_1923;)Lnet/minecraft/class_2791; method_17309 func_223122_a + m (Lnet/minecraft/class_4076;Z)V method_14273 func_215592_c + m (Lnet/minecraft/class_2791;Lnet/minecraft/class_1923;Z)V method_17312 func_223117_a + m (Lnet/minecraft/class_2338;)Ljava/lang/String; method_18846 func_215580_b + m (Lnet/minecraft/class_1923;Z)V method_20626 func_223127_d + m (Lnet/minecraft/class_2791;Z)Ljava/util/concurrent/CompletableFuture; method_17310 lightChunk + m (Lnet/minecraft/class_1923;)Ljava/lang/String; method_20624 func_223123_b + m (Lnet/minecraft/class_1923;)V method_20386 updateChunkStatus + m (I)V method_17304 func_215598_a + m (Lnet/minecraft/class_1923;)V method_20388 func_215602_c + m ()I method_20607 func_223120_e + m ()I method_20389 func_215584_e + m (IILjava/util/function/IntSupplier;Lnet/minecraft/class_3227$class_3901;Ljava/lang/Runnable;)V method_17307 func_215600_a + m ()V method_14277 func_215603_b + m (IILnet/minecraft/class_3227$class_3901;Ljava/lang/Runnable;)V method_17308 func_215586_a + m ()I method_17314 func_215599_d + m (Lnet/minecraft/class_2791;Lnet/minecraft/class_2338;)V method_14275 func_215579_a + m ()I method_20625 func_223125_d + m (Lnet/minecraft/class_1923;)Ljava/lang/String; method_20387 func_215578_b + f Lnet/minecraft/class_3846; field_17255 field_215605_b + f Lnet/minecraft/class_3898; field_17257 chunkManager + f Lorg/apache/logging/log4j/Logger; field_14020 LOGGER + f Lit/unimi/dsi/fastutil/objects/ObjectList; field_17256 field_215606_c + f I field_17260 field_215609_f + f Ljava/util/concurrent/atomic/AtomicBoolean; field_18812 field_215610_g + f Lnet/minecraft/class_3906; field_17259 field_215608_e +c net/minecraft/class_3227$class_3901 net/minecraft/world/server/ServerWorldLightManager$Phase + m (Ljava/lang/String;)Lnet/minecraft/class_3227$class_3901; valueOf valueOf + m ()[Lnet/minecraft/class_3227$class_3901; values values + f Lnet/minecraft/class_3227$class_3901; field_17261 PRE_UPDATE + f Lnet/minecraft/class_3227$class_3901; field_17262 POST_UPDATE + f [Lnet/minecraft/class_3227$class_3901; field_17263 $VALUES +c net/minecraft/class_3233 net/minecraft/world/gen/WorldGenRegion + m ()I method_14339 getMainChunkZ + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1951; method_14337 func_205334_n + m ()I method_14336 getMainChunkX + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1951; method_14340 func_205335_o + m (Lnet/minecraft/class_2338;)V method_14338 markBlockForPostprocessing + f I field_14088 field_217380_e + f J field_14087 seed + f Lnet/minecraft/class_3218; field_14093 world + f Lnet/minecraft/class_1951; field_14094 pendingFluidTickList + f I field_14090 mainChunkX + f Lnet/minecraft/class_5217; field_14097 worldInfo + f Ljava/util/Random; field_14091 random + f I field_14089 mainChunkZ + f Lnet/minecraft/class_2874; field_14096 field_241159_j_ + f Lnet/minecraft/class_4543; field_20668 biomeManager + f Lnet/minecraft/class_1951; field_14099 pendingBlockTickList + f Ljava/util/List; field_14098 chunkPrimers + f Lnet/minecraft/class_1923; field_23788 field_241160_n_ + f Lorg/apache/logging/log4j/Logger; field_14092 LOGGER + f Lnet/minecraft/class_1923; field_23789 field_241161_o_ +c net/minecraft/class_3230 net/minecraft/world/server/TicketType + m (Ljava/lang/String;Ljava/util/Comparator;)Lnet/minecraft/class_3230; method_14291 create + m (Lnet/minecraft/class_3902;Lnet/minecraft/class_3902;)I method_17316 func_219486_b + m ()J method_20629 getLifespan + m (Ljava/lang/String;Ljava/util/Comparator;I)Lnet/minecraft/class_3230; method_20628 create + m ()Ljava/util/Comparator; method_14292 getComparator + m (Lnet/minecraft/class_3902;Lnet/minecraft/class_3902;)I method_17315 func_219485_a + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_3230; field_14030 START + f Lnet/minecraft/class_3230; field_14031 FORCED + f Ljava/lang/String; field_14034 name + f Lnet/minecraft/class_3230; field_14033 PLAYER + f Lnet/minecraft/class_3230; field_17264 DRAGON + f Lnet/minecraft/class_3230; field_19347 POST_TELEPORT + f Lnet/minecraft/class_3230; field_19280 PORTAL + f Lnet/minecraft/class_3230; field_19270 LIGHT + f J field_19348 lifespan + f Ljava/util/Comparator; field_14029 typeComparator + f Lnet/minecraft/class_3230; field_14032 UNKNOWN +c net/minecraft/class_3235 net/minecraft/world/WorldGenTickList + f Ljava/util/function/Function; field_14100 tickListProvider +c net/minecraft/class_3950 net/minecraft/world/chunk/listener/IChunkStatusListenerFactory + m (I)Lnet/minecraft/class_3949; create create +c net/minecraft/class_3949 net/minecraft/world/chunk/listener/IChunkStatusListener + m ()V method_17671 stop + m (Lnet/minecraft/class_1923;)V method_17669 start + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2806;)V method_17670 statusChanged +c net/minecraft/class_3952 net/minecraft/world/chunk/listener/ChainedChunkStatusListener + m (Lnet/minecraft/class_1923;)V method_17673 func_219517_b + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2806;)V method_17674 func_219518_b + f Lnet/minecraft/class_3846; field_17473 executor + f Lnet/minecraft/class_3949; field_17472 delegate +c net/minecraft/class_3951 net/minecraft/world/chunk/listener/LoggingChunkStatusListener + m ()I method_17672 getPercentDone + f I field_17469 loadedChunks + f I field_17468 totalChunks + f J field_17470 startTime + f Lorg/apache/logging/log4j/Logger; field_17467 LOGGER + f J field_17471 nextLogTime +c net/minecraft/class_3953 net/minecraft/world/chunk/listener/TrackingChunkStatusListener + m ()I method_17677 getDiameter + m ()I method_17679 getPercentDone + m ()I method_17678 func_219523_d + m (II)Lnet/minecraft/class_2806; method_17676 getStatus + m ()V method_17675 startTracking + f I field_17479 field_219531_f + f Z field_17480 tracking + f Lnet/minecraft/class_1923; field_17476 center + f Lit/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap; field_17475 statuses + f I field_17478 positionOffset + f I field_17477 diameter + f Lnet/minecraft/class_3951; field_17474 loggingListener +c net/minecraft/class_3240 net/minecraft/client/network/handshake/ClientHandshakeNetHandler + f Lnet/minecraft/server/MinecraftServer; field_14104 server + f Lnet/minecraft/class_2535; field_14103 networkManager +c net/minecraft/class_3238 net/minecraft/network/LegacyPingHandler + m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;)V method_14344 writeAndFlush + m (Ljava/lang/String;)Lio/netty/buffer/ByteBuf; method_14345 getStringBuffer + m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;)V channelRead channelRead + f Lorg/apache/logging/log4j/Logger; field_14101 LOGGER + f Lnet/minecraft/class_3242; field_14102 networkSystem +c net/minecraft/class_3244 net/minecraft/network/play/ServerPlayNetHandler + m (Lnet/minecraft/class_2561;Lio/netty/util/concurrent/Future;)V method_14368 func_210161_a + m ()Z method_19507 func_217264_d + m (Lnet/minecraft/class_2833;)Z method_14371 isMoveVehiclePacketInvalid + m (Ljava/lang/String;)V method_14370 handleSlashCommand + m ()V method_18784 tick + m (Lnet/minecraft/class_1297;)Z method_29782 func_241167_b_ + m (Lnet/minecraft/class_2840;Lnet/minecraft/class_1860;)V method_17820 func_241165_a_ + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_238;)Z method_20630 func_241163_a_ + m (Lnet/minecraft/class_2561;)V method_14367 disconnect + m (DDDFF)V method_14363 setPlayerLocation + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Z method_29781 func_241164_a_ + m (Lnet/minecraft/class_2596;)Ljava/lang/String; method_14361 func_241168_b_ + m (Lnet/minecraft/class_2596;Lio/netty/util/concurrent/GenericFutureListener;)V method_14369 sendPacket + m (Lnet/minecraft/class_2805;Lcom/mojang/brigadier/suggestion/Suggestions;)V method_14365 func_195519_a + m (Lnet/minecraft/class_1297;)Z method_29780 func_241162_a_ + m ()V method_14372 captureCurrentPosition + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;)Z method_27913 func_241166_a_ + m (DDDFFLjava/util/Set;)V method_14360 setPlayerLocation + m (Lnet/minecraft/class_2828;)Z method_14362 isMovePlayerPacketInvalid + m (Lnet/minecraft/class_2596;)V method_14364 sendPacket + f D field_14145 lastGoodX + f I field_14139 lastPositionUpdate + f I field_14138 floatingTickCount + f Z field_14125 keepAlivePending + f D field_14146 firstGoodY + f I field_14116 chatSpamThresholdCount + f Lnet/minecraft/server/MinecraftServer; field_14148 server + f I field_14135 lastMovePacketCounter + f D field_14142 lowestRiddenZ + f D field_14143 lowestRiddenX + f Lorg/apache/logging/log4j/Logger; field_14121 LOGGER + f D field_14144 lastGoodZ + f I field_14137 vehicleFloatingTickCount + f Lnet/minecraft/class_2535; field_14127 netManager + f D field_14141 lowestRiddenY1 + f J field_14134 keepAliveKey + f J field_14136 keepAliveTime + f D field_14128 firstGoodZ + f D field_14130 firstGoodX + f Lnet/minecraft/class_3222; field_14140 player + f Lnet/minecraft/class_243; field_14119 targetPos + f I field_14133 itemDropThreshold + f D field_14124 lowestRiddenY + f Z field_14131 floating + f D field_14126 lastGoodY + f I field_14117 movePacketCounter + f Lit/unimi/dsi/fastutil/ints/Int2ShortMap; field_14132 pendingTransactions + f D field_14120 lowestRiddenZ1 + f Z field_14129 vehicleFloating + f D field_14122 lowestRiddenX1 + f Lnet/minecraft/class_1297; field_14147 lowestRiddenEnt + f I field_14118 networkTickCount + f I field_14123 teleportId +c net/minecraft/class_3244$1 net/minecraft/network/play/ServerPlayNetHandler$1 + f [I field_14151 field_210478_d + f [I field_14149 field_210477_c + f [I field_14152 field_210475_a + f [I field_14150 field_210476_b +c net/minecraft/class_3242 net/minecraft/network/NetworkSystem + m (Lnet/minecraft/class_3242;)Lnet/minecraft/server/MinecraftServer; method_14355 func_242112_a + m (Ljava/net/InetAddress;I)V method_14354 addEndpoint + m ()Lnet/minecraft/server/MinecraftServer; method_14351 getServer + m ()V method_14357 tick + m ()Ljava/net/SocketAddress; method_14353 addLocalEndpoint + m (Lnet/minecraft/class_3242;)Ljava/util/List; method_14350 func_242113_b + m ()V method_14356 terminateEndpoints + m ()Lio/netty/channel/nio/NioEventLoopGroup; method_14348 func_201135_f + m ()Lio/netty/channel/epoll/EpollEventLoopGroup; method_14349 func_201136_e + m (Lnet/minecraft/class_2535;Lnet/minecraft/class_2561;Lio/netty/util/concurrent/Future;)V method_14352 func_210474_a + f Ljava/util/List; field_14106 endpoints + f Lnet/minecraft/server/MinecraftServer; field_14109 server + f Ljava/util/List; field_14107 networkManagers + f Lorg/apache/logging/log4j/Logger; field_14110 LOGGER + f Lnet/minecraft/class_3528; field_14111 SERVER_NIO_EVENTLOOP + f Lnet/minecraft/class_3528; field_14105 SERVER_EPOLL_EVENTLOOP + f Z field_14108 isAlive +c net/minecraft/class_3242$1 net/minecraft/network/NetworkSystem$1 + m (Lio/netty/channel/Channel;)V initChannel initChannel + f Lnet/minecraft/class_3242; field_14112 field_201131_a +c net/minecraft/class_3242$2 net/minecraft/network/NetworkSystem$2 + m (Lio/netty/channel/Channel;)V initChannel initChannel + f Lnet/minecraft/class_3242; field_14113 field_201132_a +c net/minecraft/class_3246 net/minecraft/network/handshake/ServerHandshakeNetHandler + f Lnet/minecraft/server/MinecraftServer; field_14154 server + f Lnet/minecraft/class_2561; field_24457 field_241169_a_ + f Lnet/minecraft/class_2535; field_14153 networkManager +c net/minecraft/class_3246$1 net/minecraft/network/handshake/ServerHandshakeNetHandler$1 + f [I field_14155 field_151291_a +c net/minecraft/class_3251 net/minecraft/network/status/ServerStatusNetHandler + f Lnet/minecraft/server/MinecraftServer; field_14180 server + f Lnet/minecraft/class_2561; field_14179 EXIT_MESSAGE + f Z field_14177 handled + f Lnet/minecraft/class_2535; field_14178 networkManager +c net/minecraft/class_3248 net/minecraft/network/login/ServerLoginNetHandler + m ()Lorg/apache/logging/log4j/Logger; method_14376 access$300 + m ()V method_14384 tryAcceptPlayer + m (Lnet/minecraft/class_3248;)Ljavax/crypto/SecretKey; method_14378 access$200 + m ()V method_18785 tick + m (Lnet/minecraft/class_3248;)Lcom/mojang/authlib/GameProfile; method_14379 func_210151_a + m (Lnet/minecraft/class_2561;)V method_14380 disconnect + m (Lnet/minecraft/class_3248;Lnet/minecraft/class_3248$class_3249;)Lnet/minecraft/class_3248$class_3249; method_14385 access$402 + m (Lnet/minecraft/class_3248;Lcom/mojang/authlib/GameProfile;)Lcom/mojang/authlib/GameProfile; method_14381 func_210148_a + m ()Ljava/lang/String; method_14383 getConnectionInfo + m (Lcom/mojang/authlib/GameProfile;)Lcom/mojang/authlib/GameProfile; method_14375 getOfflineProfile + m (Lnet/minecraft/class_3248;)Lnet/minecraft/server/MinecraftServer; method_14377 func_210150_b + m (Lio/netty/channel/ChannelFuture;)V method_14382 func_210149_a + f Lcom/mojang/authlib/GameProfile; field_14160 loginGameProfile + f Ljava/util/concurrent/atomic/AtomicInteger; field_14157 AUTHENTICATOR_THREAD_ID + f Lnet/minecraft/class_3248$class_3249; field_14163 currentLoginState + f Ljava/util/Random; field_14164 RANDOM + f Ljava/lang/String; field_14165 serverId + f Lnet/minecraft/class_3222; field_14161 player + f Lorg/apache/logging/log4j/Logger; field_14166 LOGGER + f Lnet/minecraft/class_2535; field_14158 networkManager + f Ljavax/crypto/SecretKey; field_14159 secretKey + f I field_14156 connectionTimer + f Lnet/minecraft/server/MinecraftServer; field_14162 server + f [B field_14167 verifyToken +c net/minecraft/class_3248$class_3249 net/minecraft/network/login/ServerLoginNetHandler$State + m (Ljava/lang/String;)Lnet/minecraft/class_3248$class_3249; valueOf valueOf + m ()[Lnet/minecraft/class_3248$class_3249; values values + f [Lnet/minecraft/class_3248$class_3249; field_14174 $VALUES + f Lnet/minecraft/class_3248$class_3249; field_14168 READY_TO_ACCEPT + f Lnet/minecraft/class_3248$class_3249; field_14172 ACCEPTED + f Lnet/minecraft/class_3248$class_3249; field_14170 HELLO + f Lnet/minecraft/class_3248$class_3249; field_14171 DELAY_ACCEPT + f Lnet/minecraft/class_3248$class_3249; field_14169 AUTHENTICATING + f Lnet/minecraft/class_3248$class_3249; field_14175 KEY + f Lnet/minecraft/class_3248$class_3249; field_14173 NEGOTIATING +c net/minecraft/class_3248$1 net/minecraft/network/login/ServerLoginNetHandler$1 + m ()Ljava/net/InetAddress; method_14386 getAddress + m ()V run run + f Lnet/minecraft/class_3248; field_14176 field_151292_a +c net/minecraft/class_3258 net/minecraft/resources/FilePack + m ()V finalize finalize + m ()Ljava/util/zip/ZipFile; method_14399 getResourcePackZipFile + f Ljava/util/zip/ZipFile; field_14184 zipFile + f Lcom/google/common/base/Splitter; field_14183 PATH_SPLITTER +c net/minecraft/class_3255 net/minecraft/resources/ResourcePack + m (Ljava/lang/String;)Ljava/io/InputStream; method_14391 getInputStream + m (Ljava/io/File;Ljava/io/File;)Ljava/lang/String; method_14396 getRelativeString + m (Lnet/minecraft/class_3270;Ljava/io/InputStream;)Ljava/lang/Object; method_14392 getResourceMetadata + m (Ljava/lang/String;)Z method_14393 resourceExists + m (Ljava/lang/String;)V method_14394 onIgnoreNonLowercaseNamespace + m (Lnet/minecraft/class_3264;Lnet/minecraft/class_2960;)Ljava/lang/String; method_14395 getFullPath + f Lorg/apache/logging/log4j/Logger; field_14182 LOGGER + f Ljava/io/File; field_14181 file +c net/minecraft/class_3262 net/minecraft/resources/IResourcePack + m ()V close close + m (Lnet/minecraft/class_3264;Lnet/minecraft/class_2960;)Z method_14411 resourceExists + m (Lnet/minecraft/class_3264;)Ljava/util/Set; method_14406 getResourceNamespaces + m (Ljava/lang/String;)Ljava/io/InputStream; method_14410 getRootResourceStream + m (Lnet/minecraft/class_3264;Lnet/minecraft/class_2960;)Ljava/io/InputStream; method_14405 getResourceStream + m (Lnet/minecraft/class_3264;Ljava/lang/String;Ljava/lang/String;ILjava/util/function/Predicate;)Ljava/util/Collection; method_14408 getAllResourceLocations + m ()Ljava/lang/String; method_14409 getName + m (Lnet/minecraft/class_3270;)Ljava/lang/Object; method_14407 getMetadata +c net/minecraft/class_3259 net/minecraft/resources/FolderPack + m (Ljava/io/File;ILjava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/function/Predicate;)V method_14400 func_199546_a + m (Ljava/lang/String;)Ljava/io/File; method_14401 getFile + m (Ljava/io/File;Ljava/lang/String;)Z method_14402 validatePath + f Z field_14186 OS_WINDOWS + f Lcom/google/common/base/CharMatcher; field_14185 BACKSLASH_MATCHER + f Lorg/apache/logging/log4j/Logger; field_14187 LOGGER +c net/minecraft/class_3266 net/minecraft/resources/ResourcePackFileNotFoundException +c net/minecraft/class_3264 net/minecraft/resources/ResourcePackType + m ()[Lnet/minecraft/class_3264; values values + m ()Ljava/lang/String; method_14413 getDirectoryName + m (Ljava/lang/String;)Lnet/minecraft/class_3264; valueOf valueOf + f [Lnet/minecraft/class_3264; field_14191 $VALUES + f Lnet/minecraft/class_3264; field_14190 SERVER_DATA + f Lnet/minecraft/class_3264; field_14188 CLIENT_RESOURCES + f Ljava/lang/String; field_14189 directoryName +c net/minecraft/class_3270 net/minecraft/resources/data/IMetadataSectionSerializer + m ()Ljava/lang/String; method_14420 getSectionName + m (Lcom/google/gson/JsonObject;)Ljava/lang/Object; method_14421 deserialize +c net/minecraft/class_3268 net/minecraft/resources/VanillaPack + m (Lnet/minecraft/class_3264;Lnet/minecraft/class_2960;)Ljava/io/InputStream; method_14416 getInputStreamVanilla + m (Ljava/util/function/Predicate;Ljava/nio/file/Path;)Z method_23858 func_229868_a_ + m (Ljava/util/Collection;ILjava/lang/String;Ljava/nio/file/Path;Ljava/lang/String;Ljava/util/function/Predicate;)V method_14418 collectResources + m (Ljava/util/HashMap;)V method_18220 func_217809_a + m (Lnet/minecraft/class_3264;Lnet/minecraft/class_2960;)Ljava/lang/String; method_20729 getPath + m (Ljava/lang/String;Ljava/net/URL;)Z method_20728 isValid + m (Ljava/lang/String;Ljava/nio/file/Path;Ljava/nio/file/Path;)Lnet/minecraft/class_2960; method_23857 func_229866_a_ + m (Ljava/lang/String;)Ljava/io/InputStream; method_14417 getInputStreamVanilla + f Ljava/nio/file/Path; field_14196 basePath + f Ljava/util/Set; field_14193 resourceNamespaces + f Lorg/apache/logging/log4j/Logger; field_14195 LOGGER + f Ljava/lang/Class; field_14194 baseClass + f Ljava/util/Map; field_17917 FILE_SYSTEMS_BY_PACK_TYPE +c net/minecraft/class_3274 net/minecraft/resources/data/PackMetadataSectionSerializer + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3272; method_14426 deserialize +c net/minecraft/class_3272 net/minecraft/resources/data/PackMetadataSection + m ()Lnet/minecraft/class_2561; method_14423 getDescription + m ()I method_14424 getPackFormat + f I field_14201 packFormat + f Lnet/minecraft/class_2561; field_14203 description + f Lnet/minecraft/class_3274; field_14202 SERIALIZER +c net/minecraft/class_3279 net/minecraft/resources/FolderPackFinder + m (Ljava/io/File;)Lnet/minecraft/class_3262; method_14433 func_195732_c + m (Ljava/io/File;)Ljava/util/function/Supplier; method_14432 makePackSupplier + m (Ljava/io/File;)Z method_14431 func_195731_d + m (Ljava/io/File;)Lnet/minecraft/class_3262; method_14434 func_195734_b + f Ljava/io/File; field_14218 folder + f Ljava/io/FileFilter; field_14217 FILE_FILTER + f Lnet/minecraft/class_5352; field_25345 field_232610_c_ +c net/minecraft/class_3281 net/minecraft/resources/PackCompatibility + m ()Lnet/minecraft/class_2561; method_14439 getDescription + m ()Z method_14437 isCompatible + m ()Lnet/minecraft/class_2561; method_14438 getConfirmMessage + m (I)Lnet/minecraft/class_3281; method_14436 getCompatibility + m (Ljava/lang/String;)Lnet/minecraft/class_3281; valueOf valueOf + m ()[Lnet/minecraft/class_3281; values values + f [Lnet/minecraft/class_3281; field_14221 $VALUES + f Lnet/minecraft/class_2561; field_14222 confirmMessage + f Lnet/minecraft/class_3281; field_14223 TOO_OLD + f Lnet/minecraft/class_3281; field_14224 COMPATIBLE + f Lnet/minecraft/class_3281; field_14220 TOO_NEW + f Lnet/minecraft/class_2561; field_14219 description +c net/minecraft/class_3288 net/minecraft/resources/ResourcePackInfo + m ()Lnet/minecraft/class_2561; method_14457 getTitle + m ()Lnet/minecraft/class_2561; method_14459 getDescription + m ()V close close + m (Ljava/lang/Object;)Z equals equals + m (ZLnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_14462 func_211689_a_ + m (Ljava/lang/String;ZLjava/util/function/Supplier;Lnet/minecraft/class_3288$class_5351;Lnet/minecraft/class_3288$class_3289;Lnet/minecraft/class_5352;)Lnet/minecraft/class_3288; method_14456 createResourcePack + m ()I hashCode hashCode + m ()Ljava/lang/String; method_14463 getName + m ()Lnet/minecraft/class_3281; method_14460 getCompatibility + m (Z)Lnet/minecraft/class_2561; method_14461 getChatLink + m ()Z method_14465 isOrderLocked + m ()Z method_14464 isAlwaysEnabled + m ()Lnet/minecraft/class_5352; method_29483 getDecorator + m ()Lnet/minecraft/class_3288$class_3289; method_14466 getPriority + m ()Lnet/minecraft/class_3262; method_14458 getResourcePack + f Lorg/apache/logging/log4j/Logger; field_14279 LOGGER + f Lnet/minecraft/class_2561; field_14274 title + f Lnet/minecraft/class_2561; field_14275 description + f Ljava/util/function/Supplier; field_14273 resourcePackSupplier + f Ljava/lang/String; field_14272 name + f Lnet/minecraft/class_3288$class_3289; field_14277 priority + f Lnet/minecraft/class_3281; field_14278 compatibility + f Lnet/minecraft/class_3272; field_14276 BROKEN_ASSETS_FALLBACK + f Z field_14270 orderLocked + f Lnet/minecraft/class_5352; field_25346 decorator + f Z field_14271 alwaysEnabled +c net/minecraft/class_3288$class_5351 net/minecraft/resources/ResourcePackInfo$IFactory + m (Ljava/lang/String;ZLjava/util/function/Supplier;Lnet/minecraft/class_3262;Lnet/minecraft/class_3272;Lnet/minecraft/class_3288$class_3289;Lnet/minecraft/class_5352;)Lnet/minecraft/class_3288; create create +c net/minecraft/class_3288$class_3289 net/minecraft/resources/ResourcePackInfo$Priority + m (Ljava/lang/String;)Lnet/minecraft/class_3288$class_3289; valueOf valueOf + m ()Lnet/minecraft/class_3288$class_3289; method_14467 opposite + m (Ljava/util/List;Ljava/lang/Object;Ljava/util/function/Function;Z)I method_14468 insert + m ()[Lnet/minecraft/class_3288$class_3289; values values + f Lnet/minecraft/class_3288$class_3289; field_14280 TOP + f Lnet/minecraft/class_3288$class_3289; field_14281 BOTTOM + f [Lnet/minecraft/class_3288$class_3289; field_14282 $VALUES +c net/minecraft/class_5352 net/minecraft/resources/IPackNameDecorator + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_29487 func_232631_a_ + m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_29488 func_232632_a_ + m ()Lnet/minecraft/class_5352; method_29485 func_232629_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_5352; method_29486 create + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; decorate decorate + f Lnet/minecraft/class_5352; field_25347 PLAIN + f Lnet/minecraft/class_5352; field_25349 WORLD + f Lnet/minecraft/class_5352; field_25348 BUILTIN + f Lnet/minecraft/class_5352; field_25350 SERVER +c net/minecraft/class_3283 net/minecraft/resources/ResourcePackList + m (Ljava/util/Collection;)Ljava/util/stream/Stream; method_29209 func_232620_c_ + m ()Ljava/util/List; method_29211 func_232623_f_ + m (Ljava/util/Collection;)Ljava/util/List; method_29208 func_232618_b_ + m ()Ljava/util/Map; method_29212 func_232624_g_ + m ()V close close + m (Ljava/lang/String;)Z method_29207 func_232617_b_ + m (Ljava/util/Collection;)V method_14447 setEnabledPacks + m ()Ljava/util/Collection; method_14441 getAllPacks + m (Ljava/lang/String;)Lnet/minecraft/class_3288; method_14449 getPackInfo + m ()Ljava/util/Collection; method_29206 func_232616_b_ + m (Ljava/util/Map;Lnet/minecraft/class_3288;)V method_29484 func_232615_a_ + m ()V method_14445 reloadPacksFromFinders + m ()Ljava/util/Collection; method_29210 func_232621_d_ + m ()Ljava/util/Collection; method_14444 getEnabledPacks + f Ljava/util/Set; field_14227 packFinders + f Lnet/minecraft/class_3288$class_5351; field_14228 packInfoFactory + f Ljava/util/Map; field_14226 packNameToInfo + f Ljava/util/List; field_14225 enabled +c net/minecraft/class_3286 net/minecraft/resources/ServerPackFinder + m ()Lnet/minecraft/class_3262; method_14454 func_195737_a + f Lnet/minecraft/class_3268; field_14269 field_195738_a +c net/minecraft/class_3285 net/minecraft/resources/IPackFinder + m (Ljava/util/function/Consumer;Lnet/minecraft/class_3288$class_5351;)V method_14453 findPacks +c net/minecraft/class_3294 net/minecraft/resources/FallbackResourceManager + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_14473 getLocationMcmeta + m ()Lorg/apache/logging/log4j/Logger; method_14474 access$000 + m (Lnet/minecraft/class_2960;)V method_14472 checkResourcePath + m (Lnet/minecraft/class_2960;)Z method_18221 func_219541_f + m (Lnet/minecraft/class_3262;)V method_24233 addResourcePack + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_3262;)Ljava/io/InputStream; method_14476 getInputStream + f Ljava/util/List; field_14283 resourcePacks + f Lorg/apache/logging/log4j/Logger; field_14285 LOGGER + f Ljava/lang/String; field_21561 namespace + f Lnet/minecraft/class_3264; field_14284 type +c net/minecraft/class_3294$class_3295 net/minecraft/resources/FallbackResourceManager$LeakComplainerInputStream + m ()V finalize finalize + m ()V close close + f Z field_14287 isClosed + f Ljava/lang/String; field_14288 message +c net/minecraft/class_3302 net/minecraft/resources/IFutureReloadListener + m (Lnet/minecraft/class_3302$class_4045;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;Lnet/minecraft/class_3695;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_25931 reload + m ()Ljava/lang/String; method_22322 getSimpleName +c net/minecraft/class_3302$class_4045 net/minecraft/resources/IFutureReloadListener$IStage + m (Ljava/lang/Object;)Ljava/util/concurrent/CompletableFuture; method_18352 markCompleteAwaitingOthers +c net/minecraft/class_4011 net/minecraft/resources/IAsyncReloader + m ()F method_18229 estimateExecutionSpeed + m ()Ljava/util/concurrent/CompletableFuture; method_18364 onceDone + m ()Z method_18787 fullyDone + m ()V method_18849 join + m ()Z method_18786 asyncPartDone +c net/minecraft/class_4010 net/minecraft/resources/DebugAsyncReloader + m ()I method_18225 func_219580_g + m ()I method_18224 func_219579_f + m (Ljava/util/concurrent/Executor;Ljava/util/concurrent/atomic/AtomicLong;Ljava/lang/Runnable;)V method_18354 func_219574_a + m (Ljava/util/concurrent/Executor;Lnet/minecraft/class_3302$class_4045;Lnet/minecraft/class_3300;Lnet/minecraft/class_3302;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_18355 func_219578_a + m (Ljava/util/concurrent/Executor;Ljava/util/concurrent/atomic/AtomicLong;Ljava/lang/Runnable;)V method_18358 func_219577_b + m (Ljava/lang/Runnable;Ljava/util/concurrent/atomic/AtomicLong;)V method_18353 func_219581_a + m (Lnet/minecraft/class_3302;Lnet/minecraft/class_3533;Lnet/minecraft/class_3533;Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;Ljava/lang/Void;)Lnet/minecraft/class_4010$class_4046; method_18356 func_219576_a + m (Ljava/util/List;)V method_18238 logStatistics + m (Ljava/lang/Runnable;Ljava/util/concurrent/atomic/AtomicLong;)V method_18357 func_219582_b + f Lcom/google/common/base/Stopwatch; field_17919 timer + f Lorg/apache/logging/log4j/Logger; field_17918 LOGGER +c net/minecraft/class_4010$1 net/minecraft/resources/DebugAsyncReloader$1 +c net/minecraft/class_4010$class_4046 net/minecraft/resources/DebugAsyncReloader$DataPoint + m (Lnet/minecraft/class_4010$class_4046;)Lnet/minecraft/class_3696; method_18359 func_219546_a + m (Lnet/minecraft/class_4010$class_4046;)Lnet/minecraft/class_3696; method_18360 func_219545_b + m (Lnet/minecraft/class_4010$class_4046;)Ljava/lang/String; method_18363 func_219544_e + m (Lnet/minecraft/class_4010$class_4046;)Ljava/util/concurrent/atomic/AtomicLong; method_18362 func_219543_d + m (Lnet/minecraft/class_4010$class_4046;)Ljava/util/concurrent/atomic/AtomicLong; method_18361 func_219542_c + f Ljava/util/concurrent/atomic/AtomicLong; field_18040 prepareDuration + f Lnet/minecraft/class_3696; field_18038 prepareProfilerResult + f Ljava/util/concurrent/atomic/AtomicLong; field_18041 applyDuration + f Lnet/minecraft/class_3696; field_18039 applyProfilerResult + f Ljava/lang/String; field_18037 className +c net/minecraft/class_3298 net/minecraft/resources/IResource + m ()Ljava/lang/String; method_14480 getPackName + m ()Lnet/minecraft/class_2960; method_14483 getLocation + m (Lnet/minecraft/class_3270;)Ljava/lang/Object; method_14481 getMetadata + m ()Ljava/io/InputStream; method_14482 getInputStream +c net/minecraft/class_3296 net/minecraft/resources/IReloadableResourceManager + m ()V close close + m (Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/List;Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletableFuture; method_14478 reloadResourcesAndThen + m (Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;Ljava/util/List;)Lnet/minecraft/class_4011; method_18232 reloadResources + m (Lnet/minecraft/class_3302;)V method_14477 addReloadListener +c net/minecraft/class_4013 net/minecraft/resources/IResourceManagerReloadListener + m (Lnet/minecraft/class_3695;Lnet/minecraft/class_3300;)V method_29490 func_232635_a_ + m (Lnet/minecraft/class_3300;)V method_14491 onResourceManagerReload +c net/minecraft/class_3300 net/minecraft/resources/IResourceManager + m (Lnet/minecraft/class_2960;)Z method_18234 hasResource + m ()Ljava/util/stream/Stream; method_29213 getResourcePackStream + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3298; method_14486 getResource + m (Ljava/lang/String;Ljava/util/function/Predicate;)Ljava/util/Collection; method_14488 getAllResourceLocations + m (Lnet/minecraft/class_2960;)Ljava/util/List; method_14489 getAllResources + m ()Ljava/util/Set; method_14487 getResourceNamespaces +c net/minecraft/class_3300$class_5353 net/minecraft/resources/IResourceManager$Instance + m (Ljava/lang/String;)Lnet/minecraft/class_3300$class_5353; valueOf valueOf + m ()[Lnet/minecraft/class_3300$class_5353; values values + f Lnet/minecraft/class_3300$class_5353; field_25351 INSTANCE + f [Lnet/minecraft/class_3300$class_5353; field_25352 $VALUES +c net/minecraft/class_4080 net/minecraft/client/resources/ReloadListener + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Ljava/lang/Object; method_18789 prepare + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Ljava/lang/Object; method_18791 func_215270_b + m (Ljava/lang/Object;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18788 apply + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;Ljava/lang/Object;)V method_18790 func_215269_a +c net/minecraft/class_4309 net/minecraft/client/resources/JsonReloadListener + m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Ljava/util/Map; method_20731 prepare + m (Ljava/lang/String;)Z method_20730 func_223379_a + f Lcom/google/gson/Gson; field_19379 gson + f Lorg/apache/logging/log4j/Logger; field_19377 LOGGER + f Ljava/lang/String; field_19380 folder + f I field_19378 JSON_EXTENSION_LENGTH +c net/minecraft/class_3304 net/minecraft/resources/SimpleReloadableResourceManager + m (Lnet/minecraft/class_3262;)V method_14475 addResourcePack + m (Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/List;Ljava/util/concurrent/CompletableFuture;)Lnet/minecraft/class_4011; method_18240 initializeAsyncReloader + m (Ljava/util/List;)Ljava/lang/Object; method_29491 func_232637_a_ + m ()V method_14495 clearResourceNamespaces + f Ljava/util/Map; field_14293 namespaceResourceManagers + f Lnet/minecraft/class_3264; field_14294 type + f Lorg/apache/logging/log4j/Logger; field_14295 LOGGER + f Ljava/util/List; field_17935 reloadListeners + f Ljava/util/Set; field_14292 resourceNamespaces + f Ljava/util/List; field_25145 resourcePacks + f Ljava/util/List; field_17936 initTaskQueue +c net/minecraft/class_3304$class_4743 net/minecraft/resources/SimpleReloadableResourceManager$FailedPackException + m ()Lnet/minecraft/class_3262; method_24234 getPack + f Lnet/minecraft/class_3262; field_21812 pack +c net/minecraft/class_3304$class_4742 net/minecraft/resources/SimpleReloadableResourceManager$FailedPackReloader + f Lnet/minecraft/class_3304$class_4743; field_21810 exception + f Ljava/util/concurrent/CompletableFuture; field_21811 onceDone +c net/minecraft/class_4014 net/minecraft/resources/AsyncReloader + m (Ljava/util/List;)Lnet/minecraft/class_3902; method_18366 func_219558_a + m (Ljava/lang/Runnable;)V method_18371 func_219559_b + m (Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V method_18367 func_219560_a + m (Ljava/util/concurrent/Executor;Lnet/minecraft/class_3302$class_4045;Lnet/minecraft/class_3300;Lnet/minecraft/class_3302;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_18368 func_219561_a + m (Ljava/lang/Runnable;)V method_18365 func_219557_a + m (Lnet/minecraft/class_4014;)Ljava/util/Set; method_18370 func_219563_a + m (Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V method_18372 func_219564_b + m (Lnet/minecraft/class_3300;Ljava/util/List;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;)Lnet/minecraft/class_4014; method_18369 create + f Lnet/minecraft/class_3300; field_17927 resourceManager + f Ljava/util/Set; field_18044 taskSet + f I field_18047 syncCompleted + f Ljava/util/concurrent/atomic/AtomicInteger; field_18048 asyncScheduled + f I field_18046 syncScheduled + f Ljava/util/concurrent/CompletableFuture; field_18042 allAsyncCompleted + f Ljava/util/concurrent/atomic/AtomicInteger; field_18049 asyncCompleted + f I field_18045 taskCount + f Ljava/util/concurrent/CompletableFuture; field_18043 resultListFuture +c net/minecraft/class_4014$class_4047 net/minecraft/resources/AsyncReloader$IStateFactory + m (Lnet/minecraft/class_3302$class_4045;Lnet/minecraft/class_3300;Lnet/minecraft/class_3302;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; create create +c net/minecraft/class_4014$1 net/minecraft/resources/AsyncReloader$1 + m (Lnet/minecraft/class_3302;)V method_18374 func_216873_a + m (Ljava/lang/Object;Lnet/minecraft/class_3902;Ljava/lang/Object;)Ljava/lang/Object; method_18373 func_216874_a + f Ljava/util/concurrent/Executor; field_18050 field_216875_a + f Ljava/util/concurrent/CompletableFuture; field_18052 field_216877_c + f Lnet/minecraft/class_3302; field_18051 field_216876_b + f Lnet/minecraft/class_4014; field_18053 field_216878_d +c net/minecraft/class_3306 net/minecraft/resources/SimpleResource + m (Ljava/lang/Object;)Z equals equals + m ()V close close + m ()I hashCode hashCode + m ()Z method_14484 hasMetadata + f Z field_14297 wasMetadataRead + f Ljava/io/InputStream; field_14300 metadataInputStream + f Lnet/minecraft/class_2960; field_14299 location + f Lcom/google/gson/JsonObject; field_14302 metadataJson + f Ljava/io/InputStream; field_14298 inputStream + f Ljava/lang/String; field_14296 packName +c net/minecraft/class_3312 net/minecraft/server/management/PlayerProfileCache + m (I)Ljava/util/stream/Stream; method_14516 func_242117_a + m (Lnet/minecraft/class_3312$class_3313;Ljava/text/DateFormat;)Lcom/google/gson/JsonElement; method_30165 func_242119_a + m ()Z method_14514 isOnlineMode + m (Ljava/text/DateFormat;Ljava/util/List;Lcom/google/gson/JsonElement;)V method_30168 func_242122_a + m ()V method_14518 save + m ()J method_30169 func_242123_d + m (Lcom/mojang/authlib/GameProfile;)V method_14508 addEntry + m (Lcom/google/gson/JsonArray;Ljava/text/DateFormat;Lnet/minecraft/class_3312$class_3313;)V method_30166 func_242120_a + m ()Ljava/util/List; method_14517 func_242116_a + m ()Ljava/text/DateFormat; method_30170 func_242124_e + m (Ljava/lang/String;)Lcom/mojang/authlib/GameProfile; method_14515 getGameProfileForUsername + m (Lcom/google/gson/JsonElement;Ljava/text/DateFormat;)Lnet/minecraft/class_3312$class_3313; method_30167 func_242121_a + m (Lcom/mojang/authlib/GameProfileRepository;Ljava/lang/String;)Lcom/mojang/authlib/GameProfile; method_14509 lookupProfile + m (Z)V method_14510 setOnlineMode + m (Ljava/util/UUID;)Lcom/mojang/authlib/GameProfile; method_14512 getProfileByUUID + m (Lnet/minecraft/class_3312$class_3313;)V method_30164 func_242118_a + f Ljava/util/concurrent/atomic/AtomicLong; field_25724 field_242115_h + f Ljava/io/File; field_14314 usercacheFile + f Lcom/google/gson/Gson; field_14318 gson + f Lorg/apache/logging/log4j/Logger; field_25805 field_242114_a + f Z field_14313 onlineMode + f Lcom/mojang/authlib/GameProfileRepository; field_14315 profileRepo + f Ljava/util/Map; field_14310 uuidToProfileEntryMap + f Ljava/util/Map; field_14312 usernameToProfileEntryMap +c net/minecraft/class_3312$class_3313 net/minecraft/server/management/PlayerProfileCache$ProfileEntry + m (Lnet/minecraft/class_3312$class_3313;)Ljava/util/Date; method_14521 func_242127_a + m ()Ljava/util/Date; method_14520 getExpirationDate + m ()Lcom/mojang/authlib/GameProfile; method_14519 getGameProfile + m ()J method_30172 func_242128_c + m (J)V method_30171 func_242126_a + f Ljava/util/Date; field_14319 expirationDate + f J field_25726 field_242125_c + f Lcom/mojang/authlib/GameProfile; field_14321 gameProfile +c net/minecraft/class_3312$1 net/minecraft/server/management/PlayerProfileCache$1 + m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed + m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded + f Ljava/util/concurrent/atomic/AtomicReference; field_25725 field_152667_a +c net/minecraft/class_3309 net/minecraft/server/management/BanEntry + m ()Ljava/lang/String; method_14503 getBanReason + m ()Ljava/lang/String; method_14501 getBannedBy + m ()Ljava/util/Date; method_14502 getBanEndDate + m ()Lnet/minecraft/class_2561; method_14504 getDisplayName + f Ljava/lang/String; field_14304 bannedBy + f Ljava/util/Date; field_14305 banEndDate + f Ljava/lang/String; field_14307 reason + f Ljava/text/SimpleDateFormat; field_14308 DATE_FORMAT + f Ljava/util/Date; field_14306 banStartDate +c net/minecraft/class_3320 net/minecraft/server/management/IPBanEntry + m (Lcom/google/gson/JsonObject;)Ljava/lang/String; method_14532 getIPFromJson +c net/minecraft/class_3317 net/minecraft/server/management/IPBanList + m (Ljava/net/SocketAddress;)Z method_14527 isBanned + m (Ljava/lang/String;)Z method_14529 isBanned + m (Ljava/net/SocketAddress;)Ljava/lang/String; method_14526 addressToString + m (Ljava/net/SocketAddress;)Lnet/minecraft/class_3320; method_14528 getBanEntry +c net/minecraft/class_3324 net/minecraft/server/management/PlayerList + m (Ljava/lang/String;)Lnet/minecraft/class_3222; method_14566 getPlayerByUsername + m ()V method_14617 saveAllPlayerData + m (Lcom/mojang/authlib/GameProfile;)V method_14604 removeOp + m ()Lnet/minecraft/class_3337; method_14590 getWhitelistedPlayers + m (Ljava/lang/String;)Ljava/util/List; method_14559 getPlayersMatchingAddress + m ()V method_14601 tick + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_3222;Lnet/minecraft/class_3218;)V method_14615 setPlayerGameTypeBasedOnOther + m ()Lnet/minecraft/class_3335; method_14563 getBannedPlayers + m (Lnet/minecraft/class_3222;)V method_14576 updatePermissionLevel + m (Lcom/mojang/authlib/GameProfile;)Z method_14569 canSendCommands + m (Lcom/mojang/authlib/GameProfile;)Z method_14609 bypassesPlayerLimit + m ()I method_14568 getViewDistance + m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_2985; method_14578 getPlayerAdvancements + m (Lnet/minecraft/class_3222;)V method_14577 writePlayerData + m ()I method_14592 getMaxPlayers + m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_2487; method_14600 readPlayerDataFromFile + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2561;)V method_14564 sendMessageToAllTeamMembers + m ()V method_14597 removeAllPlayers + m (Lnet/minecraft/class_2535;Lnet/minecraft/class_3222;)V method_14570 initializeConnectionToPlayer + m (Z)V method_14557 setWhiteListEnabled + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_18241 func_217885_a + m ()Lnet/minecraft/server/MinecraftServer; method_14561 getServer + m ()[Ljava/lang/String; method_14584 getOppedPlayerNames + m (Lnet/minecraft/class_1934;)V method_14595 setGameType + m ()V method_14599 reloadWhitelist + m (Lnet/minecraft/class_3218;)V method_14591 func_212504_a + m ()V method_14572 reloadResources + m (I)V method_14608 setViewDistance + m ()[Ljava/lang/String; method_14560 getWhitelistedPlayerNames + m ()Lnet/minecraft/class_3317; method_14585 getBannedIPs + m (Ljava/util/UUID;)Lnet/minecraft/class_3222; method_14602 getPlayerByUUID + m ()[Ljava/lang/String; method_14580 getOnlinePlayerNames + m (Lcom/mojang/authlib/GameProfile;)Z method_14587 canJoin + m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2556;Ljava/util/UUID;)V method_14616 func_232641_a_ + m (Ljava/net/SocketAddress;Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/class_2561; method_14586 canPlayerLogin + m (Lnet/minecraft/class_3222;Z)Lnet/minecraft/class_3222; method_14556 func_232644_a_ + m (Lnet/minecraft/class_3222;I)V method_14596 sendPlayerPermissionLevel + m (Lnet/minecraft/class_3222;)V method_14594 sendInventory + m (Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/class_3222; method_14613 createPlayerForUser + m ()Lnet/minecraft/class_3326; method_14603 getOppedPlayers + m ()Ljava/util/List; method_14571 getPlayers + m (Lnet/minecraft/class_3222;)V method_14611 playerLoggedOut + m ()I method_14574 getCurrentPlayerCount + m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_3442; method_14583 getPlayerStats + m (Lnet/minecraft/class_3222;Lnet/minecraft/class_3218;)V method_14606 sendWorldInfo + m (Lnet/minecraft/class_2596;)V method_14581 sendPacketToAllPlayers + m ()Z method_14614 isWhiteListEnabled + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2561;)V method_14565 sendMessageToTeamOrAllPlayers + m (Lnet/minecraft/class_2596;Lnet/minecraft/class_5321;)V method_14589 func_232642_a_ + m (Z)V method_14607 setCommandsAllowedForAll + m ()Z method_14579 commandsAllowedForAll + m (Lnet/minecraft/class_2995;Lnet/minecraft/class_3222;)V method_14588 sendScoreboard + m (Lcom/mojang/authlib/GameProfile;)V method_14582 addOp + m (Lnet/minecraft/class_1657;DDDDLnet/minecraft/class_5321;Lnet/minecraft/class_2596;)V method_14605 sendToAllNearExcept + m ()Lnet/minecraft/class_2487; method_14567 getHostPlayerData + f Lnet/minecraft/class_3337; field_14361 whiteListedPlayers + f Lnet/minecraft/class_3335; field_14344 bannedPlayers + f Ljava/util/Map; field_14354 uuidToPlayerMap + f Lnet/minecraft/class_1934; field_14363 gameType + f Lnet/minecraft/class_3326; field_14353 ops + f I field_14347 maxPlayers + f Ljava/io/File; field_14364 FILE_IPBANS + f Ljava/text/SimpleDateFormat; field_14356 DATE_FORMAT + f I field_14357 playerPingIndex + f Ljava/io/File; field_14343 FILE_WHITELIST + f Lnet/minecraft/class_29; field_14358 playerDataManager + f Lnet/minecraft/server/MinecraftServer; field_14360 server + f Ljava/util/Map; field_14362 playerStatFiles + f I field_14359 viewDistance + f Lnet/minecraft/class_3317; field_14345 bannedIPs + f Ljava/io/File; field_14348 FILE_OPS + f Ljava/io/File; field_14355 FILE_PLAYERBANS + f Lorg/apache/logging/log4j/Logger; field_14349 LOGGER + f Lnet/minecraft/class_5455$class_5457; field_24626 field_232639_s_ + f Z field_14352 whiteListEnforced + f Ljava/util/List; field_14351 players + f Ljava/util/Map; field_14346 advancements + f Z field_14350 commandsAllowedForAll +c net/minecraft/class_3324$1 net/minecraft/server/management/PlayerList$1 + f Lnet/minecraft/class_3324; field_14365 field_177697_a +c net/minecraft/class_3321 net/minecraft/server/management/PreYggdrasilConverter + m (Ljava/io/File;)V method_14548 access$400 + m (Lnet/minecraft/server/MinecraftServer;)Z method_14539 convertOplist + m (Ljava/io/File;)V method_14534 mkdir + m (Ljava/lang/String;)Z method_14552 func_201150_a + m (Lnet/minecraft/server/MinecraftServer;)Z method_14533 convertWhitelist + m (Ljava/io/File;)V method_14549 backupConverted + m (Lnet/minecraft/server/MinecraftServer;)Z method_14540 func_219587_e + m (Lnet/minecraft/server/MinecraftServer;)Z method_14547 convertUserBanlist + m (Lnet/minecraft/server/MinecraftServer;)Z method_14545 convertIpBanlist + m (Lnet/minecraft/class_3176;)Z method_14550 convertSaveFiles + m (Ljava/io/File;Ljava/util/Map;)Ljava/util/List; method_14543 readFile + m (I)[Ljava/lang/String; method_14551 func_201149_a + m (Lnet/minecraft/server/MinecraftServer;)Z method_14542 func_219589_f + m (Lnet/minecraft/server/MinecraftServer;)Ljava/io/File; method_14536 func_219585_g + m ()Lorg/apache/logging/log4j/Logger; method_14544 access$000 + m (Lnet/minecraft/server/MinecraftServer;Ljava/util/Collection;Lcom/mojang/authlib/ProfileLookupCallback;)V method_14538 lookupNames + m ()Z method_14541 hasUnconvertableFiles + m (Ljava/lang/String;Ljava/util/Date;)Ljava/util/Date; method_14535 parseDate + m (Lnet/minecraft/server/MinecraftServer;Ljava/lang/String;)Ljava/util/UUID; method_14546 convertMobOwnerIfNeeded + m (Ljava/lang/String;Ljava/util/Date;)Ljava/util/Date; method_14537 access$200 + f Lorg/apache/logging/log4j/Logger; field_14326 LOGGER + f Ljava/io/File; field_14324 OLD_IPBAN_FILE + f Ljava/io/File; field_14325 OLD_WHITELIST_FILE + f Ljava/io/File; field_14328 OLD_PLAYERBAN_FILE + f Ljava/io/File; field_14327 OLD_OPS_FILE +c net/minecraft/class_3321$class_3322 net/minecraft/server/management/PreYggdrasilConverter$ConversionError +c net/minecraft/class_3321$1 net/minecraft/server/management/PreYggdrasilConverter$1 + m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed + m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded + f Lnet/minecraft/class_3335; field_14329 field_201139_c + f Ljava/util/Map; field_14330 field_201138_b + f Lnet/minecraft/server/MinecraftServer; field_14331 field_201137_a +c net/minecraft/class_3321$3 net/minecraft/server/management/PreYggdrasilConverter$3 + m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded + m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed + f Lnet/minecraft/class_3337; field_14334 field_201141_b + f Lnet/minecraft/server/MinecraftServer; field_14335 field_152737_a +c net/minecraft/class_3321$2 net/minecraft/server/management/PreYggdrasilConverter$2 + m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded + m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed + f Lnet/minecraft/server/MinecraftServer; field_14332 field_152734_a + f Lnet/minecraft/class_3326; field_14333 field_201140_b +c net/minecraft/class_3321$5 net/minecraft/server/management/PreYggdrasilConverter$5 + m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded + m (Ljava/io/File;Ljava/lang/String;Ljava/lang/String;)V method_14553 renamePlayerFile + m (Lcom/mojang/authlib/GameProfile;)Ljava/lang/String; method_14554 getFileNameForProfile + m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed + f Ljava/io/File; field_14339 field_201146_c + f [Ljava/lang/String; field_14340 field_201148_e + f Ljava/io/File; field_14338 field_201147_d + f Ljava/io/File; field_14342 field_201145_b + f Lnet/minecraft/class_3176; field_14341 field_152741_a +c net/minecraft/class_3321$4 net/minecraft/server/management/PreYggdrasilConverter$4 + m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed + m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded + f Ljava/util/List; field_14337 field_201142_b + f Lnet/minecraft/server/MinecraftServer; field_14336 field_152739_a +c net/minecraft/class_3327 net/minecraft/server/management/OpEntry + m ()Z method_14622 bypassesPlayerLimit + m ()I method_14623 getPermissionLevel + m (Lcom/google/gson/JsonObject;)Lcom/mojang/authlib/GameProfile; method_14621 constructProfile + f Z field_14367 bypassesPlayerLimit + f I field_14366 permissionLevel +c net/minecraft/class_3326 net/minecraft/server/management/OpList + m (Lcom/mojang/authlib/GameProfile;)Ljava/lang/String; method_14619 getObjectKey + m (Lcom/mojang/authlib/GameProfile;)Z method_14620 bypassesPlayerLimit +c net/minecraft/class_3331 net/minecraft/server/management/UserList + m (Ljava/lang/Object;)Ljava/lang/String; method_14634 getObjectKey + m (Ljava/lang/Object;)Z method_14644 hasEntry + m ()Ljava/util/Collection; method_14632 getEntries + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3330; method_14642 createEntry + m (Ljava/lang/Object;)V method_14635 removeEntry + m (Ljava/lang/Object;)Lnet/minecraft/class_3330; method_14640 getEntry + m ()[Ljava/lang/String; method_14636 getKeys + m ()Ljava/io/File; method_14643 getSaveFile + m ()Z method_14641 isEmpty + m (Lnet/minecraft/class_3330;)V method_14638 removeEntry + m ()V method_14629 writeChanges + m (Lnet/minecraft/class_3330;)V method_14633 addEntry + m ()V method_14630 readSavedFile + m (Lnet/minecraft/class_3330;)Lcom/google/gson/JsonObject; method_24897 func_232646_c_ + m ()V method_14631 removeExpired + f Lcom/google/gson/Gson; field_14374 field_232645_b_ + f Lorg/apache/logging/log4j/Logger; field_14373 LOGGER + f Ljava/io/File; field_14370 saveFile + f Ljava/util/Map; field_14371 values +c net/minecraft/class_3330 net/minecraft/server/management/UserListEntry + m (Lcom/google/gson/JsonObject;)V method_24896 onSerialization + m ()Ljava/lang/Object; method_14626 getValue + m ()Z method_14627 hasBanExpired + f Ljava/lang/Object; field_14368 value +c net/minecraft/class_3336 net/minecraft/server/management/ProfileBanEntry + m (Lcom/google/gson/JsonObject;)Lcom/mojang/authlib/GameProfile; method_14651 toGameProfile +c net/minecraft/class_3335 net/minecraft/server/management/BanList + m (Lcom/mojang/authlib/GameProfile;)Ljava/lang/String; method_14649 getObjectKey + m (Lcom/mojang/authlib/GameProfile;)Z method_14650 isBanned +c net/minecraft/class_3337 net/minecraft/server/management/WhiteList + m (Lcom/mojang/authlib/GameProfile;)Ljava/lang/String; method_14652 getObjectKey + m (Lcom/mojang/authlib/GameProfile;)Z method_14653 isWhitelisted +c net/minecraft/class_3340 net/minecraft/server/management/WhitelistEntry + m (Lcom/google/gson/JsonObject;)Lcom/mojang/authlib/GameProfile; method_14656 gameProfileFromJsonObject +c net/minecraft/class_3347 net/minecraft/network/rcon/RConUtils + m (B)Ljava/lang/String; method_14699 getByteAsHexString + m ([BII)I method_14698 getBytesAsBEint + m ([BII)I method_14696 getBytesAsLEInt + m ([BII)Ljava/lang/String; method_14697 getBytesAsString + m ([BI)I method_14695 getRemainingBytesAsLEInt + f [C field_14398 HEX_DIGITS +c net/minecraft/class_3345 net/minecraft/network/rcon/RConOutputStream + m ()[B method_14689 toByteArray + m (S)V method_14691 writeShort + m ()V method_14693 reset + m (I)V method_14692 writeInt + m (Ljava/lang/String;)V method_14690 writeString + m ([B)V method_14694 writeByteArray + f Ljava/io/DataOutputStream; field_14396 output + f Ljava/io/ByteArrayOutputStream; field_14395 byteArrayOutput +c net/minecraft/class_3350 net/minecraft/network/rcon/RConConsoleSource + m ()Lnet/minecraft/class_2168; method_14700 getCommandSource + m ()V method_14702 resetLog + m ()Ljava/lang/String; method_14701 getLogContents + f Lnet/minecraft/server/MinecraftServer; field_14405 server + f Lnet/minecraft/class_2585; field_25146 field_232647_b_ + f Ljava/lang/StringBuffer; field_14404 buffer +c net/minecraft/class_3364 net/minecraft/network/rcon/QueryThread + m (Ljava/net/DatagramPacket;)Ljava/lang/Boolean; method_14753 verifyClientAuth + m (Ljava/net/DatagramPacket;)[B method_14747 createQueryResponse + m (Ljava/net/SocketAddress;)[B method_14748 getRequestID + m ([BLjava/net/DatagramPacket;)V method_14751 sendResponsePacket + m ()V method_14746 cleanQueryClientsMap + m (Lnet/minecraft/class_2994;)Lnet/minecraft/class_3364; method_30737 func_242129_a + m ()Z method_14754 initQuerySystem + m ()V run run + m (Ljava/lang/Exception;)V method_14752 stopWithException + m (JLnet/minecraft/class_3364$class_3365;)Z method_27174 func_232650_a_ + m (Ljava/net/DatagramPacket;)V method_14749 sendAuthChallenge + m (Ljava/net/DatagramPacket;)Z method_14750 parseIncomingPacket + f J field_14450 lastQueryResponseTime + f Ljava/lang/String; field_14445 serverMotd + f [B field_14452 buffer + f Lorg/apache/logging/log4j/Logger; field_23963 field_232648_d_ + f J field_14443 lastAuthCheckTime + f Ljava/lang/String; field_14454 serverHostname + f Lnet/minecraft/class_3345; field_14446 output + f I field_14442 queryPort + f Ljava/lang/String; field_14444 queryHostname + f I field_14457 serverPort + f Ljava/util/Map; field_14453 queryClients + f I field_14456 maxPlayers + f Ljava/net/DatagramSocket; field_14449 querySocket + f Ljava/lang/String; field_14447 worldName + f Lnet/minecraft/class_2994; field_23964 field_232649_r_ +c net/minecraft/class_3364$class_3365 net/minecraft/network/rcon/QueryThread$Auth + m ()[B method_14758 getRequestId + m (J)Ljava/lang/Boolean; method_14755 hasExpired + m ()I method_14756 getRandomChallenge + m ()[B method_14757 getChallengeValue + f Ljava/lang/String; field_14462 requestIdAsString + f J field_14459 timestamp + f I field_14458 randomChallenge + f [B field_14460 requestId + f [B field_14461 challengeValue +c net/minecraft/class_3359 net/minecraft/network/rcon/RConThread + m ()V method_18050 func_219591_b + m ()Z method_14728 func_241832_a + m ()Z method_14731 isRunning + f Ljava/util/concurrent/atomic/AtomicInteger; field_14428 THREAD_ID + f Ljava/lang/String; field_14424 threadName + f Lorg/apache/logging/log4j/Logger; field_14430 LOGGER + f Z field_14431 running + f Ljava/lang/Thread; field_14423 rconThread +c net/minecraft/class_3408 net/minecraft/network/rcon/MainThread + m (Ljava/net/ServerSocket;)V method_27176 func_232655_a_ + m (Lnet/minecraft/class_2994;)Lnet/minecraft/class_3408; method_30738 func_242130_a + m ()V run run + m ()V method_14820 cleanClientThreadsMap + m (Lnet/minecraft/class_3389;)Z method_27175 func_232654_a_ + f Ljava/net/ServerSocket; field_14511 serverSocket + f Ljava/util/List; field_14514 clientThreads + f Lnet/minecraft/class_2994; field_23967 field_232653_j_ + f Ljava/lang/String; field_14512 rconPassword + f Lorg/apache/logging/log4j/Logger; field_23966 field_232652_d_ +c net/minecraft/class_3389 net/minecraft/network/rcon/ClientThread + m ()V run run + m ()V method_14788 closeSocket + m (IILjava/lang/String;)V method_14790 sendResponse + m (ILjava/lang/String;)V method_14789 sendMultipacketResponse + m ()V method_14787 sendLoginFailedResponse + f Lorg/apache/logging/log4j/Logger; field_14491 LOGGER + f Ljava/net/Socket; field_14489 clientSocket + f Z field_14488 loggedIn + f [B field_14490 buffer + f Lnet/minecraft/class_2994; field_23965 field_232651_i_ + f Ljava/lang/String; field_14492 rconPassword +c net/minecraft/class_5195 net/minecraft/client/audio/BackgroundMusicSelector + m (Lnet/minecraft/class_5195;)Ljava/lang/Boolean; method_28127 func_232662_a_ + m (Lnet/minecraft/class_5195;)Ljava/lang/Integer; method_28129 func_232665_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28128 func_232663_a_ + m ()Z method_27282 shouldReplaceCurrentMusic + m ()I method_27280 getMinDelay + m (Lnet/minecraft/class_5195;)Ljava/lang/Integer; method_28130 func_232667_c_ + m ()Lnet/minecraft/class_3414; method_27279 getSoundEvent + m ()I method_27281 getMaxDelay + m (Lnet/minecraft/class_5195;)Lnet/minecraft/class_3414; method_28131 func_232669_d_ + f Lnet/minecraft/class_3414; field_24057 soundEvent + f Z field_24060 replaceCurrentMusic + f I field_24058 minDelay + f I field_24059 maxDelay + f Lcom/mojang/serialization/Codec; field_24627 CODEC +c net/minecraft/class_3414 net/minecraft/util/SoundEvent + m ()Lnet/minecraft/class_2960; method_14833 getName + m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_2960; method_28132 func_232679_a_ + f Lnet/minecraft/class_2960; field_14533 name + f Lcom/mojang/serialization/Codec; field_24628 CODEC +c net/minecraft/class_1143 net/minecraft/client/audio/BackgroundMusicTracks + m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_5195; method_27283 getDefaultBackgroundMusicSelector + f Lnet/minecraft/class_5195; field_5580 DRAGON_FIGHT_MUSIC + f Lnet/minecraft/class_5195; field_5578 CREDITS_MUSIC + f Lnet/minecraft/class_5195; field_5586 WORLD_MUSIC + f Lnet/minecraft/class_5195; field_5581 CREATIVE_MODE_MUSIC + f Lnet/minecraft/class_5195; field_5585 MAIN_MENU_MUSIC + f Lnet/minecraft/class_5195; field_5576 UNDER_WATER_MUSIC + f Lnet/minecraft/class_5195; field_5583 END_MUSIC +c net/minecraft/class_3419 net/minecraft/util/SoundCategory + m (Ljava/lang/String;)Lnet/minecraft/class_3419; valueOf valueOf + m ()Ljava/lang/String; method_14840 getName + m ()[Lnet/minecraft/class_3419; values values + f [Lnet/minecraft/class_3419; field_15255 $VALUES + f Lnet/minecraft/class_3419; field_15250 MASTER + f Ljava/util/Map; field_15257 SOUND_CATEGORIES + f Lnet/minecraft/class_3419; field_15246 VOICE + f Lnet/minecraft/class_3419; field_15256 AMBIENT + f Lnet/minecraft/class_3419; field_15248 PLAYERS + f Lnet/minecraft/class_3419; field_15254 NEUTRAL + f Lnet/minecraft/class_3419; field_15251 HOSTILE + f Ljava/lang/String; field_15249 name + f Lnet/minecraft/class_3419; field_15245 BLOCKS + f Lnet/minecraft/class_3419; field_15252 WEATHER + f Lnet/minecraft/class_3419; field_15247 RECORDS + f Lnet/minecraft/class_3419; field_15253 MUSIC +c net/minecraft/class_3417 net/minecraft/util/SoundEvents + m (Ljava/lang/String;)Lnet/minecraft/class_3414; method_14838 register + f Lnet/minecraft/class_3414; field_17710 UI_STONECUTTER_TAKE_RESULT + f Lnet/minecraft/class_3414; field_23798 ENTITY_STRIDER_SADDLE + f Lnet/minecraft/class_3414; field_14646 BLOCK_LADDER_FALL + f Lnet/minecraft/class_3414; field_15211 BLOCK_GRAVEL_BREAK + f Lnet/minecraft/class_3414; field_15194 BLOCK_SLIME_BLOCK_BREAK + f Lnet/minecraft/class_3414; field_14929 ENTITY_RAVAGER_STEP + f Lnet/minecraft/class_3414; field_19147 ENTITY_EVOKER_CELEBRATE + f Lnet/minecraft/class_3414; field_14907 ENTITY_CREEPER_DEATH + f Lnet/minecraft/class_3414; field_15149 ENTITY_PHANTOM_HURT + f Lnet/minecraft/class_3414; field_21924 BLOCK_NETHERRACK_BREAK + f Lnet/minecraft/class_3414; field_14562 ENTITY_ZOMBIE_ATTACK_WOODEN_DOOR + f Lnet/minecraft/class_3414; field_20677 ENTITY_VILLAGER_WORK_LIBRARIAN + f Lnet/minecraft/class_3414; field_15083 ENTITY_COD_AMBIENT + f Lnet/minecraft/class_3414; field_21871 BLOCK_BASALT_FALL + f Lnet/minecraft/class_3414; field_21899 BLOCK_NETHER_SPROUT_STEP + f Lnet/minecraft/class_3414; field_14789 ENTITY_LLAMA_SPIT + f Lnet/minecraft/class_3414; field_14970 ENTITY_BLAZE_SHOOT + f Lnet/minecraft/class_3414; field_18268 ENTITY_MOOSHROOM_MILK + f Lnet/minecraft/class_3414; field_14892 ENTITY_HUSK_DEATH + f Lnet/minecraft/class_3414; field_15121 ENTITY_SQUID_SQUIRT + f Lnet/minecraft/class_3414; field_15160 ENTITY_SHULKER_DEATH + f Lnet/minecraft/class_3414; field_21074 BLOCK_HONEY_BLOCK_SLIDE + f Lnet/minecraft/class_3414; field_14660 ENTITY_FISHING_BOBBER_SPLASH + f Lnet/minecraft/class_3414; field_16509 BLOCK_SCAFFOLDING_BREAK + f Lnet/minecraft/class_3414; field_19150 ENTITY_PILLAGER_CELEBRATE + f Lnet/minecraft/class_3414; field_15107 ENTITY_POLAR_BEAR_HURT + f Lnet/minecraft/class_3414; field_24634 ENTITY_PARROT_IMITATE_HOGLIN + f Lnet/minecraft/class_3414; field_15042 ENTITY_WOLF_SHAKE + f Lnet/minecraft/class_3414; field_14661 ENTITY_DONKEY_ANGRY + f Lnet/minecraft/class_3414; field_14568 ITEM_BUCKET_FILL_FISH + f Lnet/minecraft/class_3414; field_15076 ENTITY_PANDA_SNEEZE + f Lnet/minecraft/class_3414; field_14837 MUSIC_DRAGON + f Lnet/minecraft/class_3414; field_15025 BLOCK_WET_GRASS_PLACE + f Lnet/minecraft/class_3414; field_14806 ITEM_TRIDENT_RIPTIDE_2 + f Lnet/minecraft/class_3414; field_21930 BLOCK_ANCIENT_DEBRIS_HIT + f Lnet/minecraft/class_3414; field_15003 ENTITY_COD_DEATH + f Lnet/minecraft/class_3414; field_15009 ENTITY_BAT_AMBIENT + f Lnet/minecraft/class_3414; field_21900 BLOCK_NETHER_SPROUT_PLACE + f Lnet/minecraft/class_3414; field_14795 ENTITY_LLAMA_STEP + f Lnet/minecraft/class_3414; field_17711 UI_STONECUTTER_SELECT_RECIPE + f Lnet/minecraft/class_3414; field_14849 ENTITY_SLIME_DEATH_SMALL + f Lnet/minecraft/class_3414; field_14775 BLOCK_LADDER_HIT + f Lnet/minecraft/class_3414; field_15156 BLOCK_GRAVEL_FALL + f Lnet/minecraft/class_3414; field_14560 BLOCK_SLIME_BLOCK_FALL + f Lnet/minecraft/class_3414; field_14822 ENTITY_RAVAGER_STUNNED + f Lnet/minecraft/class_3414; field_16510 BLOCK_SCAFFOLDING_FALL + f Lnet/minecraft/class_3414; field_15049 ENTITY_PILLAGER_DEATH + f Lnet/minecraft/class_3414; field_14599 ENTITY_EVOKER_DEATH + f Lnet/minecraft/class_3414; field_15192 ENTITY_CREEPER_HURT + f Lnet/minecraft/class_3414; field_15238 ENTITY_PHANTOM_SWOOP + f Lnet/minecraft/class_3414; field_21925 BLOCK_NETHERRACK_STEP + f Lnet/minecraft/class_3414; field_14670 ENTITY_ZOMBIE_ATTACK_IRON_DOOR + f Lnet/minecraft/class_3414; field_20678 ENTITY_VILLAGER_WORK_MASON + f Lnet/minecraft/class_3414; field_14886 ENTITY_BOAT_PADDLE_LAND + f Lnet/minecraft/class_3414; field_18269 ENTITY_MOOSHROOM_SUSPICIOUS_MILK + f Lnet/minecraft/class_3414; field_15196 ENTITY_HUSK_HURT + f Lnet/minecraft/class_3414; field_15026 BLOCK_STONE_BREAK + f Lnet/minecraft/class_3414; field_15229 ENTITY_SHULKER_HURT + f Lnet/minecraft/class_3414; field_21075 BLOCK_HONEY_BLOCK_STEP + f Lnet/minecraft/class_3414; field_14596 ENTITY_FISHING_BOBBER_THROW + f Lnet/minecraft/class_3414; field_15018 ENTITY_GENERIC_SMALL_FALL + f Lnet/minecraft/class_3414; field_15206 BLOCK_ENDER_CHEST_CLOSE + f Lnet/minecraft/class_3414; field_15036 ENTITY_POLAR_BEAR_STEP + f Lnet/minecraft/class_3414; field_15185 ENTITY_PARROT_IMITATE_HUSK + f Lnet/minecraft/class_3414; field_14772 ENTITY_WOLF_STEP + f Lnet/minecraft/class_3414; field_14598 ENTITY_DONKEY_CHEST + f Lnet/minecraft/class_3414; field_15202 ITEM_BUCKET_FILL_LAVA + f Lnet/minecraft/class_3414; field_14604 ENTITY_PANDA_AMBIENT + f Lnet/minecraft/class_3414; field_14631 MUSIC_END + f Lnet/minecraft/class_3414; field_14774 BLOCK_WET_GRASS_STEP + f Lnet/minecraft/class_3414; field_14717 ITEM_TRIDENT_RIPTIDE_3 + f Lnet/minecraft/class_3414; field_14918 ENTITY_COD_FLOP + f Lnet/minecraft/class_3414; field_14911 ENTITY_BAT_DEATH + f Lnet/minecraft/class_3414; field_21901 BLOCK_NETHER_SPROUT_HIT + f Lnet/minecraft/class_3414; field_14554 ENTITY_LLAMA_SWAG + f Lnet/minecraft/class_3414; field_15195 UI_TOAST_CHALLENGE_COMPLETE + f Lnet/minecraft/class_3414; field_14620 ENTITY_SLIME_HURT_SMALL + f Lnet/minecraft/class_3414; field_14853 BLOCK_LADDER_PLACE + f Lnet/minecraft/class_3414; field_14697 BLOCK_GRAVEL_HIT + f Lnet/minecraft/class_3414; field_20615 ITEM_HONEY_BOTTLE_DRINK + f Lnet/minecraft/class_3414; field_15145 ITEM_FLINTANDSTEEL_USE + f Lnet/minecraft/class_3414; field_16506 BLOCK_SCAFFOLDING_HIT + f Lnet/minecraft/class_3414; field_15159 ENTITY_PILLAGER_HURT + f Lnet/minecraft/class_3414; field_14692 ENTITY_EVOKER_FANGS_ATTACK + f Lnet/minecraft/class_3414; field_15057 ENTITY_CREEPER_PRIMED + f Lnet/minecraft/class_3414; field_14615 ENTITY_PIG_AMBIENT + f Lnet/minecraft/class_3414; field_21926 BLOCK_NETHERRACK_PLACE + f Lnet/minecraft/class_3414; field_14742 ENTITY_ZOMBIE_BREAK_WOODEN_DOOR + f Lnet/minecraft/class_3414; field_20679 ENTITY_VILLAGER_WORK_SHEPHERD + f Lnet/minecraft/class_3414; field_14736 ENTITY_WITCH_AMBIENT + f Lnet/minecraft/class_3414; field_15001 ITEM_TRIDENT_THROW + f Lnet/minecraft/class_3414; field_15171 ENTITY_BOAT_PADDLE_WATER + f Lnet/minecraft/class_3414; field_14705 ENTITY_MOOSHROOM_SHEAR + f Lnet/minecraft/class_3414; field_15046 ENTITY_HUSK_STEP + f Lnet/minecraft/class_3414; field_14954 BLOCK_STONE_BUTTON_CLICK_OFF + f Lnet/minecraft/class_3414; field_15135 ENTITY_SHULKER_HURT_CLOSED + f Lnet/minecraft/class_3414; field_14737 ENTITY_GENERIC_SPLASH + f Lnet/minecraft/class_3414; field_14952 BLOCK_ENDER_CHEST_OPEN + f Lnet/minecraft/class_3414; field_14937 ENTITY_POLAR_BEAR_WARNING + f Lnet/minecraft/class_3414; field_15064 ENTITY_PARROT_IMITATE_ILLUSIONER + f Lnet/minecraft/class_3414; field_14807 ENTITY_WOLF_WHINE + f Lnet/minecraft/class_3414; field_14827 ENTITY_DONKEY_DEATH + f Lnet/minecraft/class_3414; field_17483 BLOCK_CAMPFIRE_CRACKLE + f Lnet/minecraft/class_3414; field_15208 ENTITY_PANDA_DEATH + f Lnet/minecraft/class_3414; field_14681 MUSIC_GAME + f Lnet/minecraft/class_3414; field_14850 ENTITY_ZOMBIE_CONVERTED_TO_DROWNED + f Lnet/minecraft/class_3414; field_20680 ENTITY_VILLAGER_WORK_TOOLSMITH + f Lnet/minecraft/class_3414; field_14851 ENTITY_COD_HURT + f Lnet/minecraft/class_3414; field_14746 ENTITY_BAT_HURT + f Lnet/minecraft/class_3414; field_21902 BLOCK_NETHER_SPROUT_FALL + f Lnet/minecraft/class_3414; field_14889 ENTITY_MAGMA_CUBE_DEATH_SMALL + f Lnet/minecraft/class_3414; field_14561 UI_TOAST_IN + f Lnet/minecraft/class_3414; field_14694 ENTITY_SLIME_JUMP_SMALL + f Lnet/minecraft/class_3414; field_14947 ENTITY_HORSE_AMBIENT + f Lnet/minecraft/class_3414; field_18055 ENTITY_FOX_AGGRO + f Lnet/minecraft/class_3414; field_16507 BLOCK_SCAFFOLDING_PLACE + f Lnet/minecraft/class_3414; field_15228 BLOCK_PISTON_CONTRACT + f Lnet/minecraft/class_3414; field_15111 ENTITY_EVOKER_HURT + f Lnet/minecraft/class_3414; field_17610 BLOCK_CROP_BREAK + f Lnet/minecraft/class_3414; field_14689 ENTITY_PIG_DEATH + f Lnet/minecraft/class_3414; field_21927 BLOCK_NETHERRACK_HIT + f Lnet/minecraft/class_3414; field_24629 ENTITY_DONKEY_EAT + f Lnet/minecraft/class_3414; field_15051 ENTITY_CAT_AMBIENT + f Lnet/minecraft/class_3414; field_15106 ENTITY_PANDA_EAT + f Lnet/minecraft/class_3414; field_15129 MUSIC_MENU + f Lnet/minecraft/class_3414; field_19153 ENTITY_WITCH_CELEBRATE + f Lnet/minecraft/class_3414; field_14896 ITEM_TRIDENT_THUNDER + f Lnet/minecraft/class_3414; field_21872 BLOCK_BONE_BLOCK_BREAK + f Lnet/minecraft/class_3414; field_14614 ENTITY_MULE_AMBIENT + f Lnet/minecraft/class_3414; field_14644 ENTITY_ILLUSIONER_AMBIENT + f Lnet/minecraft/class_3414; field_14791 BLOCK_STONE_BUTTON_CLICK_ON + f Lnet/minecraft/class_3414; field_15017 ENTITY_SHULKER_OPEN + f Lnet/minecraft/class_3414; field_14640 BLOCK_SLIME_BLOCK_HIT + f Lnet/minecraft/class_3414; field_14733 ENTITY_RAVAGER_ROAR + f Lnet/minecraft/class_3414; field_14818 ENTITY_GENERIC_SWIM + f Lnet/minecraft/class_3414; field_15024 ENTITY_ENDER_DRAGON_AMBIENT + f Lnet/minecraft/class_3414; field_14802 BLOCK_PORTAL_AMBIENT + f Lnet/minecraft/class_3414; field_14963 ENTITY_PARROT_IMITATE_MAGMA_CUBE + f Lnet/minecraft/class_3414; field_14541 BLOCK_WOODEN_DOOR_CLOSE + f Lnet/minecraft/class_3414; field_14908 ENTITY_EVOKER_PREPARE_ATTACK + f Lnet/minecraft/class_3414; field_17611 ITEM_CROP_PLANT + f Lnet/minecraft/class_3414; field_14750 ENTITY_PIG_HURT + f Lnet/minecraft/class_3414; field_21928 BLOCK_NETHERRACK_FALL + f Lnet/minecraft/class_3414; field_14930 ENTITY_ZOMBIE_DEATH + f Lnet/minecraft/class_3414; field_20681 ENTITY_VILLAGER_WORK_WEAPONSMITH + f Lnet/minecraft/class_3414; field_14762 BLOCK_COMPARATOR_CLICK + f Lnet/minecraft/class_3414; field_14845 ENTITY_BAT_LOOP + f Lnet/minecraft/class_3414; field_21936 BLOCK_ANCIENT_DEBRIS_FALL + f Lnet/minecraft/class_3414; field_21903 BLOCK_FUNGUS_BREAK + f Lnet/minecraft/class_3414; field_23194 BLOCK_LODESTONE_BREAK + f Lnet/minecraft/class_3414; field_14641 UI_TOAST_OUT + f Lnet/minecraft/class_3414; field_15148 ENTITY_SLIME_SQUISH_SMALL + f Lnet/minecraft/class_3414; field_14723 BLOCK_STONE_FALL + f Lnet/minecraft/class_3414; field_15000 ENTITY_SHULKER_SHOOT + f Lnet/minecraft/class_3414; field_15043 ENTITY_HORSE_ANGRY + f Lnet/minecraft/class_3414; field_18056 ENTITY_FOX_AMBIENT + f Lnet/minecraft/class_3414; field_16508 BLOCK_SCAFFOLDING_STEP + f Lnet/minecraft/class_3414; field_15134 BLOCK_PISTON_EXTEND + f Lnet/minecraft/class_3414; field_14781 ENTITY_DONKEY_HURT + f Lnet/minecraft/class_3414; field_16440 ENTITY_CAT_STRAY_AMBIENT + f Lnet/minecraft/class_3414; field_15035 ENTITY_PANDA_STEP + f Lnet/minecraft/class_3414; field_23793 MUSIC_NETHER_BASALT_DELTAS + f Lnet/minecraft/class_3414; field_14820 ENTITY_WITCH_DEATH + f Lnet/minecraft/class_3414; field_14859 BLOCK_TRIPWIRE_ATTACH + f Lnet/minecraft/class_3414; field_21873 BLOCK_BONE_BLOCK_FALL + f Lnet/minecraft/class_3414; field_24631 ENTITY_MULE_ANGRY + f Lnet/minecraft/class_3414; field_14545 ENTITY_ILLUSIONER_CAST_SPELL + f Lnet/minecraft/class_3414; field_14948 BLOCK_LADDER_STEP + f Lnet/minecraft/class_3414; field_14609 BLOCK_GRAVEL_PLACE + f Lnet/minecraft/class_3414; field_14788 BLOCK_SLIME_BLOCK_PLACE + f Lnet/minecraft/class_3414; field_24071 BLOCK_NETHER_GOLD_ORE_BREAK + f Lnet/minecraft/class_3414; field_14566 ENTITY_GHAST_AMBIENT + f Lnet/minecraft/class_3414; field_14773 ENTITY_ENDER_DRAGON_DEATH + f Lnet/minecraft/class_3414; field_14716 BLOCK_PORTAL_TRAVEL + f Lnet/minecraft/class_3414; field_14957 ENTITY_PARROT_IMITATE_PHANTOM + f Lnet/minecraft/class_3414; field_14664 BLOCK_WOODEN_DOOR_OPEN + f Lnet/minecraft/class_3414; field_15193 ENTITY_EVOKER_PREPARE_SUMMON + f Lnet/minecraft/class_3414; field_14636 ITEM_CROSSBOW_HIT + f Lnet/minecraft/class_3414; field_14824 ENTITY_PIG_SADDLE + f Lnet/minecraft/class_3414; field_15047 BLOCK_NOTE_BLOCK_BASEDRUM + f Lnet/minecraft/class_3414; field_15023 ENTITY_ZOMBIE_DESTROY_EGG + f Lnet/minecraft/class_3414; field_14735 ENTITY_VINDICATOR_AMBIENT + f Lnet/minecraft/class_3414; field_14542 BLOCK_ANVIL_BREAK + f Lnet/minecraft/class_3414; field_17606 BLOCK_COMPOSTER_EMPTY + f Lnet/minecraft/class_3414; field_14610 ENTITY_BAT_TAKEOFF + f Lnet/minecraft/class_3414; field_21904 BLOCK_FUNGUS_STEP + f Lnet/minecraft/class_3414; field_23195 BLOCK_LODESTONE_STEP + f Lnet/minecraft/class_3414; field_15063 ENTITY_MULE_CHEST + f Lnet/minecraft/class_3414; field_15153 ENTITY_ILLUSIONER_DEATH + f Lnet/minecraft/class_3414; field_14658 BLOCK_STONE_HIT + f Lnet/minecraft/class_3414; field_14915 ENTITY_SHULKER_TELEPORT + f Lnet/minecraft/class_3414; field_15141 ENTITY_HORSE_ARMOR + f Lnet/minecraft/class_3414; field_18058 ENTITY_FOX_BITE + f Lnet/minecraft/class_3414; field_14603 ENTITY_SHEEP_AMBIENT + f Lnet/minecraft/class_3414; field_15016 ENTITY_PLAYER_ATTACK_CRIT + f Lnet/minecraft/class_3414; field_15080 BLOCK_WOODEN_TRAPDOOR_CLOSE + f Lnet/minecraft/class_3414; field_15030 ENTITY_DROWNED_AMBIENT + f Lnet/minecraft/class_3414; field_14971 ENTITY_CAT_DEATH + f Lnet/minecraft/class_3414; field_14936 ENTITY_PANDA_CANT_BREED + f Lnet/minecraft/class_3414; field_23794 MUSIC_NETHER_NETHER_WASTES + f Lnet/minecraft/class_3414; field_14565 ENTITY_WITCH_DRINK + f Lnet/minecraft/class_3414; field_14787 BLOCK_TRIPWIRE_CLICK_OFF + f Lnet/minecraft/class_3414; field_21874 BLOCK_BONE_BLOCK_HIT + f Lnet/minecraft/class_3414; field_17745 BLOCK_LANTERN_BREAK + f Lnet/minecraft/class_3414; field_14798 BLOCK_GRAVEL_STEP + f Lnet/minecraft/class_3414; field_15180 BLOCK_SLIME_BLOCK_STEP + f Lnet/minecraft/class_3414; field_24072 BLOCK_NETHER_GOLD_ORE_FALL + f Lnet/minecraft/class_3414; field_14648 ENTITY_GHAST_DEATH + f Lnet/minecraft/class_3414; field_14803 ENTITY_DRAGON_FIREBALL_EXPLODE + f Lnet/minecraft/class_3414; field_14669 BLOCK_PORTAL_TRIGGER + f Lnet/minecraft/class_3414; field_24635 ENTITY_PARROT_IMITATE_PIGLIN + f Lnet/minecraft/class_3414; field_14665 BLOCK_ANVIL_DESTROY + f Lnet/minecraft/class_3414; field_15058 ENTITY_EVOKER_PREPARE_WOLOLO + f Lnet/minecraft/class_3414; field_14626 ITEM_CROSSBOW_LOADING_END + f Lnet/minecraft/class_3414; field_14894 ENTITY_PIG_STEP + f Lnet/minecraft/class_3414; field_14624 BLOCK_NOTE_BLOCK_BASS + f Lnet/minecraft/class_3414; field_15154 ENTITY_ZOMBIE_HORSE_AMBIENT + f Lnet/minecraft/class_3414; field_19151 ENTITY_VINDICATOR_CELEBRATE + f Lnet/minecraft/class_3414; field_17607 BLOCK_COMPOSTER_FILL + f Lnet/minecraft/class_3414; field_14703 BLOCK_BEACON_ACTIVATE + f Lnet/minecraft/class_3414; field_21875 BLOCK_BONE_BLOCK_PLACE + f Lnet/minecraft/class_3414; field_15158 ENTITY_MULE_DEATH + f Lnet/minecraft/class_3414; field_15223 ENTITY_ILLUSIONER_HURT + f Lnet/minecraft/class_3414; field_14574 BLOCK_STONE_PLACE + f Lnet/minecraft/class_3414; field_14786 ENTITY_SILVERFISH_AMBIENT + f Lnet/minecraft/class_3414; field_14556 ENTITY_HORSE_BREATHE + f Lnet/minecraft/class_3414; field_18059 ENTITY_FOX_DEATH + f Lnet/minecraft/class_3414; field_14814 ENTITY_SHEEP_DEATH + f Lnet/minecraft/class_3414; field_14999 ENTITY_PLAYER_ATTACK_KNOCKBACK + f Lnet/minecraft/class_3414; field_15054 ENTITY_GHAST_HURT + f Lnet/minecraft/class_3414; field_14550 ENTITY_ENDER_DRAGON_FLAP + f Lnet/minecraft/class_3414; field_14553 ENTITY_PUFFER_FISH_AMBIENT + f Lnet/minecraft/class_3414; field_25727 ENTITY_PARROT_IMITATE_PIGLIN_BRUTE + f Lnet/minecraft/class_3414; field_14932 BLOCK_WOODEN_TRAPDOOR_OPEN + f Lnet/minecraft/class_3414; field_14980 ENTITY_DROWNED_AMBIENT_WATER + f Lnet/minecraft/class_3414; field_16439 ENTITY_CAT_EAT + f Lnet/minecraft/class_3414; field_14564 AMBIENT_CAVE + f Lnet/minecraft/class_3414; field_14801 ENTITY_PANDA_AGGRESSIVE_AMBIENT + f Lnet/minecraft/class_3414; field_23795 MUSIC_NETHER_SOUL_SAND_VALLEY + f Lnet/minecraft/class_3414; field_14645 ENTITY_WITCH_HURT + f Lnet/minecraft/class_3414; field_14674 BLOCK_TRIPWIRE_CLICK_ON + f Lnet/minecraft/class_3414; field_14812 ENTITY_VEX_AMBIENT + f Lnet/minecraft/class_3414; field_22463 BLOCK_SMITHING_TABLE_USE + f Lnet/minecraft/class_3414; field_17746 BLOCK_LANTERN_FALL + f Lnet/minecraft/class_3414; field_16865 BLOCK_GRINDSTONE_USE + f Lnet/minecraft/class_3414; field_21949 BLOCK_SOUL_SAND_BREAK + f Lnet/minecraft/class_3414; field_24073 BLOCK_NETHER_GOLD_ORE_HIT + f Lnet/minecraft/class_3414; field_15166 ENTITY_HORSE_DEATH + f Lnet/minecraft/class_3414; field_18060 ENTITY_FOX_EAT + f Lnet/minecraft/class_3414; field_14727 BLOCK_ANVIL_FALL + f Lnet/minecraft/class_3414; field_14730 ENTITY_SHEEP_HURT + f Lnet/minecraft/class_3414; field_14914 ENTITY_PLAYER_ATTACK_NODAMAGE + f Lnet/minecraft/class_3414; field_14637 ENTITY_EXPERIENCE_BOTTLE_THROW + f Lnet/minecraft/class_3414; field_14860 ITEM_CROSSBOW_LOADING_MIDDLE + f Lnet/minecraft/class_3414; field_22263 ENTITY_PIGLIN_ADMIRING_ITEM + f Lnet/minecraft/class_3414; field_14793 BLOCK_NOTE_BLOCK_BELL + f Lnet/minecraft/class_3414; field_14543 ENTITY_ZOMBIE_HORSE_DEATH + f Lnet/minecraft/class_3414; field_14642 ENTITY_VINDICATOR_DEATH + f Lnet/minecraft/class_3414; field_15067 ENTITY_WITCH_THROW + f Lnet/minecraft/class_3414; field_14595 BLOCK_TRIPWIRE_DETACH + f Lnet/minecraft/class_3414; field_21876 BLOCK_BONE_BLOCK_STEP + f Lnet/minecraft/class_3414; field_24632 ENTITY_MULE_EAT + f Lnet/minecraft/class_3414; field_14941 ENTITY_ILLUSIONER_MIRROR_MOVE + f Lnet/minecraft/class_3414; field_15116 BLOCK_STONE_PRESSURE_PLATE_CLICK_OFF + f Lnet/minecraft/class_3414; field_14673 ENTITY_SILVERFISH_DEATH + f Lnet/minecraft/class_3414; field_14958 ENTITY_GHAST_SCREAM + f Lnet/minecraft/class_3414; field_14671 ENTITY_ENDER_DRAGON_GROWL + f Lnet/minecraft/class_3414; field_15133 ENTITY_PUFFER_FISH_BLOW_OUT + f Lnet/minecraft/class_3414; field_18815 ENTITY_PARROT_IMITATE_PILLAGER + f Lnet/minecraft/class_3414; field_15215 BLOCK_WOOD_BREAK + f Lnet/minecraft/class_3414; field_23790 AMBIENT_BASALT_DELTAS_ADDITIONS + f Lnet/minecraft/class_3414; field_15066 ENTITY_DROWNED_DEATH + f Lnet/minecraft/class_3414; field_14938 ENTITY_CAT_HISS + f Lnet/minecraft/class_3414; field_14715 ENTITY_PANDA_WORRIED_AMBIENT + f Lnet/minecraft/class_3414; field_23796 MUSIC_NETHER_CRIMSON_FOREST + f Lnet/minecraft/class_3414; field_21905 BLOCK_FUNGUS_PLACE + f Lnet/minecraft/class_3414; field_23196 BLOCK_LODESTONE_PLACE + f Lnet/minecraft/class_3414; field_14898 ENTITY_VEX_CHARGE + f Lnet/minecraft/class_3414; field_17618 BLOCK_SMOKER_SMOKE + f Lnet/minecraft/class_3414; field_17742 BLOCK_LANTERN_HIT + f Lnet/minecraft/class_3414; field_14714 ENTITY_GUARDIAN_AMBIENT + f Lnet/minecraft/class_3414; field_21950 BLOCK_SOUL_SAND_STEP + f Lnet/minecraft/class_3414; field_24074 BLOCK_NETHER_GOLD_ORE_PLACE + f Lnet/minecraft/class_3414; field_14590 ENTITY_DOLPHIN_EAT + f Lnet/minecraft/class_3414; field_19195 BLOCK_BUBBLE_COLUMN_UPWARDS_INSIDE + f Lnet/minecraft/class_3414; field_18312 BLOCK_NOTE_BLOCK_BANJO + f Lnet/minecraft/class_3414; field_15059 MUSIC_DISC_MALL + f Lnet/minecraft/class_3414; field_17752 ENTITY_WANDERING_TRADER_YES + f Lnet/minecraft/class_3414; field_14663 ENCHANT_THORNS_HIT + f Lnet/minecraft/class_3414; field_20612 BLOCK_BEEHIVE_WORK + f Lnet/minecraft/class_3414; field_15100 BLOCK_METAL_PRESSURE_PLATE_CLICK_OFF + f Lnet/minecraft/class_3414; field_14899 ENTITY_HOSTILE_DEATH + f Lnet/minecraft/class_3414; field_14657 ENTITY_SPIDER_HURT + f Lnet/minecraft/class_3414; field_14616 ITEM_SHOVEL_FLATTEN + f Lnet/minecraft/class_3414; field_14667 ENTITY_ITEM_FRAME_ADD_ITEM + f Lnet/minecraft/class_3414; field_14583 BLOCK_GLASS_HIT + f Lnet/minecraft/class_3414; field_14951 AMBIENT_UNDERWATER_LOOP + f Lnet/minecraft/class_3414; field_15069 ENTITY_SKELETON_HURT + f Lnet/minecraft/class_3414; field_15164 ENTITY_RABBIT_HURT + f Lnet/minecraft/class_3414; field_14928 ENTITY_GENERIC_BIG_FALL + f Lnet/minecraft/class_3414; field_15203 ENTITY_ELDER_GUARDIAN_CURSE + f Lnet/minecraft/class_3414; field_14778 ENTITY_PLAYER_SMALL_FALL + f Lnet/minecraft/class_3414; field_14647 ENTITY_PARROT_IMITATE_DROWNED + f Lnet/minecraft/class_3414; field_15181 BLOCK_WOOL_STEP + f Lnet/minecraft/class_3414; field_14871 ENTITY_CHICKEN_AMBIENT + f Lnet/minecraft/class_3414; field_15227 BLOCK_BAMBOO_SAPLING_HIT + f Lnet/minecraft/class_3414; field_21890 BLOCK_STEM_HIT + f Lnet/minecraft/class_3414; field_14865 ENTITY_LIGHTNING_BOLT_THUNDER + f Lnet/minecraft/class_3414; field_14634 ENTITY_TURTLE_LAY_EGG + f Lnet/minecraft/class_3414; field_23200 ENTITY_STRIDER_AMBIENT + f Lnet/minecraft/class_3414; field_15186 ENTITY_ARMOR_STAND_FALL + f Lnet/minecraft/class_3414; field_22259 ENTITY_HOGLIN_DEATH + f Lnet/minecraft/class_3414; field_14702 ENTITY_FIREWORK_ROCKET_LAUNCH + f Lnet/minecraft/class_3414; field_15123 ENTITY_SALMON_DEATH + f Lnet/minecraft/class_3414; field_22272 ENTITY_PIGLIN_CONVERTED_TO_ZOMBIFIED + f Lnet/minecraft/class_3414; field_14582 ENTITY_ENDERMITE_HURT + f Lnet/minecraft/class_3414; field_14672 BLOCK_CORAL_BLOCK_HIT + f Lnet/minecraft/class_3414; field_24633 ENTITY_PARROT_IMITATE_ZOGLIN + f Lnet/minecraft/class_3414; field_21916 BLOCK_WART_BLOCK_PLACE + f Lnet/minecraft/class_3414; field_14724 ENTITY_WOLF_AMBIENT + f Lnet/minecraft/class_3414; field_15216 ENTITY_DOLPHIN_HURT + f Lnet/minecraft/class_3414; field_14650 BLOCK_BUBBLE_COLUMN_WHIRLPOOL_AMBIENT + f Lnet/minecraft/class_3414; field_16441 ENTITY_OCELOT_HURT + f Lnet/minecraft/class_3414; field_15169 MUSIC_DISC_MELLOHI + f Lnet/minecraft/class_3414; field_15237 BLOCK_WATER_AMBIENT + f Lnet/minecraft/class_3414; field_15079 ENTITY_TNT_PRIMED + f Lnet/minecraft/class_3414; field_14897 ENTITY_ARMOR_STAND_HIT + f Lnet/minecraft/class_3414; field_17265 BLOCK_BELL_USE + f Lnet/minecraft/class_3414; field_15028 AMBIENT_UNDERWATER_LOOP_ADDITIONS + f Lnet/minecraft/class_3414; field_14585 ENTITY_ITEM_FRAME_BREAK + f Lnet/minecraft/class_3414; field_14843 BLOCK_GLASS_PLACE + f Lnet/minecraft/class_3414; field_14633 ENTITY_SKELETON_SHOOT + f Lnet/minecraft/class_3414; field_15091 ENTITY_RABBIT_JUMP + f Lnet/minecraft/class_3414; field_14821 ENTITY_GENERIC_BURN + f Lnet/minecraft/class_3414; field_15052 ENTITY_ELDER_GUARDIAN_DEATH + f Lnet/minecraft/class_3414; field_14810 ENTITY_PLAYER_SPLASH + f Lnet/minecraft/class_3414; field_14777 ENTITY_PARROT_IMITATE_ELDER_GUARDIAN + f Lnet/minecraft/class_3414; field_15220 ENTITY_PARROT_IMITATE_ZOMBIE + f Lnet/minecraft/class_3414; field_21917 BLOCK_WART_BLOCK_HIT + f Lnet/minecraft/class_3414; field_23672 ENTITY_ZOGLIN_AMBIENT + f Lnet/minecraft/class_3414; field_20670 ENTITY_VILLAGER_WORK_BUTCHER + f Lnet/minecraft/class_3414; field_15140 ENTITY_CHICKEN_DEATH + f Lnet/minecraft/class_3414; field_15125 BLOCK_BAMBOO_SAPLING_PLACE + f Lnet/minecraft/class_3414; field_21892 BLOCK_STEM_FALL + f Lnet/minecraft/class_3414; field_14767 ENTITY_LINGERING_POTION_THROW + f Lnet/minecraft/class_3414; field_14549 ENTITY_TURTLE_SHAMBLE + f Lnet/minecraft/class_3414; field_23201 ENTITY_STRIDER_HAPPY + f Lnet/minecraft/class_3414; field_22260 ENTITY_HOGLIN_HURT + f Lnet/minecraft/class_3414; field_14712 ENTITY_FIREWORK_ROCKET_SHOOT + f Lnet/minecraft/class_3414; field_14563 ENTITY_SALMON_FLOP + f Lnet/minecraft/class_3414; field_25728 ENTITY_PIGLIN_BRUTE_AMBIENT + f Lnet/minecraft/class_3414; field_14678 ENTITY_ENDERMITE_STEP + f Lnet/minecraft/class_3414; field_15087 BLOCK_CORAL_BLOCK_PLACE + f Lnet/minecraft/class_3414; field_14876 ENTITY_PLAYER_SPLASH_HIGH_SPEED + f Lnet/minecraft/class_3414; field_14854 ENTITY_PARROT_IMITATE_ENDER_DRAGON + f Lnet/minecraft/class_3414; field_14659 ENTITY_WOLF_DEATH + f Lnet/minecraft/class_3414; field_14707 ENTITY_DOLPHIN_JUMP + f Lnet/minecraft/class_3414; field_19196 BLOCK_BUBBLE_COLUMN_WHIRLPOOL_INSIDE + f Lnet/minecraft/class_3414; field_16437 ENTITY_OCELOT_AMBIENT + f Lnet/minecraft/class_3414; field_23968 MUSIC_DISC_PIGSTEP + f Lnet/minecraft/class_3414; field_14969 ENTITY_ARMOR_STAND_PLACE + f Lnet/minecraft/class_3414; field_14946 WEATHER_RAIN + f Lnet/minecraft/class_3414; field_14931 ITEM_TOTEM_USE + f Lnet/minecraft/class_3414; field_14844 ENTITY_ITEM_FRAME_PLACE + f Lnet/minecraft/class_3414; field_14769 BLOCK_GLASS_STEP + f Lnet/minecraft/class_3414; field_14548 ENTITY_SKELETON_STEP + f Lnet/minecraft/class_3414; field_17266 EVENT_RAID_HORN + f Lnet/minecraft/class_3414; field_14732 ENTITY_GENERIC_DEATH + f Lnet/minecraft/class_3414; field_14973 ENTITY_ELDER_GUARDIAN_DEATH_LAND + f Lnet/minecraft/class_3414; field_14757 ENTITY_ENDER_PEARL_THROW + f Lnet/minecraft/class_3414; field_14935 BLOCK_CORAL_BLOCK_STEP + f Lnet/minecraft/class_3414; field_14676 ENTITY_PARROT_IMITATE_ZOMBIE_VILLAGER + f Lnet/minecraft/class_3414; field_21918 BLOCK_WART_BLOCK_FALL + f Lnet/minecraft/class_3414; field_23673 ENTITY_ZOGLIN_ANGRY + f Lnet/minecraft/class_3414; field_20671 ENTITY_VILLAGER_WORK_CARTOGRAPHER + f Lnet/minecraft/class_3414; field_15219 ENTITY_CHICKEN_EGG + f Lnet/minecraft/class_3414; field_17603 BLOCK_BARREL_CLOSE + f Lnet/minecraft/class_3414; field_21893 BLOCK_NYLIUM_BREAK + f Lnet/minecraft/class_3414; field_14682 ENTITY_LLAMA_AMBIENT + f Lnet/minecraft/class_3414; field_14864 ENTITY_TURTLE_SHAMBLE_BABY + f Lnet/minecraft/class_3414; field_23202 ENTITY_STRIDER_RETREAT + f Lnet/minecraft/class_3414; field_14988 BLOCK_METAL_PRESSURE_PLATE_CLICK_ON + f Lnet/minecraft/class_3414; field_14994 ENTITY_HOSTILE_HURT + f Lnet/minecraft/class_3414; field_14760 ENTITY_SPIDER_STEP + f Lnet/minecraft/class_3414; field_14690 ENTITY_SHULKER_AMBIENT + f Lnet/minecraft/class_3414; field_22261 ENTITY_HOGLIN_RETREAT + f Lnet/minecraft/class_3414; field_14800 ENTITY_FIREWORK_ROCKET_TWINKLE + f Lnet/minecraft/class_3414; field_14638 ENTITY_SALMON_HURT + f Lnet/minecraft/class_3414; field_25729 ENTITY_PIGLIN_BRUTE_ANGRY + f Lnet/minecraft/class_3414; field_14905 ENTITY_ZOMBIE_VILLAGER_CURE + f Lnet/minecraft/class_3414; field_20613 ENTITY_GENERIC_DRINK + f Lnet/minecraft/class_3414; field_14939 ENTITY_ELDER_GUARDIAN_FLOP + f Lnet/minecraft/class_3414; field_14998 ENTITY_PLAYER_SWIM + f Lnet/minecraft/class_3414; field_15022 ENTITY_PARROT_IMITATE_ENDERMITE + f Lnet/minecraft/class_3414; field_15151 ENTITY_ARROW_HIT + f Lnet/minecraft/class_3414; field_14575 ENTITY_WOLF_GROWL + f Lnet/minecraft/class_3414; field_14972 ENTITY_DOLPHIN_PLAY + f Lnet/minecraft/class_3414; field_14834 ITEM_BUCKET_EMPTY + f Lnet/minecraft/class_3414; field_16442 ENTITY_OCELOT_DEATH + f Lnet/minecraft/class_3414; field_14578 MUSIC_DISC_STAL + f Lnet/minecraft/class_3414; field_15020 WEATHER_RAIN_ABOVE + f Lnet/minecraft/class_3414; field_15213 ITEM_TRIDENT_HIT + f Lnet/minecraft/class_3414; field_21894 BLOCK_NYLIUM_STEP + f Lnet/minecraft/class_3414; field_14586 ENTITY_LLAMA_ANGRY + f Lnet/minecraft/class_3414; field_14764 ENTITY_TURTLE_SWIM + f Lnet/minecraft/class_3414; field_23203 ENTITY_STRIDER_DEATH + f Lnet/minecraft/class_3414; field_14770 ENTITY_ITEM_FRAME_REMOVE_ITEM + f Lnet/minecraft/class_3414; field_15037 BLOCK_GRASS_BREAK + f Lnet/minecraft/class_3414; field_14863 ENTITY_SLIME_ATTACK + f Lnet/minecraft/class_3414; field_14639 ENTITY_RAVAGER_AMBIENT + f Lnet/minecraft/class_3414; field_14996 ENTITY_ZOMBIE_VILLAGER_DEATH + f Lnet/minecraft/class_3414; field_14816 BLOCK_END_GATEWAY_SPAWN + f Lnet/minecraft/class_3414; field_14780 ENTITY_COW_AMBIENT + f Lnet/minecraft/class_3414; field_14602 ENTITY_PARROT_STEP + f Lnet/minecraft/class_3414; field_21919 BLOCK_NETHERITE_BLOCK_BREAK + f Lnet/minecraft/class_3414; field_23674 ENTITY_ZOGLIN_ATTACK + f Lnet/minecraft/class_3414; field_20672 ENTITY_VILLAGER_WORK_CLERIC + f Lnet/minecraft/class_3414; field_15068 AMBIENT_UNDERWATER_LOOP_ADDITIONS_RARE + f Lnet/minecraft/class_3414; field_14601 ENTITY_CHICKEN_HURT + f Lnet/minecraft/class_3414; field_17604 BLOCK_BARREL_OPEN + f Lnet/minecraft/class_3414; field_19167 BLOCK_BELL_RESONATE + f Lnet/minecraft/class_3414; field_14924 BLOCK_METAL_STEP + f Lnet/minecraft/class_3414; field_14754 ENTITY_HOSTILE_SMALL_FALL + f Lnet/minecraft/class_3414; field_14839 ENTITY_SPLASH_POTION_BREAK + f Lnet/minecraft/class_3414; field_14751 BLOCK_SHULKER_BOX_CLOSE + f Lnet/minecraft/class_3414; field_22262 ENTITY_HOGLIN_STEP + f Lnet/minecraft/class_3414; field_14882 ENTITY_FIREWORK_ROCKET_TWINKLE_FAR + f Lnet/minecraft/class_3414; field_15074 BLOCK_SAND_BREAK + f Lnet/minecraft/class_3414; field_25730 ENTITY_PIGLIN_BRUTE_DEATH + f Lnet/minecraft/class_3414; field_20614 ENTITY_GENERIC_EAT + f Lnet/minecraft/class_3414; field_14868 ENTITY_ELDER_GUARDIAN_HURT + f Lnet/minecraft/class_3414; field_15224 ENTITY_ARROW_HIT_PLAYER + f Lnet/minecraft/class_3414; field_15078 ENTITY_POLAR_BEAR_AMBIENT + f Lnet/minecraft/class_3414; field_15113 ENTITY_PARROT_IMITATE_EVOKER + f Lnet/minecraft/class_3414; field_15117 ENTITY_WOLF_HOWL + f Lnet/minecraft/class_3414; field_14887 ENTITY_DOLPHIN_SPLASH + f Lnet/minecraft/class_3414; field_14912 ITEM_BUCKET_EMPTY_FISH + f Lnet/minecraft/class_3414; field_14685 ENTITY_CHICKEN_STEP + f Lnet/minecraft/class_3414; field_21867 BLOCK_BASALT_BREAK + f Lnet/minecraft/class_3414; field_21895 BLOCK_NYLIUM_PLACE + f Lnet/minecraft/class_3414; field_15097 ENTITY_LLAMA_CHEST + f Lnet/minecraft/class_3414; field_15015 UI_BUTTON_CLICK + f Lnet/minecraft/class_3414; field_23204 ENTITY_STRIDER_HURT + f Lnet/minecraft/class_3414; field_15038 ENTITY_ITEM_FRAME_ROTATE_ITEM + f Lnet/minecraft/class_3414; field_14965 BLOCK_GRASS_FALL + f Lnet/minecraft/class_3414; field_14763 ENTITY_SLIME_DEATH + f Lnet/minecraft/class_3414; field_15240 ENTITY_RAVAGER_ATTACK + f Lnet/minecraft/class_3414; field_14943 BLOCK_SAND_FALL + f Lnet/minecraft/class_3414; field_25731 ENTITY_PIGLIN_BRUTE_HURT + f Lnet/minecraft/class_3414; field_14728 ENTITY_ZOMBIE_VILLAGER_HURT + f Lnet/minecraft/class_3414; field_19197 BLOCK_END_PORTAL_FRAME_FILL + f Lnet/minecraft/class_3414; field_14857 ENTITY_COW_DEATH + f Lnet/minecraft/class_3414; field_15178 AMBIENT_UNDERWATER_LOOP_ADDITIONS_ULTRA_RARE + f Lnet/minecraft/class_3414; field_14813 ENTITY_PHANTOM_AMBIENT + f Lnet/minecraft/class_3414; field_21920 BLOCK_NETHERITE_BLOCK_STEP + f Lnet/minecraft/class_3414; field_23675 ENTITY_ZOGLIN_DEATH + f Lnet/minecraft/class_3414; field_20673 ENTITY_VILLAGER_WORK_FARMER + f Lnet/minecraft/class_3414; field_14991 ENTITY_BLAZE_AMBIENT + f Lnet/minecraft/class_3414; field_14832 ENTITY_MINECART_INSIDE + f Lnet/minecraft/class_3414; field_14836 ENTITY_HOSTILE_SPLASH + f Lnet/minecraft/class_3414; field_14910 ENTITY_SPLASH_POTION_THROW + f Lnet/minecraft/class_3414; field_14825 BLOCK_SHULKER_BOX_OPEN + f Lnet/minecraft/class_3414; field_21070 BLOCK_HONEY_BLOCK_BREAK + f Lnet/minecraft/class_3414; field_14993 BLOCK_FIRE_AMBIENT + f Lnet/minecraft/class_3414; field_15014 ENTITY_SLIME_HURT + f Lnet/minecraft/class_3414; field_19148 ENTITY_RAVAGER_CELEBRATE + f Lnet/minecraft/class_3414; field_14600 ENTITY_ARROW_SHOOT + f Lnet/minecraft/class_3414; field_15152 ENTITY_GENERIC_EXPLODE + f Lnet/minecraft/class_3414; field_14652 ENTITY_ELDER_GUARDIAN_HURT_LAND + f Lnet/minecraft/class_3414; field_14605 ENTITY_POLAR_BEAR_AMBIENT_BABY + f Lnet/minecraft/class_3414; field_14577 ENTITY_PARROT_IMITATE_GHAST + f Lnet/minecraft/class_3414; field_15218 ENTITY_WOLF_HURT + f Lnet/minecraft/class_3414; field_14739 BLOCK_CHORUS_FLOWER_DEATH + f Lnet/minecraft/class_3414; field_21868 BLOCK_BASALT_STEP + f Lnet/minecraft/class_3414; field_21896 BLOCK_NYLIUM_HIT + f Lnet/minecraft/class_3414; field_15189 ENTITY_LLAMA_DEATH + f Lnet/minecraft/class_3414; field_14920 UI_LOOM_SELECT_PATTERN + f Lnet/minecraft/class_3414; field_23205 ENTITY_STRIDER_STEP + f Lnet/minecraft/class_3414; field_15075 ENTITY_ITEM_BREAK + f Lnet/minecraft/class_3414; field_14720 BLOCK_GRASS_HIT + f Lnet/minecraft/class_3414; field_21071 BLOCK_HONEY_BLOCK_FALL + f Lnet/minecraft/class_3414; field_15102 BLOCK_FIRE_EXTINGUISH + f Lnet/minecraft/class_3414; field_15221 BLOCK_SAND_HIT + f Lnet/minecraft/class_3414; field_25732 ENTITY_PIGLIN_BRUTE_STEP + f Lnet/minecraft/class_3414; field_21891 BLOCK_ANCIENT_DEBRIS_BREAK + f Lnet/minecraft/class_3414; field_14841 ENTITY_ZOMBIE_VILLAGER_STEP + f Lnet/minecraft/class_3414; field_14981 BLOCK_END_PORTAL_SPAWN + f Lnet/minecraft/class_3414; field_14597 ENTITY_COW_HURT + f Lnet/minecraft/class_3414; field_14729 ENTITY_PHANTOM_BITE + f Lnet/minecraft/class_3414; field_21921 BLOCK_NETHERITE_BLOCK_PLACE + f Lnet/minecraft/class_3414; field_23676 ENTITY_ZOGLIN_HURT + f Lnet/minecraft/class_3414; field_20674 ENTITY_VILLAGER_WORK_FISHERMAN + f Lnet/minecraft/class_3414; field_14809 ENTITY_PAINTING_BREAK + f Lnet/minecraft/class_3414; field_14656 MUSIC_DISC_STRAD + f Lnet/minecraft/class_3414; field_15120 BLOCK_WET_GRASS_BREAK + f Lnet/minecraft/class_3414; field_15104 ITEM_TRIDENT_HIT_GROUND + f Lnet/minecraft/class_3414; field_14734 ENTITY_BLAZE_BURN + f Lnet/minecraft/class_3414; field_14784 ENTITY_MINECART_RIDING + f Lnet/minecraft/class_3414; field_14630 ENTITY_HOSTILE_SWIM + f Lnet/minecraft/class_3414; field_15034 ENTITY_SQUID_AMBIENT + f Lnet/minecraft/class_3414; field_14895 ENTITY_SHULKER_BULLET_HIT + f Lnet/minecraft/class_3414; field_15197 ENTITY_ITEM_PICKUP + f Lnet/minecraft/class_3414; field_14653 BLOCK_GRASS_PLACE + f Lnet/minecraft/class_3414; field_14919 ENTITY_SLIME_JUMP + f Lnet/minecraft/class_3414; field_15146 ENTITY_RAVAGER_DEATH + f Lnet/minecraft/class_3414; field_15222 ENTITY_GENERIC_EXTINGUISH_FIRE + f Lnet/minecraft/class_3414; field_14572 ITEM_ELYTRA_FLYING + f Lnet/minecraft/class_3414; field_15209 ENTITY_POLAR_BEAR_DEATH + f Lnet/minecraft/class_3414; field_18813 ENTITY_PARROT_IMITATE_GUARDIAN + f Lnet/minecraft/class_3414; field_14922 ENTITY_WOLF_PANT + f Lnet/minecraft/class_3414; field_14974 ENTITY_PHANTOM_DEATH + f Lnet/minecraft/class_3414; field_21922 BLOCK_NETHERITE_BLOCK_HIT + f Lnet/minecraft/class_3414; field_23677 ENTITY_ZOGLIN_STEP + f Lnet/minecraft/class_3414; field_20675 ENTITY_VILLAGER_WORK_FLETCHER + f Lnet/minecraft/class_3414; field_14817 BLOCK_CHORUS_FLOWER_GROW + f Lnet/minecraft/class_3414; field_21869 BLOCK_BASALT_PLACE + f Lnet/minecraft/class_3414; field_21897 BLOCK_NYLIUM_FALL + f Lnet/minecraft/class_3414; field_14884 ENTITY_LLAMA_EAT + f Lnet/minecraft/class_3414; field_15096 UI_LOOM_TAKE_RESULT + f Lnet/minecraft/class_3414; field_23206 ENTITY_STRIDER_STEP_LAVA + f Lnet/minecraft/class_3414; field_14675 ITEM_AXE_STRIP + f Lnet/minecraft/class_3414; field_21072 BLOCK_HONEY_BLOCK_HIT + f Lnet/minecraft/class_3414; field_14591 ENTITY_FISH_SWIM + f Lnet/minecraft/class_3414; field_21906 BLOCK_ANCIENT_DEBRIS_STEP + f Lnet/minecraft/class_3414; field_15144 BLOCK_SAND_PLACE + f Lnet/minecraft/class_3414; field_25733 ENTITY_PIGLIN_BRUTE_CONVRTED_TO_ZOMBIFIED + f Lnet/minecraft/class_3414; field_14782 ENTITY_EVOKER_AMBIENT + f Lnet/minecraft/class_3414; field_14691 ENTITY_COW_MILK + f Lnet/minecraft/class_3414; field_15172 ENTITY_DOLPHIN_SWIM + f Lnet/minecraft/class_3414; field_15010 ITEM_BUCKET_EMPTY_LAVA + f Lnet/minecraft/class_3414; field_14875 ENTITY_PAINTING_PLACE + f Lnet/minecraft/class_3414; field_14759 MUSIC_DISC_WAIT + f Lnet/minecraft/class_3414; field_15207 BLOCK_WET_GRASS_FALL + f Lnet/minecraft/class_3414; field_14698 ITEM_TRIDENT_RETURN + f Lnet/minecraft/class_3414; field_14580 ENTITY_BLAZE_DEATH + f Lnet/minecraft/class_3414; field_18266 ENTITY_MOOSHROOM_CONVERT + f Lnet/minecraft/class_3414; field_14680 ENTITY_HUSK_AMBIENT + f Lnet/minecraft/class_3414; field_15124 ENTITY_SQUID_DEATH + f Lnet/minecraft/class_3414; field_14977 ENTITY_SHULKER_BULLET_HURT + f Lnet/minecraft/class_3414; field_14546 BLOCK_LADDER_BREAK + f Lnet/minecraft/class_3414; field_14573 BLOCK_GRASS_STEP + f Lnet/minecraft/class_3414; field_15095 ENTITY_SLIME_SQUISH + f Lnet/minecraft/class_3414; field_15007 ENTITY_RAVAGER_HURT + f Lnet/minecraft/class_3414; field_14940 ENTITY_GENERIC_HURT + f Lnet/minecraft/class_3414; field_15119 BLOCK_ENCHANTMENT_TABLE_USE + f Lnet/minecraft/class_3414; field_14858 ENTITY_EVOKER_CAST_SPELL + f Lnet/minecraft/class_3414; field_15110 ENTITY_COW_STEP + f Lnet/minecraft/class_3414; field_14869 ENTITY_PHANTOM_FLAP + f Lnet/minecraft/class_3414; field_21923 BLOCK_NETHERITE_BLOCK_FALL + f Lnet/minecraft/class_3414; field_15174 ENTITY_ZOMBIE_AMBIENT + f Lnet/minecraft/class_3414; field_20676 ENTITY_VILLAGER_WORK_LEATHERWORKER + f Lnet/minecraft/class_3414; field_14890 ITEM_CHORUS_FRUIT_TELEPORT + f Lnet/minecraft/class_3414; field_21870 BLOCK_BASALT_HIT + f Lnet/minecraft/class_3414; field_21898 BLOCK_NETHER_SPROUT_BREAK + f Lnet/minecraft/class_3414; field_15031 ENTITY_LLAMA_HURT + f Lnet/minecraft/class_3414; field_17484 UI_CARTOGRAPHY_TABLE_TAKE_RESULT + f Lnet/minecraft/class_3414; field_23207 ENTITY_STRIDER_EAT + f Lnet/minecraft/class_3414; field_21929 BLOCK_ANCIENT_DEBRIS_PLACE + f Lnet/minecraft/class_3414; field_15212 ENTITY_SQUID_HURT + f Lnet/minecraft/class_3414; field_15050 ENTITY_SHULKER_CLOSE + f Lnet/minecraft/class_3414; field_21073 BLOCK_HONEY_BLOCK_PLACE + f Lnet/minecraft/class_3414; field_15093 ENTITY_FISHING_BOBBER_RETRIEVE + f Lnet/minecraft/class_3414; field_14677 BLOCK_SAND_STEP + f Lnet/minecraft/class_3414; field_14976 ENTITY_PILLAGER_AMBIENT + f Lnet/minecraft/class_3414; field_15094 ENTITY_DONKEY_AMBIENT + f Lnet/minecraft/class_3414; field_15126 ITEM_BUCKET_FILL + f Lnet/minecraft/class_3414; field_14997 ENTITY_PANDA_PRE_SNEEZE + f Lnet/minecraft/class_3414; field_14838 MUSIC_DISC_WARD + f Lnet/minecraft/class_3414; field_14953 BLOCK_WET_GRASS_HIT + f Lnet/minecraft/class_3414; field_14606 ITEM_TRIDENT_RIPTIDE_1 + f Lnet/minecraft/class_3414; field_14842 ENTITY_BLAZE_HURT + f Lnet/minecraft/class_3414; field_18267 ENTITY_MOOSHROOM_EAT + f Lnet/minecraft/class_3414; field_15128 ENTITY_HUSK_CONVERTED_TO_ZOMBIE + f Lnet/minecraft/class_3414; field_14790 ENTITY_PARROT_IMITATE_VINDICATOR + f Lnet/minecraft/class_3414; field_14983 BLOCK_WOOL_BREAK + f Lnet/minecraft/class_3414; field_14955 ENTITY_WITHER_SKELETON_STEP + f Lnet/minecraft/class_3414; field_15109 ENTITY_TURTLE_EGG_CRACK + f Lnet/minecraft/class_3414; field_22457 AMBIENT_SOUL_SAND_VALLEY_ADDITIONS + f Lnet/minecraft/class_3414; field_20604 ENTITY_BEE_LOOP_AGGRESSIVE + f Lnet/minecraft/class_3414; field_23060 PARTICLE_SOUL_ESCAPE + f Lnet/minecraft/class_3414; field_23116 BLOCK_RESPAWN_ANCHOR_CHARGE + f Lnet/minecraft/class_3414; field_14776 BLOCK_NOTE_BLOCK_XYLOPHONE + f Lnet/minecraft/class_3414; field_14621 ENTITY_ZOMBIE_STEP + f Lnet/minecraft/class_3414; field_18313 ENTITY_WANDERING_TRADER_DRINK_POTION + f Lnet/minecraft/class_3414; field_14966 ITEM_ARMOR_EQUIP_ELYTRA + f Lnet/minecraft/class_3414; field_14815 ENTITY_VILLAGER_YES + f Lnet/minecraft/class_3414; field_15040 BLOCK_SNOW_HIT + f Lnet/minecraft/class_3414; field_17616 BLOCK_SWEET_BERRY_BUSH_PLACE + f Lnet/minecraft/class_3414; field_14617 ENTITY_SKELETON_HORSE_SWIM + f Lnet/minecraft/class_3414; field_21934 BLOCK_SHROOMLIGHT_HIT + f Lnet/minecraft/class_3414; field_15115 ENTITY_PLAYER_HURT + f Lnet/minecraft/class_3414; field_15048 BLOCK_WOOL_FALL + f Lnet/minecraft/class_3414; field_22458 AMBIENT_SOUL_SAND_VALLEY_LOOP + f Lnet/minecraft/class_3414; field_14797 ENTITY_ENDERMAN_HURT + f Lnet/minecraft/class_3414; field_14792 ENTITY_WITHER_SPAWN + f Lnet/minecraft/class_3414; field_14902 ENTITY_TURTLE_EGG_HATCH + f Lnet/minecraft/class_3414; field_20669 ENTITY_VILLAGER_WORK_ARMORER + f Lnet/minecraft/class_3414; field_14945 BLOCK_SNOW_PLACE + f Lnet/minecraft/class_3414; field_20605 ENTITY_BEE_LOOP + f Lnet/minecraft/class_3414; field_23117 BLOCK_RESPAWN_ANCHOR_DEPLETE + f Lnet/minecraft/class_3414; field_14883 ITEM_ARMOR_EQUIP_GENERIC + f Lnet/minecraft/class_3414; field_15056 ENTITY_ZOMBIE_VILLAGER_AMBIENT + f Lnet/minecraft/class_3414; field_17749 ENTITY_WANDERING_TRADER_HURT + f Lnet/minecraft/class_3414; field_14611 BLOCK_DISPENSER_DISPENSE + f Lnet/minecraft/class_3414; field_24061 BLOCK_CHAIN_FALL + f Lnet/minecraft/class_3414; field_17617 ITEM_SWEET_BERRIES_PICK_FROM_BUSH + f Lnet/minecraft/class_3414; field_14686 ENTITY_SKELETON_HORSE_AMBIENT_WATER + f Lnet/minecraft/class_3414; field_15205 ENTITY_PLAYER_HURT_DROWN + f Lnet/minecraft/class_3414; field_22459 AMBIENT_SOUL_SAND_VALLEY_MOOD + f Lnet/minecraft/class_3414; field_14846 ITEM_HOE_TILL + f Lnet/minecraft/class_3414; field_14628 BLOCK_WOOL_HIT + f Lnet/minecraft/class_3414; field_14713 ENTITY_ENDERMAN_SCREAM + f Lnet/minecraft/class_3414; field_15071 BLOCK_CONDUIT_AMBIENT_SHORT + f Lnet/minecraft/class_3414; field_14701 BLOCK_DISPENSER_FAIL + f Lnet/minecraft/class_3414; field_14826 ITEM_BOTTLE_EMPTY + f Lnet/minecraft/class_3414; field_15060 BLOCK_SNOW_STEP + f Lnet/minecraft/class_3414; field_20606 ENTITY_BEE_STING + f Lnet/minecraft/class_3414; field_14761 ITEM_ARMOR_EQUIP_GOLD + f Lnet/minecraft/class_3414; field_21877 BLOCK_ROOTS_BREAK + f Lnet/minecraft/class_3414; field_15168 ENTITY_ZOMBIE_VILLAGER_CONVERTED + f Lnet/minecraft/class_3414; field_17750 ENTITY_WANDERING_TRADER_NO + f Lnet/minecraft/class_3414; field_24062 BLOCK_CHAIN_HIT + f Lnet/minecraft/class_3414; field_14740 BLOCK_BAMBOO_BREAK + f Lnet/minecraft/class_3414; field_15108 ENTITY_SKELETON_HORSE_GALLOP_WATER + f Lnet/minecraft/class_3414; field_22460 AMBIENT_WARPED_FOREST_ADDITIONS + f Lnet/minecraft/class_3414; field_22256 ENTITY_HOGLIN_AMBIENT + f Lnet/minecraft/class_3414; field_14917 ENTITY_FIREWORK_ROCKET_BLAST + f Lnet/minecraft/class_3414; field_15226 BLOCK_WOOL_PLACE + f Lnet/minecraft/class_3414; field_14711 BLOCK_DISPENSER_LAUNCH + f Lnet/minecraft/class_3414; field_14779 ITEM_BOTTLE_FILL + f Lnet/minecraft/class_3414; field_20607 ENTITY_BEE_POLLINATE + f Lnet/minecraft/class_3414; field_14749 ENTITY_MAGMA_CUBE_SQUISH_SMALL + f Lnet/minecraft/class_3414; field_14959 ENTITY_IRON_GOLEM_HURT + f Lnet/minecraft/class_3414; field_21878 BLOCK_ROOTS_STEP + f Lnet/minecraft/class_3414; field_14835 ENTITY_DROWNED_STEP + f Lnet/minecraft/class_3414; field_18314 ENTITY_WANDERING_TRADER_REAPPEARED + f Lnet/minecraft/class_3414; field_15183 ENTITY_TURTLE_HURT + f Lnet/minecraft/class_3414; field_24063 BLOCK_CHAIN_PLACE + f Lnet/minecraft/class_3414; field_14906 BLOCK_BAMBOO_FALL + f Lnet/minecraft/class_3414; field_14862 ITEM_ARMOR_EQUIP_IRON + f Lnet/minecraft/class_3414; field_15044 BLOCK_METAL_BREAK + f Lnet/minecraft/class_3414; field_14704 ENTITY_HORSE_SADDLE + f Lnet/minecraft/class_3414; field_22257 ENTITY_HOGLIN_ANGRY + f Lnet/minecraft/class_3414; field_15090 ENTITY_FIREWORK_ROCKET_BLAST_FAR + f Lnet/minecraft/class_3414; field_14799 ENTITY_DOLPHIN_AMBIENT + f Lnet/minecraft/class_3414; field_15029 ITEM_BOTTLE_FILL_DRAGONBREATH + f Lnet/minecraft/class_3414; field_18308 BLOCK_NOTE_BLOCK_IRON_XYLOPHONE + f Lnet/minecraft/class_3414; field_22461 AMBIENT_WARPED_FOREST_LOOP + f Lnet/minecraft/class_3414; field_20608 BLOCK_BEEHIVE_DROP + f Lnet/minecraft/class_3414; field_21077 ENTITY_IRON_GOLEM_REPAIR + f Lnet/minecraft/class_3414; field_24069 BLOCK_GILDED_BLACKSTONE_PLACE + f Lnet/minecraft/class_3414; field_21879 BLOCK_ROOTS_PLACE + f Lnet/minecraft/class_3414; field_14913 ENTITY_DROWNED_SWIM + f Lnet/minecraft/class_3414; field_14967 ENTITY_ENDERMAN_STARE + f Lnet/minecraft/class_3414; field_15177 BLOCK_CONDUIT_ATTACK_TARGET + f Lnet/minecraft/class_3414; field_24064 BLOCK_CHAIN_STEP + f Lnet/minecraft/class_3414; field_14811 BLOCK_BAMBOO_HIT + f Lnet/minecraft/class_3414; field_17613 ITEM_NETHER_WART_PLANT + f Lnet/minecraft/class_3414; field_14581 ITEM_ARMOR_EQUIP_LEATHER + f Lnet/minecraft/class_3414; field_20609 BLOCK_BEEHIVE_ENTER + f Lnet/minecraft/class_3414; field_15142 BLOCK_METAL_FALL + f Lnet/minecraft/class_3414; field_14613 ENTITY_HORSE_STEP + f Lnet/minecraft/class_3414; field_22258 ENTITY_HOGLIN_ATTACK + f Lnet/minecraft/class_3414; field_15188 ENTITY_FIREWORK_ROCKET_LARGE_BLAST + f Lnet/minecraft/class_3414; field_23118 BLOCK_RESPAWN_ANCHOR_SET_SPAWN + f Lnet/minecraft/class_3414; field_21880 BLOCK_ROOTS_HIT + f Lnet/minecraft/class_3414; field_15012 ENTITY_EGG_THROW + f Lnet/minecraft/class_3414; field_14623 ENTITY_PLAYER_HURT_ON_FIRE + f Lnet/minecraft/class_3414; field_14881 ENTITY_DOLPHIN_AMBIENT_WATER + f Lnet/minecraft/class_3414; field_14978 BLOCK_BREWING_STAND_BREW + f Lnet/minecraft/class_3414; field_18309 BLOCK_NOTE_BLOCK_COW_BELL + f Lnet/minecraft/class_3414; field_14744 MUSIC_DISC_CAT + f Lnet/minecraft/class_3414; field_22462 AMBIENT_WARPED_FOREST_MOOD + f Lnet/minecraft/class_3414; field_15233 ENTITY_IRON_GOLEM_STEP + f Lnet/minecraft/class_3414; field_24070 BLOCK_GILDED_BLACKSTONE_STEP + f Lnet/minecraft/class_3414; field_14879 ENTITY_ENDERMAN_TELEPORT + f Lnet/minecraft/class_3414; field_14979 BLOCK_CONDUIT_DEACTIVATE + f Lnet/minecraft/class_3414; field_14796 ENTITY_PARROT_IMITATE_WITCH + f Lnet/minecraft/class_3414; field_21866 ITEM_ARMOR_EQUIP_NETHERITE + f Lnet/minecraft/class_3414; field_14823 BLOCK_CHEST_CLOSE + f Lnet/minecraft/class_3414; field_14719 BLOCK_BAMBOO_PLACE + f Lnet/minecraft/class_3414; field_21887 BLOCK_STEM_BREAK + f Lnet/minecraft/class_3414; field_15062 ENTITY_LEASH_KNOT_PLACE + f Lnet/minecraft/class_3414; field_20610 BLOCK_BEEHIVE_EXIT + f Lnet/minecraft/class_3414; field_14557 BLOCK_METAL_HIT + f Lnet/minecraft/class_3414; field_15061 ENTITY_HORSE_STEP_WOOD + f Lnet/minecraft/class_3414; field_15170 ENTITY_SPIDER_AMBIENT + f Lnet/minecraft/class_3414; field_21881 BLOCK_ROOTS_FALL + f Lnet/minecraft/class_3414; field_15127 ENTITY_ELDER_GUARDIAN_AMBIENT + f Lnet/minecraft/class_3414; field_17614 ENTITY_PLAYER_HURT_SWEET_BERRY_BUSH + f Lnet/minecraft/class_3414; field_15199 ENTITY_PARROT_IMITATE_BLAZE + f Lnet/minecraft/class_3414; field_14756 AMBIENT_UNDERWATER_ENTER + f Lnet/minecraft/class_3414; field_14992 ENTITY_DOLPHIN_ATTACK + f Lnet/minecraft/class_3414; field_15065 BLOCK_BUBBLE_COLUMN_BUBBLE_POP + f Lnet/minecraft/class_3414; field_18310 BLOCK_NOTE_BLOCK_DIDGERIDOO + f Lnet/minecraft/class_3414; field_15039 MUSIC_DISC_CHIRP + f Lnet/minecraft/class_3414; field_21888 BLOCK_STEM_STEP + f Lnet/minecraft/class_3414; field_14962 BLOCK_LEVER_CLICK + f Lnet/minecraft/class_3414; field_15131 BLOCK_IRON_TRAPDOOR_CLOSE + f Lnet/minecraft/class_3414; field_15081 BLOCK_GLASS_BREAK + f Lnet/minecraft/class_3414; field_14901 ENTITY_SKELETON_HORSE_JUMP_WATER + f Lnet/minecraft/class_3414; field_15137 ENTITY_ENDERMITE_AMBIENT + f Lnet/minecraft/class_3414; field_14804 BLOCK_CORAL_BLOCK_BREAK + f Lnet/minecraft/class_3414; field_14684 ITEM_ARMOR_EQUIP_TURTLE + f Lnet/minecraft/class_3414; field_14555 ENTITY_PARROT_IMITATE_WITHER + f Lnet/minecraft/class_3414; field_21914 BLOCK_WART_BLOCK_BREAK + f Lnet/minecraft/class_3414; field_14731 BLOCK_CHEST_LOCKED + f Lnet/minecraft/class_3414; field_14635 BLOCK_BAMBOO_STEP + f Lnet/minecraft/class_3414; field_18311 BLOCK_NOTE_BLOCK_BIT + f Lnet/minecraft/class_3414; field_14944 MUSIC_DISC_FAR + f Lnet/minecraft/class_3414; field_17751 ENTITY_WANDERING_TRADER_TRADE + f Lnet/minecraft/class_3414; field_20611 BLOCK_BEEHIVE_SHEAR + f Lnet/minecraft/class_3414; field_15167 BLOCK_METAL_PLACE + f Lnet/minecraft/class_3414; field_15157 ENTITY_HOSTILE_BIG_FALL + f Lnet/minecraft/class_3414; field_14579 ENTITY_SPIDER_DEATH + f Lnet/minecraft/class_3414; field_21935 BLOCK_SHROOMLIGHT_FALL + f Lnet/minecraft/class_3414; field_14828 AMBIENT_UNDERWATER_EXIT + f Lnet/minecraft/class_3414; field_15006 BLOCK_FURNACE_FIRE_CRACKLE + f Lnet/minecraft/class_3414; field_14569 ENTITY_ELDER_GUARDIAN_AMBIENT_LAND + f Lnet/minecraft/class_3414; field_14709 ENTITY_PLAYER_LEVELUP + f Lnet/minecraft/class_3414; field_14547 ENTITY_PARROT_IMITATE_CREEPER + f Lnet/minecraft/class_3414; field_15101 ENTITY_DOLPHIN_DEATH + f Lnet/minecraft/class_3414; field_15161 BLOCK_BUBBLE_COLUMN_UPWARDS_AMBIENT + f Lnet/minecraft/class_3414; field_14982 BLOCK_CHEST_OPEN + f Lnet/minecraft/class_3414; field_14629 BLOCK_BAMBOO_SAPLING_BREAK + f Lnet/minecraft/class_3414; field_21889 BLOCK_STEM_PLACE + f Lnet/minecraft/class_3414; field_14956 ENTITY_LIGHTNING_BOLT_IMPACT + f Lnet/minecraft/class_3414; field_15070 ENTITY_TURTLE_HURT_BABY + f Lnet/minecraft/class_3414; field_15082 BLOCK_IRON_TRAPDOOR_OPEN + f Lnet/minecraft/class_3414; field_14666 BLOCK_GLASS_FALL + f Lnet/minecraft/class_3414; field_15182 ENTITY_SKELETON_HORSE_STEP_WATER + f Lnet/minecraft/class_3414; field_14872 ENTITY_RABBIT_DEATH + f Lnet/minecraft/class_3414; field_23671 ENTITY_HOGLIN_CONVERTED_TO_ZOMBIFIED + f Lnet/minecraft/class_3414; field_14612 ENTITY_FIREWORK_ROCKET_LARGE_BLAST_FAR + f Lnet/minecraft/class_3414; field_15118 ENTITY_ARMOR_STAND_BREAK + f Lnet/minecraft/class_3414; field_15033 ENTITY_SALMON_AMBIENT + f Lnet/minecraft/class_3414; field_22271 ENTITY_PIGLIN_STEP + f Lnet/minecraft/class_3414; field_15230 ENTITY_ENDERMITE_DEATH + f Lnet/minecraft/class_3414; field_14551 BLOCK_CORAL_BLOCK_FALL + f Lnet/minecraft/class_3414; field_15073 ENTITY_PARROT_IMITATE_WITHER_SKELETON + f Lnet/minecraft/class_3414; field_21915 BLOCK_WART_BLOCK_STEP + f Lnet/minecraft/class_3414; field_15099 ENTITY_HORSE_EAT + f Lnet/minecraft/class_3414; field_18061 ENTITY_FOX_HURT + f Lnet/minecraft/class_3414; field_14975 ENTITY_SHEEP_SHEAR + f Lnet/minecraft/class_3414; field_14840 ENTITY_PLAYER_ATTACK_STRONG + f Lnet/minecraft/class_3414; field_14627 ENTITY_EXPERIENCE_ORB_PICKUP + f Lnet/minecraft/class_3414; field_14765 ITEM_CROSSBOW_LOADING_START + f Lnet/minecraft/class_3414; field_22264 ENTITY_PIGLIN_AMBIENT + f Lnet/minecraft/class_3414; field_14725 BLOCK_NOTE_BLOCK_CHIME + f Lnet/minecraft/class_3414; field_14668 ENTITY_PANDA_HURT + f Lnet/minecraft/class_3414; field_23797 MUSIC_NETHER_WARPED_FOREST + f Lnet/minecraft/class_3414; field_15163 ENTITY_WITHER_AMBIENT + f Lnet/minecraft/class_3414; field_15085 ENTITY_TROPICAL_FISH_AMBIENT + f Lnet/minecraft/class_3414; field_17481 ITEM_BOOK_PAGE_TURN + f Lnet/minecraft/class_3414; field_14900 ENTITY_MULE_HURT + f Lnet/minecraft/class_3414; field_15019 ENTITY_ILLUSIONER_PREPARE_BLINDNESS + f Lnet/minecraft/class_3414; field_14927 BLOCK_ANVIL_HIT + f Lnet/minecraft/class_3414; field_15217 BLOCK_STONE_PRESSURE_PLATE_CLICK_ON + f Lnet/minecraft/class_3414; field_14593 ENTITY_SILVERFISH_HURT + f Lnet/minecraft/class_3414; field_23791 AMBIENT_BASALT_DELTAS_LOOP + f Lnet/minecraft/class_3414; field_15231 ENTITY_GHAST_SHOOT + f Lnet/minecraft/class_3414; field_15086 ENTITY_ENDER_DRAGON_HURT + f Lnet/minecraft/class_3414; field_15235 ENTITY_PUFFER_FISH_BLOW_UP + f Lnet/minecraft/class_3414; field_18816 ENTITY_PARROT_IMITATE_RAVAGER + f Lnet/minecraft/class_3414; field_15105 BLOCK_WOODEN_BUTTON_CLICK_OFF + f Lnet/minecraft/class_3414; field_15162 ENTITY_DROWNED_DEATH_WATER + f Lnet/minecraft/class_3414; field_16438 ENTITY_CAT_BEG_FOR_FOOD + f Lnet/minecraft/class_3414; field_17608 BLOCK_COMPOSTER_FILL_SUCCESS + f Lnet/minecraft/class_3414; field_15045 BLOCK_BEACON_AMBIENT + f Lnet/minecraft/class_3414; field_21907 BLOCK_FUNGUS_HIT + f Lnet/minecraft/class_3414; field_23197 BLOCK_LODESTONE_HIT + f Lnet/minecraft/class_3414; field_14964 ENTITY_VEX_DEATH + f Lnet/minecraft/class_3414; field_14873 ENTITY_SNOWBALL_THROW + f Lnet/minecraft/class_3414; field_17743 BLOCK_LANTERN_PLACE + f Lnet/minecraft/class_3414; field_14968 ENTITY_GUARDIAN_AMBIENT_LAND + f Lnet/minecraft/class_3414; field_21951 BLOCK_SOUL_SAND_PLACE + f Lnet/minecraft/class_3414; field_24075 BLOCK_NETHER_GOLD_ORE_STEP + f Lnet/minecraft/class_3414; field_14987 ENTITY_HORSE_GALLOP + f Lnet/minecraft/class_3414; field_18265 ENTITY_FOX_SCREECH + f Lnet/minecraft/class_3414; field_14870 ENTITY_SHEEP_STEP + f Lnet/minecraft/class_3414; field_14706 ENTITY_PLAYER_ATTACK_SWEEP + f Lnet/minecraft/class_3414; field_14861 BLOCK_FENCE_GATE_CLOSE + f Lnet/minecraft/class_3414; field_15011 ITEM_CROSSBOW_QUICK_CHARGE_1 + f Lnet/minecraft/class_3414; field_14571 ENTITY_DROWNED_HURT + f Lnet/minecraft/class_3414; field_14867 ENTITY_CAT_HURT + f Lnet/minecraft/class_3414; field_14552 ENTITY_PANDA_BITE + f Lnet/minecraft/class_3414; field_15198 MUSIC_UNDER_WATER + f Lnet/minecraft/class_3414; field_15236 ENTITY_WITHER_BREAK_BLOCK + f Lnet/minecraft/class_3414; field_15201 ENTITY_TROPICAL_FISH_DEATH + f Lnet/minecraft/class_3414; field_17482 ITEM_BOOK_PUT + f Lnet/minecraft/class_3414; field_14833 BLOCK_ANVIL_LAND + f Lnet/minecraft/class_3414; field_14995 MUSIC_CREATIVE + f Lnet/minecraft/class_3414; field_14738 ENTITY_ILLUSIONER_PREPARE_MIRROR + f Lnet/minecraft/class_3414; field_14921 BLOCK_STONE_STEP + f Lnet/minecraft/class_3414; field_15084 ENTITY_SILVERFISH_STEP + f Lnet/minecraft/class_3414; field_17744 BLOCK_LANTERN_STEP + f Lnet/minecraft/class_3414; field_14880 ENTITY_GUARDIAN_ATTACK + f Lnet/minecraft/class_3414; field_23792 AMBIENT_BASALT_DELTAS_MOOD + f Lnet/minecraft/class_3414; field_21942 BLOCK_SOUL_SAND_HIT + f Lnet/minecraft/class_3414; field_21937 BLOCK_NETHER_ORE_BREAK + f Lnet/minecraft/class_3414; field_15130 ENTITY_GHAST_WARN + f Lnet/minecraft/class_3414; field_14934 ENTITY_ENDER_DRAGON_SHOOT + f Lnet/minecraft/class_3414; field_14888 ENTITY_PUFFER_FISH_DEATH + f Lnet/minecraft/class_3414; field_14768 ENTITY_PARROT_IMITATE_SHULKER + f Lnet/minecraft/class_3414; field_14699 BLOCK_WOODEN_BUTTON_CLICK_ON + f Lnet/minecraft/class_3414; field_15179 ENTITY_ZOMBIE_HORSE_HURT + f Lnet/minecraft/class_3414; field_14558 ENTITY_VINDICATOR_HURT + f Lnet/minecraft/class_3414; field_17609 BLOCK_COMPOSTER_READY + f Lnet/minecraft/class_3414; field_19344 BLOCK_BEACON_DEACTIVATE + f Lnet/minecraft/class_3414; field_21908 BLOCK_FUNGUS_FALL + f Lnet/minecraft/class_3414; field_23198 BLOCK_LODESTONE_FALL + f Lnet/minecraft/class_3414; field_15072 ENTITY_VEX_HURT + f Lnet/minecraft/class_3414; field_15165 BLOCK_SNOW_BREAK + f Lnet/minecraft/class_3414; field_14755 MUSIC_CREDITS + f Lnet/minecraft/class_3414; field_14819 BLOCK_IRON_DOOR_CLOSE + f Lnet/minecraft/class_3414; field_15041 ENTITY_STRAY_AMBIENT + f Lnet/minecraft/class_3414; field_15200 ENTITY_SKELETON_AMBIENT + f Lnet/minecraft/class_3414; field_14923 ENTITY_HORSE_HURT + f Lnet/minecraft/class_3414; field_18062 ENTITY_FOX_SLEEP + f Lnet/minecraft/class_3414; field_15150 ITEM_SHIELD_BLOCK + f Lnet/minecraft/class_3414; field_14625 ENTITY_PLAYER_ATTACK_WEAK + f Lnet/minecraft/class_3414; field_14607 BLOCK_WOOD_FALL + f Lnet/minecraft/class_3414; field_14651 ENTITY_DROWNED_HURT_WATER + f Lnet/minecraft/class_3414; field_14741 ENTITY_CAT_PURR + f Lnet/minecraft/class_3414; field_15132 ENTITY_PARROT_AMBIENT + f Lnet/minecraft/class_3414; field_21882 BLOCK_NETHER_BRICKS_BREAK + f Lnet/minecraft/class_3414; field_14785 BLOCK_ANVIL_PLACE + f Lnet/minecraft/class_3414; field_15136 ENTITY_WITHER_DEATH + f Lnet/minecraft/class_3414; field_14878 ENTITY_TROPICAL_FISH_FLOP + f Lnet/minecraft/class_3414; field_17605 BLOCK_BLASTFURNACE_FIRE_CRACKLE + f Lnet/minecraft/class_3414; field_15021 BLOCK_LAVA_AMBIENT + f Lnet/minecraft/class_3414; field_15138 ENTITY_GUARDIAN_DEATH + f Lnet/minecraft/class_3414; field_21943 BLOCK_SOUL_SAND_FALL + f Lnet/minecraft/class_3414; field_21938 BLOCK_NETHER_ORE_FALL + f Lnet/minecraft/class_3414; field_24066 BLOCK_GILDED_BLACKSTONE_BREAK + f Lnet/minecraft/class_3414; field_15210 ENTITY_ENDER_EYE_DEATH + f Lnet/minecraft/class_3414; field_15004 ENTITY_PUFFER_FISH_FLOP + f Lnet/minecraft/class_3414; field_14683 ENTITY_PARROT_IMITATE_SILVERFISH + f Lnet/minecraft/class_3414; field_22265 ENTITY_PIGLIN_ANGRY + f Lnet/minecraft/class_3414; field_14989 BLOCK_NOTE_BLOCK_FLUTE + f Lnet/minecraft/class_3414; field_15088 ENTITY_ZOMBIE_HURT + f Lnet/minecraft/class_3414; field_23061 BLOCK_VINE_STEP + f Lnet/minecraft/class_3414; field_14700 BLOCK_CONDUIT_ACTIVATE + f Lnet/minecraft/class_3414; field_14891 BLOCK_BEACON_POWER_SELECT + f Lnet/minecraft/class_3414; field_21909 BLOCK_WEEPING_VINES_BREAK + f Lnet/minecraft/class_3414; field_23199 ITEM_LODESTONE_COMPASS_LOCK + f Lnet/minecraft/class_3414; field_22451 AMBIENT_CRIMSON_FOREST_ADDITIONS + f Lnet/minecraft/class_3414; field_15175 ENTITY_VILLAGER_AMBIENT + f Lnet/minecraft/class_3414; field_15092 BLOCK_SNOW_FALL + f Lnet/minecraft/class_3414; field_14654 MUSIC_DISC_11 + f Lnet/minecraft/class_3414; field_14567 BLOCK_IRON_DOOR_OPEN + f Lnet/minecraft/class_3414; field_14771 ENTITY_STRAY_DEATH + f Lnet/minecraft/class_3414; field_14877 ENTITY_SKELETON_DEATH + f Lnet/minecraft/class_3414; field_14831 ENTITY_HORSE_JUMP + f Lnet/minecraft/class_3414; field_18063 ENTITY_FOX_SNIFF + f Lnet/minecraft/class_3414; field_15239 ITEM_SHIELD_BREAK + f Lnet/minecraft/class_3414; field_14794 ENTITY_PLAYER_BIG_FALL + f Lnet/minecraft/class_3414; field_14748 ENTITY_PUFFER_FISH_HURT + f Lnet/minecraft/class_3414; field_14587 ENTITY_PARROT_IMITATE_SKELETON + f Lnet/minecraft/class_3414; field_14808 BLOCK_WOOD_HIT + f Lnet/minecraft/class_3414; field_14695 BLOCK_ANVIL_STEP + f Lnet/minecraft/class_3414; field_14753 ENTITY_DROWNED_SHOOT + f Lnet/minecraft/class_3414; field_14589 ENTITY_CAT_PURREOW + f Lnet/minecraft/class_3414; field_15234 ENTITY_PARROT_DEATH + f Lnet/minecraft/class_3414; field_21883 BLOCK_NETHER_BRICKS_STEP + f Lnet/minecraft/class_3414; field_14688 ENTITY_WITHER_HURT + f Lnet/minecraft/class_3414; field_14985 ENTITY_TROPICAL_FISH_HURT + f Lnet/minecraft/class_3414; field_19198 BLOCK_LAVA_EXTINGUISH + f Lnet/minecraft/class_3414; field_15232 ENTITY_GUARDIAN_DEATH_LAND + f Lnet/minecraft/class_3414; field_21944 BLOCK_SOUL_SOIL_BREAK + f Lnet/minecraft/class_3414; field_21939 BLOCK_NETHER_ORE_HIT + f Lnet/minecraft/class_3414; field_24067 BLOCK_GILDED_BLACKSTONE_FALL + f Lnet/minecraft/class_3414; field_15155 ENTITY_ENDER_EYE_LAUNCH + f Lnet/minecraft/class_3414; field_14766 BLOCK_FENCE_GATE_OPEN + f Lnet/minecraft/class_3414; field_14916 ITEM_CROSSBOW_QUICK_CHARGE_2 + f Lnet/minecraft/class_3414; field_22266 ENTITY_PIGLIN_CELEBRATE + f Lnet/minecraft/class_3414; field_14903 BLOCK_NOTE_BLOCK_GUITAR + f Lnet/minecraft/class_3414; field_14986 ENTITY_ZOMBIE_INFECT + f Lnet/minecraft/class_3414; field_15173 BLOCK_LILY_PAD_PLACE + f Lnet/minecraft/class_3414; field_14632 BLOCK_CONDUIT_AMBIENT + f Lnet/minecraft/class_3414; field_20602 ENTITY_BEE_DEATH + f Lnet/minecraft/class_3414; field_22452 AMBIENT_CRIMSON_FOREST_LOOP + f Lnet/minecraft/class_3414; field_21910 BLOCK_WEEPING_VINES_STEP + f Lnet/minecraft/class_3414; field_14662 ENTITY_MAGMA_CUBE_DEATH + f Lnet/minecraft/class_3414; field_19152 ENTITY_VILLAGER_CELEBRATE + f Lnet/minecraft/class_3414; field_14655 ENTITY_SNOW_GOLEM_AMBIENT + f Lnet/minecraft/class_3414; field_14592 MUSIC_DISC_13 + f Lnet/minecraft/class_3414; field_14649 ENTITY_IRON_GOLEM_ATTACK + f Lnet/minecraft/class_3414; field_14805 ENTITY_STRAY_HURT + f Lnet/minecraft/class_3414; field_14984 ENTITY_SKELETON_HORSE_AMBIENT + f Lnet/minecraft/class_3414; field_14783 ENTITY_HORSE_LAND + f Lnet/minecraft/class_3414; field_18054 ENTITY_FOX_SPIT + f Lnet/minecraft/class_3414; field_14559 BLOCK_ANVIL_USE + f Lnet/minecraft/class_3414; field_24068 BLOCK_GILDED_BLACKSTONE_HIT + f Lnet/minecraft/class_3414; field_14696 ENTITY_ENDERMAN_AMBIENT + f Lnet/minecraft/class_3414; field_14848 ENTITY_PUFFER_FISH_STING + f Lnet/minecraft/class_3414; field_15098 ENTITY_PARROT_IMITATE_SLIME + f Lnet/minecraft/class_3414; field_14718 BLOCK_WOOD_PLACE + f Lnet/minecraft/class_3414; field_24065 BLOCK_CHAIN_BREAK + f Lnet/minecraft/class_3414; field_14960 ENTITY_PARROT_EAT + f Lnet/minecraft/class_3414; field_21884 BLOCK_NETHER_BRICKS_PLACE + f Lnet/minecraft/class_3414; field_14588 ENTITY_WITHER_SHOOT + f Lnet/minecraft/class_3414; field_14722 ENTITY_TURTLE_AMBIENT_LAND + f Lnet/minecraft/class_3414; field_21911 BLOCK_WEEPING_VINES_PLACE + f Lnet/minecraft/class_3414; field_14747 ENTITY_MAGMA_CUBE_HURT + f Lnet/minecraft/class_3414; field_15225 ENTITY_VILLAGER_DEATH + f Lnet/minecraft/class_3414; field_14594 ENTITY_SNOW_GOLEM_DEATH + f Lnet/minecraft/class_3414; field_14576 BLOCK_LAVA_POP + f Lnet/minecraft/class_3414; field_14584 ENTITY_GUARDIAN_FLOP + f Lnet/minecraft/class_3414; field_21945 BLOCK_SOUL_SOIL_STEP + f Lnet/minecraft/class_3414; field_21940 BLOCK_NETHER_ORE_PLACE + f Lnet/minecraft/class_3414; field_15013 ITEM_FIRECHARGE_USE + f Lnet/minecraft/class_3414; field_15089 ITEM_CROSSBOW_QUICK_CHARGE_3 + f Lnet/minecraft/class_3414; field_22267 ENTITY_PIGLIN_DEATH + f Lnet/minecraft/class_3414; field_15114 BLOCK_NOTE_BLOCK_HARP + f Lnet/minecraft/class_3414; field_22453 AMBIENT_CRIMSON_FOREST_MOOD + f Lnet/minecraft/class_3414; field_14926 ENTITY_ZOMBIFIED_PIGLIN_AMBIENT + f Lnet/minecraft/class_3414; field_17747 ENTITY_WANDERING_TRADER_AMBIENT + f Lnet/minecraft/class_3414; field_20603 ENTITY_BEE_HURT + f Lnet/minecraft/class_3414; field_14925 ENTITY_PARROT_FLY + f Lnet/minecraft/class_3414; field_21885 BLOCK_NETHER_BRICKS_HIT + f Lnet/minecraft/class_3414; field_15214 ENTITY_WITHER_SKELETON_AMBIENT + f Lnet/minecraft/class_3414; field_14856 ENTITY_TURTLE_DEATH + f Lnet/minecraft/class_3414; field_14829 MUSIC_DISC_BLOCKS + f Lnet/minecraft/class_3414; field_21076 ENTITY_IRON_GOLEM_DAMAGE + f Lnet/minecraft/class_3414; field_14540 ENTITY_STRAY_STEP + f Lnet/minecraft/class_3414; field_14721 ENTITY_SKELETON_HORSE_DEATH + f Lnet/minecraft/class_3414; field_14608 ENTITY_ENDERMAN_DEATH + f Lnet/minecraft/class_3414; field_14619 BLOCK_PUMPKIN_CARVE + f Lnet/minecraft/class_3414; field_15190 ENTITY_PARROT_IMITATE_SPIDER + f Lnet/minecraft/class_3414; field_15002 BLOCK_WOODEN_PRESSURE_PLATE_CLICK_OFF + f Lnet/minecraft/class_3414; field_21912 BLOCK_WEEPING_VINES_HIT + f Lnet/minecraft/class_3414; field_15005 ENTITY_MAGMA_CUBE_HURT_SMALL + f Lnet/minecraft/class_3414; field_15139 ENTITY_VILLAGER_HURT + f Lnet/minecraft/class_3414; field_14830 ENTITY_SNOW_GOLEM_HURT + f Lnet/minecraft/class_3414; field_15184 ENTITY_LEASH_KNOT_BREAK + f Lnet/minecraft/class_3414; field_14679 ENTITY_GUARDIAN_HURT + f Lnet/minecraft/class_3414; field_21946 BLOCK_SOUL_SOIL_PLACE + f Lnet/minecraft/class_3414; field_21941 BLOCK_NETHER_ORE_STEP + f Lnet/minecraft/class_3414; field_21931 BLOCK_SHROOMLIGHT_BREAK + f Lnet/minecraft/class_3414; field_14726 ENTITY_PLAYER_BREATH + f Lnet/minecraft/class_3414; field_22454 AMBIENT_NETHER_WASTES_ADDITIONS + f Lnet/minecraft/class_3414; field_15187 ITEM_CROSSBOW_SHOOT + f Lnet/minecraft/class_3414; field_22268 ENTITY_PIGLIN_JEALOUS + f Lnet/minecraft/class_3414; field_15204 BLOCK_NOTE_BLOCK_HAT + f Lnet/minecraft/class_3414; field_14852 ENTITY_ZOMBIFIED_PIGLIN_ANGRY + f Lnet/minecraft/class_3414; field_17748 ENTITY_WANDERING_TRADER_DEATH + f Lnet/minecraft/class_3414; field_15077 ENTITY_PARROT_HURT + f Lnet/minecraft/class_3414; field_21886 BLOCK_NETHER_BRICKS_FALL + f Lnet/minecraft/class_3414; field_15122 ENTITY_WITHER_SKELETON_DEATH + f Lnet/minecraft/class_3414; field_14618 ENTITY_TURTLE_DEATH_BABY + f Lnet/minecraft/class_3414; field_15055 ENTITY_IRON_GOLEM_DEATH + f Lnet/minecraft/class_3414; field_17615 BLOCK_SWEET_BERRY_BUSH_BREAK + f Lnet/minecraft/class_3414; field_14855 ENTITY_SKELETON_HORSE_HURT + f Lnet/minecraft/class_3414; field_21947 BLOCK_SOUL_SOIL_HIT + f Lnet/minecraft/class_3414; field_19199 BLOCK_REDSTONE_TORCH_BURNOUT + f Lnet/minecraft/class_3414; field_14693 ENTITY_RABBIT_AMBIENT + f Lnet/minecraft/class_3414; field_14885 ENTITY_PARROT_IMITATE_STRAY + f Lnet/minecraft/class_3414; field_14961 BLOCK_WOODEN_PRESSURE_PLATE_CLICK_ON + f Lnet/minecraft/class_3414; field_21913 BLOCK_WEEPING_VINES_FALL + f Lnet/minecraft/class_3414; field_14847 ENTITY_MAGMA_CUBE_JUMP + f Lnet/minecraft/class_3414; field_15008 ENTITY_VILLAGER_NO + f Lnet/minecraft/class_3414; field_14745 ENTITY_SNOW_GOLEM_SHOOT + f Lnet/minecraft/class_3414; field_14758 ENTITY_GUARDIAN_HURT_LAND + f Lnet/minecraft/class_3414; field_15191 ITEM_ARMOR_EQUIP_CHAIN + f Lnet/minecraft/class_3414; field_22455 AMBIENT_NETHER_WASTES_LOOP + f Lnet/minecraft/class_3414; field_24630 ENTITY_FOX_TELEPORT + f Lnet/minecraft/class_3414; field_21932 BLOCK_SHROOMLIGHT_STEP + f Lnet/minecraft/class_3414; field_19149 ENTITY_PLAYER_BURP + f Lnet/minecraft/class_3414; field_22269 ENTITY_PIGLIN_HURT + f Lnet/minecraft/class_3414; field_14622 BLOCK_NOTE_BLOCK_PLING + f Lnet/minecraft/class_3414; field_14743 ENTITY_ZOMBIFIED_PIGLIN_DEATH + f Lnet/minecraft/class_3414; field_18315 ENTITY_WANDERING_TRADER_DISAPPEARED + f Lnet/minecraft/class_3414; field_17612 BLOCK_NETHER_WART_BREAK + f Lnet/minecraft/class_3414; field_15027 ENTITY_WITHER_SKELETON_HURT + f Lnet/minecraft/class_3414; field_14687 ENTITY_TURTLE_EGG_BREAK + f Lnet/minecraft/class_3414; field_22456 AMBIENT_NETHER_WASTES_MOOD + f Lnet/minecraft/class_3414; field_21948 BLOCK_SOUL_SOIL_FALL + f Lnet/minecraft/class_3414; field_23115 BLOCK_RESPAWN_ANCHOR_AMBIENT + f Lnet/minecraft/class_3414; field_15147 ENTITY_RABBIT_ATTACK + f Lnet/minecraft/class_3414; field_15032 ENTITY_PARROT_IMITATE_VEX + f Lnet/minecraft/class_3414; field_15053 BLOCK_WOOD_STEP + f Lnet/minecraft/class_3414; field_22270 ENTITY_PIGLIN_RETREAT + f Lnet/minecraft/class_3414; field_14708 BLOCK_NOTE_BLOCK_SNARE + f Lnet/minecraft/class_3414; field_14710 ENTITY_ZOMBIFIED_PIGLIN_HURT + f Lnet/minecraft/class_3414; field_18316 ENTITY_WANDERING_TRADER_DRINK_MILK + f Lnet/minecraft/class_3414; field_14949 ENTITY_MAGMA_CUBE_SQUISH + f Lnet/minecraft/class_3414; field_14933 ENTITY_VILLAGER_TRADE + f Lnet/minecraft/class_3414; field_22273 ENTITY_SNOW_GOLEM_SHEAR + f Lnet/minecraft/class_3414; field_15103 ITEM_ARMOR_EQUIP_DIAMOND + f Lnet/minecraft/class_3414; field_21933 BLOCK_SHROOMLIGHT_PLACE + f Lnet/minecraft/class_3414; field_14904 ENTITY_PLAYER_DEATH +c net/minecraft/class_3439 net/minecraft/item/crafting/RecipeBook + m (Lnet/minecraft/class_2960;)V method_14879 lock + m (Lnet/minecraft/class_2960;)Z method_22845 isUnlocked + m (Lnet/minecraft/class_3439;)V method_14875 copyFrom + m (Lnet/minecraft/class_1860;)V method_14876 unlock + m ()Lnet/minecraft/class_5411; method_30173 func_242139_a + m (Lnet/minecraft/class_5421;Z)V method_30177 func_242146_b + m (Lnet/minecraft/class_1860;)V method_14886 markSeen + m (Lnet/minecraft/class_5421;Z)V method_14884 func_242143_a + m (Lnet/minecraft/class_5421;)Z method_14887 func_242142_a + m (Lnet/minecraft/class_5411;)V method_30174 func_242140_a + m (Lnet/minecraft/class_2960;)V method_14877 markNew + m (Lnet/minecraft/class_1860;)Z method_14878 isUnlocked + m (Lnet/minecraft/class_5421;)Z method_30176 func_242145_b + m (Lnet/minecraft/class_1729;)Z method_14880 func_242141_a + m (Lnet/minecraft/class_5421;ZZ)V method_30175 func_242144_a + m (Lnet/minecraft/class_1860;)V method_14893 lock + m (Lnet/minecraft/class_1860;)V method_14885 markNew + m (Lnet/minecraft/class_1860;)Z method_14883 isNew + m (Lnet/minecraft/class_2960;)V method_14881 unlock + f Lnet/minecraft/class_5411; field_25734 field_242138_c + f Ljava/util/Set; field_15295 newRecipes + f Ljava/util/Set; field_15300 recipes +c net/minecraft/class_3441 net/minecraft/item/crafting/ServerRecipeBook + m (Ljava/util/Collection;Lnet/minecraft/class_3222;)I method_14903 add + m (Lnet/minecraft/class_2713$class_2714;Lnet/minecraft/class_3222;Ljava/util/List;)V method_14899 sendPacket + m (Lnet/minecraft/class_2499;Ljava/util/function/Consumer;Lnet/minecraft/class_1863;)V method_20732 deserializeRecipes + m ()Lnet/minecraft/class_2487; method_14902 write + m (Lnet/minecraft/class_3222;)V method_14904 init + m (Ljava/util/Collection;Lnet/minecraft/class_3222;)I method_14900 remove + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1863;)V method_14901 read + f Lorg/apache/logging/log4j/Logger; field_15303 LOGGER +c net/minecraft/class_5411 net/minecraft/item/crafting/RecipeBookStatus + m (Lnet/minecraft/class_5421;Z)V method_30181 func_242152_a + m (Lnet/minecraft/class_5411;)V method_30179 func_242150_a + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_5421;Z)V method_30188 func_242159_b + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_5421;Lcom/mojang/datafixers/util/Pair;)V method_30184 func_242155_a + m (Ljava/util/EnumMap;)V method_30182 func_242153_a + m (Lnet/minecraft/class_5421;)Z method_30180 func_242151_a + m ()I hashCode hashCode + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_5411; method_30183 func_242154_a + m (Lnet/minecraft/class_5421;)Z method_30187 func_242158_b + m (Lnet/minecraft/class_2487;Ljava/util/Map;Lnet/minecraft/class_5421;Lcom/mojang/datafixers/util/Pair;)V method_30185 func_242156_a + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_5411; method_30186 func_242157_a + m (Lnet/minecraft/class_2540;)V method_30190 func_242161_b + m (Lnet/minecraft/class_2487;)V method_30189 func_242160_b + m ()Lnet/minecraft/class_5411; method_30178 func_242149_a + f Ljava/util/Map; field_25735 field_242147_a + f Ljava/util/Map; field_25736 field_242148_b +c net/minecraft/class_5411$class_5412 net/minecraft/item/crafting/RecipeBookStatus$CategoryStatus + m ()Ljava/lang/String; toString toString + m (Ljava/lang/Object;)Z equals equals + m ()I hashCode hashCode + m (Lnet/minecraft/class_5411$class_5412;Z)Z method_30193 func_242166_a + m (Lnet/minecraft/class_5411$class_5412;)Z method_30192 func_242165_a + m ()Lnet/minecraft/class_5411$class_5412; method_30191 func_242164_a + m (Lnet/minecraft/class_5411$class_5412;Z)Z method_30195 func_242168_b + m (Lnet/minecraft/class_5411$class_5412;)Z method_30194 func_242167_b + f Z field_25737 field_242162_a + f Z field_25738 field_242163_b +c net/minecraft/class_3445 net/minecraft/stats/Stat + m (Lnet/minecraft/class_3448;Ljava/lang/Object;)Ljava/lang/String; method_14950 buildName + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2960;)Ljava/lang/String; method_14952 locationToKey + m ()Lnet/minecraft/class_3448; method_14949 getType + m ()I hashCode hashCode + m (I)Ljava/lang/String; method_14953 format + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/Object; method_14951 getValue + f Lnet/minecraft/class_3448; field_15321 type + f Lnet/minecraft/class_3446; field_15319 formatter + f Ljava/lang/Object; field_15320 value +c net/minecraft/class_3442 net/minecraft/stats/ServerStatisticsManager + m (Lcom/mojang/datafixers/DataFixer;Ljava/lang/String;)V method_14906 parseLocal + m ()Ljava/util/Set; method_14909 getDirty + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2487; method_14908 func_199065_a + m (Lnet/minecraft/class_3445;)Lnet/minecraft/class_2960; method_14907 func_199066_b + m (Lnet/minecraft/class_2487;Ljava/lang/String;Lnet/minecraft/class_3448;)V method_17991 func_219731_a + m ()V method_14912 saveStatFile + m (Lnet/minecraft/class_2487;Ljava/lang/String;Lnet/minecraft/class_3445;)V method_17990 func_219730_a + m (Lnet/minecraft/class_3222;)V method_14910 sendStats + m ()Ljava/lang/String; method_14911 func_199061_b + m ()V method_14914 markAllDirty + m (Ljava/lang/String;)V method_17992 func_219726_a + m (Lnet/minecraft/class_3448;)Lcom/google/gson/JsonObject; method_14913 func_199064_a + m (Ljava/lang/String;)V method_17993 func_219729_b + m (Lnet/minecraft/class_3448;Ljava/lang/String;)Ljava/util/Optional; method_14905 func_219728_a + f Lorg/apache/logging/log4j/Logger; field_15309 LOGGER + f I field_15306 lastStatRequest + f Lnet/minecraft/server/MinecraftServer; field_15308 server + f Ljava/util/Set; field_15307 dirty + f Ljava/io/File; field_15305 statsFile +c net/minecraft/class_3448 net/minecraft/stats/StatType + m (Ljava/lang/Object;)Lnet/minecraft/class_3445; method_14956 get + m ()Lnet/minecraft/class_2378; method_14959 getRegistry + m ()Ljava/util/Iterator; iterator iterator + m (Lnet/minecraft/class_3446;Ljava/lang/Object;)Lnet/minecraft/class_3445; method_14961 func_199075_a + m ()Ljava/lang/String; method_14957 getTranslationKey + m ()Lnet/minecraft/class_2561; method_30739 func_242170_d + m (Ljava/lang/Object;Lnet/minecraft/class_3446;)Lnet/minecraft/class_3445; method_14955 get + m (Ljava/lang/Object;)Z method_14958 contains + f Lnet/minecraft/class_2378; field_15323 registry + f Ljava/util/Map; field_15324 map + f Lnet/minecraft/class_2561; field_26382 field_242169_c +c net/minecraft/class_3446 net/minecraft/stats/IStatFormatter + m (I)Ljava/lang/String; format format + m (I)Ljava/lang/String; method_16819 func_223253_a_ + m (Ljava/text/DecimalFormat;)V method_16817 func_223254_a_ + m (I)Ljava/lang/String; method_16818 func_223256_c_ + m (I)Ljava/lang/String; method_16816 func_223255_b_ + f Lnet/minecraft/class_3446; field_16977 DISTANCE + f Lnet/minecraft/class_3446; field_16978 DIVIDE_BY_TEN + f Lnet/minecraft/class_3446; field_16975 DEFAULT + f Ljava/text/DecimalFormat; field_16976 DECIMAL_FORMAT + f Lnet/minecraft/class_3446; field_16979 TIME +c net/minecraft/class_3469 net/minecraft/stats/StatisticsManager + m (Lnet/minecraft/class_3448;Ljava/lang/Object;)I method_15024 getValue + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_3445;I)V method_15022 increment + m (Lnet/minecraft/class_3445;)I method_15025 getValue + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_3445;I)V method_15023 setValue + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_15431 statsData +c net/minecraft/class_3468 net/minecraft/stats/Stats + m (Ljava/lang/String;Lnet/minecraft/class_2378;)Lnet/minecraft/class_3448; method_15020 registerType + m (Ljava/lang/String;Lnet/minecraft/class_3446;)Lnet/minecraft/class_2960; method_15021 registerCustom + f Lnet/minecraft/class_3448; field_15419 CUSTOM + f Lnet/minecraft/class_2960; field_15413 CLIMB_ONE_CM + f Lnet/minecraft/class_2960; field_15416 INTERACT_WITH_BEACON + f Lnet/minecraft/class_2960; field_19252 INTERACT_WITH_CARTOGRAPHY_TABLE + f Lnet/minecraft/class_2960; field_15397 DAMAGE_DEALT_RESISTED + f Lnet/minecraft/class_3448; field_15403 ENTITY_KILLED + f Lnet/minecraft/class_2960; field_15394 WALK_ON_WATER_ONE_CM + f Lnet/minecraft/class_2960; field_15425 DAMAGE_RESISTED + f Lnet/minecraft/class_2960; field_15401 WALK_UNDER_WATER_ONE_CM + f Lnet/minecraft/class_3448; field_15392 ITEM_PICKED_UP + f Lnet/minecraft/class_2960; field_17485 INTERACT_WITH_LECTERN + f Lnet/minecraft/class_2960; field_15380 DAMAGE_BLOCKED_BY_SHIELD + f Lnet/minecraft/class_2960; field_15398 CLEAN_SHULKER_BOX + f Lnet/minecraft/class_2960; field_15418 OPEN_SHULKER_BOX + f Lnet/minecraft/class_2960; field_15428 JUMP + f Lnet/minecraft/class_2960; field_15422 SNEAK_TIME + f Lnet/minecraft/class_2960; field_15382 CLEAN_ARMOR + f Lnet/minecraft/class_2960; field_17272 INTERACT_WITH_BLAST_FURNACE + f Lnet/minecraft/class_2960; field_15423 SWIM_ONE_CM + f Lnet/minecraft/class_2960; field_15395 OPEN_CHEST + f Lnet/minecraft/class_2960; field_15399 DAMAGE_DEALT + f Lnet/minecraft/class_2960; field_15376 CROUCH_ONE_CM + f Lnet/minecraft/class_2960; field_22413 field_232863_aD_ + f Lnet/minecraft/class_2960; field_15378 TRADED_WITH_VILLAGER + f Lnet/minecraft/class_2960; field_15379 INTERACT_WITH_FURNACE + f Lnet/minecraft/class_2960; field_21778 INTERACT_WITH_ANVIL + f Lnet/minecraft/class_2960; field_15400 TIME_SINCE_DEATH + f Lnet/minecraft/class_2960; field_15402 TRIGGER_TRAPPED_CHEST + f Lnet/minecraft/class_2960; field_15430 FILL_CAULDRON + f Lnet/minecraft/class_2960; field_15389 LEAVE_GAME + f Lnet/minecraft/class_2960; field_15420 ENCHANT_ITEM + f Lnet/minecraft/class_2960; field_15387 PIG_ONE_CM + f Lnet/minecraft/class_3448; field_15372 ITEM_USED + f Lnet/minecraft/class_2960; field_15393 TUNE_NOTEBLOCK + f Lnet/minecraft/class_2960; field_15421 DEATHS + f Lnet/minecraft/class_2960; field_15409 MINECART_ONE_CM + f Lnet/minecraft/class_3448; field_15427 BLOCK_MINED + f Lnet/minecraft/class_2960; field_15391 FISH_CAUGHT + f Lnet/minecraft/class_2960; field_19255 BELL_RING + f Lnet/minecraft/class_2960; field_15371 INSPECT_DISPENSER + f Lnet/minecraft/class_2960; field_15410 ANIMALS_BRED + f Lnet/minecraft/class_2960; field_15388 DAMAGE_TAKEN + f Lnet/minecraft/class_2960; field_15386 FALL_ONE_CM + f Lnet/minecraft/class_2960; field_19253 INTERACT_WITH_LOOM + f Lnet/minecraft/class_3448; field_15411 ENTITY_KILLED_BY + f Lnet/minecraft/class_2960; field_15408 DAMAGE_DEALT_ABSORBED + f Lnet/minecraft/class_2960; field_15367 INSPECT_DROPPER + f Lnet/minecraft/class_2960; field_17273 INTERACT_WITH_SMOKER + f Lnet/minecraft/class_2960; field_15365 DAMAGE_ABSORBED + f Lnet/minecraft/class_3448; field_15405 ITEM_DROPPED + f Lnet/minecraft/class_2960; field_15426 FLY_ONE_CM + f Lnet/minecraft/class_2960; field_17486 INTERACT_WITH_CAMPFIRE + f Lnet/minecraft/class_2960; field_17271 OPEN_BARREL + f Lnet/minecraft/class_2960; field_24458 field_232862_C_ + f Lnet/minecraft/class_2960; field_15429 TIME_SINCE_REST + f Lnet/minecraft/class_2960; field_15390 CLEAN_BANNER + f Lnet/minecraft/class_2960; field_15364 SPRINT_ONE_CM + f Lnet/minecraft/class_2960; field_21779 INTERACT_WITH_GRINDSTONE + f Lnet/minecraft/class_2960; field_15381 SLEEP_IN_BED + f Lnet/minecraft/class_2960; field_15406 DROP + f Lnet/minecraft/class_2960; field_15377 WALK_ONE_CM + f Lnet/minecraft/class_2960; field_22464 field_232864_aE_ + f Lnet/minecraft/class_2960; field_15407 INTERACT_WITH_BREWINGSTAND + f Lnet/minecraft/class_2960; field_15375 PLAY_RECORD + f Lnet/minecraft/class_2960; field_15369 EAT_CAKE_SLICE + f Lnet/minecraft/class_2960; field_19257 RAID_WIN + f Lnet/minecraft/class_2960; field_15368 INTERACT_WITH_CRAFTING_TABLE + f Lnet/minecraft/class_2960; field_15384 TALKED_TO_VILLAGER + f Lnet/minecraft/class_2960; field_15374 AVIATE_ONE_CM + f Lnet/minecraft/class_2960; field_15417 PLAY_ONE_MINUTE + f Lnet/minecraft/class_2960; field_15424 OPEN_ENDERCHEST + f Lnet/minecraft/class_2960; field_15373 USE_CAULDRON + f Lnet/minecraft/class_3448; field_15383 ITEM_BROKEN + f Lnet/minecraft/class_2960; field_15414 MOB_KILLS + f Lnet/minecraft/class_2960; field_15412 POT_FLOWER + f Lnet/minecraft/class_2960; field_15415 BOAT_ONE_CM + f Lnet/minecraft/class_3448; field_15370 ITEM_CRAFTED + f Lnet/minecraft/class_2960; field_15366 INSPECT_HOPPER + f Lnet/minecraft/class_2960; field_19254 INTERACT_WITH_STONECUTTER + f Lnet/minecraft/class_2960; field_15404 PLAYER_KILLS + f Lnet/minecraft/class_2960; field_15385 PLAY_NOTEBLOCK + f Lnet/minecraft/class_2960; field_15396 HORSE_ONE_CM + f Lnet/minecraft/class_2960; field_19256 RAID_TRIGGER +c net/minecraft/class_3483 net/minecraft/tags/EntityTypeTags + m (Ljava/lang/String;)Lnet/minecraft/class_3494$class_5123; method_15077 getTagById + m ()Ljava/util/List; method_31073 getAllTags + m ()Lnet/minecraft/class_5414; method_15082 getCollection + f Lnet/minecraft/class_3494$class_5123; field_21508 ARROWS + f Lnet/minecraft/class_3494$class_5123; field_22415 IMPACT_PROJECTILES + f Lnet/minecraft/class_5120; field_23679 tagCollection + f Lnet/minecraft/class_3494$class_5123; field_19168 RAIDERS + f Lnet/minecraft/class_3494$class_5123; field_15507 SKELETONS + f Lnet/minecraft/class_3494$class_5123; field_20631 BEEHIVE_INHABITORS +c net/minecraft/class_3481 net/minecraft/tags/BlockTags + m (Ljava/lang/String;)Lnet/minecraft/class_3494$class_5123; method_15069 makeWrapperTag + m ()Ljava/util/List; method_31072 getAllTags + m ()Lnet/minecraft/class_5414; method_15073 getCollection + f Lnet/minecraft/class_5120; field_23678 collection + f Lnet/minecraft/class_3494$class_5123; field_25588 INFINIBURN_OVERWORLD + f Lnet/minecraft/class_3494$class_5123; field_15466 SAND + f Lnet/minecraft/class_3494$class_5123; field_15477 WOODEN_PRESSURE_PLATES + f Lnet/minecraft/class_3494$class_5123; field_15496 UNDERWATER_BONEMEALS + f Lnet/minecraft/class_3494$class_5123; field_15491 WOODEN_TRAPDOORS + f Lnet/minecraft/class_3494$class_5123; field_15476 WALL_CORALS + f Lnet/minecraft/class_3494$class_5123; field_21953 NYLIUM + f Lnet/minecraft/class_3494$class_5123; field_22276 WALL_POST_OVERRIDE + f Lnet/minecraft/class_3494$class_5123; field_15469 SLABS + f Lnet/minecraft/class_3494$class_5123; field_22275 BEACON_BASE_BLOCKS + f Lnet/minecraft/class_3494$class_5123; field_15486 ANVIL + f Lnet/minecraft/class_3494$class_5123; field_15462 SAPLINGS + f Lnet/minecraft/class_3494$class_5123; field_25590 INFINIBURN_END + f Lnet/minecraft/class_3494$class_5123; field_20341 CROPS + f Lnet/minecraft/class_3494$class_5123; field_22274 WITHER_SUMMON_BASE_BLOCKS + f Lnet/minecraft/class_3494$class_5123; field_15502 WOODEN_STAIRS + f Lnet/minecraft/class_3494$class_5123; field_15460 ENDERMAN_HOLDABLE + f Lnet/minecraft/class_3494$class_5123; field_17619 WOODEN_FENCES + f Lnet/minecraft/class_3494$class_5123; field_21780 PORTALS + f Lnet/minecraft/class_3494$class_5123; field_15478 VALID_SPAWN + f Lnet/minecraft/class_3494$class_5123; field_25148 UNSTABLE_BOTTOM_CENTER + f Lnet/minecraft/class_3494$class_5123; field_24459 PREVENT_MOB_SPAWNING_INSIDE + f Lnet/minecraft/class_3494$class_5123; field_21956 WARPED_STEMS + f Lnet/minecraft/class_3494$class_5123; field_15471 PLANKS + f Lnet/minecraft/class_3494$class_5123; field_15492 WALL_SIGNS + f Lnet/minecraft/class_3494$class_5123; field_23800 GUARDED_BY_PIGLINS + f Lnet/minecraft/class_3494$class_5123; field_20338 TALL_FLOWERS + f Lnet/minecraft/class_3494$class_5123; field_15474 JUNGLE_LOGS + f Lnet/minecraft/class_3494$class_5123; field_21955 CRIMSON_STEMS + f Lnet/minecraft/class_3494$class_5123; field_15499 WOODEN_BUTTONS + f Lnet/minecraft/class_3494$class_5123; field_22465 PIGLIN_REPELLENTS + f Lnet/minecraft/class_3494$class_5123; field_15479 CARPETS + f Lnet/minecraft/class_3494$class_5123; field_23208 NON_FLAMMABLE_WOOD + f Lnet/minecraft/class_3494$class_5123; field_17753 DRAGON_IMMUNE + f Lnet/minecraft/class_3494$class_5123; field_15463 RAILS + f Lnet/minecraft/class_3494$class_5123; field_15487 TRAPDOORS + f Lnet/minecraft/class_3494$class_5123; field_15485 DARK_OAK_LOGS + f Lnet/minecraft/class_3494$class_5123; field_22414 CLIMBABLE + f Lnet/minecraft/class_3494$class_5123; field_15498 BIRCH_LOGS + f Lnet/minecraft/class_3494$class_5123; field_15497 BAMBOO_PLANTABLE_ON + f Lnet/minecraft/class_3494$class_5123; field_23209 STRIDER_WARM_BLOCKS + f Lnet/minecraft/class_3494$class_5123; field_15483 CORAL_PLANTS + f Lnet/minecraft/class_3494$class_5123; field_22466 HOGLIN_REPELLENTS + f Lnet/minecraft/class_3494$class_5123; field_16443 BEDS + f Lnet/minecraft/class_3494$class_5123; field_24077 STONE_PRESSURE_PLATES + f Lnet/minecraft/class_3494$class_5123; field_21954 WART_BLOCKS + f Lnet/minecraft/class_3494$class_5123; field_21952 FIRE + f Lnet/minecraft/class_3494$class_5123; field_15461 CORAL_BLOCKS + f Lnet/minecraft/class_3494$class_5123; field_25739 MUSHROOM_GROW_BLOCK + f Lnet/minecraft/class_3494$class_5123; field_15459 STAIRS + f Lnet/minecraft/class_3494$class_5123; field_23063 SOUL_SPEED_BLOCKS + f Lnet/minecraft/class_3494$class_5123; field_15504 WALLS + f Lnet/minecraft/class_3494$class_5123; field_15495 DOORS + f Lnet/minecraft/class_3494$class_5123; field_25806 BASE_STONE_OVERWORLD + f Lnet/minecraft/class_3494$class_5123; field_23210 LOGS_THAT_BURN + f Lnet/minecraft/class_3494$class_5123; field_25589 INFINIBURN_NETHER + f Lnet/minecraft/class_3494$class_5123; field_15470 FLOWER_POTS + f Lnet/minecraft/class_3494$class_5123; field_20340 BEEHIVES + f Lnet/minecraft/class_3494$class_5123; field_15494 WOODEN_DOORS + f Lnet/minecraft/class_3494$class_5123; field_15468 WOODEN_SLABS + f Lnet/minecraft/class_3494$class_5123; field_25147 FENCE_GATES + f Lnet/minecraft/class_3494$class_5123; field_15467 ICE + f Lnet/minecraft/class_3494$class_5123; field_15490 IMPERMEABLE + f Lnet/minecraft/class_3494$class_5123; field_15501 BANNERS + f Lnet/minecraft/class_3494$class_5123; field_24076 PRESSURE_PLATES + f Lnet/minecraft/class_3494$class_5123; field_20342 BEE_GROWABLES + f Lnet/minecraft/class_3494$class_5123; field_16584 FENCES + f Lnet/minecraft/class_3494$class_5123; field_23799 CAMPFIRES + f Lnet/minecraft/class_3494$class_5123; field_20339 FLOWERS + f Lnet/minecraft/class_3494$class_5123; field_15489 SPRUCE_LOGS + f Lnet/minecraft/class_3494$class_5123; field_15465 STONE_BRICKS + f Lnet/minecraft/class_3494$class_5123; field_15472 STANDING_SIGNS + f Lnet/minecraft/class_3494$class_5123; field_15493 BUTTONS + f Lnet/minecraft/class_3494$class_5123; field_17754 WITHER_IMMUNE + f Lnet/minecraft/class_3494$class_5123; field_15500 SIGNS + f Lnet/minecraft/class_3494$class_5123; field_23062 GOLD_ORES + f Lnet/minecraft/class_3494$class_5123; field_15475 LOGS + f Lnet/minecraft/class_3494$class_5123; field_21490 SHULKER_BOXES + f Lnet/minecraft/class_3494$class_5123; field_25807 BASE_STONE_NETHER + f Lnet/minecraft/class_3494$class_5123; field_15503 LEAVES + f Lnet/minecraft/class_3494$class_5123; field_15480 SMALL_FLOWERS + f Lnet/minecraft/class_3494$class_5123; field_15488 CORALS + f Lnet/minecraft/class_3494$class_5123; field_15482 OAK_LOGS + f Lnet/minecraft/class_3494$class_5123; field_15458 ACACIA_LOGS + f Lnet/minecraft/class_3494$class_5123; field_15481 WOOL + f Lnet/minecraft/class_3494$class_5123; field_23119 SOUL_FIRE_BASE_BLOCKS +c net/minecraft/class_3489 net/minecraft/tags/ItemTags + m (Ljava/lang/String;)Lnet/minecraft/class_3494$class_5123; method_15102 makeWrapperTag + m ()Ljava/util/List; method_31074 getAllTags + m ()Lnet/minecraft/class_5414; method_15106 getCollection + f Lnet/minecraft/class_3494$class_5123; field_15556 BANNERS + f Lnet/minecraft/class_3494$class_5123; field_15555 WOODEN_BUTTONS + f Lnet/minecraft/class_3494$class_5123; field_23065 GOLD_ORES + f Lnet/minecraft/class_3494$class_5123; field_23801 SOUL_FIRE_BASE_BLOCKS + f Lnet/minecraft/class_3494$class_5123; field_15542 CARPETS + f Lnet/minecraft/class_3494$class_5123; field_15557 WOODEN_STAIRS + f Lnet/minecraft/class_3494$class_5123; field_16444 BEDS + f Lnet/minecraft/class_3494$class_5123; field_22277 BEACON_PAYMENT_ITEMS + f Lnet/minecraft/class_3494$class_5123; field_15554 BIRCH_LOGS + f Lnet/minecraft/class_3494$class_5123; field_15538 JUNGLE_LOGS + f Lnet/minecraft/class_3494$class_5123; field_20343 TALL_FLOWERS + f Lnet/minecraft/class_3494$class_5123; field_23064 PIGLIN_REPELLENTS + f Lnet/minecraft/class_3494$class_5123; field_21957 CRIMSON_STEMS + f Lnet/minecraft/class_3494$class_5123; field_15537 PLANKS + f Lnet/minecraft/class_3494$class_5123; field_25808 STONE_CRAFTING_MATERIALS + f Lnet/minecraft/class_3494$class_5123; field_15560 WALLS + f Lnet/minecraft/class_3494$class_5123; field_15529 RAILS + f Lnet/minecraft/class_3494$class_5123; field_23212 LOGS_THAT_BURN + f Lnet/minecraft/class_3494$class_5123; field_15546 DARK_OAK_LOGS + f Lnet/minecraft/class_3494$class_5123; field_15548 TRAPDOORS + f Lnet/minecraft/class_3494$class_5123; field_15534 WOODEN_SLABS + f Lnet/minecraft/class_3494$class_5123; field_15533 SIGNS + f Lnet/minecraft/class_3494$class_5123; field_15526 STAIRS + f Lnet/minecraft/class_3494$class_5123; field_15540 WOODEN_PRESSURE_PLATES + f Lnet/minecraft/class_3494$class_5123; field_23969 CREEPER_DROP_MUSIC_DISCS + f Lnet/minecraft/class_3494$class_5123; field_15553 DOORS + f Lnet/minecraft/class_3494$class_5123; field_18317 ARROWS + f Lnet/minecraft/class_3494$class_5123; field_15531 STONE_BRICKS + f Lnet/minecraft/class_3494$class_5123; field_24481 PIGLIN_LOVED + f Lnet/minecraft/class_3494$class_5123; field_15551 BUTTONS + f Lnet/minecraft/class_3494$class_5123; field_23211 NON_FLAMMABLE_WOOD + f Lnet/minecraft/class_3494$class_5123; field_15552 WOODEN_DOORS + f Lnet/minecraft/class_3494$class_5123; field_15536 BOATS + f Lnet/minecraft/class_3494$class_5123; field_15525 ACACIA_LOGS + f Lnet/minecraft/class_3494$class_5123; field_23802 STONE_TOOL_MATERIALS + f Lnet/minecraft/class_3494$class_5123; field_16585 FENCES + f Lnet/minecraft/class_3494$class_5123; field_15544 WOOL + f Lnet/minecraft/class_3494$class_5123; field_20344 FLOWERS + f Lnet/minecraft/class_3494$class_5123; field_15549 SPRUCE_LOGS + f Lnet/minecraft/class_3494$class_5123; field_21958 WARPED_STEMS + f Lnet/minecraft/class_3494$class_5123; field_21465 LECTERN_BOOKS + f Lnet/minecraft/class_3494$class_5123; field_15547 ANVIL + f Lnet/minecraft/class_3494$class_5123; field_15528 SAPLINGS + f Lnet/minecraft/class_3494$class_5123; field_15539 LOGS + f Lnet/minecraft/class_5120; field_23681 collection + f Lnet/minecraft/class_3494$class_5123; field_15558 LEAVES + f Lnet/minecraft/class_3494$class_5123; field_15543 SMALL_FLOWERS + f Lnet/minecraft/class_3494$class_5123; field_15545 OAK_LOGS + f Lnet/minecraft/class_3494$class_5123; field_15527 FISHES + f Lnet/minecraft/class_3494$class_5123; field_15541 MUSIC_DISCS + f Lnet/minecraft/class_3494$class_5123; field_15532 SAND + f Lnet/minecraft/class_3494$class_5123; field_17620 WOODEN_FENCES + f Lnet/minecraft/class_3494$class_5123; field_15550 WOODEN_TRAPDOORS + f Lnet/minecraft/class_3494$class_5123; field_17487 COALS + f Lnet/minecraft/class_3494$class_5123; field_15535 SLABS +c net/minecraft/class_3486 net/minecraft/tags/FluidTags + m (Ljava/lang/String;)Lnet/minecraft/class_3494$class_5123; method_15095 makeWrapperTag + m ()Ljava/util/List; method_29897 getAllTags + f Lnet/minecraft/class_3494$class_5123; field_15517 WATER + f Lnet/minecraft/class_3494$class_5123; field_15518 LAVA + f Lnet/minecraft/class_5120; field_23680 collection +c net/minecraft/class_5394 net/minecraft/tags/Tag + m (Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Class; method_29899 findCommonParentClass + m (Ljava/util/Set;)Lnet/minecraft/class_5394; method_29900 getTagFromContents + m (Ljava/util/Set;)Ljava/lang/Class; method_29901 getContentsClass + m ()Lnet/minecraft/class_5394; method_29898 getEmptyTag + f Lcom/google/common/collect/ImmutableList; field_25593 immutableContents + f Ljava/util/Set; field_25594 contents + f Ljava/lang/Class; field_25591 contentsClassType +c net/minecraft/class_5323 net/minecraft/tags/TagCollectionManager + m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_3494; method_31077 func_242182_c + m ()Lnet/minecraft/class_5415; method_29223 getManager + m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_3494; method_31076 func_242181_b + m (Lnet/minecraft/class_5415;)V method_29219 setManager + m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_3494; method_31075 func_242179_a + m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_3494; method_31078 func_242183_d + f Lnet/minecraft/class_5415; field_25149 manager +c net/minecraft/class_5413 net/minecraft/tags/TagRegistryManager + m (Lnet/minecraft/class_5415;)Lcom/google/common/collect/Multimap; method_30203 validateTags + m ()V method_30202 checkHelperRegistrations + m (Lnet/minecraft/class_5415;)V method_30198 fetchTags + m (Lnet/minecraft/class_2960;Ljava/util/function/Function;)Lnet/minecraft/class_5120; method_30201 create + m (Lnet/minecraft/class_5120;)Z method_30197 func_242192_a + m (Lnet/minecraft/class_5415;Lnet/minecraft/class_5120;)V method_30199 func_242194_a + m (Lcom/google/common/collect/Multimap;Lnet/minecraft/class_5415;Lnet/minecraft/class_2960;Lnet/minecraft/class_5120;)V method_30200 func_242195_a + m ()V method_30196 fetchTags + f Ljava/util/Map; field_25741 idToRegistryMap +c net/minecraft/class_5120 net/minecraft/tags/TagRegistry + m (Lnet/minecraft/class_5414;Lnet/minecraft/class_5120$class_5121;)V method_26772 func_232936_a + m ()Lnet/minecraft/class_5414; method_26770 getCollection + m (Lnet/minecraft/class_3494;Lnet/minecraft/class_5120$class_5121;)V method_27062 func_232933_a + m (Ljava/lang/String;)Lnet/minecraft/class_3494$class_5123; method_26773 createTag + m (Lnet/minecraft/class_5415;)V method_26771 fetchTags + m (Lnet/minecraft/class_5415;)Ljava/util/Set; method_29224 getTagIdsFromSupplier + m ()V method_27061 fetchTags + m ()Ljava/util/List; method_29902 getTags + m (Lnet/minecraft/class_3494;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_27063 func_232934_a + f Ljava/util/function/Function; field_25740 supplierToCollectionFunction + f Lnet/minecraft/class_5414; field_23682 collection + f Ljava/util/List; field_23683 tags +c net/minecraft/class_5120$class_5121 net/minecraft/tags/TagRegistry$NamedTag + m (Ljava/util/function/Function;)V method_26775 fetchTag + m ()Lnet/minecraft/class_3494; method_26776 getTag + f Lnet/minecraft/class_2960; field_23684 id + f Lnet/minecraft/class_3494; field_23685 tag +c net/minecraft/class_5120$1 net/minecraft/tags/TagRegistry$1 +c net/minecraft/class_5414 net/minecraft/tags/ITagCollection + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_30210 get + m (Ljava/lang/Object;)Ljava/util/Collection; method_30206 getOwningTags + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2378;)Lnet/minecraft/class_5414; method_30209 readTagCollectionFromBuffer + m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2960; method_30205 getDirectIdFromTag + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_30213 getTagByID + m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2960; method_30212 getValidatedIdFromTag + m ()Ljava/util/Collection; method_30211 getRegisteredTags + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2348;)V method_30208 writeTagCollectionToBuffer + m (Ljava/util/Map;)Lnet/minecraft/class_5414; method_30207 getTagCollectionFromMap + m ()Lnet/minecraft/class_5414; method_30214 getEmptyTagCollection + m ()Ljava/util/Map; method_30204 getIDTagMap +c net/minecraft/class_5414$1 net/minecraft/tags/ITagCollection$1 + f Lnet/minecraft/class_3494; field_25743 emptyTag + f Lcom/google/common/collect/BiMap; field_25742 field_242206_a +c net/minecraft/class_3494 net/minecraft/tags/ITag + m (Ljava/util/function/Supplier;Lnet/minecraft/class_3494;)Lcom/mojang/serialization/DataResult; method_28135 func_232948_a_ + m (Ljava/util/function/Supplier;)Lcom/mojang/serialization/Codec; method_28134 getTagCodec + m (Ljava/util/Random;)Ljava/lang/Object; method_15142 getRandomElement + m (Ljava/util/function/Supplier;Lnet/minecraft/class_2960;)Lcom/mojang/serialization/DataResult; method_28136 func_232949_a_ + m (Ljava/lang/Object;)Z method_15141 contains + m ()Ljava/util/List; method_15138 getAllElements + m (Lnet/minecraft/class_3494;)Lcom/mojang/serialization/DataResult; method_28133 func_232945_a_ + m (Lnet/minecraft/class_2960;)Lcom/mojang/serialization/DataResult; method_28137 func_232950_a_ + m (Ljava/util/Set;)Lnet/minecraft/class_3494; method_26777 getTagOf +c net/minecraft/class_3494$class_3496 net/minecraft/tags/ITag$ITagEntry + m (Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/Consumer;)Z method_26790 matches + m (Lcom/google/gson/JsonArray;)V method_26789 addAdditionalData +c net/minecraft/class_3494$class_5123 net/minecraft/tags/ITag$INamedTag + m ()Lnet/minecraft/class_2960; method_26791 getName +c net/minecraft/class_3494$class_5145 net/minecraft/tags/ITag$Proxy + m ()Lnet/minecraft/class_3494$class_3496; method_27067 getEntry + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_3494$class_3496; field_23805 entry + f Ljava/lang/String; field_23806 identifier +c net/minecraft/class_3494$class_5122 net/minecraft/tags/ITag$ItemEntry + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2960; field_23689 identifier +c net/minecraft/class_3494$class_3495 net/minecraft/tags/ITag$Builder + m (Ljava/lang/String;Lnet/minecraft/class_3494$class_3496;)V method_27066 func_232958_a_ + m (Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/class_3494$class_5145;)Z method_26783 func_232960_a_ + m (Ljava/lang/Object;)V method_26781 func_232957_a_ + m (Lnet/minecraft/class_3494$class_5145;)Lnet/minecraft/class_3494$class_3495; method_27064 addProxyTag + m ()Lcom/google/gson/JsonObject; method_26788 serialize + m (Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/stream/Stream; method_26786 getProxyTags + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_3494$class_3496; method_30740 deserializeTagEntry + m ()Ljava/util/stream/Stream; method_26785 getProxyStream + m (Lnet/minecraft/class_3494$class_3496;Ljava/lang/String;)Lnet/minecraft/class_3494$class_3495; method_27065 addTag + m (Lnet/minecraft/class_2960;Ljava/lang/String;)Lnet/minecraft/class_3494$class_3495; method_26787 addTagEntry + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Lnet/minecraft/class_3494$class_3495; method_26780 deserialize + m (Lnet/minecraft/class_2960;Ljava/lang/String;)Lnet/minecraft/class_3494$class_3495; method_26784 addItemEntry + m ()Lnet/minecraft/class_3494$class_3495; method_26778 create + m (Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/Optional; method_26782 build + f Ljava/util/List; field_23688 proxyTags +c net/minecraft/class_3494$class_3497 net/minecraft/tags/ITag$TagEntry + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2960; field_15584 id +c net/minecraft/class_3494$class_5479 net/minecraft/tags/ITag$OptionalItemEntry + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2960; field_26383 id +c net/minecraft/class_3494$class_5480 net/minecraft/tags/ITag$OptionalTagEntry + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2960; field_26384 id +c net/minecraft/class_3494$1 net/minecraft/tags/ITag$1 +c net/minecraft/class_3503 net/minecraft/tags/TagCollectionReader + m (Lnet/minecraft/class_2960;)Ljava/lang/Object; method_26799 func_242228_a + m (Lnet/minecraft/class_3300;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_15192 readTagsFromManager + m (Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/class_2960;Lnet/minecraft/class_3494$class_3495;)V method_26797 func_242227_a + m (Lnet/minecraft/class_3300;)Ljava/util/Map; method_18243 func_242223_a + m (Ljava/util/Map;)Lnet/minecraft/class_5414; method_18242 buildTagCollectionFromMap + m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494$class_3495; method_26800 func_242229_b + m (Ljava/lang/String;)Z method_15194 func_242225_a + f Ljava/util/function/Function; field_15609 idToTagFunction + f Lcom/google/gson/Gson; field_15608 GSON + f Lorg/apache/logging/log4j/Logger; field_15607 LOGGER + f Ljava/lang/String; field_15606 tagType + f Ljava/lang/String; field_15605 path + f I field_15603 FILE_TYPE_LENGHT_VALUE +c net/minecraft/class_5415 net/minecraft/tags/ITagCollectionSupplier + m ()Lnet/minecraft/class_5414; method_30215 getBlockTags + m ()Lnet/minecraft/class_5414; method_30218 getItemTags + m ()V method_30222 updateTags + m ()Lnet/minecraft/class_5414; method_30220 getFluidTags + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_5415; method_30219 readTagCollectionSupplierFromBuffer + m (Lnet/minecraft/class_2540;)V method_30217 writeTagCollectionSupplierToBuffer + m ()Lnet/minecraft/class_5414; method_30221 getEntityTypeTags + m (Lnet/minecraft/class_5414;Lnet/minecraft/class_5414;Lnet/minecraft/class_5414;Lnet/minecraft/class_5414;)Lnet/minecraft/class_5415; method_30216 getTagCollectionSupplier + f Lnet/minecraft/class_5415; field_25744 TAG_COLLECTION_SUPPLIER +c net/minecraft/class_5415$1 net/minecraft/tags/ITagCollectionSupplier$1 + f Lnet/minecraft/class_5414; field_25746 field_242214_c + f Lnet/minecraft/class_5414; field_25747 field_242215_d + f Lnet/minecraft/class_5414; field_25748 field_242216_e + f Lnet/minecraft/class_5414; field_25745 field_242213_b +c net/minecraft/class_3505 net/minecraft/tags/NetworkTagManager + m ()Lnet/minecraft/class_5415; method_30223 getTagCollectionSupplier + m (Ljava/util/Map$Entry;)Ljava/lang/String; method_29225 func_232978_a_ + m (Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/lang/Void;)V method_30224 func_232979_a_ + f Lnet/minecraft/class_5415; field_25749 tagCollectionSupplier + f Lnet/minecraft/class_3503; field_15612 blocks + f Lnet/minecraft/class_3503; field_15613 items + f Lnet/minecraft/class_3503; field_15614 fluids + f Lnet/minecraft/class_3503; field_15615 entityTypes +c net/minecraft/class_3509 net/minecraft/util/ClassInheritanceMultiMap + m (Ljava/lang/Object;)Z remove remove + m (Ljava/lang/Object;)Z add add + m ()I size size + m (Ljava/lang/Class;)Ljava/util/List; method_15217 func_219791_b + m (Ljava/lang/Object;)Z contains contains + m ()Ljava/util/List; method_29903 func_241289_a_ + m ()Ljava/util/Iterator; iterator iterator + m (Ljava/lang/Class;)Ljava/util/Collection; method_15216 getByClass + f Ljava/util/List; field_15635 values + f Ljava/util/Map; field_15636 map + f Ljava/lang/Class; field_15637 baseClass +c net/minecraft/class_3508 net/minecraft/util/BitArray + m (I)I method_15211 getAt + m (I)I method_27284 func_232986_b_ + m (II)I method_15214 swapAt + m ()I method_15215 size + m (Ljava/util/function/IntConsumer;)V method_21739 getAll + m ()[J method_15212 getBackingLongArray + m (II)V method_15210 setAt + f I field_15633 bitsPerEntry + f [I field_24078 field_232981_a_ + f I field_15632 arraySize + f J field_15634 maxEntryValue + f [J field_15631 longArray + f I field_24079 field_232982_f_ + f I field_24080 field_232983_g_ + f I field_24082 field_232985_i_ + f I field_24081 field_232984_h_ +c net/minecraft/class_3515 net/minecraft/util/CryptManager + m ([B)Ljava/security/PublicKey; method_15242 decodePublicKey + m (Ljava/lang/String;[B)[B method_15236 digestOperation + m (Ljava/security/Key;[B)[B method_15238 encryptData + m (ILjava/lang/String;Ljava/security/Key;)Ljavax/crypto/Cipher; method_15241 createTheCipherInstance + m (Ljava/security/Key;[B)[B method_15243 decryptData + m ()Ljava/security/KeyPair; method_15237 generateKeyPair + m (Ljava/security/PrivateKey;[B)Ljavax/crypto/SecretKey; method_15234 decryptSharedKey + m (ILjava/security/Key;[B)[B method_15244 cipherOperation + m (Ljava/lang/String;Ljava/security/PublicKey;Ljavax/crypto/SecretKey;)[B method_15240 getServerIdHash + m (ILjava/security/Key;)Ljavax/crypto/Cipher; method_15235 createNetCipherInstance + m ()Ljavax/crypto/SecretKey; method_15239 createNewSharedKey + f Lorg/apache/logging/log4j/Logger; field_15652 LOGGER +c net/minecraft/class_3513 net/minecraft/util/IntIdentityHashBiMap + m ()I method_15227 size + m ()I method_15226 nextId + m (Ljava/lang/Object;I)I method_15232 getIndex + m (I)I method_15223 findEmpty + m (Ljava/lang/Object;)I method_15225 add + m (I)V method_15224 grow + m (Ljava/lang/Object;)I method_15228 hashObject + m ()V method_15229 clear + m (I)I method_15222 getValue + m ()Ljava/util/Iterator; iterator iterator + m (Ljava/lang/Object;I)V method_15230 put + f I field_15648 mapSize + f [Ljava/lang/Object; field_15647 byId + f [I field_15646 intKeys + f I field_15649 nextFreeIndex + f [Ljava/lang/Object; field_15651 values + f Ljava/lang/Object; field_15650 EMPTY +c net/minecraft/class_5125 net/minecraft/server/SessionLockManager + m (Ljava/nio/file/Path;)Z method_26804 func_232999_b_ + m ()V close close + m (Ljava/nio/file/Path;)Lnet/minecraft/class_5125; method_26803 func_232998_a_ + m ()Z method_26802 func_232997_a_ + f Ljava/nio/channels/FileLock; field_23693 field_232995_b_ + f Ljava/nio/channels/FileChannel; field_23692 field_232994_a_ + f Ljava/nio/ByteBuffer; field_25353 field_232996_c_ +c net/minecraft/class_5125$class_5126 net/minecraft/server/SessionLockManager$AlreadyLockedException + m (Ljava/nio/file/Path;)Lnet/minecraft/class_5125$class_5126; method_26805 func_233000_a_ +c net/minecraft/class_4456 net/minecraft/util/CSVWriter + m (Ljava/util/stream/Stream;)V method_21629 func_225427_a + m ([Ljava/lang/Object;)V method_21630 func_225426_a + m (Ljava/lang/Object;)Ljava/lang/String; method_21628 func_225425_a + m ()Lnet/minecraft/class_4456$class_4457; method_21627 func_225428_a + f Ljava/io/Writer; field_20284 field_225429_a + f I field_20285 field_225430_b +c net/minecraft/class_4456$class_4457 net/minecraft/util/CSVWriter$Builder + m (Ljava/io/Writer;)Lnet/minecraft/class_4456; method_21631 func_225422_a + m (Ljava/lang/String;)Lnet/minecraft/class_4456$class_4457; method_21632 func_225423_a + f Ljava/util/List; field_20286 field_225424_a +c net/minecraft/class_4456$1 net/minecraft/util/CSVWriter$1 +c net/minecraft/class_5253 net/minecraft/util/ColorHelper +c net/minecraft/class_5253$class_5254 net/minecraft/util/ColorHelper$PackedColor + m (I)I method_27766 getGreen + m (I)I method_27762 getAlpha + m (IIII)I method_27764 packColor + m (I)I method_27765 getRed + m (II)I method_27763 blendColors + m (I)I method_27767 getBlue +c net/minecraft/class_5127 net/minecraft/world/chunk/storage/SuppressedExceptions + m ()V method_26806 func_233002_a_ + m (Ljava/lang/Throwable;)V method_26807 func_233003_a_ + f Ljava/lang/Throwable; field_23694 field_233001_a_ +c net/minecraft/class_5224 net/minecraft/util/ICharacterConsumer + m (ILnet/minecraft/class_2583;I)Z accept accept +c net/minecraft/class_5481 net/minecraft/util/IReorderingProcessor + m (Ljava/util/List;)Lnet/minecraft/class_5481; method_30749 func_242241_a + m (ILnet/minecraft/class_2583;)Lnet/minecraft/class_5481; method_30741 fromCodePoint + m (Lnet/minecraft/class_5224;)Z accept accept + m (Ljava/lang/String;Lnet/minecraft/class_2583;)Lnet/minecraft/class_5481; method_30747 fromString + m (Ljava/lang/String;Lnet/minecraft/class_2583;Lit/unimi/dsi/fastutil/ints/Int2IntFunction;Lnet/minecraft/class_5224;)Z method_30748 func_242240_a + m (Lnet/minecraft/class_5481;Lnet/minecraft/class_5481;Lnet/minecraft/class_5224;)Z method_30743 func_242235_a + m (Ljava/lang/String;Lnet/minecraft/class_2583;Lit/unimi/dsi/fastutil/ints/Int2IntFunction;)Lnet/minecraft/class_5481; method_30754 func_242246_b + m (Lnet/minecraft/class_5224;Lit/unimi/dsi/fastutil/ints/Int2IntFunction;)Lnet/minecraft/class_5224; method_30745 func_242237_a + m (Lnet/minecraft/class_5224;)Z method_30744 func_242236_a + m (Ljava/util/List;)Lnet/minecraft/class_5481; method_30755 func_242247_b + m (Lnet/minecraft/class_5481;Lnet/minecraft/class_5481;)Lnet/minecraft/class_5481; method_30752 func_242244_b + m (Lnet/minecraft/class_5224;Lit/unimi/dsi/fastutil/ints/Int2IntFunction;ILnet/minecraft/class_2583;I)Z method_30746 func_242238_a + m (Ljava/lang/String;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_30753 func_242245_b + m (Lnet/minecraft/class_2583;ILnet/minecraft/class_5224;)Z method_30751 func_242243_a + m (Ljava/util/List;Lnet/minecraft/class_5224;)Z method_30750 func_242242_a + m (Lnet/minecraft/class_5481;Lnet/minecraft/class_5481;)Lnet/minecraft/class_5481; method_30742 func_242234_a + f Lnet/minecraft/class_5481; field_26385 field_242232_a +c net/minecraft/class_3517 net/minecraft/util/FrameTimer + m ()[J method_15246 getFrames + m (I)I method_15251 parseIndex + m ()I method_15250 getIndex + m (J)V method_15247 addFrame + m ()I method_15249 getLastIndex + m (JII)I method_15248 getLineHeight + f I field_15654 index + f I field_15656 lastIndex + f I field_15655 counter + f [J field_15653 frames +c net/minecraft/class_3518 net/minecraft/util/JSONUtils + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject; method_15296 getJsonObject + m (Lcom/google/gson/Gson;Ljava/lang/String;Ljava/lang/Class;Z)Ljava/lang/Object; method_15279 fromJson + m (Lcom/google/gson/JsonElement;Ljava/lang/String;)Lcom/google/gson/JsonObject; method_15295 getJsonObject + m (Lcom/google/gson/JsonElement;Ljava/lang/String;)Lcom/google/gson/JsonArray; method_15252 getJsonArray + m (Lcom/google/gson/JsonElement;Ljava/lang/String;)J method_15263 getLong + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonArray; method_15261 getJsonArray + m (Lcom/google/gson/JsonElement;Ljava/lang/String;)B method_15293 getByte + m (Lcom/google/gson/Gson;Ljava/lang/String;Lcom/google/gson/reflect/TypeToken;)Ljava/lang/Object; method_15290 fromJSONUnlenient + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z method_15258 getBoolean + m (Lcom/google/gson/JsonObject;Ljava/lang/String;I)I method_15282 getInt + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15254 isBoolean + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Ljava/lang/String; method_15265 getString + m (Ljava/io/Reader;)Lcom/google/gson/JsonObject; method_15255 fromJson + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15294 hasField + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)J method_22449 getLong + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gson/JsonDeserializationContext;Ljava/lang/Class;)Ljava/lang/Object; method_15283 deserializeClass + m (Lcom/google/gson/JsonElement;)Z method_15286 isString + m (Lcom/google/gson/Gson;Ljava/io/Reader;Lcom/google/gson/reflect/TypeToken;)Ljava/lang/Object; method_15297 fromJSONUnlenient + m (Lcom/google/gson/Gson;Ljava/io/Reader;Ljava/lang/Class;)Ljava/lang/Object; method_15276 fromJson + m (Lcom/google/gson/Gson;Ljava/lang/String;Lcom/google/gson/reflect/TypeToken;Z)Ljava/lang/Object; method_15262 fromJSON + m (Ljava/lang/String;)Lcom/google/gson/JsonObject; method_15285 fromJson + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Lnet/minecraft/class_1792; method_15288 getItem + m (Lcom/google/gson/JsonElement;Ljava/lang/String;)Z method_15268 getBoolean + m (Lcom/google/gson/JsonElement;Ljava/lang/String;)I method_15257 getInt + m (Lcom/google/gson/JsonElement;Ljava/lang/String;)Lnet/minecraft/class_1792; method_15256 getItem + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lcom/google/gson/JsonArray;)Lcom/google/gson/JsonArray; method_15292 getJsonArray + m (Lcom/google/gson/JsonElement;Ljava/lang/String;)F method_15269 getFloat + m (Lcom/google/gson/Gson;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; method_15284 fromJson + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15289 isString + m (Ljava/io/Reader;Z)Lcom/google/gson/JsonObject; method_15274 fromJson + m (Lcom/google/gson/JsonObject;Ljava/lang/String;J)J method_15280 getLong + m (Lcom/google/gson/JsonElement;Ljava/lang/String;)Ljava/lang/String; method_15287 getString + m (Lcom/google/gson/Gson;Ljava/io/Reader;Lcom/google/gson/reflect/TypeToken;Z)Ljava/lang/Object; method_15273 fromJSON + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15264 isJsonArray + m (Ljava/lang/String;Ljava/lang/String;)Lcom/google/gson/JsonSyntaxException; method_17995 func_219793_a + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)F method_15259 getFloat + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15278 isJsonPrimitive + m (Lcom/google/gson/JsonObject;Ljava/lang/String;F)F method_15277 getFloat + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)I method_15260 getInt + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_15253 getString + m (Lcom/google/gson/JsonElement;Ljava/lang/String;Lcom/google/gson/JsonDeserializationContext;Ljava/lang/Class;)Ljava/lang/Object; method_15291 deserializeClass + m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15270 getBoolean + m (Lcom/google/gson/JsonElement;)Z method_15275 isNumber + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lcom/google/gson/JsonObject;)Lcom/google/gson/JsonObject; method_15281 getJsonObject + m (Lcom/google/gson/JsonElement;)Ljava/lang/String; method_15266 toString + m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lcom/google/gson/JsonDeserializationContext;Ljava/lang/Class;)Ljava/lang/Object; method_15272 deserializeClass + m (Lcom/google/gson/JsonObject;Ljava/lang/String;B)B method_15271 getByte + m (Lcom/google/gson/Gson;Ljava/io/Reader;Ljava/lang/Class;Z)Ljava/lang/Object; method_15267 fromJson + m (Ljava/lang/String;Z)Lcom/google/gson/JsonObject; method_15298 fromJson + f Lcom/google/gson/Gson; field_15657 GSON +c net/minecraft/class_3521 net/minecraft/util/HTTPUtil + m (Ljava/io/File;Ljava/lang/String;Ljava/util/Map;ILnet/minecraft/class_3536;Ljava/net/Proxy;)Ljava/util/concurrent/CompletableFuture; method_15301 downloadResourcePack + m ()I method_15302 getSuitableLanPort + m (Lnet/minecraft/class_3536;Ljava/lang/String;Ljava/net/Proxy;Ljava/util/Map;Ljava/io/File;I)Ljava/lang/Object; method_15303 func_219798_a + f Lorg/apache/logging/log4j/Logger; field_15665 LOGGER + f Lcom/google/common/util/concurrent/ListeningExecutorService; field_15664 DOWNLOADER_EXECUTOR +c net/minecraft/class_3528 net/minecraft/util/LazyValue + m ()Ljava/lang/Object; method_15332 getValue + f Ljava/lang/Object; field_15718 value + f Ljava/util/function/Supplier; field_15719 supplier +c net/minecraft/class_4801 net/minecraft/util/RangedInteger + m (Ljava/util/Random;)I method_24503 getRandomWithinRange + m ()I method_29493 getMax + m (II)Lnet/minecraft/class_4801; method_24502 createRangedInteger + m ()I method_29492 getMinInclusive + m ()Ljava/lang/String; toString toString + f I field_22278 minInclusive + f I field_22279 max +c net/minecraft/class_4540 net/minecraft/util/FastRandom + m (JJ)J method_22372 mix +c net/minecraft/class_3532 net/minecraft/util/math/MathHelper + m (D)I method_15384 ceil + m (F)I method_15375 floor + m (I)I method_15382 abs + m (III)J method_15371 getCoordinateRandom + m (D)D method_15385 frac + m (D)J method_15372 lfloor + m (D)D method_16435 perlinFade + m (F)F method_22450 frac + m (III)I method_15340 clamp + m (F)I method_15386 ceil + m (I)I method_15339 smallestEncompassingPowerOfTwo + m (Ljava/util/Random;DD)D method_15366 nextDouble + m (F)F method_15362 cos + m (DDDDDDDDDDD)D method_16438 lerp3 + m (II)I method_15387 normalizeAngle + m (D)I method_15365 fastFloor + m (FFF)F method_16439 lerp + m (FFF)I method_15353 rgb + m (Ljava/lang/String;I)I method_15343 getInt + m (JJJ)J method_24156 clamp + m (DDDDDD)D method_16437 lerp2 + m (FF)Z method_15347 epsilonEquals + m (DD)Z method_20390 epsilonEquals + m (Lnet/minecraft/class_2382;)J method_15389 getPositionRandom + m ([F)V method_15376 func_203445_a + m (Ljava/util/Random;II)I method_15395 nextInt + m (D)F method_22860 rotWrap + m (F)F method_23278 fastInvCubeRoot + m (FF)F method_24504 func_233021_e_ + m (I)I method_15354 hash + m (FFF)F method_15363 clamp + m (DDD)D method_16436 lerp + m (I)I method_15342 log2DeBruijn + m (FFF)F method_15348 approach + m ([J)D method_15373 average + m ()Ljava/util/UUID; method_15394 getRandomUUID + m (FF)F method_15381 wrapSubtractDegrees + m (DD)D method_15349 atan2 + m (DDD)D method_15390 clampedLerp + m (F)F method_15379 abs + m (DD)D method_15391 absMax + m (D)D method_15338 wrapDegrees + m (III)I method_15383 rgb + m (D)D method_15345 fastInvSqrt + m (I)I method_15392 wrapDegrees + m (F)F method_15393 wrapDegrees + m (IILjava/util/function/IntPredicate;)I method_15360 binarySearch + m (Ljava/util/Random;FF)F method_15344 nextFloat + m (D)F method_15368 sqrt + m (D)I method_15357 floor + m (II)I method_15346 intFloorDiv + m (F)F method_15355 sqrt + m (F)F method_15374 sin + m (FFF)F method_22859 rotLerp + m (II)I method_28139 roundUp + m (FFF)I method_15369 hsvToRGB + m (FFF)F method_17821 interpolateAngle + m (FFF)F method_15388 approachDegrees + m (D)I method_17822 signum + m (I)I method_15351 log2 + m (F)F method_27285 squareFloat + m (F)F method_22858 fastInvSqrt + m (Ljava/util/Random;)Ljava/util/UUID; method_15378 getRandomUUID + m (FFF)F method_20306 func_219800_b + m (FF)F method_15341 positiveModulo + m (DDD)D method_15350 clamp + m (DD)D method_15367 positiveModulo + m (I)Z method_15352 isPowerOfTwo + m (FF)F method_15356 degreesDifferenceAbs + m (DDD)D method_15370 func_233020_c_ + f [F field_15725 SIN_TABLE + f [D field_15727 ASINE_TAB + f [I field_15723 MULTIPLY_DE_BRUIJN_BIT_POSITION + f F field_15724 SQRT_2 + f D field_15728 FRAC_BIAS + f Ljava/util/Random; field_15726 RANDOM + f [D field_15722 COS_TAB +c net/minecraft/class_3530 net/minecraft/util/EnumTypeAdapterFactory + m (Lnet/minecraft/class_3530;Ljava/lang/Object;)Ljava/lang/String; method_15335 access$000 + m (Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter; create create + m (Ljava/lang/Object;)Ljava/lang/String; method_15334 getName +c net/minecraft/class_3530$1 net/minecraft/util/EnumTypeAdapterFactory$1 + m (Lcom/google/gson/stream/JsonReader;)Ljava/lang/Object; read read + m (Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V write write + f Lnet/minecraft/class_3530; field_15721 field_151230_b + f Ljava/util/Map; field_15720 field_151231_a +c net/minecraft/class_3538 net/minecraft/util/ReuseableStream + m (Lnet/minecraft/class_3538;)Ljava/util/Spliterator; method_15420 func_219808_b + m ()Ljava/util/stream/Stream; method_15418 createStream + m (Lnet/minecraft/class_3538;)Ljava/util/List; method_15419 func_212759_a + f Ljava/util/List; field_15745 cachedValues + f Ljava/util/Spliterator; field_15746 spliterator +c net/minecraft/class_3538$1 net/minecraft/util/ReuseableStream$1 + m (Ljava/util/function/Consumer;)Z tryAdvance tryAdvance + f I field_15747 nextIdx + f Lnet/minecraft/class_3538; field_15748 field_212757_a +c net/minecraft/class_3536 net/minecraft/util/IProgressUpdate + m (Lnet/minecraft/class_2561;)V method_15412 displaySavingString + m ()V method_15411 setDoneWorking + m (Lnet/minecraft/class_2561;)V method_15413 resetProgressAndMessage + m (Lnet/minecraft/class_2561;)V method_15414 displayLoadingString + m (I)V method_15410 setLoadingProgress +c net/minecraft/class_4706 net/minecraft/util/SortedArraySet + m ([Ljava/lang/Object;)[Ljava/lang/Object; method_23864 cast + m ()Ljava/util/Iterator; iterator iterator + m ()I size size + m (Lnet/minecraft/class_4706;)I method_23860 func_226173_a_ + m (Ljava/lang/Object;)Z remove remove + m (Lnet/minecraft/class_4706;)[Ljava/lang/Object; method_23867 func_226180_b_ + m ()Ljava/lang/Object; method_23865 getSmallest + m (I)Ljava/lang/Object; method_23871 func_226184_e_ + m (Ljava/lang/Object;)Z contains contains + m (I)V method_23870 func_226183_d_ + m (I)V method_23868 func_226181_c_ + m (I)Lnet/minecraft/class_4706; method_23859 newSet + m (Ljava/lang/Object;)Z equals equals + m ()V clear clear + m (Ljava/lang/Object;I)V method_23863 func_226176_a_ + m (Ljava/lang/Object;)Z add add + m (I)I method_23866 func_226179_b_ + m ()[Ljava/lang/Object; toArray toArray + m (Ljava/lang/Object;)Ljava/lang/Object; method_23862 func_226175_a_ + m (Lnet/minecraft/class_4706;I)V method_23861 func_226174_a_ + m (Ljava/lang/Object;)I method_23869 binarySearch + m ([Ljava/lang/Object;)[Ljava/lang/Object; toArray toArray + f Ljava/util/Comparator; field_21562 comparator + f I field_21564 maxIndex + f [Ljava/lang/Object; field_21563 storage +c net/minecraft/class_4706$class_4707 net/minecraft/util/SortedArraySet$Itr + m ()Z hasNext hasNext + m ()Ljava/lang/Object; next next + m ()V remove remove + f Lnet/minecraft/class_4706; field_21565 field_226185_a_ + f I field_21566 field_226186_b_ + f I field_21567 field_226187_c_ +c net/minecraft/class_4706$1 net/minecraft/util/SortedArraySet$1 +c net/minecraft/class_3540 net/minecraft/client/util/MouseSmoother + m ()V method_15428 reset + m (DD)D method_15429 smooth + f D field_15758 lastAmount + f D field_15759 remainingValue + f D field_15760 targetValue +c net/minecraft/class_3542 net/minecraft/util/IStringSerializable + m (Ljava/util/function/Supplier;Ljava/util/function/Function;)Lcom/mojang/serialization/Codec; method_28140 createEnumCodec + m ()Ljava/lang/String; method_15434 getString + m ([Ljava/lang/Enum;I)Ljava/lang/Enum; method_28143 func_233026_a_ + m (Ljava/util/function/ToIntFunction;Ljava/util/function/IntFunction;Ljava/util/function/Function;)Lcom/mojang/serialization/Codec; method_28141 createCodec + m ([Lnet/minecraft/class_3542;)Lcom/mojang/serialization/Keyable; method_28142 createKeyable +c net/minecraft/class_3542$1 net/minecraft/util/IStringSerializable$1 + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_3542;)Lcom/mojang/datafixers/util/Pair; method_28145 func_233030_a_ + m (Lnet/minecraft/class_3542;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_28144 encode + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; decode decode + m ()Ljava/lang/String; toString toString + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_3542;)Lcom/mojang/datafixers/util/Pair; method_28150 func_233035_b_ + m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; encode encode + m (Ljava/util/function/Function;Ljava/lang/String;)Lcom/mojang/serialization/DataResult; method_28148 func_233033_a_ + m (Ljava/lang/Number;)Lcom/mojang/serialization/DataResult; method_28146 func_233031_a_ + m (Ljava/lang/String;)Lcom/mojang/serialization/DataResult; method_28147 func_233032_a_ + m (Ljava/util/function/IntFunction;Ljava/lang/Number;)Lcom/mojang/serialization/DataResult; method_28149 func_233034_a_ + f Ljava/util/function/Function; field_24638 field_233029_c_ + f Ljava/util/function/IntFunction; field_24637 field_233028_b_ + f Ljava/util/function/ToIntFunction; field_24636 field_233027_a_ +c net/minecraft/class_3542$2 net/minecraft/util/IStringSerializable$2 + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/stream/Stream; keys keys + f [Lnet/minecraft/class_3542; field_24639 field_233036_a_ +c net/minecraft/class_5223 net/minecraft/util/text/TextProcessing + m (Ljava/lang/StringBuilder;ILnet/minecraft/class_2583;I)Z method_27475 func_238342_a_ + m (Ljava/lang/String;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27479 func_238346_c_ + m (Ljava/lang/String;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27478 func_238345_b_ + m (Ljava/lang/String;)Ljava/lang/String; method_27471 func_238338_a_ + m (Ljava/lang/String;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27474 func_238341_a_ + m (Ljava/lang/String;ILnet/minecraft/class_2583;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27473 func_238340_a_ + m (Lnet/minecraft/class_5224;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_27470 func_238337_a + m (Lnet/minecraft/class_5348;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27476 func_238343_a_ + m (Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;IC)Z method_27477 func_238344_a_ + m (Ljava/lang/String;ILnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27472 func_238339_a_ + f Ljava/util/Optional; field_24215 field_238336_a_ +c net/minecraft/class_4802 net/minecraft/util/TickRangeConverter + m (II)Lnet/minecraft/class_4801; method_24505 convertRange +c net/minecraft/class_3544 net/minecraft/util/StringUtils + m (I)Ljava/lang/String; method_15439 ticksToElapsedTime + m (Ljava/lang/String;)Ljava/lang/String; method_15440 stripControlCodes + m (Ljava/lang/String;)Z method_15438 isNullOrEmpty + f Ljava/util/regex/Pattern; field_15771 PATTERN_CONTROL_CODE +c net/minecraft/class_5428 net/minecraft/world/gen/feature/FeatureSpread + m ()I hashCode hashCode + m (Lnet/minecraft/class_5428;)Lcom/mojang/serialization/DataResult; method_30323 func_242261_c + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30320 func_242258_a + m (Lnet/minecraft/class_5428;)Ljava/lang/Integer; method_30324 func_242262_d + m (Ljava/lang/Object;)Z equals equals + m (I)Lnet/minecraft/class_5428; method_30314 func_242252_a + m (Lnet/minecraft/class_5428;)Ljava/lang/Integer; method_30325 func_242263_e + m (Lnet/minecraft/class_5428;)Lcom/mojang/datafixers/util/Either; method_30318 func_242256_a + m ()Ljava/lang/String; toString toString + m (Ljava/util/Random;)I method_30321 func_242259_a + m (Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_5428; method_30319 func_242257_a + m (IIILnet/minecraft/class_5428;)Lcom/mojang/serialization/DataResult; method_30317 func_242255_a + m (Lnet/minecraft/class_5428;)Lnet/minecraft/class_5428; method_30322 func_242260_b + m (III)Lcom/mojang/serialization/Codec; method_30316 func_242254_a + m (II)Lnet/minecraft/class_5428; method_30315 func_242253_a + f I field_25811 spread + f Lcom/mojang/serialization/Codec; field_25809 CODEC + f I field_25810 base +c net/minecraft/class_3545 net/minecraft/util/Tuple + m ()Ljava/lang/Object; method_15441 getB + m ()Ljava/lang/Object; method_15442 getA + f Ljava/lang/Object; field_15773 b + f Ljava/lang/Object; field_15772 a +c net/minecraft/class_3902 net/minecraft/util/Unit + m (Ljava/lang/String;)Lnet/minecraft/class_3902; valueOf valueOf + m ()[Lnet/minecraft/class_3902; values values + f [Lnet/minecraft/class_3902; field_17275 $VALUES + f Lnet/minecraft/class_3902; field_17274 INSTANCE +c net/minecraft/class_4284 net/minecraft/util/datafix/DefaultTypeReferences + m ()[Lnet/minecraft/class_4284; values values + m ()Lcom/mojang/datafixers/DSL$TypeReference; method_20329 getTypeReference + m (Ljava/lang/String;)Lnet/minecraft/class_4284; valueOf valueOf + f Lnet/minecraft/class_4284; field_19219 SAVED_DATA + f Lnet/minecraft/class_4284; field_19220 ADVANCEMENTS + f Lnet/minecraft/class_4284; field_24640 WORLD_GEN_SETTINGS + f Lnet/minecraft/class_4284; field_19221 POI_CHUNK + f Lnet/minecraft/class_4284; field_19212 LEVEL + f Lnet/minecraft/class_4284; field_19214 CHUNK + f Lcom/mojang/datafixers/DSL$TypeReference; field_19222 reference + f Lnet/minecraft/class_4284; field_19213 PLAYER + f Lnet/minecraft/class_4284; field_19215 HOTBAR + f [Lnet/minecraft/class_4284; field_19223 $VALUES + f Lnet/minecraft/class_4284; field_19216 OPTIONS + f Lnet/minecraft/class_4284; field_19218 STATS + f Lnet/minecraft/class_4284; field_19217 STRUCTURE +c net/minecraft/class_3549 net/minecraft/util/WeightedRandom + m (Ljava/util/List;I)Lnet/minecraft/class_3549$class_3550; method_15447 getRandomItem + m (Ljava/util/Random;Ljava/util/List;)Lnet/minecraft/class_3549$class_3550; method_15446 getRandomItem + m (Ljava/util/List;)I method_15445 getTotalWeight + m (Ljava/util/Random;Ljava/util/List;I)Lnet/minecraft/class_3549$class_3550; method_15444 getRandomItem +c net/minecraft/class_3549$class_3550 net/minecraft/util/WeightedRandom$Item + f I field_15774 itemWeight +c net/minecraft/class_5298 net/minecraft/util/ArbitraryBitLengthIntArray + m ()[J method_28151 func_233047_a_ + m (I)I method_28152 func_233048_a_ + m ()I method_28154 func_233050_b_ + m (II)V method_28153 func_233049_a_ + f I field_24642 field_233044_b_ + f I field_24644 field_233046_d_ + f [J field_24641 field_233043_a_ + f J field_24643 field_233045_c_ +c net/minecraft/class_3551 net/minecraft/util/datafix/DataFixesManager + m (Ljava/lang/String;)Ljava/lang/String; method_15459 func_207101_r + m (Ljava/lang/String;)Ljava/lang/String; method_15455 func_207106_s + m (Lcom/mojang/datafixers/DataFixerBuilder;)V method_15451 addFixers + m (Ljava/util/Map;Ljava/lang/String;)Ljava/lang/String; method_30071 func_241302_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_15449 func_207111_t + m ()Lcom/mojang/datafixers/DataFixer; method_15471 createFixer + m (Ljava/lang/String;Ljava/lang/String;)Ljava/util/function/UnaryOperator; method_30068 rename + m ()Lcom/mojang/datafixers/DataFixer; method_15450 getDataFixer + m (Ljava/util/Map;)Ljava/util/function/UnaryOperator; method_30070 rename + m (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_30069 func_241300_a_ + f Lcom/mojang/datafixers/DataFixer; field_15777 DATA_FIXER + f Ljava/util/function/BiFunction; field_15776 SCHEMA_FACTORY + f Ljava/util/function/BiFunction; field_15775 NAMESPACED_SCHEMA_FACTORY +c net/minecraft/class_3551$2 net/minecraft/util/datafix/DataFixesManager$2 +c net/minecraft/class_3551$1 net/minecraft/util/datafix/DataFixesManager$1 +c net/minecraft/class_4958 net/minecraft/util/datafix/fixes/AbstractUUIDFix + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Optional; method_26013 func_233064_c_ + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Ljava/util/Optional; method_26005 func_233057_a_ + m (Ljava/util/function/Function;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26010 func_233061_a_ + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Optional; method_26011 func_233062_b_ + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Optional; method_26006 func_233058_a_ + m (Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_26002 func_233054_a_ + m (Lcom/mojang/datafixers/Typed;Ljava/lang/String;Ljava/util/function/Function;)Lcom/mojang/datafixers/Typed; method_26009 func_233053_a_ + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Optional; method_26014 func_233065_d_ + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28157 func_233060_a_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_28155 func_233056_a_ + m (Lcom/mojang/serialization/Dynamic;JJ)Ljava/util/Optional; method_26003 func_233055_a_ + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28158 func_233063_b_ + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28156 func_233059_a_ + f Lcom/mojang/datafixers/DSL$TypeReference; field_23121 reference + f Lorg/apache/logging/log4j/Logger; field_23120 LOGGER +c net/minecraft/class_3555 net/minecraft/util/datafix/fixes/AdvancementRenamer1501 + m (Ljava/lang/String;)Ljava/lang/String; method_24238 func_230065_a_ + f Ljava/util/Map; field_15788 field_230064_a_ +c net/minecraft/class_3553 net/minecraft/util/datafix/fixes/AddNewChoices + m (Ljava/lang/String;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;)Lcom/mojang/datafixers/TypeRewriteRule; method_15476 cap + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15475 func_206291_a + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_15477 func_209687_a_ + f Lcom/mojang/datafixers/DSL$TypeReference; field_15780 type + f Ljava/lang/String; field_15779 name +c net/minecraft/class_5129 net/minecraft/util/datafix/fixes/AttributesFix + m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_28162 func_233075_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28163 func_233077_b_ + m (Ljava/lang/String;)Ljava/lang/String; method_26811 func_233074_a_ + m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_28164 func_233078_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26808 func_233073_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28166 func_233080_d_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26810 func_233072_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28167 func_233081_e_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26814 func_233076_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28165 func_233079_c_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28169 func_233083_g_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28168 func_233082_f_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26809 func_233071_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + f Ljava/util/Map; field_23695 field_233070_a_ +c net/minecraft/class_4744 net/minecraft/util/datafix/fixes/AdvancementRenamer + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24242 func_230071_a_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_28160 func_233068_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28161 func_233069_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28159 func_230068_a_ + f Ljava/util/function/Function; field_21815 field_230067_b_ + f Ljava/lang/String; field_21814 field_230066_a_ +c net/minecraft/class_3559 net/minecraft/util/datafix/fixes/BedItemColor + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15521 func_207435_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule +c net/minecraft/class_3557 net/minecraft/util/datafix/fixes/AddBedTileEntity + m (Lcom/mojang/serialization/Dynamic;)Ljava/lang/Integer; method_28170 func_233084_a_ + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28171 func_233085_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m ()Ljava/lang/IllegalStateException; method_15507 func_209694_f + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/templates/List$ListType;)Lcom/mojang/datafixers/TypeRewriteRule; method_15506 cap + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15511 func_209696_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15510 func_207434_a +c net/minecraft/class_3561 net/minecraft/util/datafix/fixes/BiomeRenames + f Ljava/util/Map; field_15810 field_210919_a +c net/minecraft/class_4619 net/minecraft/util/datafix/fixes/RenameBeehivePointOfInterest +c net/minecraft/class_3564 net/minecraft/util/datafix/fixes/BlockEntityBannerColor + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28179 func_209642_e_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28178 func_209644_d_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28176 func_209641_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28177 func_210561_c_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15546 fixTag + m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_15545 func_209639_a +c net/minecraft/class_5196 net/minecraft/util/datafix/fixes/BitStorageAlignFix + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27294 func_233090_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28173 func_233094_a_ + m (II[J)[J method_27288 func_233086_a_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27295 func_233091_a_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28175 func_233100_b_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28174 func_233096_a_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27774 func_233089_a_ + m (ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28172 func_233087_a_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27293 func_233099_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_27769 func_233093_a_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;II)Lcom/mojang/serialization/Dynamic; method_27772 func_233097_a_ + m (Ljava/util/List;)Ljava/lang/Integer; method_27296 func_233098_a_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27292 func_233088_a_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_27773 func_233095_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27775 func_233092_a_ +c net/minecraft/class_3567 net/minecraft/util/datafix/fixes/CustomNameStringToComponentFixTileEntity + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15555 func_207790_a + m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28180 func_207789_a_ +c net/minecraft/class_3566 net/minecraft/util/datafix/fixes/PistonPushedBlock + m ()Ljava/lang/IllegalStateException; method_15553 func_206377_f + m ()Ljava/lang/IllegalStateException; method_15554 func_206378_g +c net/minecraft/class_3573 net/minecraft/util/datafix/fixes/JukeboxRecordItem + m ()Ljava/lang/IllegalStateException; method_15578 func_206379_f +c net/minecraft/class_3571 net/minecraft/util/datafix/fixes/TileEntityId + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15576 func_206301_a + m (Ljava/lang/String;)Ljava/lang/String; method_15577 func_206302_a + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28181 func_209700_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Ljava/util/HashMap;)V method_15575 func_209293_a + f Ljava/util/Map; field_15824 OLD_TO_NEW_ID_MAP +c net/minecraft/class_3575 net/minecraft/util/datafix/fixes/ShulkerBoxTileColor + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15580 func_207420_a_ +c net/minecraft/class_3574 net/minecraft/util/datafix/fixes/BlockEntityKeepPacked + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15579 fixTag +c net/minecraft/class_4959 net/minecraft/util/datafix/fixes/BlockEntityUUID + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26017 func_233115_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26018 func_233116_c_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26015 func_233114_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26016 func_233113_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26019 func_233117_d_ +c net/minecraft/class_3577 net/minecraft/util/datafix/fixes/SignStrictJSON + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Lcom/mojang/serialization/Dynamic; method_15582 updateLine + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15581 func_206380_a_ + f Lcom/google/gson/Gson; field_15827 GSON +c net/minecraft/class_3577$1 net/minecraft/util/datafix/fixes/SignStrictJSON$1 + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_5250; method_15583 deserialize + m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize +c net/minecraft/class_3579 net/minecraft/util/datafix/fixes/BlockRename + m (Ljava/lang/String;)Ljava/lang/String; method_15593 fixBlock + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15588 func_207439_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15592 func_209704_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15591 func_206308_a + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_15590 func_209705_a_ + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;Ljava/util/function/Function;)Lcom/mojang/datafixers/DataFix; method_15589 create + f Ljava/lang/String; field_15828 name +c net/minecraft/class_3579$1 net/minecraft/util/datafix/fixes/BlockRename$1 + f Ljava/util/function/Function; field_15829 field_206311_a +c net/minecraft/class_3578 net/minecraft/util/datafix/fixes/BlockNameFlattening + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15586 func_206303_a + m (Lcom/mojang/datafixers/util/Either;)Ljava/lang/String; method_15584 func_206304_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_15585 func_209702_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_15587 func_206305_a +c net/minecraft/class_3580 net/minecraft/util/datafix/fixes/BlockStateFlatteningMap + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15597 updateNBT + m ()V method_22426 func_226191_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_15600 updateName + m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_15595 func_209419_a + m (ILjava/lang/String;[Ljava/lang/String;)V method_15596 addEntry + m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_15601 func_209420_b + m (Ljava/lang/String;)Lcom/mojang/serialization/Dynamic; method_15598 makeDynamic + m (I)Ljava/lang/String; method_15599 updateId + m (I)Lcom/mojang/serialization/Dynamic; method_15594 getFixedNBTForID + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_15831 field_199201_c + f Lorg/apache/logging/log4j/Logger; field_15832 LOGGER + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_15833 NAME_TO_ID + f [Lcom/mojang/serialization/Dynamic; field_24646 field_226190_c_ + f [Lcom/mojang/serialization/Dynamic; field_24645 ID_TO_FIXED_NBT +c net/minecraft/class_3903 net/minecraft/util/datafix/fixes/CatTypeFix + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_17325 func_219810_a +c net/minecraft/class_3581 net/minecraft/util/datafix/fixes/BlockStateFlattenStructures + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15602 func_207440_a +c net/minecraft/class_4541 net/minecraft/util/datafix/fixes/BiomeIdFix + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_22373 func_226192_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_22375 func_226194_a_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_22374 func_226193_a_ +c net/minecraft/class_3582 net/minecraft/util/datafix/fixes/ChunkPaletteFormat + m ()Lcom/mojang/serialization/Dynamic; method_15618 func_233136_n_ + m (Ljava/util/HashMap;)V method_15631 func_209306_f + m (Ljava/util/HashMap;)V method_15607 func_209298_d + m ()Lcom/mojang/serialization/Dynamic; method_15620 func_233138_p_ + m (Ljava/util/Map;ILjava/lang/String;)V method_15636 addBeds + m ()Lcom/mojang/serialization/Dynamic; method_15628 func_233140_r_ + m ()Lcom/mojang/serialization/Dynamic; method_15632 func_233127_a_ + m ()Ljava/util/Map; method_15609 func_208448_m + m (Ljava/util/Map;Ljava/lang/String;I)V method_15611 mapDoor + m ()Lcom/mojang/serialization/Dynamic; method_15629 func_233132_d_ + m ()Ljava/util/Map; method_15623 func_208447_q + m ()Ljava/util/BitSet; method_15630 access$200 + m ()Lcom/mojang/serialization/Dynamic; method_15614 func_233134_f_ + m ()Lorg/apache/logging/log4j/Logger; method_15621 func_209709_y + m ()Lcom/mojang/serialization/Dynamic; method_15617 func_233135_j_ + m (Ljava/util/Map;ILjava/lang/String;Ljava/lang/String;)V method_15610 mapSkull + m (Ljava/util/HashMap;)V method_15626 func_209304_b + m (Ljava/util/HashMap;)V method_15639 func_209308_e + m ()Lcom/mojang/serialization/Dynamic; method_15619 func_233137_o_ + m ()Lcom/mojang/serialization/Dynamic; method_15625 func_233139_q_ + m (Ljava/util/Map;ILjava/lang/String;)V method_15605 addBanners + m ()Lcom/mojang/serialization/Dynamic; method_15624 func_233141_s_ + m ()Ljava/util/Map; method_15622 func_209720_l + m (ZZZZ)I method_15615 getSideMask + m ()Ljava/util/Map; method_15606 func_208438_n + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15633 fix + m ()Lcom/mojang/serialization/Dynamic; method_15627 func_233133_e_ + m ()Ljava/util/Map; method_15612 func_209716_p + m ()Ljava/util/Map; method_15634 func_208450_r + m ()Ljava/util/BitSet; method_15604 access$100 + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Ljava/lang/String; method_15637 getName + m (Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap;)V method_15603 func_209296_a + m (Ljava/util/HashMap;)V method_15613 func_209302_c + m (Ljava/util/HashMap;)V method_15608 func_209299_a + m (Lnet/minecraft/class_3513;Lcom/mojang/serialization/Dynamic;)I method_15616 idFor + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Ljava/lang/String; method_15638 getProperty + f Lcom/mojang/serialization/Dynamic; field_15843 AIR + f Lcom/mojang/serialization/Dynamic; field_15840 PUMPKIN + f Lcom/mojang/serialization/Dynamic; field_15838 SNOWY_GRASS + f Lcom/mojang/serialization/Dynamic; field_15850 SNOWY_MYCELIUM + f Lcom/mojang/serialization/Dynamic; field_15848 UPPER_LILAC + f Ljava/util/Map; field_15853 SKULL_MAP + f Lcom/mojang/serialization/Dynamic; field_15845 UPPER_LARGE_FERN + f Ljava/util/Map; field_15846 NOTE_BLOCK_MAP + f Lcom/mojang/serialization/Dynamic; field_15847 UPPER_PEONY + f Ljava/util/Map; field_15849 BED_BLOCK_MAP + f Ljava/util/BitSet; field_15842 VIRTUAL + f Lcom/mojang/serialization/Dynamic; field_15852 SNOWY_PODZOL + f Ljava/util/Map; field_15841 FLOWER_POT_MAP + f Lcom/mojang/serialization/Dynamic; field_15839 UPPER_SUNFLOWER + f Ljava/util/BitSet; field_15854 FIX + f Ljava/util/Map; field_15836 DOOR_MAP + f Lorg/apache/logging/log4j/Logger; field_15844 LOGGER + f Lcom/mojang/serialization/Dynamic; field_15834 UPPER_TALL_GRASS + f Lcom/mojang/serialization/Dynamic; field_15835 UPPER_ROSE_BUSH + f Ljava/util/Map; field_15851 BANNER_BLOCK_MAP + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_15837 DYE_COLOR_MAP +c net/minecraft/class_3582$class_3588 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$UpgradeChunk + m (I)Lcom/mojang/serialization/Dynamic; method_15660 removeTileEntity + m (Lcom/mojang/serialization/Dynamic;)V method_15656 func_210065_a_ + m (I)Lcom/mojang/serialization/Dynamic; method_15655 getTileEntity + m (Ljava/util/stream/Stream;)V method_15661 func_210062_a + m (I)Lcom/mojang/serialization/Dynamic; method_15662 getBlock + m (ILnet/minecraft/class_3582$class_3584;)I method_15663 relative + m (Ljava/util/stream/Stream;)V method_15659 func_210061_b + m ()Lcom/mojang/serialization/Dynamic; method_15664 write + m (Lcom/mojang/serialization/Dynamic;)V method_15665 func_233150_b_ + m (ILcom/mojang/serialization/Dynamic;)V method_15657 setBlock + m (I)Lnet/minecraft/class_3582$class_3587; method_15658 getSection + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_15887 tileEntities + f Lcom/mojang/serialization/Dynamic; field_15886 level + f [Lnet/minecraft/class_3582$class_3587; field_15888 sections + f I field_15883 z + f I field_15884 x + f I field_15885 sides +c net/minecraft/class_3582$class_3587 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$Section + m (ILcom/mojang/serialization/Dynamic;)V method_15647 setBlock + m ()Lcom/mojang/serialization/Dynamic; method_15651 write + m (Ljava/nio/ByteBuffer;)Lnet/minecraft/class_3582$class_3583; method_15646 func_210055_b + m (Ljava/nio/ByteBuffer;)Lnet/minecraft/class_3582$class_3583; method_15654 func_210052_a + m (Lnet/minecraft/class_3582$class_3587;)Lit/unimi/dsi/fastutil/ints/IntList; method_15653 func_210057_b + m (I)Lcom/mojang/serialization/Dynamic; method_15649 getBlock + m (Lnet/minecraft/class_3582$class_3587;)Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; method_15648 func_210054_a + m (II)V method_15650 addFix + m (I)I method_15652 upgrade + f [I field_15877 buffer + f Z field_15876 hasData + f Lit/unimi/dsi/fastutil/ints/IntList; field_15874 update + f Lnet/minecraft/class_3513; field_15882 palette + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_15881 toFix + f Ljava/util/List; field_15880 listTag + f Ljava/util/Set; field_15875 seen + f Lcom/mojang/serialization/Dynamic; field_15878 section + f I field_15879 y +c net/minecraft/class_3582$class_3584 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$Direction + m ()Lnet/minecraft/class_3582$class_3584$class_3585; method_15644 getAxis + m ()Lnet/minecraft/class_3582$class_3584$class_3586; method_15643 getAxisDirection + m (Ljava/lang/String;)Lnet/minecraft/class_3582$class_3584; valueOf valueOf + m ()[Lnet/minecraft/class_3582$class_3584; values values + f Lnet/minecraft/class_3582$class_3584; field_15862 SOUTH + f Lnet/minecraft/class_3582$class_3584; field_15863 UP + f Lnet/minecraft/class_3582$class_3584; field_15859 NORTH + f Lnet/minecraft/class_3582$class_3584; field_15860 EAST + f [Lnet/minecraft/class_3582$class_3584; field_15865 $VALUES + f Lnet/minecraft/class_3582$class_3584; field_15857 WEST + f Lnet/minecraft/class_3582$class_3584; field_15858 DOWN + f Lnet/minecraft/class_3582$class_3584$class_3586; field_15861 axisDirection + f Lnet/minecraft/class_3582$class_3584$class_3585; field_15864 axis +c net/minecraft/class_3582$class_3584$class_3586 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$Direction$Offset + m (Ljava/lang/String;)Lnet/minecraft/class_3582$class_3584$class_3586; valueOf valueOf + m ()[Lnet/minecraft/class_3582$class_3584$class_3586; values values + m ()I method_15645 getStep + f I field_15872 step + f Lnet/minecraft/class_3582$class_3584$class_3586; field_15873 POSITIVE + f Lnet/minecraft/class_3582$class_3584$class_3586; field_15870 NEGATIVE + f [Lnet/minecraft/class_3582$class_3584$class_3586; field_15871 $VALUES +c net/minecraft/class_3582$class_3584$class_3585 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$Direction$Axis + m ()[Lnet/minecraft/class_3582$class_3584$class_3585; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3582$class_3584$class_3585; valueOf valueOf + f Lnet/minecraft/class_3582$class_3584$class_3585; field_15867 Z + f Lnet/minecraft/class_3582$class_3584$class_3585; field_15866 Y + f [Lnet/minecraft/class_3582$class_3584$class_3585; field_15868 $VALUES + f Lnet/minecraft/class_3582$class_3584$class_3585; field_15869 X +c net/minecraft/class_3582$class_3583 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$NibbleArray + m (III)I method_15640 get + m (I)I method_15642 getPosition + m (I)Z method_15641 isFirst + f [B field_15855 data +c net/minecraft/class_3582$1 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$1 + f [I field_15856 field_210936_a +c net/minecraft/class_3755 net/minecraft/util/datafix/fixes/ChunkLightRemoveFix + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_16440 func_219820_a_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_16441 func_219821_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_16442 func_219822_a +c net/minecraft/class_3788 net/minecraft/util/datafix/fixes/ChunkStatusFix2 + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_16642 func_219823_a + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_16643 func_219824_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + f Ljava/util/Map; field_16691 field_219825_a +c net/minecraft/class_3589 net/minecraft/util/datafix/fixes/ChunkStatusFix + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15667 func_219827_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15666 func_219826_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule +c net/minecraft/class_3591 net/minecraft/util/datafix/fixes/ChunkGenStatus + m ()Ljava/lang/IllegalStateException; method_15673 func_233154_a_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15672 func_207915_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (I)Lit/unimi/dsi/fastutil/shorts/ShortArrayList; method_28182 func_211428_a_ + m (III)S method_15675 packOffsetCoordinates + m (Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_28184 func_233159_a_ + m (Lcom/mojang/serialization/Dynamic;Lit/unimi/dsi/fastutil/shorts/ShortList;)Lcom/mojang/serialization/Dynamic; method_28185 func_233160_a_ + m (Lcom/mojang/datafixers/Typed;)Ljava/util/Optional; method_28183 func_233158_a_ + m (Ljava/util/List;Lcom/mojang/serialization/Dynamic;)V method_28186 func_233161_a_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15676 func_209732_a_ +c net/minecraft/class_3590 net/minecraft/util/datafix/fixes/ChunkStructuresTemplateRenameFix + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15669 func_207911_a + m (Lcom/mojang/datafixers/Typed;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15670 func_207909_a_ + m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15668 func_207908_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15671 func_233153_a_ + f Lcom/google/common/collect/ImmutableMap; field_15889 field_207912_a +c net/minecraft/class_3593 net/minecraft/util/datafix/fixes/DyeRenameMap + f Ljava/util/Map; field_15890 field_219828_a +c net/minecraft/class_3592 net/minecraft/util/datafix/fixes/ColorlessShulkerEntityFix + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15678 func_207421_a_ +c net/minecraft/class_3595 net/minecraft/util/datafix/fixes/BlockStateFlatternEntities + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15680 func_211429_c + m (Ljava/lang/Integer;)Ljava/lang/Integer; method_15688 func_211435_a + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/util/Unit;)Ljava/lang/Integer; method_15694 func_211441_a_ + m (Lcom/mojang/datafixers/Typed;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/mojang/datafixers/Typed; method_15687 updateBlockToBlockState + m (Ljava/util/HashMap;)V method_15683 func_209311_a + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15684 func_211432_a_ + m (Ljava/lang/Integer;)Ljava/lang/Integer; method_15689 func_211436_b + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15685 func_211433_b + m (Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/Function;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15691 func_211438_a + m (Lcom/mojang/datafixers/util/Pair;)Ljava/lang/Integer; method_15693 func_211440_a + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15695 updateFallingBlock + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15692 func_211439_a + m (Ljava/lang/String;)I method_15686 getBlockId + m (Lcom/mojang/datafixers/Typed;Ljava/lang/String;Ljava/util/function/Function;)Lcom/mojang/datafixers/Typed; method_15682 updateEntity + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_15690 func_211437_a_ + m (Lcom/mojang/serialization/Dynamic;)Ljava/lang/Integer; method_15681 func_233164_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15696 func_211443_d + f Ljava/util/Map; field_15891 MAP +c net/minecraft/class_3594 net/minecraft/util/datafix/fixes/ArmorStandSilent + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15679 fixTag +c net/minecraft/class_3596 net/minecraft/util/datafix/fixes/EntityCodSalmonFix + f Ljava/util/Map; field_15892 field_207460_a + f Ljava/util/Map; field_15893 field_209759_b +c net/minecraft/class_3725 net/minecraft/util/datafix/fixes/EntityCatSplitFix +c net/minecraft/class_3598 net/minecraft/util/datafix/fixes/ElderGuardianSplit +c net/minecraft/class_3597 net/minecraft/util/datafix/fixes/CustomNameStringToComponentEntity + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15697 fixTagCustomName + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15698 func_207792_a + m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15699 func_207791_a_ +c net/minecraft/class_3600 net/minecraft/util/datafix/fixes/EntityHealth + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15705 func_207449_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15704 fixTag + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + f Ljava/util/Set; field_15894 ENTITY_LIST +c net/minecraft/class_3599 net/minecraft/util/datafix/fixes/EntityArmorAndHeld + m ()Ljava/lang/IllegalStateException; method_15702 func_209741_f + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15701 func_233170_a_ + m (Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/TypeRewriteRule; method_15703 cap + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15700 func_207448_a +c net/minecraft/class_3602 net/minecraft/util/datafix/fixes/HorseSplit + m ()Ljava/lang/IllegalStateException; method_15706 func_209152_g +c net/minecraft/class_3601 net/minecraft/util/datafix/fixes/HorseSaddle +c net/minecraft/class_3604 net/minecraft/util/datafix/fixes/EntityItemFrameFacing + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15711 fixTag + m (B)B method_15712 direction2dTo3d +c net/minecraft/class_3603 net/minecraft/util/datafix/fixes/EntityId + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15709 func_206326_a + m (Ljava/util/HashMap;)V method_15708 func_209312_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_15707 func_209744_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_15710 func_206327_a + f Ljava/util/Map; field_15895 OLD_TO_NEW_ID_MAP +c net/minecraft/class_3606 net/minecraft/util/datafix/fixes/PaintingDirection + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15721 func_207457_b_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15717 func_206332_b + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15716 func_206331_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15718 func_207455_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15720 func_206330_b + m (Lcom/mojang/serialization/Dynamic;ZZ)Lcom/mojang/serialization/Dynamic; method_15719 doFix + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15722 func_206329_a + f [[I field_15897 DIRECTIONS +c net/minecraft/class_3605 net/minecraft/util/datafix/fixes/MinecartEntityTypes + m ()Ljava/lang/IllegalStateException; method_15713 func_233174_a_ + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_28187 func_233177_a_ + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_15714 func_209746_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15715 func_206328_a_ + f Ljava/util/List; field_15896 MINECART_TYPE_LIST +c net/minecraft/class_4860 net/minecraft/util/datafix/fixes/ProjectileOwner + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24904 func_233188_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24905 func_233189_c_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24906 func_233190_d_ + m (Lcom/mojang/datafixers/Typed;Ljava/lang/String;Ljava/util/function/Function;)Lcom/mojang/datafixers/Typed; method_24902 func_233184_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24901 func_233183_a_ + m (Lcom/mojang/serialization/Dynamic;JJ)Lcom/mojang/serialization/Dynamic; method_24900 func_233186_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24899 func_233185_a_ + m (Ljava/util/function/Function;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24903 func_233187_a_ + m (JJ)[I method_24898 func_233182_a_ +c net/minecraft/class_3607 net/minecraft/util/datafix/fixes/PaintingMotive + m (Ljava/util/HashMap;)V method_15724 func_201153_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15723 fixTag + f Ljava/util/Map; field_15898 MAP +c net/minecraft/class_3983 net/minecraft/util/datafix/fixes/EntityRavagerRenameFix + f Ljava/util/Map; field_17712 field_219829_a +c net/minecraft/class_3608 net/minecraft/util/datafix/fixes/PufferfishRename + f Ljava/util/Map; field_15899 field_207461_a +c net/minecraft/class_1165 net/minecraft/util/datafix/fixes/RedundantChanceTags + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_4972 func_210996_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28188 func_206334_c_ + m (ILjava/util/List;)Ljava/lang/Boolean; method_30072 func_241304_a_ + m (Ljava/lang/Float;)Z method_30074 func_241307_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/OptionalDynamic;I)Z method_30073 func_241306_a_ + f Lcom/mojang/serialization/Codec; field_25695 field_241303_a_ +c net/minecraft/class_1166 net/minecraft/util/datafix/fixes/RidingToPassengers + m ()Ljava/lang/IllegalStateException; method_4975 func_206342_f + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Either; method_4979 func_208037_a_ + m (Lcom/mojang/datafixers/schemas/Schema;Lcom/mojang/datafixers/schemas/Schema;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/TypeRewriteRule; method_4978 cap + m ()Ljava/lang/IllegalStateException; method_4976 func_208040_j + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_4977 func_208042_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m ()Ljava/lang/IllegalStateException; method_4974 func_208039_h + m ()Ljava/lang/IllegalStateException; method_4973 func_208041_g + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_4980 func_209760_a_ +c net/minecraft/class_1167 net/minecraft/util/datafix/fixes/EntityRename + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_4984 func_209150_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_4981 func_209755_a_ + m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/Typed; method_4983 getEntity + m (Ljava/lang/String;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/util/Pair; method_4982 fix + f Ljava/lang/String; field_5670 name +c net/minecraft/class_5277 net/minecraft/util/datafix/fixes/ShulkerRotation + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_27960 func_233201_a_ + m (Lcom/mojang/serialization/Dynamic;)Ljava/lang/Double; method_27961 func_233202_b_ +c net/minecraft/class_1169 net/minecraft/util/datafix/fixes/ShulkerBoxEntityColor + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4985 fixTag +c net/minecraft/class_1171 net/minecraft/util/datafix/fixes/StringToUUID + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4986 func_206345_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_4987 func_206344_a +c net/minecraft/class_1168 net/minecraft/util/datafix/fixes/SkeletonSplit +c net/minecraft/class_1173 net/minecraft/util/datafix/fixes/TippedArrow +c net/minecraft/class_1170 net/minecraft/util/datafix/fixes/EntityRenaming1510 + f Ljava/util/Map; field_5671 ENTITY_RENAME_MAP + f Ljava/util/Map; field_5673 ITEM_RENAME_MAP + f Ljava/util/Map; field_5672 BLOCK_RENAME_MAP +c net/minecraft/class_1172 net/minecraft/util/datafix/fixes/WolfCollarColor + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4989 func_209654_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4988 fixTag +c net/minecraft/class_4960 net/minecraft/util/datafix/fixes/EntityUUID + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26024 func_233218_e_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26026 func_233220_f_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26037 func_233212_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28198 func_233237_w_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28199 func_233238_x_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26039 func_233214_c_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26022 func_233216_d_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26020 func_233211_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28196 func_233235_u_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28197 func_233236_v_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26023 func_233213_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26042 func_233232_r_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28194 func_233233_s_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28195 func_233234_t_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26038 func_233229_o_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26040 func_233230_p_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26041 func_233231_q_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28192 func_233217_d_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28191 func_233215_c_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26035 func_233227_m_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26036 func_233228_n_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28193 func_233219_e_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26032 func_233224_j_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26021 func_233210_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26033 func_233225_k_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26034 func_233226_l_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26028 func_233221_g_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26030 func_233222_h_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26031 func_233223_i_ + f Ljava/util/Set; field_23123 field_233205_d_ + f Ljava/util/Set; field_23122 field_233204_c_ + f Ljava/util/Set; field_23126 field_233208_g_ + f Ljava/util/Set; field_23125 field_233207_f_ + f Ljava/util/Set; field_23124 field_233206_e_ + f Ljava/util/Set; field_23127 field_233209_h_ +c net/minecraft/class_1174 net/minecraft/util/datafix/fixes/ZombieProfToType + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4990 fixTag + m (I)I method_4991 getVillagerProfession + f Ljava/util/Random; field_5674 RANDOM +c net/minecraft/class_1175 net/minecraft/util/datafix/fixes/ZombieSplit +c net/minecraft/class_4731 net/minecraft/util/datafix/fixes/PointOfInterestRebuild + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_24159 func_226197_a_ + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_24158 func_226196_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24157 func_226195_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24160 func_226198_b_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24162 func_226200_c_ + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_24161 func_226199_b_ +c net/minecraft/class_4846 net/minecraft/util/datafix/fixes/ZombifiedPiglinRename + f Ljava/util/Map; field_22416 field_233242_a_ +c net/minecraft/class_4976 net/minecraft/util/datafix/fixes/Gossip + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26289 func_233255_a_ + m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_26290 func_233256_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28200 func_233257_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28201 func_233258_c_ +c net/minecraft/class_4752 net/minecraft/util/datafix/fixes/FurnaceRecipes + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24312 func_233247_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24314 func_233249_a_ + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24317 func_233252_b_ + m (Ljava/util/List;ILcom/mojang/datafixers/util/Pair;)V method_24316 func_233251_a_ + m (Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/TypeRewriteRule; method_24313 func_233248_a_ + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24319 func_233254_d_ + m (Lcom/mojang/datafixers/types/Type;Ljava/util/List;ILcom/mojang/serialization/Dynamic;)V method_24315 func_233250_a_ + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24318 func_233253_c_ +c net/minecraft/class_1176 net/minecraft/util/datafix/fixes/IglooMetadataRemoval + m (Lcom/mojang/serialization/Dynamic;)Z method_4997 isIglooPiece + m (Ljava/util/stream/Stream;)Ljava/lang/Boolean; method_4995 func_211928_b + m (Lcom/mojang/serialization/Dynamic;)Z method_4994 func_211927_d_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4993 fixTag + m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_4992 func_211925_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4996 removeIglooPieces + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule +c net/minecraft/class_1177 net/minecraft/util/datafix/fixes/HeightmapRenamingFix + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5000 func_207307_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_4999 func_207306_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4998 fix +c net/minecraft/class_1178 net/minecraft/util/datafix/fixes/CustomNameStringToComponentItem + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5003 func_207469_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5002 func_207467_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5001 fixTag +c net/minecraft/class_1179 net/minecraft/util/datafix/fixes/BannerItemColor + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5004 func_207466_a +c net/minecraft/class_1180 net/minecraft/util/datafix/fixes/ItemLoreComponentizeFix + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28203 func_219833_c_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5011 func_219836_a + m (Ljava/lang/String;)Ljava/lang/String; method_5012 func_219837_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28204 func_219834_d_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5007 func_219832_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5006 func_219831_a_ + m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_5005 func_219830_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28202 func_219835_b_ +c net/minecraft/class_1181 net/minecraft/util/datafix/fixes/ItemIntIDToString + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5017 func_207472_a + m (Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap;)V method_5015 func_207470_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5013 func_206349_a + m (Ljava/lang/Integer;)Lcom/mojang/datafixers/util/Pair; method_5016 func_207473_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Pair; method_5014 func_206350_a + m (I)Ljava/lang/String; method_5018 getItem + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_5675 ID_MAP +c net/minecraft/class_1182 net/minecraft/util/datafix/fixes/ItemRename + m (Ljava/lang/String;)Ljava/lang/String; method_5022 fixItem + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;Ljava/util/function/Function;)Lcom/mojang/datafixers/DataFix; method_5019 create + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5021 func_206354_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_5020 func_211012_a_ + f Ljava/lang/String; field_5676 name +c net/minecraft/class_1182$1 net/minecraft/util/datafix/fixes/ItemRename$1 + f Ljava/util/function/Function; field_5677 field_206357_a +c net/minecraft/class_1183 net/minecraft/util/datafix/fixes/PotionItems + m ([Ljava/lang/String;)V method_5023 func_209316_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5024 func_206351_a + f [Ljava/lang/String; field_5678 POTION_IDS +c net/minecraft/class_1185 net/minecraft/util/datafix/fixes/ShulkerBoxItemColor + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5031 func_206358_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + f [Ljava/lang/String; field_5680 NAMES_BY_COLOR +c net/minecraft/class_1187 net/minecraft/util/datafix/fixes/ItemStackEnchantmentFix + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5036 func_208045_a + m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_5034 func_209623_a + m (Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap;)V method_5033 func_208043_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5035 fixTag + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28207 func_209624_c_ + m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_5037 func_209626_b + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28206 func_209625_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28208 func_209628_d_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5041 func_208046_a + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_5681 field_208047_a +c net/minecraft/class_1184 net/minecraft/util/datafix/fixes/SpawnEggNames + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Ljava/util/Optional; method_5030 func_207482_b + m ()Ljava/lang/IllegalStateException; method_5026 func_233270_a_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Ljava/util/Optional; method_5028 func_207481_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Ljava/util/Optional; method_5025 func_207479_c + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_28205 func_233272_a_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5027 func_206359_a_ + m ([Ljava/lang/String;)V method_5029 func_209278_a + f [Ljava/lang/String; field_5679 ENTITY_IDS +c net/minecraft/class_1189 net/minecraft/util/datafix/fixes/ItemSpawnEggSplit + m (Ljava/util/HashMap;)V method_5047 func_209279_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5046 func_206361_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + f Ljava/util/Map; field_5685 field_199421_a +c net/minecraft/class_1186 net/minecraft/util/datafix/fixes/ItemFilledMapMetadata + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5032 func_206360_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule +c net/minecraft/class_4961 net/minecraft/util/datafix/fixes/ItemStackUUID + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26053 func_233284_d_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26293 func_233281_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26294 func_233277_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26299 func_233285_e_ + m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26296 func_233278_a_ + m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26295 func_233279_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26298 func_233283_c_ + m (Lcom/mojang/datafixers/util/Pair;)Ljava/lang/Boolean; method_26051 func_233280_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26297 func_233282_b_ +c net/minecraft/class_1188 net/minecraft/util/datafix/fixes/ItemStackDataFlattening + m (Ljava/lang/String;)Ljava/lang/String; method_5045 func_199926_a + m (Ljava/lang/String;I)Ljava/lang/String; method_5042 updateItem + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Ljava/util/HashMap;)V method_5043 func_209282_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5044 func_206362_a + f Ljava/util/Map; field_5684 field_199176_a + f Ljava/util/Set; field_5683 field_199177_b + f Ljava/util/Set; field_5682 field_199178_c +c net/minecraft/class_1194 net/minecraft/util/datafix/fixes/BookPagesStrictJSON + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5088 func_207417_a + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5089 func_212821_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5086 func_207415_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5085 fixTag + m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_5084 func_209630_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5087 func_209631_b_ +c net/minecraft/class_1190 net/minecraft/util/datafix/fixes/PotionWater + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5048 func_206363_a +c net/minecraft/class_4978 net/minecraft/util/datafix/fixes/JigsawRotation + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26303 func_233293_b_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26302 func_233291_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26301 func_233292_a_ + f Ljava/util/Map; field_23213 field_233290_a_ +c net/minecraft/class_4977 net/minecraft/util/datafix/fixes/JigsawProperties + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26300 func_233289_a_ +c net/minecraft/class_1196 net/minecraft/util/datafix/fixes/LevelDataGeneratorOptionsFix + m (Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair; method_5099 getLayerInfoFromString + m ()Ljava/lang/IllegalStateException; method_5097 func_233299_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Ljava/lang/String;)Ljava/util/List; method_5103 getLayersInfoFromString + m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/util/Pair;)Ljava/lang/Object; method_5098 func_210547_a_ + m (Lcom/mojang/serialization/DynamicOps;Ljava/util/Map$Entry;)Lcom/mojang/datafixers/util/Pair; method_28210 func_210551_b_ + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5096 func_210545_a_ + m (Lcom/mojang/serialization/DynamicOps;Ljava/util/Map$Entry;)Lcom/mojang/datafixers/util/Pair; method_5095 func_210544_a_ + m (Ljava/util/HashMap;)V method_5101 func_210550_a + m (Ljava/lang/String;Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_5100 convert + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_28209 func_233301_a_ + f Ljava/util/Map; field_5702 field_210553_a +c net/minecraft/class_1191 net/minecraft/util/datafix/fixes/LeavesFix + m (I)I method_5062 getY + m (Lcom/mojang/datafixers/OpticFinder;[ILcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5063 func_208415_a + m (I)I method_5052 getX + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5054 func_208420_a + m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_5055 func_208417_a + m (Lcom/mojang/datafixers/Typed;)Lnet/minecraft/class_1191$class_1192; method_5057 func_212527_a + m ()Ljava/util/Set; method_5053 func_212526_b + m ([ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5059 func_208419_a_ + m (Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5058 func_208413_a + m (Lnet/minecraft/class_1191$class_1192;)Lnet/minecraft/class_1191$class_1192; method_5049 func_208410_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5056 func_208422_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (ZZZZ)I method_5061 getSideMask + m ()Lit/unimi/dsi/fastutil/objects/Object2IntMap; method_5060 func_212528_a + m (III)I method_5051 getIndex + m (I)I method_5050 getZ + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_5688 LEAVES + f [[I field_5687 DIRECTIONS + f Ljava/util/Set; field_5686 LOGS +c net/minecraft/class_1191$class_1193 net/minecraft/util/datafix/fixes/LeavesFix$Section + m ()I method_5077 getIndex + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5083 write + m (Ljava/util/List;)Ljava/util/List; method_5081 func_208463_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5080 func_212510_c_ + m (Lcom/mojang/serialization/Dynamic;)V method_5074 func_212507_a + m ()Z method_5076 func_212508_a + m ()Z method_5079 isSkippable + m (Ljava/lang/String;ZI)I method_5082 getStateId + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/datafixers/util/Pair; method_5078 func_212509_b_ + m (I)I method_5075 getBlock + f Ljava/util/List; field_5692 palette + f Lnet/minecraft/class_5298; field_5696 storage + f Lcom/mojang/datafixers/OpticFinder; field_5693 paletteFinder + f Lcom/mojang/datafixers/types/Type; field_5695 blockStateType + f I field_5694 index +c net/minecraft/class_1191$class_1192 net/minecraft/util/datafix/fixes/LeavesFix$LeavesSection + m (I)Z method_5068 isLog + m (I)Z method_5071 isLeaf + m (III)V method_5070 setDistance + m (I)I method_5065 getDistance + m (Lnet/minecraft/class_1191$class_1192;III)V method_5066 func_212522_a + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;ZI)Lcom/mojang/serialization/Dynamic; method_5072 makeLeafTag + m (Lnet/minecraft/class_1191$class_1192;I)I method_5069 func_212515_a + f Lit/unimi/dsi/fastutil/ints/Int2IntMap; field_5690 field_212525_h + f Lit/unimi/dsi/fastutil/ints/IntSet; field_5689 field_212523_f + f Lit/unimi/dsi/fastutil/ints/IntSet; field_5691 field_212524_g +c net/minecraft/class_4962 net/minecraft/util/datafix/fixes/LevelUUID + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28216 func_233318_g_ + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_28213 func_233312_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28215 func_233317_f_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28217 func_233319_h_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26055 func_233308_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26061 func_233315_d_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26058 func_233311_b_ + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_28211 func_233309_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28214 func_233316_e_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28221 func_233323_l_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26060 func_233314_c_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26057 func_233313_b_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28212 func_233310_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28218 func_233320_i_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28220 func_233322_k_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28219 func_233321_j_ +c net/minecraft/class_1195 net/minecraft/util/datafix/fixes/BlockStateFlattenGenOptions + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5093 func_207414_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5092 func_209634_b_ + m (Ljava/lang/String;)Ljava/lang/String; method_5094 fixString + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5090 fix + m (Lcom/google/common/base/Splitter;ILjava/lang/String;)Ljava/lang/String; method_5091 func_206368_a + f Lcom/google/common/base/Splitter; field_5699 field_199183_c + f Lcom/google/common/base/Splitter; field_5701 field_199182_b + f Lcom/google/common/base/Splitter; field_5700 field_199181_a + f Lcom/google/common/base/Splitter; field_5697 field_199185_e + f Lcom/google/common/base/Splitter; field_5698 field_199184_d +c net/minecraft/class_4803 net/minecraft/util/datafix/fixes/MemoryExpiry + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24506 func_233326_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24508 func_233327_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24509 func_233328_c_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24510 func_233329_d_ + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_24507 func_233325_a_ +c net/minecraft/class_3970 net/minecraft/util/datafix/fixes/MapIdFix + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17828 func_219839_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28222 func_219838_a_ +c net/minecraft/class_1198 net/minecraft/util/datafix/fixes/SpawnerEntityTypes + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5106 fix + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5108 func_209657_b_ + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5107 func_206369_a +c net/minecraft/class_5396 net/minecraft/util/datafix/fixes/MissingDimensionFix + m (Ljava/lang/String;Lcom/mojang/datafixers/types/Type;Ljava/lang/String;Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/types/Type; method_29914 func_241313_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Ljava/lang/String;Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/types/Type; method_29915 func_241314_b_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/types/templates/CompoundList$CompoundListType;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_29910 func_241309_a_ + m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/types/templates/CompoundList$CompoundListType;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_29911 func_241310_a_ + m (Lcom/mojang/datafixers/FieldFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/templates/CompoundList$CompoundListType;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_29909 func_241308_a_ + m (Ljava/lang/String;Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/types/Type; method_29913 func_241312_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_29912 func_241311_a_ +c net/minecraft/class_3904 net/minecraft/util/datafix/fixes/NewVillageFix + m (Lcom/mojang/datafixers/util/Pair;)Z method_17339 func_219854_b + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17332 func_219850_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28223 func_219840_a_ + m (Ljava/util/List;)Ljava/util/List; method_17337 func_219851_a + m (Ljava/lang/String;)Ljava/lang/String; method_17336 func_219847_a + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28224 func_219846_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17330 func_219849_a + m (Lcom/mojang/datafixers/types/templates/CompoundList$CompoundListType;)Lcom/mojang/datafixers/TypeRewriteRule; method_17334 func_219848_a + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_17335 func_219852_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28227 func_219844_d_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17331 func_219842_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28226 func_219843_c_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17333 func_219853_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28225 func_219845_b_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17329 func_219841_a +c net/minecraft/class_1197 net/minecraft/util/datafix/fixes/NamedEntityFix + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5105 fix + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5104 func_206371_a + f Lcom/mojang/datafixers/DSL$TypeReference; field_5704 type + f Ljava/lang/String; field_5703 name + f Ljava/lang/String; field_5705 entityName +c net/minecraft/class_1199 net/minecraft/util/datafix/fixes/ObjectiveRenderType + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28232 func_211859_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5111 func_211860_a + m (Ljava/lang/String;)Lnet/minecraft/class_274$class_275; method_5112 getRenderType + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28231 func_211857_a_ +c net/minecraft/class_1200 net/minecraft/util/datafix/fixes/ObjectiveDisplayName + m (Ljava/lang/String;)Ljava/lang/String; method_5117 func_211865_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28228 func_211861_a_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28229 func_211864_a_ + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28230 func_211862_a_ + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5115 func_211863_a +c net/minecraft/class_4294 net/minecraft/util/datafix/fixes/OminousBannerRenameFix + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_20446 func_219819_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_20445 func_219818_a +c net/minecraft/class_4299 net/minecraft/util/datafix/fixes/OminousBannerTileEntityRenameFix + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_20481 func_222992_a +c net/minecraft/class_1202 net/minecraft/util/datafix/fixes/ForceVBOOn + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5124 func_207425_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5123 func_207426_a_ +c net/minecraft/class_4092 net/minecraft/util/datafix/fixes/OptionsAddTextBackgroundFix + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28233 func_219855_a_ + m (Ljava/lang/String;)D method_18853 func_219856_a + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Lcom/mojang/serialization/Dynamic; method_28234 func_219857_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_18852 func_219858_a +c net/minecraft/class_1201 net/minecraft/util/datafix/fixes/LWJGL3KeyOptions + m (Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap;)V method_5118 func_206279_a + m (Ljava/util/Map$Entry;)Lcom/mojang/datafixers/util/Pair; method_5122 func_209661_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28235 func_207424_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5121 func_207423_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map;)Lcom/mojang/serialization/Dynamic; method_28236 func_209663_a_ + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_5706 field_199186_a +c net/minecraft/class_1203 net/minecraft/util/datafix/fixes/OptionsLowerCaseLanguage + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5125 func_207428_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5126 func_206281_a +c net/minecraft/class_1204 net/minecraft/util/datafix/fixes/KeyOptionsTranslation + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map;)Lcom/mojang/serialization/Dynamic; method_28239 func_209669_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5130 func_209667_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28237 func_209668_a_ + m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map$Entry;)Lcom/mojang/datafixers/util/Pair; method_28238 func_209666_a_ +c net/minecraft/class_4963 net/minecraft/util/datafix/fixes/PlayerUUID + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26072 func_233354_b_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28241 func_233356_c_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26070 func_233353_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28240 func_233355_b_ +c net/minecraft/class_5404 net/minecraft/util/datafix/fixes/SwapHandsFix + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_30019 func_241318_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_30020 func_241319_a_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_30021 func_241320_a_ + f Ljava/lang/String; field_25667 field_241317_c_ + f Ljava/lang/String; field_25665 field_241315_a_ + f Ljava/lang/String; field_25666 field_241316_b_ +c net/minecraft/class_1206 net/minecraft/util/datafix/fixes/RecipeRenamer1502 + m (Ljava/lang/String;)Ljava/lang/String; method_5136 func_230072_a_ + f Ljava/util/Map; field_5708 field_209673_a +c net/minecraft/class_4620 net/minecraft/util/datafix/fixes/PointOfInterestRename + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Ljava/lang/String;)Ljava/lang/String; method_23303 func_225501_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28244 func_226207_c_ + m (Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_23304 func_226205_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_23299 func_226201_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28248 func_226211_g_ + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28243 func_226203_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28246 func_226209_e_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28247 func_226210_f_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28245 func_226208_d_ + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_23302 func_226204_a_ + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_23305 func_226206_b_ + m (Lcom/mojang/serialization/Dynamic;Ljava/util/stream/Stream;)Lcom/mojang/serialization/Dynamic; method_28242 func_226202_a_ +c net/minecraft/class_1205 net/minecraft/util/datafix/fixes/RecipeRenamer1510 + m (Ljava/lang/String;)Ljava/lang/String; method_5133 func_230077_a_ + f Ljava/util/Map; field_5707 field_211869_a +c net/minecraft/class_4745 net/minecraft/util/datafix/fixes/RecipeRenamer + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_24244 func_230076_a_ + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_24243 func_230075_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + f Ljava/util/function/Function; field_21817 field_230074_b_ + f Ljava/lang/String; field_21816 field_230073_a_ +c net/minecraft/class_1208 net/minecraft/util/datafix/TypeReferences + m ()Ljava/lang/String; method_20336 func_211284_i + m ()Ljava/lang/String; method_25932 func_233376_a_ + m ()Ljava/lang/String; method_20334 func_211282_g + m ()Ljava/lang/String; method_20332 func_211279_e + m ()Ljava/lang/String; method_20330 func_211281_c + m ()Ljava/lang/String; method_5148 func_211280_a + m ()Ljava/lang/String; method_5145 func_219865_j + m ()Ljava/lang/String; method_5138 func_219860_h + m ()Ljava/lang/String; method_5144 func_219864_f + m ()Ljava/lang/String; method_5137 func_219859_d + m ()Ljava/lang/String; method_20338 func_211283_k + m ()Ljava/lang/String; method_5143 func_219863_b + m ()Ljava/lang/String; method_20337 func_211277_j + m ()Ljava/lang/String; method_20335 func_211276_h + m ()Ljava/lang/String; method_20333 func_211275_f + m ()Ljava/lang/String; method_20331 func_211274_d + m ()Ljava/lang/String; method_5146 func_211273_b + m ()Ljava/lang/String; method_5139 func_211872_b + m ()Ljava/lang/String; method_5142 func_211871_a + m ()Ljava/lang/String; method_5150 func_219868_i + m ()Ljava/lang/String; method_5141 func_219862_g + m ()Ljava/lang/String; method_5147 func_219866_e + m ()Ljava/lang/String; method_20339 func_211278_l + m ()Ljava/lang/String; method_5149 func_219867_c + m ()Ljava/lang/String; method_5140 func_219861_a + f Lcom/mojang/datafixers/DSL$TypeReference; field_5724 STRUCTURE_FEATURE + f Lcom/mojang/datafixers/DSL$TypeReference; field_5726 CHUNK + f Lcom/mojang/datafixers/DSL$TypeReference; field_5728 BIOME + f Lcom/mojang/datafixers/DSL$TypeReference; field_5710 LEVEL + f Lcom/mojang/datafixers/DSL$TypeReference; field_5714 TEAM + f Lcom/mojang/datafixers/DSL$TypeReference; field_5717 OPTIONS + f Lcom/mojang/datafixers/DSL$TypeReference; field_5730 STATS + f Lcom/mojang/datafixers/DSL$TypeReference; field_5727 BLOCK_ENTITY + f Lcom/mojang/datafixers/DSL$TypeReference; field_5725 ADVANCEMENTS + f Lcom/mojang/datafixers/DSL$TypeReference; field_5720 BLOCK_STATE + f Lcom/mojang/datafixers/DSL$TypeReference; field_5723 ENTITY_TYPE + f Lcom/mojang/datafixers/DSL$TypeReference; field_5718 UNTAGGED_SPAWNER + f Lcom/mojang/datafixers/DSL$TypeReference; field_5731 BLOCK_NAME + f Lcom/mojang/datafixers/DSL$TypeReference; field_5721 OBJECTIVE + f Lcom/mojang/datafixers/DSL$TypeReference; field_5715 PLAYER + f Lcom/mojang/datafixers/DSL$TypeReference; field_5711 RECIPE + f Lcom/mojang/datafixers/DSL$TypeReference; field_5722 HOTBAR + f Lcom/mojang/datafixers/DSL$TypeReference; field_23067 WORLD_GEN_SETTINGS + f Lcom/mojang/datafixers/DSL$TypeReference; field_5732 SAVED_DATA + f Lcom/mojang/datafixers/DSL$TypeReference; field_5716 STRUCTURE + f Lcom/mojang/datafixers/DSL$TypeReference; field_19224 POI_CHUNK + f Lcom/mojang/datafixers/DSL$TypeReference; field_5712 ITEM_STACK + f Lcom/mojang/datafixers/DSL$TypeReference; field_5729 ENTITY + f Lcom/mojang/datafixers/DSL$TypeReference; field_5719 ENTITY_NAME + f Lcom/mojang/datafixers/DSL$TypeReference; field_5713 ITEM_NAME +c net/minecraft/class_5255 net/minecraft/util/datafix/fixes/RedstoneConnections + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_27778 func_233368_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28250 func_233371_b_ + m (Ljava/lang/String;)Z method_27780 func_233369_a_ + m (Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28249 func_233370_a_ + m (Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28251 func_233372_b_ + m (Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28252 func_233373_c_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28253 func_233374_d_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27779 func_233367_a_ +c net/minecraft/class_4753 net/minecraft/util/datafix/fixes/BiomeName + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_24321 func_233379_a_ + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_24320 func_233380_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_24322 func_233381_a_ + f Ljava/util/Map; field_21959 field_233378_b_ + f Ljava/lang/String; field_23068 field_233377_a_ +c net/minecraft/class_5429 net/minecraft/util/datafix/fixes/RemoveGolemGossip + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_30326 func_242266_a + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_30327 func_242267_a + m (Lcom/mojang/serialization/Dynamic;)Z method_30328 func_242268_b +c net/minecraft/class_1210 net/minecraft/util/datafix/fixes/RenamedCoral + f Ljava/util/Map; field_5733 field_204918_a +c net/minecraft/class_1207 net/minecraft/util/datafix/fixes/CoralFansRenameList + f Ljava/util/Map; field_5709 field_211870_a +c net/minecraft/class_4964 net/minecraft/util/datafix/fixes/SavedDataUUID + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28259 func_233393_g_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28254 func_233388_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28258 func_233392_f_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28256 func_233390_d_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28257 func_233391_e_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26075 func_233387_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28255 func_233389_c_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26073 func_233386_a_ +c net/minecraft/class_4285 net/minecraft/util/datafix/fixes/PointOfInterestReorganizationFix + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_20342 func_219872_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_20341 func_219871_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_20340 func_219870_a +c net/minecraft/class_1212 net/minecraft/util/datafix/fixes/EntityRenameHelper + m (Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/datafixers/util/Pair; method_5164 getNewNameAndTag +c net/minecraft/class_1209 net/minecraft/util/datafix/fixes/BlockStateFlattenVillageCrops + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5155 updateDoubleField + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5154 updateSingleField + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5157 updateChildren + m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_5151 updateChildren + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5152 fixTag + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Lcom/mojang/serialization/Dynamic; method_5156 updateCrop + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5153 func_210587_e_ +c net/minecraft/class_1214 net/minecraft/util/datafix/fixes/StatsRenaming + m (Ljava/lang/String;)Ljava/lang/String; method_5172 upgradeItem + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5171 func_209679_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Ljava/lang/String;)Ljava/lang/String; method_5173 upgradeBlock + m ()Ljava/lang/IllegalStateException; method_5170 func_209678_f + m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5169 func_209680_a + f Ljava/util/Map; field_5735 field_209685_e + f Ljava/util/Map; field_5737 field_209683_b + f Ljava/util/Map; field_5738 field_199189_b + f Ljava/util/Map; field_5736 field_209684_d + f Ljava/util/Set; field_5739 field_209682_a +c net/minecraft/class_1211 net/minecraft/util/datafix/fixes/TypedEntityRenameHelper + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5162 func_211310_a + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_5159 func_233400_a_ + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5160 func_211307_a + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_5158 func_211308_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_5163 rename + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Ljava/lang/String;)Ljava/lang/String; method_5161 func_211309_a + f Ljava/lang/String; field_5734 name +c net/minecraft/class_4695 net/minecraft/util/datafix/fixes/StructureReferenceFix + m (Ljava/lang/Integer;)Z method_23663 func_226214_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_23662 func_226213_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_23664 func_226215_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_23661 func_226212_a_ +c net/minecraft/class_5256 net/minecraft/util/datafix/fixes/StriderGravity + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_27789 func_233403_a_ +c net/minecraft/class_1217 net/minecraft/util/datafix/fixes/TeamDisplayName + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28262 func_211876_a_ + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5183 func_211877_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Ljava/lang/String;)Ljava/lang/String; method_5185 func_211879_a + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28260 func_211875_a_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28261 func_211878_a_ +c net/minecraft/class_1213 net/minecraft/util/datafix/fixes/SwimStatsRename + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5167 func_211692_a + m (Ljava/lang/String;)Ljava/lang/String; method_5168 func_211693_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5165 func_211690_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5166 func_211691_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule +c net/minecraft/class_1215 net/minecraft/util/datafix/fixes/TrappedChestTileEntitySplit + m (IILit/unimi/dsi/fastutil/ints/IntSet;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5174 func_212530_a + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5178 func_212534_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5175 func_212531_a + m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;IILit/unimi/dsi/fastutil/ints/IntSet;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5176 func_212532_a + m (Ljava/lang/String;)Ljava/lang/String; method_5179 func_212535_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5177 func_212533_a + f Lorg/apache/logging/log4j/Logger; field_5740 LOGGER +c net/minecraft/class_1215$class_1216 net/minecraft/util/datafix/fixes/TrappedChestTileEntitySplit$Section + m (I)Z method_5180 func_212511_a + f Lit/unimi/dsi/fastutil/ints/IntSet; field_5741 field_212512_f +c net/minecraft/class_5273 net/minecraft/util/datafix/fixes/VillagerFollowRange + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28264 func_233411_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_27914 func_233409_a_ + m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28263 func_233410_a_ +c net/minecraft/class_3845 net/minecraft/util/datafix/fixes/VillagerProfessionFix + m (II)Ljava/lang/String; method_16897 func_219811_a +c net/minecraft/class_1219 net/minecraft/util/datafix/fixes/VillagerTrades + m (Ljava/lang/String;)Ljava/lang/String; method_5192 func_209289_a + m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5190 func_209288_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5187 updateItemStack + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5188 func_209284_b + m (Lcom/mojang/datafixers/OpticFinder;Ljava/util/function/Function;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5189 func_209286_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Ljava/util/function/Function;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5191 func_209287_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Ljava/util/function/Function;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5186 func_209285_a +c net/minecraft/class_4300 net/minecraft/util/datafix/fixes/VillagerLevelAndXpFix + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Ljava/util/Optional; method_20489 func_223002_b + m (ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28266 func_222998_b_ + m (I)I method_20482 func_223001_a + m (Lcom/mojang/datafixers/Typed;I)Lcom/mojang/datafixers/Typed; method_20490 func_222994_b + m (Lcom/mojang/datafixers/Typed;I)Lcom/mojang/datafixers/Typed; method_20487 func_223003_a + m (ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28267 func_222999_c_ + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_20486 func_222996_a + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Ljava/lang/Integer; method_20485 func_222997_a + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_20484 func_222995_a + m (ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28265 func_223000_a_ + f [I field_19285 field_223004_a +c net/minecraft/class_5299 net/minecraft/util/datafix/fixes/WorldGenSettings + m (Ljava/lang/String;II)I method_28280 func_233435_a_ + m (Ljava/util/Optional;Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_28282 func_233437_a_ + m (Ljava/lang/String;I)I method_28279 func_233434_a_ + m (Lcom/mojang/serialization/Dynamic;Lorg/apache/commons/lang3/mutable/MutableBoolean;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/util/Map;Ljava/util/Map;)V method_28274 func_233429_a_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_28270 func_233425_a_ + m (Lcom/mojang/serialization/Dynamic;Lorg/apache/commons/lang3/mutable/MutableBoolean;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/util/Map;Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)V method_28273 func_233428_a_ + m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/OptionalDynamic;)Ljava/util/Map; method_28275 func_233430_a_ + m (Lcom/mojang/serialization/OptionalDynamic;Ljava/util/Map$Entry;)Lcom/mojang/serialization/Dynamic; method_28277 func_233432_a_ + m (Lcom/mojang/serialization/Dynamic;J)Lcom/mojang/serialization/Dynamic; method_29916 func_241322_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_30075 func_233441_c_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28286 func_241331_c_ + m (Lcom/google/common/collect/ImmutableMap$Builder;Lcom/mojang/serialization/DynamicOps;Ljava/lang/String;)V method_28269 func_233424_a_ + m (Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;I)V method_28281 func_233436_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28271 func_233426_a_ + m (JLcom/mojang/serialization/DynamicLike;Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28268 func_233423_a_ + m (Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_28285 func_233440_b_ + m (Ljava/lang/String;)Ljava/lang/String; method_28278 func_233433_a_ + m (Lorg/apache/commons/lang3/mutable/MutableBoolean;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/util/Map;Ljava/util/Map;)V method_28284 func_233439_a_ + m (Lorg/apache/commons/lang3/mutable/MutableBoolean;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/util/Map;Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)V method_28283 func_233438_a_ + m (Lcom/mojang/serialization/Dynamic;JLcom/mojang/serialization/Dynamic;Z)Ljava/lang/Object; method_29917 func_241323_a_ + m (Lcom/mojang/serialization/Dynamic;JZZ)Lcom/mojang/serialization/Dynamic; method_28272 func_233427_a_ + m (Lcom/mojang/serialization/DynamicOps;Ljava/util/Map$Entry;)Lcom/mojang/serialization/Dynamic; method_28276 func_233431_a_ + f Lcom/google/common/collect/ImmutableMap; field_24647 field_233422_a_ +c net/minecraft/class_5299$class_5300 net/minecraft/util/datafix/fixes/WorldGenSettings$StructureSeparationSettingsCodec + m (Lnet/minecraft/class_5299$class_5300;)Ljava/lang/Integer; method_28292 func_233451_d_ + m (Lnet/minecraft/class_5299$class_5300;)I method_28291 func_233450_c_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28289 func_233448_a_ + m (Lnet/minecraft/class_5299$class_5300;)Ljava/lang/Integer; method_28293 func_233452_e_ + m (Lnet/minecraft/class_5299$class_5300;)I method_28290 func_233449_b_ + m (Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_28288 func_233447_a_ + m (Lnet/minecraft/class_5299$class_5300;)Ljava/lang/Integer; method_28294 func_233453_f_ + m (Lnet/minecraft/class_5299$class_5300;)I method_28287 func_233446_a_ + f Lcom/mojang/serialization/Codec; field_24648 field_233442_a_ + f I field_24651 field_233445_d_ + f I field_24649 field_233443_b_ + f I field_24650 field_233444_c_ +c net/minecraft/class_4754 net/minecraft/util/datafix/fixes/WallProperty + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24328 func_233421_c_ + m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24325 func_233416_a_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24327 func_233420_b_ + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24323 func_233417_a_ + m (Ljava/lang/String;)Ljava/lang/String; method_24326 func_233419_a_ + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Lcom/mojang/serialization/Dynamic; method_24324 func_233418_a_ + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + f Ljava/util/Set; field_21960 field_233415_a_ +c net/minecraft/class_4301 net/minecraft/util/datafix/fixes/ZombieVillagerXpFix + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_20492 func_222993_a_ +c net/minecraft/class_1218 net/minecraft/util/datafix/WriteAndReadDataFix + m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule + f Lcom/mojang/datafixers/DSL$TypeReference; field_5743 type + f Ljava/lang/String; field_5742 name +c net/minecraft/class_1222 net/minecraft/util/datafix/versions/V0100 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5196 equipment + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5199 func_206608_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5195 registerEntity + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5201 func_210604_b + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5200 func_210603_c + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5197 func_206612_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5198 func_206609_c +c net/minecraft/class_1220 net/minecraft/util/datafix/NamespacedSchema + m (Ljava/lang/String;)Ljava/lang/String; method_5193 ensureNamespaced + m ()Lcom/mojang/datafixers/types/Type; method_28295 func_233457_a_ + m (Lcom/mojang/datafixers/DSL$TypeReference;Ljava/lang/String;)Lcom/mojang/datafixers/types/Type; getChoiceType getChoiceType + f Lcom/mojang/datafixers/types/Type; field_24653 field_233456_b_ + f Lcom/mojang/serialization/codecs/PrimitiveCodec; field_24652 field_233455_a_ +c net/minecraft/class_1220$1 net/minecraft/util/datafix/NamespacedSchema$1 + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; read read + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/String;)Ljava/lang/Object; method_28296 write + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; write write + m ()Ljava/lang/String; toString toString +c net/minecraft/class_1224 net/minecraft/util/datafix/versions/V1022 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5203 func_210702_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5205 func_210704_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5204 func_210703_a +c net/minecraft/class_1221 net/minecraft/util/datafix/versions/V0102 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5194 func_210705_a +c net/minecraft/class_1226 net/minecraft/util/datafix/versions/V0107 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities +c net/minecraft/class_1223 net/minecraft/util/datafix/versions/V0106 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5202 func_210706_a +c net/minecraft/class_1228 net/minecraft/util/datafix/versions/V0135 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5209 func_210707_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5210 func_210708_b +c net/minecraft/class_1225 net/minecraft/util/datafix/versions/V1125 + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5207 func_210606_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5206 func_210605_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5208 func_211314_a +c net/minecraft/class_1230 net/minecraft/util/datafix/versions/V1451 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5212 func_210608_a +c net/minecraft/class_1227 net/minecraft/util/datafix/versions/V0143 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities +c net/minecraft/class_1232 net/minecraft/util/datafix/versions/V1451_2 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5225 func_206510_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities +c net/minecraft/class_1229 net/minecraft/util/datafix/versions/V1451_1 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5211 func_210607_a +c net/minecraft/class_1234 net/minecraft/util/datafix/versions/V1451_4 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5226 func_210622_a +c net/minecraft/class_1231 net/minecraft/util/datafix/versions/V1451_3 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5223 func_210619_e + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5220 func_210616_j + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5221 func_210617_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5215 func_210611_k + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5218 func_210614_f + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5214 func_210610_h + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5217 func_206498_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5219 func_210615_g + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5224 func_210620_b + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5213 func_210609_i + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5222 func_210618_d + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5216 func_210612_c +c net/minecraft/class_1236 net/minecraft/util/datafix/versions/V1451_6 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5228 func_210624_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/function/Supplier;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5229 func_210625_a +c net/minecraft/class_1233 net/minecraft/util/datafix/versions/V1451_5 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities +c net/minecraft/class_1235 net/minecraft/util/datafix/versions/V1451_7 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5227 func_210623_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes +c net/minecraft/class_1237 net/minecraft/util/datafix/versions/V1466 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5230 func_210626_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5231 func_210627_b +c net/minecraft/class_1238 net/minecraft/util/datafix/versions/V1460 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5244 func_206551_f + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5251 func_210643_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5267 func_210662_l + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5274 func_210652_c + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5239 func_210634_j + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5262 func_206527_h + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5279 func_206542_j + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5263 func_206555_l + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5259 func_210654_h + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5245 func_206535_n + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5243 func_210638_d + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5276 func_210669_f + m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5236 func_210631_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5254 func_210649_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5238 func_206541_q + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5275 func_206554_s + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5255 func_206523_u + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5250 func_206530_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5234 func_206529_w + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5273 registerInventory + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5271 func_206521_d + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5265 func_206552_y + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/function/Supplier;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5235 func_210630_a + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5257 func_210646_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5256 func_206534_e + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5277 func_206522_g + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5242 func_210637_m + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5268 func_210667_d + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5266 func_210661_i + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5260 func_210655_k + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5247 func_206516_i + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5249 func_206526_k + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5237 func_210632_g + m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5261 func_210656_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5278 func_209327_m + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5258 func_206520_o + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5253 func_210648_e + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5272 func_206545_p + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5240 func_210635_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5252 func_206515_r + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5269 func_210663_c + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5233 func_206524_t + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5264 func_206533_v + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5232 registerEntity + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5270 func_206518_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5241 func_206549_c + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5246 func_206546_x + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5248 func_211315_a +c net/minecraft/class_1239 net/minecraft/util/datafix/versions/V1481 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities +c net/minecraft/class_1240 net/minecraft/util/datafix/versions/V1470 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5280 registerEntity + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5281 func_210673_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5282 func_206561_a +c net/minecraft/class_1241 net/minecraft/util/datafix/versions/V1486 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities +c net/minecraft/class_1242 net/minecraft/util/datafix/versions/V1483 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities +c net/minecraft/class_1245 net/minecraft/util/datafix/versions/V1800 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5285 func_219873_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5287 func_219875_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5286 func_219874_a +c net/minecraft/class_1243 net/minecraft/util/datafix/versions/V1510 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities +c net/minecraft/class_3686 net/minecraft/util/datafix/versions/V1904 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_16051 func_219877_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_16050 func_219876_a +c net/minecraft/class_1244 net/minecraft/util/datafix/versions/V1801 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5284 func_219879_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5283 func_219878_a +c net/minecraft/class_3743 net/minecraft/util/datafix/versions/V1909 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities +c net/minecraft/class_3687 net/minecraft/util/datafix/versions/V1906 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_16053 func_219881_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_16054 func_219882_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_16052 func_219880_a +c net/minecraft/class_3984 net/minecraft/util/datafix/versions/V1928 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_17997 func_219884_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_17998 func_219883_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_17999 func_219885_b +c net/minecraft/class_3905 net/minecraft/util/datafix/versions/V1920 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_17342 func_219887_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_17343 func_219886_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities +c net/minecraft/class_4016 net/minecraft/util/datafix/versions/V1931 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_18246 func_219889_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_18247 func_219888_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities +c net/minecraft/class_3985 net/minecraft/util/datafix/versions/V1929 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_18001 func_219890_b + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_18000 func_219891_a +c net/minecraft/class_4755 net/minecraft/util/datafix/versions/V2501 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_24329 func_233460_a_ + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_24330 func_233461_a_ +c net/minecraft/class_4465 net/minecraft/util/datafix/versions/V2100 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_21745 func_226216_a_ + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_21746 func_226217_a_ + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_21747 func_226218_b_ + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities +c net/minecraft/class_4804 net/minecraft/util/datafix/versions/V2505 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_24512 func_233465_a_ + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_24511 func_233464_a_ +c net/minecraft/class_4756 net/minecraft/util/datafix/versions/V2502 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_24331 func_233462_a_ + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_24332 func_233463_a_ +c net/minecraft/class_4979 net/minecraft/util/datafix/versions/V2519 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_26304 func_233468_a_ + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_26305 func_233469_a_ +c net/minecraft/class_4847 net/minecraft/util/datafix/versions/V2509 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_24823 func_233466_a_ + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_24824 func_233467_a_ +c net/minecraft/class_5301 net/minecraft/util/datafix/versions/V2551 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28299 func_233474_c_ + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28298 func_233473_b_ + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28302 func_233477_f_ + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28297 func_233472_a_ + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28300 func_233475_d_ + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28301 func_233476_e_ +c net/minecraft/class_5130 net/minecraft/util/datafix/versions/V2522 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_26821 func_233470_a_ + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_26822 func_233471_a_ + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities +c net/minecraft/class_5416 net/minecraft/util/datafix/versions/V2568 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_30226 func_242270_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_30225 func_242269_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities +c net/minecraft/class_1246 net/minecraft/util/datafix/versions/V0700 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5289 func_210711_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5288 registerEntity + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities +c net/minecraft/class_1247 net/minecraft/util/datafix/versions/V0501 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5290 registerEntity + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5291 func_210709_a +c net/minecraft/class_1248 net/minecraft/util/datafix/versions/V0702 + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5293 func_210717_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5292 registerEntity +c net/minecraft/class_1249 net/minecraft/util/datafix/versions/V0701 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5294 registerEntity + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5295 func_210710_a +c net/minecraft/class_1250 net/minecraft/util/datafix/versions/V0704 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5296 registerInventory + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5298 func_206640_a + m (Lcom/mojang/datafixers/DSL$TypeReference;Ljava/lang/String;)Lcom/mojang/datafixers/types/Type; getChoiceType getChoiceType + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5303 func_210722_b + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5300 func_210718_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5302 func_206641_c + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5301 func_206646_b + m (Ljava/util/HashMap;)V method_5297 func_209318_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities + m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5299 func_210723_a + f Lcom/mojang/datafixers/types/templates/Hook$HookFunction; field_5745 field_206648_c + f Ljava/util/Map; field_5744 field_206647_b +c net/minecraft/class_1250$1 net/minecraft/util/datafix/versions/V0704$1 + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; apply apply +c net/minecraft/class_1251 net/minecraft/util/datafix/versions/V0703 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5308 func_210716_b + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5304 func_210712_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5307 func_210715_e + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5306 func_210714_c + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5305 func_210713_d +c net/minecraft/class_1252 net/minecraft/util/datafix/versions/V0808 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5310 func_210701_a + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5309 registerInventory +c net/minecraft/class_1253 net/minecraft/util/datafix/versions/V0705 + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5322 func_206583_f + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5312 func_206571_e + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5327 func_206591_d + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5316 func_206573_h + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5333 func_206592_g + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5325 func_206587_k + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5337 func_206568_j + m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5315 func_210678_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5324 func_206579_i + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5323 func_206584_n + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5335 func_206595_m + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5318 func_206578_l + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5329 func_210692_c + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5319 func_210682_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5336 func_210698_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5328 func_206588_p + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5313 func_206570_o + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5331 func_206594_s + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5334 func_206567_r + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5317 func_206586_q + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5311 registerEntity + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5321 func_206582_v + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5338 func_206574_u + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5314 func_206575_t + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5320 func_206580_c + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5330 registerThrowableProjectile + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5332 func_206569_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5326 func_209329_a + f Lcom/mojang/datafixers/types/templates/Hook$HookFunction; field_5746 field_206597_b +c net/minecraft/class_1253$1 net/minecraft/util/datafix/versions/V0705$1 + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; apply apply +c net/minecraft/class_1254 net/minecraft/util/datafix/versions/V0099 + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5378 func_210755_e + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5364 func_211319_c + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5365 func_206653_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5340 func_206670_e + m (Ljava/util/HashMap;)V method_5344 func_209320_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5353 equipment + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5346 registerInventory + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5354 func_206684_c + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5373 func_211322_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5374 func_210752_g + m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5375 func_209870_a_ + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5369 func_211320_d + m ()Ljava/util/Map; method_5380 func_209867_d + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5339 registerEntity + m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities + m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5347 func_210729_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5381 func_206679_j + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5377 registerMinecart + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5351 func_206688_l + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes + m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5357 func_209868_a_ + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5367 func_206678_p + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5361 func_210741_l + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5352 func_210734_j + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5358 func_206655_n + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5343 func_210727_h + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5371 func_209866_a_ + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5370 func_210748_f + m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map;Ljava/lang/String;)Ljava/lang/Object; method_5359 func_209869_a + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5355 func_210736_d + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5372 func_206667_b + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5379 func_211324_b + m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5341 func_210751_b + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5366 func_206656_d + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5349 func_206663_h + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5356 func_206686_f + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5362 func_206651_i + m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5348 func_211317_a + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5376 func_206671_m + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5368 registerThrowableProjectile + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5363 func_206661_k + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5345 func_210728_k + m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5342 func_206682_o + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5360 func_210740_i + m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5350 func_210732_g + f Lcom/mojang/datafixers/types/templates/Hook$HookFunction; field_5747 field_206691_b + f Ljava/util/Map; field_5748 field_206693_d + f Lorg/apache/logging/log4j/Logger; field_5749 LOGGER +c net/minecraft/class_1254$1 net/minecraft/util/datafix/versions/V0099$1 + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; apply apply +c net/minecraft/class_5169 net/minecraft/server/dedicated/ServerInfoMBean + m (Ljava/lang/Object;)Ljavax/management/MBeanAttributeInfo; method_27180 func_233489_a_ + m (Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/String;)Ljava/lang/Object; invoke invoke + m (I)[Ljavax/management/MBeanAttributeInfo; method_27178 func_233487_a_ + m ()[J method_27182 func_233491_b_ + m (Ljava/lang/String;)Ljava/lang/Object; getAttribute getAttribute + m (Ljavax/management/AttributeList;)Ljavax/management/AttributeList; setAttributes setAttributes + m (Lnet/minecraft/server/MinecraftServer;)V method_27181 func_233490_a_ + m (Ljavax/management/Attribute;)V setAttribute setAttribute + m ([Ljava/lang/String;)Ljavax/management/AttributeList; getAttributes getAttributes + m (Lnet/minecraft/class_5169$class_5170;)Ljavax/management/Attribute; method_27179 func_233488_a_ + m ()F method_27177 func_233486_a_ + m ()Ljavax/management/MBeanInfo; getMBeanInfo getMBeanInfo + m (Lnet/minecraft/class_5169$class_5170;)Ljava/lang/String; method_27183 func_233492_b_ + f Ljavax/management/MBeanInfo; field_23972 field_233484_c_ + f Lnet/minecraft/server/MinecraftServer; field_23971 field_233483_b_ + f Ljava/util/Map; field_23973 field_233485_d_ + f Lorg/apache/logging/log4j/Logger; field_23970 field_233482_a_ +c net/minecraft/class_5169$1 net/minecraft/server/dedicated/ServerInfoMBean$1 +c net/minecraft/class_5169$class_5170 net/minecraft/server/dedicated/ServerInfoMBean$Attribute + m (Lnet/minecraft/class_5169$class_5170;)Ljavax/management/MBeanAttributeInfo; method_27187 func_233500_c_ + m (Lnet/minecraft/class_5169$class_5170;)Ljava/lang/String; method_27186 func_233499_b_ + m ()Ljavax/management/MBeanAttributeInfo; method_27184 func_233497_a_ + m (Lnet/minecraft/class_5169$class_5170;)Ljava/util/function/Supplier; method_27185 func_233498_a_ + f Ljava/lang/String; field_23974 field_233493_a_ + f Ljava/lang/Class; field_23977 field_233496_d_ + f Ljava/util/function/Supplier; field_23975 field_233494_b_ + f Ljava/lang/String; field_23976 field_233495_c_ +c net/minecraft/class_4757 net/minecraft/profiler/TimeTracker + m ()Lnet/minecraft/class_3696; method_24337 func_233509_e_ + m ()V method_24335 func_233507_c_ + m ()V method_24334 func_233506_b_ + m ()Z method_24333 func_233505_a_ + m ()Lnet/minecraft/class_3695; method_24336 func_233508_d_ + f Ljava/util/function/LongSupplier; field_21962 field_233502_a_ + f Ljava/util/function/IntSupplier; field_21963 field_233503_b_ + f Lnet/minecraft/class_3693; field_21964 field_233504_c_ +c net/minecraft/class_3533 net/minecraft/profiler/Profiler + m (Ljava/lang/String;)Lnet/minecraft/class_3533$class_4746; method_24245 func_230080_d_ + m ()Lnet/minecraft/class_3533$class_4746; method_24246 func_230081_e_ + m ()Ljava/lang/Object; method_21720 func_225432_f + m ()Ljava/lang/Object; method_21719 func_225431_e + m (J)Ljava/lang/Object; method_21718 func_225433_a + f Ljava/lang/String; field_15734 currentSectionName + f J field_16267 WARN_TIME_THRESHOLD + f Lnet/minecraft/class_3533$class_4746; field_21819 field_230079_k_ + f Lorg/apache/logging/log4j/Logger; field_15735 LOGGER + f Z field_15733 tickStarted + f Lit/unimi/dsi/fastutil/longs/LongList; field_15730 timeStack + f Ljava/util/function/LongSupplier; field_21961 field_233501_g_ + f Ljava/util/List; field_15736 sectionList + f I field_15729 startTicks + f Z field_20345 field_226230_l_ + f J field_15732 startTime + f Ljava/util/function/IntSupplier; field_16266 currentTicks + f Ljava/util/Map; field_21818 field_230078_e_ +c net/minecraft/class_3533$1 net/minecraft/profiler/Profiler$1 +c net/minecraft/class_3533$class_4746 net/minecraft/profiler/Profiler$Section + m (Lnet/minecraft/class_3533$class_4746;J)J method_24248 func_230086_a_ + m (Lnet/minecraft/class_3533$class_4746;)J method_24247 func_230085_a_ + m (Lnet/minecraft/class_3533$class_4746;)J method_24249 func_230087_b_ + m (Lnet/minecraft/class_3533$class_4746;J)J method_24250 func_230088_b_ + m (Lnet/minecraft/class_3533$class_4746;)Lit/unimi/dsi/fastutil/objects/Object2LongOpenHashMap; method_24251 func_230089_c_ + f J field_21821 field_230083_b_ + f J field_21820 field_230082_a_ + f Lit/unimi/dsi/fastutil/objects/Object2LongOpenHashMap; field_21822 field_230084_c_ +c net/minecraft/class_3692 net/minecraft/profiler/FilledProfileResult + m (Ljava/lang/StringBuilder;ILjava/lang/String;Ljava/lang/Long;)V method_24258 func_230100_a_ + m ()Ljava/lang/String; method_16062 getWittyString + m (Lnet/minecraft/class_3692$class_4747;)J method_24254 func_230096_a_ + m (Ljava/util/Map;Ljava/util/List;Ljava/lang/String;Ljava/lang/Long;)V method_24261 func_230103_a_ + m (ILjava/lang/String;Ljava/lang/StringBuilder;)V method_16061 format + m (IILjava/lang/StringBuilder;Ljava/util/Map$Entry;)V method_24252 func_230094_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_4748; method_24262 func_230104_c_ + m (Ljava/lang/StringBuilder;I)Ljava/lang/StringBuilder; method_24256 func_230098_a_ + m (Ljava/util/Map;Ljava/lang/StringBuilder;I)V method_24260 func_230102_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_3692$class_4747; method_24263 func_230105_d_ + m (Ljava/lang/String;Ljava/lang/String;)Z method_24255 func_230097_a_ + m (Ljava/util/Map;Ljava/lang/String;Lnet/minecraft/class_4748;)V method_24259 func_230101_a_ + m (ILjava/lang/String;Lnet/minecraft/class_3692$class_4747;ILjava/lang/StringBuilder;)V method_24253 func_230095_a_ + m (JI)Ljava/lang/String; method_16063 inlineIntoCrashReport + m ()Ljava/util/Map; method_24264 func_230106_h_ + m (Ljava/lang/StringBuilder;ILjava/lang/String;Lnet/minecraft/class_3692$class_4747;)V method_24257 func_230099_a_ + f Lnet/minecraft/class_4748; field_21823 field_230090_b_ + f Ljava/util/Comparator; field_21825 field_230092_d_ + f Ljava/util/Map; field_21826 field_230093_e_ + f Lorg/apache/logging/log4j/Logger; field_16279 LOGGER + f I field_16275 ticksStop + f Lcom/google/common/base/Splitter; field_21824 field_230091_c_ + f J field_16278 timeStop + f I field_19383 ticksTotal + f I field_16274 ticksStart + f J field_16276 timeStart +c net/minecraft/class_3692$class_4747 net/minecraft/profiler/FilledProfileResult$Section + m (Lnet/minecraft/class_3692$class_4747;)Ljava/util/Map; method_24269 func_230114_c_ + m (Lnet/minecraft/class_3692$class_4747;)J method_24265 func_230110_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_3692$class_4747; method_24266 func_230111_a_ + m (Lnet/minecraft/class_3692$class_4747;)J method_24268 func_230113_b_ + m (Ljava/util/Iterator;J)V method_24267 func_230112_a_ + f J field_21827 field_230107_a_ + f J field_21828 field_230108_b_ + f Ljava/util/Map; field_21829 field_230109_c_ +c net/minecraft/class_3692$1 net/minecraft/profiler/FilledProfileResult$1 +c net/minecraft/class_3688 net/minecraft/profiler/EmptyProfileResult + f Lnet/minecraft/class_3688; field_16265 INSTANCE +c net/minecraft/class_3693 net/minecraft/profiler/IResultableProfiler + m ()Lnet/minecraft/class_3696; method_16064 getResults +c net/minecraft/class_3694 net/minecraft/profiler/EmptyProfiler + f Lnet/minecraft/class_3694; field_16280 INSTANCE +c net/minecraft/class_3695 net/minecraft/profiler/IProfiler + m (Lnet/minecraft/class_3695;Lnet/minecraft/class_3695;)Lnet/minecraft/class_3695; method_24338 func_233513_a_ + m ()V method_15407 endSection + m (Ljava/lang/String;)V method_15396 startSection + m (Ljava/util/function/Supplier;)V method_24271 func_230036_c_ + m ()V method_16066 endTick + m (Ljava/util/function/Supplier;)V method_15403 endStartSection + m (Ljava/lang/String;)V method_24270 func_230035_c_ + m ()V method_16065 startTick + m (Ljava/util/function/Supplier;)V method_15400 startSection + m (Ljava/lang/String;)V method_15405 endStartSection +c net/minecraft/class_3695$1 net/minecraft/profiler/IProfiler$1 + f Lnet/minecraft/class_3695; field_21966 field_233515_b_ + f Lnet/minecraft/class_3695; field_21965 field_233514_a_ +c net/minecraft/class_3696 net/minecraft/profiler/IProfileResult + m (Ljava/lang/String;)Ljava/lang/String; method_21721 decodePath + m ()I method_16070 ticksStart + m (Ljava/lang/String;)Ljava/util/List; method_16067 getDataPoints + m ()J method_16073 timeStart + m ()J method_16071 nanoTime + m ()I method_16072 ticksStop + m ()J method_16068 timeStop + m (Ljava/io/File;)Z method_16069 writeToFile + m ()I method_16074 ticksSpend +c net/minecraft/class_3534 net/minecraft/profiler/DataPoint + m ()I method_15409 getTextColor + m (Lnet/minecraft/class_3534;)I method_15408 compareTo + m (Ljava/lang/Object;)I compareTo compareTo + f Ljava/lang/String; field_15738 name + f D field_15737 rootRelTime + f D field_15739 relTime + f J field_19384 field_223511_c +c net/minecraft/class_4748 net/minecraft/profiler/IProfilerSection + m ()J method_24273 func_230038_b_ + m ()J method_24272 func_230037_a_ + m ()Lit/unimi/dsi/fastutil/objects/Object2LongMap; method_24274 func_230039_c_ +c net/minecraft/class_4758 net/minecraft/profiler/LongTickDetector + m ()Lnet/minecraft/class_3695; method_24339 func_233522_a_ + m (Lnet/minecraft/class_3695;Lnet/minecraft/class_4758;)Lnet/minecraft/class_3695; method_24340 func_233523_a_ + m ()I method_24343 func_233526_c_ + m ()V method_24342 func_233525_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_4758; method_24341 func_233524_a_ + f Ljava/io/File; field_21971 field_233520_e_ + f Lorg/apache/logging/log4j/Logger; field_21967 field_233516_a_ + f Ljava/util/function/LongSupplier; field_21968 field_233517_b_ + f Lnet/minecraft/class_3693; field_21972 field_233521_f_ + f I field_21970 field_233519_d_ + f J field_21969 field_233518_c_ +c net/minecraft/class_1255 net/minecraft/util/concurrent/ThreadTaskExecutor + m (Ljava/lang/Runnable;)V execute execute + m (Ljava/lang/Runnable;)Ljava/lang/Runnable; method_16211 wrapTask + m (Ljava/lang/Runnable;)V method_18858 enqueue + m ()Z method_5384 shouldDeferTasks + m ()I method_21684 getQueueSize + m (Ljava/lang/Runnable;)V method_19537 runImmediately + m ()V method_18855 dropTasks + m (Ljava/util/function/Supplier;)Ljava/util/concurrent/CompletableFuture; method_5385 supplyAsync + m (Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture; method_20493 runAsync + m ()V method_20813 threadYieldPark + m ()V method_5383 drainTasks + m (Ljava/util/function/BooleanSupplier;)V method_18857 driveUntil + m (Ljava/lang/Runnable;)V method_18859 run + m (Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture; method_5382 deferTask + m (Ljava/lang/Runnable;)Ljava/lang/Void; method_5386 func_222818_b + m ()Ljava/lang/Thread; method_3777 getExecutionThread + m ()Z method_18854 isOnExecutionThread + m (Ljava/lang/Runnable;)Z method_18856 canRun + m ()Z method_16075 driveOne + f Ljava/lang/String; field_18318 name + f I field_18319 drivers + f Ljava/util/Queue; field_5750 queue + f Lorg/apache/logging/log4j/Logger; field_5751 LOGGER +c net/minecraft/class_3906 net/minecraft/util/concurrent/ITaskExecutor + m (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; method_27918 func_233528_c_ + m (Ljava/util/concurrent/CompletableFuture;Lcom/mojang/datafixers/util/Either;)V method_27917 func_233527_a_ + m ()V close close + m (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; method_17345 func_213141_a + m (Ljava/lang/String;Ljava/util/function/Consumer;)Lnet/minecraft/class_3906; method_17344 inline + m ()Ljava/lang/String; method_16898 getName + m (Ljava/lang/Object;)V method_16901 enqueue +c net/minecraft/class_3906$1 net/minecraft/util/concurrent/ITaskExecutor$1 + m ()Ljava/lang/String; toString toString + f Ljava/util/function/Consumer; field_17277 field_213158_b + f Ljava/lang/String; field_17276 field_213157_a +c net/minecraft/class_4093 net/minecraft/util/concurrent/RecursiveEventLoop + m ()Z method_18860 isTaskRunning + f I field_18320 running +c net/minecraft/class_3846 net/minecraft/util/concurrent/DelegatedTaskExecutor + m (Lit/unimi/dsi/fastutil/ints/Int2BooleanFunction;)I method_16900 driveWhile + m (I)Z method_16899 func_213147_a + m ()V run run + m ()Z method_16906 isActive + m ()V method_16908 reschedule + m ()Z method_16907 driveOne + m ()Z method_16903 setActive + m ()Ljava/lang/String; toString toString + m ()Z method_16905 shouldSchedule + m (Ljava/util/concurrent/Executor;Ljava/lang/String;)Lnet/minecraft/class_3846; method_16902 create + m ()V method_16904 clearActive + f Lorg/apache/logging/log4j/Logger; field_17040 LOGGER + f Lnet/minecraft/class_3847; field_17039 queue + f Ljava/lang/String; field_17043 name + f Ljava/util/concurrent/Executor; field_17042 delegate + f Ljava/util/concurrent/atomic/AtomicInteger; field_17041 flags +c net/minecraft/class_3847 net/minecraft/util/concurrent/ITaskQueue + m ()Z method_16911 isEmpty + m ()Ljava/lang/Object; method_16909 poll + m (Ljava/lang/Object;)Z method_16910 enqueue +c net/minecraft/class_3847$class_3848 net/minecraft/util/concurrent/ITaskQueue$Priority + m (Lnet/minecraft/class_3847$class_3907;)Z method_16913 enqueue + m (I)Ljava/util/concurrent/ConcurrentLinkedQueue; method_16912 func_219948_a + m ()Ljava/lang/Runnable; method_17346 poll + f Ljava/util/List; field_17044 queues +c net/minecraft/class_3847$class_3907 net/minecraft/util/concurrent/ITaskQueue$RunnableWithPriority + m ()V run run + m ()I method_17347 getPriority + f Ljava/lang/Runnable; field_17279 runnable + f I field_17278 priority +c net/minecraft/class_3847$class_3849 net/minecraft/util/concurrent/ITaskQueue$Single + f Ljava/util/Queue; field_17045 queue +c net/minecraft/class_1257 net/minecraft/util/WorldOptimizer + m ()Lcom/google/common/collect/ImmutableSet; method_28304 func_233533_c_ + m ()Lnet/minecraft/class_2561; method_5394 getStatusText + m ()V method_5404 optimize + m ()Lnet/minecraft/class_26; method_17831 func_219955_j + m (Ljava/lang/Thread;Ljava/lang/Throwable;)V method_5398 func_219956_a + m (Ljava/io/File;Ljava/lang/String;)Z method_17829 func_219954_a + m ()V method_5402 cancel + m (Lnet/minecraft/class_5321;)Ljava/util/List; method_17830 func_233532_b_ + m ()I method_5400 getConverted + m ()I method_5399 getSkipped + m ()Z method_5403 isFinished + m ()F method_5401 getTotalProgress + m (Lnet/minecraft/class_5321;)F method_5393 func_233531_a_ + m ()I method_5397 getTotalChunks + f Z field_5759 done + f Ljava/util/concurrent/ThreadFactory; field_5757 THREAD_FACTORY + f Lnet/minecraft/class_2561; field_5765 statusText + f I field_5766 converted + f I field_5764 skipped + f Z field_5760 active + f Lit/unimi/dsi/fastutil/objects/Object2FloatMap; field_5762 progress + f Lcom/google/common/collect/ImmutableSet; field_25354 field_233529_c_ + f Lorg/apache/logging/log4j/Logger; field_5756 LOGGER + f Lnet/minecraft/class_26; field_5755 savedDataManager + f Lcom/mojang/datafixers/DataFixer; field_24084 field_233530_g_ + f Z field_19225 field_219957_d + f I field_5768 totalChunks + f Lnet/minecraft/class_32$class_5143; field_24083 worldStorage + f Ljava/lang/Thread; field_5767 thread + f Ljava/util/regex/Pattern; field_17622 REGION_FILE_PATTERN + f F field_5763 totalProgress +c net/minecraft/class_3829 net/minecraft/inventory/IClearable + m (Ljava/lang/Object;)V method_16825 clearObj + m ()V method_5448 clear +c net/minecraft/class_1259 net/minecraft/world/BossInfo + m (Z)Lnet/minecraft/class_1259; method_5410 setPlayEndBossMusic + m (Z)Lnet/minecraft/class_1259; method_5411 setCreateFog + m (Z)Lnet/minecraft/class_1259; method_5406 setDarkenSky + m (Lnet/minecraft/class_1259$class_1260;)V method_5416 setColor + m ()F method_5412 getPercent + m ()Lnet/minecraft/class_1259$class_1261; method_5415 getOverlay + m ()Lnet/minecraft/class_2561; method_5414 getName + m ()Ljava/util/UUID; method_5407 getUniqueId + m (Lnet/minecraft/class_2561;)V method_5413 setName + m (Lnet/minecraft/class_1259$class_1261;)V method_5409 setOverlay + m ()Z method_5418 shouldPlayEndBossMusic + m ()Lnet/minecraft/class_1259$class_1260; method_5420 getColor + m ()Z method_5419 shouldCreateFog + m ()Z method_5417 shouldDarkenSky + m (F)V method_5408 setPercent + f Z field_5776 darkenSky + f Ljava/util/UUID; field_5772 uniqueId + f Z field_5775 playEndBossMusic + f Z field_5773 createFog + f Lnet/minecraft/class_1259$class_1260; field_5778 color + f Lnet/minecraft/class_1259$class_1261; field_5779 overlay + f F field_5774 percent + f Lnet/minecraft/class_2561; field_5777 name +c net/minecraft/class_1259$class_1261 net/minecraft/world/BossInfo$Overlay + m (Ljava/lang/String;)Lnet/minecraft/class_1259$class_1261; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_1259$class_1261; method_5424 byName + m ()[Lnet/minecraft/class_1259$class_1261; values values + m ()Ljava/lang/String; method_5425 getName + f [Lnet/minecraft/class_1259$class_1261; field_5792 $VALUES + f Lnet/minecraft/class_1259$class_1261; field_5790 NOTCHED_20 + f Lnet/minecraft/class_1259$class_1261; field_5795 PROGRESS + f Lnet/minecraft/class_1259$class_1261; field_5791 NOTCHED_10 + f Lnet/minecraft/class_1259$class_1261; field_5796 NOTCHED_6 + f Lnet/minecraft/class_1259$class_1261; field_5793 NOTCHED_12 + f Ljava/lang/String; field_5794 name +c net/minecraft/class_1259$class_1260 net/minecraft/world/BossInfo$Color + m (Ljava/lang/String;)Lnet/minecraft/class_1259$class_1260; method_5422 byName + m ()[Lnet/minecraft/class_1259$class_1260; values values + m ()Ljava/lang/String; method_5421 getName + m ()Lnet/minecraft/class_124; method_5423 getFormatting + m (Ljava/lang/String;)Lnet/minecraft/class_1259$class_1260; valueOf valueOf + f [Lnet/minecraft/class_1259$class_1260; field_5789 $VALUES + f Lnet/minecraft/class_124; field_5787 formatting + f Ljava/lang/String; field_5781 name + f Lnet/minecraft/class_1259$class_1260; field_5788 PINK + f Lnet/minecraft/class_1259$class_1260; field_5784 RED + f Lnet/minecraft/class_1259$class_1260; field_5780 BLUE + f Lnet/minecraft/class_1259$class_1260; field_5785 GREEN + f Lnet/minecraft/class_1259$class_1260; field_5782 YELLOW + f Lnet/minecraft/class_1259$class_1260; field_5786 WHITE + f Lnet/minecraft/class_1259$class_1260; field_5783 PURPLE +c net/minecraft/class_1263 net/minecraft/inventory/IInventory + m ()Z method_5442 isEmpty + m (Lnet/minecraft/class_1792;)I method_18861 count + m (Lnet/minecraft/class_1657;)Z method_5443 isUsableByPlayer + m (II)Lnet/minecraft/class_1799; method_5434 decrStackSize + m ()I method_5439 getSizeInventory + m (Lnet/minecraft/class_1657;)V method_5432 closeInventory + m (ILnet/minecraft/class_1799;)Z method_5437 isItemValidForSlot + m (I)Lnet/minecraft/class_1799; method_5441 removeStackFromSlot + m (Ljava/util/Set;)Z method_18862 hasAny + m (I)Lnet/minecraft/class_1799; method_5438 getStackInSlot + m ()I method_5444 getInventoryStackLimit + m (ILnet/minecraft/class_1799;)V method_5447 setInventorySlotContents + m ()V method_5431 markDirty + m (Lnet/minecraft/class_1657;)V method_5435 openInventory +c net/minecraft/class_1258 net/minecraft/inventory/DoubleSidedInventory + m (Lnet/minecraft/class_1263;)Z method_5405 isPartOfLargeChest + f Lnet/minecraft/class_1263; field_5769 upperChest + f Lnet/minecraft/class_1263; field_5771 lowerChest +c net/minecraft/class_1265 net/minecraft/inventory/IInventoryChangedListener + m (Lnet/minecraft/class_1263;)V method_5453 onInventoryChanged +c net/minecraft/class_1262 net/minecraft/inventory/ItemStackHelper + m (Ljava/util/List;I)Lnet/minecraft/class_1799; method_5428 getAndRemove + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2371;)Lnet/minecraft/class_2487; method_5426 saveAllItems + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2371;)V method_5429 loadAllItems + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2371;Z)Lnet/minecraft/class_2487; method_5427 saveAllItems + m (Lnet/minecraft/class_1799;Ljava/util/function/Predicate;IZ)I method_29235 func_233535_a_ + m (Lnet/minecraft/class_1263;Ljava/util/function/Predicate;IZ)I method_29234 func_233534_a_ + m (Ljava/util/List;II)Lnet/minecraft/class_1799; method_5430 getAndSplit +c net/minecraft/class_1267 net/minecraft/world/Difficulty + m (Ljava/lang/String;)Lnet/minecraft/class_1267; method_16691 byName + m ()Ljava/lang/String; method_5460 getTranslationKey + m ()[Lnet/minecraft/class_1267; values values + m ()Lnet/minecraft/class_1267; method_27297 getNextDifficulty + m (I)Lnet/minecraft/class_1267; method_5462 byId + m ()Lnet/minecraft/class_2561; method_5463 getDisplayName + m ()I method_5461 getId + m (I)[Lnet/minecraft/class_1267; method_5459 func_199928_b + m (Ljava/lang/String;)Lnet/minecraft/class_1267; valueOf valueOf + f Ljava/lang/String; field_5806 translationKey + f Lnet/minecraft/class_1267; field_5801 PEACEFUL + f [Lnet/minecraft/class_1267; field_5804 $VALUES + f [Lnet/minecraft/class_1267; field_5800 ID_MAPPING + f Lnet/minecraft/class_1267; field_5807 HARD + f Lnet/minecraft/class_1267; field_5805 EASY + f I field_5803 id + f Lnet/minecraft/class_1267; field_5802 NORMAL +c net/minecraft/class_1264 net/minecraft/inventory/InventoryHelper + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_17348 func_219962_a + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;Lnet/minecraft/class_1263;)V method_5452 dropInventoryItems + m (Lnet/minecraft/class_1937;DDDLnet/minecraft/class_1799;)V method_5449 spawnItemStack + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2371;)V method_17349 dropItems + m (Lnet/minecraft/class_1937;DDDLnet/minecraft/class_1263;)V method_5450 dropInventoryItems + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1263;)V method_5451 dropInventoryItems + f Ljava/util/Random; field_5797 RANDOM +c net/minecraft/class_1268 net/minecraft/util/Hand + m ()[Lnet/minecraft/class_1268; values values + m (Ljava/lang/String;)Lnet/minecraft/class_1268; valueOf valueOf + f Lnet/minecraft/class_1268; field_5810 OFF_HAND + f [Lnet/minecraft/class_1268; field_5809 $VALUES + f Lnet/minecraft/class_1268; field_5808 MAIN_HAND +c net/minecraft/class_1266 net/minecraft/world/DifficultyInstance + m ()F method_5458 getClampedAdditionalDifficulty + m (Lnet/minecraft/class_1267;JJF)F method_5456 calculateAdditionalDifficulty + m ()Lnet/minecraft/class_1267; method_5454 getDifficulty + m (F)Z method_5455 isHarderThan + m ()F method_5457 getAdditionalDifficulty + f F field_5799 additionalDifficulty + f Lnet/minecraft/class_1267; field_5798 worldDifficulty +c net/minecraft/class_1271 net/minecraft/util/ActionResult + m (Ljava/lang/Object;)Lnet/minecraft/class_1271; method_22427 resultSuccess + m (Ljava/lang/Object;)Lnet/minecraft/class_1271; method_22431 resultFail + m ()Ljava/lang/Object; method_5466 getResult + m (Ljava/lang/Object;)Lnet/minecraft/class_1271; method_22430 resultPass + m (Ljava/lang/Object;Z)Lnet/minecraft/class_1271; method_29237 func_233538_a_ + m ()Lnet/minecraft/class_1269; method_5467 getType + m (Ljava/lang/Object;)Lnet/minecraft/class_1271; method_22428 resultConsume + f Ljava/lang/Object; field_5816 result + f Lnet/minecraft/class_1269; field_5815 type +c net/minecraft/class_1269 net/minecraft/util/ActionResultType + m (Ljava/lang/String;)Lnet/minecraft/class_1269; valueOf valueOf + m ()Z method_23665 isSuccessOrConsume + m ()Z method_23666 isSuccess + m ()[Lnet/minecraft/class_1269; values values + m (Z)Lnet/minecraft/class_1269; method_29236 func_233537_a_ + f Lnet/minecraft/class_1269; field_5812 SUCCESS + f Lnet/minecraft/class_1269; field_5814 FAIL + f [Lnet/minecraft/class_1269; field_5813 $VALUES + f Lnet/minecraft/class_1269; field_5811 PASS + f Lnet/minecraft/class_1269; field_21466 CONSUME +c net/minecraft/class_3908 net/minecraft/inventory/container/INamedContainerProvider + m ()Lnet/minecraft/class_2561; method_5476 getDisplayName +c net/minecraft/class_1273 net/minecraft/world/LockCode + m (Lnet/minecraft/class_1799;)Z method_5472 func_219964_a + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1273; method_5473 read + m (Lnet/minecraft/class_2487;)V method_5474 write + f Lnet/minecraft/class_1273; field_5817 EMPTY_CODE + f Ljava/lang/String; field_5818 lock +c net/minecraft/class_4759 net/minecraft/util/ShulkerAABBHelper + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Lnet/minecraft/class_238; method_24344 getOpenedCollisionBox +c net/minecraft/class_1275 net/minecraft/util/INameable + m ()Lnet/minecraft/class_2561; method_5477 getName + m ()Z method_16914 hasCustomName + m ()Lnet/minecraft/class_2561; method_5476 getDisplayName + m ()Lnet/minecraft/class_2561; method_5797 getCustomName +c net/minecraft/class_747 net/minecraft/inventory/container/SimpleNamedContainerProvider + f Lnet/minecraft/class_2561; field_3947 name + f Lnet/minecraft/class_1270; field_17280 inner +c net/minecraft/class_1277 net/minecraft/inventory/Inventory + m (Lnet/minecraft/class_1799;)Z method_20635 func_223371_e_ + m (Lnet/minecraft/class_1799;)Z method_24513 func_233544_f_ + m ()Lnet/minecraft/class_2499; method_7660 write + m (Lnet/minecraft/class_2499;)V method_7659 read + m (Lnet/minecraft/class_1799;)V method_20634 func_223372_c + m (Lnet/minecraft/class_1792;I)Lnet/minecraft/class_1799; method_20631 func_223374_a + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_24825 func_233540_a_ + m (Lnet/minecraft/class_1799;)V method_20633 func_223375_b + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_20632 func_223373_a + m (Lnet/minecraft/class_1799;)Z method_27070 func_233541_b_ + m ()Ljava/lang/String; toString toString + m ()Ljava/util/List; method_24514 func_233543_f_ + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_5491 addItem + m (Lnet/minecraft/class_1265;)V method_5489 addListener + m (Lnet/minecraft/class_1265;)V method_5488 removeListener + f I field_5831 slotsCount + f Lnet/minecraft/class_2371; field_5828 inventoryContents + f Ljava/util/List; field_5829 listeners +c net/minecraft/class_1276 net/minecraft/profiler/Snooper + m ()V method_5482 start + m ()V method_5485 addMemoryStatsToSnooper + m ()Ljava/lang/String; method_5479 getUniqueID + m ()Z method_5483 isSnooperRunning + m ()V method_5487 stop + m (Ljava/lang/String;Ljava/lang/Object;)V method_5481 addClientStat + m ()J method_5484 getMinecraftStartTimeMillis + m (Ljava/lang/String;Ljava/lang/Object;)V method_5480 addStatToSnooper + f J field_5822 minecraftStartTimeMilis + f Ljava/util/Map; field_5825 snooperStats + f Ljava/util/Timer; field_5823 timer + f Ljava/util/Map; field_5826 clientStats + f Lnet/minecraft/class_1279; field_5827 playerStatsCollector + f Z field_5820 isRunning + f Ljava/net/URL; field_5819 serverUrl + f Ljava/lang/Object; field_5824 syncLock + f Ljava/lang/String; field_5821 uniqueID +c net/minecraft/class_1278 net/minecraft/inventory/ISidedInventory + m (ILnet/minecraft/class_1799;Lnet/minecraft/class_2350;)Z method_5493 canExtractItem + m (Lnet/minecraft/class_2350;)[I method_5494 getSlotsForFace + m (ILnet/minecraft/class_1799;Lnet/minecraft/class_2350;)Z method_5492 canInsertItem +c net/minecraft/class_1279 net/minecraft/profiler/ISnooperInfo + m (Lnet/minecraft/class_1276;)V method_5495 fillSnooper +c net/minecraft/class_1286 net/minecraft/util/BedExplosionDamageSource + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_5551 func_233545_a_ +c net/minecraft/class_3954 net/minecraft/inventory/ISidedInventoryProvider + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1278; method_17680 createInventory +c net/minecraft/class_1280 net/minecraft/util/CombatRules + m (FF)F method_5497 getDamageAfterMagicAbsorb + m (FFF)F method_5496 getDamageAfterAbsorb +c net/minecraft/class_1281 net/minecraft/util/CombatEntry + m ()Z method_5502 isLivingDamageSrc + m ()F method_5503 getDamage + m ()Lnet/minecraft/class_1282; method_5499 getDamageSrc + m ()Ljava/lang/String; method_5500 getFallSuffix + m ()F method_5501 getDamageAmount + m ()Lnet/minecraft/class_2561; method_5498 getDamageSrcDisplayName + f F field_5833 fallDistance + f Lnet/minecraft/class_1282; field_5837 damageSrc + f F field_5834 health + f F field_5835 damage + f I field_5836 time + f Ljava/lang/String; field_5838 fallSuffix +c net/minecraft/class_1282 net/minecraft/util/DamageSource + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_2561; method_5506 getDeathMessage + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5524 causeThrownDamage + m ()Ljava/lang/String; method_5525 getDamageType + m ()Lnet/minecraft/class_1297; method_5526 getImmediateSource + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1282; method_5512 causeExplosionDamage + m ()Z method_5514 isDifficultyScaled + m ()Lnet/minecraft/class_1282; method_5508 setDamageBypassesArmor + m ()Lnet/minecraft/class_243; method_5510 getDamageLocation + m (Lnet/minecraft/class_1665;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5522 causeArrowDamage + m ()Lnet/minecraft/class_1282; method_5509 setDamageIsAbsolute + m ()Ljava/lang/String; toString toString + m ()F method_5528 getHungerDamage + m ()Lnet/minecraft/class_1282; method_5516 setDifficultyScaled + m ()Z method_5530 isCreativePlayer + m (Lnet/minecraft/class_1687;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_29238 func_233549_a_ + m ()Z method_5504 isDamageAbsolute + m ()Lnet/minecraft/class_1282; method_5517 setProjectile + m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_1282; method_5532 causePlayerDamage + m ()Lnet/minecraft/class_1282; method_5523 func_233546_a_ + m ()Lnet/minecraft/class_1297; method_5529 getTrueSource + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5536 causeIndirectMagicDamage + m ()Lnet/minecraft/class_1282; method_5518 setExplosion + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5513 causeThornsDamage + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5520 causeTridentDamage + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1282; method_5511 causeMobDamage + m ()Z method_5527 isMagicDamage + m ()Z method_5534 isFireDamage + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1282; method_5519 causeIndirectDamage + m ()Lnet/minecraft/class_1282; method_5505 setDamageAllowedInCreativeMode + m (Lnet/minecraft/class_1927;)Lnet/minecraft/class_1282; method_5531 causeExplosionDamage + m ()Z method_5533 isProjectile + m ()Lnet/minecraft/class_1282; method_5507 setFireDamage + m ()Z method_5535 isExplosion + m ()Z method_5538 canHarmInCreative + m ()Lnet/minecraft/class_1282; method_5515 setMagicDamage + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1282; method_21748 causeBeeStingDamage + m (Lnet/minecraft/class_3855;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5521 func_233547_a_ + m (Lnet/minecraft/class_1671;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_24907 func_233548_a_ + m ()Z method_5537 isUnblockable + f Lnet/minecraft/class_1282; field_5852 STARVE + f Z field_5851 magicDamage + f Lnet/minecraft/class_1282; field_5868 FALL + f Ljava/lang/String; field_5841 damageType + f Lnet/minecraft/class_1282; field_5846 MAGIC + f Z field_5857 isDamageAllowedInCreativeMode + f Lnet/minecraft/class_1282; field_5849 OUT_OF_WORLD + f F field_5845 hungerDamage + f Lnet/minecraft/class_1282; field_5865 ANVIL + f Lnet/minecraft/class_1282; field_5856 DRAGON_BREATH + f Z field_5839 damageIsAbsolute + f Lnet/minecraft/class_1282; field_16992 SWEET_BERRY_BUSH + f Lnet/minecraft/class_1282; field_5863 LAVA + f Z field_5853 projectile + f Lnet/minecraft/class_1282; field_5861 LIGHTNING_BOLT + f Lnet/minecraft/class_1282; field_5855 IN_WALL + f Lnet/minecraft/class_1282; field_5859 DROWN + f Lnet/minecraft/class_1282; field_5843 FLY_INTO_WALL + f Lnet/minecraft/class_1282; field_5848 CACTUS + f Z field_5862 explosion + f Z field_5840 isUnblockable + f Lnet/minecraft/class_1282; field_5869 GENERIC + f Lnet/minecraft/class_1282; field_5850 WITHER + f Lnet/minecraft/class_1282; field_5842 DRYOUT + f Lnet/minecraft/class_1282; field_5847 FALLING_BLOCK + f Lnet/minecraft/class_1282; field_5867 IN_FIRE + f Z field_5866 fireDamage + f Lnet/minecraft/class_1282; field_5854 ON_FIRE + f Z field_5864 difficultyScaled + f Lnet/minecraft/class_1282; field_5844 CRAMMING + f Lnet/minecraft/class_1282; field_5858 HOT_FLOOR +c net/minecraft/class_1283 net/minecraft/util/CombatTracker + m ()V method_5539 reset + m ()Lnet/minecraft/class_1309; method_5540 getFighter + m (Lnet/minecraft/class_1282;FF)V method_5547 trackDamage + m ()Lnet/minecraft/class_1281; method_5544 getBestCombatEntry + m ()I method_5546 getCombatDuration + m ()Lnet/minecraft/class_1309; method_5541 getBestAttacker + m ()V method_5542 calculateFallSuffix + m (Lnet/minecraft/class_1281;)Ljava/lang/String; method_5543 getFallSuffix + m ()V method_5545 resetFallSuffix + m ()Lnet/minecraft/class_2561; method_5548 getDeathMessage + f I field_5873 combatEndTime + f Lnet/minecraft/class_1309; field_5877 fighter + f I field_5875 combatStartTime + f Z field_5872 takingDamage + f I field_5876 lastDamageTime + f Ljava/lang/String; field_5871 fallSuffix + f Z field_5874 inCombat + f Ljava/util/List; field_5870 combatEntries +c net/minecraft/class_1284 net/minecraft/util/IndirectEntityDamageSource + f Lnet/minecraft/class_1297; field_5878 indirectEntity +c net/minecraft/class_1285 net/minecraft/util/EntityDamageSource + m ()Lnet/minecraft/class_1285; method_5550 setIsThornsDamage + m ()Z method_5549 getIsThornsDamage + f Z field_5880 isThornsDamage + f Lnet/minecraft/class_1297; field_5879 damageSourceEntity +c net/minecraft/class_1288 net/minecraft/potion/AbsorptionEffect +c net/minecraft/class_1290 net/minecraft/potion/HealthBoostEffect +c net/minecraft/class_1287 net/minecraft/potion/AttackDamageEffect + f D field_5881 bonusPerLevel +c net/minecraft/class_1291 net/minecraft/potion/Effect + m ()I method_5556 getLiquidColor + m ()Ljava/util/Map; method_5565 getAttributeModifierMap + m (II)Z method_5552 isReady + m ()Ljava/lang/String; method_5567 getName + m (I)Lnet/minecraft/class_1291; method_5569 get + m ()Z method_5561 isInstant + m ()Ljava/lang/String; method_5559 getOrCreateDescriptionId + m ()Lnet/minecraft/class_2561; method_5560 getDisplayName + m ()Z method_5573 isBeneficial + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_5131;I)V method_5562 removeAttributesModifiersFromEntity + m ()Lnet/minecraft/class_4081; method_18792 getEffectType + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;Lnet/minecraft/class_1309;ID)V method_5564 affectEntity + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_5131;I)V method_5555 applyAttributesModifiersToEntity + m (Lnet/minecraft/class_1309;I)V method_5572 performEffect + m (ILnet/minecraft/class_1322;)D method_5563 getAttributeModifierAmount + m (Lnet/minecraft/class_1291;)I method_5554 getId + m (Lnet/minecraft/class_1320;Ljava/lang/String;DLnet/minecraft/class_1322$class_1323;)Lnet/minecraft/class_1291; method_5566 addAttributesModifier + f Ljava/util/Map; field_5885 attributeModifierMap + f Lnet/minecraft/class_4081; field_18270 type + f Ljava/lang/String; field_5883 name + f I field_5886 liquidColor +c net/minecraft/class_1289 net/minecraft/potion/InstantEffect +c net/minecraft/class_1293 net/minecraft/potion/EffectInstance + m ()Z method_5581 doesShowParticles + m ()I hashCode hashCode + m ()Z method_5591 isAmbient + m ()Lnet/minecraft/class_1291; method_5579 getPotion + m ()Z method_5592 isShowIcon + m (Lnet/minecraft/class_1309;Ljava/lang/Runnable;)Z method_5585 tick + m ()Ljava/lang/String; method_5586 getEffectName + m (Lnet/minecraft/class_2487;)V method_24277 writeInternal + m (Lnet/minecraft/class_1293;)I method_5587 compareTo + m ()I method_5588 deincrementDuration + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1293; method_5583 read + m ()Z method_5593 getIsPotionDurationMax + m (Z)V method_5580 setPotionDurationMax + m (Lnet/minecraft/class_1309;)V method_5589 performEffect + m (Lnet/minecraft/class_1293;)V method_24276 func_230117_a_ + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_5582 write + m (Lnet/minecraft/class_1291;Lnet/minecraft/class_2487;)Lnet/minecraft/class_1293; method_24275 readInternal + m (Lnet/minecraft/class_1293;)Z method_5590 combine + m ()I method_5584 getDuration + m (Ljava/lang/Object;)I compareTo compareTo + m ()I method_5578 getAmplifier + f Z field_5889 showIcon + f Z field_5890 showParticles + f Z field_5892 ambient + f Lnet/minecraft/class_1291; field_5896 potion + f Z field_5891 isPotionDurationMax + f Lnet/minecraft/class_1293; field_21830 hiddenEffects + f I field_5893 amplifier + f Lorg/apache/logging/log4j/Logger; field_5897 LOGGER + f I field_5895 duration + f Z field_5894 isSplashPotion +c net/minecraft/class_4081 net/minecraft/potion/EffectType + m ()[Lnet/minecraft/class_4081; values values + m ()Lnet/minecraft/class_124; method_18793 getColor + m (Ljava/lang/String;)Lnet/minecraft/class_4081; valueOf valueOf + f Lnet/minecraft/class_4081; field_18272 HARMFUL + f Lnet/minecraft/class_4081; field_18273 NEUTRAL + f [Lnet/minecraft/class_4081; field_18275 $VALUES + f Lnet/minecraft/class_124; field_18274 color + f Lnet/minecraft/class_4081; field_18271 BENEFICIAL +c net/minecraft/class_1294 net/minecraft/potion/Effects + m (ILjava/lang/String;Lnet/minecraft/class_1291;)Lnet/minecraft/class_1291; method_5594 register + f Lnet/minecraft/class_1291; field_5920 WITHER + f Lnet/minecraft/class_1291; field_5914 HEALTH_BOOST + f Lnet/minecraft/class_1291; field_18980 HERO_OF_THE_VILLAGE + f Lnet/minecraft/class_1291; field_5903 HUNGER + f Lnet/minecraft/class_1291; field_5911 WEAKNESS + f Lnet/minecraft/class_1291; field_5899 POISON + f Lnet/minecraft/class_1291; field_5902 LEVITATION + f Lnet/minecraft/class_1291; field_5901 MINING_FATIGUE + f Lnet/minecraft/class_1291; field_5926 LUCK + f Lnet/minecraft/class_1291; field_5910 STRENGTH + f Lnet/minecraft/class_1291; field_5898 ABSORPTION + f Lnet/minecraft/class_1291; field_5904 SPEED + f Lnet/minecraft/class_1291; field_5922 SATURATION + f Lnet/minecraft/class_1291; field_5909 SLOWNESS + f Lnet/minecraft/class_1291; field_5912 GLOWING + f Lnet/minecraft/class_1291; field_5917 HASTE + f Lnet/minecraft/class_1291; field_5916 NAUSEA + f Lnet/minecraft/class_1291; field_5924 REGENERATION + f Lnet/minecraft/class_1291; field_5907 RESISTANCE + f Lnet/minecraft/class_1291; field_5915 INSTANT_HEALTH + f Lnet/minecraft/class_1291; field_5921 INSTANT_DAMAGE + f Lnet/minecraft/class_1291; field_5913 JUMP_BOOST + f Lnet/minecraft/class_1291; field_5905 INVISIBILITY + f Lnet/minecraft/class_1291; field_5900 DOLPHINS_GRACE + f Lnet/minecraft/class_1291; field_5919 BLINDNESS + f Lnet/minecraft/class_1291; field_16595 BAD_OMEN + f Lnet/minecraft/class_1291; field_5925 NIGHT_VISION + f Lnet/minecraft/class_1291; field_5908 UNLUCK + f Lnet/minecraft/class_1291; field_5918 FIRE_RESISTANCE + f Lnet/minecraft/class_1291; field_5906 SLOW_FALLING + f Lnet/minecraft/class_1291; field_5923 WATER_BREATHING + f Lnet/minecraft/class_1291; field_5927 CONDUIT_POWER +c net/minecraft/class_1294$1 net/minecraft/potion/Effects$1 +c net/minecraft/class_1292 net/minecraft/potion/EffectUtils + m (Lnet/minecraft/class_1309;)I method_5575 getMiningSpeedup + m (Lnet/minecraft/class_1309;)Z method_5576 hasMiningSpeedup + m (Lnet/minecraft/class_1309;)Z method_5574 canBreatheUnderwater + m (Lnet/minecraft/class_1293;F)Ljava/lang/String; method_5577 getPotionDurationString +c net/minecraft/class_1296 net/minecraft/entity/AgeableEntity + m ()I method_5618 getGrowingAge + m ()V method_5619 onGrowingAdult + m ()Z method_19184 canBreed + m (I)V method_5614 setGrowingAge + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1296; method_5613 func_241840_a + m (IZ)V method_5620 ageUp + m (I)V method_5615 addGrowth + f Lnet/minecraft/class_2940; field_5949 BABY + f I field_5950 growingAge + f I field_5947 forcedAgeTimer + f I field_5948 forcedAge +c net/minecraft/class_1296$class_4697 net/minecraft/entity/AgeableEntity$AgeableData + m ()F method_22437 getBabySpawnProbability + m ()Z method_22436 canBabySpawn + m ()V method_22435 incrementIndexInGroup + m ()I method_22432 getIndexInGroup + f I field_20684 indexInGroup + f F field_20686 babySpawnProbability + f Z field_20685 canBabySpawn +c net/minecraft/class_1297 net/minecraft/entity/Entity + m (DDD)V method_5762 addVelocity + m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_1542; method_5706 entityDropItem + m (Lnet/minecraft/class_2561;)V method_5665 setCustomName + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_243;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_5664 applyPlayerInteraction + m ()Z method_5696 doesEntityNotTriggerPressurePlate + m (Lnet/minecraft/class_2350$class_2351;D)D method_18797 calculatePistonDeltas + m ()Lnet/minecraft/class_238; method_5830 getRenderBoundingBox + m ()Ljava/util/UUID; method_5667 getUniqueID + m ()Z method_5798 isInBubbleColumn + m (D)D method_23323 getPosYHeight + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_18794 handlePistonMovement + m ()Lnet/minecraft/class_243; method_18798 getMotion + m ()Z method_5740 hasNoGravity + m (Lnet/minecraft/class_243;)V method_30228 func_242277_a + m ()Z method_7325 isSpectator + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1297;)V method_24202 func_233565_a_ + m ()Z method_5771 isInLava + m (Lnet/minecraft/class_1297;)V method_5644 applyOrientationToEntity + m (Z)V method_5684 setInvulnerable + m ()Lnet/minecraft/class_3414; method_5737 getSwimSound + m (Lnet/minecraft/class_2487;)Z method_5662 writeUnlessPassenger + m (D)D method_23322 getPosXRandom + m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_5454; method_30329 func_241829_a + m ()I method_5850 getMaxFallHeight + m ()V method_5773 tick + m (Lnet/minecraft/class_243;FF)Lnet/minecraft/class_243; method_18795 getAbsoluteMotion + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Z)Ljava/util/Optional; method_30330 func_241830_a + m ()Z method_24828 isOnGround + m ()Lnet/minecraft/class_238; method_5829 getBoundingBox + m ()I method_5691 getPermissionLevel + m (Lnet/minecraft/class_3414;FF)V method_5783 playSound + m (Z)V method_5764 onEnterBubbleColumn + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_243;Lnet/minecraft/class_238;Lnet/minecraft/class_1937;Lnet/minecraft/class_3726;Lnet/minecraft/class_3538;)Lnet/minecraft/class_243; method_20736 collideBoundingBoxHeuristically + m (FI)V method_5683 setHeadRotation + m ()V method_5839 handleRunningEffect + m (Lnet/minecraft/class_1297;)Z method_5804 startRiding + m (D)D method_23316 getPosXWidth + m ()Z method_5778 isInRain + m (Ljava/lang/String;)Z method_5738 removeTag + m (Lnet/minecraft/class_238;)V method_5857 setBoundingBox + m ()V method_5768 onKillCommand + m ()Z method_5822 isNonBoss + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1542; method_5775 entityDropItem + m (DDD)V method_5750 setVelocity + m ()V method_5825 outOfWorld + m (Lnet/minecraft/class_4050;)V method_18380 setPose + m ()V method_5879 performHurtAnimation + m (Lnet/minecraft/class_1297;)Z method_5860 canBeRidden + m (Lnet/minecraft/class_2338;FF)V method_5725 moveToBlockPosAndAngles + m (Lnet/minecraft/class_1657;)V method_5694 onCollideWithPlayer + m ()Z method_27298 shouldSpawnRunningEffects + m ()Lnet/minecraft/class_1299; method_5864 getType + m (Lnet/minecraft/class_1297;ILnet/minecraft/class_1282;)V method_5716 awardKillScore + m (Z)V method_5700 onEnterBubbleColumnWithAirAbove + m ()Lnet/minecraft/class_3414; method_5672 getHighspeedSplashSound + m ()V method_30076 setDead + m ()V method_5646 extinguish + m (Lnet/minecraft/class_243;Lnet/minecraft/class_238;Lnet/minecraft/class_3538;)Lnet/minecraft/class_243; method_20737 collideBoundingBox + m ()Z method_29240 func_233578_ci_ + m (Lnet/minecraft/class_2487;)V method_5651 read + m (D)V method_5840 setRenderDistanceWeight + m (Lnet/minecraft/class_238;)Z method_5629 isLiquidPresentInAABB + m (DDD)Z method_5727 isInRangeToRender3d + m ()Lnet/minecraft/class_1297; method_5642 getControllingPassenger + m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_5673 setItemStackToSlot + m (Lnet/minecraft/class_3494;)Z method_5777 areEyesInFluid + m (Lnet/minecraft/class_270;)Z method_5645 isOnScoreboardTeam + m ()Lnet/minecraft/class_2561; method_23315 getProfessionName + m ()Lnet/minecraft/class_3419; method_5634 getSoundCategory + m (Lnet/minecraft/class_4050;)Z method_20233 isPoseClear + m (DDDFFIZ)V method_5759 setPositionAndRotationDirect + m (Lnet/minecraft/class_4050;)Lnet/minecraft/class_238; method_20343 getBoundingBox + m (FF)Z method_5747 onLivingFall + m (F)Lnet/minecraft/class_243; method_5828 getLook + m ()Lnet/minecraft/class_3414; method_5625 getSplashSound + m (Lnet/minecraft/class_1297;)V method_5627 addPassenger + m (Z)V method_5648 setInvisible + m ()I method_5628 getEntityId + m (I)Z method_5687 hasPermissionLevel + m ()Lnet/minecraft/class_2350; method_5735 getHorizontalFacing + m ()Z method_5754 func_233577_ch_ + m (Lnet/minecraft/class_4050;)Lnet/minecraft/class_4048; method_18377 getSize + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_5856 func_233573_b_ + m (F)V method_5636 setRenderYawOffset + m (D)Z method_5640 isInRangeToRenderDist + m ()I method_5806 getPortalCooldown + m (DDD)V method_20620 teleportKeepLoaded + m ()Z method_5624 isSprinting + m (Lnet/minecraft/class_243;)D method_5707 getDistanceSq + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_1297;)Z method_26823 func_233561_a_ + m ()Z method_5655 isInvulnerable + m (Lnet/minecraft/class_1297;)V method_5793 removePassenger + m ()V method_5746 doWaterSplashEffect + m ()Ljava/lang/Iterable; method_5877 getHeldEquipment + m ()V method_18379 updatePortal + m ()Lnet/minecraft/class_2680; method_25936 getStateBelow + m ()F method_17682 getHeight + m ()I method_20802 getFireTimer + m (F)Lnet/minecraft/class_243; method_18864 getUpVector + m ()Z method_5701 isSilent + m ()Lnet/minecraft/class_243; method_29919 func_241205_ce_ + m (Lnet/minecraft/class_1799;F)Lnet/minecraft/class_1542; method_5699 entityDropItem + m (Lnet/minecraft/class_3494;)D method_5861 func_233571_b_ + m (Lnet/minecraft/class_2487;)V method_5749 readAdditional + m (Z)V method_5834 setGlowing + m (Lnet/minecraft/class_1297;D)Z method_24516 isEntityInRange + m (FF)V method_5710 setRotation + m ()Lnet/minecraft/class_2350; method_5755 getAdjustedHorizontalFacing + m ()Z method_5732 canBeAttackedWithItem + m ()V method_5730 setOnFireFromLava + m (F)V method_5847 setRotationYawHead + m (I)V method_5855 setAir + m ()Ljava/lang/String; method_5766 func_242283_n + m ()Z method_5833 ignoreItemEntityData + m (DDD)V method_5632 pushOutOfBlocks + m (Ljava/lang/String;)Z method_5780 addTag + m ()Z method_18276 isCrouching + m ()Ljava/lang/String; method_5845 getCachedUniqueIdString + m ()V method_5713 updateWaterState + m (Lnet/minecraft/class_1935;I)Lnet/minecraft/class_1542; method_5870 entityDropItem + m ()Ljava/lang/Iterable; method_5661 getArmorInventoryList + m (Z)V method_5796 setSwimming + m (Lnet/minecraft/class_1297;)Z method_5818 canFitPassenger + m (Lnet/minecraft/class_243;)V method_18799 setMotion + m ()Lnet/minecraft/class_2338; method_23312 getOnPosition + m ()Lnet/minecraft/class_2168; method_5671 getCommandSource + m ()Lnet/minecraft/class_270; method_5781 getTeam + m ()Z method_5776 makeFlySound + m (Lnet/minecraft/class_1282;F)Z method_5643 attackEntityFrom + m (Lnet/minecraft/class_4050;)F method_18381 getEyeHeight + m ()Ljava/lang/String; method_5689 func_242284_o + m (I)Z method_5795 getFlag + m ()V method_18382 recalculateSize + m (Ljava/lang/Object;)Z equals equals + m ()Z method_5659 isImmuneToExplosions + m (Lnet/minecraft/class_243;)D method_17996 horizontalMag + m ()F method_17681 getWidth + m ()Ljava/lang/String; method_5820 getScoreboardName + m ()V method_5842 updateRidden + m ()Z method_21752 isDescending + m (B)V method_5711 handleStatusUpdate + m (Z)V method_5728 setSprinting + m ()Z method_5876 func_233566_aG_ + m ()Ljava/lang/Iterable; method_5743 getEquipmentAndArmor + m ()Lnet/minecraft/class_1297; method_5668 getLowestRidingEntity + m (DDD)V method_23327 setRawPosition + m ()Lnet/minecraft/class_243; method_5720 getLookVec + m (Lnet/minecraft/class_1297;)Z method_5722 isOnSameTeam + m ()V method_5693 registerData + m ()I method_5741 getMaxInPortalTime + m ()F method_5791 getRotationYawHead + m ()Lnet/minecraft/class_2338; method_24515 getPosition + m ()V method_5852 doBlockCollisions + m (Lnet/minecraft/class_3494;D)Z method_5692 handleFluidAcceleration + m ()V method_18375 detach + m ()Z method_30230 func_242280_ah + m (Lnet/minecraft/class_1313;Lnet/minecraft/class_243;)V method_5784 move + m (DDD)V method_18800 setMotion + m ()Z method_30948 func_241845_aY + m ()Ljava/lang/String; method_5761 func_233581_o_ + m ()D method_29241 func_233579_cu_ + m ()Z method_21751 isDiscrete + m (Z)V method_5660 setSneaking + m (Lnet/minecraft/class_243;)V method_29495 moveForced + m ()Lnet/minecraft/class_4050; method_18376 getPose + m ()V method_5790 updateSwimming + m (Lnet/minecraft/class_1297;)Z method_5779 isEntityEqual + m (Lnet/minecraft/class_1927;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;F)F method_5774 getExplosionResistance + m ()Ljava/util/Collection; method_5736 getRecursivePassengers + m ()Ljava/util/List; method_5685 getPassengers + m (Lnet/minecraft/class_2487;)V method_5652 writeAdditional + m (F)Lnet/minecraft/class_243; method_5836 getEyePosition + m ()Lnet/minecraft/class_2945; method_5841 getDataManager + m ()Z method_5733 getAlwaysRenderNameTagForRender + m (Lnet/minecraft/class_2183$class_2184;Lnet/minecraft/class_243;)V method_5702 lookAt + m (DD)V method_5872 rotateTowards + m ()Ljava/util/Set; method_5752 getTags + m ()Z method_21750 isSuppressingBounce + m (F)Lnet/minecraft/class_243; method_30950 func_242282_l + m ()Ljava/lang/String; method_5653 getEntityString + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_30332 func_242276_a + m ()V method_30229 func_242279_ag + m (DDF)Lnet/minecraft/class_243; method_24826 func_233559_a_ + m (Lnet/minecraft/class_1297;)Z method_5698 hitByEntity + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_5874 func_241847_a + m ()Ljava/lang/String; method_5849 func_233582_p_ + m ()V method_5982 checkDespawn + m ()V method_5760 decrementTimeUntilPortal + m (Ljava/lang/Class;)Z method_5703 isPassenger + m ()Z method_5757 isEntityInsideOpaqueBlock + m ()Lnet/minecraft/class_243; method_30227 func_242274_V + m ()Lnet/minecraft/class_243; method_5663 getForward + m ()Z method_5869 canSwim + m ()Lnet/minecraft/class_1297; method_5854 getRidingEntity + m (Z)V method_5875 setNoGravity + m (I)V method_20803 forceFireTicks + m (DDD)V method_24203 moveForced + m ()I method_22861 getTeamColor + m (Lnet/minecraft/class_2680;)Z method_29494 func_233572_b_ + m ()I method_5669 getAir + m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_5459$class_5460;)Lnet/minecraft/class_243; method_30633 func_241839_a + m ()Z method_5807 isCustomNameVisible + m ()F method_5871 getCollisionBorderSize + m ()Z method_21749 isSteppingCarefully + m ()D method_23321 getPosZ + m (F)Lnet/minecraft/class_243; method_31166 func_241842_k + m ()Lnet/minecraft/class_241; method_5802 getPitchYaw + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_5813 func_211516_a_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_30022 func_241338_a_ + m (Lnet/minecraft/class_1297;)V method_5719 copyLocationAndAnglesFrom + m ()I method_5676 getFireImmuneTicks + m ()Z method_5805 isAlive + m ()Ljava/util/stream/Stream; method_24204 getSelfAndPassengers + m ()Lnet/minecraft/class_2338; method_23314 getPositionUnderneath + m (Z)V method_5803 setSilent + m ()Z method_5816 isInWaterOrBubbleColumn + m ()Lnet/minecraft/class_2596; method_18002 createSpawnPacket + m (ILnet/minecraft/class_1799;)Z method_5758 replaceItemInInventory + m (Lnet/minecraft/class_2680;)V method_5622 onInsideBlock + m ()V method_5670 baseTick + m (DDD)V method_5859 setPositionAndUpdate + m (I)V method_5639 setFire + m ()I method_5748 getMaxAir + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_5712 playStepSound + m ()Z method_5715 isSneaking + m (Lnet/minecraft/class_3222;)Z method_5680 isSpectatedByPlayer + m ()D method_23320 getPosYEye + m (Lnet/minecraft/class_1297;)F method_5739 getDistance + m ()D method_5824 getRenderDistanceWeight + m (Lnet/minecraft/class_1297;)V method_5878 copyDataFromOld + m ()V method_29239 dismount + m (Ljava/util/UUID;)V method_5826 setUniqueId + m ()Z method_5675 isPushedByWater + m (F)F method_5705 getYaw + m ()V method_5792 resetPositionToBB + m ()F method_5751 getEyeHeight + m ()Z method_5637 isInWaterRainOrBubbleColumn + m (Lnet/minecraft/class_1657;)Z method_5756 isInvisibleToPlayer + m ()Lnet/minecraft/class_243; method_19538 getPositionVec + m ()V method_23311 recenterBoundingBox + m (I)V method_5838 setEntityId + m ()Z method_5638 shouldSetPosAfterLoading + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_30632 func_242278_a + m ()Z method_5788 canBeRiddenInWater + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_17835 getAllowedMovement + m ()D method_23319 getPosYRandom + m (Lnet/minecraft/class_4050;Lnet/minecraft/class_4048;)F method_18378 getEyeHeight + m ()Lnet/minecraft/class_1937; method_5770 getEntityWorld + m (Lnet/minecraft/class_3222;)V method_5837 addTrackingPlayer + m (Z)V method_24830 setOnGround + m (Lnet/minecraft/class_1297;)Z method_5626 isPassenger + m ()V method_5772 removePassengers + m (Lnet/minecraft/class_1297;)D method_5858 getDistanceSq + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5459$class_5460;)Lnet/minecraft/class_5454; method_30331 func_242275_a + m (DDD)V method_18003 setPacketCoordinates + m (Lnet/minecraft/class_243;Lnet/minecraft/class_238;Lnet/minecraft/class_4538;Lnet/minecraft/class_3726;Lnet/minecraft/class_3538;)Lnet/minecraft/class_243; method_17833 getAllowedMovement + m ()Z method_5767 isInvisible + m ()Z method_5810 canBePushed + m (DDD)Z method_5654 isOffsetPositionInLiquid + m ()Lnet/minecraft/server/MinecraftServer; method_5682 getServer + m (Lnet/minecraft/class_3222;)V method_5742 removeTrackingPlayer + m ()Z method_5782 isBeingRidden + m (Lnet/minecraft/class_1297;)V method_5697 applyEntityCollision + m ()Z method_5787 canPassengerSteer + m ()Z method_5721 isWet + m (Lnet/minecraft/class_2415;)F method_5763 getMirroredYaw + m (F)F method_5695 getPitch + m ()F method_5867 determineNextStepDistance + m ()Z method_5709 isLiving + m (DDDFF)V method_5808 setLocationAndAngles + m (Lnet/minecraft/class_1297;)Z method_5794 isRidingSameEntity + m (Lnet/minecraft/class_2470;)F method_5832 getRotatedYaw + m ()Lnet/minecraft/class_3619; method_5657 getPushReaction + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1313;)Lnet/minecraft/class_243; method_18796 maybeBackOffFromEdge + m ()D method_23318 getPosY + m (FF)Lnet/minecraft/class_243; method_18863 calculateUpVector + m ()Z method_5851 isGlowing + m ()V method_5650 remove + m (Lnet/minecraft/class_1297;)Z method_5821 isRidingOrBeingRiddenBy + m (F)Lnet/minecraft/class_243; method_30951 getLeashPosition + m ()Z method_5863 canBeCollidedWith + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_5647 writeWithoutTypeId + m (IZ)V method_5729 setFlag + m ()I hashCode hashCode + m (DDD)V method_5814 setPosition + m (Lnet/minecraft/class_1927;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;F)Z method_5853 canExplosionDestroyBlock + m (DDDFF)V method_5641 setPositionAndRotation + m ()Z method_5799 isInWater + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297$class_4738;)V method_24201 positionRider + m (FF)Lnet/minecraft/class_243; method_5631 getVectorForRotation + m ()Z method_5765 isPassenger + m ([D)Lnet/minecraft/class_2499; method_5846 newDoubleNBTList + m ()D method_23317 getPosX + m ()D method_5621 getMountedYOffset + m (Lnet/minecraft/class_2940;)V method_5674 notifyDataManagerChange + m (FLnet/minecraft/class_243;)V method_5724 moveRelative + m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_1297; method_5731 changeDimension + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;)V method_5723 applyEnchantments + m (DFZ)Lnet/minecraft/class_239; method_5745 pick + m ()Z method_20448 isVisuallySwimming + m (Lnet/minecraft/class_1937;)V method_5866 setWorld + m ()V method_5823 preparePlayerToSpawn + m ()F method_23326 getSpeedFactor + m (ZLjava/util/Set;)V method_5868 getRecursivePassengers + m (DDD)V method_22862 forceSetPosition + m ()V method_5785 markVelocityChanged + m (F)F method_5801 playFlySound + m (Lnet/minecraft/class_2338;)V method_5717 setPortal + m ()Z method_5817 isOnePlayerRiding + m ()Z method_5753 isImmuneToFire + m (D)D method_23325 getPosZRandom + m ()V method_5630 updateEyesInWater + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_243; method_24829 func_230268_c_ + m (Lnet/minecraft/class_2487;)Z method_5786 writeUnlessRemoved + m (F)V method_5734 playSwimSound + m (Lnet/minecraft/class_1282;)Z method_5679 isInvulnerableTo + m ()Z method_5809 isBurning + m (DDD)D method_5649 getDistanceSq + m (Lnet/minecraft/class_1297;)Z method_30949 canCollide + m ()D method_5678 getYOffset + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_243;)V method_5844 setMotionMultiplier + m ()Z method_20232 isActualySwimming + m ()F method_23313 getJumpFactor + m (DDD)V method_30634 func_242281_f + m ()Lnet/minecraft/class_2568; method_5769 getHoverEvent + m (Z)V method_5880 setCustomNameVisible + m ()Z method_5862 canRenderOnFire + m (DZLnet/minecraft/class_2680;Lnet/minecraft/class_2338;)V method_5623 updateFallState + m ()V method_5848 stopRiding + m ()Z method_5658 canTriggerWalking + m (D)D method_23324 getPosZWidth + m ()F method_5718 getBrightness + m ()Z method_5681 isSwimming + m (Lnet/minecraft/class_129;)V method_5819 fillCrashReport + m (Lnet/minecraft/class_1297;)V method_5865 updatePassenger + m (Lnet/minecraft/class_1297;Z)Z method_5873 startRiding + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1538;)V method_5800 func_241841_a + m ([F)Lnet/minecraft/class_2499; method_5726 newFloatNBTList + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_5688 processInitialInteract + f F field_5982 prevRotationYaw + f Lnet/minecraft/class_2940; field_5975 CUSTOM_NAME_VISIBLE + f Z field_25154 isLoaded + f Lnet/minecraft/class_243; field_22467 positionVec + f D field_6038 lastTickPosX + f Z field_5958 glowing + f F field_5965 rotationPitch + f Lnet/minecraft/class_2940; field_5962 SILENT + f Ljava/lang/String; field_5981 cachedUniqueIdString + f F field_6017 fallDistance + f F field_6031 rotationYaw + f Lnet/minecraft/class_2338; field_5991 field_242271_ac + f Lnet/minecraft/class_2940; field_5995 NO_GRAVITY + f Z field_5953 firstUpdate + f Lnet/minecraft/class_3494; field_25599 field_241335_O_ + f F field_5994 distanceWalkedOnStepModified + f Lnet/minecraft/class_238; field_6005 boundingBox + f I field_6008 hurtResistantTime + f D field_5969 prevPosZ + f F field_5973 distanceWalkedModified + f Lnet/minecraft/class_2940; field_5990 FLAGS + f Lnet/minecraft/class_2945; field_6011 dataManager + f Ljava/util/UUID; field_6021 entityUniqueID + f Lnet/minecraft/class_243; field_17046 motionMultiplier + f D field_6036 prevPosY + f Lnet/minecraft/class_1297; field_6034 ridingEntity + f F field_18066 eyeHeight + f Lnet/minecraft/class_243; field_18276 motion + f Lnet/minecraft/class_2940; field_18064 POSE + f I field_5972 portalCounter + f Z field_5963 inPortal + f Ljava/util/Random; field_5974 rand + f Z field_6000 eyesInWater + f D field_6014 prevPosX + f Ljava/util/List; field_6030 EMPTY_EQUIPMENT + f Ljava/util/List; field_5979 passengers + f J field_5996 pistonDeltasGameTime + f Z field_5983 forceSpawn + f Z field_5957 inWater + f F field_6039 prevDistanceWalkedModified + f I field_5956 fire + f F field_6022 nextFlap + f I field_5951 rideCooldown + f Z field_5988 removed + f Z field_23807 preventEntitySpawning + f I field_6012 ticksExisted + f Z field_6007 isAirBorne + f Lnet/minecraft/class_2338; field_22468 position + f F field_6003 nextStepDistance + f Lorg/apache/logging/log4j/Logger; field_5955 LOGGER + f Z field_5985 ignoreFrustumCheck + f Z field_6037 velocityChanged + f F field_5968 entityCollisionReduction + f I field_5986 entityId + f Z field_5992 collidedVertically + f I field_5980 chunkCoordZ + f [D field_5993 pistonDeltas + f Z field_5966 isPositionDirty + f Z field_5960 noClip + f Z field_5976 collidedHorizontally + f I field_5959 chunkCoordY + f F field_6013 stepHeight + f Lnet/minecraft/class_1937; field_6002 world + f Lnet/minecraft/class_1299; field_5961 type + f Ljava/util/Set; field_6029 tags + f Z field_6009 invulnerable + f Z field_5952 onGround + f I field_6024 chunkCoordX + f Lit/unimi/dsi/fastutil/objects/Object2DoubleMap; field_5964 eyesFluidLevel + f D field_5989 lastTickPosZ + f Z field_6016 addedToChunk + f D field_5999 renderDistanceWeight + f Lnet/minecraft/class_4048; field_18065 size + f Lnet/minecraft/class_243; field_25750 field_242272_av + f Ljava/util/concurrent/atomic/AtomicInteger; field_5978 NEXT_ENTITY_ID + f Lnet/minecraft/class_2940; field_6032 AIR + f F field_6004 prevRotationPitch + f Lnet/minecraft/class_238; field_6025 ZERO_AABB + f I field_6018 field_242273_aw + f D field_5971 lastTickPosY + f Lnet/minecraft/class_2940; field_6027 CUSTOM_NAME +c net/minecraft/class_1297$class_4738 net/minecraft/entity/Entity$IMoveCallback + m (Lnet/minecraft/class_1297;DDD)V accept accept +c net/minecraft/class_1297$1 net/minecraft/entity/Entity$1 + f [I field_6041 field_210287_a + f [I field_6040 field_210288_b +c net/minecraft/class_1295 net/minecraft/entity/AreaEffectCloudEntity + m ()Z method_5611 shouldIgnoreRadius + m (F)V method_5596 setRadiusPerTick + m (I)V method_5602 setColor + m (Z)V method_5598 setIgnoreRadius + m (F)V method_5609 setRadiusOnUse + m (Lnet/minecraft/class_1293;)V method_5610 addEffect + m (F)V method_5603 setRadius + m ()F method_5599 getRadius + m ()V method_5597 updateFixedColor + m (Lnet/minecraft/class_1842;)V method_5612 setPotion + m (Lnet/minecraft/class_2394;)V method_5608 setParticleData + m (I)V method_5604 setDuration + m (I)V method_5595 setWaitTime + m ()Lnet/minecraft/class_1309; method_5601 getOwner + m ()I method_5605 getDuration + m ()Lnet/minecraft/class_2394; method_5600 getParticleData + m ()I method_5606 getColor + m (Lnet/minecraft/class_1309;)V method_5607 setOwner + f Ljava/util/UUID; field_5940 ownerUniqueId + f Lnet/minecraft/class_2940; field_5936 COLOR + f Lnet/minecraft/class_2940; field_5944 IGNORE_RADIUS + f Ljava/util/List; field_5934 effects + f Ljava/util/Map; field_5942 reapplicationDelayMap + f Lnet/minecraft/class_2940; field_5931 PARTICLE + f Lnet/minecraft/class_1309; field_5943 owner + f I field_5937 reapplicationDelay + f I field_5941 waitTime + f I field_5939 duration + f Lnet/minecraft/class_2940; field_5938 RADIUS + f Z field_5928 colorSet + f Lnet/minecraft/class_1842; field_5933 potion + f Lorg/apache/logging/log4j/Logger; field_5935 PRIVATE_LOGGER + f F field_5930 radiusPerTick + f F field_5929 radiusOnUse + f I field_5932 durationOnUse +c net/minecraft/class_4048 net/minecraft/entity/EntitySize + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_238; method_30757 func_242286_a + m (F)Lnet/minecraft/class_4048; method_18383 scale + m (DDD)Lnet/minecraft/class_238; method_30231 func_242285_a + m (FF)Lnet/minecraft/class_4048; method_19539 scale + m (FF)Lnet/minecraft/class_4048; method_18385 fixed + m (FF)Lnet/minecraft/class_4048; method_18384 flexible + f Z field_18069 fixed + f F field_18067 width + f F field_18068 height +c net/minecraft/class_1301 net/minecraft/util/EntityPredicates + m (Lnet/minecraft/class_1297;)Z method_5907 func_233587_c_ + m (DDDD)Ljava/util/function/Predicate; method_5909 withinRange + m (Lnet/minecraft/class_1297;)Z method_5910 func_200824_d + m (Lnet/minecraft/class_1297;)Z method_24517 func_200818_c + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_270;Lnet/minecraft/class_270$class_271;Lnet/minecraft/class_1297;)Z method_5915 func_233586_a_ + m (Lnet/minecraft/class_1297;)Ljava/util/function/Predicate; method_5911 pushableBy + m (Lnet/minecraft/class_1297;)Z method_5914 func_200822_e + m (Lnet/minecraft/class_1297;)Z method_5908 func_200821_f + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Z method_5906 func_233585_a_ + m (DDDDLnet/minecraft/class_1297;)Z method_5912 func_233584_a_ + m (Lnet/minecraft/class_1297;)Ljava/util/function/Predicate; method_5913 notRiding + f Ljava/util/function/Predicate; field_6152 HAS_INVENTORY + f Ljava/util/function/Predicate; field_6153 IS_STANDALONE + f Ljava/util/function/Predicate; field_6157 IS_LIVING_ALIVE + f Ljava/util/function/Predicate; field_6154 IS_ALIVE + f Ljava/util/function/Predicate; field_6155 NOT_SPECTATING + f Ljava/util/function/Predicate; field_22280 CAN_HOSTILE_AI_TARGET + f Ljava/util/function/Predicate; field_6156 CAN_AI_TARGET +c net/minecraft/class_1301$class_1302 net/minecraft/util/EntityPredicates$ArmoredMob + m (Lnet/minecraft/class_1297;)Z method_5916 test + m (Ljava/lang/Object;)Z test test + f Lnet/minecraft/class_1799; field_6158 armor +c net/minecraft/class_1304 net/minecraft/inventory/EquipmentSlotType + m ()Ljava/lang/String; method_5923 getName + m ()I method_5926 getSlotIndex + m ()I method_5927 getIndex + m (Ljava/lang/String;)Lnet/minecraft/class_1304; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_1304; method_5924 fromString + m (Lnet/minecraft/class_1304$class_1305;I)Lnet/minecraft/class_1304; method_20234 fromSlotTypeAndIndex + m ()[Lnet/minecraft/class_1304; values values + m ()Lnet/minecraft/class_1304$class_1305; method_5925 getSlotType + f Lnet/minecraft/class_1304$class_1305; field_6170 slotType + f Lnet/minecraft/class_1304; field_6174 CHEST + f Lnet/minecraft/class_1304; field_6169 HEAD + f Ljava/lang/String; field_6175 name + f I field_6167 slotIndex + f Lnet/minecraft/class_1304; field_6171 OFFHAND + f Lnet/minecraft/class_1304; field_6166 FEET + f I field_6168 index + f Lnet/minecraft/class_1304; field_6172 LEGS + f [Lnet/minecraft/class_1304; field_6176 $VALUES + f Lnet/minecraft/class_1304; field_6173 MAINHAND +c net/minecraft/class_1304$class_1305 net/minecraft/inventory/EquipmentSlotType$Group + m (Ljava/lang/String;)Lnet/minecraft/class_1304$class_1305; valueOf valueOf + m ()[Lnet/minecraft/class_1304$class_1305; values values + f Lnet/minecraft/class_1304$class_1305; field_6177 HAND + f Lnet/minecraft/class_1304$class_1305; field_6178 ARMOR + f [Lnet/minecraft/class_1304$class_1305; field_6179 $VALUES +c net/minecraft/class_1299 net/minecraft/entity/EntityType + m (Lnet/minecraft/class_2487;)V method_17847 func_233601_b_ + m ()Lnet/minecraft/class_4048; method_18386 getSize + m ()Z method_20814 func_225437_d + m ()Ljava/lang/String; method_5882 getTranslationKey + m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_5883 create + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1299;)Lnet/minecraft/class_1297; method_17846 func_220337_b_ + m (Ljava/lang/String;Lnet/minecraft/class_1299$class_1300;)Lnet/minecraft/class_1299; method_5895 register + m ()Lnet/minecraft/class_2960; method_16351 getLootTable + m ()Z method_18389 shouldSendVelocityUpdates + m ()Z method_19946 isImmuneToFire + m ()Ljava/lang/String; toString toString + m ()F method_17686 getHeight + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2487;Lnet/minecraft/class_2561;Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_3730;ZZ)Lnet/minecraft/class_1297; method_5888 create + m (Lnet/minecraft/class_2487;)Ljava/util/Optional; method_17684 readEntityType + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;ZLnet/minecraft/class_238;)D method_5884 func_208051_a + m ()F method_17685 getWidth + m ()Z method_5896 isSummonable + m (Lnet/minecraft/class_2680;)Z method_29496 func_233597_a_ + m ()I method_18388 getUpdateFrequency + m ()Lnet/minecraft/class_2561; method_5897 getName + m (Ljava/lang/String;)Ljava/util/Optional; method_5898 byKey + m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_2960; method_5890 getKey + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1937;)Ljava/util/Optional; method_5892 loadEntityUnchecked + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1937;Ljava/util/function/Function;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_17843 func_220346_a_ + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1297;Lnet/minecraft/class_2487;)V method_5881 applyItemNBT + m ()Z method_5893 isSerializable + m (Lnet/minecraft/class_1297;)Z method_26824 func_233596_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_3730;ZZ)Lnet/minecraft/class_1297; method_5894 spawn + m ()I method_18387 func_233602_m_ + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1937;Ljava/util/function/Function;)Lnet/minecraft/class_1297; method_17842 loadEntityAndExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2487;Lnet/minecraft/class_2561;Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_3730;ZZ)Lnet/minecraft/class_1297; method_5899 spawn + m (ILnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_5889 create + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1297;)V method_17839 func_220329_a_ + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1299;)Lnet/minecraft/class_1297; method_5886 create + m ()Lnet/minecraft/class_1311; method_5891 getClassification + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1937;)Ljava/util/Optional; method_17848 loadEntity + m (Lnet/minecraft/class_3494;)Z method_20210 isContained + m (DDD)Lnet/minecraft/class_238; method_17683 getBoundingBoxWithSizeApplied + f Lnet/minecraft/class_1299; field_6110 END_CRYSTAL + f Lnet/minecraft/class_1299; field_6109 SHULKER + f Lnet/minecraft/class_1299; field_6071 HUSK + f Lnet/minecraft/class_1299; field_6064 EXPERIENCE_BOTTLE + f Lnet/minecraft/class_1299; field_6095 GIANT + f Lnet/minecraft/class_1299; field_6043 ITEM_FRAME + f Lnet/minecraft/class_1299; field_6108 BAT + f Lnet/minecraft/class_1299; field_6120 PAINTING + f Lnet/minecraft/class_1299; field_6075 SKELETON_HORSE + f Lnet/minecraft/class_1299; field_6111 TROPICAL_FISH + f Lnet/minecraft/class_1299; field_6090 EVOKER + f Z field_6072 summonable + f Lnet/minecraft/class_2561; field_6092 name + f Lnet/minecraft/class_1299; field_6076 WITHER_SKELETON + f Lnet/minecraft/class_1299; field_16281 CAT + f I field_24086 defaultUpdateInterval + f Lnet/minecraft/class_1299; field_6093 PIG + f Lnet/minecraft/class_1299; field_6074 LLAMA + f Lnet/minecraft/class_1299; field_6117 VINDICATOR + f Lnet/minecraft/class_1299; field_6133 FIREWORK_ROCKET + f Lnet/minecraft/class_1299; field_6134 RAVAGER + f Lnet/minecraft/class_1299; field_6103 FISHING_BOBBER + f Lnet/minecraft/class_1299; field_6142 SPAWNER_MINECART + f Lnet/minecraft/class_1299; field_6051 ZOMBIE + f Lnet/minecraft/class_1299; field_6126 CHEST_MINECART + f Lnet/minecraft/class_1299; field_6135 SPECTRAL_ARROW + f Lnet/minecraft/class_1311; field_6094 classification + f Lnet/minecraft/class_1299; field_6085 COW + f Lnet/minecraft/class_1299; field_6042 POLAR_BEAR + f Lnet/minecraft/class_1299; field_6086 ELDER_GUARDIAN + f Lnet/minecraft/class_1299; field_6139 HORSE + f Lnet/minecraft/class_1299; field_6115 SHEEP + f Lnet/minecraft/class_1299; field_6082 ENDER_PEARL + f Lnet/minecraft/class_1299; field_6047 SNOW_GOLEM + f Lnet/minecraft/class_1299; field_6122 ARROW + f Lnet/minecraft/class_1299; field_6077 VILLAGER + f Lnet/minecraft/class_1299; field_6081 OCELOT + f Lnet/minecraft/class_1299; field_6128 ENDERMITE + f Lnet/minecraft/class_1299; field_6137 SKELETON + f Lnet/minecraft/class_1299; field_17714 TRADER_LLAMA + f Lnet/minecraft/class_1299; field_6052 ITEM + f Z field_6056 serializable + f Lnet/minecraft/class_4048; field_18070 size + f Lnet/minecraft/class_1299; field_6119 WITHER + f Lnet/minecraft/class_1299; field_6096 MINECART + f I field_24085 defaultTrackingRange + f Lnet/minecraft/class_1299; field_6078 PHANTOM + f Lnet/minecraft/class_1299; field_6061 EYE_OF_ENDER + f Lnet/minecraft/class_1299; field_6112 LIGHTNING_BOLT + f Lnet/minecraft/class_1299; field_6121 BOAT + f Lnet/minecraft/class_1299; field_6140 RABBIT + f Lnet/minecraft/class_1299; field_6098 STRAY + f Lnet/minecraft/class_1299; field_6058 HOPPER_MINECART + f Lnet/minecraft/class_1299; field_6067 DONKEY + f Lorg/apache/logging/log4j/Logger; field_6088 LOGGER + f Lnet/minecraft/class_1299; field_6097 PLAYER + f Lnet/minecraft/class_1299; field_6070 COD + f Lnet/minecraft/class_1299; field_23696 ZOGLIN + f Lnet/minecraft/class_1299; field_6105 PILLAGER + f Lnet/minecraft/class_1299; field_6089 FALLING_BLOCK + f Lnet/minecraft/class_1299; field_6068 SNOWBALL + f Lnet/minecraft/class_1299; field_6125 SILVERFISH + f Lnet/minecraft/class_1299; field_6144 EGG + f Lnet/minecraft/class_1299; field_6053 TNT_MINECART + f Lnet/minecraft/class_1299; field_6123 DROWNED + f Lnet/minecraft/class_1299; field_6073 SALMON + f Lnet/minecraft/class_1299; field_21973 HOGLIN + f Lnet/minecraft/class_1299; field_6059 VEX + f Lnet/minecraft/class_1299; field_6131 ARMOR_STAND + f Lnet/minecraft/class_1299; field_6044 EXPERIENCE_ORB + f Lnet/minecraft/class_1299; field_6049 SMALL_FIREBALL + f Lnet/minecraft/class_1299; field_6138 LEASH_KNOT + f Lnet/minecraft/class_1299; field_6091 ENDERMAN + f Lnet/minecraft/class_1299; field_6143 MOOSHROOM + f Lnet/minecraft/class_1299; field_6147 IRON_GOLEM + f Lnet/minecraft/class_1299; field_6127 TRIDENT + f Lcom/google/common/collect/ImmutableSet; field_25355 field_233593_bg_ + f Lnet/minecraft/class_1299; field_25751 field_242287_aj + f Lnet/minecraft/class_1299; field_6102 MAGMA_CUBE + f Lnet/minecraft/class_1299; field_6145 WITCH + f Lnet/minecraft/class_1299; field_6099 BLAZE + f Lnet/minecraft/class_1299; field_6104 PARROT + f Lnet/minecraft/class_1299$class_4049; field_6101 factory + f Lnet/minecraft/class_1299; field_6087 DOLPHIN + f Lnet/minecraft/class_1299; field_6062 PUFFERFISH + f Lnet/minecraft/class_2960; field_16526 lootTable + f Lnet/minecraft/class_1299; field_6114 SQUID + f Lnet/minecraft/class_1299; field_6107 GHAST + f Lnet/minecraft/class_1299; field_6055 WOLF + f Lnet/minecraft/class_1299; field_6132 CHICKEN + f Z field_19423 field_225438_be + f Lnet/minecraft/class_1299; field_6050 ZOMBIFIED_PIGLIN + f Lnet/minecraft/class_1299; field_6080 FURNACE_MINECART + f Lnet/minecraft/class_1299; field_6045 POTION + f Lnet/minecraft/class_1299; field_6116 ENDER_DRAGON + f Lnet/minecraft/class_1299; field_6100 SHULKER_BULLET + f Lnet/minecraft/class_1299; field_6129 DRAGON_FIREBALL + f Lnet/minecraft/class_1299; field_23214 STRIDER + f Lnet/minecraft/class_1299; field_6118 GUARDIAN + f Lnet/minecraft/class_1299; field_6146 PANDA + f Lnet/minecraft/class_1299; field_6060 EVOKER_FANGS + f Lnet/minecraft/class_1299; field_6113 TURTLE + f Lnet/minecraft/class_1299; field_6066 FIREBALL + f Lnet/minecraft/class_1299; field_6065 ILLUSIONER + f Lnet/minecraft/class_1299; field_6069 SLIME + f Lnet/minecraft/class_1299; field_6083 AREA_EFFECT_CLOUD + f Lnet/minecraft/class_1299; field_6057 MULE + f Lnet/minecraft/class_1299; field_6124 LLAMA_SPIT + f Lnet/minecraft/class_1299; field_6054 ZOMBIE_VILLAGER + f Lnet/minecraft/class_1299; field_6084 CAVE_SPIDER + f Ljava/lang/String; field_6106 translationKey + f Lnet/minecraft/class_1299; field_22281 PIGLIN + f Lnet/minecraft/class_1299; field_20346 BEE + f Lnet/minecraft/class_1299; field_17713 WANDERING_TRADER + f Lnet/minecraft/class_1299; field_6046 CREEPER + f Lnet/minecraft/class_1299; field_6048 ZOMBIE_HORSE + f Lnet/minecraft/class_1299; field_17943 FOX + f Lnet/minecraft/class_1299; field_6079 SPIDER + f Lnet/minecraft/class_1299; field_6063 TNT + f Z field_18981 immuneToFire + f Lnet/minecraft/class_1299; field_6130 WITHER_SKULL + f Lnet/minecraft/class_1299; field_6136 COMMAND_BLOCK_MINECART +c net/minecraft/class_1299$class_1300 net/minecraft/entity/EntityType$Builder + m ()Lnet/minecraft/class_1299$class_1300; method_20815 func_225435_d + m (Ljava/lang/String;)Lnet/minecraft/class_1299; method_5905 build + m ([Lnet/minecraft/class_2248;)Lnet/minecraft/class_1299$class_1300; method_29497 func_233607_a_ + m (Lnet/minecraft/class_1299$class_4049;Lnet/minecraft/class_1311;)Lnet/minecraft/class_1299$class_1300; method_5903 create + m (I)Lnet/minecraft/class_1299$class_1300; method_27299 trackingRange + m (I)Lnet/minecraft/class_1299$class_1300; method_27300 func_233608_b_ + m ()Lnet/minecraft/class_1299$class_1300; method_5901 disableSummoning + m (FF)Lnet/minecraft/class_1299$class_1300; method_17687 size + m ()Lnet/minecraft/class_1299$class_1300; method_19947 immuneToFire + m ()Lnet/minecraft/class_1299$class_1300; method_5904 disableSerialization + m (Lnet/minecraft/class_1311;)Lnet/minecraft/class_1299$class_1300; method_5902 create + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_5900 func_220323_a + f Z field_18982 immuneToFire + f Lcom/google/common/collect/ImmutableSet; field_25356 field_233603_c_ + f Z field_6151 serializable + f Z field_6150 summonable + f I field_24088 field_233605_i_ + f Lnet/minecraft/class_1299$class_4049; field_6148 factory + f I field_24087 trackingRange + f Lnet/minecraft/class_4048; field_18071 size + f Lnet/minecraft/class_1311; field_6149 classification + f Z field_19424 field_225436_f +c net/minecraft/class_1299$class_4049 net/minecraft/entity/EntityType$IFactory + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; create create +c net/minecraft/class_1307 net/minecraft/entity/FlyingEntity +c net/minecraft/class_1303 net/minecraft/entity/item/ExperienceOrbEntity + m ()V method_5921 applyFloatMotion + m ()I method_5920 getTextureByXP + m (I)I method_5918 getXPSplit + m (I)I method_5922 durabilityToXp + m ()I method_5919 getXpValue + m (I)I method_5917 xpToDurability + f Lnet/minecraft/class_1657; field_6162 closestPlayer + f I field_6165 xpColor + f I field_6160 xpTargetColor + f I field_6159 xpValue + f I field_6163 delayBeforeCanPickup + f I field_6161 xpOrbHealth + f I field_6164 xpOrbAge +c net/minecraft/class_4980 net/minecraft/entity/BoostHelper + m (Lnet/minecraft/class_2487;)V method_26312 setSaddledFromNBT + m ()V method_26307 updateData + m (Lnet/minecraft/class_2487;)V method_26309 setSaddledToNBT + m (Ljava/util/Random;)Z method_26308 boost + m ()Z method_26311 getSaddled + m (Z)V method_26310 setSaddledFromBoolean + f I field_23217 boostTimeRaw + f Lnet/minecraft/class_2945; field_23218 manager + f I field_23216 field_233611_b_ + f Lnet/minecraft/class_2940; field_23219 boostTime + f Z field_23215 saddledRaw + f Lnet/minecraft/class_2940; field_23220 saddled +c net/minecraft/class_1306 net/minecraft/util/HandSide + m ()[Lnet/minecraft/class_1306; values values + m ()Lnet/minecraft/class_1306; method_5928 opposite + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;)Lnet/minecraft/class_1306; valueOf valueOf + m ()Lnet/minecraft/class_2561; method_27301 getHandName + f [Lnet/minecraft/class_1306; field_6180 $VALUES + f Lnet/minecraft/class_1306; field_6183 RIGHT + f Lnet/minecraft/class_2561; field_6181 handName + f Lnet/minecraft/class_1306; field_6182 LEFT +c net/minecraft/class_1538 net/minecraft/entity/effect/LightningBoltEntity + m (Lnet/minecraft/class_3222;)V method_6961 setCaster + m (Z)V method_29498 setEffectOnly + m (I)V method_6960 igniteBlocks + f J field_7186 boltVertex + f I field_7185 lightningState + f Lnet/minecraft/class_3222; field_7182 caster + f Z field_7184 effectOnly + f I field_7183 boltLivingTime +c net/minecraft/class_4981 net/minecraft/entity/IRideable + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4980;Lnet/minecraft/class_243;)Z method_26313 ride + m ()Z method_6577 boost + m ()F method_26316 getMountedSpeed + m (Lnet/minecraft/class_243;)V method_26315 travelTowards +c net/minecraft/class_1308 net/minecraft/entity/MobEntity + m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)Z method_5935 isItemStackInSlot + m (ZZ)V method_5932 clearLeashed + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_5955 shouldExchangeEquipment + m ()Z method_18410 detachHome + m (Lnet/minecraft/class_1799;)Z method_24523 func_233665_g_ + m (FLnet/minecraft/class_1304;)V method_30758 func_242289_a + m (Lnet/minecraft/class_7;F)V method_5941 setPathPriority + m (F)V method_30759 func_241844_w + m ()V method_5966 playAmbientSound + m ()Z method_18411 isWithinHomeDistanceCurrentPosition + m ()V method_5958 updateAITasks + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20636 canSpawnOn + m ()Z method_5987 isAIDisabled + m (Z)V method_5937 setLeftHanded + m ()Lnet/minecraft/class_1413; method_5985 getEntitySenses + m ()Z method_5956 canBeSteered + m (Lnet/minecraft/class_7;)Z method_29244 func_233660_b_ + m ()V method_5983 eatGrassBonus + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_26320 func_233659_b_ + m (Lnet/minecraft/class_1304;F)V method_5946 setDropChance + m ()Z method_5947 isNoDespawnRequired + m ()V method_18409 sendDebugPackets + m (I)V method_18810 setVehicleEntityId + m (Lnet/minecraft/class_1657;)Z method_5931 canBeLeashedTo + m (Z)V method_5977 setNoAI + m ()Lnet/minecraft/class_1334; method_5993 getJumpController + m ()Z method_5972 isInDaylight + m (Ljava/lang/String;)Z method_26321 func_233662_c_ + m (Lnet/minecraft/class_1297;FF)V method_5951 faceEntity + m (Lnet/minecraft/class_1266;)V method_5964 setEquipmentBasedOnDifficulty + m ()V method_5959 registerGoals + m ()Lnet/minecraft/class_1335; method_5962 getMoveHelper + m (F)V method_5938 setMoveStrafing + m ()I method_5945 getMaxSpawnedInChunk + m ()Lnet/minecraft/class_5132$class_5133; method_26828 func_233666_p_ + m ()Lnet/minecraft/class_1309; method_5968 getAttackTarget + m (Lnet/minecraft/class_2338;I)V method_18408 setHomePosAndDistance + m ()V method_20417 updateMovementGoalFlags + m (Lnet/minecraft/class_1304;)V method_25939 func_233663_d_ + m (Lnet/minecraft/class_1811;)Z method_25938 func_230280_a_ + m ()Lnet/minecraft/class_1408; method_5942 getNavigator + m ()Z method_5936 canPickUpLoot + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_5992 func_230254_b_ + m (Lnet/minecraft/class_7;)F method_5944 getPathPriority + m ()Z method_23734 isDespawnPeaceful + m (Lnet/minecraft/class_1799;)Z method_20820 func_230293_i_ + m (D)Z method_5974 canDespawn + m (I)Z method_5969 isMaxGroupSize + m ()I method_5970 getTalkInterval + m (Ljava/lang/String;)Z method_26322 func_233664_d_ + m (Z)V method_5952 setCanPickUpLoot + m ()Z method_6510 isAggressive + m ()F method_18413 getMaximumHomeDistance + m (Lnet/minecraft/class_1266;)V method_5984 setEnchantmentBasedOnDifficulty + m ()I method_20240 getFaceRotSpeed + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1308;)V method_24522 func_233658_b_ + m (F)V method_5976 setMoveVertical + m (Z)V method_7217 setChild + m ()Lnet/minecraft/class_2338; method_18412 getHomePosition + m ()Z method_5934 getLeashed + m (Lnet/minecraft/class_1309;)V method_5980 setAttackTarget + m (Lnet/minecraft/class_1799;)Z method_5939 canEquipItem + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1304; method_5953 getSlotForItemStack + m (Lnet/minecraft/class_4538;)Z method_5957 isNotColliding + m ()V method_5990 spawnExplosionParticle + m ()Z method_26323 func_230286_q_ + m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1408; method_5965 createNavigator + m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_24834 func_233657_b_ + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_1266;Lnet/minecraft/class_3730;Lnet/minecraft/class_1315;Lnet/minecraft/class_2487;)Lnet/minecraft/class_1315; method_5943 onInitialSpawn + m ()Lnet/minecraft/class_1330; method_5963 createBodyController + m (Lnet/minecraft/class_1304;)F method_5929 getDropChance + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_29506 func_233661_c_ + m (Lnet/minecraft/class_1297;Z)V method_5954 setLeashHolder + m ()Z method_17326 preventDespawn + m ()Lnet/minecraft/class_3414; method_5994 getAmbientSound + m (Lnet/minecraft/class_1304;I)Lnet/minecraft/class_1792; method_5948 getArmorByChance + m (FFF)F method_5960 updateRotation + m ()I method_5978 getVerticalFaceSpeed + m ()Lnet/minecraft/class_2960; method_5991 getLootTable + m ()Z method_5961 isLeftHanded + m (Lnet/minecraft/class_1542;)V method_5949 updateEquipmentIfNeeded + m ()V method_5971 enablePersistence + m ()V method_5940 recreateLeash + m ()I method_5986 getHorizontalFaceSpeed + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1308;)V method_18249 onChildSpawnFromEgg + m ()Lnet/minecraft/class_1333; method_5988 getLookController + m ()V method_5995 updateLeashedState + m (F)V method_5930 setMoveForward + m (Lnet/minecraft/class_2338;)Z method_18407 isWithinHomeDistanceFromPosition + m ()V method_5975 func_241821_eG + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_24521 func_233655_a_ + m (Lnet/minecraft/class_1299;Z)Lnet/minecraft/class_1308; method_29243 func_233656_b_ + m (Z)V method_19540 setAggroed + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;)Z method_5979 canSpawn + m ()Lnet/minecraft/class_1297; method_5933 getLeashHolder + f Z field_6200 persistenceRequired + f Lnet/minecraft/class_2371; field_6205 inventoryArmor + f Lnet/minecraft/class_1355; field_6185 targetSelector + f F field_18075 maximumHomeDistance + f Lnet/minecraft/class_1408; field_6189 navigator + f J field_6184 deathLootTableSeed + f Lnet/minecraft/class_1334; field_6204 jumpController + f Lnet/minecraft/class_2338; field_18074 homePosition + f Z field_6203 canPickUpLoot + f Lnet/minecraft/class_1355; field_6201 goalSelector + f Lnet/minecraft/class_1297; field_6202 leashHolder + f [F field_6186 inventoryArmorDropChances + f Lnet/minecraft/class_1309; field_6199 attackTarget + f Lnet/minecraft/class_1335; field_6207 moveController + f I field_6194 experienceValue + f Lnet/minecraft/class_1413; field_6190 senses + f Lnet/minecraft/class_2960; field_6198 deathLootTable + f Lnet/minecraft/class_1330; field_6188 bodyController + f [F field_6187 inventoryHandsDropChances + f Lnet/minecraft/class_2940; field_6193 AI_FLAGS + f Ljava/util/Map; field_6196 mapPathPriority + f I field_18279 leashHolderID + f I field_6191 livingSoundTime + f Lnet/minecraft/class_1333; field_6206 lookController + f Lnet/minecraft/class_2371; field_6195 inventoryHands + f Lnet/minecraft/class_2487; field_6192 leashNBTTag +c net/minecraft/class_1308$1 net/minecraft/entity/MobEntity$1 + f [I field_6208 field_188475_b + f [I field_6209 field_188474_a +c net/minecraft/class_1309 net/minecraft/entity/LivingEntity + m (Lnet/minecraft/class_1309;)V method_6060 constructKnockBackVector + m (Lnet/minecraft/class_1282;)V method_16080 spawnDrops + m (Lnet/minecraft/class_1282;F)F method_6132 applyArmorCalculations + m (Lnet/minecraft/class_1320;)D method_26825 getAttributeValue + m ()Ljava/util/Collection; method_6026 getActivePotionEffects + m (Lnet/minecraft/class_238;Lnet/minecraft/class_238;)V method_6035 updateSpinAttack + m (Lnet/minecraft/class_1799;I)V method_6037 addItemParticles + m ()V method_18400 wakeUp + m ()F method_6017 getSoundPitch + m ()Z method_6115 isHandActive + m (Lnet/minecraft/class_2680;)Z method_29500 func_230295_b_ + m ()V method_16078 dropInventory + m (F)F method_6055 getSwingProgress + m ()Lnet/minecraft/class_1310; method_6046 getCreatureAttribute + m (FF)I method_23329 calculateFallDamage + m ()Lnet/minecraft/class_1306; method_6068 getPrimaryHand + m ()Ljava/util/Map; method_30129 func_241354_r_ + m ()Z method_6128 isElytraFlying + m (Ljava/util/function/Predicate;)Z method_24520 func_233634_a_ + m ()Z method_27303 func_230296_cM_ + m (Lnet/minecraft/class_1799;)V method_6116 playEquipSound + m ()Ljava/util/Random; method_6051 getRNG + m (F)V method_6125 setAIMoveSpeed + m (I)V method_16826 setIdleTime + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_18866 onFoodEaten + m (Ljava/util/List;Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_30120 func_241341_a_ + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_243; method_20477 func_241349_g_ + m ()V method_6053 updateElytra + m ()Z method_6113 isSleeping + m (Ljava/util/Map;)V method_30121 func_241342_a_ + m ()Z method_27071 func_230282_cS_ + m ()Lnet/minecraft/class_4095; method_18868 getBrain + m (F)V method_6025 heal + m (Lnet/minecraft/class_2338;)V method_18404 func_241348_f_ + m ()Z method_29503 isWaterSensitive + m ()V method_6069 resetPotionEffectMetadata + m (Lnet/minecraft/class_1320;)D method_26826 getBaseAttributeValue + m (Lnet/minecraft/class_1282;F)F method_6036 applyPotionDamageCalculations + m ()Lcom/google/common/collect/ImmutableList; method_24831 getAvailablePoses + m (Lnet/minecraft/class_1309;)V method_23733 createWitherRose + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2338;)V method_18393 func_213338_a_ + m (Lnet/minecraft/class_1304;)Z method_6084 hasItemInSlot + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_18801 handleOnClimbable + m ()Z method_21754 hasStoppedClimbing + m ()V method_25937 addSprintingEffect + m ()I method_6096 getTotalArmorValue + m (Lnet/minecraft/class_3611;)Z method_26319 func_230285_a_ + m (F)F method_6024 getSwimAnimation + m ()F method_6107 getSoundVolume + m (F)V method_6056 damageShield + m (Lnet/minecraft/class_1291;)Z method_6059 isPotionActive + m ()Z method_6054 canDropLoot + m (Lnet/minecraft/class_4050;Lnet/minecraft/class_4048;)F method_18394 getStandingEyeHeight + m (Lnet/minecraft/class_1299;)Z method_5973 canAttack + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28305 func_233636_a_ + m ()V method_6050 updatePotionEffects + m (Lnet/minecraft/class_2338;)V method_18402 setBedPosition + m ()Lnet/minecraft/class_2960; method_5989 getLootTableResourceLocation + m (Lnet/minecraft/class_1268;Z)V method_23667 swing + m ()V method_6027 updatePotionMetadata + m (Ljava/util/Map;)V method_30123 func_241344_b_ + m ()F method_6029 getAIMoveSpeed + m ()V method_23328 playFallSound + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4051;)Z method_18391 canAttack + m (Lnet/minecraft/class_1309;)V method_5997 spinAttack + m ()V method_18399 clearBedPosition + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_31079 func_242288_h + m ()Z method_29504 getShouldBeDead + m (Lnet/minecraft/class_2338;Z)V method_6006 setPartying + m ()Z method_6039 isActiveItemStackBlocking + m ()Lnet/minecraft/class_5131; method_6127 getAttributeManager + m ()Z method_27302 getMovementSpeed + m (I)I method_6064 determineNextAir + m ()Lnet/minecraft/class_1282; method_6081 getLastDamageSource + m (Lnet/minecraft/class_1304;)Lnet/minecraft/class_1799; method_30126 getItemInHand + m ()Z method_18406 isInValidBed + m (Lnet/minecraft/class_1293;)V method_6020 onNewPotionEffect + m (I)Lnet/minecraft/class_3414; method_6041 getFallSound + m ()V method_6008 markPotionsDirty + m ()F method_18396 getArmorCoverPercentage + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_18808 findAmmo + m ()V method_6119 updateArmSwingProgress + m ()V method_30128 func_241353_q_ + m (Lnet/minecraft/class_1282;IZ)V method_6099 dropSpecialItems + m (Lnet/minecraft/class_1268;)V method_6104 swingArm + m (Lnet/minecraft/class_243;)V method_6091 travel + m ()I method_6131 getIdleTime + m ()V method_6108 onDeathUpdate + m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_5996 getAttribute + m ()V method_6044 sendEndCombat + m (Lnet/minecraft/class_1304;)V method_20235 sendBreakAnimation + m ()Z method_6094 canBreatheUnderwater + m (Lnet/minecraft/class_2338;)Ljava/lang/Boolean; method_18405 func_241350_h_ + m (Lnet/minecraft/class_1282;F)V method_6105 damageArmor + m (I)I method_6130 decreaseAirSupply + m ()F method_6120 getWaterSlowDown + m ()Lnet/minecraft/class_1268; method_6058 getActiveHand + m (Lnet/minecraft/class_1293;)V method_6129 onFinishedPotionEffect + m ()Lnet/minecraft/class_2350; method_18401 getBedDirection + m (Ljava/util/Collection;)Z method_6089 areAllPotionsAmbient + m ()V method_6021 resetActiveHand + m (IZ)V method_6085 setLivingFlag + m ()F method_6067 getAbsorptionAmount + m (Lnet/minecraft/class_1282;)Z method_6095 checkTotemDeathProtection + m (Lnet/minecraft/class_1297;)D method_18390 getVisibilityMultiplier + m ()V method_30127 swapHands + m ()F method_6032 getHealth + m (Lnet/minecraft/class_1293;Z)V method_6009 onChangedPotionEffect + m (Lnet/minecraft/class_2338;)V method_18403 startSleeping + m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_4095; method_18867 createBrain + m ()V method_6072 updateSwimAnimation + m ()I method_6083 getLastAttackedEntityTime + m (FDD)V method_6005 applyKnockback + m ()I method_21753 getBeeStingCount + m (Lnet/minecraft/class_1297;)V method_6038 func_233628_a_ + m ()Z method_29920 func_241208_cS_ + m ()V method_6093 handleFluidSneak + m (Lnet/minecraft/class_1657;)I method_6110 getExperiencePoints + m ()V method_6000 sendEnterCombat + m (Lnet/minecraft/class_1297;)Z method_6121 attackEntityAsMob + m (Lnet/minecraft/class_1291;)Z method_6016 removePotionEffect + m (DZLnet/minecraft/class_243;)Lnet/minecraft/class_243; method_26317 func_233626_a_ + m (Lnet/minecraft/class_1309;)V method_6015 setRevengeTarget + m ()Ljava/util/Map; method_6088 getActivePotionMap + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;)Z method_24519 func_233632_a_ + m ()Ljava/util/Optional; method_18398 getBedPosition + m ()Z method_6034 isServerWorld + m ()Z method_5999 isEntityUndead + m ()V method_6075 stopActiveHand + m ()I method_6048 getItemInUseMaxCount + m (Lnet/minecraft/class_1293;)Z method_6092 addPotionEffect + m (Lnet/minecraft/class_1282;)Z method_6061 canBlockDamageSource + m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_30122 setArmorInSlot + m ()Lnet/minecraft/class_2680; method_16212 getBlockState + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_3414; method_18807 getDrinkSound + m (Lnet/minecraft/class_1309;)V method_20238 func_233652_i_ + m ()Lnet/minecraft/class_1309; method_6124 getAttackingEntity + m (I)V method_6018 startSpinAttack + m ()Z method_6102 attackable + m (Lnet/minecraft/class_2338;)V method_18392 setSleepingPosition + m (Lnet/minecraft/class_1268;)V method_6019 setActiveHand + m (Lnet/minecraft/class_1268;)Lnet/minecraft/class_1799; method_5998 getHeldItem + m ()I method_6022 getArrowCountInEntity + m ()Z method_22382 shouldTriggerItemUseEffects + m ()Lnet/minecraft/class_1799; method_6030 getActiveItemStack + m ()V method_6043 jump + m (DDDZ)Z method_6082 attemptTeleport + m ()I method_6117 getRevengeTimer + m (Lnet/minecraft/class_1297;)V method_6087 collideWithEntity + m ()F method_17825 getRenderScale + m (Lnet/minecraft/class_1304;)Lnet/minecraft/class_1799; method_30125 getArmorInSlot + m (Lnet/minecraft/class_1282;)V method_6078 onDeath + m ()Lnet/minecraft/class_1283; method_6066 getCombatTracker + m (I)V method_21755 setBeeStingCount + m ()Z method_6123 isSpinAttacking + m (ZLnet/minecraft/class_1282;)Lnet/minecraft/class_47$class_48; method_16079 getLootContextBuilder + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_6077 canGoThroughtTrapDoorOnLadder + m ()I method_6014 getItemInUseCount + m (Lnet/minecraft/class_1293;)Z method_6049 isPotionApplicable + m ()I method_6028 getArmSwingAnimationEnd + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_3414; method_18869 getEatSound + m (Lnet/minecraft/class_1799;)Z method_18397 canPickUpItem + m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_30124 setItemInHand + m (Lnet/minecraft/class_1309;)V method_20239 func_233653_j_ + m ()Lnet/minecraft/class_5132$class_5133; method_26827 registerAttributes + m ()Lnet/minecraft/class_4095$class_5303; method_28306 getBrainCodec + m ()F method_6063 getMaxHealth + m (Lnet/minecraft/class_1309;)Z method_18395 canAttack + m ()Z method_6086 canBeHitWithPotion + m ()V method_29502 func_233642_cO_ + m ()Lnet/minecraft/class_1799; method_6079 getHeldItemOffhand + m (Lnet/minecraft/class_1268;)V method_20236 sendBreakAnimation + m ()Lnet/minecraft/class_1309; method_6065 getRevengeTarget + m ()V method_6076 updateActiveHand + m (Lnet/minecraft/class_4050;)Lnet/minecraft/class_238; method_24833 getPoseAABB + m (Z)V method_6100 setJumping + m (F)F method_18802 getRelevantMoveFactor + m (Lnet/minecraft/class_1282;F)V method_6074 damageEntity + m ()Z method_6109 isChild + m ()F method_6106 getJumpUpwardsMotion + m (Lnet/minecraft/class_1291;)Lnet/minecraft/class_1293; method_6112 getActivePotionEffect + m (Lnet/minecraft/class_1297;I)V method_6103 onItemPickup + m (Lnet/minecraft/class_1309;Z)V method_29242 func_233629_a_ + m (Lnet/minecraft/class_1297;)Z method_6057 canEntityBeSeen + m (F)V method_6073 setAbsorptionAmount + m (I)V method_6097 setArrowCountInEntity + m (Lnet/minecraft/class_3494;)V method_6010 handleFluidJump + m (Lnet/minecraft/class_1542;)V method_29499 triggerItemPickupTrigger + m (Lnet/minecraft/class_1293;)V method_26082 func_233646_e_ + m (Lnet/minecraft/class_1304;)B method_20237 equipmentSlotToEntityState + m (Lnet/minecraft/class_1309;)V method_26084 func_233654_k_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;)V method_18865 applyFoodEffects + m ()Lnet/minecraft/class_1309; method_6052 getLastAttackedEntity + m ()V method_6070 collideWithNearbyEntities + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1799;)V method_6122 setHeldItem + m (Lnet/minecraft/class_1282;)V method_6013 playHurtSound + m (Lnet/minecraft/class_1309;)V method_6090 blockUsingShield + m (Lnet/minecraft/class_1282;Z)V method_16077 dropLoot + m ()Z method_6062 isMovementBlocked + m ()Lnet/minecraft/class_1799; method_6047 getHeldItemMainhand + m ()V method_6040 onItemUseFinish + m ()V method_23883 dropExperience + m (Lnet/minecraft/class_1304;)Lnet/minecraft/class_1799; method_6118 getItemStackFromSlot + m (FF)F method_6031 updateDistance + m (Lnet/minecraft/class_1291;)Lnet/minecraft/class_1293; method_6111 removeActivePotionEffect + m (Lnet/minecraft/class_1657;)V method_29505 func_230246_e_ + m ()Lnet/minecraft/class_3414; method_6002 getDeathSound + m ()V method_29501 func_233641_cN_ + m ()Z method_6012 clearActivePotions + m (Lnet/minecraft/class_243;F)Lnet/minecraft/class_243; method_26318 func_233633_a_ + m ()V method_6007 livingTick + m (Lnet/minecraft/class_1293;)V method_24311 func_233647_f_ + m ()I method_6003 getTicksElytraFlying + m ()Ljava/util/Optional; method_24832 func_233644_dn_ + m ()Z method_6101 isOnLadder + m (Lnet/minecraft/class_1282;)Lnet/minecraft/class_3414; method_6011 getHurtSound + m (Lnet/minecraft/class_1799;)V method_6045 renderBrokenItemStack + m (F)V method_6033 setHealth + m (Lnet/minecraft/class_1799;I)V method_6098 triggerItemUseEffects + m (Lnet/minecraft/class_1792;)Z method_24518 canEquip + m ()Z method_6071 isPlayer + m ()V method_6023 updateEntityActionState + m (Lnet/minecraft/class_1297;)V method_6114 setLastAttackedEntity + m (Lnet/minecraft/class_2338;)V method_6126 frostWalk + f I field_6235 hurtTime + f I field_6261 spinAttackDuration + f F field_6287 landMovementFactor + f D field_6245 interpTargetY + f Lnet/minecraft/class_2940; field_20348 BEE_STING_COUNT + f Lnet/minecraft/class_4095; field_18321 brain + f I field_6232 scoreValue + f I field_6238 recentlyHit + f Lnet/minecraft/class_1282; field_6276 lastDamageSource + f F field_6211 prevLimbSwingAmount + f Lnet/minecraft/class_2940; field_6240 POTION_EFFECTS + f I field_20347 beeStingRemovalCooldown + f I field_6239 ticksElytraFlying + f Ljava/util/UUID; field_23128 SOUL_SPEED_BOOT_ID + f Lnet/minecraft/class_2338; field_6268 prevBlockpos + f Lnet/minecraft/class_1309; field_6274 revengeTarget + f I field_6270 lastAttackedEntityTime + f D field_6224 interpTargetX + f Lnet/minecraft/class_2940; field_18073 BED_POSITION + f F field_6215 unused180 + f I field_6273 ticksSinceLastSwing + f Lnet/minecraft/class_2940; field_6214 HIDE_PARTICLES + f I field_6222 activeItemStackUseCount + f I field_6210 newPosRotationIncrements + f I field_6218 arrowHitTimer + f F field_6251 swingProgress + f Ljava/util/UUID; field_6237 SPRINTING_SPEED_BOOST_ID + f F field_6275 prevMovedDistance + f Ljava/util/Map; field_6280 activePotionsMap + f F field_6250 moveForward + f F field_6281 jumpMovementFactor + f I field_6279 swingProgressInt + f F field_6262 randomUnused1 + f Lnet/minecraft/class_1309; field_6236 lastAttackedEntity + f I field_6230 revengeTimer + f F field_6255 movedDistance + f Lnet/minecraft/class_1283; field_6256 combatTracker + f F field_6229 prevSwingProgress + f F field_6227 moveVertical + f F field_6259 prevRotationYawHead + f I field_6265 interpTicksHead + f F field_6244 randomUnused2 + f F field_6233 onGroundSpeedFactor + f F field_6264 lastSwimAnimation + f D field_6221 interpTargetPitch + f Lnet/minecraft/class_1657; field_6258 attackingPlayer + f Z field_6252 isSwingInProgress + f Lnet/minecraft/class_1322; field_6231 SPRINTING_SPEED_BOOST + f I field_6213 deathTime + f D field_6242 interpTargetHeadYaw + f Z field_6285 potionsNeedUpdate + f F field_6241 rotationYawHead + f I field_6269 maxHurtResistantTime + f F field_6212 moveStrafing + f F field_6217 prevOnGroundSpeedFactor + f F field_6243 swimAnimation + f Lnet/minecraft/class_2940; field_6257 LIVING_FLAGS + f D field_6284 interpTargetYaw + f F field_6220 prevRenderYawOffset + f F field_6271 attackedAtYaw + f F field_6246 absorptionAmount + f Lnet/minecraft/class_5131; field_6260 attributes + f Z field_6282 isJumping + f Lnet/minecraft/class_2371; field_6234 handInventory + f Lnet/minecraft/class_1799; field_6277 activeItemStack + f I field_6278 idleTime + f J field_6226 lastDamageStamp + f F field_6249 limbSwing + f F field_6283 renderYawOffset + f I field_6254 maxHurtTime + f Lnet/minecraft/class_1268; field_6266 swingingHand + f I field_6228 jumpTicks + f Lnet/minecraft/class_2940; field_6219 ARROW_COUNT_IN_ENTITY + f D field_6263 interpTargetZ + f Z field_6272 dead + f F field_6253 lastDamage + f Lnet/minecraft/class_2371; field_6248 armorArray + f Ljava/util/Optional; field_22418 field_233624_bE_ + f Lnet/minecraft/class_2940; field_6247 HEALTH + f F field_6225 limbSwingAmount + f Lnet/minecraft/class_4048; field_18072 SLEEPING_SIZE +c net/minecraft/class_1309$1 net/minecraft/entity/LivingEntity$1 + f [I field_6288 field_188473_a + f [I field_19169 field_220361_b +c net/minecraft/class_3730 net/minecraft/entity/SpawnReason + m (Ljava/lang/String;)Lnet/minecraft/class_3730; valueOf valueOf + m ()[Lnet/minecraft/class_3730; values values + f Lnet/minecraft/class_3730; field_16463 REINFORCEMENT + f Lnet/minecraft/class_3730; field_16461 TRIGGERED + f Lnet/minecraft/class_3730; field_16459 NATURAL + f Lnet/minecraft/class_3730; field_16473 BUCKET + f Lnet/minecraft/class_3730; field_16467 EVENT + f Lnet/minecraft/class_3730; field_16468 CONVERSION + f [Lnet/minecraft/class_3730; field_16464 $VALUES + f Lnet/minecraft/class_3730; field_16466 BREEDING + f Lnet/minecraft/class_3730; field_16527 PATROL + f Lnet/minecraft/class_3730; field_16471 MOB_SUMMONED + f Lnet/minecraft/class_3730; field_16460 JOCKEY + f Lnet/minecraft/class_3730; field_16465 SPAWN_EGG + f Lnet/minecraft/class_3730; field_16472 CHUNK_GENERATION + f Lnet/minecraft/class_3730; field_16469 SPAWNER + f Lnet/minecraft/class_3730; field_16462 COMMAND + f Lnet/minecraft/class_3730; field_16470 DISPENSER + f Lnet/minecraft/class_3730; field_16474 STRUCTURE +c net/minecraft/class_1311 net/minecraft/entity/EntityClassification + m ()Z method_6135 getAnimal + m ()Z method_6136 getPeacefulCreature + m ()I method_27920 getRandomDespawnDistance + m (Ljava/lang/String;)Lnet/minecraft/class_1311; method_28307 getClassificationByName + m ()[Lnet/minecraft/class_1311; values values + m ()I method_27919 getInstantDespawnDistance + m ()I method_6134 getMaxNumberOfCreature + m ()Ljava/lang/String; method_6133 getName + m (Ljava/lang/String;)Lnet/minecraft/class_1311; valueOf valueOf + m (Lnet/minecraft/class_1311;)Lnet/minecraft/class_1311; method_6137 func_220362_a + f Lnet/minecraft/class_1311; field_6294 CREATURE + f Z field_6298 isPeacefulCreature + f Lnet/minecraft/class_1311; field_6303 AMBIENT + f [Lnet/minecraft/class_1311; field_6301 $VALUES + f I field_24462 instantDespawnDistance + f Lnet/minecraft/class_1311; field_6300 WATER_CREATURE + f I field_24461 randomDespawnDistance + f Ljava/lang/String; field_6304 name + f Lnet/minecraft/class_1311; field_6302 MONSTER + f Ljava/util/Map; field_6296 VALUES_MAP + f Lcom/mojang/serialization/Codec; field_24655 CODEC + f I field_6297 maxNumberOfCreature + f Lnet/minecraft/class_1311; field_24460 WATER_AMBIENT + f Lnet/minecraft/class_1311; field_17715 MISC + f Z field_6295 isAnimal +c net/minecraft/class_1313 net/minecraft/entity/MoverType + m (Ljava/lang/String;)Lnet/minecraft/class_1313; valueOf valueOf + m ()[Lnet/minecraft/class_1313; values values + f [Lnet/minecraft/class_1313; field_6307 $VALUES + f Lnet/minecraft/class_1313; field_6309 SHULKER + f Lnet/minecraft/class_1313; field_6308 SELF + f Lnet/minecraft/class_1313; field_6310 PISTON + f Lnet/minecraft/class_1313; field_6305 PLAYER + f Lnet/minecraft/class_1313; field_6306 SHULKER_BOX +c net/minecraft/class_1310 net/minecraft/entity/CreatureAttribute + f Lnet/minecraft/class_1310; field_6293 ARTHROPOD + f Lnet/minecraft/class_1310; field_6289 UNDEAD + f Lnet/minecraft/class_1310; field_6291 ILLAGER + f Lnet/minecraft/class_1310; field_6292 WATER + f Lnet/minecraft/class_1310; field_6290 UNDEFINED +c net/minecraft/class_5354 net/minecraft/entity/IAngerable + m (Lnet/minecraft/class_1657;)V method_29505 func_230246_e_ + m (Lnet/minecraft/class_1309;)V method_5980 setAttackTarget + m (Lnet/minecraft/class_1309;)Z method_29515 func_233680_b_ + m ()Z method_29511 func_233678_J__ + m (Ljava/util/UUID;)V method_29513 setAngerTarget + m ()V method_29509 func_230258_H__ + m (Lnet/minecraft/class_1657;)V method_29516 func_233681_b_ + m (Lnet/minecraft/class_3218;Z)V method_29510 func_241359_a_ + m ()Ljava/util/UUID; method_29508 getAngerTarget + m (Lnet/minecraft/class_2487;)V method_29517 writeAngerNBT + m ()V method_29921 func_241355_J__ + m (Lnet/minecraft/class_1937;)Z method_29923 func_241357_a_ + m ()I method_29507 getAngerTime + m ()V method_29922 func_241356_K__ + m (Lnet/minecraft/class_1309;)V method_6015 setRevengeTarget + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2487;)V method_29512 readAngerNBT + m (I)V method_29514 setAngerTime + m ()Lnet/minecraft/class_1309; method_5968 getAttackTarget +c net/minecraft/class_1314 net/minecraft/entity/CreatureEntity + m (Lnet/minecraft/class_2338;)F method_6149 getBlockPathWeight + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4538;)F method_6144 getBlockPathWeight + m ()D method_6148 followLeashSpeed + m (F)V method_6142 onLeashDistance + m ()Z method_6150 hasPath +c net/minecraft/class_4050 net/minecraft/entity/Pose + m (Ljava/lang/String;)Lnet/minecraft/class_4050; valueOf valueOf + m ()[Lnet/minecraft/class_4050; values values + f Lnet/minecraft/class_4050; field_18080 SPIN_ATTACK + f [Lnet/minecraft/class_4050; field_18083 $VALUES + f Lnet/minecraft/class_4050; field_18082 DYING + f Lnet/minecraft/class_4050; field_18081 CROUCHING + f Lnet/minecraft/class_4050; field_18076 STANDING + f Lnet/minecraft/class_4050; field_18078 SLEEPING + f Lnet/minecraft/class_4050; field_18077 FALL_FLYING + f Lnet/minecraft/class_4050; field_18079 SWIMMING +c net/minecraft/class_1316 net/minecraft/entity/IJumpingMount + m (I)V method_6155 handleStartJump + m ()Z method_6153 canJump + m ()V method_6156 handleStopJump + m (I)V method_6154 setJumpPower +c net/minecraft/class_4094 net/minecraft/entity/merchant/IReputationTracking + m (Lnet/minecraft/class_4151;Lnet/minecraft/class_1297;)V method_18870 updateReputation +c net/minecraft/class_4582 net/minecraft/entity/IChargeableMob + m ()Z method_6872 isCharged +c net/minecraft/class_5147 net/minecraft/entity/IShearable + m (Lnet/minecraft/class_3419;)V method_6636 shear + m ()Z method_27072 isShearable +c net/minecraft/class_5146 net/minecraft/entity/IEquipable + m ()Z method_6765 func_230264_L__ + m (Lnet/minecraft/class_3419;)V method_6576 func_230266_a_ + m ()Z method_6725 isHorseSaddled +c net/minecraft/class_1315 net/minecraft/entity/ILivingEntityData +c net/minecraft/class_1321 net/minecraft/entity/passive/TameableEntity + m (Lnet/minecraft/class_1309;)Z method_6171 isOwner + m ()Ljava/util/UUID; method_6139 getOwnerId + m ()Z method_6172 isEntitySleeping + m ()Lnet/minecraft/class_1309; method_6177 getOwner + m ()Z method_24345 isSitting + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_6178 shouldAttackEntity + m (Z)V method_24346 func_233687_w_ + m (Lnet/minecraft/class_1657;)V method_6170 setTamedBy + m (Z)V method_6179 setSleeping + m (Ljava/util/UUID;)V method_6174 setOwnerId + m (Z)V method_6173 setTamed + m (Z)V method_6180 playTameEffect + m ()V method_6175 setupTamedAI + m ()Z method_6181 isTamed + f Z field_21974 field_233683_bw_ + f Lnet/minecraft/class_2940; field_6322 TAMED + f Lnet/minecraft/class_2940; field_6320 OWNER_UNIQUE_ID +c net/minecraft/class_1317 net/minecraft/entity/EntitySpawnPlacementRegistry + m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_2902$class_2903; method_6160 func_209342_b + m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_1317$class_1319; method_6159 getPlacementType + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20638 canSpawnEntity + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1317$class_1319;Lnet/minecraft/class_2902$class_2903;Lnet/minecraft/class_1317$class_4306;)V method_20637 register + f Ljava/util/Map; field_6313 REGISTRY +c net/minecraft/class_1317$class_1318 net/minecraft/entity/EntitySpawnPlacementRegistry$Entry + m (Lnet/minecraft/class_1317$class_1318;)Lnet/minecraft/class_1317$class_4306; method_20639 func_223512_c + m (Lnet/minecraft/class_1317$class_1318;)Lnet/minecraft/class_2902$class_2903; method_6163 func_209338_b + m (Lnet/minecraft/class_1317$class_1318;)Lnet/minecraft/class_1317$class_1319; method_6164 func_209337_a + f Lnet/minecraft/class_2902$class_2903; field_6314 type + f Lnet/minecraft/class_1317$class_4306; field_19349 placementPredicate + f Lnet/minecraft/class_1317$class_1319; field_6315 placementType +c net/minecraft/class_1317$class_4306 net/minecraft/entity/EntitySpawnPlacementRegistry$IPlacementPredicate + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z test test +c net/minecraft/class_1317$class_1319 net/minecraft/entity/EntitySpawnPlacementRegistry$PlacementType + m ()[Lnet/minecraft/class_1317$class_1319; values values + m (Ljava/lang/String;)Lnet/minecraft/class_1317$class_1319; valueOf valueOf + f Lnet/minecraft/class_1317$class_1319; field_23221 IN_LAVA + f Lnet/minecraft/class_1317$class_1319; field_19350 NO_RESTRICTIONS + f Lnet/minecraft/class_1317$class_1319; field_6318 IN_WATER + f Lnet/minecraft/class_1317$class_1319; field_6317 ON_GROUND + f [Lnet/minecraft/class_1317$class_1319; field_6319 $VALUES +c net/minecraft/class_1320 net/minecraft/entity/ai/attributes/Attribute + m (D)D method_6165 clampValue + m ()D method_6169 getDefaultValue + m (Z)Lnet/minecraft/class_1320; method_26829 setShouldWatch + m ()Z method_6168 getShouldWatch + m ()Ljava/lang/String; method_26830 getAttributeName + f Ljava/lang/String; field_23699 attributeName + f D field_23697 defaultValue + f Z field_23698 shouldWatch +c net/minecraft/class_4095 net/minecraft/entity/ai/brain/Brain + m (Lnet/minecraft/class_4168;)Z method_18874 hasRequiredMemories + m (Ljava/util/Map$Entry;)Lnet/minecraft/class_4095$class_5302; method_28312 func_233707_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_27073 tickSensors + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_19542 tick + m (Lnet/minecraft/class_4140;Lnet/minecraft/class_4141;)Z method_18876 hasMemory + m (Lnet/minecraft/class_4095;)Ljava/util/stream/Stream; method_28308 func_233694_a_ + m (Lnet/minecraft/class_4140;)Ljava/util/Optional; method_18904 getMemory + m ()V method_27075 tickMemories + m (Lnet/minecraft/class_4168;)V method_18880 switchActivity + m ()Ljava/util/List; method_27074 getRunningTasks + m (Lnet/minecraft/class_4140;Ljava/util/Optional;)V method_24535 replaceMemory + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_19545 tickTasks + m ()Lorg/apache/logging/log4j/Logger; method_28314 func_233719_i_ + m ()V method_24536 switchToFallbackActivity + m (Lnet/minecraft/class_4140;Ljava/lang/Object;J)V method_24525 replaceMemory + m (Lnet/minecraft/class_4140;)Z method_18896 hasMemory + m (Ljava/lang/Integer;)Ljava/util/Map; method_18887 func_233703_a_ + m (Lnet/minecraft/class_4168;ILcom/google/common/collect/ImmutableList;Lnet/minecraft/class_4140;)V method_24527 registerActivity + m (Lnet/minecraft/class_4140;Ljava/lang/Object;)Z method_29519 hasMemory + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_4140;Ljava/util/Optional;)V method_28309 func_233695_a_ + m (JJ)V method_18871 updateActivity + m (Lnet/minecraft/class_4168;)V method_24526 switchTo + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_18900 stopAllTasks + m ()Ljava/util/Optional; method_24538 getTemporaryActivity + m (Ljava/lang/Object;Ljava/lang/Object;)Z method_29518 func_233704_a_ + m (Lnet/minecraft/class_4168;)Z method_18906 hasActivity + m (Lnet/minecraft/class_4168;)V method_24537 removeUnassociatedMemories + m (ILcom/google/common/collect/ImmutableList;)Lcom/google/common/collect/ImmutableList; method_24524 getTaskPriorityList + m (Lnet/minecraft/class_4168;)Ljava/util/Set; method_18910 func_233717_g_ + m (Ljava/util/Collection;Ljava/util/Collection;)Lnet/minecraft/class_4095$class_5303; method_28311 createCodec + m (Lnet/minecraft/class_4168;Lcom/google/common/collect/ImmutableList;)V method_18881 registerActivity + m (Lnet/minecraft/class_4140;Ljava/lang/Object;)V method_18878 setMemory + m (Ljava/util/Collection;Ljava/util/Collection;)Lcom/mojang/serialization/Codec; method_28313 getBrainCodec + m (Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/DataResult; method_28310 encode + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_18891 startTasks + m (Lnet/minecraft/class_4168;Lcom/google/common/collect/ImmutableList;Ljava/util/Set;)V method_24529 registerActivity + m (Lnet/minecraft/class_4140;Ljava/util/Optional;)V method_18879 setMemory + m (Lnet/minecraft/class_4140;)V method_18875 removeMemory + m (Ljava/lang/Object;)Z method_19948 isEmptyCollection + m (Lnet/minecraft/class_4168;Lcom/google/common/collect/ImmutableList;Ljava/util/Set;Ljava/util/Set;)V method_24530 registerActivity + m ()Ljava/util/stream/Stream; method_28315 createMemoryCodecs + m (Lnet/minecraft/class_4168;)V method_18897 setFallbackActivity + m (Ljava/util/List;)V method_24531 switchActivities + m (Lnet/minecraft/class_4170;)V method_18884 setSchedule + m (Ljava/util/Set;)V method_18890 setDefaultActivities + m ()Lnet/minecraft/class_4170; method_18894 getSchedule + m ()Lnet/minecraft/class_4095; method_18911 copy + m (Lnet/minecraft/class_4168;ILcom/google/common/collect/ImmutableList;)V method_18882 registerActivity + f Lorg/apache/logging/log4j/Logger; field_24656 LOGGER + f Ljava/util/Set; field_18328 activities + f Ljava/util/Map; field_18323 sensors + f Ljava/util/Set; field_18327 defaultActivities + f J field_18853 lastGameTime + f Lnet/minecraft/class_4170; field_18325 schedule + f Lnet/minecraft/class_4168; field_18329 fallbackActivity + f Ljava/util/Map; field_22282 memoryMap + f Ljava/util/function/Supplier; field_24657 brainCodec + f Ljava/util/Map; field_18324 taskPriorityMap + f Ljava/util/Map; field_18322 memories + f Ljava/util/Map; field_18326 requiredMemoryStates +c net/minecraft/class_4095$class_5302 net/minecraft/entity/ai/brain/Brain$MemoryCodec + m (Lcom/mojang/serialization/RecordBuilder;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/Codec;Lnet/minecraft/class_4831;)V method_28332 func_233742_a_ + m (Lnet/minecraft/class_4095;)V method_28328 refreshMemory + m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;)V method_28330 encode + m (Lnet/minecraft/class_4140;Ljava/util/Optional;)Lnet/minecraft/class_4095$class_5302; method_28333 createCodec + m (Lnet/minecraft/class_4140;Ljava/util/Optional;)Lnet/minecraft/class_4095$class_5302; method_28329 func_233739_a_ + m (Lcom/mojang/serialization/RecordBuilder;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/Codec;)V method_28331 func_233741_a_ + m (Lnet/minecraft/class_4095$class_5302;Lnet/minecraft/class_4095;)V method_28327 func_233737_a_ + f Ljava/util/Optional; field_24662 memory + f Lnet/minecraft/class_4140; field_24661 memoryType +c net/minecraft/class_4095$class_5303 net/minecraft/entity/ai/brain/Brain$BrainCodec + m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_4095; method_28335 deserialize + m ()Lnet/minecraft/class_4095; method_28334 func_233747_a_ + m ()Lcom/mojang/serialization/Codec; method_28336 func_233749_b_ + f Lcom/mojang/serialization/Codec; field_24665 brainCodec + f Ljava/util/Collection; field_24663 memoryTypes + f Ljava/util/Collection; field_24664 sensorTypes +c net/minecraft/class_4095$1 net/minecraft/entity/ai/brain/Brain$1 + m (Lnet/minecraft/class_4140;)Ljava/util/stream/Stream; method_28326 func_233734_b_ + m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/stream/Stream; keys keys + m (Lnet/minecraft/class_4140;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_28320 decodeMemory + m (Lnet/minecraft/class_4140;)Lcom/mojang/serialization/DataResult; method_28317 func_233725_a_ + m (Lnet/minecraft/class_4140;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_2960; method_28319 func_233727_a_ + m (Lnet/minecraft/class_4095;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;)Lcom/mojang/serialization/RecordBuilder; method_28316 encode + m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;)Lcom/mojang/serialization/RecordBuilder; encode encode + m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/MapLike;)Lcom/mojang/serialization/DataResult; decode decode + m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;Lnet/minecraft/class_4095$class_5302;)V method_28322 func_233730_a_ + m (Lcom/mojang/serialization/DynamicOps;Lorg/apache/commons/lang3/mutable/MutableObject;Lcom/mojang/datafixers/util/Pair;)V method_28324 func_233732_a_ + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_2960;)Ljava/lang/Object; method_28325 func_233733_a_ + m (Lnet/minecraft/class_4140;Lnet/minecraft/class_4831;)Lnet/minecraft/class_4095$class_5302; method_28318 func_233726_a_ + m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/util/Pair;Lnet/minecraft/class_4140;)Lcom/mojang/serialization/DataResult; method_28321 func_233729_a_ + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/DataResult; method_28323 func_233731_a_ + f Ljava/util/Collection; field_24659 field_233723_b_ + f Ljava/util/Collection; field_24658 field_233722_a_ + f Lorg/apache/commons/lang3/mutable/MutableObject; field_24660 field_233724_c_ +c net/minecraft/class_5131 net/minecraft/entity/ai/attributes/AttributeModifierManager + m (Lnet/minecraft/class_1324;)V method_26853 func_233792_b_ + m (Lnet/minecraft/class_1320;Lnet/minecraft/class_1322;)V method_26843 func_233780_a_ + m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_26842 createInstanceIfAbsent + m (Lnet/minecraft/class_2499;)V method_26850 deserialize + m (Lnet/minecraft/class_1324;)V method_26845 addInstance + m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_26858 func_233798_e_ + m (Ljava/lang/String;)V method_26848 func_233786_a_ + m ()Lnet/minecraft/class_2499; method_26855 serialize + m (Lnet/minecraft/class_1324;)Z method_26857 func_233796_c_ + m (Lnet/minecraft/class_1320;)Z method_27306 hasAttributeInstance + m (Lnet/minecraft/class_1320;)D method_26852 getAttributeValue + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1320;)V method_26849 func_233787_a_ + m (Lnet/minecraft/class_1320;Ljava/util/Collection;)V method_26844 func_233781_a_ + m ()Ljava/util/Set; method_26841 getInstances + m (Lnet/minecraft/class_1320;Ljava/util/UUID;)Z method_27305 hasModifier + m (Lnet/minecraft/class_1320;Ljava/util/UUID;)D method_27307 getModifierValue + m (Lcom/google/common/collect/Multimap;)V method_26847 removeModifiers + m (Lnet/minecraft/class_5131;)V method_26846 refreshOnRespawn + m (Lcom/google/common/collect/Multimap;)V method_26854 reapplyModifiers + m (Lnet/minecraft/class_1320;)D method_26856 getAttributeBaseValue + m ()Ljava/util/Collection; method_26851 getWatchedInstances + f Lorg/apache/logging/log4j/Logger; field_23708 LOGGER + f Lnet/minecraft/class_5132; field_23711 attributeMap + f Ljava/util/Set; field_23710 instanceSet + f Ljava/util/Map; field_23709 instanceMap +c net/minecraft/class_1324 net/minecraft/entity/ai/attributes/ModifiableAttributeInstance + m (Lnet/minecraft/class_1322$class_1323;)Ljava/util/Collection; method_26834 getModifiersByOperation + m (Ljava/util/UUID;)Z method_27304 removePersistentModifier + m ()V method_6203 removeAllModifiers + m ()Ljava/util/Set; method_6195 getModifierListCopy + m (Ljava/util/UUID;)V method_6200 removeModifier + m (D)V method_6192 setBaseValue + m ()Lnet/minecraft/class_1320; method_6198 getAttribute + m ()Lnet/minecraft/class_2487; method_26839 writeInstances + m (Ljava/util/UUID;)Lnet/minecraft/class_1322; method_6199 getModifier + m (Lnet/minecraft/class_1322$class_1323;Ljava/util/Set;)V method_26832 func_233764_a_ + m (Lnet/minecraft/class_1322$class_1323;)Ljava/util/Set; method_26836 func_233768_c_ + m (Lnet/minecraft/class_1322$class_1323;)Ljava/util/Set; method_6193 getOrCreateModifiersByOperation + m ()D method_6201 getBaseValue + m (Lnet/minecraft/class_1322;)V method_26837 applyPersistentModifier + m (Lnet/minecraft/class_1324;)V method_26831 copyValuesFromInstance + m (Lnet/minecraft/class_2487;)V method_26833 readInstances + m (Lnet/minecraft/class_1322;)Z method_6196 hasModifier + m ()V method_26838 compute + m (Lnet/minecraft/class_1322;)V method_26835 applyNonPersistentModifier + m ()D method_26840 computeValue + m (Lnet/minecraft/class_1322;)V method_6197 applyModifier + m (Lnet/minecraft/class_1322;)V method_6202 removeModifier + m ()D method_6194 getValue + f Lnet/minecraft/class_1320; field_23700 genericAttribute + f Ljava/util/Map; field_23702 instanceMap + f Ljava/util/Map; field_23701 mapByOperation + f Ljava/util/Set; field_23703 mapByUUID + f Ljava/util/function/Consumer; field_23707 modifiedValueConsumer + f D field_23706 modifiedValue + f D field_23704 base + f Z field_23705 requiresComputation +c net/minecraft/class_5132 net/minecraft/entity/ai/attributes/AttributeModifierMap + m (Lnet/minecraft/class_1320;Ljava/util/UUID;)Z method_27309 hasModifier + m (Lnet/minecraft/class_1320;)Z method_27310 hasAttribute + m ()Lnet/minecraft/class_5132$class_5133; method_26861 createMutableAttribute + m (Lnet/minecraft/class_1320;Ljava/util/UUID;)D method_27308 getAttributeModifierValue + m (Lnet/minecraft/class_1320;)D method_26862 getAttributeValue + m (Lnet/minecraft/class_1320;)D method_26864 getAttributeBaseValue + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_26863 createImmutableAttributeInstance + m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_26865 getModifier + f Ljava/util/Map; field_23713 attributeMap +c net/minecraft/class_5132$class_5133 net/minecraft/entity/ai/attributes/AttributeModifierMap$MutableAttribute + m (Lnet/minecraft/class_1320;Lnet/minecraft/class_1324;)V method_26869 func_233816_a_ + m ()Lnet/minecraft/class_5132; method_26866 create + m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_5132$class_5133; method_26867 createMutableAttribute + m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_26870 createAttributeInstance + m (Lnet/minecraft/class_1320;D)Lnet/minecraft/class_5132$class_5133; method_26868 createMutableAttribute + f Ljava/util/Map; field_23714 attributeMap + f Z field_23715 edited +c net/minecraft/class_1322 net/minecraft/entity/ai/attributes/AttributeModifier + m (Ljava/lang/Object;)Z equals equals + m ()I hashCode hashCode + m ()Lnet/minecraft/class_2487; method_26860 write + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1322; method_26859 read + m (Ljava/lang/String;)Ljava/lang/String; method_6183 func_210763_a + m (Ljava/lang/String;)Ljava/lang/String; method_6184 func_210764_b + m ()Lnet/minecraft/class_1322$class_1323; method_6182 getOperation + m ()Ljava/util/UUID; method_6189 getID + m ()D method_6186 getAmount + m ()Ljava/lang/String; method_6185 getName + m ()Ljava/lang/String; toString toString + f D field_6323 amount + f Ljava/util/UUID; field_6327 id + f Ljava/util/function/Supplier; field_6326 name + f Lnet/minecraft/class_1322$class_1323; field_6324 operation + f Lorg/apache/logging/log4j/Logger; field_23712 LOGGER +c net/minecraft/class_1322$class_1323 net/minecraft/entity/ai/attributes/AttributeModifier$Operation + m ()I method_6191 getId + m ()[Lnet/minecraft/class_1322$class_1323; values values + m (I)Lnet/minecraft/class_1322$class_1323; method_6190 byId + m (Ljava/lang/String;)Lnet/minecraft/class_1322$class_1323; valueOf valueOf + f I field_6329 id + f [Lnet/minecraft/class_1322$class_1323; field_6332 VALUES + f Lnet/minecraft/class_1322$class_1323; field_6330 MULTIPLY_BASE + f Lnet/minecraft/class_1322$class_1323; field_6331 MULTIPLY_TOTAL + f Lnet/minecraft/class_1322$class_1323; field_6328 ADDITION + f [Lnet/minecraft/class_1322$class_1323; field_6333 $VALUES +c net/minecraft/class_5135 net/minecraft/entity/ai/attributes/GlobalEntityTypeAttributes + m (Lnet/minecraft/class_1299;)Z method_26877 func_233839_d_ + m (Lnet/minecraft/class_1299;)Z method_26876 func_233838_c_ + m (Lnet/minecraft/class_1299;)Z method_26875 doesEntityHaveAttributes + m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_5132; method_26873 getAttributesForEntity + m (Lnet/minecraft/class_2960;)V method_26874 func_233836_a_ + m ()V method_26872 validateEntityAttributes + f Lorg/apache/logging/log4j/Logger; field_23729 LOGGER + f Ljava/util/Map; field_23730 VANILLA_ATTRIBUTES +c net/minecraft/class_5134 net/minecraft/entity/ai/attributes/Attributes + m (Ljava/lang/String;Lnet/minecraft/class_1320;)Lnet/minecraft/class_1320; method_26871 register + f Lnet/minecraft/class_1320; field_23727 ZOMBIE_SPAWN_REINFORCEMENTS + f Lnet/minecraft/class_1320; field_23716 MAX_HEALTH + f Lnet/minecraft/class_1320; field_23726 LUCK + f Lnet/minecraft/class_1320; field_23728 HORSE_JUMP_STRENGTH + f Lnet/minecraft/class_1320; field_23717 FOLLOW_RANGE + f Lnet/minecraft/class_1320; field_23724 ARMOR + f Lnet/minecraft/class_1320; field_23725 ARMOR_TOUGHNESS + f Lnet/minecraft/class_1320; field_23721 ATTACK_DAMAGE + f Lnet/minecraft/class_1320; field_23723 ATTACK_SPEED + f Lnet/minecraft/class_1320; field_23722 ATTACK_KNOCKBACK + f Lnet/minecraft/class_1320; field_23719 MOVEMENT_SPEED + f Lnet/minecraft/class_1320; field_23718 KNOCKBACK_RESISTANCE + f Lnet/minecraft/class_1320; field_23720 FLYING_SPEED +c net/minecraft/class_1329 net/minecraft/entity/ai/attributes/RangedAttribute + f D field_6351 maximumValue + f D field_6353 minimumValue +c net/minecraft/class_4806 net/minecraft/entity/ai/brain/task/AnimalBreedTask + m (Lnet/minecraft/class_1429;)Lnet/minecraft/class_1429; method_24542 getBreedTarget + m (Lnet/minecraft/class_1429;)Z method_24546 canBreed + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;)Z method_24543 shouldExecute + m (Lnet/minecraft/class_1429;)Ljava/util/Optional; method_24548 getNearestMate + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;J)V method_24550 resetTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;J)Z method_24547 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;J)V method_24549 updateTask + m (Lnet/minecraft/class_1309;)Z method_24545 func_233847_b_ + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1429; method_24541 func_233845_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;J)V method_24544 startExecuting + f F field_23129 speed + f Lnet/minecraft/class_1299; field_22283 breedTarget + f J field_22284 breedTime +c net/minecraft/class_4096 net/minecraft/entity/ai/brain/task/GatherPOITask + m (Lnet/minecraft/class_1314;JJ)Lnet/minecraft/class_4096$class_5397; method_29925 func_241363_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;Ljava/lang/Byte;)V method_30334 func_242291_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_20816 shouldExecute + m (Lnet/minecraft/class_4153;Lnet/minecraft/class_2338;Lnet/minecraft/class_1314;Lnet/minecraft/class_3218;Lnet/minecraft/class_4158;)V method_21633 func_225441_a_ + m (JLit/unimi/dsi/fastutil/longs/Long2ObjectMap$Entry;)Z method_21634 func_241362_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Z method_21635 func_225442_a_ + m (Lnet/minecraft/class_4140;Lnet/minecraft/class_4140;)Lcom/google/common/collect/ImmutableMap; method_29245 func_233841_a_ + m (JLnet/minecraft/class_2338;)Z method_29924 func_220603_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_20817 startExecuting + f Lnet/minecraft/class_4158; field_19287 field_220604_a + f Z field_18854 field_220606_c + f Lnet/minecraft/class_4140; field_20287 field_220605_b + f J field_18332 field_220607_d + f Ljava/util/Optional; field_25812 field_242290_e + f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_19289 field_223013_e +c net/minecraft/class_4096$class_5397 net/minecraft/entity/ai/brain/task/GatherPOITask$RetryMarker + m (J)V method_29926 func_241370_a_ + m (J)Z method_29927 func_241371_b_ + m ()Ljava/lang/String; toString toString + m (J)Z method_29928 func_241372_c_ + f J field_25601 field_241367_b_ + f J field_25602 field_241368_c_ + f I field_25603 field_241369_d_ + f Ljava/util/Random; field_25600 field_241366_a_ +c net/minecraft/class_5355 net/minecraft/entity/ai/brain/task/ChildFollowNearestAdultTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;J)V method_29522 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Z method_29521 shouldExecute + m (Lnet/minecraft/class_1296;)Lnet/minecraft/class_1296; method_29520 getNearestVisibleAdult + f Lnet/minecraft/class_4801; field_25357 distance + f F field_25358 speed +c net/minecraft/class_4114 net/minecraft/entity/ai/brain/task/AssignProfessionTask + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_3218;Lnet/minecraft/class_3852;)V method_18986 func_220388_a_ + m (Lnet/minecraft/class_4158;Lnet/minecraft/class_3852;)Z method_18984 func_220389_a_ + m (Lnet/minecraft/class_4208;Lnet/minecraft/class_3218;)Ljava/util/Optional; method_29929 func_241376_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18988 startExecuting + m (Lnet/minecraft/class_4158;)Ljava/util/Optional; method_18985 func_220390_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_18987 shouldExecute +c net/minecraft/class_4808 net/minecraft/entity/ai/brain/task/RandomlyStopAttackingTask + f I field_22287 field_233858_b_ +c net/minecraft/class_4807 net/minecraft/entity/ai/brain/task/AttackStrafingTask + m (Lnet/minecraft/class_1308;)Z method_24554 isTargetWithinDistance + m (Lnet/minecraft/class_1308;)Z method_24551 hasSeen + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24553 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_24552 shouldExecute + m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_1309; method_24555 getAttackTarget + f F field_22286 speed + f I field_22285 distance +c net/minecraft/class_4215 net/minecraft/entity/ai/brain/BrainUtil + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)V method_19554 lookAt + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;F)V method_19555 approachEachOther + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)Z method_19553 func_220615_b + m (Lnet/minecraft/class_1646;Ljava/util/function/Predicate;Ljava/util/List;)Ljava/util/stream/Stream; method_29249 func_233873_a_ + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)Z method_19550 canSee + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;F)V method_19548 lookApproachEachOther + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;D)Z method_24558 isTargetWithinDistance + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_243;)V method_19949 spawnItemNearEntity + m (Lnet/minecraft/class_1309;Ljava/util/Optional;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_24562 getNearestEntity + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1309;)Z method_19547 func_220622_a + m (Lnet/minecraft/class_3218;ILnet/minecraft/class_4076;)Z method_20418 func_220620_a + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;I)Z method_25940 canFireAtTarget + m (Lnet/minecraft/class_1309;Ljava/util/UUID;)Lnet/minecraft/class_1309; method_24563 func_233868_a_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4140;)Ljava/util/Optional; method_24560 getTargetFromMemory + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;FI)V method_24557 setTargetEntity + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1646; method_29246 func_233859_a_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_24559 getNearestEntity + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_4140;Lnet/minecraft/class_1299;)Z method_19551 isCorrectVisibleType + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1309;)Z method_29247 func_233871_a_ + m (Lnet/minecraft/class_1646;Ljava/util/function/Predicate;)Ljava/util/stream/Stream; method_29248 getNearbyVillagers + m (Lnet/minecraft/class_1309;Ljava/util/List;)Z method_19549 func_220614_a + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_2338;FI)V method_24561 setTargetPosition + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_4140;Ljava/util/function/Predicate;)Z method_24564 canSeeEntity + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_25941 canAttackTarget + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)V method_19552 lookAtEachOther + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4076;I)Lnet/minecraft/class_4076; method_20419 getClosestVillageSection + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_24565 isMobVisible +c net/minecraft/class_4097 net/minecraft/entity/ai/brain/task/Task + m (J)Z method_18915 isTimedOut + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_18923 tick + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)Z method_18922 start + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_18925 stop + m ()Lnet/minecraft/class_4097$class_4098; method_18921 getStatus + m (Lnet/minecraft/class_1309;)Z method_19546 hasRequiredMemories + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)Z method_18919 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_18920 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_18926 resetTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)Z method_18927 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_18924 updateTask + f I field_18336 durationMax + f Ljava/util/Map; field_19291 requiredMemoryState + f I field_18335 durationMin + f J field_18334 stopTime + f Lnet/minecraft/class_4097$class_4098; field_18333 status +c net/minecraft/class_4097$class_4098 net/minecraft/entity/ai/brain/task/Task$Status + m ()[Lnet/minecraft/class_4097$class_4098; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4097$class_4098; valueOf valueOf + f [Lnet/minecraft/class_4097$class_4098; field_18339 $VALUES + f Lnet/minecraft/class_4097$class_4098; field_18337 STOPPED + f Lnet/minecraft/class_4097$class_4098; field_18338 RUNNING +c net/minecraft/class_4242 net/minecraft/entity/ai/brain/task/CelebrateRaidVictoryTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19954 updateTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_19952 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19953 resetTask + m (Lnet/minecraft/class_1767;I)Lnet/minecraft/class_1799; method_19950 makeFirework + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19951 shouldExecute + f Lnet/minecraft/class_3765; field_18983 raid +c net/minecraft/class_4099 net/minecraft/util/math/BlockPosWrapper + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2338; field_18340 pos + f Lnet/minecraft/class_243; field_18341 centerPos +c net/minecraft/class_4810 net/minecraft/entity/ai/brain/task/ShootTargetTask + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_24568 func_233887_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24573 updateTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)Z method_24571 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_24570 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24574 resetTask + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_24569 func_233888_a_ + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_24572 func_233889_b_ + f I field_22293 field_233885_b_ + f Lnet/minecraft/class_4810$class_4811; field_22294 field_233886_c_ +c net/minecraft/class_4810$class_4811 net/minecraft/entity/ai/brain/task/ShootTargetTask$Status + m ()[Lnet/minecraft/class_4810$class_4811; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4810$class_4811; valueOf valueOf + f Lnet/minecraft/class_4810$class_4811; field_22297 CHARGED + f Lnet/minecraft/class_4810$class_4811; field_22296 CHARGING + f [Lnet/minecraft/class_4810$class_4811; field_22299 $VALUES + f Lnet/minecraft/class_4810$class_4811; field_22298 READY_TO_ATTACK + f Lnet/minecraft/class_4810$class_4811; field_22295 UNCHARGED +c net/minecraft/class_4809 net/minecraft/entity/ai/brain/task/PiglinIdleActivityTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_24566 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24567 startExecuting + f Lnet/minecraft/class_4140; field_22289 field_233882_c_ + f Ljava/util/function/Predicate; field_22288 field_233881_b_ + f Lnet/minecraft/class_4140; field_22290 field_233883_d_ + f Lnet/minecraft/class_4801; field_22291 field_233884_e_ +c net/minecraft/class_4101 net/minecraft/entity/ai/brain/task/DummyTask +c net/minecraft/class_4812 net/minecraft/entity/ai/brain/task/StopRidingEntityTask + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;)Z method_24575 func_233892_a_ + f I field_22300 field_233890_b_ + f Ljava/util/function/BiPredicate; field_22301 field_233891_c_ +c net/minecraft/class_4102 net/minecraft/util/math/EntityPosWrapper + m ()Ljava/lang/String; toString toString + f Z field_24382 eyePos + f Lnet/minecraft/class_1297; field_18342 entity +c net/minecraft/class_4103 net/minecraft/entity/ai/brain/task/MultiTask + m (Lcom/mojang/datafixers/util/Pair;)V method_18929 func_220411_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;JLnet/minecraft/class_4097;)Z method_18938 func_220413_c + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;JLnet/minecraft/class_4097;)V method_18932 func_220409_b + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;JLnet/minecraft/class_4097;)V method_18930 func_220412_a + m (Lnet/minecraft/class_4097;)Z method_18928 func_220407_b + m (Lnet/minecraft/class_4097;)Z method_18937 func_220414_d + m (Lnet/minecraft/class_4097;)Z method_18931 func_220408_c + m (Lnet/minecraft/class_4097;)Z method_19955 func_220410_a + f Lnet/minecraft/class_4103$class_4104; field_18345 field_220417_c + f Ljava/util/Set; field_18344 field_220416_b + f Lnet/minecraft/class_4103$class_4216; field_18346 field_220418_d + f Lnet/minecraft/class_4131; field_18347 field_220419_e +c net/minecraft/class_4103$class_4104 net/minecraft/entity/ai/brain/task/MultiTask$Ordering + m (Ljava/lang/String;)Lnet/minecraft/class_4103$class_4104; valueOf valueOf + m (Lnet/minecraft/class_4131;)V method_18940 func_220627_b + m ()[Lnet/minecraft/class_4103$class_4104; values values + m (Lnet/minecraft/class_4131;)V method_18939 func_220628_a + f Lnet/minecraft/class_4103$class_4104; field_18348 ORDERED + f Ljava/util/function/Consumer; field_18350 field_220629_c + f Lnet/minecraft/class_4103$class_4104; field_18349 SHUFFLED + f [Lnet/minecraft/class_4103$class_4104; field_18351 $VALUES +c net/minecraft/class_4103$class_4216 net/minecraft/entity/ai/brain/task/MultiTask$RunType + m (Lnet/minecraft/class_4131;Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_19559 func_220630_a + m ()[Lnet/minecraft/class_4103$class_4216; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4103$class_4216; valueOf valueOf + f Lnet/minecraft/class_4103$class_4216; field_18856 TRY_ALL + f [Lnet/minecraft/class_4103$class_4216; field_18857 $VALUES + f Lnet/minecraft/class_4103$class_4216; field_18855 RUN_ONE +c net/minecraft/class_4103$class_4216$1 net/minecraft/entity/ai/brain/task/MultiTask$RunType$1 + m (Lnet/minecraft/class_4097;)Z method_19560 func_220634_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;JLnet/minecraft/class_4097;)Z method_19561 func_220633_a +c net/minecraft/class_4103$class_4216$2 net/minecraft/entity/ai/brain/task/MultiTask$RunType$2 + m (Lnet/minecraft/class_4097;)Z method_19562 func_220632_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;JLnet/minecraft/class_4097;)V method_19563 func_220631_a +c net/minecraft/class_4103$1 net/minecraft/entity/ai/brain/task/MultiTask$1 +c net/minecraft/class_4813 net/minecraft/entity/ai/brain/task/PredicateTask + f Ljava/util/function/Predicate; field_22302 field_233895_b_ + f Lnet/minecraft/class_4140; field_22303 field_233896_c_ +c net/minecraft/class_4244 net/minecraft/entity/ai/brain/task/GoOutsideAfterRaidTask +c net/minecraft/class_4243 net/minecraft/entity/ai/brain/task/GiveHeroGiftsTask + m (Lnet/minecraft/class_1646;)Ljava/util/Optional; method_19966 getNearestPlayer + m (Lnet/minecraft/class_1646;)Z method_19964 hasNearestPlayer + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19967 updateTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_19965 shouldContinueExecuting + m (Lnet/minecraft/class_3218;)I method_19961 getNextCooldown + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19968 resetTask + m (Lnet/minecraft/class_1657;)Z method_19959 isHero + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1309;)V method_19957 giveGifts + m (Lnet/minecraft/class_1646;)Ljava/util/List; method_19956 getGifts + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19962 shouldExecute + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1657;)Z method_19958 isCloseEnough + m (Ljava/util/HashMap;)V method_19960 func_220395_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19963 startExecuting + f J field_18987 startTime + f Z field_18986 done + f Ljava/util/Map; field_18984 GIFTS + f I field_18985 cooldown +c net/minecraft/class_4458 net/minecraft/entity/ai/brain/task/WalkToPOITask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_21637 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)D method_21638 func_225444_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_21636 shouldExecute + f F field_20288 field_225445_a + f I field_20289 field_225446_b +c net/minecraft/class_4814 net/minecraft/entity/ai/brain/task/HuntCelebrationTask + m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_2338; method_24576 func_233899_a_ + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_24577 func_233900_a_ + m (Ljava/util/Random;)I method_24578 func_233901_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24579 startExecuting + f F field_23130 field_233898_c_ + f I field_22304 field_233897_b_ +c net/minecraft/class_4815 net/minecraft/entity/ai/brain/task/PickupWantedItemTask + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1542; method_24580 func_233909_a_ + m (Lnet/minecraft/class_1309;)Z method_24581 func_233910_b_ + f Ljava/util/function/Predicate; field_22305 field_233906_b_ + f F field_23131 field_233908_d_ + f I field_22306 field_233907_c_ +c net/minecraft/class_5325 net/minecraft/entity/ai/brain/task/FindPotentialJobTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_29251 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_29252 updateTask + m (Lnet/minecraft/class_4158;)Z method_29783 func_241377_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_29523 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_29525 resetTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4208;)V method_29524 func_233905_a_ + m (Lnet/minecraft/class_4168;)Ljava/lang/Boolean; method_29250 func_233904_a_ + f F field_25155 speed +c net/minecraft/class_4289 net/minecraft/entity/ai/brain/task/WalkRandomlyInsideTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_20422 startExecuting + m (Lnet/minecraft/class_1314;Lnet/minecraft/class_2338;)V method_20420 func_220430_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_20424 func_220428_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;Lnet/minecraft/class_2338;)Z method_20425 func_220427_b + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;Lnet/minecraft/class_2338;)Z method_20423 func_220429_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_20421 shouldExecute + f F field_19258 field_233911_b_ +c net/minecraft/class_4217 net/minecraft/entity/ai/brain/task/FarmTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_20394 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_20392 startExecuting + m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_2338; method_20641 getNextPosForFarming + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;)Z method_20640 isValidPosForFarming + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19566 resetTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19565 updateTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19564 shouldExecute + f Lnet/minecraft/class_2338; field_18858 field_220422_a + f Ljava/util/List; field_19351 farmableBlocks + f J field_18861 taskCooldown + f I field_19239 idleTime +c net/minecraft/class_4107 net/minecraft/entity/ai/brain/task/InteractWithDoorTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)Z method_30763 func_242297_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_2338;)Z method_30766 func_242300_b + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_2338;)Z method_30761 func_242295_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_2338;)V method_30767 func_242301_c + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)Z method_30765 func_242299_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_9;Lnet/minecraft/class_9;)V method_30760 func_242294_a + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_30764 func_242298_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_4208;)Z method_30762 func_242296_a + f I field_26388 field_242293_c + f Lnet/minecraft/class_9; field_26387 field_242292_b +c net/minecraft/class_4106 net/minecraft/entity/ai/brain/task/InteractWithEntityTask + m (Lnet/minecraft/class_1309;)Z method_18945 func_220440_b + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_18944 func_220438_a + m (Lnet/minecraft/class_1309;)Z method_18948 func_220442_d + m (Lnet/minecraft/class_1309;)Z method_24583 func_233914_b_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4095;Ljava/util/List;)V method_18943 func_220437_a + m (Lnet/minecraft/class_1309;)Z method_24582 func_233913_a_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_18946 func_220443_a + m (Lnet/minecraft/class_1309;)Z method_18949 func_220441_e + m (Lnet/minecraft/class_1299;ILnet/minecraft/class_4140;FI)Lnet/minecraft/class_4106; method_18941 func_220445_a + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_18942 func_220439_a + f F field_18356 field_220447_b + f I field_18355 field_220446_a + f Lnet/minecraft/class_1299; field_18357 field_220448_c + f I field_18358 field_220449_d + f Lnet/minecraft/class_4140; field_18361 field_220452_g + f Ljava/util/function/Predicate; field_18359 field_220450_e + f Ljava/util/function/Predicate; field_18360 field_220451_f +c net/minecraft/class_4246 net/minecraft/entity/ai/brain/task/FindHidingPlaceTask + m (Lnet/minecraft/class_4158;)Z method_19983 func_220453_a + m (Lnet/minecraft/class_2338;)Z method_20212 func_220456_b + m (Lnet/minecraft/class_4158;)Z method_19985 func_220454_b + m (Lnet/minecraft/class_2338;)Z method_20211 func_220455_a + f I field_18994 field_220458_b + f I field_18995 field_220459_c + f Ljava/util/Optional; field_18998 hidingPos + f F field_18993 speed +c net/minecraft/class_4245 net/minecraft/entity/ai/brain/task/JumpOnBedTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_19976 resetTask + m (Lnet/minecraft/class_1308;)Ljava/util/Optional; method_19969 getBed + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19979 func_220465_d + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_19972 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19977 func_220468_c + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19975 func_220469_b + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)Z method_19978 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_19980 updateTask + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2338;)V method_19970 setWalkTarget + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19971 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_19974 isBed + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;Lnet/minecraft/class_2338;)V method_19973 func_220461_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19982 func_220462_f + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19981 func_220464_e + f I field_18992 field_220474_e + f Lnet/minecraft/class_2338; field_18989 bedPos + f F field_18988 speed + f I field_18990 field_220472_c + f I field_18991 field_220473_d +c net/minecraft/class_4108 net/minecraft/entity/ai/brain/task/TradeTask + m (Lnet/minecraft/class_1646;)V method_18953 walkAndLookCustomer + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_18954 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_18955 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18956 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18957 resetTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18958 updateTask + f F field_18362 speed +c net/minecraft/class_4247 net/minecraft/entity/ai/brain/task/FindHidingPlaceDuringRaidTask +c net/minecraft/class_4816 net/minecraft/entity/ai/brain/task/AttackTargetTask + m (Lnet/minecraft/class_1308;)Z method_25942 isRanged + m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_1309; method_25944 getAttackTarget + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1792;)Z method_25943 func_233922_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24590 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_24588 shouldExecute + f I field_22308 cooldown +c net/minecraft/class_4110 net/minecraft/entity/ai/brain/task/LookTask + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4115;)V method_18966 func_220484_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_18968 resetTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_18969 updateTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)Z method_18967 shouldContinueExecuting + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4115;)Z method_19569 func_220485_b_ +c net/minecraft/class_4248 net/minecraft/entity/ai/brain/task/MoveToSkylightTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)Lnet/minecraft/class_243; method_19987 findSkylightPosition + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_4142; method_19986 func_220492_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_2338;)Z method_20497 func_226306_a_ + f F field_18999 speed +c net/minecraft/class_4817 net/minecraft/entity/ai/brain/task/RideEntityTask + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1297; method_24592 func_233926_b_ + m (Lnet/minecraft/class_1309;)Z method_24591 func_233925_a_ + f F field_23132 field_233924_b_ +c net/minecraft/class_4218 net/minecraft/entity/ai/brain/task/WalkToVillagerBabiesTask + m (Lnet/minecraft/class_1309;)Z method_19593 func_220502_c + m (Lnet/minecraft/class_1314;)Ljava/util/Optional; method_19588 func_220497_b + m (Ljava/util/Map$Entry;)Z method_19581 func_220504_a + m (Lnet/minecraft/class_1314;Lnet/minecraft/class_1309;)V method_19580 func_220498_a + m (Lnet/minecraft/class_1314;Lnet/minecraft/class_1309;)V method_19589 func_220506_b + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19577 func_220499_a + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19591 func_220507_c + m (Lnet/minecraft/class_1309;Ljava/lang/Integer;)Ljava/lang/Integer; method_19578 func_220511_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_19584 startExecuting + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19587 func_220496_b + m (Ljava/util/Map;Lnet/minecraft/class_1309;)V method_19582 func_220509_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_19583 shouldExecute + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_19576 func_220495_a + m (Lnet/minecraft/class_1314;)Ljava/util/Map; method_19592 func_220505_c + m (Lnet/minecraft/class_1314;)Ljava/util/List; method_19594 func_220503_d + m (Lnet/minecraft/class_1314;)Ljava/util/Optional; method_19579 func_220510_a + m (Lnet/minecraft/class_1314;)Z method_19590 func_220501_e + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;Lnet/minecraft/class_1309;)V method_19585 func_220508_a + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_19586 func_220500_b +c net/minecraft/class_4112 net/minecraft/entity/ai/brain/task/WalkToTargetTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_18983 updateTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)Z method_18979 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_18982 startExecuting + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4142;)Z method_18980 hasReachedTarget + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4142;J)Z method_18977 func_220487_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_18978 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_18981 resetTask + f F field_18371 field_220490_c + f Lnet/minecraft/class_11; field_18369 field_220488_a + f I field_18964 field_242302_b + f Lnet/minecraft/class_2338; field_18370 field_220489_b +c net/minecraft/class_4115 net/minecraft/util/math/IPosWrapper + m ()Lnet/minecraft/class_243; method_18991 getPos + m (Lnet/minecraft/class_1309;)Z method_18990 isVisibleTo + m ()Lnet/minecraft/class_2338; method_18989 getBlockPos +c net/minecraft/class_5326 net/minecraft/entity/ai/brain/task/SwitchVillagerJobTask + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4208;Lnet/minecraft/class_4158;)V method_29256 func_233933_a_ + m (Lnet/minecraft/class_4208;Lnet/minecraft/class_4158;Lnet/minecraft/class_1646;)Z method_29259 func_233935_b_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_29258 startExecuting + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1646;)Lnet/minecraft/class_1646; method_29255 func_233932_a_ + m (Lnet/minecraft/class_4208;Lnet/minecraft/class_4158;Lnet/minecraft/class_1646;)Z method_29257 func_233934_a_ + m (Lnet/minecraft/class_1646;)Z method_29254 func_233931_a_ + m (Lnet/minecraft/class_4158;Lnet/minecraft/class_3852;)Z method_29253 func_233930_a_ + f Lnet/minecraft/class_3852; field_25156 field_233929_b_ +c net/minecraft/class_4818 net/minecraft/entity/ai/brain/task/WalkRandomlyTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_24594 startExecuting + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_4142; method_24593 func_233939_a_ + f I field_22311 field_233937_c_ + f I field_22312 field_233938_d_ + f F field_22310 field_233936_b_ +c net/minecraft/class_4295 net/minecraft/entity/ai/brain/task/ChangeJobTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_20450 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_20449 shouldExecute +c net/minecraft/class_4249 net/minecraft/entity/ai/brain/task/HideFromRaidOnBellRingTask +c net/minecraft/class_4251 net/minecraft/entity/ai/brain/task/RingBellTask +c net/minecraft/class_4250 net/minecraft/entity/ai/brain/task/ForgetRaidTask +c net/minecraft/class_4118 net/minecraft/entity/ai/brain/task/FirstShuffledTask +c net/minecraft/class_4820 net/minecraft/entity/ai/brain/task/SupplementedTask + m (Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; method_24597 func_233943_a_ + f Z field_22315 field_233942_d_ + f Lnet/minecraft/class_4097; field_22314 field_233941_c_ + f Ljava/util/function/Predicate; field_22313 field_233940_b_ +c net/minecraft/class_4290 net/minecraft/entity/ai/brain/task/WalkToHouseTask + m (Lnet/minecraft/class_2338;)Z method_21639 func_225453_a_ + m (Lit/unimi/dsi/fastutil/longs/Long2LongMap$Entry;)Z method_21640 func_225454_a_ + f J field_19260 field_220525_b + f F field_20290 field_220524_a + f Lit/unimi/dsi/fastutil/longs/Long2LongMap; field_20291 field_225455_b + f I field_20292 field_225456_c +c net/minecraft/class_4821 net/minecraft/entity/ai/brain/task/RunSometimesTask + m (Lnet/minecraft/class_3218;)V method_24598 func_233949_a_ + f Z field_22317 field_233945_c_ + f I field_22320 field_233948_f_ + f Lnet/minecraft/class_4097; field_22319 field_233947_e_ + f Z field_22316 field_233944_b_ + f Lnet/minecraft/class_4801; field_22318 field_233946_d_ +c net/minecraft/class_4252 net/minecraft/entity/ai/brain/task/ExpireHidingTask + f I field_19154 hidingDistance + f I field_19001 hidingDuration + f I field_19000 field_220538_b +c net/minecraft/class_4119 net/minecraft/entity/ai/brain/task/LookAtEntityTask + m (Lnet/minecraft/class_1309;)Z method_24599 func_233953_a_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19001 func_220517_a_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1309;)Z method_18997 func_220518_a + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4095;Ljava/util/List;)V method_18998 func_220515_a_ + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_18999 func_220516_a_ + m (Lnet/minecraft/class_1311;Lnet/minecraft/class_1309;)Z method_19000 func_220514_a + f F field_18377 field_220520_b + f Ljava/util/function/Predicate; field_18376 targetPredicate +c net/minecraft/class_4253 net/minecraft/entity/ai/brain/task/BeginRaidTask +c net/minecraft/class_4109 net/minecraft/entity/ai/brain/task/FindInteractionAndLookTargetTask + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_18961 func_220527_a + m (Lnet/minecraft/class_1309;)Ljava/util/List; method_18959 getVisibleMobs + m (Lnet/minecraft/class_1309;)Z method_18962 isNearInteractableEntity + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_18963 func_220529_a + m (Lnet/minecraft/class_1309;)Z method_18964 func_220531_c + m (Lnet/minecraft/class_1309;)Z method_18965 func_220528_d + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4095;Ljava/util/List;)V method_18960 func_220526_a + f Ljava/util/function/Predicate; field_18366 field_220536_d + f I field_18364 field_220534_b + f Ljava/util/function/Predicate; field_18365 field_220535_c + f Lnet/minecraft/class_1299; field_18363 targetType +c net/minecraft/class_4822 net/minecraft/entity/ai/brain/task/MoveToTargetTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_25945 startExecuting + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)V method_24605 setTargetMemory + m (Lnet/minecraft/class_1309;)V method_24604 clearTargetMemory + f F field_22323 speed +c net/minecraft/class_4121 net/minecraft/entity/ai/brain/task/RunAwayTask + m (Lnet/minecraft/class_1314;)Lnet/minecraft/class_243; method_24600 func_233961_a_ + m (Lnet/minecraft/class_1314;)Z method_24602 func_233964_b_ + m (Lnet/minecraft/class_4140;FIZ)Lnet/minecraft/class_4121; method_24603 func_233965_b_ + m (Lnet/minecraft/class_1314;Lnet/minecraft/class_243;F)V method_19596 func_233962_a_ + m (Lnet/minecraft/class_4140;FIZ)Lnet/minecraft/class_4121; method_24601 func_233963_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_19002 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_19003 startExecuting + f F field_18381 field_233958_c_ + f I field_22321 field_233959_d_ + f Lnet/minecraft/class_4140; field_18380 field_233957_b_ + f Ljava/util/function/Function; field_22322 field_233960_e_ +c net/minecraft/class_4120 net/minecraft/entity/ai/brain/task/WalkTowardsLookTargetTask + f I field_19002 field_220544_b + f F field_18378 field_220543_a +c net/minecraft/class_4122 net/minecraft/entity/ai/brain/task/StayNearPointTask + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4208;)Z method_19597 func_242304_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_4208;)Z method_19988 func_220547_b + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_20498 func_223017_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19509 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4208;)Z method_30952 func_242303_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;JLnet/minecraft/class_4095;Lnet/minecraft/class_4208;)V method_19004 func_220545_a + m (Lnet/minecraft/class_1646;J)V method_21722 func_225457_a + f I field_19292 field_223018_e + f F field_18383 field_220549_b + f Lnet/minecraft/class_4140; field_18382 field_220548_a + f I field_18385 field_220551_d + f I field_18384 field_220550_c +c net/minecraft/class_4123 net/minecraft/entity/ai/brain/task/SleepAtHomeTask + f J field_18848 field_220552_a +c net/minecraft/class_4130 net/minecraft/entity/ai/brain/task/ShowWaresTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_19600 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19602 startExecuting + m (Lnet/minecraft/class_1914;)Z method_19028 func_220554_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19605 resetTask + m (Lnet/minecraft/class_1646;)V method_19026 func_220553_d + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19604 updateTask + m (Lnet/minecraft/class_1646;)V method_19601 func_220555_b + m (Lnet/minecraft/class_1646;)V method_19598 func_220558_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19599 shouldExecute + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1646;)V method_19027 func_220556_a + m (Lnet/minecraft/class_1646;)Lnet/minecraft/class_1309; method_19603 func_220557_c + f I field_18394 field_220561_c + f I field_18395 field_220562_d + f I field_18396 field_220563_e + f Lnet/minecraft/class_1799; field_18392 field_220559_a + f Ljava/util/List; field_18393 field_220560_b +c net/minecraft/class_4824 net/minecraft/entity/ai/brain/task/ForgetAttackTargetTask + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_24612 func_233976_a_ + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_24615 func_233977_b_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_24613 shouldExecute + m (Lnet/minecraft/class_1308;)Z method_24611 func_233975_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24614 startExecuting + f Ljava/util/function/Function; field_22326 field_233974_c_ + f Ljava/util/function/Predicate; field_22325 field_233973_b_ +c net/minecraft/class_4124 net/minecraft/entity/ai/brain/task/CongregateTask + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4095;Ljava/util/List;)V method_19006 func_220568_a + m (Lnet/minecraft/class_1309;)Z method_19008 func_220570_b + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19009 func_220571_a + m (Lnet/minecraft/class_1309;)Z method_19005 func_220572_a + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_19007 func_220569_a +c net/minecraft/class_4828 net/minecraft/entity/ai/brain/task/FindNewAttackTargetTask + m (Lnet/minecraft/class_1308;)Z method_24622 func_233983_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24623 startExecuting + m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_1309; method_24625 func_233985_b_ + m (Lnet/minecraft/class_1309;)Z method_24621 func_233982_a_ + m (Lnet/minecraft/class_1308;)V method_24627 func_233987_d_ + m (Lnet/minecraft/class_1308;)Z method_24626 func_233986_c_ + m (Lnet/minecraft/class_1309;)Z method_24624 func_233984_b_ + f Ljava/util/function/Predicate; field_22329 field_233981_b_ +c net/minecraft/class_4825 net/minecraft/entity/ai/brain/task/EndAttackTask + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_24616 getAttackTarget + f I field_22327 field_233978_b_ + f Ljava/util/function/BiPredicate; field_25157 field_233979_c_ +c net/minecraft/class_4116 net/minecraft/entity/ai/brain/task/WorkTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_18993 shouldExecute + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_4142; method_18992 func_220564_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_18994 startExecuting + f F field_25752 field_242305_e + f I field_18374 field_220567_c + f Lnet/minecraft/class_4140; field_18372 field_220565_a + f J field_18373 field_220566_b +c net/minecraft/class_4829 net/minecraft/entity/ai/brain/task/GetAngryTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24629 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_29526 func_233988_a_ +c net/minecraft/class_4220 net/minecraft/entity/ai/brain/task/WalkTowardsRandomSecondaryPosTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19610 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19609 shouldExecute + f Lnet/minecraft/class_4140; field_18867 field_220574_b + f I field_18870 field_220577_e + f I field_18869 field_220576_d + f F field_18868 field_220575_c + f Lnet/minecraft/class_4208; field_18872 field_220579_g + f J field_18871 field_220578_f + f Lnet/minecraft/class_4140; field_18866 field_220573_a +c net/minecraft/class_4219 net/minecraft/entity/ai/brain/task/WalkTowardsPosTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_19608 startExecuting + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_4208;)V method_19606 func_220580_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_19607 shouldExecute + f F field_25753 field_242306_e + f I field_18864 field_220583_c + f Lnet/minecraft/class_4140; field_18862 field_220581_a + f I field_18863 field_220582_b + f J field_18865 field_220584_d +c net/minecraft/class_4125 net/minecraft/entity/ai/brain/task/SwimTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_19012 updateTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)Z method_19011 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19010 shouldExecute + f F field_18387 field_220590_b +c net/minecraft/class_4127 net/minecraft/entity/ai/brain/task/UpdateActivityTask +c net/minecraft/class_4126 net/minecraft/entity/ai/brain/task/ShareItemsTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19018 updateTask + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1646;)Ljava/util/Set; method_19611 func_220585_a + m (Lcom/google/common/collect/ImmutableSet;Lnet/minecraft/class_1792;)Z method_19014 func_220587_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19019 resetTask + m (Lnet/minecraft/class_1646;Ljava/util/Set;Lnet/minecraft/class_1309;)V method_19013 func_220586_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19015 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19017 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_19016 shouldContinueExecuting + f Ljava/util/Set; field_18389 field_220588_a +c net/minecraft/class_4128 net/minecraft/entity/ai/brain/task/ExpirePOITask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)Z method_20500 func_223019_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_20499 func_223020_a + f Lnet/minecraft/class_4140; field_18390 field_220591_a + f Ljava/util/function/Predicate; field_18391 poiType +c net/minecraft/class_4982 net/minecraft/entity/ai/brain/task/BoneMealCropsTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_26332 updateTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_26328 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_26331 resetTask + m (Lnet/minecraft/class_1646;)V method_26324 updateMemory + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_26327 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Ljava/util/Optional; method_26329 findGrowablePosition + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;)Z method_26326 isGrowable + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_26330 startExecuting + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;)V method_26325 func_233995_a_ + f I field_23224 grownObjects + f Ljava/util/Optional; field_23225 growableTarget + f J field_23223 taskCooldown + f J field_23222 taskDelay +c net/minecraft/class_4117 net/minecraft/entity/ai/brain/task/FindWalkTargetTask + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_4142; method_20431 func_220595_a + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_4142; method_20432 func_220596_b + m (Lnet/minecraft/class_1314;)V method_20429 func_220593_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_18996 startExecuting + m (Lnet/minecraft/class_1314;Lnet/minecraft/class_4076;)V method_20430 func_220594_a + f F field_18375 speed + f I field_19352 maxXZ + f I field_19353 maxY +c net/minecraft/class_4254 net/minecraft/entity/ai/brain/task/FindWalkTargetAfterRaidVictoryTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_19989 shouldExecute +c net/minecraft/class_4129 net/minecraft/entity/ai/brain/task/VillagerTasks + m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19022 rest + m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19993 hide + m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19023 meet + m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19991 preRaid + m ()Lcom/mojang/datafixers/util/Pair; method_20242 lookAtPlayerOrVillager + m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19021 work + m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19992 raid + m ()Lcom/mojang/datafixers/util/Pair; method_20241 lookAtMany + m (F)Lcom/google/common/collect/ImmutableList; method_19990 play + m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19025 panic + m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19020 core + m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19024 idle +c net/minecraft/class_4100 net/minecraft/entity/ai/brain/task/ClearHurtTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_20645 startExecuting + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1309;)Z method_19558 func_223523_a + m (Lnet/minecraft/class_1646;)Z method_19557 isAttackerWithinDistance +c net/minecraft/class_4113 net/minecraft/entity/ai/brain/task/PanicTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_20648 updateTask + m (Lnet/minecraft/class_1309;)Z method_19574 hostileNearby + m (Lnet/minecraft/class_1309;)Z method_19575 hasBeenHurt + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_20647 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_20646 shouldContinueExecuting +c net/minecraft/class_4111 net/minecraft/entity/ai/brain/task/CreateBabyVillagerTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18974 startExecuting + m (Lnet/minecraft/class_1646;)Z method_18972 canBreed + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_18973 shouldContinueExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18975 updateTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;)V method_19572 setHomePosition + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18976 resetTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Ljava/util/Optional; method_19573 findHomePosition + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_1646;)V method_20643 breed + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19571 shouldExecute + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;)Z method_20642 canReachHomePosition + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_1646;)Ljava/util/Optional; method_18970 createChild + m (Lnet/minecraft/class_1296;)Z method_24631 func_233999_a_ + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;)Z method_20644 func_220481_b_ + f J field_18368 duration +c net/minecraft/class_4131 net/minecraft/util/WeightedList + m (Lnet/minecraft/class_4131;)Ljava/util/List; method_28337 func_234001_a_ + m (Ljava/util/Random;)Lnet/minecraft/class_4131; method_23333 func_226314_a_ + m ()Lnet/minecraft/class_4131; method_19029 func_226309_a_ + m (Ljava/util/Random;)Ljava/lang/Object; method_23337 func_226318_b_ + m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28338 func_234002_a_ + m (Ljava/lang/Object;I)Lnet/minecraft/class_4131; method_19031 func_226313_a_ + m (Ljava/lang/Object;)D method_23332 func_234003_a_ + m ()Ljava/util/stream/Stream; method_19032 func_220655_b + m (Ljava/util/Random;Lnet/minecraft/class_4131$class_4132;)V method_23334 func_234004_a_ + m ()Z method_28339 func_234005_b_ + m ()Ljava/lang/String; toString toString + f Ljava/util/List; field_18397 field_220658_a + f Ljava/util/Random; field_18398 random +c net/minecraft/class_4131$1 net/minecraft/util/WeightedList$1 +c net/minecraft/class_4131$class_4132 net/minecraft/util/WeightedList$Entry + m (Lnet/minecraft/class_4131$class_4132;)I method_28342 func_234009_b_ + m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28341 func_234008_a_ + m (Lnet/minecraft/class_4131$class_4132;)D method_23339 func_234010_c_ + m ()Ljava/lang/String; toString toString + m ()Ljava/lang/Object; method_19035 func_220647_b + m (F)V method_19034 func_220648_a + m (Lnet/minecraft/class_4131$class_4132;F)V method_23340 func_234007_a_ + m ()D method_19033 func_220649_a + m (Lnet/minecraft/class_4131$class_4132;)Ljava/lang/Object; method_28340 func_234006_a_ + f D field_18402 field_220653_d + f I field_18401 field_220652_c + f Ljava/lang/Object; field_18400 field_220651_b +c net/minecraft/class_4131$class_4132$1 net/minecraft/util/WeightedList$Entry$1 + m (Lcom/mojang/serialization/Dynamic;Ljava/lang/Object;)Lnet/minecraft/class_4131$class_4132; method_28344 func_234012_a_ + m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; encode encode + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_4131$class_4132;)Lcom/mojang/datafixers/util/Pair; method_28345 func_234013_a_ + m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; decode decode + m (Lnet/minecraft/class_4131$class_4132;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_28343 encode + f Lcom/mojang/serialization/Codec; field_24666 field_234011_a_ +c net/minecraft/class_4214 net/minecraft/entity/ai/brain/task/WakeUpTask +c net/minecraft/class_4133 net/minecraft/entity/ai/brain/task/SpawnGolemTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_21641 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_26336 shouldContinueExecuting + m (Lnet/minecraft/class_4095;Lnet/minecraft/class_4208;)V method_19613 func_225460_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)V method_26335 execute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_21642 startExecuting + f J field_19426 field_225461_a +c net/minecraft/class_4983 net/minecraft/entity/ai/brain/task/FarmerWorkTask + m (Lnet/minecraft/class_1646;)V method_26333 bakeBread + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_4208;Lnet/minecraft/class_2680;)V method_26334 compost + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_30232 func_242308_a + f Ljava/util/List; field_23226 field_234014_b_ +c net/minecraft/class_5327 net/minecraft/entity/ai/brain/task/FindJobTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;Lnet/minecraft/class_1646;)V method_29267 func_234023_a_ + m (Lnet/minecraft/class_1646;)V method_29261 func_234019_a_ + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)Z method_29262 func_234020_a_ + m (Lnet/minecraft/class_4158;Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;)Z method_29260 func_234018_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;Z)V method_29266 func_234022_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_29264 shouldExecute + m (Ljava/util/Optional;Lnet/minecraft/class_2338;Lnet/minecraft/class_1646;)Z method_29263 func_234021_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_29265 startExecuting + f F field_25158 field_234017_b_ +c net/minecraft/class_1330 net/minecraft/entity/ai/controller/BodyController + m ()V method_20245 func_220665_d + m ()V method_20244 func_220664_c + m ()Z method_20247 func_220662_f + m ()V method_20243 func_220663_b + m ()Z method_20246 func_220661_e + m ()V method_6224 updateRenderAngles + f Lnet/minecraft/class_1308; field_6356 mob + f F field_6354 prevRenderYawHead + f I field_6355 rotationTickCounter +c net/minecraft/class_1331 net/minecraft/entity/ai/controller/FlyingMovementController + f Z field_20350 field_226324_j_ + f I field_20349 field_226323_i_ +c net/minecraft/class_1332 net/minecraft/entity/ai/controller/DolphinLookController + f I field_6357 field_205139_h +c net/minecraft/class_1333 net/minecraft/entity/ai/controller/LookController + m ()D method_6227 getLookPosY + m ()D method_6225 getLookPosX + m (Lnet/minecraft/class_243;)V method_19615 setLookPosition + m ()F method_20250 getTargetPitch + m (FFF)F method_6229 clampedRotate + m ()V method_6231 tick + m ()D method_6228 getLookPosZ + m (DDDFF)V method_6230 setLookPosition + m ()Z method_6232 getIsLooking + m ()Z method_20433 shouldResetPitch + m ()F method_20251 getTargetYaw + m (DDD)V method_20248 setLookPosition + m (Lnet/minecraft/class_1297;FF)V method_6226 setLookPositionWithEntity + m (Lnet/minecraft/class_1297;)D method_20249 getEyePosition + f Z field_6360 isLooking + f F field_6358 deltaLookPitch + f F field_6359 deltaLookYaw + f Lnet/minecraft/class_1308; field_6361 mob + f D field_6362 posZ + f D field_6363 posY + f D field_6364 posX +c net/minecraft/class_1334 net/minecraft/entity/ai/controller/JumpController + m ()V method_6234 tick + m ()V method_6233 setJumping + f Lnet/minecraft/class_1308; field_6366 mob + f Z field_6365 isJumping +c net/minecraft/class_1335 net/minecraft/entity/ai/controller/MovementController + m ()Z method_6241 isUpdating + m (FF)Z method_25946 func_234024_b_ + m (DDDD)V method_6239 setMoveTo + m ()D method_6235 getY + m ()D method_6236 getX + m (FF)V method_6243 strafe + m (FFF)F method_6238 limitAngle + m ()D method_6242 getSpeed + m ()V method_6240 tick + m ()D method_6237 getZ + f D field_6369 posY + f D field_6370 posX + f Lnet/minecraft/class_1308; field_6371 mob + f D field_6372 speed + f D field_6367 posZ + f F field_6373 moveStrafe + f F field_6368 moveForward + f Lnet/minecraft/class_1335$class_1336; field_6374 action +c net/minecraft/class_1335$class_1336 net/minecraft/entity/ai/controller/MovementController$Action + m (Ljava/lang/String;)Lnet/minecraft/class_1335$class_1336; valueOf valueOf + m ()[Lnet/minecraft/class_1335$class_1336; values values + f Lnet/minecraft/class_1335$class_1336; field_6377 WAIT + f Lnet/minecraft/class_1335$class_1336; field_6378 MOVE_TO + f [Lnet/minecraft/class_1335$class_1336; field_6375 $VALUES + f Lnet/minecraft/class_1335$class_1336; field_6376 STRAFE + f Lnet/minecraft/class_1335$class_1336; field_6379 JUMPING +c net/minecraft/class_1337 net/minecraft/entity/ai/goal/BegGoal + m (Lnet/minecraft/class_1657;)Z method_6244 hasTemptationItemInHand + f F field_6380 minPlayerDistance + f Lnet/minecraft/class_1493; field_6384 wolf + f Lnet/minecraft/class_1657; field_6383 player + f Lnet/minecraft/class_4051; field_18085 playerPredicate + f I field_6382 timeoutCounter + f Lnet/minecraft/class_1937; field_6381 world +c net/minecraft/class_1338 net/minecraft/entity/ai/goal/AvoidEntityGoal + m (Lnet/minecraft/class_1309;)Z method_6246 func_200828_b + m (Lnet/minecraft/class_1309;)Z method_6245 func_203782_a + f D field_6385 farSpeed + f F field_6386 avoidDistance + f Ljava/util/function/Predicate; field_6393 avoidTargetSelector + f Lnet/minecraft/class_4051; field_18084 builtTargetSelector + f Ljava/util/function/Predicate; field_6388 field_203784_k + f Ljava/lang/Class; field_6392 classToAvoid + f Lnet/minecraft/class_1309; field_6390 avoidTarget + f Lnet/minecraft/class_11; field_6387 path + f Lnet/minecraft/class_1314; field_6391 entity + f Lnet/minecraft/class_1408; field_6394 navigation + f D field_6395 nearSpeed +c net/minecraft/class_1339 net/minecraft/entity/ai/goal/BreakDoorGoal + m (Lnet/minecraft/class_1267;)Z method_19994 func_220696_a + m ()I method_16462 func_220697_f + f I field_16596 timeToBreak + f I field_6397 previousBreakProgress + f I field_6398 breakingTime + f Ljava/util/function/Predicate; field_19003 difficultyPredicate +c net/minecraft/class_1340 net/minecraft/entity/ai/goal/BoatGoals + m (Ljava/lang/String;)Lnet/minecraft/class_1340; valueOf valueOf + m ()[Lnet/minecraft/class_1340; values values + f Lnet/minecraft/class_1340; field_6401 GO_TO_BOAT + f Lnet/minecraft/class_1340; field_6400 GO_IN_BOAT_DIRECTION + f [Lnet/minecraft/class_1340; field_6399 $VALUES +c net/minecraft/class_1341 net/minecraft/entity/ai/goal/BreedGoal + m ()Lnet/minecraft/class_1429; method_6250 getNearbyMate + m ()V method_6249 spawnBaby + f Lnet/minecraft/class_1429; field_6406 targetMate + f Ljava/lang/Class; field_6403 mateClass + f Lnet/minecraft/class_1429; field_6404 animal + f I field_6402 spawnBabyDelay + f Lnet/minecraft/class_4051; field_18086 field_220689_d + f Lnet/minecraft/class_1937; field_6405 world + f D field_6407 moveSpeed +c net/minecraft/class_1342 net/minecraft/entity/ai/goal/BreatheAirGoal + m ()V method_6252 navigate + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_6253 canBreatheAt + f Lnet/minecraft/class_1314; field_6408 field_205142_a +c net/minecraft/class_1373 net/minecraft/entity/ai/goal/CatSitOnBlockGoal + m (Lnet/minecraft/class_2742;)Ljava/lang/Boolean; method_27794 func_234026_a_ + m (Lnet/minecraft/class_4970$class_4971;)Z method_27793 func_234025_a_ + f Lnet/minecraft/class_1451; field_6545 cat +c net/minecraft/class_3697 net/minecraft/entity/ai/goal/CatLieOnBedGoal + f Lnet/minecraft/class_1451; field_16282 cat +c net/minecraft/class_1343 net/minecraft/entity/ai/goal/InteractDoorGoal + m (Z)V method_19995 toggleDoor + m ()Z method_6256 canDestroy + f F field_6409 entityPositionZ + f Z field_6411 hasStoppedDoorInteraction + f Z field_6412 doorInteract + f F field_6410 entityPositionX + f Lnet/minecraft/class_1308; field_6413 entity + f Lnet/minecraft/class_2338; field_6414 doorPosition +c net/minecraft/class_1357 net/minecraft/entity/ai/goal/DolphinJumpGoal + m (Lnet/minecraft/class_2338;III)Z method_6282 isAirAbove + m (Lnet/minecraft/class_2338;III)Z method_6284 canJumpTo + f Z field_6473 inWater + f I field_6472 field_220712_c + f [I field_6474 JUMP_DISTANCES + f Lnet/minecraft/class_1433; field_6471 dolphin +c net/minecraft/class_1344 net/minecraft/entity/ai/goal/FleeSunGoal + m ()Z method_18250 isPossibleShelter + m ()Lnet/minecraft/class_243; method_6257 findPossibleShelter + f D field_6416 shelterY + f D field_6417 shelterX + f Lnet/minecraft/class_1314; field_6419 creature + f Lnet/minecraft/class_1937; field_6418 world + f D field_6420 movementSpeed + f D field_6415 shelterZ +c net/minecraft/class_1345 net/minecraft/entity/ai/goal/EatGrassGoal + m ()I method_6258 getEatingGrassTimer + f I field_6422 eatingGrassTimer + f Lnet/minecraft/class_1308; field_6424 grassEaterEntity + f Lnet/minecraft/class_1937; field_6421 entityWorld + f Ljava/util/function/Predicate; field_6423 IS_GRASS +c net/minecraft/class_1346 net/minecraft/entity/ai/goal/FollowBoatGoal + f Lnet/minecraft/class_1314; field_6426 swimmer + f Lnet/minecraft/class_1340; field_6425 field_205146_d + f Lnet/minecraft/class_1657; field_6427 player + f I field_6428 field_205143_a +c net/minecraft/class_1347 net/minecraft/entity/ai/goal/SwimGoal + f Lnet/minecraft/class_1308; field_6429 entity +c net/minecraft/class_1348 net/minecraft/entity/ai/goal/FollowMobGoal + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1308;)Z method_6259 func_210291_a + f Lnet/minecraft/class_1408; field_6434 navigation + f Lnet/minecraft/class_1308; field_6433 followingEntity + f F field_6435 areaSize + f D field_6430 speedModifier + f Ljava/util/function/Predicate; field_6436 followPredicate + f Lnet/minecraft/class_1308; field_6432 entity + f F field_6437 oldWaterCost + f F field_6438 stopDistance + f I field_6431 timeToRecalcPath +c net/minecraft/class_1349 net/minecraft/entity/ai/goal/FollowSchoolLeaderGoal + m (Lnet/minecraft/class_1425;)Z method_6260 func_212823_b + m (Lnet/minecraft/class_1425;)Z method_6262 func_212824_c + m (Lnet/minecraft/class_1425;)I method_6261 getNewCooldown + f I field_6439 cooldown + f I field_6440 navigateTimer + f Lnet/minecraft/class_1425; field_6441 taskOwner +c net/minecraft/class_1353 net/minecraft/entity/ai/goal/FollowParentGoal + f D field_6453 moveSpeed + f Lnet/minecraft/class_1429; field_6455 childAnimal + f Lnet/minecraft/class_1429; field_6452 parentAnimal + f I field_6454 delayCounter +c net/minecraft/class_1350 net/minecraft/entity/ai/goal/FollowOwnerGoal + m (II)I method_23342 getRandomNumber + m (III)Z method_23343 tryToTeleportToLocation + m ()V method_23345 tryToTeleportNearEntity + m (Lnet/minecraft/class_2338;)Z method_23344 isTeleportFriendlyBlock + f F field_6447 oldWaterCost + f Lnet/minecraft/class_1321; field_6448 tameable + f F field_6450 maxDist + f I field_6443 timeToRecalcPath + f Lnet/minecraft/class_1408; field_6446 navigator + f F field_6449 minDist + f Lnet/minecraft/class_4538; field_6445 world + f Z field_21078 teleportToLeaves + f Lnet/minecraft/class_1309; field_6444 owner + f D field_6442 followSpeed +c net/minecraft/class_1355 net/minecraft/entity/ai/goal/GoalSelector + m (Lnet/minecraft/class_4135;Lnet/minecraft/class_1352$class_4134;)V method_19044 func_220876_a + m ()V method_6275 tick + m (Lnet/minecraft/class_4135;)Z method_19051 func_220881_e + m (Lnet/minecraft/class_1352;)V method_6280 removeGoal + m (Lnet/minecraft/class_1352;Lnet/minecraft/class_4135;)Z method_20649 func_220884_a + m (Lnet/minecraft/class_1352$class_4134;Z)V method_6276 setFlag + m (Lnet/minecraft/class_1352$class_4134;Lnet/minecraft/class_4135;)V method_19041 func_220885_a + m (Lnet/minecraft/class_1352;Lnet/minecraft/class_4135;)Z method_20650 func_220882_b + m (Lnet/minecraft/class_4135;)Z method_19046 func_220889_b + m (Lnet/minecraft/class_1352$class_4134;)V method_6273 enableFlag + m (Lnet/minecraft/class_4135;)V method_19043 func_220877_a + m (Lnet/minecraft/class_4135;)Z method_19050 func_220883_d + m ()Ljava/util/stream/Stream; method_19048 getRunningGoals + m (Lnet/minecraft/class_1352$class_4134;)V method_6274 disableFlag + m (Lnet/minecraft/class_4135;)Z method_19049 func_220879_c + m (Lnet/minecraft/class_4135;Lnet/minecraft/class_1352$class_4134;)Z method_19047 func_220887_b + m (ILnet/minecraft/class_1352;)V method_6277 addGoal + f Ljava/util/Set; field_6461 goals + f Ljava/util/Map; field_18411 flagGoals + f I field_6464 tickRate + f Lnet/minecraft/class_4135; field_18410 DUMMY + f Ljava/util/EnumSet; field_6462 disabledFlags + f Ljava/util/function/Supplier; field_6463 profiler + f Lorg/apache/logging/log4j/Logger; field_6466 LOGGER +c net/minecraft/class_1355$1 net/minecraft/entity/ai/goal/GoalSelector$1 +c net/minecraft/class_1355$2 net/minecraft/entity/ai/goal/GoalSelector$2 +c net/minecraft/class_1352 net/minecraft/entity/ai/goal/Goal + m ()V method_6268 tick + m (Ljava/util/EnumSet;)V method_6265 setMutexFlags + m ()Ljava/util/EnumSet; method_6271 getMutexFlags + m ()Ljava/lang/String; toString toString + m ()Z method_6267 isPreemptible + m ()Z method_6264 shouldExecute + m ()V method_6269 startExecuting + m ()Z method_6266 shouldContinueExecuting + m ()V method_6270 resetTask + f Ljava/util/EnumSet; field_6451 flags +c net/minecraft/class_1352$class_4134 net/minecraft/entity/ai/goal/Goal$Flag + m (Ljava/lang/String;)Lnet/minecraft/class_1352$class_4134; valueOf valueOf + m ()[Lnet/minecraft/class_1352$class_4134; values values + f Lnet/minecraft/class_1352$class_4134; field_18405 MOVE + f Lnet/minecraft/class_1352$class_4134; field_18407 JUMP + f Lnet/minecraft/class_1352$class_4134; field_18406 LOOK + f [Lnet/minecraft/class_1352$class_4134; field_18409 $VALUES + f Lnet/minecraft/class_1352$class_4134; field_18408 TARGET +c net/minecraft/class_1358 net/minecraft/entity/ai/goal/LookAtWithoutMovingGoal +c net/minecraft/class_5274 net/minecraft/entity/ai/goal/PatrolVillageGoal + m ()Lnet/minecraft/class_243; method_27927 func_234033_l_ + m (Lnet/minecraft/class_4076;)Lnet/minecraft/class_2338; method_27923 func_234029_a_ + m ()Lnet/minecraft/class_243; method_27926 func_234032_k_ + m ()Lnet/minecraft/class_243; method_27925 func_234031_j_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4076;)Z method_27924 func_234030_a_ + m ()Lnet/minecraft/class_4076; method_27928 func_234034_m_ + m (Lnet/minecraft/class_4158;)Z method_27921 func_234027_a_ + m (Lnet/minecraft/class_1646;)Z method_27922 canSpawnGolems +c net/minecraft/class_1360 net/minecraft/entity/ai/goal/LandOnOwnersShoulderGoal + f Z field_6480 isSittingOnShoulder + f Lnet/minecraft/class_1471; field_6478 entity + f Lnet/minecraft/class_3222; field_6479 owner +c net/minecraft/class_4017 net/minecraft/entity/ai/goal/JumpGoal +c net/minecraft/class_1362 net/minecraft/entity/ai/goal/LlamaFollowCaravanGoal + m (Lnet/minecraft/class_1501;I)Z method_6285 firstIsLeashed + m (Lnet/minecraft/class_1297;)Z method_19616 func_220719_a + f I field_6489 distCheckCounter + f Lnet/minecraft/class_1501; field_6488 llama + f D field_6487 speedModifier +c net/minecraft/class_1359 net/minecraft/entity/ai/goal/LeapAtTargetGoal + f F field_6475 leapMotionY + f Lnet/minecraft/class_1309; field_6477 leapTarget + f Lnet/minecraft/class_1308; field_6476 leaper +c net/minecraft/class_1361 net/minecraft/entity/ai/goal/LookAtGoal + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)Z method_18414 func_220715_a + f F field_6482 maxDistance + f I field_6483 lookTime + f Ljava/lang/Class; field_6485 watchedClass + f Lnet/minecraft/class_1297; field_6484 closestEntity + f Lnet/minecraft/class_1308; field_6486 entity + f Lnet/minecraft/class_4051; field_18087 field_220716_e + f F field_6481 chance +c net/minecraft/class_1366 net/minecraft/entity/ai/goal/MeleeAttackGoal + m (Lnet/minecraft/class_1309;D)V method_6288 checkAndPerformAttack + m (Lnet/minecraft/class_1309;)D method_6289 getAttackReachSqr + m ()Z method_28347 func_234040_h_ + m ()I method_28348 func_234041_j_ + m ()V method_28346 func_234039_g_ + m ()I method_28349 func_234042_k_ + f Lnet/minecraft/class_11; field_6509 path + f J field_19200 field_220720_k + f D field_6500 speedTowardsTarget + f I field_6501 delayCounter + f Z field_6502 longMemory + f I field_24667 field_234037_i_ + f Lnet/minecraft/class_1314; field_6503 attacker + f I field_6504 attackInterval + f D field_6506 targetZ + f D field_6508 targetX + f D field_6507 targetY +c net/minecraft/class_1364 net/minecraft/entity/ai/goal/LookAtCustomerGoal + f Lnet/minecraft/class_3988; field_6495 villager +c net/minecraft/class_4291 net/minecraft/entity/ai/goal/ReturnToVillageGoal +c net/minecraft/class_1367 net/minecraft/entity/ai/goal/MoveToBlockGoal + m ()Z method_6294 shouldMove + m ()D method_6291 getTargetDistanceSq + m ()Lnet/minecraft/class_2338; method_30953 func_241846_j + m ()Z method_6295 getIsAboveDestination + m ()V method_6290 func_220725_g + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_6296 shouldMoveTo + m (Lnet/minecraft/class_1314;)I method_6293 getRunDelay + m ()Z method_6292 searchForDestination + f I field_6510 searchLength + f I field_6519 field_203113_j + f D field_6514 movementSpeed + f Lnet/minecraft/class_1314; field_6516 creature + f I field_6511 maxStayTicks + f I field_6517 timeoutCounter + f I field_6515 field_203112_e + f Lnet/minecraft/class_2338; field_6512 destinationBlock + f Z field_6513 isAboveDestination + f I field_6518 runDelay +c net/minecraft/class_1368 net/minecraft/entity/ai/goal/MoveThroughVillageGoal + m (Lnet/minecraft/class_2338;)Z method_19052 func_220733_a + m ()V method_6297 resizeDoorList + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)D method_19053 func_220734_a + f I field_18414 maxDistance + f Ljava/util/List; field_18413 doorList + f Lnet/minecraft/class_1314; field_6525 entity + f Lnet/minecraft/class_11; field_6523 path + f Ljava/util/function/BooleanSupplier; field_18415 booleanSupplier + f Lnet/minecraft/class_2338; field_18412 field_220735_d + f D field_6520 movementSpeed + f Z field_6524 isNocturnal +c net/minecraft/class_1369 net/minecraft/entity/ai/goal/MoveTowardsTargetGoal + f D field_6531 movePosZ + f D field_6530 speed + f F field_6532 maxTargetDistance + f Lnet/minecraft/class_1314; field_6528 creature + f D field_6527 movePosX + f D field_6526 movePosY + f Lnet/minecraft/class_1309; field_6529 targetEntity +c net/minecraft/class_1370 net/minecraft/entity/ai/goal/MoveTowardsRestrictionGoal + f D field_6534 movePosY + f Lnet/minecraft/class_1314; field_6536 creature + f D field_6533 movePosZ + f D field_6537 movementSpeed + f D field_6535 movePosX +c net/minecraft/class_1372 net/minecraft/entity/ai/goal/ShowVillagerFlowerGoal + f Lnet/minecraft/class_4051; field_18089 field_220738_a + f Lnet/minecraft/class_1646; field_6544 villager + f I field_6543 lookTime + f Lnet/minecraft/class_1439; field_6542 ironGolem +c net/minecraft/class_1371 net/minecraft/entity/ai/goal/OcelotAttackGoal + f Lnet/minecraft/class_1309; field_6539 target + f Lnet/minecraft/class_1308; field_6541 entity + f Lnet/minecraft/class_1922; field_6538 world + f I field_6540 attackCountdown +c net/minecraft/class_1374 net/minecraft/entity/ai/goal/PanicGoal + m ()Z method_26337 isRunning + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_1297;II)Lnet/minecraft/class_2338; method_6300 getRandPos + m ()Z method_6301 findRandomPosition + f D field_6546 randPosY + f D field_6550 randPosZ + f Lnet/minecraft/class_1314; field_6549 creature + f D field_6548 speed + f D field_6547 randPosX + f Z field_23227 running +c net/minecraft/class_4255 net/minecraft/entity/ai/goal/OpenDoorGoal + f Z field_19004 closeDoor + f I field_19005 closeDoorTemporisation +c net/minecraft/class_3759 net/minecraft/entity/ai/goal/MoveTowardsRaidGoal + m (Lnet/minecraft/class_3765;Lnet/minecraft/class_3763;)Z method_16466 func_220742_a + m (Lnet/minecraft/class_3765;)V method_16465 func_220743_a + f Lnet/minecraft/class_3763; field_16597 raider +c net/minecraft/class_1379 net/minecraft/entity/ai/goal/RandomWalkingGoal + m ()V method_6304 makeUpdate + m ()Lnet/minecraft/class_243; method_6302 getPosition + m (I)V method_6303 setExecutionChance + f Lnet/minecraft/class_1314; field_6566 creature + f D field_6562 y + f D field_6563 x + f I field_6564 executionChance + f D field_6561 z + f Z field_6565 mustUpdate + f Z field_24463 field_234053_h_ + f D field_6567 speed +c net/minecraft/class_1376 net/minecraft/entity/ai/goal/LookRandomlyGoal + f I field_6555 idleTime + f Lnet/minecraft/class_1308; field_6556 idleEntity + f D field_6554 lookX + f D field_6553 lookZ +c net/minecraft/class_1381 net/minecraft/entity/ai/goal/RangedAttackGoal + f I field_6579 seeTime + f Lnet/minecraft/class_1309; field_6580 attackTarget + f I field_6578 attackIntervalMin + f Lnet/minecraft/class_1308; field_6583 entityHost + f D field_6586 entityMoveSpeed + f Lnet/minecraft/class_1603; field_6582 rangedAttackEntityHost + f F field_6585 attackRadius + f I field_6577 maxRangedAttackTime + f F field_6584 maxAttackDistance + f I field_6581 rangedAttackTime +c net/minecraft/class_1378 net/minecraft/entity/ai/goal/RandomSwimmingGoal +c net/minecraft/class_1383 net/minecraft/entity/ai/goal/RangedCrossbowAttackGoal + m ()Z method_6310 func_220745_g + m ()Z method_19996 func_220746_h + m ()Z method_16352 func_220747_j + f Lnet/minecraft/class_1588; field_6593 field_220748_a + f I field_6592 field_220752_e + f D field_6590 field_220750_c + f I field_25697 field_241382_h_ + f I field_16529 field_220753_f + f Lnet/minecraft/class_1383$class_3744; field_16528 field_220749_b + f Lnet/minecraft/class_4801; field_25696 field_241381_a_ + f F field_6591 field_220751_d +c net/minecraft/class_1383$class_3744 net/minecraft/entity/ai/goal/RangedCrossbowAttackGoal$CrossbowState + m (Ljava/lang/String;)Lnet/minecraft/class_1383$class_3744; valueOf valueOf + m ()[Lnet/minecraft/class_1383$class_3744; values values + f Lnet/minecraft/class_1383$class_3744; field_16534 UNCHARGED + f [Lnet/minecraft/class_1383$class_3744; field_16531 $VALUES + f Lnet/minecraft/class_1383$class_3744; field_16533 READY_TO_ATTACK + f Lnet/minecraft/class_1383$class_3744; field_16530 CHARGING + f Lnet/minecraft/class_1383$class_3744; field_16532 CHARGED +c net/minecraft/class_1380 net/minecraft/entity/ai/goal/RangedBowAttackGoal + m (I)V method_6305 setAttackCooldown + m ()Z method_6306 isBowInMainhand + f Lnet/minecraft/class_1588; field_6576 entity + f Z field_6571 strafingBackwards + f F field_6570 maxAttackDistance + f I field_6575 attackCooldown + f Z field_6573 strafingClockwise + f I field_6568 strafingTime + f D field_6569 moveSpeedAmp + f I field_6574 attackTime + f I field_6572 seeTime +c net/minecraft/class_1384 net/minecraft/entity/ai/goal/RestrictSunGoal + f Lnet/minecraft/class_1314; field_6594 entity +c net/minecraft/class_1382 net/minecraft/entity/ai/goal/BreakBlockGoal + m ()Z method_20307 func_220729_m + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_6307 playBreakingSound + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_6309 playBrokenSound + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1922;)Lnet/minecraft/class_2338; method_6308 findTarget + f I field_6588 breakingTime + f Lnet/minecraft/class_1308; field_6589 entity + f Lnet/minecraft/class_2248; field_6587 block +c net/minecraft/class_1386 net/minecraft/entity/ai/goal/SitGoal + f Lnet/minecraft/class_1321; field_6597 tameable +c net/minecraft/class_1387 net/minecraft/entity/ai/goal/RunAroundLikeCrazyGoal + f D field_6600 targetX + f D field_6599 targetY + f D field_6603 targetZ + f Lnet/minecraft/class_1496; field_6602 horseHost + f D field_6601 speed +c net/minecraft/class_4018 net/minecraft/entity/ai/goal/MoveThroughVillageAtNightGoal + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)D method_19054 func_220755_a + m ()V method_18252 func_220754_g + f Lnet/minecraft/class_1314; field_17944 entity + f I field_17945 field_220757_b + f Lnet/minecraft/class_2338; field_17947 field_220758_c +c net/minecraft/class_1389 net/minecraft/entity/ai/goal/CreeperSwellGoal + f Lnet/minecraft/class_1548; field_6608 swellingCreeper + f Lnet/minecraft/class_1309; field_6609 creeperAttackTarget +c net/minecraft/class_1390 net/minecraft/entity/ai/goal/TradeWithPlayerGoal + f Lnet/minecraft/class_3988; field_6610 villager +c net/minecraft/class_1391 net/minecraft/entity/ai/goal/TemptGoal + m (Lnet/minecraft/class_1799;)Z method_6312 isTempting + m ()Z method_16081 isScaredByPlayerMovement + m ()Z method_6313 isRunning + f D field_6614 targetX + f D field_6611 targetY + f Lnet/minecraft/class_1856; field_6622 temptItem + f D field_6615 speed + f Z field_6620 scaredByPlayerMovement + f Lnet/minecraft/class_4051; field_18090 ENTITY_PREDICATE + f I field_6612 delayTemptCounter + f Lnet/minecraft/class_1314; field_6616 creature + f D field_6619 pitch + f Z field_6613 isRunning + f D field_6621 targetZ + f Lnet/minecraft/class_1657; field_6617 closestPlayer + f D field_6618 yaw +c net/minecraft/class_3993 net/minecraft/entity/ai/goal/UseItemGoal + f Lnet/minecraft/class_3414; field_18280 field_220769_d + f Ljava/util/function/Predicate; field_17757 field_220768_c + f Lnet/minecraft/class_1799; field_17756 stack + f Lnet/minecraft/class_1308; field_17755 user +c net/minecraft/class_1393 net/minecraft/entity/ai/goal/FindWaterGoal + f Lnet/minecraft/class_1314; field_6625 creature +c net/minecraft/class_1394 net/minecraft/entity/ai/goal/WaterAvoidingRandomWalkingGoal + f F field_6626 probability +c net/minecraft/class_1395 net/minecraft/entity/ai/goal/WaterAvoidingRandomFlyingGoal + m ()Lnet/minecraft/class_243; method_6314 getTreePos +c net/minecraft/class_1396 net/minecraft/entity/ai/goal/ZombieAttackGoal + f I field_6627 raiseArmTicks + f Lnet/minecraft/class_1642; field_6628 zombie +c net/minecraft/class_4135 net/minecraft/entity/ai/goal/PrioritizedGoal + m ()I method_19057 getPriority + m ()Z method_19056 isRunning + m (Lnet/minecraft/class_4135;)Z method_19055 isPreemptedBy + m ()Lnet/minecraft/class_1352; method_19058 getGoal + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + f Lnet/minecraft/class_1352; field_18416 inner + f I field_18417 priority + f Z field_18418 running +c net/minecraft/class_1397 net/minecraft/entity/ai/goal/DefendVillageTargetGoal + f Lnet/minecraft/class_1309; field_6630 villageAgressorTarget + f Lnet/minecraft/class_1439; field_6629 irongolem + f Lnet/minecraft/class_4051; field_19340 distancePredicate +c net/minecraft/class_1400 net/minecraft/entity/ai/goal/NearestAttackableTargetGoal + m (Lnet/minecraft/class_1309;)V method_24632 setNearestTarget + m (D)Lnet/minecraft/class_238; method_6321 getTargetableArea + m ()V method_18415 findNearestTarget + f I field_6641 targetChance + f Lnet/minecraft/class_1309; field_6644 nearestTarget + f Lnet/minecraft/class_4051; field_6642 targetEntitySelector + f Ljava/lang/Class; field_6643 targetClass +c net/minecraft/class_1399 net/minecraft/entity/ai/goal/HurtByTargetGoal + m ()V method_6317 alertOthers + m ([Ljava/lang/Class;)Lnet/minecraft/class_1399; method_6318 setCallsForHelp + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_6319 setAttackTarget + f [Ljava/lang/Class; field_6637 excludedReinforcementTypes + f [Ljava/lang/Class; field_6640 reinforcementTypes + f Lnet/minecraft/class_4051; field_18091 field_220795_a + f Z field_6639 entityCallsForHelp + f I field_6638 revengeTimerOld +c net/minecraft/class_3909 net/minecraft/entity/ai/goal/NearestAttackableTargetExpiringGoal + m ()V method_17353 tickCooldown + m ()I method_17352 getCooldown + f I field_17282 cooldown +c net/minecraft/class_3760 net/minecraft/entity/ai/goal/ToggleableNearestAttackableTargetGoal + m (Z)V method_17351 func_220783_a + f Z field_17281 field_220784_i +c net/minecraft/class_1403 net/minecraft/entity/ai/goal/OwnerHurtByTargetGoal + f Lnet/minecraft/class_1309; field_6655 attacker + f I field_6653 timestamp + f Lnet/minecraft/class_1321; field_6654 tameable +c net/minecraft/class_1404 net/minecraft/entity/ai/goal/NonTamedTargetGoal + f Lnet/minecraft/class_1321; field_6656 tameable +c net/minecraft/class_5398 net/minecraft/entity/ai/goal/ResetAngerGoal + m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_5354; method_29930 func_241386_a_ + m ()Ljava/util/List; method_29933 func_241389_h_ + m ()Z method_29932 shouldGetRevengeOnPlayer + m (Lnet/minecraft/class_1308;)Z method_29931 func_241387_b_ + f Lnet/minecraft/class_1308; field_25604 field_241383_a_ + f Z field_25605 field_241384_b_ + f I field_25606 revengeTimer +c net/minecraft/class_1406 net/minecraft/entity/ai/goal/OwnerHurtTargetGoal + f Lnet/minecraft/class_1309; field_6667 attacker + f I field_6665 timestamp + f Lnet/minecraft/class_1321; field_6666 tameable +c net/minecraft/class_1405 net/minecraft/entity/ai/goal/TargetGoal + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4051;)Z method_6328 isSuitableTarget + m ()D method_6326 getTargetDistance + m (Lnet/minecraft/class_1309;)Z method_6329 canEasilyReach + m (I)Lnet/minecraft/class_1405; method_6330 setUnseenMemoryTicks + f Lnet/minecraft/class_1309; field_6664 target + f I field_6659 targetUnseenTicks + f I field_6662 targetSearchStatus + f I field_6657 unseenMemoryTicks + f I field_6661 targetSearchDelay + f Z field_6658 shouldCheckSight + f Z field_6663 nearbyOnly + f Lnet/minecraft/class_1308; field_6660 goalOwner +c net/minecraft/class_4139 net/minecraft/village/GossipType + m (Lnet/minecraft/class_4139;)Ljava/lang/String; method_19089 func_220930_a + m (Ljava/lang/String;)Lnet/minecraft/class_4139; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_4139; method_19090 byId + m ()[Lnet/minecraft/class_4139; values values + f Lnet/minecraft/class_4139; field_18428 TRADING + f Lnet/minecraft/class_4139; field_18425 MINOR_NEGATIVE + f Lnet/minecraft/class_4139; field_18426 MINOR_POSITIVE + f Lnet/minecraft/class_4139; field_18427 MAJOR_POSITIVE + f [Lnet/minecraft/class_4139; field_18436 $VALUES + f Ljava/util/Map; field_18435 BY_ID + f I field_19354 decayPerDay + f Lnet/minecraft/class_4139; field_18424 MAJOR_NEGATIVE + f I field_18434 decayPerTransfer + f Ljava/lang/String; field_18430 id + f I field_18432 max + f I field_18431 weight +c net/minecraft/class_4136 net/minecraft/village/GossipManager + m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_4136$class_4138;)Lcom/mojang/serialization/Dynamic; method_28351 func_234059_a_ + m (Lnet/minecraft/class_4139;Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer; method_19065 func_220915_a + m (Lnet/minecraft/class_4136;Ljava/util/Random;I)V method_19061 transferFrom + m (Ljava/util/UUID;Lnet/minecraft/class_4139;I)V method_19072 add + m (Lcom/mojang/serialization/Dynamic;)V method_19066 read + m (Lnet/minecraft/class_4139;II)I method_19063 mergeValuesForAddition + m (Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_19067 write + m (Ljava/util/UUID;)Lnet/minecraft/class_4136$class_4137; method_19076 func_220922_b + m (Lcom/mojang/serialization/DataResult;)Ljava/util/stream/Stream; method_28350 func_234056_a_ + m (Ljava/util/UUID;Ljava/util/function/Predicate;)I method_19073 getReputation + m (Ljava/util/Random;I)Ljava/util/Collection; method_19070 selectGossipsForTransfer + m (Lnet/minecraft/class_4136$class_4138;)V method_19060 func_234055_a_ + m (II)I method_19059 getMax + m ()Ljava/util/stream/Stream; method_19074 getGossipEntries + m (Ljava/util/UUID;)Lnet/minecraft/class_4136$class_4137; method_19071 getOrCreate + m (Ljava/util/Map$Entry;)Ljava/util/stream/Stream; method_19069 func_220917_a + m (Lnet/minecraft/class_4136$class_4138;)V method_19075 func_220923_b + m ()V method_20651 tick + f Ljava/util/Map; field_18419 uuid_gossips_mapping +c net/minecraft/class_4136$1 net/minecraft/village/GossipManager$1 +c net/minecraft/class_4136$class_4138 net/minecraft/village/GossipManager$GossipEntry + m ()Ljava/lang/String; toString toString + m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_19084 read + m ()I method_19083 weightedValue + m (Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_19087 write + f I field_18423 value + f Lnet/minecraft/class_4139; field_18422 type + f Ljava/util/UUID; field_18421 target +c net/minecraft/class_4136$class_4137 net/minecraft/village/GossipManager$Gossips + m (Ljava/util/function/Predicate;)I method_19081 weightedValue + m ()Z method_20654 isGossipTypeMapEmpty + m (Ljava/util/UUID;)Ljava/util/stream/Stream; method_19079 unpack + m (Ljava/util/function/Predicate;Lit/unimi/dsi/fastutil/objects/Object2IntMap$Entry;)Z method_19082 func_220898_a + m (Ljava/util/UUID;Lit/unimi/dsi/fastutil/objects/Object2IntMap$Entry;)Lnet/minecraft/class_4136$class_4138; method_19080 func_220897_a + m (Lnet/minecraft/class_4139;)V method_20655 removeGossipType + m (Lnet/minecraft/class_4136$class_4137;)Lit/unimi/dsi/fastutil/objects/Object2IntMap; method_19077 func_220899_a + m ()V method_20652 decay + m (Lit/unimi/dsi/fastutil/objects/Object2IntMap$Entry;)I method_19078 func_220894_a + m (Lnet/minecraft/class_4139;)V method_20653 putGossipType + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_18420 gossipTypeMap +c net/minecraft/class_4831 net/minecraft/entity/ai/brain/Memory + m ()Ljava/lang/String; toString toString + m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28353 createCodec + m ()V method_24913 tick + m (Lcom/mojang/serialization/Codec;Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28354 func_234067_a_ + m (Ljava/lang/Object;J)Lnet/minecraft/class_4831; method_24636 create + m (Lnet/minecraft/class_4831;)Ljava/lang/Object; method_28357 func_234071_b_ + m ()Ljava/lang/Object; method_24637 getValue + m (Ljava/lang/Object;Ljava/util/Optional;)Lnet/minecraft/class_4831; method_28356 func_234070_a_ + m ()Z method_24634 isForgotten + m ()Z method_24914 isForgettable + m (Lnet/minecraft/class_4831;)Ljava/util/Optional; method_28352 func_234065_a_ + m (Ljava/lang/Object;)Lnet/minecraft/class_4831; method_28355 create + f Ljava/lang/Object; field_22330 value + f J field_22331 timeToLive +c net/minecraft/class_4140 net/minecraft/entity/ai/brain/memory/MemoryModuleType + m ()Ljava/util/Optional; method_19093 getMemoryCodec + m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4140; method_19092 registerWithCodec + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;)Lnet/minecraft/class_4140; method_20738 register + f Lnet/minecraft/class_4140; field_22344 NEAREST_VISIBLE_ADULT_HOGLINS + f Lnet/minecraft/class_4140; field_25754 GOLEM_DETECTED_RECENTLY + f Lnet/minecraft/class_4140; field_20616 LAST_WOKEN + f Lnet/minecraft/class_4140; field_18447 INTERACTION_TARGET + f Lnet/minecraft/class_4140; field_25755 NEAREST_ADULT_PIGLINS + f Lnet/minecraft/class_4140; field_19009 HEARD_BELL_TIME + f Lnet/minecraft/class_4140; field_18445 WALK_TARGET + f Lnet/minecraft/class_4140; field_22355 ATTACK_TARGET + f Lnet/minecraft/class_4140; field_18444 NEAREST_VISIBLE_PLAYER + f Lnet/minecraft/class_4140; field_22340 NEAREST_VISIBLE_BABY_HOGLIN + f Lnet/minecraft/class_4140; field_18453 NEAREST_HOSTILE + f Lnet/minecraft/class_4140; field_22336 HUNTED_RECENTLY + f Lnet/minecraft/class_4140; field_25159 DANCING + f Lnet/minecraft/class_4140; field_19006 VISIBLE_VILLAGER_BABIES + f Lnet/minecraft/class_4140; field_22353 PACIFIED + f Lnet/minecraft/class_4140; field_22350 ATE_RECENTLY + f Lnet/minecraft/class_4140; field_18873 SECONDARY_JOB_SITE + f Lnet/minecraft/class_4140; field_22473 ADMIRING_DISABLED + f Lnet/minecraft/class_4140; field_18438 HOME + f Lnet/minecraft/class_4140; field_25361 UNIVERSAL_ANGER + f Lnet/minecraft/class_4140; field_25160 POTENTIAL_JOB_SITE + f Lnet/minecraft/class_4140; field_25813 TIME_TRYING_TO_REACH_ADMIRE_ITEM + f Lnet/minecraft/class_4140; field_22348 VISIBLE_ADULT_HOGLIN_COUNT + f Lnet/minecraft/class_4140; field_18452 HURT_BY_ENTITY + f Lnet/minecraft/class_4140; field_22346 NEAREST_VISIBLE_ZOMBIFIED + f Lnet/minecraft/class_4140; field_25360 NEAREST_VISIBLE_NEMESIS + f Lnet/minecraft/class_4140; field_18450 INTERACTABLE_DOORS + f Lnet/minecraft/class_4140; field_19007 NEAREST_BED + f Lnet/minecraft/class_4140; field_22356 RIDE_TARGET + f Lnet/minecraft/class_4140; field_25359 NEAREST_VISIBLE_ADULT + f Lnet/minecraft/class_4140; field_22475 ATTACK_COOLING_DOWN + f Lnet/minecraft/class_4140; field_19385 LAST_SLEPT + f Ljava/util/Optional; field_24668 memoryCodec + f Lnet/minecraft/class_4140; field_19008 HIDING_PLACE + f Lnet/minecraft/class_4140; field_19293 CANT_REACH_WALK_TARGET_SINCE + f Lnet/minecraft/class_4140; field_18446 LOOK_TARGET + f Lnet/minecraft/class_4140; field_22343 NEAREST_VISIBLE_ADULT_PIGLINS + f Lnet/minecraft/class_4140; field_18443 NEAREST_PLAYERS + f Lnet/minecraft/class_4140; field_22339 NEAREST_VISIBLE_HUNTABLE_HOGLIN + f Lnet/minecraft/class_4140; field_22354 NEAREST_VISIBLE_TARGETABLE_PLAYER + f Lnet/minecraft/class_4140; field_22342 NEAREST_TARGETABLE_PLAYER_NOT_WEARING_GOLD + f Lnet/minecraft/class_4140; field_18442 VISIBLE_MOBS + f Lnet/minecraft/class_4140; field_22337 CELEBRATE_LOCATION + f Lnet/minecraft/class_4140; field_25814 DISABLE_WALK_TO_ADMIRE_ITEM + f Lnet/minecraft/class_4140; field_22474 NEAREST_REPELLENT + f Lnet/minecraft/class_4140; field_22357 AVOID_TARGET + f Lnet/minecraft/class_4140; field_18440 MEETING_POINT + f Lnet/minecraft/class_4140; field_18441 MOBS + f Lnet/minecraft/class_4140; field_18451 HURT_BY + f Lnet/minecraft/class_4140; field_18439 JOB_SITE + f Lnet/minecraft/class_4140; field_22349 NEAREST_PLAYER_HOLDING_WANTED_ITEM + f Lnet/minecraft/class_4140; field_22347 VISIBLE_ADULT_PIGLIN_COUNT + f Lnet/minecraft/class_4140; field_22334 ADMIRING_ITEM + f Lnet/minecraft/class_4140; field_22332 NEAREST_VISIBLE_WANTED_ITEM + f Lnet/minecraft/class_4140; field_22333 ANGRY_AT + f Lnet/minecraft/class_4140; field_26389 OPENED_DOORS + f Lnet/minecraft/class_4140; field_22345 NEAREST_VISIBLE_ADULT_PIGLIN + f Lnet/minecraft/class_4140; field_18437 DUMMY + f Lnet/minecraft/class_4140; field_19386 LAST_WORKED_AT_POI + f Lnet/minecraft/class_4140; field_18448 BREED_TARGET + f Lnet/minecraft/class_4140; field_18449 PATH +c net/minecraft/class_4142 net/minecraft/entity/ai/brain/memory/WalkTarget + m ()I method_19096 getDistance + m ()Lnet/minecraft/class_4115; method_19094 getTarget + m ()F method_19095 getSpeed + f F field_18461 speed + f Lnet/minecraft/class_4115; field_18460 target + f I field_18462 distance +c net/minecraft/class_4141 net/minecraft/entity/ai/brain/memory/MemoryModuleStatus + m ()[Lnet/minecraft/class_4141; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4141; valueOf valueOf + f [Lnet/minecraft/class_4141; field_18459 $VALUES + f Lnet/minecraft/class_4141; field_18458 REGISTERED + f Lnet/minecraft/class_4141; field_18457 VALUE_ABSENT + f Lnet/minecraft/class_4141; field_18456 VALUE_PRESENT +c net/minecraft/class_1407 net/minecraft/pathfinding/FlyingPathNavigator + m (Z)V method_6332 setCanOpenDoors + m (Z)V method_6331 setCanEnterDoors +c net/minecraft/class_1408 net/minecraft/pathfinding/PathNavigator + m (DDDD)Z method_6337 tryMoveToXYZ + m ()Z method_6350 getCanSwim + m (Ljava/util/Set;I)Lnet/minecraft/class_11; method_29934 pathfind + m (I)Lnet/minecraft/class_13; method_6336 getPathFinder + m ()Z method_6351 isInLiquid + m (Lnet/minecraft/class_243;)Z method_27799 func_234112_b_ + m (Lnet/minecraft/class_2338;)V method_18053 onUpdateNavigation + m ()Z method_23966 hasPath + m ()Lnet/minecraft/class_11; method_6345 getPath + m ()V method_6339 pathFollow + m (DDDI)Lnet/minecraft/class_11; method_6352 getPathToPos + m ()V method_6356 updatePath + m (Ljava/util/stream/Stream;I)Lnet/minecraft/class_11; method_21643 pathfind + m ()V method_26085 resetTimeOut + m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;III)Z method_6341 isDirectPathBetweenPoints + m (Lnet/minecraft/class_243;)V method_6346 checkForStuck + m ()Lnet/minecraft/class_2338; method_6355 getTargetPos + m (Ljava/util/Set;IZI)Lnet/minecraft/class_11; method_18416 pathfind + m (Z)V method_6354 setCanSwim + m (Lnet/minecraft/class_1297;I)Lnet/minecraft/class_11; method_6349 getPathToEntity + m ()V method_6359 trimPath + m ()V method_6340 clearPath + m (Lnet/minecraft/class_2338;)Z method_6333 canEntityStandOnPos + m (F)V method_23964 setRangeMultiplier + m (D)V method_6344 setSpeed + m ()Z method_6357 noPath + m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_11; method_6348 getPathToPos + m ()Z method_6343 canUpdatePathOnTimeout + m ()V method_23965 resetRangeMultiplier + m (Lnet/minecraft/class_11;D)Z method_6334 setPath + m ()V method_31266 func_244427_e + m ()V method_6360 tick + m (Lnet/minecraft/class_1297;D)Z method_6335 tryMoveToEntityLiving + m ()Lnet/minecraft/class_243; method_6347 getEntityPosition + m ()Z method_6358 canNavigate + m ()Z method_31267 func_244428_t + m ()Lnet/minecraft/class_8; method_6342 getNodeProcessor + f I field_6674 ticksAtLastPos + f Lnet/minecraft/class_8; field_6678 nodeProcessor + f Lnet/minecraft/class_2338; field_20293 targetPos + f Lnet/minecraft/class_13; field_6673 pathFinder + f D field_6668 speed + f Z field_6679 tryUpdatePath + f I field_20294 distance + f D field_6682 timeoutLimit + f J field_6670 timeoutTimer + f Lnet/minecraft/class_11; field_6681 currentPath + f Lnet/minecraft/class_2382; field_6680 timeoutCachedNode + f Z field_26820 field_244431_t + f I field_6675 totalTicks + f Lnet/minecraft/class_1308; field_6684 entity + f F field_21642 rangeMultiplier + f Lnet/minecraft/class_243; field_6672 lastPosCheck + f J field_6685 lastTimeUpdated + f Lnet/minecraft/class_1937; field_6677 world + f F field_6683 maxDistanceToWaypoint + f J field_6669 lastTimeoutCheck +c net/minecraft/class_1409 net/minecraft/pathfinding/GroundPathNavigator + m ()I method_6362 getPathablePosY + m (Z)V method_6361 setAvoidSun + m (Lnet/minecraft/class_7;)Z method_26338 func_230287_a_ + m (IIIIIILnet/minecraft/class_243;DD)Z method_6364 isSafeToStandAt + m (Z)V method_6363 setBreakDoors + m ()Z method_6366 getEnterDoors + m (IIIIIILnet/minecraft/class_243;DD)Z method_6367 isPositionClear + f Z field_6686 shouldAvoidSun +c net/minecraft/class_1412 net/minecraft/pathfinding/SwimmerPathNavigator + f Z field_6689 field_205155_i +c net/minecraft/class_1410 net/minecraft/pathfinding/ClimberPathNavigator + f Lnet/minecraft/class_2338; field_6687 targetPosition +c net/minecraft/class_4143 net/minecraft/entity/ai/brain/sensor/DummySensor +c net/minecraft/class_5356 net/minecraft/entity/ai/brain/sensor/MateSensor + m (Lnet/minecraft/class_1296;Ljava/util/List;)V method_29529 addMemory + m (Lnet/minecraft/class_1296;)Z method_29527 func_234114_a_ + m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1296; method_29530 func_234117_a_ + m (Lnet/minecraft/class_1296;Lnet/minecraft/class_1309;)Z method_29528 func_234115_a_ + m (Lnet/minecraft/class_1296;Ljava/util/List;)V method_29532 func_234118_b_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)V method_29531 update +c net/minecraft/class_4832 net/minecraft/entity/ai/brain/sensor/HoglinMobsSensor + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4760;)V method_24639 update + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4760;)Ljava/util/Optional; method_24641 findNearestRepellent + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_24640 func_234119_a_ +c net/minecraft/class_4307 net/minecraft/entity/ai/brain/sensor/GolemLastSeenSensor + m (Lnet/minecraft/class_1309;)V method_20656 update + m (Lnet/minecraft/class_1309;)Z method_20657 func_223546_a + m (Lnet/minecraft/class_1309;)V method_30233 reset +c net/minecraft/class_4256 net/minecraft/entity/ai/brain/sensor/NearestBedSensor + m (Lnet/minecraft/class_2338;)Z method_21644 func_225469_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)V method_21646 update + m (Lit/unimi/dsi/fastutil/longs/Long2LongMap$Entry;)Z method_21645 func_225470_a + f J field_20297 persistTime + f I field_20296 bedsFound + f Lit/unimi/dsi/fastutil/longs/Long2LongMap; field_20295 bedPositionToTimeMap +c net/minecraft/class_4144 net/minecraft/entity/ai/brain/sensor/HurtBySensor + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_24642 func_234121_a_ +c net/minecraft/class_4146 net/minecraft/entity/ai/brain/sensor/NearestLivingEntitiesSensor + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19097 func_220980_b + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19784 func_220981_a +c net/minecraft/class_4833 net/minecraft/entity/ai/brain/sensor/WantedItemsSensor + m (Lnet/minecraft/class_1542;)Z method_24644 func_234123_a_ + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1542;)Z method_24643 func_234122_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)V method_24645 update + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1542;)Z method_24646 func_234124_b_ +c net/minecraft/class_4834 net/minecraft/entity/ai/brain/sensor/PiglinMobsSensor + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_30077 func_234125_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_24648 isRepellent + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)Ljava/util/Optional; method_24649 findNearestRepellent +c net/minecraft/class_5417 net/minecraft/entity/ai/brain/sensor/PiglinBruteSpecificSensor +c net/minecraft/class_4221 net/minecraft/entity/ai/brain/sensor/SecondaryPositionSensor + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)V method_19617 update +c net/minecraft/class_4147 net/minecraft/entity/ai/brain/sensor/NearestPlayersSensor + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1657;)Z method_29268 func_234128_a_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_3222;)Z method_19098 func_220979_a +c net/minecraft/class_4148 net/minecraft/entity/ai/brain/sensor/Sensor + m ()Ljava/util/Set; method_19099 getUsedMemories + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_30954 canAttackTarget + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_19101 update + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_19100 tick + f Lnet/minecraft/class_4051; field_26631 FRIENDLY_FIRE_WITHOUT_VISIBILITY_CHECK + f J field_18463 counter + f I field_18464 interval + f Lnet/minecraft/class_4051; field_26630 FRIENDLY_FIRE_WITH_VISIBILITY_CHECK + f Ljava/util/Random; field_19294 RANDOM +c net/minecraft/class_1413 net/minecraft/entity/ai/EntitySenses + m (Lnet/minecraft/class_1297;)Z method_6369 canSee + m ()V method_6370 tick + f Ljava/util/List; field_6690 unseenEntities + f Lnet/minecraft/class_1308; field_6691 entity + f Ljava/util/List; field_6692 seenEntities +c net/minecraft/class_4149 net/minecraft/entity/ai/brain/sensor/SensorType + m (Ljava/lang/String;Ljava/util/function/Supplier;)Lnet/minecraft/class_4149; method_19103 register + m ()Lnet/minecraft/class_4148; method_19102 getSensor + f Lnet/minecraft/class_4149; field_18466 NEAREST_LIVING_ENTITIES + f Lnet/minecraft/class_4149; field_22360 HOGLIN_SPECIFIC_SENSOR + f Lnet/minecraft/class_4149; field_22358 NEAREST_ITEMS + f Lnet/minecraft/class_4149; field_18467 NEAREST_PLAYERS + f Lnet/minecraft/class_4149; field_25362 NEAREST_ADULT + f Lnet/minecraft/class_4149; field_22359 PIGLIN_SPECIFIC_SENSOR + f Lnet/minecraft/class_4149; field_25756 GOLEM_DETECTED + f Lnet/minecraft/class_4149; field_25757 PIGLIN_BRUTE_SPECIFIC_SENSOR + f Ljava/util/function/Supplier; field_18471 sensorSupplier + f Lnet/minecraft/class_4149; field_18465 DUMMY + f Lnet/minecraft/class_4149; field_19011 VILLAGER_BABIES + f Lnet/minecraft/class_4149; field_18875 SECONDARY_POIS + f Lnet/minecraft/class_4149; field_19010 NEAREST_BED + f Lnet/minecraft/class_4149; field_18470 VILLAGER_HOSTILES + f Lnet/minecraft/class_4149; field_18469 HURT_BY +c net/minecraft/class_4150 net/minecraft/entity/ai/brain/sensor/VillagerHostilesSensor + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)I method_19619 compareHostileDistances + m (Lnet/minecraft/class_1309;Ljava/util/List;)Ljava/util/Optional; method_19106 func_220984_a + m (Lnet/minecraft/class_1309;)Ljava/util/Optional; method_19618 findNearestHostile + m (Lnet/minecraft/class_1309;)Z method_19104 hasPresence + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19107 func_220985_b + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)I method_19621 func_220986_b + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19105 canNoticePresence + m (Lnet/minecraft/class_1309;)Ljava/util/Optional; method_19620 getVisibleEntities + f Lcom/google/common/collect/ImmutableMap; field_18473 enemyPresenceRange +c net/minecraft/class_4257 net/minecraft/entity/ai/brain/sensor/VillagerBabiesSensor + m (Lnet/minecraft/class_1309;)Ljava/util/List; method_20002 getVisibleEntities + m (Lnet/minecraft/class_1309;)Z method_20001 isVillagerChild + m (Lnet/minecraft/class_1309;)Ljava/util/List; method_20000 getVisibleVillagerChildren +c net/minecraft/class_4051 net/minecraft/entity/EntityPredicate + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_18419 canTarget + m ()Lnet/minecraft/class_4051; method_18424 setUseInvisibilityCheck + m (Ljava/util/function/Predicate;)Lnet/minecraft/class_4051; method_18420 setCustomPredicate + m ()Lnet/minecraft/class_4051; method_18423 setSkipAttackChecks + m ()Lnet/minecraft/class_4051; method_18421 allowFriendlyFire + m ()Lnet/minecraft/class_4051; method_18422 setLineOfSiteRequired + m (D)Lnet/minecraft/class_4051; method_18418 setDistance + m ()Lnet/minecraft/class_4051; method_18417 allowInvulnerable + f Lnet/minecraft/class_4051; field_18092 DEFAULT + f Ljava/util/function/Predicate; field_18099 customPredicate + f Z field_18098 useVisibilityModifier + f Z field_18097 skipAttackChecks + f D field_18093 distance + f Z field_18096 requireLineOfSight + f Z field_18095 friendlyFire + f Z field_18094 allowInvulnerable +c net/minecraft/class_5493 net/minecraft/util/GroundPathHelper + m (Lnet/minecraft/class_1308;)Z method_30955 isGroundNavigator +c net/minecraft/class_1414 net/minecraft/entity/ai/RandomPositionGenerator + m (Lnet/minecraft/class_1314;IIILnet/minecraft/class_243;ZDLjava/util/function/ToDoubleFunction;ZIIZ)Lnet/minecraft/class_243; method_21758 func_226339_a_ + m (Lnet/minecraft/class_1314;IIILnet/minecraft/class_243;D)Lnet/minecraft/class_243; method_23736 func_226344_b_ + m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;FII)Lnet/minecraft/class_243; method_21757 findAirTarget + m (Lnet/minecraft/class_1314;IIILnet/minecraft/class_243;D)Lnet/minecraft/class_243; method_21756 findGroundTarget + m (Lnet/minecraft/class_1314;Lnet/minecraft/class_2338;)Z method_21759 func_226341_a_ + m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;)Lnet/minecraft/class_243; method_23735 findRandomTargetBlockTowards + m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;)Lnet/minecraft/class_243; method_6379 findRandomTargetBlockAwayFrom + m (Ljava/util/Random;IIILnet/minecraft/class_243;D)Lnet/minecraft/class_2338; method_6374 func_226343_a_ + m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;)Lnet/minecraft/class_243; method_20658 func_223548_b + m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;D)Lnet/minecraft/class_243; method_6377 findRandomTargetTowardsScaled + m (Lnet/minecraft/class_1314;II)Lnet/minecraft/class_243; method_6378 getLandPos + m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;)Lnet/minecraft/class_243; method_27929 func_234133_a_ + m (Lnet/minecraft/class_2338;IILjava/util/function/Predicate;)Lnet/minecraft/class_2338; method_21761 func_226342_a_ + m (Lnet/minecraft/class_1314;IILjava/util/function/ToDoubleFunction;)Lnet/minecraft/class_243; method_19108 func_221024_a + m (Lnet/minecraft/class_1314;II)Lnet/minecraft/class_243; method_6375 findRandomTarget +c net/minecraft/class_1419 net/minecraft/village/VillageSiege + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Lnet/minecraft/class_243; method_6448 findRandomSpawnPos + m (Lnet/minecraft/class_3218;)V method_6447 spawnZombie + m (Lnet/minecraft/class_3218;)Z method_6446 trySetupSiege + f Lnet/minecraft/class_1419$class_4152; field_18479 siegeState + f I field_6720 spawnY + f Z field_6725 hasSetupSiege + f I field_6719 spawnZ + f Lorg/apache/logging/log4j/Logger; field_26390 LOGGER + f I field_6723 siegeCount + f I field_6722 nextSpawnTime + f I field_6721 spawnX +c net/minecraft/class_1419$class_4152 net/minecraft/village/VillageSiege$State + m (Ljava/lang/String;)Lnet/minecraft/class_1419$class_4152; valueOf valueOf + m ()[Lnet/minecraft/class_1419$class_4152; values values + f Lnet/minecraft/class_1419$class_4152; field_18480 SIEGE_CAN_ACTIVATE + f [Lnet/minecraft/class_1419$class_4152; field_18483 $VALUES + f Lnet/minecraft/class_1419$class_4152; field_18481 SIEGE_TONIGHT + f Lnet/minecraft/class_1419$class_4152; field_18482 SIEGE_DONE +c net/minecraft/class_4151 net/minecraft/entity/merchant/IReputationType + m (Ljava/lang/String;)Lnet/minecraft/class_4151; method_19109 register + f Lnet/minecraft/class_4151; field_18477 VILLAGER_KILLED + f Lnet/minecraft/class_4151; field_18475 GOLEM_KILLED + f Lnet/minecraft/class_4151; field_18476 VILLAGER_HURT + f Lnet/minecraft/class_4151; field_18474 ZOMBIE_VILLAGER_CURED + f Lnet/minecraft/class_4151; field_18478 TRADE +c net/minecraft/class_4151$1 net/minecraft/entity/merchant/IReputationType$1 + m ()Ljava/lang/String; toString toString + f Ljava/lang/String; field_17066 field_221034_f +c net/minecraft/class_4153 net/minecraft/village/PointOfInterestManager + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)D method_20003 func_219160_a + m (Ljava/util/function/Predicate;Lnet/minecraft/class_4156;)Z method_19130 func_219129_c + m (Lnet/minecraft/class_1923;Ljava/lang/Integer;)Ljava/util/Optional; method_19124 func_219149_a_ + m (Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/Optional; method_19127 find + m (Lnet/minecraft/class_4076;)Lcom/mojang/datafixers/util/Pair; method_22443 func_234147_c_ + m (Lnet/minecraft/class_2338;Ljava/util/function/Predicate;Lnet/minecraft/class_4157;)Ljava/lang/Boolean; method_19117 func_234141_a_ + m (Ljava/util/function/BiConsumer;Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19512 func_234142_a_ + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_1923;)V method_22438 func_234136_a_ + m (Lnet/minecraft/class_2338;)V method_19112 remove + m (Lnet/minecraft/class_2826;Lnet/minecraft/class_4076;)V method_20346 func_242321_a + m (Lnet/minecraft/class_2826;Ljava/util/function/BiConsumer;Lnet/minecraft/class_2338;)V method_19511 func_234139_a_ + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2826;)V method_19510 checkConsistencyWithBlocks + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19115 add + m (Lnet/minecraft/class_2338;Ljava/util/function/Predicate;)Z method_19116 exists + m (Lnet/minecraft/class_2826;Lnet/minecraft/class_4076;Lnet/minecraft/class_4157;)V method_20347 func_234138_a_ + m (Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_30957 func_242324_b + m (Lnet/minecraft/class_2338;ILnet/minecraft/class_4156;)Z method_30335 func_242322_b + m (Ljava/util/function/Predicate;Lnet/minecraft/class_1923;Lnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_19123 getInChunk + m (Lnet/minecraft/class_2826;Lnet/minecraft/class_4076;Ljava/util/function/BiConsumer;)V method_20348 updateFromSelection + m (Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/Optional; method_20006 func_234148_d_ + m (Lnet/minecraft/class_2338;)Z method_19129 release + m (Ljava/util/function/Predicate;Lnet/minecraft/class_4153$class_4155;Lnet/minecraft/class_1923;)Ljava/util/stream/Stream; method_19121 func_226350_a_ + m (Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_22383 getInSquare + m (Lnet/minecraft/class_4157;)Ljava/lang/Boolean; method_20592 func_234134_a_ + m (Lnet/minecraft/class_2826;)Z method_20345 hasAnyPOI + m (Ljava/util/function/Predicate;Lnet/minecraft/class_4156;)Z method_20004 func_234143_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)D method_30956 func_242323_b + m (Lnet/minecraft/class_1923;)Z method_22441 func_234144_b_ + m (Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)J method_20252 getCountInRange + m (Lcom/mojang/datafixers/util/Pair;)Z method_22442 func_234146_b_ + m (Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/class_2338;I)Ljava/util/Optional; method_19126 take + m (J)Z method_19133 isVillageCenter + m (Lnet/minecraft/class_2338;ILnet/minecraft/class_4156;)Z method_19113 func_226349_a_ + m (Lcom/mojang/datafixers/util/Pair;)Lnet/minecraft/class_1923; method_22440 func_234140_a_ + m (Lnet/minecraft/class_4153;J)Z method_19110 func_219153_a + m (Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/class_4153$class_4155;Lnet/minecraft/class_2338;ILjava/util/Random;)Ljava/util/Optional; method_20005 getRandom + m (Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_21647 findAll + m (Lnet/minecraft/class_2826;Lnet/minecraft/class_4076;Ljava/util/function/BiConsumer;)V method_20349 func_234145_b_ + m (Lnet/minecraft/class_4156;)Lnet/minecraft/class_2338; method_19128 func_219152_b + m (Ljava/util/function/Predicate;Lnet/minecraft/class_4153$class_4155;Ljava/util/Optional;)Ljava/util/stream/Stream; method_19120 func_241393_a_ + m (Lnet/minecraft/class_2338;)Ljava/util/Optional; method_19132 getType + m (Lnet/minecraft/class_4076;)I method_19118 sectionsToVillage + m (Lnet/minecraft/class_4158;Lnet/minecraft/class_2338;)Z method_26339 hasTypeAtPosition + m (Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_19125 func_219146_b + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;I)V method_22439 ensureLoadedAndValid + f Lnet/minecraft/class_4153$class_4154; field_18484 distanceTracker + f Lit/unimi/dsi/fastutil/longs/LongSet; field_20688 loadedChunks +c net/minecraft/class_4153$class_4155 net/minecraft/village/PointOfInterestManager$Status + m (Ljava/lang/String;)Lnet/minecraft/class_4153$class_4155; valueOf valueOf + m ()[Lnet/minecraft/class_4153$class_4155; values values + m ()Ljava/util/function/Predicate; method_19135 getTest + m (Lnet/minecraft/class_4156;)Z method_19136 func_221036_a + f [Lnet/minecraft/class_4153$class_4155; field_18491 $VALUES + f Ljava/util/function/Predicate; field_18490 test + f Lnet/minecraft/class_4153$class_4155; field_18488 IS_OCCUPIED + f Lnet/minecraft/class_4153$class_4155; field_18489 ANY + f Lnet/minecraft/class_4153$class_4155; field_18487 HAS_SPACE +c net/minecraft/class_4153$class_4154 net/minecraft/village/PointOfInterestManager$DistanceGraph + m ()V method_19134 runAllUpdates + f Lit/unimi/dsi/fastutil/longs/Long2ByteMap; field_18486 levels + f Lnet/minecraft/class_4153; field_18485 field_215564_a +c net/minecraft/class_4157 net/minecraft/village/PointOfInterestData + m (Ljava/util/function/Consumer;)V method_20353 refresh + m (Lit/unimi/dsi/fastutil/shorts/Short2ObjectMap;Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_20352 func_234157_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19146 add + m (Lnet/minecraft/class_4158;)Ljava/util/Set; method_19143 func_234155_a_ + m (Lnet/minecraft/class_4156;)Z method_20350 add + m (Lnet/minecraft/class_4157;)Ljava/lang/Boolean; method_28366 func_234162_b_ + m (Lnet/minecraft/class_2338;)Ljava/lang/Object; method_20660 func_234165_e_ + m (Lnet/minecraft/class_4158;)Ljava/lang/Object; method_20659 func_234163_b_ + m (Lnet/minecraft/class_2338;)Ljava/util/Optional; method_19154 getType + m (Ljava/util/function/Predicate;Lnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_19150 getRecords + m (Lnet/minecraft/class_4157;)Ljava/util/List; method_28363 func_234154_a_ + m ()V method_20395 clear + m ()Z method_22444 isValid + m (Ljava/lang/Runnable;)Lcom/mojang/serialization/Codec; method_28364 func_234158_a_ + m (Ljava/util/Map$Entry;)Ljava/util/stream/Stream; method_19149 func_234160_a_ + m (Lnet/minecraft/class_2338;)Z method_19153 release + m (Ljava/util/function/Predicate;Ljava/util/Map$Entry;)Z method_19151 func_234161_a_ + m (Lnet/minecraft/class_2338;Ljava/util/function/Predicate;)Z method_19147 exists + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;I)Lnet/minecraft/class_4156; method_20351 func_234156_a_ + m (Ljava/lang/Runnable;)Lnet/minecraft/class_4157; method_28367 func_234164_b_ + m (Lnet/minecraft/class_2338;)V method_19145 remove + m (Ljava/lang/Runnable;Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28365 func_234159_a_ + f Ljava/lang/Runnable; field_18499 onChange + f Lorg/apache/logging/log4j/Logger; field_18496 LOGGER + f Z field_19226 valid + f Lit/unimi/dsi/fastutil/shorts/Short2ObjectMap; field_18497 records + f Ljava/util/Map; field_18498 byType +c net/minecraft/class_4156 net/minecraft/village/PointOfInterest + m ()I hashCode hashCode + m ()Z method_19139 hasSpace + m (Lnet/minecraft/class_4156;)Lnet/minecraft/class_2338; method_28362 func_234153_c_ + m (Lnet/minecraft/class_4156;)Ljava/lang/Integer; method_28358 func_234149_a_ + m ()Z method_19140 isOccupied + m (Ljava/lang/Object;)Z equals equals + m (Ljava/lang/Runnable;Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28360 func_234151_a_ + m (Lnet/minecraft/class_4156;)Lnet/minecraft/class_4158; method_28361 func_234152_b_ + m ()Lnet/minecraft/class_2338; method_19141 getPos + m (Ljava/lang/Runnable;)Lcom/mojang/serialization/Codec; method_28359 func_234150_a_ + m ()Z method_19137 claim + m ()Lnet/minecraft/class_4158; method_19142 getType + m ()Z method_19138 release + f I field_18494 freeTickets + f Lnet/minecraft/class_2338; field_18492 pos + f Ljava/lang/Runnable; field_18495 onChange + f Lnet/minecraft/class_4158; field_18493 type +c net/minecraft/class_4158 net/minecraft/village/PointOfInterestType + m (Lnet/minecraft/class_4158;)Lnet/minecraft/class_4158; method_20354 registerBlockStates + m ()Ljava/util/function/Predicate; method_19164 getPredicate + m ()Ljava/util/Set; method_19165 func_234174_e_ + m (Lnet/minecraft/class_4158;)Z method_19156 func_234170_b_ + m (Lnet/minecraft/class_4158;)Z method_19162 func_234172_c_ + m (Ljava/lang/String;Ljava/util/Set;ILjava/util/function/Predicate;I)Lnet/minecraft/class_4158; method_20358 register + m (Lnet/minecraft/class_2680;)Z method_19517 func_234173_c_ + m (Lnet/minecraft/class_4158;Lnet/minecraft/class_2680;)V method_20355 func_234169_a_ + m ()I method_19161 getMaxFreeTickets + m ()I method_21648 getValidRange + m (Lnet/minecraft/class_2248;)Ljava/util/stream/Stream; method_20359 func_234171_b_ + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2248;)Ljava/util/Set; method_20356 getAllStates + m (Ljava/lang/String;Ljava/util/Set;II)Lnet/minecraft/class_4158; method_20357 register + m (Lnet/minecraft/class_4158;)Z method_29269 func_221049_c + m (Lnet/minecraft/class_2680;)Ljava/util/Optional; method_19516 forState + f Ljava/util/function/Supplier; field_25163 WORKSTATIONS + f Lnet/minecraft/class_4158; field_18513 NITWIT + f Lnet/minecraft/class_4158; field_18514 SHEPHERD + f Lnet/minecraft/class_4158; field_18512 MASON + f Ljava/util/Set; field_18850 blockStates + f Ljava/util/Map; field_18849 POIT_BY_BLOCKSTATE + f Lnet/minecraft/class_4158; field_18511 LIBRARIAN + f Lnet/minecraft/class_4158; field_18509 FLETCHER + f Ljava/lang/String; field_18519 name + f Lnet/minecraft/class_4158; field_18510 LEATHERWORKER + f Lnet/minecraft/class_4158; field_18508 FISHERMAN + f Lnet/minecraft/class_4158; field_18507 FARMER + f Lnet/minecraft/class_4158; field_18505 CARTOGRAPHER + f Lnet/minecraft/class_4158; field_18506 CLERIC + f Lnet/minecraft/class_4158; field_18504 BUTCHER + f Ljava/util/function/Predicate; field_18523 predicate + f Lnet/minecraft/class_4158; field_18503 ARMORER + f Ljava/util/Set; field_25162 BLOCKS_OF_INTEREST + f Lnet/minecraft/class_4158; field_18502 UNEMPLOYED + f Lnet/minecraft/class_4158; field_20632 NETHER_PORTAL + f Lnet/minecraft/class_4158; field_23229 LODESTONE + f Lnet/minecraft/class_4158; field_20352 BEE_NEST + f Ljava/util/function/Predicate; field_18500 ANY_VILLAGER_WORKSTATION + f Lnet/minecraft/class_4158; field_20351 BEEHIVE + f Ljava/util/function/Predicate; field_18501 MATCH_ANY + f Lnet/minecraft/class_4158; field_18517 HOME + f Lnet/minecraft/class_4158; field_18518 MEETING + f I field_18521 maxFreeTickets + f Lnet/minecraft/class_4158; field_18516 WEAPONSMITH + f I field_20298 validRange + f Ljava/util/Set; field_19227 BED_HEADS + f Lnet/minecraft/class_4158; field_18515 TOOLSMITH +c net/minecraft/class_1420 net/minecraft/entity/passive/BatEntity + m (Z)V method_6449 setIsBatHanging + m ()Z method_6451 isNearHalloween + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20661 canSpawn + m ()Lnet/minecraft/class_5132$class_5133; method_26878 func_234175_m_ + m ()Z method_6450 getIsBatHanging + f Lnet/minecraft/class_2338; field_6729 spawnPosition + f Lnet/minecraft/class_2940; field_6728 HANGING + f Lnet/minecraft/class_4051; field_18100 field_213813_c +c net/minecraft/class_1421 net/minecraft/entity/passive/AmbientEntity +c net/minecraft/class_1422 net/minecraft/entity/passive/fish/AbstractFishEntity + m (Lnet/minecraft/class_1799;)V method_6455 setBucketData + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20662 func_223363_b + m ()Lnet/minecraft/class_5132$class_5133; method_26879 func_234176_m_ + m (Z)V method_6454 setFromBucket + m ()Lnet/minecraft/class_1799; method_6452 getFishBucket + m ()Z method_6456 func_212800_dy + m ()Z method_6453 isFromBucket + m ()Lnet/minecraft/class_3414; method_6457 getFlopSound + f Lnet/minecraft/class_2940; field_6730 FROM_BUCKET +c net/minecraft/class_1422$class_1423 net/minecraft/entity/passive/fish/AbstractFishEntity$MoveHelperController + f Lnet/minecraft/class_1422; field_6731 fish +c net/minecraft/class_1422$class_1424 net/minecraft/entity/passive/fish/AbstractFishEntity$SwimGoal + f Lnet/minecraft/class_1422; field_6732 fish +c net/minecraft/class_1425 net/minecraft/entity/passive/fish/AbstractGroupFishEntity + m ()Z method_6470 hasGroupLeader + m (Ljava/util/stream/Stream;)V method_6468 func_212810_a + m ()V method_6466 leaveGroup + m ()Z method_6467 isGroupLeader + m ()V method_6463 moveToGroupLeader + m ()Z method_6469 canGroupGrow + m ()V method_6459 decreaseGroupSize + m (Lnet/minecraft/class_1425;)V method_6458 func_212804_b + m ()Z method_6464 inRangeOfGroupLeader + m ()I method_6465 getMaxGroupSize + m (Lnet/minecraft/class_1425;)Z method_6460 func_212801_c + m ()V method_6462 increaseGroupSize + m (Lnet/minecraft/class_1425;)Lnet/minecraft/class_1425; method_6461 func_212803_a + f Lnet/minecraft/class_1425; field_6734 groupLeader + f I field_6733 groupSize +c net/minecraft/class_1425$class_1426 net/minecraft/entity/passive/fish/AbstractGroupFishEntity$GroupData + f Lnet/minecraft/class_1425; field_6735 groupLeader +c net/minecraft/class_1427 net/minecraft/entity/passive/GolemEntity +c net/minecraft/class_4466 net/minecraft/entity/passive/BeeEntity + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23967 func_226378_A_ + m (Lnet/minecraft/class_2338;I)Z method_23979 isWithinDistance + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23991 func_226438_k_ + m (Lnet/minecraft/class_2338;)V method_21797 setFlowerPos + m ()V method_21788 onHoneyDelivered + m (Lnet/minecraft/class_4466;Z)V method_23975 func_226396_a_ + m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;I)Z method_23974 func_226395_a_ + m (Lnet/minecraft/class_4466;)Z method_21774 func_226434_i_ + m (IZ)V method_21775 setBeeFlag + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23969 func_226382_E_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23996 func_226443_o_ + m ()Z method_23984 isHiveNearFire + m (Z)V method_21808 setNearTarget + m ()Z method_21794 isHiveValid + m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21803 func_226389_L_ + m (I)V method_21807 setStayOutOfHiveCountdown + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_24002 func_226457_v_ + m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21765 func_226402_c_ + m ()Z method_21779 hasFlower + m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21795 func_226461_z_ + m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)V method_23978 func_226400_b_ + m (Lnet/minecraft/class_2338;)Z method_23990 isTooFar + m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_21773 func_226403_c_ + m (Lnet/minecraft/class_4466;)I method_24004 func_226460_y_ + m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21796 func_226379_B_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23993 func_226440_l_ + m ()Lnet/minecraft/class_2338; method_21778 getFlowerPos + m (Lnet/minecraft/class_4466;)I method_21800 func_226387_J_ + m ()Z method_23983 failedPollinatingTooLong + m ()I method_21792 getCropsGrownSincePollination + m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21798 func_226383_F_ + m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Z method_23981 func_226406_d_ + m (Lnet/minecraft/class_4466;I)I method_23977 func_226399_b_ + m ()Z method_21784 hasNectar + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23997 func_226444_p_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_24003 func_226458_w_ + m ()Z method_21786 isNearTarget + m ()Lnet/minecraft/class_2338; method_23884 getHivePos + m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Z method_23973 func_226394_a_ + m ()Lnet/minecraft/class_5132$class_5133; method_26880 func_234182_eX_ + m (I)Z method_21812 getBeeFlag + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_24000 func_226448_s_ + m (Lnet/minecraft/class_4466;)I method_21776 func_226459_x_ + m (Lnet/minecraft/class_2338;)Z method_23988 doesHiveHaveSpace + m (Lnet/minecraft/class_1937;DDDDDLnet/minecraft/class_2394;)V method_21769 addParticle + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23980 func_226405_d_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23994 func_226441_m_ + m ()Z method_21791 hasHive + m (Lnet/minecraft/class_4466;I)I method_23972 func_226393_a_ + m ()Z method_21785 hasStung + m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_23740 func_226384_G_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_4466$class_4472; method_23971 func_226386_I_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23998 func_226445_q_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_4466$class_4478; method_23738 func_226392_a_ + m ()Z method_21789 canEnterHive + m (Z)V method_21805 setHasNectar + m (F)F method_21811 getBodyPitch + m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21801 func_226388_K_ + m ()V method_21783 resetCropCounter + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23968 func_226380_C_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_4466; method_21771 func_241840_a + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23982 func_226407_e_ + m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_21767 func_226408_e_ + m (Lnet/minecraft/class_4466;)V method_21804 func_226390_M_ + m (Lnet/minecraft/class_4466;)I method_23970 func_226385_H_ + m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_23739 func_226381_D_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23989 func_226436_j_ + m (Lnet/minecraft/class_2338;)V method_23987 startMovingTo + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23999 func_226446_r_ + m ()V method_21790 updateBodyPitch + m ()V method_21793 addCropCounter + m (Z)V method_21806 setHasStung + m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Z method_23986 func_226429_f_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23995 func_226442_n_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_2338; method_21777 func_226451_t_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23976 func_226398_b_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_24001 func_226454_u_ + m (Lnet/minecraft/class_4466;)Z method_21802 func_226430_g_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_2338; method_21772 func_226432_h_ + m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23985 func_226428_f_ + m ()V method_21780 resetTicksWithoutNectar + m (Lnet/minecraft/class_2338;)Z method_23992 isFlowers + f I field_21644 remainingCooldownBeforeLocatingNewFlower + f F field_20356 rollAmount + f I field_20360 stayOutOfHiveCountdown + f Lnet/minecraft/class_2940; field_20353 DATA_FLAGS_ID + f I field_21509 underWaterTicks + f Lnet/minecraft/class_4801; field_25363 field_234180_bw_ + f F field_20357 rollAmountO + f Lnet/minecraft/class_4466$class_4472; field_21645 findBeehiveGoal + f I field_20361 numCropsGrownSincePollination + f Lnet/minecraft/class_2338; field_20362 savedFlowerPos + f Lnet/minecraft/class_2940; field_20354 ANGER_TIME + f Ljava/util/UUID; field_25364 lastHurtBy + f I field_20358 timeSinceSting + f I field_21643 remainingCooldownBeforeLocatingNewHive + f Lnet/minecraft/class_2338; field_20363 hivePos + f Lnet/minecraft/class_4466$class_4478; field_21079 pollinateGoal + f I field_20359 ticksWithoutNectarSinceExitingHive + f Lnet/minecraft/class_4466$class_4473; field_21646 findFlowerGoal +c net/minecraft/class_4466$1 net/minecraft/entity/passive/BeeEntity$1 + f Lnet/minecraft/class_4466; field_20364 field_226462_p_ +c net/minecraft/class_4466$class_4467 net/minecraft/entity/passive/BeeEntity$PassiveGoal + m ()Z method_21814 canBeeStart + m ()Z method_21815 canBeeContinue + f Lnet/minecraft/class_4466; field_20365 field_226463_a_ +c net/minecraft/class_4466$class_4468 net/minecraft/entity/passive/BeeEntity$StingGoal + f Lnet/minecraft/class_4466; field_20366 field_226464_d_ +c net/minecraft/class_4466$class_4469 net/minecraft/entity/passive/BeeEntity$AttackPlayerGoal + m ()Z method_21816 canSting +c net/minecraft/class_4466$class_4470 net/minecraft/entity/passive/BeeEntity$EnterBeehiveGoal + f Lnet/minecraft/class_4466; field_20367 field_226466_b_ +c net/minecraft/class_4466$class_4472 net/minecraft/entity/passive/BeeEntity$FindBeehiveGoal + m ()V method_24011 clearPossibleHives + m (Lnet/minecraft/class_4466$class_4472;)V method_24008 func_226474_c_ + m ()V method_24012 makeChosenHivePossibleHive + m (Lnet/minecraft/class_2338;)Z method_24006 startMovingToFar + m (Lnet/minecraft/class_2338;)V method_24009 addPossibleHives + m ()V method_23885 reset + m (Lnet/minecraft/class_4466$class_4472;Lnet/minecraft/class_2338;)Z method_24005 func_226471_a_ + m (Lnet/minecraft/class_2338;)Z method_24010 isCloseEnough + m (Lnet/minecraft/class_2338;)Z method_24007 isPossibleHive + f Ljava/util/List; field_21648 possibleHives + f I field_23133 field_234183_f_ + f Lnet/minecraft/class_4466; field_20371 field_226467_b_ + f Lnet/minecraft/class_11; field_21649 path + f I field_21647 ticks +c net/minecraft/class_4466$class_4473 net/minecraft/entity/passive/BeeEntity$FindFlowerGoal + m ()Z method_24013 shouldMoveToFlower + f I field_21650 ticks + f Lnet/minecraft/class_4466; field_20372 field_226480_b_ +c net/minecraft/class_4466$class_4474 net/minecraft/entity/passive/BeeEntity$FindPollinationTargetGoal + f Lnet/minecraft/class_4466; field_20373 field_226483_b_ +c net/minecraft/class_4466$class_4475 net/minecraft/entity/passive/BeeEntity$AngerGoal + f Lnet/minecraft/class_4466; field_20374 field_226484_a_ +c net/minecraft/class_4466$class_4476 net/minecraft/entity/passive/BeeEntity$UpdateBeehiveGoal + m (Lnet/minecraft/class_4158;)Z method_23743 func_226486_a_ + m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Z method_24014 func_226487_a_ + m ()Ljava/util/List; method_23742 getNearbyFreeHives + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)D method_24015 func_226488_a_ + f Lnet/minecraft/class_4466; field_20375 field_226485_b_ +c net/minecraft/class_4466$class_4477 net/minecraft/entity/passive/BeeEntity$BeeLookController + f Lnet/minecraft/class_4466; field_20376 field_226490_h_ +c net/minecraft/class_4466$class_4478 net/minecraft/entity/passive/BeeEntity$PollinateGoal + m ()V method_23748 cancel + m ()Z method_21820 completedPollination + m ()V method_23749 moveToNextTarget + m (Lnet/minecraft/class_4466$class_4478;)Z method_23746 func_226498_a_ + m ()Z method_23346 isRunning + m (Lnet/minecraft/class_4466$class_4478;)V method_23747 func_226501_b_ + m (Lnet/minecraft/class_2680;)Z method_21819 func_226499_a_ + m ()Ljava/util/Optional; method_21821 getFlower + m (Ljava/util/function/Predicate;D)Ljava/util/Optional; method_22326 findFlower + m ()F method_23750 getRandomOffset + f I field_21651 ticks + f Z field_21080 running + f Lnet/minecraft/class_4466; field_20377 field_226491_b_ + f Lnet/minecraft/class_243; field_21511 nextTarget + f I field_20378 pollinationTicks + f I field_20379 lastPollinationTick + f Ljava/util/function/Predicate; field_20617 flowerPredicate +c net/minecraft/class_4466$class_4479 net/minecraft/entity/passive/BeeEntity$WanderGoal + m ()Lnet/minecraft/class_243; method_21822 getRandomLocation + f Lnet/minecraft/class_4466; field_20380 field_226508_a_ +c net/minecraft/class_1429 net/minecraft/entity/passive/AnimalEntity + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;)V method_24650 func_234177_a_ + m (Lnet/minecraft/class_1657;)V method_6480 setInLove + m ()I method_29270 func_234178_eO_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20663 canAnimalSpawn + m (Lnet/minecraft/class_1799;)Z method_6481 isBreedingItem + m ()Z method_6482 canFallInLove + m (Lnet/minecraft/class_1429;)Z method_6474 canMateWith + m (I)V method_6476 setInLove + m ()Lnet/minecraft/class_3222; method_6478 getLoveCause + m ()V method_6477 resetInLove + m ()Z method_6479 isInLove + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)V method_6475 consumeItemFromStack + f Ljava/util/UUID; field_6744 playerInLove + f I field_6745 inLove +c net/minecraft/class_1428 net/minecraft/entity/passive/ChickenEntity + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1428; method_6471 func_241840_a + m (Z)V method_6473 setChickenJockey + m ()Z method_6472 isChickenJockey + m ()Lnet/minecraft/class_5132$class_5133; method_26882 func_234187_eI_ + f F field_6743 destPos + f Z field_6740 chickenJockey + f F field_6738 oFlapSpeed + f F field_6741 wingRotation + f I field_6739 timeUntilNextEgg + f Lnet/minecraft/class_1856; field_6742 TEMPTATION_ITEMS + f F field_6737 wingRotDelta + f F field_6736 oFlap +c net/minecraft/class_1451 net/minecraft/entity/passive/CatEntity + m ()F method_22327 func_226510_eF_ + m ()I method_6571 getCatType + m (Ljava/util/HashMap;)V method_16083 func_213410_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1451; method_6573 func_241840_a + m ()V method_16085 func_213412_ek + m ()V method_16090 func_213418_el + m ()Z method_16086 func_213416_eg + m ()V method_16089 func_213420_ej + m ()V method_16084 func_213411_em + m ()Z method_16093 func_213409_eh + m ()Lnet/minecraft/class_1767; method_16096 getCollarColor + m (F)F method_16082 func_213408_v + m (F)F method_16091 func_213421_w + m (Lnet/minecraft/class_1767;)V method_16094 setCollarColor + m (Z)V method_16088 func_213419_u + m (I)V method_6572 setCatType + m (Z)V method_16087 func_213415_v + m ()Lnet/minecraft/class_5132$class_5133; method_26881 func_234184_eY_ + m ()Lnet/minecraft/class_2960; method_16092 getCatTypeName + m (F)F method_16095 func_213424_x + f F field_16290 field_213433_bL + f F field_16291 field_213434_bM + f Lnet/minecraft/class_1856; field_6809 BREEDING_ITEMS + f Lnet/minecraft/class_1451$class_3698; field_6808 avoidPlayerGoal + f Lnet/minecraft/class_2940; field_6811 CAT_TYPE + f Ljava/util/Map; field_16283 TEXTURE_BY_ID + f Lnet/minecraft/class_1391; field_6810 temptGoal + f F field_16288 field_213435_bN + f Lnet/minecraft/class_2940; field_16285 COLLAR_COLOR + f F field_16286 field_213437_bP + f F field_16287 field_213438_bQ + f F field_16289 field_213436_bO + f Lnet/minecraft/class_2940; field_16284 field_213428_bG + f Lnet/minecraft/class_2940; field_16292 field_213429_bH +c net/minecraft/class_1451$class_3698 net/minecraft/entity/passive/CatEntity$AvoidPlayerGoal + f Lnet/minecraft/class_1451; field_16293 cat +c net/minecraft/class_1451$class_3699 net/minecraft/entity/passive/CatEntity$MorningGiftGoal + m ()Z method_16098 func_220805_g + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2338; method_27801 func_234186_a_ + m ()V method_16097 func_220804_h + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_27800 func_234185_a_ + f Lnet/minecraft/class_1451; field_16297 cat + f Lnet/minecraft/class_2338; field_16294 bedPos + f Lnet/minecraft/class_1657; field_16295 owner + f I field_16296 tickCounter +c net/minecraft/class_1451$class_3700 net/minecraft/entity/passive/CatEntity$TemptGoal + f Lnet/minecraft/class_1657; field_16298 temptingPlayer + f Lnet/minecraft/class_1451; field_17948 cat +c net/minecraft/class_1430 net/minecraft/entity/passive/CowEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26883 func_234188_eI_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1430; method_6483 func_241840_a +c net/minecraft/class_1431 net/minecraft/entity/passive/fish/CodEntity +c net/minecraft/class_1432 net/minecraft/entity/passive/IFlyingAnimal +c net/minecraft/class_1433 net/minecraft/entity/passive/DolphinEntity + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20664 func_223364_b + m (Lnet/minecraft/class_1433;)Ljava/util/Random; method_6488 access$100 + m ()Z method_6484 closeToTarget + m ()Lnet/minecraft/class_2338; method_6494 getTreasurePos + m (Lnet/minecraft/class_1542;)Z method_6485 func_205023_b + m ()I method_6491 getMoistness + m (Z)V method_6486 setGotFish + m ()Lnet/minecraft/class_4051; method_18425 func_213808_dY + m (I)V method_6489 setMoistness + m (Lnet/minecraft/class_1433;)Ljava/util/Random; method_18054 func_213809_b + m (Lnet/minecraft/class_2394;)V method_6492 func_208401_a + m (Lnet/minecraft/class_1433;)Ljava/util/Random; method_18055 func_213807_c + m ()Lnet/minecraft/class_5132$class_5133; method_26884 func_234190_eK_ + m (Lnet/minecraft/class_2338;)V method_6493 setTreasurePos + m ()Z method_6487 hasGotFish + f Lnet/minecraft/class_2940; field_6749 MOISTNESS + f Lnet/minecraft/class_2940; field_6747 TREASURE_POS + f Lnet/minecraft/class_2940; field_6750 GOT_FISH + f Ljava/util/function/Predicate; field_6748 ITEM_SELECTOR + f Lnet/minecraft/class_4051; field_18101 field_213810_bA +c net/minecraft/class_1433$1 net/minecraft/entity/passive/DolphinEntity$1 +c net/minecraft/class_1433$class_1435 net/minecraft/entity/passive/DolphinEntity$SwimToTreasureGoal + f Z field_6753 field_208058_b + f Lnet/minecraft/class_1433; field_6752 dolphin +c net/minecraft/class_1433$class_1436 net/minecraft/entity/passive/DolphinEntity$SwimWithPlayerGoal + f Lnet/minecraft/class_1433; field_6755 dolphin + f Lnet/minecraft/class_1657; field_6756 targetPlayer + f D field_6754 speed +c net/minecraft/class_1433$class_1434 net/minecraft/entity/passive/DolphinEntity$MoveHelperController + f Lnet/minecraft/class_1433; field_6751 dolphin +c net/minecraft/class_1433$class_1437 net/minecraft/entity/passive/DolphinEntity$PlayWithItemsGoal + m (Lnet/minecraft/class_1799;)V method_18056 func_220810_a + f I field_6758 field_205154_b + f Lnet/minecraft/class_1433; field_6757 field_205153_a +c net/minecraft/class_1439 net/minecraft/entity/passive/IronGolemEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26886 func_234200_m_ + m ()F method_22328 func_226511_et_ + m (Lnet/minecraft/class_1309;)Z method_6498 func_234199_j_ + m ()I method_6502 getHoldRoseTick + m ()I method_6501 getAttackTimer + m (Z)V method_6497 setHoldingRose + m (Z)V method_6499 setPlayerCreated + m ()Lnet/minecraft/class_1439$class_4621; method_23347 func_226512_l_ + m ()Z method_6496 isPlayerCreated + f I field_6762 attackTimer + f Lnet/minecraft/class_2940; field_6763 PLAYER_CREATED + f I field_25366 field_234197_bv_ + f I field_6759 holdRoseTick + f Lnet/minecraft/class_4801; field_25365 field_234196_bu_ + f Ljava/util/UUID; field_25367 field_234198_bw_ +c net/minecraft/class_1439$class_4621 net/minecraft/entity/passive/IronGolemEntity$Cracks + m (F)Lnet/minecraft/class_1439$class_4621; method_23693 func_226515_a_ + m (Ljava/lang/String;)Lnet/minecraft/class_1439$class_4621; valueOf valueOf + m ()[Lnet/minecraft/class_1439$class_4621; values values + m (Lnet/minecraft/class_1439$class_4621;)D method_23694 func_226516_a_ + f Lnet/minecraft/class_1439$class_4621; field_21084 HIGH + f F field_21492 field_226514_f_ + f Ljava/util/List; field_21491 field_226513_e_ + f Lnet/minecraft/class_1439$class_4621; field_21083 MEDIUM + f [Lnet/minecraft/class_1439$class_4621; field_21085 $VALUES + f Lnet/minecraft/class_1439$class_4621; field_21082 LOW + f Lnet/minecraft/class_1439$class_4621; field_21081 NONE +c net/minecraft/class_4019 net/minecraft/entity/passive/FoxEntity + m (Z)V method_18295 setStuck + m (Lnet/minecraft/class_1799;)V method_18289 spitOutItem + m (Lnet/minecraft/class_4019;)Z method_18256 func_213452_a + m (Lnet/minecraft/class_4019;)V method_18286 func_213459_e + m ()Z method_18273 isStuck + m ()Z method_18275 func_213490_ee + m (Lnet/minecraft/class_1309;)Z method_18429 func_234193_j_ + m (Lnet/minecraft/class_4019;F)F method_20435 func_234191_b_ + m (Lnet/minecraft/class_4019;)Ljava/util/Random; method_18287 func_213491_f + m (Lnet/minecraft/class_1309;)Z method_18254 func_213456_k + m (F)F method_18300 func_213503_w + m (Z)V method_18296 func_213461_s + m (Lnet/minecraft/class_1297;)Z method_18253 func_213463_a + m ()Z method_18285 func_213478_eo + m ()V method_18280 setAttackGoals + m ()Lnet/minecraft/class_4019$class_4039; method_18271 getVariantType + m (Z)V method_18301 setFoxAggroed + m (Lnet/minecraft/class_4019;Z)V method_18427 func_213476_a + m (Lnet/minecraft/class_1799;)Z method_18430 canEatItem + m ()Ljava/util/function/Predicate; method_18279 func_213477_ei + m ()Z method_18274 func_213480_dY + m ()Z method_18277 func_213467_eg + m ()Z method_18282 isFoxAggroed + m (Lnet/minecraft/class_1309;)Z method_18431 func_213497_j + m (Lnet/minecraft/class_4019$class_4039;)V method_18255 setVariantType + m ()Ljava/util/List; method_18281 getTrustedUUIDs + m (Lnet/minecraft/class_4019;)Ljava/util/Random; method_18288 func_213500_g + m (Z)V method_18297 setCrouching + m (Lnet/minecraft/class_4019;)Z method_24837 func_234195_k_ + m (IZ)V method_18269 setFoxFlag + m (I)Z method_18293 getFoxFlag + m (Z)V method_18302 setSleeping + m (Lnet/minecraft/class_4019;Z)V method_18259 func_213504_b + m (Lnet/minecraft/class_1309;)Z method_18262 func_213487_l + m ()Ljava/util/function/Predicate; method_18278 func_213457_eh + m (Lnet/minecraft/class_4019;)V method_18268 func_213458_c + m (Lnet/minecraft/class_1297;)Z method_18267 func_213470_c + m ()V method_18283 func_213454_em + m (Lnet/minecraft/class_4019;Ljava/util/UUID;)Z method_18426 func_213496_b + m (Lnet/minecraft/class_1309;)Z method_20451 func_213469_i + m (Ljava/util/UUID;)Z method_18428 isTrustedUUID + m (Lnet/minecraft/class_4019;)Ljava/util/Random; method_18290 func_213506_h + m (Lnet/minecraft/class_4019;)Z method_24836 func_234194_j_ + m ()Z method_18272 isSitting + m (Lnet/minecraft/class_4019;Lnet/minecraft/class_1309;)Z method_18257 func_213481_a + m ()Lnet/minecraft/class_5132$class_5133; method_26885 func_234192_eI_ + m (Z)V method_18299 func_213502_u + m (Lnet/minecraft/class_1799;)V method_18291 spawnItem + m (Lnet/minecraft/class_4019;Z)V method_18264 func_213494_c + m (Lnet/minecraft/class_4019;)Z method_18263 func_213484_b + m (Lnet/minecraft/class_1309;)Z method_24347 func_213493_h + m ()V method_18284 func_213499_en + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_4019; method_18260 func_241840_a + m (Lnet/minecraft/class_1297;)Z method_18261 func_213498_b + m (Lnet/minecraft/class_4019;F)F method_20434 func_213460_b + m (Lnet/minecraft/class_4019;)Z method_18292 func_213488_i + m (Lnet/minecraft/class_4019;Ljava/util/UUID;)V method_18258 func_213462_a + m (Ljava/util/UUID;)V method_18266 addTrustedUUID + m (F)F method_18298 func_213475_v + m (Z)V method_18294 setSitting + m (Lnet/minecraft/class_1542;)Z method_18265 func_213489_b + m (Lnet/minecraft/class_4019;)Ljava/util/List; method_18270 func_213483_d + f Ljava/util/function/Predicate; field_17955 IS_PREY + f Lnet/minecraft/class_2940; field_17950 FOX_FLAGS + f I field_17964 eatTicks + f F field_17960 interestedAngle + f Lnet/minecraft/class_1352; field_17959 attackFish + f Ljava/util/function/Predicate; field_17954 STALKABLE_PREY + f F field_17961 interestedAngleO + f Lnet/minecraft/class_2940; field_17951 TRUSTED_UUID_SECONDARY + f Lnet/minecraft/class_1352; field_17958 attackTurtles + f Lnet/minecraft/class_2940; field_17952 TRUSTED_UUID_MAIN + f Ljava/util/function/Predicate; field_17953 TRUSTED_TARGET_SELECTOR + f F field_17962 crouchAmount + f Lnet/minecraft/class_1352; field_17957 attackAnimals + f Ljava/util/function/Predicate; field_17956 SHOULD_AVOID + f F field_17963 crouchAmountO + f Lnet/minecraft/class_2940; field_17949 FOX_TYPE +c net/minecraft/class_4019$1 net/minecraft/entity/passive/FoxEntity$1 +c net/minecraft/class_4019$class_4034 net/minecraft/entity/passive/FoxEntity$FindItemsGoal + f Lnet/minecraft/class_4019; field_17985 field_220826_a +c net/minecraft/class_4019$class_4031 net/minecraft/entity/passive/FoxEntity$StrollGoal + m ()Z method_18308 func_220759_g + f Lnet/minecraft/class_4019; field_17982 field_220760_a +c net/minecraft/class_4019$class_4032 net/minecraft/entity/passive/FoxEntity$PanicGoal + f Lnet/minecraft/class_4019; field_17983 field_220739_f +c net/minecraft/class_4019$class_4033 net/minecraft/entity/passive/FoxEntity$PounceGoal + f Lnet/minecraft/class_4019; field_17984 field_220714_a +c net/minecraft/class_4019$class_4037 net/minecraft/entity/passive/FoxEntity$SleepGoal + m ()Z method_18432 func_220823_j + f I field_17994 field_220825_c + f Lnet/minecraft/class_4019; field_17993 field_220824_b +c net/minecraft/class_4019$class_4038 net/minecraft/entity/passive/FoxEntity$FollowTargetGoal + f Lnet/minecraft/class_4019; field_17995 field_220827_a +c net/minecraft/class_4019$class_4035 net/minecraft/entity/passive/FoxEntity$SitAndLookGoal + m ()V method_18309 func_220817_j + f I field_17989 field_220821_e + f Lnet/minecraft/class_4019; field_17986 field_220818_b + f D field_17987 field_220819_c + f D field_17988 field_220820_d + f I field_17990 field_220822_f +c net/minecraft/class_4019$class_4036 net/minecraft/entity/passive/FoxEntity$FindShelterGoal + f I field_17992 cooldown + f Lnet/minecraft/class_4019; field_17991 field_220703_b +c net/minecraft/class_4019$class_4039 net/minecraft/entity/passive/FoxEntity$Type + m (Ljava/lang/String;)Lnet/minecraft/class_4019$class_4039; method_18314 getTypeByName + m (I)[Lnet/minecraft/class_4019$class_4039; method_18316 func_221084_b + m (Ljava/util/Optional;)Lnet/minecraft/class_4019$class_4039; method_18313 func_242325_a + m (Ljava/lang/String;)Lnet/minecraft/class_4019$class_4039; valueOf valueOf + m ()I method_18317 getIndex + m ()Ljava/lang/String; method_18310 getName + m ()[Lnet/minecraft/class_4019$class_4039; values values + m (I)Lnet/minecraft/class_4019$class_4039; method_18311 getTypeByIndex + m (Lnet/minecraft/class_4019$class_4039;)Lnet/minecraft/class_4019$class_4039; method_18312 func_221081_a + f Ljava/util/Map; field_17999 TYPES_BY_NAME + f Ljava/lang/String; field_18001 name + f I field_18000 index + f Ljava/util/List; field_18002 spawnBiomes + f [Lnet/minecraft/class_4019$class_4039; field_18003 $VALUES + f Lnet/minecraft/class_4019$class_4039; field_17997 SNOW + f [Lnet/minecraft/class_4019$class_4039; field_17998 field_221088_c + f Lnet/minecraft/class_4019$class_4039; field_17996 RED +c net/minecraft/class_4019$class_4020 net/minecraft/entity/passive/FoxEntity$RevengeGoal + f I field_17968 field_220788_l + f Lnet/minecraft/class_4019; field_17965 field_220785_i + f Lnet/minecraft/class_1309; field_17967 field_220787_k + f Lnet/minecraft/class_1309; field_17966 field_220786_j +c net/minecraft/class_4019$class_4023 net/minecraft/entity/passive/FoxEntity$BaseGoal + m ()Z method_18306 func_220814_h + m ()Z method_18305 func_220813_g + f Lnet/minecraft/class_4051; field_18102 field_220816_b + f Lnet/minecraft/class_4019; field_17972 field_220815_a +c net/minecraft/class_4019$class_4024 net/minecraft/entity/passive/FoxEntity$MateGoal + f Lnet/minecraft/class_4019; field_17973 field_220690_d +c net/minecraft/class_4019$class_4021 net/minecraft/entity/passive/FoxEntity$JumpGoal + f Lnet/minecraft/class_4019; field_17970 field_220812_b + f I field_17969 delay +c net/minecraft/class_4019$class_4022 net/minecraft/entity/passive/FoxEntity$AlertablePredicate + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_1309;)Z method_18303 test + f Lnet/minecraft/class_4019; field_17971 field_221079_a +c net/minecraft/class_4019$class_4052 net/minecraft/entity/passive/FoxEntity$FollowGoal + f Lnet/minecraft/class_4019; field_18103 field_220705_a + f Lnet/minecraft/class_4019; field_18104 owner +c net/minecraft/class_4019$class_4027 net/minecraft/entity/passive/FoxEntity$FoxData + f Lnet/minecraft/class_4019$class_4039; field_17977 field_220366_a +c net/minecraft/class_4019$class_4025 net/minecraft/entity/passive/FoxEntity$EatBerriesGoal + m ()V method_18307 eatBerry + f I field_17974 field_220731_g + f Lnet/minecraft/class_4019; field_17975 field_220732_h +c net/minecraft/class_4019$class_4026 net/minecraft/entity/passive/FoxEntity$SwimGoal + f Lnet/minecraft/class_4019; field_17976 field_220701_a +c net/minecraft/class_4019$class_4029 net/minecraft/entity/passive/FoxEntity$BiteGoal + f Lnet/minecraft/class_4019; field_17980 field_220721_d +c net/minecraft/class_4019$class_4030 net/minecraft/entity/passive/FoxEntity$MoveHelperController + f Lnet/minecraft/class_4019; field_17981 field_220671_i +c net/minecraft/class_4019$class_4292 net/minecraft/entity/passive/FoxEntity$WatchGoal + f Lnet/minecraft/class_4019; field_19261 field_220717_f +c net/minecraft/class_4019$class_4028 net/minecraft/entity/passive/FoxEntity$LookHelperController + f Lnet/minecraft/class_4019; field_17979 field_220683_h +c net/minecraft/class_3701 net/minecraft/entity/passive/OcelotEntity + m ()Z method_16099 isTrusting + m (Lnet/minecraft/class_3701;)Z method_16101 func_213526_a + m ()V method_16103 func_213529_dV + m ()F method_22329 func_226517_es_ + m ()Lnet/minecraft/class_5132$class_5133; method_26887 func_234201_eI_ + m (Z)V method_16100 func_213527_s + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20666 func_223319_c + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_3701; method_16104 func_241840_a + m (Z)V method_16102 setTrusting + f Lnet/minecraft/class_1856; field_16299 BREEDING_ITEMS + f Lnet/minecraft/class_3701$class_3702; field_16300 field_213531_bB + f Lnet/minecraft/class_2940; field_16301 IS_TRUSTING + f Lnet/minecraft/class_3701$class_3703; field_16302 aiTempt +c net/minecraft/class_3701$class_3702 net/minecraft/entity/passive/OcelotEntity$AvoidEntityGoal + f Lnet/minecraft/class_3701; field_16303 ocelot +c net/minecraft/class_3701$class_3703 net/minecraft/entity/passive/OcelotEntity$TemptGoal + f Lnet/minecraft/class_3701; field_16304 ocelot +c net/minecraft/class_1438 net/minecraft/entity/passive/MooshroomEntity + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1438; method_6495 func_241840_a + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20253 func_213442_a + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20665 func_223318_c + m (Lnet/minecraft/class_1438;)Lnet/minecraft/class_1438$class_4053; method_18434 func_213445_a + m (Lnet/minecraft/class_1438$class_4053;)V method_18433 setMooshroomType + m ()Lnet/minecraft/class_1438$class_4053; method_18435 getMooshroomType + m (Lnet/minecraft/class_1799;)Ljava/util/Optional; method_18436 getStewEffect + f I field_18107 effectDuration + f Ljava/util/UUID; field_18108 lightningUUID + f Lnet/minecraft/class_1291; field_18106 hasStewEffect + f Lnet/minecraft/class_2940; field_18105 MOOSHROOM_TYPE +c net/minecraft/class_1438$class_4053 net/minecraft/entity/passive/MooshroomEntity$Type + m (Ljava/lang/String;)Lnet/minecraft/class_1438$class_4053; method_18439 func_221096_a + m (Ljava/lang/String;)Lnet/minecraft/class_1438$class_4053; method_18441 getTypeByName + m ()[Lnet/minecraft/class_1438$class_4053; values values + m (Lnet/minecraft/class_1438$class_4053;)Ljava/lang/String; method_18438 func_221095_a + m (Lnet/minecraft/class_1438$class_4053;)Lnet/minecraft/class_2680; method_18440 func_221094_b + m (Ljava/lang/String;)Lnet/minecraft/class_1438$class_4053; valueOf valueOf + m ()Lnet/minecraft/class_2680; method_18437 getRenderState + f Lnet/minecraft/class_1438$class_4053; field_18110 BROWN + f [Lnet/minecraft/class_1438$class_4053; field_18113 $VALUES + f Ljava/lang/String; field_18111 name + f Lnet/minecraft/class_2680; field_18112 renderState + f Lnet/minecraft/class_1438$class_4053; field_18109 RED +c net/minecraft/class_1453 net/minecraft/entity/passive/ParrotEntity + m ()Z method_6581 isFlying + m ()Z method_6582 isPartying + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20667 func_223317_c + m (Lnet/minecraft/class_1937;Ljava/util/Random;)Lnet/minecraft/class_3414; method_6583 func_234212_a_ + m ()Lnet/minecraft/class_5132$class_5133; method_26889 func_234213_eS_ + m ()V method_6578 calculateFlapping + m (Ljava/util/HashMap;)V method_6579 func_200609_a + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;)Z method_6587 playMimicSound + m ()I method_6584 getVariant + m (Ljava/util/Random;)F method_6580 getPitch + m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_3414; method_6586 getMimicSound + m ()Ljava/util/Map; method_6588 access$000 + m (I)V method_6585 setVariant + f F field_6824 flapping + f Lnet/minecraft/class_2338; field_6820 jukeboxPosition + f Lnet/minecraft/class_1792; field_6828 DEADLY_ITEM + f F field_6829 oFlap + f F field_6827 oFlapSpeed + f Ljava/util/Map; field_6822 IMITATION_SOUND_EVENTS + f Z field_6823 partyParrot + f Ljava/util/function/Predicate; field_6821 CAN_MIMIC + f F field_6819 flapSpeed + f Lnet/minecraft/class_2940; field_6826 VARIANT + f F field_6818 flap + f Ljava/util/Set; field_6825 TAME_ITEMS +c net/minecraft/class_1453$1 net/minecraft/entity/passive/ParrotEntity$1 + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_1308;)Z method_6590 test +c net/minecraft/class_1440 net/minecraft/entity/passive/PandaEntity + m (IZ)V method_6557 setPandaFlag + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6506 func_234208_h_ + m ()Z method_6524 func_213566_eo + m ()Lnet/minecraft/class_1440$class_1443; method_6554 func_213590_ei + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6542 func_213543_j + m (Lnet/minecraft/class_1799;)Z method_16106 isBreedingItemOrCake + m (F)F method_6534 func_213561_v + m ()Lnet/minecraft/class_5132$class_5133; method_26888 func_234204_eW_ + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6551 func_213573_a + m (Z)V method_6513 func_213553_r + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6559 func_213570_c + m (Lnet/minecraft/class_1440;)Z method_6530 func_234211_p_ + m ()Z method_6509 isWorried + m (Lnet/minecraft/class_1440;)Lnet/minecraft/class_1440$class_4056; method_24215 func_234205_f_ + m (I)V method_6558 setEatCounter + m (I)V method_6517 setUnhappyCounter + m ()V method_6523 func_213550_ex + m (Z)V method_6541 func_213576_v + m ()V method_6548 func_213577_ez + m (Z)V method_6552 func_213534_t + m ()Ljava/util/function/Predicate; method_6540 func_234207_fh_ + m ()Z method_18442 canPerformAction + m (Lnet/minecraft/class_1440;Lnet/minecraft/class_1440;)V method_6515 getGenesForChildFromParents + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6518 func_229971_m_ + m ()V method_6536 func_213546_et + m ()Z method_6514 func_213567_dY + m (Lnet/minecraft/class_1440$class_1443;)V method_6529 setMainGene + m ()V method_6544 func_213574_ev + m ()Lnet/minecraft/class_1440$class_1443; method_6525 getMainGene + m ()Z method_6545 func_213539_dW + m (Lnet/minecraft/class_1440;)V method_18058 func_234209_i_ + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6531 func_226522_h_ + m ()Z method_6522 isPlayful + m ()Z method_6550 isWeak + m ()I method_6528 getEatCounter + m ()Lnet/minecraft/class_4051; method_24216 func_234206_fg_ + m ()V method_6538 setAttributes + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6511 func_213551_k + m ()V method_18057 tryToSit + m (Z)V method_6505 func_213542_s + m ()I method_6521 getUnhappyCounter + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6556 func_213540_b + m (Lnet/minecraft/class_1440;)Z method_6553 func_229973_o_ + m ()Z method_6526 func_213564_eh + m (Lnet/minecraft/class_1542;)Z method_6504 func_213575_b + m ()Z method_6549 isLazy + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6507 func_234203_e_ + m ()V method_6503 func_213563_ew + m ()Lnet/minecraft/class_1440$class_1443; method_6519 getOneOfGenesRandomly + m (I)V method_6539 setSneezeCounter + m (Z)V method_6546 func_213581_u + m ()V method_6537 func_213535_ey + m (Lnet/minecraft/class_1440;)Z method_24838 func_234202_a_ + m (F)F method_6555 func_213583_w + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6520 func_229970_l_ + m ()I method_6532 getSneezeCounter + m ()Z method_6527 func_213578_dZ + m (I)Z method_6533 getPandaFlag + m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6516 func_234210_n_ + m (Lnet/minecraft/class_1440$class_1443;)V method_6547 setHiddenGene + m (F)F method_6560 func_213591_x + m ()V method_6512 func_213533_eu + m ()Lnet/minecraft/class_1440$class_1443; method_6508 getHiddenGene + m ()Z method_6535 func_213556_dX + f Ljava/util/function/Predicate; field_6765 PANDA_ITEMS + f Lnet/minecraft/class_2940; field_6780 EAT_COUNTER + f Lnet/minecraft/class_2940; field_6764 UNHAPPY_COUNTER + f Lnet/minecraft/class_2940; field_6781 HIDDEN_GENE + f F field_6777 sitAmount + f F field_6775 onBackAmountO + f F field_6779 sitAmountO + f Z field_6770 didBite + f Lnet/minecraft/class_4051; field_21803 BREED_TARGETING + f I field_6767 rollCounter + f F field_6773 rollAmountO + f Z field_6769 gotBamboo + f Lnet/minecraft/class_2940; field_6771 SNEEZE_COUNTER + f Lnet/minecraft/class_2940; field_6768 PANDA_FLAGS + f Lnet/minecraft/class_2940; field_6766 MAIN_GENE + f Lnet/minecraft/class_1440$class_4056; field_21804 watchGoal + f F field_6774 onBackAmount + f Lnet/minecraft/class_243; field_18277 rollDelta + f F field_6772 rollAmount +c net/minecraft/class_1440$class_1450 net/minecraft/entity/passive/PandaEntity$ChildPlayGoal + f Lnet/minecraft/class_1440; field_6806 panda +c net/minecraft/class_1440$class_1448 net/minecraft/entity/passive/PandaEntity$RollGoal + f Lnet/minecraft/class_1440; field_6803 panda +c net/minecraft/class_1440$class_1449 net/minecraft/entity/passive/PandaEntity$SitGoal + f I field_6804 field_220832_b + f Lnet/minecraft/class_1440; field_6805 field_220831_a +c net/minecraft/class_1440$class_1443 net/minecraft/entity/passive/PandaEntity$Gene + m ()Z method_6568 func_221107_c + m (Ljava/lang/String;)Lnet/minecraft/class_1440$class_1443; valueOf valueOf + m ()Ljava/lang/String; method_6565 getName + m (Lnet/minecraft/class_1440$class_1443;Lnet/minecraft/class_1440$class_1443;)Lnet/minecraft/class_1440$class_1443; method_6569 func_221101_b + m (Lnet/minecraft/class_1440$class_1443;Lnet/minecraft/class_1440$class_1443;)Lnet/minecraft/class_1440$class_1443; method_6570 func_221103_a + m (Ljava/lang/String;)Lnet/minecraft/class_1440$class_1443; method_6567 byName + m (Ljava/util/Random;)Lnet/minecraft/class_1440$class_1443; method_17688 getRandomType + m (I)[Lnet/minecraft/class_1440$class_1443; method_6563 func_221102_b + m ()[Lnet/minecraft/class_1440$class_1443; values values + m (I)Lnet/minecraft/class_1440$class_1443; method_6566 byIndex + m ()I method_6564 getIndex + f Lnet/minecraft/class_1440$class_1443; field_6791 PLAYFUL + f Ljava/lang/String; field_6797 name + f Lnet/minecraft/class_1440$class_1443; field_6795 WORRIED + f [Lnet/minecraft/class_1440$class_1443; field_6786 field_221109_h + f Lnet/minecraft/class_1440$class_1443; field_6794 LAZY + f Lnet/minecraft/class_1440$class_1443; field_6789 AGGRESSIVE + f Lnet/minecraft/class_1440$class_1443; field_6793 WEAK + f Lnet/minecraft/class_1440$class_1443; field_6792 BROWN + f [Lnet/minecraft/class_1440$class_1443; field_6796 $VALUES + f I field_6785 index + f Lnet/minecraft/class_1440$class_1443; field_6788 NORMAL + f Z field_6790 field_221112_k +c net/minecraft/class_1440$class_1442 net/minecraft/entity/passive/PandaEntity$MateGoal + m ()Z method_6561 func_220691_h + f Lnet/minecraft/class_1440; field_6784 panda + f Lnet/minecraft/class_1440; field_21805 field_229974_d_ + f I field_6783 field_220694_f +c net/minecraft/class_1440$class_1444 net/minecraft/entity/passive/PandaEntity$RevengeGoal + f Lnet/minecraft/class_1440; field_6798 panda +c net/minecraft/class_1440$class_4054 net/minecraft/entity/passive/PandaEntity$AttackGoal + f Lnet/minecraft/class_1440; field_18114 panda +c net/minecraft/class_1440$class_1441 net/minecraft/entity/passive/PandaEntity$AvoidGoal + f Lnet/minecraft/class_1440; field_6782 panda +c net/minecraft/class_1440$class_1446 net/minecraft/entity/passive/PandaEntity$MoveHelperController + f Lnet/minecraft/class_1440; field_6801 panda +c net/minecraft/class_1440$class_1447 net/minecraft/entity/passive/PandaEntity$PanicGoal + f Lnet/minecraft/class_1440; field_6802 panda +c net/minecraft/class_1440$class_1445 net/minecraft/entity/passive/PandaEntity$LieBackGoal + f Lnet/minecraft/class_1440; field_6800 panda + f I field_6799 field_220829_b +c net/minecraft/class_1440$class_4056 net/minecraft/entity/passive/PandaEntity$WatchGoal + m (Lnet/minecraft/class_1309;)V method_24217 func_229975_a_ + f Lnet/minecraft/class_1440; field_18116 field_220718_f +c net/minecraft/class_1456 net/minecraft/entity/passive/PolarBearEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26891 func_234219_eI_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20668 func_223320_c + m (F)F method_6601 getStandingAnimationScale + m ()V method_6602 playWarningSound + m (Z)V method_6603 setStanding + m ()Z method_6600 isStanding + f Lnet/minecraft/class_4801; field_25369 field_234217_by_ + f F field_6838 clientSideStandAnimation0 + f F field_6837 clientSideStandAnimation + f Ljava/util/UUID; field_25368 field_234216_bA_ + f I field_6839 warningSoundTicks + f Lnet/minecraft/class_2940; field_6840 IS_STANDING + f I field_25370 field_234218_bz_ +c net/minecraft/class_1456$class_1457 net/minecraft/entity/passive/PolarBearEntity$AttackPlayerGoal + f Lnet/minecraft/class_1456; field_6841 field_190107_i +c net/minecraft/class_1456$class_1459 net/minecraft/entity/passive/PolarBearEntity$HurtByTargetGoal + f Lnet/minecraft/class_1456; field_6843 field_190106_a +c net/minecraft/class_1456$class_1460 net/minecraft/entity/passive/PolarBearEntity$MeleeAttackGoal + f Lnet/minecraft/class_1456; field_6844 field_190103_h +c net/minecraft/class_1456$class_1461 net/minecraft/entity/passive/PolarBearEntity$PanicGoal + f Lnet/minecraft/class_1456; field_6845 field_190104_b +c net/minecraft/class_1452 net/minecraft/entity/passive/PigEntity + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1452; method_6574 func_241840_a + m ()Lnet/minecraft/class_5132$class_5133; method_26890 func_234215_eI_ + f Lnet/minecraft/class_1856; field_6817 TEMPTATION_ITEMS + f Lnet/minecraft/class_2940; field_6815 BOOST_TIME + f Lnet/minecraft/class_4980; field_23230 field_234214_bx_ + f Lnet/minecraft/class_2940; field_6816 SADDLED +c net/minecraft/class_1463 net/minecraft/entity/passive/RabbitEntity + m ()I method_6610 getRabbitType + m (F)F method_6605 getJumpCompletion + m ()V method_6618 startJumping + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1463; method_6620 func_241840_a + m ()Lnet/minecraft/class_5132$class_5133; method_26892 func_234224_eJ_ + m ()Z method_6607 isCarrotEaten + m (Lnet/minecraft/class_1792;)Z method_6614 isRabbitBreedingItem + m (I)V method_6617 setRabbitType + m (Lnet/minecraft/class_1936;)I method_6622 getRandomRabbitType + m ()V method_6621 disableJumpControl + m ()V method_6608 updateMoveTypeDuration + m (D)V method_6606 setMovementSpeed + m (Lnet/minecraft/class_1463;)Z method_24839 access$000 + m ()V method_6619 checkLandingDelay + m ()Lnet/minecraft/class_3414; method_6615 getJumpSound + m ()V method_6611 enableJumpControl + m (Lnet/minecraft/class_1463;)Z method_6612 func_234223_d_ + m (Lnet/minecraft/class_1463;)Z method_6609 func_234221_b_ + m (Lnet/minecraft/class_1463;I)I method_6613 func_234220_a_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20669 func_223321_c + m (DD)V method_6616 calculateRotationYaw + m (Lnet/minecraft/class_1463;)Lnet/minecraft/class_1334; method_6604 func_234222_c_ + f I field_6851 jumpTicks + f I field_6849 jumpDuration + f Lnet/minecraft/class_2960; field_6846 KILLER_BUNNY + f Lnet/minecraft/class_2940; field_6852 RABBIT_TYPE + f I field_6848 currentMoveTypeDuration + f I field_6847 carrotTicks + f Z field_6850 wasOnGround +c net/minecraft/class_1463$class_1470 net/minecraft/entity/passive/RabbitEntity$RaidFarmGoal + f Z field_6861 canRaid + f Lnet/minecraft/class_1463; field_6863 rabbit + f Z field_6862 wantsToRaid +c net/minecraft/class_1463$class_1468 net/minecraft/entity/passive/RabbitEntity$MoveHelperController + f D field_6858 nextJumpSpeed + f Lnet/minecraft/class_1463; field_6859 rabbit +c net/minecraft/class_1463$class_1469 net/minecraft/entity/passive/RabbitEntity$PanicGoal + f Lnet/minecraft/class_1463; field_6860 rabbit +c net/minecraft/class_1463$class_1466 net/minecraft/entity/passive/RabbitEntity$RabbitData + f I field_6854 typeData +c net/minecraft/class_1463$class_5197 net/minecraft/entity/passive/RabbitEntity$JumpHelperController + m ()Z method_27312 getIsJumping + m ()Z method_27313 canJump + m (Z)V method_27311 setCanJump + f Lnet/minecraft/class_1463; field_24089 field_180069_b + f Lnet/minecraft/class_1463; field_24090 rabbit + f Z field_24091 canJump +c net/minecraft/class_1463$class_1464 net/minecraft/entity/passive/RabbitEntity$EvilAttackGoal +c net/minecraft/class_1463$class_1465 net/minecraft/entity/passive/RabbitEntity$AvoidEntityGoal + f Lnet/minecraft/class_1463; field_6853 rabbit +c net/minecraft/class_1454 net/minecraft/entity/passive/fish/PufferfishEntity + m ()Ljava/util/function/Predicate; method_6599 func_205720_dI + m (Lnet/minecraft/class_1308;)V method_6593 attack + m (Lnet/minecraft/class_1309;)Z method_6591 func_210139_f + m (I)F method_6592 getPuffSize + m ()I method_6594 getPuffState + m (Lnet/minecraft/class_1454;I)I method_6597 access$102 + m (I)V method_6596 setPuffState + m (Lnet/minecraft/class_1454;I)I method_6598 func_205721_b + f Lnet/minecraft/class_2940; field_6835 PUFF_STATE + f I field_6832 deflateTimer + f I field_6833 puffTimer + f Ljava/util/function/Predicate; field_6834 ENEMY_MATCHER +c net/minecraft/class_1454$class_1455 net/minecraft/entity/passive/fish/PufferfishEntity$PuffGoal + f Lnet/minecraft/class_1454; field_6836 fish +c net/minecraft/class_1472 net/minecraft/entity/passive/SheepEntity + m (Lnet/minecraft/class_1767;Lnet/minecraft/class_1767;)Lnet/minecraft/class_1767; method_17691 func_213615_b + m (F)F method_6628 getHeadRotationPointY + m (Lnet/minecraft/class_1767;)[F method_6630 createSheepColor + m (Z)V method_6635 setSheared + m (Lnet/minecraft/class_1767;)[F method_6634 getDyeRgb + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1472; method_6640 func_241840_a + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20254 func_213613_a + m ()Z method_6629 getSheared + m ()Lnet/minecraft/class_5132$class_5133; method_26893 func_234225_eI_ + m (Lnet/minecraft/class_1429;Lnet/minecraft/class_1429;)Lnet/minecraft/class_1767; method_6639 getDyeColorMixFromParents + m (Lnet/minecraft/class_1767;)V method_6631 setFleeceColor + m (Ljava/util/Random;)Lnet/minecraft/class_1767; method_6632 getRandomSheepColor + m (Lnet/minecraft/class_1767;Lnet/minecraft/class_1767;)Lnet/minecraft/class_1715; method_17690 createDyeColorCraftingInventory + m (F)F method_6641 getHeadRotationAngleX + m (Ljava/util/EnumMap;)V method_6637 func_203402_a + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_3955;)Lnet/minecraft/class_1799; method_17689 func_213614_a + m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_1767; method_6638 func_200204_d + m ()Lnet/minecraft/class_1767; method_6633 getFleeceColor + f Ljava/util/Map; field_6868 WOOL_BY_COLOR + f Ljava/util/Map; field_6867 DYE_TO_RGB + f Lnet/minecraft/class_2940; field_6870 DYE_COLOR + f Lnet/minecraft/class_1345; field_6869 eatGrassGoal + f I field_6865 sheepTimer +c net/minecraft/class_1472$1 net/minecraft/entity/passive/SheepEntity$1 +c net/minecraft/class_1472$2 net/minecraft/entity/passive/SheepEntity$2 + f [I field_6872 field_188569_a +c net/minecraft/class_1462 net/minecraft/entity/passive/fish/SalmonEntity +c net/minecraft/class_1473 net/minecraft/entity/passive/SnowGolemEntity + m (Z)V method_6642 setPumpkinEquipped + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20255 func_213622_a + m (Lnet/minecraft/class_1309;)Z method_18443 func_213621_h + m ()Z method_6643 isPumpkinEquipped + m ()Lnet/minecraft/class_5132$class_5133; method_26894 func_234226_m_ + f Lnet/minecraft/class_2940; field_6873 PUMPKIN_EQUIPPED +c net/minecraft/class_1471 net/minecraft/entity/passive/ShoulderRidingEntity + m (Lnet/minecraft/class_3222;)Z method_6627 func_213439_d + m ()Z method_6626 canSitOnShoulder + f I field_6864 rideCooldownCounter +c net/minecraft/class_1474 net/minecraft/entity/passive/fish/TropicalFishEntity + m (I)I method_6648 getPatternColor + m (I)Ljava/lang/String; method_6649 func_212324_b + m (I)I method_6653 getBodyColor + m (I)Lnet/minecraft/class_1767; method_6652 func_212326_d + m ()Lnet/minecraft/class_2960; method_6650 getBodyTexture + m (Lnet/minecraft/class_1474$class_1475;Lnet/minecraft/class_1767;Lnet/minecraft/class_1767;)I method_6647 pack + m (I)I method_6656 func_212325_s + m (I)Ljava/lang/String; method_6657 func_212327_q + m ()I method_6644 getVariant + m ()Lnet/minecraft/class_2960; method_6646 getPatternTexture + m (I)Lnet/minecraft/class_1767; method_6651 func_212323_p + m (I)V method_6659 setVariant + m (I)I method_6645 getPattern + m ()[F method_6658 func_204219_dC + m ()[F method_6655 func_204222_dD + m ()I method_6654 getSize + f [Lnet/minecraft/class_2960; field_6876 PATTERN_TEXTURES_B + f [I field_6879 SPECIAL_VARIANTS + f [Lnet/minecraft/class_2960; field_6878 PATTERN_TEXTURES_A + f [Lnet/minecraft/class_2960; field_6875 BODY_TEXTURES + f Z field_6877 field_204228_bA + f Lnet/minecraft/class_2940; field_6874 VARIANT +c net/minecraft/class_1474$class_1475 net/minecraft/entity/passive/fish/TropicalFishEntity$Type + m ()Ljava/lang/String; method_6661 func_212549_c + m ()I method_6663 func_212551_b + m ()[Lnet/minecraft/class_1474$class_1475; values values + m (II)Ljava/lang/String; method_6660 func_212548_a + m ()I method_6662 func_212550_a + m (Ljava/lang/String;)Lnet/minecraft/class_1474$class_1475; valueOf valueOf + f Lnet/minecraft/class_1474$class_1475; field_6890 DASHER + f Lnet/minecraft/class_1474$class_1475; field_6882 SNOOPER + f Lnet/minecraft/class_1474$class_1475; field_6880 SUNSTREAK + f Lnet/minecraft/class_1474$class_1475; field_6889 CLAYFISH + f Lnet/minecraft/class_1474$class_1475; field_6881 KOB + f Lnet/minecraft/class_1474$class_1475; field_6888 BETTY + f [Lnet/minecraft/class_1474$class_1475; field_6886 $VALUES + f [Lnet/minecraft/class_1474$class_1475; field_6885 field_212554_o + f I field_6894 field_212553_n + f Lnet/minecraft/class_1474$class_1475; field_6884 BLOCKFISH + f Lnet/minecraft/class_1474$class_1475; field_6883 GLITTER + f I field_6895 field_212552_m + f Lnet/minecraft/class_1474$class_1475; field_6887 STRIPEY + f Lnet/minecraft/class_1474$class_1475; field_6893 FLOPPER + f Lnet/minecraft/class_1474$class_1475; field_6892 SPOTTY + f Lnet/minecraft/class_1474$class_1475; field_6891 BRINELY +c net/minecraft/class_1474$class_1476 net/minecraft/entity/passive/fish/TropicalFishEntity$TropicalFishData + m (Lnet/minecraft/class_1474$class_1476;)I method_6666 access$300 + m (Lnet/minecraft/class_1474$class_1476;)I method_6667 access$200 + m (Lnet/minecraft/class_1474$class_1476;)I method_6664 access$100 + m (Lnet/minecraft/class_1474$class_1476;)I method_6665 access$000 + f I field_6896 patternColor + f I field_6897 bodyColor + f I field_6898 pattern + f I field_6899 size +c net/minecraft/class_1474$1 net/minecraft/entity/passive/fish/TropicalFishEntity$1 +c net/minecraft/class_1477 net/minecraft/entity/passive/SquidEntity + m (Lnet/minecraft/class_1477;)Z method_6668 access$100 + m (FFF)V method_6670 setMovementVector + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20670 func_223365_b + m ()Lnet/minecraft/class_5132$class_5133; method_26895 func_234227_m_ + m ()V method_6669 squirtInk + m ()Z method_6672 hasMovementVector + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_6671 func_207400_b + f F field_6913 rotateSpeed + f F field_6910 randomMotionVecX + f F field_6911 randomMotionVecY + f F field_6909 randomMotionVecZ + f F field_6903 squidYaw + f F field_6906 prevSquidYaw + f F field_6908 squidRotation + f F field_6902 prevSquidRotation + f F field_6905 prevSquidPitch + f F field_6904 tentacleAngle + f F field_6907 squidPitch + f F field_6900 lastTentacleAngle + f F field_6901 randomMotionSpeed + f F field_6912 rotationVelocity +c net/minecraft/class_1477$class_1479 net/minecraft/entity/passive/SquidEntity$MoveRandomGoal + f Lnet/minecraft/class_1477; field_6916 field_203126_a + f Lnet/minecraft/class_1477; field_6917 squid +c net/minecraft/class_1477$class_1478 net/minecraft/entity/passive/SquidEntity$FleeGoal + f Lnet/minecraft/class_1477; field_6914 field_203124_a + f I field_6915 tickCounter +c net/minecraft/class_1477$1 net/minecraft/entity/passive/SquidEntity$1 +c net/minecraft/class_1480 net/minecraft/entity/passive/WaterMobEntity + m (I)V method_6673 updateAir +c net/minecraft/class_1481 net/minecraft/entity/passive/TurtleEntity + m (Z)V method_6697 setGoingHome + m (Z)V method_6676 setDigging + m (Lnet/minecraft/class_1481;)Z method_24840 access$1300 + m ()Z method_6679 hasEgg + m (Z)V method_6680 setHasEgg + m (Lnet/minecraft/class_1481;)Ljava/util/Random; method_6677 access$1200 + m (Lnet/minecraft/class_1481;)Z method_6686 func_234229_i_ + m ()Z method_6695 isDigging + m ()Lnet/minecraft/class_2338; method_6693 getHome + m (Lnet/minecraft/class_1309;)Z method_6688 func_213616_h + m ()Lnet/minecraft/class_2338; method_6687 getTravelPos + m (Z)V method_6696 setTravelling + m ()Lnet/minecraft/class_5132$class_5133; method_26896 func_234228_eK_ + m (Lnet/minecraft/class_1481;)Ljava/util/Random; method_6685 access$300 + m (Lnet/minecraft/class_1481;Lnet/minecraft/class_2338;)V method_6682 access$400 + m (Lnet/minecraft/class_1481;Z)V method_6689 access$500 + m (Lnet/minecraft/class_1481;Z)V method_6694 access$800 + m (Lnet/minecraft/class_1481;Z)V method_6698 access$900 + m ()Z method_6684 isGoingHome + m (Lnet/minecraft/class_2338;)V method_6683 setHome + m (Lnet/minecraft/class_1481;)Lnet/minecraft/class_2338; method_6675 access$600 + m ()Z method_6691 isTravelling + m (Lnet/minecraft/class_1481;)Lnet/minecraft/class_2338; method_6692 access$700 + m (Lnet/minecraft/class_1481;Z)V method_6690 access$1100 + m (Lnet/minecraft/class_2338;)V method_6699 setTravelPos + m (Lnet/minecraft/class_1481;)Z method_6681 access$200 + m (Lnet/minecraft/class_1481;)I method_6674 access$1000 + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20671 func_223322_c + m (Lnet/minecraft/class_1481;)I method_6678 access$1008 + f Lnet/minecraft/class_2940; field_6922 TRAVEL_POS + f Lnet/minecraft/class_2940; field_6923 IS_DIGGING + f Lnet/minecraft/class_2940; field_6924 GOING_HOME + f Lnet/minecraft/class_2940; field_6925 TRAVELLING + f Ljava/util/function/Predicate; field_6921 TARGET_DRY_BABY + f Lnet/minecraft/class_2940; field_6920 HOME_POS + f Lnet/minecraft/class_2940; field_6919 HAS_EGG + f I field_6918 isDigging +c net/minecraft/class_1481$class_1482 net/minecraft/entity/passive/TurtleEntity$MateGoal + f Lnet/minecraft/class_1481; field_6926 turtle +c net/minecraft/class_1481$class_1485 net/minecraft/entity/passive/TurtleEntity$LayEggGoal + f Lnet/minecraft/class_1481; field_6932 turtle +c net/minecraft/class_1481$class_1486 net/minecraft/entity/passive/TurtleEntity$MoveHelperController + m ()V method_6700 updateSpeed + f Lnet/minecraft/class_1481; field_6933 turtle +c net/minecraft/class_1481$class_1483 net/minecraft/entity/passive/TurtleEntity$GoHomeGoal + f Z field_6929 field_203129_c + f I field_6928 field_203130_d + f D field_6927 speed + f Lnet/minecraft/class_1481; field_6930 turtle +c net/minecraft/class_1481$class_1484 net/minecraft/entity/passive/TurtleEntity$GoToWaterGoal + f Lnet/minecraft/class_1481; field_6931 turtle +c net/minecraft/class_1481$class_1489 net/minecraft/entity/passive/TurtleEntity$WanderGoal + f Lnet/minecraft/class_1481; field_6934 turtle +c net/minecraft/class_1481$class_1490 net/minecraft/entity/passive/TurtleEntity$PlayerTemptGoal + m (Lnet/minecraft/class_1799;)Z method_6701 isTemptedBy + f Lnet/minecraft/class_4051; field_18117 field_220834_a + f I field_6936 cooldown + f Lnet/minecraft/class_1481; field_6938 turtle + f D field_6935 speed + f Lnet/minecraft/class_1657; field_6939 tempter + f Ljava/util/Set; field_6937 temptItems +c net/minecraft/class_1481$class_1487 net/minecraft/entity/passive/TurtleEntity$PanicGoal +c net/minecraft/class_1481$class_1488 net/minecraft/entity/passive/TurtleEntity$Navigator +c net/minecraft/class_1481$class_1491 net/minecraft/entity/passive/TurtleEntity$TravelGoal + f D field_6940 speed + f Lnet/minecraft/class_1481; field_6942 turtle + f Z field_6941 field_203139_c +c net/minecraft/class_1481$1 net/minecraft/entity/passive/TurtleEntity$1 +c net/minecraft/class_1492 net/minecraft/entity/passive/horse/AbstractChestedHorseEntity + m ()I method_6702 getInventoryColumns + m ()Lnet/minecraft/class_5132$class_5133; method_26898 func_234234_eJ_ + m ()Z method_6703 hasChest + m ()V method_6705 playChestEquipSound + m (Z)V method_6704 setChested + f Lnet/minecraft/class_2940; field_6943 DATA_ID_CHEST +c net/minecraft/class_1493 net/minecraft/entity/passive/WolfEntity + m ()V method_31167 func_242326_eZ + m ()Lnet/minecraft/class_5132$class_5133; method_26897 func_234233_eS_ + m ()Z method_6710 isBegging + m (Lnet/minecraft/class_1493;)Ljava/util/Random; method_6716 access$000 + m (Lnet/minecraft/class_1309;)Z method_18444 func_213440_i + m (F)F method_6707 getShadingWhileWet + m (F)F method_6719 getInterestedAngle + m ()Z method_6711 isWolfWet + m ()Lnet/minecraft/class_1767; method_6713 getCollarColor + m (Z)V method_6712 setBegging + m (FF)F method_6715 getShakeAngle + m ()F method_6714 getTailRotation + m (Lnet/minecraft/class_1767;)V method_6708 setCollarColor + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1493; method_6717 func_241840_a + f Lnet/minecraft/class_2940; field_6946 BEGGING + f Lnet/minecraft/class_2940; field_6950 COLLAR_COLOR + f Lnet/minecraft/class_2940; field_25373 field_234232_bz_ + f F field_6945 prevTimeWolfIsShaking + f Lnet/minecraft/class_4801; field_25371 field_234230_bG_ + f Z field_6944 isWet + f Ljava/util/function/Predicate; field_18004 TARGET_ENTITIES + f Z field_6951 isShaking + f F field_6952 headRotationCourse + f F field_6949 headRotationCourseOld + f Ljava/util/UUID; field_25372 field_234231_bH_ + f F field_6947 timeWolfIsShaking +c net/minecraft/class_1493$class_1494 net/minecraft/entity/passive/WolfEntity$AvoidEntityGoal + m (Lnet/minecraft/class_1501;)Z method_6720 avoidLlama + f Lnet/minecraft/class_1493; field_6953 field_190855_c + f Lnet/minecraft/class_1493; field_6954 wolf +c net/minecraft/class_1495 net/minecraft/entity/passive/horse/DonkeyEntity +c net/minecraft/class_1496 net/minecraft/entity/passive/horse/AbstractHorseEntity + m (Lnet/minecraft/class_1799;)Z method_6773 isArmor + m ()Z method_6735 func_230276_fq_ + m (Lnet/minecraft/class_1296;Lnet/minecraft/class_1496;)V method_6743 setOffspringAttributes + m ()D method_6771 getHorseJumpStrength + m ()V method_6748 makeHorseRear + m (F)F method_6772 getMouthOpennessAngle + m ()Z method_6744 isBreeding + m ()V method_6738 openHorseMouth + m ()Z method_6734 canMate + m (F)F method_6739 getGrassEatingAmount + m ()F method_6754 getModifiedMaxHealth + m ()I method_6750 getInventorySize + m ()D method_6728 getModifiedMovementSpeed + m ()Lnet/minecraft/class_5132$class_5133; method_26899 func_234237_fg_ + m ()Z method_6762 canEatGrass + m ()V method_6733 eatingHorse + m ()V method_6723 playJumpSound + m (Lnet/minecraft/class_2498;)V method_6761 playGallopSound + m ()V method_6721 initHorseChest + m ()Z method_6727 isTame + m (I)Z method_6730 getHorseWatchableBoolean + m (Z)V method_6760 spawnHorseParticles + m ()Z method_6763 isHorseJumping + m ()I method_6755 getMaxTemper + m (IZ)V method_6769 setHorseWatchableBoolean + m (Z)V method_6740 setEatingHaystack + m ()Lnet/minecraft/class_3414; method_28368 func_230274_fe_ + m (Ljava/util/UUID;)V method_6732 setOwnerUniqueId + m (Z)V method_6758 setHorseJumping + m (I)I method_6745 increaseTemper + m ()I method_6729 getTemper + m ()Z method_6753 func_230277_fr_ + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1269; method_30009 func_241395_b_ + m ()V method_6764 initExtraAI + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Z method_6742 handleEating + m ()Z method_6736 isRearing + m (Lnet/minecraft/class_1657;)V method_6722 openGUI + m ()Ljava/util/UUID; method_6768 getOwnerUniqueId + m (Lnet/minecraft/class_1657;)V method_6726 mountTo + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1309;)Lnet/minecraft/class_243; method_27930 func_234236_a_ + m (Z)V method_6766 setHorseTamed + m ()D method_6774 getModifiedJumpStrength + m ()V method_6746 followMother + m ()V method_6001 func_230273_eI_ + m ()V method_6757 makeMad + m ()V method_6759 moveTail + m (Lnet/minecraft/class_1657;)Z method_6752 setTamedBy + m (Lnet/minecraft/class_1309;)Z method_6741 func_213617_h + m (Z)V method_6737 setRearing + m (I)V method_6749 setTemper + m ()V method_6731 func_230275_fc_ + m (Z)V method_6751 setBreeding + m ()Z method_6724 isEatingHaystack + m ()Lnet/minecraft/class_3414; method_6747 getAngrySound + m (F)F method_6767 getRearingAmount + f Lnet/minecraft/class_4051; field_18118 MOMMY_TARGETING + f F field_6976 jumpPower + f F field_6965 mouthOpenness + f I field_6975 gallopTime + f Lnet/minecraft/class_1277; field_6962 horseChest + f I field_6973 openMouthCounter + f I field_6957 tailCounter + f F field_6966 prevHeadLean + f Lnet/minecraft/class_2940; field_6972 OWNER_UNIQUE_ID + f Z field_6964 canGallop + f F field_6963 prevRearingAmount + f I field_6955 temper + f F field_6961 prevMouthOpenness + f Z field_6960 allowStandSliding + f Z field_6968 horseJumping + f Ljava/util/function/Predicate; field_6956 IS_HORSE_BREEDING + f I field_6970 jumpRearingCounter + f F field_6969 headLean + f I field_6958 sprintCounter + f Lnet/minecraft/class_2940; field_6959 STATUS + f F field_6967 rearingAmount + f Lnet/minecraft/class_1856; field_25374 field_234235_bE_ + f I field_6971 eatingCounter +c net/minecraft/class_1498 net/minecraft/entity/passive/horse/HorseEntity + m (Lnet/minecraft/class_1799;)V method_6790 func_213804_l + m ()Lnet/minecraft/class_1799; method_6786 func_213803_dV + m (Lnet/minecraft/class_5149;Lnet/minecraft/class_5148;)V method_27076 func_234238_a_ + m ()I method_6788 func_234241_eS_ + m ()Lnet/minecraft/class_5149; method_27077 func_234239_eK_ + m ()Lnet/minecraft/class_5148; method_27078 func_234240_eM_ + m (I)V method_6783 func_234242_w_ + m (Lnet/minecraft/class_1799;)V method_18445 func_213805_k + f Lnet/minecraft/class_2940; field_6990 HORSE_VARIANT + f Ljava/util/UUID; field_6985 ARMOR_MODIFIER_UUID +c net/minecraft/class_1498$class_1499 net/minecraft/entity/passive/horse/HorseEntity$HorseData + f Lnet/minecraft/class_5149; field_6994 variant +c net/minecraft/class_5148 net/minecraft/entity/passive/horse/CoatTypes + m ()I method_27079 getId + m (Ljava/lang/String;)Lnet/minecraft/class_5148; valueOf valueOf + m (I)[Lnet/minecraft/class_5148; method_27081 func_234249_b_ + m (I)Lnet/minecraft/class_5148; method_27080 func_234248_a_ + m ()[Lnet/minecraft/class_5148; values values + f Lnet/minecraft/class_5148; field_23812 BLACK_DOTS + f [Lnet/minecraft/class_5148; field_23815 $VALUES + f [Lnet/minecraft/class_5148; field_23813 VALUES + f Lnet/minecraft/class_5148; field_23808 NONE + f Lnet/minecraft/class_5148; field_23810 WHITE_FIELD + f I field_23814 id + f Lnet/minecraft/class_5148; field_23809 WHITE + f Lnet/minecraft/class_5148; field_23811 WHITE_DOTS +c net/minecraft/class_1501 net/minecraft/entity/passive/horse/LlamaEntity + m (I)V method_6802 setStrength + m ()I method_6803 getStrength + m (Lnet/minecraft/class_1501;)Z method_6801 access$100 + m (I)V method_6798 setVariant + m ()I method_6809 getVariant + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1501; method_6804 func_241840_a + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1767; method_6794 getCarpetColor + m ()V method_6797 leaveCaravan + m ()Lnet/minecraft/class_1501; method_18004 createChild + m (Z)V method_6808 setDidSpit + m ()Z method_6793 hasCaravanTrail + m ()Lnet/minecraft/class_5132$class_5133; method_26900 func_234244_fu_ + m ()Z method_6805 inCaravan + m ()V method_6796 setRandomStrength + m ()Lnet/minecraft/class_1767; method_6800 getColor + m ()Z method_6807 isTraderLlama + m (Lnet/minecraft/class_1767;)V method_6799 setColor + m ()Lnet/minecraft/class_1501; method_6806 getCaravanHead + m (Lnet/minecraft/class_1501;Z)V method_6795 access$200 + m (Lnet/minecraft/class_1309;)V method_6792 spit + m (Lnet/minecraft/class_1501;)V method_6791 joinCaravan + f Lnet/minecraft/class_2940; field_6996 DATA_VARIANT_ID + f Lnet/minecraft/class_2940; field_6998 DATA_STRENGTH_ID + f Z field_6999 didSpit + f Lnet/minecraft/class_2940; field_6995 DATA_COLOR_ID + f Lnet/minecraft/class_1856; field_25375 field_234243_bC_ + f Lnet/minecraft/class_1501; field_6997 caravanTail + f Lnet/minecraft/class_1501; field_7000 caravanHead +c net/minecraft/class_1501$class_1502 net/minecraft/entity/passive/horse/LlamaEntity$DefendTargetGoal + m (Lnet/minecraft/class_1309;)Z method_18446 func_220789_a +c net/minecraft/class_1501$class_1504 net/minecraft/entity/passive/horse/LlamaEntity$HurtByTargetGoal +c net/minecraft/class_1501$class_1503 net/minecraft/entity/passive/horse/LlamaEntity$LlamaData + f I field_7001 variant +c net/minecraft/class_1501$1 net/minecraft/entity/passive/horse/LlamaEntity$1 +c net/minecraft/class_1506 net/minecraft/entity/passive/horse/SkeletonHorseEntity + m (Z)V method_6813 setTrap + m ()Z method_6812 isTrap + m ()Lnet/minecraft/class_5132$class_5133; method_26901 func_234250_eJ_ + f Z field_7005 skeletonTrap + f Lnet/minecraft/class_1505; field_7003 skeletonTrapAI + f I field_7004 skeletonTrapTime +c net/minecraft/class_1500 net/minecraft/entity/passive/horse/MuleEntity +c net/minecraft/class_3986 net/minecraft/entity/passive/horse/TraderLlamaEntity + m ()Z method_20502 canDespawn + m ()Z method_20503 isLeashedToTrader + m ()Z method_20504 isLeashedToStranger + m ()V method_20501 tryDespawn + f I field_17716 despawnDelay +c net/minecraft/class_3986$class_3987 net/minecraft/entity/passive/horse/TraderLlamaEntity$FollowTraderGoal + f Lnet/minecraft/class_1501; field_17718 field_220800_b + f Lnet/minecraft/class_1309; field_17719 field_220801_c + f I field_17720 field_220802_d + f Lnet/minecraft/class_3986; field_17717 field_220799_a +c net/minecraft/class_1505 net/minecraft/entity/ai/goal/TriggerSkeletonTrapGoal + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_30768 func_242327_a + m (Lnet/minecraft/class_1266;)Lnet/minecraft/class_1496; method_6810 createHorse + m (Lnet/minecraft/class_1266;Lnet/minecraft/class_1496;)Lnet/minecraft/class_1613; method_6811 createSkeleton + f Lnet/minecraft/class_1506; field_7002 horse +c net/minecraft/class_1507 net/minecraft/entity/passive/horse/ZombieHorseEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26902 func_234256_eJ_ +c net/minecraft/class_5149 net/minecraft/entity/passive/horse/CoatColors + m (I)Lnet/minecraft/class_5149; method_27083 func_234254_a_ + m ()[Lnet/minecraft/class_5149; values values + m ()I method_27082 getId + m (I)[Lnet/minecraft/class_5149; method_27084 func_234255_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_5149; valueOf valueOf + f Lnet/minecraft/class_5149; field_23818 CHESTNUT + f Lnet/minecraft/class_5149; field_23817 CREAMY + f Lnet/minecraft/class_5149; field_23819 BROWN + f I field_23824 id + f [Lnet/minecraft/class_5149; field_23823 VALUES + f Lnet/minecraft/class_5149; field_23816 WHITE + f [Lnet/minecraft/class_5149; field_23825 $VALUES + f Lnet/minecraft/class_5149; field_23820 BLACK + f Lnet/minecraft/class_5149; field_23822 DARKBROWN + f Lnet/minecraft/class_5149; field_23821 GRAY +c net/minecraft/class_1508 net/minecraft/entity/boss/dragon/EnderDragonPartEntity + f Lnet/minecraft/class_4048; field_18119 field_213854_d + f Lnet/minecraft/class_1510; field_7007 dragon + f Ljava/lang/String; field_7006 field_213853_c +c net/minecraft/class_1510 net/minecraft/entity/boss/dragon/EnderDragonEntity + m (IF)[D method_6817 getMovementOffsets + m (Ljava/util/List;)V method_6825 collideWithEntities + m (Ljava/util/List;)V method_6827 attackEntitiesInList + m (Lnet/minecraft/class_1508;DDD)V method_22863 setPartPosition + m (I[D[D)F method_6823 getHeadPartYOffset + m ()Lnet/minecraft/class_2881; method_6829 getFightManager + m ()[Lnet/minecraft/class_1508; method_5690 getDragonParts + m (Lnet/minecraft/class_1511;Lnet/minecraft/class_2338;Lnet/minecraft/class_1282;)V method_6828 onCrystalDestroyed + m (Lnet/minecraft/class_1282;F)Z method_6819 attackDragonFrom + m ()Lnet/minecraft/class_5132$class_5133; method_26903 registerAttributes + m ()V method_6830 updateDragonEnderCrystal + m ()Lnet/minecraft/class_1526; method_6831 getPhaseManager + m (Lnet/minecraft/class_238;)Z method_6821 destroyBlocksInAABB + m (IILnet/minecraft/class_9;)Lnet/minecraft/class_11; method_6833 findPath + m (F)Lnet/minecraft/class_243; method_6834 getHeadLookVec + m (Lnet/minecraft/class_1508;Lnet/minecraft/class_1282;F)Z method_6816 attackEntityPartFrom + m ()I method_6818 initPathPoints + m (Lnet/minecraft/class_9;Lnet/minecraft/class_9;)Lnet/minecraft/class_11; method_6826 makePath + m (I)V method_6824 dropExperience + m (D)F method_6832 simplifyAngle + m ()F method_6820 getHeadAndNeckYOffset + m (DDD)I method_6822 getNearestPpIdx + f Lorg/apache/logging/log4j/Logger; field_7021 LOGGER + f Lnet/minecraft/class_2940; field_7013 PHASE + f Lnet/minecraft/class_1508; field_7014 dragonPartLeftWing + f Lnet/minecraft/class_1508; field_7017 dragonPartHead + f Lnet/minecraft/class_1508; field_7015 dragonPartRightWing + f I field_7029 sittingDamageReceived + f [Lnet/minecraft/class_9; field_7012 pathPoints + f [I field_7025 neighbors + f Lnet/minecraft/class_2881; field_7016 fightManager + f Z field_7027 slowed + f [[D field_7026 ringBuffer + f F field_7019 prevAnimTime + f F field_7030 animTime + f Lnet/minecraft/class_1508; field_7023 dragonPartBody + f F field_20865 field_226525_bB_ + f I field_7031 deathTicks + f Lnet/minecraft/class_1508; field_7011 dragonPartNeck + f I field_7018 growlTime + f Lnet/minecraft/class_1508; field_7022 dragonPartTail3 + f Lnet/minecraft/class_4051; field_18120 PLAYER_INVADER_CONDITION + f Lnet/minecraft/class_1508; field_7009 dragonPartTail2 + f Lnet/minecraft/class_5; field_7008 pathFindQueue + f Lnet/minecraft/class_1508; field_7020 dragonPartTail1 + f I field_7010 ringBufferIndex + f [Lnet/minecraft/class_1508; field_7032 dragonParts + f Lnet/minecraft/class_1511; field_7024 closestEnderCrystal + f Lnet/minecraft/class_1526; field_7028 phaseManager +c net/minecraft/class_1511 net/minecraft/entity/item/EnderCrystalEntity + m ()Lnet/minecraft/class_2338; method_6838 getBeamTarget + m (Lnet/minecraft/class_1282;)V method_6835 onCrystalDestroyed + m ()Z method_6836 shouldShowBottom + m (Z)V method_6839 setShowBottom + m (Lnet/minecraft/class_2338;)V method_6837 setBeamTarget + f Lnet/minecraft/class_2940; field_7033 BEAM_TARGET + f Lnet/minecraft/class_2940; field_7035 SHOW_BOTTOM + f I field_7034 innerRotation +c net/minecraft/class_1512 net/minecraft/entity/boss/dragon/phase/Phase + f Lnet/minecraft/class_1510; field_7036 dragon +c net/minecraft/class_1513 net/minecraft/entity/boss/dragon/phase/ChargingPlayerPhase + m (Lnet/minecraft/class_243;)V method_6840 setTarget + f Lorg/apache/logging/log4j/Logger; field_7039 LOGGER + f I field_7037 timeSinceCharge + f Lnet/minecraft/class_243; field_7038 targetLocation +c net/minecraft/class_1514 net/minecraft/entity/boss/dragon/phase/SittingPhase +c net/minecraft/class_1517 net/minecraft/entity/boss/dragon/phase/HoldingPatternPhase + m ()V method_6842 navigateToNextPathNode + m ()V method_6841 findNewTarget + m (Lnet/minecraft/class_1657;)V method_6843 strafePlayer + f Lnet/minecraft/class_11; field_7043 currentPath + f Lnet/minecraft/class_243; field_7045 targetLocation + f Lnet/minecraft/class_4051; field_18121 field_221117_b + f Z field_7044 clockwise +c net/minecraft/class_1515 net/minecraft/entity/boss/dragon/phase/DyingPhase + f Lnet/minecraft/class_243; field_7041 targetLocation + f I field_7040 time +c net/minecraft/class_1519 net/minecraft/entity/boss/dragon/phase/LandingApproachPhase + m ()V method_6845 navigateToNextPathNode + m ()V method_6844 findNewTarget + f Lnet/minecraft/class_4051; field_18122 field_221118_b + f Lnet/minecraft/class_11; field_7047 currentPath + f Lnet/minecraft/class_243; field_7048 targetLocation +c net/minecraft/class_1516 net/minecraft/entity/boss/dragon/phase/HoverPhase + f Lnet/minecraft/class_243; field_7042 targetLocation +c net/minecraft/class_1521 net/minecraft/entity/boss/dragon/phase/IPhase + m ()F method_6846 getMaxRiseOrFall + m ()V method_6853 clientTick + m ()Lnet/minecraft/class_243; method_6851 getTargetLocation + m ()Z method_6848 getIsStationary + m ()F method_6847 getYawFactor + m (Lnet/minecraft/class_1282;F)F method_6852 func_221113_a + m ()V method_6855 serverTick + m ()V method_6856 initPhase + m ()Lnet/minecraft/class_1527; method_6849 getType + m ()V method_6854 removeAreaEffect + m (Lnet/minecraft/class_1511;Lnet/minecraft/class_2338;Lnet/minecraft/class_1282;Lnet/minecraft/class_1657;)V method_6850 onCrystalDestroyed +c net/minecraft/class_1518 net/minecraft/entity/boss/dragon/phase/LandingPhase + f Lnet/minecraft/class_243; field_7046 targetLocation +c net/minecraft/class_1520 net/minecraft/entity/boss/dragon/phase/AttackingSittingPhase + f I field_7049 attackingTicks +c net/minecraft/class_1522 net/minecraft/entity/boss/dragon/phase/ScanningSittingPhase + m (Lnet/minecraft/class_1510;Lnet/minecraft/class_1309;)Z method_18447 func_221114_a + f Lnet/minecraft/class_4051; field_18124 field_221116_c + f I field_7050 scanningTime + f Lnet/minecraft/class_4051; field_18123 field_221115_b +c net/minecraft/class_1523 net/minecraft/entity/boss/dragon/phase/FlamingSittingPhase + m ()V method_6857 resetFlameCount + f I field_7053 flameTicks + f Lnet/minecraft/class_1295; field_7051 areaEffectCloud + f I field_7052 flameCount +c net/minecraft/class_1524 net/minecraft/entity/boss/dragon/phase/TakeoffPhase + m ()V method_6858 findNewTarget + m ()V method_6859 navigateToNextPathNode + f Lnet/minecraft/class_243; field_7055 targetLocation + f Lnet/minecraft/class_11; field_7054 currentPath + f Z field_7056 firstTick +c net/minecraft/class_1525 net/minecraft/entity/boss/dragon/phase/StrafePlayerPhase + m ()V method_6861 navigateToNextPathNode + m (Lnet/minecraft/class_1309;)V method_6862 setTarget + m ()V method_6860 findNewTarget + f Lnet/minecraft/class_1309; field_7062 attackTarget + f Lorg/apache/logging/log4j/Logger; field_7061 LOGGER + f Lnet/minecraft/class_243; field_7057 targetLocation + f Lnet/minecraft/class_11; field_7059 currentPath + f Z field_7058 holdingPatternClockwise + f I field_7060 fireballCharge +c net/minecraft/class_1526 net/minecraft/entity/boss/dragon/phase/PhaseManager + m ()Lnet/minecraft/class_1521; method_6864 getCurrentPhase + m (Lnet/minecraft/class_1527;)V method_6863 setPhase + m (Lnet/minecraft/class_1527;)Lnet/minecraft/class_1521; method_6865 getPhase + f [Lnet/minecraft/class_1521; field_7064 phases + f Lnet/minecraft/class_1510; field_7065 dragon + f Lorg/apache/logging/log4j/Logger; field_7066 LOGGER + f Lnet/minecraft/class_1521; field_7063 phase +c net/minecraft/class_1527 net/minecraft/entity/boss/dragon/phase/PhaseType + m (Ljava/lang/Class;Ljava/lang/String;)Lnet/minecraft/class_1527; method_6870 create + m ()I method_6871 getId + m (I)Lnet/minecraft/class_1527; method_6868 getById + m ()Ljava/lang/reflect/Constructor; method_6867 getConstructor + m ()I method_6869 getTotalPhases + m (Lnet/minecraft/class_1510;)Lnet/minecraft/class_1521; method_6866 createPhase + m ()Ljava/lang/String; toString toString + f I field_7079 id + f Lnet/minecraft/class_1527; field_7067 LANDING + f Lnet/minecraft/class_1527; field_7076 STRAFE_PLAYER + f Lnet/minecraft/class_1527; field_7071 LANDING_APPROACH + f Ljava/lang/Class; field_7074 clazz + f Lnet/minecraft/class_1527; field_7069 HOLDING_PATTERN + f Lnet/minecraft/class_1527; field_7068 DYING + f Lnet/minecraft/class_1527; field_7075 HOVER + f Lnet/minecraft/class_1527; field_7078 CHARGING_PLAYER + f Lnet/minecraft/class_1527; field_7073 SITTING_ATTACKING + f Lnet/minecraft/class_1527; field_7072 SITTING_FLAMING + f Ljava/lang/String; field_7070 name + f Lnet/minecraft/class_1527; field_7081 SITTING_SCANNING + f Lnet/minecraft/class_1527; field_7077 TAKEOFF + f [Lnet/minecraft/class_1527; field_7080 phases +c net/minecraft/class_1528 net/minecraft/entity/boss/WitherEntity + m (I)F method_6887 getHeadXRotation + m (I)V method_6875 setInvulTime + m (ILnet/minecraft/class_1309;)V method_6878 launchWitherSkullToEntity + m (I)D method_6874 getHeadX + m (I)I method_6882 getWatchedTargetId + m ()I method_6884 getInvulTime + m (I)D method_6880 getHeadY + m (I)D method_6881 getHeadZ + m (Lnet/minecraft/class_1309;)Z method_6873 func_213797_h + m (II)V method_6876 updateWatchedTargetId + m (I)F method_6879 getHeadYRotation + m ()V method_6885 ignite + m ()Lnet/minecraft/class_5132$class_5133; method_26904 registerAttributes + m (IDDDZ)V method_6877 launchWitherSkullToCoords + m (Lnet/minecraft/class_2680;)Z method_6883 canDestroyBlock + m (FFF)F method_6886 rotlerp + f Ljava/util/function/Predicate; field_7086 NOT_UNDEAD + f [F field_7083 yRotationHeads + f [F field_7084 xRotationHeads + f Lnet/minecraft/class_2940; field_7089 THIRD_HEAD_TARGET + f Lnet/minecraft/class_3213; field_7093 bossInfo + f Ljava/util/List; field_7087 HEAD_TARGETS + f Lnet/minecraft/class_2940; field_7085 INVULNERABILITY_TIME + f Lnet/minecraft/class_2940; field_7090 SECOND_HEAD_TARGET + f Lnet/minecraft/class_2940; field_7088 FIRST_HEAD_TARGET + f [F field_7094 yRotOHeads + f [F field_7095 xRotOHeads + f Lnet/minecraft/class_4051; field_18125 ENEMY_CONDITION + f [I field_7092 idleHeadUpdates + f [I field_7091 nextHeadUpdate + f I field_7082 blockBreakCounter +c net/minecraft/class_1528$class_1529 net/minecraft/entity/boss/WitherEntity$DoNothingGoal + f Lnet/minecraft/class_1528; field_7096 field_188517_a +c net/minecraft/class_1530 net/minecraft/entity/item/HangingEntity + m ()Lnet/minecraft/class_2338; method_6896 getHangingPosition + m ()V method_6895 updateBoundingBox + m ()I method_6891 getHeightPixels + m (Lnet/minecraft/class_1297;)Z method_6890 func_210144_b + m ()Z method_6888 onValidSurface + m (Lnet/minecraft/class_1297;)V method_6889 onBroken + m (Lnet/minecraft/class_2350;)V method_6892 updateFacingWithBoundingBox + m ()V method_6894 playPlaceSound + m (I)D method_6893 offs + m ()I method_6897 getWidthPixels + f Ljava/util/function/Predicate; field_7098 IS_HANGING_ENTITY + f I field_7097 tickCounter1 + f Lnet/minecraft/class_2350; field_7099 facingDirection + f Lnet/minecraft/class_2338; field_7100 hangingPosition +c net/minecraft/class_1530$1 net/minecraft/entity/item/HangingEntity$1 + f [I field_7101 field_210296_a +c net/minecraft/class_1531 net/minecraft/entity/item/ArmorStandEntity + m ()Lnet/minecraft/class_2379; method_6900 getRightLegRotation + m (Z)V method_6907 setNoBasePlate + m (Lnet/minecraft/class_2487;)V method_6928 readPose + m ()Lnet/minecraft/class_2379; method_6917 getLeftLegRotation + m (Lnet/minecraft/class_1297;)Z method_6918 func_200617_a + m ()Lnet/minecraft/class_2487; method_6911 writePose + m ()Z method_18059 func_213814_A + m ()Lnet/minecraft/class_2379; method_6923 getBodyRotation + m (Lnet/minecraft/class_1282;)V method_6924 breakArmorStand + m ()Lnet/minecraft/class_2379; method_6903 getRightArmRotation + m ()Lnet/minecraft/class_2379; method_6921 getHeadRotation + m (Lnet/minecraft/class_2379;)V method_6910 setLeftArmRotation + m (Lnet/minecraft/class_2379;)V method_6919 setHeadRotation + m (Z)Lnet/minecraft/class_4048; method_31168 func_242330_s + m (Lnet/minecraft/class_2379;)V method_6909 setLeftLegRotation + m ()Z method_6914 isSmall + m (Lnet/minecraft/class_243;)Lnet/minecraft/class_1304; method_6916 getClickedSlot + m ()Z method_6929 getShowArms + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;Lnet/minecraft/class_1268;)Z method_6904 equipOrSwap + m ()Z method_6912 hasMarker + m (Lnet/minecraft/class_1282;F)V method_6905 damageArmorStand + m (Z)V method_6902 setMarker + m (Lnet/minecraft/class_1282;)V method_6908 func_213816_g + m ()Lnet/minecraft/class_2379; method_6930 getLeftArmRotation + m (Z)V method_6913 setShowArms + m (Lnet/minecraft/class_1304;)Z method_6915 isDisabled + m (Lnet/minecraft/class_2379;)V method_6927 setBodyRotation + m (BIZ)B method_6906 setBit + m ()V method_6898 playParticles + m (Z)V method_6922 setSmall + m (Lnet/minecraft/class_2379;)V method_6925 setRightArmRotation + m ()V method_6920 playBrokenSound + m ()Z method_6901 hasNoBasePlate + m (Lnet/minecraft/class_2379;)V method_6926 setRightLegRotation + f Ljava/util/function/Predicate; field_7102 IS_RIDEABLE_MINECART + f Lnet/minecraft/class_2379; field_7104 headRotation + f Lnet/minecraft/class_2940; field_7122 BODY_ROTATION + f Lnet/minecraft/class_2940; field_7105 RIGHT_ARM_ROTATION + f Lnet/minecraft/class_4048; field_26745 field_242328_bp + f Lnet/minecraft/class_2940; field_7107 STATUS + f Lnet/minecraft/class_2379; field_7117 DEFAULT_RIGHTLEG_ROTATION + f Z field_7111 canInteract + f Lnet/minecraft/class_2379; field_7110 leftLegRotation + f Lnet/minecraft/class_2379; field_7115 DEFAULT_RIGHTARM_ROTATION + f Lnet/minecraft/class_2371; field_7114 handItems + f I field_7118 disabledSlots + f Lnet/minecraft/class_2379; field_7119 DEFAULT_BODY_ROTATION + f Lnet/minecraft/class_2379; field_7120 rightArmRotation + f Lnet/minecraft/class_2940; field_7116 LEFT_ARM_ROTATION + f J field_7112 punchCooldown + f Lnet/minecraft/class_2379; field_7106 bodyRotation + f Lnet/minecraft/class_2940; field_7127 LEFT_LEG_ROTATION + f Lnet/minecraft/class_4048; field_26746 field_242329_bq + f Lnet/minecraft/class_2379; field_7121 DEFAULT_LEFTLEG_ROTATION + f Lnet/minecraft/class_2940; field_7123 HEAD_ROTATION + f Lnet/minecraft/class_2940; field_7125 RIGHT_LEG_ROTATION + f Lnet/minecraft/class_2379; field_7124 DEFAULT_LEFTARM_ROTATION + f Lnet/minecraft/class_2379; field_7103 rightLegRotation + f Lnet/minecraft/class_2379; field_7113 DEFAULT_HEAD_ROTATION + f Lnet/minecraft/class_2371; field_7108 armorItems + f Lnet/minecraft/class_2379; field_7126 leftArmRotation +c net/minecraft/class_1531$1 net/minecraft/entity/item/ArmorStandEntity$1 + f [I field_7128 field_200830_a +c net/minecraft/class_1532 net/minecraft/entity/item/LeashKnotEntity + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1532; method_6932 create +c net/minecraft/class_1533 net/minecraft/entity/item/ItemFrameEntity + m (Lnet/minecraft/class_1799;)V method_6935 setDisplayedItem + m (Lnet/minecraft/class_1297;Z)V method_6936 dropItemOrSelf + m (Lnet/minecraft/class_1799;)V method_6937 removeItem + m (Lnet/minecraft/class_1799;Z)V method_6933 setDisplayedItemWithUpdate + m (IZ)V method_6941 setRotation + m (I)V method_6939 setItemRotation + m ()Lnet/minecraft/class_1799; method_6940 getDisplayedItem + m ()I method_6934 getRotation + m ()I method_6938 getAnalogOutput + f Z field_22476 fixed + f F field_7129 itemDropChance + f Lorg/apache/logging/log4j/Logger; field_7131 PRIVATE_LOGGER + f Lnet/minecraft/class_2940; field_7132 ROTATION + f Lnet/minecraft/class_2940; field_7130 ITEM +c net/minecraft/class_1533$1 net/minecraft/entity/item/ItemFrameEntity$1 + f [I field_7133 field_200121_a +c net/minecraft/class_1534 net/minecraft/entity/item/PaintingEntity + f Lnet/minecraft/class_1535; field_7134 art +c net/minecraft/class_1535 net/minecraft/entity/item/PaintingType + m ()I method_6945 getWidth + m ()I method_6943 getHeight + m (Ljava/lang/String;II)Lnet/minecraft/class_1535; method_6944 register + f Lnet/minecraft/class_1535; field_7138 WITHER + f Lnet/minecraft/class_1535; field_7157 SKULL_AND_ROSES + f Lnet/minecraft/class_1535; field_7156 VOID + f Lnet/minecraft/class_1535; field_7145 STAGE + f Lnet/minecraft/class_1535; field_7160 BUST + f Lnet/minecraft/class_1535; field_7144 AZTEC2 + f Lnet/minecraft/class_1535; field_7158 SKELETON + f Lnet/minecraft/class_1535; field_7149 BURNING_SKULL + f Lnet/minecraft/class_1535; field_7159 ALBAN + f Lnet/minecraft/class_1535; field_7142 AZTEC + f Lnet/minecraft/class_1535; field_7141 PIGSCENE + f Lnet/minecraft/class_1535; field_7164 POINTER + f Lnet/minecraft/class_1535; field_7146 KEBAB + f Lnet/minecraft/class_1535; field_7153 FIGHTERS + f Lnet/minecraft/class_1535; field_7163 COURBET + f Lnet/minecraft/class_1535; field_7135 POOL + f Lnet/minecraft/class_1535; field_7152 WASTELAND + f Lnet/minecraft/class_1535; field_7162 PLANT + f Lnet/minecraft/class_1535; field_7140 DONKEY_KONG + f Lnet/minecraft/class_1535; field_7143 BOMB + f Lnet/minecraft/class_1535; field_7150 MATCH + f Lnet/minecraft/class_1535; field_7147 GRAHAM + f I field_7151 width + f Lnet/minecraft/class_1535; field_7154 WANDERER + f Lnet/minecraft/class_1535; field_7161 CREEBET + f I field_7137 height + f Lnet/minecraft/class_1535; field_7136 SUNSET + f Lnet/minecraft/class_1535; field_7155 SEA +c net/minecraft/class_1540 net/minecraft/entity/item/FallingBlockEntity + m ()Lnet/minecraft/class_2338; method_6964 getOrigin + m (Lnet/minecraft/class_2338;)V method_6963 setOrigin + m ()Lnet/minecraft/class_2680; method_6962 getBlockState + m (Z)V method_6965 setHurtEntities + m ()Lnet/minecraft/class_1937; method_6966 getWorldObj + f Lnet/minecraft/class_2940; field_7195 ORIGIN + f Lnet/minecraft/class_2680; field_7188 fallTile + f Z field_7193 shouldDropItem + f F field_7187 fallHurtAmount + f I field_7190 fallHurtMax + f Lnet/minecraft/class_2487; field_7194 tileEntityData + f Z field_7189 dontSetBlock + f I field_7192 fallTime + f Z field_7191 hurtEntities +c net/minecraft/class_1541 net/minecraft/entity/item/TNTEntity + m (I)V method_6967 setFuse + m ()I method_6969 getFuseDataManager + m ()I method_6968 getFuse + m ()V method_6971 explode + m ()Lnet/minecraft/class_1309; method_6970 getTntPlacedBy + f Lnet/minecraft/class_1309; field_7198 tntPlacedBy + f I field_7196 fuse + f Lnet/minecraft/class_2940; field_7197 FUSE +c net/minecraft/class_1542 net/minecraft/entity/item/ItemEntity + m ()Z method_20397 func_213857_z + m ()I method_6985 getAge + m (Lnet/minecraft/class_1542;Lnet/minecraft/class_1799;Lnet/minecraft/class_1542;Lnet/minecraft/class_1799;)V method_18006 func_213858_a + m (F)F method_27314 getItemHover + m ()V method_24348 func_234274_v_ + m (Lnet/minecraft/class_1542;)V method_6972 func_226530_a_ + m ()Ljava/util/UUID; method_6978 getThrowerId + m ()V method_6973 searchForOtherItemsNearby + m ()Ljava/util/UUID; method_6986 getOwnerId + m ()Lnet/minecraft/class_1799; method_6983 getItem + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;I)Lnet/minecraft/class_1799; method_24018 mergeStacks + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_24017 canMergeStacks + m ()Z method_6977 cannotPickup + m ()V method_6976 setNoDespawn + m (Lnet/minecraft/class_1542;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_24016 func_226531_a_ + m (I)V method_6982 setPickupDelay + m (Lnet/minecraft/class_1542;)Z method_20396 func_213859_b + m ()V method_6987 makeFakeItem + m ()V method_6974 applyFloatMotion + m (Lnet/minecraft/class_1799;)V method_6979 setItem + m ()Lnet/minecraft/class_1542; method_29271 func_234273_t_ + m ()V method_6988 setDefaultPickupDelay + m ()V method_6975 setNoPickupDelay + m (Ljava/util/UUID;)V method_6984 setOwnerId + m ()V method_6989 setInfinitePickupDelay + m (Ljava/util/UUID;)V method_6981 setThrowerId + f Lnet/minecraft/class_2940; field_7199 ITEM + f Ljava/util/UUID; field_7200 thrower + f Ljava/util/UUID; field_7205 owner + f I field_7204 age + f I field_7202 pickupDelay + f I field_7201 health + f F field_7203 hoverStart +c net/minecraft/class_1543 net/minecraft/entity/monster/AbstractIllagerEntity + m ()Lnet/minecraft/class_1543$class_1544; method_6990 getArmPose +c net/minecraft/class_1543$class_4258 net/minecraft/entity/monster/AbstractIllagerEntity$RaidOpenDoorGoal + f Lnet/minecraft/class_1543; field_19013 field_220700_a +c net/minecraft/class_1543$class_1544 net/minecraft/entity/monster/AbstractIllagerEntity$ArmPose + m (Ljava/lang/String;)Lnet/minecraft/class_1543$class_1544; valueOf valueOf + m ()[Lnet/minecraft/class_1543$class_1544; values values + f Lnet/minecraft/class_1543$class_1544; field_7213 CROSSBOW_HOLD + f Lnet/minecraft/class_1543$class_1544; field_7207 CROSSED + f Lnet/minecraft/class_1543$class_1544; field_7210 CROSSBOW_CHARGE + f Lnet/minecraft/class_1543$class_1544; field_19012 CELEBRATING + f Lnet/minecraft/class_1543$class_1544; field_7211 ATTACKING + f Lnet/minecraft/class_1543$class_1544; field_7212 SPELLCASTING + f Lnet/minecraft/class_1543$class_1544; field_21512 NEUTRAL + f [Lnet/minecraft/class_1543$class_1544; field_7209 $VALUES + f Lnet/minecraft/class_1543$class_1544; field_7208 BOW_AND_ARROW +c net/minecraft/class_1545 net/minecraft/entity/monster/BlazeEntity + m (Z)V method_6993 setOnFire + m ()Z method_6994 isCharged + m ()Lnet/minecraft/class_5132$class_5133; method_26906 registerAttributes + m (Lnet/minecraft/class_1545;Z)V method_20811 func_223326_a + f Lnet/minecraft/class_2940; field_7216 ON_FIRE + f F field_7214 heightOffset + f I field_7215 heightOffsetUpdateTime +c net/minecraft/class_1545$class_1546 net/minecraft/entity/monster/BlazeEntity$FireballAttackGoal + m ()D method_6995 getFollowDistance + f Lnet/minecraft/class_1545; field_7219 blaze + f I field_19420 firedRecentlyTimer + f I field_7217 attackTime + f I field_7218 attackStep +c net/minecraft/class_1547 net/minecraft/entity/monster/AbstractSkeletonEntity + m (Lnet/minecraft/class_1799;F)Lnet/minecraft/class_1665; method_6996 fireArrow + m ()Lnet/minecraft/class_3414; method_6998 getStepSound + m ()V method_6997 setCombatTask + m ()Lnet/minecraft/class_5132$class_5133; method_26905 registerAttributes + f Lnet/minecraft/class_1366; field_7221 aiAttackOnCollide + f Lnet/minecraft/class_1380; field_7220 aiArrowAttack +c net/minecraft/class_1547$1 net/minecraft/entity/monster/AbstractSkeletonEntity$1 + f Lnet/minecraft/class_1547; field_7223 field_190862_h +c net/minecraft/class_1548 net/minecraft/entity/monster/CreeperEntity + m ()Z method_7000 hasIgnited + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20256 func_213625_a + m ()V method_7004 ignite + m (I)V method_7005 setCreeperState + m ()Z method_7008 ableToCauseSkullDrop + m ()V method_7002 incrementDroppedSkulls + m ()Lnet/minecraft/class_5132$class_5133; method_26908 registerAttributes + m ()V method_7006 explode + m ()I method_7007 getCreeperState + m (F)F method_7003 getCreeperFlashIntensity + m ()V method_7001 spawnLingeringCloud + f Lnet/minecraft/class_2940; field_7224 POWERED + f I field_7225 explosionRadius + f Lnet/minecraft/class_2940; field_7230 STATE + f I field_7228 fuseTime + f I field_7226 droppedSkulls + f Lnet/minecraft/class_2940; field_7231 IGNITED + f I field_7229 lastActiveTime + f I field_7227 timeSinceIgnited +c net/minecraft/class_1549 net/minecraft/entity/monster/CaveSpiderEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26907 registerAttributes +c net/minecraft/class_3745 net/minecraft/entity/ICrossbowUser + m (Z)V method_7110 setCharging + m ()Lnet/minecraft/class_1309; method_5968 getAttackTarget + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;Lnet/minecraft/class_1676;FF)V method_24652 func_234279_a_ + m (Lnet/minecraft/class_1309;F)V method_24654 func_234281_b_ + m ()V method_24651 func_230283_U__ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_243;F)Lnet/minecraft/class_1160; method_24653 func_234280_a_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_1676;F)V method_18811 func_230284_a_ +c net/minecraft/class_1550 net/minecraft/entity/monster/ElderGuardianEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26909 func_234283_m_ + m (Lnet/minecraft/class_3222;)Z method_7011 func_210138_d + f F field_17492 field_213629_b +c net/minecraft/class_1551 net/minecraft/entity/monster/DrownedEntity + m ()Z method_7018 func_204715_dF + m (Lnet/minecraft/class_1309;)Z method_7012 shouldAttack + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_20672 func_223333_a + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20673 func_223332_b + m ()Z method_7016 isCloseToPathTarget + m (Lnet/minecraft/class_1551;Lnet/minecraft/class_1408;)Lnet/minecraft/class_1408; method_7017 access$002 + m (Z)V method_7013 setSwimmingUp + m (Lnet/minecraft/class_1551;)Z method_24841 func_234282_c_ + m (Lnet/minecraft/class_1551;)Z method_7019 access$200 + m (Lnet/minecraft/class_1551;)Z method_7014 access$100 + f Lnet/minecraft/class_1409; field_7232 groundNavigator + f Z field_7233 swimmingUp + f Lnet/minecraft/class_1412; field_7234 waterNavigator +c net/minecraft/class_1551$class_1555 net/minecraft/entity/monster/DrownedEntity$GoToWaterGoal + m ()Lnet/minecraft/class_243; method_7021 func_204729_f + f Lnet/minecraft/class_1937; field_7241 field_204735_f + f D field_7243 field_204734_e + f D field_7238 field_204733_d + f D field_7239 field_204732_c + f D field_7240 field_204731_b + f Lnet/minecraft/class_1314; field_7242 field_204730_a +c net/minecraft/class_1551$class_1554 net/minecraft/entity/monster/DrownedEntity$GoToBeachGoal + f Lnet/minecraft/class_1551; field_7237 drowned +c net/minecraft/class_1551$class_1552 net/minecraft/entity/monster/DrownedEntity$AttackGoal + f Lnet/minecraft/class_1551; field_7235 field_204726_g +c net/minecraft/class_1551$class_1558 net/minecraft/entity/monster/DrownedEntity$TridentAttackGoal + f Lnet/minecraft/class_1551; field_7249 field_204728_a +c net/minecraft/class_1551$class_1557 net/minecraft/entity/monster/DrownedEntity$SwimUpGoal + f I field_7247 targetY + f D field_7245 field_204737_b + f Lnet/minecraft/class_1551; field_7246 field_204736_a + f Z field_7248 obstructed +c net/minecraft/class_1551$class_1556 net/minecraft/entity/monster/DrownedEntity$MoveHelperController + f Lnet/minecraft/class_1551; field_7244 drowned +c net/minecraft/class_1559 net/minecraft/entity/monster/EndermiteEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26911 func_234288_m_ + m ()Z method_7023 isSpawnedByPlayer + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20674 func_223328_b + m (Z)V method_7022 setSpawnedByPlayer + f I field_7250 lifetime + f Z field_7251 playerSpawned +c net/minecraft/class_1560 net/minecraft/entity/monster/EndermanEntity + m (Lnet/minecraft/class_1560;Lnet/minecraft/class_1657;)Z method_7031 func_210137_a + m ()V method_22331 func_226538_eu_ + m ()Z method_22330 func_226537_et_ + m (Lnet/minecraft/class_2680;)V method_7032 setHeldBlockState + m ()V method_7030 func_226539_l_ + m ()Z method_7028 isScreaming + m ()Z method_7029 teleportRandomly + m (DDD)Z method_7024 teleportTo + m ()Lnet/minecraft/class_2680; method_7027 getHeldBlockState + m (Lnet/minecraft/class_1657;)Z method_7026 shouldAttackPlayer + m (Lnet/minecraft/class_1297;)Z method_7025 teleportToEntity + m (Lnet/minecraft/class_1309;)Z method_18448 func_213626_h + m (Lnet/minecraft/class_1560;Lnet/minecraft/class_1297;)Z method_20505 func_222819_a + m ()Lnet/minecraft/class_5132$class_5133; method_26910 func_234287_m_ + f Lnet/minecraft/class_1322; field_7252 ATTACKING_SPEED_BOOST + f Ljava/util/UUID; field_7256 ATTACKING_SPEED_BOOST_ID + f Ljava/util/UUID; field_25377 field_234285_bB_ + f I field_7253 field_226536_bz_ + f Lnet/minecraft/class_4801; field_25378 field_234286_bz_ + f I field_25376 field_234284_bA_ + f I field_7254 targetChangeTime + f Ljava/util/function/Predicate; field_18126 field_213627_bA + f Lnet/minecraft/class_2940; field_20618 field_226535_bx_ + f Lnet/minecraft/class_2940; field_7257 CARRIED_BLOCK + f Lnet/minecraft/class_2940; field_7255 SCREAMING +c net/minecraft/class_1560$class_4159 net/minecraft/entity/monster/EndermanEntity$StareGoal + f Lnet/minecraft/class_1309; field_21513 targetPlayer + f Lnet/minecraft/class_1560; field_18524 enderman +c net/minecraft/class_1560$class_1563 net/minecraft/entity/monster/EndermanEntity$TakeBlockGoal + f Lnet/minecraft/class_1560; field_7263 enderman +c net/minecraft/class_1560$class_1562 net/minecraft/entity/monster/EndermanEntity$FindPlayerGoal + m (Lnet/minecraft/class_1560;Lnet/minecraft/class_1309;)Z method_18449 func_220790_a + f Lnet/minecraft/class_1657; field_7259 player + f Lnet/minecraft/class_4051; field_18876 field_220792_n + f I field_7262 aggroTime + f I field_7261 teleportTime + f Lnet/minecraft/class_1560; field_7260 enderman + f Lnet/minecraft/class_4051; field_18127 field_220791_m +c net/minecraft/class_1560$class_1561 net/minecraft/entity/monster/EndermanEntity$PlaceBlockGoal + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_7033 func_220836_a + f Lnet/minecraft/class_1560; field_7258 enderman +c net/minecraft/class_1564 net/minecraft/entity/monster/EvokerEntity + m (Lnet/minecraft/class_1564;Lnet/minecraft/class_1472;)V method_7035 access$900 + m (Lnet/minecraft/class_1472;)V method_7036 setWololoTarget + m (Lnet/minecraft/class_1564;)Lnet/minecraft/class_1472; method_7042 access$300 + m (Lnet/minecraft/class_1564;)Ljava/util/Random; method_7038 access$800 + m (Lnet/minecraft/class_1564;)Ljava/util/Random; method_7037 access$500 + m ()Lnet/minecraft/class_5132$class_5133; method_26912 func_234289_eI_ + m (Lnet/minecraft/class_1564;)Ljava/util/Random; method_7041 access$700 + m (Lnet/minecraft/class_1564;)Ljava/util/Random; method_7043 access$600 + m (Lnet/minecraft/class_1564;)Ljava/util/Random; method_7040 access$400 + m ()Lnet/minecraft/class_1472; method_7039 getWololoTarget + f Lnet/minecraft/class_1472; field_7264 wololoTarget +c net/minecraft/class_1564$1 net/minecraft/entity/monster/EvokerEntity$1 +c net/minecraft/class_1564$class_1566 net/minecraft/entity/monster/EvokerEntity$CastingSpellGoal + f Lnet/minecraft/class_1564; field_7266 field_190866_a +c net/minecraft/class_1564$class_1565 net/minecraft/entity/monster/EvokerEntity$AttackSpellGoal + m (DDDDFI)V method_7044 spawnFangs + f Lnet/minecraft/class_1564; field_7265 field_190877_a +c net/minecraft/class_1564$class_1568 net/minecraft/entity/monster/EvokerEntity$WololoSpellGoal + m (Lnet/minecraft/class_1309;)Z method_7045 func_220844_a + f Lnet/minecraft/class_1564; field_7268 field_190880_e + f Lnet/minecraft/class_4051; field_7269 wololoTargetFlags +c net/minecraft/class_1564$class_1567 net/minecraft/entity/monster/EvokerEntity$SummonSpellGoal + f Lnet/minecraft/class_4051; field_18129 field_220843_e + f Lnet/minecraft/class_1564; field_7267 field_190878_a +c net/minecraft/class_1569 net/minecraft/entity/monster/IMob +c net/minecraft/class_1570 net/minecraft/entity/monster/GiantEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26914 func_234291_m_ +c net/minecraft/class_1571 net/minecraft/entity/monster/GhastEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26913 func_234290_eH_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20675 func_223368_b + m (Z)V method_7048 setAttacking + m ()I method_7049 getFireballStrength + m (Lnet/minecraft/class_1309;)Z method_18450 func_213812_h + m ()Z method_7050 isAttacking + f I field_7272 explosionStrength + f Lnet/minecraft/class_2940; field_7273 ATTACKING +c net/minecraft/class_1571$class_1572 net/minecraft/entity/monster/GhastEntity$LookAroundGoal + f Lnet/minecraft/class_1571; field_7274 parentEntity +c net/minecraft/class_1571$class_1575 net/minecraft/entity/monster/GhastEntity$RandomFlyGoal + f Lnet/minecraft/class_1571; field_7279 parentEntity +c net/minecraft/class_1571$class_1574 net/minecraft/entity/monster/GhastEntity$FireballAttackGoal + f Lnet/minecraft/class_1571; field_7277 parentEntity + f I field_7278 attackTimer +c net/minecraft/class_1571$class_1573 net/minecraft/entity/monster/GhastEntity$MoveHelperController + m (Lnet/minecraft/class_243;I)Z method_7051 func_220673_a + f I field_7276 courseChangeCooldown + f Lnet/minecraft/class_1571; field_7275 parentEntity +c net/minecraft/class_1576 net/minecraft/entity/monster/HuskEntity + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20677 func_223334_b +c net/minecraft/class_1577 net/minecraft/entity/monster/GuardianEntity + m ()Lnet/minecraft/class_1309; method_7052 getTargetedEntity + m ()Z method_7063 hasTargetedEntity + m (Lnet/minecraft/class_1577;I)V method_7059 access$000 + m ()Z method_7058 isMoving + m ()Lnet/minecraft/class_3414; method_7062 getFlopSound + m (F)F method_7061 getAttackAnimationScale + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20676 func_223329_b + m (Lnet/minecraft/class_1577;Z)V method_7056 access$100 + m (I)V method_7060 setTargetedEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26915 func_234292_eK_ + m (Z)V method_7054 setMoving + m (F)F method_7053 getSpikesAnimation + m ()I method_7055 getAttackDuration + m (F)F method_7057 getTailAnimation + f Lnet/minecraft/class_2940; field_7280 MOVING + f Z field_7283 clientSideTouchedGround + f I field_7282 clientSideAttackTime + f F field_7281 clientSideTailAnimationSpeed + f F field_7284 clientSideTailAnimationO + f F field_7286 clientSideTailAnimation + f Lnet/minecraft/class_1379; field_7289 wander + f F field_7287 clientSideSpikesAnimationO + f F field_7285 clientSideSpikesAnimation + f Lnet/minecraft/class_1309; field_7288 targetedEntity + f Lnet/minecraft/class_2940; field_7290 TARGET_ENTITY +c net/minecraft/class_1577$class_1578 net/minecraft/entity/monster/GuardianEntity$AttackGoal + f I field_7291 tickCounter + f Lnet/minecraft/class_1577; field_7293 guardian + f Z field_7292 isElder +c net/minecraft/class_1577$class_1579 net/minecraft/entity/monster/GuardianEntity$TargetPredicate + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_1309;)Z method_7064 test + f Lnet/minecraft/class_1577; field_7294 parentEntity +c net/minecraft/class_1577$class_1580 net/minecraft/entity/monster/GuardianEntity$MoveHelperController + f Lnet/minecraft/class_1577; field_7295 entityGuardian +c net/minecraft/class_1589 net/minecraft/entity/monster/MagmaCubeEntity + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20678 func_223367_b + m ()Lnet/minecraft/class_5132$class_5133; method_26917 func_234294_m_ +c net/minecraft/class_1581 net/minecraft/entity/monster/IllusionerEntity + m (F)[Lnet/minecraft/class_243; method_7065 getRenderLocations + m ()Lnet/minecraft/class_5132$class_5133; method_26916 func_234293_eI_ + f I field_7296 ghostTime + f [[Lnet/minecraft/class_243; field_7297 renderLocations +c net/minecraft/class_1581$class_1582 net/minecraft/entity/monster/IllusionerEntity$BlindnessSpellGoal + f I field_7298 lastTargetId + f Lnet/minecraft/class_1581; field_7299 field_210765_a +c net/minecraft/class_1581$1 net/minecraft/entity/monster/IllusionerEntity$1 +c net/minecraft/class_1581$class_1583 net/minecraft/entity/monster/IllusionerEntity$MirrorSpellGoal + f Lnet/minecraft/class_1581; field_7300 field_210767_a +c net/minecraft/class_3732 net/minecraft/entity/monster/PatrollerEntity + m ()Z method_16220 hasPatrolTarget + m (Z)V method_16217 setLeader + m ()Z method_16485 canBeLeader + m (Z)V method_22332 setPatrolling + m ()Lnet/minecraft/class_2338; method_16215 getPatrolTarget + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20739 func_223330_b + m ()V method_16218 resetPatrolTarget + m ()Z method_16472 notInRaid + m ()Z method_16219 isLeader + m (Lnet/minecraft/class_2338;)V method_16216 setPatrolTarget + m ()Z method_16915 isPatrolling + f Z field_16479 patrolLeader + f Lnet/minecraft/class_2338; field_16478 patrolTarget + f Z field_16477 patrolling +c net/minecraft/class_3732$class_3733 net/minecraft/entity/monster/PatrollerEntity$PatrolGoal + m ()Ljava/util/List; method_22333 func_226544_g_ + m ()Z method_16222 func_226545_h_ + m (Lnet/minecraft/class_3732;)Z method_16223 func_226543_a_ + f D field_16480 field_220840_b + f J field_20701 field_226542_d_ + f D field_16535 field_220841_c + f Lnet/minecraft/class_3732; field_16481 owner +c net/minecraft/class_1588 net/minecraft/entity/monster/MonsterEntity + m (Lnet/minecraft/class_1657;)Z method_7076 func_230292_f_ + m ()Lnet/minecraft/class_5132$class_5133; method_26918 func_234295_eP_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20680 canMonsterSpawnInLight + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20681 canMonsterSpawn + m ()V method_16827 idle + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20679 isValidLightLevel +c net/minecraft/class_1604 net/minecraft/entity/monster/PillagerEntity + m ()Z method_7108 isCharging + m (Lnet/minecraft/class_1792;)Z method_7111 func_213672_b + m ()Lnet/minecraft/class_5132$class_5133; method_26919 func_234296_eI_ + f Lnet/minecraft/class_1277; field_7335 inventory + f Lnet/minecraft/class_2940; field_7334 DATA_CHARGING_STATE +c net/minecraft/class_1593 net/minecraft/entity/monster/PhantomEntity + m (Lnet/minecraft/class_1593;Lnet/minecraft/class_1593$class_1594;)Lnet/minecraft/class_1593$class_1594; method_7089 access$502 + m (Lnet/minecraft/class_1593;)Lnet/minecraft/class_243; method_7085 access$400 + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7080 access$600 + m ()I method_7084 getPhantomSize + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7083 access$1800 + m (Lnet/minecraft/class_1593;Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_7094 access$402 + m (Lnet/minecraft/class_1593;)Lnet/minecraft/class_2338; method_7082 access$1400 + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7081 access$1700 + m (I)V method_7091 setPhantomSize + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7095 access$1500 + m (Lnet/minecraft/class_1593;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_7088 access$1402 + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7100 access$1600 + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7090 access$1200 + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7086 access$1300 + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7093 access$1000 + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7096 access$900 + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7092 access$1100 + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7098 access$700 + m (Lnet/minecraft/class_1593;)Lnet/minecraft/class_1593$class_1594; method_7087 access$500 + m ()V method_7097 updatePhantomSize + m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7099 access$800 + f Lnet/minecraft/class_1593$class_1594; field_7315 attackPhase + f Lnet/minecraft/class_2940; field_7313 SIZE + f Lnet/minecraft/class_243; field_7314 orbitOffset + f Lnet/minecraft/class_2338; field_7312 orbitPosition +c net/minecraft/class_1593$class_1599 net/minecraft/entity/monster/PhantomEntity$LookHelperController + f Lnet/minecraft/class_1593; field_7329 field_203106_a +c net/minecraft/class_1593$class_1600 net/minecraft/entity/monster/PhantomEntity$MoveHelperController + f Lnet/minecraft/class_1593; field_7330 field_203104_i + f F field_7331 speedFactor +c net/minecraft/class_1593$class_1601 net/minecraft/entity/monster/PhantomEntity$MoveGoal + m ()Z method_7104 func_203146_f + f Lnet/minecraft/class_1593; field_7332 field_203147_b +c net/minecraft/class_1593$class_1602 net/minecraft/entity/monster/PhantomEntity$SweepAttackGoal + f Lnet/minecraft/class_1593; field_7333 field_203154_a +c net/minecraft/class_1593$1 net/minecraft/entity/monster/PhantomEntity$1 +c net/minecraft/class_1593$class_1595 net/minecraft/entity/monster/PhantomEntity$AttackPlayerGoal + f Lnet/minecraft/class_4051; field_18130 field_220842_b + f I field_7320 tickDelay + f Lnet/minecraft/class_1593; field_7319 field_203141_a +c net/minecraft/class_1593$class_1596 net/minecraft/entity/monster/PhantomEntity$PickAttackGoal + m ()V method_7102 func_203143_f + f Lnet/minecraft/class_1593; field_7321 field_203144_a + f I field_7322 tickDelay +c net/minecraft/class_1593$class_1597 net/minecraft/entity/monster/PhantomEntity$BodyHelperController + f Lnet/minecraft/class_1593; field_7323 field_220669_a +c net/minecraft/class_1593$class_1598 net/minecraft/entity/monster/PhantomEntity$OrbitPointGoal + m ()V method_7103 func_203148_i + f F field_7328 field_203150_c + f Lnet/minecraft/class_1593; field_7325 field_203149_a + f F field_7327 field_203151_d + f F field_7326 field_203152_e + f F field_7324 field_203153_f +c net/minecraft/class_1593$class_1594 net/minecraft/entity/monster/PhantomEntity$AttackPhase + m (Ljava/lang/String;)Lnet/minecraft/class_1593$class_1594; valueOf valueOf + m ()[Lnet/minecraft/class_1593$class_1594; values values + f Lnet/minecraft/class_1593$class_1594; field_7318 CIRCLE + f Lnet/minecraft/class_1593$class_1594; field_7317 SWOOP + f [Lnet/minecraft/class_1593$class_1594; field_7316 $VALUES +c net/minecraft/class_1584 net/minecraft/entity/monster/RavagerEntity + m ()V method_7071 roar + m ()I method_7072 func_213687_eg + m ()I method_7070 func_213683_l + m (Lnet/minecraft/class_1297;)Z method_7069 func_213685_b + m ()Lnet/minecraft/class_5132$class_5133; method_26920 func_234297_m_ + m ()I method_7074 func_213684_dX + m (Lnet/minecraft/class_1297;)V method_7068 launch + m ()V method_7073 func_213682_eh + f I field_7302 stunTick + f I field_7303 attackTick + f I field_7305 roarTick + f Ljava/util/function/Predicate; field_7301 field_213690_b +c net/minecraft/class_1584$class_1587 net/minecraft/entity/monster/RavagerEntity$Processor +c net/minecraft/class_1584$1 net/minecraft/entity/monster/RavagerEntity$1 +c net/minecraft/class_1584$class_1585 net/minecraft/entity/monster/RavagerEntity$AttackGoal + f Lnet/minecraft/class_1584; field_7306 field_220723_d +c net/minecraft/class_1584$class_1586 net/minecraft/entity/monster/RavagerEntity$Navigator +c net/minecraft/class_1603 net/minecraft/entity/IRangedAttackMob + m (Lnet/minecraft/class_1309;F)V method_7105 attackEntityWithRangedAttack +c net/minecraft/class_1614 net/minecraft/entity/monster/SilverfishEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26922 func_234301_m_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20684 func_223331_b + f Lnet/minecraft/class_1614$class_1616; field_7366 summonSilverfish +c net/minecraft/class_1614$class_1615 net/minecraft/entity/monster/SilverfishEntity$HideInStoneGoal + f Lnet/minecraft/class_2350; field_7368 facing + f Z field_7367 doMerge +c net/minecraft/class_1614$class_1616 net/minecraft/entity/monster/SilverfishEntity$SummonSilverfishGoal + m ()V method_7136 notifyHurt + f I field_7369 lookForFriends + f Lnet/minecraft/class_1614; field_7370 silverfish +c net/minecraft/class_1606 net/minecraft/entity/monster/ShulkerEntity + m ()Z method_7127 tryTeleportToNewPosition + m (I)V method_7122 updateArmorModifier + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_24350 func_234298_a_ + m ()I method_7113 getClientTeleportInterp + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2350; method_24351 func_234299_g_ + m ()Lnet/minecraft/class_5132$class_5133; method_26921 func_234300_m_ + m (F)F method_7116 getClientPeekAmount + m ()I method_7115 getPeekTick + m ()Lnet/minecraft/class_2338; method_7120 getOldAttachPos + m (Lnet/minecraft/class_1606;)Ljava/util/Random; method_7128 access$500 + m ()Lnet/minecraft/class_2338; method_7123 getAttachmentPos + m (Lnet/minecraft/class_1606;)Ljava/util/Random; method_7126 access$400 + m ()Z method_7124 isClosed + m (Lnet/minecraft/class_1606;)Ljava/util/Random; method_7112 access$200 + m ()Lnet/minecraft/class_2350; method_7119 getAttachmentFacing + m (Lnet/minecraft/class_1606;)Ljava/util/Random; method_7114 access$300 + m (Lnet/minecraft/class_1606;)Ljava/util/Random; method_7118 access$100 + m (Lnet/minecraft/class_2338;)V method_7125 setAttachmentPos + m ()Z method_7117 isAttachedToBlock + m ()Lnet/minecraft/class_1767; method_7121 getColor + f F field_7337 peekAmount + f F field_7339 prevPeekAmount + f Lnet/minecraft/class_1322; field_7342 COVERED_ARMOR_BONUS_MODIFIER + f I field_7340 clientSideTeleportInterpolation + f Ljava/util/UUID; field_7341 COVERED_ARMOR_BONUS_ID + f Lnet/minecraft/class_2338; field_7345 currentAttachmentPosition + f Lnet/minecraft/class_2940; field_7346 PEEK_TICK + f Lnet/minecraft/class_2940; field_7344 ATTACHED_FACE + f Lnet/minecraft/class_2940; field_7343 COLOR + f Lnet/minecraft/class_2940; field_7338 ATTACHED_BLOCK_POS +c net/minecraft/class_1606$class_1608 net/minecraft/entity/monster/ShulkerEntity$BodyHelperController + f Lnet/minecraft/class_1606; field_7350 field_220670_a +c net/minecraft/class_1606$class_1609 net/minecraft/entity/monster/ShulkerEntity$DefenseAttackGoal + m (Lnet/minecraft/class_1309;)Z method_7129 func_200826_a +c net/minecraft/class_1606$class_1610 net/minecraft/entity/monster/ShulkerEntity$AttackNearestGoal + f Lnet/minecraft/class_1606; field_7351 field_188513_i +c net/minecraft/class_1606$class_1611 net/minecraft/entity/monster/ShulkerEntity$PeekGoal + f Lnet/minecraft/class_1606; field_7353 field_188521_a + f I field_7352 peekTime +c net/minecraft/class_1606$1 net/minecraft/entity/monster/ShulkerEntity$1 +c net/minecraft/class_1606$class_1607 net/minecraft/entity/monster/ShulkerEntity$AttackGoal + f I field_7347 attackTime + f Lnet/minecraft/class_1606; field_7348 field_188519_a +c net/minecraft/class_1621 net/minecraft/entity/monster/SlimeEntity + m (Lnet/minecraft/class_1309;)Z method_18451 func_213811_i + m ()F method_24353 func_234304_m_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20685 func_223366_c + m (IZ)V method_7161 setSlimeSize + m (Lnet/minecraft/class_1309;)V method_7155 dealDamage + m ()I method_7154 getJumpDelay + m ()Z method_7159 makesSoundOnJump + m ()Z method_7157 isSmallSlime + m (Lnet/minecraft/class_1621;)Z method_24842 func_234303_b_ + m ()Z method_7163 canDamagePlayer + m ()Lnet/minecraft/class_3414; method_7160 getSquishSound + m ()Lnet/minecraft/class_3414; method_7153 getJumpSound + m (Lnet/minecraft/class_1621;)F method_24352 func_234302_a_ + m ()F method_7158 func_225512_er_ + m ()I method_7152 getSlimeSize + m ()Lnet/minecraft/class_2394; method_7162 getSquishParticle + m ()V method_7156 alterSquishAmount + f Lnet/minecraft/class_2940; field_7390 SLIME_SIZE + f Z field_7391 wasOnGround + f F field_7389 squishAmount + f F field_7388 squishFactor + f F field_7387 prevSquishFactor +c net/minecraft/class_1621$class_1624 net/minecraft/entity/monster/SlimeEntity$HopGoal + f Lnet/minecraft/class_1621; field_7395 slime +c net/minecraft/class_1621$class_1625 net/minecraft/entity/monster/SlimeEntity$MoveHelperController + m (FZ)V method_7165 setDirection + m (D)V method_7164 setSpeed + f Lnet/minecraft/class_1621; field_7396 slime + f I field_7399 jumpDelay + f F field_7397 yRot + f Z field_7398 isAggressive +c net/minecraft/class_1621$class_1626 net/minecraft/entity/monster/SlimeEntity$FaceRandomGoal + f F field_7400 chosenDegrees + f Lnet/minecraft/class_1621; field_7402 slime + f I field_7401 nextRandomizeTime +c net/minecraft/class_1621$class_1622 net/minecraft/entity/monster/SlimeEntity$AttackGoal + f I field_7392 growTieredTimer + f Lnet/minecraft/class_1621; field_7393 slime +c net/minecraft/class_1621$class_1623 net/minecraft/entity/monster/SlimeEntity$FloatGoal + f Lnet/minecraft/class_1621; field_7394 slime +c net/minecraft/class_1613 net/minecraft/entity/monster/SkeletonEntity +c net/minecraft/class_1628 net/minecraft/entity/monster/SpiderEntity + m ()Z method_7167 isBesideClimbableBlock + m (Z)V method_7166 setBesideClimbableBlock + m ()Lnet/minecraft/class_5132$class_5133; method_26923 func_234305_eI_ + f Lnet/minecraft/class_2940; field_7403 CLIMBING +c net/minecraft/class_1628$class_1629 net/minecraft/entity/monster/SpiderEntity$AttackGoal +c net/minecraft/class_1628$class_1630 net/minecraft/entity/monster/SpiderEntity$GroupData + m (Ljava/util/Random;)V method_7168 setRandomEffect + f Lnet/minecraft/class_1291; field_7404 effect +c net/minecraft/class_1628$class_1631 net/minecraft/entity/monster/SpiderEntity$TargetGoal +c net/minecraft/class_1617 net/minecraft/entity/monster/SpellcastingIllagerEntity + m ()Lnet/minecraft/class_3414; method_7142 getSpellSound + m (Lnet/minecraft/class_1617$class_1618;)V method_7138 setSpellType + m ()I method_7139 getSpellTicks + m ()Z method_7137 isSpellcasting + m ()Lnet/minecraft/class_1617$class_1618; method_7140 getSpellType + m (Lnet/minecraft/class_1617;)Lnet/minecraft/class_1408; method_7141 access$200 + f Lnet/minecraft/class_2940; field_7373 SPELL + f I field_7372 spellTicks + f Lnet/minecraft/class_1617$class_1618; field_7371 activeSpell +c net/minecraft/class_1617$class_1619 net/minecraft/entity/monster/SpellcastingIllagerEntity$CastingASpellGoal + f Lnet/minecraft/class_1617; field_7383 field_193319_b +c net/minecraft/class_1617$class_1620 net/minecraft/entity/monster/SpellcastingIllagerEntity$UseSpellGoal + m ()Lnet/minecraft/class_1617$class_1618; method_7147 getSpellType + m ()V method_7148 castSpell + m ()I method_7151 getCastingInterval + m ()I method_7146 getCastWarmupTime + m ()Lnet/minecraft/class_3414; method_7150 getSpellPrepareSound + m ()I method_7149 getCastingTime + f I field_7384 spellCooldown + f I field_7385 spellWarmup + f Lnet/minecraft/class_1617; field_7386 field_193323_e +c net/minecraft/class_1617$class_1618 net/minecraft/entity/monster/SpellcastingIllagerEntity$SpellType + m (I)Lnet/minecraft/class_1617$class_1618; method_7144 getFromId + m (Ljava/lang/String;)Lnet/minecraft/class_1617$class_1618; valueOf valueOf + m ()[Lnet/minecraft/class_1617$class_1618; values values + m (Lnet/minecraft/class_1617$class_1618;)[D method_7145 access$100 + m (Lnet/minecraft/class_1617$class_1618;)I method_7143 access$000 + f Lnet/minecraft/class_1617$class_1618; field_7377 NONE + f [D field_7374 particleSpeed + f I field_7375 id + f Lnet/minecraft/class_1617$class_1618; field_7378 BLINDNESS + f Lnet/minecraft/class_1617$class_1618; field_7382 DISAPPEAR + f Lnet/minecraft/class_1617$class_1618; field_7381 WOLOLO + f Lnet/minecraft/class_1617$class_1618; field_7379 SUMMON_VEX + f [Lnet/minecraft/class_1617$class_1618; field_7376 $VALUES + f Lnet/minecraft/class_1617$class_1618; field_7380 FANGS +c net/minecraft/class_1627 net/minecraft/entity/monster/StrayEntity + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20686 func_223327_b +c net/minecraft/class_1634 net/minecraft/entity/monster/VexEntity + m (Lnet/minecraft/class_1634;)Ljava/util/Random; method_7183 access$000 + m (Lnet/minecraft/class_1634;)Lnet/minecraft/class_1335; method_7191 access$700 + m ()Z method_7176 isCharging + m (I)Z method_7184 getVexFlag + m (I)V method_7181 setLimitedLife + m (Lnet/minecraft/class_1634;)Lnet/minecraft/class_1308; method_7185 access$800 + m (Lnet/minecraft/class_2338;)V method_7188 setBoundOrigin + m ()Lnet/minecraft/class_1308; method_7182 getOwner + m (Lnet/minecraft/class_1308;)V method_7178 setOwner + m (Z)V method_7177 setCharging + m (Lnet/minecraft/class_1634;)Ljava/util/Random; method_7180 access$600 + m ()Lnet/minecraft/class_2338; method_7186 getBoundOrigin + m ()Lnet/minecraft/class_5132$class_5133; method_26925 func_234321_m_ + m (IZ)V method_7189 setVexFlag + m (Lnet/minecraft/class_1634;)Ljava/util/Random; method_7179 access$500 + m (Lnet/minecraft/class_1634;)Lnet/minecraft/class_1335; method_7174 access$100 + m (Lnet/minecraft/class_1634;)Ljava/util/Random; method_7190 access$300 + m (Lnet/minecraft/class_1634;)Ljava/util/Random; method_7187 access$400 + m (Lnet/minecraft/class_1634;)Lnet/minecraft/class_1335; method_7175 access$200 + f Z field_7409 limitedLifespan + f I field_7408 limitedLifeTicks + f Lnet/minecraft/class_1308; field_7411 owner + f Lnet/minecraft/class_2338; field_7407 boundOrigin + f Lnet/minecraft/class_2940; field_7410 VEX_FLAGS +c net/minecraft/class_1634$class_1635 net/minecraft/entity/monster/VexEntity$ChargeAttackGoal + f Lnet/minecraft/class_1634; field_7412 field_190852_a +c net/minecraft/class_1634$class_1636 net/minecraft/entity/monster/VexEntity$CopyOwnerTargetGoal + f Lnet/minecraft/class_1634; field_7413 field_190883_a + f Lnet/minecraft/class_4051; field_18132 field_220803_b +c net/minecraft/class_1634$class_1637 net/minecraft/entity/monster/VexEntity$MoveHelperController + f Lnet/minecraft/class_1634; field_7414 field_190884_i +c net/minecraft/class_1634$class_1638 net/minecraft/entity/monster/VexEntity$MoveRandomGoal + f Lnet/minecraft/class_1634; field_7415 field_190853_a +c net/minecraft/class_4985 net/minecraft/entity/passive/StriderEntity + m ()F method_26345 func_234316_eJ_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_4985; method_26343 func_241840_a + m ()V method_26347 func_234318_eL_ + m ()Lnet/minecraft/class_5132$class_5133; method_26924 func_234317_eK_ + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_1266;Lnet/minecraft/class_1308;Lnet/minecraft/class_1315;)Lnet/minecraft/class_1315; method_30336 func_242331_a + m ()Z method_26348 func_234315_eI_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_26344 func_234314_c_ + m ()Z method_30079 func_241398_eP_ + m (Z)V method_26349 func_234319_t_ + m ()Z method_30078 func_241397_eO_ + f Lnet/minecraft/class_1374; field_23242 field_234307_bB_ + f Lnet/minecraft/class_1391; field_23241 field_234306_bA_ + f Lnet/minecraft/class_1856; field_23244 field_234309_bv_ + f Lnet/minecraft/class_1856; field_23243 field_234308_bu_ + f Lnet/minecraft/class_2940; field_23247 field_234312_by_ + f Lnet/minecraft/class_2940; field_23246 field_234311_bx_ + f Lnet/minecraft/class_4980; field_23240 field_234313_bz_ + f Lnet/minecraft/class_2940; field_23245 field_234310_bw_ +c net/minecraft/class_4985$class_4988 net/minecraft/entity/passive/StriderEntity$LavaPathNavigator +c net/minecraft/class_4985$class_5494 net/minecraft/entity/passive/StriderEntity$MoveToLavaGoal + f Lnet/minecraft/class_4985; field_26632 field_242332_g +c net/minecraft/class_4985$1 net/minecraft/entity/passive/StriderEntity$1 +c net/minecraft/class_1640 net/minecraft/entity/monster/WitchEntity + m (Z)V method_7192 setDrinkingPotion + m ()Z method_7193 isDrinkingPotion + m (Lnet/minecraft/class_1309;)Z method_16474 func_213693_h + m ()Lnet/minecraft/class_5132$class_5133; method_26927 func_234323_eI_ + f Lnet/minecraft/class_3760; field_17284 field_213695_bD + f I field_7417 potionUseTimer + f Lnet/minecraft/class_2940; field_7419 IS_DRINKING + f Lnet/minecraft/class_3909; field_17283 field_213694_bC + f Lnet/minecraft/class_1322; field_7416 MODIFIER + f Ljava/util/UUID; field_7418 MODIFIER_UUID +c net/minecraft/class_1632 net/minecraft/entity/monster/VindicatorEntity + m ()Lnet/minecraft/class_5132$class_5133; method_26926 func_234322_eI_ + m ()Ljava/util/function/Predicate; method_20008 access$000 + m (Lnet/minecraft/class_1632;)Ljava/util/Random; method_20257 func_213679_a + m (Lnet/minecraft/class_1632;)Z method_7173 func_213680_b + m (Lnet/minecraft/class_1267;)Z method_20007 func_213678_a + f Ljava/util/function/Predicate; field_19014 field_213681_b + f Z field_7406 johnny +c net/minecraft/class_1632$class_3761 net/minecraft/entity/monster/VindicatorEntity$BreakDoorGoal +c net/minecraft/class_1632$class_1633 net/minecraft/entity/monster/VindicatorEntity$JohnnyAttackGoal +c net/minecraft/class_1632$class_4293 net/minecraft/entity/monster/VindicatorEntity$AttackGoal + f Lnet/minecraft/class_1632; field_19262 field_220724_d +c net/minecraft/class_5136 net/minecraft/entity/monster/ZoglinEntity + m (Lnet/minecraft/class_4095;)V method_26930 func_234330_c_ + m (Lnet/minecraft/class_1309;)Z method_26936 func_234337_j_ + m (Lnet/minecraft/class_4095;)V method_26929 func_234329_b_ + m (Lnet/minecraft/class_1309;)V method_26938 func_234338_k_ + m (Lnet/minecraft/class_4095;)V method_26928 func_234328_a_ + m ()V method_26933 func_234334_eN_ + m ()V method_26931 func_234332_eJ_ + m ()Z method_26939 func_234331_eI_ + m ()Lnet/minecraft/class_5132$class_5133; method_26937 func_234339_m_ + m ()Ljava/util/Optional; method_26934 func_234335_eQ_ + f Lnet/minecraft/class_2940; field_23734 field_234327_d_ + f Lcom/google/common/collect/ImmutableList; field_23733 field_234326_c_ + f Lcom/google/common/collect/ImmutableList; field_23731 field_234324_b_ + f I field_23732 field_234325_bu_ +c net/minecraft/class_1639 net/minecraft/entity/monster/WitherSkeletonEntity +c net/minecraft/class_1641 net/minecraft/entity/monster/ZombieVillagerEntity + m (Lnet/minecraft/class_3218;)V method_7197 cureZombie + m (Lnet/minecraft/class_3850;)V method_7195 setVillagerData + m ()I method_7194 getConversionProgress + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28369 func_234343_a_ + m (Lnet/minecraft/class_2487;)V method_16916 setOffers + m (Lnet/minecraft/class_2520;)V method_21649 setGossips + m (I)V method_19622 setEXP + m ()Z method_7198 isConverting + m (Ljava/util/UUID;I)V method_7199 startConverting + f Lnet/minecraft/class_2520; field_20299 gossips + f Lnet/minecraft/class_2940; field_7423 CONVERTING + f I field_7422 conversionTime + f Ljava/util/UUID; field_7421 converstionStarter + f Lnet/minecraft/class_2487; field_17047 offers + f I field_18877 xp + f Lnet/minecraft/class_2940; field_7420 VILLAGER_DATA +c net/minecraft/class_1642 net/minecraft/entity/monster/ZombieEntity + m (Lnet/minecraft/class_1642;)Ljava/util/Random; method_7210 func_234340_a_ + m ()Lnet/minecraft/class_5132$class_5133; method_26940 func_234342_eQ_ + m ()Z method_7206 isDrowning + m ()V method_6001 func_230291_eT_ + m ()Z method_7211 isBreakDoorsTaskSet + m (Lnet/minecraft/class_1267;)Z method_20009 func_213697_a + m ()Z method_7216 shouldBurnInDay + m ()Z method_7209 shouldDrown + m ()V method_7218 onDrowned + m (Ljava/util/Random;)Z method_29936 func_241399_a_ + m ()Lnet/minecraft/class_3414; method_7207 getStepSound + m (I)V method_7213 startDrowning + m (F)V method_7205 applyAttributeBonuses + m ()Lnet/minecraft/class_1799; method_7215 getSkullDrop + m ()Z method_7212 canBreakDoors + m (Z)V method_7201 setBreakDoorsAItask + m ()V method_7208 applyEntityAI + m (Lnet/minecraft/class_1299;)V method_7200 func_234341_c_ + f Ljava/util/function/Predicate; field_19015 HARD_DIFFICULTY_PREDICATE + f Lnet/minecraft/class_2940; field_7434 IS_CHILD + f Lnet/minecraft/class_2940; field_7425 DROWNING + f Lnet/minecraft/class_2940; field_7427 VILLAGER_TYPE + f Z field_7432 isBreakDoorsTaskSet + f I field_7424 drownedConversionTime + f I field_7426 inWaterTime + f Lnet/minecraft/class_1322; field_7430 BABY_SPEED_BOOST + f Ljava/util/UUID; field_7429 BABY_SPEED_BOOST_ID + f Lnet/minecraft/class_1339; field_7433 breakDoor +c net/minecraft/class_1642$class_1643 net/minecraft/entity/monster/ZombieEntity$AttackTurtleEggGoal + f Lnet/minecraft/class_1642; field_7437 field_203120_f +c net/minecraft/class_1642$class_1644 net/minecraft/entity/monster/ZombieEntity$GroupData + f Z field_7439 isChild + f Z field_25607 field_241400_b_ +c net/minecraft/class_4760 net/minecraft/entity/monster/HoglinEntity + m ()Z method_26944 func_234364_eK_ + m ()Lnet/minecraft/class_5132$class_5133; method_26943 func_234362_eI_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_24349 func_234361_c_ + m ()Z method_26945 func_234365_eM_ + m ()Z method_26946 func_234368_eV_ + m ()Z method_24658 func_234363_eJ_ + m (Lnet/minecraft/class_3218;)V method_26942 func_234360_a_ + m (Z)V method_26948 func_234370_t_ + m (Z)V method_26949 func_234371_u_ + m (Lnet/minecraft/class_3414;)V method_30081 func_241412_a_ + f Lnet/minecraft/class_2940; field_23737 field_234356_bw_ + f I field_22368 field_234357_bx_ + f I field_23735 field_234358_by_ + f Z field_23736 field_234359_bz_ + f Lcom/google/common/collect/ImmutableList; field_22366 field_234355_bv_ + f Lcom/google/common/collect/ImmutableList; field_22365 field_234354_bu_ +c net/minecraft/class_1590 net/minecraft/entity/monster/ZombifiedPiglinEntity + m (Lnet/minecraft/class_1590;)V method_29937 func_241405_a_ + m ()Lnet/minecraft/class_5132$class_5133; method_26941 func_234352_eU_ + m ()V method_29942 func_241411_fa_ + m (Lnet/minecraft/class_1590;)Z method_29938 func_241406_b_ + m (Lnet/minecraft/class_1590;)Z method_29939 func_241407_c_ + m (Lnet/minecraft/class_1590;)Z method_29940 func_241408_d_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20682 func_234351_b_ + m ()V method_30080 func_241409_eY_ + m ()V method_29941 func_241410_eZ_ + m ()V method_29533 func_234353_eV_ + f Ljava/util/UUID; field_25381 field_234348_bx_ + f I field_25608 field_241401_bA_ + f Lnet/minecraft/class_4801; field_25382 field_234350_d_ + f Lnet/minecraft/class_4801; field_25379 field_234346_bv_ + f Lnet/minecraft/class_1322; field_7307 field_234349_c_ + f I field_7308 field_234345_bu_ + f Ljava/util/UUID; field_7311 field_234344_b_ + f Lnet/minecraft/class_4801; field_25609 field_241403_bz_ + f I field_25380 field_234347_bw_ +c net/minecraft/class_5137 net/minecraft/entity/monster/IFlinging + m ()I method_24657 func_230290_eL_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_26950 func_234403_a_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)V method_26951 func_234404_b_ +c net/minecraft/class_4835 net/minecraft/entity/monster/HoglinTasks + m (Lnet/minecraft/class_4760;)Z method_25947 func_234394_f_ + m (Lnet/minecraft/class_4760;)Z method_24686 func_234396_g_ + m (Lnet/minecraft/class_4760;)Z method_30085 func_241416_h_ + m (Lnet/minecraft/class_4760;)Z method_24691 func_234402_j_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24665 func_234378_a_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24672 func_234384_b_ + m (Lnet/minecraft/class_4760;)V method_24664 func_234377_a_ + m (Lnet/minecraft/class_4760;)Ljava/util/Optional; method_30083 func_234398_h_ + m ()Lnet/minecraft/class_4118; method_24662 func_234374_a_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24675 func_234387_c_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24678 func_234390_d_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24681 func_234393_e_ + m (Lnet/minecraft/class_4760;)Z method_24677 func_234386_c_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_4168;)Lnet/minecraft/class_3414; method_30084 func_234379_b_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24683 func_234395_f_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_4168;)Lnet/minecraft/class_3414; method_30082 func_241413_a_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24685 func_234397_g_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24687 func_234399_h_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24689 func_234401_i_ + m (Lnet/minecraft/class_4760;Lnet/minecraft/class_2338;)Z method_24669 func_234380_a_ + m (Lnet/minecraft/class_4760;)Ljava/util/Optional; method_24684 func_234392_e_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4760;)V method_24663 func_234375_a_ + m (Lnet/minecraft/class_4095;)V method_24679 func_234391_e_ + m (Lnet/minecraft/class_4095;)V method_24676 func_234388_d_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4760;)V method_24670 func_234381_b_ + m (Lnet/minecraft/class_4760;)Ljava/util/List; method_24690 func_234400_i_ + m (Lnet/minecraft/class_4095;)V method_24673 func_234385_c_ + m (Lnet/minecraft/class_4095;)V method_24666 func_234382_b_ + m (Lnet/minecraft/class_4095;)Lnet/minecraft/class_4095; method_24668 func_234376_a_ + f Lnet/minecraft/class_4801; field_25383 field_234373_b_ + f Lnet/minecraft/class_4801; field_22369 field_234372_a_ +c net/minecraft/class_4836 net/minecraft/entity/monster/piglin/PiglinEntity + m (Lnet/minecraft/class_1297;I)Lnet/minecraft/class_1297; method_26089 func_234417_b_ + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_24711 func_234436_k_ + m (Lnet/minecraft/class_1799;)V method_24844 func_234438_m_ + m (Lnet/minecraft/class_1799;)Z method_27085 func_234437_l_ + m (Lnet/minecraft/class_1799;)V method_24845 func_234439_n_ + m (Z)V method_26954 setCannotHunt + m (Z)V method_29274 func_234442_u_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_24695 func_234418_b_ + m ()Lnet/minecraft/class_1799; method_24702 func_234432_eW_ + m ()Lnet/minecraft/class_5132$class_5133; method_26953 func_234420_eI_ + m (Lnet/minecraft/class_3414;)V method_30086 func_241417_a_ + m ()Z method_24703 func_234433_eX_ + m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_24696 func_234419_d_ + m (Lnet/minecraft/class_1799;)Z method_24846 func_234440_o_ + m ()Z method_29272 func_234425_eN_ + f Lnet/minecraft/class_1322; field_22380 BABY_SPEED_MODIFIER + f Ljava/util/UUID; field_22379 BABY_SPEED_MODIFIER_IDENTIFIER + f Lcom/google/common/collect/ImmutableList; field_22381 field_234414_c_ + f Lnet/minecraft/class_2940; field_25164 DANCING + f Lnet/minecraft/class_1277; field_22371 inventory + f Lnet/minecraft/class_2940; field_22378 field_234409_bv_ + f Lnet/minecraft/class_2940; field_22377 field_234415_d_ + f Lcom/google/common/collect/ImmutableList; field_22376 field_234405_b_ + f Z field_23738 field_234407_bB_ +c net/minecraft/class_5418 net/minecraft/entity/monster/piglin/AbstractPiglinEntity + m ()Z method_26952 func_234422_eK_ + m ()V method_30238 func_241848_eP + m (Lnet/minecraft/class_3218;)V method_24694 func_234416_a_ + m ()Z method_30237 func_242338_eO + m ()Lnet/minecraft/class_4837; method_24705 func_234424_eM_ + m ()Z method_30234 func_242335_eK + m (Z)V method_30240 func_242340_t + m ()Z method_30235 func_242336_eL + m ()V method_30239 func_242339_eS + m ()Z method_30236 func_242337_eM + f Lnet/minecraft/class_2940; field_25758 field_242333_b + f I field_25759 field_242334_c +c net/minecraft/class_4837 net/minecraft/entity/monster/piglin/PiglinAction + m ()[Lnet/minecraft/class_4837; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4837; valueOf valueOf + f Lnet/minecraft/class_4837; field_22384 CROSSBOW_CHARGE + f Lnet/minecraft/class_4837; field_22383 CROSSBOW_HOLD + f Lnet/minecraft/class_4837; field_22385 ADMIRING_ITEM + f Lnet/minecraft/class_4837; field_25166 DANCING + f Lnet/minecraft/class_4837; field_22386 DEFAULT + f [Lnet/minecraft/class_4837; field_22387 $VALUES + f Lnet/minecraft/class_4837; field_25165 ATTACKING_WITH_MELEE_WEAPON +c net/minecraft/class_4838 net/minecraft/entity/monster/piglin/PiglinTasks + m (Lnet/minecraft/class_4095;)V method_24756 func_234495_c_ + m (Lnet/minecraft/class_4836;Ljava/util/List;Lnet/minecraft/class_243;)V method_24731 func_234476_a_ + m (Lnet/minecraft/class_4836;)Z method_24784 func_234534_u_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_4095;)Lnet/minecraft/class_4095; method_24732 func_234469_a_ + m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)V method_24759 func_234509_e_ + m (Lnet/minecraft/class_5418;)V method_29945 func_241430_f_ + m (Lnet/minecraft/class_4836;)Z method_29538 func_234528_o_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)V method_24767 func_234516_g_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)Z method_24775 func_234523_j_ + m (Lnet/minecraft/class_1309;)Z method_24761 func_234510_f_ + m ()Lnet/minecraft/class_4118; method_24717 func_234458_a_ + m (Lnet/minecraft/class_4836;)Z method_29277 func_234522_j_ + m (Lnet/minecraft/class_5418;)Ljava/util/Optional; method_29947 func_241432_i_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_29535 func_234462_a_ + m (Lnet/minecraft/class_1309;)Z method_24739 func_234482_b_ + m (Lnet/minecraft/class_5418;)Ljava/util/Optional; method_24782 func_234532_s_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_5418;)V method_24740 func_234484_b_ + m (Lnet/minecraft/class_4836;)Z method_24791 func_234452_B_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1799;)V method_24849 func_234498_c_ + m (Lnet/minecraft/class_1792;)Z method_24752 func_234499_c_ + m (Lnet/minecraft/class_4836;)Z method_24783 func_234533_t_ + m (Lnet/minecraft/class_4095;)V method_24743 func_234485_b_ + m (Lnet/minecraft/class_5418;)Z method_24766 func_234520_i_ + m (Lnet/minecraft/class_4836;)V method_24787 func_234536_x_ + m (Lnet/minecraft/class_5418;)V method_29943 func_241419_G_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_4168;)Lnet/minecraft/class_3414; method_30088 func_241426_b_ + m (Lnet/minecraft/class_4836;)Ljava/util/Optional; method_24777 func_234526_m_ + m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)V method_29946 func_241431_f_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)Z method_24755 func_234504_d_ + m (Lnet/minecraft/class_4836;)Ljava/util/Optional; method_29536 func_234515_g_ + m (Lnet/minecraft/class_4836;)Z method_29275 func_234457_G_ + m (Lnet/minecraft/class_4836;)Z method_24850 func_234455_E_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)V method_24773 func_234521_i_ + m (Lnet/minecraft/class_1299;)Z method_29534 func_234459_a_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1297;)Z method_24723 func_234467_a_ + m (Lnet/minecraft/class_4836;Ljava/util/List;)V method_24774 func_234490_b_ + m (Lnet/minecraft/class_1309;)Z method_24757 func_234506_e_ + m (Lnet/minecraft/class_4836;)Ljava/util/List; method_24780 func_234529_p_ + m (Lnet/minecraft/class_4095;)V method_24768 func_234511_f_ + m (Lnet/minecraft/class_4836;)Z method_24790 func_234451_A_ + m (Lnet/minecraft/class_4836;)V method_25948 func_234496_c_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1799;)Z method_24730 func_234474_a_ + m (Lnet/minecraft/class_1309;)Z method_24719 func_234460_a_ + m (Lnet/minecraft/class_4836;Z)V method_24741 func_234477_a_ + m (Lnet/minecraft/class_4836;)Ljava/util/Optional; method_30091 func_241429_d_ + m (Lnet/minecraft/class_1792;)Z method_24746 func_234492_b_ + m ()Lnet/minecraft/class_4809; method_24747 func_234500_d_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1657;Ljava/util/List;)V method_24727 func_234472_a_ + m (Lnet/minecraft/class_4095;)V method_24725 func_234464_a_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_4168;)Lnet/minecraft/class_3414; method_30087 func_241422_a_ + m (Lnet/minecraft/class_4836;)Ljava/util/List; method_24776 func_234524_k_ + m (Lnet/minecraft/class_5418;)Z method_30241 func_242341_g + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)V method_24724 func_234468_a_ + m (Lnet/minecraft/class_4836;)Z method_29537 func_234525_l_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_4095;)V method_24751 func_234488_b_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_24728 func_234471_a_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_29276 func_234461_a_ + m (Lnet/minecraft/class_4836;)V method_24781 func_234531_r_ + m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)V method_24750 func_234497_c_ + m (Lnet/minecraft/class_5418;)V method_24762 func_234518_h_ + m (Lnet/minecraft/class_4836;)Z method_24917 func_234454_D_ + m (ZLnet/minecraft/class_1657;Lnet/minecraft/class_4836;)Z method_24745 func_234491_a_ + m (Lnet/minecraft/class_4836;)V method_24758 func_234512_f_ + m (Lnet/minecraft/class_1309;)Z method_24769 func_234517_h_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)V method_24771 func_234519_h_ + m (Lnet/minecraft/class_5418;)Ljava/util/List; method_26350 func_234530_q_ + m (Lnet/minecraft/class_4836;)Lnet/minecraft/class_243; method_24788 func_234537_y_ + m (Lnet/minecraft/class_4836;Ljava/util/List;)V method_24772 func_234475_a_ + m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1657;)V method_29944 func_241421_a_ + m (Lnet/minecraft/class_1542;)Lnet/minecraft/class_1799; method_24848 func_234465_a_ + m (Lnet/minecraft/class_4836;)Z method_24789 func_234538_z_ + m (Lnet/minecraft/class_1309;)V method_24753 func_234501_d_ + m ()Lnet/minecraft/class_4821; method_24737 func_234505_e_ + m (Lnet/minecraft/class_4836;)V method_24722 func_234486_b_ + m (Lnet/minecraft/class_4095;)V method_24764 func_234507_e_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1799;)Z method_27086 func_234489_b_ + m ()Lnet/minecraft/class_4809; method_30090 func_241428_d_ + m (Lnet/minecraft/class_1792;)Z method_24735 func_234480_a_ + m (Lnet/minecraft/class_1657;Z)V method_24733 func_234478_a_ + m ()Lnet/minecraft/class_4121; method_24738 func_234493_c_ + m (Lnet/minecraft/class_4836;)Z method_24785 func_234535_v_ + m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)V method_24742 func_234487_b_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1542;)V method_24726 func_234470_a_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_24720 func_234483_b_ + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_4836;)V method_24734 func_234479_a_ + m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)V method_24763 func_234513_f_ + m (Lnet/minecraft/class_4836;)Z method_24754 func_234508_e_ + m (Lnet/minecraft/class_1309;)Z method_24765 func_234514_g_ + m ()Lnet/minecraft/class_4118; method_24718 func_234481_b_ + m (Lnet/minecraft/class_5418;)Z method_24716 func_234456_F_ + m (Lnet/minecraft/class_4836;)V method_24736 func_234466_a_ + m (Lnet/minecraft/class_1309;)Z method_24748 func_234494_c_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_5418;)V method_24721 func_234463_a_ + m (Lnet/minecraft/class_4095;)V method_24760 func_234502_d_ + m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1799;)V method_30089 func_241427_c_ + m (Lnet/minecraft/class_4836;)Z method_24714 func_234453_C_ + f Lnet/minecraft/class_4801; field_25698 field_241418_g_ + f Lnet/minecraft/class_4801; field_22389 field_234446_c_ + f Lnet/minecraft/class_4801; field_25384 field_234449_f_ + f Lnet/minecraft/class_4801; field_22388 field_234445_b_ + f Ljava/util/Set; field_22392 field_234450_g_ + f Lnet/minecraft/class_4801; field_22391 field_234448_e_ + f Lnet/minecraft/class_1792; field_23826 field_234444_a_ + f Lnet/minecraft/class_4801; field_22390 field_234447_d_ +c net/minecraft/class_5420 net/minecraft/entity/monster/piglin/PiglinBruteBrain + m (Lnet/minecraft/class_1309;)Z method_30245 func_242347_a + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_30246 func_242348_a + m ()Lnet/minecraft/class_4118; method_30244 func_242346_a + m ()Lnet/minecraft/class_4118; method_30254 func_242356_b + m (Lnet/minecraft/class_5419;)V method_30250 func_242352_a + m (Lnet/minecraft/class_5419;)V method_30256 func_242358_b + m (Lnet/minecraft/class_5419;Lnet/minecraft/class_1309;)Z method_30259 func_242361_c + m (Lnet/minecraft/class_5419;Lnet/minecraft/class_4168;)V method_30253 func_242355_a + m (Lnet/minecraft/class_5419;)V method_30258 func_242360_c + m (Lnet/minecraft/class_5419;)V method_30261 func_242363_d + m (Lnet/minecraft/class_5419;Lnet/minecraft/class_1309;)V method_30251 func_242353_a + m (Lnet/minecraft/class_5419;Lnet/minecraft/class_4095;)V method_30260 func_242362_c + m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)Z method_30255 func_242357_b + m (Lnet/minecraft/class_5419;Lnet/minecraft/class_4095;)Lnet/minecraft/class_4095; method_30252 func_242354_a + m (Lnet/minecraft/class_5419;Lnet/minecraft/class_4095;)V method_30262 func_242364_d + m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)Z method_30248 func_242350_a + m (Lnet/minecraft/class_5418;)Ljava/util/Optional; method_30247 func_242349_a + m (Lnet/minecraft/class_5419;Lnet/minecraft/class_4095;)V method_30257 func_242359_b + m (Lnet/minecraft/class_5418;Lnet/minecraft/class_4140;)Ljava/util/Optional; method_30249 func_242351_a +c net/minecraft/class_5419 net/minecraft/entity/monster/piglin/PiglinBruteEntity + m ()V method_30243 func_242345_eT + m ()Lnet/minecraft/class_5132$class_5133; method_30242 func_242344_eS + f Lcom/google/common/collect/ImmutableList; field_25761 field_242343_d + f Lcom/google/common/collect/ImmutableList; field_25760 field_242342_bo +c net/minecraft/class_4823 net/minecraft/entity/monster/piglin/AdmireItemTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_24610 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;)Z method_24609 shouldExecute + f I field_22324 field_234540_b_ +c net/minecraft/class_4819 net/minecraft/entity/monster/piglin/FinishedHuntTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_24596 startExecuting + m (Lnet/minecraft/class_4836;)Z method_24595 func_234539_a_ +c net/minecraft/class_4827 net/minecraft/entity/monster/piglin/ForgetAdmiredItemTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_24620 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;)Z method_24619 shouldExecute + f I field_22328 field_234541_b_ +c net/minecraft/class_4826 net/minecraft/entity/monster/piglin/StartHuntTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_24618 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;)Z method_24617 shouldExecute +c net/minecraft/class_4830 net/minecraft/entity/monster/piglin/StartAdmiringItemTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;)Z method_24835 shouldExecute + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_24630 startExecuting +c net/minecraft/class_5430 net/minecraft/entity/monster/piglin/StopReachingItemTask + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_30338 startExecuting + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;)Z method_30337 shouldExecute + f I field_25816 field_242366_c + f I field_25815 field_242365_b +c net/minecraft/class_4274 net/minecraft/world/spawner/CatSpawner + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;)I method_20262 spawnCat + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)I method_20260 func_221123_a + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)I method_20263 func_221121_a + f I field_19171 field_221125_a +c net/minecraft/class_3988 net/minecraft/entity/merchant/villager/AbstractVillagerEntity + m ()V method_19181 resetCustomer + m (Z)Lnet/minecraft/class_3414; method_18012 getVillagerYesNoSound + m ()V method_20010 playCelebrateSound + m (Lnet/minecraft/class_1914;)V method_18008 onVillagerTrade + m ()I method_20506 getShakeHeadTicks + m (I)V method_20507 setShakeHeadTicks + m ()Z method_18009 hasCustomer + m (Lnet/minecraft/class_2394;)V method_18007 spawnParticles + m ()Lnet/minecraft/class_1277; method_18011 getVillagerInventory + m (Lnet/minecraft/class_1916;[Lnet/minecraft/class_3853$class_1652;I)V method_19170 addTrades + m ()V method_7237 populateTradeData + f Lnet/minecraft/class_1277; field_17723 villagerInventory + f Lnet/minecraft/class_1916; field_17721 offers + f Lnet/minecraft/class_1657; field_17722 customer + f Lnet/minecraft/class_2940; field_19295 SHAKE_HEAD_TICKS +c net/minecraft/class_1645 net/minecraft/entity/NPCMerchant + f Lnet/minecraft/class_1916; field_7442 offers + f I field_18525 xp + f Lnet/minecraft/class_1657; field_7441 customer + f Lnet/minecraft/class_1725; field_7443 merchantInventory +c net/minecraft/class_1646 net/minecraft/entity/merchant/villager/VillagerEntity + m ()I method_19189 getFoodValueFromInventory + m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_1439; method_19190 trySpawnGolem + m (Lnet/minecraft/class_4140;)V method_19176 resetMemoryPoint + m ()V method_21724 calculateDemandOfOffers + m (J)Z method_20741 hasSleptAndWorkedRecently + m ()Z method_20824 canRestock + m ()V method_19187 resetAllSpecialPrices + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28370 func_234547_a_ + m (Lnet/minecraft/class_3218;)V method_19179 resetBrain + m (I)V method_19193 decrFoodLevel + m ()Z method_7239 wantsMoreFood + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4158;)Z method_19520 func_234546_a_ + m (Lnet/minecraft/class_1657;)V method_19192 recalculateSpecialPricesFor + m ()Z method_29279 shouldAssignProfessionOnSpawn + m ()Lnet/minecraft/class_5132$class_5133; method_26955 registerAttributes + m ()Z method_7234 canAbondonItems + m (Lnet/minecraft/class_1309;)Z method_20699 func_223349_j_ + m ()Z method_20822 canResetStock + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4158;)Z method_19521 func_213771_b + m (Lnet/minecraft/class_3850;)V method_7221 setVillagerData + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1297;Lnet/minecraft/class_1309;)V method_20691 func_223342_a_ + m (Lnet/minecraft/class_1297;)V method_20690 sawMurder + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19177 func_242368_a + m ()V method_20821 func_223718_eH + m ()Z method_20698 isHungry + m ()Z method_19188 canLevelUp + m (J)Z method_20687 canSpawnGolems + m ()V method_30958 func_242369_fq + m ()V method_19185 eat + m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_4140;Lnet/minecraft/class_4208;)V method_19178 func_213752_a_ + m ()V method_21723 resetOffersAndAdjustForDemand + m ()Z method_20823 hasUsedOffer + m (Lnet/minecraft/class_1657;)I method_20594 getPlayerReputation + m (Lnet/minecraft/class_1277;Ljava/util/Map$Entry;)I method_19172 func_226553_a_ + m (I)V method_19625 setXp + m ()V method_20264 shakeHead + m ()Z method_19623 isFarmItemInInventory + m (Lnet/minecraft/class_1916;)V method_16917 setOffers + m ()Lnet/minecraft/class_4136; method_21651 getGossip + m ()V method_20697 func_223346_ep + m (Lnet/minecraft/class_2338;DD)Lnet/minecraft/class_2338; method_30023 getValidGolemSpawnPosition + m ()V method_19183 playWorkstationSound + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4158;)Z method_19522 func_213769_c + m (Lnet/minecraft/class_3218;JI)V method_20688 func_242367_a + m (Lnet/minecraft/class_4139;)Z method_20593 func_223103_a_ + m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4158;)Z method_29278 func_213772_a + m ()V method_20696 tickGossip + m (Lnet/minecraft/class_4095;)V method_19174 initBrain + m ()V method_19182 restock + m (JLnet/minecraft/class_1646;)Z method_20693 func_226554_b_ + m (Lnet/minecraft/class_1657;)V method_19191 displayMerchantGui + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1646; method_7225 func_241840_a + m (Lnet/minecraft/class_2520;)V method_21650 setGossips + m ()V method_16918 levelUp + f Lcom/google/common/collect/ImmutableList; field_18539 SENSOR_TYPES + f Ljava/util/Map; field_18526 FOOD_VALUES + f Ljava/util/Set; field_18527 ALLOWED_INVENTORY_ITEMS + f J field_20332 lastRestockDayTime + f J field_18537 lastRestock + f Lnet/minecraft/class_1657; field_18530 previousCustomer + f I field_18536 xp + f Lnet/minecraft/class_2940; field_7445 VILLAGER_DATA + f Z field_18529 leveledUp + f Lnet/minecraft/class_4136; field_18534 gossip + f B field_18533 foodLevel + f Z field_25167 assignProfessionWhenSpawned + f Ljava/util/Map; field_18851 JOB_SITE_PREDICATE_MAP + f I field_18528 timeUntilReset + f Lcom/google/common/collect/ImmutableList; field_18538 MEMORY_TYPES + f I field_19427 restocksToday + f J field_19357 lastGossipDecay + f J field_18535 lastGossipTime +c net/minecraft/class_1655 net/minecraft/entity/INPC +c net/minecraft/class_3851 net/minecraft/entity/villager/IVillagerDataHolder + m ()Lnet/minecraft/class_3850; method_7231 getVillagerData +c net/minecraft/class_3850 net/minecraft/entity/merchant/villager/VillagerData + m (I)I method_19195 getExperienceNext + m (Lnet/minecraft/class_3850;)Lnet/minecraft/class_3852; method_28373 func_234557_b_ + m (Lnet/minecraft/class_3850;)Lnet/minecraft/class_3854; method_28374 func_234558_c_ + m ()Lnet/minecraft/class_3852; method_16924 getProfession + m ()I method_16925 getLevel + m ()Lnet/minecraft/class_3852; method_29948 func_241438_d_ + m ()Lnet/minecraft/class_3854; method_29949 func_241439_e_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28372 func_234556_a_ + m (I)Z method_19196 canLevelUp + m (I)Lnet/minecraft/class_3850; method_16920 withLevel + m (I)I method_19194 getExperiencePrevious + m (Lnet/minecraft/class_3854;)Lnet/minecraft/class_3850; method_16922 withType + m ()Lnet/minecraft/class_3854; method_16919 getType + m (Lnet/minecraft/class_3852;)Lnet/minecraft/class_3850; method_16921 withProfession + m (Lnet/minecraft/class_3850;)Ljava/lang/Integer; method_28371 func_234555_a_ + f I field_17050 level + f Lcom/mojang/serialization/Codec; field_24669 CODEC + f [I field_18540 LEVEL_EXPERIENCE_AMOUNTS + f Lnet/minecraft/class_3854; field_17048 type + f Lnet/minecraft/class_3852; field_17049 profession +c net/minecraft/class_3853 net/minecraft/entity/merchant/villager/VillagerTrades + m (Ljava/util/HashMap;)V method_16929 func_221237_a + m (Lcom/google/common/collect/ImmutableMap;)Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; method_16928 gatAsIntMap + f Ljava/util/Map; field_17067 VILLAGER_DEFAULT_TRADES + f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_17724 field_221240_b +c net/minecraft/class_3853$class_4160 net/minecraft/entity/merchant/villager/VillagerTrades$DyedArmorForEmeraldsTrade + m (Ljava/util/Random;)Lnet/minecraft/class_1769; method_19200 getRandomDyeItem + f I field_18545 price + f Lnet/minecraft/class_1792; field_18544 tradeItem + f I field_18546 maxUses + f I field_18547 xpValue +c net/minecraft/class_3853$class_4161 net/minecraft/entity/merchant/villager/VillagerTrades$EmeraldForItemsTrade + f Lnet/minecraft/class_1792; field_18548 tradeItem + f I field_18550 maxUses + f F field_18552 priceMultiplier + f I field_18551 xpValue + f I field_18549 count +c net/minecraft/class_3853$class_4162 net/minecraft/entity/merchant/villager/VillagerTrades$EmeraldForVillageTypeItemTrade + m (Ljava/util/Map;Lnet/minecraft/class_3854;)Z method_19202 func_221188_a + m (Lnet/minecraft/class_3854;)V method_19201 func_221189_a + f I field_18554 count + f I field_18555 maxUses + f I field_18556 xpValue + f Ljava/util/Map; field_18553 villagerTypeItems +c net/minecraft/class_3853$class_1648 net/minecraft/entity/merchant/villager/VillagerTrades$EnchantedBookForEmeraldsTrade + f I field_18557 xpValue +c net/minecraft/class_3853$class_4166 net/minecraft/entity/merchant/villager/VillagerTrades$SuspiciousStewForEmeraldTrade + f F field_18580 priceMultiplier + f I field_18579 xpValue + f Lnet/minecraft/class_1291; field_18577 effect + f I field_18578 duration +c net/minecraft/class_3853$class_4167 net/minecraft/entity/merchant/villager/VillagerTrades$ItemWithPotionForEmeraldsAndItemsTrade + m (Lnet/minecraft/class_1842;)Z method_19203 func_221218_a + f I field_18585 xpValue + f I field_18582 potionCount + f F field_18588 priceMultiplier + f I field_18587 buyingItemCount + f Lnet/minecraft/class_1792; field_18586 buyingItem + f I field_18583 emeraldCount + f I field_18584 maxUses + f Lnet/minecraft/class_1799; field_18581 potionStack +c net/minecraft/class_3853$class_1654 net/minecraft/entity/merchant/villager/VillagerTrades$EmeraldForMapTrade + f Lnet/minecraft/class_3195; field_7474 structureName + f I field_18590 maxUses + f I field_18591 xpValue + f I field_18589 count + f Lnet/minecraft/class_20$class_21; field_7473 mapDecorationType +c net/minecraft/class_3853$class_4163 net/minecraft/entity/merchant/villager/VillagerTrades$EnchantedItemForEmeraldsTrade + f F field_18562 priceMultiplier + f I field_18561 xpValue + f Lnet/minecraft/class_1799; field_18558 sellingStack + f I field_18559 emeraldCount + f I field_18560 maxUses +c net/minecraft/class_3853$class_1652 net/minecraft/entity/merchant/villager/VillagerTrades$ITrade + m (Lnet/minecraft/class_1297;Ljava/util/Random;)Lnet/minecraft/class_1914; method_7246 getOffer +c net/minecraft/class_3853$class_4164 net/minecraft/entity/merchant/villager/VillagerTrades$ItemsForEmeraldsAndItemsTrade + f I field_18567 sellingItemCount + f Lnet/minecraft/class_1799; field_18563 buyingItem + f I field_18568 maxUses + f F field_18570 priceMultiplier + f I field_18569 xpValue + f I field_18564 buyingItemCount + f I field_18565 emeraldCount + f Lnet/minecraft/class_1799; field_18566 sellingItem +c net/minecraft/class_3853$class_4165 net/minecraft/entity/merchant/villager/VillagerTrades$ItemsForEmeraldsTrade + f I field_18572 emeraldCount + f I field_18573 sellingItemCount + f I field_18574 maxUses + f F field_18576 priceMultiplier + f I field_18575 xpValue + f Lnet/minecraft/class_1799; field_18571 sellingItem +c net/minecraft/class_3852 net/minecraft/entity/merchant/villager/VillagerProfession + m (Ljava/lang/String;Lnet/minecraft/class_4158;Lcom/google/common/collect/ImmutableSet;Lcom/google/common/collect/ImmutableSet;Lnet/minecraft/class_3414;)Lnet/minecraft/class_3852; method_19197 register + m ()Lnet/minecraft/class_3414; method_22384 getSound + m ()Lnet/minecraft/class_4158; method_19198 getPointOfInterest + m ()Ljava/lang/String; toString toString + m ()Lcom/google/common/collect/ImmutableSet; method_19199 getSpecificItems + m ()Lcom/google/common/collect/ImmutableSet; method_19630 getRelatedWorldBlocks + m (Ljava/lang/String;Lnet/minecraft/class_4158;Lnet/minecraft/class_3414;)Lnet/minecraft/class_3852; method_16926 register + f Lnet/minecraft/class_4158; field_18542 pointOfInterest + f Lnet/minecraft/class_3852; field_17051 NONE + f Lnet/minecraft/class_3852; field_17054 CARTOGRAPHER + f Lnet/minecraft/class_3852; field_17052 ARMORER + f Lnet/minecraft/class_3852; field_17053 BUTCHER + f Lcom/google/common/collect/ImmutableSet; field_18543 specificItems + f Ljava/lang/String; field_18541 name + f Lcom/google/common/collect/ImmutableSet; field_18880 relatedWorldBlocks + f Lnet/minecraft/class_3852; field_17062 NITWIT + f Lnet/minecraft/class_3852; field_17060 LIBRARIAN + f Lnet/minecraft/class_3852; field_17061 MASON + f Lnet/minecraft/class_3852; field_17064 TOOLSMITH + f Lnet/minecraft/class_3852; field_17065 WEAPONSMITH + f Lnet/minecraft/class_3852; field_17063 SHEPHERD + f Lnet/minecraft/class_3852; field_17056 FARMER + f Lnet/minecraft/class_3852; field_17057 FISHERMAN + f Lnet/minecraft/class_3852; field_17055 CLERIC + f Lnet/minecraft/class_3852; field_17059 LEATHERWORKER + f Lnet/minecraft/class_3414; field_20633 sound + f Lnet/minecraft/class_3852; field_17058 FLETCHER +c net/minecraft/class_3989 net/minecraft/entity/merchant/villager/WanderingTraderEntity + m ()I method_18014 getDespawnDelay + m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_1408; method_18064 func_213729_d + m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_1408; method_18066 func_213731_e + m (Lnet/minecraft/class_3989;)Z method_18068 func_213733_g + m ()Lnet/minecraft/class_2338; method_18065 getWanderTarget + m (Lnet/minecraft/class_3989;)Z method_18067 func_213736_f + m ()V method_20508 handleDespawn + m (I)V method_18013 setDespawnDelay + m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_1408; method_18061 func_213732_a + m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_2338; method_18062 func_213734_b + m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_1408; method_18063 func_213730_c + m (Lnet/minecraft/class_2338;)V method_18069 setWanderTarget + f Lnet/minecraft/class_2338; field_17758 wanderTarget + f I field_17725 despawnDelay +c net/minecraft/class_3989$class_3994 net/minecraft/entity/merchant/villager/WanderingTraderEntity$MoveToGoal + m (Lnet/minecraft/class_2338;D)Z method_18070 isWithinDistance + f Lnet/minecraft/class_3989; field_17762 field_220850_d + f D field_17761 speed + f D field_17760 maxDistance + f Lnet/minecraft/class_3989; field_17759 traderEntity +c net/minecraft/class_3854 net/minecraft/entity/villager/VillagerType + m (Ljava/lang/String;)Lnet/minecraft/class_3854; method_16931 register + m (Ljava/util/HashMap;)V method_16932 func_221172_a + m ()Ljava/lang/String; toString toString + m (Ljava/util/Optional;)Lnet/minecraft/class_3854; method_16930 func_242371_a + m (Lnet/minecraft/class_5321;)Ljava/util/Optional; method_31080 func_242372_a + f Lnet/minecraft/class_3854; field_17076 SWAMP + f Lnet/minecraft/class_3854; field_17077 TAIGA + f Lnet/minecraft/class_3854; field_17075 SNOW + f Lnet/minecraft/class_3854; field_17071 DESERT + f Ljava/util/Map; field_17078 BY_BIOME + f Ljava/lang/String; field_26690 field_242370_h + f Lnet/minecraft/class_3854; field_17074 SAVANNA + f Lnet/minecraft/class_3854; field_17072 JUNGLE + f Lnet/minecraft/class_3854; field_17073 PLAINS +c net/minecraft/class_3990 net/minecraft/world/spawner/WanderingTraderSpawner + m (Lnet/minecraft/class_2338;)Z method_19631 func_221241_a + m (Lnet/minecraft/class_3218;)Z method_18018 func_234562_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_3989;I)V method_18016 func_242373_a + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_23279 func_234560_a_ + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_18017 func_234561_a_ + f I field_17728 field_221248_c + f Ljava/util/Random; field_17726 random + f I field_17730 field_221250_e + f Lnet/minecraft/class_5268; field_24387 field_234559_b_ + f I field_17729 field_221249_d +c net/minecraft/class_1656 net/minecraft/entity/player/PlayerAbilities + m ()F method_7252 getFlySpeed + m (Lnet/minecraft/class_2487;)V method_7251 write + m (F)V method_7248 setFlySpeed + m (Lnet/minecraft/class_2487;)V method_7249 read + m (F)V method_7250 setWalkSpeed + m ()F method_7253 getWalkSpeed + f Z field_7477 isCreativeMode + f Z field_7478 allowFlying + f Z field_7479 isFlying + f Z field_7480 disableDamage + f F field_7482 walkSpeed + f Z field_7476 allowEdit + f F field_7481 flySpeed +c net/minecraft/class_1661 net/minecraft/entity/player/PlayerInventory + m ()I method_7364 getTimesChanged + m (ILnet/minecraft/class_1799;)Z method_7367 add + m (Lnet/minecraft/class_1799;)I method_7395 getSlotFor + m ()I method_7386 getBestHotbarSlot + m ()Lnet/minecraft/class_1799; method_7391 getCurrentItem + m (ILnet/minecraft/class_1799;)I method_7385 addResource + m (I)Z method_7380 isHotbar + m ()I method_7368 getHotbarSize + m (Lnet/minecraft/class_1662;)V method_7387 accountStacks + m (Ljava/util/function/Predicate;ILnet/minecraft/class_1263;)I method_29280 func_234564_a_ + m ()I method_7376 getFirstEmptyStack + m (Lnet/minecraft/class_1799;)Z method_7379 hasItemStack + m (Lnet/minecraft/class_1282;F)V method_7375 func_234563_a_ + m (I)V method_7365 pickItem + m (I)Lnet/minecraft/class_1799; method_7372 armorItemInSlot + m (Lnet/minecraft/class_1799;)V method_7396 setItemStack + m (Lnet/minecraft/class_1799;)V method_7378 deleteStack + m (Lnet/minecraft/class_1799;)Z method_7394 addItemStackToInventory + m (Lnet/minecraft/class_2499;)Lnet/minecraft/class_2499; method_7384 write + m (ILnet/minecraft/class_1657;)V method_20265 func_214023_a + m (Lnet/minecraft/class_2499;)V method_7397 read + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7393 canMergeStacks + m (Lnet/minecraft/class_2680;)F method_7370 getDestroySpeed + m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_7389 func_210164_j + m (Lnet/minecraft/class_1799;)I method_7366 storePartialItemStack + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7392 stackEqualExact + m (Lnet/minecraft/class_1799;)V method_7374 setPickedItemStack + m (D)V method_7373 changeCurrentItem + m ()Lnet/minecraft/class_1799; method_7399 getItemStack + m (Lnet/minecraft/class_1799;)I method_7371 findSlotMatchingUnusedItem + m ()V method_7381 tick + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;)V method_7398 placeItemBackInInventory + m (Lnet/minecraft/class_3494;)Z method_7382 hasTag + m ()V method_7388 dropAllItems + m (Lnet/minecraft/class_1661;)V method_7377 copyInventory + m (Lnet/minecraft/class_1799;)I method_7390 storeItemStack + f Lnet/minecraft/class_1799; field_7549 itemStack + f I field_7542 timesChanged + f Lnet/minecraft/class_2371; field_7548 armorInventory + f Lnet/minecraft/class_2371; field_7544 offHandInventory + f Lnet/minecraft/class_2371; field_7547 mainInventory + f I field_7545 currentItem + f Ljava/util/List; field_7543 allInventories + f Lnet/minecraft/class_1657; field_7546 player +c net/minecraft/class_1659 net/minecraft/entity/player/ChatVisibility + m (Ljava/lang/String;)Lnet/minecraft/class_1659; valueOf valueOf + m (I)[Lnet/minecraft/class_1659; method_7361 func_221253_b + m (I)Lnet/minecraft/class_1659; method_7360 getValue + m ()Ljava/lang/String; method_7359 getResourceKey + m ()I method_7362 getId + m ()[Lnet/minecraft/class_1659; values values + f Lnet/minecraft/class_1659; field_7538 FULL + f [Lnet/minecraft/class_1659; field_7537 $VALUES + f Ljava/lang/String; field_7540 resourceKey + f I field_7535 id + f [Lnet/minecraft/class_1659; field_7534 field_221255_d + f Lnet/minecraft/class_1659; field_7539 SYSTEM + f Lnet/minecraft/class_1659; field_7536 HIDDEN +c net/minecraft/class_1664 net/minecraft/entity/player/PlayerModelPart + m ()Ljava/lang/String; method_7429 getPartName + m (Ljava/lang/String;)Lnet/minecraft/class_1664; valueOf valueOf + m ()Lnet/minecraft/class_2561; method_7428 getName + m ()I method_7430 getPartMask + m ()[Lnet/minecraft/class_1664; values values + f I field_7560 partMask + f Lnet/minecraft/class_1664; field_7570 RIGHT_SLEEVE + f Lnet/minecraft/class_1664; field_7564 JACKET + f Lnet/minecraft/class_1664; field_7568 LEFT_SLEEVE + f Ljava/lang/String; field_7569 partName + f Lnet/minecraft/class_1664; field_7565 RIGHT_PANTS_LEG + f Lnet/minecraft/class_1664; field_7563 HAT + f Lnet/minecraft/class_1664; field_7566 LEFT_PANTS_LEG + f [Lnet/minecraft/class_1664; field_7562 $VALUES + f I field_7561 partId + f Lnet/minecraft/class_1664; field_7559 CAPE + f Lnet/minecraft/class_2561; field_7567 name +c net/minecraft/class_1657 net/minecraft/entity/player/PlayerEntity + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_7287 interactOn + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_1799;)Z method_7343 canPlayerEdit + m (Lnet/minecraft/class_2625;)V method_7311 openSignEditor + m (Ljava/util/Collection;)I method_7333 resetRecipes + m ()V method_7350 resetCooldown + m ()Lnet/minecraft/class_269; method_7327 getWorldScoreboard + m (I)V method_7316 addExperienceLevel + m (Lnet/minecraft/class_2338;)Lcom/mojang/datafixers/util/Either; method_7269 trySleep + m ()Z method_7302 hasReducedDebug + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20266 func_213833_a + m (DDD)V method_7282 addMovementStat + m (Lnet/minecraft/class_1934;)V method_7336 setGameType + m ()Z method_7294 isAllowEdit + m ()V method_7331 respawnPlayer + m (Lnet/minecraft/class_3445;)V method_7259 addStat + m (Lnet/minecraft/class_2338;)Z method_7326 isNormalCube + m ()V method_7330 updateTurtleHelmet + m (I)V method_7320 setScore + m ()I method_7272 getScore + m ()Z method_21824 wantsToStopRiding + m ()Z method_23668 tryToStartFallFlying + m ()Z method_7337 isCreative + m (Z)Z method_7332 canEat + m (Lnet/minecraft/class_2487;)V method_7345 setRightShoulderEntity + m (Lnet/minecraft/class_1297;)V method_7277 onCriticalHit + m ()I method_7349 xpBarCap + m (Ljava/util/Collection;)I method_7254 unlockRecipes + m (Lnet/minecraft/class_3445;)V method_7266 takeStat + m ()Z method_7340 isUser + m (I)V method_7255 giveExperiencePoints + m (Ljava/lang/String;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_7321 func_234565_a_ + m (Lnet/minecraft/class_2680;)F method_7351 getDigSpeed + m (Lnet/minecraft/class_5250;)Lnet/minecraft/class_5250; method_7299 addTellEvent + m (Lnet/minecraft/class_2960;)V method_7281 addStat + m ()Z method_21825 isStayingOnGroundSurface + m ()V method_7313 updateCape + m (I)V method_7285 addScore + m ()Lnet/minecraft/class_1730; method_7274 getInventoryEnderChest + m ()V method_23669 startFallFlying + m ([Lnet/minecraft/class_2960;)V method_7335 unlockRecipes + m (Lnet/minecraft/class_1297;)V method_17853 func_226562_d_ + m (Z)V method_7268 setReducedDebug + m ()Lnet/minecraft/class_5132$class_5133; method_26956 func_234570_el_ + m (Lnet/minecraft/class_2487;)V method_7267 playShoulderEntityAmbientSound + m (ZZ)V method_7358 stopSleepInBed + m ()V method_7355 sendPlayerAbilities + m ()F method_7292 getLuck + m (Lnet/minecraft/class_1496;Lnet/minecraft/class_1263;)V method_7291 openHorseInventory + m (Lnet/minecraft/class_1799;)Z method_7270 addItemStackToInventory + m ()Lnet/minecraft/class_2487; method_7356 getLeftShoulderEntity + m (Lnet/minecraft/class_1299;)Z method_17852 func_213830_c + m (Lnet/minecraft/class_2593;)V method_7323 openCommandBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1934;)Z method_21701 blockActionRestricted + m (Lnet/minecraft/class_1799;ZZ)Lnet/minecraft/class_1542; method_7329 dropItem + m (Lnet/minecraft/class_3908;)Ljava/util/OptionalInt; method_17355 openContainer + m ()Lcom/mojang/authlib/GameProfile; method_7334 getGameProfile + m (Lnet/minecraft/class_3445;I)V method_7342 addStat + m ()Lnet/minecraft/class_1796; method_7265 createCooldownTracker + m ()V method_7262 spawnShoulderEntities + m ()V method_7293 destroyVanishingCursedItems + m (Lcom/mojang/authlib/GameProfile;)Ljava/util/UUID; method_7271 getUUID + m (Lnet/minecraft/class_2633;)V method_7303 openStructureBlock + m ()Z method_7295 updateEyesInWaterPlayer + m (Lnet/minecraft/class_2487;)V method_7296 spawnShoulderEntity + m (Lnet/minecraft/class_1664;)Z method_7348 isWearing + m (Lnet/minecraft/class_3414;Lnet/minecraft/class_3419;FF)V method_17356 playSound + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;FZZ)Ljava/util/Optional; method_26091 func_242374_a + m ()Z method_7317 shouldHeal + m ()V method_7346 closeScreen + m (F)V method_7322 addExhaustion + m (Lnet/minecraft/class_2394;)V method_16475 addParticlesAroundSelf + m (Lnet/minecraft/class_2680;)Z method_7305 func_234569_d_ + m (Lnet/minecraft/class_1297;)V method_7341 collideWithPlayer + m ()V method_23670 stopFallFlying + m (Lnet/minecraft/class_2487;)Z method_7298 addShoulderEntity + m (Lnet/minecraft/class_1306;)V method_7283 setPrimaryHand + m ()Z method_7276 isPlayerFullyAsleep + m (Lnet/minecraft/class_2960;I)V method_7339 addStat + m (Lnet/minecraft/class_1657;)Z method_7256 canAttackPlayer + m (Lnet/minecraft/class_3751;)V method_16354 openJigsaw + m ()I method_7297 getSleepTimer + m (Lnet/minecraft/class_1299;)V method_17851 func_213834_b + m (Ljava/lang/String;)Ljava/util/UUID; method_7310 getOfflineUUID + m (Lnet/minecraft/class_1799;Z)Lnet/minecraft/class_1542; method_7328 dropItem + m ()Lnet/minecraft/class_2487; method_7308 getRightShoulderEntity + m ()Lnet/minecraft/class_1702; method_7344 getFoodStats + m (Lnet/minecraft/class_2561;Z)V method_7353 sendStatusMessage + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1268;)V method_7315 openBook + m ()V method_7263 spawnSweepParticles + m ()F method_7279 getCooldownPeriod + m ()Z method_30263 func_242375_q + m (DDD)V method_7260 addMountedMovementStat + m ()V method_7318 updatePose + m ()Lnet/minecraft/class_1796; method_7357 getCooldownTracker + m (Z)Z method_7290 drop + m ()Z method_21823 isSecondaryUseActive + m (ILnet/minecraft/class_1916;IIZZ)V method_17354 openMerchantContainer + m (Lnet/minecraft/class_1297;)V method_7324 attackTargetEntityWithCurrentItem + m (F)F method_7261 getCooledAttackStrength + m (Lnet/minecraft/class_1918;)V method_7257 openMinecartCommandBlock + m (Lnet/minecraft/class_2487;)V method_7273 setLeftShoulderEntity + m ()I method_7278 getXPSeed + m (Lnet/minecraft/class_1297;)V method_7304 onEnchantmentCritical + m ()Z method_7338 canUseCommandBlock + m (Z)V method_7284 disableShield + m (Lnet/minecraft/class_1799;I)V method_7286 onEnchant + f Lnet/minecraft/class_2940; field_7518 PLAYER_MODEL_FLAG + f D field_7500 chasingPosX + f I field_7504 xpCooldown + f I field_7494 xpSeed + f Lnet/minecraft/class_1661; field_7514 inventory + f I field_7487 sleepTimer + f I field_7520 experienceLevel + f Lnet/minecraft/class_1702; field_7493 foodStats + f Z field_7523 hasReducedDebug + f Lcom/mojang/authlib/GameProfile; field_7507 gameProfile + f Lnet/minecraft/class_2940; field_7488 MAIN_HAND + f D field_7521 chasingPosY + f D field_7524 prevChasingPosX + f Lnet/minecraft/class_1656; field_7503 abilities + f I field_7508 lastXPSound + f F field_7509 speedInAir + f Lnet/minecraft/class_1536; field_7513 fishingBobber + f I field_7489 flyToggleTimer + f Lnet/minecraft/class_1730; field_7486 enterChestInventory + f I field_7495 experienceTotal + f D field_7499 chasingPosZ + f Lnet/minecraft/class_1799; field_7525 itemStackMainHand + f Lnet/minecraft/class_2940; field_7496 LEFT_SHOULDER_ENTITY + f Lnet/minecraft/class_4048; field_18135 STANDING_SIZE + f D field_7502 prevChasingPosY + f F field_7505 prevCameraYaw + f Lnet/minecraft/class_1796; field_7484 cooldownTracker + f F field_7510 experience + f Lnet/minecraft/class_2940; field_7491 ABSORPTION + f Ljava/util/Map; field_18134 SIZE_BY_POSE + f Lnet/minecraft/class_2940; field_7506 RIGHT_SHOULDER_ENTITY + f D field_7522 prevChasingPosZ + f Lnet/minecraft/class_1723; field_7498 container + f J field_19428 timeEntitySatOnShoulder + f F field_7483 cameraYaw + f Z field_7490 eyesInWaterPlayer + f Lnet/minecraft/class_1703; field_7512 openContainer + f Lnet/minecraft/class_2940; field_7511 PLAYER_SCORE +c net/minecraft/class_1657$1 net/minecraft/entity/player/PlayerEntity$1 + f [I field_7533 field_221261_a +c net/minecraft/class_1657$class_1658 net/minecraft/entity/player/PlayerEntity$SleepResult + m ()[Lnet/minecraft/class_1657$class_1658; values values + m ()Lnet/minecraft/class_2561; method_19206 getMessage + m (Ljava/lang/String;)Lnet/minecraft/class_1657$class_1658; valueOf valueOf + f Lnet/minecraft/class_1657$class_1658; field_7529 NOT_POSSIBLE_NOW + f Lnet/minecraft/class_1657$class_1658; field_7530 TOO_FAR_AWAY + f Lnet/minecraft/class_1657$class_1658; field_18592 OBSTRUCTED + f Lnet/minecraft/class_1657$class_1658; field_7531 OTHER_PROBLEM + f [Lnet/minecraft/class_1657$class_1658; field_7526 $VALUES + f Lnet/minecraft/class_1657$class_1658; field_7532 NOT_SAFE + f Lnet/minecraft/class_2561; field_18593 message + f Lnet/minecraft/class_1657$class_1658; field_7528 NOT_POSSIBLE_HERE +c net/minecraft/class_1662 net/minecraft/item/crafting/RecipeItemHelper + m (Lnet/minecraft/class_1860;Lit/unimi/dsi/fastutil/ints/IntList;)I method_7407 getBiggestCraftableStack + m (Lnet/minecraft/class_1662;II)I method_17693 func_221262_a + m (I)Z method_7410 containsItem + m (Lnet/minecraft/class_1799;)I method_7408 pack + m (Lnet/minecraft/class_1860;ILit/unimi/dsi/fastutil/ints/IntList;)I method_7403 getBiggestCraftableStack + m (Lnet/minecraft/class_1662;I)Z method_17692 func_221265_a + m (Lnet/minecraft/class_1799;I)V method_20478 func_221264_a + m (I)Lnet/minecraft/class_1799; method_7405 unpack + m (II)I method_7411 tryTake + m (Lnet/minecraft/class_1860;Lit/unimi/dsi/fastutil/ints/IntList;)Z method_7402 canCraft + m (Lnet/minecraft/class_1662;II)V method_7412 func_221263_b + m (Lnet/minecraft/class_1860;Lit/unimi/dsi/fastutil/ints/IntList;I)Z method_7406 canCraft + m ()V method_7409 clear + m (Lnet/minecraft/class_1799;)V method_7400 accountStack + m (II)V method_7401 increment + m (Lnet/minecraft/class_1799;)V method_7404 accountPlainStack + f Lit/unimi/dsi/fastutil/ints/Int2IntMap; field_7550 itemToCount +c net/minecraft/class_1662$class_1663 net/minecraft/item/crafting/RecipeItemHelper$RecipePicker + m (ZII)Z method_7425 hasResidual + m ()I method_7415 getMinIngredientCount + m ()[I method_7422 getUniqueAvailIngredientItems + m (ZII)V method_7414 toggleResidual + m (I)I method_7419 getSatisfiedIndex + m (ZII)Z method_7418 hasConnection + m (ILit/unimi/dsi/fastutil/ints/IntList;)I method_7427 tryPickAll + m (ZI)I method_7424 getVisitedIndex + m (ZI)V method_7413 visit + m (ILit/unimi/dsi/fastutil/ints/IntList;)Z method_7417 tryPick + m (ZI)Z method_7426 hasVisited + m (ZII)I method_7420 getIndex + m (I)Z method_7423 dfs + m (I)Z method_7416 isSatisfied + m (I)V method_7421 setSatisfied + f I field_7553 possessedIngredientStackCount + f Lnet/minecraft/class_1662; field_7554 field_194104_a + f [I field_7551 possessedIngredientStacks + f I field_7556 ingredientCount + f Ljava/util/BitSet; field_7558 data + f Lnet/minecraft/class_1860; field_7555 recipe + f Lit/unimi/dsi/fastutil/ints/IntList; field_7557 path + f Ljava/util/List; field_7552 ingredients +c net/minecraft/class_1668 net/minecraft/entity/projectile/DamagingProjectileEntity + m ()Lnet/minecraft/class_2394; method_7467 getParticle + m ()F method_7466 getMotionFactor + m ()Z method_7468 isFireballFiery + f D field_7599 accelerationZ + f D field_7601 accelerationX + f D field_7600 accelerationY +c net/minecraft/class_1665 net/minecraft/entity/projectile/AbstractArrowEntity + m ()F method_7436 getWaterDrag + m (Z)V method_7439 setIsCritical + m ()Lnet/minecraft/class_3414; method_7440 getHitEntitySound + m ()B method_7447 getPierceLevel + m ()V method_7453 func_213870_w + m ()Lnet/minecraft/class_3414; method_20011 getHitGroundSound + m ()Lnet/minecraft/class_1799; method_7445 getArrowStack + m (B)V method_7451 setPierceLevel + m (Z)V method_7442 setShotFromCrossbow + m ()D method_7448 getDamage + m ()V method_7446 func_225516_i_ + m (Lnet/minecraft/class_1309;)V method_7450 arrowHit + m (Lnet/minecraft/class_3414;)V method_7444 setHitSound + m (IZ)V method_7455 setArrowFlag + m (Z)V method_7433 setNoClip + m ()V method_26352 func_234594_z_ + m (Lnet/minecraft/class_1309;F)V method_7435 setEnchantmentEffectsFromEntity + m ()Z method_7441 getNoClip + m ()Z method_26351 func_234593_u_ + m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;)Lnet/minecraft/class_3966; method_7434 rayTraceEntities + m ()Z method_7456 getShotFromCrossbow + m (I)V method_7449 setKnockbackStrength + m (D)V method_7438 setDamage + m ()Z method_7443 getIsCritical + f Ljava/util/List; field_7579 hitEntities + f Lnet/minecraft/class_2940; field_7589 PIERCE_LEVEL + f Lnet/minecraft/class_2940; field_7573 CRITICAL + f Lnet/minecraft/class_1665$class_1666; field_7572 pickupStatus + f Lnet/minecraft/class_3414; field_7584 hitSound + f I field_7575 knockbackStrength + f Lit/unimi/dsi/fastutil/ints/IntOpenHashSet; field_7590 piercedEntities + f D field_7571 damage + f I field_7578 ticksInGround + f Z field_7588 inGround + f I field_7576 timeInGround + f Lnet/minecraft/class_2680; field_7586 inBlockState + f I field_7574 arrowShake +c net/minecraft/class_1665$class_1666 net/minecraft/entity/projectile/AbstractArrowEntity$PickupStatus + m (Ljava/lang/String;)Lnet/minecraft/class_1665$class_1666; valueOf valueOf + m (I)Lnet/minecraft/class_1665$class_1666; method_7458 getByOrdinal + m ()[Lnet/minecraft/class_1665$class_1666; values values + f Lnet/minecraft/class_1665$class_1666; field_7592 DISALLOWED + f Lnet/minecraft/class_1665$class_1666; field_7593 ALLOWED + f Lnet/minecraft/class_1665$class_1666; field_7594 CREATIVE_ONLY + f [Lnet/minecraft/class_1665$class_1666; field_7591 $VALUES +c net/minecraft/class_1667 net/minecraft/entity/projectile/ArrowEntity + m (Lnet/minecraft/class_1799;)V method_7459 setPotionEffect + m (I)V method_7461 spawnPotionParticles + m ()V method_7462 refreshColor + m (I)V method_7465 setFixedColor + m (Lnet/minecraft/class_1799;)I method_7464 getCustomColor + m (Lnet/minecraft/class_1293;)V method_7463 addEffect + m ()I method_7460 getColor + f Lnet/minecraft/class_2940; field_7595 COLOR + f Z field_7596 fixedColor + f Lnet/minecraft/class_1842; field_7597 potion + f Ljava/util/Set; field_7598 customPotionEffects +c net/minecraft/class_1669 net/minecraft/entity/projectile/EvokerFangsEntity + m (Lnet/minecraft/class_1309;)V method_7473 setCaster + m (F)F method_7472 getAnimationProgress + m ()Lnet/minecraft/class_1309; method_7470 getCaster + m (Lnet/minecraft/class_1309;)V method_7471 damage + f Z field_7608 clientSideAttackStarted + f I field_7609 warmupDelayTicks + f Lnet/minecraft/class_1309; field_7605 caster + f Z field_7610 sentSpikeEvent + f Ljava/util/UUID; field_7606 casterUuid + f I field_7607 lifeTicks +c net/minecraft/class_1670 net/minecraft/entity/projectile/DragonFireballEntity +c net/minecraft/class_3855 net/minecraft/entity/projectile/AbstractFireballEntity + m ()Lnet/minecraft/class_1799; method_16938 getStack + m (Lnet/minecraft/class_1799;)V method_16937 func_213897_c + m (Lnet/minecraft/class_1799;)V method_16936 setStack + f Lnet/minecraft/class_2940; field_17081 STACK +c net/minecraft/class_1672 net/minecraft/entity/projectile/EyeOfEnderEntity + m ()Lnet/minecraft/class_1799; method_16935 func_213861_i + m (Lnet/minecraft/class_2338;)V method_7478 moveTowards + m (Lnet/minecraft/class_1799;)V method_16933 func_213863_b + m (Lnet/minecraft/class_1799;)V method_16934 func_213862_c + f D field_7618 targetY + f Z field_7621 shatterOrDrop + f D field_7617 targetZ + f I field_7620 despawnTimer + f Lnet/minecraft/class_2940; field_17080 field_213864_b + f D field_7619 targetX +c net/minecraft/class_1536 net/minecraft/entity/projectile/FishingBobberEntity + m ()V method_6951 setHookedEntity + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1536$class_4984; method_26342 func_234604_c_ + m (Lnet/minecraft/class_1536$class_4984;Lnet/minecraft/class_1536$class_4984;)Lnet/minecraft/class_1536$class_4984; method_26340 func_234601_a_ + m ()V method_6958 checkCollision + m (Lnet/minecraft/class_2338;)V method_6949 catchingFish + m ()Lnet/minecraft/class_1297; method_26957 func_234607_k_ + m (Lnet/minecraft/class_1799;)I method_6957 handleHookRetraction + m ()Z method_26088 func_234605_g_ + m ()V method_6954 bringInHookedEntity + m (Lnet/minecraft/class_2338;)Z method_26086 func_234603_b_ + m ()Lnet/minecraft/class_1657; method_6947 func_234606_i_ + m (Lnet/minecraft/class_1657;)Z method_6959 func_234600_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1536$class_4984; method_26341 func_234602_a_ + f I field_23233 field_234598_d_ + f I field_7173 ticksCatchable + f Ljava/util/Random; field_23231 field_234596_b_ + f Lnet/minecraft/class_2940; field_7170 DATA_HOOKED_ENTITY + f Lnet/minecraft/class_2940; field_23234 field_234599_f_ + f Lnet/minecraft/class_1297; field_7165 caughtEntity + f Z field_23134 field_234595_aq_ + f I field_7171 luck + f I field_7168 lureSpeed + f F field_7169 fishApproachAngle + f I field_7172 ticksCatchableDelay + f Lnet/minecraft/class_1536$class_1537; field_7175 currentState + f I field_7167 ticksInGround + f Z field_23232 field_234597_c_ + f I field_7174 ticksCaughtDelay +c net/minecraft/class_1536$1 net/minecraft/entity/projectile/FishingBobberEntity$1 + f [I field_23235 field_234608_a_ +c net/minecraft/class_1536$class_4984 net/minecraft/entity/projectile/FishingBobberEntity$WaterType + m (Ljava/lang/String;)Lnet/minecraft/class_1536$class_4984; valueOf valueOf + m ()[Lnet/minecraft/class_1536$class_4984; values values + f Lnet/minecraft/class_1536$class_4984; field_23238 INVALID + f Lnet/minecraft/class_1536$class_4984; field_23237 INSIDE_WATER + f [Lnet/minecraft/class_1536$class_4984; field_23239 $VALUES + f Lnet/minecraft/class_1536$class_4984; field_23236 ABOVE_WATER +c net/minecraft/class_1536$class_1537 net/minecraft/entity/projectile/FishingBobberEntity$State + m ()[Lnet/minecraft/class_1536$class_1537; values values + m (Ljava/lang/String;)Lnet/minecraft/class_1536$class_1537; valueOf valueOf + f [Lnet/minecraft/class_1536$class_1537; field_7181 $VALUES + f Lnet/minecraft/class_1536$class_1537; field_7180 FLYING + f Lnet/minecraft/class_1536$class_1537; field_7179 BOBBING + f Lnet/minecraft/class_1536$class_1537; field_7178 HOOKED_IN_ENTITY +c net/minecraft/class_1671 net/minecraft/entity/projectile/FireworkRocketEntity + m ()Z method_7477 func_213889_i + m ()V method_16830 func_213893_k + m ()Z method_7476 isAttachedToEntity + m ()Z method_20308 func_213894_l + m (I)V method_18072 func_213891_a + m ()V method_7475 dealExplosionDamage + f Lnet/minecraft/class_2940; field_7615 field_213895_d + f Lnet/minecraft/class_1309; field_7616 boostedEntity + f Lnet/minecraft/class_2940; field_7611 BOOSTED_ENTITY_ID + f I field_7613 fireworkAge + f I field_7612 lifetime + f Lnet/minecraft/class_2940; field_7614 FIREWORK_ITEM +c net/minecraft/class_1674 net/minecraft/entity/projectile/FireballEntity + f I field_7624 explosionPower +c net/minecraft/class_3856 net/minecraft/entity/IRendersAsItem + m ()Lnet/minecraft/class_1799; method_7495 getItem +c net/minecraft/class_1676 net/minecraft/entity/projectile/ProjectileEntity + m ()Lnet/minecraft/class_1297; method_24921 func_234616_v_ + m (Lnet/minecraft/class_1297;)Z method_26958 func_230298_a_ + m (Lnet/minecraft/class_1297;)V method_7432 setShooter + m (Lnet/minecraft/class_1297;)Z method_26959 func_234613_c_ + m ()V method_26962 func_234617_x_ + m (Lnet/minecraft/class_3965;)V method_24920 func_230299_a_ + m (Lnet/minecraft/class_1297;FFFFF)V method_24919 func_234612_a_ + m (DDDFF)V method_7485 shoot + m (Lnet/minecraft/class_3966;)V method_7454 onEntityHit + m (Lnet/minecraft/class_239;)V method_7488 onImpact + m (FF)F method_26960 func_234614_e_ + m ()Z method_26961 func_234615_h_ + f I field_23739 field_234610_c_ + f Ljava/util/UUID; field_22478 field_234609_b_ + f Z field_23740 field_234611_d_ +c net/minecraft/class_1673 net/minecraft/entity/projectile/LlamaSpitEntity +c net/minecraft/class_1678 net/minecraft/entity/projectile/ShulkerBulletEntity + m (Lnet/minecraft/class_2350$class_2351;)V method_7486 selectNextMoveDirection + m (Lnet/minecraft/class_2350;)V method_7487 setDirection + f D field_7635 targetDeltaX + f I field_7627 steps + f Lnet/minecraft/class_1297; field_7626 target + f Ljava/util/UUID; field_7632 targetUniqueId + f D field_7633 targetDeltaY + f D field_7625 targetDeltaZ + f Lnet/minecraft/class_2350; field_7628 direction +c net/minecraft/class_1675 net/minecraft/entity/projectile/ProjectileHelper + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;F)Lnet/minecraft/class_1665; method_18813 fireArrow + m (Lnet/minecraft/class_1297;Ljava/util/function/Predicate;)Lnet/minecraft/class_239; method_18074 func_234618_a_ + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_243;Lnet/minecraft/class_243;Lnet/minecraft/class_238;Ljava/util/function/Predicate;D)Lnet/minecraft/class_3966; method_18075 rayTraceEntities + m (Lnet/minecraft/class_1297;F)V method_7484 rotateTowardsMovement + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;Lnet/minecraft/class_243;Lnet/minecraft/class_243;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Lnet/minecraft/class_3966; method_18077 rayTraceEntities + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1792;)Lnet/minecraft/class_1268; method_18812 getHandWith +c net/minecraft/class_1680 net/minecraft/entity/projectile/SnowballEntity + m ()Lnet/minecraft/class_2394; method_16939 makeParticle +c net/minecraft/class_1677 net/minecraft/entity/projectile/SmallFireballEntity +c net/minecraft/class_3857 net/minecraft/entity/projectile/ProjectileItemEntity + m (Lnet/minecraft/class_1799;)V method_16940 setItem + m (Lnet/minecraft/class_1799;)V method_16941 func_213883_c + m ()Lnet/minecraft/class_1792; method_16942 getDefaultItem + m ()Lnet/minecraft/class_1799; method_16943 func_213882_k + f Lnet/minecraft/class_2940; field_17082 ITEMSTACK_DATA +c net/minecraft/class_1679 net/minecraft/entity/projectile/SpectralArrowEntity + f I field_7636 duration +c net/minecraft/class_1681 net/minecraft/entity/projectile/EggEntity +c net/minecraft/class_1682 net/minecraft/entity/projectile/ThrowableEntity + m ()F method_7490 getGravityVelocity +c net/minecraft/class_1683 net/minecraft/entity/item/ExperienceBottleEntity +c net/minecraft/class_1684 net/minecraft/entity/item/EnderPearlEntity +c net/minecraft/class_1685 net/minecraft/entity/projectile/TridentEntity + m ()Z method_7493 shouldReturnToThrower + m ()Z method_23751 func_226572_w_ + f Lnet/minecraft/class_2940; field_7647 LOYALTY_LEVEL + f I field_7649 returningTicks + f Lnet/minecraft/class_2940; field_21514 field_226571_aq_ + f Z field_7648 dealtDamage + f Lnet/minecraft/class_1799; field_7650 thrownStack +c net/minecraft/class_1686 net/minecraft/entity/projectile/PotionEntity + m ()Z method_7501 isLingering + m (Ljava/util/List;Lnet/minecraft/class_1297;)V method_7498 func_213888_a + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)V method_7499 extinguishFires + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1842;)V method_7497 makeAreaOfEffectCloud + m ()V method_7500 applyWater + f Ljava/util/function/Predicate; field_7653 WATER_SENSITIVE +c net/minecraft/class_1687 net/minecraft/entity/projectile/WitherSkullEntity + m (Z)V method_7502 setSkullInvulnerable + m ()Z method_7503 isSkullInvulnerable + f Lnet/minecraft/class_2940; field_7654 INVULNERABLE +c net/minecraft/class_3763 net/minecraft/entity/monster/AbstractRaiderEntity + m (Lnet/minecraft/class_3763;)Z method_19632 func_213646_e + m (Lnet/minecraft/class_3763;)Ljava/util/Random; method_20029 func_213643_a + m (I)V method_16477 setWave + m (Lnet/minecraft/class_3763;)Ljava/util/Random; method_20032 func_213645_d + m ()Lnet/minecraft/class_3414; method_20033 getRaidLossSound + m (I)V method_16835 setJoinDelay + m (Z)V method_20036 setCelebrating + m (Lnet/minecraft/class_3763;)Ljava/util/Random; method_20035 func_213649_g + m (Lnet/minecraft/class_1542;)Z method_16483 func_213647_b + m (Lnet/minecraft/class_3763;)Ljava/util/Random; method_19633 func_213648_f + m (Lnet/minecraft/class_3763;)F method_20030 func_213659_b + m (Lnet/minecraft/class_3763;)F method_20031 func_213662_c + m (Z)V method_16480 setCanJoinRaid + m ()Z method_16481 canJoinRaid + m ()Z method_20034 getCelebrating + m (Lnet/minecraft/class_3765;)V method_16476 setRaid + m (IZ)V method_16484 applyWaveBonus + m ()Z method_16482 isRaidActive + m ()Ljava/util/function/Predicate; method_16479 func_213650_ep + m ()Lnet/minecraft/class_3765; method_16478 getRaid + m ()I method_16836 getJoinDelay + m ()I method_16486 getWave + f Lnet/minecraft/class_3765; field_16599 raid + f Z field_16602 canJoinRaid + f I field_16997 joinDelay + f I field_16601 wave + f Lnet/minecraft/class_2940; field_19032 CELEBRATING + f Ljava/util/function/Predicate; field_16600 bannerPredicate +c net/minecraft/class_3763$class_4261 net/minecraft/entity/monster/AbstractRaiderEntity$InvadeHomeGoal + m (Lnet/minecraft/class_4158;)Z method_20037 func_220859_a + m (Lnet/minecraft/class_2338;)Z method_20038 isValidDoorPosition + m ()V method_20041 clearLastCachedPoint + m ()Z method_20040 findValidHome + m ()Z method_20039 isActive + f Ljava/util/List; field_19038 cachedPointOfIntresste + f Lnet/minecraft/class_3763; field_19035 raiderEntity + f Z field_19040 idling + f I field_19039 distance + f Lnet/minecraft/class_2338; field_19037 blockPosPOI + f D field_19036 speed +c net/minecraft/class_3763$class_4260 net/minecraft/entity/monster/AbstractRaiderEntity$CelebrateRaidLossGoal + f Lnet/minecraft/class_3763; field_19034 raiderEntity + f Lnet/minecraft/class_3763; field_19033 field_220857_a +c net/minecraft/class_3763$class_3764 net/minecraft/entity/monster/AbstractRaiderEntity$PromoteLeaderGoal + f Lnet/minecraft/class_3763; field_16604 field_220855_a + f Lnet/minecraft/class_3763; field_16603 raiderEntity +c net/minecraft/class_3763$class_4223 net/minecraft/entity/monster/AbstractRaiderEntity$FindTargetGoal + f Lnet/minecraft/class_3763; field_18883 raiderEntity + f F field_18884 findTargetRange + f Lnet/minecraft/class_4051; field_18881 findTargetPredicate + f Lnet/minecraft/class_3763; field_18882 field_220852_b +c net/minecraft/class_3765 net/minecraft/world/raid/Raid + m ()Z method_20020 isBetweenWaves + m (Lnet/minecraft/class_1657;)V method_16518 increaseLevel + m ()V method_16499 updateBossInfoVisibility + m (Lnet/minecraft/class_2338;)V method_20509 setCenter + m (Lnet/minecraft/class_3763;Z)V method_16510 leaveRaid + m (Lnet/minecraft/class_2338;)V method_16521 playWaveStartSound + m (Lnet/minecraft/class_3765$class_3766;IZ)I method_20018 getDefaultNumSpawns + m (Lnet/minecraft/class_3765$class_3766;Ljava/util/Random;ILnet/minecraft/class_1266;Z)I method_20019 getPotentialBonusSpawns + m (Ljava/lang/Integer;)Ljava/util/Set; method_16508 func_221323_a + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_16502 write + m ()Z method_16519 shouldSpawnGroup + m ()I method_16494 getId + m ()F method_20025 getEnchantOdds + m ()Z method_20015 shouldSpawnBonusGroup + m ()I method_16517 getRaiderCount + m ()V method_16506 stop + m ()Z method_20012 isFinalWave + m ()Z method_16524 isStarted + m (Lnet/minecraft/class_2338;)D method_20510 func_223025_d + m ()I method_16514 getMaxLevel + m (ILnet/minecraft/class_3763;)V method_16491 setLeader + m (II)Lnet/minecraft/class_2338; method_16525 findRandomSpawnPos + m ()Z method_20022 isStopped + m ()Z method_20024 isLoss + m (ILnet/minecraft/class_3763;Lnet/minecraft/class_2338;Z)V method_16516 joinRaid + m (I)Ljava/util/Optional; method_20267 getValidSpawnPos + m ()Z method_16832 isOver + m ()Z method_20021 func_221297_c + m ()V method_20511 moveRaidCenterToNearbyVillageSection + m (Lnet/minecraft/class_2338;)V method_16522 spawnNextWave + m (Lnet/minecraft/class_1297;)V method_20017 addHero + m ()Z method_16504 isActive + m ()V method_16520 markDirty + m (I)V method_16500 removeLeader + m ()V method_16834 updateRaiders + m ()Lnet/minecraft/class_1799; method_16515 createIllagerBanner + m ()V method_16523 updateBarPercentage + m ()Z method_20014 hasSpawnedBonusWave + m ()Z method_16833 hasMoreWaves + m ()V method_16509 tick + m ()Z method_20013 hasBonusWave + m ()Lnet/minecraft/class_2338; method_16495 getCenter + m (ILnet/minecraft/class_3763;Z)Z method_16487 joinRaid + m (ILnet/minecraft/class_3763;)Z method_16505 joinRaid + m ()F method_16513 getCurrentHealth + m ()Ljava/util/function/Predicate; method_16501 getParticipantsPredicate + m ()Lnet/minecraft/class_1937; method_16831 getWorld + m ()I method_16493 getBadOmenLevel + m (Lnet/minecraft/class_1267;)I method_20016 getWaves + m (Lnet/minecraft/class_3222;)Z method_19208 func_221302_a + m ()Z method_20023 isVictory + m ()I method_16490 getGroupsSpawned + m (I)Lnet/minecraft/class_3763; method_16496 getLeader + f I field_16625 id + f Lnet/minecraft/class_3218; field_16619 world + f J field_16605 ticksActive + f Ljava/util/Map; field_16615 leaders + f Lnet/minecraft/class_3765$class_4259; field_19023 status + f Lnet/minecraft/class_2561; field_19019 RAID_VICTORY + f I field_19024 celebrationTicks + f Lnet/minecraft/class_2561; field_19017 VICTORY + f Lnet/minecraft/class_3213; field_16607 bossInfo + f I field_16616 postRaidTicks + f I field_16621 groupsSpawned + f I field_16623 badOmenLevel + f F field_16620 totalHealth + f Ljava/util/Set; field_19021 heroes + f Ljava/util/Map; field_16618 raiders + f Lnet/minecraft/class_2338; field_16613 center + f Lnet/minecraft/class_2561; field_19020 RAID_DEFEAT + f Lnet/minecraft/class_2561; field_19018 DEFEAT + f I field_19022 numGroups + f Z field_16606 active + f Lnet/minecraft/class_2561; field_19016 RAID + f I field_16614 preRaidTicks + f Ljava/util/Random; field_16608 random + f Z field_16611 started + f Ljava/util/Optional; field_19172 waveSpawnPos +c net/minecraft/class_3765$class_4259 net/minecraft/world/raid/Raid$Status + m (Ljava/lang/String;)Lnet/minecraft/class_3765$class_4259; method_20027 func_221276_a + m ()[Lnet/minecraft/class_3765$class_4259; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3765$class_4259; method_20028 getByName + m ()Ljava/lang/String; method_20026 getName + m (Ljava/lang/String;)Lnet/minecraft/class_3765$class_4259; valueOf valueOf + f Lnet/minecraft/class_3765$class_4259; field_19028 LOSS + f Lnet/minecraft/class_3765$class_4259; field_19027 VICTORY + f [Lnet/minecraft/class_3765$class_4259; field_19030 VALUES + f Lnet/minecraft/class_3765$class_4259; field_19029 STOPPED + f [Lnet/minecraft/class_3765$class_4259; field_19031 $VALUES + f Lnet/minecraft/class_3765$class_4259; field_19026 ONGOING +c net/minecraft/class_3765$class_3766 net/minecraft/world/raid/Raid$WaveMember + m (Ljava/lang/String;)Lnet/minecraft/class_3765$class_3766; valueOf valueOf + m (Lnet/minecraft/class_3765$class_3766;)[I method_16527 func_221282_b + m (Lnet/minecraft/class_3765$class_3766;)Lnet/minecraft/class_1299; method_16526 func_221281_a + m ()[Lnet/minecraft/class_3765$class_3766; method_16529 func_221283_a + m ()[Lnet/minecraft/class_3765$class_3766; values values + f Lnet/minecraft/class_3765$class_3766; field_16631 VINDICATOR + f Lnet/minecraft/class_3765$class_3766; field_16633 PILLAGER + f Lnet/minecraft/class_3765$class_3766; field_16634 EVOKER + f Lnet/minecraft/class_3765$class_3766; field_16635 WITCH + f [Lnet/minecraft/class_3765$class_3766; field_16632 $VALUES + f Lnet/minecraft/class_1299; field_16629 type + f Lnet/minecraft/class_3765$class_3766; field_16630 RAVAGER + f [Lnet/minecraft/class_3765$class_3766; field_16636 VALUES + f [I field_16628 waveCounts +c net/minecraft/class_3765$1 net/minecraft/world/raid/Raid$1 + f [I field_19025 field_221279_a + f [I field_16626 field_221280_b +c net/minecraft/class_3767 net/minecraft/world/raid/RaidManager + m (Lnet/minecraft/class_2874;)Ljava/lang/String; method_16533 func_234620_a_ + m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_3765; method_16540 badOmenTick + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3765; method_16532 findOrCreateRaid + m ()V method_16539 tick + m ()I method_16534 incrementNextId + m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_3765; method_19209 findRaid + m (Lnet/minecraft/class_3763;Lnet/minecraft/class_3765;)Z method_16838 canJoinRaid + m (I)Lnet/minecraft/class_3765; method_16541 get + f Lnet/minecraft/class_3218; field_16641 world + f I field_16637 tick + f I field_16638 nextAvailableId + f Ljava/util/Map; field_16639 byId +c net/minecraft/class_4168 net/minecraft/entity/ai/brain/schedule/Activity + m ()I hashCode hashCode + m ()Ljava/lang/String; method_19634 getKey + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/String; toString toString + m (Ljava/lang/String;)Lnet/minecraft/class_4168; method_19210 register + f Lnet/minecraft/class_4168; field_18597 REST + f Lnet/minecraft/class_4168; field_18598 MEET + f I field_23827 hash + f Lnet/minecraft/class_4168; field_18599 PANIC + f Lnet/minecraft/class_4168; field_18595 IDLE + f Lnet/minecraft/class_4168; field_22398 ADMIRE_ITEM + f Lnet/minecraft/class_4168; field_18596 WORK + f Lnet/minecraft/class_4168; field_22399 AVOID + f Ljava/lang/String; field_18600 id + f Lnet/minecraft/class_4168; field_18885 PLAY + f Lnet/minecraft/class_4168; field_22400 RIDE + f Lnet/minecraft/class_4168; field_19043 HIDE + f Lnet/minecraft/class_4168; field_22396 FIGHT + f Lnet/minecraft/class_4168; field_18594 CORE + f Lnet/minecraft/class_4168; field_22397 CELEBRATE + f Lnet/minecraft/class_4168; field_19041 RAID + f Lnet/minecraft/class_4168; field_19042 PRE_RAID +c net/minecraft/class_4170 net/minecraft/entity/ai/brain/schedule/Schedule + m (ILjava/util/Map$Entry;)D method_19214 func_221376_a + m (Lnet/minecraft/class_4168;Ljava/util/Map$Entry;)Z method_19216 func_221378_a + m (Lnet/minecraft/class_4168;)Lnet/minecraft/class_4173; method_19218 getDutiesFor + m (Lnet/minecraft/class_4168;)V method_19215 createDutiesFor + m (Ljava/lang/String;)Lnet/minecraft/class_4171; method_19217 register + m (I)Lnet/minecraft/class_4168; method_19213 getScheduledActivity + m (Lnet/minecraft/class_4168;)Ljava/util/List; method_19219 getAllDutiesExcept + f Lnet/minecraft/class_4170; field_18603 EMPTY + f Lnet/minecraft/class_4170; field_18604 SIMPLE + f Lnet/minecraft/class_4170; field_18605 VILLAGER_BABY + f Lnet/minecraft/class_4170; field_18606 VILLAGER_DEFAULT + f Ljava/util/Map; field_18607 activityToDutiesMap +c net/minecraft/class_4169 net/minecraft/entity/ai/brain/schedule/DutyTime + m ()F method_19212 getActive + m ()I method_19211 getDuration + f F field_18602 active + f I field_18601 duration +c net/minecraft/class_4173 net/minecraft/entity/ai/brain/schedule/ScheduleDuties + m (I)F method_19226 updateActiveDutyTime + m (Lit/unimi/dsi/fastutil/ints/Int2ObjectSortedMap;Lnet/minecraft/class_4169;)V method_19228 func_221393_a + m ()V method_19229 sortDutyTimes + m (IF)Lnet/minecraft/class_4173; method_19227 addDutyTime + f I field_18613 index + f Ljava/util/List; field_18612 dutyTimes +c net/minecraft/class_4171 net/minecraft/entity/ai/brain/schedule/ScheduleBuilder + m (Lnet/minecraft/class_4171$class_4172;)V method_19222 func_221405_a + m ()Lnet/minecraft/class_4170; method_19220 build + m (Lnet/minecraft/class_4171$class_4172;Lnet/minecraft/class_4173;)V method_19223 func_221403_a + m (ILnet/minecraft/class_4168;)Lnet/minecraft/class_4171; method_19221 add + f Ljava/util/List; field_18609 entries + f Lnet/minecraft/class_4170; field_18608 schedule +c net/minecraft/class_4171$class_4172 net/minecraft/entity/ai/brain/schedule/ScheduleBuilder$ActivityEntry + m ()Lnet/minecraft/class_4168; method_19225 getActivity + m ()I method_19224 getDuration + f I field_18610 duration + f Lnet/minecraft/class_4168; field_18611 activity +c net/minecraft/class_1688 net/minecraft/entity/item/minecart/AbstractMinecartEntity + m (I)V method_7524 setRollingDirection + m (Lnet/minecraft/class_1937;DDDLnet/minecraft/class_1688$class_1689;)Lnet/minecraft/class_1688; method_7523 create + m (F)V method_7520 setDamage + m (Lnet/minecraft/class_2338;)Z method_18803 isNormalCube + m ()I method_7526 getDefaultDisplayTileOffset + m ()Lnet/minecraft/class_2680; method_7517 getDefaultDisplayTile + m (I)V method_7515 setDisplayTileOffset + m ()V method_7512 moveDerailedMinecart + m ()I method_7522 getRollingDirection + m (Lnet/minecraft/class_1282;)V method_7516 killMinecart + m ()D method_7504 getMaximumSpeed + m (Lnet/minecraft/class_2768;)Lcom/mojang/datafixers/util/Pair; method_22864 getMovementMatrixForShape + m ()Z method_7510 hasDisplayTile + m (DDDD)Lnet/minecraft/class_243; method_7505 getPosOffset + m (IIIZ)V method_7506 onActivatorRailPass + m ()Lnet/minecraft/class_1688$class_1689; method_7518 getMinecartType + m (I)V method_7509 setRollingAmplitude + m (DDD)Lnet/minecraft/class_243; method_7508 getPos + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_30340 func_242377_b + m (Z)V method_7511 setHasDisplayTile + m ()I method_7514 getDisplayTileOffset + m (Lnet/minecraft/class_2338$class_2339;)Lnet/minecraft/class_265; method_30339 func_242376_a + m ()V method_7525 applyDrag + m ()I method_7507 getRollingAmplitude + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_7513 moveAlongTrack + m ()Lnet/minecraft/class_2680; method_7519 getDisplayTile + m (Lnet/minecraft/class_2680;)V method_7527 setDisplayTile + m (Ljava/util/EnumMap;)V method_22865 func_226574_a_ + m ()F method_7521 getDamage + f D field_7662 minecartZ + f D field_7665 minecartX + f Lcom/google/common/collect/ImmutableMap; field_24464 field_234627_am_ + f Lnet/minecraft/class_2940; field_7661 DISPLAY_TILE_OFFSET + f Lnet/minecraft/class_2940; field_7667 DAMAGE + f Lnet/minecraft/class_2940; field_7663 ROLLING_AMPLITUDE + f D field_7655 velocityY + f D field_7657 minecartPitch + f I field_7669 turnProgress + f D field_7666 minecartY + f Ljava/util/Map; field_7664 MATRIX + f Lnet/minecraft/class_2940; field_7670 SHOW_BLOCK + f Lnet/minecraft/class_2940; field_7671 DISPLAY_TILE + f Lnet/minecraft/class_2940; field_7668 ROLLING_DIRECTION + f D field_7656 velocityZ + f D field_7658 velocityX + f Z field_7660 isInReverse + f D field_7659 minecartYaw +c net/minecraft/class_1688$1 net/minecraft/entity/item/minecart/AbstractMinecartEntity$1 + f [I field_7682 field_208060_b +c net/minecraft/class_1688$class_1689 net/minecraft/entity/item/minecart/AbstractMinecartEntity$Type + m (Ljava/lang/String;)Lnet/minecraft/class_1688$class_1689; valueOf valueOf + m ()[Lnet/minecraft/class_1688$class_1689; values values + f [Lnet/minecraft/class_1688$class_1689; field_7673 $VALUES + f Lnet/minecraft/class_1688$class_1689; field_7677 HOPPER + f Lnet/minecraft/class_1688$class_1689; field_7674 RIDEABLE + f Lnet/minecraft/class_1688$class_1689; field_7681 COMMAND_BLOCK + f Lnet/minecraft/class_1688$class_1689; field_7680 SPAWNER + f Lnet/minecraft/class_1688$class_1689; field_7675 TNT + f Lnet/minecraft/class_1688$class_1689; field_7678 CHEST + f Lnet/minecraft/class_1688$class_1689; field_7679 FURNACE +c net/minecraft/class_1690 net/minecraft/entity/item/BoatEntity + m (F)V method_7542 setDamageTaken + m ()V method_7550 updateRocking + m ()I method_7543 getForwardDirection + m ()Lnet/minecraft/class_1690$class_1692; method_7536 getBoatType + m ()F method_7554 getDamageTaken + m (Lnet/minecraft/class_1297;)V method_7546 applyYawToEntity + m ()Lnet/minecraft/class_1690$class_1691; method_7532 getUnderwaterStatus + m ()Lnet/minecraft/class_1690$class_1691; method_7552 getBoatStatus + m (IF)F method_7551 getRowingTime + m (I)V method_7531 setRockingTicks + m (ZZZZ)V method_7535 updateInputs + m (Lnet/minecraft/class_1690$class_1692;)V method_7541 setBoatType + m (I)V method_7553 setTimeSinceHit + m ()Lnet/minecraft/class_3414; method_7537 getPaddleSound + m (F)F method_7547 getRockingAngle + m ()I method_7533 getTimeSinceHit + m ()Lnet/minecraft/class_1792; method_7557 getItemBoat + m ()F method_7548 getBoatGlide + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Z method_30959 func_242378_a + m ()V method_7549 controlBoat + m ()F method_7544 getWaterLevelAbove + m ()I method_7539 getRockingTicks + m ()Z method_7545 checkInWater + m (ZZ)V method_7538 setPaddleState + m (I)V method_7540 setForwardDirection + m ()V method_7534 updateMotion + m ()V method_7555 tickLerp + m (I)Z method_7556 getPaddleState + f Z field_7709 forwardInputDown + f D field_7696 lastYd + f Z field_7710 leftInputDown + f D field_7697 waterLevel + f Z field_7703 downwards + f Lnet/minecraft/class_2940; field_7707 FORWARD_DIRECTION + f D field_7684 lerpPitch + f F field_7711 prevRockingAngle + f Lnet/minecraft/class_2940; field_7698 BOAT_TYPE + f D field_7685 lerpZ + f Lnet/minecraft/class_2940; field_7691 ROCKING_TICKS + f F field_7712 rockingIntensity + f Lnet/minecraft/class_1690$class_1691; field_7702 status + f Lnet/minecraft/class_2940; field_7713 RIGHT_PADDLE + f D field_7686 lerpX + f F field_7690 deltaRotation + f F field_7692 momentum + f Z field_7693 backInputDown + f Z field_7695 rightInputDown + f F field_7714 boatGlide + f Z field_7689 rocking + f Lnet/minecraft/class_2940; field_7688 TIME_SINCE_HIT + f Lnet/minecraft/class_2940; field_7705 DAMAGE_TAKEN + f D field_7699 lerpYaw + f F field_7694 rockingAngle + f Lnet/minecraft/class_2940; field_7687 LEFT_PADDLE + f Lnet/minecraft/class_1690$class_1691; field_7701 previousStatus + f I field_7708 lerpSteps + f D field_7700 lerpY + f [F field_7704 paddlePositions + f F field_7706 outOfControlTicks +c net/minecraft/class_1690$1 net/minecraft/entity/item/BoatEntity$1 + f [I field_7721 field_193348_b + f [I field_7722 field_184978_a +c net/minecraft/class_1690$class_1692 net/minecraft/entity/item/BoatEntity$Type + m ()Lnet/minecraft/class_2248; method_7560 asPlank + m (Ljava/lang/String;)Lnet/minecraft/class_1690$class_1692; valueOf valueOf + m (I)Lnet/minecraft/class_1690$class_1692; method_7558 byId + m (Ljava/lang/String;)Lnet/minecraft/class_1690$class_1692; method_7561 getTypeFromString + m ()[Lnet/minecraft/class_1690$class_1692; values values + m ()Ljava/lang/String; method_7559 getName + m ()Ljava/lang/String; toString toString + f Ljava/lang/String; field_7726 name + f Lnet/minecraft/class_1690$class_1692; field_7727 OAK + f Lnet/minecraft/class_2248; field_7731 block + f Lnet/minecraft/class_1690$class_1692; field_7725 ACACIA + f Lnet/minecraft/class_1690$class_1692; field_7723 DARK_OAK + f Lnet/minecraft/class_1690$class_1692; field_7728 SPRUCE + f Lnet/minecraft/class_1690$class_1692; field_7729 BIRCH + f [Lnet/minecraft/class_1690$class_1692; field_7724 $VALUES + f Lnet/minecraft/class_1690$class_1692; field_7730 JUNGLE +c net/minecraft/class_1690$class_1691 net/minecraft/entity/item/BoatEntity$Status + m ()[Lnet/minecraft/class_1690$class_1691; values values + m (Ljava/lang/String;)Lnet/minecraft/class_1690$class_1691; valueOf valueOf + f Lnet/minecraft/class_1690$class_1691; field_7717 UNDER_WATER + f Lnet/minecraft/class_1690$class_1691; field_7716 UNDER_FLOWING_WATER + f Lnet/minecraft/class_1690$class_1691; field_7719 ON_LAND + f Lnet/minecraft/class_1690$class_1691; field_7720 IN_AIR + f Lnet/minecraft/class_1690$class_1691; field_7718 IN_WATER + f [Lnet/minecraft/class_1690$class_1691; field_7715 $VALUES +c net/minecraft/class_1693 net/minecraft/entity/item/minecart/ContainerMinecartEntity + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1703; method_17357 createContainer + m (Lnet/minecraft/class_2960;J)V method_7562 setLootTable + m (Lnet/minecraft/class_1657;)V method_7563 addLoot + f J field_7732 lootTableSeed + f Z field_7733 dropContentsWhenDead + f Lnet/minecraft/class_2960; field_7734 lootTable + f Lnet/minecraft/class_2371; field_7735 minecartContainerItems +c net/minecraft/class_1695 net/minecraft/entity/item/minecart/MinecartEntity +c net/minecraft/client/ClientBrandRetriever net/minecraft/client/ClientBrandRetriever + m ()Ljava/lang/String; getClientModName getClientModName +c net/minecraft/class_5275 net/minecraft/util/TransportationHelper + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_243; method_30769 func_242379_a + m (Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_30770 func_242382_a + m (Lnet/minecraft/class_1941;DDDLnet/minecraft/class_1309;Lnet/minecraft/class_4050;)Lnet/minecraft/class_243; method_30342 func_242381_a + m (Lnet/minecraft/class_1941;Lnet/minecraft/class_1309;Lnet/minecraft/class_238;)Z method_27933 func_234631_a_ + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_30341 func_242380_a + m (D)Z method_27932 func_234630_a_ + m (Lnet/minecraft/class_2350;)[[I method_27934 func_234632_a_ + m (Lnet/minecraft/class_2338;ILjava/util/function/Function;)D method_30343 func_242383_a +c net/minecraft/class_1697 net/minecraft/entity/item/minecart/CommandBlockMinecartEntity + m ()Lnet/minecraft/class_2940; method_7566 access$100 + m ()Lnet/minecraft/class_2940; method_7568 access$000 + m ()Lnet/minecraft/class_1918; method_7567 getCommandBlockLogic + f Lnet/minecraft/class_1918; field_7744 commandBlockLogic + f Lnet/minecraft/class_2940; field_7743 COMMAND + f Lnet/minecraft/class_2940; field_7741 LAST_OUTPUT + f I field_7742 activatorRailCooldown +c net/minecraft/class_1697$class_1698 net/minecraft/entity/item/minecart/CommandBlockMinecartEntity$MinecartCommandLogic + m ()Lnet/minecraft/class_1697; method_7569 getMinecart + f Lnet/minecraft/class_1697; field_7745 field_210168_a +c net/minecraft/class_1694 net/minecraft/entity/item/minecart/ChestMinecartEntity +c net/minecraft/class_1700 net/minecraft/entity/item/minecart/HopperMinecartEntity + m (I)V method_7571 setTransferTicker + m ()Z method_7573 canTransfer + m ()Z method_7574 captureDroppedItems + m (Z)V method_7570 setBlocked + m ()Z method_7572 getBlocked + f Z field_7749 isBlocked + f I field_7748 transferTicker + f Lnet/minecraft/class_2338; field_7750 lastPosition +c net/minecraft/class_1696 net/minecraft/entity/item/minecart/FurnaceMinecartEntity + m (Z)V method_7564 setMinecartPowered + m ()Z method_7565 isMinecartPowered + f I field_7739 fuel + f Lnet/minecraft/class_2940; field_7740 POWERED + f D field_7737 pushX + f Lnet/minecraft/class_1856; field_7738 BURNABLE_FUELS + f D field_7736 pushZ +c net/minecraft/class_1701 net/minecraft/entity/item/minecart/TNTMinecartEntity + m ()Z method_7578 isIgnited + m ()I method_7577 getFuseTicks + m (D)V method_7576 explodeCart + m ()V method_7575 ignite + f I field_7751 minecartTNTFuse +c net/minecraft/class_1699 net/minecraft/entity/item/minecart/SpawnerMinecartEntity + f Lnet/minecraft/class_1917; field_7746 mobSpawnerLogic +c net/minecraft/class_1699$1 net/minecraft/entity/item/minecart/SpawnerMinecartEntity$1 + f Lnet/minecraft/class_1699; field_7747 field_184995_a +c net/minecraft/class_4174 net/minecraft/item/Food + m ()Ljava/util/List; method_19235 getEffects + m ()F method_19231 getSaturation + m ()I method_19230 getHealing + m ()Z method_19234 isFastEating + m ()Z method_19233 canEatWhenFull + m ()Z method_19232 isMeat + f Z field_18618 fastToEat + f Z field_18617 canEatWhenFull + f Z field_18616 meat + f Ljava/util/List; field_18619 effects + f F field_18615 saturation + f I field_18614 value +c net/minecraft/class_4174$1 net/minecraft/item/Food$1 +c net/minecraft/class_4174$class_4175 net/minecraft/item/Food$Builder + m ()Lnet/minecraft/class_4174$class_4175; method_19240 setAlwaysEdible + m (I)Lnet/minecraft/class_4174$class_4175; method_19238 hunger + m ()Lnet/minecraft/class_4174$class_4175; method_19241 fastToEat + m ()Lnet/minecraft/class_4174$class_4175; method_19236 meat + m (Lnet/minecraft/class_1293;F)Lnet/minecraft/class_4174$class_4175; method_19239 effect + m (F)Lnet/minecraft/class_4174$class_4175; method_19237 saturation + m ()Lnet/minecraft/class_4174; method_19242 build + f Z field_18624 fastToEat + f F field_18621 saturation + f I field_18620 value + f Ljava/util/List; field_18625 effects + f Z field_18622 meat + f Z field_18623 alwaysEdible +c net/minecraft/class_1702 net/minecraft/util/FoodStats + m (Lnet/minecraft/class_2487;)V method_7582 write + m (F)V method_7583 addExhaustion + m (F)V method_7581 setFoodSaturationLevel + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1799;)V method_7579 consume + m ()Z method_7587 needFood + m (Lnet/minecraft/class_2487;)V method_7584 read + m ()F method_7589 getSaturationLevel + m (Lnet/minecraft/class_1657;)V method_7588 tick + m (IF)V method_7585 addStats + m (I)V method_7580 setFoodLevel + m ()I method_7586 getFoodLevel + f F field_7752 foodExhaustionLevel + f F field_7753 foodSaturationLevel + f I field_7756 foodLevel + f I field_7755 foodTimer + f I field_7754 prevFoodLevel +c net/minecraft/class_4176 net/minecraft/item/Foods + m (I)Lnet/minecraft/class_4174; method_19243 buildStew + f Lnet/minecraft/class_4174; field_18639 BAKED_POTATO + f Lnet/minecraft/class_4174; field_20381 HONEY + f Lnet/minecraft/class_4174; field_18660 MELON_SLICE + f Lnet/minecraft/class_4174; field_18637 TROPICAL_FISH + f Lnet/minecraft/class_4174; field_18640 BEEF + f Lnet/minecraft/class_4174; field_18641 BEETROOT + f Lnet/minecraft/class_4174; field_18661 MUSHROOM_STEW + f Lnet/minecraft/class_4174; field_18634 SPIDER_EYE + f Lnet/minecraft/class_4174; field_18658 GOLDEN_APPLE + f Lnet/minecraft/class_4174; field_18659 GOLDEN_CARROT + f Lnet/minecraft/class_4174; field_18635 SUSPICIOUS_STEW + f Lnet/minecraft/class_4174; field_18636 SWEET_BERRIES + f Lnet/minecraft/class_4174; field_18638 APPLE + f Lnet/minecraft/class_4174; field_18655 COOKIE + f Lnet/minecraft/class_4174; field_18631 RABBIT_STEW + f Lnet/minecraft/class_4174; field_18632 ROTTEN_FLESH + f Lnet/minecraft/class_4174; field_18656 DRIED_KELP + f Lnet/minecraft/class_4174; field_18657 ENCHANTED_GOLDEN_APPLE + f Lnet/minecraft/class_4174; field_18633 SALMON + f Lnet/minecraft/class_4174; field_18652 COOKED_PORKCHOP + f Lnet/minecraft/class_4174; field_18653 COOKED_RABBIT + f Lnet/minecraft/class_4174; field_18629 PUMPKIN_PIE + f Lnet/minecraft/class_4174; field_18630 RABBIT + f Lnet/minecraft/class_4174; field_18654 COOKED_SALMON + f Lnet/minecraft/class_4174; field_18626 PORKCHOP + f Lnet/minecraft/class_4174; field_18650 COOKED_COD + f Lnet/minecraft/class_4174; field_18651 COOKED_MUTTON + f Lnet/minecraft/class_4174; field_18627 POTATO + f Lnet/minecraft/class_4174; field_18628 PUFFERFISH + f Lnet/minecraft/class_4174; field_18647 COD + f Lnet/minecraft/class_4174; field_18648 COOKED_BEEF + f Lnet/minecraft/class_4174; field_18649 COOKED_CHICKEN + f Lnet/minecraft/class_4174; field_18663 POISONOUS_POTATO + f Lnet/minecraft/class_4174; field_18644 CARROT + f Lnet/minecraft/class_4174; field_18645 CHICKEN + f Lnet/minecraft/class_4174; field_18646 CHORUS_FRUIT + f Lnet/minecraft/class_4174; field_18662 MUTTON + f Lnet/minecraft/class_4174; field_18642 BEETROOT_SOUP + f Lnet/minecraft/class_4174; field_18643 BREAD +c net/minecraft/class_1703 net/minecraft/inventory/container/Container + m (I)I method_7620 extractDragMode + m (Lnet/minecraft/class_1661;)S method_7614 getNextTransactionID + m ()Lnet/minecraft/class_2371; method_7602 getInventory + m (Lnet/minecraft/class_3915;)Lnet/minecraft/class_3915; method_17362 trackInt + m ()V method_7605 resetDrag + m (Lnet/minecraft/class_1712;)V method_7603 removeListener + m (Lnet/minecraft/class_1735;)Lnet/minecraft/class_1735; method_7621 addSlot + m (Lnet/minecraft/class_1735;Lnet/minecraft/class_1799;Z)Z method_7592 canAddItemToSlot + m (Lnet/minecraft/class_3913;)V method_17360 trackIntArray + m (Lnet/minecraft/class_1735;)Z method_7615 canDragIntoSlot + m (I)Lnet/minecraft/class_1735; method_7611 getSlot + m (Lnet/minecraft/class_1657;I)Lnet/minecraft/class_1799; method_7601 transferStackInSlot + m ()Ljava/lang/String; method_30011 func_241442_f_ + m (Lnet/minecraft/class_1657;)V method_7595 onContainerClosed + m (Lnet/minecraft/class_1263;)V method_7609 onCraftMatrixChanged + m (Lnet/minecraft/class_1263;I)V method_17359 assertInventorySize + m ()Lnet/minecraft/class_3917; method_17358 getType + m (Lnet/minecraft/class_1799;IIZ)Z method_7616 mergeItemStack + m (II)V method_7606 updateProgressBar + m (Lnet/minecraft/class_3913;I)V method_17361 assertIntArraySize + m (IILnet/minecraft/class_1713;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_30010 func_241440_b_ + m (ILnet/minecraft/class_1657;)Z method_7600 isValidDragMode + m (Ljava/util/Set;ILnet/minecraft/class_1799;I)V method_7617 computeStackSize + m (Lnet/minecraft/class_1657;Z)V method_7590 setCanCraft + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7612 areItemsAndTagsEqual + m (Lnet/minecraft/class_1263;)I method_7618 calcRedstoneFromInventory + m (ILnet/minecraft/class_1799;)V method_7619 putStackInSlot + m (Lnet/minecraft/class_1657;)Z method_7622 getCanCraft + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_1263;)V method_7607 clearContainer + m ()V method_7623 detectAndSendChanges + m (Ljava/util/List;)V method_7610 setAll + m (Lnet/minecraft/class_3914;Lnet/minecraft/class_1657;Lnet/minecraft/class_2248;)Z method_17695 isWithinUsableDistance + m (Lnet/minecraft/class_1657;I)Z method_7604 enchantItem + m (II)I method_7591 getQuickcraftMask + m ()Ljava/lang/String; method_30024 func_241441_e_ + m (Lnet/minecraft/class_1712;)V method_7596 addListener + m (Lnet/minecraft/class_1657;)Z method_7597 canInteractWith + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1735;)Z method_7613 canMergeSlot + m (Lnet/minecraft/class_2586;)I method_7608 calcRedstone + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Ljava/lang/Boolean; method_17696 func_216960_a + m (I)I method_7594 getDragEvent + m (IILnet/minecraft/class_1713;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_7593 slotClick + f Lnet/minecraft/class_2371; field_7764 inventoryItemStacks + f Ljava/util/List; field_7761 inventorySlots + f Ljava/util/Set; field_7757 dragSlots + f I field_7762 dragMode + f Ljava/util/Set; field_7760 playerList + f I field_7763 windowId + f S field_7758 transactionID + f I field_7759 dragEvent + f Ljava/util/List; field_17285 trackedIntReferences + f Lnet/minecraft/class_3917; field_17493 containerType + f Ljava/util/List; field_7765 listeners +c net/minecraft/class_1706 net/minecraft/inventory/container/RepairContainer + m (Ljava/lang/String;)V method_7625 updateItemName + m ()I method_17369 getMaximumCost + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_24922 func_234633_a_ + m (I)I method_20398 getNewRepairCost + f I field_7776 materialCost + f Lnet/minecraft/class_3915; field_7770 maximumCost + f Lorg/apache/logging/log4j/Logger; field_7771 LOGGER + f Ljava/lang/String; field_7774 repairedItemName +c net/minecraft/class_1706$1 net/minecraft/inventory/container/RepairContainer$1 + f [I field_7782 field_234634_a_ +c net/minecraft/class_1720 net/minecraft/inventory/container/AbstractFurnaceContainer + m ()Z method_17365 isBurning + m ()I method_17363 getCookProgressionScaled + m ()I method_17364 getBurnLeftScaled + m (Lnet/minecraft/class_1799;)Z method_16945 isFuel + m (Lnet/minecraft/class_1799;)Z method_7640 hasRecipe + f Lnet/minecraft/class_3956; field_17494 recipeType + f Lnet/minecraft/class_1263; field_7824 furnaceInventory + f Lnet/minecraft/class_3913; field_17286 furnaceData + f Lnet/minecraft/class_1937; field_7822 world + f Lnet/minecraft/class_5421; field_25762 field_242384_g +c net/minecraft/class_3705 net/minecraft/inventory/container/BlastFurnaceContainer +c net/minecraft/class_1704 net/minecraft/inventory/container/BeaconContainer + m ()Lnet/minecraft/class_1291; method_17374 func_216967_f + m (II)V method_17372 func_216966_c + m ()Lnet/minecraft/class_1291; method_17375 func_216968_g + m ()I method_17373 func_216969_e + m ()Z method_17376 func_216970_h + f Lnet/minecraft/class_3914; field_17289 worldPosCallable + f Lnet/minecraft/class_1263; field_17287 tileBeacon + f Lnet/minecraft/class_3913; field_17290 field_216972_f + f Lnet/minecraft/class_1704$class_1705; field_17288 beaconSlot +c net/minecraft/class_1704$class_1705 net/minecraft/inventory/container/BeaconContainer$BeaconSlot + f Lnet/minecraft/class_1704; field_7768 field_82876_a +c net/minecraft/class_1704$1 net/minecraft/inventory/container/BeaconContainer$1 + f Lnet/minecraft/class_1704; field_17291 field_213910_a +c net/minecraft/class_3910 net/minecraft/inventory/container/CartographyContainer + m (Lnet/minecraft/class_3910;)J method_21826 func_226606_a_ + m (Lnet/minecraft/class_3910;J)J method_21827 func_226607_a_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_17381 func_216993_a + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17382 func_216996_a + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17379 func_216995_a + f Lnet/minecraft/class_1731; field_19272 field_217001_f + f J field_20382 field_226605_f_ + f Lnet/minecraft/class_3914; field_17294 worldPosCallable + f Lnet/minecraft/class_1263; field_17293 tableInventory +c net/minecraft/class_3910$5 net/minecraft/inventory/container/CartographyContainer$5 + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17387 func_242385_a + f Lnet/minecraft/class_3914; field_17301 field_216937_a + f Lnet/minecraft/class_3910; field_17303 field_216938_b +c net/minecraft/class_3910$3 net/minecraft/inventory/container/CartographyContainer$3 + f Lnet/minecraft/class_3910; field_17299 field_216933_a +c net/minecraft/class_3910$4 net/minecraft/inventory/container/CartographyContainer$4 + f Lnet/minecraft/class_3910; field_17300 field_216934_a +c net/minecraft/class_3910$1 net/minecraft/inventory/container/CartographyContainer$1 + f Lnet/minecraft/class_3910; field_17298 field_213911_a +c net/minecraft/class_3910$2 net/minecraft/inventory/container/CartographyContainer$2 + f Lnet/minecraft/class_3910; field_19273 field_213924_a +c net/minecraft/class_1708 net/minecraft/inventory/container/BrewingStandContainer + m ()I method_17377 func_216982_e + m ()I method_17378 func_216981_f + f Lnet/minecraft/class_3913; field_17292 field_216983_d + f Lnet/minecraft/class_1735; field_7787 slot + f Lnet/minecraft/class_1263; field_7788 tileBrewingStand +c net/minecraft/class_1708$class_1710 net/minecraft/inventory/container/BrewingStandContainer$IngredientSlot +c net/minecraft/class_1708$class_1711 net/minecraft/inventory/container/BrewingStandContainer$PotionSlot + m (Lnet/minecraft/class_1799;)Z method_7631 canHoldPotion +c net/minecraft/class_1708$class_1709 net/minecraft/inventory/container/BrewingStandContainer$FuelSlot + m (Lnet/minecraft/class_1799;)Z method_7630 isValidBrewingFuel +c net/minecraft/class_1713 net/minecraft/inventory/container/ClickType + m (Ljava/lang/String;)Lnet/minecraft/class_1713; valueOf valueOf + m ()[Lnet/minecraft/class_1713; values values + f Lnet/minecraft/class_1713; field_7795 THROW + f [Lnet/minecraft/class_1713; field_7792 $VALUES + f Lnet/minecraft/class_1713; field_7793 PICKUP_ALL + f Lnet/minecraft/class_1713; field_7789 QUICK_CRAFT + f Lnet/minecraft/class_1713; field_7790 PICKUP + f Lnet/minecraft/class_1713; field_7791 SWAP + f Lnet/minecraft/class_1713; field_7794 QUICK_MOVE + f Lnet/minecraft/class_1713; field_7796 CLONE +c net/minecraft/class_1707 net/minecraft/inventory/container/ChestContainer + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19250 createGeneric9X5 + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19244 createGeneric9X1 + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19251 createGeneric9X6 + m ()Lnet/minecraft/class_1263; method_7629 getLowerChestInventory + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19246 createGeneric9X2 + m (ILnet/minecraft/class_1661;Lnet/minecraft/class_1263;)Lnet/minecraft/class_1707; method_19245 createGeneric9X3 + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19249 createGeneric9X4 + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19248 createGeneric9X3 + m ()I method_17388 getNumRows + m (ILnet/minecraft/class_1661;Lnet/minecraft/class_1263;)Lnet/minecraft/class_1707; method_19247 createGeneric9X6 + f Lnet/minecraft/class_1263; field_17495 lowerChestInventory + f I field_17496 numRows +c net/minecraft/class_3914 net/minecraft/util/IWorldPosCallable + m (Ljava/util/function/BiConsumer;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Ljava/util/Optional; method_17394 func_221487_a + m (Ljava/util/function/BiFunction;Ljava/lang/Object;)Ljava/lang/Object; method_17396 applyOrElse + m (Ljava/util/function/BiFunction;)Ljava/util/Optional; method_17395 apply + m (Ljava/util/function/BiConsumer;)V method_17393 consume + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3914; method_17392 of + f Lnet/minecraft/class_3914; field_17304 DUMMY +c net/minecraft/class_3914$1 net/minecraft/util/IWorldPosCallable$1 +c net/minecraft/class_3914$2 net/minecraft/util/IWorldPosCallable$2 + f Lnet/minecraft/class_1937; field_17305 field_221490_b + f Lnet/minecraft/class_2338; field_17306 field_221491_c +c net/minecraft/class_3913 net/minecraft/util/IIntArray + m (II)V method_17391 set + m (I)I method_17390 get + m ()I method_17389 size +c net/minecraft/class_1715 net/minecraft/inventory/CraftingInventory + m ()I method_17397 getHeight + m ()I method_17398 getWidth + f Lnet/minecraft/class_2371; field_7805 stackList + f I field_7803 height + f I field_7804 width + f Lnet/minecraft/class_1703; field_7802 eventHandler +c net/minecraft/class_1712 net/minecraft/inventory/container/IContainerListener + m (Lnet/minecraft/class_1703;Lnet/minecraft/class_2371;)V method_7634 sendAllContents + m (Lnet/minecraft/class_1703;ILnet/minecraft/class_1799;)V method_7635 sendSlotContents + m (Lnet/minecraft/class_1703;II)V method_7633 sendWindowProperty +c net/minecraft/class_3915 net/minecraft/util/IntReferenceHolder + m ([II)Lnet/minecraft/class_3915; method_17406 create + m ()Lnet/minecraft/class_3915; method_17403 single + m (Lnet/minecraft/class_3913;I)Lnet/minecraft/class_3915; method_17405 create + m ()Z method_17408 isDirty + m (I)V method_17404 set + m ()I method_17407 get + f I field_17307 lastKnownValue +c net/minecraft/class_3915$3 net/minecraft/util/IntReferenceHolder$3 + f I field_17312 value +c net/minecraft/class_3915$1 net/minecraft/util/IntReferenceHolder$1 + f Lnet/minecraft/class_3913; field_17308 field_221502_a + f I field_17309 field_221503_b +c net/minecraft/class_3915$2 net/minecraft/util/IntReferenceHolder$2 + f I field_17311 field_221500_b + f [I field_17310 field_221499_a +c net/minecraft/class_1714 net/minecraft/inventory/container/WorkbenchContainer + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17400 func_217067_a + m (ILnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1715;Lnet/minecraft/class_1731;)V method_17399 updateCraftingResult + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17402 func_217068_a + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17401 func_217069_a + f Lnet/minecraft/class_1657; field_7797 player + f Lnet/minecraft/class_1715; field_7801 craftMatrix + f Lnet/minecraft/class_1731; field_7800 craftResult + f Lnet/minecraft/class_3914; field_7799 worldPosCallable +c net/minecraft/class_1718 net/minecraft/inventory/container/EnchantmentContainer + m ()I method_17413 func_217005_f + m ()I method_7638 getLapisAmount + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17411 func_217002_a + m (Lnet/minecraft/class_1799;II)Ljava/util/List; method_7637 getEnchantmentList + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17412 func_217004_a + m (Lnet/minecraft/class_1799;ILnet/minecraft/class_1657;ILnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17410 func_217003_a + f Lnet/minecraft/class_1263; field_7809 tableInventory + f [I field_7810 worldClue + f [I field_7812 enchantClue + f Lnet/minecraft/class_3915; field_7814 xpSeed + f Ljava/util/Random; field_7811 rand + f [I field_7808 enchantLevels + f Lnet/minecraft/class_3914; field_7813 worldPosCallable +c net/minecraft/class_1718$1 net/minecraft/inventory/container/EnchantmentContainer$1 + f Lnet/minecraft/class_1718; field_7815 field_70484_a +c net/minecraft/class_1718$2 net/minecraft/inventory/container/EnchantmentContainer$2 + f Lnet/minecraft/class_1718; field_7816 field_75227_a +c net/minecraft/class_1718$3 net/minecraft/inventory/container/EnchantmentContainer$3 + f Lnet/minecraft/class_1718; field_7817 field_178172_a +c net/minecraft/class_1716 net/minecraft/inventory/container/DispenserContainer + f Lnet/minecraft/class_1263; field_7806 dispenserInventory +c net/minecraft/class_3858 net/minecraft/inventory/container/FurnaceContainer +c net/minecraft/class_1717 net/minecraft/inventory/container/FurnaceFuelSlot + m (Lnet/minecraft/class_1799;)Z method_7636 isBucket + f Lnet/minecraft/class_1720; field_17083 field_216939_a +c net/minecraft/class_3803 net/minecraft/inventory/container/GrindstoneContainer + m (Lnet/minecraft/class_3803;)Lnet/minecraft/class_1263; method_16692 func_217008_a + m (Lnet/minecraft/class_1799;II)Lnet/minecraft/class_1799; method_16693 removeEnchantments + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17415 func_217009_a + m (Ljava/util/Map$Entry;)Z method_16694 func_217012_a + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_20268 copyEnchantments + m ()V method_16695 updateRecipeOutput + f Lnet/minecraft/class_3914; field_16775 worldPosCallable + f Lnet/minecraft/class_1263; field_16773 outputInventory + f Lnet/minecraft/class_1263; field_16772 inputInventory +c net/minecraft/class_3803$3 net/minecraft/inventory/container/GrindstoneContainer$3 + f Lnet/minecraft/class_3803; field_16778 field_216941_a +c net/minecraft/class_3803$4 net/minecraft/inventory/container/GrindstoneContainer$4 + m (Lnet/minecraft/class_1937;)I method_17416 getEnchantmentXpFromInputs + m (Lnet/minecraft/class_1799;)I method_16696 getEnchantmentXp + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17417 func_216944_a + f Lnet/minecraft/class_3914; field_16779 field_216945_a + f Lnet/minecraft/class_3803; field_16780 field_216946_b +c net/minecraft/class_3803$1 net/minecraft/inventory/container/GrindstoneContainer$1 + f Lnet/minecraft/class_3803; field_16776 field_213912_a +c net/minecraft/class_3803$2 net/minecraft/inventory/container/GrindstoneContainer$2 + f Lnet/minecraft/class_3803; field_16777 field_216940_a +c net/minecraft/class_1719 net/minecraft/inventory/container/FurnaceResultSlot + f I field_7819 removeCount + f Lnet/minecraft/class_1657; field_7818 player +c net/minecraft/class_1724 net/minecraft/inventory/container/HorseInventoryContainer + f Lnet/minecraft/class_1496; field_7837 horse + f Lnet/minecraft/class_1263; field_7836 horseInventory +c net/minecraft/class_1724$1 net/minecraft/inventory/container/HorseInventoryContainer$1 + f Lnet/minecraft/class_1724; field_7839 field_111239_a + f Lnet/minecraft/class_1496; field_7838 field_190902_a +c net/minecraft/class_1724$2 net/minecraft/inventory/container/HorseInventoryContainer$2 + f Lnet/minecraft/class_1496; field_7840 field_111241_a + f Lnet/minecraft/class_1724; field_7841 field_111240_b +c net/minecraft/class_1722 net/minecraft/inventory/container/HopperContainer + f Lnet/minecraft/class_1263; field_7826 hopperInventory +c net/minecraft/class_4861 net/minecraft/inventory/container/AbstractRepairContainer + m (Lnet/minecraft/class_1657;Z)Z method_24927 func_230303_b_ + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_24926 func_234647_b_ + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Ljava/lang/Boolean; method_24924 func_234646_a_ + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_24923 func_230301_a_ + m ()V method_24928 updateRepairOutput + m (Lnet/minecraft/class_2680;)Z method_24925 func_230302_a_ + m (Lnet/minecraft/class_1799;)Z method_30025 func_241210_a_ + f Lnet/minecraft/class_1657; field_22482 field_234645_f_ + f Lnet/minecraft/class_1263; field_22480 field_234643_d_ + f Lnet/minecraft/class_1731; field_22479 field_234642_c_ + f Lnet/minecraft/class_3914; field_22481 field_234644_e_ +c net/minecraft/class_4861$1 net/minecraft/inventory/container/AbstractRepairContainer$1 + f Lnet/minecraft/class_4861; field_7778 field_234648_a_ +c net/minecraft/class_4861$2 net/minecraft/inventory/container/AbstractRepairContainer$2 + f Lnet/minecraft/class_4861; field_22483 field_234649_a_ +c net/minecraft/class_1723 net/minecraft/inventory/container/PlayerContainer + m ()[Lnet/minecraft/class_2960; method_7641 func_226621_j_ + m ()Lnet/minecraft/class_1715; method_29281 func_234641_j_ + f [Lnet/minecraft/class_1304; field_7832 VALID_EQUIPMENT_SLOTS + f Lnet/minecraft/class_1715; field_7831 craftMatrix + f Lnet/minecraft/class_1731; field_7830 craftResult + f Lnet/minecraft/class_2960; field_21668 LOCATION_BLOCKS_TEXTURE + f Lnet/minecraft/class_2960; field_21669 EMPTY_ARMOR_SLOT_HELMET + f Lnet/minecraft/class_2960; field_21671 EMPTY_ARMOR_SLOT_LEGGINGS + f Lnet/minecraft/class_1657; field_7828 player + f Lnet/minecraft/class_2960; field_21670 EMPTY_ARMOR_SLOT_CHESTPLATE + f Lnet/minecraft/class_2960; field_21672 EMPTY_ARMOR_SLOT_BOOTS + f [Lnet/minecraft/class_2960; field_7829 ARMOR_SLOT_TEXTURES + f Z field_7827 isLocalWorld + f Lnet/minecraft/class_2960; field_21673 EMPTY_ARMOR_SLOT_SHIELD +c net/minecraft/class_1723$2 net/minecraft/inventory/container/PlayerContainer$2 + f Lnet/minecraft/class_1723; field_21674 field_185006_a +c net/minecraft/class_1723$1 net/minecraft/inventory/container/PlayerContainer$1 + f Lnet/minecraft/class_1304; field_7834 field_185005_a + f Lnet/minecraft/class_1723; field_7833 field_75235_b +c net/minecraft/class_1726 net/minecraft/inventory/container/LoomContainer + m (Lnet/minecraft/class_1726;)Lnet/minecraft/class_1735; method_17426 func_217029_c + m (Lnet/minecraft/class_1726;J)J method_21828 func_226623_a_ + m ()I method_7647 func_217023_e + m (Ljava/lang/Runnable;)V method_17423 func_217020_a + m (Lnet/minecraft/class_1726;)Lnet/minecraft/class_1735; method_17425 func_217027_b + m (Lnet/minecraft/class_1726;)J method_21829 func_226624_e_ + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17420 func_217028_a + m (Lnet/minecraft/class_1726;)Lnet/minecraft/class_3915; method_17427 func_217030_d + m ()Lnet/minecraft/class_1735; method_17431 getOutputSlot + m ()Lnet/minecraft/class_1735; method_17430 getPatternSlot + m ()V method_17432 func_217032_k + m (Lnet/minecraft/class_1726;)Ljava/lang/Runnable; method_17421 func_217021_a + m ()V method_7648 createOutputStack + m ()Lnet/minecraft/class_1735; method_17428 getBannerSlot + m ()Lnet/minecraft/class_1735; method_17429 getDyeSlot + f Lnet/minecraft/class_1735; field_17321 slotPattern + f Lnet/minecraft/class_1735; field_17319 slotBanner + f Lnet/minecraft/class_1735; field_17320 slotDye + f Lnet/minecraft/class_1263; field_7850 inputInventory + f Lnet/minecraft/class_1263; field_17323 outputInventory + f J field_20383 field_226622_j_ + f Ljava/lang/Runnable; field_17318 runnable + f Lnet/minecraft/class_3915; field_17317 field_217034_d + f Lnet/minecraft/class_3914; field_17316 worldPos + f Lnet/minecraft/class_1735; field_17322 output +c net/minecraft/class_1726$5 net/minecraft/inventory/container/LoomContainer$5 + f Lnet/minecraft/class_1726; field_7854 field_216950_a +c net/minecraft/class_1726$6 net/minecraft/inventory/container/LoomContainer$6 + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17433 func_216951_a + f Lnet/minecraft/class_3914; field_17325 field_216952_a + f Lnet/minecraft/class_1726; field_7855 field_216953_b +c net/minecraft/class_1726$3 net/minecraft/inventory/container/LoomContainer$3 + f Lnet/minecraft/class_1726; field_7852 field_216948_a +c net/minecraft/class_1726$4 net/minecraft/inventory/container/LoomContainer$4 + f Lnet/minecraft/class_1726; field_7853 field_216949_a +c net/minecraft/class_1726$1 net/minecraft/inventory/container/LoomContainer$1 + f Lnet/minecraft/class_1726; field_7851 field_213913_a +c net/minecraft/class_1726$2 net/minecraft/inventory/container/LoomContainer$2 + f Lnet/minecraft/class_1726; field_17324 field_213914_a +c net/minecraft/class_3916 net/minecraft/inventory/container/LecternContainer + m ()I method_17419 getPage + m ()Lnet/minecraft/class_1799; method_17418 getBook + f Lnet/minecraft/class_3913; field_17314 field_217019_d + f Lnet/minecraft/class_1263; field_17313 lecternInventory +c net/minecraft/class_3916$1 net/minecraft/inventory/container/LecternContainer$1 + f Lnet/minecraft/class_3916; field_17315 field_216947_a +c net/minecraft/class_1270 net/minecraft/inventory/container/IContainerProvider + m (ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; createMenu createMenu +c net/minecraft/class_1725 net/minecraft/inventory/MerchantInventory + m (I)V method_7643 setCurrentRecipeIndex + m ()I method_19252 getClientSideExp + m (I)Z method_7644 inventoryResetNeededOnSlotChange + m ()V method_7645 resetRecipeAndSlots + m ()Lnet/minecraft/class_1914; method_7642 func_214025_g + f Lnet/minecraft/class_2371; field_7845 slots + f Lnet/minecraft/class_1914; field_7843 field_214026_c + f I field_18668 exp + f Lnet/minecraft/class_1915; field_7844 merchant + f I field_7842 currentRecipeIndex +c net/minecraft/class_3917 net/minecraft/inventory/container/ContainerType + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_3916; method_17436 func_221504_b + m (Ljava/lang/String;Lnet/minecraft/class_3917$class_3918;)Lnet/minecraft/class_3917; method_17435 register + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1703; method_17434 create + f Lnet/minecraft/class_3917; field_17335 FURNACE + f Lnet/minecraft/class_3917; field_17336 GRINDSTONE + f Lnet/minecraft/class_3917; field_17334 ENCHANTMENT + f Lnet/minecraft/class_3917; field_17333 CRAFTING + f Lnet/minecraft/class_3917; field_17331 BLAST_FURNACE + f Lnet/minecraft/class_3917; field_17332 BREWING_STAND + f Lnet/minecraft/class_3917; field_17330 BEACON + f Lnet/minecraft/class_3917; field_17329 ANVIL + f Lnet/minecraft/class_3917; field_17327 GENERIC_9X6 + f Lnet/minecraft/class_3917; field_17328 GENERIC_3X3 + f Lnet/minecraft/class_3917; field_18667 GENERIC_9X5 + f Lnet/minecraft/class_3917; field_18666 GENERIC_9X4 + f Lnet/minecraft/class_3917; field_18665 GENERIC_9X2 + f Lnet/minecraft/class_3917; field_17625 STONECUTTER + f Lnet/minecraft/class_3917; field_17326 GENERIC_9X3 + f Lnet/minecraft/class_3917; field_17342 SMOKER + f Lnet/minecraft/class_3917; field_18664 GENERIC_9X1 + f Lnet/minecraft/class_3917; field_17343 CARTOGRAPHY_TABLE + f Lnet/minecraft/class_3917; field_22484 SMITHING + f Lnet/minecraft/class_3917; field_17341 SHULKER_BOX + f Lnet/minecraft/class_3917; field_17339 LOOM + f Lnet/minecraft/class_3917$class_3918; field_17344 factory + f Lnet/minecraft/class_3917; field_17340 MERCHANT + f Lnet/minecraft/class_3917; field_17338 LECTERN + f Lnet/minecraft/class_3917; field_17337 HOPPER +c net/minecraft/class_3917$class_3918 net/minecraft/inventory/container/ContainerType$IFactory + m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1703; create create +c net/minecraft/class_1727 net/minecraft/inventory/container/MerchantResultSlot + f Lnet/minecraft/class_1915; field_7858 merchant + f I field_7859 removeCount + f Lnet/minecraft/class_1657; field_7857 player + f Lnet/minecraft/class_1725; field_7860 merchantInventory +c net/minecraft/class_1728 net/minecraft/inventory/container/MerchantContainer + m ()I method_19256 getPendingExp + m (I)V method_19255 setXp + m ()Z method_19259 func_217042_i + m ()I method_19254 getXp + m ()V method_20595 playMerchantYesSound + m (I)V method_7650 setCurrentRecipeIndex + m ()Z method_20701 func_223432_h + m (ILnet/minecraft/class_1799;)V method_20214 func_217053_c + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_20213 areItemStacksEqual + m (Z)V method_20700 func_223431_b + m (Lnet/minecraft/class_1916;)V method_17437 setClientSideOffers + m (Z)V method_19253 func_217045_a + m ()Lnet/minecraft/class_1916; method_17438 getOffers + m (I)V method_20215 func_217046_g + m ()I method_19258 getMerchantLevel + m (I)V method_19257 setMerchantLevel + f I field_18669 merchantLevel + f Lnet/minecraft/class_1725; field_7861 merchantInventory + f Lnet/minecraft/class_1915; field_7863 merchant + f Z field_19358 field_223433_g + f Z field_18670 field_217055_f +c net/minecraft/class_1729 net/minecraft/inventory/container/RecipeBookContainer + m ()Lnet/minecraft/class_5421; method_30264 func_241850_m + m ()I method_7656 getHeight + m ()I method_7653 getWidth + m (Lnet/minecraft/class_1860;)Z method_7652 matches + m ()I method_7655 getOutputSlot + m ()V method_7657 clear + m (Lnet/minecraft/class_1662;)V method_7654 fillStackedContents + m ()I method_7658 getSize + m (ZLnet/minecraft/class_1860;Lnet/minecraft/class_3222;)V method_17697 func_217056_a +c net/minecraft/class_1730 net/minecraft/inventory/EnderChestInventory + m (Lnet/minecraft/class_2611;)V method_7661 setChestTileEntity + f Lnet/minecraft/class_2611; field_7864 associatedChest +c net/minecraft/class_1732 net/minecraft/inventory/IRecipeHolder + m (Lnet/minecraft/class_1860;)V method_7662 setRecipeUsed + m (Lnet/minecraft/class_1657;)V method_7664 onCrafting + m ()Lnet/minecraft/class_1860; method_7663 getRecipeUsed + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_3222;Lnet/minecraft/class_1860;)Z method_7665 canUseRecipe +c net/minecraft/class_5421 net/minecraft/item/crafting/RecipeBookCategory + m ()[Lnet/minecraft/class_5421; values values + m (Ljava/lang/String;)Lnet/minecraft/class_5421; valueOf valueOf + f Lnet/minecraft/class_5421; field_25766 SMOKER + f [Lnet/minecraft/class_5421; field_25767 $VALUES + f Lnet/minecraft/class_5421; field_25764 FURNACE + f Lnet/minecraft/class_5421; field_25765 BLAST_FURNACE + f Lnet/minecraft/class_5421; field_25763 CRAFTING +c net/minecraft/class_1734 net/minecraft/inventory/container/CraftingResultSlot + f Lnet/minecraft/class_1715; field_7870 craftMatrix + f I field_7869 amountCrafted + f Lnet/minecraft/class_1657; field_7868 player +c net/minecraft/class_1731 net/minecraft/inventory/CraftResultInventory + f Lnet/minecraft/class_1860; field_7865 recipeUsed + f Lnet/minecraft/class_2371; field_7866 stackResult +c net/minecraft/class_1736 net/minecraft/inventory/container/ShulkerBoxSlot +c net/minecraft/class_1733 net/minecraft/inventory/container/ShulkerBoxContainer + f Lnet/minecraft/class_1263; field_7867 inventory +c net/minecraft/class_1735 net/minecraft/inventory/container/Slot + m ()Lcom/mojang/datafixers/util/Pair; method_7679 getBackground + m (Lnet/minecraft/class_1799;)V method_7669 onCrafting + m ()Z method_7682 isEnabled + m (Lnet/minecraft/class_1799;)Z method_7680 isItemValid + m (Lnet/minecraft/class_1799;)V method_7673 putStack + m ()V method_7668 onSlotChanged + m (I)Lnet/minecraft/class_1799; method_7671 decrStackSize + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_7667 onTake + m ()Lnet/minecraft/class_1799; method_7677 getStack + m ()Z method_7681 getHasStack + m ()I method_7675 getSlotStackLimit + m (Lnet/minecraft/class_1799;I)V method_7678 onCrafting + m (Lnet/minecraft/class_1799;)I method_7676 getItemStackLimit + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_7670 onSlotChange + m (I)V method_7672 onSwapCraft + m (Lnet/minecraft/class_1657;)Z method_7674 canTakeStack + f I field_7875 slotIndex + f I field_7874 slotNumber + f Lnet/minecraft/class_1263; field_7871 inventory + f I field_7873 xPos + f I field_7872 yPos +c net/minecraft/class_3919 net/minecraft/util/IntArray + f [I field_17345 array +c net/minecraft/class_3706 net/minecraft/inventory/container/SmokerContainer +c net/minecraft/class_4862 net/minecraft/inventory/container/SmithingTableContainer + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_24929 func_234653_a_ + m (I)V method_29539 func_234654_d_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_5357;)Z method_30026 func_241444_a_ + f Lnet/minecraft/class_5357; field_25386 field_234652_h_ + f Lnet/minecraft/class_1937; field_25385 field_234651_g_ + f Ljava/util/List; field_25668 field_241443_i_ +c net/minecraft/class_3971 net/minecraft/inventory/container/StonecutterContainer + m ()I method_17862 getSelectedRecipe + m (I)Z method_30160 func_241818_d_ + m (Lnet/minecraft/class_3971;J)J method_17858 func_242386_a + m ()I method_17864 getRecipeListSize + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;)V method_17855 updateAvailableRecipes + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17856 func_217079_a + m (Lnet/minecraft/class_3971;)Ljava/lang/Runnable; method_17857 func_217077_a + m ()V method_17866 updateRecipeResultSlot + m ()Z method_17865 hasItemsinInputSlot + m ()V method_17867 func_217080_j + m (Lnet/minecraft/class_3971;)Lnet/minecraft/class_1731; method_30960 func_242387_b + m ()Ljava/util/List; method_17863 getRecipeList + m (Lnet/minecraft/class_3971;)J method_17861 func_242389_d + m (Lnet/minecraft/class_3971;)V method_17860 func_242388_c + m (Ljava/lang/Runnable;)V method_17859 setInventoryUpdateListener + f Ljava/lang/Runnable; field_17636 inventoryUpdateListener + f J field_17635 lastOnTake + f Lnet/minecraft/class_3914; field_17630 worldPosCallable + f Lnet/minecraft/class_1263; field_17629 inputInventory + f Lnet/minecraft/class_3915; field_17631 selectedRecipe + f Lnet/minecraft/class_1937; field_17632 world + f Lnet/minecraft/class_1799; field_17634 itemStackInput + f Ljava/util/List; field_17633 recipes + f Lnet/minecraft/class_1731; field_19173 inventory + f Lnet/minecraft/class_1735; field_17628 outputInventorySlot + f Lnet/minecraft/class_1735; field_17627 inputInventorySlot +c net/minecraft/class_3971$1 net/minecraft/inventory/container/StonecutterContainer$1 + f Lnet/minecraft/class_3971; field_17637 field_213915_a +c net/minecraft/class_3971$2 net/minecraft/inventory/container/StonecutterContainer$2 + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17868 func_216954_a + f Lnet/minecraft/class_3914; field_17638 field_216955_a + f Lnet/minecraft/class_3971; field_17639 field_216956_b +c net/minecraft/class_1737 net/minecraft/inventory/IRecipeHelperPopulator + m (Lnet/minecraft/class_1662;)V method_7683 fillStackedContents +c net/minecraft/class_1739 net/minecraft/item/AirItem + f Lnet/minecraft/class_2248; field_7882 block +c net/minecraft/class_1741 net/minecraft/item/IArmorMaterial + m ()F method_7700 getToughness + m ()F method_24355 getKnockbackResistance + m ()Ljava/lang/String; method_7694 getName + m (Lnet/minecraft/class_1304;)I method_7696 getDurability + m ()I method_7699 getEnchantability + m (Lnet/minecraft/class_1304;)I method_7697 getDamageReductionAmount + m ()Lnet/minecraft/class_3414; method_7698 getSoundEvent + m ()Lnet/minecraft/class_1856; method_7695 getRepairMaterial +c net/minecraft/class_1738 net/minecraft/item/ArmorItem + m ()Lnet/minecraft/class_1304; method_7685 getEquipmentSlot + m ()Lnet/minecraft/class_1741; method_7686 getArmorMaterial + m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1799;)Z method_7684 func_226626_a_ + m ()F method_26353 getToughness + m ()I method_7687 getDamageReduceAmount + f Lnet/minecraft/class_1741; field_7881 material + f F field_7877 toughness + f I field_7878 damageReduceAmount + f F field_21976 knockbackResistance + f Lnet/minecraft/class_1304; field_7880 slot + f Lcom/google/common/collect/Multimap; field_23741 field_234656_m_ + f [Ljava/util/UUID; field_7876 ARMOR_MODIFIERS + f Lnet/minecraft/class_2357; field_7879 DISPENSER_BEHAVIOR +c net/minecraft/class_1738$1 net/minecraft/item/ArmorItem$1 +c net/minecraft/class_1742 net/minecraft/item/ArmorStandItem + m (Lnet/minecraft/class_1531;Ljava/util/Random;)V method_7701 applyRandomRotations + m (Lnet/minecraft/class_1297;)Z method_30265 func_242390_a +c net/minecraft/class_1740 net/minecraft/item/ArmorMaterial + m ()[Lnet/minecraft/class_1740; values values + m (Ljava/lang/String;)Lnet/minecraft/class_1740; valueOf valueOf + m ()Lnet/minecraft/class_1856; method_7688 func_200907_j + m ()Lnet/minecraft/class_1856; method_7690 func_200906_i + m ()Lnet/minecraft/class_1856; method_7689 func_200905_h + m ()Lnet/minecraft/class_1856; method_7691 func_200903_g + m ()Lnet/minecraft/class_1856; method_7692 func_200904_f + m ()Lnet/minecraft/class_1856; method_7693 func_203177_f + m ()Lnet/minecraft/class_1856; method_24356 func_234661_g_ + f Ljava/lang/String; field_7884 name + f Lnet/minecraft/class_3528; field_7885 repairMaterial + f Lnet/minecraft/class_1740; field_21977 NETHERITE + f Lnet/minecraft/class_1740; field_7890 TURTLE + f Lnet/minecraft/class_1740; field_7889 DIAMOND + f Lnet/minecraft/class_1740; field_7895 GOLD + f [I field_7891 MAX_DAMAGE_ARRAY + f I field_7883 maxDamageFactor + f Lnet/minecraft/class_3414; field_7886 soundEvent + f Lnet/minecraft/class_1740; field_7892 IRON + f Lnet/minecraft/class_1740; field_7887 CHAIN + f I field_7896 enchantability + f [I field_7893 damageReductionAmountArray + f F field_7894 toughness + f Lnet/minecraft/class_1740; field_7897 LEATHER + f [Lnet/minecraft/class_1740; field_7888 $VALUES + f F field_21978 knockbackResistance +c net/minecraft/class_1744 net/minecraft/item/ArrowItem + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1665; method_7702 createArrow +c net/minecraft/class_1746 net/minecraft/item/BannerItem + m ()Lnet/minecraft/class_1767; method_7706 getColor + m (Lnet/minecraft/class_1799;Ljava/util/List;)V method_7705 appendHoverTextFromTileEntityTag +c net/minecraft/class_1743 net/minecraft/item/AxeItem + m (Lnet/minecraft/class_1838;Lnet/minecraft/class_1657;)V method_20269 func_220040_a + f Ljava/util/Map; field_7898 BLOCK_STRIPPING_MAP + f Ljava/util/Set; field_23139 EFFECTIVE_ON_MATERIALS + f Ljava/util/Set; field_7899 EFFECTIVE_ON_BLOCKS +c net/minecraft/class_1748 net/minecraft/item/BedItem +c net/minecraft/class_1745 net/minecraft/item/BannerPatternItem + m ()Lnet/minecraft/class_5250; method_7703 func_219981_d_ + m ()Lnet/minecraft/class_2582; method_7704 getBannerPattern + f Lnet/minecraft/class_2582; field_7900 pattern +c net/minecraft/class_1749 net/minecraft/item/BoatItem + f Ljava/util/function/Predicate; field_17497 field_219989_a + f Lnet/minecraft/class_1690$class_1692; field_7902 type +c net/minecraft/class_1747 net/minecraft/item/BlockItem + m (Lnet/minecraft/class_1750;)Lnet/minecraft/class_2680; method_7707 getStateForPlacement + m (Lnet/minecraft/class_1750;Lnet/minecraft/class_2680;)Z method_7709 canPlace + m ()Z method_20360 checkPosition + m (Ljava/util/Map;Lnet/minecraft/class_1792;)V method_7713 addToBlockToItemMap + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Lnet/minecraft/class_2680; method_18082 func_219986_a + m (Lnet/minecraft/class_1750;Lnet/minecraft/class_2680;)Z method_7708 placeBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;Ljava/lang/String;)Lnet/minecraft/class_2680; method_18083 func_219988_a + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)Z method_7714 setTileEntityNBT + m (Lnet/minecraft/class_1750;)Lnet/minecraft/class_1750; method_16356 getBlockItemUseContext + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_18084 func_219985_a + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;Lnet/minecraft/class_2680;)Z method_7710 onBlockPlaced + m (Lnet/minecraft/class_1750;)Lnet/minecraft/class_1269; method_7712 tryPlace + m ()Lnet/minecraft/class_2248; method_7711 getBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_3414; method_19260 getPlaceSound + f Lnet/minecraft/class_2248; field_7901 block +c net/minecraft/class_1751 net/minecraft/item/BookItem +c net/minecraft/class_1752 net/minecraft/item/BoneMealItem + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_7719 growSeagrass + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)V method_7721 spawnBonemealParticles + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_7720 applyBonemeal +c net/minecraft/class_1753 net/minecraft/item/BowItem + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1657;)V method_20270 func_220009_a_ + m (I)F method_7722 getArrowVelocity +c net/minecraft/class_1754 net/minecraft/item/GlassBottleItem + m (Lnet/minecraft/class_1295;)Z method_7726 func_210311_a + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_7725 turnBottleIntoItem +c net/minecraft/class_1755 net/minecraft/item/BucketItem + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;)V method_7728 onLiquidPlaced + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_7732 emptyBucket + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_3965;)Z method_7731 tryPlaceContainedLiquid + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_7727 playEmptySound + f Lnet/minecraft/class_3611; field_7905 containedBlock +c net/minecraft/class_1756 net/minecraft/item/SoupItem +c net/minecraft/class_1759 net/minecraft/item/CompassItem + m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2338;Lnet/minecraft/class_2487;)V method_27315 func_234669_a_ + m (Lnet/minecraft/class_1799;)Z method_26365 func_234670_d_ + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28375 func_234668_a_ + m (Lnet/minecraft/class_2487;)Ljava/util/Optional; method_26364 func_234667_a_ + f Lorg/apache/logging/log4j/Logger; field_24670 field_234666_a_ +c net/minecraft/class_1757 net/minecraft/item/ChorusFruitItem +c net/minecraft/class_1761 net/minecraft/item/ItemGroup + m ()Lnet/minecraft/class_1761; method_7748 setNoTitle + m ()Ljava/lang/String; method_7751 getPath + m (Ljava/lang/String;)Lnet/minecraft/class_1761; method_7753 setBackgroundImageName + m ()Z method_7752 isAlignedRight + m ()[Lnet/minecraft/class_1886; method_7744 getRelevantEnchantmentTypes + m ()Lnet/minecraft/class_1799; method_7747 getIcon + m ()Ljava/lang/String; method_7742 getBackgroundImageName + m (Lnet/minecraft/class_1886;)Z method_7740 hasRelevantEnchantmentType + m (Ljava/lang/String;)Lnet/minecraft/class_1761; method_7739 setTabPath + m ()I method_7743 getColumn + m ()Z method_7754 drawInForegroundOfTab + m ()Z method_7756 hasScrollbar + m ([Lnet/minecraft/class_1886;)Lnet/minecraft/class_1761; method_7745 setRelevantEnchantmentTypes + m ()Z method_7755 isOnTopRow + m (Lnet/minecraft/class_2371;)V method_7738 fill + m ()I method_7741 getIndex + m ()Lnet/minecraft/class_1799; method_7750 createIcon + m ()Lnet/minecraft/class_1761; method_7749 setNoScrollbar + m ()Lnet/minecraft/class_2561; method_7737 getGroupName + f Lnet/minecraft/class_1761; field_7924 BREWING + f Lnet/minecraft/class_1799; field_7934 icon + f Lnet/minecraft/class_1761; field_7930 TOOLS + f [Lnet/minecraft/class_1886; field_7927 enchantmentTypes + f Lnet/minecraft/class_1761; field_7915 SEARCH + f I field_7933 index + f Lnet/minecraft/class_1761; field_7923 TRANSPORTATION + f Lnet/minecraft/class_1761; field_7928 DECORATIONS + f Ljava/lang/String; field_7919 backgroundTexture + f [Lnet/minecraft/class_1761; field_7921 GROUPS + f Z field_7920 hasScrollbar + f Lnet/minecraft/class_1761; field_7918 INVENTORY + f Lnet/minecraft/class_1761; field_7929 MATERIALS + f Lnet/minecraft/class_1761; field_7916 COMBAT + f Lnet/minecraft/class_1761; field_7922 FOOD + f Lnet/minecraft/class_1761; field_7932 MISC + f Lnet/minecraft/class_1761; field_7914 REDSTONE + f Lnet/minecraft/class_2561; field_26391 groupName + f Lnet/minecraft/class_1761; field_7931 BUILDING_BLOCKS + f Ljava/lang/String; field_7926 tabPath + f Ljava/lang/String; field_7935 tabLabel + f Z field_7917 drawTitle + f Lnet/minecraft/class_1761; field_7925 HOTBAR +c net/minecraft/class_1761$4 net/minecraft/item/ItemGroup$12 +c net/minecraft/class_1761$3 net/minecraft/item/ItemGroup$11 +c net/minecraft/class_1761$2 net/minecraft/item/ItemGroup$10 +c net/minecraft/class_1761$1 net/minecraft/item/ItemGroup$1 +c net/minecraft/class_1761$9 net/minecraft/item/ItemGroup$6 +c net/minecraft/class_1761$8 net/minecraft/item/ItemGroup$5 +c net/minecraft/class_1761$7 net/minecraft/item/ItemGroup$4 +c net/minecraft/class_1761$6 net/minecraft/item/ItemGroup$3 +c net/minecraft/class_1761$5 net/minecraft/item/ItemGroup$2 +c net/minecraft/class_1761$12 net/minecraft/item/ItemGroup$9 +c net/minecraft/class_1761$10 net/minecraft/item/ItemGroup$7 +c net/minecraft/class_1761$11 net/minecraft/item/ItemGroup$8 +c net/minecraft/class_1762 net/minecraft/item/AbstractMapItem + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;)Lnet/minecraft/class_2596; method_7757 getUpdatePacket +c net/minecraft/class_1763 net/minecraft/item/DebugStickItem + m (Ljava/lang/Iterable;Ljava/lang/Object;Z)Ljava/lang/Object; method_7760 getAdjacentValue + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;)Ljava/lang/String; method_7761 func_195957_a + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2561;)V method_7762 sendMessage + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;Z)Lnet/minecraft/class_2680; method_7758 cycleProperty + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;ZLnet/minecraft/class_1799;)V method_7759 handleClick +c net/minecraft/class_1764 net/minecraft/item/CrossbowItem + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_7778 addChargedProjectile + m (Z)F method_7784 getRandomSoundPitch + m (Lnet/minecraft/class_1799;Z)V method_7782 setCharged + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1799;)Z method_7768 func_220010_a_ + m (Lnet/minecraft/class_1799;)Ljava/util/List; method_7785 getChargedProjectiles + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;Lnet/minecraft/class_1268;Lnet/minecraft/class_1799;FF)V method_7777 fireProjectiles + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;)Z method_7767 hasAmmo + m (Lnet/minecraft/class_1799;)I method_7775 getChargeTime + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1665; method_18814 createArrow + m (ILnet/minecraft/class_1799;)F method_7770 getCharge + m (Lnet/minecraft/class_1799;)V method_7766 clearProjectiles + m (Lnet/minecraft/class_1799;)Z method_7781 isCharged + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1792;)Z method_7772 hasChargedProjectile + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;ZZ)Z method_7765 func_220023_a + m (Ljava/util/Random;)[F method_7780 getRandomSoundPitches + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1309;)V method_20272 func_220017_a_ + m (Lnet/minecraft/class_1799;)F method_20309 func_220013_l + m (I)Lnet/minecraft/class_3414; method_7773 getSoundEvent + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;)V method_7769 fireProjectilesAfter + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;Lnet/minecraft/class_1268;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;FZFFF)V method_7763 fireProjectile + f Z field_7937 isLoadingStart + f Z field_7936 isLoadingMiddle +c net/minecraft/class_1765 net/minecraft/item/TallBlockItem +c net/minecraft/class_1766 net/minecraft/item/ToolItem + m ()F method_26366 getAttackDamage + m (Lnet/minecraft/class_1309;)V method_20273 func_220038_a + m (Lnet/minecraft/class_1309;)V method_20274 func_220039_b + f Ljava/util/Set; field_7941 effectiveBlocks + f F field_7940 efficiency + f F field_7939 attackDamage + f Lcom/google/common/collect/Multimap; field_23742 toolAttributes +c net/minecraft/class_1769 net/minecraft/item/DyeItem + m ()Lnet/minecraft/class_1767; method_7802 getDyeColor + m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_1769; method_7803 getItem + f Lnet/minecraft/class_1767; field_7969 dyeColor + f Ljava/util/Map; field_7968 COLOR_DYE_ITEM_MAP +c net/minecraft/class_1767 net/minecraft/item/DyeColor + m (Ljava/lang/String;Lnet/minecraft/class_1767;)Lnet/minecraft/class_1767; method_7793 byTranslationKey + m (Lnet/minecraft/class_1767;)Ljava/lang/Integer; method_7795 func_199793_b + m ()Ljava/lang/String; toString toString + m ()[Lnet/minecraft/class_1767; values values + m ()Ljava/lang/String; method_7792 getTranslationKey + m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_1767; method_7797 func_199794_a + m ()I method_7789 getId + m ()Lnet/minecraft/class_3620; method_7794 getMapColor + m (I)Lnet/minecraft/class_1767; method_7791 byId + m (Ljava/lang/String;)Lnet/minecraft/class_1767; valueOf valueOf + m (I)Lnet/minecraft/class_1767; method_7786 byFireworkColor + m ()[F method_7787 getColorComponentValues + m ()I method_7790 getFireworkColor + m ()I method_16357 getTextColor + m (I)[Lnet/minecraft/class_1767; method_7796 func_199795_c + f Lnet/minecraft/class_1767; field_7967 LIGHT_GRAY + f [Lnet/minecraft/class_1767; field_7953 $VALUES + f Lnet/minecraft/class_1767; field_7944 GRAY + f Lnet/minecraft/class_3620; field_7956 mapColor + f Lnet/minecraft/class_1767; field_7954 PINK + f I field_7965 id + f Lnet/minecraft/class_1767; field_7961 LIME + f Lnet/minecraft/class_1767; field_7947 YELLOW + f I field_7949 colorValue + f Lnet/minecraft/class_1767; field_7951 LIGHT_BLUE + f [Lnet/minecraft/class_1767; field_7959 VALUES + f Lnet/minecraft/class_1767; field_7958 MAGENTA + f I field_7962 swappedColorValue + f Lnet/minecraft/class_1767; field_7946 ORANGE + f [F field_7943 colorComponentValues + f I field_7960 fireworkColor + f Lnet/minecraft/class_1767; field_7952 WHITE + f I field_16537 textColor + f Lnet/minecraft/class_1767; field_7963 BLACK + f Lnet/minecraft/class_1767; field_7964 RED + f Ljava/lang/String; field_7948 translationKey + f Lnet/minecraft/class_1767; field_7942 GREEN + f Lnet/minecraft/class_1767; field_7957 BROWN + f Lnet/minecraft/class_1767; field_7966 BLUE + f Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap; field_7950 BY_FIREWORK_COLOR + f Lnet/minecraft/class_1767; field_7945 PURPLE + f Lnet/minecraft/class_1767; field_7955 CYAN +c net/minecraft/class_4058 net/minecraft/item/DyeableHorseArmorItem +c net/minecraft/class_4057 net/minecraft/item/DyeableArmorItem +c net/minecraft/class_1771 net/minecraft/item/EggItem +c net/minecraft/class_1768 net/minecraft/item/IDyeableArmorItem + m (Lnet/minecraft/class_1799;)Z method_7801 hasColor + m (Lnet/minecraft/class_1799;I)V method_7799 setColor + m (Lnet/minecraft/class_1799;)V method_7798 removeColor + m (Lnet/minecraft/class_1799;)I method_7800 getColor + m (Lnet/minecraft/class_1799;Ljava/util/List;)Lnet/minecraft/class_1799; method_19261 dyeItem +c net/minecraft/class_1770 net/minecraft/item/ElytraItem + m (Lnet/minecraft/class_1799;)Z method_7804 isUsable +c net/minecraft/class_1772 net/minecraft/item/EnchantedBookItem + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2499; method_7806 getEnchantments + m (Lnet/minecraft/class_1889;)Lnet/minecraft/class_1799; method_7808 getEnchantedItemStack + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1889;)V method_7807 addEnchantment +c net/minecraft/class_1773 net/minecraft/item/MapItem +c net/minecraft/class_1774 net/minecraft/item/EnderCrystalItem +c net/minecraft/class_1775 net/minecraft/item/EnchantedGoldenAppleItem +c net/minecraft/class_1776 net/minecraft/item/EnderPearlItem +c net/minecraft/class_1777 net/minecraft/item/EnderEyeItem +c net/minecraft/client/main/Main net/minecraft/client/main/Main + m (Ljoptsimple/OptionSet;Ljoptsimple/OptionSpec;)Ljava/lang/Object; method_11428 getValue + m (Ljava/lang/Integer;)Ljava/util/OptionalInt; method_21612 toOptionalInt + m (Ljava/lang/String;)Z method_11429 isNotEmpty + m ([Ljava/lang/String;)V main main + m ()Lorg/apache/logging/log4j/Logger; method_22316 func_229731_a_ + f Lorg/apache/logging/log4j/Logger; field_12138 LOGGER +c net/minecraft/client/main/Main$2 net/minecraft/client/main/Main$2 + m ()V run run +c net/minecraft/client/main/Main$1 net/minecraft/client/main/Main$1 + m ()Ljava/net/PasswordAuthentication; getPasswordAuthentication getPasswordAuthentication + f Ljava/lang/String; field_12139 field_178749_a + f Ljava/lang/String; field_12140 field_178748_b +c net/minecraft/client/main/Main$3 net/minecraft/client/main/Main$3 + m ()V run run + f Lnet/minecraft/class_310; field_20601 field_229732_a_ +c net/minecraft/class_1778 net/minecraft/item/FireChargeItem + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_18453 playUseSound +c net/minecraft/class_1779 net/minecraft/item/ExperienceBottleItem +c net/minecraft/class_1780 net/minecraft/item/FireworkStarItem + m (Lnet/minecraft/class_2487;Ljava/util/List;)V method_7809 addTooltip + m (I)Lnet/minecraft/class_2561; method_7810 func_200297_a + m (Lnet/minecraft/class_5250;[I)Lnet/minecraft/class_2561; method_7811 func_200298_a_ +c net/minecraft/class_1781 net/minecraft/item/FireworkRocketItem +c net/minecraft/class_1781$class_1782 net/minecraft/item/FireworkRocketItem$Shape + m ()I method_7816 getIndex + m (I)[Lnet/minecraft/class_1781$class_1782; method_7815 func_199797_b + m ()Ljava/lang/String; method_7812 getShapeName + m (Ljava/lang/String;)Lnet/minecraft/class_1781$class_1782; valueOf valueOf + m ()[Lnet/minecraft/class_1781$class_1782; values values + m (Lnet/minecraft/class_1781$class_1782;)I method_7814 func_199796_a + m (I)Lnet/minecraft/class_1781$class_1782; method_7813 get + f Lnet/minecraft/class_1781$class_1782; field_7977 LARGE_BALL + f Lnet/minecraft/class_1781$class_1782; field_7973 STAR + f I field_7972 index + f Lnet/minecraft/class_1781$class_1782; field_7974 CREEPER + f Lnet/minecraft/class_1781$class_1782; field_7970 BURST + f Ljava/lang/String; field_7971 shapeName + f [Lnet/minecraft/class_1781$class_1782; field_7978 $VALUES + f Lnet/minecraft/class_1781$class_1782; field_7976 SMALL_BALL + f [Lnet/minecraft/class_1781$class_1782; field_7975 VALUES +c net/minecraft/class_1787 net/minecraft/item/FishingRodItem + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20275 func_220000_a_ +c net/minecraft/class_1785 net/minecraft/item/FishBucketItem + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;)V method_7824 placeFish + f Lnet/minecraft/class_1299; field_7991 fishType +c net/minecraft/class_1758 net/minecraft/item/OnAStickItem + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20271 func_234682_a_ + f Lnet/minecraft/class_1299; field_23253 temptedEntity + f I field_23743 damageAmount +c net/minecraft/class_1786 net/minecraft/item/FlintAndSteelItem + m (Lnet/minecraft/class_1838;Lnet/minecraft/class_1657;)V method_20277 func_219999_b + m (Lnet/minecraft/class_1838;Lnet/minecraft/class_1657;)V method_20276 func_219998_a +c net/minecraft/class_1790 net/minecraft/item/HangingEntityItem + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2350;Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;)Z method_7834 canPlace + f Lnet/minecraft/class_1299; field_7999 hangingEntity +c net/minecraft/class_1788 net/minecraft/item/OperatorOnlyItem +c net/minecraft/class_4480 net/minecraft/item/HoneyBottleItem +c net/minecraft/class_1794 net/minecraft/item/HoeItem + m (Lnet/minecraft/class_1838;Lnet/minecraft/class_1657;)V method_20279 func_220043_a + f Ljava/util/Map; field_8023 HOE_LOOKUP + f Ljava/util/Set; field_22486 EFFECTIVE_ON_BLOCKS +c net/minecraft/class_1792 net/minecraft/item/Item + m ()Ljava/lang/String; toString toString + m (I)Lnet/minecraft/class_1792; method_7875 getItemById + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1814; method_7862 getRarity + m ()I method_7882 getMaxStackSize + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7878 getIsRepairable + m ()Lnet/minecraft/class_2561; method_7848 getName + m (Lnet/minecraft/class_1761;Lnet/minecraft/class_2371;)V method_7850 fillItemGroup + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_7873 hitEntity + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1271; method_7836 onItemRightClick + m ()Ljava/lang/String; method_7869 getDefaultTranslationKey + m ()Lnet/minecraft/class_3414; method_21830 getEatSound + m (Lnet/minecraft/class_1838;)Lnet/minecraft/class_1269; method_7884 onItemUse + m ()Lnet/minecraft/class_1761; method_7859 getGroup + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2561; method_7864 getDisplayName + m (Lnet/minecraft/class_1304;)Lcom/google/common/collect/Multimap; method_7844 getAttributeModifiers + m (Lnet/minecraft/class_3494;)Z method_7855 isIn + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1799; method_7861 onItemUseFinish + m ()Z method_7887 shouldSyncTag + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;I)V method_7840 onPlayerStoppedUsing + m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_7866 getTranslationKey + m (Lnet/minecraft/class_2680;)Z method_7856 canHarvestBlock + m ()Z method_7857 hasContainerItem + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_3959$class_242;)Lnet/minecraft/class_3965; method_7872 rayTrace + m ()Ljava/lang/String; method_7876 getTranslationKey + m ()I method_7837 getItemEnchantability + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;I)V method_7852 onUse + m ()Lnet/minecraft/class_1799; method_7854 getDefaultInstance + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)Z method_7885 canPlayerBreakBlockWhileHolding + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_1792; method_7867 getItemFromBlock + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1839; method_7853 getUseAction + m (Lnet/minecraft/class_1799;)Z method_7838 isCrossbow + m ()Z method_24358 isImmuneToFire + m (Lnet/minecraft/class_1282;)Z method_24357 isDamageable + m (Lnet/minecraft/class_1799;)I method_7881 getUseDuration + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;IZ)V method_7888 inventoryTick + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_1309;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_7847 itemInteractionForEntity + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2680;)F method_7865 getDestroySpeed + m ()I method_7841 getMaxDamage + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Ljava/util/List;Lnet/minecraft/class_1836;)V method_7851 addInformation + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)Z method_7879 onBlockDestroyed + m ()Z method_7846 isDamageable + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;)V method_7843 onCreated + m (Lnet/minecraft/class_1792;)I method_7880 getIdFromItem + m (Lnet/minecraft/class_1761;)Z method_7877 isInGroup + m ()Lnet/minecraft/class_1792; method_7858 getContainerItem + m (Lnet/minecraft/class_1799;)Z method_7886 hasEffect + m (Lnet/minecraft/class_2487;)Z method_7860 updateItemStackNBT + m ()Lnet/minecraft/class_3414; method_21831 getDrinkSound + m ()Z method_19263 isFood + m (Lnet/minecraft/class_1799;)Z method_7870 isEnchantable + m ()Z method_16698 isComplex + m ()Lnet/minecraft/class_4174; method_19264 getFood + f Z field_21979 burnable + f Ljava/util/UUID; field_8006 ATTACK_DAMAGE_MODIFIER + f Ljava/util/Map; field_8003 BLOCK_TO_ITEM + f Lnet/minecraft/class_4174; field_18672 food + f I field_8013 maxStackSize + f Lnet/minecraft/class_1761; field_8004 group + f Lnet/minecraft/class_1814; field_8009 rarity + f Ljava/util/UUID; field_8001 ATTACK_SPEED_MODIFIER + f Ljava/lang/String; field_8014 translationKey + f Lnet/minecraft/class_1792; field_8008 containerItem + f Ljava/util/Random; field_8005 random + f I field_8012 maxDamage +c net/minecraft/class_1792$1 net/minecraft/item/Item$1 + f [I field_8021 field_210316_a +c net/minecraft/class_1792$class_1793 net/minecraft/item/Item$Properties + m (Lnet/minecraft/class_1792$class_1793;)Lnet/minecraft/class_4174; method_19266 func_221539_f + m (I)Lnet/minecraft/class_1792$class_1793; method_7898 defaultMaxDamage + m (Lnet/minecraft/class_4174;)Lnet/minecraft/class_1792$class_1793; method_19265 food + m (Lnet/minecraft/class_1792$class_1793;)Lnet/minecraft/class_1761; method_7897 access$000 + m (Lnet/minecraft/class_1792$class_1793;)Lnet/minecraft/class_1792; method_7890 func_208101_c + m (I)Lnet/minecraft/class_1792$class_1793; method_7895 maxDamage + m (Lnet/minecraft/class_1761;)Lnet/minecraft/class_1792$class_1793; method_7892 group + m (I)Lnet/minecraft/class_1792$class_1793; method_7889 maxStackSize + m (Lnet/minecraft/class_1792$class_1793;)I method_7893 func_208100_e + m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_1792$class_1793; method_7896 containerItem + m (Lnet/minecraft/class_1792$class_1793;)I method_7891 access$300 + m (Lnet/minecraft/class_1814;)Lnet/minecraft/class_1792$class_1793; method_7894 rarity + m (Lnet/minecraft/class_1792$class_1793;)Z method_24360 func_234690_g_ + m ()Lnet/minecraft/class_1792$class_1793; method_24359 isImmuneToFire + m (Lnet/minecraft/class_1792$class_1793;)Lnet/minecraft/class_1814; method_7899 func_208099_b + f Lnet/minecraft/class_4174; field_18673 food + f I field_8020 maxStackSize + f Lnet/minecraft/class_1792; field_8018 containerItem + f Lnet/minecraft/class_1761; field_8017 group + f Z field_21980 immuneToFire + f Lnet/minecraft/class_1814; field_8016 rarity + f I field_8019 maxDamage +c net/minecraft/class_4059 net/minecraft/item/HorseArmorItem + m ()Lnet/minecraft/class_2960; method_18454 getArmorTexture + m ()I method_18455 getArmorValue + f Ljava/lang/String; field_18137 field_219979_b + f I field_18136 armorValue +c net/minecraft/class_1795 net/minecraft/item/ItemFrameItem +c net/minecraft/class_1796 net/minecraft/util/CooldownTracker + m (Lnet/minecraft/class_1792;I)V method_7902 notifyOnSet + m (Lnet/minecraft/class_1792;I)V method_7906 setCooldown + m (Lnet/minecraft/class_1792;)V method_7901 notifyOnRemove + m (Lnet/minecraft/class_1792;)Z method_7904 hasCooldown + m ()V method_7903 tick + m (Lnet/minecraft/class_1792;)V method_7900 removeCooldown + m (Lnet/minecraft/class_1792;F)F method_7905 getCooldown + f I field_8025 ticks + f Ljava/util/Map; field_8024 cooldowns +c net/minecraft/class_1796$class_1797 net/minecraft/util/CooldownTracker$Cooldown + m (Lnet/minecraft/class_1796$class_1797;)I method_7907 access$100 + m (Lnet/minecraft/class_1796$class_1797;)I method_7908 access$000 + f Lnet/minecraft/class_1796; field_8026 field_185139_c + f I field_8028 createTicks + f I field_8027 expireTicks +c net/minecraft/class_1796$1 net/minecraft/util/CooldownTracker$1 +c net/minecraft/class_1799 net/minecraft/item/ItemStack + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)V method_7952 onBlockDestroyed + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1309;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_7920 interactWithEntity + m (ILnet/minecraft/class_1799$class_5422;)Z method_30267 func_242394_a + m ()Lnet/minecraft/class_1799; method_7972 copy + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;I)V method_7930 onPlayerStoppedUsing + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1657;)V method_7979 hitEntity + m ()I method_7965 getAnimationsToGo + m (Lnet/minecraft/class_1320;Lnet/minecraft/class_1322;Lnet/minecraft/class_1304;)V method_7916 addAttributeModifier + m (Lnet/minecraft/class_1799;)Z method_7962 isItemEqual + m ()Lnet/minecraft/class_1297; method_27319 getAttachedEntity + m (Ljava/lang/String;)Lnet/minecraft/class_2487; method_7941 getChildTag + m (Ljava/lang/String;)V method_7983 removeChildTag + m ()Z method_7985 hasTag + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1792; method_28379 func_234706_f_ + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7973 areItemStacksEqual + m ()Z method_7958 hasEffect + m (I)V method_7933 grow + m ()Lnet/minecraft/class_1533; method_7945 getItemFrame + m ()Z method_7961 isOnItemFrame + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28376 func_234698_a_ + m ()Z method_7986 isDamaged + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;I)V method_7982 onCrafting + m (Ljava/util/List;Lnet/minecraft/class_2487;Lnet/minecraft/class_1887;)V method_17869 func_222123_a_ + m ()I method_7947 getCount + m ()Lnet/minecraft/class_2561; method_7964 getDisplayName + m (Ljava/text/DecimalFormat;)V method_26963 func_234699_a_ + m (Lnet/minecraft/class_2680;)Z method_7951 canHarvestBlock + m (Ljava/lang/String;)Lnet/minecraft/class_2487; method_7911 getOrCreateChildTag + m (Lnet/minecraft/class_1799;)Z method_7929 isItemEqualIgnoreDurability + m ()V method_7925 clearCustomName + m ()Lnet/minecraft/class_2499; method_7921 getEnchantmentTagList + m ()V method_7957 updateEmptyState + m (Lnet/minecraft/class_2694;Lnet/minecraft/class_2694;)Z method_7918 isStateAndTileEntityEqual + m (Lnet/minecraft/class_1304;)Lcom/google/common/collect/Multimap; method_7926 getAttributeModifiers + m ()Lnet/minecraft/class_3414; method_21832 getDrinkSound + m ()Lnet/minecraft/class_2487; method_7948 getOrCreateTag + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1836;)Ljava/util/List; method_7950 getTooltip + m ()Ljava/lang/String; toString toString + m ()I method_7914 getMaxStackSize + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7975 areItemStackTagsEqual + m (I)V method_7927 setRepairCost + m ()I method_7919 getDamage + m (I)V method_7934 shrink + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;IZ)V method_7917 inventoryTick + m (Lnet/minecraft/class_1887;I)V method_7978 addEnchantment + m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_1799; method_7977 setDisplayName + m ()I method_7935 getUseDuration + m ()Lnet/minecraft/class_2561; method_7954 getTextComponent + m (ILnet/minecraft/class_1309;Ljava/util/function/Consumer;)V method_7956 damageItem + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1799; method_7915 read + m ()I method_30266 func_242393_J + m (Lnet/minecraft/class_1799;)Z method_7968 isItemStackEqual + m ()Lnet/minecraft/class_1839; method_7976 getUseAction + m ()Lnet/minecraft/class_2487; method_7969 getTag + m ()Z method_19267 isFood + m (I)V method_7912 setAnimationsToGo + m (Lnet/minecraft/class_5415;Lnet/minecraft/class_2694;)Z method_7944 canPlaceOn + m ()Lnet/minecraft/class_3414; method_21833 getEatSound + m ()Z method_7923 isEnchantable + m ()I method_7936 getMaxDamage + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_7953 write + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1799; method_7910 onItemUseFinish + m ()Z method_7946 isStackable + m ()Lnet/minecraft/class_1792; method_7909 getItem + m ()Lnet/minecraft/class_1814; method_7932 getRarity + m ()Ljava/lang/String; method_7922 getTranslationKey + m ()I method_7928 getRepairCost + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7987 areItemsEqualIgnoreDurability + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1271; method_7913 useItemRightClick + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;I)V method_7949 onItemUsed + m ()Z method_7967 isCrossbowStack + m (Lnet/minecraft/class_2487;)V method_7980 setTag + m (I)V method_7974 setDamage + m (Lnet/minecraft/class_5250;)Lnet/minecraft/class_5250; method_7955 func_222119_a_ + m (Ljava/util/List;Lnet/minecraft/class_2499;)V method_17870 addEnchantmentTooltips + m (I)Lnet/minecraft/class_1799; method_7971 split + m (Ljava/lang/String;Lnet/minecraft/class_2520;)V method_7959 setTagInfo + m ()Z method_7938 hasDisplayName + m (Lnet/minecraft/class_2680;)F method_7924 getDestroySpeed + m (Ljava/lang/String;)Ljava/util/Collection; method_7937 getPlacementTooltip + m (ILjava/util/Random;Lnet/minecraft/class_3222;)Z method_7970 attemptDamageItem + m (Lnet/minecraft/class_1799;)Ljava/util/Optional; method_28377 func_234704_d_ + m (I)V method_7939 setCount + m (Lnet/minecraft/class_1799$class_5422;)V method_30268 func_242395_a + m ()Z method_7960 isEmpty + m ()Z method_7963 isDamageable + m ()Z method_7942 isEnchanted + m (Lnet/minecraft/class_1297;)V method_27320 setAttachedEntity + m (Lnet/minecraft/class_1799;)Ljava/lang/Integer; method_28378 func_234705_e_ + m (Lnet/minecraft/class_1838;)Lnet/minecraft/class_1269; method_7981 onItemUse + m (Lnet/minecraft/class_5415;Lnet/minecraft/class_2694;)Z method_7940 canDestroy + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7984 areItemsEqual + m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_7966 func_234702_a_ + f Z field_8035 canDestroyCacheResult + f Lcom/mojang/serialization/Codec; field_24671 CODEC + f I field_8031 count + f Lnet/minecraft/class_2694; field_8039 canDestroyCacheBlock + f Lnet/minecraft/class_2487; field_8040 tag + f Lnet/minecraft/class_1297; field_24093 attachedEntity + f Lnet/minecraft/class_1799; field_8037 EMPTY + f Lnet/minecraft/class_1792; field_8038 item + f Z field_8036 isEmpty + f Z field_8034 canPlaceOnCacheResult + f I field_8030 animationsToGo + f Lnet/minecraft/class_2694; field_8032 canPlaceOnCacheBlock + f Lnet/minecraft/class_2583; field_24092 LORE_STYLE + f Lorg/apache/logging/log4j/Logger; field_8033 LOGGER + f Ljava/text/DecimalFormat; field_8029 DECIMALFORMAT +c net/minecraft/class_1799$class_5422 net/minecraft/item/ItemStack$TooltipDisplayFlags + m (Ljava/lang/String;)Lnet/minecraft/class_1799$class_5422; valueOf valueOf + m ()I method_30269 func_242397_a + m ()[Lnet/minecraft/class_1799$class_5422; values values + f Lnet/minecraft/class_1799$class_5422; field_25773 ADDITIONAL + f Lnet/minecraft/class_1799$class_5422; field_25768 ENCHANTMENTS + f Lnet/minecraft/class_1799$class_5422; field_25774 DYE + f Lnet/minecraft/class_1799$class_5422; field_25772 CAN_PLACE + f Lnet/minecraft/class_1799$class_5422; field_25771 CAN_DESTROY + f Lnet/minecraft/class_1799$class_5422; field_25769 MODIFIERS + f [Lnet/minecraft/class_1799$class_5422; field_25776 $VALUES + f I field_25775 field_242396_h + f Lnet/minecraft/class_1799$class_5422; field_25770 UNBREAKABLE +c net/minecraft/class_1798 net/minecraft/item/BlockNamedItem +c net/minecraft/class_5328 net/minecraft/util/DrinkHelper + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1271; method_29282 startDrinking + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;Z)Lnet/minecraft/class_1799; method_30270 fill + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_30012 fill +c net/minecraft/class_1801 net/minecraft/item/KnowledgeBookItem + f Lorg/apache/logging/log4j/Logger; field_8042 LOGGER +c net/minecraft/class_1802 net/minecraft/item/Items + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_1792; method_7989 register + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1761;)Lnet/minecraft/class_1792; method_7988 register + m (Ljava/lang/String;Lnet/minecraft/class_1792;)Lnet/minecraft/class_1792; method_7991 register + m (Lnet/minecraft/class_1747;)Lnet/minecraft/class_1792; method_7993 register + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1792;)Lnet/minecraft/class_1792; method_7990 register + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;)Lnet/minecraft/class_1792; method_7992 register + f Lnet/minecraft/class_1792; field_21990 WARPED_ROOTS + f Lnet/minecraft/class_1792; field_16538 JIGSAW + f Lnet/minecraft/class_1792; field_8690 PURPLE_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_20416 BEEHIVE + f Lnet/minecraft/class_1792; field_8573 CREEPER_BANNER_PATTERN + f Lnet/minecraft/class_1792; field_8069 TNT_MINECART + f Lnet/minecraft/class_1792; field_8687 EMERALD + f Lnet/minecraft/class_1792; field_8790 NETHER_WART + f Lnet/minecraft/class_1792; field_8508 MAGENTA_CONCRETE + f Lnet/minecraft/class_1792; field_8363 LIGHT_GRAY_STAINED_GLASS + f Lnet/minecraft/class_1792; field_8599 IRON_ORE + f Lnet/minecraft/class_1792; field_8146 LIGHT_GRAY_BED + f Lnet/minecraft/class_1792; field_22030 NETHERITE_BOOTS + f Lnet/minecraft/class_1792; field_8664 GREEN_CARPET + f Lnet/minecraft/class_1792; field_22007 WARPED_STAIRS + f Lnet/minecraft/class_1792; field_8138 DARK_OAK_BOAT + f Lnet/minecraft/class_1792; field_8229 BREAD + f Lnet/minecraft/class_1792; field_8860 DIORITE_STAIRS + f Lnet/minecraft/class_1792; field_8787 DIAMOND_ORE + f Lnet/minecraft/class_1792; field_8629 CYAN_BANNER + f Lnet/minecraft/class_1792; field_8564 SILVERFISH_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8628 BRAIN_CORAL_FAN + f Lnet/minecraft/class_1792; field_8627 GRAY_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8673 PRISMARINE_BRICK_STAIRS + f Lnet/minecraft/class_1792; field_8672 LIME_TERRACOTTA + f Lnet/minecraft/class_1792; field_20411 POLISHED_ANDESITE + f Lnet/minecraft/class_1792; field_22003 WARPED_TRAPDOOR + f Lnet/minecraft/class_1792; field_8265 GHAST_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8492 ORANGE_DYE + f Lnet/minecraft/class_1792; field_20417 HONEY_BOTTLE + f Lnet/minecraft/class_1792; field_8478 TROPICAL_FISH_BUCKET + f Lnet/minecraft/class_1792; field_8322 GOLDEN_SHOVEL + f Lnet/minecraft/class_1792; field_8891 SKULL_BANNER_PATTERN + f Lnet/minecraft/class_1792; field_8836 HOPPER_MINECART + f Lnet/minecraft/class_1792; field_8090 TURTLE_HELMET + f Lnet/minecraft/class_1792; field_8164 BLUE_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8143 ITEM_FRAME + f Lnet/minecraft/class_1792; field_8574 POTION + f Lnet/minecraft/class_1792; field_8364 LIGHT_BLUE_CONCRETE + f Lnet/minecraft/class_1792; field_8685 CYAN_STAINED_GLASS + f Lnet/minecraft/class_1792; field_8390 CYAN_BED + f Lnet/minecraft/class_1792; field_8145 FLINT + f Lnet/minecraft/class_1792; field_8476 COAL_ORE + f Lnet/minecraft/class_1792; field_8866 COMMAND_BLOCK + f Lnet/minecraft/class_1792; field_8267 LEATHER_HELMET + f Lnet/minecraft/class_1792; field_8228 POLISHED_GRANITE_SLAB + f Lnet/minecraft/class_1792; field_8288 TOTEM_OF_UNDYING + f Lnet/minecraft/class_1792; field_8405 PURPLE_BANNER + f Lnet/minecraft/class_1792; field_8300 SKELETON_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8452 BUBBLE_CORAL_FAN + f Lnet/minecraft/class_1792; field_8451 LIGHT_GRAY_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8270 GRASS_BLOCK + f Lnet/minecraft/class_1792; field_8409 GUARDIAN_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8669 MAGENTA_DYE + f Lnet/minecraft/class_1792; field_8853 PINK_TERRACOTTA + f Lnet/minecraft/class_1792; field_8772 LOOM + f Lnet/minecraft/class_1792; field_8729 NETHER_BRICK + f Lnet/minecraft/class_1792; field_8857 COMPARATOR + f Lnet/minecraft/class_1792; field_8558 LIGHT_GRAY_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8674 WRITABLE_BOOK + f Lnet/minecraft/class_1792; field_8070 GHAST_TEAR + f Lnet/minecraft/class_1792; field_8341 WHITE_CONCRETE + f Lnet/minecraft/class_1792; field_8770 PINK_STAINED_GLASS + f Lnet/minecraft/class_1792; field_19052 LIGHT_GRAY_WOOL + f Lnet/minecraft/class_1792; field_8110 GRAVEL + f Lnet/minecraft/class_1792; field_8417 PINK_BED + f Lnet/minecraft/class_1792; field_22028 NETHERITE_CHESTPLATE + f Lnet/minecraft/class_1792; field_8115 BLUE_CARPET + f Lnet/minecraft/class_1792; field_8311 JUNGLE_STAIRS + f Lnet/minecraft/class_1792; field_8317 WHEAT_SEEDS + f Lnet/minecraft/class_1792; field_8302 RED_NETHER_BRICK_STAIRS + f Lnet/minecraft/class_1792; field_21997 CRIMSON_FENCE_GATE + f Lnet/minecraft/class_1792; field_8212 OAK_STAIRS + f Lnet/minecraft/class_1792; field_8412 QUARTZ_SLAB + f Lnet/minecraft/class_1792; field_8554 WET_SPONGE + f Lnet/minecraft/class_1792; field_8549 DEAD_TUBE_CORAL + f Lnet/minecraft/class_1792; field_8548 LIME_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8730 JUNGLE_BOAT + f Lnet/minecraft/class_1792; field_20403 POLISHED_DIORITE + f Lnet/minecraft/class_1792; field_8617 GRAY_BANNER + f Lnet/minecraft/class_1792; field_8607 SHEEP_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8795 EVOKER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8759 LAPIS_LAZULI + f Lnet/minecraft/class_1792; field_20406 DARK_PRISMARINE + f Lnet/minecraft/class_1792; field_8717 LIGHT_BLUE_TERRACOTTA + f Lnet/minecraft/class_1792; field_20415 BEE_NEST + f Lnet/minecraft/class_1792; field_8714 SALMON_BUCKET + f Lnet/minecraft/class_1792; field_8431 STONE_HOE + f Lnet/minecraft/class_1792; field_8531 DARK_OAK_BUTTON + f Lnet/minecraft/class_1792; field_8844 DARK_OAK_TRAPDOOR + f Lnet/minecraft/class_1792; field_8498 FLOWER_BANNER_PATTERN + f Lnet/minecraft/class_1792; field_8155 QUARTZ + f Lnet/minecraft/class_1792; field_8238 STRUCTURE_BLOCK + f Lnet/minecraft/class_1792; field_8593 CYAN_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8565 JUKEBOX + f Lnet/minecraft/class_1792; field_21989 CRIMSON_ROOTS + f Lnet/minecraft/class_1792; field_8360 WRITTEN_BOOK + f Lnet/minecraft/class_1792; field_8397 GOLD_NUGGET + f Lnet/minecraft/class_1792; field_8771 ORANGE_CONCRETE + f Lnet/minecraft/class_1792; field_8507 GRAY_STAINED_GLASS + f Lnet/minecraft/class_1792; field_8294 BROWN_CARPET + f Lnet/minecraft/class_1792; field_22006 CRIMSON_STAIRS + f Lnet/minecraft/class_1792; field_8775 GOLD_ORE + f Lnet/minecraft/class_1792; field_21998 WARPED_FENCE_GATE + f Lnet/minecraft/class_1792; field_8106 CHEST + f Lnet/minecraft/class_1792; field_8754 GRAY_BED + f Lnet/minecraft/class_1792; field_22029 NETHERITE_LEGGINGS + f Lnet/minecraft/class_1792; field_8094 ACACIA_BOAT + f Lnet/minecraft/class_1792; field_8861 WHEAT + f Lnet/minecraft/class_1792; field_8316 POLISHED_ANDESITE_STAIRS + f Lnet/minecraft/class_1792; field_8855 LIGHT_GRAY_BANNER + f Lnet/minecraft/class_1792; field_8480 SHULKER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8521 TUBE_CORAL_FAN + f Lnet/minecraft/class_1792; field_8520 PINK_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8280 GLASS + f Lnet/minecraft/class_1792; field_20407 ANDESITE + f Lnet/minecraft/class_1792; field_18005 FOX_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8446 WHITE_DYE + f Lnet/minecraft/class_1792; field_8386 PRISMARINE_STAIRS + f Lnet/minecraft/class_1792; field_8385 YELLOW_TERRACOTTA + f Lnet/minecraft/class_1792; field_8666 COD_BUCKET + f Lnet/minecraft/class_1792; field_8845 GOLDEN_SWORD + f Lnet/minecraft/class_1792; field_22004 CRIMSON_BUTTON + f Lnet/minecraft/class_1792; field_22002 CRIMSON_TRAPDOOR + f Lnet/minecraft/class_1792; field_8117 HORSE_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8192 YELLOW_DYE + f Lnet/minecraft/class_1792; field_23256 LODESTONE + f Lnet/minecraft/class_1792; field_8303 GOLDEN_HOE + f Lnet/minecraft/class_1792; field_23831 PIGLIN_BANNER_PATTERN + f Lnet/minecraft/class_1792; field_8504 RABBIT + f Lnet/minecraft/class_1792; field_8567 POTATO + f Lnet/minecraft/class_1792; field_8711 FERMENTED_SPIDER_EYE + f Lnet/minecraft/class_1792; field_21991 NETHER_SPROUTS + f Lnet/minecraft/class_1792; field_8892 PAINTING + f Lnet/minecraft/class_1792; field_8684 SPRUCE_LOG + f Lnet/minecraft/class_1792; field_8603 DIAMOND_BLOCK + f Lnet/minecraft/class_1792; field_8361 KNOWLEDGE_BOOK + f Lnet/minecraft/class_1792; field_8295 GREEN_BANNER + f Lnet/minecraft/class_1792; field_8185 SPIDER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8131 LIME_DYE + f Lnet/minecraft/class_1792; field_8382 PODZOL + f Lnet/minecraft/class_1792; field_8055 LAPIS_BLOCK + f Lnet/minecraft/class_1792; field_22018 NETHERITE_BRICKS + f Lnet/minecraft/class_1792; field_8225 INFESTED_STONE + f Lnet/minecraft/class_1792; field_21992 WEEPING_VINES + f Lnet/minecraft/class_1792; field_21984 STRIPPED_WARPED_STEM + f Lnet/minecraft/class_1792; field_17530 COMPOSTER + f Lnet/minecraft/class_1792; field_8752 COOKED_RABBIT + f Lnet/minecraft/class_1792; field_8170 BIRCH_LOG + f Lnet/minecraft/class_1792; field_8183 BLAZE_POWDER + f Lnet/minecraft/class_1792; field_8688 DEBUG_STICK + f Lnet/minecraft/class_1792; field_8668 BEACON + f Lnet/minecraft/class_1792; field_8307 SQUID_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8465 CRAFTING_TABLE + f Lnet/minecraft/class_1792; field_19053 CYAN_WOOL + f Lnet/minecraft/class_1792; field_21086 HONEY_BLOCK + f Lnet/minecraft/class_1792; field_8621 BRICK + f Lnet/minecraft/class_1792; field_8335 GOLDEN_PICKAXE + f Lnet/minecraft/class_1792; field_8159 MOJANG_BANNER_PATTERN + f Lnet/minecraft/class_1792; field_8662 PRISMARINE_SHARD + f Lnet/minecraft/class_1792; field_8161 SCUTE + f Lnet/minecraft/class_1792; field_8437 BROWN_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8838 PURPLE_STAINED_GLASS + f Lnet/minecraft/class_1792; field_23140 NETHER_GOLD_ORE + f Lnet/minecraft/class_1792; field_8074 FLOWER_POT + f Lnet/minecraft/class_1792; field_8469 GLASS_BOTTLE + f Lnet/minecraft/class_1792; field_8262 PURPLE_BED + f Lnet/minecraft/class_1792; field_8389 PORKCHOP + f Lnet/minecraft/class_1792; field_8815 SHULKER_SHELL + f Lnet/minecraft/class_1792; field_8577 LEATHER_CHESTPLATE + f Lnet/minecraft/class_1792; field_8266 SMOOTH_RED_SANDSTONE_SLAB + f Lnet/minecraft/class_1792; field_8128 BLUE_BANNER + f Lnet/minecraft/class_1792; field_8232 SKELETON_HORSE_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8213 CYAN_SHULKER_BOX + f Lnet/minecraft/class_1792; field_22014 HOGLIN_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8273 LIGHT_BLUE_DYE + f Lnet/minecraft/class_1792; field_8831 DIRT + f Lnet/minecraft/class_1792; field_8696 CLAY_BALL + f Lnet/minecraft/class_1792; field_8825 GOLDEN_AXE + f Lnet/minecraft/class_1792; field_21087 HONEYCOMB_BLOCK + f Lnet/minecraft/class_1792; field_18674 GLOBE_BANNER_PATTERN + f Lnet/minecraft/class_1792; field_8434 PRISMARINE_CRYSTALS + f Lnet/minecraft/class_1792; field_8198 GREEN_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8179 CARROT + f Lnet/minecraft/class_1792; field_8680 SPIDER_EYE + f Lnet/minecraft/class_1792; field_8893 BLUE_BED + f Lnet/minecraft/class_1792; field_8261 COOKED_PORKCHOP + f Lnet/minecraft/class_1792; field_8583 OAK_LOG + f Lnet/minecraft/class_1792; field_8675 IRON_NUGGET + f Lnet/minecraft/class_1792; field_8576 MOSSY_STONE_BRICK_SLAB + f Lnet/minecraft/class_1792; field_8809 LAPIS_ORE + f Lnet/minecraft/class_1792; field_8460 COARSE_DIRT + f Lnet/minecraft/class_1792; field_8124 BROWN_BANNER + f Lnet/minecraft/class_1792; field_8881 SLIME_SPAWN_EGG + f Lnet/minecraft/class_1792; field_17538 JUNGLE_SAPLING + f Lnet/minecraft/class_1792; field_8258 WHITE_BED + f Lnet/minecraft/class_1792; field_8285 DIAMOND_BOOTS + f Lnet/minecraft/class_1792; field_8253 LIME_CARPET + f Lnet/minecraft/class_1792; field_8837 EMERALD_ORE + f Lnet/minecraft/class_1792; field_23841 CRACKED_POLISHED_BLACKSTONE_BRICKS + f Lnet/minecraft/class_1792; field_8087 TIPPED_ARROW + f Lnet/minecraft/class_1792; field_8600 STICK + f Lnet/minecraft/class_1792; field_8152 END_STONE_BRICK_STAIRS + f Lnet/minecraft/class_1792; field_8874 OAK_FENCE_GATE + f Lnet/minecraft/class_1792; field_8358 CHORUS_PLANT + f Lnet/minecraft/class_1792; field_8824 ORANGE_BANNER + f Lnet/minecraft/class_1792; field_8325 PILLAGER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8546 FIRE_CORAL + f Lnet/minecraft/class_1792; field_8545 SHULKER_BOX + f Lnet/minecraft/class_1792; field_18889 CUT_SANDSTONE_SLAB + f Lnet/minecraft/class_1792; field_17504 SPRUCE_LEAVES + f Lnet/minecraft/class_1792; field_8501 BROWN_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8499 QUARTZ_STAIRS + f Lnet/minecraft/class_1792; field_8781 STONE_BUTTON + f Lnet/minecraft/class_1792; field_8693 JACK_O_LANTERN + f Lnet/minecraft/class_1792; field_8751 DOLPHIN_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8846 TROPICAL_FISH + f Lnet/minecraft/class_1792; field_22016 SOUL_LANTERN + f Lnet/minecraft/class_1792; field_8725 REDSTONE + f Lnet/minecraft/class_1792; field_8406 WOODEN_AXE + f Lnet/minecraft/class_1792; field_8614 PHANTOM_MEMBRANE + f Lnet/minecraft/class_1792; field_8137 NETHER_STAR + f Lnet/minecraft/class_1792; field_8758 ACACIA_DOOR + f Lnet/minecraft/class_1792; field_8764 LIGHT_BLUE_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8530 REDSTONE_TORCH + f Lnet/minecraft/class_1792; field_17514 LILY_OF_THE_VALLEY + f Lnet/minecraft/class_1792; field_8728 ZOMBIE_HORSE_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8726 CHICKEN + f Lnet/minecraft/class_1792; field_19047 LIGHT_BLUE_WOOL + f Lnet/minecraft/class_1792; field_8484 BLUE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8393 ORANGE_STAINED_GLASS + f Lnet/minecraft/class_1792; field_8059 ORANGE_BED + f Lnet/minecraft/class_1792; field_8862 GOLDEN_HELMET + f Lnet/minecraft/class_1792; field_17539 ACACIA_SAPLING + f Lnet/minecraft/class_1792; field_8580 PINK_CARPET + f Lnet/minecraft/class_1792; field_8466 ENDER_CHEST + f Lnet/minecraft/class_1792; field_8653 SPRUCE_FENCE_GATE + f Lnet/minecraft/class_1792; field_8710 CHORUS_FLOWER + f Lnet/minecraft/class_1792; field_8428 BOWL + f Lnet/minecraft/class_1792; field_8053 STONE_STAIRS + f Lnet/minecraft/class_1792; field_8060 PETRIFIED_OAK_SLAB + f Lnet/minecraft/class_1792; field_17505 BIRCH_LEAVES + f Lnet/minecraft/class_1792; field_23141 RESPAWN_ANCHOR + f Lnet/minecraft/class_1792; field_8150 LINGERING_POTION + f Lnet/minecraft/class_1792; field_8671 MAGENTA_BANNER + f Lnet/minecraft/class_1792; field_8346 POLAR_BEAR_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8723 HORN_CORAL + f Lnet/minecraft/class_1792; field_8722 WHITE_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8162 AIR + f Lnet/minecraft/class_1792; field_8306 DONKEY_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8323 PUFFERFISH + f Lnet/minecraft/class_1792; field_8656 GREEN_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8655 ACTIVATOR_RAIL + f Lnet/minecraft/class_1792; field_16998 SWEET_BERRIES + f Lnet/minecraft/class_1792; field_8543 SNOWBALL + f Lnet/minecraft/class_1792; field_8167 WOODEN_HOE + f Lnet/minecraft/class_1792; field_8780 OAK_BUTTON + f Lnet/minecraft/class_1792; field_8376 OAK_TRAPDOOR + f Lnet/minecraft/class_1792; field_8864 NAUTILUS_SHELL + f Lnet/minecraft/class_1792; field_8741 PUMPKIN_PIE + f Lnet/minecraft/class_1792; field_8517 DARK_OAK_DOOR + f Lnet/minecraft/class_1792; field_8205 YELLOW_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8749 SNOW + f Lnet/minecraft/class_1792; field_17515 WITHER_ROSE + f Lnet/minecraft/class_1792; field_8394 BROWN_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8243 MAGENTA_STAINED_GLASS + f Lnet/minecraft/class_1792; field_19048 YELLOW_WOOL + f Lnet/minecraft/class_1792; field_22025 NETHERITE_AXE + f Lnet/minecraft/class_1792; field_8650 POLISHED_DIORITE_STAIRS + f Lnet/minecraft/class_1792; field_17522 MELON + f Lnet/minecraft/class_1792; field_8810 TORCH + f Lnet/minecraft/class_1792; field_8291 SMOOTH_STONE_SLAB + f Lnet/minecraft/class_1792; field_22490 WARPED_HYPHAE + f Lnet/minecraft/class_1792; field_8616 BRAIN_CORAL + f Lnet/minecraft/class_1792; field_8615 STRUCTURE_VOID + f Lnet/minecraft/class_1792; field_23838 POLISHED_BLACKSTONE_BRICK_SLAB + f Lnet/minecraft/class_1792; field_8436 SPLASH_POTION + f Lnet/minecraft/class_1792; field_8347 COOKED_MUTTON + f Lnet/minecraft/class_1792; field_22401 PIGLIN_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8433 COW_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8429 COD + f Lnet/minecraft/class_1792; field_8739 PURPLE_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_23830 QUARTZ_BRICKS + f Lnet/minecraft/class_1792; field_16315 BELL + f Lnet/minecraft/class_1792; field_8045 MINECART + f Lnet/minecraft/class_1792; field_8876 WOODEN_SHOVEL + f Lnet/minecraft/class_1792; field_23833 POLISHED_BLACKSTONE_WALL + f Lnet/minecraft/class_1792; field_22001 SOUL_TORCH + f Lnet/minecraft/class_1792; field_23984 MUSIC_DISC_PIGSTEP + f Lnet/minecraft/class_1792; field_8184 CARROT_ON_A_STICK + f Lnet/minecraft/class_1792; field_8438 BIRCH_DOOR + f Lnet/minecraft/class_1792; field_8487 ORANGE_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_23835 POLISHED_BLACKSTONE_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_17512 OXEYE_DAISY + f Lnet/minecraft/class_1792; field_23744 ZOGLIN_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8046 BEEF + f Lnet/minecraft/class_1792; field_8257 CYAN_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8561 LARGE_FERN + f Lnet/minecraft/class_1792; field_19045 ORANGE_WOOL + f Lnet/minecraft/class_1792; field_8142 YELLOW_CARPET + f Lnet/minecraft/class_1792; field_8443 SANDSTONE_STAIRS + f Lnet/minecraft/class_1792; field_17523 VINE + f Lnet/minecraft/class_1792; field_8056 END_ROD + f Lnet/minecraft/class_1792; field_17534 CAKE + f Lnet/minecraft/class_1792; field_8348 DIAMOND_LEGGINGS + f Lnet/minecraft/class_1792; field_23839 POLISHED_BLACKSTONE_BRICK_STAIRS + f Lnet/minecraft/class_1792; field_8236 SPECTRAL_ARROW + f Lnet/minecraft/class_1792; field_22026 NETHERITE_HOE + f Lnet/minecraft/class_1792; field_8275 MOSSY_COBBLESTONE_STAIRS + f Lnet/minecraft/class_1792; field_8539 WHITE_BANNER + f Lnet/minecraft/class_1792; field_25777 field_242399_ol + f Lnet/minecraft/class_1792; field_8538 BUBBLE_CORAL + f Lnet/minecraft/class_1792; field_8537 OBSERVER + f Lnet/minecraft/class_1792; field_18888 SANDSTONE_SLAB + f Lnet/minecraft/class_1792; field_17503 OAK_LEAVES + f Lnet/minecraft/class_1792; field_8503 CREEPER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8209 SALMON + f Lnet/minecraft/class_1792; field_8747 BLUE_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8746 QUARTZ_PILLAR + f Lnet/minecraft/class_1792; field_8175 SADDLE + f Lnet/minecraft/class_1792; field_8647 WOODEN_PICKAXE + f Lnet/minecraft/class_1792; field_23840 POLISHED_BLACKSTONE_BRICK_WALL + f Lnet/minecraft/class_1792; field_8801 GLOWSTONE + f Lnet/minecraft/class_1792; field_8604 REDSTONE_ORE + f Lnet/minecraft/class_1792; field_17513 CORNFLOWER + f Lnet/minecraft/class_1792; field_8199 JUNGLE_DOOR + f Lnet/minecraft/class_1792; field_8336 MAGENTA_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_16539 LANTERN + f Lnet/minecraft/class_1792; field_19046 MAGENTA_WOOL + f Lnet/minecraft/class_1792; field_8547 TRIDENT + f Lnet/minecraft/class_1792; field_23254 WARPED_FUNGUS_ON_A_STICK + f Lnet/minecraft/class_1792; field_8441 ZOMBIE_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8176 COOKED_BEEF + f Lnet/minecraft/class_1792; field_8562 PURPLE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8483 WHITE_STAINED_GLASS + f Lnet/minecraft/class_1792; field_8287 EXPERIENCE_BOTTLE + f Lnet/minecraft/class_1792; field_8634 ENDER_PEARL + f Lnet/minecraft/class_1792; field_8870 RED_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8095 YELLOW_STAINED_GLASS + f Lnet/minecraft/class_1792; field_19050 PINK_WOOL + f Lnet/minecraft/class_1792; field_8863 YELLOW_BED + f Lnet/minecraft/class_1792; field_8753 GOLDEN_BOOTS + f Lnet/minecraft/class_1792; field_8290 CYAN_CARPET + f Lnet/minecraft/class_1792; field_8122 SPRUCE_STAIRS + f Lnet/minecraft/class_1792; field_8858 SAND + f Lnet/minecraft/class_1792; field_8114 ACACIA_FENCE_GATE + f Lnet/minecraft/class_1792; field_8644 PURPUR_STAIRS + f Lnet/minecraft/class_1792; field_8524 STONE_BRICK_SLAB + f Lnet/minecraft/class_1792; field_17508 DARK_OAK_LEAVES + f Lnet/minecraft/class_1792; field_8486 SPRUCE_BOAT + f Lnet/minecraft/class_1792; field_8153 FEATHER + f Lnet/minecraft/class_1792; field_8608 GRANITE_STAIRS + f Lnet/minecraft/class_1792; field_8778 LIME_BANNER + f Lnet/minecraft/class_1792; field_8297 RAVAGER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8830 DEAD_FIRE_CORAL + f Lnet/minecraft/class_1792; field_8829 LIGHT_BLUE_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8374 ENDERMAN_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8794 INK_SAC + f Lnet/minecraft/class_1792; field_20397 POLISHED_GRANITE + f Lnet/minecraft/class_1792; field_20404 PRISMARINE + f Lnet/minecraft/class_1792; field_8043 ORANGE_TERRACOTTA + f Lnet/minecraft/class_1792; field_22017 SHROOMLIGHT + f Lnet/minecraft/class_1792; field_8103 MILK_BUCKET + f Lnet/minecraft/class_1792; field_8387 STONE_PICKAXE + f Lnet/minecraft/class_1792; field_8887 JUNGLE_BUTTON + f Lnet/minecraft/class_1792; field_8321 JUNGLE_TRAPDOOR + f Lnet/minecraft/class_1792; field_8619 REPEATER + f Lnet/minecraft/class_1792; field_8818 GRAY_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_17520 CACTUS + f Lnet/minecraft/class_1792; field_21987 CRIMSON_FUNGUS + f Lnet/minecraft/class_1792; field_19051 GRAY_WOOL + f Lnet/minecraft/class_1792; field_8096 BLACK_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8340 LIME_STAINED_GLASS + f Lnet/minecraft/class_1792; field_8766 SUSPICIOUS_STEW + f Lnet/minecraft/class_1792; field_8598 ENCHANTED_BOOK + f Lnet/minecraft/class_1792; field_8200 RED_SAND + f Lnet/minecraft/class_1792; field_8814 FIRE_CHARGE + f Lnet/minecraft/class_1792; field_8894 BLAZE_ROD + f Lnet/minecraft/class_1792; field_8679 LIME_BED + f Lnet/minecraft/class_1792; field_22027 NETHERITE_HELMET + f Lnet/minecraft/class_1792; field_8098 PURPLE_CARPET + f Lnet/minecraft/class_1792; field_8130 BIRCH_STAIRS + f Lnet/minecraft/class_1792; field_8442 BIRCH_BOAT + f Lnet/minecraft/class_1792; field_8293 DARK_OAK_FENCE_GATE + f Lnet/minecraft/class_1792; field_8849 SPAWNER + f Lnet/minecraft/class_1792; field_8054 GUNPOWDER + f Lnet/minecraft/class_1792; field_8526 ANDESITE_STAIRS + f Lnet/minecraft/class_1792; field_8329 PINK_BANNER + f Lnet/minecraft/class_1792; field_8447 SALMON_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8272 DEAD_HORN_CORAL + f Lnet/minecraft/class_1792; field_8271 YELLOW_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8505 NETHER_BRICK_SLAB + f Lnet/minecraft/class_1792; field_8535 SPONGE + f Lnet/minecraft/class_1792; field_8510 ENDERMITE_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8116 COCOA_BEANS + f Lnet/minecraft/class_1792; field_20405 PRISMARINE_BRICKS + f Lnet/minecraft/class_1792; field_8783 MAGENTA_TERRACOTTA + f Lnet/minecraft/class_1792; field_20401 DIORITE + f Lnet/minecraft/class_1792; field_8605 ACACIA_BUTTON + f Lnet/minecraft/class_1792; field_8190 ACACIA_TRAPDOOR + f Lnet/minecraft/class_1792; field_19060 CLAY + f Lnet/minecraft/class_1792; field_21988 WARPED_FUNGUS + f Lnet/minecraft/class_1792; field_20414 HONEYCOMB + f Lnet/minecraft/class_1792; field_8108 PUFFERFISH_BUCKET + f Lnet/minecraft/class_1792; field_8062 STONE_AXE + f Lnet/minecraft/class_1792; field_8875 GRAY_CARPET + f Lnet/minecraft/class_1792; field_8366 TRIPWIRE_HOOK + f Lnet/minecraft/class_1792; field_17540 DARK_OAK_SAPLING + f Lnet/minecraft/class_1792; field_8136 ZOMBIE_VILLAGER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8544 COOKED_CHICKEN + f Lnet/minecraft/class_1792; field_8349 MAGENTA_BED + f Lnet/minecraft/class_1792; field_8678 GOLDEN_CHESTPLATE + f Lnet/minecraft/class_1792; field_8255 SHIELD + f Lnet/minecraft/class_1792; field_8208 MUSHROOM_STEW + f Lnet/minecraft/class_1792; field_8166 SMOOTH_SANDSTONE_STAIRS + f Lnet/minecraft/class_1792; field_8289 BIRCH_FENCE_GATE + f Lnet/minecraft/class_1792; field_20393 PURPUR_BLOCK + f Lnet/minecraft/class_1792; field_8379 LIGHT_BLUE_BANNER + f Lnet/minecraft/class_1792; field_8100 PUFFERFISH_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8194 COBBLESTONE_SLAB + f Lnet/minecraft/class_1792; field_17506 JUNGLE_LEAVES + f Lnet/minecraft/class_1792; field_8381 DEAD_BRAIN_CORAL + f Lnet/minecraft/class_1792; field_8380 ORANGE_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8083 DROWNED_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8373 COOKED_COD + f Lnet/minecraft/class_1792; field_20391 STONE + f Lnet/minecraft/class_1792; field_8879 RED_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8878 DROPPER + f Lnet/minecraft/class_1792; field_8533 OAK_BOAT + f Lnet/minecraft/class_1792; field_8528 STONE_SWORD + f Lnet/minecraft/class_1792; field_8048 SPRUCE_BUTTON + f Lnet/minecraft/class_1792; field_8495 SPRUCE_TRAPDOOR + f Lnet/minecraft/class_1792; field_8426 ICE + f Lnet/minecraft/class_1792; field_17516 BROWN_MUSHROOM + f Lnet/minecraft/class_1792; field_17346 CAMPFIRE + f Lnet/minecraft/class_1792; field_19049 LIME_WOOL + f Lnet/minecraft/class_1792; field_8207 HEART_OF_THE_SEA + f Lnet/minecraft/class_1792; field_8639 FIREWORK_ROCKET + f Lnet/minecraft/class_1792; field_22010 CRIMSON_DOOR + f Lnet/minecraft/class_1792; field_8418 LIME_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8093 ZOMBIFIED_PIGLIN_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8511 ROTTEN_FLESH + f Lnet/minecraft/class_1792; field_8244 GREEN_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8869 LIGHT_BLUE_STAINED_GLASS + f Lnet/minecraft/class_1792; field_8286 LIGHT_BLUE_BED + f Lnet/minecraft/class_1792; field_8416 GOLDEN_LEGGINGS + f Lnet/minecraft/class_1792; field_8542 BEDROCK + f Lnet/minecraft/class_1792; field_8654 LIGHT_GRAY_CARPET + f Lnet/minecraft/class_1792; field_8733 EMERALD_BLOCK + f Lnet/minecraft/class_1792; field_8833 ELYTRA + f Lnet/minecraft/class_1792; field_8276 STRING + f Lnet/minecraft/class_1792; field_8430 SMOOTH_QUARTZ_STAIRS + f Lnet/minecraft/class_1792; field_8097 JUNGLE_FENCE_GATE + f Lnet/minecraft/class_1792; field_8490 PURPUR_PILLAR + f Lnet/minecraft/class_1792; field_8051 DEAD_BUBBLE_CORAL + f Lnet/minecraft/class_1792; field_8050 MAGENTA_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8342 BRICK_SLAB + f Lnet/minecraft/class_1792; field_17507 ACACIA_LEAVES + f Lnet/minecraft/class_1792; field_8157 BLACK_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8156 WHITE_TERRACOTTA + f Lnet/minecraft/class_1792; field_20394 GRANITE + f Lnet/minecraft/class_1792; field_8049 YELLOW_BANNER + f Lnet/minecraft/class_1792; field_8227 RABBIT_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8769 ELDER_GUARDIAN_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8509 COOKED_SALMON + f Lnet/minecraft/class_1792; field_23842 SOUL_CAMPFIRE + f Lnet/minecraft/class_1792; field_8745 LEATHER + f Lnet/minecraft/class_1792; field_8776 STONE_SHOVEL + f Lnet/minecraft/class_1792; field_8174 BIRCH_BUTTON + f Lnet/minecraft/class_1792; field_8774 BIRCH_TRAPDOOR + f Lnet/minecraft/class_1792; field_8399 CROSSBOW + f Lnet/minecraft/class_1792; field_8450 FIREWORK_STAR + f Lnet/minecraft/class_1792; field_8246 SNOW_BLOCK + f Lnet/minecraft/class_1792; field_17517 RED_MUSHROOM + f Lnet/minecraft/class_1792; field_22009 WARPED_DOOR + f Lnet/minecraft/class_1792; field_8222 PINK_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8703 YELLOW_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8566 DAYLIGHT_DETECTOR + f Lnet/minecraft/class_1792; field_8072 STRIPPED_ACACIA_LOG + f Lnet/minecraft/class_1792; field_8206 ANDESITE_WALL + f Lnet/minecraft/class_1792; field_17519 CARVED_PUMPKIN + f Lnet/minecraft/class_1792; field_20413 BEE_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8063 FURNACE_MINECART + f Lnet/minecraft/class_1792; field_16313 CARTOGRAPHY_TABLE + f Lnet/minecraft/class_1792; field_8496 DARK_OAK_SIGN + f Lnet/minecraft/class_1792; field_8477 DIAMOND + f Lnet/minecraft/class_1792; field_8344 MUSIC_DISC_MELLOHI + f Lnet/minecraft/class_1792; field_8398 SKELETON_SKULL + f Lnet/minecraft/class_1792; field_8395 POLISHED_ANDESITE_SLAB + f Lnet/minecraft/class_1792; field_8737 BLUE_CONCRETE + f Lnet/minecraft/class_1792; field_8779 BIRCH_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_17500 ALLIUM + f Lnet/minecraft/class_1792; field_22032 WARPED_PLANKS + f Lnet/minecraft/class_1792; field_8086 VILLAGER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8204 FILLED_MAP + f Lnet/minecraft/class_1792; field_8471 FERN + f Lnet/minecraft/class_1792; field_8640 LIGHT_BLUE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8519 GRASS_PATH + f Lnet/minecraft/class_1792; field_8408 GREEN_DYE + f Lnet/minecraft/class_1792; field_8743 IRON_HELMET + f Lnet/minecraft/class_1792; field_8241 IRON_TRAPDOOR + f Lnet/minecraft/class_1792; field_8657 ENCHANTING_TABLE + f Lnet/minecraft/class_1792; field_8682 RED_MUSHROOM_BLOCK + f Lnet/minecraft/class_1792; field_20390 BRICKS + f Lnet/minecraft/class_1792; field_8556 DIAMOND_AXE + f Lnet/minecraft/class_1792; field_8178 BLUE_ICE + f Lnet/minecraft/class_1792; field_8400 ACACIA_SLAB + f Lnet/minecraft/class_1792; field_8201 BIRCH_WOOD + f Lnet/minecraft/class_1792; field_23848 POLISHED_BLACKSTONE + f Lnet/minecraft/class_1792; field_8882 POPPED_CHORUS_FRUIT + f Lnet/minecraft/class_1792; field_18138 LEATHER_HORSE_ARMOR + f Lnet/minecraft/class_1792; field_8132 OCELOT_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8474 BRAIN_CORAL_BLOCK + f Lnet/minecraft/class_1792; field_8354 MAGMA_BLOCK + f Lnet/minecraft/class_1792; field_8808 STRIPPED_DARK_OAK_LOG + f Lnet/minecraft/class_1792; field_8154 BLAZE_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8803 EGG + f Lnet/minecraft/class_1792; field_8581 LIME_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8793 REDSTONE_BLOCK + f Lnet/minecraft/class_1792; field_16310 FLETCHING_TABLE + f Lnet/minecraft/class_1792; field_22011 CRIMSON_SIGN + f Lnet/minecraft/class_1792; field_8620 IRON_INGOT + f Lnet/minecraft/class_1792; field_8419 RED_NETHER_BRICK_WALL + f Lnet/minecraft/class_1792; field_8328 NETHERRACK + f Lnet/minecraft/class_1792; field_8834 MUSIC_DISC_STAL + f Lnet/minecraft/class_1792; field_8791 WITHER_SKELETON_SKULL + f Lnet/minecraft/class_1792; field_8659 DIORITE_SLAB + f Lnet/minecraft/class_1792; field_8762 BROWN_CONCRETE + f Lnet/minecraft/class_1792; field_8047 JUNGLE_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_17501 AZURE_BLUET + f Lnet/minecraft/class_1792; field_8889 YELLOW_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_17525 SUNFLOWER + f Lnet/minecraft/class_1792; field_8689 DEAD_BUSH + f Lnet/minecraft/class_1792; field_17535 OAK_SAPLING + f Lnet/minecraft/class_1792; field_17528 HAY_BLOCK + f Lnet/minecraft/class_1792; field_8827 END_PORTAL_FRAME + f Lnet/minecraft/class_1792; field_8149 VINDICATOR_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8868 SHEARS + f Lnet/minecraft/class_1792; field_8264 RED_DYE + f Lnet/minecraft/class_1792; field_8523 IRON_CHESTPLATE + f Lnet/minecraft/class_1792; field_23849 POLISHED_BLACKSTONE_SLAB + f Lnet/minecraft/class_1792; field_8186 BEETROOT + f Lnet/minecraft/class_1792; field_8527 DIAMOND_HOE + f Lnet/minecraft/class_1792; field_8140 CONDUIT + f Lnet/minecraft/class_1792; field_17521 MUSHROOM_STEM + f Lnet/minecraft/class_1792; field_8626 TNT + f Lnet/minecraft/class_1792; field_8597 GLISTERING_MELON_SLICE + f Lnet/minecraft/class_1792; field_8777 SLIME_BALL + f Lnet/minecraft/class_1792; field_8119 MAGENTA_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8721 LIGHT_WEIGHTED_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_16309 SMOKER + f Lnet/minecraft/class_1792; field_8867 JUNGLE_SIGN + f Lnet/minecraft/class_1792; field_8713 COAL + f Lnet/minecraft/class_1792; field_8337 STONE_BRICK_WALL + f Lnet/minecraft/class_1792; field_21996 WARPED_FENCE + f Lnet/minecraft/class_1792; field_8502 MUSIC_DISC_FAR + f Lnet/minecraft/class_1792; field_8895 MAP + f Lnet/minecraft/class_1792; field_8742 ANDESITE_SLAB + f Lnet/minecraft/class_1792; field_8637 CYAN_CONCRETE + f Lnet/minecraft/class_1792; field_8391 OAK_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_8880 POPPY + f Lnet/minecraft/class_1792; field_8435 TURTLE_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8112 BLACK_BED + f Lnet/minecraft/class_1792; field_8139 ORANGE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8658 DARK_OAK_STAIRS + f Lnet/minecraft/class_1792; field_8404 DARK_OAK_PLANKS + f Lnet/minecraft/class_1792; field_8786 COBWEB + f Lnet/minecraft/class_1792; field_8181 BLACK_TERRACOTTA + f Lnet/minecraft/class_1792; field_8080 NETHER_BRICK_FENCE + f Lnet/minecraft/class_1792; field_8525 CHISELED_STONE_BRICKS + f Lnet/minecraft/class_1792; field_20388 SMOOTH_SANDSTONE + f Lnet/minecraft/class_1792; field_8345 BLUE_DYE + f Lnet/minecraft/class_1792; field_8218 CHAINMAIL_LEGGINGS + f Lnet/minecraft/class_1792; field_23845 BLACKSTONE_STAIRS + f Lnet/minecraft/class_1792; field_8301 END_CRYSTAL + f Lnet/minecraft/class_1792; field_8250 DIAMOND_SHOVEL + f Lnet/minecraft/class_1792; field_8677 DEAD_FIRE_CORAL_FAN + f Lnet/minecraft/class_1792; field_8560 GOLDEN_HORSE_ARMOR + f Lnet/minecraft/class_1792; field_8299 MOOSHROOM_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8698 DEAD_HORN_CORAL_BLOCK + f Lnet/minecraft/class_1792; field_8468 REPEATING_COMMAND_BLOCK + f Lnet/minecraft/class_1792; field_8843 BIRCH_SLAB + f Lnet/minecraft/class_1792; field_8888 OAK_WOOD + f Lnet/minecraft/class_1792; field_8334 STRIPPED_JUNGLE_LOG + f Lnet/minecraft/class_1792; field_8727 BAT_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8388 CHEST_MINECART + f Lnet/minecraft/class_1792; field_8196 LIGHT_BLUE_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8592 HEAVY_WEIGHTED_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_8203 ACACIA_SIGN + f Lnet/minecraft/class_1792; field_8665 CHARCOAL + f Lnet/minecraft/class_1792; field_8765 NETHER_BRICK_WALL + f Lnet/minecraft/class_1792; field_17518 PUMPKIN + f Lnet/minecraft/class_1792; field_8707 SPRUCE_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_17499 BLUE_ORCHID + f Lnet/minecraft/class_1792; field_8522 RED_NETHER_BRICK_SLAB + f Lnet/minecraft/class_1792; field_8411 PURPLE_CONCRETE + f Lnet/minecraft/class_1792; field_16306 BLAST_FURNACE + f Lnet/minecraft/class_1792; field_8602 GRASS + f Lnet/minecraft/class_1792; field_22031 CRIMSON_PLANKS + f Lnet/minecraft/class_1792; field_8534 MUSIC_DISC_MALL + f Lnet/minecraft/class_1792; field_8071 GOLDEN_CARROT + f Lnet/minecraft/class_1792; field_8235 VEX_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8423 COOKIE + f Lnet/minecraft/class_1792; field_8318 MAGENTA_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8828 SLIME_BLOCK + f Lnet/minecraft/class_1792; field_8099 BROWN_DYE + f Lnet/minecraft/class_1792; field_8313 CHAINMAIL_BOOTS + f Lnet/minecraft/class_1792; field_8077 BARRIER + f Lnet/minecraft/class_1792; field_8444 NETHER_BRICK_STAIRS + f Lnet/minecraft/class_1792; field_23847 GILDED_BLACKSTONE + f Lnet/minecraft/class_1792; field_8233 CHORUS_FRUIT + f Lnet/minecraft/class_1792; field_8377 DIAMOND_PICKAXE + f Lnet/minecraft/class_1792; field_8269 DEAD_HORN_CORAL_FAN + f Lnet/minecraft/class_1792; field_8506 BROWN_MUSHROOM_BLOCK + f Lnet/minecraft/class_1792; field_20389 SMOOTH_STONE + f Lnet/minecraft/class_1792; field_8807 DIAMOND_HORSE_ARMOR + f Lnet/minecraft/class_1792; field_8331 MULE_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8402 TUBE_CORAL_BLOCK + f Lnet/minecraft/class_1792; field_8799 CHAIN_COMMAND_BLOCK + f Lnet/minecraft/class_1792; field_8224 JUNGLE_SLAB + f Lnet/minecraft/class_1792; field_8210 SPRUCE_WOOD + f Lnet/minecraft/class_1792; field_21986 WARPED_SLAB + f Lnet/minecraft/class_1792; field_8458 DARK_OAK_WOOD + f Lnet/minecraft/class_1792; field_23836 CHISELED_POLISHED_BLACKSTONE + f Lnet/minecraft/class_1792; field_8515 BEETROOT_SOUP + f Lnet/minecraft/class_1792; field_22023 NETHERITE_SHOVEL + f Lnet/minecraft/class_1792; field_8641 SMOOTH_RED_SANDSTONE_STAIRS + f Lnet/minecraft/class_1792; field_8220 COMMAND_BLOCK_MINECART + f Lnet/minecraft/class_1792; field_8670 PHANTOM_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8104 HORN_CORAL_BLOCK + f Lnet/minecraft/class_1792; field_20410 RED_NETHER_BRICKS + f Lnet/minecraft/class_1792; field_8835 CHICKEN_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8557 CLOCK + f Lnet/minecraft/class_1792; field_8240 LIGHT_GRAY_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8084 CHISELED_QUARTZ_BLOCK + f Lnet/minecraft/class_1792; field_16308 SMITHING_TABLE + f Lnet/minecraft/class_1792; field_8705 WATER_BUCKET + f Lnet/minecraft/class_1792; field_22021 NETHERITE_SCRAP + f Lnet/minecraft/class_1792; field_8559 DIORITE_WALL + f Lnet/minecraft/class_1792; field_22000 BASALT + f Lnet/minecraft/class_1792; field_8691 OAK_DOOR + f Lnet/minecraft/class_1792; field_8704 BLACK_CONCRETE + f Lnet/minecraft/class_1792; field_21993 CRIMSON_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_17510 WHITE_TULIP + f Lnet/minecraft/class_1792; field_8249 PISTON + f Lnet/minecraft/class_1792; field_8885 GRAY_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_17529 PEONY + f Lnet/minecraft/class_1792; field_8731 MUSIC_DISC_11 + f Lnet/minecraft/class_1792; field_8681 CREEPER_HEAD + f Lnet/minecraft/class_1792; field_8832 WITHER_SKELETON_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8706 PUMPKIN_SEEDS + f Lnet/minecraft/class_1792; field_8606 BONE + f Lnet/minecraft/class_1792; field_8805 DIAMOND_HELMET + f Lnet/minecraft/class_1792; field_8384 MAGENTA_CARPET + f Lnet/minecraft/class_1792; field_8840 DRAGON_EGG + f Lnet/minecraft/class_1792; field_23837 POLISHED_BLACKSTONE_BRICKS + f Lnet/minecraft/class_1792; field_8613 DRAGON_BREATH + f Lnet/minecraft/class_1792; field_8141 GLASS_PANE + f Lnet/minecraft/class_1792; field_8281 OBSIDIAN + f Lnet/minecraft/class_1792; field_22024 NETHERITE_PICKAXE + f Lnet/minecraft/class_1792; field_8890 MOSSY_STONE_BRICK_STAIRS + f Lnet/minecraft/class_1792; field_8748 MUTTON + f Lnet/minecraft/class_1792; field_8493 PIG_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8847 TUBE_CORAL + f Lnet/minecraft/class_1792; field_8242 BONE_BLOCK + f Lnet/minecraft/class_1792; field_8595 STONE_SLAB + f Lnet/minecraft/class_1792; field_22489 CRIMSON_HYPHAE + f Lnet/minecraft/class_1792; field_8661 COD_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8601 GLOWSTONE_DUST + f Lnet/minecraft/class_1792; field_8085 CYAN_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_20402 QUARTZ_BLOCK + f Lnet/minecraft/class_1792; field_23846 BLACKSTONE_WALL + f Lnet/minecraft/class_1792; field_23069 POLISHED_BASALT + f Lnet/minecraft/class_1792; field_21994 WARPED_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_17511 PINK_TULIP + f Lnet/minecraft/class_1792; field_16305 STONECUTTER + f Lnet/minecraft/class_1792; field_8187 LAVA_BUCKET + f Lnet/minecraft/class_1792; field_8091 WOODEN_SWORD + f Lnet/minecraft/class_1792; field_8806 MUSIC_DISC_WAIT + f Lnet/minecraft/class_1792; field_8712 DRAGON_HEAD + f Lnet/minecraft/class_1792; field_8165 SPRUCE_DOOR + f Lnet/minecraft/class_1792; field_8582 WHITE_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8485 WOLF_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8188 MELON_SEEDS + f Lnet/minecraft/class_1792; field_8172 LIGHT_GRAY_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8256 TALL_GRASS + f Lnet/minecraft/class_1792; field_19044 WHITE_WOOL + f Lnet/minecraft/class_1792; field_8479 SUGAR + f Lnet/minecraft/class_1792; field_8058 DIAMOND_CHESTPLATE + f Lnet/minecraft/class_1792; field_8078 LIGHT_BLUE_CARPET + f Lnet/minecraft/class_1792; field_8230 REDSTONE_LAMP + f Lnet/minecraft/class_1792; field_8719 LEAD + f Lnet/minecraft/class_1792; field_8193 PANDA_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8540 DARK_OAK_SLAB + f Lnet/minecraft/class_1792; field_8439 JUNGLE_WOOD + f Lnet/minecraft/class_1792; field_8883 BUBBLE_CORAL_BLOCK + f Lnet/minecraft/class_1792; field_8182 NETHER_WART_BLOCK + f Lnet/minecraft/class_1792; field_16314 CAT_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8251 COMPASS + f Lnet/minecraft/class_1792; field_21983 STRIPPED_CRIMSON_STEM + f Lnet/minecraft/class_1792; field_8500 PINK_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8702 NETHER_QUARTZ_ORE + f Lnet/minecraft/class_1792; field_22012 WARPED_SIGN + f Lnet/minecraft/class_1792; field_8695 GOLD_INGOT + f Lnet/minecraft/class_1792; field_8223 SANDSTONE_WALL + f Lnet/minecraft/class_1792; field_8067 SOUL_SAND + f Lnet/minecraft/class_1792; field_8173 ACACIA_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_17502 RED_TULIP + f Lnet/minecraft/class_1792; field_16311 GRINDSTONE + f Lnet/minecraft/class_1792; field_8158 SEAGRASS + f Lnet/minecraft/class_1792; field_8065 MUSIC_DISC_STRAD + f Lnet/minecraft/class_1792; field_8575 PLAYER_HEAD + f Lnet/minecraft/class_1792; field_16482 SCAFFOLDING + f Lnet/minecraft/class_1792; field_8120 GREEN_CONCRETE + f Lnet/minecraft/class_1792; field_17536 SPRUCE_SAPLING + f Lnet/minecraft/class_1792; field_17732 WANDERING_TRADER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8497 MELON_SLICE + f Lnet/minecraft/class_1792; field_8649 LIME_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_17526 LILAC + f Lnet/minecraft/class_1792; field_8226 BLACK_DYE + f Lnet/minecraft/class_1792; field_8396 IRON_LEGGINGS + f Lnet/minecraft/class_1792; field_8850 WHITE_CARPET + f Lnet/minecraft/class_1792; field_20399 END_STONE + f Lnet/minecraft/class_1792; field_23832 POLISHED_BLACKSTONE_STAIRS + f Lnet/minecraft/class_1792; field_8309 BEETROOT_SEEDS + f Lnet/minecraft/class_1792; field_22022 NETHERITE_SWORD + f Lnet/minecraft/class_1792; field_8319 POLISHED_GRANITE_STAIRS + f Lnet/minecraft/class_1792; field_8076 IRON_BARS + f Lnet/minecraft/class_1792; field_8536 BOOKSHELF + f Lnet/minecraft/class_1792; field_8278 FIRE_CORAL_BLOCK + f Lnet/minecraft/class_1792; field_22008 WARPED_WART_BLOCK + f Lnet/minecraft/class_1792; field_21985 CRIMSON_SLAB + f Lnet/minecraft/class_1792; field_8587 ACACIA_WOOD + f Lnet/minecraft/class_1792; field_8871 GRAY_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8239 HOPPER + f Lnet/minecraft/class_1792; field_8448 NAME_TAG + f Lnet/minecraft/class_1792; field_8274 PARROT_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8068 CAVE_SPIDER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8378 FISHING_ROD + f Lnet/minecraft/class_1792; field_16312 LECTERN + f Lnet/minecraft/class_1792; field_8550 BUCKET + f Lnet/minecraft/class_1792; field_22020 NETHERITE_INGOT + f Lnet/minecraft/class_1792; field_8819 END_STONE_BRICK_WALL + f Lnet/minecraft/class_1792; field_21999 SOUL_SOIL + f Lnet/minecraft/class_1792; field_8355 MUSIC_DISC_WARD + f Lnet/minecraft/class_1792; field_8470 ZOMBIE_HEAD + f Lnet/minecraft/class_1792; field_8886 DARK_OAK_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_17509 ORANGE_TULIP + f Lnet/minecraft/class_1792; field_8594 IRON_DOOR + f Lnet/minecraft/class_1792; field_8197 RED_CONCRETE + f Lnet/minecraft/class_1792; field_8254 WITCH_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8551 DRIED_KELP + f Lnet/minecraft/class_1792; field_17537 BIRCH_SAPLING + f Lnet/minecraft/class_1792; field_8277 PINK_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_17527 ROSE_BUSH + f Lnet/minecraft/class_1792; field_17498 SEA_PICKLE + f Lnet/minecraft/class_1792; field_8324 BONE_MEAL + f Lnet/minecraft/class_1792; field_8660 IRON_BOOTS + f Lnet/minecraft/class_1792; field_8683 ORANGE_CARPET + f Lnet/minecraft/class_1792; field_20400 END_STONE_BRICKS + f Lnet/minecraft/class_1792; field_23983 CHAIN + f Lnet/minecraft/class_1792; field_20392 MOSSY_COBBLESTONE + f Lnet/minecraft/class_1792; field_8569 POLISHED_DIORITE_SLAB + f Lnet/minecraft/class_1792; field_8732 FURNACE + f Lnet/minecraft/class_1792; field_19055 BLUE_WOOL + f Lnet/minecraft/class_1792; field_20412 COBBLESTONE + f Lnet/minecraft/class_1792; field_8552 CHISELED_SANDSTONE + f Lnet/minecraft/class_1792; field_8350 BLUE_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8482 RED_CARPET + f Lnet/minecraft/class_1792; field_8821 CYAN_TERRACOTTA + f Lnet/minecraft/class_1792; field_8481 STONE_BRICK_STAIRS + f Lnet/minecraft/class_1792; field_8596 INFESTED_MOSSY_STONE_BRICKS + f Lnet/minecraft/class_1792; field_8202 PURPUR_SLAB + f Lnet/minecraft/class_1792; field_8371 IRON_SWORD + f Lnet/minecraft/class_1792; field_17532 KELP + f Lnet/minecraft/class_1792; field_8472 STRIPPED_BIRCH_WOOD + f Lnet/minecraft/class_1792; field_8516 BLACK_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_8854 DARK_PRISMARINE_STAIRS + f Lnet/minecraft/class_1792; field_8652 DARK_OAK_LOG + f Lnet/minecraft/class_1792; field_8734 GREEN_STAINED_GLASS + f Lnet/minecraft/class_1792; field_23834 POLISHED_BLACKSTONE_BUTTON + f Lnet/minecraft/class_1792; field_8463 GOLDEN_APPLE + f Lnet/minecraft/class_1792; field_8804 BRICK_WALL + f Lnet/minecraft/class_1792; field_8457 BIRCH_FENCE + f Lnet/minecraft/class_1792; field_8369 MOSSY_COBBLESTONE_SLAB + f Lnet/minecraft/class_1792; field_8686 YELLOW_CONCRETE + f Lnet/minecraft/class_1792; field_8121 LADDER + f Lnet/minecraft/class_1792; field_19056 BROWN_WOOL + f Lnet/minecraft/class_1792; field_8584 BROWN_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8611 BLACK_CARPET + f Lnet/minecraft/class_1792; field_20385 CUT_SANDSTONE + f Lnet/minecraft/class_1792; field_8118 OAK_PLANKS + f Lnet/minecraft/class_1792; field_8715 PURPLE_TERRACOTTA + f Lnet/minecraft/class_1792; field_8610 MYCELIUM + f Lnet/minecraft/class_1792; field_8330 PINK_DYE + f Lnet/minecraft/class_1792; field_8699 IRON_SHOVEL + f Lnet/minecraft/class_1792; field_8214 FIRE_CORAL_FAN + f Lnet/minecraft/class_1792; field_8292 INFESTED_CRACKED_STONE_BRICKS + f Lnet/minecraft/class_1792; field_8440 PRISMARINE_SLAB + f Lnet/minecraft/class_1792; field_8648 BAMBOO + f Lnet/minecraft/class_1792; field_8785 STRIPPED_JUNGLE_WOOD + f Lnet/minecraft/class_1792; field_8618 TURTLE_EGG + f Lnet/minecraft/class_1792; field_8305 SEA_LANTERN + f Lnet/minecraft/class_1792; field_8135 MAGMA_CREAM + f Lnet/minecraft/class_1792; field_21981 CRIMSON_STEM + f Lnet/minecraft/class_1792; field_8636 RED_STAINED_GLASS + f Lnet/minecraft/class_1792; field_8782 ANVIL + f Lnet/minecraft/class_1792; field_8367 ENCHANTED_GOLDEN_APPLE + f Lnet/minecraft/class_1792; field_8884 FLINT_AND_STEEL + f Lnet/minecraft/class_1792; field_8057 PRISMARINE_WALL + f Lnet/minecraft/class_1792; field_8823 JUNGLE_FENCE + f Lnet/minecraft/class_1792; field_22013 CRIMSON_NYLIUM + f Lnet/minecraft/class_1792; field_8357 DISPENSER + f Lnet/minecraft/class_1792; field_8304 GRAY_TERRACOTTA + f Lnet/minecraft/class_1792; field_8401 INFESTED_COBBLESTONE + f Lnet/minecraft/class_1792; field_18886 RED_SANDSTONE_SLAB + f Lnet/minecraft/class_1792; field_22019 ANCIENT_DEBRIS + f Lnet/minecraft/class_1792; field_8308 RABBIT_STEW + f Lnet/minecraft/class_1792; field_23070 TWISTING_VINES + f Lnet/minecraft/class_1792; field_8248 STRIPPED_OAK_WOOD + f Lnet/minecraft/class_1792; field_8125 JUNGLE_LOG + f Lnet/minecraft/class_1792; field_8126 BLUE_STAINED_GLASS + f Lnet/minecraft/class_1792; field_8392 COBBLESTONE_WALL + f Lnet/minecraft/class_1792; field_8792 OAK_FENCE + f Lnet/minecraft/class_1792; field_8365 FARMLAND + f Lnet/minecraft/class_1792; field_19054 PURPLE_WOOL + f Lnet/minecraft/class_1792; field_8144 MUSIC_DISC_13 + f Lnet/minecraft/class_1792; field_20384 SANDSTONE + f Lnet/minecraft/class_1792; field_22015 WARPED_NYLIUM + f Lnet/minecraft/class_1792; field_8816 PURPLE_SHULKER_BOX + f Lnet/minecraft/class_1792; field_22420 TARGET + f Lnet/minecraft/class_1792; field_8133 LIGHT_GRAY_TERRACOTTA + f Lnet/minecraft/class_1792; field_8663 BRICK_STAIRS + f Lnet/minecraft/class_1792; field_8541 INFESTED_STONE_BRICKS + f Lnet/minecraft/class_1792; field_18887 CUT_RED_SANDSTONE_SLAB + f Lnet/minecraft/class_1792; field_8757 RED_CONCRETE_POWDER + f Lnet/minecraft/class_1792; field_17531 SUGAR_CANE + f Lnet/minecraft/class_1792; field_8362 STRIPPED_SPRUCE_WOOD + f Lnet/minecraft/class_1792; field_8332 BROWN_STAINED_GLASS + f Lnet/minecraft/class_1792; field_22005 WARPED_BUTTON + f Lnet/minecraft/class_1792; field_8820 ACACIA_LOG + f Lnet/minecraft/class_1792; field_8708 MOSSY_COBBLESTONE_WALL + f Lnet/minecraft/class_1792; field_8701 SPRUCE_FENCE + f Lnet/minecraft/class_1792; field_8111 SPRUCE_SIGN + f Lnet/minecraft/class_1792; field_8102 BOW + f Lnet/minecraft/class_1792; field_8811 MOSSY_STONE_BRICK_WALL + f Lnet/minecraft/class_1792; field_8454 DARK_OAK_FENCE + f Lnet/minecraft/class_1792; field_8217 SMOOTH_QUARTZ_SLAB + f Lnet/minecraft/class_1792; field_8333 GRAY_CONCRETE + f Lnet/minecraft/class_1792; field_8865 LEVER + f Lnet/minecraft/class_1792; field_19059 BLACK_WOOL + f Lnet/minecraft/class_1792; field_8211 DETECTOR_RAIL + f Lnet/minecraft/class_1792; field_8268 BLACK_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8081 PACKED_ICE + f Lnet/minecraft/class_1792; field_8842 JUNGLE_PLANKS + f Lnet/minecraft/class_1792; field_8425 MUSIC_DISC_BLOCKS + f Lnet/minecraft/class_1792; field_8512 BAKED_POTATO + f Lnet/minecraft/class_1792; field_17731 TRADER_LLAMA_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8368 GREEN_BED + f Lnet/minecraft/class_1792; field_8632 CYAN_DYE + f Lnet/minecraft/class_1792; field_8283 CHAINMAIL_HELMET + f Lnet/minecraft/class_1792; field_8798 GREEN_TERRACOTTA + f Lnet/minecraft/class_1792; field_23828 CRACKED_NETHER_BRICKS + f Lnet/minecraft/class_1792; field_23843 BLACKSTONE + f Lnet/minecraft/class_1792; field_8586 RED_BANNER + f Lnet/minecraft/class_1792; field_20396 MOSSY_STONE_BRICKS + f Lnet/minecraft/class_1792; field_20386 SMOOTH_QUARTZ + f Lnet/minecraft/class_1792; field_8609 IRON_HOE + f Lnet/minecraft/class_1792; field_8585 DEAD_BRAIN_CORAL_FAN + f Lnet/minecraft/class_1792; field_8694 ARMOR_STAND + f Lnet/minecraft/class_1792; field_8633 LLAMA_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8089 DEAD_BUBBLE_CORAL_BLOCK + f Lnet/minecraft/class_1792; field_20409 CUT_RED_SANDSTONE + f Lnet/minecraft/class_1792; field_8320 OAK_SLAB + f Lnet/minecraft/class_1792; field_22487 STRIPPED_CRIMSON_HYPHAE + f Lnet/minecraft/class_1792; field_8449 ENDER_EYE + f Lnet/minecraft/class_1792; field_8529 BOOK + f Lnet/minecraft/class_1792; field_8761 ORANGE_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8247 TRAPPED_CHEST + f Lnet/minecraft/class_1792; field_8624 STRIPPED_SPRUCE_LOG + f Lnet/minecraft/class_1792; field_8488 GRANITE_WALL + f Lnet/minecraft/class_1792; field_21995 CRIMSON_FENCE + f Lnet/minecraft/class_1792; field_8667 STONE_PRESSURE_PLATE + f Lnet/minecraft/class_1792; field_8491 DANDELION + f Lnet/minecraft/class_1792; field_16307 BARREL + f Lnet/minecraft/class_1792; field_8422 BIRCH_SIGN + f Lnet/minecraft/class_1792; field_8107 ARROW + f Lnet/minecraft/class_1792; field_8623 MUSIC_DISC_CHIRP + f Lnet/minecraft/class_1792; field_8635 POISONOUS_POTATO + f Lnet/minecraft/class_1792; field_8312 GRANITE_SLAB + f Lnet/minecraft/class_1792; field_8735 LIGHT_GRAY_CONCRETE + f Lnet/minecraft/class_1792; field_8612 TROPICAL_FISH_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8789 RED_BED + f Lnet/minecraft/class_1792; field_8651 ACACIA_PLANKS + f Lnet/minecraft/class_1792; field_8177 WHITE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_1792; field_8445 ACACIA_STAIRS + f Lnet/minecraft/class_1792; field_8105 STICKY_PISTON + f Lnet/minecraft/class_1792; field_8296 PURPLE_DYE + f Lnet/minecraft/class_1792; field_8873 CHAINMAIL_CHESTPLATE + f Lnet/minecraft/class_1792; field_8353 RED_TERRACOTTA + f Lnet/minecraft/class_1792; field_23829 CHISELED_NETHER_BRICKS + f Lnet/minecraft/class_1792; field_8802 DIAMOND_SWORD + f Lnet/minecraft/class_1792; field_8462 DEAD_BUBBLE_CORAL_FAN + f Lnet/minecraft/class_1792; field_8343 CRACKED_STONE_BRICKS + f Lnet/minecraft/class_1792; field_20387 SMOOTH_RED_SANDSTONE + f Lnet/minecraft/class_1792; field_8189 SPRUCE_SLAB + f Lnet/minecraft/class_1792; field_22488 STRIPPED_WARPED_HYPHAE + f Lnet/minecraft/class_1792; field_8160 DEAD_FIRE_CORAL_BLOCK + f Lnet/minecraft/class_1792; field_8456 RED_SANDSTONE_STAIRS + f Lnet/minecraft/class_1792; field_23844 BLACKSTONE_SLAB + f Lnet/minecraft/class_1792; field_8572 BLACK_BANNER + f Lnet/minecraft/class_1792; field_8767 STRIPPED_BIRCH_LOG + f Lnet/minecraft/class_1792; field_8578 IRON_HORSE_ARMOR + f Lnet/minecraft/class_1792; field_8852 MAGMA_CUBE_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8129 RAIL + f Lnet/minecraft/class_1792; field_19057 GREEN_WOOL + f Lnet/minecraft/class_1792; field_8643 NOTE_BLOCK + f Lnet/minecraft/class_1792; field_8282 END_STONE_BRICK_SLAB + f Lnet/minecraft/class_1792; field_8839 LIME_CONCRETE + f Lnet/minecraft/class_1792; field_8113 SPRUCE_PLANKS + f Lnet/minecraft/class_1792; field_8514 STRAY_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8461 GREEN_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8260 TERRACOTTA + f Lnet/minecraft/class_1792; field_8298 GRAY_DYE + f Lnet/minecraft/class_1792; field_8570 LEATHER_LEGGINGS + f Lnet/minecraft/class_1792; field_8455 BLUE_TERRACOTTA + f Lnet/minecraft/class_1792; field_17524 LILY_PAD + f Lnet/minecraft/class_1792; field_8403 IRON_PICKAXE + f Lnet/minecraft/class_1792; field_8817 HORN_CORAL_FAN + f Lnet/minecraft/class_1792; field_8148 INFESTED_CHISELED_STONE_BRICKS + f Lnet/minecraft/class_1792; field_8588 PRISMARINE_BRICK_SLAB + f Lnet/minecraft/class_1792; field_8856 DEAD_TUBE_CORAL_BLOCK + f Lnet/minecraft/class_1792; field_20408 RED_SANDSTONE + f Lnet/minecraft/class_1792; field_8494 GOLD_BLOCK + f Lnet/minecraft/class_1792; field_8284 STRIPPED_ACACIA_WOOD + f Lnet/minecraft/class_1792; field_8410 BLACK_STAINED_GLASS + f Lnet/minecraft/class_1792; field_8750 CHIPPED_ANVIL + f Lnet/minecraft/class_1792; field_21982 WARPED_STEM + f Lnet/minecraft/class_1792; field_8073 RABBIT_FOOT + f Lnet/minecraft/class_1792; field_8740 BREWING_STAND + f Lnet/minecraft/class_1792; field_17533 DRIED_KELP_BLOCK + f Lnet/minecraft/class_1792; field_8788 OAK_SIGN + f Lnet/minecraft/class_1792; field_8279 APPLE + f Lnet/minecraft/class_1792; field_8359 RED_SANDSTONE_WALL + f Lnet/minecraft/class_1792; field_8646 ACACIA_FENCE + f Lnet/minecraft/class_1792; field_8075 MUSIC_DISC_CAT + f Lnet/minecraft/class_1792; field_8310 COBBLESTONE_STAIRS + f Lnet/minecraft/class_1792; field_19058 RED_WOOL + f Lnet/minecraft/class_1792; field_8872 SMOOTH_SANDSTONE_SLAB + f Lnet/minecraft/class_1792; field_8127 PINK_CONCRETE + f Lnet/minecraft/class_1792; field_23255 STRIDER_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8464 BROWN_BED + f Lnet/minecraft/class_1792; field_8191 BIRCH_PLANKS + f Lnet/minecraft/class_1792; field_8676 RED_SHULKER_BOX + f Lnet/minecraft/class_1792; field_8797 COAL_BLOCK + f Lnet/minecraft/class_1792; field_8848 POWERED_RAIL + f Lnet/minecraft/class_1792; field_8851 LIGHT_GRAY_DYE + f Lnet/minecraft/class_1792; field_8370 LEATHER_BOOTS + f Lnet/minecraft/class_1792; field_8467 BROWN_TERRACOTTA + f Lnet/minecraft/class_1792; field_20398 NETHER_BRICKS + f Lnet/minecraft/class_1792; field_20395 STONE_BRICKS + f Lnet/minecraft/class_1792; field_8459 DARK_PRISMARINE_SLAB + f Lnet/minecraft/class_1792; field_8773 IRON_BLOCK + f Lnet/minecraft/class_1792; field_8219 STRIPPED_DARK_OAK_WOOD + f Lnet/minecraft/class_1792; field_22421 CRYING_OBSIDIAN + f Lnet/minecraft/class_1792; field_8475 IRON_AXE + f Lnet/minecraft/class_1792; field_8351 DEAD_TUBE_CORAL_FAN + f Lnet/minecraft/class_1792; field_8245 RABBIT_HIDE + f Lnet/minecraft/class_1792; field_8760 HUSK_SPAWN_EGG + f Lnet/minecraft/class_1792; field_8237 DEAD_BRAIN_CORAL_BLOCK + f Lnet/minecraft/class_1792; field_8822 CHISELED_RED_SANDSTONE + f Lnet/minecraft/class_1792; field_8638 CAULDRON + f Lnet/minecraft/class_1792; field_8407 PAPER + f Lnet/minecraft/class_1792; field_8415 STRIPPED_OAK_LOG + f Lnet/minecraft/class_1792; field_8736 WHITE_STAINED_GLASS_PANE + f Lnet/minecraft/class_1792; field_8427 DAMAGED_ANVIL +c net/minecraft/class_1803 net/minecraft/item/LingeringPotionItem +c net/minecraft/class_1804 net/minecraft/item/LeadItem + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1269; method_7994 bindPlayerMobs +c net/minecraft/class_1805 net/minecraft/item/MilkBucketItem +c net/minecraft/class_1806 net/minecraft/item/FilledMapItem + m (Lnet/minecraft/class_1799;)I method_8003 getMapId + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;Lnet/minecraft/class_22;)V method_7998 updateMapData + m (I)Ljava/lang/String; method_17440 getMapName + m (Lnet/minecraft/class_1937;IIBZZ)Lnet/minecraft/class_1799; method_8005 setupNewMap + m ([Lnet/minecraft/class_1959;III)Z method_8004 func_195954_a + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_7995 func_211698_a + m (Lnet/minecraft/class_1799;)I method_7999 getColor + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;I)V method_7996 scaleMap + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;IIIZZLnet/minecraft/class_5321;)Lnet/minecraft/class_22; method_8000 createMapData + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;)Lnet/minecraft/class_22; method_7997 getData + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;)V method_17442 func_219992_b + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;)Lnet/minecraft/class_22; method_8001 getMapData + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1799;)V method_8002 func_226642_a_ +c net/minecraft/class_1807 net/minecraft/item/NameTagItem +c net/minecraft/class_1808 net/minecraft/item/MinecartItem + m (Lnet/minecraft/class_1808;)Lnet/minecraft/class_1688$class_1689; method_8006 access$000 + f Lnet/minecraft/class_1688$class_1689; field_8897 minecartType + f Lnet/minecraft/class_2357; field_8896 MINECART_DISPENSER_BEHAVIOR +c net/minecraft/class_1808$1 net/minecraft/item/MinecartItem$1 + f Lnet/minecraft/class_2347; field_8898 behaviourDefaultDispenseItem +c net/minecraft/class_1809 net/minecraft/item/SkullItem +c net/minecraft/class_1810 net/minecraft/item/PickaxeItem + f Ljava/util/Set; field_8899 EFFECTIVE_ON +c net/minecraft/class_1811 net/minecraft/item/ShootableItem + m (Lnet/minecraft/class_1799;)Z method_18816 func_220003_e + m ()I method_24792 func_230305_d_ + m (Lnet/minecraft/class_1309;Ljava/util/function/Predicate;)Lnet/minecraft/class_1799; method_18815 getHeldAmmo + m ()Ljava/util/function/Predicate; method_20310 getAmmoPredicate + m (Lnet/minecraft/class_1799;)Z method_18817 func_220002_j + m ()Ljava/util/function/Predicate; method_19268 getInventoryAmmoPredicate + f Ljava/util/function/Predicate; field_18282 ARROWS_OR_FIREWORKS + f Ljava/util/function/Predicate; field_18281 ARROWS +c net/minecraft/class_1812 net/minecraft/item/PotionItem +c net/minecraft/class_1813 net/minecraft/item/MusicDiscItem + m ()Lnet/minecraft/class_3414; method_8009 getSound + m ()Lnet/minecraft/class_5250; method_8011 getDescription + m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_1813; method_8012 getBySound + m ()I method_8010 getComparatorValue + f I field_8902 comparatorValue + f Lnet/minecraft/class_3414; field_8900 sound + f Ljava/util/Map; field_8901 RECORDS +c net/minecraft/class_1814 net/minecraft/item/Rarity + m (Ljava/lang/String;)Lnet/minecraft/class_1814; valueOf valueOf + m ()[Lnet/minecraft/class_1814; values values + f [Lnet/minecraft/class_1814; field_8905 $VALUES + f Lnet/minecraft/class_1814; field_8906 COMMON + f Lnet/minecraft/class_1814; field_8903 RARE + f Lnet/minecraft/class_1814; field_8907 UNCOMMON + f Lnet/minecraft/class_1814; field_8904 EPIC + f Lnet/minecraft/class_124; field_8908 color +c net/minecraft/class_3734 net/minecraft/item/ScaffoldingItem +c net/minecraft/class_1816 net/minecraft/item/SaddleItem +c net/minecraft/class_1820 net/minecraft/item/ShearsItem + m (Lnet/minecraft/class_1309;)V method_20280 func_220036_a +c net/minecraft/class_1817 net/minecraft/util/ServerCooldownTracker + f Lnet/minecraft/class_3222; field_8910 player +c net/minecraft/class_1821 net/minecraft/item/ShovelItem + m (Lnet/minecraft/class_1838;Lnet/minecraft/class_1657;)V method_20281 func_220041_a + f Ljava/util/Map; field_8912 SHOVEL_LOOKUP + f Ljava/util/Set; field_8913 EFFECTIVE_ON +c net/minecraft/class_1819 net/minecraft/item/ShieldItem + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1767; method_8013 getColor +c net/minecraft/class_1824 net/minecraft/item/SimpleFoiledItem +c net/minecraft/class_1822 net/minecraft/item/SignItem +c net/minecraft/class_1826 net/minecraft/item/SpawnEggItem + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1308;Lnet/minecraft/class_1299;Lnet/minecraft/class_3218;Lnet/minecraft/class_243;Lnet/minecraft/class_1799;)Ljava/util/Optional; method_24793 getChildToSpawn + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1299;)Z method_8018 hasType + m (I)I method_8016 getColor + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1299; method_8015 getType + m ()Ljava/lang/Iterable; method_8017 getEggs + m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_1826; method_8019 getEgg + f Ljava/util/Map; field_8914 EGGS + f Lnet/minecraft/class_1299; field_8917 typeIn + f I field_8915 secondaryColor + f I field_8916 primaryColor +c net/minecraft/class_1823 net/minecraft/item/SnowballItem +c net/minecraft/class_1828 net/minecraft/item/SplashPotionItem +c net/minecraft/class_1825 net/minecraft/item/SpectralArrowItem +c net/minecraft/class_1827 net/minecraft/item/WallOrFloorItem + f Lnet/minecraft/class_2248; field_8918 wallBlock +c net/minecraft/class_1829 net/minecraft/item/SwordItem + m (Lnet/minecraft/class_1309;)V method_20282 func_220044_a + m (Lnet/minecraft/class_1309;)V method_20283 func_220045_b + m ()F method_8020 getAttackDamage + f F field_8920 attackDamage + f Lcom/google/common/collect/Multimap; field_23745 attributeModifiers +c net/minecraft/class_1830 net/minecraft/item/SuspiciousStewItem + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1291;I)V method_8021 addEffect +c net/minecraft/class_1832 net/minecraft/item/IItemTier + m ()I method_8024 getHarvestLevel + m ()Lnet/minecraft/class_1856; method_8023 getRepairMaterial + m ()I method_8026 getEnchantability + m ()F method_8027 getEfficiency + m ()I method_8025 getMaxUses + m ()F method_8028 getAttackDamage +c net/minecraft/class_4537 net/minecraft/item/ThrowablePotionItem +c net/minecraft/class_1834 net/minecraft/item/ItemTier + m ()Lnet/minecraft/class_1856; method_8031 func_200933_j + m ()Lnet/minecraft/class_1856; method_8029 func_200934_k + m ()Lnet/minecraft/class_1856; method_8030 func_200932_i + m (Ljava/lang/String;)Lnet/minecraft/class_1834; valueOf valueOf + m ()[Lnet/minecraft/class_1834; values values + m ()Lnet/minecraft/class_1856; method_8032 func_200931_h + m ()Lnet/minecraft/class_1856; method_24361 func_234811_g_ + m ()Lnet/minecraft/class_1856; method_8033 func_200930_g + f Lnet/minecraft/class_1834; field_8930 DIAMOND + f I field_8925 harvestLevel + f Lnet/minecraft/class_1834; field_8927 STONE + f Lnet/minecraft/class_1834; field_8923 IRON + f F field_8932 efficiency + f I field_8924 maxUses + f [Lnet/minecraft/class_1834; field_8926 $VALUES + f Lnet/minecraft/class_1834; field_22033 NETHERITE + f Lnet/minecraft/class_1834; field_8929 GOLD + f I field_8933 enchantability + f Lnet/minecraft/class_1834; field_8922 WOOD + f F field_8931 attackDamage + f Lnet/minecraft/class_3528; field_8928 repairMaterial +c net/minecraft/class_1831 net/minecraft/item/TieredItem + m ()Lnet/minecraft/class_1832; method_8022 getTier + f Lnet/minecraft/class_1832; field_8921 tier +c net/minecraft/class_1836 net/minecraft/client/util/ITooltipFlag + m ()Z method_8035 isAdvanced +c net/minecraft/class_1836$class_1837 net/minecraft/client/util/ITooltipFlag$TooltipFlags + m ()[Lnet/minecraft/class_1836$class_1837; values values + m (Ljava/lang/String;)Lnet/minecraft/class_1836$class_1837; valueOf valueOf + f Z field_8936 isAdvanced + f [Lnet/minecraft/class_1836$class_1837; field_8937 $VALUES + f Lnet/minecraft/class_1836$class_1837; field_8935 ADVANCED + f Lnet/minecraft/class_1836$class_1837; field_8934 NORMAL +c net/minecraft/class_1833 net/minecraft/item/TippedArrowItem +c net/minecraft/class_1839 net/minecraft/item/UseAction + m ()[Lnet/minecraft/class_1839; values values + m (Ljava/lang/String;)Lnet/minecraft/class_1839; valueOf valueOf + f Lnet/minecraft/class_1839; field_8949 BLOCK + f Lnet/minecraft/class_1839; field_8950 EAT + f Lnet/minecraft/class_1839; field_8946 DRINK + f Lnet/minecraft/class_1839; field_8952 NONE + f [Lnet/minecraft/class_1839; field_8948 $VALUES + f Lnet/minecraft/class_1839; field_8951 SPEAR + f Lnet/minecraft/class_1839; field_8947 CROSSBOW + f Lnet/minecraft/class_1839; field_8953 BOW +c net/minecraft/class_1835 net/minecraft/item/TridentItem + m (Lnet/minecraft/class_1309;)V method_20286 func_220048_b_ + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1657;)V method_20285 func_220047_a_ + m (Lnet/minecraft/class_1309;)V method_20284 func_220046_a_ + f Lcom/google/common/collect/Multimap; field_23746 tridentAttributes +c net/minecraft/class_1841 net/minecraft/item/LilyPadItem +c net/minecraft/class_5150 net/minecraft/enchantment/IVanishable +c net/minecraft/class_1840 net/minecraft/item/WritableBookItem + m (Lnet/minecraft/class_2487;)Z method_8047 isNBTValid +c net/minecraft/class_5151 net/minecraft/enchantment/IArmorVanishable +c net/minecraft/class_1842 net/minecraft/potion/Potion + m (Ljava/lang/String;)Lnet/minecraft/class_1842; method_8048 getPotionTypeForName + m ()Ljava/util/List; method_8049 getEffects + m ()Z method_8050 hasInstantEffect + m (Ljava/lang/String;)Ljava/lang/String; method_8051 getNamePrefixed + f Lcom/google/common/collect/ImmutableList; field_8955 effects + f Ljava/lang/String; field_8954 baseName +c net/minecraft/class_1843 net/minecraft/item/WrittenBookItem + m (Lnet/minecraft/class_1799;)I method_17443 getPageCount + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2168;Lnet/minecraft/class_1657;)Z method_8054 resolveContents + m (Lnet/minecraft/class_1799;)I method_8052 getGeneration + m (Lnet/minecraft/class_2487;)Z method_8053 validBookTagContents +c net/minecraft/class_1844 net/minecraft/potion/PotionUtils + m (Lnet/minecraft/class_1799;Ljava/util/Collection;)Lnet/minecraft/class_1799; method_8056 appendEffects + m (Lnet/minecraft/class_1799;Ljava/util/List;F)V method_8065 addPotionTooltip + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1842; method_8057 getPotionTypeFromNBT + m (Lnet/minecraft/class_1842;Ljava/util/Collection;)Ljava/util/List; method_8059 mergeEffects + m (Lnet/minecraft/class_1799;)Ljava/util/List; method_8067 getEffectsFromStack + m (Lnet/minecraft/class_1799;)Ljava/util/List; method_8068 getFullEffectsFromItem + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1842;)Lnet/minecraft/class_1799; method_8061 addPotionToItemStack + m (Lnet/minecraft/class_1799;)I method_8064 getColor + m (Lnet/minecraft/class_2487;Ljava/util/List;)V method_8058 addCustomPotionEffectToList + m (Lnet/minecraft/class_2487;)Ljava/util/List; method_8066 getEffectsFromTag + m (Ljava/util/Collection;)I method_8055 getPotionColorFromEffectList + m (Lnet/minecraft/class_2487;)Ljava/util/List; method_8060 getFullEffectsFromTag + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1842; method_8063 getPotionFromItem + m (Lnet/minecraft/class_1842;)I method_8062 getPotionColor + f Lnet/minecraft/class_5250; field_25817 field_242400_a +c net/minecraft/class_1845 net/minecraft/potion/PotionBrewing + m (Lnet/minecraft/class_1799;)Z method_8069 isTypeConversionReagent + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_8072 hasConversions + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_8070 hasItemConversions + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_8078 doReaction + m (Lnet/minecraft/class_1799;)Z method_8073 func_210319_d + m (Lnet/minecraft/class_1842;Lnet/minecraft/class_1792;Lnet/minecraft/class_1842;)V method_8074 addMix + m (Lnet/minecraft/class_1792;)V method_8080 addContainer + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_8075 hasTypeConversions + m (Lnet/minecraft/class_1799;)Z method_8079 isItemConversionReagent + m (Lnet/minecraft/class_1842;)Z method_20361 isBrewablePotion + m (Lnet/minecraft/class_1799;)Z method_8077 isReagent + m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;)V method_8071 addContainerRecipe + m ()V method_8076 init + f Ljava/util/List; field_8957 POTION_ITEMS + f Ljava/util/function/Predicate; field_8958 IS_POTION_ITEM + f Ljava/util/List; field_8959 POTION_ITEM_CONVERSIONS + f Ljava/util/List; field_8956 POTION_TYPE_CONVERSIONS +c net/minecraft/class_1845$class_1846 net/minecraft/potion/PotionBrewing$MixPredicate + m (Lnet/minecraft/class_1845$class_1846;)Ljava/lang/Object; method_8083 func_210317_b + m (Lnet/minecraft/class_1845$class_1846;)Ljava/lang/Object; method_8082 access$200 + m (Lnet/minecraft/class_1845$class_1846;)Lnet/minecraft/class_1856; method_8081 func_210318_a + f Lnet/minecraft/class_1856; field_8960 reagent + f Ljava/lang/Object; field_8962 input + f Ljava/lang/Object; field_8961 output +c net/minecraft/class_1847 net/minecraft/potion/Potions + m (Ljava/lang/String;Lnet/minecraft/class_1842;)Lnet/minecraft/class_1842; method_8084 register + f Lnet/minecraft/class_1842; field_8971 LONG_LEAPING + f Lnet/minecraft/class_1842; field_8979 LEAPING + f Lnet/minecraft/class_1842; field_9000 LONG_INVISIBILITY + f Lnet/minecraft/class_1842; field_8973 STRONG_HARMING + f Lnet/minecraft/class_1842; field_8969 LONG_FIRE_RESISTANCE + f Lnet/minecraft/class_1842; field_8987 FIRE_RESISTANCE + f Lnet/minecraft/class_1842; field_9004 HARMING + f Lnet/minecraft/class_1842; field_8980 STRONG_HEALING + f Lnet/minecraft/class_1842; field_8998 STRONG_LEAPING + f Lnet/minecraft/class_1842; field_8972 STRONG_POISON + f Lnet/minecraft/class_1842; field_9002 LONG_POISON + f Lnet/minecraft/class_1842; field_8983 LONG_SWIFTNESS + f Lnet/minecraft/class_1842; field_9005 SWIFTNESS + f Lnet/minecraft/class_1842; field_8982 POISON + f Lnet/minecraft/class_1842; field_8989 LONG_SLOWNESS + f Lnet/minecraft/class_1842; field_9003 LONG_REGENERATION + f Lnet/minecraft/class_1842; field_8986 REGENERATION + f Lnet/minecraft/class_1842; field_8996 SLOWNESS + f Lnet/minecraft/class_1842; field_8966 STRONG_SWIFTNESS + f Lnet/minecraft/class_1842; field_8965 LONG_STRENGTH + f Lnet/minecraft/class_1842; field_8988 LONG_TURTLE_MASTER + f Lnet/minecraft/class_1842; field_8990 TURTLE_MASTER + f Lnet/minecraft/class_1842; field_8978 STRENGTH + f Lnet/minecraft/class_1842; field_8992 STRONG_REGENERATION + f Lnet/minecraft/class_1842; field_8976 STRONG_SLOWNESS + f Lnet/minecraft/class_1842; field_8967 MUNDANE + f Lnet/minecraft/class_1842; field_8970 LONG_WEAKNESS + f Lnet/minecraft/class_1842; field_8975 WEAKNESS + f Lnet/minecraft/class_1842; field_8994 WATER_BREATHING + f Lnet/minecraft/class_1842; field_8977 STRONG_TURTLE_MASTER + f Lnet/minecraft/class_1842; field_8991 WATER + f Lnet/minecraft/class_1842; field_8984 EMPTY + f Lnet/minecraft/class_1842; field_8993 STRONG_STRENGTH + f Lnet/minecraft/class_1842; field_8968 NIGHT_VISION + f Lnet/minecraft/class_1842; field_8999 AWKWARD + f Lnet/minecraft/class_1842; field_8974 SLOW_FALLING + f Lnet/minecraft/class_1842; field_8995 LUCK + f Lnet/minecraft/class_1842; field_8963 HEALING + f Lnet/minecraft/class_1842; field_9001 LONG_WATER_BREATHING + f Lnet/minecraft/class_1842; field_8985 THICK + f Lnet/minecraft/class_1842; field_8997 INVISIBILITY + f Lnet/minecraft/class_1842; field_8981 LONG_NIGHT_VISION + f Lnet/minecraft/class_1842; field_8964 LONG_SLOW_FALLING +c net/minecraft/class_2968 net/minecraft/item/DirectionalPlaceContext + f Lnet/minecraft/class_2350; field_13362 lookDirection +c net/minecraft/class_2968$1 net/minecraft/item/DirectionalPlaceContext$1 + f [I field_13363 field_221538_a +c net/minecraft/class_1750 net/minecraft/item/BlockItemUseContext + m ()[Lnet/minecraft/class_2350; method_7718 getNearestLookingDirections + m (Lnet/minecraft/class_1750;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Lnet/minecraft/class_1750; method_16355 func_221536_a + m ()Z method_7716 canPlace + m ()Lnet/minecraft/class_2350; method_7715 getNearestLookingDirection + m ()Z method_7717 replacingClickedOnBlock + f Lnet/minecraft/class_2338; field_7903 offsetPos + f Z field_7904 replaceClicked +c net/minecraft/class_1838 net/minecraft/item/ItemUseContext + m ()Lnet/minecraft/class_1268; method_20287 getHand + m ()Lnet/minecraft/class_1937; method_8045 getWorld + m ()Lnet/minecraft/class_243; method_17698 getHitVec + m ()Lnet/minecraft/class_2350; method_8038 getFace + m ()Lnet/minecraft/class_3965; method_30344 func_242401_i + m ()Z method_8046 hasSecondaryUseForPlayer + m ()Lnet/minecraft/class_1657; method_8036 getPlayer + m ()Lnet/minecraft/class_1799; method_8041 getItem + m ()Lnet/minecraft/class_2350; method_8042 getPlacementHorizontalFacing + m ()Z method_17699 isInside + m ()F method_8044 getPlacementYaw + m ()Lnet/minecraft/class_2338; method_8037 getPos + f Lnet/minecraft/class_1657; field_8942 player + f Lnet/minecraft/class_1799; field_8941 item + f Lnet/minecraft/class_3965; field_17543 rayTraceResult + f Lnet/minecraft/class_1937; field_8945 world + f Lnet/minecraft/class_1268; field_19176 hand +c net/minecraft/class_1874 net/minecraft/item/crafting/AbstractCookingRecipe + m ()I method_8167 getCookTime + m ()F method_8171 getExperience + f Lnet/minecraft/class_2960; field_9060 id + f Lnet/minecraft/class_1799; field_9059 result + f F field_9057 experience + f Lnet/minecraft/class_1856; field_9061 ingredient + f Ljava/lang/String; field_9062 group + f Lnet/minecraft/class_3956; field_17544 type + f I field_9058 cookTime +c net/minecraft/class_1848 net/minecraft/item/crafting/BannerDuplicateRecipe + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17703 matches + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17702 getCraftingResult + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_2371; method_17704 getRemainingItems +c net/minecraft/class_1849 net/minecraft/item/crafting/ArmorDyeRecipe + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17700 getCraftingResult + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17701 matches +c net/minecraft/class_1850 net/minecraft/item/crafting/BookCloningRecipe + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17706 matches + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_2371; method_17707 getRemainingItems + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17705 getCraftingResult +c net/minecraft/class_3859 net/minecraft/item/crafting/BlastingRecipe +c net/minecraft/class_3955 net/minecraft/item/crafting/ICraftingRecipe +c net/minecraft/class_3920 net/minecraft/item/crafting/CampfireCookingRecipe +c net/minecraft/class_1851 net/minecraft/item/crafting/FireworkRocketRecipe + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17708 getCraftingResult + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17709 matches + f Lnet/minecraft/class_1856; field_9008 INGREDIENT_FIREWORK_STAR + f Lnet/minecraft/class_1856; field_9006 INGREDIENT_GUNPOWDER + f Lnet/minecraft/class_1856; field_9007 INGREDIENT_PAPER +c net/minecraft/class_1852 net/minecraft/item/crafting/SpecialRecipe + f Lnet/minecraft/class_2960; field_9009 id +c net/minecraft/class_1853 net/minecraft/item/crafting/FireworkStarRecipe + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17712 getCraftingResult + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17713 matches + m (Ljava/util/HashMap;)V method_8085 func_209352_a + f Ljava/util/Map; field_9013 ITEM_SHAPE_MAP + f Lnet/minecraft/class_1856; field_9014 INGREDIENT_TRAIL + f Lnet/minecraft/class_1856; field_9010 INGREDIENT_FLICKER + f Lnet/minecraft/class_1856; field_9011 INGREDIENT_SHAPE + f Lnet/minecraft/class_1856; field_9012 INGREDIENT_GUNPOWDER +c net/minecraft/class_1854 net/minecraft/item/crafting/FireworkStarFadeRecipe + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17711 matches + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17710 getCraftingResult + f Lnet/minecraft/class_1856; field_9015 INGREDIENT_FIREWORK_STAR +c net/minecraft/class_1855 net/minecraft/item/crafting/MapCloningRecipe + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17715 matches + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17714 getCraftingResult +c net/minecraft/class_1856 net/minecraft/item/crafting/Ingredient + m ()Lit/unimi/dsi/fastutil/ints/IntList; method_8100 getValidItemStacksPacked + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_1856; method_8086 read + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1856$class_1857; method_8094 func_209356_b_ + m (I)[Lnet/minecraft/class_1856$class_1859; method_8087 func_209360_b_ + m (Lnet/minecraft/class_1799;)Z method_26965 func_234824_c_ + m ([Lnet/minecraft/class_1799;)Lnet/minecraft/class_1856; method_8101 fromStacks + m ([Lnet/minecraft/class_1935;)Lnet/minecraft/class_1856; method_8091 fromItems + m (Lnet/minecraft/class_1799;)Z method_8093 test + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_1856; method_8102 deserialize + m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_1856; method_8106 fromTag + m (Ljava/lang/Object;)Z test test + m (Lnet/minecraft/class_1856$class_1859;)Ljava/util/stream/Stream; method_8104 func_209359_a_ + m ()[Lnet/minecraft/class_1799; method_8105 getMatchingStacks + m (Ljava/util/stream/Stream;)Lnet/minecraft/class_1856; method_26964 fromStacks + m (Lnet/minecraft/class_2540;)V method_8088 write + m (Ljava/util/stream/Stream;)Lnet/minecraft/class_1856; method_8092 fromItemListStream + m ()Lcom/google/gson/JsonElement; method_8089 serialize + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_1856$class_1857; method_8095 func_234825_c_ + m ()Z method_8103 hasNoMatchingItems + m ()V method_8096 determineMatchingStacks + m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17873 func_234820_a_ + m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_1856$class_1859; method_8090 func_209355_b_ + m (I)[Lnet/minecraft/class_1799; method_8097 func_209358_a_ + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1856$class_1859; method_8107 deserializeItemList + f [Lnet/minecraft/class_1856$class_1859; field_9019 acceptedItems + f Lit/unimi/dsi/fastutil/ints/IntList; field_9016 matchingStacksPacked + f Lnet/minecraft/class_1856; field_9017 EMPTY + f [Lnet/minecraft/class_1799; field_9018 matchingStacks +c net/minecraft/class_1856$1 net/minecraft/item/crafting/Ingredient$1 +c net/minecraft/class_1856$class_1857 net/minecraft/item/crafting/Ingredient$SingleItemList + f Lnet/minecraft/class_1799; field_9021 stack +c net/minecraft/class_1856$class_1859 net/minecraft/item/crafting/Ingredient$IItemList + m ()Lcom/google/gson/JsonObject; method_8109 serialize + m ()Ljava/util/Collection; method_8108 getStacks +c net/minecraft/class_1856$class_1858 net/minecraft/item/crafting/Ingredient$TagList + f Lnet/minecraft/class_3494; field_9022 tag +c net/minecraft/class_1860 net/minecraft/item/crafting/IRecipe + m ()Lnet/minecraft/class_3956; method_17716 getType + m ()Ljava/lang/String; method_8112 getGroup + m ()Lnet/minecraft/class_2371; method_8117 getIngredients + m ()Lnet/minecraft/class_2960; method_8114 getId + m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1937;)Z method_8115 matches + m (II)Z method_8113 canFit + m ()Lnet/minecraft/class_1865; method_8119 getSerializer + m ()Z method_8118 isDynamic + m ()Lnet/minecraft/class_1799; method_17447 getIcon + m ()Lnet/minecraft/class_1799; method_8110 getRecipeOutput + m (Lnet/minecraft/class_1263;)Lnet/minecraft/class_1799; method_8116 getCraftingResult + m (Lnet/minecraft/class_1263;)Lnet/minecraft/class_2371; method_8111 getRemainingItems +c net/minecraft/class_1861 net/minecraft/item/crafting/MapExtendingRecipe + m (Lnet/minecraft/class_22;)Z method_8120 isExplorationMap +c net/minecraft/class_1865 net/minecraft/item/crafting/IRecipeSerializer + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_1860; method_8122 read + m (Ljava/lang/String;Lnet/minecraft/class_1865;)Lnet/minecraft/class_1865; method_17724 register + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_1860;)V method_8124 write + m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1860; method_8121 read + f Lnet/minecraft/class_3957; field_17085 SMOKING + f Lnet/minecraft/class_1866; field_9036 CRAFTING_SPECIAL_FIREWORK_STAR + f Lnet/minecraft/class_3957; field_17347 CAMPFIRE_COOKING + f Lnet/minecraft/class_1866; field_9034 CRAFTING_SPECIAL_FIREWORK_STAR_FADE + f Lnet/minecraft/class_1865; field_9031 CRAFTING_SHAPELESS + f Lnet/minecraft/class_1866; field_9044 CRAFTING_SPECIAL_MAPCLONING + f Lnet/minecraft/class_3957; field_9042 SMELTING + f Lnet/minecraft/class_1866; field_9039 CRAFTING_SPECIAL_MAPEXTENDING + f Lnet/minecraft/class_3957; field_17084 BLASTING + f Lnet/minecraft/class_1866; field_9043 CRAFTING_SPECIAL_FIREWORK_ROCKET + f Lnet/minecraft/class_1865; field_25387 SMITHING + f Lnet/minecraft/class_1866; field_9041 CRAFTING_SPECIAL_SHULKERBOXCOLORING + f Lnet/minecraft/class_1866; field_9028 CRAFTING_SPECIAL_ARMORDYE + f Lnet/minecraft/class_1866; field_9030 CRAFTING_SPECIAL_SUSPICIOUSSTEW + f Lnet/minecraft/class_1865; field_9035 CRAFTING_SHAPED + f Lnet/minecraft/class_1866; field_9029 CRAFTING_SPECIAL_BOOKCLONING + f Lnet/minecraft/class_1866; field_19421 CRAFTING_SPECIAL_REPAIRITEM + f Lnet/minecraft/class_1866; field_9037 CRAFTING_SPECIAL_TIPPEDARROW + f Lnet/minecraft/class_1866; field_9038 CRAFTING_SPECIAL_BANNERDUPLICATE + f Lnet/minecraft/class_1865; field_17640 STONECUTTING + f Lnet/minecraft/class_1866; field_9040 CRAFTING_SPECIAL_SHIELD +c net/minecraft/class_1863 net/minecraft/item/crafting/RecipeManager + m (Ljava/lang/String;)Lcom/google/gson/JsonSyntaxException; method_17875 func_241449_a_ + m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1860; method_17720 deserializeRecipe + m (Lnet/minecraft/class_3956;)Lcom/google/common/collect/ImmutableMap$Builder; method_20707 func_223391_c + m (Ljava/util/Map;Lnet/minecraft/class_1860;)V method_20704 func_223392_a_ + m (Lnet/minecraft/class_2960;)Ljava/util/Optional; method_8130 getRecipe + m ()Ljava/util/stream/Stream; method_8127 getKeys + m (Ljava/lang/Iterable;)V method_20702 deserializeRecipes + m (Ljava/util/Map$Entry;)Ljava/util/Map; method_20703 func_223400_a + m (Lnet/minecraft/class_3956;Lnet/minecraft/class_1263;Lnet/minecraft/class_1937;)Ljava/util/List; method_17877 getRecipes + m (Ljava/util/Map;)Ljava/util/stream/Stream; method_17723 func_215376_b_ + m (Lnet/minecraft/class_3956;Lnet/minecraft/class_1937;Lnet/minecraft/class_1263;Lnet/minecraft/class_1860;)Ljava/util/stream/Stream; method_17718 func_215372_b + m (Lnet/minecraft/class_2960;Ljava/util/Map;)Lnet/minecraft/class_1860; method_17721 func_215368_a_ + m (Lnet/minecraft/class_3956;)Ljava/util/List; method_30027 getRecipesForType + m (Lnet/minecraft/class_3956;)Ljava/util/Map; method_20706 func_223390_c_ + m (Ljava/util/Map;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_20705 apply + m (Lnet/minecraft/class_3956;Lnet/minecraft/class_1937;Lnet/minecraft/class_1263;Lnet/minecraft/class_1860;)Ljava/util/stream/Stream; method_17874 func_215380_a_ + m (Lnet/minecraft/class_3956;Lnet/minecraft/class_1263;Lnet/minecraft/class_1937;)Ljava/util/Optional; method_8132 getRecipe + m ()Ljava/util/Collection; method_8126 getRecipes + m (Lnet/minecraft/class_1860;)Ljava/lang/String; method_17876 func_215379_a_ + m (Lnet/minecraft/class_3956;Lnet/minecraft/class_1263;Lnet/minecraft/class_1937;)Lnet/minecraft/class_2371; method_8128 getRecipeNonNull + m (Lnet/minecraft/class_3956;)Ljava/util/Map; method_17717 getRecipes + m (Lnet/minecraft/class_1860;)Lnet/minecraft/class_1860; method_30028 func_241453_b_ + m (Ljava/util/Map;)Ljava/util/stream/Stream; method_17722 func_215375_a_ + f Z field_9024 someRecipesErrored + f Lorg/apache/logging/log4j/Logger; field_9027 LOGGER + f Ljava/util/Map; field_9023 recipes + f Lcom/google/gson/Gson; field_19359 GSON +c net/minecraft/class_4317 net/minecraft/item/crafting/RepairItemRecipe + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_20808 matches + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_20807 getCraftingResult + m (Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Lnet/minecraft/class_1887;)V method_24364 func_234828_a_ +c net/minecraft/class_3956 net/minecraft/item/crafting/IRecipeType + m (Lnet/minecraft/class_1860;Lnet/minecraft/class_1937;Lnet/minecraft/class_1263;)Ljava/util/Optional; method_17725 matches + m (Ljava/lang/String;)Lnet/minecraft/class_3956; method_17726 register + f Lnet/minecraft/class_3956; field_17546 SMELTING + f Lnet/minecraft/class_3956; field_17547 BLASTING + f Lnet/minecraft/class_3956; field_17548 SMOKING + f Lnet/minecraft/class_3956; field_17549 CAMPFIRE_COOKING + f Lnet/minecraft/class_3956; field_17641 STONECUTTING + f Lnet/minecraft/class_3956; field_17545 CRAFTING + f Lnet/minecraft/class_3956; field_25388 SMITHING +c net/minecraft/class_3956$1 net/minecraft/item/crafting/IRecipeType$1 + m ()Ljava/lang/String; toString toString + f Ljava/lang/String; field_17550 field_222155_g +c net/minecraft/class_1867 net/minecraft/item/crafting/ShapelessRecipe + m (Lnet/minecraft/class_1867;)Ljava/lang/String; method_8139 access$000 + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17730 matches + m (Lnet/minecraft/class_1867;)Lnet/minecraft/class_2371; method_8140 access$100 + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17729 getCraftingResult + m (Lnet/minecraft/class_1867;)Lnet/minecraft/class_1799; method_8138 access$200 + f Lnet/minecraft/class_1799; field_9050 recipeOutput + f Lnet/minecraft/class_2960; field_9048 id + f Lnet/minecraft/class_2371; field_9047 recipeItems + f Ljava/lang/String; field_9049 group +c net/minecraft/class_1867$class_1868 net/minecraft/item/crafting/ShapelessRecipe$Serializer + m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1867; method_8142 read + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_1867; method_8141 read + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_1867;)V method_8143 write + m (Lcom/google/gson/JsonArray;)Lnet/minecraft/class_2371; method_8144 readIngredients +c net/minecraft/class_1869 net/minecraft/item/crafting/ShapedRecipe + m (Lnet/minecraft/class_1715;IIZ)Z method_8161 checkMatch + m ()I method_8150 getWidth + m ([Ljava/lang/String;Ljava/util/Map;II)Lnet/minecraft/class_2371; method_8148 deserializeIngredients + m (Lnet/minecraft/class_1869;)Lnet/minecraft/class_1799; method_8154 access$700 + m ()I method_8158 getHeight + m (Lcom/google/gson/JsonArray;)[Ljava/lang/String; method_8162 access$100 + m (Ljava/lang/String;)I method_8151 firstNonSpace + m (Lcom/google/gson/JsonArray;)[Ljava/lang/String; method_8145 patternFromJson + m (Ljava/lang/String;)I method_8153 lastNonSpace + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17727 getCraftingResult + m (Lnet/minecraft/class_1869;)Ljava/lang/String; method_8156 access$500 + m (Lnet/minecraft/class_1869;)Lnet/minecraft/class_2371; method_8147 access$600 + m ([Ljava/lang/String;)[Ljava/lang/String; method_8146 shrink + m (Lcom/google/gson/JsonObject;)Ljava/util/Map; method_8159 access$000 + m (Lcom/google/gson/JsonObject;)Ljava/util/Map; method_8157 deserializeKey + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17728 matches + m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1799; method_8155 deserializeItem + m (Ljava/lang/String;)Lcom/google/gson/JsonSyntaxException; method_17878 func_222129_c + m ([Ljava/lang/String;Ljava/util/Map;II)Lnet/minecraft/class_2371; method_8152 access$200 + m (Lnet/minecraft/class_1869;)I method_8160 access$300 + m (Lnet/minecraft/class_1869;)I method_8149 access$400 + f Lnet/minecraft/class_2960; field_9051 id + f I field_9055 recipeWidth + f Lnet/minecraft/class_2371; field_9052 recipeItems + f Ljava/lang/String; field_9056 group + f I field_9054 recipeHeight + f Lnet/minecraft/class_1799; field_9053 recipeOutput +c net/minecraft/class_1869$class_1870 net/minecraft/item/crafting/ShapedRecipe$Serializer + m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1869; method_8164 read + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_1869;)V method_8165 write + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_1869; method_8163 read +c net/minecraft/class_1871 net/minecraft/item/crafting/ShulkerBoxColoringRecipe + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17734 matches + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17733 getCraftingResult +c net/minecraft/class_1872 net/minecraft/item/crafting/ShieldRecipes + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17732 matches + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17731 getCraftingResult +c net/minecraft/class_1866 net/minecraft/item/crafting/SpecialRecipeSerializer + f Ljava/util/function/Function; field_9046 field_222176_t +c net/minecraft/class_3957 net/minecraft/item/crafting/CookingRecipeSerializer + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_1874; method_17737 read + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_1874;)V method_17735 write + m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1874; method_17736 read + m (Ljava/lang/String;)Ljava/lang/IllegalStateException; method_17879 func_222177_a + f Lnet/minecraft/class_3957$class_3958; field_17552 factory + f I field_17551 cookingTime +c net/minecraft/class_3957$class_3958 net/minecraft/item/crafting/CookingRecipeSerializer$IFactory + m (Lnet/minecraft/class_2960;Ljava/lang/String;Lnet/minecraft/class_1856;Lnet/minecraft/class_1799;FI)Lnet/minecraft/class_1874; create create +c net/minecraft/class_3861 net/minecraft/item/crafting/FurnaceRecipe +c net/minecraft/class_3972 net/minecraft/item/crafting/SingleItemRecipe + f Lnet/minecraft/class_3956; field_17646 type + f Lnet/minecraft/class_1865; field_17647 serializer + f Lnet/minecraft/class_2960; field_17644 id + f Ljava/lang/String; field_17645 group + f Lnet/minecraft/class_1856; field_17642 ingredient + f Lnet/minecraft/class_1799; field_17643 result +c net/minecraft/class_3972$class_3973 net/minecraft/item/crafting/SingleItemRecipe$Serializer + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_3972;)V method_17880 write + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_3972; method_17882 read + m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3972; method_17881 read + f Lnet/minecraft/class_3972$class_3973$class_3974; field_17648 factory +c net/minecraft/class_3972$class_3973$class_3974 net/minecraft/item/crafting/SingleItemRecipe$Serializer$IRecipeFactory + m (Lnet/minecraft/class_2960;Ljava/lang/String;Lnet/minecraft/class_1856;Lnet/minecraft/class_1799;)Lnet/minecraft/class_3972; create create +c net/minecraft/class_3862 net/minecraft/item/crafting/SmokingRecipe +c net/minecraft/class_1873 net/minecraft/item/crafting/SuspiciousStewRecipe + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17739 matches + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17738 getCraftingResult +c net/minecraft/class_3975 net/minecraft/item/crafting/StonecuttingRecipe +c net/minecraft/class_5357 net/minecraft/item/crafting/SmithingRecipe + m (Lnet/minecraft/class_5357;)Lnet/minecraft/class_1856; method_29541 func_234842_b_ + m (Lnet/minecraft/class_5357;)Lnet/minecraft/class_1856; method_29540 func_234841_a_ + m (Lnet/minecraft/class_1799;)Z method_30029 isValidAdditionItem + m (Lnet/minecraft/class_5357;)Lnet/minecraft/class_1799; method_29542 func_234843_c_ + f Lnet/minecraft/class_2960; field_25392 recipeId + f Lnet/minecraft/class_1856; field_25390 addition + f Lnet/minecraft/class_1799; field_25391 result + f Lnet/minecraft/class_1856; field_25389 base +c net/minecraft/class_5357$class_5358 net/minecraft/item/crafting/SmithingRecipe$Serializer + m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_5357; method_29544 read + m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_5357; method_29545 read + m (Lnet/minecraft/class_2540;Lnet/minecraft/class_5357;)V method_29543 write +c net/minecraft/class_1876 net/minecraft/item/crafting/TippedArrowRecipe + m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17740 getCraftingResult + m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17741 matches +c net/minecraft/class_1878 net/minecraft/enchantment/PowerEnchantment +c net/minecraft/class_1880 net/minecraft/enchantment/InfinityEnchantment +c net/minecraft/class_1877 net/minecraft/enchantment/FlameEnchantment +c net/minecraft/class_1881 net/minecraft/enchantment/PiercingEnchantment +c net/minecraft/class_1879 net/minecraft/enchantment/PunchEnchantment +c net/minecraft/class_1882 net/minecraft/enchantment/DamageEnchantment + f I field_9067 damageType + f [I field_9063 MIN_COST + f [I field_9064 LEVEL_COST_SPAN + f [Ljava/lang/String; field_9065 DAMAGE_NAMES + f [I field_9066 LEVEL_COST +c net/minecraft/class_1883 net/minecraft/enchantment/BindingCurseEnchantment +c net/minecraft/class_1884 net/minecraft/enchantment/EfficiencyEnchantment +c net/minecraft/class_1885 net/minecraft/enchantment/UnbreakingEnchantment + m (Lnet/minecraft/class_1799;ILjava/util/Random;)Z method_8176 negateDamage +c net/minecraft/class_1886 net/minecraft/enchantment/EnchantmentType + m (Lnet/minecraft/class_1792;)Z method_8177 canEnchantItem + m (Ljava/lang/String;)Lnet/minecraft/class_1886; valueOf valueOf + m ()[Lnet/minecraft/class_1886; values values + f Lnet/minecraft/class_1886; field_9080 ARMOR_HEAD + f Lnet/minecraft/class_1886; field_9069 DIGGER + f Lnet/minecraft/class_1886; field_9074 WEAPON + f Lnet/minecraft/class_1886; field_9076 ARMOR_LEGS + f Lnet/minecraft/class_1886; field_9079 ARMOR_FEET + f Lnet/minecraft/class_1886; field_9071 ARMOR_CHEST + f Lnet/minecraft/class_1886; field_9070 BOW + f Lnet/minecraft/class_1886; field_9082 BREAKABLE + f Lnet/minecraft/class_1886; field_9078 WEARABLE + f Lnet/minecraft/class_1886; field_9072 FISHING_ROD + f Lnet/minecraft/class_1886; field_9073 TRIDENT + f Lnet/minecraft/class_1886; field_9081 CROSSBOW + f Lnet/minecraft/class_1886; field_23747 VANISHABLE + f Lnet/minecraft/class_1886; field_9068 ARMOR + f [Lnet/minecraft/class_1886; field_9077 $VALUES +c net/minecraft/class_1886$11 net/minecraft/enchantment/EnchantmentType$6 +c net/minecraft/class_1886$10 net/minecraft/enchantment/EnchantmentType$5 +c net/minecraft/class_1886$13 net/minecraft/enchantment/EnchantmentType$8 +c net/minecraft/class_1886$12 net/minecraft/enchantment/EnchantmentType$7 +c net/minecraft/class_1886$14 net/minecraft/enchantment/EnchantmentType$9 +c net/minecraft/class_1886$9 net/minecraft/enchantment/EnchantmentType$4 +c net/minecraft/class_1886$2 net/minecraft/enchantment/EnchantmentType$10 +c net/minecraft/class_1886$1 net/minecraft/enchantment/EnchantmentType$1 +c net/minecraft/class_1886$4 net/minecraft/enchantment/EnchantmentType$12 +c net/minecraft/class_1886$3 net/minecraft/enchantment/EnchantmentType$11 +c net/minecraft/class_1886$6 net/minecraft/enchantment/EnchantmentType$14 +c net/minecraft/class_1886$5 net/minecraft/enchantment/EnchantmentType$13 +c net/minecraft/class_1886$8 net/minecraft/enchantment/EnchantmentType$3 +c net/minecraft/class_1886$7 net/minecraft/enchantment/EnchantmentType$2 +c net/minecraft/class_1887 net/minecraft/enchantment/Enchantment + m ()Z method_25950 canGenerateInLoot + m (ILnet/minecraft/class_1282;)I method_8181 calcModifierDamage + m ()Z method_25949 canVillagerTrade + m (Lnet/minecraft/class_1887;)Z method_8180 canApplyTogether + m (I)I method_20742 getMaxEnchantability + m ()Lnet/minecraft/class_1887$class_1888; method_8186 getRarity + m (Lnet/minecraft/class_1309;)Ljava/util/Map; method_8185 getEntityEquipment + m (I)Lnet/minecraft/class_1887; method_8191 getEnchantmentByID + m (Lnet/minecraft/class_1799;)Z method_8192 canApply + m (I)I method_8182 getMinEnchantability + m (ILnet/minecraft/class_1310;)F method_8196 calcDamageByCreature + m ()I method_8183 getMaxLevel + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;I)V method_8178 onUserHurt + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;I)V method_8189 onEntityDamaged + m ()Ljava/lang/String; method_8184 getName + m ()Z method_8195 isCurse + m (Lnet/minecraft/class_1887;)Z method_8188 isCompatibleWith + m (I)Lnet/minecraft/class_2561; method_8179 getDisplayName + m ()Z method_8193 isTreasureEnchantment + m ()Ljava/lang/String; method_8190 getDefaultTranslationKey + m ()I method_8187 getMinLevel + f Lnet/minecraft/class_1887$class_1888; field_9085 rarity + f Ljava/lang/String; field_9084 name + f [Lnet/minecraft/class_1304; field_9086 applicableEquipmentTypes + f Lnet/minecraft/class_1886; field_9083 type +c net/minecraft/class_1887$class_1888 net/minecraft/enchantment/Enchantment$Rarity + m ()I method_8197 getWeight + m (Ljava/lang/String;)Lnet/minecraft/class_1887$class_1888; valueOf valueOf + m ()[Lnet/minecraft/class_1887$class_1888; values values + f [Lnet/minecraft/class_1887$class_1888; field_9092 $VALUES + f Lnet/minecraft/class_1887$class_1888; field_9087 COMMON + f Lnet/minecraft/class_1887$class_1888; field_9088 RARE + f Lnet/minecraft/class_1887$class_1888; field_9090 UNCOMMON + f Lnet/minecraft/class_1887$class_1888; field_9091 VERY_RARE + f I field_9089 weight +c net/minecraft/class_1889 net/minecraft/enchantment/EnchantmentData + f I field_9094 enchantmentLevel + f Lnet/minecraft/class_1887; field_9093 enchantment +c net/minecraft/class_1890 net/minecraft/enchantment/EnchantmentHelper + m (Ljava/util/Random;Lnet/minecraft/class_1799;IZ)Ljava/util/List; method_8230 buildEnchantmentList + m (Lnet/minecraft/class_2499;)Ljava/util/Map; method_22445 deserializeEnchantments + m (Ljava/util/Random;IILnet/minecraft/class_1799;)I method_8227 calcItemStackEnchantability + m (Ljava/lang/Iterable;Lnet/minecraft/class_1282;)I method_8219 getEnchantmentModifierDamage + m (Lnet/minecraft/class_1309;)Z method_8200 hasAquaAffinity + m (Lnet/minecraft/class_1887;Lnet/minecraft/class_1309;)Ljava/util/Map$Entry; method_8204 getRandomItemWithEnchantment + m (Lnet/minecraft/class_1799;)Z method_24366 func_234845_i_ + m (Ljava/util/Map;Lnet/minecraft/class_2487;Lnet/minecraft/class_1887;)V method_17884 func_226651_a_ + m (Lnet/minecraft/class_1799;)I method_8215 getFishingSpeedBonus + m (Lnet/minecraft/class_1309;)I method_8232 getDepthStriderModifier + m (Ljava/util/List;Lnet/minecraft/class_1889;)V method_8231 removeIncompatible + m (Lnet/minecraft/class_1309;)I method_8234 getEfficiencyModifier + m (Lnet/minecraft/class_1799;)I method_8223 getFishingLuckBonus + m (Lnet/minecraft/class_1309;)I method_8211 getRespirationModifier + m (Lnet/minecraft/class_1890$class_1891;Lnet/minecraft/class_1799;)V method_8220 applyEnchantmentModifier + m (Lnet/minecraft/class_1887;Lnet/minecraft/class_1799;)I method_8225 getEnchantmentLevel + m (Lnet/minecraft/class_1887;Lnet/minecraft/class_1309;Ljava/util/function/Predicate;)Ljava/util/Map$Entry; method_24365 getRandomEquippedWithEnchantment + m (Ljava/util/Collection;Lnet/minecraft/class_1887;)Z method_8201 areAllCompatibleWith + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1310;)F method_8218 getModifierForCreature + m (Lorg/apache/commons/lang3/mutable/MutableInt;Lnet/minecraft/class_1282;Lnet/minecraft/class_1887;I)V method_8212 func_212576_a + m (Lnet/minecraft/class_1309;)I method_8226 getLootingModifier + m (Lnet/minecraft/class_1309;)F method_8217 getSweepingDamageRatio + m (Lnet/minecraft/class_1887;Lnet/minecraft/class_1309;)I method_8203 getMaxEnchantmentLevel + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;)V method_8210 applyThornEnchantments + m (Lnet/minecraft/class_1799;)I method_8202 getRiptideModifier + m (ILnet/minecraft/class_1799;Z)Ljava/util/List; method_8229 getEnchantmentDatas + m (Lnet/minecraft/class_1799;)I method_8206 getLoyaltyModifier + m (Ljava/util/Random;Lnet/minecraft/class_1799;IZ)Lnet/minecraft/class_1799; method_8233 addRandomEnchantment + m (Lnet/minecraft/class_1309;)I method_8199 getFireAspectModifier + m (Lnet/minecraft/class_1799;)Ljava/util/Map; method_8222 getEnchantments + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;)V method_8213 applyArthropodEnchantments + m (Lnet/minecraft/class_1309;)I method_8205 getKnockbackModifier + m (Lnet/minecraft/class_1799;)Z method_8228 hasChanneling + m (Lnet/minecraft/class_1309;)Z method_25951 hasSoulSpeed + m (Lnet/minecraft/class_1890$class_1891;Ljava/lang/Iterable;)V method_8209 applyEnchantmentModifierArray + m (Lnet/minecraft/class_1309;)Z method_8216 hasFrostWalker + m (Lnet/minecraft/class_1890$class_1891;ILnet/minecraft/class_1887;)V method_17883 func_222184_a + m (Lorg/apache/commons/lang3/mutable/MutableFloat;Lnet/minecraft/class_1310;Lnet/minecraft/class_1887;I)V method_8208 func_212573_a + m (Lnet/minecraft/class_1799;)Z method_8221 hasVanishingCurse + m (Ljava/util/Map;Lnet/minecraft/class_1799;)V method_8214 setEnchantments + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;Lnet/minecraft/class_1887;I)V method_8207 func_212574_a + m (Lnet/minecraft/class_1799;)Z method_8224 hasBindingCurse + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;Lnet/minecraft/class_1887;I)V method_8198 func_212575_b +c net/minecraft/class_1890$class_1891 net/minecraft/enchantment/EnchantmentHelper$IEnchantmentVisitor + m (Lnet/minecraft/class_1887;I)V accept accept +c net/minecraft/class_1892 net/minecraft/enchantment/FireAspectEnchantment +c net/minecraft/class_1893 net/minecraft/enchantment/Enchantments + m (Ljava/lang/String;Lnet/minecraft/class_1887;)Lnet/minecraft/class_1887; method_8235 register + f Lnet/minecraft/class_1887; field_9105 AQUA_AFFINITY + f Lnet/minecraft/class_1887; field_9127 RESPIRATION + f [Lnet/minecraft/class_1304; field_9102 ARMOR_SLOTS + f Lnet/minecraft/class_1887; field_9097 THORNS + f Lnet/minecraft/class_1887; field_9107 BLAST_PROTECTION + f Lnet/minecraft/class_1887; field_9116 PUNCH + f Lnet/minecraft/class_1887; field_9126 FLAME + f Lnet/minecraft/class_1887; field_9096 PROJECTILE_PROTECTION + f Lnet/minecraft/class_1887; field_23071 SOUL_SPEED + f Lnet/minecraft/class_1887; field_9125 INFINITY + f Lnet/minecraft/class_1887; field_9100 LURE + f Lnet/minecraft/class_1887; field_9114 LUCK_OF_THE_SEA + f Lnet/minecraft/class_1887; field_9118 SHARPNESS + f Lnet/minecraft/class_1887; field_9128 DEPTH_STRIDER + f Lnet/minecraft/class_1887; field_9113 BINDING_CURSE + f Lnet/minecraft/class_1887; field_9122 FROST_WALKER + f Lnet/minecraft/class_1887; field_9117 CHANNELING + f Lnet/minecraft/class_1887; field_9104 RIPTIDE + f Lnet/minecraft/class_1887; field_9124 FIRE_ASPECT + f Lnet/minecraft/class_1887; field_9108 MULTISHOT + f Lnet/minecraft/class_1887; field_9115 SWEEPING + f Lnet/minecraft/class_1887; field_9110 LOOTING + f Lnet/minecraft/class_1887; field_9120 LOYALTY + f Lnet/minecraft/class_1887; field_9112 BANE_OF_ARTHROPODS + f Lnet/minecraft/class_1887; field_9123 SMITE + f Lnet/minecraft/class_1887; field_9121 KNOCKBACK + f Lnet/minecraft/class_1887; field_9106 IMPALING + f Lnet/minecraft/class_1887; field_9109 VANISHING_CURSE + f Lnet/minecraft/class_1887; field_9130 FORTUNE + f Lnet/minecraft/class_1887; field_9119 UNBREAKING + f Lnet/minecraft/class_1887; field_9111 PROTECTION + f Lnet/minecraft/class_1887; field_9103 POWER + f Lnet/minecraft/class_1887; field_9129 FEATHER_FALLING + f Lnet/minecraft/class_1887; field_9095 FIRE_PROTECTION + f Lnet/minecraft/class_1887; field_9131 EFFICIENCY + f Lnet/minecraft/class_1887; field_9098 QUICK_CHARGE + f Lnet/minecraft/class_1887; field_9101 MENDING + f Lnet/minecraft/class_1887; field_9132 PIERCING + f Lnet/minecraft/class_1887; field_9099 SILK_TOUCH +c net/minecraft/class_1894 net/minecraft/enchantment/FrostWalkerEnchantment + m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;I)V method_8236 freezeNearby +c net/minecraft/class_1895 net/minecraft/enchantment/LureEnchantment +c net/minecraft/class_1896 net/minecraft/enchantment/LootBonusEnchantment +c net/minecraft/class_1897 net/minecraft/enchantment/KnockbackEnchantment +c net/minecraft/class_1899 net/minecraft/enchantment/MendingEnchantment +c net/minecraft/class_1902 net/minecraft/enchantment/RespirationEnchantment +c net/minecraft/class_1898 net/minecraft/enchantment/MultishotEnchantment +c net/minecraft/class_1904 net/minecraft/enchantment/QuickChargeEnchantment +c net/minecraft/class_1900 net/minecraft/enchantment/ProtectionEnchantment + m (Lnet/minecraft/class_1309;I)I method_8238 getFireTimeForEntity + m (Lnet/minecraft/class_1309;D)D method_8237 getBlastDamageReduction + f Lnet/minecraft/class_1900$class_1901; field_9133 protectionType +c net/minecraft/class_1900$class_1901 net/minecraft/enchantment/ProtectionEnchantment$Type + m ()[Lnet/minecraft/class_1900$class_1901; values values + m ()I method_8240 getMinimalEnchantability + m (Ljava/lang/String;)Lnet/minecraft/class_1900$class_1901; valueOf valueOf + m ()I method_8239 getEnchantIncreasePerLevel + f Lnet/minecraft/class_1900$class_1901; field_9140 FALL + f Lnet/minecraft/class_1900$class_1901; field_9139 FIRE + f [Lnet/minecraft/class_1900$class_1901; field_9136 $VALUES + f Ljava/lang/String; field_9137 typeName + f Lnet/minecraft/class_1900$class_1901; field_9141 EXPLOSION + f I field_9135 minEnchantability + f Lnet/minecraft/class_1900$class_1901; field_9142 PROJECTILE + f I field_9134 levelCost + f Lnet/minecraft/class_1900$class_1901; field_9138 ALL +c net/minecraft/class_1903 net/minecraft/enchantment/SweepingEnchantment + m (I)F method_8241 getSweepingDamageRatio +c net/minecraft/class_4948 net/minecraft/enchantment/SoulSpeedEnchantment +c net/minecraft/class_1905 net/minecraft/enchantment/ChannelingEnchantment +c net/minecraft/class_1906 net/minecraft/enchantment/ThornsEnchantment + m (ILjava/util/Random;)Z method_8243 shouldHit + m (ILjava/util/Random;)I method_8242 getDamage + m (Ljava/util/Map$Entry;Lnet/minecraft/class_1309;)V method_30345 func_222183_b +c net/minecraft/class_1907 net/minecraft/enchantment/LoyaltyEnchantment +c net/minecraft/class_1908 net/minecraft/enchantment/ImpalingEnchantment +c net/minecraft/class_1909 net/minecraft/enchantment/SilkTouchEnchantment +c net/minecraft/class_1910 net/minecraft/enchantment/RiptideEnchantment +c net/minecraft/class_1913 net/minecraft/enchantment/DepthStriderEnchantment +c net/minecraft/class_1911 net/minecraft/enchantment/VanishingCurseEnchantment +c net/minecraft/class_1912 net/minecraft/enchantment/AquaAffinityEnchantment +c net/minecraft/class_1915 net/minecraft/entity/merchant/IMerchant + m (Lnet/minecraft/class_1657;)V method_8259 setCustomer + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2561;I)V method_17449 openMerchantContainer + m (I)V method_19271 setXP + m (Lnet/minecraft/class_1914;)V method_8262 onTrade + m (Lnet/minecraft/class_1799;)V method_8258 verifySellingItem + m ()Lnet/minecraft/class_3414; method_18010 getYesSound + m ()Lnet/minecraft/class_1916; method_8264 getOffers + m (Lnet/minecraft/class_1916;)V method_8261 setClientSideOffers + m ()Z method_19270 hasXPBar + m ()I method_19269 getXp + m ()Lnet/minecraft/class_1937; method_8260 getWorld + m (ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17448 func_213701_a + m ()Lnet/minecraft/class_1657; method_8257 getCustomer + m ()Z method_20708 canRestockTrades +c net/minecraft/class_1916 net/minecraft/item/MerchantOffers + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;I)Lnet/minecraft/class_1914; method_8267 func_222197_a + m (Lnet/minecraft/class_2540;)V method_8270 write + m ()Lnet/minecraft/class_2487; method_8268 write + m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_1916; method_8265 read +c net/minecraft/class_1914 net/minecraft/item/MerchantOffer + m ()V method_19276 resetSpecialPrice + m ()Lnet/minecraft/class_2487; method_8251 write + m ()I method_19279 getGivenExp + m ()Z method_8256 getDoesRewardExp + m (I)V method_19273 setSpecialPrice + m ()Z method_21834 hasBeenUsed + m (I)V method_8245 increaseSpecialPrice + m ()Z method_8255 hasNoUsesLeft + m ()V method_8254 makeUnavailable + m ()I method_8248 getMaxUses + m ()Lnet/minecraft/class_1799; method_8247 getBuyingStackSecond + m ()Lnet/minecraft/class_1799; method_8250 getSellingStack + m ()Lnet/minecraft/class_1799; method_19272 getDiscountedBuyingStackFirst + m ()I method_8249 getUses + m ()Lnet/minecraft/class_1799; method_8246 getBuyingStackFirst + m ()V method_8244 increaseUses + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_16952 matches + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_16953 doTransaction + m ()F method_19278 getPriceMultiplier + m ()I method_19277 getSpecialPrice + m ()V method_19275 resetUses + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_16954 equalIgnoringDamage + m ()Lnet/minecraft/class_1799; method_18019 getCopyOfSellingStack + m ()I method_21725 getDemand + m ()V method_19274 calculateDemand + f Lnet/minecraft/class_1799; field_9143 buyingStackSecond + f I field_18676 specialPrice + f Lnet/minecraft/class_1799; field_9146 buyingStackFirst + f I field_9144 maxUses + f I field_9147 uses + f Z field_9145 doesRewardEXP + f I field_18679 givenEXP + f Lnet/minecraft/class_1799; field_9148 sellingStack + f F field_18678 priceMultiplier + f I field_18677 demand +c net/minecraft/class_1918 net/minecraft/tileentity/CommandBlockLogic + m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_1269; method_8288 tryOpenEditCommandBlock + m ()V method_8295 updateCommand + m ()I method_8304 getSuccessCount + m ()Lnet/minecraft/class_2561; method_8299 getName + m (Ljava/lang/String;)V method_8286 setCommand + m (Lnet/minecraft/class_2487;)V method_8305 read + m ()Ljava/lang/String; method_8302 func_210166_g + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_8297 write + m (Lnet/minecraft/class_2561;)V method_8290 setName + m (Lnet/minecraft/class_1937;)Z method_8301 trigger + m (Lnet/minecraft/class_2561;)V method_8291 setLastOutput + m ()Ljava/lang/String; method_8289 getCommand + m ()Lnet/minecraft/class_2561; method_8292 getLastOutput + m ()Lnet/minecraft/class_2168; method_8303 getCommandSource + m ()Lnet/minecraft/class_243; method_8300 getPositionVector + m ()Z method_8296 shouldTrackOutput + m (Z)V method_8287 setTrackOutput + m (Lcom/mojang/brigadier/context/CommandContext;ZI)V method_8294 func_209527_a + m (I)V method_8298 setSuccessCount + m ()Lnet/minecraft/class_3218; method_8293 getWorld + f Z field_9164 trackOutput + f Z field_9166 updateLastExecution + f Lnet/minecraft/class_2561; field_9162 customName + f Ljava/text/SimpleDateFormat; field_9169 TIMESTAMP_FORMAT + f Lnet/minecraft/class_2561; field_9165 lastOutput + f Ljava/lang/String; field_9168 commandStored + f I field_9163 successCount + f Lnet/minecraft/class_2561; field_21515 field_226655_c_ + f J field_9167 lastExecution +c net/minecraft/class_1920 net/minecraft/world/IBlockDisplayReader + m (Lnet/minecraft/class_2338;)Z method_8311 canSeeSky + m (Lnet/minecraft/class_1944;Lnet/minecraft/class_2338;)I method_8314 getLightFor + m (Lnet/minecraft/class_2350;Z)F method_24852 func_230487_a_ + m ()Lnet/minecraft/class_3568; method_22336 getLightManager + m (Lnet/minecraft/class_2338;Lnet/minecraft/world/level/ColorResolver;)I method_23752 getBlockColor + m (Lnet/minecraft/class_2338;I)I method_22335 getLightSubtracted +c net/minecraft/class_1917 net/minecraft/world/spawner/AbstractSpawner + m ()V method_8285 tick + m (Lnet/minecraft/class_2487;)V method_8280 read + m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_8272 write + m ()D method_8279 getPrevMobRotation + m (I)Z method_8275 setDelayToMin + m ()D method_8278 getMobRotation + m (Lnet/minecraft/class_1952;)V method_8277 setNextSpawnData + m ()Lnet/minecraft/class_1297; method_8283 getCachedEntity + m ()Lnet/minecraft/class_1937; method_8271 getWorld + m (DDDLnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_18085 func_221408_a + m ()Lnet/minecraft/class_2338; method_8276 getSpawnerPosition + m ()Lnet/minecraft/class_2960; method_8281 getEntityId + m ()Z method_8284 isActivated + m ()V method_8282 resetTimer + m (I)V method_8273 broadcastEvent + m (Lnet/minecraft/class_1299;)V method_8274 setEntityType + f I field_9160 maxNearbyEntities + f I field_9149 spawnCount + f I field_9150 maxSpawnDelay + f Ljava/util/List; field_9152 potentialSpawns + f I field_9151 minSpawnDelay + f Lnet/minecraft/class_1297; field_9153 cachedEntity + f Lorg/apache/logging/log4j/Logger; field_9156 LOGGER + f I field_9157 spawnRange + f I field_9158 activatingRangeFromPlayer + f Lnet/minecraft/class_1952; field_9155 spawnData + f D field_9159 prevMobRotation + f D field_9161 mobRotation + f I field_9154 spawnDelay +c net/minecraft/class_1922 net/minecraft/world/IBlockReader + m (Lnet/minecraft/class_265;Ljava/util/function/Supplier;)D method_30346 func_242402_a + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2586; method_8321 getTileEntity + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_3610; method_8316 getFluidState + m (Lnet/minecraft/class_3959;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3965; method_17743 func_217297_a + m (Lnet/minecraft/class_3959;)Lnet/minecraft/class_3965; method_17746 func_217302_b + m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;Lnet/minecraft/class_2338;Lnet/minecraft/class_265;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3965; method_17745 rayTraceBlocks + m (Lnet/minecraft/class_3959;Ljava/util/function/BiFunction;Ljava/util/function/Function;)Ljava/lang/Object; method_17744 doRayTrace + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_8320 getBlockState + m (Lnet/minecraft/class_2338;)D method_30347 func_242403_h + m (Lnet/minecraft/class_3959;)Lnet/minecraft/class_3965; method_17742 rayTraceBlocks + m (Lnet/minecraft/class_238;)Ljava/util/stream/Stream; method_29546 func_234853_a_ + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_30348 func_242404_j + m (Lnet/minecraft/class_2338;)I method_8317 getLightValue + m ()I method_8322 getHeight + m ()I method_8315 getMaxLightLevel +c net/minecraft/class_1919 net/minecraft/block/BlockEventData + m (Ljava/lang/Object;)Z equals equals + m ()Lnet/minecraft/class_2338; method_8306 getPosition + m ()I hashCode hashCode + m ()Lnet/minecraft/class_2248; method_8309 getBlock + m ()I method_8308 getEventParameter + m ()Ljava/lang/String; toString toString + m ()I method_8307 getEventID + f Lnet/minecraft/class_2248; field_9172 blockType + f I field_9170 eventParameter + f Lnet/minecraft/class_2338; field_9173 position + f I field_9171 eventID +c net/minecraft/class_1923 net/minecraft/util/math/ChunkPos + m (Lnet/minecraft/class_1923;I)Ljava/util/stream/Stream; method_19280 getAllInBox + m ()I method_8326 getXStart + m (Lnet/minecraft/class_1923;Lnet/minecraft/class_1923;)Ljava/util/stream/Stream; method_19281 getAllInBox + m ()I method_8328 getZStart + m ()I method_8327 getXEnd + m ()Ljava/lang/String; toString toString + m ()I method_8329 getZEnd + m ()I method_17885 getRegionCoordX + m ()I method_17886 getRegionCoordZ + m (J)I method_8325 getX + m ()Lnet/minecraft/class_2338; method_8323 asBlockPos + m ()I method_17887 getRegionPositionX + m (J)I method_8332 getZ + m ()I method_17888 getRegionPositionZ + m (Ljava/lang/Object;)Z equals equals + m ()J method_8324 asLong + m ()I hashCode hashCode + m (II)J method_8331 asLong + m (Lnet/minecraft/class_1923;)I method_24022 getChessboardDistance + f J field_17348 SENTINEL + f I field_9181 x + f I field_9180 z +c net/minecraft/class_1923$1 net/minecraft/util/math/ChunkPos$1 + m (Ljava/util/function/Consumer;)Z tryAdvance tryAdvance + f I field_18682 field_222235_c + f Lnet/minecraft/class_1923; field_18681 field_222234_b + f I field_18683 field_222236_d + f Lnet/minecraft/class_1923; field_18680 field_222233_a + f Lnet/minecraft/class_1923; field_18684 current +c net/minecraft/class_3959 net/minecraft/util/math/RayTraceContext + m (Lnet/minecraft/class_3610;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_17749 getFluidShape + m ()Lnet/minecraft/class_243; method_17750 getStartVec + m ()Lnet/minecraft/class_243; method_17747 getEndVec + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_17748 getBlockShape + f Lnet/minecraft/class_3959$class_242; field_17556 fluidMode + f Lnet/minecraft/class_3726; field_17557 context + f Lnet/minecraft/class_243; field_17554 endVec + f Lnet/minecraft/class_243; field_17553 startVec + f Lnet/minecraft/class_3959$class_3960; field_17555 blockMode +c net/minecraft/class_3959$class_3961 net/minecraft/util/math/RayTraceContext$IVoxelProvider + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; get get +c net/minecraft/class_3959$class_3960 net/minecraft/util/math/RayTraceContext$BlockMode + m ()[Lnet/minecraft/class_3959$class_3960; values values + m (Ljava/lang/String;)Lnet/minecraft/class_3959$class_3960; valueOf valueOf + f Lnet/minecraft/class_3959$class_3960; field_17559 OUTLINE + f [Lnet/minecraft/class_3959$class_3960; field_17561 $VALUES + f Lnet/minecraft/class_3959$class_3960; field_23142 VISUAL + f Lnet/minecraft/class_3959$class_3961; field_17560 provider + f Lnet/minecraft/class_3959$class_3960; field_17558 COLLIDER +c net/minecraft/class_3959$class_242 net/minecraft/util/math/RayTraceContext$FluidMode + m (Lnet/minecraft/class_3610;)Z method_1017 func_222247_c + m (Ljava/lang/String;)Lnet/minecraft/class_3959$class_242; valueOf valueOf + m (Lnet/minecraft/class_3610;)Z method_17751 test + m ()[Lnet/minecraft/class_3959$class_242; values values + m (Lnet/minecraft/class_3610;)Z method_1018 func_222246_b + f Lnet/minecraft/class_3959$class_242; field_1348 NONE + f Lnet/minecraft/class_3959$class_242; field_1347 ANY + f [Lnet/minecraft/class_3959$class_242; field_1349 $VALUES + f Lnet/minecraft/class_3959$class_242; field_1345 SOURCE_ONLY + f Ljava/util/function/Predicate; field_1346 fluidTest +c net/minecraft/class_4296 net/minecraft/world/SerializableTickList + m (Lnet/minecraft/class_2499;Ljava/util/function/Function;Ljava/util/function/Function;)Lnet/minecraft/class_4296; method_20512 create + m (JLnet/minecraft/class_1954;)Lnet/minecraft/class_4296$class_4989; method_26367 func_234854_a_ + m ()Lnet/minecraft/class_2499; method_20463 func_234857_b_ + m (Lnet/minecraft/class_1951;Lnet/minecraft/class_4296$class_4989;)V method_26369 func_234856_a_ + m (Lnet/minecraft/class_1951;)V method_26368 func_234855_a_ + f Ljava/util/function/Function; field_19276 toId + f Ljava/util/List; field_19275 ticks +c net/minecraft/class_4296$class_4989 net/minecraft/world/SerializableTickList$TickHolder + m (Lnet/minecraft/class_4296$class_4989;)Ljava/lang/Object; method_26370 func_234862_a_ + m ()Ljava/lang/String; toString toString + f Lnet/minecraft/class_2338; field_23257 field_234858_a_ + f Ljava/lang/Object; field_23260 field_234861_d_ + f Lnet/minecraft/class_1953; field_23259 field_234860_c_ + f I field_23258 field_234859_b_ +c net/minecraft/class_4296$1 net/minecraft/world/SerializableTickList$1 +c net/minecraft/class_5329 net/minecraft/util/math/shapes/VoxelShapeSpliterator + m (Ljava/util/function/Consumer;)Z tryAdvance tryAdvance + m (Lnet/minecraft/class_2784;Lnet/minecraft/class_238;)Z method_29284 func_234877_a_ + m (II)Lnet/minecraft/class_1922; method_29283 func_234876_a_ + m (Ljava/util/function/Consumer;)Z method_29286 func_234879_b_ + m (Lnet/minecraft/class_265;Lnet/minecraft/class_238;)Z method_30131 func_241461_b_ + m (Ljava/util/function/Consumer;)Z method_29285 func_234878_a_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_30031 func_241459_a_ + m (Lnet/minecraft/class_265;Lnet/minecraft/class_238;)Z method_30130 func_241460_a_ + f Lnet/minecraft/class_265; field_25173 shape + f Lnet/minecraft/class_1941; field_25174 reader + f Lnet/minecraft/class_3980; field_25171 cubeCoordinateIterator + f Lnet/minecraft/class_238; field_25169 aabb + f Lnet/minecraft/class_2338$class_2339; field_25172 mutablePos + f Lnet/minecraft/class_1297; field_25168 entity + f Ljava/util/function/BiPredicate; field_25669 statePositionPredicate + f Lnet/minecraft/class_3726; field_25170 context + f Z field_25175 field_234875_h_ +c net/minecraft/class_1941 net/minecraft/world/ICollisionReader + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/stream/Stream; method_8600 func_234867_d_ + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;)Ljava/util/stream/Stream; method_20812 getCollisionShapes + m ()Lnet/minecraft/class_2784; method_8621 getWorldBorder + m (Lnet/minecraft/class_1297;)Z method_26970 func_234866_d_ + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;)Z method_8587 hasNoCollisions + m (II)Lnet/minecraft/class_1922; method_22338 getBlockReader + m (Lnet/minecraft/class_1297;)Z method_17892 hasNoCollisions + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Z method_8628 placedBlockCollides + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_265;)Z method_8611 checkNoEntityCollision + m (Lnet/minecraft/class_238;)Z method_18026 hasNoCollisions + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/BiPredicate;)Ljava/util/stream/Stream; method_30030 func_241457_a_ + m (Lnet/minecraft/class_1297;)Z method_26968 func_234863_a_ + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/BiPredicate;)Z method_30635 func_242405_a + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Z method_8590 hasNoCollisions + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/stream/Stream; method_20743 func_230318_c_ + m (Lnet/minecraft/class_1297;)Z method_26969 func_234864_b_ + m (Lnet/minecraft/class_1297;)Z method_8606 checkNoEntityCollision +c net/minecraft/class_5304 net/minecraft/world/spawner/ISpecialSpawner + m (Lnet/minecraft/class_3218;ZZ)I method_6445 func_230253_a_ +c net/minecraft/class_5423 net/minecraft/world/IBiomeReader + m (Lnet/minecraft/class_2338;)Ljava/util/Optional; method_31081 func_242406_i + m ()Lnet/minecraft/class_5455; method_30349 func_241828_r +c net/minecraft/class_2682 net/minecraft/world/EmptyBlockReader + m (Ljava/lang/String;)Lnet/minecraft/class_2682; valueOf valueOf + m ()[Lnet/minecraft/class_2682; values values + f [Lnet/minecraft/class_2682; field_12295 $VALUES + f Lnet/minecraft/class_2682; field_12294 INSTANCE +c net/minecraft/class_5359 net/minecraft/util/datafix/codec/DatapackCodec + m ()Ljava/util/List; method_29550 getDisabled + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_29549 func_234886_a_ + m (Lnet/minecraft/class_5359;)Ljava/util/List; method_29551 func_234888_b_ + m (Lnet/minecraft/class_5359;)Ljava/util/List; method_29548 func_234885_a_ + m ()Ljava/util/List; method_29547 getEnabled + f Lcom/mojang/serialization/Codec; field_25394 CODEC + f Ljava/util/List; field_25396 disabled + f Ljava/util/List; field_25395 enabled + f Lnet/minecraft/class_5359; field_25393 VANILLA_CODEC +c net/minecraft/class_5361 net/minecraft/world/EntityExplosionContext + m (Lnet/minecraft/class_1927;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;Ljava/lang/Float;)Ljava/lang/Float; method_29552 func_234890_a_ + f Lnet/minecraft/class_1297; field_25399 entity +c net/minecraft/class_1925 net/minecraft/world/EmptyTickList + m ()Lnet/minecraft/class_1925; method_8339 get + f Lnet/minecraft/class_1925; field_9182 INSTANCE +c net/minecraft/class_1927 net/minecraft/world/Explosion + m ()V method_8352 clearAffectedBlockPositions + m (Lit/unimi/dsi/fastutil/objects/ObjectArrayList;Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;)V method_24023 handleExplosionDrops + m ()V method_8348 doExplosionA + m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_5362; method_29553 getEntityExplosionContext + m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)F method_17752 getBlockDensity + m ()Lnet/minecraft/class_1309; method_8347 getExplosivePlacedBy + m ()Lnet/minecraft/class_1282; method_8349 getDamageSource + m (Lit/unimi/dsi/fastutil/objects/ObjectArrayList;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_24024 func_229977_a_ + m ()Ljava/util/List; method_8346 getAffectedBlockPositions + m ()Ljava/util/Map; method_8351 getPlayerKnockbackMap + m (Z)V method_8350 doExplosionB + f Lnet/minecraft/class_5362; field_25400 context + f Ljava/util/Random; field_9191 random + f Lnet/minecraft/class_1927$class_4179; field_9184 mode + f Z field_9186 causesFire + f Lnet/minecraft/class_1297; field_9185 exploder + f F field_9190 size + f Lnet/minecraft/class_1937; field_9187 world + f Lnet/minecraft/class_1282; field_9193 damageSource + f Lnet/minecraft/class_5362; field_25818 DEFAULT_CONTEXT + f D field_9195 x + f D field_9192 y + f Ljava/util/Map; field_9194 playerKnockbackMap + f D field_9189 z + f Ljava/util/List; field_9188 affectedBlockPositions +c net/minecraft/class_1927$class_4179 net/minecraft/world/Explosion$Mode + m (Ljava/lang/String;)Lnet/minecraft/class_1927$class_4179; valueOf valueOf + m ()[Lnet/minecraft/class_1927$class_4179; values values + f Lnet/minecraft/class_1927$class_4179; field_18685 NONE + f [Lnet/minecraft/class_1927$class_4179; field_18688 $VALUES + f Lnet/minecraft/class_1927$class_4179; field_18686 BREAK + f Lnet/minecraft/class_1927$class_4179; field_18687 DESTROY +c net/minecraft/class_1924 net/minecraft/world/IEntityReader + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;)Ljava/util/List; method_8335 getEntitiesWithinAABBExcludingEntity + m (DDDDLjava/util/function/Predicate;)Lnet/minecraft/class_1657; method_8604 getClosestPlayer + m (Ljava/lang/Class;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/List; method_21729 getLoadedEntitiesWithinAABB + m (Ljava/lang/Class;Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;Lnet/minecraft/class_238;)Ljava/util/List; method_18466 getTargettableEntitiesWithinAABB + m (Ljava/util/List;Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;DDD)Lnet/minecraft/class_1309; method_18468 getClosestEntity + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/List; method_8333 getEntitiesInAABBexcluding + m ()Ljava/util/List; method_18456 getPlayers + m (Ljava/util/UUID;)Lnet/minecraft/class_1657; method_18470 getPlayerByUuid + m (Ljava/lang/Class;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/List; method_8390 getEntitiesWithinAABB + m (DDDDZ)Lnet/minecraft/class_1657; method_18459 getClosestPlayer + m (Ljava/lang/Class;Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;DDDLnet/minecraft/class_238;)Lnet/minecraft/class_1309; method_21726 getClosestEntityWithinAABB + m (Ljava/lang/Class;Lnet/minecraft/class_238;)Ljava/util/List; method_18467 getEntitiesWithinAABB + m (Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;DDD)Lnet/minecraft/class_1657; method_18463 getClosestPlayer + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/stream/Stream; method_20743 func_230318_c_ + m (Ljava/lang/Class;Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;DDDLnet/minecraft/class_238;)Lnet/minecraft/class_1309; method_21727 func_225318_b + m (Ljava/lang/Class;Lnet/minecraft/class_238;)Ljava/util/List; method_21728 getLoadedEntitiesWithinAABB + m (Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1657; method_18462 getClosestPlayer + m (Lnet/minecraft/class_1297;D)Lnet/minecraft/class_1657; method_18460 getClosestPlayer + m (Lnet/minecraft/class_238;Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Z method_8338 func_234892_b_ + m (Lnet/minecraft/class_4051;DDD)Lnet/minecraft/class_1657; method_18461 getClosestPlayer + m (Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;Lnet/minecraft/class_238;)Ljava/util/List; method_18464 getTargettablePlayersWithinAABB + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_265;)Z method_8611 checkNoEntityCollision + m (DDDD)Z method_18458 isPlayerWithin +c net/minecraft/class_1926 net/minecraft/world/FoliageColors + m ()I method_8341 getDefault + m ()I method_8342 getSpruce + m ()I method_8343 getBirch + m (DD)I method_8344 get + m ([I)V method_8340 setFoliageBiomeColorizer + f [I field_9183 foliageBuffer +c net/minecraft/class_5362 net/minecraft/world/ExplosionContext + m (Lnet/minecraft/class_1927;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;)Ljava/util/Optional; method_29555 getExplosionResistance + m (Lnet/minecraft/class_1927;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;F)Z method_29554 canExplosionDestroyBlock +c net/minecraft/class_1928 net/minecraft/world/GameRules + m (Lnet/minecraft/class_1928;Lnet/minecraft/server/MinecraftServer;)V method_27322 func_234899_a_ + m (Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928;Lnet/minecraft/server/MinecraftServer;)V method_27321 getValue + m (Lnet/minecraft/class_1928$class_4313;)I method_8356 getInt + m (Lcom/mojang/serialization/DynamicLike;Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4315;)V method_20747 func_234902_a_ + m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_1928$class_4310;)V method_8361 func_223589_a + m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_1928$class_4310;)V method_22386 func_226686_a_ + m (Lnet/minecraft/class_1928$class_4311;Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V method_20750 func_234906_b_ + m ()Lorg/apache/logging/log4j/Logger; method_20749 func_223588_b + m (Lnet/minecraft/class_1928;Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_1928$class_4313;)V method_27323 func_234900_a_ + m (Ljava/util/Map$Entry;)Lnet/minecraft/class_1928$class_4315; method_27324 func_234904_a_ + m (Lnet/minecraft/class_1928$class_4313;)Lnet/minecraft/class_1928$class_4315; method_20746 get + m ()Lnet/minecraft/class_2487; method_8358 write + m (Lnet/minecraft/class_1928$class_4313;)Z method_8355 getBoolean + m (Lnet/minecraft/class_1928$class_4311;)V method_20744 visitAll + m (Lnet/minecraft/class_1928$class_4313;)Ljava/lang/String; method_20752 func_223597_d + m (Lnet/minecraft/class_1928$class_4311;Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V method_20745 visit + m ()Lnet/minecraft/class_1928; method_27325 clone + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4315;)V method_20751 func_226688_b_ + m (Ljava/util/Map$Entry;)Lnet/minecraft/class_1928$class_4315; method_20748 func_226684_a_ + m (Lcom/mojang/serialization/DynamicLike;)V method_8357 decode + m (Ljava/lang/String;Lnet/minecraft/class_1928$class_5198;Lnet/minecraft/class_1928$class_4314;)Lnet/minecraft/class_1928$class_4313; method_8359 register + f Lnet/minecraft/class_1928$class_4313; field_19405 MAX_ENTITY_CRAMMING + f Lorg/apache/logging/log4j/Logger; field_19410 LOGGER + f Lnet/minecraft/class_1928$class_4313; field_19407 DO_LIMITED_CRAFTING + f Lnet/minecraft/class_1928$class_4313; field_19409 ANNOUNCE_ADVANCEMENTS + f Lnet/minecraft/class_1928$class_4313; field_19388 MOB_GRIEFING + f Lnet/minecraft/class_1928$class_4313; field_20637 DO_INSOMNIA + f Lnet/minecraft/class_1928$class_4313; field_19390 DO_MOB_SPAWNING + f Lnet/minecraft/class_1928$class_4313; field_19392 DO_TILE_DROPS + f Lnet/minecraft/class_1928$class_4313; field_19394 COMMAND_BLOCK_OUTPUT + f Lnet/minecraft/class_1928$class_4313; field_19396 DO_DAYLIGHT_CYCLE + f Lnet/minecraft/class_1928$class_4313; field_19398 SHOW_DEATH_MESSAGES + f Lnet/minecraft/class_1928$class_4313; field_20635 FALL_DAMAGE + f Lnet/minecraft/class_1928$class_4313; field_19400 SEND_COMMAND_FEEDBACK + f Ljava/util/Map; field_9197 GAME_RULES + f Lnet/minecraft/class_1928$class_4313; field_21831 DO_PATROL_SPAWNING + f Lnet/minecraft/class_1928$class_4313; field_19402 SPECTATORS_GENERATE_CHUNKS + f Lnet/minecraft/class_1928$class_4313; field_25401 FORGIVE_DEAD_PLAYERS + f Lnet/minecraft/class_1928$class_4313; field_19404 DISABLE_ELYTRA_MOVEMENT_CHECK + f Lnet/minecraft/class_1928$class_4313; field_19406 DO_WEATHER_CYCLE + f Lnet/minecraft/class_1928$class_4313; field_19408 MAX_COMMAND_CHAIN_LENGTH + f Lnet/minecraft/class_1928$class_4313; field_19387 DO_FIRE_TICK + f Lnet/minecraft/class_1928$class_4313; field_19422 DISABLE_RAIDS + f Lnet/minecraft/class_1928$class_4313; field_19389 KEEP_INVENTORY + f Lnet/minecraft/class_1928$class_4313; field_20638 DO_IMMEDIATE_RESPAWN + f Lnet/minecraft/class_1928$class_4313; field_19391 DO_MOB_LOOT + f Lnet/minecraft/class_1928$class_4313; field_19393 DO_ENTITY_DROPS + f Lnet/minecraft/class_1928$class_4313; field_19395 NATURAL_REGENERATION + f Lnet/minecraft/class_1928$class_4313; field_19397 LOG_ADMIN_COMMANDS + f Lnet/minecraft/class_1928$class_4313; field_20634 DROWNING_DAMAGE + f Lnet/minecraft/class_1928$class_4313; field_19399 RANDOM_TICK_SPEED + f Lnet/minecraft/class_1928$class_4313; field_20636 FIRE_DAMAGE + f Ljava/util/Map; field_9196 rules + f Lnet/minecraft/class_1928$class_4313; field_19401 REDUCED_DEBUG_INFO + f Lnet/minecraft/class_1928$class_4313; field_21832 DO_TRADER_SPAWNING + f Lnet/minecraft/class_1928$class_4313; field_19403 SPAWN_RADIUS + f Lnet/minecraft/class_1928$class_4313; field_25402 UNIVERSAL_ANGER +c net/minecraft/class_1928$class_4310 net/minecraft/world/GameRules$BooleanValue + m (ZLjava/util/function/BiConsumer;)Lnet/minecraft/class_1928$class_4314; method_20757 func_223573_a + m (ZLnet/minecraft/server/MinecraftServer;)V method_20758 set + m (Lnet/minecraft/class_1928$class_4310;Lnet/minecraft/server/MinecraftServer;)V method_27326 changeValue + m ()Lnet/minecraft/class_1928$class_4310; method_20761 getValue + m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_1928$class_4310;)V method_20754 func_223569_a + m ()Lnet/minecraft/class_1928$class_4310; method_27327 clone + m ()Z method_20753 get + m (ZLnet/minecraft/class_1928$class_4314;)Lnet/minecraft/class_1928$class_4310; method_20756 func_223574_a + m (ZLjava/util/function/BiConsumer;)Lnet/minecraft/class_1928$class_4314; method_20760 create + m (Z)Lnet/minecraft/class_1928$class_4314; method_20759 create + m (Z)Lnet/minecraft/class_1928$class_4314; method_20755 func_223571_a + f Z field_19411 value +c net/minecraft/class_1928$class_5198 net/minecraft/world/GameRules$Category + m (Ljava/lang/String;)Lnet/minecraft/class_1928$class_5198; valueOf valueOf + m ()[Lnet/minecraft/class_1928$class_5198; values values + m ()Ljava/lang/String; method_27328 getLocaleString + f Lnet/minecraft/class_1928$class_5198; field_24098 UPDATES + f Ljava/lang/String; field_24101 localeString + f Lnet/minecraft/class_1928$class_5198; field_24094 PLAYER + f Lnet/minecraft/class_1928$class_5198; field_24099 CHAT + f Lnet/minecraft/class_1928$class_5198; field_24100 MISC + f Lnet/minecraft/class_1928$class_5198; field_24095 MOBS + f Lnet/minecraft/class_1928$class_5198; field_24096 SPAWNING + f [Lnet/minecraft/class_1928$class_5198; field_24102 $VALUES + f Lnet/minecraft/class_1928$class_5198; field_24097 DROPS +c net/minecraft/class_1928$class_4313 net/minecraft/world/GameRules$RuleKey + m ()Lnet/minecraft/class_1928$class_5198; method_27335 getCategory + m (Lnet/minecraft/class_1928$class_4313;)Ljava/lang/String; method_20772 func_223577_a + m ()Ljava/lang/String; method_20771 getName + m ()Ljava/lang/String; toString toString + m ()I hashCode hashCode + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/lang/String; method_27334 getLocaleString + f Lnet/minecraft/class_1928$class_5198; field_24103 category + f Ljava/lang/String; field_19413 gameRuleName +c net/minecraft/class_1928$class_4314 net/minecraft/world/GameRules$RuleType + m (Ljava/lang/String;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder; method_20775 createArgument + m (Lnet/minecraft/class_1928$class_4314;)Ljava/util/function/BiConsumer; method_20774 func_223580_a + m ()Lnet/minecraft/class_1928$class_4315; method_20773 createValue + m (Lnet/minecraft/class_1928$class_4311;Lnet/minecraft/class_1928$class_4313;)V method_27336 visitRule + f Ljava/util/function/Supplier; field_19414 argTypeSupplier + f Ljava/util/function/BiConsumer; field_19416 changeListener + f Ljava/util/function/Function; field_19415 valueCreator + f Lnet/minecraft/class_1928$class_5199; field_24104 rule +c net/minecraft/class_1928$class_4311 net/minecraft/world/GameRules$IRuleEntryVisitor + m (Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V method_20762 visit + m (Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V method_27330 changeInteger + m (Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V method_27329 changeBoolean +c net/minecraft/class_1928$class_4312 net/minecraft/world/GameRules$IntegerValue + m (Ljava/lang/String;)Z method_27332 parseIntValue + m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_1928$class_4312;)V method_20767 func_223561_a + m (Lnet/minecraft/class_1928$class_4312;Lnet/minecraft/server/MinecraftServer;)V method_27331 changeValue + m (Ljava/lang/String;)I method_20769 parseInt + m (ILjava/util/function/BiConsumer;)Lnet/minecraft/class_1928$class_4314; method_20766 create + m (I)Lnet/minecraft/class_1928$class_4314; method_20768 create + m (I)Lnet/minecraft/class_1928$class_4314; method_20764 func_223562_a + m ()I method_20763 get + m ()Lnet/minecraft/class_1928$class_4312; method_20770 getValue + m ()Lnet/minecraft/class_1928$class_4312; method_27333 clone + m (ILnet/minecraft/class_1928$class_4314;)Lnet/minecraft/class_1928$class_4312; method_20765 func_223565_a + f I field_19412 value +c net/minecraft/class_1928$class_4315 net/minecraft/world/GameRules$RuleValue + m (Lnet/minecraft/class_1928$class_4315;Lnet/minecraft/server/MinecraftServer;)V method_27337 changeValue + m (Ljava/lang/String;)V method_20777 setStringValue + m ()I method_20781 intValue + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/server/MinecraftServer;)V method_20778 notifyChange + m ()Lnet/minecraft/class_1928$class_4315; method_20782 getValue + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)V method_20776 updateValue0 + m ()Lnet/minecraft/class_1928$class_4315; method_27338 clone + m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)V method_20780 updateValue + m ()Ljava/lang/String; method_20779 stringValue + f Lnet/minecraft/class_1928$class_4314; field_19417 type +c net/minecraft/class_1928$class_5199 net/minecraft/world/GameRules$IRule + m (Lnet/minecraft/class_1928$class_4311;Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V call call +c net/minecraft/class_1928$1 net/minecraft/world/GameRules$1 +c net/minecraft/class_1932 net/minecraft/world/ForcedChunksSaveData + m ()Lit/unimi/dsi/fastutil/longs/LongSet; method_8375 getChunks + f Lit/unimi/dsi/fastutil/longs/LongSet; field_9213 chunks +c net/minecraft/class_1933 net/minecraft/world/GrassColors + m (DD)I method_8377 get + m ([I)V method_8376 setGrassBiomeColorizer + f [I field_9214 grassBuffer +c net/minecraft/class_1934 net/minecraft/world/GameType + m ()Ljava/lang/String; method_8381 getName + m (Ljava/lang/String;)Lnet/minecraft/class_1934; method_8385 getByName + m ()[Lnet/minecraft/class_1934; values values + m (Ljava/lang/String;)Lnet/minecraft/class_1934; valueOf valueOf + m (Ljava/lang/String;Lnet/minecraft/class_1934;)Lnet/minecraft/class_1934; method_8378 parseGameTypeWithDefault + m (ILnet/minecraft/class_1934;)Lnet/minecraft/class_1934; method_8380 parseGameTypeWithDefault + m ()Z method_8387 hasLimitedInteractions + m ()Z method_8386 isCreative + m ()Z method_8388 isSurvivalOrAdventure + m ()I method_8379 getID + m (Lnet/minecraft/class_1656;)V method_8382 configurePlayerCapabilities + m ()Lnet/minecraft/class_2561; method_8383 getDisplayName + m (I)Lnet/minecraft/class_1934; method_8384 getByID + f Ljava/lang/String; field_9221 name + f Lnet/minecraft/class_1934; field_9219 SPECTATOR + f Lnet/minecraft/class_1934; field_9216 ADVENTURE + f Lnet/minecraft/class_1934; field_9220 CREATIVE + f Lnet/minecraft/class_1934; field_9215 SURVIVAL + f [Lnet/minecraft/class_1934; field_9222 $VALUES + f I field_9217 id + f Lnet/minecraft/class_1934; field_9218 NOT_SET +c net/minecraft/class_1937 net/minecraft/world/World + m ()Ljava/util/function/Supplier; method_24367 getWorldProfiler + m ()V method_18471 tickBlockEntities + m ()Lnet/minecraft/class_1863; method_8433 getRecipeManager + m (Ljava/lang/String;)Lnet/minecraft/class_22; method_17891 getMapData + m (IIII)Lnet/minecraft/class_2338; method_8536 getBlockRandomPos + m ()Lnet/minecraft/class_5415; method_8514 getTags + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1282;Lnet/minecraft/class_5362;DDDFZLnet/minecraft/class_1927$class_4179;)Lnet/minecraft/class_1927; method_8454 createExplosion + m (Ljava/util/function/Consumer;Lnet/minecraft/class_1297;)V method_18472 guardEntityTick + m (Lnet/minecraft/class_2394;ZDDDDDD)V method_8466 addParticle + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)Z method_8515 isTopSolid + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)V method_19282 onBlockStateChange + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2818; method_8500 getChunkAt + m (Lnet/minecraft/class_1297;B)V method_8421 setEntityState + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;)V method_8526 setTileEntity + m ()Z method_27982 isDebug + m (Lnet/minecraft/class_2248;)Ljava/lang/String; method_8473 func_242408_a + m (Lnet/minecraft/class_2338;)I method_8482 getRedstonePowerFromNeighbors + m (F)F method_8430 getRainStrength + m (Lnet/minecraft/class_2338;)Z method_24794 isValid + m ()I method_17889 getNextMapId + m ()V close close + m (Lnet/minecraft/class_2338;)V method_8544 removeTileEntity + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_8499 getRedstonePower + m (ILnet/minecraft/class_2338;I)V method_8517 sendBlockBreakProgress + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;)V method_8452 notifyNeighborsOfStateChange + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;II)V method_8427 addBlockEvent + m (ZZ)V method_8424 setAllowedSpawnTypes + m ()J method_8510 getGameTime + m ()Ljava/lang/String; method_8457 getProviderName + m (Ljava/util/Collection;)V method_8447 addTileEntities + m ()Ljava/lang/String; method_8484 func_242409_b + m (DDDDDDLnet/minecraft/class_2487;)V method_8547 makeFireworks + m ()Lnet/minecraft/class_269; method_8428 getScoreboard + m (Lnet/minecraft/class_2596;)V method_8522 sendPacketToServer + m ()Z method_8458 isSaveDisabled + m (Lnet/minecraft/class_2394;ZDDDDDD)V method_17452 addOptionalParticle + m (F)V method_8519 setRainStrength + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;)V method_8524 markChunkDirty + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;I)V method_8413 notifyBlockUpdate + m (I)Z method_8476 isYOutOfBounds + m ()Z method_8546 isThundering + m (Lnet/minecraft/class_2338;)Z method_25953 isInvalidPosition + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;Lnet/minecraft/class_2350;)Z method_24368 isDirectionSolid + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;Lnet/minecraft/class_2338;)V method_8492 neighborChanged + m (Lnet/minecraft/class_2338;)Z method_8477 isBlockPresent + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;)Z method_8505 isBlockModifiable + m ()V method_8525 sendQuittingDisconnectingPacket + m (F)F method_8442 getCelestialAngleRadians + m (Lnet/minecraft/class_128;)Lnet/minecraft/class_129; method_8538 fillCrashReport + m (Lnet/minecraft/class_2338;)Z method_8520 isRainingAt + m (DDDLnet/minecraft/class_3414;Lnet/minecraft/class_3419;FFZ)V method_8486 playSound + m (Lnet/minecraft/class_2586;)Z method_8438 addTileEntity + m ()Z method_8530 isDaytime + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;)V method_8455 updateComparatorOutputLevel + m (Lnet/minecraft/class_1297;DDDFZLnet/minecraft/class_1927$class_4179;)Lnet/minecraft/class_1927; method_8537 createExplosion + m ()J method_8532 getDayTime + m ()V method_8533 calculateInitialSkylight + m ()Ljava/lang/String; method_20783 func_217392_b + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/List; method_18023 getEntitiesWithinAABB + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;Lnet/minecraft/class_2350;)V method_8508 notifyNeighborsOfStateExcept + m (Lnet/minecraft/class_1657;DDDLnet/minecraft/class_3414;Lnet/minecraft/class_3419;FF)V method_8465 playSound + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2586; method_8426 getPendingTileEntityAt + m (I)V method_8509 setTimeLightningFlash + m (Lnet/minecraft/class_2338;)Z method_8518 isOutsideBuildHeight + m ()Z method_8419 isRaining + m (Lnet/minecraft/class_2338;)I method_8488 getStrongPower + m ()Lnet/minecraft/class_3695; method_16107 getProfiler + m ()Lnet/minecraft/class_1928; method_8450 getGameRules + m (Lnet/minecraft/class_2338;)Z method_8480 isBlockinHighHumidity + m (F)F method_8478 getThunderStrength + m (Lnet/minecraft/class_22;)V method_17890 registerMapData + m (I)Lnet/minecraft/class_1297; method_8469 getEntityByID + m ()Z method_23886 isNightTime + m (Lnet/minecraft/class_1297;DDDFLnet/minecraft/class_1927$class_4179;)Lnet/minecraft/class_1927; method_8437 createExplosion + m ()V method_8543 calculateInitialWeather + m (Lnet/minecraft/class_2586;)Ljava/lang/Object; method_20401 func_242411_c + m ()Lnet/minecraft/server/MinecraftServer; method_8503 getServer + m (I)Z method_25952 isInvalidYPosition + m ()Lnet/minecraft/class_5321; method_27983 getDimensionKey + m (Lnet/minecraft/class_2394;DDDDDD)V method_8494 addOptionalParticle + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)V method_16109 markBlockRangeForRenderUpdate + m (F)V method_8496 setThunderStrength + m (Lnet/minecraft/class_2338;)Z method_8558 isValidXZPosition + m (Lnet/minecraft/class_2338;)Z method_8479 isBlockPowered + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1297;Lnet/minecraft/class_3414;Lnet/minecraft/class_3419;FF)V method_8449 playMovingSound + m (II)Lnet/minecraft/class_2818; method_8497 getChunk + m (ILnet/minecraft/class_2338;I)V method_8474 playBroadcastSound + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_8501 setBlockState + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_8459 isSidePowered + m (Lnet/minecraft/class_2586;)Ljava/lang/String; method_18473 func_242410_b + f Lnet/minecraft/class_2784; field_9223 worldBorder + f Lnet/minecraft/class_5321; field_25181 THE_END + f F field_9253 prevRainingStrength + f Z field_9249 processingLoadedTiles + f I field_9226 skylightSubtracted + f Ljava/util/List; field_9231 loadedTileEntityList + f F field_9234 thunderingStrength + f Lnet/minecraft/class_5321; field_25180 THE_NETHER + f Lorg/apache/logging/log4j/Logger; field_9224 LOGGER + f Ljava/util/Random; field_9229 rand + f Lnet/minecraft/class_5269; field_9232 worldInfo + f Ljava/util/List; field_9246 tickableTileEntities + f Lnet/minecraft/class_5321; field_25176 dimension + f I field_9256 updateLCG + f Lnet/minecraft/class_5321; field_25179 OVERWORLD + f [Lnet/minecraft/class_2350; field_9233 FACING_VALUES + f Lcom/mojang/serialization/Codec; field_25178 CODEC + f Ljava/util/List; field_9241 addedTileEntityList + f Ljava/lang/Thread; field_17086 mainThread + f F field_9235 rainingStrength + f I field_9238 DIST_HASH_MAGIC + f Ljava/util/function/Supplier; field_16316 profiler + f Z field_9236 isRemote + f Ljava/util/List; field_18139 tileEntitiesToBeRemoved + f Z field_24496 isDebug + f Lnet/minecraft/class_4543; field_20639 biomeManager + f Lnet/minecraft/class_2874; field_9247 dimensionType + f F field_9251 prevThunderingStrength +c net/minecraft/class_1937$1 net/minecraft/world/World$1 + f Lnet/minecraft/class_2874; field_26691 field_242412_a + f Lnet/minecraft/class_1937; field_24672 field_234937_a_ +c net/minecraft/class_1935 net/minecraft/util/IItemProvider + m ()Lnet/minecraft/class_1792; method_8389 asItem +c net/minecraft/class_4538 net/minecraft/world/IWorldReader + m (Lnet/minecraft/class_238;)Z method_22345 containsAnyLiquid + m (Lnet/minecraft/class_2338;I)I method_22346 getNeighborAwareLightSubtracted + m (Lnet/minecraft/class_238;)Ljava/util/stream/Stream; method_29556 getStatesInArea + m ()I method_8594 getSkylightSubtracted + m (Lnet/minecraft/class_2338;)F method_22349 getBrightness + m (Lnet/minecraft/class_2338;)Z method_22347 isAirBlock + m (II)Z method_8393 chunkExists + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2791; method_22350 getChunk + m (Lnet/minecraft/class_2902$class_2903;II)I method_8624 getHeight + m (Lnet/minecraft/class_2338;)Z method_22348 canBlockSeeSky + m (IILnet/minecraft/class_2806;)Lnet/minecraft/class_2791; method_22342 getChunk + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1959; method_23753 getBiome + m (Lnet/minecraft/class_2902$class_2903;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_8598 getHeight + m (Lnet/minecraft/class_2338;)I method_22339 getLight + m (IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2791; method_8402 getChunk + m ()I method_8615 getSeaLevel + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Z method_22343 isAreaLoaded + m (IIIIII)Z method_22341 isAreaLoaded + m (II)Lnet/minecraft/class_2791; method_8392 getChunk + m (Lnet/minecraft/class_2338;)Z method_22351 hasWater + m ()Z method_8608 isRemote + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_22344 getStrongPower + m (III)Lnet/minecraft/class_1959; method_22387 getNoiseBiomeRaw + m ()Lnet/minecraft/class_4543; method_22385 getBiomeManager + m ()Lnet/minecraft/class_2874; method_8597 getDimensionType + m (Lnet/minecraft/class_2338;)Z method_22340 isBlockLoaded +c net/minecraft/class_1936 net/minecraft/world/IWorld + m ()Ljava/util/Random; method_8409 getRandom + m (ILnet/minecraft/class_2338;I)V method_20290 playEvent + m ()Lnet/minecraft/class_1267; method_8407 getDifficulty + m (Lnet/minecraft/class_2394;DDDDDD)V method_8406 addParticle + m (Lnet/minecraft/class_1657;ILnet/minecraft/class_2338;I)V method_8444 playEvent + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;)V method_8408 func_230547_a_ + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_3414;Lnet/minecraft/class_3419;FF)V method_8396 playSound + m ()Lnet/minecraft/class_2802; method_8398 getChunkProvider + m ()I method_24853 func_234938_ad_ + m ()Lnet/minecraft/class_1951; method_8397 getPendingBlockTicks + m ()Lnet/minecraft/class_5217; method_8401 getWorldInfo + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1266; method_8404 getDifficultyForLocation + m ()Lnet/minecraft/class_1951; method_8405 getPendingFluidTicks +c net/minecraft/class_3747 net/minecraft/world/gen/IWorldGenerationReader +c net/minecraft/class_1940 net/minecraft/world/WorldSettings + m ()Z method_8583 isHardcoreEnabled + m ()Lnet/minecraft/class_1928; method_27341 getGameRules + m (Lnet/minecraft/class_1267;)Lnet/minecraft/class_1940; method_28381 setDifficulty + m ()Lnet/minecraft/class_1940; method_28385 clone + m ()Z method_8582 isCommandsAllowed + m (Lcom/mojang/serialization/Dynamic;Lnet/minecraft/class_5359;)Lnet/minecraft/class_1940; method_28383 decodeWorldSettings + m (Lnet/minecraft/class_1934;)Lnet/minecraft/class_1940; method_28382 setGameType + m (Lnet/minecraft/class_5359;)Lnet/minecraft/class_1940; method_29557 setDatapackCodec + m ()Lnet/minecraft/class_1267; method_27340 getDifficulty + m ()Ljava/lang/String; method_27339 getWorldName + m (Ljava/lang/Number;)Lnet/minecraft/class_1267; method_28384 func_234952_a_ + m ()Lnet/minecraft/class_1934; method_8574 getGameType + m ()Lnet/minecraft/class_5359; method_29558 getDatapackCodec + f Lnet/minecraft/class_1934; field_9257 gameType + f Lnet/minecraft/class_5359; field_25403 datapackCodec + f Lnet/minecraft/class_1928; field_24107 gameRules + f Z field_9262 hardcoreEnabled + f Lnet/minecraft/class_1267; field_24106 difficulty + f Z field_9261 commandsAllowed + f Ljava/lang/String; field_24105 worldName +c net/minecraft/class_3746 net/minecraft/world/gen/IWorldGenerationBaseReader + m (Lnet/minecraft/class_2338;Ljava/util/function/Predicate;)Z method_16358 hasBlockState + m (Lnet/minecraft/class_2902$class_2903;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_8598 getHeight +c net/minecraft/class_1945 net/minecraft/world/IWorldWriter + m (Lnet/minecraft/class_2338;ZLnet/minecraft/class_1297;I)Z method_30093 destroyBlock + m (Lnet/minecraft/class_2338;ZLnet/minecraft/class_1297;)Z method_8651 destroyBlock + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;II)Z method_30092 setBlockState + m (Lnet/minecraft/class_1297;)Z method_8649 addEntity + m (Lnet/minecraft/class_2338;Z)Z method_8650 removeBlock + m (Lnet/minecraft/class_2338;Z)Z method_22352 destroyBlock + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;I)Z method_8652 setBlockState +c net/minecraft/class_5424 net/minecraft/world/IDayTimeReader + m ()J method_30271 func_241851_ab + m (F)F method_30274 func_242415_f + m ()I method_30273 getMoonPhase + m ()F method_30272 getMoonFactor +c net/minecraft/class_1948 net/minecraft/world/spawner/WorldEntitySpawner + m (Lnet/minecraft/class_1311;Lnet/minecraft/class_3218;Lnet/minecraft/class_2791;Lnet/minecraft/class_2338;Lnet/minecraft/class_1948$class_5261;Lnet/minecraft/class_1948$class_5259;)V method_24930 func_234966_a_ + m (I)[Lnet/minecraft/class_1311; method_27814 func_234963_a_ + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;Lnet/minecraft/class_1299;)Z method_8662 func_234968_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1299;)Lnet/minecraft/class_1308; method_24931 func_234973_a_ + m (Lnet/minecraft/class_1311;)Z method_27816 func_234965_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2818;Lnet/minecraft/class_1948$class_5262;ZZZ)V method_27821 func_234979_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2791;Lnet/minecraft/class_2338$class_2339;D)Z method_24933 func_234978_a_ + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_1299;II)Lnet/minecraft/class_2338; method_8658 getTopSolidOrLiquidBlock + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1311;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_5483$class_1964;Lnet/minecraft/class_2338$class_2339;D)Z method_24934 func_234975_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_1311;Ljava/util/Random;Lnet/minecraft/class_2338;)Lnet/minecraft/class_5483$class_1964; method_8664 func_234977_a_ + m (Lnet/minecraft/class_1317$class_1319;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_8660 canCreatureTypeSpawnAtLocation + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_1311;Lnet/minecraft/class_5483$class_1964;Lnet/minecraft/class_2338;)Z method_8659 func_234976_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;D)Z method_24932 func_234974_a_ + m (Lnet/minecraft/class_5425;Lnet/minecraft/class_1959;IILjava/util/Random;)V method_8661 performWorldGenSpawning + m (Lnet/minecraft/class_1311;Lnet/minecraft/class_3218;Lnet/minecraft/class_2818;Lnet/minecraft/class_1948$class_5261;Lnet/minecraft/class_1948$class_5259;)V method_8663 func_234967_a_ + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_1311;Lnet/minecraft/class_2338;Lnet/minecraft/class_1959;)Ljava/util/List; method_29950 func_241463_a_ + m ()I method_27813 func_234962_a_ + m (ILjava/lang/Iterable;Lnet/minecraft/class_1948$class_5260;)Lnet/minecraft/class_1948$class_5262; method_27815 func_234964_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Lnet/minecraft/class_1959; method_27820 func_234972_a_ + m (Lnet/minecraft/class_1948$class_5262;Lnet/minecraft/class_1299;Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Z method_27817 func_234969_a_ + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2818;)Lnet/minecraft/class_2338; method_8657 getRandomHeight + m (Lnet/minecraft/class_1948$class_5262;Lnet/minecraft/class_1308;Lnet/minecraft/class_2791;)V method_27818 func_234970_a_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Lnet/minecraft/class_1959; method_27822 func_234980_b_ + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;Lnet/minecraft/class_5263;Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;Lnet/minecraft/class_1311;Lnet/minecraft/class_2818;)V method_27819 func_234971_a_ + f [Lnet/minecraft/class_1311; field_24393 field_234961_c_ + f Lorg/apache/logging/log4j/Logger; field_9292 LOGGER + f I field_24392 field_234960_b_ +c net/minecraft/class_1948$1 net/minecraft/world/spawner/WorldEntitySpawner$1 + f [I field_9293 field_210772_a +c net/minecraft/class_1948$class_5261 net/minecraft/world/spawner/WorldEntitySpawner$IDensityCheck + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Z test test +c net/minecraft/class_1948$class_5262 net/minecraft/world/spawner/WorldEntitySpawner$EntityDensityManager + m ()I method_27823 func_234988_a_ + m ()Lit/unimi/dsi/fastutil/objects/Object2IntMap; method_27830 func_234995_b_ + m (Lnet/minecraft/class_1948$class_5262;Lnet/minecraft/class_1308;Lnet/minecraft/class_2791;)V method_27828 func_234993_a_ + m (Lnet/minecraft/class_1311;)Z method_27826 func_234991_a_ + m (Lnet/minecraft/class_1948$class_5262;Lnet/minecraft/class_1299;Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Z method_27827 func_234992_a_ + m (Lnet/minecraft/class_1948$class_5262;Lnet/minecraft/class_1311;)Z method_27829 func_234994_a_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Z method_27824 func_234989_a_ + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2791;)V method_27825 func_234990_a_ + f D field_24400 field_234987_g_ + f I field_24394 field_234981_a_ + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_24397 field_234984_d_ + f Lnet/minecraft/class_2338; field_24398 field_234985_e_ + f Lnet/minecraft/class_1299; field_24399 field_234986_f_ + f Lnet/minecraft/class_5263; field_24396 field_234983_c_ + f Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap; field_24395 field_234982_b_ +c net/minecraft/class_1948$class_5259 net/minecraft/world/spawner/WorldEntitySpawner$IOnSpawnDensityAdder + m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2791;)V run run +c net/minecraft/class_1948$class_5260 net/minecraft/world/spawner/WorldEntitySpawner$IInitialDensityAdder + m (JLjava/util/function/Consumer;)V query query +c net/minecraft/class_1944 net/minecraft/world/LightType + m (Ljava/lang/String;)Lnet/minecraft/class_1944; valueOf valueOf + m ()[Lnet/minecraft/class_1944; values values + f Lnet/minecraft/class_1944; field_9282 BLOCK + f Lnet/minecraft/class_1944; field_9284 SKY + f [Lnet/minecraft/class_1944; field_9285 $VALUES + f I field_9283 defaultLightValue +c net/minecraft/class_1950 net/minecraft/world/Region + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2791; method_22354 getChunk + m (II)Lnet/minecraft/class_2791; method_22353 getChunk + f I field_9303 chunkZ + f I field_9304 chunkX + f [[Lnet/minecraft/class_2791; field_9305 chunks + f Lnet/minecraft/class_1937; field_9306 world + f Z field_9302 empty +c net/minecraft/class_4966 net/minecraft/world/Blockreader + f [Lnet/minecraft/class_2680; field_23143 states +c net/minecraft/class_5425 net/minecraft/world/IServerWorld + m ()Lnet/minecraft/class_3218; method_8410 getWorld + m (Lnet/minecraft/class_1297;)V method_30771 func_242417_l +c net/minecraft/class_5263 net/minecraft/world/spawner/MobDensityTracker + m (Lnet/minecraft/class_2338;D)V method_27831 func_234998_a_ + m (Lnet/minecraft/class_2338;D)D method_27832 func_234999_b_ + f Ljava/util/List; field_24401 field_234997_a_ +c net/minecraft/class_5263$class_5264 net/minecraft/world/spawner/MobDensityTracker$DensityEntry + m (Lnet/minecraft/class_2338;)D method_27833 func_235002_a_ + f D field_24403 field_235001_b_ + f Lnet/minecraft/class_2338; field_24402 field_235000_a_ +c net/minecraft/class_1952 net/minecraft/util/WeightedSpawnerEntity + m ()Lnet/minecraft/class_2487; method_8678 getNbt + m ()Lnet/minecraft/class_2487; method_8679 toCompoundTag + f Lnet/minecraft/class_2487; field_9307 nbt +c net/minecraft/class_1949 net/minecraft/world/server/ServerTickList + m (Lnet/minecraft/class_1923;ZZ)Ljava/util/List; method_8671 getPending + m (Ljava/util/List;Ljava/util/Collection;Lnet/minecraft/class_3341;Z)Ljava/util/List; method_20596 getEntries + m ()V method_8670 tick + m (Lnet/minecraft/class_1954;)V method_20514 addEntry + m (Lnet/minecraft/class_3341;ZZ)Ljava/util/List; method_8672 getPending + m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;)V method_8666 copyTicks + m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2499; method_8669 func_219503_a + m (Ljava/util/function/Function;Ljava/lang/Iterable;J)Lnet/minecraft/class_2499; method_20469 func_219502_a + m ()I method_20825 func_225420_a + f Ljava/util/List; field_19338 entriesRunThisTick + f Ljava/util/function/Consumer; field_9300 tickFunction + f Lnet/minecraft/class_3218; field_9301 world + f Ljava/util/function/Predicate; field_9297 filter + f Ljava/util/function/Function; field_9294 serializer + f Ljava/util/TreeSet; field_19341 pendingTickListEntriesTreeSet + f Ljava/util/Queue; field_9299 pendingTickListEntriesThisTick + f Ljava/util/Set; field_9296 pendingTickListEntriesHashSet +c net/minecraft/class_1951 net/minecraft/world/ITickList + m (Lnet/minecraft/class_2338;Ljava/lang/Object;I)V method_8676 scheduleTick + m (Lnet/minecraft/class_2338;Ljava/lang/Object;ILnet/minecraft/class_1953;)V method_8675 scheduleTick + m (Lnet/minecraft/class_2338;Ljava/lang/Object;)Z method_8674 isTickScheduled + m (Lnet/minecraft/class_2338;Ljava/lang/Object;)Z method_8677 isTickPending +c net/minecraft/class_5138 net/minecraft/world/gen/feature/structure/StructureManager + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3449;)Z method_28387 func_235009_a_ + m (Lnet/minecraft/class_3233;)Lnet/minecraft/class_5138; method_29951 getStructureManager + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3443;)Z method_28386 func_235008_a_ + m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3195;Lnet/minecraft/class_3449;Lnet/minecraft/class_2810;)V method_26976 addStructureStart + m (Lnet/minecraft/class_3449;)Z method_26972 func_235007_a_ + m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3195;JLnet/minecraft/class_2810;)V method_26973 addReference + m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3195;Lnet/minecraft/class_2810;)Lnet/minecraft/class_3449; method_26975 getStructureStart + m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3195;)Ljava/util/stream/Stream; method_26974 func_235011_a_ + m (Lnet/minecraft/class_2338;ZLnet/minecraft/class_3195;)Lnet/minecraft/class_3449; method_28388 getStructureStart + m (Ljava/lang/Long;)Lnet/minecraft/class_4076; method_26977 func_235015_a_ + m ()Z method_27834 canGenerateFeatures + m (ZLnet/minecraft/class_2338;Lnet/minecraft/class_3449;)Z method_28389 func_235016_a_ + m (Lnet/minecraft/class_3195;Lnet/minecraft/class_4076;)Lnet/minecraft/class_3449; method_26971 func_235006_a_ + f Lnet/minecraft/class_5285; field_24497 settings + f Lnet/minecraft/class_1936; field_24404 world +c net/minecraft/class_1953 net/minecraft/world/TickPriority + m ()[Lnet/minecraft/class_1953; values values + m ()I method_8681 getPriority + m (I)Lnet/minecraft/class_1953; method_8680 getPriority + m (Ljava/lang/String;)Lnet/minecraft/class_1953; valueOf valueOf + f Lnet/minecraft/class_1953; field_9313 VERY_HIGH + f I field_9308 priority + f [Lnet/minecraft/class_1953; field_9312 $VALUES + f Lnet/minecraft/class_1953; field_9310 HIGH + f Lnet/minecraft/class_1953; field_9314 NORMAL + f Lnet/minecraft/class_1953; field_9316 LOW + f Lnet/minecraft/class_1953; field_9309 VERY_LOW + f Lnet/minecraft/class_1953; field_9315 EXTREMELY_HIGH + f Lnet/minecraft/class_1953; field_9311 EXTREMELY_LOW +c net/minecraft/class_1954 net/minecraft/world/NextTickListEntry + m ()Ljava/lang/Object; method_8683 getTarget + m (Lnet/minecraft/class_1954;)J method_21837 func_226710_c_ + m (Ljava/lang/Object;)Z equals equals + m ()Ljava/util/Comparator; method_20597 func_223192_a + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_1954;)Lnet/minecraft/class_1953; method_21836 func_226709_b_ + m (Lnet/minecraft/class_1954;)J method_21835 func_226708_a_ + m ()I hashCode hashCode + f J field_9318 tickEntryID + f Lnet/minecraft/class_2338; field_9322 position + f Ljava/lang/Object; field_9317 target + f J field_9321 field_235017_b_ + f Lnet/minecraft/class_1953; field_9320 priority + f J field_9319 nextTickEntryID +c net/minecraft/class_4967 net/minecraft/world/biome/SoundAdditionsAmbience + m (Lnet/minecraft/class_4967;)Ljava/lang/Double; method_28390 func_235022_a_ + m (Lnet/minecraft/class_4967;)Lnet/minecraft/class_3414; method_28392 func_235025_b_ + m ()D method_26099 getChancePerTick + m ()Lnet/minecraft/class_3414; method_26098 getSound + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28391 func_235023_a_ + f Lnet/minecraft/class_3414; field_23144 sound + f Lcom/mojang/serialization/Codec; field_24673 CODEC + f D field_23145 tickChance +c net/minecraft/class_5281 net/minecraft/world/ISeedReader + m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3195;)Ljava/util/stream/Stream; method_30275 func_241827_a + m ()J method_8412 getSeed +c net/minecraft/class_4761 net/minecraft/world/biome/ParticleEffectAmbience + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28399 func_235046_a_ + m (Lnet/minecraft/class_4761;)Ljava/lang/Float; method_28398 func_235045_a_ + m (Lnet/minecraft/class_4761;)Lnet/minecraft/class_2394; method_28400 func_235048_b_ + m ()Lnet/minecraft/class_2394; method_24369 getParticleOptions + m (Ljava/util/Random;)Z method_24370 shouldParticleSpawn + f F field_22035 probability + f Lcom/mojang/serialization/Codec; field_24675 CODEC + f Lnet/minecraft/class_2394; field_24676 particleOptions +c net/minecraft/class_4968 net/minecraft/world/biome/MoodSoundAmbience + m (Lnet/minecraft/class_4968;)Ljava/lang/Integer; method_28395 func_235036_b_ + m ()D method_26103 getOffset + m ()I method_26101 getTickDelay + m (Lnet/minecraft/class_4968;)Ljava/lang/Integer; method_28396 func_235038_c_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28394 func_235034_a_ + m (Lnet/minecraft/class_4968;)Lnet/minecraft/class_3414; method_28397 func_235040_d_ + m ()I method_26102 getSearchRadius + m ()Lnet/minecraft/class_3414; method_26100 getSound + m (Lnet/minecraft/class_4968;)Ljava/lang/Double; method_28393 func_235033_a_ + f I field_23149 searchRadius + f D field_23150 offset + f Lcom/mojang/serialization/Codec; field_24674 CODEC + f I field_23148 tickDelay + f Lnet/minecraft/class_3414; field_23147 sound + f Lnet/minecraft/class_4968; field_23146 DEFAULT_CAVE +c net/minecraft/class_5485 net/minecraft/world/biome/BiomeGenerationSettings + m ()Lnet/minecraft/class_3531; method_30985 getSurfaceBuilderConfig + m (Lnet/minecraft/class_3195;)Z method_30980 hasStructure + m (Lnet/minecraft/class_5485;)Ljava/util/function/Supplier; method_30809 func_242501_d + m (Lnet/minecraft/class_2975;)Z method_30977 func_242490_a + m ()Lnet/minecraft/class_3504; method_30986 func_242503_f + m (Lnet/minecraft/class_2893$class_2894;)Ljava/util/List; method_30976 getCarvers + m ()Ljava/util/List; method_30982 getFlowerFeatures + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30802 func_242495_a + m ()Ljava/util/List; method_30983 getFeatures + m (Lnet/minecraft/class_5312;)Lnet/minecraft/class_5312; method_30978 getStructure + m (Lnet/minecraft/class_3195;Ljava/util/function/Supplier;)Z method_30981 func_242494_a + m ()Ljava/util/function/Supplier; method_30984 getSurfaceBuilder + m (Lnet/minecraft/class_5485;)Ljava/util/Map; method_30808 func_242499_c + m (Lnet/minecraft/class_5312;Lnet/minecraft/class_5312;)Z method_30979 func_242492_a + m (Lnet/minecraft/class_5485;)Ljava/util/List; method_30807 func_242497_b + m ()Ljava/util/Collection; method_30975 getStructures + m (Lnet/minecraft/class_5485;)Ljava/util/List; method_30806 func_242488_a + f Lorg/apache/logging/log4j/Logger; field_26638 LOGGER + f Lnet/minecraft/class_5485; field_26639 DEFAULT_SETTINGS + f Ljava/util/List; field_26416 features + f Ljava/util/function/Supplier; field_26414 surfaceBuilder + f Ljava/util/List; field_26640 flowerFeatures + f Ljava/util/List; field_26417 structures + f Ljava/util/Map; field_26415 carvers + f Lcom/mojang/serialization/MapCodec; field_26413 CODEC +c net/minecraft/class_5485$1 net/minecraft/world/biome/BiomeGenerationSettings$1 +c net/minecraft/class_5485$class_5495 net/minecraft/world/biome/BiomeGenerationSettings$Builder + m (ILjava/util/function/Supplier;)Lnet/minecraft/class_5485$class_5495; method_30989 withFeature + m (Lnet/minecraft/class_2893$class_2894;)Ljava/util/List; method_30990 func_242511_a + m ()Ljava/lang/IllegalStateException; method_30999 func_242520_b + m (Lnet/minecraft/class_5312;)Lnet/minecraft/class_5485$class_5495; method_30995 withStructure + m (Lnet/minecraft/class_2922;)Lnet/minecraft/class_2922; method_30993 func_242514_a + m (Ljava/util/function/Supplier;)Lnet/minecraft/class_5485$class_5495; method_30998 withSurfaceBuilder + m (Lnet/minecraft/class_3504;)Lnet/minecraft/class_3504; method_31001 func_242522_b + m (I)V method_30988 populateStageEntries + m (Lnet/minecraft/class_2893$class_2894;Lnet/minecraft/class_2922;)Lnet/minecraft/class_5485$class_5495; method_30991 withCarver + m (Lnet/minecraft/class_3504;)Lnet/minecraft/class_5485$class_5495; method_30996 withSurfaceBuilder + m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_2975; method_30994 func_242515_a + m ()Lnet/minecraft/class_5485; method_30987 build + m (Lnet/minecraft/class_2893$class_2895;Lnet/minecraft/class_2975;)Lnet/minecraft/class_5485$class_5495; method_30992 withFeature + m (Ljava/util/Map$Entry;)Ljava/util/List; method_30997 func_242518_a + m (Lnet/minecraft/class_5312;)Lnet/minecraft/class_5312; method_31000 func_242521_b + f Ljava/util/List; field_26644 structures + f Ljava/util/List; field_26643 features + f Ljava/util/Map; field_26642 carvers + f Ljava/util/Optional; field_26641 surfaceBuilder +c net/minecraft/class_1959 net/minecraft/world/biome/Biome + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_1959;)Ljava/lang/Float; method_28420 func_235085_m_ + m ()I method_8698 getFoliageColor + m ()Lnet/minecraft/class_5483; method_30966 getMobSpawnInfo + m ()Lit/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap; method_21741 func_242450_x + m ()Lnet/minecraft/class_3543; method_30772 func_242447_u + m ()F method_8715 getDownfall + m (Lnet/minecraft/class_3195;)Ljava/lang/String; method_28406 func_242431_a + m (Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_3233;JLnet/minecraft/class_2919;Lnet/minecraft/class_2338;)V method_8702 generateFeatures + m ()Lnet/minecraft/class_1959$class_1961; method_8688 getCategory + m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959$class_1961; method_28422 func_235087_o_ + m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959$class_5482; method_28423 func_242446_l + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_8696 doesSnowGenerate + m ()Ljava/util/Optional; method_24937 getAdditionalAmbientSound + m ()Ljava/util/Optional; method_24935 getAmbientSound + m (Lnet/minecraft/class_1959;)Ljava/lang/Float; method_30968 func_242438_c + m ()I method_8697 getSkyColor + m ()I method_30773 getGrassColorByClimate + m ()Lnet/minecraft/class_1959$class_1963; method_8694 getPrecipitation + m ()Lnet/minecraft/class_5485; method_30970 getGenerationSettings + m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_4763; method_28417 func_242444_h + m (Lnet/minecraft/class_2975;)Ljava/lang/String; method_23348 func_242430_a + m ()Ljava/util/Optional; method_27343 getBackgroundMusic + m ()Lnet/minecraft/class_4763; method_24377 getAmbience + m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_5483; method_28409 func_242442_f + m (Lnet/minecraft/class_2338;)F method_8707 getTemperatureAtPosition + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30963 func_242432_a + m ()I method_8713 getWaterFogColor + m (Lnet/minecraft/class_1959;)Ljava/lang/Float; method_28421 func_235086_n_ + m (Ljava/util/Random;Lnet/minecraft/class_2791;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJ)V method_8703 buildSurface + m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_5485; method_28418 func_242443_g + m ()Lit/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap; method_21742 func_242451_y + m ()F method_8695 getDepth + m (Lnet/minecraft/class_3233;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_2919;IIIILnet/minecraft/class_3449;)V method_28401 func_242426_a + m ()I method_24376 getFogColor + m ()Z method_8724 isHighHumidity + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_8705 doesWaterFreeze + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Z)Z method_8685 doesWaterFreeze + m ()F method_8686 getScale + m (DD)I method_8711 getGrassColor + m ()I method_30774 getFoliageColorByClimate + m ()Ljava/util/Optional; method_24936 getMoodSound + m ()Ljava/util/Optional; method_24378 getAmbientParticle + m (Lnet/minecraft/class_1959;)Ljava/lang/Float; method_30967 func_242434_b + m (Lnet/minecraft/class_3195;)Ljava/lang/Integer; method_30965 func_242435_b + m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959$class_5482; method_30971 func_242441_e + m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959$class_1961; method_30969 func_242439_d + m ()F method_8712 getTemperature + m (Lnet/minecraft/class_2338;)F method_21740 getTemperature + m ()I method_8687 getWaterColor + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30776 func_235064_b + m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_4763; method_30964 func_242429_a + m (Lnet/minecraft/class_1959$class_5482;Lnet/minecraft/class_1959$class_1961;Ljava/lang/Float;Ljava/lang/Float;Lnet/minecraft/class_4763;)Lnet/minecraft/class_1959; method_30961 func_242428_a + f F field_9341 scale + f Ljava/lang/ThreadLocal; field_20335 temperatureCache + f Lnet/minecraft/class_1959$class_1961; field_9329 category + f Lcom/mojang/serialization/Codec; field_25819 CODEC + f Lcom/mojang/serialization/Codec; field_24677 BIOME_CODEC + f Ljava/util/Map; field_26634 biomeStructures + f Lnet/minecraft/class_3543; field_26392 FROZEN_TEMPERATURE_NOISE + f Lnet/minecraft/class_5485; field_26635 biomeGenerationSettings + f F field_9343 depth + f Lnet/minecraft/class_3543; field_9324 INFO_NOISE + f Lorg/apache/logging/log4j/Logger; field_9330 LOGGER + f Lcom/mojang/serialization/Codec; field_26633 PACKET_CODEC + f Lnet/minecraft/class_1959$class_5482; field_26393 climate + f Lcom/mojang/serialization/Codec; field_26750 BIOMES_CODEC + f Lnet/minecraft/class_4763; field_22039 effects + f Lnet/minecraft/class_3543; field_9335 TEMPERATURE_NOISE + f Lnet/minecraft/class_5483; field_26395 mobSpawnInfo +c net/minecraft/class_1959$class_5482 net/minecraft/world/biome/Biome$Climate + m (Lnet/minecraft/class_1959$class_5482;)Lnet/minecraft/class_1959$class_5484; method_30783 func_242466_b + m (Lnet/minecraft/class_1959$class_5482;)Lnet/minecraft/class_1959$class_1963; method_30781 func_242464_a + m (Lnet/minecraft/class_1959$class_5482;)Lnet/minecraft/class_1959$class_1963; method_30789 func_242472_h + m (Lnet/minecraft/class_1959$class_5482;)F method_30785 func_242468_d + m (Lnet/minecraft/class_1959$class_5482;)Ljava/lang/Float; method_30788 func_242471_g + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30782 func_242465_a + m (Lnet/minecraft/class_1959$class_5482;)Lnet/minecraft/class_1959$class_5484; method_30787 func_242470_f + m (Lnet/minecraft/class_1959$class_5482;)F method_30784 func_242467_c + m (Lnet/minecraft/class_1959$class_5482;)Ljava/lang/Float; method_30786 func_242469_e + f Lcom/mojang/serialization/MapCodec; field_26398 CODEC + f Lnet/minecraft/class_1959$class_1963; field_26399 precipitation + f Lnet/minecraft/class_1959$class_5484; field_26401 temperatureModifier + f F field_26400 temperature + f F field_26402 downfall +c net/minecraft/class_1959$class_1963 net/minecraft/world/biome/Biome$RainType + m ()Ljava/lang/String; method_8752 getName + m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_1963; method_28431 getRainType + m (Lnet/minecraft/class_1959$class_1963;)Lnet/minecraft/class_1959$class_1963; method_8753 func_222360_a + m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_1963; valueOf valueOf + m ()[Lnet/minecraft/class_1959$class_1963; values values + f Ljava/lang/String; field_9385 name + f Lcom/mojang/serialization/Codec; field_24680 CODEC + f [Lnet/minecraft/class_1959$class_1963; field_9386 $VALUES + f Lnet/minecraft/class_1959$class_1963; field_9382 RAIN + f Lnet/minecraft/class_1959$class_1963; field_9383 SNOW + f Lnet/minecraft/class_1959$class_1963; field_9384 NONE + f Ljava/util/Map; field_9381 BY_NAME +c net/minecraft/class_1959$class_1961 net/minecraft/world/biome/Biome$Category + m ()[Lnet/minecraft/class_1959$class_1961; values values + m ()Ljava/lang/String; method_8749 getName + m (Lnet/minecraft/class_1959$class_1961;)Lnet/minecraft/class_1959$class_1961; method_8748 func_222353_a + m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_1961; valueOf valueOf + m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_1961; method_28424 byName + f Ljava/util/Map; field_9359 BY_NAME + f Lnet/minecraft/class_1959$class_1961; field_9366 NETHER + f [Lnet/minecraft/class_1959$class_1961; field_9373 $VALUES + f Lnet/minecraft/class_1959$class_1961; field_9365 MUSHROOM + f Ljava/lang/String; field_9372 name + f Lcom/mojang/serialization/Codec; field_24678 CODEC + f Lnet/minecraft/class_1959$class_1961; field_9367 OCEAN + f Lnet/minecraft/class_1959$class_1961; field_9363 BEACH + f Lnet/minecraft/class_1959$class_1961; field_9370 FOREST + f Lnet/minecraft/class_1959$class_1961; field_9369 RIVER + f Lnet/minecraft/class_1959$class_1961; field_9364 SWAMP + f Lnet/minecraft/class_1959$class_1961; field_9368 DESERT + f Lnet/minecraft/class_1959$class_1961; field_9355 PLAINS + f Lnet/minecraft/class_1959$class_1961; field_9356 SAVANNA + f Lnet/minecraft/class_1959$class_1961; field_9354 MESA + f Lnet/minecraft/class_1959$class_1961; field_9360 THEEND + f Lnet/minecraft/class_1959$class_1961; field_9362 ICY + f Lnet/minecraft/class_1959$class_1961; field_9371 NONE + f Lnet/minecraft/class_1959$class_1961; field_9358 JUNGLE + f Lnet/minecraft/class_1959$class_1961; field_9361 TAIGA + f Lnet/minecraft/class_1959$class_1961; field_9357 EXTREME_HILLS +c net/minecraft/class_1959$class_4762 net/minecraft/world/biome/Biome$Attributes + m ()I hashCode hashCode + m (Lnet/minecraft/class_1959$class_4762;)Ljava/lang/Float; method_28430 func_235116_f_ + m (Lnet/minecraft/class_1959$class_4762;)Ljava/lang/Float; method_28429 func_235115_e_ + m (Lnet/minecraft/class_1959$class_4762;)Ljava/lang/Float; method_28428 func_235114_d_ + m (Lnet/minecraft/class_1959$class_4762;)F method_24381 getAttributeDifference + m (Ljava/lang/Object;)Z equals equals + m (Lnet/minecraft/class_1959$class_4762;)Ljava/lang/Float; method_28427 func_235113_c_ + m (Lnet/minecraft/class_1959$class_4762;)Ljava/lang/Float; method_28426 func_235112_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28425 func_235111_a_ + f F field_22045 altitude + f F field_22044 humidity + f Lcom/mojang/serialization/Codec; field_24679 CODEC + f F field_22043 temperature + f F field_22047 offset + f F field_22046 weirdness +c net/minecraft/class_1959$class_5484 net/minecraft/world/biome/Biome$TemperatureModifier + m ()[Lnet/minecraft/class_1959$class_5484; values values + m ()Ljava/lang/String; method_30800 getName + m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_5484; method_30799 byName + m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_5484; valueOf valueOf + m (Lnet/minecraft/class_2338;F)F method_30798 getTemperatureAtPosition + m (Lnet/minecraft/class_1959$class_5484;)Lnet/minecraft/class_1959$class_5484; method_30797 func_242476_a + f Lcom/mojang/serialization/Codec; field_26409 CODEC + f Ljava/util/Map; field_26411 NAME_TO_MODIFIER_MAP + f Ljava/lang/String; field_26410 name + f Lnet/minecraft/class_1959$class_5484; field_26407 NONE + f [Lnet/minecraft/class_1959$class_5484; field_26412 $VALUES + f Lnet/minecraft/class_1959$class_5484; field_26408 FROZEN +c net/minecraft/class_1959$class_5484$2 net/minecraft/world/biome/Biome$TemperatureModifier$2 +c net/minecraft/class_1959$class_5484$1 net/minecraft/world/biome/Biome$TemperatureModifier$1 +c net/minecraft/class_1959$1 net/minecraft/world/biome/Biome$1 + m (I)V rehash rehash + f Lnet/minecraft/class_1959; field_20336 field_225490_a +c net/minecraft/class_1959$class_1960 net/minecraft/world/biome/Biome$Builder + m (F)Lnet/minecraft/class_1959$class_1960; method_8740 depth + m (Lnet/minecraft/class_1959$class_1963;)Lnet/minecraft/class_1959$class_1960; method_8735 precipitation + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_1959$class_5484;)Lnet/minecraft/class_1959$class_1960; method_30777 withTemperatureModifier + m (F)Lnet/minecraft/class_1959$class_1960; method_8727 downfall + m (F)Lnet/minecraft/class_1959$class_1960; method_8743 scale + m (F)Lnet/minecraft/class_1959$class_1960; method_8747 temperature + m (Lnet/minecraft/class_5485;)Lnet/minecraft/class_1959$class_1960; method_30973 withGenerationSettings + m (Lnet/minecraft/class_1959$class_1961;)Lnet/minecraft/class_1959$class_1960; method_8738 category + m ()Lnet/minecraft/class_1959; method_30972 build + m (Lnet/minecraft/class_4763;)Lnet/minecraft/class_1959$class_1960; method_24379 setEffects + m (Lnet/minecraft/class_5483;)Lnet/minecraft/class_1959$class_1960; method_30974 withMobSpawnSettings + f Lnet/minecraft/class_5485; field_26637 generationSettings + f Ljava/lang/Float; field_9344 depth + f Ljava/lang/Float; field_9348 scale + f Lnet/minecraft/class_1959$class_1961; field_9345 category + f Lnet/minecraft/class_1959$class_1963; field_9346 precipitation + f Lnet/minecraft/class_1959$class_5484; field_26396 temperatureModifier + f Lnet/minecraft/class_5483; field_26636 mobSpawnSettings + f Ljava/lang/Float; field_9349 temperature + f Lnet/minecraft/class_4763; field_22042 effects + f Ljava/lang/Float; field_9351 downfall +c net/minecraft/class_1966 net/minecraft/world/biome/provider/BiomeProvider + m (J)Lnet/minecraft/class_1966; method_27985 getBiomeProvider + m (IIIILjava/util/function/Predicate;Ljava/util/Random;)Lnet/minecraft/class_2338; method_8762 findBiomePosition + m (Lnet/minecraft/class_3195;)Z method_8754 hasStructure + m (IIIIILjava/util/function/Predicate;Ljava/util/Random;Z)Lnet/minecraft/class_2338; method_24385 findBiomePosition + m (Lnet/minecraft/class_3195;)Ljava/lang/Boolean; method_22395 func_226839_b_ + m (Lnet/minecraft/class_3195;Lnet/minecraft/class_1959;)Z method_22394 func_226838_a_ + m ()Ljava/util/List; method_28443 getBiomes + m (IIII)Ljava/util/Set; method_8763 getBiomes + m ()Lcom/mojang/serialization/Codec; method_28442 getBiomeProviderCodec + m ()Ljava/util/Set; method_8761 getSurfaceBlocks + f Ljava/util/Map; field_9392 hasStructureCache + f Ljava/util/Set; field_9390 topBlocksCache + f Lcom/mojang/serialization/Codec; field_24713 CODEC + f Ljava/util/List; field_20643 biomes +c net/minecraft/class_4543 net/minecraft/world/biome/BiomeManager + m (III)Lnet/minecraft/class_1959; method_24854 getBiomeAtPosition + m (J)J method_27984 getHashedSeed + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1959; method_27344 getBiomeAtPosition + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1959; method_22393 getBiome + m (Lnet/minecraft/class_1966;)Lnet/minecraft/class_4543; method_22392 copyWithProvider + m (DDD)Lnet/minecraft/class_1959; method_24938 getBiomeAtPosition + f Lnet/minecraft/class_4545; field_20642 magnifier + f Lnet/minecraft/class_4543$class_4544; field_20640 reader + f J field_20641 seed +c net/minecraft/class_4543$class_4544 net/minecraft/world/biome/BiomeManager$IBiomeReader + m (III)Lnet/minecraft/class_1959; method_16359 getNoiseBiome +c net/minecraft/class_4545 net/minecraft/world/biome/IBiomeMagnifier + m (JIIILnet/minecraft/class_4543$class_4544;)Lnet/minecraft/class_1959; method_22396 getBiome +c net/minecraft/class_4763 net/minecraft/world/biome/BiomeAmbience + m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_28448 func_235221_d_ + m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_28447 func_235219_c_ + m ()Lnet/minecraft/class_4763$class_5486; method_30814 getGrassColorModifier + m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_30815 func_244426_c + m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_28449 func_235223_a_ + m ()Ljava/util/Optional; method_30812 getGrassColor + m (Lnet/minecraft/class_4763;)Lnet/minecraft/class_4763$class_5486; method_30813 func_242530_f + m ()Ljava/util/Optional; method_30811 getFoliageColor + m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_28446 func_235217_b_ + m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_28444 func_244420_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28445 func_235215_a_ + m (Lnet/minecraft/class_4763;)Ljava/lang/Integer; method_28452 func_235229_h_ + m ()I method_30810 getSkyColor + m (Lnet/minecraft/class_4763;)Ljava/lang/Integer; method_28451 func_235227_g_ + m ()Ljava/util/Optional; method_24941 getAdditionsSound + m ()Ljava/util/Optional; method_24940 getMoodSound + m (Lnet/minecraft/class_4763;)Ljava/lang/Integer; method_30817 func_242532_i + m ()Ljava/util/Optional; method_24939 getAmbientSound + m ()Ljava/util/Optional; method_24390 getParticle + m (Lnet/minecraft/class_4763;)Ljava/lang/Integer; method_28450 func_235225_f_ + m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_30816 func_244421_d_ + m ()I method_24387 getFogColor + m ()I method_24389 getWaterFogColor + m ()Ljava/util/Optional; method_27345 getMusic + m ()I method_24388 getWaterColor + f Ljava/util/Optional; field_22491 ambientSound + f Ljava/util/Optional; field_22070 particle + f Ljava/util/Optional; field_26420 grassColor + f Lnet/minecraft/class_4763$class_5486; field_26421 grassColorModifier + f Ljava/util/Optional; field_26419 foliageColor + f Ljava/util/Optional; field_22493 additionsSound + f Ljava/util/Optional; field_24113 music + f Ljava/util/Optional; field_22492 moodSound + f I field_22068 waterColor + f I field_22067 fogColor + f Lcom/mojang/serialization/Codec; field_24714 CODEC + f I field_22069 waterFogColor + f I field_26418 skyColor +c net/minecraft/class_4763$1 net/minecraft/world/biome/BiomeAmbience$1 +c net/minecraft/class_4763$class_4764 net/minecraft/world/biome/BiomeAmbience$Builder + m (I)Lnet/minecraft/class_4763$class_4764; method_24392 setFogColor + m ()Ljava/lang/IllegalStateException; method_24398 func_235249_d_ + m ()Ljava/lang/IllegalStateException; method_24396 func_235247_c_ + m ()Ljava/lang/IllegalStateException; method_24394 func_235245_b_ + m ()Ljava/lang/IllegalStateException; method_30819 func_242538_b + m ()Lnet/minecraft/class_4763; method_24391 build + m (Lnet/minecraft/class_4968;)Lnet/minecraft/class_4763$class_4764; method_24943 setMoodSound + m (Lnet/minecraft/class_4763$class_5486;)Lnet/minecraft/class_4763$class_4764; method_30818 withGrassColorModifier + m (Lnet/minecraft/class_5195;)Lnet/minecraft/class_4763$class_4764; method_27346 setMusic + m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_4763$class_4764; method_24942 setAmbientSound + m (Lnet/minecraft/class_4761;)Lnet/minecraft/class_4763$class_4764; method_24393 setParticle + m (I)Lnet/minecraft/class_4763$class_4764; method_30822 withGrassColor + m (I)Lnet/minecraft/class_4763$class_4764; method_30821 withFoliageColor + m (I)Lnet/minecraft/class_4763$class_4764; method_30820 withSkyColor + m (I)Lnet/minecraft/class_4763$class_4764; method_24397 setWaterFogColor + m (Lnet/minecraft/class_4967;)Lnet/minecraft/class_4763$class_4764; method_24944 setAdditionsSound + m (I)Lnet/minecraft/class_4763$class_4764; method_24395 setWaterColor + f Ljava/util/Optional; field_22074 particle + f Ljava/util/Optional; field_26423 foliageColor + f Ljava/util/Optional; field_26424 grassColor + f Lnet/minecraft/class_4763$class_5486; field_26425 grassColorModifier + f Ljava/util/OptionalInt; field_26422 skyColor + f Ljava/util/OptionalInt; field_22071 fogColor + f Ljava/util/OptionalInt; field_22072 waterColor + f Ljava/util/OptionalInt; field_22073 waterFogColor + f Ljava/util/Optional; field_24114 music + f Ljava/util/Optional; field_22494 ambientSound + f Ljava/util/Optional; field_22495 moodSound + f Ljava/util/Optional; field_22496 additionsSound +c net/minecraft/class_4763$class_5486 net/minecraft/world/biome/BiomeAmbience$GrassColorModifier + m ()Ljava/lang/String; method_30826 getName + m (Ljava/lang/String;)Lnet/minecraft/class_4763$class_5486; method_30825 byName + m (Ljava/lang/String;)Lnet/minecraft/class_4763$class_5486; valueOf valueOf + m (DDI)I method_30823 getModifiedGrassColor + m ()[Lnet/minecraft/class_4763$class_5486; values values + m (Lnet/minecraft/class_4763$class_5486;)Lnet/minecraft/class_4763$class_5486; method_30824 func_242545_a + f Lcom/mojang/serialization/Codec; field_26429 CODEC + f Ljava/lang/String; field_26430 name + f [Lnet/minecraft/class_4763$class_5486; field_26432 $VALUES + f Lnet/minecraft/class_4763$class_5486; field_26428 SWAMP + f Lnet/minecraft/class_4763$class_5486; field_26427 DARK_FOREST + f Ljava/util/Map; field_26431 NAME_TO_MODIFIER_MAP + f Lnet/minecraft/class_4763$class_5486; field_26426 NONE +c net/minecraft/class_4763$class_5486$2 net/minecraft/world/biome/BiomeAmbience$GrassColorModifier$2 +c net/minecraft/class_4763$class_5486$3 net/minecraft/world/biome/BiomeAmbience$GrassColorModifier$3 +c net/minecraft/class_4763$class_5486$1 net/minecraft/world/biome/BiomeAmbience$GrassColorModifier$1 +c net/minecraft/class_1973 net/minecraft/world/biome/provider/CheckerboardBiomeProvider + m (Lnet/minecraft/class_1973;)Ljava/util/List; method_28455 func_235259_b_ + m (Lnet/minecraft/class_1973;)Ljava/lang/Integer; method_28453 func_235257_a_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28454 func_235258_a_ + f Ljava/util/List; field_9481 biomeList + f I field_24716 biomeScale + f Lcom/mojang/serialization/Codec; field_24715 CODEC + f I field_9480 biomeScaleShift +c net/minecraft/class_1972 net/minecraft/world/biome/Biomes + m (Ljava/lang/String;)Lnet/minecraft/class_5321; method_8775 makeKey + f Lnet/minecraft/class_5321; field_9431 TALL_BIRCH_FOREST + f Lnet/minecraft/class_5321; field_9411 THE_END + f Lnet/minecraft/class_5321; field_9450 DARK_FOREST_HILLS + f Lnet/minecraft/class_5321; field_9467 COLD_OCEAN + f Lnet/minecraft/class_5321; field_9420 TAIGA + f Lnet/minecraft/class_5321; field_9426 MODIFIED_JUNGLE + f Lnet/minecraft/class_5321; field_9442 END_HIGHLANDS + f Lnet/minecraft/class_5321; field_9438 RIVER + f Lnet/minecraft/class_5321; field_9408 WARM_OCEAN + f Lnet/minecraft/class_5321; field_9446 DEEP_OCEAN + f Lnet/minecraft/class_5321; field_9472 MOUNTAINS + f Lnet/minecraft/class_5321; field_9457 SMALL_END_ISLANDS + f Lnet/minecraft/class_5321; field_9479 SWAMP_HILLS + f Lnet/minecraft/class_5321; field_9427 DESERT_LAKES + f Lnet/minecraft/class_5321; field_9432 JUNGLE_HILLS + f Lnet/minecraft/class_5321; field_9468 BAMBOO_JUNGLE_HILLS + f Lnet/minecraft/class_5321; field_9451 PLAINS + f Lnet/minecraft/class_5321; field_9414 FLOWER_FOREST + f Lnet/minecraft/class_5321; field_22077 CRIMSON_FOREST + f Lnet/minecraft/class_5321; field_9410 WOODED_BADLANDS_PLATEAU + f Lnet/minecraft/class_5321; field_9428 TAIGA_HILLS + f Lnet/minecraft/class_5321; field_9449 SAVANNA + f Lnet/minecraft/class_5321; field_9455 SUNFLOWER_PLAINS + f Lnet/minecraft/class_5321; field_9440 BAMBOO_JUNGLE + f Lnet/minecraft/class_5321; field_9425 SNOWY_TAIGA_HILLS + f Lnet/minecraft/class_5321; field_9445 SHATTERED_SAVANNA_PLATEAU + f Lnet/minecraft/class_5321; field_9466 DESERT_HILLS + f Lnet/minecraft/class_5321; field_9413 MODIFIED_WOODED_BADLANDS_PLATEAU + f Lnet/minecraft/class_5321; field_9429 GIANT_TREE_TAIGA_HILLS + f Lnet/minecraft/class_5321; field_9444 SNOWY_MOUNTAINS + f Lnet/minecraft/class_5321; field_9436 MODIFIED_GRAVELLY_MOUNTAINS + f Lnet/minecraft/class_5321; field_9418 DEEP_FROZEN_OCEAN + f Lnet/minecraft/class_5321; field_9475 DARK_FOREST + f Lnet/minecraft/class_5321; field_9407 MUSHROOM_FIELD_SHORE + f Lnet/minecraft/class_5321; field_9463 FROZEN_RIVER + f Lnet/minecraft/class_5321; field_9439 DEEP_LUKEWARM_OCEAN + f Lnet/minecraft/class_5321; field_9412 BIRCH_FOREST + f Lnet/minecraft/class_5321; field_9416 GIANT_SPRUCE_TAIGA + f Lnet/minecraft/class_5321; field_9461 NETHER_WASTES + f Lnet/minecraft/class_5321; field_9441 LUKEWARM_OCEAN + f Lnet/minecraft/class_5321; field_23859 BASALT_DELTAS + f Lnet/minecraft/class_5321; field_9435 FROZEN_OCEAN + f Lnet/minecraft/class_5321; field_9458 TALL_BIRCH_HILLS + f Lnet/minecraft/class_5321; field_9471 SWAMP + f Lnet/minecraft/class_5321; field_9453 ICE_SPIKES + f Lnet/minecraft/class_5321; field_9465 END_BARRENS + f Lnet/minecraft/class_5321; field_9405 MODIFIED_JUNGLE_EDGE + f Lnet/minecraft/class_5321; field_9433 BADLANDS_PLATEAU + f Lnet/minecraft/class_5321; field_9422 TAIGA_MOUNTAINS + f Lnet/minecraft/class_5321; field_22075 WARPED_FOREST + f Lnet/minecraft/class_5321; field_9419 STONE_SHORE + f Lnet/minecraft/class_5321; field_9409 FOREST + f Lnet/minecraft/class_5321; field_9447 END_MIDLANDS + f Lnet/minecraft/class_5321; field_9417 JUNGLE + f Lnet/minecraft/class_5321; field_22076 SOUL_SAND_VALLEY + f Lnet/minecraft/class_5321; field_9423 OCEAN + f Lnet/minecraft/class_5321; field_9415 BADLANDS + f Lnet/minecraft/class_5321; field_9474 JUNGLE_EDGE + f Lnet/minecraft/class_5321; field_9424 DESERT + f Lnet/minecraft/class_5321; field_9476 GRAVELLY_MOUNTAINS + f Lnet/minecraft/class_5321; field_9406 MODIFIED_BADLANDS_PLATEAU + f Lnet/minecraft/class_5321; field_9460 WOODED_MOUNTAINS + f Lnet/minecraft/class_5321; field_9464 MOUNTAIN_EDGE + f Lnet/minecraft/class_5321; field_9430 SAVANNA_PLATEAU + f Lnet/minecraft/class_5321; field_9434 BEACH + f Lnet/minecraft/class_5321; field_9477 GIANT_TREE_TAIGA + f Lnet/minecraft/class_5321; field_9459 WOODED_HILLS + f Lnet/minecraft/class_5321; field_9443 ERODED_BADLANDS + f Lnet/minecraft/class_5321; field_9462 MUSHROOM_FIELDS + f Lnet/minecraft/class_5321; field_9404 GIANT_SPRUCE_TAIGA_HILLS + f Lnet/minecraft/class_5321; field_9473 THE_VOID + f Lnet/minecraft/class_5321; field_9456 SHATTERED_SAVANNA + f Lnet/minecraft/class_5321; field_9454 SNOWY_TAIGA + f Lnet/minecraft/class_5321; field_9448 DEEP_WARM_OCEAN + f Lnet/minecraft/class_5321; field_9437 SNOWY_TAIGA_MOUNTAINS + f Lnet/minecraft/class_5321; field_9478 SNOWY_BEACH + f Lnet/minecraft/class_5321; field_9452 SNOWY_TUNDRA + f Lnet/minecraft/class_5321; field_9470 DEEP_COLD_OCEAN + f Lnet/minecraft/class_5321; field_9421 BIRCH_FOREST_HILLS +c net/minecraft/class_1992 net/minecraft/world/biome/provider/SingleBiomeProvider + m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959; method_30361 func_242549_a + m (Lnet/minecraft/class_1992;)Ljava/util/function/Supplier; method_28456 func_235261_a_ + f Lcom/mojang/serialization/Codec; field_24717 field_235260_e_ + f Ljava/util/function/Supplier; field_9486 biome +c net/minecraft/class_4547 net/minecraft/world/biome/ColumnFuzzedBiomeMagnifier + m ()[Lnet/minecraft/class_4547; values values + m (Ljava/lang/String;)Lnet/minecraft/class_4547; valueOf valueOf + f Lnet/minecraft/class_4547; field_20646 INSTANCE + f [Lnet/minecraft/class_4547; field_20647 $VALUES +c net/minecraft/class_4546 net/minecraft/world/biome/FuzzedBiomeMagnifier + m (D)D method_22397 square + m (J)D method_22398 randomDouble + m (Ljava/lang/String;)Lnet/minecraft/class_4546; valueOf valueOf + m ()[Lnet/minecraft/class_4546; values values + m (JIIIDDD)D method_22399 distanceToCorner + f Lnet/minecraft/class_4546; field_20644 INSTANCE + f [Lnet/minecraft/class_4546; field_20645 $VALUES +c net/minecraft/class_4766 net/minecraft/world/biome/provider/NetherBiomeProvider + m ()Ljava/util/Optional; method_31085 getDefaultBuilder + m (Lnet/minecraft/class_4766;)Lcom/mojang/datafixers/util/Either; method_28457 func_235275_a_ + m (Lnet/minecraft/class_4766;)Lnet/minecraft/class_4766$class_5487; method_30830 func_242607_e + m (Lnet/minecraft/class_4766;)Lnet/minecraft/class_4766$class_5487; method_30828 func_242604_c + m (Lnet/minecraft/class_4766;)Lcom/mojang/datafixers/util/Either; method_28463 func_242603_b + m (Lnet/minecraft/class_4766;)Lnet/minecraft/class_4766$class_5487; method_30829 func_242606_d + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30827 func_242602_a + m (Lnet/minecraft/class_4766;)Lnet/minecraft/class_4766$class_5487; method_30831 func_242608_f + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28464 func_235282_b_ + m (Lcom/mojang/datafixers/util/Pair;)Lnet/minecraft/class_4766$class_5502; method_31084 func_242601_a + m (Lnet/minecraft/class_1959$class_4762;Lcom/mojang/datafixers/util/Pair;)Ljava/lang/Float; method_24402 func_235272_a_ + m (Lnet/minecraft/class_4766;)Ljava/util/List; method_28466 func_235284_c_ + m (Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_4766; method_28459 func_235277_a_ + m (Lnet/minecraft/class_4766;)Ljava/lang/Long; method_28468 func_235286_d_ + m (J)Z method_28462 isDefaultPreset + f Lnet/minecraft/class_5216; field_22081 weirdnessNoiseMixer + f Lnet/minecraft/class_5216; field_22080 altitudeNoiseMixer + f Z field_24116 useHeightForNoise + f J field_24720 seed + f Lnet/minecraft/class_5216; field_22078 temperatureNoiseMixer + f Lcom/mojang/serialization/MapCodec; field_24718 PACKET_CODEC + f Lnet/minecraft/class_5216; field_22079 humidityNoiseMixer + f Ljava/util/Optional; field_24721 netherProviderPreset + f Lnet/minecraft/class_4766$class_5487; field_26436 altitudeNoise + f Lnet/minecraft/class_4766$class_5487; field_26435 humidityNoise + f Lnet/minecraft/class_4766$class_5487; field_26437 weirdnessNoise + f Lnet/minecraft/class_4766$class_5487; field_26433 DEFAULT_NOISE + f Lnet/minecraft/class_4766$class_5487; field_26434 temperatureNoise + f Lcom/mojang/serialization/Codec; field_24719 CODEC + f Ljava/util/List; field_24115 biomeAttributes +c net/minecraft/class_4766$class_5502 net/minecraft/world/biome/provider/NetherBiomeProvider$DefaultBuilder + m (Lnet/minecraft/class_2960;)Lcom/mojang/serialization/DataResult; method_31097 func_242631_a + m ()Lnet/minecraft/class_2378; method_31098 getLookupRegistry + m (Lnet/minecraft/class_4766$class_5305;)Lcom/mojang/serialization/DataResult; method_31095 func_242629_a + m ()Lnet/minecraft/class_4766; method_31101 build + m ()J method_31100 getSeed + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_31096 func_242630_a + m ()Lnet/minecraft/class_4766$class_5305; method_31094 getPreset + m (Lnet/minecraft/class_2960;)Lcom/mojang/serialization/DataResult; method_31099 func_242633_b + f Lnet/minecraft/class_4766$class_5305; field_26695 preset + f Lcom/mojang/serialization/MapCodec; field_26694 CODEC + f J field_26697 seed + f Lnet/minecraft/class_2378; field_26696 lookupRegistry +c net/minecraft/class_4766$class_5305 net/minecraft/world/biome/provider/NetherBiomeProvider$Preset + m (Lnet/minecraft/class_4766$class_5305;Lnet/minecraft/class_2378;Ljava/lang/Long;)Lnet/minecraft/class_4766; method_31088 func_242617_a + m ()Ljava/util/Map; method_31086 func_242615_a + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31092 func_242622_d + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31091 func_242621_c + m (Lnet/minecraft/class_2378;J)Lnet/minecraft/class_4766; method_28469 build + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31090 func_242620_b + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31089 func_242618_a + m (Lnet/minecraft/class_4766$class_5305;)Lnet/minecraft/class_2960; method_31087 func_242616_a + m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31093 func_242623_e + f Lnet/minecraft/class_4766$class_5305; field_24723 DEFAULT_NETHER_PROVIDER_PRESET + f Ljava/util/Map; field_24724 PRESETS + f Lnet/minecraft/class_2960; field_24725 id + f Lcom/mojang/datafixers/util/Function3; field_24726 netherProviderFunction +c net/minecraft/class_4766$class_5487 net/minecraft/world/biome/provider/NetherBiomeProvider$Noise + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30833 func_242613_a + m ()Lit/unimi/dsi/fastutil/doubles/DoubleList; method_30834 getAmplitudes + m ()I method_30832 getNumberOfOctaves + f I field_26439 numOctaves + f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_26440 amplitudes + f Lcom/mojang/serialization/Codec; field_26438 CODEC +c net/minecraft/class_4766$1 net/minecraft/world/biome/provider/NetherBiomeProvider$1 +c net/minecraft/class_5483 net/minecraft/world/biome/MobSpawnInfo + m (Lnet/minecraft/class_1311;)Lnet/minecraft/class_1311; method_31006 func_242565_c + m ()F method_31002 getCreatureSpawnProbability + m (Lnet/minecraft/class_5483;)Ljava/lang/Float; method_30796 func_242566_c + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30791 func_242561_a + m (Lnet/minecraft/class_5483;)Ljava/util/Map; method_30795 func_242564_b + m (Lnet/minecraft/class_5483;)Ljava/util/Map; method_30794 func_242560_a + m (Lnet/minecraft/class_1311;)Ljava/util/List; method_31005 func_242563_b + m (Lnet/minecraft/class_1311;)Ljava/util/List; method_31004 getSpawners + m ()Z method_31082 isValidSpawnBiomeForPlayer + m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_5483$class_5265; method_31003 getSpawnCost + f Ljava/util/Map; field_26406 spawnCosts + f Lcom/mojang/serialization/MapCodec; field_26403 CODEC + f Lnet/minecraft/class_5483; field_26646 EMPTY + f Ljava/util/Map; field_26405 spawners + f Z field_26692 validSpawnBiomeForPlayer + f F field_26404 creatureSpawnProbability + f Lorg/apache/logging/log4j/Logger; field_26645 LOGGER +c net/minecraft/class_5483$1 net/minecraft/world/biome/MobSpawnInfo$1 +c net/minecraft/class_5483$class_1964 net/minecraft/world/biome/MobSpawnInfo$Spawners + m (Lnet/minecraft/class_5483$class_1964;)Lnet/minecraft/class_1299; method_28436 func_242595_d + m (Lnet/minecraft/class_5483$class_1964;)Ljava/lang/Integer; method_28434 func_242593_b + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28433 func_242592_a + m (Lnet/minecraft/class_5483$class_1964;)Ljava/lang/Integer; method_28432 func_242591_a + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_5483$class_1964;)Ljava/lang/Integer; method_28435 func_242594_c + f Lnet/minecraft/class_1299; field_9389 type + f I field_9387 maxCount + f Lcom/mojang/serialization/Codec; field_24681 CODEC + f I field_9388 minCount +c net/minecraft/class_5483$class_5265 net/minecraft/world/biome/MobSpawnInfo$SpawnCosts + m ()D method_27838 getEntitySpawnCost + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30359 func_242584_a + m (Lnet/minecraft/class_5483$class_5265;)Ljava/lang/Double; method_31015 func_242586_b + m ()D method_27837 getMaxSpawnCost + m (Lnet/minecraft/class_5483$class_5265;)Ljava/lang/Double; method_31014 func_242583_a + f D field_24407 maxSpawnCost + f D field_24408 entitySpawnCost + f Lcom/mojang/serialization/Codec; field_25820 CODEC +c net/minecraft/class_5483$class_5496 net/minecraft/world/biome/MobSpawnInfo$Builder + m ()Lnet/minecraft/class_5483$class_5496; method_31083 isValidSpawnBiomeForPlayer + m (Lnet/minecraft/class_1311;)Lnet/minecraft/class_1311; method_31013 func_242578_b + m ()Lnet/minecraft/class_5483; method_31007 copy + m (Lnet/minecraft/class_1299;DD)Lnet/minecraft/class_5483$class_5496; method_31009 withSpawnCost + m (F)Lnet/minecraft/class_5483$class_5496; method_31008 withCreatureSpawnProbability + m (Lnet/minecraft/class_1311;Lnet/minecraft/class_5483$class_1964;)Lnet/minecraft/class_5483$class_5496; method_31011 withSpawner + m (Ljava/util/Map$Entry;)Ljava/util/List; method_31012 func_242576_a + m (Lnet/minecraft/class_1311;)Ljava/util/List; method_31010 func_242574_a + f F field_26649 creatureSpawnProbability + f Z field_26693 validSpawnBiomeForPlayer + f Ljava/util/Map; field_26647 spawners + f Ljava/util/Map; field_26648 spawnCosts +c net/minecraft/class_2088 net/minecraft/world/biome/provider/OverworldBiomeProvider + m (Lnet/minecraft/class_2088;)Lnet/minecraft/class_2378; method_31102 func_242637_a + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_5321;)Ljava/util/function/Supplier; method_31103 func_242638_a + m (Lnet/minecraft/class_2088;)Ljava/lang/Boolean; method_28476 func_235303_b_ + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28475 func_235302_a_ + m (Lnet/minecraft/class_2378;Lnet/minecraft/class_5321;)Lnet/minecraft/class_1959; method_31104 func_242639_b + m (Lnet/minecraft/class_2088;)Ljava/lang/Boolean; method_28474 func_235301_a_ + m (Lnet/minecraft/class_2088;)Ljava/lang/Long; method_28477 func_235304_c_ + f Lnet/minecraft/class_3642; field_9680 genBiomes + f Z field_24729 largeBiomes + f Ljava/util/List; field_9677 biomes + f Lcom/mojang/serialization/Codec; field_24727 CODEC + f J field_24728 seed + f Z field_24498 legacyBiomes + f Lnet/minecraft/class_2378; field_26698 lookupRegistry +c net/minecraft/class_5266 net/minecraft/world/biome/DefaultBiomeMagnifier + m (Ljava/lang/String;)Lnet/minecraft/class_5266; valueOf valueOf + m ()[Lnet/minecraft/class_5266; values values + f [Lnet/minecraft/class_5266; field_24410 $VALUES + f Lnet/minecraft/class_5266; field_24409 INSTANCE +c net/minecraft/class_2169 net/minecraft/world/biome/provider/EndBiomeProvider + m (Lnet/minecraft/class_2169;)Lnet/minecraft/class_2378; method_31106 func_242648_b + m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_31105 func_242647_a + m (J)Z method_28479 areProvidersEqual + m (Lnet/minecraft/class_3541;II)F method_8757 getRandomNoise + m (Lnet/minecraft/class_2169;)Ljava/lang/Long; method_28478 func_242646_a + f Lnet/minecraft/class_2378; field_26699 lookupRegistry + f Lnet/minecraft/class_1959; field_26700 theEndBiome + f Lnet/minecraft/class_1959; field_26702 endMidlandsBiome + f Lnet/minecraft/class_1959; field_26701 endHighlandsBiome + f J field_24731 seed + f Lnet/minecraft/class_1959; field_26703 smallEndIslandsBiome + f Lnet/minecraft/class_3541; field_9831 generator + f Lcom/mojang/serialization/Codec; field_24730 CODEC + f Lnet/minecraft/class_1959; field_26704 endBarrensBiome +c net/minecraft/class_4739 net/minecraft/block/AbstractChestBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_4732$class_4734; method_24167 combine + f Ljava/util/function/Supplier; field_21796 tileEntityType +c net/minecraft/class_2185 net/minecraft/block/AbstractBannerBlock + m ()Lnet/minecraft/class_1767; method_9303 getColor + f Lnet/minecraft/class_1767; field_9855 color +c net/minecraft/class_4262 net/minecraft/block/AbstractGlassBlock +c net/minecraft/class_2363 net/minecraft/block/AbstractFurnaceBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)V method_17025 interactWith + f Lnet/minecraft/class_2753; field_11104 FACING + f Lnet/minecraft/class_2746; field_11105 LIT +c net/minecraft/class_2189 net/minecraft/block/AirBlock +c net/minecraft/class_2190 net/minecraft/block/AbstractSkullBlock + m ()Lnet/minecraft/class_2484$class_2485; method_9327 getSkullType + f Lnet/minecraft/class_2484$class_2485; field_9867 skullType +c net/minecraft/class_2195 net/minecraft/block/AttachedStemBlock + m ()Lnet/minecraft/class_1792; method_9337 getSeeds + f Lnet/minecraft/class_2511; field_9875 grownFruit + f Lnet/minecraft/class_2753; field_9873 FACING + f Ljava/util/Map; field_9874 SHAPES +c net/minecraft/class_2199 net/minecraft/block/AnvilBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_9346 damage + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17453 func_220272_a + f Lnet/minecraft/class_265; field_9886 PART_UPPER_Z + f Lnet/minecraft/class_265; field_9882 PART_BASE + f Lnet/minecraft/class_265; field_9889 PART_MID_Z + f Lnet/minecraft/class_265; field_9888 PART_MID_X + f Lnet/minecraft/class_265; field_9887 X_AXIS_AABB + f Lnet/minecraft/class_265; field_9885 PART_LOWER_X + f Lnet/minecraft/class_265; field_9884 PART_UPPER_X + f Lnet/minecraft/class_265; field_9892 Z_AXIS_AABB + f Lnet/minecraft/class_2561; field_17349 containerName + f Lnet/minecraft/class_265; field_9891 PART_LOWER_Z + f Lnet/minecraft/class_2753; field_9883 FACING +c net/minecraft/class_2202 net/minecraft/block/BambooSaplingBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9351 growBamboo + f Lnet/minecraft/class_265; field_9897 SHAPE +c net/minecraft/class_2211 net/minecraft/block/BambooBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_9386 getNumBambooBlocksBelow + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Ljava/util/Random;I)V method_9385 grow + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_9387 getNumBambooBlocksAbove + f Lnet/minecraft/class_2758; field_9916 PROPERTY_STAGE + f Lnet/minecraft/class_265; field_9915 SHAPE_LARGE_LEAVES + f Lnet/minecraft/class_2754; field_9917 PROPERTY_BAMBOO_LEAVES + f Lnet/minecraft/class_265; field_9912 SHAPE_NORMAL + f Lnet/minecraft/class_265; field_9913 SHAPE_COLLISION + f Lnet/minecraft/class_2758; field_9914 PROPERTY_AGE +c net/minecraft/class_3708 net/minecraft/block/BarrelBlock + f Lnet/minecraft/class_2753; field_16320 PROPERTY_FACING + f Lnet/minecraft/class_2746; field_18006 PROPERTY_OPEN +c net/minecraft/class_2215 net/minecraft/block/BannerBlock + m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_2248; method_9398 forColor + f Ljava/util/Map; field_9925 BANNERS_BY_COLOR + f Lnet/minecraft/class_2758; field_9924 ROTATION + f Lnet/minecraft/class_265; field_9923 SHAPE +c net/minecraft/class_2221 net/minecraft/block/CoralFanBlock + f Lnet/minecraft/class_265; field_9932 SHAPE +c net/minecraft/class_2213 net/minecraft/block/BarrierBlock +c net/minecraft/class_2230 net/minecraft/block/AbstractCoralPlantBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9431 isInWater + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_9430 updateIfDry + f Lnet/minecraft/class_2746; field_9940 WATERLOGGED + f Lnet/minecraft/class_265; field_9939 SHAPE +c net/minecraft/class_2217 net/minecraft/block/DeadCoralPlantBlock + f Lnet/minecraft/class_265; field_9928 SHAPE +c net/minecraft/class_2222 net/minecraft/block/DeadCoralWallFanBlock + f Lnet/minecraft/class_2753; field_9933 FACING + f Ljava/util/Map; field_9934 SHAPES +c net/minecraft/class_4770 net/minecraft/block/AbstractFireBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_30033 shouldLightPortal + m (Lnet/minecraft/class_1937;)Z method_30366 canLightPortal + m (Lnet/minecraft/class_2680;)Z method_10195 canBurn + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_30032 canLightBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_24416 getFireForPlacement + f Lnet/minecraft/class_265; field_22498 shapeDown + f F field_22088 fireDamage +c net/minecraft/class_2237 net/minecraft/block/ContainerBlock +c net/minecraft/class_2241 net/minecraft/block/AbstractRailBlock + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1937;Lnet/minecraft/class_2768;)Z method_27935 isValidRailDirection + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)Lnet/minecraft/class_2680; method_9475 getUpdatedState + m (Lnet/minecraft/class_2680;)Z method_9476 isRail + m ()Z method_9478 areCornersDisabled + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;)V method_9477 updateState + m ()Lnet/minecraft/class_2769; method_9474 getShapeProperty + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_2680; method_24417 updateRailState + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_9479 isRail + f Z field_9959 disableCorners + f Lnet/minecraft/class_265; field_9960 ASCENDING_AABB + f Lnet/minecraft/class_265; field_9958 FLAT_AABB +c net/minecraft/class_2241$1 net/minecraft/block/AbstractRailBlock$1 + f [I field_24465 field_235329_a_ +c net/minecraft/class_2231 net/minecraft/block/AbstractPressurePlateBlock + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_9436 playClickOnSound + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9437 updateNeighbors + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_9438 playClickOffSound + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)I method_9434 computeRedstoneStrength + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;I)V method_9433 updateState + m (Lnet/minecraft/class_2680;)I method_9435 getRedstoneStrength + m ()I method_9563 getPoweredDuration + m (Lnet/minecraft/class_2680;I)Lnet/minecraft/class_2680; method_9432 setRedstoneStrength + f Lnet/minecraft/class_238; field_9941 PRESSURE_AABB + f Lnet/minecraft/class_265; field_9942 PRESSED_AABB + f Lnet/minecraft/class_265; field_9943 UNPRESSED_AABB +c net/minecraft/class_2238 net/minecraft/block/BeaconBlock +c net/minecraft/class_4275 net/minecraft/block/IBeaconBeamColorProvider + m ()Lnet/minecraft/class_1767; method_10622 getColor +c net/minecraft/class_4481 net/minecraft/block/BeehiveBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_23893 angerNearbyBees + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)V method_23754 takeHoney + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_23894 hasBees + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_265;D)V method_21844 addHoneyParticle + m (Lnet/minecraft/class_1937;DDDDD)V method_21840 addHoneyParticle + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_21843 addHoneyParticle + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_21839 func_226874_a_ + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_21842 dropHoneyComb + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;Lnet/minecraft/class_4482$class_4484;)V method_21841 takeHoney + m (Ljava/util/Random;)Lnet/minecraft/class_2350; method_26978 getGenerationDirection + f Lnet/minecraft/class_2758; field_20420 HONEY_LEVEL + f [Lnet/minecraft/class_2350; field_20418 GENERATE_DIRECTIONS + f Lnet/minecraft/class_2753; field_20419 FACING +c net/minecraft/class_2244 net/minecraft/block/BedBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_4732$class_4733; method_24164 getMergeType + m (Lnet/minecraft/class_1937;)Z method_27352 doesBedWork + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_22357 tryWakeUpVillager + m ()Lnet/minecraft/class_1767; method_9487 getColor + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_30839 isBedBelow + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_24163 getFootDirection + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;F)Ljava/util/Optional; method_9484 func_242652_a + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1657$class_1658;)V method_19283 func_220173_a + m (Lnet/minecraft/class_2742;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_9488 getDirectionToOther + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;[IZ)Ljava/util/Optional; method_30836 func_242654_a + m (Lnet/minecraft/class_2350;)[[I method_30837 func_242655_a + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)[[I method_30840 func_242658_b + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Ljava/util/Optional; method_30835 func_242653_a + m (Lnet/minecraft/class_1297;)V method_21838 bounceEntity + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2350; method_18476 getBedDirection + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)[[I method_30838 func_242656_a + f Lnet/minecraft/class_265; field_16782 CORNER_NW + f Lnet/minecraft/class_2754; field_9967 PART + f Lnet/minecraft/class_265; field_16788 BED_BASE_SHAPE + f Lnet/minecraft/class_2746; field_9968 OCCUPIED + f Lnet/minecraft/class_1767; field_9966 color + f Lnet/minecraft/class_265; field_16790 EAST_FACING_SHAPE + f Lnet/minecraft/class_265; field_16789 CORNER_SE + f Lnet/minecraft/class_265; field_16784 CORNER_SW + f Lnet/minecraft/class_265; field_16786 CORNER_NE + f Lnet/minecraft/class_265; field_16785 SOUTH_FACING_SHAPE + f Lnet/minecraft/class_265; field_16783 WEST_FACING_SHAPE + f Lnet/minecraft/class_265; field_16787 NORTH_FACING_SHAPE +c net/minecraft/class_2244$1 net/minecraft/block/BedBlock$1 + f [I field_16791 field_222376_a +c net/minecraft/class_3709 net/minecraft/block/BellBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_16115 getDirectionFromState + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_3965;Lnet/minecraft/class_1657;Z)Z method_19285 attemptRing + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_17026 ring + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_16116 getShape + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;D)Z method_17028 canRingFrom + f Lnet/minecraft/class_265; field_16323 NORTH_FACING_WALL_SHAPE + f Lnet/minecraft/class_2753; field_16324 HORIZONTAL_FACING + f Lnet/minecraft/class_265; field_17093 SOUTH_FACING_WALL_SHAPE + f Lnet/minecraft/class_265; field_17087 BELL_CUP_SHAPE + f Lnet/minecraft/class_265; field_17092 EAST_FACING_WALL_SHAPE + f Lnet/minecraft/class_2754; field_16326 ATTACHMENT + f Lnet/minecraft/class_265; field_16325 FLOOR_NORTH_SOUTH_SHAPE + f Lnet/minecraft/class_265; field_16322 FLOOR_EAST_WEST_SHAPE + f Lnet/minecraft/class_265; field_17089 BASE_WALL_SHAPE + f Lnet/minecraft/class_265; field_17090 DOUBLE_WALL_NORTH_SOUTH_SHAPE + f Lnet/minecraft/class_2746; field_20648 POWERED + f Lnet/minecraft/class_265; field_17088 BELL_RIM_SHAPE + f Lnet/minecraft/class_265; field_17094 CEILING_SHAPE + f Lnet/minecraft/class_265; field_17091 WEST_FACING_WALL_SHAPE + f Lnet/minecraft/class_265; field_16321 DOUBLE_WALL_EAST_WEST_SHAPE +c net/minecraft/class_3709$1 net/minecraft/block/BellBlock$1 + f [I field_16327 field_222377_a +c net/minecraft/class_2242 net/minecraft/block/BeetrootBlock + f Lnet/minecraft/class_2758; field_9962 BEETROOT_AGE + f [Lnet/minecraft/class_265; field_9961 SHAPE +c net/minecraft/class_2248 net/minecraft/block/Block + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;Lnet/minecraft/class_1297;Lnet/minecraft/class_1799;)Ljava/util/List; method_9609 getDrops + m (Lnet/minecraft/class_1927;)Z method_9533 canDropFromExplosion + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_16361 hasSolidSideOnTop + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9579 propagatesSkylightDown + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Lnet/minecraft/class_1799; method_9574 getItem + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)V method_30094 replaceBlock + m (Lnet/minecraft/class_265;)Z method_9614 isOpaque + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;F)V method_9554 onFallenUpon + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_9607 shouldSideBeRendered + m ()F method_23349 getSpeedFactor + m ()Lnet/minecraft/class_5250; method_9518 getTranslatedName + m (Lnet/minecraft/class_1750;)Lnet/minecraft/class_2680; method_9605 getStateForPlacement + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_9496 animateTick + m ()Lit/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap; method_9508 func_210298_b + m ()Ljava/lang/String; method_9539 getTranslationKey + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9577 spawnAsEntity + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2586;Lnet/minecraft/class_1799;)V method_9556 harvestBlock + m ()Lnet/minecraft/class_2689; method_9595 getStateContainer + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9587 func_220079_d + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;)Ljava/util/List; method_9562 getDrops + m (Lnet/minecraft/class_2248;)Z method_27839 matchesBlock + m (Lnet/minecraft/class_1761;Lnet/minecraft/class_2371;)V method_9578 fillItemGroup + m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_2248; method_9503 getBlockFromItem + m (Lnet/minecraft/class_3494;)Z method_9525 isIn + m (DDDDDD)Lnet/minecraft/class_265; method_9541 makeCuboidShape + m (Lnet/minecraft/class_265;Lnet/minecraft/class_2350;)Z method_9501 doesSideFillSquare + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;Lnet/minecraft/class_1297;Lnet/minecraft/class_1799;)V method_9511 spawnDrops + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_1297;)V method_9502 onLanded + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9504 fillWithRain + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1657;)V method_9576 onBlockHarvested + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)V method_9591 onEntityWalk + m ()Z method_9538 canSpawnInBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;)V method_9610 spawnDrops + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9596 func_220061_c + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;I)V method_9583 dropXpOnBlockBreak + m ()Lnet/minecraft/class_2680; method_9564 getDefaultState + m (Lnet/minecraft/class_2680;)I method_9507 getStateId + m ()F method_23350 getJumpFactor + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1922;Ljava/util/List;Lnet/minecraft/class_1836;)V method_9568 addInformation + m (Lnet/minecraft/class_2680;)Z method_9542 ticksRandomly + m ()F method_9520 getExplosionResistance + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;II)V method_9611 replaceBlockState + m ()F method_9499 getSlipperiness + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9585 onPlayerDestroy + m (Lnet/minecraft/class_2689$class_2690;)V method_9515 fillStateContainer + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_20044 hasEnoughSolidSide + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;)V method_9567 onBlockPlacedBy + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_9582 nudgeEntitiesWithNewState + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9544 func_220057_b + m (Lnet/minecraft/class_2248;)Z method_9581 cannotAttach + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9497 spawnDrops + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1927;)V method_9586 onExplosionDestroy + m (I)Lnet/minecraft/class_2680; method_9531 getStateById + m (Lnet/minecraft/class_2680;)V method_9590 setDefaultState + m ()Z method_9543 isVariableOpacity + m ()Ljava/lang/String; toString toString + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2498; method_9573 getSoundType + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_9510 getValidBlockForPosition + f Lnet/minecraft/class_2361; field_10651 BLOCK_STATE_IDS + f Lnet/minecraft/class_2689; field_10647 stateContainer + f Lnet/minecraft/class_1792; field_17562 item + f Lnet/minecraft/class_2680; field_10646 defaultState + f Lcom/google/common/cache/LoadingCache; field_19312 OPAQUE_CACHE + f Ljava/lang/ThreadLocal; field_10649 SHOULD_SIDE_RENDER_CACHE + f Ljava/lang/String; field_10642 translationKey + f Lorg/apache/logging/log4j/Logger; field_10638 LOGGER +c net/minecraft/class_2248$2 net/minecraft/block/Block$2 + m (I)V rehash rehash +c net/minecraft/class_2248$1 net/minecraft/block/Block$1 + m (Ljava/lang/Object;)Ljava/lang/Object; load load + m (Lnet/minecraft/class_265;)Ljava/lang/Boolean; method_20516 load +c net/minecraft/class_2248$class_2249 net/minecraft/block/Block$RenderSideCacheKey + m (Ljava/lang/Object;)Z equals equals + m ()I hashCode hashCode + f Lnet/minecraft/class_2680; field_10652 state + f Lnet/minecraft/class_2350; field_10653 side + f Lnet/minecraft/class_2680; field_10654 adjacentState +c net/minecraft/class_3710 net/minecraft/block/BlastFurnaceBlock +c net/minecraft/class_2256 net/minecraft/block/IGrowable + m (Lnet/minecraft/class_3218;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9652 grow + m (Lnet/minecraft/class_1937;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_9650 canUseBonemeal + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)Z method_9651 canGrow +c net/minecraft/class_2246 net/minecraft/block/Blocks + m (Lnet/minecraft/class_2680;)I method_26136 func_235454_j_ + m (Lnet/minecraft/class_2680;)I method_26134 func_235452_h_ + m (Lnet/minecraft/class_2680;)I method_26135 func_235453_i_ + m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_2506; method_26120 createStainedGlassFromColor + m (Lnet/minecraft/class_1767;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3620; method_26111 func_235424_a_ + m (Lnet/minecraft/class_2680;)I method_26139 func_235457_m_ + m ()Lnet/minecraft/class_2591; method_24165 func_235446_e_ + m (Lnet/minecraft/class_2680;)I method_26140 func_235458_n_ + m ()V method_26979 cacheBlockStates + m ()Lnet/minecraft/class_2975; method_24418 func_235438_c_ + m (Lnet/minecraft/class_2680;)I method_26137 func_235455_k_ + m ()Lnet/minecraft/class_2975; method_24419 func_235442_d_ + m (Lnet/minecraft/class_2680;)I method_26138 func_235456_l_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26122 isntSolid + m (Lnet/minecraft/class_2680;)I method_26121 func_235435_b_ + m (Lnet/minecraft/class_1767;Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_2480; method_26110 createShulkerBoxFromColorAndProperties + m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_2244; method_26109 createBedFromColor + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26125 func_235440_c_ + m (Lnet/minecraft/class_2680;)I method_26124 func_235439_c_ + m (Lnet/minecraft/class_3620;)Lnet/minecraft/class_2248; method_26115 createRotatableNetherBlock + m (Lnet/minecraft/class_2680;)I method_26104 func_235417_A_ + m (Lnet/minecraft/class_2680;)I method_26112 func_235425_a_ + m (Lnet/minecraft/class_2680;)I method_26105 func_235418_B_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_27091 func_235444_d_ + m (Lnet/minecraft/class_2680;)I method_26131 func_235449_f_ + m (Lnet/minecraft/class_2680;)I method_26133 func_235451_g_ + m (Lnet/minecraft/class_2680;)I method_26127 func_235443_d_ + m (I)Ljava/util/function/ToIntFunction; method_26107 getLightValueLit + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26113 needsPostProcessing + m (Lnet/minecraft/class_2680;)I method_26129 func_235447_e_ + m (Lnet/minecraft/class_2680;)I method_26151 func_235469_y_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_26132 func_235450_f_ + m (Lnet/minecraft/class_2680;)I method_26152 func_235470_z_ + m (Lnet/minecraft/class_2680;)I method_26149 func_235467_w_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_26128 func_235445_d_ + m (Lnet/minecraft/class_2680;)I method_26150 func_235468_x_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_26130 func_235448_e_ + m (Z)Lnet/minecraft/class_2665; method_26119 createPiston + m ()Lnet/minecraft/class_2397; method_26106 createLeavesBlock + m (Ljava/lang/String;Lnet/minecraft/class_2248;)Lnet/minecraft/class_2248; method_9492 register + m (Lnet/minecraft/class_3620;Lnet/minecraft/class_3620;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3620; method_26118 func_235431_a_ + m (Lnet/minecraft/class_2680;)I method_26143 func_235461_q_ + m (Lnet/minecraft/class_2680;)I method_26144 func_235462_r_ + m (ILnet/minecraft/class_2680;)I method_26108 func_235421_a_ + m (Lnet/minecraft/class_2680;)I method_26141 func_235459_o_ + m (Lnet/minecraft/class_2680;)I method_26142 func_235460_p_ + m (Lnet/minecraft/class_3620;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3620; method_26116 func_235429_a_ + m (Lnet/minecraft/class_2680;)I method_26147 func_235465_u_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Ljava/lang/Boolean; method_26114 neverAllowSpawn + m (Lnet/minecraft/class_2680;)I method_26148 func_235466_v_ + m (Lnet/minecraft/class_2680;)I method_26145 func_235463_s_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Ljava/lang/Boolean; method_26126 allowsSpawnOnLeaves + m (Lnet/minecraft/class_2680;)I method_26146 func_235464_t_ + m (Lnet/minecraft/class_3620;Lnet/minecraft/class_3620;)Lnet/minecraft/class_2465; method_26117 createLogBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Ljava/lang/Boolean; method_26123 alwaysAllowSpawn + f Lnet/minecraft/class_2248; field_10492 INFESTED_COBBLESTONE + f Lnet/minecraft/class_2248; field_16337 GRINDSTONE + f Lnet/minecraft/class_2248; field_10339 BRAIN_CORAL + f Lnet/minecraft/class_2248; field_10313 LARGE_FERN + f Lnet/minecraft/class_2248; field_10312 HOPPER + f Lnet/minecraft/class_2248; field_22121 CRIMSON_FUNGUS + f Lnet/minecraft/class_2248; field_10320 LIGHT_GRAY_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10267 GRAY_WALL_BANNER + f Lnet/minecraft/class_2248; field_10093 POLISHED_ANDESITE + f Lnet/minecraft/class_2248; field_10211 BAMBOO + f Lnet/minecraft/class_2248; field_10210 ORANGE_CONCRETE + f Lnet/minecraft/class_2248; field_10304 POTTED_JUNGLE_SAPLING + f Lnet/minecraft/class_2248; field_10431 OAK_LOG + f Lnet/minecraft/class_2248; field_22107 WARPED_WALL_SIGN + f Lnet/minecraft/class_2248; field_10064 END_STONE_BRICK_SLAB + f Lnet/minecraft/class_2248; field_10237 QUARTZ_SLAB + f Lnet/minecraft/class_2248; field_10623 DARK_PRISMARINE_SLAB + f Lnet/minecraft/class_2248; field_23875 CRACKED_POLISHED_BLACKSTONE_BRICKS + f Lnet/minecraft/class_2248; field_10023 BROWN_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10021 CHORUS_PLANT + f Lnet/minecraft/class_2248; field_16330 LECTERN + f Lnet/minecraft/class_2248; field_10134 BUBBLE_CORAL + f Lnet/minecraft/class_2248; field_22122 SHROOMLIGHT + f Lnet/minecraft/class_2248; field_10153 QUARTZ_BLOCK + f Lnet/minecraft/class_2248; field_10219 GRASS_BLOCK + f Lnet/minecraft/class_2248; field_10532 CYAN_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10604 LIGHT_GRAY_WALL_BANNER + f Lnet/minecraft/class_2248; field_10037 SPRUCE_LOG + f Lnet/minecraft/class_2248; field_10465 STRUCTURE_BLOCK + f Lnet/minecraft/class_2248; field_10262 SMOOTH_SANDSTONE_SLAB + f Lnet/minecraft/class_2248; field_10174 SEA_LANTERN + f Lnet/minecraft/class_2248; field_23876 CHISELED_POLISHED_BLACKSTONE + f Lnet/minecraft/class_2248; field_10529 GREEN_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10528 CHORUS_FLOWER + f Lnet/minecraft/class_2248; field_10404 PURPLE_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10403 DARK_OAK_DOOR + f Lnet/minecraft/class_2248; field_16336 CARTOGRAPHY_TABLE + f Lnet/minecraft/class_2248; field_10032 DEAD_HORN_CORAL + f Lnet/minecraft/class_2248; field_10227 ORANGE_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10554 OXEYE_DAISY + f Lnet/minecraft/class_2248; field_22506 STRIPPED_CRIMSON_HYPHAE + f Lnet/minecraft/class_2248; field_10346 POLISHED_DIORITE + f Lnet/minecraft/class_2248; field_10417 BIRCH_BUTTON + f Lnet/minecraft/class_2248; field_10552 CHISELED_STONE_BRICKS + f Lnet/minecraft/class_2248; field_10003 PEONY + f Lnet/minecraft/class_2248; field_10002 REDSTONE_BLOCK + f Lnet/minecraft/class_2248; field_10485 ENCHANTING_TABLE + f Lnet/minecraft/class_2248; field_10080 REDSTONE_ORE + f Lnet/minecraft/class_2248; field_10230 MAGENTA_BED + f Lnet/minecraft/class_2248; field_10502 CONDUIT + f Lnet/minecraft/class_2248; field_10501 BLACK_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_22105 WARPED_SIGN + f Lnet/minecraft/class_2248; field_10412 POLISHED_DIORITE_SLAB + f Lnet/minecraft/class_2248; field_10131 STONE_BRICK_SLAB + f Lnet/minecraft/class_2248; field_10389 PRISMARINE_SLAB + f Lnet/minecraft/class_2248; field_10193 LIGHT_BLUE_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10192 POTTED_SPRUCE_SAPLING + f Lnet/minecraft/class_2248; field_23873 POLISHED_BLACKSTONE + f Lnet/minecraft/class_2248; field_10418 COAL_ORE + f Lnet/minecraft/class_2248; field_10456 BLUE_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10455 END_ROD + f Lnet/minecraft/class_2248; field_10553 JUNGLE_BUTTON + f Lnet/minecraft/class_2248; field_10277 INFESTED_STONE + f Lnet/minecraft/class_2248; field_16331 FLETCHING_TABLE + f Lnet/minecraft/class_2248; field_10125 TUBE_CORAL + f Lnet/minecraft/class_2248; field_9995 CORNFLOWER + f Lnet/minecraft/class_2248; field_10214 TALL_GRASS + f Lnet/minecraft/class_2248; field_10213 NETHER_QUARTZ_ORE + f Lnet/minecraft/class_2248; field_22120 CRIMSON_NYLIUM + f Lnet/minecraft/class_2248; field_10140 GRAY_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10531 PINK_WALL_BANNER + f Lnet/minecraft/class_2248; field_10115 ANDESITE + f Lnet/minecraft/class_2248; field_10108 BAMBOO_SAPLING + f Lnet/minecraft/class_2248; field_10107 WHITE_CONCRETE + f Lnet/minecraft/class_2248; field_22106 CRIMSON_WALL_SIGN + f Lnet/minecraft/class_2248; field_10405 MOSSY_COBBLESTONE_SLAB + f Lnet/minecraft/class_2248; field_10523 REDSTONE_TORCH + f Lnet/minecraft/class_2248; field_23874 POLISHED_BLACKSTONE_BRICKS + f Lnet/minecraft/class_2248; field_10578 YELLOW_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10577 POTTED_BIRCH_SAPLING + f Lnet/minecraft/class_2248; field_23077 NETHER_GOLD_ORE + f Lnet/minecraft/class_2248; field_10390 NETHER_BRICK_SLAB + f Lnet/minecraft/class_2248; field_10236 PRISMARINE_BRICK_SLAB + f Lnet/minecraft/class_2248; field_10356 YELLOW_BED + f Lnet/minecraft/class_2248; field_23078 TWISTING_VINES + f Lnet/minecraft/class_2248; field_10520 PODZOL + f Lnet/minecraft/class_2248; field_10301 REDSTONE_WALL_TORCH + f Lnet/minecraft/class_2248; field_10548 LILY_OF_THE_VALLEY + f Lnet/minecraft/class_2248; field_10178 DARK_OAK_WOOD + f Lnet/minecraft/class_2248; field_10533 ACACIA_LOG + f Lnet/minecraft/class_2248; field_23879 POLISHED_BLACKSTONE_BRICK_WALL + f Lnet/minecraft/class_2248; field_10387 INFESTED_STONE_BRICKS + f Lnet/minecraft/class_2248; field_10494 STONE_BUTTON + f Lnet/minecraft/class_2248; field_10215 MAGENTA_WOOL + f Lnet/minecraft/class_2248; field_10445 COBBLESTONE + f Lnet/minecraft/class_2248; field_10180 LIME_BED + f Lnet/minecraft/class_2248; field_10564 POTTED_ACACIA_SAPLING + f Lnet/minecraft/class_2248; field_10251 BROWN_MUSHROOM + f Lnet/minecraft/class_2248; field_10250 STRIPPED_OAK_WOOD + f Lnet/minecraft/class_2248; field_10044 CHISELED_QUARTZ_BLOCK + f Lnet/minecraft/class_2248; field_10480 INFESTED_MOSSY_STONE_BRICKS + f Lnet/minecraft/class_2248; field_10411 SPRUCE_SIGN + f Lnet/minecraft/class_2248; field_16329 SMITHING_TABLE + f Lnet/minecraft/class_2248; field_10618 FIRE_CORAL + f Lnet/minecraft/class_2248; field_10566 DIRT + f Lnet/minecraft/class_2248; field_22123 WEEPING_VINES + f Lnet/minecraft/class_2248; field_10372 CYAN_WALL_BANNER + f Lnet/minecraft/class_2248; field_10586 POTTED_BAMBOO + f Lnet/minecraft/class_2248; field_10585 MAGENTA_CONCRETE + f Lnet/minecraft/class_2248; field_16540 JIGSAW + f Lnet/minecraft/class_2248; field_10601 SMOOTH_QUARTZ_SLAB + f Lnet/minecraft/class_2248; field_10511 BIRCH_LOG + f Lnet/minecraft/class_2248; field_23877 POLISHED_BLACKSTONE_BRICK_SLAB + f Lnet/minecraft/class_2248; field_10286 PURPUR_BLOCK + f Lnet/minecraft/class_2248; field_10253 COARSE_DIRT + f Lnet/minecraft/class_2248; field_10621 LIGHT_BLUE_BED + f Lnet/minecraft/class_2248; field_22124 WEEPING_VINES_PLANT + f Lnet/minecraft/class_2248; field_10242 LIGHT_BLUE_CONCRETE + f Lnet/minecraft/class_2248; field_10189 GRANITE_SLAB + f Lnet/minecraft/class_2248; field_10606 WITHER_ROSE + f Lnet/minecraft/class_2248; field_23878 POLISHED_BLACKSTONE_BRICK_STAIRS + f Lnet/minecraft/class_2248; field_10306 JUNGLE_LOG + f Lnet/minecraft/class_2248; field_10169 HORN_CORAL + f Lnet/minecraft/class_2248; field_22099 WARPED_STAIRS + f Lnet/minecraft/class_2248; field_10497 RED_NETHER_BRICK_STAIRS + f Lnet/minecraft/class_2248; field_10136 SMOOTH_STONE_SLAB + f Lnet/minecraft/class_2248; field_10135 PRISMARINE + f Lnet/minecraft/class_2248; field_22427 POTTED_WARPED_ROOTS + f Lnet/minecraft/class_2248; field_10526 GREEN_TERRACOTTA + f Lnet/minecraft/class_2248; field_10525 COMMAND_BLOCK + f Lnet/minecraft/class_2248; field_10164 LAVA + f Lnet/minecraft/class_2248; field_10145 YELLOW_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10144 ACACIA_FENCE + f Lnet/minecraft/class_2248; field_10316 NETHER_PORTAL + f Lnet/minecraft/class_2248; field_10226 ALLIUM + f Lnet/minecraft/class_2248; field_10376 SEAGRASS + f Lnet/minecraft/class_2248; field_22116 WARPED_ROOTS + f Lnet/minecraft/class_2248; field_10124 AIR + f Lnet/minecraft/class_2248; field_10381 COAL_BLOCK + f Lnet/minecraft/class_2248; field_10380 TRAPPED_CHEST + f Lnet/minecraft/class_2248; field_10402 MYCELIUM + f Lnet/minecraft/class_2248; field_10484 OAK_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_10407 ORANGE_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10202 WHITE_WALL_BANNER + f Lnet/minecraft/class_2248; field_10201 DIAMOND_BLOCK + f Lnet/minecraft/class_2248; field_9979 SANDSTONE + f Lnet/minecraft/class_2248; field_10186 BRAIN_CORAL_WALL_FAN + f Lnet/minecraft/class_2248; field_10078 CYAN_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10238 TALL_SEAGRASS + f Lnet/minecraft/class_2248; field_22100 CRIMSON_BUTTON + f Lnet/minecraft/class_2248; field_9994 POLISHED_ANDESITE_STAIRS + f Lnet/minecraft/class_2248; field_10102 SAND + f Lnet/minecraft/class_2248; field_10328 RED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10327 BEACON + f Lnet/minecraft/class_2248; field_10007 SANDSTONE_SLAB + f Lnet/minecraft/class_2248; field_10006 PRISMARINE_BRICKS + f Lnet/minecraft/class_2248; field_23261 LODESTONE + f Lnet/minecraft/class_2248; field_10133 LIME_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10132 DARK_OAK_FENCE + f Lnet/minecraft/class_2248; field_10018 POTTED_CACTUS + f Lnet/minecraft/class_2248; field_10608 ACACIA_TRAPDOOR + f Lnet/minecraft/class_2248; field_16492 SCAFFOLDING + f Lnet/minecraft/class_2248; field_10464 HORN_CORAL_BLOCK + f Lnet/minecraft/class_2248; field_10147 CARVED_PUMPKIN + f Lnet/minecraft/class_2248; field_10573 AZURE_BLUET + f Lnet/minecraft/class_2248; field_10225 PACKED_ICE + f Lnet/minecraft/class_2248; field_10224 LIGHT_WEIGHTED_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_22117 NETHER_SPROUTS + f Lnet/minecraft/class_2248; field_10063 MAGENTA_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10599 ORANGE_WALL_BANNER + f Lnet/minecraft/class_2248; field_10340 STONE + f Lnet/minecraft/class_2248; field_10447 BUBBLE_CORAL_WALL_FAN + f Lnet/minecraft/class_2248; field_10426 PURPLE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10588 LILY_PAD + f Lnet/minecraft/class_2248; field_10332 SPRUCE_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_9980 CRAFTING_TABLE + f Lnet/minecraft/class_2248; field_10292 CHISELED_SANDSTONE + f Lnet/minecraft/class_2248; field_10409 BLUE_TERRACOTTA + f Lnet/minecraft/class_2248; field_10408 BIRCH_STAIRS + f Lnet/minecraft/class_2248; field_10239 DEAD_HORN_CORAL_WALL_FAN + f Lnet/minecraft/class_2248; field_10220 GRAY_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10089 BRICK_STAIRS + f Lnet/minecraft/class_2248; field_10158 STONE_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_22097 WARPED_FENCE_GATE + f Lnet/minecraft/class_2248; field_10607 GRANITE_STAIRS + f Lnet/minecraft/class_2248; field_10500 DARK_OAK_SLAB + f Lnet/minecraft/class_2248; field_10499 BARRIER + f Lnet/minecraft/class_2248; field_22425 POTTED_WARPED_FUNGUS + f Lnet/minecraft/class_2248; field_22093 SOUL_WALL_TORCH + f Lnet/minecraft/class_2248; field_10449 POPPY + f Lnet/minecraft/class_2248; field_10300 MAGENTA_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10299 BIRCH_FENCE + f Lnet/minecraft/class_2248; field_10112 FERN + f Lnet/minecraft/class_2248; field_10001 END_STONE_BRICK_WALL + f Lnet/minecraft/class_2248; field_10000 BUBBLE_CORAL_BLOCK + f Lnet/minecraft/class_2248; field_10106 BLACK_CARPET + f Lnet/minecraft/class_2248; field_10105 CHIPPED_ANVIL + f Lnet/minecraft/class_2248; field_22114 WARPED_FUNGUS + f Lnet/minecraft/class_2248; field_10324 POTTED_BROWN_MUSHROOM + f Lnet/minecraft/class_2248; field_10486 BIRCH_TRAPDOOR + f Lnet/minecraft/class_2248; field_10603 SHULKER_BOX + f Lnet/minecraft/class_2248; field_10406 RED_BANNER + f Lnet/minecraft/class_2248; field_10091 REDSTONE_WIRE + f Lnet/minecraft/class_2248; field_10441 LAPIS_BLOCK + f Lnet/minecraft/class_2248; field_10123 BROWN_TERRACOTTA + f Lnet/minecraft/class_2248; field_10122 JUNGLE_STAIRS + f Lnet/minecraft/class_2248; field_22098 CRIMSON_STAIRS + f Lnet/minecraft/class_2248; field_10386 ANDESITE_STAIRS + f Lnet/minecraft/class_2248; field_10382 WATER + f Lnet/minecraft/class_2248; field_22426 POTTED_CRIMSON_ROOTS + f Lnet/minecraft/class_2248; field_10171 GLOWSTONE + f Lnet/minecraft/class_2248; field_10086 BLUE_ORCHID + f Lnet/minecraft/class_2248; field_10454 STONE_SLAB + f Lnet/minecraft/class_2248; field_10453 IRON_TRAPDOOR + f Lnet/minecraft/class_2248; field_10428 DEAD_BUSH + f Lnet/minecraft/class_2248; field_10321 LIGHT_BLUE_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10319 JUNGLE_FENCE + f Lnet/minecraft/class_2248; field_10517 DIORITE_WALL + f Lnet/minecraft/class_2248; field_10516 FIRE_CORAL_BLOCK + f Lnet/minecraft/class_2248; field_10487 POTTED_DEAD_BUSH + f Lnet/minecraft/class_2248; field_10017 JUNGLE_TRAPDOOR + f Lnet/minecraft/class_2248; field_10415 TERRACOTTA + f Lnet/minecraft/class_2248; field_10414 DAMAGED_ANVIL + f Lnet/minecraft/class_2248; field_22115 WARPED_WART_BLOCK + f Lnet/minecraft/class_2248; field_10199 WHITE_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10062 BLACK_BANNER + f Lnet/minecraft/class_2248; field_10392 STONE_BRICK_STAIRS + f Lnet/minecraft/class_2248; field_9973 IRON_DOOR + f Lnet/minecraft/class_2248; field_10584 TUBE_CORAL_WALL_FAN + f Lnet/minecraft/class_2248; field_10052 LIGHT_GRAY_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10442 DIAMOND_ORE + f Lnet/minecraft/class_2248; field_10200 DISPENSER + f Lnet/minecraft/class_2248; field_10351 COBBLESTONE_SLAB + f Lnet/minecraft/class_2248; field_10190 PRISMARINE_BRICK_STAIRS + f Lnet/minecraft/class_2248; field_10450 REPEATER + f Lnet/minecraft/class_2248; field_10156 WHITE_TULIP + f Lnet/minecraft/class_2248; field_23871 BLACKSTONE_WALL + f Lnet/minecraft/class_2248; field_10628 LIGHT_GRAY_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10627 JUNGLE_DOOR + f Lnet/minecraft/class_2248; field_10446 WHITE_WOOL + f Lnet/minecraft/class_2248; field_16334 SMOKER + f Lnet/minecraft/class_2248; field_10296 DEAD_BUBBLE_CORAL + f Lnet/minecraft/class_2248; field_10378 LILAC + f Lnet/minecraft/class_2248; field_10377 COMPARATOR + f Lnet/minecraft/class_2248; field_22119 STRIPPED_CRIMSON_STEM + f Lnet/minecraft/class_2248; field_10057 OAK_BUTTON + f Lnet/minecraft/class_2248; field_10065 MOSSY_STONE_BRICKS + f Lnet/minecraft/class_2248; field_10275 LIME_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10139 YELLOW_WALL_BANNER + f Lnet/minecraft/class_2248; field_10476 SEA_PICKLE + f Lnet/minecraft/class_2248; field_10475 GREEN_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10181 FURNACE + f Lnet/minecraft/class_2248; field_10120 WHITE_BED + f Lnet/minecraft/class_2248; field_22103 WARPED_DOOR + f Lnet/minecraft/class_2248; field_10283 SMOOTH_RED_SANDSTONE_SLAB + f Lnet/minecraft/class_2248; field_10496 ORANGE_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10495 FLOWER_POT + f Lnet/minecraft/class_2248; field_10571 GOLD_ORE + f Lnet/minecraft/class_2248; field_10159 NETHER_BRICK_STAIRS + f Lnet/minecraft/class_2248; field_10397 ACACIA_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_10087 WHITE_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10315 PINK_TULIP + f Lnet/minecraft/class_2248; field_10095 ORANGE_WOOL + f Lnet/minecraft/class_2248; field_10233 CYAN_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10232 ACACIA_DOOR + f Lnet/minecraft/class_2248; field_16333 BLAST_FURNACE + f Lnet/minecraft/class_2248; field_10579 DEAD_FIRE_CORAL + f Lnet/minecraft/class_2248; field_10508 DIORITE + f Lnet/minecraft/class_2248; field_10430 ROSE_BUSH + f Lnet/minecraft/class_2248; field_10429 DAYLIGHT_DETECTOR + f Lnet/minecraft/class_2248; field_10066 SPRUCE_BUTTON + f Lnet/minecraft/class_2248; field_10416 CRACKED_STONE_BRICKS + f Lnet/minecraft/class_2248; field_22505 CRIMSON_HYPHAE + f Lnet/minecraft/class_2248; field_10051 PINK_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10318 LIME_WALL_BANNER + f Lnet/minecraft/class_2248; field_9974 NETHER_WART + f Lnet/minecraft/class_2248; field_10470 DARK_OAK_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_10384 BLUE_ICE + f Lnet/minecraft/class_2248; field_10383 RED_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10121 OAK_SIGN + f Lnet/minecraft/class_2248; field_10410 ORANGE_BED + f Lnet/minecraft/class_2248; field_22104 CRIMSON_SIGN + f Lnet/minecraft/class_2248; field_10024 MOSSY_STONE_BRICK_SLAB + f Lnet/minecraft/class_2248; field_10191 BRICK_SLAB + f Lnet/minecraft/class_2248; field_10130 DARK_PRISMARINE_STAIRS + f Lnet/minecraft/class_2248; field_23872 BLACKSTONE_SLAB + f Lnet/minecraft/class_2248; field_10212 IRON_ORE + f Lnet/minecraft/class_2248; field_10469 MAGENTA_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10468 POTTED_OAK_SAPLING + f Lnet/minecraft/class_2248; field_23869 BLACKSTONE + f Lnet/minecraft/class_2248; field_10560 PISTON + f Lnet/minecraft/class_2248; field_10534 RED_SAND + f Lnet/minecraft/class_2248; field_18890 CUT_SANDSTONE_SLAB + f Lnet/minecraft/class_2248; field_10297 DARK_PRISMARINE + f Lnet/minecraft/class_2248; field_10609 CARROTS + f Lnet/minecraft/class_2248; field_10246 DARK_OAK_TRAPDOOR + f Lnet/minecraft/class_2248; field_10522 PINK_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10521 SPRUCE_DOOR + f Lnet/minecraft/class_2248; field_10009 JACK_O_LANTERN + f Lnet/minecraft/class_2248; field_10270 RED_TULIP + f Lnet/minecraft/class_2248; field_10083 LOOM + f Lnet/minecraft/class_2248; field_10082 DEAD_TUBE_CORAL + f Lnet/minecraft/class_2248; field_10583 SUNFLOWER + f Lnet/minecraft/class_2248; field_10582 HEAVY_WEIGHTED_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_10293 WHEAT + f Lnet/minecraft/class_2248; field_10361 CUT_SANDSTONE + f Lnet/minecraft/class_2248; field_22118 CRIMSON_STEM + f Lnet/minecraft/class_2248; field_10474 GRANITE + f Lnet/minecraft/class_2248; field_10203 LIGHT_BLUE_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10274 MAGENTA_WALL_BANNER + f Lnet/minecraft/class_2248; field_10498 FIRE_CORAL_WALL_FAN + f Lnet/minecraft/class_2248; field_10550 BLUE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10626 BLACK_TERRACOTTA + f Lnet/minecraft/class_2248; field_10625 COBBLESTONE_WALL + f Lnet/minecraft/class_2248; field_22101 WARPED_BUTTON + f Lnet/minecraft/class_2248; field_10216 DIORITE_STAIRS + f Lnet/minecraft/class_2248; field_10266 NETHER_BRICKS + f Lnet/minecraft/class_2248; field_10592 BIRCH_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_10298 PETRIFIED_OAK_SLAB + f Lnet/minecraft/class_2248; field_10350 PRISMARINE_STAIRS + f Lnet/minecraft/class_2248; field_23870 BLACKSTONE_STAIRS + f Lnet/minecraft/class_2248; field_10353 GRAY_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10352 BIRCH_DOOR + f Lnet/minecraft/class_2248; field_10379 PISTON_HEAD + f Lnet/minecraft/class_2248; field_16328 BARREL + f Lnet/minecraft/class_2248; field_10572 DEAD_BRAIN_CORAL + f Lnet/minecraft/class_2248; field_10247 POTATOES + f Lnet/minecraft/class_2248; field_10056 STONE_BRICKS + f Lnet/minecraft/class_2248; field_10183 CAKE + f Lnet/minecraft/class_2248; field_10048 ORANGE_TULIP + f Lnet/minecraft/class_2248; field_10362 FARMLAND + f Lnet/minecraft/class_2248; field_10179 NOTE_BLOCK + f Lnet/minecraft/class_2248; field_10289 POLISHED_GRANITE + f Lnet/minecraft/class_2248; field_10600 YELLOW_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10050 LIGHT_BLUE_WALL_BANNER + f Lnet/minecraft/class_2248; field_9991 WHITE_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_9990 MOSSY_COBBLESTONE_WALL + f Lnet/minecraft/class_2248; field_9976 HORN_CORAL_WALL_FAN + f Lnet/minecraft/class_2248; field_10004 BROWN_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10255 GRAVEL + f Lnet/minecraft/class_2248; field_10364 NETHER_BRICK_FENCE + f Lnet/minecraft/class_2248; field_10026 JUNGLE_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_22102 CRIMSON_DOOR + f Lnet/minecraft/class_2248; field_10329 POLISHED_GRANITE_SLAB + f Lnet/minecraft/class_2248; field_10099 WALL_TORCH + f Lnet/minecraft/class_2248; field_10098 ACACIA_LEAVES + f Lnet/minecraft/class_2248; field_10433 CYAN_CARPET + f Lnet/minecraft/class_2248; field_10208 PLAYER_WALL_HEAD + f Lnet/minecraft/class_2248; field_10303 JUNGLE_WOOD + f Lnet/minecraft/class_2248; field_10092 MAGMA_BLOCK + f Lnet/minecraft/class_2248; field_9985 LIGHT_GRAY_BANNER + f Lnet/minecraft/class_2248; field_10551 FIRE_CORAL_FAN + f Lnet/minecraft/class_2248; field_10280 ORANGE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10014 LIME_TERRACOTTA + f Lnet/minecraft/class_2248; field_10013 EMERALD_ORE + f Lnet/minecraft/class_2248; field_22131 WARPED_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_10310 POLISHED_DIORITE_STAIRS + f Lnet/minecraft/class_2248; field_10331 ATTACHED_PUMPKIN_STEM + f Lnet/minecraft/class_2248; field_10088 SPRUCE_WALL_SIGN + f Lnet/minecraft/class_2248; field_10119 OAK_SLAB + f Lnet/minecraft/class_2248; field_10118 RED_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_22108 NETHERITE_BLOCK + f Lnet/minecraft/class_2248; field_10114 SOUL_SAND + f Lnet/minecraft/class_2248; field_10170 GREEN_WOOL + f Lnet/minecraft/class_2248; field_10367 GREEN_CONCRETE + f Lnet/minecraft/class_2248; field_10513 BIRCH_FENCE_GATE + f Lnet/minecraft/class_2248; field_10425 POWERED_RAIL + f Lnet/minecraft/class_2248; field_10385 ACACIA_SAPLING + f Lnet/minecraft/class_2248; field_10072 GRANITE_WALL + f Lnet/minecraft/class_2248; field_10264 DEAD_BRAIN_CORAL_BLOCK + f Lnet/minecraft/class_2248; field_23867 CRACKED_NETHER_BRICKS + f Lnet/minecraft/class_2248; field_16999 SWEET_BERRY_BUSH + f Lnet/minecraft/class_2248; field_10061 POTTED_PINK_TULIP + f Lnet/minecraft/class_2248; field_10073 BROWN_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10036 FIRE + f Lnet/minecraft/class_2248; field_10035 DARK_OAK_LEAVES + f Lnet/minecraft/class_2248; field_10541 NETHER_WART_BLOCK + f Lnet/minecraft/class_2248; field_10165 CYAN_BANNER + f Lnet/minecraft/class_2248; field_10005 HORN_CORAL_FAN + f Lnet/minecraft/class_2248; field_10538 MAGENTA_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10444 PINK_TERRACOTTA + f Lnet/minecraft/class_2248; field_10443 ENDER_CHEST + f Lnet/minecraft/class_2248; field_10150 ATTACHED_MELON_STEM + f Lnet/minecraft/class_2248; field_10391 BIRCH_WALL_SIGN + f Lnet/minecraft/class_2248; field_22132 CRIMSON_FENCE + f Lnet/minecraft/class_2248; field_10207 MOSSY_COBBLESTONE_STAIRS + f Lnet/minecraft/class_2248; field_22090 SOUL_SOIL + f Lnet/minecraft/class_2248; field_10314 RED_WOOL + f Lnet/minecraft/class_2248; field_10071 SPRUCE_SLAB + f Lnet/minecraft/class_2248; field_10070 BLACK_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10160 DARK_OAK_SAPLING + f Lnet/minecraft/class_2248; field_10025 DETECTOR_RAIL + f Lnet/minecraft/class_2248; field_10058 RED_CONCRETE + f Lnet/minecraft/class_2248; field_10041 JUNGLE_FENCE_GATE + f Lnet/minecraft/class_2248; field_10252 STONE_BRICK_WALL + f Lnet/minecraft/class_2248; field_10396 DEAD_BUBBLE_CORAL_BLOCK + f Lnet/minecraft/class_2248; field_9999 ACACIA_WOOD + f Lnet/minecraft/class_2248; field_10510 PURPLE_CARPET + f Lnet/minecraft/class_2248; field_10042 CREEPER_HEAD + f Lnet/minecraft/class_2248; field_23868 QUARTZ_BRICKS + f Lnet/minecraft/class_2248; field_22111 WARPED_STEM + f Lnet/minecraft/class_2248; field_10074 POTTED_OXEYE_DAISY + f Lnet/minecraft/class_2248; field_10357 GREEN_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10591 GRAY_CARPET + f Lnet/minecraft/class_2248; field_10581 ZOMBIE_WALL_HEAD + f Lnet/minecraft/class_2248; field_23865 POLISHED_BLACKSTONE_WALL + f Lnet/minecraft/class_2248; field_17350 CAMPFIRE + f Lnet/minecraft/class_2248; field_10395 CHAIN_COMMAND_BLOCK + f Lnet/minecraft/class_2248; field_10612 PINK_BANNER + f Lnet/minecraft/class_2248; field_10155 SPRUCE_WOOD + f Lnet/minecraft/class_2248; field_10285 GLASS_PANE + f Lnet/minecraft/class_2248; field_10596 COBBLESTONE_STAIRS + f Lnet/minecraft/class_2248; field_10540 OBSIDIAN + f Lnet/minecraft/class_2248; field_10539 BIRCH_LEAVES + f Lnet/minecraft/class_2248; field_10079 BRAIN_CORAL_FAN + f Lnet/minecraft/class_2248; field_10371 BLACK_SHULKER_BOX + f Lnet/minecraft/class_2248; field_21211 HONEY_BLOCK + f Lnet/minecraft/class_2248; field_10575 BIRCH_SAPLING + f Lnet/minecraft/class_2248; field_10069 RED_BED + f Lnet/minecraft/class_2248; field_10143 YELLOW_TERRACOTTA + f Lnet/minecraft/class_2248; field_10142 SANDSTONE_STAIRS + f Lnet/minecraft/class_2248; field_10518 CUT_RED_SANDSTONE + f Lnet/minecraft/class_2248; field_10163 BROWN_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10011 BLUE_CONCRETE + f Lnet/minecraft/class_2248; field_10483 SMOOTH_RED_SANDSTONE + f Lnet/minecraft/class_2248; field_10249 POTTED_ORANGE_TULIP + f Lnet/minecraft/class_2248; field_10399 PURPLE_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10413 RED_SANDSTONE_WALL + f Lnet/minecraft/class_2248; field_10195 TURTLE_EGG + f Lnet/minecraft/class_2248; field_10261 PUMPKIN + f Lnet/minecraft/class_2248; field_10514 BLUE_WOOL + f Lnet/minecraft/class_2248; field_10209 LIGHT_GRAY_CARPET + f Lnet/minecraft/class_2248; field_10432 PLAYER_HEAD + f Lnet/minecraft/class_2248; field_23866 CHISELED_NETHER_BRICKS + f Lnet/minecraft/class_2248; field_23860 SOUL_CAMPFIRE + f Lnet/minecraft/class_2248; field_10336 TORCH + f Lnet/minecraft/class_2248; field_10335 JUNGLE_LEAVES + f Lnet/minecraft/class_2248; field_10110 FROSTED_ICE + f Lnet/minecraft/class_2248; field_10185 GRAY_BANNER + f Lnet/minecraft/class_2248; field_10307 BIRCH_WOOD + f Lnet/minecraft/class_2248; field_10427 BUBBLE_CORAL_FAN + f Lnet/minecraft/class_2248; field_10595 WHITE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_22130 CRIMSON_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_10173 MOSSY_STONE_BRICK_STAIRS + f Lnet/minecraft/class_2248; field_10545 MELON + f Lnet/minecraft/class_2248; field_10187 OAK_WALL_SIGN + f Lnet/minecraft/class_2248; field_10461 BLACK_BED + f Lnet/minecraft/class_2248; field_10420 RED_SANDSTONE_STAIRS + f Lnet/minecraft/class_2248; field_10419 GREEN_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_21212 HONEYCOMB_BLOCK + f Lnet/minecraft/class_2248; field_10439 BROWN_CONCRETE + f Lnet/minecraft/class_2248; field_10291 SPRUCE_FENCE_GATE + f Lnet/minecraft/class_2248; field_10276 JUNGLE_SAPLING + f Lnet/minecraft/class_2248; field_10400 POTTED_WHITE_TULIP + f Lnet/minecraft/class_2248; field_10060 BLUE_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10515 NETHERRACK + f Lnet/minecraft/class_2248; field_10113 BROWN_WOOL + f Lnet/minecraft/class_2248; field_10059 MOSSY_STONE_BRICK_WALL + f Lnet/minecraft/class_2248; field_10614 DEAD_TUBE_CORAL_BLOCK + f Lnet/minecraft/class_2248; field_10597 VINE + f Lnet/minecraft/class_2248; field_10265 DARK_OAK_WALL_SIGN + f Lnet/minecraft/class_2248; field_10094 DEAD_BUBBLE_CORAL_WALL_FAN + f Lnet/minecraft/class_2248; field_10046 LIME_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_22095 WARPED_TRAPDOOR + f Lnet/minecraft/class_2248; field_10549 SMOOTH_SANDSTONE_STAIRS + f Lnet/minecraft/class_2248; field_10343 COBWEB + f Lnet/minecraft/class_2248; field_10235 CYAN_TERRACOTTA + f Lnet/minecraft/class_2248; field_10234 EMERALD_BLOCK + f Lnet/minecraft/class_2248; field_10617 JUNGLE_SLAB + f Lnet/minecraft/class_2248; field_10616 DARK_OAK_STAIRS + f Lnet/minecraft/class_2248; field_23152 RESPAWN_ANCHOR + f Lnet/minecraft/class_2248; field_9998 POTTED_WITHER_ROSE + f Lnet/minecraft/class_2248; field_10137 OAK_TRAPDOOR + f Lnet/minecraft/class_2248; field_10022 ORANGE_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10020 SPRUCE_FENCE + f Lnet/minecraft/class_2248; field_22092 SOUL_TORCH + f Lnet/minecraft/class_2248; field_10182 DANDELION + f Lnet/minecraft/class_2248; field_10311 RED_NETHER_BRICK_WALL + f Lnet/minecraft/class_2248; field_10309 TUBE_CORAL_BLOCK + f Lnet/minecraft/class_2248; field_10338 GREEN_CARPET + f Lnet/minecraft/class_2248; field_10472 DRAGON_WALL_HEAD + f Lnet/minecraft/class_2248; field_22504 STRIPPED_WARPED_HYPHAE + f Lnet/minecraft/class_2248; field_10563 OAK_STAIRS + f Lnet/minecraft/class_2248; field_10033 GLASS + f Lnet/minecraft/class_2248; field_10369 STRUCTURE_VOID + f Lnet/minecraft/class_2248; field_10602 BROWN_BANNER + f Lnet/minecraft/class_2248; field_10557 DEAD_FIRE_CORAL_WALL_FAN + f Lnet/minecraft/class_2248; field_10567 PINK_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_10570 PURPLE_TERRACOTTA + f Lnet/minecraft/class_2248; field_10569 SPRUCE_STAIRS + f Lnet/minecraft/class_2248; field_22096 CRIMSON_FENCE_GATE + f Lnet/minecraft/class_2248; field_10245 SMOOTH_QUARTZ_STAIRS + f Lnet/minecraft/class_2248; field_10188 OAK_FENCE_GATE + f Lnet/minecraft/class_2248; field_10363 LEVER + f Lnet/minecraft/class_2248; field_10031 ACACIA_SLAB + f Lnet/minecraft/class_2248; field_10030 SLIME_BLOCK + f Lnet/minecraft/class_2248; field_10479 GRASS + f Lnet/minecraft/class_2248; field_22424 POTTED_CRIMSON_FUNGUS + f Lnet/minecraft/class_2248; field_10138 POTTED_RED_MUSHROOM + f Lnet/minecraft/class_2248; field_10323 SPRUCE_TRAPDOOR + f Lnet/minecraft/class_2248; field_10630 SANDSTONE_WALL + f Lnet/minecraft/class_2248; field_10629 BRAIN_CORAL_BLOCK + f Lnet/minecraft/class_2248; field_22113 WARPED_NYLIUM + f Lnet/minecraft/class_2248; field_10034 CHEST + f Lnet/minecraft/class_2248; field_10090 LAPIS_ORE + f Lnet/minecraft/class_2248; field_10536 RED_CARPET + f Lnet/minecraft/class_2248; field_10535 ANVIL + f Lnet/minecraft/class_2248; field_10282 OBSERVER + f Lnet/minecraft/class_2248; field_10198 GREEN_BANNER + f Lnet/minecraft/class_2248; field_9986 RED_NETHER_BRICKS + f Lnet/minecraft/class_2248; field_10368 PURPLE_BANNER + f Lnet/minecraft/class_2248; field_9984 PUMPKIN_STEM + f Lnet/minecraft/class_2248; field_10401 ACACIA_WALL_SIGN + f Lnet/minecraft/class_2248; field_10347 DEAD_TUBE_CORAL_WALL_FAN + f Lnet/minecraft/class_2248; field_10345 LIGHT_BLUE_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_22089 SOUL_FIRE + f Lnet/minecraft/class_2248; field_10258 SPONGE + f Lnet/minecraft/class_2248; field_22133 WARPED_FENCE + f Lnet/minecraft/class_2248; field_10012 END_STONE_BRICK_STAIRS + f Lnet/minecraft/class_2248; field_22109 ANCIENT_DEBRIS + f Lnet/minecraft/class_2248; field_10349 GRAY_TERRACOTTA + f Lnet/minecraft/class_2248; field_10348 TRIPWIRE_HOOK + f Lnet/minecraft/class_2248; field_22091 BASALT + f Lnet/minecraft/class_2248; field_10146 BLACK_WOOL + f Lnet/minecraft/class_2248; field_10458 BLACK_CONCRETE + f Lnet/minecraft/class_2248; field_10457 ACACIA_FENCE_GATE + f Lnet/minecraft/class_2248; field_10127 NETHER_BRICK_WALL + f Lnet/minecraft/class_2248; field_10111 DEAD_FIRE_CORAL_BLOCK + f Lnet/minecraft/class_2248; field_10358 POTTED_CORNFLOWER + f Lnet/minecraft/class_2248; field_10272 RED_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10043 BLUE_CARPET + f Lnet/minecraft/class_2248; field_10509 CREEPER_WALL_HEAD + f Lnet/minecraft/class_2248; field_22112 STRIPPED_WARPED_STEM + f Lnet/minecraft/class_2248; field_10168 MELON_STEM + f Lnet/minecraft/class_2248; field_10587 JUNGLE_WALL_SIGN + f Lnet/minecraft/class_2248; field_10166 BONE_BLOCK + f Lnet/minecraft/class_2248; field_10281 BLUE_BANNER + f Lnet/minecraft/class_2248; field_10260 SPAWNER + f Lnet/minecraft/class_2248; field_10562 WET_SPONGE + f Lnet/minecraft/class_2248; field_10116 DEAD_BRAIN_CORAL_WALL_FAN + f Lnet/minecraft/class_2248; field_10096 YELLOW_GLAZED_TERRACOTTA + f Lnet/minecraft/class_2248; field_9987 BEDROCK + f Lnet/minecraft/class_2248; field_22094 CRIMSON_TRAPDOOR + f Lnet/minecraft/class_2248; field_10440 STONE_STAIRS + f Lnet/minecraft/class_2248; field_10615 STICKY_PISTON + f Lnet/minecraft/class_2248; field_10257 BIRCH_SLAB + f Lnet/minecraft/class_2248; field_10256 ACACIA_STAIRS + f Lnet/minecraft/class_2248; field_22423 CRYING_OBSIDIAN + f Lnet/minecraft/class_2248; field_10590 LIGHT_GRAY_TERRACOTTA + f Lnet/minecraft/class_2248; field_10589 TRIPWIRE + f Lnet/minecraft/class_2248; field_10197 WHITE_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10196 DARK_OAK_FENCE_GATE + f Lnet/minecraft/class_2248; field_10273 POTTED_LILY_OF_THE_VALLEY + f Lnet/minecraft/class_2248; field_9997 BLACK_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10489 ANDESITE_WALL + f Lnet/minecraft/class_2248; field_10488 DEAD_HORN_CORAL_BLOCK + f Lnet/minecraft/class_2248; field_23151 POLISHED_BASALT + f Lnet/minecraft/class_2248; field_10008 MOVING_PISTON + f Lnet/minecraft/class_2248; field_10473 BROWN_CARPET + f Lnet/minecraft/class_2248; field_10337 DRAGON_HEAD + f Lnet/minecraft/class_2248; field_22503 WARPED_HYPHAE + f Lnet/minecraft/class_2248; field_10421 LIME_CONCRETE + f Lnet/minecraft/class_2248; field_10624 RED_SANDSTONE_SLAB + f Lnet/minecraft/class_2248; field_10354 POTTED_DANDELION + f Lnet/minecraft/class_2248; field_10049 YELLOW_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10016 ANDESITE_SLAB + f Lnet/minecraft/class_2248; field_10491 SNOW_BLOCK + f Lnet/minecraft/class_2248; field_10028 LIME_WOOL + f Lnet/minecraft/class_2248; field_10366 STRIPPED_BIRCH_LOG + f Lnet/minecraft/class_2248; field_9977 ORANGE_CARPET + f Lnet/minecraft/class_2248; field_10493 DARK_OAK_BUTTON + f Lnet/minecraft/class_2248; field_10097 DEAD_BRAIN_CORAL_FAN + f Lnet/minecraft/class_2248; field_10268 PURPLE_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10580 BROWN_MUSHROOM_BLOCK + f Lnet/minecraft/class_2248; field_10544 JUNGLE_SIGN + f Lnet/minecraft/class_2248; field_10085 IRON_BLOCK + f Lnet/minecraft/class_2248; field_10084 STRIPPED_JUNGLE_WOOD + f Lnet/minecraft/class_2248; field_10326 LIGHT_GRAY_BED + f Lnet/minecraft/class_2248; field_10148 BIRCH_PLANKS + f Lnet/minecraft/class_2248; field_23079 TWISTING_VINES_PLANT + f Lnet/minecraft/class_2248; field_10546 ACTIVATOR_RAIL + f Lnet/minecraft/class_2248; field_10027 END_PORTAL + f Lnet/minecraft/class_2248; field_10370 BROWN_WALL_BANNER + f Lnet/minecraft/class_2248; field_10565 PINK_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10151 POTTED_POPPY + f Lnet/minecraft/class_2248; field_10157 LIME_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10434 PINK_CONCRETE + f Lnet/minecraft/class_2248; field_18891 CUT_RED_SANDSTONE_SLAB + f Lnet/minecraft/class_2248; field_10029 CACTUS + f Lnet/minecraft/class_2248; field_10459 PINK_WOOL + f Lnet/minecraft/class_2248; field_10478 RED_NETHER_BRICK_SLAB + f Lnet/minecraft/class_2248; field_10287 RED_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_10482 MAGENTA_CARPET + f Lnet/minecraft/class_2248; field_10481 SKELETON_SKULL + f Lnet/minecraft/class_2248; field_23880 GILDED_BLACKSTONE + f Lnet/minecraft/class_2248; field_10462 END_STONE_BRICKS + f Lnet/minecraft/class_2248; field_10045 ORANGE_BANNER + f Lnet/minecraft/class_2248; field_10254 STRIPPED_JUNGLE_LOG + f Lnet/minecraft/class_2248; field_10047 DEAD_BUBBLE_CORAL_FAN + f Lnet/minecraft/class_2248; field_10605 BLUE_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10228 DROPPER + f Lnet/minecraft/class_2248; field_10398 END_PORTAL_FRAME + f Lnet/minecraft/class_2248; field_22125 CRIMSON_ROOTS + f Lnet/minecraft/class_2248; field_10243 VOID_AIR + f Lnet/minecraft/class_2248; field_10240 RED_MUSHROOM_BLOCK + f Lnet/minecraft/class_2248; field_10330 DARK_OAK_SIGN + f Lnet/minecraft/class_2248; field_10334 JUNGLE_PLANKS + f Lnet/minecraft/class_2248; field_10109 CYAN_BED + f Lnet/minecraft/class_2248; field_10594 GREEN_WALL_BANNER + f Lnet/minecraft/class_2248; field_10077 GRAY_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10477 SNOW + f Lnet/minecraft/class_2248; field_10294 LIGHT_BLUE_WOOL + f Lnet/minecraft/class_2248; field_10054 PURPLE_WALL_BANNER + f Lnet/minecraft/class_2248; field_10161 OAK_PLANKS + f Lnet/minecraft/class_2248; field_10610 PINK_BED + f Lnet/minecraft/class_2248; field_10010 DARK_OAK_LOG + f Lnet/minecraft/class_2248; field_10359 HAY_BLOCK + f Lnet/minecraft/class_2248; field_10076 POTTED_DARK_OAK_SAPLING + f Lnet/minecraft/class_2248; field_10574 MAGENTA_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10505 PURPUR_PILLAR + f Lnet/minecraft/class_2248; field_10100 INFESTED_CRACKED_STONE_BRICKS + f Lnet/minecraft/class_2248; field_10231 BIRCH_SIGN + f Lnet/minecraft/class_2248; field_10559 RED_MUSHROOM + f Lnet/minecraft/class_2248; field_10558 STRIPPED_SPRUCE_WOOD + f Lnet/minecraft/class_2248; field_10437 QUARTZ_PILLAR + f Lnet/minecraft/class_2248; field_10333 BREWING_STAND + f Lnet/minecraft/class_2248; field_10542 YELLOW_CONCRETE + f Lnet/minecraft/class_2248; field_10295 ICE + f Lnet/minecraft/class_2248; field_10490 YELLOW_WOOL + f Lnet/minecraft/class_2248; field_10141 GRAY_BED + f Lnet/minecraft/class_2248; field_10436 STRIPPED_SPRUCE_LOG + f Lnet/minecraft/class_2248; field_10128 POTTED_FERN + f Lnet/minecraft/class_2248; field_10271 LIGHT_BLUE_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10466 WHITE_CARPET + f Lnet/minecraft/class_2248; field_10278 ACACIA_BUTTON + f Lnet/minecraft/class_2248; field_10176 INFESTED_CHISELED_STONE_BRICKS + f Lnet/minecraft/class_2248; field_10284 ACACIA_SIGN + f Lnet/minecraft/class_2248; field_9992 PURPUR_STAIRS + f Lnet/minecraft/class_2248; field_10154 WHITE_BANNER + f Lnet/minecraft/class_2248; field_10205 GOLD_BLOCK + f Lnet/minecraft/class_2248; field_10204 STRIPPED_BIRCH_WOOD + f Lnet/minecraft/class_2248; field_10448 DEAD_TUBE_CORAL_FAN + f Lnet/minecraft/class_2248; field_9975 SPRUCE_PLANKS + f Lnet/minecraft/class_2248; field_10067 BLUE_WALL_BANNER + f Lnet/minecraft/class_2248; field_10305 LIME_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10451 QUARTZ_STAIRS + f Lnet/minecraft/class_2248; field_10593 CAULDRON + f Lnet/minecraft/class_2248; field_10269 BRICK_WALL + f Lnet/minecraft/class_2248; field_10463 KELP_PLANT + f Lnet/minecraft/class_2248; field_10519 STRIPPED_OAK_LOG + f Lnet/minecraft/class_2248; field_10040 LIME_CARPET + f Lnet/minecraft/class_2248; field_10101 WITHER_SKELETON_WALL_SKULL + f Lnet/minecraft/class_2248; field_10365 POTTED_AZURE_BLUET + f Lnet/minecraft/class_2248; field_9996 LIGHT_GRAY_STAINED_GLASS + f Lnet/minecraft/class_2248; field_23863 POLISHED_BLACKSTONE_PRESSURE_PLATE + f Lnet/minecraft/class_2248; field_16541 LANTERN + f Lnet/minecraft/class_2248; field_10613 END_GATEWAY + f Lnet/minecraft/class_2248; field_10547 YELLOW_BANNER + f Lnet/minecraft/class_2248; field_10221 DEAD_HORN_CORAL_FAN + f Lnet/minecraft/class_2248; field_10055 GREEN_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10504 BOOKSHELF + f Lnet/minecraft/class_2248; field_10503 OAK_LEAVES + f Lnet/minecraft/class_2248; field_22128 CRIMSON_SLAB + f Lnet/minecraft/class_2248; field_10435 POLISHED_GRANITE_STAIRS + f Lnet/minecraft/class_2248; field_10344 RED_SANDSTONE + f Lnet/minecraft/class_2248; field_10152 PURPLE_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_20421 BEE_NEST + f Lnet/minecraft/class_2248; field_10015 MAGENTA_TERRACOTTA + f Lnet/minecraft/class_2248; field_10524 REDSTONE_LAMP + f Lnet/minecraft/class_2248; field_10223 JUKEBOX + f Lnet/minecraft/class_2248; field_10619 CYAN_WOOL + f Lnet/minecraft/class_2248; field_10288 BROWN_BED + f Lnet/minecraft/class_2248; field_10394 OAK_SAPLING + f Lnet/minecraft/class_2248; field_10308 CYAN_CONCRETE + f Lnet/minecraft/class_2248; field_10467 SMOOTH_SANDSTONE + f Lnet/minecraft/class_2248; field_23864 POLISHED_BLACKSTONE_BUTTON + f Lnet/minecraft/class_2248; field_22110 SOUL_LANTERN + f Lnet/minecraft/class_2248; field_10126 OAK_WOOD + f Lnet/minecraft/class_2248; field_10598 POTTED_RED_TULIP + f Lnet/minecraft/class_2248; field_10248 CYAN_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10393 PINK_CARPET + f Lnet/minecraft/class_2248; field_10241 ZOMBIE_HEAD + f Lnet/minecraft/class_2248; field_10263 REPEATING_COMMAND_BLOCK + f Lnet/minecraft/class_2248; field_10229 LIME_BANNER + f Lnet/minecraft/class_2248; field_23985 CHAIN + f Lnet/minecraft/class_2248; field_10167 RAIL + f Lnet/minecraft/class_2248; field_10053 TUBE_CORAL_FAN + f Lnet/minecraft/class_2248; field_10068 RED_SHULKER_BOX + f Lnet/minecraft/class_2248; field_9989 MOSSY_COBBLESTONE + f Lnet/minecraft/class_2248; field_9988 SPRUCE_LEAVES + f Lnet/minecraft/class_2248; field_10217 SPRUCE_SAPLING + f Lnet/minecraft/class_2248; field_22129 WARPED_SLAB + f Lnet/minecraft/class_2248; field_10039 SMOOTH_RED_SANDSTONE_STAIRS + f Lnet/minecraft/class_2248; field_10561 GREEN_BED + f Lnet/minecraft/class_2248; field_10117 CHISELED_RED_SANDSTONE + f Lnet/minecraft/class_2248; field_9982 BLUE_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10325 LIGHT_BLUE_TERRACOTTA + f Lnet/minecraft/class_2248; field_10302 COCOA + f Lnet/minecraft/class_2248; field_20422 BEEHIVE + f Lnet/minecraft/class_2248; field_10206 PURPLE_CONCRETE + f Lnet/minecraft/class_2248; field_9978 SMOOTH_QUARTZ + f Lnet/minecraft/class_2248; field_10530 PRISMARINE_WALL + f Lnet/minecraft/class_2248; field_10342 DRIED_KELP_BLOCK + f Lnet/minecraft/class_2248; field_10620 OAK_FENCE + f Lnet/minecraft/class_2248; field_10259 PURPLE_WOOL + f Lnet/minecraft/class_2248; field_10322 POLISHED_ANDESITE_SLAB + f Lnet/minecraft/class_2248; field_10506 BLACK_CONCRETE_POWDER + f Lnet/minecraft/class_2248; field_9981 POTTED_BLUE_ORCHID + f Lnet/minecraft/class_2248; field_10317 PINK_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10460 CLAY + f Lnet/minecraft/class_2248; field_10423 GRAY_WOOL + f Lnet/minecraft/class_2248; field_10290 LIGHT_BLUE_CARPET + f Lnet/minecraft/class_2248; field_10388 SKELETON_WALL_SKULL + f Lnet/minecraft/class_2248; field_10104 BRICKS + f Lnet/minecraft/class_2248; field_10103 STRIPPED_ACACIA_WOOD + f Lnet/minecraft/class_2248; field_23861 POLISHED_BLACKSTONE_STAIRS + f Lnet/minecraft/class_2248; field_16335 STONECUTTER + f Lnet/minecraft/class_2248; field_10622 STRIPPED_ACACIA_LOG + f Lnet/minecraft/class_2248; field_10341 BEETROOTS + f Lnet/minecraft/class_2248; field_10438 MAGENTA_BANNER + f Lnet/minecraft/class_2248; field_10611 WHITE_TERRACOTTA + f Lnet/minecraft/class_2248; field_10471 END_STONE + f Lnet/minecraft/class_2248; field_10568 DEAD_FIRE_CORAL_FAN + f Lnet/minecraft/class_2248; field_10373 BROWN_SHULKER_BOX + f Lnet/minecraft/class_2248; field_10556 MUSHROOM_STEM + f Lnet/minecraft/class_2248; field_10149 OAK_DOOR + f Lnet/minecraft/class_2248; field_22126 CRIMSON_PLANKS + f Lnet/minecraft/class_2248; field_10543 CAVE_AIR + f Lnet/minecraft/class_2248; field_10279 RED_WALL_BANNER + f Lnet/minecraft/class_2248; field_10129 LIGHT_GRAY_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_17563 COMPOSTER + f Lnet/minecraft/class_2248; field_10038 GRAY_CONCRETE + f Lnet/minecraft/class_2248; field_10175 PURPUR_SLAB + f Lnet/minecraft/class_2248; field_10218 ACACIA_PLANKS + f Lnet/minecraft/class_2248; field_10019 PURPLE_BED + f Lnet/minecraft/class_2248; field_10507 DIORITE_SLAB + f Lnet/minecraft/class_2248; field_9993 KELP + f Lnet/minecraft/class_2248; field_10512 YELLOW_CARPET + f Lnet/minecraft/class_2248; field_10177 WITHER_SKELETON_SKULL + f Lnet/minecraft/class_2248; field_23862 POLISHED_BLACKSTONE_SLAB + f Lnet/minecraft/class_2248; field_16332 BELL + f Lnet/minecraft/class_2248; field_10162 POTTED_ALLIUM + f Lnet/minecraft/class_2248; field_10555 GRAY_STAINED_GLASS + f Lnet/minecraft/class_2248; field_10375 TNT + f Lnet/minecraft/class_2248; field_10374 STRIPPED_DARK_OAK_WOOD + f Lnet/minecraft/class_2248; field_10244 STRIPPED_DARK_OAK_LOG + f Lnet/minecraft/class_2248; field_10194 GRASS_PATH + f Lnet/minecraft/class_2248; field_10452 LIGHT_BLUE_BANNER + f Lnet/minecraft/class_2248; field_22127 WARPED_PLANKS + f Lnet/minecraft/class_2248; field_10422 BUBBLE_COLUMN + f Lnet/minecraft/class_2248; field_10184 ORANGE_TERRACOTTA + f Lnet/minecraft/class_2248; field_10081 DRAGON_EGG + f Lnet/minecraft/class_2248; field_10576 IRON_BARS + f Lnet/minecraft/class_2248; field_9983 LADDER + f Lnet/minecraft/class_2248; field_10537 BLACK_WALL_BANNER + f Lnet/minecraft/class_2248; field_10355 CYAN_STAINED_GLASS_PANE + f Lnet/minecraft/class_2248; field_10424 SUGAR_CANE + f Lnet/minecraft/class_2248; field_10222 LIGHT_GRAY_WOOL + f Lnet/minecraft/class_2248; field_22422 TARGET + f Lnet/minecraft/class_2248; field_10075 DARK_OAK_PLANKS + f Lnet/minecraft/class_2248; field_10172 LIGHT_GRAY_CONCRETE + f Lnet/minecraft/class_2248; field_10360 SMOOTH_STONE + f Lnet/minecraft/class_2248; field_10527 BLUE_BED +c net/minecraft/class_2258 net/minecraft/block/BubbleColumnBlock + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Z)V method_9657 placeBubbleColumn + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9656 getDrag + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_9658 canHoldBubbleColumn + f Lnet/minecraft/class_2746; field_10680 DRAG +c net/minecraft/class_2260 net/minecraft/block/BrewingStandBlock + f Lnet/minecraft/class_265; field_10701 SHAPE + f [Lnet/minecraft/class_2746; field_10700 HAS_BOTTLE +c net/minecraft/class_2261 net/minecraft/block/BushBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9695 isValidGround +c net/minecraft/class_2263 net/minecraft/block/IBucketPickupHandler + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3611; method_9700 pickupFluid +c net/minecraft/class_2266 net/minecraft/block/CactusBlock + f Lnet/minecraft/class_2758; field_10709 AGE + f Lnet/minecraft/class_265; field_10711 COLLISION_SHAPE + f Lnet/minecraft/class_265; field_10710 OUTLINE_SHAPE +c net/minecraft/class_2269 net/minecraft/block/AbstractButtonBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9715 checkPressed + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_21845 powerBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9713 updateNeighbors + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Z)V method_9714 playSound + m ()I method_26153 getActiveDuration + m (Z)Lnet/minecraft/class_3414; method_9712 getSoundEvent + f Lnet/minecraft/class_265; field_10731 AABB_WEST_OFF + f Lnet/minecraft/class_265; field_10715 AABB_SOUTH_OFF + f Lnet/minecraft/class_265; field_10726 AABB_CEILING_Z_ON + f Lnet/minecraft/class_265; field_10720 AABB_EAST_OFF + f Lnet/minecraft/class_265; field_10717 AABB_CEILING_X_ON + f Lnet/minecraft/class_265; field_10727 AABB_CEILING_Z_OFF + f Lnet/minecraft/class_265; field_10721 AABB_CEILING_X_OFF + f Lnet/minecraft/class_265; field_10716 AABB_FLOOR_Z_OFF + f Lnet/minecraft/class_265; field_10728 AABB_NORTH_OFF + f Lnet/minecraft/class_265; field_10723 AABB_FLOOR_X_OFF + f Z field_10725 wooden + f Lnet/minecraft/class_265; field_10732 AABB_WEST_ON + f Lnet/minecraft/class_2746; field_10729 POWERED + f Lnet/minecraft/class_265; field_10719 AABB_NORTH_ON + f Lnet/minecraft/class_265; field_10724 AABB_SOUTH_ON + f Lnet/minecraft/class_265; field_10718 AABB_EAST_ON + f Lnet/minecraft/class_265; field_10730 AABB_FLOOR_Z_ON + f Lnet/minecraft/class_265; field_10722 AABB_FLOOR_X_ON +c net/minecraft/class_2269$1 net/minecraft/block/AbstractButtonBlock$1 + f [I field_10733 field_208106_b + f [I field_10734 field_180420_a +c net/minecraft/class_3922 net/minecraft/block/CampfireBlock + m (Lnet/minecraft/class_2680;)Z method_23896 isLit + m (Lnet/minecraft/class_4970$class_4971;)Z method_30034 func_241469_a_ + m (Lnet/minecraft/class_2680;)Z method_30035 canBeLit + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_23895 isSmokingBlockAt + m (Lnet/minecraft/class_2680;)Z method_17456 isHayBlock + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_29288 extinguish + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ZZ)V method_17455 spawnSmokeParticles + f Lnet/minecraft/class_2753; field_17564 FACING + f Lnet/minecraft/class_2746; field_17354 WATERLOGGED + f Lnet/minecraft/class_2746; field_17353 SIGNAL_FIRE + f Lnet/minecraft/class_265; field_17351 SHAPE + f I field_25182 fireDamage + f Lnet/minecraft/class_2746; field_17352 LIT + f Lnet/minecraft/class_265; field_21580 SMOKING_SHAPE + f Z field_23881 smokey +c net/minecraft/class_2272 net/minecraft/block/CakeBlock + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1269; method_9719 eatSlice + f Lnet/minecraft/class_2758; field_10739 BITES + f [Lnet/minecraft/class_265; field_10738 SHAPES +c net/minecraft/class_3711 net/minecraft/block/CartographyTableBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17457 func_220267_a + f Lnet/minecraft/class_2561; field_17355 CONTAINER_NAME +c net/minecraft/class_2271 net/minecraft/block/CarrotBlock + f [Lnet/minecraft/class_265; field_10737 SHAPES +c net/minecraft/class_2275 net/minecraft/block/CauldronBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;I)V method_9726 setWaterLevel + f Lnet/minecraft/class_265; field_10747 INSIDE + f Lnet/minecraft/class_265; field_10746 SHAPE + f Lnet/minecraft/class_2758; field_10745 LEVEL +c net/minecraft/class_2276 net/minecraft/block/CarvedPumpkinBlock + m ()Lnet/minecraft/class_2700; method_9732 getSnowmanBasePattern + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9731 trySpawnGolem + m (Lnet/minecraft/class_2680;)Z method_9728 func_210301_j + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_9733 canDispenserPlace + m ()Lnet/minecraft/class_2700; method_9730 getGolemPattern + m ()Lnet/minecraft/class_2700; method_9729 getSnowmanPattern + m ()Lnet/minecraft/class_2700; method_9727 getGolemBasePattern + f Lnet/minecraft/class_2753; field_10748 FACING + f Lnet/minecraft/class_2700; field_10749 snowmanBasePattern + f Ljava/util/function/Predicate; field_10751 IS_PUMPKIN + f Lnet/minecraft/class_2700; field_10752 golemBasePattern + f Lnet/minecraft/class_2700; field_10753 golemPattern + f Lnet/minecraft/class_2700; field_10750 snowmanPattern +c net/minecraft/class_5172 net/minecraft/block/ChainBlock + f Lnet/minecraft/class_2746; field_24411 WATERLOGGED + f Lnet/minecraft/class_265; field_26651 X_AXIS_SHAPE + f Lnet/minecraft/class_265; field_26650 Z_AXIS_SHAPE + f Lnet/minecraft/class_265; field_23986 Y_AXIS_SHAPE +c net/minecraft/class_5172$1 net/minecraft/block/ChainBlock$1 + f [I field_26652 field_242662_a +c net/minecraft/class_2279 net/minecraft/block/ChorusFlowerBlock + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/Random;Lnet/minecraft/class_2338;II)V method_9748 growTreeRecursive + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_9746 areAllNeighborsEmpty + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;I)V method_9745 placeGrownFlower + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9747 placeDeadFlower + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/Random;I)V method_9744 generatePlant + f Lnet/minecraft/class_2283; field_10763 plantBlock + f Lnet/minecraft/class_2758; field_10762 AGE +c net/minecraft/class_2281 net/minecraft/block/ChestBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_9758 getDirectionToAttached + m (Lnet/minecraft/class_1750;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_9753 getDirectionToAttach + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9757 isBelowSolidBlock + m (Lnet/minecraft/class_2618;)Lnet/minecraft/class_4732$class_3923; method_24166 getLidRotationCallback + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_9756 isBlocked + m ()Lnet/minecraft/class_3445; method_9755 getOpenStat + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_4732$class_4733; method_24169 getChestMergerType + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_24168 func_226918_c_ + m (Lnet/minecraft/class_2281;Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_1263; method_17458 getChestInventory + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_9754 isCatSittingOn + f Lnet/minecraft/class_265; field_10774 SHAPE_SINGLE + f Lnet/minecraft/class_265; field_10769 SHAPE_EAST + f Lnet/minecraft/class_265; field_10773 SHAPE_WEST + f Lnet/minecraft/class_2746; field_10772 WATERLOGGED + f Lnet/minecraft/class_4732$class_3923; field_17357 CONTAINER_MERGER + f Lnet/minecraft/class_2753; field_10768 FACING + f Lnet/minecraft/class_265; field_10771 SHAPE_SOUTH + f Lnet/minecraft/class_265; field_10767 SHAPE_NORTH + f Lnet/minecraft/class_2754; field_10770 TYPE + f Lnet/minecraft/class_4732$class_3923; field_17356 INVENTORY_MERGER +c net/minecraft/class_2281$2 net/minecraft/block/ChestBlock$2 + m (Lnet/minecraft/class_2595;Lnet/minecraft/class_2595;)Ljava/util/Optional; method_17463 func_225539_a_ + m (Lnet/minecraft/class_2595;)Ljava/util/Optional; method_17462 func_225538_a_ + m ()Ljava/util/Optional; method_24171 func_225537_b_ +c net/minecraft/class_2281$2$1 net/minecraft/block/ChestBlock$2$1 + f Lnet/minecraft/class_2595; field_17359 field_214030_b + f Lnet/minecraft/class_2281$2; field_17361 field_214032_d + f Lnet/minecraft/class_1263; field_17360 field_214031_c + f Lnet/minecraft/class_2595; field_17358 field_214029_a +c net/minecraft/class_2281$3 net/minecraft/block/ChestBlock$3 + m (Lnet/minecraft/class_2595;Lnet/minecraft/class_2595;)Lit/unimi/dsi/fastutil/floats/Float2FloatFunction; method_23899 func_225539_a_ + m ()Lit/unimi/dsi/fastutil/floats/Float2FloatFunction; method_24172 func_225537_b_ + m (Lnet/minecraft/class_2595;Lnet/minecraft/class_2595;F)F method_23900 func_226921_a_ + m (Lnet/minecraft/class_2595;)Lit/unimi/dsi/fastutil/floats/Float2FloatFunction; method_23898 func_225538_a_ + f Lnet/minecraft/class_2618; field_21782 field_226920_a_ +c net/minecraft/class_2281$4 net/minecraft/block/ChestBlock$4 + f [I field_10775 field_226922_a_ +c net/minecraft/class_2281$1 net/minecraft/block/ChestBlock$1 + m ()Ljava/util/Optional; method_24170 func_225537_b_ + m (Lnet/minecraft/class_2595;)Ljava/util/Optional; method_17460 func_225538_a_ + m (Lnet/minecraft/class_2595;Lnet/minecraft/class_2595;)Ljava/util/Optional; method_17461 func_225539_a_ +c net/minecraft/class_2282 net/minecraft/block/CocoaBlock + f [Lnet/minecraft/class_265; field_10778 COCOA_EAST_AABB + f [Lnet/minecraft/class_265; field_10776 COCOA_WEST_AABB + f [Lnet/minecraft/class_265; field_10777 COCOA_NORTH_AABB + f [Lnet/minecraft/class_265; field_10780 COCOA_SOUTH_AABB + f Lnet/minecraft/class_2758; field_10779 AGE +c net/minecraft/class_2282$1 net/minecraft/block/CocoaBlock$1 + f [I field_10781 field_180415_a +c net/minecraft/class_2283 net/minecraft/block/ChorusPlantBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_9759 makeConnections +c net/minecraft/class_2286 net/minecraft/block/ComparatorBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2350;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1533; method_9774 findItemFrame + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9775 onStateChange + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)I method_9773 calculateOutput + m (Lnet/minecraft/class_2350;Lnet/minecraft/class_1533;)Z method_9772 func_210304_a + f Lnet/minecraft/class_2754; field_10789 MODE +c net/minecraft/class_2288 net/minecraft/block/CommandBlockBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)V method_9779 executeChain + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1918;Z)V method_9780 execute + f Lnet/minecraft/class_2746; field_10793 CONDITIONAL + f Lorg/apache/logging/log4j/Logger; field_10792 LOGGER + f Lnet/minecraft/class_2753; field_10791 FACING +c net/minecraft/class_2292 net/minecraft/block/ConcretePowderBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_24279 shouldSolidify + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9798 isTouchingLiquid + m (Lnet/minecraft/class_2680;)Z method_9799 causesSolidify + f Lnet/minecraft/class_2680; field_10810 solidifiedState +c net/minecraft/class_3962 net/minecraft/block/ComposterBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_26373 attemptFill + m ()V method_17758 init + m ([Lnet/minecraft/class_265;)V method_17755 func_220291_a + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)Lnet/minecraft/class_2680; method_17756 attemptCompost + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)Lnet/minecraft/class_2680; method_17754 func_235485_a_ + m (FLnet/minecraft/class_1935;)V method_17753 registerCompostable + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_17757 func_235488_c_ + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_26374 empty + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_17759 resetFillState + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)V method_18027 playEvent + f [Lnet/minecraft/class_265; field_17568 SHAPE + f Lit/unimi/dsi/fastutil/objects/Object2FloatMap; field_17566 CHANCES + f Lnet/minecraft/class_265; field_17567 OUT_SHAPE + f Lnet/minecraft/class_2758; field_17565 LEVEL +c net/minecraft/class_3962$class_3925 net/minecraft/block/ComposterBlock$EmptyInventory +c net/minecraft/class_3962$class_3963 net/minecraft/block/ComposterBlock$PartialInventory + f Lnet/minecraft/class_2338; field_17571 pos + f Lnet/minecraft/class_1936; field_17570 world + f Lnet/minecraft/class_2680; field_17569 state + f Z field_17572 inserted +c net/minecraft/class_3962$class_3964 net/minecraft/block/ComposterBlock$FullInventory + f Z field_17576 extracted + f Lnet/minecraft/class_1936; field_17574 world + f Lnet/minecraft/class_2680; field_17573 state + f Lnet/minecraft/class_2338; field_17575 pos +c net/minecraft/class_2298 net/minecraft/block/CoralBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9808 canLive + f Lnet/minecraft/class_2248; field_10818 deadBlock +c net/minecraft/class_2289 net/minecraft/block/ConduitBlock + f Lnet/minecraft/class_2746; field_10794 WATERLOGGED + f Lnet/minecraft/class_265; field_10795 SHAPE +c net/minecraft/class_2301 net/minecraft/block/CoralPlantBlock + f Lnet/minecraft/class_2248; field_10833 deadBlock + f Lnet/minecraft/class_265; field_10834 SHAPE +c net/minecraft/class_2297 net/minecraft/block/CoralFinBlock + f Lnet/minecraft/class_2248; field_10817 deadBlock +c net/minecraft/class_2304 net/minecraft/block/CraftingTableBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17466 func_220270_a + f Lnet/minecraft/class_2561; field_17362 CONTAINER_NAME +c net/minecraft/class_2299 net/minecraft/block/CoralWallFanBlock + f Lnet/minecraft/class_2248; field_10819 deadBlock +c net/minecraft/class_2310 net/minecraft/block/FourWayBlock + m (Lnet/minecraft/class_2680;)I method_20517 func_223007_q + m (Lnet/minecraft/class_2680;)I method_9987 getIndex + m (Lnet/minecraft/class_2350;)I method_9985 getMask + m (Ljava/util/Map$Entry;)Z method_9986 func_199775_a + m (FFFFF)[Lnet/minecraft/class_265; method_9984 makeShapes + f Lnet/minecraft/class_2746; field_10905 NORTH + f Lnet/minecraft/class_2746; field_10903 WEST + f Lnet/minecraft/class_2746; field_10904 SOUTH + f Lnet/minecraft/class_2746; field_10907 EAST + f Lnet/minecraft/class_2746; field_10900 WATERLOGGED + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_19313 statePaletteMap + f [Lnet/minecraft/class_265; field_10901 collisionShapes + f Ljava/util/Map; field_10902 FACING_TO_PROPERTY_MAP + f [Lnet/minecraft/class_265; field_10906 shapes +c net/minecraft/class_2310$1 net/minecraft/block/FourWayBlock$1 + f [I field_10908 field_211364_b + f [I field_10909 field_211363_a +c net/minecraft/class_2302 net/minecraft/block/CropsBlock + m ()I method_9827 getMaxAge + m ()Lnet/minecraft/class_1935; method_9832 getSeedsItem + m (Lnet/minecraft/class_2680;)I method_9829 getAge + m ()Lnet/minecraft/class_2758; method_9824 getAgeProperty + m (I)Lnet/minecraft/class_2680; method_9828 withAge + m (Lnet/minecraft/class_2680;)Z method_9825 isMaxAge + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9826 grow + m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_9830 getGrowthChance + m (Lnet/minecraft/class_1937;)I method_9831 getBonemealAgeIncrease + f [Lnet/minecraft/class_265; field_10836 SHAPE_BY_AGE + f Lnet/minecraft/class_2758; field_10835 AGE +c net/minecraft/class_2309 net/minecraft/block/DaylightDetectorBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9983 updatePower + f Lnet/minecraft/class_265; field_10898 SHAPE + f Lnet/minecraft/class_2746; field_10899 INVERTED + f Lnet/minecraft/class_2758; field_10897 POWER +c net/minecraft/class_4848 net/minecraft/block/CryingObsidianBlock +c net/minecraft/class_2313 net/minecraft/block/DetectorRailBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_10003 updateConnectedRails + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Ljava/lang/Class;Ljava/util/function/Predicate;)Ljava/util/List; method_10001 findMinecarts + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10002 updatePoweredState + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_238; method_10004 getDectectionBox + f Lnet/minecraft/class_2754; field_10914 SHAPE + f Lnet/minecraft/class_2746; field_10913 POWERED +c net/minecraft/class_2313$1 net/minecraft/block/DetectorRailBlock$1 + f [I field_10915 field_208109_c + f [I field_10917 field_208107_a + f [I field_10916 field_208108_b +c net/minecraft/class_2311 net/minecraft/block/DeadBushBlock + f Lnet/minecraft/class_265; field_10910 SHAPE +c net/minecraft/class_2318 net/minecraft/block/DirectionalBlock + f Lnet/minecraft/class_2753; field_10927 FACING +c net/minecraft/class_2312 net/minecraft/block/RedstoneDiodeBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9998 updateState + m (Lnet/minecraft/class_2680;)Z method_9989 isAlternateInput + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_9995 getPowerOnSide + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_9990 shouldBePowered + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_9988 isFacingTowardsRepeater + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_9996 isLocked + m (Lnet/minecraft/class_2680;)Z method_9999 isDiode + m (Lnet/minecraft/class_2680;)I method_9992 getDelay + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)I method_9991 calculateInputStrength + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9997 notifyNeighbors + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)I method_10000 getPowerOnSides + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)I method_9993 getActiveSignal + f Lnet/minecraft/class_265; field_10912 SHAPE + f Lnet/minecraft/class_2746; field_10911 POWERED +c net/minecraft/class_2323 net/minecraft/block/DoorBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_24795 isWooden + m (Lnet/minecraft/class_1750;)Lnet/minecraft/class_2750; method_10035 getHingeSide + m (Lnet/minecraft/class_2680;)Z method_24796 isWooden + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)V method_10036 playSound + m ()I method_10032 getOpenSound + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Z)V method_10033 openDoor + m ()I method_10034 getCloseSound + m (Lnet/minecraft/class_2680;)Z method_30841 isOpen + f Lnet/minecraft/class_265; field_10942 SOUTH_AABB + f Lnet/minecraft/class_265; field_10939 NORTH_AABB + f Lnet/minecraft/class_2754; field_10946 HALF + f Lnet/minecraft/class_2753; field_10938 FACING + f Lnet/minecraft/class_2754; field_10941 HINGE + f Lnet/minecraft/class_2746; field_10940 POWERED + f Lnet/minecraft/class_2746; field_10945 OPEN + f Lnet/minecraft/class_265; field_10944 WEST_AABB + f Lnet/minecraft/class_265; field_10943 EAST_AABB +c net/minecraft/class_2323$1 net/minecraft/block/DoorBlock$1 + f [I field_10948 field_185789_a + f [I field_10947 field_210338_b +c net/minecraft/class_2315 net/minecraft/block/DispenserBlock + m (Lnet/minecraft/class_2342;)Lnet/minecraft/class_2374; method_10010 getDispensePosition + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_10012 dispense + m (Lnet/minecraft/class_1935;Lnet/minecraft/class_2357;)V method_10009 registerDispenseBehavior + m (Lit/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap;)V method_10008 func_212564_a + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2357; method_10011 getBehavior + f Ljava/util/Map; field_10919 DISPENSE_BEHAVIOR_REGISTRY + f Lnet/minecraft/class_2753; field_10918 FACING + f Lnet/minecraft/class_2746; field_10920 TRIGGERED +c net/minecraft/class_4732 net/minecraft/tileentity/TileEntityMerger + m (Lnet/minecraft/class_2591;Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/class_2753;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/function/BiPredicate;)Lnet/minecraft/class_4732$class_4734; method_24173 func_226924_a_ +c net/minecraft/class_4732$class_3923 net/minecraft/tileentity/TileEntityMerger$ICallback + m (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; method_17465 func_225539_a_ + m ()Ljava/lang/Object; method_24174 func_225537_b_ + m (Ljava/lang/Object;)Ljava/lang/Object; method_17464 func_225538_a_ +c net/minecraft/class_4732$class_4734 net/minecraft/tileentity/TileEntityMerger$ICallbackWrapper + m (Lnet/minecraft/class_4732$class_3923;)Ljava/lang/Object; apply apply +c net/minecraft/class_4732$class_4734$class_4736 net/minecraft/tileentity/TileEntityMerger$ICallbackWrapper$Single + f Ljava/lang/Object; field_21789 field_226927_a_ +c net/minecraft/class_4732$class_4734$class_4735 net/minecraft/tileentity/TileEntityMerger$ICallbackWrapper$Double + f Ljava/lang/Object; field_21788 field_226926_b_ + f Ljava/lang/Object; field_21787 field_226925_a_ +c net/minecraft/class_4732$class_4733 net/minecraft/tileentity/TileEntityMerger$Type + m (Ljava/lang/String;)Lnet/minecraft/class_4732$class_4733; valueOf valueOf + m ()[Lnet/minecraft/class_4732$class_4733; values values + f Lnet/minecraft/class_4732$class_4733; field_21783 SINGLE + f Lnet/minecraft/class_4732$class_4733; field_21784 FIRST + f Lnet/minecraft/class_4732$class_4733; field_21785 SECOND + f [Lnet/minecraft/class_4732$class_4733; field_21786 $VALUES +c net/minecraft/class_2328 net/minecraft/block/DragonEggBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10047 teleport + f Lnet/minecraft/class_265; field_10950 SHAPE +c net/minecraft/class_2320 net/minecraft/block/DoublePlantBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1657;)V method_30036 removeBottomHalf + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)V method_10021 placeAt + f Lnet/minecraft/class_2754; field_10929 HALF +c net/minecraft/class_2331 net/minecraft/block/EnchantingTableBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17467 func_220147_a + f Lnet/minecraft/class_265; field_10951 SHAPE +c net/minecraft/class_2325 net/minecraft/block/DropperBlock + f Lnet/minecraft/class_2357; field_10949 DISPENSE_BEHAVIOR +c net/minecraft/class_2334 net/minecraft/block/EndPortalBlock + f Lnet/minecraft/class_265; field_10959 SHAPE +c net/minecraft/class_2329 net/minecraft/block/EndGatewayBlock +c net/minecraft/class_2337 net/minecraft/block/EndRodBlock + f Lnet/minecraft/class_265; field_10971 END_ROD_VERTICAL_AABB + f Lnet/minecraft/class_265; field_10970 END_ROD_NS_AABB + f Lnet/minecraft/class_265; field_10969 END_ROD_EW_AABB +c net/minecraft/class_2337$1 net/minecraft/block/EndRodBlock$1 + f [I field_10972 field_185790_a +c net/minecraft/class_2333 net/minecraft/block/EndPortalFrameBlock + m ()Lnet/minecraft/class_2700; method_10054 getOrCreatePortalShape + f Lnet/minecraft/class_265; field_10956 BASE_SHAPE + f Lnet/minecraft/class_265; field_10953 EYE_SHAPE + f Lnet/minecraft/class_2700; field_10957 portalShape + f Lnet/minecraft/class_265; field_10955 BASE_WITH_EYE_SHAPE + f Lnet/minecraft/class_2753; field_10954 FACING + f Lnet/minecraft/class_2746; field_10958 EYE +c net/minecraft/class_2343 net/minecraft/block/ITileEntityProvider + m (Lnet/minecraft/class_1922;)Lnet/minecraft/class_2586; method_10123 createNewTileEntity +c net/minecraft/class_2336 net/minecraft/block/EnderChestBlock + m (Lnet/minecraft/class_1730;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17468 func_226928_a_ + m ()Lnet/minecraft/class_2591; method_24205 func_226929_c_ + f Lnet/minecraft/class_2746; field_10968 WATERLOGGED + f Lnet/minecraft/class_265; field_10967 SHAPE + f Lnet/minecraft/class_2561; field_17363 CONTAINER_NAME + f Lnet/minecraft/class_2753; field_10966 FACING +c net/minecraft/class_2346 net/minecraft/block/FallingBlock + m ()I method_26154 getFallDelay + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_1540;)V method_10127 onEndFalling + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1540;)V method_10129 onBroken + m (Lnet/minecraft/class_2680;)Z method_10128 canFallThrough + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_10130 getDustColor + m (Lnet/minecraft/class_1540;)V method_10132 onStartFalling +c net/minecraft/class_2341 net/minecraft/block/HorizontalFaceBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_10119 getFacing + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_20046 isSideSolidForDirection + f Lnet/minecraft/class_2754; field_11007 FACE +c net/minecraft/class_2341$1 net/minecraft/block/HorizontalFaceBlock$1 + f [I field_11008 field_208110_a +c net/minecraft/class_2354 net/minecraft/block/FenceBlock + m (Lnet/minecraft/class_2680;ZLnet/minecraft/class_2350;)Z method_10184 canConnect + m (Lnet/minecraft/class_2248;)Z method_26375 isWoodenFence + f [Lnet/minecraft/class_265; field_11066 renderShapes +c net/minecraft/class_2344 net/minecraft/block/FarmlandBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_10124 hasCrops + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_10126 hasWater + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10125 turnToDirt + f Lnet/minecraft/class_265; field_11010 SHAPE + f Lnet/minecraft/class_2758; field_11009 MOISTURE +c net/minecraft/class_2358 net/minecraft/block/FireBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_10192 canDie + m ()V method_10199 init + m (Ljava/util/Map$Entry;)Z method_10197 func_199776_a + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_10198 getStateForPlacement + m (Lnet/minecraft/class_2680;)Z method_31017 func_242674_n + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2680; method_24855 getFireWithAge + m (Ljava/util/Random;)I method_26155 getTickCooldown + m (Lnet/minecraft/class_2680;)I method_10191 getFireSpreadSpeed + m (Lnet/minecraft/class_2248;II)V method_10189 setFireInfo + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_10193 areNeighborsFlammable + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_31016 getShapeForState + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILjava/util/Random;I)V method_10196 catchOnFire + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)I method_10194 getNeighborEncouragement + m (Lnet/minecraft/class_2680;)I method_10190 getFlammability + f Lnet/minecraft/class_2758; field_11092 AGE + f Lnet/minecraft/class_2746; field_11089 SOUTH + f Lnet/minecraft/class_2746; field_11088 WEST + f Lnet/minecraft/class_2746; field_11093 UP + f Ljava/util/Map; field_11090 FACING_TO_PROPERTY_MAP + f Lnet/minecraft/class_2746; field_11096 NORTH + f Lnet/minecraft/class_2746; field_11094 EAST + f Lnet/minecraft/class_265; field_26657 FIRE_SHAPE_SOUTH + f Lnet/minecraft/class_265; field_26656 FIRE_SHAPE_NORTH + f Lnet/minecraft/class_265; field_26655 FIRE_SHAPE_EAST + f Ljava/util/Map; field_26658 stateToShapeMap + f Lnet/minecraft/class_265; field_26653 FIRE_SHAPE_UP + f Lnet/minecraft/class_265; field_26654 FIRE_SHAPE_WEST + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_11091 flammabilities + f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_11095 encouragements +c net/minecraft/class_2349 net/minecraft/block/FenceGateBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_16703 isParallel + m (Lnet/minecraft/class_2680;)Z method_10138 isWall + f Lnet/minecraft/class_265; field_11025 AABB_HITBOX_ZAXIS_INWALL + f Lnet/minecraft/class_2746; field_11026 OPEN + f Lnet/minecraft/class_265; field_11016 AABB_HITBOX_XAXIS_INWALL + f Lnet/minecraft/class_265; field_11028 TRUE_AABB_COLLISION_BOX_ZAXIS + f Lnet/minecraft/class_2746; field_11021 POWERED + f Lnet/minecraft/class_265; field_11022 AABB_HITBOX_ZAXIS + f Lnet/minecraft/class_265; field_11020 AABB_RENDER_BOX_ZAXIS_INWALL + f Lnet/minecraft/class_265; field_11027 AABB_RENDER_BOX_XAXIS_INWALL + f Lnet/minecraft/class_265; field_11017 AABB_HITBOX_XAXIS + f Lnet/minecraft/class_265; field_11023 AABB_COLLISION_BOX_ZAXIS + f Lnet/minecraft/class_2746; field_11024 IN_WALL + f Lnet/minecraft/class_265; field_11019 AABB_COLLISION_BOX_XAXIS + f Lnet/minecraft/class_265; field_11018 AABB_RENDER_BOX_ZAXIS +c net/minecraft/class_2349$1 net/minecraft/block/FenceGateBlock$1 + f [I field_11029 field_210339_a +c net/minecraft/class_2356 net/minecraft/block/FlowerBlock + m ()Lnet/minecraft/class_1291; method_10188 getStewEffect + m ()I method_10187 getStewEffectDuration + f Lnet/minecraft/class_1291; field_11087 stewEffect + f I field_11086 stewEffectDuration + f Lnet/minecraft/class_265; field_11085 SHAPE +c net/minecraft/class_3712 net/minecraft/block/FletchingTableBlock +c net/minecraft/class_2360 net/minecraft/block/FrostedIceBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;I)Z method_10202 shouldMelt + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_10201 slightlyMelt + f Lnet/minecraft/class_2758; field_11097 AGE +c net/minecraft/class_2362 net/minecraft/block/FlowerPotBlock + m ()Lnet/minecraft/class_2248; method_16231 getFlower + f Lnet/minecraft/class_265; field_11102 SHAPE + f Lnet/minecraft/class_2248; field_11101 flower + f Ljava/util/Map; field_11103 POTTED_CONTENT +c net/minecraft/class_3865 net/minecraft/block/FurnaceBlock +c net/minecraft/class_4771 net/minecraft/block/FungusBlock + f Ljava/util/function/Supplier; field_22135 fungusFeature + f Lnet/minecraft/class_265; field_22134 SHAPE +c net/minecraft/class_2366 net/minecraft/block/GlazedTerracottaBlock +c net/minecraft/class_2368 net/minecraft/block/GlassBlock +c net/minecraft/class_2369 net/minecraft/block/GrassPathBlock + f Lnet/minecraft/class_265; field_11106 SHAPE +c net/minecraft/class_2372 net/minecraft/block/GrassBlock +c net/minecraft/class_2375 net/minecraft/block/GravelBlock +c net/minecraft/class_4863 net/minecraft/block/AbstractPlantBlock + m (Lnet/minecraft/class_1936;)Lnet/minecraft/class_2680; method_24948 grow + m (Lnet/minecraft/class_2248;)Z method_24947 canGrowOn + m ()Lnet/minecraft/class_4865; method_24945 getTopPlantBlock + m ()Lnet/minecraft/class_2248; method_24946 getBodyPlantBlock + f Lnet/minecraft/class_265; field_23080 shape + f Lnet/minecraft/class_2350; field_22507 growthDirection + f Z field_22508 breaksInWater +c net/minecraft/class_3713 net/minecraft/block/GrindstoneBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_16119 getShapeFromState + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17469 func_220187_a + f Lnet/minecraft/class_265; field_16367 SHAPE_WALL_NORTH_HOLDER_2 + f Lnet/minecraft/class_265; field_16386 SHAPE_FLOOR_EAST_WEST_LEG_HOLDER_COMBINED_1 + f Lnet/minecraft/class_265; field_16362 SHAPE_FLOOR_EAST_WEST_COMBINED + f Lnet/minecraft/class_265; field_16383 SHAPE_CEILING_EAST_OR_WEST + f Lnet/minecraft/class_265; field_16360 SHAPE_CEILING_EAST_OR_WEST_LEG_HOLDER_COMBINED_2 + f Lnet/minecraft/class_265; field_16347 SHAPE_WALL_NORTH_LEG_2 + f Lnet/minecraft/class_265; field_16391 SHAPE_WALL_EAST_COMBINED + f Lnet/minecraft/class_265; field_16345 SHAPE_WALL_EAST_HOLDER_1 + f Lnet/minecraft/class_265; field_16353 SHAPE_CEILING_EAST_OR_WEST_HOLDER_2 + f Lnet/minecraft/class_265; field_16399 SHAPE_WALL_SOUTH + f Lnet/minecraft/class_265; field_16372 SHAPE_WALL_EAST_LEG_HOLDER_COMBINED_1 + f Lnet/minecraft/class_265; field_16394 SHAPE_WALL_EAST_LEG_1 + f Lnet/minecraft/class_265; field_16380 SHAPE_FLOOR_NORTH_SOUTH + f Lnet/minecraft/class_265; field_16398 SHAPE_CEILING_EAST_OR_WEST_LEG_2 + f Lnet/minecraft/class_265; field_16346 SHAPE_FLOOR_EAST_WEST_LEG_2 + f Lnet/minecraft/class_2561; field_17364 CONTAINER_NAME + f Lnet/minecraft/class_265; field_16351 SHAPE_WALL_WEST_LEG_HOLDER_COMBINED_2 + f Lnet/minecraft/class_265; field_16348 SHAPE_FLOOR_NORTH_SOUTH_LEG_HOLDER_COMBINED_1 + f Lnet/minecraft/class_265; field_16376 SHAPE_WALL_WEST + f Lnet/minecraft/class_265; field_16385 SHAPE_FLOOR_NORTH_SOUTH_COMBINED + f Lnet/minecraft/class_265; field_16397 SHAPE_CEILING_NORTH_OR_SOUTH_COMBINED + f Lnet/minecraft/class_265; field_16382 SHAPE_WALL_WEST_HOLDER_2 + f Lnet/minecraft/class_265; field_16366 SHAPE_FLOOR_NORTH_SOUTH_HOLDER_1 + f Lnet/minecraft/class_265; field_16371 SHAPE_WALL_SOUTH_HOLDER_2 + f Lnet/minecraft/class_265; field_16364 SHAPE_CEILING_NORTH_OR_SOUTH_LEG_HOLDER_COMBINED_1 + f Lnet/minecraft/class_265; field_16354 SHAPE_WALL_SOUTH_LEG_HOLDER_COMBINED_2 + f Lnet/minecraft/class_265; field_16377 SHAPE_WALL_SOUTH_LEG_2 + f Lnet/minecraft/class_265; field_16384 SHAPE_CEILING_NORTH_OR_SOUTH_HOLDER_1 + f Lnet/minecraft/class_265; field_16358 SHAPE_WALL_WEST_LEG_2 + f Lnet/minecraft/class_265; field_16341 SHAPE_CEILING_NORTH_OR_SOUTH_LEG_1 + f Lnet/minecraft/class_265; field_16379 SHAPE_FLOOR_NORTH_SOUTH_LEG_1 + f Lnet/minecraft/class_265; field_16396 SHAPE_WALL_NORTH_LEG_HOLDER_COMBINED_2 + f Lnet/minecraft/class_265; field_16356 SHAPE_WALL_NORTH + f Lnet/minecraft/class_265; field_16352 SHAPE_WALL_SOUTH_LEG_1 + f Lnet/minecraft/class_265; field_16401 SHAPE_WALL_NORTH_HOLDER_1 + f Lnet/minecraft/class_265; field_16388 SHAPE_WALL_NORTH_LEG_HOLDER_COMBINED_1 + f Lnet/minecraft/class_265; field_16378 SHAPE_FLOOR_EAST_WEST_LEG_HOLDER_COMBINED_2 + f Lnet/minecraft/class_265; field_16363 SHAPE_WALL_NORTH_LEG_1 + f Lnet/minecraft/class_265; field_16381 SHAPE_WALL_EAST_LEG_HOLDER_COMBINED_2 + f Lnet/minecraft/class_265; field_16370 SHAPE_WALL_EAST + f Lnet/minecraft/class_265; field_16374 SHAPE_FLOOR_EAST_WEST_HOLDER_2 + f Lnet/minecraft/class_265; field_16389 SHAPE_CEILING_EAST_OR_WEST_COMBINED + f Lnet/minecraft/class_265; field_16350 SHAPE_WALL_EAST_HOLDER_2 + f Lnet/minecraft/class_265; field_16343 SHAPE_FLOOR_EAST_WEST_HOLDER_1 + f Lnet/minecraft/class_265; field_16395 SHAPE_CEILING_EAST_OR_WEST_LEG_HOLDER_COMBINED_1 + f Lnet/minecraft/class_265; field_16369 SHAPE_WALL_SOUTH_COMBINED + f Lnet/minecraft/class_265; field_16357 SHAPE_CEILING_EAST_OR_WEST_HOLDER_1 + f Lnet/minecraft/class_265; field_16375 SHAPE_WALL_EAST_LEG_2 + f Lnet/minecraft/class_265; field_16373 SHAPE_FLOOR_EAST_WEST_LEG_1 + f Lnet/minecraft/class_265; field_16387 SHAPE_CEILING_EAST_OR_WEST_LEG_1 + f Lnet/minecraft/class_265; field_16365 SHAPE_FLOOR_NORTH_SOUTH_LEG_HOLDER_COMBINED_2 + f Lnet/minecraft/class_265; field_16361 SHAPE_CEILING_NORTH_OR_SOUTH + f Lnet/minecraft/class_265; field_16349 SHAPE_CEILING_NORTH_OR_SOUTH_LEG_HOLDER_COMBINED_2 + f Lnet/minecraft/class_265; field_16344 SHAPE_WALL_WEST_COMBINED + f Lnet/minecraft/class_265; field_16390 SHAPE_WALL_WEST_HOLDER_1 + f Lnet/minecraft/class_265; field_16400 SHAPE_CEILING_NORTH_OR_SOUTH_HOLDER_2 + f Lnet/minecraft/class_265; field_16359 SHAPE_WALL_WEST_LEG_HOLDER_COMBINED_1 + f Lnet/minecraft/class_265; field_16339 SHAPE_FLOOR_NORTH_SOUTH_HOLDER_2 + f Lnet/minecraft/class_265; field_16340 SHAPE_WALL_SOUTH_LEG_HOLDER_COMBINED_1 + f Lnet/minecraft/class_265; field_16342 SHAPE_WALL_WEST_LEG_1 + f Lnet/minecraft/class_265; field_16355 SHAPE_CEILING_NORTH_OR_SOUTH_LEG_2 + f Lnet/minecraft/class_265; field_16392 SHAPE_FLOOR_NORTH_SOUTH_LEG_2 + f Lnet/minecraft/class_265; field_16393 SHAPE_WALL_SOUTH_HOLDER_1 + f Lnet/minecraft/class_265; field_16338 SHAPE_FLOOR_EAST_WEST + f Lnet/minecraft/class_265; field_16368 SHAPE_WALL_NORTH_COMBINED +c net/minecraft/class_3713$1 net/minecraft/block/GrindstoneBlock$1 + f [I field_16402 field_222464_a +c net/minecraft/class_4865 net/minecraft/block/AbstractTopPlantBlock + m (Lnet/minecraft/class_2680;)Z method_24949 canGrowIn + m (Ljava/util/Random;)I method_26376 getGrowthAmount + f D field_22510 growthChance + f Lnet/minecraft/class_2758; field_22509 AGE +c net/minecraft/class_4864 net/minecraft/block/AbstractBodyPlantBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Ljava/util/Optional; method_25960 nextGrowPosition +c net/minecraft/class_2380 net/minecraft/block/HayBlock +c net/minecraft/class_2373 net/minecraft/block/BreakableBlock +c net/minecraft/class_2377 net/minecraft/block/HopperBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10217 updateState + f Lnet/minecraft/class_265; field_11123 NORTH_RAYTRACE_SHAPE + f Lnet/minecraft/class_265; field_11132 BASE_SHAPE + f Lnet/minecraft/class_2753; field_11129 FACING + f Lnet/minecraft/class_265; field_11133 EAST_RAYTRACE_SHAPE + f Lnet/minecraft/class_2746; field_11126 ENABLED + f Lnet/minecraft/class_265; field_11128 SOUTH_RAYTRACE_SHAPE + f Lnet/minecraft/class_265; field_11120 DOWN_SHAPE + f Lnet/minecraft/class_265; field_11131 INPUT_SHAPE + f Lnet/minecraft/class_265; field_11121 INPUT_MIDDLE_SHAPE + f Lnet/minecraft/class_265; field_11125 DOWN_RAYTRACE_SHAPE + f Lnet/minecraft/class_265; field_11127 MIDDLE_SHAPE + f Lnet/minecraft/class_265; field_11130 WEST_SHAPE + f Lnet/minecraft/class_265; field_11124 NORTH_SHAPE + f Lnet/minecraft/class_265; field_11135 WEST_RAYTRACE_SHAPE + f Lnet/minecraft/class_265; field_11134 EAST_SHAPE + f Lnet/minecraft/class_265; field_11122 SOUTH_SHAPE +c net/minecraft/class_2377$1 net/minecraft/block/HopperBlock$1 + f [I field_11136 field_200962_a +c net/minecraft/class_4622 net/minecraft/block/HoneyBlock + m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2338;)V method_24176 triggerSlideDownBlock + m (Lnet/minecraft/class_1297;)V method_24175 entitySlideParticles + m (Lnet/minecraft/class_1297;)Z method_24179 hasSlideEffects + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)Z method_23356 isSliding + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;)V method_24177 slideEffects + m (Lnet/minecraft/class_1297;)V method_24180 setSlideVelocity + m (Lnet/minecraft/class_1297;)V method_24178 livingSlideParticles + m (Lnet/minecraft/class_1297;I)V method_23355 slideParticles + f Lnet/minecraft/class_265; field_21213 SHAPES +c net/minecraft/class_2381 net/minecraft/block/HugeMushroomBlock + f Lnet/minecraft/class_2746; field_11166 UP + f Lnet/minecraft/class_2746; field_11171 NORTH + f Lnet/minecraft/class_2746; field_11169 DOWN + f Lnet/minecraft/class_2746; field_11172 EAST + f Lnet/minecraft/class_2746; field_11167 WEST + f Ljava/util/Map; field_11168 FACING_TO_PROPERTY_MAP + f Lnet/minecraft/class_2746; field_11170 SOUTH +c net/minecraft/class_2383 net/minecraft/block/HorizontalBlock + f Lnet/minecraft/class_2753; field_11177 HORIZONTAL_FACING +c net/minecraft/class_2384 net/minecraft/block/SilverfishBlock + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_24797 spawnSilverFish + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2680; method_10270 infest + m ()Lnet/minecraft/class_2248; method_10271 getMimickedBlock + m (Lnet/minecraft/class_2680;)Z method_10269 canContainSilverfish + f Lnet/minecraft/class_2248; field_11178 mimickedBlock + f Ljava/util/Map; field_11179 normalToInfectedMap +c net/minecraft/class_2386 net/minecraft/block/IceBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10275 turnIntoWater +c net/minecraft/class_3748 net/minecraft/block/JigsawBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_26378 getConnectingDirection + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_3751$class_4991; method_26377 func_235507_a_ + m (Lnet/minecraft/class_3499$class_3501;Lnet/minecraft/class_3499$class_3501;)Z method_16546 hasJigsawMatch + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_26379 getJigsawAlignmentDirection + f Lnet/minecraft/class_2754; field_23262 ORIENTATION +c net/minecraft/class_2389 net/minecraft/block/PaneBlock + m (Lnet/minecraft/class_2680;Z)Z method_10281 canAttachTo +c net/minecraft/class_2393 net/minecraft/block/KelpTopBlock + f Lnet/minecraft/class_265; field_11195 SHAPE +c net/minecraft/class_2387 net/minecraft/block/JukeboxBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10277 dropRecord + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1799;)V method_10276 insertRecord + f Lnet/minecraft/class_2746; field_11180 HAS_RECORD +c net/minecraft/class_2399 net/minecraft/block/LadderBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_10305 canAttachTo + f Lnet/minecraft/class_265; field_11252 LADDER_WEST_AABB + f Lnet/minecraft/class_2746; field_11257 WATERLOGGED + f Lnet/minecraft/class_265; field_11255 LADDER_EAST_AABB + f Lnet/minecraft/class_265; field_11256 LADDER_NORTH_AABB + f Lnet/minecraft/class_2753; field_11253 FACING + f Lnet/minecraft/class_265; field_11254 LADDER_SOUTH_AABB +c net/minecraft/class_2399$1 net/minecraft/block/LadderBlock$1 + f [I field_11258 field_180190_a +c net/minecraft/class_2391 net/minecraft/block/KelpBlock +c net/minecraft/class_2397 net/minecraft/block/LeavesBlock + m (Lnet/minecraft/class_2680;)I method_10302 getDistance + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_10300 updateDistance + f Lnet/minecraft/class_2746; field_11200 PERSISTENT + f Lnet/minecraft/class_2758; field_11199 DISTANCE +c net/minecraft/class_3749 net/minecraft/block/LanternBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_16370 getBlockConnected + f Lnet/minecraft/class_2746; field_16545 HANGING + f Lnet/minecraft/class_265; field_16546 GROUNDED_SHAPE + f Lnet/minecraft/class_2746; field_26441 WATERLOGGED + f Lnet/minecraft/class_265; field_16544 HANGING_SHAPES +c net/minecraft/class_3715 net/minecraft/block/LecternBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_17471 pulse + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_17474 notifyNeighbors + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_17473 setHasBook + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_17476 setPowered + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1799;)V method_17475 placeBook + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1799;)Z method_17472 tryPlaceBook + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17477 dropBook + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)V method_17470 openContainer + f Lnet/minecraft/class_265; field_17371 EAST_SHAPE + f Lnet/minecraft/class_265; field_17369 WEST_SHAPE + f Lnet/minecraft/class_265; field_17370 NORTH_SHAPE + f Lnet/minecraft/class_265; field_17368 COLLISION_SHAPE + f Lnet/minecraft/class_2746; field_17366 HAS_BOOK + f Lnet/minecraft/class_265; field_17367 TOP_PLATE_SHAPE + f Lnet/minecraft/class_2746; field_17365 POWERED + f Lnet/minecraft/class_265; field_16405 POST_SHAPE + f Lnet/minecraft/class_265; field_16403 COMMON_SHAPE + f Lnet/minecraft/class_265; field_16406 BASE_SHAPE + f Lnet/minecraft/class_2753; field_16404 FACING + f Lnet/minecraft/class_265; field_17372 SOUTH_SHAPE +c net/minecraft/class_3715$1 net/minecraft/block/LecternBlock$1 + f [I field_15363 field_222465_a +c net/minecraft/class_2404 net/minecraft/block/FlowingFluidBlock + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_10318 triggerMixEffects + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_10316 reactWithNeighbors + f Lnet/minecraft/class_2758; field_11278 LEVEL + f Ljava/util/List; field_11276 fluidStatesCache + f Lnet/minecraft/class_265; field_24412 LAVA_COLLISION_SHAPE + f Lnet/minecraft/class_3609; field_11279 fluid +c net/minecraft/class_2401 net/minecraft/block/LeverBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;F)V method_10308 addParticles + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10309 updateNeighbors + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_21846 setPowered + f Lnet/minecraft/class_265; field_11262 LEVER_EAST_AABB + f Lnet/minecraft/class_265; field_11263 LEVER_SOUTH_AABB + f Lnet/minecraft/class_265; field_11260 LEVER_WEST_AABB + f Lnet/minecraft/class_265; field_11267 LEVER_NORTH_AABB + f Lnet/minecraft/class_265; field_11266 CEILING_X_SHAPE + f Lnet/minecraft/class_265; field_11261 FLOOR_X_SHAPE + f Lnet/minecraft/class_265; field_11268 CEILING_Z_SHAPE + f Lnet/minecraft/class_265; field_11264 FLOOR_Z_SHAPE + f Lnet/minecraft/class_2746; field_11265 POWERED +c net/minecraft/class_2401$1 net/minecraft/block/LeverBlock$1 + f [I field_11270 field_180165_a + f [I field_11271 field_209401_a + f [I field_11269 field_208111_b +c net/minecraft/class_2402 net/minecraft/block/ILiquidContainer + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;)Z method_10311 receiveFluid + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3611;)Z method_10310 canContainFluid +c net/minecraft/class_2413 net/minecraft/block/MagmaBlock +c net/minecraft/class_2406 net/minecraft/block/LoomBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17478 func_220254_a + f Lnet/minecraft/class_2561; field_17373 CONTAINER_NAME +c net/minecraft/class_2415 net/minecraft/util/Mirror + m (Ljava/lang/String;)Lnet/minecraft/class_2415; valueOf valueOf + m ()Lnet/minecraft/class_4990; method_26380 getOrientation + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2470; method_10345 toRotation + m (II)I method_10344 mirrorRotation + m ()[Lnet/minecraft/class_2415; values values + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_10343 mirror + f Lnet/minecraft/class_4990; field_23263 orientation + f Lnet/minecraft/class_2415; field_11302 NONE + f [Lnet/minecraft/class_2415; field_11299 $VALUES + f Lnet/minecraft/class_2415; field_11300 LEFT_RIGHT + f Lnet/minecraft/class_2415; field_11301 FRONT_BACK +c net/minecraft/class_2415$1 net/minecraft/util/Mirror$1 + f [I field_11303 field_185799_a +c net/minecraft/class_2411 net/minecraft/block/MelonBlock +c net/minecraft/class_2418 net/minecraft/block/MyceliumBlock +c net/minecraft/class_2420 net/minecraft/block/MushroomBlock + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Random;)Z method_10349 grow + f Lnet/minecraft/class_265; field_11304 SHAPE +c net/minecraft/class_4772 net/minecraft/block/NetherSproutsBlock + f Lnet/minecraft/class_265; field_22136 SHAPE +c net/minecraft/class_2423 net/minecraft/block/NetherPortalBlock + f Lnet/minecraft/class_265; field_11308 Z_AABB + f Lnet/minecraft/class_2754; field_11310 AXIS + f Lnet/minecraft/class_265; field_11309 X_AABB +c net/minecraft/class_2423$1 net/minecraft/block/NetherPortalBlock$1 + f [I field_11320 field_185810_a + f [I field_11319 field_185811_b +c net/minecraft/class_2421 net/minecraft/block/NetherWartBlock + f Lnet/minecraft/class_2758; field_11306 AGE + f [Lnet/minecraft/class_265; field_11305 SHAPES +c net/minecraft/class_4949 net/minecraft/block/PlantBlockHelper + m (Lnet/minecraft/class_2680;)Z method_25961 isAir + m (Ljava/util/Random;)I method_26381 getGrowthAmount +c net/minecraft/class_2428 net/minecraft/block/NoteBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10367 triggerNote + f Lnet/minecraft/class_2758; field_11324 NOTE + f Lnet/minecraft/class_2746; field_11326 POWERED + f Lnet/minecraft/class_2754; field_11325 INSTRUMENT +c net/minecraft/class_4773 net/minecraft/block/NetherrackBlock +c net/minecraft/class_2426 net/minecraft/block/ObserverBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10365 updateNeighborsInFront + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_10366 startSignal + f Lnet/minecraft/class_2746; field_11322 POWERED +c net/minecraft/class_4849 net/minecraft/block/NyliumBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_24856 isDarkEnough +c net/minecraft/class_2429 net/minecraft/block/SixWayBlock + m (Ljava/util/EnumMap;)V method_10369 func_203421_a + m (Lnet/minecraft/class_2680;)I method_10368 getShapeIndex + m (F)[Lnet/minecraft/class_265; method_10370 makeShapes + f [Lnet/minecraft/class_2350; field_11334 FACING_VALUES + f Lnet/minecraft/class_2746; field_11327 UP + f Lnet/minecraft/class_2746; field_11331 SOUTH + f Lnet/minecraft/class_2746; field_11328 WEST + f Lnet/minecraft/class_2746; field_11335 EAST + f Ljava/util/Map; field_11329 FACING_TO_PROPERTY_MAP + f [Lnet/minecraft/class_265; field_11333 shapes + f Lnet/minecraft/class_2746; field_11330 DOWN + f Lnet/minecraft/class_2746; field_11332 NORTH +c net/minecraft/class_2431 net/minecraft/block/OreBlock + m (Ljava/util/Random;)I method_10398 getExperience +c net/minecraft/class_2433 net/minecraft/block/SkullWallPlayerBlock +c net/minecraft/class_2435 net/minecraft/block/SkullPlayerBlock +c net/minecraft/class_2436 net/minecraft/block/RedstoneBlock +c net/minecraft/class_2439 net/minecraft/block/PotatoBlock + f [Lnet/minecraft/class_265; field_11357 SHAPES +c net/minecraft/class_2440 net/minecraft/block/PressurePlateBlock + f Lnet/minecraft/class_2440$class_2441; field_11359 sensitivity + f Lnet/minecraft/class_2746; field_11358 POWERED +c net/minecraft/class_2440$class_2441 net/minecraft/block/PressurePlateBlock$Sensitivity + m (Ljava/lang/String;)Lnet/minecraft/class_2440$class_2441; valueOf valueOf + m ()[Lnet/minecraft/class_2440$class_2441; values values + f Lnet/minecraft/class_2440$class_2441; field_11361 EVERYTHING + f Lnet/minecraft/class_2440$class_2441; field_11362 MOBS + f [Lnet/minecraft/class_2440$class_2441; field_11363 $VALUES +c net/minecraft/class_2440$1 net/minecraft/block/PressurePlateBlock$1 + f [I field_11360 field_180127_a +c net/minecraft/class_2442 net/minecraft/block/PoweredRailBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;ZI)Z method_10413 findPoweredRailSignal + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ZILnet/minecraft/class_2768;)Z method_10414 isSamePoweredRail + f Lnet/minecraft/class_2754; field_11365 SHAPE + f Lnet/minecraft/class_2746; field_11364 POWERED +c net/minecraft/class_2442$1 net/minecraft/block/PoweredRailBlock$1 + f [I field_11368 field_208112_a + f [I field_11367 field_208113_b + f [I field_11366 field_208114_c +c net/minecraft/class_2443 net/minecraft/block/RailBlock + f Lnet/minecraft/class_2754; field_11369 SHAPE +c net/minecraft/class_2443$1 net/minecraft/block/RailBlock$1 + f [I field_11370 field_185818_c + f [I field_11372 field_208115_a + f [I field_11371 field_185817_b +c net/minecraft/class_2445 net/minecraft/block/PumpkinBlock + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20291 func_220282_a +c net/minecraft/class_2449 net/minecraft/block/RedstoneOreBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10441 activate + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10440 spawnParticles + f Lnet/minecraft/class_2746; field_11392 LIT +c net/minecraft/class_2452 net/minecraft/block/RailState + m (Lnet/minecraft/class_2338;)Z method_10465 canConnect + m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2452; method_10458 createForAdjacent + m ()I method_10460 countAdjacentRails + m (Lnet/minecraft/class_2768;)V method_10466 reset + m ()Ljava/util/List; method_10457 getConnectedRails + m (Lnet/minecraft/class_2452;)Z method_10455 canConnect + m (Lnet/minecraft/class_2452;)V method_10461 connect + m (Lnet/minecraft/class_2452;)Z method_10464 isConnectedTo + m (ZZLnet/minecraft/class_2768;)Lnet/minecraft/class_2452; method_10459 placeRail + m (Lnet/minecraft/class_2338;)Z method_10456 isAdjacentRail + m ()Lnet/minecraft/class_2680; method_10462 getNewState + m ()V method_10467 checkConnected + m (Lnet/minecraft/class_2338;)Z method_10463 isConnectedTo + f Lnet/minecraft/class_2680; field_11406 newState + f Lnet/minecraft/class_1937; field_11409 world + f Lnet/minecraft/class_2241; field_11411 block + f Lnet/minecraft/class_2338; field_11410 pos + f Z field_11408 disableCorners + f Ljava/util/List; field_11407 connectedRails +c net/minecraft/class_2452$1 net/minecraft/block/RailState$1 + f [I field_11412 field_208116_a +c net/minecraft/class_2457 net/minecraft/block/RedstoneWireBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_27844 updateNeighboursStateChange + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_27937 canPlaceOnTopOf + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10479 notifyWireNeighborsOfStateChange + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Z)Lnet/minecraft/class_2773; method_27841 recalculateSide + m (Lnet/minecraft/class_2680;)Z method_28483 areAllSidesInvalid + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_27845 getShapeForState + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)V method_28482 updateChangedConnections + m (I)I method_10487 getRGBByPower + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2773; method_10477 getSide + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_10482 canConnectTo + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_27843 recalculateFacingState + m (Lnet/minecraft/class_1937;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_1160;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;FF)V method_27936 spawnPoweredParticle + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_27840 getUpdatedState + m (Lnet/minecraft/class_2680;)Z method_27846 areAllSidesValid + m (Lnet/minecraft/class_2680;)Z method_10484 canConnectUpwardsTo + m (Lnet/minecraft/class_2680;)I method_10486 getPower + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10485 updatePower + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)I method_27842 getStrongestSignal + f Ljava/util/Map; field_11435 FACING_PROPERTY_MAP + f Lnet/minecraft/class_2680; field_24733 sideBaseState + f Lnet/minecraft/class_2754; field_11437 SOUTH + f Lnet/minecraft/class_2754; field_11436 EAST + f Ljava/util/Map; field_24414 SIDE_TO_SHAPE + f Lnet/minecraft/class_2754; field_11440 NORTH + f Z field_11438 canProvidePower + f [Lnet/minecraft/class_1160; field_24466 powerRGB + f Ljava/util/Map; field_24415 SIDE_TO_ASCENDING_SHAPE + f Ljava/util/Map; field_24416 stateToShapeMap + f Lnet/minecraft/class_265; field_24413 BASE_SHAPE + f Lnet/minecraft/class_2754; field_11439 WEST + f Lnet/minecraft/class_2758; field_11432 POWER +c net/minecraft/class_2457$1 net/minecraft/block/RedstoneWireBlock$1 + f [I field_11441 field_185820_b + f [I field_11442 field_185819_a + f [I field_24467 field_235558_a_ +c net/minecraft/class_2459 net/minecraft/block/RedstoneTorchBlock + m (Lnet/minecraft/class_1922;)Ljava/util/List; method_20453 func_220288_a + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)Z method_10489 isBurnedOut + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_10488 shouldBeOff + f Ljava/util/Map; field_11445 BURNED_TORCHES + f Lnet/minecraft/class_2746; field_11446 LIT +c net/minecraft/class_2459$class_2460 net/minecraft/block/RedstoneTorchBlock$Toggle + m (Lnet/minecraft/class_2459$class_2460;)Lnet/minecraft/class_2338; method_10492 access$100 + m (Lnet/minecraft/class_2459$class_2460;)J method_10491 access$000 + f J field_11447 time + f Lnet/minecraft/class_2338; field_11448 pos +c net/minecraft/class_2453 net/minecraft/block/RedstoneLampBlock + f Lnet/minecraft/class_2746; field_11413 LIT +c net/minecraft/class_2464 net/minecraft/block/BlockRenderType + m ()[Lnet/minecraft/class_2464; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2464; valueOf valueOf + f Lnet/minecraft/class_2464; field_11455 INVISIBLE + f [Lnet/minecraft/class_2464; field_11457 $VALUES + f Lnet/minecraft/class_2464; field_11458 MODEL + f Lnet/minecraft/class_2464; field_11456 ENTITYBLOCK_ANIMATED +c net/minecraft/class_2458 net/minecraft/block/RedstoneWallTorchBlock + f Lnet/minecraft/class_2753; field_11443 FACING + f Lnet/minecraft/class_2746; field_11444 REDSTONE_TORCH_LIT +c net/minecraft/class_4969 net/minecraft/block/RespawnAnchorBlock + m (Lnet/minecraft/class_1937;)Z method_27353 doesRespawnAnchorWork + m (Lnet/minecraft/class_2680;I)I method_26157 getChargeScale + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_26382 chargeAnchor + m (Lnet/minecraft/class_1799;)Z method_29289 isValidFuel + m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1937;)Z method_29560 isNearWater + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_29559 func_235563_a_ + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;)Ljava/util/Optional; method_26156 findRespawnPoint + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_29561 triggerExplosion + m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;Z)Ljava/util/Optional; method_30842 func_242678_a + m (Lnet/minecraft/class_2680;)Z method_29290 notFullyCharged + f Lcom/google/common/collect/ImmutableList; field_26443 field_242677_c + f Lcom/google/common/collect/ImmutableList; field_26442 field_242676_b + f Lnet/minecraft/class_2758; field_23153 CHARGES +c net/minecraft/class_4969$1 net/minecraft/block/RespawnAnchorBlock$1 + f Lnet/minecraft/class_2338; field_25404 field_235569_a_ + f Z field_25405 field_235570_b_ + f Lnet/minecraft/class_4969; field_25406 field_235571_c_ +c net/minecraft/class_2462 net/minecraft/block/RepeaterBlock + f Lnet/minecraft/class_2746; field_11452 LOCKED + f Lnet/minecraft/class_2758; field_11451 DELAY +c net/minecraft/class_2465 net/minecraft/block/RotatedPillarBlock + f Lnet/minecraft/class_2754; field_11459 AXIS +c net/minecraft/class_2465$1 net/minecraft/block/RotatedPillarBlock$1 + f [I field_11460 field_185828_b + f [I field_11461 field_185827_a +c net/minecraft/class_4774 net/minecraft/block/NetherRootsBlock + f Lnet/minecraft/class_265; field_22137 SHAPE +c net/minecraft/class_2468 net/minecraft/block/SandBlock + f I field_11462 dustColor +c net/minecraft/class_2470 net/minecraft/util/Rotation + m ()[Lnet/minecraft/class_2470; values values + m (Ljava/util/Random;)Ljava/util/List; method_16547 shuffledRotations + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_10503 rotate + m (II)I method_10502 rotate + m ()Lnet/minecraft/class_4990; method_26383 getOrientation + m (Ljava/util/Random;)Lnet/minecraft/class_2470; method_16548 randomRotation + m (Lnet/minecraft/class_2470;)Lnet/minecraft/class_2470; method_10501 add + m (Ljava/lang/String;)Lnet/minecraft/class_2470; valueOf valueOf + f [Lnet/minecraft/class_2470; field_11466 $VALUES + f Lnet/minecraft/class_2470; field_11465 COUNTERCLOCKWISE_90 + f Lnet/minecraft/class_2470; field_11464 CLOCKWISE_180 + f Lnet/minecraft/class_2470; field_11463 CLOCKWISE_90 + f Lnet/minecraft/class_2470; field_11467 NONE + f Lnet/minecraft/class_4990; field_23264 orientation +c net/minecraft/class_2470$1 net/minecraft/util/Rotation$1 + f [I field_11468 field_185829_a +c net/minecraft/class_3736 net/minecraft/block/ScaffoldingBlock + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;I)Z method_16373 hasScaffoldingBelow + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_16372 getDistance + f Lnet/minecraft/class_265; field_16494 TOP_SLAB_SHAPE + f Lnet/minecraft/class_265; field_16497 FULL_SHAPE + f Lnet/minecraft/class_2746; field_16547 BOTTOM + f Lnet/minecraft/class_265; field_17577 BOTTOM_SLAB_SHAPE + f Lnet/minecraft/class_2746; field_16496 WATERLOGGED + f Lnet/minecraft/class_2758; field_16495 DISTANCE + f Lnet/minecraft/class_265; field_17578 field_220124_g +c net/minecraft/class_2473 net/minecraft/block/SaplingBlock + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Random;)V method_10507 placeTree + f Lnet/minecraft/class_2758; field_11476 STAGE + f Lnet/minecraft/class_265; field_11478 SHAPE + f Lnet/minecraft/class_2647; field_11477 tree +c net/minecraft/class_2476 net/minecraft/block/SeaGrassBlock + f Lnet/minecraft/class_265; field_11485 SHAPE +c net/minecraft/class_2472 net/minecraft/block/SeaPickleBlock + m (Lnet/minecraft/class_2680;)Z method_10506 isInBadEnvironment + f Lnet/minecraft/class_265; field_11471 THREE_SHAPE + f Lnet/minecraft/class_265; field_11474 FOUR_SHAPE + f Lnet/minecraft/class_2746; field_11475 WATERLOGGED + f Lnet/minecraft/class_2758; field_11472 PICKLES + f Lnet/minecraft/class_265; field_11473 ONE_SHAPE + f Lnet/minecraft/class_265; field_11470 TWO_SHAPE +c net/minecraft/class_2478 net/minecraft/block/AbstractSignBlock + m ()Lnet/minecraft/class_4719; method_24025 getWoodType + f Lnet/minecraft/class_265; field_11492 SHAPE + f Lnet/minecraft/class_2746; field_11491 WATERLOGGED + f Lnet/minecraft/class_4719; field_21675 woodType +c net/minecraft/class_2480 net/minecraft/block/ShulkerBoxBlock + m (Lnet/minecraft/class_2627;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)V method_10524 func_220168_a + m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_1799; method_10529 getColoredItemStack + m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_2248; method_10525 getBlockByColor + m ()Lnet/minecraft/class_1767; method_10528 getColor + m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_1767; method_10526 getColorFromBlock + m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_1767; method_10527 getColorFromItem + f Lnet/minecraft/class_2754; field_11496 FACING + f Lnet/minecraft/class_2960; field_11495 CONTENTS + f Lnet/minecraft/class_1767; field_11494 color +c net/minecraft/class_2480$1 net/minecraft/block/ShulkerBoxBlock$1 + f [I field_11497 field_190992_a +c net/minecraft/class_2484 net/minecraft/block/SkullBlock + f Lnet/minecraft/class_265; field_11506 SHAPE + f Lnet/minecraft/class_2758; field_11505 ROTATION +c net/minecraft/class_2484$class_2485 net/minecraft/block/SkullBlock$ISkullType +c net/minecraft/class_2484$class_2486 net/minecraft/block/SkullBlock$Types + m ()[Lnet/minecraft/class_2484$class_2486; values values + m (Ljava/lang/String;)Lnet/minecraft/class_2484$class_2486; valueOf valueOf + f Lnet/minecraft/class_2484$class_2486; field_11510 PLAYER + f Lnet/minecraft/class_2484$class_2486; field_11513 WITHER_SKELETON + f Lnet/minecraft/class_2484$class_2486; field_11508 ZOMBIE + f [Lnet/minecraft/class_2484$class_2486; field_11509 $VALUES + f Lnet/minecraft/class_2484$class_2486; field_11507 CREEPER + f Lnet/minecraft/class_2484$class_2486; field_11512 SKELETON + f Lnet/minecraft/class_2484$class_2486; field_11511 DRAGON +c net/minecraft/class_3737 net/minecraft/block/IWaterLoggable +c net/minecraft/class_2490 net/minecraft/block/SlimeBlock + m (Lnet/minecraft/class_1297;)V method_21847 bounceEntity +c net/minecraft/class_2482 net/minecraft/block/SlabBlock + f Lnet/minecraft/class_2746; field_11502 WATERLOGGED + f Lnet/minecraft/class_265; field_11500 BOTTOM_SHAPE + f Lnet/minecraft/class_2754; field_11501 TYPE + f Lnet/minecraft/class_265; field_11499 TOP_SHAPE +c net/minecraft/class_2482$1 net/minecraft/block/SlabBlock$1 + f [I field_11503 field_210406_b + f [I field_11504 field_208121_a +c net/minecraft/class_3716 net/minecraft/block/SmokerBlock +c net/minecraft/class_3717 net/minecraft/block/SmithingTableBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_24950 func_235576_a_ + f Lnet/minecraft/class_2561; field_22511 CONTAINER_NAME +c net/minecraft/class_2493 net/minecraft/block/SnowyDirtBlock + f Lnet/minecraft/class_2746; field_11522 SNOWY +c net/minecraft/class_2488 net/minecraft/block/SnowBlock + f [Lnet/minecraft/class_265; field_11517 SHAPES + f Lnet/minecraft/class_2758; field_11518 LAYERS +c net/minecraft/class_2488$1 net/minecraft/block/SnowBlock$1 + f [I field_11519 field_210407_a +c net/minecraft/class_4775 net/minecraft/block/SoulFireBlock + m (Lnet/minecraft/class_2248;)Z method_26158 shouldLightSoulFire +c net/minecraft/class_2492 net/minecraft/block/SoulSandBlock + f Lnet/minecraft/class_265; field_11521 SHAPE +c net/minecraft/class_2496 net/minecraft/block/SpawnerBlock +c net/minecraft/class_2498 net/minecraft/block/SoundType + m ()Lnet/minecraft/class_3414; method_10593 getFallSound + m ()Lnet/minecraft/class_3414; method_10595 getBreakSound + m ()Lnet/minecraft/class_3414; method_10598 getPlaceSound + m ()F method_10599 getPitch + m ()Lnet/minecraft/class_3414; method_10596 getHitSound + m ()Lnet/minecraft/class_3414; method_10594 getStepSound + m ()F method_10597 getVolume + f Lnet/minecraft/class_2498; field_22147 NETHER_SPROUT + f Lnet/minecraft/class_2498; field_11529 GROUND + f F field_11539 pitch + f Lnet/minecraft/class_2498; field_22149 BONE + f Lnet/minecraft/class_2498; field_25183 LILY_PADS + f Lnet/minecraft/class_2498; field_17734 LANTERN + f Lnet/minecraft/class_2498; field_22145 NETHERRACK + f Lnet/minecraft/class_2498; field_17580 CROP + f Lnet/minecraft/class_2498; field_23083 VINE + f Lnet/minecraft/class_2498; field_24119 CHAIN + f Lnet/minecraft/class_2498; field_11543 CLOTH + f Lnet/minecraft/class_2498; field_22151 ANCIENT_DEBRIS + f Lnet/minecraft/class_2498; field_11533 METAL + f Lnet/minecraft/class_2498; field_22138 ROOT + f Lnet/minecraft/class_2498; field_11545 SLIME + f Lnet/minecraft/class_3414; field_11536 placeSound + f Lnet/minecraft/class_2498; field_11534 WET_GRASS + f Lnet/minecraft/class_2498; field_11532 LADDER + f Lnet/minecraft/class_3414; field_11546 breakSound + f Lnet/minecraft/class_2498; field_22153 NYLIUM + f Lnet/minecraft/class_2498; field_16498 SCAFFOLDING + f Lnet/minecraft/class_3414; field_11541 fallSound + f Lnet/minecraft/class_2498; field_22143 BASALT + f Lnet/minecraft/class_2498; field_22140 NETHER_VINE + f Lnet/minecraft/class_2498; field_22141 SOUL_SAND + f Lnet/minecraft/class_2498; field_11542 BAMBOO + f Lnet/minecraft/class_2498; field_11535 PLANT + f Lnet/minecraft/class_2498; field_17581 NETHER_WART + f Lnet/minecraft/class_2498; field_22148 NETHER_ORE + f F field_11540 volume + f Lnet/minecraft/class_2498; field_22144 WART + f Lnet/minecraft/class_2498; field_22146 NETHER_BRICK + f Lnet/minecraft/class_2498; field_11547 WOOD + f Lnet/minecraft/class_2498; field_18852 STEM + f Lnet/minecraft/class_2498; field_23265 LODESTONE + f Lnet/minecraft/class_2498; field_24120 NETHER_GOLD + f Lnet/minecraft/class_2498; field_11526 SAND + f Lnet/minecraft/class_2498; field_22150 NETHERITE + f Lnet/minecraft/class_2498; field_11544 STONE + f Lnet/minecraft/class_2498; field_22152 HYPHAE + f Lnet/minecraft/class_2498; field_11537 GLASS + f Lnet/minecraft/class_2498; field_22154 FUNGUS + f Lnet/minecraft/class_2498; field_22139 SHROOMLIGHT + f Lnet/minecraft/class_2498; field_21214 HONEY + f Lnet/minecraft/class_2498; field_24121 GILDED_BLACKSTONE + f Lnet/minecraft/class_2498; field_11548 SNOW + f Lnet/minecraft/class_3414; field_11527 stepSound + f Lnet/minecraft/class_2498; field_11531 ANVIL + f Lnet/minecraft/class_2498; field_22142 SOUL_SOIL + f Lnet/minecraft/class_2498; field_11538 BAMBOO_SAPLING + f Lnet/minecraft/class_2498; field_17579 SWEET_BERRY_BUSH + f Lnet/minecraft/class_3414; field_11530 hitSound + f Lnet/minecraft/class_2498; field_11528 CORAL + f Lnet/minecraft/class_2498; field_23082 NETHER_VINE_LOWER_PITCH +c net/minecraft/class_2500 net/minecraft/block/SpreadableSnowyDirtBlock + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_10614 isSnowyConditions + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_10613 isSnowyAndNotUnderwater +c net/minecraft/class_2502 net/minecraft/block/SpongeBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_10619 absorb + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10620 tryAbsorb +c net/minecraft/class_2504 net/minecraft/block/StainedGlassPaneBlock + f Lnet/minecraft/class_1767; field_11554 color +c net/minecraft/class_2506 net/minecraft/block/StainedGlassBlock + f Lnet/minecraft/class_1767; field_11558 color +c net/minecraft/class_2508 net/minecraft/block/StandingSignBlock + f Lnet/minecraft/class_2758; field_11559 ROTATION +c net/minecraft/class_2510 net/minecraft/block/StairsBlock + m (Lnet/minecraft/class_2680;)I method_10673 getPaletteId + m (I)[Lnet/minecraft/class_265; method_10677 func_199778_d + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;)[Lnet/minecraft/class_265; method_10672 makeShapes + m (Lnet/minecraft/class_2680;)Z method_10676 isBlockStairs + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_10678 isDifferentStairs + m (ILnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Lnet/minecraft/class_265; method_10671 combineShapes + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;I)Lnet/minecraft/class_265; method_10674 func_199780_a + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2778; method_10675 getShapeProperty + f Lnet/minecraft/class_265; field_11561 NWD_CORNER + f Lnet/minecraft/class_265; field_11578 SWD_CORNER + f Lnet/minecraft/class_2753; field_11571 FACING + f Lnet/minecraft/class_265; field_11576 AABB_SLAB_BOTTOM + f Lnet/minecraft/class_265; field_11562 AABB_SLAB_TOP + f Lnet/minecraft/class_2754; field_11565 SHAPE + f Lnet/minecraft/class_2754; field_11572 HALF + f [I field_11570 PALETTE_SHAPE_MAP + f Lnet/minecraft/class_265; field_11575 NED_CORNER + f Lnet/minecraft/class_2680; field_11574 modelState + f Lnet/minecraft/class_265; field_11563 SWU_CORNER + f Lnet/minecraft/class_265; field_11568 NWU_CORNER + f [Lnet/minecraft/class_265; field_11564 SLAB_BOTTOM_SHAPES + f Lnet/minecraft/class_265; field_11567 SEU_CORNER + f [Lnet/minecraft/class_265; field_11566 SLAB_TOP_SHAPES + f Lnet/minecraft/class_265; field_11569 SED_CORNER + f Lnet/minecraft/class_2248; field_11579 modelBlock + f Lnet/minecraft/class_265; field_11577 NEU_CORNER + f Lnet/minecraft/class_2746; field_11573 WATERLOGGED +c net/minecraft/class_2510$1 net/minecraft/block/StairsBlock$1 + f [I field_11580 field_185869_c + f [I field_11581 field_208122_a +c net/minecraft/class_2511 net/minecraft/block/StemGrownBlock + m ()Lnet/minecraft/class_2195; method_10680 getAttachedStem + m ()Lnet/minecraft/class_2513; method_10679 getStem +c net/minecraft/class_2513 net/minecraft/block/StemBlock + m ()Lnet/minecraft/class_1792; method_10695 getSeedItem + m ()Lnet/minecraft/class_2511; method_10694 getCrop + f [Lnet/minecraft/class_265; field_11583 SHAPES + f Lnet/minecraft/class_2511; field_11585 crop + f Lnet/minecraft/class_2758; field_11584 AGE +c net/minecraft/class_3718 net/minecraft/block/StonecutterBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17896 func_220283_a + f Lnet/minecraft/class_2561; field_17650 CONTAINER_NAME + f Lnet/minecraft/class_265; field_16407 SHAPE + f Lnet/minecraft/class_2753; field_17649 FACING +c net/minecraft/class_2517 net/minecraft/block/StoneButtonBlock +c net/minecraft/class_2518 net/minecraft/block/StructureVoidBlock + f Lnet/minecraft/class_265; field_11589 SHAPE +c net/minecraft/class_2515 net/minecraft/block/StructureBlock + m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2633;)V method_10703 execute + f Lnet/minecraft/class_2754; field_11586 MODE +c net/minecraft/class_2515$1 net/minecraft/block/StructureBlock$1 + f [I field_11587 field_208123_a +c net/minecraft/class_5431 net/minecraft/util/BlockVoxelShape + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_30367 func_241854_a + m (Ljava/lang/String;)Lnet/minecraft/class_5431; valueOf valueOf + m ()[Lnet/minecraft/class_5431; values values + f Lnet/minecraft/class_5431; field_25822 FULL + f Lnet/minecraft/class_5431; field_25823 CENTER + f [Lnet/minecraft/class_5431; field_25825 $VALUES + f Lnet/minecraft/class_5431; field_25824 RIGID +c net/minecraft/class_5431$1 net/minecraft/util/BlockVoxelShape$1 +c net/minecraft/class_5431$2 net/minecraft/util/BlockVoxelShape$2 + f I field_25826 field_242680_d + f Lnet/minecraft/class_265; field_25827 field_242681_e +c net/minecraft/class_5431$3 net/minecraft/util/BlockVoxelShape$3 + f Lnet/minecraft/class_265; field_25829 field_242683_e + f I field_25828 field_242682_d +c net/minecraft/class_2523 net/minecraft/block/SugarCaneBlock + f Lnet/minecraft/class_265; field_11611 SHAPE + f Lnet/minecraft/class_2758; field_11610 AGE +c net/minecraft/class_2521 net/minecraft/block/TallFlowerBlock +c net/minecraft/class_3830 net/minecraft/block/SweetBerryBushBlock + f Lnet/minecraft/class_2758; field_17000 AGE + f Lnet/minecraft/class_265; field_17002 GROWING_SHAPE + f Lnet/minecraft/class_265; field_17001 BUSHLING_SHAPE +c net/minecraft/class_2525 net/minecraft/block/TallSeaGrassBlock + f Lnet/minecraft/class_2754; field_11616 HALF + f Lnet/minecraft/class_265; field_11615 SHAPE +c net/minecraft/class_2526 net/minecraft/block/TallGrassBlock + f Lnet/minecraft/class_265; field_11617 SHAPE +c net/minecraft/class_2530 net/minecraft/block/TNTBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)V method_10737 explode + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10738 explode + m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20292 func_220287_a + f Lnet/minecraft/class_2746; field_11621 UNSTABLE +c net/minecraft/class_4850 net/minecraft/block/TargetBlock + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2680;ILnet/minecraft/class_2338;I)V method_24857 powerTarget + m (Lnet/minecraft/class_3965;Lnet/minecraft/class_243;)I method_24859 getPowerFromHitVec + m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2680;Lnet/minecraft/class_3965;Lnet/minecraft/class_1297;)I method_24858 getPowerFromHitVec + f Lnet/minecraft/class_2758; field_22428 POWER +c net/minecraft/class_2533 net/minecraft/block/TrapDoorBlock + m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)V method_10740 playSound + f Lnet/minecraft/class_2746; field_11626 WATERLOGGED + f Lnet/minecraft/class_2754; field_11625 HALF + f Lnet/minecraft/class_265; field_11627 EAST_OPEN_AABB + f Lnet/minecraft/class_265; field_11628 TOP_AABB + f Lnet/minecraft/class_265; field_11633 NORTH_OPEN_AABB + f Lnet/minecraft/class_265; field_11632 BOTTOM_AABB + f Lnet/minecraft/class_2746; field_11629 POWERED + f Lnet/minecraft/class_265; field_11624 SOUTH_OPEN_AABB + f Lnet/minecraft/class_2746; field_11631 OPEN + f Lnet/minecraft/class_265; field_11630 WEST_OPEN_AABB +c net/minecraft/class_2533$1 net/minecraft/block/TrapDoorBlock$1 + f [I field_11634 field_210408_b + f [I field_11635 field_177058_a +c net/minecraft/class_2527 net/minecraft/block/TorchBlock + f Lnet/minecraft/class_2394; field_22155 particleData + f Lnet/minecraft/class_265; field_11618 SHAPE +c net/minecraft/class_2531 net/minecraft/block/TrappedChestBlock + m ()Lnet/minecraft/class_2591; method_24181 func_226952_e_ +c net/minecraft/class_2537 net/minecraft/block/TripWireHookBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)V method_10775 notifyNeighbors + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;ZZILnet/minecraft/class_2680;)V method_10776 calculateState + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ZZZZ)V method_10777 playSound + f Lnet/minecraft/class_2746; field_11671 POWERED + f Lnet/minecraft/class_265; field_11667 HOOK_EAST_AABB + f Lnet/minecraft/class_265; field_11670 HOOK_WEST_AABB + f Lnet/minecraft/class_2753; field_11666 FACING + f Lnet/minecraft/class_265; field_11668 HOOK_SOUTH_AABB + f Lnet/minecraft/class_265; field_11665 HOOK_NORTH_AABB + f Lnet/minecraft/class_2746; field_11669 ATTACHED +c net/minecraft/class_2537$1 net/minecraft/block/TripWireHookBlock$1 + f [I field_11672 field_177056_a +c net/minecraft/class_2538 net/minecraft/block/TripWireBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10779 notifyHook + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_10778 shouldConnectTo + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10780 updateState + f Ljava/util/Map; field_11676 FACING_TO_PROPERTY_MAP + f Lnet/minecraft/class_2746; field_11675 NORTH + f Lnet/minecraft/class_2746; field_11673 EAST + f Lnet/minecraft/class_265; field_11681 TRIP_WRITE_ATTACHED_AABB + f Lnet/minecraft/class_2746; field_11679 DISARMED + f Lnet/minecraft/class_265; field_11682 AABB + f Lnet/minecraft/class_2746; field_11683 ATTACHED + f Lnet/minecraft/class_2746; field_11680 POWERED + f Lnet/minecraft/class_2746; field_11674 WEST + f Lnet/minecraft/class_2537; field_11677 hook + f Lnet/minecraft/class_2746; field_11678 SOUTH +c net/minecraft/class_2538$1 net/minecraft/block/TripWireBlock$1 + f [I field_11685 field_185874_a + f [I field_11684 field_185875_b +c net/minecraft/class_4777 net/minecraft/block/TwistingVinesTopBlock + f Lnet/minecraft/class_265; field_22172 SHAPE +c net/minecraft/class_2542 net/minecraft/block/TurtleEggBlock + m (Lnet/minecraft/class_1937;)Z method_10832 canGrow + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;I)V method_10834 tryTrample + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_10831 hasProperHabitat + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10833 removeOneEgg + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_29952 isProperHabitat + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;)Z method_10835 canTrample + f Lnet/minecraft/class_265; field_11709 MULTI_EGG_SHAPE + f Lnet/minecraft/class_265; field_11712 ONE_EGG_SHAPE + f Lnet/minecraft/class_2758; field_11711 HATCH + f Lnet/minecraft/class_2758; field_11710 EGGS +c net/minecraft/class_2541 net/minecraft/block/VineBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_31018 getShapeForState + m (Lnet/minecraft/class_2680;)Z method_10823 getBlocksAttachedTo + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_10824 hasVineBelow + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_10827 func_196545_h + m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2746; method_10828 getPropertyFor + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_10829 hasAttachment + m (Lnet/minecraft/class_2680;)I method_10822 countBlocksVineIsAttachedTo + m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_10821 canAttachTo + m (Ljava/util/Map$Entry;)Z method_10826 func_199782_a + m (Lnet/minecraft/class_2680;)Z method_10830 isFacingCardinal + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Ljava/util/Random;)Lnet/minecraft/class_2680; method_10820 func_196544_a + f Ljava/util/Map; field_26659 stateToShapeMap + f Ljava/util/Map; field_11697 FACING_TO_PROPERTY_MAP + f Lnet/minecraft/class_2746; field_11696 WEST + f Lnet/minecraft/class_265; field_11700 NORTH_AABB + f Lnet/minecraft/class_265; field_11701 SOUTH_AABB + f Lnet/minecraft/class_2746; field_11699 SOUTH + f Lnet/minecraft/class_265; field_11705 WEST_AABB + f Lnet/minecraft/class_265; field_11704 EAST_AABB + f Lnet/minecraft/class_2746; field_11702 EAST + f Lnet/minecraft/class_2746; field_11703 UP + f Lnet/minecraft/class_2746; field_11706 NORTH + f Lnet/minecraft/class_265; field_11698 UP_AABB +c net/minecraft/class_2541$1 net/minecraft/block/VineBlock$1 + f [I field_11708 field_185876_b + f [I field_11707 field_185877_c +c net/minecraft/class_4950 net/minecraft/block/TwistingVinesBlock + f Lnet/minecraft/class_265; field_23325 SHAPE +c net/minecraft/class_2544 net/minecraft/block/WallBlock + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_24421 func_235625_a_ + m (Lnet/minecraft/class_2680;ZLnet/minecraft/class_2350;)Z method_16704 shouldConnect + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_265;)Z method_27092 func_235628_a_ + m (Lnet/minecraft/class_265;Lnet/minecraft/class_4778;Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Lnet/minecraft/class_265; method_24426 getHeightAlteredShape + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;)Z method_24424 hasHeightForProperty + m (FFFFFF)Ljava/util/Map; method_24420 makeShapes + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;ZZZZ)Lnet/minecraft/class_2680; method_24422 func_235626_a_ + m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Z method_24427 compareShapes + m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2680; method_24423 func_235627_a_ + m (Lnet/minecraft/class_2680;ZZZZLnet/minecraft/class_265;)Lnet/minecraft/class_2680; method_24425 func_235630_a_ + m (ZLnet/minecraft/class_265;Lnet/minecraft/class_265;)Lnet/minecraft/class_4778; method_24428 func_235633_a_ + f Lnet/minecraft/class_2746; field_11717 UP + f Lnet/minecraft/class_2754; field_22157 WALL_HEIGHT_NORTH + f Lnet/minecraft/class_2754; field_22156 WALL_HEIGHT_EAST + f Lnet/minecraft/class_2746; field_22160 WATERLOGGED + f Lnet/minecraft/class_265; field_22165 WALL_CONNECTION_SOUTH_SIDE_SHAPE + f Lnet/minecraft/class_265; field_22164 WALL_CONNECTION_NORTH_SIDE_SHAPE + f Lnet/minecraft/class_265; field_22163 CENTER_POLE_SHAPE + f Lnet/minecraft/class_2754; field_22159 WALL_HEIGHT_WEST + f Lnet/minecraft/class_2754; field_22158 WALL_HEIGHT_SOUTH + f Lnet/minecraft/class_265; field_22167 WALL_CONNECTION_EAST_SIDE_SHAPE + f Ljava/util/Map; field_22161 stateToShapeMap + f Lnet/minecraft/class_265; field_22166 WALL_CONNECTION_WEST_SIDE_SHAPE + f Ljava/util/Map; field_22162 stateToCollisionShapeMap +c net/minecraft/class_2544$1 net/minecraft/block/WallBlock$1 + f [I field_22168 field_235634_a_ + f [I field_22169 field_235635_b_ +c net/minecraft/class_2546 net/minecraft/block/WallBannerBlock + f Lnet/minecraft/class_2753; field_11722 HORIZONTAL_FACING + f Ljava/util/Map; field_11723 BANNER_SHAPES +c net/minecraft/class_2549 net/minecraft/block/WallSkullBlock + f Ljava/util/Map; field_11725 SHAPES + f Lnet/minecraft/class_2753; field_11724 FACING +c net/minecraft/class_2551 net/minecraft/block/WallSignBlock + f Lnet/minecraft/class_2753; field_11726 FACING + f Ljava/util/Map; field_11727 SHAPES +c net/minecraft/class_2553 net/minecraft/block/LilyPadBlock + f Lnet/minecraft/class_265; field_11728 LILY_PAD_AABB +c net/minecraft/class_2555 net/minecraft/block/WallTorchBlock + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_10841 getShapeForState + f Ljava/util/Map; field_11732 SHAPES + f Lnet/minecraft/class_2753; field_11731 HORIZONTAL_FACING +c net/minecraft/class_4776 net/minecraft/block/WeepingVinesTopBlock + f Lnet/minecraft/class_265; field_22171 SHAPE +c net/minecraft/class_2560 net/minecraft/block/WebBlock +c net/minecraft/class_2557 net/minecraft/block/WeightedPressurePlateBlock + f Lnet/minecraft/class_2758; field_11739 POWER + f I field_11738 maxWeight +c net/minecraft/class_4951 net/minecraft/block/WeepingVinesBlock + f Lnet/minecraft/class_265; field_23326 SHAPE +c net/minecraft/class_2563 net/minecraft/block/WitherRoseBlock +c net/minecraft/class_2565 net/minecraft/block/WetSpongeBlock +c net/minecraft/class_2567 net/minecraft/block/WitherSkeletonWallSkullBlock +c net/minecraft/class_2570 net/minecraft/block/WitherSkeletonSkullBlock + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)Z method_10899 canSpawnMob + m ()Lnet/minecraft/class_2700; method_10897 getOrCreateWitherBase + m (Lnet/minecraft/class_2694;)Z method_24798 func_235638_a_ + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2631;)V method_10898 checkWitherSpawn + m ()Lnet/minecraft/class_2700; method_10900 getOrCreateWitherFull + m (Lnet/minecraft/class_2694;)Z method_24799 func_235639_b_ + f Lnet/minecraft/class_2700; field_11764 witherPatternBase + f Lnet/minecraft/class_2700; field_11765 witherPatternFull +c net/minecraft/class_2577 net/minecraft/block/CarpetBlock + m ()Lnet/minecraft/class_1767; method_10925 getColor + f Lnet/minecraft/class_265; field_11783 SHAPE + f Lnet/minecraft/class_1767; field_11784 color +c com/mojang/blaze3d/systems/RenderSystem com/mojang/blaze3d/systems/RenderSystem + m (FFF)V translatef translatef + m (Lnet/minecraft/class_4493$class_1030;)V logicOp logicOp + m (I)V lambda$shadeModel$25 func_229924_lam_ + m (Lnet/minecraft/class_4493$class_1028;)V fogMode fogMode + m ()I maxSupportedTextureSize maxSupportedTextureSize + m (I)V fogMode fogMode + m (II)V lambda$fogi$17 func_229883_lam_ + m (II)V colorMaterial colorMaterial + m (F)V fogEnd fogEnd + m (FFF)V lambda$translatef$40 func_229926_lam_ + m (IZLjava/nio/FloatBuffer;)V glUniformMatrix2 glUniformMatrix2 + m ()V replayQueue replayQueue + m (IZ)V lambda$clear$34 func_229884_lam_ + m ()V enableAlphaTest enableAlphaTest + m ()V pushLightingAttributes pushLightingAttributes + m (FFF)V normal3f normal3f + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V lambda$setupGuiFlatDiffuseLighting$69 func_231419_lam_ + m (I)V deleteTexture deleteTexture + m (IIIIIILjava/nio/ByteBuffer;)V lambda$readPixels$49 func_229923_lam_ + m ()V disableCull disableCull + m ()V enableDepthTest enableDepthTest + m (FFFF)V lambda$rotatef$37 func_229895_lam_ + m (DDDDDD)V lambda$ortho$36 func_229885_lam_ + m (IIIIIILjava/nio/ByteBuffer;)V readPixels readPixels + m ()V disableColorMaterial disableColorMaterial + m ()V defaultAlphaFunc defaultAlphaFunc + m (F)V lambda$lineWidth$46 func_229905_lam_ + m ()V setupOutline setupOutline + m (I)V lambda$matrixMode$35 func_229920_lam_ + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V lambda$setupGui3DDiffuseLighting$70 func_231417_lam_ + m (FF)V polygonOffset polygonOffset + m ()V loadIdentity loadIdentity + m (I)V bindTexture bindTexture + m ()Z isInInitPhase isInInitPhase + m (IZLjava/nio/FloatBuffer;)V lambda$glUniformMatrix2$64 func_229945_lam_ + m (IFFFF)V lambda$fog$16 func_229882_lam_ + m ()V enableTexture enableTexture + m (FFFF)V clearColor clearColor + m (F)V fogDensity fogDensity + m (II)V lambda$polygonMode$18 func_229929_lam_ + m ()Ljava/lang/String; getApiDescription getApiDescription + m ()V enableCull enableCull + m (FFF)V lambda$scalef$38 func_229888_lam_ + m (Lnet/minecraft/class_4493$class_1030;)V lambda$logicOp$20 func_229893_lam_ + m (I)V depthFunc depthFunc + m ()V beginInitialization beginInitialization + m (ILjava/nio/IntBuffer;)V lambda$glUniform3$58 func_229916_lam_ + m ()V enableColorMaterial enableColorMaterial + m (DDD)V translated translated + m (FF)V lambda$polygonOffset$19 func_229940_lam_ + m (IZLjava/nio/FloatBuffer;)V glUniformMatrix4 glUniformMatrix4 + m (I)V stencilMask stencilMask + m ()V teardownOutline teardownOutline + m (Lnet/minecraft/class_1159;)V multMatrix multMatrix + m (IZ)V clear clear + m (ILjava/util/function/Supplier;)V glBindBuffer glBindBuffer + m (I)V lambda$clearStencil$33 func_229933_lam_ + m ()V enableLighting enableLighting + m (III)V lambda$stencilFunc$28 func_229930_lam_ + m (ILjava/nio/IntBuffer;)V glUniform2 glUniform2 + m ()V disableColorLogicOp disableColorLogicOp + m (FFFF)V rotatef rotatef + m (ILjava/nio/FloatBuffer;)V lambda$glUniform3$62 func_229917_lam_ + m (Ljava/util/function/Consumer;)V glGenBuffers glGenBuffers + m (I)V clearStencil clearStencil + m (ILjava/nio/IntBuffer;)V lambda$glUniform4$59 func_229918_lam_ + m (Z)V initGameThread initGameThread + m (IZLjava/nio/FloatBuffer;)V glUniformMatrix3 glUniformMatrix3 + m (FFFF)V lambda$clearColor$32 func_229908_lam_ + m (IZLjava/nio/FloatBuffer;)V lambda$glUniformMatrix4$66 func_229947_lam_ + m (Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;)V blendFunc blendFunc + m ()Lnet/minecraft/class_289; renderThreadTesselator renderThreadTesselator + m (III)V lambda$drawArrays$45 func_229910_lam_ + m ()Z isOnRenderThreadOrInit isOnRenderThreadOrInit + m (I)V renderCrosshair renderCrosshair + m (ILjava/nio/IntBuffer;)V glUniform1 glUniform1 + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V setupGuiFlatDiffuseLighting setupGuiFlatDiffuseLighting + m (FFF)V lambda$normal3f$2 func_229894_lam_ + m ()V disableLineOffset disableLineOffset + m (ZZZZ)V colorMask colorMask + m (F)V lambda$fogDensity$13 func_229911_lam_ + m (D)V lambda$clearDepth$31 func_229909_lam_ + m ()V mulTextureByProjModelView mulTextureByProjModelView + m (DDD)V lambda$scaled$39 func_229887_lam_ + m (I)V glDeleteBuffers glDeleteBuffers + m (ILjava/nio/IntBuffer;)V lambda$glUniform1$56 func_229912_lam_ + m ()V clearCurrentColor clearCurrentColor + m (II)V glUniform1i glUniform1i + m (III)V lambda$stencilOp$30 func_229906_lam_ + m ()V enableBlend enableBlend + m (I)V lambda$fogMode$12 func_229892_lam_ + m (IFF)V glMultiTexCoord2f glMultiTexCoord2f + m (Ljava/util/function/IntSupplier;I)V lambda$setupOverlayColor$67 func_229949_lam_ + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;Lnet/minecraft/class_1159;)V setupLevelDiffuseLighting setupLevelDiffuseLighting + m (II)V lambda$pixelStore$47 func_229922_lam_ + m (ILjava/nio/FloatBuffer;)V glUniform2 glUniform2 + m (ILjava/util/function/Consumer;)V getString getString + m ()V finishInitialization finishInitialization + m ()Z isOnGameThread isOnGameThread + m (DDD)V lambda$translated$41 func_229925_lam_ + m (ILjava/util/function/Consumer;)V lambda$getString$50 func_229904_lam_ + m (F)V lambda$fogEnd$15 func_229886_lam_ + m (Lnet/minecraft/class_1159;)V lambda$multMatrix$42 func_229921_lam_ + m (ILjava/nio/IntBuffer;)V glUniform4 glUniform4 + m (Ljava/lang/Runnable;)V runAsFancy runAsFancy + m ()Ljava/lang/String; getBackendDescription getBackendDescription + m ()V enableColorLogicOp enableColorLogicOp + m ()V clearTexGen clearTexGen + m ()V popMatrix popMatrix + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;Lnet/minecraft/class_1159;)V lambda$setupLevelDiffuseLighting$68 func_231418_lam_ + m ()V disableAlphaTest disableAlphaTest + m (ILjava/nio/ByteBuffer;I)V glBufferData glBufferData + m (I)V lambda$deleteTexture$23 func_229938_lam_ + m ()V enablePolygonOffset enablePolygonOffset + m (Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;)V lambda$blendFuncSeparate$7 func_229943_lam_ + m ()V disableTexture disableTexture + m ()V disableDepthTest disableDepthTest + m (II)V pixelStore pixelStore + m (F)V lambda$fogStart$14 func_229901_lam_ + m (II)V blendFunc blendFunc + m (IZLjava/nio/FloatBuffer;)V lambda$glUniformMatrix3$65 func_229946_lam_ + m (I)V lambda$bindTexture$24 func_229927_lam_ + m (IIII)V setupDefaultState setupDefaultState + m (IF)V pixelTransfer pixelTransfer + m ()V pushMatrix pushMatrix + m (F)V lineWidth lineWidth + m (Ljava/util/function/Supplier;)V assertThread assertThread + m (III)V lambda$texParameter$22 func_229936_lam_ + m (I)V lambda$blendEquation$9 func_229932_lam_ + m ()V enableFog enableFog + m ()V disablePolygonOffset disablePolygonOffset + m (ILjava/nio/FloatBuffer;)V glUniform1 glUniform1 + m (J)V flipFrame flipFrame + m (II)V polygonMode polygonMode + m (I)V lambda$stencilMask$29 func_229931_lam_ + m (IIII)V blendFuncSeparate blendFuncSeparate + m ()V popAttributes popAttributes + m (ILjava/nio/IntBuffer;)V glUniform3 glUniform3 + m (III)V drawArrays drawArrays + m ()V setupEndPortalTexGen setupEndPortalTexGen + m (ZZZZ)V lambda$colorMask$27 func_229903_lam_ + m (ILjava/nio/FloatBuffer;)V lambda$glUniform2$61 func_229915_lam_ + m (Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;)V lambda$blendFunc$5 func_229897_lam_ + m (Ljava/util/function/Consumer;)V lambda$glGenBuffers$71 func_231416_lam_ + m (FFFF)V blendColor blendColor + m (Lorg/lwjgl/glfw/GLFWErrorCallbackI;)V setErrorCallback setErrorCallback + m ()Z isOnRenderThread isOnRenderThread + m (D)V clearDepth clearDepth + m (IF)V alphaFunc alphaFunc + m (Ljava/util/function/IntSupplier;I)V setupOverlayColor setupOverlayColor + m (I)V matrixMode matrixMode + m ()Z isOnGameThreadOrInit isOnGameThreadOrInit + m (IFFFF)V fog fog + m ()V pushTextureAttributes pushTextureAttributes + m (I)V activeTexture activeTexture + m (DDDDDD)V ortho ortho + m (IIII)V lambda$blendFuncSeparate$8 func_229944_lam_ + m ()V enableRescaleNormal enableRescaleNormal + m (FFFF)V color4f color4f + m (ILjava/nio/FloatBuffer;)V glUniform4 glUniform4 + m (I)V blendEquation blendEquation + m (Z)V lambda$depthMask$4 func_229900_lam_ + m (I)V lambda$depthFunc$3 func_229899_lam_ + m (II)V lambda$blendFunc$6 func_229898_lam_ + m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V setupGui3DDiffuseLighting setupGui3DDiffuseLighting + m ()Ljava/lang/String; getCapsString getCapsString + m (FFFF)V lambda$color4f$43 func_229890_lam_ + m (F)V fogStart fogStart + m (ILjava/nio/FloatBuffer;)V lambda$glUniform1$60 func_229913_lam_ + m (I)V lambda$glDeleteBuffers$54 func_229941_lam_ + m ()Ljava/util/function/LongSupplier; initBackendSystem initBackendSystem + m (II)V lambda$glUniform1i$55 func_229928_lam_ + m (ILjava/nio/IntBuffer;)V lambda$glUniform2$57 func_229914_lam_ + m ()V disableFog disableFog + m (DDD)V scaled scaled + m (II)V lambda$colorMaterial$1 func_229934_lam_ + m (IF)V lambda$alphaFunc$0 func_229896_lam_ + m (Z)V depthMask depthMask + m (IIII)V lambda$viewport$26 func_229902_lam_ + m (ILjava/nio/FloatBuffer;)V glUniform3 glUniform3 + m (III)V stencilFunc stencilFunc + m (Lnet/minecraft/class_4573;)V recordRenderCall recordRenderCall + m (Lnet/minecraft/class_4493$class_1028;)V lambda$fogMode$11 func_229891_lam_ + m ()V disableBlend disableBlend + m ()V enableLineOffset enableLineOffset + m (IF)V lambda$pixelTransfer$48 func_229939_lam_ + m (IFF)V lambda$glMultiTexCoord2f$52 func_229948_lam_ + m (III)V texParameter texParameter + m (FFF)V scalef scalef + m ()V initRenderThread initRenderThread + m (FFFF)V lambda$blendColor$10 func_229907_lam_ + m (I)V lambda$activeTexture$21 func_229937_lam_ + m (I)V shadeModel shadeModel + m (III)V stencilOp stencilOp + m (FFF)V lambda$color3f$44 func_229889_lam_ + m (IIII)V viewport viewport + m ()V teardownOverlayColor teardownOverlayColor + m ()V defaultBlendFunc defaultBlendFunc + m (I)V lambda$renderCrosshair$51 func_229942_lam_ + m (ILjava/util/function/Supplier;)V lambda$glBindBuffer$53 func_229935_lam_ + m (Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;)V blendFuncSeparate blendFuncSeparate + m (ILjava/nio/FloatBuffer;)V lambda$glUniform4$63 func_229919_lam_ + m ()V setupNvFogDistance setupNvFogDistance + m (IZ)V initRenderer initRenderer + m ()V disableRescaleNormal disableRescaleNormal + m ()V disableLighting disableLighting + m (I)V limitDisplayFPS limitDisplayFPS + m (FFF)V color3f color3f + m (II)V fogi fogi + f D lastDrawTime lastDrawTime + f I MAX_SUPPORTED_TEXTURE_SIZE MAX_SUPPORTED_TEXTURE_SIZE + f Ljava/lang/Thread; gameThread gameThread + f Ljava/util/concurrent/ConcurrentLinkedQueue; recordingQueue recordingQueue + f Ljava/lang/Thread; renderThread renderThread + f F DEFAULTALPHACUTOFF DEFAULTALPHACUTOFF + f Lnet/minecraft/class_289; RENDER_THREAD_TESSELATOR RENDER_THREAD_TESSELATOR + f I MINIMUM_ATLAS_TEXTURE_SIZE MINIMUM_ATLAS_TEXTURE_SIZE + f Lorg/apache/logging/log4j/Logger; LOGGER LOGGER + f Z isReplayingQueue isReplayingQueue + f Z isInInit isInInit +c net/minecraft/class_2571 net/minecraft/block/WoodButtonBlock +c net/minecraft/class_2573 net/minecraft/tileentity/BannerTileEntity + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1799; method_10907 getItem + m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2499; method_24281 getPatternData + m (Lnet/minecraft/class_1799;)I method_10910 getPatterns + m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_10906 func_211121_b + m (Lnet/minecraft/class_2561;)V method_16842 setName + m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1767;)V method_10913 loadFromItemStack + m (Lnet/minecraft/class_1767;Lnet/minecraft/class_2499;)Ljava/util/List; method_24280 getPatternColorData + m ()Ljava/util/List; method_10911 getPatternList + m (Ljava/util/function/Supplier;)Lnet/minecraft/class_1767; method_10908 getBaseColor + m (Lnet/minecraft/class_1799;)V method_10905 removeBannerData + f Lnet/minecraft/class_2499; field_11773 patterns + f Lnet/minecraft/class_1767; field_11774 baseColor + f Z field_11770 patternDataSet + f Ljava/util/List; field_11769 patternList + f Lnet/minecraft/class_2561; field_11772 name +c net/minecraft/class_2609 net/minecraft/tileentity/AbstractFurnaceTileEntity + m (Ljava/util/List;Lnet/minecraft/class_1937;Lnet/minecraft/class_243;Lit/unimi/dsi/fastutil/objects/Object2IntMap$Entry;Lnet/minecraft/class_1860;)V method_17761 func_235642_a_ + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_243;IF)V method_17760 splitAndSpawnExperience + m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2960;Ljava/lang/Integer;)V method_24431 func_235643_a_ + m (Lnet/minecraft/class_2609;)I method_17483 func_214010_c + m (Lnet/minecraft/class_1799;)Z method_11195 isFuel + m (Lnet/minecraft/class_2609;)I method_17485 func_214011_d + m (Lnet/minecraft/class_2609;I)I method_17486 func_213998_d + m (Lnet/minecraft/class_1937;Lnet/minecraft/class_243;)Ljava/util/List; method_27354 grantStoredRecipeExperience + m (Ljava/util/Map;Lnet/minecraft/class_3494;I)V method_11194 addItemTagBurnTime + m (Lnet/minecraft/class_2609;)I method_17479 func_214002_a + m (Lnet/minecraft/class_1860;)V method_11203 smelt + m (Lnet/minecraft/class_2609;)I method_17481 func_214000_b + m (Lnet/minecraft/class_1860;)Z method_11192 canSmelt + m (Lnet/minecraft/class_1792;)Z method_26395 isNonFlammable + m ()Ljava/util/Map; method_11196 getBurnTimes + m ()Z method_11201 isBurning + m (Lnet/minecraft/class_2609;I)I method_17484 func_214009_c + m (Lnet/minecraft/class_2609;I)I method_17482 func_213999_b + m (Lnet/minecraft/class_1657;)V method_17763 unlockRecipes + m (Lnet/minecraft/class_2609;I)I method_17480 func_213994_a + m ()I method_17029 getCookTime + m (Ljava/util/Map;Lnet/minecraft/class_1935;I)V method_11202 addItemBurnTime + m (Lnet/minecraft/class_1799;)I method_11200 getBurnTime + f [I field_11987 SLOTS_UP + f [I field_11982 SLOTS_DOWN + f I field_11981 burnTime + f I field_11980 recipesUsed + f [I field_11983 SLOTS_HORIZONTAL + f Lnet/minecraft/class_3913; field_17374 furnaceData + f Lnet/minecraft/class_3956; field_17582 recipeType + f Lnet/minecraft/class_2371; field_11984 items + f Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap; field_11986 recipes + f I field_11989 cookTime + f I field_11988 cookTimeTotal +c net/minecraft/class_2609$1 net/minecraft/tileentity/AbstractFurnaceTileEntity$1 + f Lnet/minecraft/class_2609; field_17375 field_221480_a +c net/minecraft/class_3719 net/minecraft/tileentity/BarrelTileEntity + m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3414;)V method_17764 playSound + m ()V method_20362 barrelTick + m (Lnet/minecraft/class_2680;Z)V method_18318 setOpenProperty + m ()V method_20363 scheduleTick + f Lnet/minecraft/class_2371; field_16410 barrelContents + f I field_17583 numPlayersUsing +c net/minecraft/class_2582 net/minecraft/tileentity/BannerPattern + m ()Ljava/lang/String; method_10945 getHashname + m ()[Lnet/minecraft/class_2582; values values + m (Lnet/minecraft/class_2582;)Z method_27848 func_235649_b_ + m (Ljava/lang/String;)Lnet/minecraft/class_2582; method_10946 byHash + m ()Ljava/lang/String; method_10947 getFileName + m (Lnet/minecraft/class_2582;)Ljava/lang/String; method_16374 func_222479_a + m (Z)Lnet/minecraft/class_2960; method_22536 getTextureLocation + m (Ljava/lang/String;)Lnet/minecraft/class_2582; valueOf valueOf + f Lnet/minecraft/class_2582; field_11837 STRIPE_LEFT + f Lnet/minecraft/class_2582; field_11810 STRIPE_BOTTOM + f I field_11846 BANNER_PATTERNS_COUNT + f Lnet/minecraft/class_2582; field_11836 HALF_HORIZONTAL_MIRROR + f Lnet/minecraft/class_2582; field_11814 STRIPE_SMALL + f Lnet/minecraft/class_2582; field_11843 HALF_HORIZONTAL + f Lnet/minecraft/class_2582; field_11807 STRIPE_DOWNRIGHT + f Lnet/minecraft/class_2582; field_11819 STRIPE_CENTER + f Lnet/minecraft/class_2582; field_11809 BRICKS + f Lnet/minecraft/class_2582; field_11822 TRIANGLES_BOTTOM + f Lnet/minecraft/class_2582; field_11827 GRADIENT + f Lnet/minecraft/class_2582; field_11811 TRIANGLE_BOTTOM + f Z field_24419 hasPatternItem + f Lnet/minecraft/class_2582; field_11840 BORDER + f Lnet/minecraft/class_2582; field_23882 PIGLIN + f Lnet/minecraft/class_2582; field_11831 SQUARE_TOP_LEFT + f Lnet/minecraft/class_2582; field_11826 CIRCLE_MIDDLE + f I field_18283 PATTERN_ITEM_INDEX + f Lnet/minecraft/class_2582; field_11812 FLOWER + f Lnet/minecraft/class_2582; field_11839 SQUARE_BOTTOM_LEFT + f Lnet/minecraft/class_2582; field_11817 DIAGONAL_LEFT_MIRROR + f Ljava/lang/String; field_11824 hashname + f Lnet/minecraft/class_2582; field_11823 CREEPER + f Lnet/minecraft/class_2582; field_11847 DIAGONAL_LEFT + f Lnet/minecraft/class_2582; field_11813 STRIPE_RIGHT + f [Lnet/minecraft/class_2582; field_11833 $VALUES + f Lnet/minecraft/class_2582; field_11829 STRIPE_TOP + f [Lnet/minecraft/class_2582; field_24418 BANNER_PATTERNS + f Lnet/minecraft/class_2582; field_11848 SQUARE_TOP_RIGHT + f Lnet/minecraft/class_2582; field_11821 RHOMBUS_MIDDLE + f Lnet/minecraft/class_2582; field_11844 CROSS + f Lnet/minecraft/class_2582; field_11818 HALF_VERTICAL_MIRROR + f Lnet/minecraft/class_2582; field_11820 STRIPE_DOWNLEFT + f Lnet/minecraft/class_2582; field_11828 HALF_VERTICAL + f Lnet/minecraft/class_2582; field_11838 STRIPE_MIDDLE + f Lnet/minecraft/class_2582; field_11815 TRIANGLES_TOP + f Ljava/lang/String; field_11808 fileName + f Lnet/minecraft/class_2582; field_11850 GRADIENT_UP + f Lnet/minecraft/class_2582; field_11849 TRIANGLE_TOP + f Lnet/minecraft/class_2582; field_11816 CURLY_BORDER + f Lnet/minecraft/class_2582; field_11830 STRAIGHT_CROSS + f I field_24417 BANNERS_WITH_ITEMS + f Lnet/minecraft/class_2582; field_11825 MOJANG + f Lnet/minecraft/class_2582; field_11806 SQUARE_BOTTOM_RIGHT + f Lnet/minecraft/class_2582; field_11842 DIAGONAL_RIGHT_MIRROR + f Lnet/minecraft/class_2582; field_11845 SKULL + f Lnet/minecraft/class_2582; field_11834 BASE + f Lnet/minecraft/class_2582; field_11835 DIAGONAL_RIGHT + f Lnet/minecraft/class_2582; field_18689 GLOBE +c net/minecraft/class_2582$class_3750 net/minecraft/tileentity/BannerPattern$Builder + m (Lnet/minecraft/class_2582;Lnet/minecraft/class_1767;)Lnet/minecraft/class_2582$class_3750; method_16376 setPatternWithColor + m ()Lnet/minecraft/class_2499; method_16375 buildNBT + f Ljava/util/List; field_16548 patternColors +c afd net/minecraft/util/LowerStringMap +c det net/minecraft/client/util/IDataHolder \ No newline at end of file diff --git a/volderyarn/volderyarn.jar b/volderyarn/volderyarn.jar new file mode 100644 index 0000000000000000000000000000000000000000..309724502af68466de361ed4f6c4d47ca8e6b3f5 GIT binary patch literal 578042 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

L~z$r)-n@&CMCOLH5y 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↱p?LnFu#Hll8cwSx9}+eS4mwZRL<`uJSb!E?g(PH=3L~ zH)|-Io2^!bTM=HK-=20mA3z^X3E}3tZ`o3|wI0wD{MF0$AJM=)qV5{o_JKHuOMBa; zdz!m{`~B_n^0V`Gz&g@kjL8)eVNhI6s=*)UceIIRPp7duEHNTok!qR5^2d62czRs# z5g1e1m8jNJlcAAK(X_=YCMtdbcX{?xIFHraT(YU32GCQOlWmI86PKX(Vsn^}A7*PC zR*E0J1ix$lx6EVh$S%I?y-$t^=m6Ra%|4fx44*i@x-BnVVwD8bizU@vsUeXQW(Gr> zQ9iHf6fsC_(L*ho#F0oAA;w_ceb=n$ZIZY(y83wT6APc1>eH;Pfe!kL_b))SKmj}7 z6pkn#9!^aKnmZX@!tm}PxjXlXgilm;e{K&HAW5r-bDwDVgjJh!ONGn}t*YI*PdMOW ztGetKu}f}IS1u1OQ~D`axH=hfgQg&G%S83ZX**~44ZeuyGO*nz;7>OsTS>#q0l<*3 z28YhpKpC?#tYxAzg(oDVlSzKQ2>aD<>qGstzg_#S&c`pfA!EBP2ttD49I!w2*O ztn7{;Id5!^1wqhKHgn=3MNSY|&JjH*1yEJp7n=dlNTo`P^Z5KqDAK^2821uDOBosh zRU4gD1Q;0tonVmm^>F6LP0CAjGlRo z3566j%lZfVTOv&nX=VXwQ7y|_*(wb_00+o2#2T~fh#2fZ41&{YRj5-lAX~vq4rzw- zaf0)a>bA)5ErnJ%pRGO=Zj!VRS1yRI)@8nH2S^dnRCk4dsGm4gdG(NdLkn8<`g=1K z4iR3SLV*uFRkrufhF5gAsju!f+qIkW`0yMZ1HPz=Q*eSd$FClrj$S&ydfoi@hq~Ub zm%HcZ28mu$Jv_FSr37;c8qh-nHAas^gkB~ZYSX)|sp5q_&GYg!#arkuxA4fqiH<1MlvdXBTy82QT zK7nS*AC61D(# zLR$4_F(4YU+%Z2@=^jpgW$2@@As{D7h+1~MO)!OHpd;MjddLU_Fv1Mk;FN#E*vnC~;zG@?W6R##(_g9yTn@ zyI?lAaF=u};*qnU0V4p3ggYPVo;VVki7sr)RD7uGPf+_GYo2HPdA_e+&+i5^81=;w ztKErp6z&usy%%Q@s;eT2EIO;7AL>JUP~+#?*W$W$Pk*K$y5nCe z7S4QevE^!Yy}RG9SAN3G3r}QJQ$U%rPN60aSMa5P59??RX*hsVi~9&FEqx{h%j@f# zs3!&V8Mmw#nNz)WNY7M=0>qp|a=&i24eNbq7P8LLWMUK~qUx^WKty#U;Kg)dSba&C0lwf(_IG_-AZnoSKXwk*`ZLTsQQw%Q~Q zxs2bR^7%CTh3ldS2@MYWCL3iYP0#VsO<{XA;#4$8W~LUOH~ZyrJ$2>7MH=4@94WNr zJU)FMv(B9Q8u3U)(4;2M_<|JaLa5&_KQvLxH_^|$uP3%`qc7Uv_093>X}5XYT&)h9 zt2;*|VGZ?%kG@gf)tm5N|FWIG3sgk~X>4Cm#7TR)nvO4v*`Wc4lRjH5&2-Cb`hpf) zwWS3=m^Qs92~UYGj-gV?-#3TNht0ODQ4>vX+)3_MzqcqHeP!Rn=}06ry9<9W+BU<7 zZSzIFa*!;B>7*p$UKmy_=aMW1k`0T~Yv}feRz|wM zPKpXQ36{ug%v*FA_LLv!wp-Ha!CKZn^@oOzS2G9|?zcSS@m5ZV+#K+v%7!H{EGuu# zU?Fl`P*Q!&$|+W~>uy+NCf3w_YeNWNb6ROpfO2@i74&TK1wrFS-0~nv9r{9nP36#4 znVjLy>>gha7@7Jur|ZrAL)vUWm4a+mUq5I})KO$WWt7vKyQ#5+hC#U9+6=h7-X zg%1c(A7NN}=8(D}D6Kw?HiIpo>S2}98pF(#)!L8D?cfKv;_`|WVM1`@7 z!*Km0tlP$8=}oXGtXti8Giw{9rkTY6)QPIWMaQzvSp-9}PRe~|hTQk&&-H%0{3|Q^ zxe-y-Qi zBnIu%v$bNqRneg5yjph51EuHm-Xl-9-6nEECcu*W2gCJRJ0ql|{%IsuP;dw^9>j_g z{nqE-Y)`iU4J;H?-6@vk^SK^xM|W5*zK;Il^)_UXK8xtj?%3}GZLA^A~NuzSuduR?I|6q264+& zRTthiDq6bD(kxYYVk%jaDB6df%E-4myJtT>Y__ZT>QaMurY&0tKU@4cS7a?d!(jl8 z1GG`t|DJ4i!+pLI0LpY#B+6#&&->+vrb_1&HG9zj-v-tz1Wx}X*|c9y1rjQUTaYb# z#A$qgd|tY5s`LGB^SJD_x3i$WzfA;6+YZ2ewpkL+efV#D4}dC&bsq5R>~r!J`!#q(a(=z5Sy?aK|$G{~rjJRYy0o)ijY z3?@$xHpzt53?}Sxo(PclxeL8I)|uNgU(@l|$de^=g4wV2@u$bnt;sokK6tG~$5{V+ z=XgePblr6yJp6sR-K_Atw6W;=x)2BJliPpvpPXlMQH;V+v!_jk&I`@B3LXou<3-AT zk^M)dha*Czz!yzBzT_?{-!tRgW*5vpho^1pQ$zt<_%ffTA0%&s=!E1$Hjuy@c+XtI z_#^3$;pOI-{YWityUj^n6fxtXfUp=pNg`BqimmIgnZgtNo89)WH=l>!(+9*uVZb;0 zm1o1v%;jQ)XvB!_N+%%_Kk%5^$?%-@((d_pn(OB|nhVyP_jSE}zxmu0`zsar1Rr=w zDK9sR4=n)=JXg?;=Y~!(#pc%`JUcw;AIhwcln)9|2pRfZ_If)~*@m+#vRDW{wu=t( zx){tm!ymaV6ynS5o7c^;1Q{+8CsP3(8XpNe9BgMB9f*%AW9is$lfqWc!S?qsSSR*dHJ~BKW*2C zxn&%+f*$Wy)0A=+fiTeL44GB=Q7dT2X|+0&g|B;kGmJkKzs>s)AtuOZDhOTIeW26@ z<3Nsr*7+=c=A%!h)g!H-aGK-$)!oFH7hnxlhB&X5-vn!@l_$8V?x(QMk`Y9;@@%kr zDSp-(35!-;%*+3FP^gXQj%rT+ zg@ZC3Q7UAWa@)r14&->3tRo?qg+O=PmLf^lkr2#k{NCmgAOb%GNQIClq{62pBg+gz zLehoRq{~S-E5-ZIB~GMsF0hzTDGnn3hqq_xY8+R3o%=i3%nH39hZW7MnL`g8pnJYy z7Ct61klP{VOG0-uzy3;gY?l&CmO}T;Vj8eYDwRs5s#2*6b|L}^AKWf>Il}hZ-#azj zc`#7t0CKlcn^=u%gu0Z(!*CM71+x)X{MQ}cxZ@N9S#7c?itPOan(X0#$KC21n+&@h zx#DHC<`Ht`MvoF_fST=lZbK6sK6c%)XoTdX%3V5!z+gCbFpjl4_-*qA3SbBgdTk$> z{bEv+9Y{?8o;1rt4{OW_0&;7emMTixP|P8u%U@0ijdbLiFFbJM4nuj1k*pLO(5Kv~5IMIaOC72QvY_Fd~+6$8Q z=w_A2Byjptj3INN6zNSMB#u1KsM?LKuFWq4O!f0*36GT}203HMum6ddK0~{4$d`Qf zIyC*BN7!0{)TT@i5;}-| z_zT_>DV621+ABpMYmT<5D`R&a(NH)k9xKqr9)36Z_HeZ51v7L_!7&z8&6Nc+iQ0oixvgw?zs-7#cr1S}4k$7UmCI#MG`z^qN3BM$;^hB&UId zrj}-*{W|P(JF3LxpXFjU8S=Ps;+Mq@{TPQA;FN(p8jOgvvSOqwC`AcwiUS8Iv<9_B zffO*AaZ^q_MuV>EXuMok z$rhX@_G%aM8_AmcxgNw}zaYaIZ_^j{uL9-TmlTDg4Qc>)5osP24bu>Ku9)g`W*aF! z&S&GB{F^O$Z{=MNsan3mMy<%+(o(EA$pjT}RkJn|yqj`IV=x?QeWV*Y(m=|2MY~Rj zNJ@ty1t?!=l<z3F6Kl7rOBBy8|kyYLQfHjoj4GzIiQ?+QWxCg+V9b4aWKi3Q4j z^f5N{?W1to9_I`IxDeWA93YAyltf}PRd@`v)$b!&YMAeV%E+8t&F>L~;JSw6Y?3CB zfV{^lbYxm(X@ecXqO*>r`Uun4q1CvCq?Q8GkhRWucUwZ%Q`xtzZCM9CR8ERm41~qN8lXWSNMnNp8$GTej*I0OJBScuvu|u} zigiq2G+V+f8Rnq=7QOl)OBTaATPEgCQw|gG(ADE6$}o`=2^CP=&~Cc5XsviFc~x`~ zPp({^x9_za*3bm*#YoQ3)N+Ph$Mq7X&W9ij=Oe2`5pi2lK}Q%B)u|tu#?28+IQy7I z6}-ht#udEX*a+I$2qccQ1aV8+BX|Z6qzPjZiWp;MAI1wO=;1Ny{Ye&Cr9wKXYRqAN z<^`;dUx2K$e6%^p0#Z$kmcSJBdZ6}jx(_Po+3W~~X%|*$l(hPK(~k(-0TC99h=z#J zFd{p6<@UHmDH`n=;(R{2*5nS z4b0Y^h4m9WmZdR5_aB$#eE)azzmr+syNEI1;1KA0iP9 zp-S~kI0y_Sn+^xAXxTbuj9$dk7RS&L#N&~!7Ess3`l78qRHrpsCe0E!I5En`NwC0K zh+4P(-JRPATydb3+b0VP9NdUyMG`Cnuq2Ch2M7f7S}~lBlMF&CC5#Tk!6-+@Tv9l$tV8;}U62iRE)cX?|-q-O0%l&oW zz-ElFK^WBVpg54sI3lNXEs~r1mQXeaW6Bud6ViG=0}6?3V8{Y?x@YjZBAD5s2NrBpqS9{58IS}tQHn6I$w^c4X!9D)aYuvGk%)=~6Gnr} zEwaMLAwdS{a#&N2LkUPa4=6R7*=Px?uSVMbSdS(KY&Ep2H=wx9wvj(4LW$A1e0fWP zA#6RZ1gS#^T4!VHJhdAO-Zdq)1M^F`EmcZ;?!K(< zcWQq;h&a^ld}b4j2tgF+X{5df-ThD@l!8NrHqT^ZDQ;=pbwx&3*OzD4CpS0Qhr{da z=^SBBE)OPs|=N*TqrE39OG?(7_&x5bB!y-f9rgKo6$a@73Hv-@8>ngFB8 zMrrpG+yCWv4>6@?4l!XxRGsC&c6Q*sh{Eq!x&CdSxf8^pkpiZqs-lE{@pynURanQc z)s~aVS&azC1CKa4&hlS9Js@xu`Q;lA*srR7uo5C>8zXOI;qQ0e6GU-``@7&TGEn$% z2MXGgV1t6-$&jiX;JY%&g-@=B7Bh|}ApVt;FjFah@LOMy4D1dpqYQgfQjQPE`N90_ zDV>6FP~JR!@zS|Hsu73gt!Upp#6ZHQT@q&x@sQAAAW8NZ4+-CM*#fNbkOS!_ z)&}`&y1T}-bLAgO-2y6eq1$ zFCI48jmzj@ax8phoj$pEMs;2qAptHtx@RJH?tTFlJ=bAAp^6;*#DE2>cz|bLtt0v_ zk{5w^;6HnTw=dHrAQaQTdWF4oyqG=|P)LrM0j|_`|rJvY3ow!$~0$iczfa0u(Hm(^o=!uSg zqr$j`UYzyQ%!g4g$91DY$}p78BNN1cnpk!)nmtA@hK4R9%7PvX;zB~F3f0+j0CHnH zw=-tS;UcvzDCXtPW^nffkU5e6KW@H;#17Un`x?SpX~=vq@hzj-Lo|t@Z;kTC`xFBS zxsQs*DHMI{XJj;F-%5k^+X#ERSP6S1^0^my9bK~6IGWZuT^ zfbyjXbKqYTZT-#OQw0ElcrPh}HF`J!xzi;lHY4@f>(u3rO;zTh$-jB?`to8pYvGs< zl7mn++LZ_zlwyEjK(7-rJB(+PFOUq}1PpK1>n#NoXn}^sf24o{KdPkJ zKPjT0+RSDbmuF`u*8yoFKyx|zzOlxUDj9sbXe8-tG$4HaXC!GIiqV{ZXN_F*f z#mX|eP^>K<2}TpqPcsD)5RhbxXh4{t+#Gko!YHJBJ!Llu&fcOD-dl>mI3uaDaWo)< zfI6G_4-c@Tb~s1&x=d%zc9fkIv>M#Frv(KqcsA*2!9WX|ZRcar8iCV+wq?Hqk(CHb z1$vcDI)G3xCIW%p_IXgKE;&YwI-_wgn#dkvMgv|$tty>;lQIG#q=KbZG(!OcyEi95 zVm5;f_5aSr6!wth zl>4`T2Z$jc%O0cUw}yb$7vj5C3SC>i7&&e4k@i32%i^Z_?QBuLzC<6b@WFMhUIq?2 zvz4Z+;(6)C7R6wDHOt?M#iwHaTF1;r5seaV3*Rrx*TuNFD93rL=Ku$3{ zfvrgPm;wrJ>J`hTDWD)EL4|b*PC2BS7(I3d&QV*nw4ypB1YW{`2{wlJn1K&KjIDok zad~r+o!_2(`VTC?MTC(i)sRvBpwY>vtJ}Y_n~TfaI1nyIH%Hf(7Z=&}`Ps+Y?BtKb z4;LrLk-*voK0d!mfEJ{IzBoC(jXp`BhgItADH;$ymz2`It1xqEUI#Ti>74?2QpA;0 z_tygeOlZ#A8k^C0!}|<|U*57jv82Y!bjK{jk}?-tI*DQCpP-v#r7c4T?)eM&;b;HlB z<3!gx!Ah{$Bgs~ttK?)mbesCrpZfjOIdQsIFNmo&c;L4?ID{?mc{0EVDuzVsZ96TN z`?qGYFXdu&Th3pcB`i<(lJSl}~5OEv-SxUacWY zQB;-6(<^ZFw$S%2lTnDK?J^CX3=(xGgNI0g(i=mJdRyer(TfIss7hveG$8caDwW-b z$wR_68$+#k2fu6Hd-i{=^Ki(t6X0F5Q65(f;k?seqnAnw1lE}WYf&~@1vYFZLkDtg$YA6!V;AbK>ZQ!`dDNM{qoY2uPy$$0TOqkz2069k zl~^L)v}^>(*hyy1*Nk>$HhwtAo-I>Xw+*G(gDe?~90fr$o=*Zx(jA)3PhBh)A zD!TTi4z_G-HJnecHibYXj5gblrp?h)zH&8XZOdjK7tb*q&teI2+U~uU6oIP?!QkOr z6;3}~E{oN&t0C&SI?&o`8D{dfQ9t#V z^c8uo&XUgtY142~OonpaRqYm!7YRMU`3`;#zU` zhjQ{}Gm9<%9ZYeD={jC82GdFb{#fLbHKtv4bAq(t=<(BZHnHDt#`&z+{4Trimk$qS z&)sdbAgFF(X;HWMYqJmCwP?q<1K+ukT1O5Rlg%!~CK`Wv_7>GbCGD;I+r&?W?t4gvS&W-Ko)1s+TIAvz% zAM@qmBH$m#6o~^r(>hVYbY!SBU(SqT{xP5X>~E&D7(lVct)lbCV)hcWxG6eF`(S3I zo$FC^%yqYz#vTufGHmp~ML4LrM3bWHlJyLNv+@ zC2Vw`uP$HBfpAegto}4=RvaMKE#UR^@hJh4Pzz~=d}MoM+oxeih=oZ-3|k<3batQSj6HaMhhrAPC;Kax>wWH_$hXHE5OEIFN()#n&{ElDSuH_Bn-~Z_T9u2X*W18l5~r8t*MH5#?J5>pv7p{>;zAjZ6&uxa zJe<|D**e)}bqd%i->hsc<|vs&Wfc#wtOR)^h_Ua=Z?zH-31NV=3rgY7EYNiTQR z7usM&i$0Cl7mVRs{+X}*IWW0SVVRFcuoji3dGu5)SIa>ILX#c?LW*4ti1ryI)>UeY zNhFwtVA6X_Ooc)z1}w9ZNPdO zz|uBGjy!BNfc3uWTs+>1CV8=Lr^W)AY~4j|&9IV{w(%xn+?dC&Mc)@=;uMp<4{Y>k zAB|O?eDW~qD(%R0_fjlUWTM?mk1VdSu#EmlBYRf1F^TM%jK($Yl~NEng0>^z$PrM& zrW3f{{=P*?JKW3f9Y00rmpVMgh-TEjNWpy>|Wip=5?$cH05dXU^cS&sl!Vj0ne`Po4cXib{@JZI6 zjxIm{ak~Yl>yNi5|92B#hdd+Hhkc zpuRxcltJ(8>|vX+1QLWm00cll_OkT?{fZBdJen=3bGQEN^Q@*qB*AJ~ZPrwDjXiVG zc#`j_P%I)_67Y6&SfQ_h^ByVk2@b#*fSnqTJ$WfS?0}l7T>IGT^mqPT{mAQ!Z27SA zFhpZ5?5m%7{af~v2%v(^(~}PX1dUg&EJ~3oFT>+)ku488ZK62bN~qy>LXC^yUZI7z zkJ)PdUqumd^HL~;JtIoWmh-Xq~&%51BFKv zYmcFS_983Bm+@mJ!`UN^#o&%{yMXgw`OcsU56Wf*k;+Nfk80u;RBv&d^l&$=RJPDz z2p!R0T(@4pPCJpz?ss0mUO$n}h-O-x_IP#q6xOI5j~YAs5lToe^I)yhDyt8husdmN zTuQ}`GhsRB0##aLOpMjrvjI7(g~-BWc25S3F(0QiRStM(&%(XpZ_+?|?A5xrUKPT?Bsdn2kPX zR)xtx^-rna&}?s3wlcSB@Ij$K8=d=;hx zUx6y>s)!PVduYjCIr~BTVng9jBj9J>snc1?BAS)d_2C316%*y3o-gvquSo?CYpP^c zQfG-hoPwb>i6jag4TpW&Dx%7qFcl#NRI~5Y39*-5(UZbLix*85U6)Pgb+Dh5W%iIG z-AfU3edR#NYZ~pF#o%t-?siV4&vrK1;v~FG(B5R86KE=Vdxj+gwC6?o1oVxfU*>dv zm-=*^)r%Do?KEibYY_&kH+lb|SkVX9CWO zR*?@5zC$?J`R08cyb$iJw<$CiFE3CmA#T~#Y=G&%4~+lPy*bdB=FZLgtXP`M63zL_ zo>c~QwZ6>jr|WFK+bAJ4n)Y+CD!!HZA&h!Bt%IVzMh;U^)Ft0gfpPnPX^c%zS9TKr zPee+XwBP8Ws_6;LTE2Y))&-O8XPyybW+`i+$cgMSY$2|Z7#m!~Aw(Od%RD36A89gR z?SzQp{vu~A5Nz6s#*fu1_lAyoNjwT}qZ>BpUV4aRk#a<_Hg110JXPR4U-S}#IA%N` z0z=*f2bX@F5PZ?o2Nd<66be6QD8Cn$%i+ylk4lN zFW&HRaPv;X&88pEPp-Y8qu}iNYB~iJ&fc9|zdiRJA#EypdBY{c%r|@3qJNrv6$4=@@-Y-i-Z0PvCptb{S1qC5POKo z$qytOByDYwcU3vpLtIl;q=fs;-Rj?w4;PFNP(I34GBE(sjTpx4>8ROsS~w4Y*FJf8 zlF2PdSfVpm&FertZFWp6uKtnR`3l|6kNbPqaF7SCedgsOyv(!J6mFs_=$F zH#U-x8f4IlCANd(G_3;FAoA6kQzxM(6TsWb%PX4rrUU>`>Ysj~!DQ&2N})GI*bs|3 zV<`uvL$evsJ{Sa2Q$G!OA-jW$HSIsmYtAxe4i8AmQ7vf^H7S~nNNFk^5#t10rRpFe zzE|=zU$-~%4Bhv1rnzYU=)V|)to0hxmQ^eh(+}Yexrhcb3`2SDqu9Bzi z`Q(gYZ8KH_B=I_6Xd9}o4&@u^F}oA9)dy4WSr&R<726Y3@x69Wkz*5U0=UC&2ynHW zK31D@p4Zg%PWGV7{#JB}_6ABWO2*61bX2xUka&M8@%kl!KzNQA^jE`F^efsD?!)ET z58{UPNS@a(tKdG*){l8jeBT%xbX!AtT)2~wPn=9K^D>nv%#e@~-%bNaw5BgJiVT2< z#oF8e8qNR2Ty&(+deL&(h*KHQvd^hZ_89LO$o3eM5a>T|eAxBtfE2;Ulk1y5yx~+Z zo!s0^KD_mYjDqRS$%i+`fb!tt@{eNxWpMRjHhp*X=@JTcyIF`G%R06@)+A*1W^Bw% z%N^IO%5To){P2-lhPx7*`$}xNrydpy_hzr+ix)9oxRSHdeymdbcAsqRo(>5Ii{#y^Eb&Bok%A9BQ>hBt}JLR5b-6?%I9$)JXUo9vxdVOp+ z7E=RZ7Tx<3N#7umRv?)iu$PIl!|xuD+zJ`f0pk=+i6DolzdqTo7Fk)Ikn@9*s2Q{Q z3?v9KWGZ~2FS^ZEc%v<{MYf6hv!c5mP8=-o_jF$QN@VCM7RzFJRKj@@3eQB71Rp_C z(WkmVvhomecVl2fM>}an1Ro%mA?l^in4)@GBP9e5hNrVrGN43&DxCcy14bB-&Hh7P zqm?8dk+bWSumb+c?8NC9@T;EvadUs4*HD(>w9~_+jRJ`{ou_BGRYHK{T3xL{Ll<)| zxX8?RQ$6`WB}rR^?%of{xT_E62M0;qy+h4wLe>DD8q#<{h7F`AVNz)f0k~^Ud*7py z4LHQs)sycBP8%zOj8YP}oCF@nb|%-B@RPh%nboKH;oCkkQu};d^kM~`#Z-p9ItA@X z->p#aknFvPLgB?5P&d+CQT>$@-}kUsq3)t#3;O7C;3F5+qvNRlKA#sGkE2DzJjwt; zjm=|(4ipDHLdHcb_Wa7JnFdKH;ymmK!3}jij}U7SOZWS$;hK|6^(%9bU{+IXNV*L*$Z=q7FDf_2d&nQ$3E)5UF!PIUXj79r5!asp}f>7tP zI|Az4$a`gU0s`A99o7I%R~VX9)R47dFrU22h_e>TY$!UILX+J*YFHv%(!!D5m=Wg~ zL!Y^13rNmSfHwRM$Omd3Y{Vl(iHoYDel3AlMJyAe!O|9toD3215Fyx3bTO=$1>ZM| zr;g!>WU@YqS+q+)dIbTdk9q#|rK-ww`%mPgMumy{a6Tw_PTQ{ zpq2h0_eH0&XrL(TBb7wor--5unz9n}FQAjlW445%=PnvC?`<}ah`u|xcQ(=9eahK^ zfM*nO`W90m_gnm?{NZ~mottYCmxV{U4rW^EWviSHGSvTcQ&fffd{>+wS!@w{KAGxR zw3j_97(+{(vY0zRnmFR4oo>o9_ej!=qAsn>ng6fp>4nITTw_pC<2&dhY2z~W+&%3e zTf?Lw*-xoLFF)n9D4+BC-YWHc)O|4Jdmjv%s;v6iAz*#%wJ?bbkEBt1EeutLgpLK% z$>rzs>x;?s9n^=s`E-3g`*<~-+)S=MOm|*S@av~nUuT!+AKu=)BQ8vZXknC4%d5}-_p;LD2qkzu~VRR3xHgEIc?*xfqGwU)hcl zTX(gKLVo4*@?~BZcOY+Fb-xqdUw_gcQV^ql0_rrkObF>ckuy-frp}ly3us0` zEiPvIAt1nrTA0#wT|j`+T?tV!zXSWfH$|s_kF)r2eYR9l3jstZ0h3_I#U|qBG_;x5 z85DO_Iq}fvN$MdJ)6mmydR-o_dzr9($NlKo<9;fGr#gRFX6|zai;iXGQx8^7`_@yG z*OjSXxom>=#0e5#_D?<7KlN+P1t|d|on=JgcPnrLcH>R;@X(e~yS2EZ@2d`1Ce+B` z!^`~moF8gsz?6{tm^D6GUIYVIYezd+~QVck|aI~gLoR?afIL7XB$ zG5bbao8Fg;sx$}l+u=tUJT{eEChL6RT(g%({#;mvI}hV#$~gviWwm~!f2kyRZs#E% zg5bE^0g(fAV2*S^RQui3X(t!9RBa+%M>paHYM6w>B&T(;AWoF_OChJ=t1c4{qvzri z=D9Z>2?;Yi*^MJOqHM?d8)H;&<{&0pxQNgpo{q3YaUtC_?tG5~7Hz^EE9&c_X@PNi zpj(aNUN+TjwfI&XE=nf(R&NVI>20C7mxlXNmG=j2qjX;ehVZ*X(GFq{add}x0ZNr@ zMZotV+w+PgM2@hGsJK2{`j8e*-nvfu?;&D#G~OJG%_#X}n0y zJT5jq6fRm9Wp1(Zn>u@_mVOoXmGE$ADUq7IJC~W4`U`7+smQ3S zo2Cv=mmW5j8rR<4mP$oFwS{=Bt?zl&kdC@IO|uB-(d;0PMG3U1Y4M-jaq%C@hG+I6?= zr|C}3uHj*93bJd;8K%26LbzDJ+GwMucr{-YukN$e+HgT-s-~^l>S@@p)vMBnJN=2_ z$F1QbJp3P9h*@)Quc?LX_~Lf!v9cd;4;|Z&zaG0V20gRebg`9N)eKv}U+KIs|24{# z_9lDz=Yf|ZZL;ERG9<4F);BeyjM0%ni-v!1+T+JSWUc<5s?{HC>(>Z={kr|Df?sd> z)~~S{Vf)v_jIjNyFe9*o9|7F4{vV;$EpxbRL!pnhwg=~()`ZV_t#{eSYE_J%1sEG# z&YbB{f@M`Nvhpx*v153vL#SQeXM<%cieFNeIQXPuq=G+vCM{5?&~Sr6!Ty{eyIY*L z9?0&&CnrrDUWmn}To+HK{KTs>^V8YmX8Ge|T|F0_=9|2n^lJ*CLs>TezFDn57x~XO zdh2J)yGDuN*I2?$c3+jv^SK#vbyjW0bQLu509|p52Z7eipR=;)3?GM3R99}SfQn~L(yEpID&wm3CXoft5@TW8 z9HTcwRX@DSp0c~g{8d>!JZN(i{*~WfUF!eRG#r#-8eCqzeS7Y%t>3Jte_sXp;%PnR z1z_!#6)IuH@)uOn2bz=Ux&hK;m>s@X(h9%-Lv&a_t ztpy4h6ibj{hY0I_LXpM#LyA_M8mZ#HtX`N!V2gw9#b+ayLS(5ln%VxHYt!S-$oO09 zfgY$S4t$v}A4YRhu_TSK+bNZ^YwGyjf;M_zTaE{1a>u4QgiiALO*XPkcpRtpq_ERRo1`*@ z4nv7DLKrO=@OA4uhD=#4krsFGs&iGttKi>6%W=Y>GnU>b*&ejWRz;!?SrzuD8vuDw z_8-mKqVKaO^cutX-Bg+ZO+?4de#2zPGvbR0jiD@_P-K1rP{)JV9y1E6<)^1Pcq;}Z z57NMKWHVM)yXG(O_Xx)e;gZ23m5wJWdi@4rpGrtt&VDW-7FgVs`S^4%`ae^LCoHxp zE}=+hpFk>_;#Ws3NG0LOQnAcPMZ2Pla#PH$Wg!Kezih8arY#*>w)zlDNr2OUpYGI?ZoJ50i!r*lQdou|Rb0 z+gnboV;tP`*%{yKq??yNf#PKxV`r;<8(X45*cxvK$xQe}iqKF#V z={l=VP0q*?q~D&`jGCQpmRoPp5CL!D#>m1a?fW$SYzU+vwU~^3)S+?Nm-6bBDcJ8$m7rovI%V^4K80E9=flL*b(~9 zJmh=)X4df96w+kPYJ=Mu7$>Wv1-?a}SRYEB!9@lUo&3QBhv(CLeOgxSK78q(14{^0 z=Te5V&CE;iMg2C=-{+Xu-tZX>5+LS z-7g2(?&f^z#*M9wdtJ=u`Epk}1NETiRsCbSscTS7aG~=8sDOi%j&Ci+YrK$#VasYW zHzYbtA2D>B5<+%57zxruHVF!EvR@z~%wtmUh&TV3lPeg{_MRMS#|V~^I;8=fjO+P; zyg+u@gKhil1(OmyAV=n!D?IxMVf6brHEBL_fljWE`0QQ%)kx0NrWoytTYLA zJ!j7ziV3RsV8uW3E!38^)0}akvE;WZtLG!ji6yru4P#hNQ&!tcizd)T>+VM@zYhC3 zxKviDUY^d*XYMm0iy^+d$et{Z3};aLXT3+YIuVflDKqAAa91t$3thx$gj)ur@eMN3 zSk=zT&Me^?zvkF!5I<^Xqs0QoNDbZxPKM}L2`Pw(6&xV(;8I{Qr~H^u#ZaknYgzb>`99@nV0 zcR`O3*(2;MB{ngux7i|Z)^Z>GhQ3x3JfJ7HXlKO1eVH{R+6GF4c}E$Se=6k(W(sMh zx!#Or>zTC;F!~5JN2@|&LK-CtX8KnfX=r~|XT{Q-aBKk809eT$Txl-v-+{WxvmLm& zfxF$Fh$AkKWP8;Sy`cB$qu!ygRYw??%&&I863$^k0|IiSDHzlx-#dx^QP1-Oe1gTY zo$M0+{*ari#bu{5Kp6h@>aPCvw60!F^&t8B_x#uE%c6oY*1vX~@)sM3!COwSv{TAq z8u30TvSVrOmwzdXU%RldCXr|o>72x2=0pmgty3O+uZra~ub;bPjLF(xRNrB!Y_onW zi*IO@_uXGp$W^ZlWO0|{Ax)m1{n)t~H0KSXI8<=6?zyNotGAnCs@I+`|DU*L*=`$0 zcFp@8+RUm6KJYkM$&Yk2$9CM7k~{5Q=+F}F@I)pxB;~~Y^%oC507@VLPOj!;5t$?k zKozP`RVY;132`5{Lj1(wnM|OT+H7VO2r8tbGM#yWHQ{#MfazG>C%MR!h zu9nLpuMV$D6TmAG9;#c4PugSqg_aADttWYTpo6Pew~7^eHEI~JLq8UbQ(qN_r^aot z7&j&Srp2O(23g1?dMdM*WSh}JRo!rY>ql0pwr`uli>lds`ZBdtm;xJxN!1DBb~&9q zjk_#f_q&u|Uuk4O-;xOc_DB}6^l{`hjaMujGZACa(J&g9WQ>dr5t+(6kYgI_A&O&( zDlFS>XFb4pov)j=CidyL9C829@BO=R&z>wF{LY&<(kArfcw)qLjJu1~ABVJjHy*(S zMB|sII=>o8j!2u>0U)YnjHg;ferOH0mC>w7hQZw*6R5~{mf9rExAzIvk?K*jA{j+7 zLy?B7<mDJWPMqvmb|V!01) zj<1rJ#=7sP^X1FpN*7BNDQgI*Q*_!k2cRN5P><5wvDdrps^U;?Qbyn}KFQ?6 zk*ND#oc1wNGlQOO!Hqa`AWcg`n#~ABd*0S)%BJaze$uYIRYn zD-1Q6Dyh+TMW=eq%}CSHwqOF-}o&@3P>2qBgL&*xO(4@&Jbd`S==kst2AlU zz<)|(g6sp~+5ehV*;BS-AsAx6xAAllq5d=8XX`F`O^^D3{0o7Zi(Qs~@20MYFXK&w zcaHTS?1mHgSHKV+t=l4lU-W78QajIFBe|NUGe(FH`c*aws50+PCkKAO@0$;oKJ+Ej ziYEOT&ya#FR8)4;JtbHQ` zPKTH^JsPaS#UdKmjTh8j5RrQkg=L3Qpg9^kBAO~t_(w-9- zd-hHcv-_Biu_L7HlndE~Z&}D`4|!yFVkFLZT5uY*7)61%A8>GgxI|yGIHzL*DxdH= z6GOy4_V4{c4>wJiiVP$~-fkdn6cj*jt5R5bi>1ceJs+Aq&O(-57I|GV=hKmAh_DJU zY1PE>Jh1oyezrC0U(nG?8;S#U7cu}pdhP}T2vhVnR2k!$PcC<((U*KI@?1m(;%3TJ zuj14-ho#8QBB~)5xqxs*wfnMo@58&a`n4XkYb-I2ddEqG6t4hadKa~A^Ww)Y-M*yF zATzEuQqwif-qP)n2oAV#UsRv6x@MKs$0suu&>j0SqKF^#h)Q0m{%Ziuy-zZ+KrH!M zugYTIIicL}97d4nHd&%sc2o!`t}WzIb1bPFoLX;yp$~j4xnjn>&3w7q1qlJ{C3T%N z0etU6s$yymWRyjipWstbR>wOpi0B84{F2Rzt_ybW+Fp}v0@H=tMZ39!kW1r5wLFw> z*;}&vT+X*|Y2JHY)#eSb|zf^6mKx>XBLEvTW z^1tt{d;j8P_V{SC(0uvmr}MGt*+tO`e8TxG@IJ=|2|VEJT)hG&eO% zuXi%YjZTEC;>~_TZC@pLMVT^y-k$CN9l;m+BOv8g0SJU>VV5k0Q_qC4q2Qe)9Tiy( z`4AfMZ0z1%?gH+F+kEfEtuk}qRqy$x;aw)qdgQ6A$>-y{&NttZTwYKL>tM<{%YC}3 znUA^`BJwBDqdE}Nr?#A!4#tCzMvaGniLkq(Ze^IY{Nh20tx(26us%jpfcnc5TE2CY z51dPMoE2N~4<=H|0gGcEM-I2=V?WmM@j`Rv!4iXg7?J0C87K7$y&qY=Eq*j=pM_1p zqR8Z2@(?z0QeDapM7OD`PWSwV5xZ=|?_1eMD1u=0S|uNU_bqM%4H(O*`j(Y>LzUmn zaL<)(0#?_Xfuo?W(p~aCm}ksd^ZtZBc6+Zk=|agVj6fG5!CSkAo!(FrDcyeFr}?L( z`X*UoBAdk_mvmND9#)o7B>o_Zq&LLahEokuEyaF-c4k7c6SC0W@5*KX4UX5y;wH0j z^LIyiHyS{SbmUI+J-@ys8jYQ!5mB9s6>NhMmFZMcZx49pe zE_cUGte(b4Ho(%%qMH_R2T$=W%i-qM2;5~Ql7_$#2X4$IthaGo836J@BAEfDn ztqR*dP}Ao2^Xf`vS{Qn}#B}tfLSt@BI=`=JSv4}CXYv?&Z~gP${}N-WJmxQ}Lh9*s z)IEjYx{TOk12!ONv2m}?D~@=F=~gc)dV0GEjhXmq%M7aXop68ZZBaK|@R!Y6q}JRa zt(yOI;>Q}$=jZnS|6vC~F3bR-H~Tuj`EtE5%BG7k=Fy4YTWRx7~3e1vjjBz7N;n4~IM#Au5uK$`8GLPtxPO@T`F9Z_E9TYEg3J6Cu)#VHEOP zHe4onqeY~v?SH7*}f|%j|8rh!AN4S zI&9d%$n#-0g7&}x?Ezn|{Usab3Ch`hTJb;Qr!3Fv=1=+eh}|X`#0d9O3RopOOH2^C z8C*Zvtq$zV&Cq%?h9#%v8O*>qrkXe!cF30gtfgy9PlxAcxlpg!=IEtsee8wGZJjU>(SlSN<5I_DotP z7)bOEMsn>(z*dQ3^3L8sXC+;ew{)4Y1kuthu7zD|9_iC=H}VV0=|7Ua04Vk&S-D}^ zEtm&Oe!sA>Qbn5BDV_)%c3#O?NG9u+Jc<3FPvrw7aHyhR`2z5e9Qg~Etu40N+M?FL zt?b-_R9Al0%NNaU$bFOW<+tUJG~Lhn@m`+fM#u!IOq1^ex_^|oJ@gKj zMNw{t&m-?mJlA&INkQT`gxQi+>_49z#8y<1CWKulWS&b%f?qNhWIGq&ItO4zOzb;T zIxl`aCA-}Sf_^cvi5&}?^oWbY)6>oZOotli1n`V9DVU}On714@d*C)}?HY?iD?pdU z?(mv_*&FE+c65m*0X`#rz%=?m3;KjJFm3iaI)x-O?KhXn>;5?_`w8hGwRz9kd88ZA z*)n^{lil*Q_SrkDqbEd-xO--AvD6Gk}k@{N;PWAZ`R$rM# zxBOm?#t{tWN}NOLlY<|MM9Ih=thbJr^g#=VD*$fz3h+AMYeHxqGR zi+r1HSiI)>2oz2ukZ++MSjbr!1z-eFC%cIY#PjV}*q^pv0V_1Nznmt2o4jP3^R1(3 z+B&j805Ywjhjd%jMef=;_ANcKsM}sq;5Za3)BTqaAedx`VLz}Tz|55dBb%$q6uT-j zNmqJRlVjrmcvMb~ybqd0(YM8T;xY)NC?J-~gcW>{H*uCmkwtUtc27LlynaHhTR8TC z!`x;!NiHq{<>~vme8d6EH0qN$c?}7>T$Ns;73OEfF&{9e3yaX_sf{mNx zEjge3M$=8`=pY;RG)EFCoOAh7dKKs-#vIG%{0$+EY7YBTF8YxgGmw^DY@5(R-X3dn@P zom)GLr|mvY8c9U(R7_Z}1qkB_ef%%AVb16V!qav*JFCFSECMzg!xT~VU)mUgNgG4t zyKM}3ii|zy8e?iyJZ+I#?2*W{Ag=T6L$NjSEb0#25p)80K9Bk&T@+zIwn5?yxXoJ6 ztJnyLCokY7UlVpPb0TgmWal9p7A5pJcpQtz{~A1w#N$8pqv}L5nK-`LUBZG;57qey z?oT7QjX{cMU@9Jf8Og|>3VitD3|I!!upFAPY*gBt9slZ3)z1CnfiFtVD}a6Cl|{YW zr}}%XxVzqnL-%3YxVJI>74!+iY4jmB^qGMPQ`a&8G9mK5D4v}sV(D~5oz{sWhhdy? z|C&fh3r*ALN&2{BITH;!0PfD)Fm{1=J`{$N0x2*EY*07@PLtMifsq(lnX(I8MxCsu zhwlh-wxq8_rl3dp0$0H6s;z!x`S)FV;x$ihv?`N~hpRvK@-*`5_GzEJg>L*AMA-@Ya{!{?77>54z-mBp`oYxTMRo$@6@*_>2B~REQgbCSTwM zmFfJe6W;{wH;1yh*L3yQmH19wDY*G?`7PNu85{*4p8)DN-x~Q=CM8qcU;7;8i~c#g zp()VQ?E4y-Bjq{5KI|G@|J?72ir)lQ*9LM}8)Ongo^P*-rwK}%padzr6iwuivsvC? zqIL^>D?~W6@i1vU>28M;5+I_#4@yj3-6Z8p+AVG8`Nnoi7U=>)NHA$YXVew&G|F2X zT@iCwh-UU$rNMYq@F}Igj2c|j?J%(myxBZ|Dc`?lyB!m^=OfWHj}EXgJ);?L!T_+q zDRhE(J~U1g_7;8;<8@D#obEo`d_Sm>OCt$`^{+bLF$rTS6AA`ANr`S!alg$6KC22Y z@}#p&gcm%ML8Yn>tW&*E#~)r|l32|X~u(&z1%+mbB0m1t5r zJ{?ZT9Ch{};)TSQS-wfRPC0nZY}B9G>*1B>e%B79+Xeh7LpmdC41#;~69SVaqLmuP zOT+AF+B7WEi5?O=fIB04$u!Ahajrq48E~1io)XYztLC?SjP&R(9}wgW^n6r_ruoe+ z0v$tQJT<;eYty<$#u&-l;%UC$)7_M1*f!21#Hil_06RK)Ew&>U?g0sa{Cyy88Tuj5 z+FxMG;Lk|?K&8HZLenM!v=B|Yf}$bF4gwU2Y94K(`&Dsqar6=9xmBqM&dSE$@Uc%Z z6Z)bM&IJ!x&eN*;Sd_vAbmTIjYFt*$cjL*q=}ISx9U1iXr253)CzA2ih4|I|;9oA3 z>2fdIZSs@rAABP6Jb5{g`ELI$`6%A1uXzfdW%hU5)M81X*lY3zy?;%2#iq@RZPgf~ zu5nAiQl9J&W4vh}kY zXe`Nc@l(%tQLH?3be>~`5U-TtY1xT4rAa>Kp6KuWTWq3>Pa-mm^#&*v8x16Wie zt~zd%-@w4zB>ANnf?YpU06giYPBr>gg8W`4Z+z{_IEa{v_w(okFbbq*jdNMTC+OZD zIi_RMy=#5i-AOwRv9~YNH@cAjRA0p1i+>FU(s#v~de98E%^uZeVLysF%hjbtB$N>u zgT7Q|-w9o|`(|9yL%<$B4u-?O98N7@nPMs14j@3%JRg4VH_r!CijkP>(X_PXCoxrJ z=kjh?aR7J5eSV^6)8bs1n4=?V&Q9V{G7>;wH3{ zE*g-?6*eg$LbhSQP=s4}HK`(?sX-FarPN(uAsTG~!Pr)fh{!;VFx7gqD!A`QkR>kU z6(yP~aM%1ObOd_HYF`gZ5}vMOe*H7u99YeFeZ9zk*j7N73DlOn2XPSKbut+d&C-?7 z5&I43fGz_(TDOXoDn3HPsSkl4lWwv3Xt3CTG#9cq*07*M6zMJNq^3(W+q8)>|C)kG zzwbOG>%<@e>^VIidY5%@Su+LyJddVWf)1?+w;?RO$@&Q@$~9mkX+d7U@`TirAuF~V zRk+gE{_gp_mdXx|aGaKh28&Q#Uq~V`FK|6YSRz$sg!Tf`b>To6>qo|7Y^r8Oc@5iP zitnf@szQks(K`A6p$FtyUK`zk4Wb&%lBoj3+w6);%wO+nkY(o|hx8!xHV9%#lEHCF z#(*8cl1BsrC_x*q=hujJ?W-0l)oCLcDjA1rs2e9QlBnC#K4rCeJL7WPZKLCo`D>AF zKm5Z=`&jWWt6pI=K9maHphXLI< z+E|CmV2p)9XN+k|ZDn~~{kF*4B3p8SW4_b(D6lbR!>BiAkCt@*74-hip6K1ZKJ=x} zL8E&e71vQm>w8b{!qKN!-Vw`Ow)*q_dTAIU^7iWHQ;m!^CNgp8)>YFNdIft1+*E9> zwWjFNz9Y~%T?|Q`ZkK!|EvTX*7VD^x#@v-Dtv$`KWPAk8Z*Jg)>txip3cD!v%4X88 znC#3hcIaW;KDi;T+c?pOCPuFLPdi-Gx#H!nIBZ>=0#FK&9ghH_1LzJypvzEZ%REj0 zK3{TLJnd)_8iFDQD2Sa8_j$uwx*}pdl;YkZ0Amwx#Ywk`N-{l{UNlvRr+>wQdl2cc0e}*LPRf54LRr1MW*_1{@CUM!F6sbRGVhu7e3(2fwE4ctY3lujx9P&~@}{x`q?FhW~Nb5iwq2 zdPrH}kCat~OLpxbM!?OwpYasPXDj6Z12`r3P6#ZLrE)xgNz>Qs%%(j|1*9I7Vd(9} z>!Z^-9QUsV$7?w1Up?x_)#@m~cN*dOloT>8`WMC)N{Z1 zUvcBJ6po?-@jNR(mf42c@F!pd9SnAxNj=NNKq?Q?KW2s1=(j5#McST1TVZE-TT%s! zC9n^}gL}+xWKpri$2w?9yr*qGyX-^0&<5yInr_+-%lY-kvU8EsIB`1ru@3`FY+06MS(YU^&65p! z@W8}r(swnc#o(EtRI4Q#0`J2X3vu_m?G0>7q_aK^QFu5TzT6QujDsRb=SQ(jw2$hR zW16(~^kvWa@<+=zulRP?@{JWE-eEz6Dc8;xHKd8>y$>y|(nX~fdt75;_Yp?#+0{2& z#)NKTof@&MBr_O-?}30jef~J{+%M!bw9w^<0^T4BjF;<8vfO;!eirUW13HKXbPx@W zUmxJ}x9s8L$gp3Ic1WzqFlf;p5DS9(gCKq!8Ta#Fg=~;Cu|bpnP%+xig%x@h$AI29 zg(lf{G4KH5a=V(^FnVyjOS^N$=~10!+CY zs5=PY2O59-RX7hr3thku$go)(`9b>u)qxUbAQd<00B|43i~Xv&g#Bs7F!v!O?BGQ2 zo(9D>$IF*qZuk{9f`K4EkR$u0zlMk9mX()=m?*W zxbsv$)oj;ArqCE^(W`E^>lJuGXSdngvRASyt?Rk_z&$w27OUs^QkMAoFi|7>9djZJ z+qNQz$2r-HA`l*!tv|A^rOWnn;YF?$J@z95u@E`B7vzrA-FOt>j z!z)FQ{T_3SES}sBX`ff&4sLedpkQpTQme|+hTI~|7AU5O;hr|7uA~{!VU(rbmjUKa zPxv~y1UvSAp;F%6!CRtjx>~cB$Z1aoEh0R zmt|5qC@qnwJCUMOF%G(yi2U;5_r~8@`B1!(H`O658pfp$D^g4BUI!1ozBO8e$5wFc z>g{mmB%4h#eNJa(`h~^&5nhB|(16H|Mxh|SQz!_1^PR=~G2NJp(4pt=1^5Ha*Zo{1k%ha;>kr^C%-(2Kc)ek)D*fsVS;6|b4?p*j#b$MJBL)>y`A}Rwkfr;1$SmGh z2Lh166E`u`C%q5G{CpPp9M|sX4oC;pufaf|A9m9c5`Ul9vpnuuxRZOsI&PAAub+-p zb&nVs0PX{2d%x>ui|2Pk*4)8Wno#yj79togS6gM*;$p|bFp+6nWvdQDnKFXrL8bE* zy8TFjbd9n_)D0+g=4;VF>}sP-oZNCfe2cpfqBVW_n!bbf)V~qec~pH`KSP?#GEH6} zBvtNToA`m$nAJ2K4qd;7X-{4sJC>7xNyD1l8jf zA09uf1(fOLRDQgce=O}ny%rSYLeAH!#d!IcO$v|sZtSi_5~P48W0EejX#&>3M37TL zv+GN7-}A-$CQmwg2TbcM1EuPD?9MZUV(P;%B4PV%FjybJHpjIB&N1-Qq%*Svy4tdY zxGcbwabX+~H%QeTza~#Pda&E}8uj$9B>XGrf* zmD8wX)7**GCsFPaXN5?tnVu26b0RiaB{27mHRWnw8-ehclQjR8<|it*)LfB`1sw5*Ns))M`MO0_LUF3QwHR*lHh&e6p481+8J}xD$>TzC z@Q}#*IomE&0`m2C{jBDvZq>Aj$nss+Y5qE2LxIrC^jE4fAV*`pp{!!}$2CG6NfndQ zDh;N(lAUbTsFfDVxMYRR)#D?Slgp~vVNyT_`j*ON|Y+qYNHVr6_1o3Z#UT&xj{6CgPAR7 z5|@?+Bno^cl+JRtC}Q+)(?u%d;p_Puv-#nvNC57 zc`4|Za#QXrd|Y=6-Ky+~$EoYb(|AV|e5rpbGF)eGotbKZuayuG8(^Be9!}&BJZ)aq zMW7z7vh+0;c~LD|lk1B#S!|x0W)7u{syc+v+1pu~Y@U^L?9hi1c%P!JRXd>~EmhA0 zXJ?**U7$F1A=bnK)(Sv{gi9p#kPG&Wdst8q)$NTi(f)^)p$39j6$$E3kqg z(_~prrhgw)@!6V+M#(5#m^=dK&5c}w>8z|{*P+3yo{_UwN>GCrG~xYWgeMI28XP#C zbjuv?gu=RdZY-roWS9!_sZDJHR&eF;Mg4spEeNjGJc3+oIjf?&rQ*Y_I0eYbwNSV0 z#6a0;l&x{1uB?`Kg$g#-_>iEeVsM+{wO!mFmX@c-o2cRV+Sx8hb)5lE%gV0Hu zLa&WN9EF-%4@LjRe(H8{ncH+U6ju^27hrP9TdBGg$m z_h2kt%xy}SRv}YZ4v+%f)K;j0%m|vVPX$Y+&pX3=QA5g31?M(RVI#a?`b5&d`+7l~ zP$DERz9Y^x^Iz#jAuecaRxt}0qEpo)x;zwQHPlTI?L8+^k>eAPy$iYBHVWx;&o3nC zHhX$nq%dl8rV$(uek6i){0dwDI`cFVBrJh;5iI4 z^?jRz)QzxrHfhUo$^g|A%wATxITVyniy;6#X}aHvzbUZwJ84FvEQFF$ZC|1)%QPb7 zXpf?bNBZF?2#{4=Ri=V^cd}^p=0(0t*0<_q*$H;*^GUJ=%aBU&;Sy?rfC;j z(5yoadVIE>n=~~cK~q&r-_7B}JbO(KPvBn}qR>&1jBwg%Mm@~S%93Ou^k58{IuWt5);ya&jjwh4ff)O}B zk8jU!3K*tshV*PRY9pDvygy|Bo^BtyDtEep+gD|Fk6N8NnTStAdGx=HdA+ac1-NG|6Z6OpJB? zxDexqvROOhsOhoY^>ZS+9ZuwrakbaH?o%+FhNzHaP`d+#6~nwZ8FmR3qAU&?N`5>{$UG~@- z5sDCTi;B9Rekg~x`qzLPk}rS&ng9x4PPVI+kd|B#aNbxIt_Wk&!(|JXFm*e(9yy$Q#h}Ir%?Z%I0D=i|ZTZFoa-8%2+=GNT^ zMcr5!OSAjF{;W+kikEiC5Ip0+i@WNo`Xs<8@Hp)zPlz${;&~@%7dK|{-<_a|k6Y7N zd112r=`dNrwsW}1WYj49WPcxCivLS<)SWq(SD!zh-*n@TXX}&rsk=49ge37lX8MQq z?Ws@kyjc)G=mPBGiLxl3b(2MtEH_?t;1Hs28l!lenIe#==?Oq(lAXKAxffOeN&jzVV86@c&&9-E*$2R}}l*ok9yxs8A~ zIo!R(0@NbZ#H&ziuO6Jq9dljyaEcnj$9bN->!r6ThfMPtF6*8$^NvQJjGyp~DWYQq zbUfBs;-W^?jLal0qtKX(3?*<;AkKOf?X;0Fc>`&~Jvu{3hja#IL9MRAyAl-#m%m1J z3*zDyycn_aeG82jp$3G;sce8D5Zu6xr#b}DpxOms-XwmM4eW?lqY+{tZk+CnLNOWy z*3Hzh7-QgiJs4$Ab#TaEcC+}EEVk*o_%X=vX$N)nSpJmk97sw=or538mv`rrefYqg z?^oZ?_vp!pbN>BopN_5=^5)y|r3FJN4~8=IyI6c_ZUs9W3LBojmtU>G`$NH>FO3N# ze$;ak6>_Y(fzjDmEORFjHtoA;BfpuSxVbb8US_HJJUANNYp`W1({@$D#^*ZqEay7i z^bb5T#$Am^+Hh_Wd?G;h_>BV73kA%F?PNS2TkI$-3b6_=Rc>jpFnGdCCE#VdCHI&s z-!7WzJv?`Kbsma(fnVx@Xf;rIIsKY8`gzV%N7+7|kM{DU=}22mrw`Vm=*;@I zwQH?zA04Y+g}!k)3!Kr_=eQ`WY}T-50Aa6!HTU)9;FGV$&^+Jk<3ut|&*phL?F)VL zT_Z1Wv~?h(?gUhM_ua(??{~Jkx_g7`=Fzl!q|$U1cA{6Bu4Cg+WrVx$MgrcYam#SzC_f zJ7-rvzgsr;oXOSQ?S*A)*SWj4BvHUDmJx0b1=MeDFU$+4CeV;2bkHggb-Y2yocFQl z_;2ISp7VcgfA*b!)t~#(WP{K=%~bKjM#x4GNp8mD?`P+KG;pDccWvK-PzqdYHzJtW z+J`F+w03gk@+dx;=S~LA*_c(t+^`4G=j*$lNxm$V+Cbl&e0Av4rD^QilEp6+yXxiF zRg!o3kmcdG4F9s=vfi(Mi>z-`@x#LsO+z))yBS52Dhz|zeR zbjLHPJUcp81P$rNPZpDf5Y1X9c>D@luJ`s(oMI!69T=e$6?>N~^+OV106}rExJL~% z7YUDNI}I=jymG`Kii%%f1x=?aX6tbL`nr|(uGp*O2i(O2MNN;7ACd?UB%L*8HGM#= z6?Lb&M>@wIp!gN`b$f00$(mefebgEtByJ^%`#@qyV5?C6oi(x}zdh?WK==^})#yV9 z_S2fXp<79^xxI(mm*UdVp5XRU&`st-?;fALrn;A-gAmlMZe(3T^md&3<(@$2wKN_nV~0rTu{Wf*-+#N_^MYCP&fI_X)S zyvg94tLdx@ngEMqji{SWXKHoeIk5$?*mg-QZeVB=1FOpN{VEMluayMQUc~p>^ZO>q7X<)YIk_6|p{Y zz`nsC-ONX$v3OgMTjNMrJ}TKlE3F~%0%S7Cd+GLw1FaXA$!g!S?K%Zf?_hy2N{&W2 zjZBI7cM$O(b8s0q@(MN5FlYS+nIesqh`{l}|C3(}YKgNK4ua`YTxSS`3Uj>rQEJVu zJL<{PCx)l06{Iff7p$B^LC-l5G5&_%t>#HcnqP2RYQ_soi5)0)TFi%nc-a&den zLk{oMBXRfjN6*>T@@Kq~uhNN_OCe1caRoyY`gXRn$6>#>*yyK{!1r19+W5qZPgVMq zt%>fz-FO`}QGP8++IWO8vcB%fSjxFCI;B}t< z(r4?24KOmpuR)QpdI(wF3CU!&##rI5n3SWLU&Ddt19JJNF4m&;3ng3{I@#tR9YF2q z;&<3igV?-6q#`RClPCzn56M`O}i4LK3ZpmCIM7V3C7x{?B&4TBTwq%bxO-gmO^y}vvVf&xOrx)j^U(at&u8wcctf7PrD7q2ldvZ@~3e~q{z65hgZ_GR= z?P%DF4kwrtti#&%Nh>PCs_Ps;x96F%=49e-FK*hY0jdj58yHb1{XJ}=8k@4G(dalJ z!_AHZBCV?0QuWJdaS}$ZEPv8I9t(OSlj>)hFSG2WIKrFDv)Cj(aj&{vf;uBa`oJ6I za=ajtkHC(S<@Eh?o~)kdQ>En01i!Z#+zUb+Vcm8OaFMK^;p#v~2jxKagp7Luu_J_l zS`<}U7BudmuH_6P6huc|>lylJhJMME-($6)wyZLA`n+Af;AxstH7H>rac=*-KA*%V zf5xNByRp<&_vkxy9(Aec02c5X*vaM9=~vUr3;NcbJSO)W`jCkSl{m*|qmgcPL{2iB zsc0D4{R`e-D*v;j)b4ifvts*DzTv_#BM&hT@>pEB*5JQSKd?^=j*9t!`QS-D?8c~qEvfk_6a{8Q3U($|yH;)l^Wb^ibpg5Hjze%T1kH0x1 zc(!Pht)xsVaa;G$OkXnGk+`Z0A5=lF9k(#RS5@i?pmVvj+#(EI2@xx6lt(@}8X768 z_pZstNWCja+Npwt9g9Th`J;iTOC4_hqAyt2S!SF0bQw{8_$ z6IIVzTj}k0r!?g9ezn}i*FBd*uoIY7l~FbuN-WfNZaHKpGea3iErkZ|>SVWhm*Ncc z_h6_vUkPm??Um!@?9y_=YE^XL#qjp$S3+jBxLstBM)5zY>wl}T5YdUx_qKY#m#lBx zl)|geiic3KeX`8ncGp)Z>t=1zOWm2 z`LN)mX#MXtnGMip@RYphiYwL+QSJ;WcN%XM|G(gpB@?u4$-45xn zDU$;!R4NiE0sH8(xJ8gp4XMeRjYjhqlQLz2%d}-1!oBJWE-Xg*cD?z3=8mmBZ5{dS z{T+Sjn{COG{q>0uNa!Ju4WyU!!5#ZZvUv1bL#*Qh8Zs_n}cwbP&{Szc1r zOZ>g3gre|-m~SI8EGmvfmemauI>OMtW)6w~>|dCq>->0#J>F68>spwz$Js`g**tos z+85cUv0qE$V`gaeDvq&yw!~;=m}Gf%$W}~k{|j?qj2#b*YKEEvGjoNb4POnrMGB?v zldwP8yuVm3v$H`!UQ2v~d^yhJwaNpjk{I2fm`KzSs&=d-Xl1|LgVLMwNbo6Wd{221V8H9FE zZUaZTwOGqHdc5~C-%kz=X_%*6UMybbc0}Q;CPzbHmimmrW138xSw8NT0#rc_)Ayhj zg3O1j94mQV;QewYdvg?55)L{TR01J>x=H^B_Cn%K)E<3U{mz!kYDfySF;jJ$qGFp$ zCftj4>ciq>w_fL*uxULwsv8F2trthF%f)*8$IUV&swBP=;S0ekKdfzOreMWAr=@!i z;>68*&EnA_W}wb}7prx#V&G$gYQpuuS^%TmDJv`AE;6h1Je4h7Op$Eqz&BU27yg2| z5EEMGQN;{CT#PM<@`;9gt#7&k8HkqTNb`z3 z3VCsRro5Ce?dvBOjfEM_wHx=gI_2olB`?f%qO#^scR0SkM5H=ZFy#=_C>^9N1Hp}C zlz3TPxTI;70fW1j=keu6GC!=`=B4~wmQ28keQ)#Qk7n||dKio%mE8TFL|Ef_#jrJ{S5O8Rsz|Sp>U<`Ml&!Hc6hRpx=~Y@` z50=xnE4|kTq(}#WH@P1<%QGw&6|(ew^|6P5>677MgJ^vdoOW1GH41pZF!IY-5DW^@-y= z*9R&x*(gEKV=zahbp?K*8-ZRl`a9g0tGair9+w0DxS8)t#lO3pRRP;Q1 zRXVt^#v9~pJn;JCyKb*P=nXHe$-XpSY8qT4SdPUo5DRnS6fZZ5AX}3l_>6$<@iqJD zwjM1DA@9Kc1>RT5W>wb$h)qy+F|m&k${4&%VaapLH!hD{sH`Di9=QNb9YRS%$+6UH z4C*zSUbk8c8D3W8pRP1BHqS!AE^rGq^{%1f!|b~{pY~k#sC3yMY!Mb7?7Z;+hGJc& zD&xtTPZr-A1MWxl{?BK74>(c5(@k@N&>N=|p~mO-R`!e&MA`gvss9Vq)9J2WwlXZ1 zANLRmI~V0Cj|gKhdwdjb)*I^kXaFFJp6~(y$pKt6YYgl3ok;HmQEIC)w@W4k@xuZ; zKgX^GIdF@Rs6I?*LQX*kIQa!mq3<^{In=O$dIk5Gx6isTKQo;p`B-VJMP+l`N7G6R zL$h*Zao4GYq;WK7a0~(Yri7%~LDr85kEp%hkC`?HO%oid?Ggc>SMzSZ<&A>Wys)_(+gZ3_(T`WDz4YkGzfi2v0`rld8gGq#(mDkSN zw3ZM_9=cDSrh!Qa2dc|hHK_EiTG43&Y88Q_AzSb-g(B8{ zd`jGpai3*(bOmKtcF#Bt4)IkIx}s*2jg!eMhs4Ju@m}OdhGxDykY^>IJu4XIU)6}E zTtahn7?m9c;;V_utQkDNY9>4*;GhKj=pn|s68Vh+eSp#?l1#(05_TxGJS{4YS;1yi zSmtH1dBVdDT z#h%e45Fqhp%h#vbF(4Cfr3sVMq?x`YfS5Ux`i&x5HV3slE&=|``@8xR^?tW3CkD^^ zV;LgU;4jog1Fvhf0$*wt8V%ekqObwMvL+-LK7XZL&WAx48G zH^=56OhB71cpT_kGmxC#we|?p2T5$qa{;}v&R!6SEm?{m#9BsTDcWObE;UzsTPU4)gY>rt)JW9SnHok5s`Q35!->DYv+ij}*v?&-VL`Va!h)ji|ur_{+?|Q7L*H_UnwIdMXusO1Tq8Pu}+{$-e`86EQ&MX zg|9c6n*I<(EEyuMf!@wGn|)Ol#ZZ;uX-gDs%SMKv-4_+w@mXDxl^mng3bagt><(F2 zCNMIrj?_A)GSpY6qRDpl{Mz0Mk0w?HGQFYA3WUnLU-5&@>y7Q+sCqT@y7%>=l38K} zVO`0rX0)`*)vSrrw=_wrq{JBystOlXc)Ky$kf5LSUqIF2&?{@Wc=;i`%Gd0rcukIq zA*kXEWo#lYJFWf?rY16Z=yg|U9F(_Sj+N!hWUB0X_xyD!b4(T4CW=+s0J6Y_qGFn3 z?XhBEv>@e6aC>l0Bc>hkNx*I$c=g5Ql?528j`DpSSXnIFoo0{+l0?k=h8fj#w(=8Y zA!~Qa9aM4h0}!gumMYOCz8_6$=8bX~3+(e?K3~&8CO#Ob#2!5^J?AQZN=V?R^8olc?Q@d;>s)4 z2@V>#%R&P)*en-0Rw+0YdMmqw43IceJ?;Ef2-WNybclmsj}Ds158z2X4myZ(7;-JTxk4)HVZW^n zju(T9S24Mfb0M+fovEx4x7>3IQlg;~7?)5S|qGyP6NdR8rCq97Dr|q3a;w zbzlrCfB>Wpz(&V)fb1Z7BcmePUUsQn9Nth`!aJiywV_{{n;;vukNtL0*T9;oqA5^7PI z8xU1mqafsGpy_(?D%5u7&Z-X&|0QNks?3TZX?{7I%{EVGF_gqF4CN%trcdkD?)#IA zV`UuZLvE_1CY)I5TRTY@H!blQH?ntTvm)GQ?Qdl>amW(?`|PqgYE8h|KXrFPt?~b4 zoAbz{+HBkRz;P#^!geEKXhP}?@y7ha@Z0AE|lT1(G*qh*{qOw$K=k8{FrgTf`LF)KOU7+|34gWBHiV1-BoE4|3`RHuv?MauDkgXs;Ix2 zi{y<)2S8S-eB<=g&Hac6piRpjqQW=je)=Ir+A5IVNc|!etMp-7RX9s{as5@P6OOsd zl-HNt-DbObmY0|?bzFAb)+NAkN~HKF4+A%S@}~Fi-E66RHd!j^`yc$);`aXm?rki4 z63muO89#4_ZcBaV{hTd#+4x)W|5dn}%u@9fJX8Lo;nSMI4>{5h_qSh;Lv@q?-?3_w zTg>l{gki75d-I_)yg%TT9flKogVAK#8FhOoPL1*G34*}5O*xbDv+@B*RHhP0t>S1p zQSnP?n?RvKUbft?OEcT9^uNk~oE57WhMk!28z&LaS8?-#i3u0%$H0l@PZ2rCzAv0B~q;WY@Gjp%67Tf@5WAkw4iQIW&Po zY0=;gIheu0r0i9vMx(d5gi!V+QZl|l;t)a{WI3nT?b9^dU`fXz0=_40Hgd-)oH)*_ zWht3M4Yz2Qc)!+*ZKf~dQFvRk3qO8^ofqUauS5z zqY6u6Mly?2{R2-`_EfiV2+OARQgsLEYl_6&T6XNs7vH|^Hu_=Kf#YGVCUP`+Z=jw+ zapwuDkp&d;GipXoPMXn=_9%*+H#%)zUZ_hPUD;`LWl+#@>*J@bFY(%=%T*yeX|k{o zOWe{ZEd0X8@(=Tu;`r=817+4>SU*7@(7A$+XGB zk@7SV52A{d!!7VMN%v#m4&f$@Pg|v5`i#v*d@G==@!V4tIIw$inz|R>;20SOcSc**Gs+SUJ4w zT+{^KHb>5pp`W^#B0dE3_KU+TCLHK~xQV<@zu)UlC+YZpD(_d10YbfjJ-+GfTNuh( z-7mA}?3ihYHyY~+zPJu$Wt_61H1a_d%;T8mCWn6Zrs_Fukt(1oR||!gN`KOGp8_ar&d?6W?6F3Dnb0%_jlV zO(j~1M*^_yFkRJQ1Ez{-`n`^L=CM}9{jxnyZG>(QO|V!RrGM3d2cNJgUDr{S1FA;p zs&4y0{{hNt){!I$WThazs>6iCZZ>0Y60~{Z_}9;1f#I_jMFxfP%Ch7eGNq(%0%I zGG7wzrl0ofCIUPm6vMyjBn>bh;c0jOlh}ts8_4+Kz9hmkm*mb*I5>K z0epCv{@I_5gXfh|#L`6_Z9wanh}5nsfKY;TUMEtJd`a4?n+V(%&?H^dO$7BSNe6YC z0Lhos=+%TUz`um07j+ZG-s3Wxt=p9*1DnZJ9R!KL}6?qsfi#~dY`(VZ=_EJ_8r=;C>?s}u{ zXZHiE6tu~8=dzdfMxBdco~>xa{%-f8%8J3sL(QdAwEJ)2&V4KA%^iJs43h;_FMGGs z>$LaJ`_9n)1S`Ap=MHQ-?c81UrtZg45(^{-{r>%=m#U<RgcsH2#j*(|>vL%m@2#bAqB52g_+z;J32d*q88l{`gts^g6T9bJynKhkU z_j(5tq8q~{B#ylChu)n~nQq9y*qUs}TTn*I`!O~s@E&@1V<#H~l`WOox5J_18h{uv zS_(7`co3pZsci})Y0J=d&|X5Mm*6NgmV)z*$~{H5S!#)=)AR@dj{IDJj~3ln=L8>P z$Se+LC5O9_)|Ogoq}C0L&F5h$DGsb|OFoB^e+-i{56z+Wj!?ne0F`t;L42+=h0BA3L8X$H+|Jxtlvn0R-Mru8qCTiC4bN zIbyeMCouMIR1YTY0X}*Ng5aZuZ$1{$a&x46c(6`c;Bd%-GE1=fQ35_Ha+~2hggmK9 z&Q$%AuS=GyKVg;^I4o~cUU-4^S(rxvbKftPXD<$93HpJGlEM`bSvyU=+C!mF9MI28 z3O5|L8F>2OgKWaqVj!|B#UOp%kLn4mS&2xX`K69qnU0S~Ue@H2!CGwAn|m1XR25r`lrq_`C5 z+hH6ALTQQC3b2MSNg{8hX1lNcf#rYrfLR`oT?nYId(ouhi3{oUjcB750gqU8kvLe+M=qAm*CzT1k#TL@3gH}M7qih;-V zyg`A2;R%*ET#UnIkuuVxHYm^uaVSx!`39(#I7nxEdP9pr`w=3P4c^W9Ib!K2+;Ux9 zt4ljcr*Utr=htj|6kORU0zG3<;dxp(mgiVT(V!rw z(dH~rdGWr!zi7iVU{O=%b;v+9e<5(8dZ8=3aH=vcMkG+Jf)jD*%rBtQ`_X0ZPCb8b zVkk~=3ft;$E!Oz{?R$W6AbpD8+Yht7ZX@#IS#{g1{v3LXqG8yV_uzNG$X04XI6Nc) zlUI3=?)(z&yRKq%xK=KFoy&>u{X~sZ3=PHw-fS!WpyzMK|BxlCrQk5C^ox}iaoP{8S}_FmsY@GMR`U2 z-SS7azF7S}P;!ye=v^~T$NUAkL{e_~jnv1B+0tc^s+P`V@%`n%@`UsIu6f}P07F2$ zzerredR*&K<&0x#5P)qq@gf`rNLh}^om~@o``T96vxHXH1g5)s+3cRPwO#t1F)x46 z*jX+MGPx*$NEPb3n7zC>R&Q2a>{Vs8Ge}4u6+_;6DCArhp zGP2a^Vc>PIdy{E8?DePVjkKhLmK)^&R)Pt*@9SDMx>QdpOD&)$CbD&N?=IETyUiTQ zo?wG%@203<15+u~y_`EjL6lQMz>?Rq$5A9q3Mg$;TMmsNW9&@^SEIBu9d;&Ye0e_8 zr<=~?FrL-X2^@VVFUtwp*fcVH$b}!4_PKL zCA&_{a+2=${Q9d8TOK))Et$04d!4f%c3bdBqtR%-G@3zXzR3~d`~)f{)ybPw#m1pN zq>j7qNj@%$%{IwyXQE4`&U^@be6nk&7{ADI{n`dXp^M|PahOeeJkW{|g{%|Sa;E>* z!|>a{S>~(7CNJJ6t9hnvaT#?6r&yd|RBYFq?XnS(!kCKdd77o0^dg&-y_36V$w~pSiA1cklJ-?*br0$6?Mn6A?-(k0GZOgy7$=8drSvSK&888ryOt-6z80?SF z4=uh4#<~}-jrRTZ1l;Hc=vK4PCfpcv{iEr#AKQ+-JHe^4GN3{NS;D+Y=B-$>Jeij*@Ee{hvr^kZdk{d!iSj`_)y5+Gwg7EpTBmKEhl#`EDleEWzp7B58#R0jPMrQK7?* z`e3Qxf~FU^FI?7y5c-_n=I48`X?YXQsxCuOk>y%L`pMJ?P%xc=Ogx?TAyCl5C52~7Fm`YmTs&l&B?nFK$c4>zE7YHT_3VR^UoK- zz>iP5msH_R~E%K$p?$q%R3*nmU z5Gq>qaO1;KlNnr%U+yO_G=YM;*$*F}qH5~^7!H8c0gP--YqF9^X`GGOJ3T?gu0|XE z_SaN)1yzYdE)o7F45-RS1POJXEU9E+XLgrK>!V7Xg8!(+m9F!|T@pvm6C0d2z|vQ_ zh$0{kBG-A^!*p6u4A6_6ryX|F0tNt(dNpjD1;P#Q9^nW4CRp6upC_B7 zF%@PHv|f^RV+6g~0Y>I-$|#ws$!4DKBMt7l;2LJ*N+M(Dxf~OcK5)K)H9!xWl4?_9 zZ=?XJPFlC66-1rcxf&U3dGz}T5-t?9f~3yE(p;od-aO%U*SOgmD5``o<4Do0hp!3x zs&_9%n#`F;2Qu$nki+K@_Kx5e(xOdtHpAqPBk+^c#fDXH*9o_hkP$^nQB@(N(i)KI zu*)5f9}cnN-Sxt?L@r#*C`)?TzubQ5v&I9NWB*dRMu!L*WRQ(NLWcFreAu&uN_zhL z{zr-)MHMTR9IcY7I$4SB^oI?Jnh5YRX zc7-K&u_E*$AoRTHd=Hngig{}THv7lyuMdg%6U5%*SZ^Whlitb>`&7SY89Pd+`F1s5 zb7MfGyQC#RoU_5%`{DHL`orn?iX~#Oi(V63*=Nm@ps74_x^xM$wknQ<dv6WL9Ed zagi@Nkq`3PT#%nJA4>U@)WW0jdFOUfLG=it(sBLND0bu4V19EHh)@7VA?3q$-5}r) z233qBiaj9-~=x|z+hXSVBteZmEGZ=L4t z*J%cDiogwlZt|vysb2I<3(Gcus>6)1g`|UUsFrkAaGt630zjVYj4sDF(@MZwO-Rfo z9|Q}e>d)Z zf|X}Zw=ZTdD{3!Hank~~a?|>R{JSm&M{p)_y;6(BpD^DTI-p!B-6XTG=^R`@Y8oA8 z`RdF1_>%tL8?RV*aSFxS9kND;JX-@SL_WI=ut%nI({V>xo^*`tfsy0sY>!tRm$4hp zV!fv%%V@Q7dOl&jeO)MdDpcZ$5yzkM{B1sd@fgf!e~@{=%)2q1Voeg0Vl zk^VkHu4_CA2+qX_AW9AXzUDCF2x$(BKi|0K#>HV&2TtQSHa3(a(!)@$%l-K%_G?4g z#v(#QWF@(uc#e?$ytp>B+Xy75V{g2RRa)53RGH>h%ZtU`D(btuP@3m<(~6i12GiQX zi-+Z2U$i6X9z4`PB+fj)%2#LGr^W0OAJ_;lI52T7;$I3z$lPF8Cd3{6HW*wF|80ZS zp&C}1QNYSg{YA9Va1LBnq>xC*Y=Iq%byz=q^{Zfai%0 z(Jj=MM?JLL2g76jE0``g0h=0Ho=ZJ>>oFr{rY+b@HMZj)DPV3O*&rigaY_fPFIfvx znsv9%(qyB0PG8Jfa#9DjyYk75Gz5~HQU*W&qU9kEEbr_koqc_St~ru_MQ{pK?%Mao z`fsXo40lb{r>v_qU)XT9T~hk-jK+f;lt3PoyWI4c=!Iv!5v7uo;!`ipkfjuBScV?P z;L-^DEtX+qK2v47@dyx5-UwXN^R=b(N&0QicX;Q!@*^N)P*{H?=6W1Kbtjtoa6PvJ z8q}cos=bJPr>Ll|T%S>va<<>rdh$rc65A5$x2To_+Ir9gL8WbX|Ix~<^O_w0TNP{s z&thz3)e*aM2n{2^Vv&;wjR|cU%&xrGvm{GR?W54ii^Z44O8fne4v?V4NtpE4ER(qA z%j6y@wKmx+scJ_xuhdZp2<~wsR$Nb0N{OuT)((YQohhEVe@y7+tu}2p`lO;pL{Q0D zi~M+!QcJSXaS4H%fJLdPsl<5AsuSD;7{X)AYOGstHv5Q~&Gp)z9X)L&3^lc@@%39Q zN#XV0?0>36>t(SSuyiD(o7~)AMG^zXjejC#wCA!^5+48qce5kv&yEb;gaQ`t^K9Pn zKvB7>;0?;l`t5R%7E$JfiXkTom^PtxLOFyUv`@YDUAQK>FX;aO43&3ly}3xRB?b9H z!7j3FtUV?;AQ$M&8>9L?x9L>|0r3>paJa$Vlb8 zog!EDo^lVMqSRW)9Y8H&&snU?NZ}2&gVNQe6N;6!i~%FcJ|z39P>#yKoa|-v`k(um zM3okxnQM#!$^IIqEhSsbp0;bg@geQ_6|dxK6WS3bLyFD%(_-`To?pK&`s()whNx8p_<{{&??hMga)F)P%tcM9vUe>y-)AKy8Y#8yD}{q|J9v`k;zfC18P?A7 zJtV?|$y<2e54lVzQP+ix2{cZLGa8%?r>BGe9ZvLJskpGOU;@{fQ6?-BDC=8qqXMsP z1lF!h1K+vjrRByC!%0i&KA)8^%WH|I)9wViXg;?H)73^(Vn?0851dponUV1A;fBJtOU($c21z1h& zTwY&X3@56aOHWJEJS$p5MjC~IrAhN2<(X&&7pPRBNUzr6fMg4Vjn&w$VVM%wIg-{f z@P&$#Y}H=p>P@nqDKxSp?0*3>bW8pK9qg{v7j;E$N@4J8xGV6QCh@xSBr_>wdz3ph zfA^GjPvZ80)+tSIKtl2)cKLqsWwE`S-Svv$}K=XQKP)H00OwJq~SSdEV2M~mHrbj9-gfGBkseO4=o-$RHy13u>C zcx*YW-aU(yUMkpUW!e{6)~NkqIbGBUWrVm~M0;9+e!#Zh1f&H~k$y|HWO{(_uY7tymXvqcbL7SjJdTa-8$}Nfans07@!R%M|C?VF2;dZYTZn+w z3Mxt3W6SkO>$kNHHN{g2{IV*qxQuH(+j>OUn2#gtc2Dh036BjrfJETGQLgJm5h7WN z_0+;>@z$ zacLk~2hW%%XX4{UgwsLd&8HjhidOv!S{$&rE+)xrJ?NW&0#h1#%hQBUlsY`DvwL=7=5Jt|-`j%epn5 z7rD;m;PY^DtLJ*TImXYZWSUp7$_472DrC#?f#y6`c1s)q zv{ua09i7-=ZH+j8Tg~Sw!6Ta)Bk{aScVc|wb0Y7FKp3)rf5Y)Zosq}%>>C?_EXt#rrpja*x+KGr*laN&l!HWx%;f; z53^SgWmY4@#!AQNT?@j^?B=*yrPR)g2ANGT)W^SEZ>aCLJig_BK*T_z6-GSZ*R~_R z^9`&)OJ%7Etnlu|da5gWCVqVfGOP>wN<9Z5VEdV2BMzJGW7Cu6~nYii3V|ojT8RM&rrt-SlQSxxKzBTROiVT%FsFghJ>2a9|G>I9JzK zLu;_exws!&uNFIZ@5ht#YPBrd(r>Y`b1}KTw+HlG6@xd>o6w#6W60qitpI(4XwiP; zk;*JJ`81~xnZ?-U)4AipYEEUr9NZQ(>|K-Yhg3#L7tQlyG)=l{O75}gZ;Eujm?fK3 z9XJ95yBz~-JiHhMC-2&)1QS+Hfa`{=i6P&zTEbANCEB#sd*nN_ih|m^KZI?J|7LJF zK>Rl8Q&|eC{RL_FeRqH~y>BgE`51VC&yGG*q^4fn9qd!?(OF;XW!~uM`cVHia<<eZ9KvA(5p?52{v95tQ<_8c zuvJV_IUVJjRB%2Fv%dormT&w^p830(r8;hnEycXjG5Qb!-}8Z(jQYvtW)p0|^5&x2 z3wYu|wKn<5Z@~pBK(DHM*)bCz_WG3#nq;PgkHJLvfST5ez>Wsf#6}~uy;EZS+rOqi zx<2xRJYqr>I!22844*mA#a(s6;oM?|qV0l!=jpJdkE7X0K zov1yk(s<%rI};i*79AP6VC42j3`QgKuI}_->|e@14u-KC*BBGGixv$+A_SHjRY6#t zSyx3cLgKQ^k^7=jUy8?I<(vtwM>QnQX)V+Ipa3X_?6`PAlK=dohBxi5do4rLxK=blf&GFn9lBj z*WXw+)_>QS0(|ePdPtry>&6F1QU4p@B!38 zQ6xWF(h>vDYaG*O$Dj;S&3mkmMN|NVmC(k z)`3Mh>m^-jUC|H8>(OwvDSns@h!s!pqwpjSveUrNCDO0^UGf)R%V48x8LunwNQs@& zA1pRMj!%;nm5X=u2SfgY?xx~xtz1cTqIr52V)sN}rsbh2{U2cNACpZx6smLDb1ch~TiTtyX;($~#v` z6WtFh2Izz4gY8RI#+~ZhlOTZDh+}EC!x-$ak4wNu6G-@0(YIkL9|CeV)-jc5!&C`1 zfDR};NBtm8{O66*tr}2ad$r%PEUt}v+FDN#|Q0k^UaUj?m;_WtY7&9;1))WJso2N zaoF#$sGLhoM7*{dgzm9B)}hVXN$K>3QZa)yVSFu8_8#>2Q6~mLr66jJ3%8^4R-wjl zaRDx2tM(LA)>i#wyW-WM6#53fQ*2jfMY4XGq_26g>FDHn0E*H{E1^}Nh88Q3aS?#! z&fSPQ93~bJK_}XMQcnP@@co5atL@|U-^2$vS!GeNT(XYo-f8g%G~tGEH$C_nRyG2$ z(z>7WBGc!ka`IP#kriiDNUtq9fTde({%T!56G-xFS?uurg3@5U&GgB#T*TGW_$4t!S4dr)$%7!FvskS+ z$!ex^l5rfnHill7*_e4a^3dDuFzW2$TDh3nxn-h^!esjDsO8;Qgeb$E4lggKr`PA7 zr=|MVP>w=I=9D|%CfO-ya+_sO$?R)u*WSfyvpycLHmuLByy$>Vki2#c0^F`rxD?R; z26XN4csDz#9zwTUJ@mz&Ab`KT+-=|j>d=JfEonE1$o*OTSz^P)(t zlrr)BLn!4Su6%0ksU;RG$yf93Vq+)u$N_?r^cV)Nops^CC|ZQ4i>Z-);o}H9pT<|` z(y}m|4#o*1Z~9_9UF@65Iay||xcjL3c<+RV1gmB(q`gN*5&K7~x|L5&l-W#`lJZt}sTzV?s6u&to zu`~6rnIs#}^pPI)DYlY$$FWjBIy3$2m(&xKO^R~7+e4dLBnW~42!J4Qoz1lKxEg3; zlha5u=@SCZ8>a_LQ*x%(YEp2K%$-^w4ky5PHG4@{TN8o&Y@!H*)PX?!6h@H5eT1-C zNvJl^cYFJ52>CSsq0&LQ$n&o*!qEXS!RgCx`BnS7`S)QYBPTiDk*rsNA_62{mXmi* ze87R$o!+#EojnjC)JZ1Ye>7U0Tse@4(T9`8_KSGLgN+?1;Uk6bP)bSxmPSQI+3tpn zt|b~^kWatvhJ_7?p!g&!)PL$oSj^6vKlumv^nAM8zAP7yKYvVLO?t)C!o)ot^e3PK zD=#0AE9co<<^(Y=Q^Uo?xgf4hP!=h2DChA|AE`i}CPBk_pm}u?3LLjC)>JJ8>j?cR z9DTYSjjyNPMkt#8I=OK^z&9j9GhI9nQzM#MAtiV8e2Ys>pVDoSu;SUu-GP7MdKZDS z7;;`*$8JoVk@$0($q9B#bDBWmYC4voc_hBw1_(B3eExj^_IvM2o|&HuKRe7-GnrZ& z-DSF6%)W+pK}DB~JY74@Av(Yunr_#-nF&Y_)SlKufIN;5L}CPzC)fsJ+2g0u_za(9QM&I;m{R_g!K@JCDtYXFC-8gheush%aHT)xkJGpG z+rWG_P3@D!5Syr;YbtEOfx~z;zcUAlF7pADgXXGGv+xng!_#CZNexj}YRDwOE--;& z$o!;-`3;^|!&5Ng&cSnSnqTf7v!3CO84M&`xGfJGqxw*%@s#$D^=K3&c8S1G?#J`b7q4!J%-^Y)shYYG?Mh)~*z$YW~|Y zPv-^cuhSpd`u}TiLrk?d`hEJX+yD;Tt8K6@Z_JFc$K7*zX5P;sOgL+Kbo7|OAnj8% zCxe#Ah*sY#jFYd2nlR7=CI53AqX=v<3IdEGyr-s4*|1f%008;B0qPYM(MAjHe7DR3 zK|v!@5M$9j?iS0EBaR_i5i)@o#bAomzcp)x3PPufnX|Im->-|Xlq>xJR|OYoQU>8K z1vhUx+@QtGREy5vsy3#YjrRd=Mn3>72*}{Ev4A7cXtvDK_5KhRQ&NNK=XCS6GYt&@ znd@3Nxd(t24OPtJ_k8_T8=)`jte)&}eQ^R+4DuP2|JH;wx<5ogv`FdM<=;9fab{3p z>8U2UAta;9bS8F6RXgMV-etS?;;<=_T`ESiRKx0bGR8suPS+6Ts6+2$>nyu4(pINo zwXN^gi+ru^kPc$Bw(%OoCJjWTG!N#x)%L0b7B(SelY1M8n|>|66!&FgvF1&397|D0 zaa)mb#YqK*!;o^A-kb+&bPyn?d9ZVtJ!`osR&D$}o9(uF+5aGG*Dc`SD9T_z7cYZh ztF*X^-fjb|*0@X^Z;G86Y1AfafOc+&b3G6g*FhjHNl>gMu!gXzOM|=b&k9yp1C8mt zsPvZGaf51)naTl$8)@ z;&GY1Yi==Tu1r+Uta*T~xUc-WHSB}E-zoq`3;^TgA;WdRw8C*RI|?X#KfoXgtSd~D z^b{~91~ALyz^AC&yw=uwiI;}8H(xfs$7QXt+s-%|efjk1PwxPv8enSb*k^O!BMD5~ zhFeQWpW0L%Q|2!#rR*sRk&dPxEuT?v&yF+Dnwt%{VEV<PK=!=?gY%??CvMi@ zfS(`Z{WuEjEqNJ_XcyA&#ara#(PQ?!Sb<=nZ5`MG6IbPX%X7*-E8QZEp3_UdTh6sL z@dMHqj$XQ123}pEauY1#K0JY~M*94ECsP-n;5tBVWVKakts^PpHbLyz37iE92b?1a zNfK}B&>oQ5fYPqWTc1DeP$Uov)@I{od%vfwOHKrj+%jYDf_=p0OQ+lXbus(-y!g+3 z_LLcLAa0@AW@c}dF0;ZpbuGBB>Dzd;Qb2k#ob=9{*djBULfE}jyK zr>wT20E6Np&$W%Vf}qSjk=0`JQpUVS;0urDt@ZEV3r>Pq;J3x*<2rqN>2pwkJsB5A zOt)|8-@B~I4EoFRyseC6R^^gTJU;9M^ew6a-k3+}AM;>r5Jpkts|^hF z$BwmYP}*;rAwcjhD)4q0^?D#?UY{AypDPz(;(Y5>=jPKABiJV}P@j z>8FkA$<1i|M{;|Wj7J~KpcD8^L0q#P{bI4T>^p77JQhE7dh=*h1YrMiFHhT8MWf06 z_|g>8>|!CJ(L?7a8IAsM^XC~J#G!i$l5wqQv5bXz)6O{*9jXnhz1hoe?k|&xgO)M2 zTz#bfsdKKe#D161Go}W6*8J%_4CAn@g(ypIcPzIKM=E4X(ZGj!`l#d*N(#|5ueBC6 z&9jg-v9P!03Ghv2h7|`2e|R0#mh-iA&I|%Yr@MU90Vx5bdwgdnj1geXFPK zRNbYSZp$PIS1&3s?8UW;*)8UvmxmMEZnVU{J1N#8{%7ZtXg~cC_SA`~)Lxu=JEfEb zN$J!&TsiiX(u&q8(j3{;o`qZEt0JiUDP8@rI=u6wRPoM9X?RT`dn!fX@qD>#V0rfh zMGo!>3P+c>Uv54pSLc^w*9{padaJI_cFU#7BDq{H-rn>dzhuj|DxfzSjcjK!Hi(yn z?E)h9Cb4)j>0BpK)tSI>25;nmjj|mOtO+i`Dk_X|metA2((CWt%1ASN(v^FZ1Ox>paIoF{`sa zsG}inlG6cT9^eEe0HYnxW5MtSj6^h< zm0-e(*;n=t6d&BY1x<(|_4Pz8I0NZqFpB}CzAP2VK1}wpo?KZFEy~xp4YX#w#3Zt1 z5!&R_{?v`?f;j?eVV=wfFsYrigfIqgK9eF;6vz;Ej;cf$5XoDm5R=a1g_r;l>3etj z7z%44WbFuq28_@ln9UCua2QU~A-vzEVOI<&pkh-fs%@eD84h@*=f$c(TG7sG#O(+@ z0_255TTLTPQui^4_Adre09)R_vNnn_Ah+s8(bmTd^o^6$^UD4MTtC2x6!qgfv89Xv znu>k?(5gYSEig*vhYTr9oAd#NC?B@O9kUk-8DLFD2JLiR1Q`Md#>wL;5Y$kijuOf2 zc>JgU_>~$fJU1Gf!>7Z^(S@FGTh+Ha3<ain^Q2xQQ#8wJ$bhSI#g-u%C!ZOREF@ z%a_RrVnZN!kvw?}IY7I2+jM6a>vXa5U$E(}ms_5!jhCaAV+A|3@s>0IETmfTVj@XT zjFK{Mm$WDmuV@~a4+hvVA9e=@25MjMf)>ssO2ZA{c^=70@&vs@^PPe3EKVMKz(L;S zILUm?6_xF~Oq6k%y!JGQ$Z(o;56ywUOE_ue$dCdhe|wT!HR=>W;4FFZmSZ&75Qsc4 zv3UUBDf}*yg*$kH0oWD~t(7P$!Cp1LF$AZ@^><(1g=BDX1e{^9so0POfXr0#lvvE5 zOp&n`HDhJ=k;vjM4RO|^nkZ~;qP$-Cx&wy@#m>j2I-AS;b=lqRq|{`7{3z75ngt#^ z(naBfHUH0oB9x{hh8?*x9?m2Ro9#uG4e`LQU4vCr=H~Vc)M=nbXRPfXuR`2|1Gem# zfUKjq&8)XK)8Sxo4E!fD3_Una0#2&6d!L;IJ%(a%izW8otn^Nkf_#6)lBWT1+|1y) zTx+TkfmArr7^!Zr*xXubaTLkR(MtjDxhRy(k6(%)H-w>>f<@|NDY$(JsyOV&dgBHR z#XttMlb#K6mO$xQy&kb2OG`okIb|FwA^K0=86UtA4V7#e2P~tgmrM7e5Upos;J-6Q zP}JUOCLLnNbRYn08)b;AH=hV1Hv|&0%aYRyYFi!4AxZA!`ca| zYn9B8wq(FQXX@c6?+m`1Y6dOt;&>Aa0ip}`KBWhe9*C%EWn&HGKbD7dnc|S2aP8Cf zL`2LxYoMr};^m&@3cQ%+;Js!gP%`Uj4%3jis?j>^-I(?qg2#p!vnYT;kFwv-ep&oe zxM%-q5n%0W#0r_nPvZ4oOb-TokZOt#O#?wJki6K{S`WuG;IM%=L$cr{FgArf>(tu` zXkdY+?jm&^WA&JgEZ+!0--(aS{zrB#S`KV$@<iVtOrpbjZo8FAROE7+5j;%GI5KGv|707_$Gl+a4`z zF~#khad6WmJavFCOl#k@1b!J_p67i2fL%(>lhxL!H9NfdBh8$ zXU(5+_XJ*ZaRuKuB^x6Vz8==8YLkF(_+0u=RZCLX~Ku)jJOtsCQpO+c1o;F8E z-1f(2aBQb`X!E?eHm2Xw?aR}m$S`&H;R^Iog|*`upmw8T!GOu9jhlSAn3wlbdME!JbUb zD~Huv;DhIBort2OxTW^ce#X(PWw>!sb9X*?4Axp}e*QY#-Ix*O1+GnH(>Vz$5&Zxh zc<2@B-FW4x%EUoW#4+?GwQcZsG8pSPdNEjU^Igi;al<9#QNU@J1&De?(qF%FKr9;yd7^OK4>207JNP# z?q(Kyl*tV+31Pky5{%nSJ`vYx#}juKlaq)*7m}p@bTP{p;bESF>4*HTf+1p)Gl9hM z^sHTlpv(qy9~YRTw4D3{_|D;Xk<5E?Fw8w<(1Dk}+5~)uDweS1(M1m)m`Y));C$|8 zj07GHwE=Uj*hs*6np0agMi*ioegrYgkR0kmhfe??!Gr>U#P97OPGH!M6v2mC6flY7 zNq_b!U4O0h(iNlx0f@KZRI3Thux)Y(>?RCAQOWF36G)-B3T*xd&;*9MiLeeHAl*R^ z0(;bHeiP6D!v@Sv=2(P@_O;n8hX(|OCUW!Li9*|k$a+^f4oiA#eTLBJBHr7c+e{Hn^#C1a`di`x z4n}CX0-n*Y9v=1(0Our>907m;9Z8#voQV?x2rb7#nb5K!q+1Vab`gbtR$HI0RVl$B#C>`F#bdk9{1^DKE#@}*}mBjNm1OOIy4MO zBEf`%uI!kLgf=D=fa4V=y(u|}3vj2ayjb%TInq^H=d5)@b*I2kyXhx-3~2MVPsp16 zwpcFH=WJSHwgJoM@tBabp6Ft2UZ2?tn&V_!v#~ZC)3oZz5!o98gL@Wnz;Smd=5WWA z193v&;+X6?G$y9l5ZExeXTy|X2T)Cww?Ltzl;Pf!%EJ_mC9^ea!|RlB=JOJn$|_d4D+yl?}YvWX@4lht;tBt233Lb9cv0| z!VdF|zm1I2<=acz(~2KFGqxKs6fN^vv7Proi=)T#nQdPq5k0T7Y~`kXSbD(kCXjT@ zCZ_`S+PQI4f;y-60mtt*(9>2mp)mQ_8k+GWAf zW|l6UC)bh%PC}b%nBZXR@w&z-Ly10RMOF>212%qhuk?ZQ@xco@ka^4G^j z2+akv?rw9|q&sO-MirX3r*r>I85Rd-8dP>J#_;siWG*|`Q-rSPI{y|z7{NbWy}LTH zk(Cky&rrUSjM(|be`{cKy&$R}A zdt3gv&$qSi^a2i&s2CmKGcVYOhlikIpA=yr7k-PZ#PF4vCkvk3-sFp9X0L8$V5Fs=-fkkzkaGUTKJX&JZn;h8b36ldENnXNx z!c;xhxT_&OVPYY}o*X{ko37SUq}z~vk)Uw7ib=R!^#HcO9^7!fki#VQ*qy=DXu3H6 zT-P9V7LAW_;8Ns4Yhm7|J;AmR$Nk%aP=Pd5IGlzY6vh!umKEF0-2cnOEJMg1M;EsN zbeDk^%f&MNH^flkEYPZo@d0Xh!Fs|j?Mt}~#k?ulaqUfp=n#xW7uV+x<9<#>VH7j@ zsnfTG{w;`XDp6vsKW3ru}pfPqdbYl%-qo_uNL~nG zs*xPcdn&s8WperJ_@-ZQX()xV%{H5dyTc@KlI-v#9Wfr>JkqPUpzcQrjNpdND-ZDw zSf~-NH;Lh8Bvh_0kaktK&*V!hR?lii*ACK?)mA^4i1DW+(5VMBbUPo_k+`Q=e zd+)qdp#3^pr_Wk(F4ozjUi|(k77>JF;t`XpPQ)Rm;2@dxg^VN$wzovr-ts~XSuTb6 zf#vdoeZR4K9#;8^5;5m1b#Bu9UrBbQhHELh9 zdcA_ayw?UOreCd>&yNex>rN@~EE=nRhNWB$dc&LUZIC5v;M?4`eUz_XW}Eq927%J{ z(Eu`Lj7~9T*m?5g`mQy)>b7pD?Vck8d%;CeZn6HkN9!qy zV>M7HY1MPXSR;J z?r-xnLP>1IxFKK=L9&ksu=8*|2Y&j0mu+|=AQ zS?iNJeP0Ac@BcS{Q59t!?x65=7Um8|Ibech9S@2Ju(f(vrrYo&)hUpjqPO_5SUt2> zi>JU-YJu2O3$<|`U)S?rz>jsZOuy}nQueo5W%+5Jf>vI3#z^u!+w2y$1?ByB=pKx` zYX$b3#cJM5AAo~YIjFNFLn%hc$*X_|DOGXE`zhpb=I2{x;e7~ zN*>eM9Qd(Jw$F=I3dHdq?8pt#@?<8D=3jm$#@)I;jNxRSv6Sx0iHZfFjbvyGuXi+z z9)^Lbj_xs%#qEO0z$V41Y_a%p`alw3*vvLbzRlQStQ-bJiNzy2Y|#$#y*ni0wYl8< zvUmas;`l5ocPVn!E(KFm<1AnpA6vkj>=Yh+RD9}|KDg=O#o9DvR^Z_omRJ`(Hnu3?CIOX;95j@Z}m2d=&AYitYdL~m&3!yS-h!YV6 z|FqbFoSGcwL$ej^V@S|W+i?_-jDWAwJV&9BO`tjj&Joq`PQpG+&0>%Qv$UAabUa96 z^u2S>M24h%%E7m9+jJM2_6)im1~3`{H7+#vRtd2`q}Gw@SNecPv(K$W;*91h zS>%ZiP8-2y))n8jUU&EsMbNQz2fo2#UdCk;H>x`+NM)RnL}Rm3&0bt~$cyF9gYo)> zj||JAEdB#r_D~E>@Yo$>sP=QKtlU<0cZUK|mTQGhLu1eElxT58YqoCHgHeOac!q7n zV?-6zagR|3+iyRdyg03#zu5M?i#!|BUhpgD!)$v+Uhia`a}uzG!Su0&(deyJ+MSfs z@~H@97F2s5V57urecbR%1wY(=7q9#Nv5~C5abJ zN4b?_@_E>{gTItBqGbN+dVfo5gsOv?N3-PqH4E_pkGXTIBw0Tn+!@Yh@R6M01(Uj{ zWcB^aH83E!{bT(d6pkk_P#F@qsU~ma)%M512XkcIUaw_)7J7kuhns-+4mXwvyMC;k zUJ3Y^fsPSicV?@HE#zng&=hwvm$7!*Gl(mKgmB57vXT;^ zfQ$Qx=JXNGO*^gIYj2!A0@7V)mi3y?Bu-GQ>sc&vqELPUOTiBNM7WO+D^Q2X-_NOK zoA>Ep^A&&=is)I;0?df22QMI~4f?;stKFvO&0y-T!i|yk-8uRP4494h?4%_XzjxVcZl^-1f zgFBs0qd2bWfe~kF7D~qzFtV0W(ZP1wGh9r`BBO(ufP^?hWnDM$|$@+@9m0m+(_K(DTdNL#k{kP?kFS?toM1K2)f0>iPcA7@(#4mlJs zNusD&0<*@<#I$K3vqU1fzG;mo)A7wa`cdKkYdlO&R-W zQuoo6bpa+vj7OI#7;fA#bhs*q*XM57m?apU8ybff_~8;-<3X#)3_@tqm1=4Xkr*Xk z2K|d}`(!Y>`8}>J@?=wQKq!T$@ncD7e9PuAk;+)#-*b{y8MzLciKhoC9@ zbyk7Z^C(KFxAkWIu!LlJF$s%lA&f)&c)&x zlrlvTluAhBi$RmCcBggMn@r86ut`%M;HZRFMd)VLEn!K?6vk4pFpmYe(tr(rf)VM< z7Gh7b)ybfok2jWVu}E(2#vi7~e98wSP{rzQ)~oCFGJS$@B?^`$4X7fbPz43rM3rnz z$TI1U2Dj7eL9g8pV~>Gp`DJT>gORhURO`~phHQLXY!_dbX=oS(IXW(OQ=LUs);K2T zj7hALZm)MY?hbCdt?{L!-IKSUvFXvX3CG#rk5aH4a*b57>Ib_ud;I;5PsyN075nDZsNK zwRRj0)VB3B#F(WzUantOyTC4C1nw~?dPA_K&Bx0A3rGk8WOyV%rKgw9wvQiHYmo7g z!YaMmp0!c8{0tOe7UeS&=%5D3!&VYB&A+o9#9#5K!Hbg72uNp}HX+;;7uZsAAA?GQ`Wt zG?~srlXWX}OsE4>Ycw!@v>M39M`o7c&ppv!3LG@k4iF238&R6MPTHN{9ihw%u{-`*rfMyCv}P- z{Z#+5__Q#ez3d;9-?^E@X+WV=Z7N6rjbFY1a745Y1S^`EM`%kuLpxevCq+lJ2D4-z&ryz1HQ2p0z&tHC$I5CmI@mUGWTH z`>0x@dA9U*uY2oXkd}pm3`lw0$K`stt_exch~qGXB#R@$@F{IT+jm|SCag9P%8`=; zj+Nk>@TCBA*RJy}(1n&+*5!fwZ&Pu`E64hOq zu>xeU5A4U?4I?q0a3fF3%7&P*y{dXP6(t4?exggrdh_t-?Aa#r{JC5|Jed1u|7QRG zvuA!vH!fGR2ES{YFyJ+UD3>+KBxflZbE@k}Wy_dV(rUJTCiV_DVPi)fQ;pbCHU=@u zld?v6_XAdjb6}~2)HOzX4c*Yg<8GCu!7O10F?ANp6@W$61^U=cbaNj_=Zj@SmG{{R z_rbxIH413pgEy@rKwoEXIeVIopBJ!5QhE-&i$Y!uECoV|h;ZXupH)f4EGA7ung^iQ zYxP^UAHpOQO+;`6@*xC|fK3bNXqtlmi&-^Z<0l_3a0<4T!K5@B)aq64L4{ zeBzM49a`!%1VW+rzrP1oNg?0W_3u3*T#@v z$&8SCDYt2-&Ha@+wtp#S8Oo+~T}*U8|r-2-^*DS}>!%?1=P!8lNRi0fHur>$6p6h3Vgf=S$*CBxQe1VIpn zB4{;-=o5^An_6bA_fA=d>VoObi>!qsA&9+%km<`61iD}GdN~4?Hg4vm5po2UTys~D zkbXge0?ow3#RG^&fl)op<9j(zhTZEhbphGS(9rsB4GJ#P!21^&o~vmD+3JWM#~K(^ zpOtTH8m-PnGQ4TsP6qu@qZLgVl+?h916IC+ok`=w2<{pVCGp-QrWpJx9jCO*=Pqa4)~PoY4aY?!(Fzk$jM7(Q|qDFhO3%s7;U zMBKB=;MZDnXf`g_q$Ev2b6ZAlwt2|Nxin`Bo|x}<7U}hN74uR!6YkB2{dB%~c>-P# zL6YHJr_&yFy5k#wHAXw3@&e}zj-L$I@lqI2*B!2xv&}_1+kgm6K$)Y~agD0E0Mb+A zCr}ukJLt7WHhnbIz{@ZS81_c9uU|n1b0%Q#AV!UOuF%P4t3A4C-QEtafn$tzJ{h#e z6X@qO`E=8rK(lUzO0EaJE9m4r$zl(npR;7#>VbETk_+3~4Ej0A0iBMAMs2ygY5V&9 zQ*hhaZhoc}TKU6odMyq4PWR!xlkjb-MEh*I7b7~(s)?{D;FXGHo9U=phj2!v?q=Ovs1^>{p0__XeUH!>{#3C zD?Zuqv-f|%W_9XFkx=hi1d|moK1Cw6)53B9)rk`EAj(s?P!AAei0s2DAOn%P@OM31 z8ZawXR!P(KQZI_4-iw#z5?Dn_!SEm3<@X%ce~ch5TB*Q}KYZ-?0~R`QI_Y3iTOCXw z$I~ihR4jrN2f`Q+TcZy_ngHsZh9TqI3F&&a4{y>34omcW22 z_V{@*hsjn%RW2!Ev6qwpA2vc8Q?R+D!|oMCEs;?4r1!hcY}wju);~e7w*~@<8Urb_ z!2a>DeK{GmdQhq_N4(2v6gG-F2_RXoo6V&znj|zi-JGN95wJ$R+lT7K>aMTaiTW z%anoA{5653`7;fzZg10wK#YuO#a$L9i5n{CM*fzE zvbxq?Bf*u%sHV~#nf1%`ksHvbHd#DBr*kl86~GHc8*^68GtQbbRNxSn4ViR@!}e8x z6$3@4i6!I}ESi@CQNrS)dHFd+8%pCu8!eK_$UNRPnQ8(%x}28DE=N^vxAmbNsFO`@ zCm?m~EMgx8mG1|N#HXr}_>dvN$bd(cHxIn7W^(8v({i%fb(S`=&yO4%SoMZs;F!wS zVcAi;t zRM+mzkFz)&v+pR$q2rOY|we@CNl0lB4liREAWot4BM*0YFvh-^(-=K#ZC8uhs zauKYhD%`iSu!LZ3WN%V)!azmX){23Jb`S++1f0Yr>p_jPJg&egfx7}}qjwOKq8I}G#${l@S!i-R(08UBe5Usx-`6?%!I@(LD3pRBF!jhdDGHb}V07B1 zTn96ILYHCJn-DRVZv6daxdfS7*r8zWRkR4!GRgDssI$~dEr)n0fGDl*c*dmSid>j+@fJ* z0-@IH?iihQO?wLgv>tp~FTa75lyg+zz>t2F44A`%<7zV4X)C@lA$>V?0Fom#Y299r zK2JXldY#zUmEfe&Fp^AK{r1(-njQj>7)AhjPoYw&1H8~cb6i|w#cbM2E(~eX1BNNe zi}pca^-U=egRGE~jzb%GW(AhEe_o{N*k)X(n?Uub=8eIQd!G``%MeIPzSnh&*@uiUovuP_cFA57PtFNnm!u=;?bsC)e{qUbyy<~ z+~-4MBrHafUibQDavL@tQrova?i_ZPYr~W`Z$e9qpXj0@5Q_@G!h#5tT(&0D%Yosv z{u*>tsLG&yMw$1_MdYoU&EEt`wpQOM^T^@GIRPKG=b0#lGlp1JRKEHFb3Z7UuKNLZ zKcJSOokmesur}^qthZYmT=2BDMP&ambTNWd=!VNENUqk)=f}nBa<Q<8Or^9 z+x8rc1J?ZS(`?oLm2USS0}?`*GEdPcOWm1HJ`da8M});m=$-Z7R>FNNo@;ByzrO2= z(t|D6OG0r1L+k6-aDn@sgH`WASBp7QoSWry4RG@7IrZW;Qv2!I!0~jGIgPVU1#k1J zX>|g_f(K(*IMeT)LcL`PJWd&|(VyZtW7cc+4AA?Z65nr_2V>l(*SZF*qM-=GlIl=( z4__>Woz>BSh%;w>#olJ8E~$F|#k-L&h8pVn4_Kmicc|WAhdxPLhRuaJaIg0teij&( z%z;bR!eud4bIh(vi<0fW%iMUm-a$%~Gq;AJZP>op_Rc92x@bBFFqsrjsIa3GTqnPsZ8;(VsFp;s_{%rHz zVjx=^*08&H?yZ{k7B}`3pSJ5(M7Wb=k#z@hwMhQ|%stz7;<&QUp6|%R$x|%L*Oe!d zkTkPNlMU(2OwR+$0jJ{$U^a%n?5{s6`Bt(mStd=Nv)5iT89=2{sZ@8B6cIYVpWZB< zCx%G*w-ec}@cM9z?do@#00B8_DeG%y2)w1gY$@<62JPNNV%rqQHf_}=_VYM->+hRr zaUu%?I)*p*uiwMO#Pe+Cdrb#m!1CVUzv>Fy7K%HNw_+6_bKoRsaEO~#*Q~EBvOJob*+g%K&YV7b9(LgSS&o%_DeW@ehF9BQDGE%VFs7(SGgV&dgXT~u zFK8QEP8MY?f6y*wgsw((}L-!u0X6uQ;2DR%y*c1sn9VUH9RS>s7LUjW=ITbbkC+@nQEmK!NGy zt#_`+lgAIknNE?ti-zZKU8=+n^?T-Si;`OYAo2tI&8gff#}~^qzIX}KJ&$e1n|*pQ+U%{#^FK@!Pqxvf<#{h2;I3RuUkx+i zpwf#BWDXf1>MoVdfPb3-kSw0EZSb58-|v?KUT}HSIP_#VLhEcUy!kBb(*_6u)df|DFQ2Ejhs0{MNcrhC zsO`s%n({A1d$3qCoEr7AbqYVMUR_fGs#dFRE9T0h-UB$0wi9NAr2} z*Hh0Im}tIW{?EzhBh`G=oWGrXK2-iit@--o^I2#UZsUVA<;qHd3f@pjE)uwe!+Z*^(-=fR?OEWQ|`%bfhhdU)?+He2C>Odmf#9K6IolI$xfAJ{QgBf z6@B4IK)uVGimIMR(K2a$nI447DjaFC%HON+DgNG@FY4nll_)2IVvX8P$C)KxBZ#GQ zd50)$XdpJQ)vt*`V+es8{Q&canyWe0+cC0zPZwFl{kEl?55f?NY8zn{=xo|F-+rwl zg(Ope_c%BXh$Ea9Q*qbbv$|r$`z(Z$KiI%TaEFy5u|-TLxWwJW_~S@}J^QjVMx=Or zj)CgjPW7Rb+tO|?&Iw`+}^~yXtA$hU_%d^CA3qE?pDImMrbNt2UmVS zTH=>T94Izf^BHO%JH|7c{5SOEv;%qdF9?p5dt6QKxkNNeCvPLv5hY zXdQm(8Z~17!<+2|eCS{og^#;%lWs#`oD2wOsW`b9ZMKK~Y|nnOmL5!kuJ&49(A?5? zXaXi)#dfX*QcRZsmgSr1dWGv2JgdWiFmr$g+guU%B%)goak35nbBKCjZlcMZ!k-X- zf}ZYlx&%m_HHdN8!e(@h(c4&f$}Cw#Dcq_I7e8ii@dnOCxx2UVD!MEW2{VBf;o>!d zPw|lO88An__zJf#hCq9v_rF6#&~jf zH=Nco(bL0b6Fyh?0T#4a&tsUrDKpm$u5H9{#6Im-)i3KJ_c~c`nGk|`ZV#{qJR1mB z#UmP|yNy68E`Dsnb-a+ta4(>UWhnO=;V0dj%;YGqc+Mf;g!`~5X>G<+%WxmHV4=sA z7C$h;9503fxl-zy#!{HG9IMG4mID&6FrBDl+H-~Q_B40nK2Fn0a3h06ZXJ!d5E;uR zM*CqCXs8wD5T!#X9>P1Vw(O1;1JJ@=As+KW=2;#^Zjqgp#-)dhGh*76aW>k#Bnl{E zO3}%>dXAF?&!H+fqc(SC+xbR{=9P}OX~kJqowKxp3rr{kWseqlVGuN{u4W>}ND+)+ zYjL#M4vdw%XcO(AyLrd?lRXs8zr-5{&qi>NQ8q#G&h#xdz4;zJB;Tyeo%|bD9rDL~ zOY!5C?jf-JXH-|gLL7VK!lhZnlH75-s=g907ky;w5?}fLD9vMQ0ZH3?1f7e+NxO z12Qa-cQrt}S|uYooUD%T zF?>#&;u{sqxTfg5IVM`JIS-GpLL@+BVAiq#OmrGNSL>aI+k+|M!K)RGurChc?$P*|GpiTKD7~hwuD##_As;D4uEl z#zw#SBVO)b8$BTh|B|;2fNprrGvAe`}`*O01(z%Iy{16>AXL6AnM6 zZY7q8S&AjC&FW{r5!c6ab>#7CPy`B7BU~;sGq4Y~m4qH`_7S(>5gh_#q0;$J1dL5z zUb3wZxVzGy!S@jSyjHr3DKWEs9e&R_Rrta(76Ka!UlL;>o&!N6%%Xi|dr}@s%NYJc zvSMN+t^FLdM##;{QeF5aHI3`Z{lj3&ALjWm8Q%=2A`;XG)LRi4$0^2u$y0o;g_RWX zH-6Ehlxhn@}yCEc99z&n(V&*dc)%-T7zWr0VuS_7Phv$|}W$NX%WDE2$ zF}^iSaKt=eR8VN!|iwfmf+jz~^uER)fUq-@o)!Rsc<-Jzw*nUNwKF%+g?AZ5R z7#fPG?}|s6G#`VrwA0rLdDIkqEdCF9*d@@#CDw}kVzg|AME{58KG_rdA>U4KhAGT<~iHVu76b2m>6iwB0!4_Su zqD96-6=JT?sjxZ1l`-_3?8lEJ%syL{o|SPr2R#nyKf)j2Aobh z(gqWc=1!rO#X)%ORoNMzxuuVz>v7epK+|mToC?Mj`|DpK0GXrXxyFipkg+=2X<4n2 zWBK6LZ;M%>^XRy%8m4W_&37A_O|;CGQj_?!FS4{*ch|6RWoYQV z59t!GSx?Yy-tlEB%x&AX2wFJlV>&UMoV?sG$ETOqrByR|M9$Oox&1y!e{2@VGflZl zYFcG&8WgKI^Jjf^-L|HB##ywWP%7JXx_3io1#F+(W-Xu;q{ew+5Ci089D^ei1=N;~ zPP}WEOYf92ko5x6MoRrpLI3CYUMGjmz8Q8G2e@cJ)^jE8r}cdwX?;1jRKJJkA=2cq zTU3%=ZVLD|H-R4G#T(E>&z51s9Ai41O+HPphx5|%8s0xV{w3F?em}LutqEi+-=Jq| z9iQiTA?vf-CMz)BJ}G@;@kwk#szObRS|yLj2mdXMMu&@5Mb(O6giS0oqfO_jybxPI zgMbnmzMXscxXcIVDVXee4b#%86JleykA~yX9MbJBT<2~Neh|vHxp$Q94!1Kq*Nzo9 zbqkvT=OzLkuq#qd>aCD`&#+=;rFM`YFgFWaLtfaMht|BynLdJ zLv@t2lU=e<_f2WxYKj)^6t;)BdAw@l)7RN6TgclKc%iu&{5O32xrA$;KCf~5o)l{% z;tdj#$$acA^gDehtY@1=Ijns2Xr!o>6QUzH9Z)@oCVzAIT>cg25a0N=3%6H?mls8D z31NX^P}DAW5gpOMtH)@vV>}w+6Ys-=IS=voXw|q4&>cJSMatkBs;XfmW{IpV@qN7c z)ZizNGjpEpKI&{s3sbRmPyP9_1uvT8^~Ar@WCn(GP!of_D_0$&SGnp1$T25I*c8#S zS3bmgYKUEyxZYMEO=Hb>MaaSW#`oXwYeH^O_SKPs?=6 zODR^O+ASQpM0(2mrnj=vE3RbKMbR_ zaGI7-gMn^7uxWnkaJ>H>j&Gc2L6-t0{anyvbB6z{QN2#N*~3+8UOU=u!r#=!Sxh9w z-;Y$i6d5IMRwt;V4}k1`cE?GryzqdsjRSC%;+8rwU0pdhDm=@&72{f&yq8ZQEh@;I z+Z5lkgu3C|cvDsHw85m%L#{%Aa*^=F6z*yj0sua=Onbvcw?>c!{rBVRF8NlABM|5g zP?iPyRfd1KrMOv3 zmAbFT9jo8-`VFAVP04ltIYjBcY9Dg^Mx&-5E-4MVzL1D(+Nkjc({2l{-P)Oal`P)U zi)qCE-a*rN_MesW!(8H3QZ2P#gf-}nuyWQYfA1J6I#0bX?Jx*-QRgjST!Gm|U!w09 zdFN|1&NUtekB`IY$NB8TfGDnO2NuHdCRV&vVOHnN>$W~pG3<6z1iF4yjYI2DPcsW#fQ-@`6i#&E|*RXSL;WTJ4-mr~% zVe1Cj^xFEFjxS8J{s{#W*NnItJZ$Wi#x;~s%tO6FHX7s>X;*gjSs`0c1jD7sE z%?_(peL;5LFGm-KXWd042sb#XDWld;Se;p|?&px-2@3M-QHvV4lksS9H|(Mpb^T7&!3o85QrE?u zt}6+MMlM{|0m^gOa=qr!F66Qkk6p7rcHwp#?S4khtIG`t2q1!#twNFShwS*qKFM$w zz@Cp6$@=0;l6+yRfc?2PzhUf>vr6F}xpXZv7CSd6Wy4sc)fiPz02b=RVvjXYh=V!$0PallgdfH@MFF zyh=Nz1V^*glbw-Q8WWX&Gs^xa+zYeeow`!H`!(aF(L}B7Qv?e&B(wa|Z$~6+KKTV0 zp!mM;zYhb7`~_bTszFN^S1e5Bbh_mb8O+#=cw_!9_vsUT*0OvX3! z(RA{0em5Bp@8_jX(@iD?#_Ypr$bei8W~wTEn2i=ukC`@tW=^{{@HH~qIVLk{-yu)8 zZ|Fk;VlhiT<(CB1uRar$#itS}qlnqmf&FaCbDAE<1Y(gcRvh;K8F%S1 zj$30KkuS9NL0ml69&MJy5nvgbNUsOp{P}pO?;)tLPOR76!isINoq6zYoP~AyX+qwX zYov_u{L{imlE>Dtn^s(O8qrO;mpvU2ePLxf}<{z@V15$St~ z{j(AL$KY!iufW|XU+ChS{{QOKCmSAo%04I&mVB(DQy;BZyc!_Ok>ih0`wOM{+E4}5 zgy2**@SQ9JJy4zEZ@5;XdL|vHfd>}mA93K#o_Q#>f3*9iKZNmS&z7!j0Xfvsvw*0L z%G7R?T`?1ftqFl=FRmE3XHfJmsQM^}pt`hw12XD7O~1d%bB=NjHSSJPh09 z>ATg}_eDk;<|n$Y*z0l@sa+I)cht>w-y8JQ!V}Nv3z5Tf=`CtJhBIpsst~T9N~fSkn`(JQ)7u;!FHp-Z)i~U&!2{E&J7Ll***oXS^`fjmGox1dPH>C(LBy zmEqYWAh!9CcQ!g`@C9=y-^~{_lrV6&Gc-;uBr*bOL!a9ym)Q#M7A_$(;0gO3(_+<5 zXkDETn6WZ@7!PLfwtpd_YLiXF%`#czF^(}Ee7u?5OPIy61EOG-t9Thtqh!Y=nVi`0 zP(5==+P|}Xf^=a}R_}uT@}*D3E4U1R5ClZ7%a{u6OtoF}55{bsL-?h7H>I|LHQkO) zY7dpi{4a4&*5tO0^fUK&%uAk3g5Xttl1Cbc`R0nGu^szC#gRB3l{MrnNjdTU`bC2W z8WaJ7vTMIeC8J0<8hxPw^bv{6J2g}GhE_T~WADWP`L0C)p9Cf4=Wo>FawqcJYa!ET zbJxY!N|8Hqne5`aHSBP*RlAM`qi@nJ>Q$!LXDj{pF*%gYAMLRg`%N>Xxz?5^MNHSZ zQgt6hu(eV&O=b=w#s_?|EGUD|!n4FbQnf9rPWahRPM_9e)2 zQ9F4g2kj=~xe#~2ks+9jeF*{m6UJaC;)b*}Q2N$&#am5wsbJJgCw9VYbX%ivyT&m3 zf9VfJ+b;t|)xDj=m26(TB$`MHLIWw+Q{v0w8AiOv#XtaR52ix?ek=+BhUkk z>U(vWm;}M!yQ{%GV}{xgFH2)Y%4|U}Tj+~2GHIioZ1Np%%2pvK8PrI$+j>1tUWlTbO_otSnnI4;K2;tR{-MJ zxg#yg8cud9FWzFzp@=6DERHm9=rPoy$eRH$gAR%&mgx*I+-{5x3V9M&TIyh8=xzv4#%Pa?kV3L!_>hE~ zN6i?KjXQ?8qxxjloBC&vbn$yq38%#`W-I-k9FA$({F$^{4-a+s)c#c(>4-ofB9Pl2 zflVfx&I=KmifB&T6UPl~G_G?NkNLKBdw09gS`pBUVvh1QTnxWVoy)T>KFqEk7OQgr zbu6B#aCUu8XJTDFTwkk=F=*rBCF<&$g+Hf>S81_N4*UN!mVS(%*}j%}_T~@vpT!}4 zVPn2EvS*m(&JMU`I-sEk2k*{Ps=Wq}O{`s7wje7NNo1cLG2G_!I}=`@x+D~i0l*A_ z#E6Kk)jYf>jKpq4w0AaA+X|wTnoC?$`EV;+F=P*`? zt@$S-ZUFFTLqY4uq zq8-Jyp%M??PvGHK&<>}Ni$XKnjpe9+f#T|Kc!~98Ug5MlN-%s32EYF}?XK=?GHifK z%DU%VB!s@g9{DoXL9&IUVo8C`uTdXa-%o#yE>c~jhYjSQ)zzszu|@6EcAniQU0RyZ zM;shlpPbO%{1w@TJv_hZ;e^IrqNWQ8jJr_lQ#8_pM#6L^?3_lSQVL_zhMUahY1glr z#*?RUEr_Ts>nqC%GZE_(38o>zZMv9tpi$Gon3}%R^q4?R+xj#CCeNuUY3uIOyuiAd z-EWq6YyK*?GKJo*$2MPXPzd4ID_929Xz4oGqI{>qZ8d-2;c;DcmPTwci?)u_1n_ z3d?al=|Ql0zg50YGabr}gg=jM=7wQ-LmTfZb%{i%gIF+hoMej(?2sX2_VNfQzT0jO z$8x}cfpC+3`Tn?fciM>~3@qOz<0^f*WT%26S+|NuWhv6YwT&oW)9faxxFs<5VrJw^ z!!2fhI2d=PfvkLk;oVowhqs>%(gnJ09A+&>er2TkpF}OyLwJu z^^c!S@P6LmDnbrda+Mhma*sg9+Z$Za;TQYsA>{$k^qurnRs_Zy*Y8cee_=AH@WTR$OW4b!PHrS0U`A zhJ(y(C_PeEP(>a9hUlyFI35c9bxAlSV25LDblD~&aV9Zg0s;vD5caz)&#{R? zMM9L|-X*oW;5o|FvBjvopedv)&mQGd-LTw8uFTU2`!vuO_assH*4(3j@o9j@KDWFE zJBfQH%HQ!qrhWkhnpp@9jrgHwd$6ToCLOw9WJi&rUoOLe(qjeJ?`a|S1XI!wbnWL7 z175*o^|+Gb<__PIM*12mKul0Q_wrqKs=ZQgFUVdAnyj3()d z7|J7ozG~`*KjQRT4F39E?*m*459KfbA0^ogL>j>j&Q-*A@Cy`ihVOa?k-7aH0G&BO^MI&j_SOoa2jKtgzAy&fx$ z97DSRd+~Wl=}?n0Vg}ouOR(kSIc=&^V;;DBO|yXnAdG4RVbJd|C{tO3w$UghMkF)^ z)obBCyY=9ZA;-#nQke1teT}URYEOcFs`l`0Y?OvmBBY0ums--sxLL6U7^4hxR5)$Z zMJZ%ludAXLn@kMq7j3RYXdr`ZNLrN>oftg-U#Om7t>Zmc$ukn_kvNfPY!}sR?W$ad zh(o+~i!b&`R(0_Z)6O9mi;NxmWg8Q3LG{5xb)V@AUn$RxJZrU{trwfiyW90FhIB6R zdU3P4TF!13nxnjn0{TNoMDJeDKFl^(*LNR{uL0Vd$<`-+wEUVIM1$qm#sQ520q9k{ zTx@Kkj*z<)^;9R-k)9_b-+K2DU#~au?dIlgzPMhE`0fXebrY{v@$LJ%{pMz|`rVWS zsKW0@M$YBt?!#hvJySpFbHldl9$EF2i`#WvyIJ=o9Z`%}^Tlety!&gjT-?stTP@W0pAWO^)n;{n9YdBPE#9eB<*yGX(+z6^ ziT4X83$yjzQilvXq+y4Q)q3{6L4!iKU9_LjtWjib^Q=l(>*9BwDb|qW zf!$+fM~9WrJ&|+ZkYzkytW59Uh;;vEC~{7pF+1gO<~1oDxF#JoH!zx6x0cbg_xmKxy@1sqr>9 z6!=(exPD{mtx4y)nkd$;)ygyD%A1>+R;oj*C(tqC32>I;HLV)1&`Lr8`r(~Cn0X{t zsK|9KD@mK!onGkhrNe7vOB%9Cxx)+hYi_!`1T|qa_0s!-U+?g<@H~CmXM3<&M2+pO zWnjWjo|AtDOf_jGf5E*ma*v&U?0|QYZ>b3|(c8&jM!g5f&O-C};b3g-iY4|r4y}ee zesJylLAVtf`ZFjUIW!O|kH)`>JfTb;%|1*5uYQFpN1FN879mKL9oRQx?U?g(_eRd~ zC1~z?+mmawcPnGIS8{0lyPkxHH+4KK zIdRc4aiDMltpf#X;96g6w=VT7FBJ7nwrK~~xN8V7T$R4GUT3gUBM%YQvwO+@SI^Od znmBs6-A)wIvuM<2WY)ZJ1nOFa()^eSLo3s)~DJmg1x<$K;wEJq6R!tsM4ZH*x z1UBltFhmUTM>L#k59&@t`-rQ+xgp)diC%9WtuNbTcVU^OT@&5r37PWGC6lb)w3mfy zHG%IeY44%NNV|A;&6QeKa0y}sB~r|M#Xs`M{B$StYb@q+ttzjQ!^hDGe(F+e;Heke zwfA^Qn0iw6G6ZeIGgl;&RtcEG$D;=WCKiD$WCC#=6XN>Tfqen0voyj=bS_rfulWC& z(k!THtb&Z4EzIn4eET=%rKxkPRy&nUcVU!?a}La9f)g&Z|7n;ktOH0pq|ro zpQmh%YPoPw-FZr>Rn|*UH}5Pz$Dybv6p*jd?8wi3t)Kg6lt$6Fz8><&mhEN#QBLnNTMA7N=c+3GnioG*(JY=F z>X_qQn$EJX#Sad5$q8#5%*qo0z{y~#aHh7 zeP8pNdVg?i6mLSHya?pmW73UA{)`*=R{5MC54+XhFtlp^p!Vs`?xB%nQQ00dIiHiV z?%(i-lCn&c{I{s9Z9S%GoRw9QDYJ4@xE|4??dkvM-%}xPrOpW;pgu;DZ@uzLjT#|G>^4c> zFOce!#_)1=%UB$KR7KLwJcdIi zcBDn2Y@)D38D!p4;FSb=<#~LBq6c6(WvXq`C}b-N9E#Ld?M{UZipYr|OHol)fHad8 zLl?YcJd_K;P2XXpIIDqIQ^C`%|NSv3cKak7Q4n5$&OKmvH{H~;`dZp&6*H@PrnhQt z65+W$E9ITlGi&L++`~g9uc43>l_3N^s`U+}&R?4DnjRj8IcTYyVY5=6=f@VB@xGa_Ew6=J1( zXF$Gby|&oHBEWF_+Bfmpx6GCiq>|eE?SXk~89+5E2^SrY4ZJ;?t$Qdf&)I_swyC3m ze~8rOU(816CHf?HO(G3aq)$91pe{2u)M?(0&l&MD&%jw=uwoYi1%Liu0i-}b z-m)Xd46tTJMmlin77|7n23V(>No^x0JvEJ7Ynx=tlv&E#bny>s(ivAeza5`jTdU(E zI};pg>}Yt;cRKS&{~*rvWZAVs)&#MNK7`ucjZIj#uqiR7J+Q<*tG|b~2;PL}=nXPO6x{3UuljqlJATnO=$WycpH61rcKhf0d(Bn5=)hltF5Bz& zKBB?^Qd2c=2R*Ah)LGqiR{SM?1(9!}eQ@Y)%zF0oFv9B8`JYaw)|?hX4@BZ!y4oMw z{m;nA54-^*zdyF$h+C?wNy0A%RrIAee^|)GmzmjBI@@m3vdjxUsL}osh=ZYqNf9rN z^XtVBcb$rYiU@ck6H+`$XZka7iH#u*<_4YWTU zQhdd)kaElz(dom$_^O=YRe@Cr+Ele1qS%-CZXMs$;h?KDDYnn+B2|_KLrb^jg zkx||fHRwcVzpX;2>aMgpBp4`?FL#q@E$pzZHOyOwo1Gy;hxHv}`I>Bn8|@jfd2A$H zha`wLsVM~Dr&&FBlN$+D7~si*jYhP@8H|vLjB@cu4ym#K$1+Amy*W@$&L$a`6B-fR z$K7ntp4`C$k^iRcBgEe$Djg0>@)x&KK_<-f!-g@$GsuTP|mE zl{SyrSue>y^>Ei|_O*J}>@fR`Z7*zJk+wDumc+@n&ezjBGr~M4McIQpl;FO+ySbk& z<5e4_J86Q*`a3Unt12m~X~D#vBLx#rn$)-Qr>8QlwAXH)?Q(x_ji_8WX2Npe^m(SO zH8Jp&sK?v>onl4}b&cbpA56>(h{CKta&c}p#xH_F9S8qTHjn+^UHrSFE`05{ee&WAh55<)L;UV@FSia{B`OuSCNDh5i<9EbH5QBYbCD)H{k}bn5K_CN?5>LZ z1x8x3Ls_1c={aLLO|7JAc(mU>)KyK3<7*{8wLcZd4E|NjI~9@;Adw-^QVs$Kce^4j z%aMk}w_fsUs#b`G^LK3XtZ{XH!;V8Q`|X<<|HGwR8o;w2ZsR{67Mu0&%f)QIiRV4_ z7I1f_{Pk6O&H^q1p=B!LWtDHgq3jeBa;68Sw;ZF@0 zj%_!+C!j}+L)vj{+nz=nm;5AcnBJSM?{4BtX3#y{t`|!UKD(2L>rX`OMfZ(R`A8KK z54P8jP#m|a>kOQ{GKPffKGsHRpf>93EY01#rB*ayHE{--giDdM_Y(@jRga>z9GghN zyC*y;W^*^N{uc0?;MqGH&sY0whx95|QBT(Jq6M7PdMxr}w`H1sR{tpX;^DgRYhNl| zua!z@Z@@>WE3*JqK&rpH^KEiKY@%|fcC}6@;NYLh)iH+d$1a&(J-(zkPrDO|q=1l) z%HBNo-?F2CDV`!dq)D014u{j9T?Y+7HySq|N=O?gO&uF9JO;%VF0KwKe`&ZnLX_cK z3=AZ^{`WC0>!%dqEPAcN+(q{h%HS#BqS73mxKfS$O`;!PwT#6->GsGk&Ctj`8aX_9 z41pGezdM;D(G-XBEXZr#70F>WOH_d(tu8{GKsJvPIgtb)tyg)$*o+f*Radd(k~M8C!PgMwm69@ zj+Bw)JpTTo!3P?Y0D{g;-Lr}#;?d}CG#ZV5L{H`3@uaGwl;bWU+AGL@?GMFQ&vr#j z7rt}P5I2YKUsP0F#=ViAa6tNWGq;iU&u*wDZ!H*$>kakh0k?oGNV8JPtWL<7v=%`= zIx$2iMxrvGk*7m~3CplKUDABnicDp+24UrXaXx}yD5A5sVVx#HNkSIj8l zBi?IrrJbmv<=!hORuN*&mu5V7F9lW;UdJ;$Kob2Zp%^Vei~FTCdV>StWzEOMYP|XO zaww<4-QnG}`QSkcn!PuE&c+pNNTR|nMi9O6AggrDs{ZkTNcuxYf|e}$4_yB56lXX^ zMYreaaHFnsrAfiP*DP_*6SMg}U5rPcU|Krr65GYfIQF^RYg(d7C*lGH99}-WhadaH zefZc*Fgm0J4NH$Y8aXU@N$9Z5c+*JA@@4o*?P}D98&6PcsBTZt5ym5=ps+kTJ+wn5 zAw(vPTjT&7o%Y7%(^){lf;vT)7%KC}U}jUqXWDptbO5oE2Wwq)?;~K_sc-b~;3V`z zD5X)nyD5c(Ayk@Q9g^jx5#A?Un-9B4q}YN4Gde}6=g0nCf~8Rdq)jx?sP;7=qtN*< zsgr#9s*+C{Ef|#|MBrHOzg1wg=G0>K`}>fzmYE^>;oa!R`$@#@{WRHXID2hM0a-fQ z9@wX$CxTh%WN~fiw`6M2R_5punWWtd$IP9eL!gVtk4^yw+v)4}dtn0|fGx#8T&b8i z7~sK-Ok*Or(OE4Xf|U1WbGR+!G={3#I=9o~%ct_A7d$Ix2qlTs%sSnG#<{3Lajz|i zlWnpwv@KH~+5E$#XqXe;qM*nDDks}b{V?d7$9bv};x2WR#w~bI*^ktp6-7JPTcDDt z*!&IIxvjusO9Vm!+?RdfH-XjH5|-aet}G9+%HH6) zz;HATkG4A9hu?jGlPYRwvAr`P!YIZ0z)k zS>HKaqiQ+Ux3n^#x4zcJv9#6`gQ8*F-cPGA2EtTdbqC*<>t~}?9iunK<|FG1t*+HL z&xK3yT3aSf``G|2i%=G55jr-UrrH~*j2$n&7td`I0ugBz8xukh{$EAe_n2xlT7LWX z+-Wqz7>EtWhao%@fu{Gii787@nwY}COpM9bEr8u(%8gp<*-=F6{rlzf8j0ZFwNqxi z+fLaR@;2l^dV&NH4^U&B>IOoGexb2WKM%DK9%9C^XbHM z5+YF%dMKVj!MS4hx*Fod%Y2sH0Xr;^u-F-`DO~QoY4Zmf8QCaV!`60l*BosiQ#jHB z&ln57e-m@)&5>pK(qDSAyExH*8Pw+7d%DC1c9KoFGD&A*?9j zIDZOLQn|#z)T!{q{HTd(Fy82Y?9d{KBBmvi{%OL=L)^o7?|Wm{RR+a5O0B?^)jf_> z=_-Z`wN66sH*J0wZ3DY=Ne&@*fa~gdsq|3zRUI;$FZ=nS@Eov^Wy5h+OJ<#0iZeei z_j=&M7e2*Pbng*S4U*f+kePIfP%!eaUG5KIx1^M)6J)$7(?gEUtWvuqeORs!^%)y5 zl&4fpXgpC^iGbW9UP}4 z6?R3@Eom%yl7c+BQwRL#LU-RQsrP-oec3<%3dBc(w!hUY`|CmXW1)fNz_O3G8VOn(oJ_pE4n*T z#XC?nwog0TfF)xVZ80v78_;OGnR_h(8M6!~GESn;TJ@{XJKgp2(rQE0u(wL0=tl0b z6?ZxAF^TgFRBjkqlf`PX>-9m`826}snY3*nGOHG%#MbP8^c945f{o%O_B{=`ABwB;Mt=s(m8YLm#HA<45^ih%|wY&_EOyVK03X;^1mhXyR zkLvV;V|Tl8FrheNLJJ;_t?DP~A<+{ulck{^QVD=b<#;@LVy^{pqKwl}PE;(C+0=-& z#rIJ3*}?ME4*nN6Xl89tx47m=GNz5VE*BRNDUmWBHQ(KPEDPLYFz>$W0f)&lkiJaP z*MqS&B@rEElj-lPCqF6Aj*^o0p7T^fRQCb;#zQOvy{O|8B3}@F%1Kwb091J;Rr>Gr zZaB%u6Q~g|oqY`K$3!$5PcCy%KSR67=$$a|Mqgdf7));kLvO>(?87>FBHB4 z0xnA=BLctbP+fk+c-vC1uWc>(!^Ci#~u#hf|e|&9T)6@_90`k-05V5*Tr)k#rEg1?6P4-^%l9Qw|Lyi z^Wv{dtC&$({&X~oPLuffTy%{?(KyDXtz!uZ>XhVPazk2+jnPW7dL?d9+z1ZCeI^a= zX{ZqAnET?2^B+)y6gMD##s+vyPkhQ!TJ4!`I+_6(K47GOXPl9My>UifqYMe_mPmE# zV#5vs;5wB;%enW_lUGbh%_OnpvDd-44}e%5kQGtgj8~x<-eH?FJ|Mp29rPMaTTY~&y z<47kwHqW>%`6kgUv3GlBF7!Y!VzH_5=B)Ws{P8BJm6;v#;Md_} z3j6u<@~dXt5z+)Ki7G2)0?7Sd*>HaiMXIj5Pt7p*>O}q*L>jDeBV%M%v;)peCoZWPD&#Q8nO0g_1+(e??ZEu!Znyo^LSXYIYWq%=*_n_=oF(WmPGr99LR&`5 zG?&$s3!VJmefBe_XJu;CO~{<|*KYfDQYOgj8t=X7mqezv+}7%T5lA*nEUK87~_%%B=YNWxXp&sT(_yUUSQ3JzcQXI1>m8 zUH+|_eY>d#bq#2EoI-V;@7pg$)3;~oXz%DOi9YR?n}a>Lo1Ta(M4J)OsBu-E@8|>7 zE)>n;|BC)RLFh)SOi8q}c+KffNzyoas!8h1XCc)^|6hxCI#%2dnE7c? ze2X=tWl;;HqZRz?uo(ROZc zK6y2ylwxVj1PW9M7fhjyl|?OTp3M2)Jk^(K*&lAmPoK_&n*{QZJi;>mQ6MN> z*JlQfe#l``-}VE@ZZTZ-xS(lmAE-ERlmMA)K6bWA1!i8vjuO+&#Zk=1N4281*sa0N zxDU|uQXM*5=SX&-QaWiQ(MTo)=9L7;gK6d3O`TX8lb)oC<*$dcX+9n0i|b+jetdH? zxEhA_rb>{{Z-#e^d_2j|hnF5fkPy>L-NzS$+hIPKjBf`wo=&D<3xVjw`TgzfbTYim zhm*y4@zDb#GFsA@Mih06C%sv1_hLW=j-`!m`{fD1vp19X48*eq%(m4WYPUxVPG*` z3~xOkGKTuds6=&seLvHV2OozsACWo2Tox_H7w?>{xw_pqOJndjQ4XJ94JX6dU@@HM z7t_gNFjoJ|Z>H0Q`?!)49W5f!}Z-hVlf13;*P?;ArwVx*5J7F9scbQjDUqbX$IT zKO3BnZ(!mIWu6tsh?fY7CPO7HX8B?^ct7-QVH3Kga7JLc7sJca*W3dw%1%UN5)DVA z;l*O!4P~6AsACqrQ_>8kQwyA_O?*E6;6oAa%cI7dDPUTTH(C;n#`9|k`kYNK^XuvK zowqMR8;-=$#r;e{{4l*eA2-t2v*+Rj9kqg}{R+@7)DUCeJ|_|{HU_@GtmLuVdx_J` za4&=R%fwQ--NEf(-B?!xDDM^QuOW3&|eTOB-(iGg?N`Aaos9FR9D?}}XD_~2|eOMw` zu!?8~hhBbhqX<-@DgQ8DTzBAFaO8!+xT5u7b~Rk&*JBUhgrE~ZHX>c09^HpFVo4!2 zODtyh7Yn6X3@*IF4JDa_+!I5PqFoH3t86x)rqTR*x(JXG5R+&qnnv{w1xa{03|6{G z^nQACuZ}k*UWWf2-wd5fD-Tdw8ynrpA%t;`&N6111;?BHVF@bptE|!)M@pxx?P1%^ zsAZlGym)6xUg>@;5Ipjhr|TX-=r<_i`bljCxU6u5?F)2#_X)%P4AIXni65e=BNKH3=YK=X#HOT2j zO)lg{jz-CSO1i=jNwh{^Tl>mG=KCUT6*+=<`TLoGPywgJ%b6| z$N3CKDKQdy;td1Aa-AmOa$T@6GBx7_atc(VE;+@CP)^}p(Z}ItF#HnWT8URbyIk)f z@sug3+MG1t+OYq;eR*EZKW~4O@#Q`qH1<94$%MD!ou-UEXe_Eh2b<0IMS-!{UVL62 zdYmlaRcRL8h8a%B>-B0?dCY~Ok;G=i@l$<5xFhb&box=;bQzf;b#AGTox;k6O^%2x zk3`Z4Ma6-GE7V2a?$?J9g{gDCsyx%tinOQ5f6Je{BP_vtR%avJt3CJaP(v2fQ)6|Z z6DPj*HP51wrO7tb3Q@x#Mg*y00sFfwI&5k?c|;Sk&_T(xT_wmK%&#I^wzi4&IgLJ7 ztZw}*VT=7}@>z_UFN{Y&TfeZ#lh!ChW=qOQw0;UqeyLi=kxADX&|H(qa7xI#4P{C6 zXz=V3e_pL>w6lV68)puYPI=BfOo<)nnT-$m63}~HnhG<&hH)*0Sd50E_99uyqUY!OzvCR)q zA^y`ZUw-$Kj!I?lE*|Q{PrXO2c!;D~6Y)k9MF#Dl`TDUEG?u8nZXKvYB+8=cEU0M; zd0z*UOD92Cpx*%GfSJ@Qgc1e^r&gE_yLS<>>QfBy0afOsa7 z?Drs_5_+p{y5V)uNNMWZmxCWME)X$@1l*IhJEN7MSxDtbYAKW! zwv*`adA+NE$J#^+bXc{1OLfVQPetozu9TGZUo8bCmC>)(@gPf;#l5JeFH>NZifd4F zb>D0l4bPY=J!i8je)`-z)D10q0^;t9P2hCuim`rt_GTHv3Q?LIU57j8;35L=(~bK8 z@LmO*yYbszx7(Q29#oui6l#)zff0PDA@}s|LUH^0(9>5pNDItjbE|iEX+v2ZpDYn1 z`qqNb5&V$FA`E@!N>~?rxcVG++h4`XGT3?UGC`2{wQd2}XU(5RA5)i$EW`IA3rdf7 z&q>$RUz@}7=kVuKq4jrblIFlpDQ%)M`d{fNWx^Ua!N6AuVZ!cc&^tv?`NMql#P0ji zI0)+~XgLuXMU%%3N_x6yc7TOK&Jsw{eJBD;9Z(N49f%)f^r$zOgC#hR1Ni_(LDPTj@I-%e4KjW&;mZW8L`zo?s1+LrDkwM40D4cC^B zzSa`AhWuxsF*ZQC`J~xq0)3^$I%h!UX-e?=9wAv8Bm z=2AmL?Cm@`iks}GND)S5?=K1l>uRp_s~YaGOAB#pSpUb|({#6OE4$|Z=;C=50w4h5 zWECfI>wDcaCrR6L(?t$#F|J-D(N~g_y1)JcBt;Bp0UUs8-EQjG1TYxP7iI=C4w_Qw z4Pja(5FUuM2?`Zt#BuAJaJA_jixX6)e^ha_q%ZHEo9)}~793pSdCFg6V4=zsGt|(u zsZ(+HQcWPdb1)=~l*S9N-_+ZLv0}=D5Fr7-)r+^y-lj63Sz4B}dAcm%d%V(QP3@oZ z7ETnP5lFBmv&kd<{5wM};c5VT-(|Ke%c-vUM7DK4`nQ23XP+vR98{*RSwIdt8%n0T z?;KGWdp?R}*I>?xlK}$KxW9t;yLP~U32k!UHKFH*N+B=XFI#u(tEK+^4wEj%^}XnM zwqfM5ZC7vcQ4h5I$?x7bGYQ$kG#ez%)kury( zT)s-$sO6S2&#gTX7!iBYD%&@|Hrs$AZRfSPlWm?T_Ukg+Hy%uzH-32ZZt7LNxH8>| zOid0*lH(Y}m2WYNfnvmuL)9B5Bun%+YLnORVs^a#1gus(8TXGd0w|5l;r=p@;r`=s z>0iKXEb8WfeB>t@uK2Hyv(1YmT;w% z0w!vgje%uJl1H$l7i7qmgvPNY&x;^i!fnqX4VNcpgggSL-CkO4)87EX06P(x6wJ_w zE3;L*mJfF%$0O{1U0?3&b&sqhHRpEJC{2p*{%P5g`lQ17X{sAG6tX0x`l5-QbF z7lr>Xj@#O#F2|`k5>#`}&gPQSJP$VHKqf5*MiY_f*gejZsu5LYf3~|y7^SDo za{qv`SaPMn1Vy&5zSLc^nayK6Z<+JuIAUJwLV$Z>EG*f%Wq%3|7+Mh;n!*Bqb zh?|dywwy_{EbmVpNnI+Hx+Ic0#BeA+I;1p)_};hZK}foTF>>S$%Mp0(fvK!%qaM|& z|6{@uM^=F9nCIpd_S+Stz&eM6YL|!}&9g;|jSo`_&|y}$eCP>~MWZ;B z6BoA=B=?w~r|G}oQT$oR#~VN_63JvNRR|R25g`>qaE|5DLSY%7j^xly=5rQ|{$R?s zJ{ul*yx4B5hqu*smsrb`QzyzXMAwR(+XoII-S7PkNZOZDNiZ=92GZIc9hvXA7M9|< zCzzvUHgWbQ00?=6^UsXsc5E?pkvTT9;KFwFDp+az&*+h|@2oWaZb6SM;7D<3-!aD6 z_q%2TM+rEpjBWF!Ctz@b)<^19HOLoOua=$fV`R@_OmVN^=> zZY_~j*SltQzfZWDX*K^x!YH04TsO5g{?pF{62}CuKY!MWZP#U=ETSE_f;@8I{{7Br zDy_K!@Bf1OoYR;F1A08m_NYN9xLhZ+eV)c?m%xGY4f8VO8+I0)asHSHD9LI3fhZ$; zx+N!23dM$)@;#CqTs8&G>TXkBJTaup?e)f_KJ4qoDFU9CkhEl;?PGaO{u6kO*;pBa zR}D$y1ErU!HC(=7fNx4X-v}1s8)w0E(s0=(8iSai=OyHe#K(<_i#{J!;4YE)Ll<`Y3qusY*AU9LP%wAs?q!nTo6M(91mb z(WD+j5N{@l#vwRzmDTpN0(8QF$t4Nea^HASrGihWe;Cpgt!XwSp% zyD9YN$v!R?aF%dz&oYm_x^U65_DLEh@jB4>5MTfIet8$G2d{i9TUs`iHXdsef3EpQ zI8wxF7Bh$=R135wh-h0v*MZ(d-Ina12RbE)~9MR2M4o`)sO_;Uo$jfYUY95A2DK@Rw|a*@X{;>D`E-3?5L z7V}zN()jy>8drl(y7Uy#s!@)ac=|LCC9=EwegBt}C#tBnh+_ZysgRl`mEESUz93?t zQcH_Fz5X8at(IQjmg_a*)6x|2y$)tr0^?EN7GGTb`r<$DKYe)j^XtjE^Q_slkwrgY z+rT+Vr}5Otzq7m*UrM$4Cg&|)T3*0Vt(ug_z6JGQnV59vov=Khe(H=0d;X!%IG&

g0xZ0 z-SS?9M%@@rkQWbpV5K4~H80*Y9G{uL>Dp3?6g_7Dx~JaeDYU7O+%)^X?fZ$dMMqo8 zCqwicaGsh>kO!r|3Ul$_SKC|MeF1uGlnT25VBIIdh*q@K{zD94rl|7$W(3zGqtN=F zO;Lin^1ll!IA`#4*%!bK`Nkn$MYd{gsvw36eZL!)V1${Bp55;nOm`Cq2aC$H`f#sD zRgKf=&P~xcq(Nzttc)p#4B)C_2;lnXrw|yDE&5!ZfY7o6S0%|W*Z%aP=FCX6yw=lP8lGrREV3Iid^Lf;SuyCsCbyk1YxxLB>M2=)T~A!#F85!^q@C>+P=9z zG~;}v1tPIa3z_%I!jFWajGb00Njjx<@_A{mrB9AucEE3devRUc#;{O>ehuIvfzTAt zTz+#v=6Qd@7=0*m5u*=9&aFT}nj30B2hRRc`GJ%$W}nDql-Z}qKu|b+PJy7qnIo)I zqDWIoSZRl}kO)*nNGr5NSfL7HwXiDbCPQ4m)6AF`o5h?Le1R)}Z1JLFUH5Qv#P)Q2 zR7YHz+C;<3gT=hN+ytO#GxyITH>qGl>%R!`(Rg?2VgBp=Pj9+a=W3Ei>#*M3)HG*0 zM0cd<2Et-C8a&&0=(;j=X8Zjd9Y80bt>PGM1(Y7VgPZYPB!0N?J56$oN72mpY#=5p zYMB<~E9fftoZ+xCOi-5Qrv1q@)bi$HwR`}EsKc6vjRvF_NfTPcJ136{n;CJ8i<&tF zW)z+Kh?YZ7EG;4bCEmr{8AVIWwzxjdBSxhq)I`hQ1w(aUv`X*9Ia-BHzEtv4g*8>I z=LjsQe_ZP&ud7}C>|c$ZU<*c+*}s0e^k+|)`3Gx}(`4%V&iR*jJ1z1D;7EU;!hl9* zfL7hcb-&P%t?I@3{mqwp|HQSFxb^*W==*20YGx|-IJ^^E zqRfTN31vxQLs?X&hO$P5-xP~10Vqf?vC)A)nJ!Ra9?9a*SK4x7!P9|?XS(hVNYocZ zgc9}5HR#x*-HYxr9M}7n!l<VCO!Rm1GYZ;~f8 zeuI9LWI?aD?aVn!mPc5+#@lPW!Wt_ds#|3HHc3d=EejEw)iypHn0IT17J}dB?fu=$ z|5 zJUx48@@PS}V8KM}HH-2fTR4Fv&memU!wZ_wAIf#uD(~?Uj z3h!hwr^d{6`{ql$o25|2!Oh}RBa-2D2f}fZ77iWaF{I3M{;4|o{1nVze7a8cxEORn zEu)|ai-?2B__8-9K{Cc;^c!Xak{&5D6syAuF;aoJnl~!DZkjKzVci>4-&0WxeNS<^ zy~va5_=tjJH{mowCu^_Z!K^(uzFZ7V?Wd8YzaG^G^5RJ*Hc{flq=H=gTCNnv z1&`v`ccx(Z%au0H+L}VYF89BK8hi>HK_&jOF~hOFMdaxovj4>*iZ@wpTgW|D5FF zV4siVJoxwf+RN(Fx}@be++*wRtBLF$TrXw?%UAyGVrjfrpvqOc(~$>*CC-Yoh~tEP zX?UcIw;Mx3bR`V1uSY38=Z#}12MCR($?J2euwGesd5bziO zqj{Ofoa_^4Xq8qQl+gAr)rn%Dg$xv@Kmp|nA=|XNEJV0EXI|#dQSwvG4yjNT+9s5F zDvu1m3X&}s0b&EFN}xNG9B~%QmrK;*j&Ln)>EjY~R!UggN<3v6@W)9!NkTT1 z1AijDprjt<(FaIaTd`?)ubhfKAY6vBLa}C!?EK1R*T|>Vl24URDLD3xQ`_ln@O8!| zca~)As-K%;ahBWnC9$3CG}S(bvl2Ti2|KXb zp|}HSdyT!TZ#6S-AO2lGOfZqtm`e`_SGbvwP}-JbUpDJ0M!vYXfH2U5Nrg*vCSoEn zx&?U5pE%N{}qc0?$jsN3HPFgvvtQoV$_$qNyKJdZoy&QR5+tv8fd1IOmo;1&ngTSt|>^}?wpDSAveEwt5y(DrYIWq9cY>zMSDt-cu2$7;{X@NN;*2oHdIKn_(4mj0SYhn3D_H9=dJ3BDR`uQf za&uk>Sr?vDITbA9w8XM)>%RKFHjT73hD>pr%GB&IMRDhFi6JZ}H&iiu0=Q_jeJRch zsRm>I?@t;o=`g-z4uo;trg4;b<@)Vpr}-nQb_xE>qD?N?VSL4n7`nujiK_fGbi$(YQX}5ycf;bAo`O-o-ZF&T> zw}23L1&<6=Q638>GS_1f#!G2xfa`;r{8pFIKDOTfMm4+}-bA z{$BMIZ$_F`vRSXI&0^;gh==yM3QvQEUWfcb+y}{MBha(FCXD8Oleom<`#}u+3vsh)g#wI_u0Uh z(s0`Q_QOT^OJM{J{1UaFVR)JS{O0_ppWnQC{R+X@S_G#scKd&bvM9Fd#n9v5grs)I zJ^lYsJ5vceyI3_95L$8jY6n05#Th~oDyWvkVV8doKa5r{$Nb>L1qx|d-MKFp-AlfK zaNB{AYxCR{1&=XlfAgxjzh2c4@M2&@9NMBWqsEvC0@(cqY>rxe#LGEvxV-2iKt_Mg zjv#B05`|wJJ^Gf#3MA+%lsS(SNHSR9*0%#hR&5@VIb$?gksQJnC9)DP zL4v}wYO&}@0M}OCIf`>0iK6E1R)2B5OSTd;&9vXbX^s_4jKmb89NB7BQE{Unw zm#E5=n@G+bQRd}RrEg+O{qJqUXyzsbd1Fn=M6j#%^|F1jH}NISzAoD`SAI%BX7;@~ z|1dgb#A^>_9$?PN@9Cb7+1Xe!=Sq&`T(3*1a1zR-$i5lmd}uUg%xjex?OaWkgJTlon+);cAAwvx}XY zt_bd(uriq;Q;DX)o51qyZrj||+x7thCTAU7)c#8nYT_yCZ3g+5B5DG{A&WfGG^ zk_G}gi`o$4CY|g6l>Z6({L-!JIjr0uPCz z*=*gr+IPc`VsxfCI8!p5Y1-1pMFLWu(R`u6<6$a^l)ID2Q+d8w){vW*bsg`8f^6FE7&}N;G@R88{wfn)# z1Oquc#54)LoL_$|Uq_B5%eE-HFOWEvG@83cqmgGp?WoYH6(zi0>h>#qqCT&NFJiQ zW|5NW9amI4)TTh~9Ocfw`%l zO7=@wKG8y}KCOynr~KgwmdfV)8w9D4T?cbQ~27TgnmG z?sON9=VXPzOXDjy=bCvgquc#~hsw^1Cxb*sAr)y+f=b^|0!2Z;*lU>tUZOx;lA|&c zgx96z#~1f1+r{XIceUEJurm-J@^G+vqabq~befT#IX95Axe>{%rK5{aq``&sxx&}bvS_mf-)@eL4`=HR~%hnH$?RF6gY~Q?iIu7 z96&=a&p(h_EzJcZk8(#>WwL}$#W}Z@ElClxp2EZGG1_;FEpTMT;5Q|r{YKlBAa4Ki z6zyuJE3K?H4p)z}mm(eStgt28h?ueh8Ozrxx-6wVaY#^5G@Fuo{Qa zg2P6ejq-XKo??)_y4&li6`N-nWGBW~R{Mm>Fhy~4%`XSOyX0l_fbS$QObJ-BXnzWS zuAg3>THi$cJX!jt&Lq&lNsRd!^2-d(ZJ-g~`p$#Y%Q$VI1s@&=UkRFm`D7cPp6iRu zM{vP>>9mchU4pFL%XV^KQ@Yyr0Q(L0K&^lXudH$?)Y&Y2ipKaW(#9piFws1-rP*u-5FFt~@Ex6We~F$Eway)WAF9OZU{ zFya8d=y5$pXC(O6UKm=*i!k0v`lXHe9>p!!+9IMUr_01RjS_Dv?0f=`5ApWLYDjfD zfe;8B8651$rP0A+s6FwK4*hkG2(PGfsz4m3Ss+eJkf<`6FAUg|Cp3kqBax8HH*4A= zDRq$%&TDt%36@m{=qzoXTG|{&wWV#BIHjM~MeRbfXCP`9cksiia6{#H3nxd*N%;|f zfN+rkn{>Q=S)kG-6e**_jtW^?a04NAe2S`(^Qf^-%o8VCL@uSZ5&Q9yhL9?8Ax^Wk zWJoPHOpAlM^GQ|ptYeN^G9}yEuOGJICUMcD?Ze@*tKeswQ^_ihi^y708-Zxa~#mHHBrm3-eVO0GDFcC7Y{9Q4*+q&P7Encd%uq)IPR7_l>vDv6Ty?`XQFpR+2` z{OtPO5NCw=jA>>BIBuuv$4P^K!Npn$LQ8@<7y>6fFxTxI8OM^=(4uEnRQ0g!)=$cVXoe^L0-nyec}3~bDg14sk(u2slY(p^=%bSp|$9nQ=R#7 zZ2!%2De5qSxethYdCKLwFk(NZ5Sh4p9-VB`o^8DpL$#0`3XX@`1P2-hFH63Y;)mky zztykNN2!Jt1k2#s?jPb4~i@(PG? z0ln=YG(AFMGd;g5x=wHq8n-eWGYyZ7>e8a)(eB}eFWeRpPeVJzJDqpTaYyOT{(8EN zH;oTX>Md@P;Ai7(KHjgw=cwtK@u4zLw&~emWq^P(pux&GgY)G?!=s^a`v7i2gUIlT zg)>a;t8vU!h8sM21uba<3Om7_`4N0D0&#M?I|O0}K+MeR^<)GOK#ZhrpT3g^+(=A} zNYRnUTWDtaFRx(#m<{Y-N?KDv9nZQRkIu)}!T7&dZfgX*p z_;PtVpBkHkkFE2`;%c-!`;?4wGy9*}{I6Lsy8d``Ii7Wz32vE+V@+nu@yBG8<$NAY z=YJXNJTU-HS-5}`nFbH05R~+GM1t|`JeXeu|GAkj$L475yVi8F9AA&7!DMzezrIce zGc*g1AOaD@f^X(Hh#ev5e13B}9UEjG-?y?p`|wUn*ESS@tI_phoJ{0we6^g+XXdyF z9U*BlGpQ*2qW{V4^JqFb4^HRvsW}QT8(XPvGfe=_ni#UC7d)F|O|MD0oy{*VN3(Nd z$Y-`)M}Eev=H}rXaZgwBw#>k(&mbkXIZG*6nQ{_^nF$u-MDRw-`L#)%K>^2pntc3Z zvTq_7Gwt5BaCK~O7R%A~vX{wewVMdao*O(GRII4ZQ{%zh(P=)h@aVOPu-XxkO$lSAAlc=L|GYKA-A&>2=F8EL`@X ze%wpCPs<>P#V!Ex5?`#-;V0kWvzw^S-yvxtaJ?_wxyn7WU2C0Qf1^p3vK_UeoFpr& zy(QLSkdxwTS{6A+;_;c$L!5moKcsI?0O`_#WarVhmq2$ChGa&eV%YoJnx_iyjE4TQ*XN%)qMA6-CxccY#MP!AW zP5fgTKRgt=M>h4+WAjL2Y0qyiFTW@db%L}|r8rmZGD!~&xNZj80jKD2R@vn$R-xUI z-)rjvPb2x39&x{p4`Iohazet(eK2-Y$_W%{R`;uTdx(A>is_zZUq5_>>JuYs#oO|Y zw34qHB?wN#<|q+n(PW~k_fsz^tqU;_Y@FL{#P8Y0!L6dd%-~h^IdtelP(~l2X+A&c zyCuEyu z1u>o)}I@Vq?xxg6C!?VJD zR^q!wutFEHGhuMEqP7q`7&jq zIe%4yviBVVUiYl$SaC0+ z1021?57@glgIj=qeqs~~@{{BkumH1m-7$IRO28tC4dRFA3kTvyijmY(G(`*5x3$ZFhM3R7K9G|{Y?y}GxwltR@K zSv%n;&2>WJ8{9$ba&IX_uWV%J6BO4+iLtt`TN{}-?AdB>Smo9xjZ3_HsHut+SQ3=y z+z_Td3PSyU->GXc1O3IUXQ3=7ye*Cw637pWW1qRfZFgVu-2_a>tvpRif>6<0m~a2@ z-xrAhsZ=RkVh$|=(9$4O)xOjpvGMKOtQ=Ot(%)XzyDG&jFOvlj>^N2^zH*=Q(L zzV#Sx?@Bu)A!iFCPqU*33O@FV;|Z@p4b9go(wxPcO_ZuNkwRq>6e2cOX-tZ#J(R~C z40zlrdAvPh+@402Pg_xR9Tbms7*Y?e6$o$`P|qw6Y3gd1!j2LQa=FqT;@!jh@RLso)y zpZ}8zlzvz9`{IArnNCYswS{_xHYFa$s3dmxemu|*R^0?s@21!nru;gYbhG<c!J zX>VKS!uNOA0UYb(^JscAUevqCpnK#8cYUUxtcOO^X*-W{ zKdg;MC#hD@KD?Vq>oaeV{gs0t+gqGema2B>vr(~Ds=-Y+VwO?(#69h{J!hT09b7tV z$fn2_5^PgA_KEfnpWZLhe-Z<+FQ@aqn%TavUCPtO${!&<64kkS+3lk3;e8&|&Gxbm zFFWW*du8r+f_@r=nt06u;b|Dh7-n4pFzX$=!IMLj73}@jBb8Dx6DOa^-^Z%B&qVrw zL#(_{iAiWCcOU3luF~layIbb7`?hV%*G7u`j) zA%7frLevF(M}zRsBR8!)Q|$UfP%KqA5Mdq^R5F;N>SbsX04}5$(^J35^SlyG9`;F~ z+LxjZt*R;!o8Jqauf`E`QSeQ7LJKdyhVsV>FsbyaJD-$ynh~4$cJLg$HRzt*$iwZP zZ@NL96`&Q1o_F8_^PE9#z!^oveFB{q%EN8@`lh&iDORlpiTAA^}cKUYI}uRKigjMtpDo)t5d={ou7?l>uTyq z(Fa23+lNh5L@<@6+#|r0yR=XT4o@cxLha?awD*(pqazID=PUQ_YW~>XT!4;U8_WQ= zxIcX3`De&QdJjMA&-%!B7NQcI1)2xWLntnB{o*r+*EV(plXuNP*G!&*Tcc7p-a5(R zxT+YO%W4z?dsBY8qyUjAmv{(bBtMjT0e-jP??gQ<)NwZQyg$!t?J6N~yc^|Tjq#9C z_I(rAX|vu#f2sa`;OT4(OYl(6<|b5%WcwT@mSrXNQljelp`~cFj>tK-bvB>Q%i}*HX)eFk`)M0=UtTNi@TB*gBhEUd?CxkYvGl?E>JSN&uv6>bJ7# z>~xvpJ6Xdm!v}#^Ux(rjgA&iuyoK5AP+He|bq&+Hr{qc{&4<7yj>_#phvKB2;;h|I zIA16K`6_3)VrukO2u7-$9v}M%WI&NJ;B1OaGQ>cXr#4lKe-&w7Cg(d%=gq0Tt`E2+n2&H^Z$<}%G)aB z*D-0*6C2sFXGk}F1auq;8`3(UhNFvG97Z8;%BMn-u|e^3t}m(>Z#~{P&UboOOM@&2A~q7v)W6z{h;4%z zl^G)PaElI-d@Fo@-W)}m`^v1#W%jf>+%#~)*aUQq31<~CKZX0pdR}X}mudTiIazS3 zDP(@SE+gud_%JKJzu!j({*x+OOLE|V+Avv55np!v>Ig`UH_N`Tb^0ZkjV_xGRkXoD ztc&q@*`r~yxcZ{f9j>mzc!eOEY$`5H$RJ4XW|!l3ZqW{@+j+R3FYy_SRV7&Y4mK6= zYBmkkpddf1(2G*c071?V(X68`ji~jU4%DHEpWD&jf(+X$J(Of(BYsvrX*Y|v(eI&! z4QQb`x{jYjY#WZkfb{4Qf#r1D{~k05RQPv!x8fO9f@npt*BewkSxFG7{OCV$8Cso4 z=o=b-)??s__wrU^jqgpqib8d!q(+z_9Z*iI5F9|Q+1x5%{16Iwie^* z_-vUh5oYscFq%&1e~r)0^-rw)kSFi`g5T3)u5V=Vi-HQA7>Av@R@OCuUGCIWzL3|^ zzd2bHx1Qx%L8@d`*R=`0fp7ib*LEqoqmKPSOP!~OQNz17$mD|nxUikWB}F6C#NFcM z>8T!G8|U6P=D2R5Op8*j<#~Cv$#ZFY5Y=zr{rH$H zH?MZ_{kqDP7#frFQK>h5=qeF31mVBI?Ifx94KSi!+4uuQYbWg{uHbfcPYB#4DdSeJ z>R}OBg_XT(ZWx2P6olk^SS8K%b-hmS^i^!6v9tl-fxz+*Ai#qupUA_BPjvQaG+U;H z(hH5(u6aF;93a0vRGl;UtHi1YxK-71R0swU_SSAyd$t)NX%0nuIW|5`(9E%|r=m?e z^<5q6S4d=C8R6tA+~wIp698ixj9VNUf6J9cTlEty96HoG#2^_^%PccgnPs7nmdE4j zcj7aa*zj~7I_UE{qc8v7f{U+u$Uq`8^knO6SK)HXJObsuo#$CxI#gSO0_TC2tfY_B z3E^dP+i-mqAO7Urq(LSW3o9{4)Q2*Rf)+H)_K@NRamvlXGz~K3lejlX(s8HX)v!F0aDFqbSAF z{N8u!6ZL?<6IK81CEP6IBDMLdc*`X3oxyE$O0D%iTiNmj*4bmYGd3OI`m=Ji(Vqb+ zxQ^DX?pJ?x-@Bd&OsJQJ<(J_DN7+DsG2yq9@*~KvCN6$$eIXy4risQmo2wNxOd8@h zVB8+cHgX=4cn;VWQaUKO*MN063)yS_2*$iAQ2mVPkNmakKrX5V@_enZm2W<5<=eJ( zHClcOE=SXg`Ss=4;00v9ZzVeS(`5FsRqs~3=yg@WC;U1fUY9SURE5Fxnjl#Bjd#U? z=j=h=KfR>>&-=^lKff9}3b!i$1TjY!>>j!H5%HRoV~KEDsQU6pMVVseftHT7%B_PI zD&5Ygte7rCC|G&;HoU5la)#A`fp&%=ld58TxkvBY@PaErss=9J*tp8{4S-RV{m0t6IbkkLdH*mU= zEhXi>j^rcBY2yu#Y{`vUS;~>*G|8|32=Fx^MG};#Sh@W+ZH`O;gL%&YGpOf}YV-*K zCdZBvuUdP|?x1oQInp#?Vx z;7xIvyx#5PC>_bwkX%9h$UNj9z??#aGk0)K&MHKUvqXZ2o4r;sZ#FN**Q^|o3X}*} zDLu;jKJZfmdVrP}r)v2cJ_S-NNaHefGXXs%a9H0Sdv_z=aGSn$=fC5^;nV7dwfu zL*VF`BChYR0Z)ZHs#n<>K7DJguB?OIyk4@y_@O#5!ZZ5Wf<7f?u5O&#ju|T~l zNJQ`!js#qtKOoRe2IzuLpDg!A0o5aUn?1YuPSUX{P$Z*}(PW*sj+!Hhm1;~^Yzd_<+!-m8 zu4@i$f8Q<*$96{{*k4A451pmE6!yK*)qe)p)8PHURR5Xhzi&pvw;is5z#94?@KE2y z?{Iz$=C^AH8uX@WJlWT8WIAiiYkgsTyPVmY^JubD9|11bk>d}kiL3Am`CECLA`+_| zY(lC0^$=RC)e-f5?|Jt3VzQs@vqO-}aVrFcpkhnA+xTeK%E6&kJ2+j2{+(=NBph~p zp*^D%7C^J4%}K7u!E`VVdJYN(a|Z>}9E-#cJr?g_1ObSzsh>X(hN3X|>9yUU0(9WQ zwcz1d4+)XXV`c@p%-j{ra9OXNBpgV+jWy~hSfF!H{iJ(Q2919JX()eP7|AR(b}}9i zDXi^I_Ld7BebrBz$zy zN!{19DiV2kw}Wv{H)^ul$8<8e4<_#i?}Ppzy!sH{55}V!r3zTGy?*^E$bLGWj;0?; z{9hM1v40Gl!MdQ)41c&RjhpWc>3gZm$JHsB09S2A;01t9GBxC4Q!bE3s{k}CXjN2>eYe6dRloZC~s*(vFa ziIUu$1B{nx;To+3Im5L^MYwm{8&8Aln}Nf{M%a3#Vi?rn#mSkm<0uT<^_1 z&g0=@HYWLMgoP5SNKNwHf}rKrehO?D+v|{5mmnY9REKS2DCTF+o>s4IGO0Ooo8>|_ zM|2jev?cVL)n=ALb75rj74+_L5=NZoUbP~k8PTNqIIH+zPKxKtzZ_3Mz=#FQo(Ut$ zSJXVeS);88IGUqWU)8YDaGHmp!65*g>`~Q=$*3_x^U?zS;$HUPuf$A+k71WBCn!C? z1}iL>ydBmhQKMNIaQo=V-9;$%!F)WNpFAHtrxNEp)IrilH}lA4; za-&tF{0we&B)7f(``+++VCtH4&$_!6gf|{s2e&S6J88}-Ldsd|y{aKhnU~+(u{8D-@z!)JyzE~%?jOU;(fF8jLA|De2??m+wQWwl>^TE#)P zJ3Z45J^4zJ%9`B0eLI*;!=&X|+NQFzBZ$a04Bp*NKY-^b9=&F%H^^PRW zD{|@W3PZaJVHBuD%#X_s6uaUpz9K>`ndp_kbpcKu^3k|!@+oO?6z{b))YYS-(FXhE= zm})A%wk57q!q5$u*xMUe8zq6$Go%PP@uq{`JBRcgZFaP$%jZQ`SKJk-g$J*%SHT7` z3N9oobV?TJU*^Fo|3YtD3)pl*rS+0s#P0$Yv8GSNA6E}6U;_`u!?}w{!y47P7w9o< zKGD9r3;O3c#eS8u+k8pAEpQ0NX@1^~6l?!_?cqtOwc#onSVIVaBYq#&qW3nEt}nmb z&i4DoHY0hY`*Fr{dLS`J&Yf^`G&hoPZd3*e(k~yS;3%w*+A57e^Zlf&)#mYUT~4zI z)}LMyPONNC$DCI`5>%Yr`F`i73Q3J2%%e1R(?&WqVQ{Otc?p2>9I%*#*5v{ zss=eu{2ezBO8(~rFgX@r`{$17E?ap6f@RdK@&*Js!W$5@$s1_nxc%E2d{o*2P!GT( z{(HzU)TOaJ*8S6%re(D*Ma(6$oA3Qxqf4?uafCB`*gFSBoU5jw=mdmtnDAxEEnIL?#YNU` z+WhIjJ-s8eN0kMlM_fSSS-VHyM?{+Nx$fD1uHvVxfx6cFdhK0AZe6lk0@>HmcCemz zPjLwvndfzkfZ{T~V-l0Mh^B-5D!94;HpuJiF+(XEygFElq;wtVmdh8yZCs>KS!Dj& zEp&!4em-V804Yu(eLq{hEG_|k7_^ur`q}gF`9hd2Z<-sKPZcgN1S&rz;Q=d>sIP8~ z8YoqfX%o?)lOk}Q(H-Z7Qk?>?fJIh*_;4W#gKMK%^4p=Kz>L{2PTpZxp;=deAsU$3 zR>J}>&Tt+FTJLr9dgyzBPna@*T%3WYhgEKF<}GYuvx(u=^fI8AnZZbXS0^eaK4M^z zF!ALtMxRH!Q$^=1qRD8hL5@kny9c@F(WE;a#_`Y{@H|Xf7SWiupsqco@ zH>1fQ-sORu?bR}C^AASjth8b{8V>5xlnM@0Acv+^;w<`p>zX{(&r8S2({50pP=bPK z@9o6gfa=}cjD8>VYqR(=(w&Dm*A;b&r_#3BcFOWB*-d(+V=;U;2S&+hR0s9JjdGWWU*ckIq{}LUU)l_M1(#fq4qV_gh@#N8Ou$!{xkA57v)Q z^K&cTtQ=~FIlN;Kar{F@v&ORl;p46w5b8;(cRQMdqq}K1dK3OW8sGFgoSc}+?}j&{ zUVl)1ca}FFwni9vd0rPK`&I7VRqO%WvDKt{+HRizUm~jofkJd4?=husmoh2x2FabV zH1~qx^+-$MbO6d)UF4TFpY3sn24@FbGJ$YIzaq2T-H#WmS>8jx?NjHLfzeu`WMJCP z2(R@E--I~PT+4mhfXCVak9P3kv>kv(M$v@kWN*CL&knDrU&s9;Td$Hj%`K-jaaM;Z z6nGzJyN}nK`6ByAMNaeQ`}oz!UGl$^WdhO?p?25UgP;3gaB>I!db8OY7q*}CH=^EZ z@w6}gO1zg(#or?JxY_=2YejP@U`o#K;OyCI1@RI$b)~V8{2uPi@p@bM5Ln@D zGbA)Cz_z_HofIPn;hqwxtgsUy6pV3{PxYMd2e@Eg}M`y64wiRUS&UXm zFXLyEUM5WT6MS~X4ID-6eLJ|GMvN8=rya7H z$|vrR?yhbIg-DV~?{j>)!ICP|ysIIYm%cM&f=bP^$LjDxvY-Y2a~i~um+148*~*^R zcW0|=F3oAgyf4n*a_^h-x74eCyhS!U@9CLjN1Yn19`)zrpzVY(INieu?~+7z?+v@Hj9a3HODPDwf(G42=7mwL{wpi3%*URHy9s;aZ6mE9*1f3TEJrAdG(5W&5r!F{tC zP=52_xAL7hGmpj&0~r}YaLY!E6y%ZMzH*d;qf%Wq+0W8T)|JCxTrWvd@m>`z+GX@V zmpLEIrCTZ|O|2^?Ji#TG;8_^O!kObeQ=w$X_jrX8`s(5Jf8#gwd*inz%&#GCJ~H9J zN|r)SECs5hLH&e~g^JuGq_WGK=t4!_>~giLsSS#JKm)SgRCzn{qAFd4%Ib7-aBGZY zKF(y+E{7_-SaeruWZ(&yg!cu5^9BYyFUDY;r^Og2=ne(Lc^=L#gc8WAk7?p6t6zYK zFVSX&9k06=tcc2Avtk07H<+AF9?wmllOB~miS?+Pn<{;onE=Oo{nF2BssPIBZn{f9 zZEJ~?Af((evSB^$^#^ZycQ?~8DaD8)xk-3+7u@s*ccrH|9w>0KqarSE&ebnxzQ zc||uttWxn3c|Ae^)>p}vu1(>AqxqM9)^X_`{7B=+Ng}zczS5g{ zP0hm*Oxlby2AA@kGldf2Gh_-SvYYrldd(Z)$Em6A+UFI6O09ESv{93Yw`htd5vy&A zXOZ?u%$$(n?4nJcCDF%j0sh*Cblg23;7DCsOWlHJhe&ONO#J4g%V51 z7_!_%ivQQP9gHdYwVtvdZk5=)+H0UNHIEI|00q$Uc@R%ts5)T^l1y>Cnte65bsAbU9s{eM%ybc8l#g!dta=#@6fvd;71S z7S)k$WC(XJ&sHdkxe>p`wrbRYXgE@#pORv$w~Ku;77&H_sR#`>>rA)Vbd#E2pY*Q{ z3Me0E@gV% zNkTwdxK!ksf1K^~<2ULnnGD-Z4`Uoc`v2o19Ro)jmZT{pQ7nQY;mfw z^}+n%9{fQWL%jcOw$oZ_xY=J8z9h@eRuG{${HwG9sr+OEZ=(%7Z{`cI1NfbgWg`wz zqHNZ*ZyD@$GQt0VW!sc_mhvQ)B){m#Yb#p-~(DWEW1_Ep20 zQp$Wk3Ln@HM;ep8`DaaloSiI)q{uA6{9=Sx`cQaBTNjU);e%jIH?hQI?uc{X!c-E` zrzN)8M-D=1dJg|lMmI?NM^2hXf@k&h!>ErW!M?GcFDr076?>Eb^c)?&`A$i zMAVUfl_sD%-rfggcelU^+-OOll!Eo==)1-0a!f7FdPSPN8F0$lhuqbFfw4WuIqA7N zZ)w_iTBa6!9P2sxB;6RdongZ zUyLX2%foj-pfT0mERx8kQGqpBI+AM%>f`XSS)nmx6xx@v;Bf{t@P#?-dGqkmr^Whe zJA3?lQJ1|c_+FMLY4nEWeOZxF)R4EQ16- zyP%1Bs7{1fY8eBY(KOUvRRB{aP&m6BVO52&xhxdIc!7z9Ij`nI5uu&X|*Y|G&-F^VOmZoAP-A zTPYs1LN*6cXwjCA~!_dsAWk1k<{dG-iIqq4Y`1`%~OcE*lk> zKN!Sxb;XK^ync8v?CTbXBh#-fzF|=2$$X^pz7;|B4;@@M6NoEsIOvTBld0?B04Mq3 zKqu&se$Hsc3ulfgeUYW~ZR9Xoj8<(HBEY9B((~qSjhoujg%n#V$Kw8dOJ$W_mLB3z%eHmxI zK|S^&4{`pjT5t}WU2#!vrd@LiCwTKITrqb5gdBUTIBn2Ev`sbQc=}r++mP>7c4!7Q z3D=mm^$3(D1TB$0k`)h#>aiV}2*&6w*n&!L zSGN6aET->`d&B>4sit@&rj>-k9$j96BFk>bX z2eyfBJfho|>hoCccpeMmnd2S){FNW=WvIF&q&_Q#L7&QBHO4;T;k%}xz+V$APiim` zo_vnU^GYhgWH@WF3j%gQ{P3R^yWn{imQophJed{>>;i|222d^`zNQ@TfD9j+KrWe$ zpz^Fgvk$}vw|0~;r4?51-m_I0L&=Vc@(f#`?lbJQgb*gFb{U)@5K_!oy8G zw1m5Rr{s*{K-f5MB^(szfM6WHjfdLxB5pu1C@ZL)gi-*6AO5$Eo}qyD4e1OiToK9y z*b8a57eHAo!0RYTt*l#hE0=h*yDb74yg682O$0T#$YKV^fFq{$* z{?Os!DHuogR*<({{JGp2FWemg0PWlluiD5q0tisys)a_uKn@6Lbl@&QbTI;= zi^JKeeiO;d%LMgX@w)^xi-r!{*ha7m%EQH}yTBmzj(Iq5vy1%ZF(oqmPaDw#Lpe&U zN`;<@EU}}t$G~JW*2+R+;87CXPOn3~C&Mqtdn*JQOjgHHCS&NRmyrTk5v{fcj`b)} z;f*swwI_;!C;ETPJxg2LI@4>vzk>}cEXmiWs{o-*8wekvw51C@Au-_75Ob1nTKelh zU3?kYmMn*y_iYyiY>hOUn`Xw+sJsZ!lB8hV0Mmc^FcP{tF+J(y{{pv@1y)aeK!M~D zpZ@*El@w@)7xascq1TG&un#DZ6OZKXzXs!=Cb%%z>2|aK?WzZ$`W@+K1_-1kyg~~$d0S*BU>7Wm&3zVn0CR2lR z7^#GS9*oyX!#8fJh>6?wUEk6$0iLmiR^F9cNGo<6u`RIC&-w~p? zOi;e(naT6X>HaRwj~WQi_o6t z5S0T=Cs)_T0vIuJu7>X!9k0Iakw>KB(Rg?>9Pe{-A)DObQd}u}JRa7#GuAtd)dD~@Vif4SkJEJXJloD6 zdEUx$K$F>m6Ahdex@zEdms;%BhiN84t0yO%C%ViiFMOtmd{~OS$?xF_d1@ITp2ap-G^_*f%@yfDp8@B?fY1KGDJ!fcG^keI;rY+M}{jurG^Yb!Q zImg1N8Q+Vlz3hSD?%7mv-sL*`CtVchfO;n;T4TqePpHQ7;(N zW08EcOfd7AmlFtwo4tG;b8iSPKQ@F z!>hdbTzI4_&)Ir- zzykL_P0=0_ShchEr?svHPP*6wpF`(4f2!wlcP^>&qBlp!1rn8yDIL7y!&}HAaSG); zUA4Uv`{~bT`GMBk!(;d|bQmh^<=K)~zHLPLo~w!Swet&l%};Lc-7$Hl0{6*pc?jmW zb{J-EnW^*0eiCUdIKWY`Ih}^XUQ9V#X0xr1C%ex<>9#S2JR>N^=-rV$Kl)@&TgI^z zFE1ZO#}MN7V#sLqFR&xOuvNzp-?e8*TUYihiF0D@Jd!0-A|q2gFF?JRGR{^HI~pzs zYCQ#vg4oTcu-hP39N`5ZY1xsq} zIvYC;@ky82!Ut$CY>^j=eXq{+i9Jj5cYXmZ*56=8NWF-&@Dc~V(oJz*p3Jw)H>ug&UmD0}+ z!0=@@KWAl&m{lXo;X~(so#mIBeDC7NCjY@@#n85tp#VF@0n6`JNCQyh489Jh)*}(; zY;yHwaCK@8;XB8JlTQW6cPkjrIS_|sr}iK&o5yHMuO`<6c}`rfMhB=%kq(dv9Cw0a z6FBJvC%UCNa2v__Wy%9Y7A3Oai1Zl`fZ2w!dir3w9IcMCU%jRp z6c~KetKs2C0Kv>%c7MM~wta>P180@3w~sw&6ND8L01d8~=aW6X8_9pLM$Cxm(+pOL z!6A~afrPoti&;xS62Mk?#Jo_8B$48FgvfbWF~$4wt4RG(KfEIwTjDZ`sGqu?yp2q$WsPA2#A5ene@bJi6R!J zN=Q$KkH7>Z=vbZvP*K6I*P2{eIcUGYZkY&|uIWhQCiFaSicY1f=BwHl&GSKw-B6Tu39iG&u z7C2v9r-s_5_O%X8oZAxGdRJ(~uV(Jp6{@Tkd$)HQmRI_hHBgMRkAEbcn8`#IUqOSbN*b8dB`PH8a*PdYkzHd5HX zTU3zWU}A8$Wx)b5=o=I#2bk%7e%U4$$*(Q^-PXzDYf`KNRu-7G48v+eSl|-+AXcnf z&>)5lV!EPg4{oe9@Mzj-pbR0eKvx?Cuz{OzN`pu$4KTg0HQGU^V+gNm;KvcY zYxIC&4beoppFULffq}MO2x#5nE3Rs1~rr(LON^ofM5>+{XtFA zNxG$z{9Dq=H7L+aCvqb&6GR%4fe<7XzoMi;3n-l|hEEy|pll&T?{;B4^Re>uAvXoJ z0em=s+rloW9|$)k0wET#ZfDEEQ}(jjnt17T^U~WhFWVPS=A~=d>cJY2C<1wbLV9Nj7{!oONYqa2sW(2qC=tvG(R-6{``yCr{|D}; z;Pw%cmALdy-EhG(J`jW0wBaH;K;0Oi4s}r+^-$H3zIq9bgeX~4{vHSUve8UnRIR)i zLJ*qlVEK4)%jdeu6GiN*p1p=uuC}>|20nePH}C>yojlFb72h`_&0ejCLf=q~d=k^U zdIu4FAJJJIo`CnBThmt}>Yr2?3ZtwO46p9rEz-?%vSNYq(MZU}G<#XklOAg#79Udz znKA+TQJ?^#67V`zu07Mh2a&75yCwXzV@r*=6}$q)@)ku=0$EQfUrQ;T>w8tGb?+F) zE%lcz6+gw8R@o3fMIo>47!sZ=(W&^!%UyEP;@v<eDFV$Xgq4TV4pRertIlxK_W% zk%x!k;w!1_3J{}q6g#Vzr(>oXi`hC&HrLt9{4rV7T?bMWr*6|Cgs|dSz~oFAM3M9R zOS;%9OAU(HGT{8KKk}T{`Xl1}s&~i&M}Bq1ZT-0?pMR@AC-V8%`t#6v{g9*&j}43i z=a?1>{R@iaM~wM~3Hjb=9-iJiOG57|2XovoOXj#i7r zyk#I#h#Ck(R1)+inHzy?Qx(9IXK~$lp7A{VZU-7wA`v6nXVjob$$vXJ`6A%X)KVhi z5YJ@Ice%}MWEjeihk&TYbhhsg8GJlD3VAX($~H+a{9Qm-m(KUPbroBxKoB=oz@)Q6 zvF&9Tp`aR0`tRH9MqE}!?wj3vVjIg>Xc8I@ujRbN;w(YzEo5b+`S)ZcZ(fufK~Z%9 zw58sAgz0@nDf=zlzT3Wq`>@#sBdh$a{H29?Vhh_XpstQ-K8R}wmbDRTcjwy3DI7Z} zRs;!u2I=FeLN(x5{O(~jV_XXX*DN-C)cA%~-MA5QtK|T&m_keVtxLFL8gHJU2PSB& zcP`6GT3UQy6iVgk{9;tY%x6O1xmQyixBPug24AMr|o!h@!p={5eMnT0}?o&FRdH<&UEtG znqdgiFBA-`W%S^T5kERCZmAkiCZ9fEny*(w`~+}uwHjnGa75W=rjc*c$&<S zBFY424ZaT>_=c?wzHb~m65^pN7|umP)uBya3D;Df z&?{h%(g?l}m=OjtW~N1)4#*XG&KG(*x@zuINBrRHh5E8ijB1FeN;hokLttmB_F{uG zslrCs7km7re`mN%QP?yOA~`ng%xfrvAgC_@=aAo>-ydhc$_3ao_i`Th0&??-7C?~F zt~1mL26GXn+L!#WNAKANu|!{^tiJ2kzv_zp4@VEl>gYb1@p6Dif29wb+0Ubo;z#{! znMSL4$8Bqw#Y)0GuAn^k!u}AODEFGjme_&ud@vrOvp0-4g58Fo+v@gBOG_q^?B~HM zlZwFTUcL{sbBW~}vfvg|64Oi%DRC?z`CUAhrOo2uq-TBY6_2FsD}ZM!7xvd}$5h3X9nX0_XP69wb6?E_@_w zn20my%g~tFP4fzO&Acv06z=pVVZPJ9si6SEgAh@EfWZn|na}4m(Ny5UuD(Xf`(<`F zTbBFxMttYOBTu1}zx0hw+i@ls1we#8azLP&`q2hDeYxh zQ07oSCy02EBd!nFlD}VO%T4~nZhv7E#;Dj2+ar$_RCzQ#tH2npvncti_32yBGmhl+ zn06Isk9G40i4g3{FN0+*gGOuER&F7EHE&G|TBDr`xkVzjt}@;4AN4Dkd(Nii29zA_ z5v==%UE(~yY&A{QmcFd)po9VAbOYmnIC3%p%AeO9!3uSP zoiCGjw+1;SB1>MBbl#Z|)nK)3zRm`PE=)b)>aO>|@4BBebd_obd=xkv0=hz-UFE3? z-*?fw4l;ofC~_OUHHuvDm9D^fTCd|m`8tZ7D<2U_)2e@;&fhNI|D~mj$Xrc{JEpVV zR&Q_OE4XGMzeHxBN~GOR*|0*ShYfk_&OAcz{wxCU^>DsUX4|9}4gUM6a!QJI>htQ3AFfCiEvUBS+f6=^=T_gZ zWt`n?T`lzyNNSG2bLljkt&?OV9S2aHnb#i{W@))(y&WB=HTR*ovTgk;$J-du-zN19+bDfpUDqw7e7v>0zjpf+9ijy$gPmpZxK}L_{x7dZ;u@ScpzS^UxQ_ejgbD!)dgaC+trYTRfs{fh zg#59eZw=EURkWV05duQQc!_Y6kF`I&AXr|EA)M@z@UdbQ2iwKd{lw50A^qSB_6*evqF~?0Sk%<@#)xzuoo!^#{glEJ{ds8)rOEr z7>tVPdlSL|Qk2V!0BA%%>GA|tD+=&ig|AV*I)3fu{Vrbpy=AFxE}Fn=$F z5A45*Neo=kn9zSr9P*XY_}BxWp-U%5_n4RcY-CUEOg)f9n?!&Z?CoRWz=oU{d&<#j z0#2o{z#07F2$zZk#kb3pXYaP@LuZ^~6Y zoUWdA%K~IG0<)>U^ET12Qqv}wC3TY(Px|LSIuzL;*``_BIQ576zM-y%Jgm3yRn(6t zu8%_ajm{iNk}xF7G7IcO6w$v;eohpHikk?+LEobvOrQhRhSW#(kX51(AEC=lw=SE7LYjj^Q5RD*oA%8<- zrhs^G;;tV8fea8mGrAC->Ow%LDWu1yQE{ZCHlRR8A${(@&O&$f|A~9L_Ox+kul+xA z)2p>)*|MHq88C@k0=yW~P4>bM4Q|U>5_*7ich9dsl5Ati*zzb%_w7ZX*plXZMqe{- zwuObOT~p2?ey=!hBs>Z#fD&;tn55(L*3%Y?&6nVJ5+B1aTa6$dwqWz%2l<2JeUam9yO zM?+0ilz^Mk>}^iAp^#{Hi1^A}ILuw4PUR9yyUZgw;-@rb=}c|=j{ zT5aFJ^biC|+dC`+1ywjPHT{hr#fGI0d1zT*PrUiifjBw47N>px6pdSBr7P*)dop6CuPlYzduD zv&CctmmQJC#)-${c(_c#EwJQV3g&dEQ`3eXZs5ez;Y~DMa>eY^38Lu)ang92&a5~n z>}xt(O-EUL*Ee1hOQb5)Vm6FZF*ukLR0KxC`hbPnbLKOl5l{#jRw)983?o9QGoDS7 z=$d0TiH4S1L0xAai7T3u*m7iF)CU;etfn8c>v$R$DrG(n-H=s6oB9Mc>_IC(CrP@5 zGgZ!QN>>0x88ffdwu0ftnnU^tV-gf_j91g45Ho8FPlJ+o!dk3So2CJ)sFtP414wLi z15Rs`!+AI6yn`zWVXiYuxGIV^RwjTri+GsKEybL>8{#*;G1y_0u1!_U^T-wln0#^Y zTtC1B8Qpb;(c;cZu;fkG8d)jjlNey$Lti!2$XN*KT*TL0BNtF3>ocnI2<#R-XFORY zBP;Qz&QFDd+zzC}n|QRE*lC?t3Ir!8j|VMPhl`@8X)TzktWD#rTs?KbAd88T($bZ( z05)v2Fl^jRj*{0|Hs&k@Tb8kfGY}(_7Ly9rHP5NzN}Cyqr#b|Hx@ti4@1j1q5Qs%w z*chNulM&dZ2ZcILKU8N!V9p?Ckj!plabI&Ww6VdI;hL#1WkDiYuOhS1Rz4}L37GS( z;g^-k^((8F#)~AHaGz=?L)7_@T&K~e!d}CJTAziNBZDmhac*aWteBoy#r~Lw#tC;Q zvvI~h;)T#tK{K%M1?n^a)`}17pDi|6UImIG6OK(xNst~;gTr{kG6|R`p_44*Tetxs zo`)`jIVh@utIq$xuG8({zm?92PSVWY&Xe9pc3j_Sesh|YdBH8#B0J8 zUkRFRY0b!a0n2J$+PdBXHuzpg916A)w2Xd%u2k&sYa#_!_^@{UV5bq5Zu^xkgN5g7 zA#zs(I4UXquZ^MwPPAMulEG?ew>DInGaJ)M9IF|F_>OAuz#iT$%{n-cz|yRO-3Go` z7O`=UVwwAPwz$u3XTn)o7>dA?DRdH1ls8^3lj(J8rLZltRj@#!7O1V(l7dn;&yLS( zDaoUk6DzP$oWHj-(0q)*mNpSZESPkIkVy>;Z9uC*vWEF@!yZR zJY1%p2=VGo^Z+DTo#R{w>>$zMBy5`EER62F5{W!zLv*f9) z1$n#vepOxzHeGD(ySaF$!s4ED6ubk1pwR~@^r0qRO2x3EJ@ynb8Edo)dA>S-rSA;@ zXt>vhfUEOK|1v8qSS3?n)~te%K}EIB1VyQ9OsD0GZ1=Axv;I=hpm^Zy_UrR8GI3Ji zHTcMVj9TvevP#rX04;FVAVsVT(#Ce90+VVhyxw#HfOB_3!CdwDT+t=q;Jb67|@Ee>^v@#p|} zVHdVsN#Jhw!b}_FuLz+O9{KHOR(q_q+C!lBP+#=7$r@0Ux|**a|IANH51KGhk^4(~ z1vYcX?!`o{53sr|(s^&wIuNxMzbo)Um`*L3o;-cu^{C|AWp{AZqk)0vRra*AeVOUy zoDJff9L7q%S-nhk=kf}q=*mIdh86f=bxpi_X?(|}fH86N4)USi)r zb*k6&D|{du*cnE+>fN%y^8tWErX1v)Eamdf;ad_#VXDWnayp=)S|pdyeWDsUc{p3Y zHCW2^Es^{4%iHit38Oqz0&S&M(nrXjEe){OVt~6mH6}%t5Hf6brD zTEps3erK));?kg#K53Dr+gxKCG4&c<7%=RtkHc>-&*$3Q>AOUg-awJwz$Cr0=LArt z0F(2zc+3b!)r1g~>XHVM)x-R`x|7v_S21A3&vJ9wK0!~F8l1ZOFKxXl_MDJ1ZvG&; z{h+oEWu6wb#0Cr{%6XvGM{o8V`uvS^Il&J=WN4j0MXf~@idxvGy__PI{b>&aC;$6& zSU;9x-#r$D*)Az^LPWb=@;uo8-Q8u8r!}qVLO9h=`$fLvTK^+gsM0Ev& zf$S!m3O!Yzr`gw*?nAx%`!*UVa}ZLkJ?U6r6^nGna|yf%=?go91((KKHZF&F8-QJjfoK&qMV&%f2+9v-&x4-Rx`gIaS+>eU=WQ zhlI3|e6>nOtr-f%gSO-Z$@A&58j?}~frf4sXP6pW-%ZC@S=$b))xr-S-usT>Uj2pq1;^Jx7e3QI?Q1YaSZ3btvEmGH}|7&@FuiNNA zz!f!;gL9!WQ+H~8C*2l?iY=_N6hp_R&Sw8t;i-VcMHO*@BZTz`Z>vg5YNOEWOKpVJ zr0z`YDL<{BzpYQ4=cAJIHnYCbX!M|E+6%&_1a(6)diS8p9+KW@tHYsXXBS7;kJY?X zd4gRUilv>??|ryypkg4Xlr%sMSR1GylDoo(G__enBov5TM98l2P4%3-dnlNVM_9?4 z65>i~^Z{i+Uy$?f!)%9uNEDaemluULH@KhUu(rp-=R(!N=&> zQQ#2=GE{sp6zBkz7#Brkr>n^%yNieA=`AI1FD=(A)Stw9MdPP(p~J!rd3|okd}yRC zpIP@J-lb81+&nR-CZM>HE9Ua#2p8b@{~}PHtk+j%e2bnp3l+ZPUnY-Nlc$5nEbzOt zmmc<_$L%g3mA?)0Z|fi1{h_&NheINF(CQY+^ZN1eh0nMRVu6^~eRPAgKS7kS4#h`- zItj%h%GE%MW$}v^&;$LwyPVI##haZZqn#u>6KcOc)x_$s0VrVZ)%j~}4m?rZB0mH^^H)*Dx0a`Bi1U|UDz!m~&Iy5CPK#`}e)_ywUmeA^$>WtP z2Ul1adfeJ>^?+ zk`mPMqD;DYa@)dtn^`+7Mn+>3*!D(Dy;0lVUTLf;ZHOdMHuC)*3Wl~o2H-gdtqOYd zPd5ZBZA}6;1{TZ~FAByhw8P6*bFne}Le{~Y(ODo{XMv5q*@`?SuMWO{DlErX9NPXW z9t`%U(=H!xcZLI^gq;f~@vlfTSWHcX9E#MzAVI?N+_#k=*{Uk`josOracpM2t?k5~ zu{&G+?d**O-Cb2nfUT=n59-{M`My{$mC+7rhPlPn|Ihqus7M{r0l^ zGd~RWe_vqRxe(nX-1lk~=eObvSNY$b`$bsHeAM+(dC)@kAaA9atQC)`y8G9nZ=Q9(RZly-CLt1d=DUy=vCRwXUuH;7&&jQGGE!+5LMn|Kw1xpveL|R zDkd+DOQAvNs?D(Tx#nlLJY6BUL|vgi!BF`0`LO-E-fV@O%RQq-zTOz}Y=>Hv63V#G zs5t#ParB7`94r)9Le|~uhs^CH(IVd*Py6RwrIHa^J!9>7w_j`9(4MDAZ;(A^Kh+sl zI`gy7Ki3&jIy>)4YUh()P%66~MiAz{^`to0dm%PvrWL z=g&VyJ)!_XvrX1Gb{&eUq8pP*&~#g52^yu#*)+~ZtF(F2TfkfZtpDtDi|~@a#&WSs z%LU(DJ)Z^>xML}XI$XqAOS$OQzbj;=fxpsDG0ky?^q1PH#$aKOox+_|5;3Gop*M86 zUZ99}Pvw}#P8Tk!@Ce{~H@aA0JrxoZ(IBmzc!>H!1BO8pEGBmAYWzb}Xi&5~%ROh; zw#M9ADcS473DyWFx`pWqfyLRwLYAysdXofNH>L4^7I|G5hF_f z$Q!NsZ`_wzRHtLodr4+?lSh*JPHjbst3n3k6uE=pd6kT6svX{5B(&NfjQ(no(1#0P zA`x_wYOboC)s;D6Wz@s~ILiy$rIoE^^dhH%IvT?JxKdJm()j#+97%9y1VDPT1Q@^qqp(S z%2XTU$~(b>H{a>W`XsTam@A6Y#lO!dGm+K~+y*((^m=ihRT*)i4GD4vtHEF*($USK zjc`!qAT1JQf}wPaOpfVv_Gu7JCeU`suTnCCTM%bHTP!2s5R`BN4x`)oIFTtMucy%@ zOK)c%W9Wcfgol&aY6K=Bc1E+w{3Zdjn1qgi?$d1X5j==UoVEnxAo4#(cMGgT;)jwj$%{B*cIugxn0L9cvKgIDpi^Y-FGM`%!1j`I1)qppA{(BD=a^{Sp zTagqvnU0d7NCF6L>LbTapTbJz<56}4r6m^mIV%yF4bo(kMAK{;N6^q7BkaH>5{V*E zHYSi#Zf}RP+xaYA!fiBioz-*{FFr-kM#UBFvupq zu+WFnFN2W@N;f`9fHqMCih=Wq>v5ccMT*1aImt9#M$@Gw zlU!fO6kLn3vxqD_F)bY*IJj`@;9@vS?=3?MQFUiF28#}JrqODdOjaovA;Lq8l*c01 zV2PncW>T=$_|70&ED{T&$DG^yVLVAzaJh6HxSJN1hdMU)jhyY9Rg~m8>3>8Wk7Np_ z7815Qy5_1sSj5p11|pVu!z$-z<<~vpq|-Qlh`|Gq+PPSbn!5Cc#+1LO<<42QNtVV_24rH{(dx{Th63}!>yyZSNK~bPLQVaiG_9aaLoiekIS7= zw3x>uJBN#1XE_sge>To|JaTU|7drP4k)gChTdynHuJU02r?!l!io4vo?8f~H!Lk2^8$-?2oL{;z z)Eq1@Z4CLu4~^Fs8~IABq}Lr|Gpyd=_NkIPgL>JQw<%T6I}ViOPeEv`-Rk)+(O^4ruHKIec0fZtDmyUtA=!bwx?n~&<>9<2zdMS@ z(P{##ULpo!Ev03^jj5rWCAgFDvIH8qZJ-qzOyU$+qLA@vmMlIbmapMmD1!$c^&7=D zpip~WQR@QyKI*J?3hn}{HNwEHTx0$0?l9@%*1`I;mZ?y<-_H;0Q+1VHk?diS`Co>m zb*zD8Hm&6O`^#x8vrB6=%AdFU-@a^jIS+hK-?V0Oe|z?FI=3^}8RGidX0^v-@bzXh zKkR>OtCsq6-#NTIH#BpyJ)V?^lm`Xh%MOn9n+<^Lw~4dYfc@fhkfv^eovlU|n*vst zp6yE~5B)YCCW47NWlRSRxHT1wn6977p!Bh>`0(|}&FVG(^S+BM;romCKkz^CE`Q2J zdWja2YJB3;u;cniZe)GfU_EozkHszF$BW_=BD=_MH~dd?0>ud$x_mO6-khsPcGER% z)s5{zW|sPAD7aTZ+=iZ+*u|-iLoRMT90j0;yujw3s^HQMIZ3K$SS1vY-oNYQ=U1Fq51J_!4%CkWjlK^1_VE-JR_hyykE#JGNVi`Y2|@{~+9y;+6vo8sM0Q^49x zL76^Lm^jVQHjr+^%3w%aWAgwtRIQrHy2M4aRD1A1vb!F~?8!shg>;+TXUOevO$S@= z##}|_+I^1lGIFj{^Z5}^g-mF66~uIL7U4F|su&42^Us$<9x1;z&-7Fin>+56MCGRP zquZmQ0G(6YbRH?y-cgwoI8W<8^V|Jr1t#cNO> zhkX7yO5!D4M+0ZDh~rTtPF+RQM+W7!peGKjh{FF0x!cpNO5aaBJW)ahA;B(`@;zs2Z=4GIu7a$ zv#7X)EyJu%;9A!kxU+iV{_&{5_W#UXO?%rm5N2_yjua&y>?Y6$~iFdy#>fI(kBCI-%}5)^%Kj(Wwhdb9BH z?tU}AV#Rzpi}ex*c}rDP9<97(_2f-^!tQxzngr>JBiJMiWDtv6XO(rYGs}FuoX+RV zwIsSv=S6+f4tG=>g=_IbqI!T3-hPo(!ZR$6qrddfZvW=uO+>$$Tb-lp#r*!>1uMnl z5-)EHBjCd9$<>#KV`mla?^91ySE3`hvH9hYnJTlU-FnBqWx6_RO!us)SCDjiMgxxI z_Aw=Gkpb(pePa_6XLY?oEu^&hP0EooSrcc>b`-`YhKaZ(RrF{+n|?pYa@H9^H}H(x zPswPrjMNW)IJ-yf%O2W^*rjPx118fi=kv#_+my?#pl+bbZ2o6b17bjyoB{cJ5Z{!c zkz%GQz7^L!3*NnP9`$iHPAP900hu87E~ScVB|yc6{g70{fwmAfpCz?TP-C#DQ}-$v z@uDJBtq{)Py%;BTcZ{F`$?Qo|VF5LB>zOb5h<}0wgR>!dQRrA9Km#Y&NWe$ zz`vT$7lQ#d)CZGUR^!Q4O5~Gkk`z#C5E{Ylo1|bBVVSb|RZ_HC$B04^yN*3uL5%+! zBD&i>{~kGN@&PXNMrAl`UsG0BJIbdOaVJCGW#N_|EYbOpv2~1 zl45=UfJG6zTJ_mXZ1snC^>R@wBVLJF8!YWr(aOq2m8;x6h=7d00(bOp!@we!6< z;RoP$0;bK)FKw6#Vnv00-9y{weXFyr4UsbJup-6K4QqRzl;Z+uJ0P6U89Goxn$GqK zvZcktq$@O4_V{MLI9rbIlIHwbo%26L0$YO%Ce8(?gW--h3>1tJdz^IO7@BDNKB;?# zRHl$NPZ?8b)eM>)z+ToT5fZsHNS7LA|DDv&19Wjn`tPK)H|Bv8;{5#EL9Uqb&EY3X zvecWZwTVfmCx)52R-5}Tn=gk)C+I1dK4jusQU$g{I%}Q}8n%)KPcyzOANMVsTBM;A zwOZYdXHRviz+}Et1uk@79V|$y9T1Q>#Pl^KZOK9NGW%-}?ZjH8+tP>!*yaXIOEa4% z-P5G7d#8n6q_YtXpTrfhzu2Urh3RqU@Fq!-K6q-T?acNN??6tC&`Q?39Bb(rPB=hZKl4d%fl&dwl4|BOQB!hW70V(sEDm>~Znct?NUzH<;8nKoBRi&HtA&W;e}XsJ@+? zWb9fYtReRIq=po?ftdYIAMH;l*rwsT&c@T5^tqfO0EhHoW^6h~LJfy!;iz$#;juiD z9H371fo5l^&Wbu`XB~GqB{%G73MY|ojxOpqM2hP|>oObm?D+kvIPZtk_x8i_`RlXz z5ixaia%#^;Z-2MvrypPbI$%zuC|?XD?CA&Voh9CvCB?0z(YtpaPs++6RT<48Q;xO%aDdywrF zkor`qVGyK=O6qdmcoH?^02zhmHcyCwct(oX?#B1kz}C+)6$ZPoUa`wiSdQKsb<~(x z7PfA+1PD^Q`4N2E{IsaBDQwZnX{iZ8x3k)a(fZx#tI?a$>sNa+Mtf+rNHSBT-Om0pxmj+Dae$Q3tauoy zk}_lLII3-(%aj?hpQGARXq(xasJ0y1DtjBHwt-y;=z`fvR9gjYwfz#+Rzh28|BPx2 zhr^7r(>OEb2xv8cQyNFy=|w$l4YU>ZDr&ZH(ZfOMyQqFO^h@n!RKE}&7;UfH9gnwC zQl+Jy;wV@Wr@KfFug-N+!+HHW+x|sWx^URm5Ht*dG>1?@f|j=@%kSUklSTX>yhtYF za6yf;=-Mx16gI zUpN$9WU#KUC(G`9(w0%-TEly>jF!v{Y+RI1g_@)~$^vt(DRj(=+R<@NgKMIb6e8e; zcyCshm#W{*ugBA-!HnFcEaW=m_Bs_(ZS0zhxd^d;+QA(*$jUnPV+^yOS7h-gg1~#m zoCF-!NBV}>!=}pK58LZ1mf>0Tk^hW*k#z@|8OoQPaf@2?jTZLC9$Zi6q` zO70`82(6jnT-WzOt9f7nmNj>rKy1uXpzhZ7-`#R>JLy~P_`z~CK|<9$H!eELJNsiI zNI)D57_dNAEZAClpHKWa%NO5I?^ihH=Pqf{&+kgX1iBWvuh{_`iO$!D5Q^d<+3Py};`!+og%fKTrWiOu=9P9}jgsg3i zHq7>GHBKGm*Kp}GRMIGjX0-iZTqp#%iwZmMYkW9#1t8H#a|koF6^=;YZ1&Vb6*fiz zJaMM<#^*F(8gBLT^>1Rw6dLA|hEIdx5ji*ne=e|nrv?j}E7KTLkQ$sd*_gq#$GBAutBtF%v< zq--7TK<6lghH#r^vDgd}7|htOiJ}LHcr&`;Hq7wFd_EoLv!6YG3Y)Zo=rq%QcLjlf zi|Wtf%q3t}M(o0;kcjE2{bTi$Akn`F8--Ay^O-kHmqvhHm-ap`+-Wr)C|`h9NelP_ zRydUX;s-Rb0wP*%TBZSjmMi;vA`B^E6^*gCNvvnIi4_9ur)CGpqX`a?lv2ap1aJLj z3$#L>RO@VDhe;ebg*a1ado^5ie&lbOs}1s`*ub2|ZXhDTon@IfhnRtT;aPV=p=$}7 zPK$t=ip-lTFn}Vc6Y$>PYcvY8u^a?hWvP;Q9Gs*k6{rdeGhrE=wHSsrcfuT@fyu<5 zc&3nR65M`B4>mJcMrORR7Q}K6koMc`W-JH16U<)u+%^NZ&Fwrrc#s69z;#^0QX0U8 z)bz)idkcmH4KTF^3&6GX%{Dc8!ki`DihZ(@Thq-+k6TM1|jHs}9VILc$>kR;1P>sGMm@WnQ!rYR?Q^tbKpq~Hg~`LDOaqg*u&mr~lE7+d zF6_u>&LLD0)V}YUkK!`vd>XJ?Kps*X9+||1D8VRU$7yUY>e1nldcrQv_3ulo8_*W8qvivlZOm38Oh`-LR-(!PlsWhQ_#;~U432zo z8kxP&09gsQUwo(mvP_)!7rYGYS;02Di!CSrn70sch*6s!Q_x;I>wriI7QpOfKL>17 z018t)@}vgrau`ihp)dw0OcC21SJOJqWo;{=L~0z1eF8HT82&6^U#a7erOG&1CUqFg z6qtnqUzKIP0|NqFhZe-1?jgb6yCro}s3E(cH_D&AVvtL9X!+lXkT3%ztXTiSon~W* zU8L~91Igilhbb=n3=DZYg}AA6(4o}*6B@AR3L>H_G#9uN1|~sE>EE#iL&n*rm|N2q zf=Ur(ry&Of_CB7W0rU|6X+i^LgE|}R3GGz|p#tM}nZ(oz1qdmttbdr-f(o04vDi%& zNb^xYLX7KLebQuL&;(^kp|(v8Y^g#~uk zwTn;RB(lG7#@+~SuLdmuTuX)#OW3C{gZF-mQ1N2aM5KUIl#KGH61LBc2)N$3pAI;T ziKhVdz(Y$B`6Z!1l{1jx=yq+OHEG*jivrEF%8_xG%6byza|+8oGo^|wl@d9^emw&gp0ZDWtzx6Hnk7V z#7O1a@(@s3Kyzc?B|>s=0G3eur>|p>U!m;B-JeJex=Gl^Ttwu7%VBkVvJkgk<2ogt{RKy^0uGFX}z$CkRs zB2^z*piG=kX3OF)C96D@e1ZVo(bs(XI6l4E{M#8oa@x=`NLb31Aq;N|dpxp25zj9o z#{97Ur*kzL&FY0QN9UuH^VhFR(;eBElcQ&!j^BRls7>C{I4etwuX_)X1{x?0<)6;S ze=Q#uW9RcPC$l7;p}A_HrBV#c6c6i~fWU}=xGlZ|kY*td&;bPlBm+*P#CHHzS~5FM z-vI=K%){5j4MEWPflZkp+zy}j2g zDQioFpCVBVoTzRsRNTTfwM7f8r4})?R-F0+X@U9E+(WB)DIuIR4wHi#LejOHXw}z6{*dZU&mAb~av2^6BL7jUV3;oZsC4y`GNm#ivW>YyL%VdT$^J%83UQJlJ?tluTqhxGNn@!x?|naBEGL`C zKYUBM=A?hkioNdc;>1eSew1W%=qc-qwp95}=h(G^u6r&fh0KHjxhlODDa>U@4Tmnk z+ZdIcL6Js8fRi;QNVNuxHhx$DP3lt#!Ny0(;GvcV;$gWM=XXDymH+ff83(bbGL}tL zQkw~Z*n3rdH$=0uNX_1q7miIjVwe7;V^GU(j&Xp)^~Hwg7ZHPMWEFS&s@aV@1%}(J zA*S7F=diQAKvpFgTWG7@!EU?9*3(IiRE8uV{Cix0 z+@cDWmXK&|m!ezSSM%L>j2X;a5A+5F(R%UumcKF3L+u!btrHk2((Q#y?p*B69ts_1 z`}vU~76|KAXkeKvd+h>#0)iTni7w!`3P|df0$X+lByNRCq^fqny@tHRk}dwT7wI)* zP-=*HWWSU*8!KomLS-Oa&1FBd7l6tM>077jBa7wi%lT~eeosCvzUj2~I6Q^J>&(Pa z(KV*^NrQSs!}9T6>W!yQ6x4YoG~55Zse&Y!J6gMvJ{rwFpS_+f7vFz=-rEd22HQya z;JLKIN9YQ!-4Yg1Y58LBb%G9QyeHLJrIy<|h9um_J4fVdKAk#s{%Le~_qZ%@e(}R+ zYe?E9at$$%Fk*Q?$I;*u)Z-Ye3U_3O-Q8A;GZrGHovhJBup`T3ltX!dmY$BbT#wA~_tIYW z{hs3Q%gdInzMyAUX5$T3a?}_0KG8QJ*QOgWKNQ0tEF>|~q7*#PHiObK-QQine5h)4 z0NTj5vzC>S!3Lm#_4|HZ8fFL}uIjwbfmVw)lGt#Imax8x0gUe&4zxXR50r3!iCcKC zfp8L#+&d5xOoItvi9h>AV;FYe0$T?a8-y17DzXc zL7?xVvUFVx^8Ym;Ez)Mc;5`E(vOz;=2W8QN0oTV($YAzbSTLo6H^p-=y5JIo+yJ0f z3k1dj^DE~!dXwZ12n7I z8HfSrU3MeN%7OdgQNqPhL};Lhuq;YM-pn5t@do6nj7`IlYk1a&sBDnsJFKDJ8ZKBX zwQ_G^3$HN1lGwjppm4vb6X1p9z(_$ z4vATMp<-HM&S+hhH?SpcT!<0^g?OpB!0FB8>p0aq9oPksh6?~hp>%2+@DvWXIUPV_ z3dO6}N1%|bA72e@i6X6py$)}Q*j(`#FN)Y)u^2CkkWB?cHX5Z2qw_@--E7O#I>{gM z7vD}ret$pxzWV>xfiv%J?s|;tgL>aFqw70kvz)I!RUgVbM@P5$!|luY^|<=5`XY!ZTPl&4=`Rpi-uHwDU2bV zgh6QyjU*hz6!7i3uMiL8q3Z{JTAMCgvuauCphgU=`EI^%Z5xX>?V%N7ZY_E@K{TRX zExV4HGtsKv<#nT1wH#QHeoQ<^E&wd0clm@Hnj_TptBv&Fwf1*LaDM zed3_KmMLg9`e-q}pXOKN(d=gasW@fVKAYpkBL5z^8>!)1DlsB$$SCnD0hj2AEt3I!`aT@c$KErlF4tfQ6F^whpdH-oRUpeDw&UO7 zTXNXaZqlaX1#<O>5;kr zqgAbo%qB7&Bw3Rj>FhgUt+rE<3JU^3YK?i82v(afVW0|vbk26Mi4A` zx)65L6G3H4VRkiQ-p2Dy7@zcftSO(eJ0DvbN%z9Iwhe`;tb)S|SD6wy)?T=d-s1c4 zM!Q^HDfbGtGAY1iT;ing+aM-mE~Q?9cLZbqd_LB$WI=)Ev0qOb(91m&8Y0tz`vn-Vy4wCafjp=q?rL zaz7o)v@~9&*Ct>n0!vM#_DHX56ZrZ5C_r@=6tGiSAm1|w}N49l{2R==I8VltQ-3RnFOy1C7>=BXVn_x?Yg z^wC}*z}UO!c-O=2oo|#eRMyt(42I@ES_A&{7Og#DCH_7ePtbY;E;PFx`?DKwrd_vx zd5JbL2Y_)o>`bTrq%+c17*Fwj2&^~u2K~{j(;b2V+{6S@Ss4km3}EzjMn48Q3uVx%dEu72csWaWn=Fz z^uPvI@8ZX)BeQ0$%*%nRoOk{j4lb`|{KuYQcjnaY~ zc#sAgyuTC2YJ^Cf6#{yb%tX2Xg#FvW?5bfB#^ly35_D?d8Zu2d{3iJ-NIJD!^sdn3 zt1xRoiwM-*?U<2+9%-sNTsDaR+$ps6XxzlwO78Ox-$QGU0`1MNyneq;^5NJC6gLrB zh!1ewBxiPk#uDdjlIT#^(lP%0sz1cTDznBnv&OJWL<*6;8}CPhG#UWSwBNb(It^gM zO+(d%cQe4FGP7Dt(QJ8$rRU>YJVb~TA{zJ%A-goM5t2 g``K`WG(;&2m(RW`)p zAAN5&=ru?XMG?j|O4(deu%du=f1rdm04Hf`?CXK&jXiC^1_od%XMn$TYdsLXPER{) z2TcSBF#Udm@7-~$QNG!bq0o-w8?O!63Ru?5W|ISQcLt;w3RjK82rJ{ z%%x1n@0PVDsST+}Z5pkTQLF9bUVfN4piSazrz>c2!2s`#udnqe@Vmot?|b>C1S{Ps z-99d|uG!Q=JtOCWtHD$;Kd#*>JFY(kD%Mb*?av>1h5*zQqFkEIo|EVXY%nNM{lGZ- z;XVb*Do`Q)@I<`YfLG$LPQ+`rok*qq84t}I^as3AQ2*gHx&ilJDYO0VNvJANg@G#D zU!I66@Hxr-e@`}5AR2;kc+yXSGNP9)HY@)sxaZ7^bLUV*7Vq7Rw|9?a;; zGyr&&j{p2wCwV|!R?4c6oYWl=z}W!wC)kO`y8?Bks8H=+csht&z_Psh;&THHfIA$q2`T>zZv}KOpJB<&3GM02(Ea?<_1&Bml zzjGqJf>w_v{Ot2%SP&t!= z+Ez?d7AUV#(+6LXfbjkfBg*9aG0MQDMn+x#v62V_E#VthOiws}wd&r6-Pe@vC?i5$ zNJJ(}(WpZ@HhesVapC`N)jd=M75;rIA`%ke{#`2~0uo`ZJi^WEg!yl6IDs#SF;4wW zDjR;$H)TNb8WzJq%s?IgJbD2T~~I5PT{q)i0m976t|rA?ryC=(ndYCH3REN~tfTW5X*_6fzHL%bD`MYBnm1^4qqHycMS}uQrc3dm zz*9w2*f4qdxAX8TSl%ZUM9gOuvN}p|z_xjZMz^2t`i`5ZNgZ@OI4?I*;e0IB)+CO8 z&383^o4b@#TG7-wD9EXUnq#d^@rsArNCVFDBGjCpyj!Y0Ip3|6X}61Ty`Jc?`Lg~B zS!qtzNvu29P^7yKkFKwET*$)mG|m6l@Uv;r1`gk^esj z05Bw1+`5mV7u_TsMC*$vzE1x775>Z*{dpAr{tBP6b3Sz*MPC3K=0sZBYcEG8y8t=K4#HZfrvSM3uM=H@8fV2PNLt{uWT|~RlXgYGQFHf-yY}s z&y!&DoR5b@BWCa`Onn=Kn6D6d7b7ms2a{kKenqD?)bqCQujrTL`^AZyPhDIq4xi@h zO&D*X=#YTfajx)_0$(Wknz4M>`$aWdvtj$er+Op@9@%PsLToC}_CLBXmD1_8cJ5Fc zAgQ4A1%_8DZ}@KbQ1x7pQfgNeE$_uQn3%l)uJ!HLe(s%>ggi5`-)z9zSm7K zkIPS%m?K%cWje>9(wvoAhRORRNt?syce#$1@Oy4uPPaEWqxk7tunO*Cq|=IN*C*&oI_+i%mmpQe=lsR_O~&2Eycy z`SPQ$<};D1DSIEn{8Cx>(OX3UeMdNFyPu#;(v1K8w04Jpr8Nb=lrJ`*M)4VF(jtD3i8YWWC;j2;(~4%k##4wx$8=%~SM z6oW|qWHEn7lI5(ab@Db~C$)iF%FIzI(m^kzAVosD96yM^jnk6@?K?#Rml8#)kyDf! zk;Di{6&fOwON)@H23%d0fh!0wE(ZYyAFEx7iq)=pLT;z8H8zO3Vi&~9(RLqTxq}B@ z5M!GtoY_v9!t14Bb}l5BsfyVjRaIq8x5%2NSZ`*{`UuKwvWuXYkNH8WP->mR4gMb7 z|Jv&i4-(Qj0ErU-7=uGnG@aw+*{hFA25ZW}{9=G%Qz~t<^=r7;>~(o`K$YZZ*30)n zkwQ87{n1a>qL!Ijclr;Fw21Rlv7gjFTICXC!^%-$;FmT^bh&FJxodWD4BPN1$fI=u z$TBPZ&r1K*?Bq8_JVzXXc#Z^!2hhpcZ-UR}uXWQ-=IkJ@9A>g0z_Ew}LI6+}aSoML z!59%+#*hXk9An@EuqCVkG81`#%;lU3o_Ueb;bNWhpGH1H%F+;EazZ|s9N|DjRVM({ zRmD+X_p?Y|lgZhTBnM;IZ+@5Ikn8 zQ~sCos%A!Ce*y-KPvlfp&Pf6Hr;dz=+)->~ECO4?nakQv8%$$rMQ@wc8!j-I2DtcY z%mx~1mkQP)`txK}b8eiiVnm$ne^ltfQ6B~KjL2qutBh|4K}~Rc$34m{1L>W-&K^C(J{r{KAye^4@%7B ziIm+FD(ou%OV}B;?o%1|GL`oD$KS9a2PZd$A2d=x(eH9`)n$M>_k(6@(PlpgtVP!! zwK4l4*-@KPUnqW6HBnrNFJ#NQ&DB7Nvw!;AJl|7ucdX$_TtRpD)wtsvC|`kIc}=ew z9cE%v=~r1yafD0|bQTB8^X7X`d~c~Hk&-Y~zGA6lPAokuS>A0x z7v+Y+2vI*ur1jebX3hWGy}5;1Ied$L*Ib(d_=ZYuqMr)*xNW0=FAqa*1{CI*`HCGC zVpH3-HksG0o1zMXs8WQh>8B=YaI1eknf-;uA5KyD1BMz7ip~bbqwJ(^zr$+6O(pLD z!M}DYB>%Hu{j$r74EHE7`zRyy;H-=ZcSKT<0ZsU47ZP#-A(<4GI1z_38)J24xf>8x zjsppk1lX(Ue%U;!Ua=dF)t@rkx_jS*>#Jb>T>Y&c9pFwrclfp_#?LP3*tM2-o30^P zw$`M|9y#A);myiSiay2Z9bt+%za@bzVy=0Ge9iYP5 zG??5&+YcT)ck8g}(Is=;d<&iRw=B#R=KU>;B6iJqho6(JGU9h^GN=ykeUu!&HN_A% z!P6|NJBg|XkW+^$XHHe~Z2Z;Ify40UM=WYK$cd1yIb($1Ei@36Rchmu`oX6`kl`+! z$_7tqA14quJyNLSnGUS+dvz*B%~Q=4Yh)jWPS$RFHYtozj%->unIo4hdpaM2*Y7A^ zJbcsM{OvIeOjh=7z01$OboJ52`&6*TH;Q%mA@%z<{V^z-`aKWFFp!MZG(qcU4tBPWug5 zXmvpqK`N9eogi{YIY;O%x?7j&jb@yug)2)LAnh5L=|Gf}XDMNV0VYT}6V#M{FJj_u z9=(R&&cnw*PlmhZ9~UW06#SexcZGlwSb*JfV5=A zD3aT8_@FbPhxLA)r!8|N9ZubOeE-~fBx$}_3R>g)Fjyj)Ds@+(Ql_S>;P-NUtADzR z;4nSy=d|9JzT8XLUuaP`%67Jc@39sc}b}Z?!&t=QhMb`1J zFivv0ar>lA%7oN54ZK)Hzmt8ec5J2a+iS6u$<74d3?cV5dC+@`4PMl*q-81Lc zUwwcnNWdj$HfQEc{7R)#)mv4PkaVElz!TcdW13!jkjB4S1N-zw-{1#F<`4& zE}d(ht9;X%Rk6_1nlV&uRO$1r3jOCQt+LdEQrGo%e^_tMHha!MkpAExWoxwIL?6z} zgED13?6%Jjk23Vj0gqMD@F*L=t1nH{h6b4lPNnKT;t20V6lKD%`^U4T3t3br{U4Bx z8QsO3jY(cjJV!EjPqQVD{9Zo2eAp>G?^vhm-1_{)+O2i=FO?#^9;dF%?;4f)xpG!< z;n(tX;@?97VXKr&{yyxMgU9vV&(+x@j>?%`KfP>L#cKKRfqFkO^KrG6@%{WF&LmmW z&2s&$UF*aA#EjlX>*e!7uN?e4%|_vyvaWbhn<;0TGX+W9F}43d9>>%(d%r6~8Erq3 zk~4m+TRv7Jc*Yq%oI6WrHRkp&PAO%L1?jt`e@IGS-52Ux z%5$yONOie+UCBzeYv1DS$>e(9;%>QstM<5k+S&z$x1`hec+<51F|d#^7DPj3}B_P4ssk5OoT^-KT03?yQ0 z10^+7+R=9lD31V?iKR`iJ`k9QdmE?+psu*H^JqptBfD{rr+I9Iqd+)c{IG!r0P2aA z4U_>W6^}O15I_U*(Bqq|w)l_`;#}pkq?n7VEWb@=Vm?cf0*m&EGfC#x5>`xS`C^U) zQngh&jpu`FF;234fpPR!ijEB-vEl#X`00;nl7Zt4%6aB z$l3XlU}bd~)rLOGvmu&9T}Qc+$OlP05nqx~GLPpep4WI~48tTIYLl0W8fNiih-YFg z!ZaC*lFn_V2-RcQ+QXB}Sy~7^Uua_X9b>@aHp$RdL0Cz&<9sohTTCpE8qR~(5wCr9 zmVQZQXtJem$<~5xxnbJ@-lE(v)N^r}#ernAAdt+1imj5ey3 z^D&BrRu`Fm|7h@%2~(lpqEFBYcEgJ82U%XoR)+cF z5}zZ;>T85o+ytg z;xF-Jf@hM@v6x6##-21w#5I=VWI+gWM10Ck)oOW}uPsLLOa{A2V&%+k#LYxn<`RVK zdSoOW_cm5eEcx7mS>1N7s6z>wx58FIS|>7+jK*V&YB6k>qm>k1=+v=ShT;4Yt38)h zg;FeK9im+|a;~Hqf0G$~J{3ygXr}i)XMUR&b9>kE924cw$XJ_IS}~1h1)8m0uZq2y z^i<2p%R^Y5qxsX-lcEcsBF0Y(^>lcsOLOpb)t%ltk^k6iR(FSs^y%qUe}K{WXkR*^ z+ilQUTHuGk^$=`|8LAFlUuKI$q!ud}q^d1#YH!bPIGaVCCJC6Dx*cXaXj|fyE#1a* zyw3z~P01FNO4S)bSbErJI1z#5ibk=w6$nMk9JLZjyV{*PWiDt#gT$qcn%!Pe%#=V< za*G0pssrV^2(j{V3alX=Pc7Iea*k@fN|S7OM%^9yb@FPJqYcPeHg3Ik(D~8{+`G97o9%=&d&WN4q0{NPsnV3QI{U$IGXTxJSGDOXZh z6iyQMB~N7~F^^|+MPPFo!qG8_nPM%STqT7~?dz3BliP3r4V$iLl@|HjbctpSVv3() zlHa1qHK_8RSw29QS)5m;>luXVY5o6aAt&#f)p|gv?gs#DDnq4CsnPmjr8k|E%2402 z-^`J`NE^Ip>AbEN!Bty~JnE zFrM95t=PE6)~$9ZBmXU(+HLK~WX_Z%&|t*sLs4b;R{DpGdV1uJMamE;F@S7Ee>OBXUxD zlT9Jx2Hd28HmlKIwcRvbjHfp#ehQ*GhdOhUiMWw*#5WBn%0y2})ZQ;c^9QSQEW0v@ zgssggkqq%0WV}kZ%{J&&GDAl*nW5& z>=u7L&(UET?ON@sXxmfFbTo5UiGr|R>VIo^$R|i)LPGm5#XF| zS({Rkv}(3GhG6=L_A>g$AJ?0Hdc~ z=V2~s(37il)YlRREd|u68SylzXL zItyIwjG89w1}+mZlewKabmr9bY>VYiZN%q|{CKj|%H|q|L%PdETWJEv&|=eRKKeYAMsSRQbL4xKFAO9R_asWb7x(}zspC3PCvwK|^bB+r#ZM#KQqxLm z?+kEQf$14Cdw@)oPpIH!-^y__#vU3tzzVJ5)rooge%*3`?F=XZRwBo(c-)+oIHN7F z?xD9w?KQw0b$Ia%Ag?kwKx=g?7*}R^S1t}qb?JI%=nr}QL{I3c(~hT)gfua(3eGBn zy3Bg_GnyzF&@f9s4UoEsv$#!?IqF-87BrA`)kGE~y}4RT8{}vt=wSuNb#;*?@s|XR zR14O<=Y(71QCr;^ek_4oCXT1X@~D5#1COPw*N+Ef%L zs_Yh!IyS#25ou@b+StWnitW+o<+_gD5YhKK~z`0{iCZR{ejuV9+jc>LpZN~39YPHs4?4HY=)BE}Vq9jQXO1sQV3CgUWbQ?Bz_8L00}^XU|wVMS4Ey$20sRmipryuQq*1u_*Fq_SQt4=SN;thqON5?1MhIx4iIHKD%} zKsU}D#Lir+2XkiDPSLIoqM1$3Mcau#x-aIOJQLJXgYO{E9=B8>!@}2rENmBO;eyDS z7hwRH(zUA-}j@xjXDGA0baI^LV`j~B26E|0_#cY}{K;QCr53FMtO`1qVq8==(&ar?fzhC)UI zi@S!Tq&|=|a{KNYI(;kBU+ahc^7qA``X5t$WAO8=dhVw4?k+9Sr|v(2`^AorwRU`Dg$nX|E~=uwM<6hOK+>n#(+|xYR!=XR{ zM>G(Q(T&6!Evg5BuDC+?7(gHs4``qdfuZ<;20|lu196WAHpWQB3hh=9=!N2cXzu{i z;YLgh&?X1RNCNSU9wYQe;)xBqN60zE7f)#AGrA`$|ua3Ez(Ic z6w`b*kF!%>h_(9-oU!@__By_rpZ?sh-8XfMUyk6kvKXQuebb32W z1~=$_+!`Y;lX!5Qpv_fM(&b{7$|25YNn9*u_|dUyb?d~nt!L-6JeDxG%Qo9${I`JaLZ(!XB9~R%jqBiy0Aj=rKZ3xhI~nzyS6b5%C)> zDy%iRD>i6RVUL`MCoGV_9+@k?qeX?KKa0dqbdL}iMi$-yMU7nX3k`&82Aqon8VE(@ zk$6Qb2lmLg_zT@5EE+izdvuSmEM}p2L<3=ujEOZG2swvQ@qiv96qSc!*IB_^6~_8O znG=s#aGMI=51{`?e%}_DZy{(YW7jM79@wgg`d-dp?R~fVKrTUxIKUcf$ zQ%~t_x~nw9WX5qKC2RwzqYv-oWgqLq#q0C>X?=0OUtj!K?hmhr_2y#zeAr*4&j&C6 z{@3d6FkZgECPHU@Ki^7O<$v#X3w~-w#>=0jj=JgU>gwA!lzT8)5kAQV^<#bOyXtvC z-I4AC*$UIGjJNk|Io|vFasRp@DH6_MBcj{Vuk@Ms1TCcrxvyI=QrHf~Hwqc-)=$!J z+X7%m!Cb1F87_A}&l&{txNe}>zHSORC0~}C&FUX0NcZex747OCs)xsH1teyK=Fw84 z>uVVs_6=p>9vsB=N1&yir&Izhk4!mji=Dd2C!ZiMgbg4xzW&U2`P+my!x3z z>+vwx$a1EYnn@`~FjXfcmalaqsOeABZ@4GraH{p7YV{*{)>abfCX(m->-EE9ixBlJ z|BH4VM#hikyY0*RZn?1*)>y#&QORpPeFkhE@4l5`Y}Fp=zcx^!o(}3W`cJ5?V0&D} z{`zIo>+No@-c22DpMS3YvC)E=0rSLU+YhjOZ)_%e{ki&GJ-%q)h_T&)dNi}yfSL+4 zxfoGebbwTaA;{aeLqLwe;NMFCkl~k90=%s5&yBue6zW#aO=rBQgzuM|!*I1ZEcfT6 z0K8%E>Um$#%BQscY2@n)qWJlbocirf8S{Mg^rDjf*IkuW?P^0nD#7$`-bZZ6k8Qv> ztlnI+2E zLR5Ouc6-0NuZ-|ba760CeJ8cHHfYmG@g%cIIVI`-EVm%Mn$z+6{%u&iO0kB;X`|>^ z$zrzAQi^TI7};$7Yqhf`TVlvo7LNa0J?qK;NGyu910SSPmb?4$_PY*C&~}g$Wk&R6 zyS|4SNmHak8kA#vr`Zm+p$InAHoAW;T_fst!qTSfqovW+S#ioU>@r-fUT)71*Ctk( zL*dpE81qYZkRwbZ@2?F6lz6Q_$aL*+F_-@{lO^2xX_fqaw|Y_J)!l^O)r5ZXd%E4% zZFG;t^L>6Ci{}wqt+9DgKqGM{O6;4hDTr|ahKpr4MmpAbwcjrvR^VT|m(P4~b&N~v z_mNdUq4+Ko^3Uo&k|2oS511An*))Mjs)o?1_MlVk%fsCx9J*de8koc4>+N$xWkId7 zkc#gpHG2T#D;c}vr$;z=w_AaI01m{`sOEh!YqbPGEg>m2{*I6}!iNa=Z9hr~)r;B+ z-M>Dqb`VS<*b{d>vp~CMA^CfC_o^3Im2%!4AW%#cxWM4K+pAUCEo*8u1k=cU@x32R zKO>u^yl$2q9V%`9CIr7>y>fd2b3b?6NtaLo6v_|%0fT}oYujKsZ0rr-zlE|yeNC{}n5;;?BZ zzV`|hK%t=1F;6_Soz6^5{d>rE%snOJAIE=PLGy%zj`QouH6O2!r z9IFO_-6E0t3!(l(u{@!LfI<0)_|eBUe~?pr^9SjfE<&N^V8=Y@2{vj4tfSlc`tIj! zwSV0lT9lk^0U?v1VX&O4&YHiM`Np&Qh6!SzeQ+IUJ2ew_3bt z6^9c04K&Z|s3h4-?8=`s$Q(%T`Bf|3G}VkfVF+aK#qzxlfDA5qpS~&h2@~JnX(e!h zm{j~fb=T6|HmF{yI2brM#6?BPeII*# zSd^Fil?({aLkf~ZlZRor5g1I8We;v4tevprs|h|Aek(#i!ijqAz3f7I;F?6T?n4Xs zNqDmAdj$0{O#ZY^H@y`a_RQfS{8o`8JI1U{1Ws#NRbm zm7}W`1#Pq&-i8e%#Jhsy?#qkT4eC<4-;KR$%!CT~(A z^!XQyr>FbO?GMQ?qFR9&4}yW|iSS@BGp4FS7pT~e^XKBPrmOYIDVZ_UNOz2mVqF9n z2tP>fwS&xwIsgRQmnAt%7l1c;DQfYgzyYJ3#rzM6WBEjYz4m?6g6!cRr5+exKT6V0 zAd-L)tUzF}0(Y+VHH*bn`wF5G@L`2(dHq?#1zHbQwbRLY zQh85V153Zs^Vct5(yf(jARa-eCmWWqinwlZp-12qV|W0YEP>=axIH|`q+ zSy+s*93<}L9+*BVJ0Zrn?1bp6{@R^=Y2b4jyj9DjxS-kDFs1(p%5XG+Cz@590Bl5=X3##qDC^o}t z1yK|p3#1W~$yE0d;CjUC8bFLJ1;5(t$}5lHu1C`kpgsaR76r-D5`((QtPchtY6MbQ zAYdOwRS8`OKXRTKy|x&(St9S-Zw5yLJ+Kcxr)dx{hRSM5CxprC$aFycUg0XJdlV*L z9d-~YZf->)`O{6&(b9(8$viN5XG>E~V9aP9f)irbu@mCfoWSI*7R}VH9wJLe5R(_j zz+lg48G1W{>PxDAOP^lSZNIJ!4$uw_-4ywSPCM>dY7>5tMR$&H12A@iB@64;t^uyO zd`mH=5VZ=$2L)&fX%H^8FTs`K94H=D)_FAM7Zak*4Zx`gaU?6Wqi}@`Ru~?$LdCja zTqx@JGInfOh#EV~>5)XRClQ zMipTJ1l5V}nI1VJ^85 zD#DgrK`B=F1L2do_&t;%WBhgtS|Ag!$`FBLcLu=XCT&U~O1G!W z&3d1H-)B&spBL+gi{e*(K~xhY^G3)xX}m}8l*Q=Vbn%dGZD7gdWwG6*2P~lX;oWPN z)9&&xc2<9^4xA}|D+9ZHmB;9E$Qcpy+W*z73{roYJY}&p0BHYy$l{Aeo?nXf!m71< z;~e!T^nm`vu^JJ1q|Jwu0WIi0)&swae2Htv(;-bQg9SkdMMMDNr)o^}z0 zih-9r9?e_m%!$HeHU17%i_p*u%Bg?6a8lS0iD>e4EPw}J z8_WeEIMKlE9ZXym2WVI4<_j=j3|N4syBKp8AI>FkPU^OWel2Y6x=_eQMV;NMI*w#2 zPDI(T_Tjb!&a0D4a1JPfRu0bmqo(a0E@3_7OggC~61FiL5BX2UvN& z$w264hZ@iON1}V!4bL}m#=D2}zZh=Bh(a73B&lAleC;uSv+bi&<2|}wtJ7;mP{2a+ zCbo4cT{?lMP{|yvAo{aw-~W2)SVvsnQ)<4b!;21wq0t@7n3vUUB;5v#bYY3bJoty{6M$s#DWO!vi3yX2PW^%_o_FI-JyN1 z{EhF)GrRW|+a4;mU4U(8hSPWTgaHq6KCU)}uQsRg`sH1hbiH$H(jY{ptCSeR{UtE`D5}&rLhn(hfCJPQu7zlf}b>xnBot zmmCpHw(0Zc@6suLnk=8v#kTmr3Lx$eE_b0n_U%=|~_nEPg|MCaAUuR;K{`IZ2Gf#@hALpRQ z{zSeiL!X{;(xhj^%VPTZ=MPhZKH0=8IYK+?bpN*vrjJA;fo%2m}oRUna=-Xc*&J z!FauYi3mO(PHwKFteyX(u&Oo}Pav7t(W;I^aef$biG@%*Y>3C`XeE`NBgJ z&IVB%RS8;aVs<6)doXK4YB^ME!V1G&{xDi7MmmoOmAUm|q5dCd}I-SclzVDcP9UUH;+8pSJM6Pen}JA%y~r3cOo z;FPaB_`2EFhm}^l>GR9}NA*(!r4wl(u|g_|6|eWXv)AFF#3w=6icfmS#0n8YUnN41 z=$Rz1105v}Dw3hlUy<;~TV>%qkPDYgG_O3yF{DU7_vVH7uLOHci9D^G3sH6StY>Ns zLAVlNu$&p!i{~`A1nYD?5ME2uc>X4W%Btj`+y*kgiFC|)(Z`SRWy8QMm(8!=|F~ZL z^_s>Hql$;btB5fFQ@;_Ub>|AmHJN-%f6UT>1Z+9Y$g9J8(_ST!Hz=Tc?Ge~>RZ~4F zur{?*$MCQkqeBQ4JFF9rf8Ujme0%6=vuHdU6he3DcC~m~{WpJ8!|COZ_2PN8{N;_| zkqoWkAR5%f2;OHQO!s0LB`j2zIRH`YZF%_H+l^JsO8QtKu9yCbyz9DM-nrG4i<0UwU!3wXOa;w}uV2oCbU4@rvOw2M!m9DW(4*Y)kL zg^E>*2u&<8n587YxL?}sIz=#rkXFlp%Yr5aVF(wF4CWcnqfj02mN$I!2{j`(+C7?~ z1|}Ghawd6YlSPX^its>E~gjHl_b$rlB_!b@^tH4D&my!=etcjm59fnBsh+C=B#TR^;TsCZ>-k?gOPpp+j zfscEZ+F^f1x+dzl3|A>?FGq_$+@?(dMw|U9XNmnucNHDBDYdI)C^Le9%qUYv zQKw|2FAymOl}N~umhDg5mSwD;O5O2|Y-RI&i2f^t#ha42+-926l=YTFzX;fZ0gQ6)wtcVw5Cz7SMeKRL*}hpm_ZG07;l{MKwG#KxKf z_u4gw@fs*%oJOfC>67e|h+WH_%<@;*8*wKnW&f5RZlKUU~beHe$||*w_e&#Z1OgyI-rzg z>cBj^I`|s&#)+p|(m){(c8($Qt6s$QdDjRKX$(QJVmw(hF4o~w*e0>#P$Mb0$ zPLW6(a6TbctWSu3yso=wo9=e$L(%3x-)x>*4IEc1`5rxcQ08a0vLH|cw1A`?TF+7J zPL?MP6q@@%u}9g4*>^<2Epnuy7s*isQEm64JfF#x2nC^)#e2o#4`YY~-~$HT6*>|u z1Rw|RHglg8iEm2Phu*@Lu zQ)yA*qt5BM^-jnaurFR@N5CrGslVlbXL>yH`~^Q(h`Zvh|R>G3|_BFAMQ!&^p`H+-`)~}Vl(hVz2lk$sGWCvB8!Aim$rS~AF1-!=( zAMO0O2Q1?1Y3ha)1_^*w$YlP@>U+A~6+=HPR;?%{0H^4&o+#z|_4z*Cx*GS&7G6uu zTrJ0lFESbaB&!&$Uq@x8Bs=YiIY$&09ymow6851^EQmB+--iU^<&OfCeq5a^^!l0} zQ?Ob8oo@H@P4nq!Yzq<1rK0ug*i2-6m=x;aXQX|%`j#GG(t^sQ)!cD#`^N?XQXra- z4&h~IJ~fim#+5i^MCxf5p=aIyNe~xy5IRn4bD`WRzvN(JNBd10#tewfv!~O?bgO7e z1mSs9U*3Df>ZG73JE46-mgbwVsr>)&SheM9)c^{-v)4M;(FvfOGPkfVjEapK)MC=P z{`|R*(iQ}OdtH$@HwSv~@pu;2@oi7Ed!@%CuT|h@_bznYq^@u5Ce&*#1-^6OldSDm zxv-`Yyu{dixCufFy?ySacUFWqs;zV`ToU%KTMZr!AK_g*<*=(ZqnL zZq?E^)SpHV8>+*dAnxax*509VGEh!mUoPxer=OS5ADU-oD-JzSHE)dKXH7ljm(jC; z*3sFKvMhKp5O2sabF59VPHFo90f(roFXSqMX2bY0qf>tyC*x&kqKbEuj?7hmcs660 zy-OlcW8O+^49MQ5%gy$ox>;}Xym%=;!^g2rQNa3AB**A5vPM>irN*Kgu>OSF7l+~^ z2@TiOX?37@pj9c>@4gGzednI_+(b4&x6j@P<_Q^qb={~ltgP92&?Q33=*!xZ^%$s0 zT5j;A#ZRqYFt0|BkRz_41=O*Tmz<-yzrVWtS$~SD=@@2&)>l``k<>U6q%0fhdpI(G z;jcm1ijT~vo>l6y-xO=55frz=LzlISmzQ+?Q2xka_dT^*ulD8q_*o-D2L~JX5^V8* z4%+2FU&igogi}SIfkg#5hvW1Dsiz+@qE`*Qib#&aNl-Wquho_+&@YklP4!m&*Ix(X z7fpTY`DgvRG4xaf=Ot*-&vE{=S$_MlL4yW|upN$YFah_d+TOoGLoSrF!kg!p#a3Rw zYd+1-qr(3$o(CO$U%c+WKCSLgf6c~y*ly&@1Qnn~vk!c0VUqrvJ0)X}!pUMQ4`xoA zcFF#+Jn|eF7I9$MY`?HK^H>PsIBnVY<3=Po*x?nsQvOIzdsY1Uy_8hrEBR4#{+vdE z!4Aca=Octad3|}Xll6_Bkw`XJ9x&^tEYOjWk$rvHL%%rbZK( zfF;YE$`zqA5QJe@ga*F3HJtFKHQYB)%ibGKI8GZ_dc(7MiD|kqo5Nd_wH{Yyq^~2h zFcEUtu;h#=$9ou8&jQ#7Nx@Dl_B{}w5u-1kbcqvSQG-VKXv z9_N$k`w#Qa$!vZbU;mm9>#nO-1L2uZt&sj4zJN2jfT=7Ftpe7Y>BVxyuo8ip^&~H% zb}9<`w(5}h&{qA%z-3r%Zrz(ZoH_`_PPZI}L>}C~+H9ZYZ8Hz*O^1#U*l-9+VJ-CV zUWju9U3fQribZIE!Wm3vpReayPix zr?;*!m;pv&bS$(lb$q+qtmhkti)^*uXy3b#af#-lSVSoDI|mh^Ouaht4w=rS&6_@@ z@(nq&ROWU2jjp2LCSZPX@bs`sN%Lx$_vvo8cubXrRC~%^6v|7pf5H^L2UD=*KA+-3 zwI5=Vet$`qMx|5Z_^>=&lF{*XxgSQ|79>)bqQ&FYcJnMntqpBBRdLCFvKX?gB4L_k z=s%^fI5$Blk0?ngu1?E14lGU_f6{P#*NLAN8qQow>P)R^!E?bi}~~tE-4#lf~Y+~Wt7JOPfPIg+q3wc zG`E*$^E0=b*|--@E^j`<8(EU;o7u;!tN3>(1j|Y@wV~*jD8|>b>FqpuAOD_F;axnN zk2nhxVc#rgx3_1X-KfE`6!+@g&Dp#nhAR=h77<;?WiI=-o7=(Di7d6h{&namJ~{t9 zS5b5%yp6j-P4`T5;(;U=llXdW$4Yq%8w@Y*LP@upxI)GNn$TIU!shX1yegE!tNCGG zy~dz^K6ZgTp&&=TttVxZ?wyd;hXHF9v5 zkW2*O-G-rOdS$4*)}f1giTZ93yYg!MuSFhn{v*EB7dqNmZj@)aGkqM~k=Jzp&u07W z^g7+|e@xfQ?TPU0JaIR@I3`|DqQ+9TVNWs=^--GH#sXfztlm!y%Hs6TKV1HE4r z`0b%las8O?cG>o7Ous*nOwwg_>7cX$=^NOtYizQ0zJJVm(3QRr>_*2nI56QRBpj2< zF~8BRoUOO6QJjv#Yr?AkToI}kS7QPc$Tq8LNIG7j&Uoz}CfT~!WaZn?yy?`4#PKk# zN#tcnTP?Gu&-h5yppy3 zs!=`iBA+AM>5<^t}SPR*6>WS*6=tX8cq7NDWaXg z_(8C0jGN=@jGHGPH~jrM-KENFVG)Q(B!g$tt|9`H1FT>zQ+FJ?8;X3fp};g49Bky8 zvBYoY8sOhz530R^mgPit>w;WNR~tv=ZVT8)-J!!N(ddiO8e87tF9J%$hTp$2 z$q(y_Wd?+#T@sO+{*xbBaEaAz;fp3!dfFbRKM|c~MX`Th7NJ_vHAPV`5y05GRK?0JCvbs%9UY@f`PHg4;b~)=~ygqmY>$V^n5fgXT>_* z3Szn42YhVpHZK%1AgE=4ZzX#MsG8)F`-|)uuLIN9ZQbD8KsPM1b%w~( z)twM^hxKH>&vvi0l`g*uYO+ITO1h^f!+bKse&(Buj=(nWQF^adU@qo}eR^C!f;lZ_ zo~lk5Sz!<)KVlS#@%ARnvdtRWVBi>;_EM~X|*&Vo1l<#7N31hUNB*&qU2|j zln#6!B*%u=K=ca4l!R@F%3ay`V-mGjpW>+*bQV7C#sm_ZZ!ThT`f7Y$Q=MhK)S!Fi>l~r z`BWEVNHnY+0kl*qN5V$AfTv``*IHOfIt2be;S5`KL8~T`yO`=j!PVnvvoe;vZp6UJ zdtXp;en)@usJhSZ{98D-S8mfqPYuThBKq3Y!$=e+RJ1 zEotzepN&kN>dM9dWL}i^LWLLTAlbK!w|Ia~%B%A2t)An&gSdqNx9Y5`u%($E(NK?z zA`%k5)4<7YP%HpgRfo?nzxNH;fqgM|Mvsof-oJjKyV_JuRMRSQjSI4wVky7!%{K9_ zF;>Riu#!jBxw*Oln_RMUHyiz>{de0~u12dbOZ^@=q{eiaT>q8C6YYi^Y|zHH@@^y8 zVE|x{XQSm(8@y?J7~M{mA4Z?p2EiD-bd6jQB83dDA<8c3q*-JSNTro8gkfIG!9(X> z#Y~P*pq{0v@GjJ9S8G>yxzAjXHp6RaO!~Z6Rxw#AcwFiU6vC6jhb>!)@E3?J60AT_Go3Ata$pFO$x%&N(KkTy2 z=WLUop4(5Dp1U?uym66!()!FL&kJlOmI%kIG5r?U3qMi2Ry7* zW?STdW&FDfV{#&;^??0zSskGg&r+$#O*Yt*zk*_Kt;18kC!0L#5~*{}HV)D(1y&dJ z@TQ{$%e3A{HGh$;K-0QJE8VCo(QH!(c&(Da4A>z!TrJmR4;r#-ab500;6YS$Q^q+8 zW{WW<0#h}9YfUtqH0(gW8BnKVWQO~hDpN_$2IQg(nwKa;@=nLG+jU9=di4>93o$ygu;c}kn!a_1f4~8 zC{E>?go?3VZ3-YEr<`h(38z(sO19OucSMgJ;Md?fqVLzr5qaQ%A6S9c8jOqvm(HeD zp}$I*9n&0(MlANlU!?N)kFjtc6TXNJ_rG-=leC3wcQ}<9S3-@S14Qm@D*Vu^iM3)~ z(yN0fIxkQLxFKC8vaBxAS0aneOR^`nz+d!}5wSr-tAmCEj*cx!buMOb!>tE>Q~x$o1%Xuq9nY<%vm%cZcUHR-d5Q z#Sl~^bUY$|9-J4WImN*>On5<%pINJAJvE1GOXN~6RiG@T7KSJ};>(Xb-30&Ew1+S| z^8zQ*bNbI1FWBYB7g(kcI|MhrgNn=RkF0-P23?vWxT@GhVVm+w0LUq@1}H~?oQ9Ts*~9ZxJrErG1k-tja%f@&f}%r-GB(u6jz-t z1QcgsaI1 zI0A#+da3cW<~m@_3R=#*%rQSF-1*Q5Og(f2riOM`=1eH6oOZv;bkDvxb$~?lfd|ToIOad4RuDmq;aLygUBZGm_N(07ZzWU`4l|oUgp4V}$j~b5XvqJ!;}F z@)x-(xcmy00dv3vZNR!!$u030=l;P{Y0}3HG!qyst2uJC-D0ha1h|pnBK;ha{;1<` zXugvakJ+lIOB9dmY8a|Q)9R$QEG@MpdtK5Mwhm69%r}#|cHkr|9Dh0HLV$nQOg;$oXJ{S3~wh0J|yv4`#K=fc$ATPf4waDib{6RrZNF$U3K#?Ou){f@)_h>T0 zGI{-7&(jZ0mYcF^?y{le^Ox8#O@C%LQ&^vziYgT#jYC>SMtE`i^z)ov>FpbsK# z^bF>2Q)+lPjdhBuT2KU9=`*y7S`Ww{S(FB@%Zkwror%~jUfQap@e>jqF3L22Hw1#7 zd9R53e7lS_mfMIaQ90nb=zw>vXDN_ru5=A>#wXcf-TbY8J~K3_>Re_29L0Qrar_oY z#L75pd^s_y1hh`0i6td{>3DKjj@NFZY&mXE&)pqTK5$zpu8TFdW75*&|FAZcs z#AwKJSGO?xeytfWbZW-eTY|;_l|)c->jcH-pU-B*wBMSb%9gptz_4Eoh3E zLjo-oP3uxykk+L>T^64~jzJNv^O}}RPx-jY9mhV)p+gvRHerw%C_c;7ktp5s#=Be8-1O0xm}{WOP#EkabT=;x2Pz_n%&CBXZ$F{H z2WR(cge80smZjbRd2 z1^Pl*KnrQE%VtDD87Py_Ql*JJWQU&iy7()$f9VEY*itYh5m>;>v96lm^KUJ+x2Rpm z)`Nb+%lIgss6`I5}V}NSv%+eJWfU4b6bb&^;7q(Y*Z2g z`Fd%hLMJ>cH&sg<4ak8th_bfDDXYm1ws}4`L^5uWj%pwo)wr1@MQ$z$qY)X!u1-Eg zXS}2?NPJ<30Xf_!p1YM`jgXd|YFdy>N}rKT-gIT$(oaW&ErJkO1VNH&otL+L$E^+^ zEbj*aFbq%=Gu69gVeZ5!a^9C$zE zBK^fGX>DPY&dtyP0@5*!!|`RCDGu0S2^<-R{Kpo-RV03KgZk!8-?xQH86|Svk7lI> zD+&KJakyVP%$^U2*)iUaK2MYQ_GYeK2j3jBTunc#j%JHBgu~_6 z;DwJ5K*QuPAwD0F16ph16d26X5SRnNX6tS_kY&n}Q0IRU#)a#dVx+`}1 zI^F7I(#Mra){aK4;hYv3^SkM7@?|ko$`x7l0E!qTr`pE)wYVY)_yu_?%T+R-fBrnW zotyy#S&EA?5p@l9i~5L;5NQP7JtrX=ks)42lNPFMu{u7I>mb$n z{!5%p=C@PrDiNu2joeyIPt3PHG=R6a)A1^vBPJOkE}3XI=aJ^d_}=}QcBOz+x}9rR z@JWTgrc3P_A*peZ6D%NVH8&^7CF@> zL1a3G2~}aOIt;YBs`r0H)%F@FnX^>iyV$CIEqrsq^?ne>&H z5BqKT#9SAsHZP~od$#lEQjRCkTt2-gm-;z%gce}K?wWtsdePfm&#Tw&oQSX8sWqub zl7@ZR-M4N!#2wWgB(ER02n>Z&Wyoszc>ptFa4sufPoK$b!AI>`k)}6J(&wuZp_ttvCJ}kbb=~jxar|#VOF!*=zH`bR0}~bY?ho>K2JJ3!JMJacT2dy z4e~St3_OFcg5z~bF!PiY>!1m_*Q&G9Bs+BC(a)_IK`at06nlnw5L(^D(PfmtH5yp` zetNY$U`U!anVPT&P_Optjqv%)ki= zY5hSes|D3*LB*)gvK=;G`-fGt6}z*Q*I`Z~VB z{fqk}L!WDdzz;1AouQhf?*Gh>kITPLX_;M@WVsWfN_sRdwp+Sz*O~S1h81-C z5*W|vQ?@KhWG-OSMbVrl#E?LIkM#1c308T-tR{E|$t__(-tv5BqKUQiY7Vt6F}j@E|(hSauY=i#6 z1)MT)mB|TxUtubzB^t}DW7qV+P7Oglf{vjAb?oJ+ zt^B*P*k|Q2&kp|$hn6}k6`6?8s}0&W@zX@TJ4oK+wrW_B>zFlzcvZ&c@AA5uV8N90 zJP!7){AkBC{W`#bG`QG6?W$@b3-;62u)0jl$_uSa-5nb)Lz*~&iR)FlZRIst%*i83 zWoa4Lw30Qg*+tE&jv2u^X7WQd*DhS$*>>S7mWeT{E^IbZPw@*!yIDtTH5((~Km@{M zlPFgSa19&Q2zpSqwNbWv8@6D>eow=ecEgqmOf3(!;l)JO5lt~#<6SWY^N!@|U32cI z1RVR)!rIfvx{dD}Vuh4z-#YV$;%8QprA_scug8C`?Y|5=GU^$cZtLzAaptbF}7Q)--=ijY~Rxfqp*5%v;>f@7z!D%fz5SXVaH>8 zkZM2DqYJ*O^$3w#byc6Q;IEDTnvpj9Uf}#&fTt2GPqRZx? zUWg9E4GcY;1;q5hgQ*i$=Gz(ZA{A-EHsRm40pNy4X4MJZy*9nc;cyfDW=obD?%q&T zt0p2c%7FQ5G1{GLB?> zqTaf*hiqjMagkf!=ufV3WFxG@YJonhb#Kn%>>;;0@bII#k{%jnhn8v^W-j2SfY%pP z68{`_6QI5sj|t{PTLfQzgYTu=$FwcB_ONKrS^sV4tRT390F07Xg(!8#dNA*Sm__iL zbZG$0jKDc#w}X_MP32a-SB!2D0+jvQI&a|&>$pSq{xv#P+rhT6{4oDBSxx`7g1gi3 zt3Z2qniRT2p~q~?^3duotvZjG3%Y`Y+C z*lTYW)I>RKw)#;(yDMaYYWa;Fl`=IG$m1lRvX>wEZqpHXR<3@01-ux62xsI=Ly>yR z8j%TvL==#SQE#;1zIAI81jvkED{_3tW7{t@aKSwTF~TTJa<$(a*g~^*?;#QJXA%ow zW1-78$jS7{g|2u3i1(cTNd|=f4+06BK$MJ!YXrsCzFor|gn_w+{= zU!1f;KTvP?>RHB93q7{chaG2!2vj#-I+hb8X>U?_9hf2Ll-F^!X%|Z*gvefez1;7%6WHKxS=&#Z_|Rye zB?yhMR?7E=qGjHH)2(QQTlSJH=_dv%4j=}N8|ko`TeDgiBu}i01~LK(f|>+F1fFA> z0x}Lj#!r6q@qK7Ro(olcOIoTcTCif2+-uR_)2Bbl$Eibp8}!&2Kz>g!Pt5bkZ~I^= z#2h6^nLzdPdCv|4(*klj;0|*eTCeu$ zcCG^x>H%L*4>%+|pm%aFvdIn>8Yjqqs?VYZp-?jt+2_0-`cVXW=#d`w@Q-H{HM*KJ z*GIN9-b`2YIuv0*KQN+f?u-Q>LC#9JIAVrpr==nNC15;9|;ST z8nll1{Knf#15XV3}CO8s`I@XcHJWipE{ccenkVvG{VNI`C3#Inl0T<@nJi{rby?D1o#{QSQ0t-a*#NvPcjFKma5G za8=AZ?$?atImN!lKGOH!rhY`x$;dj18cSU`-;Z5@En1jgG^>mgSPvXO1Mn9ph*z;l~7p5*Wq7 zYK?+xRNYQmz_K}0Qe;T?-P*whVsS%f#_4RO}1D5{ZWi5fG5Zy3 zOI}=x5x^v^ithH{m9(T$gzBSp28vWyfg0+dc?_H5jx&GOA%Y#)^{Fvf!|V|>mdCCX z5#Kw1sVc$u^rjDtAEitcdDXblE=UCGA^Zr!jMUBj$Pty8qcZAwWpMx|kcp9!0HtsDm9#ggiDG z^ZdrNh^>2p@3N{W|W1(UO znz!3sG}r^E53#iFo&u{VFF7ITyH{b(Dl8j)$N51n_&<1%es70cq`` z7Dp_k&@Bg>Vv|5@FpJ7?DuYeJK$%Cx&+8n=Okq#LPNhxjBK3Q(3n7Hvb?(#1^c;eC z;6gt_3w#n(sSB*8{&2G?H`dEL?5pxl#M}GT<0RQG>(v>F_h%e?$69afy^8k%MSn9< zOwR~Z<2H{~yl|ahe&gbIs{E!&YdLV+a8mr)<^Yz_b?Fg!li~PwI6k?$xjb|3g}l>? z(eQFAdKm~B`M#B)(`WwJAQfsGJ5ytk50*R9?nw}$ia<x07$hA};Y7Y+-zwS2g1tYDPWg}5tbCBm zQz{WwnL{m=_sn~puF7rxcd=fSwy=~a)tH<5Rey@YJpcS$Zg=B+UcB0<9LJiHNTLde zh@+e4tNc~I_in($*VvH;6^O}e_H#XaqnqY}J>7M+d9-4pDZ50HW3nq>C*|H6f*!@H z#05wa*7Z zuT&W9!$+YeNJuh3WEz?AMk>hzEIW?#ZMomfxuLNENHnVZkuq^1em46UCECmhQRMGy z`GcQjS*MS*SxDAT^39KYb5<;u#eBcAhJ-{!6XGP6G%U*%U5Hi&#F2(UsF2~JczU+X zfCX^C6d*sWh4=J%zh;k{7fb?$v9PftiZwhWJNWV$E|>C!Ceu80d5}c-E6-mCD;}(7 zktS^wM718^QCow>k8C~X+}utxn<`*Y#wsL9kHNZl$+}h}(Wnq43O9K4q^*Cb&cjbb zRV4FWwy?Wiv9D>>R4N2!9rDdZSz4D>tSx9F=UqlKxmCj;q_F}kGCeJ%bXu*9h6hd* z!Jh20-QLF5IMNLbsR@z&TvJ_5y(~9X6YDlBl%T#)uZ+oer+h@Z^$Mi6eFXZd!wDc?C^3cCf1bst+Q&FgHlE9NU}@7ULP5`?OzD7M|JU30b*DdkM4 zzLXmmUy|q|nl@`~vMQ~tOhRpZT=jKbUx5Z7jiFcxLRbxtW-h{1LEsC2bkwGC!xSqh z#H4nEzvdhEV%zSjc^ciMEwv?@G;YZ5nl{PTPj(1Vs;R56QQI$%*$&*|8rHWi2vVBG zT4G)>TjTacr5V3iHJ&Hsb~{=xODiq0M#~t;qY%YzS4KBsBv6Iw-}~aV%P~~ns$`E< zRxq^pDoyK3?H*v#u;V3LgHpN%E3R8%Nr%gm>A&{*=AC-kujP7ccSbbXCTTMVw(V52 z9@_m&tSEjIu&~w2pPGMPmp@ne;;GU%X9eFXTaAF`Zu^p|(_*)>n`2$qNrH-f!in80 zieg<&NYU)pFp*{|e5s;N_uF0h(zUycv4(kw6luK8sm19qzC@FzPzrRlB1CaN8;Cg3 z1ya>>O?^PCKL&?wTR*^lLsB;V=WtXE}b-R1`x zBf~`XK&&SWIty@(Kid*Kmf2?Eu$-u3&^9_GR9MOEwN=j_*ek_x>2`clT_?zSh&4QT zELL4!OH8ym)c5eAj}v+HQ_EycbLAy!y$U2ePfsi`&z6xBp{vQQ5rMU^8T`RakmZIS<^_HD<`3pzz93bf58 zl4_ATI}}PWw|iZhB!+S|v9qV!{F%A%R!P=YQYbkI4m|8G6D5as_L)jT{#|ZXi<2fO z%Fti;bmDraUc6K^wOUq<1W2v|u9f*clksRAYaf&|@hv}r`!oR?Wq7Z42F8p*=6@Q_ zWPFOb*j&?9*C-0e6(nR12VT$G%H$K zfK2CgCc+C z?z)MuR{NPGBMA>A!%-X))FqBdz*m6A47x`1dN_r1bWOdM+dI8|=)Jw(ifO6Meb)Rz z|21I0-Wxd*_|6=mo+q4I^CEYEd`@oW%v6iUnQnBa)<(Ax1a4ogDB$rsa({Byf*mob z9ux$y?|n<(2&jSs%u?9elyutZI1%tq|{Lms!AP*1@e95{n7+0 zjTBV_WGMB$H~ZR8<7Vw^P#e_&hYt^wQW|(a8bZRS$5XZmZbVD%71q7(lwNcUUn)r0 z9@Xvd^-Bby`4Df zF`^PC5K_X_Y+;MTih|Hxe#Gvi-H_0sfmVUaD#VJSgP%}h(POAZ!zu#?KwDWvF7&N_ zBoYNQ?)wN;NOYmHF_h}YeY?V=3+I=nAW*F!z>h)N;^5Jr<96jpzhLi8|A}cgqZBx~ zK;jZOXAw3g9TKHSx+*A2x=gNckn5Z1Dc3g&K~UQ6n9?ta(D+6I#4ZGA_O)G`;}EkT zBZz&Bz@9fP?mYJ=G)9uh!9wkArFF9f+%O4&M}MA3pJ6 zH{q=D<44BogNoe&%h3FpZ6|x4vcBA}Tn!lO>gxuqE{yDlDD<`f=+d*`+jK&lasA#Y z;bAphWq@?b)_tk&%jOdQPOHZTJb$^mohtlL|ryS zJXX|I{eY{NC)U6Dylt-82SBr;q<%*BW>!fA9p&vsUg#_cVjO0y+)pzZ&=LC=3XoY_2u&THr0)48N z{-rVMGG6S!B>=|Dfq?|s4N2-kQ#E=6kY=P%5AixK=PP-A12bR3P-ecIWt;E$dh-3f z4`aes#z6Q;!e^e;aJ^vIe%)_n#j$hPR9LlqGw(8oR{JN!{r$P z3Y^RNC6A-GZ8Br5Y%(9f7s~$wzAnAJ(In1o9S* z@GdA8tZ(>?5{K64-_P1ndPD1(;>F zaT{VCjexcgzqxVdH}cC`L8+-`J*9)X$~V_%gXwT~eafpBed{Y;X?NC|d35BBhhML5 zhsX5A5_6Uzehh#>0+>wiFOGpg_aTF`vtx!1YpRd0u7~64XgD#-YUs2B(DO$6dm%XJ zGIrDtF1F1O7u4CYW;F*&#p)o$)pPX{fJLW7(3_{*fQ8ZtXh&AXMaRfUN#f|r?MxI% zSgF>@`&LFbyBVT{8zKg`&h@ohMwABN5vwHdd3LiqE0f6Gp(G?ya0PJ*PF9O$7R=SD znM=P#uwU4935^H~C$9d-R9B^}(6^DhPEI8Vby8@<$_u@e|1cf=xGA2pML}C{_fJpx zb|)Uqk^gQXxl-=bfscp&P%0?eq_6ZkkqFbIWe?R0+nVCcS#3V38zGkew^ML5(HT2g zY!Gh@=xjb{Ju$H0QPlJKG}t`x?VGIc(@+Teh#$*pE%G%j18`k-ZZ;;d}^}pW%A9dG8@LA8#R!5x@~k9No$Lu@@ELz!(gS zsyuS{al!fzy$xgO+;f=xQ5xVwL*aG|=c0a_l!LmQ+Xyl%sqcbVUFfV2!yX`t#hrkRIyFt{mM-9FmrnC8(Z3lB!enq;q6ZoC0J#lz@xqo@A zOpGF(;%ub~sqbUv@nNt9baPp%VOC?d^d{g7_A&)0g+(Eql*GnJNH@2*De%yHZ-G(E zK`_KJcEHlfy#v_{{jm(wjyn*H{R93Q>pimO{K|x3!=FUo+G;T&mbqRiO#y|l10PA? zP9d4P)1OE9dwR3Lss1&uzObrnGMOCpX(%w%)Axv6qW zO>-t(Fjx!QemGWQz%k}K1J3V093Vj#2MAI*pb`<8h{#U)`3xLh?q|(IF0W?7y4{>q zwJQ2cA|Y*bFk!B^d?b_$vxRv4kbPQIi_ikEp#&C`(8x)=9fx8hP~t=&m>a{c865WX z*jHvNZt?ak9k`Clcc`4qx{8vS&)IsNiwB1LFsMcATM(`Z7oj?u-hyP)oHgIClJS46F{CzdPIQu-joUvkiU#}ejr0iZw02mKO zXA`Gh$Y(XVs{c{S9$9&vIU^ia<4vaHo73sdcsOzGN}{Uk>EL$giYiH!M-$Uo>4qvB z4o(s!v$gXiYqnkvN1wl(T#Y9)am?yWCCQcR!SstOzC@X6JbQ7(H%WZI8t#Nj!KL#o z6OXpPJaZg{>g;Ni&sT$s*<^SzJe^*RU6)EEal9Q}Tns)BDS*@I=<0Ifyw*~%*2HQ5 znRDL+^c|d?4bA21BByH{rapP%v{Xo1L@SO62*o{zAGpQ1Em!-OyrmmAxOXidWR8eY zXLPeJVHaEr@XQ)Hf{yM?H>&H5(8K--eN`zDzaGq?Xe-@aFX_+(bL} zy)7K(9DG7;al9;z?oIzG@!qx0bn-tc&Z$jf@0VGkoZRWAEJHV4)oTGPGUw(S*F zgClpdsvOkEyo~4864CA!Gzu&4NDQ>_bS$1WyLz?1u|^GH{D(1LGFFHMqNDo|D-I5c z1&&u@?5)bDVt(~HFBiIa#H5LdHj>Qg6rwJPCy~%swMhA7&tI>fcF&y~%a~JRz-vh4 z3ne~l+X9@cjISm8e3-k0m9$Fb0~gS?9x>2r%1Edg>8=l(lGaEY1$5YezE=bES=yk? ztOLKs@nHfT;%TNVflk#B3G!YfeN?>@RUhu`oA)H}G6Or*fx-%&jsa!qRn zwFLq#_`5j=Eke*Dob|f93GKHVxRzfAo6Iu(JA&Wi*in%CC#-!c*r$>IQ{ORO_sBP&+fBdc;bZx7lcBGR7IgzpHxHG4)x zm-}M{-?Ae>YPu1h3Apq}KHEAz7UfIMKRkerOcm7(fvSKdglC7yt4$(rUP+PqJMrfA zbS!dPb%-!4O{>VParHW0h~RSqUMF z?PQ-tEbY%?(dV{x@rJVL0ZGHPRvfE*7pSHgsWn+j=g_NH`E*rnao@ znDi)qA!-5}HcCX?eLh?*m)o|_;+FH?_?as{ImU$5F*@W8dzW{6QLdk4g|(wpWXOsT znm%DDD;V*RFp1T{2?!B))DNd+xmgtJ+R;-c#!pY~;Jg(GqGF5=!3jMQK$`UtQWADl zH6mD??dW*HHHZlu{*=nvPCaBnte6#tp#PqDZ>_&a-mm(1Aj%9~eVB9bIq-f-`YInH z-+NUhO6^Cyx27LhiG&>oLMc$4=vHQwzBBeAx-wz ze;9y=0Z4$L((k5q1mZLp3U54G5CsaLCxdlIGnNb&e`?AH_#=PK=IAp#5rP!?i z9{5JtG@PwVL5{(w9+2fk^^3i*AAW;=jJtBPq(PD!@|Ft)B2_HB7rypgDMuuGTN*cJGT21zu^N zm~s@ImGbs^13FIC`WV}oiRh*HrYUdgssixozZ!eTIF1!SF=pk*$V0_uLJ*XVMnrs% z=9<@QZl{{aRVKrf>@?O%icK7rF*StJ>M*9T`(-;goXr%dKYtxSF2xQH&sA@*# zM&I>V(V!mVxbduZOuPd4PwKj zLO^i!@nvg10kDkVCqEJ|Y`s{pXjlEcw_hd%k6tuA;Wa7F28k3GR7K6=oucjcJQgTheD2J*Y}VXwZrCh`L)~_i^93&sc)|a zv&i2tvt;o?2_Vm8J1)zks-7rnP!QHiC71+XJQ{;w@ZP?}!#78mL>o15r(6j0n6Pn- zelSCMUk(hqQUBWAh2^%66LcC2Z{!(d+i;fPCcEcUDNX7ofBp5>@yZH`yJNqs34X$U zH#Cn;@30H>u+QU+q54fE9oB+)N|6?nD@(E6MJ5bT$}hNgr5%3QzT3h3(?8+&Loj#8f|PT;YPm+_z>e4Ffw+pkH1Gn(Gj<@jDv;2q|~TEA$iE z4EW15`fmReNB^@c6SXlMiU1cuJlP~*IW4%1Nm&*i2O_!aXIxbsw1CPA6Z2GQ&c3A1 zC+XIGvd}5_ZQ9qvO(x7xP>7*E=nF@n&#A1fSgFf;WoRbC3L6U7#l(P@rDr^yCc!&c zW~^Y);SePTrgnK#J$f861qodM$YgmV8*7FfYDuEn{Sm640E!3iy{CZU0dChGcj+WR z(5AEVZBO+Ir#d5pt~|+AfR1_+Qf`IO26>MISlCVt$2zD98IPS5G>~XGSCzvcMm19A zAI0Xc+V~Jo8!;%$u*xHscfFr&zaBSo_rv9V;1kd^&NiFs@2kysrOoudfLB6iA(e#+ za82n3t8!q5>fn(L3|Lo)ydM1B&D~J3h#Z+QbhDI4kM)?$-|JZYb~t8tIn)~LjYS2b zf^+SI9+7oE%gIUsi>c2nOfq3S@Zgd>S{)mFF|&jln&-Hnl~ri8k`#Qtk>e54TojU*k<0gYm$!?zA8yXi z?oMfe$QCYspneP^nB9F|T+DQo)&0~Kk`~U*v&PBfrM0p8NbA%ILB;AW>*$ZgK?k~- zdiekG-GHS%UB_>uWE$iWz)za|h7OiwF?rMenHfzW>jV#)G z76bKg>bktaSnu~?bNPXtKG;;qPIuCiwa|gr@;~q2ems!sX$cgtvT}aDxp<6U4h)mS@}LbG19^dDeK4maVFzO@lw3a2IBz zca|Coyn@@*4}I2K6es#EDvS(WH4z=uU>g#cjne4bDUIgQ-k__&tDHMB4H0>R{_f@t z9?lyL<*!X130#9L9(lE7M875u6lfntug42~rW25Dh8*7+Q4-{?+?21?t_eE8mrX{5 z^)_l0Qo|ZyjIIe^HLi6;Ql(GGq=*!&cj$q01$4WjKY<(fiAIfX7h^%5pEsuW*)xF0NA}9(hNUx zuuOS-_pame*7~qkKZXsrsR$UGpBJ|ud>Gp9x@m~sZQ%0x|;9mm1l{eaOD(PY14(z%?-xhPC7BpT{{V< z0P8XesCWtw;W*9vu+jaw zgqFsW`B+U=!s!s~oDDs zm%?sBto3}JLR*#%&~~IFofGHwS`nxJWk(dQ97{((W6^Q9ag!}jYVN^9bd)E-`PP^W z_Jw8&MBv4CDbJ%5UCJ4c`!40!6FW^%??U+jhqVn}=dCBU?1%Tg&Qm732>qCoxOJ8? zMi8SBw55X7n%0m70gq4MXt|oQOyF|9aBs0JW)wG^J8$eI@J*7|+@ z0u{pJyOh9(QsXSRNY`F52tI2vZ1KdcHV?oW!^0d7jrR4gxJD8|dcSh_#V#Oq!JnRm zeUqHDv^`T*mNRTGXCAA9L6XyY53$c0-Tc^{c&I7!PJBOc`STDfWvIdhy+ zKaH+0Z$B>PvoDvYRL|7ycy@MuV*OkV|BtiV_p|r!7I(9olUkvwl~d=C7-KlU{_ytS zb2rC^W%7{1U^gB62Le+5@#`%>H@mL4G#y0^Wnr1-l@0|yoNaI$4fwt+Qu*(@PXHEr2-o!~bU2sVG#HEL@^n5gMU1!-qz1X3-)C|pa z@p3ML4;cj~qq*5Y;BF0iBxVE!NF}5Ja|`jy<_ul7Neb|D6E+JyE%QH3I{jDnn$%a! zt4{yr-F;EcDD~*SB<$T&zp875J`2Uo_prn@RKdg~4t#`@;0wh`My__xa}>>^Jp^>? zahOsji(W^(+gVtaM=h9d%0sa-gNr>T7_M`vgKN%Bu`Qm;9d_9Zr4}Eh7J3-9eSQH3 zx;;C*))jC~=?~OJv@Ga?aRUfDdSI@>C+gU%1Ejh+gwrP(%U#2h)JGp4eYHC`KM>=G zZ#Dtt{P%KGEqw&x*tjrIE_%@0Mlp>rsPzOovQawb5r*Q%R01dtgm#S!QjAWG3)(mP z3%i800NGB0Pl))v{O@u7`r<~2<7wQdxNB3BILQ$Dsfe2g=s+r`#CHSEX>Jh3v0Kxe zr5MGT3lA_V3j;=-tFZP`Zu;rk0nDp+)>&>fT)T^PeViA&fu+!{JJq4sbYBj9W=6Aj z9yU3Tqtficpf7Ji$*rH$=wS8fq^1a0xPB>%&EeTe5RG_M9O{sadOG%8HOSyqRjs-Y z0vCm(ql;2&>o886k|f&OV>5{+_dz!*vu+kW>o%P#UeG(j9FFyes@ScDbrZ)DwKqtN zMZ~q!*KN67p%}+dN{$}F+UX2GbA^G^@)r5$* zjzU3Rt+_~gUaf9*4bUnoW9&{I2~1Nj1^a$q${WDWxjH&+;wkDyHn@lGjmDK^YX>n~ z?d|0-&C~a|2;c}&MJFwSuJ?CkVPvTc<3WwxH$Of;uD=DapY}n5mAfmReqZm`DtPgG zKuxM@zO6PJS*zOK9w#A9@?m5>bVfqU8p75XuiBX{SX4M!#NgJ%E3dO6Ucr&E+I$~& zN98#Qk_=MSGZJ`n8~7k;6?XHhK)UwwkhZx$cu7v8~}B+DPhN(^=E| zY&+JnoNcSvQDStWPL!#dFB85CD}`rtOck@R6`)OFh%iiP^fDGxZqKr-oJWW6uf2g} z(PKxwWfainM3#Bexr^P04f#jRn?p^R=FN#@lQ+frr}Mkn-Sy=uL}$^NO5u5ac6&;7 z5rIi@e#*E>^!EDlv|f31dpW=KhF3VdO#+O;&dPD53GL*=a3KAg>Z{}vm13ap;)^f( z9O1mtY%w5YI5Kxpe}DqXjHm?8ku8n-T?4J$q?{+HYCOTn26eNs=M9d)6=||~3`{gi zv-WijD$>P+uVRKP;>0_&c3rwcYtM1HSd@0Tz~$UV>7-eV%faW$$wa}CpaI+?5>KjH zF350FN3L-xKM&MUH|8nn90B-iV6nq^jC=Fna*Jaj)h;JZlkYlSf0h7{)oY zPO%ZnqBJ&g;iB$ys$2SfAU`e5J0L;)YX=pGfAvEJvasAx^F#Hjs5EumL`-_?7RD?h z&QJBk6WF8~wi1j@%}T5i06Rd$zclz>zF0a95CHsj%iUE~9U6zLNz@v&{Ddg3B34^V zcR!_?(v|giL)AhK4kN{CLWL}P)IB)K9AriM?O5)`Mp%h}XJSfqoG;pg}Z8+Ftuj9oatB8A{-1LoHpt0Ql;NE#IbJNPSv zw0=ZBi<9>7!ymIIDE|xkF*BfkXQ(81pf9jEZBJ4BD;YUOgA9tuIUR8MrwjQsA9*}i znK{w-`qg|_J?&&2{Zh0aShoyd|JJ+xVg7x)9BouBqv2>@ovl{AYG%~ENNK;Cj&1~6 z+ugO4Pt=>9Ies^80+TYKaCCtfBLNM*ovyEU78SjTx|o0`;rm{$$!oc@0#pOJfY513 zV?rZd%(uns{<%8zts6qyJugFCj3AzJ-?e1yswBY6h9~WXny07J>rFG8zBJKh!t-KZ zjwR_%NNT8!8Fm!Rl*?X-aY~Tdn`gCtT-SyVBs-+Medq?`GPn?&djX;^_1|hJ1Uy5= zZ7%=^_kss;?OFm{r-dcT6M32O1Q76Gz&%&EGCoE$fcx3Y>qd>YFO)P!!)$-{^0034 zA2HKr#AI5#flNfJs@%_?0ZmyaTiXweLm#kB6!C;@m<_rU7$X3jqMPE|MeTqwFb8!} zG0Tk>AgA!`lz>wCKE=F8xwjgW!I3^_*GC81H_%LTdL^+G z<5#oW`Q75<+3nr<*AO7|_QU%N{kbb(!ijjLa$f1xpDPb2H~$d1bvzQnv;Vt*ij=fT z-BP*Fi8mX6p2~yQ@fMW{)GQnvS+tkqm-IO<564|OKgbj8q`5#;0&beMar`PN&tmxx zwaQSdO(f1>-7KRN(~y7zOP5?mcxk9Yu^b9i>=`SRC~A*43V{rl{BC zdJWbZt#*vjZctyt0XaF#Rin4XdbR%tRwB(fPBWOri`7Zg>@9G{QnbKyQH%`M+$0Qb zlEk~fBQx#Gj@iuYileU56T5(=Tsv0C5xmD_>cR83frIsXbkNZRQ^0D~7sfv|% zL9B^nOr`AElpXY&zMgnVn_JXqC!*`NC$<6=@oY1x?3lZ=yC%q69r0chcxE#QZAMY! zNUzmi^fi%M%5#TE_5S=$SxZK-T%=?$+u%t{(GE!qaP*FQFHMC-)3k2pY`cCbM)}jK zO*z`AlF7&V&n4}#z+(`Ot5<@=`G`J}a%yoEZ?}gAB)QuaD=$ZJi=#5y-|Qc@BkYt) zrOP5>YgM`{9^O{+&R-r%FFz(0KT^bx{#!Ap-0HlYgBh#t-QkwJ%-bD)xm5{4$D|&y zrC!SjbztI+dIk}b2OBX5Uc<$CgpM{6`)=)-LZo&%%DxP9i?XU+P_%Z+Jf_1{uMij`3s zFkyAyy?4sZZ1}ml=5Nb&Ud#1)S#Gf*$SWSLNifnh@+zh4$Z4HgQ|OTM{#}-@XPdQO zAjFnLp~5;^$^&Et^^TufXJpRIMLaKyrC+F|)<&ilFM4NSEddj@^47T)cv;cfmW&Mw zHnqFl3clBXuv8@d>1{JGuVGv+B^|(rcX6`4n|o$d;~`w~>7m@z%{nKOhfGGvoV#@s zmoBAH(_{E(hn?myEd-t9v;r4VTwB>7hEtJ)+kK$-i2;8BzSpmn^GP*L;t=Z1!4?1U zalJfltenq7t%6HdH!qQ)hc3p*;vt;oB4e!2A)Zc~TP~nt=)YB`K5Lp_ArwH8b~586 z$spr+LUd#mo#I~iI1<|eFvyLMzjKx%XqHG(H-_qJv@s#`I5tMF?6A6>DTGSnz}4>c z-O@rHOMBh#G76}98dX9t$&GG)EI?tXsh|J_Cz0~#_VTw+m-D;D{O;^-{x4+?nAipl z@Y;7)&Z3W(w^tu-Zx*+g^N(kLymu`ZkI95Js`Y?jJ8+s1$jzyuK;=yW5?uCj`^#@? z$d6UI0c$l1LmieoB&L}4NuB;;y@jVSUqzY=qoUgJAZKvIWBA@7UMviNVg|IRF;ODr zEfiRlr38Pm2=a*CcoeD&&{NYENDxS|A4PVFZeOeD}F2(~h zSog>{qzH5z2*5|h5^VnE%1qG@vpcRW+5pVaSju7eCV(vHO=P-az{fPogtH#O%yLER z^W))QYm7W0!%4aU^*nmeHJoz~6}taN-P5$Ujq`Zc{*GRHiX`fbPfkwawC=cZ)^%mb^!Q6jIs2pXh6a0h1Lne<_w-c=kjVE2fEJ*=_Uml2V@O1-{b zr9nG?HV{~!i!$Vw+INYwFFB>Yk418)^iGgmp9|@m+CYX*mBP=!_ojH{Y#`57Dkx%H zg*e%&H`naP6*a~(=W&txsl+V{;F-q&Iy-J0=sh8t1~4Pz&eX%|1sNVJiYuvIx)f390frg%?rTK`TG9flku>7EE=Wv5eV#-@%Nle*V^$*wWXPS< zM4$$N8IcIo_oWl>+wAZ$-Pm+h*quyU$Mt%(=Z8w|zJo}Q-G;AwJod^NQOSuA@>`qb zGiSADN_8UG(IE7luO%xK(Td$hw6G(V$`QM95N#SDl$coWY9%M_HFToF>^0~+k2n(^ zsC{&~T#c4P5QNTXxg1^oHUu`RD>v+M=)r@YZ2SDo8q=xovWNZpFR?5CCf%jQ`e3__ z$dAL#7xj3F2)LYutIbiuBN_y-NK|>HAvUNv`VhbdEqzg=?C_`%-%?#pVSe(D zp?u1OsB13i3(C7`2x8Ly%0Md5W=K8x>$R2Mw5D562~^b8Pl1+EeKrCau= zjxTZ0++)0ceGR{O@NQ)5o7=in3C+a#=;kC+DB}7=Q{NC_G>BNgS3oAH^P~MLa$Z^{ zAoY|Rl(2B%{M|0>vK8HT;di9GPZFod59>qukV%T+CzjyzUm=@XL^Lal6TbBn)gxE8}U`NvH@Ub zWZ6QLuL_Og-uxmebpyK^wWd}oI&Dqeg$lK%)^-JT7Qc^fSCi%V{p$D0^6hGNef^g2 z*V^M^M)Z6<9gh~{)rZAcpd3O`;w+Y<`EqqNUM%OcPco(05OPB2YCgNI>G;DI-tTuy z&;z@&^3ilE2pEKeFiy;FPiKVZj4ozJ9Mz5s)PxWHr!|v4k#|c+&p+fLl7)`3$k@r~ zZJJFL9T!54s?3PY$Xr)s-8(qM4KU0&36aK4l8}vqz&VW1Q0G`^4p?!A<}fO-4%kM4 z8Ag_dfeFEkEFExM>WBH{if0^r_u>8RkWQq|?R>mgtQK!4*UQy!<4;3qaped-jg%ym zSQfYQ$<2}>8iKr2_XY)ZgqLQ`K z@%WavMmH`))EZq}^V6(@iOlA|I52ST$)4VI6cIMwbzc0nF77}XXtFYGo$cQ}KRyX_ z$3kcJ8pCW(%Jz$0y8d>wZ9~~Qcn>L8Kk|rukY>e_W~=HyD{|Ejk+ZLA(`9B`8`A+>cCGNIR2oO^b7CO6&F+!RD%8KE{N+9V+d1z^&8c^_HEAr z%|yGTFrsSp9mcRRL1k%e90cSkEkmv3l-f>P$#tPZWy01oiz2KlEikjHK3rZhgXsFh zboyyEosF)>S3?j*&WPc;T@Hf|o$JwLI=)(6&3?b(L<~WaI9KD#>Evdtx5Gn}@!h`F z);9>e$kTT?T$==p#{4PWrFYA<)PG2@z}awjw!6iqV6@o`N3U}m5v8zY#L|9B>+WcQ zx7J}8eeLs5w_o(7+qE@-Ua!i4ki(^5*fLD1+;SP#1>0yJdrk$yzGh=>Il34E&vQJ? z77TuIIUkR2j5oT}&g6@7HQpY&>RIwjVtoa)gN(yUJA$y`l~& zc~w6K5QX%Qc%R>;9i({T!qe_fY^twqd|rdzr6~_ZB~P%}2;O{~Js+xYI;hi(K(4Dr z6eq9(B|Ik0T5wN&%R`5QhL{cND1f(Oa4cU!^1q2J@v z*oFl@jiDzz5|Ijw!GgGPJZpIG0AnB^FI1AOEbbLCSRcI>V7#xwdk2&@+gX0ZEs&5%k3D~i16pUy&8n1xM#({~V+ykgX~ zn;*JSIeShXc6lNF@w0T_Q7{By!7sRXCZpgY|ItyBfRdxknBONNwP6yGKxvTMtZ0&8 z^~J*4qO`WQ@G#P>&i+nqfTDp;DnWOE6>|@Z8T5U6SXUR~-Ze86BY$6>d>EvwF3x7- z$5OHsD*uKqM2jNv-D_P5PsEdCG9_kv-?h96|4tXn#HP|=b3QJJ8hN{SFfM7$QXUsLiQ08Qj?kP6h z3p(6++hOsW=KIvi42=)*etSouH|;w*S7X|p|9z3JD_A%P3=Q0`#O z)BilD`$KxS=nI2L)#!a;+!y~NlvkW?nHiC9^6kg8*!QNyCtk>g-;-hAi%?iNa*9?1 z;498In8$6*qc@iCPc5dxtB4RzaSf)dSDw%_Eto%tkyx?T&s3iT-}UOaC&lZ*($ z7J@1`_jtD{UPMlvQr?YN;ue;$#v;Q+JwEY7a;5`6ZNxg+K~-v-WA64UE+zshb-e*w zLb(tE0TB$N3q#tbB}!NX9p9J)p!f#mLD74g{PFBD|C1}0 z_4DEDHv4k+hME3M1>I-c6ly=Y7%x9q@w?-As<+;n4^&Ju{H2};A&Lh_B8^>kM$#~s znGhy-5MZBfp82BT?DqM~HrxD`z9?{Fo~u7uFfH;rcmMvlfJH=yFfE3+vGx5z;fdqcZefQ_1ox zd-$4fTL%R`;b%}CrL>L2>99t%i&2R%Ltp}Ekq2LxA?tm`Gf%KzQo@l61T2wH3`hYL1o#Xis`41|PTJ>rn}niA-&+=MFJ)r?N{2 zOl`Ckygv#|5ta#4#m>QcQuD*4p47BW3{g#Nm_BR{ib5AR2OTqpo-habvDZ5Xc`=Fu z$6{mO$zhjZS6;%s^ z+gyK-m8bAlKeXCWr+Lk*Ta88X?g^!Kzqe33VO;ZhokOwn!LhPu)lpCqHT#s%x6Z zWI!*yVjr{hHv2m*+R8v?#f3Q}i}ap*0-y0vyXQx0`W^eP!X{2rFZ10Y{c$*d-C1E5fJn9ih#4$mbHvQv$+VG6Jpj$BlO>Lz3 z7nWXKOaE2o`@hbZQt0x2?SX`lQ{vjlsbc%Uxr!<$M+n=9669?~pElkgV4{(`=(09c zGn+?mK#TuBj!@9}e|4}%&M!P9ew7(nU0Ki&HEv1IGJOI?7`NR(T3eK~*`+lH7Z8s1 z3S@m{SyCZ_f9snPnw!!Djl=9Xw32{E^k~1W<&YV>@+wTT@1X8UP#?1=L1J7Z07I}&Ia`{w0sPh32=#ZICJp-`3-guOch`N+w$AaFyC)XTxuz zq^1+Nfb=m_<)xGaeP^oDM^*VO<#2+NZr@X(`)Y>#@?F+z580lLCx`$ihOFCeNAu<6 zaynjJjg})cT;$AW%h7T&yIEji{J;?*y;ip~JdE#%xMb#V=q=iOXLide8%Y&ss@perOzg&%Gv|NUXSnp~lQ6X$aF{&x1^=4y3wvBZI~PLG|Blj(Hy zW<0m+xUiwszBfGQYBC>Ra(Hxw)VcVC<$g>(x1sOjh(~wAK_)!m32TbJA`*H8wk2`q z<2RGVa{dY3l-OC0|7W=p{dF_OlE&%+Odp6Lc5Jvoc%awo>1>2A&qGkn4Y8+~`h4Zt zYS34tJ(*l@^R+sc$TvWt#qN-)M50kNV?@DBqDNvRCQ9U-XyQs>%ax#qBJ(*y>=W3o zK;UXFJ}^4#(0r|q#)7VqZOZEr}-9bL?H}hTYI`qi%J#Cs{2ebZuFdP}frNsU|MrOJ^+W3{`!E7-QrpM3L7&9H}+u;z6X51dk+GJX^hC&3J*-^OT9R!cj!rF%^?3Js?TCRd#nh>G0<1iYo zdx$Dm3|aqRBq5rz1SeOqHRr;<);2eBX5xH!y=}FV!gh9*?s^FY!m|}EJu0`~gmA4{ zl<1nqq`Q-(3EU%1JZfuY9U+5S-b<`(EhAxGFT1P_F3%q}d`Qv~E3bd}kmMY7*)a}J zwo=*%`vonu<{UYBD3TM0Vi^9kp%@1JL($rPp!iAfBG0$!dZ#joB-YE63J=5*gK46p z#vW*jG!d+IdEC=1eLxnKNgk3(hQlj|78tveLp3aBIN$ zC0O&*S~-QiEkpRa#eO*4z-qe~#y(=T6M0z5u$;5DO`}s~%TIoaZ29y=*>Z6lvR>JE z?l6miUpdizf{{()pm$4w10ZpQ7BeIYAvs~qK~?whIH(qRhW@eMSoFMM#Ko<7B|t2Q zVyb0Ztjq-gJ-HuR2obxF)||62S6&Wji(MXMSG#2U1qAdhSYtrbXX5tGAu<#MXUhBa zZvBuJN1==2gs0=W$_it|2r4MmQBgZt1khV6mhRh(gu;wkfkzcmdMOE=eOXN(!)gD4 zY#i0t1R~|5@QXWKa(nWakvyo(e*E}!csY@RgjdodHUrq?OJQ!BHkiUBs1IS=bJ;Z8 zx0^%N?onJ08W_k(Avfk6{t&J{kxGmmAo>GJ>Z7Xo%nB zyUlY^aF-t*JZ673XZ`g%Z!XWG3=xD*6<>6k7Y}Far}gG*%J1s&v~m1z@aNeye-Qhm z4OHMvXK&t&=N#@cc<(x?9OlYvpE`G0aYW?%^%KPDIce1ureeNx!;elUSF87PU6x|Feow%ufxuNLC$@30V|2EJ|EcG&BmY_7W0{4CO6xj@ojo)Y_CwWL$f#G=}YU z2OEfwXX25MvPqf6mFG4+nl~l~o;E)(&L`|2WMAS5_VFmX!rOCqkV=dd>sB2+n0+T= z6>B7utV){nO$v=ol75EA?a~saNJip&4jX(R!>s{2CLwb7C=rL=yZ!THI@vuG=^gip zJhEjHpL<-U>to--#Fus(S8?*T4`;q%0wligpQGDcGF}dp$!Dcz=~woC{bTf4U(r(g zji>a@zNgDvQg);p5}lVBQ$YJhiAtdOn2ROlJl#KUg$gbnnDDX58a!4)SOpJZulC9h9bMWg z8PGKQmYz;kN2Nv&no8*x>0|yqE&muXHCCh@u^a?GOMTEqi!>L@ZG82Y0J_!#2?rk)C*)=vV-g}yLf#)C&Wfb_-L@M)ejyhietDNkPG#q<4rTByHH zMm)`T50X#nFM;?<-@L2*`O7v{egIl_S$@_Kd2VJZmy^~{^pO7v(s>H^nAphGukzz$ zwBU0@?mESbp>T_$4jGXm9;&qn4ixq_G05 zrj7dRWCEp$At-A7Y@;?9Ba)=@IuiV$>4v(S&W)2U?*a7}w^32!wzOk;P+a2VPkI|R zal33-xp`W=oGr4)r)@effAVWvo70pBs$WdwXb+TCQFb2jJPL9KMN}l?QS~bSD%!nxetOzwY4Puk zucYqH|9g3|Wi6vWtTMXr4A;@>iy4WA*^nPG=&HCLX9M(3rBiweKrv}H(#5yEtovve zp!EV`Ab=b3>dVQ*>&A@2GO8#<8*)8BZm?RP)Oj2qNHy=%)uvZNkF&$qv@p{M1&plL zC$jW2f~UMz-)fSvn@XTIifR%6H7z2mNg}B=zTHd_D>DVyNA)9qE8&0HdzS6Cab(y0 z4{y8*K=65brPzw28`<(mvS-r0z@a7DR!0#%qU28gegN=QAPEo@l|H?=i|*)HLZPZq zFBA%eXuD1RnusP~*YWdaCtj0LhNLcXjXcUUNxmK5fKyRodO1~11VzRXUD!C(hc2ir z{0Iy!yWs}2$4<0D*oTJSP#y+2sk4*P;=P6;(laaFR4SwSFO~ahes-CP|CyE6HuSr6Ru_a84xuZ<-H*<5_wrgUAka4=P$h~N~N*TL3~O`;D- z324;Ap|s6N2vQgr*Kys8@}sYjGl>mEib&5-epryt>n#itP$%2t{*J)ybOaendSj;? z2d4s0G5h{65;i^$G!-^IA+5pf4Ukv|)2D$F3oV)me5^UwjZ^@?Bk;9QUhuB%WK+ z!hi!q>(4aV&E7O4YSL6;jIp)Ojt%UON&hpy~J zLD>i_^a*QtsWt|HP7g#=uHH1&6z3G_8SgUbnKbRO$!X5zBV3_S+J>LPq2D1RY`_S& zJCE8Rz&yg_vw;+&OR`EnMLA%S33xt@J=qu-(c|XhhuY??Qutc{fFhZ07MEzp_a|)~A ze46=0Qf{^v3ln$e%!bbAhyCW0qXuGa()(y%+y)s;Jc7u~lZ1afYqVEPcV#voBYV|48UGG533%kw6>~+a;tucM)I+=@RIw57 z^}9*M60BnWT!p~5jdO0vIsUVh?et?U`~GPD5%LC!Js*o7(xxwa+HYQ>^(Nlu1Nl8u zv9UB-5m($JHljT&7N{htOI6|ZDMG}x6Q(A4h47`GWRdgdqM*X9XEcBVFW)$~s!#_u zVyj%EyMtYUuxN)@!7`P!PAaBUpXx{V)e6TyR4lIG=^SIPJ9(QZ91{w`jp05_Q& zYjXEEnoh3i_&->vMjjrVsxSQC)Y;At;UpLYDn!VUJJ*x~6S>2{hO--jn6Y^T-H z^&%*1`EU^6;si|o1+MkQP;y&m3Vks{2HHMv9LEOo#|`JlZL9?#nR{t+{#4FpcUUHiuZ!8kvc3R} z5iIz5jaT0Q{Iq46crJXs*|Qa%9S?6u25_3ZbYsBadq4zy`c%Kv>RZv4`}&{rTnw^@ zk29#7gg>-g-c10*0;?dX*KJ|9Jho6P(FHbBqYJE#tGTL_X&~a0@-qr?OFD$FJ@~l; zf9~=O7)efHElX z9n-bAs5*#ru}c^axEfOfJX*6BxY^+$%R)qhz|$4hGe;{OgqK8ZSfGIs>a#`C zE}|n24ZjFPJLH1vX(pMv1;@tgjMZT3zB+#!e9f#Ziyq_khx>T9X6WUiwA$2QFMuTQ zPFTBjyziuyw?@xEt8ffZJC4`!)A41R8CqbT)o^e-oUDJs__%HMs|h^c+9uJOf0;cM z*YrtVv27neOh??Jv_Ro6%cuOzfxnc`e^;@EU!&%${eka>0Am={F`G35*vq*Dm^+u6 zgYz?)F6UP=sWoNa!eyn^5RQJkEB-YxFFs;ierZoMRPkH`uwJqlCF|sSwAuA#pVQ@= zgL)lyw0@6vD-kWHAF}o)Bk(7+VZxpwvxq(UF^+&g34e(8{N2!(eQ{tb{{maa=CdcjiWBj;DH^mKq889!WPLKO|wB5oVDQ9R|Z8&GZk6GT6Z}AoH_q7*} zvOXt&LpXZxqD09$I9rw~foxN^!jYwtd2=2Wbo75}87P8_Ob!NdiXR`ac=#YQ%5Y_U zZgZH~e%r=O>91Zl+x0%)&Gw6U``iIXT7A*ekPTv57_XPnQ=hSJE;&MMHrvhNXOGc- z)vJ*E(s-wR>aICCvW~kR0GM9ax-kV|iNI*}x{2R~I-dlJg?h&wZ)A5JKS#&y!OT3g zz#+{Xg&{Hgc@EK?^4U_HZu89GC;qWYNAbt-*2SO8p)gZ$lO{W0J=q5MW-+_#X>-HU z=E6PKC+Q`95)$hzS7ZK7D>g6zvScPkLd~{rNB49&`!c>$A9ipL5S9~(-zl{oz{Ytu zr<&Up{q8<(_UR#ikyL$pZ#$6fZVs=!+^&*&fHsR&qEuE@)%K2~hOGC(nrnW>$q8c8~@lG%CNW**|Q%ee~By$ zkH5E*-Qp05jKnH#{6TY;6@Uhq4no%CZm}HQU5(Y4hdL$z@}*9|`U*DgLyKmtkbx(i zA7ZK9dk~6zKY*G6mDNc-hc?*=QcuXY!J#m}B1w%WQWvQcFLZ0OI9Bxbw*6^f-W&wX zTN`x8^+3kOacvgZCM^2Mw^QW;DixZ*$rxf4lS@lrY*roQ=|fqUx2==EC@NypGOIX` z`3@+Tx}MC=Wvad@E_fe0)h%ljl8!qNby$r)`y5_%1vPX~39s|s#v_CQq>kuI6;k4J0}-z|k#n1k%fQ)l7a@nQ8bi`TqTQ;I@sa%tdk0P=jA z4=k>$F%A@)5U+bN&x0=KOsf&s-Z5}oA4m#T*_H~zW3pLm=V_@wb6gj2BrGP;3;~jEK6R>4tGJDS#H%B30Nd{B zF111`4k(zhmADJgBBWchJA5pM2zXBHJfl9T;y8jq4&4svGwox-c_8RP08VoTJAgm% z=!&Wj$nzxL^(K829X#Pg#0GE(qAygyQ43x%GC&fI0gbg)mb}?E__l9(u{P5(VkSVwfr%paKD;s-FmW?S@Cg zG3bXqR7e^__HLd{!XxOhsmm7CHjQb@!rZk0Cae$229tb-(}YHL`Yj)is) z!+0SUbDfKDU2uUQNS(k#thR*u!!@<4SBv1lgC~{Ez9`3HIMx;CtUooP5=y_%HVS|t zY7VQO0^P4z)H_+^A}X0s!rw9B79tC5vSi3r*>rvq@q410cNDl_=Z6uiazLrY6m zlhawYKeJxhGH>JgRkDL?t{-L#+xt0558^^N3vDzkSoc+J}6PVexj&HmMoCS|Mfn=cykuVlFH?rpry2a6x zr6Md)Uh;L2*0$zGm6B3kJ@cI3CgvO0wy!Tu(=3n#km1Vvb(+N(d85xpfsGj+=bh5b^uTr}WtuL#uC zXGoc3S3`Nk@vqkef-Ro;15e_`N zHc8@B6=6^taY5u3-~Y+$Sy0C@cF)rdDiTa zqGR(F2NuNdY9^ZlaXFG=>f#4|NX&|(z|?d8T1T`syI{y zKp>mHBUOBr>JIoE+vmi`)f%OzY|QMS*qEuMwc3?<=7M`M5;m@g^9*4Bmc5RZ=Km;z zV{=fm=i=Xt`$i)x)`Zr@<7oOYUhvU92NP^veIDK2j87ShtoitM_NY3lB)n&e{6*b@ z^VG<7%wyH{GD^P{>bpPg_aJom=44q@9&&_7B%%wegj@3 z&mM1-35M`C3krG=vaMFRy*j3cX`3M{LRddvrL& z;ynN(S5Dw-&+AmYlIZZj-8iGVsL=JTWS8w@rpe1DlLk38 z;5zafeuj`e3?V1SLmO!EJZ!mGa2;K-Ch+MMCEMVnr18eE(1wSH$#o4qevrF{1!3(6 z8o$Fac2z`{nIxlIOra}6+{s$fBEq8k%pz$myHmVLmYQbEm^0oqrm~rX{-IVm$6V!# zfW~}Le5dQ3Y$3?f^7ur0E^DA-Wc!m2?UU!XD^=<&>j<+w4Cl~Ov`_nJiSM@PpPF2? zIWuGg;!@uWL9b1X4Ok+a$mCl4GAln@6&zCvX5F{t0sIGkmlT%aNcm2EX=fFsNrZ-i zHKXmeD9g-XwVolYvP*i!SweYd4;rwd%>!ni5Tfx=a0GzEbTt%Q2*4FNhSS0MK?x3r z;wo3~@@l@=7sW@ceM~ycs-156;S37{o3&IY(-FEATQH%~P;fo~=h8njaLSZXfbZFZ~eaUG{sMEGo(fv%tg)~EUGwg%fnCG4z)RC)qv z&$gDI=d*{K&!-G_t%tkiWU9`EX~vSyT$pAsw#JX+`Pb#=$=%H<;~i^uH~ng&6e#Se z6d+4^l2DNC3?^IWRF0;Qe4PaH5`SvqlIB*gLeD|lHO5rd|?)f9PG4~U^d07N_-L*fC7oo)`R z_=rM@j{r-AwNTF{IZfMhtr~1!lpjfL!EC@@)Qvc}P~h_uqKazo*HB&44=^M4=+oc9 zXBhzmNDlrEl1T_=^oJ`zbx#E&o6r}Pii*FSs+|QzGrVF~~*R_UT6}d|zhLHIpOIj7v4A%M&<7Xgx){hcw>v z+XJ)xZ0ceh8FWm)ahJ*|jD-6yI?SMWF1qY;*=<5bLEDNrBKdD8)>kxtSEWZsj znK<;R&vMz|^o!rFKb;{q?q_Q2@@HrSZJQfG-t0HOH#*b~+Caj1GmZ0E7@ssPj8asz z*?C?|^)cF?M_kH4jma?Iz6=ECITbh-m;M+CuFOd>)er5#*pUE$^XPk*Xe!Ib42&kh z^@2$CMAAUEwc9eq`N(U(hLP)3+;b42o0G|v2@_Ss5@Dw=hz}OT9avLBkZ)H6ld`Vt z1cE2BP)nt_gBj?0unc5ufV1gPZS??UwnP7WGXE7RCO0f{{I-W` zep##$v$e^7=<)!bU`&VlPZ9zl5B|B8QcN9zYevrCSlmZI7()8jP-6jP3t@U38pnZU z3G~a-5y`s5IFdDVC&V+jG}6mthxvtoyvly)Qh<;U1p_NH8Fm1i?bGM;(Cmo%hq}@J zHMXd>>2Q%~F?{&BJ!$>AE-Oe>hIzC0Gp(!#R@S4t^D?c8zAs|n>dsg%#MQIIwQ#`g zlA)d<0G=VF+o5s~4J4+24qZEd9SZ4TD6t^Yz&_m%4$j;V1ZVbO_d*=tR|$PP-$p#Z z)@V8(kFLMc#q#TPOlP0y$Jt`>aWp^UBu+WW?dU(hW(wEJVbWr%$H`*yaXLO@(!wjr zxEtN}W|hGS11H3@?q&sC`tQl|Go4%yuRjj#qW*X?yIauv`Rs9WJwD?C_Y#o(Xm~fUe4hTK z$ldo$3LE?|tRVo-8=X_nPrzTFi+AtJ-Ym8K0Dn`6i`r!O&Ngw$erN*12U&clJk}T@ zY|yp)H0s4oC<+0M&gnM->-J%~oZK@X-bk&VaT?!ROzv*lCQ;fIqPHu_Zb)^mO~{Gg zXoYgBqNOZmwq04!LS(HILCrvkh1bnIZ)i>iBVf&ZGWgU0-lOz}pN+$dkDfo&bYlcA zZu!Ab>@YmJ575wE3r4^e`9A%2x-|!{+YDU*a6s-Os_X9Sg^py-FanM|!1SrdSOl*s z`XP;a%?mYT@Ie?xKn8tp@VN`Ti|7#=55*3E3+&E}k<4T$aJVOv;R4x(89HCxCPxpr z($MRL9tweK`YwI$H5SON7YxbI=dUw<&5o*CpWcOwB8&*L2P@yq@#&u9|V28Y3Ks($u=+K83hxq7XoFC z46SIpP5w$}@9};cz3FedwLynB-3-SSoO2O2xWJ|u>@Y9$X*RzapE5LLD>lC!O>0+U z!yw~E$&9{`T^1SX`lU(Z9AiQF$X|-%{g2dbn0WXJ2=T19MANj%k=~?YCjAg;I%<0X zyadZ^NqS%!pr+B+5mq!G9uS`sJ5c7%ZNFl$T=#)_n{m+@j!)m;pc*xV6{x|m3X>`l zU}n9n$yX0nr~V;S;7P;(G50L(ZQIJO`9HGBDtJFWuWUz7*ea5bCFk6@3x2XpyJ}U* zmF1r1-(P}~$e}EfAOI=Zv~FzzgTcHp52tr*$KzlEjzhZCf|-vs_!#GDaPj~FG>m1rAo9+8 z!&HG2>jIC?>#>q_sDG9MrV@ZBJ9*rqeq@&7f&4m55jZ5O&`4)FLVy5M zy1huViXD|_@SXoNnay_s{iV|aB441FtAhvdxw|L=7Pdy-K?j)Et@)0795oQA;sP`E zy1;h$kAtVsU;=9Ws7|MJK1; z;QYe)yVvKJzlMvkb3~)t!LNhie+S9O^YMAU{4s+0rq%MtcyxYo)F%Ve1G+cpxQX>; zl!Nau+KjK8Mi$OS2dC#<{5c<-v+6F^^JX@if7XIU8(&>NrbCA+LCk=KLwJCyC(Ky% zkS?Fw6Wv=397a71oKwks#sT`g3$-ul`zkK2+I<%ja(28N8`Y_v`$_oAh}% z@5=r79GC<|S4@J%Z27^Ih<$i@p5?RpN8dA^{HqYLz#zava&V)CY2m{D9A+UrMs~35 zL_DGxMZcWiBv%>9kG_q@y)WStnYb>qyl!p>gLv@i2*Gl$Wgdqa|8d(RvQ-vlC>21J zOQ2Ag=%(8wh{lFZ{t<}S+X1XG9jEvBm?1cXAwUHOAt+wFT)X0)5Flx|NYW0tClv5K z*B(-ekWiTy1Uw5+?j6-61X!6|CQ~PyzlPU!rO#-b?QYaid{+e^A1$>ZAYasgkU94b z&}C)|Sk5~uh!olQW-5m+;v>OOUEK_C@*yE!Jsdeg(RLj6e7;%oC74kokd7| z8~1kb`8)5Xw!4k4dzbN5e0j{hWb`Ti+9BzYHJV*t069R$ztZh~?sACAU~&k^Rbhe! zwP$J!oAegb-zSSOZCglLElmWgzU?{L0i>+=REkRfCo{splNr^%PiBPi^1vL0fR6z9 zc&Ds$QdY)MK~XXZDBqNl)r4=taFlLHr{>IFSWqPv81m8kmB3Xfv62bn;{{$trbXky zhoU8Hi*Om*8pu;Ev2bXRMP?iT* z;L5a2(jR+pB7m8oQM2{5UZv@7m%;KOt>J|G%^UcK^VQR<8LF~-6Th?IE^_w1+oDj$ zp(y{W`0*xvd7W<^yCa|sL@tz*PQR<_0~TeD-}KKsh5vH-x>(;X=DT*ncVUeMihz2{ z43g>5%tA^)Hz_W6jUHPpUMnV&1Oe$Sk$0*uB^XE}l-zgXf;%hb?MBwlTtK)2ij6s; z=FlZw%*wi^s{2KwZ0+aCDjiLitH!x`1c$DszJmlm%$@7WJfo)yyW(hSm})nUH)pe# zA1ie^(0*Du>DlTfluf0ODgu{*-3$u$ph;UNwyIGLozC@5Iqvp$J4jgi0m>^>^P)?wictsBw4Mq*e6SlT6v$Q~?v1Yrw| zIl)VV-o}l1-$?%zO$r^xJd^KeCYt-@Qc{>-P{JNuZDXHh-13qwwmS3pBgb% z?H4^V%!>f?(xQ?l#7jjc$Wv+DdIu(@*2&}1oMVb0mhcWsJ_feCqXb+6 zDg9$L6hn&VP84vONm)cuaCSkD7!9Eqk`_rGj>n;uuo-ZIW%1T^7ueS(3I<)(G0{jE z5OgSc{K3&Q4BctBA#;cKL0as>>KIiguTxAnVHBVXyGhrIdJ_9FnfUR?x{L~5F)pq+ zn0@u$>aQRZDPUCXe7d8AC`*5gWiC$ogI#w(+nPBwD7d?8S3g*92rz!kRrxNi;`4;M z^As^+WfJibLg@++sz{!<2jvZ4#}5$j*;h9Uo67IppIAlJMjK-$UcblViIlLW= z115h7xVmR8EJ2DFwXlY%nn!gyq<8ViG~W7hKKPbg^oN(fZrVT{3{Wp7tM9|-jQ!Tj z6IhnF0~%|FC%c_lx|mk;)0{mjTJ{QJO!{_Eqy#KSh2xM6LP(uZ z9xWfi3&F==8SrRC5 zoq_@y#!xan6)tFA=@yJahy)bk-MyTGbbi*cM2&(TB8+)A_oblG5@S61y%Q)Ld`kij z%@rAfM!j)zJ&a8*^e$)FBHtHML?`L`&Op%MEbSB9A+0)ILemH!im_-ion~IfJA_cf zCb>LpdBb9Wql&%}?|-v`dcVV@A0QL}!jk)roiz_Zw%1v+9<~YzGXwzH`PR1I0?|)) zBz(|dD!uxWN_F(F8E3sMH)yAb;!DP}FF&R0U8RB*ipsB9wBd~W+cy{oe@LT6KFg@? zPzTztij2VieI6CC{niyYWYL4P_G297g$bj24sUFRc{Q8Q!EWHHZ{h(aDcd z!&jwzQjuv(9n8+*=$QSuMTVZYow%ow1?gG}S(ldDm3_J>{(6Qq*==1})#TUNQHlVv zn-}d%J~`O;wh%yvYK_rVzoi){rn96k4k5+x*4S9} zTd|#>d_JGMTik;0S=_Y(^q0zaQkIYtDG|9oqie6Mft#P3N z#PTRxNC8g4lKYT0Wu_$mbKAT5mcNPJ-t>-Rxn|b+Tgx?=*_|ndo1U2~a>RBtnZ2`J z{QRR$=u$L3ob6&r+fBQ0hynp)<=QEv!Xyeu>E^X;2bO!cS*n7)HGs*DOgg!$Cu&|x z!N^c1a}nU#WLXFjUEK~Y4TUA!*4GUUCq?7SqjjfAzebM~j45QwDaYn8t=e^jq^jr$ zX%6c_!0PBdF)5fg$rSCTArp|TI$dSVdk`){`2AKlxslcAJ$xLj?*xTtL&9E*KoU%1p z(=9Z{7(dPa@$SFJkRP=XqETH&0;D{KaP*YH8?RH(xsnVF0%p3KoM&KiEz{m3(HVkL zrK#nh&`lTlIh{YdT%-r!rCGr-PVP^&tpwZpG}&f|AEAw1re&=gW6H+%!@tgoxf||h z#K@X84>Dl=xSh(SU>yCKfm<1gVaH8iA{@ukpPMvTj{3g;GB7oeW6{8zk~d#vkmqt! z1O)){j|eePQ>Ad(vcm4_DzM-H4lko9Bcu7ew^+~Cv((+$Ww0~#{*`SYc)g!ZM-#)) ztG3@aoQu)3e#_T86GCx)_P%zN;)??*$75*eoUH7-^Ou`{)^kUr4PrvP+xu)wDXJGoI|R~vGR78xjLP=G22~1_ z`7E|UW}3cq`ff9r@AfwS=s~tL)W|~yx`uN?yYS}YE`eefbJ|;&) zV>w(wd9R}t8>zr7P=&YO%?VS%m;?`HPo>A(N(fJ+-2KOL~dpI0aj02zra<9c>&)$ZW z8DFa8N{vWze+o%}0TU^wF+kopB!~bUGRNGeoQ}M&Qwwkf$O#>_Hg|WKq5*L!ruSkO%~l zlRS}41nm=@{P82sje%XJ+A|an>&y9MN0uitJqaLb%}=D{0JCbDJeA?X!NFblw3eP)INazR())0##>`ZR4{W<5K zyn4hp5gT#1Bnt~JgKHaObsAX^gk@a$T|9ct3!)9BrHh@YdMkcR+4S>z`!6dHur&zd z$?7Rxf6jiMr>oQPOZOuYd#o;BSJQM)&-^UfF2m!?di6S8mp|1WUp1b2YcKmeQkZ;+ z`rnj_k76u}CvZlk+lWK>P9#8D0`-|a&jhwm_4VoWop8Va4wz$}Q^Q^r1d%+c|9Un1 zXR=PWcU?~@jR}Oq=T;&yO`6Z@QCE4X6d>P|g{W_08F4M2+cQbpD1q%!!cQ0|WddZa zvTp7dlL&kpfCs^gGh@l5HRtNhJ3U;iXoHNlumyY5mCS|;|1o87v%r+o(oU@RkETi1x)jvxd#n&BL zH!9si#p~JBqYSWm?LgHC;hl{SDy%cZ$+rgqQ$QyRo;-BnHVxQAC?7*siBLJe#iIbi zgb3fBUkuc!U-YzGeYYAr(9C-r z*;Gg6;Cs+LV57`~PLH(_2Ze-OqGWQs69K6%aWXyLiGay1S#lrH@vaT4Za}V;Bv)5e z2wC*J|=Cv~vAt}H9nr&pNi%`Jz?L|KxeYT_6#+uBV zbUJ$uW9M=LI8+lyueses;aElM$)D*4^cP=B0@77Uk8Tqj%V5+El%@8z@Hqz245d0* z_?!Sn)AV?EN>JX^pt#duEJ>pA`LD<9yrppTDL&NOtCk^UGegezn?%}#8^*t{mj5#z zeI-))bvY}i6%$=J_ohHa;BGZKoI>{As{`D>+lD2-0(cYx@DQgdj1?-Pz#rAB@qCo1 z8eb`sW4exH5C3n7VOZLzeCoA0tll=%x?DYdm^@FiKm0IXK0VDAPv+n3j}QIqzrfrl zP8lqR<9R`34KZRwnu#&9>!x|DkuWNPm9YzfM6FHZW96_Skqk48yO{={(Y-+4&OQf& zR|G=IeZX-vd3Hl}GoyZr>+)_Mz!?su&cF;2fw)harY$NoL`6O))b|Jo9HHp);zOmh zq*A0q8lhT5`82lVn62J39o8F++61ed4AFFC8Pdu+^%0SYHT++ zn&e$ z3!?4bhmVgAAwJMbUSOYW4bDRaxjB~rCKXV8NJOL2d1lTQug+IjHn^9qxL^3QoDPLP zFk?ZGj^P6^{6G*I6!mNm^#cpcW7LfK@7`z^BpBL(v?8J-+JWFC4gD4|ZnS7e+4&yI zZj1H~*4yR`nFB#V-ze#2>$54vU05~497YQ;F!#Y?*FPL|{4c)JOtqjX_-aGc@esnr{*UG(rT@l7EU>L4ZX#8bTskU=0s`$)0aPDJVa(8XPD zPd}P3*Ih_L>9^fQL%xv+#6c#AbbZx5g(YupibmT-w-$z{#1kN~MsV&soQ^AKDB{M_ z@*n9F8AyQ*NF#12PA{lLk;?-*Tmz~t9*m@q0r}qyiw-#l?vfPHKW`T%RRn4hP3P%k;Cz->{x^0IJp|$4vvvlBr)5^;^rYN;0`qU7>~?Z3KWid zc9q#U)1Nu&rYh&NDUdh6}2 zb(VJEEqtH03%J>a%ayDlURbW|Qn&9R5``iP7H^#3NI}dl<&NpCLJ{zPO|Nu}5RvKFAO@6(_EBiqX~8=0{Lvg_O6mk-W6%6AxyviALDn}Tr7PE3~TaK3s9 zqeH`5@46X*l}Jkf7>W(hLy3BhL5K~-ox-vxXcR-esyh-@2fC=t$!N9N_j60a$Vrd+ zi#AJwp|+mas~IdM%~(g&mCTSY-(=mgBOC^`X3Q@+0(Y02g98SyM+{O%D2%Z!<+vIR zc>gWhu9u4R$!w;?hlPHaIkj@7nAz=WzEBX4$ZS$Owkfx|cE+s+d)HUG4+{Fn=n$FX{rHwzxY)CCb4*fwZUgsF>rp}m9z0+bM|594Ut zG(*)6(k4V;La$BSh#U;Vv$$zE6{aqT=fRCbMViE+IE2E$4&?S1hazFa7#F0Xd&O{eoELZD{h;)9-VT3!a1Wup zXX)ORZ=K^IRIoUy>YMgy_3#+(_S0xHSZ#BUn%p^!1u3-zq^IX^tNr6@Blh2SE) zZ-d2N9=;(sKg{}F{1dhQTYiA5mHB;STtkntz8dLLP!N%|%-o^(Tx7tT@czWuo{wf9K=!9Be{9XeBj2Y%8?=_y?$?*!J`dCdlWr8cL?|0=N zWwY_TN3Bd>AjXX7L9yc1AJmqu4a$r8ai-_qO3%A7jdlFm#eGmX}{qI zNT>#R|9*m*ijV0BG(ve!iPSr)+Ce+j{R-y6Lo!u28C)I9?RiOvoS3G{Y&`zw9FR=Q z5t`y)y%vCWoiK%XG22$*r=5XSFPqs&Mp8or3&Zht6>gU6KaM zJ->aujHYfAMB_rR?yxmm11Ecqm?z-S+|99G+v^`-Oo-6XtsU zLw_CwLH6n3YUEF^{fke7>Bmuzpl$2o`touzn_N#@!fz1R6&r9eLcmuGm|tJ}m)Fye zJ>riPY375E{#UVx50gt-X7m( zYMT-TfWw(*t-Sbvh6+;=@4=s(EZvs{6$)Z}eSo+bSt#5XI~QPwO^X>aP{UKE+L=DU zfVf7P`}t5Ra9pQa;Ou*9q0Mb@)G+PXNlAz3#)ZdB5d#tmvp$U?W$%`_RVm8+suULx zLe}mvdNExVxN?ZG^2Kd%dWhqz`P;=-NDOkLDiY3=JYi%TjcklQcwjlw~NC6rUpHQx{r zt;XFfy3~}GPW)aPb*82c4O}0@s~6U9wG-a)IU8#%Bfca%;6&Y(rU_T!Y(1COWt$3x|V7y4+O?S6|+3N-SAwagbI*>=80nkZ*1$ zR~1pbZl$CAn~e8qD%%PojH?y~!OAeMfFmHL-TD((z(Sd37dK4AdknUD$PfoevNrz^UD;;von1u{brhgET-B{i)ZGbf*5D6u{{JrmpC&H z`r{zyfHU63oA6dT7$^qDS^Y(&bCrD9k3rFddQ7)oh2WUdv2=IROTBMaS>l9%%%(hMvCPKND)Dlm@fBQ6ewqsIEMIIAIe3Le4_hx_|lD|Yx<-ydaOw4WB|(+-}Z zgJ~Zw&Ky8G?*C|IoWvPH--7K%h%)on2@c{$8a3cK`U!Cg8|*1VPFxKp9s!qkdf^jx zCm@ktwW#~q2Dgr9oUP0$1yna~A;l@=DC1^-95kioo>EnMyS|w9ZE!oCOh5WVA@>K< zi<3kiGj0tBS2Ei1!`2|9vF{GQ@>#vjH=(c=CE~juDu>|OFR2~0AowE*naONm1UfU-5>+q67@*quCr5bjI0dK!nSrbNmRHeoC2(0LxujL&WkDb~-ihNV_Ema?i|qFe(NU#J zRmcg%r5qJapAaYeDcnAUHRvEa3m!wZ_kK8Oh8t5gAwP!u6tmLpBDLEkF-(p}2fMzM z8jaQq4wdwI>6$?rd?I-gXU%fDmkjXiEG1SjIr8t?m~SBJ$*V4URTOufRU;1+!SRUO zElW+F*k*e%)aO=*akdE7;qook3SLh=;YkeyN!2|N0_-~=8b5I@H z%S$o$cFjtb*VpL8hIHq7bZ9)ksjF3`ze~3P6`YCvmbwk+Y533oGmRV^N6b#53phaP zBiC4eVblgV6a3d*BLpm${bksB4p1hE<1hX`Wt>A{ZTFz=IzYd|j=$)!*o_DM!LH}8 z3LbDpfADnb(V}VhMbDzcb`chYUQC5kSX_&380^F3N29f|c59RWxYV)JxVAqhOC;~{X4zjDky&Dbf9_d+pkQW%_U_;p#|b{yB2}jKHAFAwPf}V z0`V;Zg%RS!20dUq_LRLmPA2NYiLeJI%3AHdYq8E$AZh619I8}zPli50U?N-gl2Gm5O_s!>xxKM% z?SeFy=tHn6`Iby!36^>?jQ$N*!MT3km3)rW=aU<4juIwi6kablju=+UI|7(kG8?0O zVyr%|TOd>DRV~m_aKHk@Rz};0^WZsHJcj4%=;1+Zru<2MoL@#VAr?w?VqIRVw9(QH zrHwZf(xNKG!OO&wV>^ubcgr$qk+(IsS>`=Q7~5%^1C16$WsH72tVSwFYI)=vV!PL2 z_&i?y3TL5^c*|Y&juQ=S6;4xN+waGRa=R=OT78s3r7VAYm&qZi!=z!a0O`ilSIDf# zV6&8J#by_+!^!6P5F-lXR6N(Q#OlRv?Z>OM3CP5FB{o<|`jP`X0n@yBj{FKv8o<1( zXIQX6yBJ_t&1m_KWCbdU#5CJ#!{!<4`Q zLIev=Qt@x|M=6a9NN&T2@b~#mu-}JUs4)v>xgE`}zuaDo{F}kWKfc%%NBlOQk8Y>s zvvWIF)v1&T;>7R8f-2~VT^r8pD1?*a5nHC^V~Ne-SWk^j)>$qw&zzPr^UO&(XM5Pl z|0}qIfp}1kQmvdJ;#LG?$|5Q?D8-lv-Q`(Gg;gRGzzLZMeefYyqqVqH!6$4yvU?9Sx~;h2&UjFD`4 zKKz0hjIkBSh6^{po(rGYG)Z7iL{!qE{NDPUe@D>q35rx50Q4by*jM?66M(mCMb9_k z_Gz_~jkzwvU*Wp&6~~tFl~wpDTs=JQtE3G-%YOBsR3_F-ni!sG8yce0`w$7)@=*}| zDO!fLnx z9O-DY7TbCCn)Dwc0Xx_L7{b~JHk;@m7BN`$P4qi6Xn~R+`oyt-G$CLZl#pCHXF|yN8 z)@JFz{SLF9l@>e^il#iI(V<8XVOSk@;WXF_O?$o#HoND9XemLFE4O?rE3K}cR{J8Y z9qT`mJ&%wYyYb4e1e5GlIR*gK#z{X#X+j?n1CWBQI0x#8W+fg|094CKPGdU)jaQGDL9*Y2p1ejH*&^|*vK6poH$%VDB zT`r<+Eef_SpNfEz1rIi>r(nG+%0iN#Z7IC6gFOL<1hyp>xA5(&OU1K8&Prl9KY zKSD-qV$$x)l^%9n=_#r@nlHcM9n7TaU(l9xQ^!-byZYdmqvy*e*#5Z|!-IXaEx-Ah zHf#2L?b#T^n_t%>fCQn|bG}aTS=Di;a3BK%%XMAeOs)JRceR; zJloYGoHN+-@b`YO4TJakpJ$70v|ir?oAB5T0!>I}Tfwt@4Z9R;ImrasJ!=z+{k!HA za`i`Kols!b+rvh=X?5!>f0Yyrl-`6oX2N>j2WjuDQoFhA$(w7Te$)fg)ud)|R6rGu z^*ZjezBB}gPU^8a9`Ggfs;AZBe4u_Du~7+dvSi7d`pOvi2KDbtRyLMLF=3?OWq+=m zSLXvIMMm=X!s-}Uo$Ck9S&GJrO|ai(pBJPUsM-spg$tyG>-e#l$LS5;=m<97iV?`##?bCLgt|GQYHRfGjh@YrR_=D+s2VS^ZgEA zax$@y1U{eAjyo-l)6T?Bdd4~MVC`>xzOYd9{XBp5 z1_>2inW)$dY~KWJ-vBh5Fy8Kpr-#*|0(y8-)Vr_$@4Yo53I#)=Ftx_eIjV2U1;iPC z-R>TXe$#GxG-L751}SKV3ul)I&S~`P)rWUFF9n)>#`sI3Z(vAj1b%kwak|p-V|8Ek z@h_rpPX`1J-eznAm`qlHIM45nA{RMEF7hC8biD#3DfzrCcdGL@WwqaJzw3~_(%J7J zI_%qlC9c3p8BJxhP!w0}%9|$dYZg5e)x-IAS#}@V2L@d-hTZKP4jd?AQR3uz`BC4{ zc%zXB;~!cEGc(lTpokQ74yUr(_p4&v6hwP$OL)y}s?n)NL&LxFl%hk+&}GNoclSgd z4gle0*IWjccpH^}J{Rk%`O_neZ{*YS6y=gl9yNee1tITu@@=)bhlPOC@jGPCq9R zgPTJ^x~_U%KRpt{DdD;+AXG(ds4q9h9hR{a$JB>Fs?>K+pR6Z zsBQ|kq!pTTb!+23rLodMqE%HNI$0?q@sR+_&fL;(_(>{av=|mMg5{z&fpla%8$_~R zrzye;-A-d&z!E|H5a%_tLiq}-<3!mIi--1-EX+3v6r-#TsK`yBfy7G@eX(P=41lC| z71lsJl=dMUtf-D3C{-^gw zmv>_{olzc2G#E(Yz$gRZkTmzMhX@G0hXsk_@prH`)FGQn;X5#lfgsS?;Y``9O=hG? zDGPFWeJJmgjRpCqyIt|!7=N51ADt3u`MtZt0YWw^coLOEoOWjtN9(X#{TT>^=YPX< z4L^WYu-@Ly0c%8$2LlyS4RvSEtwT=epdVp%iS3FHw z39Xsqg|1$oZO5YsrFJtfq5!!Px+ZLxJM(LT&`-2zPiQgrnbNKmu1l& zB>y~N_^SDHl=v0V$*0$sA8WZgsj-s(JevLf`uzMtZDGG$UQF&m4WC3ev-5wc4e*%8 zY4pq0hqk24#I{+~lx=Cp_Yhbx-%ept-<+}9iW6B94<|r@@3CoG+2k*+q$e3t(!o8K zk4TImI3YV+-`?@2{PKK1+uYR=g83^C$j}agyho%U=x zYFm$dU%L)*zh{&o?-gs$pUh^n!`{M$637BWLzK2DLqT^`3&`GG!0FR{%gb7bR%42g z2jZBzi9}K=$-f-c?J(U>5m=lfUl$=AH+Ye;x|(BM(Vx4RZn5M(^>Hv7IcID+{A?cNXGNUsCqF;P$X!HS)Bjxn8>D| zQN#SAKFC4A&V6xj6Fi!?i2d<98a4;CFA&KQ(EUnX;D&}mY%KO`1X>~wK2nke#n$4C z8Yplf8`^l~>NT@=2(4&dTHdfgZ3)O$)au@~m)&d7hwVBs+OcB4Jnp9}2q>6RJL~J6 z+={=<-B`0z4@9SX`d2k7zMYRS05Lse<5t7enP_G`&>@bHPl@3(-qo9&zZ&yZ6bm&hL1_YW!H&e1G>HjnAyBsVWmF!DbmKU2+7%Nvc!8?P7-#8)q^_kbGzE?ukN6fm$GZe_vPAm;E1uTx10Ow^iut=BP?dV48^`l@9T7y(5r4J(6LwSH3 z(-=xhcSAMyWSl?zpt`Kg666-4Lf1<6Z|$hZekD9G&M7j^NxmFmsrk%3^;wuR7P}Yx zHy>%G$KG7hNXg$_vG{rnYXSqFbRQLHe!++`l?7uVyjX68%P{p|Czi-4L2{jp%XO@A z2!;f9l8@=#0opZm%8{>vH%Za2oXb4vmSt_nDQgpd%W+veMRz4xFE{b^W_ew%?}Awl zU=G2vtLJ^ST9(&P=}L9;p;)e-#~gJ&M{dkHHEJ;tUQPx=^Y+GBmy5tR(gP97 zNS6f|81qW7pW7>DgSH8Rwu!{Q>*!^SyZAvE5oA*(e%H^jZbXJdU*mS$Y-ai7>&#cJ z!J68c;c>SFDQ2XLVOS(x$5}pE#W^*WksXp^7Z7Fna%2&n-SiD!oKDGYhrRyux!9FT z^y=0Au$qE{8EIbTKS>>=I7%ctX9cEaWisgb;r)yE?7FIbYl=1!lW0U234j&279`r} zX@G)>y)~SnZAs><(Z<7s3l~%w07*3^2r}DN{0k_5Bn!=RA6O~2*JZv4Z>zLBjZ#m7!Pa-h z6CR*R;HYl4b?QZLjsJcwpK%r}XFAq*Q&fY;#T!s_Q>K<=Ku7yhp}N?Yc=iq|w9?oU zU*c}3R(1Lm8WZKKD|wwidWIyXF24Y`PMta5gux+kuJr-CdXOq45sh0Yl66;BVft*H<#cEUMQur1b zLTEY6x9+Nf4Fsn&>&^r2cK4%y6c18_!e>Uw`3Y;se9JL8;UY^J$g*jZ~ZtH&lb zfi)6E>ih3LmK1nmyuLTU14ShwD^Tql)L1eO@)Pu-lT~S-CKq5f9#oEh0qoOwc-5Y4 z#*WbA;Kat0!w40sb3jE`y$&wRV(kvSENvpctt$o2)rXfT__5_`Wf@Nf9io(-`5)#JVtlGkC~S^a$^eX$pg9_2 z&Cp9G;}m&wO(?z}hqBNp-Dn70e>^3g+h4nT>48w82r8`)B9sJKL&Br#0eDoA%t4w7 zhm?n&R%2}gG>M~q?{J8FTSrF#1w`G@^`UOIH4WfSl>N^AehoeIzHCq1VTr038&2PZ zh&qx6i#lCu|K?!N9|d=&O~@A9Ovc`n@)H_7Av!VnJ^Y+oMj5ULrF1J@Xa}9iVz>%f z8t04tb6ig?CHXQCR+QliKT0>d?{|#LI@Wmt_H$eTD}`)o53ETrtY6}wfptgefFrwb?R@kLv9Q4+T7`+I8P?uLWyq%+kF zC8V&{LNMg;T8bP5oMcVQp@i9aZ$usy%OxxyJLKm0os^(ikv9KvZiV2}SVoI=S?qKl zP;hywO=VIiC@qA?-C>cT z$=%{sF-J@JL;|#E-JpCySr!ZCABhvDsq1t;+iU zzFrN$961?cq8|z9n>F&svIjj9Ytng2VU*pt3oW^w69FuAL~tfWsTHxLqqCUbj>R2P zbkr*r{vOr#bLJk)>J=rOz%^ZC^SpJshg!u>^4b^{~7lLYN3h@JovG-+sJyciFYBn9MQd+oV zXtG{2+Z~w-qFsyz#KT?DcAsYDUWqNCFwdpqvSDa3J(y#f?4UEyYONWW}jy5GEsv6DM>8Q)7 zb)|+(YNw1Xcd!8Xr3eEsGK*+!K zduvk#X4W&x;&G3Vg>NgN4(f!g%c3g(SnVIiicwQ4>>^cYt74tXXQi!n*9uXVbcahU ztnp+dp&KA|Huua3t7BF;KQTvgQRM;=$J0*-{0N+tMj~ko=aF@~wQek?6M|NmwYk{A zFiNb+*yX#q985+YF}b>PDhVfET|-AlgJQ=#PDm3wu0_CDg;|FjXJ>YqWt4`%k(YjO zvYCBD0Y_j@h&P3_LFS-Ac=30+c!ujjF-94}sBDv^1Lu{*<}A*2xqq2VT@L4=4l{M_ z_!GL4fN`2Xi~=OY`suEmql|ZnF+YVXNq0qLUrfMul0*t=`(m}JrpQE`)|0hGOXhz5 zp_qS0Ry;)*W=Qz@ZPOnFq`7M|Xdj9B0vM|BVjFaey^ztChJ z5(}{qfih^)R_M4{+tLoXzAw&z)Owg`Pfxpv)iJt}1L|5>B8pWakp^EWaUj+#BnfkU zCm@M=PsjyQ0nSxK05x6;#=Mk0Wy9gZQz^wY)vcai)$m21Xi-90O7goGk&j%Uy&@f` z&Y{Ld1jj`_c6ib@Tfk!7?iQscrSKZj;LVu;O*eRU!8a&FY177Y7c#!&IEO7sn(=Rr0uL_X zEz*251nRbL<97V?1w>KY8p;gtuVR^W^;i zP7ib?#Uu|!)tc%kTWL14Q^bj04= z(-bi-X|ipDIG*8#8qOgcKil-Ad79vUAkTOaA@%>uy7;GL%TqYGr?jTW)3=xZ8GEil zIb;#ums(?Zd-IW9!NAuk|eE(Ykp2vMf&W)n=t%I-y3f6C_uUJ2e&hd4Br+ z+ppXEmN15X)32lDwFgEISN!VJ;qb8;K9gp6?V;Ci)&F~ec=^Y?gZaS^e()DhRsFs9 zwV8zGqP)JW^?bLjs)u5=JNTh~*+D283-$NjR|Ggs-K_#@z@z}IbjTCrbIJrl(NJIp zn8Sp8Iyjq89up(xxU7h=bQf>O*wVXOc`J&F~OthT3jt95z$zSuvU z4d0S~3;$eY4PxWb;W8B(!*9(I&Tb%UE< zuw51+fwK~$aRR$ICM8g+(pk=Z9&oxtjjYSVG|ln(Gw5L+3IO79JcahbL!%`&6riat zYTvA(YkwC7dAw*-uE{c!q`tAK50hc?RQ6H-5Kv_^WVMHN9uWJx>_ ziXWa&q5#x;P#+OIt*!b~?QU)F3;L~GKl!0e#Mx|i8*uM9m8P^doGu+J*6J$!)wuM+ z2E@l%b!9`R4DtF5>MQIu_gFW7&1UW@Nw?DzCV4DP5nhpIzB))SWow_WYd4tAlx5qR zV!9H*&kK;SIBr9(wQW2)YsVvmJI=Zbu~-cCy}sl>1L7H#2uQ3oIe)m!U&0+nnyqj& z;jY?PA>kWhGWVg_L|(keow_DGNkyhj-lIzjGB^l#aHY|0;JqFplg${KtT#|{xTDC_ zy(+{Wmg(2td_B4BejfCu>q2H+W}1&X-jp!v`8f;!5t1S|IB!M)&*ga z7{q=l7L)!lT@=m?T-wy?$qGk!A2_`21n@?qiME_N`?} zw5m|)@iDjupi?0P6-1-7O}&~JdRF~#OV$!}M-gZK6AX0*4=#6WqP>|ePwfWOz)4V$ z%^6YxyTZrT{8FOjZq1UDWGl1kHP3H@HjZ0Q_7a+UEMkJDF59V(h{(~66Nty$=p<6% zE4{2$Y71BtoD93KzrbC)!$B?>Ad6O;Z^e2AJFLE(t%j?8vPBAWYm}#Etb4iGr=Kx_ z_LHQS%+I8nw`#b5TRfH{F<{^c(~KO}pL20p8xvE~$;73E(qzjfv}q^gO1M7&%&qsT zl@h-?3>c<*G){ZYP0$NyB+H-jzz~87wWF1Nc7wWYC>cxDMz>I#4pjPiuF5K`x)_s8 z_Nt5ZoRH{EQ{E(lvZp$r`FW1!kTi3!(jo@TA+uc8D{=SPO>k(OtQn`34Ho{Wtnv5T zwo;4m0Rjc%A#c1g%2im+5oJ(le^vk$qFc`;Pnxo6ZoBt{{6BBc(%!bM?3({0o2&v7 zBnW<4DUsc%b!{Kp$w|`%KU$(~oyww)Bs=x}^%nz>#DF9~(Dl8G)^1ptk(?PtxyLD&`@UQTGvL$7xbw*99l)iFd_*#XMOm#uA8#M(_vdJ z{zOKvHP)dCnhEDV<~~6NvZmNSqokwUsFGSLx?s}WS>MiPjvVW%ZFp~{#WD+(Vym0j zYiMB)D9yq)oW%VaOk1ojwwsrBR^uuPe0#2^vtj@r#{ex5zCUgDLy4}BAP}3#p8C@b zR~=3oL9;WhHAWuIiww~t4ZB#<>03HfBHHkQM{%%vdfc6~brJ2dca|ksqex{)_Vu#b zm$y~1cT3ROpsVY0U#`~6;%F)~W{npfW->z6SfN8Q!%`#Tfsh3sW#*f##$w-`pdyCR z5b5$E$v@{~)7niSVjUcvF^%(GBf|Z_F(Vo0UO|a{0W^(*W{X$yS~|``A>c52r3@W# zmJkRi+ODpO^{cd_{yLdzYyg5zxpixaG&VYuQ3&~vC7z_jdGain@gy0YMYW*^V*(zZ zk>F?XSNV0->u-1HD} zwlJUfIDRPYT7sK@MVIKNu~K?bV{u8O2UC4Z-iUd&&ZHQ!ac?K_PKu!JPIZzKpX#r9 zf=ca&vR#%7i&z+%kZ6sbBuPi?>m$r1ifM>01EqO2%BlD-7itvq4m$D{9R=TYPA#dlX}(Pn zIn4$wYnkfRDznm8UJQJI@JixwRZ1FH_C;PZv}JhT#@S~G+;L4g&<&5n1TY(BbV)IxQQjsF8&BO` z@w7SKl$&y=3juZpsP(1an}1M>(?_pcm!SJfv^^7t-GTuI^LTeBufE`)rU3Ez({3Zx z3q;%;=w=Ln7D=Nf%M01wc^IKrNS4pkE3Z~_QpUQbg7-t(8v+qQk_=_CYXK2kQTO-#KNvoiy;rJv|h z5FvSe1<|f+8$3>S(29c^Pv;N2atcD`s4c1PxAu&owM%NC*X~0N#EnBF8tSvG)$~IF zfTnFA34VeZ!Svm`a5$A~o$rhL%9&Cuh@wjk@QLiPZ273CJ{@X@f6-jQn+pNCt!Y`tH(z%eM7zb%$O^~vkDJ;8}&uU zCB!Lnt1lqBEX>8zy36|WdS7iH-Fz+yu_Bm~1Zhs8hw;p=Q~hX_D$Ii!^Hr(_^b0az zMfHoIh+owWI-#B3)Pn9YdDxSL71AO39(NJgwTc&!z=DO3aSH=dytQA=R!%QA_{|;G zCJR@~jC+>FZPd?IxqCXw7)NjB27HJiKE(3-F^0OpQ$yyGTrJo9etQ_O~xc zA~S{FRAAp?3w3L5*3+n97-}kbDM(+jF^S;BY77~dx9}7!va81N_XgxL&amb|dzuFv zW1@^LSH*fe6SVx{sVVeibC&Xmg@y~oB3LlwO%b$H`aZCrf2X}E9QsEBWftJn=x`VK zDFSF3Q2Y1K4tHe|F^-+ts2LXk=p=t#zb8SHlD6N|r+CfnX;oe#}}_LNna;;<|&DcP&3c?H<(McoLBN$Q5WX$ zmt`4g!iTLSRMolLHNL%R)KC^48=!`=QcJb{WnT#vXk30-g-RXd>Aw8$Q@LHfbU)4H zp1+lXdtA=D*FIGE@&=a2P!<1jRupdn>_=v>#=9!feMagKnPG_l33st9B z{h$N_VGpGWL44VjJsDU?LlD%vF9i-gm)--zha`Zk-F2~9|4(U*Zy&&SXdS`8!D#ER zQHpN`o!h^BDFiGJM<3&cZB4d7gVfgeA_U3OW?W?0$`&Q8DadjKfu5f?Q!IS&z4UIO z$RRsm@mFbZ-$jM-4*`d?k&1^&V{Ny#Ct2u{1Pl#cr641o;3!9b;<{Pmjr2ntD zJv>jw5>KpWsJU7!J%2s~JtidW6ZD8s+0AuX3bM626_n`kFkefiuOtqK;7emXcoN*V zH$w9t7@su+ZeBbV_obgSD!zlF$g<+`T#%rB^>SHFl22fWHpChbfagoE-G~bwqS$O6 zQd#%ZbJaq+H{zjeB8wN>c04;G zqqXqb^w5zO2vL%So!^cmAxrM7IPQ1=U&2C+*+hCGZi-uwQRk}Qwd%6=D2uu1H$&An zQK-|iC2(9Fp3oyl{eQ8=k9XK-1pdhFY9j=z;_nEzkfi;M-{XI9muROALbAR8uWf+_St_j)ikVO+*Q4jVM9@f#izv z2-OAb73&egOEj+K(@TfcM~MOH49xEu(#b%v%@}m_)%vikwqh)$Q(MxHSlU7S5P^~n zq8F7i(0Tdy@!#w1s`|NbMoB~+fW=BlN5L=luO*E*TUQ^%!{bXYd$P%`G}hl%VHHIu!(7vG1$`U;`9m&4sXbwGTP&+T&{QJ zr>b%ZE*UZG0a-#&_*)!%1ZNmWmi1%K{y7~(p1_0+A~E#lfLctSRmtmGY4ZxSjpDir zu|R)W@53WpE{===R0oV>;i7_x5VIU2_$l`8!JgYwh(evyYiyaQsOiP_`DwFN5hQJp zugcp~A9-|1k0aG|YYHO@Iepju8h@OcU)%ZIyqQt35m-Ar_B9_N`7DcVZ9$(MkHx4e zH=oZ>PfdL;435}+G`#eLcexe{MvPl};Uh_yvnR4AEtE=vS}vExs9s_CeZi@|tadLD zkv&EZho2vNK2G%DmCCh z{t=E4&GNG;G*>xC)j_-tBRKu|-u?(rMG(tuB}&_;tg}wV&TrP6nmeHEwRs1}8=3mF z*leT`(J3`p7LYN&-2NCO$5zrfbIKWg>rh)Xo+K%a`_&i3=v+F!N60jiWFgi_U%@ml zZ=8Tm*hj~acdq(08Hr+=mkrB!u}l|Nn61>TUd7fpicwfRP4fTBS3C*@0XL9|Fx~V$ zhX8Cq5~&)xqmIc^G8s_X%E0A>L>sX>xZ}gpgQpyw5F|&ZjdtLNba`AY)Z24L0TTTAhdVeYkvE6q55wlws%go-0jQ&jkT6 zSPQ-j9K5eK&QOTvX)Q+~P4ne{^UfxCB&!+B_K($GDgoW+tSNY}RVxz;svLqocR$+{ zg^+%_p4_1%`v zT0JVvmP#-w9^b{fx`U@+uB(&3*GDg3mKZVyd@A?l>b!*1JMAVm4v47(nyvNuqG}dt zW0~n%ukHeeQlbZE!9gh`=A3D;ll;`jzepiY>d>QX28hxq_*opjJZMiHj=whS-C$dc1-4wz-3tS2Psr8vufJr(jaA>Y0` z3V6H9?Po}AI8F_GN)zPj$9R{>wM#&%rCSZh9`*Wr8E7)%?NG|z9|G+kck&HG08t5H zn)e|stts}kfXe5)Vqe}=`nRdMzP4R`G*^>!W-xmEK{NLCq3!Yb_!b>8hu1|3mb6r1 zxUO>sdVD6qro98b8PR)D@LX)1v1gRv_i1pfXG5_N5qR60gS6sF>RIf;uXdRfNt~Jf zTsQlnGSS1Ol*IAJiAA*{PU4QHk1U8hWKO}b-v=pbO}}B1@TlLrGNpu~H+Yj{WW!+8 zay$Gu*gzhS9a0Ufu<5O72g#2S(6?Rb5=NX&rE5UAM?;Xw!Y0}1o3bFP|963vB_u(o zALq*n6}6%?Lx9fmd(1W!&pkX7?B0+IR}I?e*Ya)Ylai3?ffvf`OEcl?9;uSCWU zx2vV2Tg5x2yvfv%%TT4pdfKZ%7u0Ph<9RV@3XaG|gDt2;DPbf<8z6bvdxLU(cjNkv z#bT_j_}frXg6ZC%oifF5G$*iFywUWSg|vY&xZr7sPbV8iS6_OW=uy*tV`e}+OaqgA z^-r*v@)S+S^IJ#FHk4(N8vUpkN%C9oVsB}`*qeViZA6fa?U^`$>>X*8FuZQbL2%on zh!Ole%kS(h-HK!NxL$sk$scuQt&Y#+A?jPkLXzKm_OpYKJG2BSV7UxDQ2G@j;k(O+ z;$RC3dGB?Pl+1f^*ZfrI`saji5A_c_c)FkI!wQ4TtCRfe<$QK?@|y3X;PT@71`Y7% z)DdX#?%V9_>&dk}4`8@9-+j6LAP?l1a(h+Yw~_QnQ=+n_#v*3$}XO2;~=RjQtby2f=k$dq!DcNHuS z&aHCg8xfdM9TDi*r+z=~Ww!tY>MT-PeKmNk31lG-c+cwK#DN|{Dl;3uE1N8?s>d#L zGCi?9(jKbgew`*iVsafN0Os$avjLcE5gf zrwc}Ui8SRLZH|$An@?m(S%g`V&x{$KF@(xSR@yx=R`q@JS z1}!00zZ{95u|F||CEad5=8doB{jXT8QSplFJ8-IOC+%qAu_c&+<1M`(9t(p&#)ar- zZv=@1K_bbEDMmIw%aXvF>zmotjraRuaC&j|`D89X=r2US7zf+p(c8jBY2Cfq?}HRV z&F5FMUoOu5KFDaCDh7UYa&~fg;k)AutV{6v?9BIrRLGr+U%to*P^IRW2b&gQ?*a=( zY3VhSCO`em8x_egt<7u%}&Q;Ygad>!0AXQhl{$X86oV|7-UHvj;X&4-i)ox6`GGdxD za6RphuL|0LO62AOh;(E<9hy?~R`5qYyB4E}7gn~tdu~yip#;-T^V>JtYK%tp*F$5m znsT(Pw!|O(Nd#FF<-H4ylF$dBXG$`#0n}*Qo2rW0|)?fux#2+&lADQG#G)-zy*IViwQ>s;W0h>@+4}R$9yv{eSzZ{ho zW#yq@S%Ob>N>}@)PJ-DFSuMWpYJk_xgI(>Yzqq?Ql*jIKNXTza#Cpq+3@<*3gBthR zv$nCWnDib%k^qEi34HqN1BAmJ9*V!p4=Q`$OY`@6DSzLT`{}V3g1^OM6+EJZCinvy z)Jtmg87njHI&zz>oC&hCe7O`*X%`OEvyDqzioI^3qp12>zXU;);x?lAwcDq=JFz)v za{uY+&eWFUSd}-MZC64EJv>(C6?8HA*0crpJ+$9~`je}&SmEENsa+un z$J8!?SP}jpYEJL^TI-`k~TP}Wi}60)I=R*ANZgUIYOJabBo zq-B~yB*gF4bNQ`&fXZJgg>j+U+1M}zFE1r^c6-wl1OMDId!k?bM$Vf8m4^ z=8gr7cx>xt#+lJBLX3)XQJA|fcAVG~Gju?_)Fmk%m5xLMv#@i-X*cbt7pPAe)j`-z z$5O`}%vN}iB^@ZEz;hOlEIf0^1&CGR(YX7}U^M$xkbTb9OLZd}meB!Q)~$eIJfY_k>{Q3lBF z8o(5~SBvisPIP9fFVerJ|l1(W^6aXl&?@(9maO zqs;bXe=A?QPnmuy^&NBYi0eb|LXr~w?7L@Xc^DIvSw0#V8bei#W3iXDGY?(3(m;rM zkMn)CYmu(I{Mdv|2k9aGraqGHhpau$9K!r^bgT+hZ3Lypbynj7D!nw9UC&tQ=zJyKt)D z`A%-*Pc&E32G1(ZQUDOaz7Yqv4!mYmAEViGxL}xb$RdAt}XTYirGV*veRe(3GRZd*K}Pi z|I(|%@5{z4z>+t{x?J$;y2#LIsMS|ERHKtZ@wRd=29}lN)P%Jiq_6ZrjqUSwCF?Gp zRn-pane7bqvF*Shrc3fW+d$%OY&IWG;Qx-nGBg;gqmk^4(YfG8C9Q?h~p2!;QHk1+sRdazPQLwzMY)koLyX8`hHH5 z=JS)wi?cIx07S@TzMy2p4yy7l^r0*7Lbt5~ju|S+)PLgNeQgRl#)rseJB4e}Uc~TS z^nbr-iWeQZ7R@>j`W88bz;9%cOFS%cOsA5?ae_;jGL@t0Crl>Zw!E0V3ttb00S?_n z&Iw)}WiFgaZ1XBBZat|oRsS=A`^ok7?3a_yB~F_Z=9TYpq}=;B zY^GH~=+@gBCTH+_$3FLdoH`;codv}b0*u~KLi$`1tXun+nRsJ&9P5WbWnUsm%K!eb z+`sIOm00C+Umk@bV$8{#IivoZJmurxp(>E1NyBV= zj=bf%QfaEcxVzh|x6ShruuKTAUi&WlJX*=z-$qqNkn# zx{%gwia>&S%)Z`y5pu}l^X%s0D!=)1buydhi@6-q3mx^sXp@pGX-{1a#2KU)vN*V! zozE|RABnpOS(6pKSoxY5+Pe7@d!q1I*zKy<}*$M_uwdfoX;ln!PV99c6P=fG4WL2;W-B~_Psa5@py7h z*TB0Tjt3vl2c0FDwTy25I0p*q{Wbh}PRG!@8U8VujnvE*0uRoh>p+oVyEz5(c^OAh zd?>Y<{c!{TS{H>^!mz4ryQ$EoR=6)xOyw_Muh!B|S;FwJ+Q>xG)gS5uV$}ax?OuLb z?OrzoY$791aPF$2kz9_Ud#z$e-hb4OmBf48ZXef~kXTU4`{jL_i+jXwy*eCp-8}Se z2eUWx>Fszln+@;GIG{!xV4#gWN&X~6`Dn8{g3CWkpS0ymyB7M01`@sGa`peSD@CgQ z+g-Mn`M|rMk;ne4RuEsbJjzD15WHzx&4W|uG?!KqdL;sfKUVo6ckzxVP_cCMxY_Qr zo9$-2{hsX?VqYOcYcAxkRUu=Bche+ceitsK?)Un*UPHCJo+6)X0qoiiqDEj>UYm_F zj2MY;bV7YC?~TvG3EHkG2wJzxI4nN!T7{%2@)@R?YVYzhPfirbBu;nRZ8fH9^RvWY zp3$dr#$L0Xtn2ibk$V-;tL=K7$p#u+GF#+ey)Hp3ea#M;U?Y_Y7Pg~j(#$6v!?HZgD$ zPZSqzPrCF4R3)Q9W*;H)C)4?dk+{-)nA)VAxE}7`riaBBoexp(a&Yz6bUc{8nZF&( zuHFpq`m(YroYlyun3IqMWZY~Iuc1E6@CTTAARxjxXyi0#T?^r}`5ZPi_s(MxsOrY6 zeI^6x>+^BCm0h#qyN3D3z|h+;NaodjP0)Mzr6=HeFdMk`;@rC$kAy-!zZ*^`@9wUK z)2>@HPrRju71Q>`zH$42MZ6r9%%VuqCKO{;i)8PxJ!J+z*|XjpbTS@uaW4K8|0#Ht zoqdr2vgel&m`T#C5Wi11P@oYg^7l!gfHkzmVpcVymEE=0??shtIpwHe1}|fr+J%pi z9qZ%&6iW`cw@@>dr~RY?a~X_{ExM$NOblY~OH^h382QnKQXoeo|EG~s&Ni*C{ezA%C9=ta25PM=C$f#1hp*_Sk_o4t@53q*V zOI#)NMDv!byaMFlc9Dch{@ehnQ5iD!UXRAZ`Sjy-HhepsUw)k53XwXWeY_o-*rSD!#B&-2B7T%jd;(&0G#HOQS=61_MT>pCQgv8Qv_Yf7pzU3mCs&Yj z9G018ngg|P(<)yK9*cNS=~t;Om7m*&!#Zggpy`A8^89r~XrQQgf~JjAV_&fR2Z_Iv zM&e)1enZMLDgHCFnAK@WEBig6@bIGeTYwq(PzlSl$2>6ZG2l_YHa%21Nu5tan6#b- z4fT+!uN;4!^%-2%6WMMaR{N*7S)P~mqK!|vx!#|t{>`PiE4{pL?h+pKu&Q%>z)81` z++YcWc#8&Z9z3V1LT@&i%qQb(=N^%FHF@o$tO1|VL@3L2})F-@<>JnkDTn6 z@?FK(Y}wKxk|A&3)8~9B6Ok2dEMlV6n3ISXI?G~Pr>J=0w0jr=$xUzftL?sAy_?9S zl8x)z*GB^e{RC;i4tykrcV&ll=G>m1C|9<_fjZXuy{?T|jSf;nwWr8v>_Xi$_IA|{ zxUu1wt4z8FbH?#X5hS=D^Dgfue+_TugXwfQo6cVk#$&L(=>|P8jBGLGI;t+9%UATM z4;XlUU9IM=*%rlZV3J-R)oW8hs*W-}EL^to?m z(vgb}NY3n~1KI%5sml^Gk981_AfHN$jyOnR(EU#Kr|08nzWN2Gn=GYuUy_*hE633o z&Ng-4x(Ys;Rew11;22Ubjc%OVC*Ft2-T2zMJ@+o(i3_d!474=+n^{@t#J_+kSPZ_{ z)R0Tl-^+%15UOP+Xs7+E%yg6WpdLYhdW7?bxg!Y8aePFdLG@tzMbn~(CMIa&sH_)i zzlEH*?qFhc5QF-4eft8ibvugTX>cL1VFPm6v)kDlNzHh$Ue}%aNE&UZ1cqwd{H*iC ziWyolYgsX1+C2S>_xLbJXe`?Huv;j@LScjyK61HGqE6Y>az}6jA8m9nU(Q|8EKQR7 z{+R97P&;5(+5A*fmkS{pfP1@QBPwmnXp&Y{b_>Ze+qR^x)E_nxLcOd@H#EC&RmfVy zrs;TCh!uo z8vrWN-HXm88}6(qQFx_{pAc-Zyug-mAa57qOWOOr24ov59s~Hk-vt*&4WwiElGRI7 zejj`P`tr`JLcoylDGG`gj%I>GOhp!$OP7wtFy+jaal0I1anm1bKZabt{q}Th5pHm7 z6-*x|#`ZRKY@Aal0F;M?EQ%IFuJq%C_ND2Iah6Jx`C3-3)DUKkA8iO^?b^$wog6+a zyX*%-e|;)UzJ~RMzD0>wFD~w+9O_Q)2V)huiu{PaGBq+$9!se0OY5VIVUew`>vQko z4umFQP>5i;WSdu92w7G6cm>1RqC<2P^~3zdXnIH=jYi_WD-1YX;2;xr(Iy*wPgjua zU;?GqOsqZf1G5QbG{~Pf3k7y5FJEK+mUxgQ=Lw#J%dG+L?=H(U6!%&JgAmz8R;TVm z>@=3w#r68R{)z%7xKIQCYrERCbYor$>$pw#Dkq>36XsB#>+Jsc*n*7_#zvjH7s{JF zwzNQbEaRk<2X<0-c)bL<{km#a@Q~ukqj~By`R`y1p-=wq;}6S6yA$(y`uE}3I@gBrz56Jx9`i|qU-F=4$R~(#^$kJ~8UgU{x+#b^^F&OkIJFWv3d&%L2YR6i388e!DEVo#1{4MM&z;KF`}6eYCEv|5x5v_@ofgMr#kto6V?Zlc^jENEQ0eZ<-*f z6g(;Mi-upjxwWsXox?Z~mCQF>^7qH%i%T?dqLDjIgFcLEAkr|4W*niv|_>GUuOqD06DA zY))=D=%A#asD?0Zb!#V7sK{BmZ;?PYw{H^Gj-AE^<*tsNBvOu^e!i!cM^!aCYO_jM zy6emHYB&eKWGazXWz;_dTp7i3T+1Tx>Z^qx*K8$rW6jdNf5@~q2mjZ3mdmRHiLAg8 zM}ZwL4VF?luo;iTdD`pZnN(=PZLK%mFb>g#r^(&ha9NWVDuf_<(|LLxl~RI-DJn9U z5r#SjxFah(l4gEacMNeyC=y{*%UGu_rvAUrL&z4}yZON%eksSLF|u|hJm4TJD34x$ ztSZX2`WnhkU^RUzdNgC>%#MK3GSd({h=#@EU5!- zjoTU!uQi?OlaysoK(Q*Vb>ZB)f{T~jk5RYvS6qAohU!ej_Hc!OTvUISQ3y~x@Z~k| zR+&lR)r(ft4%ZUYYU0oj7%u%GO(G2%64x?#kGX*)$!|*{YoGK)VX?vR;ys3f*H92h zTiLu-(|~(<`mG@GKXKOtb*((P9r=;9p?$83m>f!x)CTrozfYeH$adN%eZ6SANvYji z%-}SL(Ka!?LlYb{PmIc!kjklkau#}I&8C6Ol!rcwS>K7%uqi#J)?GJIs|yA({t!Ay zbv>{z;x3bK=7i$$>gO=v0~6bRJ??PM@J~9m%Ia{fhemGiyLY4Oepr_t-r~dMGxS$u z_9wjvQ4*i0XT$&y8k4B}8-}6tFP7XNq2M6L9P)Y!o(P}1&90&k?`?J^R0wJeR-vAJ zLZgP>7H!Id=T0+d5bEvf&o-l8DCppLTrFqYVm!%YL=$@_BGI*x4?vn77oNk8pCPL* z@I*aG3#|eUG^SY+phFrLht%3ZhF=VS>{cqU*!&vl)a7-G+{<)R zpC4x$`jjq-Z|eEYU%7$k0K3X{^3pS&!X-YP|j3oK()!RDA-^ZWM)?G)1j> z($>6X4(pl)b4*pk*;ak+7|gUy+MpZ|S?!8(ZzD&B*}$WQ5=(WF8lWO$j2!IpSyPy? z=E#Cr-gDp)uxxuR@9jOWG)x@GeFpVLCp*iz55q9VFeXy|e)zIFWNYy8Efomnm&oS( zib@4l^p}~7MUO^p0|ai+S*eMTSG~UkT*pd4>zd7gI!G^kndaGYvXSqB?5LvJc7`=G z*05xRQM(_+%sa}G%ePQEGS7u99cSONwcAePGYE!w!Ns!8vZySd_a1`@$#(y|6Od+k zN$pRoA_2$<&m|Al`&IV+dWB=3%xgB-gt&&wnAfy2Sbl?X;pFv0XzYF83%YF_8V!6^ z+2C#Z!*RpffsZ&oGtBovNGbX*p{{fuZyYj-bGTo*;ep{S(ZM%&7SVd z6=>~~xH$L~1If>+`q_eD97RzV=9+C$H8=eZOl2Ab$xVPe;7ncS^J*y@Z~jzG%1KoD zVq?x}b?4|=wTrTolC+<#GK@=&X|mgu+(3prSV$lVBOSkqP$M z(zVBO8Oo;9TtP3E&0}EMf0pku&78pSg|b&C>(;~^O5+g)WsH(ZpXvnN>B<1Pd(w?U zi!6ZD!CXJNX-yO_C90NU>^jn^o=N7ZplX%0ZoDs1On9_`O3PcU$jSt@JCz4p<%I6 zq>+PqW}`+0PjVOZj(VZ5=;Xt8zg|}9atvgjFr7AdAp5Gi{!%_;#A<4mbfmb;!(M6v z)zt*h5hnWvFyK(A#h{w30(rrehU_W=b>`lsLS?zA{;bwQ zB38QqAaXpJ=ktbZijw*S4uuffFHY>*ddeYqzO!>Ua1q$o@U2>();F+Vv&qca%K-3R z1h%uP9q-B#AIB`QS>lNU0Q>CY*|_jo-~ZSr?1P^-o@ZbOUIQTKr!j`Y#755#_CqqiJQcO~Z395uh@QdttqdGX|sOV56O7sDc86m^C)WFS}3EZ&|?tPY~KTqBb2}24bem z%8)ebxSZ0Uri>^#pE4p8qRf-|L!WW<#bRK+Umu zRirv=oK#-Kebo1U9d`i)+r8TqlmO~|lM)QiZLh&IWpn0*)Z3-|Ji7)*Ro~@n?4)Tq z!0@w@h~IASC*L8N+rv%aU;X(N#N`eW-|s1R3G1%63a*^V_*&^|P&#I4ZA@k3N~`Mb zz-5O@b?EL8%ML;%QBBRVtO}L=LDMR_$o)g4eD+ zN~5hT;Vb%x3t-XhZ>1uGAPq4;j+o-dZOU+c;l(^T;`7WpJjadWxfPa(;KsC-v!E*i z>KGuB2cL|Ma-%aTH~MGDXrsL&j4}4fnS7mL=9AcVqC3QDvQyzjC#HTvoFXciDxlfw znzF`_IfuhC5`a>lANI$^q4?ae0I|3oR?ULPn73;{X~Y|Iz#DAs&oeHjf_)WQ{>mI3 zbJ|Avt&2CUE$r5x-{tMmVlMH2ER0&#b29(S^;JH6 z+8wL`^P%5ZI6qmq_MIdulk;QVEt*+m$Q>+lZnZmP9;3Wl}&q z&s$~=$`wP9e71CX{}ES8Jd8_aF_Kg$zqHaY+n)!dxnkf0%HHBpy1en<^3yXZWg{|EW zRUe9C_|*-Bb=Cu!L2mAa_`mPl{nwZKg@EKvDC_S8cTr6J(vIgu($3}cAsggxvL7fk z{`2K%q^Xe!FPr9r{Bl@kl|F69P`mMPgxlF+iBU%#5`6+0qj#4*rK^o-qt7I+ZC5oz z5iq|Q{(F8s`eQVkn(;}y@Hsgi8Wl%AUm}Qj;vKdChkU>*8%#CflmtrLPQPsThf~>= z$cz}-p(PqJA*yGIM*G#BCBAB|p-*oSsTK%aB)Y(rj~9!WGl&QIMe9%vW9mh{d%cNq z8>rv44Nz=pyUwOK>uK9qkU#-ZR_vF>guw-kd%wqxh}r}ph8_G-Tq-P0KrfFE5BfxrcQ1c4BA-PzfUT|GQs$xM!e+sFcb*8e!~3xEItJW>)yVoZ@bBsH?V4=k7M zWPLWVy|zKfPFx$oYNup1%C>X#4kVa8q{QaR`fo zSs|N*J6!n#2cx&;iGSOEL_WU%C*(~9zrCr;+k1QvwpE7VCx$XV5B{EQ{^f@2?A6%| z!^HdF4WAv{O32&0#rK-qNAA45e+8RrdY^PL;VxVuy<`YqP4{=~fAHdm$j$$|?A`MA z5$n4-n9j(;)ZMr4fdmeA5KtKZ&mci#IVU1H*URi*UXsni8Eb>3Ht`}#(RcTL_xZz@ zKjN)8d9xh2wChd=D`TpbGA77_4uQuPNuN7~`l#KVE{futj z$1l6eC;BBm2{dFN#rl?1_uLdsZ$0@ULB)pNG*l&QNwO!-59C_@-Nxo8n!DL;t2XVi zHrc+*_b*Kf^ri2sqXi84j zKv;y99>n@xANoM7t_o^F#N+b;9_elSVv*hsIu9kJd$**ML$#+E=^>&Qb^SLyridg_ zdZKoNbF)QX*7ECSWekRK7nI(_asQKt!4lWC>3#TyV5v9+S=_rN-T!qjEJoLw#!czj z-ptPL2dq*Ju~{&uRM$4Sdbr8M`FLp(T_1JdO6@+9&bG@R+i$KndI*{QMK4^VdPX|^ z`TLJgUp?SNm&d;={qOqfsXop&{w`{VYdZ6Mj_@7)p3=7^(*I;450pO|?6;2}^3PMb ztVsw^kVPfJNv7SWmlhS*lSQ?>CIr=DxexujKR-AN*bez`-@g3mX5jm$_svHa4S94< zzq{c>Ly0NM0*80X{N@GUZV>yy?Si73R1Al12Y#yWq2JePln)=@yK@uX+i`JS|K4x^ z{Pg>W;6MOXK&ror*vsYG=KcEV-4ZkyZ+na0TGsoIzrXwIzZ;w+I1?t7LvUe5vb&az<9kT& zKWp6V8&|lu@TUDyOYi;-d()R6YF{|$51;CriSXdc+qU4uv3BsP<5sjk^Nh4G@*`@w z8>r16!nCOhhy8FE=|4zUMubR)MlTz4eBzLZmv~b>~R-S_pGeVpG|kN zlY+ZgY))BTb|+I_a9@~iF6G|T-8E}XjeBOYG3EUmS9h9T-D$gbR&0Lx_7|=_jlJW_ z;X{vntEvyRkEi4P{iVBy#}hsJ<=X}nOo-uBp|$awUP0`nHLa;1xG3yz$xTz)IqG(H zh7MJo!ymxY&2yFS4ETl8O?KMmrfk7aP@6ur9RAUKQ<_U#X9f5Qx;a)&>yptQ!k2v; zy%}U62Np z<~I-lP$?f8yWCfn}|1A7Uc z^0c4JuE_T8>ZhzIVAl#p>FwG>ojseP+gdUF3V1Qq{C06uGtv2 z!F_sb&akVswZHCHo9F74y?AE|v#qVHfIgoLcd+`$ob4_4ZjnO=fDf;KK4xWGox0^^*@ar>&ykfSG3c7Oca%E_)SYg>1dYh`t4+3l;UhP?|(c~SV8uxi{c zsoaidoo6L*NQg>?5v}$eK%@pEqU3!wZnGvUTKGz~*J>S&X4jnS>e3?CleheD?{0_S zl-XP4Ep#PGa=&(4WN%H^9IFa=v0~{U0Zvub9P7%iq*Go%7lP8mLO5QUSGYCI=pcRm z_mc1Zzv~uybvk@@bG#IIZjdH>u<#pS;3;p8d3orz)pqOWzsMTk zD5S1G^zGrh?CGg0_Wn-r&8Y3tA7sIO2O-6gprbfCS4CELTa(oYk>Ybv?>ETmx@x=p zl((*}!Ld3NId~KEVLe@|;>k{J_6j~B!+P3RS$U}6fJK_xC&BFUGk6L|66jgT4`A1vz$nJ06fwrZCy$CWrZ}+P>^r^9Ar5f^ z#n_zTE@f%_F-bq zkO<^SC0RzuysnS{sg?oKTKP~x%9R?V_qMX4y(**#+;NP5oz&fMP ziI4H;$(n4C|^#lT+MmYl^gkQ>j3tNDo>TIA$t&=5}(lx6~D`TK@k*;}_ z>%YDFT3n?e#&dBc?Wj6)a`GgWsO zI%FsC2aBn3wyVl#Q@3Vs^|jSe)fH-GTfwBrvS4bfs%Y$d9>H%#Lq~N?nFrLT-JVB^eYtyRR9nN{QR>>?;$mPz&qd|29;CXL10G8m%PYu z3sxq{)QMbI8JH>-+)dZ~1pRV0%s~%Xeeef43u;hN=c;bA0(rSBR9j}OQCmSZ6u+;B zzDiA@1BwY?CBGNH5x#RZJr9503giK}0 zm{?TU1&sEg`zAjFqg5BM0^`H7@1>Yag=mmbJeEYl7!$@Kvs?;95{b2#lL;WgX zbGyDd8-!`4V%IY!fJ$`ic}BS%m0F-C_#GH0auPc@_y*RsK_(IoyZ>->qlW}gnJfYn zW*JJF#`x6w;e^hhkSp|b3#vnBGvy2D1m|F3b>|8>HJ8%~3gf=r-JP78W?NkmD6JR| z*$IJpJHSr8^ekPB9k7 zFdIUqBn{xJa&-!wIh|XmU~)c(fW2H!IMng%(22+BgwQ80nl~jUgd!$s5(#5WxH+)o z17VDEl8Qkb`WJ_X|ilM3l+o5SO#W7=JFH0F#&4>}0$ zz7*x2zO$?0nSYAJGS5ohGuC7jWVD-Zerc=$EF-TKX5Hvy;QjN7t&b|AW2+n?g`gW!|)e+lETVFoXbm#urhj0jonk!JwZA+gQCu z7eENoi_;R);+d0qZuFapJk9UGe%mouBenf?eumqEy%h(c@AflE+ z#_0q&18>kwO>tY@$OpK?ya=V>m%6Wv!RdMmg!TGfpaiNtUX_zp8U>1&LI<$$%kUu&glhSw3x6JV8i5vs5M^e^L${p zNqM3}Y6AxgEiCbSy|uma8D1(wW7KnjY|}KZaR6#c5?3@5AzxEnEVbC1cF!&e5^U=6 z3H4zz?<8M=K5)i79TL}`4bE@N94*`)?*kJ~v$ol`F!0nxDS0}9MmTY$YM_jRCFOlD zUZKynb~3-C(l~W+WOdY-tWYB&^)j6ZXM~7UBqgC}hHoCpWQ1o3%9RO;WjbQHYRZ>I zdRgtWQ+5C|?wFHi;n>u6$?nWO^A?e)$W=;K2=SDIyQl$WI5mCZJ(W znk)j89i=NgHmej}H*EVrJMeWF6#+e=!qTpr;7!BEaXKq6_IYd9OatC!>6E^34zICH z#U)baP^*+nI*C>S-9c61{mUx_Qvn|iuYMb}z| z@a%sG&aY|m(SZTXyLh!BQo`6V0CsfP9PI;74O>7%%!Lo(#H7Cza$AiNmLH;Htkiu0ELp$2-XOKy( zf(?e{)?QduRzI8zOfjPC!!#%uw;2$53uE}KaLp>qzV^JpWpvZ92Tp6(q3<66&pluX zBV^i+4VgkeI(>Z*+1|!!S$IwqVJ6O3=L#e zG`jT$7L9T)8o>fONo7#N?<6wLFeX7Kq_}irduew^uzQJeGDR?4H%74xUHJKGSrokYi zBZ$J$wVWapTzlxzYq^F{8244m6FDI$oF7-GDugJz)-ZiGQoV#SnDwD~dhaT3RWUd{ zO(*y6CYAd)n1Q$o%56t(LGgF0BW}TT^WtibE$~j2%*70zeOIe2-@D)-bhu=~rpSVd zHpn#xi@yt^J)b|#E|f^!*<^KrQY|_W3qlFi@-TgfD}(w6bBmgD3*6XGf*9W&T)-tz z4qH|#PIvZYszaTfkBHEip0W$LWJ9K7lAs+`Qy{X(9kC3t^EX9)IU&0=u( zBo!fR{MKIc@)i7Cg+xsV4m^gA;Pf)VA<7%|*hFh0nw)DJxVK13lbQ5K6ej3IuSkDP zcSJq&u4DQ$ut(^3%HjRh$82hMBTQADkRn1xL8Z zr)q`cFsBtTJ_D#5(Se6hE%YNr2H5FZEVeH<1m7m^MS6r2ol-L=Ag-+|Wpk$Ud9h%d zS4<@uLRY9!D)nish?Q&^OT>(YspKPC#*l^SFhHnpRUY=Y0}~dX#S;+6IV5Tcuqwag z5IJ5t6%k;e0y7i7LX|*rGQ%qjp6MZ0+u#yetkk26QV-*dU}_ER;CInf%Yf`|rPcjB zA_`$u(B!h^`~43>+26d?g2s$ucxr#e4#% zeQ8bO1Ne|$z@T&_FOBn_qCzqD2I&mAa4LZ;!xpL_iiri-0`sanKZY!vAA>s5b8zK4 z-a_{?nY2m9Y;mrpQV!coHYFs+8%$OS6|*P{vh~AiZipKNOqeAlVjZ&JZf)lQTFVsi z#Y9m3Lsbk~2_!XKN^ zpGS9gIq7u?CLS?6R2UKYmvMd<%HU%pq8zyQZfs^33Liu&I3+BUJ?3?rmxl}d^hm~N z2s+?57eRzI;vCdUqsvWKaanbA4VEy0eMRT6gzp2T*+ULy_zKL}WoYUXG^>uQ@l?%omX|H^JX)(w(%5-lXW#+^MrNmQq0R*-eCEJ+ z0h0?nPaxqj%)wJExm0{ca`rvI$DQyrAv2OgM5_`WpQnuE(D5wO0pTu1VOosl8MmLG zhO;%4FW~s?a1Iy#AX`oK{FDpmOY?M!Z@4x;3-omt|6Uz{k>}=`F~u8aj6D@^;3wrU zq8Gpm(-T6i`nK*g2quX5*ugWr`?{8VDui)IU$7M^jLGI5mhfAo&)3Odu_A*DgUIFO zipoX!JU|UH$DTT7Ph1|ajNub?+|A@jK*aeWIvv>4buM*Li%S8WIY!bY@I)OvDQ^er zWv`9D36!D6K7b)WB7*#*55cKxL=2Z|veGjj(+819;RVD}5yANx5rDdytDh~ol8Q~* z_#wlYnuZjJIeK@VFoDs)lq@*c5$jLM|FCv7>uuvocFlQ?UQAXd{(;XcS)yZhWJy<& zlTJ4J6kBntuWe-{C4DnbKLAOQAV|nnp5AnnjzEDx;nV?8bxL%o7b-@yofH0P0QTH8 zRUPJq$v`zasDGL*;lxSkv`xA&ev3-kE%;Yu{6TxK(^knp#yQ*OZYqcR~b%vq&X-7f+mLV9iOl7x8Er<{-^WH8`y-r~YXtW|V(Rb+@>|X(JHT)p9CyL@|dMbv?Ec zzY0Ab%mFkJLAnQqIB@NQ4MH}@?qK6<+$~Zta<;P+ZwI&pazjJNL)@L2l=eW~&0skM z$J0pD&*zIJ0S~C*!nb6^X;kXPADr+JjB2VM)kfLO8Z(%AXx2r6YJ&|;zCD*{XVdA)9NgPZGJeyLjv9CMz`M5qjo+D!52 zlD4aB=HxaII;1RMqVOT$sbno&z}R4Oms%kM=H6S3JcPdZS`wks4KnxJ|x#g)a&=int(OAqDaQ8scDJN$rEzIW(kTIhs}@M0Z!0^iJY zBfA^x#S)zDB8XBUT`ddHEZvb89GZ9wnlR{0NE?|j=R4Jwv@R_=FQS3qb>MUl>#VNm zz!q!*3(h7>gtQ@TK_ezGfv^A>p=0iFQHQu#Ogh+$=@>AMoz;}^2tJ7DK zv1?GLtu+WgTT7ceId?FG$qtf~^=*}_Vx`a}ph?6#V7Bet)D+3Ogins9lXs^MS>_9!&sQQ!v#f-=_Q6j0?j(x^*7>BgH5E~BpO-F%t=nnxL` zOsL}>F=4i%5*2i1^<4ne(G}1Ep$&U=bBd^h%@r|iAA$1CTKUqgsHlZTCc%0IyXE;{ zmj&+FmZYJ3_yZn0DOAflAP`NGu5&1=Gl6MAs8@!|fz_I{z!(#ILscYa4|hl`3GajE z@G1z}D`O%nskqLD8nTdmDa#1Tz>Vnya-y7fD*J2wRDYXI;Tz+$>nle2$VnWJrr=^f ztQFWfyvgU_^e(Oag^iL~t?NZ)AB!lO98P}N$+8Ro^0vzUnzR&8QMdmoi5%0p%n;N$ zKViY%AxG;W>y-CMhvK9rdDpp=ha+H^6mcg9X7VoExhpz~I;&vKT~N6Xwv-s0U(7<4 za?BAG>8`{pc(tQ8VFRCPC?!brXsq}H>?BFxBo{XsSV5@KgDSlwt_r#e^U`polDJSN zaFnRL9wvIC0x)ND{S_$SBtxY2$>8L*twK}K=36f&3T`VQZ!CY;J6)1kHP77 zB3d+RIM1>f93IoowhSdtBFWjJddO=GO!3erQW5T=%@SjKA*FbZ{3 zO@ZHr8llo@YD6zB9vr-@y`8Kp=#I&wQKDUz9YHF%=4pRj_Qi5Og{QsKzN+lg`4ujI zTuBkB$?i`2!8R>UQ)y{O*&v_`z0n&o6vkR znq=U**QPFPIhcIRF{e|MC_qJbxH3v#L3fmGkw^`4M8Q|eNKh0WQ$0<~-kR_j8Br#p zCE=k!qcw>g7gu?V(1li4A$LcP*`%c}2`^x57cA|q>5d^wlD8|nUuEwdYOJoohoP#u zr5;XiXLg@hjP7{6THFnX-~}U6-jo>}45#Qao2!eqe<+9pm{i25AnlrUHv58>j#nGE<+u?H)uAM_b1>E}!c7_p3r z`i$ugJmieEC<@{b${10Nn+yJ4=HS#;#q=4Hb(>qa3cl*8wb!uM&z4c}9#VuTjixvc zkQb#8pLT&4QS^Yhe4lX)t%1*P>HH7UEe$`z)=1+7txfM<|) zVtJbcB4aun57ccQh$xIljP4LY)VWeqizLGw#t0%?nQypi7akIi@+EYCs)_MWd-0dF zjqs;adc?{E&@}BF_acw{X%OLuNSXH{R|>*62D2?;-@M98yUDZh2;=R!q@thheL`Fa zr^*8hR7j-gO*0gM>_ zLP`4?W0ifz)yPOw-bX+XH4deY-D5PQ7B(u>+X0_WzcFPabx&OE_4p3F4NJ8SsSEso zvPm+woF&6;ztb?f9~VH{NN87dWmd>_mip;n!cwz8>xJC4g?kMQusPyV<-at%#qlq9 z1?!#+&Pr}hdWZA;b}^m2EiKV;(XONgR)>iClnCYLS^+x*e10KShY=y}zLg3H5zaq! zMKn3S2B0EiixltO!C|&LIu;6Zngnp1pO;TR z!U#v1HX}jR+v_GqA@;vQn~=$6(@)@e=fS|C%42BOOXV;%pS2Fy80P9bc2S9`{nBg| z9fiUderV|MTZ`K}D#cq=YMPHxQA>uIE|-EDucJ~bN~JK7KSFew6fOf?%I*m`0=f;6 z=MKOrm_&Kvdj*NYmIE>=>k=tzR!eYXhS8yjOg_2Jz)@tR7C{{6W4E|RI4vkf`_(;Q zBba*iXk9*ju^_GRdjH`1iv4#-RCV%HA7@InHD3sLx?Tu zC>&!LNjuo$7Moebbw4jd=-pWIA3a$g!y~E`X|XcYrL+{SjBQj3iVS5i;Uc=Oh(aGV z!ho>oa3c&aRFnpB#BYfSAfy*YQMxc(_24Kb=7)Copr|<0W`p8E=qMY&pP-~q62Zx1 zb_#ii9fA*r94{0dUWh5|&eJX}Ly%%WK1F{k&bB$6eI)64<&&(Rd`w+>-DLa z{PEsBD5Az_n(B@_olLNDYrQI!K>QR9!PDQ{DMMNA5{9x8Ek?RiB zkma2WqdiU)PJIpGVbZ-_U|>DDCjGy1AQ%;PO1o~XNKgk`5sNx9OuaouMBI_(3!K!e zk|YS{DpO}MNz7Em91>=DwdyH;0Plx0Zy7OfR4}&gcmYh{DiQrEfymG;8ao8zCmf{xg&?bGi5)h1s~O(@lt zLu?OsFRt0Pn+IQT7*-0!~sy58@eun`CA(y8%EOnR8-+sK@ zTQ^S$Gplv{_k{h%<(GFK{l=-G>B zgz#GP)f!_EhP|@DdTdC%Wn4A0<9fDDcLp`7m)5uB%)+WbPbkJupWVXJtNWtiU+bUi ziyz1B)5T(QY*3aOVG--^5||F>zRA)w*;ikS!5=4Q;cv0o|J>|D5Nv*LxO;lq+#k2Q zm&<;*vVP_AUEU0ii=0_MoUu@<2>Y%6$j?01>&AF{I0gn{lEdcZVYasG;dtiPxH0~N zoI$#`u`l*=`0>2iU&ic&dA~^}H2HgP$G&KC zW+*@UZFsVM*&hFaIdOLKy!*K+9~JE{WGqT)$NgsgP?+X!|9G+fzP|r+bMdr$d~`Nt z|KxvNjP2hxd*4`DGM>J7>J0ZuY|Q{&_2Rfb{y3n#lO_!q2`t(huWgO?#e_VqUmh=} zU;nc6;c#X1KR?z_hw2Yp|FriTX7%+gGgUlxe7}3Xc;5ZxI`*(WuD@;nv)La?%bBgW z`}V8(4pfNNs}(J>mmkl!>+eA$>NUc6UDwugDdOZ(tg-&NKKwb{J#6X^uM7Z;&}fg) z2#)Nj#}9;leMXu=a|8B|O_1kAg*?kN1W%#E;&B3@UVo_HA>&P;B(Dxj`(?a^B-7Pb z3^n!E2QR4Uw)R^g*@TQJJ56dr+DBk`D*>T8_5iQpd&)_M*X&W6tL2+s9okHz#@ zTjSD2ntc7SeR`OzpEp?JjFaZ`KS>?MUppSN+5N?ucLlE=+)`Rn`Uyxr%o z^uXHqZvVVKq83^Ad;TMd>)FTk(~pgt^)qi%^CC);K3;Z*yiFcu@_oHOY{qu( zpZpPR_BY;_i-{g>_s3t&k3a5qk58M6$AhKuzuW&*uMOnkl^-F-_C%b661V&=-^H!l zf2i^vDqr=9-4Tl0i8pr2)Hq0tVl{d4N7uTg!}{mOP2KhOY4eYDLQnvUtc}Rax4wb&mYOp6^VGu-zaOnooD5+9n17)qw8PZG`QK5o;p*QWEr2Q*9}Mu$o=QT_2cYm%Cr z=8Q7xcK<7HT#uXo94|(8@AJHVDu3GtJKI)yZTYF~Yd@&HMsjrzYb3o!V)bMt-i`WQy4Ww-_%x_(u>~wxRSb~4a zBukgC6SE;{dTl7e05Q9c<``0>lzZej_8=mKIzvP9cOU&H(q#K`zu!D>Ue51`M9>rQ zkN1Qn2cP(Fj~72)w$Iy(hr{;bn{|{0BJ7G$IaH%V^Os`_BRC_a6LV}jK3Q=mc8D;J zIF3O!T=wnK3gb5WK0o;id6Xa;U8v!ler5RMaNIouw@}mOs@rV99Wt z-(IZ>g${T#ndDAoa4=jJu`ZR`2&}oGf(FfpgZXm$emIwv;W`f0_r2xiS`%4G8ibj);mdg&tY!R3Q~u5>!U!>+BlW`oH|&v11$ z{R3>XI&m5JZ)r+(ayG;={5nk*6DPd7bgl+EI<$JVBBlg5Csc(isVd%4N^yZZ%o10^ z7-z)Hh;l%S0yp4BrnO+9&8)*8&Zl?78%!T5b@*0&W>iZ{(nc%rPwJ$IDjJmodkQrI zH#fn|VCKYb0+bHg7unZfm`Dqrvs&a%exeKvf;Of0z4P}~RMpH?ZNSVhXK7N1tq(1q z8_lP1c(D8HZ1B;EW!%Co*G0GuZw8a)%7GgAw^TCA-y?xjRls?-K==ukEbk^+5y4lW z9{9ybQq0-{JZ&bq%_o`jq`3FubzKP89{y$|DYEG8G{3)Df<3=TTxsIf{9L$jxRQun z35%I^HZH7pmQ5DmRme%23?^=$P{@~oUry^2N-YN;GPnuL#Kp+IHvZw5u+Xngr{KvW zq)lK}SD(QaqubnRaJ87uui%3uRWmR1>1>w4y;k_fi`(f3IJC-|J-yoHknUB5dCLBR zNf)*AI{u8BR!f&;hveSQT>d$Dlt}4cuLkpZ219;o_hZ`kcyu*ff#1^jK4Xq?>S@JY zt_G6{Vjg+2m{}xPVn)`v#?ZCCw+|_kjle6FB!$NA%1LP;*tbla>41?-m1G^qStR#o zkgwJmcnVV$j7(KozNp9s?zKoJ3yiZe znv%j=9RAUwK?a=)5S;ZBefp4?8a3U>r1FN7wuLVdxhm4X{tE-@V}u`DhvU#c(} zgtL>iv%5j~I&0oMu+;*mhIh*){7qAyR3ZMDQDwSX$XN2pj7-Y3Q6!O(A(Z(?X{x-JSwCL=${#vcOGP+seGNlg z9Y*`@!P8USg=mNl_kTrG*RF|2jgDBSrxnt>XCy8~>C*z;mb#TtmS$be=F{J;jppMl z{v6x5aW~AV6WH;8d*8|b5%(hO$qC)E<+0>sy0g%sB|7Fr z5_Kslapvm>1-<~1ASp<>w-=7v#G_CzR22#Z&$L}m`0>-pz?+nj2<7+WPG7rWLv@1e z6>9(C^I+)D8Rx25&un77A>^=MlIz%JxCwrQUz1?B3llbSH|JqJ&PzGA2lc8{hx0vc zcBN3#%YV4_AAGpiy_kL(KYg7(O-85F-(s3|Hh9qK3FcMPy=)CGw3x~h-s2uJ#dpt~ zBCV0k9IE`mVx3VO8%)PZ`l9UVa$!PF*Tdfv|M~uOeS-7J;k^`2+b4fC)*-FOtZe3^ z>3~2{R>6EYn2o!u5~)C7URZnJtOa_EvX{4K8Uo@OqJWG~XK-u~%Y>-sqZa-wlwU%A zzP~>gjnu$7Q!`h>*WzeigfJ_w^m#fNwOZ<`VH_y7ltIEv>uQLG;~EIA>g$O&Q=DH0 z6K3V`Yt5%KhH1G>)6BS|!t~61K4rG(_@T`jRE@=)eGf6!_XTcxgU!uB0yl`6su~gt zTEj-!OTF-HycT{;FghQ!gw?~T-kJHIG;9Il8V2H3C3qMtyXmZ9QxM{UV>rqD5iKlO z=myTs=Q&ikte;iLHjMKEx;h`H~tGNbMF|&*x zpjhE#aDUIG=4*Qy1BK>*^7PrWZ2tZI^MlrgM!?Y3(i^UW&anqvhKZoUCSuA? z+72C)Pt$-z>Dglb8J_QMe<@!94ZH;+SkGw{8=ZZ}Knzuq68EfV60>8-Sph9zDC_({5cr7BxnV6z z9L)eDY)futlN1Rf_i*0hYpHl@8@i4f#hzXu3EV4urh5fKX`dHOf+5^<;#rhfXE`=7 z0zsNaA;mV*J;s3NDlT*Ah>2%2`~GRnQnX zZ9|mpW<>Mrvki#OF(IJ%20C2V{_vsp7ZF(=182Lsi8q^g`xqqQ_Q2Z+V;7}WK1@^q z3L`?<&@_n@YER$9+XEX?F`ODMs20lO3TgKeq+T$%o(sLlo893z$I~kkYw;}kVn1f6 z|LAWv$3yV44pTe8do zg3PjNF_eNrLNQAhFP80bAu3P+W1edHr{EGQQMzVFMLw|z6$8wK62N~9FrieS<1K=V zk1y1-bjf1H*-TB2oZsO6lTEf_WtB=5m*u5~I#HJ5x<%0LkLyFU33fs)A7+a}vAJj! z9Lh{~vHB-wruOnJT>khRu6JRQ0mF+1?R%3QsxLCkg@@%^F-c=To}=GX`1v;b<@!U5 zUKfC7@|}c1Tj6HjMJ^C2NSoJHY?xlRj4CZ$D3;_E)x~-c>BN~+)b)Z18$vZ$k7h8* zP}?H8TFS68E05V5aml1R6^An@Iyk%);g))Fr5uYTpt0>ZdBHe>Jz{s&F}1G6u0}Pk z-lj=ThRrc-5jL_2E@H0%;3Q*xzVY_e%dDR%QoKXQRCZut+p#j^!(Z*e{+JziyLFUl zEqVRb`C3d$sKcHPyVs!u7mXeY9-txuRjjP+UYkA=B*8%YY_;>aWSqQZ+g4$THYu+9 zn^m-wO$l6v*|!Lsz)i9`0D}^8bARIkFT#?c3z)CQ!oWD|22vdHoCup!8rq60@b9vcQ?8StR`1jUoy*T zC4<{dJd=B0Pgz;5aHUT`sTeIF(M?~pkO(!8MKZ}-eNXappT9xv*+W^cpMT z^q~TmI63dN%mDx|tPe*^OV{~si*TT z_qvUTg>umO^C;Y==M|x!!aXxWOMUH{gqGW)<>nP2TW4>X11fzlrQxlDd)Sxi*iXTB z6>p?)MYV`8^RT$UrA^0cp|oHdjBR@3R1DbyhCCTVin^r?Xj7_<#>dg}eaa<{2d=c@eJ?j9#;`GIyj=+wKc7^ctQPhr7QA?D+ z+;(D8nucULq2u>yRnX-q`eVDE4RxXVf$18ZVE!Rw0+e0IRC=z;P!)j-2@RbjZ}%w- zR$DP8a(IPAlIB@z>iBgjiLpt4IzR&WQz>)XI@q4&D!m}A4n!n$~o83C(N5Qwp z!!Zd(*T}

}j6{9fX52ZAm`ykfo|yBr`!cS;E-qM3E}gVY=8N!btL|!6^|N7%9_4 z%9xEB0jFwLS2%CNUfvZd@l)}heA$?(s9#Cu0qwbCl6srcWtEDBy)?7JBXK_I45pwv3D$;q zc8;t*aqZd@oY-_4BCoUJ#7G#h=c-LubyFcaW$(*=>4``iz*I0@uj~oOg3_0t7B|xg zB%S(j9pm}&apJcZ{L{Dc?h=4kf+cTW=uVT^H27!diIaH8S^WPXYoJyXwUpv{)7KPmFL+M zy~o89S|+2kxp+~}nI8xgzjP-@6gHuW-IR?^eUz?kDJ7dp3*u^h_?x$H@n#uq2~FQK zZAm18R(A2wS``|hk%L}>eaQc;W)ioFNrusZN7ea)eeqqX?6h@osD8o@b_Ef2ZT=t` zw5jyB(EeAj%Lb4?(JI5p)~mlgl&1ux%V0u{nDn?O9rN3rI4D2s8V1WBOh-=Q?RQ~e z()(7BL$FU*CfSmNpqJ>de+-jx9^d}v7rO<|a!h}RRhyinJBq{(a^Kcg@eTdaxeGc|-N)S8AM`%VqX5lrEuNTU^ zVu)V?(oXW6Db77-r3jKH5o9XUU!}$Z;9*$o^pfJmPN{h14{#Rze(+VVmddJ~a8>JX zSK)iZ#(@dHyumY86vN5wX<<&tdK%IullWJ!FSG8^*~ZRmo(nq>{Mkm)7MO2e9opkmyiLL|BTmNz z)T|jHiiQRn-#^a(R;LeA)c9QTEZpyz{7;x&U5`L+qxj=%v<^Q$28TE4;L$Y%6T|az z6N6!QxsLZ?`cpm9L9cwW)`{4`CV{DLo)Ur8)WYvTAyj=k9i2(p?SK5dQfMe+pOQ z_hq=NDEGc}5GI#MQn<6kF!*tEGyIlC?M6dn_T?)?lSC$KIPw&2N*fn%0K+?4S@5_) zYNSrY5IWh5pgkc~-15YkU11Q~nurezzAAooq){AU6juxhGg_qBC|JbcrhEE3H22cx zzVMw2--)4&k5m9^B}PMDLG=v>nsots_`72J=E2eah+aF9B z#0gVpJmWE8N={H^)%ZK;BwNr)xFH2*{>F?Hh;CiW{T!hmkra5Po1paz>4Z+ES^;w7 zsL2duJ4q5O;nm^HfzB-Ara>@u3A0%KLBSH1pZ%kZ9=nYk?LUQavI;@`9+P;<08Bu$ zzt9<{b5_Mj6(e<}SM)96+|)7`K^OQvM`h}R-}_~*W*p^7uqwn}*HF@|ZO(?u;ZUWc zojix)S#GwvJ$M7~Aa`*J*t%2!AXh-Xks)8blvBUd=M&Ct30(w#6bJoiLWKiX%g#fR z%H>=D02oHZ2^DaXnM6P15jFVkShHpHAa(_jGKjdb>Nc0V(MtG4^>MP z1sHXK%ryw1<56TQKwE-h%xts8F4u3Yh|9$U8%(>KxeEe-uhL)p%K< z_d|QlraJyyBBr?W9zE_jh-hEYTSk*iJEv1Ewv5zk?bPmGyAr)^cPIPp zvEBvjf?E;)T!-DR7gOM_SJ6Zjng6G+q&R26bSIftuF<^}v{0mV7j+#N z`%mcJE~}bUl#)KtY%nt_TwCkWSLw}uZx6wH5g0B(c07*?X={b2eHz@Nc+f8K=#K)& z%~0@|M4RXk{R}lmyp^DHoU@=4HK%Rp8}g;pDy) zMf->2<|RxnwcBK^dz%yHsV;AaOJECE%`UT|%TV6Im!SMma$p^^w*%W^vv!$|PGuXb z0o8j)^ju-6?h8oNNiQI&f={^dRO<75{s_S*dGm%;iw1mFvTvIMu7r~OmNR_jm!x&> z7Nb!#)jb zcw!)gE4Hu;Cq<32Z7dS4?hQdcn8J{xHq`70EgeOF->-UMknAPDvuia1nvcVcLU zFm1kx-j&QoaMO^R;PA#I@9>tUVeoNBlH4;lW*KIx>sI;#Wd+x9J);6TVHCV%=M;=a zcVe%sXmy;dqHRi%d_kiRBcUPp>VswWMH&L5bvd)x%eDwbY#r-pd&_o~4CvbuOBOZC zQGNLs1K#Fj*xKwG*6P|N7UWKZ3CSi{ufzReyk)9m$IuPg2l1~knZC|{#R~Qx$*Z-~ zl-E&wd|B7vhVM{vGR5eq{7+uGi`HSXBiY(y_#L#3lMUbK2ix!Kuz}J{A;Q_^ZGqX_ zTM-5}fyXB(zKNZgft!3+T^g>SnTU4xoy5i#)1m?qnpWv>AaDkSXgdpKaY`|VadP$Na{ZFoh5E&>G$RA|IY z`Mej18Hs%BGG`@;4^ZL1#?%CK%_~1i`+0MG37_KlkTw!qS+q=Ig)5(nFuNxslaYst z-x|oz_=Culk;!70yip-Hlh*h<9)-i?82#_IacIj$!ETqtY~N1tc_#^nLs0NDge)mh z9dlGZKl>wbNA#?6BY|%Kc6>QNcG4*Po`hk+EaJqLhk`?}#SKfQz)2h* z;cAkvT%O1A3N2XeYQmR%7n8pcmqRB)RaI1ODQp#ZY0e0kGtq~a_FDKZ^R&ozuJF{R2iCfadr{4>0dSI2eSD5%ts6qmg3I!z<^ z(zZe|iuRQay#ff^wN@z^MiHdJhudX1C}dxr(lG=*Y(QE(y%@psY0v)M!(!;q7mw4K50~tF_->eLn5+URNUFq+=iAjRlrI^%FEZPG?Fcgz?T0=9!yuw#;N z%T#onm&H-(MMq(H5%c4k_0|4FdGnnd4C}U3CJiR#!bohJh=y zKQ6D#<`rl65+E2-oL1LeO1N~ve{>F#CDk{q_e)x5BmD`Sqo%CDQD*VGiTQ1SmdnZx zHpJFuOFGv7Q}-<0X(P?9b$^F9Sy?TqA39lK8z)LI_yA5O$wCJk+2$I9Kfp8b_v>$0 z>s10hT0-*V&LVg~s;=&?s;;W8hn;JOkAv530KSgO;&T!}w%)!pnWMxkw2h8sB7r6% zfmU4!Prgaw%4fAv*~@WvNF2~iEKc3h3Kd~=vo_`8hW1fEKgV-2gt%P1%}|Hr%DtREnx|3+2J zDc&}VGTeCr_Q^8l3%QQ7x5?~pDGrePIQtxdodWG<&Q0 zmHdd+Y+Wc$jOt)Ln`d$LvQMf^_vop3&>|lQH*?o?vfk{1xw=xD1iQlQsGRQ-)j}Hc zj->1Du6BmyVSR}r)UkKV2IDQt>tTf3kVjFc>P7Jw6|>~&sKQK=7R%oW!nF%W&k zJf|{t!+#6j+(Xhvd(KMt9G5WhvV_ABkTmZ!Z{K%o#T4;p(P-tnZ=vDJ%ZsaJ-J3C@ z1n!i~I5R`{&{)iwp5Bx*#}iz8%rd8wMW}M4#ouRqvXHP0K3R=aWq8&$qP(pV`E`=~ z$*V=#iMNY{%ujH^4CPT3e-`pBoM-Bvm`L}e$GuU)66su$xOLzsx>rgB9$@$Z=HDJX z!0`hdII?6_h{j?R7tB0xjo&RHLN3w(*HU|!Jg?Wg$Af-Gpn-|-z*E0utun^~KQ6qu zXA4oGqSSlO5Rbn98x){>mXb`KXG%rd`(4WY-E5QG&=gK7*ER2j=jbH9=#Blt<=ql; zencrhciQb995Yfm!GcIzK9m|NPH3p0^B?mN0LotJsc-O@HZqL&L}qqM(>2bi$$O&e z_hyR{7gb3YG4c=fsGqB?;s_3^8YB?dA^b%{&#Z4gIRwRa2%+#vySeBx*avFA{2epxj=m9 zy`snwWz$%@IGlF3s}*ibW_QZ?^>8KY(}F@u{!P(ppX=bExKG62ccUcdc2w=)xyC>IFz6L>gAFF ziSXGV$nlA31R1DVndi8g(Q3<|v;gcc>xu z)qH!}dwIzWkLnIkQC@ez5*ZqZA`COoP&o`{`SUvdNAE-NuxJQ^hM?Bb2&1AK%=T;T z?!M{KU+f;U&i#qeF4FaZ0Ai>v33ZaWYc3ojDXMankROo>xXp?r%)L>GQ}UYW8X(`! z_o11p5Owh(ky|}@`ueie2)%ZkFwsHh$*??GRe-kCo^C6jv5dk?NH_n)y;&`aDn@-6 z6ao4e#)^;bZd%bb;n zSpM`PxSvUGgRqEk5XI_j%O(f_4<-nY7YLM#$>1adJyl^O52_f_%+Iy92O)#E=iVrJ zI$AszI;Ko|-})E+MQ_^EeMugJy^C+K;8*?ObfWc|v{t3k^L;cPT=<{*Lx0krPQBr$ ziT0RMg&BGN`RAMASMAAJ#-RVLKhS>OF;e*2JDH*g9j&6TwTHBg>p|~Ff2{oiH9n7~ zXT5PTNA0hiUCB}VV=!ZM4bfrxZwNzj;8g#4E}tLYoKJ7Y{bF&P+c)C7Dkv1p!$W@m z=vVP71!oUHjC);CYGx!dPvZ~MwDtpyVt=6eb(bav`1Th32 z-$JTi3Xmv7E9*JGfzXSvFTxs|XC{NI@)d-f*2XU^HkbUAxAgUJ;U>mKXRdX(mbqwa z&4|yc=bQ>SZh%JRUwVHb*^kVehIxx$d1y zrEU*Uu_QRL>d1lzuXN5*o1>5u&7OC@0J{kXbJAXWihb6}fYG^kO{YBf@l<;0@Ux zh~G4J)t$#Vca2qXCLkr2tHBsM3HA0>u2iB$7d9s<`~^uqhEyF+^-q*~@|B@;i}Pj? zIZR+xb3aR=@%)jF!-ap_#r&Bt(OJmt&Q=+nV#3VR*BYA`0-G4z>TCu`XA?=Ciw$rj&a;^n&@GzQLYdo zS039s;n_r>SU&kOSF)@`^?)}V{01vk&o#7=vtSN)MXIsdI|>D9Strp!(DW$|t~r9} z3Ri(^87XHFTDT1Qs$Z@)ounJJAG;+91J@W4jyCz}E50xWB5^@m;@!-=mdoH_ww&xB z4ehY>F{LI_yB*h7ZW`tF4N()-6YI>?=2S(tHgoOrSz$#+H&Z3lN?O0 z`EE+3*E*#khliUS;-2^G3yyl>(3>PZh;y$Bx?OH$t-1{@iB^^?#e9k$bnx_A4yKCQpLbk_ndas><0yyZ3IS z4oS}pp`=cAV=iG;H0I*`gw$Qp6H=>HAFd4ku}<5zg4}5ty!fiHe5DBX~xK(`fci-HSqw~+qg9DfuQdXXyyC^cQH%H)7R_FfmfbUdL8iU_@F5+N1XtfD0wE=NNP`PWDG+Z2Jn(-LPak7vTUoD;&r}ORN6nfXF zWmu~dZ5y3zmbcoCUV>Gwz2~Oe=8(9ajCY8}ufwmha2VvIN~2=))(&P;r%W-k;+ihU zDtWF@JP`d7PPXC%cB4i2;yUK_22|PTkSaKrlySMMl>#;I@-SA+Bqgs&G`D z)}X?+;xvjQaIjTsCRqL9Tz+XRNSfG^A$^%r% zQii=fHuF~p*K@h&h@GAzw#oc^t(Q;$p5+RE-T+(6MA!=dz$=%;T?xk#{&U`}4=0`Jr^5)5Z2NK%H$SX7YvhWu zEq`8#v1KESx&NPo=OHpE*kxA5jGL@krrCs&9fYG3=MH?RKFJZ*_;$ec-UJCrS~4AimWVL_rRsUxNvBUuf1@EpOeYp1#5CVayD76TZJxAaRN(UMgT+c3 z2hu9ALIa`LezVaL$_{%)=e|U2#MYL7r*~KjG*VI%HD6gFw$9~Gh7Fjpm|tpNMAkLx zZPhaNdb55BHc=tu$}v)7%(0E0H?IAbXEcOPKKlJKm1SQ-egkuZE8ku zU;Q}m54@YJ+K3C|=K8un_6OdecV2ooO>JZH^=2?ochYr-q46-i@u$9j*&h!}$C5_v za5U}vXM@rC*G2>KXu#|KX!xUiEY~>eU+fKaC}z^KK>aU!_<{?fGIf8YlSZJ4ze}J4))z!-?iG z?F|OaxWtaBZ#K{5nv*@_7&J^>&Y)R%4dkhdkSCGiUK4jG?vz}A?@%&1LB%ZVQUEu$nbrHC zv3xwU{ptjt1nNqpDeDPt>|z311lzhYLoj0*{2eU+M>$iqCXl`>jBSX#8rDO<*v5bN zzjBP<`(IIGyMV?II?{qSk`~G0HrQZiZ-Z;{Ho*j{*kZLi2qTCUTh4~ zK{AI@|F%WY)Ip%FNStVq!-oo@-Rrl_k`PuHiTk%r1efDx1y?JGV(vmi34|^x?w^qa zW>i)+{4paSDFg?p6H9RzqJGYeTeVy8!%y@*gYF@4_pTulvhB$QccMEd^=hFZgILfq zUP6XxEPsfxTdTR3^i3DSG?tJzJbT!0nVwP2xReM%u&OJ>cp`}QBn)?rH!bPnG?FeC ziw%-5I!x!Jf6@$@soTEZ@5QzWD3$?b$Dp$4<=K}Sqtt7Bkozv~fuQ$VvVlyR5~G{x z=O(Y(QX6jYo>WeTqj9q#O{3qNOckfseO06FLov$S_}-sPo4hHcq4RyH`(}pZQrw9# z%aU7NXcR+p6f`}yMF<_o!6&2p`)#m0hEotO$1u$ym~4v;e7c0i@h7|BWnb`F#y0x4 z`Mz@7xE@WssrRjaBp}lm_CNJvK);TFL=rZsNgwn``bcH-uiCVIxQj=V7|kKEqqvS6 zKaYgKj2{hlHv>Y{6@mqDT;ne-`mh@j#c*+ZyA0Bf3(zkr!;xlCjhEToQ>eC|uh*OTVg*IYv`?4vV)FupM$j773NJ*Z|Dw@ZsRxTdD?NP}&sQ7yeNr=>z-cOX_>#OXxm z2yHtMho=eDuBn$d*3#4k8d$tjB24?sM-bP>?ay%jqWtq&HGW>I{6_Ej`E@sw*2a{DtGHJnEHLUBT!#YGy zQXF_ybiUDF&p1^}?cQ{qZlYGSnLr_Gxx!aBF09qOLnhEV+v>b)NG2|V!~EMe37I0$ z_F2I2hee0bA6MiN-iLkg|%7Y z1W;y(BW!ttU(F|rWw6?HqiIys>anR#Roaji&)4(GY$-KD zr52Sfj+JVJ4pYLV?CGS-t~8RQd3;;wRkWx!s1WrfTW9%EK}(rfnJk}KL@kr?y)@) z$IY}*qT{$ZE7`(IaMOwCrCrB&Hn>L$*#2_KSl{D_H=AY#NwcWDZ zM2R}mzPSGb`IwvN?BrE`KctfBPa_@5u4>KjUjDkaRZDK7qJ2(@*8vjHD@pJ3db16} zW2HXHrLILnt>WUFP{KkJk=cA+e7ymgVw$`J)jKaY;FFx)<<+-ogPIA!Qs(T#8UD>O z=5efrHJ`5SdGVxd?MZb|1(c_G%FMPj)6+Q0G_#5I2bSUCC~;kKNyADroS0~Fc$F4O z^{aqFnrP*&%dL|8zIsTab~+(r+$)LlIDOy`l6M5vLb5IY_K(94Rl2gtJ269DS%uua zl(uTMatkquZRYGxK6XEU)|`TC%-5|31#rtk?Cpl^{R;;VNyFp98~4wr-e@=}=4B0| z@CtsMZ6YHJFsXm_&I!8YkL5asW*uE~aSK%o8obz_^ZyU(*M-Xw) z5tOtEX;CnAJI~ffI$l>H6!B|#$zPVG;WFdO8}`q8+|A;o-z5pAU z#iB;zmoHyxE+?wQl;1|Gg-sJKDkqb6jqLi83Z{on$F$XuT%=zfMh_K(5>}~~jO(lD zSL?i-;auA(sZwJS74y)IQg0`=X_>_${*SzCX>S`xwrl;5Y-SbWMF2~`;#QAi`?KBY z>GXo1Y|)B3vgj+xN%#Hr7a%3_C=p4J0vu)TY}y$Ss6wGoC=?2(nywJEaz2^f7y^@Y z0ck+BRHZ!|L)wIH3ScF)yXGY z#@R^QTe<_+Wfmiev<|dbjYkIcN*Ld41H*6kRP<7hvuu`*Do@9jm)`Ko35#|ew%^UN zk?G|lw&Bo52Jnuy$G*uK+{j?K%?tx(;*Dcb+u2DrPAeo%0cF8$`v#CeLR>2A+)T&$ z&CIoFlFldTqU%wCYYCnbr@ad2c6AK>6yK`+zAo3jX22EPUc_WaeDQt0s*zsbFWeVE zIdWA-x;tq|g;N&sDEaHB(GV{|`922_BQpsyqn>P5r%B_Wy>RrJH6(i~{?!%HXot07>R3bB#Z_oZ2!i0-$? zpbM&U=mkg%an9W=dg`Pu)E-zG%W&k`_6=1y1a+#ZRAg7*WUE|q0laFdQdy|Yqb2b%NVo&y zKJQmd*Kqx1Z!+s=-Ql!+`#GJZtE@4Rj1ZS%nRnA?!{^ark$tW2C+f6mnh7R?MD-{5 z{K3dN>E`AvufAa87fs)@!SL?vz3bO>P+$kb=e1*VNUr!jn?0I!H5)C$t*#3HITqX+ zg%CtkTe-#9d8UI^S_JfGO4J70*gKUfBu#0QJcgmdB#ecIxdTuHLZQ^0nZE|2qJfG^ z{thHDph9@^5NP%(P>FY4NbK&yJ0IX+5E3dl2o>BZ6Uj>;Dxm8uPQLswnKFn8&na= zxaD(-pY!CQv8PutO~a zV6=Ecx>kOn-O9juW{kvhh<%4D2tbHRF>4D*)cyi}YS=MFs2m^~Ar%=Y*hC@8kqTwC zwa#)1hsf%?m&JVaU{>A3^m(00AMyg)#}_~6dqc_@0biZV*SN{GeZ1cAz{Tcm5MDom zKZuWsDi-`rhTgE%O(3PtlBnlt(;D>EX?$=stguTij z=G6!q@oR{!YT&dAHZk7r206cL`@7A>`}UF6cO5ofU)0Tmg|9H%D2h}M9*kXDrT$kk zB{0GK;J}nbm2E~yMDiGXOPYS%l%{WW=MCwiJw;KcW@by;njVLlMGL9>*qmqd91K~aQL}A ze})U)N6m(2@tgC5&0@bzj{hi1+1F2jbX$(MtI@;fv-!iP(R}q}4jZpq@IzENQug(t zNJjhnmaKZE7E|WMi(>f1l7;cIneYX08p4&9Ak!j8X76djF5~1r4Bs&j5y9?36;M$v zN5F2&gA>raI2rYH{#04f&Gyr{g*xO3-9C@L&d(+j8^Bw7vK9@cphT5sW?Xu;feUnh zBQ3U`c*wSk8DCse0O(W1!`|=;EaP#ptjDrHg21a_(NO@vqLS`E%ZK!d?~^x$Cx}(` zxHf0FdYMM0a_|=Q=4oG}x2PRmm9^Qapp8M9cWv8T0=s2&;qd3W;}!w$RAb`7%+%#> z6;*Bu+$F8^5>xea8oSNuyQ#6oZ;KN`>4@6$RrR64g{AK7~>p?3Z=limHP1@*<^MB$=QjzFKY5_Tmd5EWK{o9rKl@deJqpv#*Zm}tdfUX zopY&&WtPt8>(L}#+Sz|t{d#+K>F;!|;DkrqFPOcqQV~^U4XL6(*Jf#$hubDTs_Q(qwdXd%IooBFK(1C~Hth zf_Hn5xxED5oXuB@e>%*h-Swl2xF9XI!FMQ8$1rm7nj<%~1SF+e@$$5)WN3LCIBkYSw>E-Db_f99fM4FNw*T67) znA-LGhpUV6=g^Dh#?`%U<$P}OC33$0b7-!Qs6c}`Ej4)ey zhQn<`lam`78SSu+BCZVSYV;wU!A6`|;HcSVdH?qyV=IV&CqN&r%zB_!&Ad<7O<@~V&W z@mck}QA9F^57e#?^kBNY{XBhs9^KbE;vcuPQ{{VPemEG8`$(q6$CC@Kw#l z;NA`=7wcUP#`8F+)~)7)X}&aE)+6n*9*e(lRSr=BAa~wizN1!bo5x7H&o1M zuuNB{W-@G9ogMyPK7m`mJ8f&~#bR`fdxt^wlQd zKMHhZZK!YUol7lUe%K{P|?QzaK5rw|T1S${Y)ZU55_uisE&q zZ7Y$=2h)&3VRMc;HJ1^=<}|tQ*gV4Kq%-ppn~Nmv*j!;TkCjKj z%7R*EH?@W3UezCA4EA~v3iF8qA{mdYz&qXaSvCPtOKhIgbvnJ-P5?5C|DeQhD-FOV zD{t+$RxM07vtiPc|gF!BogJh^mXKF zNWz0LiGjZFo1WfYyeXvdm@d-!LkjUiK3J_29CmD~j8gUMu712SwA43GZAEKJ(MR%N+ zyXh>2D){9L`5r-;mui-ZeNk6$;amzZWs8UO!|~PC{9t^V3Z7E(Fx4#tp>Q2u+`!eS zLFAH1xxTGG8jtVNzgNejhtHFRJvD~W07bWs38FrJ_OH{@9ac(UBlj{9J9_QLE1Z5s z;Hpzy^vp^GgHx($A-TMB`u*4Q3-<5ypS3dVk3dOC_0}1ntoD38M<`@z*nK{Xh61J> z<(paeV;%@}&0fow+7^3PX#gT+TwE6QL3ET+jA;&Wlg2VP70{r&Y`UZZVoKXSq0j1_jlipxWzlWf628svZa8%Ele? zi1&Yl&EWn$ZgM1a?1EE1vya(#roQ)et7H34p$f-DertDY5=cZ&n-f{2Lr32&ADjS-q`#&|JK z%qCaUnoQXc8Hs7sqx8BRh?fP^MFf;pNIg`Dhy*h-9BPHjF4>mVY+QW{0d2X*egk2q zGaFK=sDzVIRluGSl1xGb5IKX9gxgYLprS)P$>9>@6@_|6#s!Q;g~;G#6{3};(RS+W zO9RIdyRQ_`tZkgRj$*_iHq_B478t#&^(Rp;>(9XY%Qov@Zjm-FUY|3{CGX0=_sQm! zxwS*fy?fuLgjc4-(kMKDJ$Em+8cUQYQci}YT^tRXybseN#ultm{~D9Gx2}bYU|G}t z8bNjyu_)Ek)+RzTIQYnN_FBkrAVZUhOOxt4*M{j*mnIQVA?uP0jf;#cXtBAGZEgV< z9kEFMYHz{d@jx6UpB!jFa5v`3V|$COOgo*7U4(^0XUS&=wjk6Uv*g}|h=fU$$zLu_ z1T=}0PcBUuG!e<8OA`W3crtbvJ**VzFnTj7aOEngOA8Ju43fC0qkxpWSS3>j8j#Hu zJ1j-h0+cI`-BzLoVX0*1Km^i?V(GMYap=7>W+)%r-rf9ma`)TKS@Q1e$o{uyPx0X7 zm)|b`-LthC91pMF_oPjt!Nu8!vx}as`QYyC=zY(|a&UEBVIFmEZ;bZs-O*jo)>ICT zFRo7hofO4UdUhfPN2ec-E>F(hpI!FmBwBM~N7Gk@*rv$K-5=L|RY47YySzI(KR-K7 zZm*AizdXC?IWc5CAX_G{=Xl8A>iAa+iS?oHXvE<9;^>dQV<2R3b9OT9D@#fTzg*oN zAN8Vce7RT-e!sf8I8DyaE|c4{ySw4#dEaG12e(Hb%$%Mc-5vE5MqHV?K0Od^v*53< zhRGgwj?lsI?(Dr?B`1AN<)#!;PYyQC_fTxYic#b})C8oda5`#@m#b`^o@DcRffE%1 zO<76_ua;vKDzYLVST9KfRKZ7JO+h1jbggUTn^_J|tY!3ibfMe`lQg-1HM)3iD>Ll( zIT61O+W`6`xlfoOvnoIZ;)b+VE``H2rm`t0AXvWS)0 z6r9qyLz0F~q_32}*}*@E7zQ3?plj-gVN|fe*b)ox*E)~*?%HP`}?5L8eQ3V~YscyecpQ^LV zf#Fq{O`}Q~jP)jv)pg@h&++FUzz|woQ2)eZAWrsQ;I-=Nu%q8CM$gaI3rUx& z3JW9$tIydQ4joD=`SE^yh!)Grv6gx5XPvRe8{AAlWKdnJav!N^z27r8whOKh}EH(!oPmUk@zaWwTlK^~T6Q%;*tJ=UL1qbM)h7CQ(U;u(e)yGOqYo4KO8pL6yq9cNarU_&>Td& zvvFs`x63{@4$2!*r9*6pIsyvnm0c;dx%;s({@c~);q&W~S1|T2IOR>J%>y$2O2hc# zz32946oDon0_j%-|3!)tgOo&l5*CXhcdM6|R6UxH|MTpxBvBKhK*URZw=YFEZ_0+= zx2p1mJk`2P&VmZNmJq7brm}Y5r|-FE?_Zjuzda;Ru6_$dFO4v;Pu6< zoPc3}&la=sc{(>|pOx_<>-^0jS}H~1feB|-7l7uQJ)xk zwr@}jD*pe8y?vmqUu@46oN#G=PvLyMRsYdum6a5~&1(Vr0+!LvREFlR+i?q94Wg95 zLWf#dzjh&`HHiU3jUM8Kat^yv$%2zGHB61g1yQhVD%(YFAF|mjeOSF6KCPFAo#W$| z>FnE0w_ZuVGviz8AA=PKblz=s-H|)IV{^c675P8zuC6<6Tx(zRKXTKn==)>!s?#=S z$m&dcn!Km$bS}JHa8f1&GeA0%^Xp&9#`a^t#tvYoxoHVVTl-sEThbP&)QO(8HB7@O z#pAh`dtrQ-+(ixi#L)u}1L)=_DvmIJqt22iJ+|$c3E1%hyO%#(8#wMwY0c}>{Gkh{*~WY>zkY4$Rv;c`x?MzBxeSrCk*`JJ^! zka6i^Vcw8r|0F;1R3s(l;>9>2X*~s>4QI<$=&LMLg)w(-eY`w>GcUz_csxrKHgpUQ zfptn2L{H`rtTKenr<7)gzFI{>FzX0?R91jnmpr(6Dk}^`$LmKlZwA#gChCE92zR%I z$SUFviw2Tn0~w4r8wiUHc<^lt0>K6%7}b;nXmCg5OE{f=TEz2cagx)CqPR}&Jrg}< zfo}&JVj+5>z*7{L$~^@n_;#XEaPw6^xi|sLC#_0oZvkzIJ#LgA<(-GB8y}2Xg(i>| z&#v4nX>jM`YkdE05@kCkyLUx2C{~?r+I@hsu0rP#hJiki*-%i3TqT9)G6)lp}E|X}v z^+hY-4NrQxzpvMS;eMzZM1MU@=J(NT)ne4WtDKA?KkTynSL^s_MC2L zLh|nPh8stgW%}5eMEyfiDT$OQvS&N+$RiUNnFpg@1+5D~Qx<&d6&C|aXM<6-|EXOB z`7031c{qy3DWdHsWrqqMM6;z^F%`gS{Wa{QVuTB^jx6GXre1p+!6w7sMyujzYWc6k z?eB+B#H}1AZK>9Q?cQbBr^V!c;$LFj47DXgc(QIfW#o*u5%L*rz5v=zV$=l%Zotpc z@?pC2^HDfX{&~_^xeTjwC{AV6Aer?Kqh{-?6exh+rTwco{gi*GmX2r^08qkMhkmuV ziLVI@!VX84FtP}~br~TXin;*QdCkF1MjHox?D<7VhfYn%C0WNM)tF2Aw4re&hP*L` z>ZQq%5e9Osdz6uxrd;B(L-Z}6uY>T#$%hgku&$6FlMQDe%H&bpq=uMXy+FpX>M!6)$(h5HQLJgcj`#Ayo-@a{y&ibbBH z*$YnHj0|Zzs)9c|92wM>>Mj?yRKmzKxa)9a10##zro)j1jGR5K)zkbzi}b9prc=pV z;DQWpJJfdIzu&t(ZH&f&e-|#lN|1fvxUP*&xTjcz4QH$tT^E zPpU(c5WudNexV6H6VS)Nfk}dQ8Gk8o z28!j6T^jm1+z-t+U|p;uf8_!-i(zCh%}Z1DGqPJ8;R+?fj+&VEF*RlIoY zRW~WnO@nc-voG2S3m%_I3V=fbIIk>vsOm##D^$O#FBO=f2%=uqQG+_NE>o@oGK5?Q z_s5X3g4CJPU1l8>#u>EBOsj(2gbShXdJSYjo2UvVz2XAP9HzS5M&jUWcy3cijX4$M z2xQOhOc#|IIm-;WFV_lDC?i4KVJr?SDPekc>X2;^GMIPh)WI2X8HBy+0&s!KV9}vV zhTMYc_p*)OCMhgJ1gl=-O^Eq94}LuBovr;#3(gL?NOrdynjTL}&hd&pn!1{DD;sV`J zhi5}8N|_PbIL6|g&F<6`sS?j7dop>LVh_p>WKJDNRJz6HR$+UbxZKJRVqg1=ZoZs= zQizXjb#6jv*-&;&l9zU6+m~pBI<$)TdPyg-R5ucbda{bvlxGyGsYG5%@jphjknp~| zI-MNcND4;M?M6D7N)2P1q}o@n)2AV#vGL1OS%#!g(^|>45_z^t?FfS++e*}!yq2o5 z9M}ut4(G@nc2d`i3RY8NR#GbaHSbLA6F@Yvf>rZfp-PL=M7W zt!s6{DbS6C64y2FBJ8OYjdGBkEw6kHM~K?A*i%0J*keQKcFlut2aD;M-CJaa6Y!T> z2REIv7wXDu)@68RIDrsd%V6B;*f1Mv6-1RbNt@Q#VzRr^piCKt1e|asQs+CJ_Mp>L2dR=R4m@dM>o&SgV@r4$Ye-qV_2kV=pU%we*4fue zA=t)3peMstY-0ODqzyH|DXFmpNg4~G)5?OUkhOYV7e4WY3E^eb_j?Q-DJRF$_>6V< z*a?TnPIS-5)r*y*7eDRwxO%ao^0?%;#tP&5HC%pQ8*ZV#`ISD)sp|d%e6|JfrGx zvHccE;S}!oY2Is*Fpd{_ZC+KNCmBKE7^8cwIl(#Ti!#BV$B!I2RwUOwuO}GXq1Lw7 z5*x)^#9j?VFzZzfKqam0wF(8NP=!L94yzh+te$LrwaxBA4j9>V8lPhQJ!^Wcg;Km? z?k&Ou^Io+OtW&qEg>roBgiHIj-->)3E6*t%EP9m@OkPF>f1N6Vru69v@Z%c^D1%|o zu?)yhbv2n|=}j$qEiuU{h9|Puax8|Y;`IhES}e{FPFtU zs7#i+KGY6*VGS)eRF6&{JnNw4u58p!Z@DGYy&YcdZvsf=CTdM_;POzrx4?C>&PQ$q zhHFHT@)F0VNNevF-NtcU`8PsUdNYi1ZSPm78wV++*NQ=@YMECqI5Qloj zN_P433zV%OdgqHoyY=|w=AkK=hwAXQiyInt&4meWj^#jhtp*DXut2ZvG%SZR4qWxS z(Fzr-ec}EN&kAY`@5FlKLv0Iuo232597=(Q=~>E9l3%Hwx6|Pf4rNro$1mV@I3@GP zBaRyeV^v|@Z}vh1>opDTPZb6$^IY??@a&y`Eu_1*DYyWq&rH83Hw37?VI4l!z!lE) zq{G)*xP+0@w?U4Q1=nz{*d{Yh%^_rijs4+9-#A{}o`>_$5qUn1Z*QG={r}?6^AGN? zXaU{r;KRp%{p>Ju21H>uFLRM8yP`Cp|!+EP&B9SRFdhgg>A=FOlMrL|Aw zR6u1_@qO-)#BKWo+KZQMHFsi8}ws{qQzKCz!0$_1|J-Lsr z7vbnGTC7F43j$YG6}%Ljqdr+*mn7+1Dz7D>i4I1)nh0p3a^?AoO*k}>i3sYDlqDn; z^ffio_z=%-wTXqDz($!(Zgcl+}l-@D8ldIedIe`W^EKxdhq4V=ih_t;cxGQ>t8>=zxws#hj+eF zGsa~)VW`b@f)H(kyH>NK$5v*G7T519e9s4~$>{EC6)xQLlmMNq&L3uz`^ouuIXS-x zm#akGr_M~4iLsMF_P#KN}IPw5E7U1Z_^FEC*NdS;(1?W|U8O4d; zS+4yL^M>(p9?i1zN;o)$!RW%!w$+e_UQJ{}!W7Ko0%+b;8=PlAy{Jy_><%3qHw_wrVnAo2Z1rmLs`4j95rPnFY6Y}&jFKP-AjsO1 zyQxPAm;>OV@Zf#{zs3-nNr>C5Zc6LxYT=ZHZ2?JIr-n_auU5PApd3ibr-{qq9_!|V z$!zK{aMO7FcH#Wm=V%@;R<)owTnd+(-vaUA$%{BSaf-{is$*Zz-=7gPNQ@8 z@!rK?-@;{de&u4Y)ha5HAP^_IFP1~{MgYNv zG$2@35?s#8RCRw{{Y%5#SFv{`X&xOy#3u#OgJ?D`d6{iHh7R1SbcMX#r6RdmvM>#c z8LqbTfnJ`m8H|#k)Ztxq#9&x7DL(DZ&${_;osoS9-|E34j@`5|y`F6U=x=@GKU_kLn1`3l z>A5drShd$8%wEGppHK>4G%Rd*8boY0fz>rHP9-!?>THCD8gdof)@~wI66V2r7x^w) zxl!U&`VA+lVsl+GwlDCLRm)Oo8cvLYz<9;PIK(Ef=fu>`oh!khiL5*JQHd@>qX12; zW6QFc7Y-LU)g>b>*IwRZYxLNvG+eWsy+HuF#l99EE0ByPZ%7oYE#H73XuDpAUc%TG z8<=W!rEK>TcB6QP(eMqU3*j z09TX$MNI~^(mTnA+3@~88c)JiG<{6EmGP2;@gklVqt?ep@GHo`XCtOjvH-YvSUoIC zSHAOF^Sw7B2)p)ms%!shulUKk6<0gi>nLJUA|9VaP6fW*I+DM-<7%#%fte*H^ z;&>W`vw{aD_Gt%V@+11cnd{R~6RgMjc#Lp#u)#P}okkk{pLjCH{`s?c%uusF<&W)C z8_Roet&>11H8{tk^!E+L_N0ozWchKntKCi%OMTT~6wW@cIaLafv`m@)aTe7F4~Eks zco@RBHU+TQ+~!N{t2iMl$zW}=ZO)ZST7RyTTcY+jwPA%nD{E$ce73#uXiH&j$xJps zHU(61(l_b&ezN+$apcfaIBLQ)tYk;icp0Vto`6oO;hZ?9BCjC2r82w5eH+h~5BG`N ztCC}BB(cs+CqvX`v5hs}fYOr&yJKZoz*<7{$)j4O&S)E@I-`|XuHy7l{vlESI{svq zrCD)!%CTFT;9I?cYNi!-(AAIG63h3{_t{alSUR(Q@5?59h}SEvl2=j0c_hyV?{wCr zfn#7~uvq_4!Du7)+3ve&8r}Lcg4;H{JG%EPQGY0bt!J7--G`_HB=uQezGsWVAv#54 zE$Df6FUH?1ewgL+4R-KOXtI3cM*0zDZQ)0MIf=l*!P>1(f{?Rlh;q2355-;+?68k_q%h^DTm(~Tt z$|)}U_+c`;i^l6f1>od&!L1cpW!L&ujP|u=QU+EZ)^Y+DsX{IraLzl1#+=JA`r_h+ z5*IhU)(}xnBG01v&0r^u#r%>)+sU^jU$6a6;yeS>L?>)>%C4NLPNTZm((_dg>J*YP zxs#V);>C3QalUfX$p7+vmhBDJk&~;lf^)a{dq^Uqs|Zd>nspWaG$7+VPmkNo#o%T zO;WX2ca!-%+FW`idnuFU#bh>Fe$RfrfM2Qan{1SSTEw?*reE%(SPTYkl}nkgt1_C@HkkdLsi(gT0?_RYKC;?3LZkDvdWK&aN(tY5nS zlWS|?1>8?=m07U3^otlQGv*@lE`kh;K%h~+_F@``tJ2Ly#Rl`7@i&9U_PY+1)2duW z4lYUfwp*jBePIbx(AqID{1J`)&cScVZIDIMZ}%e5x4Q5jb9@Cci0}W?b|l-4tI9S1 z(VJdf&BMt`o?_khbUY-la~D2}r6f9SOL>yr!{0v&G=MB5oZPo+cLW7h)I?Dfx>95a zSNY4XR_CsO*xCE$YB=c3vs1gNEprM?)zI1Db@U7L<_0qqo;~S*9p0!0vy0GCgF`dy z3jO|T6+q5PQfqQc)6jZ+?=Khoi9Z|fSKf9zUN4~Yq=u=ZGbe8%lcP25Ok7rh`^z7K z8w$)Iv1x>CAmX;-Z&xbJaOgL&?P<<}kngWSn&;K!wx_Q%QRmuP7^(uhfz>hiGfqP2 zKfmPh;T8ZY02mVIe3HK2&{Kgl^YbXkeniRU2lXw4{l1hxErp>Yc?vd3kE$fo zbQNWXvLN7B3HU0DoCy$?SOH-INt<9pHMsBrYiV{nf5g&&sN!7`V_(A$No(-{9NuIX zR}CSB7iT41ls7PA?33ygd%IS~_$swZH8icTmDL)tBe}&$JO^=2?4k+JDiaPJ2j$FC zvlhX&P*`_-L05}WHPq0hS_lq;iQcd1z%|g(p`QK=lA}-68;)iPZKQfKmJ@r=X}N-| zHnR=%UXwz?1lu;_FvFHw=Jlvp)U{KY&YKA&J3=C7R&8$Iv(vc=sg{!uMpZhlgnSrGd%L)BaVC@RWDQ5HBX+k<%0VlC@$Ca04eXeXKG07= z15AStbTknb@bTgUJvH=wJew^aKhV`ek5hm9k?HDawOg-dW1+ZOy4V}%%QLeMg`sg# z%=SrPUCc)K9S0k}LwZTh9epg*zT*ahZT>EYEy3UqxKc$#$oIdB24x*&-GFqvj9mGw zvI^KBgieDD_!Ez8$LtuNN!RGX9^cm&&x}P)w=rt|IXXQA$2i0qVslI>Y2M{#z(X~j&GzDJ3~+k}o#E=K7E!WD5Cg)&ToMT}c_ z#l-8r3bOO^Wfo+w(eN$G&mE#|>CDF6MVEK%nBLOIR?#v2RrV3;0aHQ`4BxQYk3xv` zMM;$PAgJ)uw2 zZT0S}xDzv&MFLFT@dyayA0LdNspjH^4Z=^ue3HY!mc)RNx$QK4l@-Nh?))bv^~=@R z8XS6cPfpBOw*hC*0ch4@8_P&4LZ#pta5zIAVB)eE6Q)i}=8 z?Q&QxGT&_$B>9n)X!{lw#{8d-q1wFS-ic|pMx)}3==ZsSsV~tVPZnHwKa>v=S;V&< z#W}i-i@rdfWuIB8YKd@FUZo1fQb`%Sp8!IGM>^9R+MXRwl z98Y$$u8jcK#bCXEsU8aQNBga9nztxYucHsq+oum6bszEBo`hIg;) zxi=Hbqan5@4p6itG*)qxp9?Z+*KgN z;7JA)cAS}vX1%T_Dq2(4O{Uinp|0}hR>UcgDe`a$OI=g3QYTi?yo>c*roD-vaI;t| zxPAQAhGCz!blcBnm|7^hWr1iGY`DxS?5~;pdjKCBq)M;wF9DOyk z*$s!?$01w?15G@?+nHsX>oT^0?SLI-PjWVz3PL$tE;hTl@CH3(5sMtlLzAijOMk{;l*#XNY^%A?5voYN)sW57!;fJaQWlbnPTEYmrDb$Esw7Sz6lk5r zLq{~}q#G3DDcJ_SDcrGSw$3cDjmGoU_WORg9F2Q+U8;lNJu~q&(pKr;yj_kzqRjIK zgT4(zmuG7#qOg(9U%4b!9O|0^109bsRAV2czr_sDdYh1NAjHsb;5oXN53ckMq~aP7 zLLOf7b9$;g6rxvZ6dje;X;i_E+r29b=R=_4!i8?AV#&J9!H!& z%v88?;(1pa1!?)!6sroVVLr600;W=(@dky-fHVwp0amZ*dzpSR=s<1(UO?KyI%;YSOLv}S% zCmoHBPH`+(_hkcHn8osAdd`RRAoK-^V;@x?><3rMpgs^2UTH8P#qwB;o{JTZu+GUQ zNz>A_ai|rwXRkk)K&*LmqDOz{e4BDGxzU&A) z)b);m>r0qpc#NSu@;PYMM8OS+39ercD2wmTV=%`b8&iQXVKjzLb^QPnN|&D628=tZ z_L`t)ataMVH=6>8jA=~kz+{~OEp(^|lXqD<#>vLp=y!5XPdW{0mN!k!d#W43EyZd% z%NYRh-Fn9OXpmwF&k*dgW6$PKGZ0*p2T!-h@zc~YNl_dSvc-PA-*WKli`7tv1ITc> ztHX_p@$YjM9M0XEiuV17Ipip=tAJLSq}e1mME}yH$Tbi@!An5rB&3!r(j zm>pH5T+@){AZ|a{J_*ZF1eV>^t&VWCa937uGE^G_FLH1DvmzX&jpD=f^cbTRD@Lu4dd0ujefM#yjIi3txnb^1;f=eEe8-WSMrk}NF9yM)U zMJm6Fr^56k_*G?fK0&w!BC19aX(;F`300x4N_`}-IRwWjl$Ju1-esV$2Y=piizxT9 zQ)k65&0rP1s?@Z@J_R|M?;wC>nV(+cf;3)+*Z4-YW74}Qw3nZQ!aSD6pKjQgFj{$+>q(dDW{@!1MH3pma4zNWP*xE3pQ- zbDc$>AcXvUU7jUwR*7b<61^j2z+#uXR5$bP!w^@KjU*tEo_Vln`wYMVoWwgNs4yj`?}(%5L1cU+z;a zTm7V|F`!IHJ)YBMYDoJ3E_sGSsIquR2k6obHZ`=_dh3TVA5bwN9iCYxDOi?+Cf;n; z<9Hh?3K<_#3bJ9Lxp(gm8)I}na==}*+->*E$^LP6LI;tkX>~hO=jQs{$jhl zWfZJzhTd?y+whdJG!)fJll@{SACgPUMfc;ycEr;J^@vvbTC;qyjU`Xlp+6u{`XrN^)ECYpCy8}6-3^ZJO^LckJGB*bYO_$sK zWVT$2pFwwYaR`Zfb@YMJ-*9M&tt0&)wuyBQgNAzI*SB*4Pdxt#dp93jEXWW){E+d1 z*f<4E9~eaW`6?XdGp)#OpSBoXvU;y8hm~56;hoRzq%yQRtFaO35@XRB+A#FCs2Mw? zNmr-YL?*gpIM>k~HeLm_3JP+DWeN5UN>$yUa%8dg95}N8w<%A0cxi#M`@s*!PvSaT z2oF^TdHSPhP?nn^2{#T@_oQ6VdAMjR75W%>BtBqtj5et%{dwFwKL6n(b3%!BnRI^} zPD5E3;t8}S!?X?DB~T_C|0lIx{QPP^$a;1L**Z5Hv7~mu#xy_6pk8_wbl!dFUlqbn z$yF&5Pk)D>&uMbWS5Y>L zenv;}6xH?tN}vr@XA)I6i~oCxL#CQa^8mDJZ;=pc^&U8OQe!;D3^yVjeV<)-6OI+u zQ4kg?wo8Foe0r7ef|ScDCW|oE6~9?fQj%t{E)?j8E&|FWm-yW z9v3qy8+N>dD2cF{j{}+lEmo4PUrbe3*+&fVuv(E@QLRW`E=dj-pbLQzqhTnFeN-K& z76N6y3A0ooaR`xX|L4G4Pv<}HeMa2TuWG*IKVnaS(Q87D?6xb+LVxsG1iee$^0#CdWq{Rr zm`3^LE&T---{V7hQjC}UEy&*>H@W(8)!POA=AEA7z8YlQ>e0NSReEjcBxfMP?36S~#~zI`yOI8kTdL2h^2+VpWzy{Id3j;+5qfxGhRg zJbQj|*jFLz;No=-*b|EWdkKzt@y~~d$6w1g9j!0jmdM4YmIzQZ$r{PBAG?ZlyHLFv zz%n0E@*LC2zp2%LWz%X7r}rb#xeb4tl*lWDo&A6(m-9-A`>LU!R6An-oJrJlq1^QO zDx^ddSPOHCVKT1~K_%U{I1Ho0ThDp5kA);)k(REI>bQ2xU!OZCvvV!Yd~ zy^hOH%`WCGg}b1G(Nh$$Ie>}=muExK>iaSF*rtEInLE@Wqo8@|S3oZuQtj6P!ED9Rhc-!6jCUUuGGh05&FCx5raF2U*$Go`? zP=8~ym0bwcLJM!V8GEu=L(x5Q*l`oyHtx0YizkUCXI8%2yxmjbl%1hk^&5F}d4W`Q z^!IMQxHd@e=(9~AJsCkMIU&h z{c=8*T`SE*3pfMZ177kg?4aG^7Lj%koDJ=7W(&n4BD62gw`7sh(WAE=uZuI=8#>x> z4|ufmxBJ!dalG!ZjbA!FpZtp|?yGh6+@0fN-nW}!yBUAtpj4Fuj`Gv23AkrfUo7` znhJVl@MS+4q`K@O3O#yyl{G#)_2-U-E+Tt|<=PT!{-yXIyyDQvdxZiTgwqDW^PdgW zHdvOkp1$hoWH-HEvEKn-13&B?iwse)oz1`W&8++7kn377}9Yn2I4&O>~Z z(sz-bw^xkVE+x6l53h$uOWE36G0ktOmMF>oX z);wHCpved6B?+-0LkWWJcNr|p?z-0rb${T{YH)eRqKNnFmlGumGkHzdY4z+?ntz{0 zaCY7mG1Kq*6Z?T4P`n@sj|DO2=}#h_1hO0eVj||Pfo0oJz;rIs`z-j`DG30y=2>0Q zv@$u}&@{Vx-mn5~>l!Hv^NziNfZV72klkp6l@;cJaLa5-Q-tcVuue0)%$*jTtJ`52 z1?w*}h@KI1&7DMX7RWJ*vcH#O5@kJQDs)3-%B$N{U2lHHrwy=X7rh;>vb1Ftfzw@b z#8L+3lA`1_%G#JvE12*D%WG6}j%}<<>Q~w#=Hl51O6`>M^dRK2$wZE=iOX0fEHdmZ##DUq@QGCnOLDv%99i_M=fMmJaF*zERTCWYv@%$` zB$QTG^xDFenqoXWm*gw0qU;psko`yV3!s&l-?(fnD5?&}-ZjHLai-9~4Ⓢ{grML z%g${kND~#75mzVFZB1}d6pDLEXiiPB!QFuxG-1ThcN$$XtVm;QV~W?;C!7=MkXLr5 zQ4p@va~XraW=39g7yWO6ldid?BwkiYH|#Cj06X7W(qYF2CAiId*jxH@#$MFNsez z`7I2Zrdpqtvw{kV>v`#?mp8c|`@Ck|;hZAPB{$-H@ zS^5$Y7p2<63dM=tcIvbo2r%Ff@A+P#ob`nOW!*<4F}H8PUQbR_beiMc6r>4T!xoCYr3tO%0B$mE(J!i`q!J{8rs)rPJ@r5C zo^3mE9NTC8N59NdZ27+W$$&|i0?YtOby5#rE^rd22xPc)D)aS6Te7V!8{48U=d5*J zx~dDymbUi&D(dO0?5P>m6)&3y4iXi^6(h*@b0cVT+>{m&Qd`A_g$Y&mvqw1Rdti88 zQfr%l?V#~lp2g30w?AzD3;po6!*o?2SgqN5LpN<3HtIm)Tf)6t4(Mqn z5)Jy{)md_rR?(mg3whUaC9ix;KjP=-qLO2v5VBEcall%ux8obRf_Z=muKWFVz5m$N zl__d~xAl~5vv>C7mn?f9@6&a?G~T5m)q-iBr;Z#e3uj+?Visn>{1^ZEEAqH1x)pVO zTvhIx7n}wzZ!KLj=(Q*XGB|{Gtr81<#0GcSR|qNyViXEf?XaVh_&7ohfoONxb{#Pp z_bwejSTprt$j%zvW&A$H1I>+jO2{~Y#nAv7Uu8X}Fn?6s%g}3w3q5SkOE0hilMG%& zwQueW*JEce)rm9x`}c>u*;a*a4e;VDHd}p17t=6J>7t;9ldL*hNDg(Z4mSucSsg7x zSt2+TCrZ*Tdk<_~`;UIm!bn@X{`?iO7&A8=V zp?+dR-*>pvooWA#OsD*=>q=LrZzVM^D)b}TyzH3v1ltx+Eu%H6c?z8@-_OU_7;I2( zu{E{i!w?b;_zLqK1@C;w<%F&z`}69xgl)@Npxzj?Sje|q7ej~K*E<~H6>IGa@f{XR-8bQH3EHgYDZcZvE*Kmh} zJCZAylYJ+pSiYhjdZgS^P_;u$b{N*(rPJGter00qlf z$`oHN<+yLLgDklAq}Ve7%`uESG{V&?+hzy8)eBm%L)IDNK2>kIWl+mNjKWCL7H^wr znbxlw9G{Q!1+Bl1E=;>MjH)m|+X-wRCAm0B`q)X)9@Zm$Guh`PB4Y*twXv!hB&&0B zfuv2|rtY{pWEUtETA>4_?lNA!ttoE{+Yn7YgmQv83*DH$66QvTJ}qkU%gZW%`pa~F)_*7lfQ0sNHd z0uYm^UkFS%malTS0?77yyg;r7pO^Fg4tX`)r+6+9L<8uS5jdFf(PZ1LQ#l-zf_9Ku za3#8P62UyrvM9L!jnHAr}JpzbujODLi0>Ew3t%HZ`o8bVR9? zzFQh&s0^%;-f&nzUm+_V5co>1=aay)qs9FKF!Umx6mUSzq^7>GZHONXj#4n8^z`z zBg6gsXVHDQOhYLB02nWY<_C0>8_p&5DEI+>`EV6%eKyvYm+n)kXF zsnXydZS8MS8H?sQko)t#O;_ACIog%Jvo1D+^gc@YEPP=5h~c9LJcE2skNghn4AAjw zu~+0NP;##<{vaSl6<<8t&&}BmR@SPTE7(d!QXFFy($R$>X9DhZ+d>wFjv_d)X~?wK zY~B0BsWb`)GIA_?WLj|-nIXf$5*_;$YXLi3@xjGltJeP>W%YEDQxpm z=o+~>qCP2=%xe5T%3ZRBySWN#*8@<`&c|1P*VnT6MzNO+ZnqTNQ?V4OXq{Fd*m9re zf8gcLCFdgAg5^nKg|xc3POvSRRG8od)#qXH2DPvJ9CoKYrZ)T}a| z%v8xXP$C=_cf2Vfc;(1tE*JkEA6)_Q-Bxt(qA(;(Tt(;i>*C+@eVp}{L;p{w%zM5_ z4#-=!stNN-mSs>-U{{_r_ggglV*9Ea+w(8Eu^Y2rB{V$F5X5zLWG4!ygRh#WYw*^O zkeDQK4v8yj`$Yf^B`NEfNYt&H2Z#hcT8)7pyIzi1mg8T@0=Uuw)6-9@N$r-2Fw{vd z1nfWrb0IH8Z-38p&&`hEX@`5ifp{8rZ#$O%H|0SCIarP4fQZrcFypHJ471NUtqL|> z0t$ygAPGcdrWEXJv=g~`7l}Yj%DR!0%J~0dR~6Tq#XsxQf@c@Vc!3-g?n8OUH}-(w zKUZW&1)eAu5yV;=CiPE1Ez_*V|9YEN_lg;6mRD~h*%w1C}7Z= z68f)F4U(6oQosi`;L22CGON*QdZ+W#2r&rD`cdrJtmT%cwz zr{>=(zcIy1glWNwVyp}0bv75TE0(uScKg%j`4fdl`mZvbs}V*DUW-WPJlpcg1|8~` zj(gREIU{@>OHiF;T0KyYTkYn;0w$xI27m^6jA8@@$8^7fuS~HZ*J- z3aTD9$1_xgX+#`BbH_C9asyXt?TYaWLk%)$11A)b-_fsWw zq@?kJLYzY>ju)Ovfm2nn zmg(`Vha6I;C8Y z?H!S)LSz;i^bR3cGkF%Txx8BkC-iwDRCCAf{1E+KSZIp7S(G3)#7nTE#1m?T4^U*w zimg6f3(gAdy0pj$9j4o@ObAs#?(^B!mr2)kxW^}N7x6XSf_Zj{dJ7Ny6Uul)_K#4H zdk1i^?6PA$CC>+)R4a2t!57FNhkDjS3I+ibJ#-;AX2wnq9G$u_Sp0)@?KQZhRZ+=rtbYdd+aVPfu8_xw0vVe(w?Ahsi%Hc9)|alT7KhXg`7* z$M6_9lcm3-gf-1ZKb}MS_lspbNv7c>;(fw;V`a<>bxiKTC`w$KUTe!L3Y%qL4hD3+_aJlWSbv&1n#b_K&m+hUn10UwUT}u6y zdvFcYt4-IHKQhhkpaXqi9pz^OGyf}hv@uj%X`U-^$TWtAa}Rl|Is`!r2K*dPMKI}^ zG$$37SIpj6?!>e#Cy5gk{sD~o5$6W>l&#|(ct`Tq=q+d=kLwzSL%w6jyljlbe)Gxe z`EV-oy~_D119_JL$8q3(>fSu7vbXMCslYVIa2(z)+8%f0DNLB7R$3L6Ch|PQQ$9+~ zJfmN>&*>%~(=(X$^i~tj3JtjhELs~CdU7jF{vMR94hcciH<+HDNzc5-9(jSq8{eZA zl;ImTnZ=7p?FwYwwD6FJDR40Iz2gurZCjXRZ#_kODZMub2yy}pkz|S*h za#KhlY>#Z@Nf74|bTMco0o1`w4F6KsQ|MUu6Z|*tm8VTWnM~F}DjO}DXDBddsWLInstTc20O8RS*?MHjWvTHQoI zi%tdWhwM%1@})5)WPO(`mFqJklnt&-Mp*+ z?3MjxP>ox4S5AO-^{C#M2|8c)-ocKzvq9c6B_G1g(990y5U;>BD+4-8KZ2x-fSh>x zDZWuK0+E?mp-?J%N}hKL-LY5M=&*v{Y)&`l-R5m`vp#Nao|!(xH?ZfWHOIWfh6?`~ z9!wIrHs@(P@jtH($3oH%uyXaJZrHcC3knok!PN1 z=!d)+4N`n)lKx(~iPe6$Iv?1EPB$sD>NcyJkpBVduR@&6Hl9YmEfdC=nJScw23q2X zktQYKXkOtIwxUIMD4JNap$>V1_Ti$(hQjE4d{Qe(KUA=LCcdyo&D~QEtL-ffAd&aD ztrz4kBZzGUgolIC{i0QcW|m4;bk0&9Q{*7eW`Ll_M#R^d{*r#S zP3Wo|z$CM9z8v+(k>1$Pz_tXWR5ix(E^I@6gmJWw64{isfij^*XV*TF0F-(M^~Hpc zMb<2?IR(lWS!lqGz9wurWHui?gv%(A8nIMonXPnCIU)X)2IPP_m;wq~fnK{b!%N3N^Gr%3FrnJR5d)$ksrY z*CgF26aRg$2viOD1xa26j{vsbl;8Ljy&@nVo73wCH4xGJwpn8@cT7{#Q*iM0a}G4P=CV;@UU7iqCYY|ISmG ziPT@(&lBaG~&PHomN07XE$zgz0@ zz2&gf+nh<_;qZ_BN@t@Joe{I=1B{>rP4Fi_(haA>AFf+#3CowNJtEwDLY- z(zhsA?RZ(!y8@lh03-{Qk{Xufm3iE9Vi3l!j_nlNkiIdnxl#-wB|$6yq3G1fTxE;0(a;=Ki+V&M&f> zOQ0;{*QX~v{PR2UPmm?jKx^YZ05&%7y{SXy&9z%%vPi>EzET3`mnNHUI7O`V^1pbTMd_^L zYU^F_v8dla+u0LPss=ss@!4!ItuN!~(Z&VaHw%q{3cR`B@qR7Y`VW8YlAScn|I%iB z>+w)a@=&|OZ^1WnZSG%_gP_`2%J)r?)(B+)FkqsOFj0Gc z2DAN5XxstgJ<`n%RX8_bm9MA^)zJ@7N(j1o2obYPFImSm*$$%VAnDH^7t3(0xd`TS z-`$VDM033b2D7a1?iXJ)pLT5${Wgo{qiEWXl3u)Ajw8*bOl7_uh0~?x<4hinmeC{` z&LP!9^YA|Dg_<8QsX=DU`d$`}Obt*uWbq{$N6Q!-ne&D2woH>O=kaXR568)Hw7Am+ z7`y+6_=}o=$96%<5h-`iq($v2UqwqdjLtb-@^!Sli{?pjT&;zsOPT2Ihl+Cr_Z*#4Y=kouaZgs(6k=aQ5ifl3-hm%nEW<2sRnhw~_EMrZAF)fSF{r(!yza;ax z|0U8zILjvU@FBd_B~80#(PkSAczKdD-b;>SqGMYyHaIQ;q%s_pLC%us_ zW>Z)A46po-X*q<45$22{!udS@+T!UkF&^7wRgoK7=VInkKmMxAc_^91<8YqzqEHj$ zfaB44zyN-GAI=Ai&FKOnAXjk`2DiH?n(6L}f&^i^nz56Nb&v0n#Wen!+{WW*qKgNV zbX=oKr9gJ$u|6pnjIqT1XdG)ZcVC=*!eof0mlISr? z;$gyXRrk1*j7PV3%cSBw}IK*srJui1X zGKi;NqQ`5JofxJ0DD7Y8I3Age!$*C6(_pN4p!G1dV6^yCd^;ZL@>9bhvnx4EK!)LX z%u!^_#JMhXeafK+|UG_N}h&<5*-ly;>Agiwqd&o<;-R3$(~0 z98Wa4BsHN>?e2;@G@O7uM8D~BZBqn%L>7gvh*PYXc;3@p$Be59yYU1Rz$>oaVl)+n zi@W5@G}dMlW-h_BbqQuMP2zZQH;;Ass>x*iXdX|mll2}GdZR&661LjE-MsAgFWc;9 zwFk50W+gh*-#}#I1i}o}mr%!YoRYjPC$N(5FNq!|@wSbH1fo1k{@=Q6fs#phI|-Bi zeNR^(upJPVeQj$kAiZ(;q;0C&kcm6*K!>7^!LadC1_j=6;8T~yfg~8u?zAb;Wg77P zaM;1Bgg0HRFBLNi%$Ut@A8QhNsGIZsO7^+oC69H zAqf#gZ~-c||NTz)V1OQg0ETw9DpgULcuh~w*Y9p)^Pk;vrb{#5_;fwlXd5$p16MZ- z-80I#DYN9}+?|rT89L0COb7AQAbQZ%a$HjwQ;X$%7Tqr|K)}E>7Q6M`X?=*unmWyN!RHShQXt&`!psfRWT&~?Lb=_=cU~`!} zpG0#G5m(#j>SndmmAtNR-0p6)-3ygBC)(U=tJkhmxiF$jO-#qQntYzayCj?S=QWw0 zacZSY=rA%gfiW(C0*u8O)A?N6BDIa*CUBrZpB1*LE^>Ir)p|a^*S{f8!S6>yBl%=3 zz37+edz$SBb52@MB-i^C(vbQch?ji@U!9V;w7hT;J|v2rRKLiNJjOOnLW@A=HC?B93tbnf|j_ zT=pc0Z26VD>Eh3TbS1xa4u51VPQ4cCEjtZ{4}Wa?*?8U>>rDaBjr@kDNkX-D6t{7U zwdnOj)|My#1|G7pu!r~^E!XP!9m$VoE7U|ifB}858>P|ZmW&fnONKt&Z=WAccc@kI zr%p7%g7$M+JDNZ>f2aBz0n>|~#z7p`Hwxm*g zM?f3i5F-uR~pP8txd`L4OeE$2f^A6GS|M%l(NK-!ZeBbzX+~%|TA;2H~2`4pQ zLBqW)FO%{l8dtWG&|Tx(u_|m<{@sMP#RcR>bbob2C*;_anJ2Fy5M;Tl9Gp*)5Sj-v3CGJ~C{+ghC$t0m1@}_>s@Xpm?UBj&Ey7gyozP|VIl7bqKR?!4Te#HJrm*z%aP&MK8luC@J z!-9&3%mswFs}eMZ$RH1GVCs~b&>L)H4WTf-d=V=Uvz+g$Ptth-)XFS+%^bI{5sT<~ z@aqls?!;`V>_nu7&Wr~S+8RNpk+@FBrw5dq6k_rXzG-!+=D#hK2bj>*igO9}KUX@K z`BvcZU6!NZ$D2MGFwkUIflC|vr?qgD3rL>=?1J9mk*??1@OlXD?Upcc zK~?-a$>f05UI^;pz}x&`jN!0sOKZX!^omGJ$XwpQ==>UH+mK(>7t)(v>h_c zpKJO!$Ptid@AW^@hCN|5d>}r(+!twH$lY3~Pp@aj@)bH!XEqpgc7s;gledQyYULn7 z^9*Tl01GxU0OH8LU{|6qS6{1iXyGcEOdncN2YRPdXp`Qg3%2M!s>8%BIGZYbZ|&;KeLW8bV}Sct`?HuuC6>3OSHYB~5(ZwpK$|6H@>{?0pDYKpGMg4{hjr(4$geKIfzj^5jxAE5H~lRBo`HnzQ_7UB zu?R~r*~6sYR#xVlK;O@&_;GaHki|UjqXH_}c&o*^XRKd0tZN59 z<#9Hw&f2sn++#ve{+$q`OIZX=@e@~Y0>w{Ko26E*gJ<$K{)Tvv?3ahCEn@FixR%X+ zssAMN4ZMH_gydd5r@HSrP!F=0Rxvq&oD^m+-rEmyOZ5ccN&%r^TH#@@PONG)1kB#Z^xyJ0!c(q=L>kOiwGN%-Jp*^1w;DkyxOtMJJ3i|F7eionJ zvk}l%3ZENjHd$z+M-r+w6jX75T6AXmlK$+$unT@PuzDUUHae$AjAh)$*=v)=u7OO9 zFpnddM*&h-bW7}PB~_uZCS~&cTqI>FNAu8Wla824!55Iey}wcIk--!@jPGfm2gZ;DDhqc4t4n5#~d_0b6B}7q#^= zQst~@aYAnqQ`zg06?Dm=DQf2GiDR<;qqtHzEjB?*FZ%CT37Zys%Tr6}+-!ad###}1^ zm{PQIsQ}J3ykuZD6m_GR{#iE)EU4Fq;>!dT$AW%?$)_Kp>4-6}=oiFdbluTplaF6M z^lxJWHOwJSGS`zbfdGod0R@Q*%3MCkJHsv^MYj!WFAqLXD+fVLgI0j;smTCfrfD3T z)6)1O`l1N7-$W6Z=^Ay5Dny}ySb|GBF$J!1LZxVvWH_v|)gIM{sf1@#+$Uo|5vU&? z8iz&$X#D&hc;EN@+`rT?wMhn+DtsFCQXS*3mOrDHM7EN#;21B8hN)2BZrgS`^n($p z&)meN)Ei)h`YvWNEN3lBTSkV#C)7`5=y*UR)jNoF0k0|r#?gaAWQ#KW z_kq6K+*k4O-E_N+p9jK0zgQyyq4typW(GC20>^iwhxYFw{oRS;{9p#?l~_kRNj>_*lBOZB`@HTVgdy55}RJXRkvbx?j zE!G4RZP$s4s6%=NQ=;eD_frvzv^l(DxS6pUOC_NsyY6I7F7YANuGu3mdb}0a=%}|? z+ymiGw2Vlwvl}cV+lhwS`tDQP8o>HhP*`zfPGj&;r#wHx=!{$LvqT7p0j+jOd;ie? zQ*&xy%65KOmm7;7H^a?HLs!{|YW{AV9y)9TGooIS zI2)sz0*4Oy-XMCazD2<(+xNLaky(U#C6bpqj*cuwjNXHhPn>|PBcsr zK!5H=oY$=-6)H|-_8QXH9fXz4IY zC&U+W5~&u0ijJX30BmpNPk$~)%+kgcE1?nIoX4KXfpM8(Z&4NY;wZw3VTGrMRr#rfFoecwSf2xua4EDgO$JGRQ z=UwvcG)aexCj&;b;Xs5f;_@UU_6ASPm>la@Eh)pJY!DKzF-H^!I(GLyaG{a%of?K@ zTQOO=(wZOclCKnHD$0yUqi_}_2J`7DQkVcL5{g&x^s*X|`=(|h*h2ORe*oX1;y&S& zJDlRmX8T#)A3ZVL=;b<6`}?5FRh5ZZyqz&j71#-gk!KG_nt?Tz%4rBgw2nFFJ*II6 zdpYPd@hFyK2N1+i{*@yqpT5$nvYqi3!swRJ0~OOtd0Sw>n7;V*BAPIcDZqU{DPc=b zIj9{*aU4uioFDdAIajz&`sr3Cvt7J*%2m_XmS#f$Cq&f(F5&HFH2!W3roGR72&m2A3|B89Bq!6PUu-(!5SOgI#6-oYqn%Q{Qcz6tXt%fHU@ zk%*2LP!k@lF@eH0vSA86QfL!goPjG)yW(Tz4R5W;MsX-h z{08@2mFckQ)tvUup6jZmFuI&;1*%H|tl78xFF0l;t=9f^_WcmQrH>yq-3xwYp*9`{ z`u#qu;QoveL==I*ma<%^WJ%Q%x<<>zY^IRK6&5?X)9dljAC}Zu6n&nPWCKRv)ffXQ zow_~KCaJS5IOCNGL*jj6X3%(Ls6enQvld6AZw?$T#}d2=8d=DEP08+k&JEhKEAh<= z$T=X5Lb=*J zr29N4GN3u&P{zKBtr!K4?H$mC*vI}~6hE>>Qj_h*zc<(!odZu$0d-GyBj->@3|ipo z+i!W1wRKb+o}ZR-y2W1F63XG^bUNk77FN@9=>&};yeql3|84vr*(wqPIxj@J7*HKlxMr$240piE{&>x?vx5r~5`xHN{NzWO0@3>|UYBNf`S&<%Ibu466 zBO`d_vMAL~^~XL=b*jG_-c({`R!~WimfcLi#AFqi)b2Z7ZzOJoluruFYpLs|1r;}% zYE^$uqOUa35l8Sk$@akiouk2!1tvw2f5kJgJe-}{&-m7`s`PJLq|nY49=9tK>R{6N zAb#S_2Bc~WzN^>UnCv1zcsBc@XmPkf$=mU?O|s;e7ag~#C1RQqJGuBRE|8jm4@1AX zNsRt#N)Iv~sR|{p6R-$2_3Y>V^Q=J}IL`Rg_HiD-84858{WY{3EU;TtthKPfuL#&Q&ia;Z3Rh(lXUxR+3)oJ~Bs(!)@z zo%6%~9|39)DLRjZ*Iv6g0D#VKa>jrL|BxgDQ@-u4(iI#;J#p>mujmI$&HTD-u68*L zK^vG6@=>-)9u+`03K_7x%DFk-0ubyYC+cWM%_-Y#)8B2mixqUNie0bM6Tp|?vKGFA zla`ddI4pWxMfwo#hg7Dlo}OMbgq5;gUa#jxL)Jt8$>+10F$F`fGTC&*DTammd=Dh; z)(J!|D?~silj&3-oZ_1SGY0EU>lSF#XBh~G@|w%7zvF|*dyX|ysFXmO?^OPuv!WX3 z^Q0x_cXz{d$d&MUyCb$TAf1u=plhJF8IdHG#m*;4jR@YQLOrY%fkdXN!_eTFP&#lh zhcNWmP^y;w2rWaQ+zH7!g`C_oNd~@cls(=YMZ*kzqwLkFdVo1}R6Wq72KT?D9;8#P z0If)%F<`Bt2})Kv+n9)I9)ns|0}x)6jKEo@IC_=*h;rTQ`shZbwH*B4lhPX*R( zoF3qOb&U?Qf}dTP2p4r*ZrU(!7(TM`XN?^TjqkH8)bwg=Xi*J>7a*i2`B;@$)2X`E zhHk6!e_e#$=;%{aiaI&LWDR0y#RG*{MBAm|I`!eCjK;B|$Gc9lq-j+RZ|Ew9G9MiK z<3i7iN8A#&eJ<<5^sCJEZTk4CkFt(!(PjB{9vZO%Ow>5wx!pw2LH`?QD-^?>Xn*Kt zn3_-)r`S3D$5m@9MJqcU{AghoG?p*WoSqi>YjUWMLsu5twm`QL#krFy9R|j!*L$Js z2@UGf=ne<^KupM_UOVl5r_gQV&L#s;obXqXwv49_d_^_7u~ABzNX2(s_j=|K4q z9ESQPZfRtl^bJZI%fhPNoAm8LSn`$Ts8e|ZZ4bn>g{l?)hJGSL~1 zzQuf)fvy;JbOl^z%6dX;l+Bo17WOH2lr|TFf?WSY#u4q>H(} zw}y-brV&#Cjv*}NGfm@-)(a~zWTD%*3qxeXLUonP!%2OH$BY7N7ItFCHJR7;&ah|e z44O56pP{~s%i1e6>i6K*w|T~+>b<28Wg!xOLl@k-LKHvB!u!@YiQ6Sx{Skk?#t57u z9BNpHV<3NTp5ZtOIhp#a4HiGN!a0bpjLnXb4RMgNt=PMA<}KySS7l5(jg*-iRM8%w zP$ju(eXI+H2hwkOpcL%k2u1{hZJj?Ntutwhs?RQxIZRmqw51Zym@vtBL6e*yjHUU#=o31B87sS1sZvRl( z%d-{s`l9Zl&y0Ns?_8VEO>=J@kjrm*F)4~zZ0tF^PF&5PbA|jHe4S48Fpo4>&9%kr z`Q&DM-8v<1vzH?*-kyfQjLpq_evc5h{4yV?M*hVbuSf2bLkCJZbTz=D{@n^KFRbZe z+MX3X^n3xdvN-?#jc9`zm-*qMw%qW`Aqj7F7)pv+ueF{qk9La&bz@WDn6CalX#~;9|KV zcAO7CbJc+Y^q!J9Kt0_RyVJvMtN9B+HWV z@LcC?lqpiTQ}bRzQPuC^G-GJJa3UJfB!$xHN-f}0^PqX+Hd1IctNoAS!mY?OSv*6p zIr%c1M22I_x6*lTugVaxsue(pat$p!-|7rLzssciFIq_@vD740eaN!1$!IN9#-=eV zG3g>;;%4^y_U+{{*^Hl5QtVF;feHs`Ib=IZG>K<@a|4=+BJR?u3I`6ACsGSsaguQc z#qS1!4;3wf!yEs74lzLrZ}$gKA5V(X?HToh=3?N1BS{e74DLijZ5X+T-6&PBOsM)$T6}n_ z>YqGxUYc0jV9Y?7f^ujnJK>-Zqwm~|rl&P-f@B@JFw%-UPnVVEpJW5&qii>tXQc-r z0IUbKH7?gT#N2BFz>6}nrT~#M9bTUswkED~H=5p$Z%wiLot5m>_CZwzcl>Ytf@)OT zhO{U8ZjqS)>7FL{my_|`_{GUmo)f3DcB%?M#XWm{LPj;evhG6X z*Jim(1b9O^G0t%k6yJ}pT8RNMDe6lc^gi7$tCAj%@c6@O{QEC30S84mg7~la5D!lD z>tRYc>STgwp%8AQwqVY7Z({mUw`Ta)3Q5*3B+YJ8Q7|173b452f|Pe(JJLf4_?A@H z7&FshuHN;@(w6CJmHrZ`HLJ(z%41PRopdc4R0>zkM)4usYzrOf3O+$riALJprCU2? z0Z>^f3kU!!3oUJP{V0M|bJM%gZ9KTYADsTBS25~fUZ;*xhoH{c-)%mFdV7+Y0^^6% zOADAV(**7_TiFIADt&XtAfat8 zpOaaKvg9$MoHbA`Y71a>MJ05_SSpm-(dhU|MCLSPUJAkh>1P3pujAN!zj9d}l3tv%$ zrvfh2z_(X{ps2Zp=oJBr z1ozowcrlvZPyTM%gnQQ{?V>l*x#$z-;3hM z15T>869R^M3R@iWdxI@kmN`4If1VsOg61l4wz0YMS}bCjiq`~>oI^PP-+5JbawmT= z@DbYc*XXWcwEt_Vu}ii)@gJjY#d}P9UrZi=YUsqt?Aq(W zmw_#C#;Tbue>;vR!%TjSPT`7o+JjFc7(k~#Rs$S5_8AUg&C@CrQ0_O&Y^Li10m zgiDRYV*YBFq5mv?B!%C{wSdb z=+zWwt#lN_>_{fWWm-`*K9#(_Ace{gdXB;l7Px!)1tG)Y;aK@xv!3W3cP551d0RtK z{*F@IVs1@S!^WlW!P_Ts^rH!WoIfN{su3Pvr<)%qv)9@DIXPLSKOmeE{<8m^T&M6Z zO4$h2+uM-vG8>OF>>wxIeG17uA%~el#4d^m!8CsSPiBXHx>7JxV}b~D3McbDPOdtG zlBzIIT^23ihY$$>uY++jW*QmiRBsu-GWW_3=}k@b@{b#D?cO{bc`i!A!OK+QS68Yx zljPn^lbHokjW89v9b$uIGR2j-!&WQ2M_M0M`kpwQ?~|9;bTiw$tMk}fhpv^05U;Ur zUc-FOUBTyl2q`RGi0FSNOivN@a1*)UUAAFqFNgfJ-3;NMw%)q>Nd-13x>7QAZ5;%W(}yO zMXIAFs^;0DxQ4aml4aDVnJ%|@TO|@wM@Cp`YtgBA+?nb^19$+j5n(AVGvdxbw8fz`8k73QyQx#CFLa=%R*CMNu-5 zdwi*qI&>b6$ax@h5^Y;N7|2gx;>kMvQ>P*I|x;n}X5?1xP^m|zWrjRD#X_IW9@j3Ca(W|6T$J%|s>yJfS z?~mu1YITR|kyd6?=#^oN|5c_@$xRSzka9dGvohr$WMF&J!`A-fkp)2^ZCb<`b1?wP z0a~t6YRbLQ=C)O7O%l)p(f#ZwC=f_SHv~jZ8diEMZB%tHKp40P!nJu35%_w6Ua5o_ zz(XsuHG*LIaVjBN7LypQA?euGMoJ?^Wb?{$Qbyac1^>_FeJlRcF+{U%zpuL68dp@* z63Ld<%$TsY-H;@pez%XfQ;>C6DT7{-#HC^P;dj`h&9osNaG;!kd&~Mi8lW7LGPI8k zB-7Ncmp>CzK9Zc7|2e!8VszxG2OH9=Jhx;lqd_5SMVdZavBcgN$r=}7+_9b{AdOhVJKSkWw|4ezTjefES|^OFk+8b zMGD-ci)Ds-g9`>~{EAemHWoxaq9>=NzMzd5(0!pQT87X@t{~kpq`7$_VFRnbu#Rx?*%aIwT9EGb!_mA3E* zd!ZX)kFbV*6af%Y1yk+2Dg_r-ZQVT8!aSKKyB05NHV$4k1+3bDH)e8-$<=@((@sLr zG7gV=pSl+y&-GC({pa`bYf|KleR2NPzNuJIiY-QC4{5D(VO_lfJ&~ z>}ZqMU${-z8uBP-1#^o|>{cNge!d81Jg-Uv+9VBdgs{9QE#qce#6TtKA%J(CX^e9u z3ffKvs+@=X(!UgS4`zA zRR$B^Nfygp%d>XcPweWW%rcQbTW#|{l0ilwDWAcmS^lt4m;+ZT%v~CiUJbx@CKsxc z_AS`nKUL~MR5ITj@i( zTLUJ%Sf!7%RbHdz{k1xQTFcuhg=XQ%tbE~-$Kyq81sovY4oAU0uA_B`EmrALr=u2_i*8Jc0GL@7-uY>y?XJ5_dRDXA!Lj*(S$h-?ph8Qel< zM@YLh8GU}ZZ{sCqCD3&5uJx*u*^AtesCggsFcmdI=i3<4wZ<~ZwvwHFYKnyf&duQ8 zag~zasO!MFemMQhxOwDUjwjP$eD!d17fV&BlHS5QJKXUj22*j-HuQH`aCdS2*RD4 z@fX1$c72k_DLaFA`y)sMcWORU*OBSm@?N!y1~=J^lWgB53&o(Q)G{9&O~02fZ!fuZ zu6*>I40rWW6UG<0K}QfDM1`No6vv-8NwR>KIxRw(QJqj0pGrBv;5jw8bR|xaOR@ti zt_#Ry-R(`0h0*pQ(mp~je_=oToy-NPJEqwFY>^394wRZrw!52F>$zi;>O);0u12=< zE#C)FDl-rBnM0}n<@zm=6cARxLB`B@{s^^w(Dg*S3?5XMCoT&+f;e1bz9R^0dlaPI zG?{$LhR9b{eSr#p+}X;kp*l%IImb^vJm(Q_j_Rcfd}R4Yc&4Ha(KXuJ7qi`Svbh_N zx|WBqPghsk@UWl^597!Sz*9p5lkhL)|0VYHi|_@biq(O}!rwr10C%^pGvbs1Hy#{vbB%4F;r zCl@54Zs2~1ld<5)m@I4%9Qwu2g#h7D23GzSBVzFkI}zbI8^hm&c;12-7lExI_TxwO zogA3$=zAD1x}KEy5h+1ngSxR$S1foGPrE8Y<+;R*+XNsIO4hRQXp-#U!QJL(?l#5C zma#)n?U1mH1-w#OCPZz@lyV5o+M! z2GR%c85N5G9|G#gt1gFo-)#6-a+RoLd!QySzU*VxVQ1%=5Dc##|J@G2Z zB`7i0AO)=c6GrMHJ@U(PyM+4%poe}dM{ZT_BqMt0EKu#2bMz(3^%2ePA%q#32HWlO z2NdgkO0r++x;Ui)QEpJCl-Kb?A?dAdJ zl%t&-^gT*|mRBlaB4gGTglQco;PWeraQ7qQR0$o{wu;s|jZ9cj3Z>OM|k!s%fOr-V&?f&a>_q;?!nkV_mJ(J4y#oE z1#Mjp+^|a1pMza*bmuBQ5!$s$XY=P__P;SGHhr>D)y#6h>{WU&@#DuXY2R=iSf)Y6 zUuCWd^beZXpq!%E_9$%E#H}XgitNcra-bz(kz7*qW#~YErf#XIkNnW#4|Q2*Df1Lg zIXYQXnoEE+nz6>@|aOItNInbA+@WwPf^gWbP3R&xhJ6~q4dhBK&WlkYiNCU zqQ1xZNIl?0`XGtjtYU*+wqcosE))ctYho*PkN73 zjhO>dG4oxzUG9pwlMm*cY$6;!djggpl}0d$iWt#V^qy16&Gs0Fi6>(sY3G1y(sHj3D z&?n>WF(Y-Yxv70-M<@3%*5n@E;Dh&|4ZL*Nd(eh4Gvyw%vPg+Y3$%EXVS_ib-};~* z!l9OHLrS$eKEJ}ZT-V+AOfYYIin}`dR?xyh0IWNA3?NPA&k@=W$KTDy)W1wbGb%N_ z@w+WyxIrmHEpX^e@5gs{!?QlXku!O?z13F)WRy`O=Xua*H3oqBJxD{V#mhEdQLnn2f z3Dh{#9y6v+Hra@@eqG|4Y=h}@n&wKiNz97=6V}+O>=sefo{z!GUmJQK-BS`L)-FSG z&^@*13=Z9cC>wjEU`9K&-M6BeSIE&Ab^1Jv(S{VEEs_8t|1>YJVWELvB=*s<^ilbf zd_qVVMiS`r^3+iD*dQinx7x{v&hAE3>e+2etI#>U984~TXMKPJ37psP{ca0xpf>1% zvy*=~ID-casPeKc65n~aE#|Mi5#uI|aku=jTCPWnRatT3Lt;s_d4oS9H3Ez98x$o& zQ5*_vup%C#-HC#rBMePi_qf_GcQK?_1ZilNO<8DyAsOUl(p~<$Msncn?d3(TuvWAf z>78(MJ6SHua=ZqoZc9C9<)}d+Ut9*9VNvV3n3&v+AGM44dD*axo{LG!NsE*vF4byM za@KuSsq)<@^CIdb@5x<@(j-WPw5AL|bgmz^XR?AKH&L~0U5Wiv!?<#eGSWMC6YTBg zP2eg_k#*=rs6#KF|B(*y3_V(P=<@jS&v)pe8MfYF?Nf&$>bPOsU>hhKqJCMtu!1G1 z-zc7&!)DfxkNS06s*wUeAC*5D-U)vGTi^)ed22NR#&GK(el+Tlk^tifFpel*wBYav z1`IJE*GE9AleOB%N8`;RkrKv6H&c6T(9N`Ks%A*b_<>bC9MFOfkH1^=tE!h~y?W@T zhDQB3DRRb>v*BcDoY5r%^4)4p1IpuhpN_dRy?i)7zaF-f`qYE_q~kqmjg{^AY4Wyi zzY`Q|(Mu?*w>@Y9Js}Fr*hcKl4_GCQs4(Z-$_GfzcR%?%9$a6Wt!526?6xcPz&>~s zg9mV!UpqPij{ZY+y?Vp?4jXp&K1gx&fSZ2{I=UJ7s=phmu$fO z-ey*1n!XXzrFy}#lB1`U8v-jLmF?3M}qL{EDxRsAS2oHa; z5coZvpvNPOg-DY9-kqlDYLWh0A8N{xk+U=K>zXommRn$oj+N6(4E1&-bbe%9COFK3 zyF`QxMk6?@1B=adNMIgs46vregOE!R)-hbCZ$D(Ia5SyU+4lKHNze;Jsg5lVDzzSp z0lWskRdvfNg6!dYan1V;eF~gKx^Br&B_BgvjLv0tg%SE^-{avI`EpmOpf zN<1~0q#{o;<2kS>iMF|sMVBPUoBj148WhC_C4!(teS6q=1me|bH2U44^VRNxI;vw< z_F~xH-r!CObs_^==d?d4oH^>py@)&tDVos-u`gzY1jW~V$!9-ap1-HdO*RJ)?&A%d zf>R846(JA?IKVn;T2%+-YvR+w9%SQ04I>@NZEp-^fiFZk{fFFQzBaIL8}SkS5g_fO48)X%GihMvbBM#EPL%w)nJAHZ-oF?3{ibFo8JD zh0KNkx+8LQ1KKi6>{r+>Ga8sjHA|P+30dF^#qDr7fRhN}58#9sBJdrqBIs_GAc7nV zk^R_q-Xqr5_Vy5eXIP}(X3=pEax=i+j9SNk@>2D8Bn(35LrQBJC)2af$IyIwpd1;T zl6E$R7%WD1PECmC0iz_yS$UkUo`w?hfFtK;r88!Np5f*pTuvnUPOkh?Kt4Nwig#=~ zfM?b_Ja}ZpoNtiHE^zQZf{T!+`tBYWQVb#gy9zeGkJbS`YpTX~Oa4l>eNXbOt_SGc z?+tVzS&4P0YnG&z#MWi5l?O-~)09Ep%|+(R0z|?>nQy>zE}hv(!t0_~9ScYcjS!}f zK{DQobpQ{X6LgsED{<%BW$XaEe=OJZc7}6CsiAjP@`uiR6wN0a0=;Clzz^-rV*%9fP_G#GqU~w`63M=VAlMnl zvEy^Z*6=8q9v__TSc4IB##EB_S`qSS;53={l1%HcS50_#5<1UD8;^jyJ;a-_I7xdg zk)kECZpk|oY7#+>^@KQb>ER^tC&SV2ZrW`w0I0Czr@a>InhXU$|9Xz;7X3c>ylfiW|53*aCj*_5`f+i2adKQ>f zr*?a&OW>^^_i&7->p*Bp1&)EaRB4<9SlG#9`q8lKO z_k~mqb8V~!mE-q;tfJ5~wm#9wJ+}y=_dx;I74F^(zyoNA%e6YALbj??Ee>nr8ETnyb{7<~HWRPb(ybY_{V^ zKW0gL%D=FDYqzVkOG#YnQ!s-o*yzz$(y6YG4w(RnRQekeWIH^bg{YGq;03je> zmznsxy0tZ-NKgTi>|WNo{;vs%HEpaDNvf0%XT#RfSuz4D)x5N>Nmg|_nvk$)UZ6L} zzS(9D;nFdQq+-Pff-;P&PQ0@RhSURx2E&*~WXb3PucLNH9C8`?+DcS{-l|W<&+N9C z{P?xVA0AIj7t&Vsj$whps^gaPYQpZEOg6n<3vf7fhDMmD>6z8#FvpJlmn@PE`!lc= z+E4aXm_6@nKF`7xjfa~k#Izxbg%n~`cI)gMx}=dS3KdPWJ0lD^4QtB12F)Iha8;VI z%XFG&>wY>{Ep*K_i-`I}wbFp=7khy=*QmC$OxJx56%BxH1g)Y&O;32Bi)rmx1dCCF zjjGXFy-J*Lov9XBWcC|N`i!bET;pUGl!?x|m4G%MDvP~6@EcxsecpncQa!^p%PJns zIrIUC!a$Y>u`?J8D1z)TE)f7-K%&1eYIrfBP+hdH{U~AAqVpQOZ2$zL6W+AwMJyVA z+d^|R6ienO(jBB96C~>1qjO0jv=pz&q2nk+QAeQpI>=J+A)_~5SQB+C>r2C*mQu(V zkg-&3c*Zi;XVu>+PyzKIMy(7hZx#)R%A|Zy)p1@z`sjfh5J6;4#lvXARIMi+FpCC& zfnf2)Q4hpe{iGw0U7O$_XNj#%O6{3DjMZgI`!1Pi&De0Wm#m>v zIIxPiGEZwbYiG54`MOG~TiBifE@E&brR`#yq^sSbIY@yrdCfPo$BIeq^k}vkq@I;C znx(A__g#k$Xy!L;cMRLU$hUWRLX9RAz}gR>J)_nMGMM&w!jZTPOhzpP+6Vpr02~Us zV1BL0fzHTpnvr43xxlbUAI74sAlKfvA_{^C91TFVH|9e1b+I1Ixtas>6^d1XS_T*t zLrw1|%po|Ig2nq0D+J5OtO~XmqYondf%FN`IW}4kr z?N*TQ{>OZtL56(Ll7kg}vG`gQqG=mg1O;cqFfg2ds37(0xB#B0OOH>&Zqhhktv8d$ zm;3ug=C=#buuP9H&(DkO3Gzmk!yOVO-T!P8tl;h-D#+RP?%W~F$AL=Vh~|kmk3gkW z_vE-I>6dGa5r%t5-WwN%%M~Asmvx5-(9|jtS?5;~*70Ub>^my~!vD3@s;m>m2=J*% z6UT>IQ|x*qsI6GzL|SU6eOpH{ct!8fKsBc;z(dFJz=3v(+o2$1EB1!n(wF6=FmTA9 zx-^ECM!Am%ig@Ju0ItRuXT(08rQtml#)pe7_3)JO$J zwsZ^&;>fF1&?uSq@!yQ)Xk)b-yTTJ-mA~4 zp>#lk2KZ>V>P?j{YxHcT`cK8QmqtK>Ljt5xskRK!LxUA!feDZ`iF&o-2l^t7FeAyV zS6`%3r7D@9=T4)19D-I(*`Z#{64Ps$G+eQm+~1A%3q3nxj9Ka z?%FkRROczlhr;I5$oE6=o$tq~im#fHW)X>pN`fUKJ%E~SFH#eV%G5Atr>xe)qqHx@ zx%P;k>WFLG%ZC-you%LOjTOS!1%uvgeD<$Kq+LuX1ASIVJ>xdI$jvEg$px9g-ZLsEShAb-RJPLq_G$SOc>h#qmX339g`YK_ehP#5}jn8Af2*|SKSfQ zIH417q7U;qrlr#3+M_5BH>>oFYY3E!2$B%uF7;H8VUbljjx85CKp=r6eZ1|OeUS(d zi@{>aI=F-#63*s@o02h$f3 z$T%9vkvEEvhBhWWSA^79F|ZQ@Xdlg}h`37K&ZHU& zex7?B?I-zJcMRfOr%)%k!OwKJ=1DZY^GDb z%xx+xDdzj-yh685LK1eSMDB;uxjGMQ#f(+Y@=k&Xr@!`2ENbZp(rHd|kBm0jrvH_2wja-OcB=Gg#V zTa~Op&fv8LB8YBYvmn${5*u7&-pt6NuqU#J<0j54>;f&~t+i>4+Ogsy_8E+YcG(t&Y~Ba&7)w*JN2f}O?uj_3V9K60T}I&^xjnRX5;L+Y8YrGfMzJST zyg7J=NvGULBTPCK3nraPVl+{tsm4wsZ#1dr(|gS_(tlKqINaK)U5 zPkxB2!*x3VF2Xs9uwJ&HGo9{UBYSPcGN0ZTWk^8)7Abc?304|GV_9;sj zSF7TAFbYQ{V|3sGS7uDA+HrQ6MUx}UH?XkE&Qf{goNj=Ypa~d;pm<}LVIplafP7dL zukZo{WB>`y%q~GUoUf~)hdQQkp~?0Rs?i`B*0Z zl+Zzp9=1ELbv?hMcD9!)9k){3dYvuO_FC5@I8jxdw9k*-p@CNsN9B(Nz-y2(kuFE? zG9|PN9p6x2RFzw3Hk=+v4p0$#!3TQ%1t{S5=HJEYRbYY-1+JZ$p^iM$(ALTt%n=d5*C` zBl?)nv-7OmphcFQY2AhcS!IA9cKElQ74&P|H&Xv-VdFl^nwpP&dgZIzMs7>ytu@D+Gk ze|%XDmX#6;)rbLDmpucn5Vfk-+rsiIk!m%jEbTmtsm#ZwB526}TkkI+OS#;w;ia&*=rxuWEJ+qFa-GW`e zT?|nbt24hAv$E+R%WrRS?bcHo?E21Ih@W78t(xq$Ou2PwBhP8 zU-;tRsCM)lTr%XL(p6@+4`@)?oze%ywVq2gnpdICtzOejnrOHGJ%a?P*&Miy_O(Lq z_DD*q7~475@Ca4z-7ojsKKyPpX8u=g*8p^v$0ndJut~b^8)@H4>RgPa^21pH%DPI_ z&P@sN!s~36r;Gf57U;iS74vNN?rqlx7-9-RjJoT@i@FKhHX~@ktbI6CQJXPF(Hd9{ z=Nee+jkyO;zfJ5v&V02_L)OmJdr)p&`2(VjO*9u_SaKV+YlF zgaES3$?*0XPsPwwy3bTT`lj5etE|%3JH+NVYEPEI8`$T7M+CQTi(MR;vF;Gz4#Z;; zcee3{gdzPK(t)nmzn1A!K6`h7A_jpI!wyj>;-TD~i~0P#KDeIte(5Itnyp_J2C~_5 zW-i$FpK=93^M!1-htkJ@Lm+VM9+C5IexBLQm;Z#{iSsTBfrRbO<$lyjAuF#TS-Wik zC@mM&>bDi7`~IH($o_iv`iroz$i3(Eb@`!KWT(}9Mz1)5+R1~Livc^D>@Vo{@hz(z zEd-a*DUKG7^-qkl;an^Lx^z$dfU|M&I=lt;LE3#Dvy zhk3ks+J1P4B`m3;#wz&8+|%b`eUvuLj@K^Bg{*-^l;L=1%U85At6)lXsD-Bjf?zb* zpn7Wh#-1=}VuPj<36ivaO#(Y34wIZDeTUSMgb5MTOrs-nriLp5$|QQb9r}6bV@|4L zDR(ZkCE7eaWi9R&50()-ps;CQXXs1}ZGa@{P@CI3sx^66-V%&an3G;-y&&>O_ z0;AFDx65Mw>uUF(b{AOtM^P`b;#iaIZg4&+}8;fjig!2MBr|f{Ks|9 zF>!0?1AW5(&a|^4LBl3z@Pxmm}et6OSQw3_ki& ztpC|>7O45}4rd&PO|vPfwjFCd^4l>&M+5(dDs9ylNUUDU`s4B2F$hmA5`TiF&0MxfeLIvx*28MIll@SOR zn-m(iU~rms-E2V+L{%iIsLFNy8y!8{BXxdc@Z&#?A36N^cl#CMAy){hGq;j=gCQIt zApV`ffk5Xis6w{8Bccf6!a%$lrgbMGWG9D6VguieSeUPEz(a-Y<1xZ_Q5VFAS9_N@ z?b^X+vw01hFVpDlT}@`G%09JW5`O=?niUPlAsE{1D?3CYm>Mner+j0dtGz+Fy}*;_ z%KGLE8y%({%u>ZBhUo(s7Dpw9g&l8v0Gnf4JLRFt;vJ6HS14wt`_F8$g#>Pr$~KLQ z6@-a-mczuG-JcSzjE~B!p&krF9gjn{Hy5*-tnI0b--fODXS#UFKHpdWmS^{GkG|{e zKSuy59(}*Kxjmwz8h!fw?R|3l8T$U)v$Ghz`F8QgU+*VJOe{x}+pibn_eXTqqu>Af z^yTKy5A7(?F4sO3=>n45elY*~q(BkBbEppo$C%sf>AB^ja+1V>#`b>aUq~g)6zV!-A#Z(`rR~q{OzvF2cg)?-U(Drt;!t zQ}Md33(*WO#5x=<=Iw`}{D*Pzv&iQqJJ4|`uDg<~#fB(SR3+0sT`S2aGIxL`sY~P_ z0b076RMZb0uNKqh|ub(FA0aSxoWVDg3T!!$+k* z^9Orp-7~huOR7U|#a-P&NLE?;*nF6!_&^Gg2@vmB~)$`Tc!9ds%FL zb!8kUU{v%&u}C)nz;(|Dm`6QdT^@x$wRQNK1gqwU&*qU#EtdX^%EIRyNS%^F}uiXDua(i(2B$hlb0dSY+w4wz=t)IQURP955-7R8h~Y1PsyMS*y|o&eL{> z6=~YMpPS;r2)6Lep0q9`AklSZgyX_V+HNpKZ{P4rk8|g!6*wWlYEL%B^K&+b!BOdm z#+P(7NA2!3Bx+0(C<}AKwjF~iR+{g*T}3rbE6hd5NpE$qpitR?ynXtcn;Q&o1w|(e zg}9g+a?`UbhogdNZwnW`F&pK}@9CzY3g$RJO-!~9<#+JxICz|H5BvZe6Kqu_cqUf z{r#UtLtHid9Y{}!E?tdZR$1T+MAV@dh(@EQt-fQjr_JF+RO`BH2f6Tr{Jmk`R_4t+KR#DJ6CFg->o(Gc)Uk2rkgNBieL@ui?@z_FQ@_v})f+WYl@=*+XqiiyMA*) zY80>EIVMJ_ArzDRf0=u?!G;7k{!?LOwLI&gEZ|K3A8k+4-L}o`n&0o}CaaJH0g@*x zT4Efv8hj)rt=$EWEHO444K5`maew{81vp$#1PQr)*(4D$$0Ds(P4EUBs!{ z7F71WC)K9c5CLf_JC;Ly%(HaA*}e+BOGQ!d5`Q(sz;zHL1ssxgDa0(R!|@~Ct$q%( z0RSU=>ArH5dUFXz(h#&rjz$X7lYj_vc!)c2CEzIXedASmRAd;sWB zaR9<91mtwv2567)1t3>jgFF14wTY~$TYEx#YVI)P{1f<LZdQi?mxHx>=uAa;X=vbk02l%{j z-kE>3Z)&4a-Q@9_8$`}pK@fKJ)dLqlGSIStG<2U@%YhIClzy_h3i$B0MevGgSeqyG znE83X2R)^>RbRbr&ULb*>AvyWF{nbS>;DAXl?i-wIAws-$P6`o-&$>I166B6J?4QV zBacpLgQ_$;0hoWj@}s#e8`kWBNq?4kmpCf+js~->;pfTZzAb$=dv{FNvxOr@HH#^<;I8n>HX?uwSG?DZx2sT99rOS@2~e`{y(K7v&OUA+j!nV z`+srFssArd*Ff$S1G)Nv42HR25-dPW;_?oZrouUIaz3R$i)(ryS^pUn-I2*l}|R@B1(D7dXo+ zU*nW1u6&ql>uc~v*XUNEy-kH%%UgQ-!gTqTo`BD@-~I=t&}+Mf297k^&VjXz=C|=u zfA>A+5m}WSoH7q*@Qf=soGxkvcv$CnTyD<~+ah&JO%nPmr~09bqC5ymww(pNeMs1# zx6h+d@zYHe{$aKt zDeA;1h{pB%gJ{&wB8NvEE~uwetViD-b2WOl7y9;bAxLSdcz;Dt7Xg_17ug9Y>ug`P z>(C~Bq`3M)-wO~VtVHd@Lc`O9%GpkjMYMYJ(H=?<;~j5TyOp#=3|2X(*!vzGiQ3Kw z^%V%L#rY8&%G1^HIqlAFqI$DHp_fv0^c@k6j^(x>1mWs5cuwm$3f;kqh1ER+YYRJ5 zRp-EO7&f(pug4(Bclr_)E>-fpu;qX&w_Dy|asbKi-cZ^1ebGsdX=pU{ndsB85$2ds z@PA?5Rx7=GDA~F12&EGrOyHL0n@f9bKt!fLFgSL*dT@CAu{v=vdDG+V0l-%Gf|B5e zV|qN5#xA214p<*TH@!em!VlkJNyC5@IM({PBWIig{_>qSHsQi{D)Z18I6W#J>>Mf9 zfJ)JRbC>2{5BW}x(=!HkBM(FOI%3A2ojgl|uO9I{jf z1iR&vFnMYl1tsqAB$L%$D{`!`!^(58j$d|hJ_+BorJv)l?o>RA6je(ut5WeMj%paj ze1+PO%ya)#roKi|SzMv3fCjeeLsXX0(;l^nwJK5)HkRTQAB2m;_l6yvR-RQ4jo*Xf z_dgoH`^E3~dbssWD9zw}JRNp5-)-lSVSrFDq}F#S5o+0_8}^X7d3rkM`{ezz7tgu&I&|F8-Fy`bAPGVO@%(9w)af`Rj6i5sET83WpBx zqsjJdPXWAPZPW5ynmqj{K42k3yDtJ|^ni?Ct3py3$_lT$=C&X~-zr}}e>~*Mt}xg; zcF|~@?w?N2jgM9ABbTZjlKiE@xZ_>=I~bs#!xVQ5G@S#?4vNP^80fL_(QomYN1rKP zs+*){9z_)Vn(DI=Fsf1^hgew)WGHh7R$g9$7DoaD9C^+U=cnhUHmBc(YH+Qcn0-Q8 zUJybbj2ziN!ix+N8T_|pF~k=oaS|nHMV>0EO39}o+i0_bfuq=_TD1|BxwKCX!3@qN zwQGEfEwb=+Y?>rtVbpq5KN0TskP~i1qxk2N8y)CXfRoql^+as2I__dTP|c;t>dh1 zd~kDcyvzigw49!2vO;_cglSHJ5Zy)i9d2io(E9MSyX{eVp^Sf-p7$fydwZmjrht!1 z`}ib~bU<&*s8;TIwHTw&Td$$`v<~GFbnTvNW%)sxL-eQ6BNENl>Gp8Kii8o!krL#( z+9QtS^~c?W$Rff8jrtKCosnILvw~X+j}`5{du@#SY~3QbLB<|1;}Odg%LS7u7PEzl4OPIZ+``UNB9vxzb3KbqctA#zFGI#X}LM;z@cI?VsOMGh1 zOQ3i|xA;PQMnCAj5G>e;*SkuL@F3cud(?Mda9@i0k`B@%rY(<$QIM7RCOYgye$R18 zNQ9~A4m?jDZ@!Lcz}JQi7gzQl<7SVWZ33d5xSeptVDE$?Xi zDz67`hEh@Jp_|1hWScV4qmV09`r-+G)ev5&z*A7Xh}XaJ$2$gizNSjsOcZw{da$-snUfXnu-`(4l>0WpD%L4G(M9}hn; zj5PSBgG?G;Y0^-`XEFI@$#b&>BUtnF{NykFB~oOjq9Ll8>w7`tDT9VsKca<3U&9Wr za_Cb#St}Mo%IZAQTzL%Kf`Fi?UKfj{oWgWu1K`J9JP31P$wO?y4e%Di1H-3C{-K2Haq z;DvtpzYgC3ZGXqWH$dB&So1g<-b3hev|L7m-`+BaZHe_m!i_idcCB*vT4=FNK;#BP zM~jFdT!*4Uy(sg*98w0SQY9T1SDw2e?t9`V4X-r){FO>bzC%59%+H32> z?7{|7h2t5Cd!g4C?GqS;OMlZD_FbFUJ~Ehx$*xOBBxaRo7_nv0)J>64VZjyLP3OSA z>A+zz@Znp!?-^Ef)@!?F8f_qS);4)7Xh|4hAZmrZ;k2%Y+xyldT%P{^dxYpkR#^=D zgA_ois)7`>GxoeC&CmNNhpQQ9-_k+8`lk}!D@0_r-To#QhSi&#+MeLIJ&idjtSwWF z>tN4^{Fq)yw9Ixo)e=Y;d+j?wbeck@eYwrI)|FPw^2pE;#~B#VPae%|`O$u&< zeIkx4;+=LcExx&2nF}Dr;9|YXxwP>rH&y0}yVOw#wlZRLbG%keXO4q0y?wy}MHme= zkzuWnYpgL8s+apvx3{gMX7Of5aem?PbU9kyCwKFBI2uIDSm6LnJWTST#Sx+>&wjqn z9E}-=Ih?_jNjdAi=#STR`UxYBXJ(FH`V8HPQ)x^eSg)%eIs+pVtnGxt&&L$5ryKS? zM34dqW2)%~D>KX(WnS`qiir;kq=u;ne$-JEc3yuo;@Z%jTIXXIdiETQEU$d(Aqy&u zxU_~5?Yuowr0N@O_4QX2PX}(`R@} z(5|IN_<1<&9WngN7e^5;jSX&3orM1b$o`}EY&~6hnBi94_5m3 zd9^(je|3OAb!*B1=|i&pUVT}FpCO%Fc`)cLCGez^$G$87ZeM<(Vfr=QZwj$aeQ!6A zC`iS~Bavb5kjo*=omgqY z$!_`jk{)~ddJsp}*2hRB#5UhhC}vnpBc*b$9uWph!f90cJ>5UaEEF?srdY0Tgm1#u z_~%QOw?Ak)KBTHRWlfvl2saRqmu<;49AD&7E5GO-q5C3MmLg3WthbNcJg6(LL%;oi zs7DV=!&eh{Nv5ZQJ+hhzrn$r_BlK zY>YOdOwRfyr;swWb8=B>A>yE(_i~UxLx3ouULCT<^$)vp6ea;HqptKNcXb>1i&JbG9$FqwYm3!#HRrUu4`jP%d1`Y_I$`^d!Yg(*tTiaRaXy8oi|1 zOra`zaAAg^e>LDUUjz7zUJdw+832Bdh;1yn=*d2|Z*ZAEJ1)-IsU}krj)tfWyYzzZ znOvD7gqXm1bDhk&z=)9A9$#nstzi%p z<7^55r7N)$N46#lF2wuyw~+Vn1!RX#^(*|)7JFYSRY9G_A|zFnM8k(&F@Ec7?sX&7 z%L#4k@pV+>0r|6|i`g@k9EXyuq$-no z)MdWfAHSx8IJbag-Nm-DW))-UFy8#pv3`j9!g}Okoyap;?WN!F?qAmAWpyTi;KRHA z+Qt>j4r-YaJlMj%TH7HmdJA4wkin$or*|#CAuK}1T1d zAM?Xbj#l^i{CPC|px==?mhVF18nY`=^AIs+byp^pvyBup7pL1?T6s#p2s*;`rD(IM zeI|{7;)?r*34QBFo}JRxLwaWbU_KtruidUfw@MpjQUtj_$r1o3Dq=}1S@+^fpIH@It>0pdyeMRoOYn8}PeCWw^SUz`&qJsH(sZ-YhLQ+kh7;0(B=q zi*|;Ys(cT+$Ynwa^ejF8N0%?`RI_{lCi)A2;zVCoT>oISN`~YBr!R|_{t$gcS*nbj zbqi5aUa0@wDW^i~e9kt>lf2txw|eQQX(krrm{59cN~Xr1jK->O^!3UdNBsojx*{zC zEf3;Z$Y8^Cg`*X)^!*f z5T~coxzyJGGs+6DgPn9$Ho(FUk&oZ0_|m*SFLVe>qt`R6{`(rfAK%Z@^&#Jg#y95- zQX~B`+DikDy66oj|6jA8X?}eFE!%I7@1vI&Wz{Gf74u6e=JHAO*LP#x#ni)jtPC{m z!WiiC?s5jaD3rLwcgjkjU41+zD{Iz7^|EnWsd1BC1yF&yUQeB}>j6&>WSa|>PlwYf z-CukUo$`Bn5*9hL^HCRzSA^=*GpfHf!~N0f*1lRTr(8Z$fYq*I&%dId%OvmP?7QB_ zz_WW$cqdS}z~sqcbKa&E@$EbiFa!xrL3XVX@RAVpW4vzh%51Kcr%&1Ol;+?+C%Rrs zdM+9oOf6!atEoGLB#>;rHjEBiQ9>mk-_}**;8=T0-5nsmdv)|&WQ76tLJl`5km+?Fj_1BUjS)%Eh zX|;E`=ev>lo*|?)v_A3v!{jC&kCWwS5*sg@TE9o*->zD(3#cdqJ+A2ovt8ct-8j0B z=f*%{Ukq>)-P{*2V!8}Us!=}87R%8%Hl3d^>(l4y^*}`(u450Q>7d(6t6nOz$~}G= zjmOb#JcrGW;)U@w5$i4*j6ROyp>Y?R-)wx{?wla-iM5Cav*|FJ-zUG$Zj!}lX?mzo z04f?zMst2PP|PXfJ06-|B_}kWW`^MIQb=+4c{=(M&lk}+iKe%vkVhS6TX(Z1IIc$H zD|bi(E>!_iCd>IfY;rl{2OJGPC1Trg!bh4IV?bcFk;h~(<8Wz=04@jP`7+^{BVBQg zXJ;4q_b{8>TmfPfQg1fLn8uTMFzsa0828Q&F1E`(yyk!xdJbkH6IP*>*zY9 zhHT|&#+Xsj*}-f!7Wgsy-H^tc*#I^z-%{|Z;l1uSC<%?B+PHksX+pO9}2;&FU42X-``4I&V$ zjOnds6^x_+t=St$Efg3mk7FL+amgy4noCH&6@8hFhSv&6wl#_4r9h|I$ef^ij%9qf zKtP?6{u}ez(7KYXL%vNFJ2+&I1*P~s5+c-9Y|ppaQ1uG72QcN;g2pwI6ZZng-mnG2 z#hmFamyaUD1v3ckn%%|Icz6YigTtbo^v(FreN@)Mgx^$p)BHESB!2U3XEof*qh^YvqY?b>R!;2t19Gmnca#oEUG6NNbK%Z%ojt*6@xjsijCjbM*rWZG4w^jz zYaZW@7F?)|hsK?JOU#l)H;W$DpmbwJx4U^P`e}XfnvXn?rxD!qq1=m%{ej|T)4C*? z>fFnSj2IZK_GPB5V@n&SXcI%6oou9CQP8oX%e4&oAMA=pd?+U;vt|8p|In~MG9v53 z^QAx{nC7btR3g!N?IAm17;-9KE=!D|>x9Fih(K}J0YsFg`Q_3eXmhk5XMdlwuGn~w zH0pWRNv9z<>tkU8H3-Ug0>~nI*vlMIQ&iAXwc3)9F$fic#dpOWIcU2cEw|fv0bn4R z!s*E@|K%-?4928xIp*>Jv1QGHIoO}YR;p>W?}7%`>_C`@a?R)&gV_Nss@i0`bap;< zUzqlTTEd!m00YA;PuF6bH|gm|n(pro+5U9wo&leO$7EvlkB5A5Iu}nZMoAMWt=UO= z!c7Eu=s!Cd0;ZguLJ+t{acp3rK7pYLu!S{XpyH9rlp!Y!*{&5Jxk$X;rmMXA*nvEl z))3+LE8~VvqMAo}W*^^u!Pq0VE3&^#&f8N~WU>XoSC%1~72LW>95|sq7_86ew1O5i z!aykY^|`{N*?uW=L(7)R&I%-G+na77D!mqaZn+iWxK(OGk85~-QDG4u7_)n-HVObz z=c6@$kT*BZzE?5yTI@oHBc9h}S0zuNa$5nMU_nruz74Q5AMGqiP93vj?3CqKr-w~? zmmk(5O7VY+L$)sq%N?WBcy*KrtPvQHJ2fOuYYwRguu=uE!M<{;35BMQL(oK$oR;hl z2d}fBEf0VXIQxIpJxP1pxRPhi@5rT30ZDNCa+0;g>b5O^mYlrK9Qe@|ZEIR4-CC0P z{rW)xTnZEcf|By4=NN9nFMMS_8Dn*l(Z#ueOz|LLKnT|4bQW!_vbJ;s|G(+0bxEf?xQPdA#Qq?vnJ~YQ#3tHkK{4y>>kN*gW6sNQ_>ss#zL0wk2 zPGb*UT(f+Ue@))sK=jFr`cbtg;Fd$B)Fva1Hu;&Cx;fM-Q5OK{S5)vyc&rxHZJW}} z=jtubo1gD9H8%=A$>n{kmLtRogF0>!{--<_S=;sDF@2sqFLUl_8&-Oe`CZSC< z3k}z+*N2vcI=Lc)AgGxlM~B)fb~~)%ZJIG|{Bg8@eSM$vzm@5Ho^LkSHM^q4R63dI ze`;psA)y~ZZO3G}6xMpjJUGkFLp||qo0bHxNwHGTi)M8Rnzgz{nysnVlYkA;w4TAV zI*hpvnk>|sXzE&1d>MIKyRdiE(PEAnVO-|V>s5B0KWw|mL(}0e@JXYZKvcqa^mN+r z9}1-cP%(kK^etVld7YsC>ouFoQ^+^3PmQOTDA4SZzzog2L_Vlyb7s|bVY*qJf%uhu z+cijvqpjj8U61;4V!R*|ORg)_d)3ArQ^r#q&_%lJ+I907Y`<>a&ft&Y$&dCQYd6#%z9vkwTS9HG?%jLTX|OYW~+2JSC zXtJB47gF(8aj+h5Hy(6*NBK{z8{v?qq zsJlyqN9`h9q3cpR=!5Hv&3*?(gCAEh4VoXLaZA@BmA1+!fr)gffUDSFw{B~BMKrl>$7QSh5@wa-x^+Q zyexMf-)~c4(o|`NCvkGSJhc)aUyVDJpW5>WraJ zFp`>HDQ9;qX>R51i~8KYDsiDD1)(Jcuk7=uezeDBFKptXBmhm&1P!H8+^Hwv(>Ux9UNWS2@GNcwkVjd~tWb7`LvkBfA=F&=P@DNco#Fy1nk0 zruzGc*tXRp_#Ukk1|ABDznx9z#!J@m(HDle1&ojy&?2e9oCc#R98kqqJYvRI%3g_3 zAAYqy*{0Ko$tl*$80XGk-9b)ymfZf=C z1n^KE`T>5R?y6X(b7IrkiywaV;W;*1&p(r?ZbO&9B)iF(+)fSg({)-74^R5C+O8hf zsU+ngUGF*1pV#R}_U9|lfaUc)K2Bd>_dJzS&L|F`Gg$iiUP8v7=+%zApx@=YNFGex zDe4k`gb=57zsBB8LLgwK1Zw!QS}#w524i2EbdxF{a+qq`jyjtPNLvw#}!*>~6;uM=K8=)QIpLoi$d3dyCPI?7*vh zGZ4So;qvK#ZDg>b8@PVGBBk*|_ln9{C)26fCIhZ34OSb(V1L~nZ7_3SK|w)AYnr{8 zK|A3ZdA7-MDZw>6EDtq^78~J>%Zir8zjAdSngzEmKKPNmx7F1XA0Bmla2^PE2>>vY+=O1IHF{{7XYO2qOk0^x=r^y7D6Z zy6d)%t@F@&pL9s9`E>kw91jOKF%)?DQuHkQ@4gecor!6h!FB<~Vs`8C}KLei%kciL$GW1jx9+4q^gOE%cApARx|-Gj)Fv(;6>Q?t_(=_? ztKbqmd205=TkEIWom9J8DOfZjXM`O_WgLqg**+=7t5#=F9f~je7OSXM_O}zoj~c-p zIj*LZwbIY*(0T=0TXcHh^}nhWDb=psnu&Pb5DR@&jS5NvUs?5!PkWoJ>Vn>mLvbJy z4dTZxjqtd$4Wu%E7kR!;6I_(pwowERGS^xbyI2kLY`cGj^5tqM6>!Kkhdmp`+;u3X z)YCL%#>s~ar!I;Pas6&BTZ%@ooucNbW>Dz(pET!>B4*txgo`>ZgcWwpdMw6eyxIr> z_03XWUL`#8v_xce0yrSdvd4F*xyMc2t$K+b6k*#QME0L_2P7_L`&Rms!MZ*AG&NUB zI%jl&-0+{q%;eN#>^}?;c~YH0uV2}h+>(&wSWjD3x9`7QHFfsiE%0w%nsS;AU-sEw z$5Vv=>a7NJt$1`@6PT8ifzpZ=Ld87K}Yw3LSNvXe*RTjhX0%S6aFJ$5HeaMh=8 zcCg69;Ss~z_sj2>>8Q8L;gUWBBjtIu8%y!#s_L~fQ3vUgst<}6Ag zP!WpGrUw2j4SkI;SHeQmE!l^fL~4*6s1j9!RD11zEh+q7)0B1NPm;C|u6^YIm91M4F;eJZ6D!e7ndCW}?Nn zVFC%S^YfBy0iMB5DwXknP0@gR4|zYd5n*c6SHL9OzR*T^yWgZ&d9qBGgABTxh^}k~ zuv6?ut&3YMHdS-Z&h$W@+fca7h#!X5nghaB?ybgoh7j1xkM;o-YU|;j#q0HQytj{) z3c&rQCog7ItbR;L@;l9yf&a6O7xI}YrV)pI>Y2-A5y z8xHSp^<|Wm6GYbF=FejW2G-?Z9?x%~a<2*f(SGz-23vjJByY_cLU35r+UzqXxI}%D ztW;=!kR!a8SE=WB{k9cB(1!fc* z-@fFV-S*=g{?8GuE@1Pgd6Qsuq(yr{w|p~nQc+*;q!J^P`Cc~m`FdWL{@F0(Jkq&% zhb0-hJ~IA&lY)JkelNsF?e}coi_=&OT-R(KQoVdPemGSp@u;kmXgS^a#Jec-D4GLp z%}%Q&A~YqFHw2qiQ;kM7s-l*>O6(~m&N1VKFc6fu~%OuA6ffen~$?!=RzB6 z**@vMo{|vs+&(_2Rv4w}klVnwyJ69u0*|zwoEtC^m=u*<4fY2x%DxJDy0Dfl zQmS~wB;Y1Zp&Vkm6L(OJk9w42z2#d2p5w_pN4<@Dh->Y%_dGPa=UuHez0ink2o%;W zL!J1$Fj(ik&0?SHY|R`Vr9O?>dq52oP)YD3T{s}|L$AS@M+HvBqYm5<4cI%PdZ&h{ z4&~JIc2e|1BEjt8P>-OKuZEvA(@M4$It0Jwuh`M&bGC4u{G8xBBz*<0ULKFlwN~_c z(h7t_LlgHgkyuE38%s@qnDO#(w0Kco){#(cs1-OLSnooBn&&2;f~x-cFZ6d^b`O}hsWq_>T6fH*yb0OG)ojT3JT?Z#wyvfZcZ0j>;KpC9kP5G{m|Z4;E}<-uvXv7^2XcOxZcyUH8~UU`+;h*F6^T ztl{8pG5dTsxV`K#%(sSD>fxU zL0Iu@67z;}K*6>+5)M%Q*4%baDA#jq;G8uv+hgC{}VsX5R)3W25+TJQ$g? zbkADMW>;ciRVId`D9iE2eqMb~KVBp|k?DR=dKx+>ZPVR!%Raee8z{v&PLknGPoOx( zCC}qcQ%(JB+lf?p@{y}}dv*ht=seknkN3#i>-#n@*95658rz16M(0EICyI6O!vLAR zffv8VhX~-FN*PB6c8wo6MJ`YMvZ@*uQG$kr*5%;lb3woc`Q=a`te{6`nb}NbRg;RX zCzSzYP-P{#C}(l>vplV~FCPaFOxsKzcN6w6i2T~ABZzR#Glp}Imqg#gJ*{6={vjk+ z+BDD!xD3APPj^`3_Di~xE~n_h0)deN5t@ZK0?|lry94I&NKDhEQD-|LA@TD4@C%4s zGFlt_MR@Iiuf5LS=8!XONc6m5-0V8OxF7y8UT7%qL-nV76cK)a&LX0Yz%b8t8z|8t z9`02uA|Rob_4dUGI(i&*P(lB5o~%tFaylULdVm2*?r$|L2P6>?aA5MUuF|Azkfk&) zF)90DO>cIYh9i9dueZtfl+S*!GH+kdTv!_JTCcog%)v)^7G9Z!f5HCo<6shI1TPty zz^%nUny>z?F|Gl*GS5PLBxR_$v_8~PX0t`pzrd0LD<@MF@hzjvo(Ew)g)eDI{$cT|G@uU$Qm=iJqd6nc!3@! zUT|J3Zz)_3?Hm_r+9hFO66HA(Q&2u-2Zsc^{R#1qp{IUuC2C^^|H#!z>l*) z71a^!)D7dm%-`A^CL9AUNkM(xlwNn~gD|x6>@v^N_ffiLDBYyX4yci&hFyC#&Z7Ed zQ90Teo2Y(8s9(-~&|5MZ#KC&cZ#cov z;`h@I9o;=Qh~kSg-DtEyO5(Mc)et$M_1t9WMyO#Ij-X2!#J{&O5(ZhaT0_T<^?H>h zJ7)8cH$TAFDx$%Xw(fu z{zwZ9y_-S}&kgYeH>!i(`uZM16cE8Abo#GSFrkfyHmB?JDF&3Fn@4FFZ+mbwcH@!! z_oDb`FRsnhyJenoseYM!Pdj38cq2q;TRl=tA5mGo^m)6r+hns_J+9BA?uH0g#OuDH zhPMcb1!^BUJAvcaaB~4u{dj_dDASFTwwojhAMN(p^9elB4Jc;dH2!=XYT&0bXq5&I z#!`TiWkWxno(cCz?Vw)#_c_4E3j{8b6_L|^1X0lsIo(tz+|ZA?IdCcQ?#XWx%oli& z!bQG(zg_JfUrrHkA;Fjq<3HjS%dBW{1_E|iwx>9Um4YQJiH9dN{8NL1`B%AB#&Ri% zlk;#1q}!7~AJ}saofNqS7$n{6$)tsCSrT9OVE^n+;!E$vm!~MS?5bcB)s9E!x#3|w zD|P+&e|oqm*kEP{vJ1Dn&cAbQ^E^BUK}7v{({jI{V+l{Zk#Ds8jSKRvc>^1a!!Hi%}Sr04{bTvFX-kk?lr1da#l&bd0iWpM=JsR&jXT^FU z_9wU`em)cW@T^Y!a;6)Jj@k+1r#AUQgnWUR0PeTU_d6u}Ox*$wyq0lubc=o1qB-U! zeN9#wyVk=zUxQ=kB7Mps1ND)cmN)4SF;r>@&g0|Yd1~<5EZ)d|^NF=p_>2tR+eG5o zXs{T>ldHk!c|0A-P(zs19-6>^Wt?H7?`}>*Qn!BcctTDQ(!xX?i64H%&3y%EUo-g8 zOhc>};dtr$j4TjjI*5C#rYZlY%W`NB7 z{d9!!MR~Jy(aN*24=>~m>N)uHT@iVJY0EXBEg%o$4ZGG$X|Ng{OFh^oL1euZIBq)> zFS2$AmyB<1{Bs4cY5|p(bul%F65ZmA_`2$Mln=JyOUegZ3kgOUE&m2zn***1&HB}! zfhi!j;=k~XH5K~M<{j+V$8*pfT7LJ6-{Gx$mF-jGU3qv{+@LerRcN{^PR(LZh5-2( zAQ~^t0E$cj673O0D@FybeZZx-h6YOq#B^zHk2RQ?5lRA#5?%zy1TM!Eu1S-}%CeI} zUo4(j$=C&N$O0F*!_$Qsx-=I-=5atvcelKpW4$JSrNften`W>UUe{b&Q>g7F>DrTS zVK0Fy+&u@I#`=61dP1)-M~5l!NT&((*-VFnZFs&It{DQyS-yXM>4h~2!oa)M^ePl- z3U4xskTh^@S5gyPuA7;WePCm<4}k2IFZMPDD6-y?-Ahx120|(sT^+a2)ja0 zYi*ejTraPA)Qb4D0hvb%$V~C#AiRXclpWAMdqO&t@Q3%|SAmNGbWH*Dj9Ga0oNjsn zghh8q4TW4_8jbNmRJ3TaP@_x~1{->t2u}(rkSPzjfWx5j5+2-R1PFf!fG3cLcZi-Y zZgc-sZ2`;(1A};3C=%ukPY$amp=U};#!46a>nhLxGKdgt0*2L;h{P{ufEnvex3YrW zkU9Zlx{nZY)1tmOgttdrr@M5Cu5rs8Q4vdblm6VHS1%)LKqg`2zlp*YkF*Qre^*;b z^;~7oJywz6tvxRuv4Ip!ll?%cLmsjyszB7%hhw<3>*r@aK%f6G($D9(4mM!~1QWDF z5rHn;n6sxRu2smQ!mdTdx7r{B-$sdAL-NHcWh9XKq_7+*GQuDgD?{WW8Gb=%y&<_# z0*b$gxD9+Of7Q@0o|K6t4uPiZPr^tqe>A#x#^%A-1iT^jrBkB>QHfI@o3O|8%=92a zQXhmzLbYhJsnfBELAH8L)?yz=J#w%WBn8;_(ED*v$q-FzdK7*d@+O4S?5eDMf!zF& z6X2P{IGx4+sK|d8xU0ZtopPedXh3nfA*9h<{4aCQ(%m-B>st4BWYZlfiIjA{l@mLO zXOcMAcH7Bx!6VyB;?|9GY^QDJ*I$CNBv4N%={?_UIvI-(5ClOGPknu^^l=;?lJ6y6 zD4{Ng9{oJtY!G%@b_8_|j2hrtQ#~kGOvf=sdLYY4Z=eCUFoa4!b+UmzXYtE1jf^#F zkUnwnxELt#1V!JP>7xaMcsk)M(;QlWK9esRp6o5!H5vH6^K72<864QX*cZ+^{kidI zb==Emj}S@r^p3ODY(RwB@n+Q753O*Kz?A1ag7n8$|6Ak24|?jFCcQmKP+Y&3B9pPD z)SN+v8dUOKnk*Xhsov;mp;lA-bVTn9qPt2D>CoHITi_! zRKuA{&Q&>1KmL-nJkNyO1Yxcb?41IfVN{m8_Vl|lI1#zKg&5UH2ST_OTg zg%?v@X@mfcAk>dHG8mLyN59OIyEa!hO_9vPwTlkMjS1neA`+3F>#JY*WOM08D5TQ& zJhiwgH{iH|uNK!dmJ_nbIh~G1!|}~U!EhRn(-A$Mj6yU-=)^y^>lM~kQ=;s^cjs&{ zSM$5uQA<_^>1sYPAN@7|I2}P^hH-P~JNF`vhKKB@-=A}(5JFcNVsz;T`wax zhy;kY$;p679WXow3*_4a36zKm%Jp^!573MC{h>w`3I{P){Ok9sP!Dg@ED1((Gzdb5 z8B4BKv-xCzAo5kGlAJa#_PG^iUgD+%W>Y8zTxjh(i)3|_yP73#)Im7gpHH^(8Ge>V zqmcRgbdyBD7?mXEm`9Lc3{$?M=_n;?8t#I~4_gV^>jHWEGX?pLcNj`d8iuKm{F~)1 zkD(_*SeCaM*UbrWl4sjhM;ZXH!;&~Y-@NKAOW(`QqjVTmhTF~a!;AR!+gB=Li2-29bJ(k1Sz z^kPv(0ABq0o>Ih4uqa$l#tmh$|yUr?|hy=6j3o~dmNusO;l*oai$QZf)X# z2F6}iZelLz)UypryjK)H(oZuZz$iw`xld}En5#BD7iXG%9FDmW8fDVF?znXMf3U3= zt2Es_;1{nNtih$3F!4y&iScSkmxA=1+pEDH)ZNxM%6w$IIt%1k2)GW^;)g1cY~(yz zXeK&B3p}n=ix<`52^`=Kq4AtvIs_#5qW6I#wieHh~9_-Hw@{Z(!clVAOyIKCWTTv|@<+>ekqmf(Ko-`3LGiWtUAe+&CbV`JO<%Qqjquuvdhl?I^zL4r$MeQGY ztS~1D=Bb}`RD(7`a@EFK+$bnPfGk8Zt9@y;z$P#7a7Y9FEC5m$iS*hA;p_MaYs6@F zu$UKNOs3|+Pw{RYKh+y+G&;CRjI{kVczD=tlU2voS)F|sZB-yuO!kJ*eLZF(k>lcs zQM2Fcg&|{J5U6Bba~u#Qge=n_*i8`hGRUol)?R_NoPwO{k@Aq8PRkTuoBNh`&?1F2 z4`z7}8@)9FW}a$%UiMmg0s&+HzT+68^TO0a-FY!0NU2@qNO8G$h zY$2p?Dh|iH&PIgq5~&`0Q9i1w5&7AbYcnX|KC|`V&`q_}`w?wzm}x8fKYj6i@8)KW z5>vn@$5k(V33(Ffc4^%l67{r89C;dp<4H4D;DQQ98l(xcv}x?idL3+ zgC#w>5gIkfd|PZ9Or2~xk8R1?0`numFpRn}*CGQ1$Y(0_)QYSNhn#x?>d@X!M|ULk z3iM#k`Q)!OkleB&2a!IINqopXzR%GY=B$sUm7oao!=^bhRdWy*PZu3^K)C^ex-#FH z%?DS14o9sM+Xjax)xE@5qY^GsV`+?yyPrnx3gmqzWA*A*Psl^TKfy~iw)YN!UECgWil zAkPAbyj6Z=sMWYYHR~KsI8p1+XsNNqdY?KR1lb|2`@Pe`?(;Pjm5g1c8HtKXFp-xy zGlq#e?;R~%7v4L8h|~iaG+l3bL<=&a*N4H=3W5o1BKF__MFqBbP{DQ>Vd%I@$n+yoM}9Qt4$=1je~;9%{5`}I zGqoy{0mI*2;(?KU_~7g@*&GV9FP>cAM#pp~RD2-)It!Rbq&}+h`6SoPP)#AtiaU?z z6}eAebMNKxhcCUy$=;a8NRdgDHIaz@AcV`IFNW|;Ld$BxE^(szJm;5 zS?Rkm`W1wBv#Lf*7PNBH=lkh;`#qIpi91k?;B{J}nmPxNDR_31nxek+?OO0WjngpY ziG9bA&U7@SFc+6mnaec!kvu&lHH=UqE*)ry$+w;qxT8?(7Kxr&9Ru7kP~XTMCGIHI zR}zlM64oiyGpQF*u|G=Y&TY34sD-B<$PQpghz+?^3o7;ltD~UF94`40ah>M}AcBJ= zGa12MPXUMge)!|%`*SaFuxPwfGFuM3Pwn9WTqjMEy&T$k7%p0sjkWuO+vi#mNE9#O)GvqSQ8bbqg3Kek4Q zgDh))AHMAJ#4HUS?$A7RHtUDS14M+wr)DPVM%F`HLeQBFMK}A?{e*KpnanPylgV|P z$*+XcUT3zy>bGqJ^Xs3pNUHdEjqCFomGXx#v|*~6Q5uQ2X=!~gL@VugbedE9;T1D9 zzODRz114)#)Fe1Oqr09akUnm9Fj|Fshc;*b-tVzI^UL+ z70q2|_pVj3s6|uC{jOtp8}D`vQoIx<+gciaUi}7sbx^G9HT(K+xvc_pTLo&_QK776 zG(vrLfwB^~yeJdZ`+*UmVLX-0%84|zpa9tyHp`cdrVmJyRk+`_rK!^WvY{E1EK+e7 z9tdu2df9==1b4muzFr;+)0d*<(t3SIUu*NV2E*s5y|FVDC3Bjoh_)~0rY*x)w&)bi z^NazEv1*p45Ic_l56)T^x>{(-cY}~sL_+G=uP@({#rD_jcE4^-V+r*zQOD33jt0Z4 zJM;7@fe{^(r`f*-r4(@WCM^lcHOJTEW8${isOdXh66L`WHHLD(gT=)t7(X)qlRZsz$==}@5=ssz?7IiRk>nGdc<$G2lM zvpnH+c6q|ztJ)5&vlX$lM-y~D>w@iR6{nz80sy2CCceP5X)i?y6Sbz<5DZ7{hFO&% zycD;P=!KMdcuwPdC;6Wqng<0U35dp8zXxc)aElebr@qp|Y$OQIcGl6!?kxUR$%iI| zhu6*DoV6`P`1MutS-ofB$h}_#UQNnN!I45ucxv~q*^tM29{12P79tvtp}UZ0#c6R1 zW~$1gd3+fpKLb@=4rsdl}n5yTa_>kpus#{j0hoKHf8#(GhNd0*WAb>!0cv0uj9Dt1R73JKruQK%2n=b^llmt?+%5YWFtT z-EVi_2TK^MV^^BLSXeag?~CLq*`IHBXOHX63i8xy-kUrf_V1xioRn3Px4(i5&*d!@L?qz3mdo61K41zA2PaW#2^YqBqw&MYB+5^w~3 z%}I6tP(v+-BMc7u5x96cB=4h5bmj$D$E8>p51hm9b-tag57pz&&|dnk+E+1QlovI; z>8+d|pOn@Zl?ta99y*4e+Scqg8eICVaeL*ATY}-EBh;cw_Hd0{#s9p%XZZ}9hP=2U?fUT3j5F)iDk*rog=mS)k`Y(GDm%@wfS~E~=<(A zay%T4Zq&u-W@J4~p_;9J=%=AIr7yzSKAl2DPZ4*6zD7mAiS-f>0_LpNEAZWDvG@y= z8YE<1YC1iJCLIl!C>u~(M>Ibj79gJaRtt&LjA?r~jlVCpTOzIk?#ymRqrXReHzz!j zK^`4P=_DP9g9Z|z+(I6l(TLZSpfWljG3z(q)IdHv_-PtX+s zCq{Y(v8f~N8`iTh={&;_6j=O_4$Cx;f1-im^#CKHgQ3NzvJbF??LKb3%R(qjz4_q3zvtM>t=%X7uqP~K#`XDrN&DU zAcEySX{-?AJj{YLaK?}$Zc^Qyf4pin_UVQ}yRENz2H||3OsC^Ci{6)hol#7h#(Sh5 z-!Q-LTn+xd>)$bqoWaG#bTpfdKaJinujhOo4gP#XN4MK{+tgKJ(`_O5gaU=(^g}}E z+)Sp|gDYDgLa}_Db60&MT?H=vD!9%A63W*>u03H=i~5hWyDJF&;{{7;?s9zB>Gzfo z#iMPES^*Hgx+fvPrz4;g!9!SL6jEgfpNSrj6lujsfPkUj?;*|b9*}_lUk{9gZVxyl z9gdzkcr6)<_W&uNgVY_qUV@_!Y6KmQt95ePhgu|*xkw?g&R1kbF-K}aqUs)dh#cKp ztd@2eLzf3g36thBC7uWz-@wBbcG0%RC( zOy`@^FrYb5i&wkm9jFkOo3-BH*?N_j(etISQp=#RWsCnLzz|{>q*@H@i!Aga=O@C< zJj=X8@KNv?xQfr_gPUPV)1oI17@jy(i+@xL%@^00KMOUoj?fT*W$*W$t_~~31IntkpV;2IE71Sh@ljA{c1xvz#=fXLiOlEU6A73}W zi2SJV`gA?lvlxNio?nVOopfe{;qa=(PK*l$2WhU++`2R>~KTEzB9iPH6+0MGd@nxKeg$06c@soz;2|G1{;@M`^t(A%xD$ z^GdH01bY~#h)vKfhgMUW244I~zQb*tdh|6y4SQ!B4WqITriG8lSw1GqZ&#_DF*G6T zrV+s%RPvly%}rh%ojb`>9V#fW>+YClJo6wX_hrcS*KJSuZTgO_V~X65U8drHm#i8g zS(P7U)uBZ)Toz8vSvBIj_-7aT8lEH`-g4$6)VOL{lI;X{zUsZM)X&#3E*T)7Wrm3HW6PzE0JnXSIWphQN#RwGxzWk$23_+NCwazW%whALAxZW-13F_nox* zHmqv4{wJvzxFSFQe8`jRG@;Lu9YhoqRWjX*04gFQ&An~p5Mhz41@SWUgme4x{2a6< z^U_`Dxy~xN2Pq-1RfRr!&a(zH|3ZvO@qA}=GrGQ0*Ms@l_^h3LLne-Ly$)n|`M@|;fHQP95m%ZKJq**@$4DahB;BDPvoUx}&T?PU_LGV$(q zyM8*{bpZC^3mOBeo0$4#W?{9p_I0DQI?-bi?~+xo(ai}Oz9!R$#czL~21vK@f6P5g zbK^M9XYKFEWlpU(#p;t^N%XZJ8QbYhrVlE`RuXRMJLReOpn z6i5&RK>!2+-!=a$83SCj2F)TlYzcVeD5gwzn;4rJ-U*+$Ytygl77fN?YeMri;fp=l z{L+j2hfXA(5cPPrNwP|KPu&71YB(XQy2gnA#i+KB*=EYdm7@zQ#E_Ufhz0Rq00J*l%mtNmqHoMVZ@0+)`Wc?3`_$qYTx7&AR zqjZ+*AXuxBuan^ob?}a%-Tjon9v7d#s?uY1hv|Kjn{VMX8vTA7-rTe}waH2LOy9Tb zB%5!*OL+Rm!j|2$xCk4(glZn9;IP^)Hiy}+7^=3hJmx=v!{VDaSAx%9S_3am= zZ1JR3kY+LFGWm6Q&suE{QYq)eYdLS#EfN)p@m5%HG97$08!y^x5Z5CJghYSUZ8zU- zq)5;rkL#nA#uUI0#X@teAiu9BHuf#WQdduZ#K8=>6KbE(1NY7nASE#YL84beTILZ?UEVR21n%(!b zf#Gg&cwa)wF3u`}Dv%?9!uOhT(=GELtPG9aah9aHsP2y1n7t}<#SD@n!607Isv?*T z&l*nz2}^h%4H9nOd%lU#38J`(j*ZYUJBMf=!w*N!KN@;~#ZpqH?e!Mdqj`7Gz=jO% zvzxPEO=EF8T`cGA!MG}DY78JgI$T_z0c;uHX8kkZ0;4}#F7N-P+a5@^_Yl%kxOwow`#cw+_^%VKK-uDYXtYeyIc2T-= z?X$aZD{t_*U3k(3zQl#_lnkq;QX?@QDg{$&2@0^<|KVZe-$~orTIVfki%EOpnrgvp zr}Zg=1GD`UjOK^5PV)gjIPmoE9Mw@!}Z7cSuLrX$L_Vv{2YIUtx| z&nTQ7!d<;!yYCYlGFs{q$yPq;vhlkjpAe@K zDfr(QLVwggu<9S&%O9Au{=uKM4;)U9HIJ5%8rW9LlAnv?je&qFJcG4Xy8=~w;Zg^$w5Tn}rnuiOB zO;9-4)VsXGtBh|q9ZRG#*MrN+r8S8_e-hx}?1H|F(RU;HvY%R>aoDV0PWm~>g{6<8 zS_%gz!c*?phRi1EgXAW`;?&8**?Jo_vcU;dMOjgmBT!Uuze<_?aGky;%?}8_SsiYk zo?1g90S`Gs&Na)!qEHniDM&#Ij-H;HLk9d5xvpAUMr_Gi;gjml_=Kh*;m#01=`QRt zOA!8o9RZs?CdzN>GYLU)|5Qn5ty^~=mErfTqSUz7Z~@_&f3x^!vb{<7M;4#2t@vQu zK9jcN5K}9Nl5f#}vS@*)sbI2>)I^Zj$u4?yPxdJDVHxA;bpxcOdKz>DEEOzzWXl8) zjw^3fO$zWgG3`M4%4o0^DObopf+V$g4GoE<{=)%jxqzf2IV%xVD6Dz}qtw{fcaEm$ zur!UEz>>@nf-M^Je@bVzP++Vbt-4GK+Y5o7qmbHA*Shz8G>&d&3tbq;2p7>Xyt>NY zFX_Oz#?=f;b6n3RBV8CT$8B7UqZPeFZOh1OY!B!6QNP!}*B#I_0KE>Ru&8m}TSTL) ztD5Q)pc6~2OO#4lVC$o9E*JxJ0ap2%uh)U~?Dm*40!JqzMYrNSx<*r#KJ77pl*xao|(QTGDb;hlsCut$r=8AYGQCjF{KyIq1;y zH2%4Hiow~W!#*9X$_t?=aik^kyJn}2@7ib)E8*i>Sh|4lX~Dk>+G@l7RGGc!G}|X% zdJp?U7OxJ2=VZ^={~G>z{DmS^$ATFDA`WhlZr@*b`!nq=l&{h``sNR6UoqpF4FZN&rMVLa2;dVTlS)G7!9sR3-whmJ#i}CrQ1hL$`UWfvdUT+ zE|1kn{ydY6C>N@Os#qX0T97QDpPY1kP^ZmmHd(iG-{nc)j>~=03~%d@Y`;eEV4Rp%bG)Ebi4{EWM4hPFTQlP5f`Blu57PE!ZdgVZCZ_4bZ$^haF`7|%2Y zv+=k$KM{9{p&*|_k(GcmzRmMFNUmwu<8E_^y#!te_pmM*@-}=IbTprtqYir9NSnWemXMZT#Bi#S0kYvNPRUj1a#Ll(4%>WR5|$( z4SZgeVw4BOH;L##usnDCa^Y2LhDt}<_*2dpaQrNAspRP-zQsYW;_Ws)o^F8Hma*Aw z1WzHA63Y@uF|jOieTLHFnk7H-L|u@!pr5AOB;GaE1Rv~$_(L!Ylxf?nw#mLpEZBb~ zi0<)|xd z=@tp95Q2X7$i`vnF)fuRhk8YV32EhA&W@vBOoI2q^U=W)3?ediYi1b6W#w;)iJ_Dd zNXep6=P3lEtj$H=)omzxY^V~|oVdtoF1O}5zQLv9GHu)V&es;BLkUx|F`>BBk>eNX zJLFyEmmCS=VBI{PBstxFLixrcQ`ysxNqTs0x=u~gLagbO&-|nfLiiy!iJL;rql{)h z6R;>wQ5tUtzAgFG`k(rDxWvUzPf7ILq@2U=;W3Ye5;3^A!kZMsVoG??Hyt zd`e>p4rlmz0*)caZBV8hWS`XuA|2yC|017VafEBS3Ik&@n@sNIN&uCTO?;jJ>kl;qSMjC>+Wrk2Cw83H!qzM3 zjHVnIT)RFXFdZwL8ju3uc2OIK7+IaXCsVqCQCS8sfs|zj;3%q1(aKf9Q$b8L(6NL% zSU^ac(5g&JV7k$kgKE5@6?wo*NGDoQ)7pL@yKSBOqx~t2(HZQ+R;a(y%^vn^bk$G=tYxrscDG4RJ_Yk zdpmp@ct&qNna!igY#3gKAa$UKyPEkbZwBqihZp>Jk*TL;eaeZr#?Soy*UC_>hz=5i zH0Igo>UGFq5xJIJsAZZ@Z(!Wxl`2$q3+lWRp!~irE!5#qkMRPeu({Qy_|XDfd%L72 ze_0}!Z8ys{`s3c3ct6=sljU^HT3#G+-(du>&4rq>6oG79#D+B%nD=DTbqn=)Hpq#Fr7ZTYQ%c~wrg0PH#r)WL&6art|-sbv1Zcyj|1_BV?W=^k`*9}vI zk$PRQs9ukr=#k%S<=tti&*cL`;8Z7i7_=l)_DmFfKzU+HzEAiz(EuVQNlhYQ=yt`hkse)V6sPMb{C7QnBLO#1yYk0} z?Rs#kV?&^jyhdM(mt>n9(jC%ko5I`T*E&pky*1>TWed6XcBa5adLxwU{y*somQl?! z_Bn=P5H-7dh}|6tsu$Ll!j+o2V?{|tQ-_L^_aazF(UC&~t>r)`1X>In=L|b@74L=# zzkxW?43`e$B;G$K>t!nXJMxu_zhXySynAYR?BF{Ksv?(zRaCSHM2oCNgUB1Lp7}-j zlbl6_i%afc760cuS4Zptie#LWp_+c-UPWk%SwAvy_RqjA8903k#&uW zniD;$J5-G2TMiz}%Ev0G)5b795*)eXRJ|x#4E$&M`mjmrBDK44LI-{be+0=Jq6J|JuZ#BgHdCqR z-%4U=!C1!CymznOwhFh}L%QF8S!eN6y8AMMDEA@%4OjZb##P?_xBv*$2 zV1o|$W5o{Z%{sZ;97O(yO`-ut@-)u{M7V=*S}n=o>k!vHux&_p57`3Q>fNOKO&NU| z{uurkqH8|bCV4VX`1W4Rtwl!LL4a**5s7fQd3ruf;$2)SPCwL`7Qi07^@A*|C7-oD z+ViZox1);FGq7dK21dFYWN=ryWqRBpOF#4bZZ-U+q~X(iX#~!YH1^En%rUa$iLGjq z)dRy2zE1JdNDRkWHAlbI`(a~U!{O0oH_!1t!7HSoWgvM7p@NH`Q-7PTUKl6#di}m& zr0{4DO05brjRP@>JH~LiN9j@{Sw&0Dw@HEh%D=}Y_;ubz`H+mwfg!(aE` zU&bkD;gzIj>@%KSU1^rzCnmG4Z?1a_ege11kMeUjKQLg?#>wO1uDF}lfF%ePsG$qz zA-Fk+y<*VHrnVt@&;jmyhsO#=~P#d)3F_d1Abqr<@8}or{ttyfR z0rGb7+#pyuV~+wn@?*ASj@gf4)!-X&=Jt7>`G28Ha@HZ`;RH|tkvj{dMkcUg)Sy96 z+d=e%jGVYbW>5N6DPZ5TnX225WMVrYq8P!-+B7|heMt)zw6+jfoBHr>OsDCuxi0^7*KW$M5iJ{FZ~q{0)qIV7)N z@VH2U)Jc*6B}gF;Z4$ojJc;n)IsNFTheP_>^k_Q#PNnvR z8hr_rN5J6;XvukY{`Z+Zn1_ey0(r*bdUhA}XUpYmQWF9YU%E@O;x&kRDeco10q2P? zTw&6*TpYi!T$JNFy5kO>870{c63=^cEZQPO@p_1$XS5dDN3}!IQH=;Ip2I9QOxfU= zsYzmkwpPLg#(`roPFE*Z#MPzDLY%3BB+BlHZgO$|7U6Okyn6ZAw5^M$yDr1ea*_3>WgVGT#ldV#9NI25EUJrGUKq0X_Lik=M=3bQ z)8-hr&M}&+VdK>Zq6a;OA!jg*{wDVIciqoYs%hb1>*8Qrx;TXS_%+K&q&=U+zvhgQ zXW3=EZ4@ho8e*apIH;SVRl{`kxCy?L=TSeaMSlGd3Y|lHoP9PifXCBj~l)N5v6c}B&-Ph)JQx^+ShYw2321pRZ%5D^E3r-gcPG7#qBqrm6eU5Xh;aBg~!M%Fw0_dKttpi?eOpVHevJ*@R3^#pQM!Y}5C3txwx{tcFw0Q(L23#xF_w z_^6m*P(L5*A5i5{tFzZUZFLBrqn=woM=M1LN_cFty*L|`)X`Ri7Dy>PP9ooGQ#M+* z6Yj&tCPRGyv%UrzAp^wp?OdLmV~O~uorcmflCzePwk#t&cEPs6pww=q-N1>HB@awb z$W0^Vnro{^4L7~=oW)LKUj(z}6FMbnZTa-eFN$=av~cmt>xMSZkBt_Cq0eW(*EF|% zuQ0c}F_wRdv1({J0xk8jl1|H7>Otska{yg^ZC-Y2saK?kBH_Ja$33y6paPxF#B)fgb=<%7KPacWJBbUa9 zRQxJ`$a|R3Jfxt7L?u5EW89k#^9O7i0K|u~7QM?+Bs{#jU{*0s)VsNv&w2wQY!#w-EHf9PYH`(O zxIlzLlHmvlY(0vs)NoDqN9kg1+)ff+AUE9oe9v!A-~&A+gsuHHW;*?|Kx6UpzTGZU z2^$oRLCTxpKk`N-Y(zX2&kvF05!i)D!(Z_(YPjMtg7TX5{zzk40QJvPniewfNmVG3 z(BeUPD3j37FZ_?;FRcinC4SP1;NAky*gP?-JvlQ*!Bxd5gu~%bx)|z)o9nau?VQKybkBX=$egr>axSJEu_^_$AE1a?jBPPQ41HUh9Cy&e4&e& zXN1%5x8vz(-s^|saCsjsL(PQB3^&tQjNp<|YhJaH1LHEBFP3#sL~ZKw)tDVy3F`5c zn3Zi>7P^<0VV5pe(X~3YnG&!~pwnBv`|9`ZJhA4lL-m2IL@<%_0Lb36g$fi4y)aU8SaqQN&Nt|Ol?VZj-M~RhKZyn25cA9p6 z{Y#Mg03}nRoLO{wW+n|q5(GgI1i=T{ZFb!7ov0_^o1**F(5qMwxWw;>u4Z<}{pM%B z4XTMwjjlFBPv|FES&2ZydLwiTeRl~M6mV~x{c7pzu+X*;#&DPZO1540BMlYwkDz|_ zZWE_WK&t2*hza`|Z`1YiHGhg9lfK5Wf(?1y%RKv$bU+(Y=GscFkQRfU#*Y91$tSus zeEhj1(4OwLoVFUOL)nkGw#c5I4sFhfZTnlgK5k0J87s^%5Wo$iTVaq10KdOfu@8Nm zn1w*0o&j~O(0UT%zT#)+$Ib)06se*jv2AP95GTDrUl3D~z98yiCw6t)MQj>+UF)W+ z6M;1+5H$>zj*s9LLiu!3#1>sA&&uwOH(inKC^_C{m)z>((sAs(Ck_c=hsyXJ>mCnrwZ>8YxQb4|9ZA0>~gPg}^--h)?z(}j}?;kp% z!x0oPdQZdb=rEvTJG2g`1yB()c+a(bDX;GaW@zJPyMrZ9>|^6CS9HmGxy@SdwL=*J z4dFAKn}@To&7jNECB8Ou2xNE1WN>Re0c7ZTzI=lU>D~henSE>bQ-Fnfpx%f+j!c!8g&?Vn$8cYpLfWj@AD(V0TgX;kTN`*>p>66RZ z_Yaq7+~Q^ZW!m<)hk@Md6&OWjNK~-8Pr6%liKF>xb%Q^%MfcL8scj8K%m~Pl*{0K? z!mFrI)~~5e!uMmaNfxuK$>{QW65Y&hC*#pV93VQRrmF2Ih{0wj76`WxskImL)u=o> z7*ylyW-QoH~n?-3mPf_Ad8>j&0!Ed>`i<15wMj3OZbj{HJOg?uUC=~f1OJJHIsi9xfW18t8nNflrdS*zxH;QHHEvrb+ovI2`$d!& z)b6RLcFI~bgP)}IzBQqtA>Ry`7P`BMP{z1JGs-t6@Q08Q=ea>k)6){l$7yQYxL91S zj&|`jd!D}@_pe91yHW}X;-AuAYQkYI=Ai|1f5q89=9}4LGU&paFk;;;W?x6ENi^gc z7U7aQP)l-qe72h0bV&9EF_-Pua%Zew?tClgTJBCqH+ONmJ64XL4mT=u(a;>O3H8BF z%r)q+y7|X4;kcD^u3c6<$_3po3fotbv)P9Z>g$&3OB~Yy2iCXQ>hok__`S<*&M)`Z z*U{(}wwdK*Xr$M zbiB-(g1I$Wm`ahytnvJQaXB%aYrbOd=5yl-pw_q1ay5a73{#3Iyy&|%mOb0Ln%{nz z{1ttf-+nT!#Q3T7#+a+Nbu(IxKbto01A@fok^0DrxWsys+RCg`hjZ@sYO*kv6^{T; z$fTG`r2c(tQ>a3-8TPE@{q53NB3!OoCL^tice<{};FSPe+`#?cz&o-~hV9L{g`e)s zAKisAU=LOMpub&5wM1Nmpc7sg$o)vMp*&$H0x+BcRq;V@5u>`oP5Ld%x9j=Ce+;dL z(6#3La5d9wH#vs#dw_%H>|Uj6wn5$yE1o%C6^5#6Mg_j82P13art{i%ReTfwg0hY) ziK>!g9n%u%tVFo0DGEYso$Zdxg5!-2X)%tM<~WG8!R*&cWS23ux?L%OGkAuDdvf}E zXj>yPMh}W$FiHd}{wgTHYWWTUY1(79YLMwzm8lRgYW(P*7Apf`{*9hHgKix<_+Fs9&WEoU zrxxM5yFqauheBKTqAGS!0D-O^TT1lpqjz)R$nqR=!iOi zO7N28&&d)3>knu5hNRR16bwk?)o2#``+f1nE<4_(k3U}bZI%n4{%uylBL1twtcolU z>>-gMrN}5sE)X{)l3WSK*iDnVZ1Iu^%Wx6gx=c?q<^NWb04+e$zpn6u9~bxg?eFO} zi;p*1(^i_z)B4xU+JHt~9=p5?j>aSS0@3zKUgbobZMU#r_ZpzkVikVo;CpTf z#Wl)bM2N+s)l=J{Zg2)^7mGMuLlT;+Eb9X=tsnVt3ysvT>}=oea`-9(Jcq=R2dCXG zhJ0;-D|TU`ovPcL&!JVVlq}Aw@nXJQUe3Qo5a&O<1>2V`OwOoF?7DXm&OaI22Fy0K z#*^#G^l~C3w3W}oTG1=?+;hU-H62I8!0!#xbNIVaF$3={Eo{VyC4H)OngVYHk;YxBk z`6{F(5J@Ut9^&IFKKwXy8Mr5xf%bsx)yP(q5-U!npv-q;i9y;?6**Zb9Iw|d6MkQ4ZfkVL_&y7e3*%sGM#9kUSI?$!OcOp zK1O)dZJ})l*nRXgXQmVh8@wR7cGW2q^L6#GO;*`Bemx}OwGDW_+PzSjNESeA;e&m$ z79StZl*phTv{b3HDY#``pcc^9#cSU6G;p-F-`yszx ziCJKv?I~Pke48vLSE|yYuB88vX1hhaPG1e5`%q?!;Hycaxj^`%+RBm2dv!D?X1x$= z_UU%EYLOjU{OjZB@tFQR)f)oxDn(tpoWh>v6#qu$*6psuvp?bv5n6s=_m4=wop&%1yEFrWhbZv* zbwcji-9kRuLVk_cIA5pn?p<<@GRbqUzjQExQHuRh0;sfly~Kh@2@fH@6IM`Qu+M}Y z*fVa=R?T;Zw_UQ6cl|xKYqjlXej(|CYW0?$G_dhZyWb4jh8yn?{e3ab*D}Y?NHBRnJi}7wXJO2VELb zMgi5A+v~RyGAC2PkSTs{5w3>Q05q876N7qe*HC=PKkjUF3~+qjr? z<|iV^=iyLXugf)v=fD{{2bW3wxao0O*3XW8$^c+oG-5;#9YT*(r9+5u5sxT5wK1V7 z7(&x3=LX^KIG8jCO9c%Kr_Uck8tAqAeMwVo6FVhz)L#ur#N1+j^k6y^57#UFPPKyJ zr_}60g5($qg*RlBke%dnvgN0yake|={Lr7|ri45Fvf6Vd5HQ#;{8;fGQ;FcMBq&WK ztoSKpbX&ri4{rV?HrhFxzuwq*=jQJq&tnihw71&g0atSfST4C~x=o*wV>3R4aw|^6 zAm>GO?QD6r$!x{_t~B0Km(K&u48x|X-*R~XLn^Nf96!5tuoUv zEs>Jp`Q#YPW`TN&wQaCK8ueX7b+2@^p*iapogUw2HfKqeN)serEOX^kezFat_)O)3 z@*xMlP%c{gf+8EwrS)Y}w7i>4uAL*Rl<%w~ zBd-@%tR%q0=6v}T89L0ktuP)f7BiTF>-qSLX*JhcimY{T1*q4v<$XAD!yzj70`C2j z(j@5(d7~nOfaH9=W9S!F#c=>*O^TlTN5Ow&gGK=Wu0l`s7`Aj5- zBuQuJpSD&jJvfl2)RtzQULDsG6c)R+Ay83JuRiFAMkqWYyoUXxN#0#?}n1{2{11}mcH zz&iPv{ZRbzx_)&?6a4U{8dFu?`>@kB)2b%|0>5Qj{-@uw#mV`gZ?|sMp(QoUwtE|F z+31M8plm33XG4`o&9&__EfVDL55g#!MeiZVAtgcn`$p!lvLWxC4cTQwPSKFjTr&}h zu1b*B8|NcSjjxe6TuZ-}E{OSRx*%N*RX=(IS{%m*cow+aC);h`&WSu-o`)~QLBE&~ z<_;iCo*EEc@?3K@Rc@#qM_#*5xe0hMrQJoe`@SLV!2sH&z^JsFZ15s6PNlXTeL{iO zkODNMz>dsP2Jm{JBBs-A{CqIthChHC%hwnFd&CXH4IbxucUY8|^1{c{+vUacdhF!c zO{Txb@_YOmpVD}De3u6b-J*hhqrX4&dsN7$O?-GCDd_T)Tb;@0=#O%ARcnSZ@1 z5kcow_K{XFh$GZ|8P&Et=E?5)xEbPYa4T#_#wEA#HsFQLKS&RV0&Fw;v<~yAJ2yHS z`m8?OcgRPzaD8elDi@I3b|kK;dNu}x)tU$u*}*&i{1#dk9J4aFQHz zl1>Ffn$hK}bg42Cpisu#h-PL^^JxdY*1PGjk26J>EB7hfF-LKObkBOsUh_jD9W%X1 zKnq|8Z?77J(O@WS-)$$chPoFqvVU+?p0#MQ!6x!%4E1Aa&oy(e(*0t^_tfoscrdEV$&^Z$!K#7Z0lzJ6?R7D>MAG`=PlE9vdUfo-TqT9r3&k@ zfTHh4l`>WX@&kfCQixpclLm+m4IJIa^Tvms?nAv6#Q<3R3~#-~;K*sT>!WrX)6*ou z)qiT_DCSL+NgHc%G@7^2wj>;TiS?{klJ)Kv4AGa3u!VZgLxO>%yS6OkT@AUk7tO1Z z259aF5xr+LgmBOh}Xj>+LD{xjel>N!OXGX|I%ef3}id(dD{ z8!TqTxt46ZY*I^J&@%xy@$*YOetk$JQGe9F5}-4XA3dC@_!wSl- zCe8CKSGdqWP-feBpn4x4Uv)h*a~But=A^AmJb0zFi4XEKIUP-FiGM`IJFM#@UMG30 z2?zGtcz2ng^6zTAiU=nuNGUBY17IKMSuCd(d4Go9@>z(^Lv{<~0O${7a?#cZ6b^!4 zBRkG^@Tj{zMI_|=Fk-HrT(xV@>g!m-bK{Ar_kSP@Tn|uIc5aYf0;&Z?wX#>WQQz9v z9qQ%!qWX~y67dW9cNFB?O!fB@|wz~o6s;5Kj5yV~oxmJjUa{XX^&$;^la_m=5D$-BC$ zLJ3IFOSF~;Cfo^~nmcE58{2Rqsar|1%#NBmQv4yqxySJ{&HK4yn?OZ1)7R(pQgJ85Fbhy1>lDw@J~HdISDd1p(N5cmcS4OF4+ z7%RMP{34IuzqNEKg)MZ|lVwJ2xqlJ2xI8QpQX6f01acRD7mxwHUJw9d%<_j6!O(Q9 z(y9`bm3our;bDaX_EvFaJ-|&Eq7l{MCN?8>S42}y9aj)Ts2k|S#MChxQ|Cmf;;e`F zEC;x5n8uG?FF!HmWGLnJc@W!#WsnLd%kiQo)8SAw9LJ9yj7X+KNM61r$zFByn-Inj zVXo6H1%p^fjHKNi(jm`U$00_G#|^z9g9W_C zCf*c6*RUxPL}o0AlwiW0MkoWL6tTi&NdAx^L2|ZpwG{#(^t{lJ;lU8<=2BIsyW?qw zGsN(qsgP)Z*O47PnvToG^ASdIqgfv}OQLn7*u%v%N*cuuE(RenVVZNsl9b!-%MjE? zrOSb+ji>4wpf>8Phrk-o7US#58C892`E5SG`yaSW8Ccb;um-grwVtV1#6O$v3uL4D z#LBa{2_(*cPiyx?;73V2JkYn%7cANic*N+1sH%Ie?}MWEf}s!haxD@a)Q=Ob|F4fm z95@mb8S~pLW2jXcB^y;cLaxo@>u!}cQ01A;s^GO&kt=4QEHHYl=QETDnR%hzVJ`%A zkaFM;5SNR)JOhKf!+HvOWA)V*i4l?RkS2}nnEUceF0*7(O} z3y2Ra-UmahwK2$)NNOoXOi}?Exo~S*T1bx$S*F{cN&b``HnQO}7i|5UhRbfbVE+`i zH3A0c1~=i{s;qBPV>&X=vko$-zv5O0!|Nv8VZ6WioUW7EZh6dh#p%N&tvmCABCR{V zH{-wdt#u~w<&9|d2GY80Fyy4s#5}mBOrL&3h7VOS@||MKPp{J~pXO<@TOT^7r5-Kc zoDTi7VD}AY^Sb?^_51^3U;cYly~e*y-l{Wv(}xIIYNankq)xoa*6CB)d+(~BRwTL( zbMZzPL~&~)gk+O4Nj4u~Nw7#2yYHdkgPsIT06_$V)qUq+{Xmd@uuJ`b!yXCo>Ve!P z$&WH!Omn>QdY^wFw^XyZ0FeV0a!eHH3>!Y3dj5d;bURIH(DIHM5y7ee&4oLsoa&c?4)0EM9N-esMA72y@QbInxWe#+}}`ue8PRJ1TS>gI-Ht4 zfon*RwUA ze+3Ly$ZkAeM3?j1`(<=9znV>FlZC3R9UBG5s%j?Nim0$INDk(ZlYPyu3>~SCYdyZ^ zd9qWvpPI);Gsm;;CX+AGYGw*U!5l}vHTulSo{q*7(`t|v?|N>S@sp3U?nQuP{Fk|B z>2BLrdae6AvbbG^coQcp*|Hm@etou+wCMtel4x6vEUA*5H22qk7*He!qDX?WdQMI^ zZbSfs!C+pPhq<}FYmjTDdob=G;yU_X;0_fK3gkYM3W_j zb!^6khc+bNT>j24LrG1E+1 zl#ReRL#2FK#D6y93MZpVGp;m&e307Z({&?E~7)U^TZayNJj9Heb=uh&ZbcG~pz zN_z(^Qb1mvq-*=hsRecfy+}$U)4yykn!onj?mir>hKR<1RFCcQ$QneJ?VdnlYCTfQ zGuGkw!PFQqHH$h-4WeL~wHJQw{dbQVgmLW(Ze%~4Jv>;%W=NaX4M|AjtYDJYs4rX>;h9K>iCUErqDmvk_q?!pD;8$6`yb1yCYY72%6^|# zTdBG>=F>IaPWD9*AZRmD?{OE5+9`sX1CX+E7>%MpHAbu{n=6I` zAke?YZLfi3%F+5j>d9+x^#hXJ0Fk9SRd%Ifj6gMk05EBED3~ADDT442dQnw+!DMZ1 zPgvM}P}QO{U*HxnaJ79)s$X%LfAu+8J-;mPL4bu@3ME0`tWrp6E-$IKibk+hYG5*G zLkn}@$|vYok^Pzh7<$wa9W{kwSRoV{A9~dO84Wuhw6jFdSBvN2q+1xw?v!1^VD^qJ z!(f6L?Vkg*6A|Paugrmor3kr>qUZodqB_wn-b`pSGd`~5$Fr;g)g z5qZ=d?5KC%zxuV_K~39qip?tdk=?qVD*q1GscDGMm8``!|CIjIx;r~b^9xn%U!j(X z_Ws0}Kojapfl{m;DY={IhO1wZEG@}y49X>Le@0R)YZiVng$@*xi|IppAi$npRAyYo zo!;oOcIzk3mps3iE}c8CbaA5E1zN{ z<*c>!$ubs<=#)p$3BBR91P*otmMV;GqN$m3hCM z{X=6R@lcM3YBTy4K9u31u^GLDdBI^QYA?hHHKQNlLnR(c8awdVYwZn<@KBaF9tv7j z;GvNjeK!rv?oIJ$+=1`Cxv)eGomktV>d_K{Yu;rE;PdwjSg4WDXZ&!xV<}6q2n>Ll z$0oo?7kKI;Vt9+M^7C{v#&P7C|E^uoOYv` zc{-5)BRN7@<4Y1#sHKuCD4PB401#&6cVg#6^_Ff^AG5aat57vl_l9?7a67#E4PL2g zq0wczPvQ!zB51f7orc9;aw2;;&ay6U(hB0@I|IMe>pv|IxSytTmtwSdRoi$f(Yet= z;Qi8))Kqv`q9_jaYtSYGibl{`tRO@MQClsOp)24ec}0ySiK+D4;YAT%Ha1CcN|)6Z z38vk6n}>qzG}-%W@id?RXgK6I#ibzK&il>DDowr)7K@c*fvqdpKUv2WJ~-f!J=MAh z)Tr#ZNSL`+mMzm%BI`y`UYigmNSl%NW$`$hwzloG_O^J36)4Th91bY?H#Wfx7Y3s% z$CUZYbXl1q)eVYox327gjkH@9o3GtgMuTaYx8lu@!U>?C_0_&_P}&Hig$?9m2yK!P z#FRQRH->}~(?!lHy4}}HxZBCh8-=uNW^I7~3)QX^!%8Ss+e&>GAFI$9);KwlSeCMZ&`L}en zw$yX8TDT~)`c){8>w4=6ir2U5heWi$trpohEw0q3vudB$4-XcyhH*QK+QV>;-d`71 zwOy`vp96@NS(oLr-*2kQCxqE$xF}*Uc6A@`X+hhiHpyy($2|1v;mpZ1g2KO#IfOwP zAcd@rt50XQ_ge+9R4VO;#>D}GR@tbtQIdb{isA$KO=>6{OQBIl)<#@x52SYLi;MoRR%wK)e)YGChTN+5*DT(stSO4R|1xka9mt?Lo`z=Dyd0EQ6WttXfT!DS0^9@!s~KfX?>rpzuu*rP8uRAfS^^yZKNp4+eDwdtmeb{ zpc=SNBfb5^ZDnU43MvFI=GzAJ?#D(?kS=uyaL?#w{QChSR%LPlBAXP2k`FytSaw4_ zq~pYO3W@8>&42NqKLQ z(d}u4p`x$sEuMe2C|c#e1(?)U%RcF!{1MtEoKs!-z9}Ek@*<5EW4%$n(+2ih7*m{u zbK0$qbN{m1%+j;R#};FUV;taWK{PTCL9p=-u%Vb(@9eb;Aehc3_}{63ysquv97=hD zN?GGYQ?kYP^?uj<@~i;t?UuZFQs^#ZkX0h-&*jtSo-baKs!ty_fS!${HApV^eS?fj z8JqM|H=G+K3z7fD{|2p~BD2~14cf3G<|X^4UUHR#Sp>yjbGgR} zHA%Q>hCTH{I>$G*gea3S{zByrd2B0T=edY;Z~qtc1$OESU3liZ8g7(HZzfT^XB;q- z2Q_c9@Pv*67>Av0ax)EaoWO*bh;(U@1Md)r>y5~X05#G+RvZnwq*ovnVjdFH2B@cC z#RyPoM%@N$G+3E&r@=fzgJU!KiMUlHW5fgm$p4B6%UR>gdhAQ$yLLd+XpP=QZFRaZMfPc&~{TA`k|SU_l#E{CN05XpftvVW(-4uBjt4InuN-QZ1n0 zS|`F)=)T4Bz^&T*62A*@<-loU>d|I&EF54W66WDw-v(CI*wF|tMuex8c|6v%n5k;> zbgXGhy9kt%=|R&v9nK?3{GJd;uVgR)CL%d#tb35C+`|VE$thuy4o{O@Dzr!N0(TpX z#9Z8>Z+F;`Lf*rem{AwJXBHfihgdy{%(UD75N2ax#+?RBj2vo4t%K`-!n0yGfiy|D z8jjyZ6$@5jse4u{M>@|ztuEFQG_Z8G@7q8V7%CMHf2seiR2L)60f=fuwsWTkc-kpf z1SwNYny;<1qVtcD56%*Rd2StCvK|#7{%dh=X5CiCgSDCOb0uXByib$)e6e}&%DC)& zqNzd~;MBbQOuj$60d(MTe&Aup8c~EFYSPaKx>8UjDo&$j@8}+XT=@b&j6qHe-V(RHJ5=GV zi9@4pC?wA!7=#&B+`1l+Sx9@0cY~8SNP6@~>&+?|Zz@v6_e)?Jq~#L`x`GsWDq{{2 z|KU!3dx;QxB(i#cVgABp3oOl~*G(2>%#_EZ5QC$9&&vhO&(Zw$p8dAV#qBqxPn1Hq z!Di1a0?i^#da(yl8hxTodbej5oFJksyn&ZRiPE(Q70LZ}H1NB|zuRkAuYITv+DG3# zKsQwsfC=}O5eTeifX3qz2DM5T!wkXN3a7W%cXub(pR+!cXTc*`Ir9DW#UOZ`==BGe z!&_*0IlMo+3>zn)uu>bd+g-_yI6Louyl`*Qe+CUvtx5X3V2P}dEJU!I&%^uo=JM>~ z?96;V>)%{o)zeVifri?gin}&}5=eIH7K0)N#c9W|sc%e)S3z;2TuGC(t>Wn%$Ve6T zw!O3sZrFMKPZ(Ilr=@NL79>QVOTclBd>inT(l)LC#)3SsEHV!r5NMUc(n1q7Hj9H0 zSly5;T_={f&EqSk#m9|2jDoU8e{prNBnYO+Jaq7wDpKx;i?|b!S_Km!gEo7)v(s(# z%;?hD4+l=o^e{&TPrqsS&*1{?vm zA?@NNkSz$r$|G(juiL%lQHXA=jriD&Ln8(!RQu6;E(ZLjEQC2bk_biaT&VWm$mOZ; z_ORGM=AO{)@~UoHSV)A*SDf*$Etj$F(%$R|p+XUL%-V9*3*PLXgCgQ9FTr@dXDq1p>&c z?TuU$#9>=Khdc5Udk!^i_Sy0{@_e=&Q)kr9-1dVcg=)S*C>NWnX1%ORxD+dO+$8_H zxI6@{yW{ZYDeOixAb0j=&>Q*b~qk*pVGk zEi00^%b#G8`MVW4dw&A27$!}GG^Wgt*Xdcv5NwIKaJ#Li7vC=6h@ZDyY2nfgYve9w z6fst6r0D7mMC8I^^S@SF^9U8`+YvF7W_b_I2awK$<-G{dMm@=a&L@@up%)&*Kn~DI zwXYodqK_DBtUD+_pmm|Ra2j{iy0ELMC5p+Bq_04tP;y=de%878cFqv1)2yq%1X;68 zm~TgtB^;B6I#htW+vianI$aeVNgCT}u?vkgLfa;OyhBBrl{%i!9R;F6f46Rio50sD zHfcAhhKPl5^VrD|ji@vx9eryAox70cyc3&ZSl5yr?LyC1Wr zJcO@_<1Ba{h=H`2yA;Q5Xq1#=&#J@bG>(el*+qTm)ytyd>zLwL5uVw{fon#1q$>_n z7ehj$4)3=oD@ed!CDZV#Z(!}BcnPjdas*Znv!eJ39-AbTgTYV~2Et{hp#lws)XqlU z=U+=IP-KZK{o7?M+AXAmwu}wLp+I3OkPv*xteOACgOwpzMaO-{2%^Z0yNs2{t72L4 z{reIH=)> zutd}XYux77rR4)Sg?z~)ZC#*QA*K6}twY*mJNW403sPH!8es1#9&mgi-Wx|;!OGk8 z{(u-_m7(ZS@%gh2ltLLe=K5Mx3hO@u(h zQes?XwBu5NB=Nt48?}R*+E~gceCv)npb^WDvd-WU8%jN zyf)~`ir)2G6rRK2pE~qM_$-D{tcJhY2B7{+bF*+=B zj2bW{-|dgdXR%;Kp)^6?d4*1iih9Xp;xM`1IWGm7Fw4dAWoA#xeUTSUYuLk^6b z=JaxV@8W@C2)2I+G$pIkqnV#6Ph+7dz3)>E>+o2AQ5e?IxVSba?=x9QmKcUH-C zi()tR{5G`*Io_?}3Aj@kc>USzZkdj!$?Rq|9j8aCxr}o41#b>8%Z|gtoX$WiU9dh& z(X2PIQ^2`jq~Frn&fXQ|rG2-Aw7y)dQuwNVaiGRJ2ZO+mIz$VK_axh2OnsQC-BWSY z9>%R5w0nA*s@&4(uh-K@sEGZL+P@a_>$xMx15=ZQh2n7vI%ZL6c3nlEqn!R|F`q2v zpm(mrU!WqXbEgZW<>@>L!zWF;B~7TBn^WiO&nI_b5~dU}qwpH#l#;zQ%IoR1K8&{k zOP?^72*OfxkX{xY>*(ur_07tZ z%lsei-2XRt7x(`{qg`$lmt-f3lk~Yf%NSb5*)8wxPyTvYTfw!;c>bOn!hqF(T&EK^ zrj65J?KCT>E^=pVJpL$e>Ok6^6D=OQ4R%QTTjF z->JN0Ig@P3NLe~3p1@SH3+eLp{<9b&6Z=}$D2U6?DX8$b0&N-1mUCWvou8Trq7C&m zU2QU-kJsn|`N_Np=;~?VbUObQjo0z)YcyNU7vI@!csA@y6IIbI%hc%3tJ>-wCvQ!0 z_Ah9S9`2*$lffum+ZW{TG(VtVf#BjIS^^Ny0%L7|F<- zXGan#h-Y^rSu_uTb#hSaXvf&}y~(r2uKXxBpOL%3RH$G)OBbSF>iV~~cq~{W0ekHt z`n@MbN_HDEBfqP2_P(siyuywvN>+4+6G4Z+Y71XQS&UA5zgS^K273n>?75ah_|O>l zV8B4Gu)~92a z-`|K8$Qi(?YroR!g^fH#dbUV^l~nXumx?|VGe>Ih zCMjP)6$*A!`-Y)um{x0rD`+|PrDL&n7b*qe7W4Of3320o16 z$Tloq^MX3;5$&C1+p;?vI#H4Ev_0p!IJOLrAyKB~L+A|P`u1!WYNYKULa3BU3;k`a zf@Pihl&ifazwgQvbcM-?4VGz0UKW#~dy0;WF-U z-?^maq1>k%Fd~)}`PHq7HTNjn*UwP47qn}ZGME_{2nC*}k*6mrWcy$8we6u`>Q`y| z-aEGsIER-``Ah2vCE;$1#f3B~;@f7A4Z1uC)9{Z-*>@z&@0<0@=%a?xG35O-koP_9 z@$gpX>a<@_5plkYM)tpIX@tXLbb|eS8?&Emt^m(v)O%dQ3u-E?=GgyO%u${nmid+u zpz~zvFO^ks*i?st%#znWngU%Sa{`%E_k&J&oeq!a^>$4IEyJSofWw}1E&u_g#0l0v zl}$hgr(_c%NB5kHa}5j(71D5gtt1(|6~k$xCk%rjLUcQvsF2iqHD`QI7QkVdvPl*Q z?|9lQuZJBWC}G+D2lB3zi#ZXjUV{=Pp@OmLT5_S{`Vzy*JEvaUK*D0KeMV5Kuyl^DiOh6hb_6hzmUHB)V`9TLyXeoMLw_F-2f#y#TDS@DIJ^l!U zT9xy^+CS=^ih#lMviJ~7I(bSrjLP5pE!X01D}gi?$U(}s*IC|VHeN&s{|IqzV7dr# zPuc(iT7Iy>yz2p9EyhFL#o2roDR;NEQMg#mKQF?&n`ogt%+$ig?R;^;2ur)ZUyW|m ztJ#YOTQ-$fB3V3XCrGjDZ)m&P9=mulpSmu^3A$0+scUMpc=at_DG$)KX?(p17jZaK z9%E>?;c~9t-_}<1`E+?3uWppbI2tcDec32WTi!%KOk-u*aJ2~~rwfS5(HaCDa&fCTkFQOp5oZl)mV2P8_`W5( zEdgF&CV?a&)z=NC7RH3-WsfPX52Ucb^wKm`9qA2UZ)?vOmIvka{+*Ay-A65BP0oE3 zC#}0E#lo`I&upwh>I)2IhgBS&s|0R*s7a0`RE)U-t3$qz&w);YcV@_NzCn zI|YI&iCc^jInRD*{tWDY#J(SH^S{X|=TFBEr*#Q5NL{3~gm_iD8>jsA680iTO1DY3 zt*>F~K0JC01IMV{0Ch}`erCS)rIS%fTcPdB&3_3PkF5UgfbqyeP&=oz3}mt?9BWx9 zn%!k`DVxftZig!_6xA*8jKO>FmT8>1hi;$;oK1`GL+v2abG7BS@b*r*zo)Ij_;aY- z-_e${`8Vb6hBl6t(PA}t+UNP&_4oC4JimknC6wrPEE^1&rLe#su?@h&~?aIO|7B|o=#oQRMbZ8O>Tg_&o8PT zhZWHP>W#ABdLOcM^dTzo<RVd9FlblQKS&sN8 zo+=(brde90&2^AT7Z!Ec?aN8_w&bd5@O}`!RY9HRUqxD9ub$u*8v@Pm`J@e3gOcs> z7kOgow=3CNh_O&F-@?UhlOtlDY0i>>< zXrMBGo0i}NkCRubJ^w(_KH6$(za(pM`DD>Ht$JgqIA|ayL$zxtpjynY?;IFvQ8WJq z5)jML3l-TlAY+wcmUOfSS3TK?fdObbp2fG!@~XW9g<5?Uj=v^lb(2?*Ndf(Mr}G6) zJt#=_47ZJog6c`3qn24V#Db-#yj=F1mvqah9L{`)k{wQH*{9vy0~7X z2Rxr_*f|wDe>uwi0g=U$q3#N@O*ctJt|S{WT?^j|2~1pizbitH*X=QIPtu~SqSt-( z#+GmnnFuBxyT}ZXJ~z_z%`42j7JhBWJ$1K)LeE>sLNF^emT0eor9e%H*B_R1w zJS9|1A(hI8`Xk}soMfaTm%=cxf$rKVSGmGf7%CH`&ZI3s!?%$t~iO)6Fo<$iZ4$+lYn7NZ8c-ZNyHTHckS5b)vZ z)rRFIUDHJ?-A=RYz!q@hn;;uk$@B4Asi-LOeVAqEF50@TA)?IFHu?UoTh0Y~SLbwy zP@!<3=s|8=iigBqi>XzD)gTQCc?SBPUyJ8%4{GCVC~|N^?d^+4dfID}?u21z7ml{U zge{o-_(F&W2Pf1_Yrc~bwMr5mBw}(~Om3|QgC-n>aP>7UQ)aHeT@;RiZ=ZO1lxfo+ z10y>5g&b1Hs)Ld7N2Q@m2G^(8k|<8w*1|6^bUy@y)mNJ4aO z`P$@uI{gDu%T>CIuaL?D9vc_AEzBx5_i({Ab5mZ&f!IXv^=*p;ugc{ax)Q z9*?7$+~Kel91d`)GEjPFQE!_J_0X5+eO*M}u6>%kCDsx3{PE1pZf|Er)Mi_Hv#8sq z0@ueM=hlE}u0u2BgMIrQDGpq_!vVEk7V+ns)p|LNqOXzSD2kUa;poq3rP|-urqM*0 zL{7(Uz&62QrS^HJ-o#xvTP@eq=(FlTOS=h`H{tS42$TF!8E9e-M%XggM&qsG0;u2` zg?Ai$a*}Jm?(xHPsV49gcncjxURsnw@l_$uq<(1%2@}+&obTRKPz{RFDw?r2GxY1d zu^5Ql&Nm&wA~Fmu-;>=kecr*y{OFKj#PbuoHG?I-(-1+Xb($yHVENJd=Z2c3qC`GfJx$bO+0$t73JG zGE!GCzyQ~oZMq=a!-j0fPx3(*oD%1NM&bHynY&^wIOTXcEq@50IMEeZ7;@6X~Ct- zndQZ6l8p|JY-iBX2nAm>GMmq zWR;H;WgEr}^@;M`s7R^%mt;2$))A}QkiB}H6r*IXCLEv?{$U51N?1Cm(Fx^%D)~uT zLJ`CqL=f-Gn(ktOyd3SBLKWRGg`BmE66{RJx2`_Qn-D#r%b91MfjWw-@Y*Tk^!ZFo z#WC3>QE3z6S;ko_l4TJ%Rs(AZT(N?aZwNdolD

O`Cv{=ey4Zq!BF-#Z$65W<$fO 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 z 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 literal 0 HcmV?d00001 From f5d545710024d04fa45ac1591413fc50fabf8367 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 19 Jan 2021 14:22:36 -0700 Subject: [PATCH 147/935] fix refmap location to be fabric-compliant --- src/launch/resources/mixins.baritone.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 12584443f..c52948a77 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -1,7 +1,7 @@ { "required": true, "package": "baritone.launch.mixins", - "refmap": "mixins.baritone.refmap.json", + "refmap": "baritone-refmap.json", "compatibilityLevel": "JAVA_8", "verbose": false, "injectors": { From 5494c43290c7abe0ef86d165882d6dada9e4e144 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 19 Jan 2021 17:55:50 -0700 Subject: [PATCH 148/935] fabric task like forge --- build.gradle | 36 ++++++++++++++++--- .../gradle/task/BaritoneGradleTask.java | 21 +++++++---- .../baritone/gradle/task/CreateDistTask.java | 5 ++- .../baritone/gradle/task/ProguardTask.java | 3 ++ 4 files changed, 52 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index d665ec5ee..0efa7fb63 100755 --- a/build.gradle +++ b/build.gradle @@ -52,8 +52,7 @@ import net.minecraftforge.gradle.userdev.tasks.GenerateSRG import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace import org.apache.tools.ant.taskdefs.condition.Os -def isMCP = false - +def isMCP = !getProject().hasProperty("baritone.fabric_build") apply plugin: 'java' if (isMCP) { @@ -150,7 +149,7 @@ if (isMCP) { mixin { defaultObfuscationEnv searge - add sourceSets.launch, 'mixins.baritone.refmap.json' + add sourceSets.launch, 'baritone-refmap.json' } } @@ -192,7 +191,9 @@ dependencies { // this makes it compile with the forge tweak stuff implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' - implementation 'net.minecraft:launchwrapper:1.12' + implementation('net.minecraft:launchwrapper:1.12') { + exclude module: 'lwjgl' + } implementation 'com.google.code.findbugs:jsr305:3.0.2' } @@ -257,6 +258,15 @@ File getClientJar() { .get() } +File getClientJarFabric() { + return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() + .stream() + .filter({f -> f.getName().endsWith("-v2.jar") && f.getName().startsWith("minecraft-")}) + .map({f -> new File(f.getParentFile().getParentFile(), f.getName().toString().replace("mapped", "intermediary"))}) + .findFirst() + .get() +} + if (isMCP) { task copyMcJar(type: Copy) { def mcJar = {getClientJar()} @@ -288,5 +298,21 @@ if (isMCP) { task createDist(type: CreateDistTask, dependsOn: proguard) - build.finalizedBy(createDist) +} else { + task copyMcJar(type: Copy) { + def mcJar = {getClientJarFabric()} + + from mcJar + into 'build/createMcIntermediaryJar/' + rename {'client.jar'} + } + + task proguard(type: ProguardTask, dependsOn: copyMcJar) { + url 'https://downloads.sourceforge.net/project/proguard/proguard/6.0/proguard6.0.3.zip' + extract 'proguard6.0.3/lib/proguard.jar' + } + + task createDist(type: CreateDistTask, dependsOn: proguard) + } +build.finalizedBy(createDist) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index b77889d79..c86a51e79 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -41,13 +41,16 @@ class BaritoneGradleTask extends DefaultTask { PROGUARD_STANDALONE_CONFIG = "standalone.pro", PROGUARD_EXPORT_PATH = "proguard_out.jar", - ARTIFACT_STANDARD = "%s-%s.jar", - ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", - ARTIFACT_API = "%s-api-%s.jar", - ARTIFACT_STANDALONE = "%s-standalone-%s.jar", - ARTIFACT_FORGE_UNOPTIMIZED = "%s-unoptimized-forge-%s.jar", - ARTIFACT_FORGE_API = "%s-api-forge-%s.jar", - ARTIFACT_FORGE_STANDALONE = "%s-standalone-forge-%s.jar"; + ARTIFACT_STANDARD = "%s-%s.jar", + ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", + ARTIFACT_API = "%s-api-%s.jar", + ARTIFACT_STANDALONE = "%s-standalone-%s.jar", + ARTIFACT_FORGE_UNOPTIMIZED = "%s-unoptimized-forge-%s.jar", + ARTIFACT_FORGE_API = "%s-api-forge-%s.jar", + ARTIFACT_FORGE_STANDALONE = "%s-standalone-forge-%s.jar", + ARTIFACT_FABRIC_UNOPTIMIZED = "%s-unoptimized-fabric-%s.jar", + ARTIFACT_FABRIC_API = "%s-api-fabric-%s.jar", + ARTIFACT_FABRIC_STANDALONE = "%s-standalone-fabric-%s.jar"; protected String artifactName, artifactVersion; protected final Path @@ -65,6 +68,10 @@ public BaritoneGradleTask() { this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)); this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_STANDALONE)); + } else if (getProject().hasProperty("baritone.fabric_build")) { + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_STANDALONE)); } else { this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 28be55127..ed01841a9 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -81,7 +81,10 @@ private List getAllDistJars() { getRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)), getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_STANDALONE)), getRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)) + getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_API)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_STANDALONE)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_UNOPTIMIZED)) ); } diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index b19efdedd..0b4423636 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -112,6 +112,9 @@ private void generateConfigs() throws Exception { if (getProject().hasProperty("baritone.forge_build")) { libraries = dependencies .map(f -> f.toString().endsWith("client.jar") ? getSrgMcJar() : f); + } else if (getProject().hasProperty("baritone.fabric_build")) { + libraries = dependencies + .map(f -> f.getName().endsWith("-v2.jar") && f.getName().startsWith("minecraft-") ? getSrgMcJar() : f); } else { libraries = dependencies; } From f549e0e2d474c50b8245f529698592ae570a305b Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 19 Jan 2021 23:03:57 -0700 Subject: [PATCH 149/935] on the fly volderyarn mapping generation --- build.gradle | 19 +- .../gradle/fabric/CreateVolderYarn.java | 245 + volderyarn/mappings.tiny | 53741 ---------------- volderyarn/volderyarn.jar | Bin 578042 -> 598338 bytes 4 files changed, 256 insertions(+), 53749 deletions(-) create mode 100644 buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java delete mode 100644 volderyarn/mappings.tiny diff --git a/build.gradle b/build.gradle index 0efa7fb63..dc9fe0579 100755 --- a/build.gradle +++ b/build.gradle @@ -47,18 +47,21 @@ buildscript { import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask +import baritone.gradle.fabric.CreateVolderYarn import net.minecraftforge.gradle.userdev.tasks.GenerateSRG import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace import org.apache.tools.ant.taskdefs.condition.Os -def isMCP = !getProject().hasProperty("baritone.fabric_build") - apply plugin: 'java' -if (isMCP) { + +def mcpVersion = [channel: 'snapshot', version: '20201028-1.16.3'] + +if (!getProject().hasProperty("baritone.fabric_build")) { apply plugin: 'net.minecraftforge.gradle' apply plugin: 'org.spongepowered.mixin' } else { + CreateVolderYarn.genMappings("1.16.4", mcpVersion) apply plugin: 'fabric-loom' } @@ -99,9 +102,9 @@ task sourceJar(type: Jar, dependsOn: classes) { classifier = 'sources' from sourceSets.api.allSource } -if (isMCP) { +if (!getProject().hasProperty("baritone.fabric_build")) { minecraft { - mappings channel: 'snapshot', version: '20201028-1.16.3' + mappings mcpVersion if (getProject().hasProperty("baritone.forge_build")) { reobfMappings 'searge' @@ -168,7 +171,7 @@ repositories { } dependencies { - if (isMCP) { + if (!getProject().hasProperty("baritone.fabric_build")) { minecraft 'com.github.ImpactDevelopment:Vanilla:1.15.2' runtime launchCompile('net.minecraft:launchwrapper:1.12') { @@ -209,7 +212,7 @@ javadoc { classpath += sourceSets.api.compileClasspath } -if (!isMCP) { +if (!!getProject().hasProperty("baritone.fabric_build")) { tasks.withType(JavaCompile).configureEach { // ensure that the encoding is set to UTF-8, no matter what the system default is @@ -267,7 +270,7 @@ File getClientJarFabric() { .get() } -if (isMCP) { +if (!getProject().hasProperty("baritone.fabric_build")) { task copyMcJar(type: Copy) { def mcJar = {getClientJar()} diff --git a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java new file mode 100644 index 000000000..2135c9f17 --- /dev/null +++ b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java @@ -0,0 +1,245 @@ +/* + * 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.gradle.fabric; + +import java.io.*; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +/** + * @Author Wagyourtail + */ +public class CreateVolderYarn { + public static String VOLDER_YARN_PATH = "./volderyarn/volderyarn.jar"; + + public static void genMappings(String mcVersion, Map mcpVersion) throws IOException { + //download yarn intermediary + URL intURL = new URL(String.format("https://maven.fabricmc.net/net/fabricmc/intermediary/%s/intermediary-%s-v2.jar", mcVersion, mcVersion)); + String intermediary = readZipContentFromURL(intURL, "mappings/mappings.tiny").get("mappings/mappings.tiny"); + Map mappings = parseTinyMap(intermediary); + + //download srg + URL srgURL = new URL(String.format("https://files.minecraftforge.net/maven/de/oceanlabs/mcp/mcp_config/%s/mcp_config-%s.zip", mcVersion, mcVersion)); + String tsrg = readZipContentFromURL(srgURL, "config/joined.tsrg").get("config/joined.tsrg"); + MCPData mcpData = addTSRGData(mappings, tsrg); + + //download mcp + URL mcpURL = new URL(String.format("https://files.minecraftforge.net/maven/de/oceanlabs/mcp/mcp_%s/%s/mcp_%s-%s.zip", mcpVersion.get("channel"), mcpVersion.get("version"), mcpVersion.get("channel"), mcpVersion.get("version"))); + Map mcpfiles = readZipContentFromURL(mcpURL, "fields.csv", "methods.csv"); + addMCPData(mcpData, mcpfiles.get("fields.csv"), mcpfiles.get("methods.csv")); + + StringBuilder builder = new StringBuilder("tiny\t2\t0\tintermediary\tnamed"); + for (ClassData clazz : mappings.values()) { + builder.append("\n").append(clazz.getIntToMCP()); + } + try (ZipOutputStream output = new ZipOutputStream(new FileOutputStream(new File(VOLDER_YARN_PATH)))) { + output.putNextEntry(new ZipEntry("mappings/mappings.tiny")); + byte[] outData = builder.toString().getBytes(StandardCharsets.UTF_8); + output.write(outData, 0, outData.length); + } + } + + private static Map parseTinyMap(String map) { + Map mappings = new LinkedHashMap<>(); + ClassData clazzdata = null; + for (String line : map.split("\n")) { + String[] parts = line.trim().split("\t"); + switch (parts[0]) { + case "c": + mappings.put(parts[1], clazzdata = new ClassData(mappings, parts[1], parts[2])); + break; + case "m": + assert clazzdata != null; + clazzdata.addMethod(parts[2], parts[1], parts[3]); + break; + case "f": + assert clazzdata != null; + clazzdata.addField(parts[2], parts[1], parts[3]); + break; + default: + } + } + return mappings; + } + + private static MCPData addTSRGData(Map mappings, String tsrg) { + MCPData mcpData = new MCPData(); + String[] classes = String.join("\t", tsrg.split("\n\t")).split("\n"); + for (String c : classes) { + String[] lines = c.split("\t"); + String[] classData = lines[0].split("\\s+"); + ClassData clazz = mappings.get(classData[0]); + if (clazz == null) continue; + clazz.mcpName = classData[1]; + for (int i = 1; i < lines.length; ++i) { + String[] lineData = lines[i].split("\\s+"); + //method + if (lineData.length == 3) { + if (!mcpData.methods.containsKey(lineData[2])) mcpData.methods.put(lineData[2], new LinkedList<>()); + MethodData d = clazz.methods.get(lineData[0]+lineData[1]); + if (d == null) continue; + d.mcpName = lineData[2]; + mcpData.methods.get(lineData[2]).add(d); + //field + } else { + if (!mcpData.fields.containsKey(lineData[1])) mcpData.fields.put(lineData[1], new LinkedList<>()); + FieldData d = clazz.fields.get(lineData[0]); + if (d == null) continue; + d.mcpName = lineData[1]; + mcpData.fields.get(lineData[1]).add(d); + } + } + } + return mcpData; + } + + private static void addMCPData(MCPData mcpData, String fields, String methods) { + for (String field : fields.split("\n")) { + String[] fieldData = field.split(","); + mcpData.fields.getOrDefault(fieldData[0].trim(), new LinkedList<>()).forEach(f -> f.mcpName = fieldData[1].trim()); + } + + for (String method : methods.split("\n")) { + String[] methodData = method.split(","); + mcpData.methods.getOrDefault(methodData[0].trim(), new LinkedList<>()).forEach(m -> m.mcpName = methodData[1].trim()); + } + } + + private static Map readZipContentFromURL(URL remote, String ...files) throws IOException { + try (ZipInputStream is = new ZipInputStream(new BufferedInputStream(remote.openStream(), 1024))) { + byte[] buff = new byte[1024]; + ZipEntry entry; + Set fileList = new HashSet<>(Arrays.asList(files)); + Map fileContents = new HashMap<>(); + while ((entry = is.getNextEntry()) != null) { + if (fileList.contains(entry.getName())) { + StringBuilder builder = new StringBuilder(); + int read; + while ((read = is.read(buff, 0, 1024)) > 0) { + builder.append(new String(buff, 0, read)); + } + fileContents.put(entry.getName(), builder.toString()); + } else { + System.out.println("DEBUG: " + entry.getName()); + } + } + return fileContents; + } + } + + private static class ClassData { + final Map classMap; + final String obf; + final String intermediary; + String mcpName; + + final Map methods = new LinkedHashMap<>(); + final Map fields = new LinkedHashMap<>(); + + public ClassData(Map classMap, String obf, String intermediary) { + this.classMap = classMap; + this.obf = obf; + this.intermediary = intermediary; + } + + public void addMethod(String obf, String obfSig, String intermediary) { + methods.put(obf+obfSig, new MethodData(classMap, obf, obfSig, intermediary)); + } + + public void addField(String obf, String obfSig, String intermediary) { + fields.put(obf, new FieldData(classMap, obf, obfSig, intermediary)); + } + + public String getIntToMCP() { + StringBuilder builder = new StringBuilder("c\t").append(intermediary).append("\t").append(mcpName); + for (MethodData method : methods.values()) { + builder.append("\n\tm\t").append(method.getIntermediarySig()).append("\t").append(method.intermediary).append("\t").append(method.mcpName); + } + for (FieldData field: fields.values()) { + builder.append("\n\tf\t").append(field.getIntermediarySig()).append("\t").append(field.intermediary).append("\t").append(field.mcpName); + } + return builder.toString(); + } + } + + private static class MethodData { + final Map classMap; + final String obf; + final String intermediary; + String mcpName; + + final String obfSig; + + public MethodData(Map classMap, String obf, String obfSig, String intermediary) { + this.classMap = classMap; + this.obf = obf; + this.obfSig = obfSig; + this.intermediary = intermediary; + } + + public String getIntermediarySig() { + int offset = 0; + Matcher m = Pattern.compile("L(.+?);").matcher(obfSig); + String intSig = obfSig; + while(m.find()) { + if (!classMap.containsKey(m.group(1))) continue; + String intName = classMap.get(m.group(1)).intermediary; + intSig = intSig.substring(0, m.start(1) + offset) + intName + intSig.substring(m.end(1) + offset); + offset += intName.length() - m.group(1).length(); + } + return intSig; + } + } + + private static class FieldData { + final Map classMap; + final String obf; + final String intermediary; + String mcpName; + + final String obfSig; + + public FieldData(Map classMap, String obf, String obfSig, String intermediary) { + this.classMap = classMap; + this.obf = obf; + this.obfSig = obfSig; + this.intermediary = intermediary; + } + + public String getIntermediarySig() { + Matcher m = Pattern.compile("(\\[*)L(.+?);").matcher(obfSig); + if (m.find()) { + if (!classMap.containsKey(m.group(2))) return obfSig; + return m.group(1) + "L" + classMap.get(m.group(2)).intermediary + ";"; + } else { + return obfSig; + } + } + } + + private static class MCPData { + final Map> methods = new HashMap<>(); + final Map> fields = new HashMap<>(); + } +} diff --git a/volderyarn/mappings.tiny b/volderyarn/mappings.tiny deleted file mode 100644 index 974d1bebb..000000000 --- a/volderyarn/mappings.tiny +++ /dev/null @@ -1,53741 +0,0 @@ -tiny 2 0 intermediary named -c net/minecraft/class_2624 net/minecraft/tileentity/LockableTileEntity - m ()Lnet/minecraft/class_2561; method_17823 getDefaultName - m (Lnet/minecraft/class_1657;)Z method_17489 canOpen - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1273;Lnet/minecraft/class_2561;)Z method_17487 canUnlock - m (Lnet/minecraft/class_2561;)V method_17488 setCustomName - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1703; method_5465 createMenu - f Lnet/minecraft/class_2561; field_17376 customName - f Lnet/minecraft/class_1273; field_12045 code -c net/minecraft/class_2587 net/minecraft/tileentity/BedTileEntity - m (Lnet/minecraft/class_1767;)V method_11019 setColor - m ()Lnet/minecraft/class_1767; method_11018 getColor - f Lnet/minecraft/class_1767; field_11869 color -c net/minecraft/class_2580 net/minecraft/tileentity/BeaconTileEntity - m (Lnet/minecraft/class_2561;)V method_10936 setCustomName - m ()Ljava/util/List; method_10937 getBeamSegments - m (Lnet/minecraft/class_2580;)I method_17490 func_213929_a - m (Lnet/minecraft/class_3414;)V method_10938 playSound - m (Lnet/minecraft/class_2580;I)I method_17491 func_213930_a - m ()V method_10940 addEffectsToPlayers - m (Lnet/minecraft/class_2580;Lnet/minecraft/class_1291;)Lnet/minecraft/class_1291; method_17492 func_213931_a - m ()I method_10939 getLevels - m (Lnet/minecraft/class_2580;)Lnet/minecraft/class_1291; method_17494 func_213933_b - m (Lnet/minecraft/class_2580;Lnet/minecraft/class_1291;)Lnet/minecraft/class_1291; method_17495 func_213928_b - m (Lnet/minecraft/class_2580;)Ljava/util/List; method_20294 func_213925_d - m (I)Lnet/minecraft/class_1291; method_10934 isBeaconEffect - m (Lnet/minecraft/class_2580;)Lnet/minecraft/class_1291; method_17496 func_213926_c - m (I)Lnet/minecraft/class_1291; method_17493 func_213932_a - m (III)V method_20293 checkBeaconLevel - f Ljava/util/List; field_19178 beamColorSegments - f Lnet/minecraft/class_3913; field_17378 beaconData - f Lnet/minecraft/class_1273; field_17377 lockCode - f Lnet/minecraft/class_1291; field_11799 secondaryEffect - f Lnet/minecraft/class_1291; field_11795 primaryEffect - f Ljava/util/List; field_19177 beamSegments - f I field_19179 beaconSize - f Ljava/util/Set; field_11798 VALID_EFFECTS - f Lnet/minecraft/class_2561; field_11793 customName - f [[Lnet/minecraft/class_1291; field_11801 EFFECTS_LIST - f I field_11803 levels -c net/minecraft/class_2580$class_2581 net/minecraft/tileentity/BeaconTileEntity$BeamSegment - m (Lnet/minecraft/class_2580$class_2581;)[F method_20295 func_222482_a - m ()[F method_10944 getColors - m ()I method_10943 getHeight - m ()V method_10942 incrementHeight - f [F field_11805 colors - f I field_11804 height -c net/minecraft/class_2580$1 net/minecraft/tileentity/BeaconTileEntity$1 - f Lnet/minecraft/class_2580; field_17379 field_221481_a -c net/minecraft/class_3721 net/minecraft/tileentity/BellTileEntity - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)Z method_20217 func_222829_a - m ()V method_20522 resonate - m (Lnet/minecraft/class_2350;)V method_17031 ring - m (Lnet/minecraft/class_1309;)Z method_20518 isNearbyRaider - m (Lnet/minecraft/class_1937;)V method_20218 addRaiderParticles - m (Lnet/minecraft/class_1309;)V method_20520 glow - m (Lnet/minecraft/class_2338;ILorg/apache/commons/lang3/mutable/MutableInt;Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;)V method_20519 func_235655_a_ - m ()V method_20219 func_213941_c - m ()Z method_20523 hasRaidersNearby - m (Lnet/minecraft/class_1937;)V method_20521 glowRaiders - f I field_17095 ringingTicks - f Ljava/util/List; field_19156 entitiesAtRing - f Z field_19157 shouldReveal - f Lnet/minecraft/class_2350; field_17097 ringDirection - f J field_19155 ringTime - f Z field_17096 isRinging - f I field_19158 revealWarmup -c net/minecraft/class_4482 net/minecraft/tileentity/BeehiveTileEntity - m ()I method_23903 getBeeCount - m ()Z method_23280 isNearFire - m ()Z method_22400 hasNoBees - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4482$class_4483;Ljava/util/List;Lnet/minecraft/class_4482$class_4484;)Z method_21855 func_235651_a_ - m (ILnet/minecraft/class_4466;)V method_29562 func_235650_a_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4482$class_4484;)Ljava/util/List; method_21852 tryReleaseBee - m (Lnet/minecraft/class_1297;ZI)V method_21849 tryEnterHive - m (Lnet/minecraft/class_2680;Ljava/util/List;Lnet/minecraft/class_4482$class_4484;Lnet/minecraft/class_4482$class_4483;)Z method_21854 func_226966_a_ - m ()Z method_21856 isFullOfBees - m ()Lnet/minecraft/class_2499; method_21859 getBees - m ()Z method_23904 isSmoked - m (Lnet/minecraft/class_2680;)I method_23902 getHoneyLevel - m ()V method_23757 sendDebugData - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2680;Lnet/minecraft/class_4482$class_4484;)V method_21850 angerBees - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_23901 func_226960_a_ - m (Lnet/minecraft/class_1297;Z)V method_21848 tryEnterHive - m ()V method_21858 tickBees - m ()Z method_21857 hasFlowerPos - f Ljava/util/List; field_20423 bees - f Lnet/minecraft/class_2338; field_20424 flowerPos -c net/minecraft/class_4482$class_4483 net/minecraft/tileentity/BeehiveTileEntity$Bee - m (Lnet/minecraft/class_4482$class_4483;)I method_21860 func_226981_b_ - m (Lnet/minecraft/class_4482$class_4483;)I method_21861 func_235653_c_ - m (Lnet/minecraft/class_4482$class_4483;)Lnet/minecraft/class_2487; method_21862 func_235652_a_ - m (Lnet/minecraft/class_4482$class_4483;)I method_21863 func_235654_d_ - f I field_20427 minOccupationTicks - f I field_20426 ticksInHive - f Lnet/minecraft/class_2487; field_20425 entityData -c net/minecraft/class_4482$class_4484 net/minecraft/tileentity/BeehiveTileEntity$State - m ()[Lnet/minecraft/class_4482$class_4484; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4482$class_4484; valueOf valueOf - f [Lnet/minecraft/class_4482$class_4484; field_20430 $VALUES - f Lnet/minecraft/class_4482$class_4484; field_20428 HONEY_DELIVERED - f Lnet/minecraft/class_4482$class_4484; field_21052 EMERGENCY - f Lnet/minecraft/class_4482$class_4484; field_20429 BEE_RELEASED -c net/minecraft/class_4482$1 net/minecraft/tileentity/BeehiveTileEntity$1 -c net/minecraft/class_2586 net/minecraft/tileentity/TileEntity - m ()V method_10996 validate - m ()Z method_11015 isRemoved - m (Ljava/lang/String;Lnet/minecraft/class_2591;)Lnet/minecraft/class_2586; method_17899 func_213134_a - m ()V method_5431 markDirty - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2487;Ljava/lang/String;Lnet/minecraft/class_2586;)Lnet/minecraft/class_2586; method_17897 func_235656_a_ - m ()V method_11000 updateContainingBlockInfo - m (Lnet/minecraft/class_129;)V method_11003 addInfoToCrashReport - m ()V method_11012 remove - m ()Z method_11011 onlyOpsCanSetNbt - m (Lnet/minecraft/class_2338;)V method_10998 setPos - m ()Z method_11002 hasWorld - m (Lnet/minecraft/class_2470;)V method_11013 rotate - m ()Ljava/lang/String; method_10995 func_213135_f - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2487;)V method_11014 read - m (II)Z method_11004 receiveClientEvent - m ()Lnet/minecraft/class_2338; method_11016 getPos - m (Lnet/minecraft/class_2415;)V method_11001 mirror - m ()Lnet/minecraft/class_2622; method_16886 getUpdatePacket - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_10999 writeInternal - m ()Lnet/minecraft/class_2680; method_11010 getBlockState - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_11007 write - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_11009 setWorldAndPos - m ()Lnet/minecraft/class_2487; method_16887 getUpdateTag - m ()V method_20525 warnInvalidBlock - m ()Lnet/minecraft/class_2591; method_11017 getType - m ()D method_11006 getMaxRenderDistanceSquared - m ()Lnet/minecraft/class_1937; method_10997 getWorld - m ()Ljava/lang/Object; method_20524 func_222815_f - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2586; method_11005 readTileEntity - m (Ljava/lang/String;)Lnet/minecraft/class_2586; method_17898 func_213133_a - f Lorg/apache/logging/log4j/Logger; field_11868 LOGGER - f Lnet/minecraft/class_2591; field_11864 type - f Lnet/minecraft/class_2338; field_11867 pos - f Lnet/minecraft/class_2680; field_11866 cachedBlockState - f Lnet/minecraft/class_1937; field_11863 world - f Z field_11865 removed - f Z field_19314 warnedInvalidBlock -c net/minecraft/class_3720 net/minecraft/tileentity/BlastFurnaceTileEntity -c net/minecraft/class_2589 net/minecraft/tileentity/BrewingStandTileEntity - m (Lnet/minecraft/class_2589;I)I method_17499 func_213952_a - m (Lnet/minecraft/class_2589;I)I method_17501 func_213953_b - m (Lnet/minecraft/class_2589;)I method_17500 func_213951_b - m (Lnet/minecraft/class_2589;)I method_17498 func_213950_a - m ()Z method_11027 canBrew - m ()[Z method_11028 createFilledSlotsArray - m ()V method_11029 brewPotions - f I field_11878 brewTime - f Lnet/minecraft/class_1792; field_11881 ingredientID - f Lnet/minecraft/class_2371; field_11882 brewingItemStacks - f I field_11885 fuel - f [I field_11879 SLOTS_FOR_DOWN - f [I field_11886 SLOTS_FOR_UP - f [Z field_11883 filledSlots - f Lnet/minecraft/class_3913; field_17381 field_213954_a - f [I field_11880 OUTPUT_SLOTS -c net/minecraft/class_2589$1 net/minecraft/tileentity/BrewingStandTileEntity$1 - f Lnet/minecraft/class_2589; field_17382 field_221482_a -c net/minecraft/class_2591 net/minecraft/tileentity/TileEntityType - m ()Lnet/minecraft/class_2586; method_11032 create - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2586; method_24182 getIfExists - m (Lnet/minecraft/class_2591;)Lnet/minecraft/class_2960; method_11033 getId - m (Lnet/minecraft/class_2248;)Z method_20526 isValidBlock - m (Ljava/lang/String;Lnet/minecraft/class_2591$class_2592;)Lnet/minecraft/class_2591; method_11030 register - f Lcom/mojang/datafixers/types/Type; field_11909 datafixerType - f Lnet/minecraft/class_2591; field_16549 JIGSAW - f Lnet/minecraft/class_2591; field_11900 DAYLIGHT_DETECTOR - f Lnet/minecraft/class_2591; field_17380 CAMPFIRE - f Lnet/minecraft/class_2591; field_11888 HOPPER - f Lnet/minecraft/class_2591; field_20431 BEEHIVE - f Lnet/minecraft/class_2591; field_11908 COMPARATOR - f Lorg/apache/logging/log4j/Logger; field_11893 LOGGER - f Lnet/minecraft/class_2591; field_11905 BANNER - f Lnet/minecraft/class_2591; field_11895 STRUCTURE_BLOCK - f Lnet/minecraft/class_2591; field_11897 PISTON - f Lnet/minecraft/class_2591; field_11894 BREWING_STAND - f Lnet/minecraft/class_2591; field_16414 SMOKER - f Lnet/minecraft/class_2591; field_11912 ENCHANTING_TABLE - f Lnet/minecraft/class_2591; field_16415 BLAST_FURNACE - f Lnet/minecraft/class_2591; field_11898 END_PORTAL - f Lnet/minecraft/class_2591; field_16412 LECTERN - f Lnet/minecraft/class_2591; field_11890 BEACON - f Lnet/minecraft/class_2591; field_16413 BELL - f Lnet/minecraft/class_2591; field_11913 SKULL - f Lnet/minecraft/class_2591; field_16411 BARREL - f Lnet/minecraft/class_2591; field_11907 JUKEBOX - f Lnet/minecraft/class_2591; field_11887 DISPENSER - f Ljava/util/function/Supplier; field_11892 factory - f Lnet/minecraft/class_2591; field_11899 DROPPER - f Lnet/minecraft/class_2591; field_11911 SIGN - f Lnet/minecraft/class_2591; field_11889 MOB_SPAWNER - f Lnet/minecraft/class_2591; field_11906 END_GATEWAY - f Lnet/minecraft/class_2591; field_11904 COMMAND_BLOCK - f Lnet/minecraft/class_2591; field_11903 FURNACE - f Lnet/minecraft/class_2591; field_11896 SHULKER_BOX - f Lnet/minecraft/class_2591; field_11914 CHEST - f Lnet/minecraft/class_2591; field_11910 BED - f Lnet/minecraft/class_2591; field_11891 TRAPPED_CHEST - f Ljava/util/Set; field_19315 validBlocks - f Lnet/minecraft/class_2591; field_11902 CONDUIT - f Lnet/minecraft/class_2591; field_11901 ENDER_CHEST -c net/minecraft/class_2591$class_2592 net/minecraft/tileentity/TileEntityType$Builder - m (Ljava/util/function/Supplier;[Lnet/minecraft/class_2248;)Lnet/minecraft/class_2591$class_2592; method_20528 create - m (Lcom/mojang/datafixers/types/Type;)Lnet/minecraft/class_2591; method_11034 build - m (Lnet/minecraft/class_2591$class_2592;)Ljava/util/Set; method_20527 func_223043_a - f Ljava/util/function/Supplier; field_11915 factory - f Ljava/util/Set; field_19316 blocks -c net/minecraft/class_2595 net/minecraft/tileentity/ChestTileEntity - m (Lnet/minecraft/class_2595;Lnet/minecraft/class_2595;)V method_11047 swapContents - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2624;IIIII)I method_20364 calculatePlayersUsingSync - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2624;III)I method_17765 calculatePlayersUsing - m ()V method_11049 onOpenOrClose - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_11048 getPlayersUsing - m (Lnet/minecraft/class_3414;)V method_11050 playSound - f Lnet/minecraft/class_2371; field_11927 chestContents - f I field_11928 numPlayersUsing - f F field_11929 lidAngle - f I field_11930 ticksSinceSync - f F field_11926 prevLidAngle -c net/minecraft/class_3924 net/minecraft/tileentity/CampfireTileEntity - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_17507 writeItems - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_3920;)Lnet/minecraft/class_1799; method_17504 func_213979_a - m ()V method_17509 addParticles - m (Lnet/minecraft/class_1799;I)Z method_17503 addItem - m ()V method_17510 inventoryChanged - m (Lnet/minecraft/class_1799;)Ljava/util/Optional; method_17502 findMatchingRecipe - m ()V method_17506 dropAllItems - m ()V method_17508 cookAndDrop - m ()Lnet/minecraft/class_2371; method_17505 getInventory - f Lnet/minecraft/class_2371; field_17383 inventory - f [I field_17384 cookingTimes - f [I field_17385 cookingTotalTimes -c net/minecraft/class_2599 net/minecraft/tileentity/ComparatorTileEntity - m ()I method_11071 getOutputSignal - m (I)V method_11070 setOutputSignal - f I field_11943 outputSignal -c net/minecraft/class_2593 net/minecraft/tileentity/CommandBlockTileEntity - m ()Z method_11036 isSendToClient - m (Z)V method_11041 setAuto - m ()Z method_11046 isConditional - m ()V method_23360 func_226988_y_ - m (Z)V method_11038 setPowered - m (Z)V method_11037 setSendToClient - m ()Z method_11043 isPowered - m ()Lnet/minecraft/class_1918; method_11040 getCommandBlockLogic - m ()Z method_11042 isAuto - m ()V method_23359 func_226987_h_ - m ()Z method_11044 isConditionMet - m ()Lnet/minecraft/class_2593$class_2594; method_11039 getMode - m ()Z method_11045 setConditionMet - f Z field_11916 sendToClient - f Lnet/minecraft/class_1918; field_11920 commandBlockLogic - f Z field_11918 auto - f Z field_11919 powered - f Z field_11917 conditionMet -c net/minecraft/class_2593$class_2594 net/minecraft/tileentity/CommandBlockTileEntity$Mode - m (Ljava/lang/String;)Lnet/minecraft/class_2593$class_2594; valueOf valueOf - m ()[Lnet/minecraft/class_2593$class_2594; values values - f Lnet/minecraft/class_2593$class_2594; field_11922 SEQUENCE - f Lnet/minecraft/class_2593$class_2594; field_11923 AUTO - f Lnet/minecraft/class_2593$class_2594; field_11924 REDSTONE - f [Lnet/minecraft/class_2593$class_2594; field_11925 $VALUES -c net/minecraft/class_2593$1 net/minecraft/tileentity/CommandBlockTileEntity$1 - f Lnet/minecraft/class_2593; field_11921 field_145767_a -c net/minecraft/class_2603 net/minecraft/tileentity/DaylightDetectorTileEntity -c net/minecraft/class_2597 net/minecraft/tileentity/ConduitTileEntity - m ()Z method_11066 isEyeOpen - m (Lnet/minecraft/class_3414;)V method_11067 playSound - m ()Z method_11069 shouldBeActive - m (F)F method_11061 getActiveRotation - m ()Lnet/minecraft/class_1309; method_11056 findExistingTarget - m ()V method_11055 addEffectsToPlayers - m ()V method_11064 updateClientTarget - m ()V method_11068 attackMobs - m ()V method_11063 spawnParticles - m (Z)V method_11057 setActive - m ()Z method_11065 isActive - m (Lnet/minecraft/class_1309;)Z method_11058 func_205032_a - m (Z)V method_11062 setEyeOpen - m ()Lnet/minecraft/class_238; method_11059 getAreaOfEffect - m (Lnet/minecraft/class_1309;)Z method_11060 func_205033_b - f Ljava/util/UUID; field_11935 targetUuid - f Lnet/minecraft/class_1309; field_11939 target - f [Lnet/minecraft/class_2248; field_11931 field_205042_e - f J field_11938 nextSoundTime - f I field_11936 ticksExisted - f Z field_11933 eyeOpen - f Z field_11934 active - f F field_11932 activeRotation - f Ljava/util/List; field_11937 prismarinePositions -c net/minecraft/class_2608 net/minecraft/tileentity/DropperTileEntity -c net/minecraft/class_2601 net/minecraft/tileentity/DispenserTileEntity - m (Lnet/minecraft/class_1799;)I method_11075 addItemStack - m ()I method_11076 getDispenseSlot - f Lnet/minecraft/class_2371; field_11945 stacks - f Ljava/util/Random; field_11944 RNG -c net/minecraft/class_2611 net/minecraft/tileentity/EnderChestTileEntity - m (Lnet/minecraft/class_1657;)Z method_11218 canBeUsed - m ()V method_11219 openChest - m ()V method_11220 closeChest - f F field_12004 prevLidAngle - f I field_12005 ticksSinceSync - f I field_12006 numPlayersUsing - f F field_12007 lidAngle -c net/minecraft/class_2605 net/minecraft/tileentity/EnchantingTableTileEntity - m (Lnet/minecraft/class_2561;)V method_11179 setCustomName - f Lnet/minecraft/class_2561; field_11959 customname - f Ljava/util/Random; field_11968 random - f F field_11965 pageTurningSpeed - f F field_11963 pageAngle - f F field_11964 nextPageAngle - f F field_11967 field_195526_i - f F field_11962 field_195531_n - f F field_11958 field_195523_f - f I field_11961 ticks - f F field_11969 field_195525_h - f F field_11966 nextPageTurningSpeed - f F field_11960 field_195524_g -c net/minecraft/class_2615 net/minecraft/tileentity/IHopper - m ()D method_11266 getXPos - m ()D method_11264 getYPos - m ()Lnet/minecraft/class_265; method_11262 getCollectionArea - m ()Lnet/minecraft/class_1937; method_10997 getWorld - m ()D method_11265 getZPos - f Lnet/minecraft/class_265; field_12027 BLOCK_ABOVE_SHAPE - f Lnet/minecraft/class_265; field_12026 COLLECTION_AREA_SHAPE - f Lnet/minecraft/class_265; field_12025 INSIDE_BOWL_SHAPE -c net/minecraft/class_3866 net/minecraft/tileentity/FurnaceTileEntity -c net/minecraft/class_3751 net/minecraft/tileentity/JigsawTileEntity - m ()Lnet/minecraft/class_3751$class_4991; method_26400 func_235671_j_ - m (Lnet/minecraft/class_2960;)V method_16379 func_235664_a_ - m ()Lnet/minecraft/class_2960; method_16381 func_235668_d_ - m (Lnet/minecraft/class_3218;IZ)V method_27191 func_235665_a_ - m (Ljava/lang/String;)V method_16377 setFinalState - m (Lnet/minecraft/class_2960;)V method_26398 func_235667_c_ - m (Lnet/minecraft/class_2960;)V method_16378 func_235666_b_ - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_3751$class_4991; method_26397 func_235663_a_ - m (Lnet/minecraft/class_3751$class_4991;)V method_26396 func_235662_a_ - m ()Ljava/lang/String; method_16380 getFinalState - m ()Lnet/minecraft/class_2960; method_26399 func_235669_f_ - m ()Lnet/minecraft/class_2960; method_16382 func_235670_g_ - f Ljava/lang/String; field_16551 finalState - f Lnet/minecraft/class_2960; field_16552 field_235659_b_ - f Lnet/minecraft/class_3751$class_4991; field_23328 field_235661_g_ - f Lnet/minecraft/class_2960; field_23327 field_235660_c_ - f Lnet/minecraft/class_2960; field_16550 field_235658_a_ -c net/minecraft/class_3751$class_4991 net/minecraft/tileentity/JigsawTileEntity$OrientationType - m (Ljava/lang/String;Lnet/minecraft/class_3751$class_4991;)Z method_26402 func_235674_a_ - m (Ljava/lang/String;)Ljava/util/Optional; method_26401 func_235673_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_3751$class_4991; valueOf valueOf - m ()[Lnet/minecraft/class_3751$class_4991; values values - f Lnet/minecraft/class_3751$class_4991; field_23329 ROLLABLE - f Ljava/lang/String; field_23331 field_235672_c_ - f Lnet/minecraft/class_3751$class_4991; field_23330 ALIGNED - f [Lnet/minecraft/class_3751$class_4991; field_23332 $VALUES -c net/minecraft/class_2614 net/minecraft/tileentity/HopperTileEntity - m (Lnet/minecraft/class_2615;)Ljava/util/List; method_11237 getCaptureItems - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;ILnet/minecraft/class_2350;)Z method_11244 canInsertItemInSlot - m (Lnet/minecraft/class_1297;)Ljava/lang/Boolean; method_11240 func_213969_b - m (Ljava/util/function/Supplier;)Z method_11243 updateHopper - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;ILnet/minecraft/class_2350;)Z method_11252 canExtractItemFromSlot - m (Lnet/minecraft/class_1263;I)Z method_17766 func_213973_a - m ()Z method_11256 isFull - m (Lnet/minecraft/class_1937;DDD)Lnet/minecraft/class_1263; method_11251 getInventoryAtPosition - m ()Z method_11246 transferItemsOut - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_2350;)Ljava/util/stream/IntStream; method_17767 func_213972_a - m ()Z method_11239 isOnTransferCooldown - m (Lnet/minecraft/class_1263;I)Z method_17769 func_213970_b - m ()Z method_11242 mayTransfer - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_2350;)Z method_11257 isInventoryEmpty - m (Lnet/minecraft/class_1297;)V method_11236 onEntityCollision - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_2350;)Z method_11258 isInventoryFull - m (Lnet/minecraft/class_2615;Lnet/minecraft/class_1263;Lnet/minecraft/class_2350;I)Z method_17768 func_213971_a - m (Lnet/minecraft/class_2615;)Lnet/minecraft/class_1263; method_11248 getSourceInventory - m (Lnet/minecraft/class_2615;Lnet/minecraft/class_1263;ILnet/minecraft/class_2350;)Z method_11261 pullItemFromSlot - m ()Lnet/minecraft/class_1263; method_11255 getInventoryForHopperTransfer - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;ILnet/minecraft/class_2350;)Lnet/minecraft/class_1799; method_11253 insertStack - m ()Ljava/lang/Boolean; method_11249 func_200111_K - m (Lnet/minecraft/class_2615;)Z method_11241 pullItems - m (I)V method_11238 setTransferCooldown - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1263; method_11250 getInventoryAtPosition - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;Lnet/minecraft/class_2350;)Lnet/minecraft/class_1799; method_11260 putStackInInventoryAllSlots - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_11254 canCombine - m (Lnet/minecraft/class_2615;Lnet/minecraft/class_238;)Ljava/util/stream/Stream; method_11245 func_200110_a - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1542;)Z method_11247 captureItem - f I field_12023 transferCooldown - f J field_12022 tickedGameTime - f Lnet/minecraft/class_2371; field_12024 inventory -c net/minecraft/class_3722 net/minecraft/tileentity/LecternTileEntity - m (I)V method_17511 setPage - m ()Lnet/minecraft/class_1799; method_17520 getBook - m (Lnet/minecraft/class_3722;)V method_17519 func_214037_b - m ()Z method_17522 hasBook - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;)V method_17514 setBook - m (Lnet/minecraft/class_3722;I)V method_17516 func_214044_a - m ()V method_17525 bookRemoved - m (Lnet/minecraft/class_3722;)Lnet/minecraft/class_1799; method_17515 func_214036_a - m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_2168; method_17512 createCommandSource - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_17518 ensureResolved - m (Lnet/minecraft/class_3722;)I method_17521 func_214038_c - m (Lnet/minecraft/class_1799;)V method_17513 setBook - m (Lnet/minecraft/class_3722;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_17517 func_214043_a - m ()I method_17523 getPage - m ()I method_17524 getComparatorSignalLevel - f I field_17389 page - f Lnet/minecraft/class_1799; field_17388 book - f I field_17390 pages - f Lnet/minecraft/class_3913; field_17387 field_214049_b - f Lnet/minecraft/class_1263; field_17386 inventory -c net/minecraft/class_3722$2 net/minecraft/tileentity/LecternTileEntity$2 - f Lnet/minecraft/class_3722; field_17392 field_221483_a -c net/minecraft/class_3722$1 net/minecraft/tileentity/LecternTileEntity$1 - f Lnet/minecraft/class_3722; field_17391 field_214028_a -c net/minecraft/class_2619 net/minecraft/tileentity/JukeboxTileEntity - m ()Lnet/minecraft/class_1799; method_11275 getRecord - m (Lnet/minecraft/class_1799;)V method_11276 setRecord - f Lnet/minecraft/class_1799; field_12031 record -c net/minecraft/class_2618 net/minecraft/tileentity/IChestLid - m (F)F method_11274 getLidAngle -c net/minecraft/class_2627 net/minecraft/tileentity/ShulkerBoxTileEntity - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_11317 saveToNbt - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_238; method_11315 getTopBoundingBox - m ()V method_11318 updateAnimation - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_238; method_11311 getBoundingBox - m (F)F method_11312 getProgress - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_238; method_11314 getBoundingBox - m ()V method_11316 moveCollidedEntities - m (Lnet/minecraft/class_2487;)V method_11319 loadFromNbt - m ()V method_20047 func_213975_v - m ()Z method_27093 func_235676_l_ - m ()Lnet/minecraft/class_2627$class_2628; method_11313 getAnimationStatus - m ()Lnet/minecraft/class_1767; method_11320 getColor - f [I field_12059 SLOTS - f I field_12053 openCount - f Lnet/minecraft/class_2627$class_2628; field_12057 animationStatus - f Lnet/minecraft/class_2371; field_12054 items - f Z field_12058 needsColorFromWorld - f Lnet/minecraft/class_1767; field_12060 color - f F field_12056 progress - f F field_12055 progressOld -c net/minecraft/class_2627$1 net/minecraft/tileentity/ShulkerBoxTileEntity$1 - f [I field_12061 field_191052_b - f [I field_12062 field_191051_a -c net/minecraft/class_2627$class_2628 net/minecraft/tileentity/ShulkerBoxTileEntity$AnimationStatus - m ()[Lnet/minecraft/class_2627$class_2628; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2627$class_2628; valueOf valueOf - f Lnet/minecraft/class_2627$class_2628; field_12066 OPENING - f [Lnet/minecraft/class_2627$class_2628; field_12067 $VALUES - f Lnet/minecraft/class_2627$class_2628; field_12063 OPENED - f Lnet/minecraft/class_2627$class_2628; field_12064 CLOSING - f Lnet/minecraft/class_2627$class_2628; field_12065 CLOSED -c net/minecraft/class_2621 net/minecraft/tileentity/LockableLootTileEntity - m (Lnet/minecraft/class_2487;)Z method_11286 checkLootAndWrite - m (Lnet/minecraft/class_2487;)Z method_11283 checkLootAndRead - m (Lnet/minecraft/class_2960;J)V method_11285 setLootTable - m (Lnet/minecraft/class_1922;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2960;)V method_11287 setLootTable - m (Lnet/minecraft/class_1657;)V method_11289 fillWithLoot - m (Lnet/minecraft/class_2371;)V method_11281 setItems - m ()Lnet/minecraft/class_2371; method_11282 getItems - f Lnet/minecraft/class_2960; field_12037 lootTable - f J field_12036 lootTableSeed -c net/minecraft/class_2631 net/minecraft/tileentity/SkullTileEntity - m (Lcom/mojang/authlib/GameProfile;)Lcom/mojang/authlib/GameProfile; method_11335 updateGameProfile - m (Lcom/mojang/authlib/minecraft/MinecraftSessionService;)V method_11336 setSessionService - m (F)F method_11338 getAnimationProgress - m ()Lcom/mojang/authlib/GameProfile; method_11334 getPlayerProfile - m (Lcom/mojang/authlib/GameProfile;)V method_11333 setPlayerProfile - m (Lnet/minecraft/class_3312;)V method_11337 setProfileCache - m ()V method_11339 updatePlayerProfile - f I field_12085 dragonAnimatedTicks - f Lnet/minecraft/class_3312; field_12089 profileCache - f Lcom/mojang/authlib/GameProfile; field_12087 playerProfile - f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_12088 sessionService - f Z field_12086 dragonAnimated -c net/minecraft/class_2625 net/minecraft/tileentity/SignTileEntity - m (Lnet/minecraft/class_1657;)V method_11306 setPlayer - m (I)Lnet/minecraft/class_2561; method_30843 getText - m (Lnet/minecraft/class_1657;)Z method_11301 executeCommand - m (ILnet/minecraft/class_2561;)V method_11299 setText - m ()Z method_11307 getIsEditable - m (Z)V method_11303 setEditable - m ()Lnet/minecraft/class_1657; method_11305 getPlayer - m (Lnet/minecraft/class_1767;)Z method_16127 setTextColor - m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_2168; method_11304 getCommandSource - m ()Lnet/minecraft/class_1767; method_16126 getTextColor - m (ILjava/util/function/Function;)Lnet/minecraft/class_5481; method_11300 func_242686_a - f [Lnet/minecraft/class_5481; field_12049 renderText - f [Lnet/minecraft/class_2561; field_12050 signText - f Lnet/minecraft/class_1767; field_16419 textColor - f Z field_12048 isEditable - f Lnet/minecraft/class_1657; field_12046 player -c net/minecraft/class_2636 net/minecraft/tileentity/MobSpawnerTileEntity - m ()Lnet/minecraft/class_1917; method_11390 getSpawnerBaseLogic - f Lnet/minecraft/class_1917; field_12114 spawnerLogic -c net/minecraft/class_2636$1 net/minecraft/tileentity/MobSpawnerTileEntity$1 - f Lnet/minecraft/class_2636; field_12115 field_150825_a -c net/minecraft/class_3723 net/minecraft/tileentity/SmokerTileEntity -c net/minecraft/class_2643 net/minecraft/tileentity/EndGatewayTileEntity - m ()V method_11411 triggerCooldown - m ()Z method_11421 isCoolingDown - m (Lnet/minecraft/class_2818;)Lnet/minecraft/class_2338; method_11413 findSpawnpointInChunk - m (Lnet/minecraft/class_1297;)V method_11409 teleportEntity - m (F)F method_11412 getCooldownPercent - m (Lnet/minecraft/class_1297;)Z method_30276 func_242690_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_11416 func_227016_a_ - m (Lnet/minecraft/class_2338;Z)V method_11418 setExitPortal - m (F)F method_11417 getSpawnPercent - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;IZ)Lnet/minecraft/class_2338; method_11410 findHighestBlock - m (Lnet/minecraft/class_3218;)V method_11422 func_227015_a_ - m ()Z method_11420 isSpawning - m ()I method_11415 getParticleAmount - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_243;)Lnet/minecraft/class_2818; method_11414 getChunk - m ()Lnet/minecraft/class_2338; method_11419 findExitPosition - f Lnet/minecraft/class_2338; field_12132 exitPortal - f Z field_12129 exactTeleport - f I field_12130 teleportCooldown - f Lorg/apache/logging/log4j/Logger; field_12133 LOGGER - f J field_12131 age -c net/minecraft/class_2633 net/minecraft/tileentity/StructureBlockTileEntity - m (Lnet/minecraft/class_3218;ZLnet/minecraft/class_3499;)Z method_21864 func_242689_a - m (Lnet/minecraft/class_3218;Z)Z method_11368 func_242688_a - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Ljava/util/List; method_11369 getNearbyCornerBlocks - m (Lnet/minecraft/class_2776;)V method_11381 setMode - m ()Lnet/minecraft/class_2415; method_11345 getMirror - m ()Z method_11367 ignoresEntities - m ()Lnet/minecraft/class_2776; method_11374 getMode - m ()F method_11346 getIntegrity - m ()Z method_11384 hasName - m ()Ljava/lang/String; method_11358 getMetadata - m ()V method_11348 updateBlockState - m ()Ljava/lang/String; method_11362 getName - m (J)Ljava/util/Random; method_20048 func_214074_b - m ()Z method_11357 showsBoundingBox - m ()Ljava/lang/String; method_21865 func_227014_f_ - m ()V method_11380 nextMode - m (Lnet/minecraft/class_2338;)V method_11377 setSize - m (Ljava/lang/String;)V method_11343 setName - m (Z)Z method_11366 save - m (Z)V method_11347 setShowAir - m ()Z method_11383 detectSize - m (F)V method_11370 setIntegrity - m ()V method_11361 unloadStructure - m ()Z method_11354 isPowered - m (Lnet/minecraft/class_2338;Ljava/util/List;)Lnet/minecraft/class_3341; method_11355 calculateEnclosingBoundingBox - m (J)V method_11382 setSeed - m (Ljava/util/List;)Ljava/util/List; method_11364 filterRelatedCornerBlocks - m (Lnet/minecraft/class_2415;)V method_11356 setMirror - m ()Lnet/minecraft/class_2470; method_11353 getRotation - m (Lnet/minecraft/class_2960;)V method_11344 setName - m (Z)V method_11352 setIgnoresEntities - m ()J method_11371 getSeed - m ()Lnet/minecraft/class_2338; method_11349 getStructureSize - m (Lnet/minecraft/class_1657;)Z method_11351 usedBy - m ()Lnet/minecraft/class_2338; method_11359 getPosition - m (Lnet/minecraft/class_1309;)V method_11373 createdBy - m (Lnet/minecraft/class_2338;)V method_11378 setPosition - m (Z)V method_11379 setPowered - m (Ljava/lang/String;)V method_11363 setMetadata - m (Lnet/minecraft/class_2470;)V method_11385 setRotation - m ()Z method_11365 save - m (Lnet/minecraft/class_3218;)Z method_11376 func_242687_a - m (Lnet/minecraft/class_2633;)Z method_11350 func_200665_a - m ()Z method_11375 showsAir - m ()Z method_11372 isStructureLoadable - m (Z)V method_11360 setShowBoundingBox - f Z field_12096 showAir - f F field_12101 integrity - f Lnet/minecraft/class_2470; field_12105 rotation - f Lnet/minecraft/class_2960; field_12102 name - f Z field_12099 ignoreEntities - f Ljava/lang/String; field_12098 metadata - f Lnet/minecraft/class_2338; field_12100 size - f Lnet/minecraft/class_2776; field_12094 mode - f Z field_12097 powered - f Z field_12095 showBoundingBox - f Lnet/minecraft/class_2415; field_12093 mirror - f J field_12103 seed - f Ljava/lang/String; field_12104 author - f Lnet/minecraft/class_2338; field_12092 position -c net/minecraft/class_2633$1 net/minecraft/tileentity/StructureBlockTileEntity$1 - f [I field_12111 field_208124_a -c net/minecraft/class_2633$class_2634 net/minecraft/tileentity/StructureBlockTileEntity$UpdateCommand - m ()[Lnet/minecraft/class_2633$class_2634; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2633$class_2634; valueOf valueOf - f [Lnet/minecraft/class_2633$class_2634; field_12107 $VALUES - f Lnet/minecraft/class_2633$class_2634; field_12106 SCAN_AREA - f Lnet/minecraft/class_2633$class_2634; field_12110 SAVE_AREA - f Lnet/minecraft/class_2633$class_2634; field_12109 LOAD_AREA - f Lnet/minecraft/class_2633$class_2634; field_12108 UPDATE_DATA -c net/minecraft/class_3000 net/minecraft/tileentity/ITickableTileEntity - m ()V method_16896 tick -c net/minecraft/class_2640 net/minecraft/tileentity/EndPortalTileEntity - m (Lnet/minecraft/class_2350;)Z method_11400 shouldRenderFace -c net/minecraft/class_2646 net/minecraft/tileentity/TrappedChestTileEntity -c net/minecraft/class_2647 net/minecraft/block/trees/Tree - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Random;)Z method_11431 attemptGrowTree - m (Ljava/util/Random;Z)Lnet/minecraft/class_2975; method_11430 getTreeFeature - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_24282 hasNearbyFlora -c net/minecraft/class_2650 net/minecraft/block/trees/BigTree - m (Ljava/util/Random;)Lnet/minecraft/class_2975; method_11443 getHugeTreeFeature - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Random;II)Z method_11444 growBigTree - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;II)Z method_11442 canBigTreeSpawnAt -c net/minecraft/class_2652 net/minecraft/block/trees/BirchTree -c net/minecraft/class_2654 net/minecraft/block/trees/AcaciaTree -c net/minecraft/class_2655 net/minecraft/block/trees/JungleTree -c net/minecraft/class_2657 net/minecraft/block/trees/DarkOakTree -c net/minecraft/class_2659 net/minecraft/block/trees/SpruceTree -c net/minecraft/class_2662 net/minecraft/block/trees/OakTree -c net/minecraft/class_2665 net/minecraft/block/PistonBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Z)Z method_11481 doMove - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_11483 checkForMove - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_11482 shouldBeExtended - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;ZLnet/minecraft/class_2350;)Z method_11484 canPush - f Lnet/minecraft/class_265; field_12188 PISTON_BASE_EAST_AABB - f Lnet/minecraft/class_265; field_12186 PISTON_BASE_SOUTH_AABB - f Z field_12187 isSticky - f Lnet/minecraft/class_265; field_12184 PISTON_BASE_WEST_AABB - f Lnet/minecraft/class_265; field_12189 PISTON_BASE_NORTH_AABB - f Lnet/minecraft/class_2746; field_12191 EXTENDED - f Lnet/minecraft/class_265; field_12185 PISTON_BASE_UP_AABB - f Lnet/minecraft/class_265; field_12190 PISTON_BASE_DOWN_AABB -c net/minecraft/class_2665$1 net/minecraft/block/PistonBlock$1 - f [I field_12192 field_193399_b - f [I field_12193 field_177243_a -c net/minecraft/class_2667 net/minecraft/block/MovingPistonBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;ZZ)Lnet/minecraft/class_2586; method_11489 createTilePiston - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2669; method_11488 getTileEntity - f Lnet/minecraft/class_2753; field_12196 FACING - f Lnet/minecraft/class_2754; field_12197 TYPE -c net/minecraft/class_4623 net/minecraft/util/AabbHelper - m (Lnet/minecraft/class_238;Lnet/minecraft/class_2350;D)Lnet/minecraft/class_238; method_23362 func_227019_a_ -c net/minecraft/class_4623$1 net/minecraft/util/AabbHelper$1 - f [I field_21215 field_227020_a_ -c net/minecraft/class_2671 net/minecraft/block/PistonHeadBlock - m (ZLnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_31020 func_242695_a - m (Z)[Lnet/minecraft/class_265; method_31019 getShapesForExtension - m (Lnet/minecraft/class_2350;Z)Lnet/minecraft/class_265; method_11520 getShapeForDirection - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)Z method_26980 isExtended - m (I)[Lnet/minecraft/class_265; method_31021 func_242696_b - f Lnet/minecraft/class_265; field_12217 SHORT_DOWN_ARM_AABB - f Lnet/minecraft/class_265; field_12225 SHORT_NORTH_ARM_AABB - f Lnet/minecraft/class_265; field_12216 SHORT_SOUTH_ARM_AABB - f Lnet/minecraft/class_265; field_12219 SHORT_EAST_ARM_AABB - f Lnet/minecraft/class_265; field_12212 SHORT_WEST_ARM_AABB - f Lnet/minecraft/class_265; field_12221 SOUTH_ARM_AABB - f Lnet/minecraft/class_265; field_12229 NORTH_ARM_AABB - f Lnet/minecraft/class_265; field_12223 WEST_ARM_AABB - f Lnet/minecraft/class_265; field_12218 EAST_ARM_AABB - f Lnet/minecraft/class_2746; field_12227 SHORT - f Lnet/minecraft/class_265; field_12231 SHORT_UP_ARM_AABB - f Lnet/minecraft/class_265; field_12215 UP_ARM_AABB - f Lnet/minecraft/class_265; field_12220 PISTON_EXTENSION_DOWN_AABB - f Lnet/minecraft/class_265; field_12226 DOWN_ARM_AABB - f Lnet/minecraft/class_265; field_12222 PISTON_EXTENSION_EAST_AABB - f Lnet/minecraft/class_2754; field_12224 TYPE - f Lnet/minecraft/class_265; field_12228 PISTON_EXTENSION_SOUTH_AABB - f [Lnet/minecraft/class_265; field_26661 UNEXTENDED_SHAPES - f Lnet/minecraft/class_265; field_12214 PISTON_EXTENSION_WEST_AABB - f [Lnet/minecraft/class_265; field_26660 EXTENDED_SHAPES - f Lnet/minecraft/class_265; field_12213 PISTON_EXTENSION_NORTH_AABB - f Lnet/minecraft/class_265; field_12230 PISTON_EXTENSION_UP_AABB -c net/minecraft/class_2671$1 net/minecraft/block/PistonHeadBlock$1 - f [I field_12232 field_177247_a -c net/minecraft/class_2669 net/minecraft/tileentity/PistonTileEntity - m (F)V method_23674 func_227024_g_ - m (F)V method_11503 moveCollidedEntities - m (Lnet/minecraft/class_238;)Lnet/minecraft/class_238; method_11500 moveByPositionAndProgress - m ()Lnet/minecraft/class_2350; method_11506 getMotionDirection - m ()Lnet/minecraft/class_2350; method_11498 getFacing - m ()Lnet/minecraft/class_2680; method_11496 getCollisionRelatedBlockState - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2350;D)V method_11514 fixEntityWithinPistonBase - m (F)F method_11494 getOffsetX - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_11512 getCollisionShape - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_1297;DLnet/minecraft/class_2350;)V method_23672 func_227022_a_ - m ()Lnet/minecraft/class_2350; method_21866 func_227026_z_ - m (F)F method_11499 getProgress - m ()Z method_11515 shouldPistonHeadBeRendered - m (F)F method_11504 getExtendedProgress - m (F)F method_11507 getOffsetZ - m ()V method_11513 clearPistonTileEntity - m (F)F method_11511 getOffsetY - m ()Z method_11501 isExtending - m ()Z method_23364 func_227025_y_ - m (Lnet/minecraft/class_238;Lnet/minecraft/class_1297;)Z method_23671 func_227021_a_ - m ()Lnet/minecraft/class_2680; method_11495 getPistonState - m (Lnet/minecraft/class_238;Lnet/minecraft/class_1297;)Z method_23673 func_227023_b_ - m ()J method_11508 getLastTicked - m (Lnet/minecraft/class_238;Lnet/minecraft/class_2350;Lnet/minecraft/class_238;)D method_11497 getMovement - f F field_12206 lastProgress - f Z field_12203 extending - f F field_12207 progress - f I field_26705 field_242697_l - f J field_12208 lastTicked - f Ljava/lang/ThreadLocal; field_12205 MOVING_ENTITY - f Lnet/minecraft/class_2680; field_12204 pistonState - f Lnet/minecraft/class_2350; field_12201 pistonFacing - f Z field_12202 shouldHeadBeRendered -c net/minecraft/class_2669$1 net/minecraft/tileentity/PistonTileEntity$1 - f [I field_12210 field_227027_a_ - f [I field_21467 field_227028_b_ -c net/minecraft/class_2674 net/minecraft/block/PistonBlockStructureHelper - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Z method_23675 func_227030_a_ - m (Lnet/minecraft/class_2248;)Z method_23367 func_227029_a_ - m ()Z method_11537 canMove - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_11540 addBlockLine - m ()Ljava/util/List; method_11536 getBlocksToDestroy - m (II)V method_11539 reorderListAtCollision - m ()Ljava/util/List; method_11541 getBlocksToMove - m (Lnet/minecraft/class_2338;)Z method_11538 addBranchingBlocks - f Ljava/util/List; field_12245 toMove - f Lnet/minecraft/class_2338; field_12250 pistonPos - f Lnet/minecraft/class_2350; field_12243 moveDirection - f Z field_12247 extending - f Lnet/minecraft/class_1937; field_12249 world - f Lnet/minecraft/class_2350; field_12248 facing - f Ljava/util/List; field_12246 toDestroy - f Lnet/minecraft/class_2338; field_12244 blockToMove -c net/minecraft/class_2680 net/minecraft/block/BlockState - f Lcom/mojang/serialization/Codec; field_24734 CODEC -c net/minecraft/class_4970 net/minecraft/block/AbstractBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)V method_9548 onEntityCollision - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_9571 getRenderShape - m ()Lnet/minecraft/class_3620; method_26403 getMaterialColor - m ()Lnet/minecraft/class_4970$class_2250; method_16841 getOffsetType - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_3965;Lnet/minecraft/class_1676;)V method_19286 onProjectileCollision - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_9615 onBlockAdded - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_3619; method_9527 getPushReaction - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_47$class_48;)Ljava/util/List; method_9560 getDrops - m ()Lnet/minecraft/class_1792; method_8389 asItem - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_9558 isValidPosition - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9565 spawnAdditionalDrops - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_3610; method_9545 getFluidState - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;Lnet/minecraft/class_3965;)Lnet/minecraft/class_1269; method_9534 onBlockActivated - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)J method_9535 getPositionRandom - m (Lnet/minecraft/class_2680;)Z method_9498 hasComparatorInputOverride - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_9524 getWeakPower - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;II)V method_9517 updateDiagonalNeighbors - m ()Z method_26161 isTileEntityProvider - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;Lnet/minecraft/class_2338;Z)V method_9612 neighborChanged - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_26159 getRayTraceShape - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_9549 getCollisionShape - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_9514 randomTick - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_9559 updatePostPlacement - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_9575 getAmbientOcclusionLightValue - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;II)Z method_9592 eventReceived - m ()Lnet/minecraft/class_2248; method_26160 getSelf - m (Lnet/minecraft/class_2680;)Z method_9506 canProvidePower - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_25959 getCollisionShape - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1750;)Z method_9616 isReplaceable - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_9522 isSideInvisible - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_10;)Z method_9516 allowsMovement - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)I method_9572 getComparatorInputOverride - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1657;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_9594 getPlayerRelativeBlockHardness - m ()Lnet/minecraft/class_2960; method_26162 getLootTable - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2464; method_9604 getRenderType - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2415;)Lnet/minecraft/class_2680; method_9569 mirror - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_9536 onReplaced - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3611;)Z method_22358 isReplaceable - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3908; method_17454 getContainer - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2470;)Lnet/minecraft/class_2680; method_9598 rotate - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_9584 getRaytraceShape - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_9505 getOpacity - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_9603 getStrongPower - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_9588 tick - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_9530 getShape - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)V method_9606 onBlockClicked - m (Lnet/minecraft/class_2680;)Z method_9526 isTransparent - f F field_23163 slipperiness - f F field_23165 jumpFactor - f Lnet/minecraft/class_2498; field_23162 soundType - f Z field_23159 canCollide - f Z field_23161 ticksRandomly - f F field_23164 speedFactor - f F field_23160 blastResistance - f Z field_23154 variableOpacity - f [Lnet/minecraft/class_2350; field_23157 UPDATE_ORDER - f Lnet/minecraft/class_3614; field_23158 material - f Lnet/minecraft/class_2960; field_23156 lootTable - f Lnet/minecraft/class_4970$class_2251; field_23155 properties -c net/minecraft/class_4970$class_4972 net/minecraft/block/AbstractBlock$IExtendedPositionPredicate - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Ljava/lang/Object;)Z test test -c net/minecraft/class_4970$class_4973 net/minecraft/block/AbstractBlock$IPositionPredicate - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z test test -c net/minecraft/class_4970$class_2250 net/minecraft/block/AbstractBlock$OffsetType - m (Ljava/lang/String;)Lnet/minecraft/class_4970$class_2250; valueOf valueOf - m ()[Lnet/minecraft/class_4970$class_2250; values values - f Lnet/minecraft/class_4970$class_2250; field_10656 NONE - f [Lnet/minecraft/class_4970$class_2250; field_10658 $VALUES - f Lnet/minecraft/class_4970$class_2250; field_10657 XZ - f Lnet/minecraft/class_4970$class_2250; field_10655 XYZ -c net/minecraft/class_4970$class_2251 net/minecraft/block/AbstractBlock$Properties - m (Lnet/minecraft/class_4970$class_2251;)Z method_26242 func_235841_b_ - m (Lnet/minecraft/class_3614;Lnet/minecraft/class_3620;)Lnet/minecraft/class_4970$class_2251; method_9639 create - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_26239 func_235832_a_ - m ()Lnet/minecraft/class_4970$class_2251; method_9624 variableOpacity - m (Lnet/minecraft/class_4970$class_4973;)Lnet/minecraft/class_4970$class_2251; method_26243 setSuffocates - m (Ljava/util/function/ToIntFunction;)Lnet/minecraft/class_4970$class_2251; method_9631 setLightLevel - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26246 func_235848_c_ - m (Lnet/minecraft/class_4970$class_2251;)F method_9627 func_235862_h_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26238 func_235831_a_ - m (Lnet/minecraft/class_4970$class_4973;)Lnet/minecraft/class_4970$class_2251; method_26247 setNeedsPostProcessing - m ()Lnet/minecraft/class_4970$class_2251; method_26250 setAir - m (Lnet/minecraft/class_4970$class_2251;)F method_9625 func_235851_d_ - m (Lnet/minecraft/class_4970$class_2251;)Ljava/util/function/ToIntFunction; method_26253 func_235866_l_ - m (Lnet/minecraft/class_2680;)I method_26237 func_235830_a_ - m (Lnet/minecraft/class_3614;)Lnet/minecraft/class_4970$class_2251; method_9637 create - m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_2960; method_9641 func_235846_c_ - m (Lnet/minecraft/class_4970$class_2251;)Z method_22489 func_235869_o_ - m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4972; method_26260 func_235876_v_ - m (Lnet/minecraft/class_4970$class_2251;)Z method_26254 func_235867_m_ - m (Lnet/minecraft/class_4970$class_4972;)Lnet/minecraft/class_4970$class_2251; method_26235 setAllowsSpawn - m (F)Lnet/minecraft/class_4970$class_2251; method_9628 slipperiness - m (Lnet/minecraft/class_2498;)Lnet/minecraft/class_4970$class_2251; method_9626 sound - m (Lnet/minecraft/class_3614;Ljava/util/function/Function;)Lnet/minecraft/class_4970$class_2251; method_26240 create - m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_2498; method_9638 func_235858_f_ - m (F)Lnet/minecraft/class_4970$class_2251; method_23352 jumpFactor - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4970$class_2251; method_16228 lootFrom - m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4973; method_26256 func_235872_r_ - m ()Lnet/minecraft/class_4970$class_2251; method_22488 notSolid - m (Lnet/minecraft/class_4970$class_2251;)Z method_9619 func_235855_e_ - m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_3614; method_9623 func_235826_a_ - m (Lnet/minecraft/class_4970$class_4973;)Lnet/minecraft/class_4970$class_2251; method_26236 setOpaque - m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4973; method_26258 func_235874_t_ - m (Lnet/minecraft/class_4970$class_2251;)F method_23353 func_235863_i_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26248 func_235853_d_ - m (Lnet/minecraft/class_3620;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3620; method_26241 func_235837_a_ - m ()Lnet/minecraft/class_4970$class_2251; method_9640 tickRandomly - m (Lnet/minecraft/class_4970$class_4973;)Lnet/minecraft/class_4970$class_2251; method_26245 setBlocksVision - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26244 func_235843_b_ - m (Lnet/minecraft/class_4970$class_4973;)Lnet/minecraft/class_4970$class_2251; method_26249 setEmmisiveRendering - m ()Lnet/minecraft/class_4970$class_2251; method_29292 setRequiresTool - m (Lnet/minecraft/class_3614;Lnet/minecraft/class_1767;)Lnet/minecraft/class_4970$class_2251; method_9617 create - m (Lnet/minecraft/class_4970$class_2251;)F method_26251 func_235860_g_ - m ()Lnet/minecraft/class_4970$class_2251; method_16229 noDrops - m (Lnet/minecraft/class_4970$class_2251;)Z method_29293 func_235870_p_ - m (Lnet/minecraft/class_4970;)Lnet/minecraft/class_4970$class_2251; method_9630 from - m (Lnet/minecraft/class_4970$class_2251;)Z method_9621 func_235864_j_ - m (F)Lnet/minecraft/class_4970$class_2251; method_9632 hardnessAndResistance - m (F)Lnet/minecraft/class_4970$class_2251; method_23351 speedFactor - m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4973; method_26255 func_235871_q_ - m (Lnet/minecraft/class_4970$class_2251;)F method_9633 func_235868_n_ - m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4973; method_26257 func_235873_s_ - m ()Lnet/minecraft/class_4970$class_2251; method_9618 zeroHardnessAndResistance - m (Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_4970$class_4973; method_26259 func_235875_u_ - m (Lnet/minecraft/class_4970$class_2251;)Ljava/util/function/Function; method_26252 func_235865_k_ - m ()Lnet/minecraft/class_4970$class_2251; method_9634 doesNotBlockMovement - m (FF)Lnet/minecraft/class_4970$class_2251; method_9629 hardnessAndResistance - f Z field_10661 ticksRandomly - f Ljava/util/function/Function; field_10662 blockColors - f F field_23179 speedFactor - f Z field_10664 blocksMovement - f Z field_10670 variableOpacity - f Lnet/minecraft/class_4970$class_4973; field_23182 isOpaque - f F field_10669 hardness - f Lnet/minecraft/class_4970$class_4973; field_23186 emmissiveRendering - f Lnet/minecraft/class_4970$class_4973; field_23184 blocksVision - f Lnet/minecraft/class_2960; field_10666 lootTable - f Z field_20721 isSolid - f Lnet/minecraft/class_4970$class_4972; field_23181 allowsSpawn - f Ljava/util/function/ToIntFunction; field_10663 lightLevel - f Lnet/minecraft/class_2498; field_10665 soundType - f Z field_25185 requiresTool - f F field_21209 jumpFactor - f Lnet/minecraft/class_3614; field_10668 material - f F field_10667 slipperiness - f Lnet/minecraft/class_4970$class_4973; field_23183 suffocates - f Lnet/minecraft/class_4970$class_4973; field_23185 needsPostProcessing - f F field_10660 resistance - f Z field_23180 isAir -c net/minecraft/class_4970$class_4971 net/minecraft/block/AbstractBlock$AbstractBlockState - m ()Z method_26225 isSolid - m (Lnet/minecraft/class_3494;)Z method_26164 isIn - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_26173 getFaceOcclusionShape - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)V method_26178 onEntityCollision - m ()Lnet/minecraft/class_2680; method_26233 getSelf - m ()Z method_26221 hasComparatorInputOverride - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_26202 getRaytraceShape - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_26203 getStrongPower - m ()Lnet/minecraft/class_3614; method_26207 getMaterial - m (Lnet/minecraft/class_2248;)Z method_27852 isIn - m ()Z method_26209 isCollisionShapeLargerThanFullBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_26193 getOpacity - m ()I method_26213 getLightValue - m (Lnet/minecraft/class_2415;)Lnet/minecraft/class_2680; method_26185 mirror - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;Lnet/minecraft/class_3965;)Lnet/minecraft/class_1269; method_26174 onBlockActivated - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_26180 spawnAdditionalDrops - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_243; method_26226 getOffset - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_26222 getRenderShape - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_26210 getAmbientOcclusionLightValue - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;II)V method_26198 updateDiagonalNeighbors - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_26197 onReplaced - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_26194 getCollisionShape - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)V method_30101 updateNeighbours - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_26218 getShape - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_26214 getBlockHardness - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_26195 getWeakPower - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;Lnet/minecraft/class_2350;)Z method_26169 isTopSolid - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_26192 tick - m ()Z method_29291 getRequiresTool - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_5431;)Z method_30368 func_242698_a - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26228 isSuffocating - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26232 blockNeedsPostProcessing - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26212 isNormalCube - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_26201 getRenderShapeTrue - m (Lnet/minecraft/class_3611;)Z method_26188 isReplaceable - m ()Lnet/minecraft/class_3619; method_26223 getPushReaction - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26216 isOpaqueCube - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_26206 isSolidSide - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_3965;Lnet/minecraft/class_1676;)V method_26175 onProjectileCollision - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_10;)Z method_26171 allowsMovement - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_26165 getPlayerRelativeBlockHardness - m (Lnet/minecraft/class_2338;)J method_26190 getPositionRandom - m ()Z method_26219 canProvidePower - m ()Z method_26215 isAir - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_26199 randomTick - m ()Lnet/minecraft/class_3610; method_26227 getFluidState - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)I method_26176 getComparatorInputOverride - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3908; method_26196 getContainer - m (Lnet/minecraft/class_2470;)Lnet/minecraft/class_2680; method_26186 rotate - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)V method_26179 onBlockClicked - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26208 isEmissiveRendering - m ()Z method_26211 isTransparent - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_26191 updatePostPlacement - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26234 hasOpaqueCollisionShape - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;Lnet/minecraft/class_2338;Z)V method_26181 neighborChanged - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3620; method_26205 getMaterialColor - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_26224 getRayTraceShape - m ()Lnet/minecraft/class_2248; method_26204 getBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_26220 getCollisionShape - m ()V method_26200 cacheState - m ()Lnet/minecraft/class_2464; method_26217 getRenderType - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_26182 onBlockAdded - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)Z method_26168 canSpawnMobs - m (Lnet/minecraft/class_3494;Ljava/util/function/Predicate;)Z method_27851 isInAndMatches - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;II)V method_26183 updateNeighbours - m (Lnet/minecraft/class_1750;)Z method_26166 isReplaceable - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)V method_30102 updateDiagonalNeighbors - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26167 propagatesSkylightDown - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; method_26172 getShape - m ()Lnet/minecraft/class_2498; method_26231 getSoundType - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_26187 isSideInvisible - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_26170 canEntitySpawn - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_26184 isValidPosition - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26230 causesSuffocation - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;II)Z method_26177 receiveBlockEvent - m (Lnet/minecraft/class_47$class_48;)Ljava/util/List; method_26189 getDrops - m ()Z method_26229 ticksRandomly - f Lnet/minecraft/class_4970$class_4971$class_3752; field_23166 cache - f Lnet/minecraft/class_4970$class_4973; field_23177 needsPostProcessing - f Z field_23173 isSolid - f Z field_23168 transparent - f F field_23172 hardness - f Lnet/minecraft/class_3620; field_23171 materialColor - f Lnet/minecraft/class_4970$class_4973; field_23174 isNormalCube - f Lnet/minecraft/class_4970$class_4973; field_23178 emissiveRendering - f Lnet/minecraft/class_4970$class_4973; field_23176 blocksVision - f Lnet/minecraft/class_3614; field_23170 material - f Z field_25184 requiresTool - f Z field_23169 isAir - f Lnet/minecraft/class_4970$class_4973; field_23175 blocksVisionChecker - f I field_23167 lightLevel -c net/minecraft/class_4970$class_4971$class_3752 net/minecraft/block/AbstractBlock$AbstractBlockState$Cache - m (Lnet/minecraft/class_2350$class_2351;)Z method_17901 func_235796_a_ - m (Lnet/minecraft/class_4970$class_4971$class_3752;)Z method_16391 func_235795_a_ - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_5431;)Z method_30369 isSolidSide - m (Lnet/minecraft/class_4970$class_4971$class_3752;)[Lnet/minecraft/class_265; method_16389 func_235798_c_ - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_5431;)I method_30370 func_242701_b - m (Lnet/minecraft/class_4970$class_4971$class_3752;)I method_16390 func_235797_b_ - f Z field_16556 propagatesSkylightDown - f I field_16555 opacity - f Z field_17651 isCollisionShapeLargerThanFullBlock - f Z field_20337 opaqueCollisionShape - f [Lnet/minecraft/class_265; field_16560 renderShapes - f Lnet/minecraft/class_265; field_19360 collisionShape - f I field_25830 shapeValueLength - f [Lnet/minecraft/class_2350; field_16559 DIRECTIONS - f Z field_16557 opaqueCube - f [Z field_19429 solidSides -c net/minecraft/class_4970$1 net/minecraft/block/AbstractBlock$1 - f [I field_10659 field_235698_a_ -c net/minecraft/class_2688 net/minecraft/state/StateHolder - m (Ljava/util/function/Function;Ljava/lang/Object;)Lcom/mojang/serialization/Codec; method_28497 func_235900_a_ - m ()Lcom/google/common/collect/ImmutableMap; method_11656 getValues - m (Lnet/minecraft/class_2769;)Z method_28498 hasProperty - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/lang/Object; method_11657 with - m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/util/Map; method_28499 func_235902_b_ - m ()Ljava/util/Collection; method_28501 getProperties - m (Ljava/util/Map;)V method_28496 func_235899_a_ - m (Lnet/minecraft/class_2769;)Ljava/util/Optional; method_28500 func_235903_d_ - m (Lcom/mojang/serialization/Codec;Ljava/util/function/Function;)Lcom/mojang/serialization/Codec; method_28494 func_235897_a_ - m (Lnet/minecraft/class_2688;)Ljava/lang/Object; method_28492 func_235895_a_ - m (Lnet/minecraft/class_2769;)Ljava/lang/Object; method_28493 func_235896_a_ - m (Ljava/util/Collection;Ljava/lang/Object;)Ljava/lang/Object; method_28495 func_235898_a_ - m (Lnet/minecraft/class_2769;)Ljava/lang/Comparable; method_11654 get - f Lcom/google/common/collect/ImmutableMap; field_24738 properties - f Lcom/google/common/collect/Table; field_24741 field_235894_e_ - f Ljava/lang/Object; field_24739 instance - f Ljava/util/function/Function; field_24737 field_235890_a_ - f Lcom/mojang/serialization/MapCodec; field_24740 field_235893_d_ -c net/minecraft/class_2688$1 net/minecraft/state/StateHolder$1 - m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/lang/String; method_11575 func_235905_a_ - m (Ljava/lang/Object;)Ljava/lang/Object; apply apply - m (Ljava/util/Map$Entry;)Ljava/lang/String; method_11576 apply -c net/minecraft/class_2689 net/minecraft/state/StateContainer - m (Lnet/minecraft/class_2769;Lcom/mojang/datafixers/util/Pair;)Lnet/minecraft/class_2688; method_30038 func_241485_a_ - m ()Lcom/google/common/collect/ImmutableList; method_11662 getValidStates - m (Lnet/minecraft/class_2769;Lnet/minecraft/class_2688;)Lcom/mojang/datafixers/util/Pair; method_30037 func_241484_a_ - m ()Ljava/util/Collection; method_11659 getProperties - m ()Lnet/minecraft/class_2688; method_11664 getBaseState - m (Lcom/mojang/serialization/MapCodec;Ljava/util/function/Supplier;Ljava/lang/String;Lnet/minecraft/class_2769;)Lcom/mojang/serialization/MapCodec; method_30040 func_241487_a_ - m (Lnet/minecraft/class_2689$class_2691;Ljava/lang/Object;Lcom/mojang/serialization/MapCodec;Ljava/util/Map;Ljava/util/List;Ljava/util/List;)V method_28484 func_201000_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_2769; method_11663 getProperty - m (Ljava/util/function/Function;Ljava/lang/Object;)Lnet/minecraft/class_2688; method_28485 func_235881_a_ - m ()Ljava/lang/String; toString toString - m ()Ljava/util/regex/Pattern; method_11665 func_206901_e - m (Lnet/minecraft/class_2769;Ljava/util/function/Supplier;)Lnet/minecraft/class_2769$class_4933; method_30039 func_241486_a_ - m (Ljava/util/List;Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/util/List; method_11661 func_200998_a_ - m ()Ljava/lang/Object; method_11660 getOwner - m (Lnet/minecraft/class_2769;Ljava/util/List;)Ljava/util/stream/Stream; method_11666 func_200999_a_ - f Lcom/google/common/collect/ImmutableSortedMap; field_12316 properties - f Lcom/google/common/collect/ImmutableList; field_12315 validStates - f Ljava/util/regex/Pattern; field_12314 NAME_PATTERN - f Ljava/lang/Object; field_12317 owner -c net/minecraft/class_2689$class_2691 net/minecraft/state/StateContainer$IFactory - m (Ljava/lang/Object;Lcom/google/common/collect/ImmutableMap;Lcom/mojang/serialization/MapCodec;)Ljava/lang/Object; create create -c net/minecraft/class_2689$class_2690 net/minecraft/state/StateContainer$Builder - m (Ljava/util/function/Function;Lnet/minecraft/class_2689$class_2691;)Lnet/minecraft/class_2689; method_11668 func_235882_a_ - m ([Lnet/minecraft/class_2769;)Lnet/minecraft/class_2689$class_2690; method_11667 add - m (Lnet/minecraft/class_2769;)V method_11669 validateProperty - f Ljava/lang/Object; field_12318 owner - f Ljava/util/Map; field_12319 properties -c net/minecraft/class_2694 net/minecraft/util/CachedBlockInfo - m ()Lnet/minecraft/class_2338; method_11683 getPos - m ()Lnet/minecraft/class_2586; method_11680 getTileEntity - m (Ljava/util/function/Predicate;Lnet/minecraft/class_2694;)Z method_11682 func_201002_a - m (Ljava/util/function/Predicate;)Ljava/util/function/Predicate; method_11678 hasState - m ()Lnet/minecraft/class_2680; method_11681 getBlockState - m ()Lnet/minecraft/class_4538; method_11679 getWorld - f Z field_12328 tileEntityInitialized - f Lnet/minecraft/class_2338; field_12331 pos - f Lnet/minecraft/class_4538; field_12330 world - f Z field_12329 forceLoad - f Lnet/minecraft/class_2586; field_12327 tileEntity - f Lnet/minecraft/class_2680; field_12326 state -c net/minecraft/class_2697 net/minecraft/block/pattern/BlockPatternBuilder - m ()[[[Ljava/util/function/Predicate; method_11703 makePredicateArray - m ([Ljava/lang/String;)Lnet/minecraft/class_2697; method_11702 aisle - m ()Lnet/minecraft/class_2700; method_11704 build - m (CLjava/util/function/Predicate;)Lnet/minecraft/class_2697; method_11700 where - m ()V method_11705 checkMissingPredicates - m ()Lnet/minecraft/class_2697; method_11701 start - f I field_12341 rowWidth - f Lcom/google/common/base/Joiner; field_12340 COMMA_JOIN - f I field_12342 aisleHeight - f Ljava/util/Map; field_12343 symbolMap - f Ljava/util/List; field_12344 depth -c net/minecraft/class_2700 net/minecraft/block/pattern/BlockPattern - m (Lnet/minecraft/class_4538;Z)Lcom/google/common/cache/LoadingCache; method_11709 createLoadingCache - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2700$class_2702; method_11708 match - m ()I method_11713 getThumbLength - m ()I method_11712 getFingerLength - m ()I method_11710 getPalmLength - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;III)Lnet/minecraft/class_2338; method_11707 translateOffset - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Lcom/google/common/cache/LoadingCache;)Lnet/minecraft/class_2700$class_2702; method_11711 checkPatternAt - f I field_12356 thumbLength - f I field_12357 fingerLength - f I field_12355 palmLength - f [[[Ljava/util/function/Predicate; field_12358 blockMatches -c net/minecraft/class_2700$class_2702 net/minecraft/block/pattern/BlockPattern$PatternHelper - m ()Lnet/minecraft/class_2338; method_11715 getFrontTopLeft - m ()Lnet/minecraft/class_2350; method_11716 getUp - m ()Ljava/lang/String; toString toString - m ()Lnet/minecraft/class_2350; method_11719 getForwards - m (III)Lnet/minecraft/class_2694; method_11717 translateOffset - f I field_12363 width - f Lnet/minecraft/class_2350; field_12364 up - f I field_12362 height - f Lnet/minecraft/class_2350; field_12365 forwards - f I field_12361 depth - f Lcom/google/common/cache/LoadingCache; field_12366 lcache - f Lnet/minecraft/class_2338; field_12367 frontTopLeft -c net/minecraft/class_2700$class_2701 net/minecraft/block/pattern/BlockPattern$CacheLoader - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2694; method_11714 load - m (Ljava/lang/Object;)Ljava/lang/Object; load load - f Z field_12360 forceLoad - f Lnet/minecraft/class_4538; field_12359 world -c net/minecraft/class_2710 net/minecraft/block/pattern/BlockMaterialMatcher - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_3614;)Lnet/minecraft/class_2710; method_11746 forMaterial - m (Lnet/minecraft/class_2680;)Z method_11745 test - f Lnet/minecraft/class_3614; field_12405 material - f Lnet/minecraft/class_2710; field_12404 AIR_MATCHER -c net/minecraft/class_2710$1 net/minecraft/block/pattern/BlockMaterialMatcher$1 -c net/minecraft/class_2715 net/minecraft/block/pattern/BlockStateMatcher - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;Ljava/util/function/Predicate;)Z method_11761 matches - m (Lnet/minecraft/class_2680;)Z method_11759 func_201026_b - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2715; method_11758 forBlock - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_2769;Ljava/util/function/Predicate;)Lnet/minecraft/class_2715; method_11762 where - m (Lnet/minecraft/class_2680;)Z method_11760 test - f Ljava/util/Map; field_12421 propertyPredicates - f Ljava/util/function/Predicate; field_12419 ANY - f Lnet/minecraft/class_2689; field_12420 blockstate -c net/minecraft/class_2717 net/minecraft/block/pattern/BlockMatcher - m (Lnet/minecraft/class_2680;)Z method_11765 test - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2717; method_11766 forBlock - f Lnet/minecraft/class_2248; field_12423 block -c net/minecraft/class_2738 net/minecraft/state/properties/AttachFace - m ()[Lnet/minecraft/class_2738; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2738; valueOf valueOf - f [Lnet/minecraft/class_2738; field_12474 $VALUES - f Lnet/minecraft/class_2738; field_12471 WALL - f Lnet/minecraft/class_2738; field_12473 CEILING - f Lnet/minecraft/class_2738; field_12475 FLOOR - f Ljava/lang/String; field_12472 name -c net/minecraft/class_2742 net/minecraft/state/properties/BedPart - m ()Ljava/lang/String; toString toString - m ()[Lnet/minecraft/class_2742; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2742; valueOf valueOf - f Ljava/lang/String; field_12559 name - f [Lnet/minecraft/class_2742; field_12558 $VALUES - f Lnet/minecraft/class_2742; field_12557 FOOT - f Lnet/minecraft/class_2742; field_12560 HEAD -c net/minecraft/class_2737 net/minecraft/state/properties/BambooLeaves - m (Ljava/lang/String;)Lnet/minecraft/class_2737; valueOf valueOf - m ()Ljava/lang/String; toString toString - m ()[Lnet/minecraft/class_2737; values values - f Lnet/minecraft/class_2737; field_12469 NONE - f Ljava/lang/String; field_12467 name - f [Lnet/minecraft/class_2737; field_12470 $VALUES - f Lnet/minecraft/class_2737; field_12466 SMALL - f Lnet/minecraft/class_2737; field_12468 LARGE -c net/minecraft/class_2741 net/minecraft/state/properties/BlockStateProperties - m (Lnet/minecraft/class_2768;)Z method_11813 func_210409_a - m (Lnet/minecraft/class_2350;)Z method_11814 func_208125_a - f Lnet/minecraft/class_2746; field_16561 HANGING - f Lnet/minecraft/class_2758; field_12556 AGE_0_2 - f Lnet/minecraft/class_2746; field_12488 EYE - f Lnet/minecraft/class_2746; field_12500 HAS_BOTTLE_1 - f Lnet/minecraft/class_2746; field_12539 UNSTABLE - f Lnet/minecraft/class_2754; field_23333 ORIENTATION - f Lnet/minecraft/class_2758; field_12543 PICKLES_1_4 - f Lnet/minecraft/class_2754; field_12507 RAIL_SHAPE - f Lnet/minecraft/class_2754; field_12516 BAMBOO_LEAVES - f Lnet/minecraft/class_2746; field_12553 DISARMED - f Lnet/minecraft/class_2758; field_20432 HONEY_LEVEL - f Lnet/minecraft/class_2746; field_17394 SIGNAL_FIRE - f Lnet/minecraft/class_2754; field_12492 PISTON_TYPE - f Lnet/minecraft/class_2754; field_12496 AXIS - f Lnet/minecraft/class_2758; field_12510 MOISTURE_0_7 - f Lnet/minecraft/class_2754; field_12533 DOUBLE_BLOCK_HALF - f Lnet/minecraft/class_2754; field_12503 STAIRS_SHAPE - f Lnet/minecraft/class_2758; field_17586 LEVEL_0_8 - f Lnet/minecraft/class_2754; field_12520 DOOR_HINGE - f Lnet/minecraft/class_2746; field_12515 ENABLED - f Lnet/minecraft/class_2746; field_12489 NORTH - f Lnet/minecraft/class_2758; field_12536 LAYERS_1_8 - f Lnet/minecraft/class_2754; field_12506 CHEST_TYPE - f Lnet/minecraft/class_2754; field_12523 REDSTONE_EAST - f Lnet/minecraft/class_2746; field_12502 LOCKED - f Lnet/minecraft/class_2758; field_12494 DELAY_1_4 - f Lnet/minecraft/class_2746; field_16562 BOTTOM - f Lnet/minecraft/class_2758; field_23187 CHARGES - f Lnet/minecraft/class_2746; field_12484 POWERED - f Lnet/minecraft/class_2754; field_12551 REDSTONE_SOUTH - f Lnet/minecraft/class_2746; field_12537 OPEN - f Lnet/minecraft/class_2758; field_12509 EGGS_1_4 - f Lnet/minecraft/class_2746; field_12540 SOUTH - f Lnet/minecraft/class_2758; field_12517 AGE_0_25 - f Lnet/minecraft/class_2754; field_22174 WALL_HEIGHT_EAST - f Lnet/minecraft/class_2746; field_17393 HAS_BOOK - f Lnet/minecraft/class_2758; field_12549 STAGE_0_1 - f Lnet/minecraft/class_2754; field_12555 FACE - f Lnet/minecraft/class_2746; field_12531 HAS_BOTTLE_2 - f Lnet/minecraft/class_2753; field_12481 HORIZONTAL_FACING - f Lnet/minecraft/class_2746; field_12508 WATERLOGGED - f Lnet/minecraft/class_2754; field_22176 WALL_HEIGHT_SOUTH - f Lnet/minecraft/class_2746; field_12491 IN_WALL - f Lnet/minecraft/class_2746; field_12519 UP - f Lnet/minecraft/class_2758; field_12550 AGE_0_7 - f Lnet/minecraft/class_2758; field_12521 AGE_0_1 - f Lnet/minecraft/class_2746; field_12480 FALLING - f Lnet/minecraft/class_2758; field_12497 AGE_0_3 - f Lnet/minecraft/class_2753; field_12525 FACING - f Lnet/minecraft/class_2758; field_12524 NOTE_0_24 - f Lnet/minecraft/class_2754; field_12518 HALF - f Lnet/minecraft/class_2746; field_12522 TRIGGERED - f Lnet/minecraft/class_2754; field_12547 STRUCTURE_BLOCK_MODE - f Lnet/minecraft/class_2746; field_12554 HAS_BOTTLE_0 - f Lnet/minecraft/class_2758; field_12511 POWER_0_15 - f Lnet/minecraft/class_2754; field_12542 RAIL_SHAPE_STRAIGHT - f Lnet/minecraft/class_2746; field_12512 SNOWY - f Lnet/minecraft/class_2758; field_12538 LEVEL_0_15 - f Lnet/minecraft/class_2746; field_12535 SHORT - f Lnet/minecraft/class_2754; field_12485 SLAB_TYPE - f Lnet/minecraft/class_2746; field_12486 CONDITIONAL - f Lnet/minecraft/class_2754; field_12534 COMPARATOR_MODE - f Lnet/minecraft/class_2746; field_12552 EXTENDED - f Lnet/minecraft/class_2746; field_12526 DRAG - f Lnet/minecraft/class_2758; field_12490 LEVEL_1_8 - f Lnet/minecraft/class_2754; field_12499 NOTE_BLOCK_INSTRUMENT - f Lnet/minecraft/class_2746; field_12528 OCCUPIED - f Lnet/minecraft/class_2758; field_12530 HATCH_0_2 - f Lnet/minecraft/class_2754; field_12483 BED_PART - f Lnet/minecraft/class_2746; field_12487 EAST - f Lnet/minecraft/class_2754; field_12495 REDSTONE_NORTH - f Lnet/minecraft/class_2746; field_12546 DOWN - f Lnet/minecraft/class_2754; field_22177 WALL_HEIGHT_WEST - f Lnet/minecraft/class_2758; field_12513 LEVEL_0_3 - f Lnet/minecraft/class_2746; field_12527 WEST - f Lnet/minecraft/class_2754; field_12529 HORIZONTAL_AXIS - f Lnet/minecraft/class_2746; field_12493 ATTACHED - f Lnet/minecraft/class_2754; field_12504 REDSTONE_WEST - f Lnet/minecraft/class_2758; field_12541 DISTANCE_1_7 - f Lnet/minecraft/class_2758; field_12532 ROTATION_0_15 - f Lnet/minecraft/class_2746; field_12514 PERSISTENT - f Lnet/minecraft/class_2746; field_23084 field_235906_D_ - f Lnet/minecraft/class_2754; field_17104 BELL_ATTACHMENT - f Lnet/minecraft/class_2758; field_12505 BITES_0_6 - f Lnet/minecraft/class_2753; field_12545 FACING_EXCEPT_UP - f Lnet/minecraft/class_2746; field_12544 HAS_RECORD - f Lnet/minecraft/class_2758; field_16503 DISTANCE_0_7 - f Lnet/minecraft/class_2758; field_12482 AGE_0_5 - f Lnet/minecraft/class_2746; field_12548 LIT - f Lnet/minecraft/class_2746; field_12501 INVERTED - f Lnet/minecraft/class_2758; field_12498 AGE_0_15 - f Lnet/minecraft/class_2754; field_22175 WALL_HEIGHT_NORTH -c net/minecraft/class_3867 net/minecraft/state/properties/BellAttachment - m (Ljava/lang/String;)Lnet/minecraft/class_3867; valueOf valueOf - m ()[Lnet/minecraft/class_3867; values values - f Lnet/minecraft/class_3867; field_17098 FLOOR - f Ljava/lang/String; field_17102 name - f [Lnet/minecraft/class_3867; field_17103 $VALUES - f Lnet/minecraft/class_3867; field_17101 DOUBLE_WALL - f Lnet/minecraft/class_3867; field_17099 CEILING - f Lnet/minecraft/class_3867; field_17100 SINGLE_WALL -c net/minecraft/class_2745 net/minecraft/state/properties/ChestType - m ()[Lnet/minecraft/class_2745; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2745; valueOf valueOf - m ()Lnet/minecraft/class_2745; method_11824 opposite - f Ljava/lang/String; field_12572 name - f [Lnet/minecraft/class_2745; field_12570 VALUES - f Lnet/minecraft/class_2745; field_12574 LEFT - f Lnet/minecraft/class_2745; field_12571 RIGHT - f Lnet/minecraft/class_2745; field_12569 SINGLE - f [Lnet/minecraft/class_2745; field_12573 $VALUES - f I field_12568 opposite -c net/minecraft/class_2746 net/minecraft/state/BooleanProperty - m (Ljava/lang/Boolean;)Ljava/lang/String; method_11826 getName - m (Ljava/lang/String;)Lnet/minecraft/class_2746; method_11825 create - f Lcom/google/common/collect/ImmutableSet; field_12575 allowedValues -c net/minecraft/class_2753 net/minecraft/state/DirectionProperty - m (Ljava/lang/String;Ljava/util/Collection;)Lnet/minecraft/class_2753; method_11843 create - m (Ljava/lang/String;[Lnet/minecraft/class_2350;)Lnet/minecraft/class_2753; method_11845 create - m (Ljava/lang/String;Ljava/util/function/Predicate;)Lnet/minecraft/class_2753; method_11844 create -c net/minecraft/class_2747 net/minecraft/state/properties/ComparatorMode - m (Ljava/lang/String;)Lnet/minecraft/class_2747; valueOf valueOf - m ()Ljava/lang/String; toString toString - m ()[Lnet/minecraft/class_2747; values values - f Lnet/minecraft/class_2747; field_12576 COMPARE - f Ljava/lang/String; field_12577 name - f [Lnet/minecraft/class_2747; field_12579 $VALUES - f Lnet/minecraft/class_2747; field_12578 SUBTRACT -c net/minecraft/class_2750 net/minecraft/state/properties/DoorHingeSide - m (Ljava/lang/String;)Lnet/minecraft/class_2750; valueOf valueOf - m ()Ljava/lang/String; toString toString - m ()[Lnet/minecraft/class_2750; values values - f Lnet/minecraft/class_2750; field_12588 LEFT - f Lnet/minecraft/class_2750; field_12586 RIGHT - f [Lnet/minecraft/class_2750; field_12587 $VALUES -c net/minecraft/class_2754 net/minecraft/state/EnumProperty - m (Ljava/lang/Enum;)Ljava/lang/String; method_11846 getName - m (Ljava/lang/String;Ljava/lang/Class;Ljava/util/function/Predicate;)Lnet/minecraft/class_2754; method_11848 create - m (Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Enum;)Lnet/minecraft/class_2754; method_11849 create - m (Ljava/lang/String;Ljava/lang/Class;Ljava/util/Collection;)Lnet/minecraft/class_2754; method_11847 create - m (Ljava/lang/String;Ljava/lang/Class;)Lnet/minecraft/class_2754; method_11850 create - f Ljava/util/Map; field_12596 nameToValue - f Lcom/google/common/collect/ImmutableSet; field_12595 allowedValues -c net/minecraft/class_2756 net/minecraft/state/properties/DoubleBlockHalf - m (Ljava/lang/String;)Lnet/minecraft/class_2756; valueOf valueOf - m ()[Lnet/minecraft/class_2756; values values - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2756; field_12609 UPPER - f Lnet/minecraft/class_2756; field_12607 LOWER - f [Lnet/minecraft/class_2756; field_12608 $VALUES -c net/minecraft/class_2758 net/minecraft/state/IntegerProperty - m (Ljava/lang/String;II)Lnet/minecraft/class_2758; method_11867 create - m (Ljava/lang/Integer;)Ljava/lang/String; method_11868 getName - f Lcom/google/common/collect/ImmutableSet; field_12614 allowedValues -c net/minecraft/class_2760 net/minecraft/state/properties/Half - m (Ljava/lang/String;)Lnet/minecraft/class_2760; valueOf valueOf - m ()Ljava/lang/String; toString toString - m ()[Lnet/minecraft/class_2760; values values - f Lnet/minecraft/class_2760; field_12619 TOP - f Ljava/lang/String; field_12616 name - f [Lnet/minecraft/class_2760; field_12618 $VALUES - f Lnet/minecraft/class_2760; field_12617 BOTTOM -c net/minecraft/class_4581 net/minecraft/util/math/vector/Matrix3f - m ()Ljava/lang/String; toString toString - m ()V method_22847 transpose - m ()V method_22856 setIdentity - m ()Lorg/apache/commons/lang3/tuple/Triple; method_22853 svdDecompose - m ()F method_23731 adjugateAndDet - m ()Lnet/minecraft/class_4581; method_23296 copy - m (Lnet/minecraft/class_4581;)Lnet/minecraft/class_1158; method_22857 stepJacobi - m (Lnet/minecraft/class_1158;)V method_23274 mul - m ()Z method_23732 invert - m (FFF)Lnet/minecraft/class_4581; method_23963 makeScaleMatrix - m (FF)Lcom/mojang/datafixers/util/Pair; method_22848 qrGivensQuat - m (Lnet/minecraft/class_4581;)V method_22855 mul - m (FFF)Lcom/mojang/datafixers/util/Pair; method_22849 approxGivensQuat - m (Ljava/lang/Object;)Z equals equals - m (IIF)V method_26288 func_232605_a_ - m (Lnet/minecraft/class_4581;)V method_22852 set - m ()I hashCode hashCode - m (F)V method_23729 mul - f F field_20861 CS - f F field_20860 G - f F field_20862 SS - f F field_21640 m21 - f F field_21641 m22 - f F field_20863 SQ2 - f F field_21633 m00 - f F field_21637 m11 - f F field_21639 m20 - f F field_21638 m12 - f F field_21635 m02 - f F field_21634 m01 - f F field_21636 m10 -c net/minecraft/class_2764 net/minecraft/state/properties/PistonType - m ()[Lnet/minecraft/class_2764; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2764; valueOf valueOf - m ()Ljava/lang/String; toString toString - f [Lnet/minecraft/class_2764; field_12636 $VALUES - f Lnet/minecraft/class_2764; field_12634 STICKY - f Lnet/minecraft/class_2764; field_12637 DEFAULT - f Ljava/lang/String; field_12635 name -c net/minecraft/class_1159 net/minecraft/util/math/vector/Matrix4f - m (Lnet/minecraft/class_1159;)V method_22672 mul - m (Lnet/minecraft/class_1158;)V method_22670 mul - m ()F method_22868 adjugateAndDet - m ()V method_22871 transpose - m ()Z method_22870 invert - m (Ljava/nio/FloatBuffer;)V method_4932 write - m ()V method_22668 setIdentity - m (FFF)Lnet/minecraft/class_1159; method_24021 makeTranslate - m ()Lnet/minecraft/class_1159; method_22673 copy - m (II)I method_24020 bufferIndex - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_1160;)V method_22671 translate - m (F)V method_22866 mul - m (FFFF)Lnet/minecraft/class_1159; method_4933 orthographic - m ()Ljava/lang/String; toString toString - m (DFFF)Lnet/minecraft/class_1159; method_4929 perspective - m (FFF)Lnet/minecraft/class_1159; method_24019 makeScale - f F field_21659 m13 - f F field_21658 m12 - f F field_21660 m20 - f F field_21656 m10 - f F field_21657 m11 - f F field_21664 m30 - f F field_21665 m31 - f F field_21661 m21 - f F field_21663 m23 - f F field_21662 m22 - f F field_21667 m33 - f F field_21666 m32 - f F field_21653 m01 - f F field_21655 m03 - f F field_21654 m02 - f F field_21652 m00 -c net/minecraft/class_2766 net/minecraft/state/properties/NoteBlockInstrument - m (Ljava/lang/String;)Lnet/minecraft/class_2766; valueOf valueOf - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2766; method_11887 byState - m ()Lnet/minecraft/class_3414; method_11886 getSound - m ()[Lnet/minecraft/class_2766; values values - f Lnet/minecraft/class_2766; field_18285 COW_BELL - f Lnet/minecraft/class_2766; field_12648 HARP - f Lnet/minecraft/class_2766; field_18284 IRON_XYLOPHONE - f Lnet/minecraft/class_2766; field_12655 XYLOPHONE - f Lnet/minecraft/class_2766; field_12645 HAT - f Lnet/minecraft/class_2766; field_18288 BANJO - f Lnet/minecraft/class_3414; field_12649 sound - f Lnet/minecraft/class_2766; field_18287 BIT - f Lnet/minecraft/class_2766; field_12643 SNARE - f Lnet/minecraft/class_2766; field_12653 BASEDRUM - f [Lnet/minecraft/class_2766; field_12652 $VALUES - f Lnet/minecraft/class_2766; field_18286 DIDGERIDOO - f Lnet/minecraft/class_2766; field_12644 BELL - f Lnet/minecraft/class_2766; field_12650 FLUTE - f Lnet/minecraft/class_2766; field_18289 PLING - f Lnet/minecraft/class_2766; field_12651 BASS - f Lnet/minecraft/class_2766; field_12647 CHIME - f Lnet/minecraft/class_2766; field_12654 GUITAR - f Ljava/lang/String; field_12646 name -c net/minecraft/class_4990 net/minecraft/util/math/vector/Orientation - m (Lnet/minecraft/class_4990;)Lcom/mojang/datafixers/util/Pair; method_26394 func_235536_d_ - m ()[Lnet/minecraft/class_4990; values values - m (Lnet/minecraft/class_4990;)Lnet/minecraft/class_4990; method_26393 func_235535_c_ - m (Ljava/lang/String;)Lnet/minecraft/class_4990; valueOf valueOf - m (Lnet/minecraft/class_4990;)Lnet/minecraft/class_4990; method_26385 func_235527_a_ - m (Lnet/minecraft/class_5000;)Lnet/minecraft/class_5000; method_26389 func_235531_a_ - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_26388 func_235530_a_ - m (Lnet/minecraft/class_4990;Lnet/minecraft/class_4990;)Z method_26386 func_235528_a_ - m ()Lit/unimi/dsi/fastutil/booleans/BooleanList; method_26391 func_235533_b_ - m (Lnet/minecraft/class_2350$class_2351;)Z method_26387 isOnAxis - m (Lnet/minecraft/class_4990;)Lnet/minecraft/class_4990; method_26392 func_235534_b_ - m ([Lnet/minecraft/class_4990;)V method_26390 func_235532_a_ - m ()Ljava/lang/String; toString toString - m (I)[Lnet/minecraft/class_4990; method_26384 func_235526_a_ - f Lnet/minecraft/class_4990; field_23303 ROT_120_NNP - f Lnet/minecraft/class_4990; field_23282 ROT_90_REF_X_NEG - f Lnet/minecraft/class_4990; field_23322 INVERSION - f Lnet/minecraft/class_4990; field_23301 ROT_180_FACE_YZ - f Lnet/minecraft/class_4990; field_23280 SWAP_NEG_YZ - f Lnet/minecraft/class_4990; field_23299 ROT_180_FACE_XY - f Lnet/minecraft/class_4990; field_23278 SWAP_XZ - f Lnet/minecraft/class_4990; field_23309 ROT_120_PPP - f Lnet/minecraft/class_4990; field_23307 ROT_120_PNP - f Lnet/minecraft/class_4990; field_23286 ROT_90_REF_Z_NEG - f [[Lnet/minecraft/class_4990; field_23296 field_235524_ad_ - f Lnet/minecraft/class_4990; field_23305 ROT_120_NPP - f Z field_23293 field_235521_aa_ - f Lnet/minecraft/class_4990; field_23284 ROT_90_REF_Y_NEG - f Lnet/minecraft/class_4990; field_23271 ROT_60_REF_NPP - f Lnet/minecraft/class_4990; field_23313 ROT_180_EDGE_XZ_POS - f Lnet/minecraft/class_4990; field_23311 ROT_180_EDGE_XY_POS - f Lnet/minecraft/class_4990; field_23269 ROT_60_REF_NNP - f Lnet/minecraft/class_4990; field_23267 INVERT_Z - f Ljava/lang/String; field_23289 field_235518_X_ - f Lnet/minecraft/class_4990; field_23319 ROT_90_Y_POS - f Lnet/minecraft/class_4990; field_23292 IDENTITY - f [Lnet/minecraft/class_4990; field_23297 field_235525_ae_ - f Lnet/minecraft/class_4990; field_23277 SWAP_YZ - f Lnet/minecraft/class_4990; field_23275 ROT_60_REF_PPP - f Z field_23291 field_235520_Z_ - f Lnet/minecraft/class_4990; field_23317 ROT_90_X_POS - f Lnet/minecraft/class_4990; field_23315 ROT_180_EDGE_YZ_POS - f Lnet/minecraft/class_4990; field_23273 ROT_60_REF_PNP - f Lnet/minecraft/class_4990; field_23304 ROT_120_NPN - f Lnet/minecraft/class_4990; field_23323 INVERT_X - f Lnet/minecraft/class_4990; field_23302 ROT_120_NNN - f Lnet/minecraft/class_4990; field_23281 SWAP_NEG_XZ - f Lnet/minecraft/class_4990; field_23279 SWAP_NEG_XY - f Lnet/minecraft/class_4990; field_23321 ROT_90_Z_POS - f Lnet/minecraft/class_4990; field_23300 ROT_180_FACE_XZ - f Lnet/minecraft/class_4990; field_23287 ROT_90_REF_Z_POS - f Lnet/minecraft/class_4990; field_23266 INVERT_Y - f Lnet/minecraft/class_4990; field_23308 ROT_120_PPN - f Lnet/minecraft/class_4990; field_23306 ROT_120_PNN - f Lnet/minecraft/class_4990; field_23285 ROT_90_REF_Y_POS - f Lnet/minecraft/class_4990; field_23283 ROT_90_REF_X_POS - f Z field_23294 field_235522_ab_ - f Ljava/util/Map; field_23290 field_235519_Y_ - f Lnet/minecraft/class_4990; field_23314 ROT_180_EDGE_YZ_NEG - f Lnet/minecraft/class_4990; field_23272 ROT_60_REF_PNN - f Lnet/minecraft/class_4990; field_23270 ROT_60_REF_NPN - f Lnet/minecraft/class_4990; field_23312 ROT_180_EDGE_XZ_NEG - f Lnet/minecraft/class_4990; field_23310 ROT_180_EDGE_XY_NEG - f Lnet/minecraft/class_4581; field_23288 field_235517_W_ - f Lnet/minecraft/class_4990; field_23268 ROT_60_REF_NNN - f Lnet/minecraft/class_4998; field_23295 field_235523_ac_ - f Lnet/minecraft/class_4990; field_23320 ROT_90_Z_NEG - f Lnet/minecraft/class_4990; field_23318 ROT_90_Y_NEG - f [Lnet/minecraft/class_4990; field_23298 $VALUES - f Lnet/minecraft/class_4990; field_23276 SWAP_XY - f Lnet/minecraft/class_4990; field_23274 ROT_60_REF_PPN - f Lnet/minecraft/class_4990; field_23316 ROT_90_X_NEG -c net/minecraft/class_4990$1 net/minecraft/util/math/vector/Orientation$1 - f [I field_23324 field_235537_a_ -c net/minecraft/class_1158 net/minecraft/util/math/vector/Quaternion - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/String; toString toString - m (F)F method_16003 cos - m (F)F method_16002 sin - m ()Lnet/minecraft/class_1158; method_23695 copy - m ()F method_4923 getZ - m (FFFF)V method_23758 set - m ()F method_4924 getW - m ()V method_22873 normalize - m ()I hashCode hashCode - m ()V method_4926 conjugate - m (F)V method_22872 multiply - m ()F method_4922 getY - m (Lnet/minecraft/class_1158;)V method_4925 multiply - m ()F method_4921 getX - f F field_21582 x - f F field_21583 y - f Lnet/minecraft/class_1158; field_21493 ONE - f F field_21584 z - f F field_21585 w -c net/minecraft/class_2768 net/minecraft/state/properties/RailShape - m (Ljava/lang/String;)Lnet/minecraft/class_2768; valueOf valueOf - m ()Ljava/lang/String; toString toString - m ()Z method_11897 isAscending - m ()[Lnet/minecraft/class_2768; values values - f Lnet/minecraft/class_2768; field_12666 ASCENDING_WEST - f Lnet/minecraft/class_2768; field_12667 ASCENDING_EAST - f Ljava/lang/String; field_12669 name - f Lnet/minecraft/class_2768; field_12674 EAST_WEST - f Lnet/minecraft/class_2768; field_12664 SOUTH_EAST - f Lnet/minecraft/class_2768; field_12668 ASCENDING_SOUTH - f [Lnet/minecraft/class_2768; field_12673 $VALUES - f Lnet/minecraft/class_2768; field_12670 ASCENDING_NORTH - f Lnet/minecraft/class_2768; field_12672 NORTH_WEST - f Lnet/minecraft/class_2768; field_12671 SOUTH_WEST - f Lnet/minecraft/class_2768; field_12665 NORTH_SOUTH - f Lnet/minecraft/class_2768; field_12663 NORTH_EAST -c net/minecraft/class_4998 net/minecraft/util/TriplePermutation - m (Ljava/lang/String;)Lnet/minecraft/class_4998; valueOf valueOf - m (Lnet/minecraft/class_4998;)Lnet/minecraft/class_4998; method_26418 func_239188_a_ - m ([Lnet/minecraft/class_4998;)V method_26420 func_239190_a_ - m ()[Lnet/minecraft/class_4998; values values - m ()Lnet/minecraft/class_4581; method_26416 func_239186_a_ - m ([ILnet/minecraft/class_4998;)Z method_26419 func_239189_a_ - m (I)I method_26417 func_239187_a_ - f [I field_23368 field_239183_g_ - f Lnet/minecraft/class_4998; field_23362 P123 - f Lnet/minecraft/class_4581; field_23369 field_239184_h_ - f Lnet/minecraft/class_4998; field_23367 P321 - f Lnet/minecraft/class_4998; field_23366 P312 - f Lnet/minecraft/class_4998; field_23365 P231 - f [Lnet/minecraft/class_4998; field_23371 $VALUES - f Lnet/minecraft/class_4998; field_23363 P213 - f [[Lnet/minecraft/class_4998; field_23370 field_239185_i_ - f Lnet/minecraft/class_4998; field_23364 P132 -c net/minecraft/class_2769 net/minecraft/state/Property - m (Ljava/lang/Comparable;)Lnet/minecraft/class_2769$class_4933; method_30042 func_241490_b_ - m ()I method_11799 computeHashCode - m ()I hashCode hashCode - m (Ljava/lang/String;)Lcom/mojang/serialization/DataResult; method_28505 func_235920_c_ - m ()Lcom/mojang/serialization/Codec; method_30044 func_241492_e_ - m (Ljava/lang/String;)Lcom/mojang/serialization/DataResult; method_28504 func_235919_a_ - m (Ljava/lang/Comparable;)Ljava/lang/String; method_11901 getName - m ()Ljava/util/Collection; method_11898 getAllowedValues - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/String; method_11899 getName - m ()Ljava/lang/Class; method_11902 getValueClass - m ()Ljava/lang/String; toString toString - m ()Ljava/util/stream/Stream; method_30043 func_241491_c_ - m (Ljava/lang/String;)Ljava/util/Optional; method_11900 parseValue - m (Lnet/minecraft/class_2688;)Lnet/minecraft/class_2769$class_4933; method_30041 func_241489_a_ - f Ljava/lang/Integer; field_24744 field_235915_c_ - f Ljava/lang/Class; field_24742 field_235913_a_ - f Lcom/mojang/serialization/Codec; field_25670 field_241488_e_ - f Ljava/lang/String; field_24743 field_235914_b_ - f Lcom/mojang/serialization/Codec; field_24745 field_235916_d_ -c net/minecraft/class_2769$class_4933 net/minecraft/state/Property$ValuePair - m ()Ljava/lang/String; toString toString - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/Comparable; method_30045 func_241493_b_ - m ()Lnet/minecraft/class_2769; method_25815 func_240181_a_ - f Ljava/lang/Comparable; field_22880 field_240180_b_ - f Lnet/minecraft/class_2769; field_22879 field_240179_a_ -c net/minecraft/class_2769$1 net/minecraft/state/Property$1 -c net/minecraft/class_4590 net/minecraft/util/math/vector/TransformationMatrix - m ()Lnet/minecraft/class_1158; method_22937 getRotationLeft - m (Lnet/minecraft/class_1159;)Lcom/mojang/datafixers/util/Pair; method_22932 affine - m (Lnet/minecraft/class_4590;)Lnet/minecraft/class_4590; method_22933 composeVanilla - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1158;Lnet/minecraft/class_1160;Lnet/minecraft/class_1158;)Lnet/minecraft/class_1159; method_22934 composeVanilla - m ()Lnet/minecraft/class_1159; method_22936 getMatrix - m ()I hashCode hashCode - m ()Lnet/minecraft/class_4590; method_22935 inverseVanilla - m ()V method_22938 decompose - m ()Lnet/minecraft/class_4590; method_22931 identity - m (Ljava/lang/Object;)Z equals equals - m ()Lnet/minecraft/class_4590; method_22939 func_227991_f_ - f Lnet/minecraft/class_1158; field_20905 rotationRight - f Lnet/minecraft/class_4590; field_20906 IDENTITY - f Lnet/minecraft/class_1160; field_20904 scale - f Lnet/minecraft/class_1158; field_20903 rotationLeft - f Lnet/minecraft/class_1159; field_20900 matrix - f Lnet/minecraft/class_1160; field_20902 translation - f Z field_20901 decomposed -c net/minecraft/class_2771 net/minecraft/state/properties/SlabType - m ()[Lnet/minecraft/class_2771; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2771; valueOf valueOf - m ()Ljava/lang/String; toString toString - f [Lnet/minecraft/class_2771; field_12680 $VALUES - f Ljava/lang/String; field_12678 name - f Lnet/minecraft/class_2771; field_12682 DOUBLE - f Lnet/minecraft/class_2771; field_12681 BOTTOM - f Lnet/minecraft/class_2771; field_12679 TOP -c net/minecraft/class_1160 net/minecraft/util/math/vector/Vector3f - m (FFF)V method_4948 add - m (Lnet/minecraft/class_1160;)V method_23846 add - m (Lnet/minecraft/class_1160;)V method_4944 sub - m ()Z method_4952 normalize - m ()Ljava/lang/String; toString toString - m (Lit/unimi/dsi/fastutil/floats/Float2FloatFunction;)V method_23848 apply - m (Lnet/minecraft/class_1160;)F method_4950 dot - m (FFF)V method_4949 set - m (Lnet/minecraft/class_1158;)V method_19262 transform - m (FFF)V method_23849 mul - m ()F method_4943 getX - m (F)V method_4942 mul - m (Lnet/minecraft/class_1160;F)V method_23847 lerp - m (FF)V method_4946 clamp - m (Lnet/minecraft/class_4581;)V method_23215 transform - m (F)Lnet/minecraft/class_1158; method_23626 rotation - m (F)Lnet/minecraft/class_1158; method_23214 rotationDegrees - m (Ljava/lang/Object;)Z equals equals - m ()Lnet/minecraft/class_1160; method_23850 copy - m ()F method_4945 getY - m (Lnet/minecraft/class_1160;)V method_4951 cross - m ()F method_4947 getZ - m ()I hashCode hashCode - f Lnet/minecraft/class_1160; field_20702 XN - f Lnet/minecraft/class_1160; field_20707 ZP - f Lnet/minecraft/class_1160; field_20706 ZN - f Lnet/minecraft/class_1160; field_20705 YP - f Lnet/minecraft/class_1160; field_20703 XP - f Lnet/minecraft/class_1160; field_20704 YN - f F field_21485 z - f F field_21484 y - f F field_21483 x -c net/minecraft/class_2773 net/minecraft/state/properties/RedstoneSide - m ()Z method_27855 func_235921_b_ - m ()Ljava/lang/String; toString toString - m ()[Lnet/minecraft/class_2773; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2773; valueOf valueOf - f Ljava/lang/String; field_12685 name - f Lnet/minecraft/class_2773; field_12686 UP - f [Lnet/minecraft/class_2773; field_12688 $VALUES - f Lnet/minecraft/class_2773; field_12687 NONE - f Lnet/minecraft/class_2773; field_12689 SIDE -c net/minecraft/class_1162 net/minecraft/util/math/vector/Vector4f - m ()Ljava/lang/String; toString toString - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_1159;)V method_22674 transform - m ()F method_23853 getW - m ()F method_4956 getY - m (Lnet/minecraft/class_1158;)V method_23852 transform - m ()Z method_23218 normalize - m ()F method_4953 getX - m ()F method_4957 getZ - m ()I hashCode hashCode - m (Lnet/minecraft/class_1162;)F method_23217 dot - m (Lnet/minecraft/class_1160;)V method_4954 scale - m ()V method_23219 perspectiveDivide - m (FFFF)V method_23851 set - f F field_21487 y - f F field_21486 x - f F field_21488 z - f F field_21489 w -c net/minecraft/class_2776 net/minecraft/state/properties/StructureMode - m ()Lnet/minecraft/class_2561; method_30844 func_242703_b - m (Ljava/lang/String;)Lnet/minecraft/class_2776; valueOf valueOf - m ()[Lnet/minecraft/class_2776; values values - f Ljava/lang/String; field_12698 name - f Lnet/minecraft/class_2776; field_12696 DATA - f Lnet/minecraft/class_2561; field_26444 field_242702_f - f Lnet/minecraft/class_2776; field_12699 CORNER - f Lnet/minecraft/class_2776; field_12697 LOAD - f [Lnet/minecraft/class_2776; field_12700 $VALUES - f Lnet/minecraft/class_2776; field_12695 SAVE -c net/minecraft/class_5459 net/minecraft/util/TeleportationRepositioner - m ([I)Lcom/mojang/datafixers/util/Pair; method_30576 largestRectInHeights - m (Ljava/util/function/Predicate;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2350;I)I method_30575 distanceInDirection - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350$class_2351;ILnet/minecraft/class_2350$class_2351;ILjava/util/function/Predicate;)Lnet/minecraft/class_5459$class_5460; method_30574 findLargestRectangle -c net/minecraft/class_5459$class_5461 net/minecraft/util/TeleportationRepositioner$IntBounds - m ()Ljava/lang/String; toString toString - f I field_25939 min - f I field_25940 max -c net/minecraft/class_5459$class_5460 net/minecraft/util/TeleportationRepositioner$Result - f I field_25938 height - f I field_25937 width - f Lnet/minecraft/class_2338; field_25936 startPos -c net/minecraft/class_2778 net/minecraft/state/properties/StairsShape - m ()Ljava/lang/String; toString toString - m ()[Lnet/minecraft/class_2778; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2778; valueOf valueOf - f [Lnet/minecraft/class_2778; field_12711 $VALUES - f Lnet/minecraft/class_2778; field_12710 STRAIGHT - f Lnet/minecraft/class_2778; field_12709 OUTER_RIGHT - f Lnet/minecraft/class_2778; field_12708 OUTER_LEFT - f Ljava/lang/String; field_12714 name - f Lnet/minecraft/class_2778; field_12713 INNER_RIGHT - f Lnet/minecraft/class_2778; field_12712 INNER_LEFT -c net/minecraft/class_5462 net/minecraft/client/util/ICharacterPredicate - m (C)Z test test -c net/minecraft/class_4719 net/minecraft/block/WoodType - m (Lnet/minecraft/class_4719;)Lnet/minecraft/class_4719; method_24027 register - m ()Ljava/util/stream/Stream; method_24026 getValues - m ()Ljava/lang/String; method_24028 getName - f Lnet/minecraft/class_4719; field_21679 ACACIA - f Ljava/lang/String; field_21683 name - f Lnet/minecraft/class_4719; field_21678 BIRCH - f Lnet/minecraft/class_4719; field_22184 WARPED - f Lnet/minecraft/class_4719; field_21677 SPRUCE - f Lnet/minecraft/class_4719; field_22183 CRIMSON - f Ljava/util/Set; field_21682 VALUES - f Lnet/minecraft/class_4719; field_21676 OAK - f Lnet/minecraft/class_4719; field_21681 DARK_OAK - f Lnet/minecraft/class_4719; field_21680 JUNGLE -c net/minecraft/class_124 net/minecraft/util/text/TextFormatting - m (Lnet/minecraft/class_124;)Lnet/minecraft/class_124; method_541 func_199747_a - m ()I method_536 getColorIndex - m ()Ljava/lang/Integer; method_532 getColor - m ()[Lnet/minecraft/class_124; values values - m ()Z method_542 isFancyStyling - m (C)Lnet/minecraft/class_124; method_544 fromFormattingCode - m (Ljava/lang/String;)Ljava/lang/String; method_535 lowercaseAlpha - m ()Ljava/lang/String; toString toString - m ()Ljava/lang/String; method_537 getFriendlyName - m (Ljava/lang/String;)Lnet/minecraft/class_124; valueOf valueOf - m (I)Lnet/minecraft/class_124; method_534 fromColorIndex - m (ZZ)Ljava/util/Collection; method_540 getValidValues - m (Ljava/lang/String;)Ljava/lang/String; method_539 getTextWithoutFormattingCodes - m ()Z method_543 isColor - m (Lnet/minecraft/class_124;)Ljava/lang/String; method_531 func_199746_b - m (Ljava/lang/String;)Lnet/minecraft/class_124; method_533 getValueByName - f Lnet/minecraft/class_124; field_1064 DARK_PURPLE - f Lnet/minecraft/class_124; field_1065 GOLD - f C field_1059 formattingCode - f Lnet/minecraft/class_124; field_1079 DARK_RED - f Lnet/minecraft/class_124; field_1062 DARK_AQUA - f Lnet/minecraft/class_124; field_1058 DARK_BLUE - f Lnet/minecraft/class_124; field_1077 DARK_GREEN - f Lnet/minecraft/class_124; field_1075 AQUA - f Ljava/lang/String; field_1057 name - f Lnet/minecraft/class_124; field_1078 BLUE - f Lnet/minecraft/class_124; field_1060 GREEN - f Lnet/minecraft/class_124; field_1063 DARK_GRAY - f [Lnet/minecraft/class_124; field_1072 $VALUES - f Lnet/minecraft/class_124; field_1080 GRAY - f Lnet/minecraft/class_124; field_1051 OBFUSCATED - f Lnet/minecraft/class_124; field_1068 WHITE - f Lnet/minecraft/class_124; field_1076 LIGHT_PURPLE - f Ljava/lang/String; field_1069 controlString - f Lnet/minecraft/class_124; field_1054 YELLOW - f Lnet/minecraft/class_124; field_1061 RED - f Ljava/lang/Integer; field_1053 color - f Lnet/minecraft/class_124; field_1074 BLACK - f Z field_1081 fancyStyling - f Lnet/minecraft/class_124; field_1070 RESET - f Lnet/minecraft/class_124; field_1056 ITALIC - f Ljava/util/regex/Pattern; field_1066 FORMATTING_CODE_PATTERN - f Lnet/minecraft/class_124; field_1073 UNDERLINE - f I field_1071 colorIndex - f Ljava/util/Map; field_1052 NAME_MAPPING - f Lnet/minecraft/class_124; field_1067 BOLD - f Lnet/minecraft/class_124; field_1055 STRIKETHROUGH -c net/minecraft/class_4778 net/minecraft/block/WallHeight - m ()[Lnet/minecraft/class_4778; values values - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;)Lnet/minecraft/class_4778; valueOf valueOf - f Lnet/minecraft/class_4778; field_22178 NONE - f [Lnet/minecraft/class_4778; field_22182 $VALUES - f Lnet/minecraft/class_4778; field_22180 TALL - f Ljava/lang/String; field_22181 heightName - f Lnet/minecraft/class_4778; field_22179 LOW -c net/minecraft/class_128 net/minecraft/crash/CrashReport - m ()Ljava/lang/String; method_566 func_210205_m - m ()Ljava/lang/String; method_21685 func_210204_n - m (Ljava/lang/StringBuilder;)V method_555 getSectionsInStringBuilder - m ()V method_559 populateEnvironment - m ()Ljava/lang/Throwable; method_564 getCrashCause - m ()Ljava/lang/String; method_563 func_210203_j - m ()Ljava/lang/String; method_558 func_210202_k - m ()V method_24305 crash - m ()Ljava/lang/String; method_570 func_210201_l - m ()Ljava/lang/String; method_571 func_210206_o - m ()Ljava/lang/String; method_557 getCauseStackTraceOrString - m ()Ljava/lang/String; method_568 getCompleteReport - m (Ljava/lang/Throwable;Ljava/lang/String;)Lnet/minecraft/class_128; method_560 makeCrashReport - m ()Ljava/lang/String; method_561 getDescription - m ()Ljava/io/File; method_572 getFile - m ()Lnet/minecraft/class_129; method_567 getCategory - m ()Ljava/lang/String; method_573 getWittyComment - m (Ljava/lang/String;)Lnet/minecraft/class_129; method_562 makeCategory - m (Ljava/io/File;)Z method_569 saveToFile - m ()Ljava/lang/String; method_565 func_224735_j - m (Ljava/lang/String;I)Lnet/minecraft/class_129; method_556 makeCategoryDepth - f Lnet/minecraft/class_129; field_1092 systemDetailsCategory - f Ljava/util/List; field_1089 crashReportSections - f Ljava/lang/Throwable; field_1093 cause - f [Ljava/lang/StackTraceElement; field_1088 stacktrace - f Ljava/lang/String; field_1087 description - f Ljava/io/File; field_1090 crashReportFile - f Lorg/apache/logging/log4j/Logger; field_1091 LOGGER - f Z field_1086 firstCategoryInCrashReport -c net/minecraft/class_2780 net/minecraft/world/border/IBorderListener - m (Lnet/minecraft/class_2784;DD)V method_11930 onCenterChanged - m (Lnet/minecraft/class_2784;DDJ)V method_11931 onTransitionStarted - m (Lnet/minecraft/class_2784;I)V method_11933 onWarningDistanceChanged - m (Lnet/minecraft/class_2784;I)V method_11932 onWarningTimeChanged - m (Lnet/minecraft/class_2784;D)V method_11934 onSizeChanged - m (Lnet/minecraft/class_2784;D)V method_11935 onDamageBufferChanged - m (Lnet/minecraft/class_2784;D)V method_11929 onDamageAmountChanged -c net/minecraft/class_2780$class_3976 net/minecraft/world/border/IBorderListener$Impl - f Lnet/minecraft/class_2784; field_17652 worldBorder -c net/minecraft/class_129 net/minecraft/crash/CrashReportCategory - m (Lnet/minecraft/class_2338;)Ljava/lang/String; method_582 getCoordinateInfo - m (I)V method_580 trimStackTraceEntriesFromBottom - m (DDD)Ljava/lang/String; method_583 getCoordinateInfo - m (Lnet/minecraft/class_2338;)Ljava/lang/String; method_576 func_210207_b - m (Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;)Z method_584 firstTwoElementsOfStackTraceMatch - m (III)Ljava/lang/String; method_581 getCoordinateInfo - m (Ljava/lang/String;Ljava/lang/Object;)Lnet/minecraft/class_129; method_578 addDetail - m (I)I method_579 getPrunedStackTrace - m (Lnet/minecraft/class_129;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_586 addBlockInfo - m (Ljava/lang/String;Lnet/minecraft/class_133;)Lnet/minecraft/class_129; method_577 addDetail - m (Ljava/lang/StringBuilder;)V method_574 appendToStringBuilder - m (Ljava/lang/String;Ljava/lang/Throwable;)V method_585 addCrashSectionThrowable - m ()[Ljava/lang/StackTraceElement; method_575 getStackTrace - f [Ljava/lang/StackTraceElement; field_1097 stackTrace - f Lnet/minecraft/class_128; field_1095 crashReport - f Ljava/lang/String; field_1096 name - f Ljava/util/List; field_1094 children -c net/minecraft/class_129$class_130 net/minecraft/crash/CrashReportCategory$Entry - m ()Ljava/lang/String; method_588 getKey - m ()Ljava/lang/String; method_587 getValue - f Ljava/lang/String; field_1098 key - f Ljava/lang/String; field_1099 value -c net/minecraft/class_133 net/minecraft/crash/ICrashReportDetail -c net/minecraft/class_2784 net/minecraft/world/border/WorldBorder - m (DDJ)V method_11957 setTransition - m ()D method_11953 getDamagePerBlock - m ()I method_11959 getSize - m ()D method_11954 getTargetSize - m ()Lnet/minecraft/class_265; method_17903 getShape - m ()D method_11965 getDiameter - m ()D method_11976 minX - m (I)V method_11967 setWarningDistance - m (Lnet/minecraft/class_2780;)V method_11983 addListener - m ()D method_11963 maxX - m (Lnet/minecraft/class_2784$class_5200;)V method_17905 deserialize - m ()D method_11980 getCenterZ - m ()V method_11982 tick - m ()Lnet/minecraft/class_2789; method_11968 getStatus - m (I)V method_11975 setWarningTime - m (Lnet/minecraft/class_1923;)Z method_11951 contains - m (Lnet/minecraft/class_2784;)I method_11960 func_212672_a - m (Lnet/minecraft/class_1297;)D method_11979 getClosestDistance - m (D)V method_11955 setDamagePerBlock - m (Lnet/minecraft/class_2338;)Z method_11952 contains - m ()I method_11956 getWarningTime - m (D)V method_11969 setTransition - m ()Lnet/minecraft/class_2784$class_5200; method_27355 getSerializer - m ()D method_11971 getDamageBuffer - m ()J method_11962 getTimeUntilTarget - m (DD)V method_11978 setCenter - m ()D method_11977 maxZ - m ()D method_11958 minZ - m ()Ljava/util/List; method_11970 getListeners - m (DD)D method_11961 getClosestDistance - m (I)V method_11973 setSize - m (D)V method_11981 setDamageBuffer - m (Lnet/minecraft/class_238;)Z method_11966 contains - m ()D method_11964 getCenterX - m ()I method_11972 getWarningDistance - m ()D method_11974 getResizeSpeed - f D field_12738 centerX - f I field_12735 warningTime - f Ljava/util/List; field_12730 listeners - f I field_12732 worldSize - f I field_12734 warningDistance - f D field_12737 centerZ - f D field_12731 damageBuffer - f Lnet/minecraft/class_2784$class_2785; field_12736 state - f Lnet/minecraft/class_2784$class_5200; field_24122 DEFAULT_SERIALIZER - f D field_12733 damagePerBlock -c net/minecraft/class_2784$1 net/minecraft/world/border/WorldBorder$1 -c net/minecraft/class_2784$class_2787 net/minecraft/world/border/WorldBorder$StationaryBorderInfo - m ()V method_11996 updateBox - f Lnet/minecraft/class_2784; field_12748 field_212666_a - f D field_12745 minZ - f D field_12750 maxX - f Lnet/minecraft/class_265; field_17653 shape - f D field_12749 maxZ - f D field_12747 size - f D field_12746 minX -c net/minecraft/class_2784$class_5200 net/minecraft/world/border/WorldBorder$Serializer - m ()D method_27360 getDamagePerBlock - m ()D method_27361 getDamageBuffer - m (Lnet/minecraft/class_2487;)V method_27357 serialize - m ()I method_27362 getWarningDistance - m ()D method_27364 getSize - m ()I method_27363 getWarningTime - m ()D method_27366 getSizeLerpTarget - m ()J method_27365 getSizeLerpTime - m (Lcom/mojang/serialization/DynamicLike;Lnet/minecraft/class_2784$class_5200;)Lnet/minecraft/class_2784$class_5200; method_27358 deserialize - m ()D method_27356 getCenterX - m ()D method_27359 getCenterZ - f I field_24127 warningDistance - f D field_24129 size - f I field_24128 warningTime - f D field_24131 sizeLerpTarget - f J field_24130 sizeLerpTime - f D field_24123 centerX - f D field_24124 centerZ - f D field_24125 damagePerBlock - f D field_24126 damageBuffer -c net/minecraft/class_2784$class_2786 net/minecraft/world/border/WorldBorder$MovingBorderInfo - f D field_12739 newSize - f D field_12740 oldSize - f J field_12741 startTime - f Lnet/minecraft/class_2784; field_12743 field_212659_a - f D field_12744 transitionTime - f J field_12742 endTime -c net/minecraft/class_2784$class_2785 net/minecraft/world/border/WorldBorder$IBorderInfo - m ()D method_11988 getTargetSize - m ()Lnet/minecraft/class_265; method_17906 getShape - m ()D method_11991 getMaxX - m ()V method_11990 onCenterChanged - m ()D method_11994 getMinX - m ()D method_11987 getResizeSpeed - m ()V method_11989 onSizeChanged - m ()Lnet/minecraft/class_2784$class_2785; method_11986 tick - m ()D method_11984 getSize - m ()Lnet/minecraft/class_2789; method_11995 getStatus - m ()D method_11985 getMaxZ - m ()J method_11993 getTimeUntilTarget - m ()D method_11992 getMinZ -c net/minecraft/class_140 net/minecraft/util/DefaultUncaughtExceptionHandler - m (Ljava/lang/Thread;Ljava/lang/Throwable;)V uncaughtException uncaughtException - f Lorg/apache/logging/log4j/Logger; field_1113 logger -c net/minecraft/class_2789 net/minecraft/world/border/BorderStatus - m ()[Lnet/minecraft/class_2789; values values - m ()I method_11999 getColor - m (Ljava/lang/String;)Lnet/minecraft/class_2789; valueOf valueOf - f Lnet/minecraft/class_2789; field_12754 GROWING - f [Lnet/minecraft/class_2789; field_12752 $VALUES - f I field_12755 color - f Lnet/minecraft/class_2789; field_12753 STATIONARY - f Lnet/minecraft/class_2789; field_12756 SHRINKING -c net/minecraft/class_143 net/minecraft/util/DefaultWithNameUncaughtExceptionHandler - m (Ljava/lang/Thread;Ljava/lang/Throwable;)V uncaughtException uncaughtException - f Lorg/apache/logging/log4j/Logger; field_1115 logger -c net/minecraft/class_2791 net/minecraft/world/chunk/IChunk - m ([Lit/unimi/dsi/fastutil/shorts/ShortList;I)Lit/unimi/dsi/fastutil/shorts/ShortList; method_12026 getList - m (SI)V method_12029 addPackedPosition - m ()Lnet/minecraft/class_4548; method_12036 getBiomes - m (Lnet/minecraft/class_2487;)V method_12042 addTileEntity - m ()Z method_12038 hasLight - m ()Ljava/util/Set; method_12021 getTileEntitiesPos - m (J)V method_12043 setLastSaveTime - m (Lnet/minecraft/class_1297;)V method_12002 addEntity - m (J)V method_12028 setInhabitedTime - m ()[Lit/unimi/dsi/fastutil/shorts/ShortList; method_12012 getPackedPositions - m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_2902; method_12032 getHeightmap - m ()Ljava/util/Collection; method_12011 getHeightmaps - m ()I method_12031 getTopFilledSegment - m ()[Lnet/minecraft/class_2826; method_12006 getSections - m (Ljava/util/Map;)V method_12034 setStructureStarts - m (Lnet/minecraft/class_2902$class_2903;II)I method_12005 getTopBlockY - m (Lnet/minecraft/class_2338;)V method_12039 markBlockForPostprocessing - m (Z)V method_12008 setModified - m ()Lnet/minecraft/class_1923; method_12004 getPos - m (Z)V method_12020 setLight - m (Lnet/minecraft/class_2338;)V method_12041 removeTileEntity - m (II)Z method_12228 isEmptyBetween - m ()Lnet/minecraft/class_1951; method_12013 getBlocksToBeTicked - m ()Z method_12044 isModified - m ()Ljava/util/Map; method_12016 getStructureStarts - m ()Lnet/minecraft/class_2806; method_12009 getStatus - m ()Ljava/util/stream/Stream; method_12018 getLightSources - m ()J method_12033 getInhabitedTime - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)Lnet/minecraft/class_2680; method_12010 setBlockState - m ()Lnet/minecraft/class_1951; method_12014 getFluidsToBeTicked - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2487; method_12024 getDeferredTileEntity - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2487; method_20598 getTileEntityNBT - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;)V method_12007 addTileEntity - m ()Lnet/minecraft/class_2843; method_12003 getUpgradeData - m (Lnet/minecraft/class_2902$class_2903;[J)V method_12037 setHeightmap - m ()Lnet/minecraft/class_2826; method_12040 getLastExtendedBlockStorage -c net/minecraft/class_3797 net/minecraft/util/MinecraftVersion - m ()Ljava/lang/String; getName getName - m ()I getWorldVersion getWorldVersion - m ()Ljava/lang/String; getReleaseTarget getReleaseTarget - m ()I getPackVersion getPackVersion - m ()I getProtocolVersion getProtocolVersion - m ()Z isStable isStable - m ()Lcom/mojang/bridge/game/GameVersion; method_16672 load - m ()Ljava/util/Date; getBuildTime getBuildTime - m ()Ljava/lang/String; getId getId - f Ljava/lang/String; field_16733 name - f I field_16736 worldVersion - f Lcom/mojang/bridge/game/GameVersion; field_25319 GAME_VERSION - f Ljava/util/Date; field_16739 buildTime - f Lorg/apache/logging/log4j/Logger; field_16741 LOGGER - f Ljava/lang/String; field_16738 id - f Z field_16737 stable - f Ljava/lang/String; field_16740 releaseTarget - f I field_16734 packVersion - f I field_16735 protocolVersion -c net/minecraft/class_2794 net/minecraft/world/gen/ChunkGenerator - m (IILnet/minecraft/class_2902$class_2903;)I method_20402 getNoiseHeight - m (Lnet/minecraft/class_3233;)V method_12107 func_230354_a_ - m (IILnet/minecraft/class_2902$class_2903;)I method_16397 getHeight - m ()Lnet/minecraft/class_5311; method_12109 func_235957_b_ - m (Lnet/minecraft/class_1923;)Z method_28507 func_235952_a_ - m (Lnet/minecraft/class_1959;Lnet/minecraft/class_5138;Lnet/minecraft/class_1311;Lnet/minecraft/class_2338;)Ljava/util/List; method_12113 func_230353_a_ - m (IILnet/minecraft/class_2902$class_2903;)I method_18028 getNoiseHeightMinusOne - m (Lnet/minecraft/class_3233;Lnet/minecraft/class_2791;)V method_12110 generateSurface - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_5138;Lnet/minecraft/class_2791;Lnet/minecraft/class_3485;J)V method_16129 func_242707_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_3195;Lnet/minecraft/class_2338;IZ)Lnet/minecraft/class_2338; method_12103 func_235956_a_ - m (Lnet/minecraft/class_3233;Lnet/minecraft/class_5138;)V method_12102 func_230351_a_ - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2791;)V method_12106 func_242706_a - m ()V method_28509 func_235958_g_ - m (II)Lnet/minecraft/class_1922; method_26261 func_230348_a_ - m ()I method_12104 getMaxBuildHeight - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_5138;Lnet/minecraft/class_2791;)V method_12088 func_230352_b_ - m (Lnet/minecraft/class_5312;Lnet/minecraft/class_5455;Lnet/minecraft/class_5138;Lnet/minecraft/class_2791;Lnet/minecraft/class_3485;JLnet/minecraft/class_1923;Lnet/minecraft/class_1959;)V method_28508 func_242705_a - m ()Lcom/mojang/serialization/Codec; method_28506 func_230347_a_ - m (Lnet/minecraft/class_3449;)Ljava/lang/String; method_30150 func_241496_c_ - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_5138;Lnet/minecraft/class_2791;)V method_16130 func_235953_a_ - m (J)Lnet/minecraft/class_2794; method_27997 func_230349_a_ - m ()I method_16398 getSeaLevel - m ()Lnet/minecraft/class_1966; method_12098 getBiomeProvider - m (Lnet/minecraft/class_3449;)Ljava/lang/String; method_30149 func_241495_b_ - m ()I method_12100 getGroundHeight - m (Lnet/minecraft/class_3449;)Ljava/lang/String; method_30148 func_241494_a_ - m (JLnet/minecraft/class_4543;Lnet/minecraft/class_2791;Lnet/minecraft/class_2893$class_2894;)V method_12108 func_230350_a_ - f J field_24748 field_235950_e_ - f Lnet/minecraft/class_1966; field_24747 field_235949_c_ - f Lnet/minecraft/class_1966; field_12761 biomeProvider - f Lnet/minecraft/class_5311; field_16567 settings - f Ljava/util/List; field_24749 field_235951_f_ - f Lcom/mojang/serialization/Codec; field_24746 field_235948_a_ -c net/minecraft/class_4239 net/minecraft/util/FileUtil - m (Ljava/nio/file/Path;)Z method_20201 containsReservedName - m (Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/String;)Ljava/nio/file/Path; method_20202 resolveResourcePath - m (Ljava/nio/file/Path;)Z method_20200 isNormalized - m (Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_19773 findAvailableName - f Ljava/util/regex/Pattern; field_18956 DUPLICATE_NAME_COUNT_PATTERN - f Ljava/util/regex/Pattern; field_18955 RESERVED_FILENAMES_PATTERN -c net/minecraft/class_4548 net/minecraft/world/biome/BiomeContainer - m ()[I method_22401 getBiomeIds - f Lorg/apache/logging/log4j/Logger; field_21813 LOGGER - f I field_20649 BIOMES_SIZE - f I field_20653 HEIGHT_BITS - f I field_20651 VERTICAL_MASK - f I field_20650 HORIZONTAL_MASK - f [Lnet/minecraft/class_1959; field_20654 biomes - f Lnet/minecraft/class_2359; field_25831 biomeRegistry - f I field_20652 WIDTH_BITS -c net/minecraft/class_2806 net/minecraft/world/chunk/ChunkStatus - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_16556 func_222586_d - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16566 func_222602_b - m ()Ljava/util/EnumSet; method_12160 getHeightMaps - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16565 func_222587_g - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20615 func_222588_c - m (Ljava/lang/String;Lnet/minecraft/class_2806;ILjava/util/EnumSet;Lnet/minecraft/class_2806$class_2808;Lnet/minecraft/class_2806$class_3768;)Lnet/minecraft/class_2806; method_16555 registerSelective - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3227;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20610 lightChunk - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20609 func_223205_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16564 func_222592_e - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16563 func_222590_c - m (Ljava/lang/String;Lnet/minecraft/class_2806;ILjava/util/EnumSet;Lnet/minecraft/class_2806$class_2808;Lnet/minecraft/class_2806$class_2807;)Lnet/minecraft/class_2806; method_16557 register - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_17036 func_223194_i - m ()I method_16559 ordinal - m (Lit/unimi/dsi/fastutil/ints/IntArrayList;)V method_12166 func_223202_a - m (Lnet/minecraft/class_2806;)I method_12175 getDistance - m (Ljava/lang/String;)Lnet/minecraft/class_2806; method_12168 byName - m ()Ljava/util/List; method_16558 getAll - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20613 func_222604_b - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_2791;)Z method_20608 isLighted - m (Ljava/lang/String;Lnet/minecraft/class_2806;ILjava/util/EnumSet;Lnet/minecraft/class_2806$class_2808;Lnet/minecraft/class_2806$class_2807;Lnet/minecraft/class_2806$class_4305;)Lnet/minecraft/class_2806; method_20611 register - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16569 func_222601_c - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_12151 func_222605_b - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_17033 func_222603_a - m ()Lnet/minecraft/class_2806; method_16560 getParent - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20614 func_223195_b - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16570 func_222594_f - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V method_16567 func_222589_d - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20612 doLoadingWork - m (Lnet/minecraft/class_2806;)Z method_12165 isAtLeast - m ()I method_12152 getTaskRange - m ()I method_12155 maxDistance - m ()Ljava/lang/String; method_12172 getName - m ()Lnet/minecraft/class_2806$class_2808; method_12164 getType - m (I)Lnet/minecraft/class_2806; method_12161 getStatus - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_17034 func_222598_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;)Ljava/util/concurrent/CompletableFuture; method_12154 doGenerationWork - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2806$class_2808; field_12787 type - f Lnet/minecraft/class_2806; field_12803 FULL - f Ljava/lang/String; field_12789 name - f Lnet/minecraft/class_2806; field_12795 FEATURES - f Ljava/util/EnumSet; field_19160 POST_FEATURES - f Lnet/minecraft/class_2806; field_12786 SPAWN - f Lnet/minecraft/class_2806$class_4305; field_19345 NOOP_LOADING_WORKER - f Lnet/minecraft/class_2806; field_16422 STRUCTURE_REFERENCES - f Lnet/minecraft/class_2806; field_12801 CARVERS - f Lnet/minecraft/class_2806; field_12804 NOISE - f Lnet/minecraft/class_2806$class_2807; field_12792 generationWorker - f Lnet/minecraft/class_2806; field_12798 EMPTY - f Ljava/util/EnumSet; field_12793 heightmaps - f I field_16646 ordinal - f Lnet/minecraft/class_2806$class_4305; field_19346 loadingWorker - f Lnet/minecraft/class_2806; field_12790 LIQUID_CARVERS - f Lnet/minecraft/class_2806; field_12800 HEIGHTMAPS - f Ljava/util/EnumSet; field_19159 PRE_FEATURES - f Ljava/util/List; field_12791 STATUS_BY_RANGE - f Lnet/minecraft/class_2806; field_12805 LIGHT - f Lnet/minecraft/class_2806; field_12794 BIOMES - f Lit/unimi/dsi/fastutil/ints/IntList; field_12788 RANGE_BY_STATUS - f Lnet/minecraft/class_2806; field_16423 STRUCTURE_STARTS - f Lnet/minecraft/class_2806; field_12796 SURFACE - f I field_12802 taskRange - f Lnet/minecraft/class_2806; field_16647 parent -c net/minecraft/class_2806$class_2807 net/minecraft/world/chunk/ChunkStatus$IGenerationWorker - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; doWork doWork -c net/minecraft/class_2806$class_2808 net/minecraft/world/chunk/ChunkStatus$Type - m ()[Lnet/minecraft/class_2806$class_2808; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2806$class_2808; valueOf valueOf - f Lnet/minecraft/class_2806$class_2808; field_12807 LEVELCHUNK - f [Lnet/minecraft/class_2806$class_2808; field_12806 $VALUES - f Lnet/minecraft/class_2806$class_2808; field_12808 PROTOCHUNK -c net/minecraft/class_2806$class_3768 net/minecraft/world/chunk/ChunkStatus$ISelectiveWorker - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2794;Ljava/util/List;Lnet/minecraft/class_2791;)V doWork doWork -c net/minecraft/class_2806$class_4305 net/minecraft/world/chunk/ChunkStatus$ILoadingWorker - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_3227;Ljava/util/function/Function;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; doWork doWork -c net/minecraft/class_148 net/minecraft/crash/ReportedException - m ()Ljava/lang/String; getMessage getMessage - m ()Ljava/lang/Throwable; getCause getCause - m ()Lnet/minecraft/class_128; method_631 getCrashReport - f Lnet/minecraft/class_128; field_1119 crashReport -c net/minecraft/class_2802 net/minecraft/world/chunk/AbstractChunkProvider - m (Lnet/minecraft/class_1923;Z)V method_12124 forceChunk - m (IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2791; method_12121 getChunk - m ()Ljava/lang/String; method_12122 makeString - m (Lnet/minecraft/class_2338;)Z method_20529 canTick - m (Lnet/minecraft/class_1923;)Z method_20591 isChunkLoaded - m (II)Z method_12123 chunkExists - m ()V close close - m (ZZ)V method_12128 setAllowedSpawnTypes - m ()Lnet/minecraft/class_3568; method_12130 getLightManager - m (IIZ)Lnet/minecraft/class_2818; method_12126 getChunk - m (Lnet/minecraft/class_1297;)Z method_12125 isChunkLoaded - m (II)Lnet/minecraft/class_2818; method_21730 getChunkNow -c net/minecraft/class_151 net/minecraft/util/ResourceLocationException -c net/minecraft/class_2812 net/minecraft/world/chunk/EmptyChunk - m ([Lnet/minecraft/class_1959;)V method_12188 func_203406_b - f [Lnet/minecraft/class_1959; field_12814 BIOMES -c net/minecraft/class_155 net/minecraft/util/SharedConstants - m ()Lcom/mojang/bridge/game/GameVersion; method_16673 getVersion - m (C)Z method_643 isAllowedCharacter - m (Ljava/lang/String;)Ljava/lang/String; method_644 filterAllowedCharacters - f Z field_25135 useDatafixers - f J field_22251 field_240855_b_ - f Lio/netty/util/ResourceLeakDetector$Level; field_1124 NETTY_LEAK_DETECTION - f Lcom/mojang/bridge/game/GameVersion; field_16742 version - f Z field_1125 developmentMode - f [C field_1126 ILLEGAL_FILE_CHARACTERS -c net/minecraft/class_2804 net/minecraft/world/chunk/NibbleArray - m (III)I method_12140 getCoordinateIndex - m ()Lnet/minecraft/class_2804; method_12144 copy - m (IIII)V method_12145 set - m ()Ljava/lang/String; toString toString - m ()Z method_12146 isEmpty - m (I)I method_12141 getFromIndex - m (II)V method_12142 setIndex - m (III)I method_12139 get - m (I)I method_12138 getNibbleIndex - m ()[B method_12137 getData - m (I)Z method_12143 isLowerNibble - f [B field_12783 data -c net/minecraft/class_156 net/minecraft/util/Util - m (Ljava/util/stream/IntStream;I)Lcom/mojang/serialization/DataResult; method_29190 validateIntStreamSize - m ()Ljava/util/concurrent/ExecutorService; method_27959 startThreadedService - m (Ljava/lang/String;Ljava/util/function/Consumer;)Ljava/util/function/Consumer; method_29188 func_240982_a_ - m (Ljava/nio/file/Path;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_29775 func_240984_a_ - m (Ljava/util/function/Supplier;)Ljava/lang/Object; method_656 make - m (Ljava/nio/file/Path;)Ljava/util/function/BooleanSupplier; method_30628 func_244366_b - m (Ljava/util/List;)Ljava/util/concurrent/CompletableFuture; method_652 gather - m (Ljava/lang/Throwable;)Ljava/lang/String; method_22321 getMessage - m (Lnet/minecraft/class_5462;I)Ljava/lang/String; method_30623 func_244360_a - m (Lnet/minecraft/class_2769;Ljava/lang/Object;)Ljava/lang/String; method_650 getValueName - m (Ljava/lang/Throwable;)V method_24155 toRuntimeException - m ()Lnet/minecraft/class_156$class_158; method_668 getOSType - m (Ljava/util/concurrent/CompletableFuture;Ljava/util/List;ILjava/lang/Object;Ljava/lang/Throwable;)V method_18842 func_215085_a - m ()J method_648 nanoTime - m (Ljava/util/List;)Ljava/lang/Object; method_20793 getLast - m ([Ljava/lang/Object;Ljava/util/Random;)Ljava/lang/Object; method_27173 getRandomObject - m ()Ljava/util/concurrent/Executor; method_28124 getBootstrapService - m (Lcom/mojang/datafixers/DSL$TypeReference;Ljava/lang/String;)Lcom/mojang/datafixers/types/Type; method_29191 attemptDataFixInternal - m (Ljava/lang/Runnable;Ljava/util/function/Supplier;)Ljava/lang/Runnable; method_18839 namedRunnable - m (Ljava/util/List;[Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;)V method_18841 func_215083_a - m (Ljava/lang/Thread;Ljava/lang/Throwable;)V method_18347 printException - m (Ljava/lang/Object;Ljava/util/function/Consumer;)Ljava/lang/Object; method_654 make - m (Ljava/lang/Iterable;Ljava/lang/Object;)Ljava/lang/Object; method_660 getElementAfter - m ()Ljava/util/concurrent/Executor; method_27958 getRenderingService - m (Ljava/lang/String;Lnet/minecraft/class_5462;)Ljava/lang/String; method_30309 func_244361_a - m ([Ljava/util/function/BooleanSupplier;)Z method_30627 func_244365_a - m ()J method_658 milliTime - m (Ljava/util/List;Ljava/lang/Void;)Ljava/util/List; method_18840 func_215089_a - m (Ljava/lang/String;Ljava/util/concurrent/ForkJoinPool;)Ljava/util/concurrent/ForkJoinWorkerThread; method_28123 func_240981_a_ - m (Ljava/nio/file/Path;)Ljava/util/function/BooleanSupplier; method_30624 func_244362_a - m (Ljava/util/function/Consumer;Ljava/lang/String;Ljava/lang/String;)V method_29189 func_240986_a_ - m (Ljava/lang/Throwable;)Ljava/lang/Throwable; method_22320 pauseDevMode - m ()Ljava/util/stream/Collector; method_664 toMapCollector - m (Ljava/lang/String;Lnet/minecraft/class_2960;)Ljava/lang/String; method_646 makeTranslationKey - m (Ljava/nio/file/Path;)Ljava/util/function/BooleanSupplier; method_30629 func_244367_c - m (Ljava/io/File;Ljava/io/File;Ljava/io/File;)V method_27760 backupThenUpdate - m (Ljava/nio/file/Path;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_30626 func_244364_a - m (Ljava/lang/Runnable;)Ljava/lang/Thread; method_27956 func_240978_a_ - m ()J method_659 millisecondsSinceEpoch - m ()Lorg/apache/logging/log4j/Logger; method_667 access$100 - m ()Lit/unimi/dsi/fastutil/Hash$Strategy; method_655 identityHashStrategy - m ()V method_18350 shutdown - m ()Ljava/util/concurrent/Executor; method_18349 getServerExecutor - m (Lcom/mojang/datafixers/DSL$TypeReference;Ljava/lang/String;)Lcom/mojang/datafixers/types/Type; method_29187 attemptDataFix - m (Ljava/util/concurrent/ExecutorService;)V method_27957 shutdownService - m (Ljava/lang/String;)Ljava/util/concurrent/ExecutorService; method_28122 createNamedService - m (Ljava/lang/String;II)I method_27761 func_240980_a_ - m (Ljava/lang/String;)Z method_666 func_211566_a - m ([ILjava/util/Random;)I method_27172 getRandomInt - m (Ljava/lang/Throwable;)Ljava/util/concurrent/CompletableFuture; method_19483 completedExceptionallyFuture - m ()V method_29476 func_240994_l_ - m (Ljava/lang/Iterable;Ljava/lang/Object;)Ljava/lang/Object; method_645 getElementBefore - m ()Ljava/util/stream/Stream; method_651 getJvmFlags - m (Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/util/function/BooleanSupplier; method_30625 func_244363_a - m (ILjava/lang/String;[Ljava/util/function/BooleanSupplier;)Z method_30622 func_244359_a - m (Ljava/util/Optional;Ljava/util/function/Consumer;Ljava/lang/Runnable;)Ljava/util/Optional; method_17974 acceptOrElse - m (Ljava/util/Optional;)Ljava/util/stream/Stream; method_17815 streamOptional - f Ljava/util/UUID; field_25140 DUMMY_UUID - f Ljava/util/concurrent/atomic/AtomicInteger; field_18034 NEXT_SERVER_WORKER_ID - f Ljava/util/function/LongSupplier; field_1128 nanoTimeSupplier - f Ljava/util/concurrent/ExecutorService; field_18035 SERVER_EXECUTOR - f Ljava/util/concurrent/ExecutorService; field_24477 RENDERING_SERVICE - f Ljava/util/concurrent/ExecutorService; field_24622 BOOTSTRAP_SERVICE - f Lorg/apache/logging/log4j/Logger; field_1129 LOGGER -c net/minecraft/class_156$1 net/minecraft/util/Util$1 - m (Ljava/lang/Throwable;)V onTermination onTermination -c net/minecraft/class_156$3 net/minecraft/util/Util$3 - m ()Ljava/lang/String; toString toString - m ()Z getAsBoolean getAsBoolean - f Ljava/nio/file/Path; field_26350 field_244370_a -c net/minecraft/class_156$2 net/minecraft/util/Util$2 - m ()Ljava/lang/String; toString toString - m ()Z getAsBoolean getAsBoolean - f Ljava/nio/file/Path; field_26349 field_244369_b - f Ljava/nio/file/Path; field_26348 field_244368_a -c net/minecraft/class_156$5 net/minecraft/util/Util$5 - m ()Ljava/lang/String; toString toString - m ()Z getAsBoolean getAsBoolean - f Ljava/nio/file/Path; field_26352 field_244372_a -c net/minecraft/class_156$4 net/minecraft/util/Util$4 - m ()Z getAsBoolean getAsBoolean - m ()Ljava/lang/String; toString toString - f Ljava/nio/file/Path; field_26351 field_244371_a -c net/minecraft/class_156$6 net/minecraft/util/Util$6 - m ()V run run -c net/minecraft/class_156$class_157 net/minecraft/util/Util$IdentityStrategy - m (Ljava/lang/String;)Lnet/minecraft/class_156$class_157; valueOf valueOf - m (Ljava/lang/Object;Ljava/lang/Object;)Z equals equals - m (Ljava/lang/Object;)I hashCode hashCode - m ()[Lnet/minecraft/class_156$class_157; values values - f [Lnet/minecraft/class_156$class_157; field_1131 $VALUES - f Lnet/minecraft/class_156$class_157; field_1130 INSTANCE -c net/minecraft/class_156$class_158 net/minecraft/util/Util$OS - m (Ljava/net/URL;)[Ljava/lang/String; method_674 getOpenCommandLine - m (Ljava/net/URL;)Ljava/lang/Process; method_671 func_210208_c - m (Ljava/net/URI;)V method_673 openURI - m (Ljava/io/File;)V method_672 openFile - m ()[Lnet/minecraft/class_156$class_158; values values - m (Ljava/lang/String;)Lnet/minecraft/class_156$class_158; valueOf valueOf - m (Ljava/net/URL;)V method_669 openURL - m (Ljava/lang/String;)V method_670 openURI - f Lnet/minecraft/class_156$class_158; field_1134 SOLARIS - f Lnet/minecraft/class_156$class_158; field_1133 WINDOWS - f Lnet/minecraft/class_156$class_158; field_1137 OSX - f [Lnet/minecraft/class_156$class_158; field_1136 $VALUES - f Lnet/minecraft/class_156$class_158; field_1135 LINUX - f Lnet/minecraft/class_156$class_158; field_1132 UNKNOWN -c net/minecraft/class_156$class_158$2 net/minecraft/util/Util$OS$2 -c net/minecraft/class_156$class_158$1 net/minecraft/util/Util$OS$1 -c net/minecraft/class_161 net/minecraft/advancements/Advancement - m ()Lnet/minecraft/class_185; method_686 getDisplay - m ()Lnet/minecraft/class_2960; method_688 getId - m ()Ljava/util/Map; method_682 getCriteria - m ()Ljava/lang/String; toString toString - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_685 func_211567_a_ - m (Lnet/minecraft/class_161;)V method_690 addChild - m ()Ljava/lang/Iterable; method_681 getChildren - m ()Lnet/minecraft/class_2561; method_684 getDisplayText - m ()I hashCode hashCode - m ()I method_683 getRequirementCount - m ()[[Ljava/lang/String; method_680 getRequirements - m ()Lnet/minecraft/class_161$class_162; method_689 copy - m ()Lnet/minecraft/class_161; method_687 getParent - m ()Lnet/minecraft/class_170; method_691 getRewards - f Lnet/minecraft/class_170; field_1145 rewards - f Lnet/minecraft/class_2561; field_1141 displayText - f Lnet/minecraft/class_2960; field_1144 id - f [[Ljava/lang/String; field_1142 requirements - f Lnet/minecraft/class_185; field_1146 display - f Ljava/util/Set; field_1140 children - f Ljava/util/Map; field_1139 criteria - f Lnet/minecraft/class_161; field_1143 parent -c net/minecraft/class_161$1 net/minecraft/advancements/Advancement$1 -c net/minecraft/class_161$class_162 net/minecraft/advancements/Advancement$Builder - m (Lnet/minecraft/class_170$class_171;)Lnet/minecraft/class_161$class_162; method_703 withRewards - m (Lnet/minecraft/class_193;)Lnet/minecraft/class_161$class_162; method_704 withRequirementsStrategy - m ()Lcom/google/gson/JsonObject; method_698 serialize - m (Lnet/minecraft/class_161;)Lnet/minecraft/class_161$class_162; method_701 withParent - m (Ljava/lang/String;Lnet/minecraft/class_175;)Lnet/minecraft/class_161$class_162; method_705 withCriterion - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_161$class_162; method_709 withCriterion - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_161$class_162; method_696 readFrom - m (Ljava/util/function/Consumer;Ljava/lang/String;)Lnet/minecraft/class_161; method_694 register - m (Lnet/minecraft/class_1935;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;Lnet/minecraft/class_2960;Lnet/minecraft/class_189;ZZZ)Lnet/minecraft/class_161$class_162; method_697 withDisplay - m ()Lnet/minecraft/class_161$class_162; method_707 builder - m (Lnet/minecraft/class_185;)Lnet/minecraft/class_161$class_162; method_693 withDisplay - m ()Ljava/util/Map; method_710 getCriteria - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Lnet/minecraft/class_161$class_162; method_692 deserialize - m (Lnet/minecraft/class_2540;)V method_699 writeTo - m (Ljava/util/function/Function;)Z method_700 resolveParent - m (Lnet/minecraft/class_170;)Lnet/minecraft/class_161$class_162; method_706 withRewards - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_161$class_162; method_708 withParentId - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_161; method_702 func_199750_c - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_161; method_695 build - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;Lnet/minecraft/class_2960;Lnet/minecraft/class_189;ZZZ)Lnet/minecraft/class_161$class_162; method_20416 withDisplay - f Lnet/minecraft/class_170; field_1153 rewards - f Lnet/minecraft/class_193; field_1151 requirementsStrategy - f Lnet/minecraft/class_185; field_1147 display - f [[Ljava/lang/String; field_1150 requirements - f Lnet/minecraft/class_161; field_1149 parent - f Lnet/minecraft/class_2960; field_1152 parentId - f Ljava/util/Map; field_1148 criteria -c net/minecraft/class_163 net/minecraft/advancements/AdvancementList - m ()Ljava/lang/Iterable; method_715 getRoots - m (Ljava/util/Set;)V method_713 removeAll - m ()V method_714 clear - m ()Ljava/util/Collection; method_712 getAll - m (Ljava/util/Map;)V method_711 loadAdvancements - m (Lnet/minecraft/class_161;)V method_718 remove - m (Lnet/minecraft/class_163$class_164;)V method_717 setListener - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_161; method_716 getAdvancement - f Ljava/util/Set; field_1156 nonRoots - f Ljava/util/Map; field_1157 advancements - f Ljava/util/Set; field_1154 roots - f Lnet/minecraft/class_163$class_164; field_1155 listener - f Lorg/apache/logging/log4j/Logger; field_1158 LOGGER -c net/minecraft/class_163$class_164 net/minecraft/advancements/AdvancementList$IListener - m (Lnet/minecraft/class_161;)V method_720 rootAdvancementRemoved - m (Lnet/minecraft/class_161;)V method_723 rootAdvancementAdded - m (Lnet/minecraft/class_161;)V method_719 nonRootAdvancementRemoved - m ()V method_722 advancementsCleared - m (Lnet/minecraft/class_161;)V method_721 nonRootAdvancementAdded -c net/minecraft/class_2810 net/minecraft/world/IStructureReader - m (Ljava/util/Map;)V method_12183 setStructureReferences - m (Lnet/minecraft/class_3195;Lnet/minecraft/class_3449;)V method_12184 func_230344_a_ - m (Lnet/minecraft/class_3195;)Lnet/minecraft/class_3449; method_12181 func_230342_a_ - m ()Ljava/util/Map; method_12179 getStructureReferences - m (Lnet/minecraft/class_3195;J)V method_12182 func_230343_a_ - m (Lnet/minecraft/class_3195;)Lit/unimi/dsi/fastutil/longs/LongSet; method_12180 func_230346_b_ -c net/minecraft/class_2814 net/minecraft/util/palette/HashMapPalette - m ()I method_12197 getPaletteSize - m (Lnet/minecraft/class_2499;)V method_12196 writePaletteToList - f Ljava/util/function/Function; field_12823 deserializer - f Lnet/minecraft/class_2835; field_12825 paletteResizer - f Lnet/minecraft/class_3513; field_12824 statePaletteMap - f I field_12822 bits - f Lnet/minecraft/class_2361; field_12821 registry - f Ljava/util/function/Function; field_12826 serializer -c net/minecraft/class_2816 net/minecraft/util/palette/IdentityPalette - f Lnet/minecraft/class_2361; field_12828 registry - f Ljava/lang/Object; field_12829 defaultState -c net/minecraft/class_2818 net/minecraft/world/chunk/Chunk - m (Lnet/minecraft/class_1297;I)V method_12219 removeEntityAtIndex - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_3611; method_12230 func_222878_k - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_238;Ljava/util/List;Ljava/util/function/Predicate;)V method_18029 getEntitiesWithinAABBForList - m (Lnet/minecraft/class_2338;)Z method_18320 func_217315_n - m (III)Ljava/lang/String; method_12227 func_217322_c - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2818$class_2819;)Lnet/minecraft/class_2586; method_12201 getTileEntity - m (Z)V method_12226 setLoaded - m ()Lnet/minecraft/class_3568; method_12023 getWorldLightManager - m (Lnet/minecraft/class_3195;)Lit/unimi/dsi/fastutil/longs/LongSet; method_12222 func_235960_c_ - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_18089 func_217325_c - m ()V method_20530 rescheduleTicks - m (ILnet/minecraft/class_2338;)Z method_18319 func_217323_a - m ()Lnet/minecraft/class_1937; method_12200 getWorld - m (Lnet/minecraft/class_1297;)V method_12203 removeEntity - m ()Ljava/util/Map; method_12214 getTileEntityMap - m (Ljava/util/function/Supplier;)V method_12207 setLocationType - m (III)Lnet/minecraft/class_3610; method_12234 getFluidState - m (Lnet/minecraft/class_3218;)V method_20471 saveScheduledTicks - m (Lnet/minecraft/class_2586;)V method_12216 addTileEntity - m ()Z method_12223 isEmpty - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2248; method_12209 func_222881_l - m (Lnet/minecraft/class_4548;Lnet/minecraft/class_2540;Lnet/minecraft/class_2487;I)V method_12224 read - m (Ljava/lang/Class;Lnet/minecraft/class_238;Ljava/util/List;Ljava/util/function/Predicate;)V method_12210 getEntitiesOfTypeWithinAABB - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/List;Ljava/util/function/Predicate;)V method_12205 getEntitiesWithinAABBForEntity - m (Z)V method_12232 setHasEntities - m ()V method_12220 markDirty - m (Lnet/minecraft/class_2338;)Z method_12217 func_217312_m - m (III)Ljava/lang/String; method_12202 func_217327_b - m ()V method_12221 postProcess - m (Lnet/minecraft/class_3195;)Lit/unimi/dsi/fastutil/longs/LongSet; method_12212 func_235961_d_ - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2586; method_12208 createNewTileEntity - m ()V method_12206 postLoad - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2586; method_12204 setDeferredTileEntity - m ()[Lnet/minecraft/class_3509; method_12215 getEntityLists - m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_2902; method_12231 func_217319_d - m ()Lnet/minecraft/class_3193$class_3194; method_12225 getLocationType - f Lorg/apache/logging/log4j/Logger; field_12839 LOGGER - f Lnet/minecraft/class_2843; field_12849 upgradeData - f Z field_12837 hasEntities - f Z field_12834 dirty - f Ljava/util/function/Consumer; field_12850 postLoadConsumer - f [Lnet/minecraft/class_2826; field_12840 sections - f Ljava/util/Map; field_12846 deferredTileEntities - f Lnet/minecraft/class_1951; field_12841 blocksToBeTicked - f Lnet/minecraft/class_1923; field_12848 pos - f Z field_12855 loaded - f Ljava/util/Map; field_12845 structureReferences - f Lnet/minecraft/class_2826; field_12852 EMPTY_SECTION - f [Lnet/minecraft/class_3509; field_12833 entityLists - f J field_12843 inhabitedTime - f Lnet/minecraft/class_1951; field_12857 fluidsToBeTicked - f Lnet/minecraft/class_4548; field_20655 blockBiomeArray - f J field_12844 lastSaveTime - f Lnet/minecraft/class_1937; field_12858 world - f Ljava/util/Map; field_12853 heightMap - f Ljava/util/function/Supplier; field_12856 locationType - f Ljava/util/Map; field_12854 tileEntities - f Ljava/util/Map; field_12838 structureStarts - f [Lit/unimi/dsi/fastutil/shorts/ShortList; field_12836 packedBlockPositions - f Z field_12847 lightCorrect -c net/minecraft/class_2818$class_2819 net/minecraft/world/chunk/Chunk$CreateEntityType - m (Ljava/lang/String;)Lnet/minecraft/class_2818$class_2819; valueOf valueOf - m ()[Lnet/minecraft/class_2818$class_2819; values values - f Lnet/minecraft/class_2818$class_2819; field_12860 IMMEDIATE - f [Lnet/minecraft/class_2818$class_2819; field_12862 $VALUES - f Lnet/minecraft/class_2818$class_2819; field_12861 QUEUED - f Lnet/minecraft/class_2818$class_2819; field_12859 CHECK -c net/minecraft/class_2821 net/minecraft/world/chunk/ChunkPrimerWrapper - m ()Lnet/minecraft/class_2818; method_12240 getChunk - m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_2902$class_2903; method_12239 func_209532_c - m (Lnet/minecraft/class_3611;)Z method_12241 func_209218_a - m (Lnet/minecraft/class_2248;)Z method_12242 func_209219_a - f Lnet/minecraft/class_2818; field_12866 chunk -c net/minecraft/class_2823 net/minecraft/world/chunk/IChunkLightProvider - m (Lnet/minecraft/class_1944;Lnet/minecraft/class_4076;)V method_12247 markLightChanged - m (II)Lnet/minecraft/class_1922; method_12246 getChunkForLight - m ()Lnet/minecraft/class_1922; method_16399 getWorld -c net/minecraft/class_2826 net/minecraft/world/chunk/ChunkSection - m (Lnet/minecraft/class_2540;)V method_12257 write - m ()Z method_12262 needsRandomTickAny - m (Lnet/minecraft/class_2540;)V method_12258 read - m (Ljava/util/function/Predicate;)Z method_19523 isValidPOIState - m ()Z method_12261 isEmpty - m (Lnet/minecraft/class_2680;I)V method_21731 func_225496_a - m (Lnet/minecraft/class_2826;)Z method_18090 isEmpty - m ()V method_16676 lock - m (IIILnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_16675 setBlockState - m ()Lnet/minecraft/class_2841; method_12265 getData - m ()I method_12259 getYLocation - m ()V method_16677 unlock - m (III)Lnet/minecraft/class_2680; method_12254 getBlockState - m ()Z method_12263 needsRandomTick - m (III)Lnet/minecraft/class_3610; method_12255 getFluidState - m ()I method_12260 getSize - m (IIILnet/minecraft/class_2680;Z)Lnet/minecraft/class_2680; method_12256 setBlockState - m ()V method_12253 recalculateRefCounts - m ()Z method_12264 needsRandomTickFluid - f Lnet/minecraft/class_2841; field_12878 data - f I field_12880 yBase - f Lnet/minecraft/class_2837; field_12879 REGISTRY_PALETTE - f S field_12877 blockRefCount - f S field_12881 fluidRefCount - f S field_12882 blockTickRefCount -c net/minecraft/class_2832 net/minecraft/world/chunk/storage/NibbleArrayReader - m (III)I method_12275 get - f I field_12892 depthBitsPlusFour - f [B field_12894 data - f I field_12893 depthBits -c net/minecraft/class_2834 net/minecraft/util/palette/ArrayPalette - m ()I method_12282 getPaletteSize - f Lnet/minecraft/class_2835; field_12905 resizeHandler - f I field_12901 arraySize - f [Ljava/lang/Object; field_12904 states - f Ljava/util/function/Function; field_12902 deserializer - f I field_12903 bits - f Lnet/minecraft/class_2361; field_12900 registry -c net/minecraft/class_2835 net/minecraft/util/palette/IResizeCallback - m (ILjava/lang/Object;)I onResize onResize -c net/minecraft/class_2837 net/minecraft/util/palette/IPalette - m (Lnet/minecraft/class_2540;)V method_12289 read - m (Lnet/minecraft/class_2499;)V method_12286 read - m ()I method_12290 getSerializedSize - m (I)Ljava/lang/Object; method_12288 get - m (Ljava/util/function/Predicate;)Z method_19525 func_230341_a_ - m (Lnet/minecraft/class_2540;)V method_12287 write - m (Ljava/lang/Object;)I method_12291 idFor -c net/minecraft/class_2839 net/minecraft/world/chunk/ChunkPrimer - m (Lnet/minecraft/class_2893$class_2894;)Ljava/util/BitSet; method_12025 getCarvingMask - m (Lnet/minecraft/class_3195;)Lit/unimi/dsi/fastutil/longs/LongSet; method_12298 func_235966_d_ - m ()[Lit/unimi/dsi/fastutil/shorts/ShortList; method_12296 getPackedLightPositions - m (SILnet/minecraft/class_1923;)Lnet/minecraft/class_2338; method_12314 unpackToWorld - m ()Lnet/minecraft/class_3568; method_12023 getWorldLightManager - m (Lnet/minecraft/class_2338;)S method_12300 packToLocal - m (Lnet/minecraft/class_2338;)V method_12315 addLightPosition - m (Lnet/minecraft/class_3568;)V method_17032 setLightManager - m (Lnet/minecraft/class_3195;)Lit/unimi/dsi/fastutil/longs/LongSet; method_12305 func_235965_c_ - m (Lnet/minecraft/class_4548;)V method_22405 setBiomes - m (Lnet/minecraft/class_2248;)Z method_12311 func_205332_a - m (Lnet/minecraft/class_2487;)V method_12302 addEntity - m ()Ljava/util/Map; method_12309 getTileEntities - m ()Lnet/minecraft/class_2850; method_12313 getFluidsToBeTicked - m (SI)V method_12304 addLightValue - m (I)Lnet/minecraft/class_2826; method_16679 getSection - m (Lnet/minecraft/class_2893$class_2894;Ljava/util/BitSet;)V method_12307 setCarvingMask - m ()Ljava/util/Map; method_12316 getDeferredTileEntities - m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_2902; method_12299 func_217333_d - m ()Ljava/util/List; method_12295 getEntities - m ()Lnet/minecraft/class_2850; method_12303 getBlocksToBeTicked - m (Lnet/minecraft/class_2806;)V method_12308 setStatus - m (Lnet/minecraft/class_2893$class_2894;)Ljava/util/BitSet; method_12297 func_235964_c_ - m (Lnet/minecraft/class_3611;)Z method_12310 func_205766_a - m (Lnet/minecraft/class_2893$class_2894;)Ljava/util/BitSet; method_28510 getOrAddCarvingMask - f Ljava/util/List; field_12919 lightPositions - f Ljava/util/Map; field_12915 structureStartMap - f Lnet/minecraft/class_2850; field_12911 pendingBlockTicks - f Lnet/minecraft/class_2850; field_12923 pendingFluidTicks - f Ljava/util/Map; field_12930 structureReferenceMap - f Lorg/apache/logging/log4j/Logger; field_12920 LOGGER - f Ljava/util/Map; field_12926 carvingMasks - f Lnet/minecraft/class_1923; field_12928 pos - f Lnet/minecraft/class_3568; field_17105 lightManager - f J field_12925 inhabitedTime - f Lnet/minecraft/class_4548; field_20656 biomes - f Lnet/minecraft/class_2843; field_12916 upgradeData - f Lnet/minecraft/class_2806; field_12918 status - f Ljava/util/Map; field_12912 heightmaps - f Ljava/util/Map; field_12917 tileEntities - f Ljava/util/Map; field_12927 deferredTileEntities - f Z field_12924 modified - f [Lnet/minecraft/class_2826; field_12909 sections - f [Lit/unimi/dsi/fastutil/shorts/ShortList; field_12921 packedPositions - f Z field_12914 hasLight - f Ljava/util/List; field_12929 entities -c net/minecraft/class_2841 net/minecraft/util/palette/PalettedContainer - m (Ljava/lang/Thread;)Ljava/lang/String; method_12332 func_210458_a - m (ILjava/lang/Object;)Ljava/lang/Object; method_12336 doSwap - m (Lit/unimi/dsi/fastutil/ints/Int2IntMap;I)V method_21734 func_225498_a - m (IIILjava/lang/Object;)Ljava/lang/Object; method_16678 swap - m (Lnet/minecraft/class_2841$class_4464;)V method_21732 count - m (ILjava/lang/Object;)V method_12322 set - m (Lnet/minecraft/class_2841$class_4464;Lit/unimi/dsi/fastutil/ints/Int2IntMap$Entry;)V method_21733 func_225499_a - m (IIILjava/lang/Object;)Ljava/lang/Object; method_12328 lockedSwap - m (Lnet/minecraft/class_2487;Ljava/lang/String;Ljava/lang/String;)V method_12330 writeChunkPalette - m (Ljava/util/function/Predicate;)Z method_19526 func_235963_a_ - m ()V method_12335 unlock - m (Lnet/minecraft/class_2540;)V method_12326 read - m (Lnet/minecraft/class_2499;[J)V method_12329 readChunkPalette - m ()V method_12334 lock - m (ILjava/lang/Object;)I method_12333 func_205517_b - m (III)I method_12323 getIndex - m (I)Ljava/lang/Object; method_12331 get - m ()I method_12327 getSerializedSize - m (I)V method_12324 setBits - m (III)Ljava/lang/Object; method_12321 get - m (Lnet/minecraft/class_2540;)V method_12325 write - f Lnet/minecraft/class_2361; field_12938 registry - f Lnet/minecraft/class_2835; field_12942 dummyPaletteResize - f Ljava/util/concurrent/locks/ReentrantLock; field_12937 lock - f Ljava/lang/Object; field_12935 defaultState - f Ljava/util/function/Function; field_12943 deserializer - f Lnet/minecraft/class_2837; field_12936 palette - f Ljava/util/function/Function; field_12939 serializer - f Lnet/minecraft/class_2837; field_12940 registryPalette - f Lnet/minecraft/class_3508; field_12941 storage - f I field_12934 bits -c net/minecraft/class_2841$class_4464 net/minecraft/util/palette/PalettedContainer$ICountConsumer - m (Ljava/lang/Object;I)V accept accept -c net/minecraft/class_2843 net/minecraft/util/palette/UpgradeData - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_12351 func_196987_a - m (Lnet/minecraft/class_2818;)V method_12348 func_196989_a - m ()Lnet/minecraft/class_2487; method_12350 write - m (Lnet/minecraft/class_2818;)V method_12356 postProcessChunk - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2843$class_2844;)V method_12353 func_208829_a - m ()Z method_12349 isEmpty - m ()Ljava/util/Set; method_12355 func_208831_d - m ()Ljava/util/Map; method_12354 func_208830_c - m (Lnet/minecraft/class_2818;Lnet/minecraft/class_2355;)V method_12352 func_196991_a - f Ljava/util/EnumSet; field_12951 field_196995_b - f Lnet/minecraft/class_2843; field_12950 EMPTY - f Lorg/apache/logging/log4j/Logger; field_12956 LOGGER - f [[I field_12955 field_196996_c - f [Lnet/minecraft/class_2355; field_12952 field_208832_b - f Ljava/util/Map; field_12953 field_196997_d - f Ljava/util/Set; field_12954 FIXERS -c net/minecraft/class_2843$class_2845 net/minecraft/util/palette/UpgradeData$BlockFixers - m (Ljava/lang/String;)Lnet/minecraft/class_2843$class_2845; valueOf valueOf - m ()[Lnet/minecraft/class_2843$class_2845; values values - f [Lnet/minecraft/class_2350; field_12959 field_208827_f - f Lnet/minecraft/class_2843$class_2845; field_12957 BLACKLIST - f [Lnet/minecraft/class_2843$class_2845; field_12961 $VALUES - f Lnet/minecraft/class_2843$class_2845; field_12958 STEM_BLOCK - f Lnet/minecraft/class_2843$class_2845; field_12960 CHEST - f Lnet/minecraft/class_2843$class_2845; field_12962 DEFAULT - f Lnet/minecraft/class_2843$class_2845; field_12963 LEAVES -c net/minecraft/class_2843$class_2845$5 net/minecraft/util/palette/UpgradeData$BlockFixers$5 -c net/minecraft/class_2843$class_2845$3 net/minecraft/util/palette/UpgradeData$BlockFixers$3 -c net/minecraft/class_2843$class_2845$4 net/minecraft/util/palette/UpgradeData$BlockFixers$4 - m ()Ljava/util/List; method_12359 func_209161_a - f Ljava/lang/ThreadLocal; field_12964 field_208828_g -c net/minecraft/class_2843$class_2845$1 net/minecraft/util/palette/UpgradeData$BlockFixers$1 -c net/minecraft/class_2843$class_2845$2 net/minecraft/util/palette/UpgradeData$BlockFixers$2 -c net/minecraft/class_2843$class_2844 net/minecraft/util/palette/UpgradeData$IBlockFixer - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_12358 func_196982_a - m (Lnet/minecraft/class_1936;)V method_12357 func_208826_a -c net/minecraft/class_2843$1 net/minecraft/util/palette/UpgradeData$1 -c net/minecraft/class_2850 net/minecraft/world/chunk/ChunkPrimerTickList - m ()Lnet/minecraft/class_2499; method_12367 write - m (Lnet/minecraft/class_1951;Ljava/util/function/Function;)V method_12368 postProcess - f Lnet/minecraft/class_1923; field_12993 pos - f Ljava/util/function/Predicate; field_12991 filter - f [Lit/unimi/dsi/fastutil/shorts/ShortList; field_12990 packedPositions -c net/minecraft/class_2852 net/minecraft/world/chunk/storage/ChunkSerializer - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2818;)V method_12386 readEntities - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2806$class_2808; method_12377 getChunkStatus - m (Lnet/minecraft/class_1923;Ljava/lang/String;J)Z method_24029 func_227074_a_ - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2487;J)Ljava/util/Map; method_12392 func_235967_a_ - m (Lnet/minecraft/class_3611;)Z method_12391 func_222646_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_3485;Lnet/minecraft/class_4153;Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2839; method_12395 read - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2791;)Lnet/minecraft/class_2487; method_12410 write - m (Lnet/minecraft/class_2818;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_18091 func_222655_a - m (Lnet/minecraft/class_1923;Ljava/util/Map;Ljava/util/Map;)Lnet/minecraft/class_2487; method_12385 writeStructures - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)Ljava/util/Map; method_12387 unpackStructureReferences - m (ILnet/minecraft/class_2826;)Z method_12376 func_222657_a - m ([Lit/unimi/dsi/fastutil/shorts/ShortList;)Lnet/minecraft/class_2499; method_12393 toNbt - m (Lnet/minecraft/class_2248;)Z method_12396 func_222652_a - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2818;)V method_12388 func_222648_b - f Lorg/apache/logging/log4j/Logger; field_13001 LOGGER -c net/minecraft/class_4698 net/minecraft/world/chunk/storage/IOWorker - m (Lnet/minecraft/class_1923;)Lcom/mojang/datafixers/util/Either; method_27943 func_235980_b_ - m (Lnet/minecraft/class_3906;)V method_27942 func_235979_b_ - m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_23700 func_227090_a_ - m (Lnet/minecraft/class_3906;Ljava/util/function/Supplier;)V method_27939 func_235972_a_ - m (Ljava/util/function/Supplier;Lnet/minecraft/class_3906;)Lnet/minecraft/class_3847$class_3907; method_27941 func_235976_a_ - m (I)[Ljava/util/concurrent/CompletableFuture; method_23699 func_235970_a_ - m ()Lcom/mojang/datafixers/util/Either; method_27946 func_235983_d_ - m (Lnet/minecraft/class_4698$class_4699;)Ljava/util/concurrent/CompletableFuture; method_23705 func_235973_a_ - m (Lnet/minecraft/class_3906;)Lnet/minecraft/class_3847$class_3907; method_27938 func_235971_a_ - m ()Lcom/mojang/datafixers/util/Either; method_27947 func_235984_e_ - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)Ljava/util/concurrent/CompletableFuture; method_23703 func_227093_a_ - m (Ljava/lang/Void;)Ljava/util/concurrent/CompletionStage; method_27940 func_235974_a_ - m (Ljava/util/function/Supplier;)Ljava/util/concurrent/CompletableFuture; method_23709 func_235975_a_ - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_4698$class_4699;)V method_23701 func_227091_a_ - m ()V close close - m ()Ljava/util/concurrent/CompletableFuture; method_23698 func_227088_a_ - m ()V method_27945 func_235982_c_ - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1923;)Lnet/minecraft/class_4698$class_4699; method_23711 func_235977_a_ - m ()V method_23719 func_235978_b_ - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)Lcom/mojang/datafixers/util/Either; method_27944 func_235981_b_ - f Lorg/apache/logging/log4j/Logger; field_21495 LOGGER - f Ljava/util/concurrent/atomic/AtomicBoolean; field_21497 field_227082_c_ - f Lnet/minecraft/class_2867; field_21499 field_227084_e_ - f Ljava/util/Map; field_21500 field_227085_f_ - f Lnet/minecraft/class_3846; field_24468 field_235969_c_ -c net/minecraft/class_4698$class_5276 net/minecraft/world/chunk/storage/IOWorker$Priority - m ()[Lnet/minecraft/class_4698$class_5276; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4698$class_5276; valueOf valueOf - f Lnet/minecraft/class_4698$class_5276; field_24470 LOW - f [Lnet/minecraft/class_4698$class_5276; field_24471 $VALUES - f Lnet/minecraft/class_4698$class_5276; field_24469 HIGH -c net/minecraft/class_4698$class_4699 net/minecraft/world/chunk/storage/IOWorker$Entry - m (Lnet/minecraft/class_4698$class_4699;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_23724 func_227116_a_ - m (Lnet/minecraft/class_4698$class_4699;)Ljava/util/concurrent/CompletableFuture; method_23725 func_227117_b_ - m (Lnet/minecraft/class_4698$class_4699;)Lnet/minecraft/class_2487; method_23723 func_227115_a_ - f Ljava/util/concurrent/CompletableFuture; field_21504 field_227114_b_ - f Lnet/minecraft/class_2487; field_21503 field_227113_a_ -c net/minecraft/class_3977 net/minecraft/world/chunk/storage/ChunkLoader - m (Lnet/minecraft/class_5321;Ljava/util/function/Supplier;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_17907 func_235968_a_ - m (Lnet/minecraft/class_2487;)I method_17908 getDataVersion - m ()V close close - m ()V method_23697 func_227079_i_ - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)V method_17910 writeChunk - m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_23696 readChunk - f Lcom/mojang/datafixers/DataFixer; field_17655 dataFixer - f Lnet/minecraft/class_3360; field_17654 field_219167_a - f Lnet/minecraft/class_4698; field_21494 field_227077_a_ -c net/minecraft/class_4485 net/minecraft/world/chunk/storage/RegionBitmap - m (II)V method_21869 func_227121_b_ - m (II)V method_21868 func_227120_a_ - m (I)I method_21867 func_227119_a_ - f Ljava/util/BitSet; field_20433 field_227118_a_ -c net/minecraft/class_2864 net/minecraft/world/chunk/storage/ChunkLoaderUtil - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_2864$class_2865;Lnet/minecraft/class_2487;Lnet/minecraft/class_1966;)V method_12432 func_242708_a - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2864$class_2865; method_12433 load -c net/minecraft/class_2864$class_2865 net/minecraft/world/chunk/storage/ChunkLoaderUtil$AnvilConverterData - f Lnet/minecraft/class_2499; field_13041 tileTicks - f [B field_13048 blocks - f I field_13046 z - f J field_13043 lastUpdated - f I field_13047 x - f Lnet/minecraft/class_2832; field_13038 blockLight - f Lnet/minecraft/class_2832; field_13039 skyLight - f Lnet/minecraft/class_2499; field_13037 entities - f [B field_13045 heightmap - f Z field_13042 terrainPopulated - f Lnet/minecraft/class_2499; field_13040 tileEntities - f Lnet/minecraft/class_2832; field_13044 data -c net/minecraft/class_2867 net/minecraft/world/chunk/storage/RegionFileCache - m ()V close close - m ()V method_26982 func_235987_a_ - m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2861; method_12440 loadFile - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2487;)V method_23726 writeChunk - m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_17911 readChunk - f Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; field_17657 cache - f Ljava/io/File; field_18690 folder - f Z field_23748 field_235986_c_ -c net/minecraft/class_2861 net/minecraft/world/chunk/storage/RegionFile - m ()V close close - m (Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_22411 func_227139_a_ - m (II)I method_21872 func_227132_a_ - m (B)B method_22412 func_227141_b_ - m (Lnet/minecraft/class_1923;)Ljava/nio/file/Path; method_22413 func_227145_e_ - m ()V method_21870 func_227140_b_ - m ()V method_21877 func_227143_c_ - m (Lnet/minecraft/class_1923;Ljava/nio/ByteBuffer;)V method_21874 func_227135_a_ - m ()V method_26981 func_235985_a_ - m (Lnet/minecraft/class_1923;)I method_17909 getIndex - m (Ljava/nio/file/Path;Ljava/nio/ByteBuffer;)Lnet/minecraft/class_2861$class_4549; method_22410 func_227138_a_ - m (Lnet/minecraft/class_1923;)I method_12419 getOffset - m (Lnet/minecraft/class_1923;)Z method_21879 func_222662_b - m (Lnet/minecraft/class_1923;)Z method_12423 contains - m (Lnet/minecraft/class_1923;)Ljava/io/DataOutputStream; method_21881 func_222661_c - m (Lnet/minecraft/class_1923;BLjava/io/InputStream;)Ljava/io/DataInputStream; method_22409 func_227134_a_ - m (I)I method_21880 func_227144_c_ - m (Ljava/nio/ByteBuffer;I)Ljava/io/ByteArrayInputStream; method_21876 func_227137_a_ - m (Lnet/minecraft/class_2861;)Lnet/minecraft/class_4486; method_21875 func_227136_a_ - m (Lnet/minecraft/class_1923;B)Ljava/io/DataInputStream; method_22408 func_227133_a_ - m (Lnet/minecraft/class_1923;)V method_22414 func_227146_h_ - m (I)I method_21878 func_227142_b_ - m (Lnet/minecraft/class_1923;)Ljava/io/DataInputStream; method_21873 func_222666_a - m (I)I method_21871 func_227131_a_ - m (B)Z method_22407 func_227130_a_ - m ()Ljava/nio/ByteBuffer; method_22406 func_227129_a_ - f Ljava/nio/ByteBuffer; field_20435 field_227123_b_ - f Lnet/minecraft/class_4485; field_20441 field_227128_i_ - f Ljava/nio/IntBuffer; field_20440 chunkTimestamps - f Lorg/apache/logging/log4j/Logger; field_20434 LOGGER - f Lnet/minecraft/class_4486; field_20437 field_227125_e_ - f Ljava/nio/file/Path; field_20657 field_227124_d_ - f Ljava/nio/IntBuffer; field_20439 offsets - f Ljava/nio/channels/FileChannel; field_20436 dataFile - f Ljava/nio/ByteBuffer; field_20438 field_227126_f_ -c net/minecraft/class_2861$class_2862 net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer - m ()V close close - f Lnet/minecraft/class_1923; field_17656 pos - f Lnet/minecraft/class_2861; field_13035 field_76724_a -c net/minecraft/class_2861$class_4549 net/minecraft/world/chunk/storage/RegionFile$ICompleteCallback - m ()V run run -c net/minecraft/class_4180 net/minecraft/world/chunk/storage/RegionSectionCache - m (Lnet/minecraft/class_1923;)V method_20370 save - m (J)V method_19291 onSectionLoad - m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_20621 func_223138_c - m (J)V method_19288 markDirty - m (Ljava/util/Map;Lcom/mojang/serialization/DynamicOps;Ljava/lang/String;Ljava/lang/Object;)V method_28512 func_235994_a_ - m (Lcom/mojang/serialization/Dynamic;)I method_20369 func_235993_a_ - m (J)Ljava/util/Optional; method_19294 func_219113_d - m (J)Ljava/util/Optional; method_19293 func_219106_c - m (Lnet/minecraft/class_1923;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)V method_20368 func_235992_a_ - m ()V close close - m (Ljava/util/function/BooleanSupplier;)V method_19290 tick - m (Lnet/minecraft/class_1923;Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_20367 func_235991_a_ - m (JZLjava/lang/Object;)V method_20366 func_235990_a_ - m (J)Ljava/lang/Object; method_19295 func_235995_e_ - m (J)V method_19297 func_219109_g - m (J)V method_28513 func_235996_f_ - m (Lnet/minecraft/class_1923;)V method_20436 saveIfDirty - m (J)V method_19296 func_219104_f - m (JLcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_28511 func_235989_a_ - m (Lnet/minecraft/class_4076;)Z method_19292 func_219114_b - m (Lnet/minecraft/class_1923;)V method_19289 func_219107_b - f Lcom/mojang/datafixers/DataFixer; field_19228 field_219125_g - f Lit/unimi/dsi/fastutil/longs/LongLinkedOpenHashSet; field_18693 dirtySections - f Ljava/util/function/Function; field_24750 field_235988_e_ - f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_18692 data - f Ljava/util/function/Function; field_18695 field_219124_f - f Lnet/minecraft/class_4698; field_21505 field_227173_b_ - f Lnet/minecraft/class_4284; field_19229 field_219126_h - f Lorg/apache/logging/log4j/Logger; field_18691 LOGGER -c net/minecraft/class_4486 net/minecraft/world/chunk/storage/RegionFileVersion - m (I)Z method_21887 func_227170_b_ - m (Ljava/io/OutputStream;)Ljava/io/OutputStream; method_21886 func_227169_a_ - m (Ljava/io/OutputStream;)Ljava/io/OutputStream; method_21889 func_227172_b_ - m (Lnet/minecraft/class_4486;)Lnet/minecraft/class_4486; method_21884 func_227167_a_ - m (Ljava/io/InputStream;)Ljava/io/InputStream; method_21885 func_227168_a_ - m (Ljava/io/InputStream;)Ljava/io/InputStream; method_21888 func_227171_b_ - m ()I method_21882 func_227165_a_ - m (I)Lnet/minecraft/class_4486; method_21883 func_227166_a_ - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_20445 field_227161_d_ - f Lnet/minecraft/class_4486; field_20443 field_227159_b_ - f Lnet/minecraft/class_4486$class_4487; field_20448 field_227164_g_ - f Lnet/minecraft/class_4486; field_20444 field_227160_c_ - f I field_20446 field_227162_e_ - f Lnet/minecraft/class_4486; field_20442 field_227158_a_ - f Lnet/minecraft/class_4486$class_4487; field_20447 field_227163_f_ -c net/minecraft/class_4486$class_4487 net/minecraft/world/chunk/storage/RegionFileVersion$IWrapper - m (Ljava/lang/Object;)Ljava/lang/Object; wrap wrap -c net/minecraft/class_5363 net/minecraft/world/Dimension - m (JLnet/minecraft/class_2370;)Z method_29567 func_236060_a_ - m ()Lnet/minecraft/class_2794; method_29571 getChunkGenerator - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_29568 func_236061_a_ - m ()Lnet/minecraft/class_2874; method_29570 getDimensionType - m (Lnet/minecraft/class_2370;)Lnet/minecraft/class_2370; method_29569 func_236062_a_ - m ()Ljava/util/function/Supplier; method_29566 getDimensionTypeSupplier - f Lnet/minecraft/class_5321; field_25412 OVERWORLD - f Lnet/minecraft/class_2794; field_25417 chunkGenerator - f Lnet/minecraft/class_5321; field_25413 THE_NETHER - f Lnet/minecraft/class_5321; field_25414 THE_END - f Ljava/util/function/Supplier; field_25416 dimensionTypeSupplier - f Ljava/util/LinkedHashSet; field_25415 DIMENSION_KEYS - f Lcom/mojang/serialization/Codec; field_25411 CODEC -c net/minecraft/class_2874 net/minecraft/world/DimensionType - m (Lnet/minecraft/class_5321;Ljava/io/File;)Ljava/io/File; method_12488 getDimensionFolder - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_2874; method_29565 func_242719_b - m ()Lnet/minecraft/class_3494; method_29961 isInfiniBurn - m ()Ljava/lang/String; method_12489 getSuffix - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_28521 decodeWorldKey - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30640 func_242723_d - m (J)I method_28531 getMoonPhase - m (Ljava/util/Optional;)Ljava/util/OptionalLong; method_28525 func_236028_a_ - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;J)Lnet/minecraft/class_2794; method_28533 getEndChunkGenerator - m ()Z method_29960 doesFixedTimeExist - m (I)F method_28516 getAmbientLight - m ()Z method_28540 doesHasDragonFight - m (F)[F method_28515 defaultAmbientLightWorld - m (Lnet/minecraft/class_2874;)Ljava/util/OptionalLong; method_28538 func_236044_f_ - m ()Z method_29957 doesRespawnAnchorWorks - m (Lnet/minecraft/class_5455$class_5457;)Lnet/minecraft/class_5455$class_5457; method_28523 registerTypes - m (Ljava/util/OptionalLong;)Ljava/util/Optional; method_28526 func_236029_a_ - m ()Z method_29955 isPiglinSafe - m ()Z method_28537 isNatural - m ()I method_29959 getLogicalHeight - m (Lnet/minecraft/class_2874;)Ljava/lang/Float; method_28536 func_236042_a_ - m ()Z method_27998 getHasCeiling - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;J)Lnet/minecraft/class_2370; method_28517 getDefaultSimpleRegistry - m (Lnet/minecraft/class_2874;)Lnet/minecraft/class_2960; method_31180 func_242721_c - m ()D method_31110 getCoordinateScale - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_2874; method_29564 func_242716_a - m ()Lnet/minecraft/class_2960; method_31181 getEffects - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30639 func_242722_c - m (J)F method_28528 getCelestrialAngleByTime - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;J)Lnet/minecraft/class_2794; method_28535 getNetherChunkGenerator - m (Lnet/minecraft/class_2874;)Z method_31108 isSame - m ()Z method_29958 isHasRaids - m ()Z method_29956 doesBedWork - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28522 func_236026_a_ - m ()Lnet/minecraft/class_4545; method_22415 getMagnifier - m (Lnet/minecraft/class_2874;Lnet/minecraft/class_2874;)D method_31109 getCoordinateDifference - m ()Z method_27999 isUltrawarm - m (Lnet/minecraft/class_2874;)Lnet/minecraft/class_2960; method_29954 func_241508_b_ - m ()Z method_12491 hasSkyLight - f Z field_25615 hasRaids - f Lnet/minecraft/class_5321; field_24754 THE_NETHER - f Lnet/minecraft/class_2874; field_25407 OVERWORLD_TYPE - f Z field_25613 bedWorks - f Z field_24764 hasDragonFight - f Lnet/minecraft/class_2960; field_26752 OVERWORLD_ID - f Z field_24762 natural - f Z field_24504 hasCeiling - f Lnet/minecraft/class_2960; field_26754 THE_END_ID - f D field_26706 coordinateScale - f F field_24766 ambientLight - f Lnet/minecraft/class_2874; field_25408 NETHER_TYPE - f Lnet/minecraft/class_2960; field_26751 effects - f Lnet/minecraft/class_4545; field_20658 magnifier - f Z field_25614 respawnAnchorWorks - f Lnet/minecraft/class_5321; field_24753 OVERWORLD - f Lnet/minecraft/class_5321; field_24755 THE_END - f [F field_24752 MOON_PHASE_FACTORS - f Z field_25612 piglinSafe - f I field_25616 logicalHeight - f Ljava/util/OptionalLong; field_24761 fixedTime - f Lnet/minecraft/class_2960; field_26753 THE_NETHER_ID - f Lnet/minecraft/class_5321; field_25610 OVERWORLD_CAVES - f Lcom/mojang/serialization/Codec; field_24756 DIMENSION_TYPE_CODEC - f Z field_24505 ultrawarm - f Z field_13073 hasSkyLight - f [F field_24767 ambientWorldLight - f Lnet/minecraft/class_2874; field_25611 OVERWORLD_CAVES_TYPE - f Lnet/minecraft/class_2960; field_25617 infiniburn - f Lnet/minecraft/class_2874; field_25409 END_TYPE - f Lcom/mojang/serialization/Codec; field_24757 CODEC -c net/minecraft/class_2881 net/minecraft/world/end/DragonFightManager - m (Z)V method_12518 generatePortal - m ()V method_12519 spawnNewGateway - m ()Z method_12533 isFightAreaLoaded - m ()V method_12520 updatePlayers - m ()V method_12535 findAliveCrystals - m (Lnet/minecraft/class_1510;)V method_12532 dragonUpdate - m (Lnet/minecraft/class_1510;)V method_12528 processDragonDeath - m ()Z method_12514 exitPortalExists - m ()V method_12525 findOrCreateDragon - m ()V method_12515 scanForLegacyFight - m (Lnet/minecraft/class_2876;)V method_12521 setRespawnState - m ()Lnet/minecraft/class_2487; method_12530 write - m ()Z method_12536 hasPreviouslyKilledDragon - m ()Lnet/minecraft/class_2700$class_2702; method_12531 findExitPortal - m ()V method_12524 resetSpikeCrystals - m ()V method_12522 tryRespawnDragon - m (Ljava/util/List;)V method_12529 respawnDragon - m ()V method_12538 tick - m (Lnet/minecraft/class_2338;)V method_12516 generateGateway - m ()I method_12517 getNumAliveCrystals - m ()Lnet/minecraft/class_1510; method_12523 createNewDragon - m (Lnet/minecraft/class_1511;Lnet/minecraft/class_1282;)V method_12526 onCrystalDestroyed - f Lnet/minecraft/class_3218; field_13108 world - f Z field_13111 scanForLegacyFight - f Z field_13114 previouslyKilled - f Z field_13115 dragonKilled - f Lnet/minecraft/class_2876; field_13120 respawnState - f I field_13118 respawnStateTicks - f Ljava/util/UUID; field_13116 dragonUniqueId - f Ljava/util/function/Predicate; field_13113 VALID_PLAYER - f Lnet/minecraft/class_2700; field_13110 portalPattern - f Lorg/apache/logging/log4j/Logger; field_13112 LOGGER - f Ljava/util/List; field_13109 crystals - f Lnet/minecraft/class_2338; field_13117 exitPortalLocation - f I field_13122 ticksSinceLastPlayerScan - f Lnet/minecraft/class_3213; field_13119 bossInfo - f I field_13105 ticksSinceCrystalsScanned - f I field_13107 ticksSinceDragonSeen - f I field_13106 aliveCrystals - f Ljava/util/List; field_13121 gateways -c net/minecraft/class_2876 net/minecraft/world/end/DragonSpawnState - m ()[Lnet/minecraft/class_2876; values values - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2881;Ljava/util/List;ILnet/minecraft/class_2338;)V method_12507 process - m (Ljava/lang/String;)Lnet/minecraft/class_2876; valueOf valueOf - f Lnet/minecraft/class_2876; field_13094 SUMMONING_PILLARS - f Lnet/minecraft/class_2876; field_13095 PREPARING_TO_SUMMON_PILLARS - f Lnet/minecraft/class_2876; field_13098 SUMMONING_DRAGON - f [Lnet/minecraft/class_2876; field_13096 $VALUES - f Lnet/minecraft/class_2876; field_13097 START - f Lnet/minecraft/class_2876; field_13099 END -c net/minecraft/class_2876$1 net/minecraft/world/end/DragonSpawnState$1 -c net/minecraft/class_2876$5 net/minecraft/world/end/DragonSpawnState$5 -c net/minecraft/class_2876$4 net/minecraft/world/end/DragonSpawnState$4 -c net/minecraft/class_2876$3 net/minecraft/world/end/DragonSpawnState$3 -c net/minecraft/class_2876$2 net/minecraft/world/end/DragonSpawnState$2 -c net/minecraft/class_5432 net/minecraft/world/gen/IDecoratable - m (I)Ljava/lang/Object; method_30372 chance - m (Lnet/minecraft/class_5428;)Ljava/lang/Object; method_30373 func_242730_a - m ()Ljava/lang/Object; method_30371 square - m (I)Ljava/lang/Object; method_30377 range - m (Lnet/minecraft/class_3243;)Ljava/lang/Object; method_30374 withPlacement - m (I)Ljava/lang/Object; method_30376 func_242732_c - m (I)Ljava/lang/Object; method_30375 func_242731_b -c net/minecraft/class_2891 net/minecraft/world/gen/DebugChunkGenerator - m (Lnet/minecraft/class_2248;)Ljava/util/stream/Stream; method_12579 func_236067_a_ - m ()Lnet/minecraft/class_2378; method_31169 func_242727_g - m (II)Lnet/minecraft/class_2680; method_12578 getBlockStateFor - f Ljava/util/List; field_13163 ALL_VALID_STATES - f Lcom/mojang/serialization/Codec; field_24768 field_236066_e_ - f I field_13161 GRID_WIDTH - f Lnet/minecraft/class_2378; field_26747 field_242726_j - f Lnet/minecraft/class_2680; field_13164 BARRIER - f Lnet/minecraft/class_2680; field_13162 AIR - f I field_13160 GRID_HEIGHT -c net/minecraft/class_2893 net/minecraft/world/gen/GenerationStage -c net/minecraft/class_2893$class_2895 net/minecraft/world/gen/GenerationStage$Decoration - m ()[Lnet/minecraft/class_2893$class_2895; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2893$class_2895; valueOf valueOf - f Lnet/minecraft/class_2893$class_2895; field_13172 UNDERGROUND_STRUCTURES - f [Lnet/minecraft/class_2893$class_2895; field_13181 $VALUES - f Lnet/minecraft/class_2893$class_2895; field_13178 VEGETAL_DECORATION - f Lnet/minecraft/class_2893$class_2895; field_13177 UNDERGROUND_DECORATION - f Lnet/minecraft/class_2893$class_2895; field_13171 LOCAL_MODIFICATIONS - f Lnet/minecraft/class_2893$class_2895; field_25186 LAKES - f Lnet/minecraft/class_2893$class_2895; field_13176 UNDERGROUND_ORES - f Lnet/minecraft/class_2893$class_2895; field_25187 STRONGHOLDS - f Lnet/minecraft/class_2893$class_2895; field_13174 RAW_GENERATION - f Lnet/minecraft/class_2893$class_2895; field_13179 TOP_LAYER_MODIFICATION - f Lnet/minecraft/class_2893$class_2895; field_13173 SURFACE_STRUCTURES -c net/minecraft/class_2893$class_2894 net/minecraft/world/gen/GenerationStage$Carving - m ()[Lnet/minecraft/class_2893$class_2894; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2893$class_2894; valueOf valueOf - m (Lnet/minecraft/class_2893$class_2894;)Lnet/minecraft/class_2893$class_2894; method_12580 func_222672_a - m ()Ljava/lang/String; method_12581 getName - m (Ljava/lang/String;)Lnet/minecraft/class_2893$class_2894; method_28546 getByName - f Lnet/minecraft/class_2893$class_2894; field_13169 AIR - f [Lnet/minecraft/class_2893$class_2894; field_13170 $VALUES - f Ljava/lang/String; field_13167 name - f Lcom/mojang/serialization/Codec; field_24770 CODEC - f Ljava/util/Map; field_13168 BY_NAME - f Lnet/minecraft/class_2893$class_2894; field_13166 LIQUID -c net/minecraft/class_2897 net/minecraft/world/gen/FlatChunkGenerator - m (I)[Lnet/minecraft/class_2680; method_28001 func_236071_a_ - m ()Lnet/minecraft/class_3232; method_28545 func_236073_g_ - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_28002 func_236072_a_ - f Lcom/mojang/serialization/Codec; field_24769 field_236069_d_ - f Lnet/minecraft/class_3232; field_24510 field_236070_e_ -c net/minecraft/class_3754 net/minecraft/world/gen/NoiseChunkGenerator - m ([DII)V method_16405 fillNoiseColumn - m (III)D method_16571 func_222554_b - m (III)D method_16572 func_222556_a - m (Lnet/minecraft/class_2791;Ljava/util/Random;)V method_16412 makeBedrock - m (Lnet/minecraft/class_1923;Lit/unimi/dsi/fastutil/objects/ObjectList;IILit/unimi/dsi/fastutil/objects/ObjectList;Lnet/minecraft/class_3449;)V method_26983 func_236089_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28550 func_236091_a_ - m ([F)V method_28551 func_236092_a_ - m (Lnet/minecraft/class_3754;)Lnet/minecraft/class_1966; method_28554 func_236096_c_ - m ([F)V method_16573 func_236094_b_ - m (II[Lnet/minecraft/class_2680;Ljava/util/function/Predicate;)I method_26263 func_236087_a_ - m (DI)Lnet/minecraft/class_2680; method_26262 func_236086_a_ - m (Lnet/minecraft/class_3754;)Ljava/lang/Long; method_28552 func_236093_b_ - m (Lnet/minecraft/class_3754;)Ljava/util/function/Supplier; method_28549 func_236090_a_ - m (II)D method_28553 func_236095_c_ - m (II)[D method_16406 func_222547_b - m (JLnet/minecraft/class_5321;)Z method_28548 func_236088_a_ - m (IIIDDDD)D method_16411 func_222552_a - f Lnet/minecraft/class_3537; field_24776 field_236082_u_ - f Lnet/minecraft/class_3537; field_16575 field_222570_q - f I field_16579 noiseSizeY - f I field_16578 noiseSizeZ - f I field_16580 noiseSizeX - f Lnet/minecraft/class_3537; field_16581 field_222569_p - f Lnet/minecraft/class_3757; field_16571 surfaceDepthNoise - f Lnet/minecraft/class_3537; field_16574 field_222568_o - f I field_16570 horizontalNoiseGranularity - f Ljava/util/function/Supplier; field_24774 field_236080_h_ - f I field_16572 verticalNoiseGranularity - f Lcom/mojang/serialization/Codec; field_24773 field_236079_d_ - f [F field_16649 field_222561_h - f [F field_24775 field_236081_j_ - f Lnet/minecraft/class_2680; field_16648 AIR - f Lnet/minecraft/class_2680; field_16573 defaultFluid - f Lnet/minecraft/class_2680; field_16576 defaultBlock - f Lnet/minecraft/class_3541; field_24777 field_236083_v_ - f J field_24778 field_236084_w_ - f I field_24779 field_236085_x_ - f Lnet/minecraft/class_2919; field_16577 randomSeed -c net/minecraft/class_2902 net/minecraft/world/gen/Heightmap - m (I)I method_12601 getHeight - m (II)I method_12603 getHeight - m ()Ljava/util/function/Predicate; method_16681 func_222686_c - m (IIILnet/minecraft/class_2680;)Z method_12597 update - m ()Ljava/util/function/Predicate; method_16683 func_222687_b - m (III)V method_12602 set - m (II)I method_12595 getDataArrayIndex - m ()[J method_12598 getDataArray - m (Lnet/minecraft/class_2680;)Z method_16682 func_222688_b - m (Lnet/minecraft/class_2680;)Z method_16680 func_222689_a - m (Lnet/minecraft/class_2791;Ljava/util/Set;)V method_16684 updateChunkHeightmaps - m ([J)V method_12600 setDataArray - f Lnet/minecraft/class_2791; field_13191 chunk - f Lnet/minecraft/class_3508; field_13192 data - f Ljava/util/function/Predicate; field_13193 heightLimitPredicate - f Ljava/util/function/Predicate; field_16745 BLOCKS_MOVEMENT - f Ljava/util/function/Predicate; field_16744 IS_NOT_AIR -c net/minecraft/class_2902$class_2903 net/minecraft/world/gen/Heightmap$Type - m ()Ljava/lang/String; method_12605 getId - m (Lnet/minecraft/class_2680;)Z method_16685 func_222680_b - m (Lnet/minecraft/class_2680;)Z method_16686 func_222682_a - m ()Z method_16137 isUsageClient - m ()Ljava/util/function/Predicate; method_16402 getHeightLimitPredicate - m (Ljava/lang/String;)Lnet/minecraft/class_2902$class_2903; method_12609 getTypeFromId - m (Ljava/lang/String;)Lnet/minecraft/class_2902$class_2903; valueOf valueOf - m ()[Lnet/minecraft/class_2902$class_2903; values values - m ()Z method_20454 isUsageNotWorldgen - m (Ljava/util/HashMap;)V method_12608 func_222679_a - f Lnet/minecraft/class_2902$class_2903; field_13197 MOTION_BLOCKING - f Lnet/minecraft/class_2902$class_2903; field_13203 MOTION_BLOCKING_NO_LEAVES - f Ljava/lang/String; field_13204 id - f Lnet/minecraft/class_2902$class_2903; field_13202 WORLD_SURFACE - f Lnet/minecraft/class_2902$class_2903; field_13195 OCEAN_FLOOR_WG - f Lnet/minecraft/class_2902$class_2903; field_13200 OCEAN_FLOOR - f [Lnet/minecraft/class_2902$class_2903; field_13199 $VALUES - f Ljava/util/function/Predicate; field_16568 heightLimitPredicate - f Lnet/minecraft/class_2902$class_2903; field_13194 WORLD_SURFACE_WG - f Lcom/mojang/serialization/Codec; field_24772 CODEC - f Lnet/minecraft/class_2902$class_2904; field_13198 usage - f Ljava/util/Map; field_13205 BY_ID -c net/minecraft/class_2902$class_2904 net/minecraft/world/gen/Heightmap$Usage - m ()[Lnet/minecraft/class_2902$class_2904; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2902$class_2904; valueOf valueOf - f [Lnet/minecraft/class_2902$class_2904; field_13208 $VALUES - f Lnet/minecraft/class_2902$class_2904; field_13206 LIVE_WORLD - f Lnet/minecraft/class_2902$class_2904; field_16424 CLIENT - f Lnet/minecraft/class_2902$class_2904; field_13207 WORLDGEN -c net/minecraft/class_5308 net/minecraft/world/gen/settings/ScalingSettings - m ()D method_28576 func_236151_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28577 func_236152_a_ - m ()D method_28580 func_236155_d_ - m ()D method_28579 func_236154_c_ - m ()D method_28578 func_236153_b_ - f D field_24801 field_236148_d_ - f D field_24802 field_236149_e_ - f D field_24800 field_236147_c_ - f Lcom/mojang/serialization/Codec; field_24799 field_236145_a_ - f Lcom/mojang/serialization/Codec; field_25188 field_236146_b_ - f D field_24803 field_236150_f_ -c net/minecraft/class_5284 net/minecraft/world/gen/DimensionSettings - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28558 func_236112_a_ - m (Lnet/minecraft/class_5321;)Z method_28555 func_242744_a - m ()I method_28561 func_236119_g_ - m ()Lnet/minecraft/class_5284; method_31111 func_242746_i - m ()I method_16401 func_236118_f_ - m ()I method_16400 func_236117_e_ - m (Lnet/minecraft/class_5311;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2960;ZZ)Lnet/minecraft/class_5284; method_30642 func_242742_a - m ()Lnet/minecraft/class_2680; method_28006 getDefaultFluid - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_5284;)Lnet/minecraft/class_5284; method_30644 func_242745_a - m ()Lnet/minecraft/class_2680; method_28005 getDefaultBlock - m ()Lnet/minecraft/class_5309; method_28559 getNoise - m ()Lnet/minecraft/class_5311; method_28007 getStructures - m (Lnet/minecraft/class_5311;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2960;)Lnet/minecraft/class_5284; method_30641 func_242741_a - m ()Z method_28562 func_236120_h_ - m (Lnet/minecraft/class_5311;ZLnet/minecraft/class_2960;)Lnet/minecraft/class_5284; method_30643 func_242743_a - f Lcom/mojang/serialization/Codec; field_24781 field_236098_b_ - f I field_24785 field_236105_i_ - f I field_24784 field_236104_h_ - f Lnet/minecraft/class_5284; field_26707 field_242740_q - f I field_24783 field_236103_g_ - f Lnet/minecraft/class_2680; field_24515 defaultFluid - f Lnet/minecraft/class_2680; field_24514 defaultBlock - f Lcom/mojang/serialization/Codec; field_24780 field_236097_a_ - f Lnet/minecraft/class_5309; field_24782 noise - f Lnet/minecraft/class_5321; field_26355 field_242734_c - f Lnet/minecraft/class_5321; field_26356 field_242735_d - f Lnet/minecraft/class_5311; field_24516 structures - f Lnet/minecraft/class_5321; field_26357 field_242736_e - f Z field_24786 field_236106_j_ - f Lnet/minecraft/class_5321; field_26359 field_242738_g - f Lnet/minecraft/class_5321; field_26358 field_242737_f - f Lnet/minecraft/class_5321; field_26360 field_242739_h -c net/minecraft/class_5310 net/minecraft/world/gen/settings/SlideSettings - m ()I method_28597 func_236189_c_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28595 func_236187_a_ - m ()I method_28596 func_236188_b_ - m ()I method_28594 func_236186_a_ - f I field_24818 field_236183_b_ - f Lcom/mojang/serialization/Codec; field_24817 field_236182_a_ - f I field_24819 field_236184_c_ - f I field_24820 field_236185_d_ -c net/minecraft/class_5309 net/minecraft/world/gen/settings/NoiseSettings - m ()D method_28589 func_236177_h_ - m ()I method_28587 func_236175_f_ - m ()I method_28586 func_236174_e_ - m ()D method_28588 func_236176_g_ - m ()I method_28581 func_236169_a_ - m ()Z method_28592 func_236180_k_ - m ()Z method_28593 func_236181_l_ - m ()Z method_28591 func_236179_j_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28582 func_236170_a_ - m ()Z method_28590 func_236178_i_ - m ()Lnet/minecraft/class_5310; method_28585 func_236173_d_ - m ()Lnet/minecraft/class_5310; method_28584 func_236172_c_ - m ()Lnet/minecraft/class_5308; method_28583 func_236171_b_ - f Lnet/minecraft/class_5310; field_24807 field_236159_d_ - f Lnet/minecraft/class_5308; field_24806 field_236158_c_ - f D field_24812 field_236164_i_ - f D field_24811 field_236163_h_ - f I field_24809 field_236161_f_ - f Lcom/mojang/serialization/Codec; field_24804 field_236156_a_ - f I field_24810 field_236162_g_ - f I field_24805 field_236157_b_ - f Z field_24816 field_236168_m_ - f Z field_24814 field_236166_k_ - f Z field_24815 field_236167_l_ - f Z field_24813 field_236165_j_ - f Lnet/minecraft/class_5310; field_24808 field_236160_e_ -c net/minecraft/class_2910 net/minecraft/world/spawner/PhantomSpawner - f I field_13244 ticksUntilSpawn -c net/minecraft/class_3769 net/minecraft/world/spawner/PatrolSpawner - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/util/Random;Z)Z method_16575 spawnPatroller - f I field_16652 field_222698_b -c net/minecraft/class_5285 net/minecraft/world/gen/settings/DimensionGeneratorSettings - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;J)Lnet/minecraft/class_3754; method_28604 func_242750_a - m ()Lcom/google/common/collect/ImmutableSet; method_29575 func_236226_g_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28606 func_236214_a_ - m ()Z method_28033 func_236227_h_ - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;)Lnet/minecraft/class_5285; method_28009 func_242751_a - m ()Lnet/minecraft/class_2370; method_28609 func_236224_e_ - m ()Lnet/minecraft/class_2794; method_28032 func_236225_f_ - m (Lnet/minecraft/class_2370;Ljava/util/function/Supplier;Lnet/minecraft/class_2794;)Lnet/minecraft/class_2370; method_29962 func_241520_a_ - m ()Z method_28030 hasBonusChest - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2370;Lnet/minecraft/class_2794;)Lnet/minecraft/class_2370; method_28608 func_242749_a - m ()Z method_28029 doesGenerateFeatures - m (Lnet/minecraft/class_5455;)Lnet/minecraft/class_5285; method_31112 func_242752_a - m (ZLjava/util/OptionalLong;)Lnet/minecraft/class_5285; method_28024 create - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30647 func_242758_d - m (Lnet/minecraft/class_5455;Ljava/util/Properties;)Lnet/minecraft/class_5285; method_28021 func_242753_a - m ()J method_28028 getSeed - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30646 func_242756_b - m (Ljava/util/Map$Entry;)Lnet/minecraft/class_5321; method_29574 func_236218_a - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30645 func_242748_a - m ()Lcom/mojang/serialization/DataResult; method_28610 func_236233_n_ - m ()Z method_28611 func_236234_o_ - m (Lnet/minecraft/class_5363;Lnet/minecraft/class_2378;)Lnet/minecraft/class_2874; method_29572 func_242747_a - m ()Lnet/minecraft/class_5285; method_28038 func_236232_m_ - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_3232; method_31170 func_242757_c - m (Lnet/minecraft/class_5285;)Ljava/util/Optional; method_28605 func_236213_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_28607 func_236217_a - m ()Lnet/minecraft/class_5285; method_28037 func_236231_l_ - m ()Z method_28035 func_236229_j_ - m ()Z method_28034 func_236228_i_ - m ()Lnet/minecraft/class_5285; method_28036 func_236230_k_ - f Lnet/minecraft/class_2370; field_24827 field_236208_h_ - f Z field_24528 bonusChest - f Z field_24527 generateFeatures - f Lcom/mojang/serialization/Codec; field_24826 field_236201_a_ - f J field_24526 seed - f Lorg/apache/logging/log4j/Logger; field_24525 LOGGER - f Ljava/util/Optional; field_24532 field_236209_i_ -c net/minecraft/class_5311 net/minecraft/world/gen/settings/DimensionStructuresSettings - m ()Ljava/util/Map; method_28598 func_236195_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28601 func_236198_a_ - m (Lnet/minecraft/class_3195;)Lnet/minecraft/class_5314; method_28600 func_236197_a_ - m (Lnet/minecraft/class_5311;)Ljava/util/Map; method_28599 func_236196_a_ - m (Lnet/minecraft/class_5311;)Ljava/util/Optional; method_28603 func_236200_b_ - m ()Lnet/minecraft/class_5313; method_28602 func_236199_b_ - f Lcom/mojang/serialization/Codec; field_24821 field_236190_a_ - f Ljava/util/Map; field_24824 field_236193_d_ - f Lnet/minecraft/class_5313; field_24823 field_236192_c_ - f Lcom/google/common/collect/ImmutableMap; field_24822 field_236191_b_ - f Lnet/minecraft/class_5313; field_24825 field_236194_e_ -c net/minecraft/class_2918 net/minecraft/world/gen/carver/CanyonWorldCarver - m (Lnet/minecraft/class_2791;Ljava/util/function/Function;JIIIDDDFFFIIDLjava/util/BitSet;)V method_12657 func_227204_a_ - m (Ljava/util/Random;IILnet/minecraft/class_3133;)Z method_12658 shouldCarve - m (Lnet/minecraft/class_2791;Ljava/util/function/Function;Ljava/util/Random;IIIIILjava/util/BitSet;Lnet/minecraft/class_3133;)Z method_12656 carveRegion - f [F field_13275 field_202536_i -c net/minecraft/class_2919 net/minecraft/util/SharedSeedRandom - m (IIJJ)Ljava/util/Random; method_12662 seedSlimeChunk - m (I)I next next - m (JII)J method_12663 setLargeFeatureSeed - m (II)J method_12659 setBaseChunkSeed - m (JIII)J method_12665 setLargeFeatureSeedWithSalt - m (JII)J method_12664 setFeatureSeed - m (JII)J method_12661 setDecorationSeed - m (I)V method_12660 skip - f I field_13276 usageCount -c net/minecraft/class_2925 net/minecraft/world/gen/carver/CaveWorldCarver - m (Lnet/minecraft/class_2791;Ljava/util/function/Function;Ljava/util/Random;IIIIILjava/util/BitSet;Lnet/minecraft/class_3133;)Z method_12673 carveRegion - m ()I method_16577 func_230357_a_ - m ()D method_16578 func_230360_b_ - m (Ljava/util/Random;)F method_16576 func_230359_a_ - m (Lnet/minecraft/class_2791;Ljava/util/function/Function;JIIIDDDFFFIIDLjava/util/BitSet;)V method_12675 func_227206_a_ - m (Ljava/util/Random;)I method_16579 func_230361_b_ - m (Ljava/util/Random;IILnet/minecraft/class_3133;)Z method_12676 shouldCarve - m (Lnet/minecraft/class_2791;Ljava/util/function/Function;JIIIDDDFDLjava/util/BitSet;)V method_12674 func_227205_a_ -c net/minecraft/class_2920 net/minecraft/world/gen/carver/ICarverConfig - f Lnet/minecraft/class_2932; field_13277 field_214644_a -c net/minecraft/class_2934 net/minecraft/world/gen/carver/NetherCaveCarver -c net/minecraft/class_2922 net/minecraft/world/gen/carver/ConfiguredCarver - m (Ljava/util/Random;II)Z method_12669 shouldCarve - m (Lnet/minecraft/class_2922;)Lnet/minecraft/class_2939; method_28612 func_236236_a_ - m (Lnet/minecraft/class_2791;Ljava/util/function/Function;Ljava/util/Random;IIIIILjava/util/BitSet;)Z method_12668 carveRegion - m ()Lnet/minecraft/class_2920; method_30378 func_242760_a - f Lnet/minecraft/class_2939; field_13279 carver - f Lcom/mojang/serialization/Codec; field_25832 field_236235_a_ - f Lcom/mojang/serialization/Codec; field_26755 field_242759_c - f Lcom/mojang/serialization/Codec; field_24828 field_244390_b_ - f Lnet/minecraft/class_2920; field_13278 config -c net/minecraft/class_2932 net/minecraft/world/gen/carver/EmptyCarverConfig - m ()Lnet/minecraft/class_2932; method_28613 func_236239_a_ - f Lcom/mojang/serialization/Codec; field_24829 field_236237_b_ - f Lnet/minecraft/class_2932; field_24830 field_236238_c_ -c net/minecraft/class_2936 net/minecraft/world/gen/carver/UnderwaterCaveWorldCarver - m (Lnet/minecraft/class_2939;Lnet/minecraft/class_2791;Ljava/util/BitSet;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;IIIIIIII)Z method_16138 func_222728_a -c net/minecraft/class_2938 net/minecraft/world/gen/carver/UnderwaterCanyonWorldCarver -c net/minecraft/class_2939 net/minecraft/world/gen/carver/WorldCarver - m (Lnet/minecraft/class_2680;)Z method_12709 isCarvable - m (IIIIII)Z method_12706 isOnEdge - m (DDDI)Z method_16582 func_222708_a - m (Lnet/minecraft/class_2791;IIIIIIII)Z method_12711 func_222700_a - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)Z method_12703 canCarveBlock - m ()I method_12710 func_222704_c - m (Lnet/minecraft/class_2791;Ljava/util/function/Function;Ljava/util/BitSet;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2338$class_2339;IIIIIIIILorg/apache/commons/lang3/mutable/MutableBoolean;)Z method_16581 carveBlock - m (Lnet/minecraft/class_2920;)Lnet/minecraft/class_2922; method_28614 func_242761_a - m (Ljava/lang/String;Lnet/minecraft/class_2939;)Lnet/minecraft/class_2939; method_12704 register - m (Lnet/minecraft/class_2791;Ljava/util/function/Function;Ljava/util/Random;IIIIILjava/util/BitSet;Lnet/minecraft/class_2920;)Z method_12702 carveRegion - m (Lnet/minecraft/class_2791;Ljava/util/function/Function;JIIIDDDDDLjava/util/BitSet;)Z method_16580 func_227208_a_ - m (IIDDIIF)Z method_12707 func_222702_a - m (Ljava/util/Random;IILnet/minecraft/class_2920;)Z method_12705 shouldCarve - m ()Lcom/mojang/serialization/Codec; method_28616 getCodec - f Lnet/minecraft/class_2939; field_13303 UNDERWATER_CANYON - f Lnet/minecraft/class_2939; field_13297 NETHER_CAVE - f Ljava/util/Set; field_13302 carvableBlocks - f Ljava/util/Set; field_13298 carvableFluids - f Lnet/minecraft/class_2939; field_13295 CANYON - f I field_16653 maxHeight - f Lnet/minecraft/class_2939; field_13304 CAVE - f Lnet/minecraft/class_3610; field_13296 LAVA - f Lnet/minecraft/class_3610; field_13305 WATER - f Lnet/minecraft/class_2680; field_13294 CAVE_AIR - f Lnet/minecraft/class_2680; field_13301 AIR - f Lcom/mojang/serialization/Codec; field_24831 codec - f Lnet/minecraft/class_2939; field_13300 UNDERWATER_CAVE -c net/minecraft/class_4625 net/minecraft/world/gen/feature/AbstractBigMushroomFeature - m (Ljava/util/Random;)I method_23377 func_227211_a_ - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4635;ILnet/minecraft/class_2338$class_2339;)V method_23376 func_227210_a_ - m (IIII)I method_23372 func_225563_a_ - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;ILnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_4635;)Z method_23374 func_227209_a_ - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4635;)Z method_23373 generate - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;ILnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_4635;)V method_23375 func_225564_a_ -c net/minecraft/class_4624 net/minecraft/world/gen/feature/FlowersFeature - m (Lnet/minecraft/class_3037;)I method_23370 getFlowerCount - m (Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3037;)Lnet/minecraft/class_2338; method_23371 getNearbyPos - m (Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3037;)Lnet/minecraft/class_2680; method_13175 getFlowerToPlace - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_3037;)Z method_23369 isValidPosition -c net/minecraft/class_5153 net/minecraft/world/gen/feature/BasaltColumnFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_5156;)Z method_27097 generate - m (Lnet/minecraft/class_1936;ILnet/minecraft/class_2338$class_2339;)Z method_30379 func_242762_a - m (Lnet/minecraft/class_1936;ILnet/minecraft/class_2338;II)Z method_27096 func_236248_a_ - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338$class_2339;I)Lnet/minecraft/class_2338; method_27098 func_236249_a_ - m (Lnet/minecraft/class_1936;ILnet/minecraft/class_2338;)Z method_27095 func_236247_a_ - m (Lnet/minecraft/class_1936;ILnet/minecraft/class_2338$class_2339;I)Lnet/minecraft/class_2338; method_27094 func_236246_a_ - f Lcom/google/common/collect/ImmutableList; field_24132 field_236245_a_ -c net/minecraft/class_2942 net/minecraft/world/gen/feature/BambooFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3133;)Z method_12718 generate - f Lnet/minecraft/class_2680; field_13311 BAMBOO_LARGE_LEAVES_GROWN - f Lnet/minecraft/class_2680; field_13310 BAMBOO_LARGE_LEAVES - f Lnet/minecraft/class_2680; field_13308 BAMBOO_BASE - f Lnet/minecraft/class_2680; field_13309 BAMBOO_SMALL_LEAVES -c net/minecraft/class_3011 net/minecraft/world/gen/feature/AbstractSphereReplaceConfig - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3013;)Z method_13005 generate -c net/minecraft/class_4779 net/minecraft/world/gen/feature/BasaltPillarFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_24433 generate - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_24434 func_236252_a_ - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;)Z method_24435 func_236253_b_ -c net/minecraft/class_2950 net/minecraft/world/gen/feature/BlockBlobFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2963;)Z method_12813 generate -c net/minecraft/class_5175 net/minecraft/world/gen/feature/structure/BastionRemantsStructure - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3812;)Z method_28617 func_230363_a_ -c net/minecraft/class_2954 net/minecraft/world/gen/feature/BlueIceFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_12818 generate -c net/minecraft/class_3805 net/minecraft/world/gen/feature/BlockPileFeature - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_16707 canPlaceOn - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4634;)Z method_16709 generate - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/Random;Lnet/minecraft/class_4634;)V method_16708 func_227225_a_ -c net/minecraft/class_2956 net/minecraft/world/gen/feature/structure/BuriedTreasureStructure - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3133;)Z method_28619 func_230363_a_ -c net/minecraft/class_2956$class_2957 net/minecraft/world/gen/feature/structure/BuriedTreasureStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3133;)V method_28620 func_230364_a_ -c net/minecraft/class_2953 net/minecraft/world/gen/feature/BonusChestFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_12817 generate -c net/minecraft/class_2975 net/minecraft/world/gen/feature/ConfiguredFeature - m ()Ljava/util/stream/Stream; method_30648 func_242768_d - m ()Lnet/minecraft/class_3037; method_30381 getConfig - m (F)Lnet/minecraft/class_3226; method_23387 withChance - m (Lnet/minecraft/class_3243;)Lnet/minecraft/class_2975; method_23388 withPlacement - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;)Z method_12862 generate - m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_3031; method_28621 func_236266_a_ - m ()Lnet/minecraft/class_2975; method_30383 func_242769_e - m ()Lnet/minecraft/class_3031; method_30380 getFeature - f Lnet/minecraft/class_3037; field_13375 config - f Lcom/mojang/serialization/Codec; field_24833 field_236264_b_ - f Lcom/mojang/serialization/Codec; field_25833 field_242763_a - f Lorg/apache/logging/log4j/Logger; field_21589 LOGGER - f Lcom/mojang/serialization/Codec; field_26756 field_242764_c - f Lnet/minecraft/class_3031; field_13376 feature -c net/minecraft/class_2964 net/minecraft/world/gen/feature/ChorusPlantFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_12843 generate -c net/minecraft/class_2972 net/minecraft/world/gen/feature/CoralClawFeature -c net/minecraft/class_5312 net/minecraft/world/gen/feature/StructureFeature - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;Lnet/minecraft/class_3485;JLnet/minecraft/class_1923;Lnet/minecraft/class_1959;ILnet/minecraft/class_5314;)Lnet/minecraft/class_3449; method_28622 func_242771_a - m (Lnet/minecraft/class_5312;)Lnet/minecraft/class_3195; method_28623 func_236271_a_ - f Lnet/minecraft/class_3195; field_24835 field_236268_b_ - f Lcom/mojang/serialization/Codec; field_24834 field_244391_b_ - f Lcom/mojang/serialization/Codec; field_25834 field_236267_a_ - f Lnet/minecraft/class_3037; field_24836 field_236269_c_ - f Lcom/mojang/serialization/Codec; field_26757 field_242770_c -c net/minecraft/class_2977 net/minecraft/world/gen/feature/CoralMushroomFeature -c net/minecraft/class_2978 net/minecraft/world/gen/feature/CoralFeature - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_12863 func_204623_a - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_12864 func_204624_b - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_12865 generate -c net/minecraft/class_2988 net/minecraft/world/gen/feature/DecoratedFeature - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2986;Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lorg/apache/commons/lang3/mutable/MutableBoolean;Lnet/minecraft/class_2338;)V method_30384 func_242772_a - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2986;)Z method_12892 generate -c net/minecraft/class_2979 net/minecraft/world/gen/feature/CoralTreeFeature -c net/minecraft/class_3001 net/minecraft/world/gen/feature/DefaultFlowersFeature - m (Lnet/minecraft/class_4638;)I method_23391 getFlowerCount - m (Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4638;)Lnet/minecraft/class_2680; method_23393 getFlowerToPlace - m (Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4638;)Lnet/minecraft/class_2338; method_23392 getNearbyPos - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_4638;)Z method_23390 isValidPosition -c net/minecraft/class_3006 net/minecraft/world/gen/feature/structure/DesertPyramidStructure -c net/minecraft/class_3006$class_3007 net/minecraft/world/gen/feature/structure/DesertPyramidStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28624 func_230364_a_ -c net/minecraft/class_5154 net/minecraft/world/gen/feature/structure/BasaltDeltasStructure - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_5158;)Z method_27101 generate - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_5158;)Z method_27103 func_236277_a_ - f [Lnet/minecraft/class_2350; field_23883 field_236275_ac_ - f Lcom/google/common/collect/ImmutableList; field_24133 field_236274_a_ -c net/minecraft/class_5433 net/minecraft/world/gen/feature/SphereReplaceFeature -c net/minecraft/class_3005 net/minecraft/world/gen/feature/DesertWellsFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_12977 generate - f Lnet/minecraft/class_2680; field_13451 sandstone - f Lnet/minecraft/class_2680; field_13449 water - f Lnet/minecraft/class_2715; field_13450 IS_SAND - f Lnet/minecraft/class_2680; field_13452 sandSlab -c net/minecraft/class_3029 net/minecraft/world/gen/feature/EndGatewayFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3018;)Z method_13142 generate - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2338;Lnet/minecraft/class_3018;Lnet/minecraft/class_2338;)V method_18037 func_236280_a_ -c net/minecraft/class_3021 net/minecraft/world/gen/feature/structure/EndCityStructure - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3111;)Z method_28625 func_230363_a_ - m (IILnet/minecraft/class_2794;)I method_13084 access$000 - m (IILnet/minecraft/class_2794;)I method_13085 getYPosForStructure -c net/minecraft/class_3021$class_3022 net/minecraft/world/gen/feature/structure/EndCityStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28626 func_230364_a_ -c net/minecraft/class_3033 net/minecraft/world/gen/feature/EndPodiumFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13163 generate - f Lnet/minecraft/class_2338; field_13600 END_PODIUM_LOCATION - f Z field_13599 activePortal -c net/minecraft/class_3026 net/minecraft/world/gen/feature/EndIslandFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13110 generate -c net/minecraft/class_4278 net/minecraft/world/gen/feature/FillLayerFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4279;)Z method_20312 generate -c net/minecraft/class_3031 net/minecraft/world/gen/feature/Feature - m (Lnet/minecraft/class_1945;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_13153 setBlockState - m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_27370 isAirAt - m (Lnet/minecraft/class_3037;)Lnet/minecraft/class_2975; method_28629 func_236296_a_ - m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_3037; method_28628 func_236295_a_ - m (Lnet/minecraft/class_2248;)Z method_23396 isDirt - m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_27368 isDirtAt - m (Lnet/minecraft/class_2680;)Z method_27369 func_236294_a_ - m (Ljava/lang/String;Lnet/minecraft/class_3031;)Lnet/minecraft/class_3031; method_13150 register - m (Lnet/minecraft/class_3037;)Lnet/minecraft/class_2975; method_23397 withConfiguration - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3037;)Z method_13151 generate - m (Lnet/minecraft/class_2248;)Z method_23395 isStone - m ()Lcom/mojang/serialization/Codec; method_28627 getCodec - f Lnet/minecraft/class_3031; field_13531 HUGE_BROWN_MUSHROOM - f Lnet/minecraft/class_3168; field_13567 SEAGRASS - f Lnet/minecraft/class_3031; field_13574 END_ISLAND - f Lnet/minecraft/class_3031; field_13593 RANDOM_SELECTOR - f Lnet/minecraft/class_3031; field_13516 FOSSIL - f Lnet/minecraft/class_3031; field_13517 ORE - f Lnet/minecraft/class_3031; field_22188 BASALT_PILLAR - f Lnet/minecraft/class_3031; field_13591 VOID_START_PLATFORM - f Lnet/minecraft/class_3031; field_19201 FILL_LAYER - f Lnet/minecraft/class_3031; field_13552 CHORUS_PLANT - f Lnet/minecraft/class_3031; field_23885 DELTA_FEATURE - f Lnet/minecraft/class_3031; field_21221 BLOCK_PILE - f Lnet/minecraft/class_3031; field_23088 TWISTING_VINES - f Lnet/minecraft/class_3031; field_13573 LAKE - f Lnet/minecraft/class_3031; field_22186 NETHER_FOREST_VEGETATION - f Lnet/minecraft/class_3031; field_24134 TREE - f Lnet/minecraft/class_3031; field_13509 DISK - f Lnet/minecraft/class_3031; field_13540 BAMBOO - f Lnet/minecraft/class_3031; field_13544 ICEBERG - f Lnet/minecraft/class_3031; field_13575 SEA_PICKLE - f Lnet/minecraft/class_3031; field_13579 MONSTER_ROOM - f Lnet/minecraft/class_3031; field_13585 CORAL_MUSHROOM - f Lnet/minecraft/class_2953; field_13526 BONUS_CHEST - f Lnet/minecraft/class_3031; field_13539 FREEZE_TOP_LAYER - f Lnet/minecraft/class_3031; field_13535 KELP - f Lnet/minecraft/class_4624; field_26361 NO_BONEMEAL_FLOWER - f Lnet/minecraft/class_3031; field_13562 ICE_SPIKE - f Lnet/minecraft/class_3031; field_13564 END_GATEWAY - f Lcom/mojang/serialization/Codec; field_24837 codec - f Lnet/minecraft/class_3031; field_13555 SIMPLE_RANDOM_SELECTOR - f Lnet/minecraft/class_3031; field_13571 HUGE_RED_MUSHROOM - f Lnet/minecraft/class_3031; field_13522 END_SPIKE - f Lnet/minecraft/class_3031; field_22189 NO_SURFACE_ORE - f Lnet/minecraft/class_3031; field_13592 DESERT_WELL - f Lnet/minecraft/class_3031; field_13594 EMERALD_ORE - f Lnet/minecraft/class_3031; field_21217 DECORATED - f Lnet/minecraft/class_3031; field_23886 NETHERRACK_REPLACE_BLOBS - f Lnet/minecraft/class_3031; field_13513 SPRING_FEATURE - f Lnet/minecraft/class_3031; field_23884 BASALT_COLUMNS - f Lnet/minecraft/class_3031; field_21220 RANDOM_PATCH - f Lnet/minecraft/class_3031; field_22187 WEEPING_VINES - f Lnet/minecraft/class_3031; field_13551 ICE_PATCH - f Lnet/minecraft/class_3031; field_22185 HUGE_FUNGUS - f Lnet/minecraft/class_3031; field_21590 NO_OP - f Lnet/minecraft/class_3031; field_13584 FOREST_ROCK - f Lnet/minecraft/class_3031; field_13518 SIMPLE_BLOCK - f Lnet/minecraft/class_3031; field_13560 BLUE_ICE - f Lnet/minecraft/class_3031; field_13546 CORAL_CLAW - f Lnet/minecraft/class_3031; field_13559 VINES - f Lnet/minecraft/class_3031; field_13525 CORAL_TREE - f Lnet/minecraft/class_3031; field_13568 GLOWSTONE_BLOB - f Lnet/minecraft/class_4624; field_21219 FLOWER - f Lnet/minecraft/class_3031; field_13550 RANDOM_BOOLEAN_SELECTOR -c net/minecraft/class_3047 net/minecraft/world/gen/feature/GlowstoneBlobFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13239 generate -c net/minecraft/class_3044 net/minecraft/world/gen/feature/FossilsFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13236 generate - f Lnet/minecraft/class_2960; field_13618 STRUCTURE_SPINE_02_COAL - f Lnet/minecraft/class_2960; field_13625 STRUCTURE_SPINE_03_COAL - f Lnet/minecraft/class_2960; field_13616 STRUCTURE_SPINE_04_COAL - f Lnet/minecraft/class_2960; field_13613 STRUCTURE_SKULL_02_COAL - f Lnet/minecraft/class_2960; field_13623 STRUCTURE_SKULL_03_COAL - f Lnet/minecraft/class_2960; field_13619 STRUCTURE_SPINE_04 - f [Lnet/minecraft/class_2960; field_13626 FOSSILS_COAL - f Lnet/minecraft/class_2960; field_13620 STRUCTURE_SPINE_01_COAL - f [Lnet/minecraft/class_2960; field_13617 FOSSILS - f Lnet/minecraft/class_2960; field_13610 STRUCTURE_SKULL_04_COAL - f Lnet/minecraft/class_2960; field_13622 STRUCTURE_SKULL_04 - f Lnet/minecraft/class_2960; field_13614 STRUCTURE_SKULL_01_COAL - f Lnet/minecraft/class_2960; field_13615 STRUCTURE_SPINE_02 - f Lnet/minecraft/class_2960; field_13627 STRUCTURE_SPINE_03 - f Lnet/minecraft/class_2960; field_13611 STRUCTURE_SKULL_01 - f Lnet/minecraft/class_2960; field_13624 STRUCTURE_SPINE_01 - f Lnet/minecraft/class_2960; field_13621 STRUCTURE_SKULL_02 - f Lnet/minecraft/class_2960; field_13612 STRUCTURE_SKULL_03 -c net/minecraft/class_4780 net/minecraft/world/gen/feature/HugeFungusConfig - m (Lnet/minecraft/class_4780;)Ljava/lang/Boolean; method_28630 func_236308_a_ - m (Lnet/minecraft/class_4780;)Lnet/minecraft/class_2680; method_28635 func_236313_e_ - m (Lnet/minecraft/class_4780;)Lnet/minecraft/class_2680; method_28634 func_236312_d_ - m (Lnet/minecraft/class_4780;)Lnet/minecraft/class_2680; method_28633 func_236311_c_ - m (Lnet/minecraft/class_4780;)Lnet/minecraft/class_2680; method_28632 func_236310_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28631 func_236309_a_ - f Lnet/minecraft/class_2680; field_22193 field_236306_i_ - f Lnet/minecraft/class_2680; field_22192 field_236305_h_ - f Lnet/minecraft/class_2680; field_22191 field_236304_g_ - f Lnet/minecraft/class_2680; field_22435 field_236303_f_ - f Z field_22194 field_236307_j_ - f Lcom/mojang/serialization/Codec; field_24838 field_236298_a_ - f Lnet/minecraft/class_4780; field_22434 field_236302_e_ - f Lnet/minecraft/class_4780; field_22433 field_236301_d_ - f Lnet/minecraft/class_4780; field_22432 field_236300_c_ - f Lnet/minecraft/class_4780; field_22431 field_236299_b_ -c net/minecraft/class_3059 net/minecraft/world/gen/feature/BigBrownMushroomFeature -c net/minecraft/class_3066 net/minecraft/world/gen/feature/BigRedMushroomFeature -c net/minecraft/class_4781 net/minecraft/world/gen/feature/HugeFungusFeature - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1936;Ljava/util/Random;)V method_24442 func_236319_a_ - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4780;)Z method_24437 generate - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_4780;Lnet/minecraft/class_2338;IZ)V method_24440 func_236317_a_ - m (ZLnet/minecraft/class_2680;)Z method_29297 func_236320_a_ - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_4780;Lnet/minecraft/class_2338;IZ)V method_24443 func_236321_b_ - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Z)Z method_24866 func_236315_a_ - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_24441 func_236318_a_ - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_4780;Lnet/minecraft/class_2338$class_2339;FFF)V method_24439 func_236316_a_ -c net/minecraft/class_3070 net/minecraft/world/gen/feature/IceSpikeFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13408 generate -c net/minecraft/class_3063 net/minecraft/world/gen/feature/IcePathFeature -c net/minecraft/class_3071 net/minecraft/world/gen/feature/structure/IglooStructure -c net/minecraft/class_3071$class_3072 net/minecraft/world/gen/feature/structure/IglooStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28636 func_230364_a_ -c net/minecraft/class_3074 net/minecraft/world/gen/feature/IcebergFeature - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1936;Ljava/util/Random;IIZZLnet/minecraft/class_2680;)V method_13425 func_205175_a - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2963;)Z method_13423 generate - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;IIIIIIZIDZLnet/minecraft/class_2680;)V method_13426 func_205181_a - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_13414 isAirBellow - m (IILnet/minecraft/class_2338;Lnet/minecraft/class_1936;ZDLnet/minecraft/class_2338;II)V method_13415 func_205174_a - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_13422 removeSnowLayer - m (Ljava/util/Random;III)I method_13419 func_205183_a - m (IILnet/minecraft/class_2338;ILjava/util/Random;)D method_13421 func_205177_a - m (Ljava/util/Random;Lnet/minecraft/class_1936;IILnet/minecraft/class_2338;ZIDI)V method_13428 func_205184_a - m (Lnet/minecraft/class_2248;)Z method_13420 isIce - m (IILnet/minecraft/class_2338;IID)D method_13424 func_205180_a - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;IIZI)V method_13418 func_205186_a - m (III)I method_13417 func_205178_b - m (III)I method_13416 func_205176_a - m (Ljava/util/Random;III)I method_13427 func_205187_b -c net/minecraft/class_3076 net/minecraft/world/gen/feature/structure/JunglePyramidStructure -c net/minecraft/class_3076$class_3077 net/minecraft/world/gen/feature/structure/JunglePyramidStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28637 func_230364_a_ -c net/minecraft/class_5434 net/minecraft/world/gen/feature/structure/JigsawStructure - m (Lnet/minecraft/class_3195;IILnet/minecraft/class_3341;IJ)Lnet/minecraft/class_3449; method_30386 func_242778_a - m (Lnet/minecraft/class_5434;)I method_30385 func_242777_a - m (Lnet/minecraft/class_5434;)Z method_30387 func_242779_b - m (Lnet/minecraft/class_5434;)Z method_30388 func_242780_c - f I field_25835 field_242774_u - f Z field_25836 field_242775_v - f Z field_25837 field_242776_w -c net/minecraft/class_5434$class_5435 net/minecraft/world/gen/feature/structure/JigsawStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3812;)V method_30389 func_230364_a_ - f Lnet/minecraft/class_5434; field_25838 field_242781_e -c net/minecraft/class_3085 net/minecraft/world/gen/feature/LakesFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2963;)Z method_13471 generate - f Lnet/minecraft/class_2680; field_13668 AIR -c net/minecraft/class_3081 net/minecraft/world/gen/feature/KelpFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13460 generate -c net/minecraft/class_3103 net/minecraft/world/gen/feature/DungeonsFeature - m (Ljava/util/Random;)Lnet/minecraft/class_1299; method_13547 getRandomDungeonMob - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13548 generate - f Lnet/minecraft/class_2680; field_13698 CAVE_AIR - f [Lnet/minecraft/class_1299; field_13699 SPAWNERTYPES - f Lorg/apache/logging/log4j/Logger; field_13700 LOGGER -c net/minecraft/class_3098 net/minecraft/world/gen/feature/structure/MineshaftStructure - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3101;)Z method_28638 func_230363_a_ -c net/minecraft/class_3098$class_3100 net/minecraft/world/gen/feature/structure/MineshaftStructure$Type - m ()[Lnet/minecraft/class_3098$class_3100; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3098$class_3100; valueOf valueOf - m (I)Lnet/minecraft/class_3098$class_3100; method_13535 byId - m (Lnet/minecraft/class_3098$class_3100;)Lnet/minecraft/class_3098$class_3100; method_13533 func_214716_a - m ()Ljava/lang/String; method_13534 getName - m (Ljava/lang/String;)Lnet/minecraft/class_3098$class_3100; method_13532 byName - f Lnet/minecraft/class_3098$class_3100; field_13692 NORMAL - f Ljava/util/Map; field_13690 BY_NAME - f Lcom/mojang/serialization/Codec; field_24839 field_236324_c_ - f [Lnet/minecraft/class_3098$class_3100; field_13688 $VALUES - f Lnet/minecraft/class_3098$class_3100; field_13691 MESA - f Ljava/lang/String; field_13689 name -c net/minecraft/class_3098$class_3099 net/minecraft/world/gen/feature/structure/MineshaftStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3101;)V method_28639 func_230364_a_ -c net/minecraft/class_4782 net/minecraft/world/gen/feature/NetherVegetationFeature - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4634;II)Z method_26264 func_236325_a_ - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4634;)Z method_24444 generate -c net/minecraft/class_4715 net/minecraft/world/gen/feature/NoOpFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_23914 generate -c net/minecraft/class_3108 net/minecraft/world/gen/feature/structure/FortressStructure - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3111;)Z method_28640 func_230363_a_ - f Ljava/util/List; field_13705 field_202381_d -c net/minecraft/class_3108$class_3109 net/minecraft/world/gen/feature/structure/FortressStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28641 func_230364_a_ -c net/minecraft/class_3116 net/minecraft/world/gen/feature/structure/OceanMonumentStructure - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3111;)Z method_28642 func_230363_a_ - f Ljava/util/List; field_13716 MONUMENT_ENEMIES -c net/minecraft/class_3116$class_3117 net/minecraft/world/gen/feature/structure/OceanMonumentStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28643 func_230364_a_ - m (II)V method_16588 generateStart - f Z field_13717 wasCreated -c net/minecraft/class_4783 net/minecraft/world/gen/feature/NoExposedOreFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3124;)Z method_24445 generate - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_24446 func_236326_a_ - m (Ljava/util/Random;I)I method_24448 func_236328_a_ - m (Lnet/minecraft/class_2338$class_2339;Ljava/util/Random;Lnet/minecraft/class_2338;I)V method_24447 func_236327_a_ -c net/minecraft/class_3770 net/minecraft/world/gen/feature/structure/PillagerOutpostStructure - m (Lnet/minecraft/class_2794;JLnet/minecraft/class_2919;II)Z method_30845 func_242782_a - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3812;)Z method_28644 func_230363_a_ - f Ljava/util/List; field_16656 PILLAGE_OUTPOST_ENEMIES -c net/minecraft/class_3122 net/minecraft/world/gen/feature/OreFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3124;)Z method_13628 generate - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_3124;DDDDDDIIIII)Z method_13629 func_207803_a -c net/minecraft/class_4628 net/minecraft/world/gen/feature/RandomPatchFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4638;)Z method_23401 generate -c net/minecraft/class_3135 net/minecraft/world/gen/feature/TwoFeatureChoiceFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3137;)Z method_13679 generate -c net/minecraft/class_5155 net/minecraft/world/gen/feature/structure/NetherackBlobReplacementStructure - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_5437;)Z method_27106 generate - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2248;)Lnet/minecraft/class_2338; method_27107 func_236329_a_ -c net/minecraft/class_3150 net/minecraft/world/gen/feature/MultipleWithChanceRandomFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3141;)Z method_13798 generate -c net/minecraft/class_5183 net/minecraft/world/gen/feature/structure/RuinedPortalStructure - m (Ljava/util/Random;II)I method_27207 func_236335_a_ - m ()[Ljava/lang/String; method_27212 func_236340_d_ - m ()[Ljava/lang/String; method_27213 func_236341_e_ - m (Ljava/util/Random;Lnet/minecraft/class_2794;Lnet/minecraft/class_5189$class_5191;ZIILnet/minecraft/class_3341;)I method_27211 func_236339_b_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1959;)Z method_27206 func_236334_a_ - m (Ljava/util/Random;Lnet/minecraft/class_2794;Lnet/minecraft/class_5189$class_5191;ZIILnet/minecraft/class_3341;)I method_27208 func_236336_a_ - m (Ljava/util/Random;II)I method_27210 func_236338_b_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1959;)Z method_27209 func_236337_b_ - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1922; method_27205 func_236333_a_ - f [Ljava/lang/String; field_23999 field_236331_u_ - f [Ljava/lang/String; field_23998 field_236332_v_ -c net/minecraft/class_5183$class_5185 net/minecraft/world/gen/feature/structure/RuinedPortalStructure$Location - m (Ljava/lang/String;)Lnet/minecraft/class_5183$class_5185; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_5183$class_5185; method_27216 func_236346_a_ - m ()Ljava/lang/String; method_27214 func_236347_b_ - m ()[Lnet/minecraft/class_5183$class_5185; values values - m (Lnet/minecraft/class_5183$class_5185;)Lnet/minecraft/class_5183$class_5185; method_27215 func_236345_a_ - f Lcom/mojang/serialization/Codec; field_24840 field_236342_h_ - f Lnet/minecraft/class_5183$class_5185; field_24001 DESERT - f Lnet/minecraft/class_5183$class_5185; field_24002 JUNGLE - f Ljava/lang/String; field_24008 field_236344_j_ - f Lnet/minecraft/class_5183$class_5185; field_24003 SWAMP - f Lnet/minecraft/class_5183$class_5185; field_24004 MOUNTAIN - f [Lnet/minecraft/class_5183$class_5185; field_24009 $VALUES - f Lnet/minecraft/class_5183$class_5185; field_24005 OCEAN - f Lnet/minecraft/class_5183$class_5185; field_24006 NETHER - f Ljava/util/Map; field_24007 field_236343_i_ - f Lnet/minecraft/class_5183$class_5185; field_24000 STANDARD -c net/minecraft/class_5183$class_5184 net/minecraft/world/gen/feature/structure/RuinedPortalStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_5187;)V method_28646 func_230364_a_ -c net/minecraft/class_3152 net/minecraft/world/gen/feature/ReplaceBlockFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3154;)Z method_13811 generate -c net/minecraft/class_3168 net/minecraft/world/gen/feature/SeaGrassFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3133;)Z method_13926 generate -c net/minecraft/class_3160 net/minecraft/world/gen/feature/SeaPickleFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2984;)Z method_13876 generate -c net/minecraft/class_3173 net/minecraft/world/gen/feature/BlockWithContextFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3175;)Z method_13929 generate -c net/minecraft/class_3170 net/minecraft/world/gen/feature/structure/ShipwreckStructure -c net/minecraft/class_3170$class_3171 net/minecraft/world/gen/feature/structure/ShipwreckStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3172;)V method_28647 func_230364_a_ -c net/minecraft/class_3177 net/minecraft/world/gen/feature/SingleRandomFeatureConfig - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3179;)Z method_13953 generate -c net/minecraft/class_3310 net/minecraft/world/gen/feature/EndSpikeFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3666;)Z method_15887 generate - m (Lnet/minecraft/class_5425;Ljava/util/Random;Lnet/minecraft/class_3666;Lnet/minecraft/class_3310$class_3181;)V method_15888 placeSpike - m (Lnet/minecraft/class_5281;)Ljava/util/List; method_14506 func_236356_a_ - f Lcom/google/common/cache/LoadingCache; field_14309 LOADING_CACHE -c net/minecraft/class_3310$class_3311 net/minecraft/world/gen/feature/EndSpikeFeature$EndSpikeCacheLoader - m (Ljava/lang/Object;)Ljava/lang/Object; load load - m (Ljava/lang/Long;)Ljava/util/List; method_14507 load -c net/minecraft/class_3310$class_3181 net/minecraft/world/gen/feature/EndSpikeFeature$EndSpike - m ()I method_13967 getCenterZ - m (Lnet/minecraft/class_3310$class_3181;)Ljava/lang/Integer; method_28650 func_236360_b_ - m ()I method_13963 getRadius - m (Lnet/minecraft/class_3310$class_3181;)Ljava/lang/Boolean; method_28648 func_236358_a_ - m ()I method_13964 getHeight - m (Lnet/minecraft/class_3310$class_3181;)Ljava/lang/Integer; method_28653 func_236363_e_ - m (Lnet/minecraft/class_3310$class_3181;)Ljava/lang/Integer; method_28651 func_236361_c_ - m (Lnet/minecraft/class_2338;)Z method_13962 doesStartInChunk - m (Lnet/minecraft/class_3310$class_3181;)Ljava/lang/Integer; method_28652 func_236362_d_ - m ()Z method_13965 isGuarded - m ()Lnet/minecraft/class_238; method_13968 getTopBoundingBox - m ()I method_13966 getCenterX - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28649 func_236359_a_ - f Lnet/minecraft/class_238; field_13835 topBoundingBox - f Z field_13832 guarded - f I field_13836 centerX - f I field_13834 centerZ - f I field_13833 radius - f Lcom/mojang/serialization/Codec; field_24841 field_236357_a_ - f I field_13831 height -c net/minecraft/class_3310$1 net/minecraft/world/gen/feature/EndSpikeFeature$1 -c net/minecraft/class_3183 net/minecraft/world/gen/feature/IceAndSnowFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_13978 generate -c net/minecraft/class_3188 net/minecraft/world/gen/feature/structure/StrongholdStructure - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3111;)Z method_28654 func_230363_a_ -c net/minecraft/class_3188$class_3189 net/minecraft/world/gen/feature/structure/StrongholdStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28655 func_230364_a_ - f J field_24559 field_236364_e_ -c net/minecraft/class_3185 net/minecraft/world/gen/feature/SpringFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4642;)Z method_13979 generate -c net/minecraft/class_3773 net/minecraft/world/gen/feature/structure/IStructurePieceType - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2487;)Lnet/minecraft/class_3443; load load - m (Lnet/minecraft/class_3773;Ljava/lang/String;)Lnet/minecraft/class_3773; method_16813 register - f Lnet/minecraft/class_3773; field_16930 NECCS - f Lnet/minecraft/class_3773; field_16925 OMDZR - f Lnet/minecraft/class_3773; field_16952 NECE - f Lnet/minecraft/class_3773; field_16966 OMPENTHOUSE - f Lnet/minecraft/class_3773; field_16962 NESCLT - f Lnet/minecraft/class_3773; field_16944 OMSIMPLET - f Lnet/minecraft/class_3773; field_16941 SHRC - f Lnet/minecraft/class_3773; field_16914 SHSTART - f Lnet/minecraft/class_3773; field_16945 NESCRT - f Lnet/minecraft/class_3773; field_16936 ECP - f Lnet/minecraft/class_3773; field_16931 NEMT - f Lnet/minecraft/class_3773; field_16949 SHSSD - f Lnet/minecraft/class_3773; field_16932 ORP - f Lnet/minecraft/class_3773; field_16967 NESR - f Lnet/minecraft/class_3773; field_16955 SHCC - f Lnet/minecraft/class_3773; field_24010 RUINED_PORTAL - f Lnet/minecraft/class_3773; field_16933 TEDP - f Lnet/minecraft/class_3773; field_16937 SH5C - f Lnet/minecraft/class_3773; field_16960 BTP - f Lnet/minecraft/class_3773; field_16969 MSCORRIDOR - f Lnet/minecraft/class_3773; field_16959 SHLI - f Lnet/minecraft/class_3773; field_16915 MSROOM - f Lnet/minecraft/class_3773; field_22195 NETHER_FOSSIL - f Lnet/minecraft/class_3773; field_16911 OMCR - f Lnet/minecraft/class_3773; field_16927 OMDXYR - f Lnet/minecraft/class_3773; field_16948 SHPH - f Lnet/minecraft/class_3773; field_16926 NEBCR - f Lnet/minecraft/class_3773; field_16917 NEBS - f Lnet/minecraft/class_3773; field_16970 OMDYZR - f Lnet/minecraft/class_3773; field_16905 OMENTRY - f Lnet/minecraft/class_3773; field_16943 NECTB - f Lnet/minecraft/class_3773; field_16929 NESCSC - f Lnet/minecraft/class_3773; field_16928 OMSIMPLE - f Lnet/minecraft/class_3773; field_16958 SHRT - f Lnet/minecraft/class_3773; field_16957 OMWR - f Lnet/minecraft/class_3773; field_16904 SHSD - f Lnet/minecraft/class_3773; field_16921 NESC - f Lnet/minecraft/class_3773; field_16961 NECSR - f Lnet/minecraft/class_3773; field_16907 WMP - f Lnet/minecraft/class_3773; field_16934 SHS - f Lnet/minecraft/class_3773; field_16953 TEJP - f Lnet/minecraft/class_3773; field_16908 NERC - f Lnet/minecraft/class_3773; field_16924 NESTART - f Lnet/minecraft/class_3773; field_16909 IGLU - f Lnet/minecraft/class_3773; field_16935 SHIPWRECK - f Lnet/minecraft/class_3773; field_16918 TESH - f Lnet/minecraft/class_3773; field_16965 SHFC - f Lnet/minecraft/class_3773; field_16906 SHLT - f Lnet/minecraft/class_3773; field_16919 MSCROSSING - f Lnet/minecraft/class_3773; field_16922 OMB - f Lnet/minecraft/class_3773; field_16968 MSSTAIRS - f Lnet/minecraft/class_3773; field_16963 OMDXR - f Lnet/minecraft/class_3773; field_25840 field_242786_ad - f Lnet/minecraft/class_3773; field_16939 SHPR - f Lnet/minecraft/class_3773; field_16903 NEBEF - f Lnet/minecraft/class_3773; field_16946 OMDYR -c net/minecraft/class_3195 net/minecraft/world/gen/feature/structure/Structure - m ()Ljava/util/List; method_16140 getCreatureSpawnList - m ()Lcom/mojang/serialization/Codec; method_28665 getFeatureCodec - m ()Z method_27219 func_230365_b_ - m (Lnet/minecraft/class_3037;)Lnet/minecraft/class_5312; method_28659 withConfiguration - m (Lnet/minecraft/class_5312;)Lnet/minecraft/class_3037; method_28658 func_236390_a_ - m (Lnet/minecraft/class_5314;JLnet/minecraft/class_2919;II)Lnet/minecraft/class_1923; method_27218 getChunkPosForStructure - m (Lnet/minecraft/class_3037;)Lnet/minecraft/class_5312; method_28662 func_236395_b_ - m ()Ljava/lang/String; method_14019 getStructureName - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;Lnet/minecraft/class_3485;JLnet/minecraft/class_1923;Lnet/minecraft/class_1959;ILnet/minecraft/class_2919;Lnet/minecraft/class_5314;Lnet/minecraft/class_3037;)Lnet/minecraft/class_3449; method_28657 func_242785_a - m ()V method_28664 init - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_5138;Lnet/minecraft/class_2338;IZJLnet/minecraft/class_5314;)Lnet/minecraft/class_2338; method_14015 func_236388_a_ - m (IILnet/minecraft/class_3341;IJ)Lnet/minecraft/class_3449; method_28656 createStructureStart - m (Ljava/lang/String;Lnet/minecraft/class_3195;Lnet/minecraft/class_2893$class_2895;)Lnet/minecraft/class_3195; method_28661 register - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2487;J)Lnet/minecraft/class_3449; method_28660 deserializeStructureStart - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3037;)Z method_14026 func_230363_a_ - m ()Lnet/minecraft/class_2893$class_2895; method_28663 getDecorationStage - m ()Ljava/util/List; method_13149 getSpawnList - m ()Lnet/minecraft/class_3195$class_3774; method_14016 getStartFactory - f Lnet/minecraft/class_3195; field_24844 MINESHAFT - f Lnet/minecraft/class_3195; field_24843 PILLAGER_OUTPOST - f Lnet/minecraft/class_3195; field_24845 WOODLAND_MANSION - f Ljava/util/Map; field_25839 OLD_TO_NEW_NAMING_MAP - f Ljava/util/List; field_24861 field_236384_t_ - f Lnet/minecraft/class_3195; field_24846 JUNGLE_PYRAMID - f Lnet/minecraft/class_3195; field_24848 IGLOO - f Lnet/minecraft/class_3195; field_24847 DESERT_PYRAMID - f Lnet/minecraft/class_3195; field_24849 RUINED_PORTAL - f Lorg/apache/logging/log4j/Logger; field_13879 LOGGER - f Ljava/util/Map; field_24862 STRUCTURE_DECORATION_STAGE_MAP - f Lnet/minecraft/class_3197; field_24851 SWAMP_HUT - f Lnet/minecraft/class_3195; field_24850 SHIPWRECK - f Lnet/minecraft/class_3195; field_24852 STRONGHOLD - f Lnet/minecraft/class_2960; field_26362 JIGSAW - f Lcom/mojang/serialization/Codec; field_24863 field_236386_w_ - f Lnet/minecraft/class_3195; field_24853 MONUMENT - f Lnet/minecraft/class_3195; field_24854 OCEAN_RUIN - f Lnet/minecraft/class_3195; field_24856 END_CITY - f Lnet/minecraft/class_3195; field_24855 FORTRESS - f Lcom/google/common/collect/BiMap; field_24842 NAME_STRUCTURE_BIMAP - f Lnet/minecraft/class_3195; field_24857 BURIED_TREASURE - f Lnet/minecraft/class_3195; field_24858 VILLAGE - f Lnet/minecraft/class_3195; field_24860 BASTION_REMNANT - f Lnet/minecraft/class_3195; field_24859 NETHER_FOSSIL -c net/minecraft/class_3195$class_3774 net/minecraft/world/gen/feature/structure/Structure$IStartFactory - m (Lnet/minecraft/class_3195;IILnet/minecraft/class_3341;IJ)Lnet/minecraft/class_3449; create create -c net/minecraft/class_3197 net/minecraft/world/gen/feature/structure/SwampHutStructure - f Ljava/util/List; field_13882 SPAWN_LIST - f Ljava/util/List; field_16435 CREATURE_SPAWN_LIST -c net/minecraft/class_3197$class_3198 net/minecraft/world/gen/feature/structure/SwampHutStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28666 func_230364_a_ -c net/minecraft/class_4953 net/minecraft/world/gen/feature/TwistingVineFeature - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338$class_2339;)Z method_27220 func_236420_a_ - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;III)V method_25987 func_236422_a_ - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_25985 generate - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;III)Z method_26265 func_236423_a_ - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;III)V method_25988 func_236424_b_ - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_25986 func_236421_a_ -c net/minecraft/class_2944 net/minecraft/world/gen/feature/TreeFeature - m (Lnet/minecraft/class_3746;ILnet/minecraft/class_2338;Lnet/minecraft/class_4643;)I method_29963 func_241521_a_ - m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16425 isTallPlantAt - m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338;Ljava/util/Set;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)Z method_12775 place - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_3341;Ljava/util/Set;Ljava/util/Set;)Lnet/minecraft/class_251; method_23380 func_236403_a_ - m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16433 isDirtOrFarmlandAt - m (Lnet/minecraft/class_1945;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_12774 func_236408_b_ - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_4643;)Z method_22362 generate - m (Lnet/minecraft/class_2680;)Z method_16431 func_236417_f_ - m (Lnet/minecraft/class_2680;)Z method_23384 func_236415_e_ - m (Lnet/minecraft/class_5281;Ljava/util/Random;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4662;)V method_23381 func_236405_a_ - m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16420 isAirOrLeavesAt - m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16432 func_236410_c_ - m (Lnet/minecraft/class_2680;)Z method_16421 func_236413_d_ - m (Lnet/minecraft/class_2680;)Z method_16417 func_236411_c_ - m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16422 isWaterAt - m (Lnet/minecraft/class_2680;)Z method_16426 func_236409_b_ - m (Lnet/minecraft/class_2680;)Z method_16428 func_236406_a_ - m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_16416 func_236414_e_ - m (Lnet/minecraft/class_4643;Lnet/minecraft/class_3747;Ljava/util/Random;IIILjava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4647$class_5208;)V method_27372 func_236407_a_ - m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_27371 isReplaceableAt -c net/minecraft/class_3219 net/minecraft/world/gen/feature/VinesFeature - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_14201 generate - f [Lnet/minecraft/class_2350; field_17396 DIRECTIONS -c net/minecraft/class_3211 net/minecraft/world/gen/feature/structure/VillageStructure -c net/minecraft/class_4784 net/minecraft/world/gen/feature/WeepingVineFeature - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_24451 func_236428_a_ - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_24449 generate - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;III)V method_24450 func_236427_a_ - m (Lnet/minecraft/class_1936;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_24452 func_236429_b_ - f [Lnet/minecraft/class_2350; field_22196 field_236426_a_ -c net/minecraft/class_3217 net/minecraft/world/gen/feature/VoidStartPlatformFeature - m (IIII)I method_20403 distance - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_3111;)Z method_14165 generate - f Lnet/minecraft/class_1923; field_19242 VOID_SPAWN_CHUNK_POS - f Lnet/minecraft/class_2338; field_19241 VOID_SPAWN_POS -c net/minecraft/class_3223 net/minecraft/world/gen/feature/structure/WoodlandMansionStructure - m (Lnet/minecraft/class_2794;Lnet/minecraft/class_1966;JLnet/minecraft/class_2919;IILnet/minecraft/class_1959;Lnet/minecraft/class_1923;Lnet/minecraft/class_3111;)Z method_28671 func_230363_a_ -c net/minecraft/class_3223$class_3224 net/minecraft/world/gen/feature/structure/WoodlandMansionStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28672 func_230364_a_ -c net/minecraft/class_3226 net/minecraft/world/gen/feature/ConfiguredRandomFeatureList - m (Lnet/minecraft/class_3226;)Ljava/util/function/Supplier; method_28670 func_242789_b - m (Lnet/minecraft/class_3226;)Ljava/lang/Float; method_28668 func_236432_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28669 func_236433_a_ - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_2338;)Z method_14271 func_242787_a - m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_2975; method_30390 func_242788_a - f Ljava/util/function/Supplier; field_14013 feature - f Lcom/mojang/serialization/Codec; field_24864 field_236430_a_ - f F field_14011 chance -c net/minecraft/class_4630 net/minecraft/world/gen/blockplacer/BlockPlacerType - m ()Lcom/mojang/serialization/Codec; method_28674 getCodec - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4630; method_23405 register - f Lnet/minecraft/class_4630; field_21225 COLUMN - f Lnet/minecraft/class_4630; field_21224 DOUBLE_PLANT - f Lcom/mojang/serialization/Codec; field_24866 codec - f Lnet/minecraft/class_4630; field_21223 SIMPLE_BLOCK -c net/minecraft/class_4629 net/minecraft/world/gen/blockplacer/BlockPlacer - m ()Lnet/minecraft/class_4630; method_28673 getBlockPlacerType - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Random;)V method_23403 place - f Lcom/mojang/serialization/Codec; field_24865 CODEC -c net/minecraft/class_4632 net/minecraft/world/gen/blockplacer/DoublePlantBlockPlacer - m ()Lnet/minecraft/class_4632; method_28678 func_236445_b_ - f Lnet/minecraft/class_4632; field_24869 PLACER - f Lcom/mojang/serialization/Codec; field_24868 CODEC -c net/minecraft/class_4631 net/minecraft/world/gen/blockplacer/ColumnBlockPlacer - m (Lnet/minecraft/class_4631;)Ljava/lang/Integer; method_28677 func_236442_b_ - m (Lnet/minecraft/class_4631;)Ljava/lang/Integer; method_28675 func_236440_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28676 func_236441_a_ - f Lcom/mojang/serialization/Codec; field_24867 CODEC - f I field_21228 extraSize - f I field_21227 minSize -c net/minecraft/class_4633 net/minecraft/world/gen/blockplacer/SimpleBlockPlacer - m ()Lnet/minecraft/class_4633; method_28679 func_236448_b_ - f Lcom/mojang/serialization/Codec; field_24870 CODEC - f Lnet/minecraft/class_4633; field_24871 PLACER -c net/minecraft/class_2963 net/minecraft/world/gen/feature/BlockStateFeatureConfig - m (Lnet/minecraft/class_2963;)Lnet/minecraft/class_2680; method_28684 func_236456_a_ - f Lnet/minecraft/class_2680; field_13356 state - f Lcom/mojang/serialization/Codec; field_24874 field_236455_a_ -c net/minecraft/class_4634 net/minecraft/world/gen/feature/BlockStateProvidingFeatureConfig - m (Lnet/minecraft/class_4634;)Lnet/minecraft/class_4651; method_28683 func_236454_a_ - f Lcom/mojang/serialization/Codec; field_24873 field_236453_a_ - f Lnet/minecraft/class_4651; field_21229 field_227268_a_ -c net/minecraft/class_2984 net/minecraft/world/gen/feature/FeatureSpreadConfig - m ()Lnet/minecraft/class_5428; method_30396 func_242799_a - f Lcom/mojang/serialization/Codec; field_24878 CODEC - f Lnet/minecraft/class_5428; field_13385 field_242798_c -c net/minecraft/class_5156 net/minecraft/world/gen/feature/ColumnConfig - m (Lnet/minecraft/class_5156;)Lnet/minecraft/class_5428; method_30392 func_242792_a - m ()Lnet/minecraft/class_5428; method_30391 func_242794_am_ - m (Lnet/minecraft/class_5156;)Lnet/minecraft/class_5428; method_30395 func_242796_b - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30393 func_242793_a - m ()Lnet/minecraft/class_5428; method_30394 func_242795_b - f Lnet/minecraft/class_5428; field_25841 field_242790_b - f Lnet/minecraft/class_5428; field_25842 field_242791_c - f Lcom/mojang/serialization/Codec; field_24877 CODEC -c net/minecraft/class_2998 net/minecraft/world/gen/placement/IPlacementConfig - f Lnet/minecraft/class_3113; field_13436 NO_PLACEMENT_CONFIG -c net/minecraft/class_2986 net/minecraft/world/gen/feature/DecoratedFeatureConfig - m (Lnet/minecraft/class_2986;)Ljava/util/function/Supplier; method_28704 func_236494_b_ - m ()Ljava/lang/String; toString toString - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28703 func_236493_a_ - m (Lnet/minecraft/class_2986;)Lnet/minecraft/class_3243; method_28702 func_236492_a_ - f Lnet/minecraft/class_3243; field_13398 decorator - f Lcom/mojang/serialization/Codec; field_24880 field_236491_a_ - f Ljava/util/function/Supplier; field_13399 feature -c net/minecraft/class_3013 net/minecraft/world/gen/feature/SphereReplaceConfig - m (Lnet/minecraft/class_3013;)Lnet/minecraft/class_2680; method_28715 func_236521_d_ - m (Lnet/minecraft/class_3013;)Lnet/minecraft/class_5428; method_28714 func_236520_c_ - m (Lnet/minecraft/class_3013;)Ljava/lang/Integer; method_28713 func_236519_b_ - m (Lnet/minecraft/class_3013;)Ljava/util/List; method_28711 func_236517_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28712 func_236518_a_ - f Lcom/mojang/serialization/Codec; field_24882 field_236516_a_ - f Lnet/minecraft/class_5428; field_13472 radius - f I field_13471 field_242809_d - f Ljava/util/List; field_13469 targets - f Lnet/minecraft/class_2680; field_13470 state -c net/minecraft/class_5158 net/minecraft/world/gen/feature/BasaltDeltasFeature - m ()Lnet/minecraft/class_2680; method_30400 func_242806_c - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30399 func_242803_a - m (Lnet/minecraft/class_5158;)Lnet/minecraft/class_2680; method_28710 func_236506_e_ - m (Lnet/minecraft/class_5158;)Lnet/minecraft/class_2680; method_28709 func_236505_d_ - m ()Lnet/minecraft/class_5428; method_30402 func_242807_d - m (Lnet/minecraft/class_5158;)Lnet/minecraft/class_5428; method_30401 func_242805_b - m ()Lnet/minecraft/class_5428; method_30403 func_242808_e - m ()Lnet/minecraft/class_2680; method_30397 func_242804_b - m (Lnet/minecraft/class_5158;)Lnet/minecraft/class_5428; method_30398 func_242802_a - f Lnet/minecraft/class_5428; field_25843 field_242800_d - f Lcom/mojang/serialization/Codec; field_24881 field_236495_a_ - f Lnet/minecraft/class_5428; field_25844 field_242801_e - f Lnet/minecraft/class_2680; field_23896 field_236497_c_ - f Lnet/minecraft/class_2680; field_23895 field_236496_b_ -c net/minecraft/class_3037 net/minecraft/world/gen/feature/IFeatureConfig - m ()Ljava/util/stream/Stream; method_30649 func_241856_an_ - f Lnet/minecraft/class_3111; field_13603 NO_FEATURE_CONFIG -c net/minecraft/class_3018 net/minecraft/world/gen/feature/EndGatewayConfig - m ()Lnet/minecraft/class_3018; method_18030 func_214698_a - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28717 func_236524_a_ - m (Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_3018; method_18034 func_214702_a - m ()Ljava/util/Optional; method_18036 func_214700_b - m ()Z method_13026 func_214701_c - m (Lnet/minecraft/class_3018;)Ljava/lang/Boolean; method_28716 func_236523_a_ - m (Lnet/minecraft/class_3018;)Ljava/util/Optional; method_28718 func_236525_b_ - f Lcom/mojang/serialization/Codec; field_24883 field_236522_a_ - f Z field_13475 exact - f Ljava/util/Optional; field_17735 exit -c net/minecraft/server/Main net/minecraft/server/Main - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_32$class_5143;Lnet/minecraft/class_3283;Lnet/minecraft/class_5350;Lnet/minecraft/class_5219;Lnet/minecraft/class_3807;Lcom/mojang/authlib/minecraft/MinecraftSessionService;Lcom/mojang/authlib/GameProfileRepository;Lnet/minecraft/class_3312;Ljoptsimple/OptionSet;Ljoptsimple/OptionSpec;Ljoptsimple/OptionSpec;Ljoptsimple/OptionSpec;Ljoptsimple/OptionSpec;Ljoptsimple/OptionSpec;Ljoptsimple/OptionSpec;Ljava/lang/Thread;)Lnet/minecraft/class_3176; method_29734 func_240762_a_ - m (Lnet/minecraft/class_32$class_5143;Lcom/mojang/datafixers/DataFixer;ZLjava/util/function/BooleanSupplier;Lcom/google/common/collect/ImmutableSet;)V method_29173 forceWorldUpgrade - m ([Ljava/lang/String;)V main main - m ()Z method_28126 func_240760_a_ - f Lorg/apache/logging/log4j/Logger; field_24625 LOGGER -c net/minecraft/server/Main$1 net/minecraft/server/Main$1 - m ()V run run - f Lnet/minecraft/class_3176; field_4611 field_240763_a_ -c net/minecraft/class_3812 net/minecraft/world/gen/feature/structure/VillageConfig - m ()Ljava/util/function/Supplier; method_27223 func_242810_c - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28724 func_236535_a_ - m ()I method_27222 func_236534_a_ - f I field_16860 size - f Lcom/mojang/serialization/Codec; field_24886 field_236533_a_ - f Ljava/util/function/Supplier; field_16861 startPool -c net/minecraft/class_4635 net/minecraft/world/gen/feature/BigMushroomFeatureConfig - m (Lnet/minecraft/class_4635;)Ljava/lang/Integer; method_28720 func_236529_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28721 func_236530_a_ - m (Lnet/minecraft/class_4635;)Lnet/minecraft/class_4651; method_28723 func_236532_c_ - m (Lnet/minecraft/class_4635;)Lnet/minecraft/class_4651; method_28722 func_236531_b_ - f Lnet/minecraft/class_4651; field_21231 stemProvider - f Lnet/minecraft/class_4651; field_21230 capProvider - f I field_21232 foliageRadius - f Lcom/mojang/serialization/Codec; field_24885 CODEC -c net/minecraft/class_4279 net/minecraft/world/gen/feature/FillLayerConfig - m (Lnet/minecraft/class_4279;)Lnet/minecraft/class_2680; method_28725 func_236538_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28726 func_236539_a_ - m (Lnet/minecraft/class_4279;)Ljava/lang/Integer; method_28727 func_236540_b_ - f Lnet/minecraft/class_2680; field_19203 state - f I field_19202 height - f Lcom/mojang/serialization/Codec; field_24887 field_236537_a_ -c net/minecraft/class_3003 net/minecraft/world/gen/placement/NoiseDependant - m (Lnet/minecraft/class_3003;)Ljava/lang/Integer; method_28734 func_236553_b_ - m (Lnet/minecraft/class_3003;)Ljava/lang/Double; method_28735 func_236554_c_ - m (Lnet/minecraft/class_3003;)Ljava/lang/Integer; method_28732 func_236551_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28733 func_236552_a_ - f I field_13445 aboveNoise - f I field_13446 belowNoise - f Lcom/mojang/serialization/Codec; field_24890 CODEC - f D field_13444 noiseLevel -c net/minecraft/class_3101 net/minecraft/world/gen/feature/structure/MineshaftConfig - m (Lnet/minecraft/class_3101;)Ljava/lang/Float; method_28730 func_236544_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28729 func_236543_a_ - m (Lnet/minecraft/class_3101;)Lnet/minecraft/class_3098$class_3100; method_28728 func_236542_a_ - f Lcom/mojang/serialization/Codec; field_24888 field_236541_a_ - f F field_13693 probability - f Lnet/minecraft/class_3098$class_3100; field_13694 type -c net/minecraft/class_3111 net/minecraft/world/gen/feature/NoFeatureConfig - m ()Lnet/minecraft/class_3111; method_28737 func_236560_a_ - f Lcom/mojang/serialization/Codec; field_24893 field_236558_a_ - f Lnet/minecraft/class_3111; field_24894 field_236559_b_ -c net/minecraft/class_3113 net/minecraft/world/gen/placement/NoPlacementConfig - m ()Lnet/minecraft/class_3113; method_28736 func_236557_a_ - f Lcom/mojang/serialization/Codec; field_24891 CODEC - f Lnet/minecraft/class_3113; field_24892 INSTANCE -c net/minecraft/class_3124 net/minecraft/world/gen/feature/OreFeatureConfig - m (Lnet/minecraft/class_3124;)Ljava/lang/Integer; method_28742 func_236567_a_ - m (Lnet/minecraft/class_3124;)Lnet/minecraft/class_3825; method_28745 func_236570_c_ - m (Lnet/minecraft/class_3124;)Lnet/minecraft/class_2680; method_28744 func_236569_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28743 func_236568_a_ - f Lnet/minecraft/class_2680; field_13724 state - f I field_13723 size - f Lcom/mojang/serialization/Codec; field_24896 CODEC - f Lnet/minecraft/class_3825; field_13725 target -c net/minecraft/class_3124$class_5436 net/minecraft/world/gen/feature/OreFeatureConfig$FillerBlockType - f Lnet/minecraft/class_3825; field_25846 NETHERRACK - f Lnet/minecraft/class_3825; field_25847 BASE_STONE_NETHER - f Lnet/minecraft/class_3825; field_25845 BASE_STONE_OVERWORLD -c net/minecraft/class_3114 net/minecraft/world/gen/feature/structure/OceanRuinConfig - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28739 func_236563_a_ - m (Lnet/minecraft/class_3114;)Ljava/lang/Float; method_28740 func_236564_b_ - m (Lnet/minecraft/class_3114;)Ljava/lang/Float; method_28738 func_236562_a_ - m (Lnet/minecraft/class_3114;)Lnet/minecraft/class_3411$class_3413; method_28741 func_236565_c_ - f F field_13708 largeProbability - f Lnet/minecraft/class_3411$class_3413; field_13709 field_204031_a - f Lcom/mojang/serialization/Codec; field_24895 field_236561_a_ - f F field_13707 clusterProbability -c net/minecraft/class_3137 net/minecraft/world/gen/feature/TwoFeatureChoiceConfig - m (Lnet/minecraft/class_3137;)Ljava/util/function/Supplier; method_28751 func_236582_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28750 func_236581_a_ - m (Lnet/minecraft/class_3137;)Ljava/util/function/Supplier; method_28749 func_236580_a_ - f Lcom/mojang/serialization/Codec; field_24900 field_236579_a_ - f Ljava/util/function/Supplier; field_13740 field_227285_a_ - f Ljava/util/function/Supplier; field_13739 field_227286_b_ -c net/minecraft/class_3133 net/minecraft/world/gen/feature/ProbabilityConfig - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28748 func_236578_a_ - m (Lnet/minecraft/class_3133;)Ljava/lang/Float; method_28747 func_236577_a_ - f Lcom/mojang/serialization/Codec; field_24899 CODEC - f F field_13738 probability -c net/minecraft/class_4638 net/minecraft/world/gen/feature/BlockClusterFeatureConfig - m (Lnet/minecraft/class_4638;)Ljava/lang/Integer; method_28759 func_236592_d_ - m (Lnet/minecraft/class_4638;)Ljava/util/List; method_28764 func_236597_i_ - m (Lnet/minecraft/class_4638;)Ljava/lang/Boolean; method_28758 func_236591_c_ - m (Lnet/minecraft/class_4638;)Ljava/lang/Integer; method_28762 func_236595_g_ - m (Lnet/minecraft/class_4638;)Ljava/util/List; method_28763 func_236596_h_ - m (Lnet/minecraft/class_4638;)Ljava/lang/Boolean; method_28757 func_236590_b_ - m (Lnet/minecraft/class_4638;)Ljava/lang/Integer; method_28761 func_236594_f_ - m (Lnet/minecraft/class_4638;)Ljava/lang/Boolean; method_28755 func_236588_a_ - m (Lnet/minecraft/class_4638;)Ljava/lang/Integer; method_28760 func_236593_e_ - m (Lnet/minecraft/class_4638;)Lnet/minecraft/class_4651; method_28766 func_236599_k_ - m (Lnet/minecraft/class_4638;)Lnet/minecraft/class_4629; method_28765 func_236598_j_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28756 func_236589_a_ - f I field_21244 zSpread - f Ljava/util/Set; field_21239 whitelist - f I field_21242 xSpread - f Ljava/util/Set; field_21240 blacklist - f I field_21243 ySpread - f Z field_21245 isReplaceable - f Z field_21246 field_227298_k_ - f Z field_21247 requiresWater - f Lnet/minecraft/class_4651; field_21237 stateProvider - f Lnet/minecraft/class_4629; field_21238 blockPlacer - f Lcom/mojang/serialization/Codec; field_24902 field_236587_a_ - f I field_21241 tryCount -c net/minecraft/class_4638$class_4639 net/minecraft/world/gen/feature/BlockClusterFeatureConfig$Builder - m (Ljava/util/Set;)Lnet/minecraft/class_4638$class_4639; method_23421 blacklist - m (Ljava/util/Set;)Lnet/minecraft/class_4638$class_4639; method_23418 whitelist - m ()Lnet/minecraft/class_4638$class_4639; method_23416 replaceable - m ()Lnet/minecraft/class_4638; method_23424 build - m ()Lnet/minecraft/class_4638$class_4639; method_23419 func_227317_b_ - m ()Lnet/minecraft/class_4638$class_4639; method_23422 requiresWater - m (I)Lnet/minecraft/class_4638$class_4639; method_23420 xSpread - m (I)Lnet/minecraft/class_4638$class_4639; method_23423 ySpread - m (I)Lnet/minecraft/class_4638$class_4639; method_23425 zSpread - m (I)Lnet/minecraft/class_4638$class_4639; method_23417 tries - f Lnet/minecraft/class_4651; field_21248 stateProvider - f Ljava/util/Set; field_21251 blacklist - f I field_21255 zSpread - f I field_21254 ySpread - f Z field_21258 requiresWater - f I field_21253 xSpread - f Z field_21257 field_227312_j_ - f I field_21252 tryCount - f Ljava/util/Set; field_21250 whitelist - f Z field_21256 isReplaceable - f Lnet/minecraft/class_4629; field_21249 blockPlacer -c net/minecraft/class_4638$1 net/minecraft/world/gen/feature/BlockClusterFeatureConfig$1 -c net/minecraft/class_3141 net/minecraft/world/gen/feature/MultipleRandomFeatureConfig - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28753 func_236585_a_ - m (Lnet/minecraft/class_3141;)Ljava/util/List; method_28754 func_236586_b_ - m (Lnet/minecraft/class_3141;)Ljava/util/function/Supplier; method_28752 func_236584_a_ - m (Lnet/minecraft/class_3226;)Ljava/util/stream/Stream; method_30650 func_242812_a - m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_2975; method_30404 func_242811_a - f Ljava/util/function/Supplier; field_13745 defaultFeature - f Lcom/mojang/serialization/Codec; field_24901 field_236583_a_ - f Ljava/util/List; field_13744 features -c net/minecraft/class_3154 net/minecraft/world/gen/feature/ReplaceBlockConfig - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28771 func_236606_a_ - m (Lnet/minecraft/class_3154;)Lnet/minecraft/class_2680; method_28772 func_236607_b_ - m (Lnet/minecraft/class_3154;)Lnet/minecraft/class_2680; method_28770 func_236605_a_ - f Lnet/minecraft/class_2680; field_13765 target - f Lnet/minecraft/class_2680; field_13766 state - f Lcom/mojang/serialization/Codec; field_24904 field_236604_a_ -c net/minecraft/class_2997 net/minecraft/world/gen/placement/TopSolidRangeConfig - m (Lnet/minecraft/class_2997;)Ljava/lang/Integer; method_28700 func_236988_b_ - m (Lnet/minecraft/class_2997;)Ljava/lang/Integer; method_28697 func_242816_a - m (Lnet/minecraft/class_2997;)Ljava/lang/Integer; method_28699 func_236987_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28698 func_236986_a_ - f I field_13434 bottomOffset - f I field_13433 topOffset - f Lcom/mojang/serialization/Codec; field_24879 CODEC - f I field_13432 maximum -c net/minecraft/class_5187 net/minecraft/world/gen/feature/RuinedPortalFeature - m (Lnet/minecraft/class_5187;)Lnet/minecraft/class_5183$class_5185; method_28778 func_236629_a_ - f Lnet/minecraft/class_5183$class_5185; field_24014 field_236628_b_ - f Lcom/mojang/serialization/Codec; field_24906 field_236627_a_ -c net/minecraft/class_5437 net/minecraft/world/gen/feature/BlobReplacementConfig - m (Lnet/minecraft/class_5437;)Lnet/minecraft/class_2680; method_30409 func_242825_c - m ()Lnet/minecraft/class_5428; method_30405 func_242823_b - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30406 func_242822_a - m (Lnet/minecraft/class_5437;)Lnet/minecraft/class_2680; method_30408 func_242824_b - m (Lnet/minecraft/class_5437;)Lnet/minecraft/class_5428; method_30407 func_242821_a - f Lcom/mojang/serialization/Codec; field_25848 CODEC - f Lnet/minecraft/class_5428; field_25851 field_242820_d - f Lnet/minecraft/class_2680; field_25850 field_242819_c - f Lnet/minecraft/class_2680; field_25849 field_242818_b -c net/minecraft/class_3175 net/minecraft/world/gen/feature/BlockWithContextConfig - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28784 func_236638_a_ - m (Lnet/minecraft/class_3175;)Ljava/util/List; method_28783 func_236637_a_ - m (Lnet/minecraft/class_3175;)Lnet/minecraft/class_2680; method_28787 func_236641_d_ - m (Lnet/minecraft/class_3175;)Ljava/util/List; method_28785 func_236639_b_ - m (Lnet/minecraft/class_3175;)Ljava/util/List; method_28786 func_236640_c_ - f Lnet/minecraft/class_2680; field_13807 toPlace - f Ljava/util/List; field_13806 placeUnder - f Lcom/mojang/serialization/Codec; field_24909 field_236636_a_ - f Ljava/util/List; field_13805 placeIn - f Ljava/util/List; field_13808 placeOn -c net/minecraft/class_3172 net/minecraft/world/gen/feature/structure/ShipwreckConfig - m (Lnet/minecraft/class_3172;)Ljava/lang/Boolean; method_28782 func_236635_a_ - f Lcom/mojang/serialization/Codec; field_24908 field_236634_a_ - f Z field_13803 isBeached -c net/minecraft/class_3666 net/minecraft/world/gen/feature/EndSpikeFeatureConfig - m ()Z method_15883 isCrystalInvulnerable - m (Lnet/minecraft/class_3666;)Ljava/util/List; method_28791 func_236647_b_ - m (Lnet/minecraft/class_3666;)Ljava/lang/Boolean; method_28792 func_236648_c_ - m (Lnet/minecraft/class_3666;)Ljava/util/Optional; method_28789 func_236646_a_ - m ()Lnet/minecraft/class_2338; method_15884 getCrystalBeamTarget - m ()Ljava/util/List; method_15885 getSpikes - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28790 func_236645_a_ - f Z field_16207 crystalInvulnerable - f Lnet/minecraft/class_2338; field_16206 crystalBeamTarget - f Ljava/util/List; field_16208 spikes - f Lcom/mojang/serialization/Codec; field_24911 field_236644_a_ -c net/minecraft/class_3179 net/minecraft/world/gen/feature/SingleRandomFeature - m (Ljava/util/function/Supplier;)Ljava/util/stream/Stream; method_30651 func_242826_a - m (Lnet/minecraft/class_3179;)Ljava/util/List; method_28788 func_236643_a_ - f Lcom/mojang/serialization/Codec; field_24910 field_236642_a_ - f Ljava/util/List; field_13827 features -c net/minecraft/class_5313 net/minecraft/world/gen/settings/StructureSpreadSettings - m ()I method_28801 func_236662_b_ - m ()I method_28802 func_236663_c_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28800 func_236661_a_ - m ()I method_28799 func_236660_a_ - f I field_24914 field_236657_b_ - f Lcom/mojang/serialization/Codec; field_24913 field_236656_a_ - f I field_24915 field_236658_c_ - f I field_24916 field_236659_d_ -c net/minecraft/class_4642 net/minecraft/world/gen/feature/LiquidsConfig - m (Lnet/minecraft/class_4642;)Ljava/lang/Integer; method_28796 func_236653_c_ - m (Lnet/minecraft/class_4642;)Ljava/lang/Boolean; method_28797 func_236654_d_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28794 func_236650_a_ - m (Lnet/minecraft/class_4642;)Lnet/minecraft/class_3610; method_28798 func_236655_e_ - m (Lnet/minecraft/class_4642;)Ljava/lang/Integer; method_28795 func_236652_b_ - m (Lnet/minecraft/class_4642;)Ljava/util/Set; method_28793 func_236651_a_ - f Z field_21284 needsBlockBelow - f I field_21285 rockAmount - f Lcom/mojang/serialization/Codec; field_24912 field_236649_a_ - f I field_21286 holeAmount - f Lnet/minecraft/class_3610; field_21283 state - f Ljava/util/Set; field_21287 acceptedBlocks -c net/minecraft/class_4643 net/minecraft/world/gen/feature/BaseTreeFeatureConfig - m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_5201; method_28815 func_236689_e_ - m (Lnet/minecraft/class_4643;)Ljava/lang/Integer; method_28813 func_236687_c_ - m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_4651; method_28819 func_236693_i_ - m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_4647; method_28817 func_236691_g_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28811 func_236683_a_ - m (Lnet/minecraft/class_4643;)Ljava/util/List; method_28814 func_236688_d_ - m ()V method_23916 forcePlacement - m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_4651; method_28818 func_236692_h_ - m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_2902$class_2903; method_28810 func_236684_a_ - m (Ljava/util/List;)Lnet/minecraft/class_4643; method_27373 func_236685_a_ - m (Lnet/minecraft/class_4643;)Lnet/minecraft/class_5141; method_28816 func_236690_f_ - m (Lnet/minecraft/class_4643;)Ljava/lang/Boolean; method_28812 func_236686_b_ - f Z field_24138 ignoreVines - f Ljava/util/List; field_21290 decorators - f Lnet/minecraft/class_2902$class_2903; field_24139 field_236682_l_ - f Lnet/minecraft/class_5201; field_24137 minimumSize - f Lcom/mojang/serialization/Codec; field_24921 CODEC - f Lnet/minecraft/class_4647; field_24135 foliagePlacer - f Z field_21593 forcePlacement - f Lnet/minecraft/class_4651; field_21288 trunkProvider - f Lnet/minecraft/class_5141; field_24136 trunkPlacer - f Lnet/minecraft/class_4651; field_21289 leavesProvider - f I field_21291 maxWaterDepth -c net/minecraft/class_4643$class_4644 net/minecraft/world/gen/feature/BaseTreeFeatureConfig$Builder - m (Ljava/util/List;)Lnet/minecraft/class_4643$class_4644; method_27376 setDecorators - m ()Lnet/minecraft/class_4643; method_23445 build - m ()Lnet/minecraft/class_4643$class_4644; method_27374 setIgnoreVines - m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_4643$class_4644; method_27375 func_236702_a_ - m (I)Lnet/minecraft/class_4643$class_4644; method_23446 setMaxWaterDepth - f Z field_24143 ignoreVines - f Lnet/minecraft/class_4647; field_24140 foliagePlacer - f Lnet/minecraft/class_2902$class_2903; field_24144 field_236699_i_ - f Ljava/util/List; field_21294 decorators - f I field_21295 maxWaterDepth - f Lnet/minecraft/class_5141; field_24141 trunkPlacer - f Lnet/minecraft/class_4651; field_21292 trunkProvider - f Lnet/minecraft/class_5201; field_24142 minimumSize - f Lnet/minecraft/class_4651; field_21293 leavesProvider -c net/minecraft/class_5314 net/minecraft/world/gen/settings/StructureSeparationSettings - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28805 func_236669_a_ - m ()I method_28803 func_236668_a_ - m (Lnet/minecraft/class_5314;)Ljava/lang/Integer; method_28804 func_236672_b_ - m ()I method_28806 func_236671_b_ - m (Lnet/minecraft/class_5314;)Lcom/mojang/serialization/DataResult; method_29298 func_236670_a_ - m ()I method_28808 func_236673_c_ - m (Lnet/minecraft/class_5314;)Ljava/lang/Integer; method_28807 func_236674_c_ - m (Lnet/minecraft/class_5314;)Ljava/lang/Integer; method_28809 func_236675_d_ - f I field_24919 field_236666_c_ - f I field_24920 field_236667_d_ - f Lcom/mojang/serialization/Codec; field_24917 field_236664_a_ - f I field_24918 field_236665_b_ -c net/minecraft/class_5201 net/minecraft/world/gen/feature/AbstractFeatureSizeType - m (Ljava/util/Optional;)Ljava/util/OptionalInt; method_28822 func_236708_a_ - m (II)I method_27378 func_230369_a_ - m (Ljava/util/OptionalInt;)Ljava/util/Optional; method_28823 func_236709_a_ - m ()Ljava/util/OptionalInt; method_27377 func_236710_c_ - m ()Lnet/minecraft/class_5202; method_28824 func_230370_b_ - m (Lnet/minecraft/class_5201;)Ljava/util/OptionalInt; method_28821 func_236707_a_ - m ()Lcom/mojang/serialization/codecs/RecordCodecBuilder; method_28820 func_236706_a_ - f Lcom/mojang/serialization/Codec; field_24922 CODEC - f Ljava/util/OptionalInt; field_24146 field_236705_b_ -c net/minecraft/class_5202 net/minecraft/world/gen/feature/FeatureSizeType - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_5202; method_27382 register - m ()Lcom/mojang/serialization/Codec; method_28825 getCodec - f Lnet/minecraft/class_5202; field_24147 TWO_LAYERS_FEATURE_SIZE - f Lcom/mojang/serialization/Codec; field_24923 codec - f Lnet/minecraft/class_5202; field_24148 THREE_LAYERS_FEATURE_SIZE -c net/minecraft/class_5204 net/minecraft/world/gen/feature/TwoLayerFeature - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28833 func_236732_a_ - m (Lnet/minecraft/class_5204;)Ljava/lang/Integer; method_28834 func_236734_b_ - m (Lnet/minecraft/class_5204;)Ljava/lang/Integer; method_28832 func_236733_a_ - m (Lnet/minecraft/class_5204;)Ljava/lang/Integer; method_28835 func_236735_c_ - f I field_24155 field_236729_d_ - f Lcom/mojang/serialization/Codec; field_24925 field_236728_c_ - f I field_24156 field_236730_e_ - f I field_24157 field_236731_f_ -c net/minecraft/class_5203 net/minecraft/world/gen/feature/ThreeLayerFeature - m (Lnet/minecraft/class_5203;)Ljava/lang/Integer; method_28826 func_236723_a_ - m (Lnet/minecraft/class_5203;)Ljava/lang/Integer; method_28828 func_236724_b_ - m (Lnet/minecraft/class_5203;)Ljava/lang/Integer; method_28830 func_236726_d_ - m (Lnet/minecraft/class_5203;)Ljava/lang/Integer; method_28829 func_236725_c_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28827 func_236722_a_ - m (Lnet/minecraft/class_5203;)Ljava/lang/Integer; method_28831 func_236727_e_ - f I field_24151 field_236718_e_ - f I field_24152 field_236719_f_ - f I field_24153 field_236720_g_ - f I field_24154 field_236721_h_ - f Lcom/mojang/serialization/Codec; field_24924 field_236716_c_ - f I field_24150 field_236717_d_ -c net/minecraft/class_4645 net/minecraft/world/gen/foliageplacer/AcaciaFoliagePlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28836 func_236737_a_ - f Lcom/mojang/serialization/Codec; field_24926 field_236736_a_ -c net/minecraft/class_5205 net/minecraft/world/gen/foliageplacer/BushFoliagePlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28840 func_236744_c_ - f Lcom/mojang/serialization/Codec; field_24928 field_236743_c_ -c net/minecraft/class_4646 net/minecraft/world/gen/foliageplacer/BlobFoliagePlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28839 func_236742_c_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/Products$P3; method_28838 func_236740_a_ - m (Lnet/minecraft/class_4646;)Ljava/lang/Integer; method_28837 func_236741_a_ - f Lcom/mojang/serialization/Codec; field_24927 field_236738_a_ - f I field_23752 field_236739_b_ -c net/minecraft/class_5207 net/minecraft/world/gen/foliageplacer/FancyFoliagePlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28842 func_236748_c_ - f Lcom/mojang/serialization/Codec; field_24930 field_236747_c_ -c net/minecraft/class_5206 net/minecraft/world/gen/foliageplacer/DarkOakFoliagePlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28841 func_236746_a_ - f Lcom/mojang/serialization/Codec; field_24929 field_236745_a_ -c net/minecraft/class_4648 net/minecraft/world/gen/foliageplacer/FoliagePlacerType - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4648; method_28850 func_236773_a_ - m ()Lcom/mojang/serialization/Codec; method_28849 func_236772_a_ - f Lnet/minecraft/class_4648; field_21302 ACACIA - f Lnet/minecraft/class_4648; field_24165 field_236770_i_ - f Lnet/minecraft/class_4648; field_21301 PINE - f Lnet/minecraft/class_4648; field_24164 field_236769_h_ - f Lnet/minecraft/class_4648; field_21300 SPRUCE - f Lnet/minecraft/class_4648; field_24163 field_236768_g_ - f Lcom/mojang/serialization/Codec; field_24932 field_236771_j_ - f Lnet/minecraft/class_4648; field_21299 BLOB - f Lnet/minecraft/class_4648; field_24162 field_236767_f_ - f Lnet/minecraft/class_4648; field_24161 field_236766_e_ -c net/minecraft/class_4647 net/minecraft/world/gen/foliageplacer/FoliagePlacer - m (Lnet/minecraft/class_4647;)Lnet/minecraft/class_5428; method_30412 func_242829_b - m ()Lnet/minecraft/class_4648; method_28843 func_230371_a_ - m (Ljava/util/Random;)I method_27386 func_236755_a_ - m (Lnet/minecraft/class_4647;)Lnet/minecraft/class_5428; method_30410 func_242828_a - m (Ljava/util/Random;I)I method_23452 func_230376_a_ - m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_4643;Lnet/minecraft/class_2338;ILjava/util/Set;IZLnet/minecraft/class_3341;)V method_23449 func_236753_a_ - m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_4643;ILnet/minecraft/class_4647$class_5208;IILjava/util/Set;ILnet/minecraft/class_3341;)V method_23448 func_230372_a_ - m (Ljava/util/Random;ILnet/minecraft/class_4643;)I method_26989 func_230374_a_ - m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_4643;ILnet/minecraft/class_4647$class_5208;IILjava/util/Set;Lnet/minecraft/class_3341;)V method_27385 func_236752_a_ - m (Ljava/util/Random;IIIIZ)Z method_27387 func_230375_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/Products$P2; method_30411 func_242830_b - m (Ljava/util/Random;IIIIZ)Z method_23451 func_230373_a_ - f Lcom/mojang/serialization/Codec; field_24931 field_236749_d_ - f Lnet/minecraft/class_5428; field_23753 field_236750_g_ - f Lnet/minecraft/class_5428; field_21296 field_227381_a_ -c net/minecraft/class_4647$class_5208 net/minecraft/world/gen/foliageplacer/FoliagePlacer$Foliage - m ()Z method_27390 func_236765_c_ - m ()I method_27389 func_236764_b_ - m ()Lnet/minecraft/class_2338; method_27388 func_236763_a_ - f I field_24159 field_236761_b_ - f Z field_24160 field_236762_c_ - f Lnet/minecraft/class_2338; field_24158 field_236760_a_ -c net/minecraft/class_5210 net/minecraft/world/gen/foliageplacer/MegaPineFoliagePlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30413 func_242832_a - m (Lnet/minecraft/class_5210;)Lnet/minecraft/class_5428; method_30414 func_242831_a - f Lcom/mojang/serialization/Codec; field_24934 field_236778_a_ - f Lnet/minecraft/class_5428; field_24168 field_236780_c_ -c net/minecraft/class_5209 net/minecraft/world/gen/foliageplacer/JungleFoliagePlacer - m (Lnet/minecraft/class_5209;)Ljava/lang/Integer; method_28851 func_236777_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28852 func_236776_a_ - f I field_24166 field_236775_b_ - f Lcom/mojang/serialization/Codec; field_24933 field_236774_a_ -c net/minecraft/class_4650 net/minecraft/world/gen/foliageplacer/SpruceFoliagePlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30417 func_242836_a - m (Lnet/minecraft/class_4650;)Lnet/minecraft/class_5428; method_30418 func_242835_a - f Lnet/minecraft/class_5428; field_23757 field_236791_b_ - f Lcom/mojang/serialization/Codec; field_24936 field_236790_a_ -c net/minecraft/class_4649 net/minecraft/world/gen/foliageplacer/PineFoliagePlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30415 func_242834_a - m (Lnet/minecraft/class_4649;)Lnet/minecraft/class_5428; method_30416 func_242833_a - f Lcom/mojang/serialization/Codec; field_24935 field_236784_a_ - f Lnet/minecraft/class_5428; field_23755 field_236785_b_ -c net/minecraft/class_4652 net/minecraft/world/gen/blockstateprovider/BlockStateProviderType - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4652; method_23457 register - m ()Lcom/mojang/serialization/Codec; method_28863 getCodec - f Lnet/minecraft/class_4652; field_24938 AXIS_ROTATING_STATE_PROVIDER - f Lnet/minecraft/class_4652; field_21305 SIMPLE_STATE_PROVIDER - f Lnet/minecraft/class_4652; field_21306 WEIGHTED_STATE_PROVIDER - f Lnet/minecraft/class_4652; field_21307 PLAIN_FLOWER_PROVIDER - f Lcom/mojang/serialization/Codec; field_24939 codec - f Lnet/minecraft/class_4652; field_21308 FOREST_FLOWER_PROVIDER -c net/minecraft/class_4651 net/minecraft/world/gen/blockstateprovider/BlockStateProvider - m ()Lnet/minecraft/class_4652; method_28862 getProviderType - m (Ljava/util/Random;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_23455 getBlockState - f Lcom/mojang/serialization/Codec; field_24937 CODEC -c net/minecraft/class_4654 net/minecraft/world/gen/blockstateprovider/PlainFlowerBlockStateProvider - m ()Lnet/minecraft/class_4654; method_28865 func_236806_b_ - f [Lnet/minecraft/class_2680; field_21311 RARE_FLOWERS - f [Lnet/minecraft/class_2680; field_21312 COMMON_FLOWERS - f Lcom/mojang/serialization/Codec; field_24942 CODEC - f Lnet/minecraft/class_4654; field_24943 PROVIDER -c net/minecraft/class_4653 net/minecraft/world/gen/blockstateprovider/ForestFlowerBlockStateProvider - m ()Lnet/minecraft/class_4653; method_28864 func_236803_b_ - f Lnet/minecraft/class_4653; field_24941 PROVIDER - f [Lnet/minecraft/class_2680; field_21310 STATES - f Lcom/mojang/serialization/Codec; field_24940 CODEC -c net/minecraft/class_4656 net/minecraft/world/gen/blockstateprovider/SimpleBlockStateProvider - m (Lnet/minecraft/class_4656;)Lnet/minecraft/class_2680; method_28867 func_236810_a_ - f Lnet/minecraft/class_2680; field_21314 state - f Lcom/mojang/serialization/Codec; field_24945 CODEC -c net/minecraft/class_4655 net/minecraft/world/gen/blockstateprovider/AxisRotatingBlockStateProvider - m (Lnet/minecraft/class_4655;)Lnet/minecraft/class_2248; method_28866 func_236808_a_ - f Lnet/minecraft/class_2248; field_21313 block - f Lcom/mojang/serialization/Codec; field_24944 CODEC -c net/minecraft/class_4657 net/minecraft/world/gen/blockstateprovider/WeightedBlockStateProvider - m (Lnet/minecraft/class_4657;)Lnet/minecraft/class_4131; method_28869 func_236813_a_ - m (Lnet/minecraft/class_2680;I)Lnet/minecraft/class_4657; method_23458 addWeightedBlockstate - m (Lnet/minecraft/class_4131;)Lcom/mojang/serialization/DataResult; method_28868 encode - f Lnet/minecraft/class_4131; field_21315 weightedStates - f Lcom/mojang/serialization/Codec; field_24946 CODEC -c net/minecraft/class_3776 net/minecraft/world/gen/feature/jigsaw/FeatureJigsawPiece - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2470;)Lnet/minecraft/class_2338; method_16601 getSize - m ()Lnet/minecraft/class_2487; method_19299 writeNBT - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28871 func_236817_a_ - m (Lnet/minecraft/class_3776;)Ljava/util/function/Supplier; method_28872 func_236818_a_ - f Ljava/util/function/Supplier; field_16661 configuredFeature - f Lcom/mojang/serialization/Codec; field_24948 field_236816_a_ - f Lnet/minecraft/class_2487; field_16662 nbt -c net/minecraft/class_3777 net/minecraft/world/gen/feature/jigsaw/EmptyJigsawPiece - m ()Lnet/minecraft/class_3777; method_28870 func_236815_b_ - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_3777; field_16663 INSTANCE - f Lcom/mojang/serialization/Codec; field_24947 field_236814_a_ -c net/minecraft/class_3780 net/minecraft/world/gen/feature/jigsaw/JigsawJunction - m ()I hashCode hashCode - m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_3780; method_28873 func_236819_a_ - m ()I method_16611 getSourceGroundY - m (Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_16612 func_236820_a_ - m (Ljava/lang/Object;)Z equals equals - m ()I method_16610 getSourceX - m ()Ljava/lang/String; toString toString - m ()I method_16609 getSourceZ - f I field_16668 sourceZ - f Lnet/minecraft/class_3785$class_3786; field_16671 destProjection - f I field_16667 deltaY - f I field_16669 sourceGroundY - f I field_16670 sourceX -c net/minecraft/class_5188 net/minecraft/world/gen/feature/jigsaw/LegacySingleJigsawPiece - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28874 func_236833_a_ - f Lcom/mojang/serialization/Codec; field_24949 field_236832_a_ -c net/minecraft/class_3778 net/minecraft/world/gen/feature/jigsaw/JigsawManager - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_3812;Lnet/minecraft/class_3778$class_3779;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Ljava/util/List;Ljava/util/Random;ZZ)V method_30419 func_242837_a - m ()Lorg/apache/logging/log4j/Logger; method_19300 func_236824_b_ - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_3790;ILnet/minecraft/class_3778$class_3779;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;Ljava/util/List;Ljava/util/Random;)V method_27230 func_242838_a - f Lorg/apache/logging/log4j/Logger; field_16665 LOGGER -c net/minecraft/class_3778$class_4182 net/minecraft/world/gen/feature/jigsaw/JigsawManager$Assembler - m (Lnet/minecraft/class_3778$class_4182;Lnet/minecraft/class_3790;Lorg/apache/commons/lang3/mutable/MutableObject;IIZ)V method_27232 func_236830_a_ - m (Lnet/minecraft/class_3778$class_4182;)Ljava/util/Deque; method_27231 func_236829_a_ - m (Lnet/minecraft/class_3341;Lnet/minecraft/class_3499$class_3501;)I method_19305 func_242841_a - m (Lnet/minecraft/class_3785;)Ljava/lang/Integer; method_31113 func_242840_a - m (Lnet/minecraft/class_3785;)Ljava/lang/Integer; method_31114 func_242842_b - m (Lnet/minecraft/class_3785;)Ljava/util/Optional; method_31115 func_242843_c - m (Lnet/minecraft/class_3790;Lorg/apache/commons/lang3/mutable/MutableObject;IIZ)V method_19306 func_236831_a_ - f Ljava/util/Deque; field_18706 availablePieces - f Ljava/util/Random; field_18705 rand - f Lnet/minecraft/class_3485; field_18703 templateManager - f Ljava/util/List; field_18704 structurePieces - f Lnet/minecraft/class_2378; field_25852 field_242839_a - f Lnet/minecraft/class_2794; field_18702 chunkGenerator - f Lnet/minecraft/class_3778$class_3779; field_18701 pieceFactory - f I field_18700 maxDepth -c net/minecraft/class_3778$class_4181 net/minecraft/world/gen/feature/jigsaw/JigsawManager$Entry - m (Lnet/minecraft/class_3778$class_4181;)I method_19304 func_236828_d_ - m (Lnet/minecraft/class_3778$class_4181;)I method_19303 func_236827_c_ - m (Lnet/minecraft/class_3778$class_4181;)Lorg/apache/commons/lang3/mutable/MutableObject; method_19302 func_236826_b_ - m (Lnet/minecraft/class_3778$class_4181;)Lnet/minecraft/class_3790; method_19301 func_236825_a_ - f I field_18698 boundsTop - f Lnet/minecraft/class_3790; field_18696 villagePiece - f I field_18699 depth - f Lorg/apache/commons/lang3/mutable/MutableObject; field_18697 free -c net/minecraft/class_3778$class_3779 net/minecraft/world/gen/feature/jigsaw/JigsawManager$IPieceFactory - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3784;Lnet/minecraft/class_2338;ILnet/minecraft/class_2470;Lnet/minecraft/class_3341;)Lnet/minecraft/class_3790; create create -c net/minecraft/class_3778$1 net/minecraft/world/gen/feature/jigsaw/JigsawManager$1 -c net/minecraft/class_3781 net/minecraft/world/gen/feature/jigsaw/SingleJigsawPiece - m (Lnet/minecraft/class_2470;Lnet/minecraft/class_3341;Z)Lnet/minecraft/class_3492; method_16616 func_230379_a_ - m ()Ljava/lang/String; toString toString - m ()Lnet/minecraft/class_5497; method_31022 func_242844_h - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Z)Ljava/util/List; method_16614 getDataMarkers - m (Lcom/mojang/datafixers/util/Either;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_28877 func_236840_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28878 func_236841_a_ - m (Lnet/minecraft/class_3781;)Ljava/util/function/Supplier; method_28881 func_236845_b_ - m ()Lcom/mojang/serialization/codecs/RecordCodecBuilder; method_28880 func_236844_b_ - m ()Lcom/mojang/serialization/codecs/RecordCodecBuilder; method_28882 func_236846_c_ - m (Lnet/minecraft/class_3485;)Lnet/minecraft/class_3499; method_27233 func_236843_a_ - m (Lnet/minecraft/class_3781;)Lcom/mojang/datafixers/util/Either; method_28879 func_236842_a_ - f Lcom/mojang/serialization/Codec; field_24951 field_236837_a_ - f Lcom/mojang/serialization/Codec; field_24952 field_236838_b_ - f Lcom/mojang/datafixers/util/Either; field_24015 field_236839_c_ - f Ljava/util/function/Supplier; field_16674 processors -c net/minecraft/class_3782 net/minecraft/world/gen/feature/jigsaw/ListJigsawPiece - m ()Ljava/lang/String; toString toString - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28875 func_236835_a_ - m (Lnet/minecraft/class_3785$class_3786;)V method_19307 setProjectionOnEachElement - m (Lnet/minecraft/class_3785$class_3786;Lnet/minecraft/class_3784;)V method_16620 func_214863_a - m (Lnet/minecraft/class_3782;)Ljava/util/List; method_28876 func_236836_a_ - f Ljava/util/List; field_16676 elements - f Lcom/mojang/serialization/Codec; field_24950 field_236834_a_ -c net/minecraft/class_3816 net/minecraft/world/gen/feature/jigsaw/IJigsawDeserializer - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_3816; method_28885 func_236851_a_ - m ()Lcom/mojang/serialization/Codec; codec codec - m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28884 func_236850_a_ - f Lnet/minecraft/class_3816; field_24016 field_236849_e_ - f Lnet/minecraft/class_3816; field_16973 SINGLE_POOL_ELEMENT - f Lnet/minecraft/class_3816; field_16974 LIST_POOL_ELEMENT - f Lnet/minecraft/class_3816; field_16971 FEATURE_POOL_ELEMENT - f Lnet/minecraft/class_3816; field_16972 EMPTY_POOL_ELEMENT -c net/minecraft/class_3784 net/minecraft/world/gen/feature/jigsaw/JigsawPiece - m ()I method_19308 getGroundLevelDelta - m (Lnet/minecraft/class_2975;)Ljava/util/function/Function; method_30421 func_242845_a - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/Random;)Ljava/util/List; method_16627 getJigsawBlocks - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;)Lnet/minecraft/class_3341; method_16628 getBoundingBox - m ()Lnet/minecraft/class_3816; method_16757 getType - m (Ljava/util/List;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3782; method_30430 func_242854_a - m ()Lnet/minecraft/class_3785$class_3786; method_16624 getPlacementBehaviour - m (Lnet/minecraft/class_2975;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3776; method_30422 func_242846_a - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_3499$class_3501;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_16756 handleDataMarker - m (Ljava/util/List;)Ljava/util/function/Function; method_30429 func_242853_a - m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_2975; method_30431 func_242856_b - m (Ljava/lang/String;)Ljava/util/function/Function; method_30434 func_242859_b - m (Lnet/minecraft/class_5497;)Lnet/minecraft/class_5497; method_31025 func_242858_b - m (Lnet/minecraft/class_3785$class_3786;Ljava/util/function/Function;)Lnet/minecraft/class_3784; method_30424 func_242847_a - m (Ljava/lang/String;Lnet/minecraft/class_5497;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3781; method_30427 func_242852_a - m (Ljava/lang/String;)Ljava/util/function/Function; method_30425 func_242849_a - m (Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3784; method_16622 setPlacementBehaviour - m ()Ljava/util/function/Function; method_30438 func_242864_g - m (Ljava/lang/String;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3781; method_30428 func_242850_a - m ()Lcom/mojang/serialization/codecs/RecordCodecBuilder; method_28883 func_236848_d_ - m (Ljava/lang/String;Lnet/minecraft/class_5497;)Ljava/util/function/Function; method_30426 func_242851_a - m (Ljava/lang/String;Lnet/minecraft/class_5497;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_5188; method_30436 func_242862_b - m (Ljava/lang/String;Lnet/minecraft/class_5497;)Ljava/util/function/Function; method_30435 func_242861_b - m ()Lnet/minecraft/class_5497; method_31026 func_242863_c - m (Ljava/lang/String;Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_5188; method_30437 func_242860_b - m (Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3777; method_30433 func_242857_b - m ()Lnet/minecraft/class_5497; method_31024 func_242855_b - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_5281;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3341;Ljava/util/Random;Z)Z method_16626 func_230378_a_ - m (Lnet/minecraft/class_5497;)Lnet/minecraft/class_5497; method_31023 func_242848_a - f Lcom/mojang/serialization/Codec; field_24953 field_236847_e_ - f Lnet/minecraft/class_3785$class_3786; field_16862 projection -c net/minecraft/class_3785 net/minecraft/world/gen/feature/jigsaw/JigsawPattern - m (Lnet/minecraft/class_3485;)I method_19309 getMaxSize - m (Ljava/util/Random;)Lnet/minecraft/class_3784; method_16631 getRandomPiece - m (Ljava/util/Random;)Ljava/util/List; method_16633 getShuffledPieces - m (Lnet/minecraft/class_3785;)Ljava/util/List; method_28888 func_236857_b_ - m ()Lnet/minecraft/class_2960; method_16634 getFallback - m ()Lnet/minecraft/class_2960; method_16629 getName - m ()I method_16632 getNumberOfPieces - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28886 func_236854_a_ - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3784;)I method_19310 func_236856_a_ - f Lcom/mojang/serialization/Codec; field_25853 field_236852_a_ - f Lcom/mojang/serialization/Codec; field_24954 field_244392_b_ - f Ljava/util/List; field_16864 rawTemplates - f Ljava/util/List; field_16680 jigsawPieces - f Lorg/apache/logging/log4j/Logger; field_24955 field_236853_d_ - f Lnet/minecraft/class_2960; field_16678 name - f I field_18707 maxSize - f Lnet/minecraft/class_2960; field_16681 fallback -c net/minecraft/class_3785$class_3786 net/minecraft/world/gen/feature/jigsaw/JigsawPattern$PlacementBehaviour - m ()Lcom/google/common/collect/ImmutableList; method_16636 getStructureProcessors - m ()[Lnet/minecraft/class_3785$class_3786; values values - m (Lnet/minecraft/class_3785$class_3786;)Lnet/minecraft/class_3785$class_3786; method_16637 func_214935_a - m ()Ljava/lang/String; method_16635 getName - m (Ljava/lang/String;)Lnet/minecraft/class_3785$class_3786; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_3785$class_3786; method_16638 getBehaviour - f Lnet/minecraft/class_3785$class_3786; field_16687 RIGID - f Ljava/util/Map; field_16684 BEHAVIOURS - f Ljava/lang/String; field_16682 name - f Lcom/mojang/serialization/Codec; field_24956 field_236858_c_ - f Lnet/minecraft/class_3785$class_3786; field_16686 TERRAIN_MATCHING - f Lcom/google/common/collect/ImmutableList; field_16685 structureProcessors - f [Lnet/minecraft/class_3785$class_3786; field_16683 $VALUES -c net/minecraft/class_4659 net/minecraft/world/gen/treedecorator/BeehiveTreeDecorator - m (Lnet/minecraft/class_4659;)Ljava/lang/Float; method_28890 func_236865_a_ - m (ILnet/minecraft/class_2338;)Z method_23464 func_236864_a_ - f F field_21317 probability - f Lcom/mojang/serialization/Codec; field_24958 field_236863_a_ -c net/minecraft/class_4658 net/minecraft/world/gen/treedecorator/AlterGroundTreeDecorator - m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_23463 func_227414_b_ - m (Lnet/minecraft/class_4658;)Lnet/minecraft/class_4651; method_28889 func_236862_a_ - m (ILnet/minecraft/class_2338;)Z method_23460 func_236860_a_ - m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_23462 func_227413_a_ - m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_23461 func_236861_a_ - f Lcom/mojang/serialization/Codec; field_24957 field_236859_a_ - f Lnet/minecraft/class_4651; field_21316 field_227410_b_ -c net/minecraft/class_4661 net/minecraft/world/gen/treedecorator/LeaveVineTreeDecorator - m (Lnet/minecraft/class_3747;Lnet/minecraft/class_2338;Lnet/minecraft/class_2746;Ljava/util/Set;Lnet/minecraft/class_3341;)V method_23467 func_227420_a_ - m (Ljava/util/Random;Lnet/minecraft/class_5281;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;)V method_23468 func_242866_a - m ()Lnet/minecraft/class_4661; method_28892 func_236873_b_ - f Lnet/minecraft/class_4661; field_24961 field_236871_b_ - f Lcom/mojang/serialization/Codec; field_24960 field_236870_a_ -c net/minecraft/class_4660 net/minecraft/world/gen/treedecorator/CocoaTreeDecorator - m (ILnet/minecraft/class_2338;)Z method_23465 func_236867_a_ - m (Ljava/util/Random;Lnet/minecraft/class_5281;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;)V method_23466 func_242865_a - m (Lnet/minecraft/class_4660;)Ljava/lang/Float; method_28891 func_236868_a_ - f Lcom/mojang/serialization/Codec; field_24959 field_236866_a_ - f F field_21318 field_227417_b_ -c net/minecraft/class_4662 net/minecraft/world/gen/treedecorator/TreeDecorator - m ()Lnet/minecraft/class_4663; method_28893 func_230380_a_ - m (Lnet/minecraft/class_1945;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Set;Lnet/minecraft/class_3341;)V method_23470 func_227423_a_ - m (Lnet/minecraft/class_5281;Ljava/util/Random;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Lnet/minecraft/class_3341;)V method_23469 func_225576_a_ - m (Lnet/minecraft/class_1945;Lnet/minecraft/class_2338;Lnet/minecraft/class_2746;Ljava/util/Set;Lnet/minecraft/class_3341;)V method_23471 func_227424_a_ - f Lcom/mojang/serialization/Codec; field_24962 field_236874_c_ -c net/minecraft/class_4664 net/minecraft/world/gen/treedecorator/TrunkVineTreeDecorator - m (Ljava/util/Random;Lnet/minecraft/class_5281;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;)V method_23474 func_236880_a_ - m ()Lnet/minecraft/class_4664; method_28896 func_236881_b_ - f Lcom/mojang/serialization/Codec; field_24964 field_236878_a_ - f Lnet/minecraft/class_4664; field_24965 field_236879_b_ -c net/minecraft/class_4663 net/minecraft/world/gen/treedecorator/TreeDecoratorType - m ()Lcom/mojang/serialization/Codec; method_28894 func_236876_a_ - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4663; method_28895 register - f Lnet/minecraft/class_4663; field_21322 COCOA - f Lnet/minecraft/class_4663; field_21321 LEAVE_VINE - f Lnet/minecraft/class_4663; field_21323 BEEHIVE - f Lcom/mojang/serialization/Codec; field_24963 field_236875_f_ - f Lnet/minecraft/class_4663; field_21324 ALTER_GROUND - f Lnet/minecraft/class_4663; field_21320 TRUNK_VINE -c net/minecraft/class_5211 net/minecraft/world/gen/trunkplacer/DarkOakTrunkPlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28897 func_236883_b_ - f Lcom/mojang/serialization/Codec; field_24966 field_236882_a_ -c net/minecraft/class_5139 net/minecraft/world/gen/trunkplacer/ForkyTrunkPlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28899 func_236897_b_ - f Lcom/mojang/serialization/Codec; field_24968 field_236896_a_ -c net/minecraft/class_5212 net/minecraft/world/gen/trunkplacer/FancyTrunkPlacer - m (Lnet/minecraft/class_2338;)I method_27394 func_236888_a_ - m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;ZLjava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)Z method_27393 func_236887_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2350$class_2351; method_27395 func_236889_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28898 func_236891_b_ - m (II)F method_27396 func_236890_b_ - m (II)Z method_27391 func_236885_a_ - m (Lnet/minecraft/class_3747;Ljava/util/Random;ILnet/minecraft/class_2338;Ljava/util/List;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)V method_27392 func_236886_a_ - f Lcom/mojang/serialization/Codec; field_24967 field_236884_a_ -c net/minecraft/class_5212$class_5213 net/minecraft/world/gen/trunkplacer/FancyTrunkPlacer$Foliage - m ()I method_27397 func_236894_a_ - m (Lnet/minecraft/class_5212$class_5213;)Lnet/minecraft/class_4647$class_5208; method_27398 func_236895_a_ - f I field_24170 field_236893_b_ - f Lnet/minecraft/class_4647$class_5208; field_24169 field_236892_a_ -c net/minecraft/class_5215 net/minecraft/world/gen/trunkplacer/MegaJungleTrunkPlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28901 func_236902_b_ - f Lcom/mojang/serialization/Codec; field_24970 field_236901_b_ -c net/minecraft/class_5214 net/minecraft/world/gen/trunkplacer/GiantTrunkPlacer - m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;Lnet/minecraft/class_2338;III)V method_27399 func_236899_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28900 func_236900_b_ - f Lcom/mojang/serialization/Codec; field_24969 field_236898_a_ -c net/minecraft/class_5141 net/minecraft/world/gen/trunkplacer/AbstractTrunkPlacer - m (Lnet/minecraft/class_5141;)Ljava/lang/Integer; method_28907 func_236919_c_ - m (Lnet/minecraft/class_3746;Lnet/minecraft/class_2338;)Z method_27403 func_236912_a_ - m (Lnet/minecraft/class_5141;)Ljava/lang/Integer; method_28906 func_236918_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/Products$P3; method_28904 func_236915_a_ - m (Lnet/minecraft/class_5141;)Ljava/lang/Integer; method_28905 func_236916_a_ - m (Lnet/minecraft/class_1945;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3341;)V method_27404 func_236913_a_ - m (Lnet/minecraft/class_3747;Lnet/minecraft/class_2338;)V method_27400 func_236909_a_ - m (Lnet/minecraft/class_3747;Ljava/util/Random;ILnet/minecraft/class_2338;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)Ljava/util/List; method_26991 func_230382_a_ - m ()Lnet/minecraft/class_5142; method_28903 func_230381_a_ - m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338$class_2339;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)V method_27401 func_236910_a_ - m (Lnet/minecraft/class_3747;Ljava/util/Random;Lnet/minecraft/class_2338;Ljava/util/Set;Lnet/minecraft/class_3341;Lnet/minecraft/class_4643;)Z method_27402 func_236911_a_ - m (Lnet/minecraft/class_2680;)Z method_27405 func_236914_a_ - m (Ljava/util/Random;)I method_26993 func_236917_a_ - f Lcom/mojang/serialization/Codec; field_24972 field_236905_c_ - f I field_23761 field_236907_e_ - f I field_23762 field_236908_f_ - f I field_23760 field_236906_d_ -c net/minecraft/class_5140 net/minecraft/world/gen/trunkplacer/StraightTrunkPlacer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28902 func_236904_b_ - f Lcom/mojang/serialization/Codec; field_24971 field_236903_a_ -c net/minecraft/class_5142 net/minecraft/world/gen/trunkplacer/TrunkPlacerType - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_5142; method_26995 register - m ()Lcom/mojang/serialization/Codec; method_28908 func_236927_a_ - f Lnet/minecraft/class_5142; field_24171 GIANT_TRUNK_PLACER - f Lnet/minecraft/class_5142; field_23764 FORKING_TRUNK_PLACER - f Lcom/mojang/serialization/Codec; field_24973 field_236926_g_ - f Lnet/minecraft/class_5142; field_24172 MEGA_TRUNK_PLACER - f Lnet/minecraft/class_5142; field_24173 DARK_OAK_TRUNK_PLACER - f Lnet/minecraft/class_5142; field_23763 STRAIGHT_TRUNK_PLACER - f Lnet/minecraft/class_5142; field_24174 FANCY_TRUNK_PLACER -c net/minecraft/class_3229 net/minecraft/world/gen/FlatLayerInfo - m ()Ljava/lang/String; toString toString - m ()Lnet/minecraft/class_2680; method_14286 getLayerMaterial - m ()I method_14288 getMinY - m (Lnet/minecraft/class_3229;)Lnet/minecraft/class_2248; method_28910 func_236931_a_ - m (I)V method_14287 setMinY - m ()I method_14289 getLayerCount - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28909 func_236930_a_ - f I field_14027 layerMinimumY - f Lcom/mojang/serialization/Codec; field_24974 field_236929_a_ - f I field_14028 layerCount - f Lnet/minecraft/class_2680; field_14026 layerMaterial -c net/minecraft/class_3232 net/minecraft/world/gen/FlatGenerationSettings - m (Lnet/minecraft/class_3232;)Ljava/util/Optional; method_31182 func_242868_a - m (Ljava/util/List;Lnet/minecraft/class_5311;)Lnet/minecraft/class_3232; method_29965 func_241527_a_ - m ()V method_28916 func_236941_b_ - m ()V method_28911 func_236936_a_ - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_3232; method_14309 func_242869_a - m ()Lnet/minecraft/class_1959; method_28917 func_236942_c_ - m (Lnet/minecraft/class_3232;)Ljava/lang/Boolean; method_30047 func_241528_b_ - m (Ljava/util/HashMap;)V method_28915 func_236940_a_ - m (Lnet/minecraft/class_3232;)Ljava/lang/Boolean; method_30046 func_242871_b - m ()V method_14330 updateLayers - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28913 func_236938_a_ - m (Lnet/minecraft/class_3232;)Lnet/minecraft/class_2378; method_31171 func_242874_d - m ()[Lnet/minecraft/class_2680; method_14312 getStates - m ()Ljava/util/List; method_14327 getFlatLayers - m ()Lnet/minecraft/class_1959; method_14326 getBiome - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31185 func_242875_d - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31184 func_242873_c - m (Lnet/minecraft/class_5311;)Lnet/minecraft/class_3232; method_28912 func_236937_a_ - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31183 func_242872_b - m ()Lnet/minecraft/class_5311; method_28051 func_236943_d_ - m (Ljava/util/function/Supplier;)V method_14325 func_242870_a - f Ljava/util/Map; field_14073 STRUCTURES - f Lnet/minecraft/class_2378; field_26748 field_242867_d - f Lcom/mojang/serialization/Codec; field_24975 field_236932_a_ - f Z field_24977 field_236935_l_ - f [Lnet/minecraft/class_2680; field_14082 states - f Z field_24976 field_236934_k_ - f Z field_14077 allAir - f Lorg/apache/logging/log4j/Logger; field_14064 LOGGER - f Lnet/minecraft/class_5311; field_24560 field_236933_f_ - f Ljava/util/function/Supplier; field_14081 biomeToUse - f Ljava/util/List; field_14072 flatLayers -c net/minecraft/class_5438 net/minecraft/world/gen/placement/SimpleHeightmapBasedPlacement -c net/minecraft/class_3234 net/minecraft/world/gen/placement/CaveEdge - m (Ljava/util/BitSet;Ljava/util/Random;Lnet/minecraft/class_3269;I)Z method_15895 func_215067_a - m (Lnet/minecraft/class_1923;I)Lnet/minecraft/class_2338; method_15894 func_215068_a - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3269;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14341 getPositions -c net/minecraft/class_5439 net/minecraft/world/gen/placement/RangeBiasedPlacement - m (Ljava/util/Random;Lnet/minecraft/class_2997;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30443 getPositions -c net/minecraft/class_3241 net/minecraft/world/gen/placement/ChancePlacement - m (Ljava/util/Random;Lnet/minecraft/class_3297;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14347 getPositions -c net/minecraft/class_3269 net/minecraft/world/gen/placement/CaveEdgeConfig - m (Lnet/minecraft/class_3269;)Ljava/lang/Float; method_28920 func_236948_a_ - m (Lnet/minecraft/class_3269;)Lnet/minecraft/class_2893$class_2894; method_28921 func_236949_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28919 func_236947_a_ - f Lcom/mojang/serialization/Codec; field_24979 CODEC - f F field_14197 probability - f Lnet/minecraft/class_2893$class_2894; field_14198 step -c net/minecraft/class_3243 net/minecraft/world/gen/placement/ConfiguredPlacement - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30444 func_242876_a - m (Lnet/minecraft/class_3243;)Lnet/minecraft/class_3284; method_28923 func_236954_a_ - m ()Lnet/minecraft/class_2998; method_30445 func_242877_b - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_3243;)Lnet/minecraft/class_3243; method_30446 withPlacement - f Lnet/minecraft/class_2998; field_14114 config - f Lnet/minecraft/class_3284; field_14115 decorator - f Lcom/mojang/serialization/Codec; field_24981 CODEC -c net/minecraft/class_3297 net/minecraft/world/gen/placement/ChanceConfig - m (Lnet/minecraft/class_3297;)Ljava/lang/Integer; method_28922 func_236951_a_ - f Lcom/mojang/serialization/Codec; field_24980 CODEC - f I field_14289 chance -c net/minecraft/class_5441 net/minecraft/world/gen/placement/CountNoisePlacement - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3003;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30449 getPositions - m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_30450 func_242879_a -c net/minecraft/class_5440 net/minecraft/world/gen/placement/CountPlacement - m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_30447 func_242878_a - m (Ljava/util/Random;Lnet/minecraft/class_2984;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30448 getPositions -c net/minecraft/class_3315 net/minecraft/world/gen/placement/DarkOakTreePlacement - m (Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_5444;Lnet/minecraft/class_3113;I)Lnet/minecraft/class_2338; method_15938 func_242881_a - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14524 getPositions - m (Lnet/minecraft/class_3113;)Lnet/minecraft/class_2902$class_2903; method_30452 func_241858_a -c net/minecraft/class_3265 net/minecraft/world/gen/placement/CountExtraPlacement - m (Ljava/util/Random;Lnet/minecraft/class_3276;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30451 getPositions - m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_15920 func_242880_a -c net/minecraft/class_5443 net/minecraft/world/gen/placement/DecoratedPlacementConfig - m ()Lnet/minecraft/class_3243; method_30455 getOuter - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30456 func_242887_a - m ()Lnet/minecraft/class_3243; method_30457 getInner - f Lnet/minecraft/class_3243; field_25856 inner - f Lcom/mojang/serialization/Codec; field_25854 CODEC - f Lnet/minecraft/class_3243; field_25855 outer -c net/minecraft/class_5442 net/minecraft/world/gen/placement/DecoratedPlacement - m (Lnet/minecraft/class_5443;Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30453 func_242882_a - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_5443;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30454 getPositions -c net/minecraft/class_3277 net/minecraft/world/gen/placement/DepthAverageConfig - m (Lnet/minecraft/class_3277;)Ljava/lang/Integer; method_28927 func_236959_c_ - m (Lnet/minecraft/class_3277;)Ljava/lang/Integer; method_28925 func_236958_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28924 func_236956_a_ - f I field_14212 spread - f I field_14214 baseline - f Lcom/mojang/serialization/Codec; field_24982 CODEC -c net/minecraft/class_5444 net/minecraft/world/gen/feature/WorldDecoratingHelper - m ()I method_30462 func_242895_b - m ()I method_30458 func_242891_a - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_30461 func_242894_a - m (Lnet/minecraft/class_2902$class_2903;II)I method_30460 func_242893_a - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2893$class_2894;)Ljava/util/BitSet; method_30459 func_242892_a - f Lnet/minecraft/class_5281; field_25857 field_242889_a - f Lnet/minecraft/class_2794; field_25858 chunkGenerator -c net/minecraft/class_5445 net/minecraft/world/gen/placement/HeightmapBasedPlacement - m (Lnet/minecraft/class_2998;)Lnet/minecraft/class_2902$class_2903; method_30463 func_241858_a -c net/minecraft/class_3252 net/minecraft/world/gen/placement/DepthAveragePlacement - m (Ljava/util/Random;Lnet/minecraft/class_3277;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15907 getPositions -c net/minecraft/class_3280 net/minecraft/world/gen/placement/EndGateway - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15924 getPositions -c net/minecraft/class_3282 net/minecraft/world/gen/placement/Height4To32 - m (Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15922 getPositions - m (Ljava/util/Random;Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_15921 func_215060_a -c net/minecraft/class_3284 net/minecraft/world/gen/placement/Placement - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;Lnet/minecraft/class_3284;)Lnet/minecraft/class_3284; method_14450 register - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_2998;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14452 getPositions - m ()Lcom/mojang/serialization/Codec; method_28928 getCodec - m (Lnet/minecraft/class_2998;)Lnet/minecraft/class_3243; method_23475 configure - m (Lnet/minecraft/class_2998;)Lnet/minecraft/class_3243; method_28930 func_236966_b_ - f Lnet/minecraft/class_3284; field_14250 NOPE - f Lcom/mojang/serialization/Codec; field_24983 codec - f Lnet/minecraft/class_3284; field_14242 WATER_LAKE - f Lnet/minecraft/class_3284; field_25875 GLOWSTONE - f Lnet/minecraft/class_3284; field_14237 LAVA_LAKE - f Lnet/minecraft/class_3284; field_14268 EMERALD_ORE - f Lnet/minecraft/class_3284; field_14235 FIRE - f Lnet/minecraft/class_3284; field_14244 MAGMA - f Lnet/minecraft/class_3284; field_25865 COUNT_EXTRA - f Lnet/minecraft/class_3284; field_25866 SQUARE - f Lnet/minecraft/class_3284; field_25864 COUNT_NOISE_BIASED - f Lnet/minecraft/class_3284; field_14243 ICEBERG - f Lnet/minecraft/class_3284; field_14239 DARK_OAK_TREE - f Lnet/minecraft/class_3284; field_25863 COUNT_NOISE - f Lnet/minecraft/class_3284; field_25861 CHANCE - f Lnet/minecraft/class_3284; field_25862 COUNT - f Lnet/minecraft/class_3284; field_14230 END_GATEWAY - f Lnet/minecraft/class_3284; field_14251 END_ISLAND - f Lnet/minecraft/class_3284; field_25870 RANGE - f Lnet/minecraft/class_3284; field_14231 TOP_SOLID_HEIGHTMAP - f Lnet/minecraft/class_3284; field_25869 HEIGHTMAP_WORLD_SURFACE - f Lnet/minecraft/class_3284; field_25868 HEIGHTMAP_SPREAD_DOUBLE - f Lnet/minecraft/class_3284; field_25867 HEIGHTMAP - f Lnet/minecraft/class_3284; field_14229 CARVING_MASK - f Lnet/minecraft/class_3284; field_25874 SPREAD_32_ABOVE - f Lnet/minecraft/class_3284; field_25872 RANGE_VERY_BIASED - f Lnet/minecraft/class_3284; field_25873 DEPTH_AVERAGE - f Lnet/minecraft/class_3284; field_25871 RANGE_BIASED - f Lnet/minecraft/class_3284; field_25859 DECORATED - f Lnet/minecraft/class_3284; field_25860 COUNT_MULTILAYER -c net/minecraft/class_3287 net/minecraft/world/gen/placement/EndIsland - m (Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15923 getPositions -c net/minecraft/class_3276 net/minecraft/world/gen/placement/AtSurfaceWithExtraConfig - m (Lnet/minecraft/class_3276;)Ljava/lang/Float; method_28937 func_236976_b_ - m (Lnet/minecraft/class_3276;)Ljava/lang/Integer; method_28936 func_236975_a_ - m (Lnet/minecraft/class_3276;)Ljava/lang/Integer; method_28938 func_236977_c_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28935 func_236974_a_ - f I field_14210 extraCount - f Lcom/mojang/serialization/Codec; field_24986 CODEC - f F field_14209 extraChance - f I field_14211 count -c net/minecraft/class_5447 net/minecraft/world/gen/placement/HeightmapPlacement -c net/minecraft/class_5446 net/minecraft/world/gen/placement/HeightmapWorldSurfacePlacement - m (Lnet/minecraft/class_3113;)Lnet/minecraft/class_2902$class_2903; method_30464 func_241858_a -c net/minecraft/class_3291 net/minecraft/world/gen/placement/IcebergPlacement - m (Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30465 getPositions -c net/minecraft/class_5448 net/minecraft/world/gen/placement/HeightmapSpreadDoublePlacement -c net/minecraft/class_3301 net/minecraft/world/gen/placement/LakeWater - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3297;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15930 getPositions -c net/minecraft/class_3293 net/minecraft/world/gen/placement/LakeLava - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3297;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15931 getPositions -c net/minecraft/class_3275 net/minecraft/world/gen/placement/TopSolidWithNoiseConfig - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28939 func_236980_a_ - m (Lnet/minecraft/class_3275;)Ljava/lang/Double; method_28941 func_236982_b_ - m (Lnet/minecraft/class_3275;)Ljava/lang/Integer; method_28943 func_236984_d_ - m (Lnet/minecraft/class_3275;)Ljava/lang/Double; method_28942 func_236983_c_ - f I field_14208 noiseToCountRatio - f D field_14205 noiseOffset - f Lcom/mojang/serialization/Codec; field_24987 CODEC - f D field_14206 noiseFactor -c net/minecraft/class_3316 net/minecraft/world/gen/placement/CountNoiseBiasedPlacement - m (Ljava/util/Random;Lnet/minecraft/class_3275;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30467 getPositions - m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_30466 func_242913_a -c net/minecraft/class_5449 net/minecraft/world/gen/placement/RangePlacement - m (Ljava/util/Random;Lnet/minecraft/class_2997;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30468 getPositions -c net/minecraft/class_3307 net/minecraft/world/gen/placement/Passthrough - m (Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15939 getPositions -c net/minecraft/class_3245 net/minecraft/world/gen/placement/Spread32AbovePlacement - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14373 getPositions -c net/minecraft/class_3667 net/minecraft/world/gen/placement/SimplePlacement - m (Ljava/util/Random;Lnet/minecraft/class_2998;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_14452 getPositions -c net/minecraft/class_3318 net/minecraft/world/gen/placement/TopSolidOnce - m (Lnet/minecraft/class_3113;)Lnet/minecraft/class_2902$class_2903; method_30470 func_241858_a -c net/minecraft/class_5450 net/minecraft/world/gen/placement/SquarePlacement - m (Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30469 getPositions -c net/minecraft/class_5452 net/minecraft/world/gen/placement/CountMultilayerPlacement - m (Lnet/minecraft/class_5444;IIII)I method_30473 func_242915_a - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_2984;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30474 getPositions - m (Lnet/minecraft/class_2680;)Z method_30472 func_242914_a -c net/minecraft/class_5451 net/minecraft/world/gen/placement/RangeVeryBiasedPlacement - m (Ljava/util/Random;Lnet/minecraft/class_2997;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30471 getPositions -c net/minecraft/class_5453 net/minecraft/world/gen/placement/GlowstonePlacement - m (Ljava/util/Random;Lnet/minecraft/class_2984;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_30475 getPositions - m (Ljava/util/Random;Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_30476 func_242916_a -c net/minecraft/class_3329 net/minecraft/world/gen/placement/FirePlacement - m (Ljava/util/Random;Lnet/minecraft/class_2984;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15947 getPositions -c net/minecraft/class_3334 net/minecraft/world/gen/placement/NetherMagma - m (Lnet/minecraft/class_5444;Ljava/util/Random;Lnet/minecraft/class_3113;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_15951 getPositions -c net/minecraft/class_4183 net/minecraft/world/gen/feature/structure/MarginedStructureStart -c net/minecraft/class_3789 net/minecraft/world/gen/feature/structure/BuriedTreasure -c net/minecraft/class_3789$class_3339 net/minecraft/world/gen/feature/structure/BuriedTreasure$Piece - m (Lnet/minecraft/class_2680;)Z method_14655 func_204295_a -c net/minecraft/class_3341 net/minecraft/util/math/MutableBoundingBox - m ()I method_14660 getXSize - m ()I method_14663 getYSize - m ()Ljava/lang/String; toString toString - m (IIIIIIIIILnet/minecraft/class_2350;)Lnet/minecraft/class_3341; method_14667 getComponentToAddBoundingBox - m ()I method_14664 getZSize - m (III)Lnet/minecraft/class_3341; method_19311 func_215127_b - m ()Lnet/minecraft/class_2382; method_22874 func_215126_f - m (III)V method_14661 offset - m ()Lnet/minecraft/class_2382; method_14659 getLength - m (Lnet/minecraft/class_2382;)Z method_14662 isVecInside - m (Lnet/minecraft/class_3341;)Z method_14657 intersectsWith - m (Lnet/minecraft/class_2382;)V method_29299 func_236989_a_ - m (IIII)Z method_14669 intersectsWith - m (Lnet/minecraft/class_3341;)V method_14668 expandTo - m (IIIIII)Lnet/minecraft/class_3341; method_14666 createProper - m ()Lnet/minecraft/class_3341; method_27234 func_236990_b_ - m ()Lnet/minecraft/class_3341; method_14665 getNewBoundingBox - m ()Lnet/minecraft/class_2495; method_14658 toNBTTagIntArray - f I field_14376 maxZ - f I field_14381 minX - f I field_14380 minY - f I field_14379 minZ - f I field_14378 maxX - f I field_14377 maxY -c net/minecraft/class_3341$1 net/minecraft/util/math/MutableBoundingBox$1 - f [I field_14382 field_175895_a -c net/minecraft/class_3346 net/minecraft/world/gen/feature/structure/DesertPyramidPiece - f [Z field_14397 hasPlacedChest -c net/minecraft/class_3351 net/minecraft/world/gen/feature/structure/IglooPieces - m ()Lnet/minecraft/class_2960; method_14703 func_207620_d - m ()Ljava/util/Map; method_14706 func_207618_c - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;)V method_14705 func_236991_a_ - m ()Ljava/util/Map; method_14707 func_207619_b - f Lnet/minecraft/class_2960; field_14407 field_202593_f - f Ljava/util/Map; field_14408 field_207621_d - f Lnet/minecraft/class_2960; field_14409 field_202592_e - f Ljava/util/Map; field_14406 field_207622_e - f Lnet/minecraft/class_2960; field_14410 field_202594_g -c net/minecraft/class_3351$class_3352 net/minecraft/world/gen/feature/structure/IglooPieces$Piece - m (Lnet/minecraft/class_3485;)V method_14708 func_207614_a - f Lnet/minecraft/class_2470; field_14412 field_207616_e - f Lnet/minecraft/class_2960; field_14411 field_207615_d -c net/minecraft/class_3342 net/minecraft/world/gen/feature/structure/EndCityPieces - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;)V method_14679 startHouseTower - m ()Lnet/minecraft/class_3342$class_3344; method_14674 access$700 - m ()Lnet/minecraft/class_3492; method_14676 access$000 - m ()Lnet/minecraft/class_3342$class_3344; method_14685 access$400 - m ()Ljava/util/List; method_14678 access$1000 - m (Ljava/util/List;Lnet/minecraft/class_3342$class_3343;)Lnet/minecraft/class_3342$class_3343; method_14681 addHelper - m (Ljava/util/List;Lnet/minecraft/class_3342$class_3343;)Lnet/minecraft/class_3342$class_3343; method_14683 access$300 - m ()Lnet/minecraft/class_3342$class_3344; method_14677 access$900 - m ()Lnet/minecraft/class_3342$class_3344; method_14671 access$800 - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3342$class_3344;ILnet/minecraft/class_3342$class_3343;Lnet/minecraft/class_2338;Ljava/util/List;Ljava/util/Random;)Z method_14680 access$500 - m ()Ljava/util/List; method_14672 access$600 - m ()Lnet/minecraft/class_3492; method_14675 access$100 - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3342$class_3344;ILnet/minecraft/class_3342$class_3343;Lnet/minecraft/class_2338;Ljava/util/List;Ljava/util/Random;)Z method_14673 recursiveChildren - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3342$class_3343;Lnet/minecraft/class_2338;Ljava/lang/String;Lnet/minecraft/class_2470;Z)Lnet/minecraft/class_3342$class_3343; method_14670 access$200 - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_3342$class_3343;Lnet/minecraft/class_2338;Ljava/lang/String;Lnet/minecraft/class_2470;Z)Lnet/minecraft/class_3342$class_3343; method_14684 addPiece - f Lnet/minecraft/class_3342$class_3344; field_14384 FAT_TOWER_GENERATOR - f Lnet/minecraft/class_3342$class_3344; field_14387 TOWER_BRIDGE_GENERATOR - f Lnet/minecraft/class_3492; field_14389 INSERT - f Lnet/minecraft/class_3342$class_3344; field_14386 TOWER_GENERATOR - f Lnet/minecraft/class_3492; field_14383 OVERWRITE - f Ljava/util/List; field_14388 FAT_TOWER_BRIDGES - f Ljava/util/List; field_14385 TOWER_BRIDGES - f Lnet/minecraft/class_3342$class_3344; field_14390 HOUSE_TOWER_GENERATOR -c net/minecraft/class_3342$2 net/minecraft/world/gen/feature/structure/EndCityPieces$2 -c net/minecraft/class_3342$3 net/minecraft/world/gen/feature/structure/EndCityPieces$3 - f Z field_14394 shipCreated -c net/minecraft/class_3342$4 net/minecraft/world/gen/feature/structure/EndCityPieces$4 -c net/minecraft/class_3342$class_3343 net/minecraft/world/gen/feature/structure/EndCityPieces$CityTemplate - m (Lnet/minecraft/class_3485;)V method_14686 loadTemplate - f Lnet/minecraft/class_2470; field_14393 rotation - f Z field_14392 overwrite - f Ljava/lang/String; field_14391 pieceName -c net/minecraft/class_3342$1 net/minecraft/world/gen/feature/structure/EndCityPieces$1 -c net/minecraft/class_3342$class_3344 net/minecraft/world/gen/feature/structure/EndCityPieces$IGenerator - m (Lnet/minecraft/class_3485;ILnet/minecraft/class_3342$class_3343;Lnet/minecraft/class_2338;Ljava/util/List;Ljava/util/Random;)Z method_14687 generate - m ()V method_14688 init -c net/minecraft/class_3360 net/minecraft/world/gen/feature/structure/LegacyStructureDataUtil - m (Lnet/minecraft/class_26;)V method_14734 func_212184_a - m (J)V method_14744 func_208216_a - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_14735 func_212181_a - m (IILjava/lang/String;)Z method_14738 func_208211_a - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_26;)Lnet/minecraft/class_3360; method_14745 func_236992_a_ - m (II)Z method_14737 func_208209_a - m (Ljava/lang/String;)Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; method_14736 func_208208_a - m (Ljava/util/HashMap;)V method_14739 func_208213_b - m (Ljava/lang/String;)Lnet/minecraft/class_3440; method_17915 func_215131_a - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_14741 func_212182_a - m (Ljava/util/HashMap;)V method_14742 func_208215_a - f Ljava/util/List; field_17658 field_215132_f - f Ljava/util/List; field_17659 field_215133_g - f Ljava/util/Map; field_14433 field_208224_f - f Z field_14434 field_208222_d - f Ljava/util/Map; field_14436 field_208221_c - f Ljava/util/Map; field_14432 field_208223_e - f Ljava/util/Map; field_14435 field_208220_b -c net/minecraft/class_3348 net/minecraft/world/gen/feature/structure/JunglePyramidPiece - f Z field_14399 placedTrap2 - f Z field_14401 placedHiddenChest - f Z field_14402 placedMainChest - f Z field_14400 placedTrap1 - f Lnet/minecraft/class_3348$class_3349; field_14403 MOSS_STONE_SELECTOR -c net/minecraft/class_3348$class_3349 net/minecraft/world/gen/feature/structure/JunglePyramidPiece$Selector -c net/minecraft/class_3348$1 net/minecraft/world/gen/feature/structure/JunglePyramidPiece$1 -c net/minecraft/class_3390 net/minecraft/world/gen/feature/structure/FortressPieces - m (Lnet/minecraft/class_3390$class_3404;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3403; method_14795 findAndCreateBridgePieceFactory - m (Lnet/minecraft/class_3390$class_3404;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3403; method_14794 access$000 - m ()[Lnet/minecraft/class_3390$class_3404; method_14791 access$100 - m ()[Lnet/minecraft/class_3390$class_3404; method_14792 access$200 - f [Lnet/minecraft/class_3390$class_3404; field_14494 PRIMARY_COMPONENTS - f [Lnet/minecraft/class_3390$class_3404; field_14493 SECONDARY_COMPONENTS -c net/minecraft/class_3390$class_3403 net/minecraft/world/gen/feature/structure/FortressPieces$Piece - m (Lnet/minecraft/class_3390$class_3407;Ljava/util/List;Ljava/util/Random;IIZ)Lnet/minecraft/class_3443; method_14814 getNextComponentNormal - m (Lnet/minecraft/class_3341;)Z method_14809 isAboveGround - m (Lnet/minecraft/class_3390$class_3407;Ljava/util/List;Ljava/util/Random;IIZ)Lnet/minecraft/class_3443; method_14812 getNextComponentX - m (Lnet/minecraft/class_3390$class_3407;Ljava/util/List;Ljava/util/Random;IIZ)Lnet/minecraft/class_3443; method_14808 getNextComponentZ - m (Lnet/minecraft/class_3390$class_3407;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;IZ)Lnet/minecraft/class_3443; method_14813 generateAndAddPiece - m (Ljava/util/List;)I method_14810 getTotalWeight - m (Lnet/minecraft/class_3390$class_3407;Ljava/util/List;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3403; method_14811 generatePiece -c net/minecraft/class_3390$class_3404 net/minecraft/world/gen/feature/structure/FortressPieces$PieceWeight - m (I)Z method_14816 doPlace - m ()Z method_14815 isValid - f I field_14503 weight - f I field_14502 placeCount - f I field_14499 maxPlaceCount - f Ljava/lang/Class; field_14501 weightClass - f Z field_14500 allowInRow -c net/minecraft/class_3390$class_3405 net/minecraft/world/gen/feature/structure/FortressPieces$Crossing - m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3405; method_14817 createPiece -c net/minecraft/class_3390$class_3406 net/minecraft/world/gen/feature/structure/FortressPieces$Stairs - m (Ljava/util/List;IIIILnet/minecraft/class_2350;)Lnet/minecraft/class_3390$class_3406; method_14818 createPiece -c net/minecraft/class_3390$class_3407 net/minecraft/world/gen/feature/structure/FortressPieces$Start - f Ljava/util/List; field_14504 secondaryWeights - f Ljava/util/List; field_14505 pendingChildren - f Lnet/minecraft/class_3390$class_3404; field_14506 lastPlaced - f Ljava/util/List; field_14507 primaryWeights -c net/minecraft/class_3390$1 net/minecraft/world/gen/feature/structure/FortressPieces$1 - f [I field_14508 field_175888_a -c net/minecraft/class_3390$class_3395 net/minecraft/world/gen/feature/structure/FortressPieces$Corridor4 - m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3395; method_14800 func_214814_a -c net/minecraft/class_3390$class_3396 net/minecraft/world/gen/feature/structure/FortressPieces$Entrance - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3396; method_14801 createPiece -c net/minecraft/class_3390$class_3397 net/minecraft/world/gen/feature/structure/FortressPieces$Crossing2 - m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3397; method_14802 createPiece -c net/minecraft/class_3390$class_3398 net/minecraft/world/gen/feature/structure/FortressPieces$Corridor - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3398; method_14803 createPiece - f Z field_14496 chest -c net/minecraft/class_3390$class_3399 net/minecraft/world/gen/feature/structure/FortressPieces$Corridor5 - m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3399; method_14804 createPiece -c net/minecraft/class_3390$class_3400 net/minecraft/world/gen/feature/structure/FortressPieces$Corridor2 - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3400; method_14805 createPiece - f Z field_14497 chest -c net/minecraft/class_3390$class_3401 net/minecraft/world/gen/feature/structure/FortressPieces$NetherStalkRoom - m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3401; method_14806 createPiece -c net/minecraft/class_3390$class_3402 net/minecraft/world/gen/feature/structure/FortressPieces$Throne - m (Ljava/util/List;IIIILnet/minecraft/class_2350;)Lnet/minecraft/class_3390$class_3402; method_14807 createPiece - f Z field_14498 hasSpawner -c net/minecraft/class_3390$class_3391 net/minecraft/world/gen/feature/structure/FortressPieces$Crossing3 - m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3391; method_14796 createPiece -c net/minecraft/class_3390$class_3392 net/minecraft/world/gen/feature/structure/FortressPieces$End - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3392; method_14797 createPiece - f I field_14495 fillSeed -c net/minecraft/class_3390$class_3393 net/minecraft/world/gen/feature/structure/FortressPieces$Straight - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3393; method_14798 createPiece -c net/minecraft/class_3390$class_3394 net/minecraft/world/gen/feature/structure/FortressPieces$Corridor3 - m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3390$class_3394; method_14799 createPiece -c net/minecraft/class_3353 net/minecraft/world/gen/feature/structure/MineshaftPieces - m (Lnet/minecraft/class_3443;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3353$class_3356; method_14709 access$000 - m (Lnet/minecraft/class_3443;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3353$class_3356; method_14711 generateAndAddPiece - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;ILnet/minecraft/class_3098$class_3100;)Lnet/minecraft/class_3353$class_3356; method_14712 createRandomShaftPiece -c net/minecraft/class_3353$class_3354 net/minecraft/world/gen/feature/structure/MineshaftPieces$Corridor - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;Ljava/util/Random;FIII)V method_14715 placeCobWeb - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIILjava/util/Random;)V method_14713 placeSupport - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;)Lnet/minecraft/class_3341; method_14714 findCorridorSize - f I field_14413 sectionCount - f Z field_14414 spawnerPlaced - f Z field_14415 hasSpiders - f Z field_14416 hasRails -c net/minecraft/class_3353$1 net/minecraft/world/gen/feature/structure/MineshaftPieces$1 - f [I field_14417 field_175894_a - f [I field_14418 field_202599_a -c net/minecraft/class_3353$class_3355 net/minecraft/world/gen/feature/structure/MineshaftPieces$Cross - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;)Lnet/minecraft/class_3341; method_14717 findCrossing - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIII)V method_14716 placeSupportPillar - f Lnet/minecraft/class_2350; field_14420 corridorDirection - f Z field_14419 isMultipleFloors -c net/minecraft/class_3353$class_3356 net/minecraft/world/gen/feature/structure/MineshaftPieces$Piece - m ()Lnet/minecraft/class_2680; method_14718 getFenceBlock - m ()Lnet/minecraft/class_2680; method_16443 getPlanksBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_3341;IIII)Z method_14719 isSupportingBox - f Lnet/minecraft/class_3098$class_3100; field_14421 mineShaftType -c net/minecraft/class_3353$class_3357 net/minecraft/world/gen/feature/structure/MineshaftPieces$Room - f Ljava/util/List; field_14422 connectedRooms -c net/minecraft/class_3353$class_3358 net/minecraft/world/gen/feature/structure/MineshaftPieces$Stairs - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;)Lnet/minecraft/class_3341; method_14720 findStairs -c net/minecraft/class_4787 net/minecraft/world/gen/feature/structure/NetherFossilStructures - m (Lnet/minecraft/class_3485;Ljava/util/List;Ljava/util/Random;Lnet/minecraft/class_2338;)V method_24453 func_236994_a_ - f [Lnet/minecraft/class_2960; field_22197 field_236993_a_ -c net/minecraft/class_4787$class_4788 net/minecraft/world/gen/feature/structure/NetherFossilStructures$Piece - m (Lnet/minecraft/class_3485;)V method_24454 func_236997_a_ - f Lnet/minecraft/class_2470; field_22199 field_236996_e_ - f Lnet/minecraft/class_2960; field_22198 field_236995_d_ -c net/minecraft/class_4785 net/minecraft/world/gen/feature/structure/NetherFossilStructure -c net/minecraft/class_4785$class_4786 net/minecraft/world/gen/feature/structure/NetherFossilStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3111;)V method_28947 func_230364_a_ -c net/minecraft/class_3411 net/minecraft/world/gen/feature/structure/OceanRuinStructure -c net/minecraft/class_3411$class_3412 net/minecraft/world/gen/feature/structure/OceanRuinStructure$Start - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3114;)V method_28948 func_230364_a_ -c net/minecraft/class_3411$class_3413 net/minecraft/world/gen/feature/structure/OceanRuinStructure$Type - m (Ljava/lang/String;)Lnet/minecraft/class_3411$class_3413; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_3411$class_3413; method_14830 getType - m ()Ljava/lang/String; method_14831 getName - m ()[Lnet/minecraft/class_3411$class_3413; values values - m (Lnet/minecraft/class_3411$class_3413;)Lnet/minecraft/class_3411$class_3413; method_14832 func_215134_a - f Lcom/mojang/serialization/Codec; field_24990 field_236998_c_ - f Ljava/lang/String; field_14529 name - f [Lnet/minecraft/class_3411$class_3413; field_14531 $VALUES - f Ljava/util/Map; field_14530 BY_NAME - f Lnet/minecraft/class_3411$class_3413; field_14532 WARM - f Lnet/minecraft/class_3411$class_3413; field_14528 COLD -c net/minecraft/class_3366 net/minecraft/world/gen/feature/structure/OceanMonumentPieces -c net/minecraft/class_3366$class_3384 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$Piece - m (III)I method_14770 getRoomIndex - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIII)V method_14773 makeOpening - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;III)Z method_14772 spawnElder - m (Lnet/minecraft/class_3341;IIII)Z method_14775 doesChunkIntersect - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIIILnet/minecraft/class_2680;)V method_14771 generateBoxOnFillOnly - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIZ)V method_14774 generateDefaultFloor - f I field_14468 GRIDROOM_TOP_CONNECT_INDEX - f I field_14469 GRIDROOM_SOURCE_INDEX - f Lnet/minecraft/class_3366$class_3388; field_14479 roomDefinition - f Lnet/minecraft/class_2680; field_14476 BRICKS_PRISMARINE - f I field_14477 GRIDROOM_RIGHTWING_CONNECT_INDEX - f I field_14478 GRIDROOM_LEFTWING_CONNECT_INDEX - f Ljava/util/Set; field_14472 field_212180_g - f Lnet/minecraft/class_2680; field_14473 ROUGH_PRISMARINE - f Lnet/minecraft/class_2680; field_14471 SEA_LANTERN - f Lnet/minecraft/class_2680; field_14474 DARK_PRISMARINE - f Lnet/minecraft/class_2680; field_14470 DOT_DECO_DATA - f Lnet/minecraft/class_2680; field_14475 WATER -c net/minecraft/class_3366$class_3385 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$SimpleRoom - f I field_14480 mainDesign -c net/minecraft/class_3366$class_3386 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$SimpleTopRoom -c net/minecraft/class_3366$class_3387 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$WingRoom - f I field_14481 mainDesign -c net/minecraft/class_3366$class_3388 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$RoomDefinition - m ()I method_14781 countOpenings - m (Lnet/minecraft/class_3366$class_3388;Z)Z method_14784 access$902 - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_3366$class_3388;)V method_14786 setConnection - m ()V method_14780 updateOpenings - m (I)Z method_14783 findSource - m (Lnet/minecraft/class_3366$class_3388;)Z method_14778 access$100 - m ()Z method_14785 isSpecial - m (Lnet/minecraft/class_3366$class_3388;)[Z method_14779 access$1100 - m (Lnet/minecraft/class_3366$class_3388;Z)Z method_14777 access$102 - m (Lnet/minecraft/class_3366$class_3388;)[Lnet/minecraft/class_3366$class_3388; method_14782 access$1000 - m (Lnet/minecraft/class_3366$class_3388;)I method_14776 access$000 - f I field_14483 scanIndex - f [Z field_14482 hasOpening - f Z field_14485 claimed - f I field_14486 index - f Z field_14484 isSource - f [Lnet/minecraft/class_3366$class_3388; field_14487 connections -c net/minecraft/class_3366$class_3376 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$MonumentCoreRoom -c net/minecraft/class_3366$class_3377 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$DoubleXRoom -c net/minecraft/class_3366$class_3378 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$DoubleXYRoom -c net/minecraft/class_3366$class_3379 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$DoubleYRoom -c net/minecraft/class_3366$class_3380 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$DoubleYZRoom -c net/minecraft/class_3366$class_3381 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$DoubleZRoom -c net/minecraft/class_3366$class_3382 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$EntryRoom -c net/minecraft/class_3366$class_3383 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$Penthouse -c net/minecraft/class_3366$1 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$1 - f [I field_14467 field_175971_a -c net/minecraft/class_3366$class_3368 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$XYDoubleRoomFitHelper -c net/minecraft/class_3366$class_3369 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$YDoubleRoomFitHelper -c net/minecraft/class_3366$class_3370 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$YZDoubleRoomFitHelper -c net/minecraft/class_3366$class_3371 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$ZDoubleRoomFitHelper -c net/minecraft/class_3366$class_3372 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$FitSimpleRoomHelper -c net/minecraft/class_3366$class_3373 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$FitSimpleRoomTopHelper -c net/minecraft/class_3366$class_3374 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$MonumentBuilding - m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14767 generateUpperWall - m (ZILnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14761 generateWing - m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14763 generateEntranceArchs - m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14766 generateMiddleWall - m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14765 generateRoofPiece - m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14764 generateLowerWall - m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_14762 generateEntranceWall - m (Ljava/util/Random;)Ljava/util/List; method_14760 generateRoomGraph - f Lnet/minecraft/class_3366$class_3388; field_14466 coreRoom - f Lnet/minecraft/class_3366$class_3388; field_14464 sourceRoom - f Ljava/util/List; field_14465 childPieces -c net/minecraft/class_3366$class_3375 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$IMonumentRoomFitHelper - m (Lnet/minecraft/class_3366$class_3388;)Z method_14769 fits - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_3366$class_3388;Ljava/util/Random;)Lnet/minecraft/class_3366$class_3384; method_14768 create -c net/minecraft/class_3366$class_3367 net/minecraft/world/gen/feature/structure/OceanMonumentPieces$XDoubleRoomFitHelper -c net/minecraft/class_3790 net/minecraft/world/gen/feature/structure/AbstractVillagePiece - m (Lnet/minecraft/class_3780;)V method_16647 addJunction - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28949 func_237002_a_ - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Z)Z method_27236 func_237001_a_ - m ()Lnet/minecraft/class_2338; method_16648 getPos - m ()Lnet/minecraft/class_3784; method_16644 getJigsawPiece - m ()I method_16646 getGroundLevelDelta - m ()Ljava/util/List; method_16645 getJunctions - m (Lnet/minecraft/class_2520;)V method_16649 func_214827_a - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_3784; field_16693 jigsawPiece - f Lnet/minecraft/class_3485; field_17660 templateManager - f I field_16692 groundLevelDelta - f Lnet/minecraft/class_2470; field_16694 rotation - f Lnet/minecraft/class_2338; field_16695 pos - f Lorg/apache/logging/log4j/Logger; field_24991 field_237000_d_ - f Ljava/util/List; field_16696 junctions -c net/minecraft/class_3409 net/minecraft/world/gen/feature/structure/OceanRuinPieces - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;Lnet/minecraft/class_3114;)V method_14827 func_204041_a - m (Ljava/util/Random;)Lnet/minecraft/class_2960; method_14826 getRandomPieceWarmBig - m (Ljava/util/Random;II)Ljava/util/List; method_14821 func_204044_a - m (Lnet/minecraft/class_3485;Ljava/util/Random;Lnet/minecraft/class_2470;Lnet/minecraft/class_2338;Lnet/minecraft/class_3114;Ljava/util/List;)V method_14825 func_204047_a - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;Lnet/minecraft/class_3114;ZF)V method_14822 func_204045_a - m (Ljava/util/Random;)Lnet/minecraft/class_2960; method_14824 getRandomPieceWarm - f [Lnet/minecraft/class_2960; field_14522 STRUCTURE_MOSSY - f [Lnet/minecraft/class_2960; field_14516 STRUCTURE_BRICK_BIG - f [Lnet/minecraft/class_2960; field_14517 STRUCTURE_MOSSY_BIG - f [Lnet/minecraft/class_2960; field_14518 STRUCTURE_BRICK - f [Lnet/minecraft/class_2960; field_14519 STRUCTURE_CRACKED - f [Lnet/minecraft/class_2960; field_14521 STRUCTURE_WARM - f [Lnet/minecraft/class_2960; field_14520 STRUCTURE_CRACKED_BIG - f [Lnet/minecraft/class_2960; field_14515 STRUCTURE_WARM_BIG -c net/minecraft/class_3409$class_3410 net/minecraft/world/gen/feature/structure/OceanRuinPieces$Piece - m (Lnet/minecraft/class_3485;)V method_14828 setup - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_14829 func_204035_a - f Lnet/minecraft/class_2470; field_14526 rotation - f Z field_14525 isLarge - f Lnet/minecraft/class_2960; field_14523 templateName - f F field_14524 integrity - f Lnet/minecraft/class_3411$class_3413; field_14527 biomeType -c net/minecraft/class_3418 net/minecraft/world/gen/feature/structure/ScatteredStructurePiece - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_3341;I)Z method_14839 isInsideBounds - f I field_15243 height - f I field_15241 hPos - f I field_15242 depth - f I field_15244 width -c net/minecraft/class_5189 net/minecraft/world/gen/feature/structure/RuinedPortalPiece - m (Ljava/util/Random;Lnet/minecraft/class_5281;Lnet/minecraft/class_2338;)V method_27250 func_237017_a_ - m (Ljava/util/Random;Lnet/minecraft/class_1936;)V method_27243 func_237015_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_3821; method_27240 func_237012_a_ - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_27238 func_237010_a_ - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28950 func_237018_a_ - m (Lnet/minecraft/class_1936;IILnet/minecraft/class_5189$class_5191;)I method_27237 func_237009_a_ - m (Lnet/minecraft/class_2248;FLnet/minecraft/class_2248;)Lnet/minecraft/class_3821; method_27239 func_237011_a_ - m (Ljava/util/Random;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_27248 func_237022_c_ - m (Ljava/util/Random;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_27244 func_237016_a_ - m (Ljava/util/Random;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_27246 func_237020_b_ - m ()Lnet/minecraft/class_3821; method_27247 func_237021_c_ - m (Ljava/util/Random;Lnet/minecraft/class_1936;)V method_27245 func_237019_b_ - m (Lnet/minecraft/class_3499;Lnet/minecraft/class_2338;)V method_27242 func_237014_a_ - m (Ljava/util/Random;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_27249 func_237023_d_ - m (Lnet/minecraft/class_5189$class_5191;)Lnet/minecraft/class_2902$class_2903; method_27241 func_237013_a_ - f Lnet/minecraft/class_2470; field_24019 field_237005_f_ - f Lnet/minecraft/class_5189$class_5190; field_24022 field_237008_i_ - f Lnet/minecraft/class_2960; field_24018 field_237004_e_ - f Lnet/minecraft/class_2415; field_24020 field_237006_g_ - f Lorg/apache/logging/log4j/Logger; field_24992 field_237003_d_ - f Lnet/minecraft/class_5189$class_5191; field_24021 field_237007_h_ -c net/minecraft/class_5189$class_5190 net/minecraft/world/gen/feature/structure/RuinedPortalPiece$Serializer - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28951 func_237031_a_ - m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Boolean; method_28952 func_237032_a_ - m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Boolean; method_28955 func_237035_d_ - m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Boolean; method_28954 func_237034_c_ - m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Float; method_28956 func_237036_e_ - m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Boolean; method_28953 func_237033_b_ - m (Lnet/minecraft/class_5189$class_5190;)Ljava/lang/Boolean; method_28957 func_237037_f_ - f Z field_24023 field_237025_b_ - f Z field_24028 field_237030_g_ - f F field_24024 field_237026_c_ - f Z field_24027 field_237029_f_ - f Z field_24025 field_237027_d_ - f Lcom/mojang/serialization/Codec; field_24993 field_237024_a_ - f Z field_24026 field_237028_e_ -c net/minecraft/class_5189$class_5191 net/minecraft/world/gen/feature/structure/RuinedPortalPiece$Location - m ()[Lnet/minecraft/class_5189$class_5191; values values - m (Ljava/lang/String;)Lnet/minecraft/class_5189$class_5191; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_5189$class_5191; method_27254 func_237042_a_ - m ()Ljava/lang/String; method_27252 func_237040_a_ - m (Lnet/minecraft/class_5189$class_5191;)Lnet/minecraft/class_5189$class_5191; method_27253 func_237041_a_ - f Lnet/minecraft/class_5189$class_5191; field_24032 IN_MOUNTAIN - f Ljava/util/Map; field_24035 field_237038_g_ - f Lnet/minecraft/class_5189$class_5191; field_24031 ON_OCEAN_FLOOR - f Lnet/minecraft/class_5189$class_5191; field_24030 PARTLY_BURIED - f Lnet/minecraft/class_5189$class_5191; field_24029 ON_LAND_SURFACE - f Ljava/lang/String; field_24036 field_237039_h_ - f [Lnet/minecraft/class_5189$class_5191; field_24037 $VALUES - f Lnet/minecraft/class_5189$class_5191; field_24034 IN_NETHER - f Lnet/minecraft/class_5189$class_5191; field_24033 UNDERGROUND -c net/minecraft/class_3421 net/minecraft/world/gen/feature/structure/StrongholdPieces - m (Ljava/lang/Class;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3437; method_14847 findAndCreatePieceFactory - m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3437; method_14851 generatePieceFromSmallDoor - m ()Z method_14852 canAddStructurePieces - m ()Lnet/minecraft/class_3421$class_3432; method_14848 access$200 - m (Ljava/lang/Class;)Ljava/lang/Class; method_14849 access$102 - m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3443; method_14853 access$000 - m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3443; method_14854 generateAndAddPiece - m ()V method_14855 prepareStructurePieces - f Ljava/lang/Class; field_15266 strongComponentType - f I field_15264 totalWeight - f Ljava/util/List; field_15267 structurePieceList - f Lnet/minecraft/class_3421$class_3432; field_15263 STRONGHOLD_STONES - f [Lnet/minecraft/class_3421$class_3427; field_15265 PIECE_WEIGHTS -c net/minecraft/class_3421$class_3432 net/minecraft/world/gen/feature/structure/StrongholdPieces$Stones -c net/minecraft/class_3421$class_3433 net/minecraft/world/gen/feature/structure/StrongholdPieces$Stairs - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3433; method_14866 createPiece - f Z field_15281 source -c net/minecraft/class_3421$class_3434 net/minecraft/world/gen/feature/structure/StrongholdPieces$Stairs2 - f Ljava/util/List; field_15282 pendingChildren - f Lnet/minecraft/class_3421$class_3428; field_15283 strongholdPortalRoom - f Lnet/minecraft/class_3421$class_3427; field_15284 lastPlaced -c net/minecraft/class_3421$class_3435 net/minecraft/world/gen/feature/structure/StrongholdPieces$Straight - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3435; method_14867 createPiece - f Z field_15285 expandsZ - f Z field_15286 expandsX -c net/minecraft/class_3421$class_3436 net/minecraft/world/gen/feature/structure/StrongholdPieces$StairsStraight - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3436; method_14868 createPiece -c net/minecraft/class_3421$class_3437 net/minecraft/world/gen/feature/structure/StrongholdPieces$Stronghold - m (Ljava/util/Random;)Lnet/minecraft/class_3421$class_3437$class_3438; method_14869 getRandomDoor - m (Lnet/minecraft/class_3341;)Z method_14871 canStrongholdGoDeeper - m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;II)Lnet/minecraft/class_3443; method_14873 getNextComponentZ - m (Lnet/minecraft/class_5281;Ljava/util/Random;Lnet/minecraft/class_3341;Lnet/minecraft/class_3421$class_3437$class_3438;III)V method_14872 func_242917_a - m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;II)Lnet/minecraft/class_3443; method_14870 getNextComponentX - m (Lnet/minecraft/class_3421$class_3434;Ljava/util/List;Ljava/util/Random;II)Lnet/minecraft/class_3443; method_14874 getNextComponentNormal - f Lnet/minecraft/class_3421$class_3437$class_3438; field_15287 entryDoor -c net/minecraft/class_3421$class_3437$class_3438 net/minecraft/world/gen/feature/structure/StrongholdPieces$Stronghold$Door - m (Ljava/lang/String;)Lnet/minecraft/class_3421$class_3437$class_3438; valueOf valueOf - m ()[Lnet/minecraft/class_3421$class_3437$class_3438; values values - f Lnet/minecraft/class_3421$class_3437$class_3438; field_15291 IRON_DOOR - f Lnet/minecraft/class_3421$class_3437$class_3438; field_15289 GRATES - f Lnet/minecraft/class_3421$class_3437$class_3438; field_15290 WOOD_DOOR - f Lnet/minecraft/class_3421$class_3437$class_3438; field_15288 OPENING - f [Lnet/minecraft/class_3421$class_3437$class_3438; field_15292 $VALUES -c net/minecraft/class_3421$class_3466 net/minecraft/world/gen/feature/structure/StrongholdPieces$Turn -c net/minecraft/class_3421$1 net/minecraft/world/gen/feature/structure/StrongholdPieces$1 -c net/minecraft/class_3421$2 net/minecraft/world/gen/feature/structure/StrongholdPieces$2 -c net/minecraft/class_3421$class_3424 net/minecraft/world/gen/feature/structure/StrongholdPieces$Crossing - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3424; method_14858 createPiece - f Z field_15270 rightHigh - f Z field_15272 leftHigh - f Z field_15273 leftLow - f Z field_15271 rightLow -c net/minecraft/class_3421$class_3425 net/minecraft/world/gen/feature/structure/StrongholdPieces$LeftTurn - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3425; method_14859 createPiece -c net/minecraft/class_3421$class_3426 net/minecraft/world/gen/feature/structure/StrongholdPieces$Library - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3426; method_14860 createPiece - f Z field_15274 isLargeRoom -c net/minecraft/class_3421$class_3427 net/minecraft/world/gen/feature/structure/StrongholdPieces$PieceWeight - m (I)Z method_14862 canSpawnMoreStructuresOfType - m ()Z method_14861 canSpawnMoreStructures - f I field_15278 pieceWeight - f I field_15275 instancesLimit - f I field_15277 instancesSpawned - f Ljava/lang/Class; field_15276 pieceClass -c net/minecraft/class_3421$class_3428 net/minecraft/world/gen/feature/structure/StrongholdPieces$PortalRoom - m (Ljava/util/List;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3428; method_14863 createPiece - f Z field_15279 hasSpawner -c net/minecraft/class_3421$class_3429 net/minecraft/world/gen/feature/structure/StrongholdPieces$Prison - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3429; method_14864 createPiece -c net/minecraft/class_3421$class_3430 net/minecraft/world/gen/feature/structure/StrongholdPieces$RightTurn - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3430; method_16652 func_214824_a -c net/minecraft/class_3421$class_3431 net/minecraft/world/gen/feature/structure/StrongholdPieces$RoomCrossing - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3431; method_14865 createPiece - f I field_15280 roomType -c net/minecraft/class_3421$3 net/minecraft/world/gen/feature/structure/StrongholdPieces$3 - f [I field_15294 field_75245_a - f [I field_15293 field_175951_b -c net/minecraft/class_3421$class_3422 net/minecraft/world/gen/feature/structure/StrongholdPieces$ChestCorridor - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;I)Lnet/minecraft/class_3421$class_3422; method_14856 createPiece - f Z field_15268 hasMadeChest -c net/minecraft/class_3421$class_3423 net/minecraft/world/gen/feature/structure/StrongholdPieces$Corridor - m (Ljava/util/List;Ljava/util/Random;IIILnet/minecraft/class_2350;)Lnet/minecraft/class_3341; method_14857 findPieceBox - f I field_15269 steps -c net/minecraft/class_3415 net/minecraft/world/gen/feature/structure/ShipwreckPieces - m ()Lnet/minecraft/class_2338; method_14836 func_207662_b - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;Lnet/minecraft/class_3172;)V method_14834 func_204760_a - f [Lnet/minecraft/class_2960; field_14535 field_204762_b - f Lnet/minecraft/class_2338; field_14536 STRUCTURE_OFFSET - f [Lnet/minecraft/class_2960; field_14534 STRUCTURE_VARIANT_A -c net/minecraft/class_3415$class_3416 net/minecraft/world/gen/feature/structure/ShipwreckPieces$Piece - m (Lnet/minecraft/class_3485;)V method_14837 func_204754_a - f Lnet/minecraft/class_2960; field_14537 field_204756_e - f Z field_14538 isBeached - f Lnet/minecraft/class_2470; field_14539 rotation -c net/minecraft/class_3443 net/minecraft/world/gen/feature/structure/StructurePiece - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_3341;Lnet/minecraft/class_1923;Lnet/minecraft/class_2338;)Z method_14931 func_230383_a_ - m (Lnet/minecraft/class_1923;I)Z method_16654 func_214810_a - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;Ljava/util/Random;FIIIIIILnet/minecraft/class_2680;Lnet/minecraft/class_2680;ZZ)V method_14933 generateMaybeBox - m ()Lnet/minecraft/class_3341; method_14935 getBoundingBox - m (II)I method_14941 getZWithOffset - m (Lnet/minecraft/class_2350;)V method_14926 setCoordBaseMode - m ()I method_14923 getComponentType - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIII)V method_14942 fillWithAir - m (II)I method_14928 getXWithOffset - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;Ljava/util/Random;IIILnet/minecraft/class_2350;Lnet/minecraft/class_2960;)Z method_14930 createDispenser - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_3341;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2960;Lnet/minecraft/class_2680;)Z method_14921 generateChest - m ()Lnet/minecraft/class_2487; method_14946 write - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;Ljava/util/Random;FIIILnet/minecraft/class_2680;)V method_14945 randomlyPlaceBlock - m (Ljava/util/List;Lnet/minecraft/class_3341;)Lnet/minecraft/class_3443; method_14932 findIntersecting - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIIIZLjava/util/Random;Lnet/minecraft/class_3443$class_3444;)V method_14938 fillWithRandomizedBlocks - m ()Lnet/minecraft/class_2350; method_14934 getCoordBaseMode - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_14916 correctFacing - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2680;IIILnet/minecraft/class_3341;)V method_14936 replaceAirAndLiquidDownwards - m ()Lnet/minecraft/class_3773; method_16653 getStructurePieceType - m (Lnet/minecraft/class_4538;IIILnet/minecraft/class_3341;)Z method_14939 getSkyBrightness - m (Lnet/minecraft/class_1922;IIILnet/minecraft/class_3341;)Lnet/minecraft/class_2680; method_14929 getBlockStateFromPos - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_2680;IIILnet/minecraft/class_3341;)V method_14917 setBlockState - m (III)V method_14922 offset - m (Lnet/minecraft/class_3443;Ljava/util/List;Ljava/util/Random;)V method_14918 buildComponent - m (Lnet/minecraft/class_2487;)V method_14943 readAdditional - m ()Lnet/minecraft/class_2470; method_16888 getRotation - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;Ljava/util/Random;IIILnet/minecraft/class_2960;)Z method_14915 generateChest - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_3341;)Z method_14937 isLiquidInStructureBoundingBox - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIIILnet/minecraft/class_2680;Lnet/minecraft/class_2680;Z)V method_14940 fillWithBlocks - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3341;IIIIIILnet/minecraft/class_2680;Z)V method_14919 randomlyRareFillWithBlocks - m (I)I method_14924 getYWithOffset - f Lnet/minecraft/class_3773; field_16712 structurePieceType - f Lnet/minecraft/class_3341; field_15315 boundingBox - f Lnet/minecraft/class_2680; field_15314 CAVE_AIR - f Ljava/util/Set; field_15311 BLOCKS_NEEDING_POSTPROCESSING - f Lnet/minecraft/class_2350; field_15312 coordBaseMode - f I field_15316 componentType - f Lnet/minecraft/class_2470; field_15313 rotation - f Lnet/minecraft/class_2415; field_15310 mirror -c net/minecraft/class_3443$class_3444 net/minecraft/world/gen/feature/structure/StructurePiece$BlockSelector - m (Ljava/util/Random;IIIZ)V method_14948 selectBlocks - m ()Lnet/minecraft/class_2680; method_14947 getBlockState - f Lnet/minecraft/class_2680; field_15317 blockstate -c net/minecraft/class_3443$1 net/minecraft/world/gen/feature/structure/StructurePiece$1 - f [I field_15318 field_176100_a -c net/minecraft/class_3440 net/minecraft/world/gen/feature/structure/StructureIndexesSavedData - m (J)V method_14895 removeStructureIndex - m ()Lit/unimi/dsi/fastutil/longs/LongSet; method_14898 getAll - m (J)Z method_14897 hasStructureIndexInAll - m (J)Z method_14894 hasStructureIndexInRemaining - m (J)V method_14896 addStructureIndex - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15301 all - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15302 remaining -c net/minecraft/class_3447 net/minecraft/world/gen/feature/structure/SwampHutPiece - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_3341;)V method_16181 func_214821_a - f Z field_15322 witch - f Z field_16445 field_214822_f -c net/minecraft/class_3449 net/minecraft/world/gen/feature/structure/StructureStart - m ()Lnet/minecraft/class_3341; method_14968 getBoundingBox - m ()I method_23676 getRefCount - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3037;)V method_16655 func_230364_a_ - m ()I method_14970 getMaxRefCount - m ()Z method_16657 isValid - m ()Z method_14979 isRefCountBelowMax - m ()V method_14964 incrementRefCount - m ()V method_14969 recalculateStructureSize - m ()I method_14967 getChunkPosX - m (ILjava/util/Random;I)V method_14978 func_214628_a - m ()I method_14966 getChunkPosZ - m (Ljava/util/Random;II)V method_14976 func_214626_a - m ()Ljava/util/List; method_14963 getComponents - m ()Lnet/minecraft/class_3195; method_16656 getStructure - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Ljava/util/Random;Lnet/minecraft/class_3341;Lnet/minecraft/class_1923;)V method_14974 func_230366_a_ - m (II)Lnet/minecraft/class_2487; method_14972 write - m ()Lnet/minecraft/class_2338; method_14962 getPos - f Ljava/util/List; field_15325 components - f I field_15326 references - f Lnet/minecraft/class_3341; field_15330 bounds - f Lnet/minecraft/class_3195; field_16714 structure - f I field_15329 chunkPosX - f I field_15327 chunkPosZ - f Lnet/minecraft/class_2919; field_16715 rand - f Lnet/minecraft/class_3449; field_16713 DUMMY -c net/minecraft/class_3449$1 net/minecraft/world/gen/feature/structure/StructureStart$1 - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2794;Lnet/minecraft/class_3485;IILnet/minecraft/class_1959;Lnet/minecraft/class_3101;)V method_28958 func_230364_a_ -c net/minecraft/class_3471 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces - m (Lnet/minecraft/class_3485;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Ljava/util/Random;)V method_15029 generateMansion -c net/minecraft/class_3471$class_3476 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$PlacementData - f Lnet/minecraft/class_2470; field_15450 rotation - f Lnet/minecraft/class_2338; field_15449 position - f Ljava/lang/String; field_15448 wallType -c net/minecraft/class_3471$class_3477 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$SecondFloor -c net/minecraft/class_3471$class_3478 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$SimpleGrid - m (III)Z method_15067 edgesTo - m (Lnet/minecraft/class_3471$class_3478;)I method_15063 access$600 - m (IIII)V method_15061 setIf - m (IIIII)V method_15062 set - m (III)V method_15065 set - m (Lnet/minecraft/class_3471$class_3478;)I method_15064 access$500 - m (II)I method_15066 get - f [[I field_15451 grid - f I field_15452 valueIfOutside - f I field_15453 height - f I field_15454 width -c net/minecraft/class_3471$class_3479 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$ThirdFloor -c net/minecraft/class_3471$class_3480 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$MansionTemplate - m (Lnet/minecraft/class_3485;)V method_15068 loadTemplate - f Lnet/minecraft/class_2470; field_15457 rotation - f Ljava/lang/String; field_15455 templateName - f Lnet/minecraft/class_2415; field_15456 mirror -c net/minecraft/class_3471$class_3472 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$FirstFloor -c net/minecraft/class_3471$1 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$1 -c net/minecraft/class_3471$class_3473 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$RoomCollection - m (Ljava/util/Random;)Ljava/lang/String; method_15035 get1x2Secret - m (Ljava/util/Random;)Ljava/lang/String; method_15032 get1x1Secret - m (Ljava/util/Random;Z)Ljava/lang/String; method_15031 get1x2FrontEntrance - m (Ljava/util/Random;)Ljava/lang/String; method_15037 get1x1 - m (Ljava/util/Random;Z)Ljava/lang/String; method_15033 get1x2SideEntrance - m (Ljava/util/Random;)Ljava/lang/String; method_15036 get2x2Secret - m (Ljava/util/Random;)Ljava/lang/String; method_15034 get2x2 -c net/minecraft/class_3471$class_3474 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$Grid - m (Lnet/minecraft/class_3471$class_3474;)Lnet/minecraft/class_3471$class_3478; method_15043 access$100 - m (Lnet/minecraft/class_3471$class_3474;)Lnet/minecraft/class_3471$class_3478; method_15041 access$200 - m ()V method_15048 setupThirdFloor - m (Lnet/minecraft/class_3471$class_3478;IILnet/minecraft/class_2350;I)V method_15045 recursiveCorridor - m (Lnet/minecraft/class_3471$class_3474;)[Lnet/minecraft/class_3471$class_3478; method_15044 access$1000 - m (Lnet/minecraft/class_3471$class_3478;IIII)Z method_15039 isRoomId - m (Lnet/minecraft/class_3471$class_3478;II)Z method_15047 isHouse - m (Lnet/minecraft/class_3471$class_3478;Lnet/minecraft/class_3471$class_3478;)V method_15042 identifyRooms - m (Lnet/minecraft/class_3471$class_3478;)Z method_15046 cleanEdges - m (Lnet/minecraft/class_3471$class_3478;IIII)Lnet/minecraft/class_2350; method_15040 get1x2RoomDirection - m (Lnet/minecraft/class_3471$class_3474;)I method_15038 access$400 - m (Lnet/minecraft/class_3471$class_3474;)I method_15049 access$300 - f Ljava/util/Random; field_15438 random - f [Lnet/minecraft/class_3471$class_3478; field_15443 floorRooms - f Lnet/minecraft/class_3471$class_3478; field_15440 baseGrid - f I field_15441 entranceY - f Lnet/minecraft/class_3471$class_3478; field_15439 thirdFloorGrid - f I field_15442 entranceX -c net/minecraft/class_3471$class_3475 net/minecraft/world/gen/feature/structure/WoodlandMansionPieces$Placer - m (Ljava/util/List;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3471$class_3478;Lnet/minecraft/class_3471$class_3478;)V method_15055 createRoof - m (Ljava/util/List;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Lnet/minecraft/class_3471$class_3473;Z)V method_15059 addRoom1x2 - m (Ljava/util/List;Lnet/minecraft/class_3471$class_3476;)V method_15058 traverseTurn - m (Ljava/util/List;Lnet/minecraft/class_3471$class_3476;)V method_15052 traverseWallPiece - m (Ljava/util/List;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3471$class_3473;)V method_15053 addRoom2x2Secret - m (Ljava/util/List;Lnet/minecraft/class_3471$class_3476;Lnet/minecraft/class_3471$class_3478;Lnet/minecraft/class_2350;IIII)V method_15051 traverseOuterWalls - m (Ljava/util/List;Lnet/minecraft/class_3471$class_3476;)V method_15054 entrance - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Ljava/util/List;Lnet/minecraft/class_3471$class_3474;)V method_15050 createMansion - m (Ljava/util/List;Lnet/minecraft/class_3471$class_3476;)V method_15060 traverseInnerTurn - m (Ljava/util/List;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Lnet/minecraft/class_3471$class_3473;)V method_15056 addRoom2x2 - m (Ljava/util/List;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_2350;Lnet/minecraft/class_3471$class_3473;)V method_15057 addRoom1x1 - f Ljava/util/Random; field_15447 random - f I field_15445 startY - f I field_15446 startX - f Lnet/minecraft/class_3485; field_15444 templateManager -c net/minecraft/class_3470 net/minecraft/world/gen/feature/structure/TemplateStructurePiece - m (Ljava/lang/String;Lnet/minecraft/class_2338;Lnet/minecraft/class_5425;Ljava/util/Random;Lnet/minecraft/class_3341;)V method_15026 handleDataMarker - m (Lnet/minecraft/class_3499;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;)V method_15027 setup - f Lnet/minecraft/class_2338; field_15432 templatePosition - f Lnet/minecraft/class_3499; field_15433 template - f Lorg/apache/logging/log4j/Logger; field_16586 LOGGER - f Lnet/minecraft/class_3492; field_15434 placeSettings -c net/minecraft/class_3818 net/minecraft/world/gen/feature/template/AlwaysTrueRuleTest - m ()Lnet/minecraft/class_3818; method_28959 func_237044_b_ - f Lnet/minecraft/class_3818; field_16868 INSTANCE - f Lcom/mojang/serialization/Codec; field_24994 field_237043_a_ -c net/minecraft/class_5192 net/minecraft/world/gen/feature/template/BlackStoneReplacementProcessor - m (Ljava/util/HashMap;)V method_27255 func_237060_a_ - m ()Lnet/minecraft/class_5192; method_28966 func_237061_b_ - f Lcom/mojang/serialization/Codec; field_24996 field_237057_a_ - f Lnet/minecraft/class_5192; field_24040 field_237058_b_ - f Ljava/util/Map; field_24041 field_237059_c_ -c net/minecraft/class_4992 net/minecraft/world/gen/feature/template/AxisAlignedLinearPosTest - m (Lnet/minecraft/class_4992;)Ljava/lang/Float; method_28964 func_237055_d_ - m (Lnet/minecraft/class_4992;)Ljava/lang/Integer; method_28963 func_237054_c_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28960 func_237051_a_ - m (Lnet/minecraft/class_4992;)Lnet/minecraft/class_2350$class_2351; method_28961 func_237052_a_ - m (Lnet/minecraft/class_4992;)Ljava/lang/Float; method_28965 func_237056_e_ - m (Lnet/minecraft/class_4992;)Ljava/lang/Integer; method_28962 func_237053_b_ - f F field_23334 field_237046_b_ - f I field_23337 field_237049_f_ - f F field_23335 field_237047_d_ - f Lcom/mojang/serialization/Codec; field_24995 field_237045_a_ - f Lnet/minecraft/class_2350$class_2351; field_23338 field_237050_g_ - f I field_23336 field_237048_e_ -c net/minecraft/class_5193 net/minecraft/world/gen/feature/template/BlockMosinessProcessor - m (Ljava/util/Random;)Lnet/minecraft/class_2680; method_27263 func_237072_d_ - m (Lnet/minecraft/class_5193;)Ljava/lang/Float; method_28967 func_237064_a_ - m (Ljava/util/Random;Lnet/minecraft/class_2248;)Lnet/minecraft/class_2680; method_27257 func_237066_a_ - m (Ljava/util/Random;)Lnet/minecraft/class_2680; method_27261 func_237070_b_ - m (Ljava/util/Random;)Lnet/minecraft/class_2680; method_27262 func_237071_c_ - m (Ljava/util/Random;[Lnet/minecraft/class_2680;[Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_27260 func_237069_a_ - m (Ljava/util/Random;Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_27258 func_237067_a_ - m (Ljava/util/Random;)Lnet/minecraft/class_2680; method_27256 func_237065_a_ - m (Ljava/util/Random;[Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_27259 func_237068_a_ - f F field_24042 field_237063_b_ - f Lcom/mojang/serialization/Codec; field_24997 field_237062_a_ -c net/minecraft/class_3819 net/minecraft/world/gen/feature/template/BlockMatchRuleTest - m (Lnet/minecraft/class_3819;)Lnet/minecraft/class_2248; method_28969 func_237076_a_ - f Lcom/mojang/serialization/Codec; field_24999 field_237075_a_ - f Lnet/minecraft/class_2248; field_16869 block -c net/minecraft/class_3793 net/minecraft/world/gen/feature/template/BlockIgnoreStructureProcessor - m (Lnet/minecraft/class_3793;)Ljava/util/List; method_28968 func_237074_a_ - f Lcom/google/common/collect/ImmutableList; field_16720 blocks - f Lnet/minecraft/class_3793; field_16719 AIR - f Lnet/minecraft/class_3793; field_16718 STRUCTURE_BLOCK - f Lnet/minecraft/class_3793; field_16721 AIR_AND_STRUCTURE_BLOCK - f Lcom/mojang/serialization/Codec; field_24998 field_237073_a_ -c net/minecraft/class_3820 net/minecraft/world/gen/feature/template/BlockStateMatchRuleTest - m (Lnet/minecraft/class_3820;)Lnet/minecraft/class_2680; method_28971 func_237080_a_ - f Lnet/minecraft/class_2680; field_16870 state - f Lcom/mojang/serialization/Codec; field_25001 field_237079_a_ -c net/minecraft/class_3488 net/minecraft/world/gen/feature/template/IntegrityProcessor - m (Lnet/minecraft/class_3488;)Ljava/lang/Float; method_28970 func_237078_a_ - f Lcom/mojang/serialization/Codec; field_25000 field_237077_a_ - f F field_15523 integrity -c net/minecraft/class_3794 net/minecraft/world/gen/feature/template/JigsawReplacementStructureProcessor - m ()Lnet/minecraft/class_3794; method_28975 func_237086_b_ - f Lnet/minecraft/class_3794; field_16871 INSTANCE - f Lcom/mojang/serialization/Codec; field_25003 field_237085_a_ -c net/minecraft/class_3795 net/minecraft/world/gen/feature/template/GravityStructureProcessor - m (Lnet/minecraft/class_3795;)Ljava/lang/Integer; method_28973 func_237083_a_ - m (Lnet/minecraft/class_3795;)Lnet/minecraft/class_2902$class_2903; method_28974 func_237084_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28972 func_237082_a_ - f Lnet/minecraft/class_2902$class_2903; field_16723 heightmap - f Lcom/mojang/serialization/Codec; field_25002 field_237081_a_ - f I field_16725 offset -c net/minecraft/class_4993 net/minecraft/world/gen/feature/template/LinearPosTest - m (Lnet/minecraft/class_4993;)Ljava/lang/Integer; method_28978 func_237094_b_ - m (Lnet/minecraft/class_4993;)Ljava/lang/Integer; method_28977 func_237093_a_ - m (Lnet/minecraft/class_4993;)Ljava/lang/Float; method_28980 func_237096_d_ - m (Lnet/minecraft/class_4993;)Ljava/lang/Float; method_28979 func_237095_c_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28976 func_237092_a_ - f I field_23341 field_237090_e_ - f I field_23342 field_237091_f_ - f F field_23340 field_237089_d_ - f F field_23339 field_237088_b_ - f Lcom/mojang/serialization/Codec; field_25004 field_237087_a_ -c net/minecraft/class_5399 net/minecraft/world/gen/feature/template/LavaSubmergingProcessor - m ()Lnet/minecraft/class_5399; method_29966 func_241533_b_ - f Lcom/mojang/serialization/Codec; field_25618 field_241531_a_ - f Lnet/minecraft/class_5399; field_25619 field_241532_b_ -c net/minecraft/class_4994 net/minecraft/world/gen/feature/template/AlwaysTrueTest - m ()Lnet/minecraft/class_4994; method_28982 func_237101_b_ - f Lcom/mojang/serialization/Codec; field_25006 field_237099_a_ - f Lnet/minecraft/class_4994; field_23343 field_237100_b_ -c net/minecraft/class_3822 net/minecraft/world/gen/feature/template/NopProcessor - m ()Lnet/minecraft/class_3822; method_28981 func_237098_b_ - f Lcom/mojang/serialization/Codec; field_25005 field_237097_a_ - f Lnet/minecraft/class_3822; field_16876 INSTANCE -c net/minecraft/class_4996 net/minecraft/world/gen/feature/template/IPosRuleTests - m ()Lcom/mojang/serialization/Codec; codec codec - m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28983 func_237106_a_ - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4996; method_26409 func_237107_a_ - f Lnet/minecraft/class_4996; field_23346 field_237105_c_ - f Lnet/minecraft/class_4996; field_23345 field_237104_b_ - f Lnet/minecraft/class_4996; field_23344 field_237103_a_ -c net/minecraft/class_4995 net/minecraft/world/gen/feature/template/PosRuleTest - m ()Lnet/minecraft/class_4996; method_26404 func_230384_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_26406 func_230385_a_ - f Lcom/mojang/serialization/Codec; field_25007 field_237102_c_ -c net/minecraft/class_3824 net/minecraft/world/gen/feature/template/RandomBlockMatchRuleTest - m (Lnet/minecraft/class_3824;)Lnet/minecraft/class_2248; method_28992 func_237120_b_ - m (Lnet/minecraft/class_3824;)Ljava/lang/Float; method_28991 func_237119_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28990 func_237118_a_ - f F field_16879 probability - f Lnet/minecraft/class_2248; field_16880 block - f Lcom/mojang/serialization/Codec; field_25009 field_237117_a_ -c net/minecraft/class_3821 net/minecraft/world/gen/feature/template/RuleEntry - m (Lnet/minecraft/class_3821;)Lnet/minecraft/class_3825; method_28988 func_237115_d_ - m (Lnet/minecraft/class_3821;)Lnet/minecraft/class_3825; method_28989 func_237116_e_ - m (Lnet/minecraft/class_3821;)Lnet/minecraft/class_4995; method_28987 func_237114_c_ - m ()Lnet/minecraft/class_2487; method_16760 getOutputNbt - m (Lnet/minecraft/class_3821;)Ljava/util/Optional; method_28985 func_237112_a_ - m (Lnet/minecraft/class_3821;)Lnet/minecraft/class_2680; method_28986 func_237113_b_ - m ()Lnet/minecraft/class_2680; method_16763 getOutputState - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28984 func_237111_a_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_16762 func_237110_a_ - f Lnet/minecraft/class_3825; field_16873 locationPredicate - f Lnet/minecraft/class_3825; field_16872 inputPredicate - f Lnet/minecraft/class_2487; field_16875 outputNbt - f Lnet/minecraft/class_2680; field_16874 outputState - f Lnet/minecraft/class_4995; field_23347 field_237109_d_ - f Lcom/mojang/serialization/Codec; field_25008 field_237108_a_ -c net/minecraft/class_3826 net/minecraft/world/gen/feature/template/RuleStructureProcessor - m (Lnet/minecraft/class_3826;)Ljava/util/List; method_28996 func_237126_a_ - f Lcom/google/common/collect/ImmutableList; field_16881 rules - f Lcom/mojang/serialization/Codec; field_25011 field_237125_a_ -c net/minecraft/class_3823 net/minecraft/world/gen/feature/template/RandomBlockStateMatchRuleTest - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28993 func_237122_a_ - m (Lnet/minecraft/class_3823;)Ljava/lang/Float; method_28994 func_237123_a_ - m (Lnet/minecraft/class_3823;)Lnet/minecraft/class_2680; method_28995 func_237124_b_ - f Lnet/minecraft/class_2680; field_16878 state - f F field_16877 probability - f Lcom/mojang/serialization/Codec; field_25010 field_237121_a_ -c net/minecraft/class_3827 net/minecraft/world/gen/feature/template/IRuleTestType - m ()Lcom/mojang/serialization/Codec; codec codec - m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28997 func_237128_a_ - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_3827; method_16821 func_237129_a_ - f Lnet/minecraft/class_3827; field_16985 BLOCKSTATE_MATCH - f Lnet/minecraft/class_3827; field_16981 BLOCK_MATCH - f Lnet/minecraft/class_3827; field_16983 TAG_MATCH - f Lnet/minecraft/class_3827; field_16980 RANDOM_BLOCK_MATCH - f Lnet/minecraft/class_3827; field_16982 ALWAYS_TRUE - f Lnet/minecraft/class_3827; field_16984 RANDOM_BLOCKSTATE_MATCH -c net/minecraft/class_3825 net/minecraft/world/gen/feature/template/RuleTest - m (Lnet/minecraft/class_2680;Ljava/util/Random;)Z method_16768 test - m ()Lnet/minecraft/class_3827; method_16766 getType - f Lcom/mojang/serialization/Codec; field_25012 field_237127_c_ -c net/minecraft/class_3492 net/minecraft/world/gen/feature/template/PlacementSettings - m ()Z method_27265 func_237134_m_ - m ()Z method_15120 func_204763_l - m (Ljava/util/Random;)Lnet/minecraft/class_3492; method_15112 setRandom - m ()Lnet/minecraft/class_3492; method_15128 copy - m (Ljava/util/List;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3499$class_5162; method_15121 func_237132_a_ - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_3492; method_15119 setCenterOffset - m ()Lnet/minecraft/class_3492; method_16183 clearProcessors - m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_3492; method_15130 setChunk - m (Lnet/minecraft/class_2470;)Lnet/minecraft/class_3492; method_15123 setRotation - m (Z)Lnet/minecraft/class_3492; method_15133 setIgnoreEntities - m (Z)Lnet/minecraft/class_3492; method_15131 func_215223_c - m ()Z method_15135 getIgnoreEntities - m (Z)Lnet/minecraft/class_3492; method_27264 func_237133_d_ - m ()Lnet/minecraft/class_3341; method_15124 getBoundingBox - m ()Z method_16444 func_215218_i - m ()V method_15132 setBoundingBoxFromChunk - m (Lnet/minecraft/class_2415;)Lnet/minecraft/class_3492; method_15125 setMirror - m (Lnet/minecraft/class_2338;)Ljava/util/Random; method_15115 getRandom - m (Lnet/minecraft/class_3491;)Lnet/minecraft/class_3492; method_16664 removeProcessor - m ()Lnet/minecraft/class_2415; method_15114 getMirror - m ()Lnet/minecraft/class_2470; method_15113 getRotation - m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_3341; method_15117 getBoundingBoxFromChunk - m (Lnet/minecraft/class_3491;)Lnet/minecraft/class_3492; method_16184 addProcessor - m (Lnet/minecraft/class_3341;)Lnet/minecraft/class_3492; method_15126 setBoundingBox - m ()Lnet/minecraft/class_2338; method_15134 getCenterOffset - m ()Ljava/util/List; method_16182 getProcessors - f Ljava/util/List; field_16446 processors - f Z field_24043 field_237131_l_ - f Z field_16587 field_215225_l - f Lnet/minecraft/class_2338; field_15566 centerOffset - f Lnet/minecraft/class_1923; field_15563 chunk - f Z field_15567 field_204765_h - f Lnet/minecraft/class_3341; field_15565 boundingBox - f Ljava/util/Random; field_15570 random - f Lnet/minecraft/class_2470; field_15569 rotation - f Lnet/minecraft/class_2415; field_15564 mirror - f I field_15575 field_204767_m - f Z field_15571 ignoreEntities -c net/minecraft/class_3485 net/minecraft/world/gen/feature/template/TemplateManager - m (Lnet/minecraft/class_2960;Ljava/lang/String;)Ljava/nio/file/Path; method_15085 resolvePathStructures - m (Lnet/minecraft/class_2960;)Z method_15093 writeToFile - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3499; method_15091 getTemplateDefaulted - m (Lnet/minecraft/class_2960;)V method_15087 remove - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3499; method_15094 getTemplate - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_3499; method_21891 func_227458_a_ - m (Lnet/minecraft/class_3300;)V method_29300 onResourceManagerReload - m (Ljava/io/InputStream;)Lnet/minecraft/class_3499; method_15090 loadTemplate - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3499; method_15089 func_209204_g - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3499; method_15088 loadTemplateResource - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3499; method_15092 loadTemplateFile - m (Lnet/minecraft/class_2960;Ljava/lang/String;)Ljava/nio/file/Path; method_15086 resolvePath - f Ljava/nio/file/Path; field_15512 pathGenerated - f Lcom/mojang/datafixers/DataFixer; field_15515 fixer - f Ljava/util/Map; field_15513 templates - f Lnet/minecraft/class_3300; field_25189 field_237130_d_ - f Lorg/apache/logging/log4j/Logger; field_15514 LOGGER -c net/minecraft/class_5497 net/minecraft/world/gen/feature/template/StructureProcessorList - m ()Ljava/util/List; method_31027 func_242919_a - m ()Ljava/lang/String; toString toString - f Ljava/util/List; field_26662 field_242918_a -c net/minecraft/class_3491 net/minecraft/world/gen/feature/template/StructureProcessor - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_3499$class_3501;Lnet/minecraft/class_3499$class_3501;Lnet/minecraft/class_3492;)Lnet/minecraft/class_3499$class_3501; method_15110 func_230386_a_ - m ()Lnet/minecraft/class_3828; method_16772 getType -c net/minecraft/class_3499 net/minecraft/world/gen/feature/template/Template - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_15168 getTransformedPos - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;)Lnet/minecraft/class_2338; method_15167 getZeroPositionWithTransform - m (Lnet/minecraft/class_2470;IILnet/minecraft/class_3341;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)V method_16186 func_215385_a - m (Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;Lnet/minecraft/class_243;ZLnet/minecraft/class_5425;Lnet/minecraft/class_2487;Lnet/minecraft/class_1297;)V method_17917 func_242927_a - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_15175 writeToNBT - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;ZLnet/minecraft/class_2248;)V method_15174 takeBlocksFromWorld - m ([I)Lnet/minecraft/class_2499; method_15169 writeInts - m (Ljava/lang/String;)V method_15161 setAuthor - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)V method_15164 takeEntitiesFromWorld - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;II)Lnet/minecraft/class_2338; method_15162 getZeroPositionWithTransform - m (Lnet/minecraft/class_3499$class_3501;)I method_16185 func_237154_c_ - m (Lnet/minecraft/class_2487;)V method_15183 read - m ()Ljava/lang/String; method_15181 getAuthor - m (Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/util/List; method_28055 func_237151_a_ - m (Lnet/minecraft/class_1936;ILnet/minecraft/class_251;III)V method_20532 func_222857_a - m (Lnet/minecraft/class_3492;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_15180 calculateConnectedPos - m (Lnet/minecraft/class_3492;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_15171 transformedBlockPos - m (Lnet/minecraft/class_243;Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;Lnet/minecraft/class_2338;)Lnet/minecraft/class_243; method_15176 getTransformedPos - m ([D)Lnet/minecraft/class_2499; method_15184 writeDoubles - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Lnet/minecraft/class_2248;)Ljava/util/List; method_16445 func_215381_a - m (IIILnet/minecraft/class_1936;ILnet/minecraft/class_2350;III)V method_15173 func_237141_a_ - m (Lnet/minecraft/class_3492;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3341; method_16187 getMutableBoundingBox - m ()Lnet/minecraft/class_2338; method_15160 getSize - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Lnet/minecraft/class_2248;Z)Ljava/util/List; method_15165 func_215386_a - m (Lnet/minecraft/class_3499$class_3501;)I method_28056 func_237153_b_ - m (Lnet/minecraft/class_2499;Lnet/minecraft/class_2499;)V method_15177 readPalletesAndBlocks - m (Lnet/minecraft/class_3499$class_3501;)I method_28053 func_237148_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_2338;Lnet/minecraft/class_2415;)Lnet/minecraft/class_3341; method_27267 func_237150_a_ - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Ljava/util/Random;I)Z method_15172 func_237146_a_ - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Ljava/util/Random;)V method_15182 func_237144_a_ - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Ljava/util/List;)Ljava/util/List; method_16446 func_237145_a_ - m (Lnet/minecraft/class_1297;)Z method_15163 func_237142_a_ - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2487;)Ljava/util/Optional; method_17916 loadEntity - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2338;Lnet/minecraft/class_2415;Lnet/minecraft/class_2470;Lnet/minecraft/class_2338;Lnet/minecraft/class_3341;Z)V method_15179 func_237143_a_ - m (Lnet/minecraft/class_2470;)Lnet/minecraft/class_2338; method_15166 transformedSize - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2338;Lnet/minecraft/class_3492;Ljava/util/Random;)V method_15178 func_237152_b_ - m (Lnet/minecraft/class_3499$class_3501;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V method_28054 func_237149_a_ - f Ljava/lang/String; field_15588 author - f Lnet/minecraft/class_2338; field_15587 size - f Ljava/util/List; field_15586 blocks - f Ljava/util/List; field_15589 entities -c net/minecraft/class_3499$class_3502 net/minecraft/world/gen/feature/template/Template$EntityInfo - f Lnet/minecraft/class_243; field_15599 pos - f Lnet/minecraft/class_2487; field_15598 nbt - f Lnet/minecraft/class_2338; field_15600 blockPos -c net/minecraft/class_3499$class_3501 net/minecraft/world/gen/feature/template/Template$BlockInfo - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2338; field_15597 pos - f Lnet/minecraft/class_2487; field_15595 nbt - f Lnet/minecraft/class_2680; field_15596 state -c net/minecraft/class_3499$class_3500 net/minecraft/world/gen/feature/template/Template$BasicPalette - m ()Ljava/util/Iterator; iterator iterator - m (Lnet/minecraft/class_2680;I)V method_15186 addMapping - m (I)Lnet/minecraft/class_2680; method_15185 stateFor - m (Lnet/minecraft/class_2680;)I method_15187 idFor - f I field_15592 lastId - f Lnet/minecraft/class_2680; field_15590 DEFAULT_BLOCK_STATE - f Lnet/minecraft/class_2361; field_15591 ids -c net/minecraft/class_3499$class_5162 net/minecraft/world/gen/feature/template/Template$Palette - m ()Ljava/util/List; method_27125 func_237157_a_ - m (Lnet/minecraft/class_2248;)Ljava/util/List; method_27128 func_237160_b_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_3499$class_3501;)Z method_27127 func_237159_a_ - m (Lnet/minecraft/class_2248;)Ljava/util/List; method_27126 func_237158_a_ - f Ljava/util/Map; field_23914 field_237156_b_ - f Ljava/util/List; field_23913 field_237155_a_ -c net/minecraft/class_3499$1 net/minecraft/world/gen/feature/template/Template$1 - f [I field_15594 field_206965_a - f [I field_15593 field_206966_b -c net/minecraft/class_3828 net/minecraft/world/gen/feature/template/IStructureProcessorType - m (Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_5497; method_31028 func_242923_a - m (Lnet/minecraft/class_5497;)Lnet/minecraft/class_5497; method_31030 func_242926_b - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_3828; method_16822 register - m (Lnet/minecraft/class_5497;)Lnet/minecraft/class_5497; method_31029 func_242925_a - m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28998 func_242924_a - m ()Lcom/mojang/serialization/Codec; codec codec - f Lcom/mojang/serialization/Codec; field_26663 field_242920_k - f Lcom/mojang/serialization/Codec; field_25013 PROCESSOR_TYPE - f Lnet/minecraft/class_3828; field_16990 RULE - f Lcom/mojang/serialization/Codec; field_25876 field_242921_l - f Lnet/minecraft/class_3828; field_24044 BLOCK_AGE - f Lnet/minecraft/class_3828; field_16987 NOP - f Lnet/minecraft/class_3828; field_24045 BLACKSTONE_REPLACE - f Lnet/minecraft/class_3828; field_25620 LAVA_SUBMERGED_BLOCK - f Lnet/minecraft/class_3828; field_16986 BLOCK_IGNORE - f Lnet/minecraft/class_3828; field_16989 GRAVITY - f Lcom/mojang/serialization/Codec; field_25877 field_242922_m - f Lnet/minecraft/class_3828; field_16988 BLOCK_ROT - f Lnet/minecraft/class_3828; field_16991 JIGSAW_REPLACEMENT -c net/minecraft/class_3798 net/minecraft/world/gen/feature/template/TagMatchRuleTest - m ()Lnet/minecraft/class_5414; method_30477 func_242928_b - m (Lnet/minecraft/class_3798;)Lnet/minecraft/class_3494; method_28999 func_237162_a_ - f Lcom/mojang/serialization/Codec; field_25014 field_237161_a_ - f Lnet/minecraft/class_3494; field_16747 tag -c net/minecraft/class_3506 net/minecraft/world/gen/surfacebuilders/BadlandsSurfaceBuilder - m (III)Lnet/minecraft/class_2680; method_15207 func_215431_a - m (J)V method_15209 func_215430_b - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15208 buildSurface - f Lnet/minecraft/class_3543; field_15618 field_215437_d - f Lnet/minecraft/class_2680; field_15624 WHITE_TERRACOTTA - f Lnet/minecraft/class_2680; field_15625 TERRACOTTA - f Lnet/minecraft/class_3543; field_15623 field_215435_c - f Lnet/minecraft/class_2680; field_15620 ORANGE_TERRACOTTA - f Lnet/minecraft/class_2680; field_15626 YELLOW_TERRACOTTA - f J field_15622 field_215433_b - f Lnet/minecraft/class_3543; field_15619 field_215439_e - f Lnet/minecraft/class_2680; field_15616 BROWN_TERRACOTTA - f Lnet/minecraft/class_2680; field_15617 LIGHT_GRAY_TERRACOTTA - f Lnet/minecraft/class_2680; field_15621 RED_TERRACOTTA - f [Lnet/minecraft/class_2680; field_15627 field_215432_a -c net/minecraft/class_3504 net/minecraft/world/gen/surfacebuilders/ConfiguredSurfaceBuilder - m (J)V method_15199 setSeed - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJ)V method_15198 buildSurface - m (Lnet/minecraft/class_3504;)Lnet/minecraft/class_3523; method_29000 func_237169_a_ - m ()Lnet/minecraft/class_3531; method_15197 getConfig - f Lnet/minecraft/class_3523; field_15610 builder - f Lnet/minecraft/class_3531; field_15611 config - f Lcom/mojang/serialization/Codec; field_25015 field_244393_b_ - f Lcom/mojang/serialization/Codec; field_25878 field_237168_a_ -c net/minecraft/class_5163 net/minecraft/world/gen/surfacebuilders/BasaltDeltasSurfaceBuilder - f Lcom/google/common/collect/ImmutableList; field_23919 field_237167_e_ - f Lnet/minecraft/class_2680; field_23915 field_237163_a_ - f Lnet/minecraft/class_2680; field_23916 field_237164_b_ - f Lcom/google/common/collect/ImmutableList; field_23918 field_237166_d_ - f Lnet/minecraft/class_2680; field_23917 field_237165_c_ -c net/minecraft/class_3507 net/minecraft/world/gen/surfacebuilders/ErodedBadlandsSurfaceBuilder - f Lnet/minecraft/class_2680; field_15628 ORANGE_TERRACOTTA - f Lnet/minecraft/class_2680; field_15630 TERRACOTTA - f Lnet/minecraft/class_2680; field_15629 WHITE_TERRACOTTA -c net/minecraft/class_3510 net/minecraft/world/gen/surfacebuilders/DefaultSurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15219 buildSurface - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;I)V method_15218 buildSurface -c net/minecraft/class_3511 net/minecraft/world/gen/surfacebuilders/GiantTreeTaigaSurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15220 buildSurface -c net/minecraft/class_3512 net/minecraft/world/gen/surfacebuilders/FrozenOceanSurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15221 buildSurface - f Lnet/minecraft/class_2680; field_15639 ICE - f J field_15641 seed - f Lnet/minecraft/class_3543; field_15644 field_205199_h - f Lnet/minecraft/class_2680; field_15638 GRAVEL - f Lnet/minecraft/class_3543; field_15642 field_205200_i - f Lnet/minecraft/class_2680; field_15643 AIR - f Lnet/minecraft/class_2680; field_15640 PACKED_ICE - f Lnet/minecraft/class_2680; field_15645 SNOW_BLOCK -c net/minecraft/class_3514 net/minecraft/world/gen/surfacebuilders/MountainSurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15233 buildSurface -c net/minecraft/class_3516 net/minecraft/world/gen/surfacebuilders/GravellyMountainSurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15245 buildSurface -c net/minecraft/class_4789 net/minecraft/world/gen/surfacebuilders/NetherForestsSurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_24455 buildSurface - f Lnet/minecraft/class_3537; field_22203 field_237179_c_ - f Lnet/minecraft/class_2680; field_22202 field_237178_b_ - f J field_22201 field_237177_a_ -c net/minecraft/class_5164 net/minecraft/world/gen/surfacebuilders/ValleySurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_27132 buildSurface - m ()Lcom/google/common/collect/ImmutableList; method_27129 func_230387_a_ - m ()Lnet/minecraft/class_2680; method_27135 func_230389_c_ - m (IIILjava/util/Map$Entry;)Ljava/lang/Double; method_27130 func_237174_a_ - m ()Lcom/google/common/collect/ImmutableList; method_27133 func_230388_b_ - m (IIILjava/util/Map$Entry;)Ljava/lang/Double; method_27134 func_237176_b_ - m (Lcom/google/common/collect/ImmutableList;J)Lcom/google/common/collect/ImmutableMap; method_27131 func_237175_a_ - f Lcom/google/common/collect/ImmutableMap; field_23922 field_237172_c_ - f Lnet/minecraft/class_3537; field_23923 field_237173_d_ - f J field_23920 field_237170_a_ - f Lcom/google/common/collect/ImmutableMap; field_23921 field_237171_b_ -c net/minecraft/class_3519 net/minecraft/world/gen/surfacebuilders/NoopSurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15299 buildSurface -c net/minecraft/class_3520 net/minecraft/world/gen/surfacebuilders/NetherSurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15300 buildSurface - f Lnet/minecraft/class_2680; field_15660 CAVE_AIR - f Lnet/minecraft/class_2680; field_15659 GRAVEL - f J field_15661 field_205552_a - f Lnet/minecraft/class_3537; field_15663 field_205553_b - f Lnet/minecraft/class_2680; field_15662 SOUL_SAND -c net/minecraft/class_4790 net/minecraft/world/gen/surfacebuilders/SoulSandValleySurfaceBuilder - f Lcom/google/common/collect/ImmutableList; field_23924 field_237183_d_ - f Lnet/minecraft/class_2680; field_22210 field_237181_b_ - f Lnet/minecraft/class_2680; field_22204 field_237182_c_ - f Lnet/minecraft/class_2680; field_22209 field_237180_a_ -c net/minecraft/class_3524 net/minecraft/world/gen/surfacebuilders/ShatteredSavannaSurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15308 buildSurface -c net/minecraft/class_3527 net/minecraft/world/gen/surfacebuilders/SurfaceBuilderConfig - m (Lnet/minecraft/class_3527;)Lnet/minecraft/class_2680; method_29007 func_237207_c_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_29004 func_237204_a_ - m ()Lnet/minecraft/class_2680; method_15330 getUnderWaterMaterial - m (Lnet/minecraft/class_3527;)Lnet/minecraft/class_2680; method_29006 func_237206_b_ - m (Lnet/minecraft/class_3527;)Lnet/minecraft/class_2680; method_29005 func_237205_a_ - f Lnet/minecraft/class_2680; field_15716 underWaterMaterial - f Lnet/minecraft/class_2680; field_15717 underMaterial - f Lcom/mojang/serialization/Codec; field_25017 field_237203_a_ - f Lnet/minecraft/class_2680; field_15715 topMaterial -c net/minecraft/class_3523 net/minecraft/world/gen/surfacebuilders/SurfaceBuilder - m (J)V method_15306 setSeed - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3531;)V method_15305 buildSurface - m (Lnet/minecraft/class_3531;)Lnet/minecraft/class_3504; method_30478 func_242929_a - m (Ljava/lang/String;Lnet/minecraft/class_3523;)Lnet/minecraft/class_3523; method_15307 register - m ()Lcom/mojang/serialization/Codec; method_29003 func_237202_d_ - f Lnet/minecraft/class_3527; field_15671 END_STONE_CONFIG - f Lnet/minecraft/class_3527; field_15690 NETHERRACK_CONFIG - f Lnet/minecraft/class_3523; field_15688 GIANT_TREE_TAIGA - f Lnet/minecraft/class_2680; field_15700 NETHERRACK - f Lnet/minecraft/class_3527; field_22215 field_237186_Q_ - f Lnet/minecraft/class_2680; field_22221 field_237195_v_ - f Lnet/minecraft/class_2680; field_22219 field_237193_t_ - f Lnet/minecraft/class_3527; field_15697 GRASS_DIRT_SAND_CONFIG - f Lnet/minecraft/class_3523; field_15701 DEFAULT - f Lnet/minecraft/class_2680; field_15703 GRASS_BLOCK - f Lnet/minecraft/class_2680; field_15704 RED_SAND - f Lnet/minecraft/class_2680; field_15668 COARSE_DIRT - f Lnet/minecraft/class_3523; field_15683 NOPE - f Lnet/minecraft/class_2680; field_15686 MYCELIUM - f Lcom/mojang/serialization/Codec; field_25016 field_237188_a_ - f Lnet/minecraft/class_3527; field_15672 RED_SAND_WHITE_TERRACOTTA_GRAVEL_CONFIG - f Lnet/minecraft/class_3523; field_15680 SHATTERED_SAVANNA - f Lnet/minecraft/class_2680; field_15679 GRAVEL - f Lnet/minecraft/class_3523; field_22216 field_237189_ad_ - f Lnet/minecraft/class_3527; field_15673 GRAVEL_CONFIG - f Lnet/minecraft/class_3523; field_15699 FROZEN_OCEAN - f Lnet/minecraft/class_3523; field_23926 field_237191_af_ - f Lnet/minecraft/class_3527; field_15670 STONE_STONE_GRAVEL_CONFIG - f Lnet/minecraft/class_2680; field_23927 field_237197_x_ - f Lnet/minecraft/class_3523; field_15681 SWAMP - f Lnet/minecraft/class_2680; field_23929 field_237199_z_ - f Lnet/minecraft/class_3523; field_15689 WOODED_BADLANDS - f Lnet/minecraft/class_3527; field_22213 field_237184_N_ - f Lnet/minecraft/class_2680; field_15667 END_STONE - f Lnet/minecraft/class_3527; field_22214 field_237185_P_ - f Lnet/minecraft/class_2680; field_22220 field_237194_u_ - f Lnet/minecraft/class_3523; field_15692 MOUNTAIN - f Lnet/minecraft/class_2680; field_15696 DIRT - f Lnet/minecraft/class_3527; field_15694 SAND_SAND_GRAVEL_CONFIG - f Lnet/minecraft/class_2680; field_15682 SAND - f Lnet/minecraft/class_3523; field_15702 GRAVELLY_MOUNTAIN - f Lnet/minecraft/class_2680; field_15706 STONE - f Lnet/minecraft/class_3527; field_15705 MYCELIUM_DIRT_GRAVEL_CONFIG - f Lnet/minecraft/class_2680; field_22218 field_237192_q_ - f Lnet/minecraft/class_2680; field_15669 PODZOL - f Lnet/minecraft/class_3527; field_15687 SAND_CONFIG - f Lnet/minecraft/class_2680; field_15675 WHITE_TERRACOTTA - f Lnet/minecraft/class_3523; field_15693 NETHER - f Lnet/minecraft/class_3527; field_15691 PODZOL_DIRT_GRAVEL_CONFIG - f Lnet/minecraft/class_3527; field_15678 CORASE_DIRT_DIRT_GRAVEL_CONFIG - f Lnet/minecraft/class_3527; field_15677 GRASS_DIRT_GRAVEL_CONFIG - f Lnet/minecraft/class_3523; field_22217 field_237190_ae_ - f Lnet/minecraft/class_2680; field_23928 field_237198_y_ - f Lnet/minecraft/class_3527; field_23925 field_237187_R_ - f Lnet/minecraft/class_2680; field_22222 field_237196_w_ - f Lnet/minecraft/class_3523; field_15684 ERODED_BADLANDS - f Lnet/minecraft/class_3523; field_15698 BADLANDS -c net/minecraft/class_3529 net/minecraft/world/gen/surfacebuilders/SwampSurfaceBuilder - m (Ljava/util/Random;Lnet/minecraft/class_2791;Lnet/minecraft/class_1959;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJLnet/minecraft/class_3527;)V method_15333 buildSurface -c net/minecraft/class_3531 net/minecraft/world/gen/surfacebuilders/ISurfaceBuilderConfig - m ()Lnet/minecraft/class_2680; method_15337 getTop - m ()Lnet/minecraft/class_2680; method_15336 getUnder -c net/minecraft/class_3535 net/minecraft/world/gen/surfacebuilders/WoodedBadlandsSurfaceBuilder - f Lnet/minecraft/class_2680; field_15741 WHITE_TERRACOTTA - f Lnet/minecraft/class_2680; field_15740 ORANGE_TERRACOTTA - f Lnet/minecraft/class_2680; field_15742 TERRACOTTA -c net/minecraft/class_5216 net/minecraft/world/gen/MaxMinNoiseMixer - m (Lnet/minecraft/class_2919;ILit/unimi/dsi/fastutil/doubles/DoubleList;)Lnet/minecraft/class_5216; method_30846 func_242930_a - m (DDD)D method_27406 func_237211_a_ - m (I)D method_27407 func_237212_a_ - f D field_24175 field_237208_a_ - f Lnet/minecraft/class_3537; field_24177 field_237210_c_ - f Lnet/minecraft/class_3537; field_24176 field_237209_b_ -c net/minecraft/class_3756 net/minecraft/world/gen/ImprovedNoiseGenerator - m (IIIDDDDDD)D method_16450 func_215459_a - m (I)I method_16449 getPermutValue - m (DDDDD)D method_16447 func_215456_a - m (IDDD)D method_16448 dotGrad - f [B field_16590 permutations - f D field_16588 zCoord - f D field_16589 yCoord - f D field_16591 xCoord -c net/minecraft/class_3543 net/minecraft/world/gen/PerlinNoiseGenerator - m (DDZ)D method_16451 noiseAt - f D field_20662 field_227463_c_ - f [Lnet/minecraft/class_3541; field_15770 noiseLevels - f D field_20661 field_227462_b_ -c net/minecraft/class_3537 net/minecraft/world/gen/OctavesNoiseGenerator - m (D)D method_16452 maintainPrecision - m (DDDDDZ)D method_16453 getValue - m (DDD)D method_15416 func_205563_a - m (Lnet/minecraft/class_2919;ILit/unimi/dsi/fastutil/doubles/DoubleList;)Lnet/minecraft/class_3537; method_30847 func_242932_a - m (Lit/unimi/dsi/fastutil/ints/IntSortedSet;)Lcom/mojang/datafixers/util/Pair; method_30848 func_242933_a - m (I)Lnet/minecraft/class_3756; method_16668 getOctave - f [Lnet/minecraft/class_3756; field_15744 octaves - f D field_20659 field_227460_b_ - f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_26445 field_242931_b - f D field_20660 field_227461_c_ -c net/minecraft/class_3541 net/minecraft/world/gen/SimplexNoiseGenerator - m (I)I method_16456 getPermutValue - m (DDD)D method_22416 func_227464_a_ - m ([IDDD)D method_15431 processGrad - m (IDDDD)D method_16455 getContrib - m (DD)D method_15433 getValue - f [I field_15765 p - f D field_15768 F2 - f D field_15767 G2 - f D field_15763 xo - f D field_15762 yo - f [[I field_15766 GRADS - f D field_15761 zo - f D field_15764 SQRT_3 -c net/minecraft/class_3757 net/minecraft/world/gen/INoiseGenerator - m (DDDD)D method_16454 noiseAt -c net/minecraft/class_3547 net/minecraft/world/lighting/BlockLightStorage -c net/minecraft/class_3547$class_3548 net/minecraft/world/lighting/BlockLightStorage$StorageMap - m ()Lnet/minecraft/class_3547$class_3548; method_15443 copy -c net/minecraft/class_3552 net/minecraft/world/lighting/BlockLightEngine - m (J)I method_15474 getLightValue - f Lnet/minecraft/class_2338$class_2339; field_16511 mutablePos - f [Lnet/minecraft/class_2350; field_15778 DIRECTIONS -c net/minecraft/class_3554 net/minecraft/world/lighting/LevelBasedGraph - m (J)Z method_15494 isRoot - m (JI)V method_15485 setLevel - m (JJI)I method_15486 computeLevel - m (JJI)I method_15488 getEdgeLevel - m (Ljava/util/function/LongPredicate;)V method_24206 func_227465_a_ - m (I)V method_15481 updateMinLevel - m (JIIZ)V method_15493 removeToUpdate - m ()I method_24208 func_227467_c_ - m (Ljava/util/function/LongPredicate;Lit/unimi/dsi/fastutil/longs/LongList;J)V method_24207 func_229982_a_ - m (JJIZ)V method_15484 propagateLevel - m (I)I method_15492 processUpdates - m (JJIZ)V method_15478 scheduleUpdate - m (J)I method_15480 getLevel - m (JJIIIZ)V method_15482 propagateLevel - m (JIZ)V method_15487 notifyNeighbors - m (II)I method_15490 minLevel - m (JII)V method_15479 addToUpdate - m (J)V method_15483 cancelUpdate - m ()Z method_15489 needsUpdate - m (J)V method_15491 scheduleUpdate - f [Lit/unimi/dsi/fastutil/longs/LongLinkedOpenHashSet; field_15785 updatesByLevel - f I field_15781 minLevelToUpdate - f I field_15783 levelCount - f Lit/unimi/dsi/fastutil/longs/Long2ByteMap; field_15784 propagationLevels - f Z field_15782 needsUpdate -c net/minecraft/class_3554$2 net/minecraft/world/lighting/LevelBasedGraph$2 - m (I)V rehash rehash - f Lnet/minecraft/class_3554; field_15786 field_215659_b - f I field_15787 field_215658_a -c net/minecraft/class_3554$1 net/minecraft/world/lighting/LevelBasedGraph$1 - m (I)V rehash rehash - f I field_16728 field_215656_a - f Lnet/minecraft/class_3554; field_16727 field_215657_b -c net/minecraft/class_3556 net/minecraft/world/lighting/LightDataMap - m ()V method_15505 invalidateCaches - m ()Lnet/minecraft/class_3556; method_15504 copy - m (J)V method_15502 copyArray - m ()V method_16188 disableCaching - m (J)Lnet/minecraft/class_2804; method_15500 removeArray - m (J)Lnet/minecraft/class_2804; method_15501 getArray - m (J)Z method_15503 hasArray - m (JLnet/minecraft/class_2804;)V method_15499 setArray - f [Lnet/minecraft/class_2804; field_15790 recentArrays - f Lit/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap; field_15791 arrays - f [J field_15789 recentPositions - f Z field_16447 useCaching -c net/minecraft/class_3558 net/minecraft/world/lighting/LightEngine - m (Lnet/minecraft/class_1923;Z)V method_20599 retainChunkData - m ()V method_17530 invalidateCaches - m (Lnet/minecraft/class_1923;Z)V method_15512 func_215620_a - m (Lnet/minecraft/class_2680;JLnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_20710 getVoxelShape - m ()Z method_15518 func_215619_a - m (J)Ljava/lang/String; method_22875 getDebugString - m (Lnet/minecraft/class_2338;)V method_15513 checkLight - m (Lnet/minecraft/class_2338;I)V method_15514 func_215623_a - m (II)Lnet/minecraft/class_1922; method_17529 getChunkReader - m (Lnet/minecraft/class_2804;J)I method_15517 getLevelFromArray - m (IZZ)I method_15516 tick - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;I)I method_20049 func_215613_a - m (JLorg/apache/commons/lang3/mutable/MutableInt;)Lnet/minecraft/class_2680; method_20479 getBlockAndOpacity - m (JLnet/minecraft/class_2804;Z)V method_15515 setData - f Lnet/minecraft/class_2823; field_15795 chunkProvider - f Lnet/minecraft/class_2338$class_2339; field_19284 scratchPos - f Z field_15794 field_215629_e - f Lnet/minecraft/class_1944; field_15792 type - f [J field_17397 recentPositions - f Lnet/minecraft/class_3560; field_15793 storage - f [Lnet/minecraft/class_2350; field_16513 DIRECTIONS - f [Lnet/minecraft/class_1922; field_17398 recentChunks -c net/minecraft/class_4298 net/minecraft/world/lighting/NibbleArrayRepeater -c net/minecraft/class_3560 net/minecraft/world/lighting/SectionLightStorage - m (J)V method_15534 removeSection - m (Lnet/minecraft/class_3558;ZZ)V method_15527 updateSections - m (Lnet/minecraft/class_3556;J)Lnet/minecraft/class_2804; method_15533 getArray - m (J)V method_15523 addSection - m ()V method_15539 processAllLevelUpdates - m ()V method_15530 updateAndNotify - m (J)Z method_15524 hasSection - m (JZ)Lnet/minecraft/class_2804; method_15522 getArray - m (JJ)Z method_24209 func_227469_a_ - m ()Z method_15528 hasSectionsToUpdate - m (J)I method_15537 getLight - m (JI)V method_15525 setLight - m (Lnet/minecraft/class_3558;J)V method_29967 func_241538_b_ - m (JZ)V method_15526 updateSectionStatus - m (JZ)V method_15535 setColumnEnabled - m (JZ)V method_20600 retainChunkData - m (JLnet/minecraft/class_2804;Z)V method_15532 setData - m (J)I method_15538 getLightOrDefault - m (J)Lnet/minecraft/class_2804; method_15529 getOrCreateArray - m (Lnet/minecraft/class_3558;J)V method_15536 cancelSectionUpdates - m (J)Lnet/minecraft/class_2804; method_20533 getArray - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15808 activeLightSections - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15797 addedEmptySections - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15804 addedActiveLightSections - f Lnet/minecraft/class_2804; field_15801 EMPTY_ARRAY - f Lnet/minecraft/class_3556; field_15806 uncachedLightData - f Z field_15800 hasSectionsToUpdate - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15802 dirtyCachedSections - f Lnet/minecraft/class_2823; field_15803 chunkProvider - f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_15807 newArrays - f [Lnet/minecraft/class_2350; field_15799 DIRECTIONS - f Lnet/minecraft/class_1944; field_15805 type - f Lit/unimi/dsi/fastutil/longs/LongSet; field_25621 field_241536_n_ - f Lit/unimi/dsi/fastutil/longs/LongSet; field_19342 chunksToRetain - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15798 noLightSections - f Lit/unimi/dsi/fastutil/longs/LongSet; field_16448 changedLightPositions - f Lnet/minecraft/class_3556; field_15796 cachedLightData -c net/minecraft/class_3560$1 net/minecraft/world/lighting/SectionLightStorage$1 - f [I field_15809 field_215660_a -c net/minecraft/class_3562 net/minecraft/world/lighting/IWorldLightListener - m (Lnet/minecraft/class_2338;)I method_15543 getLightFor - m (Lnet/minecraft/class_4076;)Lnet/minecraft/class_2804; method_15544 getData -c net/minecraft/class_3562$class_3563 net/minecraft/world/lighting/IWorldLightListener$Dummy - m (Ljava/lang/String;)Lnet/minecraft/class_3562$class_3563; valueOf valueOf - m ()[Lnet/minecraft/class_3562$class_3563; values values - f Lnet/minecraft/class_3562$class_3563; field_15812 INSTANCE - f [Lnet/minecraft/class_3562$class_3563; field_15811 $VALUES -c net/minecraft/class_3565 net/minecraft/world/lighting/ILightListener - m (Lnet/minecraft/class_4076;Z)V method_15551 updateSectionStatus - m (Lnet/minecraft/class_2338;Z)V method_15552 func_215567_a -c net/minecraft/class_3568 net/minecraft/world/lighting/WorldLightManager - m (IZZ)I method_15563 tick - m (Lnet/minecraft/class_1944;)Lnet/minecraft/class_3562; method_15562 getLightEngine - m (Lnet/minecraft/class_2338;I)I method_22363 getLightSubtracted - m (Lnet/minecraft/class_1944;Lnet/minecraft/class_4076;Lnet/minecraft/class_2804;Z)V method_15558 setData - m (Lnet/minecraft/class_1923;Z)V method_20601 retainData - m (Lnet/minecraft/class_2338;)V method_15559 checkBlock - m ()Z method_15561 hasLightWork - m (Lnet/minecraft/class_1923;Z)V method_15557 enableLightSources - m (Lnet/minecraft/class_2338;I)V method_15560 onBlockEmissionIncrease - m (Lnet/minecraft/class_1944;Lnet/minecraft/class_4076;)Ljava/lang/String; method_22876 getDebugInfo - f Lnet/minecraft/class_3558; field_15813 skyLight - f Lnet/minecraft/class_3558; field_15814 blockLight -c net/minecraft/class_3569 net/minecraft/world/lighting/SkyLightStorage - m (I)Z method_15567 isAboveBottom - m ()V method_15569 updateHasPendingUpdates - m (J)Z method_15568 isAboveWorld - m (J)Z method_15566 isSectionEnabled - m (J)V method_20809 scheduleSurfaceUpdate - m (J)V method_20810 scheduleFullUpdate - m (J)Z method_15565 func_215551_l - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15820 sectionsWithLight - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15815 pendingAdditions - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15816 pendingRemovals - f Lit/unimi/dsi/fastutil/longs/LongSet; field_15817 enabledColumns - f [Lnet/minecraft/class_2350; field_15818 field_215554_k - f Z field_15819 hasPendingUpdates -c net/minecraft/class_3569$1 net/minecraft/world/lighting/SkyLightStorage$1 - f [I field_15823 field_215661_a -c net/minecraft/class_3569$class_3570 net/minecraft/world/lighting/SkyLightStorage$StorageMap - m (Lnet/minecraft/class_3569$class_3570;I)I method_15570 func_215649_a - m ()Lnet/minecraft/class_3569$class_3570; method_15572 copy - m (Lnet/minecraft/class_3569$class_3570;)I method_15573 func_215650_b - m (Lnet/minecraft/class_3569$class_3570;)Lit/unimi/dsi/fastutil/longs/Long2IntOpenHashMap; method_15571 func_215651_a - f Lit/unimi/dsi/fastutil/longs/Long2IntOpenHashMap; field_15821 surfaceSections - f I field_15822 minY -c net/minecraft/class_3572 net/minecraft/world/lighting/SkyLightEngine - f [Lnet/minecraft/class_2350; field_15825 CARDINALS - f [Lnet/minecraft/class_2350; field_15826 DIRECTIONS -c net/minecraft/class_3609 net/minecraft/fluid/FlowingFluid - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;)V method_15725 flowAround - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3610; method_15727 calculateCorrectFlowingState - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;Lnet/minecraft/class_3611;)Z method_15738 canFlow - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;Lnet/minecraft/class_2680;)V method_15744 func_207937_a - m ()Z method_15737 canSourcesMultiply - m (Lnet/minecraft/class_3610;)Z method_15748 isSameOrEmpty - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;I)Z method_15731 func_212753_a - m (Z)Lnet/minecraft/class_3610; method_15729 getStillFluidState - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_3610;)V method_15745 flowInto - m (Lnet/minecraft/class_3610;)Z method_15752 isSameAs - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;I)Lcom/mojang/datafixers/util/Pair; method_15734 func_212755_a - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3611;)Z method_15754 isBlocked - m (IZ)Lnet/minecraft/class_3610; method_15728 getFlowingFluidState - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_15730 beforeReplacingBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_15749 causesDownwardCurrent - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)S method_15747 func_212752_a - m (Lnet/minecraft/class_3610;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_17774 isFullHeight - m (Lnet/minecraft/class_4538;)I method_15733 getSlopeFindDistance - m (Lnet/minecraft/class_4538;)I method_15739 getLevelDecreasePerBlock - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;I)Lcom/mojang/datafixers/util/Pair; method_15755 func_212748_b - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Ljava/util/Map; method_15726 func_205572_b - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_3611;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;)Z method_15746 func_211760_a - m (Lnet/minecraft/class_3610;)I method_15741 getLevelFromState - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_15732 doesSideHaveHoles - m ()Lnet/minecraft/class_3611; method_15751 getStillFluid - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;Lnet/minecraft/class_3610;)I method_15753 func_215667_a - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4538;Lnet/minecraft/class_2680;I)Z method_15743 func_212749_a - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)I method_15740 getNumHorizontallyAdjacentSources - m ()Lnet/minecraft/class_3611; method_15750 getFlowingFluid - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_3611;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_15736 func_211759_a - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;)Lnet/minecraft/class_265; method_17773 func_215668_b - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;ILnet/minecraft/class_2350;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lit/unimi/dsi/fastutil/shorts/Short2ObjectMap;Lit/unimi/dsi/fastutil/shorts/Short2BooleanMap;)I method_15742 func_205571_a - m ()Lit/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap; method_15735 func_212750_m - f Ljava/util/Map; field_17587 field_215669_f - f Lnet/minecraft/class_2758; field_15900 LEVEL_1_8 - f Lnet/minecraft/class_2746; field_15902 FALLING - f Ljava/lang/ThreadLocal; field_15901 field_212756_e -c net/minecraft/class_3609$1 net/minecraft/fluid/FlowingFluid$1 - m (I)V rehash rehash -c net/minecraft/class_3576 net/minecraft/fluid/EmptyFluid -c net/minecraft/class_3610 net/minecraft/fluid/FluidState - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_15763 getActualHeight - m ()I method_15761 getLevel - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_243; method_15758 getFlow - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_15756 shouldRenderSides - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_15770 tick - m (Lnet/minecraft/class_3494;)Z method_15767 isTagged - m ()Lnet/minecraft/class_2680; method_15759 getBlockState - m ()F method_20785 getHeight - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3611;Lnet/minecraft/class_2350;)Z method_15764 canDisplace - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_15757 randomTick - m ()Lnet/minecraft/class_2394; method_15766 getDripParticleData - m ()Z method_15773 ticksRandomly - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_15768 animateTick - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_17776 getShape - m ()F method_15760 getExplosionResistance - m ()Z method_15771 isSource - m ()Z method_15769 isEmpty - m ()Lnet/minecraft/class_3611; method_15772 getFluid - f Lcom/mojang/serialization/Codec; field_25018 field_237213_a_ -c net/minecraft/class_3611 net/minecraft/fluid/Fluid - m ()Z method_15794 isEmpty - m (Lnet/minecraft/class_3610;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3611;Lnet/minecraft/class_2350;)Z method_15777 canDisplace - m (Lnet/minecraft/class_3610;)Z method_15793 isSource - m ()Lnet/minecraft/class_3610; method_15785 getDefaultState - m (Lnet/minecraft/class_3610;)V method_15781 setDefaultState - m (Lnet/minecraft/class_2689$class_2690;)V method_15775 fillStateContainer - m (Lnet/minecraft/class_3610;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_15788 getActualHeight - m ()Lnet/minecraft/class_1792; method_15774 getFilledBucket - m ()F method_15784 getExplosionResistance - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;Ljava/util/Random;)V method_15776 animateTick - m (Lnet/minecraft/class_3611;)Z method_15780 isEquivalentTo - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;Ljava/util/Random;)V method_15792 randomTick - m (Lnet/minecraft/class_4538;)I method_15789 getTickRate - m (Lnet/minecraft/class_3494;)Z method_15791 isIn - m ()Lnet/minecraft/class_2689; method_15783 getStateContainer - m ()Z method_15795 ticksRandomly - m (Lnet/minecraft/class_3610;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_17775 func_215664_b - m (Lnet/minecraft/class_3610;)Lnet/minecraft/class_2680; method_15790 getBlockState - m (Lnet/minecraft/class_3610;)F method_20784 getHeight - m (Lnet/minecraft/class_3610;)I method_15779 getLevel - m ()Lnet/minecraft/class_2394; method_15787 getDripParticleData - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;)Lnet/minecraft/class_243; method_15782 getFlow - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;)V method_15778 tick - f Lnet/minecraft/class_2689; field_15905 stateContainer - f Lnet/minecraft/class_2361; field_15904 STATE_REGISTRY - f Lnet/minecraft/class_3610; field_15903 defaultState -c net/minecraft/class_3616 net/minecraft/fluid/LavaFluid - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_15819 isSurroundingBlockFlammable - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_15817 getCanBlockBurn - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_15818 triggerEffects -c net/minecraft/class_3616$class_3617 net/minecraft/fluid/LavaFluid$Flowing -c net/minecraft/class_3616$class_3618 net/minecraft/fluid/LavaFluid$Source -c net/minecraft/class_3612 net/minecraft/fluid/Fluids - m (Ljava/lang/String;Lnet/minecraft/class_3611;)Lnet/minecraft/class_3611; method_15796 register - f Lnet/minecraft/class_3611; field_15906 EMPTY - f Lnet/minecraft/class_3609; field_15908 LAVA - f Lnet/minecraft/class_3609; field_15907 FLOWING_LAVA - f Lnet/minecraft/class_3609; field_15910 WATER - f Lnet/minecraft/class_3609; field_15909 FLOWING_WATER -c net/minecraft/class_3620 net/minecraft/block/material/MaterialColor - m (I)I method_15820 getMapColor - f Lnet/minecraft/class_3620; field_16007 BLACK_TERRACOTTA - f Lnet/minecraft/class_3620; field_16010 YELLOW - f Lnet/minecraft/class_3620; field_15980 LAPIS - f Lnet/minecraft/class_3620; field_15998 MAGENTA - f Lnet/minecraft/class_3620; field_16003 WHITE_TERRACOTTA - f Lnet/minecraft/class_3620; field_16030 PINK - f Lnet/minecraft/class_3620; field_16017 OBSIDIAN - f Lnet/minecraft/class_3620; field_16020 RED - f Lnet/minecraft/class_3620; field_16028 GREEN_TERRACOTTA - f Lnet/minecraft/class_3620; field_16019 WATER - f Lnet/minecraft/class_3620; field_15977 BROWN - f Lnet/minecraft/class_3620; field_15994 GOLD - f Lnet/minecraft/class_3620; field_16025 QUARTZ - f Lnet/minecraft/class_3620; field_15988 LIGHT_GRAY_TERRACOTTA - f Lnet/minecraft/class_3620; field_16004 FOLIAGE - f I field_16021 colorIndex - f Lnet/minecraft/class_3620; field_15989 PINK_TERRACOTTA - f Lnet/minecraft/class_3620; field_15984 BLUE - f Lnet/minecraft/class_3620; field_16029 PURPLE_TERRACOTTA - f Lnet/minecraft/class_3620; field_15976 CLAY - f Lnet/minecraft/class_3620; field_15985 MAGENTA_TERRACOTTA - f Lnet/minecraft/class_3620; field_15999 GRASS - f Lnet/minecraft/class_3620; field_15993 LIGHT_GRAY - f Lnet/minecraft/class_3620; field_25707 WARPED_HYPHAE - f Lnet/minecraft/class_3620; field_16016 ICE - f Lnet/minecraft/class_3620; field_25703 CRIMSON_STEM - f Lnet/minecraft/class_3620; field_25705 WARPED_NYLIUM - f Lnet/minecraft/class_3620; field_16013 YELLOW_TERRACOTTA - f Lnet/minecraft/class_3620; field_15979 WOOL - f Lnet/minecraft/class_3620; field_16014 PURPLE - f [Lnet/minecraft/class_3620; field_16006 COLORS - f Lnet/minecraft/class_3620; field_16001 EMERALD - f Lnet/minecraft/class_3620; field_16024 LIGHT_BLUE - f Lnet/minecraft/class_3620; field_25702 CRIMSON_NYLIUM - f Lnet/minecraft/class_3620; field_15978 GRAY - f Lnet/minecraft/class_3620; field_16012 NETHERRACK - f Lnet/minecraft/class_3620; field_15997 LIME - f Lnet/minecraft/class_3620; field_15996 WOOD - f Lnet/minecraft/class_3620; field_15995 GREEN - f Lnet/minecraft/class_3620; field_15992 BROWN_TERRACOTTA - f Lnet/minecraft/class_3620; field_16023 STONE - f Lnet/minecraft/class_3620; field_15983 DIAMOND - f Lnet/minecraft/class_3620; field_15987 ADOBE - f Lnet/minecraft/class_3620; field_16009 BLACK - f Lnet/minecraft/class_3620; field_15982 RED_TERRACOTTA - f Lnet/minecraft/class_3620; field_16027 GRAY_TERRACOTTA - f Lnet/minecraft/class_3620; field_16005 IRON - f I field_16011 colorValue - f Lnet/minecraft/class_3620; field_16015 BLUE_TERRACOTTA - f Lnet/minecraft/class_3620; field_16000 DIRT - f Lnet/minecraft/class_3620; field_15990 CYAN_TERRACOTTA - f Lnet/minecraft/class_3620; field_16022 SNOW - f Lnet/minecraft/class_3620; field_15991 LIGHT_BLUE_TERRACOTTA - f Lnet/minecraft/class_3620; field_15986 SAND - f Lnet/minecraft/class_3620; field_16026 CYAN - f Lnet/minecraft/class_3620; field_25706 WARPED_STEM - f Lnet/minecraft/class_3620; field_25708 WARPED_WART - f Lnet/minecraft/class_3620; field_15981 ORANGE_TERRACOTTA - f Lnet/minecraft/class_3620; field_16008 AIR - f Lnet/minecraft/class_3620; field_25704 CRIMSON_HYPHAE - f Lnet/minecraft/class_3620; field_16018 LIME_TERRACOTTA - f Lnet/minecraft/class_3620; field_16002 TNT -c net/minecraft/class_3614 net/minecraft/block/material/Material - m ()Lnet/minecraft/class_3619; method_15798 getPushReaction - m ()Z method_15801 blocksMovement - m ()Z method_15800 isReplaceable - m ()Z method_15797 isLiquid - m ()Lnet/minecraft/class_3620; method_15803 getColor - m ()Z method_15804 isOpaque - m ()Z method_15802 isFlammable - m ()Z method_15799 isSolid - f Lnet/minecraft/class_3614; field_15938 BAMBOO_SAPLING - f Lnet/minecraft/class_3614; field_15915 BUBBLE_COLUMN - f Lnet/minecraft/class_3614; field_15924 MISCELLANEOUS - f Z field_15929 isLiquid - f Z field_15950 replaceable - f Lnet/minecraft/class_3614; field_15931 WOOL - f Lnet/minecraft/class_3614; field_15948 SNOW - f Lnet/minecraft/class_3614; field_15956 TALL_PLANTS - f Z field_15940 blocksMovement - f Lnet/minecraft/class_3614; field_15954 GOURD - f Lnet/minecraft/class_3614; field_15935 PLANTS - f Lnet/minecraft/class_3614; field_22223 NETHER_WOOD - f Lnet/minecraft/class_3614; field_15926 SEA_GRASS - f Lnet/minecraft/class_3614; field_15937 CAKE - f Lnet/minecraft/class_3614; field_15917 SPONGE - f Lnet/minecraft/class_3614; field_15934 SNOW_BLOCK - f Lnet/minecraft/class_3614; field_15928 PACKED_ICE - f Lnet/minecraft/class_3614; field_15921 CORAL - f Lnet/minecraft/class_3614; field_15957 CARPET - f Lnet/minecraft/class_3614; field_15932 WOOD - f Lnet/minecraft/class_3614; field_15952 BARRIER - f Lnet/minecraft/class_3614; field_15927 STRUCTURE_VOID - f Lnet/minecraft/class_3614; field_15958 ICE - f Lnet/minecraft/class_3614; field_15918 REDSTONE_LIGHT - f Lnet/minecraft/class_3614; field_15923 LEAVES - f Lnet/minecraft/class_3614; field_15914 ROCK - f Lnet/minecraft/class_3614; field_15941 EARTH - f Lnet/minecraft/class_3614; field_15922 LAVA - f Z field_15911 isSolid - f Lnet/minecraft/class_3614; field_15920 WATER - f Z field_15939 isOpaque - f Lnet/minecraft/class_3614; field_15955 TNT - f Lnet/minecraft/class_3614; field_15943 FIRE - f Lnet/minecraft/class_3614; field_15946 BAMBOO - f Lnet/minecraft/class_3614; field_15930 DRAGON_EGG - f Lnet/minecraft/class_3614; field_15947 OCEAN_PLANT - f Z field_15951 flammable - f Lnet/minecraft/class_3619; field_15960 pushReaction - f Lnet/minecraft/class_3614; field_26708 NETHER_PLANTS - f Lnet/minecraft/class_3614; field_15949 ANVIL - f Lnet/minecraft/class_3614; field_15959 AIR - f Lnet/minecraft/class_3614; field_15916 SAND - f Lnet/minecraft/class_3614; field_15953 IRON - f Lnet/minecraft/class_3614; field_15933 PISTON - f Lnet/minecraft/class_3614; field_15919 PORTAL - f Lnet/minecraft/class_3614; field_17008 SHULKER - f Lnet/minecraft/class_3614; field_15942 GLASS - f Lnet/minecraft/class_3614; field_15913 WEB - f Lnet/minecraft/class_3614; field_15945 ORGANIC - f Lnet/minecraft/class_3620; field_15944 color - f Lnet/minecraft/class_3614; field_15925 CACTUS - f Lnet/minecraft/class_3614; field_15936 CLAY -c net/minecraft/class_3614$class_3615 net/minecraft/block/material/Material$Builder - m ()Lnet/minecraft/class_3614$class_3615; method_15809 pushDestroys - m ()Lnet/minecraft/class_3614$class_3615; method_15816 pushBlocks - m ()Lnet/minecraft/class_3614$class_3615; method_15815 replaceable - m ()Lnet/minecraft/class_3614$class_3615; method_15807 flammable - m ()Lnet/minecraft/class_3614$class_3615; method_15806 notSolid - m (Lnet/minecraft/class_3614$class_3615;)Lnet/minecraft/class_3614$class_3615; method_15808 access$000 - m ()Lnet/minecraft/class_3614; method_15813 build - m ()Lnet/minecraft/class_3614$class_3615; method_15811 doesNotBlockMovement - m ()Lnet/minecraft/class_3614$class_3615; method_15810 liquid - m ()Lnet/minecraft/class_3614$class_3615; method_15812 notOpaque - f Lnet/minecraft/class_3620; field_15961 color - f Z field_15962 isOpaque - f Z field_15963 isSolid - f Lnet/minecraft/class_3619; field_15968 pushReaction - f Z field_15967 canBurn - f Z field_15964 isReplaceable - f Z field_15965 isLiquid - f Z field_15969 blocksMovement -c net/minecraft/class_3619 net/minecraft/block/material/PushReaction - m ()[Lnet/minecraft/class_3619; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3619; valueOf valueOf - f Lnet/minecraft/class_3619; field_15974 NORMAL - f Lnet/minecraft/class_3619; field_15970 PUSH_ONLY - f [Lnet/minecraft/class_3619; field_15973 $VALUES - f Lnet/minecraft/class_3619; field_15975 IGNORE - f Lnet/minecraft/class_3619; field_15972 BLOCK - f Lnet/minecraft/class_3619; field_15971 DESTROY -c net/minecraft/class_3621 net/minecraft/fluid/WaterFluid -c net/minecraft/class_3621$class_3622 net/minecraft/fluid/WaterFluid$Flowing -c net/minecraft/class_3621$class_3623 net/minecraft/fluid/WaterFluid$Source -c net/minecraft/class_3627 net/minecraft/world/gen/area/IAreaFactory - m ()Lnet/minecraft/class_3625; make make -c net/minecraft/class_3625 net/minecraft/world/gen/area/IArea - m (II)I method_15825 getValue -c net/minecraft/class_3626 net/minecraft/world/gen/area/LazyArea - m ()I method_15827 getmaxCacheSize - f Lnet/minecraft/class_4; field_16035 pixelTransformer - f I field_16036 maxCacheSize - f Lit/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap; field_16038 cachedValues -c net/minecraft/class_3630 net/minecraft/world/gen/INoiseRandom - m ()Lnet/minecraft/class_3756; method_15835 getNoiseGenerator - m (I)I method_15834 random -c net/minecraft/class_3628 net/minecraft/world/gen/IExtendedNoiseRandom - m (Lnet/minecraft/class_4;Lnet/minecraft/class_3625;)Lnet/minecraft/class_3625; method_15832 makeArea - m (Lnet/minecraft/class_4;)Lnet/minecraft/class_3625; method_15831 makeArea - m (IIII)I method_16669 pickRandom - m (Lnet/minecraft/class_4;Lnet/minecraft/class_3625;Lnet/minecraft/class_3625;)Lnet/minecraft/class_3625; method_15828 makeArea - m (II)I method_16670 pickRandom - m (JJ)V method_15830 setPosition -c net/minecraft/class_3631 net/minecraft/world/gen/LazyAreaLayerContext - m (JJ)J method_22417 hash - m (Lnet/minecraft/class_4;Lnet/minecraft/class_3626;Lnet/minecraft/class_3626;)Lnet/minecraft/class_3626; method_15836 makeArea - m (Lnet/minecraft/class_4;)Lnet/minecraft/class_3626; method_15837 makeArea - m (Lnet/minecraft/class_4;Lnet/minecraft/class_3626;)Lnet/minecraft/class_3626; method_15838 makeArea - f J field_16729 positionSeed - f Lnet/minecraft/class_3756; field_16732 noise - f Lit/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap; field_16045 cache - f I field_16044 maxCacheSize - f J field_16730 seed -c net/minecraft/class_3632 net/minecraft/world/gen/layer/EdgeLayer -c net/minecraft/class_3632$class_3635 net/minecraft/world/gen/layer/EdgeLayer$Special - m ()[Lnet/minecraft/class_3632$class_3635; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3632$class_3635; valueOf valueOf - f Lnet/minecraft/class_3632$class_3635; field_16051 INSTANCE - f [Lnet/minecraft/class_3632$class_3635; field_16050 $VALUES -c net/minecraft/class_3632$class_3926 net/minecraft/world/gen/layer/EdgeLayer$CoolWarm - m ()[Lnet/minecraft/class_3632$class_3926; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3632$class_3926; valueOf valueOf - f Lnet/minecraft/class_3632$class_3926; field_17399 INSTANCE - f [Lnet/minecraft/class_3632$class_3926; field_17400 $VALUES -c net/minecraft/class_3632$class_3927 net/minecraft/world/gen/layer/EdgeLayer$HeatIce - m (Ljava/lang/String;)Lnet/minecraft/class_3632$class_3927; valueOf valueOf - m ()[Lnet/minecraft/class_3632$class_3927; values values - f Lnet/minecraft/class_3632$class_3927; field_17401 INSTANCE - f [Lnet/minecraft/class_3632$class_3927; field_17402 $VALUES -c net/minecraft/class_3636 net/minecraft/world/gen/layer/DeepOceanLayer - m ()[Lnet/minecraft/class_3636; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3636; valueOf valueOf - f Lnet/minecraft/class_3636; field_16052 INSTANCE - f [Lnet/minecraft/class_3636; field_16053 $VALUES -c net/minecraft/class_3637 net/minecraft/world/gen/layer/AddMushroomIslandLayer - m (Ljava/lang/String;)Lnet/minecraft/class_3637; valueOf valueOf - m ()[Lnet/minecraft/class_3637; values values - f Lnet/minecraft/class_3637; field_16055 INSTANCE - f [Lnet/minecraft/class_3637; field_16056 $VALUES -c net/minecraft/class_3638 net/minecraft/world/gen/layer/AddIslandLayer - m ()[Lnet/minecraft/class_3638; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3638; valueOf valueOf - f Lnet/minecraft/class_3638; field_16058 INSTANCE - f [Lnet/minecraft/class_3638; field_16057 $VALUES -c net/minecraft/class_3641 net/minecraft/world/gen/layer/EdgeBiomeLayer - m ([II)Z method_15841 func_242935_a - m ([IIIIIIII)Z method_15840 replaceBiomeEdge - m (Ljava/lang/String;)Lnet/minecraft/class_3641; valueOf valueOf - m ()[Lnet/minecraft/class_3641; values values - f Lnet/minecraft/class_3641; field_16091 INSTANCE - f [Lnet/minecraft/class_3641; field_16093 $VALUES -c net/minecraft/class_3639 net/minecraft/world/gen/layer/AddSnowLayer - m ()[Lnet/minecraft/class_3639; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3639; valueOf valueOf - f Lnet/minecraft/class_3639; field_16059 INSTANCE - f [Lnet/minecraft/class_3639; field_16060 $VALUES -c net/minecraft/class_3643 net/minecraft/world/gen/layer/IslandLayer - m (Ljava/lang/String;)Lnet/minecraft/class_3643; valueOf valueOf - m ()[Lnet/minecraft/class_3643; values values - f Lnet/minecraft/class_3643; field_16103 INSTANCE - f [Lnet/minecraft/class_3643; field_16104 $VALUES -c net/minecraft/class_3640 net/minecraft/world/gen/layer/BiomeLayer - f [I field_16082 field_202743_q - f [I field_16070 warmBiomes - f [I field_16064 field_202744_r - f [I field_16068 field_202746_t - f [I field_16062 field_202745_s - f [I field_16066 field_202747_u -c net/minecraft/class_3642 net/minecraft/world/gen/layer/Layer - m (Lnet/minecraft/class_2378;II)Lnet/minecraft/class_1959; method_16341 func_242936_a - f Lorg/apache/logging/log4j/Logger; field_16592 LOGGER - f Lnet/minecraft/class_3626; field_16516 field_215742_b -c net/minecraft/class_3644 net/minecraft/world/gen/layer/OceanLayer - m (Ljava/lang/String;)Lnet/minecraft/class_3644; valueOf valueOf - m ()[Lnet/minecraft/class_3644; values values - f Lnet/minecraft/class_3644; field_16105 INSTANCE - f [Lnet/minecraft/class_3644; field_16106 $VALUES -c net/minecraft/class_3645 net/minecraft/world/gen/layer/LayerUtil - m (JLnet/minecraft/class_3660;Lnet/minecraft/class_3627;ILjava/util/function/LongFunction;)Lnet/minecraft/class_3627; method_15848 repeat - m (JJ)Lnet/minecraft/class_3631; method_15849 func_227473_a_ - m (JZII)Lnet/minecraft/class_3642; method_15843 func_237215_a_ - m (I)Z method_15846 isShallowOcean - m (I)Z method_15845 isOcean - m (ZIILjava/util/function/LongFunction;)Lnet/minecraft/class_3627; method_15847 func_237216_a_ - m (II)Z method_15844 areBiomesSimilar - m (Lit/unimi/dsi/fastutil/ints/Int2IntOpenHashMap;Lnet/minecraft/class_3645$class_5503;I)V method_31117 func_242939_a - m (Lit/unimi/dsi/fastutil/ints/Int2IntOpenHashMap;)V method_31116 func_242938_a - f Lit/unimi/dsi/fastutil/ints/Int2IntMap; field_26709 field_242937_a -c net/minecraft/class_3645$class_5503 net/minecraft/world/gen/layer/LayerUtil$Type - m (Ljava/lang/String;)Lnet/minecraft/class_3645$class_5503; valueOf valueOf - m ()[Lnet/minecraft/class_3645$class_5503; values values - f Lnet/minecraft/class_3645$class_5503; field_26710 NONE - f Lnet/minecraft/class_3645$class_5503; field_26721 OCEAN - f Lnet/minecraft/class_3645$class_5503; field_26719 BEACH - f Lnet/minecraft/class_3645$class_5503; field_26720 FOREST - f Lnet/minecraft/class_3645$class_5503; field_26718 ICY - f Lnet/minecraft/class_3645$class_5503; field_26717 SAVANNA - f Lnet/minecraft/class_3645$class_5503; field_26715 BADLANDS_PLATEAU - f Lnet/minecraft/class_3645$class_5503; field_26716 PLAINS - f [Lnet/minecraft/class_3645$class_5503; field_26726 $VALUES - f Lnet/minecraft/class_3645$class_5503; field_26714 MESA - f Lnet/minecraft/class_3645$class_5503; field_26725 MUSHROOM - f Lnet/minecraft/class_3645$class_5503; field_26723 RIVER - f Lnet/minecraft/class_3645$class_5503; field_26713 JUNGLE - f Lnet/minecraft/class_3645$class_5503; field_26724 SWAMP - f Lnet/minecraft/class_3645$class_5503; field_26711 TAIGA - f Lnet/minecraft/class_3645$class_5503; field_26722 DESERT - f Lnet/minecraft/class_3645$class_5503; field_26712 EXTREME_HILLS -c net/minecraft/class_3646 net/minecraft/world/gen/layer/AddBambooForestLayer - m (Ljava/lang/String;)Lnet/minecraft/class_3646; valueOf valueOf - m ()[Lnet/minecraft/class_3646; values values - f Lnet/minecraft/class_3646; field_16120 INSTANCE - f [Lnet/minecraft/class_3646; field_16117 $VALUES -c net/minecraft/class_3647 net/minecraft/world/gen/layer/MixOceansLayer - m ()[Lnet/minecraft/class_3647; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3647; valueOf valueOf - f Lnet/minecraft/class_3647; field_16121 INSTANCE - f [Lnet/minecraft/class_3647; field_16122 $VALUES -c net/minecraft/class_3648 net/minecraft/world/gen/layer/HillsLayer - m (Ljava/lang/String;)Lnet/minecraft/class_3648; valueOf valueOf - m ()[Lnet/minecraft/class_3648; values values - m (Lit/unimi/dsi/fastutil/ints/Int2IntOpenHashMap;)V method_31118 func_242941_a - f Lit/unimi/dsi/fastutil/ints/Int2IntMap; field_26727 field_242940_c - f Lorg/apache/logging/log4j/Logger; field_16128 LOGGER - f Lnet/minecraft/class_3648; field_16134 INSTANCE - f [Lnet/minecraft/class_3648; field_16141 $VALUES -c net/minecraft/class_3649 net/minecraft/world/gen/layer/RareBiomeLayer - m ()[Lnet/minecraft/class_3649; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3649; valueOf valueOf - f [Lnet/minecraft/class_3649; field_16152 $VALUES - f Lnet/minecraft/class_3649; field_16155 INSTANCE -c net/minecraft/class_3651 net/minecraft/world/gen/layer/RemoveTooMuchOceanLayer - m (Ljava/lang/String;)Lnet/minecraft/class_3651; valueOf valueOf - m ()[Lnet/minecraft/class_3651; values values - f [Lnet/minecraft/class_3651; field_16159 $VALUES - f Lnet/minecraft/class_3651; field_16158 INSTANCE -c net/minecraft/class_3653 net/minecraft/world/gen/layer/RiverLayer - m (Ljava/lang/String;)Lnet/minecraft/class_3653; valueOf valueOf - m (I)I method_15850 riverFilter - m ()[Lnet/minecraft/class_3653; values values - f [Lnet/minecraft/class_3653; field_16169 $VALUES - f Lnet/minecraft/class_3653; field_16168 INSTANCE -c net/minecraft/class_3650 net/minecraft/world/gen/layer/StartRiverLayer - m ()[Lnet/minecraft/class_3650; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3650; valueOf valueOf - f [Lnet/minecraft/class_3650; field_16156 $VALUES - f Lnet/minecraft/class_3650; field_16157 INSTANCE -c net/minecraft/class_3655 net/minecraft/world/gen/layer/ShoreLayer - m (Ljava/lang/String;)Lnet/minecraft/class_3655; valueOf valueOf - m (I)Z method_15851 isJungleCompatible - m (I)Z method_15852 isMesa - m ()[Lnet/minecraft/class_3655; values values - f Lnet/minecraft/class_3655; field_16184 INSTANCE - f [Lnet/minecraft/class_3655; field_16179 $VALUES - f Lit/unimi/dsi/fastutil/ints/IntSet; field_26729 field_242943_c - f Lit/unimi/dsi/fastutil/ints/IntSet; field_26728 field_242942_b -c net/minecraft/class_3652 net/minecraft/world/gen/layer/MixRiverLayer - m ()[Lnet/minecraft/class_3652; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3652; valueOf valueOf - f [Lnet/minecraft/class_3652; field_16166 $VALUES - f Lnet/minecraft/class_3652; field_16161 INSTANCE -c net/minecraft/class_3656 net/minecraft/world/gen/layer/ZoomLayer - m (Ljava/lang/String;)Lnet/minecraft/class_3656; valueOf valueOf - m (Lnet/minecraft/class_3628;IIII)I method_15853 pickZoomed - m ()[Lnet/minecraft/class_3656; values values - f Lnet/minecraft/class_3656; field_16196 NORMAL - f Lnet/minecraft/class_3656; field_16198 FUZZY - f [Lnet/minecraft/class_3656; field_16197 $VALUES -c net/minecraft/class_3656$1 net/minecraft/world/gen/layer/ZoomLayer$1 -c net/minecraft/class_3654 net/minecraft/world/gen/layer/SmoothLayer - m ()[Lnet/minecraft/class_3654; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3654; valueOf valueOf - f [Lnet/minecraft/class_3654; field_16170 $VALUES - f Lnet/minecraft/class_3654; field_16171 INSTANCE -c net/minecraft/class_3658 net/minecraft/world/gen/layer/traits/IAreaTransformer0 - m (Lnet/minecraft/class_3628;)Lnet/minecraft/class_3625; method_15856 func_215734_b - m (Lnet/minecraft/class_3628;)Lnet/minecraft/class_3627; method_15854 apply - m (Lnet/minecraft/class_3630;II)I method_15855 apply - m (Lnet/minecraft/class_3628;II)I method_15857 func_202820_a -c net/minecraft/class_3659 net/minecraft/world/gen/layer/traits/IAreaTransformer2 - m (Lnet/minecraft/class_3628;Lnet/minecraft/class_3625;Lnet/minecraft/class_3625;II)I method_15858 func_215724_a - m (Lnet/minecraft/class_3630;Lnet/minecraft/class_3625;Lnet/minecraft/class_3625;II)I method_15861 apply - m (Lnet/minecraft/class_3628;Lnet/minecraft/class_3627;Lnet/minecraft/class_3627;)Lnet/minecraft/class_3627; method_15860 apply - m (Lnet/minecraft/class_3627;Lnet/minecraft/class_3627;Lnet/minecraft/class_3628;)Lnet/minecraft/class_3625; method_15859 func_215725_a -c net/minecraft/class_3660 net/minecraft/world/gen/layer/traits/IAreaTransformer1 - m (Lnet/minecraft/class_3628;Lnet/minecraft/class_3625;II)I method_15864 func_202711_b - m (Lnet/minecraft/class_3628;Lnet/minecraft/class_3627;)Lnet/minecraft/class_3627; method_15862 apply - m (Lnet/minecraft/class_3627;Lnet/minecraft/class_3628;)Lnet/minecraft/class_3625; method_15865 func_215726_a - m (Lnet/minecraft/class_3628;Lnet/minecraft/class_3625;II)I method_15863 apply -c net/minecraft/class_3661 net/minecraft/world/gen/layer/traits/IC0Transformer - m (Lnet/minecraft/class_3630;I)I method_15866 apply -c net/minecraft/class_3662 net/minecraft/world/gen/layer/traits/IBishopTransformer - m (Lnet/minecraft/class_3630;IIIII)I method_15867 apply -c net/minecraft/class_3663 net/minecraft/world/gen/layer/traits/ICastleTransformer - m (Lnet/minecraft/class_3630;IIIII)I method_15868 apply -c net/minecraft/class_3664 net/minecraft/world/gen/layer/traits/IC1Transformer - m (Lnet/minecraft/class_3630;I)I method_15869 apply -c net/minecraft/class_3739 net/minecraft/world/gen/layer/traits/IDimOffset1Transformer -c net/minecraft/class_3740 net/minecraft/world/gen/layer/traits/IDimOffset0Transformer -c net/minecraft/class_4 net/minecraft/world/gen/layer/traits/IPixelTransformer - m (II)I apply apply -c net/minecraft/class_3741 net/minecraft/world/gen/layer/traits/IDimTransformer - m (I)I method_16343 getOffsetZ - m (I)I method_16342 getOffsetX -c net/minecraft/class_7 net/minecraft/pathfinding/PathNodeType - m ()F method_11 getPriority - m (Ljava/lang/String;)Lnet/minecraft/class_7; valueOf valueOf - m ()[Lnet/minecraft/class_7; values values - f Lnet/minecraft/class_7; field_9 DANGER_FIRE - f Lnet/minecraft/class_7; field_21 RAIL - f Lnet/minecraft/class_7; field_25418 UNPASSABLE_RAIL - f Lnet/minecraft/class_7; field_4 WATER_BORDER - f Lnet/minecraft/class_7; field_18 WATER - f Lnet/minecraft/class_7; field_10 FENCE - f Lnet/minecraft/class_7; field_14 LAVA - f Lnet/minecraft/class_7; field_19 TRAPDOOR - f F field_13 priority - f Lnet/minecraft/class_7; field_26446 WALKABLE_DOOR - f Lnet/minecraft/class_7; field_7 OPEN - f Lnet/minecraft/class_7; field_21516 COCOA - f Lnet/minecraft/class_7; field_12 WALKABLE - f Lnet/minecraft/class_7; field_6 LEAVES - f Lnet/minecraft/class_7; field_22 BLOCKED - f Lnet/minecraft/class_7; field_21326 STICKY_HONEY - f Lnet/minecraft/class_7; field_16 BREACH - f [Lnet/minecraft/class_7; field_24 $VALUES - f Lnet/minecraft/class_7; field_8 DOOR_IRON_CLOSED - f Lnet/minecraft/class_7; field_15 DOOR_OPEN - f Lnet/minecraft/class_7; field_23 DOOR_WOOD_CLOSED - f Lnet/minecraft/class_7; field_17 DAMAGE_OTHER - f Lnet/minecraft/class_7; field_5 DANGER_OTHER - f Lnet/minecraft/class_7; field_20 DANGER_CACTUS - f Lnet/minecraft/class_7; field_11 DAMAGE_CACTUS - f Lnet/minecraft/class_7; field_3 DAMAGE_FIRE -c net/minecraft/class_5 net/minecraft/pathfinding/PathHeap - m (I)V method_7 sortForward - m ()Lnet/minecraft/class_9; method_6 dequeue - m (Lnet/minecraft/class_9;)Lnet/minecraft/class_9; method_2 addPoint - m (I)V method_4 sortBack - m (Lnet/minecraft/class_9;F)V method_3 changeDistance - m ()Z method_8 isPathEmpty - m ()V method_5 clearPath - f I field_2 count - f [Lnet/minecraft/class_9; field_1 pathPoints -c net/minecraft/class_9 net/minecraft/pathfinding/PathPoint - m (Lnet/minecraft/class_2338;)F method_21654 func_224758_c - m ()Z method_27 isAssigned - m (Lnet/minecraft/class_9;)F method_32 distanceToSquared - m (Lnet/minecraft/class_9;)F method_21653 func_224757_c - m (III)Lnet/minecraft/class_9; method_26 cloneMove - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_9; method_28 createFromBuffer - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_9;)F method_31 distanceTo - m ()Lnet/minecraft/class_2338; method_22879 func_224759_a - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m (III)I method_30 makeHash - f Z field_42 visited - f F field_36 totalPathDistance - f I field_37 index - f I field_38 z - f I field_44 hash - f I field_39 y - f I field_40 x - f Lnet/minecraft/class_7; field_41 nodeType - f F field_43 costMalus - f F field_46 field_222861_j - f F field_47 distanceToTarget - f Lnet/minecraft/class_9; field_35 previous - f F field_34 distanceToNext -c net/minecraft/class_6 net/minecraft/pathfinding/FlyingNodeProcessor - m (Lnet/minecraft/class_9;)Z method_22877 func_227476_a_ - m (Lnet/minecraft/class_9;)Z method_22878 func_227477_b_ - m (Lnet/minecraft/class_1308;III)Lnet/minecraft/class_7; method_9 getPathNodeType - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2338;)Lnet/minecraft/class_7; method_10 getPathNodeType -c net/minecraft/class_8 net/minecraft/pathfinding/NodeProcessor - m (Z)V method_15 setCanEnterDoors - m (DDD)Lnet/minecraft/class_4459; method_16 func_224768_a - m ([Lnet/minecraft/class_9;Lnet/minecraft/class_9;)I method_18 func_222859_a - m (IIII)Lnet/minecraft/class_9; method_18482 func_215743_a - m ()V method_19 postProcess - m (Lnet/minecraft/class_1922;IIILnet/minecraft/class_1308;IIIZZ)Lnet/minecraft/class_7; method_17 getPathNodeType - m (Lnet/minecraft/class_1950;Lnet/minecraft/class_1308;)V method_12 func_225578_a_ - m (Lnet/minecraft/class_1922;III)Lnet/minecraft/class_7; method_25 getPathNodeType - m (III)Lnet/minecraft/class_9; method_13 openPoint - m ()Z method_22 getCanSwim - m ()Lnet/minecraft/class_9; method_21 getStart - m (Z)V method_14 setCanSwim - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_9; method_27137 func_237223_a_ - m ()Z method_24 getCanOpenDoors - m ()Z method_23 getCanEnterDoors - m (Z)V method_20 setCanOpenDoors - f I field_28 entitySizeZ - f I field_30 entitySizeY - f Z field_25 canSwim - f I field_31 entitySizeX - f Lnet/minecraft/class_1308; field_33 entity - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_32 pointMap - f Z field_27 canOpenDoors - f Lnet/minecraft/class_1950; field_20622 blockaccess - f Z field_29 canEnterDoors -c net/minecraft/class_10 net/minecraft/pathfinding/PathType - m (Ljava/lang/String;)Lnet/minecraft/class_10; valueOf valueOf - m ()[Lnet/minecraft/class_10; values values - f Lnet/minecraft/class_10; field_50 LAND - f Lnet/minecraft/class_10; field_48 WATER - f [Lnet/minecraft/class_10; field_49 $VALUES - f Lnet/minecraft/class_10; field_51 AIR -c net/minecraft/class_11 net/minecraft/pathfinding/Path - m ()Lnet/minecraft/class_2338; method_31032 func_242948_g - m (Lnet/minecraft/class_11;)Z method_41 isSamePath - m (I)Lnet/minecraft/class_9; method_40 getPathPointFromIndex - m ()Lnet/minecraft/class_2338; method_48 getTarget - m ()Z method_21655 reachesTarget - m ()[Lnet/minecraft/class_9; method_22881 getClosedSet - m ()F method_21656 func_224769_l - m ()[Lnet/minecraft/class_9; method_22880 getOpenSet - m (Lnet/minecraft/class_1297;I)Lnet/minecraft/class_243; method_47 getVectorFromIndex - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_243; method_49 getPosition - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_11; method_34 read - m ()Z method_46 isFinished - m ()Lnet/minecraft/class_9; method_30850 func_242950_i - m ()Z method_30849 func_242945_b - m ()I method_39 getCurrentPathIndex - m ()Lnet/minecraft/class_9; method_29301 func_237225_h_ - m (I)Lnet/minecraft/class_2338; method_31031 func_242947_d - m ()V method_44 incrementPathIndex - m ()Ljava/lang/String; toString toString - m ()I method_38 getCurrentPathLength - m (I)V method_42 setCurrentPathIndex - m (ILnet/minecraft/class_9;)V method_33 setPoint - m (I)V method_36 setCurrentPathLength - m ()Lnet/minecraft/class_9; method_45 getFinalPathPoint - f I field_54 currentPathIndex - f Ljava/util/Set; field_20300 field_224772_d - f Ljava/util/List; field_52 points - f Z field_20303 field_224774_h - f [Lnet/minecraft/class_9; field_57 openSet - f [Lnet/minecraft/class_9; field_55 closedSet - f Lnet/minecraft/class_2338; field_20301 target - f F field_20302 field_224773_g -c net/minecraft/class_12 net/minecraft/pathfinding/SwimNodeProcessor - m (III)Lnet/minecraft/class_7; method_50 isFree - m (III)Lnet/minecraft/class_9; method_51 getWaterNode - f Z field_58 field_205202_j -c net/minecraft/class_13 net/minecraft/pathfinding/PathFinder - m (Lnet/minecraft/class_9;Ljava/util/Set;)F method_21658 func_224776_a - m (Ljava/util/Map;Lnet/minecraft/class_4459;)Lnet/minecraft/class_11; method_21661 func_224778_b_ - m (Lnet/minecraft/class_1950;Lnet/minecraft/class_1308;Ljava/util/Set;FIF)Lnet/minecraft/class_11; method_52 func_227478_a_ - m (Lnet/minecraft/class_9;Ljava/util/Map;FIF)Lnet/minecraft/class_11; method_54 func_227479_a_ - m (Ljava/util/Map;Lnet/minecraft/class_4459;)Lnet/minecraft/class_11; method_21660 func_224777_b - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_4459; method_21659 func_224782_a - m (Lnet/minecraft/class_9;Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_11; method_55 func_224780_a - f Lnet/minecraft/class_5; field_62 path - f I field_18708 field_215751_d - f [Lnet/minecraft/class_9; field_60 pathOptions - f Lnet/minecraft/class_8; field_61 nodeProcessor -c net/minecraft/class_15 net/minecraft/pathfinding/WalkAndSwimNodeProcessor - m (Lnet/minecraft/class_2338;)D method_66 func_203246_a - m (IIIID)Lnet/minecraft/class_9; method_65 func_203245_a - f F field_64 field_203248_l - f F field_65 field_203247_k -c net/minecraft/class_4459 net/minecraft/pathfinding/FlaggedPathPoint - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_4459; method_21663 func_224760_c - m ()V method_21665 func_224764_e - m ()Lnet/minecraft/class_9; method_21664 func_224763_d - m (FLnet/minecraft/class_9;)V method_21662 func_224761_a - f F field_20304 field_224765_m - f Lnet/minecraft/class_9; field_20305 field_224766_n - f Z field_20306 field_224767_o -c net/minecraft/class_14 net/minecraft/pathfinding/WalkNodeProcessor - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)D method_60 getGroundY - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338$class_2339;)Lnet/minecraft/class_7; method_23476 func_237231_a_ - m (Lnet/minecraft/class_2338;)Z method_27139 func_237239_b_ - m (Lnet/minecraft/class_9;Lnet/minecraft/class_9;Lnet/minecraft/class_9;Lnet/minecraft/class_9;)Z method_29579 func_222860_a - m (Lnet/minecraft/class_9;)Z method_29578 func_237234_a_ - m (IIIIDLnet/minecraft/class_2350;Lnet/minecraft/class_7;)Lnet/minecraft/class_9; method_62 getSafePoint - m (Lnet/minecraft/class_238;Lnet/minecraft/class_238;)Ljava/lang/Boolean; method_29305 func_237237_a_ - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2338;)Lnet/minecraft/class_7; method_63 getPathNodeType - m (Lnet/minecraft/class_2680;)Z method_27138 func_237233_a_ - m (Lnet/minecraft/class_238;)Z method_29304 func_237236_a_ - m (Lnet/minecraft/class_9;Lnet/minecraft/class_9;)Z method_20536 func_237235_a_ - m (Lnet/minecraft/class_1922;ZZLnet/minecraft/class_2338;Lnet/minecraft/class_7;)Lnet/minecraft/class_7; method_61 func_215744_a - m (Lnet/minecraft/class_1308;III)Lnet/minecraft/class_7; method_29303 func_237230_a_ - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_7; method_58 func_237238_b_ - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_7;)Lnet/minecraft/class_7; method_59 func_237232_a_ - m (Lnet/minecraft/class_1922;IIIIIIZZLjava/util/EnumSet;Lnet/minecraft/class_7;Lnet/minecraft/class_2338;)Lnet/minecraft/class_7; method_64 getPathNodeType - m (IIILnet/minecraft/class_1308;J)Lnet/minecraft/class_7; method_29302 func_237229_a_ - f Lit/unimi/dsi/fastutil/objects/Object2BooleanMap; field_25191 field_237227_l_ - f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_25190 field_237226_k_ - f F field_63 avoidsWater -c net/minecraft/class_5454 net/minecraft/block/PortalInfo - f Lnet/minecraft/class_243; field_25880 motion - f F field_25882 rotationPitch - f F field_25881 rotationYaw - f Lnet/minecraft/class_243; field_25879 pos -c net/minecraft/class_1946 net/minecraft/world/Teleporter - m (Lnet/minecraft/class_4156;)I method_22388 func_242959_c - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4156;)D method_22390 func_242954_a - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_30480 func_242953_a - m (Lnet/minecraft/class_2338;Z)Ljava/util/Optional; method_30483 getExistingPortal - m (Lnet/minecraft/class_4158;)Z method_22389 func_242952_a - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350$class_2351;)Ljava/util/Optional; method_30482 makePortal - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2350;I)Z method_30481 checkRegionForPlacement - m (Lnet/minecraft/class_4156;)Lnet/minecraft/class_5459$class_5460; method_30479 func_242951_a - m (Lnet/minecraft/class_4156;)Z method_31119 func_242958_b - f Lnet/minecraft/class_3218; field_9286 world -c net/minecraft/class_2424 net/minecraft/block/PortalSize - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_30493 func_242972_a - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350$class_2351;)Ljava/util/Optional; method_30485 func_242964_a - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_30492 func_242971_a - m (Lnet/minecraft/class_2338$class_2339;I)Z method_30491 func_242970_a - m (Lnet/minecraft/class_2680;)Z method_10359 canConnect - m ()Z method_10362 validatePortal - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)V method_30488 func_242967_a - m (Lnet/minecraft/class_2338$class_2339;)I method_30490 func_242969_a - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_30487 func_242966_a - m ()Z method_10360 isValid - m ()V method_10363 placePortalBlocks - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/function/Predicate;Lnet/minecraft/class_2350$class_2351;)Ljava/util/Optional; method_30486 func_242965_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5459$class_5460;Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_243;Lnet/minecraft/class_4048;Lnet/minecraft/class_243;FF)Lnet/minecraft/class_5454; method_30484 func_242963_a - m ()I method_30496 func_242975_e - m (Lnet/minecraft/class_2424;)Z method_30489 func_242968_a - m ()I method_30495 func_242974_d - m (Lnet/minecraft/class_5459$class_5460;Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_243;Lnet/minecraft/class_4048;)Lnet/minecraft/class_243; method_30494 func_242973_a - f I field_11312 height - f Lnet/minecraft/class_2350; field_11314 rightDir - f I field_11313 portalBlockCount - f Lnet/minecraft/class_2350$class_2351; field_11317 axis - f Lnet/minecraft/class_4970$class_4973; field_25883 POSITION_PREDICATE - f Lnet/minecraft/class_2338; field_11316 bottomLeft - f Lnet/minecraft/class_1936; field_11318 world - f I field_11311 width -c net/minecraft/class_18 net/minecraft/world/storage/WorldSavedData - m ()Z method_79 isDirty - m (Ljava/io/File;)V method_17919 save - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_75 write - m ()V method_80 markDirty - m ()Ljava/lang/String; method_76 getName - m (Z)V method_78 setDirty - m (Lnet/minecraft/class_2487;)V method_77 read - f Ljava/lang/String; field_71 name - f Lorg/apache/logging/log4j/Logger; field_17661 LOGGER - f Z field_72 dirty -c net/minecraft/class_16 net/minecraft/world/storage/WorldSavedDataCallableSave - m ()V run run - f Lnet/minecraft/class_18; field_66 data -c net/minecraft/class_20 net/minecraft/world/storage/MapDecoration - m ()Lnet/minecraft/class_20$class_21; method_93 getType - m ()Lnet/minecraft/class_2561; method_88 getCustomName - m ()B method_92 getImage - m ()I hashCode hashCode - m ()B method_90 getX - m ()Z method_94 renderOnFrame - m (Ljava/lang/Object;)Z equals equals - m ()B method_91 getY - m ()B method_89 getRotation - f B field_76 x - f Lnet/minecraft/class_20$class_21; field_77 type - f B field_80 y - f B field_79 rotation - f Lnet/minecraft/class_2561; field_78 customName -c net/minecraft/class_20$class_21 net/minecraft/world/storage/MapDecoration$Type - m ()I method_96 getMapColor - m (Ljava/lang/String;)Lnet/minecraft/class_20$class_21; valueOf valueOf - m ()Z method_95 isRenderedOnFrame - m ()Z method_97 hasMapColor - m (B)Lnet/minecraft/class_20$class_21; method_99 byIcon - m ()[Lnet/minecraft/class_20$class_21; values values - m ()B method_98 getIcon - f Lnet/minecraft/class_20$class_21; field_84 TARGET_X - f Lnet/minecraft/class_20$class_21; field_103 BANNER_BLACK - f Lnet/minecraft/class_20$class_21; field_86 PLAYER_OFF_MAP - f Lnet/minecraft/class_20$class_21; field_85 TARGET_POINT - f B field_81 icon - f Lnet/minecraft/class_20$class_21; field_87 PLAYER_OFF_LIMITS - f Lnet/minecraft/class_20$class_21; field_88 MANSION - f Lnet/minecraft/class_20$class_21; field_96 BANNER_WHITE - f I field_82 mapColor - f Lnet/minecraft/class_20$class_21; field_98 MONUMENT - f Lnet/minecraft/class_20$class_21; field_92 BANNER_ORANGE - f Lnet/minecraft/class_20$class_21; field_110 RED_X - f Lnet/minecraft/class_20$class_21; field_97 BANNER_MAGENTA - f Lnet/minecraft/class_20$class_21; field_93 BANNER_YELLOW - f Lnet/minecraft/class_20$class_21; field_90 BANNER_LIGHT_BLUE - f Lnet/minecraft/class_20$class_21; field_94 BANNER_LIME - f Z field_111 renderedOnFrame - f Lnet/minecraft/class_20$class_21; field_100 BANNER_PINK - f Lnet/minecraft/class_20$class_21; field_107 BANNER_LIGHT_GRAY - f [Lnet/minecraft/class_20$class_21; field_109 $VALUES - f Lnet/minecraft/class_20$class_21; field_101 BANNER_GRAY - f Lnet/minecraft/class_20$class_21; field_108 BANNER_CYAN - f Lnet/minecraft/class_20$class_21; field_104 BANNER_PURPLE - f Lnet/minecraft/class_20$class_21; field_106 BANNER_BROWN - f Lnet/minecraft/class_20$class_21; field_91 PLAYER - f Lnet/minecraft/class_20$class_21; field_105 BANNER_BLUE - f Lnet/minecraft/class_20$class_21; field_89 RED_MARKER - f Lnet/minecraft/class_20$class_21; field_102 BANNER_GREEN - f Lnet/minecraft/class_20$class_21; field_95 FRAME - f Lnet/minecraft/class_20$class_21; field_83 BLUE_MARKER - f Lnet/minecraft/class_20$class_21; field_99 BANNER_RED -c net/minecraft/class_17 net/minecraft/world/storage/MapBanner - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_69 func_211446_b - m ()Lnet/minecraft/class_20$class_21; method_72 getDecorationType - m ()Ljava/lang/String; method_71 getMapDecorationId - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_17; method_73 fromWorld - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_17; method_67 read - m ()Lnet/minecraft/class_2338; method_70 getPos - m ()I hashCode hashCode - m ()Lnet/minecraft/class_2487; method_74 write - m (Ljava/lang/Object;)Z equals equals - m ()Lnet/minecraft/class_2561; method_68 getName - f Lnet/minecraft/class_1767; field_68 color - f Lnet/minecraft/class_2561; field_67 name - f Lnet/minecraft/class_2338; field_69 pos -c net/minecraft/class_17$1 net/minecraft/world/storage/MapBanner$1 - f [I field_70 field_204298_a -c net/minecraft/class_3978 net/minecraft/world/storage/MapIdTracker - m ()I method_17920 getNextId - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_17662 usedIds -c net/minecraft/class_19 net/minecraft/world/storage/MapFrame - m ()Ljava/lang/String; method_82 getFrameName - m ()Lnet/minecraft/class_2487; method_84 write - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_19; method_87 read - m ()I method_83 getRotation - m ()I method_85 getEntityId - m ()Lnet/minecraft/class_2338; method_86 getPos - m (Lnet/minecraft/class_2338;)Ljava/lang/String; method_81 getFrameNameWithPos - f I field_74 rotation - f I field_73 entityId - f Lnet/minecraft/class_2338; field_75 pos -c net/minecraft/class_22 net/minecraft/world/storage/MapData - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;Ljava/lang/String;Lnet/minecraft/class_20$class_21;)V method_110 addTargetDecoration - m (Lnet/minecraft/class_2338;I)V method_104 removeItemFrame - m (Lnet/minecraft/class_22;)V method_18818 copyFrom - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)V method_102 updateVisiblePlayers - m (DDI)V method_106 calculateMapCenter - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_108 tryAddBanner - m (II)V method_103 updateMapData - m (Lnet/minecraft/class_20$class_21;Lnet/minecraft/class_1936;Ljava/lang/String;DDDLnet/minecraft/class_2561;)V method_107 updateDecorations - m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_22$class_23; method_101 getMapInfo - m (IIIZZLnet/minecraft/class_5321;)V method_105 initData - m (Lnet/minecraft/class_1922;II)V method_109 removeStaleBanners - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_29008 func_237242_a_ - m (Lnet/minecraft/class_2487;)Ljava/lang/IllegalArgumentException; method_29009 func_237243_c_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1922;Lnet/minecraft/class_1657;)Lnet/minecraft/class_2596; method_100 getMapPacket - f Z field_114 trackingPosition - f Z field_113 unlimitedTracking - f Z field_17403 locked - f Lorg/apache/logging/log4j/Logger; field_25019 LOGGER - f Ljava/util/List; field_112 playersArrayList - f Ljava/util/Map; field_117 mapDecorations - f I field_116 xCenter - f Ljava/util/Map; field_123 banners - f I field_115 zCenter - f Ljava/util/Map; field_120 playersHashMap - f B field_119 scale - f Ljava/util/Map; field_121 frames - f [B field_122 colors - f Lnet/minecraft/class_5321; field_118 dimension -c net/minecraft/class_22$class_23 net/minecraft/world/storage/MapData$MapInfo - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2596; method_112 getPacket - m (II)V method_111 update - f I field_131 step - f I field_127 maxX - f I field_128 minY - f Lnet/minecraft/class_1657; field_125 player - f I field_129 minX - f Z field_130 isDirty - f I field_124 tick - f Lnet/minecraft/class_22; field_132 field_176107_c - f I field_126 maxY -c net/minecraft/class_4565 net/minecraft/world/storage/CommandStorage - m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4565$class_4566; method_22544 createContainer - m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4565$class_4566; method_22548 func_227490_b_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2487; method_22546 getData - m (Ljava/util/Map$Entry;)Ljava/util/stream/Stream; method_22545 func_227487_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_22543 prefixStorageNamespace - m ()Ljava/util/stream/Stream; method_22542 getSavedDataKeys - m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4565$class_4566; method_22549 func_227491_c_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2487;)V method_22547 setData - f Lnet/minecraft/class_26; field_20748 manager - f Ljava/util/Map; field_20747 loadedContainers -c net/minecraft/class_4565$class_4566 net/minecraft/world/storage/CommandStorage$Container - m (Ljava/lang/String;)Lnet/minecraft/class_2487; method_22550 getData - m (Ljava/lang/String;)Ljava/util/stream/Stream; method_22554 getSavedKeys - m (Ljava/lang/String;Lnet/minecraft/class_2487;)V method_22552 setData - m (Lnet/minecraft/class_2487;Ljava/lang/String;Lnet/minecraft/class_2487;)V method_22553 func_227496_a_ - m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_2960; method_22551 func_227494_a_ - f Ljava/util/Map; field_20749 contents -c net/minecraft/class_26 net/minecraft/world/storage/DimensionSavedDataManager - m (Ljava/util/function/Supplier;Ljava/lang/String;)Lnet/minecraft/class_18; method_120 loadSavedData - m (Ljava/util/function/Supplier;Ljava/lang/String;)Lnet/minecraft/class_18; method_20786 get - m (Ljava/lang/String;)Ljava/io/File; method_17922 getDataFile - m (Ljava/io/PushbackInputStream;)Z method_17921 isCompressed - m (Lnet/minecraft/class_18;)V method_123 set - m (Ljava/lang/String;I)Lnet/minecraft/class_2487; method_17923 load - m ()V method_125 save - m (Ljava/util/function/Supplier;Ljava/lang/String;)Lnet/minecraft/class_18; method_17924 getOrCreate - f Ljava/util/Map; field_134 savedDatum - f Lcom/mojang/datafixers/DataFixer; field_17663 dataFixer - f Lorg/apache/logging/log4j/Logger; field_136 LOGGER - f Ljava/io/File; field_17664 folder -c net/minecraft/class_27 net/minecraft/world/storage/DerivedWorldInfo - f Lnet/minecraft/class_5268; field_139 delegate - f Lnet/minecraft/class_5219; field_24179 configuration -c net/minecraft/class_5217 net/minecraft/world/storage/IWorldInfo - m ()Z method_197 isDifficultyLocked - m ()J method_188 getGameTime - m ()Z method_156 isRaining - m (Lnet/minecraft/class_129;)V method_151 addToCrashReport - m ()J method_217 getDayTime - m ()Z method_152 isHardcore - m (Z)V method_157 setRaining - m ()Ljava/lang/String; method_27411 func_210211_Z - m ()Lnet/minecraft/class_1267; method_207 getDifficulty - m ()Ljava/lang/String; method_27410 func_210215_Y - m ()I method_215 getSpawnX - m ()I method_144 getSpawnY - m ()Lnet/minecraft/class_1928; method_146 getGameRulesInstance - m ()F method_30656 getSpawnAngle - m ()I method_166 getSpawnZ - m ()Z method_203 isThundering -c net/minecraft/class_33 net/minecraft/client/AnvilConverterException -c net/minecraft/class_5218 net/minecraft/world/storage/FolderName - m ()Ljava/lang/String; toString toString - m ()Ljava/lang/String; method_27423 getFileName - f Lnet/minecraft/class_5218; field_24183 PLAYERS - f Ljava/lang/String; field_24189 fileName - f Lnet/minecraft/class_5218; field_24188 DOT - f Lnet/minecraft/class_5218; field_24187 RESOURCES_ZIP - f Lnet/minecraft/class_5218; field_24182 PLAYERDATA - f Lnet/minecraft/class_5218; field_24181 STATS - f Lnet/minecraft/class_5218; field_24186 DATAPACKS - f Lnet/minecraft/class_5218; field_24185 GENERATED - f Lnet/minecraft/class_5218; field_24180 ADVANCEMENTS - f Lnet/minecraft/class_5218; field_24184 LEVEL_DAT -c net/minecraft/class_34 net/minecraft/world/storage/WorldSummary - m ()Z method_257 isHardcoreModeEnabled - m ()Z method_259 getCheatsEnabled - m ()Ljava/lang/String; method_252 getDisplayName - m ()J method_249 getLastTimePlayed - m ()Ljava/lang/String; method_248 getFileName - m ()Ljava/io/File; method_27020 getIconFile - m ()Lnet/minecraft/class_2561; method_27430 createDescription - m ()Lnet/minecraft/class_2561; method_27429 getDescription - m ()Z method_256 markVersionInList - m ()Z method_260 askToOpenWorld - m (Lnet/minecraft/class_34;)I method_251 compareTo - m ()Z method_254 askToCreateBackup - m ()Z method_27021 isLocked - m ()Lnet/minecraft/class_5250; method_258 getVersionName - m ()Z method_255 requiresConversion - m ()Lnet/minecraft/class_1934; method_247 getEnumGameType - m ()Lnet/minecraft/class_5315; method_29586 getVersionData - m (Ljava/lang/Object;)I compareTo compareTo - f Lnet/minecraft/class_5315; field_25023 versionData - f Lnet/minecraft/class_2561; field_24191 description - f Ljava/lang/String; field_205 fileName - f Z field_209 requiresConversion - f Z field_23772 locked - f Ljava/io/File; field_23773 iconFile - f Lnet/minecraft/class_1940; field_25022 settings -c net/minecraft/class_32 net/minecraft/world/storage/SaveFormat - m (Ljava/io/File;Lcom/mojang/datafixers/DataFixer;)Lnet/minecraft/class_5359; method_29013 func_237265_a_ - m ()I method_17931 getStorageVersionId - m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_5285; method_31120 func_242978_b - m (Ljava/io/File;Z)Ljava/util/function/BiFunction; method_29014 readWorldSummary - m (Lnet/minecraft/class_32;)I method_27001 func_237273_c_ - m (Ljava/lang/String;)Z method_230 canLoadWorld - m (Ljava/lang/String;)Z method_240 isNewLevelIdAcceptable - m (Lnet/minecraft/class_32;Ljava/io/File;Ljava/util/function/BiFunction;)Ljava/lang/Object; method_29011 func_237263_a_ - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5359;Ljava/io/File;Lcom/mojang/datafixers/DataFixer;)Lnet/minecraft/class_31; method_29582 func_242976_a - m ()Ljava/time/format/DateTimeFormatter; method_27004 func_237276_f_ - m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_5359; method_29580 decodeDatapackCodec - m (Ljava/nio/file/Path;)Lnet/minecraft/class_32; method_26999 create - m ()Ljava/util/List; method_235 getSaveList - m ()Lorg/apache/logging/log4j/Logger; method_27003 func_237275_e_ - m (Lnet/minecraft/class_32;Ljava/io/File;Z)Ljava/util/function/BiFunction; method_29012 func_237264_a_ - m (Ljava/io/File;Lcom/mojang/datafixers/DataFixer;)Lnet/minecraft/class_5359; method_29583 readWorldDatapackCodec - m (Ljava/io/File;Ljava/util/function/BiFunction;)Ljava/lang/Object; method_26998 readFromLevelData - m ()Ljava/lang/IllegalStateException; method_31121 func_242979_h - m ()Ljava/lang/IllegalStateException; method_31122 func_242980_i - m ()Ljava/nio/file/Path; method_236 getBackupsFolder - m ()Ljava/lang/IllegalStateException; method_31123 func_242981_j - m (Lnet/minecraft/class_32;)Ljava/nio/file/Path; method_26996 func_237262_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_32$class_5143; method_27002 getLevelSave - m ()Ljava/nio/file/Path; method_19636 getSavesDir - m (Lnet/minecraft/class_32;)Lcom/mojang/datafixers/DataFixer; method_27000 func_237271_b_ - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5359;)Ljava/util/function/BiFunction; method_29581 func_237260_a_ - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5359;)Ljava/util/function/BiFunction; method_17926 readServerWorldInfo - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/DataFixer;I)Lcom/mojang/datafixers/util/Pair; method_29010 getSettingLifecyclePair - m (Ljava/io/File;ZLjava/io/File;Lcom/mojang/datafixers/DataFixer;)Lnet/minecraft/class_34; method_29015 func_242977_a - f Ljava/time/format/DateTimeFormatter; field_200 BACKUP_DATE_FORMAT - f Lcom/google/common/collect/ImmutableList; field_25020 WORLD_GEN_SETTING_STRINGS - f Lorg/apache/logging/log4j/Logger; field_17665 LOGGER - f Lcom/mojang/datafixers/DataFixer; field_17668 dataFixer - f Ljava/nio/file/Path; field_17666 savesDir - f Ljava/nio/file/Path; field_17667 backupsDir -c net/minecraft/class_32$class_5143 net/minecraft/world/storage/SaveFormat$LevelSave - m (Ljava/lang/String;)V method_27008 updateSaveName - m (Lnet/minecraft/class_3536;)Z method_27006 convertRegions - m ()Z method_27012 isSaveFormatOutdated - m (Ljava/io/File;Lcom/mojang/datafixers/DataFixer;)Lnet/minecraft/class_5359; method_29018 func_237289_a_ - m ()J method_27016 createBackup - m ()Lnet/minecraft/class_34; method_29584 readWorldSummary - m ()Lnet/minecraft/class_5359; method_29585 readDatapackCodec - m ()V method_27017 validateSaveDirLock - m (Lnet/minecraft/class_32$class_5143;)Ljava/nio/file/Path; method_27007 func_237286_a_ - m ()V method_27015 deleteSave - m ()Ljava/io/File; method_27014 getIconFile - m (Lnet/minecraft/class_5321;)Ljava/io/File; method_27424 getDimensionFolder - m ()Lnet/minecraft/class_29; method_27427 getPlayerDataManager - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_5219;Lnet/minecraft/class_2487;)V method_27426 saveLevel - m ()Ljava/lang/String; method_27005 getSaveName - m (Lnet/minecraft/class_32$class_5143;)Lnet/minecraft/class_5125; method_27011 func_237294_b_ - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_5219;)V method_27425 saveLevel - m (Lnet/minecraft/class_5218;)Ljava/nio/file/Path; method_27428 func_237293_b_ - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5359;)Lnet/minecraft/class_5219; method_27013 readServerConfiguration - m (Lnet/minecraft/class_5218;)Ljava/nio/file/Path; method_27010 resolveFilePath - m ()V close close - f Ljava/nio/file/Path; field_23768 saveDir - f Ljava/util/Map; field_24190 localPathCache - f Lnet/minecraft/class_5125; field_23767 saveDirLockManager - f Lnet/minecraft/class_32; field_23766 field_237277_a_ - f Ljava/lang/String; field_23769 saveName -c net/minecraft/class_32$class_5143$1 net/minecraft/world/storage/SaveFormat$LevelSave$1 - m (Ljava/lang/Object;Ljava/io/IOException;)Ljava/nio/file/FileVisitResult; postVisitDirectory postVisitDirectory - m (Ljava/lang/Object;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult; visitFile visitFile - m (Ljava/nio/file/Path;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult; method_27019 visitFile - m (Ljava/nio/file/Path;Ljava/io/IOException;)Ljava/nio/file/FileVisitResult; method_27018 postVisitDirectory - f Lnet/minecraft/class_32$class_5143; field_23771 field_237303_b_ - f Ljava/nio/file/Path; field_23770 field_237302_a_ -c net/minecraft/class_32$class_5143$2 net/minecraft/world/storage/SaveFormat$LevelSave$2 - m (Ljava/lang/Object;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult; visitFile visitFile - m (Ljava/nio/file/Path;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult; method_246 visitFile - f Ljava/nio/file/Path; field_204 field_237304_a_ - f Ljava/util/zip/ZipOutputStream; field_201 field_237305_b_ - f Lnet/minecraft/class_32$class_5143; field_203 field_237306_c_ -c net/minecraft/class_24 net/minecraft/world/storage/AnvilSaveConverter - m (Ljava/io/File;Ljava/util/Collection;)V method_117 collectRegionFiles - m (Ljava/io/File;Ljava/lang/String;)Z method_114 func_215791_a - m (Lnet/minecraft/class_32$class_5143;)V method_118 backupLevelData - m (Lnet/minecraft/class_5455$class_5457;Ljava/io/File;Ljava/lang/Iterable;Lnet/minecraft/class_1966;IILnet/minecraft/class_3536;)V method_113 func_242983_a - m (Lnet/minecraft/class_5455$class_5457;Ljava/io/File;Ljava/io/File;Lnet/minecraft/class_1966;IILnet/minecraft/class_3536;)V method_116 func_242982_a - m (Lnet/minecraft/class_32$class_5143;Lnet/minecraft/class_3536;)Z method_234 convertRegions - f Lorg/apache/logging/log4j/Logger; field_133 LOGGER -c net/minecraft/class_5315 net/minecraft/world/storage/VersionData - m ()Z method_29027 isSnapshot - m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_5315; method_29023 getVersionData - m ()I method_29022 getStorageVersionID - m ()J method_29024 getLastPlayed - m ()Ljava/lang/String; method_29025 getName - m ()I method_29026 getID - f I field_25027 id - f Ljava/lang/String; field_25026 name - f Z field_25028 snapshot - f I field_25024 storageVersion - f J field_25025 lastPlayed -c net/minecraft/class_31 net/minecraft/world/storage/ServerWorldInfo - m (Lcom/mojang/serialization/Dynamic;)Ljava/util/stream/Stream; method_29032 func_237368_a_ - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_29587 func_237371_a_ - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_29030 func_237373_b_ - m ()V method_185 updatePlayerData - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2487;Lnet/minecraft/class_2487;)V method_158 serialize - m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_2520; method_29033 func_237372_b_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/class_2487;Lnet/minecraft/class_1940;Lnet/minecraft/class_5315;Lnet/minecraft/class_5285;Lcom/mojang/serialization/Lifecycle;)Lnet/minecraft/class_31; method_29029 decodeWorldInfo - f Lcom/mojang/serialization/Lifecycle; field_25426 lifecycle - f I field_192 rainTime - f Z field_172 dataFixed - f I field_173 thunderTime - f Lnet/minecraft/class_2487; field_170 loadedPlayerNBT - f Z field_21838 wasModded - f Z field_190 raining - f Z field_168 thundering - f Lnet/minecraft/class_5285; field_25425 generatorSettings - f Ljava/util/Set; field_21837 serverBrands - f I field_17736 wanderingTraderSpawnDelay - f Z field_185 initialized - f I field_151 spawnX - f I field_167 spawnY - f Lnet/minecraft/class_2487; field_25031 dragonFightNBT - f Z field_157 difficultyLocked - f F field_26367 spawnAngle - f I field_182 spawnZ - f Lnet/minecraft/class_236; field_191 schedueledEvents - f Lorg/apache/logging/log4j/Logger; field_25029 LOGGER - f J field_189 gameTime - f Lnet/minecraft/class_2487; field_156 customBossEventNBT - f J field_198 dayTime - f I field_196 version - f I field_17737 wanderingTraderSpawnChance - f Lnet/minecraft/class_1940; field_25030 worldSettings - f Lnet/minecraft/class_2784$class_5200; field_24193 borderSerializer - f Ljava/util/UUID; field_17738 wanderingTraderID - f I field_158 levelStorageVersion - f Lcom/mojang/datafixers/DataFixer; field_184 dataFixer - f I field_176 clearWeatherTime -c net/minecraft/class_29 net/minecraft/world/storage/PlayerData - m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_2487; method_261 loadPlayerData - m (Lnet/minecraft/class_1657;)V method_262 savePlayerData - m ()[Ljava/lang/String; method_263 getSeenPlayerUUIDs - f Lorg/apache/logging/log4j/Logger; field_149 LOGGER - f Lcom/mojang/datafixers/DataFixer; field_148 fixer - f Ljava/io/File; field_144 playerDataFolder -c net/minecraft/class_5219 net/minecraft/world/storage/IServerConfiguration - m (Lnet/minecraft/class_1267;)V method_208 setDifficulty - m ()Lnet/minecraft/class_2487; method_226 getHostPlayerNBT - m ()Lnet/minecraft/class_1928; method_146 getGameRulesInstance - m (I)Ljava/lang/String; method_27440 getStorageVersionName - m (Lnet/minecraft/class_2487;)V method_29037 setDragonFightData - m ()Ljava/lang/String; method_27438 func_237377_b_ - m (Ljava/lang/String;Z)V method_24285 addServerBranding - m ()Ljava/lang/String; method_27439 func_237378_c_ - m (Lnet/minecraft/class_129;)V method_151 addToCrashReport - m ()Ljava/lang/String; method_27436 func_237376_a_ - m (Lnet/minecraft/class_5359;)V method_29590 setDatapackCodec - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_163 serialize - m ()Lnet/minecraft/class_1267; method_207 getDifficulty - m ()Lnet/minecraft/class_1940; method_27433 getWorldSettings - m ()Lnet/minecraft/class_2487; method_29036 getDragonFightData - m ()Lnet/minecraft/class_5285; method_28057 getDimensionGeneratorSettings - m ()Lnet/minecraft/class_5359; method_29589 getDatapackCodec - m ()Z method_152 isHardcore - m ()Z method_194 areCommandsAllowed - m ()Lnet/minecraft/class_1934; method_210 getGameType - m ()Lnet/minecraft/class_2487; method_228 getCustomBossEventData - m (Z)V method_186 setDifficultyLocked - m (Lnet/minecraft/class_1934;)V method_193 setGameType - m ()Lnet/minecraft/class_5268; method_27859 getServerWorldInfo - m ()Z method_27431 isModded - m ()Ljava/util/Set; method_27432 getServerBranding - m (Lnet/minecraft/class_2487;)V method_221 setCustomBossEventData - m ()I method_168 getStorageVersionId - m ()Lcom/mojang/serialization/Lifecycle; method_29588 getLifecycle - m ()Z method_197 isDifficultyLocked - m ()Ljava/lang/String; method_150 getWorldName -c net/minecraft/class_5268 net/minecraft/world/storage/IServerWorldInfo - m ()Lnet/minecraft/class_236; method_143 getScheduledEvents - m (Lnet/minecraft/class_2784$class_5200;)V method_27415 setWorldBorderSerializer - m ()Z method_194 areCommandsAllowed - m ()I method_145 getThunderTime - m (Z)V method_223 setInitialized - m ()Z method_222 isInitialized - m ()I method_18038 getWanderingTraderSpawnDelay - m ()Ljava/lang/String; method_150 getWorldName - m ()I method_18039 getWanderingTraderSpawnChance - m (I)V method_167 setClearWeatherTime - m ()I method_190 getRainTime - m ()Ljava/lang/String; method_27856 func_237374_x_ - m (J)V method_29034 setGameTime - m ()Ljava/lang/String; method_27858 func_237375_y_ - m (J)V method_29035 setDayTime - m (I)V method_173 setThunderTime - m (Lnet/minecraft/class_1934;)V method_193 setGameType - m ()Lnet/minecraft/class_2784$class_5200; method_27422 getWorldBorderSerializer - m ()Lnet/minecraft/class_1934; method_210 getGameType - m (I)V method_164 setRainTime - m (I)V method_18041 setWanderingTraderSpawnDelay - m (Ljava/util/UUID;)V method_18040 setWanderingTraderID - m ()I method_155 getClearWeatherTime - m (Z)V method_147 setThundering - m (I)V method_18042 setWanderingTraderSpawnChance -c net/minecraft/class_40 net/minecraft/loot/BinomialRange - m (Lnet/minecraft/class_40;)F method_274 func_215839_b - m (Lnet/minecraft/class_40;)I method_272 func_215840_a - m (IF)Lnet/minecraft/class_40; method_273 of - f F field_917 p - f I field_918 n -c net/minecraft/class_40$class_41 net/minecraft/loot/BinomialRange$Serializer - m (Lnet/minecraft/class_40;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_276 serialize - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_40; method_275 deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize -c net/minecraft/class_5269 net/minecraft/world/storage/ISpawnWorldInfo - m (I)V method_27417 setSpawnY - m (F)V method_30657 setSpawnAngle - m (I)V method_27419 setSpawnZ - m (Lnet/minecraft/class_2338;F)V method_187 setSpawn - m (I)V method_27416 setSpawnX -c net/minecraft/class_44 net/minecraft/loot/ConstantRange - m (I)Lnet/minecraft/class_44; method_289 of - m (Lnet/minecraft/class_44;)I method_288 func_215834_a - f I field_922 value -c net/minecraft/class_44$class_45 net/minecraft/loot/ConstantRange$Serializer - m (Lnet/minecraft/class_44;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_290 serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_44; method_291 deserialize - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize -c net/minecraft/class_39 net/minecraft/loot/LootTables - m (Ljava/lang/String;)Lnet/minecraft/class_2960; method_269 register - m ()Ljava/util/Set; method_270 getReadOnlyLootTables - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_271 register - f Lnet/minecraft/class_2960; field_16216 GAMEPLAY_CAT_MORNING_GIFT - f Lnet/minecraft/class_2960; field_17009 CHESTS_VILLAGE_VILLAGE_ARMORER - f Lnet/minecraft/class_2960; field_814 ENTITIES_SHEEP_ORANGE - f Lnet/minecraft/class_2960; field_17012 CHESTS_VILLAGE_VILLAGE_BUTCHER - f Lnet/minecraft/class_2960; field_702 ENTITIES_SHEEP_LIME - f Lnet/minecraft/class_2960; field_854 GAMEPLAY_FISHING_TREASURE - f Lnet/minecraft/class_2960; field_17010 CHESTS_VILLAGE_VILLAGE_MASON - f Lnet/minecraft/class_2960; field_461 ENTITIES_SHEEP_LIGHT_BLUE - f Lnet/minecraft/class_2960; field_662 CHESTS_IGLOO_CHEST - f Lnet/minecraft/class_2960; field_18007 CHESTS_VILLAGE_VILLAGE_FISHER - f Lnet/minecraft/class_2960; field_878 ENTITIES_SHEEP_GRAY - f Lnet/minecraft/class_2960; field_19067 GAMEPLAY_HERO_OF_THE_VILLAGE_FISHERMAN_GIFT - f Lnet/minecraft/class_2960; field_803 CHESTS_JUNGLE_TEMPLE - f Lnet/minecraft/class_2960; field_19063 GAMEPLAY_HERO_OF_THE_VILLAGE_BUTCHER_GIFT - f Lnet/minecraft/class_2960; field_397 CHESTS_UNDERWATER_RUIN_SMALL - f Lnet/minecraft/class_2960; field_17109 CHESTS_VILLAGE_VILLAGE_TEMPLE - f Lnet/minecraft/class_2960; field_365 ENTITIES_SHEEP_CYAN - f Lnet/minecraft/class_2960; field_19065 GAMEPLAY_HERO_OF_THE_VILLAGE_CLERIC_GIFT - f Lnet/minecraft/class_2960; field_841 CHESTS_SHIPWRECK_MAP - f Lnet/minecraft/class_2960; field_285 ENTITIES_SHEEP_PURPLE - f Lnet/minecraft/class_2960; field_16749 CHESTS_VILLAGE_VILLAGE_TAIGA_HOUSE - f Lnet/minecraft/class_2960; field_19072 GAMEPLAY_HERO_OF_THE_VILLAGE_SHEPHERD_GIFT - f Lnet/minecraft/class_2960; field_615 CHESTS_NETHER_BRIDGE - f Lnet/minecraft/class_2960; field_19068 GAMEPLAY_HERO_OF_THE_VILLAGE_FLETCHER_GIFT - f Lnet/minecraft/class_2960; field_665 CHESTS_SHIPWRECK_TREASURE - f Lnet/minecraft/class_2960; field_16753 CHESTS_VILLAGE_VILLAGE_SAVANNA_HOUSE - f Lnet/minecraft/class_2960; field_19070 GAMEPLAY_HERO_OF_THE_VILLAGE_LIBRARIAN_GIFT - f Lnet/minecraft/class_2960; field_274 CHESTS_END_CITY_TREASURE - f Lnet/minecraft/class_2960; field_716 ENTITIES_SHEEP_RED - f Lnet/minecraft/class_2960; field_24048 BASTION_BRIDGE - f Lnet/minecraft/class_2960; field_800 CHESTS_STRONGHOLD_CROSSING - f Lnet/minecraft/class_2960; field_353 GAMEPLAY_FISHING - f Lnet/minecraft/class_2960; field_844 EMPTY - f Lnet/minecraft/class_2960; field_24046 BASTION_TREASURE - f Lnet/minecraft/class_2960; field_434 CHESTS_VILLAGE_VILLAGE_WEAPONSMITH - f Lnet/minecraft/class_2960; field_489 ENTITIES_SHEEP_BROWN - f Lnet/minecraft/class_2960; field_19074 GAMEPLAY_HERO_OF_THE_VILLAGE_WEAPONSMITH_GIFT - f Lnet/minecraft/class_2960; field_24050 RUINED_PORTAL - f Lnet/minecraft/class_2960; field_885 CHESTS_DESERT_PYRAMID - f Lnet/minecraft/class_2960; field_224 ENTITIES_SHEEP_MAGENTA - f Lnet/minecraft/class_2960; field_795 GAMEPLAY_FISHING_FISH - f Lnet/minecraft/class_2960; field_16751 CHESTS_VILLAGE_VILLAGE_CARTOGRAPHER - f Lnet/minecraft/class_2960; field_869 ENTITIES_SHEEP_WHITE - f Lnet/minecraft/class_2960; field_19062 GAMEPLAY_HERO_OF_THE_VILLAGE_ARMORER_GIFT - f Lnet/minecraft/class_2960; field_385 ENTITIES_SHEEP_YELLOW - f Lnet/minecraft/class_2960; field_266 GAMEPLAY_FISHING_JUNK - f Lnet/minecraft/class_2960; field_17011 CHESTS_VILLAGE_VILLAGE_SHEPHERD - f Lnet/minecraft/class_2960; field_16750 CHESTS_VILLAGE_VILLAGE_TANNERY - f Lnet/minecraft/class_2960; field_19066 GAMEPLAY_HERO_OF_THE_VILLAGE_FARMER_GIFT - f Lnet/minecraft/class_2960; field_629 ENTITIES_SHEEP_PINK - f Lnet/minecraft/class_2960; field_751 CHESTS_JUNGLE_TEMPLE_DISPENSER - f Lnet/minecraft/class_2960; field_17108 CHESTS_VILLAGE_VILLAGE_FLETCHER - f Lnet/minecraft/class_2960; field_300 CHESTS_UNDERWATER_RUIN_BIG - f Lnet/minecraft/class_2960; field_16752 CHESTS_VILLAGE_VILLAGE_DESERT_HOUSE - f Lnet/minecraft/class_2960; field_19064 GAMEPLAY_HERO_OF_THE_VILLAGE_CARTOGRAPHER_GIFT - f Lnet/minecraft/class_2960; field_806 ENTITIES_SHEEP_LIGHT_GRAY - f Lnet/minecraft/class_2960; field_484 CHESTS_WOODLAND_MANSION - f Lnet/minecraft/class_2960; field_16754 CHESTS_VILLAGE_VILLAGE_SNOWY_HOUSE - f Lnet/minecraft/class_2960; field_19071 GAMEPLAY_HERO_OF_THE_VILLAGE_MASON_GIFT - f Lnet/minecraft/class_2960; field_251 CHESTS_BURIED_TREASURE - f Lnet/minecraft/class_2960; field_16748 CHESTS_VILLAGE_VILLAGE_PLAINS_HOUSE - f Lnet/minecraft/class_2960; field_19073 GAMEPLAY_HERO_OF_THE_VILLAGE_TOOLSMITH_GIFT - f Lnet/minecraft/class_2960; field_16593 CHESTS_PILLAGER_OUTPOST - f Lnet/minecraft/class_2960; field_472 CHESTS_ABANDONED_MINESHAFT - f Lnet/minecraft/class_2960; field_19069 GAMEPLAY_HERO_OF_THE_VILLAGE_LEATHERWORKER_GIFT - f Ljava/util/Set; field_667 LOOT_TABLES - f Lnet/minecraft/class_2960; field_880 CHESTS_SHIPWRECK_SUPPLY - f Lnet/minecraft/class_2960; field_24047 BASTION_OTHER - f Lnet/minecraft/class_2960; field_683 CHESTS_STRONGHOLD_LIBRARY - f Lnet/minecraft/class_2960; field_850 CHESTS_SPAWN_BONUS_CHEST - f Lnet/minecraft/class_2960; field_778 ENTITIES_SHEEP_BLACK - f Ljava/util/Set; field_600 READ_ONLY_LOOT_TABLES - f Lnet/minecraft/class_2960; field_17107 CHESTS_VILLAGE_VILLAGE_TOOLSMITH - f Lnet/minecraft/class_2960; field_394 ENTITIES_SHEEP_BLUE - f Lnet/minecraft/class_2960; field_22402 PIGLIN_BARTERING - f Lnet/minecraft/class_2960; field_24049 BASTION_HOGLIN_STABLE - f Lnet/minecraft/class_2960; field_842 CHESTS_STRONGHOLD_CORRIDOR - f Lnet/minecraft/class_2960; field_356 CHESTS_SIMPLE_DUNGEON - f Lnet/minecraft/class_2960; field_607 ENTITIES_SHEEP_GREEN -c net/minecraft/class_5330 net/minecraft/loot/LootTypesManager - m (Lnet/minecraft/class_2378;Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Function;)Lnet/minecraft/class_5330$class_5331; method_29306 getLootTypeRegistryWrapper -c net/minecraft/class_5330$class_5333 net/minecraft/loot/LootTypesManager$Serializer - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - f Lnet/minecraft/class_2378; field_25197 registry - f Ljava/lang/String; field_25199 name - f Ljava/util/function/Function; field_25200 typeFunction - f Ljava/lang/String; field_25198 id - f Lcom/mojang/datafixers/util/Pair; field_25201 typeSerializer -c net/minecraft/class_5330$class_5332 net/minecraft/loot/LootTypesManager$ISerializer - m (Ljava/lang/Object;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_29309 serializer - m (Lcom/google/gson/JsonElement;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; method_29308 deserialize -c net/minecraft/class_5330$class_5331 net/minecraft/loot/LootTypesManager$LootTypeRegistryWrapper - m ()Ljava/lang/Object; method_29307 getSerializer - f Lcom/mojang/datafixers/util/Pair; field_25196 typeSerializer - f Ljava/util/function/Function; field_25195 typeFunction - f Lnet/minecraft/class_2378; field_25192 registry - f Ljava/lang/String; field_25194 name - f Ljava/lang/String; field_25193 id -c net/minecraft/class_5330$1 net/minecraft/loot/LootTypesManager$1 -c net/minecraft/class_5270 net/minecraft/loot/LootSerializers - m ()Lcom/google/gson/GsonBuilder; method_27862 func_237388_c_ - m ()Lcom/google/gson/GsonBuilder; method_27861 func_237387_b_ - m ()Lcom/google/gson/GsonBuilder; method_27860 func_237386_a_ -c net/minecraft/class_47 net/minecraft/loot/LootContext - m ()Lnet/minecraft/class_3218; method_299 getWorld - m ()Ljava/util/Random; method_294 getRandom - m (Lnet/minecraft/class_2960;Ljava/util/function/Consumer;)V method_297 generateDynamicDrop - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5341; method_22558 getLootCondition - m (Lnet/minecraft/class_52;)Z method_298 addLootTable - m (Lnet/minecraft/class_52;)V method_295 removeLootTable - m (Lnet/minecraft/class_5341;)Z method_22555 addCondition - m (Lnet/minecraft/class_5341;)V method_22557 removeCondition - m ()F method_302 getLuck - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_52; method_22556 getLootTable - m (Lnet/minecraft/class_169;)Z method_300 has - m (Lnet/minecraft/class_169;)Ljava/lang/Object; method_296 get - f Ljava/util/Set; field_20751 conditions - f Lnet/minecraft/class_3218; field_928 world - f Ljava/util/Set; field_927 lootTables - f Ljava/util/Random; field_923 random - f Ljava/util/function/Function; field_20750 field_227499_f_ - f Ljava/util/Map; field_925 parameters - f Ljava/util/function/Function; field_924 lootTableManager - f F field_926 luck - f Ljava/util/Map; field_929 field_216037_g -c net/minecraft/class_47$class_49 net/minecraft/loot/LootContext$IDynamicDropProvider - m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)V add add -c net/minecraft/class_47$class_48 net/minecraft/loot/LootContext$Builder - m (Lnet/minecraft/class_169;Ljava/lang/Object;)Lnet/minecraft/class_47$class_48; method_306 withNullableParameter - m (F)Lnet/minecraft/class_47$class_48; method_303 withLuck - m (Lnet/minecraft/class_169;)Ljava/lang/Object; method_308 assertPresent - m (Lnet/minecraft/class_169;)Ljava/lang/Object; method_305 get - m (Ljava/util/Random;)Lnet/minecraft/class_47$class_48; method_311 withRandom - m (Lnet/minecraft/class_176;)Lnet/minecraft/class_47; method_309 build - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_47$class_49;)Lnet/minecraft/class_47$class_48; method_307 withDynamicDrop - m (J)Lnet/minecraft/class_47$class_48; method_304 withSeed - m ()Lnet/minecraft/class_3218; method_313 getWorld - m (JLjava/util/Random;)Lnet/minecraft/class_47$class_48; method_310 withSeededRandom - m (Lnet/minecraft/class_169;Ljava/lang/Object;)Lnet/minecraft/class_47$class_48; method_312 withParameter - f Lnet/minecraft/class_3218; field_930 world - f Ljava/util/Random; field_934 rand - f Ljava/util/Map; field_933 field_216026_c - f Ljava/util/Map; field_932 lootParameters - f F field_931 luck -c net/minecraft/class_47$class_50 net/minecraft/loot/LootContext$EntityTarget - m (Lnet/minecraft/class_47$class_50;)Ljava/lang/String; method_316 func_216028_a - m ()Lnet/minecraft/class_169; method_315 getParameter - m (Ljava/lang/String;)Lnet/minecraft/class_47$class_50; method_314 fromString - m ()[Lnet/minecraft/class_47$class_50; values values - m (Ljava/lang/String;)Lnet/minecraft/class_47$class_50; valueOf valueOf - f Lnet/minecraft/class_47$class_50; field_937 KILLER_PLAYER - f Lnet/minecraft/class_47$class_50; field_936 KILLER - f Lnet/minecraft/class_47$class_50; field_939 DIRECT_KILLER - f Lnet/minecraft/class_47$class_50; field_935 THIS - f [Lnet/minecraft/class_47$class_50; field_940 $VALUES - f Ljava/lang/String; field_941 targetType - f Lnet/minecraft/class_169; field_938 parameter -c net/minecraft/class_47$class_50$class_51 net/minecraft/loot/LootContext$EntityTarget$Serializer - m (Lcom/google/gson/stream/JsonReader;)Lnet/minecraft/class_47$class_50; method_317 read - m (Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V write write - m (Lcom/google/gson/stream/JsonReader;)Ljava/lang/Object; read read - m (Lcom/google/gson/stream/JsonWriter;Lnet/minecraft/class_47$class_50;)V method_318 write -c net/minecraft/class_47$1 net/minecraft/loot/LootContext$1 -c net/minecraft/class_42 net/minecraft/loot/IntClamper - m (I)Lnet/minecraft/class_42; method_280 func_215848_a - m (I)I method_279 func_215845_c - m (I)Lnet/minecraft/class_42; method_277 func_215851_b - m (Lnet/minecraft/class_42;)Ljava/lang/Integer; method_285 func_215849_b - m (III)I method_284 func_215847_a - m (II)I method_278 func_215844_c - m (I)I applyAsInt applyAsInt - m (II)Lnet/minecraft/class_42; method_282 func_215843_a - m (Lnet/minecraft/class_42;)Ljava/lang/Integer; method_281 func_215850_a - m (II)I method_283 func_215846_b - f Ljava/util/function/IntUnaryOperator; field_919 field_215854_c - f Ljava/lang/Integer; field_921 field_215852_a - f Ljava/lang/Integer; field_920 field_215853_b -c net/minecraft/class_42$1 net/minecraft/loot/IntClamper$1 -c net/minecraft/class_42$class_43 net/minecraft/loot/IntClamper$Serializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_42; method_286 deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lnet/minecraft/class_42;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_287 serialize - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize -c net/minecraft/class_55 net/minecraft/loot/LootPool - m ()Lnet/minecraft/class_55$class_56; method_347 builder - m (Lnet/minecraft/class_55;)[Lnet/minecraft/class_5341; method_348 func_216094_d - m (Lnet/minecraft/class_47;Ljava/util/List;Lorg/apache/commons/lang3/mutable/MutableInt;Lnet/minecraft/class_82;)V method_342 func_216097_a - m (Lnet/minecraft/class_58;)V method_349 func_227505_a_ - m (Ljava/util/function/Consumer;Lnet/minecraft/class_47;)V method_345 generateRoll - m (Lnet/minecraft/class_55;)[Lnet/minecraft/class_117; method_344 func_216098_e - m (Ljava/util/function/Consumer;Lnet/minecraft/class_47;)V method_341 generate - m (Lnet/minecraft/class_55;)Lnet/minecraft/class_59; method_346 func_216092_a - m (Lnet/minecraft/class_55;)Lnet/minecraft/class_61; method_343 func_216100_c - m (Lnet/minecraft/class_55;)[Lnet/minecraft/class_79; method_350 func_216093_b - f [Lnet/minecraft/class_79; field_953 lootEntries - f Lnet/minecraft/class_61; field_958 bonusRolls - f Lnet/minecraft/class_59; field_957 rolls - f [Lnet/minecraft/class_117; field_956 functions - f Ljava/util/function/Predicate; field_955 combinedConditions - f Ljava/util/function/BiFunction; field_952 combinedFunctions - f [Lnet/minecraft/class_5341; field_954 conditions -c net/minecraft/class_55$1 net/minecraft/loot/LootPool$1 -c net/minecraft/class_55$class_57 net/minecraft/loot/LootPool$Serializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lnet/minecraft/class_55;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_357 serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_55; method_358 deserialize -c net/minecraft/class_55$class_56 net/minecraft/loot/LootPool$Builder - m ()Lnet/minecraft/class_55$class_56; method_354 cast - m (Lnet/minecraft/class_117$class_118;)Lnet/minecraft/class_55$class_56; method_353 acceptFunction - m ()Lnet/minecraft/class_55; method_355 build - m (Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_55$class_56; method_351 addEntry - m (Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_55$class_56; method_356 acceptCondition - m (Lnet/minecraft/class_59;)Lnet/minecraft/class_55$class_56; method_352 rolls - f Ljava/util/List; field_963 conditions - f Lnet/minecraft/class_59; field_959 rolls - f Lnet/minecraft/class_61; field_962 bonusRolls - f Ljava/util/List; field_960 entries - f Ljava/util/List; field_961 functions -c net/minecraft/class_46 net/minecraft/loot/IParameterized - m ()Ljava/util/Set; method_293 getRequiredParameters - m (Lnet/minecraft/class_58;)V method_292 func_225580_a_ -c net/minecraft/class_60 net/minecraft/loot/LootTableManager - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_52; method_367 getLootTableFromLocation - m ()Ljava/util/Set; method_370 getLootTableKeys - m (Lnet/minecraft/class_52;)Lcom/google/gson/JsonElement; method_372 toJson - m (Ljava/lang/String;Ljava/lang/String;)V method_368 func_215303_a - m (Ljava/util/Map;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_20712 apply - m (Lnet/minecraft/class_58;Lnet/minecraft/class_2960;Lnet/minecraft/class_52;)V method_369 validateLootTable - m (Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_2960;Lcom/google/gson/JsonElement;)V method_20711 func_237403_a_ - m (Lnet/minecraft/class_58;Lnet/minecraft/class_2960;Lnet/minecraft/class_52;)V method_373 func_227509_b_ - f Ljava/util/Map; field_970 registeredLootTables - f Lnet/minecraft/class_4567; field_20752 lootPredicateManager - f Lcom/google/gson/Gson; field_974 GSON_INSTANCE - f Lorg/apache/logging/log4j/Logger; field_975 LOGGER -c net/minecraft/class_52 net/minecraft/loot/LootTable - m (Lnet/minecraft/class_47;)Ljava/util/List; method_319 generate - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1799;)V method_331 func_216125_a - m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)V method_320 generate - m (Ljava/util/function/Consumer;)Ljava/util/function/Consumer; method_332 capStackSizes - m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)V method_328 recursiveGenerate - m (Lnet/minecraft/class_58;)V method_330 validate - m ()Lnet/minecraft/class_52$class_53; method_324 builder - m (Lnet/minecraft/class_52;)[Lnet/minecraft/class_55; method_326 func_216121_b - m ()Lorg/apache/logging/log4j/Logger; method_323 func_216115_c - m (Lnet/minecraft/class_52;)Lnet/minecraft/class_176; method_327 func_216123_a - m (Ljava/util/List;ILjava/util/Random;)V method_333 shuffleItems - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_47;)V method_329 fillInventory - m ()Lnet/minecraft/class_176; method_322 getParameterSet - m (Lnet/minecraft/class_52;)[Lnet/minecraft/class_117; method_325 func_216116_c - m (Lnet/minecraft/class_1263;Ljava/util/Random;)Ljava/util/List; method_321 getEmptySlotsRandomized - f [Lnet/minecraft/class_55; field_943 pools - f Ljava/util/function/BiFunction; field_945 combinedFunctions - f Lnet/minecraft/class_52; field_948 EMPTY_LOOT_TABLE - f [Lnet/minecraft/class_117; field_944 functions - f Lnet/minecraft/class_176; field_947 DEFAULT_PARAMETER_SET - f Lorg/apache/logging/log4j/Logger; field_946 LOGGER - f Lnet/minecraft/class_176; field_942 parameterSet -c net/minecraft/class_52$class_54 net/minecraft/loot/LootTable$Serializer - m (Lnet/minecraft/class_52;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_339 serialize - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_52; method_340 deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize -c net/minecraft/class_52$class_53 net/minecraft/loot/LootTable$Builder - m (Lnet/minecraft/class_176;)Lnet/minecraft/class_52$class_53; method_334 setParameterSet - m ()Lnet/minecraft/class_52; method_338 build - m (Lnet/minecraft/class_117$class_118;)Lnet/minecraft/class_52$class_53; method_335 acceptFunction - m ()Lnet/minecraft/class_52$class_53; method_337 cast - m (Lnet/minecraft/class_55$class_56;)Lnet/minecraft/class_52$class_53; method_336 addLootPool - f Ljava/util/List; field_949 lootPools - f Ljava/util/List; field_951 lootFunctions - f Lnet/minecraft/class_176; field_950 parameterSet -c net/minecraft/class_52$1 net/minecraft/loot/LootTable$1 -c net/minecraft/class_59 net/minecraft/loot/IRandomRange - m (Ljava/util/Random;)I method_366 generateInt - m ()Lnet/minecraft/class_2960; method_365 getType - f Lnet/minecraft/class_2960; field_967 UNIFORM - f Lnet/minecraft/class_2960; field_968 CONSTANT - f Lnet/minecraft/class_2960; field_969 BINOMIAL -c net/minecraft/class_4567 net/minecraft/loot/LootPredicateManager - m (Ljava/util/Map;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_22563 apply - m (Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_2960;Lcom/google/gson/JsonElement;)V method_22560 func_237404_a_ - m (Ljava/lang/String;Ljava/lang/String;)V method_22562 func_227516_a_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_52; method_22566 func_227518_b_ - m (Lnet/minecraft/class_58;Lnet/minecraft/class_2960;Lnet/minecraft/class_5341;)V method_22561 func_227515_a_ - m ()Ljava/util/Set; method_22559 func_227513_a_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5341; method_22564 func_227517_a_ - f Lcom/google/gson/Gson; field_20754 field_227511_b_ - f Lorg/apache/logging/log4j/Logger; field_20753 field_227510_a_ - f Ljava/util/Map; field_20755 field_227512_c_ -c net/minecraft/class_4567$class_5334 net/minecraft/loot/LootPredicateManager$AndCombiner - m (Lnet/minecraft/class_47;)Z method_29311 test - m (Ljava/lang/Object;)Z test test - f Ljava/util/function/Predicate; field_25203 field_237406_b_ - f [Lnet/minecraft/class_5341; field_25202 field_237405_a_ -c net/minecraft/class_4567$1 net/minecraft/loot/LootPredicateManager$1 -c net/minecraft/class_63 net/minecraft/loot/RandomRanges - m (Lcom/google/gson/JsonElement;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_59; method_383 deserialize - m (Lnet/minecraft/class_59;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_384 serialize - f Ljava/util/Map; field_978 GENERATOR_MAP -c net/minecraft/class_5335 net/minecraft/loot/ILootSerializer - m (Lcom/google/gson/JsonObject;Ljava/lang/Object;Lcom/google/gson/JsonSerializationContext;)V method_516 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; method_517 deserialize -c net/minecraft/class_61 net/minecraft/loot/RandomValueRange - m (I)Z method_376 isInRange - m ()F method_380 getMax - m (Ljava/util/Random;)F method_374 generateFloat - m (FF)Lnet/minecraft/class_61; method_377 of - m (Lnet/minecraft/class_61;)F method_379 access$000 - m (Lnet/minecraft/class_61;)F method_375 access$100 - m ()F method_378 getMin - f F field_977 min - f F field_976 max -c net/minecraft/class_61$class_62 net/minecraft/loot/RandomValueRange$Serializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_61; method_381 deserialize - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lnet/minecraft/class_61;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_382 serialize -c net/minecraft/class_58 net/minecraft/loot/ValidationTracker - m (Ljava/lang/String;)Ljava/lang/String; method_363 func_227542_e_ - m (Lnet/minecraft/class_2960;)Z method_22572 func_227536_b_ - m (Lnet/minecraft/class_176;)Lnet/minecraft/class_58; method_22568 func_227529_a_ - m (Lnet/minecraft/class_2960;)Z method_22570 func_227532_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_22575 func_227540_d_ - m ()Lcom/google/common/collect/Multimap; method_361 getProblems - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5341; method_22576 func_227541_d_ - m (Ljava/lang/String;)Ljava/lang/String; method_22573 func_227538_c_ - m (Ljava/lang/String;Lnet/minecraft/class_2960;)Lnet/minecraft/class_58; method_22571 func_227535_b_ - m (Ljava/lang/String;Lnet/minecraft/class_2960;)Lnet/minecraft/class_58; method_22569 func_227531_a_ - m ()Ljava/lang/String; method_362 func_227537_c_ - m ()Ljava/lang/String; method_359 func_227533_b_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_52; method_22574 func_227539_c_ - m (Lnet/minecraft/class_46;)V method_22567 func_227528_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_58; method_364 func_227534_b_ - m (Ljava/lang/String;)V method_360 addProblem - f Ljava/util/function/Function; field_20757 field_227522_d_ - f Lnet/minecraft/class_176; field_20756 field_227521_c_ - f Ljava/util/Set; field_20760 field_227525_g_ - f Ljava/util/Set; field_20758 field_227523_e_ - f Ljava/util/function/Function; field_20759 field_227524_f_ - f Ljava/lang/String; field_964 field_227526_h_ - f Ljava/util/function/Supplier; field_966 field_227520_b_ - f Lcom/google/common/collect/Multimap; field_965 field_227519_a_ -c net/minecraft/class_5336 net/minecraft/loot/LootType - m ()Lnet/minecraft/class_5335; method_29312 getSerializer - f Lnet/minecraft/class_5335; field_25204 serializer -c net/minecraft/class_64 net/minecraft/loot/ILootEntry - m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z expand expand - m (Lnet/minecraft/class_64;)Lnet/minecraft/class_64; method_385 alternate - m (Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_16779 func_216137_b - m (Lnet/minecraft/class_64;)Lnet/minecraft/class_64; method_16778 sequence - m (Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_16777 func_216138_a - m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_16775 func_216134_b - m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_16776 func_216136_a - f Lnet/minecraft/class_64; field_16884 field_216140_b - f Lnet/minecraft/class_64; field_16883 field_216139_a -c net/minecraft/class_65 net/minecraft/loot/AlternativesLootEntry - m ([Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_387 func_216150_a - m ([Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_65$class_66; method_386 builder -c net/minecraft/class_65$class_66 net/minecraft/loot/AlternativesLootEntry$Builder - m ()Lnet/minecraft/class_65$class_66; method_388 func_212845_d_ - f Ljava/util/List; field_979 lootEntries -c net/minecraft/class_67 net/minecraft/loot/DynamicLootEntry - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_85$class_86; method_390 func_216162_a - m (Lnet/minecraft/class_2960;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; method_391 func_216164_a - m (Lnet/minecraft/class_67;)Lnet/minecraft/class_2960; method_389 func_216163_a - f Lnet/minecraft/class_2960; field_980 name -c net/minecraft/class_67$class_68 net/minecraft/loot/DynamicLootEntry$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_67; method_392 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_67;Lcom/google/gson/JsonSerializationContext;)V method_393 doSerialize -c net/minecraft/class_67$1 net/minecraft/loot/DynamicLootEntry$1 -c net/minecraft/class_69 net/minecraft/loot/ParentedLootEntry - m (Lnet/minecraft/class_69$class_70;)Lnet/minecraft/class_79$class_5337; method_395 getSerializer - m ([Lnet/minecraft/class_64;)Lnet/minecraft/class_64; method_394 combineChildren - f Lnet/minecraft/class_64; field_983 children - f [Lnet/minecraft/class_79; field_982 entries -c net/minecraft/class_69$class_70 net/minecraft/loot/ParentedLootEntry$IFactory - m ([Lnet/minecraft/class_79;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_69; create create -c net/minecraft/class_69$1 net/minecraft/loot/ParentedLootEntry$1 - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_69; method_29313 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_69;Lcom/google/gson/JsonSerializationContext;)V method_29314 doSerialize - f Lnet/minecraft/class_69$class_70; field_25205 field_216187_a -c net/minecraft/class_93 net/minecraft/loot/GroupLootEntry - m ([Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_452 func_216152_a - m (Lnet/minecraft/class_64;Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_29315 func_216151_a -c net/minecraft/class_73 net/minecraft/loot/EmptyLootEntry - m ()Lnet/minecraft/class_85$class_86; method_401 func_216167_a -c net/minecraft/class_73$class_74 net/minecraft/loot/EmptyLootEntry$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_73; method_402 deserialize -c net/minecraft/class_73$1 net/minecraft/loot/EmptyLootEntry$1 -c net/minecraft/class_75 net/minecraft/loot/LootEntryManager - m (Ljava/lang/String;Lnet/minecraft/class_5335;)Lnet/minecraft/class_5338; method_29317 register - m ()Ljava/lang/Object; method_29316 func_237418_a_ - f Lnet/minecraft/class_5338; field_25208 LOOT_TABLE - f Lnet/minecraft/class_5338; field_25209 DYNAMIC - f Lnet/minecraft/class_5338; field_25210 TAG - f Lnet/minecraft/class_5338; field_25211 ALTERNATIVE - f Lnet/minecraft/class_5338; field_25206 EMPTY - f Lnet/minecraft/class_5338; field_25207 ITEM - f Lnet/minecraft/class_5338; field_25212 SEQUENCE - f Lnet/minecraft/class_5338; field_25213 GROUP -c net/minecraft/class_77 net/minecraft/loot/ItemLootEntry - m (Lnet/minecraft/class_77;)Lnet/minecraft/class_1792; method_410 func_216170_a - m (Lnet/minecraft/class_1935;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; method_409 func_216169_a - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_85$class_86; method_411 builder - f Lnet/minecraft/class_1792; field_987 item -c net/minecraft/class_77$class_78 net/minecraft/loot/ItemLootEntry$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_77; method_413 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_77;Lcom/google/gson/JsonSerializationContext;)V method_412 doSerialize -c net/minecraft/class_77$1 net/minecraft/loot/ItemLootEntry$1 -c net/minecraft/class_79 net/minecraft/loot/LootEntry - m (Lnet/minecraft/class_58;)V method_415 func_225579_a_ - m ()Lnet/minecraft/class_5338; method_29318 func_230420_a_ - m (Lnet/minecraft/class_47;)Z method_414 test - f Ljava/util/function/Predicate; field_989 field_216143_c - f [Lnet/minecraft/class_5341; field_988 conditions -c net/minecraft/class_79$class_80 net/minecraft/loot/LootEntry$Builder - m ()[Lnet/minecraft/class_5341; method_420 func_216079_f - m (Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_79$class_80; method_421 acceptCondition - m ()Lnet/minecraft/class_79; method_419 build - m (Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_65$class_66; method_417 alternatively - m ()Lnet/minecraft/class_79$class_80; method_416 cast - m ()Lnet/minecraft/class_79$class_80; method_418 func_212845_d_ - f Ljava/util/List; field_990 field_216082_a -c net/minecraft/class_79$class_5337 net/minecraft/loot/LootEntry$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_79; method_424 deserialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_79; method_29319 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_79;Lcom/google/gson/JsonSerializationContext;)V method_29320 serialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_79;Lcom/google/gson/JsonSerializationContext;)V method_422 doSerialize -c net/minecraft/class_82 net/minecraft/loot/ILootGenerator - m (F)I method_427 getEffectiveWeight - m (Ljava/util/function/Consumer;Lnet/minecraft/class_47;)V method_426 func_216188_a -c net/minecraft/class_85 net/minecraft/loot/StandaloneLootEntry - m (Ljava/util/function/Consumer;Lnet/minecraft/class_47;)V method_433 func_216154_a - m (Lnet/minecraft/class_85;)Ljava/util/function/BiFunction; method_435 func_216155_a - m (Lnet/minecraft/class_85$class_89;)Lnet/minecraft/class_85$class_86; method_434 builder - f Lnet/minecraft/class_82; field_998 generator - f Ljava/util/function/BiFunction; field_997 combinedFunctions - f I field_995 weight - f I field_994 quality - f [Lnet/minecraft/class_117; field_996 functions -c net/minecraft/class_85$1 net/minecraft/loot/StandaloneLootEntry$1 - f Lnet/minecraft/class_85; field_1002 field_216190_a -c net/minecraft/class_85$class_88 net/minecraft/loot/StandaloneLootEntry$Generator - f Lnet/minecraft/class_85; field_1004 field_216189_b -c net/minecraft/class_85$class_89 net/minecraft/loot/StandaloneLootEntry$ILootEntryBuilder - m (II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; build build -c net/minecraft/class_85$class_90 net/minecraft/loot/StandaloneLootEntry$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_85; method_441 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_85;Lcom/google/gson/JsonSerializationContext;)V method_442 doSerialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; method_443 deserialize -c net/minecraft/class_85$class_86 net/minecraft/loot/StandaloneLootEntry$Builder - m (Lnet/minecraft/class_117$class_118;)Lnet/minecraft/class_85$class_86; method_438 acceptFunction - m (I)Lnet/minecraft/class_85$class_86; method_436 quality - m (I)Lnet/minecraft/class_85$class_86; method_437 weight - m ()[Lnet/minecraft/class_117; method_439 getFunctions - f Ljava/util/List; field_999 functions - f I field_1000 quality - f I field_1001 weight -c net/minecraft/class_85$class_87 net/minecraft/loot/StandaloneLootEntry$BuilderImpl - m ()Lnet/minecraft/class_85$class_87; method_440 func_212845_d_ - f Lnet/minecraft/class_85$class_89; field_1003 builder -c net/minecraft/class_5338 net/minecraft/loot/LootPoolEntryType -c net/minecraft/class_72 net/minecraft/loot/SequenceLootEntry - m ([Lnet/minecraft/class_64;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_400 func_216153_a -c net/minecraft/class_83 net/minecraft/loot/TableLootEntry - m (Lnet/minecraft/class_2960;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; method_430 func_216173_a - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_85$class_86; method_428 builder - m (Lnet/minecraft/class_83;)Lnet/minecraft/class_2960; method_429 func_216172_a - f Lnet/minecraft/class_2960; field_993 table -c net/minecraft/class_83$class_84 net/minecraft/loot/TableLootEntry$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_83;Lcom/google/gson/JsonSerializationContext;)V method_431 doSerialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_83; method_432 deserialize -c net/minecraft/class_83$1 net/minecraft/loot/TableLootEntry$1 -c net/minecraft/class_91 net/minecraft/loot/TagLootEntry - m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_85$class_86; method_445 getBuilder - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1792;)V method_449 func_216174_a - m (Lnet/minecraft/class_47;Ljava/util/function/Consumer;)Z method_447 generateLoot - m (Lnet/minecraft/class_3494;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_85; method_444 func_216177_a - m (Lnet/minecraft/class_91;)Z method_448 func_216175_b - m (Lnet/minecraft/class_91;)Lnet/minecraft/class_3494; method_446 func_216178_a - f Z field_1006 expand - f Lnet/minecraft/class_3494; field_1005 tag -c net/minecraft/class_91$class_92 net/minecraft/loot/TagLootEntry$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_91;Lcom/google/gson/JsonSerializationContext;)V method_451 doSerialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;II[Lnet/minecraft/class_5341;[Lnet/minecraft/class_117;)Lnet/minecraft/class_91; method_450 deserialize -c net/minecraft/class_91$1 net/minecraft/loot/TagLootEntry$1 - f Lnet/minecraft/class_91; field_1008 field_216192_c - f Lnet/minecraft/class_1792; field_1007 field_216191_a -c net/minecraft/class_104 net/minecraft/loot/functions/ExplosionDecay - m ()Lnet/minecraft/class_120$class_121; method_478 builder -c net/minecraft/class_104$class_105 net/minecraft/loot/functions/ExplosionDecay$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_104; method_479 deserialize -c net/minecraft/class_104$1 net/minecraft/loot/functions/ExplosionDecay$1 -c net/minecraft/class_94 net/minecraft/loot/functions/ApplyBonus - m (Lnet/minecraft/class_94;)Lnet/minecraft/class_1887; method_454 func_215873_a - m ()Ljava/util/Map; method_458 func_215867_b - m (Lnet/minecraft/class_1887;I)Lnet/minecraft/class_120$class_121; method_461 uniformBonusCount - m (Lnet/minecraft/class_1887;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_453 func_215866_b - m (Lnet/minecraft/class_1887;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_457 func_215872_a - m (Lnet/minecraft/class_1887;)Lnet/minecraft/class_120$class_121; method_456 uniformBonusCount - m (Lnet/minecraft/class_1887;)Lnet/minecraft/class_120$class_121; method_455 oreDrops - m (Lnet/minecraft/class_1887;IF[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_459 func_215864_a - m (Lnet/minecraft/class_1887;FI)Lnet/minecraft/class_120$class_121; method_463 binomialWithBonusCount - m (Lnet/minecraft/class_94;)Lnet/minecraft/class_94$class_96; method_460 func_215874_b - m (Lnet/minecraft/class_1887;I[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_462 func_215868_a - f Lnet/minecraft/class_1887; field_1011 enchantment - f Lnet/minecraft/class_94$class_96; field_1009 field_215877_d - f Ljava/util/Map; field_1010 field_215875_a -c net/minecraft/class_94$1 net/minecraft/loot/functions/ApplyBonus$1 -c net/minecraft/class_94$class_100 net/minecraft/loot/functions/ApplyBonus$UniformBonusCountFormula - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_94$class_96; method_471 func_216207_a - f I field_1017 bonusMultiplier - f Lnet/minecraft/class_2960; field_1016 field_216208_a -c net/minecraft/class_94$class_96 net/minecraft/loot/functions/ApplyBonus$IFormula - m ()Lnet/minecraft/class_2960; method_466 func_216203_a - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonSerializationContext;)V method_465 func_216202_a - m (Ljava/util/Random;II)I method_467 func_216204_a -c net/minecraft/class_94$class_97 net/minecraft/loot/functions/ApplyBonus$IFormulaDeserializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_94$class_96; deserialize deserialize -c net/minecraft/class_94$class_98 net/minecraft/loot/functions/ApplyBonus$OreDropsFormula - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_94$class_96; method_468 func_216205_a - f Lnet/minecraft/class_2960; field_1015 field_216206_a -c net/minecraft/class_94$class_99 net/minecraft/loot/functions/ApplyBonus$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_94; method_470 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_94;Lcom/google/gson/JsonSerializationContext;)V method_469 serialize - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonParseException; method_17932 func_216199_a -c net/minecraft/class_94$class_95 net/minecraft/loot/functions/ApplyBonus$BinomialWithBonusCountFormula - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_94$class_96; method_464 func_216210_a - f F field_1012 probability - f I field_1014 extra - f Lnet/minecraft/class_2960; field_1013 field_216211_a -c net/minecraft/class_101 net/minecraft/loot/functions/CopyName - m (Lnet/minecraft/class_101;)Lnet/minecraft/class_101$class_102; method_472 func_215892_a - m (Lnet/minecraft/class_101$class_102;)Lnet/minecraft/class_120$class_121; method_473 builder - m (Lnet/minecraft/class_101$class_102;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_474 func_215891_a - f Lnet/minecraft/class_101$class_102; field_1018 source -c net/minecraft/class_101$class_102 net/minecraft/loot/functions/CopyName$Source - m (Ljava/lang/String;)Lnet/minecraft/class_101$class_102; method_475 byName - m ()[Lnet/minecraft/class_101$class_102; values values - m (Ljava/lang/String;)Lnet/minecraft/class_101$class_102; valueOf valueOf - f Ljava/lang/String; field_1025 name - f Lnet/minecraft/class_101$class_102; field_1023 BLOCK_ENTITY - f [Lnet/minecraft/class_101$class_102; field_1021 $VALUES - f Lnet/minecraft/class_101$class_102; field_1020 KILLER_PLAYER - f Lnet/minecraft/class_101$class_102; field_1019 KILLER - f Lnet/minecraft/class_101$class_102; field_1022 THIS - f Lnet/minecraft/class_169; field_1024 parameter -c net/minecraft/class_101$1 net/minecraft/loot/functions/CopyName$1 -c net/minecraft/class_101$class_103 net/minecraft/loot/functions/CopyName$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_101; method_477 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_101;Lcom/google/gson/JsonSerializationContext;)V method_476 serialize -c net/minecraft/class_4488 net/minecraft/loot/functions/CopyBlockState - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;)V method_21895 func_227548_a_ - m (Lnet/minecraft/class_4488;)Lnet/minecraft/class_2248; method_21894 func_227547_a_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;)Ljava/lang/String; method_21893 func_227546_a_ - m (Lnet/minecraft/class_4488;)Ljava/util/Set; method_21896 func_227549_b_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4488$class_4489; method_21892 func_227545_a_ - f Ljava/util/Set; field_20450 field_227544_c_ - f Lnet/minecraft/class_2248; field_20449 field_227543_a_ -c net/minecraft/class_4488$class_4489 net/minecraft/loot/functions/CopyBlockState$Builder - m ()Lnet/minecraft/class_4488$class_4489; method_21897 doCast - m (Lnet/minecraft/class_2769;)Lnet/minecraft/class_4488$class_4489; method_21898 func_227552_a_ - f Lnet/minecraft/class_2248; field_20451 field_227550_a_ - f Ljava/util/Set; field_20452 field_227551_b_ -c net/minecraft/class_4488$1 net/minecraft/loot/functions/CopyBlockState$1 -c net/minecraft/class_4488$class_4490 net/minecraft/loot/functions/CopyBlockState$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_4488; method_21900 deserialize - m (Lcom/google/gson/JsonArray;Lnet/minecraft/class_2769;)V method_21899 func_227553_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4488;Lcom/google/gson/JsonSerializationContext;)V method_21901 serialize - m (Ljava/util/Set;Lnet/minecraft/class_2689;Lcom/google/gson/JsonElement;)V method_21902 func_227554_a_ - m (Lnet/minecraft/class_2960;)Ljava/lang/IllegalArgumentException; method_21903 func_227555_a_ -c net/minecraft/class_109 net/minecraft/loot/functions/EnchantRandomly - m ([Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_488 func_237422_a_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1887;Ljava/util/Random;)Lnet/minecraft/class_1799; method_26266 func_237420_a_ - m (Lnet/minecraft/class_109;)Ljava/util/List; method_487 func_215898_a - m ()Lnet/minecraft/class_120$class_121; method_489 func_215900_c - m (ZLnet/minecraft/class_1799;Lnet/minecraft/class_1887;)Z method_26267 func_237421_a_ - f Lorg/apache/logging/log4j/Logger; field_1031 LOGGER - f Ljava/util/List; field_1030 enchantments -c net/minecraft/class_109$class_4954 net/minecraft/loot/functions/EnchantRandomly$Builder - m (Lnet/minecraft/class_1887;)Lnet/minecraft/class_109$class_4954; method_25992 func_237424_a_ - m ()Lnet/minecraft/class_109$class_4954; method_25991 doCast - f Ljava/util/Set; field_23090 field_237423_a_ -c net/minecraft/class_109$1 net/minecraft/loot/functions/EnchantRandomly$1 -c net/minecraft/class_109$class_110 net/minecraft/loot/functions/EnchantRandomly$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_109; method_490 deserialize - m (Ljava/lang/String;)Lcom/google/gson/JsonSyntaxException; method_17933 func_216200_a - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_109;Lcom/google/gson/JsonSerializationContext;)V method_491 serialize -c net/minecraft/class_3837 net/minecraft/loot/functions/CopyNbt - m (Lnet/minecraft/class_3837;)Ljava/util/List; method_16852 func_215886_b - m (Lnet/minecraft/class_3837;)Lnet/minecraft/class_3837$class_3840; method_16849 func_215879_a - m (Ljava/lang/String;)Lnet/minecraft/class_2203$class_2209; method_16850 func_215878_a - m ()Ljava/util/function/Function; method_16851 func_215884_b - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2520;Lnet/minecraft/class_3837$class_3839;)V method_16846 func_215885_a - m ()Ljava/util/function/Function; method_16854 func_215883_c - m (Ljava/lang/String;)Lnet/minecraft/class_2203$class_2209; method_16853 parsePath - m (Lnet/minecraft/class_3837$class_3840;)Lnet/minecraft/class_3837$class_3838; method_16848 builder - m (Lnet/minecraft/class_2586;)Lnet/minecraft/class_2520; method_16847 func_215882_a - f Ljava/util/function/Function; field_17015 field_215889_d - f Ljava/util/function/Function; field_17016 field_215890_e - f Lnet/minecraft/class_3837$class_3840; field_17013 field_215887_a - f Ljava/util/List; field_17014 field_215888_c -c net/minecraft/class_3837$1 net/minecraft/loot/functions/CopyNbt$1 -c net/minecraft/class_3837$class_3839 net/minecraft/loot/functions/CopyNbt$Operation - m ()Lcom/google/gson/JsonObject; method_16858 serialize - m (Ljava/util/function/Supplier;Lnet/minecraft/class_2520;)V method_16860 func_216216_a - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3837$class_3839; method_16859 deserialize - f Lnet/minecraft/class_2203$class_2209; field_17020 field_216218_b - f Lnet/minecraft/class_2203$class_2209; field_17022 field_216220_d - f Ljava/lang/String; field_17021 target - f Ljava/lang/String; field_17019 source - f Lnet/minecraft/class_3837$class_3841; field_17023 action -c net/minecraft/class_3837$class_3840 net/minecraft/loot/functions/CopyNbt$Source - m ()[Lnet/minecraft/class_3837$class_3840; values values - m (Lnet/minecraft/class_169;Ljava/util/function/Function;Lnet/minecraft/class_47;)Lnet/minecraft/class_2520; method_16861 func_216222_a - m (Ljava/lang/String;)Lnet/minecraft/class_3837$class_3840; method_16862 getByName - m (Ljava/lang/String;)Lnet/minecraft/class_3837$class_3840; valueOf valueOf - f Lnet/minecraft/class_3837$class_3840; field_17025 KILLER - f Lnet/minecraft/class_3837$class_3840; field_17026 KILLER_PLAYER - f Ljava/util/function/Function; field_17030 field_216226_g - f Lnet/minecraft/class_169; field_17029 lootParam - f Lnet/minecraft/class_3837$class_3840; field_17027 BLOCK_ENTITY - f Ljava/lang/String; field_17028 sourceName - f [Lnet/minecraft/class_3837$class_3840; field_17031 $VALUES - f Lnet/minecraft/class_3837$class_3840; field_17024 THIS -c net/minecraft/class_3837$class_3841 net/minecraft/loot/functions/CopyNbt$Action - m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)V method_16864 runAction - m ()[Lnet/minecraft/class_3837$class_3841; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3837$class_3841; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_3837$class_3841; method_16865 getByName - m (Lnet/minecraft/class_3837$class_3841;)Ljava/lang/String; method_16863 func_216228_a - f Ljava/lang/String; field_17035 op - f [Lnet/minecraft/class_3837$class_3841; field_17036 $VALUES - f Lnet/minecraft/class_3837$class_3841; field_17032 REPLACE - f Lnet/minecraft/class_3837$class_3841; field_17033 APPEND - f Lnet/minecraft/class_3837$class_3841; field_17034 MERGE -c net/minecraft/class_3837$class_3841$3 net/minecraft/loot/functions/CopyNbt$Action$3 - m (Ljava/util/List;Lnet/minecraft/class_2520;)V method_16869 func_216234_a - m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;)V method_16868 func_216233_a -c net/minecraft/class_3837$class_3841$2 net/minecraft/loot/functions/CopyNbt$Action$2 - m (Ljava/util/List;Lnet/minecraft/class_2520;)V method_16867 func_216232_a - m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;)V method_16866 func_216231_a -c net/minecraft/class_3837$class_3841$1 net/minecraft/loot/functions/CopyNbt$Action$1 -c net/minecraft/class_3837$class_3842 net/minecraft/loot/functions/CopyNbt$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_3837; method_16871 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_3837;Lcom/google/gson/JsonSerializationContext;)V method_16870 serialize -c net/minecraft/class_3837$class_3838 net/minecraft/loot/functions/CopyNbt$Builder - m ()Lnet/minecraft/class_3837$class_3838; method_16855 doCast - m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_3837$class_3838; method_16856 replaceOperation - m (Ljava/lang/String;Ljava/lang/String;Lnet/minecraft/class_3837$class_3841;)Lnet/minecraft/class_3837$class_3838; method_16857 addOperation - f Ljava/util/List; field_17018 operations - f Lnet/minecraft/class_3837$class_3840; field_17017 source -c net/minecraft/class_111 net/minecraft/loot/functions/ExplorationMap - m ()Lorg/apache/logging/log4j/Logger; method_498 func_215907_c - m (Lnet/minecraft/class_111;)I method_494 func_215909_d - m (Lnet/minecraft/class_111;)Lnet/minecraft/class_3195; method_497 func_237426_a_ - m ()Lnet/minecraft/class_111$class_112; method_492 func_215903_b - m (Lnet/minecraft/class_111;)Lnet/minecraft/class_20$class_21; method_493 func_215908_b - m (Lnet/minecraft/class_111;)B method_496 func_215906_c - m (Lnet/minecraft/class_111;)Z method_495 func_215905_e - f Lnet/minecraft/class_3195; field_1035 destination - f I field_1032 searchRadius - f Lorg/apache/logging/log4j/Logger; field_1038 LOGGER - f Lnet/minecraft/class_20$class_21; field_1036 decoration - f Lnet/minecraft/class_3195; field_25032 field_237425_a_ - f B field_1037 zoom - f Z field_1033 skipExistingChunks - f Lnet/minecraft/class_20$class_21; field_1034 field_215910_a -c net/minecraft/class_111$class_112 net/minecraft/loot/functions/ExplorationMap$Builder - m (Lnet/minecraft/class_20$class_21;)Lnet/minecraft/class_111$class_112; method_499 func_216064_a - m (Lnet/minecraft/class_3195;)Lnet/minecraft/class_111$class_112; method_502 func_237427_a_ - m (B)Lnet/minecraft/class_111$class_112; method_500 func_216062_a - m ()Lnet/minecraft/class_111$class_112; method_501 doCast - m (Z)Lnet/minecraft/class_111$class_112; method_503 func_216063_a - f I field_1040 field_216069_d - f Z field_1041 field_216070_e - f Lnet/minecraft/class_3195; field_1039 field_216066_a - f B field_1043 field_216068_c - f Lnet/minecraft/class_20$class_21; field_1042 field_216067_b -c net/minecraft/class_111$class_113 net/minecraft/loot/functions/ExplorationMap$Serializer - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3195; method_29039 func_237428_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_111;Lcom/google/gson/JsonSerializationContext;)V method_505 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_111; method_504 deserialize -c net/minecraft/class_111$1 net/minecraft/loot/functions/ExplorationMap$1 -c net/minecraft/class_106 net/minecraft/loot/functions/EnchantWithLevels - m (Lnet/minecraft/class_106;)Lnet/minecraft/class_59; method_480 func_215897_a - m (Lnet/minecraft/class_59;)Lnet/minecraft/class_106$class_107; method_481 func_215895_a - m (Lnet/minecraft/class_106;)Z method_482 func_215896_b - f Z field_1027 isTreasure - f Lnet/minecraft/class_59; field_1026 randomLevel -c net/minecraft/class_106$class_108 net/minecraft/loot/functions/EnchantWithLevels$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_106;Lcom/google/gson/JsonSerializationContext;)V method_485 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_106; method_486 deserialize -c net/minecraft/class_106$class_107 net/minecraft/loot/functions/EnchantWithLevels$Builder - m ()Lnet/minecraft/class_106$class_107; method_484 func_216059_e - m ()Lnet/minecraft/class_106$class_107; method_483 doCast - f Z field_1029 field_216061_b - f Lnet/minecraft/class_59; field_1028 field_216060_a -c net/minecraft/class_106$1 net/minecraft/loot/functions/EnchantWithLevels$1 -c net/minecraft/class_116 net/minecraft/loot/ILootFunctionConsumer - m ()Ljava/lang/Object; method_512 cast - m (Lnet/minecraft/class_117$class_118;)Ljava/lang/Object; method_511 acceptFunction -c net/minecraft/class_3668 net/minecraft/loot/functions/FillPlayerHead - m (Lnet/minecraft/class_3668;)Lnet/minecraft/class_47$class_50; method_15956 func_215901_a - f Lnet/minecraft/class_47$class_50; field_16227 field_215902_a -c net/minecraft/class_3668$class_3669 net/minecraft/loot/functions/FillPlayerHead$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_3668;Lcom/google/gson/JsonSerializationContext;)V method_15957 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_3668; method_15958 deserialize -c net/minecraft/class_120 net/minecraft/loot/LootFunction - m (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; apply apply - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Lnet/minecraft/class_1799; method_522 doApply - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Lnet/minecraft/class_1799; method_521 apply - m (Ljava/util/function/Function;)Lnet/minecraft/class_120$class_121; method_520 builder - f [Lnet/minecraft/class_5341; field_1047 conditions - f Ljava/util/function/Predicate; field_1048 combinedConditions -c net/minecraft/class_120$class_123 net/minecraft/loot/LootFunction$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_120; method_530 deserialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_120; method_528 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_120;Lcom/google/gson/JsonSerializationContext;)V method_529 serialize -c net/minecraft/class_120$class_121 net/minecraft/loot/LootFunction$Builder - m ()[Lnet/minecraft/class_5341; method_526 getConditions - m ()Lnet/minecraft/class_120$class_121; method_523 doCast - m (Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_120$class_121; method_524 acceptCondition - m ()Lnet/minecraft/class_120$class_121; method_525 cast - f Ljava/util/List; field_1049 conditions -c net/minecraft/class_120$class_122 net/minecraft/loot/LootFunction$SimpleBuilder - m ()Lnet/minecraft/class_120$class_122; method_527 doCast - f Ljava/util/function/Function; field_1050 function -c net/minecraft/class_114 net/minecraft/loot/functions/LimitCount - m (Lnet/minecraft/class_42;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_508 func_215912_a - m (Lnet/minecraft/class_114;)Lnet/minecraft/class_42; method_507 func_215913_a - m (Lnet/minecraft/class_42;)Lnet/minecraft/class_120$class_121; method_506 func_215911_a - f Lnet/minecraft/class_42; field_1044 field_215914_a -c net/minecraft/class_114$class_115 net/minecraft/loot/functions/LimitCount$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_114; method_509 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_114;Lcom/google/gson/JsonSerializationContext;)V method_510 serialize -c net/minecraft/class_114$1 net/minecraft/loot/functions/LimitCount$1 -c net/minecraft/class_5339 net/minecraft/loot/LootFunctionType -c net/minecraft/class_117 net/minecraft/loot/functions/ILootFunction - m (Ljava/util/function/BiFunction;Ljava/util/function/Consumer;Lnet/minecraft/class_47;)Ljava/util/function/Consumer; method_513 func_215858_a - m (Ljava/util/function/Consumer;Ljava/util/function/BiFunction;Lnet/minecraft/class_47;Lnet/minecraft/class_1799;)V method_514 func_215857_a - m ()Lnet/minecraft/class_5339; method_29321 getFunctionType -c net/minecraft/class_117$class_118 net/minecraft/loot/functions/ILootFunction$IBuilder - m ()Lnet/minecraft/class_117; method_515 build -c net/minecraft/class_125 net/minecraft/loot/functions/LootingEnchantBonus - m (Lnet/minecraft/class_125;)Z method_548 func_215918_b - m (Lnet/minecraft/class_125;)I method_546 func_215916_c - m (Lnet/minecraft/class_125;)Lnet/minecraft/class_61; method_550 func_215919_a - m (Lnet/minecraft/class_61;)Lnet/minecraft/class_125$class_126; method_547 builder - m ()Z method_549 func_215917_b - f Lnet/minecraft/class_61; field_1082 count - f I field_1083 limit -c net/minecraft/class_125$class_126 net/minecraft/loot/functions/LootingEnchantBonus$Builder - m (I)Lnet/minecraft/class_125$class_126; method_551 func_216072_a - m ()Lnet/minecraft/class_125$class_126; method_552 doCast - f I field_1085 field_216074_b - f Lnet/minecraft/class_61; field_1084 field_216073_a -c net/minecraft/class_125$1 net/minecraft/loot/functions/LootingEnchantBonus$1 -c net/minecraft/class_125$class_127 net/minecraft/loot/functions/LootingEnchantBonus$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_125;Lcom/google/gson/JsonSerializationContext;)V method_553 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_125; method_554 deserialize -c net/minecraft/class_131 net/minecraft/loot/functions/LootFunctionManager - m (Ljava/lang/String;Lnet/minecraft/class_5335;)Lnet/minecraft/class_5339; method_29323 func_237451_a_ - m ()Ljava/lang/Object; method_29322 func_237450_a_ - m ([Ljava/util/function/BiFunction;)Ljava/util/function/BiFunction; method_594 combine - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Lnet/minecraft/class_1799; method_592 func_216240_a - m (Ljava/util/function/BiFunction;Ljava/util/function/BiFunction;Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Lnet/minecraft/class_1799; method_591 func_216239_a - m ([Ljava/util/function/BiFunction;Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Lnet/minecraft/class_1799; method_595 func_216238_a - f Lnet/minecraft/class_5339; field_25226 SET_CONTENTS - f Lnet/minecraft/class_5339; field_25225 COPY_NAME - f Lnet/minecraft/class_5339; field_25224 SET_STEW_EFFECT - f Lnet/minecraft/class_5339; field_25223 EXPLORATION_MAP - f Lnet/minecraft/class_5339; field_25222 SET_NAME - f Lnet/minecraft/class_5339; field_25232 FILL_PLAYER_HEAD - f Lnet/minecraft/class_5339; field_25231 SET_LORE - f Lnet/minecraft/class_5339; field_25230 EXPLOSION_DECAY - f Lnet/minecraft/class_5339; field_25229 SET_LOOT_TABLE - f Lnet/minecraft/class_5339; field_25228 APPLY_BONUS - f Lnet/minecraft/class_5339; field_25227 LIMIT_COUNT - f Lnet/minecraft/class_5339; field_25216 ENCHANT_RANDOMLY - f Lnet/minecraft/class_5339; field_25215 ENCHANT_WITH_LEVELS - f Lnet/minecraft/class_5339; field_25214 SET_COUNT - f Ljava/util/function/BiFunction; field_1102 IDENTITY - f Lnet/minecraft/class_5339; field_25234 COPY_STATE - f Lnet/minecraft/class_5339; field_25233 COPY_NBT - f Lnet/minecraft/class_5339; field_25221 SET_ATTRIBUTES - f Lnet/minecraft/class_5339; field_25220 SET_DAMAGE - f Lnet/minecraft/class_5339; field_25219 LOOTING_ENCHANT - f Lnet/minecraft/class_5339; field_25218 FURNACE_SMELT - f Lnet/minecraft/class_5339; field_25217 SET_NBT -c net/minecraft/class_134 net/minecraft/loot/functions/SetContents - m ()Lnet/minecraft/class_134$class_135; method_601 builderIn - m (Lnet/minecraft/class_2371;Lnet/minecraft/class_47;Lnet/minecraft/class_82;)V method_600 func_215922_a - m (Lnet/minecraft/class_47;Lnet/minecraft/class_2371;Lnet/minecraft/class_79;)V method_599 func_215921_a - m (Lnet/minecraft/class_134;)Ljava/util/List; method_598 func_215923_a - f Ljava/util/List; field_1103 field_215924_a -c net/minecraft/class_134$class_135 net/minecraft/loot/functions/SetContents$Builder - m (Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_134$class_135; method_602 addLootEntry - m ()Lnet/minecraft/class_134$class_135; method_603 doCast - f Ljava/util/List; field_1104 lootEntries -c net/minecraft/class_134$1 net/minecraft/loot/functions/SetContents$1 -c net/minecraft/class_134$class_136 net/minecraft/loot/functions/SetContents$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_134;Lcom/google/gson/JsonSerializationContext;)V method_604 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_134; method_605 deserialize -c net/minecraft/class_137 net/minecraft/loot/functions/SetAttributes - m (Lnet/minecraft/class_137;)Ljava/util/List; method_606 func_215925_a - f Ljava/util/List; field_1105 modifiers -c net/minecraft/class_137$class_139 net/minecraft/loot/functions/SetAttributes$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_137;Lcom/google/gson/JsonSerializationContext;)V method_618 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_137; method_617 deserialize -c net/minecraft/class_137$class_138 net/minecraft/loot/functions/SetAttributes$Modifier - m (Lnet/minecraft/class_137$class_138;)Lnet/minecraft/class_61; method_616 access$400 - m (Lnet/minecraft/class_137$class_138;)Lnet/minecraft/class_1322$class_1323; method_607 func_216245_f - m (Ljava/lang/String;)Lnet/minecraft/class_1322$class_1323; method_609 func_216246_a - m (Lnet/minecraft/class_137$class_138;)[Lnet/minecraft/class_1304; method_608 access$100 - m (Lnet/minecraft/class_137$class_138;)Ljava/util/UUID; method_613 access$000 - m (Lnet/minecraft/class_137$class_138;)Ljava/lang/String; method_611 access$300 - m (Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonObject; method_615 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_137$class_138; method_614 deserialize - m (Lnet/minecraft/class_1322$class_1323;)Ljava/lang/String; method_612 func_216244_a - m (Lnet/minecraft/class_137$class_138;)Lnet/minecraft/class_1320; method_610 func_237452_c_ - f Ljava/lang/String; field_1107 modifierName - f Lnet/minecraft/class_61; field_1108 amount - f Lnet/minecraft/class_1322$class_1323; field_1109 operation - f Ljava/util/UUID; field_1111 uuid - f [Lnet/minecraft/class_1304; field_1112 slots - f Lnet/minecraft/class_1320; field_1110 attributeName -c net/minecraft/class_137$1 net/minecraft/loot/functions/SetAttributes$1 - f [I field_1106 field_216243_a -c net/minecraft/class_141 net/minecraft/loot/functions/SetCount - m (Lnet/minecraft/class_141;)Lnet/minecraft/class_59; method_619 func_215933_a - m (Lnet/minecraft/class_59;)Lnet/minecraft/class_120$class_121; method_621 builder - m (Lnet/minecraft/class_59;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_620 func_215934_a - f Lnet/minecraft/class_59; field_1114 countRange -c net/minecraft/class_141$class_142 net/minecraft/loot/functions/SetCount$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_141;Lcom/google/gson/JsonSerializationContext;)V method_623 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_141; method_622 deserialize -c net/minecraft/class_141$1 net/minecraft/loot/functions/SetCount$1 -c net/minecraft/class_144 net/minecraft/loot/functions/SetLootTable - m (Lnet/minecraft/class_144;)J method_625 func_215927_b - m (Lnet/minecraft/class_144;)Lnet/minecraft/class_2960; method_624 func_215926_a - f J field_1117 field_215929_c - f Lnet/minecraft/class_2960; field_1116 field_215928_a -c net/minecraft/class_144$class_145 net/minecraft/loot/functions/SetLootTable$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_144;Lcom/google/gson/JsonSerializationContext;)V method_626 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_144; method_627 deserialize -c net/minecraft/class_144$1 net/minecraft/loot/functions/SetLootTable$1 -c net/minecraft/class_3671 net/minecraft/loot/functions/SetLore - m (Lnet/minecraft/class_3671;)Lnet/minecraft/class_47$class_50; method_15967 func_215941_c - m (Lnet/minecraft/class_3671;)Z method_15961 func_215944_a - m (Lnet/minecraft/class_3671;)Ljava/util/List; method_15963 func_215943_b - m (Lnet/minecraft/class_1799;Z)Lnet/minecraft/class_2499; method_15964 func_215942_a - f Z field_16232 replace - f Lnet/minecraft/class_47$class_50; field_16233 field_215947_d - f Ljava/util/List; field_16231 lore -c net/minecraft/class_3671$class_3672 net/minecraft/loot/functions/SetLore$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_3671; method_15968 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_3671;Lcom/google/gson/JsonSerializationContext;)V method_15969 serialize -c net/minecraft/class_149 net/minecraft/loot/functions/SetDamage - m (Lnet/minecraft/class_149;)Lnet/minecraft/class_61; method_632 access$000 - m (Lnet/minecraft/class_61;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_634 func_215930_a - m (Lnet/minecraft/class_61;)Lnet/minecraft/class_120$class_121; method_633 func_215931_a - f Lorg/apache/logging/log4j/Logger; field_1121 LOGGER - f Lnet/minecraft/class_61; field_1120 damageRange -c net/minecraft/class_149$class_150 net/minecraft/loot/functions/SetDamage$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_149; method_635 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_149;Lcom/google/gson/JsonSerializationContext;)V method_636 serialize -c net/minecraft/class_149$1 net/minecraft/loot/functions/SetDamage$1 -c net/minecraft/class_159 net/minecraft/loot/functions/SetNBT - m (Lnet/minecraft/class_2487;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_117; method_675 func_215951_a - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_120$class_121; method_677 builder - m (Lnet/minecraft/class_159;)Lnet/minecraft/class_2487; method_676 access$000 - f Lnet/minecraft/class_2487; field_1138 tag -c net/minecraft/class_159$class_160 net/minecraft/loot/functions/SetNBT$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_159; method_679 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_159;Lcom/google/gson/JsonSerializationContext;)V method_678 serialize -c net/minecraft/class_159$1 net/minecraft/loot/functions/SetNBT$1 -c net/minecraft/class_3670 net/minecraft/loot/functions/SetName - m (Lnet/minecraft/class_3670;)Lnet/minecraft/class_47$class_50; method_15959 func_215935_b - m (Lnet/minecraft/class_3670;)Lnet/minecraft/class_2561; method_15960 access$000 - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_16191 func_215938_b - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_16189 func_215937_a - m (Lnet/minecraft/class_47;Lnet/minecraft/class_47$class_50;)Ljava/util/function/UnaryOperator; method_16190 func_215936_a - f Lorg/apache/logging/log4j/Logger; field_16230 LOGGER - f Lnet/minecraft/class_2561; field_16228 name - f Lnet/minecraft/class_47$class_50; field_16229 field_215940_d -c net/minecraft/class_3670$class_147 net/minecraft/loot/functions/SetName$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_3670; method_629 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_3670;Lcom/google/gson/JsonSerializationContext;)V method_630 serialize -c net/minecraft/class_3670$1 net/minecraft/loot/functions/SetName$1 -c net/minecraft/class_165 net/minecraft/loot/functions/Smelt - m ()Lnet/minecraft/class_120$class_121; method_724 func_215953_b - f Lorg/apache/logging/log4j/Logger; field_1159 LOGGER -c net/minecraft/class_165$class_5340 net/minecraft/loot/functions/Smelt$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_165; method_29324 deserialize -c net/minecraft/class_165$1 net/minecraft/loot/functions/Smelt$1 -c net/minecraft/class_152 net/minecraft/loot/functions/SetStewEffect - m ()Lnet/minecraft/class_152$class_153; method_637 func_215948_b - m (Lnet/minecraft/class_152;)Ljava/util/Map; method_638 func_215949_a - f Ljava/util/Map; field_1122 field_215950_a -c net/minecraft/class_152$class_154 net/minecraft/loot/functions/SetStewEffect$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;[Lnet/minecraft/class_5341;)Lnet/minecraft/class_152; method_641 deserialize - m (Ljava/lang/String;)Lcom/google/gson/JsonSyntaxException; method_17935 func_216201_a - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_152;Lcom/google/gson/JsonSerializationContext;)V method_642 serialize -c net/minecraft/class_152$class_153 net/minecraft/loot/functions/SetStewEffect$Builder - m ()Lnet/minecraft/class_152$class_153; method_639 doCast - m (Lnet/minecraft/class_1291;Lnet/minecraft/class_61;)Lnet/minecraft/class_152$class_153; method_640 func_216077_a - f Ljava/util/Map; field_1123 field_216078_a -c net/minecraft/class_152$1 net/minecraft/loot/functions/SetStewEffect$1 -c net/minecraft/server/MinecraftServer net/minecraft/server/MinecraftServer - m ()Lnet/minecraft/class_3218; method_30002 func_241755_D_ - m ()Z method_20415 driveOneInternal - m (Lnet/minecraft/class_3222;)V method_19465 sendDifficultyToPlayer - m ()Z method_3775 getPreventProxyConnections - m (Lnet/minecraft/class_1267;Z)V method_3776 setDifficultyForAllWorlds - m (Ljava/util/Collection;Ljava/lang/String;)Z method_29738 func_240781_a_ - m ()Lnet/minecraft/class_3324; method_3760 getPlayerList - m ()Lnet/minecraft/class_1928; method_3767 getGameRules - m ()V method_3821 systemExitNow - m (Lnet/minecraft/class_1934;ZI)Z method_3763 shareToLAN - m (Ljava/lang/String;Ljava/lang/String;)V method_3843 setResourcePack - m ()Z method_24488 func_240789_aP_ - m ()V method_3782 stopServer - m (Z)V method_3745 setAllowFlight - m (Ljava/nio/file/Path;)V method_21616 dumpClasspath - m (Lnet/minecraft/class_3218;)I method_3829 getSpawnRadius - m (Ljava/util/concurrent/atomic/AtomicReference;)V method_29739 func_240783_a_ - m (Ljava/util/Collection;)Lcom/google/common/collect/ImmutableList; method_29442 func_244269_b - m (Ljava/util/Collection;)Ljava/util/concurrent/CompletableFuture; method_29439 func_240780_a_ - m ()Lorg/apache/logging/log4j/Logger; method_3753 access$000 - m ()J method_3826 getServerTime - m (I)V method_3779 setServerPort - m ()Z method_3828 isServerInOnlineMode - m ()Z method_3759 shouldUseNativeTransport - m ()Z method_3823 init - m (Lnet/minecraft/class_3324;)V method_3846 setPlayerList - m (Lnet/minecraft/class_2926;)V method_3791 applyServerIconToResponse - m (Ljava/nio/file/Path;)V method_21713 dumpThreads - m ()Ljava/util/Set; method_29435 func_240770_D_ - m ()I method_3780 getTickCounter - m ()Ljava/util/Optional; method_24307 func_230045_q_ - m (Lnet/minecraft/class_3738;)V method_24306 run - m ()Lcom/mojang/authlib/GameProfileRepository; method_3719 getGameProfileRepository - m ()I method_3773 getNetworkCompressionThreshold - m (Z)V method_3815 setAllowPvp - m ()I method_3756 getServerPort - m ()Z method_3761 getForceGamemode - m (Lcom/mojang/authlib/GameProfile;)Z method_19466 isServerOwner - m (Lnet/minecraft/class_128;)Lnet/minecraft/class_128; method_3859 addServerInfoToCrashReport - m ()Lnet/minecraft/class_2995; method_3845 getScoreboard - m ()Lnet/minecraft/class_2168; method_3739 getCommandSource - m ()Ljava/lang/String; getServerModName getServerModName - m ()Lnet/minecraft/class_1934; method_3790 getGameType - m (Lcom/google/common/collect/ImmutableList;)Ljava/util/concurrent/CompletionStage; method_29437 func_240775_a_ - m ()Z method_3783 func_230536_N_ - m ()Lnet/minecraft/class_5455; method_30611 func_244267_aX - m ()Ljava/lang/String; method_3825 func_244270_be - m (Ljava/security/KeyPair;)V method_3853 setKeyPair - m ()Lnet/minecraft/class_2989; method_3851 getAdvancementManager - m (I)V method_3850 setBuildLimit - m ()Lnet/minecraft/class_3283; method_3836 getResourcePacks - m (Ljava/nio/file/Path;)V method_21614 dumpDummyCrashReport - m (Z)V method_3731 setWhitelistEnabled - m ()Z method_3806 isServerRunning - m ()Z method_3750 isServerStopped - m ()I method_3798 getOpPermissionLevel - m (Z)V method_3747 initiateShutdown - m (Lnet/minecraft/class_3738;)Z method_19464 canRun - m ()Z method_3860 getPublic - m (Ljava/lang/String;)Ljava/io/File; method_3758 getFile - m ()Ljava/lang/String; method_3784 getResourcePackUrl - m (Lcom/mojang/authlib/GameProfile;)I method_3835 getPermissionLevel - m (Lnet/minecraft/class_1934;)V method_3838 setGameType - m (Lnet/minecraft/class_4758;)V method_24487 func_240773_a_ - m ()Lnet/minecraft/class_1276; method_3795 getSnooper - m ()V method_27729 func_240794_aZ_ - m ()Z method_3796 func_230537_U_ - m ()Ljava/lang/String; method_3805 getResourcePackHash - m ()I method_3841 getSpawnProtectionSize - m ()Z method_3724 isSinglePlayer - m ()V method_3832 func_240790_aQ_ - m (Ljava/util/function/Function;)Lnet/minecraft/server/MinecraftServer; method_29740 startServer - m ()Z method_3754 isHardcore - m (Ljava/lang/Runnable;)Lnet/minecraft/class_3738; method_16209 wrapTask - m (Lnet/minecraft/class_1959;)Z method_31146 func_244265_a - m (Z)V method_3794 setForceGamemode - m ()Lcom/mojang/authlib/minecraft/MinecraftSessionService; method_3844 getMinecraftSessionService - m ()Lnet/minecraft/class_3242; method_3787 getNetworkSystem - m (Ljava/nio/file/Path;)V method_21615 dumpGameRules - m ()Z method_3812 isCommandBlockEnabled - m ()Lnet/minecraft/class_3485; method_27727 getTemplateManager - m (I)I method_27903 func_230512_b_ - m (Ljava/util/function/BooleanSupplier;)V method_3748 tick - m (Lnet/minecraft/class_3283;Lnet/minecraft/class_5359;Z)Lnet/minecraft/class_5359; method_29736 func_240772_a_ - m ()Z method_3866 isAheadOfTime - m ()I method_3833 getBuildLimit - m (Ljava/util/Collection;Lnet/minecraft/class_5350;)V method_29440 func_240782_a_ - m (Lnet/minecraft/class_4758;)V method_24490 func_240795_b_ - m ()Lnet/minecraft/class_5219; method_27728 getServerConfiguration - m ()Ljava/lang/String; method_17818 func_240798_ba_ - m ()Z method_3732 allowLoggingRcon - m (Ljava/lang/String;)V method_17819 setServerId - m ()Ljava/io/File; method_3725 getWorldIconFile - m ()Lnet/minecraft/class_2991; method_3740 getFunctionManager - m ()Lnet/minecraft/class_3312; method_3793 getPlayerProfileCache - m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_3218; method_3847 getWorld - m ()Lnet/minecraft/class_3696; method_24489 func_240791_aR_ - m ()V method_16208 runScheduledTasks - m ()Ljava/lang/String; method_3827 getMinecraftVersion - m ()Lnet/minecraft/class_4567; method_22828 func_229736_aP_ - m (ZZZ)Z method_3723 save - m (Ljava/util/function/BooleanSupplier;)V method_3813 updateTimeLightAndEntities - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)Z method_3785 isBlockProtected - m ()I method_3749 getMaxWorldSize - m ()Z method_3852 isPVPEnabled - m (Z)V method_3730 setDemo - m ()I method_3802 getMaxPlayers - m (Lnet/minecraft/class_5218;)Ljava/nio/file/Path; method_27050 func_240776_a_ - m (Ljava/nio/file/Path;)V method_21613 dumpDebugInfo - m (Lnet/minecraft/class_3949;)V method_3786 func_240787_a_ - m ()F method_3830 getTickTime - m ()Ljava/lang/String; method_3808 func_212373_aU - m ()Z method_27051 func_230540_aS_ - m ()Z method_27902 func_230541_aj_ - m ()Ljava/io/File; method_3831 getDataDirectory - m ()Lnet/minecraft/class_60; method_3857 getLootTableManager - m ()I method_21714 getFunctionLevel - m ()Lnet/minecraft/class_3004; method_3837 getCustomBossEvents - m ()Z method_3799 isDemo - m ()Ljava/lang/Iterable; method_3738 getWorlds - m ()Lnet/minecraft/class_1863; method_3772 getRecipeManager - m (Ljava/nio/file/Path;)V method_21692 dumpStats - m ()Lnet/minecraft/class_2170; method_3734 getCommandManager - m (Ljava/lang/String;)V method_3842 setHostname - m (Lnet/minecraft/class_2168;)V method_3728 kickPlayersNotWhitelisted - m (I)V method_3803 setPlayerIdleTimeout - m ()Lnet/minecraft/class_4565; method_22827 func_229735_aN_ - m ()V method_29741 func_240802_v_ - m ()Lnet/minecraft/class_3517; method_15876 getFrameTimer - m (Lnet/minecraft/class_3218;)Ljava/lang/String; method_3733 func_244268_b - m ()Z method_3729 isWhitelistEnabled - m ()Z method_3736 func_230538_V_ - m (Z)V method_19467 setDifficultyLocked - m (Lnet/minecraft/class_3949;)V method_3774 loadInitialChunks - m ()I method_3788 getCurrentPlayerCount - m ()V method_3856 refreshStatusNextTick - m ()V method_3735 func_240800_l__ - m ()Lnet/minecraft/class_5415; method_3801 func_244266_aF - m (Lnet/minecraft/class_128;)V method_3744 finalTick - m (Ljava/lang/String;)V method_3849 setServerOwner - m ()Z method_3771 isWorldIconSet - m ()Z method_3727 getGuiEnabled - m ()I method_30612 func_241871_k - m ()Ljava/lang/String; method_3818 getMOTD - m (Ljava/lang/Runnable;)V method_3742 registerTickable - m ()Z method_16043 isThreadAlive - m ()Z method_5387 func_244271_bf - m ()V method_3861 setResourcePackFromWorld - m (Z)V method_3764 setPreventProxyConnections - m ()Ljava/lang/String; method_3811 getServerOwner - m (Ljava/lang/String;)V method_3834 setMOTD - m (Lnet/minecraft/class_3283;)Lnet/minecraft/class_5359; method_29735 func_240771_a_ - m (Lnet/minecraft/class_26;)V method_17976 func_213204_a - m ()Z method_3816 isDedicatedServer - m ()Ljava/security/KeyPair; method_3716 getKeyPair - m (Ljava/lang/Thread;Ljava/lang/Throwable;)V method_3854 func_240779_a_ - m (Lnet/minecraft/class_32$class_5143;)V method_27725 func_240777_a_ - m ()[Ljava/lang/String; method_3858 getOnlinePlayerNames - m ()Z method_3820 serverIsInRunLoop - m ()I method_3862 getMaxPlayerIdleMinutes - m ()Lnet/minecraft/class_3695; method_16044 getProfiler - m ()Lcom/mojang/datafixers/DataFixer; method_3855 getDataFixer - m ()Ljava/lang/String; method_3819 getServerHostname - m ()Lnet/minecraft/class_2926; method_3765 getServerStatusResponse - m ()Z method_3839 getAllowNether - m (Lnet/minecraft/class_5219;)V method_17977 func_240778_a_ - m ()Z method_3718 isFlightAllowed - m ()V method_27731 func_230543_p_ - m (Z)V method_3864 setOnlineMode - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5268;ZZZ)V method_27901 func_240786_a_ - f I field_4579 buildLimit - f Lnet/minecraft/class_5350; field_25318 resourceManager - f Z field_4547 serverIsRunning - f [J field_4573 tickTimeArray - f Ljava/lang/String; field_4564 motd - f J field_4551 nanoTimeSinceStatusRefresh - f Lnet/minecraft/class_32$class_5143; field_23784 anvilConverterForAnvilFile - f Lnet/minecraft/class_4565; field_20850 field_229733_al_ - f Ljava/lang/String; field_4584 resourcePackHash - f Lnet/minecraft/class_2991; field_4591 functionManager - f F field_4592 tickTime - f I field_4572 tickCounter - f J field_19248 runTasksUntil - f Lcom/mojang/authlib/GameProfileRepository; field_4608 profileRepo - f Lnet/minecraft/class_29; field_24371 playerDataManager - f Ljava/security/KeyPair; field_4552 serverKeyPair - f Z field_4597 startProfiling - f Ljava/util/List; field_4568 tickables - f I field_4596 maxPlayerIdleMinutes - f Lnet/minecraft/class_3242; field_4563 networkSystem - f Lnet/minecraft/class_2926; field_4593 statusResponse - f I field_4555 serverPort - f Lnet/minecraft/class_3695; field_16258 profiler - f Ljava/lang/String; field_4607 resourcePackUrl - f J field_4571 serverTime - f J field_4557 timeOfLastWarning - f Lnet/minecraft/class_1276; field_4582 snooper - f Z field_4560 preventProxyConnections - f Lnet/minecraft/class_3485; field_24370 templateManager - f Z field_4577 worldIconSet - f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_4603 sessionService - f Lnet/minecraft/class_5219; field_24372 serverConfig - f Ljava/util/Map; field_4589 worlds - f Lnet/minecraft/class_3283; field_4595 resourcePacks - f Z field_4543 onlineMode - f Ljava/net/Proxy; field_4599 serverProxy - f Z field_19249 isRunningScheduledTasks - f Lnet/minecraft/class_5455$class_5457; field_25132 field_240767_f_ - f Ljava/lang/String; field_4578 serverOwner - f Ljava/lang/Thread; field_16257 serverThread - f Lnet/minecraft/class_3517; field_16205 frameTimer - f Lnet/minecraft/class_3004; field_4548 customBossEvents - f Ljava/util/Random; field_4602 random - f Z field_4545 isGamemodeForced - f Lnet/minecraft/class_2995; field_4558 scoreboard - f Z field_4554 allowFlight - f Lorg/apache/logging/log4j/Logger; field_4546 LOGGER - f Ljava/lang/String; field_4585 hostname - f Ljava/util/concurrent/Executor; field_17200 backgroundExecutor - f Z field_4561 serverStopped - f Z field_4570 whitelistEnabled - f Lnet/minecraft/class_3950; field_17439 chunkStatusListenerFactory - f Lcom/mojang/datafixers/DataFixer; field_4587 dataFixer - f Lnet/minecraft/class_3324; field_4550 playerList - f Z field_4604 pvpEnabled - f Lnet/minecraft/class_1940; field_17704 DEMO_WORLD_SETTINGS - f Z field_4544 serverRunning - f Ljava/io/File; field_4588 USER_CACHE_FILE - f Lnet/minecraft/class_3312; field_4556 profileCache - f Lnet/minecraft/class_4757; field_22250 timeTracker - f Ljava/lang/String; field_17601 serverId - f Z field_4549 isDemo -c net/minecraft/server/MinecraftServer$1 net/minecraft/server/MinecraftServer$1 - f J field_4609 startTime -c net/minecraft/server/MinecraftServer$2 net/minecraft/server/MinecraftServer$2 - f Ljava/util/List; field_20280 field_240803_a_ - f Lnet/minecraft/class_1928; field_20281 field_240804_b_ - f Lnet/minecraft/server/MinecraftServer; field_20282 field_240805_c_ -c net/minecraft/class_176 net/minecraft/loot/LootParameterSet - m ()Ljava/util/Set; method_777 getAllParameters - m (Lnet/minecraft/class_169;)Ljava/lang/String; method_779 func_216275_b - m (Lnet/minecraft/class_58;Lnet/minecraft/class_46;)V method_776 func_227556_a_ - m ()Ljava/lang/String; toString toString - m ()Ljava/util/Set; method_778 getRequiredParameters - f Ljava/util/Set; field_1215 all - f Ljava/util/Set; field_1216 required -c net/minecraft/class_176$class_177 net/minecraft/loot/LootParameterSet$Builder - m ()Lnet/minecraft/class_176; method_782 build - m (Lnet/minecraft/class_169;)Lnet/minecraft/class_176$class_177; method_781 required - m (Lnet/minecraft/class_169;)Lnet/minecraft/class_176$class_177; method_780 optional - f Ljava/util/Set; field_1217 optional - f Ljava/util/Set; field_1218 required -c net/minecraft/class_176$1 net/minecraft/loot/LootParameterSet$1 -c net/minecraft/class_169 net/minecraft/loot/LootParameter - m ()Ljava/lang/String; toString toString - m ()Lnet/minecraft/class_2960; method_746 getId - f Lnet/minecraft/class_2960; field_1162 id -c net/minecraft/class_181 net/minecraft/loot/LootParameters - m (Ljava/lang/String;)Lnet/minecraft/class_169; method_798 register - f Lnet/minecraft/class_169; field_24424 field_237457_g_ - f Lnet/minecraft/class_169; field_1227 DIRECT_KILLER_ENTITY - f Lnet/minecraft/class_169; field_1225 EXPLOSION_RADIUS - f Lnet/minecraft/class_169; field_1230 KILLER_ENTITY - f Lnet/minecraft/class_169; field_1229 TOOL - f Lnet/minecraft/class_169; field_1231 DAMAGE_SOURCE - f Lnet/minecraft/class_169; field_1228 BLOCK_ENTITY - f Lnet/minecraft/class_169; field_1233 LAST_DAMAGE_PLAYER - f Lnet/minecraft/class_169; field_1224 BLOCK_STATE - f Lnet/minecraft/class_169; field_1226 THIS_ENTITY -c net/minecraft/class_173 net/minecraft/loot/LootParameterSets - m (Lnet/minecraft/class_176$class_177;)V method_763 func_237456_b_ - m (Lnet/minecraft/class_176$class_177;)V method_760 func_237455_a_ - m (Lnet/minecraft/class_176$class_177;)V method_756 func_227560_b_ - m (Lnet/minecraft/class_176$class_177;)V method_24800 func_216252_a - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_176; method_757 getValue - m (Lnet/minecraft/class_176$class_177;)V method_27863 func_227559_a_ - m (Lnet/minecraft/class_176$class_177;)V method_758 func_216251_c - m (Ljava/lang/String;Ljava/util/function/Consumer;)Lnet/minecraft/class_176; method_759 register - m (Lnet/minecraft/class_176;)Lnet/minecraft/class_2960; method_762 getKey - m (Lnet/minecraft/class_176$class_177;)V method_15971 func_216255_b - m (Lnet/minecraft/class_176$class_177;)V method_22578 func_216250_f - m (Lnet/minecraft/class_176$class_177;)V method_764 func_216258_d - m (Lnet/minecraft/class_176$class_177;)V method_22577 func_216254_e - m (Lnet/minecraft/class_176$class_177;)V method_755 func_216249_h - m (Lnet/minecraft/class_176$class_177;)V method_15970 func_216259_g - f Lnet/minecraft/class_176; field_1172 BLOCK - f Lcom/google/common/collect/BiMap; field_1178 REGISTRY - f Lnet/minecraft/class_176; field_1177 GENERIC - f Lnet/minecraft/class_176; field_24423 field_237454_j_ - f Lnet/minecraft/class_176; field_20762 SELECTOR - f Lnet/minecraft/class_176; field_20761 COMMAND - f Lnet/minecraft/class_176; field_1179 CHEST - f Lnet/minecraft/class_176; field_1175 EMPTY - f Lnet/minecraft/class_176; field_1174 ADVANCEMENT - f Lnet/minecraft/class_176; field_22403 field_237453_h_ - f Lnet/minecraft/class_176; field_16235 GIFT - f Lnet/minecraft/class_176; field_1173 ENTITY - f Lnet/minecraft/class_176; field_1176 FISHING -c net/minecraft/class_182 net/minecraft/loot/conditions/TableBonus - m (Lnet/minecraft/class_182;)[F method_803 func_215956_b - m (Lnet/minecraft/class_1887;[F)Lnet/minecraft/class_5341$class_210; method_800 builder - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_47;)Z method_799 test - m (Lnet/minecraft/class_182;)Lnet/minecraft/class_1887; method_802 func_215954_a - m (Lnet/minecraft/class_1887;[F)Lnet/minecraft/class_5341; method_801 func_215957_b - f [F field_1235 chances - f Lnet/minecraft/class_1887; field_1234 enchantment -c net/minecraft/class_182$class_183 net/minecraft/loot/conditions/TableBonus$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_182; method_804 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_182;Lcom/google/gson/JsonSerializationContext;)V method_805 serialize - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonParseException; method_17936 func_216296_a -c net/minecraft/class_182$1 net/minecraft/loot/conditions/TableBonus$1 -c net/minecraft/class_186 net/minecraft/loot/conditions/Alternative - m (Lnet/minecraft/class_186;)[Lnet/minecraft/class_5341; method_827 func_215961_a - m ([Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_186$class_187; method_826 builder - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_47;)Z method_825 test - f Ljava/util/function/Predicate; field_1247 field_215963_b - f [Lnet/minecraft/class_5341; field_1246 conditions -c net/minecraft/class_186$class_188 net/minecraft/loot/conditions/Alternative$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_186; method_829 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_186;Lcom/google/gson/JsonSerializationContext;)V method_828 serialize -c net/minecraft/class_186$class_187 net/minecraft/loot/conditions/Alternative$Builder - f Ljava/util/List; field_1248 conditions -c net/minecraft/class_186$1 net/minecraft/loot/conditions/Alternative$1 -c net/minecraft/class_192 net/minecraft/loot/ILootConditionConsumer - m ()Ljava/lang/Object; method_512 cast - m (Lnet/minecraft/class_5341$class_210;)Ljava/lang/Object; method_840 acceptCondition -c net/minecraft/class_4568 net/minecraft/loot/conditions/Reference - m (Lnet/minecraft/class_4568;)Lnet/minecraft/class_2960; method_22580 func_227563_a_ - m (Lnet/minecraft/class_47;)Z method_22579 test - m (Ljava/lang/Object;)Z test test - f Lnet/minecraft/class_2960; field_20764 field_227562_b_ - f Lorg/apache/logging/log4j/Logger; field_20763 field_227561_a_ -c net/minecraft/class_4568$class_4569 net/minecraft/loot/conditions/Reference$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4568;Lcom/google/gson/JsonSerializationContext;)V method_22582 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_4568; method_22581 deserialize -c net/minecraft/class_4568$1 net/minecraft/loot/conditions/Reference$1 -c net/minecraft/class_199 net/minecraft/loot/conditions/EntityHasScore - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_47;)Z method_864 test - m (Lnet/minecraft/class_199;)Lnet/minecraft/class_47$class_50; method_863 func_215973_b - m (Lnet/minecraft/class_199;)Ljava/util/Map; method_866 func_215972_a - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_269;Ljava/lang/String;Lnet/minecraft/class_61;)Z method_865 entityScoreMatch - f Ljava/util/Map; field_1279 scores - f Lnet/minecraft/class_47$class_50; field_1278 target -c net/minecraft/class_199$class_200 net/minecraft/loot/conditions/EntityHasScore$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_199; method_867 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_199;Lcom/google/gson/JsonSerializationContext;)V method_868 serialize -c net/minecraft/class_199$1 net/minecraft/loot/conditions/EntityHasScore$1 -c net/minecraft/class_190 net/minecraft/loot/conditions/DamageSourceProperties - m (Lnet/minecraft/class_2022$class_2023;)Lnet/minecraft/class_5341$class_210; method_837 builder - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_190;)Lnet/minecraft/class_2022; method_835 func_215965_a - m (Lnet/minecraft/class_47;)Z method_834 test - m (Lnet/minecraft/class_2022$class_2023;)Lnet/minecraft/class_5341; method_836 func_215964_b - f Lnet/minecraft/class_2022; field_1256 predicate -c net/minecraft/class_190$class_191 net/minecraft/loot/conditions/DamageSourceProperties$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_190; method_839 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_190;Lcom/google/gson/JsonSerializationContext;)V method_838 serialize -c net/minecraft/class_190$1 net/minecraft/loot/conditions/DamageSourceProperties$1 -c net/minecraft/class_207 net/minecraft/loot/conditions/Inverted - m (Lnet/minecraft/class_47;)Z method_888 test - m (Lnet/minecraft/class_207;)Lnet/minecraft/class_5341; method_890 func_215980_a - m (Lnet/minecraft/class_207;)Lnet/minecraft/class_5341; method_887 func_215978_b - m (Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_5341$class_210; method_889 builder - m (Ljava/lang/Object;)Z test test - f Lnet/minecraft/class_5341; field_1283 term -c net/minecraft/class_207$class_208 net/minecraft/loot/conditions/Inverted$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_207;Lcom/google/gson/JsonSerializationContext;)V method_892 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_207; method_891 deserialize -c net/minecraft/class_207$1 net/minecraft/loot/conditions/Inverted$1 -c net/minecraft/class_201 net/minecraft/loot/conditions/SurvivesExplosion - m ()Lnet/minecraft/class_5341$class_210; method_871 builder - m ()Lnet/minecraft/class_5341; method_872 func_215969_d - m (Lnet/minecraft/class_47;)Z method_869 test - m ()Lnet/minecraft/class_201; method_870 func_215970_c - m (Ljava/lang/Object;)Z test test - f Lnet/minecraft/class_201; field_1280 INSTANCE -c net/minecraft/class_201$class_202 net/minecraft/loot/conditions/SurvivesExplosion$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_201; method_873 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_201;Lcom/google/gson/JsonSerializationContext;)V method_874 serialize -c net/minecraft/class_212 net/minecraft/loot/conditions/BlockStateProperty - m (Lnet/minecraft/class_212;)Lnet/minecraft/class_2248; method_903 func_215988_a - m (Lnet/minecraft/class_47;)Z method_899 test - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_212$class_213; method_900 builder - m (Lnet/minecraft/class_212;)Lnet/minecraft/class_4559; method_904 func_227566_b_ - m (Ljava/lang/Object;)Z test test - f Lnet/minecraft/class_4559; field_1288 properties - f Lnet/minecraft/class_2248; field_1286 block -c net/minecraft/class_212$class_214 net/minecraft/loot/conditions/BlockStateProperty$Serializer - m (Lnet/minecraft/class_2248;Ljava/lang/String;)V method_22585 func_227568_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_212;Lcom/google/gson/JsonSerializationContext;)V method_909 serialize - m (Lnet/minecraft/class_2960;)Ljava/lang/IllegalArgumentException; method_17937 func_227569_a_ - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_212; method_910 deserialize -c net/minecraft/class_212$class_213 net/minecraft/loot/conditions/BlockStateProperty$Builder - m (Lnet/minecraft/class_4559$class_4560;)Lnet/minecraft/class_212$class_213; method_22584 fromProperties - f Lnet/minecraft/class_4559; field_1291 desiredProperties - f Lnet/minecraft/class_2248; field_1290 block -c net/minecraft/class_212$1 net/minecraft/loot/conditions/BlockStateProperty$1 -c net/minecraft/class_205 net/minecraft/loot/conditions/LocationCheck - m (Lnet/minecraft/class_205;)Lnet/minecraft/class_2090; method_883 func_215974_a - m (Lnet/minecraft/class_2090$class_2091;)Lnet/minecraft/class_5341; method_882 func_215976_b - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_47;)Z method_881 test - m (Lnet/minecraft/class_2090$class_2091;Lnet/minecraft/class_2338;)Lnet/minecraft/class_5341$class_210; method_30151 func_241547_a_ - m (Lnet/minecraft/class_205;)Lnet/minecraft/class_2338; method_22583 func_227565_b_ - m (Lnet/minecraft/class_2090$class_2091;)Lnet/minecraft/class_5341$class_210; method_884 builder - m (Lnet/minecraft/class_2090$class_2091;Lnet/minecraft/class_2338;)Lnet/minecraft/class_5341; method_30152 func_241548_b_ - f Lnet/minecraft/class_2090; field_1282 predicate - f Lnet/minecraft/class_2338; field_20765 field_227564_b_ -c net/minecraft/class_205$class_206 net/minecraft/loot/conditions/LocationCheck$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_205;Lcom/google/gson/JsonSerializationContext;)V method_886 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_205; method_885 deserialize -c net/minecraft/class_205$1 net/minecraft/loot/conditions/LocationCheck$1 -c net/minecraft/class_5342 net/minecraft/loot/LootConditionType -c net/minecraft/class_5341 net/minecraft/loot/conditions/ILootCondition - m ()Lnet/minecraft/class_5342; method_29325 func_230419_b_ -c net/minecraft/class_5341$class_210 net/minecraft/loot/conditions/ILootCondition$IBuilder - m ()Lnet/minecraft/class_5341; build build - m (Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_186$class_187; method_893 alternative - m ()Lnet/minecraft/class_5341$class_210; method_16780 inverted -c net/minecraft/class_215 net/minecraft/loot/conditions/EntityHasProperty - m (Lnet/minecraft/class_215;)Lnet/minecraft/class_47$class_50; method_918 access$100 - m (Lnet/minecraft/class_215;)Lnet/minecraft/class_2048; method_915 func_215997_a - m (Lnet/minecraft/class_47$class_50;)Lnet/minecraft/class_5341$class_210; method_15972 builder - m (Lnet/minecraft/class_2048;Lnet/minecraft/class_47$class_50;)Lnet/minecraft/class_5341; method_27864 func_237476_a_ - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_47$class_50;Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_5341$class_210; method_917 builder - m (Lnet/minecraft/class_2048$class_2049;Lnet/minecraft/class_47$class_50;)Lnet/minecraft/class_5341; method_916 func_216000_a - m (Lnet/minecraft/class_47;)Z method_914 test - m (Lnet/minecraft/class_47$class_50;Lnet/minecraft/class_2048;)Lnet/minecraft/class_5341$class_210; method_27865 func_237477_a_ - f Lnet/minecraft/class_2048; field_1293 predicate - f Lnet/minecraft/class_47$class_50; field_1292 target -c net/minecraft/class_215$class_216 net/minecraft/loot/conditions/EntityHasProperty$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_215;Lcom/google/gson/JsonSerializationContext;)V method_919 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_215; method_920 deserialize -c net/minecraft/class_215$1 net/minecraft/loot/conditions/EntityHasProperty$1 -c net/minecraft/class_217 net/minecraft/loot/conditions/LootConditionManager - m (Ljava/lang/Object;)Z method_928 func_216308_a - m (Ljava/lang/Object;)Z method_921 func_216304_b - m (Ljava/lang/String;Lnet/minecraft/class_5335;)Lnet/minecraft/class_5342; method_29327 register - m ([Ljava/util/function/Predicate;)Ljava/util/function/Predicate; method_925 or - m ([Ljava/util/function/Predicate;Ljava/lang/Object;)Z method_929 func_216309_a - m ([Ljava/util/function/Predicate;Ljava/lang/Object;)Z method_927 func_216307_b - m ([Ljava/util/function/Predicate;)Ljava/util/function/Predicate; method_924 and - m ()Ljava/lang/Object; method_29326 func_237474_a_ - f Lnet/minecraft/class_5342; field_25249 REFERENCE - f Lnet/minecraft/class_5342; field_25239 ENTITY_PROPERTIES - f Lnet/minecraft/class_5342; field_25250 TIME_CHECK - f Lnet/minecraft/class_5342; field_25240 KILLED_BY_PLAYER - f Lnet/minecraft/class_5342; field_25241 ENTITY_SCORES - f Lnet/minecraft/class_5342; field_25242 BLOCK_STATE_PROPERTY - f Lnet/minecraft/class_5342; field_25243 MATCH_TOOL - f Lnet/minecraft/class_5342; field_25244 TABLE_BONUS - f Lnet/minecraft/class_5342; field_25245 SURVIVES_EXPLOSION - f Lnet/minecraft/class_5342; field_25235 INVERTED - f Lnet/minecraft/class_5342; field_25246 DAMAGE_SOURCE_PROPERTIES - f Lnet/minecraft/class_5342; field_25236 ALTERNATIVE - f Lnet/minecraft/class_5342; field_25247 LOCATION_CHECK - f Lnet/minecraft/class_5342; field_25237 RANDOM_CHANCE - f Lnet/minecraft/class_5342; field_25248 WEATHER_CHECK - f Lnet/minecraft/class_5342; field_25238 RANDOM_CHANCE_WITH_LOOTING -c net/minecraft/class_219 net/minecraft/loot/conditions/RandomChance - m (Ljava/lang/Object;)Z test test - m (F)Lnet/minecraft/class_5341$class_210; method_932 builder - m (Lnet/minecraft/class_47;)Z method_934 test - m (Lnet/minecraft/class_219;)F method_935 access$000 - m (F)Lnet/minecraft/class_5341; method_933 func_216005_b - f F field_1296 chance -c net/minecraft/class_219$class_220 net/minecraft/loot/conditions/RandomChance$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_219;Lcom/google/gson/JsonSerializationContext;)V method_936 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_219; method_937 deserialize -c net/minecraft/class_219$1 net/minecraft/loot/conditions/RandomChance$1 -c net/minecraft/class_221 net/minecraft/loot/conditions/KilledByPlayer - m ()Lnet/minecraft/class_5341; method_940 func_215995_d - m (Ljava/lang/Object;)Z test test - m ()Lnet/minecraft/class_5341$class_210; method_939 builder - m ()Lnet/minecraft/class_221; method_941 func_215993_c - m (Lnet/minecraft/class_47;)Z method_938 test - f Lnet/minecraft/class_221; field_1297 INSTANCE -c net/minecraft/class_221$class_222 net/minecraft/loot/conditions/KilledByPlayer$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_221;Lcom/google/gson/JsonSerializationContext;)V method_942 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_221; method_943 deserialize -c net/minecraft/class_223 net/minecraft/loot/conditions/MatchTool - m (Lnet/minecraft/class_2073$class_2074;)Lnet/minecraft/class_5341$class_210; method_945 builder - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_47;)Z method_946 test - m (Lnet/minecraft/class_2073$class_2074;)Lnet/minecraft/class_5341; method_944 func_216013_b - m (Lnet/minecraft/class_223;)Lnet/minecraft/class_2073; method_947 func_216011_a - f Lnet/minecraft/class_2073; field_1298 predicate -c net/minecraft/class_223$class_224 net/minecraft/loot/conditions/MatchTool$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_223; method_949 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_223;Lcom/google/gson/JsonSerializationContext;)V method_948 serialize -c net/minecraft/class_225 net/minecraft/loot/conditions/RandomChanceWithLooting - m (Lnet/minecraft/class_47;)Z method_950 test - m (FF)Lnet/minecraft/class_5341$class_210; method_953 builder - m (Lnet/minecraft/class_225;)F method_954 access$100 - m (Ljava/lang/Object;)Z test test - m (FF)Lnet/minecraft/class_5341; method_952 func_216002_b - m (Lnet/minecraft/class_225;)F method_951 access$000 - f F field_1299 lootingMultiplier - f F field_1300 chance -c net/minecraft/class_225$class_226 net/minecraft/loot/conditions/RandomChanceWithLooting$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_225; method_956 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_225;Lcom/google/gson/JsonSerializationContext;)V method_955 serialize -c net/minecraft/class_225$1 net/minecraft/loot/conditions/RandomChanceWithLooting$1 -c net/minecraft/class_227 net/minecraft/loot/conditions/WeatherCheck - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_227;)Ljava/lang/Boolean; method_959 func_216007_b - m (Lnet/minecraft/class_227;)Ljava/lang/Boolean; method_958 func_216008_a - m (Lnet/minecraft/class_47;)Z method_957 test - f Ljava/lang/Boolean; field_1302 raining - f Ljava/lang/Boolean; field_1301 thundering -c net/minecraft/class_227$class_228 net/minecraft/loot/conditions/WeatherCheck$Serializer - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_227;Lcom/google/gson/JsonSerializationContext;)V method_960 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_227; method_961 deserialize -c net/minecraft/class_227$1 net/minecraft/loot/conditions/WeatherCheck$1 -c net/minecraft/class_4571 net/minecraft/loot/conditions/TimeCheck - m (Lnet/minecraft/class_47;)Z method_22587 test - m (Lnet/minecraft/class_4571;)Ljava/lang/Long; method_22588 func_227572_a_ - m (Lnet/minecraft/class_4571;)Lnet/minecraft/class_61; method_22589 func_227573_b_ - m (Ljava/lang/Object;)Z test test - f Lnet/minecraft/class_61; field_20768 field_227571_b_ - f Ljava/lang/Long; field_20767 field_227570_a_ -c net/minecraft/class_4571$class_4572 net/minecraft/loot/conditions/TimeCheck$Serializer - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_4571; method_22590 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4571;Lcom/google/gson/JsonSerializationContext;)V method_22591 serialize -c net/minecraft/class_4571$1 net/minecraft/loot/conditions/TimeCheck$1 -c net/minecraft/class_231 net/minecraft/command/TimedFunction - m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_236;J)V method_967 run - m (Lnet/minecraft/class_2991;Lnet/minecraft/class_2158;)V method_17938 func_216316_a - m (Lnet/minecraft/class_231;)Lnet/minecraft/class_2960; method_966 func_216317_a - f Lnet/minecraft/class_2960; field_1304 field_216318_a -c net/minecraft/class_231$class_232 net/minecraft/command/TimedFunction$Serializer - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_231;)V method_968 write - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_231; method_969 read -c net/minecraft/class_229 net/minecraft/command/TimedFunctionTag - m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_236;J)V method_962 run - m (Lnet/minecraft/class_229;)Lnet/minecraft/class_2960; method_963 func_216314_a - f Lnet/minecraft/class_2960; field_1303 tagName -c net/minecraft/class_229$class_230 net/minecraft/command/TimedFunctionTag$Serializer - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_229; method_965 read - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_229;)V method_964 write -c net/minecraft/class_233 net/minecraft/command/TimerCallbackSerializers - m (Lnet/minecraft/class_234$class_235;)Lnet/minecraft/class_233; method_971 func_216340_a - m (Ljava/lang/Class;)Lnet/minecraft/class_234$class_235; method_970 func_216338_a - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_234; method_972 func_216341_a - m (Lnet/minecraft/class_234;)Lnet/minecraft/class_2487; method_973 func_216339_a - f Ljava/util/Map; field_1307 field_216344_c - f Ljava/util/Map; field_1305 field_216345_d - f Lorg/apache/logging/log4j/Logger; field_1308 LOGGER - f Lnet/minecraft/class_233; field_1306 field_216342_a -c net/minecraft/class_234 net/minecraft/command/ITimerCallback - m (Ljava/lang/Object;Lnet/minecraft/class_236;J)V method_974 run -c net/minecraft/class_234$class_235 net/minecraft/command/ITimerCallback$Serializer - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_234;)V method_975 write - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_234; method_976 read - m ()Ljava/lang/Class; method_978 func_216311_b - m ()Lnet/minecraft/class_2960; method_977 func_216310_a - f Ljava/lang/Class; field_1310 clazz - f Lnet/minecraft/class_2960; field_1309 typeId -c net/minecraft/class_236 net/minecraft/command/TimerCallbackManager - m ()Ljava/util/Comparator; method_987 sorter - m (Lnet/minecraft/class_236$class_237;)J method_21905 func_227578_c_ - m (Lnet/minecraft/class_236$class_237;)Lcom/google/common/primitives/UnsignedLong; method_21904 func_227577_b_ - m (Lnet/minecraft/class_2487;)V method_986 readEntry - m (Ljava/lang/String;JLnet/minecraft/class_234;)V method_985 func_227576_a_ - m (Ljava/lang/String;)I method_22593 func_227575_a_ - m ()Ljava/util/Set; method_22592 func_227574_a_ - m (Lcom/mojang/serialization/Dynamic;)V method_29040 func_237478_a_ - m (Ljava/lang/Object;J)V method_988 run - m ()Lnet/minecraft/class_2499; method_982 write - m (Lnet/minecraft/class_236$class_237;)Lnet/minecraft/class_2487; method_980 writeEntry - f Lorg/apache/logging/log4j/Logger; field_1315 LOGGER - f Lcom/google/common/collect/Table; field_1312 byName - f Lcom/google/common/primitives/UnsignedLong; field_1311 nextUniqueId - f Ljava/util/Queue; field_1313 entries - f Lnet/minecraft/class_233; field_1314 field_216334_b -c net/minecraft/class_236$class_237 net/minecraft/command/TimerCallbackManager$Entry - f J field_1318 triggerTime - f Lnet/minecraft/class_234; field_1316 callback - f Ljava/lang/String; field_1317 name - f Lcom/google/common/primitives/UnsignedLong; field_1319 uniqueId -c net/minecraft/class_236$1 net/minecraft/command/TimerCallbackManager$1 -c net/minecraft/class_238 net/minecraft/util/math/AxisAlignedBB - m (DDD)Lnet/minecraft/class_238; method_1009 grow - m ()D method_17941 getZSize - m (Lnet/minecraft/class_3341;)Lnet/minecraft/class_238; method_19316 toImmutable - m ()D method_17939 getXSize - m ()D method_17940 getYSize - m (DDD)Lnet/minecraft/class_238; method_1012 expand - m (Lnet/minecraft/class_238;)Z method_994 intersects - m (Lnet/minecraft/class_2350$class_2351;)D method_990 getMax - m (DDD)Lnet/minecraft/class_238; method_989 offset - m ([DLnet/minecraft/class_2350;DDDDDDDDLnet/minecraft/class_2350;DDD)Lnet/minecraft/class_2350; method_998 checkSideForHit - m (Lnet/minecraft/class_2350$class_2351;)D method_1001 getMin - m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;)Ljava/util/Optional; method_992 rayTrace - m (Ljava/lang/Iterable;Lnet/minecraft/class_243;Lnet/minecraft/class_243;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3965; method_1010 rayTrace - m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;)Z method_993 intersects - m ()Ljava/lang/String; toString toString - m (D)Lnet/minecraft/class_238; method_1014 grow - m (D)Lnet/minecraft/class_238; method_1011 shrink - m (Ljava/lang/Object;)Z equals equals - m (DDDDDD)Z method_1003 intersects - m ()D method_995 getAverageEdgeLength - m (DDD)Lnet/minecraft/class_238; method_1002 contract - m (Lnet/minecraft/class_243;)Z method_1006 contains - m ()Lnet/minecraft/class_243; method_1005 getCenter - m (DDD)Z method_1008 contains - m (Lnet/minecraft/class_238;Lnet/minecraft/class_243;[DLnet/minecraft/class_2350;DDD)Lnet/minecraft/class_2350; method_1007 calcSideHit - m ()I hashCode hashCode - m (Lnet/minecraft/class_238;)Lnet/minecraft/class_238; method_999 intersect - m (Lnet/minecraft/class_238;)Lnet/minecraft/class_238; method_991 union - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_238; method_997 offset - m (DDD)Lnet/minecraft/class_238; method_30048 withSizeAtOrigin - m ()Z method_1013 hasNaN - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_238; method_29968 fromVector - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_238; method_18804 expand - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_238; method_996 offset - f D field_1324 maxZ - f D field_1322 minY - f D field_1321 minZ - f D field_1323 minX - f D field_1325 maxY - f D field_1320 maxX -c net/minecraft/class_3966 net/minecraft/util/math/EntityRayTraceResult - m ()Lnet/minecraft/class_1297; method_17782 getEntity - f Lnet/minecraft/class_1297; field_17592 entity -c net/minecraft/class_3965 net/minecraft/util/math/BlockRayTraceResult - m ()Lnet/minecraft/class_2350; method_17780 getFace - m ()Z method_17781 isInside - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_3965; method_17779 withFace - m (Lnet/minecraft/class_243;Lnet/minecraft/class_2350;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3965; method_17778 createMiss - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_3965; method_29328 withPosition - m ()Lnet/minecraft/class_2338; method_17777 getPos - f Lnet/minecraft/class_2338; field_17589 pos - f Lnet/minecraft/class_2350; field_17588 face - f Z field_17591 inside - f Z field_17590 isMiss -c net/minecraft/class_241 net/minecraft/util/math/vector/Vector2f - m (Lnet/minecraft/class_241;)Z method_1016 equals - f Lnet/minecraft/class_241; field_1339 MIN - f Lnet/minecraft/class_241; field_1341 UNIT_X - f Lnet/minecraft/class_241; field_1335 ONE - f Lnet/minecraft/class_241; field_1338 NEGATIVE_UNIT_X - f F field_1342 y - f F field_1343 x - f Lnet/minecraft/class_241; field_1336 UNIT_Y - f Lnet/minecraft/class_241; field_1337 MAX - f Lnet/minecraft/class_241; field_1344 NEGATIVE_UNIT_Y - f Lnet/minecraft/class_241; field_1340 ZERO -c net/minecraft/class_239 net/minecraft/util/math/RayTraceResult - m (Lnet/minecraft/class_1297;)D method_24801 func_237486_a_ - m ()Lnet/minecraft/class_243; method_17784 getHitVec - m ()Lnet/minecraft/class_239$class_240; method_17783 getType - f Lnet/minecraft/class_243; field_1329 hitResult -c net/minecraft/class_239$class_240 net/minecraft/util/math/RayTraceResult$Type - m ()[Lnet/minecraft/class_239$class_240; values values - m (Ljava/lang/String;)Lnet/minecraft/class_239$class_240; valueOf valueOf - f Lnet/minecraft/class_239$class_240; field_1332 BLOCK - f Lnet/minecraft/class_239$class_240; field_1331 ENTITY - f [Lnet/minecraft/class_239$class_240; field_1334 $VALUES - f Lnet/minecraft/class_239$class_240; field_1333 MISS -c net/minecraft/class_243 net/minecraft/util/math/vector/Vector3d - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_1019 add - m (DDD)Lnet/minecraft/class_243; method_1023 subtract - m ()I hashCode hashCode - m (FF)Lnet/minecraft/class_243; method_1030 fromPitchYaw - m ()Lnet/minecraft/class_243; method_1029 normalize - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_1036 crossProduct - m (DDD)Lnet/minecraft/class_243; method_1031 add - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_1020 subtract - m ()Lnet/minecraft/class_243; method_22882 inverse - m (F)Lnet/minecraft/class_243; method_31033 rotateRoll - m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_243; method_24953 copyCentered - m (F)Lnet/minecraft/class_243; method_1024 rotateYaw - m (I)Lnet/minecraft/class_243; method_24457 unpack - m (Lnet/minecraft/class_2374;D)Z method_24802 isWithinDistanceOf - m (Lnet/minecraft/class_241;)Lnet/minecraft/class_243; method_1034 fromPitchYaw - m ()D method_1027 lengthSquared - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_18806 mul - m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_243; method_24955 copyCenteredHorizontally - m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_243; method_24954 copy - m ()D method_1033 length - m (DDD)D method_1028 squareDistanceTo - m (Lnet/minecraft/class_243;)D method_1026 dotProduct - m (Lnet/minecraft/class_2382;D)Lnet/minecraft/class_243; method_26410 copyCenteredWithVerticalOffset - m (Ljava/lang/Object;)Z equals equals - m (D)Lnet/minecraft/class_243; method_1021 scale - m (Ljava/util/EnumSet;)Lnet/minecraft/class_243; method_1032 align - m (F)Lnet/minecraft/class_243; method_1037 rotatePitch - m (Lnet/minecraft/class_2350$class_2351;)D method_18043 getCoordinate - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_1035 subtractReverse - m (DDD)Lnet/minecraft/class_243; method_18805 mul - m (Lnet/minecraft/class_243;)D method_1025 squareDistanceTo - m (Lnet/minecraft/class_243;)D method_1022 distanceTo - f Lnet/minecraft/class_243; field_1353 ZERO - f D field_1351 y - f D field_1350 z - f D field_1352 x -c net/minecraft/class_244 net/minecraft/util/math/shapes/BitSetVoxelShapePart - m (Lnet/minecraft/class_247;Lnet/minecraft/class_251;IILnet/minecraft/class_251;IILnet/minecraft/class_244;II[I[ZIII)Z method_1038 func_199629_a - m (Lnet/minecraft/class_255;Lnet/minecraft/class_247;Lnet/minecraft/class_251;ILnet/minecraft/class_251;ILnet/minecraft/class_244;I[I[ZIII)Z method_1042 func_199627_a - m (III)I method_1039 getIndex - m (Lnet/minecraft/class_251;Lnet/minecraft/class_251;Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_247;)Lnet/minecraft/class_244; method_1040 func_197852_a - m (Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_247;Lnet/minecraft/class_251;Lnet/minecraft/class_251;Lnet/minecraft/class_244;[IIII)Z method_1041 func_199628_a - f I field_1354 endY - f I field_1356 startZ - f I field_1355 endX - f I field_1357 startY - f Ljava/util/BitSet; field_1359 bitSet - f I field_1360 endZ - f I field_1358 startX -c net/minecraft/class_245 net/minecraft/util/math/shapes/VoxelShapeArray - f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1361 xPoints - f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1362 yPoints - f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1363 zPoints -c net/minecraft/class_245$1 net/minecraft/util/math/shapes/VoxelShapeArray$1 - f [I field_1364 field_197747_a -c net/minecraft/class_3726 net/minecraft/util/math/shapes/ISelectionContext - m (Lnet/minecraft/class_3610;Lnet/minecraft/class_3609;)Z method_27866 func_230426_a_ - m ()Z method_16193 getPosY - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_3726; method_16195 forEntity - m (Lnet/minecraft/class_265;Lnet/minecraft/class_2338;Z)Z method_16192 func_216378_a - m ()Lnet/minecraft/class_3726; method_16194 dummy - m (Lnet/minecraft/class_1792;)Z method_17785 hasItem -c net/minecraft/class_247 net/minecraft/util/math/shapes/IBooleanFunction - m (ZZ)Z method_16787 func_223269_m_ - m (ZZ)Z method_16791 func_223270_n_ - m (ZZ)Z method_16784 func_223271_o_ - m (ZZ)Z apply apply - m (ZZ)Z method_16793 func_223267_k_ - m (ZZ)Z method_16783 func_223268_l_ - m (ZZ)Z method_16782 func_223264_h_ - m (ZZ)Z method_16792 func_223265_i_ - m (ZZ)Z method_16786 func_223266_j_ - m (ZZ)Z method_16781 func_223261_e_ - m (ZZ)Z method_16796 func_223262_f_ - m (ZZ)Z method_16788 func_223263_g_ - m (ZZ)Z method_16794 func_223259_c_ - m (ZZ)Z method_16790 func_223260_d_ - m (ZZ)Z method_16795 func_223257_a_ - m (ZZ)Z method_16785 func_223258_b_ - m (ZZ)Z method_16789 func_223272_p_ - f Lnet/minecraft/class_247; field_16895 TRUE - f Lnet/minecraft/class_247; field_16887 SECOND - f Lnet/minecraft/class_247; field_16890 SAME - f Lnet/minecraft/class_247; field_16889 CAUSES - f Lnet/minecraft/class_247; field_16891 FIRST - f Lnet/minecraft/class_247; field_1366 OR - f Lnet/minecraft/class_247; field_16899 CAUSED_BY - f Lnet/minecraft/class_247; field_16886 ONLY_FIRST - f Lnet/minecraft/class_247; field_16892 NOT_SAME - f Lnet/minecraft/class_247; field_16898 NOT_SECOND - f Lnet/minecraft/class_247; field_16888 NOT_AND - f Lnet/minecraft/class_247; field_16896 AND - f Lnet/minecraft/class_247; field_16897 FALSE - f Lnet/minecraft/class_247; field_16893 ONLY_SECOND - f Lnet/minecraft/class_247; field_16885 NOT_OR - f Lnet/minecraft/class_247; field_16894 NOT_FIRST -c net/minecraft/class_249 net/minecraft/util/math/shapes/VoxelShapeCube -c net/minecraft/class_246 net/minecraft/util/math/shapes/DoubleRangeList - m ()I size size - m (I)D getDouble getDouble - f I field_1365 field_197854_a -c net/minecraft/class_251 net/minecraft/util/math/shapes/VoxelShapePart - m (III)Z method_1044 contains - m ()I method_1047 getYSize - m ()I method_1050 getXSize - m (III)Z method_1063 isFilled - m (Lnet/minecraft/class_251$class_252;Lnet/minecraft/class_2335;)V method_1061 forEachFaceOnAxis - m (Lnet/minecraft/class_2350$class_2351;)I method_1045 getEnd - m (IIIII)Z method_1054 isXZRectangleFull - m (Lnet/minecraft/class_2350$class_2351;)I method_1055 getStart - m ()I method_1048 getZSize - m (Lnet/minecraft/class_2350$class_2351;II)I method_1058 lastFilled - m (Lnet/minecraft/class_2350$class_2351;)I method_1051 getSize - m (Lnet/minecraft/class_2335;III)Z method_1057 isFilledWithRotation - m (IIIIZ)V method_1060 setZAxisLine - m (IIII)Z method_1059 isZAxisLineFull - m (Lnet/minecraft/class_251$class_253;Z)V method_1064 forEachEdge - m (Lnet/minecraft/class_2335;III)Z method_1062 containsWithRotation - m (Lnet/minecraft/class_251$class_253;Lnet/minecraft/class_2335;Z)V method_1052 forEachEdgeOnAxis - m (IIIZZ)V method_1049 setFilled - m ()Z method_1056 isEmpty - m (Lnet/minecraft/class_251$class_253;Z)V method_1053 forEachBox - m (Lnet/minecraft/class_251$class_252;)V method_1046 forEachFace - f I field_1374 xSize - f I field_1373 ySize - f I field_1372 zSize - f [Lnet/minecraft/class_2350$class_2351; field_1375 AXIS_VALUES -c net/minecraft/class_251$class_253 net/minecraft/util/math/shapes/VoxelShapePart$ILineConsumer - m (IIIIII)V consume consume -c net/minecraft/class_251$class_252 net/minecraft/util/math/shapes/VoxelShapePart$IFaceConsumer - m (Lnet/minecraft/class_2350;III)V consume consume -c net/minecraft/class_248 net/minecraft/util/math/shapes/DoubleCubeMergingList - f I field_1368 gcd - f I field_1369 secondSize - f Lnet/minecraft/class_246; field_1367 field_212436_a - f I field_1370 firstSize -c net/minecraft/class_250 net/minecraft/util/math/shapes/SimpleDoubleMerger - f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1371 list -c net/minecraft/class_3727 net/minecraft/util/math/shapes/EntitySelectionContext - m (Lnet/minecraft/class_3611;)Z method_27868 func_237495_b_ - m (Lnet/minecraft/class_3611;)Z method_27867 func_237494_a_ - f Z field_16451 sneaking - f Ljava/util/function/Predicate; field_24425 fluidPredicate - f Lnet/minecraft/class_3726; field_17593 DUMMY - f Lnet/minecraft/class_1792; field_17594 item - f D field_16450 posY -c net/minecraft/class_3727$1 net/minecraft/util/math/shapes/EntitySelectionContext$1 -c net/minecraft/class_254 net/minecraft/util/math/shapes/IndirectMerger - f Lit/unimi/dsi/fastutil/ints/IntArrayList; field_1376 list1 - f Lit/unimi/dsi/fastutil/ints/IntArrayList; field_1378 list2 - f Lit/unimi/dsi/fastutil/doubles/DoubleArrayList; field_1377 field_197856_a -c net/minecraft/class_255 net/minecraft/util/math/shapes/IDoubleListMerger - m (Lnet/minecraft/class_255$class_256;)Z method_1065 forMergedIndexes - m ()Lit/unimi/dsi/fastutil/doubles/DoubleList; method_1066 func_212435_a -c net/minecraft/class_255$class_256 net/minecraft/util/math/shapes/IDoubleListMerger$IConsumer - m (III)Z merge merge -c net/minecraft/class_257 net/minecraft/util/math/shapes/NonOverlappingMerger - m (I)D getDouble getDouble - m (Lnet/minecraft/class_255$class_256;)Z method_1067 func_199637_b - m (Lnet/minecraft/class_255$class_256;III)Z method_1068 func_199636_a - m ()I size size - f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1381 list1 - f Z field_1380 field_199640_c - f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1379 list2 -c net/minecraft/class_261 net/minecraft/util/math/shapes/OffsetDoubleList - m ()I size size - m (I)D getDouble getDouble - f D field_1386 offset - f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1387 delegate -c net/minecraft/class_263 net/minecraft/util/math/shapes/SplitVoxelShape - m (Lnet/minecraft/class_251;Lnet/minecraft/class_2350$class_2351;I)Lnet/minecraft/class_251; method_1088 makeShapePart - f Lnet/minecraft/class_2350$class_2351; field_1396 axis - f Lnet/minecraft/class_265; field_1397 shape - f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_1395 field_223415_d -c net/minecraft/class_259 net/minecraft/util/math/shapes/VoxelShapes - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_247;)Lnet/minecraft/class_265; method_1072 combineAndSimplify - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_247;)Z method_1074 compare - m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_238;Ljava/util/stream/Stream;D)D method_1085 getAllowedOffset - m (Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_247;Lnet/minecraft/class_251;Lnet/minecraft/class_251;III)Z method_1075 func_199861_a - m ()Lnet/minecraft/class_265; method_1073 empty - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_2350;)Z method_1083 isCubeSideCovered - m (DDD)I method_17943 getDifferenceFloored - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_2350;)Z method_1080 doAdjacentCubeSidesFillSquare - m (Lnet/minecraft/class_265;Lnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_16344 getFaceShape - m (DD)I method_1086 getPrecisionBits - m (Lnet/minecraft/class_255;Lnet/minecraft/class_247;Lnet/minecraft/class_251;ILnet/minecraft/class_251;IIII)Z method_1076 func_199860_a - m ()Lnet/minecraft/class_249; method_1087 func_199863_c - m (Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_255;Lnet/minecraft/class_251;Lnet/minecraft/class_251;Lnet/minecraft/class_247;)Z method_1071 join - m (DDDDDD)Lnet/minecraft/class_265; method_1081 create - m ([DLnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_238;Lnet/minecraft/class_265;)V method_17946 func_216388_a - m (Lnet/minecraft/class_247;Lnet/minecraft/class_251;IILnet/minecraft/class_251;IIIII)Z method_1070 func_199862_a - m (Lnet/minecraft/class_265;[Lnet/minecraft/class_265;)Lnet/minecraft/class_265; method_17786 or - m (Lnet/minecraft/class_238;Lnet/minecraft/class_4538;DLnet/minecraft/class_3726;Lnet/minecraft/class_2335;Ljava/util/stream/Stream;)D method_17944 getAllowedOffset - m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_238;Lnet/minecraft/class_4538;DLnet/minecraft/class_3726;Ljava/util/stream/Stream;)D method_17945 getAllowedOffset - m (ILit/unimi/dsi/fastutil/doubles/DoubleList;Lit/unimi/dsi/fastutil/doubles/DoubleList;ZZ)Lnet/minecraft/class_255; method_1069 makeListMerger - m (Lnet/minecraft/class_238;)Lnet/minecraft/class_265; method_1078 create - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Lnet/minecraft/class_265; method_1084 or - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Z method_20713 faceShapeCovers - m ()Lnet/minecraft/class_265; method_1077 fullCube - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_247;)Lnet/minecraft/class_265; method_1082 combine - m (II)J method_1079 lcm - f Lnet/minecraft/class_265; field_1385 FULL_CUBE - f Lnet/minecraft/class_265; field_17669 INFINITY - f Lnet/minecraft/class_265; field_1384 EMPTY -c net/minecraft/class_259$class_260 net/minecraft/util/math/shapes/VoxelShapes$ILineConsumer - m (DDDDDD)V consume consume -c net/minecraft/class_265 net/minecraft/util/math/shapes/VoxelShape - m (Lnet/minecraft/class_2350$class_2351;DI)Z method_1101 func_197761_a - m (Lnet/minecraft/class_2350$class_2351;)Lit/unimi/dsi/fastutil/doubles/DoubleList; method_1109 getValues - m ()Lnet/minecraft/class_238; method_1107 getBoundingBox - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_1098 doProject - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_265; method_20538 project - m ()Ljava/util/List; method_1090 toBoundingBoxList - m (Lnet/minecraft/class_2335;Lnet/minecraft/class_238;D)D method_1103 getAllowedOffset - m (Lnet/minecraft/class_2350$class_2351;)D method_1091 getStart - m (Lnet/minecraft/class_2350$class_2351;)D method_1105 getEnd - m (Lnet/minecraft/class_259$class_260;)V method_1089 forEachBox - m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_238;D)D method_1108 getAllowedOffset - m (DDD)Z method_1095 contains - m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3965; method_1092 rayTrace - m ()Z method_1110 isEmpty - m (Lnet/minecraft/class_259$class_260;)V method_1104 forEachEdge - m (Lnet/minecraft/class_2350$class_2351;DD)D method_1102 max - m (Ljava/util/List;DDDDDD)V method_1111 func_203431_a - m (Lnet/minecraft/class_259$class_260;IIIIII)V method_1106 func_197750_b - m (DDD)Lnet/minecraft/class_265; method_1096 withOffset - m ()Ljava/lang/String; toString toString - m ()Lnet/minecraft/class_265; method_1097 simplify - m (Lnet/minecraft/class_2350$class_2351;D)I method_1100 getClosestIndex - m ([Lnet/minecraft/class_265;DDDDDD)V method_1094 func_197763_a - m (Lnet/minecraft/class_2350$class_2351;I)D method_1099 getValueUnchecked - m (Lnet/minecraft/class_259$class_260;Lit/unimi/dsi/fastutil/doubles/DoubleList;Lit/unimi/dsi/fastutil/doubles/DoubleList;Lit/unimi/dsi/fastutil/doubles/DoubleList;IIIIII)V method_1112 func_224789_a - f [Lnet/minecraft/class_265; field_19318 projectionCache - f Lnet/minecraft/class_251; field_1401 part -c net/minecraft/class_262 net/minecraft/util/math/shapes/PartSplitVoxelShape - f I field_1394 endZ - f I field_1392 startX - f I field_1388 endY - f I field_1389 endX - f Lnet/minecraft/class_251; field_1393 part - f I field_1390 startZ - f I field_1391 startY -c net/minecraft/class_268 net/minecraft/scoreboard/ScorePlayerTeam - m ()Lnet/minecraft/class_2561; method_1144 getPrefix - m ()Lnet/minecraft/class_2561; method_1136 getSuffix - m (Lnet/minecraft/class_270$class_271;)V method_1145 setCollisionRule - m (Lnet/minecraft/class_270;Lnet/minecraft/class_2561;)Lnet/minecraft/class_5250; method_1142 func_237500_a_ - m (I)V method_1146 setFriendlyFlags - m ()Lnet/minecraft/class_5250; method_1148 func_237501_d_ - m (Lnet/minecraft/class_270$class_272;)V method_1149 setNameTagVisibility - m ()Lnet/minecraft/class_2561; method_1140 getDisplayName - m (Lnet/minecraft/class_2561;)V method_1139 setSuffix - m (Z)V method_1143 setSeeFriendlyInvisiblesEnabled - m (Lnet/minecraft/class_270$class_272;)V method_1133 setDeathMessageVisibility - m (Z)V method_1135 setAllowFriendlyFire - m (Lnet/minecraft/class_124;)V method_1141 setColor - m (Lnet/minecraft/class_2561;)V method_1137 setDisplayName - m ()I method_1147 getFriendlyFlags - m (Lnet/minecraft/class_2561;)V method_1138 setPrefix - f Z field_1416 canSeeFriendlyInvisibles - f Lnet/minecraft/class_270$class_272; field_1423 nameTagVisibility - f Z field_1417 allowFriendlyFire - f Lnet/minecraft/class_270$class_272; field_1422 deathMessageVisibility - f Lnet/minecraft/class_2561; field_1419 suffix - f Lnet/minecraft/class_2561; field_1414 displayName - f Lnet/minecraft/class_2561; field_1418 prefix - f Lnet/minecraft/class_124; field_1424 color - f Lnet/minecraft/class_269; field_1420 scoreboard - f Lnet/minecraft/class_270$class_271; field_1425 collisionRule - f Ljava/lang/String; field_1421 name - f Lnet/minecraft/class_2583; field_24195 field_237499_m_ - f Ljava/util/Set; field_1415 membershipSet -c net/minecraft/class_266 net/minecraft/scoreboard/ScoreObjective - m ()Lnet/minecraft/class_274; method_1116 getCriteria - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_1119 func_237497_a_ - m ()Ljava/lang/String; method_1113 getName - m (Lnet/minecraft/class_2561;)V method_1121 setDisplayName - m ()Lnet/minecraft/class_2561; method_1120 func_197890_e - m ()Lnet/minecraft/class_2561; method_27441 func_237498_g_ - m ()Lnet/minecraft/class_274$class_275; method_1118 getRenderType - m ()Lnet/minecraft/class_269; method_1117 getScoreboard - m ()Lnet/minecraft/class_2561; method_1114 getDisplayName - m (Lnet/minecraft/class_274$class_275;)V method_1115 setRenderType - f Lnet/minecraft/class_2561; field_1402 displayName - f Ljava/lang/String; field_1405 name - f Lnet/minecraft/class_2561; field_24194 field_237496_e_ - f Lnet/minecraft/class_274; field_1406 objectiveCriteria - f Lnet/minecraft/class_269; field_1404 scoreboard - f Lnet/minecraft/class_274$class_275; field_1403 renderType -c net/minecraft/class_269 net/minecraft/scoreboard/Scoreboard - m ()Ljava/util/Collection; method_1196 getTeamNames - m (Ljava/lang/String;Lnet/minecraft/class_266;)Lnet/minecraft/class_267; method_1180 getOrCreateScore - m (Lnet/minecraft/class_2499;Ljava/util/Collection;)V method_1156 func_197894_a - m ()Ljava/util/Collection; method_1163 func_197897_d - m (Lnet/minecraft/class_266;)V method_1173 onObjectiveRemoved - m (Ljava/lang/String;)Lnet/minecraft/class_266; method_1170 getObjective - m (Lnet/minecraft/class_268;)V method_1193 onTeamRemoved - m (Ljava/lang/String;Lnet/minecraft/class_268;)Z method_1172 addPlayerToTeam - m (I)Lnet/minecraft/class_266; method_1189 getObjectiveInDisplaySlot - m (Lnet/minecraft/class_274;)Ljava/util/List; method_1179 func_197903_a - m (Lnet/minecraft/class_268;)V method_1160 onTeamAdded - m (Ljava/lang/String;Lnet/minecraft/class_266;)Lnet/minecraft/class_267; method_1187 func_197904_e - m ()[Ljava/lang/String; method_1186 getDisplaySlotStrings - m (Ljava/lang/String;)Z method_1181 hasObjective - m (Lnet/minecraft/class_1297;)V method_1150 removeEntity - m (Ljava/lang/String;)I method_1192 getObjectiveDisplaySlotNumber - m (Lnet/minecraft/class_268;)V method_1191 removeTeam - m (Ljava/lang/String;)Z method_1195 removePlayerFromTeams - m (Ljava/lang/String;)Lnet/minecraft/class_268; method_1171 createTeam - m (Lnet/minecraft/class_267;)Z method_1177 func_209546_b - m (Ljava/lang/String;Lnet/minecraft/class_274;Lnet/minecraft/class_2561;Lnet/minecraft/class_274$class_275;)Lnet/minecraft/class_266; method_1168 addObjective - m (Lnet/minecraft/class_266;)V method_1185 onObjectiveAdded - m (Ljava/lang/String;)Lnet/minecraft/class_268; method_1164 getPlayersTeam - m (Ljava/lang/String;Lnet/minecraft/class_266;)Z method_1183 entityHasObjective - m (Ljava/lang/String;Lnet/minecraft/class_266;)V method_1155 removeObjectiveFromEntity - m (Lnet/minecraft/class_274;Ljava/lang/String;Ljava/util/function/Consumer;)V method_1162 forAllObjectives - m (Ljava/lang/String;)Ljava/util/Map; method_1174 func_197898_k - m (Lnet/minecraft/class_2499;)V method_1188 func_197905_a - m ()Ljava/util/Collection; method_1178 getObjectiveNames - m (Ljava/lang/String;)Lnet/minecraft/class_266; method_1165 getOrCreateObjective - m ()Ljava/util/Collection; method_1151 getScoreObjectives - m (Ljava/lang/String;Lnet/minecraft/class_268;)V method_1157 removePlayerFromTeam - m (Lnet/minecraft/class_268;)V method_1154 onTeamChanged - m (Lnet/minecraft/class_266;)V method_1194 removeObjective - m ()Ljava/util/Collection; method_1159 getTeams - m (I)Ljava/lang/String; method_1167 getObjectiveDisplaySlot - m (Ljava/lang/String;)V method_1152 onPlayerRemoved - m (Lnet/minecraft/class_266;)Ljava/util/Collection; method_1184 getSortedScores - m ()Lnet/minecraft/class_2499; method_1169 func_197902_i - m (Lnet/minecraft/class_266;)V method_1175 onObjectiveChanged - m (Ljava/lang/String;)Lnet/minecraft/class_268; method_1153 getTeam - m (Ljava/lang/String;)Ljava/util/Map; method_1166 getObjectivesForEntity - m (Ljava/lang/String;Lnet/minecraft/class_266;)V method_1190 onPlayerScoreRemoved - m (ILnet/minecraft/class_266;)V method_1158 setObjectiveInDisplaySlot - m (Ljava/util/function/Consumer;Ljava/lang/String;Lnet/minecraft/class_266;)V method_1182 func_197906_a - m (Lnet/minecraft/class_2499;Lnet/minecraft/class_267;)V method_1161 func_197896_a - m (Lnet/minecraft/class_267;)V method_1176 onScoreChanged - f Ljava/util/Map; field_1427 teamMemberships - f Ljava/util/Map; field_1429 scoreObjectiveCriterias - f [Lnet/minecraft/class_266; field_1432 objectiveDisplaySlots - f [Ljava/lang/String; field_1430 displaySlots - f Ljava/util/Map; field_1426 teams - f Ljava/util/Map; field_1431 entitiesScoreObjectives - f Ljava/util/Map; field_1428 scoreObjectives -c net/minecraft/class_267 net/minecraft/scoreboard/Score - m (I)V method_1128 setScorePoints - m ()Z method_1131 isLocked - m ()I method_1126 getScorePoints - m ()Ljava/lang/String; method_1129 getPlayerName - m ()V method_1130 incrementScore - m (Z)V method_1125 setLocked - m ()V method_1132 reset - m ()Lnet/minecraft/class_266; method_1127 getObjective - m (I)V method_1124 increaseScore - m ()Lnet/minecraft/class_269; method_1122 getScoreScoreboard - m (Lnet/minecraft/class_267;Lnet/minecraft/class_267;)I method_1123 func_210221_a - f Lnet/minecraft/class_269; field_1407 scoreboard - f Lnet/minecraft/class_266; field_1412 objective - f Z field_1408 forceUpdate - f Z field_1411 locked - f Ljava/lang/String; field_1409 scorePlayerName - f I field_1410 scorePoints - f Ljava/util/Comparator; field_1413 SCORE_COMPARATOR -c net/minecraft/class_270 net/minecraft/scoreboard/Team - m ()Lnet/minecraft/class_270$class_272; method_1200 getDeathMessageVisibility - m ()Lnet/minecraft/class_270$class_271; method_1203 getCollisionRule - m ()Z method_1199 getSeeFriendlyInvisiblesEnabled - m ()Z method_1205 getAllowFriendlyFire - m ()Lnet/minecraft/class_124; method_1202 getColor - m ()Ljava/util/Collection; method_1204 getMembershipCollection - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_5250; method_1198 func_230427_d_ - m ()Lnet/minecraft/class_270$class_272; method_1201 getNameTagVisibility - m ()Ljava/lang/String; method_1197 getName - m (Lnet/minecraft/class_270;)Z method_1206 isSameTeam -c net/minecraft/class_270$class_271 net/minecraft/scoreboard/Team$CollisionRule - m (Lnet/minecraft/class_270$class_271;)Ljava/lang/String; method_1207 func_199871_b - m (Lnet/minecraft/class_270$class_271;)Lnet/minecraft/class_270$class_271; method_1208 func_199870_a - m ()Lnet/minecraft/class_2561; method_1209 getDisplayName - m ()[Lnet/minecraft/class_270$class_271; values values - m (Ljava/lang/String;)Lnet/minecraft/class_270$class_271; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_270$class_271; method_1210 getByName - f Ljava/util/Map; field_1438 nameMap - f [Lnet/minecraft/class_270$class_271; field_1439 $VALUES - f Ljava/lang/String; field_1436 name - f Lnet/minecraft/class_270$class_271; field_1437 ALWAYS - f Lnet/minecraft/class_270$class_271; field_1435 NEVER - f Lnet/minecraft/class_270$class_271; field_1434 PUSH_OTHER_TEAMS - f I field_1433 id - f Lnet/minecraft/class_270$class_271; field_1440 PUSH_OWN_TEAM -c net/minecraft/class_270$class_272 net/minecraft/scoreboard/Team$Visible - m (Lnet/minecraft/class_270$class_272;)Lnet/minecraft/class_270$class_272; method_1211 func_199872_a - m (Lnet/minecraft/class_270$class_272;)Ljava/lang/String; method_1212 func_199873_b - m (Ljava/lang/String;)Lnet/minecraft/class_270$class_272; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_270$class_272; method_1213 getByName - m ()Lnet/minecraft/class_2561; method_1214 getDisplayName - m ()[Lnet/minecraft/class_270$class_272; values values - f Lnet/minecraft/class_270$class_272; field_1443 NEVER - f Lnet/minecraft/class_270$class_272; field_1444 HIDE_FOR_OTHER_TEAMS - f Lnet/minecraft/class_270$class_272; field_1446 HIDE_FOR_OWN_TEAM - f Ljava/util/Map; field_1447 nameMap - f I field_1441 id - f [Lnet/minecraft/class_270$class_272; field_1448 $VALUES - f Ljava/lang/String; field_1445 internalName - f Lnet/minecraft/class_270$class_272; field_1442 ALWAYS -c net/minecraft/class_273 net/minecraft/scoreboard/ScoreboardSaveData - m ()Lnet/minecraft/class_2499; method_1217 teamsToNbt - m (Lnet/minecraft/class_2487;)V method_1221 readDisplayConfig - m (Lnet/minecraft/class_2487;)V method_1222 fillInDisplaySlots - m (Lnet/minecraft/class_269;)V method_1218 setScoreboard - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_274;)V method_17947 func_215164_a - m (Lnet/minecraft/class_268;Lnet/minecraft/class_2499;)V method_1215 loadTeamPlayers - m (Lnet/minecraft/class_2499;)V method_1219 readTeams - m ()Lnet/minecraft/class_2499; method_1216 objectivesToNbt - m (Lnet/minecraft/class_2499;)V method_1220 readObjectives - f Lnet/minecraft/class_2487; field_1450 delayedInitNbt - f Lorg/apache/logging/log4j/Logger; field_1451 LOGGER - f Lnet/minecraft/class_269; field_1449 scoreboard -c net/minecraft/class_274 net/minecraft/scoreboard/ScoreCriteria - m (Ljava/lang/String;ILnet/minecraft/class_3448;)Ljava/util/Optional; method_17948 func_216392_a - m ()Ljava/lang/String; method_1225 getName - m (Ljava/lang/String;)Ljava/util/Optional; method_1224 func_216390_a - m ()Lnet/minecraft/class_274$class_275; method_1227 getRenderType - m (Lnet/minecraft/class_3448;Lnet/minecraft/class_2960;)Ljava/util/Optional; method_1223 func_216391_a - m ()Z method_1226 isReadOnly - f [Lnet/minecraft/class_274; field_1466 TEAM_KILL - f Lnet/minecraft/class_274$class_275; field_1467 renderType - f Ljava/lang/String; field_1454 name - f Lnet/minecraft/class_274; field_1465 LEVEL - f Lnet/minecraft/class_274; field_1452 ARMOR - f Lnet/minecraft/class_274; field_1460 XP - f Lnet/minecraft/class_274; field_1456 DEATH_COUNT - f Lnet/minecraft/class_274; field_1468 DUMMY - f Lnet/minecraft/class_274; field_1462 TRIGGER - f Lnet/minecraft/class_274; field_1457 TOTAL_KILL_COUNT - f Lnet/minecraft/class_274; field_1453 HEALTH - f Z field_1461 readOnly - f Lnet/minecraft/class_274; field_1463 PLAYER_KILL_COUNT - f Lnet/minecraft/class_274; field_1459 AIR - f Ljava/util/Map; field_1455 INSTANCES - f [Lnet/minecraft/class_274; field_1458 KILLED_BY_TEAM - f Lnet/minecraft/class_274; field_1464 FOOD -c net/minecraft/class_274$class_275 net/minecraft/scoreboard/ScoreCriteria$RenderType - m (Ljava/lang/String;)Lnet/minecraft/class_274$class_275; method_1229 byId - m ()[Lnet/minecraft/class_274$class_275; values values - m (Ljava/lang/String;)Lnet/minecraft/class_274$class_275; valueOf valueOf - m ()Ljava/lang/String; method_1228 getId - f [Lnet/minecraft/class_274$class_275; field_1473 $VALUES - f Lnet/minecraft/class_274$class_275; field_1471 HEARTS - f Ljava/util/Map; field_1470 field_211841_d - f Ljava/lang/String; field_1469 field_211840_c - f Lnet/minecraft/class_274$class_275; field_1472 INTEGER -c net/minecraft/class_3673 net/minecraft/client/util/NativeUtil - m ()D method_15974 getTime - m ()V method_15973 crash -c net/minecraft/class_4225 net/minecraft/client/audio/SoundSystem - m (Lnet/minecraft/class_4225$class_4105;)Lnet/minecraft/class_4224; method_19663 getSource - m ()J method_20050 openDevice - m (Lnet/minecraft/class_4224;)V method_19662 release - m ()V method_19664 unload - m ()I method_20297 getMaxChannels - m ()Ljava/lang/String; method_20296 getDebugString - m ()Lnet/minecraft/class_4227; method_19665 getListener - m ()V method_19661 init - m ()Lorg/apache/logging/log4j/Logger; method_24869 func_237502_e_ - f J field_18898 device - f Lnet/minecraft/class_4225$class_4276; field_19183 DUMMY_HANDLER - f Lnet/minecraft/class_4225$class_4276; field_19185 streamingHandler - f Lorg/apache/logging/log4j/Logger; field_18897 LOGGER - f Lnet/minecraft/class_4225$class_4276; field_19184 staticHandler - f J field_18899 context - f Lnet/minecraft/class_4227; field_18902 listener -c net/minecraft/class_4225$class_4276 net/minecraft/client/audio/SoundSystem$IHandler - m ()I method_20298 getMaxSoundSources - m ()I method_20299 getActiveSoundSourceCount - m ()Lnet/minecraft/class_4224; method_19666 getSource - m ()V method_19668 unload - m (Lnet/minecraft/class_4224;)Z method_19667 freeSource -c net/minecraft/class_4225$class_4226 net/minecraft/client/audio/SoundSystem$HandlerImpl - f Ljava/util/Set; field_18904 activeSoundSources - f I field_18903 maxSoundSources -c net/minecraft/class_4225$class_4105 net/minecraft/client/audio/SoundSystem$Mode - m (Ljava/lang/String;)Lnet/minecraft/class_4225$class_4105; valueOf valueOf - m ()[Lnet/minecraft/class_4225$class_4105; values values - f Lnet/minecraft/class_4225$class_4105; field_18353 STREAMING - f [Lnet/minecraft/class_4225$class_4105; field_18354 $VALUES - f Lnet/minecraft/class_4225$class_4105; field_18352 STATIC -c net/minecraft/class_4225$1 net/minecraft/client/audio/SoundSystem$1 -c net/minecraft/class_4224 net/minecraft/client/audio/SoundSource - m (Lnet/minecraft/class_243;)V method_19641 updateSource - m (I)V method_19640 readFromStream - m (F)V method_19651 setLinearAttenuation - m (F)V method_19647 setGain - m (I)V method_19652 func_216431_c - m (I)V method_19648 func_216424_b - m ()Lnet/minecraft/class_4224; method_19638 allocateNewSource - m (F)V method_19639 setPitch - m (Z)V method_19649 setRelative - m (Z)V method_19645 setLooping - m ()V method_19657 setNoAttenuation - m (Lnet/minecraft/class_4231;)V method_19642 bindBuffer - m ()I method_19660 removeProcessedBuffers - m ()V method_19655 stop - m ()I method_19659 getState - m (Lnet/minecraft/class_4234;)V method_19643 playStreamableSounds - m ()V method_19658 tick - m ()Z method_19656 isStopped - m ()V method_19646 close - m ()V method_19654 resume - m ()V method_19653 pause - m ()V method_19650 play - m (Ljavax/sound/sampled/AudioFormat;I)I method_19644 getSampleSize - f Lnet/minecraft/class_4234; field_18896 audioStream - f I field_18895 defaultByteBufferCapacity - f Ljava/util/concurrent/atomic/AtomicBoolean; field_18894 playing - f I field_18893 id - f Lorg/apache/logging/log4j/Logger; field_18892 LOGGER -c net/minecraft/class_4228 net/minecraft/client/audio/OggAudioStream - m ()Z method_19677 readToBuffer - m ()V method_19678 clearInputBuffer - m (Ljava/nio/FloatBuffer;Ljava/nio/FloatBuffer;Lnet/minecraft/class_4228$class_4229;)V method_19676 copyFromDualChannels - m ()V close close - m (Ljava/nio/FloatBuffer;Lnet/minecraft/class_4228$class_4229;)V method_19675 copyFromSingleChannel - m ()Ljava/nio/ByteBuffer; method_19721 readOggSound - m (Lnet/minecraft/class_4228$class_4229;)Z method_19674 readOgg - f J field_18907 pointer - f Ljavax/sound/sampled/AudioFormat; field_18908 format - f Ljava/nio/ByteBuffer; field_18910 buffer - f Ljava/io/InputStream; field_18909 stream -c net/minecraft/class_4228$class_4229 net/minecraft/client/audio/OggAudioStream$Buffer - m (F)V method_19680 appendOggAudioBytes - m (Lnet/minecraft/class_4228$class_4229;)I method_19681 func_216448_a - m ()V method_19682 createBuffer - m ()Ljava/nio/ByteBuffer; method_19679 mergeBuffers - f I field_18913 filledBytes - f I field_18912 bufferCapacity - f Ljava/util/List; field_18911 storedBuffers - f Ljava/nio/ByteBuffer; field_18914 currentBuffer -c net/minecraft/class_4227 net/minecraft/client/audio/Listener - m ()F method_19669 getGain - m (Lnet/minecraft/class_243;)V method_19671 setPosition - m (F)V method_19670 setGain - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V method_19672 setOrientation - m ()Lnet/minecraft/class_243; method_27268 getClientLocation - m ()V method_19673 init - f Lnet/minecraft/class_243; field_24051 clientLocation - f F field_18906 gain -c net/minecraft/class_4231 net/minecraft/client/audio/AudioStreamBuffer - m ()Ljava/util/OptionalInt; method_19686 getBuffer - m ()Ljava/util/OptionalInt; method_19688 getUntrackedBuffer - m ()V method_19687 deleteBuffer - f Ljava/nio/ByteBuffer; field_18916 inputBuffer - f Ljavax/sound/sampled/AudioFormat; field_18917 audioFormat - f I field_18919 buffer - f Z field_18918 hasBuffer -c net/minecraft/class_4230 net/minecraft/client/audio/ALUtils - m (I)Ljava/lang/String; method_20052 toALCErrorString - m (JLjava/lang/String;)Z method_20051 checkALCError - m (Ljava/lang/String;)Z method_19684 checkALError - m (I)Ljava/lang/String; method_19683 toALErrorString - m (Ljavax/sound/sampled/AudioFormat;)I method_19685 getFormat - f Lorg/apache/logging/log4j/Logger; field_18915 LOGGER -c net/minecraft/class_390 net/minecraft/client/gui/fonts/providers/IGlyphProvider - m ()V close close - m (I)Lnet/minecraft/class_383; method_2040 getGlyphInfo - m ()Lit/unimi/dsi/fastutil/ints/IntSet; method_27442 func_230428_a_ -c net/minecraft/class_379 net/minecraft/client/gui/fonts/IGlyph - m (Z)F method_16798 getAdvance - m ()F getAdvance getAdvance - m ()F method_16800 getShadowOffset - m ()F method_16799 getBoldOffset - m ()F method_16797 getBearingX -c net/minecraft/class_383 net/minecraft/client/gui/fonts/IGlyphInfo - m ()I method_2031 getWidth - m (II)V method_2030 uploadGlyph - m ()F method_2028 func_211200_h - m ()F method_2027 func_211199_g - m ()F method_2034 func_211198_f - m ()Z method_2033 isColored - m ()F method_2035 getOversample - m ()F method_15976 getBearingY - m ()I method_2032 getHeight - m ()F method_2029 func_211204_i -c net/minecraft/class_4573 com/mojang/blaze3d/systems/IRenderCall - m ()V execute execute -c net/minecraft/class_395 net/minecraft/client/gui/fonts/providers/TrueTypeGlyphProvider - m (Lnet/minecraft/class_395;)F method_2058 func_211613_f - m (Lnet/minecraft/class_395;)F method_2052 func_211615_d - m (I)Z method_27443 func_237505_c_ - m (Lnet/minecraft/class_395;)F method_2057 func_211616_c - m (Lnet/minecraft/class_395;)F method_2054 func_211611_b - m (Lnet/minecraft/class_395;)F method_2055 func_211261_a - m (Lnet/minecraft/class_395;)Lorg/lwjgl/stb/STBTTFontinfo; method_2050 func_211612_e - m (I)Lnet/minecraft/class_395$class_397; method_2051 getGlyphInfo - f F field_2324 ascent - f Ljava/nio/ByteBuffer; field_21839 field_230146_a_ - f F field_2320 shiftX - f F field_2318 shiftY - f F field_2325 scale - f F field_2321 oversample - f Lit/unimi/dsi/fastutil/ints/IntSet; field_2319 chars - f Lorg/lwjgl/stb/STBTTFontinfo; field_2323 fontInfo -c net/minecraft/class_395$class_397 net/minecraft/client/gui/fonts/providers/TrueTypeGlyphProvider$GlpyhInfo - f F field_2334 field_212464_d - f I field_2337 height - f F field_2333 field_212465_e - f F field_2332 advanceWidth - f Lnet/minecraft/class_395; field_2336 field_211590_a - f I field_2335 glyphIndex - f I field_2338 width -c net/minecraft/class_395$1 net/minecraft/client/gui/fonts/providers/TrueTypeGlyphProvider$1 -c net/minecraft/class_276 net/minecraft/client/shader/Framebuffer - m (II)V method_1237 framebufferRender - m (IIZ)V method_1234 resize - m (IIZ)V method_1231 createBuffers - m ()V method_22598 func_227589_f_ - m (IIZ)V method_22594 framebufferRenderExt - m (IIZ)V method_22596 resizeRaw - m (IIZ)V method_1233 framebufferRenderExtRaw - m (IIZ)V method_22599 func_227590_f_ - m (IIZ)V method_22600 func_227591_g_ - m ()I method_30278 func_242997_g - m (FFFF)V method_1236 setFramebufferColor - m ()V method_1241 bindFramebufferTexture - m ()V method_1242 unbindFramebufferTexture - m ()V method_1240 unbindFramebuffer - m ()V method_1238 deleteFramebuffer - m ()I method_30277 func_242996_f - m ()V method_1239 checkFramebufferComplete - m (I)V method_1232 setFramebufferFilter - m (Z)V method_22595 bindFramebufferRaw - m (Lnet/minecraft/class_276;)V method_29329 func_237506_a_ - m (Z)V method_22597 func_227587_d_ - m (Z)V method_1235 bindFramebuffer - m (Z)V method_1230 framebufferClear - f I field_1475 framebufferTexture - f I field_1474 depthBuffer - f Z field_1478 useDepth - f I field_1476 framebufferObject - f [F field_1479 framebufferColor - f I field_1483 framebufferFilter - f I field_1480 framebufferWidth - f I field_1477 framebufferHeight - f I field_1482 framebufferTextureWidth - f I field_1481 framebufferTextureHeight -c net/minecraft/class_4491 com/mojang/blaze3d/Empty3i - f I field_20454 x - f I field_20455 y - f I field_20456 z - f Ljava/util/List; field_20453 linkedRenderCalls -c net/minecraft/class_301 net/minecraft/client/util/LWJGLMemoryUntracker - m ()Ljava/lang/invoke/MethodHandle; method_1408 func_199874_a - m (Lorg/lwjgl/system/Pointer;)V method_1406 untrack - m (J)V method_1407 untrack - f Ljava/lang/invoke/MethodHandle; field_1643 HANDLE -c net/minecraft/class_3674 net/minecraft/client/ClipboardHelper - m (JLorg/lwjgl/glfw/GLFWErrorCallbackI;)Ljava/lang/String; method_15977 getClipboardString - m (JLjava/nio/ByteBuffer;[B)V method_15978 copyToClipboard - m (JLjava/lang/String;)V method_15979 setClipboardString - f Ljava/nio/ByteBuffer; field_16236 buffer -c net/minecraft/class_4492 net/minecraft/client/shader/FramebufferConstants - f I field_20463 GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT - f I field_20458 GL_RENDERBUFFER - f I field_20464 GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER - f I field_20459 GL_COLOR_ATTACHMENT0 - f I field_20465 GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER - f I field_20460 GL_DEPTH_ATTACHMENT - f I field_20461 GL_FRAMEBUFFER_COMPLETE - f I field_20462 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT - f I field_20457 GL_FRAMEBUFFER -c net/minecraft/class_543 net/minecraft/client/renderer/ScreenSize - f Ljava/util/OptionalInt; field_3282 fullscreenWidth - f Z field_3283 fullscreen - f I field_3285 width - f Ljava/util/OptionalInt; field_3286 fullscreenHeight - f I field_3284 height -c net/minecraft/class_4493 com/mojang/blaze3d/platform/GlStateManager - m ()V method_22082 disablePolygonOffset - m (Lnet/minecraft/class_4493$class_1036;I)V method_21969 texGenMode - m ()I method_29334 getActiveTextureId - m ()Z method_29330 isFabulous - m (I)V method_22069 clientActiveTexture - m ()V method_22047 disableDepthTest - m (I)V method_22045 useProgram - m (II)V method_22886 alpha - m (FFF)V method_21942 normal3f - m ()V method_22074 disableFog - m ()V method_21920 enableRescaleNormal - m (ILjava/nio/FloatBuffer;)V method_22019 uniform3f - m ()V method_21997 popAttributes - m (IIIIIIII)V method_29331 copySubImage - m (IIII)V method_21950 blendFuncSeparate - m (IIIIIILjava/nio/ByteBuffer;)V method_21956 readPixels - m (F)V method_21978 fogStart - m (II)V method_22042 bindFramebuffer - m (I)V method_22087 clearStencil - m ()V method_22084 enableLineOffset - m (I)V method_22071 fogMode - m (II)V method_21947 colorMaterial - m (III)V method_22017 stencilFunc - m ()V method_22050 enableDepthTest - m (I)V method_22607 glEnableVertexAttribArray - m (I)V method_22048 deleteProgram - m ()V method_22012 disableAlphaTest - m (Ljava/nio/FloatBuffer;)V method_22884 func_209238_c - m (IFF)V method_21946 multiTexCoord2f - m ()V method_21922 disableRescaleNormal - m (I)V method_21907 matrixMode - m (FFFF)Ljava/nio/FloatBuffer; method_22613 getBuffer - m (ILjava/nio/FloatBuffer;)V method_22007 uniform2f - m (F)V method_21998 fogEnd - m (IIIIIIIIII)V method_29332 blitFramebuffer - m ()V method_23282 setupOutline - m (ILjava/lang/CharSequence;)V method_21961 shaderSource - m (I)V method_22083 shadeModel - m ()I method_29333 getFrameBufferAttachmentParam - m (Lnet/minecraft/class_4493$class_1036;ILjava/nio/FloatBuffer;)V method_21970 texGenParam - m (I)[Lnet/minecraft/class_4493$class_1039; method_21925 func_227614_E_ - m ()V method_22078 disableCull - m (III)V method_22024 stencilOp - m (IF)V method_21945 alphaFunc - m ()V method_21930 clearCurrentColor - m ()V method_22040 enableColorMaterial - m (II)V method_22067 pixelStore - m ()V method_21935 pushLightingAttributes - m (ILjava/nio/FloatBuffer;)V method_21989 getMatrix - m ()I method_21934 getError - m ()V method_22889 mulTextureByProjModelView - m (I)Lnet/minecraft/class_4493$class_1039; method_21927 func_227616_F_ - m ()V method_21912 disableTexture - m (IIII)V method_22025 viewport - m (IIIJ)V method_22038 vertexPointer - m (II)V method_22030 uniform1i - m (I)I method_22035 createShader - m (IIF)V method_21985 texParameter - m (IIIII)V method_21951 framebufferTexture2D - m (F)V method_21940 fogDensity - m (I[F)V method_22033 fog - m ()I method_22068 genFramebuffers - m ()V method_22080 enablePolygonOffset - m ()V method_22044 disableColorMaterial - m (I)V method_22066 glActiveTexture - m (III)V method_22037 drawArrays - m (IF)V method_21983 pixelTransfer - m ()V method_22072 enableFog - m (II)V method_23281 color - m (ILjava/nio/FloatBuffer;)V method_22026 uniform4f - m (I)V method_22041 compileShader - m ()V method_21976 pushTextureAttributes - m (DDDDDD)V method_21939 ortho - m (IIII)V method_22018 glBlendFuncSeparate - m (IIIJ)V method_22032 texCoordPointer - m ()I method_21914 genTexture - m (I)V method_22085 stencilMask - m (ILjava/lang/CharSequence;)I method_21990 getUniformLocation - m (II)V method_22036 bindBuffer - m (I)V method_22079 deleteTexture - m (Z)V method_21974 depthMask - m (II)V method_22016 attachShader - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;Lnet/minecraft/class_1159;)V method_22616 setupLighting - m (ILjava/nio/IntBuffer;)V method_21992 uniform2i - m (IIIIJ)V method_21957 getTexImage - m (IZLjava/nio/FloatBuffer;)V method_22009 uniformMatrix4f - m ()I method_22062 createProgram - m (I)V method_22054 deleteBuffers - m ()V method_22028 enableLighting - m (FFFF)V method_22000 color4f - m ([I)V method_30499 deleteTextures - m ()V method_21928 popMatrix - m (I)V method_22606 enableVertexAttribArray - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V method_24221 setupScaledLighting - m ()V method_22887 setupEndPortalTexGen - m (FF)V method_21941 polygonOffset - m (II)V method_22055 fogi - m (Lnet/minecraft/class_4493$class_1036;)Lnet/minecraft/class_4493$class_1037; method_22010 getTexGen - m (I)V method_22015 blendEquation - m (II)Ljava/lang/String; method_22052 getProgramInfoLog - m (ILjava/lang/CharSequence;)I method_22006 getAttribLocation - m ()V method_21908 disableColorLogicOp - m (IIIZIJ)V method_22609 vertexAttribPointer - m (I)V method_22081 bindTexture - m (II)Ljava/lang/String; method_22049 getShaderInfoLog - m ()V method_22076 enableCull - m (II)I method_22023 getShader - m (IZLjava/nio/FloatBuffer;)V method_21993 uniformMatrix3f - m (D)V method_21936 clearDepth - m (FFFF)V method_21981 rotatef - m (I)Lnet/minecraft/class_4493$class_1018; method_21931 func_227620_H_ - m ()I method_22065 genBuffers - m (ILjava/nio/IntBuffer;)V method_21964 uniform1i - m ()V method_22034 disableLighting - m (I)V method_22060 deleteFramebuffers - m (ILjava/nio/ByteBuffer;I)V method_21962 bufferData - m (I)[Lnet/minecraft/class_4493$class_1018; method_21929 func_227618_G_ - m (I)I method_22063 checkFramebufferStatus - m (ZZZZ)V method_21975 colorMask - m (I)Ljava/lang/String; method_21921 getString - m (II)V method_22058 polygonMode - m ()V method_22888 clearTexGen - m ()V method_21910 enableTexture - m (I)V method_22029 deleteShader - m (IIII)V method_22885 color - m (IIIJ)V method_22043 colorPointer - m (III)V method_21949 texEnv - m (II)V method_21984 blendFunc - m (IZLjava/nio/FloatBuffer;)V method_21966 uniformMatrix2f - m (I)V method_22075 logicOp - m (IIIIIIIIJ)V method_21953 texSubImage2D - m ()V method_22053 disableBlend - m (ILjava/nio/IntBuffer;)V method_22020 uniform4i - m (FFFF)V method_21943 clearColor - m (Lnet/minecraft/class_4493$class_1036;)V method_21995 disableTexGen - m (Lnet/minecraft/class_1159;)V method_21971 multMatrix - m (IILjava/nio/FloatBuffer;)V method_21960 light - m (FFF)V method_21999 translatef - m ()V method_21924 loadIdentity - m ()V method_22021 enableAlphaTest - m (Ljava/nio/FloatBuffer;)V method_21972 multMatrix - m (DDD)V method_21938 translated - m (I)I method_21923 getInteger - m (I)V method_22051 linkProgram - m (ILjava/nio/FloatBuffer;)V method_21991 uniform1f - m (I)V method_21913 enableClientState - m ()V method_23283 teardownOutline - m ()V method_22086 disableLineOffset - m (F)V method_22013 lineWidth - m (I)V method_21944 enableLight - m (IIIIIIIILjava/nio/IntBuffer;)V method_21954 texImage2D - m (III)V method_21986 texParameter - m (IIJ)V method_22031 normalPointer - m ()V method_22056 enableBlend - m (ILjava/nio/IntBuffer;)V method_22008 uniform3i - m (I)V method_22077 activeTexture - m (FFFF)V method_22883 blendColor - m (II)I method_22002 getProgram - m (Lnet/minecraft/class_4493$class_1036;)V method_21968 enableTexGen - m (IZ)V method_21965 clear - m (Lorg/lwjgl/opengl/GLCapabilities;)Ljava/lang/String; method_21973 init - m (FFF)V method_21980 scalef - m ()V method_21926 pushMatrix - m ([I)V method_30498 genTextures - m (DDD)V method_21937 scaled - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V method_24222 setupGui3DMatrix - m (I)V method_22001 depthFunc - m (II)V method_22610 setupOverlayColor - m ()V method_22618 teardownOverlayColor - m (I)V method_21911 disableClientState - m ()V method_21906 enableColorLogicOp - m (ILjava/nio/FloatBuffer;)V method_21963 lightModel - m (III)I method_22003 getTexLevelParameter - f I field_20484 shadeModel - f Ljava/nio/FloatBuffer; field_20466 MATRIX_BUFFER - f Lnet/minecraft/class_4493$class_1017; field_20472 BLEND - f Lnet/minecraft/class_4493$class_1038; field_20478 TEX_GEN - f Lnet/minecraft/class_4493$class_1029; field_20474 FOG - f Lnet/minecraft/class_4493$class_1020; field_20487 COLOR - f Lnet/minecraft/class_4493$class_1035; field_20480 STENCIL - f Lnet/minecraft/class_4493$class_1022; field_20486 COLOR_MASK - f [Lnet/minecraft/class_4493$class_1018; field_20470 LIGHT_ENABLE - f I field_20482 activeTexture - f Lnet/minecraft/class_4493$class_1031; field_20476 POLY_OFFSET - f Ljava/nio/FloatBuffer; field_20771 FLOAT_4_BUFFER - f Lnet/minecraft/class_4493$class_1023; field_20471 COLOR_MATERIAL - f Lnet/minecraft/class_4493$class_1026; field_20473 DEPTH - f Lnet/minecraft/class_4493$class_1010; field_20488 fboMode - f Lnet/minecraft/class_4493$class_1016; field_20468 ALPHA_TEST - f Lnet/minecraft/class_4493$class_1025; field_20475 CULL - f Lnet/minecraft/class_4493$class_1021; field_20477 COLOR_LOGIC - f Lnet/minecraft/class_4493$class_1018; field_20469 LIGHTING - f [Lnet/minecraft/class_4493$class_1039; field_20483 TEXTURES - f Lnet/minecraft/class_4493$class_5343; field_25251 supportType - f Lnet/minecraft/class_4493$class_1018; field_20485 RESCALE_NORMAL -c net/minecraft/class_4493$class_5343 com/mojang/blaze3d/platform/GlStateManager$SupportType - m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_5343; valueOf valueOf - m ()[Lnet/minecraft/class_4493$class_5343; values values - f Lnet/minecraft/class_4493$class_5343; field_25253 BASE - f Lnet/minecraft/class_4493$class_5343; field_25254 EXT - f Lnet/minecraft/class_4493$class_5343; field_25255 NONE - f [Lnet/minecraft/class_4493$class_5343; field_25256 $VALUES -c net/minecraft/class_4493$class_1010 com/mojang/blaze3d/platform/GlStateManager$FramebufferExtension - m ()[Lnet/minecraft/class_4493$class_1010; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_1010; valueOf valueOf - f Lnet/minecraft/class_4493$class_1010; field_4983 ARB - f Lnet/minecraft/class_4493$class_1010; field_4984 EXT - f [Lnet/minecraft/class_4493$class_1010; field_4982 $VALUES - f Lnet/minecraft/class_4493$class_1010; field_4981 BASE -c net/minecraft/class_4493$class_1028 com/mojang/blaze3d/platform/GlStateManager$FogMode - m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_1028; valueOf valueOf - m ()[Lnet/minecraft/class_4493$class_1028; values values - f I field_5093 param - f Lnet/minecraft/class_4493$class_1028; field_5095 LINEAR - f Lnet/minecraft/class_4493$class_1028; field_5096 EXP - f [Lnet/minecraft/class_4493$class_1028; field_5094 $VALUES - f Lnet/minecraft/class_4493$class_1028; field_5097 EXP2 -c net/minecraft/class_4493$class_1029 com/mojang/blaze3d/platform/GlStateManager$FogState - f F field_5101 density - f I field_5102 mode - f F field_5098 end - f Lnet/minecraft/class_4493$class_1018; field_5100 fog - f F field_5099 start -c net/minecraft/class_4493$class_1030 com/mojang/blaze3d/platform/GlStateManager$LogicOp - m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_1030; valueOf valueOf - m ()[Lnet/minecraft/class_4493$class_1030; values values - f Lnet/minecraft/class_4493$class_1030; field_5104 NOR - f Lnet/minecraft/class_4493$class_1030; field_5115 NOOP - f Lnet/minecraft/class_4493$class_1030; field_5105 OR - f Lnet/minecraft/class_4493$class_1030; field_5120 AND - f I field_5108 opcode - f Lnet/minecraft/class_4493$class_1030; field_5117 AND_REVERSE - f Lnet/minecraft/class_4493$class_1030; field_5112 AND_INVERTED - f Lnet/minecraft/class_4493$class_1030; field_5116 OR_INVERTED - f Lnet/minecraft/class_4493$class_1030; field_5103 CLEAR - f Lnet/minecraft/class_4493$class_1030; field_5107 SET - f Lnet/minecraft/class_4493$class_1030; field_5110 OR_REVERSE - f [Lnet/minecraft/class_4493$class_1030; field_5106 $VALUES - f Lnet/minecraft/class_4493$class_1030; field_5111 XOR - f Lnet/minecraft/class_4493$class_1030; field_5118 COPY - f Lnet/minecraft/class_4493$class_1030; field_5119 EQUIV - f Lnet/minecraft/class_4493$class_1030; field_5113 COPY_INVERTED - f Lnet/minecraft/class_4493$class_1030; field_5109 INVERT - f Lnet/minecraft/class_4493$class_1030; field_5114 NAND -c net/minecraft/class_4493$class_1031 com/mojang/blaze3d/platform/GlStateManager$PolygonOffsetState - f F field_5124 factor - f Lnet/minecraft/class_4493$class_1018; field_5123 polyOffset - f F field_5122 units - f Lnet/minecraft/class_4493$class_1018; field_5121 lineOffset -c net/minecraft/class_4493$class_4535 com/mojang/blaze3d/platform/GlStateManager$SourceFactor - m ()[Lnet/minecraft/class_4493$class_4535; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_4535; valueOf valueOf - f Lnet/minecraft/class_4493$class_4535; field_22534 ONE - f Lnet/minecraft/class_4493$class_4535; field_22536 ONE_MINUS_CONSTANT_COLOR - f Lnet/minecraft/class_4493$class_4535; field_22535 ONE_MINUS_CONSTANT_ALPHA - f [Lnet/minecraft/class_4493$class_4535; field_22546 $VALUES - f Lnet/minecraft/class_4493$class_4535; field_22537 ONE_MINUS_DST_ALPHA - f Lnet/minecraft/class_4493$class_4535; field_22538 ONE_MINUS_DST_COLOR - f Lnet/minecraft/class_4493$class_4535; field_22540 ONE_MINUS_SRC_COLOR - f Lnet/minecraft/class_4493$class_4535; field_22539 ONE_MINUS_SRC_ALPHA - f Lnet/minecraft/class_4493$class_4535; field_22541 SRC_ALPHA - f Lnet/minecraft/class_4493$class_4535; field_22530 CONSTANT_ALPHA - f I field_22545 param - f Lnet/minecraft/class_4493$class_4535; field_22532 DST_ALPHA - f Lnet/minecraft/class_4493$class_4535; field_22531 CONSTANT_COLOR - f Lnet/minecraft/class_4493$class_4535; field_22542 SRC_ALPHA_SATURATE - f Lnet/minecraft/class_4493$class_4535; field_22533 DST_COLOR - f Lnet/minecraft/class_4493$class_4535; field_22544 ZERO - f Lnet/minecraft/class_4493$class_4535; field_22543 SRC_COLOR -c net/minecraft/class_4493$class_1034 com/mojang/blaze3d/platform/GlStateManager$StencilFunc - f I field_5148 func - f I field_5147 mask - f I field_16203 ref -c net/minecraft/class_4493$class_1035 com/mojang/blaze3d/platform/GlStateManager$StencilState - f I field_5152 sfail - f Lnet/minecraft/class_4493$class_1034; field_5149 func - f I field_5153 mask - f I field_5151 dpfail - f I field_5150 dppass -c net/minecraft/class_4493$class_1036 com/mojang/blaze3d/platform/GlStateManager$TexGen - m ()[Lnet/minecraft/class_4493$class_1036; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_1036; valueOf valueOf - f Lnet/minecraft/class_4493$class_1036; field_5156 R - f Lnet/minecraft/class_4493$class_1036; field_5155 T - f [Lnet/minecraft/class_4493$class_1036; field_5158 $VALUES - f Lnet/minecraft/class_4493$class_1036; field_5157 Q - f Lnet/minecraft/class_4493$class_1036; field_5154 S -c net/minecraft/class_4493$class_1037 com/mojang/blaze3d/platform/GlStateManager$TexGenCoord - f I field_5161 coord - f I field_5160 mode - f Lnet/minecraft/class_4493$class_1018; field_5159 textureGen -c net/minecraft/class_4493$class_1038 com/mojang/blaze3d/platform/GlStateManager$TexGenState - f Lnet/minecraft/class_4493$class_1037; field_5163 t - f Lnet/minecraft/class_4493$class_1037; field_5165 q - f Lnet/minecraft/class_4493$class_1037; field_5164 r - f Lnet/minecraft/class_4493$class_1037; field_5162 s -c net/minecraft/class_4493$class_1039 com/mojang/blaze3d/platform/GlStateManager$TextureState - f I field_5167 textureName - f Lnet/minecraft/class_4493$class_1018; field_5166 texture2DState -c net/minecraft/class_4493$class_1040 com/mojang/blaze3d/platform/GlStateManager$Viewport - m ()[Lnet/minecraft/class_4493$class_1040; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_1040; valueOf valueOf - f I field_5170 w - f I field_5171 y - f I field_5172 x - f [Lnet/minecraft/class_4493$class_1040; field_5173 $VALUES - f I field_5168 h - f Lnet/minecraft/class_4493$class_1040; field_5169 INSTANCE -c net/minecraft/class_4493$class_1016 com/mojang/blaze3d/platform/GlStateManager$AlphaState - f F field_5043 ref - f I field_5044 func - f Lnet/minecraft/class_4493$class_1018; field_5042 test -c net/minecraft/class_4493$class_1017 com/mojang/blaze3d/platform/GlStateManager$BlendState - f I field_5046 dstFactorAlpha - f I field_5049 srcFactorRgb - f I field_5047 srcFactorAlpha - f Lnet/minecraft/class_4493$class_1018; field_5045 blend - f I field_5048 dstFactorRgb -c net/minecraft/class_4493$class_1018 com/mojang/blaze3d/platform/GlStateManager$BooleanState - m (Z)V method_4470 setEnabled - m ()V method_4471 enable - m ()V method_4469 disable - f Z field_5051 currentState - f I field_5050 capability -c net/minecraft/class_4493$class_1020 com/mojang/blaze3d/platform/GlStateManager$Color - f F field_5057 red - f F field_5055 blue - f F field_5056 green - f F field_5054 alpha -c net/minecraft/class_4493$class_1021 com/mojang/blaze3d/platform/GlStateManager$ColorLogicState - f Lnet/minecraft/class_4493$class_1018; field_5058 colorLogicOp - f I field_5059 logicOpcode -c net/minecraft/class_4493$class_1022 com/mojang/blaze3d/platform/GlStateManager$ColorMask - f Z field_5061 blue - f Z field_5060 alpha - f Z field_5063 red - f Z field_5062 green -c net/minecraft/class_4493$class_1023 com/mojang/blaze3d/platform/GlStateManager$ColorMaterialState - f I field_5066 face - f Lnet/minecraft/class_4493$class_1018; field_5064 colorMaterial - f I field_5065 mode -c net/minecraft/class_4493$class_1025 com/mojang/blaze3d/platform/GlStateManager$CullState - f Lnet/minecraft/class_4493$class_1018; field_5072 cullFace - f I field_5073 mode -c net/minecraft/class_4493$class_1026 com/mojang/blaze3d/platform/GlStateManager$DepthState - f I field_5075 func - f Z field_5076 mask - f Lnet/minecraft/class_4493$class_1018; field_5074 test -c net/minecraft/class_4493$class_4534 com/mojang/blaze3d/platform/GlStateManager$DestFactor - m (Ljava/lang/String;)Lnet/minecraft/class_4493$class_4534; valueOf valueOf - m ()[Lnet/minecraft/class_4493$class_4534; values values - f Lnet/minecraft/class_4493$class_4534; field_22526 SRC_COLOR - f Lnet/minecraft/class_4493$class_4534; field_22515 CONSTANT_COLOR - f Lnet/minecraft/class_4493$class_4534; field_22516 DST_ALPHA - f [Lnet/minecraft/class_4493$class_4534; field_22529 $VALUES - f Lnet/minecraft/class_4493$class_4534; field_22527 ZERO - f Lnet/minecraft/class_4493$class_4534; field_22517 DST_COLOR - f Lnet/minecraft/class_4493$class_4534; field_22518 ONE - f Lnet/minecraft/class_4493$class_4534; field_22519 ONE_MINUS_CONSTANT_ALPHA - f Lnet/minecraft/class_4493$class_4534; field_22520 ONE_MINUS_CONSTANT_COLOR - f Lnet/minecraft/class_4493$class_4534; field_22521 ONE_MINUS_DST_ALPHA - f Lnet/minecraft/class_4493$class_4534; field_22522 ONE_MINUS_DST_COLOR - f Lnet/minecraft/class_4493$class_4534; field_22523 ONE_MINUS_SRC_ALPHA - f Lnet/minecraft/class_4493$class_4534; field_22524 ONE_MINUS_SRC_COLOR - f I field_22528 param - f Lnet/minecraft/class_4493$class_4534; field_22514 CONSTANT_ALPHA - f Lnet/minecraft/class_4493$class_4534; field_22525 SRC_ALPHA -c net/minecraft/class_4493$1 com/mojang/blaze3d/platform/GlStateManager$1 - f [I field_5129 field_212903_a - f [I field_25252 field_237516_b_ - f [I field_20489 field_227773_a_ -c net/minecraft/class_1008 net/minecraft/client/renderer/GlDebugTextUtils - m (I)Ljava/lang/String; method_4222 getSource - m (ILjava/lang/String;)V method_4223 registerGlConstantName - m (I)Ljava/lang/String; method_4228 getType - m (I)Ljava/lang/String; method_4225 getFallbackString - m (IZ)V method_4227 setDebugVerbosity - m (IIIIIJJ)V method_4224 logDebugMessage - m (I)Ljava/lang/String; method_4226 getSeverity - m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_4229 func_209249_b - f Lcom/google/common/base/Joiner; field_4920 NEWLINE_JOINER - f Ljava/nio/FloatBuffer; field_4916 FLOAT_BUFFER - f Ljava/util/Map; field_4922 GL_CONSTANT_NAMES - f Lcom/google/common/base/Joiner; field_4918 STATEMENT_JOINER - f Ljava/nio/IntBuffer; field_4917 INT_BUFFER - f Ljava/nio/ByteBuffer; field_4924 BYTE_BUFFER - f Ljava/util/Map; field_4923 SAVED_STATES - f Lorg/apache/logging/log4j/Logger; field_4921 LOGGER - f Ljava/util/List; field_4919 DEBUG_LEVELS_ARB - f Ljava/util/List; field_4915 DEBUG_LEVELS -c net/minecraft/class_3675 net/minecraft/client/util/InputMappings - m (JIDD)V method_15984 setCursorPosAndMode - m (Ljava/lang/String;)Lnet/minecraft/class_3675$class_306; method_15981 getInputByName - m (JLorg/lwjgl/glfw/GLFWKeyCallbackI;Lorg/lwjgl/glfw/GLFWCharModsCallbackI;)V method_15986 setKeyCallbacks - m (JLorg/lwjgl/glfw/GLFWCursorPosCallbackI;Lorg/lwjgl/glfw/GLFWMouseButtonCallbackI;Lorg/lwjgl/glfw/GLFWScrollCallbackI;Lorg/lwjgl/glfw/GLFWDropCallbackI;)V method_15983 setMouseCallbacks - m (JZ)V method_21736 setRawMouseInput - m (II)Lnet/minecraft/class_3675$class_306; method_15985 getInputByCode - m (JI)Z method_15987 isKeyDown - m ()Z method_21735 func_224790_a - f I field_20334 GLFW_RAW_MOUSE - f Ljava/lang/invoke/MethodHandle; field_20333 GLFW_RAW_MOUSE_SUPPORTED - f Lnet/minecraft/class_3675$class_306; field_16237 INPUT_INVALID -c net/minecraft/class_3675$1 net/minecraft/client/util/InputMappings$1 -c net/minecraft/class_3675$class_306 net/minecraft/client/util/InputMappings$Input - m ()Ljava/lang/String; method_1441 getTranslationKey - m ()Ljava/util/Map; method_1445 func_237521_e_ - m ()Ljava/lang/String; toString toString - m ()Lnet/minecraft/class_2561; method_27445 func_237520_d_ - m ()I hashCode hashCode - m (Lnet/minecraft/class_3675$class_307;ILjava/lang/String;)Lnet/minecraft/class_2561; method_27444 func_237519_a_ - m ()Lnet/minecraft/class_3675$class_307; method_1442 getType - m ()Ljava/util/OptionalInt; method_30103 func_241552_e_ - m ()I method_1444 getKeyCode - m (Ljava/lang/Object;)Z equals equals - f Lnet/minecraft/class_3675$class_307; field_1666 type - f Ljava/lang/String; field_1663 name - f Ljava/util/Map; field_1664 REGISTRY - f I field_1665 keyCode - f Lnet/minecraft/class_3528; field_24196 field_237518_d_ -c net/minecraft/class_3675$class_307 net/minecraft/client/util/InputMappings$Type - m ()[Lnet/minecraft/class_3675$class_307; values values - m (I)Lnet/minecraft/class_3675$class_306; method_1447 getOrMakeInput - m (Ljava/lang/Integer;Ljava/lang/String;)Lnet/minecraft/class_2561; method_27449 func_237527_b_ - m (Ljava/lang/Integer;Ljava/lang/String;)Lnet/minecraft/class_2561; method_27450 func_237528_c_ - m (Ljava/lang/Integer;Ljava/lang/String;)Lnet/minecraft/class_2561; method_27447 func_237524_a_ - m (Lnet/minecraft/class_3675$class_307;)Ljava/util/function/BiFunction; method_27446 func_237523_a_ - m (Lnet/minecraft/class_3675$class_307;)Ljava/lang/String; method_1448 func_237526_b_ - m (Lnet/minecraft/class_3675$class_307;Ljava/lang/String;I)V method_1446 registerInput - m (I)Lnet/minecraft/class_3675$class_306; method_27448 func_237525_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_3675$class_307; valueOf valueOf - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_1674 inputs - f Ljava/util/function/BiFunction; field_24197 field_237522_f_ - f Ljava/lang/String; field_1673 name - f Lnet/minecraft/class_3675$class_307; field_1668 KEYSYM - f [Lnet/minecraft/class_3675$class_307; field_1670 $VALUES - f Lnet/minecraft/class_3675$class_307; field_1671 SCANCODE - f Lnet/minecraft/class_3675$class_307; field_1672 MOUSE -c net/minecraft/class_4494 com/mojang/blaze3d/platform/PlatformDescriptors - m ()Ljava/lang/String; method_22090 getGlRenderer - m ()Ljava/lang/String; method_22091 getGlVersion - m ()Ljava/lang/String; method_22089 getCpuInfo - m ()Ljava/lang/String; method_22088 getGlVendor -c net/minecraft/class_311 net/minecraft/client/renderer/GLAllocation - m (I)Ljava/nio/ByteBuffer; method_1596 createDirectByteBuffer - m (I)Ljava/nio/FloatBuffer; method_1597 createDirectFloatBuffer -c net/minecraft/class_308 net/minecraft/client/renderer/RenderHelper - m (Lnet/minecraft/class_1159;)V method_1452 setupDiffuseGuiLighting - m ()V method_22890 enableStandardItemLighting - m ()V method_1450 disableStandardItemLighting - m ()V method_24210 setupGuiFlatDiffuseLighting - m ()V method_24211 setupGui3DDiffuseLighting - m (Lnet/minecraft/class_1159;)V method_27869 setupLevelDiffuseLighting - f Lnet/minecraft/class_1160; field_24426 DEFAULT_LIGHTING - f Lnet/minecraft/class_1160; field_24427 DIFFUSE_LIGHTING - f Lnet/minecraft/class_1160; field_24429 GUI_3D_DIFFUSE_LIGHTING - f Lnet/minecraft/class_1160; field_24428 GUI_FLAT_DIFFUSE_LIGHTING -c net/minecraft/class_3676 net/minecraft/client/renderer/IMonitorFactory - m (J)Lnet/minecraft/class_313; createMonitor createMonitor -c net/minecraft/class_313 net/minecraft/client/Monitor - m ()I method_1618 getVirtualPosY - m ()I method_1621 getVideoModeCount - m ()V method_1615 setup - m (Ljava/util/Optional;)Lnet/minecraft/class_319; method_1614 getVideoModeOrDefault - m ()Lnet/minecraft/class_319; method_1617 getDefaultVideoMode - m ()I method_1616 getVirtualPosX - m (Lnet/minecraft/class_319;)I method_1619 getVideoModeIndex - m ()J method_1622 getMonitorPointer - m (I)Lnet/minecraft/class_319; method_1620 getVideoModeFromIndex - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_319; field_1802 defaultVideoMode - f I field_1798 virtualPosY - f Ljava/util/List; field_1797 videoModes - f I field_1799 virtualPosX - f J field_1800 monitorPointer -c net/minecraft/class_1050 net/minecraft/client/renderer/texture/PngSizeInfo - m (Ljava/io/InputStream;)Lnet/minecraft/class_1050$class_1051; method_4542 func_195695_a - f I field_5227 width - f I field_5226 height -c net/minecraft/class_1050$class_1053 net/minecraft/client/renderer/texture/PngSizeInfo$ReaderSeekable - f Ljava/nio/channels/SeekableByteChannel; field_5234 channel -c net/minecraft/class_1050$class_1051 net/minecraft/client/renderer/texture/PngSizeInfo$Reader - m (I)V method_4545 func_195684_a - m (JI)I method_4544 func_195683_b - m (J)I method_4546 func_195685_a - m ()V close close - m (JJI)I method_4543 func_195682_a - m (JI)V method_4547 func_195686_a - f Z field_5228 field_195687_a -c net/minecraft/class_1050$1 net/minecraft/client/renderer/texture/PngSizeInfo$1 -c net/minecraft/class_1050$class_1052 net/minecraft/client/renderer/texture/PngSizeInfo$ReaderBuffer - m (I)V method_4548 func_195688_b - f J field_5233 field_195690_c - f Ljava/nio/channels/ReadableByteChannel; field_5229 channel - f I field_5232 field_195691_d - f I field_5231 field_195692_e - f I field_5230 field_195693_f -c net/minecraft/class_1011 net/minecraft/client/renderer/texture/NativeImage - m (IIIIIIIZZZZ)V method_4321 uploadTextureSubRaw - m (I)I method_24033 getRed - m (Ljava/io/File;)V method_4325 write - m (IIIII)V method_4326 fillAreaRGBA - m (IIIILnet/minecraft/class_1011;)V method_4300 resizeSubRectTo - m ()V method_4302 untrack - m (Ljava/nio/ByteBuffer;)Lnet/minecraft/class_1011; method_4324 read - m (IZ)V method_4327 downloadFromTexture - m (II)I method_4315 getPixelRGBA - m ()Lnet/minecraft/class_1011$class_1012; method_4318 getFormat - m (IIIIIIIZZ)V method_4312 uploadTextureSub - m (II)B method_4311 getPixelLuminanceOrAlpha - m ()V method_4319 flip - m ()[I method_4322 makePixelArray - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;)Lnet/minecraft/class_1011; method_15990 readBase64 - m (Lnet/minecraft/class_1011$class_1012;Ljava/nio/ByteBuffer;)Lnet/minecraft/class_1011; method_4303 read - m (Lorg/lwjgl/stb/STBTTFontinfo;IIIFFFFII)V method_4316 renderGlyph - m (I)I method_24035 getBlue - m ()I method_4323 getHeight - m (Z)V method_4313 setWrapST - m (I)I method_24030 getAlpha - m (IIIIIIIZZZZ)V method_22620 func_227794_c_ - m (I)I method_24034 getGreen - m (III)V method_4305 setPixelRGBA - m (IIIIIIIZZZZ)V method_22619 uploadTextureSub - m (Ljava/io/InputStream;)Lnet/minecraft/class_1011; method_4309 read - m ()V method_4320 checkImage - m (Lnet/minecraft/class_1011;)V method_4317 copyImageData - m (IIIZ)V method_4301 uploadTextureSub - m (IIII)I method_24031 getCombined - m (Ljava/nio/channels/WritableByteChannel;)Z method_24032 write - m (ZZ)V method_4308 setMinMagFilters - m (IIIIIIZZ)V method_4304 copyAreaRGBA - m ()[B method_24036 getBytes - m ()V close close - m ()I method_4307 getWidth - m (Ljava/nio/file/Path;)V method_4314 write - m (Lnet/minecraft/class_1011$class_1012;Ljava/io/InputStream;)Lnet/minecraft/class_1011; method_4310 read - f Lorg/apache/logging/log4j/Logger; field_21684 LOGGER - f J field_4988 imagePointer - f I field_4989 height - f Ljava/util/Set; field_4992 OPEN_OPTIONS - f Z field_4990 stbiPointer - f J field_4987 size - f Lnet/minecraft/class_1011$class_1012; field_4986 pixelFormat - f I field_4991 width -c net/minecraft/class_1011$1 net/minecraft/client/renderer/texture/NativeImage$1 -c net/minecraft/class_1011$class_1012 net/minecraft/client/renderer/texture/NativeImage$PixelFormat - m ()Z method_4337 hasLuminanceOrAlpha - m ()Z method_4329 hasAlpha - m ()Z method_4338 isSerializable - m (I)Lnet/minecraft/class_1011$class_1012; method_4336 fromChannelCount - m ()I method_4335 getPixelSize - m (Ljava/lang/String;)Lnet/minecraft/class_1011$class_1012; valueOf valueOf - m ()I method_4330 getOffsetAlphaBits - m ()V method_4340 setGlUnpackAlignment - m ()[Lnet/minecraft/class_1011$class_1012; values values - m ()V method_4339 setGlPackAlignment - m ()I method_4332 getOffsetAlpha - m ()I method_4333 getGlFormat - m (Lnet/minecraft/class_1011$class_1012;)I method_4331 func_211655_a - m (I)Lnet/minecraft/class_1011$class_1012; method_4334 func_211652_a - f Z field_4999 hasAlpha - f I field_5006 offsetAlpha - f Z field_5000 hasLuminance - f I field_5007 offsetLuminance - f Z field_5003 blue - f I field_5008 offsetBlue - f Z field_5004 green - f I field_5009 offsetGreen - f Z field_4996 serializable - f Lnet/minecraft/class_1011$class_1012; field_5001 RGB - f Lnet/minecraft/class_1011$class_1012; field_5002 LUMINANCE_ALPHA - f I field_4993 glFormat - f I field_4994 pixelSize - f Lnet/minecraft/class_1011$class_1012; field_4998 LUMINANCE - f Z field_5005 red - f I field_5010 offsetRed - f [Lnet/minecraft/class_1011$class_1012; field_4995 $VALUES - f Lnet/minecraft/class_1011$class_1012; field_4997 RGBA -c net/minecraft/class_1011$class_1013 net/minecraft/client/renderer/texture/NativeImage$PixelFormatGLCode - m (Ljava/lang/String;)Lnet/minecraft/class_1011$class_1013; valueOf valueOf - m ()[Lnet/minecraft/class_1011$class_1013; values values - m ()I method_4341 getGlFormat - f [Lnet/minecraft/class_1011$class_1013; field_5014 $VALUES - f Lnet/minecraft/class_1011$class_1013; field_5016 INTENSITY - f Lnet/minecraft/class_1011$class_1013; field_5012 RGBA - f Lnet/minecraft/class_1011$class_1013; field_5011 RGB - f Lnet/minecraft/class_1011$class_1013; field_5013 LUMINANCE_ALPHA - f I field_5015 glConstant - f Lnet/minecraft/class_1011$class_1013; field_5017 LUMINANCE -c net/minecraft/class_1011$class_1014 net/minecraft/client/renderer/texture/NativeImage$WriteCallback - m (JJI)V invoke invoke - m ()V method_4342 propagateException - f Ljava/nio/channels/WritableByteChannel; field_5018 channel - f Ljava/io/IOException; field_5019 exception -c net/minecraft/class_323 net/minecraft/client/renderer/MonitorHandler - m (JI)V method_1683 onMonitorUpdate - m (III)I method_15991 clamp - m (J)Lnet/minecraft/class_313; method_1680 getMonitor - m ()V method_15992 close - m (Lnet/minecraft/class_1041;)Lnet/minecraft/class_313; method_1681 getMonitor - f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_1993 monitorsById - f Lnet/minecraft/class_3676; field_1991 monitorFactory -c net/minecraft/class_319 net/minecraft/client/renderer/VideoMode - m ()I method_1667 getGreenBits - m ()I method_1672 getBlueBits - m ()I method_1671 getRefreshRate - m (Ljava/lang/Object;)Z equals equals - m ()I method_1668 getWidth - m ()I method_1669 getHeight - m (Ljava/lang/String;)Ljava/util/Optional; method_1665 parseFromSettings - m ()I method_1666 getRedBits - m ()I hashCode hashCode - m ()Ljava/lang/String; method_1670 getSettingsString - m ()Ljava/lang/String; toString toString - f Ljava/util/regex/Pattern; field_1981 PATTERN - f I field_1976 blueBits - f I field_1975 refreshRate - f I field_1978 redBits - f I field_1977 greenBits - f I field_1980 width - f I field_1979 height -c net/minecraft/class_4536 net/minecraft/client/renderer/texture/TextureUtil - m (I)V method_24957 releaseTextureId - m (Ljava/io/InputStream;)Ljava/lang/String; method_24965 readResourceAsString - m (I)V method_24964 bindTexture - m (Lnet/minecraft/class_1011$class_1013;III)V method_24960 prepareImage - m (IIII)V method_24959 prepareImage - m (III)V method_24958 prepareImage - m (Ljava/nio/IntBuffer;II)V method_24963 initTexture - m (Lnet/minecraft/class_1011$class_1013;IIII)V method_24961 prepareImage - m ()I method_24956 generateTextureId - m (Ljava/io/InputStream;)Ljava/nio/ByteBuffer; method_24962 readToBuffer - f Lorg/apache/logging/log4j/Logger; field_22547 LOGGER -c net/minecraft/class_3678 net/minecraft/client/renderer/IWindowEventListener - m ()V method_15993 updateWindowSize - m ()V method_30133 ignoreFirstMove - m (Z)V method_15995 setGameFocused -c net/minecraft/class_1041 net/minecraft/client/MainWindow - m ()I method_22092 getRefreshRate - m (I)V method_15999 setFramerateLimit - m (JZ)V method_30132 onWindowEnterUpdate - m (Ljava/util/Optional;)V method_4505 setVideoMode - m (JII)V method_4488 onWindowSizeUpdate - m (Z)V method_4485 toggleFullscreen - m (Z)V method_4497 setVsync - m (IJ)V method_4482 logGlError - m ()I method_4477 getWindowY - m ()I method_4507 getHeight - m ()Z method_4498 isFullscreen - m ()Ljava/util/Optional; method_4511 getVideoMode - m ()I method_4502 getScaledHeight - m ()V method_4475 update - m ()I method_4480 getWidth - m ()V close close - m (Ljava/lang/String;)V method_24286 setWindowTitle - m ()J method_4490 getHandle - m ()V method_15998 flipFrame - m ()I method_4489 getFramebufferWidth - m (IZ)I method_4476 calcGuiScale - m ()V method_4513 setLogOnGlError - m ()V method_4483 updateFramebufferSize - m (JII)V method_4504 onFramebufferSizeUpdate - m (Z)V method_21668 setRawMouseInput - m (JZ)V method_4494 onWindowFocusUpdate - m ()I method_4499 getWindowX - m (IJ)V method_4501 throwExceptionForGlError - m ()D method_4495 getGuiScaleFactor - m (Ljava/io/InputStream;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/nio/ByteBuffer; method_4510 loadIcon - m (Ljava/lang/String;)V method_4474 setRenderPhase - m (D)V method_15997 setGuiScale - m ()I method_4486 getScaledWidth - m (Ljava/util/function/BiConsumer;)V method_4492 checkGlfwError - m ()V method_4500 toggleFullscreen - m ()I method_4506 getFramebufferHeight - m (Ljava/io/InputStream;Ljava/io/InputStream;)V method_4491 setWindowIcon - m ()V method_4479 updateVideoMode - m ()Z method_22093 shouldClose - m ()Lnet/minecraft/class_313; method_20831 getMonitor - m ()V method_4481 setThrowExceptionOnGlError - m ()I method_16000 getLimitFramerate - m (JII)V method_4478 onWindowPosUpdate - f I field_5175 prevWindowX - f I field_5180 scaledWidth - f D field_5179 guiScaleFactor - f I field_5197 height - f Z field_5177 lastFullscreen - f I field_5198 windowY - f Lnet/minecraft/class_3678; field_5176 mc - f Z field_5186 videoModeChanged - f I field_5174 prevWindowWidth - f Z field_16517 vsync - f J field_5187 handle - f Lorg/apache/logging/log4j/Logger; field_5178 LOGGER - f I field_5185 prevWindowY - f I field_16238 framerateLimit - f Lorg/lwjgl/glfw/GLFWErrorCallback; field_5190 loggingErrorCallback - f Ljava/lang/String; field_5192 renderPhase - f I field_5196 framebufferHeight - f Ljava/util/Optional; field_5193 videoMode - f I field_5194 scaledHeight - f I field_5181 framebufferWidth - f Z field_5191 fullscreen - f I field_5183 windowX - f I field_5182 width - f Lnet/minecraft/class_323; field_5195 monitorHandler - f I field_5184 prevWindowHeight -c net/minecraft/class_1041$1 net/minecraft/client/MainWindow$1 -c net/minecraft/class_1041$class_4716 net/minecraft/client/MainWindow$GlException -c net/minecraft/class_277 net/minecraft/client/util/JSONBlendingMode - m (Ljava/lang/String;)I method_1247 stringToBlendFunction - m (Ljava/lang/String;)I method_1243 stringToBlendFactor - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m ()Z method_1245 isOpaque - m ()V method_1244 apply - f I field_1489 destColorFactor - f I field_1486 blendFunction - f I field_1488 destAlphaFactor - f Z field_1487 separateBlend - f I field_1491 srcColorFactor - f Z field_1485 opaque - f I field_1490 srcAlphaFactor - f Lnet/minecraft/class_277; field_1484 lastApplied -c net/minecraft/class_278 net/minecraft/client/shader/ShaderDefault - m (FF)V method_1255 set - m (Lnet/minecraft/class_1159;)V method_1250 set - m (IIII)V method_1248 set - m (FFF)V method_1249 set - m (FFFF)V method_1254 set - m (FFFF)V method_1252 setSafe - m ([F)V method_1253 set - m (F)V method_1251 set -c net/minecraft/class_3679 net/minecraft/client/shader/IShaderManager - m ()V method_1279 markDirty - m ()I method_1270 getProgram - m ()Lnet/minecraft/class_281; method_1274 getVertexShaderLoader - m ()Lnet/minecraft/class_281; method_1278 getFragmentShaderLoader -c net/minecraft/class_285 net/minecraft/client/shader/ShaderLinkHelper - m (I)V method_22094 func_227804_a_ - m ()I method_1306 createProgram - m (Lnet/minecraft/class_3679;)V method_1304 deleteShader - m (Lnet/minecraft/class_3679;)V method_1307 linkProgram - f Lorg/apache/logging/log4j/Logger; field_1551 LOGGER -c net/minecraft/class_281 net/minecraft/client/shader/ShaderLoader - m (Lnet/minecraft/class_281$class_282;Ljava/lang/String;Ljava/io/InputStream;Ljava/lang/String;)Lnet/minecraft/class_281; method_1283 func_216534_a - m ()Ljava/lang/String; method_1280 getShaderFilename - m (Lnet/minecraft/class_3679;)V method_1281 attachShader - m ()V method_1282 detachShader - f I field_1523 shader - f I field_1522 shaderAttachCount - f Lnet/minecraft/class_281$class_282; field_1524 shaderType - f Ljava/lang/String; field_1525 shaderFilename -c net/minecraft/class_281$class_282 net/minecraft/client/shader/ShaderLoader$ShaderType - m (Lnet/minecraft/class_281$class_282;)I method_1288 func_216533_a - m (Ljava/lang/String;)Lnet/minecraft/class_281$class_282; valueOf valueOf - m ()I method_1287 getShaderMode - m ()Ljava/lang/String; method_1286 getShaderName - m ()Ljava/util/Map; method_1289 getLoadedShaders - m ()Ljava/lang/String; method_1284 getShaderExtension - m ()[Lnet/minecraft/class_281$class_282; values values - f [Lnet/minecraft/class_281$class_282; field_1532 $VALUES - f Lnet/minecraft/class_281$class_282; field_1531 FRAGMENT - f Ljava/util/Map; field_1527 loadedShaders - f I field_1529 shaderMode - f Lnet/minecraft/class_281$class_282; field_1530 VERTEX - f Ljava/lang/String; field_1526 shaderName - f Ljava/lang/String; field_1528 shaderExtension -c net/minecraft/class_287 net/minecraft/client/renderer/BufferBuilder - m ()V method_22892 growBuffer - m (FFF)V method_1341 sortVertexData - m (I)V method_1335 growBuffer - m (Lnet/minecraft/class_293;)V method_23918 setVertexFormat - m (I)I method_16005 roundUpPositive - m ()Z method_22893 isDrawing - m (Ljava/nio/FloatBuffer;FFFII)F method_1319 getDistanceSq - m (Ljava/nio/FloatBuffer;I)V method_22628 limitToVertex - m ()Lcom/mojang/datafixers/util/Pair; method_22632 getNextBuffer - m ()V method_23477 discard - m ()Lnet/minecraft/class_287$class_288; method_1334 getVertexState - m ()V method_1343 reset - m (ILnet/minecraft/class_293;)V method_1328 begin - m ([FII)I method_22625 func_227830_a_ - m ()V method_1326 finishDrawing - m (Lnet/minecraft/class_287$class_288;)V method_1324 setVertexState - f Lorg/apache/logging/log4j/Logger; field_1557 LOGGER - f Lnet/minecraft/class_296; field_1558 vertexFormatElement - f I field_20775 drawStateIndex - f Z field_21594 fastFormat - f Z field_1556 isDrawing - f Z field_21595 fullFormat - f Lnet/minecraft/class_293; field_1565 vertexFormat - f Ljava/nio/ByteBuffer; field_1555 byteBuffer - f Ljava/util/List; field_20774 drawStates - f I field_1567 drawMode - f I field_1554 vertexCount - f I field_1553 vertexFormatIndex - f I field_20884 nextElementBytes - f I field_20776 renderedBytes - f I field_20777 uploadedBytes -c net/minecraft/class_287$1 net/minecraft/client/renderer/BufferBuilder$1 -c net/minecraft/class_287$class_288 net/minecraft/client/renderer/BufferBuilder$State - m (Lnet/minecraft/class_287$class_288;)Ljava/nio/ByteBuffer; method_22894 func_227842_a_ - m (Lnet/minecraft/class_287$class_288;)Lnet/minecraft/class_293; method_22895 func_227843_b_ - f Lnet/minecraft/class_293; field_1570 stateVertexFormat - f Ljava/nio/ByteBuffer; field_20885 stateByteBuffer -c net/minecraft/class_287$class_4574 net/minecraft/client/renderer/BufferBuilder$DrawState - m ()I method_22635 getVertexCount - m ()Lnet/minecraft/class_293; method_22634 getFormat - m ()I method_22636 getDrawMode - f I field_20780 vertexCount - f Lnet/minecraft/class_293; field_20779 format - f I field_20781 drawMode -c net/minecraft/class_284 net/minecraft/client/shader/ShaderUniform - m ()V method_1303 uploadInt - m ()V method_1302 markDirty - m ()V method_1301 uploadFloat - m (II)V method_22095 func_227805_a_ - m ()V method_1300 upload - m ()Ljava/lang/String; method_1298 getShaderName - m (ILjava/lang/CharSequence;)I method_22096 func_227806_a_ - m ()V close close - m (Ljava/lang/String;)I method_1299 parseType - m ()V method_1296 uploadFloatMatrix - m (ILjava/lang/CharSequence;)I method_22097 func_227807_b_ - m (I)V method_1297 setUniformLocation - f Z field_1542 dirty - f I field_1544 uniformCount - f I field_1545 uniformLocation - f Lnet/minecraft/class_3679; field_1541 shaderManager - f Lorg/apache/logging/log4j/Logger; field_1548 LOGGER - f Ljava/nio/IntBuffer; field_1547 uniformIntBuffer - f I field_1543 uniformType - f Ljava/lang/String; field_1546 shaderName - f Ljava/nio/FloatBuffer; field_1549 uniformFloatBuffer -c net/minecraft/class_4584 com/mojang/blaze3d/vertex/IVertexConsumer - m ()Lnet/minecraft/class_296; method_22900 getCurrentElement - m ()V method_1325 nextVertexFormatIndex - m (IS)V method_22898 putShort - m (IB)V method_22896 putByte - m (IF)V method_22897 putFloat - m (SSI)Lnet/minecraft/class_4588; method_22899 texShort - m (F)B method_24212 normalInt -c net/minecraft/class_286 net/minecraft/client/renderer/WorldVertexBufferUploader - m (Ljava/nio/ByteBuffer;ILnet/minecraft/class_293;I)V method_22639 draw - m (Lnet/minecraft/class_287;)V method_1309 draw - m (Lnet/minecraft/class_287;)V method_22638 func_227845_b_ -c net/minecraft/class_4585 com/mojang/blaze3d/vertex/DefaultColorVertexBuilder - m (IIII)V method_22901 setDefaultColor - f I field_20890 defaultRed - f I field_20892 defaultBlue - f I field_20891 defaultGreen - f I field_20893 defaultAlpha - f Z field_20889 defaultColor -c net/minecraft/class_290 net/minecraft/client/renderer/vertex/DefaultVertexFormats - f Lnet/minecraft/class_293; field_20887 POSITION_COLOR_TEX - f Lnet/minecraft/class_296; field_20886 TEX_2SB - f Lnet/minecraft/class_293; field_1575 POSITION_TEX_COLOR - f Lnet/minecraft/class_296; field_1579 NORMAL_3B - f Lnet/minecraft/class_293; field_20888 POSITION_COLOR_TEX_LIGHTMAP - f Lnet/minecraft/class_296; field_1578 PADDING_1B - f Lnet/minecraft/class_296; field_1581 COLOR_4UB - f Lnet/minecraft/class_293; field_21468 POSITION_COLOR_LIGHTMAP - f Lnet/minecraft/class_296; field_1591 TEX_2F - f Lnet/minecraft/class_293; field_1585 POSITION_TEX - f Lnet/minecraft/class_296; field_1583 TEX_2S - f Lnet/minecraft/class_293; field_1584 PARTICLE_POSITION_TEX_COLOR_LMAP - f Lnet/minecraft/class_293; field_1592 POSITION - f Lnet/minecraft/class_296; field_1587 POSITION_3F - f Lnet/minecraft/class_293; field_1576 POSITION_COLOR - f Lnet/minecraft/class_293; field_1586 POSITION_TEX_LIGHTMAP_COLOR - f Lnet/minecraft/class_293; field_1590 BLOCK - f Lnet/minecraft/class_293; field_1577 POSITION_TEX_COLOR_NORMAL - f Lnet/minecraft/class_293; field_1580 ENTITY -c net/minecraft/class_4583 com/mojang/blaze3d/vertex/MatrixApplyingVertexBuilder - m ()V method_22891 reset - f Lnet/minecraft/class_4581; field_21054 normalMatrixInverted - f F field_20882 normalZ - f I field_20878 v - f Lnet/minecraft/class_1159; field_21053 currentTransformMatrixInverted - f Lnet/minecraft/class_4588; field_20866 vertexBuilder - f I field_20877 u - f F field_20871 posY - f F field_20880 normalX - f I field_20879 light - f F field_20870 posX - f F field_20872 posZ - f F field_20881 normalY -c net/minecraft/class_4587 com/mojang/blaze3d/matrix/MatrixStack - m ()V method_22909 pop - m (DDD)V method_22904 translate - m (Lnet/minecraft/class_1158;)V method_22907 rotate - m ()V method_22903 push - m (FFF)V method_22905 scale - m ()Lnet/minecraft/class_4587$class_4665; method_23760 getLast - m (Ljava/util/ArrayDeque;)V method_22908 func_227864_a_ - m ()Z method_22911 clear - f Ljava/util/Deque; field_20898 stack -c net/minecraft/class_4587$class_4665 com/mojang/blaze3d/matrix/MatrixStack$Entry - m ()Lnet/minecraft/class_1159; method_23761 getMatrix - m (Lnet/minecraft/class_4587$class_4665;)Lnet/minecraft/class_4581; method_23480 func_227873_b_ - m (Lnet/minecraft/class_4587$class_4665;)Lnet/minecraft/class_1159; method_23479 func_227871_a_ - m ()Lnet/minecraft/class_4581; method_23762 getNormal - f Lnet/minecraft/class_4581; field_21328 normal - f Lnet/minecraft/class_1159; field_21327 matrix -c net/minecraft/class_4587$1 com/mojang/blaze3d/matrix/MatrixStack$1 -c net/minecraft/class_291 net/minecraft/client/renderer/vertex/VertexBuffer - m (Ljava/lang/Integer;)V method_22641 func_227876_a_ - m (Lnet/minecraft/class_287;)V method_22648 func_227883_e_ - m (Lnet/minecraft/class_287;)V method_22646 func_227882_d_ - m (Lnet/minecraft/class_1159;I)V method_1351 draw - m ()Ljava/lang/Integer; method_22645 func_227879_c_ - m ()Ljava/lang/Integer; method_22647 func_227881_d_ - m ()V close close - m (Lnet/minecraft/class_287;)Ljava/util/concurrent/CompletableFuture; method_22643 uploadLater - m (Ljava/lang/Runnable;)V method_22642 func_227877_a_ - m ()V method_1353 bindBuffer - m (Lnet/minecraft/class_287;)V method_22644 uploadRaw - m ()V method_1354 unbindBuffer - m (Lnet/minecraft/class_287;)V method_1352 upload - f Lnet/minecraft/class_293; field_1595 vertexFormat - f I field_1593 count - f I field_1594 glBufferId -c net/minecraft/class_289 net/minecraft/client/renderer/Tessellator - m ()V method_1350 draw - m ()Lnet/minecraft/class_287; method_1349 getBuffer - m ()Lnet/minecraft/class_289; method_1348 getInstance - f Lnet/minecraft/class_289; field_1573 INSTANCE - f Lnet/minecraft/class_287; field_1574 buffer -c net/minecraft/class_293 net/minecraft/client/renderer/vertex/VertexFormat - m ()I method_1362 getSize - m (Ljava/lang/Object;)Z equals equals - m ()I method_1359 getIntegerSize - m ()Ljava/lang/String; toString toString - m ()Lcom/google/common/collect/ImmutableList; method_1357 getElements - m ()V method_22651 clearBufferState - m (J)V method_22649 setupBufferState - m ()I hashCode hashCode - m (J)V method_22650 func_227893_b_ - f Lcom/google/common/collect/ImmutableList; field_1602 elements - f I field_1600 vertexSize - f Lit/unimi/dsi/fastutil/ints/IntList; field_1597 offsets -c net/minecraft/class_4588 com/mojang/blaze3d/vertex/IVertexBuilder - m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_777;FFFII)V method_22919 addQuad - m (II)Lnet/minecraft/class_4588; method_22921 lightmap - m (Lnet/minecraft/class_4581;FFF)Lnet/minecraft/class_4588; method_23763 normal - m (FFFFFFFFFIIFFF)V method_23919 addVertex - m (DDD)Lnet/minecraft/class_4588; method_22912 pos - m (II)Lnet/minecraft/class_4588; method_22917 overlay - m (FF)Lnet/minecraft/class_4588; method_22913 tex - m ()V method_1344 endVertex - m (I)Lnet/minecraft/class_4588; method_22922 overlay - m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_777;[FFFF[IIZ)V method_22920 addQuad - m (IIII)Lnet/minecraft/class_4588; method_1336 color - m (FFFF)Lnet/minecraft/class_4588; method_22915 color - m (Lnet/minecraft/class_1159;FFF)Lnet/minecraft/class_4588; method_22918 pos - m (FFF)Lnet/minecraft/class_4588; method_22914 normal - m (I)Lnet/minecraft/class_4588; method_22916 lightmap - f Lorg/apache/logging/log4j/Logger; field_21055 LOGGER -c net/minecraft/class_4720 com/mojang/blaze3d/vertex/VertexBuilderUtils - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_4588;)Lnet/minecraft/class_4588; method_24037 newDelegate -c net/minecraft/class_4720$class_4589 com/mojang/blaze3d/vertex/VertexBuilderUtils$DelegatingVertexBuilder - f Lnet/minecraft/class_4588; field_21685 vertexBuilder - f Lnet/minecraft/class_4588; field_21686 delegateBuilder -c net/minecraft/class_296 net/minecraft/client/renderer/vertex/VertexFormatElement - m ()I method_1387 getSize - m (JI)V method_22652 setupBufferState - m (Ljava/lang/Object;)Z equals equals - m ()I method_1385 getIndex - m ()Lnet/minecraft/class_296$class_298; method_1382 getUsage - m ()Lnet/minecraft/class_296$class_297; method_1386 getType - m ()I hashCode hashCode - m ()V method_22653 clearBufferState - m (ILnet/minecraft/class_296$class_298;)Z method_1383 isFirstOrUV - m ()Ljava/lang/String; toString toString - f I field_1612 elementCount - f I field_21329 sizeBytes - f Lnet/minecraft/class_296$class_297; field_1615 type - f I field_1613 index - f Lnet/minecraft/class_296$class_298; field_1614 usage - f Lorg/apache/logging/log4j/Logger; field_1616 LOGGER -c net/minecraft/class_296$class_297 net/minecraft/client/renderer/vertex/VertexFormatElement$Type - m ()[Lnet/minecraft/class_296$class_297; values values - m ()I method_1391 getSize - m (Ljava/lang/String;)Lnet/minecraft/class_296$class_297; valueOf valueOf - m ()Ljava/lang/String; method_1389 getDisplayName - m ()I method_1390 getGlConstant - f [Lnet/minecraft/class_296$class_297; field_1620 $VALUES - f Ljava/lang/String; field_1626 displayName - f I field_1627 glConstant - f Lnet/minecraft/class_296$class_297; field_1623 FLOAT - f Lnet/minecraft/class_296$class_297; field_1622 USHORT - f Lnet/minecraft/class_296$class_297; field_1624 UBYTE - f Lnet/minecraft/class_296$class_297; field_1621 BYTE - f I field_1618 size - f Lnet/minecraft/class_296$class_297; field_1619 UINT - f Lnet/minecraft/class_296$class_297; field_1617 INT - f Lnet/minecraft/class_296$class_297; field_1625 SHORT -c net/minecraft/class_296$class_298 net/minecraft/client/renderer/vertex/VertexFormatElement$Usage - m (I)V method_22659 func_227906_c_ - m (I)V method_22657 func_227904_b_ - m ()Ljava/lang/String; method_1392 getDisplayName - m (I)V method_22654 clearBufferState - m (I)V method_22663 func_227910_e_ - m (I)V method_22661 func_227908_d_ - m (Lnet/minecraft/class_296$class_298;IIIJI)V method_22656 func_227903_a_ - m (IIIJI)V method_22655 setupBufferState - m (I)V method_22665 func_227912_f_ - m ()[Lnet/minecraft/class_296$class_298; values values - m (IIIJI)V method_22666 func_227913_f_ - m (IIIJI)V method_22664 func_227911_e_ - m (IIIJI)V method_22662 func_227909_d_ - m (IIIJI)V method_22660 func_227907_c_ - m (IIIJI)V method_22658 func_227905_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_296$class_298; valueOf valueOf - m (IIIJI)V method_22667 func_227914_g_ - f Lnet/minecraft/class_296$class_298; field_20782 GENERIC - f Ljava/lang/String; field_1630 displayName - f Lnet/minecraft/class_296$class_298; field_1629 PADDING - f [Lnet/minecraft/class_296$class_298; field_1631 $VALUES - f Ljava/util/function/IntConsumer; field_20784 clearState - f Lnet/minecraft/class_296$class_298; field_1633 POSITION - f Lnet/minecraft/class_296$class_298; field_1636 UV - f Lnet/minecraft/class_296$class_298; field_1635 NORMAL - f Lnet/minecraft/class_296$class_298; field_1632 COLOR - f Lnet/minecraft/class_296$class_298$class_4575; field_20783 setupState -c net/minecraft/class_296$class_298$class_4575 net/minecraft/client/renderer/vertex/VertexFormatElement$Usage$ISetupState - m (IIIJI)V setupBufferState setupBufferState -c net/minecraft/class_4324 net/minecraft/client/util/KeyCombo - m ()Ljava/lang/String; toString toString - m ()V method_20832 func_224800_a - m (C)Z method_20833 func_224799_a - f [C field_19453 field_224801_a - f Ljava/lang/Runnable; field_19455 field_224803_c - f I field_19454 field_224802_b -c net/minecraft/class_1161 net/minecraft/util/math/Tuple3d - f D field_5659 z - f D field_5661 x - f D field_5660 y -c net/minecraft/class_4428 net/minecraft/client/util/UploadSpeed - m (JLnet/minecraft/class_4428;)Ljava/lang/String; method_25030 func_237685_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_4428; valueOf valueOf - m (J)Lnet/minecraft/class_4428; method_25027 func_237682_a_ - m ()[Lnet/minecraft/class_4428; values values - m (J)Ljava/lang/String; method_25029 func_237684_b_ - m (JLnet/minecraft/class_4428;)D method_25028 func_237683_a_ - f Lnet/minecraft/class_4428; field_20200 B - f Lnet/minecraft/class_4428; field_20201 KB - f Lnet/minecraft/class_4428; field_20202 MB - f [Lnet/minecraft/class_4428; field_20204 $VALUES - f Lnet/minecraft/class_4428; field_20203 GB -c net/minecraft/class_4325 com/mojang/realmsclient/RealmsMainScreen - m ()Lnet/minecraft/class_4325; method_20902 func_223942_f - m ()V method_20932 func_223895_s - m ()Lnet/minecraft/class_2960; method_25007 func_243064_o - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIIII)V method_20857 func_243044_a - m (Z)Z method_20881 func_237602_a_ - m ()Z method_20916 func_243063_n - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24977 func_243029_M - m (Lnet/minecraft/class_4877;)Z method_25001 func_223991_i - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_31175 func_243066_p - m ()Lnet/minecraft/class_437; method_20911 func_237640_j_ - m (Lnet/minecraft/class_4185;)V method_24997 func_237635_g_ - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4185;)V method_24984 func_243050_a - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25000 func_237639_i_ - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4877;)V method_20879 func_243056_d - m (Lnet/minecraft/class_4877;)Z method_20874 func_223897_b - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24970 func_243025_F - m (Lnet/minecraft/class_4587;)V method_20837 func_237604_b_ - m ()Lnet/minecraft/class_2561; method_30860 func_243073_t - m ()V method_20834 func_223955_A - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_437; method_24983 func_237584_a_ - m (Lnet/minecraft/class_4325;)Ljava/lang/String; method_20929 func_243035_T - m (Lnet/minecraft/class_4325;)I method_20935 func_243037_V - m (Lnet/minecraft/class_4587;IIII)V method_20846 func_237614_c_ - m (Lnet/minecraft/class_4325;Z)Z method_20888 func_243054_b - m ()V method_20934 func_223965_t - m (Lnet/minecraft/class_4587;IIII)V method_20873 func_237620_d_ - m (Z)Z method_20889 func_223934_c - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_20876 func_237607_b_ - m (Lnet/minecraft/class_4185;)V method_24999 func_237637_h_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25010 func_243068_q - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIII)V method_20856 func_243043_a - m ()Lorg/apache/logging/log4j/Logger; method_20908 func_237638_i_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24978 func_243030_N - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4877;)V method_20862 func_237617_c_ - m (Lnet/minecraft/class_4325;J)Lnet/minecraft/class_4877; method_20861 func_237586_a_ - m (Lnet/minecraft/class_4325;)I method_20937 func_243038_W - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25002 func_237641_j_ - m (Lnet/minecraft/class_4587;)V method_20838 func_237613_c_ - m ()Lnet/minecraft/class_2561; method_30859 func_243071_s - m (Lnet/minecraft/class_4877;)Z method_20884 func_223920_c - m ()I method_20835 func_223989_B - m (Lnet/minecraft/class_4587;IIII)V method_20883 func_237626_e_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25008 func_237649_n_ - m (Lnet/minecraft/class_2960;)Z method_23764 func_227931_a_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_4325$class_5220; method_20921 func_243078_w - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_25012 func_243080_y - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4877;)V method_20887 func_243053_b - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIII)V method_20877 func_237616_c_ - m ()Lnet/minecraft/class_2960; method_25009 func_243075_u - m (Lnet/minecraft/class_4877;)Z method_20892 func_223941_d - m (Lnet/minecraft/class_4325;)Ljava/util/List; method_20913 func_243076_u - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24966 func_243020_A - m ()Lnet/minecraft/class_2561; method_30858 func_243069_r - m (Ljava/lang/String;)Z method_23766 func_227934_a_ - m (Lnet/minecraft/class_4325;)J method_20854 func_237651_o_ - m (Lnet/minecraft/class_4185;)V method_24985 func_237598_a_ - m (Lnet/minecraft/class_4877;Lnet/minecraft/class_437;)V method_20853 func_223911_a - m ()V method_20942 func_223939_y - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24968 func_243023_D - m ()Ljava/util/List; method_30854 func_243060_k - m (Lnet/minecraft/class_4587;Ljava/util/List;II)V method_20867 func_237583_a_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24996 func_237634_g_ - m ()Lnet/minecraft/class_2960; method_25004 func_243061_l - m (Lnet/minecraft/class_4587;IIII)V method_20891 func_237630_f_ - m ()Ljava/util/List; method_20924 func_223952_o - m ()V method_20928 func_223930_q - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24976 func_243028_L - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24982 func_243039_X - m (Lnet/minecraft/class_4877;)Z method_20899 func_223959_e - m ()V method_20897 func_223978_e - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4877;)V method_31173 func_243049_a - m (Lnet/minecraft/class_4325;)V method_20939 func_243040_Y - m ()V method_20841 func_223887_H - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIII)V method_20886 func_237628_e_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24998 func_237636_h_ - m (Lnet/minecraft/class_4325;)I method_20925 func_243021_B - m ()Lnet/minecraft/class_2561; method_30857 func_243067_q - m (Lnet/minecraft/class_4325;[Lnet/minecraft/class_2561;)V method_27451 func_243052_a - m (Lnet/minecraft/class_4185;)V method_24988 func_237612_b_ - m ()Z method_20870 func_223990_b - m (DD)Z method_20871 func_223931_b - m ()V method_20943 func_223949_z - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24969 func_243024_E - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIIIZZ)V method_20859 func_243046_a - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24981 func_243033_Q - m (Lnet/minecraft/class_4587;IIII)V method_20898 func_237633_g_ - m ()Lnet/minecraft/class_4360; method_20914 func_237642_k_ - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIII)V method_20894 func_243055_d - m ()Z method_20920 func_223977_m - m (Lnet/minecraft/class_4587;IIIIZZ)V method_20849 func_237581_a_ - m (Lnet/minecraft/class_4185;)V method_24989 func_237618_c_ - m ()V method_20839 func_223923_F - m ()Lnet/minecraft/class_2561; method_30856 func_243065_p - m (Lnet/minecraft/class_4877;)V method_20903 func_223966_f - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25006 func_237647_m_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24974 func_237569_P_ - m ()V method_20882 func_223901_c - m (Lnet/minecraft/class_4325;)V method_20900 func_243079_x - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24992 func_237627_e_ - m (Lnet/minecraft/class_4325;)I method_20927 func_237575_V_ - m ()V method_20940 func_223962_w - m ([Lnet/minecraft/class_2561;)V method_27452 func_237603_a_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_4185; method_20915 func_243077_v - m (Lnet/minecraft/class_4325$class_4866;)Z method_31172 func_243041_a - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIII)V method_20901 func_243057_e - m ()V method_20922 func_223944_n - m (Lnet/minecraft/class_4877;)V method_20906 func_223906_g - m (J)Lnet/minecraft/class_4877; method_20851 func_223967_a - m (Lnet/minecraft/class_4587;IIIIZ)V method_20848 func_237580_a_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24971 func_243026_G - m (Lnet/minecraft/class_4325;)Z method_20931 func_243034_S - m ()V method_20840 func_223984_G - m (Lnet/minecraft/class_4185;)V method_24990 func_237624_d_ - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIZIIZZ)V method_20860 func_243047_a - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24975 func_243027_K - m (Lnet/minecraft/class_4587;IIIII)V method_24987 func_237606_b_ - m (Lnet/minecraft/class_437;)Lnet/minecraft/class_437; method_24986 func_237599_a_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24967 func_243022_C - m (Lnet/minecraft/class_4325;I)I method_20855 func_243042_a - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_24994 func_237631_f_ - m (DD)Z method_20844 func_223979_a - m ()V method_20941 func_223973_x - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4587;IIIIZ)V method_20858 func_243045_a - m ()V method_20936 func_223975_u - m (Z)Z method_20896 func_237619_c_ - m (Lnet/minecraft/class_4877;)V method_31174 func_243059_h - m ()Z method_20842 func_223928_a - m (Lnet/minecraft/class_3300;)V method_23765 func_227932_a_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24979 func_243031_O - m (Lnet/minecraft/class_4185;)V method_24993 func_237629_e_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25011 func_243070_r - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24972 func_237567_N_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25003 func_237643_k_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_20885 func_237615_c_ - m ()I method_20836 func_223932_C - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25013 func_237662_z_ - m (Lnet/minecraft/class_4587;II)V method_20872 func_237605_b_ - m (Lnet/minecraft/class_4587;IIZIIZZ)V method_20850 func_237582_a_ - m (Z)V method_24991 func_237625_d_ - m (Lnet/minecraft/class_4325;)I method_20919 func_243074_t - m ()Z method_20918 func_223968_l - m (Lnet/minecraft/class_4877;)Z method_20909 func_223885_h - m (Lnet/minecraft/class_4185;)V method_24995 func_237632_f_ - m ()Lnet/minecraft/class_2561; method_30855 func_243062_m - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24980 func_243032_P - m (CLnet/minecraft/class_4324;)V method_20843 func_237578_a_ - m ()V method_22098 func_237564_L_ - m (Lnet/minecraft/class_4877;)V method_20852 func_223915_a - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4877;)Z method_20895 func_243058_e - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4325$class_5220;)Lnet/minecraft/class_4325$class_5220; method_20863 func_243048_a - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_4325$class_4329; method_20917 func_243072_s - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_327; method_24973 func_237568_O_ - m (Lnet/minecraft/class_4325;)Lnet/minecraft/class_310; method_25005 func_237645_l_ - m (Lnet/minecraft/class_4325;)Z method_20933 func_243036_U - m (Lnet/minecraft/class_4325;)V method_20910 func_237621_d_ - m (Lnet/minecraft/class_4325;Z)Z method_20864 func_243051_a - m (Lnet/minecraft/class_4587;II)V method_20845 func_237579_a_ - m ()V method_20938 func_223884_v - m (Lnet/minecraft/class_4325;J)J method_20878 func_237608_b_ - f Z field_19456 field_223993_A - f Z field_19494 field_224031_t - f Lnet/minecraft/class_4185; field_19487 field_224024_m - f Lnet/minecraft/class_2561; field_26454 field_243007_L - f Lnet/minecraft/class_2960; field_22560 REALMS - f Ljava/lang/String; field_19459 field_223996_D - f I field_19461 field_223998_F - f Lnet/minecraft/class_4185; field_19473 field_224010_R - f Ljava/util/List; field_19465 field_224002_J - f Lnet/minecraft/class_2960; field_22548 DARKEN - f Lnet/minecraft/class_2561; field_26461 field_243014_S - f Lnet/minecraft/class_4325$class_5220; field_24198 field_237539_ap_ - f Z field_19495 field_224032_u - f Lnet/minecraft/class_2561; field_26455 field_243008_M - f Lnet/minecraft/class_4185; field_19486 field_224023_l - f Lnet/minecraft/class_2960; field_22559 WORLD_ICON - f I field_19492 field_224029_r - f Lnet/minecraft/class_2561; field_26447 field_243000_E - f Lnet/minecraft/class_5489; field_26466 field_243019_aI - f Lnet/minecraft/class_4185; field_19472 field_224009_Q - f J field_19484 field_224021_j - f Lnet/minecraft/class_2561; field_26462 field_243015_T - f Z field_19457 field_223994_B - f Lnet/minecraft/class_2561; field_26460 field_243013_R - f Lnet/minecraft/class_4325$class_4329; field_19483 field_224020_i - f Z field_19499 field_224036_y - f Lnet/minecraft/class_2960; field_22558 INVITE_ICON - f Lnet/minecraft/class_2561; field_26452 field_243005_J - f Lnet/minecraft/class_4185; field_19485 field_224022_k - f Z field_19478 field_224015_d - f Lnet/minecraft/class_4185; field_19471 field_224008_P - f Z field_19500 field_224037_z - f Lnet/minecraft/class_2960; field_22557 field_237545_s_ - f Lnet/minecraft/class_2561; field_26453 field_243006_K - f I field_19481 field_224018_g - f Lnet/minecraft/class_437; field_19482 field_224019_h - f I field_19460 field_223997_E - f Lnet/minecraft/class_4185; field_19470 field_224007_O - f Lnet/minecraft/class_2960; field_22551 WIDGETS - f Lnet/minecraft/class_2561; field_26458 field_243011_P - f Lnet/minecraft/class_2960; field_22556 LEAVE_ICON - f Z field_19497 field_224034_w - f Z field_19476 field_224013_b - f Lnet/minecraft/class_2561; field_26450 field_243003_H - f Lnet/minecraft/class_2960; field_22553 OFF_ICON - f Lnet/minecraft/class_2960; field_22564 POPUP - f Lnet/minecraft/class_2561; field_26465 field_243018_W - f Z field_19464 field_224001_I - f Ljava/util/concurrent/locks/ReentrantLock; field_19467 field_224004_L - f Lnet/minecraft/class_4185; field_19469 field_224006_N - f Lnet/minecraft/class_2960; field_22550 TRIAL_ICON - f Ljava/util/List; field_26449 field_243002_G - f Lnet/minecraft/class_2561; field_26459 field_243012_Q - f Z field_19498 field_224035_x - f Lnet/minecraft/class_2960; field_22555 EXPIRES_SOON_ICON - f Lnet/minecraft/class_4360; field_19480 field_224017_f - f Lnet/minecraft/class_2561; field_26451 field_243004_I - f Lnet/minecraft/class_2960; field_22552 ON_ICON - f Lnet/minecraft/class_2960; field_22563 NEWS_ICON - f Z field_19458 field_223995_C - f Ljava/util/List; field_19490 field_224027_p - f Ljava/util/List; field_19491 field_224028_q - f Lnet/minecraft/class_2960; field_22554 EXPIRED_ICON - f Lnet/minecraft/class_2561; field_26456 field_243009_N - f Lnet/minecraft/class_4185; field_19489 field_224026_o - f Z field_19462 field_223999_G - f Lnet/minecraft/class_2960; field_22562 QUESTIONMARK - f I field_19493 field_224030_s - f Lnet/minecraft/class_2561; field_26448 field_243001_F - f Lnet/minecraft/class_2561; field_26463 field_243016_U - f Z field_19496 field_224033_v - f Lnet/minecraft/class_2561; field_26457 field_243010_O - f Lnet/minecraft/class_4185; field_19488 field_224025_n - f Lnet/minecraft/class_2960; field_22561 CONFIGURE_ICON - f I field_19466 field_224003_K - f Lnet/minecraft/class_4185; field_19474 field_224011_S - f Ljava/util/List; field_21517 field_227918_e_ - f Lcom/google/common/util/concurrent/RateLimiter; field_19477 field_224014_c - f Lnet/minecraft/class_2561; field_26464 field_243017_V - f Lnet/minecraft/class_437; field_19463 field_224000_H - f Lorg/apache/logging/log4j/Logger; field_19475 LOGGER - f Lnet/minecraft/class_2960; field_22549 CROSS_ICON -c net/minecraft/class_4325$1 com/mojang/realmsclient/RealmsMainScreen$1 - m ()V method_25016 func_237665_b_ - m (Lnet/minecraft/class_4355;)V method_25015 func_237664_a_ - m ()V method_25017 func_237666_c_ - m ()V run run - m ()V method_25014 func_237663_a_ - f Lnet/minecraft/class_4325; field_22565 field_223766_a -c net/minecraft/class_4325$class_5220 com/mojang/realmsclient/RealmsMainScreen$ServerState - m ()[Lnet/minecraft/class_4325$class_5220; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4325$class_5220; valueOf valueOf - f Lnet/minecraft/class_4325$class_5220; field_24199 NONE - f [Lnet/minecraft/class_4325$class_5220; field_24203 $VALUES - f Lnet/minecraft/class_4325$class_5220; field_24202 CONFIGURE - f Lnet/minecraft/class_4325$class_5220; field_24201 LEAVE - f Lnet/minecraft/class_4325$class_5220; field_24200 EXPIRED -c net/minecraft/class_4325$class_4866 com/mojang/realmsclient/RealmsMainScreen$ListEntry - f Lnet/minecraft/class_4325; field_22567 field_237672_a_ -c net/minecraft/class_4325$class_4328 com/mojang/realmsclient/RealmsMainScreen$PendingInvitesButton - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4185;)V method_25023 func_237674_a_ - f Lnet/minecraft/class_4325; field_19516 field_223764_a -c net/minecraft/class_4325$class_4327 com/mojang/realmsclient/RealmsMainScreen$NewsButton - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4185;)V method_25022 func_237673_a_ - f Lnet/minecraft/class_4325; field_19515 field_223763_a -c net/minecraft/class_4325$class_4330 com/mojang/realmsclient/RealmsMainScreen$ServerEntry - m (Lnet/minecraft/class_4325$class_4330;)Lnet/minecraft/class_4877; method_25025 func_243082_a - m (Lnet/minecraft/class_4877;Lnet/minecraft/class_4587;IIII)V method_20945 func_237678_a_ - m (Lnet/minecraft/class_4587;II)V method_20944 func_237676_a_ - m (Lnet/minecraft/class_4877;Lnet/minecraft/class_4587;IIII)V method_20946 func_237679_b_ - f Lnet/minecraft/class_4877; field_19518 field_223734_a - f Lnet/minecraft/class_4325; field_19519 field_223735_b -c net/minecraft/class_4325$class_4329 com/mojang/realmsclient/RealmsMainScreen$ServerList - m (Lnet/minecraft/class_4325$class_4866;)V method_25024 setSelected - m (Lnet/minecraft/class_4325$class_4866;)I method_30161 func_241825_a_ - f Z field_25723 field_241824_o_ - f Lnet/minecraft/class_4325; field_19517 field_223865_a -c net/minecraft/class_4325$class_4331 com/mojang/realmsclient/RealmsMainScreen$TrialServerEntry - m (Lnet/minecraft/class_4587;IIIII)V method_20947 func_237681_a_ - f Lnet/minecraft/class_4325; field_19520 field_223737_a -c net/minecraft/class_4325$class_4332 com/mojang/realmsclient/RealmsMainScreen$InfoButton - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4185;)V method_25026 func_237680_a_ - f Lnet/minecraft/class_4325; field_19521 field_223765_a -c net/minecraft/class_4325$class_4326 com/mojang/realmsclient/RealmsMainScreen$CloseButton - m (Lnet/minecraft/class_4325;Lnet/minecraft/class_4185;)V method_25021 func_237671_a_ - f Lnet/minecraft/class_4325; field_19514 field_223762_a -c net/minecraft/class_4325$3 com/mojang/realmsclient/RealmsMainScreen$3 - m ()V run run - f Lnet/minecraft/class_4325; field_19507 field_223768_a -c net/minecraft/class_4325$2 com/mojang/realmsclient/RealmsMainScreen$2 - m ()V run run - m ()V method_25018 func_237667_a_ - m (Lnet/minecraft/class_4355;)V method_25019 func_237668_a_ - f Lnet/minecraft/class_4325; field_22566 field_223767_a -c net/minecraft/class_4325$5 com/mojang/realmsclient/RealmsMainScreen$5 - m (Lnet/minecraft/class_4355;)V method_25020 func_237670_a_ - m ()V run run - m (Lnet/minecraft/class_4877;)V method_24235 func_243081_a - f Lnet/minecraft/class_4325; field_19509 field_223770_a -c net/minecraft/class_4325$4 com/mojang/realmsclient/RealmsMainScreen$4 - m ()V run run - f Lnet/minecraft/class_4325; field_19508 field_223769_a -c net/minecraft/class_4337 com/mojang/realmsclient/client/FileUpload - m (JI)Z method_20972 func_224882_a - m ()V method_20970 func_224878_a - m (Ljava/util/function/Consumer;)V method_20973 func_224874_a - m (I)Lnet/minecraft/class_4429; method_20971 func_224879_a - m (Lorg/apache/http/client/methods/HttpPost;)V method_20976 func_224872_a - m (Lorg/apache/http/HttpResponse;)J method_20974 func_224880_a - m (Lorg/apache/http/client/methods/HttpPost;Lorg/apache/http/impl/client/CloseableHttpClient;)V method_20977 func_224877_a - m (Lorg/apache/http/HttpResponse;Lnet/minecraft/class_4429$class_4430;)V method_20975 func_224875_a - m ()Lnet/minecraft/class_4429; method_20980 func_224873_c - m ()Z method_20978 func_224881_b - m (JI)Lnet/minecraft/class_4429; method_20979 func_224876_b - f Ljava/lang/String; field_19556 field_224889_g - f Lnet/minecraft/class_4888; field_19554 field_224887_e - f Ljava/util/concurrent/atomic/AtomicBoolean; field_19559 field_224892_j - f Lnet/minecraft/class_4351; field_19558 field_224891_i - f Ljava/lang/String; field_19555 field_224888_f - f Ljava/lang/String; field_19557 field_224890_h - f Lorg/apache/http/client/config/RequestConfig; field_19561 field_224894_l - f J field_19552 field_224885_c - f Lorg/apache/logging/log4j/Logger; field_19550 field_224883_a - f Ljava/io/File; field_19551 field_224884_b - f Ljava/util/concurrent/CompletableFuture; field_19560 field_224893_k - f I field_19553 field_224886_d -c net/minecraft/class_4337$class_4338 com/mojang/realmsclient/client/FileUpload$CustomInputStreamEntity - m (Ljava/io/OutputStream;)V writeTo writeTo - f J field_19562 field_224869_a - f Lnet/minecraft/class_4351; field_19564 field_224871_c - f Ljava/io/InputStream; field_19563 field_224870_b -c net/minecraft/class_4333 com/mojang/realmsclient/client/FileDownload - m (Lnet/minecraft/class_4333;Z)Z method_20963 func_227962_a_ - m (Lnet/minecraft/class_4889;Ljava/lang/String;Lnet/minecraft/class_4392$class_4393;Lnet/minecraft/class_32;)V method_22100 func_237688_a_ - m (Ljava/lang/String;Ljava/io/File;Lnet/minecraft/class_32;)V method_20956 func_237690_a_ - m (Lnet/minecraft/class_4889;Lnet/minecraft/class_4392$class_4393;Ljava/lang/String;Lnet/minecraft/class_32;)V method_22099 func_237687_a_ - m (Lnet/minecraft/class_4333;Z)Z method_20954 func_227964_b_ - m ()Z method_20964 func_224837_d - m (Lnet/minecraft/class_4333;Z)Z method_20959 func_227966_c_ - m (Lnet/minecraft/class_4333;Ljava/lang/String;Ljava/io/File;Lnet/minecraft/class_32;)V method_20952 func_237686_a_ - m (Ljava/io/File;)V method_25031 func_237689_a_ - m ()Z method_20957 func_224835_b - m ()Lorg/apache/logging/log4j/Logger; method_20966 func_227967_e_ - m ()Z method_20961 func_224836_c - m (Ljava/lang/String;)Ljava/lang/String; method_20960 func_224828_b - m (Ljava/lang/String;)J method_20955 func_224827_a - m ()V method_20948 func_224834_a - m (Lnet/minecraft/class_4333;)Ljava/io/File; method_20968 func_227965_c_ - m (Lnet/minecraft/class_4333;)Z method_20965 func_227963_b_ - m (Lnet/minecraft/class_4333;)Z method_20967 func_227960_a_ - f Lorg/apache/http/client/config/RequestConfig; field_19531 field_224852_j - f Lorg/apache/logging/log4j/Logger; field_19522 LOGGER - f Ljava/io/File; field_20490 field_224848_f - f Ljava/lang/Thread; field_19530 field_224851_i - f Ljava/io/File; field_19528 field_224849_g - f Z field_19526 field_224847_e - f Lorg/apache/http/client/methods/HttpGet; field_20491 field_224850_h - f Z field_19524 field_224845_c - f Z field_19525 field_224846_d - f Z field_19523 field_224844_b - f [Ljava/lang/String; field_19532 field_224853_k -c net/minecraft/class_4333$class_4334 com/mojang/realmsclient/client/FileDownload$DownloadCountingOutputStream - m (I)V afterWrite afterWrite - m (Ljava/awt/event/ActionListener;)V method_20969 func_224804_a - f Lnet/minecraft/class_4333; field_19538 field_224805_a - f Ljava/awt/event/ActionListener; field_19539 field_224806_b -c net/minecraft/class_4333$class_4336 com/mojang/realmsclient/client/FileDownload$ResourcePackProgressListener - m (Ljava/awt/event/ActionEvent;)V actionPerformed actionPerformed - f Lnet/minecraft/class_4889; field_19549 field_224821_d - f Lnet/minecraft/class_4333; field_19546 field_224818_a - f Lnet/minecraft/class_4392$class_4393; field_19548 field_224820_c - f Ljava/io/File; field_19547 field_224819_b -c net/minecraft/class_4333$class_4335 com/mojang/realmsclient/client/FileDownload$ProgressListener - m (Ljava/awt/event/ActionEvent;)V actionPerformed actionPerformed - f Ljava/lang/String; field_19541 field_224813_b - f Lnet/minecraft/class_4392$class_4393; field_19544 field_224816_e - f Ljava/io/File; field_19542 field_224814_c - f Lnet/minecraft/class_4333; field_19540 field_224812_a - f Lnet/minecraft/class_32; field_19543 field_224815_d -c net/minecraft/class_4333$1 com/mojang/realmsclient/client/FileDownload$1 -c net/minecraft/class_4341 com/mojang/realmsclient/client/RealmsClient - m ()I method_21029 func_224909_j - m ()V method_21012 func_224941_d - m ()Lnet/minecraft/class_4882; method_21018 func_224915_f - m (J)Lnet/minecraft/class_4868; method_21016 func_224923_d - m (Ljava/lang/String;)Ljava/lang/String; method_21011 func_224926_c - m ()Lnet/minecraft/class_4341$class_4342; method_21027 func_224939_i - m (Ljava/lang/String;)V method_20999 func_224901_a - m ()V method_21001 func_224940_b - m (JI)Z method_20992 func_224927_a - m (J)V method_21013 func_224912_c - m (JILnet/minecraft/class_4883;)V method_20993 func_224925_a - m (JLjava/lang/String;Ljava/lang/String;)V method_21005 func_224922_b - m (J)Ljava/lang/Boolean; method_21022 func_224932_f - m (JLjava/lang/String;)Lnet/minecraft/class_4870; method_21017 func_224906_e - m (Lnet/minecraft/class_4346;)Ljava/lang/String; method_20998 func_224938_a - m ()Lnet/minecraft/class_4879; method_21015 func_224902_e - m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_21007 func_224907_b - m ()V method_21031 func_224937_l - m ()Ljava/lang/Boolean; method_21021 func_224918_g - m (JLjava/lang/String;)Lnet/minecraft/class_4877; method_21004 func_224910_b - m (J)Lnet/minecraft/class_4877; method_20991 func_224935_a - m (Lnet/minecraft/class_4873;)V method_20997 func_224903_a - m (JLjava/lang/String;)Ljava/lang/Boolean; method_21023 func_224924_g - m (JI)Lnet/minecraft/class_4889; method_21003 func_224917_b - m (J)V method_21028 func_224916_h - m (Ljava/lang/String;)V method_21006 func_224913_b - m ()Ljava/lang/Boolean; method_21033 func_224914_n - m (JLjava/lang/String;)V method_20994 func_224908_a - m ()V method_21008 func_224921_c - m (JLjava/lang/String;Ljava/lang/Integer;Z)Ljava/lang/Boolean; method_20995 func_224943_a - m (JLjava/lang/String;)Lnet/minecraft/class_4888; method_21026 func_224934_h - m ()Ljava/lang/Boolean; method_21024 func_224931_h - m ()Lnet/minecraft/class_4341; method_20989 func_224911_a - m (JLjava/lang/String;Ljava/lang/String;)V method_20996 func_224900_a - m (J)Lnet/minecraft/class_4878; method_21009 func_224904_b - m (JLjava/lang/String;)V method_21010 func_224928_c - m ()Lnet/minecraft/class_4876; method_21032 func_224920_m - m ()Lnet/minecraft/class_4872; method_21030 func_224919_k - m (J)Ljava/lang/Boolean; method_21019 func_224942_e - m (JLjava/lang/String;)Lnet/minecraft/class_4870; method_21020 func_224929_f - m (J)Lnet/minecraft/class_4887; method_21025 func_224933_g - m (IILnet/minecraft/class_4877$class_4321;)Lnet/minecraft/class_4891; method_20990 func_224930_a - m (JLjava/lang/String;)Ljava/lang/Boolean; method_21014 func_224905_d - f Ljava/lang/String; field_19580 field_224948_e - f Lorg/apache/logging/log4j/Logger; field_19578 field_224946_c - f Z field_19577 field_224945_b - f Ljava/lang/String; field_19579 field_224947_d - f Lnet/minecraft/class_4869; field_22568 field_237691_f_ - f Lnet/minecraft/class_4341$class_4343; field_19576 field_224944_a -c net/minecraft/class_4341$class_4343 com/mojang/realmsclient/client/RealmsClient$Environment - m (Ljava/lang/String;)Lnet/minecraft/class_4341$class_4343; valueOf valueOf - m ()[Lnet/minecraft/class_4341$class_4343; values values - f Ljava/lang/String; field_19590 field_224899_e - f [Lnet/minecraft/class_4341$class_4343; field_19591 $VALUES - f Lnet/minecraft/class_4341$class_4343; field_19586 PRODUCTION - f Lnet/minecraft/class_4341$class_4343; field_19588 LOCAL - f Lnet/minecraft/class_4341$class_4343; field_19587 STAGE - f Ljava/lang/String; field_19589 field_224898_d -c net/minecraft/class_4341$class_4342 com/mojang/realmsclient/client/RealmsClient$CompatibleVersionResponse - m ()[Lnet/minecraft/class_4341$class_4342; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4341$class_4342; valueOf valueOf - f Lnet/minecraft/class_4341$class_4342; field_19583 OUTDATED - f Lnet/minecraft/class_4341$class_4342; field_19584 OTHER - f [Lnet/minecraft/class_4341$class_4342; field_19585 $VALUES - f Lnet/minecraft/class_4341$class_4342; field_19582 COMPATIBLE -c net/minecraft/class_4339 com/mojang/realmsclient/client/Ping - m ()J method_20985 func_224865_b - m ([Lnet/minecraft/class_4339$class_4340;)Ljava/util/List; method_20984 func_224867_a - m ()Ljava/util/List; method_20981 func_224864_a - m (Ljava/net/Socket;)V method_20983 func_224866_a - m (Ljava/lang/String;)I method_20982 func_224868_a -c net/minecraft/class_4339$class_4340 com/mojang/realmsclient/client/Ping$Region - m (Lnet/minecraft/class_4339$class_4340;)Ljava/lang/String; method_20987 func_224860_a - m (Lnet/minecraft/class_4339$class_4340;)Ljava/lang/String; method_20988 func_224861_b - m (Ljava/lang/String;)Lnet/minecraft/class_4339$class_4340; valueOf valueOf - m ()[Lnet/minecraft/class_4339$class_4340; values values - f Lnet/minecraft/class_4339$class_4340; field_19568 EU_WEST_1 - f Lnet/minecraft/class_4339$class_4340; field_19567 US_WEST_1 - f Lnet/minecraft/class_4339$class_4340; field_19566 US_WEST_2 - f Lnet/minecraft/class_4339$class_4340; field_19571 AP_NORTHEAST_1 - f Lnet/minecraft/class_4339$class_4340; field_19570 AP_SOUTHEAST_2 - f Lnet/minecraft/class_4339$class_4340; field_19569 AP_SOUTHEAST_1 - f [Lnet/minecraft/class_4339$class_4340; field_19575 $VALUES - f Lnet/minecraft/class_4339$class_4340; field_19572 SA_EAST_1 - f Lnet/minecraft/class_4339$class_4340; field_19565 US_EAST_1 - f Ljava/lang/String; field_19573 field_224862_i - f Ljava/lang/String; field_19574 field_224863_j -c net/minecraft/class_4344 com/mojang/realmsclient/client/RealmsClientConfig - m (Ljava/net/Proxy;)V method_21035 func_224896_a - m ()Ljava/net/Proxy; method_21034 func_224895_a - f Ljava/net/Proxy; field_19592 field_224897_a -c net/minecraft/class_4346 com/mojang/realmsclient/client/Request - m ()Lnet/minecraft/class_4346; method_21054 func_224955_d - m (Ljava/lang/String;)Lnet/minecraft/class_4346; method_21040 func_224953_a - m ()Ljava/lang/String; method_21051 func_224963_c - m (Ljava/lang/String;)Lnet/minecraft/class_4346; method_21048 func_224952_b - m (Ljava/lang/String;)Ljava/lang/String; method_21052 func_224956_c - m (Ljava/net/HttpURLConnection;)I method_21044 func_224964_a - m ()Lnet/minecraft/class_4346; method_21055 func_223626_e_ - m ()I method_21047 func_224958_b - m ()I method_21038 func_224957_a - m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4346; method_21049 func_224951_b - m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4346; method_21053 func_224965_c - m (Ljava/lang/String;Ljava/lang/String;II)Lnet/minecraft/class_4346; method_21050 func_224966_b - m (Ljava/lang/String;Ljava/lang/String;II)Lnet/minecraft/class_4346; method_21043 func_224959_a - m (Ljava/net/HttpURLConnection;Ljava/lang/String;)Ljava/lang/String; method_21045 func_224961_a - m (Ljava/net/HttpURLConnection;Ljava/lang/String;Ljava/lang/String;)V method_21046 func_224967_a - m (Ljava/io/InputStream;)Ljava/lang/String; method_21039 func_224954_a - m (Ljava/lang/String;II)Lnet/minecraft/class_4346; method_21041 func_224960_a - m (Ljava/lang/String;Ljava/lang/String;)V method_21042 func_224962_a - m ()V method_21056 func_224950_f - f Ljava/net/HttpURLConnection; field_19596 field_224968_a - f Z field_19598 field_224970_c - f Ljava/lang/String; field_19597 field_224969_b -c net/minecraft/class_4346$class_4348 com/mojang/realmsclient/client/Request$Get - m ()Lnet/minecraft/class_4346$class_4348; method_21058 func_223626_e_ -c net/minecraft/class_4346$class_4347 com/mojang/realmsclient/client/Request$Delete - m ()Lnet/minecraft/class_4346$class_4347; method_21057 func_223626_e_ -c net/minecraft/class_4346$class_4350 com/mojang/realmsclient/client/Request$Put - m ()Lnet/minecraft/class_4346$class_4350; method_21060 func_223626_e_ - f Ljava/lang/String; field_19600 field_224972_c -c net/minecraft/class_4346$class_4349 com/mojang/realmsclient/client/Request$Post - m ()Lnet/minecraft/class_4346$class_4349; method_21059 func_223626_e_ - f Ljava/lang/String; field_19599 field_224971_c -c net/minecraft/class_4345 com/mojang/realmsclient/client/RealmsError - m (Ljava/lang/String;)Lnet/minecraft/class_4345; method_30162 func_241826_a_ - m ()I method_21037 func_224974_b - m ()Ljava/lang/String; method_21036 func_224973_a - f Lorg/apache/logging/log4j/Logger; field_19593 field_224975_a - f Ljava/lang/String; field_19594 field_224976_b - f I field_19595 field_224977_c -c net/minecraft/class_4867 com/mojang/realmsclient/dto/Backup - m ()Z method_25032 func_230749_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_25034 func_230751_a_ - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4867; method_25033 func_230750_a_ - m (Z)V method_25035 func_230752_a_ - f Ljava/util/Date; field_22570 field_230554_b_ - f Ljava/lang/String; field_22569 field_230553_a_ - f Lorg/apache/logging/log4j/Logger; field_22574 field_230558_f_ - f Ljava/util/Map; field_22573 field_230557_e_ - f J field_22571 field_230555_c_ - f Z field_22575 field_230559_g_ - f Ljava/util/Map; field_22572 field_230556_d_ -c net/minecraft/class_4351 com/mojang/realmsclient/client/UploadStatus - f J field_19601 field_224978_a - f J field_19602 field_224979_b -c net/minecraft/class_4869 net/minecraft/realms/PersistenceSerializer - m (Ljava/lang/String;Ljava/lang/Class;)Lnet/minecraft/class_4885; method_25038 func_237695_a_ - m (Lnet/minecraft/class_4885;)Ljava/lang/String; method_25037 func_237694_a_ - f Lcom/google/gson/Gson; field_22578 field_237693_a_ -c net/minecraft/class_4868 com/mojang/realmsclient/dto/BackupList - m (Ljava/lang/String;)Lnet/minecraft/class_4868; method_25036 func_230753_a_ - f Ljava/util/List; field_22576 field_230560_a_ - f Lorg/apache/logging/log4j/Logger; field_22577 field_230561_b_ -c net/minecraft/class_4871 com/mojang/realmsclient/dto/PendingInvite - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4871; method_25040 func_230755_a_ - f Ljava/lang/String; field_22581 field_230564_b_ - f Ljava/lang/String; field_22582 field_230565_c_ - f Ljava/lang/String; field_22583 field_230566_d_ - f Ljava/util/Date; field_22584 field_230567_e_ - f Ljava/lang/String; field_22580 field_230563_a_ - f Lorg/apache/logging/log4j/Logger; field_22585 field_230568_f_ -c net/minecraft/class_4870 com/mojang/realmsclient/dto/Ops - m (Ljava/lang/String;)Lnet/minecraft/class_4870; method_25039 func_230754_a_ - f Ljava/util/Set; field_22579 field_230562_a_ -c net/minecraft/class_4873 com/mojang/realmsclient/dto/PingResult - f Ljava/util/List; field_22589 field_230572_b_ - f Ljava/util/List; field_22588 field_230571_a_ -c net/minecraft/class_4872 com/mojang/realmsclient/dto/PendingInvitesList - m (Ljava/lang/String;)Lnet/minecraft/class_4872; method_25041 func_230756_a_ - f Ljava/util/List; field_22586 field_230569_a_ - f Lorg/apache/logging/log4j/Logger; field_22587 field_230570_b_ -c net/minecraft/class_4875 com/mojang/realmsclient/dto/RealmsDescriptionDto - f Ljava/lang/String; field_22595 field_230578_a_ - f Ljava/lang/String; field_22596 field_230579_b_ -c net/minecraft/class_4874 com/mojang/realmsclient/dto/PlayerInfo - m ()Z method_25051 func_230766_e_ - m ()Ljava/lang/String; method_25042 func_230757_a_ - m ()Ljava/lang/String; method_25045 func_230760_b_ - m ()Z method_25050 func_230765_d_ - m (Ljava/lang/String;)V method_25046 func_230761_b_ - m (Z)V method_25049 func_230764_c_ - m (Ljava/lang/String;)V method_25043 func_230758_a_ - m (Z)V method_25044 func_230759_a_ - m (Z)V method_25047 func_230762_b_ - m ()Z method_25048 func_230763_c_ - f Ljava/lang/String; field_22590 field_230573_a_ - f Ljava/lang/String; field_22591 field_230574_b_ - f Z field_22594 field_230577_e_ - f Z field_22593 field_230576_d_ - f Z field_22592 field_230575_c_ -c net/minecraft/class_4877 com/mojang/realmsclient/dto/RealmsServer - m ()Ljava/util/Map; method_25069 func_237697_e_ - m ()Ljava/lang/Object; clone clone - m (Ljava/lang/String;)Lnet/minecraft/class_4877$class_4321; method_25070 func_230781_e_ - m (Lnet/minecraft/class_4877;)V method_25058 func_230771_a_ - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4877; method_25056 func_230770_a_ - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_4874;Lnet/minecraft/class_4874;)I method_25057 func_229951_lam_ - m (Lnet/minecraft/class_4881;)V method_25059 func_230772_a_ - m ()I hashCode hashCode - m (Ljava/util/Map;)Ljava/util/Map; method_25061 func_230774_a_ - m ()Ljava/lang/String; method_25062 func_230775_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_4877$class_4320; method_25068 func_230780_d_ - m ()Ljava/lang/String; method_25065 func_230778_c_ - m ()Lnet/minecraft/class_4877; method_25067 clone - m (Ljava/lang/String;)Lnet/minecraft/class_4877; method_25066 func_230779_c_ - m ()Ljava/lang/String; method_25053 func_230768_a_ - m (Ljava/lang/String;)V method_25064 func_230777_b_ - m (I)Ljava/lang/String; method_25054 func_237696_a_ - m (Ljava/lang/String;)V method_25060 func_230773_a_ - m (Lcom/google/gson/JsonArray;)Ljava/util/Map; method_25063 func_230776_b_ - m (Lcom/google/gson/JsonArray;)Ljava/util/List; method_25055 func_230769_a_ - f Ljava/util/Map; field_22607 field_230590_i_ - f Ljava/lang/String; field_22615 field_230598_q_ - f Z field_22609 field_230592_k_ - f Ljava/util/List; field_22606 field_230589_h_ - f I field_22614 field_230597_p_ - f Z field_22608 field_230591_j_ - f Ljava/lang/String; field_22613 field_230596_o_ - f I field_22612 field_230595_n_ - f I field_22610 field_230593_l_ - f Lorg/apache/logging/log4j/Logger; field_22617 field_230600_s_ - f Ljava/lang/String; field_22604 field_230587_f_ - f Ljava/lang/String; field_22605 field_230588_g_ - f Ljava/lang/String; field_22601 field_230584_c_ - f Ljava/lang/String; field_22602 field_230585_d_ - f Lnet/minecraft/class_4877$class_4320; field_22603 field_230586_e_ - f Lnet/minecraft/class_4880; field_22616 field_230599_r_ - f J field_22599 field_230582_a_ - f Ljava/lang/String; field_22600 field_230583_b_ - f Lnet/minecraft/class_4877$class_4321; field_22611 field_230594_m_ -c net/minecraft/class_4877$class_4320 com/mojang/realmsclient/dto/RealmsServer$Status - m (Ljava/lang/String;)Lnet/minecraft/class_4877$class_4320; valueOf valueOf - m ()[Lnet/minecraft/class_4877$class_4320; values values - f Lnet/minecraft/class_4877$class_4320; field_19435 UNINITIALIZED - f Lnet/minecraft/class_4877$class_4320; field_19434 OPEN - f [Lnet/minecraft/class_4877$class_4320; field_19436 $VALUES - f Lnet/minecraft/class_4877$class_4320; field_19433 CLOSED -c net/minecraft/class_4877$class_4319 com/mojang/realmsclient/dto/RealmsServer$ServerComparator - m (Lnet/minecraft/class_4877;Lnet/minecraft/class_4877;)I method_20830 compare - m (Ljava/lang/Object;Ljava/lang/Object;)I compare compare - f Ljava/lang/String; field_19432 field_223701_a -c net/minecraft/class_4877$class_4321 com/mojang/realmsclient/dto/RealmsServer$ServerType - m ()[Lnet/minecraft/class_4877$class_4321; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4877$class_4321; valueOf valueOf - f Lnet/minecraft/class_4877$class_4321; field_19437 NORMAL - f Lnet/minecraft/class_4877$class_4321; field_19441 INSPIRATION - f Lnet/minecraft/class_4877$class_4321; field_19440 EXPERIENCE - f [Lnet/minecraft/class_4877$class_4321; field_19442 $VALUES - f Lnet/minecraft/class_4877$class_4321; field_19439 ADVENTUREMAP - f Lnet/minecraft/class_4877$class_4321; field_19438 MINIGAME -c net/minecraft/class_4876 com/mojang/realmsclient/dto/RealmsNews - m (Ljava/lang/String;)Lnet/minecraft/class_4876; method_25052 func_230767_a_ - f Ljava/lang/String; field_22597 field_230580_a_ - f Lorg/apache/logging/log4j/Logger; field_22598 field_230581_b_ -c net/minecraft/class_4879 com/mojang/realmsclient/dto/RealmsServerList - m (Ljava/lang/String;)Lnet/minecraft/class_4879; method_25072 func_230783_a_ - f Ljava/util/List; field_22622 field_230605_a_ - f Lorg/apache/logging/log4j/Logger; field_22623 field_230606_b_ -c net/minecraft/class_4878 com/mojang/realmsclient/dto/RealmsServerAddress - m (Ljava/lang/String;)Lnet/minecraft/class_4878; method_25071 func_230782_a_ - f Ljava/lang/String; field_22620 field_230603_c_ - f Lorg/apache/logging/log4j/Logger; field_22621 field_230604_d_ - f Ljava/lang/String; field_22618 field_230601_a_ - f Ljava/lang/String; field_22619 field_230602_b_ -c net/minecraft/class_4881 com/mojang/realmsclient/dto/RealmsServerPlayerList - m (Lcom/google/gson/JsonArray;)Ljava/util/List; method_25073 func_230784_a_ - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4881; method_25074 func_230785_a_ - f Lcom/google/gson/JsonParser; field_22629 field_237698_d_ - f J field_22626 field_230609_a_ - f Ljava/util/List; field_22627 field_230610_b_ - f Lorg/apache/logging/log4j/Logger; field_22628 field_230611_c_ -c net/minecraft/class_4880 com/mojang/realmsclient/dto/RealmsServerPing - f Ljava/lang/String; field_22625 field_230608_b_ - f Ljava/lang/String; field_22624 field_230607_a_ -c net/minecraft/class_4883 com/mojang/realmsclient/dto/RealmsWorldOptions - m ()Lnet/minecraft/class_4883; method_25076 func_237700_a_ - m ()Lnet/minecraft/class_4883; method_25080 func_237701_b_ - m ()Ljava/lang/String; method_25082 func_230791_c_ - m ()Ljava/lang/Object; clone clone - m ()Lnet/minecraft/class_4883; method_25083 clone - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4883; method_25078 func_230788_a_ - m (I)Ljava/lang/String; method_25077 func_230787_a_ - m (I)Ljava/lang/String; method_25081 func_230790_b_ - m (Z)V method_25079 func_230789_a_ - f Ljava/lang/Boolean; field_22635 field_230617_d_ - f J field_22642 field_230624_k_ - f Ljava/lang/Boolean; field_22634 field_230616_c_ - f Z field_22645 field_230627_n_ - f Ljava/lang/String; field_22641 field_230623_j_ - f Z field_22644 field_230626_m_ - f Ljava/lang/Boolean; field_22637 field_230619_f_ - f Ljava/lang/Boolean; field_22638 field_230620_g_ - f Ljava/lang/Integer; field_22640 field_230622_i_ - f Ljava/lang/String; field_22646 field_237699_o_ - f Ljava/lang/Integer; field_22639 field_230621_h_ - f Ljava/lang/Boolean; field_22632 field_230614_a_ - f Ljava/lang/String; field_22643 field_230625_l_ - f Ljava/lang/Integer; field_22636 field_230618_e_ - f Ljava/lang/Boolean; field_22633 field_230615_b_ -c net/minecraft/class_4882 com/mojang/realmsclient/dto/RealmsServerPlayerLists - m (Ljava/lang/String;)Lnet/minecraft/class_4882; method_25075 func_230786_a_ - f Lorg/apache/logging/log4j/Logger; field_22631 field_230613_b_ - f Ljava/util/List; field_22630 field_230612_a_ -c net/minecraft/class_4885 net/minecraft/realms/IPersistentSerializable -c net/minecraft/class_4884 com/mojang/realmsclient/dto/RealmsWorldResetDto - f J field_22648 field_230629_b_ - f I field_22649 field_230630_c_ - f Ljava/lang/String; field_22647 field_230628_a_ - f Z field_22650 field_230631_d_ -c net/minecraft/class_4887 com/mojang/realmsclient/dto/Subscription - m (Ljava/lang/String;)Lnet/minecraft/class_4887$class_4322; method_25086 func_230794_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_4887; method_25085 func_230793_a_ - f Lnet/minecraft/class_4887$class_4322; field_22655 field_230636_c_ - f Lorg/apache/logging/log4j/Logger; field_22656 field_230637_d_ - f I field_22654 field_230635_b_ - f J field_22653 field_230634_a_ -c net/minecraft/class_4887$class_4322 com/mojang/realmsclient/dto/Subscription$Type - m ()[Lnet/minecraft/class_4887$class_4322; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4887$class_4322; valueOf valueOf - f Lnet/minecraft/class_4887$class_4322; field_19444 RECURRING - f [Lnet/minecraft/class_4887$class_4322; field_19445 $VALUES - f Lnet/minecraft/class_4887$class_4322; field_19443 NORMAL -c net/minecraft/class_4886 com/mojang/realmsclient/dto/RegionPingResult - m ()I method_25084 func_230792_a_ - f I field_22652 field_230633_b_ - f Ljava/lang/String; field_22651 field_230632_a_ -c net/minecraft/class_4352 com/mojang/realmsclient/dto/ValueObject - m (Ljava/lang/reflect/Field;)Z method_25094 func_230801_b_ - m (Ljava/lang/reflect/Field;)Ljava/lang/String; method_25093 func_237702_a_ - m ()Ljava/lang/String; toString toString -c net/minecraft/class_4888 com/mojang/realmsclient/dto/UploadInfo - m (Ljava/lang/String;I)Ljava/net/URI; method_30862 func_243087_a - m ()Ljava/lang/String; method_25087 func_230795_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_4888; method_25088 func_230796_a_ - m (II)I method_30861 func_243086_a - m ()Ljava/net/URI; method_25089 func_243089_b - m (Ljava/lang/String;Ljava/util/regex/Matcher;)Ljava/lang/String; method_30863 func_243088_a - m (Ljava/lang/String;)Ljava/lang/String; method_30864 func_243090_b - m ()Z method_25091 func_230799_c_ - f Ljava/util/regex/Pattern; field_26467 field_243085_b - f Lorg/apache/logging/log4j/Logger; field_22657 field_230638_a_ - f Z field_22658 field_230639_b_ - f Ljava/lang/String; field_22659 field_230640_c_ - f Ljava/net/URI; field_22660 field_230641_d_ -c net/minecraft/class_4889 com/mojang/realmsclient/dto/WorldDownload - m (Ljava/lang/String;)Lnet/minecraft/class_4889; method_25095 func_230802_a_ - f Lorg/apache/logging/log4j/Logger; field_22665 field_230646_d_ - f Ljava/lang/String; field_22662 field_230643_a_ - f Ljava/lang/String; field_22664 field_230645_c_ - f Ljava/lang/String; field_22663 field_230644_b_ -c net/minecraft/class_4891 com/mojang/realmsclient/dto/WorldTemplatePaginatedList - m (Ljava/lang/String;)Lnet/minecraft/class_4891; method_25097 func_230804_a_ - f Ljava/util/List; field_22676 field_230657_a_ - f Lorg/apache/logging/log4j/Logger; field_22680 field_230661_e_ - f I field_22679 field_230660_d_ - f I field_22678 field_230659_c_ - f I field_22677 field_230658_b_ -c net/minecraft/class_4890 com/mojang/realmsclient/dto/WorldTemplate - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4890; method_25096 func_230803_a_ - f Ljava/lang/String; field_22673 field_230654_h_ - f Ljava/lang/String; field_22672 field_230653_g_ - f Lnet/minecraft/class_4890$class_4323; field_22674 field_230655_i_ - f Ljava/lang/String; field_22667 field_230648_b_ - f Ljava/lang/String; field_22669 field_230650_d_ - f Ljava/lang/String; field_22668 field_230649_c_ - f Ljava/lang/String; field_22670 field_230651_e_ - f Lorg/apache/logging/log4j/Logger; field_22675 field_230656_j_ - f Ljava/lang/String; field_22666 field_230647_a_ - f Ljava/lang/String; field_22671 field_230652_f_ -c net/minecraft/class_4890$class_4323 com/mojang/realmsclient/dto/WorldTemplate$Type - m ()[Lnet/minecraft/class_4890$class_4323; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4890$class_4323; valueOf valueOf - f Lnet/minecraft/class_4890$class_4323; field_19449 ADVENTUREMAP - f Lnet/minecraft/class_4890$class_4323; field_19448 MINIGAME - f Lnet/minecraft/class_4890$class_4323; field_19450 EXPERIENCE - f Lnet/minecraft/class_4890$class_4323; field_19451 INSPIRATION - f [Lnet/minecraft/class_4890$class_4323; field_19452 $VALUES - f Lnet/minecraft/class_4890$class_4323; field_19447 WORLD_TEMPLATE -c net/minecraft/class_4354 com/mojang/realmsclient/exception/RealmsHttpException -c net/minecraft/class_4353 com/mojang/realmsclient/exception/RealmsDefaultUncaughtExceptionHandler - m (Ljava/lang/Thread;Ljava/lang/Throwable;)V uncaughtException uncaughtException - f Lorg/apache/logging/log4j/Logger; field_19603 field_224980_a -c net/minecraft/class_4356 com/mojang/realmsclient/exception/RetryCallException - f I field_19608 field_224985_e -c net/minecraft/class_4355 com/mojang/realmsclient/exception/RealmsServiceException - m ()Ljava/lang/String; toString toString - f I field_19606 field_224983_c - f I field_19604 field_224981_a - f Ljava/lang/String; field_19605 field_224982_b - f Ljava/lang/String; field_19607 field_224984_d -c net/minecraft/class_4360 com/mojang/realmsclient/gui/RealmsDataFetcher - m ()V method_21100 func_225084_n - m ()Lnet/minecraft/class_4882; method_21094 func_225079_h - m (Lnet/minecraft/class_4360;Z)Z method_21086 func_237709_b_ - m (Lnet/minecraft/class_4877;)V method_21074 func_225085_a - m (Lnet/minecraft/class_4360;)Ljava/util/Map; method_21084 func_237708_b_ - m ()V method_21088 func_225072_c - m (Lnet/minecraft/class_4360;)Z method_21076 func_225067_a - m ()V method_21083 func_225086_b - m ()Ljava/util/List; method_21091 func_225078_e - m (Lnet/minecraft/class_4360;Lnet/minecraft/class_4882;)Lnet/minecraft/class_4882; method_21078 func_237705_a_ - m ()Lorg/apache/logging/log4j/Logger; method_21098 func_237711_m_ - m (Lnet/minecraft/class_4360;Ljava/lang/String;)Ljava/lang/String; method_21079 func_237706_a_ - m ()Z method_21101 func_225068_o - m (Lnet/minecraft/class_4360$class_4364;)Z method_21075 func_225083_a - m ()V method_21099 func_225069_m - m ()V method_21097 func_225070_k - m ()Z method_21095 func_225059_i - m (Ljava/util/List;)V method_21087 func_225080_b - m ()Z method_21093 func_225071_g - m ()Ljava/lang/String; method_21096 func_225063_j - m (Lnet/minecraft/class_4360;Z)Z method_21081 func_237707_a_ - m ()V method_21090 func_225087_d - m (Lnet/minecraft/class_4360;I)I method_21077 func_237704_a_ - m ()V method_21082 func_237710_c_ - m ()I method_21092 func_225081_f - m ()Z method_21073 func_225065_a - m (Lnet/minecraft/class_4360;Ljava/util/List;)V method_21085 func_225061_a - f Ljava/lang/Runnable; field_19645 field_225094_g - f Ljava/lang/Runnable; field_19643 field_225092_e - f Lorg/apache/logging/log4j/Logger; field_19639 field_225088_a - f Z field_19652 field_225101_n - f Ljava/util/Map; field_19659 field_225108_u - f Ljava/util/Set; field_19647 field_225096_i - f Ljava/lang/String; field_19653 field_225102_o - f Ljava/util/concurrent/ScheduledFuture; field_19656 field_225105_r - f Ljava/util/concurrent/ScheduledFuture; field_19658 field_225107_t - f Z field_19641 field_225090_c - f Ljava/util/concurrent/ScheduledFuture; field_19654 field_225103_p - f Ljava/lang/Runnable; field_19646 field_225095_h - f Ljava/lang/Runnable; field_19644 field_225093_f - f Ljava/util/concurrent/ScheduledExecutorService; field_19640 field_225089_b - f Ljava/lang/Runnable; field_19642 field_225091_d - f Z field_19651 field_225100_m - f Lnet/minecraft/class_4882; field_19649 field_225098_k - f Ljava/util/concurrent/ScheduledFuture; field_19655 field_225104_q - f I field_19650 field_225099_l - f Ljava/util/concurrent/ScheduledFuture; field_19657 field_225106_s - f Ljava/util/List; field_19648 field_225097_j -c net/minecraft/class_4360$1 com/mojang/realmsclient/gui/RealmsDataFetcher$1 -c net/minecraft/class_4360$class_4361 com/mojang/realmsclient/gui/RealmsDataFetcher$LiveStatsTask - m ()V method_21102 func_225048_a - m ()V run run - f Lnet/minecraft/class_4360; field_19661 field_225049_a -c net/minecraft/class_4360$class_4362 com/mojang/realmsclient/gui/RealmsDataFetcher$PendingInviteUpdateTask - m ()V method_21103 func_225051_a - m ()V run run - f Lnet/minecraft/class_4360; field_19662 field_225052_a -c net/minecraft/class_4360$class_4365 com/mojang/realmsclient/gui/RealmsDataFetcher$TrialAvailabilityTask - m ()V run run - m ()V method_21105 func_225055_a - f Lnet/minecraft/class_4360; field_19670 field_225056_a -c net/minecraft/class_4360$class_4366 com/mojang/realmsclient/gui/RealmsDataFetcher$UnreadNewsTask - m ()V run run - m ()V method_21106 func_225057_a - f Lnet/minecraft/class_4360; field_19671 field_225058_a -c net/minecraft/class_4360$class_4363 com/mojang/realmsclient/gui/RealmsDataFetcher$ServerListUpdateTask - m ()V run run - m ()V method_21104 func_225053_a - f Lnet/minecraft/class_4360; field_19663 field_225054_a -c net/minecraft/class_4360$class_4364 com/mojang/realmsclient/gui/RealmsDataFetcher$Task - m ()[Lnet/minecraft/class_4360$class_4364; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4360$class_4364; valueOf valueOf - f Lnet/minecraft/class_4360$class_4364; field_19666 TRIAL_AVAILABLE - f Lnet/minecraft/class_4360$class_4364; field_19665 PENDING_INVITE - f Lnet/minecraft/class_4360$class_4364; field_19667 LIVE_STATS - f Lnet/minecraft/class_4360$class_4364; field_19668 UNREAD_NEWS - f [Lnet/minecraft/class_4360$class_4364; field_19669 $VALUES - f Lnet/minecraft/class_4360$class_4364; field_19664 SERVER_LIST -c net/minecraft/class_5221 net/minecraft/realms/IErrorConsumer - m (Ljava/lang/String;)V method_27453 func_237703_a_ - m (Lnet/minecraft/class_2561;)V method_21067 func_230434_a_ -c net/minecraft/class_4371 com/mojang/realmsclient/gui/ListButton - m (Lnet/minecraft/class_4904;Lnet/minecraft/class_4280$class_4281;Ljava/util/List;IDD)V method_21114 func_237728_a_ - m (Lnet/minecraft/class_4587;IIII)V method_21111 func_237726_a_ - m (Lnet/minecraft/class_4587;IIZ)V method_21112 func_230435_a_ - m (Lnet/minecraft/class_4587;Ljava/util/List;Lnet/minecraft/class_4904;IIII)V method_21113 func_237727_a_ - m ()I method_21115 func_225123_b - m (I)V method_21110 func_225121_a - m ()I method_21109 func_225122_a - f I field_19693 field_225128_d - f I field_19692 field_225127_c - f I field_19691 field_225126_b - f I field_19690 field_225125_a -c net/minecraft/class_4367 com/mojang/realmsclient/gui/RealmsServerSlotButton - m ()Lnet/minecraft/class_4367$class_4370; method_25099 func_237717_a_ - m (Lnet/minecraft/class_4587;IIIIZLjava/lang/String;IJLjava/lang/String;ZZLnet/minecraft/class_4367$class_4368;Lnet/minecraft/class_2561;)V method_21107 func_237718_a_ - m (Lnet/minecraft/class_4877;Ljava/lang/String;ZZLnet/minecraft/class_4367$class_4368;)Lcom/mojang/datafixers/util/Pair; method_27454 func_237719_a_ - m (Lnet/minecraft/class_4877;ZZ)Lnet/minecraft/class_4367$class_4368; method_27455 func_237720_a_ - f Lnet/minecraft/class_2561; field_26469 field_243092_w - f I field_19675 field_223776_d - f Lnet/minecraft/class_2561; field_26470 field_243093_x - f Ljava/util/function/Consumer; field_19673 field_223774_b - f Lnet/minecraft/class_2960; field_22681 field_237712_a_ - f Ljava/util/function/Supplier; field_19672 field_223773_a - f Lnet/minecraft/class_2960; field_22682 field_237713_b_ - f Lnet/minecraft/class_2960; field_22684 field_237715_d_ - f Lnet/minecraft/class_2960; field_22683 field_237714_c_ - f Lnet/minecraft/class_2960; field_22685 field_237716_e_ - f Lnet/minecraft/class_4367$class_4370; field_19677 field_223778_f - f Lnet/minecraft/class_2561; field_26468 field_243091_v - f I field_19676 field_223777_e -c net/minecraft/class_4367$class_4368 com/mojang/realmsclient/gui/RealmsServerSlotButton$Action - m (Ljava/lang/String;)Lnet/minecraft/class_4367$class_4368; valueOf valueOf - m ()[Lnet/minecraft/class_4367$class_4368; values values - f Lnet/minecraft/class_4367$class_4368; field_19679 SWITCH_SLOT - f Lnet/minecraft/class_4367$class_4368; field_19680 JOIN - f Lnet/minecraft/class_4367$class_4368; field_19678 NOTHING - f [Lnet/minecraft/class_4367$class_4368; field_19681 $VALUES -c net/minecraft/class_4367$class_4370 com/mojang/realmsclient/gui/RealmsServerSlotButton$ServerData - m (Lnet/minecraft/class_4367$class_4370;)Lnet/minecraft/class_2561; method_27456 func_237725_e_ - m (Lnet/minecraft/class_4367$class_4370;)J method_25103 func_237723_c_ - m (Lnet/minecraft/class_4367$class_4370;)Ljava/lang/String; method_25104 func_237724_d_ - m (Lnet/minecraft/class_4367$class_4370;)Z method_25102 func_237721_a_ - m (Lnet/minecraft/class_4367$class_4370;)Ljava/lang/String; method_25100 func_237722_b_ - f Ljava/lang/String; field_19683 field_225111_b - f Z field_19686 field_225114_e - f Lnet/minecraft/class_2561; field_19689 field_225117_h - f Z field_19687 field_225115_f - f Ljava/lang/String; field_19685 field_225113_d - f J field_19684 field_225112_c - f Z field_19682 field_225110_a - f Lnet/minecraft/class_4367$class_4368; field_19688 field_225116_g -c net/minecraft/class_4381 com/mojang/realmsclient/gui/screens/RealmsBackupScreen - m (Lnet/minecraft/class_4381;I)I method_21157 func_224089_b - m (Lnet/minecraft/class_4381;)V method_21161 func_224093_e - m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_310; method_25108 func_237750_b_ - m (Lnet/minecraft/class_4381;Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_21151 func_243099_a - m (Lnet/minecraft/class_4381;Ljava/util/List;)Ljava/util/List; method_21152 func_237747_a_ - m (Lnet/minecraft/class_4867;Ljava/lang/String;)V method_21147 func_224103_a - m ()V method_21168 func_224100_h - m ()Z method_21164 func_224111_f - m ()V method_21160 func_224113_d - m ()V method_21154 func_224112_b - m (Lnet/minecraft/class_4185;)V method_25110 func_237754_c_ - m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_310; method_25118 func_243103_j - m ()Lorg/apache/logging/log4j/Logger; method_21145 func_237742_a_ - m (Lnet/minecraft/class_4185;)V method_25106 func_237748_a_ - m (Lnet/minecraft/class_4381;Ljava/lang/Boolean;)Ljava/lang/Boolean; method_21150 func_237745_a_ - m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_310; method_25117 func_237763_i_ - m (Lnet/minecraft/class_4381;)Ljava/util/List; method_21156 func_237753_c_ - m (Lnet/minecraft/class_4381;)V method_21169 func_237760_f_ - m (Lnet/minecraft/class_4381;I)V method_21149 func_237751_b_ - m (I)V method_21155 func_224104_b - m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_327; method_25116 func_237762_h_ - m ()Lnet/minecraft/class_2960; method_25107 func_237749_b_ - m (Z)V method_25114 func_237759_d_ - m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_4381$class_4382; method_21159 func_237757_d_ - m (Z)V method_25111 func_237755_c_ - m ()V method_21170 func_224097_i - m ()Lnet/minecraft/class_2960; method_25112 func_243101_g - m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_327; method_25115 func_237761_g_ - m (I)I method_21146 func_237743_a_ - m ()V method_21166 func_224088_g - m ()Z method_21162 func_224096_e - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_21153 func_237744_a_ - m (Lnet/minecraft/class_4185;)V method_25113 func_237758_d_ - m (Lnet/minecraft/class_4381;)Lnet/minecraft/class_4877; method_21148 func_224099_a - m ()Lnet/minecraft/class_2561; method_30865 func_243100_f - m ()Lnet/minecraft/class_2561; method_30866 func_243102_h - m (Lnet/minecraft/class_4185;)V method_25109 func_237752_b_ - f Lnet/minecraft/class_2561; field_26472 field_243095_q - f Lnet/minecraft/class_2960; field_22687 field_237741_c_ - f Lnet/minecraft/class_2561; field_26474 field_243097_s - f I field_19747 field_224120_g - f Lnet/minecraft/class_2561; field_19745 field_224118_e - f Lnet/minecraft/class_4185; field_19750 field_224123_j - f I field_19742 field_224115_b - f Lnet/minecraft/class_4903; field_19754 field_224127_n - f Ljava/util/List; field_19744 field_224117_d - f Lnet/minecraft/class_4388; field_19743 field_224116_c - f Lnet/minecraft/class_2561; field_26471 field_243094_p - f Lnet/minecraft/class_4877; field_19753 field_224126_m - f Lnet/minecraft/class_2561; field_26473 field_243096_r - f Lnet/minecraft/class_2960; field_22686 field_237740_b_ - f I field_19748 field_224121_h - f Lnet/minecraft/class_4381$class_4382; field_19746 field_224119_f - f Ljava/lang/Boolean; field_19752 field_224125_l - f Lorg/apache/logging/log4j/Logger; field_19741 field_224114_a - f Lnet/minecraft/class_4185; field_19751 field_224124_k - f Lnet/minecraft/class_4185; field_19749 field_224122_i -c net/minecraft/class_4381$1 com/mojang/realmsclient/gui/screens/RealmsBackupScreen$1 - m ()V run run - m (Ljava/util/List;)V method_21171 func_225134_a - f Lnet/minecraft/class_4381; field_19755 field_225135_a -c net/minecraft/class_4381$class_4382 com/mojang/realmsclient/gui/screens/RealmsBackupScreen$BackupObjectSelectionList - m (Lnet/minecraft/class_4381$class_4383;)V method_25119 setSelected - m (Lnet/minecraft/class_4867;)V method_21173 func_223867_a - m (I)V method_21172 func_223866_a - f Lnet/minecraft/class_4381; field_19760 field_223868_a -c net/minecraft/class_4381$class_4383 com/mojang/realmsclient/gui/screens/RealmsBackupScreen$BackupObjectSelectionListEntry - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4867;IIII)V method_21175 func_237767_a_ - m (Lnet/minecraft/class_4587;IIII)V method_21174 func_237766_a_ - m (Ljava/util/Date;)Ljava/lang/String; method_21176 func_223738_a - m (Lnet/minecraft/class_4587;IIII)V method_21177 func_237768_b_ - f Lnet/minecraft/class_4867; field_19761 field_237765_b_ - f Lnet/minecraft/class_4381; field_19762 field_223743_b -c net/minecraft/class_4379 com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen - m (Lnet/minecraft/class_4185;)V method_25105 func_237731_a_ - m (Lnet/minecraft/class_4379;)Lnet/minecraft/class_310; method_29335 func_237729_a_ - m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_2561; method_21141 func_237733_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_21143 func_237735_b_ - m (Lnet/minecraft/class_4379;Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_2561; method_21139 func_237730_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_21140 func_237732_a_ - m (Lnet/minecraft/class_4379;)Lnet/minecraft/class_4867; method_21142 func_237734_b_ - f Lnet/minecraft/class_4867; field_19736 field_224049_e - f Lnet/minecraft/class_4379$class_4380; field_19738 field_224051_g - f Lnet/minecraft/class_437; field_19734 field_224047_c -c net/minecraft/class_4379$class_5344 com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen$BackupInfoEntry - f Ljava/lang/String; field_25259 field_237739_c_ - f Ljava/lang/String; field_25258 field_237738_b_ - f Lnet/minecraft/class_4379; field_25257 field_237737_a_ -c net/minecraft/class_4379$class_4380 com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen$BackupInfoList - m (Ljava/lang/String;Ljava/lang/String;)V method_29336 func_237736_a_ - f Lnet/minecraft/class_4379; field_19740 field_223864_a -c net/minecraft/class_4387 com/mojang/realmsclient/gui/screens/RealmsClientOutdatedScreen - m (Lnet/minecraft/class_4185;)V method_25132 func_237786_a_ - f Z field_19788 field_224130_b - f Lnet/minecraft/class_2561; field_26477 field_243106_c - f [Lnet/minecraft/class_2561; field_26478 field_243107_p - f [Lnet/minecraft/class_2561; field_26476 field_243105_b - f Lnet/minecraft/class_437; field_19787 field_224129_a - f Lnet/minecraft/class_2561; field_26475 field_243104_a -c net/minecraft/class_4384 com/mojang/realmsclient/gui/screens/RealmsBrokenWorldScreen - m ()V method_25123 func_237772_a_ - m (J)V method_22101 func_237779_b_ - m (I)V method_21187 func_224066_b - m (J)V method_21181 func_224068_a - m (IZ)V method_25121 func_237774_a_ - m ()V method_25131 func_237785_x_ - m (IZ)V method_25125 func_237778_b_ - m (Lnet/minecraft/class_4587;IIIIZLjava/lang/String;IJLjava/lang/String;Z)V method_21180 func_237775_a_ - m ()V method_25130 func_237784_w_ - m ()V method_25129 func_237783_v_ - m (I)I method_21179 func_224065_a - m ()V method_25128 func_237782_n_ - m ()Z method_21196 func_224069_f - m ()V method_25127 func_237781_m_ - m ()V method_21194 func_224060_e - m ()V method_21178 func_224058_a - m (Lnet/minecraft/class_4185;)V method_25122 func_237776_a_ - m (ILnet/minecraft/class_4185;)V method_25120 func_237773_a_ - m (ILnet/minecraft/class_4185;)V method_25124 func_237777_b_ - m (ILnet/minecraft/class_4185;)V method_25126 func_237780_c_ - f Lnet/minecraft/class_437; field_19764 field_224072_b - f Ljava/util/List; field_19778 field_224086_p - f Lnet/minecraft/class_2561; field_24204 field_237769_r_ - f I field_19779 field_224087_q - f I field_19771 field_224079_i - f I field_19770 field_224078_h - f J field_19767 field_224075_e - f Lnet/minecraft/class_4325; field_19765 field_224073_c - f [Lnet/minecraft/class_2561; field_19769 field_224077_g - f Lnet/minecraft/class_4877; field_20492 field_224074_d - f Lorg/apache/logging/log4j/Logger; field_19763 field_224071_a -c net/minecraft/class_4389 com/mojang/realmsclient/gui/screens/RealmsConfirmScreen - m (Lnet/minecraft/class_4185;)V method_25153 func_237826_b_ - m (Lnet/minecraft/class_4185;)V method_25152 func_237825_a_ - f Lnet/minecraft/class_2561; field_19825 field_224146_f - f Lnet/minecraft/class_2561; field_19821 field_224142_b - f I field_19826 field_224147_g - f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_22692 field_237824_a_ -c net/minecraft/class_4388 com/mojang/realmsclient/gui/screens/RealmsConfigureWorldScreen - m ()V method_25150 func_237820_x_ - m (I)I method_21228 func_224368_c - m ()V method_25149 func_237819_w_ - m (Lnet/minecraft/class_4185;)V method_25147 func_237817_i_ - m (Lnet/minecraft/class_437;)V method_21217 func_237800_a_ - m (ILnet/minecraft/class_4185;)V method_25135 func_237795_a_ - m ()Lnet/minecraft/class_4388; method_21219 func_224407_b - m (Lnet/minecraft/class_4587;IIII)V method_21229 func_237811_e_ - m ()V method_21240 func_224377_h - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_21214 func_237796_a_ - m (Lnet/minecraft/class_4587;IIII)V method_21201 func_237807_c_ - m (Lnet/minecraft/class_4185;)V method_25145 func_237815_g_ - m ()V method_25134 func_237794_B_ - m ()V method_21236 func_224401_f - m (Lnet/minecraft/class_4185;)V method_25142 func_237812_e_ - m (Lnet/minecraft/class_4877;IZ)V method_25136 func_237797_a_ - m ()Lnet/minecraft/class_4877; method_21244 func_237822_z_ - m (Lnet/minecraft/class_4185;)V method_25140 func_237808_c_ - m (Lnet/minecraft/class_4185;)V method_25138 func_237799_a_ - m (II)I method_21200 func_224374_a - m (ZLnet/minecraft/class_437;)V method_21218 func_237802_a_ - m (Lnet/minecraft/class_4883;)V method_21208 func_224386_a - m ()V method_21198 func_224398_a - m (J)V method_22103 func_237803_b_ - m (ILnet/minecraft/class_4877;)V method_21203 func_224403_a - m (I)V method_21199 func_224402_a - m (Lnet/minecraft/class_4185;)V method_25148 func_237818_j_ - m (Lnet/minecraft/class_4587;IIII)V method_21221 func_237809_d_ - m (Lnet/minecraft/class_4877;IZ)V method_25139 func_237805_b_ - m (I)I method_21220 func_224411_b - m ()V method_21242 func_224412_j - m ()Z method_21238 func_224376_g - m (Lnet/minecraft/class_4185;)V method_25146 func_237816_h_ - m (Lnet/minecraft/class_4355;)V method_25137 func_237798_a_ - m (Lnet/minecraft/class_4185;)V method_25144 func_237814_f_ - m ()V method_21234 func_224400_e - m (Lnet/minecraft/class_4587;IIII)V method_25143 func_237813_f_ - m (Lnet/minecraft/class_4185;)V method_25141 func_237810_d_ - m ()V method_21231 func_224390_d - m (Lnet/minecraft/class_2561;)V method_27457 func_237801_a_ - m (Ljava/lang/String;Ljava/lang/String;)V method_21215 func_224410_a - m (Lnet/minecraft/class_4185;)V method_21226 func_237806_b_ - m (Lnet/minecraft/class_4877;)V method_21206 func_224385_a - m (ILnet/minecraft/class_4877;)V method_21222 func_224388_b - m ()V method_25133 func_237793_A_ - m (J)V method_21204 func_224387_a - m (Lnet/minecraft/class_4587;IIIII)V method_21202 func_237804_b_ - m ()V method_25151 func_237821_y_ - f I field_19808 field_224431_s - f Lnet/minecraft/class_2561; field_19791 field_224414_b - f Lnet/minecraft/class_2960; field_22690 field_237789_p_ - f I field_19795 field_224418_f - f Lnet/minecraft/class_2561; field_26480 field_243109_s - f Lnet/minecraft/class_4185; field_19804 field_224427_o - f Lnet/minecraft/class_2960; field_22689 field_237788_c_ - f Lnet/minecraft/class_2561; field_26482 field_243111_u - f Lnet/minecraft/class_2561; field_26484 field_243113_w - f Z field_19806 field_224429_q - f Lnet/minecraft/class_4185; field_19802 field_224425_m - f Lnet/minecraft/class_4185; field_19800 field_224423_k - f Lnet/minecraft/class_2561; field_26486 field_243115_y - f Lnet/minecraft/class_4325; field_19792 field_224415_c - f I field_19807 field_224430_r - f Lorg/apache/logging/log4j/Logger; field_19790 field_224413_a - f Lnet/minecraft/class_2960; field_22691 field_237790_q_ - f I field_19796 field_224419_g - f Lnet/minecraft/class_2960; field_22688 field_237787_b_ - f J field_19794 field_224417_e - f Lnet/minecraft/class_2561; field_26479 field_243108_r - f Lnet/minecraft/class_2561; field_26481 field_243110_t - f Lnet/minecraft/class_4185; field_19805 field_224428_p - f Lnet/minecraft/class_4185; field_19803 field_224426_n - f Lnet/minecraft/class_4877; field_20493 field_224416_d - f Lnet/minecraft/class_2561; field_26483 field_243112_v - f Lnet/minecraft/class_2561; field_26485 field_243114_x - f Lnet/minecraft/class_4185; field_19801 field_224424_l - f Lnet/minecraft/class_4185; field_19799 field_224422_j -c net/minecraft/class_4388$1 com/mojang/realmsclient/gui/screens/RealmsConfigureWorldScreen$1 - f [I field_19812 field_237823_a_ -c net/minecraft/class_4392 com/mojang/realmsclient/gui/screens/RealmsDownloadLatestWorldScreen - m ()V method_21269 func_224174_d - m (Lnet/minecraft/class_4185;)V method_25158 func_237834_a_ - m ()V method_21278 func_224165_h - m (Lnet/minecraft/class_4587;J)V method_21266 func_237833_a_ - m ()V method_21279 func_224159_i - m ()V method_22104 func_237839_n_ - m (Z)V method_25159 func_237837_c_ - m (Ljava/lang/String;)J method_21259 func_224152_a - m (Lnet/minecraft/class_4587;)V method_21272 func_237835_b_ - m (Lnet/minecraft/class_4587;)V method_21274 func_237836_c_ - m ()V method_21265 func_224162_c - m (Lnet/minecraft/class_4587;)V method_21276 func_237838_d_ - f Z field_19857 field_224188_n - f I field_19862 field_224193_s - f Lnet/minecraft/class_2561; field_19847 field_224178_d - f J field_19861 field_224192_r - f Lnet/minecraft/class_2561; field_20494 field_224183_i - f Ljava/util/concurrent/locks/ReentrantLock; field_19868 field_237832_b_ - f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_22693 field_237831_J_ - f [Ljava/lang/String; field_19863 field_224194_t - f Lnet/minecraft/class_437; field_19845 field_224176_b - f Z field_19856 field_224187_m - f Lnet/minecraft/class_2561; field_19853 field_224184_j - f Z field_19855 field_224186_l - f Lnet/minecraft/class_4185; field_22694 field_224180_f - f Lnet/minecraft/class_4889; field_19846 field_224177_c - f Z field_19867 field_224198_x - f Lorg/apache/logging/log4j/Logger; field_19844 field_224175_a - f Ljava/lang/Long; field_19860 field_224191_q - f Ljava/lang/Long; field_19859 field_224190_p - f Ljava/lang/String; field_19854 field_224185_k - f Lnet/minecraft/class_4392$class_4393; field_19851 field_224182_h - f Ljava/lang/String; field_19850 field_224181_g - f I field_19864 field_224195_u - f Z field_19858 field_224189_o - f Lcom/google/common/util/concurrent/RateLimiter; field_19848 field_224179_e -c net/minecraft/class_4392$class_4393 com/mojang/realmsclient/gui/screens/RealmsDownloadLatestWorldScreen$DownloadStatus - f Lnet/minecraft/class_4392; field_19873 field_225141_c - f J field_19871 field_225139_a - f J field_19872 field_225140_b -c net/minecraft/class_4390 com/mojang/realmsclient/gui/screens/RealmsCreateRealmScreen - m ()V method_25156 func_237829_l_ - m ()V method_21245 func_224132_a - m (Lnet/minecraft/class_4185;)V method_25155 func_237828_b_ - m (Lnet/minecraft/class_4185;)V method_25154 func_237827_a_ - m ()V method_25157 func_237830_m_ - m ()Z method_21247 func_224133_b - f Lnet/minecraft/class_4325; field_19830 field_224136_b - f Lnet/minecraft/class_4877; field_19829 field_224135_a - f Lnet/minecraft/class_2561; field_26487 field_243116_a - f Lnet/minecraft/class_4185; field_19833 field_224139_e - f Lnet/minecraft/class_342; field_19832 field_224138_d - f Lnet/minecraft/class_2561; field_26488 field_243117_b - f Lnet/minecraft/class_342; field_19831 field_224137_c - f Lnet/minecraft/class_4903; field_19834 field_224140_f -c net/minecraft/class_4395 com/mojang/realmsclient/gui/screens/RealmsInviteScreen - m (Lnet/minecraft/class_4185;)V method_25162 func_237844_b_ - m ()V method_21284 func_224211_a - m (Lnet/minecraft/class_4185;)V method_25161 func_237843_a_ - m (Lnet/minecraft/class_2561;)V method_21286 func_224209_a - f Lnet/minecraft/class_437; field_19882 field_224217_e - f Lnet/minecraft/class_2561; field_26489 field_243118_b - f Lorg/apache/logging/log4j/Logger; field_19878 field_224213_a - f Lnet/minecraft/class_4388; field_19881 field_224216_d - f Lnet/minecraft/class_342; field_22696 field_224214_b - f Lnet/minecraft/class_2561; field_26490 field_243119_c - f Lnet/minecraft/class_4877; field_19880 field_224215_c - f Lnet/minecraft/class_2561; field_19887 field_224222_j -c net/minecraft/class_4394 com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen - m (Lnet/minecraft/class_2561;)V method_21282 func_237841_a_ - m (Lnet/minecraft/class_4355;)V method_21280 func_224224_a - m (Lnet/minecraft/class_4185;)V method_25160 func_237840_a_ - m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_21283 func_237842_a_ - f Lnet/minecraft/class_437; field_22695 field_224228_a - f Lnet/minecraft/class_2561; field_19875 field_224229_b - f Lnet/minecraft/class_2561; field_19876 field_224230_c -c net/minecraft/class_4398 com/mojang/realmsclient/gui/screens/RealmsLongRunningMcoTaskScreen - m ()V method_21293 func_224236_c - m (Lnet/minecraft/class_4185;)V method_25167 func_237851_a_ - m ()V method_25166 func_237850_a_ - m ()Z method_21291 func_224235_b - m (Lnet/minecraft/class_2561;)V method_21292 func_224234_b - m (Lnet/minecraft/class_4185;)V method_25168 func_237852_b_ - f Lnet/minecraft/class_2561; field_19916 field_224245_i - f [Ljava/lang/String; field_19908 field_224237_a - f Lorg/apache/logging/log4j/Logger; field_19909 field_224238_b - f Lnet/minecraft/class_2561; field_19914 field_224243_g - f Lnet/minecraft/class_4358; field_19919 field_224248_l - f I field_19918 field_224247_k - f I field_19920 field_224249_m - f Lnet/minecraft/class_437; field_19912 field_224241_e - f Z field_19917 field_224246_j -c net/minecraft/class_4396 com/mojang/realmsclient/gui/screens/RealmsLongConfirmationScreen - m (Lnet/minecraft/class_4185;)V method_25165 func_237848_c_ - m (Lnet/minecraft/class_4185;)V method_25164 func_237847_b_ - m (Lnet/minecraft/class_4185;)V method_25163 func_237846_a_ - f Lnet/minecraft/class_2561; field_19896 field_224255_f - f Lnet/minecraft/class_4396$class_4397; field_19895 field_224254_e - f Z field_19899 field_224258_i - f Lnet/minecraft/class_2561; field_19897 field_224256_g - f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_22697 field_237845_a_ -c net/minecraft/class_4396$class_4397 com/mojang/realmsclient/gui/screens/RealmsLongConfirmationScreen$Type - m ()[Lnet/minecraft/class_4396$class_4397; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4396$class_4397; valueOf valueOf - f Lnet/minecraft/class_4396$class_4397; field_19904 Info - f [Lnet/minecraft/class_4396$class_4397; field_19907 $VALUES - f Ljava/lang/String; field_19906 field_225144_d - f I field_19905 field_225143_c - f Lnet/minecraft/class_4396$class_4397; field_19903 Warning -c net/minecraft/class_4400 com/mojang/realmsclient/gui/screens/RealmsParentalConsentScreen - m (Lnet/minecraft/class_4185;)V method_25171 func_237860_a_ - m (Lnet/minecraft/class_4185;)V method_25173 func_237862_c_ - m (Lnet/minecraft/class_4185;)V method_25172 func_237861_b_ - f Lnet/minecraft/class_5489; field_26492 field_243123_c - f Lnet/minecraft/class_437; field_22701 field_224260_a - f Lnet/minecraft/class_2561; field_26491 field_243122_a -c net/minecraft/class_4399 com/mojang/realmsclient/gui/screens/RealmsNotificationsScreen - m (Z)Z method_21296 func_224264_a - m (Z)Z method_21297 func_224263_b - m (Lnet/minecraft/class_4587;II)V method_21295 func_237857_a_ - m ()Z method_25169 func_237858_g_ - m ()V method_21294 func_224261_a - m ()Z method_25170 func_237859_j_ - f Z field_19926 field_224268_d - f Z field_19927 field_224269_e - f Z field_19928 field_224270_f - f Lnet/minecraft/class_2960; field_22698 field_237853_a_ - f I field_19924 field_224266_b - f Lnet/minecraft/class_2960; field_22699 field_237854_b_ - f Lnet/minecraft/class_2960; field_22700 field_237855_c_ - f Z field_19925 field_224267_c - f Lnet/minecraft/class_4360; field_19923 field_237856_p_ -c net/minecraft/class_4399$1 com/mojang/realmsclient/gui/screens/RealmsNotificationsScreen$1 - m ()V run run - f Lnet/minecraft/class_4399; field_19930 field_225145_a -c net/minecraft/class_4401 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen - m (Lnet/minecraft/class_4185;)V method_25177 func_237875_b_ - m (Lnet/minecraft/class_4401;Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_21304 func_243128_a - m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_310; method_25182 func_237883_f_ - m (I)V method_21308 func_224321_b - m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_310; method_25178 func_237876_c_ - m ()Lorg/apache/logging/log4j/Logger; method_21299 func_237865_a_ - m (I)V method_21311 func_224329_c - m (Lnet/minecraft/class_4401;)V method_21312 func_237882_e_ - m (Lnet/minecraft/class_4401;I)I method_21310 func_237874_b_ - m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_310; method_25174 func_237867_a_ - m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_327; method_25186 func_243136_j - m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_327; method_25184 func_237887_j_ - m (Lnet/minecraft/class_4401;I)V method_21313 func_243130_d - m (I)Z method_21314 func_224316_d - m ()V method_21307 func_224331_b - m (Lnet/minecraft/class_4185;)V method_25179 func_237878_c_ - m (Lnet/minecraft/class_4185;)V method_25175 func_237871_a_ - m ()Lnet/minecraft/class_2960; method_25176 func_237872_b_ - m ()Lnet/minecraft/class_2960; method_25180 func_243132_g - m (I)V method_21300 func_224318_a - m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_310; method_25183 func_243133_g - m (Lnet/minecraft/class_4401;I)V method_21316 func_237868_a_ - m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_310; method_25181 func_237880_d_ - m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_327; method_25185 func_243135_i - m (Lnet/minecraft/class_4401;Z)Z method_21305 func_237870_a_ - m ()Lnet/minecraft/class_2561; method_30867 func_243131_f - m ()Lnet/minecraft/class_2561; method_30868 func_243134_h - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_21306 func_237866_a_ - m (Lnet/minecraft/class_4401;)Lnet/minecraft/class_4401$class_4402; method_21302 func_237873_b_ - m (Lnet/minecraft/class_4401;I)V method_21303 func_243129_c - f Lnet/minecraft/class_2960; field_22703 field_237864_c_ - f Lnet/minecraft/class_4185; field_19943 field_224341_i - f I field_19941 field_224339_g - f Lnet/minecraft/class_4401$class_4402; field_19939 field_224337_e - f Lnet/minecraft/class_2561; field_26493 field_243124_p - f Lnet/minecraft/class_2960; field_22702 field_237863_b_ - f Lnet/minecraft/class_2561; field_26495 field_243126_r - f Lnet/minecraft/class_4185; field_19942 field_224340_h - f Lnet/minecraft/class_2561; field_19937 field_224335_c - f Z field_19938 field_224336_d - f Lnet/minecraft/class_437; field_19936 field_224334_b - f Lorg/apache/logging/log4j/Logger; field_19935 field_224333_a - f Lnet/minecraft/class_4903; field_19940 field_224338_f - f Lnet/minecraft/class_2561; field_26494 field_243125_q -c net/minecraft/class_4401$class_4403 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$InvitationEntry - m (Lnet/minecraft/class_4401$class_4403;)Lnet/minecraft/class_4871; method_25187 func_237894_a_ - m (Lnet/minecraft/class_4587;II)V method_21323 func_237892_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4871;IIII)V method_21324 func_237893_a_ - f Ljava/util/List; field_19955 field_223752_c - f Lnet/minecraft/class_4871; field_19953 field_223750_a - f Lnet/minecraft/class_4401; field_19954 field_223751_b -c net/minecraft/class_4401$class_4403$class_4404 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$InvitationEntry$AcceptButton - f Lnet/minecraft/class_4401$class_4403; field_19956 field_225129_e -c net/minecraft/class_4401$class_4403$class_4405 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$InvitationEntry$RejectButton - f Lnet/minecraft/class_4401$class_4403; field_19957 field_225130_e -c net/minecraft/class_4401$class_4402 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$InvitationList - m (Lnet/minecraft/class_4401$class_4403;)V method_25188 setSelected - m (I)V method_21322 func_223873_b - m (I)V method_21321 func_223872_a - f Lnet/minecraft/class_4401; field_19952 field_223874_a -c net/minecraft/class_4401$1 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$1 - m ()V run run - m (Ljava/util/List;)V method_21318 func_225147_a - m (Lnet/minecraft/class_4871;)Lnet/minecraft/class_4401$class_4403; method_21317 func_225146_a - f Lnet/minecraft/class_4401; field_19944 field_225148_a -c net/minecraft/class_4401$2 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$2 - m ()V run run - m (I)V method_21319 func_237889_a_ - f Lnet/minecraft/class_4401; field_19949 field_223819_a - f I field_19948 field_237888_a_ -c net/minecraft/class_4401$3 com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$3 - m ()V run run - m (I)V method_21320 func_237891_a_ - f I field_19950 field_237890_a_ - f Lnet/minecraft/class_4401; field_19951 field_223820_a -c net/minecraft/class_4409 com/mojang/realmsclient/gui/screens/RealmsResetNormalWorldScreen - m (Lnet/minecraft/class_4185;)V method_25203 func_237935_c_ - m (Lnet/minecraft/class_4185;)V method_25202 func_237934_b_ - m (Lnet/minecraft/class_4185;)V method_25201 func_237933_a_ - m ()Lnet/minecraft/class_2561; method_27458 func_237937_g_ - m ()Lnet/minecraft/class_2561; method_27459 func_237938_j_ - m (Lnet/minecraft/class_4185;)V method_25204 func_237936_d_ - f Lnet/minecraft/class_2561; field_24206 field_224365_m - f Lnet/minecraft/class_4903; field_19983 field_224355_c - f Ljava/lang/Integer; field_19986 field_224358_f - f Lnet/minecraft/class_342; field_19984 field_224356_d - f [Lnet/minecraft/class_2561; field_24205 field_243145_b - f Lnet/minecraft/class_2561; field_26506 field_243144_a - f Lnet/minecraft/class_4410; field_19982 field_224354_b - f Ljava/lang/Boolean; field_19985 field_224357_e -c net/minecraft/class_4406 com/mojang/realmsclient/gui/screens/RealmsPlayerScreen - m (I)I method_25189 func_237902_a_ - m (Z)V method_25195 func_237919_c_ - m (Lnet/minecraft/class_4185;)V method_25194 func_237918_c_ - m (I)I method_25193 func_237913_c_ - m (Lnet/minecraft/class_4406;)I method_21349 func_237909_b_ - m (Lnet/minecraft/class_4185;)V method_25190 func_237907_a_ - m (Lnet/minecraft/class_4406;)Lnet/minecraft/class_327; method_31124 func_237927_f_ - m (Lnet/minecraft/class_4587;IIII)V method_21340 func_237925_e_ - m (Lnet/minecraft/class_4587;IIII)V method_21327 func_237914_c_ - m (Lnet/minecraft/class_4406;I)V method_21337 func_237905_a_ - m (Lnet/minecraft/class_4870;)V method_21328 func_224283_a - m (Lnet/minecraft/class_4406;I)V method_21330 func_237916_c_ - m (I)V method_21334 func_224289_b - m (Lnet/minecraft/class_4406;Lnet/minecraft/class_4587;IIII)V method_21338 func_237911_b_ - m (Lnet/minecraft/class_4406;)Lnet/minecraft/class_4406$class_5488; method_21350 func_243143_d - m (I)V method_21344 func_224274_d - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_21332 func_237903_a_ - m (Lnet/minecraft/class_4406;)V method_21351 func_237926_e_ - m (I)I method_25191 func_237908_b_ - m (Lnet/minecraft/class_4185;)V method_25197 func_237924_d_ - m (Lnet/minecraft/class_4185;)V method_25192 func_237912_b_ - m (Lnet/minecraft/class_4406;)I method_21348 func_237904_a_ - m (Lnet/minecraft/class_4587;IIII)V method_21335 func_237921_d_ - m (Lnet/minecraft/class_4406;)Lnet/minecraft/class_4877; method_21336 func_237915_c_ - m (Lnet/minecraft/class_4406;I)I method_21346 func_237923_d_ - m (Lnet/minecraft/class_4406;I)V method_21342 func_237910_b_ - m (I)Z method_21326 func_224296_a - m (Lnet/minecraft/class_4406;Lnet/minecraft/class_4587;IIII)V method_21343 func_237917_c_ - m (I)V method_21339 func_224279_c - m ()V method_21325 func_224280_a - m (Lnet/minecraft/class_4406;Lnet/minecraft/class_4587;IIII)V method_21331 func_237906_a_ - m (I)V method_21347 func_224292_e - m ()V method_21333 func_224298_b - f Lnet/minecraft/class_2561; field_19959 field_224301_b - f Lnet/minecraft/class_4388; field_19960 field_224302_c - f I field_19964 field_224306_g - f Lnet/minecraft/class_2960; field_22706 field_237897_p_ - f I field_19968 field_224310_k - f I field_19970 field_224312_m - f Lnet/minecraft/class_4185; field_19966 field_224308_i - f Lnet/minecraft/class_2561; field_26499 field_243139_s - f Lnet/minecraft/class_2960; field_22705 field_237896_c_ - f Lnet/minecraft/class_4903; field_19972 field_224314_o - f Lnet/minecraft/class_2561; field_26501 field_243141_u - f Lnet/minecraft/class_4877; field_19961 field_224303_d - f Z field_19971 field_224313_n - f I field_19963 field_224305_f - f Ljava/lang/String; field_19969 field_224311_l - f Lnet/minecraft/class_4406$class_5488; field_26496 field_243137_J - f Lorg/apache/logging/log4j/Logger; field_19958 field_224300_a - f Lnet/minecraft/class_2960; field_22707 field_237898_q_ - f I field_19965 field_224307_h - f Lnet/minecraft/class_2960; field_22704 field_237895_b_ - f Lnet/minecraft/class_4185; field_19967 field_224309_j - f Lnet/minecraft/class_2561; field_26500 field_243140_t - f Lnet/minecraft/class_4406$class_4407; field_19962 field_224304_e - f Lnet/minecraft/class_2561; field_26498 field_243138_r -c net/minecraft/class_4406$class_4407 com/mojang/realmsclient/gui/screens/RealmsPlayerScreen$InvitedList - m (Lnet/minecraft/class_4406$class_4408;)V method_25200 setSelected - m (I)V method_21353 func_223869_a - m (Lnet/minecraft/class_4874;)V method_21354 func_223870_a - f Lnet/minecraft/class_4406; field_19978 field_223871_a -c net/minecraft/class_4406$class_5488 com/mojang/realmsclient/gui/screens/RealmsPlayerScreen$GuestAction - m (Ljava/lang/String;)Lnet/minecraft/class_4406$class_5488; valueOf valueOf - m ()[Lnet/minecraft/class_4406$class_5488; values values - f Lnet/minecraft/class_4406$class_5488; field_26504 NONE - f Lnet/minecraft/class_4406$class_5488; field_26503 REMOVE - f [Lnet/minecraft/class_4406$class_5488; field_26505 $VALUES - f Lnet/minecraft/class_4406$class_5488; field_26502 TOGGLE_OP -c net/minecraft/class_4406$class_4408 com/mojang/realmsclient/gui/screens/RealmsPlayerScreen$InvitedEntry - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4874;IIII)V method_21356 func_237932_a_ - m (Lnet/minecraft/class_4587;I)V method_21355 func_237931_a_ - f Lnet/minecraft/class_4874; field_19979 field_237930_b_ - f Lnet/minecraft/class_4406; field_19980 field_223747_b -c net/minecraft/class_4415 com/mojang/realmsclient/gui/screens/NotifableRealmsScreen - m (Lnet/minecraft/class_4890;)V method_21395 func_223627_a_ -c net/minecraft/class_4410 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen - m (Lnet/minecraft/class_4410;Lnet/minecraft/class_4891;)Lnet/minecraft/class_4891; method_21388 func_224442_d - m (Lnet/minecraft/class_4410;Lnet/minecraft/class_4587;IILnet/minecraft/class_2561;Lnet/minecraft/class_2960;ZZ)V method_21374 func_237950_a_ - m (Lnet/minecraft/class_4410;Lnet/minecraft/class_4891;)Lnet/minecraft/class_4891; method_21383 func_224449_b - m (Ljava/lang/Runnable;)V method_21377 func_237952_a_ - m (Lnet/minecraft/class_4185;)V method_25212 func_237958_f_ - m (Lnet/minecraft/class_4410$class_4413;)V method_21372 func_224438_a - m (Lnet/minecraft/class_4185;)V method_25210 func_237956_d_ - m (Lnet/minecraft/class_4185;)V method_25208 func_237954_b_ - m (Lnet/minecraft/class_4587;IILnet/minecraft/class_2561;Lnet/minecraft/class_2960;ZZ)V method_21370 func_237948_a_ - m ()V method_21378 func_224454_b - m (Ljava/lang/String;Lnet/minecraft/class_4890;IZ)V method_25207 func_237953_a_ - m (Lnet/minecraft/class_4410;Lnet/minecraft/class_4891;)Lnet/minecraft/class_4891; method_21386 func_224433_c - m ()V method_25214 func_237960_j_ - m (I)I method_21384 func_224434_c - m (Lnet/minecraft/class_4890;)V method_21380 func_224435_b - m (I)V method_21379 func_224445_b - m (Lnet/minecraft/class_4185;)V method_25213 func_237959_g_ - m (Lnet/minecraft/class_2561;)V method_21376 func_224432_a - m (Lnet/minecraft/class_4410;Lnet/minecraft/class_4891;)Lnet/minecraft/class_4891; method_21375 func_224443_a - m (Lnet/minecraft/class_4185;)V method_25211 func_237957_e_ - m ()Lorg/apache/logging/log4j/Logger; method_21368 func_224436_a - m (Lnet/minecraft/class_4185;)V method_25209 func_237955_c_ - m (Lnet/minecraft/class_4410;)Lnet/minecraft/class_310; method_25205 func_237949_a_ - m (Lnet/minecraft/class_4410$class_4413;)V method_21381 func_224437_b - m (Lnet/minecraft/class_4185;)V method_25206 func_237951_a_ - f Lnet/minecraft/class_2960; field_22715 field_237946_y_ - f Lnet/minecraft/class_2960; field_22713 field_237944_w_ - f Ljava/lang/Runnable; field_22712 field_237943_M_ - f Lnet/minecraft/class_2561; field_20006 field_224463_i - f Lnet/minecraft/class_4891; field_20498 field_224471_q - f Lnet/minecraft/class_4891; field_20496 field_224469_o - f Lnet/minecraft/class_2960; field_22709 field_237940_B_ - f Lnet/minecraft/class_4903; field_20003 field_224460_f - f Lnet/minecraft/class_2561; field_20005 field_224462_h - f Ljava/lang/Runnable; field_22711 field_237942_L_ - f Lnet/minecraft/class_4877; field_20001 field_224458_d - f Lnet/minecraft/class_437; field_20000 field_224457_c - f Lnet/minecraft/class_2960; field_22714 field_237945_x_ - f Lnet/minecraft/class_2561; field_20501 field_224475_u - f Lnet/minecraft/class_2960; field_22716 field_237947_z_ - f I field_20008 field_224465_k - f I field_19998 field_224455_a - f Lnet/minecraft/class_2561; field_20007 field_224464_j - f Lnet/minecraft/class_4410$class_4413; field_20499 field_224473_s - f Lnet/minecraft/class_4891; field_20497 field_224470_p - f Lnet/minecraft/class_4891; field_20495 field_224468_n - f Lnet/minecraft/class_2960; field_22708 field_237939_A_ - f Lorg/apache/logging/log4j/Logger; field_19999 field_224456_b - f Lnet/minecraft/class_2960; field_22710 field_237941_C_ - f Lnet/minecraft/class_4890; field_20500 field_224474_t - f Lnet/minecraft/class_4903; field_20004 field_224461_g - f Lnet/minecraft/class_4410$class_4412; field_20015 field_224472_r -c net/minecraft/class_4410$class_4411 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$TexturedButton - f Lnet/minecraft/class_2960; field_20032 field_223824_c - f Lnet/minecraft/class_4410; field_20031 field_223823_b -c net/minecraft/class_4410$class_4412 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$ResetType - m ()[Lnet/minecraft/class_4410$class_4412; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4410$class_4412; valueOf valueOf - f Lnet/minecraft/class_4410$class_4412; field_20036 UPLOAD - f Lnet/minecraft/class_4410$class_4412; field_20035 GENERATE - f Lnet/minecraft/class_4410$class_4412; field_20037 ADVENTURE - f [Lnet/minecraft/class_4410$class_4412; field_20041 $VALUES - f Lnet/minecraft/class_4410$class_4412; field_20038 SURVIVAL_SPAWN - f Lnet/minecraft/class_4410$class_4412; field_20040 INSPIRATION - f Lnet/minecraft/class_4410$class_4412; field_20034 NONE - f Lnet/minecraft/class_4410$class_4412; field_20039 EXPERIENCE -c net/minecraft/class_4410$class_4413 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$ResetWorldInfo - m (Lnet/minecraft/class_4410$class_4413;)Z method_25217 func_237966_c_ - m (Lnet/minecraft/class_4410$class_4413;)Ljava/lang/String; method_25215 func_237964_a_ - m (Lnet/minecraft/class_4410$class_4413;)I method_25216 func_237965_b_ - f I field_20043 field_225158_b - f Ljava/lang/String; field_20042 field_225157_a - f Z field_20044 field_225159_c -c net/minecraft/class_4410$1 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$1 - m (Lnet/minecraft/class_4891;Lnet/minecraft/class_4891;Lnet/minecraft/class_4891;Lnet/minecraft/class_4891;)V method_21392 func_237961_a_ - m ()V run run - f Lnet/minecraft/class_4410; field_20021 field_223832_a -c net/minecraft/class_4410$2 com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$2 - f [I field_20028 field_237962_a_ - f [I field_20029 field_237963_b_ -c net/minecraft/class_4419 com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen - m ()Z method_25247 func_238024_y_ - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25241 func_238018_k_ - m (Lnet/minecraft/class_4419;)Z method_21437 func_238007_c_ - m ()V method_21444 func_224511_j - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25243 func_238020_m_ - m (Lnet/minecraft/class_4419;)I method_21443 func_238012_e_ - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25239 func_238016_i_ - m (Lnet/minecraft/class_4419;Lnet/minecraft/class_4891;Lnet/minecraft/class_4341;)Lcom/mojang/datafixers/util/Either; method_21419 func_237996_a_ - m (Lnet/minecraft/class_4419;Ljava/util/List;)Ljava/util/List; method_21421 func_237998_a_ - m ()Lnet/minecraft/class_2561; method_30874 func_243168_i - m (Lnet/minecraft/class_4419;Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_21420 func_243166_a - m (Lnet/minecraft/class_4185;)V method_25236 func_238011_d_ - m ()Lnet/minecraft/class_4890; method_21434 func_224487_e - m (Lnet/minecraft/class_2561;)V method_21423 func_238001_a_ - m (Lnet/minecraft/class_4891;Lnet/minecraft/class_4341;)Lcom/mojang/datafixers/util/Either; method_21416 func_224509_a - m (Lnet/minecraft/class_4185;)V method_25233 func_238006_b_ - m ()V method_21425 func_224514_b - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_310; method_25242 func_238019_l_ - m (Lnet/minecraft/class_4419;Ljava/lang/String;)Ljava/lang/String; method_21428 func_238005_b_ - m (Lnet/minecraft/class_4587;IILjava/util/List;)V method_21414 func_237992_a_ - m ()Z method_21432 func_224510_d - m (Lnet/minecraft/class_4419;I)I method_21418 func_224508_a - m ()Z method_21436 func_224512_f - m ()Lnet/minecraft/class_2960; method_25232 func_238003_b_ - m (Lnet/minecraft/class_4419;)V method_21426 func_238013_f_ - m ()Lnet/minecraft/class_2960; method_25237 func_238014_g_ - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_4419$class_4420; method_21435 func_238004_b_ - m ()V method_21442 func_224496_i - m ()Lorg/apache/logging/log4j/Logger; method_21413 func_237990_a_ - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25238 func_238015_h_ - m (Lnet/minecraft/class_4419;)Ljava/lang/String; method_21439 func_238010_d_ - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25240 func_238017_j_ - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_310; method_25229 func_237994_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_21424 func_237993_a_ - m (Lnet/minecraft/class_4450$class_4452;)I method_25230 func_237999_a_ - m ()Lnet/minecraft/class_2561; method_30873 func_243167_h - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_310; method_25246 func_238023_p_ - m (Lnet/minecraft/class_4185;)V method_25234 func_238008_c_ - m (Lnet/minecraft/class_4891;)V method_21415 func_224497_a - m (Lnet/minecraft/class_4185;)V method_25231 func_238000_a_ - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_310; method_25245 func_238022_o_ - m ([Lnet/minecraft/class_2561;)V method_21429 func_238002_a_ - m ()Z method_21430 func_224495_c - m (I)I method_25228 func_237991_a_ - m ()V method_21438 func_224484_g - m (Lnet/minecraft/class_4419;)Lnet/minecraft/class_327; method_25244 func_238021_n_ - m ()Lnet/minecraft/class_2960; method_25235 func_238009_d_ - m (Lnet/minecraft/class_4419;)V method_21441 func_224501_h - m ()V method_21440 func_224500_h - m (Lnet/minecraft/class_4419;I)I method_21427 func_237995_a_ - f Lorg/apache/logging/log4j/Logger; field_20069 field_224515_a - f I field_20080 field_224526_l - f Lnet/minecraft/class_4415; field_20070 field_224516_b - f Lnet/minecraft/class_2561; field_26513 field_243164_r - f Ljava/lang/String; field_20082 field_224528_n - f Lnet/minecraft/class_2960; field_22719 field_237987_b_ - f Lnet/minecraft/class_4185; field_20075 field_224521_g - f Ljava/lang/String; field_20078 field_224524_j - f Z field_20083 field_224529_o - f Lnet/minecraft/class_2561; field_20073 field_224519_e - f Lnet/minecraft/class_2561; field_20077 field_224523_i - f Lnet/minecraft/class_4419$class_4420; field_20071 field_224517_c - f Ljava/util/List; field_20085 field_224531_q - f Lnet/minecraft/class_2960; field_22721 field_237989_p_ - f Lnet/minecraft/class_4877$class_4321; field_20079 field_224525_k - f Lnet/minecraft/class_2960; field_22720 field_237988_c_ - f Lnet/minecraft/class_2561; field_26512 field_243163_q - f Lnet/minecraft/class_4185; field_20076 field_224522_h - f I field_20072 field_224518_d - f Lnet/minecraft/class_4185; field_20074 field_224520_f - f [Lnet/minecraft/class_2561; field_20081 field_224527_m - f Z field_20084 field_224530_p -c net/minecraft/class_4419$class_4421 com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen$WorldTemplateSelectionEntry - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4890;IIII)V method_21453 func_238029_a_ - m (Lnet/minecraft/class_4587;IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V method_21452 func_238028_a_ - m (Lnet/minecraft/class_4587;IIIILnet/minecraft/class_4890;)V method_21451 func_238027_a_ - m (Lnet/minecraft/class_4419$class_4421;)Lnet/minecraft/class_4890; method_25248 func_238030_a_ - f Lnet/minecraft/class_4890; field_20094 field_223756_a - f Lnet/minecraft/class_4419; field_20095 field_223757_b -c net/minecraft/class_4419$class_4420 com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen$WorldTemplateSelectionList - m ()Ljava/util/List; method_21450 func_223879_b - m (Lnet/minecraft/class_4419$class_4421;)V method_25249 setSelected - m ()Z method_21446 func_223878_a - m (Lnet/minecraft/class_4890;)V method_21448 func_223876_a - m (I)Lnet/minecraft/class_4890; method_21447 func_223877_a - m (Lnet/minecraft/class_4419$class_4421;)Lnet/minecraft/class_4890; method_25250 func_223875_a - f Lnet/minecraft/class_4419; field_20093 field_223880_a -c net/minecraft/class_4419$1 com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen$1 - m ()V run run - m (Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_4891; method_21445 func_238026_a_ - f Lnet/minecraft/class_4891; field_20091 field_238025_a_ - f Lnet/minecraft/class_4419; field_20092 field_223837_a -c net/minecraft/class_4416 com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen - m (Lnet/minecraft/class_4416;I)I method_21398 func_237972_a_ - m ()Lnet/minecraft/class_2561; method_21410 func_243156_f - m ()Lnet/minecraft/class_2561; method_25225 func_243158_g - m ()V method_21396 func_224541_a - m (Lnet/minecraft/class_4416;)Lnet/minecraft/class_4185; method_21407 func_237975_b_ - m ()V method_21401 func_224544_b - m (Lnet/minecraft/class_34;)Lnet/minecraft/class_2561; method_25222 func_243152_b - m (Lnet/minecraft/class_4416;)Ljava/util/List; method_21405 func_237971_a_ - m (I)I method_25218 func_237968_a_ - m (Lnet/minecraft/class_4185;)V method_25223 func_237976_b_ - m (Lnet/minecraft/class_4185;)V method_25221 func_237973_a_ - m (Lnet/minecraft/class_34;Lnet/minecraft/class_34;)I method_25220 func_237970_a_ - m (Lnet/minecraft/class_34;)Lnet/minecraft/class_2561; method_21400 func_237977_c_ - m ()Lnet/minecraft/class_2561; method_30870 func_243151_a - m (Lnet/minecraft/class_4416;)I method_21406 func_237978_c_ - m (Lnet/minecraft/class_34;)Ljava/lang/String; method_21404 func_237979_d_ - m (Lnet/minecraft/class_4416;)Lnet/minecraft/class_4416$class_4418; method_21408 func_243155_d - m (Lnet/minecraft/class_4416;)Lnet/minecraft/class_327; method_25226 func_237984_i_ - m (Lnet/minecraft/class_4416;)Lnet/minecraft/class_327; method_30872 func_243159_g - m (Lnet/minecraft/class_4416;)Lnet/minecraft/class_327; method_30871 func_243157_f - m ()Lnet/minecraft/class_2561; method_21409 func_243153_c - m (Lnet/minecraft/class_34;)Ljava/lang/String; method_25219 func_237969_a_ - f Lnet/minecraft/class_4410; field_20050 field_224548_b - f Ljava/lang/Runnable; field_22717 field_237967_A_ - f Lnet/minecraft/class_4903; field_20061 field_224559_m - f Lnet/minecraft/class_2561; field_26507 field_243149_p - f Ljava/util/List; field_20055 field_224553_g - f Lnet/minecraft/class_4416$class_4418; field_20057 field_224555_i - f Ljava/text/DateFormat; field_20054 field_224552_f - f Lnet/minecraft/class_2561; field_26508 field_243150_q - f J field_20051 field_224549_c - f I field_20052 field_224550_d - f Lnet/minecraft/class_2561; field_20058 field_243147_b - f Lnet/minecraft/class_2561; field_20059 field_243148_c - f I field_20056 field_224554_h - f Lnet/minecraft/class_4903; field_20063 field_224561_o - f Lnet/minecraft/class_4903; field_20062 field_224560_n - f Lorg/apache/logging/log4j/Logger; field_20049 field_224547_a - f Lnet/minecraft/class_4185; field_20053 field_224551_e -c net/minecraft/class_4416$class_4418 com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen$WorldSelectionList - m (Lnet/minecraft/class_4416$class_4417;)V method_25227 setSelected - m (Lnet/minecraft/class_34;)V method_21412 func_237986_a_ - f Lnet/minecraft/class_4416; field_20068 field_223882_a -c net/minecraft/class_4416$class_4417 com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen$WorldSelectionEntry - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_34;III)V method_21411 func_237985_a_ - f Lnet/minecraft/class_4416; field_20067 field_223760_b - f Ljava/lang/String; field_26510 field_243161_d - f Ljava/lang/String; field_26509 field_243160_c - f Lnet/minecraft/class_34; field_22718 field_223759_a - f Lnet/minecraft/class_2561; field_26511 field_243162_e -c net/minecraft/class_4423 com/mojang/realmsclient/gui/screens/RealmsSlotOptionsScreen - m (Lnet/minecraft/class_4423;)Lnet/minecraft/class_4423$class_4424; method_21496 func_238044_a_ - m (Lnet/minecraft/class_4185;)V method_25261 func_238053_f_ - m ()Lnet/minecraft/class_2561; method_21482 func_224634_i - m (Lnet/minecraft/class_4185;)V method_25265 func_238059_j_ - m (Lnet/minecraft/class_4185;)V method_25259 func_238051_d_ - m (Lnet/minecraft/class_4185;)V method_25256 func_238048_b_ - m (Lnet/minecraft/class_4423;)Ljava/lang/Integer; method_21497 func_238047_b_ - m ()Lnet/minecraft/class_2561; method_21466 func_224610_c - m ()Lnet/minecraft/class_2561; method_21462 func_224625_b - m ()Lnet/minecraft/class_2561; method_21472 func_224606_e - m ()Ljava/lang/String; method_21484 func_224604_j - m ()Lnet/minecraft/class_2561; method_21478 func_224621_g - m (Lnet/minecraft/class_4185;)V method_25262 func_238055_g_ - m (Lnet/minecraft/class_4185;)V method_25264 func_238057_i_ - m (Lnet/minecraft/class_4185;)V method_25260 func_238052_e_ - m (Lnet/minecraft/class_4185;)V method_25257 func_238049_c_ - m (Lnet/minecraft/class_4185;)V method_25255 func_238046_a_ - m ()V method_21486 func_224613_k - m ()Lnet/minecraft/class_2561; method_21475 func_224626_f - m ()Lnet/minecraft/class_2561; method_21469 func_224618_d - m ()Lnet/minecraft/class_2561; method_21480 func_224594_h - m (Z)Lnet/minecraft/class_2561; method_25258 func_238050_c_ - m (Lnet/minecraft/class_4185;)V method_25263 func_238056_h_ - m (Lnet/minecraft/class_4423;Ljava/lang/Integer;)Ljava/lang/Integer; method_21461 func_238045_a_ - f I field_20115 field_224644_g - f Lnet/minecraft/class_4388; field_20109 field_224638_a - f I field_20119 field_224648_k - f Lnet/minecraft/class_4185; field_22722 field_224635_A - f Ljava/lang/Boolean; field_20128 field_224657_t - f [Lnet/minecraft/class_2561; field_22723 field_238035_a_ - f Lnet/minecraft/class_4185; field_20131 field_224660_w - f Lnet/minecraft/class_4185; field_20129 field_224658_u - f I field_20121 field_224650_m - f Ljava/lang/Boolean; field_20122 field_224651_n - f Lnet/minecraft/class_4903; field_20502 field_224637_C - f Ljava/lang/Boolean; field_20124 field_224653_p - f Lnet/minecraft/class_2561; field_25884 field_243171_r - f Lnet/minecraft/class_2561; field_24207 field_238037_p_ - f I field_20116 field_224645_h - f Lnet/minecraft/class_4883; field_20117 field_224646_i - f Lnet/minecraft/class_342; field_20113 field_224642_e - f Lnet/minecraft/class_4185; field_20134 field_224663_z - f Ljava/lang/Boolean; field_20127 field_224656_s - f Ljava/lang/Integer; field_20126 field_224655_r - f Lnet/minecraft/class_4185; field_20132 field_224661_x - f Lnet/minecraft/class_4185; field_20130 field_224659_v - f Ljava/lang/Boolean; field_20123 field_224652_o - f Lnet/minecraft/class_4877$class_4321; field_20118 field_224647_j - f I field_20120 field_224649_l - f [Lnet/minecraft/class_2561; field_22724 field_238036_b_ - f Lnet/minecraft/class_4903; field_20107 field_224636_B - f Ljava/lang/Boolean; field_20125 field_224654_q - f Lnet/minecraft/class_2561; field_24208 field_238038_q_ - f Lnet/minecraft/class_4423$class_4424; field_20133 field_224662_y - f I field_20114 field_224643_f - f Lnet/minecraft/class_2561; field_26516 field_243172_s -c net/minecraft/class_4423$class_4424 com/mojang/realmsclient/gui/screens/RealmsSlotOptionsScreen$SettingsSlider - f D field_22725 field_238066_c_ - f D field_22726 field_238067_d_ - f Lnet/minecraft/class_4423; field_20145 field_223863_a -c net/minecraft/class_4422 com/mojang/realmsclient/gui/screens/RealmsSettingsScreen - m (Z)V method_25254 func_238034_c_ - m ()V method_21454 func_224563_a - m (Lnet/minecraft/class_4185;)V method_25253 func_238033_c_ - m (Lnet/minecraft/class_4185;)V method_25252 func_238032_b_ - m (Lnet/minecraft/class_4185;)V method_25251 func_238031_a_ - f Lnet/minecraft/class_4877; field_20097 field_224566_b - f Lnet/minecraft/class_4185; field_20099 field_224568_d - f Lnet/minecraft/class_342; field_20101 field_224570_f - f Lnet/minecraft/class_4903; field_20102 field_224571_g - f Lnet/minecraft/class_342; field_20100 field_224569_e - f Lnet/minecraft/class_2561; field_26515 field_243170_b - f Lnet/minecraft/class_4388; field_20096 field_224565_a - f Lnet/minecraft/class_2561; field_26514 field_243169_a -c net/minecraft/class_4426 com/mojang/realmsclient/gui/screens/RealmsTermsScreen - m (Lnet/minecraft/class_4185;)V method_25275 func_238078_b_ - m ()V method_21505 func_224721_a - m (Lnet/minecraft/class_4185;)V method_25274 func_238077_a_ - f Lnet/minecraft/class_4877; field_20168 guiScreenServer - f Lnet/minecraft/class_437; field_22727 field_224723_b - f Lnet/minecraft/class_2561; field_26525 field_243186_p - f Lnet/minecraft/class_2561; field_26524 field_243185_c - f Lorg/apache/logging/log4j/Logger; field_20165 field_224722_a - f Ljava/lang/String; field_20171 field_224728_g - f Lnet/minecraft/class_4325; field_20167 field_224724_c - f Lnet/minecraft/class_2561; field_26523 field_243184_b - f Z field_20170 field_224727_f -c net/minecraft/class_4425 com/mojang/realmsclient/gui/screens/RealmsSubscriptionInfoScreen - m (Lnet/minecraft/class_4425;)Lnet/minecraft/class_437; method_25269 func_238072_c_ - m (Lnet/minecraft/class_4425;)Lnet/minecraft/class_310; method_25272 func_238075_d_ - m (I)Lnet/minecraft/class_2561; method_21499 func_224576_a - m (Lnet/minecraft/class_4425;)Lnet/minecraft/class_310; method_25267 func_238070_b_ - m (Z)V method_25271 func_238074_c_ - m (J)V method_21500 func_224573_a - m ()Lorg/apache/logging/log4j/Logger; method_21498 func_238068_a_ - m (J)Ljava/lang/String; method_21502 func_224574_b - m (Lnet/minecraft/class_4185;)V method_25266 func_238069_a_ - m (Lnet/minecraft/class_4425;)Lnet/minecraft/class_4877; method_21501 func_224575_a - m (Lnet/minecraft/class_4185;)V method_25268 func_238071_b_ - m (Lnet/minecraft/class_4185;)V method_25270 func_238073_c_ - f Lnet/minecraft/class_2561; field_26519 field_243179_t - f Lnet/minecraft/class_2561; field_26517 field_243177_r - f Lnet/minecraft/class_2561; field_26518 field_243178_s - f Lnet/minecraft/class_2561; field_26521 field_243181_v - f Lnet/minecraft/class_2561; field_26522 field_243182_w - f Lnet/minecraft/class_2561; field_26520 field_243180_u - f Lnet/minecraft/class_437; field_20149 field_224582_d - f Ljava/lang/String; field_20158 field_224591_m - f Lorg/apache/logging/log4j/Logger; field_20146 field_224579_a - f Lnet/minecraft/class_2561; field_20153 field_243173_b - f Lnet/minecraft/class_2561; field_20154 field_243174_c - f Lnet/minecraft/class_437; field_20147 field_224580_b - f Lnet/minecraft/class_2561; field_20157 field_224590_l - f Lnet/minecraft/class_2561; field_20156 field_243176_q - f Lnet/minecraft/class_4877; field_20148 field_224581_c - f Lnet/minecraft/class_2561; field_20155 field_243175_p - f Lnet/minecraft/class_4887$class_4322; field_20159 field_224592_n -c net/minecraft/class_4425$1 com/mojang/realmsclient/gui/screens/RealmsSubscriptionInfoScreen$1 - m ()V run run - m ()V method_25273 func_238076_a_ - f Lnet/minecraft/class_4425; field_20164 field_223846_a -c net/minecraft/class_4429 com/mojang/realmsclient/gui/screens/UploadResult - f Ljava/lang/String; field_20206 field_225180_b - f I field_20205 field_225179_a -c net/minecraft/class_4429$class_4430 com/mojang/realmsclient/gui/screens/UploadResult$Builder - m (I)Lnet/minecraft/class_4429$class_4430; method_21542 func_225175_a - m (Ljava/lang/String;)Lnet/minecraft/class_4429$class_4430; method_21543 func_225176_a - m ()Lnet/minecraft/class_4429; method_21541 func_225174_a - f I field_20207 field_225177_a - f Ljava/lang/String; field_20208 field_225178_b -c net/minecraft/class_4429$1 com/mojang/realmsclient/gui/screens/UploadResult$1 -c net/minecraft/class_4427 com/mojang/realmsclient/gui/screens/RealmsUploadScreen - m (Lnet/minecraft/class_4185;)V method_25276 func_238084_a_ - m (Lnet/minecraft/class_4185;)V method_25277 func_238087_b_ - m ()V method_21525 func_224679_c - m (Lnet/minecraft/class_4587;J)V method_21526 func_238083_a_ - m ()V method_21528 func_224695_d - m ()V method_21536 func_224682_h - m (JLnet/minecraft/class_4429;)V method_22105 func_238082_a_ - m ()V method_21538 func_224676_i - m ()V method_22106 func_238090_n_ - m ()V method_25278 func_238091_v_ - m (Lnet/minecraft/class_4587;)V method_21532 func_238088_c_ - m (Lnet/minecraft/class_4587;)V method_21530 func_238086_b_ - m (Ljava/io/File;)Z method_21515 func_224692_a - m (Lnet/minecraft/class_4587;)V method_21534 func_238089_d_ - m (Ljava/io/File;)Ljava/io/File; method_21524 func_224675_b - m (Lorg/apache/commons/compress/archivers/tar/TarArchiveOutputStream;Ljava/lang/String;Ljava/lang/String;Z)V method_21516 func_224669_a - m ([Lnet/minecraft/class_2561;)V method_27460 func_238085_a_ - f Ljava/lang/Long; field_20193 field_224715_t - f Lnet/minecraft/class_4351; field_20179 field_224701_f - f Lnet/minecraft/class_2561; field_26526 field_243187_p - f I field_20190 field_238079_E_ - f Ljava/lang/Runnable; field_22728 field_238080_I_ - f Ljava/lang/Long; field_20194 field_224716_u - f Z field_20185 field_224707_l - f Z field_20186 field_224708_m - f Lnet/minecraft/class_4410; field_20175 field_224697_b - f J field_20177 field_224699_d - f Z field_20187 field_224709_n - f I field_20178 field_224700_e - f J field_20195 field_224717_v - f Lnet/minecraft/class_4185; field_20189 field_224711_p - f Lnet/minecraft/class_4185; field_20188 field_224710_o - f Ljava/lang/String; field_20183 field_224705_j - f Lcom/google/common/util/concurrent/RateLimiter; field_20180 field_224702_g - f Lnet/minecraft/class_34; field_20176 field_224698_c - f Lnet/minecraft/class_2561; field_20182 field_224704_i - f [Ljava/lang/String; field_20191 field_224713_r - f [Lnet/minecraft/class_2561; field_20503 field_224703_h - f Z field_20184 field_224706_k - f Ljava/util/concurrent/locks/ReentrantLock; field_20196 field_238081_b_ - f Lorg/apache/logging/log4j/Logger; field_20174 field_224696_a -c net/minecraft/class_4432 com/mojang/realmsclient/util/RealmsPersistence - m ()Ljava/io/File; method_25279 func_238093_b_ - m ()Lnet/minecraft/class_4432$class_4433; method_21549 func_225188_a - m (Lnet/minecraft/class_4432$class_4433;)V method_21550 func_225187_a - f Lnet/minecraft/class_4869; field_22729 field_238092_a_ -c net/minecraft/class_4432$class_4433 com/mojang/realmsclient/util/RealmsPersistence$RealmsPersistenceData - f Ljava/lang/String; field_20209 field_225185_a - f Z field_20210 field_225186_b -c net/minecraft/class_4431 com/mojang/realmsclient/util/JsonUtils - m (Ljava/lang/String;Lcom/google/gson/JsonObject;)Ljava/util/Date; method_21544 func_225173_a - m (Ljava/lang/String;Lcom/google/gson/JsonObject;I)I method_21545 func_225172_a - m (Ljava/lang/String;Lcom/google/gson/JsonObject;Z)Z method_21548 func_225170_a - m (Ljava/lang/String;Lcom/google/gson/JsonObject;J)J method_21546 func_225169_a - m (Ljava/lang/String;Lcom/google/gson/JsonObject;Ljava/lang/String;)Ljava/lang/String; method_21547 func_225171_a -c net/minecraft/class_4448 com/mojang/realmsclient/util/RealmsUtil - m (J)Ljava/lang/String; method_21567 func_225192_a - m (Ljava/lang/String;)Ljava/lang/String; method_21568 func_225193_a - m ()Lcom/mojang/authlib/minecraft/MinecraftSessionService; method_21566 func_225189_a - m (Ljava/util/Date;)Ljava/lang/String; method_25282 func_238105_a_ - m (Ljava/lang/String;)Ljava/util/Map; method_21569 func_225191_b - f Lcom/google/common/cache/LoadingCache; field_20260 field_225194_a - f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_20262 field_225196_c - f Lcom/mojang/authlib/yggdrasil/YggdrasilAuthenticationService; field_20261 field_225195_b -c net/minecraft/class_4448$1 com/mojang/realmsclient/util/RealmsUtil$1 - m (Ljava/lang/Object;)Ljava/lang/Object; load load - m (Ljava/lang/String;)Lcom/mojang/authlib/GameProfile; method_21571 load -c net/minecraft/class_4446 com/mojang/realmsclient/util/RealmsTextureManager - m (Ljava/util/UUID;)V method_21561 func_225204_a - m (Ljava/lang/String;)V method_21558 func_225200_a - m (Ljava/lang/String;Ljava/lang/String;)I method_21564 func_225203_b - m (Ljava/lang/String;Ljava/lang/Runnable;)V method_21559 func_225205_a - m (Ljava/lang/String;Ljava/lang/String;)V method_21560 func_225202_a - m ()Lorg/apache/logging/log4j/Logger; method_21557 func_238098_a_ - m ()Ljava/util/Map; method_21562 func_225207_c - m ()Ljava/util/Map; method_21565 func_238099_c_ - f Ljava/util/Map; field_20255 field_225211_c - f Ljava/util/Map; field_20253 field_225209_a - f Ljava/util/Map; field_20254 field_225210_b - f Lorg/apache/logging/log4j/Logger; field_20256 field_225212_d - f Lnet/minecraft/class_2960; field_22730 field_238097_e_ -c net/minecraft/class_4446$1 com/mojang/realmsclient/util/RealmsTextureManager$1 - m ()V run run - f Ljava/lang/String; field_20257 field_225199_a -c net/minecraft/class_4446$class_4447 com/mojang/realmsclient/util/RealmsTextureManager$RealmsTexture - m (Lnet/minecraft/class_4446$class_4447;)Ljava/lang/String; method_25281 func_238101_b_ - m (Lnet/minecraft/class_4446$class_4447;)I method_25280 func_238100_a_ - f I field_20259 field_225198_b - f Ljava/lang/String; field_20258 field_225197_a -c net/minecraft/class_4450 com/mojang/realmsclient/util/TextRenderingUtils - m (Ljava/lang/String;Ljava/util/List;)Ljava/util/List; method_21577 func_225225_a - m (Ljava/lang/String;[Lnet/minecraft/class_4450$class_4452;)Ljava/util/List; method_21578 func_225224_a - m (Ljava/util/List;Ljava/util/List;)Ljava/util/List; method_21579 func_225222_a - m (Ljava/lang/String;Ljava/lang/String;)Ljava/util/List; method_21576 func_225226_a - m (Ljava/lang/String;)Ljava/util/List; method_21575 func_225223_a -c net/minecraft/class_4450$class_4451 com/mojang/realmsclient/util/TextRenderingUtils$Line - m ()Ljava/lang/String; toString toString - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - f Ljava/util/List; field_20266 field_225213_a -c net/minecraft/class_4450$class_4452 com/mojang/realmsclient/util/TextRenderingUtils$LineSegment - m ()Ljava/lang/String; method_21584 func_225216_c - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m (Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_4450$class_4452; method_21582 func_225214_a - m ()Ljava/lang/String; method_21580 func_225215_a - m ()Z method_21583 func_225217_b - m (Ljava/lang/String;)Lnet/minecraft/class_4450$class_4452; method_21581 func_225218_a - m ()Ljava/lang/String; toString toString - f Ljava/lang/String; field_20268 field_225220_b - f Ljava/lang/String; field_20267 field_225219_a - f Ljava/lang/String; field_20269 field_225221_c -c net/minecraft/class_4449 com/mojang/realmsclient/util/SkinProcessor - m (IIII)V method_21574 func_225229_b - m (IIII)V method_21572 func_225227_a - m (Ljava/awt/image/BufferedImage;)Ljava/awt/image/BufferedImage; method_21573 func_225228_a - f I field_20264 field_225231_b - f I field_20265 field_225232_c - f [I field_20263 field_225230_a -c net/minecraft/class_4435 net/minecraft/realms/action/CloseRealmsAction - m ()V run run - f Lnet/minecraft/class_4877; field_20212 field_238107_c_ - f Lnet/minecraft/class_4388; field_20213 field_238108_d_ -c net/minecraft/class_4453 com/mojang/realmsclient/util/UploadTokenCache - m (J)Ljava/lang/String; method_21585 func_225235_a - m (J)V method_21587 func_225233_b - m (JLjava/lang/String;)V method_21586 func_225234_a - f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_20270 field_225236_a -c net/minecraft/class_4436 net/minecraft/realms/action/PrepareDownloadRealmsAction - m ()V run run - m (Z)V method_25283 func_238115_a_ - f Lnet/minecraft/class_437; field_20216 field_238113_e_ - f J field_20214 field_238111_c_ - f I field_20215 field_238112_d_ - f Ljava/lang/String; field_20217 field_238114_f_ -c net/minecraft/class_4438 net/minecraft/realms/action/ConnectedToRealmsAction - m ()V run run - f Lnet/minecraft/class_4902; field_20222 field_238109_c_ - f Lnet/minecraft/class_4878; field_20223 field_238110_d_ -c net/minecraft/class_4358 com/mojang/realmsclient/gui/LongRunningTask - m (Lnet/minecraft/class_310;Lnet/minecraft/class_437;)V method_25288 func_238126_a_ - m (I)V method_25287 func_238125_a_ - m (Lnet/minecraft/class_2561;)V method_21069 func_224989_b - m ()V method_21070 func_224991_c - m ()Z method_21065 func_224988_a - m ()V method_21071 func_224992_d - m ()V method_21068 func_224990_b - m (Lnet/minecraft/class_437;)V method_25289 func_238127_a_ - m (Lnet/minecraft/class_4398;)V method_21066 func_224987_a - f Lnet/minecraft/class_4398; field_19638 field_224993_a - f Lorg/apache/logging/log4j/Logger; field_22731 field_238124_a_ -c net/minecraft/class_4439 net/minecraft/realms/action/ConnectingToRealmsAction - m (Lnet/minecraft/class_4878;)V method_25284 func_238120_a_ - m (Ljava/lang/Throwable;)Ljava/lang/Void; method_25286 func_238122_a_ - m ()V run run - m (I)V method_21554 func_238123_b_ - m (Lnet/minecraft/class_4878;Z)V method_25285 func_238121_a_ - f Ljava/util/concurrent/locks/ReentrantLock; field_20227 field_238119_f_ - f Lnet/minecraft/class_4325; field_20226 field_238118_e_ - f Lnet/minecraft/class_4877; field_20224 field_238116_c_ - f Lnet/minecraft/class_437; field_20225 field_238117_d_ -c net/minecraft/class_4440 net/minecraft/realms/action/ResetWorldRealmsAction - m ()V run run - f Ljava/lang/Runnable; field_22732 field_238138_i_ - f I field_20230 field_238134_e_ - f J field_20232 field_238136_g_ - f Ljava/lang/String; field_20228 field_238132_c_ - f Z field_20231 field_238135_f_ - f Lnet/minecraft/class_2561; field_20235 field_238137_h_ - f Lnet/minecraft/class_4890; field_20229 field_238133_d_ -c net/minecraft/class_4437 net/minecraft/realms/action/OpeningWorldRealmsAction - m ()V run run - f Lnet/minecraft/class_4877; field_20218 field_238128_c_ - f Lnet/minecraft/class_4325; field_20221 field_238131_f_ - f Z field_20220 field_238130_e_ - f Lnet/minecraft/class_437; field_20219 field_238129_d_ -c net/minecraft/class_4441 net/minecraft/realms/action/RestoringBackupRealmsAction - m ()V run run - f J field_20237 field_238140_d_ - f Lnet/minecraft/class_4388; field_20238 field_238141_e_ - f Lnet/minecraft/class_4867; field_20236 field_238139_c_ -c net/minecraft/class_4443 net/minecraft/realms/action/SwitchMinigameRealmsAction - m ()V run run - f J field_20242 field_238145_c_ - f I field_20243 field_238146_d_ - f Ljava/lang/Runnable; field_22733 field_238147_e_ -c net/minecraft/class_4442 net/minecraft/realms/action/StartMinigameRealmsAction - m ()V run run - f Lnet/minecraft/class_4388; field_20241 field_238144_e_ - f J field_20239 field_238142_c_ - f Lnet/minecraft/class_4890; field_20240 field_238143_d_ -c net/minecraft/class_4060 net/minecraft/client/settings/AmbientOcclusionStatus - m ()Ljava/lang/String; method_18485 getResourceKey - m ()[Lnet/minecraft/class_4060; values values - m ()I method_18483 getId - m (Ljava/lang/String;)Lnet/minecraft/class_4060; valueOf valueOf - m (I)[Lnet/minecraft/class_4060; method_18486 func_216571_b - m (I)Lnet/minecraft/class_4060; method_18484 getValue - f Ljava/lang/String; field_18149 resourceKey - f [Lnet/minecraft/class_4060; field_18147 VALUES - f Lnet/minecraft/class_4060; field_18145 MIN - f Lnet/minecraft/class_4060; field_18146 MAX - f I field_18148 id - f Lnet/minecraft/class_4060; field_18144 OFF - f [Lnet/minecraft/class_4060; field_18150 $VALUES -c net/minecraft/class_4445 net/minecraft/realms/action/CreateWorldRealmsAction - m ()V run run - f Ljava/lang/String; field_20250 field_238149_d_ - f J field_20251 field_238150_e_ - f Ljava/lang/String; field_20249 field_238148_c_ - f Lnet/minecraft/class_437; field_20252 field_238151_f_ -c net/minecraft/class_4062 net/minecraft/client/settings/BooleanOption - m (Lnet/minecraft/class_315;)Lnet/minecraft/class_2561; method_18495 func_238152_c_ - m (Lnet/minecraft/class_315;)Z method_18494 get - m (Lnet/minecraft/class_315;Ljava/lang/String;)V method_18492 set - m (Lnet/minecraft/class_315;Z)V method_18493 set - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4185;)V method_19786 func_216745_a - m (Lnet/minecraft/class_315;)V method_18491 nextValue - f Ljava/util/function/BiConsumer; field_18159 setter - f Ljava/util/function/Predicate; field_18158 getter -c net/minecraft/class_4061 net/minecraft/client/settings/AttackIndicatorStatus - m ()I method_18487 getId - m (Ljava/lang/String;)Lnet/minecraft/class_4061; valueOf valueOf - m (I)[Lnet/minecraft/class_4061; method_18490 func_216750_b - m (I)Lnet/minecraft/class_4061; method_18488 byId - m ()Ljava/lang/String; method_18489 getResourceKey - m ()[Lnet/minecraft/class_4061; values values - f I field_18155 id - f Lnet/minecraft/class_4061; field_18151 OFF - f [Lnet/minecraft/class_4061; field_18157 $VALUES - f Ljava/lang/String; field_18156 resourceKey - f [Lnet/minecraft/class_4061; field_18154 BY_ID - f Lnet/minecraft/class_4061; field_18152 CROSSHAIR - f Lnet/minecraft/class_4061; field_18153 HOTBAR -c net/minecraft/class_5498 net/minecraft/client/settings/PointOfView - m ()Z method_31035 func_243193_b - m ()[Lnet/minecraft/class_5498; values values - m (Ljava/lang/String;)Lnet/minecraft/class_5498; valueOf valueOf - m ()Z method_31034 func_243192_a - m ()Lnet/minecraft/class_5498; method_31036 func_243194_c - f Z field_26669 field_243191_f - f [Lnet/minecraft/class_5498; field_26667 field_243189_d - f Lnet/minecraft/class_5498; field_26665 THIRD_PERSON_BACK - f Lnet/minecraft/class_5498; field_26666 THIRD_PERSON_FRONT - f Z field_26668 field_243190_e - f Lnet/minecraft/class_5498; field_26664 FIRST_PERSON - f [Lnet/minecraft/class_5498; field_26670 $VALUES -c net/minecraft/class_4184 net/minecraft/client/renderer/ActiveRenderInfo - m ()Lnet/minecraft/class_1160; method_19336 getUpVector - m (D)D method_19318 calcCameraDistance - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_1297;ZZF)V method_19321 update - m ()Z method_19332 isValid - m ()Lnet/minecraft/class_1158; method_23767 getRotation - m ()Lnet/minecraft/class_1297; method_19331 getRenderViewEntity - m ()Z method_19333 isThirdPerson - m ()Lnet/minecraft/class_2338; method_19328 getBlockPos - m ()V method_19337 clear - m (Lnet/minecraft/class_243;)V method_19322 setPosition - m ()F method_19329 getPitch - m ()F method_19330 getYaw - m ()V method_19317 interpolateHeight - m (FF)V method_19325 setDirection - m ()Lnet/minecraft/class_1160; method_19335 getViewVector - m ()Lnet/minecraft/class_243; method_19326 getProjectedView - m (DDD)V method_19327 setPosition - m (DDD)V method_19324 movePosition - m ()Lnet/minecraft/class_3610; method_19334 getFluidState - f F field_18722 previousHeight - f Z field_18719 thirdPerson - f Z field_18720 thirdPersonReverse - f Lnet/minecraft/class_1922; field_18710 world - f Lnet/minecraft/class_2338$class_2339; field_18713 blockPos - f Lnet/minecraft/class_1158; field_21518 rotation - f Lnet/minecraft/class_1160; field_18714 look - f Lnet/minecraft/class_1160; field_18716 left - f Lnet/minecraft/class_1160; field_18715 up - f Z field_18709 valid - f F field_18717 pitch - f F field_18718 yaw - f Lnet/minecraft/class_1297; field_18711 renderViewEntity - f Lnet/minecraft/class_243; field_18712 pos - f F field_18721 height -c net/minecraft/class_4063 net/minecraft/client/settings/CloudOption - m ()[Lnet/minecraft/class_4063; values values - m ()I method_18496 getId - m ()Ljava/lang/String; method_18498 getKey - m (I)[Lnet/minecraft/class_4063; method_18499 func_216805_b - m (Ljava/lang/String;)Lnet/minecraft/class_4063; valueOf valueOf - m (I)Lnet/minecraft/class_4063; method_18497 byId - f [Lnet/minecraft/class_4063; field_18165 BY_ID - f Lnet/minecraft/class_4063; field_18163 FAST - f Lnet/minecraft/class_4063; field_18164 FANCY - f I field_18166 id - f Ljava/lang/String; field_18167 key - f Lnet/minecraft/class_4063; field_18162 OFF - f [Lnet/minecraft/class_4063; field_18168 $VALUES -c net/minecraft/class_299 net/minecraft/client/util/ClientRecipeBook - m (Ljava/util/Map;Lnet/minecraft/class_314;)Ljava/util/stream/Stream; method_30280 func_243198_a - m (Ljava/util/Map;Lcom/google/common/collect/ImmutableList$Builder;Lnet/minecraft/class_314;Ljava/util/List;)V method_30279 func_243197_a - m (Lnet/minecraft/class_1860;)Ljava/lang/Object; method_29969 func_243203_h - m ()Ljava/util/List; method_1393 getRecipes - m (Ljava/lang/Iterable;)V method_1401 func_243196_a - m (Ljava/lang/Iterable;)Ljava/util/Map; method_30283 func_243201_b - m (Lnet/minecraft/class_1860;)Lnet/minecraft/class_314; method_1400 getCategory - m (Lnet/minecraft/class_314;)Ljava/util/List; method_1396 getRecipes - m (Lnet/minecraft/class_314;)Ljava/util/List; method_30284 func_243202_c - m (Ljava/util/Map;Lnet/minecraft/class_314;Ljava/util/List;)V method_30281 func_243199_a - m (Lnet/minecraft/class_314;)Ljava/util/List; method_30282 func_202890_b - f Lorg/apache/logging/log4j/Logger; field_25622 field_241555_k_ - f Ljava/util/List; field_25778 allRecipes - f Ljava/util/Map; field_1638 recipesByCategory -c net/minecraft/class_4064 net/minecraft/client/settings/IteratableOption - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4185;)V method_19787 func_216721_a - m (Lnet/minecraft/class_315;I)V method_18500 setValueIndex - m (Lnet/minecraft/class_315;)Lnet/minecraft/class_2561; method_18501 getName - f Ljava/util/function/BiFunction; field_18170 getter - f Ljava/util/function/BiConsumer; field_18169 setter -c net/minecraft/class_5222 net/minecraft/util/text/TextPropertiesManager - m (Lnet/minecraft/class_5348;)V method_27462 func_238155_a_ - m ()Lnet/minecraft/class_5348; method_27463 func_238156_b_ - m ()Lnet/minecraft/class_5348; method_27461 func_238154_a_ - f Ljava/util/List; field_25260 field_238153_a_ -c net/minecraft/class_4454 net/minecraft/client/FullscreenResolutionOption - m (Lnet/minecraft/class_313;Lnet/minecraft/class_319;)Ljava/lang/Double; method_21588 func_225304_a - m (Lnet/minecraft/class_313;Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_27464 func_225305_a_ - m (Lnet/minecraft/class_313;Lnet/minecraft/class_1041;Lnet/minecraft/class_315;Ljava/lang/Double;)V method_21590 func_225303_a - m (Lnet/minecraft/class_313;Lnet/minecraft/class_1041;Lnet/minecraft/class_315;)Ljava/lang/Double; method_21589 func_225306_a -c net/minecraft/class_300 net/minecraft/client/util/NBTQueryManager - m (Lnet/minecraft/class_2338;Ljava/util/function/Consumer;)V method_1403 queryTileEntity - m (ILjava/util/function/Consumer;)V method_1405 queryEntity - m (ILnet/minecraft/class_2487;)Z method_1404 handleResponse - m (Ljava/util/function/Consumer;)I method_1402 setHandler - f I field_1641 transactionId - f Lnet/minecraft/class_634; field_1640 connection - f Ljava/util/function/Consumer; field_1642 handler -c net/minecraft/class_5365 net/minecraft/client/settings/GraphicsFanciness - m (Ljava/lang/String;)Lnet/minecraft/class_5365; valueOf valueOf - m ()Lnet/minecraft/class_5365; method_29595 func_238166_c_ - m (I)[Lnet/minecraft/class_5365; method_29594 func_238165_b_ - m ()Ljava/lang/String; toString toString - m ()[Lnet/minecraft/class_5365; values values - m ()I method_29591 func_238162_a_ - m ()Ljava/lang/String; method_29593 func_238164_b_ - m (I)Lnet/minecraft/class_5365; method_29592 func_238163_a_ - f [Lnet/minecraft/class_5365; field_25430 field_238159_d_ - f Lnet/minecraft/class_5365; field_25429 FABULOUS - f Lnet/minecraft/class_5365; field_25428 FANCY - f Ljava/lang/String; field_25432 field_238161_f_ - f I field_25431 field_238160_e_ - f [Lnet/minecraft/class_5365; field_25433 $VALUES - f Lnet/minecraft/class_5365; field_25427 FAST -c net/minecraft/class_5365$1 net/minecraft/client/settings/GraphicsFanciness$1 - f [I field_25434 field_238168_a_ -c net/minecraft/class_3799 net/minecraft/client/MinecraftGame - m ()Lcom/mojang/bridge/game/GameVersion; getVersion getVersion - m ()Lcom/mojang/bridge/game/GameSession; getCurrentSession getCurrentSession - m (Lcom/mojang/bridge/launcher/SessionEventListener;)V setSessionEventListener setSessionEventListener - m ()V method_16688 leaveGameSession - m ()Lcom/mojang/bridge/game/PerformanceMetrics; getPerformanceMetrics getPerformanceMetrics - m ()Lcom/mojang/bridge/game/Language; getSelectedLanguage getSelectedLanguage - m ()V method_16687 startGameSession - f Lcom/mojang/bridge/launcher/Launcher; field_16755 launcher - f Lcom/mojang/bridge/launcher/SessionEventListener; field_16756 sessionListener - f Lnet/minecraft/class_310; field_16757 gameInstance -c net/minecraft/class_3799$class_3800 net/minecraft/client/MinecraftGame$MinecraftPerformanceMetrics - m ()I getMinTime getMinTime - m ()I getAverageTime getAverageTime - m ()I getSampleCount getSampleCount - m ()I getMaxTime getMaxTime - f I field_16760 maxTime - f I field_16759 averageTime - f I field_16758 sampleCount - f I field_16761 minTime -c net/minecraft/class_302 net/minecraft/client/settings/CreativeSettings - m ()V method_1409 save - m (I)Lnet/minecraft/class_748; method_1410 getHotbarSnapshot - m ()V method_1411 load - f Lorg/apache/logging/log4j/Logger; field_1647 LOGGER - f Lcom/mojang/datafixers/DataFixer; field_1648 dataFixer - f Ljava/io/File; field_1646 dataFile - f [Lnet/minecraft/class_748; field_1644 hotbarSnapshots - f Z field_1645 loaded -c net/minecraft/class_303 net/minecraft/client/gui/ChatLine - m ()I method_1413 getChatLineID - m ()I method_1414 getUpdatedCounter - m ()Ljava/lang/Object; method_1412 getLineString - f Ljava/lang/Object; field_1651 lineString - f I field_1650 updateCounterCreated - f I field_1649 chatLineID -c net/minecraft/class_309 net/minecraft/client/KeyboardListener - m (Ljava/lang/String;[Ljava/lang/Object;)V method_1456 printDebugWarning - m (I[ZLnet/minecraft/class_4069;III)V method_1454 func_216820_a - m (Z)V method_1462 enableRepeatEvents - m (IJ)V method_1461 func_227998_a_ - m (JII)V method_1457 onCharEvent - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2487;)V method_1467 func_211561_b - m (Lnet/minecraft/class_364;II)V method_1458 func_212444_a - m (Ljava/lang/String;[Ljava/lang/Object;)V method_1459 printDebugMessage - m (JIIII)V method_22678 func_228003_c_ - m (J)V method_1472 setupCallbacks - m ()Ljava/lang/String; method_1460 getClipboardString - m (JIIII)V method_22676 func_228001_b_ - m (JIIII)V method_1466 onKeyEvent - m (I)Z method_1468 processKeyF3 - m (JII)V method_22677 func_228002_c_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1297;Lnet/minecraft/class_2487;)V method_1471 func_227999_a_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_243;Lnet/minecraft/class_2487;)V method_1469 setEntityClipboardString - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2487;)V method_1475 setBlockClipboardString - m (Ljava/lang/String;)V method_1455 setClipboardString - m ()V method_1474 tick - m (JII)V method_22675 func_228000_b_ - m (ZZ)V method_1465 copyHoveredObject - m (Lnet/minecraft/class_2561;)V method_1464 func_212448_b - m (Lnet/minecraft/class_364;CI)V method_1473 func_212445_a - m (Lnet/minecraft/class_2561;)V method_1463 func_212449_a - f Lnet/minecraft/class_310; field_1678 mc - f J field_1680 debugCrashWarningsSent - f J field_1682 debugCrashKeyPressTime - f J field_1681 lastDebugCrashWarning - f Z field_1683 repeatEventsEnabled - f Lnet/minecraft/class_3674; field_16241 clipboardHelper - f Z field_1679 actionKeyF3 -c net/minecraft/class_309$1 net/minecraft/client/KeyboardListener$1 - f [I field_1685 field_211160_a -c net/minecraft/class_304 net/minecraft/client/settings/KeyBinding - m (Ljava/lang/String;)Ljava/util/function/Supplier; method_1419 getDisplayString - m (Z)V method_23481 setPressed - m ()Z method_1427 isDefault - m (II)Z method_1417 matchesKey - m ()V method_1425 unpressKey - m (I)Z method_1433 matchesMouseKey - m (Lnet/minecraft/class_304;)I method_1430 compareTo - m ()V method_1424 updateKeyBindState - m ()Ljava/lang/String; method_1423 getKeyCategory - m ()Lnet/minecraft/class_3675$class_306; method_1429 getDefault - m ()V method_1426 resetKeyBindingArrayAndHash - m (Ljava/lang/Object;)I compareTo compareTo - m ()Ljava/lang/String; method_1431 getKeyDescription - m ()V method_1437 unPressAllKeys - m ()Lnet/minecraft/class_2561; method_16007 func_238171_j_ - m (Lnet/minecraft/class_304;)Z method_1435 conflicts - m (Ljava/util/HashMap;)V method_1418 func_205215_a - m ()Z method_1434 isKeyDown - m (Lnet/minecraft/class_3675$class_306;Z)V method_1416 setKeyBindState - m ()Ljava/lang/String; method_1428 getTranslationKey - m (Lnet/minecraft/class_3675$class_306;)V method_1422 bind - m ()Z method_1436 isPressed - m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_27465 func_238170_b_ - m ()Z method_1415 isInvalid - m (Lnet/minecraft/class_3675$class_306;)V method_1420 onTick - f Lnet/minecraft/class_3675$class_306; field_1654 keyCodeDefault - f Ljava/lang/String; field_1660 keyDescription - f Lnet/minecraft/class_3675$class_306; field_1655 keyCode - f Ljava/lang/String; field_1659 keyCategory - f I field_1661 pressTime - f Ljava/util/Map; field_1658 HASH - f Ljava/util/Set; field_1652 KEYBIND_SET - f Z field_1653 pressed - f Ljava/util/Map; field_1657 KEYBIND_ARRAY - f Ljava/util/Map; field_1656 CATEGORY_ORDER -c net/minecraft/class_310 net/minecraft/client/Minecraft - m ()Lnet/minecraft/class_1144; method_1483 getSoundHandler - m ()Z method_1589 isConnectedToRealms - m ()Lnet/minecraft/class_3300; method_1478 getResourceManager - m ()Z method_29611 isFabulousGraphicsEnabled - m (Ljava/lang/String;)Z method_1500 func_213238_a - m ()Lnet/minecraft/class_1076; method_1526 getLanguageManager - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_3696;)V method_1492 drawProfilerResult - m ()Z method_22107 isRenderOnThread - m (Lnet/minecraft/class_1799;)Ljava/util/stream/Stream; method_1502 func_213251_b - m ()V method_18099 unloadWorld - m ()Z method_24459 isDebugMode - m (Z)V method_1523 runGameLoop - m (Ljava/lang/String;Lnet/minecraft/class_1940;Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5285;)V method_29607 createWorld - m ()Ljava/lang/String; method_1563 getCurrentAction - m (Ljava/lang/String;Lnet/minecraft/class_5455$class_5457;Ljava/util/function/Function;Lcom/mojang/datafixers/util/Function4;Z)V method_29609 func_243207_a - m ()Lnet/minecraft/class_1276; method_1552 getSnooper - m (Lnet/minecraft/class_128;)V method_1565 displayCrashReport - m (Lnet/minecraft/class_1940;Lnet/minecraft/class_32$class_5143;)Lnet/minecraft/class_5359; method_29597 func_238179_a_ - m ()Lnet/minecraft/class_898; method_1561 getRenderManager - m (Ljava/util/concurrent/CompletableFuture;Ljava/util/Optional;)V method_24228 func_238200_a_ - m ()Lnet/minecraft/class_1142; method_1538 getMusicTicker - m ()V method_24288 setDefaultMinecraftTitle - m ()Lnet/minecraft/class_3695; method_16011 getProfiler - m ()Lnet/minecraft/class_4599; method_22940 getRenderTypeBuffers - m ()Ljava/lang/String; method_1547 getVersionType - m ()Z method_24289 isModdedClient - m (Lnet/minecraft/class_1076;)Ljava/lang/String; method_22680 func_243205_a - m (Ljava/lang/String;)Ljava/lang/String; method_22682 func_243211_c - m (ZLnet/minecraft/class_4758;)V method_24460 func_238210_b_ - m ()Ljava/util/concurrent/CompletableFuture; method_1513 scheduleResourcesRefresh - m ()Z method_1491 func_229995_aK_ - m ()Lnet/minecraft/class_759; method_1489 getFirstPersonRenderer - m (Ljava/util/concurrent/CompletableFuture;)V method_18508 func_229997_b_ - m (Lnet/minecraft/class_1799;)Ljava/util/stream/Stream; method_1525 func_213235_a - m (IJ)V method_1506 disableVSyncAfterGlError - m ()Lnet/minecraft/class_3283; method_1520 getResourcePackList - m ()V method_1490 shutdownMinecraftApplet - m (Lnet/minecraft/class_5455$class_5457;Ljava/util/function/Function;Lcom/mojang/datafixers/util/Function4;ZLnet/minecraft/class_32$class_5143;)Lnet/minecraft/class_310$class_5367; method_29604 reloadDatapacks - m ()Lcom/mojang/authlib/properties/PropertyMap; method_1539 getProfileProperties - m ()Z method_1569 isGameFocused - m ()I method_16009 getFramerateLimit - m (Lnet/minecraft/class_2561;)V method_1510 func_229998_b_ - m ()Lnet/minecraft/class_1297; method_1560 getRenderViewEntity - m ()Z method_1542 isIntegratedServerRunning - m (Lnet/minecraft/class_5382;Lcom/google/gson/JsonElement;)Lcom/mojang/serialization/DataResult; method_31126 func_243209_a - m (Lnet/minecraft/class_315;)Ljava/lang/String; method_22679 func_243204_a - m (Z)V method_1590 sendClickBlockToController - m (I)Lnet/minecraft/class_3949; method_17533 func_238211_c_ - m ()Lnet/minecraft/class_1092; method_1554 getModelManager - m (Lnet/minecraft/class_128;)V method_1494 crashed - m ()Z method_29043 isMultiplayerEnabled - m ()Ljava/util/concurrent/CompletableFuture; method_1521 reloadResources - m (Ljava/lang/Runnable;Ljava/lang/String;Z)V method_29605 func_241560_a_ - m (Lnet/minecraft/class_32$class_5143;)Lnet/minecraft/class_5359; method_29598 loadDataPackCodec - m ()Z method_1517 isFancyGraphicsEnabled - m ()Lnet/minecraft/class_1156; method_1577 getTutorial - m (Lnet/minecraft/class_516;)Ljava/util/stream/Stream; method_1529 func_213258_a - m (ZLnet/minecraft/class_4758;)V method_24458 tick - m ()Z method_1573 getForceUnicodeFont - m ()Z method_1540 isJava64bit - m (Ljava/util/Optional;)V method_24040 func_238197_a_ - m ()Lnet/minecraft/class_3799; method_16689 getMinecraftGame - m ()Lnet/minecraft/class_320; method_1548 getSession - m ()Lnet/minecraft/class_310; method_1551 getInstance - m (Z)V method_20539 displayInGameMenu - m ()Z method_1476 isJvm64bit - m (Ljava/lang/Throwable;)V method_24226 restoreResourcePacks - m ()Lnet/minecraft/class_4044; method_18321 getPaintingSpriteUploader - m ()Lnet/minecraft/class_1066; method_1516 getPackFinder - m ()Lnet/minecraft/class_4074; method_18505 getPotionSpriteUploader - m ()Ljava/lang/String; method_1515 getVersion - m ()Ljava/net/Proxy; method_1487 getProxy - m ()Lnet/minecraft/class_324; method_1505 getBlockColors - m (Lnet/minecraft/class_310$class_5366;Ljava/lang/String;ZLjava/lang/Runnable;)V method_29601 deleteWorld - m (Lnet/minecraft/class_516;)Ljava/util/stream/Stream; method_1518 func_213252_b - m (Lnet/minecraft/class_4071;)V method_18502 setLoadingGui - m ()Lnet/minecraft/class_4008; method_18095 getSplashes - m ()Ljava/lang/String; method_24287 getWindowTitle - m ()Lnet/minecraft/class_1041; method_22683 getMainWindow - m ()Lcom/mojang/authlib/minecraft/MinecraftSessionService; method_1495 getSessionService - m ()Z method_1493 isGamePaused - m (Lnet/minecraft/class_1297;)Z method_27022 isEntityGlowing - m (Lnet/minecraft/class_32$class_5143;Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_3300;Lnet/minecraft/class_5359;)Lnet/minecraft/class_5219; method_29599 loadWorld - m (Lnet/minecraft/class_1799;)Ljava/util/stream/Stream; method_1485 func_213242_c - m ()V method_1574 runTick - m (Z)V method_1537 setConnectedToRealms - m ()V method_17044 checkMissingData - m (Ljava/lang/String;)Z method_1579 func_213267_b - m (Lnet/minecraft/class_638;)V method_1481 loadWorld - m ()Lnet/minecraft/class_276; method_1522 getFramebuffer - m ()Lnet/minecraft/class_32; method_1586 getSaveLoader - m (Ljava/util/UUID;)Z method_29042 cannotSendChatMessages - m (Lnet/minecraft/class_1297;)V method_1504 setRenderViewEntity - m ()Lcom/mojang/datafixers/DataFixer; method_1543 getDataFixer - m (Lnet/minecraft/class_1860;)Lnet/minecraft/class_2960; method_1556 func_213244_a - m ()I method_16010 func_213247_aS - m (Ljava/util/function/Supplier;)Ljava/util/function/Supplier; method_24043 wrapV4 - m ()Z method_1588 isAmbientOcclusionEnabled - m ()Lnet/minecraft/class_374; method_1566 getToastGui - m ()Lnet/minecraft/class_302; method_1571 getCreativeSettings - m ()Lnet/minecraft/class_5195; method_1544 getBackgroundMusicSelector - m ()V method_1592 shutdown - m (Lnet/minecraft/class_642;)V method_1584 setServerData - m ()Lnet/minecraft/class_5407; method_30049 getGPUWarning - m ()V method_1508 processKeyBinds - m (Lnet/minecraft/class_2561;)Ljava/lang/String; method_1557 func_213264_c - m (Ljava/util/function/Supplier;)Lnet/minecraft/class_3262; method_1528 func_243213_e - m (Lnet/minecraft/class_437;)V method_18096 unloadWorld - m (Lnet/minecraft/class_638;)V method_18097 updateWorldRenderer - m ()Lnet/minecraft/class_1071; method_1582 getSkinManager - m (Lnet/minecraft/class_2960;)Ljava/util/function/Function; method_1549 getAtlasSpriteGetter - m ()Lnet/minecraft/class_642; method_1558 getCurrentServerData - m ()Z method_1555 isReducedDebug - m (Lnet/minecraft/class_2561;)V method_24229 func_243214_e - m (Z)V method_27466 forceUnicodeFont - m (Lnet/minecraft/class_1126;Lnet/minecraft/class_1121;Lnet/minecraft/class_1799;)V method_1535 func_213232_a - m ()Z method_22108 isRunning - m (Ljava/lang/String;Lnet/minecraft/class_5455$class_5457;Ljava/util/function/Function;Lcom/mojang/datafixers/util/Function4;Lnet/minecraft/class_310$class_5366;)V method_29608 func_243206_a - m ()V method_1546 populateSearchTreeManager - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2586;)Lnet/minecraft/class_1799; method_1499 storeTEInStack - m (Lnet/minecraft/class_437;)V method_1507 displayGuiScreen - m (Ljava/lang/String;Lnet/minecraft/class_5455$class_5457;Ljava/util/function/Function;Lcom/mojang/datafixers/util/Function4;ZLnet/minecraft/class_310$class_5366;)V method_29610 loadWorld - m ()Lnet/minecraft/class_776; method_1541 getBlockRendererDispatcher - m ()Lnet/minecraft/class_1060; method_1531 getTextureManager - m (Ljava/util/function/Supplier;)Lnet/minecraft/class_3262; method_24044 func_243212_d - m ()Z method_1498 isGuiEnabled - m ()V method_1511 middleClickMouse - m ()V method_1514 run - m ()Lnet/minecraft/class_3517; method_1570 getFrameTimer - m (Lnet/minecraft/class_1124$class_1125;)Lnet/minecraft/class_1123; method_1484 getSearchTree - m (Ljava/lang/String;)V method_29041 openChatScreen - m ()Ljava/io/File; method_1479 getFileResourcePacks - m ()V method_1572 func_229996_aL_ - m (Lnet/minecraft/class_1076;Ljava/lang/String;Lnet/minecraft/class_315;Lnet/minecraft/class_128;)V method_22681 fillCrashReport - m ()Lnet/minecraft/class_4071; method_18506 getLoadingGui - m ()V method_1519 freeMemory - m (Ljava/util/concurrent/CompletableFuture;)V method_29339 func_238213_c_ - m ()Lnet/minecraft/class_918; method_1480 getItemRenderer - m (Ljava/lang/String;ZLjava/util/function/Supplier;Lnet/minecraft/class_3262;Lnet/minecraft/class_3272;Lnet/minecraft/class_3288$class_3289;Lnet/minecraft/class_5352;)Lnet/minecraft/class_3288; method_24038 makePackInfo - m ()Z method_1496 isSingleplayer - m (I)V method_1524 updateDebugProfilerName - m ()Z method_29044 isChatEnabled - m ()Ljava/lang/String; method_16012 func_238203_aM_ - m ()V method_1536 clickMouse - m (Lnet/minecraft/class_437;)V method_18098 updateScreenTick - m ()F method_1488 getRenderPartialTicks - m (Lnet/minecraft/class_128;)Lnet/minecraft/class_128; method_1587 addGraphicsAndWorldToCrashReport - m (Ljava/lang/String;)V method_29606 loadWorld - m ()F method_1534 getTickLength - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_32$class_5143;Lnet/minecraft/class_310$class_5367;Lnet/minecraft/class_5219;Lcom/mojang/authlib/minecraft/MinecraftSessionService;Lcom/mojang/authlib/GameProfileRepository;Lnet/minecraft/class_3312;Ljava/lang/Thread;)Lnet/minecraft/class_1132; method_29603 func_238188_a_ - m ()Lnet/minecraft/class_1132; method_1576 getIntegratedServer - m ()V method_29338 func_238205_aQ_ - m ()Lnet/minecraft/class_634; method_1562 getConnection - m (Ljava/util/function/Supplier;)Ljava/util/function/Supplier; method_24042 wrapV3 - m (Lnet/minecraft/class_1860;)Ljava/util/stream/Stream; method_1591 func_213234_b - m (Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletionStage; method_18507 func_229993_a_ - m (Lnet/minecraft/class_2561;)Ljava/lang/String; method_1581 func_213230_d - m (Ljava/lang/Throwable;Lnet/minecraft/class_2561;)V method_31186 throwResourcePackLoadError - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5285;Lnet/minecraft/class_1940;Lnet/minecraft/class_32$class_5143;Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_3300;Lnet/minecraft/class_5359;)Lnet/minecraft/class_5219; method_31125 func_238187_a_ - m ()V method_1583 rightClickMouse - m (I)V method_24041 setMipmapLevels - m (Ljava/lang/String;Ljava/lang/Runnable;ZZ)V method_29600 func_241561_a_ - m ()Ljava/lang/String; method_1509 func_243210_aO - m (Lnet/minecraft/class_437;)V method_29970 forcedScreenTick - m ()Z method_1530 isDemo - f F field_1741 renderPartialTicksPaused - f Lnet/minecraft/class_3695; field_16240 profiler - f Ljava/lang/String; field_1711 launchedVersion - f Lnet/minecraft/class_761; field_1769 worldRenderer - f Lnet/minecraft/class_302; field_1732 creativeSettings - f Lnet/minecraft/class_2535; field_1746 networkManager - f Ljava/util/concurrent/atomic/AtomicReference; field_17405 refChunkStatusListener - f Z field_20908 debugChunkPath - f Lnet/minecraft/class_2960; field_24211 UNIFORM_FONT_RENDERER_NAME - f Lnet/minecraft/class_317; field_1728 timer - f Z field_1734 isGamePaused - f Lcom/mojang/authlib/properties/PropertyMap; field_1694 profileProperties - f Lnet/minecraft/class_757; field_1773 gameRenderer - f Lnet/minecraft/class_4074; field_18173 potionSprites - f Lnet/minecraft/class_320; field_1726 session - f Z field_25034 enableChat - f Lnet/minecraft/class_4044; field_18008 paintingSprites - f Ljava/lang/String; field_1770 debug - f Lnet/minecraft/class_642; field_1699 currentServerData - f J field_1750 startNanoTime - f Z field_1730 renderChunksMany - f Lnet/minecraft/class_2960; field_1740 DEFAULT_FONT_RENDERER_NAME - f I field_1738 debugFPS - f Ljava/io/File; field_1757 fileResourcepacks - f Lnet/minecraft/class_239; field_1765 objectMouseOver - f Lnet/minecraft/class_128; field_1747 crashReporter - f Lnet/minecraft/class_374; field_1702 toastGui - f Lnet/minecraft/class_1066; field_1722 packFinder - f Lnet/minecraft/class_1276; field_1775 snooper - f I field_1752 rightClickDelayTimer - f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_1723 sessionService - f Lnet/minecraft/class_329; field_1705 ingameGUI - f Lnet/minecraft/class_378; field_1708 fontResourceMananger - f Lnet/minecraft/class_3283; field_1715 resourcePackRepository - f Lnet/minecraft/class_315; field_1690 gameSettings - f Ljava/lang/Thread; field_1696 thread - f I field_1771 leftClickCounter - f Lnet/minecraft/class_918; field_1742 itemRenderer - f Z field_1721 isDemo - f Lnet/minecraft/class_3696; field_22226 profilerResult - f I field_22224 gameTime - f Lnet/minecraft/class_4071; field_18175 loadingGui - f Z field_20907 debugWireframe - f Lnet/minecraft/class_638; field_1687 world - f Lnet/minecraft/class_4008; field_17763 splashes - f Lnet/minecraft/class_1156; field_1758 tutorial - f Lnet/minecraft/class_636; field_1761 playerController - f Lnet/minecraft/class_324; field_1751 blockColors - f Z field_1743 skipRenderWorld - f Z field_1698 running - f Z field_1703 IS_RUNNING_ON_MAC - f Z field_25033 enableMultiplayer - f Lnet/minecraft/class_1124; field_1733 searchTreeManager - f Lnet/minecraft/class_3517; field_1688 frameTimer - f Lnet/minecraft/class_3682; field_1686 virtualScreen - f Lnet/minecraft/class_1142; field_1714 musicTicker - f Lnet/minecraft/class_776; field_1756 blockRenderDispatcher - f Lnet/minecraft/class_4599; field_20909 renderTypeBuffers - f Lnet/minecraft/class_1041; field_1704 mainWindow - f Lorg/apache/logging/log4j/Logger; field_1762 LOGGER - f Ljava/lang/String; field_1701 debugProfilerName - f Lnet/minecraft/class_437; field_1755 currentScreen - f Lnet/minecraft/class_898; field_1731 renderManager - f Lnet/minecraft/class_759; field_1737 firstPersonRenderer - f Z field_1759 integratedServerIsRunning - f Lcom/mojang/datafixers/DataFixer; field_1768 dataFixer - f Z field_1744 connectedToRealms - f Lnet/minecraft/class_1060; field_1764 textureManager - f Lnet/minecraft/class_1297; field_1719 renderViewEntity - f Z field_1693 jvm64bit - f Lnet/minecraft/class_863; field_1709 debugRenderer - f Lnet/minecraft/class_1144; field_1727 soundHandler - f Lnet/minecraft/class_746; field_1724 player - f Lnet/minecraft/class_1071; field_1707 skinManager - f [B field_1718 memoryReserve - f Lnet/minecraft/class_3799; field_16762 game - f Ljava/io/File; field_1697 gameDir - f J field_1712 debugUpdateTime - f Ljava/util/concurrent/CompletableFuture; field_18174 futureRefreshResources - f Lnet/minecraft/class_327; field_1772 fontRenderer - f Lnet/minecraft/class_1132; field_1766 integratedServer - f Lnet/minecraft/class_1297; field_1692 pointedEntity - f Lnet/minecraft/class_1092; field_1763 modelManager - f Lnet/minecraft/class_325; field_1760 itemColors - f Z field_1695 isWindowFocused - f Ljava/util/concurrent/CompletableFuture; field_18009 RESOURCE_RELOAD_INIT_TASK - f Lnet/minecraft/class_1076; field_1717 languageManager - f Ljava/lang/String; field_1720 versionType - f Lnet/minecraft/class_3296; field_1745 resourceManager - f Lnet/minecraft/class_309; field_1774 keyboardListener - f Lnet/minecraft/class_2960; field_1749 standardGalacticFontRenderer - f Lnet/minecraft/class_32; field_1748 saveFormat - f I field_1735 fpsCounter - f Lnet/minecraft/class_4757; field_22225 gameTimeTracker - f Lnet/minecraft/class_310; field_1700 instance - f Lnet/minecraft/class_702; field_1713 particles - f Ljava/util/Queue; field_17404 queueChunkTracking - f Lnet/minecraft/class_312; field_1729 mouseHelper - f Ljava/net/Proxy; field_1739 proxy - f Lnet/minecraft/class_5407; field_25671 warningGPU - f Lnet/minecraft/class_276; field_1689 framebuffer -c net/minecraft/class_310$class_5367 net/minecraft/client/Minecraft$PackManager - m ()V close close - m ()Lnet/minecraft/class_5350; method_29613 getDataPackRegistries - m ()Lnet/minecraft/class_3283; method_29612 getResourcePacks - m ()Lnet/minecraft/class_5219; method_29614 getServerConfiguration - f Lnet/minecraft/class_5350; field_25440 datapackRegistries - f Lnet/minecraft/class_3283; field_25439 resourcePackList - f Lnet/minecraft/class_5219; field_25441 serverConfiguration -c net/minecraft/class_310$class_5366 net/minecraft/client/Minecraft$WorldSelectionType - m (Ljava/lang/String;)Lnet/minecraft/class_310$class_5366; valueOf valueOf - m ()[Lnet/minecraft/class_310$class_5366; values values - f Lnet/minecraft/class_310$class_5366; field_25435 NONE - f [Lnet/minecraft/class_310$class_5366; field_25438 $VALUES - f Lnet/minecraft/class_310$class_5366; field_25436 CREATE - f Lnet/minecraft/class_310$class_5366; field_25437 BACKUP -c net/minecraft/class_310$1 net/minecraft/client/Minecraft$1 - f [I field_1778 field_238219_a_ - f [I field_1777 field_238220_b_ -c net/minecraft/class_4287 net/minecraft/client/settings/SliderMultiplierOption -c net/minecraft/class_4065 net/minecraft/client/settings/NarratorStatus - m ()Lnet/minecraft/class_2561; method_18511 func_238233_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_4065; valueOf valueOf - m (I)[Lnet/minecraft/class_4065; method_18512 func_216826_b - m ()[Lnet/minecraft/class_4065; values values - m ()I method_18509 getId - m (I)Lnet/minecraft/class_4065; method_18510 byId - f Lnet/minecraft/class_4065; field_18178 CHAT - f Lnet/minecraft/class_4065; field_18177 ALL - f Lnet/minecraft/class_4065; field_18179 SYSTEM - f I field_18181 id - f [Lnet/minecraft/class_4065; field_18180 BY_ID - f Lnet/minecraft/class_2561; field_24212 field_238232_g_ - f [Lnet/minecraft/class_4065; field_18183 $VALUES - f Lnet/minecraft/class_4065; field_18176 OFF -c net/minecraft/class_312 net/minecraft/client/MouseHelper - m (JLjava/util/List;)V method_29616 addPacksToScreen - m ()V method_1606 updatePlayerLook - m ()Z method_1609 isRightDown - m ()Z method_1608 isLeftDown - m ()V method_1599 setIgnoreFirstMove - m (JDD)V method_1600 cursorPosCallback - m (Lnet/minecraft/class_364;DD)V method_16013 func_238230_a_ - m (JIII)V method_1601 mouseButtonCallback - m (JDD)V method_1598 scrollCallback - m ()V method_1610 ungrabMouse - m ()V method_1612 grabMouse - m ()Z method_1613 isMouseGrabbed - m ()V method_30134 ignoreFirstMove - m (JDD)V method_22689 func_228033_f_ - m (JIII)V method_22686 func_228030_c_ - m (JDD)V method_22688 func_228032_e_ - m (J[Ljava/nio/file/Path;)V method_29617 func_238229_a_ - m ([ZDDI)V method_1605 func_198027_a - m (JDD)V method_22685 func_228029_c_ - m (JDD)V method_22687 func_228031_d_ - m (JIII)V method_22684 func_228028_b_ - m ([ZDDI)V method_1611 func_198033_b - m (JIJ)V method_29615 func_238227_a_ - m ()D method_1603 getMouseX - m (Lnet/minecraft/class_364;DDDD)V method_1602 func_238231_a_ - m ()D method_1604 getMouseY - m (J)V method_1607 registerCallbacks - f I field_1796 touchScreenCounter - f Lnet/minecraft/class_3540; field_1793 xSmoother - f Lnet/minecraft/class_3540; field_1782 ySmoother - f Z field_1790 middleDown - f D field_1792 eventTime - f Z field_1788 rightDown - f D field_1787 yVelocity - f D field_1789 xVelocity - f D field_1785 lastLookTime - f D field_1786 accumulatedScrollDelta - f Z field_1784 ignoreFirstMove - f Z field_1783 mouseGrabbed - f D field_1795 mouseX - f Lnet/minecraft/class_310; field_1779 minecraft - f D field_1794 mouseY - f Z field_1791 leftDown - f I field_1780 activeButton - f I field_1781 simulatedRightClicks -c net/minecraft/class_316 net/minecraft/client/AbstractOption - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_19342 func_216597_s_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18545 func_216594_g_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18541 func_216585_f_ - m (I)Lnet/minecraft/class_2561; method_30502 getPercentageAddMessage - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18558 func_216618_d_ - m (Lnet/minecraft/class_315;)Z method_18549 func_216663_f_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_27140 func_238271_z - m ()Ljava/util/Optional; method_29619 getOptionValues - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18524 func_216644_b_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18568 func_216630_i_ - m (Lnet/minecraft/class_315;)Z method_18573 func_216657_j_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18604 func_244406_A_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18534 func_216580_c_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_27467 func_238254_c - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18588 func_216600_n - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18586 func_216642_p_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18544 func_216668_h_ - m (Lnet/minecraft/class_315;)Z method_18585 func_216610_k_ - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_19341 func_216665_c_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_21669 func_225259_r_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18571 func_216620_j - m (Lnet/minecraft/class_315;)Z method_18597 func_216619_o_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18575 func_216588_g_ - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18542 func_216584_g_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_31042 func_216608_f - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18587 func_216670_k_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18569 func_216673_l_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18521 func_216602_d_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18514 func_216649_D - m ()Lnet/minecraft/class_2561; method_18518 getBaseMessageTranslation - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18547 func_216651_g_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18539 func_216629_f_ - m (Lnet/minecraft/class_315;)Z method_18543 func_216638_e_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_27141 func_238287_A - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_31041 func_216645_h_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18564 func_216603_h_ - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18566 func_216615_h_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_27468 func_238256_c_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18522 func_216641_b_ - m (Lnet/minecraft/class_315;)Z method_18567 func_216627_i_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_31037 func_244419_w - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18562 func_216609_h_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18540 func_216676_d_ - m (Lnet/minecraft/class_315;)Z method_20405 func_216634_j_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18591 func_216659_l_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18538 func_216596_g_ - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18525 func_216605_d_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18582 func_216604_o_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18576 func_216624_k - m (Lnet/minecraft/class_315;)Z method_18595 func_216643_n_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_27144 func_238297_k_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18600 func_216581_x_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18579 func_216635_h_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18565 func_216612_g - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18548 func_216674_h_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18515 func_216611_E - m (D)Lnet/minecraft/class_2561; method_30503 getPercentValueComponent - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18598 func_216654_t_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_19338 func_216639_c_ - m (Lnet/minecraft/class_315;)Z method_18526 func_228040_b_ - m (Lnet/minecraft/class_315;)Z method_18537 func_216647_d_ - m (Lnet/minecraft/class_315;III)Lnet/minecraft/class_339; method_18520 createWidget - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18546 func_216662_e_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18606 func_216601_B - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18572 func_216653_i_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18530 func_216579_d_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_31039 func_244416_g_ - m (Lnet/minecraft/class_315;)Z method_18561 func_216606_e_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18570 func_216631_i - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_31038 func_216672_x - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_19339 func_216626_a_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18523 func_228038_a_ - m (Lnet/minecraft/class_315;)Z method_18581 func_216661_i_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18533 func_216675_e_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18592 func_216660_o - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18594 func_216656_m_ - m (Lnet/minecraft/class_315;)Z method_18593 func_216669_m_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18580 func_216578_l - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18578 func_216592_n_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18532 func_216632_f - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_23483 func_228039_a_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18556 func_216598_g_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18601 func_216667_y_ - m (Ljava/util/List;)V method_29618 setOptionValues - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18554 func_216577_f_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_27143 func_238273_h - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_27142 func_238292_j_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_23484 func_228041_b_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_20404 func_216625_i_ - m (I)Lnet/minecraft/class_2561; method_30500 getPixelValueComponent - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18516 func_216587_F - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_27469 func_238324_u_ - m (Lnet/minecraft/class_315;)Z method_18519 func_228036_a_ - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18531 func_216622_e_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18559 func_244411_h_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18513 func_216591_C - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18552 func_216613_f_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18535 func_216628_e_ - m (Lnet/minecraft/class_315;)Z method_18555 func_216582_g_ - m (I)Lnet/minecraft/class_2561; method_30504 getMessageWithValue - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18605 func_216655_y - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18557 func_244413_h_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_19340 func_216593_a_ - m (Lnet/minecraft/class_315;)Z method_18577 func_216576_h_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18529 func_228042_b_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18528 func_216664_d_ - m (Lnet/minecraft/class_315;)Z method_18589 func_216583_l_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_18584 func_216650_m - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18596 func_216621_n_ - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_30501 getGenericValueComponent - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_23485 func_228043_b_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18602 func_216636_z_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18550 func_216633_f_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18590 func_216595_q_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_27145 func_238282_i - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18560 func_216640_g_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_23482 func_228037_a_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18517 func_216607_G - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18563 func_216590_i_ - m (Lnet/minecraft/class_315;)Ljava/lang/Double; method_18599 func_216658_v_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4064;)Lnet/minecraft/class_2561; method_18527 func_216616_e_ - m (Lnet/minecraft/class_315;)Z method_21670 func_225287_w_ - m (Lnet/minecraft/class_315;Lnet/minecraft/class_4067;)Lnet/minecraft/class_2561; method_18574 func_216637_m_ - m (Lnet/minecraft/class_315;Ljava/lang/Boolean;)V method_18583 func_216652_j_ - m (Lnet/minecraft/class_315;Ljava/lang/Double;)V method_31040 func_244415_e - m (Lnet/minecraft/class_315;Ljava/lang/Integer;)V method_18536 func_216648_f_ - f Lnet/minecraft/class_4067; field_1945 GAMMA - f Lnet/minecraft/class_4067; field_1933 RENDER_DISTANCE - f Lnet/minecraft/class_4062; field_1920 CHAT_LINKS - f Lnet/minecraft/class_4064; field_1923 CHAT_VISIBILITY - f Lnet/minecraft/class_4062; field_18184 ENTITY_SHADOWS - f Lnet/minecraft/class_2561; field_25672 FAST_GRAPHICS - f Lnet/minecraft/class_4067; field_1940 CHAT_HEIGHT_FOCUSED - f Lnet/minecraft/class_4062; field_18187 REDUCED_DEBUG_INFO - f Lnet/minecraft/class_4067; field_1941 CHAT_WIDTH - f Lnet/minecraft/class_2561; field_25674 FANCY_GRAPHICS - f Lnet/minecraft/class_4064; field_1919 PARTICLES - f Lnet/minecraft/class_4067; field_26673 FOV_EFFECT_SCALE_SLIDER - f Lnet/minecraft/class_4067; field_18190 MIPMAP_LEVELS - f Lnet/minecraft/class_4062; field_18195 AUTO_JUMP - f Lnet/minecraft/class_4067; field_24213 ENTITY_DISTANCE_SCALING - f Lnet/minecraft/class_4062; field_1925 CHAT_LINKS_PROMPT - f Lnet/minecraft/class_4064; field_1938 GRAPHICS - f Lnet/minecraft/class_4062; field_18185 FORCE_UNICODE_FONT - f Lnet/minecraft/class_4067; field_1939 CHAT_HEIGHT_UNFOCUSED - f Ljava/util/Optional; field_25442 optionValues - f Lnet/minecraft/class_4062; field_18188 SHOW_SUBTITLES - f Lnet/minecraft/class_4067; field_23930 LINE_SPACING - f Lnet/minecraft/class_2561; field_26672 SCREEN_EFFECT_SCALE_TOOLTIP - f Lnet/minecraft/class_2561; field_25673 FABULOUS_GRAPHICS - f Lnet/minecraft/class_4062; field_1930 TOUCHSCREEN - f Lnet/minecraft/class_4067; field_26674 SCREEN_EFFECT_SCALE_SLIDER - f Lnet/minecraft/class_4064; field_1937 RENDER_CLOUDS - f Lnet/minecraft/class_4067; field_18191 MOUSE_WHEEL_SENSITIVITY - f Lnet/minecraft/class_4062; field_18196 AUTO_SUGGEST_COMMANDS - f Lnet/minecraft/class_4062; field_20307 RAW_MOUSE_INPUT - f Lnet/minecraft/class_2561; field_1966 translatedBaseMessage - f Lnet/minecraft/class_4064; field_1924 AO - f Lnet/minecraft/class_4067; field_1944 SENSITIVITY - f Lnet/minecraft/class_4062; field_19243 DISCRETE_MOUSE_SCROLL - f Lnet/minecraft/class_4064; field_1922 GUI_SCALE - f Lnet/minecraft/class_4062; field_1963 INVERT_MOUSE - f Lnet/minecraft/class_4067; field_1921 CHAT_OPACITY - f Lnet/minecraft/class_4062; field_1926 SNOOPER - f Lnet/minecraft/class_2561; field_26671 FOV_EFFECT_SCALE_TOOLTIP - f Lnet/minecraft/class_4064; field_21330 SNEAK - f Lnet/minecraft/class_4067; field_23931 DELAY_INSTANT - f Lnet/minecraft/class_4062; field_1932 FULLSCREEN - f Lnet/minecraft/class_4064; field_18724 ACCESSIBILITY_TEXT_BACKGROUND - f Lnet/minecraft/class_4067; field_1935 FRAMERATE_LIMIT - f Lnet/minecraft/class_4062; field_1917 CHAT_COLOR - f Lnet/minecraft/class_4064; field_18192 ATTACK_INDICATOR - f Lnet/minecraft/class_4067; field_18723 ACCESSIBILITY_TEXT_BACKGROUND_OPACITY - f Lnet/minecraft/class_4062; field_1927 VSYNC - f Lnet/minecraft/class_4064; field_18193 MAIN_HAND - f Lnet/minecraft/class_4067; field_18189 BIOME_BLEND_RADIUS - f Lnet/minecraft/class_4062; field_18186 REALMS_NOTIFICATIONS - f Lnet/minecraft/class_4064; field_21331 SPRINT - f Lnet/minecraft/class_4067; field_1946 CHAT_SCALE - f Lnet/minecraft/class_4064; field_18194 NARRATOR - f Lnet/minecraft/class_4067; field_1964 FOV - f Lnet/minecraft/class_4062; field_1934 VIEW_BOBBING -c net/minecraft/class_316$1 net/minecraft/client/AbstractOption$1 - f [I field_25443 field_238328_a_ -c net/minecraft/class_4066 net/minecraft/client/settings/ParticleStatus - m ()[Lnet/minecraft/class_4066; values values - m ()Ljava/lang/String; method_18607 getResourceKey - m (Ljava/lang/String;)Lnet/minecraft/class_4066; valueOf valueOf - m (I)[Lnet/minecraft/class_4066; method_18610 func_216834_b - m ()I method_18609 getId - m (I)Lnet/minecraft/class_4066; method_18608 byId - f Lnet/minecraft/class_4066; field_18199 MINIMAL - f I field_18201 id - f Lnet/minecraft/class_4066; field_18198 DECREASED - f [Lnet/minecraft/class_4066; field_18200 BY_ID - f [Lnet/minecraft/class_4066; field_18203 $VALUES - f Ljava/lang/String; field_18202 resourceKey - f Lnet/minecraft/class_4066; field_18197 ALL -c net/minecraft/class_315 net/minecraft/client/GameSettings - m (Ljava/lang/String;)F method_1634 parseFloat - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_1626 dataFix - m (Lnet/minecraft/class_304;Lnet/minecraft/class_3675$class_306;)V method_1641 setKeyBindingCode - m ()Lnet/minecraft/class_4063; method_1632 getCloudOption - m (Lnet/minecraft/class_1664;)V method_1631 switchModelPartEnabled - m ()Ljava/util/Set; method_1633 getModelParts - m (Lnet/minecraft/class_3419;)F method_1630 getSoundLevel - m (Lnet/minecraft/class_1664;Z)V method_1635 setModelPartEnabled - m ()V method_1636 loadOptions - m (Lnet/minecraft/class_2487;Ljava/lang/String;)V method_24230 func_230004_a_ - m ()Z method_23486 func_228047_g_ - m ()Lnet/minecraft/class_5498; method_31044 getPointOfView - m (I)I method_19344 getChatBackgroundColor - m ()V method_1640 saveOptions - m (Lnet/minecraft/class_3419;F)V method_1624 setSoundLevel - m ()Z method_1639 isUsingNativeTransport - m ()Z method_23487 func_228048_h_ - m (F)F method_19343 getTextBackgroundOpacity - m (Lnet/minecraft/class_5498;)V method_31043 setPointOfView - m ()V method_1643 sendSettingsToServer - m (Lnet/minecraft/class_3283;)V method_1627 fillResourcePackList - m (F)I method_19345 getTextBackgroundColor - f Z field_1911 chatLinks - f Lnet/minecraft/class_4065; field_1896 narrator - f Z field_1819 forceUnicodeFont - f Z field_21840 skipMultiplayerWarning - f Lnet/minecraft/class_304; field_1886 keyBindAttack - f D field_1820 chatOpacity - f Z field_25623 syncChunkWrites - f Lnet/minecraft/class_304; field_1845 keyBindCommand - f Lnet/minecraft/class_1267; field_1851 difficulty - f Ljava/io/File; field_1897 optionsFile - f I field_1856 mipmapLevels - f I field_1878 biomeBlendRadius - f Z field_1910 reducedDebugInfo - f Lnet/minecraft/class_4060; field_1841 ambientOcclusionStatus - f [Lnet/minecraft/class_304; field_1852 keyBindsHotbar - f Lnet/minecraft/class_304; field_1894 keyBindForward - f Z field_18725 accessibilityTextBackground - f D field_1826 fov - f Lnet/minecraft/class_310; field_1863 mc - f I field_1901 glDebugVerbosity - f Lnet/minecraft/class_304; field_1836 keyBindFullscreen - f D field_1908 chatScale - f Ljava/lang/String; field_1864 lastServer - f F field_24214 entityDistanceScaling - f D field_23933 chatDelay - f I field_1868 guiScale - f Lnet/minecraft/class_304; field_1903 keyBindJump - f Lcom/google/common/base/Splitter; field_1853 KEY_VALUE_SPLITTER - f Lnet/minecraft/class_304; field_1831 keyBindSwapHands - f Ljava/util/List; field_1846 incompatibleResourcePacks - f Z field_1880 showDebugProfilerChart - f Z field_1817 chatLinksPrompt - f [Lnet/minecraft/class_304; field_1839 keyBindings - f Lnet/minecraft/class_304; field_1874 keyBindLoadToolbar - f D field_23932 chatLineSpacing - f Lnet/minecraft/class_1306; field_1829 mainHand - f Lnet/minecraft/class_304; field_1871 keyBindPickBlock - f Lorg/apache/logging/log4j/Logger; field_1834 LOGGER - f Lnet/minecraft/class_5365; field_25444 graphicFanciness - f Lnet/minecraft/class_304; field_1835 keyBindScreenshot - f Lnet/minecraft/class_4063; field_1814 cloudOption - f Z field_1865 invertMouse - f Z field_1847 snooper - f D field_1889 mouseWheelSensitivity - f Ljava/util/Set; field_1892 setModelParts - f I field_1872 overrideWidth - f Z field_1854 touchscreen - f Lnet/minecraft/class_304; field_1906 keyBindSpectatorOutlines - f F field_26675 screenEffectScale - f Z field_1815 hideServerAddress - f D field_1915 chatWidth - f Lnet/minecraft/class_304; field_1913 keyBindLeft - f Lnet/minecraft/class_5498; field_26677 pointOfView - f Lnet/minecraft/class_304; field_1832 keyBindSneak - f Lcom/google/gson/Gson; field_1823 GSON - f I field_1909 framerateLimit - f Z field_1893 showLagometer - f Z field_1848 autoJump - f Lnet/minecraft/class_304; field_1869 keyBindDrop - f Lnet/minecraft/class_304; field_1890 keyBindChat - f Z field_1884 vsync - f Z field_19244 discreteMouseScroll - f D field_18726 accessibilityTextBackgroundOpacity - f Lnet/minecraft/class_304; field_1824 keyBindTogglePerspective - f Lnet/minecraft/class_304; field_1844 keyBindAdvancements - f Z field_1876 useNativeTransport - f Z field_1842 hideGUI - f D field_1843 mouseSensitivity - f Z field_1827 advancedItemTooltips - f Lnet/minecraft/class_304; field_1881 keyBindBack - f I field_1885 overrideHeight - f Z field_1857 fullscreen - f D field_1825 chatHeightUnfocused - f Z field_21332 toggleCrouch - f Z field_1873 autoSuggestCommands - f F field_26676 fovScaleEffect - f Lnet/minecraft/class_1659; field_1877 chatVisibility - f Lnet/minecraft/class_304; field_1867 keyBindSprint - f Ljava/lang/String; field_1883 language - f Lnet/minecraft/class_304; field_1904 keyBindUseItem - f Z field_1900 chatColor - f Lnet/minecraft/class_4066; field_1882 particles - f Z field_1888 entityShadows - f Z field_21333 toggleSprint - f Lnet/minecraft/class_1157; field_1875 tutorialStep - f Lnet/minecraft/class_4061; field_1895 attackIndicator - f Lnet/minecraft/class_304; field_1907 keyBindPlayerList - f Ljava/lang/String; field_1828 fullscreenResolution - f Lnet/minecraft/class_304; field_1816 keyBindSmoothCamera - f Z field_1830 realmsNotifications - f Z field_1818 showSubtitles - f Ljava/util/List; field_1887 resourcePacks - f Z field_1891 viewBobbing - f D field_1838 chatHeightFocused - f I field_1870 renderDistanceChunks - f Z field_20308 rawMouseInput - f Lcom/google/gson/reflect/TypeToken; field_1859 TYPE_LIST_STRING - f Ljava/util/Map; field_1916 soundLevels - f Z field_1914 smoothCamera - f Lnet/minecraft/class_304; field_1849 keyBindRight - f Z field_1837 pauseOnLostFocus - f Lnet/minecraft/class_304; field_1879 keyBindSaveToolbar - f Z field_1866 showDebugInfo - f Lnet/minecraft/class_304; field_1822 keyBindInventory - f Z field_1905 heldItemTooltips - f D field_1840 gamma -c net/minecraft/class_315$1 net/minecraft/client/GameSettings$1 -c net/minecraft/class_315$2 net/minecraft/client/GameSettings$2 - f [I field_1967 field_216838_a -c net/minecraft/class_314 net/minecraft/client/util/RecipeBookCategories - m ()[Lnet/minecraft/class_314; values values - m ()Ljava/util/List; method_1623 getIcons - m (Lnet/minecraft/class_5421;)Ljava/util/List; method_30285 func_243236_a - m (Ljava/lang/String;)Lnet/minecraft/class_314; valueOf valueOf - f Lnet/minecraft/class_314; field_25625 UNKNOWN - f Lnet/minecraft/class_314; field_1809 CRAFTING_SEARCH - f Lnet/minecraft/class_314; field_1803 CRAFTING_REDSTONE - f Lnet/minecraft/class_314; field_1806 CRAFTING_BUILDING_BLOCKS - f Lnet/minecraft/class_314; field_1813 CRAFTING_EQUIPMENT - f [Lnet/minecraft/class_314; field_1805 $VALUES - f Lnet/minecraft/class_314; field_1810 CRAFTING_MISC - f Lnet/minecraft/class_314; field_1808 FURNACE_FOOD - f Lnet/minecraft/class_314; field_1804 FURNACE_SEARCH - f Ljava/util/List; field_25779 field_243231_s - f Lnet/minecraft/class_314; field_1811 FURNACE_BLOCKS - f Ljava/util/List; field_25780 field_243232_t - f Lnet/minecraft/class_314; field_1812 FURNACE_MISC - f Lnet/minecraft/class_314; field_17111 BLAST_FURNACE_BLOCKS - f Lnet/minecraft/class_314; field_17110 BLAST_FURNACE_SEARCH - f Lnet/minecraft/class_314; field_17112 BLAST_FURNACE_MISC - f Ljava/util/List; field_1807 icons - f Lnet/minecraft/class_314; field_17113 SMOKER_SEARCH - f Lnet/minecraft/class_314; field_17764 STONECUTTER - f Lnet/minecraft/class_314; field_17114 SMOKER_FOOD - f Ljava/util/List; field_25782 field_243234_v - f Lnet/minecraft/class_314; field_25624 SMITHING - f Ljava/util/List; field_25781 field_243233_u - f Ljava/util/Map; field_25783 field_243235_w - f Lnet/minecraft/class_314; field_17765 CAMPFIRE -c net/minecraft/class_314$1 net/minecraft/client/util/RecipeBookCategories$1 - f [I field_25784 field_243237_a -c net/minecraft/class_4067 net/minecraft/client/settings/SliderPercentageOption - m (Lnet/minecraft/class_315;)D method_18613 get - m (F)V method_18612 setMaxValue - m ()D method_18615 getMinValue - m (D)D method_18611 normalizeValue - m ()D method_18617 getMaxValue - m (D)D method_18616 denormalizeValue - m (Lnet/minecraft/class_315;D)V method_18614 set - m (D)D method_18618 snapToStepClamp - m (Lnet/minecraft/class_315;)Lnet/minecraft/class_2561; method_18619 func_238334_c_ - f F field_18204 stepSize - f D field_18205 minValue - f Ljava/util/function/BiFunction; field_18209 getDisplayStringFunc - f D field_18206 maxValue - f Ljava/util/function/BiConsumer; field_18208 setter - f Ljava/util/function/Function; field_18207 getter -c net/minecraft/class_3801 net/minecraft/client/ClientGameSession - m ()Ljava/util/UUID; getSessionId getSessionId - m ()Ljava/lang/String; getGameMode getGameMode - m ()I getPlayerCount getPlayerCount - m ()Z isRemoteServer isRemoteServer - m ()Ljava/lang/String; getDifficulty getDifficulty - f Ljava/lang/String; field_16763 difficulty - f Ljava/util/UUID; field_16767 sessionId - f Z field_16766 remoteServer - f Ljava/lang/String; field_16764 gameMode - f I field_16765 playerCount -c net/minecraft/class_318 net/minecraft/util/ScreenShotHelper - m (Ljava/io/File;)Ljava/io/File; method_1660 getTimestampedPNGFileForDirectory - m (IILnet/minecraft/class_276;)Lnet/minecraft/class_1011; method_1663 createScreenshot - m (Ljava/io/File;Ljava/lang/String;IILnet/minecraft/class_276;Ljava/util/function/Consumer;)V method_1662 saveScreenshotRaw - m (Lnet/minecraft/class_1011;Ljava/io/File;Ljava/util/function/Consumer;)V method_1661 func_228049_a_ - m (Ljava/io/File;Ljava/lang/String;IILnet/minecraft/class_276;Ljava/util/function/Consumer;)V method_22691 func_228052_c_ - m (Ljava/io/File;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_1664 func_238335_a_ - m (Ljava/io/File;IILnet/minecraft/class_276;Ljava/util/function/Consumer;)V method_1659 saveScreenshot - m (Ljava/io/File;Ljava/lang/String;IILnet/minecraft/class_276;Ljava/util/function/Consumer;)V method_22690 saveScreenshot - f Ljava/text/DateFormat; field_1973 DATE_FORMAT - f Lorg/apache/logging/log4j/Logger; field_1974 LOGGER -c net/minecraft/class_317 net/minecraft/util/Timer - m (J)I method_1658 getPartialTicks - f J field_1971 lastSyncSysClock - f F field_1968 tickLength - f F field_1969 elapsedPartialTicks - f F field_1970 renderPartialTicks -c net/minecraft/class_5225 net/minecraft/util/text/CharacterManager - m (Lnet/minecraft/class_5481;I)Lnet/minecraft/class_2583; method_30876 func_243239_a - m (Lorg/apache/commons/lang3/mutable/MutableFloat;ILnet/minecraft/class_2583;I)Z method_30879 func_243243_a - m (Lorg/apache/commons/lang3/mutable/MutableFloat;ILnet/minecraft/class_2583;I)Z method_27492 func_238359_a_ - m (Lorg/apache/commons/lang3/mutable/MutableFloat;ILnet/minecraft/class_2583;I)Z method_27496 func_238363_b_ - m (Lnet/minecraft/class_5348;ILnet/minecraft/class_2583;Ljava/util/function/BiConsumer;)V method_29971 func_243242_a - m (Ljava/lang/String;ILnet/minecraft/class_2583;)Ljava/lang/String; method_27494 func_238361_b_ - m (Ljava/lang/String;ILnet/minecraft/class_2583;)Ljava/lang/String; method_27497 func_238364_c_ - m (Ljava/lang/String;ILnet/minecraft/class_2583;ZLnet/minecraft/class_5225$class_5229;)V method_27485 func_238353_a_ - m (Lnet/minecraft/class_5225$class_5230;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_27480 func_238348_a_ - m (Ljava/lang/String;ILnet/minecraft/class_2583;)I method_27484 func_238352_a_ - m (Ljava/lang/String;)F method_27482 func_238350_a_ - m (Ljava/lang/String;ILnet/minecraft/class_2583;)Ljava/util/List; method_27498 func_238365_g_ - m (Lnet/minecraft/class_5348;ILnet/minecraft/class_2583;)Lnet/minecraft/class_5348; method_27490 func_238358_a_ - m (Ljava/util/List;Ljava/lang/String;Lnet/minecraft/class_2583;II)V method_27486 func_238354_a_ - m (Lnet/minecraft/class_5481;)F method_30875 func_243238_a - m (Lnet/minecraft/class_5348;)F method_27488 func_238356_a_ - m (Lorg/apache/commons/lang3/mutable/MutableFloat;ILorg/apache/commons/lang3/mutable/MutableInt;ILnet/minecraft/class_2583;I)Z method_27493 func_238360_a - m (Ljava/lang/String;IIZ)I method_27483 func_238351_a_ - m (Lnet/minecraft/class_5225$class_5230;Lorg/apache/commons/lang3/mutable/MutableObject;ILnet/minecraft/class_2583;I)Z method_30877 func_243240_a - m (Lnet/minecraft/class_5348;I)Lnet/minecraft/class_2583; method_27489 func_238357_a_ - m (Ljava/util/List;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_27487 func_238355_a_ - m (Lnet/minecraft/class_5225;)Lnet/minecraft/class_5225$class_5231; method_27481 func_238349_a_ - m (Lnet/minecraft/class_5348;ILnet/minecraft/class_2583;)Ljava/util/List; method_27495 func_238362_b_ - m (Ljava/util/List;Lnet/minecraft/class_5348;Ljava/lang/Boolean;)V method_30878 func_243241_a - f Lnet/minecraft/class_5225$class_5231; field_24216 field_238347_a_ -c net/minecraft/class_5225$class_5345 net/minecraft/util/text/CharacterManager$StyleOverridingTextComponent - m (Lnet/minecraft/class_5225$class_5345;)Ljava/lang/String; method_29340 func_238393_a_ - m (Lnet/minecraft/class_5225$class_5345;)Lnet/minecraft/class_2583; method_29341 func_238394_b_ - f Ljava/lang/String; field_25261 field_238391_a_ - f Lnet/minecraft/class_2583; field_25262 field_238392_d_ -c net/minecraft/class_5225$class_5227 net/minecraft/util/text/CharacterManager$MultilineProcessor - m ()Lnet/minecraft/class_2583; method_27508 func_238389_b_ - m (ILnet/minecraft/class_2583;)Z method_27507 func_238388_a_ - m ()Z method_27509 func_238390_c_ - m ()I method_27505 func_238386_a_ - m (I)V method_27506 func_238387_a_ - f I field_24231 field_238385_j_ - f Z field_24226 field_238380_e_ - f Lnet/minecraft/class_2583; field_24225 field_238379_d_ - f F field_24223 field_238377_b_ - f Lnet/minecraft/class_2583; field_24229 field_238383_h_ - f I field_24224 field_238378_c_ - f F field_24227 field_238381_f_ - f I field_24228 field_238382_g_ - f Lnet/minecraft/class_5225; field_24222 field_238376_a_ - f I field_24230 field_238384_i_ -c net/minecraft/class_5225$class_5226 net/minecraft/util/text/CharacterManager$SubstyledText - m ()Lnet/minecraft/class_5348; method_27499 func_238371_a_ - m (I)C method_27500 func_238372_a_ - m (Lnet/minecraft/class_5225$class_5345;)Ljava/lang/String; method_27504 func_238375_a_ - m (IILnet/minecraft/class_2583;)Lnet/minecraft/class_5348; method_27501 func_238373_a_ - m (Lnet/minecraft/class_5225$class_5226;)Ljava/util/List; method_27503 func_238374_a_ - f Ljava/util/List; field_24220 field_238369_a_ - f Ljava/lang/String; field_24221 field_238370_b_ -c net/minecraft/class_5225$class_5231 net/minecraft/util/text/CharacterManager$ICharWidthProvider - m (ILnet/minecraft/class_2583;)F getWidth getWidth -c net/minecraft/class_5225$class_5230 net/minecraft/util/text/CharacterManager$StringWidthProcessor - m ()V method_27514 func_238399_b_ - m ()I method_27513 func_238398_a_ - f F field_24235 field_238396_b_ - f Lnet/minecraft/class_5225; field_24234 field_238395_a_ - f I field_24236 field_238397_c_ -c net/minecraft/class_5225$class_5229 net/minecraft/util/text/CharacterManager$ISliceAcceptor - m (Lnet/minecraft/class_2583;II)V accept accept -c net/minecraft/class_5225$1 net/minecraft/util/text/CharacterManager$1 - f Lnet/minecraft/class_5222; field_24219 field_238368_c_ - f Lnet/minecraft/class_5225; field_24218 field_238367_b_ - f Lnet/minecraft/class_5225$class_5230; field_24217 field_238366_a_ -c net/minecraft/class_320 net/minecraft/util/Session - m ()Ljava/lang/String; method_1673 getPlayerID - m ()Ljava/lang/String; method_1676 getUsername - m ()Ljava/lang/String; method_1674 getToken - m ()Lcom/mojang/authlib/GameProfile; method_1677 getProfile - m ()Ljava/lang/String; method_1675 getSessionID - f Lnet/minecraft/class_320$class_321; field_1984 sessionType - f Ljava/lang/String; field_1982 username - f Ljava/lang/String; field_1985 playerID - f Ljava/lang/String; field_1983 token -c net/minecraft/class_320$class_321 net/minecraft/util/Session$Type - m ()[Lnet/minecraft/class_320$class_321; values values - m (Ljava/lang/String;)Lnet/minecraft/class_320$class_321; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_320$class_321; method_1679 setSessionType - m (Lnet/minecraft/class_320$class_321;)Ljava/lang/String; method_1678 func_199876_a - f Ljava/util/Map; field_1989 SESSION_TYPES - f Lnet/minecraft/class_320$class_321; field_1988 MOJANG - f [Lnet/minecraft/class_320$class_321; field_1987 $VALUES - f Ljava/lang/String; field_1986 sessionType - f Lnet/minecraft/class_320$class_321; field_1990 LEGACY -c net/minecraft/class_4666 net/minecraft/client/settings/ToggleableKeyBinding - f Ljava/util/function/BooleanSupplier; field_21334 getterToggle -c net/minecraft/class_324 net/minecraft/client/renderer/color/BlockColors - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1688 func_228059_f_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1694 func_228060_g_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1692 func_228061_h_ - m (Lnet/minecraft/class_2769;[Lnet/minecraft/class_2248;)V method_21593 addColorState - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1687 func_228062_i_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1695 func_228063_j_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1693 func_228064_k_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1697 getColor - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1686 func_228065_l_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1684 func_228055_b_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)I method_1691 getColorOrMaterialColor - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1696 func_228056_c_ - m ()Lnet/minecraft/class_324; method_1689 init - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1698 func_228057_d_ - m (Ljava/util/Set;[Lnet/minecraft/class_2248;)V method_21594 addColorStates - m (Lnet/minecraft/class_322;[Lnet/minecraft/class_2248;)V method_1690 register - m (Lnet/minecraft/class_2248;)Ljava/util/Set; method_21592 getColorProperties - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I method_1685 func_228058_e_ - f Lnet/minecraft/class_2361; field_1995 colors - f Ljava/util/Map; field_20271 colorStates -c net/minecraft/class_322 net/minecraft/client/renderer/color/IBlockColor - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;I)I getColor getColor -c net/minecraft/class_4700 net/minecraft/client/renderer/color/ColorCache - m ()V method_23768 invalidateAll - m (II)[I method_23772 getChunkCache - m (Lnet/minecraft/class_2338;Ljava/util/function/IntSupplier;)I method_23770 getColor - m ()Lnet/minecraft/class_4700$class_4701; method_23771 func_228072_b_ - m (II)V method_23769 invalidateChunk - f Ljava/util/concurrent/locks/ReentrantReadWriteLock; field_21521 lock - f Ljava/lang/ThreadLocal; field_21519 threadCacheEntry - f Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; field_21520 cache -c net/minecraft/class_4700$class_4701 net/minecraft/client/renderer/color/ColorCache$Entry - f [I field_21524 colorCache - f I field_21522 chunkX - f I field_21523 chunkZ -c net/minecraft/class_4700$1 net/minecraft/client/renderer/color/ColorCache$1 -c net/minecraft/class_325 net/minecraft/client/renderer/color/ItemColors - m (Lnet/minecraft/class_1799;I)I method_1703 func_210242_c - m (Lnet/minecraft/class_324;Lnet/minecraft/class_1799;I)I method_1702 func_210235_a - m (Lnet/minecraft/class_1799;I)I method_1707 func_210239_g - m (Lnet/minecraft/class_1826;Lnet/minecraft/class_1799;I)I method_1699 func_198141_a - m (Lnet/minecraft/class_1799;I)I method_1709 func_210237_b - m (Lnet/minecraft/class_1799;I)I method_1701 func_210236_f - m (Lnet/minecraft/class_326;[Lnet/minecraft/class_1935;)V method_1708 register - m (Lnet/minecraft/class_324;)Lnet/minecraft/class_325; method_1706 init - m (Lnet/minecraft/class_1799;I)I method_1704 getColor - m (Lnet/minecraft/class_1799;I)I method_1705 func_210238_d - m (Lnet/minecraft/class_1799;I)I method_1700 func_210241_e - f Lnet/minecraft/class_2361; field_1996 colors -c net/minecraft/class_326 net/minecraft/client/renderer/color/IItemColor - m (Lnet/minecraft/class_1799;I)I getColor getColor -c net/minecraft/class_327 net/minecraft/client/gui/FontRenderer - m (Lnet/minecraft/class_5481;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)F method_27530 func_238426_c_ - m (Lnet/minecraft/class_5481;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)I method_1723 func_238424_b_ - m (Ljava/lang/String;FFILnet/minecraft/class_1159;ZZ)I method_27520 renderString - m (Lnet/minecraft/class_5481;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)I method_22942 func_238416_a_ - m (Lnet/minecraft/class_5348;)I method_27525 getStringPropertyWidth - m (ILnet/minecraft/class_2583;)F method_27516 func_238404_a_ - m (Lnet/minecraft/class_5481;)I method_30880 func_243245_a - m (I)I method_27515 fixAlpha - m (Lnet/minecraft/class_5348;I)Lnet/minecraft/class_5348; method_1714 func_238417_a_ - m (Ljava/lang/String;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)F method_1724 renderStringAtPos - m (Ljava/lang/String;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZIIZ)I method_27522 func_238411_a_ - m (Ljava/lang/String;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)I method_27521 renderString - m (Ljava/lang/String;IZ)Ljava/lang/String; method_27524 func_238413_a_ - m (Lnet/minecraft/class_5348;I)Ljava/util/List; method_1728 trimStringToWidth - m ()Z method_1726 getBidiFlag - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;FFI)I method_30881 func_243246_a - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_5481;FFI)I method_27517 func_238407_a_ - m (Ljava/lang/String;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZIIZ)I method_27529 func_238423_b_ - m (Ljava/lang/String;)I method_1727 getStringWidth - m (Lnet/minecraft/class_327;Lnet/minecraft/class_382;ZZFFFLnet/minecraft/class_1159;Lnet/minecraft/class_4588;FFFFI)V method_27518 func_238408_a_ - m (Lnet/minecraft/class_327;Lnet/minecraft/class_2960;)Lnet/minecraft/class_377; method_27519 func_238409_a_ - m (Lnet/minecraft/class_4587;Ljava/lang/String;FFIZ)I method_29342 func_238406_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;FFI)I method_30883 func_243248_b - m (Ljava/lang/String;I)Ljava/lang/String; method_27523 func_238412_a_ - m (Lnet/minecraft/class_4587;Ljava/lang/String;FFI)I method_1729 drawString - m ()Lnet/minecraft/class_5225; method_27527 getCharacterManager - m (Lnet/minecraft/class_4587;Ljava/lang/String;FFI)I method_1720 drawStringWithShadow - m (Lnet/minecraft/class_5481;FFILnet/minecraft/class_1159;Z)I method_22941 func_238415_a_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_377; method_27526 getFont - m (Lnet/minecraft/class_382;ZZFFFLnet/minecraft/class_1159;Lnet/minecraft/class_4588;FFFFI)V method_1710 drawGlyph - m (Lnet/minecraft/class_5348;IIII)V method_1712 func_238418_a_ - m (Lnet/minecraft/class_2561;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)I method_30882 func_243247_a - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_5481;FFI)I method_27528 func_238422_b_ - m (Ljava/lang/String;I)I method_1713 getWordWrappedHeight - m (Ljava/lang/String;)Ljava/lang/String; method_1721 bidiReorder - f Lnet/minecraft/class_1160; field_24237 FONT_OFFSET - f I field_2000 FONT_HEIGHT - f Ljava/util/function/Function; field_1997 font - f Ljava/util/Random; field_2001 random - f Lnet/minecraft/class_5225; field_24238 characterManager -c net/minecraft/class_327$class_5232 net/minecraft/client/gui/FontRenderer$CharacterRenderer - m (IF)F method_27531 func_238441_a_ - m (Lnet/minecraft/class_382$class_328;)V method_27532 func_238442_a_ - f Z field_24241 field_238429_c_ - f Lnet/minecraft/class_1159; field_24247 field_238435_i_ - f F field_24246 field_238434_h_ - f Lnet/minecraft/class_327; field_24240 field_238428_b_ - f F field_24250 field_238438_l_ - f I field_24249 field_238437_k_ - f Lnet/minecraft/class_4597; field_24239 field_238427_a_ - f F field_24242 field_238430_d_ - f F field_24251 field_238439_m_ - f Ljava/util/List; field_24252 field_238440_n_ - f F field_24245 field_238433_g_ - f F field_24243 field_238431_e_ - f Z field_24248 field_238436_j_ - f F field_24244 field_238432_f_ -c net/minecraft/class_332 net/minecraft/client/gui/AbstractGui - m (Lnet/minecraft/class_4587;IIIIII)V method_25302 blit - m (Lnet/minecraft/class_4587;IIIIFFIIII)V method_25293 blit - m ()I method_25305 getBlitOffset - m (Lnet/minecraft/class_4587;IIIIII)V method_25296 fillGradient - m (Lnet/minecraft/class_4587;IIII)V method_25301 vLine - m (Lnet/minecraft/class_4587;IIII)V method_25292 hLine - m (Lnet/minecraft/class_4587;IIIII)V method_25294 fill - m (Lnet/minecraft/class_4587;IIFFIIII)V method_25290 blit - m (IILjava/util/function/BiConsumer;)V method_29343 blitBlackOutline - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_327;Ljava/lang/String;III)V method_25300 drawCenteredString - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_327;Ljava/lang/String;III)V method_25303 drawString - m (Lnet/minecraft/class_4587;IIIIIIIFFII)V method_25297 innerBlit - m (Lnet/minecraft/class_1159;IIIII)V method_25299 fill - m (I)V method_25304 setBlitOffset - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_327;Lnet/minecraft/class_2561;III)V method_27535 drawString - m (Lnet/minecraft/class_4587;IIIFFIIII)V method_25291 blit - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_327;Lnet/minecraft/class_2561;III)V method_27534 drawCenteredString - m (Lnet/minecraft/class_1159;Lnet/minecraft/class_287;IIIIIII)V method_27533 fillGradient - m (Lnet/minecraft/class_4587;IIIIILnet/minecraft/class_1058;)V method_25298 blit - m (Lnet/minecraft/class_1159;IIIIIFFFF)V method_25295 innerBlit - f Lnet/minecraft/class_2960; field_22737 GUI_ICONS_LOCATION - f Lnet/minecraft/class_2960; field_22736 STATS_ICON_LOCATION - f Lnet/minecraft/class_2960; field_22735 BACKGROUND_LOCATION - f I field_22734 blitOffset -c net/minecraft/class_329 net/minecraft/client/gui/IngameGui - m (Lnet/minecraft/class_2561;)V method_1732 func_238451_a_ - m ()Lnet/minecraft/class_365; method_1739 getSpectatorGui - m (Lnet/minecraft/class_4587;I)V method_1752 renderHorseJumpBar - m (Lnet/minecraft/class_1297;)V method_1731 updateVignetteBrightness - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_266;)V method_1757 func_238447_a_ - m ()V method_1761 renderPumpkinOverlay - m (Lnet/minecraft/class_239;)Z method_17534 isTargetNamedMenuProvider - m (F)V method_1746 renderPortal - m ()Lnet/minecraft/class_355; method_1750 getTabList - m ()Lnet/minecraft/class_1309; method_1734 getMountEntity - m ()Lnet/minecraft/class_1657; method_1737 getRenderViewPlayer - m ()V method_1742 setDefaultTitlesTimes - m (Lnet/minecraft/class_4587;)V method_1741 func_238458_f_ - m (IIFLnet/minecraft/class_1657;Lnet/minecraft/class_1799;)V method_1762 renderHotbarItem - m (Lnet/minecraft/class_1309;)I method_1744 getRenderMountHealth - m ()Lnet/minecraft/class_337; method_1740 getBossOverlay - m (Lnet/minecraft/class_4587;)V method_1736 func_238456_d_ - m (Lnet/minecraft/class_4587;)V method_1749 func_238453_b_ - m (Lnet/minecraft/class_2556;Lnet/minecraft/class_2561;Ljava/util/UUID;)V method_1755 func_238450_a_ - m ()V method_1745 reset - m (Lnet/minecraft/class_2561;Z)V method_1758 setOverlayMessage - m (Lnet/minecraft/class_4587;F)V method_1753 renderIngameGui - m ()V method_1747 resetPlayersOverlayFooterHeader - m (Lnet/minecraft/class_4587;I)V method_1754 func_238454_b_ - m (Lnet/minecraft/class_1297;)V method_1735 renderVignette - m (I)I method_1733 getVisibleMountHealthRows - m (FLnet/minecraft/class_4587;)V method_1759 renderHotbar - m ()Lnet/minecraft/class_327; method_1756 getFontRenderer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_327;III)V method_19346 func_238448_a_ - m ()Lnet/minecraft/class_338; method_1743 getChatGUI - m ()V method_1748 tick - m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;III)V method_1763 func_238452_a_ - m ()I method_1738 getTicks - m (Lnet/minecraft/class_4587;)V method_1760 func_238457_e_ - m (Lnet/minecraft/class_4587;)V method_1766 func_238455_c_ - m (Lnet/minecraft/class_1058;FLnet/minecraft/class_4587;II)V method_18620 func_238449_a_ - m (Lnet/minecraft/class_4587;)V method_1765 renderPotionIcons - m (Lnet/minecraft/class_267;)Z method_1751 func_212911_a - f Lnet/minecraft/class_2960; field_2028 WIDGETS_TEX_PATH - f J field_2012 lastSystemTime - f I field_2011 scaledWidth - f Lnet/minecraft/class_337; field_2030 overlayBoss - f F field_2013 prevVignetteBrightness - f Lnet/minecraft/class_2561; field_2016 displayedTitle - f Z field_2038 animateOverlayMessageColor - f Lnet/minecraft/class_359; field_2027 overlaySubtitle - f I field_2023 titlesTimer - f Lnet/minecraft/class_365; field_2025 spectatorGui - f I field_2017 titleDisplayTime - f Lnet/minecraft/class_2561; field_2018 overlayMessage - f I field_2014 playerHealth - f Lnet/minecraft/class_310; field_2035 mc - f J field_2032 healthUpdateCounter - f I field_2040 remainingHighlightTicks - f Lnet/minecraft/class_355; field_2015 overlayPlayerList - f Lnet/minecraft/class_2960; field_2019 PUMPKIN_BLUR_TEX_PATH - f Lnet/minecraft/class_2960; field_2020 VIGNETTE_TEX_PATH - f I field_2029 scaledHeight - f Lnet/minecraft/class_1799; field_2031 highlightingItemStack - f Ljava/util/Random; field_2034 rand - f Lnet/minecraft/class_340; field_2026 overlayDebug - f Lnet/minecraft/class_2561; field_2039 displayedSubTitle - f Lnet/minecraft/class_2561; field_26527 field_243249_e - f Lnet/minecraft/class_918; field_2024 itemRenderer - f I field_2042 ticks - f I field_2037 titleFadeIn - f Lnet/minecraft/class_338; field_2021 persistantChatGUI - f I field_2033 lastPlayerHealth - f I field_2041 overlayMessageTime - f Ljava/util/Map; field_2022 chatListeners - f I field_2036 titleFadeOut -c net/minecraft/class_334 net/minecraft/client/gui/chat/IChatListener - m (Lnet/minecraft/class_2556;Lnet/minecraft/class_2561;Ljava/util/UUID;)V method_1794 say -c net/minecraft/class_330 net/minecraft/client/gui/MapItemRenderer - m (Lnet/minecraft/class_330;)Lnet/minecraft/class_1060; method_1767 access$400 - m ()Lnet/minecraft/class_1921; method_1770 func_228087_b_ - m (Lnet/minecraft/class_330$class_331;)Lnet/minecraft/class_22; method_1772 getData - m ()V close close - m (Ljava/lang/String;)Lnet/minecraft/class_330$class_331; method_1768 getMapInstanceIfExists - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_22;ZI)V method_1773 renderMap - m ()V method_1771 clearLoadedMaps - m (Lnet/minecraft/class_22;)Lnet/minecraft/class_330$class_331; method_1774 getMapRendererInstance - m (Lnet/minecraft/class_22;)V method_1769 updateMapTexture - f Lnet/minecraft/class_1060; field_2043 textureManager - f Lnet/minecraft/class_2960; field_2044 TEXTURE_MAP_ICONS - f Ljava/util/Map; field_2045 loadedMaps - f Lnet/minecraft/class_1921; field_21688 field_228085_d_ -c net/minecraft/class_330$1 net/minecraft/client/gui/MapItemRenderer$1 -c net/minecraft/class_330$class_331 net/minecraft/client/gui/MapItemRenderer$Instance - m (Lnet/minecraft/class_330$class_331;)V method_1778 access$000 - m (Lnet/minecraft/class_330$class_331;)Lnet/minecraft/class_22; method_1779 access$300 - m ()V method_1776 updateMapTexture - m ()V close close - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ZI)V method_1777 func_228089_a_ - m (Lnet/minecraft/class_330$class_331;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ZI)V method_1775 func_228090_a_ - f Lnet/minecraft/class_1043; field_2048 mapTexture - f Lnet/minecraft/class_330; field_2047 field_148244_a - f Lnet/minecraft/class_22; field_2046 mapData - f Lnet/minecraft/class_1921; field_21689 field_228088_d_ -c net/minecraft/class_336 net/minecraft/client/gui/chat/OverlayChatListener - f Lnet/minecraft/class_310; field_2057 mc -c net/minecraft/class_333 net/minecraft/client/gui/chat/NarratorChatListener - m ()V method_20371 close - m ()Z method_1791 isActive - m ()Lnet/minecraft/class_4065; method_20602 getNarratorStatus - m ()V method_1793 clear - m (Lnet/minecraft/class_4065;)V method_1792 announceMode - m (ZLjava/lang/String;)V method_18621 say - m (Ljava/lang/String;)V method_19788 say - f Lcom/mojang/text2speech/Narrator; field_2055 narrator - f Lorg/apache/logging/log4j/Logger; field_18210 LOGGER - f Lnet/minecraft/class_2561; field_18967 EMPTY - f Lnet/minecraft/class_333; field_2054 INSTANCE -c net/minecraft/class_335 net/minecraft/client/gui/chat/NormalChatListener - f Lnet/minecraft/class_310; field_2056 mc -c net/minecraft/class_4264 net/minecraft/client/gui/widget/button/AbstractButton - m ()V method_25306 onPress -c net/minecraft/class_350 net/minecraft/client/gui/widget/list/AbstractList - m (DDI)V method_25318 updateScrollingState - m ()D method_25341 getScrollAmount - m (IIII)V method_25323 updateSize - m ()Lnet/minecraft/class_350$class_351; method_25334 getSelected - m (Lnet/minecraft/class_4587;)V method_25325 renderBackground - m (ZI)V method_25315 setRenderHeader - m (Lnet/minecraft/class_4587;IIIIF)V method_25311 renderList - m ()V method_25339 clearEntries - m (I)I method_25319 getRowBottom - m (II)V method_25310 clickedHeader - m ()V method_30015 func_241574_n_ - m (Lnet/minecraft/class_350$class_351;)I method_25321 addEntry - m (D)V method_25307 setScrollAmount - m (Lnet/minecraft/class_350$class_351;)Z method_25330 removeEntry - m (I)Lnet/minecraft/class_350$class_351; method_25326 getEntry - m (Lnet/minecraft/class_4587;IILnet/minecraft/class_289;)V method_25312 renderHeader - m ()I method_25317 getMaxPosition - m (Lnet/minecraft/class_350$class_351;)V method_25324 centerScrollOn - m (I)V method_25309 scroll - m ()I method_25329 getScrollbarPosition - m (Lnet/minecraft/class_350$class_5403;)V method_25335 moveSelection - m (I)Lnet/minecraft/class_350$class_351; method_25338 remove - m (Lnet/minecraft/class_350$class_351;)Z method_30014 func_241573_g_ - m (I)V method_25333 setLeftPos - m ()I method_25340 getItemCount - m ()Lnet/minecraft/class_350$class_351; method_25336 getListener - m (Ljava/util/Collection;)V method_25314 replaceEntries - m ()I method_25342 getRowLeft - m (Lnet/minecraft/class_350$class_351;)V method_25313 setSelected - m (Z)V method_29344 setRenderSelection - m (Lnet/minecraft/class_350;Lnet/minecraft/class_350$class_351;)V method_29620 func_238479_a_ - m (Lnet/minecraft/class_350$class_351;)V method_29621 func_238480_f_ - m (DD)Lnet/minecraft/class_350$class_351; method_25308 getEntryAtPosition - m ()I method_25322 getRowWidth - m (Lnet/minecraft/class_350$class_351;)V method_25328 ensureVisible - m ()I method_25331 getMaxScroll - m (Lnet/minecraft/class_350$class_5403;Ljava/util/function/Predicate;)V method_30013 func_241572_a_ - m (I)I method_25337 getRowTop - m (I)Z method_25332 isSelectedItem - m (Lnet/minecraft/class_4587;II)V method_25320 renderDecorations - m ()Z method_25316 isFocused - f I field_22748 headerHeight - f Ljava/util/List; field_22739 children - f Lnet/minecraft/class_350$class_351; field_22751 selected - f Z field_22750 scrolling - f Z field_22746 renderSelection - f I field_22742 width - f Lnet/minecraft/class_310; field_22740 minecraft - f I field_19086 y1 - f I field_19088 x0 - f Z field_22744 centerListVertically - f Z field_22747 renderHeader - f I field_22743 height - f I field_22741 itemHeight - f I field_19085 y0 - f D field_22749 scrollAmount - f I field_19087 x1 -c net/minecraft/class_350$1 net/minecraft/client/gui/widget/list/AbstractList$1 -c net/minecraft/class_350$class_352 net/minecraft/client/gui/widget/list/AbstractList$SimpleArrayList - m (I)Ljava/lang/Object; remove remove - m (ILnet/minecraft/class_350$class_351;)V method_1910 add - m (ILjava/lang/Object;)V add add - m ()I size size - m (I)Ljava/lang/Object; get get - m (I)Lnet/minecraft/class_350$class_351; method_1912 get - m (I)Lnet/minecraft/class_350$class_351; method_1911 remove - m (ILnet/minecraft/class_350$class_351;)Lnet/minecraft/class_350$class_351; method_1909 set - m (ILjava/lang/Object;)Ljava/lang/Object; set set - f Ljava/util/List; field_2146 field_216871_b - f Lnet/minecraft/class_350; field_2145 field_216870_a -c net/minecraft/class_350$class_5403 net/minecraft/client/gui/widget/list/AbstractList$Ordering - m ()[Lnet/minecraft/class_350$class_5403; values values - m (Ljava/lang/String;)Lnet/minecraft/class_350$class_5403; valueOf valueOf - f [Lnet/minecraft/class_350$class_5403; field_25663 $VALUES - f Lnet/minecraft/class_350$class_5403; field_25661 UP - f Lnet/minecraft/class_350$class_5403; field_25662 DOWN -c net/minecraft/class_350$class_351 net/minecraft/client/gui/widget/list/AbstractList$AbstractListEntry - m (Lnet/minecraft/class_4587;IIIIIIIZF)V method_25343 render - m (Lnet/minecraft/class_350$class_351;Lnet/minecraft/class_350;)Lnet/minecraft/class_350; method_29622 func_238481_a_ - f Lnet/minecraft/class_350; field_22752 list -c net/minecraft/class_4892 net/minecraft/client/gui/widget/GameSettingsSlider - f Lnet/minecraft/class_315; field_22738 settings -c net/minecraft/class_339 net/minecraft/client/gui/widget/Widget - m ()I method_25364 getHeightRealms - m (DD)Z method_25361 clicked - m (I)V method_25362 queueNarration - m ()I method_25368 getWidth - m (Lnet/minecraft/class_1144;)V method_25354 playDownSound - m (DD)V method_25348 onClick - m (Lnet/minecraft/class_4587;IIF)V method_25359 renderButton - m ()V method_25366 narrate - m (DDDD)V method_25349 onDrag - m ()Lnet/minecraft/class_2561; method_25369 getMessage - m ()Z method_25367 isHovered - m (Lnet/minecraft/class_2561;)V method_25355 setMessage - m ()Z method_25370 isFocused - m (Z)I method_25356 getYImage - m (Lnet/minecraft/class_4587;II)V method_25352 renderToolTip - m (Z)V method_25365 setFocused - m ()Lnet/minecraft/class_5250; method_25360 getNarrationMessage - m (DD)V method_25357 onRelease - m (Z)V method_25363 onFocusedChanged - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_310;II)V method_25353 renderBg - m (F)V method_25350 setAlpha - m (I)Z method_25351 isValidClickButton - m (I)V method_25358 setWidth - f I field_22758 width - f Z field_22756 focused - f Z field_22755 wasHovered - f I field_22760 x - f I field_22759 height - f I field_22761 y - f F field_22765 alpha - f Z field_22763 active - f Z field_22762 isHovered - f Lnet/minecraft/class_2561; field_22754 message - f J field_22766 nextNarration - f Z field_22764 visible - f Lnet/minecraft/class_2960; field_22757 WIDGETS_LOCATION -c net/minecraft/class_357 net/minecraft/client/gui/widget/AbstractSlider - m (D)V method_25347 setSliderValue - m (D)V method_25345 changeSliderValue - m ()V method_25346 func_230979_b_ - m ()V method_25344 func_230972_a_ - f D field_22753 sliderValue -c net/minecraft/class_4185 net/minecraft/client/gui/widget/button/Button - m (Lnet/minecraft/class_4185;Lnet/minecraft/class_4587;II)V method_29045 func_238488_a_ - f Lnet/minecraft/class_4185$class_5316; field_25035 field_238486_s_ - f Lnet/minecraft/class_4185$class_5316; field_25036 onTooltip - f Lnet/minecraft/class_4185$class_4241; field_22767 onPress -c net/minecraft/class_4185$class_5316 net/minecraft/client/gui/widget/button/Button$ITooltip - m (Lnet/minecraft/class_4185;Lnet/minecraft/class_4587;II)V onTooltip onTooltip -c net/minecraft/class_4185$class_4241 net/minecraft/client/gui/widget/button/Button$IPressable - m (Lnet/minecraft/class_4185;)V onPress onPress -c net/minecraft/class_337 net/minecraft/client/gui/overlay/BossOverlayGui - m (Lnet/minecraft/class_4587;)V method_1796 func_238484_a_ - m (Lnet/minecraft/class_2629;)V method_1795 read - m ()Z method_1800 shouldCreateFog - m ()V method_1801 clearBossInfos - m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1259;)V method_1799 func_238485_a_ - m ()Z method_1797 shouldDarkenSky - m ()Z method_1798 shouldPlayEndBossMusic - f Lnet/minecraft/class_310; field_2058 client - f Ljava/util/Map; field_2060 mapBossInfos - f Lnet/minecraft/class_2960; field_2059 GUI_BARS_TEXTURES -c net/minecraft/class_4286 net/minecraft/client/gui/widget/button/CheckboxButton - m ()Z method_20372 isChecked - f Z field_24253 field_238499_c_ - f Z field_19230 checked - f Lnet/minecraft/class_2960; field_19231 TEXTURE -c net/minecraft/class_338 net/minecraft/client/gui/NewChatGui - m (D)V method_1802 addScrollPos - m (I)D method_19348 getLineBrightness - m (Lnet/minecraft/class_2561;I)V method_1804 printChatMessageWithOptionalDeletion - m (Z)V method_1808 clearChatMessages - m (ILnet/minecraft/class_303;)Z method_30884 func_243250_a - m (ILnet/minecraft/class_303;)Z method_30885 func_243251_b - m ()I method_1810 getChatHeight - m ()D method_1814 getScale - m ()I method_1811 getChatWidth - m (I)V method_1807 deleteChatLine - m ()V method_1820 resetScroll - m ()I method_1813 getLineCount - m (Lnet/minecraft/class_2561;IIZ)V method_1815 func_238493_a_ - m (DD)Lnet/minecraft/class_2583; method_1816 func_238494_b_ - m ()V method_1817 refreshChat - m ()J method_27148 func_238497_j_ - m (Ljava/lang/String;)V method_1803 addToSentMessages - m (DD)Z method_27146 func_238491_a_ - m ()Ljava/util/List; method_1809 getSentMessages - m (Lnet/minecraft/class_4587;I)V method_1805 func_238492_a_ - m (D)I method_1818 calculateChatboxHeight - m ()V method_27149 func_238498_k_ - m (Lnet/minecraft/class_2561;)V method_1812 printChatMessage - m ()Z method_1819 getChatOpen - m (D)I method_1806 calculateChatboxWidth - m (Lnet/minecraft/class_2561;)V method_27147 func_238495_b_ - m ()Z method_23677 func_238496_i_ - f Lorg/apache/logging/log4j/Logger; field_2065 LOGGER - f Lnet/minecraft/class_310; field_2062 mc - f I field_2066 scrollPos - f J field_23935 field_238490_l_ - f Z field_2067 isScrolled - f Ljava/util/Deque; field_23934 field_238489_i_ - f Ljava/util/List; field_2064 drawnChatLines - f Ljava/util/List; field_2061 chatLines - f Ljava/util/List; field_2063 sentMessages -c net/minecraft/class_341 net/minecraft/client/gui/RenderComponentsUtil - m (Ljava/lang/String;)Ljava/lang/String; method_1849 func_238504_a_ - m (Lnet/minecraft/class_5348;ILnet/minecraft/class_327;)Ljava/util/List; method_1850 func_238505_a_ - m (Lnet/minecraft/class_5222;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_27536 func_238503_a_ - m (Ljava/util/List;Lnet/minecraft/class_5348;Ljava/lang/Boolean;)V method_30886 func_243256_a - f Lnet/minecraft/class_5481; field_25263 field_238502_a_ -c net/minecraft/class_4717 net/minecraft/client/gui/CommandSuggestionHelper - m (DDI)Z method_23922 onClick - m (Lnet/minecraft/class_4717;)Lnet/minecraft/class_342; method_23938 func_228130_c_ - m (Ljava/lang/String;I)Lnet/minecraft/class_5481; method_23931 getParsedSuggestion - m (Lnet/minecraft/class_4717;)I method_23940 func_228132_d_ - m (Lcom/mojang/brigadier/ParseResults;Ljava/lang/String;I)Lnet/minecraft/class_5481; method_23925 getFinalSuggestion - m (Z)V method_23933 shouldAutoSuggest - m (Lnet/minecraft/class_4717;)I method_23935 func_228126_b_ - m (Lnet/minecraft/class_4717;)I method_23944 func_228136_h_ - m ()Ljava/lang/String; method_23958 getSuggestionMessage - m (Lnet/minecraft/class_4717;)Lnet/minecraft/class_437; method_23942 func_228134_f_ - m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_23932 func_228123_a_ - m (III)Z method_23924 onKeyPressed - m ()V method_23939 func_228131_d_ - m (Lnet/minecraft/class_4587;II)V method_23923 drawSuggestionList - m (Lnet/minecraft/class_4717;)Lnet/minecraft/class_327; method_23941 func_228133_e_ - m (Lcom/mojang/brigadier/exceptions/CommandSyntaxException;)Lnet/minecraft/class_5481; method_30505 parseException - m (Lnet/minecraft/class_4717;Lnet/minecraft/class_4717$class_464;)Lnet/minecraft/class_4717$class_464; method_23927 func_228118_a_ - m (Z)V method_23920 updateSuggestions - m (Lnet/minecraft/class_124;)V method_23929 applyFormattingToCommand - m (Lnet/minecraft/class_4717;)Z method_23926 func_228117_a_ - m (D)Z method_23921 onScroll - m (Lnet/minecraft/class_4717;)Lnet/minecraft/class_310; method_23943 func_228135_g_ - m (Ljava/lang/String;)I method_23930 getLastWhitespace - m (Lcom/mojang/brigadier/suggestion/Suggestions;)Ljava/util/List; method_30104 getSuggestions - m (Lnet/minecraft/class_4717;Z)Z method_23928 func_228119_a_ - m ()V method_23934 init - m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_23936 getMatchedSuggestionText - m ()V method_23937 recompileSuggestions - f Ljava/util/List; field_25887 COMMAND_COLOR_STYLES - f Z field_21601 commandsOnly - f Lnet/minecraft/class_437; field_21598 screen - f Z field_21605 isChat - f I field_21609 width - f Lnet/minecraft/class_2583; field_25885 EMPTY_ERROR_STYLE - f Lnet/minecraft/class_327; field_21600 font - f Ljava/util/List; field_21607 exceptionList - f Lnet/minecraft/class_342; field_21599 inputField - f Z field_21614 isApplyingSuggestion - f I field_21603 minAmountRendered - f Ljava/util/regex/Pattern; field_21596 WHITESPACE_PATTERN - f Lnet/minecraft/class_310; field_21597 mc - f Lnet/minecraft/class_4717$class_464; field_21612 suggestions - f I field_21608 x - f Z field_21602 hasCursor - f I field_21606 color - f Ljava/util/concurrent/CompletableFuture; field_21611 suggestionsFuture - f Z field_21613 autoSuggest - f Lcom/mojang/brigadier/ParseResults; field_21610 parseResults - f I field_21604 maxAmountRendered - f Lnet/minecraft/class_2583; field_25886 EMPTY_PASS_STYLE -c net/minecraft/class_4717$class_464 net/minecraft/client/gui/CommandSuggestionHelper$Suggestions - m (I)V method_2374 selectSuggestion - m (I)V method_2371 changeSelection - m (III)Z method_2377 onKeyPressed - m (III)Z method_2372 onClick - m (D)Z method_2370 onScroll - m (Lnet/minecraft/class_4587;II)V method_2373 drawSuggestions - m ()V method_2376 clearSuggestions - m ()V method_2375 applySuggestionToInput - m ()Ljava/lang/String; method_23960 getCurrentSuggestionMessage - m (Lnet/minecraft/class_4717$class_464;)Ljava/lang/String; method_23959 func_228151_a_ - f I field_2766 selectedIndex - f I field_2769 lowestDisplayedSuggestionIndex - f Z field_2765 changeSelectionOnNextTabInput - f Lnet/minecraft/class_241; field_2767 lastMousePosition - f Ljava/lang/String; field_2768 originalInputText - f Lnet/minecraft/class_4717; field_21615 field_228137_a_ - f I field_21630 lastObtainedSuggestionMessageIndex - f Ljava/util/List; field_25709 suggestions - f Lnet/minecraft/class_768; field_2771 suggestionRenderBox -c net/minecraft/class_4717$1 net/minecraft/client/gui/CommandSuggestionHelper$1 -c net/minecraft/class_340 net/minecraft/client/gui/overlay/DebugOverlayGui - m (Lnet/minecraft/class_1132;)Ljava/util/Optional; method_1841 func_212917_a_ - m ()Lnet/minecraft/class_3218; method_20603 func_238515_d_ - m (Ljava/util/Map$Entry;)Ljava/lang/String; method_1845 getPropertyString - m ()V method_1842 resetChunk - m ()Ljava/lang/String; method_27871 getServerChunkStats - m ()Lnet/minecraft/class_2818; method_1834 getServerChunk - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_3517;IIZ)V method_15870 func_238509_a_ - m ()Lnet/minecraft/class_2818; method_1836 getChunk - m (Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_2818; method_20541 func_222802_a_ - m (Ljava/util/EnumMap;)V method_20455 func_212918_a - m ()Ljava/util/List; method_1839 getDebugInfoRight - m (Lnet/minecraft/class_4587;)V method_1846 render - m ()Ljava/util/List; method_1835 getDebugInfoLeft - m (Lnet/minecraft/class_4587;)V method_1847 renderDebugInfoLeft - m (Lnet/minecraft/class_4587;)V method_1848 renderDebugInfoRight - m (Lit/unimi/dsi/fastutil/objects/Object2IntMap;Lnet/minecraft/class_1311;)Ljava/lang/String; method_27870 func_238511_a_ - m ()Lnet/minecraft/class_1937; method_1840 getWorld - m (J)J method_1838 bytesToMb - m (IIII)I method_1833 getFrameColor - m (Lnet/minecraft/class_3193$class_3724;)Lnet/minecraft/class_2818; method_20542 func_222801_a_ - m (Lnet/minecraft/class_2791;)Lnet/minecraft/class_2818; method_20540 func_222803_a_ - m (IIF)I method_1843 blendColors - f Lnet/minecraft/class_310; field_2079 mc - f Ljava/util/concurrent/CompletableFuture; field_2080 futureChunk - f Lnet/minecraft/class_2818; field_2084 chunk - f Lnet/minecraft/class_239; field_2083 rayTraceFluid - f Lnet/minecraft/class_239; field_2082 rayTraceBlock - f Ljava/util/Map; field_19274 HEIGHTMAP_NAMES - f Lnet/minecraft/class_327; field_2081 fontRenderer - f Lnet/minecraft/class_1923; field_2085 chunkPos -c net/minecraft/class_340$1 net/minecraft/client/gui/overlay/DebugOverlayGui$1 - f [I field_2086 field_178907_a -c net/minecraft/class_4265 net/minecraft/client/gui/widget/list/AbstractOptionList -c net/minecraft/class_4265$class_4266 net/minecraft/client/gui/widget/list/AbstractOptionList$Entry - f Lnet/minecraft/class_364; field_19077 field_214380_a - f Z field_19078 field_214381_b -c net/minecraft/class_344 net/minecraft/client/gui/widget/button/ImageButton - m (II)V method_1893 setPosition - f I field_2126 xTexStart - f I field_2125 yTexStart - f I field_19079 yDiffText - f I field_2124 textureWidth - f Lnet/minecraft/class_2960; field_2127 resourceLocation - f I field_19080 textureHeight -c net/minecraft/class_342 net/minecraft/client/gui/widget/TextFieldWidget - m (Z)V method_1858 setEnableBackgroundDrawing - m ()Ljava/lang/String; method_1882 getText - m (I)V method_1878 deleteFromCursor - m ()Ljava/lang/String; method_1866 getSelectedText - m ()Z method_20316 isEnabled - m (Z)V method_1856 setCanLoseFocus - m (I)I method_1889 func_195611_j - m (I)V method_1880 setMaxStringLength - m (IIZ)I method_1864 getNthWordFromPosWS - m (Ljava/lang/String;)V method_1887 setSuggestion - m (II)I method_1869 getNthWordFromPos - m (I)V method_1860 setDisabledTextColour - m (I)V method_1883 setCursorPosition - m ()I method_1861 getMaxStringLength - m (Ljava/util/function/Consumer;)V method_1863 setResponder - m (I)V method_16873 delete - m ()Z method_20315 canWrite - m (Ljava/lang/String;)V method_1852 setText - m (Ljava/util/function/BiFunction;)V method_1854 setTextFormatter - m ()I method_1859 getAdjustedWidth - m ()V method_1870 setCursorPositionZero - m (Z)V method_1876 setFocused2 - m ()Z method_1851 getEnableBackgroundDrawing - m ()Z method_1885 getVisible - m (Z)V method_1888 setEnabled - m (I)I method_1853 getNthWordFromCursor - m (Ljava/util/function/Predicate;)V method_1890 setValidator - m (Z)V method_1862 setVisible - m ()V method_1865 tick - m (I)V method_1877 deleteWords - m (Ljava/lang/String;)V method_1874 onTextChanged - m (I)V method_1868 setTextColor - m (Ljava/lang/String;)V method_1867 writeText - m (IIII)V method_1886 drawSelectionBox - m (I)V method_1855 moveCursorBy - m (Ljava/lang/String;Ljava/lang/Integer;)Lnet/minecraft/class_5481; method_1873 func_195610_a - m (I)V method_1875 clampCursorPosition - m (I)V method_16872 setX - m ()I method_1881 getCursorPosition - m (I)I method_27537 func_238516_r_ - m (I)V method_1884 setSelectionPos - m ()V method_1872 setCursorPositionEnd - f I field_2098 disabledColor - f Ljava/util/function/Predicate; field_2104 validator - f I field_2101 selectionEnd - f I field_2108 maxStringLength - f Z field_2094 isEnabled - f Z field_2095 enableBackgroundDrawing - f Ljava/lang/String; field_2106 suggestion - f Ljava/util/function/Consumer; field_2088 guiResponder - f I field_2103 lineScrollOffset - f Z field_17037 field_212956_h - f Ljava/lang/String; field_2092 text - f Z field_2096 canLoseFocus - f I field_2100 enabledColor - f I field_2107 cursorCounter - f Ljava/util/function/BiFunction; field_2099 textFormatter - f Lnet/minecraft/class_327; field_2105 fontRenderer - f I field_2102 cursorPosition -c net/minecraft/class_347 net/minecraft/client/gui/widget/button/LockIconButton - m (Z)V method_1895 setLocked - m ()Z method_1896 isLocked - f Z field_2131 locked -c net/minecraft/class_347$class_348 net/minecraft/client/gui/widget/button/LockIconButton$Icon - m ()I method_1897 getX - m (Ljava/lang/String;)Lnet/minecraft/class_347$class_348; valueOf valueOf - m ()I method_1898 getY - m ()[Lnet/minecraft/class_347$class_348; values values - f Lnet/minecraft/class_347$class_348; field_2132 UNLOCKED - f I field_2135 x - f Lnet/minecraft/class_347$class_348; field_2139 LOCKED_DISABLED - f Lnet/minecraft/class_347$class_348; field_2138 LOCKED_HOVER - f [Lnet/minecraft/class_347$class_348; field_2136 $VALUES - f I field_2134 y - f Lnet/minecraft/class_347$class_348; field_2137 LOCKED - f Lnet/minecraft/class_347$class_348; field_2140 UNLOCKED_DISABLED - f Lnet/minecraft/class_347$class_348; field_2133 UNLOCKED_HOVER -c net/minecraft/class_345 net/minecraft/client/gui/ClientBossInfo - m (Lnet/minecraft/class_2629;)V method_1894 updateFromPacket - f J field_2128 percentSetTime - f F field_2129 rawPercent -c net/minecraft/class_345$1 net/minecraft/client/gui/ClientBossInfo$1 - f [I field_2130 field_186733_a -c net/minecraft/class_4280 net/minecraft/client/gui/widget/list/ExtendedList - f Z field_22768 field_230698_a_ -c net/minecraft/class_4280$class_4281 net/minecraft/client/gui/widget/list/ExtendedList$AbstractListEntry -c net/minecraft/class_5489 net/minecraft/client/gui/IBidiRenderer - m (Lnet/minecraft/class_327;Lnet/minecraft/class_5348;II)Lnet/minecraft/class_5489; method_30891 func_243259_a - m (Lnet/minecraft/class_327;Lnet/minecraft/class_5481;)Lnet/minecraft/class_5489$class_5490; method_30897 func_243263_c - m ()I method_30887 func_241862_a - m (Lnet/minecraft/class_4587;IIII)I method_30896 func_241866_c - m (Lnet/minecraft/class_327;Lnet/minecraft/class_5481;)Lnet/minecraft/class_5489$class_5490; method_30894 func_243261_b - m (Lnet/minecraft/class_4587;IIII)I method_30889 func_241864_a - m (Lnet/minecraft/class_4587;IIII)I method_30893 func_241865_b - m (Lnet/minecraft/class_327;Ljava/util/List;)Lnet/minecraft/class_5489; method_30895 func_243262_b - m (Lnet/minecraft/class_4587;II)I method_30888 func_241863_a - m (Lnet/minecraft/class_327;Lnet/minecraft/class_5481;)Lnet/minecraft/class_5489$class_5490; method_30898 func_243264_d - m (Lnet/minecraft/class_327;[Lnet/minecraft/class_2561;)Lnet/minecraft/class_5489; method_30892 func_243260_a - m (Lnet/minecraft/class_327;Lnet/minecraft/class_5348;I)Lnet/minecraft/class_5489; method_30890 func_243258_a - f Lnet/minecraft/class_5489; field_26528 field_243257_a -c net/minecraft/class_5489$1 net/minecraft/client/gui/IBidiRenderer$1 -c net/minecraft/class_5489$2 net/minecraft/client/gui/IBidiRenderer$2 - f Ljava/util/List; field_26530 field_243266_c - f Lnet/minecraft/class_327; field_26529 field_243265_b -c net/minecraft/class_5489$class_5490 net/minecraft/client/gui/IBidiRenderer$Entry - m (Lnet/minecraft/class_5489$class_5490;)I method_30900 func_243270_b - m (Lnet/minecraft/class_5489$class_5490;)Lnet/minecraft/class_5481; method_30899 func_243269_a - f I field_26532 field_243268_b - f Lnet/minecraft/class_5481; field_26531 field_243267_a -c net/minecraft/class_353 net/minecraft/client/gui/widget/list/OptionsRowList - m (DD)Ljava/util/Optional; method_29624 func_238518_c_ - m (Lnet/minecraft/class_316;Lnet/minecraft/class_316;)V method_20407 addOption - m ([Lnet/minecraft/class_316;)V method_20408 addOptions - m (Lnet/minecraft/class_316;)Lnet/minecraft/class_339; method_31046 func_243271_b - m (Lnet/minecraft/class_316;)I method_20406 addOption -c net/minecraft/class_353$class_354 net/minecraft/client/gui/widget/list/OptionsRowList$Row - m (ILnet/minecraft/class_4587;IIFLnet/minecraft/class_339;)V method_18622 func_238519_a_ - m (Lnet/minecraft/class_315;ILnet/minecraft/class_316;)Lnet/minecraft/class_353$class_354; method_20409 create - m (Lnet/minecraft/class_353$class_354;)Ljava/util/List; method_29625 func_238520_a_ - m (Lnet/minecraft/class_315;ILnet/minecraft/class_316;Lnet/minecraft/class_316;)Lnet/minecraft/class_353$class_354; method_20410 create - f Ljava/util/List; field_18214 widgets -c net/minecraft/class_349 net/minecraft/client/gui/widget/button/OptionButton - m ()Lnet/minecraft/class_316; method_29623 func_238517_a_ - f Lnet/minecraft/class_316; field_18970 enumOptions -c net/minecraft/class_4040 net/minecraft/client/gui/widget/OptionSlider - f Lnet/minecraft/class_4067; field_18012 option -c net/minecraft/class_355 net/minecraft/client/gui/overlay/PlayerTabOverlayGui - m (Lnet/minecraft/class_4587;ILnet/minecraft/class_269;Lnet/minecraft/class_266;)V method_1919 func_238523_a_ - m (Lnet/minecraft/class_266;ILjava/lang/String;IILnet/minecraft/class_640;Lnet/minecraft/class_4587;)V method_1922 func_175247_a_ - m (Z)V method_1921 setVisible - m (Lnet/minecraft/class_4587;IIILnet/minecraft/class_640;)V method_1923 func_238522_a_ - m (Lnet/minecraft/class_640;Lnet/minecraft/class_5250;)Lnet/minecraft/class_2561; method_27538 func_238524_a_ - m ()V method_1920 resetFooterHeader - m (Lnet/minecraft/class_2561;)V method_1924 setFooter - m (Lnet/minecraft/class_640;)Lnet/minecraft/class_2561; method_1918 getDisplayName - m (Lnet/minecraft/class_2561;)V method_1925 setHeader - f Lcom/google/common/collect/Ordering; field_2156 ENTRY_ORDERING - f Lnet/minecraft/class_310; field_2155 mc - f J field_2152 lastTimeOpened - f Z field_2158 visible - f Lnet/minecraft/class_329; field_2157 guiIngame - f Lnet/minecraft/class_2561; field_2154 footer - f Lnet/minecraft/class_2561; field_2153 header -c net/minecraft/class_355$1 net/minecraft/client/gui/overlay/PlayerTabOverlayGui$1 -c net/minecraft/class_355$class_356 net/minecraft/client/gui/overlay/PlayerTabOverlayGui$PlayerComparator - m (Lnet/minecraft/class_640;Lnet/minecraft/class_640;)I method_1926 compare - m (Ljava/lang/Object;Ljava/lang/Object;)I compare compare -c net/minecraft/class_359 net/minecraft/client/gui/overlay/SubtitleOverlayGui - m (Lnet/minecraft/class_4587;)V method_1957 render - f Ljava/util/List; field_2183 subtitles - f Lnet/minecraft/class_310; field_2182 client - f Z field_2184 enabled -c net/minecraft/class_359$class_360 net/minecraft/client/gui/overlay/SubtitleOverlayGui$Subtitle - m ()Lnet/minecraft/class_243; method_1959 getLocation - m (Lnet/minecraft/class_243;)V method_1958 refresh - m ()Lnet/minecraft/class_2561; method_1960 func_238526_a_ - m ()J method_1961 getStartTime - f Lnet/minecraft/class_2561; field_2188 subtitle - f J field_2185 startTime - f Lnet/minecraft/class_243; field_2186 location - f Lnet/minecraft/class_359; field_2187 field_186827_a -c net/minecraft/class_361 net/minecraft/client/gui/widget/ToggleWidget - m (Z)V method_1964 setStateTriggered - m (IIIILnet/minecraft/class_2960;)V method_1962 initTextureValues - m (II)V method_1963 setPosition - m ()Z method_1965 isStateTriggered - f Z field_2194 stateTriggered - f I field_2189 yDiffTex - f I field_2192 xTexStart - f Lnet/minecraft/class_2960; field_2193 resourceLocation - f I field_2191 yTexStart - f I field_2190 xDiffTex -c net/minecraft/class_4893 net/minecraft/client/gui/screen/IScreen - m ()V method_25393 tick -c net/minecraft/class_444 net/minecraft/client/gui/widget/SoundSlider - f Lnet/minecraft/class_3419; field_2622 category -c net/minecraft/class_5499 net/minecraft/client/gui/IBidiTooltip - m ()Ljava/util/Optional; method_31047 func_241867_d -c net/minecraft/class_362 net/minecraft/client/gui/FocusableGui - f Z field_22781 isDragging - f Lnet/minecraft/class_364; field_22780 listener -c net/minecraft/class_4068 net/minecraft/client/gui/IRenderable - m (Lnet/minecraft/class_4587;IIF)V method_25394 render -c net/minecraft/class_364 net/minecraft/client/gui/IGuiEventListener - m (DD)Z method_25405 isMouseOver - m (DDD)Z method_25401 mouseScrolled - m (III)Z method_16803 keyReleased - m (DDI)Z method_25402 mouseClicked - m (DDIDD)Z method_25403 mouseDragged - m (CI)Z method_25400 charTyped - m (DDI)Z method_25406 mouseReleased - m (III)Z method_25404 keyPressed - m (DD)V method_16014 mouseMoved - m (Z)Z method_25407 changeFocus -c net/minecraft/class_4069 net/minecraft/client/gui/INestedGuiEventHandler - m ()Ljava/util/List; method_25396 getEventListeners - m ()Lnet/minecraft/class_364; method_25399 getListener - m (Lnet/minecraft/class_364;)V method_20086 setListenerDefault - m (Z)V method_25398 setDragging - m (DDILnet/minecraft/class_364;)Z method_20083 func_212931_a - m (DDDLnet/minecraft/class_364;)Z method_20082 func_212929_a - m (DD)Ljava/util/Optional; method_19355 getEventListenerForPos - m ()Z method_25397 isDragging - m (Lnet/minecraft/class_364;)V method_25395 setListener - m (Lnet/minecraft/class_364;)V method_20085 setFocusedDefault -c net/minecraft/class_365 net/minecraft/client/gui/SpectatorGui - m ()V method_1983 onMiddleClick - m (D)V method_1976 onMouseScroll - m ()Z method_1980 isMenuActive - m (Lnet/minecraft/class_4587;)V method_1979 func_238527_a_ - m (Lnet/minecraft/class_4587;FIILnet/minecraft/class_539;)V method_1975 func_238529_a_ - m (Lnet/minecraft/class_4587;IIFFLnet/minecraft/class_537;)V method_1982 func_238530_a_ - m (Lnet/minecraft/class_4587;F)V method_1978 func_238528_a_ - m ()F method_1981 getHotbarAlpha - m (I)V method_1977 onHotbarSelected - f Lnet/minecraft/class_2960; field_2197 WIDGETS - f Lnet/minecraft/class_2960; field_2199 SPECTATOR_WIDGETS - f J field_2198 lastSelectionTime - f Lnet/minecraft/class_310; field_2201 mc - f Lnet/minecraft/class_531; field_2200 menu -c net/minecraft/class_366 net/minecraft/client/gui/toasts/RecipeToast - m (Lnet/minecraft/class_374;Lnet/minecraft/class_1860;)V method_1985 addOrUpdate - m (Lnet/minecraft/class_1860;)V method_1984 addRecipe - f Lnet/minecraft/class_2561; field_26534 field_243273_d - f Lnet/minecraft/class_2561; field_26533 field_243272_c - f Ljava/util/List; field_2202 recipes - f J field_2204 firstDrawTime - f Z field_2203 hasNewOutputs -c net/minecraft/class_367 net/minecraft/client/gui/toasts/AdvancementToast - f Z field_2206 hasPlayedSound - f Lnet/minecraft/class_161; field_2205 advancement -c net/minecraft/class_368 net/minecraft/client/gui/toasts/IToast - m ()I method_29050 func_238540_d_ - m ()Ljava/lang/Object; method_1987 getType - m ()I method_29049 func_230445_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_374;J)Lnet/minecraft/class_368$class_369; method_1986 func_230444_a_ - f Ljava/lang/Object; field_2208 NO_TOKEN - f Lnet/minecraft/class_2960; field_2207 TEXTURE_TOASTS -c net/minecraft/class_368$class_369 net/minecraft/client/gui/toasts/IToast$Visibility - m (Ljava/lang/String;)Lnet/minecraft/class_368$class_369; valueOf valueOf - m ()[Lnet/minecraft/class_368$class_369; values values - m (Lnet/minecraft/class_1144;)V method_1988 playSound - f Lnet/minecraft/class_368$class_369; field_2209 HIDE - f [Lnet/minecraft/class_368$class_369; field_2212 $VALUES - f Lnet/minecraft/class_3414; field_2211 sound - f Lnet/minecraft/class_368$class_369; field_2210 SHOW -c net/minecraft/class_370 net/minecraft/client/gui/toasts/SystemToast - m (Lnet/minecraft/class_310;Ljava/lang/String;)V method_27023 func_238535_a_ - m (Lnet/minecraft/class_310;Ljava/lang/String;)V method_27025 func_238538_b_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_374;IIII)V method_29046 func_238533_a_ - m (Lnet/minecraft/class_310;Ljava/lang/String;)V method_29627 func_238539_c_ - m (Lnet/minecraft/class_310;Lnet/minecraft/class_370$class_371;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)Lnet/minecraft/class_370; method_29047 func_238534_a_ - m ()Lnet/minecraft/class_370$class_371; method_1989 getType - m (Lnet/minecraft/class_374;Lnet/minecraft/class_370$class_371;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_1990 addOrUpdate - m (Lnet/minecraft/class_2561;)Lcom/google/common/collect/ImmutableList; method_29626 func_238537_a_ - m (Lnet/minecraft/class_374;Lnet/minecraft/class_370$class_371;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_27024 func_238536_a_ - m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_1991 setDisplayedText - f Z field_2214 newDisplay - f I field_25038 field_238532_h_ - f Ljava/util/List; field_25037 field_238531_e_ - f J field_2216 firstDrawTime - f Lnet/minecraft/class_370$class_371; field_2213 type - f Lnet/minecraft/class_2561; field_2215 title -c net/minecraft/class_370$class_371 net/minecraft/client/gui/toasts/SystemToast$Type - m (Ljava/lang/String;)Lnet/minecraft/class_370$class_371; valueOf valueOf - m ()[Lnet/minecraft/class_370$class_371; values values - f Lnet/minecraft/class_370$class_371; field_2218 TUTORIAL_HINT - f Lnet/minecraft/class_370$class_371; field_23774 WORLD_ACCESS_FAILURE - f Lnet/minecraft/class_370$class_371; field_25445 PACK_COPY_FAILURE - f Lnet/minecraft/class_370$class_371; field_21809 PACK_LOAD_FAILURE - f Lnet/minecraft/class_370$class_371; field_25039 WORLD_GEN_SETTINGS_TRANSFER - f Lnet/minecraft/class_370$class_371; field_2219 NARRATOR_TOGGLE - f Lnet/minecraft/class_370$class_371; field_2220 WORLD_BACKUP - f [Lnet/minecraft/class_370$class_371; field_2221 $VALUES -c net/minecraft/class_372 net/minecraft/client/gui/toasts/TutorialToast - m (F)V method_1992 setProgress - m ()V method_1993 hide - f F field_2228 currentProgress - f F field_2229 displayedProgress - f J field_2223 lastDelta - f Z field_2222 hasProgressBar - f Lnet/minecraft/class_368$class_369; field_2227 visibility - f Lnet/minecraft/class_2561; field_2226 subtitle - f Lnet/minecraft/class_372$class_373; field_2225 icon - f Lnet/minecraft/class_2561; field_2224 title -c net/minecraft/class_372$class_373 net/minecraft/client/gui/toasts/TutorialToast$Icons - m (Ljava/lang/String;)Lnet/minecraft/class_372$class_373; valueOf valueOf - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_332;II)V method_1994 func_238543_a_ - m ()[Lnet/minecraft/class_372$class_373; values values - f [Lnet/minecraft/class_372$class_373; field_2234 $VALUES - f Lnet/minecraft/class_372$class_373; field_2230 MOVEMENT_KEYS - f Lnet/minecraft/class_372$class_373; field_2236 WOODEN_PLANKS - f I field_2232 column - f Lnet/minecraft/class_372$class_373; field_2233 RECIPE_BOOK - f Lnet/minecraft/class_372$class_373; field_2237 MOUSE - f I field_2231 row - f Lnet/minecraft/class_372$class_373; field_2235 TREE -c net/minecraft/class_374 net/minecraft/client/gui/toasts/ToastGui - m ()Lnet/minecraft/class_310; method_1995 getMinecraft - m (Ljava/lang/Class;Ljava/lang/Object;)Lnet/minecraft/class_368; method_1997 getToast - m (Lnet/minecraft/class_374;)Lnet/minecraft/class_310; method_1998 access$100 - m (Lnet/minecraft/class_368;)V method_1999 add - m ()V method_2000 clear - m (Lnet/minecraft/class_4587;)V method_1996 func_238541_a_ - f Lnet/minecraft/class_310; field_2238 mc - f [Lnet/minecraft/class_374$class_375; field_2239 visible - f Ljava/util/Deque; field_2240 toastsQueue -c net/minecraft/class_374$class_375 net/minecraft/client/gui/toasts/ToastGui$ToastInstance - m (J)F method_2003 getVisibility - m (IILnet/minecraft/class_4587;)Z method_2002 render - m ()Lnet/minecraft/class_368; method_2001 getToast - f Lnet/minecraft/class_368; field_2241 toast - f Lnet/minecraft/class_374; field_2245 field_193687_a - f J field_2243 animationTime - f Lnet/minecraft/class_368$class_369; field_2244 visibility - f J field_2242 visibleTime -c net/minecraft/class_374$1 net/minecraft/client/gui/toasts/ToastGui$1 -c net/minecraft/class_376 net/minecraft/client/gui/fonts/providers/DefaultGlyphProvider -c net/minecraft/class_377 net/minecraft/client/gui/fonts/Font - m (Lnet/minecraft/class_383;)Lnet/minecraft/class_382; method_2012 createTexturedGlyph - m (Lnet/minecraft/class_379;)Lnet/minecraft/class_382; method_2013 obfuscate - m ()F method_2006 func_212459_b - m (I)Lnet/minecraft/class_382; method_2014 func_238559_b_ - m (I)Lit/unimi/dsi/fastutil/ints/IntList; method_27546 func_238563_f_ - m ()V close close - m ()V method_2010 deleteTextures - m (Ljava/util/List;)V method_2004 setGlyphProviders - m (I)Lnet/minecraft/class_382; method_2009 func_212458_d_ - m ()V method_24290 func_230154_b_ - m ()Lnet/minecraft/class_382; method_22943 getWhiteGlyph - m (Ljava/util/List;Ljava/util/Set;I)V method_27545 func_238558_a_ - m (I)Lnet/minecraft/class_379; method_2005 func_212457_e_ - m (I)Lnet/minecraft/class_379; method_2011 func_238557_a_ - m (I)Lnet/minecraft/class_383; method_2008 getGlyphInfo - f Ljava/util/List; field_2254 textures - f Lnet/minecraft/class_2960; field_2246 id - f Ljava/util/List; field_2247 glyphProviders - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_2257 glyphs - f Lnet/minecraft/class_382; field_2256 fallbackGlyph - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_2253 mapTexturedGlyphs - f Lnet/minecraft/class_382; field_20910 whiteGlyph - f Lnet/minecraft/class_1060; field_2248 textureManager - f Ljava/util/Random; field_2252 RANDOM - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_2249 glyphsByWidth - f Lnet/minecraft/class_384; field_2250 EMPTY_GLYPH - f Lnet/minecraft/class_379; field_2251 GLYPH_ADVANCE_SPACE -c net/minecraft/class_378 net/minecraft/client/gui/fonts/FontResourceManager - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_377; method_27542 func_238552_a_ - m (Lnet/minecraft/class_377;)V method_27540 func_238550_a_ - m (Lnet/minecraft/class_378;)Lnet/minecraft/class_1060; method_18632 func_238553_b_ - m (Ljava/util/Map;)V method_27541 func_238551_a_ - m ()Lnet/minecraft/class_3302; method_18627 getReloadListener - m ()Lnet/minecraft/class_327; method_27539 func_238548_a_ - m ()V close close - m ()Lorg/apache/logging/log4j/Logger; method_18629 func_238554_c_ - m (Lnet/minecraft/class_378;)Ljava/util/Map; method_18630 func_238549_a_ - f Ljava/util/Map; field_24256 field_238547_f_ - f Lorg/apache/logging/log4j/Logger; field_2261 LOGGER - f Lnet/minecraft/class_377; field_24255 field_238545_c_ - f Lnet/minecraft/class_1060; field_2260 textureManager - f Lnet/minecraft/class_3302; field_18215 reloadListener - f Lnet/minecraft/class_2960; field_24254 field_238544_a_ - f Ljava/util/Map; field_2259 field_238546_d_ -c net/minecraft/class_378$1 net/minecraft/client/gui/fonts/FontResourceManager$1 - m (Ljava/util/List;I)V method_27543 func_238555_a_ - m (Ljava/util/Map;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18635 apply - m (Ljava/lang/String;)Z method_18633 func_215274_a - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Ljava/util/Map; method_18638 prepare - m (Lnet/minecraft/class_2960;Ljava/util/List;)V method_27544 func_238556_a_ - m (Lnet/minecraft/class_2960;)Ljava/util/List; method_18637 func_215272_b - f Lnet/minecraft/class_378; field_18216 field_215275_a -c net/minecraft/class_3728 net/minecraft/client/gui/fonts/TextInputUtil - m (IZ)V method_27560 moveCursorTo - m (Lnet/minecraft/class_310;)Ljava/util/function/Consumer; method_27561 getClipboardTextSetter - m (IZ)V method_27555 moveCursorByWords - m (IZ)V method_27549 moveCursorByChar - m (Lnet/minecraft/class_310;)Ljava/lang/String; method_27556 getClipboardText - m (Lnet/minecraft/class_310;)Ljava/lang/String; method_27565 func_238587_d_ - m ()V method_16204 moveCursorToEnd - m (Ljava/lang/String;)Ljava/lang/String; method_16200 getSelectedText - m (Ljava/lang/String;)Ljava/lang/String; method_16198 deleteSelectionFromText - m (Ljava/lang/String;)V method_16197 putText - m (C)Z method_16199 putChar - m (Z)V method_27562 deselectSelection - m ()Z method_27568 hasSelection - m (II)V method_27548 setSelection - m (I)Z method_16202 specialKeyPressed - m (I)I method_27567 clampIndexToTextLength - m (Lnet/minecraft/class_310;)Ljava/util/function/Supplier; method_27550 getClipboardTextSupplier - m (Z)V method_27558 moveCursorToEnd - m (Ljava/lang/String;Ljava/lang/String;)V method_27552 insertTextAtSelection - m (Z)V method_27553 moveCursorToStart - m ()I method_16201 getEndIndex - m (Lnet/minecraft/class_310;Ljava/lang/String;)V method_27551 setClipboardText - m ()V method_27559 copySelectedText - m ()V method_27554 insertClipboardText - m ()V method_27563 selectAll - m (Lnet/minecraft/class_310;Ljava/lang/String;)V method_27557 func_238577_b_ - m ()I method_16203 getStartIndex - m (I)V method_27564 deleteCharAtSelection - m ()V method_27547 cutText - f Ljava/util/function/Supplier; field_16456 clipboardSupplier - f Ljava/util/function/Predicate; field_24259 textLimiter - f Ljava/util/function/Supplier; field_24257 textSupplier - f Ljava/util/function/Consumer; field_24258 textConsumer - f Ljava/util/function/Consumer; field_16458 clipboardConsumer - f I field_16453 endIndex - f I field_16452 startIndex -c net/minecraft/class_380 net/minecraft/client/gui/fonts/FontTexture - m (Lnet/minecraft/class_383;)Lnet/minecraft/class_382; method_2022 createTexturedGlyph - m ()Lnet/minecraft/class_2960; method_2023 getTextureLocation - f Lnet/minecraft/class_2960; field_2262 textureLocation - f Lnet/minecraft/class_380$class_381; field_2264 entry - f Lnet/minecraft/class_1921; field_21690 field_228158_e_ - f Z field_2263 colored - f Lnet/minecraft/class_1921; field_21691 field_228159_f_ -c net/minecraft/class_380$class_381 net/minecraft/client/gui/fonts/FontTexture$Entry - m (Lnet/minecraft/class_380$class_381;)I method_17536 func_216890_b - m (Lnet/minecraft/class_383;)Lnet/minecraft/class_380$class_381; method_2024 func_211224_a - m (Lnet/minecraft/class_380$class_381;)I method_17535 func_216891_a - f Z field_2265 field_211231_g - f I field_2268 yOffset - f Lnet/minecraft/class_380$class_381; field_2271 field_211230_f - f I field_2269 xOffset - f I field_2267 field_211227_c - f Lnet/minecraft/class_380$class_381; field_2270 field_211229_e - f I field_2266 field_211228_d -c net/minecraft/class_380$1 net/minecraft/client/gui/fonts/FontTexture$1 -c net/minecraft/class_384 net/minecraft/client/gui/fonts/EmptyGlyph -c net/minecraft/class_382 net/minecraft/client/gui/fonts/TexturedGlyph - m (Z)Lnet/minecraft/class_1921; method_24045 getRenderType - m (ZFFLnet/minecraft/class_1159;Lnet/minecraft/class_4588;FFFFI)V method_2025 render - m (Lnet/minecraft/class_382$class_328;Lnet/minecraft/class_1159;Lnet/minecraft/class_4588;I)V method_22944 renderEffect - f F field_2275 u1 - f F field_2276 u0 - f F field_2274 v0 - f F field_2279 minY - f Lnet/minecraft/class_1921; field_21692 normalType - f Lnet/minecraft/class_1921; field_21693 seeThroughType - f F field_2278 maxY - f F field_2273 v1 - f F field_2280 maxX - f F field_2272 minX -c net/minecraft/class_382$class_328 net/minecraft/client/gui/fonts/TexturedGlyph$Effect - f F field_2009 a - f F field_2006 x1 - f F field_2010 b - f F field_2007 y0 - f F field_2003 g - f F field_2008 x0 - f F field_2004 r - f F field_20911 depth - f F field_2005 y1 -c net/minecraft/class_4591 net/minecraft/client/gui/fonts/WhiteGlyph - m (Ljava/lang/String;)Lnet/minecraft/class_4591; valueOf valueOf - m ()[Lnet/minecraft/class_4591; values values - m (Lnet/minecraft/class_1011;)V method_22945 func_228173_a_ - f Lnet/minecraft/class_4591; field_20912 INSTANCE - f Lnet/minecraft/class_1011; field_20913 WHITE_GLYPH - f [Lnet/minecraft/class_4591; field_20914 $VALUES -c net/minecraft/class_385 net/minecraft/client/gui/fonts/DefaultGlyph - m ()[Lnet/minecraft/class_385; values values - m (Ljava/lang/String;)Lnet/minecraft/class_385; valueOf valueOf - m (Lnet/minecraft/class_1011;)V method_2036 func_211580_a - f Lnet/minecraft/class_1011; field_2281 NATIVE_IMAGE - f [Lnet/minecraft/class_385; field_2282 $VALUES - f Lnet/minecraft/class_385; field_2283 INSTANCE -c net/minecraft/class_386 net/minecraft/client/gui/fonts/providers/TextureGlyphProvider - m ()Lorg/apache/logging/log4j/Logger; method_20480 func_216486_a - f Lnet/minecraft/class_1011; field_2285 texture - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_2284 glyphInfos - f Lorg/apache/logging/log4j/Logger; field_2286 LOGGER -c net/minecraft/class_386$class_387 net/minecraft/client/gui/fonts/providers/TextureGlyphProvider$Factory - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_386$class_387; method_2037 deserialize - m (Lnet/minecraft/class_1011;IIII)I method_2038 getCharacterWidth - f I field_2288 height - f Ljava/util/List; field_2290 chars - f I field_2287 ascent - f Lnet/minecraft/class_2960; field_2289 file -c net/minecraft/class_386$1 net/minecraft/client/gui/fonts/providers/TextureGlyphProvider$1 -c net/minecraft/class_386$class_388 net/minecraft/client/gui/fonts/providers/TextureGlyphProvider$GlyphInfo - f F field_2296 scale - f I field_2295 width - f I field_2293 height - f Lnet/minecraft/class_1011; field_2294 texture - f I field_2291 ascent - f I field_2292 advanceWidth - f I field_2297 unpackSkipRows - f I field_2298 unpackSkipPixels -c net/minecraft/class_394 net/minecraft/client/gui/fonts/providers/GlyphProviderTypes - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_389; method_2047 getFactory - m (Ljava/lang/String;)Lnet/minecraft/class_394; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_394; method_2048 byName - m ()[Lnet/minecraft/class_394; values values - m (Ljava/util/HashMap;)V method_2049 func_211639_a - f Ljava/util/function/Function; field_2315 factoryDeserializer - f Ljava/lang/String; field_2314 name - f Lnet/minecraft/class_394; field_2312 BITMAP - f [Lnet/minecraft/class_394; field_2316 $VALUES - f Ljava/util/Map; field_2311 TYPES_BY_NAME - f Lnet/minecraft/class_394; field_2317 TTF - f Lnet/minecraft/class_394; field_2313 LEGACY_UNICODE -c net/minecraft/class_389 net/minecraft/client/gui/fonts/providers/IGlyphProviderFactory - m (Lnet/minecraft/class_3300;)Lnet/minecraft/class_390; method_2039 create -c net/minecraft/class_396 net/minecraft/client/gui/fonts/providers/TrueTypeGlyphProviderFactory - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_389; method_2059 deserialize - f Lnet/minecraft/class_2960; field_2330 file - f F field_2326 shiftY - f F field_2329 size - f Ljava/lang/String; field_2331 chars - f Lorg/apache/logging/log4j/Logger; field_16242 RANDOM - f F field_2328 oversample - f F field_2327 shiftX -c net/minecraft/class_391 net/minecraft/client/gui/fonts/providers/UnicodeTextureGlyphProvider - m (B)I method_2043 func_212453_a - m (I)Lnet/minecraft/class_2960; method_2041 func_238591_b_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1011; method_2042 loadTexture - m ()Lorg/apache/logging/log4j/Logger; method_2045 func_211254_a - m (B)I method_2044 func_212454_b - f Lorg/apache/logging/log4j/Logger; field_2303 LOGGER - f Ljava/util/Map; field_2299 field_211845_e - f Lnet/minecraft/class_3300; field_2302 resourceManager - f Ljava/lang/String; field_2300 template - f [B field_2301 sizes -c net/minecraft/class_391$class_392 net/minecraft/client/gui/fonts/providers/UnicodeTextureGlyphProvider$Factory - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_389; method_2046 deserialize - f Lnet/minecraft/class_2960; field_2304 sizes - f Ljava/lang/String; field_2305 template -c net/minecraft/class_391$class_393 net/minecraft/client/gui/fonts/providers/UnicodeTextureGlyphProvider$GlpyhInfo - f I field_2306 unpackSkipRows - f I field_2309 width - f I field_2308 height - f Lnet/minecraft/class_1011; field_2310 texture - f I field_2307 unpackSkipPixels -c net/minecraft/class_391$1 net/minecraft/client/gui/fonts/providers/UnicodeTextureGlyphProvider$1 -c net/minecraft/class_403 net/minecraft/client/gui/screen/AlertScreen - m (Lnet/minecraft/class_4185;)V method_19790 func_212983_a - f Lnet/minecraft/class_2561; field_2346 field_201550_f - f Lnet/minecraft/class_2561; field_2349 field_201551_g - f Ljava/lang/Runnable; field_2345 field_201552_h - f Lnet/minecraft/class_5489; field_2348 field_243274_p - f I field_2347 buttonDelay -c net/minecraft/class_4189 net/minecraft/client/gui/AccessibilityScreen - f [Lnet/minecraft/class_316; field_18730 OPTIONS -c net/minecraft/class_404 net/minecraft/client/gui/screen/ChatOptionsScreen - f [Lnet/minecraft/class_316; field_2352 CHAT_OPTIONS -c net/minecraft/class_405 net/minecraft/client/gui/screen/ConfirmBackupScreen - m (Lnet/minecraft/class_4185;)V method_19793 func_212993_c - m (Lnet/minecraft/class_4185;)V method_19792 func_212992_b - m (Lnet/minecraft/class_4185;)V method_19791 func_212991_a - f Lnet/minecraft/class_2561; field_2364 message - f Lnet/minecraft/class_405$class_406; field_18971 callback - f Lnet/minecraft/class_4286; field_19234 field_212996_j - f Lnet/minecraft/class_5489; field_2365 field_243275_q - f Z field_19232 field_212994_d - f Lnet/minecraft/class_437; field_2360 parentScreen -c net/minecraft/class_405$class_406 net/minecraft/client/gui/screen/ConfirmBackupScreen$ICallback - m (ZZ)V proceed proceed -c net/minecraft/class_407 net/minecraft/client/gui/screen/ConfirmOpenLinkScreen - m ()V method_2100 copyLinkToClipboard - m (Lnet/minecraft/class_4185;)V method_19795 func_213004_a - m (Lnet/minecraft/class_4185;)V method_19796 func_213005_b - m (Lnet/minecraft/class_4185;)V method_19797 func_213006_c - f Ljava/lang/String; field_2371 linkText - f Lnet/minecraft/class_2561; field_2372 openLinkWarning - f Lnet/minecraft/class_2561; field_2373 copyLinkButtonText - f Z field_2370 showSecurityWarning -c net/minecraft/class_408 net/minecraft/client/gui/screen/ChatScreen - m (Ljava/lang/String;)V method_23945 func_212997_a - m (I)V method_2114 getSentHistory - m (Ljava/lang/String;)V method_2108 setChatLine - m (Lnet/minecraft/class_408;)Lnet/minecraft/class_4717; method_23961 func_228175_a_ - f Ljava/lang/String; field_18973 defaultInputFieldText - f Ljava/lang/String; field_2389 historyBuffer - f Lnet/minecraft/class_342; field_2382 inputField - f Lnet/minecraft/class_4717; field_21616 commandSuggestionHelper - f I field_2387 sentHistoryCursor -c net/minecraft/class_408$1 net/minecraft/client/gui/screen/ChatScreen$1 - f Lnet/minecraft/class_408; field_21631 field_228176_a_ -c net/minecraft/class_412 net/minecraft/client/gui/screen/ConnectingScreen - m (Lnet/minecraft/class_412;)Lnet/minecraft/class_437; method_2128 access$200 - m (Lnet/minecraft/class_412;Lnet/minecraft/class_2561;)V method_2132 func_209513_a - m (Lnet/minecraft/class_412;Lnet/minecraft/class_2535;)Lnet/minecraft/class_2535; method_2126 access$102 - m (Lnet/minecraft/class_412;)Lnet/minecraft/class_2535; method_2129 access$100 - m ()Lorg/apache/logging/log4j/Logger; method_2133 access$300 - m (Lnet/minecraft/class_412;)Z method_2134 access$000 - m (Ljava/lang/String;I)V method_2130 connect - m (Lnet/minecraft/class_4185;)V method_19800 func_212999_a - m (Lnet/minecraft/class_2561;)V method_2131 func_209514_a - f Lnet/minecraft/class_437; field_2412 previousGuiScreen - f Lorg/apache/logging/log4j/Logger; field_2410 LOGGER - f Z field_2409 cancel - f Lnet/minecraft/class_2561; field_2413 field_209515_s - f Lnet/minecraft/class_2535; field_2411 networkManager - f J field_19097 field_213000_g - f Ljava/util/concurrent/atomic/AtomicInteger; field_2408 CONNECTION_ID -c net/minecraft/class_412$1 net/minecraft/client/gui/screen/ConnectingScreen$1 - m (Ljava/lang/String;)V method_2135 func_211643_a - m (Lnet/minecraft/class_412;Lnet/minecraft/class_2561;)V method_2137 func_209549_a - m ()V method_2136 func_211644_a - m ()V run run - f I field_2415 field_148229_b - f Ljava/lang/String; field_2414 field_148231_a - f Lnet/minecraft/class_412; field_2416 field_148230_c -c net/minecraft/class_410 net/minecraft/client/gui/screen/ConfirmScreen - m (Lnet/minecraft/class_4185;)V method_19799 func_213002_b - m (Lnet/minecraft/class_4185;)V method_19798 func_213001_a - m (I)V method_2125 setButtonDelay - f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_2403 callbackFunction - f Lnet/minecraft/class_2561; field_2399 cancelButtonText - f Lnet/minecraft/class_5489; field_2404 field_243276_q - f I field_2400 ticksUntilEnable - f Lnet/minecraft/class_2561; field_2401 messageLine2 - f Lnet/minecraft/class_2561; field_2402 confirmButtonText -c net/minecraft/class_413 net/minecraft/client/gui/screen/CreateFlatWorldScreen - m (Lnet/minecraft/class_4185;)V method_19806 func_213011_c - m ()V method_2145 onLayersChanged - m (Lnet/minecraft/class_413;)V method_30153 func_241580_b_ - m (Lnet/minecraft/class_4185;)V method_20093 func_213007_d - m (Lnet/minecraft/class_4185;)V method_19804 func_213009_a - m (Lnet/minecraft/class_413;)Lnet/minecraft/class_3232; method_2142 access$000 - m (Lnet/minecraft/class_4185;)V method_19805 func_213010_b - m ()Lnet/minecraft/class_3232; method_29055 func_238603_g_ - m (Lnet/minecraft/class_3232;)V method_29054 func_238602_a_ - m ()Z method_2147 hasSelectedLayer - f Lnet/minecraft/class_525; field_2422 createWorldGui - f Lnet/minecraft/class_4185; field_2421 removeLayerButton - f Lnet/minecraft/class_3232; field_2419 generatorInfo - f Lnet/minecraft/class_413$class_4192; field_2424 createFlatWorldListSlotGui - f Ljava/util/function/Consumer; field_24565 field_238601_b_ - f Lnet/minecraft/class_2561; field_2418 materialText - f Lnet/minecraft/class_2561; field_2425 heightText -c net/minecraft/class_413$1 net/minecraft/client/gui/screen/CreateFlatWorldScreen$1 -c net/minecraft/class_413$class_4192 net/minecraft/client/gui/screen/CreateFlatWorldScreen$DetailsList - m ()V method_19372 func_214345_a - m (Lnet/minecraft/class_413$class_4192$class_4193;)V method_20094 setSelected - m (Lnet/minecraft/class_413$class_4192;)Lnet/minecraft/class_310; method_20095 func_241581_a_ - f Lnet/minecraft/class_413; field_18738 field_148227_l -c net/minecraft/class_413$class_4192$class_4193 net/minecraft/client/gui/screen/CreateFlatWorldScreen$DetailsList$LayerEntry - m (Lnet/minecraft/class_4587;II)V method_19373 func_238604_a_ - m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1799;)V method_19375 func_238605_a_ - f Lnet/minecraft/class_413$class_4192; field_18739 field_214391_a -c net/minecraft/class_415 net/minecraft/client/gui/screen/CreateBuffetWorldScreen - m (Lnet/minecraft/class_415;Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959; method_29053 func_243280_a - m (Lnet/minecraft/class_415$class_4190$class_4191;)Z method_29051 func_241578_a_ - m ()V method_2151 func_205306_h - m (Lnet/minecraft/class_415;)V method_29052 func_243281_b - m (Lnet/minecraft/class_4185;)V method_19801 func_213015_c - m (Lnet/minecraft/class_4185;)V method_28059 func_241579_b_ - m (Lnet/minecraft/class_415;)Lnet/minecraft/class_2385; method_30506 func_243279_a - f Lnet/minecraft/class_437; field_24562 parent - f Lnet/minecraft/class_2561; field_26535 field_243277_a - f Ljava/util/function/Consumer; field_24563 field_238592_b_ - f Lnet/minecraft/class_2385; field_25888 field_243278_p - f Lnet/minecraft/class_4185; field_2438 field_205313_u - f Lnet/minecraft/class_415$class_4190; field_2441 biomeList - f Lnet/minecraft/class_1959; field_25040 field_238593_p_ -c net/minecraft/class_415$1 net/minecraft/client/gui/screen/CreateBuffetWorldScreen$1 -c net/minecraft/class_415$class_4190 net/minecraft/client/gui/screen/CreateBuffetWorldScreen$BiomeList - m (Lnet/minecraft/class_415$class_4190$class_4191;)V method_20089 setSelected - m (Ljava/util/Map$Entry;)Ljava/lang/String; method_28061 func_238598_b_ - m (Ljava/util/Map$Entry;)V method_28060 func_238597_a_ - f Lnet/minecraft/class_415; field_18736 field_205303_v -c net/minecraft/class_415$class_4190$class_4191 net/minecraft/client/gui/screen/CreateBuffetWorldScreen$BiomeList$BiomeEntry - m (Lnet/minecraft/class_415$class_4190$class_4191;)Lnet/minecraft/class_1959; method_20092 func_243283_a - f Lnet/minecraft/class_415$class_4190; field_18737 field_214393_a - f Lnet/minecraft/class_2561; field_26536 field_243282_c - f Lnet/minecraft/class_1959; field_24564 field_238599_b_ -c net/minecraft/class_418 net/minecraft/client/gui/screen/DeathScreen - m (Lnet/minecraft/class_4185;)V method_19809 func_213021_b - m ()V method_22364 func_228177_a_ - m (Z)V method_20373 confirmCallback - m (Lnet/minecraft/class_4185;)V method_19808 func_213020_a - m (I)Lnet/minecraft/class_2583; method_2164 func_238623_a_ - f I field_2451 enableButtonsTimer - f Lnet/minecraft/class_2561; field_26537 field_243285_p - f Z field_18974 isHardcoreMode - f Lnet/minecraft/class_2561; field_2450 causeOfDeath -c net/minecraft/class_5346 net/minecraft/client/gui/screen/DatapackFailureScreen - m (Lnet/minecraft/class_4185;)V method_29346 func_238622_b_ - m (Lnet/minecraft/class_4185;)V method_29345 func_238621_a_ - f Ljava/lang/Runnable; field_25452 field_238620_b_ - f Lnet/minecraft/class_5489; field_25265 field_243284_a -c net/minecraft/class_420 net/minecraft/client/gui/screen/ServerListScreen - m ()V method_2167 func_195167_h - m (Lnet/minecraft/class_4185;)V method_19813 func_213026_b - m (Ljava/lang/String;)V method_19376 func_213024_a - m (Lnet/minecraft/class_4185;)V method_19812 func_213025_a - m ()V method_2169 func_195168_i - f Lnet/minecraft/class_4185; field_2462 field_195170_a - f Lnet/minecraft/class_342; field_2463 ipEdit - f Lnet/minecraft/class_642; field_2460 serverData - f Lnet/minecraft/class_437; field_21790 previousScreen - f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_19235 field_213027_d - f Lnet/minecraft/class_2561; field_26540 field_243288_a -c net/minecraft/class_417 net/minecraft/client/gui/screen/DemoScreen - m (Lnet/minecraft/class_4185;)V method_19810 func_213018_a - m (Lnet/minecraft/class_4185;)V method_19811 func_213019_b - f Lnet/minecraft/class_5489; field_26538 field_243286_b - f Lnet/minecraft/class_2960; field_2447 DEMO_BACKGROUND_LOCATION - f Lnet/minecraft/class_5489; field_26539 field_243287_c -c net/minecraft/class_422 net/minecraft/client/gui/screen/AddServerScreen - m (Lnet/minecraft/class_642$class_643;)Lnet/minecraft/class_2561; method_27570 func_238624_a_ - m ()V method_24183 func_228180_b_ - m ()V method_2172 onButtonServerAddPressed - m (Ljava/lang/String;)Z method_2178 func_210141_a - m (Lnet/minecraft/class_4185;)V method_19815 func_213029_a - m (Lnet/minecraft/class_4185;)V method_19817 func_213031_c - m (Lnet/minecraft/class_4185;)V method_19816 func_213030_b - m (Ljava/lang/String;)V method_2171 func_213028_a - f Lnet/minecraft/class_2561; field_26541 field_243290_a - f Lnet/minecraft/class_2561; field_26542 field_243291_b - f Lnet/minecraft/class_437; field_21791 field_228179_g_ - f Lnet/minecraft/class_4185; field_2473 buttonResourcePack - f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_19236 field_213032_b - f Lnet/minecraft/class_342; field_2474 textFieldServerAddress - f Lnet/minecraft/class_642; field_2469 serverData - f Lnet/minecraft/class_342; field_2471 textFieldServerName - f Lnet/minecraft/class_4185; field_2472 buttonAddServer - f Ljava/util/function/Predicate; field_2475 addressFilter -c net/minecraft/class_419 net/minecraft/client/gui/screen/DisconnectedScreen - m (Lnet/minecraft/class_4185;)V method_19814 func_213033_a - f Lnet/minecraft/class_2561; field_2457 message - f Lnet/minecraft/class_5489; field_2458 field_243289_b - f Lnet/minecraft/class_437; field_2456 nextScreen - f I field_2454 textHeight -c net/minecraft/class_421 net/minecraft/client/gui/screen/ErrorScreen - m (Lnet/minecraft/class_4185;)V method_19818 func_213034_a - f Lnet/minecraft/class_2561; field_2467 message -c net/minecraft/class_423 net/minecraft/client/gui/screen/SleepInMultiplayerScreen - m ()V method_2180 wakeFromSleep - m (Lnet/minecraft/class_4185;)V method_19819 func_212998_a -c net/minecraft/class_424 net/minecraft/client/gui/screen/DirtMessageScreen -c net/minecraft/class_3928 net/minecraft/client/gui/screen/WorldLoadProgressScreen - m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_17537 func_213039_a - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_3953;IIII)V method_17538 func_238625_a_ - f J field_19101 lastNarratorUpdateTime - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_17407 COLORS - f Lnet/minecraft/class_3953; field_17406 tracker -c net/minecraft/class_426 net/minecraft/client/gui/screen/LanguageScreen - m (Lnet/minecraft/class_4185;)V method_19821 func_213037_b - m (Lnet/minecraft/class_4185;)V method_19820 func_213036_a - m (Lnet/minecraft/class_426;)Lnet/minecraft/class_1076; method_2182 func_213035_a - f Lnet/minecraft/class_426$class_4195; field_2486 list - f Lnet/minecraft/class_2561; field_26543 field_243292_c - f Lnet/minecraft/class_1076; field_2488 languageManager - f Lnet/minecraft/class_4185; field_2491 confirmSettingsBtn - f Lnet/minecraft/class_349; field_2487 field_211832_i -c net/minecraft/class_426$class_4195 net/minecraft/client/gui/screen/LanguageScreen$List - m (Lnet/minecraft/class_426$class_4195;)I method_20101 func_214349_a - m (Lnet/minecraft/class_426$class_4195$class_4194;)V method_20100 setSelected - f Lnet/minecraft/class_426; field_18744 field_148178_k -c net/minecraft/class_426$class_4195$class_4194 net/minecraft/client/gui/screen/LanguageScreen$List$LanguageEntry - m (Lnet/minecraft/class_426$class_4195$class_4194;)Lnet/minecraft/class_1077; method_19380 func_214396_a - m ()V method_19381 func_214395_a - f Lnet/minecraft/class_1077; field_18743 field_214398_b - f Lnet/minecraft/class_426$class_4195; field_19100 field_214397_a -c net/minecraft/class_3929 net/minecraft/client/gui/ScreenManager - m (Lnet/minecraft/class_3917;Lnet/minecraft/class_310;ILnet/minecraft/class_2561;)V method_17541 openScreen - m ()Z method_17539 isMissingScreen - m (Lnet/minecraft/class_3917;Lnet/minecraft/class_3929$class_3930;)V method_17542 registerFactory - m (Lnet/minecraft/class_3917;)Lnet/minecraft/class_3929$class_3930; method_17540 getFactory - f Lorg/apache/logging/log4j/Logger; field_17408 LOG - f Ljava/util/Map; field_17409 FACTORIES -c net/minecraft/class_3929$class_3930 net/minecraft/client/gui/ScreenManager$IScreenFactory - m (Lnet/minecraft/class_2561;Lnet/minecraft/class_3917;Lnet/minecraft/class_310;I)V method_17543 createScreen - m (Lnet/minecraft/class_1703;Lnet/minecraft/class_1661;Lnet/minecraft/class_2561;)Lnet/minecraft/class_437; create create -c net/minecraft/class_425 net/minecraft/client/gui/ResourceLoadProgressGui - m (Lnet/minecraft/class_4587;IIIIF)V method_18103 func_238629_a_ - m ()Lnet/minecraft/class_2960; method_18639 func_212971_b - m (Lnet/minecraft/class_310;)V method_18819 loadLogoTexture - f F field_17770 progress - f Lnet/minecraft/class_310; field_18217 mc - f Z field_18219 reloading - f Lnet/minecraft/class_4011; field_17767 asyncReloader - f Lnet/minecraft/class_2960; field_2483 MOJANG_LOGO_TEXTURE - f Ljava/util/function/Consumer; field_18218 completedCallback - f I field_25041 field_238627_b_ - f I field_25042 field_238628_c_ - f J field_18220 fadeInStart - f J field_17771 fadeOutStart -c net/minecraft/class_425$class_4070 net/minecraft/client/gui/ResourceLoadProgressGui$MojangLogoTexture -c net/minecraft/class_429 net/minecraft/client/gui/screen/OptionsScreen - m (Lnet/minecraft/class_4185;)V method_19829 func_213061_h - m (Lnet/minecraft/class_4185;)V method_19830 func_213055_i - m (Lnet/minecraft/class_4185;)V method_19828 func_213059_g - m (Lnet/minecraft/class_4185;)V method_19827 func_213052_f - m (Lnet/minecraft/class_4185;)V method_19825 func_213049_d - m (Lnet/minecraft/class_4185;)V method_19826 func_213053_e - m (Lnet/minecraft/class_4185;)V method_19824 func_213060_c - m (Lnet/minecraft/class_4185;)V method_19833 func_213051_l - m (Lnet/minecraft/class_4185;)V method_19823 func_213058_b - m (Lnet/minecraft/class_4185;)V method_19832 func_213054_k - m (Lnet/minecraft/class_4185;)V method_19822 func_213056_a - m (Z)V method_20374 accept - m (Lnet/minecraft/class_4185;)V method_19831 func_213057_j - m (Lnet/minecraft/class_1267;)Lnet/minecraft/class_2561; method_2189 func_238630_a_ - m (Lnet/minecraft/class_3283;)V method_29975 func_241584_a_ - f Lnet/minecraft/class_437; field_2501 lastScreen - f [Lnet/minecraft/class_316; field_2504 SCREEN_OPTIONS - f Lnet/minecraft/class_4185; field_2500 difficultyButton - f Lnet/minecraft/class_1267; field_18745 worldDifficulty - f Lnet/minecraft/class_315; field_2502 settings - f Lnet/minecraft/class_347; field_2503 lockButton -c net/minecraft/class_4288 net/minecraft/client/gui/screen/MouseSettingsScreen - m (Lnet/minecraft/class_4185;)V method_20411 func_223703_a - m (I)[Lnet/minecraft/class_316; method_21671 func_223702_a - f Lnet/minecraft/class_353; field_19246 field_213045_b - f [Lnet/minecraft/class_316; field_19247 OPTIONS -c net/minecraft/class_428 net/minecraft/client/gui/screen/MemoryErrorScreen - m (Lnet/minecraft/class_4185;)V method_19835 func_213048_b - m (Lnet/minecraft/class_4185;)V method_19834 func_213047_a -c net/minecraft/class_4667 net/minecraft/client/gui/screen/SettingsScreen - m (Lnet/minecraft/class_353;II)Ljava/util/List; method_31048 func_243293_a - f Lnet/minecraft/class_315; field_21336 gameSettings - f Lnet/minecraft/class_437; field_21335 parentScreen -c net/minecraft/class_433 net/minecraft/client/gui/screen/IngameMenuScreen - m (Lnet/minecraft/class_4185;)V method_19845 func_213070_g - m (Lnet/minecraft/class_4185;)V method_19838 func_213068_b - m (Lnet/minecraft/class_4185;)V method_19836 func_213067_a - m (Lnet/minecraft/class_4185;)V method_19844 func_213065_f - m (Lnet/minecraft/class_4185;)V method_19841 func_213063_d - m (Z)V method_19837 func_213064_a - m (Lnet/minecraft/class_4185;)V method_19843 func_213066_e - m (Lnet/minecraft/class_4185;)V method_19840 func_213071_c - m (Ljava/lang/String;Lnet/minecraft/class_4185;)V method_19842 func_213072_a - m (Ljava/lang/String;Z)V method_19839 func_213069_a - m ()V method_20543 addButtons - f Z field_19319 isFullMenu -c net/minecraft/class_4071 net/minecraft/client/gui/LoadingGui - m ()Z method_18640 isPauseScreen -c net/minecraft/class_430 net/minecraft/client/gui/screen/FlatPresetsScreen - m (Lnet/minecraft/class_2561;Lnet/minecraft/class_1935;Lnet/minecraft/class_5321;Ljava/util/List;ZZZ[Lnet/minecraft/class_3229;)V method_2195 func_238640_a_ - m (Lnet/minecraft/class_2378;Ljava/lang/String;Lnet/minecraft/class_3232;)Lnet/minecraft/class_3232; method_29060 func_243299_a - m (Z)V method_20102 func_213074_a - m (Lnet/minecraft/class_430;)Lnet/minecraft/class_413; method_30507 func_243295_a - m ()Ljava/util/List; method_2194 func_213073_a - m (Lnet/minecraft/class_430;Lnet/minecraft/class_3232;)Lnet/minecraft/class_3232; method_29057 func_243296_a - m (Ljava/lang/String;I)Lnet/minecraft/class_3229; method_29059 func_238638_a_ - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_4185;)V method_19847 func_243298_a - m (Lnet/minecraft/class_4185;)V method_19846 func_243294_a - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_3232;)Ljava/lang/String; method_29062 func_243303_b - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_5321;)Lnet/minecraft/class_1959; method_31187 func_243300_a - m (Ljava/util/List;ZZZ[Lnet/minecraft/class_3229;Lnet/minecraft/class_5321;Lnet/minecraft/class_2378;)Lnet/minecraft/class_3232; method_31127 func_243301_a - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_5321;)Lnet/minecraft/class_1959; method_31188 func_243304_b - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_3232;)Ljava/lang/String; method_29056 func_243297_a - m (Lnet/minecraft/class_2960;)Ljava/lang/IllegalArgumentException; method_29061 func_238641_a_ - m (Ljava/lang/String;)Ljava/util/List; method_29058 func_238637_a_ - m (Lnet/minecraft/class_430;)Lnet/minecraft/class_3232; method_31128 func_243302_b - m (Lnet/minecraft/class_430;)Lnet/minecraft/class_342; method_2193 func_243305_c - f Lnet/minecraft/class_430$class_4196; field_2521 list - f Lnet/minecraft/class_3232; field_25044 field_241594_u_ - f Lorg/apache/logging/log4j/Logger; field_25043 field_238631_a_ - f Lnet/minecraft/class_413; field_2519 parentScreen - f Lnet/minecraft/class_4185; field_2525 btnSelect - f Lnet/minecraft/class_2561; field_2520 presetsShare - f Lnet/minecraft/class_2561; field_2524 listText - f Ljava/util/List; field_2518 FLAT_WORLD_PRESETS - f Lnet/minecraft/class_342; field_2523 export -c net/minecraft/class_430$class_4196 net/minecraft/client/gui/screen/FlatPresetsScreen$SlotList - m (Lnet/minecraft/class_430$class_4196;)Lnet/minecraft/class_310; method_20104 func_243306_a - m (Lnet/minecraft/class_430$class_4196$class_432;)V method_20103 setSelected - f Lnet/minecraft/class_430; field_18747 field_148174_l -c net/minecraft/class_430$class_4196$class_432 net/minecraft/client/gui/screen/FlatPresetsScreen$SlotList$PresetEntry - m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1792;)V method_2200 func_238647_a_ - m ()V method_19389 func_214399_a - m (Lnet/minecraft/class_430$class_4196$class_432;)V method_19388 func_214401_a - m (Lnet/minecraft/class_4587;II)V method_2198 func_238646_a_ - f Lnet/minecraft/class_430$class_4196; field_2532 field_214403_a -c net/minecraft/class_430$class_431 net/minecraft/client/gui/screen/FlatPresetsScreen$LayerItem - m ()Lnet/minecraft/class_2561; method_27571 func_238644_a_ - f Ljava/util/function/Function; field_25045 field_238643_c_ - f Lnet/minecraft/class_1792; field_2527 icon - f Lnet/minecraft/class_2561; field_2528 name -c net/minecraft/class_5405 net/minecraft/client/gui/screen/GPUWarningScreen - f I field_25679 field_241589_q_ - f Lcom/google/common/collect/ImmutableList; field_25676 options - f I field_25678 field_241588_p_ - f Lnet/minecraft/class_5348; field_25675 warnings - f Lnet/minecraft/class_5489; field_25677 warningRenderer -c net/minecraft/class_5405$class_5406 net/minecraft/client/gui/screen/GPUWarningScreen$Option - m (Lnet/minecraft/class_5405$class_5406;)Lnet/minecraft/class_4185$class_4241; method_30051 func_241593_b_ - m (Lnet/minecraft/class_5405$class_5406;)Lnet/minecraft/class_2561; method_30050 func_241592_a_ - f Lnet/minecraft/class_2561; field_25680 field_241590_a_ - f Lnet/minecraft/class_4185$class_4241; field_25681 field_241591_b_ -c net/minecraft/class_434 net/minecraft/client/gui/screen/DownloadTerrainScreen - f Lnet/minecraft/class_2561; field_26544 field_243307_a -c net/minecraft/class_435 net/minecraft/client/gui/screen/WorkingScreen - f Lnet/minecraft/class_2561; field_2544 stage - f Z field_2543 doneWorking - f I field_2542 progress - f Lnet/minecraft/class_2561; field_2541 field_238648_a_ -c net/minecraft/class_436 net/minecraft/client/gui/screen/ShareToLanScreen - m (Lnet/minecraft/class_4185;)V method_19851 func_213082_d - m ()V method_2204 updateDisplayNames - m (Lnet/minecraft/class_4185;)V method_19849 func_213084_b - m (Lnet/minecraft/class_4185;)V method_19850 func_213085_c - m (Lnet/minecraft/class_4185;)V method_19848 func_213083_a - f Lnet/minecraft/class_4185; field_2549 gameModeButton - f Ljava/lang/String; field_2545 gameMode - f Lnet/minecraft/class_437; field_2548 lastScreen - f Lnet/minecraft/class_4185; field_2547 allowCheatsButton - f Lnet/minecraft/class_2561; field_25890 field_243311_b - f Lnet/minecraft/class_2561; field_25889 field_243310_a - f Lnet/minecraft/class_2561; field_26545 field_243312_c - f Z field_2546 allowCheats -c net/minecraft/class_437 net/minecraft/client/gui/screen/Screen - m (Lnet/minecraft/class_2583;)Z method_25430 handleComponentClicked - m (Ljava/lang/String;)V method_25427 sendMessage - m (Lnet/minecraft/class_4587;I)V method_25433 renderBackground - m (Ljava/net/URI;)V method_25416 openLink - m (Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/String;)V method_25412 wrapScreenError - m (I)Z method_25439 isSelectAll - m (I)Z method_25438 isCopy - m ()Z method_25422 shouldCloseOnEsc - m (Lnet/minecraft/class_4587;)V method_25420 renderBackground - m ()Z method_25443 hasAltDown - m ()Z method_25442 hasShiftDown - m ()V method_25432 onClose - m (I)Z method_25437 isPaste - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_25424 renderTooltip - m (Ljava/lang/String;Z)V method_25415 insertText - m (Ljava/lang/String;Z)V method_25425 sendMessage - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2583;II)V method_25418 renderComponentHoverEffect - m (Ljava/util/List;)V method_29638 addPacks - m (Lnet/minecraft/class_310;II)V method_25410 resize - m (Ljava/lang/String;)Ljava/lang/String; method_25413 func_229875_lam_ - m (Lnet/minecraft/class_310;II)V method_25423 init - m ()Ljava/lang/String; method_25435 getNarrationMessage - m (Lnet/minecraft/class_4587;Ljava/util/List;II)V method_25417 renderTooltip - m (Lnet/minecraft/class_1799;)Ljava/util/List; method_25408 getTooltipFromItem - m ()V method_25419 closeScreen - m (Lnet/minecraft/class_364;)Lnet/minecraft/class_364; method_25429 addListener - m (Lnet/minecraft/class_339;)Lnet/minecraft/class_339; method_25411 addButton - m (Z)V method_25428 confirmLink - m (Ljava/lang/String;CI)Z method_25414 isValidCharacterForName - m (I)Z method_25436 isCut - m ()Z method_25441 hasControlDown - m ()V method_25426 init - m (I)V method_25434 renderDirtBackground - m (Lnet/minecraft/class_4587;Ljava/util/List;II)V method_30901 func_243308_b - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1799;II)V method_25409 renderTooltip - m ()Z method_25421 isPauseScreen - m ()Lnet/minecraft/class_2561; method_25440 getTitle - f Ljava/util/List; field_22786 children - f Lnet/minecraft/class_310; field_22787 minecraft - f Z field_22792 passEvents - f Ljava/util/Set; field_22783 ALLOWED_PROTOCOLS - f Lorg/apache/logging/log4j/Logger; field_22782 LOGGER - f I field_22790 height - f Ljava/net/URI; field_22784 clickedLink - f I field_22789 width - f Lnet/minecraft/class_327; field_22793 font - f Lnet/minecraft/class_2561; field_22785 title - f Ljava/util/List; field_22791 buttons - f Lnet/minecraft/class_918; field_22788 itemRenderer -c net/minecraft/class_440 net/minecraft/client/gui/screen/CustomizeSkinScreen - m (Lnet/minecraft/class_4185;)V method_19854 func_213081_b - m (Lnet/minecraft/class_1664;)Lnet/minecraft/class_2561; method_2248 func_238655_a_ - m (Lnet/minecraft/class_4185;)V method_19853 func_213079_a - m (Lnet/minecraft/class_1664;Lnet/minecraft/class_4185;)V method_19852 func_213080_a -c net/minecraft/class_5500 net/minecraft/client/gui/screen/WithNarratorSettingsScreen - m (Lnet/minecraft/class_4185;)V method_31049 func_243316_a - m ()V method_31050 func_243317_i - f Lnet/minecraft/class_339; field_26680 field_243314_p - f [Lnet/minecraft/class_316; field_26679 field_243313_c - f Lnet/minecraft/class_353; field_26681 field_243315_q -c net/minecraft/class_442 net/minecraft/client/gui/screen/MainMenuScreen - m (Lnet/minecraft/class_4185;)V method_19864 func_213090_i - m (Lnet/minecraft/class_4185;)V method_19862 func_213094_g - m ()Z method_31129 func_243319_k - m (Lnet/minecraft/class_4185;)V method_19863 func_213096_h - m ()V method_2252 switchToRealms - m (Lnet/minecraft/class_4185;)V method_20109 func_213088_f - m (II)V method_2249 addSingleplayerMultiplayerButtons - m (II)V method_2251 addDemoButtons - m (ZLnet/minecraft/class_4185;)V method_19858 func_213091_a - m (Z)V method_20375 deleteDemoWorld - m (Lnet/minecraft/class_4587;Ljava/lang/Integer;Ljava/lang/Integer;)V method_29066 func_238660_b_ - m (Lnet/minecraft/class_4587;Ljava/lang/Integer;Ljava/lang/Integer;)V method_29064 func_238657_a_ - m (Lnet/minecraft/class_1060;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_18105 loadAsync - m (Lnet/minecraft/class_4185;Lnet/minecraft/class_4587;II)V method_29065 func_238659_a_ - m ()Z method_2253 areRealmsNotificationsEnabled - m (Lnet/minecraft/class_4185;)V method_19861 func_213089_e - m (Lnet/minecraft/class_4185;)V method_19859 func_238661_c_ - m (Lnet/minecraft/class_4185;)V method_19860 func_213095_c - m (Lnet/minecraft/class_4185;)V method_19857 func_238658_a_ - f I field_2584 widthCopyright - f Lnet/minecraft/class_766; field_2585 panorama - f Z field_17776 showTitleWronglySpelled - f Lnet/minecraft/class_4185; field_2590 buttonResetDemo - f Lnet/minecraft/class_2960; field_17775 PANORAMA_OVERLAY_TEXTURES - f Z field_2599 hasCheckedForRealmsNotification - f I field_2606 widthCopyrightRest - f J field_17772 firstRenderTime - f Lnet/minecraft/class_2960; field_2594 MINECRAFT_TITLE_EDITION - f Lnet/minecraft/class_2960; field_2583 MINECRAFT_TITLE_TEXTURES - f Lnet/minecraft/class_437; field_2592 realmsNotification - f Ljava/lang/String; field_2586 splashText - f Z field_18222 showFadeInAnimation - f Lorg/apache/logging/log4j/Logger; field_23775 field_238656_b_ - f Lnet/minecraft/class_2960; field_19102 ACCESSIBILITY_TEXTURES - f Lnet/minecraft/class_751; field_17774 PANORAMA_RESOURCES -c net/minecraft/class_443 net/minecraft/client/gui/screen/OptionsSoundsScreen - m (Lnet/minecraft/class_4185;)V method_19855 func_213104_a - m (Lnet/minecraft/class_4185;)V method_19856 func_213105_b -c net/minecraft/class_445 net/minecraft/client/gui/screen/WinGameScreen - m ()V method_2257 sendRespawnPacket - m (IIF)V method_2258 drawWinGameScreen - m (Lnet/minecraft/class_4587;Ljava/lang/Integer;Ljava/lang/Integer;)V method_29347 func_238665_a_ - f Lnet/minecraft/class_2960; field_2631 MINECRAFT_EDITION - f Lnet/minecraft/class_2960; field_2626 MINECRAFT_LOGO - f Ljava/lang/String; field_24260 field_238663_q_ - f Ljava/lang/Runnable; field_2630 onFinished - f Lnet/minecraft/class_2960; field_2633 VIGNETTE_TEXTURE - f Z field_2627 poem - f F field_2635 scrollSpeed - f I field_2629 totalScrollLength - f Ljava/util/List; field_2634 lines - f Lorg/apache/logging/log4j/Logger; field_2632 LOGGER - f Lit/unimi/dsi/fastutil/ints/IntSet; field_24261 field_238664_v_ - f F field_2628 time -c net/minecraft/class_446 net/minecraft/client/gui/screen/VideoSettingsScreen - m (Lnet/minecraft/class_4185;)V method_30052 func_241605_a_ - m (Lnet/minecraft/class_4185;)V method_19865 func_213106_a - m (Lnet/minecraft/class_4185;)V method_30053 func_241606_b_ - f Lnet/minecraft/class_2561; field_25683 field_241599_p_ - f Lnet/minecraft/class_2561; field_25684 field_241600_q_ - f I field_19186 mipmapLevels - f [Lnet/minecraft/class_316; field_2640 OPTIONS - f Lnet/minecraft/class_2561; field_25686 field_241602_s_ - f Lnet/minecraft/class_2561; field_25682 field_241598_c_ - f Lnet/minecraft/class_5407; field_25688 field_241604_x_ - f Lnet/minecraft/class_2561; field_25685 field_241601_r_ - f Lnet/minecraft/class_2561; field_25687 field_241603_t_ - f Lnet/minecraft/class_353; field_2639 optionsRowList -c net/minecraft/class_452 net/minecraft/client/gui/IProgressMeter - m ()V method_2300 onStatsUpdated - f [Ljava/lang/String; field_2668 LOADING_STRINGS -c net/minecraft/class_447 net/minecraft/client/gui/screen/StatsScreen - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19392 func_213122_d - m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1792;)V method_2289 func_238667_a_ - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19391 func_238668_a_ - m (Lnet/minecraft/class_447;Lnet/minecraft/class_4587;IIII)V method_2260 func_238670_a_ - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19396 access$1400 - m ()V method_2267 initButtons - m (Lnet/minecraft/class_4185;)V method_19868 func_213109_d - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19395 func_238676_f_ - m ()V method_2270 initLists - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19394 func_213117_f - m (Lnet/minecraft/class_4185;)V method_19867 func_213115_c - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19393 func_238675_d_ - m (Lnet/minecraft/class_4185;)V method_19869 func_213113_a - m (Lnet/minecraft/class_4185;)V method_19866 func_213114_b - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19402 access$1900 - m (Lnet/minecraft/class_4280;)V method_19390 func_213110_a - m ()Lnet/minecraft/class_4280; method_19399 func_213116_d - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19401 access$1800 - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19400 access$1700 - m (Lnet/minecraft/class_4587;IIII)V method_2282 func_238674_c_ - m (I)I method_2285 func_195224_b - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19398 access$1600 - m (Lnet/minecraft/class_3445;)Ljava/lang/String; method_27027 func_238672_b_ - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19397 access$1500 - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_3469; method_2271 func_238673_b_ - m (Lnet/minecraft/class_447;Lnet/minecraft/class_4587;IILnet/minecraft/class_1792;)V method_2288 func_238671_a_ - m (Lnet/minecraft/class_3445;)Ljava/lang/String; method_27026 func_238666_a_ - m (Lnet/minecraft/class_447;I)I method_2284 func_238669_a_ - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_447$class_4200; method_2276 func_238677_g_ - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19404 func_238678_o_ - m (Lnet/minecraft/class_447;)Lnet/minecraft/class_327; method_19403 access$2000 - f Lnet/minecraft/class_447$class_4198; field_2644 generalStats - f Lnet/minecraft/class_447$class_4202; field_2646 mobStats - f Lnet/minecraft/class_447$class_4200; field_2642 itemStats - f Lnet/minecraft/class_3469; field_2647 stats - f Lnet/minecraft/class_437; field_2648 parentScreen - f Lnet/minecraft/class_4280; field_2643 displaySlot - f Z field_2645 doesGuiPauseGame - f Lnet/minecraft/class_2561; field_26546 field_243320_c -c net/minecraft/class_447$1 net/minecraft/client/gui/screen/StatsScreen$1 -c net/minecraft/class_447$class_4202 net/minecraft/client/gui/screen/StatsScreen$MobStatsList - f Lnet/minecraft/class_447; field_18763 field_148223_k -c net/minecraft/class_447$class_4202$class_4201 net/minecraft/client/gui/screen/StatsScreen$MobStatsList$Entry - f Lnet/minecraft/class_2561; field_26551 field_243325_f - f Z field_26550 field_243324_e - f Lnet/minecraft/class_447$class_4202; field_18761 field_214410_a - f Lnet/minecraft/class_2561; field_26548 field_243322_c - f Z field_26552 field_243326_g - f Lnet/minecraft/class_1299; field_18762 field_214411_b - f Lnet/minecraft/class_2561; field_26549 field_243323_d -c net/minecraft/class_447$class_4200 net/minecraft/client/gui/screen/StatsScreen$StatsList - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_2561;II)V method_19407 func_238680_a_ - m (Lnet/minecraft/class_3448;)I method_19409 func_195105_b - m (Lnet/minecraft/class_3448;)V method_19408 func_195107_a - m (I)Lnet/minecraft/class_3448; method_19410 func_195108_d - m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_2561; method_19406 func_200208_a - f Ljava/util/List; field_18754 field_195113_v - f Lnet/minecraft/class_3448; field_18759 field_195110_A - f [I field_18753 field_195112_D - f Lnet/minecraft/class_447; field_18752 field_148220_k - f Ljava/util/List; field_18757 field_195116_y - f I field_18756 field_195115_x - f I field_18760 field_195111_B - f Ljava/util/Comparator; field_18758 field_195117_z - f Ljava/util/List; field_18755 field_195114_w -c net/minecraft/class_447$class_4200$class_450 net/minecraft/client/gui/screen/StatsScreen$StatsList$Comparator - m (Ljava/lang/Object;Ljava/lang/Object;)I compare compare - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;)I method_2297 compare - f Lnet/minecraft/class_447$class_4200; field_2662 field_198835_a -c net/minecraft/class_447$class_4200$class_4199 net/minecraft/client/gui/screen/StatsScreen$StatsList$Entry - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_3445;IIZ)V method_19405 func_238681_a_ - f Lnet/minecraft/class_447$class_4200; field_18751 field_214407_a -c net/minecraft/class_447$class_4198 net/minecraft/client/gui/screen/StatsScreen$CustomStatsList - m (Lnet/minecraft/class_3445;)Ljava/lang/String; method_27028 func_238679_a_ - f Lnet/minecraft/class_447; field_18750 field_148208_k -c net/minecraft/class_447$class_4198$class_4197 net/minecraft/client/gui/screen/StatsScreen$CustomStatsList$Entry - f Lnet/minecraft/class_3445; field_18749 field_214405_b - f Lnet/minecraft/class_2561; field_26547 field_243321_c - f Lnet/minecraft/class_447$class_4198; field_18748 field_214404_a -c net/minecraft/class_453 net/minecraft/client/gui/advancements/AdvancementTabType - m (I)I method_2305 getY - m ()I method_2304 getMax - m (IIILnet/minecraft/class_918;Lnet/minecraft/class_1799;)V method_2306 drawIcon - m (IIIDD)Z method_2303 inInsideTabSelector - m (Ljava/lang/String;)Lnet/minecraft/class_453; valueOf valueOf - m (I)I method_2302 getX - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_332;IIZI)V method_2301 renderTabSelectorBackground - m ()[Lnet/minecraft/class_453; values values - f I field_2669 max - f I field_2670 height - f I field_2671 width - f I field_2672 textureY - f [Lnet/minecraft/class_453; field_2676 $VALUES - f Lnet/minecraft/class_453; field_2677 RIGHT - f I field_2674 textureX - f Lnet/minecraft/class_453; field_2673 BELOW - f Lnet/minecraft/class_453; field_2675 LEFT - f Lnet/minecraft/class_453; field_2678 ABOVE -c net/minecraft/class_453$1 net/minecraft/client/gui/advancements/AdvancementTabType$1 - f [I field_2679 field_192647_a -c net/minecraft/class_454 net/minecraft/client/gui/advancements/AdvancementTabGui - m ()Lnet/minecraft/class_457; method_2312 getScreen - m (Lnet/minecraft/class_310;Lnet/minecraft/class_457;ILnet/minecraft/class_161;)Lnet/minecraft/class_454; method_2317 create - m (Lnet/minecraft/class_4587;IIZ)V method_2311 renderTabSelectorBackground - m (IILnet/minecraft/class_918;)V method_2315 drawIcon - m ()Lnet/minecraft/class_2561; method_2309 getTitle - m (IIDD)Z method_2316 isInsideTabSelector - m (Lnet/minecraft/class_4587;)V method_2310 drawTabBackground - m (DD)V method_2313 dragSelectedGui - m (Lnet/minecraft/class_4587;IIII)V method_2314 drawTabTooltips - m (Lnet/minecraft/class_456;Lnet/minecraft/class_161;)V method_2319 addGuiAdvancement - m ()Lnet/minecraft/class_161; method_2307 getAdvancement - m (Lnet/minecraft/class_161;)V method_2318 addAdvancement - m (Lnet/minecraft/class_161;)Lnet/minecraft/class_456; method_2308 getAdvancementGui - f D field_2690 scrollX - f Lnet/minecraft/class_161; field_2682 advancement - f I field_2693 minY - f I field_2694 minX - f Lnet/minecraft/class_185; field_2695 display - f Lnet/minecraft/class_453; field_2684 type - f Lnet/minecraft/class_456; field_2696 root - f Lnet/minecraft/class_1799; field_2697 icon - f D field_2689 scrollY - f Lnet/minecraft/class_2561; field_2686 title - f Ljava/util/Map; field_2685 guis - f F field_2688 fade - f I field_2691 maxY - f I field_2692 maxX - f Z field_2683 centered - f Lnet/minecraft/class_310; field_2680 minecraft - f I field_2681 index - f Lnet/minecraft/class_457; field_2687 screen -c net/minecraft/class_455 net/minecraft/client/gui/advancements/AdvancementState - m (Ljava/lang/String;)Lnet/minecraft/class_455; valueOf valueOf - m ()I method_2320 getId - m ()[Lnet/minecraft/class_455; values values - f I field_2700 id - f Lnet/minecraft/class_455; field_2701 OBTAINED - f [Lnet/minecraft/class_455; field_2698 $VALUES - f Lnet/minecraft/class_455; field_2699 UNOBTAINED -c net/minecraft/class_456 net/minecraft/client/gui/advancements/AdvancementEntryGui - m (Lnet/minecraft/class_2561;I)Ljava/util/List; method_2330 getDescriptionLines - m (Lnet/minecraft/class_456;)V method_2322 addGuiAdvancement - m (Lnet/minecraft/class_4587;II)V method_2325 drawAdvancement - m ()V method_2332 attachToParent - m ()I method_2327 getX - m ()I method_2326 getY - m (Lnet/minecraft/class_167;)V method_2333 setAdvancementProgress - m (IIII)Z method_2329 isMouseOver - m (Lnet/minecraft/class_161;)Lnet/minecraft/class_456; method_2328 getFirstVisibleParent - m (Lnet/minecraft/class_4587;IIIIIIIII)V method_2324 drawDescriptionBox - m (Lnet/minecraft/class_4587;IIFII)V method_2331 drawAdvancementHover - m (Lnet/minecraft/class_5225;Ljava/util/List;)F method_27572 getTextWidth - m (Lnet/minecraft/class_4587;IIIIIIII)V method_2321 drawDescriptionBoxBorder - m (Lnet/minecraft/class_4587;IIZ)V method_2323 drawConnectionLineToParent - f Lnet/minecraft/class_454; field_2703 guiAdvancementTab - f [I field_24262 LINE_BREAK_VALUES - f Ljava/util/List; field_2705 description - f I field_2715 width - f Ljava/util/List; field_2707 children - f Lnet/minecraft/class_185; field_2712 displayInfo - f Lnet/minecraft/class_167; field_2714 advancementProgress - f I field_2710 y - f Lnet/minecraft/class_310; field_2704 minecraft - f I field_2711 x - f Lnet/minecraft/class_2960; field_2709 WIDGETS - f Lnet/minecraft/class_456; field_2706 parent - f Lnet/minecraft/class_5481; field_2713 title - f Lnet/minecraft/class_161; field_2702 advancement -c net/minecraft/class_457 net/minecraft/client/gui/advancements/AdvancementsScreen - m (Lnet/minecraft/class_161;)Lnet/minecraft/class_454; method_2336 getTab - m (Lnet/minecraft/class_161;)Lnet/minecraft/class_456; method_2335 getAdvancementGui - m (Lnet/minecraft/class_4587;IIII)V method_2337 drawWindowBackground - m (Lnet/minecraft/class_4587;IIII)V method_2338 drawWindowTooltips - m (Lnet/minecraft/class_4587;II)V method_2334 renderWindow - f Lnet/minecraft/class_632; field_2721 clientAdvancementManager - f Lnet/minecraft/class_2561; field_26553 SAD_LABEL - f Z field_2718 isScrolling - f Lnet/minecraft/class_2960; field_2716 TABS - f Lnet/minecraft/class_2561; field_26554 EMPTY - f Lnet/minecraft/class_2960; field_2717 WINDOW - f Lnet/minecraft/class_2561; field_26555 GUI_LABEL - f Lnet/minecraft/class_454; field_2720 selectedTab - f Ljava/util/Map; field_2719 tabs -c net/minecraft/class_458 net/minecraft/client/gui/screen/ControlsScreen - m (Lnet/minecraft/class_4185;)V method_20412 func_213126_c - m (Lnet/minecraft/class_4185;)V method_19872 func_213125_b - m (Lnet/minecraft/class_4185;)V method_19873 func_213124_a - f Lnet/minecraft/class_4185; field_2725 buttonReset - f Lnet/minecraft/class_459; field_2728 keyBindingList - f J field_2723 time - f Lnet/minecraft/class_304; field_2727 buttonId -c net/minecraft/class_459 net/minecraft/client/gui/widget/list/KeyBindingList - m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20117 func_214340_i - m (Lnet/minecraft/class_459;)Lnet/minecraft/class_458; method_2343 func_238698_e_ - m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20110 access$100 - m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20111 func_214341_b - m (Lnet/minecraft/class_459;)I method_2345 func_238699_f_ - m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20112 func_214336_c - m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20113 func_214337_d - m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20114 func_238700_g_ - m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20115 func_214342_g - m (Lnet/minecraft/class_459;)Lnet/minecraft/class_310; method_20116 func_214343_h - f Lnet/minecraft/class_458; field_2735 controlsScreen - f I field_2733 maxListLabelWidth -c net/minecraft/class_459$class_460 net/minecraft/client/gui/widget/list/KeyBindingList$CategoryEntry - f Lnet/minecraft/class_459; field_2738 field_148287_a - f I field_2737 labelWidth - f Lnet/minecraft/class_2561; field_2736 labelText -c net/minecraft/class_459$class_462 net/minecraft/client/gui/widget/list/KeyBindingList$KeyEntry - m (Lnet/minecraft/class_304;Lnet/minecraft/class_4185;)V method_19870 func_214387_a - m (Lnet/minecraft/class_304;Lnet/minecraft/class_4185;)V method_19871 func_214386_b - f Lnet/minecraft/class_2561; field_2741 keyDesc - f Lnet/minecraft/class_304; field_2740 keybinding - f Lnet/minecraft/class_459; field_2742 field_148284_a - f Lnet/minecraft/class_4185; field_2739 btnChangeKeyBinding - f Lnet/minecraft/class_4185; field_2743 btnReset -c net/minecraft/class_459$class_462$2 net/minecraft/client/gui/widget/list/KeyBindingList$KeyEntry$2 - f Lnet/minecraft/class_459; field_19190 field_194936_o - f Lnet/minecraft/class_459$class_462; field_24266 field_194935_q - f Lnet/minecraft/class_2561; field_24265 field_238702_b_ -c net/minecraft/class_459$class_462$1 net/minecraft/client/gui/widget/list/KeyBindingList$KeyEntry$1 - f Lnet/minecraft/class_459$class_462; field_24264 field_194932_q - f Lnet/minecraft/class_2561; field_24263 field_238701_c_ - f Lnet/minecraft/class_459; field_19187 field_194933_o - f Lnet/minecraft/class_304; field_19188 field_194931_p -c net/minecraft/class_459$class_461 net/minecraft/client/gui/widget/list/KeyBindingList$Entry -c net/minecraft/class_459$1 net/minecraft/client/gui/widget/list/KeyBindingList$1 -c net/minecraft/class_5289 net/minecraft/client/gui/screen/GamemodeSelectionScreen - m (Lnet/minecraft/class_5289$class_5291;Lnet/minecraft/class_5289$class_5290;)V method_28065 func_238714_a_ - m (Lnet/minecraft/class_5289;)Lnet/minecraft/class_918; method_28066 func_238715_a_ - m ()Lnet/minecraft/class_2960; method_28067 func_238716_g_ - m ()V method_28068 func_238717_j_ - m (Lnet/minecraft/class_310;Ljava/util/Optional;)V method_28064 func_238713_a_ - m ()Lnet/minecraft/class_1934; method_30106 func_241608_k_ - m ()Z method_28069 func_238718_l_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_5289$class_5290;)V method_28062 func_238712_a_ - f I field_24570 field_238708_r_ - f I field_24571 field_238709_s_ - f I field_24567 field_238704_b_ - f Lnet/minecraft/class_2561; field_25454 field_238705_c_ - f Ljava/util/List; field_24573 field_238711_u_ - f Z field_24572 field_238710_t_ - f Ljava/util/Optional; field_24568 field_238706_p_ - f Lnet/minecraft/class_2960; field_24566 field_238703_a_ - f Ljava/util/Optional; field_24569 field_238707_q_ -c net/minecraft/class_5289$class_5291 net/minecraft/client/gui/screen/GamemodeSelectionScreen$SelectorWidget - m (Lnet/minecraft/class_5289$class_5291;)Lnet/minecraft/class_5289$class_5290; method_28081 func_238739_a_ - m (Z)V method_28083 func_238741_e_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1060;)V method_28080 func_238738_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1060;)V method_28082 func_238740_b_ - f Z field_24587 field_238737_c_ - f Lnet/minecraft/class_5289; field_24585 field_238735_a_ - f Lnet/minecraft/class_5289$class_5290; field_24586 field_238736_b_ -c net/minecraft/class_5289$class_5290 net/minecraft/client/gui/screen/GamemodeSelectionScreen$Mode - m (Lnet/minecraft/class_918;II)V method_28074 func_238729_a_ - m (Lnet/minecraft/class_5289$class_5290;)Ljava/lang/String; method_28072 func_238727_a_ - m (Lnet/minecraft/class_5289$class_5290;)Lnet/minecraft/class_2561; method_28079 func_238734_c_ - m ()Lnet/minecraft/class_2561; method_28070 func_238725_a_ - m (Lnet/minecraft/class_1934;)Ljava/util/Optional; method_28071 func_238726_a_ - m (Lnet/minecraft/class_5289$class_5290;)Ljava/util/Optional; method_28077 func_238732_b_ - m (Lnet/minecraft/class_1934;)Ljava/util/Optional; method_28076 func_238731_b_ - m ()[Lnet/minecraft/class_5289$class_5290; values values - m ()Ljava/util/Optional; method_28078 func_238733_c_ - m (Ljava/lang/String;)Lnet/minecraft/class_5289$class_5290; valueOf valueOf - m (Lnet/minecraft/class_5289$class_5290;Lnet/minecraft/class_918;II)V method_28073 func_238728_a_ - m ()Ljava/lang/String; method_28075 func_238730_b_ - f [Lnet/minecraft/class_5289$class_5290; field_24580 field_238721_e_ - f Lnet/minecraft/class_5289$class_5290; field_24579 SPECTATOR - f Lnet/minecraft/class_2561; field_24581 field_238722_f_ - f Lnet/minecraft/class_5289$class_5290; field_24577 SURVIVAL - f Lnet/minecraft/class_5289$class_5290; field_24578 ADVENTURE - f Lnet/minecraft/class_5289$class_5290; field_24576 CREATIVE - f [Lnet/minecraft/class_5289$class_5290; field_24584 $VALUES - f Lnet/minecraft/class_1799; field_24583 field_238724_h_ - f Ljava/lang/String; field_24582 field_238723_g_ -c net/minecraft/class_5289$1 net/minecraft/client/gui/screen/GamemodeSelectionScreen$1 - f [I field_24575 field_238720_b_ - f [I field_24574 field_238719_a_ -c net/minecraft/class_465 net/minecraft/client/gui/screen/inventory/ContainerScreen - m (IIIIDD)Z method_2378 isPointInRegion - m (II)Z method_2384 itemStackMoved - m (I)V method_30107 hotkeySwapItems - m (Lnet/minecraft/class_1799;IILjava/lang/String;)V method_2382 drawItemStack - m (DDIII)Z method_2381 hasClickedOutside - m ()V method_2379 updateDragSplitting - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1735;)V method_2385 moveItems - m (DD)Lnet/minecraft/class_1735; method_2386 getSelectedSlot - m (Lnet/minecraft/class_1735;DD)Z method_2387 isSlotSelected - m (Lnet/minecraft/class_4587;FII)V method_2389 drawGuiContainerBackgroundLayer - m (Lnet/minecraft/class_1735;IILnet/minecraft/class_1713;)V method_2383 handleMouseClick - m (Lnet/minecraft/class_4587;II)V method_2388 drawGuiContainerForegroundLayer - m (Lnet/minecraft/class_4587;II)V method_2380 renderHoveredTooltip - f Lnet/minecraft/class_1735; field_2780 currentDragTargetSlot - f I field_2790 dragSplittingLimit - f I field_2776 guiLeft - f I field_2792 xSize - f Lnet/minecraft/class_1799; field_2782 draggedStack - f I field_2778 dragSplittingButton - f I field_2800 guiTop - f I field_2779 ySize - f Lnet/minecraft/class_1735; field_2802 returningStackDestSlot - f I field_2803 dragSplittingRemnant - f Lnet/minecraft/class_1735; field_2777 clickedSlot - f J field_2788 lastClickTime - f I field_25268 titleY - f I field_2784 touchUpX - f I field_25269 playerInventoryTitleX - f Lnet/minecraft/class_2960; field_2801 INVENTORY_BACKGROUND - f I field_2796 touchUpY - f Lnet/minecraft/class_1661; field_17410 playerInventory - f I field_25270 playerInventoryTitleY - f Lnet/minecraft/class_1799; field_2785 returningStack - f J field_2795 returningStackTime - f Z field_2789 isRightMouseClick - f Lnet/minecraft/class_1735; field_2799 lastClickSlot - f J field_2781 dragItemDropDelay - f Z field_2783 doubleClick - f Lnet/minecraft/class_1735; field_2787 hoveredSlot - f I field_25267 titleX - f Ljava/util/Set; field_2793 dragSplittingSlots - f I field_2786 lastClickButton - f Lnet/minecraft/class_1799; field_2791 shiftClickedSlot - f Z field_2798 ignoreMouseUp - f Z field_2794 dragSplitting - f Lnet/minecraft/class_1703; field_2797 container -c net/minecraft/class_463 net/minecraft/client/gui/screen/AbstractCommandBlockScreen - m ()I method_2364 func_195236_i - m (Ljava/lang/String;)V method_2360 func_214185_b - m (Lnet/minecraft/class_1918;)V method_2352 func_195235_a - m ()Lnet/minecraft/class_1918; method_2351 getLogic - m (Lnet/minecraft/class_463;)Lnet/minecraft/class_4717; method_23962 func_228185_a_ - m ()V method_2368 updateTrackOutput - m ()V method_2359 func_195234_k - m (Lnet/minecraft/class_4185;)V method_19876 func_214187_c - m (Lnet/minecraft/class_4185;)V method_19875 func_214186_b - m (Lnet/minecraft/class_4185;)V method_19874 func_214184_a - f Lnet/minecraft/class_4185; field_2762 doneButton - f Lnet/minecraft/class_2561; field_26556 field_243330_s - f Lnet/minecraft/class_4717; field_21617 suggestionHelper - f Lnet/minecraft/class_342; field_2755 resultTextField - f Lnet/minecraft/class_2561; field_26558 field_243332_u - f Lnet/minecraft/class_342; field_2751 commandTextField - f Lnet/minecraft/class_2561; field_26557 field_243331_t - f Lnet/minecraft/class_4185; field_2760 trackOutputButton - f Z field_2752 trackOutput - f Lnet/minecraft/class_4185; field_2753 cancelButton -c net/minecraft/class_463$1 net/minecraft/client/gui/screen/AbstractCommandBlockScreen$1 - f Lnet/minecraft/class_463; field_21632 field_228186_a_ -c net/minecraft/class_471 net/minecraft/client/gui/screen/inventory/AnvilScreen - m (Ljava/lang/String;)V method_2403 renameItem - f Lnet/minecraft/class_2561; field_26559 field_243333_B - f Lnet/minecraft/class_2960; field_2819 ANVIL_RESOURCE - f Lnet/minecraft/class_342; field_2821 nameField -c net/minecraft/class_489 net/minecraft/client/gui/screen/inventory/AbstractFurnaceScreen - m (Lnet/minecraft/class_4185;)V method_19877 func_214087_a - f Z field_2925 widthTooNarrowIn - f Lnet/minecraft/class_517; field_2924 recipeGui - f Lnet/minecraft/class_2960; field_18975 guiTexture - f Lnet/minecraft/class_2960; field_2926 BUTTON_TEXTURE -c net/minecraft/class_3871 net/minecraft/client/gui/screen/inventory/BlastFurnaceScreen - f Lnet/minecraft/class_2960; field_17115 GUI_TEXTURE -c net/minecraft/class_466 net/minecraft/client/gui/screen/inventory/BeaconScreen - m (Lnet/minecraft/class_466;Z)Z method_17545 func_214099_a - m (Lnet/minecraft/class_466;)Lnet/minecraft/class_1291; method_17548 func_214096_d - m (Lnet/minecraft/class_466;Lnet/minecraft/class_1291;)Lnet/minecraft/class_1291; method_17544 func_214095_a - m ()Lnet/minecraft/class_2960; method_2398 func_214103_b - m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2400 func_214102_j - m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2399 func_214098_k - m (Lnet/minecraft/class_466;)Ljava/util/List; method_2396 func_214104_a - m (Lnet/minecraft/class_466;)Ljava/util/List; method_2397 func_214101_b - m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2393 access$600 - m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2395 access$700 - m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2394 access$800 - m (Lnet/minecraft/class_466;Lnet/minecraft/class_1291;)Lnet/minecraft/class_1291; method_17546 func_214100_b - m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2392 access$900 - m (Lnet/minecraft/class_466;)Lnet/minecraft/class_1291; method_17547 func_214097_c - m (Lnet/minecraft/class_466;)Lnet/minecraft/class_310; method_2390 access$1000 - f Lnet/minecraft/class_2561; field_26560 field_243334_B - f Lnet/minecraft/class_2561; field_26561 field_243335_C - f Lnet/minecraft/class_466$class_468; field_2804 beaconConfirmButton - f Lnet/minecraft/class_2960; field_2808 BEACON_GUI_TEXTURES - f Lnet/minecraft/class_1291; field_17413 secondaryEffect - f Z field_2805 buttonsNotDrawn - f Lnet/minecraft/class_1291; field_17412 primaryEffect -c net/minecraft/class_466$1 net/minecraft/client/gui/screen/inventory/BeaconScreen$1 - f Lnet/minecraft/class_1704; field_17414 field_213128_a - f Lnet/minecraft/class_466; field_17415 field_213129_b -c net/minecraft/class_466$class_4072 net/minecraft/client/gui/screen/inventory/BeaconScreen$SpriteButton - f I field_18224 u - f I field_18225 v -c net/minecraft/class_466$class_470 net/minecraft/client/gui/screen/inventory/BeaconScreen$Button - m (Z)V method_2401 setSelected - m ()Z method_2402 isSelected - m (Lnet/minecraft/class_4587;)V method_18641 func_230454_a_ - f Z field_2815 selected -c net/minecraft/class_466$class_467 net/minecraft/client/gui/screen/inventory/BeaconScreen$CancelButton - f Lnet/minecraft/class_466; field_2809 field_146146_o -c net/minecraft/class_466$class_469 net/minecraft/client/gui/screen/inventory/BeaconScreen$PowerButton - m (Lnet/minecraft/class_1291;Z)Lnet/minecraft/class_2561; method_30902 func_243337_a - f Lnet/minecraft/class_2561; field_26562 field_243336_e - f Z field_17416 field_212947_d - f Lnet/minecraft/class_466; field_2811 field_146150_o - f Lnet/minecraft/class_1291; field_2813 effect - f Lnet/minecraft/class_1058; field_18223 field_212946_c -c net/minecraft/class_466$class_468 net/minecraft/client/gui/screen/inventory/BeaconScreen$ConfirmButton - f Lnet/minecraft/class_466; field_2810 field_146147_o -c net/minecraft/class_3872 net/minecraft/client/gui/screen/ReadBookScreen - m (I)Z method_17556 showPage - m (I)Z method_17789 showPage2 - m ()V method_17558 addChangePageButtons - m ()V method_17057 previousPage - m ()V method_17058 nextPage - m ()V method_17059 updateButtons - m (Lnet/minecraft/class_3872$class_3931;)V method_17554 func_214155_a - m ()V method_17557 addDoneButton - m (Lnet/minecraft/class_2487;)Ljava/util/List; method_17555 nbtPagesToStrings - m (Lnet/minecraft/class_4185;)V method_19886 func_214161_c - m ()I method_17055 getPageCount - m (Lnet/minecraft/class_4185;)V method_19885 func_214159_b - m (DD)Lnet/minecraft/class_2583; method_17048 func_238805_a_ - m (Lnet/minecraft/class_4185;)V method_19884 func_214158_a - f Z field_18976 pageTurnSounds - f Lnet/minecraft/class_3872$class_3931; field_17418 bookInfo - f Ljava/util/List; field_17120 cachedPageLines - f Lnet/minecraft/class_3872$class_3931; field_17417 EMPTY_BOOK - f Lnet/minecraft/class_474; field_17123 buttonPreviousPage - f Lnet/minecraft/class_474; field_17122 buttonNextPage - f I field_17119 currPage - f I field_17121 cachedPage - f Lnet/minecraft/class_2561; field_25897 field_243344_s - f Lnet/minecraft/class_2960; field_17117 BOOK_TEXTURES -c net/minecraft/class_3872$1 net/minecraft/client/gui/screen/ReadBookScreen$1 -c net/minecraft/class_3872$class_3932 net/minecraft/client/gui/screen/ReadBookScreen$UnwrittenBookInfo - m (Lnet/minecraft/class_1799;)Ljava/util/List; method_17564 func_216919_b - f Ljava/util/List; field_17419 pages -c net/minecraft/class_3872$class_3931 net/minecraft/client/gui/screen/ReadBookScreen$IBookInfo - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_3872$class_3931; method_17562 func_216917_a - m ()I method_17560 getPageCount - m (I)Lnet/minecraft/class_5348; method_17563 func_238806_b_ - m (I)Lnet/minecraft/class_5348; method_17561 func_230456_a_ -c net/minecraft/class_3872$class_3933 net/minecraft/client/gui/screen/ReadBookScreen$WrittenBookInfo - m (Lnet/minecraft/class_1799;)Ljava/util/List; method_17565 func_216921_b - f Ljava/util/List; field_17420 pages -c net/minecraft/class_473 net/minecraft/client/gui/screen/EditBookScreen - m (III)Z method_2446 keyPressedInTitle - m ()V method_2414 func_238778_z_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_473$class_5234;Z)V method_27581 func_238756_a_ - m ()V method_17047 trimEmptyPages - m ([II)I method_27587 func_238763_a_ - m (Lnet/minecraft/class_473$class_5234;)Lnet/minecraft/class_473$class_5234; method_27590 func_238767_b_ - m ()V method_27598 func_238776_x_ - m ()Lnet/minecraft/class_473$class_5233; method_27578 func_238753_E_ - m (Ljava/lang/String;)Z method_27596 func_238774_g_ - m (I)V method_27589 func_238765_b_ - m (Lnet/minecraft/class_4185;)V method_19880 func_214212_c_ - m (Ljava/lang/String;)V method_27594 func_238772_f_ - m ()Ljava/lang/String; method_2427 getCurrPageText - m (Lnet/minecraft/class_4185;)V method_19878 func_214205_a_ - m ()V method_2444 nextPage - m (Ljava/lang/String;)V method_2439 func_214217_j - m ()V method_27577 func_238751_C_ - m ()Ljava/lang/String; method_27595 func_238773_g_ - m ()I method_17046 getPageCount - m (Lnet/minecraft/class_4185;)V method_19882 func_214204_a - m (Ljava/lang/String;Lnet/minecraft/class_5225;IIII)Lnet/minecraft/class_768; method_27585 func_238761_a_ - m ()Lnet/minecraft/class_473$class_5233; method_27576 func_238750_B_ - m (Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/lang/String;Lorg/apache/commons/lang3/mutable/MutableBoolean;Lit/unimi/dsi/fastutil/ints/IntList;Ljava/util/List;Lnet/minecraft/class_2583;II)V method_27586 func_238762_a_ - m (III)Z method_27592 keyPressedInBook - m ([II)I method_27591 func_238768_b_ - m ()V method_2436 addNewPage - m (Z)V method_2407 sendBookToServer - m ()V method_27597 func_238775_w_ - m (I)V method_27580 func_238755_a_ - m (Lnet/minecraft/class_473$class_5234;Lnet/minecraft/class_473$class_5234;)Lnet/minecraft/class_768; method_27583 func_238759_a_ - m ()V method_2421 func_238777_y_ - m (Lnet/minecraft/class_473$class_5234;)Lnet/minecraft/class_473$class_5234; method_27582 func_238758_a_ - m ([Lnet/minecraft/class_768;)V method_27588 func_238764_a_ - m (Ljava/lang/String;)Z method_27593 func_238771_e_ - m (Lnet/minecraft/class_4185;)V method_19879 func_214208_b_ - m ()V method_2437 previousPage - m ()V method_2413 updateButtons - m (Ljava/lang/String;)V method_27584 func_238760_a_ - m ()V method_27872 func_238752_D_ - m ()Ljava/lang/String; method_27579 func_238754_F_ - m (Lnet/minecraft/class_4185;)V method_19883 func_214201_b - m (Lnet/minecraft/class_4185;)V method_19881 func_214195_d_ - f Lnet/minecraft/class_5481; field_25895 field_243342_c - f Lnet/minecraft/class_4185; field_2841 buttonFinalize - f Lnet/minecraft/class_4185; field_2848 buttonDone - f J field_2830 lastClickTime - f Ljava/lang/String; field_2847 bookTitle - f Z field_2828 bookGettingSigned - f Lnet/minecraft/class_2561; field_25894 field_243341_b - f Lnet/minecraft/class_473$class_5233; field_24268 field_238747_F_ - f Lnet/minecraft/class_2561; field_25893 field_243340_a - f I field_2840 currPage - f I field_2827 cachedPage - f Lnet/minecraft/class_1799; field_2835 book - f Lnet/minecraft/class_3728; field_24269 field_238748_u_ - f Lnet/minecraft/class_4185; field_2831 buttonSign - f Lnet/minecraft/class_474; field_2839 buttonPreviousPage - f Z field_2837 bookIsModified - f Lnet/minecraft/class_2561; field_25892 field_243339_L - f Lnet/minecraft/class_1657; field_2826 editingPlayer - f Lnet/minecraft/class_4185; field_2849 buttonCancel - f Lnet/minecraft/class_2561; field_25891 field_243338_K - f I field_2844 updateCount - f Ljava/util/List; field_17116 bookPages - f Lnet/minecraft/class_474; field_2843 buttonNextPage - f Lnet/minecraft/class_3728; field_24270 field_238749_v_ - f Lnet/minecraft/class_5481; field_25896 field_243343_p - f Lnet/minecraft/class_1268; field_2832 hand -c net/minecraft/class_473$class_5234 net/minecraft/client/gui/screen/EditBookScreen$Point - f I field_24281 x - f I field_24282 y -c net/minecraft/class_473$class_475 net/minecraft/client/gui/screen/EditBookScreen$BookLine - m (Lnet/minecraft/class_473$class_475;)I method_17552 func_238801_b_ - m (Lnet/minecraft/class_473$class_475;)Lnet/minecraft/class_2583; method_27610 func_238804_e_ - m (Lnet/minecraft/class_473$class_475;)Ljava/lang/String; method_27609 func_238803_d_ - m (Lnet/minecraft/class_473$class_475;)I method_17550 func_238802_c_ - m (Lnet/minecraft/class_473$class_475;)Lnet/minecraft/class_2561; method_27608 func_238800_a_ - f Ljava/lang/String; field_24279 field_238796_b_ - f Lnet/minecraft/class_2561; field_24280 field_238797_c_ - f I field_2853 field_238799_e_ - f Lnet/minecraft/class_2583; field_24278 field_238795_a_ - f I field_2854 field_238798_d_ -c net/minecraft/class_473$class_5233 net/minecraft/client/gui/screen/EditBookScreen$BookPage - m (Lnet/minecraft/class_473$class_5233;)Z method_27607 func_238794_d_ - m (I)I method_27600 func_238787_a_ - m (Lnet/minecraft/class_473$class_5233;)[Lnet/minecraft/class_768; method_27605 func_238792_b_ - m (Lnet/minecraft/class_473$class_5233;)[Lnet/minecraft/class_473$class_475; method_27603 func_238790_a_ - m (I)I method_27604 func_238791_b_ - m (II)I method_27601 func_238788_a_ - m (Lnet/minecraft/class_327;Lnet/minecraft/class_473$class_5234;)I method_27602 func_238789_a_ - m ()Lnet/minecraft/class_473$class_5233; method_27599 func_238786_a_ - m (Lnet/minecraft/class_473$class_5233;)Lnet/minecraft/class_473$class_5234; method_27606 func_238793_c_ - f Lnet/minecraft/class_473$class_5233; field_24271 field_238779_a_ - f Z field_24274 field_238782_d_ - f [Lnet/minecraft/class_768; field_24277 field_238785_g_ - f [I field_24275 field_238783_e_ - f [Lnet/minecraft/class_473$class_475; field_24276 field_238784_f_ - f Lnet/minecraft/class_473$class_5234; field_24273 field_238781_c_ - f Ljava/lang/String; field_24272 field_238780_b_ -c net/minecraft/class_3934 net/minecraft/client/gui/screen/inventory/CartographyTableScreen - m (Lnet/minecraft/class_22;IIF)V method_17566 drawMapItem - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_22;ZZZZ)V method_17567 func_238807_a_ - f Lnet/minecraft/class_2960; field_17421 CONTAINER_TEXTURE -c net/minecraft/class_472 net/minecraft/client/gui/screen/inventory/BrewingStandScreen - f Lnet/minecraft/class_2960; field_2823 BREWING_STAND_GUI_TEXTURES - f [I field_2824 BUBBLELENGTHS -c net/minecraft/class_476 net/minecraft/client/gui/screen/inventory/ChestScreen - f I field_2864 inventoryRows - f Lnet/minecraft/class_2960; field_2861 CHEST_GUI_TEXTURE -c net/minecraft/class_477 net/minecraft/client/gui/screen/CommandBlockScreen - m (Lnet/minecraft/class_4185;)V method_19888 func_214190_b - m ()V method_2454 updateAutoExec - m (Lnet/minecraft/class_4185;)V method_19887 func_214189_a - m ()V method_2457 updateGui - m ()V method_2451 updateMode - m ()V method_2450 nextMode - m ()V method_2452 updateConditional - m (Lnet/minecraft/class_4185;)V method_19889 func_214191_c - f Z field_2868 conditional - f Lnet/minecraft/class_2593$class_2594; field_2870 commandBlockMode - f Lnet/minecraft/class_2593; field_2865 commandBlock - f Z field_2867 automatic - f Lnet/minecraft/class_4185; field_2866 autoExecBtn - f Lnet/minecraft/class_4185; field_2871 conditionalBtn - f Lnet/minecraft/class_4185; field_2869 modeBtn -c net/minecraft/class_477$1 net/minecraft/client/gui/screen/CommandBlockScreen$1 - f [I field_2875 field_216930_a -c net/minecraft/class_478 net/minecraft/client/gui/screen/inventory/CreativeCraftingListener - f Lnet/minecraft/class_310; field_2876 mc -c net/minecraft/class_479 net/minecraft/client/gui/screen/inventory/CraftingScreen - m (Lnet/minecraft/class_4185;)V method_19890 func_214076_a - f Lnet/minecraft/class_2960; field_2878 CRAFTING_TABLE_GUI_TEXTURES - f Lnet/minecraft/class_2960; field_2881 RECIPE_BUTTON_TEXTURE - f Lnet/minecraft/class_507; field_2880 recipeBookGui - f Z field_2877 widthTooNarrow -c net/minecraft/class_481 net/minecraft/client/gui/screen/inventory/CreativeScreen - m ()Lnet/minecraft/class_1277; method_2472 access$000 - m (Lnet/minecraft/class_1735;)Z method_2470 hasTmpInventory - m ()V method_2464 updateCreativeSearch - m (Ljava/lang/String;)V method_15871 searchTags - m ()Z method_2465 needsScrollBars - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1761;II)Z method_2471 func_238809_a_ - m (Lnet/minecraft/class_1761;DD)Z method_2463 isMouseOverGroup - m ()I method_2469 getSelectedTabIndex - m (Ljava/lang/String;Lnet/minecraft/class_2960;)Z method_15875 func_214084_a - m (Lnet/minecraft/class_1761;)V method_2466 setCurrentCreativeTab - m (Lnet/minecraft/class_310;IZZ)V method_2462 handleHotbarSnapshots - m (Lnet/minecraft/class_5414;Lnet/minecraft/class_2960;)V method_15873 func_214082_a - m (Lnet/minecraft/class_1792;Ljava/util/List;Lnet/minecraft/class_2960;Lnet/minecraft/class_3494;)V method_15872 func_214083_a - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1761;)V method_2468 func_238808_a_ - m (DD)Z method_2467 func_195376_a - m (Ljava/lang/String;Ljava/lang/String;Lnet/minecraft/class_2960;)Z method_15874 func_214081_a - f Z field_2888 field_195377_F - f Z field_2887 field_199506_G - f Lnet/minecraft/class_2960; field_2893 CREATIVE_INVENTORY_TABS - f Lnet/minecraft/class_1735; field_2889 destroyItemSlot - f Z field_2892 isScrolling - f Lnet/minecraft/class_478; field_2891 listener - f F field_2890 currentScroll - f I field_2896 selectedTabIndex - f Lnet/minecraft/class_2561; field_26563 field_243345_D - f Lnet/minecraft/class_1277; field_2895 TMP_INVENTORY - f Ljava/util/List; field_2886 originalSlots - f Ljava/util/Map; field_16201 tagSearchResults - f Lnet/minecraft/class_342; field_2894 searchField -c net/minecraft/class_481$class_484 net/minecraft/client/gui/screen/inventory/CreativeScreen$CreativeSlot - m (Lnet/minecraft/class_481$class_484;)Lnet/minecraft/class_1735; method_2475 access$100 - f Lnet/minecraft/class_1735; field_2898 slot -c net/minecraft/class_481$class_483 net/minecraft/client/gui/screen/inventory/CreativeScreen$CreativeContainer - m ()Z method_2474 canScroll - m (F)V method_2473 scrollTo - f Lnet/minecraft/class_2371; field_2897 itemList -c net/minecraft/class_481$class_482 net/minecraft/client/gui/screen/inventory/CreativeScreen$LockedSlot -c net/minecraft/class_485 net/minecraft/client/gui/DisplayEffectsScreen - m (Lnet/minecraft/class_4587;IILjava/lang/Iterable;)V method_18642 renderEffectBackground - m (Lnet/minecraft/class_4587;IILjava/lang/Iterable;)V method_18643 renderEffectSprites - m (Lnet/minecraft/class_4587;IILjava/lang/Iterable;)V method_18644 renderEffectText - m ()V method_2476 updateActivePotionEffects - m (Lnet/minecraft/class_4587;)V method_2477 renderEffects - f Z field_2900 hasActivePotionEffects -c net/minecraft/class_480 net/minecraft/client/gui/screen/inventory/DispenserScreen - f Lnet/minecraft/class_2960; field_2885 DISPENSER_GUI_TEXTURES -c net/minecraft/class_486 net/minecraft/client/gui/screen/EnchantmentScreen - m ()V method_2478 tickBook - f F field_2905 open - f F field_2904 oOpen - f Ljava/util/Random; field_2911 random - f F field_2912 flip - f I field_2915 ticks - f Lnet/minecraft/class_557; field_2908 MODEL_BOOK - f F field_2914 oFlip - f Lnet/minecraft/class_1799; field_2913 last - f Lnet/minecraft/class_2960; field_2901 ENCHANTMENT_TABLE_BOOK_TEXTURE - f Lnet/minecraft/class_2960; field_2910 ENCHANTMENT_TABLE_GUI_TEXTURE - f F field_2909 flipT - f F field_2906 flipA -c net/minecraft/class_487 net/minecraft/util/EnchantmentNameParts - m ()Lnet/minecraft/class_487; method_2481 getInstance - m (Lnet/minecraft/class_327;I)Lnet/minecraft/class_5348; method_2479 getGalacticEnchantmentName - m (J)V method_2480 reseedRandomGenerator - f Lnet/minecraft/class_2583; field_24284 GALACTIC_STYLE - f Ljava/util/Random; field_2918 rand - f Lnet/minecraft/class_2960; field_24283 GALACTIC_ALT_FONT - f [Ljava/lang/String; field_2916 namePartsArray - f Lnet/minecraft/class_487; field_2917 INSTANCE -c net/minecraft/class_3802 net/minecraft/client/gui/screen/GrindstoneScreen - f Lnet/minecraft/class_2960; field_16769 GRINDSTONE_GUI_TEXTURES -c net/minecraft/class_3873 net/minecraft/client/gui/screen/inventory/FurnaceScreen - f Lnet/minecraft/class_2960; field_17127 FURNACE_GUI_TEXTURES -c net/minecraft/class_491 net/minecraft/client/gui/screen/inventory/HorseInventoryScreen - f F field_2938 mousePosY - f Lnet/minecraft/class_2960; field_2937 HORSE_GUI_TEXTURES - f Lnet/minecraft/class_1496; field_2941 horseEntity - f F field_2939 mousePosx -c net/minecraft/class_488 net/minecraft/client/gui/screen/HopperScreen - f Lnet/minecraft/class_2960; field_2919 HOPPER_GUI_TEXTURE -c net/minecraft/class_4894 net/minecraft/client/gui/screen/inventory/AbstractRepairScreen - m ()V method_25445 initFields - m (Lnet/minecraft/class_4587;IIF)V method_25444 renderNameField - f Lnet/minecraft/class_2960; field_22794 guiTexture -c net/minecraft/class_490 net/minecraft/client/gui/screen/inventory/InventoryScreen - m (Lnet/minecraft/class_898;Lnet/minecraft/class_1309;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597$class_4598;)V method_29977 func_241611_a_ - m (IIIFFLnet/minecraft/class_1309;)V method_2486 drawEntityOnScreen - m (Lnet/minecraft/class_4185;)V method_19891 func_214086_a - f Z field_2932 removeRecipeBookGui - f Lnet/minecraft/class_2960; field_2933 RECIPE_BUTTON_TEXTURE - f Z field_2931 widthTooNarrow - f F field_2935 oldMouseX - f Z field_2930 buttonClicked - f F field_2934 oldMouseY - f Lnet/minecraft/class_507; field_2929 recipeBookGui -c net/minecraft/class_3935 net/minecraft/client/gui/screen/LecternScreen - m (I)V method_17572 func_214179_c - m ()V method_17574 func_214175_g - m ()V method_17575 func_214176_h - m (Lnet/minecraft/class_4185;)V method_19894 func_214178_a - m (Lnet/minecraft/class_3935;)V method_17570 func_214180_b - m (Lnet/minecraft/class_4185;)V method_19895 func_214181_b - m ()Lnet/minecraft/class_3916; method_17573 getContainer - m (Lnet/minecraft/class_3935;)V method_17568 func_214177_a - f Lnet/minecraft/class_1712; field_17423 field_214183_d - f Lnet/minecraft/class_3916; field_17422 field_214182_c -c net/minecraft/class_3935$1 net/minecraft/client/gui/screen/LecternScreen$1 - f Lnet/minecraft/class_3935; field_17424 field_213130_a -c net/minecraft/class_3742 net/minecraft/client/gui/screen/JigsawScreen - m ()V method_27272 func_238835_m_ - m ()V method_20118 func_214253_a - m (Lnet/minecraft/class_4185;)V method_19892 func_238825_a_ - m (Lnet/minecraft/class_4185;)V method_19893 func_238828_b_ - m ()V method_16346 func_214256_b - m (Lnet/minecraft/class_4185;)V method_27271 func_238831_c_ - m (Lnet/minecraft/class_4185;)V method_29349 func_238832_d_ - m ()Lnet/minecraft/class_2561; method_26413 func_238836_u_ - m (Lnet/minecraft/class_3742;)Z method_29348 func_238829_b_ - m ()V method_16348 func_214258_d - m (Lnet/minecraft/class_4185;)V method_26411 func_238834_e_ - m ()V method_16349 func_214257_c - m (Lnet/minecraft/class_3742;)I method_27269 func_238826_a_ - m (Lnet/minecraft/class_3742;I)I method_27270 func_238827_a_ - m (Ljava/lang/String;)V method_26412 func_214254_b - m (Ljava/lang/String;)V method_20119 func_238830_b_ - m (Ljava/lang/String;)V method_20120 func_238833_d_ - f Lnet/minecraft/class_2561; field_26564 field_243346_a - f I field_24052 field_238821_r_ - f Lnet/minecraft/class_2561; field_26566 field_243348_c - f Lnet/minecraft/class_2561; field_26565 field_243347_b - f Lnet/minecraft/class_2561; field_26568 field_243350_q - f Lnet/minecraft/class_2561; field_26567 field_243349_p - f Lnet/minecraft/class_342; field_23348 field_238818_b_ - f Lnet/minecraft/class_342; field_23349 field_238819_c_ - f Lnet/minecraft/class_342; field_23350 field_238820_p_ - f Lnet/minecraft/class_3751$class_4991; field_23352 field_238824_v_ - f Lnet/minecraft/class_342; field_16519 finalStateField - f Lnet/minecraft/class_4185; field_23351 field_238823_t_ - f Lnet/minecraft/class_4185; field_19103 doneButton - f Z field_25271 field_238822_s_ - f Lnet/minecraft/class_3751; field_16522 field_214259_a -c net/minecraft/class_3742$2 net/minecraft/client/gui/screen/JigsawScreen$2 - f Lnet/minecraft/class_3742; field_25272 field_238838_a_ -c net/minecraft/class_3742$1 net/minecraft/client/gui/screen/JigsawScreen$1 - f Lnet/minecraft/class_3742; field_24053 field_238837_a_ -c net/minecraft/class_3936 net/minecraft/client/gui/IHasContainer - m ()Lnet/minecraft/class_1703; method_17577 getContainer -c net/minecraft/class_494 net/minecraft/client/gui/screen/LoomScreen - m (III)V method_22692 func_228190_b_ - m ()V method_17576 containerChange - f Ljava/util/List; field_21841 field_230155_n_ - f Z field_2961 field_214125_w - f Z field_2962 field_214124_v - f Lnet/minecraft/class_1799; field_2967 patternStack - f Lnet/minecraft/class_630; field_21694 modelRender - f Lnet/minecraft/class_1799; field_2954 dyeStack - f Z field_2958 isScrolling - f Lnet/minecraft/class_1799; field_2955 bannerStack - f Lnet/minecraft/class_2960; field_2966 LOOM_GUI_TEXTURES - f F field_2968 field_214126_x - f I field_2963 field_214114_l - f I field_2970 indexStarting - f Z field_2965 displayPatternsIn -c net/minecraft/class_496 net/minecraft/client/gui/screen/EditMinecartCommandBlockScreen - f Lnet/minecraft/class_1918; field_2976 commandBlockLogic -c net/minecraft/class_492 net/minecraft/client/gui/screen/inventory/MerchantScreen - m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1914;)V method_19413 func_238839_a_ - m ()V method_2496 func_195391_j - m (Lnet/minecraft/class_4587;IILnet/minecraft/class_1916;)V method_20221 func_238840_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1914;II)V method_20223 func_238842_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;II)V method_20222 func_238841_a_ - m (Lnet/minecraft/class_4185;)V method_19896 func_214132_a - m (Lnet/minecraft/class_492;Lnet/minecraft/class_4587;Lnet/minecraft/class_1799;II)V method_20225 func_238843_a_ - m (Lnet/minecraft/class_492;Lnet/minecraft/class_4587;Lnet/minecraft/class_1799;II)V method_20226 func_238844_b_ - m (Lnet/minecraft/class_492;)I method_20224 access$000 - m (I)Z method_20220 func_214135_a - m (Lnet/minecraft/class_492;Lnet/minecraft/class_4587;Lnet/minecraft/class_1799;II)V method_20227 func_238845_c_ - f Lnet/minecraft/class_2561; field_26569 field_243351_B - f [Lnet/minecraft/class_492$class_493; field_19162 field_214138_m - f Z field_19164 field_214140_o - f Lnet/minecraft/class_2561; field_26571 field_243353_D - f I field_19161 selectedMerchantRecipe - f Lnet/minecraft/class_2561; field_26570 field_243352_C - f I field_19163 field_214139_n - f Lnet/minecraft/class_2960; field_2950 MERCHANT_GUI_TEXTURE -c net/minecraft/class_492$class_493 net/minecraft/client/gui/screen/inventory/MerchantScreen$TradeButton - m ()I method_20228 func_212937_a - f Lnet/minecraft/class_492; field_19166 field_212939_b - f I field_19165 field_212938_a -c net/minecraft/class_495 net/minecraft/client/gui/screen/inventory/ShulkerBoxScreen - f Lnet/minecraft/class_2960; field_2973 GUI_TEXTURE -c net/minecraft/class_474 net/minecraft/client/gui/widget/button/ChangePageButton - f Z field_18977 playTurnSound - f Z field_2851 isForward -c net/minecraft/class_4895 net/minecraft/client/gui/screen/inventory/SmithingTableScreen - f Lnet/minecraft/class_2960; field_22795 GUI_TEXTURE -c net/minecraft/class_498 net/minecraft/client/gui/screen/EditSignScreen - m (Ljava/lang/String;)Z method_27611 func_238848_a_ - m (Ljava/lang/String;)V method_16205 func_238850_b_ - m (I)[Ljava/lang/String; method_27612 func_243354_a - m ()Ljava/lang/String; method_27613 func_238851_j_ - m (Lnet/minecraft/class_4185;)V method_2527 func_238847_a_ - m ()V method_2526 close - f I field_3030 updateCounter - f [Ljava/lang/String; field_24285 field_238846_r_ - f I field_3029 editLine - f Lnet/minecraft/class_2625; field_3031 tileSign - f Lnet/minecraft/class_837$class_4702; field_21525 signModel - f Lnet/minecraft/class_3728; field_3032 textInputUtil -c net/minecraft/class_3979 net/minecraft/client/gui/screen/inventory/StonecutterScreen - m ()I method_17953 getHiddenRows - m ()Z method_17954 canScroll - m ()V method_17955 onInventoryUpdate - m (III)V method_17951 drawRecipesItems - m (Lnet/minecraft/class_4587;IIIII)V method_17952 func_238853_b_ - f I field_17671 recipeIndexOffset - f Z field_17672 hasItemsInInputSlot - f F field_17674 sliderProgress - f Z field_17670 clickedOnSroll - f Lnet/minecraft/class_2960; field_17673 BACKGROUND_TEXTURE -c net/minecraft/class_3874 net/minecraft/client/gui/screen/inventory/SmokerScreen - f Lnet/minecraft/class_2960; field_17128 GUI_TEXTURE -c net/minecraft/class_497 net/minecraft/client/gui/screen/EditStructureScreen - m (Lnet/minecraft/class_4185;)V method_19910 func_214275_m - m (Ljava/lang/String;)J method_2504 parseSeed - m (Ljava/lang/String;)I method_2517 parseCoordinate - m ()V method_2511 updateToggleBoundingBox - m ()V method_2510 updateDirectionButtons - m (Lnet/minecraft/class_4185;)V method_19906 func_214278_i - m (Lnet/minecraft/class_4185;)V method_19908 func_214277_k - m ()V method_2509 updateMode - m (Lnet/minecraft/class_4185;)V method_19901 func_214268_d - m ()V method_2524 updateEntitiesButton - m (Lnet/minecraft/class_4185;)V method_19903 func_214269_f - m (Lnet/minecraft/class_2633$class_2634;)Z method_2516 func_210143_a - m (Lnet/minecraft/class_4185;)V method_19899 func_214272_b - m (Lnet/minecraft/class_4185;)V method_19911 func_214274_n - m (Ljava/lang/String;)F method_2500 parseIntegrity - m (Lnet/minecraft/class_4185;)V method_19905 func_214282_h - m (Lnet/minecraft/class_4185;)V method_19907 func_214280_j - m ()V method_2508 updateMirrorButton - m (Lnet/minecraft/class_4185;)V method_19909 func_214276_l - m (Lnet/minecraft/class_4185;)V method_19900 func_214273_c - m ()V method_2515 func_195275_h - m (Lnet/minecraft/class_4185;)V method_19902 func_214270_e - m ()V method_2514 func_195272_i - m (Lnet/minecraft/class_4185;)V method_19904 func_214281_g - m ()V method_2513 updateToggleAirButton - m (Lnet/minecraft/class_497;Ljava/lang/String;CI)Z method_16017 func_214279_a - m (Lnet/minecraft/class_4185;)V method_19898 func_214271_a - f Lnet/minecraft/class_2415; field_2996 mirror - f Lnet/minecraft/class_2776; field_3004 mode - f Lnet/minecraft/class_342; field_3005 nameEdit - f Lnet/minecraft/class_4185; field_2990 showEntitiesButton - f Lnet/minecraft/class_2561; field_26572 field_243355_a - f Lnet/minecraft/class_4185; field_3008 showAirButton - f Lnet/minecraft/class_2561; field_26574 field_243357_c - f Lnet/minecraft/class_342; field_2978 sizeZEdit - f Z field_2997 showAir - f Lnet/minecraft/class_4185; field_2981 rotateNinetyDegreesButton - f Lnet/minecraft/class_2561; field_26576 field_243359_q - f Lnet/minecraft/class_342; field_2992 seedEdit - f Lnet/minecraft/class_2633; field_2980 tileStructure - f Lnet/minecraft/class_2561; field_26580 field_243363_u - f Lnet/minecraft/class_4185; field_2993 rotate270DegressButton - f Lnet/minecraft/class_2561; field_26578 field_243361_s - f Lnet/minecraft/class_4185; field_3009 detectSizeButton - f Lnet/minecraft/class_342; field_2999 posYEdit - f Lnet/minecraft/class_4185; field_2994 cancelButton - f Lnet/minecraft/class_342; field_2988 sizeXEdit - f Lnet/minecraft/class_4185; field_3006 loadButton - f Lnet/minecraft/class_2470; field_3003 rotation - f Z field_2985 ignoreEntities - f Lnet/minecraft/class_2561; field_26573 field_243356_b - f Lnet/minecraft/class_4185; field_2979 mirrorButton - f Lnet/minecraft/class_4185; field_3001 showBoundingBoxButton - f Lnet/minecraft/class_2561; field_26577 field_243360_r - f Lnet/minecraft/class_4185; field_2995 rotateZeroDegreesButton - f Lnet/minecraft/class_342; field_3000 integrityEdit - f Z field_2983 showBoundingBox - f Lnet/minecraft/class_2561; field_26575 field_243358_p - f Lnet/minecraft/class_4185; field_3007 rotate180DegreesButton - f Lnet/minecraft/class_2561; field_26579 field_243362_t - f Lnet/minecraft/class_342; field_2986 dataEdit - f Lnet/minecraft/class_4185; field_2977 modeButton - f Lnet/minecraft/class_342; field_2982 posXEdit - f Lnet/minecraft/class_4185; field_3002 doneButton - f Lnet/minecraft/class_342; field_3010 posZEdit - f Lnet/minecraft/class_4185; field_2987 saveButton - f Ljava/text/DecimalFormat; field_2991 decimalFormat - f Lnet/minecraft/class_342; field_2998 sizeYEdit -c net/minecraft/class_497$1 net/minecraft/client/gui/screen/EditStructureScreen$1 - f Lnet/minecraft/class_497; field_3023 field_194960_o -c net/minecraft/class_497$2 net/minecraft/client/gui/screen/EditStructureScreen$2 - f [I field_3024 field_217098_c - f [I field_3025 field_217097_b - f [I field_3026 field_217096_a -c net/minecraft/class_500 net/minecraft/client/gui/screen/MultiplayerScreen - m ()V method_20121 func_214295_b - m (Lnet/minecraft/class_4185;)V method_19916 func_214288_e - m (Lnet/minecraft/class_4185;)V method_19915 func_214283_d - m (Lnet/minecraft/class_4185;)V method_19917 func_214286_f - m (Lnet/minecraft/class_4185;)V method_19918 func_214293_g - m (Lnet/minecraft/class_4267$class_504;)V method_2531 func_214287_a - m ()V method_2534 refreshServerList - m (Lnet/minecraft/class_4185;)V method_19912 func_214289_a - m ()Lnet/minecraft/class_644; method_2538 getOldServerPinger - m (Ljava/util/List;)V method_2528 func_238854_b_ - m (Lnet/minecraft/class_4185;)V method_19913 func_214291_b - m ()V method_2536 connectToSelected - m (Lnet/minecraft/class_4185;)V method_19914 func_214294_c - m (Z)V method_20377 func_214285_a - m (Z)V method_20378 func_214292_b - m (Z)V method_20379 func_214284_c - m (Lnet/minecraft/class_642;)V method_2548 connectToServer - m ()Lnet/minecraft/class_641; method_2529 getServerList - m (Z)V method_20380 func_214290_d - f Lnet/minecraft/class_1134$class_1136; field_3046 lanServerList - f Lnet/minecraft/class_642; field_3051 selectedServer - f Lnet/minecraft/class_644; field_3037 oldServerPinger - f Ljava/util/List; field_3042 hoveringText - f Lnet/minecraft/class_4185; field_3050 btnSelectServer - f Lnet/minecraft/class_4185; field_3047 btnDeleteServer - f Z field_3048 initialized - f Lnet/minecraft/class_1134$class_1135; field_3045 lanServerDetector - f Lorg/apache/logging/log4j/Logger; field_3044 LOGGER - f Lnet/minecraft/class_437; field_3049 parentScreen - f Lnet/minecraft/class_4267; field_3043 serverListSelector - f Lnet/minecraft/class_641; field_3040 savedServerList - f Lnet/minecraft/class_4185; field_3041 btnEditServer -c net/minecraft/class_4749 net/minecraft/client/gui/screen/MultiplayerWarningScreen - m (Lnet/minecraft/class_4185;)V method_24292 func_230165_b_ - m (Lnet/minecraft/class_4185;)V method_24291 func_230164_a_ - f Lnet/minecraft/class_4286; field_21848 field_230162_g_ - f Lnet/minecraft/class_2561; field_21844 field_230158_c_ - f Lnet/minecraft/class_437; field_21842 field_230156_a_ - f Lnet/minecraft/class_2561; field_21845 field_230159_d_ - f Lnet/minecraft/class_2561; field_21846 field_238858_q_ - f Lnet/minecraft/class_5489; field_21849 field_243364_s - f Lnet/minecraft/class_2561; field_21843 field_230157_b_ -c net/minecraft/class_4267 net/minecraft/client/gui/screen/ServerSelectionList - m ()Lnet/minecraft/class_2960; method_20128 func_243382_w - m ()V method_20131 setList - m ()Lnet/minecraft/class_2561; method_30905 func_243378_r - m ()Lnet/minecraft/class_2960; method_20129 func_243383_x - m ()Lnet/minecraft/class_2561; method_30906 func_243379_s - m (Lnet/minecraft/class_4267;Lnet/minecraft/class_350$class_351;)V method_22109 func_243375_a - m (Lnet/minecraft/class_4267$class_504;)Z method_30016 func_241612_b_ - m (Lnet/minecraft/class_4267$class_504;)V method_20122 setSelected - m ()Lnet/minecraft/class_2561; method_30903 func_243372_A - m (Ljava/util/List;)V method_20126 updateNetworkServers - m ()Lorg/apache/logging/log4j/Logger; method_20130 func_243384_y - m (Lnet/minecraft/class_641;)V method_20125 updateOnlineServers - m ()Lnet/minecraft/class_2561; method_30904 func_243376_f - m (Lnet/minecraft/class_4267;)I method_20123 func_243373_a - m ()Lnet/minecraft/class_2561; method_30909 func_243385_z - m ()Ljava/util/concurrent/ThreadPoolExecutor; method_20127 func_243377_g - m (Lnet/minecraft/class_4267;I)I method_20124 func_243374_a - m ()Lnet/minecraft/class_2561; method_30907 func_243380_t - m ()Lnet/minecraft/class_2561; method_30908 func_243381_u - f Lnet/minecraft/class_2561; field_26584 field_243368_u - f Lnet/minecraft/class_2561; field_26585 field_243369_v - f Lnet/minecraft/class_500; field_19108 owner - f Lnet/minecraft/class_2561; field_26586 field_243370_w - f Lnet/minecraft/class_2561; field_26581 field_243365_r - f Lnet/minecraft/class_2561; field_26582 field_243366_s - f Lnet/minecraft/class_4267$class_504; field_19110 lanScanEntry - f Lnet/minecraft/class_2561; field_26583 field_243367_t - f Ljava/util/List; field_19109 serverListInternet - f Lnet/minecraft/class_2960; field_19106 field_214359_c - f Lnet/minecraft/class_2960; field_19107 field_214360_d - f Lorg/apache/logging/log4j/Logger; field_19104 LOGGER - f Lnet/minecraft/class_2561; field_26587 field_243371_x - f Ljava/util/concurrent/ThreadPoolExecutor; field_19105 field_214358_b - f Ljava/util/List; field_19111 serverListLan -c net/minecraft/class_4267$class_4270 net/minecraft/client/gui/screen/ServerSelectionList$NormalEntry - m ()V method_29978 func_241613_a_ - m (Lnet/minecraft/class_4267$class_4270;)Lnet/minecraft/class_642; method_20135 func_214412_a - m (II)V method_22110 func_228196_a_ - m ()V method_20138 func_241615_d_ - m ()Z method_20136 canJoin - m (Ljava/lang/String;)Z method_29979 func_241614_a_ - m ()V method_29980 func_241616_e_ - m ()Lnet/minecraft/class_642; method_20133 getServerData - m (Lnet/minecraft/class_4587;IILnet/minecraft/class_2960;)V method_20134 func_238859_a_ - f Lnet/minecraft/class_2960; field_19121 serverIcon - f Ljava/lang/String; field_19122 lastIconB64 - f J field_19124 lastClickTime - f Lnet/minecraft/class_642; field_19120 server - f Lnet/minecraft/class_1043; field_19123 icon - f Lnet/minecraft/class_4267; field_19117 field_214413_a - f Lnet/minecraft/class_310; field_19119 mc - f Lnet/minecraft/class_500; field_19118 owner -c net/minecraft/class_4267$class_4268 net/minecraft/client/gui/screen/ServerSelectionList$LanScanEntry - f Lnet/minecraft/class_310; field_19112 mc -c net/minecraft/class_4267$class_4269 net/minecraft/client/gui/screen/ServerSelectionList$LanDetectedEntry - m ()Lnet/minecraft/class_1131; method_20132 getServerData - f J field_19116 lastClickTime - f Lnet/minecraft/class_2561; field_26588 field_243386_c - f Lnet/minecraft/class_1131; field_19114 serverData - f Lnet/minecraft/class_2561; field_26589 field_243387_d - f Lnet/minecraft/class_500; field_19115 screen - f Lnet/minecraft/class_310; field_19113 mc -c net/minecraft/class_4267$class_504 net/minecraft/client/gui/screen/ServerSelectionList$Entry -c net/minecraft/class_5369 net/minecraft/client/gui/screen/PackLoadingManager - m ()Ljava/util/stream/Stream; method_29643 func_238869_b_ - m ()V method_29642 func_241618_c_ - m (Lnet/minecraft/class_5369;)Ljava/util/List; method_29647 func_238873_d_ - m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_5369$class_5371; method_29640 func_238866_a_ - m (Lnet/minecraft/class_5369;)Ljava/util/List; method_29646 func_238872_c_ - m ()Ljava/util/stream/Stream; method_29639 func_238865_a_ - m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_5369$class_5371; method_29644 func_238870_b_ - m ()V method_29981 func_241619_d_ - m (Lnet/minecraft/class_5369;)Ljava/lang/Runnable; method_29645 func_238871_b_ - m (Lnet/minecraft/class_5369;)Ljava/util/function/Function; method_29641 func_243389_a - f Ljava/lang/Runnable; field_25458 field_238863_d_ - f Ljava/util/function/Function; field_25785 field_243388_d - f Lnet/minecraft/class_3283; field_25626 field_241617_a_ - f Ljava/util/List; field_25455 field_238860_a_ - f Ljava/util/function/Consumer; field_25459 field_238864_e_ - f Ljava/util/List; field_25456 field_238861_b_ -c net/minecraft/class_5369$class_5373 net/minecraft/client/gui/screen/PackLoadingManager$EnabledPack - f Lnet/minecraft/class_5369; field_25462 field_238881_b_ -c net/minecraft/class_5369$class_5374 net/minecraft/client/gui/screen/PackLoadingManager$DisabledPack - f Lnet/minecraft/class_5369; field_25463 field_238882_b_ -c net/minecraft/class_5369$class_5371 net/minecraft/client/gui/screen/PackLoadingManager$IPack - m ()Lnet/minecraft/class_3281; method_29648 func_230460_a_ - m ()Z method_29660 func_230473_l_ - m ()Lnet/minecraft/class_2561; method_29653 func_243390_f - m ()Lnet/minecraft/class_2960; method_30286 func_241868_a - m ()Z method_29661 func_238875_m_ - m ()Lnet/minecraft/class_5352; method_29652 func_230464_d_ - m ()V method_29658 func_230467_j_ - m ()V method_29659 func_230468_k_ - m ()Lnet/minecraft/class_2561; method_29651 func_230463_c_ - m ()Z method_29664 func_230470_p_ - m ()Lnet/minecraft/class_2561; method_29650 func_230462_b_ - m ()Z method_29654 func_230465_f_ - m ()Z method_29655 func_230466_g_ - m ()V method_29656 func_230471_h_ - m ()V method_29657 func_230472_i_ - m ()Z method_29662 func_238876_n_ - m ()Z method_29663 func_230469_o_ -c net/minecraft/class_5369$class_5372 net/minecraft/client/gui/screen/PackLoadingManager$AbstractPack - m ()Ljava/util/List; method_29667 func_230475_r_ - m ()Ljava/util/List; method_29666 func_230474_q_ - m (I)V method_29665 func_238879_a_ - m ()V method_29668 func_238880_s_ - f Lnet/minecraft/class_3288; field_25461 field_238878_b_ - f Lnet/minecraft/class_5369; field_25460 field_238877_a_ -c net/minecraft/class_521 net/minecraft/client/gui/widget/list/ResourcePackList - m (Lnet/minecraft/class_521;)I method_20139 func_238911_a_ - m ()Lnet/minecraft/class_2561; method_20143 func_238915_q_ - m (Lnet/minecraft/class_521;I)I method_20140 func_238912_a_ - m ()Lnet/minecraft/class_2561; method_20142 func_243405_f - m ()Lnet/minecraft/class_2960; method_20141 func_243406_g - f Lnet/minecraft/class_2960; field_19125 field_214367_b - f Lnet/minecraft/class_2561; field_18978 field_214370_e - f Lnet/minecraft/class_2561; field_19126 field_214368_c - f Lnet/minecraft/class_2561; field_19127 field_214369_d -c net/minecraft/class_521$class_4271 net/minecraft/client/gui/widget/list/ResourcePackList$ResourcePackEntry - m (Lnet/minecraft/class_310;Lnet/minecraft/class_2561;)Lnet/minecraft/class_5489; method_31230 func_244425_b - m (Z)V method_20146 func_238921_a_ - m ()Z method_20152 func_238920_a_ - m (Lnet/minecraft/class_310;Lnet/minecraft/class_2561;)Lnet/minecraft/class_5481; method_31229 func_244424_a - f Lnet/minecraft/class_5481; field_26784 field_244422_g - f Lnet/minecraft/class_5369$class_5371; field_19129 field_214431_d - f Lnet/minecraft/class_310; field_19128 field_214428_a - f Lnet/minecraft/class_521; field_19130 field_214430_c - f Lnet/minecraft/class_437; field_25476 field_214429_b - f Lnet/minecraft/class_5481; field_26590 field_243407_e - f Lnet/minecraft/class_5489; field_26591 field_243408_f - f Lnet/minecraft/class_5489; field_26785 field_244423_h -c net/minecraft/class_5375 net/minecraft/client/gui/screen/PackScreen - m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_2960; method_30287 func_243395_a - m (Ljava/nio/file/Path;Lorg/apache/commons/lang3/mutable/MutableBoolean;Ljava/nio/file/Path;)V method_29675 func_238901_a_ - m (Lnet/minecraft/class_1060;Lnet/minecraft/class_3288;)Lnet/minecraft/class_2960; method_30289 func_243397_a - m (Ljava/util/List;Z)V method_29676 func_238902_a_ - m ()Lorg/apache/logging/log4j/Logger; method_30290 func_243398_i - m (Lnet/minecraft/class_4185;Lnet/minecraft/class_4587;II)V method_29671 func_238897_a_ - m (Lnet/minecraft/class_310;Ljava/util/List;Ljava/nio/file/Path;)V method_29669 func_238895_a_ - m ()V method_30291 func_243399_k - m (Lnet/minecraft/class_521;Lnet/minecraft/class_5369$class_5371;)V method_29672 func_238898_a_ - m ()V method_29680 func_238906_l_ - m (Ljava/nio/file/Path;Ljava/nio/file/Path;Lorg/apache/commons/lang3/mutable/MutableBoolean;Ljava/nio/file/Path;)V method_29674 func_238900_a_ - m ()V method_29678 func_238904_g_ - m (Lnet/minecraft/class_521;Ljava/util/stream/Stream;)V method_29673 func_238899_a_ - m (Lnet/minecraft/class_4185;)V method_29670 func_238896_a_ - m (Lnet/minecraft/class_3288;Ljava/lang/String;)Lnet/minecraft/class_2960; method_30288 func_243396_a - m (Lnet/minecraft/class_4185;)V method_29982 func_238903_b_ - f Lnet/minecraft/class_5369; field_25468 field_238887_q_ - f Lnet/minecraft/class_2960; field_25786 field_243391_p - f Lorg/apache/logging/log4j/Logger; field_25464 field_238883_a_ - f Ljava/io/File; field_25474 field_241817_w_ - f Lnet/minecraft/class_437; field_25469 field_238888_r_ - f Lnet/minecraft/class_2561; field_25465 field_238884_b_ - f Lnet/minecraft/class_2561; field_25466 field_238885_c_ - f J field_25788 field_243393_t - f Lnet/minecraft/class_4185; field_25475 field_238894_x_ - f Lnet/minecraft/class_521; field_25473 field_238892_v_ - f Lnet/minecraft/class_521; field_25472 field_238891_u_ - f Ljava/util/Map; field_25789 field_243394_y - f Lnet/minecraft/class_5375$class_5426; field_25787 field_243392_s -c net/minecraft/class_5375$class_5426 net/minecraft/client/gui/screen/PackScreen$PackDirectoryWatcher - m ()V close close - m (Ljava/io/File;)Lnet/minecraft/class_5375$class_5426; method_30293 func_243403_a - m (Ljava/nio/file/Path;)V method_30294 func_243404_a - m ()Z method_30292 func_243402_a - f Ljava/nio/file/WatchService; field_25790 field_243400_a - f Ljava/nio/file/Path; field_25791 field_243401_b -c net/minecraft/class_517 net/minecraft/client/gui/recipebook/AbstractRecipeBookGui - m ()Lnet/minecraft/class_1792; method_2658 func_212961_n - m ()Ljava/util/Set; method_17065 func_212958_h - f Lnet/minecraft/class_1735; field_3150 field_212966_k - f Ljava/util/Set; field_3149 field_212965_j - f Ljava/util/Iterator; field_3153 field_212964_i - f F field_3151 field_212968_m - f Lnet/minecraft/class_1792; field_3152 field_212967_l -c net/minecraft/class_505 net/minecraft/client/gui/recipebook/GhostRecipe - m ()V method_2571 clear - m (Lnet/minecraft/class_1856;II)V method_2569 addIngredient - m (Lnet/minecraft/class_505;)F method_2568 access$000 - m (Lnet/minecraft/class_1860;)V method_2565 setRecipe - m ()Lnet/minecraft/class_1860; method_2566 getRecipe - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_310;IIZF)V method_2567 func_238922_a_ - m (I)Lnet/minecraft/class_505$class_506; method_2570 get - m ()I method_2572 size - f Lnet/minecraft/class_1860; field_3079 recipe - f F field_3080 time - f Ljava/util/List; field_3081 ingredients -c net/minecraft/class_505$class_506 net/minecraft/client/gui/recipebook/GhostRecipe$GhostIngredient - m ()Lnet/minecraft/class_1799; method_2573 getItem - m ()I method_2575 getY - m ()I method_2574 getX - f Lnet/minecraft/class_505; field_3085 field_194185_a - f I field_3084 x - f Lnet/minecraft/class_1856; field_3082 ingredient - f I field_3083 y -c net/minecraft/class_3875 net/minecraft/client/gui/recipebook/BlastFurnaceRecipeGui - f Lnet/minecraft/class_2561; field_26592 field_243409_i -c net/minecraft/class_507 net/minecraft/client/gui/recipebook/RecipeBookGui - m (Lnet/minecraft/class_1735;)V method_2600 slotClicked - m ()Lnet/minecraft/class_2561; method_17064 func_230479_g_ - m (Ljava/lang/String;)V method_2576 pirateRecipe - m (Lnet/minecraft/class_1860;Ljava/util/List;)V method_2596 setupGhostRecipe - m (Lnet/minecraft/class_4587;IIII)V method_2602 func_238925_d_ - m ()V method_2606 updateTabs - m (Z)V method_2603 updateCollections - m (Lit/unimi/dsi/fastutil/objects/ObjectSet;Lnet/minecraft/class_516;)Z method_2594 func_193947_a - m (Lnet/minecraft/class_4587;IIZF)V method_2581 func_230477_a_ - m ()V method_2586 updateSearch - m ()Lnet/minecraft/class_2561; method_2599 func_230478_f_ - m ()V method_2591 toggleVisibility - m ()V method_2588 sendUpdateSettings - m ()V method_2590 tick - m (Lnet/minecraft/class_516;)Z method_2583 func_193953_b - m (Lnet/minecraft/class_512;)Z method_2582 func_209505_a - m (Lnet/minecraft/class_516;)V method_2577 func_193944_d - m ()V method_2585 func_205702_a - m (Lnet/minecraft/class_4587;IIII)V method_2601 func_238924_c_ - m (DDIIIII)Z method_2598 func_195604_a - m (Z)V method_2593 setVisible - m ()Z method_2604 isOffsetNextToMainGUI - m (ZII)I method_2595 updateScreenPosition - m ()V method_2587 updateStackedContents - m ()Z method_2589 toggleCraftableFilter - m (Z)V method_2579 initSearchBar - m (IILnet/minecraft/class_310;ZLnet/minecraft/class_1729;)V method_2597 init - m ()V method_2607 removed - m ()V method_2592 recipesUpdated - m (Lnet/minecraft/class_516;)Z method_2584 func_193958_a - m ()Z method_2605 isVisible - m (Lnet/minecraft/class_516;)Z method_2580 func_193952_b - f Lnet/minecraft/class_2561; field_26593 field_243410_j - f Ljava/util/List; field_3094 recipeTabs - f Ljava/lang/String; field_3099 lastSearch - f Lnet/minecraft/class_513; field_3086 recipeBookPage - f I field_3093 timesInventoryChanged - f Lnet/minecraft/class_505; field_3092 ghostRecipe - f I field_3100 height - f Lnet/minecraft/class_1662; field_3090 stackedContents - f Lnet/minecraft/class_2561; field_25711 field_241620_l_ - f Z field_3087 field_199738_u - f Lnet/minecraft/class_310; field_3091 mc - f Lnet/minecraft/class_2561; field_26594 field_243411_k - f I field_3102 xOffset - f Lnet/minecraft/class_512; field_3098 currentTab - f Lnet/minecraft/class_361; field_3088 toggleRecipesBtn - f Lnet/minecraft/class_342; field_3089 searchBar - f I field_3101 width - f Lnet/minecraft/class_2960; field_3097 RECIPE_BOOK - f Lnet/minecraft/class_1729; field_3095 field_201522_g - f Lnet/minecraft/class_299; field_3096 recipeBook -c net/minecraft/class_508 net/minecraft/client/gui/recipebook/RecipeOverlayGui - m (Lnet/minecraft/class_508;)F method_2610 access$400 - m ()Lnet/minecraft/class_2960; method_2611 access$100 - m (Z)V method_2613 setVisible - m (Lnet/minecraft/class_310;Lnet/minecraft/class_516;IIIIF)V method_2617 func_201703_a - m ()Z method_2616 isVisible - m ()Lnet/minecraft/class_516; method_2614 getRecipeList - m ()Lnet/minecraft/class_1860; method_2615 getLastRecipeClicked - m (Lnet/minecraft/class_508;)Z method_2609 access$300 - m (Lnet/minecraft/class_508;)Lnet/minecraft/class_310; method_2608 access$200 - m (Lnet/minecraft/class_4587;IIIIII)V method_2618 func_238923_c_ - f Lnet/minecraft/class_1860; field_3104 lastRecipeClicked - f F field_3110 time - f Lnet/minecraft/class_310; field_3108 mc - f I field_3105 x - f I field_3103 y - f Z field_3107 visible - f Lnet/minecraft/class_516; field_3111 recipeList - f Ljava/util/List; field_3106 buttonList - f Z field_3112 field_201704_n - f Lnet/minecraft/class_2960; field_3109 RECIPE_BOOK_TEXTURE -c net/minecraft/class_508$class_511 net/minecraft/client/gui/recipebook/RecipeOverlayGui$FurnaceRecipeButtonWidget - f Lnet/minecraft/class_508; field_3121 field_201507_q -c net/minecraft/class_508$class_509 net/minecraft/client/gui/recipebook/RecipeOverlayGui$RecipeButtonWidget - m (Lnet/minecraft/class_1860;)V method_2619 func_201505_a - m (Lnet/minecraft/class_508$class_509;)Lnet/minecraft/class_1860; method_2620 access$000 - f Z field_3115 isCraftable - f Lnet/minecraft/class_508; field_3113 field_193926_o - f Lnet/minecraft/class_1860; field_3114 recipe - f Ljava/util/List; field_3116 field_201506_o -c net/minecraft/class_508$class_509$class_510 net/minecraft/client/gui/recipebook/RecipeOverlayGui$RecipeButtonWidget$Child - f I field_3118 field_201707_c - f I field_3119 field_201706_b - f Lnet/minecraft/class_508$class_509; field_3117 field_201708_d - f [Lnet/minecraft/class_1799; field_3120 field_201705_a -c net/minecraft/class_512 net/minecraft/client/gui/recipebook/RecipeTabToggleWidget - m (Lnet/minecraft/class_299;)Z method_2624 func_199500_a - m ()Lnet/minecraft/class_314; method_2623 func_201503_d - m (Lnet/minecraft/class_310;)V method_2622 startAnimation - m (Lnet/minecraft/class_918;)V method_2621 renderIcon - f Lnet/minecraft/class_314; field_3123 category - f F field_3122 animationTime -c net/minecraft/class_513 net/minecraft/client/gui/recipebook/RecipeBookPage - m ()Lnet/minecraft/class_1860; method_2631 getLastClickedRecipe - m (DDIIIII)Z method_2632 func_198955_a - m (Lnet/minecraft/class_4587;IIIIF)V method_2634 func_238927_a_ - m (Ljava/util/List;Z)V method_2627 updateLists - m ()Lnet/minecraft/class_516; method_2635 getLastClickedRecipeList - m ()V method_2626 updateArrowButtons - m (Lnet/minecraft/class_507;)V method_2630 addListener - m (Lnet/minecraft/class_310;II)V method_2636 init - m ()V method_2638 setInvisible - m (Ljava/util/List;)V method_2629 recipesShown - m (Lnet/minecraft/class_4587;II)V method_2628 func_238926_a_ - m ()V method_2625 updateButtonsForPage - m ()Lnet/minecraft/class_310; method_2637 func_203411_d - m ()Lnet/minecraft/class_3439; method_2633 func_203412_e - f I field_3124 totalPages - f Lnet/minecraft/class_310; field_3126 minecraft - f Lnet/minecraft/class_516; field_3133 lastClickedRecipeList - f Lnet/minecraft/class_514; field_3129 hoveredButton - f Lnet/minecraft/class_361; field_3128 forwardButton - f Lnet/minecraft/class_361; field_3130 backButton - f Lnet/minecraft/class_508; field_3132 overlay - f Ljava/util/List; field_3134 listeners - f Lnet/minecraft/class_3439; field_3136 recipeBook - f Ljava/util/List; field_3127 recipeLists - f Ljava/util/List; field_3131 buttons - f I field_3135 currentPage - f Lnet/minecraft/class_1860; field_3125 lastClickedRecipe -c net/minecraft/class_516 net/minecraft/client/gui/recipebook/RecipeList - m ()Ljava/util/List; method_2650 getRecipes - m (Z)Ljava/util/List; method_2651 getRecipes - m ()Z method_2652 isNotEmpty - m (Lnet/minecraft/class_3439;)V method_2647 updateKnownRecipes - m ()Z method_2657 containsValidRecipes - m (Lnet/minecraft/class_1662;IILnet/minecraft/class_3439;)V method_2649 canCraft - m (Ljava/util/List;)Z method_30295 func_243413_a - m (Lnet/minecraft/class_1860;)Z method_2653 isCraftable - m ()Z method_2655 containsCraftableRecipes - m (Z)Ljava/util/List; method_2648 getDisplayRecipes - m ()Z method_2656 hasSingleResultItem - f Z field_3148 singleResultItem - f Ljava/util/List; field_3144 recipes - f Ljava/util/Set; field_3147 inBook - f Ljava/util/Set; field_3145 canFit - f Ljava/util/Set; field_3146 craftable -c net/minecraft/class_514 net/minecraft/client/gui/recipebook/RecipeWidget - m (II)V method_2641 setPosition - m ()Z method_2642 isOnlyOption - m ()Ljava/util/List; method_2639 getOrderedRecipes - m ()Lnet/minecraft/class_516; method_2645 getList - m (Lnet/minecraft/class_516;Lnet/minecraft/class_513;)V method_2640 func_203400_a - m (Lnet/minecraft/class_437;)Ljava/util/List; method_2644 getToolTipText - m ()Lnet/minecraft/class_1860; method_2643 getRecipe - f Lnet/minecraft/class_3439; field_3138 book - f I field_3141 currentIndex - f Lnet/minecraft/class_2561; field_26595 field_243412_b - f Lnet/minecraft/class_1729; field_3137 field_203401_p - f Lnet/minecraft/class_516; field_3142 list - f Lnet/minecraft/class_2960; field_3143 RECIPE_BOOK - f F field_3140 time - f F field_3139 animationTime -c net/minecraft/class_518 net/minecraft/client/gui/recipebook/IRecipeShownListener - m ()Lnet/minecraft/class_507; method_2659 getRecipeGui - m ()V method_16891 recipesUpdated -c net/minecraft/class_515 net/minecraft/client/gui/recipebook/IRecipeUpdateListener - m (Ljava/util/List;)V method_2646 recipesShown -c net/minecraft/class_3877 net/minecraft/client/gui/recipebook/SmokerRecipeGui - f Lnet/minecraft/class_2561; field_26597 field_243415_i -c net/minecraft/class_3876 net/minecraft/client/gui/recipebook/FurnaceRecipeGui - f Lnet/minecraft/class_2561; field_26596 field_243414_i -c net/minecraft/class_5235 net/minecraft/client/gui/screen/EditGamerulesScreen - m (Lnet/minecraft/class_4185;)V method_27619 func_238971_a_ - m (Ljava/util/List;)V method_27624 func_238980_b_ - m (Lnet/minecraft/class_4185;)V method_27625 func_238976_b_ - m ()V method_27632 func_238984_g_ - m (Lnet/minecraft/class_5235$class_5240;)V method_27620 func_238972_a_ - m (Lnet/minecraft/class_5235$class_5240;)V method_27626 func_238977_b_ - m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_27627 func_243437_f - m (Lnet/minecraft/class_5235;Lnet/minecraft/class_5235$class_5240;)V method_27628 func_241633_a_ - m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_27630 func_243438_g - m (Lnet/minecraft/class_5235;Ljava/util/List;)V method_27623 func_243436_a - m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_29985 func_241636_d_ - m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_29986 func_241637_e_ - m (Lnet/minecraft/class_5235;Lnet/minecraft/class_5235$class_5240;)V method_27622 func_243435_a - m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_27621 func_238973_a_ - m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_29984 func_238978_b_ - m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_310; method_27629 func_238981_c_ - m (Lnet/minecraft/class_5235;)Lnet/minecraft/class_327; method_27631 func_243439_h - f Ljava/util/function/Consumer; field_24293 field_238965_a_ - f Ljava/util/List; field_24297 field_238969_q_ - f Lnet/minecraft/class_4185; field_24296 field_238968_p_ - f Lnet/minecraft/class_1928; field_24298 field_238970_r_ - f Ljava/util/Set; field_24295 field_238967_c_ - f Lnet/minecraft/class_5235$class_5241; field_24294 field_238966_b_ -c net/minecraft/class_5235$class_5241 net/minecraft/client/gui/screen/EditGamerulesScreen$GamerulesList - m (Ljava/util/Map$Entry;)V method_27638 func_239005_b_ - m (Ljava/util/Map$Entry;)V method_27637 func_239004_a_ - f Lnet/minecraft/class_5235; field_24313 field_239003_a_ -c net/minecraft/class_5235$class_5241$1 net/minecraft/client/gui/screen/EditGamerulesScreen$GamerulesList$1 - m (Lnet/minecraft/class_2561;Ljava/util/List;Ljava/lang/String;Lnet/minecraft/class_1928$class_4310;)Lnet/minecraft/class_5235$class_5240; method_27641 func_239012_a_ - m (Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_5235$class_5238;)V method_27640 func_239011_a_ - m (Lnet/minecraft/class_1928$class_5198;)Ljava/util/Map; method_27639 func_239010_a_ - m (Lnet/minecraft/class_2561;Ljava/util/List;Ljava/lang/String;Lnet/minecraft/class_1928$class_4312;)Lnet/minecraft/class_5235$class_5240; method_27642 func_239013_a_ - f Ljava/util/Map; field_24316 field_239008_c_ - f Lnet/minecraft/class_1928; field_24315 field_239007_b_ - f Lnet/minecraft/class_5235$class_5241; field_24317 field_239009_d_ - f Lnet/minecraft/class_5235; field_24314 field_239006_a_ -c net/minecraft/class_5235$class_5239 net/minecraft/client/gui/screen/EditGamerulesScreen$IntegerEntry - m (Lnet/minecraft/class_1928$class_4312;Ljava/lang/String;)V method_27635 func_238999_a_ - f Lnet/minecraft/class_5235; field_24307 field_238995_a_ - f Lnet/minecraft/class_342; field_24309 field_238997_d_ -c net/minecraft/class_5235$class_5240 net/minecraft/client/gui/screen/EditGamerulesScreen$Gamerule - m (Lnet/minecraft/class_5235$class_5240;)Ljava/util/List; method_27636 func_243440_a - f Ljava/util/List; field_24311 field_239000_a_ - f Lnet/minecraft/class_5235; field_24312 field_239001_b_ -c net/minecraft/class_5235$class_5238 net/minecraft/client/gui/screen/EditGamerulesScreen$IRuleEntry - m (Lnet/minecraft/class_2561;Ljava/util/List;Ljava/lang/String;Lnet/minecraft/class_1928$class_4315;)Lnet/minecraft/class_5235$class_5240; create create -c net/minecraft/class_5235$class_5400 net/minecraft/client/gui/screen/EditGamerulesScreen$ValueEntry - m (Lnet/minecraft/class_4587;II)V method_29989 func_241649_a_ - f Ljava/util/List; field_25630 field_241647_b_ - f Ljava/util/List; field_25629 field_241646_a_ - f Lnet/minecraft/class_5235; field_25631 field_241648_c_ -c net/minecraft/class_5235$class_5236 net/minecraft/client/gui/screen/EditGamerulesScreen$BooleanEntry - m (Lnet/minecraft/class_1928$class_4310;Lnet/minecraft/class_4185;)V method_29987 func_238988_a_ - f Lnet/minecraft/class_4185; field_24300 field_238986_c_ - f Lnet/minecraft/class_5235; field_24299 field_238985_a_ -c net/minecraft/class_5235$class_5236$1 net/minecraft/client/gui/screen/EditGamerulesScreen$BooleanEntry$1 - f Lnet/minecraft/class_5235; field_24302 field_238990_a_ - f Lnet/minecraft/class_5235$class_5236; field_24304 field_238992_c_ - f Lnet/minecraft/class_2561; field_25627 field_241644_b_ - f Lnet/minecraft/class_1928$class_4310; field_25628 field_241645_c_ - f Ljava/lang/String; field_24303 field_238991_b_ -c net/minecraft/class_5235$class_5237 net/minecraft/client/gui/screen/EditGamerulesScreen$NameEntry - f Lnet/minecraft/class_5235; field_24305 field_238993_a_ - f Lnet/minecraft/class_2561; field_24306 field_238994_c_ -c net/minecraft/class_525 net/minecraft/client/gui/screen/CreateWorldScreen - m (Lnet/minecraft/class_525;)Lnet/minecraft/class_525$class_4539; method_23489 func_243426_b - m (Lnet/minecraft/class_4185;)V method_19923 func_214321_c - m ()Lnet/minecraft/class_2561; method_30508 func_243431_m - m (Lnet/minecraft/class_4185;)V method_27618 func_238956_g_ - m (Lnet/minecraft/class_437;)Lnet/minecraft/class_525; method_31130 func_243425_a - m (Lnet/minecraft/class_4185;)V method_29692 func_214320_g - m (Lnet/minecraft/class_525;)Lnet/minecraft/class_1267; method_27617 func_243428_e - m (Lnet/minecraft/class_525;)Lnet/minecraft/class_2561; method_23492 func_243427_d - m (Lorg/apache/commons/lang3/mutable/MutableObject;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_29688 func_238947_a_ - m (Lnet/minecraft/class_4185;)V method_19921 func_214317_a - m ()V method_29695 func_238959_w_ - m ()V method_30298 func_243432_s - m ()Ljava/nio/file/Path; method_29693 func_238957_j_ - m (Lnet/minecraft/class_5359;Lnet/minecraft/class_5350;)V method_29681 func_243424_a - m (Ljava/nio/file/Path;)V method_29689 func_238948_b_ - m ()V method_2727 calcSaveDirName - m ()V method_29697 func_241631_y_ - m (Ljava/nio/file/Path;Ljava/nio/file/Path;)Z method_29686 func_238944_a_ - m (Z)V method_29691 func_241630_d_ - m (Ljava/util/List;Ljava/lang/String;)Z method_29983 func_241626_a_ - m (Lnet/minecraft/class_4185;)V method_27615 func_214312_d - m (Lnet/minecraft/class_3283;)V method_29682 func_241621_a_ - m (Lnet/minecraft/class_525;)Z method_23494 func_243429_f - m ()V method_28084 func_238955_g_ - m ()Z method_29696 func_238960_x_ - m ()V method_30297 func_243430_k - m (Lnet/minecraft/class_525$class_4539;)V method_22365 func_228200_a_ - m (Lnet/minecraft/class_4185;)V method_23493 func_214322_h - m (Ljava/nio/file/Path;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_29687 func_238945_a_ - m (Lnet/minecraft/class_525;)Lnet/minecraft/class_2561; method_23490 func_238951_d_ - m (Lnet/minecraft/class_4185;)V method_19922 func_214318_b - m (Lnet/minecraft/class_1928;)V method_27614 func_238941_a_ - m (Ljava/nio/file/Path;Lnet/minecraft/class_310;)Ljava/nio/file/Path; method_29685 func_238943_a_ - m ()V method_29694 func_238958_v_ - m (Ljava/util/Optional;)V method_27616 func_238946_a_ - m ()Lcom/mojang/datafixers/util/Pair; method_30296 func_243423_B - m (Lnet/minecraft/class_525;)Ljava/lang/String; method_23488 func_228201_a_ - m (Ljava/nio/file/Path;)Z method_29684 func_238942_a_ - m (Ljava/lang/String;)V method_19416 func_214319_b - m ()V method_2736 createWorld - m ()V method_2722 func_228199_a_ - m (Lnet/minecraft/class_4185;)V method_19929 func_214316_i - m ()V method_29698 func_241632_z_ - m ()V method_2721 toggleMoreWorldOptions - m (Lnet/minecraft/class_5359;Lnet/minecraft/class_5350;Ljava/lang/Throwable;)Ljava/lang/Object; method_29683 func_241623_a_ - m (Z)V method_2710 showMoreWorldOptions - m (Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_29690 func_238949_b_ - f Lnet/minecraft/class_5292; field_24588 field_238934_c_ - f Lnet/minecraft/class_2561; field_26600 field_243420_t - f Lnet/minecraft/class_1928; field_24288 field_238932_M_ - f Z field_3179 allowCheatsWasSetByUser - f Lnet/minecraft/class_342; field_3188 worldNameField - f Lnet/minecraft/class_2561; field_26598 field_243418_r - f Lnet/minecraft/class_1267; field_24290 field_238937_w_ - f Lnet/minecraft/class_4185; field_24287 field_238930_G_ - f Lnet/minecraft/class_4185; field_3182 btnAllowCommands - f Ljava/lang/String; field_3195 worldName - f Z field_3178 hardCoreMode - f Lnet/minecraft/class_4185; field_3186 btnGameMode - f Lnet/minecraft/class_2561; field_3194 gameModeDesc1 - f Z field_3202 inMoreWorldOptionsDisplay - f Lnet/minecraft/class_2561; field_26602 field_243422_v - f Lnet/minecraft/class_2561; field_26599 field_243419_s - f Lorg/apache/logging/log4j/Logger; field_25480 field_238935_p_ - f Lnet/minecraft/class_2561; field_26601 field_243421_u - f Lnet/minecraft/class_525$class_4539; field_3185 field_228198_g_ - f Lnet/minecraft/class_2561; field_25898 field_243417_q - f Z field_3192 allowCheats - f Lnet/minecraft/class_4185; field_3193 btnMoreOptions - f Lnet/minecraft/class_525$class_4539; field_3201 field_228197_f_ - f Lnet/minecraft/class_1267; field_24289 field_238936_v_ - f Lnet/minecraft/class_4185; field_25478 field_238931_H_ - f Lnet/minecraft/class_437; field_3187 parentScreen - f Lnet/minecraft/class_2561; field_3199 gameModeDesc2 - f Lnet/minecraft/class_4185; field_3205 btnCreateWorld - f Ljava/nio/file/Path; field_25477 field_238928_A_ - f Lnet/minecraft/class_4185; field_24286 field_238929_E_ - f Lnet/minecraft/class_3283; field_25792 field_243416_G - f Lnet/minecraft/class_5359; field_25479 field_238933_b_ - f Ljava/lang/String; field_3196 saveDirName -c net/minecraft/class_525$1 net/minecraft/client/gui/screen/CreateWorldScreen$1 - f Lnet/minecraft/class_525; field_21337 field_228210_a_ -c net/minecraft/class_525$4 net/minecraft/client/gui/screen/CreateWorldScreen$4 - f Lnet/minecraft/class_525; field_21339 field_228213_a_ -c net/minecraft/class_525$5 net/minecraft/client/gui/screen/CreateWorldScreen$5 - f [I field_20623 field_238963_a_ -c net/minecraft/class_525$2 net/minecraft/client/gui/screen/CreateWorldScreen$2 - f Lnet/minecraft/class_525; field_21338 field_228211_a_ -c net/minecraft/class_525$3 net/minecraft/client/gui/screen/CreateWorldScreen$3 - f Lnet/minecraft/class_525; field_24291 field_228212_a_ -c net/minecraft/class_525$class_5376 net/minecraft/client/gui/screen/CreateWorldScreen$DatapackException -c net/minecraft/class_525$class_4539 net/minecraft/client/gui/screen/CreateWorldScreen$GameMode - m ()[Lnet/minecraft/class_525$class_4539; values values - m (Lnet/minecraft/class_525$class_4539;)Ljava/lang/String; method_22366 func_243433_a - m (Lnet/minecraft/class_525$class_4539;)Lnet/minecraft/class_1934; method_22367 func_243434_b - m (Ljava/lang/String;)Lnet/minecraft/class_525$class_4539; valueOf valueOf - f Lnet/minecraft/class_525$class_4539; field_20624 SURVIVAL - f Lnet/minecraft/class_1934; field_20629 field_228218_f_ - f Lnet/minecraft/class_525$class_4539; field_20627 DEBUG - f Ljava/lang/String; field_20628 field_228217_e_ - f Lnet/minecraft/class_525$class_4539; field_20626 CREATIVE - f [Lnet/minecraft/class_525$class_4539; field_20630 $VALUES - f Lnet/minecraft/class_525$class_4539; field_20625 HARDCORE -c net/minecraft/class_524 net/minecraft/client/gui/screen/EditWorldScreen - m (Lcom/google/gson/JsonElement;)Lcom/mojang/serialization/DataResult; method_29699 func_239017_a_ - m (Ljava/lang/String;)V method_19417 func_214301_a_ - m (Lnet/minecraft/class_4185;)V method_27029 func_214303_f - m (Lcom/mojang/serialization/DataResult$PartialResult;)V method_29067 func_239018_a_ - m (Lnet/minecraft/class_4185;)V method_27030 func_214309_g - m (Lnet/minecraft/class_32$class_5143;)Z method_2701 func_239019_a_ - m (Lnet/minecraft/class_4185;)V method_19930 func_214306_a_ - m (Lnet/minecraft/class_32;Ljava/lang/String;)V method_29784 func_241651_a_ - m (Lnet/minecraft/class_4185;)V method_29068 func_239023_c_ - m ()V method_2691 saveChanges - m (Lnet/minecraft/class_4185;)V method_19933 func_214310_c - m (Lnet/minecraft/class_4185;)V method_19932 func_214308_b_ - m (ZZ)V method_19931 func_214305_a - m (Lnet/minecraft/class_4185;)V method_19935 func_214304_e - m (Lnet/minecraft/class_4185;)V method_19934 func_214302_d - f Lnet/minecraft/class_2561; field_26603 field_243441_c - f Lorg/apache/logging/log4j/Logger; field_23776 field_239014_a_ - f Lnet/minecraft/class_32$class_5143; field_23777 field_239016_r_ - f Lnet/minecraft/class_4185; field_3168 saveButton - f Lnet/minecraft/class_342; field_3170 nameEdit - f Lcom/google/gson/Gson; field_25481 field_239015_b_ - f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_3169 field_214311_b -c net/minecraft/class_526 net/minecraft/client/gui/screen/WorldSelectionScreen - m (Ljava/lang/String;)V method_2744 func_214329_b - m ()Ljava/lang/String; method_2740 func_212349_h - m (Lnet/minecraft/class_4185;)V method_19939 func_214327_a - m (Z)V method_19940 func_214324_a - m (Lnet/minecraft/class_4185;)V method_19943 func_214323_d - m (Lnet/minecraft/class_4185;)V method_19941 func_214328_b - m (Lnet/minecraft/class_4185;)V method_19942 func_214330_c - m (Lnet/minecraft/class_4185;)V method_19945 func_214325_f - m (Ljava/util/List;)V method_2739 func_239026_b_ - m (Lnet/minecraft/class_4185;)V method_19944 func_214326_e - m (Ljava/lang/String;)Ljava/lang/String; method_2745 func_212351_b - f Lnet/minecraft/class_528; field_3218 selectionList - f Lnet/minecraft/class_4185; field_3219 deleteButton - f Lnet/minecraft/class_4185; field_3215 renameButton - f Lnet/minecraft/class_4185; field_3216 copyButton - f Lnet/minecraft/class_4185; field_3224 selectButton - f Lnet/minecraft/class_342; field_3220 searchField - f Ljava/util/List; field_3222 worldVersTooltip - f Lnet/minecraft/class_437; field_3221 prevScreen -c net/minecraft/class_527 net/minecraft/client/gui/screen/OptimizeWorldScreen - m (Lnet/minecraft/class_4185;)V method_19938 func_214331_a - m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap;)V method_2747 func_212346_a - m (Lnet/minecraft/class_310;Lit/unimi/dsi/fastutil/booleans/BooleanConsumer;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/class_32$class_5143;Z)Lnet/minecraft/class_527; method_27031 func_239025_a_ - f Lit/unimi/dsi/fastutil/booleans/BooleanConsumer; field_3233 field_214332_b - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_3232 PROGRESS_BAR_COLORS - f Lorg/apache/logging/log4j/Logger; field_25482 field_239024_a_ - f Lnet/minecraft/class_1257; field_3234 optimizer -c net/minecraft/class_5317 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30664 func_243454_c - m ()Lnet/minecraft/class_2561; method_29075 func_239077_a_ - m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;)Lnet/minecraft/class_437; method_29084 func_239085_b_ - m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;)Lnet/minecraft/class_437; method_29086 func_239087_c_ - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2378;J)Lnet/minecraft/class_2794; method_29076 func_241869_a - m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;)Lnet/minecraft/class_437; method_29080 func_239081_a_ - m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;Lnet/minecraft/class_1959;)V method_29087 func_239088_c_ - m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;Lnet/minecraft/class_1959;)V method_29085 func_239086_b_ - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_5285;)Lnet/minecraft/class_1959; method_29083 func_243451_a - m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;Lnet/minecraft/class_1959;)V method_29081 func_239082_a_ - m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;)Lnet/minecraft/class_437; method_29088 func_239089_d_ - m (Lnet/minecraft/class_5455$class_5457;JZZ)Lnet/minecraft/class_5285; method_29077 func_241220_a_ - m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;Lnet/minecraft/class_3232;)V method_29082 func_239083_a_ - m (Lnet/minecraft/class_5455;Lnet/minecraft/class_5285;Lnet/minecraft/class_5317;Lnet/minecraft/class_1959;)Lnet/minecraft/class_5285; method_29079 func_243452_a - m (Lnet/minecraft/class_5285;)Ljava/util/Optional; method_29078 func_239079_a_ - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30663 func_243453_b - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30662 func_243450_a - f Lnet/minecraft/class_5317; field_25051 field_239067_b_ - f Lnet/minecraft/class_5317; field_25055 field_239071_f_ - f Lnet/minecraft/class_5317; field_25056 field_239072_g_ - f Lnet/minecraft/class_5317; field_25054 field_239070_e_ - f Lnet/minecraft/class_5317; field_25050 field_239066_a_ - f Ljava/util/List; field_25052 field_239068_c_ - f Lnet/minecraft/class_5317; field_25058 field_239074_i_ - f Ljava/util/Map; field_25053 field_239069_d_ - f Lnet/minecraft/class_5317; field_25057 field_239073_h_ - f Lnet/minecraft/class_5317; field_25059 field_239075_j_ - f Lnet/minecraft/class_2561; field_25060 field_239076_k_ -c net/minecraft/class_5317$class_5293 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$IFactory - m (Lnet/minecraft/class_525;Lnet/minecraft/class_5285;)Lnet/minecraft/class_437; createEditScreen createEditScreen -c net/minecraft/class_5317$5 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$5 - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30668 func_243458_a -c net/minecraft/class_5317$6 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$6 - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_2874; method_31135 func_243460_b - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_31134 func_243459_a -c net/minecraft/class_5317$3 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$3 - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30666 func_243456_a -c net/minecraft/class_5317$4 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$4 - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30667 func_243457_a -c net/minecraft/class_5317$1 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$1 - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30665 func_243455_a -c net/minecraft/class_5317$2 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$2 -c net/minecraft/class_5317$7 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$7 - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_5284; method_30670 func_243461_a -c net/minecraft/class_5317$8 net/minecraft/client/gui/screen/BiomeGeneratorTypeScreens$8 -c net/minecraft/class_5292 net/minecraft/client/gui/screen/WorldOptionsScreen - m (Ljava/lang/String;)Ljava/util/OptionalLong; method_28095 func_239053_a_ - m (Lnet/minecraft/class_525;Lnet/minecraft/class_4185;)V method_28093 func_239050_a_ - m (Lnet/minecraft/class_5285;)V method_28086 func_239043_a_ - m (Ljava/lang/String;)V method_28100 func_239058_b_ - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5285;)V method_29073 func_239052_a_ - m ()Z method_28085 func_239042_a_ - m ()Lnet/minecraft/class_2561; method_28097 func_239061_d_ - m ()Lnet/minecraft/class_5455$class_5457; method_29700 func_239055_b_ - m (Lnet/minecraft/class_5292;)Lnet/minecraft/class_5285; method_28094 func_239051_a_ - m ()Lnet/minecraft/class_2561; method_29072 func_239060_c_ - m (Lnet/minecraft/class_310;Lnet/minecraft/class_525;Lnet/minecraft/class_4185;)V method_28087 func_239044_a_ - m (Lnet/minecraft/class_525;Lnet/minecraft/class_310;Lnet/minecraft/class_327;)V method_28092 func_239048_a_ - m (Lnet/minecraft/class_310;Lnet/minecraft/class_525;Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5285;Z)V method_29069 func_239045_a_ - m (Z)V method_28101 func_239059_b_ - m (Lnet/minecraft/class_5382;Lcom/google/gson/JsonElement;)Lcom/mojang/serialization/DataResult; method_31131 func_243446_a - m (Z)Lnet/minecraft/class_5285; method_28096 func_239054_a_ - m (Lnet/minecraft/class_525;Lnet/minecraft/class_310;Lnet/minecraft/class_4185;)V method_29071 func_239049_a_ - m (Lnet/minecraft/class_310;Lnet/minecraft/class_525;Lnet/minecraft/class_5455$class_5457;Lcom/mojang/serialization/Lifecycle;Lnet/minecraft/class_5285;)V method_29070 func_239046_a_ - m (Lnet/minecraft/class_4185;)V method_28088 func_239047_a_ - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5285;)V method_31133 func_243448_b - m (Lnet/minecraft/class_5292;)Ljava/util/Optional; method_29074 func_239057_b_ - m (Lnet/minecraft/class_5350;)V method_31132 func_243447_a - m (Ljava/util/OptionalLong;)Ljava/lang/String; method_30510 func_243445_a - m (Lnet/minecraft/class_4185;)V method_28098 func_239056_b_ - m ()Ljava/util/OptionalLong; method_30511 func_243449_f - f I field_24593 field_239032_f_ - f Lnet/minecraft/class_4185; field_24589 field_239027_a_ - f Lnet/minecraft/class_2561; field_26604 field_243442_e - f Lnet/minecraft/class_327; field_24592 field_239031_e_ - f Lnet/minecraft/class_2561; field_25047 field_239029_c_ - f Lnet/minecraft/class_2561; field_24591 field_239030_d_ - f Ljava/util/Optional; field_25049 field_239040_n_ - f Lnet/minecraft/class_342; field_24594 field_239033_g_ - f Lnet/minecraft/class_4185; field_24595 field_239034_h_ - f Lnet/minecraft/class_5285; field_24598 field_239039_m_ - f Lnet/minecraft/class_5455$class_5457; field_25483 field_239038_l_ - f Ljava/util/OptionalLong; field_24600 field_243444_q - f Lnet/minecraft/class_4185; field_25048 field_239037_k_ - f Lnet/minecraft/class_5489; field_26605 field_243443_f - f Lnet/minecraft/class_4185; field_24596 field_239035_i_ - f Lnet/minecraft/class_4185; field_24597 field_239036_j_ - f Lorg/apache/logging/log4j/Logger; field_25046 field_239028_b_ -c net/minecraft/class_5292$2 net/minecraft/client/gui/screen/WorldOptionsScreen$2 - f Lnet/minecraft/class_5292; field_24602 field_239063_a_ -c net/minecraft/class_5292$3 net/minecraft/client/gui/screen/WorldOptionsScreen$3 - f Lnet/minecraft/class_5292; field_24604 field_239065_b_ - f Lnet/minecraft/class_525; field_24603 field_239064_a_ -c net/minecraft/class_5292$1 net/minecraft/client/gui/screen/WorldOptionsScreen$1 - f Lnet/minecraft/class_5292; field_24601 field_239062_a_ -c net/minecraft/class_528 net/minecraft/client/gui/screen/WorldSelectionList - m ()Lnet/minecraft/class_2561; method_30911 func_243470_w - m ()Ljava/text/DateFormat; method_20160 func_214371_c - m (Lnet/minecraft/class_528$class_4272;)Z method_30017 func_241652_b_ - m ()Lnet/minecraft/class_2561; method_30910 func_243469_u - m ()Lnet/minecraft/class_2960; method_20162 func_214374_e - m ()Lnet/minecraft/class_2960; method_20161 func_214372_d - m (Lnet/minecraft/class_528;)I method_20158 func_243468_a - m ()Ljava/util/Optional; method_20159 func_214376_a - m ()Lnet/minecraft/class_526; method_2752 getGuiWorldSelection - m (Ljava/util/function/Supplier;Z)V method_2750 func_212330_a - m ()Lorg/apache/logging/log4j/Logger; method_20163 func_243467_A - m (Lnet/minecraft/class_528$class_4272;)V method_20157 setSelected - m ()Lnet/minecraft/class_2561; method_30913 func_243472_y - m ()Lnet/minecraft/class_2561; method_30912 func_243471_x - m ()Lnet/minecraft/class_2561; method_30914 func_243473_z - f Lorg/apache/logging/log4j/Logger; field_3238 LOGGER - f Lnet/minecraft/class_526; field_3237 worldSelection - f Lnet/minecraft/class_2561; field_26609 field_243465_u - f Lnet/minecraft/class_2561; field_26608 field_243464_t - f Ljava/text/DateFormat; field_19132 field_214377_b - f Lnet/minecraft/class_2561; field_26610 field_243466_v - f Lnet/minecraft/class_2561; field_26606 field_243462_r - f Lnet/minecraft/class_2561; field_26607 field_243463_s - f Ljava/util/List; field_3239 field_212331_y - f Lnet/minecraft/class_2960; field_19133 field_214378_c - f Lnet/minecraft/class_2960; field_19134 field_214379_d -c net/minecraft/class_528$class_4272 net/minecraft/client/gui/screen/WorldSelectionList$Entry - m ()V method_20171 func_214444_c - m ()V method_20173 func_214445_d - m ()V method_20174 func_214443_e - m ()V method_29990 func_241653_f_ - m ()Ljava/lang/String; method_20178 func_214447_i - m ()Ljava/lang/String; method_27034 func_214433_h - m ()Lnet/minecraft/class_1043; method_20175 func_214446_f - m ()Ljava/lang/String; method_27033 func_239098_h_ - m ()V method_20164 func_214438_a - m (Lnet/minecraft/class_1940;Lnet/minecraft/class_5285;Ljava/nio/file/Path;Lnet/minecraft/class_5359;Lnet/minecraft/class_5455$class_5457;Z)V method_20165 func_239095_a - m (ZZ)V method_20167 func_214436_a - m ()V method_20169 func_214442_b - m (Lnet/minecraft/class_528$class_4272;)Lnet/minecraft/class_34; method_20166 func_214437_a - m (Z)V method_20170 func_214440_b - m (Lnet/minecraft/class_32$class_5143;Ljava/lang/String;Z)V method_27032 func_239096_a_ - m ()V close close - m (Z)V method_20172 func_214434_c - m ()V method_20176 func_239097_g_ - m ()V method_20179 func_214441_j - f Lnet/minecraft/class_34; field_19138 field_214451_d - f Lnet/minecraft/class_528; field_19135 field_214448_a - f Lnet/minecraft/class_310; field_19136 field_214449_b - f Lnet/minecraft/class_526; field_19137 field_214450_c - f Ljava/io/File; field_19140 field_214453_f - f J field_19142 field_214455_h - f Lnet/minecraft/class_1043; field_19141 field_214454_g - f Lnet/minecraft/class_2960; field_19139 field_214452_e -c net/minecraft/class_534 net/minecraft/client/gui/spectator/BaseSpectatorGroup - f Lnet/minecraft/class_2561; field_26612 field_243476_a - f Ljava/util/List; field_3266 items -c net/minecraft/class_530 net/minecraft/client/gui/spectator/PlayerMenuObject - f Lnet/minecraft/class_2960; field_3252 resourceLocation - f Lcom/mojang/authlib/GameProfile; field_3253 profile - f Lnet/minecraft/class_2585; field_26611 field_243475_c -c net/minecraft/class_535 net/minecraft/client/gui/spectator/ISpectatorMenuView - m ()Lnet/minecraft/class_2561; method_2781 getPrompt - m ()Ljava/util/List; method_2780 getItems -c net/minecraft/class_531 net/minecraft/client/gui/spectator/SpectatorMenu - m (I)Lnet/minecraft/class_537; method_2777 getItem - m (Lnet/minecraft/class_531;)I method_2769 func_243480_a - m ()V method_2779 exit - m ()Lnet/minecraft/class_2561; method_30915 func_243482_g - m ()Lnet/minecraft/class_2561; method_30917 func_243484_i - m ()Lnet/minecraft/class_2561; method_30916 func_243483_h - m ()Lnet/minecraft/class_535; method_2776 getSelectedCategory - m (I)V method_2771 selectSlot - m (Lnet/minecraft/class_535;)V method_2778 selectCategory - m ()I method_2773 getSelectedSlot - m (Lnet/minecraft/class_531;I)I method_2775 func_243481_a - m ()Lnet/minecraft/class_537; method_2774 getSelectedItem - m ()Lnet/minecraft/class_539; method_2772 getCurrentPage - m ()Ljava/util/List; method_2770 getItems - f Lnet/minecraft/class_537; field_3261 CLOSE_ITEM - f I field_3263 page - f Lnet/minecraft/class_537; field_3260 EMPTY_SLOT - f Lnet/minecraft/class_537; field_3256 SCROLL_RIGHT_ENABLED - f Lnet/minecraft/class_537; field_3259 SCROLL_RIGHT_DISABLED - f Lnet/minecraft/class_537; field_3262 SCROLL_LEFT - f Lnet/minecraft/class_2561; field_26615 field_243479_h - f Lnet/minecraft/class_2561; field_26613 field_243477_f - f I field_3254 selectedSlot - f Lnet/minecraft/class_535; field_3258 category - f Lnet/minecraft/class_536; field_3255 listener - f Lnet/minecraft/class_2561; field_26614 field_243478_g -c net/minecraft/class_531$class_532 net/minecraft/client/gui/spectator/SpectatorMenu$EndSpectatorObject -c net/minecraft/class_531$class_533 net/minecraft/client/gui/spectator/SpectatorMenu$MoveMenuObject - f I field_3264 direction - f Z field_3265 enabled -c net/minecraft/class_531$1 net/minecraft/client/gui/spectator/SpectatorMenu$1 -c net/minecraft/class_536 net/minecraft/client/gui/spectator/ISpectatorMenuRecipient - m (Lnet/minecraft/class_531;)V method_2782 onSpectatorMenuClosed -c net/minecraft/class_537 net/minecraft/client/gui/spectator/ISpectatorMenuObject - m (Lnet/minecraft/class_531;)V method_2783 selectItem - m ()Lnet/minecraft/class_2561; method_16892 getSpectatorName - m (Lnet/minecraft/class_4587;FI)V method_2784 func_230485_a_ - m ()Z method_16893 isEnabled -c net/minecraft/class_538 net/minecraft/client/gui/spectator/categories/TeleportToPlayer - m (Lnet/minecraft/class_640;Lnet/minecraft/class_640;)I method_2785 func_210243_a - f Ljava/util/List; field_3268 items - f Lcom/google/common/collect/Ordering; field_3267 PROFILE_ORDER - f Lnet/minecraft/class_2561; field_26616 field_243485_b - f Lnet/minecraft/class_2561; field_26617 field_243486_c -c net/minecraft/class_539 net/minecraft/client/gui/spectator/categories/SpectatorDetails - m ()I method_2787 getSelectedSlot - m (I)Lnet/minecraft/class_537; method_2786 getObject - f I field_3269 selectedSlot - f Ljava/util/List; field_3271 items - f Lnet/minecraft/class_535; field_3270 category -c net/minecraft/class_540 net/minecraft/client/gui/spectator/categories/TeleportToTeam - f Lnet/minecraft/class_2561; field_26618 field_243487_a - f Lnet/minecraft/class_2561; field_26619 field_243488_b - f Ljava/util/List; field_3272 items -c net/minecraft/class_540$class_541 net/minecraft/client/gui/spectator/categories/TeleportToTeam$TeamSelectionObject - f Lnet/minecraft/class_268; field_3275 team - f Ljava/util/List; field_3274 players - f Lnet/minecraft/class_540; field_3273 field_178678_a - f Lnet/minecraft/class_2960; field_3276 location -c net/minecraft/class_542 net/minecraft/client/GameConfiguration - f Lnet/minecraft/class_542$class_547; field_3278 userInfo - f Lnet/minecraft/class_542$class_546; field_3281 serverInfo - f Lnet/minecraft/class_542$class_545; field_3280 gameInfo - f Lnet/minecraft/class_542$class_544; field_3277 folderInfo - f Lnet/minecraft/class_543; field_3279 displayInfo -c net/minecraft/class_542$class_547 net/minecraft/client/GameConfiguration$UserInformation - f Ljava/net/Proxy; field_3296 proxy - f Lcom/mojang/authlib/properties/PropertyMap; field_3297 profileProperties - f Lcom/mojang/authlib/properties/PropertyMap; field_3298 userProperties - f Lnet/minecraft/class_320; field_3299 session -c net/minecraft/class_542$class_546 net/minecraft/client/GameConfiguration$ServerInformation - f I field_3295 serverPort - f Ljava/lang/String; field_3294 serverName -c net/minecraft/class_542$class_545 net/minecraft/client/GameConfiguration$GameInformation - f Ljava/lang/String; field_3293 version - f Ljava/lang/String; field_3291 versionType - f Z field_25061 disableMultiplayer - f Z field_25062 disableChat - f Z field_3292 isDemo -c net/minecraft/class_542$class_544 net/minecraft/client/GameConfiguration$FolderInformation - m ()Lnet/minecraft/class_1064; method_2788 getAssetsIndex - f Ljava/lang/String; field_3288 assetIndex - f Ljava/io/File; field_3289 assetsDir - f Ljava/io/File; field_3290 resourcePacksDir - f Ljava/io/File; field_3287 gameDir -c net/minecraft/class_4718 net/minecraft/client/util/UndeclaredException -c net/minecraft/class_4592 net/minecraft/client/renderer/entity/model/AgeableModel - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22947 func_228227_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22949 func_228228_b_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22950 func_228229_c_ - m ()Ljava/lang/Iterable; method_22948 getBodyParts - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22951 func_228230_d_ - m ()Ljava/lang/Iterable; method_22946 getHeadParts - f F field_20918 childHeadScale - f F field_20917 childHeadOffsetZ - f F field_20920 childBodyOffsetY - f F field_20919 childBodyScale - f Z field_20915 isChildHeadScaled - f F field_20916 childHeadOffsetY -c net/minecraft/class_3968 net/minecraft/client/renderer/entity/model/AbstractZombieModel - m (Lnet/minecraft/class_1588;)Z method_17790 isAggressive - m (Lnet/minecraft/class_1588;FFFFF)V method_17791 setRotationAngles -c net/minecraft/class_3881 net/minecraft/client/renderer/entity/model/IHasArm - m (Lnet/minecraft/class_1306;Lnet/minecraft/class_4587;)V method_2803 translateHand -c net/minecraft/class_4896 net/minecraft/client/renderer/model/ModelHelper - m (Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_1309;Z)V method_25446 func_239102_a_ - m (Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Z)V method_25447 func_239104_a_ - m (Lnet/minecraft/class_630;Lnet/minecraft/class_630;F)V method_29350 func_239101_a_ - m (Lnet/minecraft/class_630;Lnet/minecraft/class_630;ZFF)V method_29352 func_239105_a_ - m (Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_1308;FF)V method_29351 func_239103_a_ -c net/minecraft/class_548 net/minecraft/client/renderer/entity/model/ArmorStandArmorModel - m (Lnet/minecraft/class_1531;FFFFF)V method_17066 setRotationAngles -c net/minecraft/class_553 net/minecraft/client/renderer/entity/model/BatModel - m (Lnet/minecraft/class_1420;FFFFF)V method_17069 setRotationAngles - f Lnet/minecraft/class_630; field_3324 batOuterLeftWing - f Lnet/minecraft/class_630; field_3319 batOuterRightWing - f Lnet/minecraft/class_630; field_3323 batBody - f Lnet/minecraft/class_630; field_3320 batLeftWing - f Lnet/minecraft/class_630; field_3322 batRightWing - f Lnet/minecraft/class_630; field_3321 batHead -c net/minecraft/class_551 net/minecraft/client/renderer/entity/model/ArmorStandModel - m (Lnet/minecraft/class_1531;FFF)V method_24223 setLivingAnimations - f Lnet/minecraft/class_630; field_3315 standLeftSide - f Lnet/minecraft/class_630; field_3314 standRightSide - f Lnet/minecraft/class_630; field_3312 standBase - f Lnet/minecraft/class_630; field_3313 standWaist -c net/minecraft/class_555 net/minecraft/client/renderer/entity/model/BlazeModel - f Lcom/google/common/collect/ImmutableList; field_20921 field_228242_f_ - f Lnet/minecraft/class_630; field_3329 blazeHead - f [Lnet/minecraft/class_630; field_3328 blazeSticks -c net/minecraft/class_4495 net/minecraft/client/renderer/entity/model/BeeModel - m (Lnet/minecraft/class_4466;FFFFF)V method_22112 setRotationAngles - m (Lnet/minecraft/class_4466;FFF)V method_22111 setLivingAnimations - f Lnet/minecraft/class_630; field_20504 body - f Lnet/minecraft/class_630; field_20512 leftAntenna - f Lnet/minecraft/class_630; field_20511 stinger - f Lnet/minecraft/class_630; field_20506 rightWing - f F field_20514 bodyPitch - f Lnet/minecraft/class_630; field_20510 backLegs - f Lnet/minecraft/class_630; field_20509 middleLegs - f Lnet/minecraft/class_630; field_20513 rightAntenna - f Lnet/minecraft/class_630; field_20508 frontLegs - f Lnet/minecraft/class_630; field_20507 leftWing - f Lnet/minecraft/class_630; field_20505 torso -c net/minecraft/class_557 net/minecraft/client/renderer/entity/model/BookModel - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22695 func_228248_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFF)V method_24184 renderAll - m (FFFF)V method_17073 setBookState - f Lnet/minecraft/class_630; field_3337 pagesRight - f Lnet/minecraft/class_630; field_3338 coverLeft - f Lnet/minecraft/class_630; field_3333 bookSpine - f Lnet/minecraft/class_630; field_3339 flippingPageLeft - f Lnet/minecraft/class_630; field_3336 coverRight - f Lnet/minecraft/class_630; field_3334 flippingPageRight - f Lnet/minecraft/class_630; field_3335 pagesLeft - f Ljava/util/List; field_20786 bookParts -c net/minecraft/class_554 net/minecraft/client/renderer/entity/model/BoatModel - m (Lnet/minecraft/class_1690;IF)V method_2797 func_228244_a_ - m (Z)Lnet/minecraft/class_630; method_2796 makePaddle - m (Lnet/minecraft/class_1690;FFFFF)V method_22952 setRotationAngles - m ()Lnet/minecraft/class_630; method_22954 func_228245_c_ - m ()Lcom/google/common/collect/ImmutableList; method_22953 getParts - f [Lnet/minecraft/class_630; field_3325 paddles - f Lcom/google/common/collect/ImmutableList; field_20922 field_228243_f_ - f Lnet/minecraft/class_630; field_3326 noWater -c net/minecraft/class_559 net/minecraft/client/renderer/entity/model/HorseArmorChestsModel - m (Lnet/minecraft/class_1492;FFFFF)V method_17076 setRotationAngles - f Lnet/minecraft/class_630; field_3348 field_199058_d - f Lnet/minecraft/class_630; field_3349 field_199057_c -c net/minecraft/class_3680 net/minecraft/client/renderer/entity/model/CatModel - m (Lnet/minecraft/class_1451;FFF)V method_17074 setLivingAnimations - m (Lnet/minecraft/class_1451;FFFFF)V method_17075 setRotationAngles - f F field_16245 field_217155_m - f F field_16244 field_217156_n - f F field_16243 field_217157_o -c net/minecraft/class_561 net/minecraft/client/renderer/entity/model/CodModel - f Lnet/minecraft/class_630; field_3352 headFront - f Lnet/minecraft/class_630; field_3353 body - f Lnet/minecraft/class_630; field_3354 head - f Lnet/minecraft/class_630; field_3350 tail - f Lnet/minecraft/class_630; field_3356 finLeft - f Lnet/minecraft/class_630; field_3351 finRight - f Lnet/minecraft/class_630; field_3355 finTop -c net/minecraft/class_558 net/minecraft/client/renderer/entity/model/ChickenModel - f Lnet/minecraft/class_630; field_3340 bill - f Lnet/minecraft/class_630; field_3347 leftWing - f Lnet/minecraft/class_630; field_3341 rightWing - f Lnet/minecraft/class_630; field_3346 body - f Lnet/minecraft/class_630; field_3343 leftLeg - f Lnet/minecraft/class_630; field_3344 head - f Lnet/minecraft/class_630; field_3345 rightLeg - f Lnet/minecraft/class_630; field_3342 chin -c net/minecraft/class_4594 net/minecraft/client/renderer/entity/model/AbstractTropicalFishModel - m (FFF)V method_22956 func_228257_a_ - f F field_20926 field_228254_a_ - f F field_20928 field_228256_f_ - f F field_20927 field_228255_b_ -c net/minecraft/class_4593 net/minecraft/client/renderer/entity/model/TintedAgeableModel - m (FFF)V method_22955 setTint - f F field_20925 blueTint - f F field_20923 redTint - f F field_20924 greenTint -c net/minecraft/class_562 net/minecraft/client/renderer/entity/model/CreeperModel - f Lnet/minecraft/class_630; field_3357 leg4 - f Lnet/minecraft/class_630; field_3363 leg3 - f Lnet/minecraft/class_630; field_3358 leg2 - f Lnet/minecraft/class_630; field_3362 creeperArmor - f Lnet/minecraft/class_630; field_3359 leg1 - f Lnet/minecraft/class_630; field_3360 head - f Lnet/minecraft/class_630; field_3361 body -c net/minecraft/class_560 net/minecraft/client/renderer/entity/model/CowModel - m ()Lnet/minecraft/class_630; method_2800 getHead -c net/minecraft/class_564 net/minecraft/client/renderer/entity/model/DrownedModel - m (Lnet/minecraft/class_1642;FFF)V method_17077 setLivingAnimations - m (Lnet/minecraft/class_1642;FFFFF)V method_17134 setRotationAngles -c net/minecraft/class_889 net/minecraft/client/renderer/entity/model/DolphinModel - f Lnet/minecraft/class_630; field_4657 tail - f Lnet/minecraft/class_630; field_4658 body - f Lnet/minecraft/class_630; field_4655 tailFin -c net/minecraft/class_566 net/minecraft/client/renderer/entity/model/EndermanModel - f Z field_3371 isCarrying - f Z field_3370 isAttacking -c net/minecraft/class_563 net/minecraft/client/renderer/entity/model/ElytraModel - m (Lnet/minecraft/class_1309;FFFFF)V method_17079 setRotationAngles - f Lnet/minecraft/class_630; field_3365 leftWing - f Lnet/minecraft/class_630; field_3364 rightWing -c net/minecraft/class_583 net/minecraft/client/renderer/entity/model/EntityModel - m (Lnet/minecraft/class_1297;FFFFF)V method_2819 setRotationAngles - m (Lnet/minecraft/class_583;)V method_17081 copyModelAttributesTo - m (Lnet/minecraft/class_1297;FFF)V method_2816 setLivingAnimations - f Z field_3449 isSitting - f Z field_3448 isChild - f F field_3447 swingProgress -c net/minecraft/class_565 net/minecraft/client/renderer/entity/model/EndermiteModel - f [[I field_3366 BODY_SIZES - f I field_3367 BODY_COUNT - f [[I field_3369 BODY_TEXS - f [Lnet/minecraft/class_630; field_3368 bodyParts -c net/minecraft/class_4041 net/minecraft/client/renderer/entity/model/FoxModel - m (Lnet/minecraft/class_4019;FFFFF)V method_18332 setRotationAngles - m (Lnet/minecraft/class_4019;FFF)V method_18330 setLivingAnimations - f Lnet/minecraft/class_630; field_18019 body - f Lnet/minecraft/class_630; field_18024 tail - f F field_18025 field_217125_n - f Lnet/minecraft/class_630; field_18016 rightEar - f Lnet/minecraft/class_630; field_18018 snout - f Lnet/minecraft/class_630; field_18023 legFrontLeft - f Lnet/minecraft/class_630; field_18015 head - f Lnet/minecraft/class_630; field_18017 leftEar - f Lnet/minecraft/class_630; field_18022 legFrontRight - f Lnet/minecraft/class_630; field_18021 legBackLeft - f Lnet/minecraft/class_630; field_18020 legBackRight -c net/minecraft/class_568 net/minecraft/client/renderer/entity/model/EvokerFangsModel - f Lnet/minecraft/class_630; field_3375 lowerJaw - f Lnet/minecraft/class_630; field_3376 upperJaw - f Lnet/minecraft/class_630; field_3374 base -c net/minecraft/class_3969 net/minecraft/client/renderer/entity/model/GiantModel - m (Lnet/minecraft/class_1570;)Z method_17792 isAggressive -c net/minecraft/class_567 net/minecraft/client/renderer/entity/model/GhastModel - f Lcom/google/common/collect/ImmutableList; field_20929 field_228260_b_ - f [Lnet/minecraft/class_630; field_3372 tentacles -c net/minecraft/class_570 net/minecraft/client/renderer/entity/model/GuardianModel - m (Lnet/minecraft/class_1577;FFFFF)V method_17083 setRotationAngles - m (FF)V method_24185 func_228261_a_ - f [F field_17135 field_217140_h - f Lnet/minecraft/class_630; field_3381 guardianEye - f [F field_17136 field_217141_i - f [Lnet/minecraft/class_630; field_3380 guardianSpines - f [Lnet/minecraft/class_630; field_3378 guardianTail - f [F field_17131 field_217136_a - f [F field_17133 field_217138_f - f [F field_17134 field_217139_g - f Lnet/minecraft/class_630; field_3379 guardianBody - f [F field_17132 field_217137_b -c net/minecraft/class_4791 net/minecraft/client/renderer/entity/model/BoarModel - m (Lnet/minecraft/class_1308;FFFFF)V method_24461 setRotationAngles - f Lnet/minecraft/class_630; field_22234 field_239113_k_ - f Lnet/minecraft/class_630; field_22229 field_239108_f_ - f Lnet/minecraft/class_630; field_22227 field_239106_a_ - f Lnet/minecraft/class_630; field_25484 field_239114_l_ - f Lnet/minecraft/class_630; field_22230 field_239109_g_ - f Lnet/minecraft/class_630; field_22228 field_239107_b_ - f Lnet/minecraft/class_630; field_22231 field_239110_h_ - f Lnet/minecraft/class_630; field_22232 field_239111_i_ - f Lnet/minecraft/class_630; field_22233 field_239112_j_ -c net/minecraft/class_3882 net/minecraft/client/renderer/entity/model/IHasHead - m ()Lnet/minecraft/class_630; method_2838 getModelHead -c net/minecraft/class_569 net/minecraft/client/renderer/entity/model/HumanoidHeadModel - f Lnet/minecraft/class_630; field_3377 head -c net/minecraft/class_549 net/minecraft/client/renderer/entity/model/HorseModel - m (Lnet/minecraft/class_1496;FFF)V method_17084 setLivingAnimations - m (Lnet/minecraft/class_1496;FFFFF)V method_17085 setRotationAngles - m (Lnet/minecraft/class_630;)V method_2789 func_199047_a - f Lnet/minecraft/class_630; field_20933 field_228269_m_ - f [Lnet/minecraft/class_630; field_3304 field_217134_k - f Lnet/minecraft/class_630; field_3300 field_217133_j - f [Lnet/minecraft/class_630; field_3301 field_217135_l - f Lnet/minecraft/class_630; field_20931 field_228267_k_ - f Lnet/minecraft/class_630; field_3305 body - f Lnet/minecraft/class_630; field_20932 field_228268_l_ - f Lnet/minecraft/class_630; field_3307 head - f Lnet/minecraft/class_630; field_3302 field_228264_h_ - f Lnet/minecraft/class_630; field_3308 field_228265_i_ - f Lnet/minecraft/class_630; field_20930 field_228266_j_ - f Lnet/minecraft/class_630; field_3306 field_228262_f_ - f Lnet/minecraft/class_630; field_3303 field_228263_g_ -c net/minecraft/class_575 net/minecraft/client/renderer/entity/model/IllagerModel - m ()Lnet/minecraft/class_630; method_2812 func_205062_a - m (Lnet/minecraft/class_1543;FFFFF)V method_17094 setRotationAngles - m (Lnet/minecraft/class_1306;)Lnet/minecraft/class_630; method_2813 getArm - f Lnet/minecraft/class_630; field_3426 rightArm - f Lnet/minecraft/class_630; field_3417 leftArm - f Lnet/minecraft/class_630; field_3425 body - f Lnet/minecraft/class_630; field_3422 head - f Lnet/minecraft/class_630; field_3423 arms - f Lnet/minecraft/class_630; field_3419 hat - f Lnet/minecraft/class_630; field_3420 field_217143_g - f Lnet/minecraft/class_630; field_3418 field_217144_h -c net/minecraft/class_572 net/minecraft/client/renderer/entity/model/BipedModel - m (Lnet/minecraft/class_1309;FFF)V method_17086 setLivingAnimations - m (Lnet/minecraft/class_572;)V method_2818 setModelAttributes - m (Lnet/minecraft/class_1309;F)V method_29353 func_230486_a_ - m (F)F method_2807 getArmAngleSq - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1306; method_2806 getMainHand - m (FFF)F method_2804 rotLerpRad - m (Z)V method_2805 setVisible - m (Lnet/minecraft/class_1309;)V method_30155 func_241655_c_ - m (Lnet/minecraft/class_1309;)V method_30154 func_241654_b_ - m (Lnet/minecraft/class_1309;FFFFF)V method_17087 setRotationAngles - m (Lnet/minecraft/class_1306;)Lnet/minecraft/class_630; method_2808 getArmForSide - f Lnet/minecraft/class_630; field_3394 bipedHeadwear - f Lnet/minecraft/class_630; field_3391 bipedBody - f Lnet/minecraft/class_630; field_3401 bipedRightArm - f Z field_3400 isSneak - f Lnet/minecraft/class_630; field_3398 bipedHead - f Lnet/minecraft/class_572$class_573; field_3399 leftArmPose - f Lnet/minecraft/class_572$class_573; field_3395 rightArmPose - f Lnet/minecraft/class_630; field_3390 bipedLeftArm - f Lnet/minecraft/class_630; field_3392 bipedRightLeg - f F field_3396 swimAnimation - f Lnet/minecraft/class_630; field_3397 bipedLeftLeg -c net/minecraft/class_572$class_573 net/minecraft/client/renderer/entity/model/BipedModel$ArmPose - m ()[Lnet/minecraft/class_572$class_573; values values - m ()Z method_30156 func_241657_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_572$class_573; valueOf valueOf - f Lnet/minecraft/class_572$class_573; field_3410 ITEM - f [Lnet/minecraft/class_572$class_573; field_3404 $VALUES - f Lnet/minecraft/class_572$class_573; field_3406 BLOCK - f Z field_25722 field_241656_h_ - f Lnet/minecraft/class_572$class_573; field_3403 BOW_AND_ARROW - f Lnet/minecraft/class_572$class_573; field_3407 THROW_SPEAR - f Lnet/minecraft/class_572$class_573; field_3405 CROSSBOW_CHARGE - f Lnet/minecraft/class_572$class_573; field_3409 EMPTY - f Lnet/minecraft/class_572$class_573; field_3408 CROSSBOW_HOLD -c net/minecraft/class_572$1 net/minecraft/client/renderer/entity/model/BipedModel$1 - f [I field_3402 field_187083_a -c net/minecraft/class_576 net/minecraft/client/renderer/entity/model/MagmaCubeModel - m (Lnet/minecraft/class_1621;FFF)V method_17098 setLivingAnimations - m (Lnet/minecraft/class_1621;FFFFF)V method_22958 setRotationAngles - m ()Lcom/google/common/collect/ImmutableList; method_22959 getParts - f [Lnet/minecraft/class_630; field_3427 segments - f Lcom/google/common/collect/ImmutableList; field_20934 field_228271_f_ - f Lnet/minecraft/class_630; field_3428 core -c net/minecraft/class_574 net/minecraft/client/renderer/entity/model/IronGolemModel - m (Lnet/minecraft/class_1439;FFFFF)V method_17097 setRotationAngles - m (Lnet/minecraft/class_1439;FFF)V method_17095 setLivingAnimations - m ()Lnet/minecraft/class_630; method_2809 getArmHoldingRose - f Lnet/minecraft/class_630; field_3415 ironGolemHead - f Lnet/minecraft/class_630; field_3412 ironGolemLeftArm - f Lnet/minecraft/class_630; field_3413 ironGolemBody - f Lnet/minecraft/class_630; field_3411 ironGolemLeftLeg - f Lnet/minecraft/class_630; field_3416 ironGolemRightLeg - f Lnet/minecraft/class_630; field_3414 ironGolemRightArm -c net/minecraft/class_4595 net/minecraft/client/renderer/entity/model/SegmentedModel - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22961 func_228272_a_ - m ()Ljava/lang/Iterable; method_22960 getParts -c net/minecraft/class_579 net/minecraft/client/renderer/entity/model/LeashKnotModel - f Lnet/minecraft/class_630; field_3431 knotRenderer -c net/minecraft/class_581 net/minecraft/client/renderer/entity/model/LlamaSpitModel - f Lnet/minecraft/class_630; field_3433 main -c net/minecraft/class_578 net/minecraft/client/renderer/entity/model/LlamaModel - m (Lnet/minecraft/class_1492;FFFFF)V method_22962 setRotationAngles - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22963 func_228279_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22964 func_228280_b_ - f Lnet/minecraft/class_630; field_20937 legBackRight - f Lnet/minecraft/class_630; field_3429 chest2 - f Lnet/minecraft/class_630; field_20935 head - f Lnet/minecraft/class_630; field_20936 body - f Lnet/minecraft/class_630; field_20938 legBackLeft - f Lnet/minecraft/class_630; field_20939 legFrontRight - f Lnet/minecraft/class_630; field_20940 legFrontLeft - f Lnet/minecraft/class_630; field_3430 chest1 -c net/minecraft/class_3879 net/minecraft/client/renderer/model/Model - m (Ljava/lang/Object;)V accept accept - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23500 getRenderType - m (Lnet/minecraft/class_630;)V method_22696 accept - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFF)V method_2828 render - f Ljava/util/function/Function; field_21343 renderType - f I field_17138 textureWidth - f I field_17139 textureHeight -c net/minecraft/class_580 net/minecraft/client/renderer/entity/model/MinecartModel - f [Lnet/minecraft/class_630; field_3432 sideModels -c net/minecraft/class_582 net/minecraft/client/renderer/entity/model/OcelotModel - f Lnet/minecraft/class_630; field_3439 ocelotBackLeftLeg - f Lnet/minecraft/class_630; field_3440 ocelotFrontLeftLeg - f Lnet/minecraft/class_630; field_3438 ocelotFrontRightLeg - f I field_3434 state - f Lnet/minecraft/class_630; field_3441 ocelotBackRightLeg - f Lnet/minecraft/class_630; field_3436 ocelotTail - f Lnet/minecraft/class_630; field_3442 ocelotTail2 - f Lnet/minecraft/class_630; field_3435 ocelotHead - f Lnet/minecraft/class_630; field_3437 ocelotBody -c net/minecraft/class_4496 net/minecraft/client/renderer/entity/model/ModelUtils - m (FFF)F method_22114 func_228283_a_ -c net/minecraft/class_584 net/minecraft/client/renderer/entity/model/ParrotModel - m (Lnet/minecraft/class_584$class_585;)V method_17110 setLivingAnimations - m (Lnet/minecraft/class_1453;FFFFF)V method_17112 setRotationAngles - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFI)V method_17106 renderOnShoulder - m (Lnet/minecraft/class_584$class_585;IFFFFF)V method_17111 setRotationAngles - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IILnet/minecraft/class_630;)V method_22965 func_228285_a_ - m (Lnet/minecraft/class_1453;FFF)V method_17108 setLivingAnimations - m (Lnet/minecraft/class_1453;)Lnet/minecraft/class_584$class_585; method_17107 getParrotState - f Lnet/minecraft/class_630; field_3453 beak2 - f Lnet/minecraft/class_630; field_3458 body - f Lnet/minecraft/class_630; field_3456 feather - f Lnet/minecraft/class_630; field_3450 legLeft - f Lnet/minecraft/class_630; field_3460 tail - f Lnet/minecraft/class_630; field_3452 head - f Lnet/minecraft/class_630; field_3461 head2 - f Lnet/minecraft/class_630; field_3451 beak1 - f Lnet/minecraft/class_630; field_3459 wingLeft - f Lnet/minecraft/class_630; field_3455 wingRight - f Lnet/minecraft/class_630; field_3457 legRight -c net/minecraft/class_584$class_585 net/minecraft/client/renderer/entity/model/ParrotModel$State - m ()[Lnet/minecraft/class_584$class_585; values values - m (Ljava/lang/String;)Lnet/minecraft/class_584$class_585; valueOf valueOf - f [Lnet/minecraft/class_584$class_585; field_3467 $VALUES - f Lnet/minecraft/class_584$class_585; field_3463 PARTY - f Lnet/minecraft/class_584$class_585; field_3466 SITTING - f Lnet/minecraft/class_584$class_585; field_3465 STANDING - f Lnet/minecraft/class_584$class_585; field_3462 FLYING - f Lnet/minecraft/class_584$class_585; field_3464 ON_SHOULDER -c net/minecraft/class_584$1 net/minecraft/client/renderer/entity/model/ParrotModel$1 - f [I field_17140 field_217176_a -c net/minecraft/class_586 net/minecraft/client/renderer/entity/model/PandaModel - m (Lnet/minecraft/class_1440;FFF)V method_17102 setLivingAnimations - m (Lnet/minecraft/class_1440;FFFFF)V method_17103 setRotationAngles - f F field_3470 field_217164_l - f F field_3469 field_217165_m - f F field_3468 field_217166_n -c net/minecraft/class_587 net/minecraft/client/renderer/entity/model/PigModel -c net/minecraft/class_588 net/minecraft/client/renderer/entity/model/PhantomModel - f Lnet/minecraft/class_630; field_3472 rightWing - f Lnet/minecraft/class_630; field_3471 tail1 - f Lnet/minecraft/class_630; field_3473 tail2 - f Lnet/minecraft/class_630; field_3476 leftWing - f Lnet/minecraft/class_630; field_3475 body - f Lnet/minecraft/class_630; field_3477 leftWingBody - f Lnet/minecraft/class_630; field_3474 rightWingBody -c net/minecraft/class_591 net/minecraft/client/renderer/entity/model/PlayerModel - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;II)V method_2824 renderEars - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;II)V method_2823 renderCape - m (Ljava/util/Random;)Lnet/minecraft/class_630; method_22697 getRandomModelRenderer - f Lnet/minecraft/class_630; field_3484 bipedLeftArmwear - f Lnet/minecraft/class_630; field_3486 bipedRightArmwear - f Lnet/minecraft/class_630; field_3482 bipedLeftLegwear - f Lnet/minecraft/class_630; field_3479 bipedRightLegwear - f Z field_3480 smallArms - f Lnet/minecraft/class_630; field_3485 bipedCape - f Lnet/minecraft/class_630; field_3483 bipedBodyWear - f Lnet/minecraft/class_630; field_3481 bipedDeadmau5Head - f Ljava/util/List; field_20787 modelRenderers -c net/minecraft/class_4840 net/minecraft/client/renderer/entity/model/PiglinModel - m (Lnet/minecraft/class_1308;FFFFF)V method_24803 setRotationAngles - m (Lnet/minecraft/class_1308;)V method_29354 func_239117_a_ - m (Lnet/minecraft/class_1308;F)V method_29355 func_230486_a_ - f Lnet/minecraft/class_630; field_22405 field_239116_b_ - f Lnet/minecraft/class_630; field_25633 field_241659_B_ - f Lnet/minecraft/class_630; field_25634 field_241660_y_ - f Lnet/minecraft/class_630; field_25635 field_241661_z_ - f Lnet/minecraft/class_630; field_22404 field_239115_a_ - f Lnet/minecraft/class_630; field_25632 field_241658_A_ -c net/minecraft/class_592 net/minecraft/client/renderer/entity/model/PufferFishBigModel - f Lnet/minecraft/class_630; field_3498 backRightSpines - f Lnet/minecraft/class_630; field_3492 bottomMidSpines - f Lnet/minecraft/class_630; field_3495 backTopSpines - f Lnet/minecraft/class_630; field_3488 backLeftSpines - f Lnet/minecraft/class_630; field_3497 frontLeftSpines - f Lnet/minecraft/class_630; field_3489 frontRightSpines - f Lnet/minecraft/class_630; field_3491 frontBottomSpines - f Lnet/minecraft/class_630; field_3490 frontTopSpines - f Lnet/minecraft/class_630; field_3494 leftFin - f Lnet/minecraft/class_630; field_3493 body - f Lnet/minecraft/class_630; field_3496 topMidSpines - f Lnet/minecraft/class_630; field_3499 rightFin - f Lnet/minecraft/class_630; field_3487 bottomBackSpines -c net/minecraft/class_590 net/minecraft/client/renderer/entity/model/PolarBearModel - m (Lnet/minecraft/class_1456;FFFFF)V method_17114 setRotationAngles -c net/minecraft/class_594 net/minecraft/client/renderer/entity/model/PufferFishSmallModel - f Lnet/minecraft/class_630; field_3508 tail - f Lnet/minecraft/class_630; field_3503 leftFin - f Lnet/minecraft/class_630; field_3506 leftEye - f Lnet/minecraft/class_630; field_3505 body - f Lnet/minecraft/class_630; field_3507 rightEye - f Lnet/minecraft/class_630; field_3504 rightFin -c net/minecraft/class_595 net/minecraft/client/renderer/entity/model/PufferFishMediumModel - f Lnet/minecraft/class_630; field_3516 body - f Lnet/minecraft/class_630; field_3514 frontLeftSpines - f Lnet/minecraft/class_630; field_3512 backLeftSpines - f Lnet/minecraft/class_630; field_3517 leftFin - f Lnet/minecraft/class_630; field_3509 backBottomSpine - f Lnet/minecraft/class_630; field_3511 backTopSpines - f Lnet/minecraft/class_630; field_3513 frontTopSpines - f Lnet/minecraft/class_630; field_3518 rightFin - f Lnet/minecraft/class_630; field_3519 frontRightSpines - f Lnet/minecraft/class_630; field_3515 frontBottomSpines - f Lnet/minecraft/class_630; field_3510 backRightSpines -c net/minecraft/class_597 net/minecraft/client/renderer/entity/model/QuadrupedModel - f Lnet/minecraft/class_630; field_3534 legBackLeft - f Lnet/minecraft/class_630; field_3536 legBackRight - f Lnet/minecraft/class_630; field_3535 headModel - f Lnet/minecraft/class_630; field_3533 legFrontRight - f Lnet/minecraft/class_630; field_3538 body - f Lnet/minecraft/class_630; field_3539 legFrontLeft -c net/minecraft/class_571 net/minecraft/client/renderer/entity/model/RavagerModel - m (Lnet/minecraft/class_1584;FFFFF)V method_17091 setRotationAngles - m (Lnet/minecraft/class_1584;FFF)V method_17089 setLivingAnimations - f Lnet/minecraft/class_630; field_3387 body - f Lnet/minecraft/class_630; field_3386 head - f Lnet/minecraft/class_630; field_3384 neck - f Lnet/minecraft/class_630; field_3388 jaw - f Lnet/minecraft/class_630; field_3385 legBackRight - f Lnet/minecraft/class_630; field_3389 legFrontRight - f Lnet/minecraft/class_630; field_3383 legBackLeft - f Lnet/minecraft/class_630; field_3382 legFrontLeft -c net/minecraft/class_596 net/minecraft/client/renderer/entity/model/RabbitModel - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22967 func_228291_b_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22966 func_228290_a_ - m (Lnet/minecraft/class_1463;FFF)V method_17115 setLivingAnimations - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFFLnet/minecraft/class_630;)V method_22968 func_228292_c_ - m (Lnet/minecraft/class_1463;FFFFF)V method_17117 setRotationAngles - m (Lnet/minecraft/class_630;FFF)V method_2827 setRotationOffset - f Lnet/minecraft/class_630; field_3527 rabbitLeftArm - f Lnet/minecraft/class_630; field_3521 rabbitRightArm - f Lnet/minecraft/class_630; field_3526 rabbitLeftThigh - f Lnet/minecraft/class_630; field_3528 rabbitBody - f Lnet/minecraft/class_630; field_3522 rabbitRightThigh - f Lnet/minecraft/class_630; field_3524 rabbitTail - f Lnet/minecraft/class_630; field_3530 rabbitNose - f Lnet/minecraft/class_630; field_3525 rabbitLeftFoot - f Lnet/minecraft/class_630; field_3523 rabbitRightEar - f Lnet/minecraft/class_630; field_3529 rabbitHead - f Lnet/minecraft/class_630; field_3520 rabbitLeftEar - f F field_3531 jumpRotation - f Lnet/minecraft/class_630; field_3532 rabbitRightFoot -c net/minecraft/class_598 net/minecraft/client/renderer/entity/model/SheepWoolModel - m (Lnet/minecraft/class_1472;FFFFF)V method_17119 setRotationAngles - m (Lnet/minecraft/class_1472;FFF)V method_17118 setLivingAnimations - f F field_3541 headRotationAngleX -c net/minecraft/class_599 net/minecraft/client/renderer/entity/model/SalmonModel - f Lnet/minecraft/class_630; field_3544 finLeft - f Lnet/minecraft/class_630; field_3547 head - f Lnet/minecraft/class_630; field_3542 finRight - f Lnet/minecraft/class_630; field_3548 bodyRear - f Lnet/minecraft/class_630; field_3546 bodyFront -c net/minecraft/class_600 net/minecraft/client/renderer/entity/model/ShieldModel - m ()Lnet/minecraft/class_630; method_23774 func_228293_a_ - m ()Lnet/minecraft/class_630; method_23775 func_228294_b_ - f Lnet/minecraft/class_630; field_3550 plate - f Lnet/minecraft/class_630; field_3551 handle -c net/minecraft/class_601 net/minecraft/client/renderer/entity/model/SheepModel - m (Lnet/minecraft/class_1472;FFF)V method_17120 setLivingAnimations - m (Lnet/minecraft/class_1472;FFFFF)V method_17121 setRotationAngles - f F field_3552 headRotationAngleX -c net/minecraft/class_602 net/minecraft/client/renderer/entity/model/ShulkerModel - m ()Lnet/minecraft/class_630; method_2829 getLid - m ()Lnet/minecraft/class_630; method_2831 getBase - m ()Lnet/minecraft/class_630; method_2830 getHead - m (Lnet/minecraft/class_1606;FFFFF)V method_17122 setRotationAngles - f Lnet/minecraft/class_630; field_3553 base - f Lnet/minecraft/class_630; field_3554 head - f Lnet/minecraft/class_630; field_3555 lid -c net/minecraft/class_603 net/minecraft/client/renderer/entity/model/ShulkerBulletModel - f Lnet/minecraft/class_630; field_3556 renderer -c net/minecraft/class_606 net/minecraft/client/renderer/entity/model/SkeletonModel - m (Lnet/minecraft/class_1308;FFF)V method_19689 setLivingAnimations - m (Lnet/minecraft/class_1308;FFFFF)V method_19690 setRotationAngles -c net/minecraft/class_604 net/minecraft/client/renderer/entity/model/SilverfishModel - m ()Lcom/google/common/collect/ImmutableList; method_22969 getParts - f [Lnet/minecraft/class_630; field_3557 silverfishWings - f Lcom/google/common/collect/ImmutableList; field_20941 field_228295_f_ - f [[I field_3559 SILVERFISH_TEXTURE_POSITIONS - f [[I field_3558 SILVERFISH_BOX_LENGTH - f [Lnet/minecraft/class_630; field_3560 silverfishBodyParts - f [F field_3561 zPlacement -c net/minecraft/class_609 net/minecraft/client/renderer/entity/model/SlimeModel - f Lnet/minecraft/class_630; field_3573 slimeRightEye - f Lnet/minecraft/class_630; field_3570 slimeMouth - f Lnet/minecraft/class_630; field_3571 slimeBodies - f Lnet/minecraft/class_630; field_3572 slimeLeftEye -c net/minecraft/class_607 net/minecraft/client/renderer/entity/model/GenericHeadModel - m (FFF)V method_2821 func_225603_a_ - f Lnet/minecraft/class_630; field_3564 field_217105_a -c net/minecraft/class_611 net/minecraft/client/renderer/entity/model/SpiderModel - f Lnet/minecraft/class_630; field_3576 spiderLeg7 - f Lnet/minecraft/class_630; field_3585 spiderNeck - f Lnet/minecraft/class_630; field_3580 spiderLeg1 - f Lnet/minecraft/class_630; field_3581 spiderLeg6 - f Lnet/minecraft/class_630; field_3586 spiderLeg3 - f Lnet/minecraft/class_630; field_3582 spiderLeg8 - f Lnet/minecraft/class_630; field_3578 spiderLeg2 - f Lnet/minecraft/class_630; field_3577 spiderLeg4 - f Lnet/minecraft/class_630; field_3583 spiderHead - f Lnet/minecraft/class_630; field_3584 spiderBody - f Lnet/minecraft/class_630; field_3579 spiderLeg5 -c net/minecraft/class_608 net/minecraft/client/renderer/entity/model/SnowManModel - m ()Lnet/minecraft/class_630; method_2834 func_205070_a - f Lnet/minecraft/class_630; field_3567 body - f Lnet/minecraft/class_630; field_3568 head - f Lnet/minecraft/class_630; field_3565 leftHand - f Lnet/minecraft/class_630; field_3569 bottomBody - f Lnet/minecraft/class_630; field_3566 rightHand -c net/minecraft/class_4997 net/minecraft/client/renderer/entity/model/StriderModel - m (Lnet/minecraft/class_630;FFF)V method_26415 func_239127_a_ - m (Lnet/minecraft/class_4985;FFFFF)V method_26414 setRotationAngles - f Lnet/minecraft/class_630; field_23356 field_239121_g_ - f Lnet/minecraft/class_630; field_23361 field_239126_l_ - f Lnet/minecraft/class_630; field_23353 field_239118_a_ - f Lnet/minecraft/class_630; field_23355 field_239120_f_ - f Lnet/minecraft/class_630; field_23357 field_239122_h_ - f Lnet/minecraft/class_630; field_23354 field_239119_b_ - f Lnet/minecraft/class_630; field_23358 field_239123_i_ - f Lnet/minecraft/class_630; field_23360 field_239125_k_ - f Lnet/minecraft/class_630; field_23359 field_239124_j_ -c net/minecraft/class_610 net/minecraft/client/renderer/entity/model/SquidModel - f Lcom/google/common/collect/ImmutableList; field_20942 field_228296_f_ - f Lnet/minecraft/class_630; field_3575 body - f [Lnet/minecraft/class_630; field_3574 legs -c net/minecraft/class_612 net/minecraft/client/renderer/entity/model/TropicalFishAModel - f Lnet/minecraft/class_630; field_3589 body - f Lnet/minecraft/class_630; field_3590 finRight - f Lnet/minecraft/class_630; field_3591 tail - f Lnet/minecraft/class_630; field_3588 finLeft - f Lnet/minecraft/class_630; field_3587 finTop -c net/minecraft/class_613 net/minecraft/client/renderer/entity/model/TridentModel - f Lnet/minecraft/class_2960; field_3592 TEXTURE_LOCATION - f Lnet/minecraft/class_630; field_3593 modelRenderer -c net/minecraft/class_614 net/minecraft/client/renderer/entity/model/TurtleModel - m (Lnet/minecraft/class_1481;FFFFF)V method_17125 setRotationAngles - f Lnet/minecraft/class_630; field_3594 pregnant -c net/minecraft/class_615 net/minecraft/client/renderer/entity/model/TropicalFishBModel - f Lnet/minecraft/class_630; field_3595 finTop - f Lnet/minecraft/class_630; field_3600 finBottom - f Lnet/minecraft/class_630; field_3598 finRight - f Lnet/minecraft/class_630; field_3599 tail - f Lnet/minecraft/class_630; field_3596 finLeft - f Lnet/minecraft/class_630; field_3597 body -c net/minecraft/class_3884 net/minecraft/client/renderer/entity/model/IHeadToggle - m (Z)V method_17150 func_217146_a -c net/minecraft/class_617 net/minecraft/client/renderer/entity/model/VexModel - m (Lnet/minecraft/class_1634;FFFFF)V method_17127 setRotationAngles - f Lnet/minecraft/class_630; field_3602 rightWing - f Lnet/minecraft/class_630; field_3601 leftWing -c net/minecraft/class_622 net/minecraft/client/renderer/entity/model/WitchModel - m (Z)V method_2840 func_205074_a - m ()Lnet/minecraft/class_630; method_2839 func_205073_b - f Lnet/minecraft/class_630; field_3615 mole - f Z field_3614 holdingItem -c net/minecraft/class_620 net/minecraft/client/renderer/entity/model/VillagerModel - f Lnet/minecraft/class_630; field_17143 clothing - f Lnet/minecraft/class_630; field_3608 villagerHead - f Lnet/minecraft/class_630; field_3611 villagerNose - f Lnet/minecraft/class_630; field_3610 villagerBody - f Lnet/minecraft/class_630; field_17141 hat - f Lnet/minecraft/class_630; field_3606 leftVillagerLeg - f Lnet/minecraft/class_630; field_17142 hatBrim - f Lnet/minecraft/class_630; field_3609 villagerArms - f Lnet/minecraft/class_630; field_3607 rightVillagerLeg -c net/minecraft/class_621 net/minecraft/client/renderer/entity/model/WitherModel - m (Lnet/minecraft/class_1528;FFF)V method_17128 setLivingAnimations - m ()Lcom/google/common/collect/ImmutableList; method_22970 getParts - m (Lnet/minecraft/class_1528;FFFFF)V method_17130 setRotationAngles - f Lcom/google/common/collect/ImmutableList; field_20943 field_228297_f_ - f [Lnet/minecraft/class_630; field_3612 heads - f [Lnet/minecraft/class_630; field_3613 upperBodyParts -c net/minecraft/class_623 net/minecraft/client/renderer/entity/model/ZombieModel - m (Lnet/minecraft/class_1642;)Z method_17793 isAggressive -c net/minecraft/class_624 net/minecraft/client/renderer/entity/model/WolfModel - m (Lnet/minecraft/class_1493;FFFFF)V method_17133 setRotationAngles - m (Lnet/minecraft/class_1493;FFF)V method_17131 setLivingAnimations - f Lnet/minecraft/class_630; field_3617 tail - f Lnet/minecraft/class_630; field_3623 body - f Lnet/minecraft/class_630; field_3618 legFrontRight - f Lnet/minecraft/class_630; field_3624 legFrontLeft - f Lnet/minecraft/class_630; field_3619 mane - f Lnet/minecraft/class_630; field_3620 legBackLeft - f Lnet/minecraft/class_630; field_3621 head - f Lnet/minecraft/class_630; field_20789 tailChild - f Lnet/minecraft/class_630; field_3622 legBackRight - f Lnet/minecraft/class_630; field_20788 headChild -c net/minecraft/class_626 net/minecraft/client/renderer/tileentity/model/DragonHeadModel - f Lnet/minecraft/class_630; field_3638 head - f Lnet/minecraft/class_630; field_3639 jaw -c net/minecraft/class_619 net/minecraft/client/renderer/entity/model/ZombieVillagerModel - m (Lnet/minecraft/class_1642;FFFFF)V method_17135 setRotationAngles - f Lnet/minecraft/class_630; field_17144 field_217150_a -c net/minecraft/class_630 net/minecraft/client/renderer/model/ModelRenderer - m (FFFFFF)Lnet/minecraft/class_630; method_2844 addBox - m (FFFFFFFFF)V method_22971 addBox - m (Lnet/minecraft/class_630;)V method_17138 copyModelAngles - m (II)Lnet/minecraft/class_630; method_2850 setTextureOffset - m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;IIFFFF)V method_22702 doRender - m (Lnet/minecraft/class_630;)V method_2845 addChild - m (II)Lnet/minecraft/class_630; method_2853 setTextureSize - m (Ljava/lang/String;FFFIIIFII)Lnet/minecraft/class_630; method_2848 addBox - m (FFFFFFZ)Lnet/minecraft/class_630; method_2854 addBox - m (FFFFFFF)V method_2856 addBox - m ()Lnet/minecraft/class_630; method_29991 getModelAngleCopy - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFFFF)V method_22699 render - m (FFFFFFFZ)V method_2849 addBox - m (Ljava/util/Random;)Lnet/minecraft/class_630$class_628; method_22700 getRandomCube - m (FFF)V method_2851 setRotationPoint - m (Lnet/minecraft/class_4587;)V method_22703 translateRotate - m (IIFFFFFFFFFZZ)V method_22972 addBox - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;II)V method_22698 render - f Z field_3665 showModel - f Z field_3666 mirror - f I field_3670 textureOffsetY - f I field_3672 textureOffsetX - f F field_3658 textureHeight - f F field_3659 textureWidth - f F field_3674 rotateAngleZ - f Lit/unimi/dsi/fastutil/objects/ObjectList; field_3663 cubeList - f F field_3675 rotateAngleY - f F field_3654 rotateAngleX - f F field_3655 rotationPointZ - f F field_3656 rotationPointY - f F field_3657 rotationPointX - f Lit/unimi/dsi/fastutil/objects/ObjectList; field_3661 childModels -c net/minecraft/class_630$class_628 net/minecraft/client/renderer/model/ModelRenderer$ModelBox - m (Lnet/minecraft/class_630$class_628;)[Lnet/minecraft/class_630$class_593; method_22704 func_228311_a_ - f [Lnet/minecraft/class_630$class_593; field_3649 quads - f F field_3644 posY1 - f F field_3645 posX1 - f F field_3646 posZ2 - f F field_3647 posY2 - f F field_3648 posX2 - f F field_3643 posZ1 -c net/minecraft/class_630$class_593 net/minecraft/client/renderer/model/ModelRenderer$TexturedQuad - f [Lnet/minecraft/class_630$class_618; field_3502 vertexPositions - f Lnet/minecraft/class_1160; field_21618 normal -c net/minecraft/class_630$class_618 net/minecraft/client/renderer/model/ModelRenderer$PositionTextureVertex - m (FF)Lnet/minecraft/class_630$class_618; method_2837 setTextureUV - f Lnet/minecraft/class_1160; field_3605 position - f F field_3603 textureV - f F field_3604 textureU -c net/minecraft/class_631 net/minecraft/client/multiplayer/ClientChunkProvider - m (I)I method_20230 adjustViewDistance - m ()I method_20182 getLoadedChunksCount - m (Lnet/minecraft/class_2818;II)Z method_20181 isValid - m (IILnet/minecraft/class_4548;Lnet/minecraft/class_2540;Lnet/minecraft/class_2487;IZ)Lnet/minecraft/class_2818; method_16020 loadChunk - m (Ljava/util/function/BooleanSupplier;)V method_28102 tick - m (Lnet/minecraft/class_631;)Lnet/minecraft/class_638; method_18106 func_217253_a - m (IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2818; method_2857 getChunk - m (II)V method_20317 setCenter - m (II)V method_2859 unloadChunk - m (I)V method_20180 setViewDistance - f Lorg/apache/logging/log4j/Logger; field_3679 LOGGER - f Lnet/minecraft/class_2818; field_3676 empty - f Lnet/minecraft/class_631$class_3681; field_16246 array - f Lnet/minecraft/class_638; field_16525 world - f Lnet/minecraft/class_3568; field_3677 lightManager -c net/minecraft/class_631$class_3681 net/minecraft/client/multiplayer/ClientChunkProvider$ChunkArray - m (Lnet/minecraft/class_631$class_3681;II)I method_16032 func_217188_b - m (Lnet/minecraft/class_631$class_3681;I)I method_20319 func_217187_b - m (I)Lnet/minecraft/class_2818; method_16033 get - m (Lnet/minecraft/class_631$class_3681;I)I method_20318 func_217189_a - m (II)I method_16027 getIndex - m (Lnet/minecraft/class_631$class_3681;)I method_20382 func_217185_d - m (Lnet/minecraft/class_631$class_3681;)I method_20381 func_217182_c - m (Lnet/minecraft/class_631$class_3681;)I method_20184 func_217186_e - m (ILnet/minecraft/class_2818;)V method_16031 replace - m (Lnet/minecraft/class_631$class_3681;II)Z method_16029 func_217193_a - m (Lnet/minecraft/class_631$class_3681;)I method_16030 func_217180_b - m (Lnet/minecraft/class_631$class_3681;)Ljava/util/concurrent/atomic/AtomicReferenceArray; method_16028 func_217184_a - m (II)Z method_16034 inView - m (ILnet/minecraft/class_2818;Lnet/minecraft/class_2818;)Lnet/minecraft/class_2818; method_20183 unload - f Ljava/util/concurrent/atomic/AtomicReferenceArray; field_16251 chunks - f I field_19143 loaded - f I field_19205 centerZ - f I field_16252 sideLength - f Lnet/minecraft/class_631; field_16254 field_217194_a - f I field_19204 centerX - f I field_16253 viewDistance -c net/minecraft/class_631$1 net/minecraft/client/multiplayer/ClientChunkProvider$1 -c net/minecraft/class_632 net/minecraft/client/multiplayer/ClientAdvancementManager - m (Lnet/minecraft/class_632$class_633;)V method_2862 setListener - m (Lnet/minecraft/class_161;Z)V method_2864 setSelectedTab - m (Lnet/minecraft/class_2779;)V method_2861 read - m ()Lnet/minecraft/class_163; method_2863 getAdvancementList - f Lnet/minecraft/class_310; field_3684 mc - f Lnet/minecraft/class_161; field_3685 selectedTab - f Lnet/minecraft/class_163; field_3683 advancementList - f Lorg/apache/logging/log4j/Logger; field_3686 LOGGER - f Lnet/minecraft/class_632$class_633; field_3682 listener - f Ljava/util/Map; field_3681 advancementToProgress -c net/minecraft/class_632$class_633 net/minecraft/client/multiplayer/ClientAdvancementManager$IListener - m (Lnet/minecraft/class_161;)V method_2866 setSelectedTab - m (Lnet/minecraft/class_161;Lnet/minecraft/class_167;)V method_2865 onUpdateAdvancementProgress -c net/minecraft/class_638 net/minecraft/client/world/ClientWorld - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2394;Lnet/minecraft/class_265;D)V method_2948 spawnParticle - m (Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_4761;)V method_24462 func_239135_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2394;Z)V method_2938 spawnFluidParticle - m ()I method_18120 getCountLoadedEntities - m (Lnet/minecraft/class_2338;Lnet/minecraft/world/level/ColorResolver;)I method_23781 func_239138_c_ - m ()V method_29090 func_239141_x_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3414;Lnet/minecraft/class_3419;FFZ)V method_2947 playSound - m (Lnet/minecraft/class_2818;)V method_18110 onChunkUnloaded - m (IIIILjava/util/Random;ZLnet/minecraft/class_2338$class_2339;)V method_2943 animateTick - m (Lnet/minecraft/class_2338;F)V method_27873 func_239136_a_ - m (III)V method_2941 animateTick - m (Ljava/util/function/BooleanSupplier;)V method_8441 tick - m (I)V method_2945 removeEntityFromWorld - m ()Lnet/minecraft/class_638$class_5271; method_28104 getWorldInfo - m ()Ljava/lang/String; toString toString - m (J)V method_29089 func_239134_a_ - m (ILnet/minecraft/class_1297;)V method_18114 addEntityImpl - m (F)F method_23787 getStarBrightness - m (F)F method_23783 getSunBrightness - m (Lnet/minecraft/class_1297;)V method_18646 updateEntity - m (DDDDDLnet/minecraft/class_2394;)V method_2932 spawnParticle - m ()I method_23789 getTimeLightningFlash - m (Lnet/minecraft/class_1297;)Ljava/lang/String; method_18649 func_239139_e_ - m ()V method_2936 removeAllEntities - m (Lnet/minecraft/world/level/ColorResolver;Lnet/minecraft/class_4700;)V method_23779 func_228320_a_ - m ()Lnet/minecraft/class_631; method_2935 getChunkProvider - m ()V method_23784 clearColorCaches - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_2937 invalidateRegionAndSetBlock - m ()Lnet/minecraft/class_2338; method_27874 func_239140_u_ - m (Lnet/minecraft/class_2818;)V method_18115 addEntitiesToChunk - m ()V method_18116 tickEntities - m (Lnet/minecraft/class_2338;Lnet/minecraft/world/level/ColorResolver;)I method_23780 getBlockColorRaw - m ()Ljava/lang/String; method_2946 func_239142_z_ - m (II)V method_23782 onChunkLoaded - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)V method_18647 updateEntityRidden - m (III)V method_18113 markSurroundingsForRerender - m (F)Lnet/minecraft/class_243; method_23785 getCloudColor - m ()Ljava/lang/String; method_2933 func_228334_x_ - m (J)V method_8435 setDayTime - m (Lit/unimi/dsi/fastutil/objects/Object2ObjectArrayMap;)V method_23778 func_228319_a_ - m ()Ljava/lang/Iterable; method_18112 getAllEntities - m (Lnet/minecraft/class_2338;F)Lnet/minecraft/class_243; method_23777 getSkyColor - m (IILnet/minecraft/world/level/ColorResolver;Lnet/minecraft/class_4700;)V method_23776 func_228316_a_ - m ()Lnet/minecraft/class_5294; method_28103 func_239132_a_ - m (ILnet/minecraft/class_1297;)V method_2942 addEntity - m ()F method_30671 func_243489_v - m (Lnet/minecraft/class_1297;)V method_18117 removeEntity - m (Lnet/minecraft/class_269;)V method_2944 setScoreboard - m (ILnet/minecraft/class_742;)V method_18107 addPlayer - m (Lnet/minecraft/class_1297;)V method_18648 checkChunk - f Lnet/minecraft/class_631; field_24605 field_239129_E_ - f Ljava/util/Map; field_17675 maps - f I field_21526 timeLightningFlash - f Lnet/minecraft/class_634; field_3727 connection - f Lnet/minecraft/class_5294; field_24606 field_239131_x_ - f Ljava/util/List; field_18226 players - f Lit/unimi/dsi/fastutil/objects/Object2ObjectArrayMap; field_21527 colorCaches - f Lnet/minecraft/class_269; field_3733 scoreboard - f Lnet/minecraft/class_761; field_17780 worldRenderer - f Lnet/minecraft/class_310; field_3729 mc - f Lnet/minecraft/class_638$class_5271; field_24430 field_239130_d_ - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_17778 entitiesById -c net/minecraft/class_638$class_5271 net/minecraft/client/world/ClientWorld$ClientWorldInfo - m (J)V method_165 setDayTime - m ()D method_28105 getVoidFogHeight - m ()D method_28106 getFogDistance - m (Z)V method_27876 setDifficultyLocked - m (Lnet/minecraft/class_1267;)V method_27875 setDifficulty - m (J)V method_177 setGameTime - f J field_24438 gameTime - f Z field_24607 flatWorld - f J field_24439 dayTime - f Lnet/minecraft/class_1928; field_24434 gameRules - f Lnet/minecraft/class_1267; field_24441 difficulty - f I field_24435 spawnX - f Z field_24440 raining - f I field_24436 spawnY - f F field_26372 field_243490_g - f I field_24437 spawnZ - f Z field_24442 field_239154_k_ - f Z field_24433 hardcore -c net/minecraft/class_638$1 net/minecraft/client/world/ClientWorld$1 - f [I field_22436 field_239143_a_ -c net/minecraft/class_635 net/minecraft/client/network/login/ClientLoginNetHandler - m (Ljavax/crypto/SecretKey;Lio/netty/util/concurrent/Future;)V method_2893 func_209523_a - m (Ljava/lang/String;Lnet/minecraft/class_2917;Ljavax/crypto/SecretKey;)V method_2894 func_209524_a - m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_2892 joinServer - m ()Lcom/mojang/authlib/minecraft/MinecraftSessionService; method_2891 getSessionService - f Lnet/minecraft/class_437; field_3706 previousGuiScreen - f Lnet/minecraft/class_310; field_3708 mc - f Lcom/mojang/authlib/GameProfile; field_3709 gameProfile - f Lnet/minecraft/class_2535; field_3707 networkManager - f Lorg/apache/logging/log4j/Logger; field_3710 LOGGER - f Ljava/util/function/Consumer; field_3711 statusMessageConsumer -c net/minecraft/class_637 net/minecraft/client/multiplayer/ClientSuggestionProvider - m (D)Ljava/lang/String; method_2929 formatDouble - m (I)Ljava/lang/String; method_2930 formatInt - m (ILcom/mojang/brigadier/suggestion/Suggestions;)V method_2931 handleResponse - f Lnet/minecraft/class_634; field_3722 connection - f Lnet/minecraft/class_310; field_3725 mc - f Ljava/util/concurrent/CompletableFuture; field_3723 future - f I field_3724 currentTransaction -c net/minecraft/class_634 net/minecraft/client/network/play/ClientPlayNetHandler - m ()Lnet/minecraft/class_5455; method_29091 func_239165_n_ - m ()Lcom/mojang/authlib/GameProfile; method_2879 getGameProfile - m ()Lnet/minecraft/class_638; method_2890 getWorld - m ()Lnet/minecraft/class_300; method_2876 getNBTQueryManager - m (Lnet/minecraft/class_299;Lnet/minecraft/class_1860;)V method_17795 func_217278_a_ - m (Lnet/minecraft/class_1703;Lnet/minecraft/class_1860;)V method_17794 func_241665_a_ - m (Lnet/minecraft/class_2596;)V method_2883 sendPacket - m ()Lnet/minecraft/class_637; method_2875 getSuggestionProvider - m ()Ljava/util/Collection; method_2880 getPlayerInfoMap - m ()Lnet/minecraft/class_632; method_2869 getAdvancementManager - m ()V method_2882 func_241672_o_ - m ()Lnet/minecraft/class_5415; method_2867 getTags - m (Ljava/util/UUID;)Lnet/minecraft/class_640; method_2871 getPlayerInfo - m (Ljava/lang/String;)Lnet/minecraft/class_640; method_2874 getPlayerInfo - m (Ljava/lang/String;)Z method_2888 validateResourcePackUrl - m (Ljava/lang/String;Ljava/lang/String;Z)V method_2884 func_217274_a_ - m ()V method_2868 cleanup - m (ILnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_31176 func_243492_a - m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_19691 getTotemItem - m ()Ljava/util/Set; method_29356 func_239164_m_ - m (Lnet/minecraft/class_2856$class_2857;)V method_2873 sendResourcePackStatus - m (Lnet/minecraft/class_1297;Lcom/mojang/datafixers/util/Pair;)V method_30135 func_241664_a_ - m ()Lcom/mojang/brigadier/CommandDispatcher; method_2886 getCommandDispatcher - m (IILnet/minecraft/class_3568;Lnet/minecraft/class_1944;IILjava/util/Iterator;Z)V method_2870 setLightData - m ()V method_2887 func_241673_p_ - m (Lnet/minecraft/class_299;Lnet/minecraft/class_516;)V method_2881 func_199527_a_ - m ()Ljava/util/UUID; method_16690 getSessionId - m (Ljava/lang/String;Ljava/lang/String;)V method_2889 func_241669_a_ - m (Ljava/util/concurrent/CompletableFuture;)V method_2885 handlePackFuture - m ()Lnet/minecraft/class_1863; method_2877 getRecipeManager - m (Ljava/lang/Throwable;)Ljava/lang/Void; method_2878 func_217276_a_ - f I field_19144 viewDistance - f Z field_3698 doneLoadingTerrain - f Ljava/util/Map; field_3693 playerInfoMap - f Lnet/minecraft/class_5455; field_25063 field_239163_t_ - f Lnet/minecraft/class_310; field_3690 client - f Lnet/minecraft/class_300; field_3692 nbtQueryManager - f Lnet/minecraft/class_2535; field_3689 netManager - f Ljava/util/Set; field_25273 field_239162_s_ - f Lnet/minecraft/class_5415; field_3694 networkTagManager - f Lnet/minecraft/class_637; field_3691 clientSuggestionProvider - f Lnet/minecraft/class_437; field_3701 guiScreenServer - f Lnet/minecraft/class_638$class_5271; field_24321 field_239161_g_ - f Lnet/minecraft/class_638; field_3699 world - f Lnet/minecraft/class_2561; field_26620 field_243491_b - f Lcom/mojang/brigadier/CommandDispatcher; field_3696 commandDispatcher - f Lcom/mojang/authlib/GameProfile; field_3697 profile - f Lnet/minecraft/class_1863; field_3688 recipeManager - f Ljava/util/UUID; field_16771 sessionId - f Lnet/minecraft/class_632; field_3700 advancementManager - f Ljava/util/Random; field_3687 avRandomizer - f Lorg/apache/logging/log4j/Logger; field_3695 LOGGER -c net/minecraft/class_634$1 net/minecraft/client/network/play/ClientPlayNetHandler$1 - f [I field_3703 field_217258_b - f [I field_3705 field_217257_a - f [I field_3704 field_217260_d - f [I field_3702 field_217259_c -c net/minecraft/class_640 net/minecraft/client/network/play/NetworkPlayerInfo - m ()I method_2959 getResponseTime - m ()Lnet/minecraft/class_2960; method_2957 getLocationElytra - m (I)V method_2972 setLastHealth - m (J)V method_2978 setLastHealthTime - m (I)V method_2970 setResponseTime - m ()Lnet/minecraft/class_1934; method_2958 getGameType - m ()Lnet/minecraft/class_268; method_2955 getPlayerTeam - m ()J method_2976 getRenderVisibilityId - m ()Lnet/minecraft/class_2561; method_2971 getDisplayName - m ()J method_2961 getHealthBlinkTime - m (Lnet/minecraft/class_2561;)V method_2962 setDisplayName - m ()J method_2974 getLastHealthTime - m ()V method_2969 loadPlayerTextures - m (Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/class_2960;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V method_2956 func_210250_a - m ()I method_2960 getDisplayHealth - m ()I method_2973 getLastHealth - m (Lnet/minecraft/class_1934;)V method_2963 setGameType - m ()Z method_2967 hasLocationSkin - m ()Ljava/lang/String; method_2977 getSkinType - m ()Lcom/mojang/authlib/GameProfile; method_2966 getGameProfile - m ()Lnet/minecraft/class_2960; method_2968 getLocationSkin - m (J)V method_2964 setRenderVisibilityId - m ()Lnet/minecraft/class_2960; method_2979 getLocationCape - m (I)V method_2965 setDisplayHealth - m (J)V method_2975 setHealthBlinkTime - f Lcom/mojang/authlib/GameProfile; field_3741 gameProfile - f Lnet/minecraft/class_2561; field_3743 displayName - f Ljava/lang/String; field_3745 skinType - f I field_3739 responseTime - f Lnet/minecraft/class_1934; field_3744 gameType - f Ljava/util/Map; field_3742 playerTextures - f J field_3746 renderVisibilityId - f J field_3747 healthBlinkTime - f Z field_3740 playerTexturesLoaded - f J field_3737 lastHealthTime - f I field_3736 displayHealth - f I field_3738 lastHealth -c net/minecraft/class_636 net/minecraft/client/multiplayer/PlayerController - m ()V method_2925 resetBlockRemoving - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_2919 processRightClick - m (Lnet/minecraft/class_1657;)V method_2903 setPlayerCapabilities - m (Lnet/minecraft/class_2338;)Z method_2899 onPlayerDestroyBlock - m (Lnet/minecraft/class_638;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2846$class_2847;Z)V method_21705 acknowledgePlayerDiggingReceived - m ()Z method_2923 getIsHittingBlock - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_2902 onPlayerDamageBlock - m (Lnet/minecraft/class_1799;)V method_2915 sendPacketDropItem - m (Lnet/minecraft/class_638;Lnet/minecraft/class_3469;Lnet/minecraft/class_299;)Lnet/minecraft/class_746; method_29357 createPlayer - m (Lnet/minecraft/class_1934;)V method_30108 func_241675_a_ - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1297;)V method_2918 attackEntity - m ()Z method_2895 isRidingHorse - m ()Z method_2914 isInCreativeMode - m ()Lnet/minecraft/class_1934; method_2920 getCurrentGameType - m ()Z method_2913 gameIsSurvivalOrAdventure - m ()Z method_2908 shouldDrawHUD - m (Lnet/minecraft/class_1657;)V method_2897 onStoppedUsingItem - m (Lnet/minecraft/class_2338;)Z method_2922 isHittingPosition - m (Lnet/minecraft/class_638;Lnet/minecraft/class_3469;Lnet/minecraft/class_299;ZZ)Lnet/minecraft/class_746; method_2901 func_239167_a_ - m (Lnet/minecraft/class_1799;I)V method_2909 sendSlotPacket - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1297;Lnet/minecraft/class_3966;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_2917 interactWithEntity - m ()F method_2904 getBlockReachDistance - m (I)V method_2916 pickItem - m (ILnet/minecraft/class_1860;Z)V method_2912 sendPlaceRecipePacket - m (Lnet/minecraft/class_2846$class_2847;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)V method_21706 sendDiggingPacket - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_2910 clickBlock - m ()V method_2911 syncCurrentPlayItem - m (II)V method_2900 sendEnchantPacket - m ()Z method_2928 isSpectatorMode - m ()Z method_2926 extendedReach - m (Lnet/minecraft/class_1934;)V method_2907 setGameType - m ()Z method_2924 isNotCreative - m ()Lnet/minecraft/class_1934; method_28107 func_241822_k - m ()V method_2927 tick - m (Lnet/minecraft/class_746;Lnet/minecraft/class_638;Lnet/minecraft/class_1268;Lnet/minecraft/class_3965;)Lnet/minecraft/class_1269; method_2896 func_217292_a - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1297;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_2905 interactWithEntity - m (IIILnet/minecraft/class_1713;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_2906 windowClick - f Lnet/minecraft/class_1934; field_24608 field_239166_k_ - f F field_3713 stepSoundTickCounter - f Lnet/minecraft/class_310; field_3712 mc - f Lnet/minecraft/class_1799; field_3718 currentItemHittingBlock - f Lnet/minecraft/class_1934; field_3719 currentGameType - f I field_3716 blockHitDelay - f F field_3715 curBlockDamageMP - f Lnet/minecraft/class_2338; field_3714 currentBlock - f Lit/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap; field_20317 unacknowledgedDiggingPackets - f Lnet/minecraft/class_634; field_3720 connection - f Z field_3717 isHittingBlock - f I field_3721 currentPlayerItem - f Lorg/apache/logging/log4j/Logger; field_20316 LOGGER -c net/minecraft/class_642 net/minecraft/client/multiplayer/ServerData - m (Lnet/minecraft/class_642;)V method_2996 copyFrom - m (Ljava/lang/String;)V method_2989 setBase64EncodedIconData - m ()Ljava/lang/String; method_2991 getBase64EncodedIconData - m ()Lnet/minecraft/class_642$class_643; method_2990 getResourceMode - m (Lnet/minecraft/class_642$class_643;)V method_2995 setResourceMode - m ()Lnet/minecraft/class_2487; method_2992 getNBTCompound - m ()Z method_2994 isOnLAN - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_642; method_2993 getServerDataFromNBTCompound - f Lnet/minecraft/class_642$class_643; field_3755 resourceMode - f Ljava/lang/String; field_3752 serverName - f Lnet/minecraft/class_2561; field_3753 populationInfo - f Ljava/lang/String; field_3759 serverIcon - f Lnet/minecraft/class_2561; field_3757 serverMOTD - f Z field_3763 lanServer - f Lnet/minecraft/class_2561; field_3760 gameVersion - f I field_3756 version - f J field_3758 pingToServer - f Ljava/util/List; field_3762 playerList - f Ljava/lang/String; field_3761 serverIP - f Z field_3754 pinged -c net/minecraft/class_642$class_643 net/minecraft/client/multiplayer/ServerData$ServerResourceMode - m ()Lnet/minecraft/class_2561; method_2997 getMotd - m ()[Lnet/minecraft/class_642$class_643; values values - m (Ljava/lang/String;)Lnet/minecraft/class_642$class_643; valueOf valueOf - f [Lnet/minecraft/class_642$class_643; field_3766 $VALUES - f Lnet/minecraft/class_642$class_643; field_3767 PROMPT - f Lnet/minecraft/class_642$class_643; field_3764 DISABLED - f Lnet/minecraft/class_2561; field_3765 motd - f Lnet/minecraft/class_642$class_643; field_3768 ENABLED -c net/minecraft/class_639 net/minecraft/client/multiplayer/ServerAddress - m (Ljava/lang/String;)Lnet/minecraft/class_639; method_2950 fromString - m ()Ljava/lang/String; method_2952 getIP - m ()I method_2954 getPort - m (Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair; method_2953 func_241677_b_ - m (Ljava/lang/String;I)I method_2951 getInt - f I field_3735 serverPort - f Ljava/lang/String; field_3734 ipAddress -c net/minecraft/class_644 net/minecraft/client/network/ServerPinger - m (II)Lnet/minecraft/class_2561; method_27647 func_239171_b_ - m (Lnet/minecraft/class_642;Ljava/lang/Runnable;)V method_3003 ping - m ()Lcom/google/common/base/Splitter; method_2999 func_239173_d_ - m (Lnet/minecraft/class_642;)V method_3001 tryCompatibilityPing - m ()V method_3004 clearPendingNetworks - m (Lnet/minecraft/class_644;Lnet/minecraft/class_642;)V method_2998 func_239170_a_ - m ()V method_3000 pingPendingNetworks - m (II)Lnet/minecraft/class_2561; method_27646 func_239169_a_ - m ()Lorg/apache/logging/log4j/Logger; method_3002 func_239172_c_ - f Lcom/google/common/base/Splitter; field_3770 PING_RESPONSE_SPLITTER - f Lorg/apache/logging/log4j/Logger; field_3771 LOGGER - f Ljava/util/List; field_3769 pingDestinations -c net/minecraft/class_644$1 net/minecraft/client/network/ServerPinger$1 - f Lnet/minecraft/class_644; field_3777 field_147405_c - f J field_3772 pingSentAt - f Lnet/minecraft/class_2535; field_3774 field_147404_b - f Z field_3773 receivedStatus - f Ljava/lang/Runnable; field_25636 field_241679_c_ - f Lnet/minecraft/class_642; field_3776 field_147406_a - f Z field_3775 successful -c net/minecraft/class_644$2 net/minecraft/client/network/ServerPinger$2 - m (Lio/netty/channel/Channel;)V initChannel initChannel - f Lnet/minecraft/class_639; field_3778 field_147218_a - f Lnet/minecraft/class_642; field_3779 field_147216_b - f Lnet/minecraft/class_644; field_3780 field_147217_c -c net/minecraft/class_644$2$1 net/minecraft/client/network/ServerPinger$2$1 - m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;)V method_3005 channelRead0 - m (Lio/netty/channel/ChannelHandlerContext;)V channelActive channelActive - m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Throwable;)V exceptionCaught exceptionCaught - m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;)V channelRead0 channelRead0 - f Lnet/minecraft/class_644$2; field_3781 field_147220_a -c net/minecraft/class_641 net/minecraft/client/multiplayer/ServerList - m (Lnet/minecraft/class_642;)V method_2986 saveSingleServer - m (ILnet/minecraft/class_642;)V method_2980 set - m (II)V method_2985 swapServers - m ()I method_2984 countServers - m (I)Lnet/minecraft/class_642; method_2982 getServerData - m (Lnet/minecraft/class_642;)V method_2983 func_217506_a - m (Lnet/minecraft/class_642;)V method_2988 addServerData - m ()V method_2987 saveServerList - m ()V method_2981 loadServerList - f Lorg/apache/logging/log4j/Logger; field_3751 LOGGER - f Ljava/util/List; field_3749 servers - f Lnet/minecraft/class_310; field_3750 mc -c net/minecraft/class_645 net/minecraft/client/particle/SweepAttackParticle - f Lnet/minecraft/class_4002; field_17781 spriteWithAge -c net/minecraft/class_645$class_646 net/minecraft/client/particle/SweepAttackParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3006 makeParticle - f Lnet/minecraft/class_4002; field_17782 spriteSet -c net/minecraft/class_645$1 net/minecraft/client/particle/SweepAttackParticle$1 -c net/minecraft/class_4792 net/minecraft/client/particle/AshParticle -c net/minecraft/class_4792$class_4793 net/minecraft/client/particle/AshParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24463 makeParticle - f Lnet/minecraft/class_4002; field_22235 spriteSet -c net/minecraft/class_4794 net/minecraft/client/particle/RisingParticle - f D field_22236 yAccel - f Lnet/minecraft/class_4002; field_22237 spriteWithAge -c net/minecraft/class_651 net/minecraft/client/particle/BarrierParticle -c net/minecraft/class_651$class_652 net/minecraft/client/particle/BarrierParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3010 makeParticle -c net/minecraft/class_651$1 net/minecraft/client/particle/BarrierParticle$1 -c net/minecraft/class_647 net/minecraft/client/particle/BreakingParticle - f F field_17783 uCoord - f F field_17784 vCoord -c net/minecraft/class_647$class_649 net/minecraft/client/particle/BreakingParticle$SlimeFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3008 makeParticle -c net/minecraft/class_647$class_648 net/minecraft/client/particle/BreakingParticle$Factory - m (Lnet/minecraft/class_2392;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3007 makeParticle -c net/minecraft/class_647$1 net/minecraft/client/particle/BreakingParticle$1 -c net/minecraft/class_647$class_650 net/minecraft/client/particle/BreakingParticle$SnowballFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3009 makeParticle -c net/minecraft/class_655 net/minecraft/client/particle/BubbleParticle -c net/minecraft/class_655$class_656 net/minecraft/client/particle/BubbleParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3012 makeParticle - f Lnet/minecraft/class_4002; field_17785 spriteSet -c net/minecraft/class_655$1 net/minecraft/client/particle/BubbleParticle$1 -c net/minecraft/class_653 net/minecraft/client/particle/BubbleColumnUpParticle -c net/minecraft/class_653$class_654 net/minecraft/client/particle/BubbleColumnUpParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3011 makeParticle - f Lnet/minecraft/class_4002; field_17786 spriteSet -c net/minecraft/class_653$1 net/minecraft/client/particle/BubbleColumnUpParticle$1 -c net/minecraft/class_3937 net/minecraft/client/particle/CampfireParticle -c net/minecraft/class_3937$class_3995 net/minecraft/client/particle/CampfireParticle$SignalSmokeFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18820 makeParticle - f Lnet/minecraft/class_4002; field_17789 spriteSet -c net/minecraft/class_3937$class_3938 net/minecraft/client/particle/CampfireParticle$CozySmokeFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_17579 makeParticle - f Lnet/minecraft/class_4002; field_18290 spriteSet -c net/minecraft/class_3937$1 net/minecraft/client/particle/CampfireParticle$1 -c net/minecraft/class_661 net/minecraft/client/particle/BubblePopParticle - f Lnet/minecraft/class_4002; field_17787 spriteSetWithAge -c net/minecraft/class_661$class_662 net/minecraft/client/particle/BubblePopParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3016 makeParticle - f Lnet/minecraft/class_4002; field_17788 spriteSet -c net/minecraft/class_661$1 net/minecraft/client/particle/BubblePopParticle$1 -c net/minecraft/class_666 net/minecraft/client/particle/DragonBreathParticle - f Z field_3792 hasHitGround - f Lnet/minecraft/class_4002; field_17793 spriteWithAge -c net/minecraft/class_666$class_667 net/minecraft/client/particle/DragonBreathParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3019 makeParticle - f Lnet/minecraft/class_4002; field_17794 spriteSet -c net/minecraft/class_666$1 net/minecraft/client/particle/DragonBreathParticle$1 -c net/minecraft/class_657 net/minecraft/client/particle/CritParticle -c net/minecraft/class_657$class_658 net/minecraft/client/particle/CritParticle$DamageIndicatorFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3013 makeParticle - f Lnet/minecraft/class_4002; field_17790 spriteSet -c net/minecraft/class_657$1 net/minecraft/client/particle/CritParticle$1 -c net/minecraft/class_657$class_3939 net/minecraft/client/particle/CritParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_17580 makeParticle - f Lnet/minecraft/class_4002; field_18291 spriteSet -c net/minecraft/class_657$class_659 net/minecraft/client/particle/CritParticle$MagicFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3014 makeParticle - f Lnet/minecraft/class_4002; field_17791 spriteSet -c net/minecraft/class_671 net/minecraft/client/particle/RedstoneParticle - f Lnet/minecraft/class_4002; field_17801 spriteWithAge -c net/minecraft/class_671$class_672 net/minecraft/client/particle/RedstoneParticle$Factory - m (Lnet/minecraft/class_2390;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3022 makeParticle - f Lnet/minecraft/class_4002; field_17802 spriteSet -c net/minecraft/class_671$1 net/minecraft/client/particle/RedstoneParticle$1 -c net/minecraft/class_663 net/minecraft/client/particle/DripParticle - m ()V method_18821 ageParticle - m ()V method_18822 updateMotion - f Lnet/minecraft/class_3611; field_3789 fluid - f Z field_22437 fullbright -c net/minecraft/class_663$class_4501 net/minecraft/client/particle/DripParticle$LandingHoneyFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_22117 makeParticle - f Lnet/minecraft/class_4002; field_20517 spriteSet -c net/minecraft/class_663$class_4500 net/minecraft/client/particle/DripParticle$DrippingHoneyFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_22116 makeParticle - f Lnet/minecraft/class_4002; field_20516 spriteWithAge -c net/minecraft/class_663$class_664 net/minecraft/client/particle/DripParticle$DrippingLavaFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3017 makeParticle - f Lnet/minecraft/class_4002; field_18295 spriteSet -c net/minecraft/class_663$class_4086 net/minecraft/client/particle/DripParticle$FallingLavaFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18823 makeParticle - f Lnet/minecraft/class_4002; field_18294 spriteSet -c net/minecraft/class_663$class_4502 net/minecraft/client/particle/DripParticle$FallingNectarFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_22118 makeParticle - f Lnet/minecraft/class_4002; field_20518 spriteSet -c net/minecraft/class_663$class_4087 net/minecraft/client/particle/DripParticle$LandingLavaFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18824 makeParticle - f Lnet/minecraft/class_4002; field_18296 spriteSet -c net/minecraft/class_663$class_4854 net/minecraft/client/particle/DripParticle$DrippingObsidianTearFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24871 makeParticle - f Lnet/minecraft/class_4002; field_22439 spriteSet -c net/minecraft/class_663$class_4853 net/minecraft/client/particle/DripParticle$FallingObsidianTearFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24870 makeParticle - f Lnet/minecraft/class_4002; field_22438 spriteSet -c net/minecraft/class_663$class_4082 net/minecraft/client/particle/DripParticle$DrippingLava -c net/minecraft/class_663$class_4085 net/minecraft/client/particle/DripParticle$Landing -c net/minecraft/class_663$class_4084 net/minecraft/client/particle/DripParticle$Dripping - f Lnet/minecraft/class_2394; field_18293 particleData -c net/minecraft/class_663$class_4497 net/minecraft/client/particle/DripParticle$FallingNectarParticle -c net/minecraft/class_663$class_4083 net/minecraft/client/particle/DripParticle$FallingLiquidParticle - f Lnet/minecraft/class_2394; field_18292 particleData -c net/minecraft/class_663$class_4499 net/minecraft/client/particle/DripParticle$FallingHoneyFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_22115 makeParticle - f Lnet/minecraft/class_4002; field_20515 spriteSet -c net/minecraft/class_663$class_4498 net/minecraft/client/particle/DripParticle$FallingHoneyParticle -c net/minecraft/class_663$class_665 net/minecraft/client/particle/DripParticle$FallingWaterFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3018 makeParticle - f Lnet/minecraft/class_4002; field_18297 spriteSet -c net/minecraft/class_663$1 net/minecraft/client/particle/DripParticle$1 -c net/minecraft/class_663$class_4855 net/minecraft/client/particle/DripParticle$LandingObsidianTearFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24872 makeParticle - f Lnet/minecraft/class_4002; field_22440 spriteSet -c net/minecraft/class_663$class_4088 net/minecraft/client/particle/DripParticle$DrippingWaterFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18825 makeParticle - f Lnet/minecraft/class_4002; field_18298 spriteSet -c net/minecraft/class_675 net/minecraft/client/particle/EndRodParticle -c net/minecraft/class_675$class_676 net/minecraft/client/particle/EndRodParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3024 makeParticle - f Lnet/minecraft/class_4002; field_17805 spriteSet -c net/minecraft/class_675$1 net/minecraft/client/particle/EndRodParticle$1 -c net/minecraft/class_668 net/minecraft/client/particle/EnchantmentTableParticle - f D field_3793 coordZ - f D field_3795 coordX - f D field_3794 coordY -c net/minecraft/class_668$class_669 net/minecraft/client/particle/EnchantmentTableParticle$NautilusFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3020 makeParticle - f Lnet/minecraft/class_4002; field_17804 spriteSet -c net/minecraft/class_668$1 net/minecraft/client/particle/EnchantmentTableParticle$1 -c net/minecraft/class_668$class_670 net/minecraft/client/particle/EnchantmentTableParticle$EnchantmentTable - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3021 makeParticle - f Lnet/minecraft/class_4002; field_17803 spriteSet -c net/minecraft/class_682 net/minecraft/client/particle/FallingDustParticle - f Lnet/minecraft/class_4002; field_17808 spriteWithAge - f F field_3809 rotSpeed -c net/minecraft/class_682$class_683 net/minecraft/client/particle/FallingDustParticle$Factory - m (Lnet/minecraft/class_2388;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3033 makeParticle - f Lnet/minecraft/class_4002; field_17809 spriteSet -c net/minecraft/class_682$1 net/minecraft/client/particle/FallingDustParticle$1 -c net/minecraft/class_673 net/minecraft/client/particle/PoofParticle - f Lnet/minecraft/class_4002; field_17806 spriteWithAge -c net/minecraft/class_673$class_674 net/minecraft/client/particle/PoofParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3023 makeParticle - f Lnet/minecraft/class_4002; field_17807 spriteSet -c net/minecraft/class_687 net/minecraft/client/particle/FlameParticle -c net/minecraft/class_687$class_688 net/minecraft/client/particle/FlameParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3036 makeParticle - f Lnet/minecraft/class_4002; field_17812 spriteSet -c net/minecraft/class_687$1 net/minecraft/client/particle/FlameParticle$1 -c net/minecraft/class_677 net/minecraft/client/particle/FireworkParticle -c net/minecraft/class_677$class_680 net/minecraft/client/particle/FireworkParticle$Spark - m (Z)V method_3026 setTwinkle - m (Z)V method_3027 setTrail - f Z field_3804 trail - f F field_3799 fadeColourBlue - f F field_3801 fadeColourRed - f F field_3800 fadeColourGreen - f Z field_3802 hasFadeColour - f Lnet/minecraft/class_702; field_3798 effectRenderer - f Z field_3803 twinkle -c net/minecraft/class_677$class_678 net/minecraft/client/particle/FireworkParticle$Overlay -c net/minecraft/class_677$class_681 net/minecraft/client/particle/FireworkParticle$Starter - m ()Z method_3029 isFarFromCamera - m (DI[I[IZZ)V method_3031 createBall - m ([I[IZZ)V method_3032 createBurst - m (D[D[I[IZZZ)V method_3028 createShaped - m (DDDDDD[I[IZZ)V method_3030 createParticle - f Lnet/minecraft/class_702; field_3805 manager - f I field_3808 fireworkAge - f Lnet/minecraft/class_2499; field_3806 fireworkExplosions - f Z field_3807 twinkle -c net/minecraft/class_677$class_679 net/minecraft/client/particle/FireworkParticle$SparkFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3025 makeParticle - f Lnet/minecraft/class_4002; field_17811 spriteSet -c net/minecraft/class_677$class_3997 net/minecraft/client/particle/FireworkParticle$OverlayFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18121 makeParticle - f Lnet/minecraft/class_4002; field_17810 spriteSet -c net/minecraft/class_677$1 net/minecraft/client/particle/FireworkParticle$1 - f [I field_3797 field_199279_a -c net/minecraft/class_691 net/minecraft/client/particle/LargeExplosionParticle - f Lnet/minecraft/class_4002; field_17815 spriteWithAge -c net/minecraft/class_691$class_692 net/minecraft/client/particle/LargeExplosionParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3038 makeParticle - f Lnet/minecraft/class_4002; field_17816 spriteSet -c net/minecraft/class_691$1 net/minecraft/client/particle/LargeExplosionParticle$1 -c net/minecraft/class_684 net/minecraft/client/particle/HeartParticle -c net/minecraft/class_684$class_685 net/minecraft/client/particle/HeartParticle$AngryVillagerFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3034 makeParticle - f Lnet/minecraft/class_4002; field_17813 spriteSet -c net/minecraft/class_684$1 net/minecraft/client/particle/HeartParticle$1 -c net/minecraft/class_684$class_686 net/minecraft/client/particle/HeartParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3035 makeParticle - f Lnet/minecraft/class_4002; field_17814 spriteSet -c net/minecraft/class_693 net/minecraft/client/particle/ItemPickupParticle - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_29358 func_239181_a_ - f Lnet/minecraft/class_4599; field_20944 renderTypeBuffers - f I field_3826 particleAge - f Lnet/minecraft/class_1297; field_3823 item - f Lnet/minecraft/class_1297; field_3821 target - f Lnet/minecraft/class_898; field_3824 renderManager -c net/minecraft/class_689 net/minecraft/client/particle/HugeExplosionParticle - f I field_3814 timeSinceStart - f I field_3813 maximumTime -c net/minecraft/class_689$class_690 net/minecraft/client/particle/HugeExplosionParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3037 makeParticle -c net/minecraft/class_689$1 net/minecraft/client/particle/HugeExplosionParticle$1 -c net/minecraft/class_694 net/minecraft/client/particle/LavaParticle -c net/minecraft/class_694$class_695 net/minecraft/client/particle/LavaParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3039 makeParticle - f Lnet/minecraft/class_4002; field_17818 spriteSet -c net/minecraft/class_694$1 net/minecraft/client/particle/LavaParticle$1 -c net/minecraft/class_696 net/minecraft/client/particle/LargeSmokeParticle -c net/minecraft/class_696$class_697 net/minecraft/client/particle/LargeSmokeParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3040 makeParticle - f Lnet/minecraft/class_4002; field_17817 spriteSet -c net/minecraft/class_3998 net/minecraft/client/particle/MetaParticle -c net/minecraft/class_700 net/minecraft/client/particle/MobAppearanceParticle - f Lnet/minecraft/class_3879; field_21793 model - f Lnet/minecraft/class_1921; field_21792 renderType -c net/minecraft/class_700$class_701 net/minecraft/client/particle/MobAppearanceParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3042 makeParticle -c net/minecraft/class_700$1 net/minecraft/client/particle/MobAppearanceParticle$1 -c net/minecraft/class_703 net/minecraft/client/particle/Particle - m ()V method_3072 resetPositionToBB - m ()V method_3085 setExpired - m (F)I method_3068 getBrightnessForRender - m ()Z method_3086 isAlive - m ()Lnet/minecraft/class_3999; method_18122 getRenderType - m ()Ljava/lang/String; toString toString - m (I)V method_3077 setMaxAge - m (F)V method_3083 setAlphaF - m (FF)V method_3080 setSize - m (F)Lnet/minecraft/class_703; method_3075 multiplyVelocity - m (F)Lnet/minecraft/class_703; method_3087 multiplyParticleScaleBy - m ()V method_3070 tick - m (DDD)V method_3063 setPosition - m (DDD)V method_3069 move - m ()I method_3082 getMaxAge - m ()Lnet/minecraft/class_238; method_3064 getBoundingBox - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_4184;F)V method_3074 renderParticle - m (FFF)V method_3084 setColor - m (Lnet/minecraft/class_238;)V method_3067 setBoundingBox - f F field_3867 height - f I field_3866 age - f Z field_21507 collidedY - f Z field_3845 onGround - f Lnet/minecraft/class_238; field_3860 EMPTY_AABB - f Z field_3843 isExpired - f Z field_3862 canCollide - f Lnet/minecraft/class_238; field_3872 boundingBox - f F field_3844 particleGravity - f I field_3847 maxAge - f F field_3842 particleGreen - f F field_3861 particleRed - f F field_3859 particleBlue - f D field_3838 prevPosY - f D field_3858 prevPosX - f F field_3841 particleAlpha - f D field_3856 prevPosZ - f F field_3839 particleAngle - f Lnet/minecraft/class_638; field_3851 world - f D field_3874 posX - f D field_3871 posZ - f D field_3854 posY - f D field_3852 motionX - f D field_3869 motionY - f D field_3850 motionZ - f F field_3857 prevParticleAngle - f Ljava/util/Random; field_3840 rand - f F field_3849 width -c net/minecraft/class_698 net/minecraft/client/particle/NoteParticle -c net/minecraft/class_698$class_699 net/minecraft/client/particle/NoteParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3041 makeParticle - f Lnet/minecraft/class_4002; field_17819 spriteSet -c net/minecraft/class_698$1 net/minecraft/client/particle/NoteParticle$1 -c net/minecraft/class_4089 net/minecraft/client/particle/TexturesParticle - m (Lcom/google/gson/JsonElement;)Ljava/lang/String; method_18827 func_217597_a - m ()Ljava/util/List; method_18826 getTextures - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_4089; method_18828 deserialize - f Ljava/util/List; field_18299 textures -c net/minecraft/class_707 net/minecraft/client/particle/IParticleFactory - m (Lnet/minecraft/class_2394;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3090 makeParticle -c net/minecraft/class_702 net/minecraft/client/particle/ParticleManager - m (Lnet/minecraft/class_2396;Lnet/minecraft/class_702$class_4091;)V method_18834 registerFactory - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597$class_4598;Lnet/minecraft/class_765;Lnet/minecraft/class_4184;F)V method_3049 renderParticles - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_3046 addBlockDestroyEffects - m (Lnet/minecraft/class_3300;Ljava/util/Map;Ljava/util/concurrent/Executor;Lnet/minecraft/class_2960;)Ljava/util/concurrent/CompletableFuture; method_18835 func_215228_a - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;DDDDDD)V method_3050 func_228348_a_ - m (Lnet/minecraft/class_3695;Ljava/util/Map;Lnet/minecraft/class_1059$class_4007;)V method_18831 func_215229_a - m ()Ljava/lang/String; method_3052 getStatistics - m (I)[Ljava/util/concurrent/CompletableFuture; method_18830 func_215239_a - m (Lnet/minecraft/class_2394;DDDDDD)Lnet/minecraft/class_703; method_3055 makeParticle - m (Lnet/minecraft/class_703;)V method_3058 addEffect - m (Lnet/minecraft/class_703;)V method_3059 tickParticle - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2394;)V method_3061 addParticleEmitter - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2394;I)V method_3051 emitParticleAtEntity - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;Ljava/util/Map;)V method_18837 func_215238_b - m (Lnet/minecraft/class_2396;Lnet/minecraft/class_707;)V method_3043 registerFactory - m (Lnet/minecraft/class_2394;DDDDDD)Lnet/minecraft/class_703; method_3056 addParticle - m ()V method_3057 tick - m (Lnet/minecraft/class_1058;Lnet/minecraft/class_2960;Ljava/util/List;)V method_18833 func_215227_a - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;Ljava/util/Map;)V method_18836 loadTextureLists - m ()V method_18829 close - m (Lnet/minecraft/class_3999;)Ljava/util/Queue; method_18125 func_228346_a_ - m (Lnet/minecraft/class_3999;Ljava/util/Queue;)V method_18126 func_228347_a_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_24046 func_228349_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)V method_3054 addBlockHitEffects - m (Lnet/minecraft/class_3695;Lnet/minecraft/class_3300;Ljava/util/Map;Ljava/lang/Void;)Lnet/minecraft/class_1059$class_4007; method_18832 func_228344_a_ - m ()V method_3062 registerFactories - m (Ljava/util/Collection;)V method_3048 tickParticleList - m (Lnet/minecraft/class_638;)V method_3045 clearEffects - f Ljava/util/Map; field_18300 sprites - f Ljava/util/Random; field_3832 rand - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_3835 factories - f Lnet/minecraft/class_638; field_3834 world - f Ljava/util/Queue; field_3836 queue - f Lnet/minecraft/class_1060; field_3831 renderer - f Ljava/util/Map; field_3830 byType - f Ljava/util/List; field_17820 TYPES - f Ljava/util/Queue; field_3837 particleEmitters - f Lnet/minecraft/class_1059; field_18301 atlas -c net/minecraft/class_702$1 net/minecraft/client/particle/ParticleManager$1 -c net/minecraft/class_702$class_4090 net/minecraft/client/particle/ParticleManager$AnimatedSpriteImpl - m (Ljava/util/List;)V method_18838 setSprites - f Lnet/minecraft/class_702; field_18302 field_217593_a - f Ljava/util/List; field_18303 sprites -c net/minecraft/class_702$class_4091 net/minecraft/client/particle/ParticleManager$IParticleMetaFactory - m (Lnet/minecraft/class_4002;)Lnet/minecraft/class_707; create create -c net/minecraft/class_704 net/minecraft/client/particle/CloudParticle - f Lnet/minecraft/class_4002; field_17862 spriteSetWithAge -c net/minecraft/class_704$class_706 net/minecraft/client/particle/CloudParticle$SneezeFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3089 makeParticle - f Lnet/minecraft/class_4002; field_17864 spriteSet -c net/minecraft/class_704$class_705 net/minecraft/client/particle/CloudParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3088 makeParticle - f Lnet/minecraft/class_4002; field_17863 spriteSet -c net/minecraft/class_704$1 net/minecraft/client/particle/CloudParticle$1 -c net/minecraft/class_3999 net/minecraft/client/particle/IParticleRenderType - m (Lnet/minecraft/class_287;Lnet/minecraft/class_1060;)V method_18130 beginRender - m (Lnet/minecraft/class_289;)V method_18131 finishRender - f Lnet/minecraft/class_3999; field_17831 CUSTOM - f Lnet/minecraft/class_3999; field_17832 NO_RENDER - f Lnet/minecraft/class_3999; field_17827 TERRAIN_SHEET - f Lnet/minecraft/class_3999; field_17828 PARTICLE_SHEET_OPAQUE - f Lnet/minecraft/class_3999; field_17829 PARTICLE_SHEET_TRANSLUCENT - f Lnet/minecraft/class_3999; field_17830 PARTICLE_SHEET_LIT -c net/minecraft/class_3999$1 net/minecraft/client/particle/IParticleRenderType$1 - m ()Ljava/lang/String; toString toString -c net/minecraft/class_3999$3 net/minecraft/client/particle/IParticleRenderType$3 - m ()Ljava/lang/String; toString toString -c net/minecraft/class_3999$2 net/minecraft/client/particle/IParticleRenderType$2 - m ()Ljava/lang/String; toString toString -c net/minecraft/class_3999$5 net/minecraft/client/particle/IParticleRenderType$5 - m ()Ljava/lang/String; toString toString -c net/minecraft/class_3999$4 net/minecraft/client/particle/IParticleRenderType$4 - m ()Ljava/lang/String; toString toString -c net/minecraft/class_3999$6 net/minecraft/client/particle/IParticleRenderType$6 - m ()Ljava/lang/String; toString toString -c net/minecraft/class_4974 net/minecraft/client/particle/ReversePortalParticle -c net/minecraft/class_4974$class_4975 net/minecraft/client/particle/ReversePortalParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_26268 makeParticle - f Lnet/minecraft/class_4002; field_23188 spriteSet -c net/minecraft/class_4974$1 net/minecraft/client/particle/ReversePortalParticle$1 -c net/minecraft/class_709 net/minecraft/client/particle/PortalParticle - f D field_3886 portalPosX - f D field_3885 portalPosY - f D field_3884 portalPosZ -c net/minecraft/class_709$class_710 net/minecraft/client/particle/PortalParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3094 makeParticle - f Lnet/minecraft/class_4002; field_17865 spriteSet -c net/minecraft/class_708 net/minecraft/client/particle/SimpleAnimatedParticle - m (I)V method_3093 setColor - m (F)V method_3091 setBaseAirFriction - m (I)V method_3092 setColorFade - f F field_3881 yAccel - f F field_3876 fadeTargetBlue - f Lnet/minecraft/class_4002; field_17866 spriteWithAge - f F field_3878 fadeTargetRed - f Z field_3880 fadingColor - f F field_3879 baseAirFriction - f F field_3877 fadeTargetGreen -c net/minecraft/class_4955 net/minecraft/client/particle/DeceleratingParticle -c net/minecraft/class_717 net/minecraft/client/particle/SmokeParticle -c net/minecraft/class_717$class_718 net/minecraft/client/particle/SmokeParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3101 makeParticle - f Lnet/minecraft/class_4002; field_17869 spriteSet -c net/minecraft/class_3940 net/minecraft/client/particle/TexturedParticle - m ()F method_18136 getMaxV - m (F)F method_18132 getScale - m ()F method_18135 getMinV - m ()F method_18133 getMinU - m ()F method_18134 getMaxU - f F field_17867 particleScale -c net/minecraft/class_711 net/minecraft/client/particle/SpellParticle - f Ljava/util/Random; field_3888 RANDOM - f Lnet/minecraft/class_4002; field_17870 spriteWithAge -c net/minecraft/class_711$class_716 net/minecraft/client/particle/SpellParticle$WitchFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3100 makeParticle - f Lnet/minecraft/class_4002; field_17875 spriteSet -c net/minecraft/class_711$class_713 net/minecraft/client/particle/SpellParticle$InstantFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3097 makeParticle - f Lnet/minecraft/class_4002; field_17872 spriteSet -c net/minecraft/class_711$class_712 net/minecraft/client/particle/SpellParticle$AmbientMobFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3096 makeParticle - f Lnet/minecraft/class_4002; field_17871 spriteSet -c net/minecraft/class_711$1 net/minecraft/client/particle/SpellParticle$1 -c net/minecraft/class_711$class_715 net/minecraft/client/particle/SpellParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3099 makeParticle - f Lnet/minecraft/class_4002; field_17874 spriteSet -c net/minecraft/class_711$class_714 net/minecraft/client/particle/SpellParticle$MobFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3098 makeParticle - f Lnet/minecraft/class_4002; field_17873 spriteSet -c net/minecraft/class_4956 net/minecraft/client/particle/SoulParticle - f Lnet/minecraft/class_4002; field_23091 spriteWithAge -c net/minecraft/class_4956$class_4957 net/minecraft/client/particle/SoulParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_25994 makeParticle - f Lnet/minecraft/class_4002; field_23092 spriteSet -c net/minecraft/class_4956$1 net/minecraft/client/particle/SoulParticle$1 -c net/minecraft/class_719 net/minecraft/client/particle/SplashParticle -c net/minecraft/class_719$class_720 net/minecraft/client/particle/SplashParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3102 makeParticle - f Lnet/minecraft/class_4002; field_17877 spriteSet -c net/minecraft/class_719$1 net/minecraft/client/particle/SplashParticle$1 -c net/minecraft/class_721 net/minecraft/client/particle/SpitParticle -c net/minecraft/class_721$class_722 net/minecraft/client/particle/SpitParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3103 makeParticle - f Lnet/minecraft/class_4002; field_17876 spriteSet -c net/minecraft/class_721$1 net/minecraft/client/particle/SpitParticle$1 -c net/minecraft/class_725 net/minecraft/client/particle/SquidInkParticle -c net/minecraft/class_725$class_726 net/minecraft/client/particle/SquidInkParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3105 makeParticle - f Lnet/minecraft/class_4002; field_17878 spriteSet -c net/minecraft/class_725$1 net/minecraft/client/particle/SquidInkParticle$1 -c net/minecraft/class_4002 net/minecraft/client/particle/IAnimatedSprite - m (Ljava/util/Random;)Lnet/minecraft/class_1058; method_18139 get - m (II)Lnet/minecraft/class_1058; method_18138 get -c net/minecraft/class_729 net/minecraft/client/particle/SuspendedTownParticle -c net/minecraft/class_729$class_730 net/minecraft/client/particle/SuspendedTownParticle$DolphinSpeedFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3110 makeParticle - f Lnet/minecraft/class_4002; field_17881 spriteSet -c net/minecraft/class_729$class_3991 net/minecraft/client/particle/SuspendedTownParticle$ComposterFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_18044 makeParticle - f Lnet/minecraft/class_4002; field_17880 spriteSet -c net/minecraft/class_729$1 net/minecraft/client/particle/SuspendedTownParticle$1 -c net/minecraft/class_729$class_732 net/minecraft/client/particle/SuspendedTownParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3112 makeParticle - f Lnet/minecraft/class_4002; field_17883 spriteSet -c net/minecraft/class_729$class_731 net/minecraft/client/particle/SuspendedTownParticle$HappyVillagerFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3111 makeParticle - f Lnet/minecraft/class_4002; field_17882 spriteSet -c net/minecraft/class_723 net/minecraft/client/particle/UnderwaterParticle -c net/minecraft/class_723$class_4795 net/minecraft/client/particle/UnderwaterParticle$CrimsonSporeFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24464 makeParticle - f Lnet/minecraft/class_4002; field_22238 spriteSet -c net/minecraft/class_723$1 net/minecraft/client/particle/UnderwaterParticle$1 -c net/minecraft/class_723$class_4797 net/minecraft/client/particle/UnderwaterParticle$WarpedSporeFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24466 makeParticle - f Lnet/minecraft/class_4002; field_22240 spriteSet -c net/minecraft/class_723$class_4796 net/minecraft/client/particle/UnderwaterParticle$UnderwaterFactory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_24465 makeParticle - f Lnet/minecraft/class_4002; field_22239 spriteSet -c net/minecraft/class_4003 net/minecraft/client/particle/SpriteTexturedParticle - m (Lnet/minecraft/class_4002;)V method_18142 selectSpriteWithAge - m (Lnet/minecraft/class_4002;)V method_18140 selectSpriteRandomly - m (Lnet/minecraft/class_1058;)V method_18141 setSprite - f Lnet/minecraft/class_1058; field_17886 sprite -c net/minecraft/class_727 net/minecraft/client/particle/DiggingParticle - m ()Lnet/minecraft/class_727; method_3106 init - m (Lnet/minecraft/class_2338;)V method_3107 multiplyColor - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_727; method_3108 setBlockPos - f Lnet/minecraft/class_2680; field_3892 sourceState - f Lnet/minecraft/class_2338; field_3891 sourcePos - f F field_17885 vCoord - f F field_17884 uCoord -c net/minecraft/class_727$class_728 net/minecraft/client/particle/DiggingParticle$Factory - m (Lnet/minecraft/class_2388;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3109 makeParticle -c net/minecraft/class_733 net/minecraft/client/particle/EmitterParticle - f Lnet/minecraft/class_1297; field_3894 attachedEntity - f Lnet/minecraft/class_2394; field_3893 particleTypes - f I field_3896 particleAge - f I field_3895 lifetime -c net/minecraft/class_734 net/minecraft/client/particle/TotemOfUndyingParticle -c net/minecraft/class_734$class_735 net/minecraft/client/particle/TotemOfUndyingParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3113 makeParticle - f Lnet/minecraft/class_4002; field_17887 spriteSet -c net/minecraft/class_734$1 net/minecraft/client/particle/TotemOfUndyingParticle$1 -c net/minecraft/class_736 net/minecraft/client/particle/CurrentDownParticle - f F field_3897 motionAngle -c net/minecraft/class_736$class_737 net/minecraft/client/particle/CurrentDownParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3114 makeParticle - f Lnet/minecraft/class_4002; field_17890 spriteSet -c net/minecraft/class_736$1 net/minecraft/client/particle/CurrentDownParticle$1 -c net/minecraft/class_738 net/minecraft/client/particle/WaterWakeParticle - f Lnet/minecraft/class_4002; field_17888 spriteWithAge -c net/minecraft/class_738$class_739 net/minecraft/client/particle/WaterWakeParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3115 makeParticle - f Lnet/minecraft/class_4002; field_17889 spriteSet -c net/minecraft/class_738$1 net/minecraft/client/particle/WaterWakeParticle$1 -c net/minecraft/class_5165 net/minecraft/client/particle/WhiteAshParticle -c net/minecraft/class_5165$class_5166 net/minecraft/client/particle/WhiteAshParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_27150 makeParticle - f Lnet/minecraft/class_4002; field_23936 spriteSet -c net/minecraft/class_740 net/minecraft/client/particle/RainParticle -c net/minecraft/class_740$class_741 net/minecraft/client/particle/RainParticle$Factory - m (Lnet/minecraft/class_2400;Lnet/minecraft/class_638;DDDDDD)Lnet/minecraft/class_703; method_3116 makeParticle - f Lnet/minecraft/class_4002; field_17891 spriteSet -c net/minecraft/class_744 net/minecraft/util/MovementInput - m (Z)V method_3129 tickMovement - m ()Lnet/minecraft/class_241; method_3128 getMoveVector - m ()Z method_20622 isMovingForward - f Z field_3909 backKeyDown - f Z field_3910 forwardKeyDown - f Z field_3903 sneaking - f Z field_3906 rightKeyDown - f F field_3905 moveForward - f Z field_3904 jump - f Z field_3908 leftKeyDown - f F field_3907 moveStrafe -c net/minecraft/class_742 net/minecraft/client/entity/player/AbstractClientPlayerEntity - m ()Z method_3126 isPlayerInfoSet - m (Ljava/lang/String;)Lnet/minecraft/class_2960; method_3124 getLocationSkin - m ()Lnet/minecraft/class_2960; method_3122 getLocationElytra - m ()Lnet/minecraft/class_640; method_3123 getPlayerInfo - m ()Z method_3127 hasSkin - m ()Lnet/minecraft/class_2960; method_3117 getLocationSkin - m ()Z method_3125 hasPlayerInfo - m ()Lnet/minecraft/class_2960; method_3119 getLocationCape - m (Lnet/minecraft/class_2960;Ljava/lang/String;)Lnet/minecraft/class_1046; method_3120 getDownloadImageSkin - m ()Ljava/lang/String; method_3121 getSkinType - m ()F method_3118 getFovModifier - f Lnet/minecraft/class_638; field_17892 worldClient - f Lnet/minecraft/class_640; field_3901 playerInfo - f F field_3898 rotateElytraZ - f F field_3900 rotateElytraX - f F field_3899 rotateElytraY -c net/minecraft/class_746 net/minecraft/client/entity/player/ClientPlayerEntity - m (Ljava/lang/String;)V method_3146 setServerBrand - m ()Lnet/minecraft/class_3469; method_3143 getStats - m ()Z method_20623 isUsingSwimmingAnimation - m (Lnet/minecraft/class_2338;)Z method_30674 shouldBlockPushPlayer - m (I)V method_3147 setPermissionLevel - m (FII)V method_3145 setXPStats - m ()F method_3140 getWaterBrightness - m (DD)V method_30673 setPlayerOffsetMotion - m ()Z method_20303 isForcedDown - m ()Z method_3131 isRidingHorse - m ()V method_3137 closeScreenAndDropStack - m ()Z method_3144 isRowingBoat - m (FF)V method_3148 updateAutoJump - m ()V method_3133 sendHorseJump - m ()V method_18654 handlePortalTeleportation - m ()Lnet/minecraft/class_299; method_3130 getRecipeBook - m ()V method_3132 sendHorseInventory - m ()Z method_22120 isMoving - m (Lnet/minecraft/class_1297;)Z method_27035 func_239205_c_ - m ()F method_3151 getHorseJumpPower - m (Lnet/minecraft/class_265;)Ljava/util/stream/Stream; method_3139 func_212329_a_ - m (F)V method_3138 setPlayerSPHealth - m (Z)V method_22420 setShowDeathScreen - m ()Z method_22419 isShowDeathScreen - m (Lnet/minecraft/class_1860;)V method_3141 removeRecipeHighlight - m ()F method_26269 getDarknessAmbience - m (Ljava/lang/String;)V method_3142 sendChatMessage - m ()Z method_3149 isAutoJumpEnabled - m ()Z method_3134 isCurrentViewEntity - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_30672 func_243494_a - m ()V method_3136 onUpdateWalkingPlayer - m ()Z method_22119 canAutoJump - m ()Ljava/lang/String; method_3135 getServerBrand - f D field_3924 lastReportedPosZ - f Lnet/minecraft/class_3469; field_3928 stats - f D field_3926 lastReportedPosX - f Lnet/minecraft/class_744; field_3913 movementInput - f F field_3922 horseJumpPower - f Z field_3936 clientSneakState - f F field_3925 lastReportedPitch - f I field_3923 positionUpdateTicks - f Ljava/lang/String; field_3943 serverBrand - f Z field_3920 prevOnGround - f F field_3916 renderArmPitch - f F field_3914 prevRenderArmPitch - f I field_3921 sprintingTicksLeft - f Z field_3927 autoJumpEnabled - f F field_3911 prevTimeInPortal - f Lnet/minecraft/class_299; field_3930 recipeBook - f F field_3941 lastReportedYaw - f Z field_3939 wasFallFlying - f I field_3912 permissionLevel - f D field_3940 lastReportedPosY - f Z field_20663 showDeathScreen - f Z field_23093 isCrouching - f I field_3938 horseJumpPowerCounter - f Z field_3919 serverSprintState - f Lnet/minecraft/class_1268; field_3945 activeHand - f I field_3934 autoJumpTime - f F field_3931 prevRenderArmYaw - f Ljava/util/List; field_3933 ambientSoundHandlers - f I field_3935 sprintToggleTimer - f Z field_3918 hasValidHealth - f Lnet/minecraft/class_310; field_3937 mc - f F field_3932 renderArmYaw - f Z field_3915 handActive - f I field_3917 counterInWater - f F field_3929 timeInPortal - f Lnet/minecraft/class_634; field_3944 connection - f Z field_3942 rowingBoat -c net/minecraft/class_743 net/minecraft/util/MovementInputFromOptions - f Lnet/minecraft/class_315; field_3902 gameSettings -c net/minecraft/class_748 net/minecraft/client/settings/HotbarSnapshot - m ()Z isEmpty isEmpty - m ()Ljava/util/List; delegate delegate - m ()Ljava/util/Collection; delegate delegate - m (Lnet/minecraft/class_2499;)V method_3152 fromTag - m ()Ljava/lang/Object; delegate delegate - m ()Lnet/minecraft/class_2499; method_3153 createTag - f Lnet/minecraft/class_2371; field_3948 hotbarItems -c net/minecraft/class_745 net/minecraft/client/entity/player/RemoteClientPlayerEntity -c net/minecraft/class_756 net/minecraft/client/renderer/tileentity/ItemStackTileEntityRenderer - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3166 func_239207_a_ - m (I)[Lnet/minecraft/class_2627; method_3165 func_199929_a - f Lnet/minecraft/class_2595; field_3978 chestTrap - f Lnet/minecraft/class_613; field_3985 trident - f Lnet/minecraft/class_2595; field_3976 chestBasic - f Lnet/minecraft/class_2627; field_3984 SHULKER_BOX - f [Lnet/minecraft/class_2627; field_3981 SHULKER_BOXES - f Lnet/minecraft/class_2587; field_3982 bed - f Lnet/minecraft/class_2573; field_3983 banner - f Lnet/minecraft/class_600; field_3980 modelShield - f Lnet/minecraft/class_2611; field_3977 enderChest - f Lnet/minecraft/class_756; field_3986 instance - f Lnet/minecraft/class_2597; field_3979 conduit -c net/minecraft/class_1163 net/minecraft/world/biome/BiomeColors - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_4966 getFoliageColor - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_4962 getGrassColor - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;Lnet/minecraft/world/level/ColorResolver;)I method_4965 getBlockColor - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_4961 getWaterColor - m (Lnet/minecraft/class_1959;DD)I method_23791 func_228362_b_ - m (Lnet/minecraft/class_1959;DD)I method_23790 func_228360_a_ - f Lnet/minecraft/world/level/ColorResolver; field_5664 FOLIAGE_COLOR - f Lnet/minecraft/world/level/ColorResolver; field_5665 GRASS_COLOR - f Lnet/minecraft/world/level/ColorResolver; field_5666 WATER_COLOR -c net/minecraft/class_751 net/minecraft/client/renderer/RenderSkyboxCube - m (Lnet/minecraft/class_1060;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_18143 loadAsync - m (Lnet/minecraft/class_310;FFF)V method_3156 render - f [Lnet/minecraft/class_2960; field_3952 locations -c net/minecraft/class_750 net/minecraft/client/renderer/RegionRenderCacheBuilder - m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_287; method_22706 func_228368_b_ - m ()V method_22705 resetBuilders - m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_1921; method_22707 func_228369_c_ - m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_287; method_3154 getBuilder - m ()V method_23501 discardBuilders - f Ljava/util/Map; field_3951 builders -c net/minecraft/class_280 net/minecraft/client/shader/ShaderInstance - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_277; method_16035 func_216543_a - m (Ljava/lang/String;)Lnet/minecraft/class_278; method_1275 getShaderUniform - m ()V method_1273 func_216544_e - m ()V method_1268 func_216536_h - m ()V method_1277 func_216535_f - m (Lcom/google/gson/JsonElement;)V method_1276 func_216541_a - m (Ljava/lang/String;)Lnet/minecraft/class_284; method_1271 func_216539_a - m (Lcom/google/gson/JsonElement;)V method_1272 func_216540_b - m ()V close close - m (Ljava/lang/String;Ljava/util/function/IntSupplier;)V method_1269 func_216537_a - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_281$class_282;Ljava/lang/String;)Lnet/minecraft/class_281; method_16036 func_216542_a - f I field_1521 field_216555_k - f Ljava/lang/String; field_1509 field_216556_l - f Ljava/util/List; field_1503 field_216550_f - f Lnet/minecraft/class_281; field_1508 field_216562_r - f Lnet/minecraft/class_280; field_1512 field_216547_c - f Z field_1511 field_216558_n - f Lnet/minecraft/class_281; field_1519 field_216563_s - f Ljava/util/Map; field_1516 field_216549_e - f Ljava/util/List; field_1507 field_216553_i - f Ljava/util/Map; field_1510 field_216554_j - f Ljava/util/List; field_1515 field_216552_h - f Lorg/apache/logging/log4j/Logger; field_1514 LOGGER - f Ljava/util/List; field_1506 field_216551_g - f Ljava/util/List; field_1504 field_216561_q - f Lnet/minecraft/class_278; field_1520 field_216546_b - f I field_1505 field_216548_d - f Ljava/util/List; field_1518 field_216560_p - f Lnet/minecraft/class_277; field_1517 field_216559_o -c net/minecraft/class_5294 net/minecraft/client/world/DimensionRenderInfo - m ()Z method_28114 func_241684_d_ - m (FF)[F method_28109 func_230492_a_ - m (Lnet/minecraft/class_2874;)Lnet/minecraft/class_5294; method_28111 func_243495_a - m ()Z method_29993 func_239217_c_ - m ()F method_28108 func_239213_a_ - m (Lit/unimi/dsi/fastutil/objects/Object2ObjectArrayMap;)V method_29092 func_239214_a_ - m (Lnet/minecraft/class_243;F)Lnet/minecraft/class_243; method_28112 func_230494_a_ - m (II)Z method_28110 func_230493_a_ - m ()Lnet/minecraft/class_5294$class_5401; method_29992 func_241683_c_ - m ()Z method_28113 func_239216_b_ - f Lit/unimi/dsi/fastutil/objects/Object2ObjectMap; field_24609 field_239208_a_ - f [F field_24610 field_239209_b_ - f Z field_25638 field_239212_e_ - f F field_24611 field_239210_c_ - f Z field_24613 field_241681_f_ - f Lnet/minecraft/class_5294$class_5401; field_25637 field_241680_e_ - f Z field_24612 field_239211_d_ -c net/minecraft/class_5294$class_5401 net/minecraft/client/world/DimensionRenderInfo$FogType - m ()[Lnet/minecraft/class_5294$class_5401; values values - m (Ljava/lang/String;)Lnet/minecraft/class_5294$class_5401; valueOf valueOf - f [Lnet/minecraft/class_5294$class_5401; field_25642 $VALUES - f Lnet/minecraft/class_5294$class_5401; field_25639 NONE - f Lnet/minecraft/class_5294$class_5401; field_25641 END - f Lnet/minecraft/class_5294$class_5401; field_25640 NORMAL -c net/minecraft/class_5294$class_5296 net/minecraft/client/world/DimensionRenderInfo$Nether -c net/minecraft/class_5294$class_5297 net/minecraft/client/world/DimensionRenderInfo$Overworld -c net/minecraft/class_5294$class_5295 net/minecraft/client/world/DimensionRenderInfo$End -c net/minecraft/class_758 net/minecraft/client/renderer/FogRenderer - m ()V method_3212 applyFog - m (Lnet/minecraft/class_4184;Lnet/minecraft/class_758$class_4596;FZ)V method_3211 setupFog - m ()V method_23792 resetFog - m (Lnet/minecraft/class_4184;FLnet/minecraft/class_638;IF)V method_3210 updateFogColor - m (Lnet/minecraft/class_638;Lnet/minecraft/class_4543;FIII)Lnet/minecraft/class_243; method_24873 func_239218_a_ - f I field_4041 waterFogColor - f F field_4034 red - f I field_4031 lastWaterFogColor - f F field_4032 blue - f J field_4042 waterFogUpdateTime - f F field_4033 green -c net/minecraft/class_758$class_4596 net/minecraft/client/renderer/FogRenderer$FogType - m (Ljava/lang/String;)Lnet/minecraft/class_758$class_4596; valueOf valueOf - m ()[Lnet/minecraft/class_758$class_4596; values values - f Lnet/minecraft/class_758$class_4596; field_20946 FOG_TERRAIN - f [Lnet/minecraft/class_758$class_4596; field_20947 $VALUES - f Lnet/minecraft/class_758$class_4596; field_20945 FOG_SKY -c net/minecraft/class_753 net/minecraft/client/renderer/FaceDirection - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_753; method_3163 getFacing - m ()[Lnet/minecraft/class_753; values values - m (Ljava/lang/String;)Lnet/minecraft/class_753; valueOf valueOf - m ([Lnet/minecraft/class_753;)V method_3161 func_209235_a - m (I)Lnet/minecraft/class_753$class_755; method_3162 getVertexInformation - f Lnet/minecraft/class_753; field_3961 EAST - f [Lnet/minecraft/class_753; field_3958 FACINGS - f Lnet/minecraft/class_753; field_3966 WEST - f [Lnet/minecraft/class_753$class_755; field_3959 vertexInfos - f Lnet/minecraft/class_753; field_3965 DOWN - f Lnet/minecraft/class_753; field_3963 SOUTH - f Lnet/minecraft/class_753; field_3960 UP - f [Lnet/minecraft/class_753; field_3964 $VALUES - f Lnet/minecraft/class_753; field_3962 NORTH -c net/minecraft/class_753$class_755 net/minecraft/client/renderer/FaceDirection$VertexInformation - f I field_3974 yIndex - f I field_3973 zIndex - f I field_3975 xIndex -c net/minecraft/class_753$class_754 net/minecraft/client/renderer/FaceDirection$Constants - f I field_3968 DOWN_INDEX - f I field_3972 SOUTH_INDEX - f I field_3967 WEST_INDEX - f I field_3971 UP_INDEX - f I field_3969 NORTH_INDEX - f I field_3970 EAST_INDEX -c net/minecraft/class_753$1 net/minecraft/client/renderer/FaceDirection$1 -c net/minecraft/class_5407 net/minecraft/client/renderer/GPUWarning - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Lnet/minecraft/class_5407$class_5408; method_30056 prepare - m (Lcom/google/gson/JsonArray;Ljava/util/List;)V method_30057 func_241693_a_ - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Lcom/google/gson/JsonObject; method_30061 func_241696_c_ - m (Lnet/minecraft/class_5407$class_5408;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_30058 apply - m ()V method_30138 func_241697_d_ - m (Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V method_30919 func_243498_a - m ()Z method_30137 func_241695_b_ - m ()Z method_30055 func_241692_a_ - m ()V method_30140 func_241699_f_ - m ()Ljava/lang/String; method_30062 func_241704_k_ - m ()Ljava/lang/String; method_30060 func_241703_j_ - m ()V method_30139 func_241698_e_ - m ()Ljava/lang/String; method_30063 func_241705_l_ - m ()Z method_30142 func_241701_h_ - m ()V method_30143 func_241702_i_ - m (Ljava/util/List;Lcom/google/gson/JsonElement;)V method_30059 func_241694_a_ - m ()Z method_30141 func_241700_g_ - m ()Ljava/lang/String; method_30920 func_243499_m - f Lnet/minecraft/class_2960; field_25689 field_241687_b_ - f Lorg/apache/logging/log4j/Logger; field_25716 field_241686_a_ - f Z field_25717 field_241689_d_ - f Z field_25719 field_241691_f_ - f Lcom/google/common/collect/ImmutableMap; field_25690 field_241688_c_ - f Z field_25718 field_241690_e_ -c net/minecraft/class_5407$1 net/minecraft/client/renderer/GPUWarning$1 -c net/minecraft/class_5407$class_5408 net/minecraft/client/renderer/GPUWarning$GPUInfo - m (Lnet/minecraft/class_5407$class_5408;)Lcom/google/common/collect/ImmutableMap; method_30065 func_241710_a_ - m ()Lcom/google/common/collect/ImmutableMap; method_30064 func_241709_a_ - m (Ljava/util/List;Ljava/lang/String;)Ljava/lang/String; method_30066 func_241711_a_ - f Ljava/util/List; field_25692 field_241707_b_ - f Ljava/util/List; field_25693 field_241708_c_ - f Ljava/util/List; field_25691 field_241706_a_ -c net/minecraft/class_757 net/minecraft/client/renderer/GameRenderer - m ()Ljava/lang/String; method_3205 func_210112_r - m ()V method_3199 updateFovModifierHand - m (Lnet/minecraft/class_1011;)V method_3181 func_215310_a - m (Lnet/minecraft/class_4184;FZ)Lnet/minecraft/class_1159; method_22973 getProjectionMatrix - m ()Z method_3202 isDrawBlockOutline - m (Lnet/minecraft/class_2960;)V method_3168 loadShader - m (FJZ)V method_3192 updateCameraAndRender - m ()V method_3207 stopUseShader - m ()Lnet/minecraft/class_4608; method_22975 getOverlayTexture - m ()Lnet/minecraft/class_765; method_22974 getLightTexture - m ()V method_3203 resetData - m ()V method_3182 tick - m (Lnet/minecraft/class_1159;)V method_22709 resetProjectionMatrix - m (Lnet/minecraft/class_4587;F)V method_3186 applyBobbing - m (II)V method_3169 updateShaderGroupSize - m (Lnet/minecraft/class_1799;)V method_3189 displayItemActivation - m (Lnet/minecraft/class_1297;)V method_3167 loadEntityShader - m ()V method_3176 createWorldIcon - m ()Ljava/lang/String; method_3173 func_215315_s - m (FJLnet/minecraft/class_4587;)V method_3188 renderWorld - m ()Ljava/lang/String; method_18655 func_215314_u - m (IIF)V method_3171 renderItemActivation - m (F)V method_31136 func_243497_c - m ()V close close - m (F)V method_3190 getMouseOver - m (Lnet/minecraft/class_1309;F)F method_3174 getNightVisionBrightness - m ()V method_3184 switchUseShader - m ()F method_3193 getFarPlaneDistance - m (Lnet/minecraft/class_4184;FZ)D method_3196 getFOVModifier - m ()Lnet/minecraft/class_4184; method_19418 getActiveRenderInfo - m ()Lnet/minecraft/class_330; method_3194 getMapItemRenderer - m ()Lnet/minecraft/class_279; method_3183 getShaderGroup - m (II)Ljava/lang/String; method_3191 func_215309_b - m (Lnet/minecraft/class_4587;F)V method_3198 hurtCameraEffect - m (Lnet/minecraft/class_1297;)Z method_18144 func_215312_b - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4184;F)V method_3172 renderHand - m (F)F method_3195 getBossColorModifier - f I field_4010 SHADER_COUNT - f Z field_4013 useShader - f Lnet/minecraft/class_279; field_4024 shaderGroup - f Z field_4009 drawBlockOutline - f F field_4005 cameraZoom - f F field_4004 cameraPitch - f Lorg/apache/logging/log4j/Logger; field_3993 LOGGER - f F field_4025 farPlaneDistance - f Lnet/minecraft/class_310; field_4015 mc - f Lnet/minecraft/class_1799; field_4006 itemActivationItem - f F field_4002 bossColorModifier - f F field_4029 itemActivationOffX - f Lnet/minecraft/class_759; field_4012 itemRenderer - f F field_4019 fovModifierHand - f Lnet/minecraft/class_3300; field_4018 resourceManager - f J field_4017 timeWorldIcon - f I field_4023 shaderIndex - f F field_3988 cameraYaw - f Z field_3992 renderHand - f Z field_4001 debugView - f Lnet/minecraft/class_4599; field_20948 renderTypeBuffers - f F field_4003 itemActivationOffY - f F field_3999 fovModifierHandPrev - f I field_4007 itemActivationTicks - f I field_4027 rendererUpdateCount - f F field_3997 bossColorModifierPrev - f Ljava/util/Random; field_3994 random - f Lnet/minecraft/class_330; field_4026 mapItemRenderer - f Lnet/minecraft/class_2960; field_26730 field_243496_c - f Lnet/minecraft/class_4184; field_18765 activeRender - f Lnet/minecraft/class_4608; field_20949 overlayTexture - f [Lnet/minecraft/class_2960; field_3996 SHADERS_TEXTURES - f Lnet/minecraft/class_765; field_4028 lightmapTexture - f J field_3998 prevFrameTime -c net/minecraft/class_759 net/minecraft/client/renderer/FirstPersonRenderer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1306;F)V method_3217 transformFirstPerson - m (Lnet/minecraft/class_742;FFLnet/minecraft/class_1268;FLnet/minecraft/class_1799;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3228 renderItemInFirstPerson - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IFFLnet/minecraft/class_1306;)V method_3219 renderArmFirstPerson - m (F)F method_3227 getMapAngleFromPitch - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;ZLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3233 renderItemSide - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_1306;F)V method_3224 transformSideFirstPerson - m (Lnet/minecraft/class_4587;FLnet/minecraft/class_1306;Lnet/minecraft/class_1799;)V method_3218 transformEatFirstPerson - m (FLnet/minecraft/class_4587;Lnet/minecraft/class_4597$class_4598;Lnet/minecraft/class_746;I)V method_22976 renderItemInFirstPerson - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1799;)V method_3223 renderMapFirstPerson - m (Lnet/minecraft/class_1268;)V method_3215 resetEquippedProgress - m ()V method_3220 tick - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IFFF)V method_3231 renderMapFirstPerson - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1306;)V method_3216 renderArm - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IFLnet/minecraft/class_1306;FLnet/minecraft/class_1799;)V method_3222 renderMapFirstPersonSide - f Lnet/minecraft/class_898; field_4046 renderManager - f Lnet/minecraft/class_1921; field_21808 MAP_BACKGROUND_CHECKERBOARD - f Lnet/minecraft/class_1921; field_21807 MAP_BACKGROUND - f F field_4053 prevEquippedProgressMainHand - f F field_4043 equippedProgressMainHand - f Lnet/minecraft/class_918; field_4044 itemRenderer - f F field_4051 prevEquippedProgressOffHand - f Lnet/minecraft/class_1799; field_4047 itemStackMainHand - f Lnet/minecraft/class_310; field_4050 mc - f F field_4052 equippedProgressOffHand - f Lnet/minecraft/class_1799; field_4048 itemStackOffHand -c net/minecraft/class_759$1 net/minecraft/client/renderer/FirstPersonRenderer$1 - f [I field_4054 field_178094_a -c net/minecraft/class_4696 net/minecraft/client/renderer/RenderTypeLookup - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1921; method_29359 func_239221_b_ - m (Z)V method_23682 setFancyGraphics - m (Lnet/minecraft/class_1799;Z)Lnet/minecraft/class_1921; method_23678 func_239219_a_ - m (Ljava/util/HashMap;)V method_23681 func_228392_a_ - m (Lnet/minecraft/class_3610;)Lnet/minecraft/class_1921; method_23680 getRenderType - m (Lnet/minecraft/class_2680;Z)Lnet/minecraft/class_1921; method_23683 func_239220_a_ - m (Ljava/util/HashMap;)V method_23685 func_228395_b_ - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1921; method_23679 getChunkRenderType - f Ljava/util/Map; field_21471 TYPES_BY_FLUID - f Z field_21472 fancyGraphics - f Ljava/util/Map; field_21469 TYPES_BY_BLOCK -c net/minecraft/class_761 net/minecraft/client/renderer/WorldRenderer - m (Lnet/minecraft/class_287;DDDDIDFF)V method_22978 addVertex - m (J)V method_3269 updateChunks - m ()V method_3254 renderEntityOutlineFramebuffer - m (IIIIII)V method_18146 markBlockRangeForRenderUpdate - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_761$class_762;)D method_24224 func_230016_a_ - m (III)V method_8571 markForRerender - m (Lnet/minecraft/class_1657;ILnet/minecraft/class_2338;I)V method_8567 playEvent - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;DDDFFFFDDDDDD)V method_3278 func_230013_a_ - m (Lnet/minecraft/class_4587;FDDD)V method_3259 renderClouds - m ()V method_3277 generateSky - m (Lnet/minecraft/class_2394;ZDDDDDD)Lnet/minecraft/class_703; method_3282 addParticleUnchecked - m (Lnet/minecraft/class_3414;Lnet/minecraft/class_2338;)V method_8562 playRecord - m ()V method_3280 stopChunkUpdates - m (Lnet/minecraft/class_4587;)V method_22979 checkMatrixStack - m ()Lnet/minecraft/class_276; method_22990 getEntityOutlineFramebuffer - m ()V close close - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_846$class_851;Lnet/minecraft/class_2350;)Lnet/minecraft/class_846$class_851; method_3241 getRenderChunkOffset - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;I)V method_8570 notifyBlockUpdate - m ()Z method_3281 hasNoChunkUpdates - m ()Lnet/minecraft/class_276; method_29363 func_239231_t_ - m (Lnet/minecraft/class_4597$class_4598;Lnet/minecraft/class_4588;Lnet/minecraft/class_1921;)Lnet/minecraft/class_4588; method_22986 func_230014_a_ - m (Lnet/minecraft/class_4184;)V method_22989 renderDebug - m (Lnet/minecraft/class_287;FZ)V method_3283 renderSky - m (DDD)Ljava/lang/String; method_3264 func_230012_a_ - m ()V method_3265 generateSky2 - m (Lnet/minecraft/class_287;DDDLnet/minecraft/class_243;)V method_3239 drawClouds - m (Lnet/minecraft/class_2394;ZZDDDDDD)V method_8563 addParticle - m (IIIZ)V method_3295 markForRerender - m ()V method_3296 makeEntityOutlineShader - m ()V method_3279 loadRenderers - m (Lnet/minecraft/class_1297;DDDFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;)V method_22977 renderEntity - m ()Ljava/lang/String; method_3272 getDebugInfoEntities - m (Lnet/minecraft/class_638;)V method_3244 setWorldAndLoadRenderers - m (Lnet/minecraft/class_1921;)Ljava/lang/String; method_3248 func_230015_a_ - m ()Lnet/minecraft/class_276; method_29360 func_239228_q_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)V method_21596 markBlockRangeForRenderUpdate - m (Lnet/minecraft/class_765;FDDD)V method_22714 renderRainSnow - m ()V method_3267 deleteAllDisplayLists - m (Lnet/minecraft/class_1921;Lnet/minecraft/class_4587;DDD)V method_3251 renderBlockLayer - m (Lnet/minecraft/class_4588;IIIIIII)V method_22985 addDebugQuad - m (Lnet/minecraft/class_4184;)V method_22713 addRainParticles - m ()Lnet/minecraft/class_276; method_29364 func_239232_u_ - m (J)Ljava/util/SortedSet; method_22988 func_230017_b_ - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)I method_23793 getPackedLightmapCoords - m (Lnet/minecraft/class_1159;Lnet/minecraft/class_1159;DDDLnet/minecraft/class_4604;)V method_3275 captureFrustum - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)V method_3247 setPartying - m (Lnet/minecraft/class_4587;FJZLnet/minecraft/class_4184;Lnet/minecraft/class_757;Lnet/minecraft/class_765;Lnet/minecraft/class_1159;)V method_22710 updateCameraAndRender - m ()V method_29701 func_239234_w_ - m ()Z method_3270 isRenderEntityOutlines - m ()I method_3246 getRenderedChunks - m (Lnet/minecraft/class_4587;F)V method_3257 renderSky - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_238;FFFF)V method_22982 drawBoundingBox - m ()V method_3252 tick - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_265;DDDFFFF)V method_3291 drawShape - m ()Lnet/minecraft/class_276; method_29361 func_239229_r_ - m (ILnet/minecraft/class_2338;I)V method_8564 broadcastSound - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;DDDDDDFFFF)V method_22980 drawBoundingBox - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_1297;DDDLnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_22712 drawSelectionBox - m (Lnet/minecraft/class_2394;ZZDDDDDD)Lnet/minecraft/class_703; method_3288 addParticleUnchecked - m (Lnet/minecraft/class_2394;DDDDDD)V method_3276 addParticleUnchecked - m (Lnet/minecraft/class_287;DDDDDDFFFF)V method_3258 addChainedFilledBoxVertices - m (Lnet/minecraft/class_4184;Lnet/minecraft/class_4604;ZIZ)V method_3273 setupTerrain - m ()Ljava/lang/String; method_3289 getDebugInfoRenders - m (Lnet/minecraft/class_2338;Z)V method_16037 notifyBlockUpdate - m ()V method_29365 func_239233_v_ - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_23794 getCombinedLight - m ()V method_3293 generateStars - m (Lnet/minecraft/class_2394;ZDDDDDD)V method_8568 addParticle - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;DDDDDDFFFFFFF)V method_22981 drawBoundingBox - m (Lnet/minecraft/class_4587;)V method_3250 renderSkyEnd - m (II)V method_3242 createBindEntityOutlineFbs - m (Z)Lnet/minecraft/class_4066; method_3268 calculateParticleLevel - m (Lnet/minecraft/class_3191;)V method_22987 removeDamageProgress - m ()Lnet/minecraft/class_276; method_29362 func_239230_s_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_265;DDDFFFF)V method_22983 drawVoxelShapeParts - m (Lnet/minecraft/class_287;)V method_3255 renderStars - m (III)V method_18145 markSurroundingsForRerender - m ()V method_3292 setDisplayListEntitiesDirty - m (ILnet/minecraft/class_2338;I)V method_8569 sendBlockBreakProgress - m (Lnet/minecraft/class_4588;I)V method_22984 addDebugVertex - m (Lnet/minecraft/class_4184;)V method_3243 renderWorldBorder - m (Ljava/util/Collection;Ljava/util/Collection;)V method_3245 updateTileEntities - f D field_4118 prevRenderSortZ - f Lnet/minecraft/class_291; field_4094 cloudsVBO - f D field_4064 lastViewEntityYaw - f [F field_20794 rainSizeX - f Lnet/minecraft/class_638; field_4085 world - f Lnet/minecraft/class_276; field_25274 field_239222_F_ - f Lnet/minecraft/class_1060; field_4057 textureManager - f Lnet/minecraft/class_2960; field_4108 CLOUDS_TEXTURES - f Lnet/minecraft/class_276; field_25277 field_239225_I_ - f Lnet/minecraft/class_279; field_4059 entityOutlineShader - f Lnet/minecraft/class_1161; field_4091 debugTerrainFrustumPosition - f Lnet/minecraft/class_293; field_4100 skyVertexFormat - f Lnet/minecraft/class_2960; field_20798 SNOW_TEXTURES - f Lnet/minecraft/class_769; field_4112 viewFrustum - f I field_4110 countEntitiesHidden - f Lnet/minecraft/class_291; field_4113 starVBO - f I field_4084 frustumUpdatePosChunkX - f D field_4103 prevRenderSortY - f D field_4115 lastViewEntityPitch - f Z field_4107 cloudsNeedUpdate - f I field_4121 frustumUpdatePosChunkZ - f Lnet/minecraft/class_4740; field_21799 renderTimeManager - f I field_20793 rainSoundTime - f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_20950 damageProgress - f Lnet/minecraft/class_846; field_4106 renderDispatcher - f Lnet/minecraft/class_276; field_25275 field_239223_G_ - f I field_4116 cloudsCheckZ - f Lnet/minecraft/class_2960; field_4111 SUN_TEXTURES - f Lnet/minecraft/class_276; field_25278 field_239226_J_ - f Ljava/util/Set; field_4055 setTileEntities - f I field_4089 countEntitiesRendered - f D field_4070 frustumUpdatePosZ - f D field_4069 lastViewEntityX - f Lnet/minecraft/class_291; field_4087 skyVBO - f Lnet/minecraft/class_2960; field_20797 RAIN_TEXTURES - f D field_4096 lastViewEntityZ - f Lnet/minecraft/class_279; field_25279 field_239227_K_ - f Lit/unimi/dsi/fastutil/objects/ObjectList; field_4086 renderInfos - f Lnet/minecraft/class_291; field_4102 sky2VBO - f Lnet/minecraft/class_4604; field_4056 debugFixedClippingHelper - f D field_4083 prevRenderSortX - f Lnet/minecraft/class_276; field_4101 entityOutlineFramebuffer - f I field_4097 cloudsCheckY - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_4058 damagedBlocks - f [Lnet/minecraft/class_1162; field_4065 debugTerrainMatrix - f Z field_4090 debugFixTerrainFrustum - f Lnet/minecraft/class_310; field_4088 mc - f I field_20792 frameId - f Lnet/minecraft/class_898; field_4109 renderManager - f D field_4120 frustumUpdatePosY - f Lnet/minecraft/class_2960; field_4098 MOON_PHASES_TEXTURES - f Ljava/util/Map; field_4119 mapSoundPositions - f Lnet/minecraft/class_2960; field_4071 FORCEFIELD_TEXTURES - f [Lnet/minecraft/class_2350; field_4095 FACINGS - f I field_4062 renderDistanceChunks - f Lnet/minecraft/class_4063; field_4080 cloudOption - f Lnet/minecraft/class_293; field_20791 blockVertexFormat - f D field_4081 lastViewEntityY - f Lnet/minecraft/class_4599; field_20951 renderTypeTextures - f Lorg/apache/logging/log4j/Logger; field_4060 LOGGER - f I field_4082 cloudsCheckX - f Lnet/minecraft/class_276; field_25276 field_239224_H_ - f Ljava/util/Set; field_4075 chunksToUpdate - f Lnet/minecraft/class_243; field_4072 cloudsCheckColor - f D field_4104 frustumUpdatePosX - f [F field_20795 rainSizeZ - f Z field_4077 displayListEntitiesDirty - f Lnet/minecraft/class_2960; field_4061 END_SKY_TEXTURES - f I field_4105 frustumUpdatePosChunkY - f I field_4073 ticks -c net/minecraft/class_761$1 net/minecraft/client/renderer/WorldRenderer$1 -c net/minecraft/class_761$class_762 net/minecraft/client/renderer/WorldRenderer$LocalRenderInformationContainer - m (Lnet/minecraft/class_761$class_762;)B method_3301 access$400 - m (Lnet/minecraft/class_761$class_762;)I method_3297 access$300 - m (BLnet/minecraft/class_2350;)V method_3299 setDirection - m (Lnet/minecraft/class_761$class_762;)Lnet/minecraft/class_846$class_851; method_3302 access$000 - m (Lnet/minecraft/class_2350;)Z method_3298 hasDirection - m (Lnet/minecraft/class_761$class_762;)Lnet/minecraft/class_2350; method_3300 access$200 - f Lnet/minecraft/class_2350; field_4125 facing - f B field_4126 setFacing - f I field_4122 counter - f Lnet/minecraft/class_846$class_851; field_4124 renderChunk - f Lnet/minecraft/class_761; field_4123 field_178033_e -c net/minecraft/class_761$class_5347 net/minecraft/client/renderer/WorldRenderer$ShaderException -c net/minecraft/class_763 net/minecraft/client/renderer/ItemModelMesher - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1087; method_3308 getItemModel - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1058; method_3305 getParticleIcon - m ()V method_3310 rebuildCache - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_1058; method_3307 getParticleIcon - m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_1087; method_3304 getItemModel - m ()Lnet/minecraft/class_1092; method_3303 getModelManager - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1091;)V method_3309 register - m (Lnet/minecraft/class_1792;)I method_3306 getIndex - f Lnet/minecraft/class_1092; field_4128 modelManager - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_4129 modelLocations - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_4130 itemModels -c net/minecraft/class_4597 net/minecraft/client/renderer/IRenderTypeBuffer - m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_4588; getBuffer getBuffer - m (Ljava/util/Map;Lnet/minecraft/class_287;)Lnet/minecraft/class_4597$class_4598; method_22992 getImpl - m (Lnet/minecraft/class_287;)Lnet/minecraft/class_4597$class_4598; method_22991 getImpl -c net/minecraft/class_4597$class_4598 net/minecraft/client/renderer/IRenderTypeBuffer$Impl - m (Lnet/minecraft/class_1921;)V method_24213 func_228464_c_ - m ()V method_22993 finish - m (Lnet/minecraft/class_1921;)V method_22994 finish - m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_287; method_22995 getBufferRaw - f Ljava/util/Set; field_20955 startedBuffers - f Lnet/minecraft/class_287; field_20952 buffer - f Ljava/util/Map; field_20953 fixedBuffers - f Ljava/util/Optional; field_20954 lastRenderType -c net/minecraft/class_765 net/minecraft/client/renderer/LightTexture - m (II)I method_23687 packLight - m ()V method_3315 disableLightmap - m ()V method_3314 tick - m (F)F method_23795 invGamma - m (Lnet/minecraft/class_1937;I)F method_23284 getLightBrightness - m ()V close close - m (F)V method_3313 updateLightmap - m (I)I method_24187 getLightSky - m (I)I method_24186 getLightBlock - m ()V method_3316 enableLightmap - f F field_21528 torchFlicker - f Lnet/minecraft/class_757; field_4134 entityRenderer - f Lnet/minecraft/class_1011; field_4133 nativeImage - f Z field_4135 needsUpdate - f Lnet/minecraft/class_1043; field_4138 dynamicTexture - f Lnet/minecraft/class_2960; field_4136 resourceLocation - f Lnet/minecraft/class_310; field_4137 client -c net/minecraft/class_4618 net/minecraft/client/renderer/OutlineLayerBuffer - m ()V method_23285 finish - m (IIII)V method_23286 setColor - f I field_21062 blue - f I field_21061 green - f I field_21060 red - f Lnet/minecraft/class_4597$class_4598; field_21058 buffer - f I field_21063 alpha - f Lnet/minecraft/class_4597$class_4598; field_21059 outlineBuffer -c net/minecraft/class_4618$class_4586 net/minecraft/client/renderer/OutlineLayerBuffer$ColoredOutline - f D field_21066 z - f D field_21064 x - f Lnet/minecraft/class_4588; field_20897 coloredBuffer - f D field_21065 y - f F field_21068 v - f F field_21067 u -c net/minecraft/class_4618$1 net/minecraft/client/renderer/OutlineLayerBuffer$1 -c net/minecraft/class_766 net/minecraft/client/renderer/RenderSkybox - m (FF)V method_3317 render - f Lnet/minecraft/class_751; field_4141 renderer - f F field_4140 time - f Lnet/minecraft/class_310; field_4139 mc -c net/minecraft/class_283 net/minecraft/client/shader/Shader - m (Lnet/minecraft/class_1159;)V method_1291 setProjectionMatrix - m (Ljava/lang/String;Ljava/util/function/IntSupplier;II)V method_1292 addAuxFramebuffer - m ()Lnet/minecraft/class_280; method_1295 getShaderManager - m (F)V method_1293 render - m ()V close close - f Lnet/minecraft/class_280; field_1540 manager - f Ljava/util/List; field_1539 listAuxNames - f Lnet/minecraft/class_1159; field_1535 projectionMatrix - f Ljava/util/List; field_1533 listAuxWidths - f Ljava/util/List; field_1537 listAuxHeights - f Lnet/minecraft/class_276; field_1538 framebufferOut - f Lnet/minecraft/class_276; field_1536 framebufferIn - f Ljava/util/List; field_1534 listAuxFramebuffers -c net/minecraft/class_279 net/minecraft/client/shader/ShaderGroup - m (Ljava/lang/String;II)V method_1261 addFramebuffer - m ()V close close - m (Ljava/lang/String;)Lnet/minecraft/class_276; method_1266 getFramebuffer - m (Ljava/lang/String;)Lnet/minecraft/class_276; method_1264 getFramebufferRaw - m (II)V method_1259 createBindFramebuffers - m (Ljava/lang/String;Lnet/minecraft/class_276;Lnet/minecraft/class_276;)Lnet/minecraft/class_283; method_1262 addShader - m (Lcom/google/gson/JsonElement;)V method_1265 initTarget - m ()Ljava/lang/String; method_1260 getShaderGroupName - m ()V method_1267 resetProjectionMatrix - m (Lnet/minecraft/class_1060;Lnet/minecraft/class_2960;)V method_1256 parseGroup - m (Lnet/minecraft/class_1060;Lcom/google/gson/JsonElement;)V method_1257 parsePass - m (F)V method_1258 render - m (Lcom/google/gson/JsonElement;)V method_1263 initUniform - f I field_1493 mainFramebufferWidth - f F field_1501 time - f I field_1492 mainFramebufferHeight - f F field_1500 lastStamp - f Ljava/lang/String; field_1494 shaderGroupName - f Ljava/util/List; field_1496 listFramebuffers - f Ljava/util/Map; field_1495 mapFramebuffers - f Lnet/minecraft/class_3300; field_1502 resourceManager - f Ljava/util/List; field_1497 listShaders - f Lnet/minecraft/class_276; field_1499 mainFramebuffer - f Lnet/minecraft/class_1159; field_1498 projectionMatrix -c net/minecraft/class_4599 net/minecraft/client/renderer/RenderTypeBuffers - m (Lit/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap;Lnet/minecraft/class_1921;)V method_24047 func_228488_b_ - m (Lit/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap;Lnet/minecraft/class_1921;)V method_23798 put - m ()Lnet/minecraft/class_4597$class_4598; method_23001 getCrumblingBufferSource - m ()Lnet/minecraft/class_4618; method_23003 getOutlineBufferSource - m ()Lnet/minecraft/class_4597$class_4598; method_23000 getBufferSource - m (Lit/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap;)V method_22999 func_228485_a_ - m ()Lnet/minecraft/class_750; method_22997 getFixedBuilder - f Lnet/minecraft/class_750; field_20956 fixedBuilder - f Lnet/minecraft/class_4597$class_4598; field_20959 crumblingBufferSource - f Lnet/minecraft/class_4597$class_4598; field_20958 bufferSource - f Ljava/util/SortedMap; field_20957 fixedBuffers - f Lnet/minecraft/class_4618; field_20961 outlineBufferSource -c net/minecraft/class_768 net/minecraft/client/renderer/Rectangle2d - m ()I method_3319 getWidth - m ()I method_3320 getHeight - m (II)Z method_3318 contains - m ()I method_3321 getX - m ()I method_3322 getY - f I field_4144 y - f I field_4143 width - f I field_4142 height - f I field_4145 x -c net/minecraft/class_1921 net/minecraft/client/renderer/RenderType - m ()Lnet/minecraft/class_1921; method_23590 getGlint - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_25448 getArmorCutoutNoCull - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23576 getEntityCutout - m ()Lnet/minecraft/class_1921; method_23591 getEntityGlint - m ()Lnet/minecraft/class_1921; method_23593 getLightning - m (I)Lnet/minecraft/class_1921; method_23574 getEndPortal - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_28116 getEntityCutoutNoCullZOffset - m ()Lnet/minecraft/class_1921; method_23589 getWaterMask - m ()Lnet/minecraft/class_1921; method_27949 getArmorEntityGlint - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_24469 getEntityShadow - m ()Lnet/minecraft/class_1921; method_23579 getCutoutMipped - m ()I method_22722 getBufferSize - m ()Ljava/util/Optional; method_23289 getOutline - m ()Lnet/minecraft/class_1921; method_23583 getTranslucent - m ()I method_23033 getDrawMode - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23287 getOutline - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23028 getText - m (Lnet/minecraft/class_2960;FF)Lnet/minecraft/class_1921; method_23018 getEnergySwirl - m ()Lnet/minecraft/class_1921; method_23585 getTranslucentNoCrumbling - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_29379 getItemEntityTranslucentCull - m ()Ljava/util/Optional; method_24296 getRenderType - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23580 getEntityTranslucent - m (Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_1921; method_24293 getEntityCutoutNoCull - m ()Lnet/minecraft/class_1921$class_4688; method_24051 getTranslucentState - m ()Lnet/minecraft/class_1921$class_4688; method_29996 getWeatherState - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23586 getEntityDecal - m (Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_1921; method_24294 getEntityTranslucent - m ()Z method_24295 isColoredOutlineBuffer - m (Ljava/lang/String;Lnet/minecraft/class_293;IILnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_1921$class_4687; method_24048 makeType - m ()Ljava/util/List; method_22720 getBlockRenderTypes - m ()Lnet/minecraft/class_1921; method_29706 getGlintDirect - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4668$class_4671;)Lnet/minecraft/class_1921; method_24468 getOutline - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23572 getEntitySolid - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23578 getEntityCutoutNoCull - m ()Lnet/minecraft/class_1921; method_29707 getEntityGlintDirect - m ()Lnet/minecraft/class_1921; method_29997 getTripwire - m (Ljava/lang/String;Lnet/minecraft/class_293;IIZZLnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_1921$class_4687; method_24049 makeType - m ()Lnet/minecraft/class_1921; method_23587 getLeash - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23030 getTextSeeThrough - m ()Lnet/minecraft/class_1921; method_27948 getArmorGlint - m ()Lnet/minecraft/class_293; method_23031 getVertexFormat - m ()Lnet/minecraft/class_1921; method_30676 getGlintTranslucent - m (Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_1921; method_23592 getBeaconBeam - m ()Lnet/minecraft/class_1921; method_23581 getCutout - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23026 getEyes - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23570 getCrumbling - m ()Lnet/minecraft/class_1921; method_29380 getTranslucentMovingBlock - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23689 getEntityTranslucentCull - m ()Lnet/minecraft/class_1921; method_23594 getLines - m (Lnet/minecraft/class_287;III)V method_23012 finish - m ()Z method_23037 isUseDelegate - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23584 getEntitySmoothCutout - m (Lnet/minecraft/class_2960;F)Lnet/minecraft/class_1921; method_23573 getEntityAlpha - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_23588 getEntityNoOutline - m (Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_1921; method_28115 getEntityCutoutNoCullZOffset - m ()Lnet/minecraft/class_1921; method_23577 getSolid - m ()Lnet/minecraft/class_1921$class_4688; method_29381 getItemEntityState - f I field_20973 drawMode - f Lnet/minecraft/class_293; field_20972 vertexFormat - f Lnet/minecraft/class_1921; field_20963 TRANSLUCENT_NO_CRUMBLING - f Lnet/minecraft/class_1921; field_9175 CUTOUT_MIPPED - f Lnet/minecraft/class_1921; field_9179 TRANSLUCENT - f Lnet/minecraft/class_1921; field_25487 GLINT_DIRECT - f Lnet/minecraft/class_1921; field_25488 ENTITY_GLINT_DIRECT - f Lnet/minecraft/class_1921; field_25644 TRIPWIRE - f Lnet/minecraft/class_1921; field_20964 LEASH - f Lnet/minecraft/class_1921$class_4687; field_21695 LINES - f Lnet/minecraft/class_1921; field_24472 ARMOR_GLINT - f Z field_20975 useDelegate - f Lnet/minecraft/class_1921; field_26373 GLINT_TRANSLUCENT - f I field_20806 bufferSize - f Lnet/minecraft/class_1921; field_25285 TRANSLUCENT_MOVING__BLOCK - f Ljava/util/Optional; field_21850 renderType - f Lnet/minecraft/class_1921; field_9174 CUTOUT - f Lnet/minecraft/class_1921; field_20968 ENTITY_GLINT - f Lnet/minecraft/class_1921; field_20970 LIGHTNING - f Lnet/minecraft/class_1921; field_9178 SOLID - f Lnet/minecraft/class_1921; field_20965 WATER_MASK - f Lnet/minecraft/class_1921; field_24473 ARMOR_ENTITY_GLINT - f Lnet/minecraft/class_1921; field_20967 GLINT - f Z field_21402 needsSorting -c net/minecraft/class_1921$1 net/minecraft/client/renderer/RenderType$1 -c net/minecraft/class_1921$class_4687 net/minecraft/client/renderer/RenderType$Type - m (Lnet/minecraft/class_1921$class_4688;)V method_23595 func_228672_a_ - m (Lnet/minecraft/class_1921$class_4688;)V method_23596 func_228674_b_ - m (Lnet/minecraft/class_1921$class_4687;)I method_24052 func_228671_a_ - m (Lnet/minecraft/class_1921$class_4688;Lnet/minecraft/class_2960;)Lnet/minecraft/class_1921; method_24470 func_239275_a_ - m (Ljava/lang/String;Lnet/minecraft/class_293;IIZZLnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_1921$class_4687; method_24055 getOrCreate - m (Ljava/lang/String;Lnet/minecraft/class_293;IIZZLnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_1921$class_4687; method_24054 func_228675_b_ - m (Lnet/minecraft/class_1921$class_4687;)Lnet/minecraft/class_1921$class_4688; method_24053 func_228673_b_ - f I field_21404 hashCode - f Z field_21851 field_230170_V_ - f Lnet/minecraft/class_1921$class_4688; field_21403 renderState - f Ljava/util/Optional; field_21697 outlineRenderType - f Lit/unimi/dsi/fastutil/objects/ObjectOpenCustomHashSet; field_21696 TYPES -c net/minecraft/class_1921$class_4687$class_4721 net/minecraft/client/renderer/RenderType$Type$EqualityStrategy - m (Lnet/minecraft/class_1921$class_4687;Lnet/minecraft/class_1921$class_4687;)Z method_24058 equals - m (Ljava/lang/String;)Lnet/minecraft/class_1921$class_4687$class_4721; valueOf valueOf - m (Ljava/lang/Object;)I hashCode hashCode - m (Ljava/lang/Object;Ljava/lang/Object;)Z equals equals - m ()[Lnet/minecraft/class_1921$class_4687$class_4721; values values - m (Lnet/minecraft/class_1921$class_4687;)I method_24057 hashCode - f [Lnet/minecraft/class_1921$class_4687$class_4721; field_21699 $VALUES - f Lnet/minecraft/class_1921$class_4687$class_4721; field_21698 INSTANCE -c net/minecraft/class_1921$class_4688 net/minecraft/client/renderer/RenderType$State - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_1921$class_4750; method_23599 func_230172_a_ - m (Lnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_4668$class_4671; method_24471 func_239276_c_ - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_1921$class_4688;)Lnet/minecraft/class_4668$class_4683; method_23600 func_228696_b_ - m (Lnet/minecraft/class_1921$class_4688;)Lcom/google/common/collect/ImmutableList; method_23601 func_239277_d_ - m ()Lnet/minecraft/class_1921$class_4688$class_4689; method_23598 getBuilder - m ()I hashCode hashCode - f Lnet/minecraft/class_4668$class_4681; field_21409 shadowModel - f Lnet/minecraft/class_4668$class_4678; field_21417 target - f Lnet/minecraft/class_4668$class_4675; field_21416 layer - f Lnet/minecraft/class_4668$class_4679; field_21414 overlay - f Lnet/minecraft/class_4668$class_4676; field_21413 lightmap - f Lcom/google/common/collect/ImmutableList; field_21422 renderStates - f Lnet/minecraft/class_4668$class_4672; field_21411 depthTest - f Lnet/minecraft/class_4668$class_4677; field_21420 line - f Lnet/minecraft/class_4668$class_4684; field_21418 texturing - f Lnet/minecraft/class_4668$class_4686; field_21419 writeMask - f Lnet/minecraft/class_4668$class_4674; field_21415 fog - f Lnet/minecraft/class_4668$class_4685; field_21407 transparency - f Lnet/minecraft/class_4668$class_4683; field_21406 texture - f Lnet/minecraft/class_4668$class_4671; field_21412 cull - f Lnet/minecraft/class_4668$class_4669; field_21410 alpha - f Lnet/minecraft/class_1921$class_4750; field_21852 field_230171_p_ - f Lnet/minecraft/class_4668$class_4673; field_21408 diffuseLighting -c net/minecraft/class_1921$class_4688$class_4689 net/minecraft/client/renderer/RenderType$State$Builder - m (Lnet/minecraft/class_4668$class_4684;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23614 texturing - m (Lnet/minecraft/class_4668$class_4673;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23605 diffuseLighting - m (Lnet/minecraft/class_4668$class_4675;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23607 layer - m (Lnet/minecraft/class_4668$class_4686;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23616 writeMask - m (Lnet/minecraft/class_4668$class_4677;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23609 line - m (Lnet/minecraft/class_4668$class_4669;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23602 alpha - m (Lnet/minecraft/class_4668$class_4679;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23611 overlay - m (Lnet/minecraft/class_4668$class_4671;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23603 cull - m (Lnet/minecraft/class_4668$class_4681;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23612 shadeModel - m (Lnet/minecraft/class_1921$class_4750;)Lnet/minecraft/class_1921$class_4688; method_24297 func_230173_a_ - m (Lnet/minecraft/class_4668$class_4674;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23606 fog - m (Lnet/minecraft/class_4668$class_4685;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23615 transparency - m (Lnet/minecraft/class_4668$class_4676;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23608 lightmap - m (Lnet/minecraft/class_4668$class_4678;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23610 target - m (Z)Lnet/minecraft/class_1921$class_4688; method_23617 build - m (Lnet/minecraft/class_4668$class_4683;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23613 texture - m (Lnet/minecraft/class_4668$class_4672;)Lnet/minecraft/class_1921$class_4688$class_4689; method_23604 depthTest - f Lnet/minecraft/class_4668$class_4681; field_21426 shadeModel - f Lnet/minecraft/class_4668$class_4677; field_21437 line - f Lnet/minecraft/class_4668$class_4669; field_21427 alpha - f Lnet/minecraft/class_4668$class_4671; field_21429 cull - f Lnet/minecraft/class_4668$class_4678; field_21434 target - f Lnet/minecraft/class_4668$class_4675; field_21433 layer - f Lnet/minecraft/class_4668$class_4673; field_21425 diffuseLighting - f Lnet/minecraft/class_4668$class_4676; field_21430 lightmap - f Lnet/minecraft/class_4668$class_4672; field_21428 depthTest - f Lnet/minecraft/class_4668$class_4679; field_21431 overlay - f Lnet/minecraft/class_4668$class_4683; field_21423 texture - f Lnet/minecraft/class_4668$class_4685; field_21424 transparency - f Lnet/minecraft/class_4668$class_4686; field_21436 writeMask - f Lnet/minecraft/class_4668$class_4674; field_21432 fog - f Lnet/minecraft/class_4668$class_4684; field_21435 texturing -c net/minecraft/class_1921$class_4750 net/minecraft/client/renderer/RenderType$OutlineState - m (Ljava/lang/String;)Lnet/minecraft/class_1921$class_4750; valueOf valueOf - m ()Ljava/lang/String; toString toString - m ()[Lnet/minecraft/class_1921$class_4750; values values - f Lnet/minecraft/class_1921$class_4750; field_21855 AFFECTS_OUTLINE - f Lnet/minecraft/class_1921$class_4750; field_21854 IS_OUTLINE - f Ljava/lang/String; field_22243 name - f Lnet/minecraft/class_1921$class_4750; field_21853 NONE - f [Lnet/minecraft/class_1921$class_4750; field_21856 $VALUES -c net/minecraft/class_4668 net/minecraft/client/renderer/RenderState - m ()V method_23515 func_228546_L_ - m ()V method_29378 func_228550_c_ - m ()V method_23535 func_228566_s_ - m ()V method_29703 func_239248_h_ - m ()V method_29370 func_228542_H_ - m ()V method_29374 func_239252_l_ - m ()V method_23524 func_228558_k_ - m ()V method_23502 func_228535_A_ - m ()V method_23516 setupRenderState - m ()V method_23531 func_228562_o_ - m ()V method_23522 func_228554_g_ - m ()V method_23539 func_228570_w_ - m ()I hashCode hashCode - m ()V method_23514 func_228545_K_ - m ()V method_23534 func_228565_r_ - m ()V method_29377 func_239255_o_ - m ()V method_29702 func_239247_g_ - m ()V method_29995 func_228541_G_ - m ()V method_23533 func_228564_q_ - m ()V method_29373 func_239251_k_ - m ()V method_23542 func_228573_z_ - m ()V method_23527 func_228557_j_ - m ()Ljava/lang/String; toString toString - m ()V method_23505 func_228538_D_ - m ()V method_24467 func_228561_n_ - m ()V method_23538 func_228569_v_ - m ()V method_23521 func_228553_f_ - m ()V method_23511 func_228544_J_ - m ()V method_29376 func_239254_n_ - m ()V method_23532 func_228563_p_ - m ()V method_30675 func_228540_F_ - m ()V method_29372 func_239250_j_ - m ()V method_23504 func_228537_C_ - m ()V method_23801 func_228560_m_ - m ()V method_23537 func_228568_u_ - m ()V method_23520 func_228552_e_ - m (Ljava/lang/Object;)Z equals equals - m ()V method_23541 func_228572_y_ - m ()V method_23799 func_228556_i_ - m ()V method_29375 func_239253_m_ - m ()V method_23519 func_228551_d_ - m ()V method_29994 func_228539_E_ - m ()V method_29371 func_239249_i_ - m ()V method_23510 func_228543_I_ - m ()V method_23800 func_228559_l_ - m ()V method_29368 func_228536_B_ - m ()V method_23518 clearRenderState - m ()V method_23536 func_228567_t_ - m (F)V method_23517 setupGlintTexturing - m ()V method_23523 func_228555_h_ - m ()V method_23540 func_228571_x_ - f Lnet/minecraft/class_4668$class_4678; field_25282 field_239238_U_ - f Lnet/minecraft/class_4668$class_4669; field_21373 HALF_ALPHA - f Lnet/minecraft/class_4668$class_4674; field_21357 BLACK_FOG - f Lnet/minecraft/class_4668$class_4683; field_21378 NO_TEXTURE - f Lnet/minecraft/class_4668$class_4675; field_21353 POLYGON_OFFSET_LAYERING - f Lnet/minecraft/class_4668$class_4685; field_21366 ADDITIVE_TRANSPARENCY - f Lnet/minecraft/class_4668$class_4681; field_21375 SHADE_ENABLED - f Ljava/lang/Runnable; field_21362 clearTask - f Lnet/minecraft/class_4668$class_4685; field_21370 TRANSLUCENT_TRANSPARENCY - f Lnet/minecraft/class_4668$class_4672; field_21347 DEPTH_EQUAL - f Lnet/minecraft/class_4668$class_4678; field_21359 OUTLINE_TARGET - f Lnet/minecraft/class_4668$class_4673; field_21387 DIFFUSE_LIGHTING_ENABLED - f Lnet/minecraft/class_4668$class_4684; field_21382 ENTITY_GLINT_TEXTURING - f Lnet/minecraft/class_4668$class_4678; field_25283 field_239239_V_ - f Lnet/minecraft/class_4668$class_4675; field_22241 field_239235_M_ - f Lnet/minecraft/class_4668$class_4678; field_25280 field_239236_S_ - f Lnet/minecraft/class_4668$class_4672; field_21348 DEPTH_LEQUAL - f Lnet/minecraft/class_4668$class_4673; field_21388 DIFFUSE_LIGHTING_DISABLED - f Lnet/minecraft/class_4668$class_4686; field_21349 COLOR_DEPTH_WRITE - f Lnet/minecraft/class_4668$class_4685; field_21367 LIGHTNING_TRANSPARENCY - f Lnet/minecraft/class_4668$class_4684; field_21379 DEFAULT_TEXTURING - f Lnet/minecraft/class_4668$class_4676; field_21383 LIGHTMAP_ENABLED - f Lnet/minecraft/class_4668$class_4683; field_21376 BLOCK_SHEET_MIPPED - f Lnet/minecraft/class_4668$class_4679; field_21385 OVERLAY_ENABLED - f Lnet/minecraft/class_4668$class_4677; field_21360 DEFAULT_LINE - f Lnet/minecraft/class_4668$class_4669; field_21371 ZERO_ALPHA - f Lnet/minecraft/class_4668$class_4671; field_21344 CULL_ENABLED - f Lnet/minecraft/class_4668$class_4678; field_25643 field_241712_U_ - f Lnet/minecraft/class_4668$class_4674; field_21355 NO_FOG - f Lnet/minecraft/class_4668$class_4671; field_21345 CULL_DISABLED - f Lnet/minecraft/class_4668$class_4684; field_21380 OUTLINE_TEXTURING - f Lnet/minecraft/class_4668$class_4678; field_25281 field_239237_T_ - f Lnet/minecraft/class_4668$class_4686; field_21350 COLOR_WRITE - f Lnet/minecraft/class_4668$class_4685; field_21368 GLINT_TRANSPARENCY - f Lnet/minecraft/class_4668$class_4679; field_21386 OVERLAY_DISABLED - f Lnet/minecraft/class_4668$class_4676; field_21384 LIGHTMAP_DISABLED - f Lnet/minecraft/class_4668$class_4669; field_21372 DEFAULT_ALPHA - f Lnet/minecraft/class_4668$class_4683; field_21377 BLOCK_SHEET - f Lnet/minecraft/class_4668$class_4674; field_21356 FOG - f Lnet/minecraft/class_4668$class_4685; field_21364 NO_TRANSPARENCY - f Lnet/minecraft/class_4668$class_4681; field_21374 SHADE_DISABLED - f Ljava/lang/Runnable; field_21361 setupTask - f Lnet/minecraft/class_4668$class_4675; field_21352 NO_LAYERING - f Ljava/lang/String; field_21363 name - f Lnet/minecraft/class_4668$class_4672; field_21346 DEPTH_ALWAYS - f Lnet/minecraft/class_4668$class_4686; field_21351 DEPTH_WRITE - f Lnet/minecraft/class_4668$class_4684; field_21381 GLINT_TEXTURING - f Lnet/minecraft/class_4668$class_4685; field_21369 CRUMBLING_TRANSPARENCY - f Lnet/minecraft/class_4668$class_4678; field_21358 MAIN_TARGET -c net/minecraft/class_4668$class_4686 net/minecraft/client/renderer/RenderState$WriteMaskState - m (ZZ)V method_23568 func_228612_a_ - m (ZZ)V method_23569 func_228613_b_ - f Z field_21401 depthMask - f Z field_21400 colorMask -c net/minecraft/class_4668$class_4681 net/minecraft/client/renderer/RenderState$ShadeModelState - m (Z)V method_23559 func_228600_a_ - m ()V method_23560 func_228601_c_ - f Z field_21394 smooth -c net/minecraft/class_4668$class_4683 net/minecraft/client/renderer/RenderState$TextureState - m ()V method_23565 func_228607_d_ - m ()Ljava/util/Optional; method_23564 texture - m (Lnet/minecraft/class_2960;ZZ)V method_23563 func_228605_a_ - m ()V method_23567 func_228609_f_ - m ()V method_23566 func_228608_e_ - f Z field_21398 blur - f Ljava/util/Optional; field_21397 texture - f Z field_21399 mipmap -c net/minecraft/class_4668$class_4684 net/minecraft/client/renderer/RenderState$TexturingState -c net/minecraft/class_4668$class_4685 net/minecraft/client/renderer/RenderState$TransparencyState -c net/minecraft/class_4668$class_4682 net/minecraft/client/renderer/RenderState$OffsetTexturingState - m ()V method_23562 func_228593_c_ - m (FF)V method_23561 func_228592_a_ - f F field_21395 offsetU - f F field_21396 offsetV -c net/minecraft/class_4668$class_4678 net/minecraft/client/renderer/RenderState$TargetState -c net/minecraft/class_4668$class_4679 net/minecraft/client/renderer/RenderState$OverlayState - m (Z)V method_23556 func_228595_b_ - m (Z)V method_23555 func_228594_a_ -c net/minecraft/class_4668$class_4680 net/minecraft/client/renderer/RenderState$PortalTexturingState - m (I)V method_23557 func_228597_a_ - m ()V method_23558 func_228598_c_ - f I field_21393 iteration -c net/minecraft/class_4668$class_4674 net/minecraft/client/renderer/RenderState$FogState -c net/minecraft/class_4668$class_4675 net/minecraft/client/renderer/RenderState$LayerState -c net/minecraft/class_4668$class_4676 net/minecraft/client/renderer/RenderState$LightmapState - m (Z)V method_23551 func_228585_a_ - m (Z)V method_23552 func_228586_b_ -c net/minecraft/class_4668$class_4677 net/minecraft/client/renderer/RenderState$LineState - m (Ljava/util/OptionalDouble;)V method_23554 func_228589_b_ - m (Ljava/util/OptionalDouble;)V method_23553 func_228588_a_ - f Ljava/util/OptionalDouble; field_21392 width -c net/minecraft/class_4668$class_4670 net/minecraft/client/renderer/RenderState$BooleanState - f Z field_21390 enabled -c net/minecraft/class_4668$class_4671 net/minecraft/client/renderer/RenderState$CullState - m (Z)V method_23545 func_228578_a_ - m (Z)V method_23546 func_228579_b_ -c net/minecraft/class_4668$class_4672 net/minecraft/client/renderer/RenderState$DepthTestState - m (I)V method_23548 func_228582_b_ - m (I)V method_23547 func_228581_a_ - f I field_21391 func - f Ljava/lang/String; field_22242 field_239256_X_ -c net/minecraft/class_4668$class_4673 net/minecraft/client/renderer/RenderState$DiffuseLightingState - m (Z)V method_23549 func_228583_a_ - m (Z)V method_23550 func_228584_b_ -c net/minecraft/class_4668$class_4669 net/minecraft/client/renderer/RenderState$AlphaState - m ()V method_23544 func_228576_c_ - m (F)V method_23543 func_228575_a_ - f F field_21389 ref -c net/minecraft/class_4603 net/minecraft/client/renderer/OverlayRenderer - m (Lnet/minecraft/class_310;Lnet/minecraft/class_4587;)V method_23069 renderUnderwater - m (Lnet/minecraft/class_310;Lnet/minecraft/class_1058;Lnet/minecraft/class_4587;)V method_23068 renderTexture - m (Lnet/minecraft/class_310;Lnet/minecraft/class_4587;)V method_23067 renderOverlays - m (Lnet/minecraft/class_310;Lnet/minecraft/class_4587;)V method_23070 renderFire - m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_2680; method_24225 getViewBlockingState - f Lnet/minecraft/class_2960; field_20986 TEXTURE_UNDERWATER -c net/minecraft/class_4740 net/minecraft/client/renderer/RenderTimeManager - m (J)J method_24214 nextValue - f I field_21801 count - f I field_21802 index - f [J field_21800 values -c net/minecraft/class_4723 net/minecraft/client/renderer/SpriteAwareVertexBuilder - f Lnet/minecraft/class_4588; field_21730 vertexBuilder - f Lnet/minecraft/class_1058; field_21731 atlasSprite -c net/minecraft/class_4722 net/minecraft/client/renderer/Atlases - m ()Lnet/minecraft/class_1921; method_24072 getChestType - m ()Lnet/minecraft/class_1921; method_24074 getCutoutBlockType - m ()Lnet/minecraft/class_1921; method_24076 getTranslucentCullBlockType - m ()Lnet/minecraft/class_1921; method_24067 getShieldType - m (Ljava/lang/String;)Lnet/minecraft/class_4730; method_24068 func_228777_b_ - m ()Lnet/minecraft/class_1921; method_24070 getShulkerBoxType - m (Lnet/minecraft/class_2745;Lnet/minecraft/class_4730;Lnet/minecraft/class_4730;Lnet/minecraft/class_4730;)Lnet/minecraft/class_4730; method_24063 getChestMaterial - m ()Lnet/minecraft/class_1921; method_24071 getSignType - m (Lnet/minecraft/class_2586;Lnet/minecraft/class_2745;Z)Lnet/minecraft/class_4730; method_24062 getChestMaterial - m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_4730; method_24061 func_228770_a_ - m ()Lnet/minecraft/class_1921; method_24073 getSolidBlockType - m ()Lnet/minecraft/class_1921; method_29382 getItemEntityTranslucentCullType - m (Ljava/util/function/Consumer;)V method_24066 collectAllMaterials - m ()Lnet/minecraft/class_1921; method_24059 getBannerType - m ()Lnet/minecraft/class_1921; method_24069 getBedType - m (Ljava/lang/String;)Lnet/minecraft/class_4730; method_24065 getChestMaterial - m (Lnet/minecraft/class_4719;)Lnet/minecraft/class_4730; method_24064 getSignMaterial - m (I)[Lnet/minecraft/class_4730; method_24060 func_228769_a_ - f Lnet/minecraft/class_4730; field_21721 CHEST_LEFT_MATERIAL - f Lnet/minecraft/class_1921; field_21700 SOLID_BLOCK_TYPE - f Lnet/minecraft/class_4730; field_21723 ENDER_CHEST_MATERIAL - f Lnet/minecraft/class_1921; field_25286 ITEM_ENTITY_TRANSLUCENT_CULL_BLOCK_TYPE - f Lnet/minecraft/class_4730; field_21715 CHEST_TRAPPED_LEFT_MATERIAL - f Lnet/minecraft/class_1921; field_21729 CHEST_TYPE - f Lnet/minecraft/class_2960; field_21708 SIGN_ATLAS - f Lnet/minecraft/class_4730; field_21717 CHEST_XMAS_MATERIAL - f Lnet/minecraft/class_4730; field_21719 CHEST_XMAS_RIGHT_MATERIAL - f Lnet/minecraft/class_2960; field_21704 SHULKER_BOX_ATLAS - f Ljava/util/Map; field_21712 SIGN_MATERIALS - f Lnet/minecraft/class_1921; field_21725 BED_TYPE - f Lnet/minecraft/class_2960; field_21706 BANNER_ATLAS - f Lnet/minecraft/class_1921; field_21727 SHIELD_TYPE - f Lnet/minecraft/class_1921; field_21703 TRANSLUCENT_CULL_BLOCK_TYPE - f Lnet/minecraft/class_4730; field_21720 CHEST_MATERIAL - f Lnet/minecraft/class_4730; field_21722 CHEST_RIGHT_MATERIAL - f Lnet/minecraft/class_1921; field_21701 CUTOUT_BLOCK_TYPE - f Lnet/minecraft/class_1921; field_21728 SIGN_TYPE - f Lnet/minecraft/class_2960; field_21709 CHEST_ATLAS - f Lnet/minecraft/class_4730; field_21716 CHEST_TRAPPED_RIGHT_MATERIAL - f [Lnet/minecraft/class_4730; field_21713 BED_TEXTURES - f Lnet/minecraft/class_4730; field_21718 CHEST_XMAS_LEFT_MATERIAL - f Ljava/util/List; field_21711 SHULKER_TEXTURES - f Lnet/minecraft/class_4730; field_21710 DEFAULT_SHULKER_TEXTURE - f Lnet/minecraft/class_1921; field_21724 SHULKER_BOX_TYPE - f Lnet/minecraft/class_2960; field_21707 SHIELD_ATLAS - f Lnet/minecraft/class_1921; field_21726 BANNER_TYPE - f Lnet/minecraft/class_4730; field_21714 CHEST_TRAPPED_MATERIAL - f Lnet/minecraft/class_2960; field_21705 BED_ATLAS -c net/minecraft/class_4722$1 net/minecraft/client/renderer/Atlases$1 - f [I field_21482 field_228786_a_ -c net/minecraft/class_3682 net/minecraft/client/renderer/VirtualScreen - m (Lnet/minecraft/class_543;Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/class_1041; method_16038 create - m ()V close close - f Lnet/minecraft/class_310; field_16256 mc - f Lnet/minecraft/class_323; field_16255 monitorHandler -c net/minecraft/class_769 net/minecraft/client/renderer/ViewFrustum - m ()V method_3327 deleteGlResources - m (III)I method_3326 getIndex - m (Lnet/minecraft/class_846;)V method_3324 createRenderChunks - m (DD)V method_3330 updateChunkPositions - m (I)V method_3325 setCountChunksXYZ - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_846$class_851; method_3323 getRenderChunk - m (IIIZ)V method_16040 markForRerender - f I field_4147 countChunksZ - f I field_4148 countChunksX - f Lnet/minecraft/class_761; field_4146 renderGlobal - f Lnet/minecraft/class_1937; field_4151 world - f [Lnet/minecraft/class_846$class_851; field_4150 renderChunks - f I field_4149 countChunksY -c net/minecraft/class_773 net/minecraft/client/renderer/BlockModelShapes - m (Lnet/minecraft/class_2680;)V method_3337 func_209551_d - m ()Lnet/minecraft/class_1092; method_3333 getModelManager - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1091; method_3340 getModelLocation - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1058; method_3339 getTexture - m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/lang/String; method_3334 getPropertyValueString - m ()V method_3341 reloadModels - m (Ljava/util/Map;)Ljava/lang/String; method_3338 getPropertyMapString - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1087; method_3335 getModel - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2680;)Lnet/minecraft/class_1091; method_3336 getModelLocation - f Ljava/util/Map; field_4162 bakedModelStore - f Lnet/minecraft/class_1092; field_4163 modelManager -c net/minecraft/class_775 net/minecraft/client/renderer/FluidBlockRenderer - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;Lnet/minecraft/class_3610;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_29708 func_239281_a_ - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_29709 func_239282_a_ - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2350;FLnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_29710 func_239284_a_ - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_3610;)Z method_3348 isAdjacentFluidSameAs - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;F)Z method_3344 func_239283_a_ - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;Lnet/minecraft/class_4588;Lnet/minecraft/class_3610;)Z method_3347 render - m (Lnet/minecraft/class_4588;DDDFFFFFI)V method_23072 vertexVanilla - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3611;)F method_3346 getFluidHeight - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_3343 getCombinedAverageLight - m ()V method_3345 initAtlasSprites - f [Lnet/minecraft/class_1058; field_4166 atlasSpritesWater - f Lnet/minecraft/class_1058; field_4164 atlasSpriteWaterOverlay - f [Lnet/minecraft/class_1058; field_4165 atlasSpritesLava -c net/minecraft/class_776 net/minecraft/client/renderer/BlockRendererDispatcher - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_1920;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;ZLjava/util/Random;)Z method_3355 renderModel - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1087; method_3349 getModelForState - m ()Lnet/minecraft/class_778; method_3350 getBlockModelRenderer - m ()Lnet/minecraft/class_773; method_3351 getBlockModelShapes - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3353 renderBlock - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1920;Lnet/minecraft/class_4588;Lnet/minecraft/class_3610;)Z method_3352 renderFluid - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_1920;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;)V method_23071 renderBlockDamage - f Ljava/util/Random; field_4169 random - f Lnet/minecraft/class_324; field_20987 blockColors - f Lnet/minecraft/class_778; field_4170 blockModelRenderer - f Lnet/minecraft/class_773; field_4168 blockModelShapes - f Lnet/minecraft/class_775; field_4167 fluidRenderer -c net/minecraft/class_776$1 net/minecraft/client/renderer/BlockRendererDispatcher$1 - f [I field_4172 field_187488_a -c net/minecraft/class_777 net/minecraft/client/renderer/model/BakedQuad - m ()Z method_24874 applyDiffuseLighting - m ()I method_3359 getTintIndex - m ()[I method_3357 getVertexData - m ()Z method_3360 hasTintIndex - m ()Lnet/minecraft/class_2350; method_3358 getFace - f Z field_22441 applyDiffuseLighting - f Lnet/minecraft/class_2350; field_4173 face - f [I field_4175 vertexData - f I field_4174 tintIndex - f Lnet/minecraft/class_1058; field_4176 sprite -c net/minecraft/class_778 net/minecraft/client/renderer/BlockModelRenderer - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_4588;Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_777;FFFFIIIII)V method_23073 renderQuadSmooth - m ()Ljava/lang/ThreadLocal; method_20546 func_222901_c - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Ljava/util/List;[FLjava/util/BitSet;Lnet/minecraft/class_778$class_780;I)V method_3363 renderQuadsSmooth - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;IIZLnet/minecraft/class_4587;Lnet/minecraft/class_4588;Ljava/util/List;Ljava/util/BitSet;)V method_3370 renderQuadsFlat - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_1087;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;ZLjava/util/Random;JI)Z method_3361 renderModelSmooth - m ()V method_20544 enableCache - m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;FFFLjava/util/List;II)V method_3365 renderModelBrightnessColorQuads - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_1087;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;ZLjava/util/Random;JI)Z method_3373 renderModelFlat - m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;Lnet/minecraft/class_2680;Lnet/minecraft/class_1087;FFFII)V method_3367 renderModelBrightnessColor - m ()Lnet/minecraft/class_778$class_4303; method_20547 func_222902_d - m ()V method_20545 disableCache - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_1087;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;ZLjava/util/Random;JI)Z method_3374 renderModel - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;[ILnet/minecraft/class_2350;[FLjava/util/BitSet;)V method_3364 fillQuadBounds - f Ljava/lang/ThreadLocal; field_4179 CACHE_COMBINED_LIGHT - f Lnet/minecraft/class_324; field_4178 blockColors -c net/minecraft/class_778$class_781 net/minecraft/client/renderer/BlockModelRenderer$VertexTranslations - m ([Lnet/minecraft/class_778$class_781;)V method_3390 func_209261_a - m (Ljava/lang/String;)Lnet/minecraft/class_778$class_781; valueOf valueOf - m ()[Lnet/minecraft/class_778$class_781; values values - m (Lnet/minecraft/class_778$class_781;)I method_3393 func_210261_d - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_778$class_781; method_3394 getVertexTranslations - m (Lnet/minecraft/class_778$class_781;)I method_3395 access$600 - m (Lnet/minecraft/class_778$class_781;)I method_3392 access$500 - m (Lnet/minecraft/class_778$class_781;)I method_3391 access$700 - f [Lnet/minecraft/class_778$class_781; field_4208 $VALUES - f [Lnet/minecraft/class_778$class_781; field_4202 VALUES - f Lnet/minecraft/class_778$class_781; field_4199 DOWN - f I field_4201 vert1 - f Lnet/minecraft/class_778$class_781; field_4205 SOUTH - f Lnet/minecraft/class_778$class_781; field_4204 NORTH - f I field_4198 vert2 - f I field_4209 vert3 - f Lnet/minecraft/class_778$class_781; field_4200 UP - f Lnet/minecraft/class_778$class_781; field_4207 EAST - f Lnet/minecraft/class_778$class_781; field_4206 WEST - f I field_4203 vert0 -c net/minecraft/class_778$class_780 net/minecraft/client/renderer/BlockModelRenderer$AmbientOcclusionFace - m (Lnet/minecraft/class_1920;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;[FLjava/util/BitSet;Z)V method_3388 renderBlockModel - m (IIII)I method_3386 getAoBrightness - m (IIIIFFFF)I method_3389 getVertexBrightness - m (Lnet/minecraft/class_778$class_780;)[F method_3387 func_228808_a_ - m (Lnet/minecraft/class_778$class_780;)[I method_3385 func_228809_b_ - f Lnet/minecraft/class_778; field_4195 field_178208_a - f [F field_4196 vertexColorMultiplier - f [I field_4194 vertexBrightness -c net/minecraft/class_778$class_782 net/minecraft/client/renderer/BlockModelRenderer$Orientation - m (Ljava/lang/String;)Lnet/minecraft/class_778$class_782; valueOf valueOf - m (Lnet/minecraft/class_778$class_782;)I method_3396 func_210262_a - m ()[Lnet/minecraft/class_778$class_782; values values - f Lnet/minecraft/class_778$class_782; field_4213 SOUTH - f Lnet/minecraft/class_778$class_782; field_4211 NORTH - f Lnet/minecraft/class_778$class_782; field_4212 UP - f Lnet/minecraft/class_778$class_782; field_4220 FLIP_DOWN - f Lnet/minecraft/class_778$class_782; field_4219 EAST - f Lnet/minecraft/class_778$class_782; field_4215 WEST - f Lnet/minecraft/class_778$class_782; field_4218 FLIP_NORTH - f I field_4222 shape - f Lnet/minecraft/class_778$class_782; field_4217 FLIP_UP - f Lnet/minecraft/class_778$class_782; field_4214 FLIP_EAST - f Lnet/minecraft/class_778$class_782; field_4210 DOWN - f [Lnet/minecraft/class_778$class_782; field_4223 $VALUES - f Lnet/minecraft/class_778$class_782; field_4216 FLIP_WEST - f Lnet/minecraft/class_778$class_782; field_4221 FLIP_SOUTH -c net/minecraft/class_778$class_4303 net/minecraft/client/renderer/BlockModelRenderer$Cache - m ()V method_20550 disable - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)F method_20551 getBrightness - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1920;Lnet/minecraft/class_2338;)I method_20549 getPackedLight - m ()Lit/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap; method_20553 func_225329_d - m ()Lit/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap; method_20552 func_225328_c - m ()V method_20548 enable - f Lit/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap; field_19322 brightnessCache - f Lit/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap; field_19321 packedLightCache - f Z field_19320 enabled -c net/minecraft/class_778$class_4303$1 net/minecraft/client/renderer/BlockModelRenderer$Cache$1 - m (I)V rehash rehash - f Lnet/minecraft/class_778$class_4303; field_19323 field_222890_a -c net/minecraft/class_778$class_4303$2 net/minecraft/client/renderer/BlockModelRenderer$Cache$2 - m (I)V rehash rehash - f Lnet/minecraft/class_778$class_4303; field_19324 field_222891_a -c net/minecraft/class_778$class_779 net/minecraft/client/renderer/BlockModelRenderer$NeighborInfo - m (Lnet/minecraft/class_778$class_779;)[Lnet/minecraft/class_778$class_782; method_3384 func_210257_c - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_778$class_779; method_3378 getNeighbourInfo - m (Lnet/minecraft/class_778$class_779;)[Lnet/minecraft/class_778$class_782; method_3380 access$1200 - m ([Lnet/minecraft/class_778$class_779;)V method_3383 func_209260_a - m (Lnet/minecraft/class_778$class_779;)[Lnet/minecraft/class_778$class_782; method_3379 func_210258_f - m (Lnet/minecraft/class_778$class_779;)[Lnet/minecraft/class_778$class_782; method_3382 access$1100 - m (Lnet/minecraft/class_778$class_779;)Z method_3381 func_210259_b - m (Ljava/lang/String;)Lnet/minecraft/class_778$class_779; valueOf valueOf - m (Lnet/minecraft/class_778$class_779;)[Lnet/minecraft/class_2350; method_3377 func_222888_a - m ()[Lnet/minecraft/class_778$class_779; values values - f Lnet/minecraft/class_778$class_779; field_4184 SOUTH - f [Lnet/minecraft/class_778$class_782; field_4192 vert0Weights - f Lnet/minecraft/class_778$class_779; field_4183 NORTH - f [Lnet/minecraft/class_2350; field_4191 corners - f Lnet/minecraft/class_778$class_779; field_4182 UP - f [Lnet/minecraft/class_778$class_782; field_4185 vert1Weights - f Lnet/minecraft/class_778$class_779; field_4186 EAST - f [Lnet/minecraft/class_778$class_782; field_4188 vert3Weights - f [Lnet/minecraft/class_778$class_782; field_4180 vert2Weights - f Lnet/minecraft/class_778$class_779; field_4187 WEST - f Z field_4189 doNonCubicWeight - f [Lnet/minecraft/class_778$class_779; field_4190 VALUES - f Lnet/minecraft/class_778$class_779; field_4181 DOWN - f [Lnet/minecraft/class_778$class_779; field_4193 $VALUES -c net/minecraft/class_778$1 net/minecraft/client/renderer/BlockModelRenderer$1 - f [I field_4197 field_222889_a -c net/minecraft/class_783 net/minecraft/client/renderer/model/BlockPartFace - f Ljava/lang/String; field_4224 texture - f Lnet/minecraft/class_787; field_4227 blockFaceUV - f Lnet/minecraft/class_2350; field_4225 cullFace - f I field_4226 tintIndex -c net/minecraft/class_783$class_784 net/minecraft/client/renderer/model/BlockPartFace$Deserializer - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2350; method_3398 parseCullFace - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonObject;)Ljava/lang/String; method_3399 parseTexture - m (Lcom/google/gson/JsonObject;)I method_3400 parseTintIndex - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_783; method_3397 deserialize -c net/minecraft/class_785 net/minecraft/client/renderer/model/BlockPart - m (Lnet/minecraft/class_2350;)[F method_3401 getFaceUvs - m ()V method_3402 setDefaultUvs - f Lnet/minecraft/class_1160; field_4228 positionFrom - f Lnet/minecraft/class_789; field_4232 partRotation - f Ljava/util/Map; field_4230 mapFaces - f Lnet/minecraft/class_1160; field_4231 positionTo - f Z field_4229 shade -c net/minecraft/class_785$class_786 net/minecraft/client/renderer/model/BlockPart$Deserializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_785; method_3406 deserialize - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1160; method_3407 validateFromVector - m (Lcom/google/gson/JsonObject;)F method_3403 parseAngle - m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Ljava/util/Map; method_3404 parseFaces - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Lnet/minecraft/class_1160; method_3409 deserializeVec3f - m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Ljava/util/Map; method_3412 parseFacesCheck - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2350$class_2351; method_3411 parseAxis - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Ljava/lang/String;)Lnet/minecraft/class_2350; method_3408 parseEnumFacing - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1160; method_3405 validateToVector - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_789; method_3410 parseRotation -c net/minecraft/class_785$1 net/minecraft/client/renderer/model/BlockPart$1 - f [I field_4233 field_178234_a -c net/minecraft/class_787 net/minecraft/client/renderer/model/BlockFaceUV - m (I)I method_3414 getVertexRotatedRev - m (I)I method_3413 getVertexRotated - m (I)F method_3416 getVertexV - m ([F)V method_3417 setUvs - m (I)F method_3415 getVertexU - f I field_4234 rotation - f [F field_4235 uvs -c net/minecraft/class_787$class_788 net/minecraft/client/renderer/model/BlockFaceUV$Deserializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonObject;)[F method_3419 parseUV - m (Lcom/google/gson/JsonObject;)I method_3420 parseRotation - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_787; method_3418 deserialize -c net/minecraft/class_789 net/minecraft/client/renderer/model/BlockPartRotation - f F field_4237 angle - f Z field_4238 rescale - f Lnet/minecraft/class_1160; field_4236 origin - f Lnet/minecraft/class_2350$class_2351; field_4239 axis -c net/minecraft/class_790 net/minecraft/client/renderer/model/BlockModelDefinition - m ()Lnet/minecraft/class_816; method_3421 getMultipartData - m ()I hashCode hashCode - m ()Ljava/util/Map; method_3423 getVariants - m (Lnet/minecraft/class_790$class_791;Ljava/io/Reader;)Lnet/minecraft/class_790; method_3424 fromJson - m (Ljava/lang/Object;)Z equals equals - m ()Z method_3422 hasMultipartData - f Ljava/util/Map; field_4241 mapVariants - f Lnet/minecraft/class_816; field_4240 multipart -c net/minecraft/class_790$class_792 net/minecraft/client/renderer/model/BlockModelDefinition$Deserializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_816; method_3427 parseMultipart - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_790; method_3428 deserialize - m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Ljava/util/Map; method_3429 parseMapVariants -c net/minecraft/class_790$class_791 net/minecraft/client/renderer/model/BlockModelDefinition$ContainerHolder - m (Lnet/minecraft/class_2689;)V method_3426 setStateContainer - m ()Lnet/minecraft/class_2689; method_3425 getStateContainer - f Lnet/minecraft/class_2689; field_4242 stateContainer - f Lcom/google/gson/Gson; field_4243 gson -c net/minecraft/class_793 net/minecraft/client/renderer/model/BlockModel - m (Ljava/util/Set;Ljava/lang/String;)V method_3435 func_228814_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_793; method_3430 deserialize - m ()Lnet/minecraft/class_809; method_3443 getAllTransforms - m (Lnet/minecraft/class_1088;Lnet/minecraft/class_793;)Lnet/minecraft/class_806; method_3440 getItemOverrideList - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_785;Lnet/minecraft/class_783;Lnet/minecraft/class_1058;Lnet/minecraft/class_2350;Lnet/minecraft/class_3665;Lnet/minecraft/class_2960;)Lnet/minecraft/class_777; method_3447 bakeFace - m ()Ljava/util/List; method_3434 getOverrides - m (Ljava/lang/String;)Z method_3432 isTexturePresent - m (Ljava/lang/String;)Z method_24078 func_228817_d_ - m (Ljava/util/function/Function;Ljava/util/Set;Ljava/util/Set;Lnet/minecraft/class_799;)V method_3441 func_228815_a_ - m (Lnet/minecraft/class_809$class_811;)Lnet/minecraft/class_804; method_3438 getTransform - m (Ljava/lang/String;)Z method_3439 startsWithHash - m (Ljava/lang/String;)Lnet/minecraft/class_4730; method_24077 resolveTextureName - m (Ljava/io/Reader;)Lnet/minecraft/class_793; method_3437 deserialize - m ()Lnet/minecraft/class_793$class_4751; method_24298 getGuiLight - m (Ljava/lang/String;)Lcom/mojang/datafixers/util/Either; method_3442 findTexture - m ()Ljava/util/List; method_3433 getElements - m ()Z method_3444 isAmbientOcclusion - m ()Lnet/minecraft/class_793; method_3431 getRootModel - m (Lnet/minecraft/class_1088;Lnet/minecraft/class_793;Ljava/util/function/Function;Lnet/minecraft/class_3665;Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_1087; method_3446 bakeModel - f Lnet/minecraft/class_796; field_4249 FACE_BAKERY - f Lnet/minecraft/class_809; field_4250 cameraTransforms - f Ljava/lang/String; field_4252 name - f Lcom/google/gson/Gson; field_4254 SERIALIZER - f Ljava/util/List; field_4255 overrides - f Lnet/minecraft/class_2960; field_4247 parentLocation - f Ljava/util/List; field_4245 elements - f Lnet/minecraft/class_793; field_4253 parent - f Lnet/minecraft/class_793$class_4751; field_21857 guiLight3d - f Ljava/util/Map; field_4251 textures - f Lorg/apache/logging/log4j/Logger; field_4248 LOGGER - f Z field_4244 ambientOcclusion -c net/minecraft/class_793$class_795 net/minecraft/client/renderer/model/BlockModel$Deserializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Ljava/util/List; method_3449 getModelElements - m (Lcom/google/gson/JsonObject;)Z method_3453 getAmbientOcclusionEnabled - m (Lcom/google/gson/JsonObject;)Ljava/util/Map; method_3448 getTextures - m (Lnet/minecraft/class_2960;Ljava/lang/String;)Lcom/mojang/datafixers/util/Either; method_24079 findTexture - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_793; method_3451 deserialize - m (Lcom/google/gson/JsonObject;)Ljava/lang/String; method_3450 getParent - m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;)Ljava/util/List; method_3452 getItemOverrides -c net/minecraft/class_793$class_4751 net/minecraft/client/renderer/model/BlockModel$GuiLight - m (Ljava/lang/String;)Lnet/minecraft/class_793$class_4751; valueOf valueOf - m ()[Lnet/minecraft/class_793$class_4751; values values - m (Ljava/lang/String;)Lnet/minecraft/class_793$class_4751; method_24300 getLightFromName - m ()Z method_24299 isSideLit - f Lnet/minecraft/class_793$class_4751; field_21858 FRONT - f [Lnet/minecraft/class_793$class_4751; field_21861 $VALUES - f Ljava/lang/String; field_21860 name - f Lnet/minecraft/class_793$class_4751; field_21859 SIDE -c net/minecraft/class_796 net/minecraft/client/renderer/model/FaceBakery - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_4590;)V method_3455 rotateVertex - m ([IILnet/minecraft/class_1160;Lnet/minecraft/class_1058;Lnet/minecraft/class_787;)V method_3460 fillVertexData - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_789;)V method_3463 rotatePart - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;Lnet/minecraft/class_1159;Lnet/minecraft/class_1160;)V method_3464 rotateScale - m (Lnet/minecraft/class_787;Lnet/minecraft/class_1058;Lnet/minecraft/class_2350;[FLnet/minecraft/class_4590;Lnet/minecraft/class_789;Z)[I method_3458 makeQuadVertexData - m ([I)Lnet/minecraft/class_2350; method_3467 getFacingFromVertexData - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;Lnet/minecraft/class_783;Lnet/minecraft/class_1058;Lnet/minecraft/class_2350;Lnet/minecraft/class_3665;Lnet/minecraft/class_789;ZLnet/minecraft/class_2960;)Lnet/minecraft/class_777; method_3468 bakeQuad - m (Lnet/minecraft/class_787;Lnet/minecraft/class_2350;Lnet/minecraft/class_4590;Lnet/minecraft/class_2960;)Lnet/minecraft/class_787; method_3454 updateFaceUV - m ([IILnet/minecraft/class_2350;Lnet/minecraft/class_787;[FLnet/minecraft/class_1058;Lnet/minecraft/class_4590;Lnet/minecraft/class_789;Z)V method_3461 fillVertexData - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)[F method_3459 getPositionsDiv16 - m (Lnet/minecraft/class_2960;)Ljava/lang/String; method_23074 func_228825_a_ - m ([ILnet/minecraft/class_2350;)V method_3462 applyFacing - f F field_4260 SCALE_ROTATION_22_5 - f F field_4259 SCALE_ROTATION_GENERAL -c net/minecraft/class_796$1 net/minecraft/client/renderer/model/FaceBakery$1 - f [I field_4265 field_228829_b_ -c net/minecraft/class_799 net/minecraft/client/renderer/model/ItemOverride - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)Z method_3473 matchesOverride - m ()Lnet/minecraft/class_2960; method_3472 getLocation - f Ljava/util/Map; field_4269 mapResourceValues - f Lnet/minecraft/class_2960; field_4268 location -c net/minecraft/class_799$class_800 net/minecraft/client/renderer/model/ItemOverride$Deserializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_799; method_3475 deserialize - m (Lcom/google/gson/JsonObject;)Ljava/util/Map; method_3474 makeMapResourceValues -c net/minecraft/class_801 net/minecraft/client/renderer/model/ItemModelGenerator - m (Lnet/minecraft/class_1058;IIIII)Z method_3477 isTransparent - m (Ljava/util/function/Function;Lnet/minecraft/class_793;)Lnet/minecraft/class_793; method_3479 makeItemModel - m (ILjava/lang/String;Lnet/minecraft/class_1058;)Ljava/util/List; method_3480 getBlockParts - m (Ljava/util/List;Lnet/minecraft/class_801$class_803;II)V method_3482 createOrExpandSpan - m (Lnet/minecraft/class_1058;Ljava/lang/String;I)Ljava/util/List; method_3481 getBlockParts - m (Lnet/minecraft/class_801$class_803;Ljava/util/List;Lnet/minecraft/class_1058;IIIIIZ)V method_3476 checkTransition - m (Lnet/minecraft/class_1058;)Ljava/util/List; method_3478 getSpans - f Ljava/util/List; field_4270 LAYERS -c net/minecraft/class_801$class_802 net/minecraft/client/renderer/model/ItemModelGenerator$Span - m ()I method_3485 getMax - m ()I method_3486 getAnchor - m (I)V method_3483 expand - m ()I method_3487 getMin - m ()Lnet/minecraft/class_801$class_803; method_3484 getFacing - f I field_4274 min - f I field_4273 max - f I field_4272 anchor - f Lnet/minecraft/class_801$class_803; field_4271 spanFacing -c net/minecraft/class_801$1 net/minecraft/client/renderer/model/ItemModelGenerator$1 - f [I field_4275 field_178390_a -c net/minecraft/class_801$class_803 net/minecraft/client/renderer/model/ItemModelGenerator$SpanFacing - m (Lnet/minecraft/class_801$class_803;)Z method_3492 access$000 - m ()[Lnet/minecraft/class_801$class_803; values values - m ()Lnet/minecraft/class_2350; method_3488 getFacing - m ()I method_3489 getYOffset - m ()I method_3490 getXOffset - m (Ljava/lang/String;)Lnet/minecraft/class_801$class_803; valueOf valueOf - m ()Z method_3491 isHorizontal - f I field_4279 yOffset - f Lnet/minecraft/class_2350; field_4276 facing - f I field_4280 xOffset - f Lnet/minecraft/class_801$class_803; field_4281 UP - f Lnet/minecraft/class_801$class_803; field_4283 RIGHT - f Lnet/minecraft/class_801$class_803; field_4278 LEFT - f [Lnet/minecraft/class_801$class_803; field_4282 $VALUES - f Lnet/minecraft/class_801$class_803; field_4277 DOWN -c net/minecraft/class_804 net/minecraft/client/renderer/model/ItemTransformVec3f - m (Ljava/lang/Object;)Z equals equals - m ()I hashCode hashCode - m (ZLnet/minecraft/class_4587;)V method_23075 apply - f Lnet/minecraft/class_1160; field_4285 scale - f Lnet/minecraft/class_1160; field_4287 rotation - f Lnet/minecraft/class_1160; field_4286 translation - f Lnet/minecraft/class_804; field_4284 DEFAULT -c net/minecraft/class_804$class_805 net/minecraft/client/renderer/model/ItemTransformVec3f$Deserializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_804; method_3494 deserialize - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lnet/minecraft/class_1160;)Lnet/minecraft/class_1160; method_3493 parseVector - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - f Lnet/minecraft/class_1160; field_4289 SCALE_DEFAULT - f Lnet/minecraft/class_1160; field_4288 ROTATION_DEFAULT - f Lnet/minecraft/class_1160; field_4290 TRANSLATION_DEFAULT -c net/minecraft/class_806 net/minecraft/client/renderer/model/ItemOverrideList - m (Ljava/util/function/Function;Lnet/minecraft/class_793;Lnet/minecraft/class_1088;Lnet/minecraft/class_799;)Lnet/minecraft/class_1087; method_3496 func_217649_a - m (Lnet/minecraft/class_1087;Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1087; method_3495 getOverrideModel - f Ljava/util/List; field_4291 overrideBakedModels - f Ljava/util/List; field_4293 overrides - f Lnet/minecraft/class_806; field_4292 EMPTY -c net/minecraft/class_807 net/minecraft/client/renderer/model/VariantList - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/util/List; method_3497 getVariantList - m ()I hashCode hashCode - m (Ljava/util/function/Function;Ljava/util/Set;Lnet/minecraft/class_2960;)Ljava/util/stream/Stream; method_3498 func_228831_a_ - f Ljava/util/List; field_4294 variantList -c net/minecraft/class_807$class_808 net/minecraft/client/renderer/model/VariantList$Deserializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_807; method_3499 deserialize -c net/minecraft/class_809 net/minecraft/client/renderer/model/ItemCameraTransforms - m (Lnet/minecraft/class_809$class_811;)Z method_3501 hasCustomTransform - m (Lnet/minecraft/class_809$class_811;)Lnet/minecraft/class_804; method_3503 getTransform - f Lnet/minecraft/class_804; field_4304 firstperson_right - f Lnet/minecraft/class_804; field_4311 head - f Lnet/minecraft/class_804; field_4303 ground - f Lnet/minecraft/class_804; field_4300 gui - f Lnet/minecraft/class_804; field_4306 fixed - f Lnet/minecraft/class_809; field_4301 DEFAULT - f Lnet/minecraft/class_804; field_4305 thirdperson_left - f Lnet/minecraft/class_804; field_4302 firstperson_left - f Lnet/minecraft/class_804; field_4307 thirdperson_right -c net/minecraft/class_809$1 net/minecraft/client/renderer/model/ItemCameraTransforms$1 - f [I field_4313 field_181684_a -c net/minecraft/class_809$class_810 net/minecraft/client/renderer/model/ItemCameraTransforms$Deserializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonObject;Ljava/lang/String;)Lnet/minecraft/class_804; method_3504 getTransform - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_809; method_3505 deserialize -c net/minecraft/class_809$class_811 net/minecraft/client/renderer/model/ItemCameraTransforms$TransformType - m ()Z method_29998 isFirstPerson - m (Ljava/lang/String;)Lnet/minecraft/class_809$class_811; valueOf valueOf - m ()[Lnet/minecraft/class_809$class_811; values values - f Lnet/minecraft/class_809$class_811; field_4322 FIRST_PERSON_RIGHT_HAND - f Lnet/minecraft/class_809$class_811; field_4316 HEAD - f Lnet/minecraft/class_809$class_811; field_4315 NONE - f Lnet/minecraft/class_809$class_811; field_4317 GUI - f Lnet/minecraft/class_809$class_811; field_4323 THIRD_PERSON_LEFT_HAND - f Lnet/minecraft/class_809$class_811; field_4318 GROUND - f Lnet/minecraft/class_809$class_811; field_4320 THIRD_PERSON_RIGHT_HAND - f Lnet/minecraft/class_809$class_811; field_4319 FIXED - f [Lnet/minecraft/class_809$class_811; field_4314 $VALUES - f Lnet/minecraft/class_809$class_811; field_4321 FIRST_PERSON_LEFT_HAND -c net/minecraft/class_812 net/minecraft/client/renderer/model/multipart/AndCondition - m (Ljava/util/List;Lnet/minecraft/class_2680;)Z method_3506 func_212481_a - m (Lnet/minecraft/class_2680;Ljava/util/function/Predicate;)Z method_3507 func_212480_a - m (Lnet/minecraft/class_2689;Lnet/minecraft/class_815;)Ljava/util/function/Predicate; method_3508 func_200683_a - f Ljava/lang/Iterable; field_4324 conditions -c net/minecraft/class_813 net/minecraft/client/renderer/model/Variant - m ()I method_3511 getWeight - m ()I hashCode hashCode - m ()Lnet/minecraft/class_2960; method_3510 getModelLocation - m ()Ljava/lang/String; toString toString - m (Ljava/lang/Object;)Z equals equals - f Lnet/minecraft/class_4590; field_4328 rotation - f Lnet/minecraft/class_2960; field_4326 modelLocation - f Z field_4327 uvLock - f I field_4325 weight -c net/minecraft/class_813$class_814 net/minecraft/client/renderer/model/Variant$Deserializer - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2960; method_3514 getStringModel - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1086; method_3515 parseModelRotation - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_813; method_3513 deserialize - m (Lcom/google/gson/JsonObject;)I method_3517 parseWeight - m (Lcom/google/gson/JsonObject;)Z method_3516 parseUvLock - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize -c net/minecraft/class_818 net/minecraft/client/renderer/model/multipart/PropertyValueCondition - m (Ljava/util/List;Lnet/minecraft/class_2680;)Z method_3524 func_200687_a - m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2769;Ljava/lang/String;)Ljava/util/function/Predicate; method_3525 makePropertyPredicate - m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2769;Ljava/lang/String;)Ljava/util/function/Predicate; method_3526 func_212482_b - m (Lnet/minecraft/class_2769;Ljava/util/Optional;Lnet/minecraft/class_2680;)Z method_3528 func_212483_a - m (Lnet/minecraft/class_2680;Ljava/util/function/Predicate;)Z method_3527 func_200685_a - m ()Ljava/lang/String; toString toString - f Ljava/lang/String; field_4333 key - f Ljava/lang/String; field_4332 value - f Lcom/google/common/base/Splitter; field_4334 SPLITTER -c net/minecraft/class_815 net/minecraft/client/renderer/model/multipart/ICondition - m (Lnet/minecraft/class_2680;)Z method_16809 func_223289_b_ - m (Lnet/minecraft/class_2689;)Ljava/util/function/Predicate; method_16810 func_223288_a_ - m (Lnet/minecraft/class_2689;)Ljava/util/function/Predicate; getPredicate getPredicate - m (Lnet/minecraft/class_2689;)Ljava/util/function/Predicate; method_16808 func_223290_b_ - m (Lnet/minecraft/class_2680;)Z method_16811 func_223287_a_ - f Lnet/minecraft/class_815; field_16900 TRUE - f Lnet/minecraft/class_815; field_16901 FALSE -c net/minecraft/class_821 net/minecraft/client/renderer/model/multipart/OrCondition - m (Lnet/minecraft/class_2689;Lnet/minecraft/class_815;)Ljava/util/function/Predicate; method_3540 func_200689_a - m (Ljava/util/List;Lnet/minecraft/class_2680;)Z method_3538 func_200690_a - m (Lnet/minecraft/class_2680;Ljava/util/function/Predicate;)Z method_3539 func_212488_a - f Ljava/lang/Iterable; field_4337 conditions -c net/minecraft/class_816 net/minecraft/client/renderer/model/multipart/Multipart - m ()Ljava/util/List; method_3519 getSelectors - m (Ljava/lang/Object;)Z equals equals - m ()I hashCode hashCode - m (Lnet/minecraft/class_819;)Ljava/util/stream/Stream; method_3518 func_209563_a - m (Ljava/util/function/Function;Ljava/util/Set;Lnet/minecraft/class_819;)Ljava/util/stream/Stream; method_3521 func_228832_a_ - m ()Ljava/util/Set; method_3520 getVariants - f Ljava/util/List; field_4330 selectors - f Lnet/minecraft/class_2689; field_4329 stateContainer -c net/minecraft/class_816$class_817 net/minecraft/client/renderer/model/multipart/Multipart$Deserializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_816; method_3523 deserialize - m (Lcom/google/gson/JsonDeserializationContext;Lcom/google/gson/JsonArray;)Ljava/util/List; method_3522 getSelectors - f Lnet/minecraft/class_790$class_791; field_4331 containerHolder -c net/minecraft/class_819 net/minecraft/client/renderer/model/multipart/Selector - m (Ljava/lang/Object;)Z equals equals - m ()I hashCode hashCode - m ()Lnet/minecraft/class_807; method_3529 getVariantList - m (Lnet/minecraft/class_2689;)Ljava/util/function/Predicate; method_3530 getPredicate - f Lnet/minecraft/class_815; field_4335 condition - f Lnet/minecraft/class_807; field_4336 variantList -c net/minecraft/class_819$class_820 net/minecraft/client/renderer/model/multipart/Selector$Deserializer - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_815; method_3537 func_200691_a - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_815; method_3536 getOrAndCondition - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_815; method_3531 getWhenCondition - m (Ljava/util/Map$Entry;)Lnet/minecraft/class_815; method_3533 makePropertyValue - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_815; method_3534 func_200692_b - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_819; method_3535 deserialize -c net/minecraft/class_823 net/minecraft/client/renderer/tileentity/BannerTileEntityRenderer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IILnet/minecraft/class_630;Lnet/minecraft/class_4730;ZLjava/util/List;Z)V method_23802 func_241717_a_ - m (Lnet/minecraft/class_2573;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3546 render - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IILnet/minecraft/class_630;Lnet/minecraft/class_4730;ZLjava/util/List;)V method_29999 func_230180_a_ - m ()Lnet/minecraft/class_630; method_24080 getModelRender - f Lnet/minecraft/class_630; field_20811 field_228834_c_ - f Lnet/minecraft/class_630; field_20812 field_228835_d_ - f Lnet/minecraft/class_630; field_20810 field_228833_a_ -c net/minecraft/class_825 net/minecraft/client/renderer/tileentity/BedTileEntityRenderer - m (Lnet/minecraft/class_2587;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3557 render - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_24188 func_228846_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ZLnet/minecraft/class_2350;Lnet/minecraft/class_4730;IIZ)V method_3558 func_228847_a_ - f Lnet/minecraft/class_630; field_20813 field_228843_a_ - f [Lnet/minecraft/class_630; field_20815 field_228845_d_ - f Lnet/minecraft/class_630; field_20814 field_228844_c_ -c net/minecraft/class_822 net/minecraft/client/renderer/tileentity/BeaconTileEntityRenderer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;FJII[F)V method_3543 renderBeamSegment - m (Lnet/minecraft/class_2580;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3541 render - m (Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;Lnet/minecraft/class_4588;FFFFIFFFF)V method_23076 addVertex - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_2960;FFJII[FFF)V method_3545 renderBeamSegment - m (Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;Lnet/minecraft/class_4588;FFFFIIFFFFFFFF)V method_22740 addQuad - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;FFFFIIFFFFFFFFFFFF)V method_22741 renderPart - m (Lnet/minecraft/class_2580;)Z method_3542 isGlobalRenderer - f Lnet/minecraft/class_2960; field_4338 TEXTURE_BEACON_BEAM -c net/minecraft/class_824 net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher - m (Lnet/minecraft/class_827;Lnet/minecraft/class_2586;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;)V method_23079 render - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1060;Lnet/minecraft/class_327;Lnet/minecraft/class_4184;Lnet/minecraft/class_239;)V method_3549 prepare - m (Lnet/minecraft/class_827;Lnet/minecraft/class_2586;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;)V method_23081 func_228857_b_ - m (Lnet/minecraft/class_827;Lnet/minecraft/class_2586;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_23080 func_228856_a_ - m (Lnet/minecraft/class_2586;Ljava/lang/Runnable;)V method_3554 runCrashReportable - m (Lnet/minecraft/class_2586;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;)V method_3555 renderTileEntity - m ()Lnet/minecraft/class_327; method_3556 getFontRenderer - m (Lnet/minecraft/class_2591;Lnet/minecraft/class_827;)V method_23078 register - m (Lnet/minecraft/class_2586;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)Z method_23077 renderItem - m (Lnet/minecraft/class_2586;)Lnet/minecraft/class_827; method_3550 getRenderer - m (Lnet/minecraft/class_1937;)V method_3551 setWorld - f Lnet/minecraft/class_327; field_4342 fontRenderer - f Ljava/util/Map; field_4345 renderers - f Lnet/minecraft/class_287; field_20988 fixedRenderBuffer - f Lnet/minecraft/class_1060; field_4347 textureManager - f Lnet/minecraft/class_1937; field_4348 world - f Lnet/minecraft/class_239; field_4350 cameraHitResult - f Lnet/minecraft/class_4184; field_4344 renderInfo - f Lnet/minecraft/class_824; field_4346 instance -c net/minecraft/class_3880 net/minecraft/client/renderer/tileentity/BellTileEntityRenderer - m (Lnet/minecraft/class_3721;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_17139 render - f Lnet/minecraft/class_630; field_20816 modelRenderer - f Lnet/minecraft/class_4730; field_17145 BELL_BODY_TEXTURE -c net/minecraft/class_4737 net/minecraft/client/renderer/tileentity/DualBrightnessCallback - m ()Lit/unimi/dsi/fastutil/ints/Int2IntFunction; method_24189 func_225537_b_ - m (Lnet/minecraft/class_2586;Lnet/minecraft/class_2586;I)I method_24193 func_228860_a_ - m (Lnet/minecraft/class_2586;)Lit/unimi/dsi/fastutil/ints/Int2IntFunction; method_24191 func_225538_a_ - m (I)I method_24194 func_228861_b_ - m (Lnet/minecraft/class_2586;Lnet/minecraft/class_2586;)Lit/unimi/dsi/fastutil/ints/Int2IntFunction; method_24192 func_225539_a_ - m (I)I method_24190 func_228859_a_ -c net/minecraft/class_827 net/minecraft/client/renderer/tileentity/TileEntityRenderer - m (Lnet/minecraft/class_2586;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3569 render - m (Lnet/minecraft/class_2586;)Z method_3563 isGlobalRenderer - f Lnet/minecraft/class_824; field_20989 renderDispatcher -c net/minecraft/class_826 net/minecraft/client/renderer/tileentity/ChestTileEntityRenderer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;FII)V method_22749 renderModels - f Lnet/minecraft/class_630; field_20820 rightLid - f Lnet/minecraft/class_630; field_21481 leftLatch - f Lnet/minecraft/class_630; field_20819 singleLatch - f Lnet/minecraft/class_630; field_20817 singleLid - f Lnet/minecraft/class_630; field_20821 rightBottom - f Lnet/minecraft/class_630; field_20822 rightLatch - f Lnet/minecraft/class_630; field_21480 leftBottom - f Z field_4365 isChristmas - f Lnet/minecraft/class_630; field_20818 singleBottom - f Lnet/minecraft/class_630; field_21479 leftLid -c net/minecraft/class_3941 net/minecraft/client/renderer/tileentity/CampfireTileEntityRenderer - m (Lnet/minecraft/class_3924;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_17581 render -c net/minecraft/class_829 net/minecraft/client/renderer/tileentity/ConduitTileEntityRenderer - m (Lnet/minecraft/class_2597;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_22750 render - f Lnet/minecraft/class_630; field_20824 field_228873_i_ - f Lnet/minecraft/class_4730; field_4373 WIND_TEXTURE - f Lnet/minecraft/class_630; field_20823 field_228872_h_ - f Lnet/minecraft/class_4730; field_4378 CAGE_TEXTURE - f Lnet/minecraft/class_4730; field_4379 OPEN_EYE_TEXTURE - f Lnet/minecraft/class_4730; field_4377 BASE_TEXTURE - f Lnet/minecraft/class_4730; field_4380 CLOSED_EYE_TEXTURE - f Lnet/minecraft/class_630; field_20825 field_228874_j_ - f Lnet/minecraft/class_4730; field_4371 VERTICAL_WIND_TEXTURE - f Lnet/minecraft/class_630; field_20826 field_228875_k_ -c net/minecraft/class_3942 net/minecraft/client/renderer/tileentity/LecternTileEntityRenderer - m (Lnet/minecraft/class_3722;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_17582 render - f Lnet/minecraft/class_557; field_17428 field_217656_d -c net/minecraft/class_828 net/minecraft/client/renderer/tileentity/EnchantmentTableTileEntityRenderer - m (Lnet/minecraft/class_2605;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3571 render - f Lnet/minecraft/class_4730; field_4369 TEXTURE_BOOK - f Lnet/minecraft/class_557; field_4370 modelBook -c net/minecraft/class_834 net/minecraft/client/renderer/tileentity/ShulkerBoxTileEntityRenderer - m (Lnet/minecraft/class_2627;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3574 render - f Lnet/minecraft/class_602; field_4387 model -c net/minecraft/class_835 net/minecraft/client/renderer/tileentity/PistonTileEntityRenderer - m (Lnet/minecraft/class_2669;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3576 render - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1937;ZI)V method_3575 func_228876_a_ - f Lnet/minecraft/class_776; field_4389 blockRenderer -c net/minecraft/class_836 net/minecraft/client/renderer/tileentity/SkullTileEntityRenderer - m (Lnet/minecraft/class_2631;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3577 render - m (Lnet/minecraft/class_2484$class_2485;Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/class_1921; method_3578 getRenderType - m (Ljava/util/HashMap;)V method_3580 func_209263_a - m (Ljava/util/HashMap;)V method_3579 func_209262_b - m (Lnet/minecraft/class_2350;FLnet/minecraft/class_2484$class_2485;Lcom/mojang/authlib/GameProfile;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3581 render - f Ljava/util/Map; field_4391 MODELS - f Ljava/util/Map; field_4390 SKINS -c net/minecraft/class_837 net/minecraft/client/renderer/tileentity/SignTileEntityRenderer - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4730; method_3584 getMaterial - m (Lnet/minecraft/class_327;Lnet/minecraft/class_2561;)Lnet/minecraft/class_5481; method_3583 func_243502_a - m (Lnet/minecraft/class_2625;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_23083 render - f Lnet/minecraft/class_837$class_4702; field_21529 model -c net/minecraft/class_837$class_4702 net/minecraft/client/renderer/tileentity/SignTileEntityRenderer$SignModel - f Lnet/minecraft/class_630; field_21531 signStick - f Lnet/minecraft/class_630; field_21530 signBoard -c net/minecraft/class_838 net/minecraft/client/renderer/tileentity/StructureTileEntityRenderer - m (Lnet/minecraft/class_2633;)Z method_3588 isGlobalRenderer - m (Lnet/minecraft/class_2633;Lnet/minecraft/class_4588;Lnet/minecraft/class_2338;ZLnet/minecraft/class_4587;)V method_3585 func_228880_a_ - m (Lnet/minecraft/class_2633;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3587 render -c net/minecraft/class_838$1 net/minecraft/client/renderer/tileentity/StructureTileEntityRenderer$1 - f [I field_4401 field_190059_b - f [I field_4402 field_190058_a -c net/minecraft/class_839 net/minecraft/client/renderer/tileentity/MobSpawnerTileEntityRenderer - m (Lnet/minecraft/class_2636;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3589 render -c net/minecraft/class_840 net/minecraft/client/renderer/tileentity/EndPortalTileEntityRenderer - m ()F method_3594 getOffset - m (Lnet/minecraft/class_2640;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_3591 render - m (I)Lnet/minecraft/class_1921; method_24195 func_228882_a_ - m (Lnet/minecraft/class_2640;FFLnet/minecraft/class_1159;Lnet/minecraft/class_4588;)V method_23084 renderCube - m (Lnet/minecraft/class_2640;Lnet/minecraft/class_1159;Lnet/minecraft/class_4588;FFFFFFFFFFFLnet/minecraft/class_2350;)V method_23085 renderFace - m (D)I method_3592 getPasses - f Lnet/minecraft/class_2960; field_4406 END_SKY_TEXTURE - f Lnet/minecraft/class_2960; field_4407 END_PORTAL_TEXTURE - f Ljava/util/List; field_21732 RENDER_TYPES - f Ljava/util/Random; field_4405 RANDOM -c net/minecraft/class_841 net/minecraft/client/renderer/tileentity/EndGatewayTileEntityRenderer - m (Lnet/minecraft/class_2643;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;II)V method_22751 render - f Lnet/minecraft/class_2960; field_4409 END_GATEWAY_BEAM_TEXTURE -c net/minecraft/class_846 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher - m (Lnet/minecraft/class_846$class_851$class_4577;Lnet/minecraft/class_750;Ljava/lang/Void;)Ljava/util/concurrent/CompletionStage; method_22757 func_228901_a_ - m (Lnet/minecraft/class_846;)Lnet/minecraft/class_750; method_22762 func_228907_c_ - m (Lnet/minecraft/class_287;Lnet/minecraft/class_291;)Ljava/util/concurrent/CompletableFuture; method_3635 uploadChunkLayer - m (Lnet/minecraft/class_287;Lnet/minecraft/class_291;)Ljava/util/concurrent/CompletableFuture; method_22759 uploadChunkLayerRaw - m ()Ljava/lang/String; method_3622 getDebugInfo - m (Lnet/minecraft/class_846$class_4690;Lnet/minecraft/class_750;)V method_23618 func_228899_a_ - m ()V method_22765 func_228911_k_ - m ()V method_22764 func_228910_j_ - m (Lnet/minecraft/class_846;)Lnet/minecraft/class_761; method_22760 func_228906_b_ - m (Lnet/minecraft/class_846$class_851$class_4577;)V method_23086 func_228905_b_ - m (Lnet/minecraft/class_846$class_851$class_4577;)V method_22756 schedule - m (Lnet/minecraft/class_846$class_851;)V method_3627 rebuildChunk - m (Lnet/minecraft/class_846;)Lnet/minecraft/class_1937; method_22758 func_228903_a_ - m (Lnet/minecraft/class_243;)V method_19419 setRenderPosition - m ()Z method_22761 runChunkUploads - m ()V method_3632 stopChunkUpdates - m ()Lnet/minecraft/class_243; method_19420 getRenderPosition - m ()V method_3633 clearChunkUpdates - m ()V method_22763 runTask - m ()Z method_3630 hasNoChunkUpdates - m ()V method_3619 stopWorkerThreads - m (Lnet/minecraft/class_287;Lnet/minecraft/class_291;Ljava/lang/Void;)Ljava/util/concurrent/CompletionStage; method_22753 func_228897_a_ - m (Lnet/minecraft/class_750;Lnet/minecraft/class_846$class_4690;Ljava/lang/Throwable;)V method_22755 func_228898_a_ - m (Lnet/minecraft/class_1937;)V method_22752 setWorld - f Ljava/util/Queue; field_4443 uploadTasks - f Lorg/apache/logging/log4j/Logger; field_4445 LOGGER - f Ljava/util/Queue; field_20827 freeBuilders - f Ljava/util/PriorityQueue; field_4435 renderTasks - f I field_20993 countFreeBuilders - f I field_20992 countRenderTasks - f Lnet/minecraft/class_1937; field_20831 world - f Lnet/minecraft/class_243; field_18766 renderPosition - f Lnet/minecraft/class_761; field_20832 worldRenderer - f Lnet/minecraft/class_3846; field_20829 delegatedTaskExecutor - f Ljava/util/concurrent/Executor; field_20830 executor - f Lnet/minecraft/class_750; field_20828 fixedBuilder -c net/minecraft/class_846$class_849 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$CompiledChunk - m (Lnet/minecraft/class_846$class_849;)Lnet/minecraft/class_287$class_288; method_22772 func_228919_d_ - m ()Ljava/util/List; method_3642 getTileEntities - m (Lnet/minecraft/class_1921;)Z method_3641 isLayerEmpty - m ()Z method_3645 isEmpty - m (Lnet/minecraft/class_846$class_849;Lnet/minecraft/class_287$class_288;)Lnet/minecraft/class_287$class_288; method_22767 func_228914_a_ - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Z method_3650 isVisible - m (Lnet/minecraft/class_846$class_849;Lnet/minecraft/class_854;)Lnet/minecraft/class_854; method_22768 func_228915_a_ - m (Lnet/minecraft/class_846$class_849;Z)Z method_22769 func_228916_a_ - m (Lnet/minecraft/class_846$class_849;)Ljava/util/List; method_22770 func_228918_c_ - m (Lnet/minecraft/class_846$class_849;)Ljava/util/Set; method_22766 func_228913_a_ - m (Lnet/minecraft/class_846$class_849;)Ljava/util/Set; method_22771 func_228917_b_ - f Ljava/util/Set; field_4450 layersUsed - f Lnet/minecraft/class_846$class_849; field_4451 DUMMY - f Ljava/util/Set; field_4452 layersStarted - f Ljava/util/List; field_4456 tileEntities - f Z field_4454 empty - f Lnet/minecraft/class_287$class_288; field_4453 state - f Lnet/minecraft/class_854; field_4455 setVisibility -c net/minecraft/class_846$class_849$1 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$CompiledChunk$1 -c net/minecraft/class_846$class_4690 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkTaskResult - m ()[Lnet/minecraft/class_846$class_4690; values values - m (Ljava/lang/String;)Lnet/minecraft/class_846$class_4690; valueOf valueOf - f Lnet/minecraft/class_846$class_4690; field_21439 CANCELLED - f [Lnet/minecraft/class_846$class_4690; field_21440 $VALUES - f Lnet/minecraft/class_846$class_4690; field_21438 SUCCESSFUL -c net/minecraft/class_846$class_851 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkRender - m ()Lnet/minecraft/class_846$class_849; method_3677 getCompiledChunk - m ()Lnet/minecraft/class_2338; method_3670 getPosition - m (Lnet/minecraft/class_846;)V method_22777 rebuildChunkLater - m (I)Z method_3671 setFrameIndex - m (III)V method_3653 setPosition - m (Lnet/minecraft/class_1921;Lnet/minecraft/class_846;)Z method_22773 resortTransparency - m (Lnet/minecraft/class_846$class_851;Lnet/minecraft/class_287;)V method_22775 func_228927_a_ - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2338; method_3676 getBlockPosOffset16 - m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_291; method_3656 getVertexBuffer - m ()Lnet/minecraft/class_846$class_851$class_4577; method_3674 makeCompileTaskChunk - m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_291; method_22779 func_228933_b_ - m ([Lnet/minecraft/class_2338$class_2339;)V method_3660 func_228932_a_ - m (Z)V method_3654 setNeedsUpdate - m (Lnet/minecraft/class_2338;)Z method_3651 isChunkLoaded - m ()D method_3668 getDistanceSq - m ()Z method_3672 needsUpdate - m ()Z method_3661 needsImmediateUpdate - m ()V method_3663 stopTasks - m ()V method_22781 rebuildChunk - m ()V method_3675 stopCompileTask - m (Lnet/minecraft/class_287;)V method_3655 beginLayer - m (Ljava/util/Set;)V method_22778 updateGlobalTileEntities - m ()Z method_3673 shouldStayLoaded - m ()V method_3659 deleteGlResources - m (Lnet/minecraft/class_846$class_851;Ljava/util/Set;)V method_22776 func_228928_a_ - m (Lnet/minecraft/class_1921;)Lnet/minecraft/class_1921; method_22780 func_228934_c_ - m ()V method_3662 clearNeedsUpdate - m (Lnet/minecraft/class_846$class_851;)Lnet/minecraft/class_2338$class_2339; method_22774 func_228926_a_ - f Lnet/minecraft/class_2338$class_2339; field_4467 position - f Lnet/minecraft/class_846$class_851$class_4579; field_4461 lastResortTransparencyTask - f I field_4471 frameIndex - f Ljava/util/concurrent/atomic/AtomicReference; field_4459 compiledChunk - f [Lnet/minecraft/class_2338$class_2339; field_4472 mapEnumFacing - f Ljava/util/Map; field_4462 vertexBuffers - f Z field_4463 needsImmediateUpdate - f Ljava/util/Set; field_4457 globalTileEntities - f Lnet/minecraft/class_846$class_851$class_4578; field_20834 lastRebuildTask - f Lnet/minecraft/class_238; field_4458 boundingBox - f Lnet/minecraft/class_846; field_20833 field_228920_c_ - f Z field_4464 needsUpdate -c net/minecraft/class_846$class_851$class_4578 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkRender$RebuildTask - m (Ljava/util/List;Lnet/minecraft/class_750;Lnet/minecraft/class_1921;)V method_22788 func_228943_a_ - m (Lnet/minecraft/class_846$class_849;Ljava/util/Set;Lnet/minecraft/class_2586;)V method_23087 handleTileEntity - m (FFFLnet/minecraft/class_846$class_849;Lnet/minecraft/class_750;)Ljava/util/Set; method_22785 compile - m (Lnet/minecraft/class_846$class_849;Ljava/util/List;Ljava/lang/Throwable;)Lnet/minecraft/class_846$class_4690; method_23619 func_228941_a_ - f Lnet/minecraft/class_853; field_20838 chunkRenderCache - f Lnet/minecraft/class_846$class_851; field_20839 field_228939_e_ -c net/minecraft/class_846$class_851$class_4579 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkRender$SortTransparencyTask - m (Lnet/minecraft/class_846$class_4690;Ljava/lang/Throwable;)Lnet/minecraft/class_846$class_4690; method_22789 func_228946_a_ - m (Ljava/lang/Void;)Lnet/minecraft/class_846$class_4690; method_22790 func_228947_a_ - f Lnet/minecraft/class_846$class_851; field_20840 field_228944_d_ - f Lnet/minecraft/class_846$class_849; field_20841 sortCompiledChunk -c net/minecraft/class_846$class_851$class_4577 net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkRender$ChunkRenderTask - m (Lnet/minecraft/class_846$class_851$class_4577;)I method_22784 compareTo - m (Ljava/lang/Object;)I compareTo compareTo - m (Lnet/minecraft/class_750;)Ljava/util/concurrent/CompletableFuture; method_22783 execute - m ()V method_22782 cancel - f Lnet/minecraft/class_846$class_851; field_20837 field_228937_c_ - f Ljava/util/concurrent/atomic/AtomicBoolean; field_20836 finished - f D field_20835 distanceSq -c net/minecraft/class_852 net/minecraft/client/renderer/chunk/VisGraph - m (Lnet/minecraft/class_2338;)V method_3682 setOpaqueCube - m ([I)V method_3680 func_209264_a - m (ILnet/minecraft/class_2350;)I method_3685 getNeighborIndexAtFace - m (Lnet/minecraft/class_2338;)I method_3683 getIndex - m ()Lnet/minecraft/class_854; method_3679 computeVisibility - m (ILjava/util/Set;)V method_3684 addEdges - m (I)Ljava/util/Set; method_3687 floodFill - m (III)I method_3681 getIndex - f [I field_4474 INDEX_OF_EDGES - f I field_4473 empty - f Ljava/util/BitSet; field_4478 bitSet - f I field_4475 DY - f [Lnet/minecraft/class_2350; field_4479 DIRECTIONS - f I field_4476 DZ - f I field_4477 DX -c net/minecraft/class_852$1 net/minecraft/client/renderer/chunk/VisGraph$1 - f [I field_4480 field_178617_a -c net/minecraft/class_853 net/minecraft/client/renderer/chunk/ChunkRenderCache - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;II[Lnet/minecraft/class_2818;)Z method_30000 func_241718_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2818$class_2819;)Lnet/minecraft/class_2586; method_3688 getTileEntity - m (III)I method_3690 getIndex - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;I)Lnet/minecraft/class_853; method_3689 generateCache - m (Lnet/minecraft/class_2338;)I method_3691 getIndex - f I field_4488 chunkStartX - f Lnet/minecraft/class_2338; field_4481 cacheStartPos - f I field_4487 chunkStartZ - f I field_4482 cacheSizeZ - f [Lnet/minecraft/class_2680; field_4489 blockStates - f [Lnet/minecraft/class_3610; field_4485 fluidStates - f [[Lnet/minecraft/class_2818; field_4483 chunks - f I field_4484 cacheSizeY - f I field_4486 cacheSizeX - f Lnet/minecraft/class_1937; field_4490 world -c net/minecraft/class_854 net/minecraft/client/renderer/chunk/SetVisibility - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Z)V method_3692 setVisible - m (Ljava/util/Set;)V method_3693 setManyVisible - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Z method_3695 isVisible - m ()Ljava/lang/String; toString toString - m (Z)V method_3694 setAllVisible - f Ljava/util/BitSet; field_4492 bitSet - f I field_4491 COUNT_FACES -c net/minecraft/class_4604 net/minecraft/client/renderer/culling/ClippingHelper - m (DDD)V method_23088 setCameraPosition - m (Lnet/minecraft/class_1159;IIII)V method_23091 setFrustumPlane - m (Lnet/minecraft/class_1159;Lnet/minecraft/class_1159;)V method_23092 calculateFrustum - m (DDDDDD)Z method_23089 isBoxInFrustum - m (Lnet/minecraft/class_238;)Z method_23093 isBoundingBoxInFrustum - m (FFFFFF)Z method_23090 isBoxInFrustumRaw - f [Lnet/minecraft/class_1162; field_20994 frustum - f D field_20997 cameraZ - f D field_20996 cameraY - f D field_20995 cameraX -c net/minecraft/class_4207 net/minecraft/client/renderer/debug/PointOfInterestDebugRenderer - m (Lnet/minecraft/class_2338;)Ljava/util/Collection; method_23142 func_239340_c_ - m (Lnet/minecraft/class_2338;)Ljava/util/Collection; method_29386 func_239343_d_ - m (Lnet/minecraft/class_4207$class_4232;)V method_19432 func_217692_a - m (Lnet/minecraft/class_4207$class_4232;)Z method_23147 func_217694_d - m (Lnet/minecraft/class_4207$class_4232;)Z method_23145 func_217703_c - m (Ljava/lang/String;Lnet/minecraft/class_2338;II)V method_23134 func_222923_a - m (DDDLnet/minecraft/class_4207$class_4232;)V method_23148 func_222924_a_ - m (Lnet/minecraft/class_2374;ILjava/lang/String;IF)V method_23132 func_217693_a - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4207$class_4232;)Z method_23127 func_239336_b_ - m ()Ljava/util/Map; method_23144 func_222915_d - m (Lnet/minecraft/class_2338;)Ljava/util/List; method_30112 func_241729_e_ - m (Lnet/minecraft/class_4207$class_4233;)V method_19701 func_217691_a - m (Lnet/minecraft/class_1297;)V method_23126 func_239317_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4207$class_4232;)Z method_29384 func_239323_a_ - m (Lnet/minecraft/class_2338;Ljava/util/List;)V method_23131 func_222921_a - m (Ljava/lang/String;Lnet/minecraft/class_4207$class_4233;II)V method_23133 func_217695_a - m ()V method_24805 func_239331_b_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4207$class_4233;)V method_23128 func_239324_a_ - m (Lnet/minecraft/class_4207$class_4233;)V method_23137 func_217705_b - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/util/List;)V method_23129 func_239325_a_ - m (Lnet/minecraft/class_2338;)V method_23138 func_217699_b - m (Lnet/minecraft/class_2338;)V method_19434 func_217698_a - m (Ljava/util/Map$Entry;)Z method_24804 func_239330_a_ - m (Lnet/minecraft/class_2338;I)V method_19702 func_217706_a - m ()V method_23146 func_217710_d - m (DDD)V method_23135 func_229035_a_ - m (Lnet/minecraft/class_4207$class_4233;)Ljava/util/Set; method_29385 func_239342_d_ - m (Lnet/minecraft/class_4207$class_4232;DDD)V method_23140 func_229038_b_ - m (Lnet/minecraft/class_4207$class_4233;)Ljava/util/Set; method_23141 func_217696_c - m (Lnet/minecraft/class_4207$class_4232;DDD)V method_23136 func_229037_a_ - f Lorg/apache/logging/log4j/Logger; field_18920 LOGGER - f Ljava/util/Map; field_18921 field_239313_d_ - f Ljava/util/Map; field_18787 field_217713_c - f Lnet/minecraft/class_310; field_18786 client - f Ljava/util/UUID; field_18922 field_217716_f -c net/minecraft/class_4207$class_4232 net/minecraft/client/renderer/debug/PointOfInterestDebugRenderer$BrainInfo - m (Lnet/minecraft/class_4207$class_4232;Lnet/minecraft/class_2338;)Z method_23150 func_239364_b_ - m ()Ljava/util/UUID; method_23149 func_217746_a - m (Lnet/minecraft/class_4207$class_4232;Lnet/minecraft/class_2338;)Z method_29387 func_239362_a_ - m (Lnet/minecraft/class_2338;)Z method_23151 func_217744_a - m (Lnet/minecraft/class_2338;)Z method_29388 func_239365_b_ - f Ljava/util/List; field_18928 field_217752_f - f I field_18924 field_217748_b - f Ljava/util/List; field_18927 field_217751_e - f Ljava/util/List; field_19375 field_223457_m - f Ljava/util/List; field_19374 field_217753_g - f Ljava/util/Set; field_25287 field_239360_q_ - f Ljava/util/Set; field_18930 field_217754_h - f Ljava/lang/String; field_19372 field_223455_g - f Z field_19373 field_223456_i - f Lnet/minecraft/class_11; field_19330 field_222930_g - f F field_22407 field_239350_g_ - f Lnet/minecraft/class_2374; field_18926 field_217750_d - f F field_22406 field_239349_f_ - f I field_19329 field_222929_e - f Ljava/lang/String; field_19328 field_217749_c - f Ljava/util/UUID; field_18923 field_217747_a - f Ljava/lang/String; field_18925 field_222928_d -c net/minecraft/class_4207$class_4233 net/minecraft/client/renderer/debug/PointOfInterestDebugRenderer$POIInfo - f Ljava/lang/String; field_18932 field_217756_b - f I field_18933 field_217757_c - f Lnet/minecraft/class_2338; field_18931 field_217755_a -c net/minecraft/class_4703 net/minecraft/client/renderer/debug/BeeDebugRenderer - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4703$class_5243;)Z method_23810 func_228970_a_ - m (Lnet/minecraft/class_4703$class_5243;)V method_23824 func_228988_c_ - m (Ljava/util/Map;Lnet/minecraft/class_4703$class_5243;)V method_23818 func_241722_a_ - m (Lnet/minecraft/class_4703$class_5243;)Z method_23829 func_228992_e_ - m (Ljava/util/Map;Lnet/minecraft/class_4703$class_5243;)V method_24082 func_228985_b_ - m (Lnet/minecraft/class_4703$class_5243;)V method_23831 func_228994_f_ - m (Lnet/minecraft/class_4703$class_5243;Lnet/minecraft/class_2338;)Ljava/lang/String; method_23806 func_228965_a_ - m ()Ljava/util/Map; method_23830 func_228996_h_ - m (Lnet/minecraft/class_4703$class_5243;)Z method_23827 func_228990_d_ - m (Ljava/util/Map;Lnet/minecraft/class_4703$class_5243;Lnet/minecraft/class_2338;)V method_24083 func_228986_a_ - m (Ljava/util/Map$Entry;)Z method_23953 func_228984_b_ - m ()Ljava/util/Map; method_24084 func_228991_e_ - m (Lnet/minecraft/class_2338;)V method_23808 func_228968_a_ - m (Ljava/util/Map$Entry;)V method_23817 func_228978_a_ - m (Lnet/minecraft/class_4703$class_4705;)V method_23807 func_228966_a_ - m ()V method_23826 func_228993_f_ - m (Lnet/minecraft/class_1297;)V method_23804 func_228963_a_ - m (Lnet/minecraft/class_2338;Ljava/util/List;)V method_23813 func_228972_a_ - m (Lnet/minecraft/class_2338;)Ljava/util/Set; method_30111 func_241727_e_ - m (Lnet/minecraft/class_2338;)Ljava/util/List; method_30109 func_241725_c_ - m ()V method_23832 func_228997_i_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/util/List;)V method_23812 func_228971_a_ - m (Lnet/minecraft/class_2338;FFFFF)V method_23809 func_228969_a_ - m (Ljava/lang/String;Lnet/minecraft/class_4703$class_4705;II)V method_23815 func_228975_a_ - m (Lnet/minecraft/class_4703$class_4705;Ljava/util/Collection;)V method_23821 func_228967_a_ - m (JLjava/util/Map$Entry;)Z method_23803 func_228962_a_ - m (Lnet/minecraft/class_2374;ILjava/lang/String;IF)V method_23814 func_228974_a_ - m ()Lnet/minecraft/class_4184; method_23828 func_228995_g_ - m (Lnet/minecraft/class_2338;)Ljava/util/Collection; method_23822 func_228983_b_ - m (Ljava/util/Collection;)Ljava/lang/String; method_23825 func_228977_a_ - m (Lnet/minecraft/class_2338;Ljava/util/Map;Lnet/minecraft/class_4703$class_4705;)V method_23811 func_228973_a_ - m ()V method_23823 func_228989_d_ - m (Lnet/minecraft/class_4703$class_5243;)V method_23820 func_228982_b_ - m (Ljava/lang/String;Lnet/minecraft/class_2338;II)V method_23816 func_228976_a_ - m (Lnet/minecraft/class_4703$class_5243;)V method_23805 func_228964_a_ - m (Lnet/minecraft/class_2338;)Ljava/util/Set; method_30110 func_241726_d_ - m ()V method_23819 func_228987_c_ - m ()V method_23952 func_228981_b_ - f Lnet/minecraft/class_310; field_21532 field_228958_a_ - f Ljava/util/Map; field_21534 field_228960_c_ - f Ljava/util/Map; field_21533 field_228959_b_ - f Ljava/util/UUID; field_21535 field_228961_d_ -c net/minecraft/class_4703$class_4705 net/minecraft/client/renderer/debug/BeeDebugRenderer$Hive - f J field_21546 field_229016_f_ - f Ljava/lang/String; field_21544 field_229012_b_ - f Z field_21626 field_229015_e_ - f I field_21625 field_229014_d_ - f Lnet/minecraft/class_2338; field_21543 field_229011_a_ - f I field_21545 field_229013_c_ -c net/minecraft/class_4703$class_5243 net/minecraft/client/renderer/debug/BeeDebugRenderer$Bee - m ()Z method_27651 func_229010_c_ - m (Lnet/minecraft/class_2338;)Z method_27649 func_229008_a_ - m ()Ljava/util/UUID; method_27648 func_229007_a_ - m ()Ljava/lang/String; toString toString - m ()Ljava/lang/String; method_27650 func_229009_b_ - f Ljava/util/UUID; field_24322 field_228998_a_ - f Ljava/util/List; field_24329 field_229005_h_ - f I field_24323 field_228999_b_ - f Ljava/util/Set; field_24330 field_229006_i_ - f Lnet/minecraft/class_2338; field_24326 field_229002_e_ - f Lnet/minecraft/class_11; field_24325 field_229001_d_ - f Lnet/minecraft/class_2338; field_24327 field_229003_f_ - f Lnet/minecraft/class_2374; field_24324 field_229000_c_ - f I field_24328 field_229004_g_ -c net/minecraft/class_862 net/minecraft/client/renderer/debug/ChunkBorderDebugRenderer - f Lnet/minecraft/class_310; field_4516 minecraft -c net/minecraft/class_859 net/minecraft/client/renderer/debug/CaveDebugRenderer - m (Lnet/minecraft/class_2338;Ljava/util/List;Ljava/util/List;)V method_3704 addCave - f Ljava/util/List; field_4506 caves - f Ljava/util/Map; field_4508 sizes - f Ljava/util/Map; field_4507 subCaves -c net/minecraft/class_865 net/minecraft/client/renderer/debug/CollisionBoxDebugRenderer - m (Lnet/minecraft/class_1297;)Z method_27036 func_239370_a_ - f Lnet/minecraft/class_310; field_4540 minecraft - f Ljava/util/List; field_4542 collisionData - f D field_4541 lastUpdate -c net/minecraft/class_860 net/minecraft/client/renderer/debug/ChunkInfoDebugRenderer - m (Lnet/minecraft/class_860;)Lnet/minecraft/class_310; method_23094 func_217677_a - f I field_4511 field_217680_c - f Lnet/minecraft/class_860$class_4605; field_20998 field_217681_d - f D field_4510 field_217679_b - f Lnet/minecraft/class_310; field_4509 client -c net/minecraft/class_860$class_4605 net/minecraft/client/renderer/debug/ChunkInfoDebugRenderer$Entry - m (Lnet/minecraft/class_860$class_4605;)Ljava/util/concurrent/CompletableFuture; method_23095 func_217718_a - m (Lnet/minecraft/class_860$class_4605;)Ljava/util/Map; method_23097 func_217717_b - m (Lnet/minecraft/class_1132;Lnet/minecraft/class_5321;II)Ljava/util/Map; method_23096 func_239369_a_ - f Ljava/util/Map; field_21000 field_217721_b - f Lnet/minecraft/class_860; field_20999 field_217720_a - f Ljava/util/concurrent/CompletableFuture; field_21001 field_217722_c -c net/minecraft/class_860$1 net/minecraft/client/renderer/debug/ChunkInfoDebugRenderer$1 -c net/minecraft/class_863 net/minecraft/client/renderer/debug/DebugRenderer - m (DDDDDDFFFF)V method_23098 renderBox - m ()V method_20413 clear - m (Ljava/lang/String;DDDI)V method_23105 renderText - m (Lnet/minecraft/class_1297;I)Ljava/util/Optional; method_23101 getTargetEntity - m (Ljava/lang/String;IIII)V method_23108 renderText - m (Ljava/lang/String;DDDIFZFZ)V method_23107 renderText - m (Lnet/minecraft/class_2338;FFFFF)V method_23103 renderBox - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597$class_4598;DDD)V method_23099 render - m (Ljava/lang/String;DDDIF)V method_23106 renderText - m (Lnet/minecraft/class_1297;)Z method_23100 func_217727_a - m (Lnet/minecraft/class_238;FFFF)V method_23102 renderBox - m ()Z method_3713 toggleChunkBorders - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;FFFF)V method_23104 renderBox - f Lnet/minecraft/class_868; field_4523 pathfinding - f Lnet/minecraft/class_859; field_4529 cave - f Lnet/minecraft/class_863$class_864; field_4517 solidFace - f Lnet/minecraft/class_863$class_864; field_4536 light - f Lnet/minecraft/class_863$class_864; field_4537 worldGenAttempts - f Lnet/minecraft/class_4205; field_18778 field_217742_n - f Lnet/minecraft/class_4207; field_18777 field_239371_m_ - f Lnet/minecraft/class_870; field_4539 structure - f Lnet/minecraft/class_863$class_864; field_4533 field_217740_l - f Z field_4531 chunkBorderEnabled - f Lnet/minecraft/class_863$class_864; field_4534 collisionBox - f Lnet/minecraft/class_863$class_864; field_4535 neighborsUpdate - f Lnet/minecraft/class_4703; field_21547 field_229017_n_ - f Lnet/minecraft/class_4503; field_20519 field_229018_q_ - f Lnet/minecraft/class_863$class_864; field_4538 heightMap - f Lnet/minecraft/class_4841; field_22408 field_239372_n_ - f Lnet/minecraft/class_4304; field_19325 field_222927_n - f Lnet/minecraft/class_863$class_864; field_4532 chunkBorder - f Lnet/minecraft/class_863$class_864; field_4528 water -c net/minecraft/class_863$class_864 net/minecraft/client/renderer/debug/DebugRenderer$IDebugRenderer - m ()V method_20414 clear - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;DDD)V method_23109 render -c net/minecraft/class_4205 net/minecraft/client/renderer/debug/EntityAIDebugRenderer - m (Lnet/minecraft/class_2338;Ljava/lang/Integer;Ljava/util/List;)V method_23116 func_217683_a - m (ILjava/util/List;)V method_19430 func_217682_a - f Ljava/util/Map; field_18781 field_217685_b - f Lnet/minecraft/class_310; field_18780 client -c net/minecraft/class_4205$class_4206 net/minecraft/client/renderer/debug/EntityAIDebugRenderer$Entry - f Lnet/minecraft/class_2338; field_18782 field_217723_a - f Z field_18785 field_217726_d - f Ljava/lang/String; field_18784 field_217725_c - f I field_18783 field_217724_b -c net/minecraft/class_4503 net/minecraft/client/renderer/debug/GameTestDebugRenderer - m (JLjava/util/Map$Entry;)Z method_23110 func_229021_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4503$class_4504;)V method_23111 func_229023_a_ - m (Lnet/minecraft/class_2338;ILjava/lang/String;I)V method_22123 func_229022_a_ - f Ljava/util/Map; field_20520 field_229020_a_ -c net/minecraft/class_4503$class_4504 net/minecraft/client/renderer/debug/GameTestDebugRenderer$Marker - m ()F method_23112 func_229027_a_ - m ()F method_23115 func_229030_d_ - m ()F method_23114 func_229029_c_ - m ()F method_23113 func_229028_b_ - f J field_20523 field_229026_c_ - f Ljava/lang/String; field_20522 field_229025_b_ - f I field_20521 field_229024_a_ -c net/minecraft/class_866 net/minecraft/client/renderer/debug/LightDebugRenderer - f Lnet/minecraft/class_310; field_4612 minecraft -c net/minecraft/class_867 net/minecraft/client/renderer/debug/HeightMapDebugRenderer - m (Lnet/minecraft/class_2902$class_2903;)Lnet/minecraft/class_1160; method_27037 func_239373_a_ - f Lnet/minecraft/class_310; field_4613 minecraft -c net/minecraft/class_867$1 net/minecraft/client/renderer/debug/HeightMapDebugRenderer$1 - f [I field_23778 field_239374_a_ -c net/minecraft/class_868 net/minecraft/client/renderer/debug/PathfindingDebugRenderer - m (Lnet/minecraft/class_11;DDD)V method_23117 func_229031_a_ - m (Lnet/minecraft/class_2338;DDD)F method_23119 func_229033_a_ - m (Lnet/minecraft/class_11;FZZDDD)V method_23118 func_229032_a_ - m (Lnet/minecraft/class_11;FZZDDD)V method_23121 func_229034_b_ - m (ILnet/minecraft/class_11;F)V method_3869 addPath - f Ljava/util/Map; field_4616 pathMap - f Ljava/util/Map; field_4617 pathMaxDistance - f Ljava/util/Map; field_4615 creationMap -c net/minecraft/class_869 net/minecraft/client/renderer/debug/NeighborsUpdateDebugRenderer - m (JLnet/minecraft/class_2338;)V method_3870 addUpdate - m (Ljava/lang/Long;)Ljava/util/Map; method_30113 func_241730_a_ - f Ljava/util/Map; field_4623 lastUpdate - f Lnet/minecraft/class_310; field_4622 minecraft -c net/minecraft/class_871 net/minecraft/client/renderer/debug/SolidFaceDebugRenderer - f Lnet/minecraft/class_310; field_4628 minecraft -c net/minecraft/class_4304 net/minecraft/client/renderer/debug/RaidDebugRenderer - m (Lnet/minecraft/class_2338;)V method_23122 func_222903_a - m ()Lnet/minecraft/class_4184; method_23125 func_222904_c - m (Ljava/lang/String;Lnet/minecraft/class_2338;I)V method_23123 func_222905_a - m (Ljava/util/Collection;)V method_20561 func_222906_a - f Ljava/util/Collection; field_19327 field_222909_b - f Lnet/minecraft/class_310; field_19326 client -c net/minecraft/class_4841 net/minecraft/client/renderer/debug/VillageSectionsDebugRender - m (Lnet/minecraft/class_4076;)V method_24808 func_239378_a_ - m (DDD)V method_24806 func_239376_a_ - m (Lnet/minecraft/class_4076;)V method_24810 func_239380_c_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4076;)V method_24807 func_239377_a_ - m (Lnet/minecraft/class_4076;)V method_24809 func_239379_b_ - f Ljava/util/Set; field_22409 field_239375_a_ -c net/minecraft/class_870 net/minecraft/client/renderer/debug/StructureDebugRenderer - m (Lnet/minecraft/class_3341;Ljava/util/List;Ljava/util/List;Lnet/minecraft/class_2874;)V method_3871 func_223454_a - f Ljava/util/Map; field_4626 mainBoxes - f Lnet/minecraft/class_310; field_4624 minecraft - f Ljava/util/Map; field_4627 subBoxes - f Ljava/util/Map; field_4625 subBoxFlags -c net/minecraft/class_873 net/minecraft/client/renderer/debug/WorldGenAttemptsDebugRenderer - m (Lnet/minecraft/class_2338;FFFFF)V method_3872 addAttempt - f Ljava/util/List; field_4639 reds - f Ljava/util/List; field_4637 alphas - f Ljava/util/List; field_4635 sizes - f Ljava/util/List; field_4640 locations - f Ljava/util/List; field_4638 blues - f Ljava/util/List; field_4636 greens -c net/minecraft/class_872 net/minecraft/client/renderer/debug/WaterDebugRenderer - f Lnet/minecraft/class_310; field_4629 minecraft -c net/minecraft/class_875 net/minecraft/client/renderer/entity/AbstractHorseRenderer - m (Lnet/minecraft/class_1496;Lnet/minecraft/class_4587;F)V method_3874 preRenderCallback - f F field_4641 scale -c net/minecraft/class_874 net/minecraft/client/renderer/entity/AreaEffectCloudRenderer - m (Lnet/minecraft/class_1295;)Lnet/minecraft/class_2960; method_3873 getEntityTexture -c net/minecraft/class_968 net/minecraft/client/renderer/entity/AbstractZombieRenderer - m (Lnet/minecraft/class_1642;)Z method_25449 func_230495_a_ - m (Lnet/minecraft/class_1642;)Lnet/minecraft/class_2960; method_4163 getEntityTexture - f Lnet/minecraft/class_2960; field_4819 field_217771_a -c net/minecraft/class_876 net/minecraft/client/renderer/entity/ArrowRenderer - m (Lnet/minecraft/class_1665;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3875 render - m (Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;Lnet/minecraft/class_4588;IIIFFIIII)V method_23153 drawVertex -c net/minecraft/class_877 net/minecraft/client/renderer/entity/ArmorStandRenderer - m (Lnet/minecraft/class_1531;Lnet/minecraft/class_4587;FFF)V method_3877 applyRotations - m (Lnet/minecraft/class_1531;)Lnet/minecraft/class_2960; method_3880 getEntityTexture - m (Lnet/minecraft/class_1531;ZZZ)Lnet/minecraft/class_1921; method_24301 func_230496_a_ - m (Lnet/minecraft/class_1531;)Z method_3878 canRenderName - f Lnet/minecraft/class_2960; field_4642 TEXTURE_ARMOR_STAND -c net/minecraft/class_4505 net/minecraft/client/renderer/entity/BeeRenderer - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_2960; method_22129 getEntityTexture - f Lnet/minecraft/class_2960; field_20527 field_229043_i_ - f Lnet/minecraft/class_2960; field_20526 field_229042_h_ - f Lnet/minecraft/class_2960; field_20524 field_229040_a_ - f Lnet/minecraft/class_2960; field_20525 field_229041_g_ -c net/minecraft/class_879 net/minecraft/client/renderer/entity/BatRenderer - m (Lnet/minecraft/class_1420;Lnet/minecraft/class_4587;FFF)V method_3882 applyRotations - m (Lnet/minecraft/class_1420;Lnet/minecraft/class_4587;F)V method_3884 preRenderCallback - m (Lnet/minecraft/class_1420;)Lnet/minecraft/class_2960; method_3883 getEntityTexture - f Lnet/minecraft/class_2960; field_4645 BAT_TEXTURES -c net/minecraft/class_881 net/minecraft/client/renderer/entity/BoatRenderer - m (Lnet/minecraft/class_1690;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3888 render - m (Lnet/minecraft/class_1690;)Lnet/minecraft/class_2960; method_3891 getEntityTexture - f Lnet/minecraft/class_554; field_4647 modelBoat - f [Lnet/minecraft/class_2960; field_4648 BOAT_TEXTURES -c net/minecraft/class_878 net/minecraft/client/renderer/entity/BlazeRenderer - m (Lnet/minecraft/class_1545;)Lnet/minecraft/class_2960; method_3881 getEntityTexture - m (Lnet/minecraft/class_1545;Lnet/minecraft/class_2338;)I method_24085 getBlockLight - f Lnet/minecraft/class_2960; field_4644 BLAZE_TEXTURES -c net/minecraft/class_880 net/minecraft/client/renderer/entity/CaveSpiderRenderer - m (Lnet/minecraft/class_1549;Lnet/minecraft/class_4587;F)V method_3886 preRenderCallback - m (Lnet/minecraft/class_1549;)Lnet/minecraft/class_2960; method_3885 getEntityTexture - f Lnet/minecraft/class_2960; field_4646 CAVE_SPIDER_TEXTURES -c net/minecraft/class_929 net/minecraft/client/renderer/entity/CatRenderer - m (Lnet/minecraft/class_1451;Lnet/minecraft/class_4587;FFF)V method_16045 applyRotations - m (Lnet/minecraft/class_1451;)Lnet/minecraft/class_2960; method_4078 getEntityTexture - m (Lnet/minecraft/class_1451;Lnet/minecraft/class_4587;F)V method_4079 preRenderCallback -c net/minecraft/class_882 net/minecraft/client/renderer/entity/ChickenRenderer - m (Lnet/minecraft/class_1428;F)F method_3893 handleRotationFloat - m (Lnet/minecraft/class_1428;)Lnet/minecraft/class_2960; method_3892 getEntityTexture - f Lnet/minecraft/class_2960; field_4649 CHICKEN_TEXTURES -c net/minecraft/class_883 net/minecraft/client/renderer/entity/ChestedHorseRenderer - m (Lnet/minecraft/class_1492;)Lnet/minecraft/class_2960; method_3894 getEntityTexture - f Ljava/util/Map; field_4650 field_195635_a -c net/minecraft/class_885 net/minecraft/client/renderer/entity/CodRenderer - m (Lnet/minecraft/class_1431;)Lnet/minecraft/class_2960; method_3897 getEntityTexture - m (Lnet/minecraft/class_1431;Lnet/minecraft/class_4587;FFF)V method_3896 applyRotations - f Lnet/minecraft/class_2960; field_4652 COD_LOCATION -c net/minecraft/class_887 net/minecraft/client/renderer/entity/CreeperRenderer - m (Lnet/minecraft/class_1548;Lnet/minecraft/class_4587;F)V method_3900 preRenderCallback - m (Lnet/minecraft/class_1548;)Lnet/minecraft/class_2960; method_3899 getEntityTexture - m (Lnet/minecraft/class_1548;F)F method_23154 getOverlayProgress - f Lnet/minecraft/class_2960; field_4653 CREEPER_TEXTURES -c net/minecraft/class_884 net/minecraft/client/renderer/entity/CowRenderer - m (Lnet/minecraft/class_1430;)Lnet/minecraft/class_2960; method_3895 getEntityTexture - f Lnet/minecraft/class_2960; field_4651 COW_TEXTURES -c net/minecraft/class_891 net/minecraft/client/renderer/entity/DragonFireballRenderer - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;IFIII)V method_23837 func_229045_a_ - m (Lnet/minecraft/class_1670;Lnet/minecraft/class_2338;)I method_24086 getBlockLight - m (Lnet/minecraft/class_1670;)Lnet/minecraft/class_2960; method_3905 getEntityTexture - m (Lnet/minecraft/class_1670;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3906 render - f Lnet/minecraft/class_1921; field_21735 field_229044_e_ - f Lnet/minecraft/class_2960; field_4661 DRAGON_FIREBALL_TEXTURE -c net/minecraft/class_888 net/minecraft/client/renderer/entity/DolphinRenderer - m (Lnet/minecraft/class_1433;)Lnet/minecraft/class_2960; method_3903 getEntityTexture - f Lnet/minecraft/class_2960; field_4654 DOLPHIN_LOCATION -c net/minecraft/class_893 net/minecraft/client/renderer/entity/ElderGuardianRenderer - m (Lnet/minecraft/class_1577;Lnet/minecraft/class_4587;F)V method_3910 preRenderCallback - f Lnet/minecraft/class_2960; field_4665 GUARDIAN_ELDER_TEXTURE -c net/minecraft/class_890 net/minecraft/client/renderer/entity/DrownedRenderer - m (Lnet/minecraft/class_1551;Lnet/minecraft/class_4587;FFF)V method_4164 applyRotations - f Lnet/minecraft/class_2960; field_4659 DROWNED_LOCATION -c net/minecraft/class_895 net/minecraft/client/renderer/entity/EnderDragonRenderer - m (Lnet/minecraft/class_1510;)Lnet/minecraft/class_2960; method_3914 getEntityTexture - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;I)V method_23157 func_229061_a_ - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;FF)V method_23156 func_229060_a_ - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;FF)V method_23159 func_229063_c_ - m (FFFFILnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3917 func_229059_a_ - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;FF)V method_23158 func_229062_b_ - m (Lnet/minecraft/class_1510;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3918 render - f Lnet/minecraft/class_2960; field_21006 field_229052_g_ - f Lnet/minecraft/class_2960; field_4670 DRAGON_TEXTURES - f Lnet/minecraft/class_2960; field_4669 DRAGON_EXPLODING_TEXTURES - f F field_21007 field_229057_l_ - f Lnet/minecraft/class_1921; field_21740 field_229056_k_ - f Lnet/minecraft/class_2960; field_4668 ENDERCRYSTAL_BEAM_TEXTURES - f Lnet/minecraft/class_895$class_625; field_21008 model - f Lnet/minecraft/class_1921; field_21737 field_229053_h_ - f Lnet/minecraft/class_1921; field_21738 field_229054_i_ - f Lnet/minecraft/class_1921; field_21739 field_229055_j_ -c net/minecraft/class_895$class_625 net/minecraft/client/renderer/entity/EnderDragonRenderer$EnderDragonModel - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;IIFLnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;Lnet/minecraft/class_630;)V method_23838 func_229081_a_ - m (Lnet/minecraft/class_1510;FFFFF)V method_23621 setRotationAngles - m (Lnet/minecraft/class_1510;FFF)V method_23620 setLivingAnimations - f Lnet/minecraft/class_630; field_3627 body - f Lnet/minecraft/class_630; field_3629 leftProximalWing - f F field_21442 partialTicks - f Lnet/minecraft/class_630; field_3626 rightHindLeg - f Lnet/minecraft/class_630; field_3628 rightHindFoot - f Lnet/minecraft/class_630; field_21554 leftHindFoot - f Lnet/minecraft/class_630; field_21555 rightProximalWing - f Lnet/minecraft/class_630; field_3631 jaw - f Lnet/minecraft/class_630; field_21551 leftForeFoot - f Lnet/minecraft/class_630; field_3630 head - f Lnet/minecraft/class_630; field_3637 spine - f Lnet/minecraft/class_630; field_3625 rightForeFoot - f Lnet/minecraft/class_630; field_3633 rightHindThigh - f Lnet/minecraft/class_1510; field_21441 dragonInstance - f Lnet/minecraft/class_630; field_21552 leftHindThigh - f Lnet/minecraft/class_630; field_21553 leftHindLeg - f Lnet/minecraft/class_630; field_3635 rightDistalWing - f Lnet/minecraft/class_630; field_21548 leftDistalWing - f Lnet/minecraft/class_630; field_21549 leftForeThigh - f Lnet/minecraft/class_630; field_3632 rightForeThigh - f Lnet/minecraft/class_630; field_3634 rightForeLeg - f Lnet/minecraft/class_630; field_21550 leftForeLeg -c net/minecraft/class_892 net/minecraft/client/renderer/entity/EnderCrystalRenderer - m (Lnet/minecraft/class_1511;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3908 render - m (Lnet/minecraft/class_1511;)Lnet/minecraft/class_2960; method_3909 getEntityTexture - m (Lnet/minecraft/class_1511;F)F method_23155 func_229051_a_ - m (Lnet/minecraft/class_1511;Lnet/minecraft/class_4604;DDD)Z method_3907 shouldRender - f F field_21002 field_229047_f_ - f Lnet/minecraft/class_630; field_21003 field_229048_g_ - f Lnet/minecraft/class_1921; field_21736 field_229046_e_ - f Lnet/minecraft/class_630; field_21004 field_229049_h_ - f Lnet/minecraft/class_630; field_21005 field_229050_i_ - f Lnet/minecraft/class_2960; field_4663 ENDER_CRYSTAL_TEXTURES -c net/minecraft/class_896 net/minecraft/client/renderer/entity/EndermiteRenderer - m (Lnet/minecraft/class_1559;)Lnet/minecraft/class_2960; method_3920 getEntityTexture - m (Lnet/minecraft/class_1559;)F method_3919 getDeathMaxRotation - f Lnet/minecraft/class_2960; field_4671 ENDERMITE_TEXTURES -c net/minecraft/class_894 net/minecraft/client/renderer/entity/EndermanRenderer - m (Lnet/minecraft/class_1560;F)Lnet/minecraft/class_243; method_23160 getRenderOffset - m (Lnet/minecraft/class_1560;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3911 render - m (Lnet/minecraft/class_1560;)Lnet/minecraft/class_2960; method_3912 getEntityTexture - f Lnet/minecraft/class_2960; field_4666 ENDERMAN_TEXTURES - f Ljava/util/Random; field_4667 rnd -c net/minecraft/class_897 net/minecraft/client/renderer/entity/EntityRenderer - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2561;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3926 renderName - m ()Lnet/minecraft/class_327; method_3932 getFontRendererFromRenderManager - m ()Lnet/minecraft/class_898; method_3940 getRenderManager - m (Lnet/minecraft/class_1297;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3936 render - m (Lnet/minecraft/class_1297;F)I method_24088 getPackedLight - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_2960; method_3931 getEntityTexture - m (Lnet/minecraft/class_1297;)Z method_3921 canRenderName - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2338;)I method_27950 func_239381_b_ - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2338;)I method_24087 getBlockLight - m (Lnet/minecraft/class_1297;F)Lnet/minecraft/class_243; method_23169 getRenderOffset - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_4604;DDD)Z method_3933 shouldRender - f F field_4673 shadowSize - f Lnet/minecraft/class_898; field_4676 renderManager - f F field_4672 shadowOpaque -c net/minecraft/class_898 net/minecraft/client/renderer/entity/EntityRendererManager - m ()Lnet/minecraft/class_1158; method_24197 getCameraOrientation - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_4604;DDD)Z method_3950 shouldRender - m ()Z method_3958 isDebugBoundingBox - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1297;)V method_23165 renderFire - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1297;FFLnet/minecraft/class_4538;F)V method_23166 renderShadow - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_1297;F)V method_3956 renderDebugBoundingBox - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_1297;FFF)V method_23164 renderBoundingBox - m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;DDDFF)V method_23163 renderBlockShadow - m (Lnet/minecraft/class_918;Lnet/minecraft/class_3296;)V method_23167 registerRenderers - m (Lnet/minecraft/class_1297;F)I method_23839 getPackedLight - m (Lnet/minecraft/class_1297;DDDFFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3954 renderEntityStatic - m (DDD)D method_3959 getDistanceToCamera - m ()Lnet/minecraft/class_327; method_3949 getFontRenderer - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_897; method_3953 getRenderer - m (Lnet/minecraft/class_1158;)V method_24196 setCameraOrientation - m (Z)V method_3955 setDebugBoundingBox - m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;FFFFF)V method_23161 fireVertex - m (Z)V method_3948 setRenderShadow - m (Lnet/minecraft/class_1937;)V method_3944 setWorld - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_897;)V method_17145 register - m (Lnet/minecraft/class_1297;)D method_23168 squareDistanceTo - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_4184;Lnet/minecraft/class_1297;)V method_3941 cacheActiveRenderInfo - m (Lnet/minecraft/class_4587$class_4665;Lnet/minecraft/class_4588;FFFFFF)V method_23162 shadowVertex - f Ljava/util/Map; field_4687 skinMap - f Ljava/util/Map; field_4696 renderers - f Lnet/minecraft/class_1007; field_4683 playerRenderer - f Lnet/minecraft/class_1297; field_4678 pointedEntity - f Lnet/minecraft/class_1060; field_4685 textureManager - f Lnet/minecraft/class_327; field_4689 textRenderer - f Lnet/minecraft/class_4184; field_4686 info - f Lnet/minecraft/class_1921; field_21009 SHADOW_RENDER_TYPE - f Z field_4680 debugBoundingBox - f Lnet/minecraft/class_1158; field_21794 cameraOrientation - f Lnet/minecraft/class_315; field_4692 options - f Z field_4681 renderShadow - f Lnet/minecraft/class_1937; field_4684 world -c net/minecraft/class_899 net/minecraft/client/renderer/entity/EvokerRenderer - m (Lnet/minecraft/class_1617;)Lnet/minecraft/class_2960; method_3961 getEntityTexture - f Lnet/minecraft/class_2960; field_4697 EVOKER_ILLAGER -c net/minecraft/class_899$1 net/minecraft/client/renderer/entity/EvokerRenderer$1 - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1617;FFFFFF)V method_23170 render - f Lnet/minecraft/class_899; field_4698 field_193113_a -c net/minecraft/class_900 net/minecraft/client/renderer/entity/EvokerFangsRenderer - m (Lnet/minecraft/class_1669;)Lnet/minecraft/class_2960; method_3963 getEntityTexture - m (Lnet/minecraft/class_1669;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3962 render - f Lnet/minecraft/class_568; field_4700 model - f Lnet/minecraft/class_2960; field_4699 EVOKER_ILLAGER_FANGS -c net/minecraft/class_901 net/minecraft/client/renderer/entity/FallingBlockRenderer - m (Lnet/minecraft/class_1540;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3965 render - m (Lnet/minecraft/class_1540;)Lnet/minecraft/class_2960; method_3964 getEntityTexture -c net/minecraft/class_902 net/minecraft/client/renderer/entity/ExperienceOrbRenderer - m (Lnet/minecraft/class_1303;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3966 render - m (Lnet/minecraft/class_1303;)Lnet/minecraft/class_2960; method_3967 getEntityTexture - m (Lnet/minecraft/class_1303;Lnet/minecraft/class_2338;)I method_24089 getBlockLight - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;FFIIIFFI)V method_23171 vertex - f Lnet/minecraft/class_2960; field_4701 EXPERIENCE_ORB_TEXTURES - f Lnet/minecraft/class_1921; field_21741 RENDER_TYPE -c net/minecraft/class_906 net/minecraft/client/renderer/entity/FishRenderer - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;IFIII)V method_23840 func_229106_a_ - m (II)F method_23954 func_229105_a_ - m (FFFLnet/minecraft/class_4588;Lnet/minecraft/class_1159;F)V method_23172 func_229104_a_ - m (Lnet/minecraft/class_1536;)Lnet/minecraft/class_2960; method_3975 getEntityTexture - m (Lnet/minecraft/class_1536;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3974 render - f Lnet/minecraft/class_1921; field_21742 field_229103_e_ - f Lnet/minecraft/class_2960; field_4707 BOBBER -c net/minecraft/class_903 net/minecraft/client/renderer/entity/FireworkRocketRenderer - m (Lnet/minecraft/class_1671;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3968 render - m (Lnet/minecraft/class_1671;)Lnet/minecraft/class_2960; method_3969 getEntityTexture - f Lnet/minecraft/class_918; field_4703 itemRenderer -c net/minecraft/class_905 net/minecraft/client/renderer/entity/GhastRenderer - m (Lnet/minecraft/class_1571;)Lnet/minecraft/class_2960; method_3972 getEntityTexture - m (Lnet/minecraft/class_1571;Lnet/minecraft/class_4587;F)V method_3973 preRenderCallback - f Lnet/minecraft/class_2960; field_4706 GHAST_SHOOTING_TEXTURES - f Lnet/minecraft/class_2960; field_4705 GHAST_TEXTURES -c net/minecraft/class_4042 net/minecraft/client/renderer/entity/FoxRenderer - m (Lnet/minecraft/class_4019;)Lnet/minecraft/class_2960; method_18333 getEntityTexture - m (Lnet/minecraft/class_4019;Lnet/minecraft/class_4587;FFF)V method_18334 applyRotations - f Lnet/minecraft/class_2960; field_18027 SLEEPING_FOX - f Lnet/minecraft/class_2960; field_18026 FOX - f Lnet/minecraft/class_2960; field_18029 SLEEPING_SNOW_FOX - f Lnet/minecraft/class_2960; field_18028 SNOW_FOX -c net/minecraft/class_907 net/minecraft/client/renderer/entity/GuardianRenderer - m (Lnet/minecraft/class_1577;)Lnet/minecraft/class_2960; method_3976 getEntityTexture - m (Lnet/minecraft/class_1309;DF)Lnet/minecraft/class_243; method_3979 getPosition - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;FFFIIIFF)V method_23173 func_229108_a_ - m (Lnet/minecraft/class_1577;Lnet/minecraft/class_4604;DDD)Z method_3978 shouldRender - m (Lnet/minecraft/class_1577;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3977 render - f Lnet/minecraft/class_1921; field_21743 field_229107_h_ - f Lnet/minecraft/class_2960; field_4709 GUARDIAN_BEAM_TEXTURE - f Lnet/minecraft/class_2960; field_4708 GUARDIAN_TEXTURE -c net/minecraft/class_908 net/minecraft/client/renderer/entity/GiantZombieRenderer - m (Lnet/minecraft/class_1570;Lnet/minecraft/class_4587;F)V method_3980 preRenderCallback - m (Lnet/minecraft/class_1570;)Lnet/minecraft/class_2960; method_3981 getEntityTexture - f Lnet/minecraft/class_2960; field_4710 ZOMBIE_TEXTURES - f F field_4711 scale -c net/minecraft/class_910 net/minecraft/client/renderer/entity/HorseRenderer - m (Lnet/minecraft/class_1498;)Lnet/minecraft/class_2960; method_3983 getEntityTexture - m (Ljava/util/EnumMap;)V method_27151 func_239384_a_ - f Ljava/util/Map; field_4714 field_239383_a_ -c net/minecraft/class_4798 net/minecraft/client/renderer/entity/HoglinRenderer - m (Lnet/minecraft/class_4760;)Lnet/minecraft/class_2960; method_24472 getEntityTexture - m (Lnet/minecraft/class_4760;)Z method_27038 func_230495_a_ - f Lnet/minecraft/class_2960; field_22244 field_239382_a_ -c net/minecraft/class_909 net/minecraft/client/renderer/entity/BipedRenderer - m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_2960; method_3982 getEntityTexture - f Lnet/minecraft/class_2960; field_4713 DEFAULT_RES_LOC -c net/minecraft/class_3729 net/minecraft/client/renderer/entity/IllagerRenderer - m (Lnet/minecraft/class_1543;Lnet/minecraft/class_4587;F)V method_16460 preRenderCallback -c net/minecraft/class_912 net/minecraft/client/renderer/entity/HuskRenderer - m (Lnet/minecraft/class_1642;Lnet/minecraft/class_4587;F)V method_3985 preRenderCallback - f Lnet/minecraft/class_2960; field_4716 HUSK_ZOMBIE_TEXTURES -c net/minecraft/class_913 net/minecraft/client/renderer/entity/IronGolemRenderer - m (Lnet/minecraft/class_1439;Lnet/minecraft/class_4587;FFF)V method_3986 applyRotations - m (Lnet/minecraft/class_1439;)Lnet/minecraft/class_2960; method_3987 getEntityTexture - f Lnet/minecraft/class_2960; field_4717 IRON_GOLEM_TEXTURES -c net/minecraft/class_914 net/minecraft/client/renderer/entity/IllusionerRenderer - m (Lnet/minecraft/class_1581;)Z method_3988 isVisible - m (Lnet/minecraft/class_1581;)Lnet/minecraft/class_2960; method_3990 getEntityTexture - m (Lnet/minecraft/class_1581;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3991 render - f Lnet/minecraft/class_2960; field_4718 ILLUSIONIST -c net/minecraft/class_914$1 net/minecraft/client/renderer/entity/IllusionerRenderer$1 - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1581;FFFFFF)V method_17149 render - f Lnet/minecraft/class_914; field_4719 field_193114_a -c net/minecraft/class_915 net/minecraft/client/renderer/entity/ItemFrameRenderer - m (Lnet/minecraft/class_1533;F)Lnet/minecraft/class_243; method_23174 getRenderOffset - m (Lnet/minecraft/class_1533;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3994 render - m (Lnet/minecraft/class_1533;)Lnet/minecraft/class_2960; method_3993 getEntityTexture - m (Lnet/minecraft/class_1533;)Z method_23176 canRenderName - m (Lnet/minecraft/class_1533;Lnet/minecraft/class_2561;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_23175 renderName - f Lnet/minecraft/class_1091; field_4723 LOCATION_MODEL_MAP - f Lnet/minecraft/class_918; field_4720 itemRenderer - f Lnet/minecraft/class_1091; field_4721 LOCATION_MODEL - f Lnet/minecraft/class_310; field_4724 mc -c net/minecraft/class_916 net/minecraft/client/renderer/entity/ItemRenderer - m (Lnet/minecraft/class_1542;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_3996 render - m (Lnet/minecraft/class_1799;)I method_3998 getModelCount - m (Lnet/minecraft/class_1542;)Lnet/minecraft/class_2960; method_3999 getEntityTexture - f Ljava/util/Random; field_4725 random - f Lnet/minecraft/class_918; field_4726 itemRenderer -c net/minecraft/class_920 net/minecraft/client/renderer/entity/LeashKnotRenderer - m (Lnet/minecraft/class_1532;)Lnet/minecraft/class_2960; method_4036 getEntityTexture - m (Lnet/minecraft/class_1532;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4035 render - f Lnet/minecraft/class_579; field_4735 leashKnotModel - f Lnet/minecraft/class_2960; field_4734 LEASH_KNOT_TEXTURES -c net/minecraft/class_918 net/minecraft/client/renderer/ItemRenderer - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;ZLnet/minecraft/class_4587;Lnet/minecraft/class_4597;IILnet/minecraft/class_1087;)V method_23179 renderItem - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;IILnet/minecraft/class_4587;Lnet/minecraft/class_4597;)V method_23178 renderItem - m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_4032 func_239389_c_ - m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_4005 func_239392_d_ - m (Lnet/minecraft/class_1799;II)V method_4023 renderItemAndEffectIntoGUI - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;II)V method_27951 renderItemAndEffectIntoGUI - m (Lnet/minecraft/class_4597;Lnet/minecraft/class_1921;Lnet/minecraft/class_4587$class_4665;)Lnet/minecraft/class_4588; method_30114 getGlintVertexBuilder - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;ZLnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1937;II)V method_23177 renderItem - m (Lnet/minecraft/class_1799;II)V method_4010 renderItemIntoGUI - m (Lnet/minecraft/class_4597;Lnet/minecraft/class_1921;Lnet/minecraft/class_4587$class_4665;)Lnet/minecraft/class_4588; method_30115 getDirectGlintVertexBuilder - m (Lnet/minecraft/class_1799;II)V method_27953 renderItemAndEffectIntoGuiWithoutEntity - m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_4029 func_239388_b_ - m (Lnet/minecraft/class_4597;Lnet/minecraft/class_1921;ZZ)Lnet/minecraft/class_4588; method_29711 getEntityGlintVertexBuilder - m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_4008 func_239385_a_ - m (Lnet/minecraft/class_4597;Lnet/minecraft/class_1921;ZZ)Lnet/minecraft/class_4588; method_23181 getBuffer - m (Lnet/minecraft/class_327;Lnet/minecraft/class_1799;II)V method_4025 renderItemOverlays - m (Lnet/minecraft/class_4597;Lnet/minecraft/class_1921;ZZ)Lnet/minecraft/class_4588; method_27952 getArmorVertexBuilder - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;II)V method_4026 renderItemIntoGUI - m (Lnet/minecraft/class_1087;Lnet/minecraft/class_1799;IILnet/minecraft/class_4587;Lnet/minecraft/class_4588;)V method_23182 renderModel - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1087; method_4019 getItemModelWithOverrides - m (Lnet/minecraft/class_1799;IILnet/minecraft/class_1087;)V method_4021 renderItemModelIntoGUI - m (Lnet/minecraft/class_287;IIIIIIII)V method_4004 draw - m ()Lnet/minecraft/class_763; method_4012 getItemModelMesher - m (Lnet/minecraft/class_327;Lnet/minecraft/class_1799;IILjava/lang/String;)V method_4022 renderItemOverlayIntoGUI - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Ljava/util/List;Lnet/minecraft/class_1799;II)V method_23180 renderQuads - f F field_4730 zLevel - f Ljava/util/Set; field_4728 ITEM_MODEL_BLACKLIST - f Lnet/minecraft/class_1060; field_4729 textureManager - f Lnet/minecraft/class_2960; field_21010 RES_ITEM_GLINT - f Lnet/minecraft/class_325; field_4733 itemColors - f Lnet/minecraft/class_763; field_4732 itemModelMesher -c net/minecraft/class_922 net/minecraft/client/renderer/entity/LivingRenderer - m (Lnet/minecraft/class_2350;)F method_18656 getFacingAngle - m (Lnet/minecraft/class_1309;F)F method_4044 getSwingProgress - m (Lnet/minecraft/class_1309;F)I method_23622 getPackedOverlay - m (Lnet/minecraft/class_1309;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4054 render - m (Lnet/minecraft/class_1309;)F method_4039 getDeathMaxRotation - m (Lnet/minecraft/class_1309;ZZZ)Lnet/minecraft/class_1921; method_24302 func_230496_a_ - m (Lnet/minecraft/class_1309;F)F method_4045 handleRotationFloat - m (Lnet/minecraft/class_1309;F)F method_23185 getOverlayProgress - m (Lnet/minecraft/class_1309;)Z method_25450 func_230495_a_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4587;FFF)V method_4058 applyRotations - m (Lnet/minecraft/class_1309;)Z method_4056 isVisible - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4587;F)V method_4042 preRenderCallback - m (Lnet/minecraft/class_3887;)Z method_4046 addLayer - m (Lnet/minecraft/class_1309;)Z method_4055 canRenderName - f Lorg/apache/logging/log4j/Logger; field_21011 LOGGER - f Lnet/minecraft/class_583; field_4737 entityModel - f Ljava/util/List; field_4738 layerRenderers -c net/minecraft/class_922$1 net/minecraft/client/renderer/entity/LivingRenderer$1 - f [I field_18227 field_217784_a - f [I field_4743 field_178679_a -c net/minecraft/class_919 net/minecraft/client/renderer/entity/LightningBoltRenderer - m (Lnet/minecraft/class_1538;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4034 render - m (Lnet/minecraft/class_1159;Lnet/minecraft/class_4588;FFIFFFFFFFZZZZ)V method_23183 func_229116_a_ - m (Lnet/minecraft/class_1538;)Lnet/minecraft/class_2960; method_4033 getEntityTexture -c net/minecraft/class_923 net/minecraft/client/renderer/entity/LlamaSpitRenderer - m (Lnet/minecraft/class_1673;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4061 render - m (Lnet/minecraft/class_1673;)Lnet/minecraft/class_2960; method_4062 getEntityTexture - f Lnet/minecraft/class_581; field_4744 model - f Lnet/minecraft/class_2960; field_4745 LLAMA_SPIT_TEXTURE -c net/minecraft/class_921 net/minecraft/client/renderer/entity/LlamaRenderer - m (Lnet/minecraft/class_1501;)Lnet/minecraft/class_2960; method_4037 getEntityTexture - f [Lnet/minecraft/class_2960; field_4736 LLAMA_TEXTURES -c net/minecraft/class_925 net/minecraft/client/renderer/entity/MinecartRenderer - m (Lnet/minecraft/class_1688;)Lnet/minecraft/class_2960; method_4065 getEntityTexture - m (Lnet/minecraft/class_1688;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4063 render - m (Lnet/minecraft/class_1688;FLnet/minecraft/class_2680;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4064 renderBlockState - f Lnet/minecraft/class_2960; field_4746 MINECART_TEXTURES - f Lnet/minecraft/class_583; field_4747 modelMinecart -c net/minecraft/class_917 net/minecraft/client/renderer/entity/MagmaCubeRenderer - m (Lnet/minecraft/class_1589;Lnet/minecraft/class_4587;F)V method_4000 preRenderCallback - m (Lnet/minecraft/class_1589;Lnet/minecraft/class_2338;)I method_24090 getBlockLight - m (Lnet/minecraft/class_1589;)Lnet/minecraft/class_2960; method_4001 getEntityTexture - f Lnet/minecraft/class_2960; field_4727 MAGMA_CUBE_TEXTURES -c net/minecraft/class_926 net/minecraft/client/renderer/entity/MooshroomRenderer - m (Ljava/util/HashMap;)V method_18657 func_217773_a - m (Lnet/minecraft/class_1438;)Lnet/minecraft/class_2960; method_4066 getEntityTexture - f Ljava/util/Map; field_4748 field_217774_a -c net/minecraft/class_927 net/minecraft/client/renderer/entity/MobRenderer - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;IFFFFFIIZFF)V method_23187 addVertexPair - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;FFFIIIIFFFF)V method_23186 renderSide - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4604;DDD)Z method_4068 shouldRender - m (Lnet/minecraft/class_1308;)Z method_4071 canRenderName - m (Lnet/minecraft/class_1308;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4072 render - m (Lnet/minecraft/class_1308;FLnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1297;)V method_4073 renderLeash -c net/minecraft/class_928 net/minecraft/client/renderer/entity/PaintingRenderer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4588;Lnet/minecraft/class_1534;IILnet/minecraft/class_1058;Lnet/minecraft/class_1058;)V method_4074 func_229122_a_ - m (Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;Lnet/minecraft/class_4588;FFFFFIIII)V method_23188 func_229121_a_ - m (Lnet/minecraft/class_1534;)Lnet/minecraft/class_2960; method_4077 getEntityTexture - m (Lnet/minecraft/class_1534;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4075 render -c net/minecraft/class_3683 net/minecraft/client/renderer/entity/OcelotRenderer - m (Lnet/minecraft/class_3701;)Lnet/minecraft/class_2960; method_16046 getEntityTexture - f Lnet/minecraft/class_2960; field_16259 OCELOT_TEXTURES -c net/minecraft/class_930 net/minecraft/client/renderer/entity/ParrotRenderer - m (Lnet/minecraft/class_1453;)Lnet/minecraft/class_2960; method_4080 getEntityTexture - m (Lnet/minecraft/class_1453;F)F method_4081 handleRotationFloat - f [Lnet/minecraft/class_2960; field_4754 PARROT_TEXTURES -c net/minecraft/class_931 net/minecraft/client/renderer/entity/PandaRenderer - m (Lnet/minecraft/class_1440;Lnet/minecraft/class_4587;FFF)V method_4085 applyRotations - m (Ljava/util/EnumMap;)V method_17796 func_217776_a - m (FFIFF)F method_4086 func_217775_a - m (Lnet/minecraft/class_1440;)Lnet/minecraft/class_2960; method_4083 getEntityTexture - f Ljava/util/Map; field_17595 field_217777_a -c net/minecraft/class_932 net/minecraft/client/renderer/entity/PigRenderer - m (Lnet/minecraft/class_1452;)Lnet/minecraft/class_2960; method_4087 getEntityTexture - f Lnet/minecraft/class_2960; field_4755 PIG_TEXTURES -c net/minecraft/class_933 net/minecraft/client/renderer/entity/PhantomRenderer - m (Lnet/minecraft/class_1593;)Lnet/minecraft/class_2960; method_4090 getEntityTexture - m (Lnet/minecraft/class_1593;Lnet/minecraft/class_4587;FFF)V method_4089 applyRotations - m (Lnet/minecraft/class_1593;Lnet/minecraft/class_4587;F)V method_4088 preRenderCallback - f Lnet/minecraft/class_2960; field_4756 PHANTOM_LOCATION -c net/minecraft/class_934 net/minecraft/client/renderer/entity/PillagerRenderer - m (Lnet/minecraft/class_1604;)Lnet/minecraft/class_2960; method_4092 getEntityTexture - f Lnet/minecraft/class_2960; field_4757 field_217772_a -c net/minecraft/class_4842 net/minecraft/client/renderer/entity/PiglinRenderer - m (Z)Lnet/minecraft/class_4840; method_24875 func_239395_a_ - m (Lnet/minecraft/class_1308;)Z method_25451 func_230495_a_ - f Ljava/util/Map; field_25793 field_243503_a -c net/minecraft/class_936 net/minecraft/client/renderer/entity/PufferfishRenderer - m (Lnet/minecraft/class_1454;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4094 render - m (Lnet/minecraft/class_1454;)Lnet/minecraft/class_2960; method_4096 getEntityTexture - m (Lnet/minecraft/class_1454;Lnet/minecraft/class_4587;FFF)V method_4095 applyRotations - f Lnet/minecraft/class_592; field_4763 modelLarge - f I field_4765 lastPuffState - f Lnet/minecraft/class_595; field_4764 modelMedium - f Lnet/minecraft/class_2960; field_4762 PUFFERFISH_TEXTURES - f Lnet/minecraft/class_594; field_4761 modelSmall -c net/minecraft/class_937 net/minecraft/client/renderer/entity/PolarBearRenderer - m (Lnet/minecraft/class_1456;Lnet/minecraft/class_4587;F)V method_4099 preRenderCallback - m (Lnet/minecraft/class_1456;)Lnet/minecraft/class_2960; method_4097 getEntityTexture - f Lnet/minecraft/class_2960; field_4766 POLAR_BEAR_TEXTURE -c net/minecraft/class_939 net/minecraft/client/renderer/entity/RabbitRenderer - m (Lnet/minecraft/class_1463;)Lnet/minecraft/class_2960; method_4102 getEntityTexture - f Lnet/minecraft/class_2960; field_4769 CAERBANNOG - f Lnet/minecraft/class_2960; field_4771 TOAST - f Lnet/minecraft/class_2960; field_4773 WHITE - f Lnet/minecraft/class_2960; field_4768 GOLD - f Lnet/minecraft/class_2960; field_4775 BLACK - f Lnet/minecraft/class_2960; field_4774 SALT - f Lnet/minecraft/class_2960; field_4770 BROWN - f Lnet/minecraft/class_2960; field_4772 WHITE_SPLOTCHED -c net/minecraft/class_3883 net/minecraft/client/renderer/entity/IEntityRenderer - m ()Lnet/minecraft/class_583; method_4038 getEntityModel - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_2960; method_3931 getEntityTexture -c net/minecraft/class_911 net/minecraft/client/renderer/entity/RavagerRenderer - m (Lnet/minecraft/class_1584;)Lnet/minecraft/class_2960; method_3984 getEntityTexture - f Lnet/minecraft/class_2960; field_4715 RAVAGER_TEXTURES -c net/minecraft/class_941 net/minecraft/client/renderer/entity/SheepRenderer - m (Lnet/minecraft/class_1472;)Lnet/minecraft/class_2960; method_4106 getEntityTexture - f Lnet/minecraft/class_2960; field_4778 SHEARED_SHEEP_TEXTURES -c net/minecraft/class_938 net/minecraft/client/renderer/entity/SalmonRenderer - m (Lnet/minecraft/class_1462;Lnet/minecraft/class_4587;FFF)V method_4100 applyRotations - m (Lnet/minecraft/class_1462;)Lnet/minecraft/class_2960; method_4101 getEntityTexture - f Lnet/minecraft/class_2960; field_4767 SALMON_LOCATION -c net/minecraft/class_943 net/minecraft/client/renderer/entity/ShulkerRenderer - m (Lnet/minecraft/class_1606;Lnet/minecraft/class_4604;DDD)Z method_4112 shouldRender - m (Lnet/minecraft/class_1606;Lnet/minecraft/class_4587;FFF)V method_4114 applyRotations - m (I)[Lnet/minecraft/class_2960; method_22791 func_229124_a_ - m (Lnet/minecraft/class_4730;)Lnet/minecraft/class_2960; method_22792 func_229125_a_ - m (Lnet/minecraft/class_1606;)Lnet/minecraft/class_2960; method_4111 getEntityTexture - m (Lnet/minecraft/class_1606;F)Lnet/minecraft/class_243; method_23189 getRenderOffset - f Lnet/minecraft/class_2960; field_4781 field_204402_a - f [Lnet/minecraft/class_2960; field_4780 SHULKER_ENDERGOLEM_TEXTURE -c net/minecraft/class_940 net/minecraft/client/renderer/entity/ShulkerBulletRenderer - m (Lnet/minecraft/class_1678;)Lnet/minecraft/class_2960; method_4105 getEntityTexture - m (Lnet/minecraft/class_1678;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4103 render - m (Lnet/minecraft/class_1678;Lnet/minecraft/class_2338;)I method_24091 getBlockLight - f Lnet/minecraft/class_1921; field_21744 field_229123_e_ - f Lnet/minecraft/class_603; field_4777 model - f Lnet/minecraft/class_2960; field_4776 SHULKER_SPARK_TEXTURE -c net/minecraft/class_946 net/minecraft/client/renderer/entity/SkeletonRenderer - m (Lnet/minecraft/class_1547;)Lnet/minecraft/class_2960; method_4119 getEntityTexture - f Lnet/minecraft/class_2960; field_4785 SKELETON_TEXTURES -c net/minecraft/class_942 net/minecraft/client/renderer/entity/SilverfishRenderer - m (Lnet/minecraft/class_1614;)F method_4107 getDeathMaxRotation - m (Lnet/minecraft/class_1614;)Lnet/minecraft/class_2960; method_4108 getEntityTexture - f Lnet/minecraft/class_2960; field_4779 SILVERFISH_TEXTURES -c net/minecraft/class_948 net/minecraft/client/renderer/entity/SnowManRenderer - m (Lnet/minecraft/class_1473;)Lnet/minecraft/class_2960; method_4122 getEntityTexture - f Lnet/minecraft/class_2960; field_4788 SNOW_MAN_TEXTURES -c net/minecraft/class_945 net/minecraft/client/renderer/entity/SlimeRenderer - m (Lnet/minecraft/class_1621;)Lnet/minecraft/class_2960; method_4116 getEntityTexture - m (Lnet/minecraft/class_1621;Lnet/minecraft/class_4587;F)V method_4118 preRenderCallback - m (Lnet/minecraft/class_1621;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4117 render - f Lnet/minecraft/class_2960; field_4784 SLIME_TEXTURES -c net/minecraft/class_949 net/minecraft/client/renderer/entity/SpiderRenderer - m (Lnet/minecraft/class_1628;)F method_4124 getDeathMaxRotation - m (Lnet/minecraft/class_1628;)Lnet/minecraft/class_2960; method_4123 getEntityTexture - f Lnet/minecraft/class_2960; field_4789 SPIDER_TEXTURES -c net/minecraft/class_947 net/minecraft/client/renderer/entity/SpectralArrowRenderer - m (Lnet/minecraft/class_1679;)Lnet/minecraft/class_2960; method_4120 getEntityTexture - f Lnet/minecraft/class_2960; field_4787 RES_SPECTRAL_ARROW -c net/minecraft/class_950 net/minecraft/client/renderer/entity/StrayRenderer - f Lnet/minecraft/class_2960; field_4790 STRAY_SKELETON_TEXTURES -c net/minecraft/class_951 net/minecraft/client/renderer/entity/SquidRenderer - m (Lnet/minecraft/class_1477;F)F method_4125 handleRotationFloat - m (Lnet/minecraft/class_1477;Lnet/minecraft/class_4587;FFF)V method_4126 applyRotations - m (Lnet/minecraft/class_1477;)Lnet/minecraft/class_2960; method_4127 getEntityTexture - f Lnet/minecraft/class_2960; field_4791 SQUID_TEXTURES -c net/minecraft/class_953 net/minecraft/client/renderer/entity/SpriteRenderer - f Z field_21745 field_229126_f_ - f F field_17147 scale - f Lnet/minecraft/class_918; field_4792 itemRenderer -c net/minecraft/class_4999 net/minecraft/client/renderer/entity/StriderRenderer - m (Lnet/minecraft/class_4985;)Z method_26423 func_230495_a_ - m (Lnet/minecraft/class_4985;Lnet/minecraft/class_4587;F)V method_26422 preRenderCallback - m (Lnet/minecraft/class_4985;)Lnet/minecraft/class_2960; method_26421 getEntityTexture - f Lnet/minecraft/class_2960; field_23372 field_239397_a_ - f Lnet/minecraft/class_2960; field_23937 field_239398_g_ -c net/minecraft/class_954 net/minecraft/client/renderer/entity/TippedArrowRenderer - m (Lnet/minecraft/class_1667;)Lnet/minecraft/class_2960; method_4130 getEntityTexture - f Lnet/minecraft/class_2960; field_4795 RES_ARROW - f Lnet/minecraft/class_2960; field_4794 RES_TIPPED_ARROW -c net/minecraft/class_955 net/minecraft/client/renderer/entity/TridentRenderer - m (Lnet/minecraft/class_1685;)Lnet/minecraft/class_2960; method_4134 getEntityTexture - m (Lnet/minecraft/class_1685;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4133 render - f Lnet/minecraft/class_2960; field_4796 TRIDENT - f Lnet/minecraft/class_613; field_4797 tridentModel -c net/minecraft/class_956 net/minecraft/client/renderer/entity/TNTRenderer - m (Lnet/minecraft/class_1541;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4135 render - m (Lnet/minecraft/class_1541;)Lnet/minecraft/class_2960; method_4136 getEntityTexture -c net/minecraft/class_957 net/minecraft/client/renderer/entity/TNTMinecartRenderer - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;IZ)V method_23190 renderTntFlash - m (Lnet/minecraft/class_1701;FLnet/minecraft/class_2680;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4137 renderBlockState -c net/minecraft/class_958 net/minecraft/client/renderer/entity/TurtleRenderer - m (Lnet/minecraft/class_1481;)Lnet/minecraft/class_2960; method_4139 getEntityTexture - m (Lnet/minecraft/class_1481;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4138 render - f Lnet/minecraft/class_2960; field_4798 BIG_SEA_TURTLE -c net/minecraft/class_959 net/minecraft/client/renderer/entity/TropicalFishRenderer - m (Lnet/minecraft/class_1474;)Lnet/minecraft/class_2960; method_4141 getEntityTexture - m (Lnet/minecraft/class_1474;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4140 render - m (Lnet/minecraft/class_1474;Lnet/minecraft/class_4587;FFF)V method_4142 applyRotations - f Lnet/minecraft/class_612; field_4800 aModel - f Lnet/minecraft/class_615; field_4799 bModel -c net/minecraft/class_960 net/minecraft/client/renderer/entity/VexRenderer - m (Lnet/minecraft/class_1634;Lnet/minecraft/class_4587;F)V method_4143 preRenderCallback - m (Lnet/minecraft/class_1634;)Lnet/minecraft/class_2960; method_4144 getEntityTexture - m (Lnet/minecraft/class_1634;Lnet/minecraft/class_2338;)I method_24092 getBlockLight - f Lnet/minecraft/class_2960; field_4801 VEX_TEXTURE - f Lnet/minecraft/class_2960; field_4802 VEX_CHARGING_TEXTURE -c net/minecraft/class_961 net/minecraft/client/renderer/entity/UndeadHorseRenderer - m (Lnet/minecraft/class_1496;)Lnet/minecraft/class_2960; method_4145 getEntityTexture - f Ljava/util/Map; field_4803 UNDEAD_HORSE_TEXTURES -c net/minecraft/class_963 net/minecraft/client/renderer/entity/VillagerRenderer - m (Lnet/minecraft/class_1646;)Lnet/minecraft/class_2960; method_4151 getEntityTexture - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4587;F)V method_4149 preRenderCallback - f Lnet/minecraft/class_2960; field_4807 VILLAGER_TEXTURES -c net/minecraft/class_3992 net/minecraft/client/renderer/entity/WanderingTraderRenderer - m (Lnet/minecraft/class_3989;Lnet/minecraft/class_4587;F)V method_18046 preRenderCallback - m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_2960; method_18045 getEntityTexture - f Lnet/minecraft/class_2960; field_17739 field_217780_a -c net/minecraft/class_962 net/minecraft/client/renderer/entity/VindicatorRenderer - m (Lnet/minecraft/class_1632;)Lnet/minecraft/class_2960; method_4147 getEntityTexture - f Lnet/minecraft/class_2960; field_4804 VINDICATOR_TEXTURE -c net/minecraft/class_962$1 net/minecraft/client/renderer/entity/VindicatorRenderer$1 - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1632;FFFFFF)V method_17156 render - f Lnet/minecraft/class_962; field_4805 field_191362_a -c net/minecraft/class_964 net/minecraft/client/renderer/entity/WitherRenderer - m (Lnet/minecraft/class_1528;Lnet/minecraft/class_4587;F)V method_4152 preRenderCallback - m (Lnet/minecraft/class_1528;)Lnet/minecraft/class_2960; method_4153 getEntityTexture - m (Lnet/minecraft/class_1528;Lnet/minecraft/class_2338;)I method_24093 getBlockLight - f Lnet/minecraft/class_2960; field_4812 INVULNERABLE_WITHER_TEXTURES - f Lnet/minecraft/class_2960; field_4813 WITHER_TEXTURES -c net/minecraft/class_965 net/minecraft/client/renderer/entity/WitchRenderer - m (Lnet/minecraft/class_1640;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4155 render - m (Lnet/minecraft/class_1640;Lnet/minecraft/class_4587;F)V method_4157 preRenderCallback - m (Lnet/minecraft/class_1640;)Lnet/minecraft/class_2960; method_4154 getEntityTexture - f Lnet/minecraft/class_2960; field_4814 WITCH_TEXTURES -c net/minecraft/class_966 net/minecraft/client/renderer/entity/WitherSkullRenderer - m (Lnet/minecraft/class_1687;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4159 render - m (Lnet/minecraft/class_1687;Lnet/minecraft/class_2338;)I method_24094 getBlockLight - m (Lnet/minecraft/class_1687;)Lnet/minecraft/class_2960; method_4160 getEntityTexture - f Lnet/minecraft/class_2960; field_4817 INVULNERABLE_WITHER_TEXTURES - f Lnet/minecraft/class_607; field_4816 skeletonHeadModel - f Lnet/minecraft/class_2960; field_4815 WITHER_TEXTURES -c net/minecraft/class_967 net/minecraft/client/renderer/entity/WitherSkeletonRenderer - m (Lnet/minecraft/class_1547;Lnet/minecraft/class_4587;F)V method_4161 preRenderCallback - f Lnet/minecraft/class_2960; field_4818 WITHER_SKELETON_TEXTURES -c net/minecraft/class_5144 net/minecraft/client/renderer/entity/ZoglinRenderer - m (Lnet/minecraft/class_5136;)Lnet/minecraft/class_2960; method_27039 getEntityTexture - f Lnet/minecraft/class_2960; field_23779 field_239399_a_ -c net/minecraft/class_969 net/minecraft/client/renderer/entity/WolfRenderer - m (Lnet/minecraft/class_1493;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4166 render - m (Lnet/minecraft/class_1493;)Lnet/minecraft/class_2960; method_4165 getEntityTexture - m (Lnet/minecraft/class_1493;F)F method_4167 handleRotationFloat - f Lnet/minecraft/class_2960; field_4823 ANGRY_WOLF_TEXTURES - f Lnet/minecraft/class_2960; field_4821 WOLF_TEXTURES - f Lnet/minecraft/class_2960; field_4822 TAMED_WOLF_TEXTURES -c net/minecraft/class_971 net/minecraft/client/renderer/entity/ZombieVillagerRenderer - m (Lnet/minecraft/class_1641;)Lnet/minecraft/class_2960; method_4175 getEntityTexture - m (Lnet/minecraft/class_1641;)Z method_25452 func_230495_a_ - f Lnet/minecraft/class_2960; field_4835 ZOMBIE_VILLAGER_TEXTURES -c net/minecraft/class_3886 net/minecraft/client/renderer/entity/ZombieRenderer -c net/minecraft/class_4506 net/minecraft/client/renderer/entity/layers/BeeStingerLayer - m (Lnet/minecraft/class_4588;Lnet/minecraft/class_1159;Lnet/minecraft/class_4581;FIFFI)V method_23295 func_229132_a_ - f Lnet/minecraft/class_2960; field_20529 field_229131_a_ -c net/minecraft/class_973 net/minecraft/client/renderer/entity/layers/ArrowLayer - f Lnet/minecraft/class_1667; field_20528 field_229130_b_ - f Lnet/minecraft/class_898; field_17153 field_215336_a -c net/minecraft/class_975 net/minecraft/client/renderer/entity/layers/HeldBlockLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1560;FFFFFF)V method_4179 render -c net/minecraft/class_972 net/minecraft/client/renderer/entity/layers/CapeLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_742;FFFFFF)V method_4177 render -c net/minecraft/class_974 net/minecraft/client/renderer/entity/layers/CreeperChargeLayer - f Lnet/minecraft/class_562; field_4844 creeperModel - f Lnet/minecraft/class_2960; field_4842 LIGHTNING_TEXTURE -c net/minecraft/class_3684 net/minecraft/client/renderer/entity/layers/CatCollarLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1451;FFFFFF)V method_16047 render - f Lnet/minecraft/class_2960; field_16260 CAT_COLLAR - f Lnet/minecraft/class_3680; field_16261 model -c net/minecraft/class_976 net/minecraft/client/renderer/entity/layers/HeadLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_17159 render - f F field_24476 field_239404_c_ - f F field_24474 field_239402_a_ - f F field_24475 field_239403_b_ -c net/minecraft/class_4004 net/minecraft/client/renderer/entity/layers/CrossedArmsItemLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_4208 render -c net/minecraft/class_977 net/minecraft/client/renderer/entity/layers/DolphinCarriedItemLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1433;FFFFFF)V method_17160 render -c net/minecraft/class_978 net/minecraft/client/renderer/entity/layers/Deadmau5HeadLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_742;FFFFFF)V method_4181 render -c net/minecraft/class_979 net/minecraft/client/renderer/entity/layers/ElytraLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_17161 render - f Lnet/minecraft/class_563; field_4852 modelElytra - f Lnet/minecraft/class_2960; field_4850 TEXTURE_ELYTRA -c net/minecraft/class_980 net/minecraft/client/renderer/entity/layers/DrownedOuterLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1551;FFFFFF)V method_4182 render - f Lnet/minecraft/class_564; field_4855 modelOuterLayer - f Lnet/minecraft/class_2960; field_4854 LOCATION_OUTER_LAYER -c net/minecraft/class_4607 net/minecraft/client/renderer/entity/layers/EnergyLayer - m ()Lnet/minecraft/class_2960; method_23201 func_225633_a_ - m (F)F method_23202 func_225634_a_ - m ()Lnet/minecraft/class_583; method_23203 func_225635_b_ -c net/minecraft/class_985 net/minecraft/client/renderer/entity/layers/EndermanEyesLayer - f Lnet/minecraft/class_1921; field_4876 RENDER_TYPE -c net/minecraft/class_4043 net/minecraft/client/renderer/entity/layers/FoxHeldItemLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_4019;FFFFFF)V method_18335 render -c net/minecraft/class_4606 net/minecraft/client/renderer/entity/layers/AbstractEyesLayer - m ()Lnet/minecraft/class_1921; method_23193 getRenderType -c net/minecraft/class_4073 net/minecraft/client/renderer/entity/layers/LeatherHorseArmorLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1498;FFFFFF)V method_18658 render - f Lnet/minecraft/class_549; field_18228 field_215341_a -c net/minecraft/class_970 net/minecraft/client/renderer/entity/layers/BipedArmorLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;Lnet/minecraft/class_1309;Lnet/minecraft/class_1304;ILnet/minecraft/class_572;)V method_4169 func_241739_a_ - m (Lnet/minecraft/class_1304;)Lnet/minecraft/class_572; method_4172 func_241736_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1738;ZLnet/minecraft/class_572;ZFFFLjava/lang/String;)V method_23192 func_241738_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_17157 render - m (Lnet/minecraft/class_1738;ZLjava/lang/String;)Lnet/minecraft/class_2960; method_4174 func_241737_a_ - m (Lnet/minecraft/class_572;Lnet/minecraft/class_1304;)V method_4170 setModelSlotVisible - m (Lnet/minecraft/class_1304;)Z method_4173 isLegSlot - f Ljava/util/Map; field_4829 ARMOR_TEXTURE_RES_MAP - f Lnet/minecraft/class_572; field_4830 modelLeggings - f Lnet/minecraft/class_572; field_4831 modelArmor -c net/minecraft/class_970$1 net/minecraft/client/renderer/entity/layers/BipedArmorLayer$1 - f [I field_4878 field_188481_a -c net/minecraft/class_5167 net/minecraft/client/renderer/entity/layers/HorseMarkingsLayer - m (Ljava/util/EnumMap;)V method_27153 func_239406_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1498;FFFFFF)V method_27152 render - f Ljava/util/Map; field_23938 field_239405_a_ -c net/minecraft/class_986 net/minecraft/client/renderer/entity/layers/IronGolenFlowerLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1439;FFFFFF)V method_4188 render -c net/minecraft/class_4691 net/minecraft/client/renderer/entity/layers/IronGolemCracksLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1439;FFFFFF)V method_23623 render - f Ljava/util/Map; field_21443 field_229134_a_ -c net/minecraft/class_988 net/minecraft/client/renderer/entity/layers/LlamaDecorLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1501;FFFFFF)V method_4191 render - f Lnet/minecraft/class_2960; field_17740 TRADER_LLAMA - f [Lnet/minecraft/class_2960; field_4880 LLAMA_DECOR_TEXTURES - f Lnet/minecraft/class_578; field_4881 model -c net/minecraft/class_989 net/minecraft/client/renderer/entity/layers/HeldItemLayer - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_809$class_811;Lnet/minecraft/class_1306;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4192 func_229135_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_17162 render -c net/minecraft/class_990 net/minecraft/client/renderer/entity/layers/PandaHeldItemLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1440;FFFFFF)V method_4194 render -c net/minecraft/class_991 net/minecraft/client/renderer/entity/layers/MooshroomMushroomLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1438;FFFFFF)V method_4195 render -c net/minecraft/class_993 net/minecraft/client/renderer/entity/layers/PhantomEyesLayer - f Lnet/minecraft/class_1921; field_4890 field_229138_a_ -c net/minecraft/class_983 net/minecraft/client/renderer/entity/layers/ParrotVariantLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1657;FFFFFF)V method_4185 render - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1657;FFFFZ)V method_4186 renderParrot - m (Lnet/minecraft/class_1299;)Z method_17957 func_215344_a - m (Lnet/minecraft/class_4587;ZLnet/minecraft/class_1657;Lnet/minecraft/class_4597;Lnet/minecraft/class_2487;IFFFFLnet/minecraft/class_1299;)V method_17958 func_229137_a_ - f Lnet/minecraft/class_584; field_17154 parrotModel -c net/minecraft/class_992 net/minecraft/client/renderer/entity/layers/SaddleLayer - f Lnet/minecraft/class_583; field_4887 field_239409_b_ - f Lnet/minecraft/class_2960; field_4888 field_239408_a_ -c net/minecraft/class_3887 net/minecraft/client/renderer/entity/layers/LayerRenderer - m (Lnet/minecraft/class_583;Lnet/minecraft/class_2960;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFF)V method_23199 renderCutoutModel - m (Lnet/minecraft/class_583;Lnet/minecraft/class_583;Lnet/minecraft/class_2960;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFFFFF)V method_23196 renderCopyCutoutModel - m ()Lnet/minecraft/class_583; method_17165 getEntityModel - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1297;FFFFFF)V method_4199 render - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_2960; method_23194 getEntityTexture - f Lnet/minecraft/class_3883; field_17155 entityRenderer -c net/minecraft/class_944 net/minecraft/client/renderer/entity/layers/ShulkerColorLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1606;FFFFFF)V method_4115 render -c net/minecraft/class_994 net/minecraft/client/renderer/entity/layers/SheepWoolLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1472;FFFFFF)V method_4198 render - f Lnet/minecraft/class_2960; field_4892 TEXTURE - f Lnet/minecraft/class_598; field_4891 sheepModel -c net/minecraft/class_996 net/minecraft/client/renderer/entity/layers/SnowmanHeadLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1473;FFFFFF)V method_4201 render -c net/minecraft/class_997 net/minecraft/client/renderer/entity/layers/SlimeGelLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_23200 render - f Lnet/minecraft/class_583; field_4895 slimeModel -c net/minecraft/class_998 net/minecraft/client/renderer/entity/layers/SpinAttackEffectLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_4203 render - f Lnet/minecraft/class_2960; field_4898 field_204836_a - f Lnet/minecraft/class_630; field_21012 field_229143_b_ -c net/minecraft/class_1000 net/minecraft/client/renderer/entity/layers/SpiderEyesLayer - f Lnet/minecraft/class_1921; field_4902 RENDER_TYPE -c net/minecraft/class_4507 net/minecraft/client/renderer/entity/layers/StuckInBodyLayer - m (Lnet/minecraft/class_1309;)I method_22134 func_225631_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_22132 render - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1297;FFFF)V method_22130 func_225632_a_ -c net/minecraft/class_1002 net/minecraft/client/renderer/entity/layers/StayClothingLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1308;FFFFFF)V method_23204 render - f Lnet/minecraft/class_2960; field_4907 STRAY_CLOTHES_TEXTURES - f Lnet/minecraft/class_606; field_4908 layerModel -c net/minecraft/class_3885 net/minecraft/client/renderer/entity/layers/VillagerLevelPendantLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1309;FFFFFF)V method_17151 render - m (Ljava/lang/String;Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_17155 func_215351_a - m (Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap;)V method_17152 func_215348_a - m (Lit/unimi/dsi/fastutil/objects/Object2ObjectMap;Ljava/lang/String;Lnet/minecraft/class_2348;Ljava/lang/Object;)Lnet/minecraft/class_3888$class_3889; method_17153 func_215350_a - m (Ljava/lang/String;Lnet/minecraft/class_2348;Ljava/lang/Object;Ljava/lang/Object;)Lnet/minecraft/class_3888$class_3889; method_17154 func_215349_a - f Lnet/minecraft/class_3296; field_17151 field_215355_d - f Lit/unimi/dsi/fastutil/objects/Object2ObjectMap; field_17149 field_215353_b - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_17148 field_215352_a - f Lit/unimi/dsi/fastutil/objects/Object2ObjectMap; field_17150 field_215354_c - f Ljava/lang/String; field_17152 field_215356_e -c net/minecraft/class_1001 net/minecraft/client/renderer/entity/layers/TropicalFishPatternLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1474;FFFFFF)V method_4205 render - f Lnet/minecraft/class_612; field_17157 modelA - f Lnet/minecraft/class_615; field_4903 modelB -c net/minecraft/class_1004 net/minecraft/client/renderer/entity/layers/WitherAuraLayer - f Lnet/minecraft/class_2960; field_4910 WITHER_ARMOR - f Lnet/minecraft/class_621; field_4909 witherModel -c net/minecraft/class_1005 net/minecraft/client/renderer/entity/layers/WitchHeldItemLayer -c net/minecraft/class_1006 net/minecraft/client/renderer/entity/layers/WolfCollarLayer - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_1493;FFFFFF)V method_4209 render - f Lnet/minecraft/class_2960; field_4913 WOLF_COLLAR -c net/minecraft/class_1007 net/minecraft/client/renderer/entity/PlayerRenderer - m (Lnet/minecraft/class_742;Lnet/minecraft/class_2561;Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4213 renderName - m (Lnet/minecraft/class_742;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)V method_4215 render - m (Lnet/minecraft/class_742;Lnet/minecraft/class_4587;FFF)V method_4212 applyRotations - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_742;Lnet/minecraft/class_630;Lnet/minecraft/class_630;)V method_23205 renderItem - m (Lnet/minecraft/class_742;)Lnet/minecraft/class_2960; method_4216 getEntityTexture - m (Lnet/minecraft/class_742;F)Lnet/minecraft/class_243; method_23206 getRenderOffset - m (Lnet/minecraft/class_742;Lnet/minecraft/class_1268;)Lnet/minecraft/class_572$class_573; method_4210 func_241741_a_ - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_742;)V method_4220 renderRightArm - m (Lnet/minecraft/class_742;)V method_4218 setModelVisibilities - m (Lnet/minecraft/class_4587;Lnet/minecraft/class_4597;ILnet/minecraft/class_742;)V method_4221 renderLeftArm - m (Lnet/minecraft/class_742;Lnet/minecraft/class_4587;F)V method_4217 preRenderCallback -c net/minecraft/class_1800 net/minecraft/item/IItemPropertyGetter - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F call call -c net/minecraft/class_5272 net/minecraft/item/ItemModelsProperties - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_2960;Lnet/minecraft/class_1800;)V method_27879 registerProperty - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27887 func_239426_g_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27889 func_239428_i_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27888 func_239427_h_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27890 func_239429_j_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27891 func_239430_k_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27893 func_239432_m_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27892 func_239431_l_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27894 func_239433_n_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27895 func_239434_o_ - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_2960;)Lnet/minecraft/class_1800; method_27878 func_239417_a_ - m (Lnet/minecraft/class_1792;)Ljava/util/Map; method_27877 func_239416_a_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27880 func_239419_a_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27882 func_239421_b_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1800;)Lnet/minecraft/class_1800; method_27881 registerGlobalProperty - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27883 func_239422_c_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27885 func_239424_e_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27884 func_239423_d_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_638;Lnet/minecraft/class_1309;)F method_27886 func_239425_f_ - f Ljava/util/Map; field_24443 GLOBAL_PROPERTY_MAP - f Lnet/minecraft/class_1800; field_24446 field_239413_d_ - f Lnet/minecraft/class_2960; field_24444 DAMAGED - f Lnet/minecraft/class_1800; field_24447 field_239414_e_ - f Ljava/util/Map; field_24448 ITEM_PROPERTY_MAP - f Lnet/minecraft/class_2960; field_24445 DAMAGE -c net/minecraft/class_5272$class_5171 net/minecraft/item/ItemModelsProperties$Angle - m (JD)V method_27190 func_239449_a_ - m (Lnet/minecraft/class_5272$class_5171;J)Z method_27318 func_239451_a_ - m (Lnet/minecraft/class_5272$class_5171;)D method_27317 func_239450_a_ - m (Lnet/minecraft/class_5272$class_5171;JD)V method_27189 func_239452_a_ - m (J)Z method_27316 func_239448_a_ - f D field_23981 field_239446_b_ - f D field_23980 field_239445_a_ - f J field_23982 field_239447_c_ -c net/minecraft/class_5272$1 net/minecraft/item/ItemModelsProperties$1 - m (Lnet/minecraft/class_1937;D)D method_7736 func_239438_a_ - f D field_7910 field_239436_b_ - f J field_7913 field_239437_c_ - f D field_7911 field_239435_a_ -c net/minecraft/class_5272$2 net/minecraft/item/ItemModelsProperties$2 - m (Lnet/minecraft/class_638;)Lnet/minecraft/class_2338; method_27899 func_239444_a_ - m (Lnet/minecraft/class_1533;)D method_27896 func_239441_a_ - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2338; method_27897 func_239442_a_ - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)D method_27898 func_239443_a_ - f Lnet/minecraft/class_5272$class_5171; field_24449 field_239439_a_ - f Lnet/minecraft/class_5272$class_5171; field_24450 field_239440_b_ -c net/minecraft/class_4724 net/minecraft/client/renderer/texture/SpriteMap - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1059; method_24098 getAtlasTexture - m (Lnet/minecraft/class_4730;)Lnet/minecraft/class_1058; method_24097 getSprite - m ()V close close - f Ljava/util/Map; field_21746 atlasTextures -c net/minecraft/class_1044 net/minecraft/client/renderer/texture/Texture - m ()V method_23208 func_229147_a_ - m (Lnet/minecraft/class_1060;Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;Ljava/util/concurrent/Executor;)V method_18169 loadTexture - m ()V method_22604 func_229149_e_ - m ()V close close - m ()V method_23207 bindTexture - m (Lnet/minecraft/class_3300;)V method_4625 loadTexture - m (ZZ)V method_4527 setBlurMipmapDirect - m ()V method_4528 deleteGlTexture - m ()I method_4624 getGlTextureId - f Z field_5203 mipmap - f Z field_5205 blur - f I field_5204 glTextureId -c net/minecraft/class_1046 net/minecraft/client/renderer/texture/DownloadingTexture - m (Lnet/minecraft/class_1011;)V method_4534 setImage - m (Lnet/minecraft/class_1011;IIII)V method_22794 setAreaTransparent - m (Ljava/io/InputStream;)Lnet/minecraft/class_1011; method_22795 loadTexture - m (Ljava/io/InputStream;)V method_22797 func_229162_b_ - m (Lnet/minecraft/class_1011;)V method_22802 func_229166_e_ - m (Lnet/minecraft/class_3300;)V method_22799 func_229164_c_ - m (Lnet/minecraft/class_1011;IIII)V method_22796 setAreaOpaque - m (Lnet/minecraft/class_1011;)V method_22800 func_229165_d_ - m ()V method_22801 func_229157_a_ - m (Lnet/minecraft/class_1011;)V method_4531 upload - m (Lnet/minecraft/class_1011;)Lnet/minecraft/class_1011; method_22798 processLegacySkin - f Ljava/io/File; field_5210 cacheFile - f Z field_20842 legacySkin - f Z field_5215 textureUploaded - f Lorg/apache/logging/log4j/Logger; field_5212 LOGGER - f Ljava/lang/Runnable; field_20843 processTask - f Ljava/lang/String; field_5214 imageUrl - f Ljava/util/concurrent/CompletableFuture; field_20844 future -c net/minecraft/class_1043 net/minecraft/client/renderer/texture/DynamicTexture - m ()V method_22793 func_229153_f_ - m ()Lnet/minecraft/class_1011; method_4525 getTextureData - m ()V method_4524 updateDynamicTexture - m (Lnet/minecraft/class_1011;)V method_4526 setTextureData - f Lnet/minecraft/class_1011; field_5200 dynamicTextureData - f Lorg/apache/logging/log4j/Logger; field_25794 field_243504_d -c net/minecraft/class_1047 net/minecraft/client/renderer/texture/MissingTextureSprite - m (Lnet/minecraft/class_1059;IIIII)Lnet/minecraft/class_1047; method_4541 create - m ()Lnet/minecraft/class_1043; method_4540 getDynamicTexture - m ()Lnet/minecraft/class_1011; method_4538 func_217791_r - m ()Lnet/minecraft/class_1058$class_4727; method_24104 getSpriteInfo - m ()Lnet/minecraft/class_2960; method_4539 getLocation - f Lnet/minecraft/class_1058$class_4727; field_21748 spriteInfo - f Lnet/minecraft/class_1043; field_5220 dynamicTexture - f Lnet/minecraft/class_2960; field_5219 LOCATION - f Lnet/minecraft/class_3528; field_5221 IMAGE -c net/minecraft/class_4725 net/minecraft/client/renderer/texture/MipmapGenerator - m (Lnet/minecraft/class_1011;I)[Lnet/minecraft/class_1011; method_24102 generateMipmaps - m (I)F method_24099 getPow22 - m ([F)V method_24103 func_229174_a_ - m (IIIIZ)I method_24101 alphaBlend - m (IIIII)I method_24100 gammaBlend - f [F field_21747 POWS22 -c net/minecraft/class_4005 net/minecraft/client/renderer/texture/PreloadedTexture - m (Ljava/lang/Runnable;)V method_22807 func_229204_a_ - m (Lnet/minecraft/class_1049$class_4006;)Ljava/lang/Void; method_18149 func_215247_a - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;)Lnet/minecraft/class_1049$class_4006; method_18151 func_215249_a - m ()Ljava/util/concurrent/CompletableFuture; method_18148 getCompletableFuture - m (Lnet/minecraft/class_3300;)Lnet/minecraft/class_1049$class_4006; method_18152 func_215251_c - m (Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V method_22809 func_229206_a_ - m (Ljava/util/concurrent/Executor;)Ljava/util/concurrent/Executor; method_22808 getExecutor - m (Lnet/minecraft/class_1060;)V method_18150 func_215250_a - f Ljava/util/concurrent/CompletableFuture; field_17894 textureDataFuture -c net/minecraft/class_4608 net/minecraft/client/renderer/texture/OverlayTexture - m (Z)I method_23212 getV - m (FZ)I method_23624 getPackedUV - m ()V close close - m (II)I method_23625 getPackedUV - m ()V method_23213 teardownOverlayColor - m (F)I method_23210 getU - m ()V method_23209 setupOverlayColor - f I field_21444 NO_OVERLAY - f Lnet/minecraft/class_1043; field_21013 texture -c net/minecraft/class_1055 net/minecraft/client/renderer/texture/Stitcher - m (Lnet/minecraft/class_1055$class_1056;)Z method_4550 allocateSlot - m (Lnet/minecraft/class_1055$class_1056;)Z method_4552 expandAndAllocateSlot - m (Lnet/minecraft/class_1055$class_4726;)V method_4549 getStitchSlots - m ()I method_4555 getCurrentHeight - m ()I method_4554 getCurrentWidth - m ()V method_4557 doStitch - m (II)I method_4556 access$000 - m (II)I method_4551 getMipmapDimension - m (Lnet/minecraft/class_1055$class_4726;Lnet/minecraft/class_1055$class_1057;)V method_18336 func_229210_a_ - m (Lnet/minecraft/class_1055$class_1056;)Lnet/minecraft/class_1058$class_4727; method_21686 func_229212_c_ - m (Lnet/minecraft/class_1058$class_4727;)V method_4553 addSprite - m (Lnet/minecraft/class_1055$class_1056;)Ljava/lang/Integer; method_18339 func_217793_e - m (Lnet/minecraft/class_1055$class_1056;)Ljava/lang/Integer; method_18338 func_217795_d - m (Lnet/minecraft/class_1055$class_1056;)Lnet/minecraft/class_2960; method_18337 func_217794_c - f I field_5240 maxWidth - f I field_5242 currentWidth - f I field_5241 currentHeight - f Ljava/util/Set; field_5237 setStitchHolders - f Ljava/util/Comparator; field_18030 COMPARATOR_HOLDER - f I field_5238 maxHeight - f Ljava/util/List; field_5239 stitchSlots - f I field_5243 mipmapLevelStitcher -c net/minecraft/class_1055$class_1057 net/minecraft/client/renderer/texture/Stitcher$Slot - m (Ljava/util/function/Consumer;)V method_4568 getAllStitchSlots - m (Lnet/minecraft/class_1055$class_1056;)Z method_4566 addSlot - m ()Ljava/lang/String; toString toString - m ()Lnet/minecraft/class_1055$class_1056; method_4565 getStitchHolder - m ()I method_4567 getOriginY - m ()I method_4569 getOriginX - f Ljava/util/List; field_5255 subSlots - f I field_5250 height - f I field_5251 width - f I field_5252 originY - f I field_5253 originX - f Lnet/minecraft/class_1055$class_1056; field_5254 holder -c net/minecraft/class_1055$class_1056 net/minecraft/client/renderer/texture/Stitcher$Holder - m ()Ljava/lang/String; toString toString - f I field_5247 height - f I field_5248 width - f Lnet/minecraft/class_1058$class_4727; field_5249 spriteInfo -c net/minecraft/class_1055$class_4726 net/minecraft/client/renderer/texture/Stitcher$ISpriteLoader - m (Lnet/minecraft/class_1058$class_4727;IIII)V load load -c net/minecraft/class_1049 net/minecraft/client/renderer/texture/SimpleTexture - m (Lnet/minecraft/class_1011;ZZ)V method_22810 loadImage - m (Lnet/minecraft/class_1011;ZZ)V method_22811 func_229208_b_ - m (Lnet/minecraft/class_3300;)Lnet/minecraft/class_1049$class_4006; method_18153 getTextureData - m ()Lorg/apache/logging/log4j/Logger; method_18154 func_215245_f - f Lorg/apache/logging/log4j/Logger; field_5225 LOGGER - f Lnet/minecraft/class_2960; field_5224 textureLocation -c net/minecraft/class_1049$class_4006 net/minecraft/client/renderer/texture/SimpleTexture$TextureData - m ()V method_18158 checkException - m ()Lnet/minecraft/class_1084; method_18155 getMetadata - m ()Lnet/minecraft/class_1011; method_18157 getNativeImage - m ()V close close - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;)Lnet/minecraft/class_1049$class_4006; method_18156 getTextureData - f Lnet/minecraft/class_1084; field_17895 metadata - f Lnet/minecraft/class_1011; field_17896 nativeImage - f Ljava/io/IOException; field_17897 exception -c net/minecraft/class_1059 net/minecraft/client/renderer/texture/AtlasTexture - m (Lnet/minecraft/class_1058$class_4727;)Ljava/lang/String; method_21688 func_229216_a_ - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_1058$class_4727;IIIII)Lnet/minecraft/class_1058; method_4604 loadSprite - m (Lnet/minecraft/class_1059$class_4007;)V method_24198 setBlurMipmap - m (Lnet/minecraft/class_1059$class_4007;)V method_18159 upload - m ()Lnet/minecraft/class_2960; method_24106 getTextureLocation - m (Lnet/minecraft/class_3300;Ljava/util/Set;)Ljava/util/Collection; method_18164 makeSprites - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_1058$class_4727;IIIIILjava/util/concurrent/ConcurrentLinkedQueue;)V method_18162 func_229219_a_ - m (Lnet/minecraft/class_2960;)V method_18165 func_229222_c_ - m (ILjava/util/concurrent/ConcurrentLinkedQueue;Ljava/util/List;Lnet/minecraft/class_3300;Lnet/minecraft/class_1058$class_4727;IIII)V method_24105 func_229215_a_ - m ()V method_4612 updateAnimations - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_3300;Ljava/util/concurrent/ConcurrentLinkedQueue;)V method_18160 func_224738_a - m ()V method_4601 clear - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_1055;I)Ljava/util/List; method_18161 getStitchedSprites - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1058; method_4608 getSprite - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_4603 getSpritePath - m (Lnet/minecraft/class_3300;Ljava/util/stream/Stream;Lnet/minecraft/class_3695;I)Lnet/minecraft/class_1059$class_4007; method_18163 stitch - f Lnet/minecraft/class_2960; field_17898 LOCATION_PARTICLES_TEXTURE - f Lnet/minecraft/class_2960; field_5275 LOCATION_BLOCKS_TEXTURE - f Ljava/util/List; field_5276 listAnimatedSprites - f Ljava/util/Map; field_5280 mapUploadedSprites - f Lnet/minecraft/class_2960; field_21749 textureLocation - f Lorg/apache/logging/log4j/Logger; field_5278 LOGGER - f I field_17899 maximumTextureSize - f Ljava/util/Set; field_5277 sprites -c net/minecraft/class_1059$class_4007 net/minecraft/client/renderer/texture/AtlasTexture$SheetData - f I field_17902 height - f I field_21795 mipmapLevel - f Ljava/util/List; field_17903 sprites - f Ljava/util/Set; field_17900 spriteLocations - f I field_17901 width -c net/minecraft/class_1054 net/minecraft/client/renderer/StitcherException - m ()Ljava/util/Collection; method_21687 getSpriteInfos - f Ljava/util/Collection; field_20311 spriteInfos -c net/minecraft/class_1060 net/minecraft/client/renderer/texture/TextureManager - m (Ljava/lang/Runnable;)V method_22815 func_229268_c_ - m (Lnet/minecraft/class_2960;)V method_4618 bindTextureRaw - m (Ljava/lang/Runnable;)V method_22814 func_229266_b_ - m (Lnet/minecraft/class_2960;)V method_22816 func_229270_e_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1044;)Lnet/minecraft/class_1044; method_24303 func_230183_b_ - m (Lnet/minecraft/class_2960;)V method_22813 bindTexture - m (Ljava/lang/String;Lnet/minecraft/class_1043;)Lnet/minecraft/class_2960; method_4617 getDynamicTextureLocation - m (Lnet/minecraft/class_1044;)Ljava/lang/String; method_4621 func_230181_a_ - m (Lnet/minecraft/class_2960;)V method_4615 deleteTexture - m ()V close close - m (Lnet/minecraft/class_2960;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_18168 loadAsync - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1044;)V method_30299 func_243505_b - m (Lnet/minecraft/class_3300;Ljava/util/concurrent/Executor;Ljava/lang/Void;)V method_18167 func_229265_a_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1044;)V method_4616 loadTexture - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1044; method_4619 getTexture - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4005;)V method_18166 func_229264_a_ - m (Ljava/lang/Runnable;)V method_22812 execute - f Ljava/util/Map; field_5283 mapTextureCounters - f Ljava/util/Map; field_5286 mapTextureObjects - f Lorg/apache/logging/log4j/Logger; field_5288 LOGGER - f Lnet/minecraft/class_3300; field_5287 resourceManager - f Ljava/util/Set; field_5284 listTickables - f Lnet/minecraft/class_2960; field_5285 RESOURCE_LOCATION_EMPTY -c net/minecraft/class_1058 net/minecraft/client/renderer/texture/TextureAtlasSprite - m (D)F method_4580 getInterpolatedU - m (Lnet/minecraft/class_1058;)I method_24110 func_229232_a_ - m (Lnet/minecraft/class_1058;)[I method_24117 func_229239_e_ - m ()Ljava/lang/String; method_24120 func_229243_s_ - m ()V close close - m ()Ljava/lang/String; toString toString - m ()V method_4584 uploadMipmaps - m ()Z method_4599 hasAnimationMetadata - m (I)V method_4573 uploadFrames - m ()F method_23841 getAtlasSize - m ()Ljava/lang/String; method_24114 func_229236_c_ - m ()I method_4595 getHeight - m (Lnet/minecraft/class_1058;)Lnet/minecraft/class_1079; method_24115 func_229237_c_ - m ()F method_4575 getMaxV - m (Lnet/minecraft/class_1011;)Ljava/lang/String; method_24107 func_229229_a_ - m ()F method_4577 getMaxU - m ()Lnet/minecraft/class_2960; method_4598 getName - m (Lnet/minecraft/class_1058;)I method_24113 func_229235_b_ - m ()F method_23842 getUvShrinkRatio - m ()I method_4592 getFrameCount - m (D)F method_4570 getInterpolatedV - m ()Lnet/minecraft/class_1059; method_24119 getAtlasTexture - m (Lnet/minecraft/class_1058;)[I method_24118 func_229240_f_ - m (Lnet/minecraft/class_1058;II[Lnet/minecraft/class_1011;)V method_24111 func_229233_a_ - m (Lnet/minecraft/class_4588;)Lnet/minecraft/class_4588; method_24108 wrapBuffer - m ()Ljava/lang/String; method_24112 func_229234_b_ - m ()V method_4597 updateAnimation - m (III)Z method_4583 isPixelTransparent - m (Lnet/minecraft/class_1058$class_4728;)V method_24109 func_229231_a_ - m ()F method_4594 getMinU - m ()I method_4578 getWidth - m (Lnet/minecraft/class_1058;)Lnet/minecraft/class_1058$class_4727; method_24116 func_229238_d_ - m ()F method_4593 getMinV - m (II[Lnet/minecraft/class_1011;)V method_4579 uploadFrames - f Lnet/minecraft/class_1058$class_4727; field_21751 spriteInfo - f Lnet/minecraft/class_1079; field_5271 animationMetadata - f [Lnet/minecraft/class_1011; field_5262 frames - f F field_5270 minU - f I field_5258 x - f [I field_5264 framesY - f Lnet/minecraft/class_1059; field_21750 atlasTexture - f F field_5268 minV - f I field_5273 frameCounter - f I field_5272 tickCounter - f I field_5256 y - f [I field_5265 framesX - f F field_5269 maxU - f Lnet/minecraft/class_1058$class_4728; field_21752 interpolationData - f F field_5267 maxV -c net/minecraft/class_1058$1 net/minecraft/client/renderer/texture/TextureAtlasSprite$1 -c net/minecraft/class_1058$class_4727 net/minecraft/client/renderer/texture/TextureAtlasSprite$Info - m ()I method_24125 getSpriteHeight - m (Lnet/minecraft/class_1058$class_4727;)Lnet/minecraft/class_2960; method_24127 func_229254_d_ - m (Lnet/minecraft/class_1058$class_4727;)Lnet/minecraft/class_1079; method_24122 func_229249_a_ - m ()I method_24123 getSpriteWidth - m (Lnet/minecraft/class_1058$class_4727;)I method_24124 func_229251_b_ - m ()Lnet/minecraft/class_2960; method_24121 getSpriteLocation - m (Lnet/minecraft/class_1058$class_4727;)I method_24126 func_229253_c_ - f I field_21754 spriteWidth - f I field_21755 spriteHeight - f Lnet/minecraft/class_2960; field_21753 spriteLocation - f Lnet/minecraft/class_1079; field_21756 spriteAnimationMetadata -c net/minecraft/class_1058$class_4728 net/minecraft/client/renderer/texture/TextureAtlasSprite$InterpolationData - m ()V method_24128 uploadInterpolated - m (IIII)I method_24130 getPixelColor - m ()V close close - m (DII)I method_24129 mix - m (Lnet/minecraft/class_1058$class_4728;)V method_24131 func_229260_a_ - f [Lnet/minecraft/class_1011; field_21758 images - f Lnet/minecraft/class_1058; field_21757 field_229255_a_ -c net/minecraft/class_1061 net/minecraft/client/renderer/texture/ITickable - m ()V method_4622 tick -c net/minecraft/class_1066 net/minecraft/client/resources/DownloadingPackFinder - m ()Lnet/minecraft/class_3268; method_4633 getVanillaPack - m (Ljava/io/File;Ljava/lang/Void;Ljava/lang/Throwable;)V method_19436 func_217815_a_ - m (Ljava/io/File;)V method_19437 deleteQuiet - m (Ljava/lang/String;Ljava/io/File;)Z method_4641 checkHash - m (Ljava/lang/String;Ljava/io/File;Ljava/lang/Object;)Ljava/util/concurrent/CompletionStage; method_4634 func_217812_a_ - m (Lnet/minecraft/class_3288$class_5351;Ljava/util/function/Supplier;)Lnet/minecraft/class_3288; method_25453 func_239454_a_ - m (Ljava/io/File;)Lnet/minecraft/class_3259; method_25455 func_239459_b_ - m (Ljava/lang/String;Ljava/lang/String;)Ljava/util/concurrent/CompletableFuture; method_4640 downloadResourcePack - m (Ljava/io/File;Lnet/minecraft/class_5352;)Ljava/util/concurrent/CompletableFuture; method_4638 setServerPack - m ()V method_4643 clearDownloads - m (Ljava/io/File;)Lnet/minecraft/class_3262; method_25457 func_239462_e_ - m (Ljava/io/File;)Lnet/minecraft/class_3262; method_4637 func_239463_f_ - m ()V method_4642 clearResourcePack - m (Lnet/minecraft/class_3288$class_5351;)Lnet/minecraft/class_3288; method_25454 func_239453_a_ - m ()Lnet/minecraft/class_3262; method_4635 func_195739_f - m (Lnet/minecraft/class_310;Lnet/minecraft/class_435;)V method_4639 func_239455_a_ - m ()Ljava/util/Map; method_4636 getPackDownloadRequestProperties - m (Ljava/io/File;)Lnet/minecraft/class_3262; method_25456 func_239461_d_ - m (Ljava/io/File;)Lnet/minecraft/class_3262; method_16048 func_239460_c_ - f Ljava/util/concurrent/locks/ReentrantLock; field_5297 lockDownload - f Lorg/apache/logging/log4j/Logger; field_5298 LOGGER - f Lnet/minecraft/class_3288; field_5295 serverPack - f Ljava/util/concurrent/CompletableFuture; field_5294 currentDownload - f Ljava/util/regex/Pattern; field_5296 PATTERN_SHA1 - f Ljava/io/File; field_5292 serverPackDir - f Lnet/minecraft/class_1064; field_16263 resourceIndex - f Lnet/minecraft/class_3268; field_5293 vanillaPack -c net/minecraft/class_1066$2 net/minecraft/client/resources/DownloadingPackFinder$2 -c net/minecraft/class_1066$1 net/minecraft/client/resources/DownloadingPackFinder$1 -c net/minecraft/class_1064 net/minecraft/client/resources/ResourceIndex - m (Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Predicate;Lnet/minecraft/class_2960;)Z method_23843 func_229273_a_ - m (Ljava/lang/String;Ljava/lang/String;ILjava/util/function/Predicate;)Ljava/util/Collection; method_4632 getFiles - m (Lnet/minecraft/class_2960;)Ljava/io/File; method_4630 getFile - m (Ljava/lang/String;)Ljava/io/File; method_4631 getFile - f Lorg/apache/logging/log4j/Logger; field_5290 LOGGER - f Ljava/util/Map; field_21556 namespaceFiles - f Ljava/util/Map; field_5289 rootFiles -c net/minecraft/class_1065 net/minecraft/client/resources/VirtualAssetsPack - f Lnet/minecraft/class_1064; field_5291 field_195785_b -c net/minecraft/class_1067 net/minecraft/client/resources/FolderResourceIndex - m (Ljava/lang/String;Ljava/nio/file/Path;Ljava/nio/file/Path;)Lnet/minecraft/class_2960; method_23844 func_229274_a_ - m (Ljava/nio/file/Path;)Z method_4646 func_211687_a - m (Ljava/nio/file/Path;)Z method_4644 func_211686_b - m (Ljava/util/function/Predicate;Ljava/nio/file/Path;)Z method_23845 func_229275_a_ - f Ljava/io/File; field_5299 baseDir -c net/minecraft/class_1068 net/minecraft/client/resources/DefaultPlayerSkin - m (Ljava/util/UUID;)Z method_4650 isSlimSkin - m (Ljava/util/UUID;)Ljava/lang/String; method_4647 getSkinType - m ()Lnet/minecraft/class_2960; method_4649 getDefaultSkinLegacy - m (Ljava/util/UUID;)Lnet/minecraft/class_2960; method_4648 getDefaultSkin - f Lnet/minecraft/class_2960; field_5300 TEXTURE_ALEX - f Lnet/minecraft/class_2960; field_5301 TEXTURE_STEVE -c net/minecraft/class_1069 net/minecraft/client/resources/GrassColorReloadListener - m ([ILnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18661 apply - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)[I method_18662 prepare - f Lnet/minecraft/class_2960; field_5302 GRASS_LOCATION -c net/minecraft/class_1070 net/minecraft/client/resources/FoliageColorReloadListener - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)[I method_18660 prepare - m ([ILnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18659 apply - f Lnet/minecraft/class_2960; field_5303 FOLIAGE_LOCATION -c net/minecraft/class_3685 net/minecraft/client/resources/ColorMapLoader - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;)[I method_16049 loadColors -c net/minecraft/class_1073 net/minecraft/client/resources/LegacyResourcePackWrapper - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_4660 getMetaFileLocation - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_4658 toLegacyLocation - m ()Lcom/google/common/collect/ImmutableMap; method_4659 func_239470_b_ - m (Lcom/google/common/collect/ImmutableMap$Builder;Ljava/lang/String;Ljava/lang/String;)V method_29712 func_239468_a_ - f Ljava/util/Map; field_5318 field_211855_c - f Lnet/minecraft/class_3262; field_5316 locationMap - f Ljava/util/Map; field_5317 NEW_TO_LEGACY_MAP -c net/minecraft/class_4729 net/minecraft/client/resources/LegacyResourcePackWrapperV4 - m (Lnet/minecraft/class_1011;Lnet/minecraft/class_1011;IIIIIIIZZ)V method_24132 func_229284_a_ - m (Ljava/io/InputStream;)Ljava/io/InputStream; method_24199 func_229285_a_ - m (Ljava/util/HashMap;)V method_24136 func_229288_a_ - m (Ljava/io/InputStream;)Ljava/io/InputStream; method_24133 func_229289_b_ - m (Ljava/lang/String;)Ljava/lang/String; method_24135 func_229287_a_ - m (Ljava/io/InputStream;)Ljava/io/InputStream; method_24137 func_229290_c_ - m (Ljava/lang/String;)Ljava/lang/String; method_24139 func_229291_c_ - m (Ljava/io/InputStream;Ljava/io/InputStream;IIIII)Ljava/io/InputStream; method_24134 func_229286_a_ - m (Ljava/io/InputStream;)Ljava/io/InputStream; method_24138 func_229292_d_ - f Ljava/util/Set; field_21765 BANNERS - f Ljava/util/Map; field_21762 field_239475_d_ - f Lnet/minecraft/class_3262; field_21766 field_239479_h_ - f Lnet/minecraft/class_2960; field_21761 OLD_IRON_GOLEM_LOCATION - f Lnet/minecraft/class_2960; field_21759 SHIELD_BASE - f Ljava/util/List; field_21763 PATTERNS - f Lnet/minecraft/class_2960; field_21760 BANNER_BASE - f Ljava/util/Set; field_21764 SHIELDS -c net/minecraft/class_4074 net/minecraft/client/renderer/texture/PotionSpriteUploader - m (Lnet/minecraft/class_1291;)Lnet/minecraft/class_1058; method_18663 getSprite -c net/minecraft/class_1071 net/minecraft/client/resources/SkinManager - m (Lcom/mojang/authlib/GameProfile;ZLnet/minecraft/class_1071$class_1072;)V method_4653 func_229293_a_ - m (Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/class_1071$class_1072;)Lnet/minecraft/class_2960; method_4651 loadSkin - m (Lcom/mojang/authlib/GameProfile;)Ljava/util/Map; method_4654 loadSkinFromCache - m (Lcom/mojang/authlib/GameProfile;Lnet/minecraft/class_1071$class_1072;Z)V method_4652 loadProfileTextures - m (Lnet/minecraft/class_1071$class_1072;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/class_2960;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V method_22817 func_229294_a_ - m (Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;)Lnet/minecraft/class_2960; method_4656 loadSkin - m (Ljava/util/Map;Lnet/minecraft/class_1071$class_1072;)V method_22818 func_229295_a_ - m (Ljava/util/Map;Lnet/minecraft/class_1071$class_1072;)V method_4655 func_229297_b_ - m (Ljava/util/Map;Lnet/minecraft/class_1071$class_1072;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;)V method_22819 func_229296_a_ - f Lcom/google/common/cache/LoadingCache; field_5306 skinCacheLoader - f Lnet/minecraft/class_1060; field_5304 textureManager - f Ljava/io/File; field_5305 skinCacheDir - f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_5308 sessionService -c net/minecraft/class_1071$class_1072 net/minecraft/client/resources/SkinManager$ISkinAvailableCallback - m (Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/class_2960;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V onSkinTextureAvailable onSkinTextureAvailable -c net/minecraft/class_1071$1 net/minecraft/client/resources/SkinManager$1 - m (Ljava/lang/Object;)Ljava/lang/Object; load load - m (Ljava/lang/String;)Ljava/util/Map; method_30300 load - f Lcom/mojang/authlib/minecraft/MinecraftSessionService; field_25795 field_243506_a - f Lnet/minecraft/class_1071; field_25796 field_152787_a -c net/minecraft/class_4044 net/minecraft/client/renderer/texture/PaintingSpriteUploader - m (Lnet/minecraft/class_1535;)Lnet/minecraft/class_1058; method_18345 getSpriteForPainting - m ()Lnet/minecraft/class_1058; method_18342 getBackSprite - f Lnet/minecraft/class_2960; field_18032 LOCATION_BACK_SPRITE -c net/minecraft/class_4075 net/minecraft/client/renderer/texture/SpriteUploader - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_24140 resolveLocation - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1058; method_18667 getSprite - m ()V close close - m (Lnet/minecraft/class_1059$class_4007;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18666 apply - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Lnet/minecraft/class_1059$class_4007; method_18668 prepare - m ()Ljava/util/stream/Stream; method_18665 getResourceLocations - f Lnet/minecraft/class_1059; field_18230 textureAtlas - f Ljava/lang/String; field_21767 prefix -c net/minecraft/class_4008 net/minecraft/client/util/Splashes - m (Ljava/lang/String;)Z method_18664 func_215277_a - m ()Ljava/lang/String; method_18174 getSplashText - m (Ljava/util/List;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18175 apply - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Ljava/util/List; method_18176 prepare - f Lnet/minecraft/class_320; field_18934 gameSession - f Ljava/util/List; field_17906 possibleSplashes - f Lnet/minecraft/class_2960; field_17904 SPLASHES_LOCATION - f Ljava/util/Random; field_17905 RANDOM -c net/minecraft/class_5491 net/minecraft/client/util/BidiReorderer - m (Lnet/minecraft/class_5348;Z)Lnet/minecraft/class_5481; method_30922 func_243508_a - m (Ljava/lang/String;)Ljava/lang/String; method_30921 func_243507_a -c net/minecraft/class_1078 net/minecraft/client/resources/ClientLanguageMap - m (Ljava/util/List;Ljava/util/Map;)V method_4676 func_239498_a_ - m (Lnet/minecraft/class_3300;Ljava/util/List;)Lnet/minecraft/class_1078; method_4675 func_239497_a_ - f Z field_25289 field_239496_d_ - f Lorg/apache/logging/log4j/Logger; field_5332 field_239493_a_ - f Ljava/util/Map; field_5330 field_239495_c_ -c net/minecraft/class_1077 net/minecraft/client/resources/Language - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_1077;)I method_4673 compareTo - m ()Ljava/lang/String; getName getName - m ()Ljava/lang/String; toString toString - m (Ljava/lang/Object;)I compareTo compareTo - m ()Ljava/lang/String; getRegion getRegion - m ()I hashCode hashCode - m ()Ljava/lang/String; getCode getCode - m ()Z method_4672 isBidirectional - f Ljava/lang/String; field_5327 name - f Z field_5328 bidirectional - f Ljava/lang/String; field_5326 languageCode - f Ljava/lang/String; field_5329 region -c net/minecraft/class_1074 net/minecraft/client/resources/I18n - m (Ljava/lang/String;)Z method_4663 hasKey - m (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; method_4662 format - m (Lnet/minecraft/class_2477;)V method_29391 func_239502_a_ - f Lnet/minecraft/class_2477; field_25290 field_239501_a_ -c net/minecraft/class_1076 net/minecraft/client/resources/LanguageManager - m ()Lnet/minecraft/class_1077; method_4669 getCurrentLanguage - m (Ljava/util/stream/Stream;)Ljava/util/Map; method_29393 func_239506_a_ - m ()Ljava/util/SortedSet; method_4665 getLanguages - m (Lnet/minecraft/class_1077;)V method_4667 setCurrentLanguage - m (Ljava/util/Map;Lnet/minecraft/class_3262;)V method_29392 func_239505_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_1077; method_4668 getLanguage - f Lnet/minecraft/class_1077; field_25292 field_239504_e_ - f Ljava/util/Map; field_5324 languageMap - f Lorg/apache/logging/log4j/Logger; field_5325 LOGGER - f Ljava/lang/String; field_5323 currentLanguage - f Lnet/minecraft/class_1077; field_25291 field_239503_b_ -c net/minecraft/class_1079 net/minecraft/client/resources/data/AnimationMetadataSection - m (II)Z method_24142 isMultipleOf - m (I)I method_4686 getFrameHeight - m (I)Lnet/minecraft/class_1080; method_4681 getAnimationFrame - m ()Ljava/util/Set; method_4688 getFrameIndexSet - m ()I method_4682 getFrameCount - m (I)I method_4680 getFrameIndex - m ()I method_4684 getFrameTime - m (II)Lcom/mojang/datafixers/util/Pair; method_24141 getSpriteSize - m ()Z method_4685 isInterpolate - m (I)I method_4687 getFrameWidth - m (II)Lcom/mojang/datafixers/util/Pair; method_24143 getFrameSize - m (I)I method_4683 getFrameTimeSingle - f Lnet/minecraft/class_1079; field_21768 EMPTY - f I field_5336 frameHeight - f Ljava/util/List; field_5339 animationFrames - f I field_5334 frameTime - f Z field_5335 interpolate - f Lnet/minecraft/class_1081; field_5337 SERIALIZER - f I field_5338 frameWidth -c net/minecraft/class_1079$1 net/minecraft/client/resources/data/AnimationMetadataSection$1 -c net/minecraft/class_1080 net/minecraft/client/resources/data/AnimationFrame - m ()Z method_4689 hasNoTime - m ()I method_4691 getFrameTime - m ()I method_4690 getFrameIndex - f I field_5340 frameTime - f I field_5341 frameIndex -c net/minecraft/class_3888 net/minecraft/client/resources/data/VillagerMetadataSection - m ()Lnet/minecraft/class_3888$class_3889; method_17167 func_217826_a - f Lnet/minecraft/class_3888$class_3889; field_17159 field_217828_b - f Lnet/minecraft/class_3890; field_17158 field_217827_a -c net/minecraft/class_3888$class_3889 net/minecraft/client/resources/data/VillagerMetadataSection$HatType - m ()[Lnet/minecraft/class_3888$class_3889; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3888$class_3889; valueOf valueOf - m ()Ljava/lang/String; method_17168 func_217823_a - m (Lnet/minecraft/class_3888$class_3889;)Lnet/minecraft/class_3888$class_3889; method_17169 func_217822_a - m (Ljava/lang/String;)Lnet/minecraft/class_3888$class_3889; method_17170 func_217821_a - f Lnet/minecraft/class_3888$class_3889; field_17160 NONE - f Ljava/lang/String; field_17164 field_217825_e - f [Lnet/minecraft/class_3888$class_3889; field_17165 $VALUES - f Lnet/minecraft/class_3888$class_3889; field_17161 PARTIAL - f Lnet/minecraft/class_3888$class_3889; field_17162 FULL - f Ljava/util/Map; field_17163 field_217824_d -c net/minecraft/class_1081 net/minecraft/client/resources/data/AnimationMetadataSectionSerializer - m (ILcom/google/gson/JsonElement;)Lnet/minecraft/class_1080; method_4693 parseAnimationFrame - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1079; method_4692 deserialize -c net/minecraft/class_3890 net/minecraft/client/renderer/texture/TextureAtlasSpriteStitcher - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3888; method_17171 deserialize -c net/minecraft/class_1082 net/minecraft/client/resources/data/LanguageMetadataSection - m ()Ljava/util/Collection; method_4694 getLanguages - f Lnet/minecraft/class_1083; field_5343 field_195818_a - f Ljava/util/Collection; field_5342 languages -c net/minecraft/class_1083 net/minecraft/client/resources/data/LanguageMetadataSectionSerializer - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1082; method_4695 deserialize -c net/minecraft/class_1084 net/minecraft/client/resources/data/TextureMetadataSection - m ()Z method_4696 getTextureBlur - m ()Z method_4697 getTextureClamp - f Z field_5346 textureBlur - f Z field_5345 textureClamp - f Lnet/minecraft/class_1085; field_5344 SERIALIZER -c net/minecraft/class_1085 net/minecraft/client/resources/data/TextureMetadataSectionSerializer - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1084; method_4698 deserialize -c net/minecraft/class_1086 net/minecraft/client/renderer/model/ModelRotation - m (II)Lnet/minecraft/class_1086; method_4699 getModelRotation - m (Lnet/minecraft/class_1086;)Lnet/minecraft/class_1086; method_4700 func_229305_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_1086; valueOf valueOf - m ()[Lnet/minecraft/class_1086; values values - m (II)I method_4703 combineXY - m (Lnet/minecraft/class_1086;)Ljava/lang/Integer; method_4701 func_229306_b_ - f I field_5364 combinedXY - f Lnet/minecraft/class_1086; field_5348 X180_Y90 - f Lnet/minecraft/class_1086; field_5356 X180_Y180 - f Lnet/minecraft/class_1086; field_5359 X180_Y270 - f Lnet/minecraft/class_1086; field_5354 X90_Y270 - f Lnet/minecraft/class_4990; field_23374 orientation - f Lnet/minecraft/class_1086; field_5358 X180_Y0 - f Lnet/minecraft/class_4590; field_23373 transformation - f Lnet/minecraft/class_1086; field_5352 X270_Y270 - f Lnet/minecraft/class_1086; field_5353 X270_Y0 - f Lnet/minecraft/class_1086; field_5349 X270_Y90 - f Lnet/minecraft/class_1086; field_5361 X270_Y180 - f Lnet/minecraft/class_1086; field_5350 X0_Y0 - f Lnet/minecraft/class_1086; field_5351 X90_Y0 - f Ljava/util/Map; field_5357 MAP_ROTATIONS - f Lnet/minecraft/class_1086; field_5360 X90_Y90 - f Lnet/minecraft/class_1086; field_5367 X90_Y180 - f Lnet/minecraft/class_1086; field_5366 X0_Y90 - f Lnet/minecraft/class_1086; field_5355 X0_Y180 - f Lnet/minecraft/class_1086; field_5347 X0_Y270 - f [Lnet/minecraft/class_1086; field_5365 $VALUES -c net/minecraft/class_1087 net/minecraft/client/renderer/model/IBakedModel - m ()Z method_24304 isSideLit - m ()Z method_4713 isBuiltInRenderer - m ()Lnet/minecraft/class_1058; method_4711 getParticleTexture - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;Ljava/util/Random;)Ljava/util/List; method_4707 getQuads - m ()Lnet/minecraft/class_806; method_4710 getOverrides - m ()Z method_4708 isAmbientOcclusion - m ()Z method_4712 isGui3d - m ()Lnet/minecraft/class_809; method_4709 getItemCameraTransforms -c net/minecraft/class_4730 net/minecraft/client/renderer/model/RenderMaterial - m ()I hashCode hashCode - m ()Lnet/minecraft/class_2960; method_24144 getAtlasLocation - m (Lnet/minecraft/class_4597;Ljava/util/function/Function;Z)Lnet/minecraft/class_4588; method_30001 getItemRendererBuffer - m (Ljava/lang/Object;)Z equals equals - m (Ljava/util/function/Function;)Lnet/minecraft/class_1921; method_24146 getRenderType - m (Lnet/minecraft/class_4597;Ljava/util/function/Function;)Lnet/minecraft/class_4588; method_24145 getBuffer - m ()Lnet/minecraft/class_1058; method_24148 getSprite - m ()Lnet/minecraft/class_2960; method_24147 getTextureLocation - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2960; field_21770 textureLocation - f Lnet/minecraft/class_1921; field_21771 renderType - f Lnet/minecraft/class_2960; field_21769 atlasLocation -c net/minecraft/class_1090 net/minecraft/client/renderer/model/BuiltInModel - f Lnet/minecraft/class_806; field_5405 overrides - f Lnet/minecraft/class_1058; field_16594 sprite - f Lnet/minecraft/class_809; field_5404 cameraTransforms - f Z field_21862 isSideLit -c net/minecraft/class_1092 net/minecraft/client/renderer/model/ModelManager - m ()V close close - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)Z method_21611 needsRenderUpdate - m ()Lnet/minecraft/class_773; method_4743 getBlockModelShapes - m (Lnet/minecraft/class_1088;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18179 apply - m (I)V method_24152 setMaxMipmapLevel - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Lnet/minecraft/class_1088; method_18178 prepare - m ()Lnet/minecraft/class_1087; method_4744 getMissingModel - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1059; method_24153 getAtlasTexture - m (Lnet/minecraft/class_1091;)Lnet/minecraft/class_1087; method_4742 getModel - f Lnet/minecraft/class_1060; field_21776 textureManager - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_20278 stateModelIds - f Ljava/util/Map; field_5408 modelRegistry - f I field_21777 maxMipmapLevel - f Lnet/minecraft/class_1087; field_5407 defaultModel - f Lnet/minecraft/class_773; field_5410 modelProvider - f Lnet/minecraft/class_4724; field_21775 atlases - f Lnet/minecraft/class_324; field_20277 blockColors -c net/minecraft/class_1088 net/minecraft/client/renderer/model/ModelBakery - m (Lnet/minecraft/class_1091;)V method_4727 loadTopModel - m (Lnet/minecraft/class_2680;)V method_4716 func_229326_a_ - m ()Ljava/util/Map; method_4734 getTopBakedModels - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2689; method_4736 func_229349_d_ - m (Lcom/mojang/datafixers/util/Pair;)V method_24149 func_229330_a_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_816;Ljava/util/List;)Lnet/minecraft/class_1088$class_4455; method_21599 func_229328_a_ - m (Ljava/util/Map;Lnet/minecraft/class_2960;Lcom/mojang/datafixers/util/Pair;Ljava/util/Map;Lnet/minecraft/class_1091;Lnet/minecraft/class_2680;)V method_21604 func_229341_a_ - m (I)Lnet/minecraft/class_2960; method_22820 func_229323_a_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1100; method_4726 getUnbakedModel - m (Lnet/minecraft/class_793;)V method_4719 func_229347_b_ - m (Lnet/minecraft/class_3298;)Lcom/mojang/datafixers/util/Pair; method_4737 func_229345_a_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_3665;)Lnet/minecraft/class_1087; method_15878 bake - m (Lnet/minecraft/class_2248;Ljava/util/Map;Lnet/minecraft/class_2680;)Z method_4739 func_229325_a_ - m (Ljava/lang/Iterable;)V method_21603 registerModelIds - m (Lnet/minecraft/class_793;)V method_4721 func_229332_a_ - m (Lnet/minecraft/class_2960;)V method_4715 loadBlockstate - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2680;)V method_4717 func_229343_a_ - m (Lnet/minecraft/class_1060;Lnet/minecraft/class_3695;)Lnet/minecraft/class_4724; method_18177 uploadTextures - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_793; method_4718 loadModel - m (Lnet/minecraft/class_2769;Ljava/lang/String;)Ljava/lang/Comparable; method_4724 parseValue - m (Ljava/util/HashSet;)V method_24150 func_229337_a_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_807;Ljava/util/List;)Lnet/minecraft/class_1088$class_4455; method_21598 func_229327_a_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2689;)V method_4723 func_229344_a_ - m ()Lit/unimi/dsi/fastutil/objects/Object2IntMap; method_21605 getStateModelIds - m (Lnet/minecraft/class_1088$class_4455;)Ljava/util/Set; method_21600 func_229334_a_ - m (Ljava/util/Map;Lnet/minecraft/class_816;Ljava/util/List;Lnet/minecraft/class_2680;)V method_4738 func_229339_a_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1100;)V method_4729 putModel - m (Lcom/mojang/datafixers/util/Pair;)Z method_24151 func_229346_b_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_23216 func_229351_f_ - m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_21602 func_229336_a_ - m (Ljava/util/Set;Lnet/minecraft/class_1100;)Ljava/util/stream/Stream; method_4732 func_229342_a_ - m (Lnet/minecraft/class_1088$class_4455;Ljava/util/Set;)V method_21601 func_229335_a_ - m (Ljava/util/Map;Lnet/minecraft/class_2960;Lnet/minecraft/class_2680;)V method_4720 func_229340_a_ - m (Lnet/minecraft/class_1088$class_4455;)Lnet/minecraft/class_1088$class_4455; method_21606 func_229348_b_ - m (Ljava/util/Map;Lnet/minecraft/class_807;Ljava/util/List;Lnet/minecraft/class_816;Lcom/mojang/datafixers/util/Pair;Lnet/minecraft/class_790;Lnet/minecraft/class_2680;)V method_4722 func_229338_a_ - m (Lnet/minecraft/class_2960;)V method_4733 func_229350_e_ - m (ILnet/minecraft/class_2680;)V method_21597 func_229324_a_ - m (Lcom/google/common/collect/ImmutableList;Lnet/minecraft/class_2689;Ljava/util/Map;Ljava/util/List;Lnet/minecraft/class_816;Lcom/mojang/datafixers/util/Pair;Lnet/minecraft/class_790;Lnet/minecraft/class_2960;Lcom/mojang/datafixers/util/Pair;Ljava/lang/String;Lnet/minecraft/class_807;)V method_4731 func_229329_a_ - m (Lnet/minecraft/class_2689;Ljava/lang/String;)Ljava/util/function/Predicate; method_4725 parseVariantKey - m (Lcom/mojang/datafixers/util/Pair;Ljava/util/Map$Entry;)Z method_4730 func_229331_a_ - f Lnet/minecraft/class_2689; field_5395 STATE_CONTAINER_ITEM_FRAME - f Lnet/minecraft/class_4730; field_5381 LOCATION_LAVA_FLOW - f Lnet/minecraft/class_4724; field_21774 spriteMap - f Lnet/minecraft/class_3300; field_5379 resourceManager - f Lnet/minecraft/class_4730; field_5397 LOCATION_FIRE_0 - f Lnet/minecraft/class_4730; field_21557 LOCATION_SHIELD_BASE - f Ljava/util/Map; field_5396 BUILT_IN_MODELS - f Ljava/lang/String; field_5371 MISSING_MODEL_MESH - f Lnet/minecraft/class_4730; field_5388 LOCATION_WATER_OVERLAY - f Lnet/minecraft/class_793; field_5389 MODEL_ENTITY - f Ljava/util/List; field_21772 DESTROY_RENDER_TYPES - f Ljava/util/Map; field_5376 unbakedModels - f Lcom/google/common/base/Splitter; field_5372 EQUALS_SPLITTER - f Ljava/util/Map; field_5394 topUnbakedModels - f Lnet/minecraft/class_801; field_5384 ITEM_MODEL_GENERATOR - f Ljava/util/List; field_20848 DESTROY_STAGES - f Lnet/minecraft/class_790$class_791; field_5399 containerHolder - f Lnet/minecraft/class_4730; field_5370 LOCATION_FIRE_1 - f Ljava/util/Map; field_5383 STATE_CONTAINER_OVERRIDES - f Lnet/minecraft/class_324; field_20272 blockColors - f Lnet/minecraft/class_4730; field_5391 LOCATION_WATER_FLOW - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_20274 stateModelIds - f Lnet/minecraft/class_1091; field_5374 MODEL_MISSING - f Lnet/minecraft/class_4730; field_21558 LOCATION_SHIELD_NO_PATTERN - f Ljava/util/Map; field_17907 sheetData - f Ljava/lang/String; field_21773 MODEL_MISSING_STRING - f Lnet/minecraft/class_793; field_5400 MODEL_GENERATED - f Lnet/minecraft/class_4730; field_20847 LOCATION_BANNER_BASE - f Ljava/util/Set; field_5378 LOCATIONS_BUILTIN_TEXTURES - f Lcom/google/common/base/Splitter; field_5373 SPLITTER_COMMA - f Ljava/util/Map; field_5398 bakedModels - f I field_20273 counterModelId - f Ljava/util/Map; field_5387 topBakedModels - f Lorg/apache/logging/log4j/Logger; field_5380 LOGGER - f Ljava/util/List; field_21020 DESTROY_LOCATIONS - f Ljava/util/Set; field_5390 unbakedModelLoadingQueue -c net/minecraft/class_1088$class_1089 net/minecraft/client/renderer/model/ModelBakery$BlockStateDefinitionException -c net/minecraft/class_1088$class_4455 net/minecraft/client/renderer/model/ModelBakery$ModelListWrapper - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_816;Ljava/util/Collection;)Lnet/minecraft/class_1088$class_4455; method_21607 makeWrapper - m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2680;Lnet/minecraft/class_819;)Z method_21610 func_225338_a - m (Lnet/minecraft/class_2680;Ljava/util/Collection;)Ljava/util/List; method_21609 getColorValues - m (Ljava/lang/Object;)Z equals equals - m ()I hashCode hashCode - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1100;Ljava/util/Collection;)Lnet/minecraft/class_1088$class_4455; method_21608 makeWrapper - f Ljava/util/List; field_20275 models - f Ljava/util/List; field_20276 colorValues -c net/minecraft/class_3665 net/minecraft/client/renderer/model/IModelTransform - m ()Z method_3512 isUvLock - m ()Lnet/minecraft/class_4590; method_3509 getRotation -c net/minecraft/class_1091 net/minecraft/client/renderer/model/ModelResourceLocation - m ()Ljava/lang/String; method_4740 getVariant - m (Ljava/lang/String;)[Ljava/lang/String; method_4741 parsePathString - f Ljava/lang/String; field_5406 variant -c net/minecraft/class_1093 net/minecraft/client/renderer/model/SimpleBakedModel - f Ljava/util/List; field_5411 generalQuads - f Z field_5415 ambientOcclusion - f Lnet/minecraft/class_809; field_5417 cameraTransforms - f Z field_5413 gui3d - f Ljava/util/Map; field_5414 faceQuads - f Lnet/minecraft/class_806; field_5412 itemOverrideList - f Lnet/minecraft/class_1058; field_5416 texture - f Z field_21864 isSideLit -c net/minecraft/class_1093$class_1094 net/minecraft/client/renderer/model/SimpleBakedModel$Builder - m (Lnet/minecraft/class_777;)Lnet/minecraft/class_1093$class_1094; method_4748 addGeneralQuad - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_777;)Lnet/minecraft/class_1093$class_1094; method_4745 addFaceQuad - m ()Lnet/minecraft/class_1087; method_4746 build - m (Lnet/minecraft/class_1058;)Lnet/minecraft/class_1093$class_1094; method_4747 setTexture - f Z field_5421 builderAmbientOcclusion - f Z field_21865 builderGui3d - f Lnet/minecraft/class_1058; field_5424 builderTexture - f Z field_5420 isSideLit - f Lnet/minecraft/class_806; field_5423 builderItemOverrideList - f Ljava/util/Map; field_5422 builderFaceQuads - f Lnet/minecraft/class_809; field_5418 builderCameraTransforms - f Ljava/util/List; field_5419 builderGeneralQuads -c net/minecraft/class_1095 net/minecraft/client/renderer/model/MultipartBakedModel - f Ljava/util/Map; field_5431 bitSetCache - f Ljava/util/List; field_5427 selectors - f Lnet/minecraft/class_809; field_5426 cameraTransforms - f Z field_5430 ambientOcclusion - f Z field_5429 gui3D - f Lnet/minecraft/class_806; field_5428 overrides - f Lnet/minecraft/class_1058; field_5425 particleTexture - f Z field_21863 isSideLit -c net/minecraft/class_1095$class_1096 net/minecraft/client/renderer/model/MultipartBakedModel$Builder - m (Ljava/util/function/Predicate;Lnet/minecraft/class_1087;)V method_4749 putModel - m ()Lnet/minecraft/class_1087; method_4750 build - f Ljava/util/List; field_5432 selectors -c net/minecraft/class_1097 net/minecraft/client/renderer/model/WeightedBakedModel - f I field_5433 totalWeight - f Ljava/util/List; field_5434 models - f Lnet/minecraft/class_1087; field_5435 baseModel -c net/minecraft/class_1097$class_1098 net/minecraft/client/renderer/model/WeightedBakedModel$Builder - m (Lnet/minecraft/class_1087;I)Lnet/minecraft/class_1097$class_1098; method_4752 add - m ()Lnet/minecraft/class_1087; method_4751 build - f Ljava/util/List; field_5436 listItems -c net/minecraft/class_1097$class_1099 net/minecraft/client/renderer/model/WeightedBakedModel$WeightedModel - f Lnet/minecraft/class_1087; field_5437 model -c net/minecraft/class_1100 net/minecraft/client/renderer/model/IUnbakedModel - m (Lnet/minecraft/class_1088;Ljava/util/function/Function;Lnet/minecraft/class_3665;Lnet/minecraft/class_2960;)Lnet/minecraft/class_1087; method_4753 bakeModel - m ()Ljava/util/Collection; method_4755 getDependencies - m (Ljava/util/function/Function;Ljava/util/Set;)Ljava/util/Collection; method_4754 getTextures -c net/minecraft/class_1101 net/minecraft/client/audio/TickableSound - m ()V method_24876 finishPlaying - f Z field_5438 donePlaying -c net/minecraft/class_1102 net/minecraft/client/audio/LocatableSound - m ()Ljava/lang/String; toString toString - f F field_5442 volume - f Z field_5446 repeat - f F field_5441 pitch - f D field_5439 x - f I field_5451 repeatDelay - f Lnet/minecraft/class_1111; field_5444 sound - f Lnet/minecraft/class_1113$class_1114; field_5440 attenuationType - f Z field_18936 global - f Lnet/minecraft/class_2960; field_5448 positionedSoundLocation - f D field_5450 y - f Z field_18935 priority - f D field_5449 z - f Lnet/minecraft/class_3419; field_5447 category -c net/minecraft/class_4508 net/minecraft/client/audio/BeeAngrySound -c net/minecraft/class_1104 net/minecraft/client/audio/IAmbientSoundHandler - m ()V method_4756 tick -c net/minecraft/class_4510 net/minecraft/client/audio/BeeSound - m ()F method_22138 getMaxPitch - m ()Lnet/minecraft/class_1101; method_22135 getNextSound - m ()Z method_22136 shouldSwitchSound - m ()F method_22137 getMinPitch - f Z field_20531 hasSwitchedSound - f Lnet/minecraft/class_4466; field_20530 beeInstance -c net/minecraft/class_4509 net/minecraft/client/audio/BeeFlightSound -c net/minecraft/class_4897 net/minecraft/client/audio/BiomeSoundHandler - m (Lnet/minecraft/class_4968;)V method_26271 func_239521_a_ - m (Lnet/minecraft/class_4967;)V method_26270 func_239520_a_ - m (Lnet/minecraft/class_1959;Lnet/minecraft/class_3414;)V method_25460 func_239522_a_ - m (Lnet/minecraft/class_3414;Lnet/minecraft/class_1959;Lnet/minecraft/class_4897$class_4898;)Lnet/minecraft/class_4897$class_4898; method_25459 func_239519_a_ - m ()F method_26272 getDarknessAmbienceChance - f Lnet/minecraft/class_4543; field_22798 biomeManager - f Ljava/util/Optional; field_22802 currentAmbientAdditionalSound - f Lnet/minecraft/class_1144; field_22797 soundHandler - f Ljava/util/Random; field_22799 random - f F field_23189 darknessAmbienceChance - f Lnet/minecraft/class_1959; field_22804 currentBiome - f Ljava/util/Optional; field_22801 currentAmbientMoodSound - f Lit/unimi/dsi/fastutil/objects/Object2ObjectArrayMap; field_22800 activeBiomeSoundsMap - f Lnet/minecraft/class_746; field_22796 player -c net/minecraft/class_4897$class_4898 net/minecraft/client/audio/BiomeSoundHandler$Sound - m ()V method_25464 fadeOutSound - m ()V method_25465 fadeInSound - f I field_22805 fadeSpeed - f I field_22806 fadeInTicks -c net/minecraft/class_1103 net/minecraft/client/audio/ElytraSound - f Lnet/minecraft/class_746; field_5452 player - f I field_5453 time -c net/minecraft/class_4277 net/minecraft/client/audio/BubbleColumnAmbientSoundHandler - m (Lnet/minecraft/class_2680;)Z method_29714 func_239528_a_ - f Z field_19194 firstTick - f Lnet/minecraft/class_746; field_19192 player - f Z field_19193 prevTickInColumn -c net/minecraft/class_1105 net/minecraft/client/audio/GuardianSound - f Lnet/minecraft/class_1577; field_5454 guardian -c net/minecraft/class_1106 net/minecraft/client/audio/EntityTickableSound - f Lnet/minecraft/class_1297; field_5455 entity -c net/minecraft/class_1107 net/minecraft/client/audio/RidingMinecartTickableSound - f Lnet/minecraft/class_1688; field_5456 minecart - f Lnet/minecraft/class_1657; field_5457 player -c net/minecraft/class_1108 net/minecraft/client/audio/MinecartTickableSound - f F field_5459 distance - f Lnet/minecraft/class_1688; field_5458 minecart -c net/minecraft/class_1111 net/minecraft/client/audio/Sound - m ()Lnet/minecraft/class_2960; method_4766 getSoundAsOggLocation - m ()Ljava/lang/String; toString toString - m ()Lnet/minecraft/class_1111$class_1112; method_4768 getType - m ()Lnet/minecraft/class_1111; method_4765 cloneEntry - m ()Z method_4769 isStreaming - m ()F method_4772 getPitch - m ()Z method_4764 shouldPreload - m ()F method_4771 getVolume - m ()I method_4770 getAttenuationDistance - m ()Lnet/minecraft/class_2960; method_4767 getSoundLocation - f I field_5463 attenuationDistance - f Lnet/minecraft/class_2960; field_5469 name - f I field_5468 weight - f Lnet/minecraft/class_1111$class_1112; field_5470 type - f Z field_5465 preload - f F field_5464 pitch - f Z field_5467 streaming - f F field_5466 volume -c net/minecraft/class_1111$class_1112 net/minecraft/client/audio/Sound$Type - m (Ljava/lang/String;)Lnet/minecraft/class_1111$class_1112; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_1111$class_1112; method_4773 getByName - m ()[Lnet/minecraft/class_1111$class_1112; values values - f Lnet/minecraft/class_1111$class_1112; field_5474 FILE - f Ljava/lang/String; field_5472 name - f Lnet/minecraft/class_1111$class_1112; field_5473 SOUND_EVENT - f [Lnet/minecraft/class_1111$class_1112; field_5471 $VALUES -c net/minecraft/class_1109 net/minecraft/client/audio/SimpleSound - m (Lnet/minecraft/class_3414;DDD)Lnet/minecraft/class_1109; method_25467 ambientWithAttenuation - m (Lnet/minecraft/class_3414;DDD)Lnet/minecraft/class_1109; method_4760 record - m (Lnet/minecraft/class_3414;FF)Lnet/minecraft/class_1109; method_24877 ambientWithoutAttenuation - m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_1109; method_25466 ambient - m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_1109; method_4759 music - m (Lnet/minecraft/class_3414;FF)Lnet/minecraft/class_1109; method_4757 master - m (Lnet/minecraft/class_3414;F)Lnet/minecraft/class_1109; method_4758 master -c net/minecraft/class_1115 net/minecraft/client/audio/SoundListSerializer - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1111; method_4790 deserializeSound - m (Lcom/google/gson/JsonObject;)Ljava/util/List; method_4792 deserializeSounds - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_1110; method_4791 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_1111$class_1112;)Lnet/minecraft/class_1111$class_1112; method_4789 deserializeType -c net/minecraft/class_1110 net/minecraft/client/audio/SoundList - m ()Z method_4763 canReplaceExisting - m ()Ljava/lang/String; method_4762 getSubtitle - m ()Ljava/util/List; method_4761 getSounds - f Ljava/util/List; field_5460 sounds - f Z field_5462 replaceExisting - f Ljava/lang/String; field_5461 subtitle -c net/minecraft/class_1117 net/minecraft/client/audio/ITickableSound - m ()Z method_4793 isDonePlaying - m ()V method_16896 tick -c net/minecraft/class_1113 net/minecraft/client/audio/ISound - m ()D method_4779 getY - m ()Lnet/minecraft/class_1113$class_1114; method_4777 getAttenuationType - m ()D method_4778 getZ - m ()Lnet/minecraft/class_3419; method_4774 getCategory - m ()Z method_4787 isGlobal - m ()F method_4781 getVolume - m ()I method_4780 getRepeatDelay - m ()Z method_26273 shouldPlaySound - m ()D method_4784 getX - m ()F method_4782 getPitch - m ()Z method_4785 canBeSilent - m ()Lnet/minecraft/class_2960; method_4775 getSoundLocation - m ()Z method_4786 canRepeat - m (Lnet/minecraft/class_1144;)Lnet/minecraft/class_1146; method_4783 createAccessor - m ()Lnet/minecraft/class_1111; method_4776 getSound -c net/minecraft/class_1113$class_1114 net/minecraft/client/audio/ISound$AttenuationType - m (Ljava/lang/String;)Lnet/minecraft/class_1113$class_1114; valueOf valueOf - m ()[Lnet/minecraft/class_1113$class_1114; values values - f Lnet/minecraft/class_1113$class_1114; field_5478 NONE - f Lnet/minecraft/class_1113$class_1114; field_5476 LINEAR - f [Lnet/minecraft/class_1113$class_1114; field_5477 $VALUES -c net/minecraft/class_1118 net/minecraft/client/audio/UnderwaterAmbientSounds -c net/minecraft/class_1118$class_1119 net/minecraft/client/audio/UnderwaterAmbientSounds$SubSound - f Lnet/minecraft/class_746; field_5482 player -c net/minecraft/class_1118$class_1120 net/minecraft/client/audio/UnderwaterAmbientSounds$UnderWaterSound - f Lnet/minecraft/class_746; field_5483 player - f I field_5484 ticksInWater -c net/minecraft/class_1116 net/minecraft/client/audio/UnderwaterAmbientSoundHandler - f Lnet/minecraft/class_1144; field_5479 soundHandler - f Lnet/minecraft/class_746; field_5481 player - f I field_5480 delay -c net/minecraft/class_1123 net/minecraft/client/util/IMutableSearchTree - m (Ljava/lang/Object;)V method_4798 func_217872_a - m ()V method_4799 recalculate - m ()V method_4797 clear -c net/minecraft/class_1126 net/minecraft/client/util/SearchTree - m (Ljava/lang/Object;Ljava/lang/String;)V method_4802 func_217880_a - f Lnet/minecraft/class_1128; field_5498 byName - f Ljava/util/function/Function; field_5497 nameFunc -c net/minecraft/class_1126$class_1127 net/minecraft/client/util/SearchTree$MergingIterator - m ()Ljava/lang/Object; computeNext computeNext - f Lcom/google/common/collect/PeekingIterator; field_5500 rightItr - f Lcom/google/common/collect/PeekingIterator; field_5499 leftItr - f Ljava/util/Comparator; field_5501 numbers -c net/minecraft/class_1121 net/minecraft/client/util/SearchTreeReloadable - m (Ljava/lang/Object;)V method_4795 index - m (Ljava/lang/Object;Ljava/lang/Object;)I method_4796 compare - m (Ljava/lang/Object;Lnet/minecraft/class_2960;)V method_4794 func_217873_a - f Ljava/util/List; field_5486 field_217878_d - f Lnet/minecraft/class_1128; field_5489 namespaceList - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_5488 field_217879_e - f Lnet/minecraft/class_1128; field_5485 pathList - f Ljava/util/function/Function; field_5487 field_217877_c -c net/minecraft/class_1121$class_1122 net/minecraft/client/util/SearchTreeReloadable$JoinedIterator - m ()Ljava/lang/Object; computeNext computeNext - f Lcom/google/common/collect/PeekingIterator; field_5490 field_217881_a - f Ljava/util/Comparator; field_5492 field_217883_c - f Lcom/google/common/collect/PeekingIterator; field_5491 field_217882_b -c net/minecraft/class_1129 net/minecraft/client/util/ISearchTree - m (Ljava/lang/String;)Ljava/util/List; method_4810 search -c net/minecraft/class_1124 net/minecraft/client/util/SearchTreeManager - m (Lnet/minecraft/class_1124$class_1125;Lnet/minecraft/class_1123;)V method_4801 add - m (Lnet/minecraft/class_1124$class_1125;)Lnet/minecraft/class_1123; method_4800 get - f Ljava/util/Map; field_5493 trees - f Lnet/minecraft/class_1124$class_1125; field_5496 RECIPES - f Lnet/minecraft/class_1124$class_1125; field_5495 ITEMS - f Lnet/minecraft/class_1124$class_1125; field_5494 TAGS -c net/minecraft/class_1124$class_1125 net/minecraft/client/util/SearchTreeManager$Key -c net/minecraft/class_1128 net/minecraft/client/util/SuffixArray - m ([I[I[III)V method_4803 func_194054_a - m (Ljava/lang/String;I)I method_4805 compare - m ()V method_4809 printArray - m (I)Ljava/lang/String; method_4808 getString - m (Ljava/lang/String;)Ljava/util/List; method_4804 search - m ()V method_4807 generate - m (Ljava/lang/Object;Ljava/lang/String;)V method_4806 add - f Z field_5507 DEBUG_PRINT_ARRAY - f I field_5502 maxStringLength - f Lit/unimi/dsi/fastutil/ints/IntList; field_5504 suffixToT - f Lit/unimi/dsi/fastutil/ints/IntList; field_5505 chars - f Z field_5508 DEBUG_PRINT_COMPARISONS - f Lit/unimi/dsi/fastutil/ints/IntList; field_5509 wordStarts - f Lorg/apache/logging/log4j/Logger; field_5510 LOGGER - f Lit/unimi/dsi/fastutil/ints/IntList; field_5506 offsets - f Ljava/util/List; field_5503 list -c net/minecraft/class_1128$1 net/minecraft/client/util/SuffixArray$1 - m (Ljava/lang/Integer;Ljava/lang/Integer;)I compare compare - m (Ljava/lang/Object;Ljava/lang/Object;)I compare compare - m (II)I compare compare - f Lnet/minecraft/class_1128; field_5512 field_194053_c - f [I field_5511 field_194052_b - f [I field_5513 field_194051_a -c net/minecraft/class_1132 net/minecraft/server/integrated/IntegratedServer - m ()Ljava/lang/String; method_4815 func_210175_e - m ()V method_4816 func_210176_c - m (Ljava/util/UUID;)V method_4817 setPlayerUuid - f Lnet/minecraft/class_1133; field_5519 lanServerPing - f Lnet/minecraft/class_310; field_5518 mc - f Z field_5524 isGamePaused - f Ljava/util/UUID; field_5521 playerUuid - f Lorg/apache/logging/log4j/Logger; field_5520 LOGGER - f I field_5522 serverPort -c net/minecraft/class_1130 net/minecraft/server/integrated/IntegratedPlayerList - m ()Lnet/minecraft/class_1132; method_4811 getServer - f Lnet/minecraft/class_2487; field_5514 hostPlayerData -c net/minecraft/class_1131 net/minecraft/client/network/LanServerInfo - m ()Ljava/lang/String; method_4812 getServerIpPort - m ()V method_4814 updateLastSeen - m ()Ljava/lang/String; method_4813 getServerMotd - f Ljava/lang/String; field_5515 lanServerMotd - f Ljava/lang/String; field_5517 lanServerIpPort - f J field_5516 timeLastSeen -c net/minecraft/class_1133 net/minecraft/client/multiplayer/LanServerPingThread - m (Ljava/lang/String;)Ljava/lang/String; method_4820 getAdFromPingResponse - m (Ljava/lang/String;)Ljava/lang/String; method_4819 getMotdFromPingResponse - m ()V interrupt interrupt - m ()V run run - m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_4818 getPingResponse - f Ljava/lang/String; field_5530 address - f Ljava/lang/String; field_5526 motd - f Lorg/apache/logging/log4j/Logger; field_5529 LOGGER - f Ljava/util/concurrent/atomic/AtomicInteger; field_5525 UNIQUE_THREAD_ID - f Z field_5527 isStopping - f Ljava/net/DatagramSocket; field_5528 socket -c net/minecraft/class_1134 net/minecraft/client/network/LanServerDetector - m ()Lorg/apache/logging/log4j/Logger; method_4821 access$100 - m ()Ljava/util/concurrent/atomic/AtomicInteger; method_4822 access$000 - f Lorg/apache/logging/log4j/Logger; field_5532 LOGGER - f Ljava/util/concurrent/atomic/AtomicInteger; field_5531 ATOMIC_COUNTER -c net/minecraft/class_1134$class_1136 net/minecraft/client/network/LanServerDetector$LanServerList - m ()V method_4825 setWasNotUpdated - m ()Z method_4823 getWasUpdated - m ()Ljava/util/List; method_4826 getLanServers - m (Ljava/lang/String;Ljava/net/InetAddress;)V method_4824 addServer - f Ljava/util/List; field_5536 listOfLanServers - f Z field_5537 wasUpdated -c net/minecraft/class_1134$class_1135 net/minecraft/client/network/LanServerDetector$LanServerFindThread - m ()V run run - f Ljava/net/InetAddress; field_5534 broadcastAddress - f Ljava/net/MulticastSocket; field_5535 socket - f Lnet/minecraft/class_1134$class_1136; field_5533 localServerList -c net/minecraft/class_4235 net/minecraft/client/audio/ChannelManager - m (Ljava/util/function/Consumer;)V method_19730 func_217900_b - m ()V method_19728 releaseAll - m ()V method_19731 func_217904_c - m (Lnet/minecraft/class_4225$class_4105;)Ljava/util/concurrent/CompletableFuture; method_19723 requestSoundEntry - m (Lnet/minecraft/class_4235$class_4236;)Lnet/minecraft/class_4224; method_19725 func_217896_a - m (Lnet/minecraft/class_4235;)Ljava/util/concurrent/Executor; method_19726 func_217898_a - m ()V method_19722 tick - m (Lnet/minecraft/class_4225$class_4105;Ljava/util/concurrent/CompletableFuture;)V method_19724 func_239535_a_ - m (Lnet/minecraft/class_4235;)Lnet/minecraft/class_4225; method_19729 func_217902_b - m (Ljava/util/function/Consumer;)V method_19727 runForAllSoundSources - f Ljava/util/concurrent/Executor; field_18939 soundExecutor - f Ljava/util/Set; field_18937 channels - f Lnet/minecraft/class_4225; field_18938 sndSystem -c net/minecraft/class_4235$class_4236 net/minecraft/client/audio/ChannelManager$Entry - m (Ljava/util/function/Consumer;)V method_19737 func_217890_b - m (Ljava/util/function/Consumer;)V method_19735 runOnSoundExecutor - m (Lnet/minecraft/class_4235$class_4236;)Lnet/minecraft/class_4224; method_19733 func_217886_a - m ()Z method_19732 isReleased - m ()V method_19736 release - f Lnet/minecraft/class_4224; field_18941 source - f Lnet/minecraft/class_4235; field_18940 field_217892_a - f Z field_18942 released -c net/minecraft/class_4234 net/minecraft/client/audio/IAudioStream - m ()Ljavax/sound/sampled/AudioFormat; method_19719 getAudioFormat - m (I)Ljava/nio/ByteBuffer; method_19720 readOggSoundWithCapacity -c net/minecraft/class_1142 net/minecraft/client/audio/MusicTicker - m (Lnet/minecraft/class_5195;)V method_4858 selectRandomBackgroundMusic - m ()V method_4859 stop - m ()V method_18669 tick - m (Lnet/minecraft/class_5195;)Z method_4860 isBackgroundMusicPlaying - f Lnet/minecraft/class_1113; field_5574 currentMusic - f Lnet/minecraft/class_310; field_5575 client - f I field_5572 timeUntilNextMusic - f Ljava/util/Random; field_5571 random -c net/minecraft/class_4856 net/minecraft/client/audio/OggAudioStreamWrapper - m ()V close close - f Lnet/minecraft/class_4234; field_22444 audioStream - f Lnet/minecraft/class_4856$class_4857; field_22443 wrapperFactoryOGG - f Ljava/io/BufferedInputStream; field_22445 inputStream -c net/minecraft/class_4856$class_4857 net/minecraft/client/audio/OggAudioStreamWrapper$IFactory - m (Ljava/io/InputStream;)Lnet/minecraft/class_4234; create create -c net/minecraft/class_4856$1 net/minecraft/client/audio/OggAudioStreamWrapper$1 -c net/minecraft/class_4856$class_4858 net/minecraft/client/audio/OggAudioStreamWrapper$Stream - m ()V close close -c net/minecraft/class_1140 net/minecraft/client/audio/SoundEngine - m (Lnet/minecraft/class_1113;)V method_19753 stop - m (Lnet/minecraft/class_1113;)F method_4849 getClampedPitch - m (Lnet/minecraft/class_1145;)V method_4855 addListener - m (Lnet/minecraft/class_4234;Lnet/minecraft/class_4224;)V method_19755 func_217935_a - m (FFLnet/minecraft/class_243;Lnet/minecraft/class_4224;)V method_19748 func_217924_a - m (Lnet/minecraft/class_4235$class_4236;Lnet/minecraft/class_4234;)V method_19758 func_217928_a - m (Lnet/minecraft/class_3419;F)V method_4844 setVolume - m (Lnet/minecraft/class_1113;)Z method_24879 canRepeatAndHasDelay - m (Ljava/util/stream/Stream;)V method_19760 func_217929_b - m (Lnet/minecraft/class_1113;)V method_4854 play - m ()V method_4843 stopAllSounds - m (FFLnet/minecraft/class_1113$class_1114;FZZLnet/minecraft/class_243;ZLnet/minecraft/class_4224;)V method_19749 func_239543_a_ - m ()V method_4837 reload - m (Lnet/minecraft/class_3419;)F method_4850 getVolume - m (Lnet/minecraft/class_4231;Lnet/minecraft/class_4224;)V method_19752 func_217925_a - m ()V method_4846 load - m ()V method_19762 resume - m (FLnet/minecraft/class_4224;)V method_19750 func_217923_a - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_3419;)V method_4838 stop - m (Lnet/minecraft/class_1113;I)V method_4852 playDelayed - m (Lnet/minecraft/class_4235$class_4236;Lnet/minecraft/class_4231;)V method_19757 func_217934_a - m (Lnet/minecraft/class_1113;)Z method_24880 canRepeatAndHasNoDelay - m (Lnet/minecraft/class_1113;)Z method_24878 hasRepeatDelay - m (Lnet/minecraft/class_4184;)V method_4840 updateListener - m (Ljava/util/stream/Stream;)V method_19759 func_217936_a - m (Lnet/minecraft/class_1113;)F method_4853 getClampedVolume - m (Lnet/minecraft/class_1145;)V method_4847 removeListener - m (Lnet/minecraft/class_1113;)Z method_4835 isPlaying - m (Z)V method_20185 tick - m ()V method_4856 unload - m ()Ljava/lang/String; method_20304 getDebugString - m (Lnet/minecraft/class_1117;)V method_22139 playOnNextTick - m (Lnet/minecraft/class_1113;Lnet/minecraft/class_4235$class_4236;)V method_19754 func_217926_a - m (Lnet/minecraft/class_4235$class_4236;)V method_19756 func_217922_a - m ()V method_4857 tickNonPaused - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V method_19751 func_229362_a_ - m (Lnet/minecraft/class_1111;)V method_4851 enqueuePreload - m ()V method_19761 pause - f Lorg/apache/logging/log4j/Marker; field_5553 LOG_MARKER - f Ljava/util/Map; field_18950 playingSoundsChannel - f Lnet/minecraft/class_315; field_5555 options - f Ljava/util/List; field_5551 soundsToPreload - f Lnet/minecraft/class_4237; field_18947 audioStreamManager - f Ljava/util/Set; field_5561 UNABLE_TO_PLAY - f Lnet/minecraft/class_4238; field_18948 executor - f Ljava/util/Map; field_18952 playingSoundsStopTime - f I field_5550 ticks - f Z field_5563 loaded - f Ljava/util/List; field_5558 listeners - f Lorg/apache/logging/log4j/Logger; field_5559 LOGGER - f Lnet/minecraft/class_4235; field_18949 channelManager - f Lnet/minecraft/class_4227; field_18946 listener - f Ljava/util/Map; field_5566 delayedSounds - f Lnet/minecraft/class_1144; field_5552 sndHandler - f Lnet/minecraft/class_4225; field_18945 sndSystem - f Lcom/google/common/collect/Multimap; field_18951 categorySounds - f Ljava/util/List; field_5557 tickableSounds - f Ljava/util/List; field_20532 tickableSoundsToPlayOnNextTick -c net/minecraft/class_4237 net/minecraft/client/audio/AudioStreamManager - m (Ljava/util/Collection;)Ljava/util/concurrent/CompletableFuture; method_19741 preload - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4231; method_19747 func_217914_e - m (Lnet/minecraft/class_2960;Z)Lnet/minecraft/class_4234; method_19745 func_239542_b_ - m (Lnet/minecraft/class_2960;)Ljava/util/concurrent/CompletableFuture; method_19746 func_217913_d - m (Ljava/util/concurrent/CompletableFuture;)V method_19742 func_217910_a - m (Lnet/minecraft/class_2960;)Ljava/util/concurrent/CompletableFuture; method_19743 createResource - m (Lnet/minecraft/class_1111;)Ljava/util/concurrent/CompletableFuture; method_19740 func_217911_a - m (I)[Ljava/util/concurrent/CompletableFuture; method_19739 func_217916_a - m ()V method_19738 clearAudioBufferCache - m (Lnet/minecraft/class_2960;Z)Ljava/util/concurrent/CompletableFuture; method_19744 createStreamingResource - f Ljava/util/Map; field_18944 bufferCache - f Lnet/minecraft/class_3300; field_18943 resourceManager -c net/minecraft/class_1145 net/minecraft/client/audio/ISoundEventListener - m (Lnet/minecraft/class_1113;Lnet/minecraft/class_1146;)V method_4884 onPlaySound -c net/minecraft/class_4238 net/minecraft/client/audio/SoundEngineExecutor - m ()Z method_19766 func_213177_d - m ()Ljava/lang/Thread; method_19764 createExecutionThread - m ()V method_19765 run - m ()V method_19763 restart - f Z field_18954 stopped - f Ljava/lang/Thread; field_18953 executionThread -c net/minecraft/class_1146 net/minecraft/client/audio/SoundEventAccessor - m ()Lnet/minecraft/class_1111; method_4887 cloneEntry - m (Lnet/minecraft/class_1148;)V method_4885 addSound - m ()Lnet/minecraft/class_2561; method_4886 getSubtitle - f Ljava/util/Random; field_5601 rnd - f Ljava/util/List; field_5600 accessorList - f Lnet/minecraft/class_2960; field_5602 location - f Lnet/minecraft/class_2561; field_5599 subtitle -c net/minecraft/class_1144 net/minecraft/client/audio/SoundHandler - m ()Ljava/lang/String; method_20305 getDebugString - m ()V method_4881 stop - m ()Lorg/apache/logging/log4j/Logger; method_18183 func_215291_g - m (Lnet/minecraft/class_1117;)V method_22140 playOnNextTick - m ()V method_4879 pause - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Lnet/minecraft/class_1144$class_4009; method_18180 prepare - m ()Ljava/util/Collection; method_4864 getAvailableSounds - m ()V method_4880 resume - m ()V method_4882 unloadSounds - m (Lnet/minecraft/class_1145;)V method_4866 removeListener - m (Lnet/minecraft/class_1113;I)V method_4872 playDelayed - m (Lnet/minecraft/class_3419;F)V method_4865 setSoundLevel - m (Z)V method_18670 tick - m (Lnet/minecraft/class_1144$class_4009;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18182 apply - m (Lnet/minecraft/class_1113;)V method_4870 stop - m (Lnet/minecraft/class_1145;)V method_4878 addListener - m (Lnet/minecraft/class_4184;)V method_4876 updateListener - m (Lnet/minecraft/class_1113;)V method_4873 play - m (Lnet/minecraft/class_1111;Lnet/minecraft/class_2960;Lnet/minecraft/class_3300;)Z method_4868 isValidSound - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_3419;)V method_4875 stop - m (Lnet/minecraft/class_1111;Lnet/minecraft/class_2960;Lnet/minecraft/class_3300;)Z method_18181 func_215295_a - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1146; method_4869 getAccessor - m (Lnet/minecraft/class_1113;)Z method_4877 isPlaying - f Ljava/util/Map; field_5588 soundRegistry - f Lorg/apache/logging/log4j/Logger; field_5593 LOGGER - f Lnet/minecraft/class_1140; field_5590 sndManager - f Lnet/minecraft/class_1111; field_5592 MISSING_SOUND - f Lcom/google/gson/reflect/TypeToken; field_5591 TYPE - f Lcom/google/gson/Gson; field_5594 GSON -c net/minecraft/class_1144$class_4009 net/minecraft/client/audio/SoundHandler$Loader - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1110;Lnet/minecraft/class_3300;)V method_18187 registerSoundEvent - m (Lnet/minecraft/class_1144$class_4009;)Ljava/util/Map; method_18184 func_217945_a - m (Ljava/util/Map;Lnet/minecraft/class_1140;)V method_18186 preloadSounds - m (Lnet/minecraft/class_1144$class_4009;Lnet/minecraft/class_2960;Lnet/minecraft/class_1110;Lnet/minecraft/class_3300;)V method_18185 func_217947_a - f Ljava/util/Map; field_17908 soundRegistry -c net/minecraft/class_1144$class_4009$1 net/minecraft/client/audio/SoundHandler$Loader$1 - m ()Lnet/minecraft/class_1111; method_4883 cloneEntry - f Lnet/minecraft/class_1111; field_5595 field_217869_b - f Lnet/minecraft/class_1144$class_4009; field_5597 field_217870_c - f Lnet/minecraft/class_2960; field_5596 field_217868_a -c net/minecraft/class_1144$2 net/minecraft/client/audio/SoundHandler$2 - f [I field_5598 field_217949_a -c net/minecraft/class_1144$1 net/minecraft/client/audio/SoundHandler$1 -c net/minecraft/class_1148 net/minecraft/client/audio/ISoundEventAccessor - m ()I method_4894 getWeight - m ()Ljava/lang/Object; method_4893 cloneEntry - m (Lnet/minecraft/class_1140;)V method_18188 enqueuePreload -c net/minecraft/class_1149 net/minecraft/client/tutorial/CraftPlanksStep - m (Lnet/minecraft/class_746;Lnet/minecraft/class_3494;)Z method_4895 hasCrafted - f Lnet/minecraft/class_1156; field_5608 tutorial - f Lnet/minecraft/class_372; field_5610 toast - f Lnet/minecraft/class_2561; field_5611 TITLE - f I field_5609 timeWaiting - f Lnet/minecraft/class_2561; field_5612 DESCRIPTION -c net/minecraft/class_1150 net/minecraft/client/tutorial/CompletedTutorialStep - f Lnet/minecraft/class_1156; field_5613 tutorial -c net/minecraft/class_1151 net/minecraft/client/tutorial/MovementStep - f I field_5626 moveCompleted - f Lnet/minecraft/class_2561; field_5621 LOOK_TITLE - f Lnet/minecraft/class_2561; field_5614 LOOK_DESCRIPTION - f I field_5627 timeLooked - f Lnet/minecraft/class_1156; field_5618 tutorial - f I field_5615 timeMoved - f I field_5616 timeWaiting - f Z field_5619 turned - f Z field_5620 moved - f Lnet/minecraft/class_372; field_5622 moveToast - f Lnet/minecraft/class_2561; field_5617 MOVE_DESCRIPTION - f Lnet/minecraft/class_2561; field_5624 MOVE_TITLE - f I field_5625 lookCompleted - f Lnet/minecraft/class_372; field_5623 lookToast -c net/minecraft/class_1152 net/minecraft/client/tutorial/FindTreeStep - m (Lnet/minecraft/class_746;)Z method_4896 hasPunchedTreesPreviously - f Lnet/minecraft/class_2561; field_5631 TITLE - f Ljava/util/Set; field_5632 TREE_BLOCKS - f Lnet/minecraft/class_1156; field_5630 tutorial - f Lnet/minecraft/class_372; field_5633 toast - f Lnet/minecraft/class_2561; field_5628 DESCRIPTION - f I field_5629 timeWaiting -c net/minecraft/class_1153 net/minecraft/client/tutorial/PunchTreeStep - f Lnet/minecraft/class_372; field_5637 toast - f Lnet/minecraft/class_2561; field_5639 DESCRIPTION - f I field_5635 resetCount - f I field_5636 timeWaiting - f Lnet/minecraft/class_2561; field_5638 TITLE - f Lnet/minecraft/class_1156; field_5634 tutorial -c net/minecraft/class_1154 net/minecraft/client/tutorial/OpenInventoryStep - f I field_5641 timeWaiting - f Lnet/minecraft/class_1156; field_5640 tutorial - f Lnet/minecraft/class_2561; field_5643 TITLE - f Lnet/minecraft/class_2561; field_5644 DESCRIPTION - f Lnet/minecraft/class_372; field_5642 toast -c net/minecraft/class_1155 net/minecraft/client/tutorial/ITutorialStep - m ()V method_4904 openInventory - m ()V method_4902 onStop - m (Lnet/minecraft/class_744;)V method_4903 handleMovement - m (DD)V method_4901 onMouseMove - m (Lnet/minecraft/class_638;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;F)V method_4900 onHitBlock - m (Lnet/minecraft/class_1799;)V method_4897 handleSetSlot - m (Lnet/minecraft/class_638;Lnet/minecraft/class_239;)V method_4898 onMouseHover - m ()V method_4899 tick -c net/minecraft/class_1156 net/minecraft/client/tutorial/Tutorial - m ()Lnet/minecraft/class_310; method_4914 getMinecraft - m (Lnet/minecraft/class_638;Lnet/minecraft/class_239;)V method_4911 onMouseHover - m ()V method_4917 tick - m ()V method_4916 reload - m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_4913 createKeybindComponent - m (DD)V method_4908 onMouseMove - m ()V method_4915 stop - m ()Lnet/minecraft/class_1934; method_4905 getGameType - m ()V method_4912 openInventory - m (Lnet/minecraft/class_1799;)V method_4906 handleSetSlot - m (Lnet/minecraft/class_1157;)V method_4910 setStep - m (Lnet/minecraft/class_744;)V method_4909 handleMovement - m (Lnet/minecraft/class_638;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;F)V method_4907 onHitBlock - f Lnet/minecraft/class_1155; field_5646 tutorialStep - f Lnet/minecraft/class_310; field_5645 minecraft -c net/minecraft/class_1157 net/minecraft/client/tutorial/TutorialSteps - m ()Ljava/lang/String; method_4920 getName - m (Ljava/lang/String;)Lnet/minecraft/class_1157; method_4919 byName - m ()[Lnet/minecraft/class_1157; values values - m (Ljava/lang/String;)Lnet/minecraft/class_1157; valueOf valueOf - m (Lnet/minecraft/class_1156;)Lnet/minecraft/class_1155; method_4918 create - f Ljava/lang/String; field_5651 name - f Lnet/minecraft/class_1157; field_5652 OPEN_INVENTORY - f Lnet/minecraft/class_1157; field_5648 FIND_TREE - f Lnet/minecraft/class_1157; field_5649 PUNCH_TREE - f Ljava/util/function/Function; field_5647 tutorial - f Lnet/minecraft/class_1157; field_5650 MOVEMENT - f [Lnet/minecraft/class_1157; field_5654 $VALUES - f Lnet/minecraft/class_1157; field_5653 NONE - f Lnet/minecraft/class_1157; field_5655 CRAFT_PLANKS -c net/minecraft/class_4899 net/minecraft/realms/DisconnectedRealmsScreen - m (Lnet/minecraft/class_310;Lnet/minecraft/class_4185;)V method_25468 func_239547_a_ - f Lnet/minecraft/class_437; field_22810 field_230716_p_ - f Lnet/minecraft/class_2561; field_22808 field_230714_b_ - f I field_22811 field_230717_q_ - f Lnet/minecraft/class_2561; field_22807 field_230713_a_ - f Lnet/minecraft/class_5489; field_22809 field_243509_c -c net/minecraft/class_4901 net/minecraft/realms/RealmsBridgeScreen - m (Lnet/minecraft/class_437;)Lnet/minecraft/class_4905; method_25476 func_239555_b_ - m (Lnet/minecraft/class_437;)V method_25475 func_231394_a_ - f Lnet/minecraft/class_437; field_22813 field_230718_a_ -c net/minecraft/class_4900 net/minecraft/realms/RealmsNarratorHelper - m ([Ljava/lang/String;)V method_25471 func_239551_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_25474 func_239554_c_ - m (Ljava/lang/Iterable;)Ljava/lang/String; method_25472 func_239552_b_ - m (Ljava/lang/String;)V method_25473 func_239553_b_ - m (Ljava/lang/Iterable;)V method_25469 func_239549_a_ - m (Ljava/lang/String;)V method_25470 func_239550_a_ - f Lnet/minecraft/class_4907; field_22812 field_239548_a_ -c net/minecraft/class_4903 net/minecraft/realms/RealmsLabel - m ()Ljava/lang/String; method_25487 func_231399_a_ - m (Lnet/minecraft/class_437;Lnet/minecraft/class_4587;)V method_25488 func_239560_a_ - f I field_22820 field_230724_b_ - f I field_22822 field_230726_d_ - f I field_22821 field_230725_c_ - f Lnet/minecraft/class_2561; field_22819 field_230723_a_ -c net/minecraft/class_4902 net/minecraft/realms/RealmsConnect - m (Lnet/minecraft/class_4902;)Z method_25478 access$000 - m (Lnet/minecraft/class_4902;)Lnet/minecraft/class_2535; method_25482 access$100 - m ()V method_25481 func_231398_b_ - m ()V method_25477 func_231396_a_ - m ()Lorg/apache/logging/log4j/Logger; method_25483 access$300 - m (Lnet/minecraft/class_4902;)Lnet/minecraft/class_437; method_25484 func_239556_c_ - m (Ljava/lang/String;I)V method_25480 func_231397_a_ - m (Lnet/minecraft/class_4902;Lnet/minecraft/class_2535;)Lnet/minecraft/class_2535; method_25479 access$102 - f Lnet/minecraft/class_437; field_22815 field_230720_b_ - f Z field_22816 field_230721_c_ - f Lnet/minecraft/class_2535; field_22817 field_230722_d_ - f Lorg/apache/logging/log4j/Logger; field_22814 field_230719_a_ -c net/minecraft/class_4902$1 net/minecraft/realms/RealmsConnect$1 - m (Lnet/minecraft/class_310;Lnet/minecraft/class_4899;)V method_25485 func_239558_a_ - m ()V run run - m (Lnet/minecraft/class_2561;)V method_10210 func_209500_a - m (Lnet/minecraft/class_310;Lnet/minecraft/class_4899;)V method_25486 func_239559_b_ - f Lnet/minecraft/class_4902; field_11113 field_207703_c - f Ljava/lang/String; field_11112 field_207701_a - f Lnet/minecraft/class_310; field_22818 field_239557_c_ - f I field_11114 field_207702_b -c net/minecraft/class_4905 net/minecraft/realms/RealmsScreen - m (I)I method_25494 func_239562_k_ - m ()V method_25495 func_231411_u_ -c net/minecraft/class_4904 net/minecraft/realms/RealmsObjectSelectionList - m (IIDDI)V method_25490 func_231401_a_ - m (I)V method_25492 func_239561_k_ - m ()V method_25493 func_231409_q_ - m (Lnet/minecraft/class_4280$class_4281;)I method_25491 addEntry - m (I)V method_25489 func_231400_a_ -c net/minecraft/class_4907 net/minecraft/realms/RepeatedNarrator - m (Ljava/lang/String;)V method_25499 func_231415_a_ - m (Ljava/lang/String;Lnet/minecraft/class_4907$class_4908;)Lnet/minecraft/class_4907$class_4908; method_25500 func_229956_lam_ - f F field_22825 field_230729_a_ - f Ljava/util/concurrent/atomic/AtomicReference; field_22826 field_230730_b_ -c net/minecraft/class_4907$class_4908 net/minecraft/realms/RepeatedNarrator$Parameter - m (Lnet/minecraft/class_4907$class_4908;)Ljava/lang/String; method_25502 func_239564_b_ - m (Lnet/minecraft/class_4907$class_4908;)Lcom/google/common/util/concurrent/RateLimiter; method_25501 func_239563_a_ - f Lcom/google/common/util/concurrent/RateLimiter; field_22828 field_214463_b - f Ljava/lang/String; field_22827 field_214462_a -c net/minecraft/class_4906 net/minecraft/realms/RealmsServerAddress - m (Ljava/lang/String;)Lnet/minecraft/class_4906; method_25497 func_231413_a_ - m ()Ljava/lang/String; method_25496 func_231412_a_ - m ()I method_25498 func_231414_b_ - f I field_22824 field_230728_b_ - f Ljava/lang/String; field_22823 field_230727_a_ -c net/minecraft/class_167 net/minecraft/advancements/AdvancementProgress - m (Ljava/util/Set;Ljava/util/Map$Entry;)Z method_730 func_209539_a - m ()Ljava/lang/String; method_728 getProgressText - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_167; method_732 fromNetwork - m (Lnet/minecraft/class_2540;)V method_733 serializeToNetwork - m (Ljava/lang/Object;)I compareTo compareTo - m ()Ljava/lang/Iterable; method_734 getCompletedCriteria - m ()F method_735 getPercent - m ()I method_736 countCompletedRequirements - m (Lnet/minecraft/class_167;)Ljava/util/Map; method_739 access$000 - m (Ljava/util/Map;[Ljava/lang/String;)V method_727 update - m ()Ljava/lang/Iterable; method_731 getRemaningCriteria - m ()Ljava/util/Date; method_741 getFirstProgressDate - m (Ljava/lang/String;)Lnet/minecraft/class_178; method_737 getCriterionProgress - m (Ljava/lang/String;)Z method_729 revokeCriterion - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;)Z method_743 grantCriterion - m (Lnet/minecraft/class_167;)I method_738 compareTo - m ()Z method_740 isDone - m ()Z method_742 hasProgress - f [[Ljava/lang/String; field_1161 requirements - f Ljava/util/Map; field_1160 criteria -c net/minecraft/class_167$class_168 net/minecraft/advancements/AdvancementProgress$Serializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lnet/minecraft/class_167;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_744 serialize - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_167; method_745 deserialize -c net/minecraft/class_170 net/minecraft/advancements/AdvancementRewards - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_170; method_27912 deserializeRewards - m (Lnet/minecraft/class_3222;)V method_748 apply - m ()Ljava/lang/String; toString toString - m ()Lcom/google/gson/JsonElement; method_747 serialize - m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_3222;Lnet/minecraft/class_2158;)V method_17978 func_215098_a - f [Lnet/minecraft/class_2960; field_1164 loot - f [Lnet/minecraft/class_2960; field_1166 recipes - f Lnet/minecraft/class_170; field_1167 EMPTY - f I field_1165 experience - f Lnet/minecraft/class_2158$class_2159; field_1163 function -c net/minecraft/class_170$class_171 net/minecraft/advancements/AdvancementRewards$Builder - m (I)Lnet/minecraft/class_170$class_171; method_750 experience - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_170$class_171; method_753 recipe - m ()Lnet/minecraft/class_170; method_751 build - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_170$class_171; method_752 addRecipe - m (I)Lnet/minecraft/class_170$class_171; method_749 addExperience - f Lnet/minecraft/class_2960; field_1170 function - f Ljava/util/List; field_1171 loot - f Ljava/util/List; field_1168 recipes - f I field_1169 experience -c net/minecraft/class_174 net/minecraft/advancements/CriteriaTriggers - m ()Ljava/lang/Iterable; method_766 getAll - m (Lnet/minecraft/class_179;)Lnet/minecraft/class_179; method_767 register - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_179; method_765 get - f Lnet/minecraft/class_2092; field_19250 HERO_OF_THE_VILLAGE - f Lnet/minecraft/class_2092; field_1212 SLEPT_IN_BED - f Lnet/minecraft/class_2131; field_1201 TAME_ANIMAL - f Lnet/minecraft/class_2128; field_1182 SUMMONED_ENTITY - f Lnet/minecraft/class_2002; field_1202 CHANNELED_LIGHTNING - f Lnet/minecraft/class_2062; field_1184 IMPOSSIBLE - f Ljava/util/Map; field_1205 REGISTRY - f Lnet/minecraft/class_2092; field_1194 LOCATION - f Lnet/minecraft/class_4708; field_21629 BEE_NEST_DESTROYED - f Lnet/minecraft/class_2148; field_1204 USED_TOTEM - f Lnet/minecraft/class_2044; field_1209 ENTITY_HURT_PLAYER - f Lnet/minecraft/class_2135; field_1187 TICK - f Lnet/minecraft/class_5282; field_24479 PLAYER_GENERATES_CONTAINER_LOOT - f Lnet/minecraft/class_1999; field_1183 CHANGED_DIMENSION - f Lnet/minecraft/class_1996; field_1213 BREWED_POTION - f Lnet/minecraft/class_2119; field_1207 RECIPE_UNLOCKED - f Lnet/minecraft/class_5409; field_25694 PLAYER_ENTITY_INTERACTION - f Lnet/minecraft/class_2085; field_1200 LEVITATION - f Lnet/minecraft/class_2069; field_1185 ITEM_DURABILITY_CHANGED - f Lnet/minecraft/class_2108; field_1211 NETHER_TRAVEL - f Lnet/minecraft/class_2111; field_1191 PLACED_BLOCK - f Lnet/minecraft/class_2027; field_1193 EFFECTS_CHANGED - f Lnet/minecraft/class_2076; field_1197 KILLED_BY_CROSSBOW - f Lnet/minecraft/class_2066; field_1195 INVENTORY_CHANGED - f Lnet/minecraft/class_2058; field_1203 FISHING_ROD_HOOKED - f Lnet/minecraft/class_2014; field_1210 CURED_ZOMBIE_VILLAGER - f Lnet/minecraft/class_2030; field_1181 ENCHANTED_ITEM - f Lnet/minecraft/class_196; field_1190 BRED_ANIMALS - f Lnet/minecraft/class_5279; field_24480 THROWN_ITEM_PICKED_UP_BY_ENTITY - f Lnet/minecraft/class_2010; field_1198 CONSUME_ITEM - f Lnet/minecraft/class_4713; field_21628 SLIDE_DOWN_BLOCK - f Lnet/minecraft/class_2080; field_1192 PLAYER_KILLED_ENTITY - f Lnet/minecraft/class_2143; field_1186 USED_ENDER_EYE - f Lnet/minecraft/class_2054; field_1208 FILLED_BUCKET - f Lnet/minecraft/class_2080; field_1188 ENTITY_KILLED_PLAYER - f Lnet/minecraft/class_4711; field_24478 RIGHT_CLICK_BLOCK_WITH_ITEM - f Lnet/minecraft/class_4851; field_22450 TARGET_HIT - f Lnet/minecraft/class_2115; field_1199 PLAYER_HURT_ENTITY - f Lnet/minecraft/class_2006; field_1189 CONSTRUCT_BEACON - f Lnet/minecraft/class_2037; field_1180 ENTER_BLOCK - f Lnet/minecraft/class_2123; field_1196 SHOT_CROSSBOW - f Lnet/minecraft/class_2140; field_1206 VILLAGER_TRADE - f Lnet/minecraft/class_2092; field_19251 VOLUNTARY_EXILE -c net/minecraft/class_175 net/minecraft/advancements/Criterion - m ()Lnet/minecraft/class_184; method_774 getCriterionInstance - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_175; method_769 criterionFromNetwork - m ()Lcom/google/gson/JsonElement; method_773 serialize - m (Lnet/minecraft/class_2540;)V method_771 serializeToNetwork - m (Ljava/util/Map;Lnet/minecraft/class_2540;)V method_775 serializeToNetwork - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Ljava/util/Map; method_772 deserializeAll - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Lnet/minecraft/class_175; method_770 deserializeCriterion - m (Lnet/minecraft/class_2540;)Ljava/util/Map; method_768 criteriaFromNetwork - f Lnet/minecraft/class_184; field_1214 criterionInstance -c net/minecraft/class_178 net/minecraft/advancements/CriterionProgress - m (Lnet/minecraft/class_2540;)V method_787 write - m ()Z method_784 isObtained - m ()Ljava/util/Date; method_786 getObtained - m ()V method_790 reset - m ()Ljava/lang/String; toString toString - m ()Lcom/google/gson/JsonElement; method_783 serialize - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_178; method_785 read - m (Ljava/lang/String;)Lnet/minecraft/class_178; method_788 fromJson - m ()V method_789 obtain - f Ljava/text/SimpleDateFormat; field_1220 DATE_TIME_FORMATTER - f Ljava/util/Date; field_1219 obtained -c net/minecraft/class_179 net/minecraft/advancements/ICriterionTrigger - m (Lnet/minecraft/class_2985;Lnet/minecraft/class_179$class_180;)V method_792 addListener - m (Lnet/minecraft/class_2985;Lnet/minecraft/class_179$class_180;)V method_793 removeListener - m (Lnet/minecraft/class_2985;)V method_791 removeAllListeners - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Lnet/minecraft/class_184; method_795 deserialize - m ()Lnet/minecraft/class_2960; method_794 getId -c net/minecraft/class_179$class_180 net/minecraft/advancements/ICriterionTrigger$Listener - m ()Lnet/minecraft/class_184; method_797 getCriterionInstance - m (Ljava/lang/Object;)Z equals equals - m ()I hashCode hashCode - m (Lnet/minecraft/class_2985;)V method_796 grantCriterion - f Lnet/minecraft/class_161; field_1222 advancement - f Ljava/lang/String; field_1221 criterionName - f Lnet/minecraft/class_184; field_1223 criterionInstance -c net/minecraft/class_184 net/minecraft/advancements/ICriterionInstance - m ()Lnet/minecraft/class_2960; method_806 getId - m (Lnet/minecraft/class_5267;)Lcom/google/gson/JsonObject; method_807 serialize -c net/minecraft/class_185 net/minecraft/advancements/DisplayInfo - m ()Z method_823 shouldShowToast - m ()Lnet/minecraft/class_189; method_815 getFrame - m ()Z method_808 shouldAnnounceToChat - m ()Lcom/google/gson/JsonElement; method_814 serialize - m ()Z method_824 isHidden - m ()Lcom/google/gson/JsonObject; method_810 serializeIcon - m ()Lnet/minecraft/class_1799; method_821 getIcon - m ()F method_819 getY - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_185; method_809 deserialize - m (FF)V method_816 setPosition - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_185; method_820 read - m ()F method_818 getX - m ()Lnet/minecraft/class_2561; method_817 getDescription - m ()Lnet/minecraft/class_2561; method_811 getTitle - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1799; method_822 deserializeIcon - m (Lnet/minecraft/class_2540;)V method_813 write - m ()Lnet/minecraft/class_2960; method_812 getBackground - f Lnet/minecraft/class_189; field_1237 frame - f Z field_1238 announceToChat - f Z field_1236 hidden - f Z field_1239 showToast - f F field_1245 x - f F field_1244 y - f Lnet/minecraft/class_1799; field_1241 icon - f Lnet/minecraft/class_2561; field_1240 title - f Lnet/minecraft/class_2561; field_1242 description - f Lnet/minecraft/class_2960; field_1243 background -c net/minecraft/class_189 net/minecraft/advancements/FrameType - m ()I method_832 getIcon - m ()Ljava/lang/String; method_831 getName - m ()[Lnet/minecraft/class_189; values values - m ()Lnet/minecraft/class_124; method_830 getFormat - m (Ljava/lang/String;)Lnet/minecraft/class_189; valueOf valueOf - m ()Lnet/minecraft/class_2561; method_30756 getTranslatedToast - m (Ljava/lang/String;)Lnet/minecraft/class_189; method_833 byName - f I field_1252 icon - f Lnet/minecraft/class_124; field_1255 format - f Ljava/lang/String; field_1251 name - f Lnet/minecraft/class_189; field_1250 CHALLENGE - f Lnet/minecraft/class_189; field_1249 GOAL - f Lnet/minecraft/class_189; field_1254 TASK - f [Lnet/minecraft/class_189; field_1253 $VALUES - f Lnet/minecraft/class_2561; field_26386 translatedToast -c net/minecraft/class_193 net/minecraft/advancements/IRequirementsStrategy - m (Ljava/util/Collection;)[[Ljava/lang/String; createRequirements createRequirements - m (Ljava/util/Collection;)[[Ljava/lang/String; method_16774 func_223249_b_ - m (Ljava/util/Collection;)[[Ljava/lang/String; method_16773 func_223248_a_ - f Lnet/minecraft/class_193; field_1257 OR - f Lnet/minecraft/class_193; field_16882 AND -c net/minecraft/class_194 net/minecraft/advancements/AdvancementTreeNode - m ()V method_847 firstWalk - m (Lnet/minecraft/class_161;Lnet/minecraft/class_194;)Lnet/minecraft/class_194; method_846 buildSubTree - m (Lnet/minecraft/class_194;Lnet/minecraft/class_194;)Lnet/minecraft/class_194; method_845 getAncestor - m (Lnet/minecraft/class_194;F)V method_848 moveSubtree - m ()V method_850 executeShifts - m ()Lnet/minecraft/class_194; method_844 getLastChild - m ()Lnet/minecraft/class_194; method_849 getFirstChild - m (FIF)F method_842 secondWalk - m (Lnet/minecraft/class_161;)V method_852 layout - m (Lnet/minecraft/class_194;)Lnet/minecraft/class_194; method_841 apportion - m ()V method_851 updatePosition - m (F)V method_843 thirdWalk - f F field_1268 mod - f F field_1266 change - f F field_1265 shift - f F field_1269 y - f I field_1259 x - f Lnet/minecraft/class_194; field_1264 thread - f Lnet/minecraft/class_194; field_1262 ancestor - f I field_1261 index - f Ljava/util/List; field_1267 children - f Lnet/minecraft/class_194; field_1260 sibling - f Lnet/minecraft/class_161; field_1263 advancement - f Lnet/minecraft/class_194; field_1258 parent -c net/minecraft/class_195 net/minecraft/advancements/criterion/CriterionInstance - m ()Lnet/minecraft/class_2048$class_5258; method_27790 getPlayerCondition - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2960; field_1270 criterion - f Lnet/minecraft/class_2048$class_5258; field_24381 playerCondition -c net/minecraft/class_4708 net/minecraft/advancements/criterion/BeeNestDestroyedTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_4708$class_4709; method_23877 deserializeTrigger - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_23874 func_226222_a_ - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2248; method_23873 deserializeBlock - m ()Lnet/minecraft/class_2960; method_23876 func_226224_b_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1799;ILnet/minecraft/class_4708$class_4709;)Z method_23872 func_226220_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2248;Lnet/minecraft/class_1799;I)V method_23875 test - f Lnet/minecraft/class_2960; field_21568 ID -c net/minecraft/class_4708$class_4709 net/minecraft/advancements/criterion/BeeNestDestroyedTrigger$Instance - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2073$class_2074;Lnet/minecraft/class_2096$class_2100;)Lnet/minecraft/class_4708$class_4709; method_23879 createNewInstance - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1799;I)Z method_23878 test - f Lnet/minecraft/class_2096$class_2100; field_21571 beesContained - f Lnet/minecraft/class_2073; field_21570 itemPredicate - f Lnet/minecraft/class_2248; field_21569 block -c net/minecraft/class_4550 net/minecraft/advancements/criterion/BlockPredicate - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4550; method_22453 deserialize - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_22454 test - m ()Lcom/google/gson/JsonElement; method_22452 serialize - f Lnet/minecraft/class_2248; field_20694 block - f Lnet/minecraft/class_2105; field_20696 nbtPredicate - f Lnet/minecraft/class_3494; field_20693 tag - f Lnet/minecraft/class_4550; field_20692 ANY - f Lnet/minecraft/class_4559; field_20695 statePredicate -c net/minecraft/class_4550$class_4710 net/minecraft/advancements/criterion/BlockPredicate$Builder - m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_4550$class_4710; method_29233 setTag - m ()Lnet/minecraft/class_4550$class_4710; method_23880 createBuilder - m (Lnet/minecraft/class_4559;)Lnet/minecraft/class_4550$class_4710; method_27963 setStatePredicate - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4550$class_4710; method_27962 setBlock - m ()Lnet/minecraft/class_4550; method_23882 build - f Lnet/minecraft/class_3494; field_21573 tag - f Lnet/minecraft/class_2105; field_21575 nbtPredicate - f Lnet/minecraft/class_4559; field_21574 statePredicate - f Lnet/minecraft/class_2248; field_21572 block -c net/minecraft/class_196 net/minecraft/advancements/criterion/BredAnimalsTrigger - m (Lnet/minecraft/class_47;Lnet/minecraft/class_47;Lnet/minecraft/class_47;Lnet/minecraft/class_196$class_198;)Z method_22455 func_233510_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_196$class_198; method_854 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_853 access$000 - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1429;Lnet/minecraft/class_1429;Lnet/minecraft/class_1296;)V method_855 trigger - f Lnet/minecraft/class_2960; field_1271 ID -c net/minecraft/class_196$class_198 net/minecraft/advancements/criterion/BredAnimalsTrigger$Instance - m (Lnet/minecraft/class_47;Lnet/minecraft/class_47;Lnet/minecraft/class_47;)Z method_862 test - m ()Lnet/minecraft/class_196$class_198; method_860 any - m (Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_196$class_198; method_861 forParent - m (Lnet/minecraft/class_2048;Lnet/minecraft/class_2048;Lnet/minecraft/class_2048;)Lnet/minecraft/class_196$class_198; method_29918 forAll - f Lnet/minecraft/class_2048$class_5258; field_1275 child - f Lnet/minecraft/class_2048$class_5258; field_1277 partner - f Lnet/minecraft/class_2048$class_5258; field_1276 parent -c net/minecraft/class_1996 net/minecraft/advancements/criterion/BrewedPotionTrigger - m ()Lnet/minecraft/class_2960; method_8783 access$000 - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1842;)V method_8784 trigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_1996$class_1998; method_8785 deserializeTrigger - m (Lnet/minecraft/class_1842;Lnet/minecraft/class_1996$class_1998;)Z method_22456 func_226301_a_ - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17826 func_215103_a - f Lnet/minecraft/class_2960; field_9488 ID -c net/minecraft/class_1996$class_1998 net/minecraft/advancements/criterion/BrewedPotionTrigger$Instance - m ()Lnet/minecraft/class_1996$class_1998; method_8791 brewedPotion - m (Lnet/minecraft/class_1842;)Z method_8790 test - f Lnet/minecraft/class_1842; field_9492 potion -c net/minecraft/class_1999 net/minecraft/advancements/criterion/ChangeDimensionTrigger - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;Lnet/minecraft/class_1999$class_2001;)Z method_22457 func_233550_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_1999$class_2001; method_8793 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_8792 access$000 - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;)V method_8794 testForAll - f Lnet/minecraft/class_2960; field_9493 ID -c net/minecraft/class_1999$class_2001 net/minecraft/advancements/criterion/ChangeDimensionTrigger$Instance - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;)Z method_8800 test - m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_1999$class_2001; method_8799 toWorld - f Lnet/minecraft/class_5321; field_9497 from - f Lnet/minecraft/class_5321; field_9498 to -c net/minecraft/class_2002 net/minecraft/advancements/criterion/ChanneledLightningTrigger - m (Ljava/util/List;Lnet/minecraft/class_2002$class_2004;)Z method_22458 func_233673_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;)Lnet/minecraft/class_47; method_27791 func_233674_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2002$class_2004; method_8801 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_8802 access$000 - m (Lnet/minecraft/class_3222;Ljava/util/Collection;)V method_8803 trigger - f Lnet/minecraft/class_2960; field_9499 ID -c net/minecraft/class_2002$class_2004 net/minecraft/advancements/criterion/ChanneledLightningTrigger$Instance - m (I)[Lnet/minecraft/class_2048$class_5258; method_27792 func_233675_a_ - m ([Lnet/minecraft/class_2048;)Lnet/minecraft/class_2002$class_2004; method_8809 channeledLightning - m (Ljava/util/Collection;)Z method_8808 test - f [Lnet/minecraft/class_2048$class_5258; field_9503 victims -c net/minecraft/class_2006 net/minecraft/advancements/criterion/ConstructBeaconTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2006$class_2008; method_8811 deserializeTrigger - m (Lnet/minecraft/class_2580;Lnet/minecraft/class_2006$class_2008;)Z method_22459 func_226308_a_ - m ()Lnet/minecraft/class_2960; method_8810 access$000 - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2580;)V method_8812 trigger - f Lnet/minecraft/class_2960; field_9504 ID -c net/minecraft/class_2006$class_2008 net/minecraft/advancements/criterion/ConstructBeaconTrigger$Instance - m (Lnet/minecraft/class_2096$class_2100;)Lnet/minecraft/class_2006$class_2008; method_8818 forLevel - m (Lnet/minecraft/class_2580;)Z method_8817 test - f Lnet/minecraft/class_2096$class_2100; field_9508 level -c net/minecraft/class_2010 net/minecraft/advancements/criterion/ConsumeItemTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;)V method_8821 trigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2010$class_2012; method_8820 deserializeTrigger - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2010$class_2012;)Z method_22460 func_226325_a_ - m ()Lnet/minecraft/class_2960; method_8819 access$000 - f Lnet/minecraft/class_2960; field_9509 ID -c net/minecraft/class_2010$class_2012 net/minecraft/advancements/criterion/ConsumeItemTrigger$Instance - m ()Lnet/minecraft/class_2010$class_2012; method_8827 any - m (Lnet/minecraft/class_1799;)Z method_8826 test - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2010$class_2012; method_8828 forItem - f Lnet/minecraft/class_2073; field_9513 item -c net/minecraft/class_2014 net/minecraft/advancements/criterion/CuredZombieVillagerTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2014$class_2016; method_8830 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_8829 access$000 - m (Lnet/minecraft/class_47;Lnet/minecraft/class_47;Lnet/minecraft/class_2014$class_2016;)Z method_22461 func_233969_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1642;Lnet/minecraft/class_1646;)V method_8831 trigger - f Lnet/minecraft/class_2960; field_9514 ID -c net/minecraft/class_2014$class_2016 net/minecraft/advancements/criterion/CuredZombieVillagerTrigger$Instance - m (Lnet/minecraft/class_47;Lnet/minecraft/class_47;)Z method_8837 test - m ()Lnet/minecraft/class_2014$class_2016; method_8836 any - f Lnet/minecraft/class_2048$class_5258; field_9518 zombie - f Lnet/minecraft/class_2048$class_5258; field_9519 villager -c net/minecraft/class_2019 net/minecraft/advancements/criterion/DamagePredicate - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2019; method_8839 deserialize - m ()Lcom/google/gson/JsonElement; method_8840 serialize - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1282;FFZ)Z method_8838 test - f Lnet/minecraft/class_2048; field_9521 sourceEntity - f Lnet/minecraft/class_2096$class_2099; field_9524 taken - f Ljava/lang/Boolean; field_9522 blocked - f Lnet/minecraft/class_2019; field_9520 ANY - f Lnet/minecraft/class_2022; field_9525 type - f Lnet/minecraft/class_2096$class_2099; field_9523 dealt -c net/minecraft/class_2019$class_2020 net/minecraft/advancements/criterion/DamagePredicate$Builder - m ()Lnet/minecraft/class_2019$class_2020; method_8844 create - m (Ljava/lang/Boolean;)Lnet/minecraft/class_2019$class_2020; method_8841 blocked - m (Lnet/minecraft/class_2022$class_2023;)Lnet/minecraft/class_2019$class_2020; method_8842 type - m ()Lnet/minecraft/class_2019; method_8843 build - f Lnet/minecraft/class_2048; field_9528 sourceEntity - f Lnet/minecraft/class_2096$class_2099; field_9530 dealt - f Lnet/minecraft/class_2022; field_9529 type - f Lnet/minecraft/class_2096$class_2099; field_9527 taken - f Ljava/lang/Boolean; field_9526 blocked -c net/minecraft/class_2022 net/minecraft/advancements/criterion/DamageSourcePredicate - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Ljava/lang/Boolean; method_8849 optionalBoolean - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/Boolean;)V method_8850 addProperty - m ()Lcom/google/gson/JsonElement; method_8848 serialize - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1282;)Z method_8847 test - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_243;Lnet/minecraft/class_1282;)Z method_8845 test - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2022; method_8846 deserialize - f Lnet/minecraft/class_2022; field_9533 ANY - f Ljava/lang/Boolean; field_9535 isProjectile - f Ljava/lang/Boolean; field_9536 isExplosion - f Ljava/lang/Boolean; field_9532 bypassesArmor - f Lnet/minecraft/class_2048; field_9539 sourceEntity - f Ljava/lang/Boolean; field_9531 bypassesInvulnerability - f Ljava/lang/Boolean; field_9537 bypassesMagic - f Lnet/minecraft/class_2048; field_9534 directEntity - f Ljava/lang/Boolean; field_9540 isFire - f Ljava/lang/Boolean; field_9541 isMagic - f Ljava/lang/Boolean; field_9538 isLightning -c net/minecraft/class_2022$class_2023 net/minecraft/advancements/criterion/DamageSourcePredicate$Builder - m (Ljava/lang/Boolean;)Lnet/minecraft/class_2022$class_2023; method_8853 isLightning - m (Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_2022$class_2023; method_8854 direct - m ()Lnet/minecraft/class_2022$class_2023; method_8855 damageType - m ()Lnet/minecraft/class_2022; method_8851 build - m (Ljava/lang/Boolean;)Lnet/minecraft/class_2022$class_2023; method_8852 isProjectile - f Ljava/lang/Boolean; field_9551 isLightning - f Ljava/lang/Boolean; field_9546 isExplosion - f Lnet/minecraft/class_2048; field_9545 sourceEntity - f Ljava/lang/Boolean; field_9547 isProjectile - f Lnet/minecraft/class_2048; field_9544 directEntity - f Ljava/lang/Boolean; field_9543 bypassesInvulnerability - f Ljava/lang/Boolean; field_9548 bypassesArmor - f Ljava/lang/Boolean; field_9550 isMagic - f Ljava/lang/Boolean; field_9549 isFire - f Ljava/lang/Boolean; field_9542 bypassesMagic -c net/minecraft/class_5257 net/minecraft/loot/ConditionArrayParser - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_52; method_27798 func_234052_a_ - m (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V method_27797 func_234051_a_ - m (Lcom/google/gson/JsonArray;Ljava/lang/String;Lnet/minecraft/class_176;)[Lnet/minecraft/class_5341; method_27796 func_234050_a_ - m ()Lnet/minecraft/class_2960; method_27795 func_234049_a_ - f Lnet/minecraft/class_4567; field_24385 field_234047_c_ - f Lnet/minecraft/class_2960; field_24384 field_234046_b_ - f Lcom/google/gson/Gson; field_24386 field_234048_d_ - f Lorg/apache/logging/log4j/Logger; field_24383 field_234045_a_ -c net/minecraft/class_2025 net/minecraft/advancements/criterion/DistancePredicate - m (Lnet/minecraft/class_2096$class_2099;)Lnet/minecraft/class_2025; method_8856 forVertical - m ()Lcom/google/gson/JsonElement; method_8858 serialize - m (Lnet/minecraft/class_2096$class_2099;)Lnet/minecraft/class_2025; method_8860 forHorizontal - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2025; method_8857 deserialize - m (DDDDDD)Z method_8859 test - f Lnet/minecraft/class_2096$class_2099; field_9557 horizontal - f Lnet/minecraft/class_2025; field_9553 ANY - f Lnet/minecraft/class_2096$class_2099; field_9556 absolute - f Lnet/minecraft/class_2096$class_2099; field_9554 x - f Lnet/minecraft/class_2096$class_2099; field_9555 y - f Lnet/minecraft/class_2096$class_2099; field_9552 z -c net/minecraft/class_2027 net/minecraft/advancements/criterion/EffectsChangedTrigger - m ()Lnet/minecraft/class_2960; method_8861 access$000 - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2027$class_2029; method_8862 deserializeTrigger - m (Lnet/minecraft/class_3222;)V method_8863 trigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2027$class_2029;)Z method_22462 func_226524_a_ - f Lnet/minecraft/class_2960; field_9558 ID -c net/minecraft/class_2027$class_2029 net/minecraft/advancements/criterion/EffectsChangedTrigger$Instance - m (Lnet/minecraft/class_2102;)Lnet/minecraft/class_2027$class_2029; method_8869 forEffect - m (Lnet/minecraft/class_3222;)Z method_8868 test - f Lnet/minecraft/class_2102; field_9562 effects -c net/minecraft/class_2030 net/minecraft/advancements/criterion/EnchantedItemTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;I)V method_8870 trigger - m ()Lnet/minecraft/class_2960; method_8871 access$000 - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2030$class_2032; method_8872 deserializeTrigger - m (Lnet/minecraft/class_1799;ILnet/minecraft/class_2030$class_2032;)Z method_22463 func_226528_a_ - f Lnet/minecraft/class_2960; field_9563 ID -c net/minecraft/class_2030$class_2032 net/minecraft/advancements/criterion/EnchantedItemTrigger$Instance - m ()Lnet/minecraft/class_2030$class_2032; method_8877 any - m (Lnet/minecraft/class_1799;I)Z method_8878 test - f Lnet/minecraft/class_2096$class_2100; field_9568 levels - f Lnet/minecraft/class_2073; field_9567 item -c net/minecraft/class_2035 net/minecraft/advancements/criterion/EnchantmentPredicate - m (Lcom/google/gson/JsonElement;)[Lnet/minecraft/class_2035; method_8879 deserializeArray - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17849 func_217954_a - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2035; method_8882 deserialize - m (Ljava/util/Map;)Z method_8880 test - m ()Lcom/google/gson/JsonElement; method_8881 serialize - f Lnet/minecraft/class_1887; field_9569 enchantment - f Lnet/minecraft/class_2035; field_9571 ANY - f Lnet/minecraft/class_2096$class_2100; field_9570 levels - f [Lnet/minecraft/class_2035; field_20687 enchantments -c net/minecraft/class_2037 net/minecraft/advancements/criterion/EnterBlockTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2680;)V method_8885 trigger - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2248; method_22466 deserializeBlock - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2037$class_2039; method_8883 deserializeTrigger - m (Lnet/minecraft/class_2248;Ljava/lang/String;)V method_22464 func_226548_a_ - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17850 func_226551_a_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2037$class_2039;)Z method_22465 func_226549_a_ - m ()Lnet/minecraft/class_2960; method_8884 access$000 - f Lnet/minecraft/class_2960; field_9572 ID -c net/minecraft/class_2037$class_2039 net/minecraft/advancements/criterion/EnterBlockTrigger$Instance - m (Lnet/minecraft/class_2680;)Z method_8891 test - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2037$class_2039; method_8890 forBlock - f Lnet/minecraft/class_2248; field_9576 block - f Lnet/minecraft/class_4559; field_9577 properties -c net/minecraft/class_3735 net/minecraft/advancements/criterion/EntityEquipmentPredicate - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_3735; method_16224 deserialize - m (Lnet/minecraft/class_1297;)Z method_16226 test - m ()Lcom/google/gson/JsonElement; method_16225 serialize - f Lnet/minecraft/class_2073; field_16489 feet - f Lnet/minecraft/class_3735; field_16485 ANY - f Lnet/minecraft/class_2073; field_16488 legs - f Lnet/minecraft/class_2073; field_16487 chest - f Lnet/minecraft/class_2073; field_16483 head - f Lnet/minecraft/class_2073; field_16484 offHand - f Lnet/minecraft/class_2073; field_16486 mainHand - f Lnet/minecraft/class_3735; field_19240 WEARING_ILLAGER_BANNER -c net/minecraft/class_3735$class_5278 net/minecraft/advancements/criterion/EntityEquipmentPredicate$Builder - m (Lnet/minecraft/class_2073;)Lnet/minecraft/class_3735$class_5278; method_27966 setHeadCondition - m (Lnet/minecraft/class_2073;)Lnet/minecraft/class_3735$class_5278; method_27968 setChestCondition - m (Lnet/minecraft/class_2073;)Lnet/minecraft/class_3735$class_5278; method_27969 setLegsCondition - m ()Lnet/minecraft/class_3735; method_27967 build - m ()Lnet/minecraft/class_3735$class_5278; method_27965 createBuilder - m (Lnet/minecraft/class_2073;)Lnet/minecraft/class_3735$class_5278; method_27970 setFeetCondition - f Lnet/minecraft/class_2073; field_24484 legs - f Lnet/minecraft/class_2073; field_24483 chest - f Lnet/minecraft/class_2073; field_24485 feet - f Lnet/minecraft/class_2073; field_24486 mainHand - f Lnet/minecraft/class_2073; field_24482 head - f Lnet/minecraft/class_2073; field_24487 offHand -c net/minecraft/class_2040 net/minecraft/advancements/criterion/EntityFlagsPredicate - m (Lnet/minecraft/class_1297;)Z method_8892 test - m ()Lcom/google/gson/JsonElement; method_8894 serialize - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2040; method_8893 deserialize - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/Boolean;)V method_8896 putBoolean - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Ljava/lang/Boolean; method_8895 getBoolean - f Ljava/lang/Boolean; field_9582 sneaking - f Ljava/lang/Boolean; field_9579 sprinting - f Ljava/lang/Boolean; field_9578 swimming - f Ljava/lang/Boolean; field_9583 baby - f Lnet/minecraft/class_2040; field_9581 ALWAYS_TRUE - f Ljava/lang/Boolean; field_9580 onFire -c net/minecraft/class_2040$class_2041 net/minecraft/advancements/criterion/EntityFlagsPredicate$Builder - m (Ljava/lang/Boolean;)Lnet/minecraft/class_2040$class_2041; method_29935 isBaby - m ()Lnet/minecraft/class_2040; method_8899 build - m ()Lnet/minecraft/class_2040$class_2041; method_8897 create - m (Ljava/lang/Boolean;)Lnet/minecraft/class_2040$class_2041; method_8898 onFire - f Ljava/lang/Boolean; field_9584 baby - f Ljava/lang/Boolean; field_9585 swimming - f Ljava/lang/Boolean; field_9588 sprinting - f Ljava/lang/Boolean; field_9586 sneaking - f Ljava/lang/Boolean; field_9587 onFire -c net/minecraft/class_2044 net/minecraft/advancements/criterion/EntityHurtPlayerTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1282;FFZLnet/minecraft/class_2044$class_2046;)Z method_22468 func_226603_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1282;FFZ)V method_22467 trigger - m ()Lnet/minecraft/class_2960; method_8900 access$000 - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2044$class_2046; method_8902 deserializeTrigger - f Lnet/minecraft/class_2960; field_9589 ID -c net/minecraft/class_2044$class_2046 net/minecraft/advancements/criterion/EntityHurtPlayerTrigger$Instance - m (Lnet/minecraft/class_2019$class_2020;)Lnet/minecraft/class_2044$class_2046; method_8908 forDamage - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1282;FFZ)Z method_8907 test - f Lnet/minecraft/class_2019; field_9593 damage -c net/minecraft/class_2048 net/minecraft/advancements/criterion/EntityPredicate - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2048; method_8913 deserialize - m ()Lcom/google/gson/JsonElement; method_8912 serialize - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;)Z method_8914 test - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;)Lnet/minecraft/class_47; method_27802 getLootContext - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)Z method_8909 test - f Lnet/minecraft/class_2050; field_9595 type - f Lnet/minecraft/class_2048; field_24489 targetCondition - f Lnet/minecraft/class_2048; field_9599 ANY - f Lnet/minecraft/class_2960; field_16317 catType - f Lnet/minecraft/class_2048; field_24488 mountCondition - f Ljava/lang/String; field_20698 team - f Lnet/minecraft/class_4553; field_20697 player - f Lnet/minecraft/class_2090; field_9596 location - f Lnet/minecraft/class_4965; field_23135 fishingCondition - f Lnet/minecraft/class_3735; field_16490 equipment - f Lnet/minecraft/class_2105; field_9600 nbt - f Lnet/minecraft/class_2040; field_9597 flags - f Lnet/minecraft/class_2102; field_9594 effects - f Lnet/minecraft/class_2025; field_9601 distance -c net/minecraft/class_2048$class_2049 net/minecraft/advancements/criterion/EntityPredicate$Builder - m (Lnet/minecraft/class_2105;)Lnet/minecraft/class_2048$class_2049; method_8915 nbt - m ()Lnet/minecraft/class_2048; method_8920 build - m ()Lnet/minecraft/class_2048$class_2049; method_8916 create - m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2048$class_2049; method_8922 type - m (Lnet/minecraft/class_3735;)Lnet/minecraft/class_2048$class_2049; method_16227 equipment - m (Lnet/minecraft/class_2090;)Lnet/minecraft/class_2048$class_2049; method_8918 location - m (Lnet/minecraft/class_2102;)Lnet/minecraft/class_2048$class_2049; method_8923 effects - m (Lnet/minecraft/class_2025;)Lnet/minecraft/class_2048$class_2049; method_8924 distance - m (Lnet/minecraft/class_4965;)Lnet/minecraft/class_2048$class_2049; method_26090 fishing - m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_2048$class_2049; method_8921 type - m (Lnet/minecraft/class_2050;)Lnet/minecraft/class_2048$class_2049; method_8917 type - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2048$class_2049; method_16112 catTypeOrNull - m (Ljava/lang/String;)Lnet/minecraft/class_2048$class_2049; method_22470 team - m (Lnet/minecraft/class_2048;)Lnet/minecraft/class_2048$class_2049; method_27971 mount - m (Lnet/minecraft/class_2048;)Lnet/minecraft/class_2048$class_2049; method_27972 target - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2048$class_2049; method_16113 catType - m (Lnet/minecraft/class_4553;)Lnet/minecraft/class_2048$class_2049; method_22469 player - m (Lnet/minecraft/class_2040;)Lnet/minecraft/class_2048$class_2049; method_8919 flags - f Ljava/lang/String; field_20700 team - f Lnet/minecraft/class_2040; field_9606 flags - f Lnet/minecraft/class_2102; field_9605 effects - f Lnet/minecraft/class_4553; field_20699 player - f Lnet/minecraft/class_2048; field_24490 mount - f Lnet/minecraft/class_2050; field_9607 type - f Lnet/minecraft/class_2048; field_24491 target - f Lnet/minecraft/class_2025; field_9602 distance - f Lnet/minecraft/class_2105; field_9603 nbt - f Lnet/minecraft/class_4965; field_23136 fishing - f Lnet/minecraft/class_3735; field_16491 equipment - f Lnet/minecraft/class_2960; field_16318 catType - f Lnet/minecraft/class_2090; field_9604 location -c net/minecraft/class_2048$class_5258 net/minecraft/advancements/criterion/EntityPredicate$AndPredicate - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lnet/minecraft/class_5257;)[Lnet/minecraft/class_2048$class_5258; method_27809 deserialize - m ([Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5267;)Lcom/google/gson/JsonElement; method_27808 serializeConditionsIn - m ([Lnet/minecraft/class_5341;)Lnet/minecraft/class_2048$class_5258; method_27973 serializePredicate - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2048$class_5258; method_27805 deserializeJSONObject - m (Lnet/minecraft/class_2048;)Lnet/minecraft/class_2048$class_5258; method_27803 createAndFromEntityCondition - m (Ljava/lang/String;Lnet/minecraft/class_5257;Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2048$class_5258; method_27807 fromJSONElement - m (Lnet/minecraft/class_5267;)Lcom/google/gson/JsonElement; method_27804 serializeConditions - m (Lnet/minecraft/class_47;)Z method_27806 testContext - f Ljava/util/function/Predicate; field_24390 lootContext - f Lnet/minecraft/class_2048$class_5258; field_24388 ANY_AND - f [Lnet/minecraft/class_5341; field_24389 lootConditions -c net/minecraft/class_2048$1 net/minecraft/advancements/criterion/EntityPredicate$1 -c net/minecraft/class_2050 net/minecraft/advancements/criterion/EntityTypePredicate - m (Lnet/minecraft/class_1299;)Z method_8925 test - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2050; method_8928 deserialize - m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2050; method_8926 fromTag - m ()Lcom/google/gson/JsonElement; method_8927 serialize - m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_2050; method_8929 fromType - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17854 func_217997_a - f Lnet/minecraft/class_2050; field_9609 ANY - f Lcom/google/common/base/Joiner; field_9608 JOINER -c net/minecraft/class_2050$class_2052 net/minecraft/advancements/criterion/EntityTypePredicate$TypePredicate - f Lnet/minecraft/class_1299; field_9611 type -c net/minecraft/class_2050$class_2051 net/minecraft/advancements/criterion/EntityTypePredicate$TagPredicate - f Lnet/minecraft/class_3494; field_9610 tag -c net/minecraft/class_2050$1 net/minecraft/advancements/criterion/EntityTypePredicate$1 -c net/minecraft/class_2054 net/minecraft/advancements/criterion/FilledBucketTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2054$class_2056; method_8931 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_8930 access$000 - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2054$class_2056;)Z method_22471 func_226627_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;)V method_8932 trigger - f Lnet/minecraft/class_2960; field_9612 ID -c net/minecraft/class_2054$class_2056 net/minecraft/advancements/criterion/FilledBucketTrigger$Instance - m (Lnet/minecraft/class_2073;)Lnet/minecraft/class_2054$class_2056; method_8937 forItem - m (Lnet/minecraft/class_1799;)Z method_8938 test - f Lnet/minecraft/class_2073; field_9616 item -c net/minecraft/class_4965 net/minecraft/loot/FishingPredicate - m (Z)Lnet/minecraft/class_4965; method_26095 func_234640_a_ - m (Lnet/minecraft/class_1297;)Z method_26093 func_234638_a_ - m ()Lcom/google/gson/JsonElement; method_26092 func_234637_a_ - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4965; method_26094 func_234639_a_ - f Lnet/minecraft/class_4965; field_23137 field_234635_a_ - f Z field_23138 field_234636_b_ -c net/minecraft/class_2058 net/minecraft/advancements/criterion/FishingRodHookedTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2058$class_2060; method_8941 deserializeTrigger - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;Ljava/util/Collection;Lnet/minecraft/class_2058$class_2060;)Z method_22472 func_234658_a_ - m ()Lnet/minecraft/class_2960; method_8940 access$000 - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_1536;Ljava/util/Collection;)V method_8939 trigger - f Lnet/minecraft/class_2960; field_9617 ID -c net/minecraft/class_2058$class_2060 net/minecraft/advancements/criterion/FishingRodHookedTrigger$Instance - m (Lnet/minecraft/class_2073;Lnet/minecraft/class_2048;Lnet/minecraft/class_2073;)Lnet/minecraft/class_2058$class_2060; method_8947 create - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;Ljava/util/Collection;)Z method_27810 test - f Lnet/minecraft/class_2073; field_9623 item - f Lnet/minecraft/class_2048$class_5258; field_24391 entity - f Lnet/minecraft/class_2073; field_9621 rod -c net/minecraft/class_4551 net/minecraft/advancements/criterion/FluidPredicate - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_22475 test - m ()Lcom/google/gson/JsonElement; method_22473 serialize - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4551; method_22474 deserialize - f Lnet/minecraft/class_3494; field_20709 fluidTag - f Lnet/minecraft/class_4559; field_20711 stateCondition - f Lnet/minecraft/class_3611; field_20710 fluid - f Lnet/minecraft/class_4551; field_20708 ANY -c net/minecraft/class_2062 net/minecraft/advancements/criterion/ImpossibleTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2062$class_2063; method_8949 deserialize - m ()Lnet/minecraft/class_2960; method_8948 access$000 - f Lnet/minecraft/class_2960; field_9624 ID -c net/minecraft/class_2062$class_2063 net/minecraft/advancements/criterion/ImpossibleTrigger$Instance -c net/minecraft/class_2066 net/minecraft/advancements/criterion/InventoryChangeTrigger - m (Lnet/minecraft/class_1661;Lnet/minecraft/class_1799;IIILnet/minecraft/class_2066$class_2068;)Z method_22476 func_234802_a_ - m ()Lnet/minecraft/class_2960; method_8951 access$000 - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2066$class_2068; method_8952 deserializeTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1661;Lnet/minecraft/class_1799;)V method_8950 test - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1661;Lnet/minecraft/class_1799;III)V method_24362 trigger - f Lnet/minecraft/class_2960; field_9625 ID -c net/minecraft/class_2066$class_2068 net/minecraft/advancements/criterion/InventoryChangeTrigger$Instance - m ([Lnet/minecraft/class_2073;)Lnet/minecraft/class_2066$class_2068; method_8957 forItems - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2073;)Z method_24363 func_234806_a_ - m ([Lnet/minecraft/class_1935;)Lnet/minecraft/class_2066$class_2068; method_8959 forItems - m (Lnet/minecraft/class_1661;Lnet/minecraft/class_1799;III)Z method_8958 test - f Lnet/minecraft/class_2096$class_2100; field_9629 occupied - f [Lnet/minecraft/class_2073; field_9632 items - f Lnet/minecraft/class_2096$class_2100; field_9631 empty - f Lnet/minecraft/class_2096$class_2100; field_9630 full -c net/minecraft/class_2069 net/minecraft/advancements/criterion/ItemDurabilityTrigger - m (Lnet/minecraft/class_1799;ILnet/minecraft/class_2069$class_2071;)Z method_22477 func_226653_a_ - m ()Lnet/minecraft/class_2960; method_8961 access$000 - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;I)V method_8960 trigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2069$class_2071; method_8962 deserializeTrigger - f Lnet/minecraft/class_2960; field_9633 ID -c net/minecraft/class_2069$class_2071 net/minecraft/advancements/criterion/ItemDurabilityTrigger$Instance - m (Lnet/minecraft/class_1799;I)Z method_8968 test - m (Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_2073;Lnet/minecraft/class_2096$class_2100;)Lnet/minecraft/class_2069$class_2071; method_8967 create - f Lnet/minecraft/class_2073; field_9637 item - f Lnet/minecraft/class_2096$class_2100; field_9638 durability - f Lnet/minecraft/class_2096$class_2100; field_9639 delta -c net/minecraft/class_5279 net/minecraft/advancements/criterion/ThrownItemPickedUpByEntityTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_5279$class_5280; method_27974 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_27977 func_234832_b_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_47;Lnet/minecraft/class_5279$class_5280;)Z method_27976 func_234831_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_1297;)V method_27975 test - f Lnet/minecraft/class_2960; field_24492 ID -c net/minecraft/class_5279$class_5280 net/minecraft/advancements/criterion/ThrownItemPickedUpByEntityTrigger$Instance - m (Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_2073$class_2074;Lnet/minecraft/class_2048$class_5258;)Lnet/minecraft/class_5279$class_5280; method_27978 create - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Z method_27979 test - f Lnet/minecraft/class_2073; field_24493 stack - f Lnet/minecraft/class_2048$class_5258; field_24494 entity -c net/minecraft/class_2073 net/minecraft/advancements/criterion/ItemPredicate - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17871 func_218005_a - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17872 func_218004_b - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2073; method_8969 deserialize - m (Lnet/minecraft/class_1799;)Z method_8970 test - m ()Lcom/google/gson/JsonElement; method_8971 serialize - m (Lcom/google/gson/JsonElement;)[Lnet/minecraft/class_2073; method_8972 deserializeArray - f Lnet/minecraft/class_2096$class_2100; field_9646 durability - f [Lnet/minecraft/class_2035; field_20689 bookEnchantments - f Lnet/minecraft/class_1842; field_9642 potion - f Lnet/minecraft/class_2073; field_9640 ANY - f Lnet/minecraft/class_2096$class_2100; field_9641 count - f Lnet/minecraft/class_2105; field_9645 nbt - f Lnet/minecraft/class_3494; field_9643 tag - f [Lnet/minecraft/class_2035; field_9647 enchantments - f Lnet/minecraft/class_1792; field_9644 item -c net/minecraft/class_2073$class_2074 net/minecraft/advancements/criterion/ItemPredicate$Builder - m ()Lnet/minecraft/class_2073$class_2074; method_8973 create - m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2073$class_2074; method_8975 tag - m (Lnet/minecraft/class_2035;)Lnet/minecraft/class_2073$class_2074; method_8978 enchantment - m ()Lnet/minecraft/class_2073; method_8976 build - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2073$class_2074; method_20399 nbt - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2073$class_2074; method_8977 item - f Lnet/minecraft/class_1792; field_9650 item - f Ljava/util/List; field_20690 bookEnchantments - f Lnet/minecraft/class_2096$class_2100; field_9653 durability - f Ljava/util/List; field_9649 enchantments - f Lnet/minecraft/class_2096$class_2100; field_9648 count - f Lnet/minecraft/class_1842; field_9651 potion - f Lnet/minecraft/class_3494; field_9652 tag - f Lnet/minecraft/class_2105; field_9654 nbt -c net/minecraft/class_4711 net/minecraft/advancements/criterion/RightClickBlockWithItemTrigger - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3222;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;Lnet/minecraft/class_4711$class_4712;)Z method_23888 func_226694_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_4711$class_4712; method_23890 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_27980 func_234850_b_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_23889 test - f Lnet/minecraft/class_2960; field_21576 ID -c net/minecraft/class_4711$class_4712 net/minecraft/advancements/criterion/RightClickBlockWithItemTrigger$Instance - m (Lnet/minecraft/class_2090$class_2091;Lnet/minecraft/class_2073$class_2074;)Lnet/minecraft/class_4711$class_4712; method_27981 create - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)Z method_23892 test - f Lnet/minecraft/class_2073; field_21579 stack - f Lnet/minecraft/class_2090; field_24495 location -c net/minecraft/class_2076 net/minecraft/advancements/criterion/KilledByCrossbowTrigger - m ()Lnet/minecraft/class_2960; method_8981 func_215106_b - m (Ljava/util/List;Ljava/util/Set;Lnet/minecraft/class_2076$class_2078;)Z method_22478 func_234940_a_ - m (Lnet/minecraft/class_3222;Ljava/util/Collection;)V method_8980 test - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2076$class_2078; method_8979 deserializeTrigger - f Lnet/minecraft/class_2960; field_9655 ID -c net/minecraft/class_2076$class_2078 net/minecraft/advancements/criterion/KilledByCrossbowTrigger$Instance - m (Lnet/minecraft/class_2096$class_2100;)Lnet/minecraft/class_2076$class_2078; method_8987 fromBounds - m (Ljava/util/Collection;I)Z method_8988 test - m ([Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_2076$class_2078; method_8986 fromBuilders - f Lnet/minecraft/class_2096$class_2100; field_9659 bounds - f [Lnet/minecraft/class_2048$class_5258; field_9660 entities -c net/minecraft/class_2080 net/minecraft/advancements/criterion/KilledTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2080$class_2083; method_8989 deserializeTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_47;Lnet/minecraft/class_1282;Lnet/minecraft/class_2080$class_2083;)Z method_22479 func_226846_a_ - m (Lnet/minecraft/class_2080;)Lnet/minecraft/class_2960; method_8991 access$000 - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;Lnet/minecraft/class_1282;)V method_8990 trigger - f Lnet/minecraft/class_2960; field_9661 id -c net/minecraft/class_2080$class_2083 net/minecraft/advancements/criterion/KilledTrigger$Instance - m (Lnet/minecraft/class_2048$class_2049;Lnet/minecraft/class_2022$class_2023;)Lnet/minecraft/class_2080$class_2083; method_9001 playerKilledEntity - m ()Lnet/minecraft/class_2080$class_2083; method_8998 entityKilledPlayer - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_47;Lnet/minecraft/class_1282;)Z method_9000 test - m ()Lnet/minecraft/class_2080$class_2083; method_8999 playerKilledEntity - m (Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_2080$class_2083; method_8997 playerKilledEntity - f Lnet/minecraft/class_2048$class_5258; field_9668 entity - f Lnet/minecraft/class_2022; field_9667 killingBlow -c net/minecraft/class_2085 net/minecraft/advancements/criterion/LevitationTrigger - m ()Lnet/minecraft/class_2960; method_9007 access$000 - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2085$class_2087; method_9006 deserializeTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_243;ILnet/minecraft/class_2085$class_2087;)Z method_22480 func_226852_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_243;I)V method_9008 trigger - f Lnet/minecraft/class_2960; field_9671 ID -c net/minecraft/class_2085$class_2087 net/minecraft/advancements/criterion/LevitationTrigger$Instance - m (Lnet/minecraft/class_2025;)Lnet/minecraft/class_2085$class_2087; method_9013 forDistance - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_243;I)Z method_9014 test - f Lnet/minecraft/class_2096$class_2100; field_9676 duration - f Lnet/minecraft/class_2025; field_9675 distance -c net/minecraft/class_4552 net/minecraft/advancements/criterion/LightPredicate - m ()Lcom/google/gson/JsonElement; method_22481 serialize - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_22483 test - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4552; method_22482 deserialize - f Lnet/minecraft/class_2096$class_2100; field_20713 bounds - f Lnet/minecraft/class_4552; field_20712 ANY -c net/minecraft/class_2090 net/minecraft/advancements/criterion/LocationPredicate - m (Lnet/minecraft/class_3195;)Lnet/minecraft/class_2090; method_9017 forFeature - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2090; method_9021 deserialize - m ()Lcom/google/gson/JsonElement; method_9019 serialize - m (Lcom/google/gson/JsonObject;Lcom/google/gson/JsonElement;)V method_28480 func_235307_a_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5321; method_28481 func_235310_b_ - m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_2090; method_9016 forRegistryKey - m (Lnet/minecraft/class_3218;DDD)Z method_9018 test - m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_2090; method_9022 forBiome - m (Lnet/minecraft/class_3218;FFF)Z method_9020 test - f Lnet/minecraft/class_4551; field_20716 fluid - f Lnet/minecraft/class_5321; field_9683 biome - f Lnet/minecraft/class_5321; field_9686 dimension - f Lnet/minecraft/class_4552; field_20714 light - f Lorg/apache/logging/log4j/Logger; field_24732 LOGGER - f Lnet/minecraft/class_2096$class_2099; field_9682 x - f Ljava/lang/Boolean; field_24500 smokey - f Lnet/minecraft/class_2096$class_2099; field_9681 z - f Lnet/minecraft/class_2090; field_9685 ANY - f Lnet/minecraft/class_2096$class_2099; field_9684 y - f Lnet/minecraft/class_4550; field_20715 block - f Lnet/minecraft/class_3195; field_9687 feature -c net/minecraft/class_2090$class_2091 net/minecraft/advancements/criterion/LocationPredicate$Builder - m ()Lnet/minecraft/class_2090$class_2091; method_22484 builder - m ()Lnet/minecraft/class_2090; method_9023 build - m (Lnet/minecraft/class_4550;)Lnet/minecraft/class_2090$class_2091; method_27989 block - m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_2090$class_2091; method_9024 biome - m (Ljava/lang/Boolean;)Lnet/minecraft/class_2090$class_2091; method_27990 smokey - f Lnet/minecraft/class_4550; field_20718 block - f Lnet/minecraft/class_4552; field_20717 light - f Lnet/minecraft/class_5321; field_9691 dimension - f Lnet/minecraft/class_3195; field_9688 feature - f Ljava/lang/Boolean; field_24501 smokey - f Lnet/minecraft/class_2096$class_2099; field_9692 z - f Lnet/minecraft/class_5321; field_9690 biome - f Lnet/minecraft/class_2096$class_2099; field_9689 y - f Lnet/minecraft/class_4551; field_20719 fluid - f Lnet/minecraft/class_2096$class_2099; field_9693 x -c net/minecraft/class_2092 net/minecraft/advancements/criterion/PositionTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2092$class_2094; method_9026 deserializeTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2092$class_2094;)Z method_22485 func_226923_a_ - m (Lnet/minecraft/class_3222;)V method_9027 trigger - m (Lnet/minecraft/class_2092;)Lnet/minecraft/class_2960; method_9025 access$000 - f Lnet/minecraft/class_2960; field_9694 id -c net/minecraft/class_2092$class_2094 net/minecraft/advancements/criterion/PositionTrigger$Instance - m ()Lnet/minecraft/class_2092$class_2094; method_20400 villageHero - m (Lnet/minecraft/class_3218;DDD)Z method_9033 test - m (Lnet/minecraft/class_2090;)Lnet/minecraft/class_2092$class_2094; method_9034 forLocation - m ()Lnet/minecraft/class_2092$class_2094; method_9032 sleptInBed - f Lnet/minecraft/class_2090; field_9698 location -c net/minecraft/class_5282 net/minecraft/advancements/criterion/PlayerGeneratesContainerLootTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2960;)V method_27993 test - m ()Lnet/minecraft/class_2960; method_27994 func_235479_b_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_5282$class_5283; method_27991 deserializeTrigger - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_5282$class_5283;)Z method_27992 func_235477_a_ - f Lnet/minecraft/class_2960; field_24502 ID -c net/minecraft/class_5282$class_5283 net/minecraft/advancements/criterion/PlayerGeneratesContainerLootTrigger$Instance - m (Lnet/minecraft/class_2960;)Z method_27996 test - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5282$class_5283; method_27995 create - f Lnet/minecraft/class_2960; field_24503 generatedLoot -c net/minecraft/class_2096 net/minecraft/advancements/criterion/MinMaxBounds - m (Lcom/mojang/brigadier/StringReader;Ljava/util/function/Function;Ljava/util/function/Supplier;)Ljava/lang/Number; method_9037 readNumber - m (Lcom/google/gson/JsonElement;Lnet/minecraft/class_2096;Ljava/util/function/BiFunction;Lnet/minecraft/class_2096$class_2097;)Lnet/minecraft/class_2096; method_9039 fromJson - m ()Lcom/google/gson/JsonElement; method_9036 serialize - m ()Ljava/lang/Number; method_9038 getMin - m ()Ljava/lang/Number; method_9042 getMax - m (Lcom/mojang/brigadier/StringReader;)Z method_9040 isAllowedInputChat - m (Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object; method_9035 optionallyFormat - m ()Z method_9041 isUnbounded - m (Lcom/mojang/brigadier/StringReader;Lnet/minecraft/class_2096$class_2098;Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/function/Function;)Lnet/minecraft/class_2096; method_9043 fromReader - f Ljava/lang/Number; field_9702 min - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9700 ERROR_EMPTY - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9701 ERROR_SWAPPED - f Ljava/lang/Number; field_9699 max -c net/minecraft/class_2096$class_2100 net/minecraft/advancements/criterion/MinMaxBounds$IntBound - m (I)Lnet/minecraft/class_2096$class_2100; method_9058 exactly - m (Ljava/lang/Integer;)Ljava/lang/Integer; method_9061 func_211346_b - m (Lcom/mojang/brigadier/StringReader;Ljava/lang/Integer;Ljava/lang/Integer;)Lnet/minecraft/class_2096$class_2100; method_9055 create - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2096$class_2100; method_9060 fromReader - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2096$class_2100; method_9056 fromJson - m (I)Z method_9054 test - m (I)Lnet/minecraft/class_2096$class_2100; method_9053 atLeast - m (Lcom/mojang/brigadier/StringReader;Ljava/util/function/Function;)Lnet/minecraft/class_2096$class_2100; method_9057 fromReader - m (Ljava/lang/Integer;)Ljava/lang/Long; method_9059 square - f Ljava/lang/Long; field_9707 maxSquared - f Ljava/lang/Long; field_9706 minSquared - f Lnet/minecraft/class_2096$class_2100; field_9708 UNBOUNDED -c net/minecraft/class_2096$class_2098 net/minecraft/advancements/criterion/MinMaxBounds$IBoundReader - m (Lcom/mojang/brigadier/StringReader;Ljava/lang/Number;Ljava/lang/Number;)Lnet/minecraft/class_2096; create create -c net/minecraft/class_2096$class_2099 net/minecraft/advancements/criterion/MinMaxBounds$FloatBound - m (Lcom/mojang/brigadier/StringReader;Ljava/lang/Float;Ljava/lang/Float;)Lnet/minecraft/class_2096$class_2099; method_9046 create - m (Lcom/mojang/brigadier/StringReader;Ljava/util/function/Function;)Lnet/minecraft/class_2096$class_2099; method_9048 fromReader - m (F)Z method_9047 test - m (D)Z method_9045 testSquared - m (F)Lnet/minecraft/class_2096$class_2099; method_9050 atLeast - m (Ljava/lang/Float;)Ljava/lang/Double; method_9044 square - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2096$class_2099; method_9049 fromReader - m (Ljava/lang/Float;)Ljava/lang/Float; method_9052 func_211358_b - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2096$class_2099; method_9051 fromJson - f Ljava/lang/Double; field_9704 maxSquared - f Ljava/lang/Double; field_9703 minSquared - f Lnet/minecraft/class_2096$class_2099; field_9705 UNBOUNDED -c net/minecraft/class_2096$class_2097 net/minecraft/advancements/criterion/MinMaxBounds$IBoundFactory - m (Ljava/lang/Number;Ljava/lang/Number;)Lnet/minecraft/class_2096; create create -c net/minecraft/class_2102 net/minecraft/advancements/criterion/MobEffectsPredicate - m (Lnet/minecraft/class_1297;)Z method_9062 test - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17894 func_218022_a - m (Lnet/minecraft/class_1309;)Z method_9067 test - m (Ljava/util/Map;)Z method_9063 test - m ()Lnet/minecraft/class_2102; method_9066 any - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2102; method_9064 deserialize - m ()Lcom/google/gson/JsonElement; method_9068 serialize - m (Lnet/minecraft/class_1291;)Lnet/minecraft/class_2102; method_9065 addEffect - f Lnet/minecraft/class_2102; field_9709 ANY - f Ljava/util/Map; field_9710 effects -c net/minecraft/class_2102$class_2103 net/minecraft/advancements/criterion/MobEffectsPredicate$InstancePredicate - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2102$class_2103; method_9070 deserialize - m (Lnet/minecraft/class_1293;)Z method_9069 test - m ()Lcom/google/gson/JsonElement; method_9071 serialize - f Lnet/minecraft/class_2096$class_2100; field_9711 amplifier - f Lnet/minecraft/class_2096$class_2100; field_9713 duration - f Ljava/lang/Boolean; field_9714 ambient - f Ljava/lang/Boolean; field_9712 visible -c net/minecraft/class_2105 net/minecraft/advancements/criterion/NBTPredicate - m (Lnet/minecraft/class_1799;)Z method_9074 test - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2105; method_9073 deserialize - m ()Lcom/google/gson/JsonElement; method_9075 serialize - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_2487; method_9076 writeToNBTWithSelectedItem - m (Lnet/minecraft/class_2520;)Z method_9077 test - m (Lnet/minecraft/class_1297;)Z method_9072 test - f Lnet/minecraft/class_2487; field_9715 tag - f Lnet/minecraft/class_2105; field_9716 ANY -c net/minecraft/class_2108 net/minecraft/advancements/criterion/NetherTravelTrigger - m ()Lnet/minecraft/class_2960; method_9079 access$000 - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_243;Lnet/minecraft/class_2108$class_2110;)Z method_22486 func_226945_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2108$class_2110; method_9078 deserializeTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_243;)V method_9080 trigger - f Lnet/minecraft/class_2960; field_9717 ID -c net/minecraft/class_2108$class_2110 net/minecraft/advancements/criterion/NetherTravelTrigger$Instance - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_243;DDD)Z method_9086 test - m (Lnet/minecraft/class_2025;)Lnet/minecraft/class_2108$class_2110; method_9085 forDistance - f Lnet/minecraft/class_2025; field_9723 distance - f Lnet/minecraft/class_2090; field_9722 exited - f Lnet/minecraft/class_2090; field_9721 entered -c net/minecraft/class_2111 net/minecraft/advancements/criterion/PlacedBlockTrigger - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17895 func_226951_a_ - m ()Lnet/minecraft/class_2960; method_9089 access$000 - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2111$class_2113; method_9088 deserializeTrigger - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2248; method_22492 deserializeBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_2111$class_2113;)Z method_22491 func_226949_a_ - m (Lnet/minecraft/class_2248;Ljava/lang/String;)V method_22490 func_226948_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9087 trigger - f Lnet/minecraft/class_2960; field_9724 ID -c net/minecraft/class_2111$class_2113 net/minecraft/advancements/criterion/PlacedBlockTrigger$Instance - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2111$class_2113; method_9095 placedBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;Lnet/minecraft/class_1799;)Z method_9094 test - f Lnet/minecraft/class_4559; field_9730 properties - f Lnet/minecraft/class_2073; field_9731 item - f Lnet/minecraft/class_2248; field_9728 block - f Lnet/minecraft/class_2090; field_9729 location -c net/minecraft/class_2115 net/minecraft/advancements/criterion/PlayerHurtEntityTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_47;Lnet/minecraft/class_1282;FFZLnet/minecraft/class_2115$class_2117;)Z method_22493 func_226956_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;Lnet/minecraft/class_1282;FFZ)V method_9097 trigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2115$class_2117; method_9098 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_9096 access$000 - f Lnet/minecraft/class_2960; field_9732 ID -c net/minecraft/class_2115$class_2117 net/minecraft/advancements/criterion/PlayerHurtEntityTrigger$Instance - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_47;Lnet/minecraft/class_1282;FFZ)Z method_9104 test - m (Lnet/minecraft/class_2019$class_2020;)Lnet/minecraft/class_2115$class_2117; method_9103 forDamage - f Lnet/minecraft/class_2048$class_5258; field_9737 entity - f Lnet/minecraft/class_2019; field_9736 damage -c net/minecraft/class_5409 net/minecraft/advancements/criterion/PlayerEntityInteractionTrigger - m ()Lnet/minecraft/class_2960; method_30098 func_241477_b_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_5409$class_5410; method_30096 deserializeTrigger - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;Lnet/minecraft/class_5409$class_5410;)Z method_30095 func_241475_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;Lnet/minecraft/class_1297;)V method_30097 test - f Lnet/minecraft/class_2960; field_25699 ID -c net/minecraft/class_5409$class_5410 net/minecraft/advancements/criterion/PlayerEntityInteractionTrigger$Instance - m (Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_2073$class_2074;Lnet/minecraft/class_2048$class_5258;)Lnet/minecraft/class_5409$class_5410; method_30099 create - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_47;)Z method_30100 test - f Lnet/minecraft/class_2048$class_5258; field_25701 entity - f Lnet/minecraft/class_2073; field_25700 stack -c net/minecraft/class_4553 net/minecraft/advancements/criterion/PlayerPredicate - m (Lit/unimi/dsi/fastutil/objects/Object2BooleanMap;Ljava/util/Map$Entry;)V method_22502 func_227003_a_ - m (Lnet/minecraft/class_3445;)Lnet/minecraft/class_2960; method_22495 getRegistryKeyForStat - m (Lnet/minecraft/class_3448;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3445; method_22496 getStat - m ()Lcom/google/gson/JsonElement; method_22494 serialize - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4553; method_22499 deserialize - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2960;Lnet/minecraft/class_4553$class_4556;)V method_22500 func_227001_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2960;Ljava/lang/Boolean;)V method_22501 func_227002_a_ - m (Lnet/minecraft/class_1297;)Z method_22497 test - m (Lcom/google/gson/JsonArray;Lnet/minecraft/class_3445;Lnet/minecraft/class_2096$class_2100;)V method_22498 func_226999_a_ - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4553$class_4556; method_22503 deserializeAdvancementPredicate - f Lnet/minecraft/class_4553; field_20722 ANY - f Lit/unimi/dsi/fastutil/objects/Object2BooleanMap; field_20726 recipes - f Ljava/util/Map; field_20725 stats - f Lnet/minecraft/class_1934; field_20724 gamemode - f Lnet/minecraft/class_2096$class_2100; field_20723 level - f Ljava/util/Map; field_20727 advancements -c net/minecraft/class_4553$class_4557 net/minecraft/advancements/criterion/PlayerPredicate$Default - m ()Lnet/minecraft/class_4553; method_22507 create - f Ljava/util/Map; field_20734 advancements - f Lnet/minecraft/class_1934; field_20731 gameType - f Lnet/minecraft/class_2096$class_2100; field_20730 level - f Lit/unimi/dsi/fastutil/objects/Object2BooleanMap; field_20733 recipes - f Ljava/util/Map; field_20732 statValues -c net/minecraft/class_4553$class_4555 net/minecraft/advancements/criterion/PlayerPredicate$CompletedAdvancementPredicate - m (Lnet/minecraft/class_167;)Z method_22505 test - m (Ljava/lang/Object;)Z test test - f Z field_20729 completion -c net/minecraft/class_4553$class_4556 net/minecraft/advancements/criterion/PlayerPredicate$IAdvancementPredicate - m ()Lcom/google/gson/JsonElement; method_22506 serialize -c net/minecraft/class_4553$class_4554 net/minecraft/advancements/criterion/PlayerPredicate$CriteriaPredicate - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_167;)Z method_22504 test - f Lit/unimi/dsi/fastutil/objects/Object2BooleanMap; field_20728 completion -c net/minecraft/class_4553$1 net/minecraft/advancements/criterion/PlayerPredicate$1 -c net/minecraft/class_2119 net/minecraft/advancements/criterion/RecipeUnlockedTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2119$class_2121; method_9106 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_9105 access$000 - m (Lnet/minecraft/class_1860;Lnet/minecraft/class_2119$class_2121;)Z method_22508 func_227018_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1860;)V method_9107 trigger - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2119$class_2121; method_27847 create - f Lnet/minecraft/class_2960; field_9738 ID -c net/minecraft/class_2119$class_2121 net/minecraft/advancements/criterion/RecipeUnlockedTrigger$Instance - m (Lnet/minecraft/class_1860;)Z method_9112 test - f Lnet/minecraft/class_2960; field_9742 recipe -c net/minecraft/class_5267 net/minecraft/loot/ConditionArraySerializer - m ([Lnet/minecraft/class_5341;)Lcom/google/gson/JsonElement; method_27849 func_235681_a_ - f Lcom/google/gson/Gson; field_24421 field_235680_b_ - f Lnet/minecraft/class_5267; field_24420 field_235679_a_ -c net/minecraft/class_2123 net/minecraft/advancements/criterion/ShotCrossbowTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2123$class_2125; method_9114 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_9113 func_215110_b - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2123$class_2125;)Z method_22509 func_227037_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;)V method_9115 test - f Lnet/minecraft/class_2960; field_9743 ID -c net/minecraft/class_2123$class_2125 net/minecraft/advancements/criterion/ShotCrossbowTrigger$Instance - m (Lnet/minecraft/class_1799;)Z method_9121 test - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2123$class_2125; method_9120 create - f Lnet/minecraft/class_2073; field_9747 itemPredicate -c net/minecraft/class_4558 net/minecraft/advancements/criterion/AbstractCriterionTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_5257;)Lnet/minecraft/class_195; method_27853 deserialize - m (Lnet/minecraft/class_3222;Ljava/util/function/Predicate;)V method_22510 triggerListeners - m (Lnet/minecraft/class_2985;)Ljava/util/Set; method_22512 func_227072_c_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_195; method_27854 deserializeTrigger - f Ljava/util/Map; field_20735 triggerListeners -c net/minecraft/class_4713 net/minecraft/advancements/criterion/SlideDownBlockTrigger - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_23908 func_227151_a_ - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2248; method_23907 deserializeBlock - m ()Lnet/minecraft/class_2960; method_23910 func_227153_b_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4713$class_4714;)Z method_23906 func_227149_a_ - m (Lnet/minecraft/class_2248;Ljava/lang/String;)V method_23905 func_227148_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_4713$class_4714; method_23911 deserializeTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2680;)V method_23909 test - f Lnet/minecraft/class_2960; field_21586 ID -c net/minecraft/class_4713$class_4714 net/minecraft/advancements/criterion/SlideDownBlockTrigger$Instance - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4713$class_4714; method_23912 create - m (Lnet/minecraft/class_2680;)Z method_23913 test - f Lnet/minecraft/class_4559; field_21588 stateCondition - f Lnet/minecraft/class_2248; field_21587 block -c net/minecraft/class_4559 net/minecraft/advancements/criterion/StatePropertiesPredicate - m (Lnet/minecraft/class_3610;)Z method_22518 matches - m ()Lcom/google/gson/JsonElement; method_22513 toJsonElement - m (Lnet/minecraft/class_2689;Ljava/util/function/Consumer;)V method_22516 forEachNotPresent - m (Lnet/minecraft/class_2680;)Z method_22514 matches - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4559$class_4562;)V method_22520 func_227187_a_ - m (Ljava/lang/String;Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4559$class_4562; method_22521 deserializeProperty - m (Lcom/google/gson/JsonElement;)Ljava/lang/String; method_22522 getNullableString - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_4559; method_22519 deserializeProperties - m (Lnet/minecraft/class_2689;Ljava/util/function/Consumer;Lnet/minecraft/class_4559$class_4562;)V method_22517 func_227184_a_ - m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2688;)Z method_22515 matchesAll - f Ljava/util/List; field_20737 matchers - f Lnet/minecraft/class_4559; field_20736 EMPTY -c net/minecraft/class_4559$class_4563 net/minecraft/advancements/criterion/StatePropertiesPredicate$RangedMacher - f Ljava/lang/String; field_20742 maximum - f Ljava/lang/String; field_20741 minimum -c net/minecraft/class_4559$class_4561 net/minecraft/advancements/criterion/StatePropertiesPredicate$ExactMatcher - f Ljava/lang/String; field_20739 valueToMatch -c net/minecraft/class_4559$class_4562 net/minecraft/advancements/criterion/StatePropertiesPredicate$Matcher - m (Lnet/minecraft/class_2688;Lnet/minecraft/class_2769;)Z method_22532 matchesExact - m (Lnet/minecraft/class_2689;Ljava/util/function/Consumer;)V method_22531 runIfNotPresent - m ()Lcom/google/gson/JsonElement; method_22529 toJsonElement - m ()Ljava/lang/String; method_22533 getPropertyName - m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2688;)Z method_22530 test - f Ljava/lang/String; field_20740 propertyName -c net/minecraft/class_4559$class_4560 net/minecraft/advancements/criterion/StatePropertiesPredicate$Builder - m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Lnet/minecraft/class_4559$class_4560; method_22525 withProp - m (Lnet/minecraft/class_2769;Z)Lnet/minecraft/class_4559$class_4560; method_22527 withBoolProp - m ()Lnet/minecraft/class_4559; method_22528 build - m (Lnet/minecraft/class_2769;Ljava/lang/String;)Lnet/minecraft/class_4559$class_4560; method_22526 withStringProp - m (Lnet/minecraft/class_2769;I)Lnet/minecraft/class_4559$class_4560; method_22524 withIntProp - m ()Lnet/minecraft/class_4559$class_4560; method_22523 newBuilder - f Ljava/util/List; field_20738 matchers -c net/minecraft/class_4559$1 net/minecraft/advancements/criterion/StatePropertiesPredicate$1 -c net/minecraft/class_2128 net/minecraft/advancements/criterion/SummonedEntityTrigger - m (Lnet/minecraft/class_47;Lnet/minecraft/class_2128$class_2130;)Z method_22537 func_227229_a_ - m ()Lnet/minecraft/class_2960; method_9122 access$000 - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;)V method_9124 trigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2128$class_2130; method_9123 deserializeTrigger - f Lnet/minecraft/class_2960; field_9748 ID -c net/minecraft/class_2128$class_2130 net/minecraft/advancements/criterion/SummonedEntityTrigger$Instance - m (Lnet/minecraft/class_2048$class_2049;)Lnet/minecraft/class_2128$class_2130; method_9129 summonedEntity - m (Lnet/minecraft/class_47;)Z method_9130 test - f Lnet/minecraft/class_2048$class_5258; field_9752 entity -c net/minecraft/class_2131 net/minecraft/advancements/criterion/TameAnimalTrigger - m ()Lnet/minecraft/class_2960; method_9131 access$000 - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2131$class_2133; method_9133 deserializeTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1429;)V method_9132 trigger - m (Lnet/minecraft/class_47;Lnet/minecraft/class_2131$class_2133;)Z method_22538 func_227251_a_ - f Lnet/minecraft/class_2960; field_9753 ID -c net/minecraft/class_2131$class_2133 net/minecraft/advancements/criterion/TameAnimalTrigger$Instance - m (Lnet/minecraft/class_2048;)Lnet/minecraft/class_2131$class_2133; method_16114 create - m (Lnet/minecraft/class_47;)Z method_9139 test - m ()Lnet/minecraft/class_2131$class_2133; method_9138 any - f Lnet/minecraft/class_2048$class_5258; field_9757 entity -c net/minecraft/class_4851 net/minecraft/advancements/criterion/TargetHitTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1297;Lnet/minecraft/class_243;I)V method_24861 test - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_4851$class_4852; method_24863 deserializeTrigger - m ()Lnet/minecraft/class_2960; method_24862 func_236351_b_ - m (Lnet/minecraft/class_47;Lnet/minecraft/class_243;ILnet/minecraft/class_4851$class_4852;)Z method_24951 func_236349_a_ - f Lnet/minecraft/class_2960; field_22429 ID -c net/minecraft/class_4851$class_4852 net/minecraft/advancements/criterion/TargetHitTrigger$Instance - m (Lnet/minecraft/class_47;Lnet/minecraft/class_243;I)Z method_24952 test - m (Lnet/minecraft/class_2096$class_2100;Lnet/minecraft/class_2048$class_5258;)Lnet/minecraft/class_4851$class_4852; method_24865 create - f Lnet/minecraft/class_2096$class_2100; field_22430 signalStrength - f Lnet/minecraft/class_2048$class_5258; field_22512 projectile -c net/minecraft/class_2135 net/minecraft/advancements/criterion/TickTrigger - m (Lnet/minecraft/class_2135$class_2137;)Z method_29964 func_241523_a_ - m (Lnet/minecraft/class_3222;)V method_9141 trigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2135$class_2137; method_9140 deserializeTrigger - f Lnet/minecraft/class_2960; field_9758 ID -c net/minecraft/class_2135$class_2137 net/minecraft/advancements/criterion/TickTrigger$Instance -c net/minecraft/class_2140 net/minecraft/advancements/criterion/VillagerTradeTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_3988;Lnet/minecraft/class_1799;)V method_9146 test - m ()Lnet/minecraft/class_2960; method_9147 access$000 - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2140$class_2142; method_9148 deserializeTrigger - m (Lnet/minecraft/class_47;Lnet/minecraft/class_1799;Lnet/minecraft/class_2140$class_2142;)Z method_22539 func_227267_a_ - f Lnet/minecraft/class_2960; field_9762 ID -c net/minecraft/class_2140$class_2142 net/minecraft/advancements/criterion/VillagerTradeTrigger$Instance - m (Lnet/minecraft/class_47;Lnet/minecraft/class_1799;)Z method_9154 test - m ()Lnet/minecraft/class_2140$class_2142; method_9153 any - f Lnet/minecraft/class_2073; field_9766 item - f Lnet/minecraft/class_2048$class_5258; field_9767 villager -c net/minecraft/class_2143 net/minecraft/advancements/criterion/UsedEnderEyeTrigger - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2143$class_2145; method_9156 deserializeTrigger - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2338;)V method_9157 trigger - m ()Lnet/minecraft/class_2960; method_9155 access$000 - m (DLnet/minecraft/class_2143$class_2145;)Z method_22540 func_227325_a_ - f Lnet/minecraft/class_2960; field_9768 ID -c net/minecraft/class_2143$class_2145 net/minecraft/advancements/criterion/UsedEnderEyeTrigger$Instance - m (D)Z method_9162 test - f Lnet/minecraft/class_2096$class_2099; field_9772 distance -c net/minecraft/class_2148 net/minecraft/advancements/criterion/UsedTotemTrigger - m ()Lnet/minecraft/class_2960; method_9164 access$000 - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;)V method_9165 trigger - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2148$class_2150;)Z method_22541 func_227409_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2048$class_5258;Lnet/minecraft/class_5257;)Lnet/minecraft/class_2148$class_2150; method_9163 deserializeTrigger - f Lnet/minecraft/class_2960; field_9773 ID -c net/minecraft/class_2148$class_2150 net/minecraft/advancements/criterion/UsedTotemTrigger$Instance - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2148$class_2150; method_9170 usedTotem - m (Lnet/minecraft/class_1799;)Z method_9171 test - f Lnet/minecraft/class_2073; field_9777 item -c net/minecraft/class_2152 net/minecraft/advancements/criterion/MinMaxBoundsWrapped - m (Ljava/lang/Float;Ljava/util/function/Function;)Ljava/lang/Float; method_9174 map - m (Lcom/mojang/brigadier/StringReader;Z)Z method_9173 isValidNumber - m (Lcom/mojang/brigadier/StringReader;Z)Ljava/lang/Float; method_9176 fromReader - m ()Ljava/lang/Float; method_9175 getMin - m (Lcom/mojang/brigadier/StringReader;ZLjava/util/function/Function;)Lnet/minecraft/class_2152; method_9172 fromReader - m ()Ljava/lang/Float; method_9177 getMax - f Ljava/lang/Float; field_9778 min - f Ljava/lang/Float; field_9779 max - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9781 ERROR_INTS_ONLY - f Lnet/minecraft/class_2152; field_9780 UNBOUNDED -c net/minecraft/class_2156 net/minecraft/command/TranslatableExceptionProvider - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedStartOfQuote readerExpectedStartOfQuote - m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidLong readerInvalidLong - m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; integerTooLow integerTooLow - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedDouble readerExpectedDouble - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedFloat readerExpectedFloat - m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; floatTooHigh floatTooHigh - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_18481 func_218855_b - m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidFloat readerInvalidFloat - m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; literalIncorrect literalIncorrect - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedEndOfQuote readerExpectedEndOfQuote - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9185 func_208629_d - m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; doubleTooLow doubleTooLow - m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; doubleTooHigh doubleTooHigh - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; dispatcherUnknownCommand dispatcherUnknownCommand - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9189 func_208633_f - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9178 func_208622_c - m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidInt readerInvalidInt - m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; longTooLow longTooLow - m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; floatTooLow floatTooLow - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9188 func_208632_b - m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; dispatcherParseException dispatcherParseException - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9183 func_208627_e - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9182 func_208626_a - m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidBool readerInvalidBool - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9186 func_208630_a - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_18479 func_218032_a - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedBool readerExpectedBool - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; dispatcherExpectedArgumentSeparator dispatcherExpectedArgumentSeparator - m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerExpectedSymbol readerExpectedSymbol - m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; longTooHigh longTooHigh - m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidEscape readerInvalidEscape - m ()Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; readerInvalidDouble readerInvalidDouble - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9181 func_208625_c - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedLong readerExpectedLong - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9191 func_208635_e - m ()Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; integerTooHigh integerTooHigh - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; readerExpectedInt readerExpectedInt - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9180 func_208624_d - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9190 func_208634_b - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9184 func_208628_a - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9187 func_208631_f - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9179 func_208623_c - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; dispatcherUnknownArgument dispatcherUnknownArgument - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_18480 func_218034_b - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9787 READER_EXPECTED_FLOAT - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9785 READER_EXPECTED_SYMBOL - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9792 DISPATCHER_UNKNOWN_ARGUMENT - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9784 INTEGER_TOO_LOW - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_18140 field_218035_g - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9803 READER_EXPECTED_END_OF_QUOTE - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9796 LITERAL_INCORRECT - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_18143 field_218038_q - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9798 READER_EXPECTED_DOUBLE - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9799 DOUBLE_TOO_LOW - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9790 DISPATCHER_PARSE_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9801 READER_EXPECTED_INT - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9789 READER_INVALID_BOOL - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9802 FLOAT_TOO_LOW - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_18142 field_218037_p - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9797 DISPATCHER_UNKNOWN_COMMAND - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9800 READER_INVALID_DOUBLE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9794 READER_EXPECTED_BOOL - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9804 READER_INVALID_FLOAT - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9782 DISPATCHER_EXPECTED_ARGUMENT_SEPARATOR - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9795 FLOAT_TOO_HIGH - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9793 INTEGER_TOO_HIGH - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9783 READER_EXPECTED_START_OF_QUOTE - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_18141 field_218036_h - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9791 READER_INVALID_ESCAPE - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_9788 DOUBLE_TOO_HIGH - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9786 READER_INVALID_INT -c net/minecraft/class_2158 net/minecraft/command/FunctionObject - m ()[Lnet/minecraft/class_2158$class_2161; method_9193 getEntries - m (Lnet/minecraft/class_2960;Lcom/mojang/brigadier/CommandDispatcher;Lnet/minecraft/class_2168;Ljava/util/List;)Lnet/minecraft/class_2158; method_9195 func_237140_a_ - m ()Lnet/minecraft/class_2960; method_9194 getId - m (Lnet/minecraft/class_2158;)Lnet/minecraft/class_2960; method_9192 access$000 - f Lnet/minecraft/class_2960; field_9806 id - f [Lnet/minecraft/class_2158$class_2161; field_9805 entries -c net/minecraft/class_2158$class_2162 net/minecraft/command/FunctionObject$FunctionEntry - m ()Ljava/lang/String; toString toString - m (ILjava/util/ArrayDeque;Lnet/minecraft/class_2991;Lnet/minecraft/class_2168;Lnet/minecraft/class_2158;)V method_17914 func_218041_a - f Lnet/minecraft/class_2158$class_2159; field_9812 function -c net/minecraft/class_2158$class_2160 net/minecraft/command/FunctionObject$CommandEntry - m ()Ljava/lang/String; toString toString - f Lcom/mojang/brigadier/ParseResults; field_9811 field_196999_a -c net/minecraft/class_2158$class_2161 net/minecraft/command/FunctionObject$IEntry - m (Lnet/minecraft/class_2991;Lnet/minecraft/class_2168;Ljava/util/ArrayDeque;I)V method_9198 execute -c net/minecraft/class_2158$class_2159 net/minecraft/command/FunctionObject$CacheableFunction - m ()Lnet/minecraft/class_2960; method_9197 getId - m (Lnet/minecraft/class_2991;)Ljava/util/Optional; method_9196 func_218039_a - m (Lnet/minecraft/class_2158;)Lnet/minecraft/class_2960; method_17913 func_218040_a - f Ljava/util/Optional; field_9808 function - f Lnet/minecraft/class_2158$class_2159; field_9809 EMPTY - f Lnet/minecraft/class_2960; field_9807 id - f Z field_9810 isValid -c net/minecraft/class_2164 net/minecraft/command/CommandException - m ()Lnet/minecraft/class_2561; method_9199 getComponent - f Lnet/minecraft/class_2561; field_9813 component -c net/minecraft/class_2165 net/minecraft/command/ICommandSource - m ()Z method_9202 shouldReceiveErrors - m (Lnet/minecraft/class_2561;Ljava/util/UUID;)V method_9203 sendMessage - m ()Z method_9200 shouldReceiveFeedback - m ()Z method_9201 allowLogging - f Lnet/minecraft/class_2165; field_17395 DUMMY -c net/minecraft/class_2165$1 net/minecraft/command/ICommandSource$1 -c net/minecraft/class_2168 net/minecraft/command/CommandSource - m ()Lnet/minecraft/class_243; method_9222 getPos - m (Lnet/minecraft/class_241;)Lnet/minecraft/class_2168; method_9216 withRotation - m (Lnet/minecraft/class_2561;Z)V method_9226 sendFeedback - m (Lcom/mojang/brigadier/context/CommandContext;ZI)V method_9215 onCommandComplete - m ()Lnet/minecraft/class_241; method_9210 getRotation - m ()Ljava/lang/String; method_9214 getName - m (Lcom/mojang/brigadier/context/CommandContext;ZI)V method_9224 func_197032_b - m (Lcom/mojang/brigadier/ResultConsumer;)Lnet/minecraft/class_2168; method_9231 withResultConsumer - m ()Lnet/minecraft/class_3218; method_9225 getWorld - m (Lnet/minecraft/class_2183$class_2184;)Lnet/minecraft/class_2168; method_9218 withEntityAnchorType - m (I)Lnet/minecraft/class_2168; method_9206 withPermissionLevel - m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_2168; method_9227 withWorld - m ()Lnet/minecraft/class_2183$class_2184; method_9219 getEntityAnchorType - m (I)Lnet/minecraft/class_2168; method_9230 withMinPermissionLevel - m ()Lnet/minecraft/class_2561; method_9223 getDisplayName - m ()Lnet/minecraft/class_2168; method_9217 withFeedbackDisabled - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_2168; method_9208 withPos - m ()Lnet/minecraft/server/MinecraftServer; method_9211 getServer - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_2168; method_9221 withRotation - m ()Lnet/minecraft/class_3222; method_9207 asPlayer - m (Lnet/minecraft/class_2561;)V method_9213 sendErrorMessage - m ()Lnet/minecraft/class_1297; method_9229 assertIsEntity - m (Lcom/mojang/brigadier/ResultConsumer;Ljava/util/function/BinaryOperator;)Lnet/minecraft/class_2168; method_9209 withResultConsumer - m (Lnet/minecraft/class_2561;)V method_9212 logFeedback - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_2168; method_9232 withEntity - m ()Lnet/minecraft/class_1297; method_9228 getEntity - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2183$class_2184;)Lnet/minecraft/class_2168; method_9220 withRotation - f Lnet/minecraft/class_2165; field_9819 source - f Lnet/minecraft/class_243; field_9817 pos - f Lnet/minecraft/class_241; field_9822 rotation - f Ljava/lang/String; field_9826 name - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9824 REQUIRES_PLAYER_EXCEPTION_TYPE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9827 REQUIRES_ENTITY_EXCEPTION_TYPE - f Lnet/minecraft/server/MinecraftServer; field_9818 server - f I field_9815 permissionLevel - f Lnet/minecraft/class_2183$class_2184; field_9816 entityAnchorType - f Lnet/minecraft/class_3218; field_9828 world - f Lcom/mojang/brigadier/ResultConsumer; field_9821 resultConsumer - f Lnet/minecraft/class_2561; field_9825 displayName - f Lnet/minecraft/class_1297; field_9820 entity - f Z field_9823 feedbackDisabled -c net/minecraft/class_2170 net/minecraft/command/Commands - m (Lnet/minecraft/class_2170$class_2171;Ljava/lang/String;)Z method_9240 func_212591_a - m (Lnet/minecraft/class_2170$class_2171;)Ljava/util/function/Predicate; method_9238 predicate - m ()V method_30852 func_242986_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_9246 func_197053_a - m (Lcom/mojang/brigadier/arguments/ArgumentType;)Ljava/lang/String; method_30851 func_242985_a - m (Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder; method_9244 argument - m (Lcom/mojang/brigadier/arguments/ArgumentType;)Z method_30853 func_242987_b - m ()Lcom/mojang/brigadier/CommandDispatcher; method_9235 getDispatcher - m (Ljava/lang/String;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_9236 func_211705_a_ - m (Lnet/minecraft/class_2172;)Z method_9245 func_197060_a - m (Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/tree/CommandNode;Lnet/minecraft/class_2168;Ljava/util/Map;)V method_9239 commandSourceNodesToSuggestionNodes - m (Lnet/minecraft/class_3222;)V method_9241 send - m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_9249 handleCommand - m (Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder; method_9247 literal - m (Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/tree/CommandNode;Ljava/util/Collection;)V method_9237 func_201302_a - m (Lnet/minecraft/class_5250;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_9242 func_211704_a_ - m (Lcom/mojang/brigadier/ParseResults;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_23917 func_227481_a_ - m (Lcom/mojang/brigadier/context/CommandContext;ZI)V method_9248 func_197058_a - f Lcom/mojang/brigadier/CommandDispatcher; field_9832 dispatcher - f Lorg/apache/logging/log4j/Logger; field_9833 LOGGER -c net/minecraft/class_2170$class_5364 net/minecraft/command/Commands$EnvironmentType - m ()[Lnet/minecraft/class_2170$class_5364; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2170$class_5364; valueOf valueOf - m (Lnet/minecraft/class_2170$class_5364;)Z method_29576 func_237221_a_ - m (Lnet/minecraft/class_2170$class_5364;)Z method_29577 func_237222_b_ - f Lnet/minecraft/class_2170$class_5364; field_25421 INTEGRATED - f Lnet/minecraft/class_2170$class_5364; field_25420 DEDICATED - f Z field_25423 field_237220_e_ - f [Lnet/minecraft/class_2170$class_5364; field_25424 $VALUES - f Z field_25422 field_237219_d_ - f Lnet/minecraft/class_2170$class_5364; field_25419 ALL -c net/minecraft/class_2170$class_2171 net/minecraft/command/Commands$IParser - m (Lcom/mojang/brigadier/StringReader;)V parse parse -c net/minecraft/class_2172 net/minecraft/command/ISuggestionProvider - m ()Ljava/util/Collection; method_9267 getTeamNames - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_9251 func_210519_b - m (Ljava/util/stream/Stream;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; method_9271 func_201725_a - m ()Ljava/util/Collection; method_9262 getPlayerNames - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_9263 func_210517_a - m (Ljava/lang/Iterable;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; method_9255 func_210514_a - m ([Ljava/lang/String;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9253 suggest - m (Ljava/lang/String;Ljava/util/Collection;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Predicate;)Ljava/util/concurrent/CompletableFuture; method_9260 func_209000_a - m (Ljava/lang/String;Ljava/lang/String;)Z method_27136 func_237256_a_ - m (Ljava/lang/String;Ljava/lang/String;)Z method_9272 func_197007_a - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Function;Ljava/util/function/Function;Ljava/lang/Object;)V method_9256 func_210515_a - m (Ljava/lang/String;Ljava/util/Collection;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Predicate;)Ljava/util/concurrent/CompletableFuture; method_9252 func_211269_a - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_2960;)V method_9275 func_210513_a - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/lang/String;Lnet/minecraft/class_2960;)V method_9266 func_210518_a - m ()Ljava/util/Collection; method_17772 func_217293_r - m ()Lnet/minecraft/class_5455; method_30497 func_241861_q - m ()Ljava/util/Collection; method_17771 func_217294_q - m (Ljava/util/stream/Stream;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9257 func_212476_a - m ()Ljava/util/stream/Stream; method_9273 getRecipeResourceLocations - m (Ljava/util/stream/Stream;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9264 suggest - m (Ljava/lang/Iterable;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/lang/String;)Ljava/util/concurrent/CompletableFuture; method_9258 suggestIterable - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9261 getSuggestionsFromServer - m ()Ljava/util/Collection; method_9254 getSoundResourceLocations - m (Ljava/lang/Iterable;Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/Consumer;)V method_9268 func_210512_a - m (Ljava/lang/Iterable;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9265 suggest - m ()Ljava/util/Set; method_29310 func_230390_p_ - m (Ljava/lang/Iterable;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9270 suggestIterable - m ()Ljava/util/Collection; method_9269 getTargetedEntity - m (Ljava/lang/Iterable;Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/Consumer;)V method_9250 func_210511_a - m (I)Z method_9259 hasPermissionLevel -c net/minecraft/class_2172$class_2173 net/minecraft/command/ISuggestionProvider$Coordinates - f Lnet/minecraft/class_2172$class_2173; field_9838 DEFAULT_GLOBAL - f Ljava/lang/String; field_9836 y - f Ljava/lang/String; field_9835 x - f Ljava/lang/String; field_9837 z - f Lnet/minecraft/class_2172$class_2173; field_9834 DEFAULT_LOCAL -c net/minecraft/class_5473 net/minecraft/command/arguments/AngleArgument - m ()Lnet/minecraft/class_5473; method_30658 func_242991_a - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_5473$class_5474; method_30659 parse - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F method_30660 func_242992_a - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - f Ljava/util/Collection; field_26369 field_242990_b - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_26368 field_242989_a -c net/minecraft/class_5473$class_5474 net/minecraft/command/arguments/AngleArgument$Result - m (Lnet/minecraft/class_2168;)F method_30661 func_242995_a - f Z field_26371 field_242994_b - f F field_26370 field_242993_a -c net/minecraft/class_5473$1 net/minecraft/command/arguments/AngleArgument$1 -c net/minecraft/class_2177 net/minecraft/command/arguments/ColorArgument - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9278 func_208659_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_124; method_9277 getColor - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_124; method_9279 parse - m ()Lnet/minecraft/class_2177; method_9276 color - f Ljava/util/Collection; field_9839 EXAMPLES - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9840 COLOR_INVALID -c net/minecraft/class_2178 net/minecraft/command/arguments/ComponentArgument - m ()Ljava/util/Collection; getExamples getExamples - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9282 func_208660_a - m ()Lnet/minecraft/class_2178; method_9281 component - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2561; method_9280 getComponent - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2561; method_9283 parse - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9842 COMPONENT_INVALID - f Ljava/util/Collection; field_9841 EXAMPLES -c net/minecraft/class_2179 net/minecraft/command/arguments/NBTCompoundTagArgument - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2487; method_9285 getNbt - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2487; method_9286 parse - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m ()Lnet/minecraft/class_2179; method_9284 nbt - f Ljava/util/Collection; field_9843 EXAMPLES -c net/minecraft/class_2181 net/minecraft/command/arguments/DimensionArgument - m ()Ljava/util/Collection; getExamples getExamples - m (Lnet/minecraft/class_5321;)Ljava/lang/String; method_9291 func_212593_a_ - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Lnet/minecraft/class_2181; method_9288 getDimension - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2960; method_9287 parse - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9290 func_212594_a_ - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_3218; method_9289 getDimensionArgument - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9845 INVALID_DIMENSION_EXCEPTION - f Ljava/util/Collection; field_9844 EXAMPLES -c net/minecraft/class_2183 net/minecraft/command/arguments/EntityAnchorArgument - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2183$class_2184; method_9294 getEntityAnchor - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2183$class_2184; method_9292 parse - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9293 func_208661_a - m ()Lnet/minecraft/class_2183; method_9295 entityAnchor - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9846 ANCHOR_INVALID - f Ljava/util/Collection; field_9847 EXMAPLES -c net/minecraft/class_2183$class_2184 net/minecraft/command/arguments/EntityAnchorArgument$Type - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)Lnet/minecraft/class_243; method_9298 func_201018_a - m ()[Lnet/minecraft/class_2183$class_2184; values values - m ()Ljava/util/Map; method_9301 access$000 - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)Lnet/minecraft/class_243; method_9300 func_201019_b - m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_243; method_9299 apply - m (Ljava/lang/String;)Lnet/minecraft/class_2183$class_2184; method_9296 getByName - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_243; method_9302 apply - m (Ljava/lang/String;)Lnet/minecraft/class_2183$class_2184; valueOf valueOf - m (Ljava/util/HashMap;)V method_9297 func_209384_a - f Ljava/util/function/BiFunction; field_9848 offsetFunc - f [Lnet/minecraft/class_2183$class_2184; field_9850 $VALUES - f Ljava/lang/String; field_9849 name - f Ljava/util/Map; field_9852 BY_NAME - f Lnet/minecraft/class_2183$class_2184; field_9853 FEET - f Lnet/minecraft/class_2183$class_2184; field_9851 EYES -c net/minecraft/class_2186 net/minecraft/command/arguments/EntityArgument - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lnet/minecraft/class_2186;)Z method_9314 access$000 - m (Lnet/minecraft/class_2186;)Z method_9316 access$100 - m (Lnet/minecraft/class_2172;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)V method_9311 func_201942_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9312 getPlayers - m ()Lnet/minecraft/class_2186; method_9306 entities - m ()Lnet/minecraft/class_2186; method_9305 player - m ()Lnet/minecraft/class_2186; method_9309 entity - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9307 getEntitiesAllowingNone - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9310 getPlayersAllowingNone - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2300; method_9318 parse - m ()Lnet/minecraft/class_2186; method_9308 players - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9317 getEntities - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_3222; method_9315 getPlayer - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_1297; method_9313 getEntity - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - f Z field_9858 single - f Z field_9857 playersOnly - f Ljava/util/Collection; field_9859 EXAMPLES - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9860 TOO_MANY_ENTITIES - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9864 TOO_MANY_PLAYERS - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9862 SELECTOR_NOT_ALLOWED - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9863 ENTITY_NOT_FOUND - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9861 ONLY_PLAYERS_ALLOWED - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9856 PLAYER_NOT_FOUND -c net/minecraft/class_2186$class_2187 net/minecraft/command/arguments/EntityArgument$Serializer - m (Lnet/minecraft/class_2186;Lcom/google/gson/JsonObject;)V method_9319 write - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2186; method_9321 read - m (Lnet/minecraft/class_2186;Lnet/minecraft/class_2540;)V method_9320 write -c net/minecraft/class_2188 net/minecraft/command/arguments/EntitySummonArgument - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_9326 checkIfEntityExists - m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17925 func_218046_b - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9323 func_211367_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2960; method_9322 getEntityId - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2960; method_9325 parse - m ()Lnet/minecraft/class_2188; method_9324 entitySummon - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9866 ENTITY_UNKNOWN_TYPE - f Ljava/util/Collection; field_9865 EXAMPLES -c net/minecraft/class_2191 net/minecraft/command/arguments/GameProfileArgument - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2191$class_2192; method_9331 parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9330 getGameProfiles - m ()Lnet/minecraft/class_2191; method_9329 gameProfile - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Ljava/lang/String;Lnet/minecraft/class_2168;)Ljava/util/Collection; method_9328 func_197107_a - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)V method_9332 func_201943_a - f Ljava/util/Collection; field_9868 EXAMPLES - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9869 PLAYER_UNKNOWN -c net/minecraft/class_2191$class_2193 net/minecraft/command/arguments/GameProfileArgument$ProfileProvider - f Lnet/minecraft/class_2300; field_9870 selector -c net/minecraft/class_2191$class_2192 net/minecraft/command/arguments/GameProfileArgument$IProfileProvider - m (Lnet/minecraft/class_2168;)Ljava/util/Collection; getNames getNames -c net/minecraft/class_2194 net/minecraft/command/arguments/EnchantmentArgument - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9333 func_208662_a - m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17934 func_218048_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_1887; method_9334 getEnchantment - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_1887; method_9335 parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Lnet/minecraft/class_2194; method_9336 enchantment - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9872 ENCHANTMENT_UNKNOWN - f Ljava/util/Collection; field_9871 EXAMPLES -c net/minecraft/class_2196 net/minecraft/command/arguments/MessageArgument - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2196$class_2197; method_9338 parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2561; method_9339 getMessage - m ()Lnet/minecraft/class_2196; method_9340 message - f Ljava/util/Collection; field_9876 EXAMPLES -c net/minecraft/class_2196$class_2198 net/minecraft/command/arguments/MessageArgument$Part - m ()I method_9343 getStart - m ()I method_9344 getEnd - m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_2561; method_9345 toComponent - f Lnet/minecraft/class_2300; field_9881 selector - f I field_9879 end - f I field_9880 start -c net/minecraft/class_2196$class_2197 net/minecraft/command/arguments/MessageArgument$Message - m (Lnet/minecraft/class_2168;Z)Lnet/minecraft/class_2561; method_9341 toComponent - m (Lcom/mojang/brigadier/StringReader;Z)Lnet/minecraft/class_2196$class_2197; method_9342 parse - f Ljava/lang/String; field_9877 text - f [Lnet/minecraft/class_2196$class_2198; field_9878 selectors -c net/minecraft/class_2201 net/minecraft/command/arguments/PotionArgument - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_1291; method_9348 parse - m ()Lnet/minecraft/class_2201; method_9350 mobEffect - m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17942 func_218049_a - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_1291; method_9347 getMobEffect - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9349 func_208663_a - m ()Ljava/util/Collection; getExamples getExamples - f Ljava/util/Collection; field_9895 EXAMPLES - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9896 EFFECT_NOT_FOUND -c net/minecraft/class_2203 net/minecraft/command/arguments/NBTPathArgument - m (Lnet/minecraft/class_2487;)Ljava/util/function/Predicate; method_9359 equalToCompoundPredicate - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (C)Z method_9355 isSimpleNameChar - m (Lnet/minecraft/class_2487;)Ljava/util/function/Predicate; method_9354 func_218082_a - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9356 func_208665_b - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/String; method_9357 readTagName - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2203$class_2209; method_9362 parse - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2203$class_2209; method_9358 getNBTPath - m ()Lnet/minecraft/class_2203; method_9360 nbtPath - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)Z method_9353 func_218081_a - m (Lcom/mojang/brigadier/StringReader;Ljava/lang/String;)Lnet/minecraft/class_2203$class_2210; method_9352 func_218083_a - m (Lcom/mojang/brigadier/StringReader;Z)Lnet/minecraft/class_2203$class_2210; method_9361 func_218079_a - f Ljava/util/Collection; field_9898 EXAMPLES - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9900 PATH_MALFORMED - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9899 NOTHING_FOUND -c net/minecraft/class_2203$class_2207 net/minecraft/command/arguments/NBTPathArgument$ListNode - m (Ljava/util/List;Lorg/apache/commons/lang3/mutable/MutableBoolean;Lnet/minecraft/class_2520;)V method_9365 func_218060_a - f Ljava/util/function/Predicate; field_9905 equalToPredicate - f Lnet/minecraft/class_2487; field_9904 compound -c net/minecraft/class_2203$class_2206 net/minecraft/command/arguments/NBTPathArgument$CollectionNode - f I field_9903 field_218059_a -c net/minecraft/class_2203$class_2205 net/minecraft/command/arguments/NBTPathArgument$StringNode - f Ljava/lang/String; field_9902 field_218058_a -c net/minecraft/class_2203$class_2204 net/minecraft/command/arguments/NBTPathArgument$EmptyListNode - f Lnet/minecraft/class_2203$class_2204; field_9901 field_218067_a -c net/minecraft/class_2203$class_2210 net/minecraft/command/arguments/NBTPathArgument$INode - m (Lnet/minecraft/class_2520;Ljava/util/function/Supplier;Ljava/util/List;)V method_9380 func_218054_a - m (Lnet/minecraft/class_2520;Ljava/util/function/Supplier;)I method_9376 func_218051_a - m (Ljava/util/List;)Ljava/util/List; method_9381 func_218056_a - m (Lnet/minecraft/class_2520;Ljava/util/List;)V method_9378 addMatchingElements - m (Ljava/util/List;Ljava/util/function/BiConsumer;)Ljava/util/List; method_9384 func_218057_a - m ()Lnet/minecraft/class_2520; method_9382 createEmptyElement - m (Ljava/util/function/Supplier;Lnet/minecraft/class_2520;Ljava/util/List;)V method_9379 func_218055_a - m (Lnet/minecraft/class_2520;)I method_9383 func_218053_a - m (Ljava/util/List;Ljava/util/function/Supplier;)Ljava/util/List; method_9377 func_218052_a -c net/minecraft/class_2203$class_2209 net/minecraft/command/arguments/NBTPathArgument$NBTPath - m ()Ljava/lang/String; toString toString - m (Ljava/util/List;Ljava/util/function/Function;)I method_9371 reduceToInt - m (Lnet/minecraft/class_2520;)Ljava/util/List; method_9366 func_218071_a - m (Lnet/minecraft/class_2520;Ljava/util/function/Supplier;)I method_9368 func_218076_b - m (Lnet/minecraft/class_2520;)I method_9372 func_218068_c - m (Lnet/minecraft/class_2203$class_2210;Ljava/util/function/Supplier;Lnet/minecraft/class_2520;)Ljava/lang/Integer; method_9373 func_218077_a - m (Lnet/minecraft/class_2203$class_2210;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_9375 createNothingFoundException - m (Lnet/minecraft/class_2520;)I method_9374 func_218069_b - m (Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer; method_9370 func_218074_a - m (Lnet/minecraft/class_2520;Ljava/util/function/Supplier;)Ljava/util/List; method_9367 func_218073_a - m (Lnet/minecraft/class_2520;)Ljava/util/List; method_9369 func_218072_d - f [Lnet/minecraft/class_2203$class_2210; field_9911 nodes - f Ljava/lang/String; field_9909 rawText - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_9910 field_218078_b -c net/minecraft/class_2203$class_3707 net/minecraft/command/arguments/NBTPathArgument$CompoundNode - f Ljava/util/function/Predicate; field_16319 field_218066_a -c net/minecraft/class_2203$class_2208 net/minecraft/command/arguments/NBTPathArgument$JsonNode - f Ljava/util/function/Predicate; field_9908 field_218065_c - f Ljava/lang/String; field_9906 field_218063_a - f Lnet/minecraft/class_2487; field_9907 field_218064_b -c net/minecraft/class_2212 net/minecraft/command/arguments/NBTTagArgument - m ()Lnet/minecraft/class_2212; method_9389 func_218085_a - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2520; method_9390 func_218086_a - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2520; method_9388 parse - f Ljava/util/Collection; field_9918 field_218087_a -c net/minecraft/class_2214 net/minecraft/command/arguments/ObjectiveArgument - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_266; method_9395 getObjective - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9394 func_208670_a - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/String; method_9396 parse - m ()Lnet/minecraft/class_2214; method_9391 objective - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9397 func_208671_c - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_266; method_9393 getWritableObjective - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9392 func_208669_b - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9920 OBJECTIVE_NAME_TOO_LONG - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9921 OBJECTIVE_READ_ONLY - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9922 OBJECTIVE_NOT_FOUND - f Ljava/util/Collection; field_9919 EXAMPLES -c net/minecraft/class_2216 net/minecraft/command/arguments/ObjectiveCriteriaArgument - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9401 func_208672_a - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m ()Lnet/minecraft/class_2216; method_9399 objectiveCriteria - m (Lnet/minecraft/class_3448;Ljava/lang/Object;)Ljava/lang/String; method_9400 makeStatName - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_274; method_9402 getObjectiveCriteria - m (Lcom/mojang/brigadier/StringReader;ILjava/lang/String;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17949 func_218088_a - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_274; method_9403 parse - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9927 OBJECTIVE_INVALID_CRITERIA - f Ljava/util/Collection; field_9926 EXAMPLES -c net/minecraft/class_2218 net/minecraft/command/arguments/OperationArgument - m (II)I method_9406 func_197174_f - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (II)I method_9408 func_197176_e - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2218$class_2219; method_9409 getOperation - m ()Lnet/minecraft/class_2218; method_9404 operation - m (Ljava/lang/String;)Lnet/minecraft/class_2218$class_2220; method_9407 parseOperation0 - m (II)I method_9414 func_197181_a - m (Ljava/lang/String;)Lnet/minecraft/class_2218$class_2219; method_9413 parseOperation - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2218$class_2219; method_9412 parse - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (II)I method_9415 func_197183_d - m (II)I method_9411 func_197178_b - m (Lnet/minecraft/class_267;Lnet/minecraft/class_267;)V method_9410 func_197175_a - m (II)I method_9405 func_197173_c - f Ljava/util/Collection; field_9929 EXAMPLES - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9931 OPERATION_INVALID - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9930 OPERATION_DIVIDE_BY_ZERO -c net/minecraft/class_2218$class_2219 net/minecraft/command/arguments/OperationArgument$IOperation - m (Lnet/minecraft/class_267;Lnet/minecraft/class_267;)V apply apply -c net/minecraft/class_2218$class_2220 net/minecraft/command/arguments/OperationArgument$IIntOperation - m (II)I apply apply -c net/minecraft/class_2223 net/minecraft/command/arguments/ParticleArgument - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2394; method_9421 getParticle - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2394; method_9416 parse - m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17950 func_218089_a - m ()Ljava/util/Collection; getExamples getExamples - m ()Lnet/minecraft/class_2223; method_9417 particle - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9419 func_208673_a - m (Lcom/mojang/brigadier/StringReader;Lnet/minecraft/class_2396;)Lnet/minecraft/class_2394; method_9420 deserializeParticle - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2394; method_9418 parseParticle - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - f Ljava/util/Collection; field_9935 EXAMPLES - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9936 PARTICLE_NOT_FOUND -c net/minecraft/class_2224 net/minecraft/command/arguments/IRangeArgument - m ()Lnet/minecraft/class_2224$class_2227; method_9422 intRange - m ()Lnet/minecraft/class_2224$class_2225; method_30918 func_243493_b -c net/minecraft/class_2224$class_2227 net/minecraft/command/arguments/IRangeArgument$IntRange - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2096$class_2100; method_9426 parse - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2096$class_2100; method_9425 getIntRange - f Ljava/util/Collection; field_9938 EXAMPLES -c net/minecraft/class_2224$class_2225 net/minecraft/command/arguments/IRangeArgument$FloatRange - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2096$class_2099; method_9423 parse - m ()Ljava/util/Collection; getExamples getExamples - f Ljava/util/Collection; field_9937 EXAMPLES -c net/minecraft/class_2232 net/minecraft/command/arguments/ResourceLocationArgument - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_1320; method_27575 func_239094_d_ - m ()Lnet/minecraft/class_2232; method_9441 resourceLocation - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_27573 func_239091_a_ - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_5341; method_23727 func_228259_c_ - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2960; method_9446 parse - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2960; method_9443 getResourceLocation - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9445 func_208674_b - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9440 func_208676_d - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9444 func_208677_c - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_1860; method_9442 getRecipe - m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_27574 func_239092_a_ - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_161; method_9439 getAdvancement - m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17788 func_239093_b_ - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_24267 field_239090_e_ - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_21506 field_228258_d_ - f Ljava/util/Collection; field_9946 EXAMPLES - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9945 ADVANCEMENT_NOT_FOUND - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9947 RECIPE_NOT_FOUND -c net/minecraft/class_2233 net/minecraft/command/arguments/ScoreHolderArgument - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;Ljava/util/function/Supplier;)Ljava/util/Collection; method_9450 getScoreHolder - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String; method_9452 getSingleScoreHolderNoObjectives - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Lnet/minecraft/class_2233; method_9451 scoreHolders - m ()Lnet/minecraft/class_2233; method_9447 scoreHolder - m (Lnet/minecraft/class_2168;Ljava/util/function/Supplier;)Ljava/util/Collection; method_9457 func_197208_a - m ()Ljava/util/Collection; getExamples getExamples - m (Ljava/util/Collection;Lnet/minecraft/class_2168;Ljava/util/function/Supplier;)Ljava/util/Collection; method_9456 func_197212_a - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2233$class_2234; method_9453 parse - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_9455 func_201323_a - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)V method_9448 func_201949_b - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9449 getScoreHolder - m (Lnet/minecraft/class_2233;)Z method_9454 access$000 - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9458 getScoreHolderNoObjectives - f Ljava/util/Collection; field_9948 EXAMPLES - f Z field_9949 allowMultiple - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_9951 SUGGEST_ENTITY_SELECTOR - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9950 EMPTY_EXCEPTION -c net/minecraft/class_2233$class_2236 net/minecraft/command/arguments/ScoreHolderArgument$Serializer - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2233; method_9460 read - m (Lnet/minecraft/class_2233;Lnet/minecraft/class_2540;)V method_9461 write - m (Lnet/minecraft/class_2233;Lcom/google/gson/JsonObject;)V method_9459 write -c net/minecraft/class_2233$class_2235 net/minecraft/command/arguments/ScoreHolderArgument$NameProvider - f Lnet/minecraft/class_2300; field_9952 selector -c net/minecraft/class_2233$class_2234 net/minecraft/command/arguments/ScoreHolderArgument$INameProvider - m (Lnet/minecraft/class_2168;Ljava/util/function/Supplier;)Ljava/util/Collection; getNames getNames -c net/minecraft/class_2239 net/minecraft/command/arguments/ScoreboardSlotArgument - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Integer; method_9466 parse - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9467 func_208678_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I method_9465 getScoreboardSlot - m ()Lnet/minecraft/class_2239; method_9468 scoreboardSlot - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9954 SCOREBOARD_UNKNOWN_DISPLAY_SLOT - f Ljava/util/Collection; field_9953 EXAMPLES -c net/minecraft/class_2240 net/minecraft/command/arguments/SlotArgument - m (Ljava/util/HashMap;)V method_9472 func_209386_a - m ()Lnet/minecraft/class_2240; method_9473 slot - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I method_9469 getSlot - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9471 func_208679_a - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Integer; method_9470 parse - m ()Ljava/util/Collection; getExamples getExamples - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9955 SLOT_UNKNOWN - f Ljava/util/Collection; field_9956 EXAMPLES - f Ljava/util/Map; field_9957 KNOWN_SLOTS -c net/minecraft/class_2243 net/minecraft/command/arguments/TeamArgument - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/String; method_9483 parse - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9481 func_208680_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_268; method_9480 getTeam - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m ()Lnet/minecraft/class_2243; method_9482 team - f Ljava/util/Collection; field_9964 EXAMPLES - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9963 TEAM_NOT_FOUND -c net/minecraft/class_2245 net/minecraft/command/arguments/TimeArgument - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9491 func_218092_a - m ()Lnet/minecraft/class_2245; method_9489 func_218091_a - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Integer; method_9490 parse - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_9971 field_218095_c - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_9970 field_218094_b - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_9972 field_218096_d - f Ljava/util/Collection; field_9969 field_218093_a -c net/minecraft/class_5242 net/minecraft/command/arguments/UUIDArgument - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/UUID; method_27645 func_239195_a_ - m (Lcom/mojang/brigadier/StringReader;)Ljava/util/UUID; method_27644 parse - m ()Lnet/minecraft/class_5242; method_27643 func_239194_a_ - f Ljava/util/regex/Pattern; field_24320 field_239193_c_ - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_24318 field_239191_a_ - f Ljava/util/Collection; field_24319 field_239192_b_ -c net/minecraft/class_2247 net/minecraft/command/arguments/BlockStateInput - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;I)Z method_9495 place - m ()Lnet/minecraft/class_2680; method_9494 getState - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_2694;)Z method_9493 test - f Lnet/minecraft/class_2487; field_10633 tag - f Ljava/util/Set; field_10631 properties - f Lnet/minecraft/class_2680; field_10632 state -c net/minecraft/class_2252 net/minecraft/command/arguments/BlockPredicateArgument - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2259;Lnet/minecraft/class_5415;)Ljava/util/function/Predicate; method_9646 func_199822_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/function/Predicate; method_9644 getBlockPredicate - m ()Lnet/minecraft/class_2252; method_9645 blockPredicate - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9643 func_208682_a - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2252$class_2254; method_9642 parse - m (Lnet/minecraft/class_2252$class_2253;Lnet/minecraft/class_5415;)Ljava/util/function/Predicate; method_9647 func_199823_a - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10671 UNKNOWN_TAG - f Ljava/util/Collection; field_10672 EXAMPLES -c net/minecraft/class_2252$1 net/minecraft/command/arguments/BlockPredicateArgument$1 -c net/minecraft/class_2252$class_2255 net/minecraft/command/arguments/BlockPredicateArgument$TagPredicate - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_2694;)Z method_9649 test - f Ljava/util/Map; field_10678 properties - f Lnet/minecraft/class_2487; field_10677 nbt - f Lnet/minecraft/class_3494; field_10676 tag -c net/minecraft/class_2252$class_2254 net/minecraft/command/arguments/BlockPredicateArgument$IResult - m (Lnet/minecraft/class_5415;)Ljava/util/function/Predicate; create create -c net/minecraft/class_2252$class_2253 net/minecraft/command/arguments/BlockPredicateArgument$BlockPredicate - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_2694;)Z method_9648 test - f Lnet/minecraft/class_2487; field_10675 nbt - f Ljava/util/Set; field_10673 properties - f Lnet/minecraft/class_2680; field_10674 state -c net/minecraft/class_2257 net/minecraft/command/arguments/BlockStateArgument - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m ()Ljava/util/Collection; getExamples getExamples - m ()Lnet/minecraft/class_2257; method_9653 blockState - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2247; method_9655 getBlockState - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2247; method_9654 parse - f Ljava/util/Collection; field_10679 EXAMPLES -c net/minecraft/class_2259 net/minecraft/command/arguments/BlockStateParser - m (Z)Lnet/minecraft/class_2259; method_9678 parse - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9682 func_208687_a - m (Lnet/minecraft/class_2680;)Ljava/lang/String; method_9685 toString - m ()Lnet/minecraft/class_2487; method_9694 getNbt - m ()Lnet/minecraft/class_2680; method_9669 getState - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9661 func_208685_c - m ()V method_9677 readTag - m (Ljava/lang/String;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9683 func_200138_a_ - m ()Ljava/util/Map; method_9692 getProperties - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9671 suggestPropertyOrEnd - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9686 func_208689_a - m ()V method_9680 readStringProperties - m (Lnet/minecraft/class_2769;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9684 func_197251_a_ - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9693 suggestEquals - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9667 suggestStringProperty - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_2769;)Lcom/mojang/brigadier/suggestion/SuggestionsBuilder; method_9662 suggestValue - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_29383 func_239308_m_ - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9679 func_212599_i - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9670 suggestTag - m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9660 func_208684_a - m (I)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17956 func_239291_a_ - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9691 func_208690_b - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9666 getSuggestions - m ()V method_9675 readBlock - m (Ljava/lang/StringBuilder;Lnet/minecraft/class_2769;Ljava/lang/Comparable;)V method_9663 propValToString - m ()V method_9659 readProperties - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9674 suggestStringPropertyOrEnd - m ()V method_9672 readNBT - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9687 suggestNbt - m (Lnet/minecraft/class_2769;Ljava/lang/String;I)V method_9668 parseValue - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9689 suggestPropertyEndOrContinue - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9665 suggestProperty - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9673 suggestTagOrBlock - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;Ljava/lang/String;)Ljava/util/concurrent/CompletableFuture; method_9690 func_239295_a_ - m ()Lnet/minecraft/class_2960; method_9664 getTag - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9681 suggestPropertyOrNbt - m (Lnet/minecraft/class_5414;)Z method_9676 func_212598_k - m ()Ljava/util/Map; method_9688 getStringProperties - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_10692 STATE_DUPLICATE_PROPERTY - f Lnet/minecraft/class_2960; field_10697 blockID - f Lnet/minecraft/class_2960; field_10681 tag - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_10688 STATE_NO_VALUE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10684 STATE_UNCLOSED - f Ljava/util/function/BiFunction; field_10682 SUGGEST_NONE - f Lnet/minecraft/class_2689; field_10689 blockStateContainer - f Lnet/minecraft/class_2487; field_10693 nbt - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10691 STATE_TAGS_NOT_ALLOWED - f Ljava/util/Map; field_10685 stringProperties - f Ljava/util/function/BiFunction; field_10696 suggestor - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_10695 STATE_UNKNOWN_PROPERTY - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10690 STATE_BAD_ID - f Z field_10687 tagsAllowed - f I field_10694 cursorPos - f Ljava/util/Map; field_10699 properties - f Lcom/mojang/brigadier/exceptions/Dynamic3CommandExceptionType; field_10683 STATE_INVALID_PROPERTY_VALUE - f Lnet/minecraft/class_2680; field_10686 state - f Lcom/mojang/brigadier/StringReader; field_10698 reader -c net/minecraft/class_2262 net/minecraft/command/arguments/BlockPosArgument - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2338; method_9696 getLoadedBlockPos - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2338; method_9697 getBlockPos - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2267; method_9699 parse - m ()Lnet/minecraft/class_2262; method_9698 blockPos - f Ljava/util/Collection; field_10702 EXAMPLES - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10704 POS_OUT_OF_WORLD - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10703 POS_UNLOADED -c net/minecraft/class_2264 net/minecraft/command/arguments/ColumnPosArgument - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2265; method_9702 fromBlockPos - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Lnet/minecraft/class_2264; method_9701 columnPos - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2267; method_9703 parse - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10706 INCOMPLETE_EXCEPTION - f Ljava/util/Collection; field_10705 EXAMPLES -c net/minecraft/class_2267 net/minecraft/command/arguments/ILocationArgument - m ()Z method_9707 isZRelative - m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_2338; method_9704 getBlockPos - m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_243; method_9708 getPosition - m ()Z method_9706 isYRelative - m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_241; method_9709 getRotation - m ()Z method_9705 isXRelative -c net/minecraft/class_2268 net/minecraft/command/arguments/LocalLocationArgument - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2268; method_9711 parse - m (Lcom/mojang/brigadier/StringReader;I)D method_9710 parseCoord - f D field_10714 left - f D field_10713 up - f D field_10712 forwards -c net/minecraft/class_2270 net/minecraft/command/arguments/RotationArgument - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2267; method_9716 getRotation - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2267; method_9718 parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Lnet/minecraft/class_2270; method_9717 rotation - f Ljava/util/Collection; field_10735 EXAMPLES - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10736 ROTATION_INCOMPLETE -c net/minecraft/class_2273 net/minecraft/command/arguments/SwizzleArgument - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Lnet/minecraft/class_2273; method_9721 swizzle - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/EnumSet; method_9720 getSwizzle - m (Lcom/mojang/brigadier/StringReader;)Ljava/util/EnumSet; method_9722 parse - f Ljava/util/Collection; field_10740 EXAMPLES - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10741 SWIZZLE_INVALID -c net/minecraft/class_2274 net/minecraft/command/arguments/Vec2Argument - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_241; method_9724 getVec2f - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2267; method_9725 parse - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m ()Lnet/minecraft/class_2274; method_9723 vec2 - f Ljava/util/Collection; field_10742 EXAMPLES - f Z field_10744 centerIntegers - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10743 VEC2_INCOMPLETE -c net/minecraft/class_2277 net/minecraft/command/arguments/Vec3Argument - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2267; method_9734 getLocation - m ()Lnet/minecraft/class_2277; method_9737 vec3 - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_243; method_9736 getVec3 - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m (Z)Lnet/minecraft/class_2277; method_9735 vec3 - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2267; method_9738 parse - f Ljava/util/Collection; field_10754 EXAMPLES - f Z field_10756 centerIntegers - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10757 POS_MIXED_TYPES - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10755 POS_INCOMPLETE -c net/minecraft/class_2278 net/minecraft/command/arguments/LocationPart - m (Lcom/mojang/brigadier/StringReader;)Z method_9742 isRelative - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2278; method_9739 parseInt - m (Ljava/lang/Object;)Z equals equals - m (D)D method_9740 get - m ()Z method_9741 isRelative - m (Lcom/mojang/brigadier/StringReader;Z)Lnet/minecraft/class_2278; method_9743 parseDouble - m ()I hashCode hashCode - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10761 EXPECTED_INT - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10759 EXPECTED_DOUBLE - f D field_10758 value - f Z field_10760 relative -c net/minecraft/class_2280 net/minecraft/command/arguments/LocationInput - m (Ljava/lang/Object;)Z equals equals - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2280; method_9749 parseInt - m ()Lnet/minecraft/class_2280; method_9751 current - m (Lcom/mojang/brigadier/StringReader;Z)Lnet/minecraft/class_2280; method_9750 parseDouble - m ()I hashCode hashCode - f Lnet/minecraft/class_2278; field_10765 x - f Lnet/minecraft/class_2278; field_10766 z - f Lnet/minecraft/class_2278; field_10764 y -c net/minecraft/class_2284 net/minecraft/command/arguments/FunctionArgument - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9765 func_208691_b - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_9766 func_218107_a - m ()Lnet/minecraft/class_2284; method_9760 function - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9762 func_208694_a - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_9767 func_218111_d - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/Collection; method_9769 getFunctions - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;)Lnet/minecraft/class_2158; method_9761 func_218108_c - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair; method_9768 func_218110_b - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;)Lnet/minecraft/class_2158; method_9763 func_218112_b - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17959 func_218109_a - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2284$class_2285; method_9764 parse - f Ljava/util/Collection; field_10783 EXAMPLES - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10782 FUNCTION_UNKNOWN_TAG - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10784 FUNCTION_UNKNOWN -c net/minecraft/class_2284$class_2285 net/minecraft/command/arguments/FunctionArgument$IResult - m (Lcom/mojang/brigadier/context/CommandContext;)Lcom/mojang/datafixers/util/Pair; method_9770 func_218102_b - m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_9771 create -c net/minecraft/class_2284$2 net/minecraft/command/arguments/FunctionArgument$2 - f Lnet/minecraft/class_2284; field_10788 field_218106_b - f Lnet/minecraft/class_2960; field_10787 field_218105_a -c net/minecraft/class_2284$1 net/minecraft/command/arguments/FunctionArgument$1 - f Lnet/minecraft/class_2960; field_10785 field_218103_a - f Lnet/minecraft/class_2284; field_10786 field_218104_b -c net/minecraft/class_2287 net/minecraft/command/arguments/ItemArgument - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_2290; method_9777 getItem - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2290; method_9778 parse - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m ()Lnet/minecraft/class_2287; method_9776 item - f Ljava/util/Collection; field_10790 EXAMPLES -c net/minecraft/class_2290 net/minecraft/command/arguments/ItemInput - m ()Lnet/minecraft/class_1792; method_9785 getItem - m (IZ)Lnet/minecraft/class_1799; method_9781 createStack - m (Lnet/minecraft/class_1799;)Z method_9783 test - m (Ljava/lang/Object;)Z test test - m ()Ljava/lang/String; method_9782 serialize - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9784 func_208695_a - f Lnet/minecraft/class_2487; field_10798 tag - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_10797 STACK_TOO_LARGE - f Lnet/minecraft/class_1792; field_10796 item -c net/minecraft/class_2291 net/minecraft/command/arguments/ItemParser - m ()V method_9787 readTag - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9793 fillSuggestions - m ()V method_9795 readItem - m ()V method_9788 readNBT - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9794 suggestItem - m ()Lnet/minecraft/class_2960; method_9790 getTag - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9796 suggestTag - m ()Lnet/minecraft/class_2291; method_9789 parse - m (ILnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17960 func_239566_a_ - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9792 func_208696_a - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_9791 suggestTagOrItem - m ()Lnet/minecraft/class_2487; method_9797 getNbt - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Lnet/minecraft/class_5414;)Ljava/util/concurrent/CompletableFuture; method_29394 func_239571_e_ - m ()Lnet/minecraft/class_1792; method_9786 getItem - f Lnet/minecraft/class_1792; field_10803 item - f Lnet/minecraft/class_2960; field_10808 tag - f Ljava/util/function/BiFunction; field_10805 suggestionsBuilder - f Ljava/util/Map; field_10801 field_197336_d - f Ljava/util/function/BiFunction; field_10806 DEFAULT_SUGGESTIONS_BUILDER - f Lcom/mojang/brigadier/StringReader; field_10802 reader - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10800 ITEM_TAGS_NOT_ALLOWED - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10799 ITEM_BAD_ID - f I field_10809 readerCursor - f Lnet/minecraft/class_2487; field_10807 nbt - f Z field_10804 allowTags -c net/minecraft/class_2293 net/minecraft/command/arguments/ItemPredicateArgument - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9802 func_208699_a - m ()Ljava/util/Collection; getExamples getExamples - m ()Lnet/minecraft/class_2293; method_9801 itemPredicate - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2291;Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/function/Predicate; method_9803 func_199845_a - m (Lnet/minecraft/class_2293$class_2294;Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/function/Predicate; method_9805 func_199848_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/util/function/Predicate; method_9804 getItemPredicate - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2293$class_2295; method_9800 parse - f Ljava/util/Collection; field_10812 EXAMPLES - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10811 UNKNOWN_TAG -c net/minecraft/class_2293$class_2296 net/minecraft/command/arguments/ItemPredicateArgument$TagPredicate - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_1799;)Z method_9807 test - f Lnet/minecraft/class_2487; field_10816 nbt - f Lnet/minecraft/class_3494; field_10815 tag -c net/minecraft/class_2293$class_2295 net/minecraft/command/arguments/ItemPredicateArgument$IResult - m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/function/Predicate; create create -c net/minecraft/class_2293$class_2294 net/minecraft/command/arguments/ItemPredicateArgument$ItemPredicate - m (Lnet/minecraft/class_1799;)Z method_9806 test - m (Ljava/lang/Object;)Z test test - f Lnet/minecraft/class_2487; field_10814 nbt - f Lnet/minecraft/class_1792; field_10813 item -c net/minecraft/class_2300 net/minecraft/command/arguments/EntitySelector - m (Ljava/util/List;Lnet/minecraft/class_3218;Lnet/minecraft/class_243;Ljava/util/function/Predicate;)V method_9823 getEntities - m (Lnet/minecraft/class_2168;)Ljava/util/List; method_9816 select - m (Lnet/minecraft/class_2168;)Ljava/util/List; method_9813 selectPlayers - m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_3222; method_9811 selectOnePlayer - m (Lnet/minecraft/class_243;)Ljava/util/function/Predicate; method_9817 updateFilter - m (Lnet/minecraft/class_243;Ljava/util/List;)Ljava/util/List; method_9814 sortAndLimit - m ()I method_9815 getLimit - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)Z method_9812 func_211376_a - m ()Z method_9819 includesEntities - m (Lnet/minecraft/class_2168;)V method_9818 checkPermission - m ()Z method_9820 isSelfSelector - m (Lnet/minecraft/class_2168;)Lnet/minecraft/class_1297; method_9809 selectOne - m (Lnet/minecraft/class_238;Lnet/minecraft/class_1297;)Z method_9810 func_197344_a - m (Ljava/util/List;)Lnet/minecraft/class_5250; method_9822 joinNames - m ()Z method_9821 isWorldLimited - f field_10829 currentWorldOnly - f Z field_10827 checkPermission - f I field_10822 limit - f Ljava/util/UUID; field_10821 uuid - f Lnet/minecraft/class_238; field_10824 aabb - f Lnet/minecraft/class_2096$class_2099; field_10825 distance - f Ljava/lang/String; field_10831 username - f Lnet/minecraft/class_1299; field_10832 type - f Ljava/util/function/BiConsumer; field_10826 sorter - f Ljava/util/function/Function; field_10823 positionGetter - f Z field_10830 includeNonPlayers - f Z field_10828 self - f Ljava/util/function/Predicate; field_10820 filter -c net/minecraft/class_2303 net/minecraft/command/arguments/EntitySelectorParser - m ()Lnet/minecraft/class_2300; method_9871 build - m ()V method_9852 setCurrentWorldOnly - m ()Lnet/minecraft/class_2300; method_9882 parse - m (Ljava/util/function/BiConsumer;)V method_9845 setSorter - m ()Z method_9904 hasTeamEquals - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9911 suggestOptionsOrEnd - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9903 func_208711_a - m (D)V method_9864 setY - m (Z)V method_9913 setHasNameNotEquals - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9854 func_201342_j - m (Z)V method_9890 setHasGamemodeEquals - m ()V method_9878 updateFilter - m (D)V method_9905 setDy - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9858 suggestName - m (Lnet/minecraft/class_243;Ljava/util/List;)V method_9901 func_197383_b - m ()Ljava/lang/Double; method_9884 getY - m ()Z method_9844 hasNameNotEquals - m ()V method_9874 parseArguments - m ()Ljava/lang/Double; method_9907 getDz - m (Z)V method_9848 setHasScores - m (Lnet/minecraft/class_1297;)D method_9914 func_197385_b - m ()Lnet/minecraft/class_2096$class_2099; method_9873 getDistance - m (D)V method_9850 setX - m ()Z method_9837 hasGamemodeNotEquals - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_9869 func_197379_b - m ()Z method_9886 isTypeLimited - m ()Lnet/minecraft/class_2096$class_2100; method_9895 getLevel - m (Z)V method_9899 setHasNameEquals - m (Lnet/minecraft/class_243;Ljava/util/List;)V method_9888 func_197392_b - m ()Z method_9861 hasAdvancements - m (Z)V method_9887 setSorted - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9880 suggestNameOrSelector - m (Lnet/minecraft/class_2152;Ljava/util/function/ToDoubleFunction;)Ljava/util/function/Predicate; method_9859 createRotationPredicate - m ()Ljava/lang/Double; method_9902 getX - m (Z)V method_9833 setHasTeamNotEquals - m ()V method_9849 parseSingleEntity - m (Lnet/minecraft/class_2152;)V method_9855 setYRotation - m ()Ljava/lang/Double; method_9840 getDy - m ()Z method_9912 hasNameEquals - m ()Z method_9839 hasGamemodeEquals - m (Lnet/minecraft/class_1297;)D method_9856 func_197386_c - m (Lnet/minecraft/class_1297;)Z method_9838 func_197375_d - m ()Z method_9915 func_218115_f - m (Lnet/minecraft/class_2152;)V method_9898 setXRotation - m (Lnet/minecraft/class_2096$class_2100;)V method_9846 setLevel - m (Z)V method_9841 setIncludeNonPlayers - m ()V method_9860 setTypeLimitedInversely - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9847 suggestCommaOrEnd - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)I method_9862 func_197369_a - m (D)V method_9891 setDx - m ()Lnet/minecraft/class_2152; method_9883 getXRotation - m (DDD)Lnet/minecraft/class_238; method_9894 createAABB - m ()Z method_9843 hasScores - m ()Lcom/mojang/brigadier/StringReader; method_9835 getReader - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9908 fillSuggestions - m ()Z method_9885 isCurrentEntity - m (Lnet/minecraft/class_243;Ljava/util/List;)V method_9836 func_197402_c - m ()Ljava/lang/Double; method_9851 getDx - m (Z)V method_9865 setHasTeamEquals - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9893 suggestOpenBracket - m (Lnet/minecraft/class_2096$class_2099;)V method_9870 setDistance - m ()V method_9917 parseSelector - m ()Z method_9889 isSorted - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)V method_9896 fillSelectorSuggestions - m (Ljava/util/function/ToDoubleFunction;DDLnet/minecraft/class_1297;)Z method_9881 func_197374_a - m (Lnet/minecraft/class_1299;)V method_9842 func_218114_a - m (Lnet/minecraft/class_1297;)Z method_9876 func_197371_a - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9909 suggestOptions - m (Z)V method_9877 setLimited - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)I method_9897 func_197393_a - m ()Lnet/minecraft/class_2152; method_9853 getYRotation - m (D)V method_9879 setZ - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9863 func_208703_b - m (Lnet/minecraft/class_243;Ljava/util/List;)V method_9867 func_197368_a - m ()Z method_9910 isTypeLimitedInversely - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_9872 func_197367_a - m (D)V method_9918 setDz - m (I)V method_9900 setLimit - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9834 suggestSelector - m (Z)V method_9857 setHasGamemodeNotEquals - m ()Ljava/lang/Double; method_9868 getZ - m (Ljava/util/function/BiFunction;)V method_9875 setSuggestionHandler - m (Z)V method_9906 setHasAdvancements - m ()Z method_9866 isLimited - m (Ljava/util/function/Predicate;)V method_9916 addFilter - m ()Z method_9892 shouldInvertValue - f field_10844 SELECTOR_TYPE_MISSING - f Ljava/util/function/BiConsumer; field_10856 ARBITRARY - f I field_10861 cursorStart - f Z field_10843 includeNonPlayers - f Z field_10874 hasNameNotEquals - f Lcom/mojang/brigadier/StringReader; field_10860 reader - f Z field_10849 hasGamemodeEquals - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10837 EXPECTED_END_OF_OPTIONS - f Ljava/lang/Double; field_10839 z - f Z field_10840 checkPermission - f Ljava/util/function/BiConsumer; field_10869 NEAREST - f Lnet/minecraft/class_1299; field_10863 type - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10880 SELECTOR_NOT_ALLOWED - f Ljava/util/function/Predicate; field_10870 filter - f Z field_10854 hasNameEquals - f Z field_10873 isSorted - f Lnet/minecraft/class_2096$class_2099; field_10838 distance - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10853 UNKNOWN_SELECTOR_TYPE - f Ljava/lang/Double; field_10872 y - f Ljava/util/UUID; field_10878 uuid - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10855 EXPECTED_VALUE_FOR_OPTION - f Z field_10868 hasTeamNotEquals - f I field_10858 limit - f Z field_10864 hasAdvancements - f Lnet/minecraft/class_2152; field_10877 xRotation - f Ljava/lang/Double; field_10881 dz - f Ljava/util/function/BiFunction; field_10867 SUGGEST_NONE - f Ljava/lang/String; field_10876 username - f Lnet/minecraft/class_2096$class_2100; field_10842 level - f Ljava/util/function/BiConsumer; field_10882 FURTHEST - f Z field_10879 self - f Z field_10846 hasPermission - f Z field_10851 isLimited - f Z field_10845 hasTeamEquals - f Ljava/lang/Double; field_10857 x - f Ljava/util/function/BiConsumer; field_10847 sorter - f Ljava/lang/Double; field_10852 dy - f Lnet/minecraft/class_2152; field_10859 yRotation - f Z field_10841 hasScores - f Ljava/util/function/BiFunction; field_10848 suggestionHandler - f Ljava/util/function/BiConsumer; field_10850 RANDOM - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10875 INVALID_ENTITY_NAME_OR_UUID - f Z field_10866 currentWorldOnly - f Z field_10871 hasGamemodeNotEquals - f Z field_10865 typeInverse - f Ljava/lang/Double; field_10862 dx -c net/minecraft/class_2306 net/minecraft/command/arguments/EntityOptions - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9956 func_208749_c - m (Lnet/minecraft/class_2303;)Z method_9943 func_202016_M - m (Lnet/minecraft/class_2303;)V method_9975 func_197457_d - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9964 func_208758_a - m (Lnet/minecraft/class_2303;)Z method_9933 func_202030_w - m (Lnet/minecraft/class_2303;)V method_9968 func_197448_h - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9959 func_208752_e - m (Lnet/minecraft/class_2303;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9946 func_202018_b - m (Lnet/minecraft/class_2303;Ljava/lang/String;I)Lnet/minecraft/class_2306$class_2307; method_9976 get - m (Lnet/minecraft/class_2303;)V method_9966 func_197450_f - m (Lnet/minecraft/class_2303;)Z method_9945 func_202019_I - m (Lnet/minecraft/class_2303;)V method_22824 func_229367_b_ - m (Lnet/minecraft/class_2303;)Z method_9955 func_202036_o - m (Ljava/lang/String;ZLnet/minecraft/class_1297;)Z method_9965 func_197466_a - m (Lnet/minecraft/class_2303;)Z method_9942 func_202022_G - m (Ljava/util/Map;Lnet/minecraft/class_1297;)Z method_9958 func_197441_a - m (Lnet/minecraft/class_2303;)Z method_9934 func_202020_K - m (Lnet/minecraft/class_2303;)V method_9974 func_197453_b - m (Lnet/minecraft/class_2487;ZLnet/minecraft/class_1297;)Z method_9957 func_197443_a - m (Lnet/minecraft/class_2303;)Z method_9935 func_202028_u - m (Lnet/minecraft/class_2303;)V method_9953 func_197455_p - m (Lnet/minecraft/class_2303;)V method_9977 func_197464_D - m (Lnet/minecraft/class_2303;)V method_9948 func_197452_n - m (Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9967 func_202056_a - m (Lnet/minecraft/class_2303;)V method_9979 func_197437_H - m (Lnet/minecraft/class_2960;ZLnet/minecraft/class_1297;)Z method_9950 func_239573_b_ - m (Lnet/minecraft/class_2303;)V method_9969 func_197456_r - m (Ljava/lang/String;ZLnet/minecraft/class_1297;)Z method_9922 func_197454_b - m (Lnet/minecraft/class_2303;)V method_9978 func_197442_F - m (Lnet/minecraft/class_2303;)V method_9963 func_197463_z - m (Lnet/minecraft/class_2303;)V method_9973 func_197447_j - m (Ljava/lang/String;Lnet/minecraft/class_2306$class_2307;Ljava/util/function/Predicate;Lnet/minecraft/class_2561;)V method_9961 register - m (Lnet/minecraft/class_2303;)V method_9962 func_197460_B - m (Lnet/minecraft/class_2303;)V method_9951 func_197449_l - m (Lnet/minecraft/class_2303;)Z method_9927 func_202033_c - m (Lnet/minecraft/class_2303;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture; method_9921 func_202052_a - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9932 func_208740_b - m (Lnet/minecraft/class_2303;)V method_9982 func_197440_N - m (Lnet/minecraft/class_2303;)Z method_9941 func_202046_e - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_9923 func_208726_d - m (Lnet/minecraft/class_2303;)V method_9980 func_197438_J - m (Lnet/minecraft/class_2303;)V method_9970 func_197461_p - m (ZLnet/minecraft/class_1934;Lnet/minecraft/class_1297;)Z method_9924 func_202055_a - m (Lnet/minecraft/class_2303;)Z method_9926 func_202032_a - m (Lnet/minecraft/class_2303;)V method_9972 func_197458_x - m (Ljava/util/Map;Lnet/minecraft/class_1297;)Z method_9937 func_197465_b - m (Lnet/minecraft/class_1299;ZLnet/minecraft/class_1297;)Z method_9919 func_202057_a - m (Lnet/minecraft/class_2303;)V method_9981 func_197439_L - m (Lnet/minecraft/class_2303;)Z method_22822 func_229365_a_ - m (Lnet/minecraft/class_2303;)V method_9971 func_197462_v - m (Lnet/minecraft/class_2303;)Z method_9925 func_202029_C - m (Lnet/minecraft/class_2303;)Z method_9952 func_202048_m - m (Lnet/minecraft/class_2303;)Z method_9954 func_202035_q - m (Ljava/lang/String;ZLnet/minecraft/class_1297;)Z method_9920 func_197446_c - m (Lnet/minecraft/class_2303;)Z method_9944 func_202021_E - m (Lnet/minecraft/class_2303;)Z method_9949 func_202043_o - m (ZLnet/minecraft/class_167;)Z method_9936 func_197451_a - m (Lnet/minecraft/class_2303;ILnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_17961 func_218135_a - m (Lnet/minecraft/class_2303;)Z method_9939 func_202047_i - m ()V method_9960 registerOptions - m (Ljava/util/Map;Lnet/minecraft/class_167;)Z method_9929 func_197435_a - m (Lnet/minecraft/class_2303;)Z method_9938 func_202041_g - m (Lnet/minecraft/class_2960;ZLnet/minecraft/class_1297;)Z method_22823 func_229366_a_ - m (Lnet/minecraft/class_2303;)Z method_9947 func_202027_A - m (Lnet/minecraft/class_2303;)Z method_9940 func_202038_k - m (ZLnet/minecraft/class_178;)Z method_9931 func_197444_a - m (Lnet/minecraft/class_2303;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)V method_9930 suggestOptions - m (Lnet/minecraft/class_2303;)Z method_9928 func_202026_y - f field_10886 NONPOSITIVE_LIMIT - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10889 INVALID_GAME_MODE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10890 NEGATIVE_DISTANCE - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10885 UNKNOWN_ENTITY_OPTION - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10892 INVALID_ENTITY_TYPE - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10888 INVALID_SORT - f Ljava/util/Map; field_10891 REGISTRY - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_10893 NEGATIVE_LEVEL - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_10887 INAPPLICABLE_ENTITY_OPTION -c net/minecraft/class_2306$class_2308 net/minecraft/command/arguments/EntityOptions$OptionHandler - f Lnet/minecraft/class_2561; field_10894 tooltip - f Ljava/util/function/Predicate; field_10896 canHandle - f Lnet/minecraft/class_2306$class_2307; field_10895 handler -c net/minecraft/class_2306$class_2307 net/minecraft/command/arguments/EntityOptions$IFilter - m (Lnet/minecraft/class_2303;)V handle handle -c net/minecraft/class_2306$1 net/minecraft/command/arguments/EntityOptions$1 -c net/minecraft/class_2314 net/minecraft/command/arguments/IArgumentSerializer - m (Lcom/mojang/brigadier/arguments/ArgumentType;Lcom/google/gson/JsonObject;)V method_10006 write - m (Lcom/mojang/brigadier/arguments/ArgumentType;Lnet/minecraft/class_2540;)V method_10007 write - m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/ArgumentType; method_10005 read -c net/minecraft/class_2316 net/minecraft/command/arguments/ArgumentTypes - m (Lcom/mojang/brigadier/tree/CommandNode;)Ljava/util/Set; method_30924 func_243511_a - m (Lcom/mojang/brigadier/arguments/ArgumentType;)Z method_30923 func_243510_a - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2316$class_2317; method_10018 get - m (Lnet/minecraft/class_2540;Lcom/mojang/brigadier/arguments/ArgumentType;)V method_10019 serialize - m ()V method_10015 registerArgumentTypes - m (Lcom/mojang/brigadier/tree/CommandNode;Ljava/util/Set;Ljava/util/Set;)V method_30925 func_243512_a - m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/ArgumentType; method_10014 deserialize - m (Lcom/mojang/brigadier/arguments/ArgumentType;)Lnet/minecraft/class_2316$class_2317; method_10013 get - m (Ljava/util/Set;Ljava/util/Set;Lcom/mojang/brigadier/tree/CommandNode;)V method_30926 func_243513_a - m (Lcom/mojang/brigadier/CommandDispatcher;Lcom/mojang/brigadier/tree/CommandNode;)Lcom/google/gson/JsonObject; method_10016 serialize - m (Lcom/google/gson/JsonObject;Lcom/mojang/brigadier/arguments/ArgumentType;)V method_10020 serialize - m (Ljava/lang/String;Ljava/lang/Class;Lnet/minecraft/class_2314;)V method_10017 register - f Ljava/util/Map; field_10922 ID_TYPE_MAP - f Ljava/util/Map; field_10921 CLASS_TYPE_MAP - f Lorg/apache/logging/log4j/Logger; field_10923 LOGGER -c net/minecraft/class_2316$class_2317 net/minecraft/command/arguments/ArgumentTypes$Entry - f Lnet/minecraft/class_2314; field_10926 serializer - f Ljava/lang/Class; field_10924 argumentClass - f Lnet/minecraft/class_2960; field_10925 id -c net/minecraft/class_2316$1 net/minecraft/command/arguments/ArgumentTypes$1 -c net/minecraft/class_2319 net/minecraft/command/arguments/ArgumentSerializer - f Ljava/util/function/Supplier; field_10928 factory -c net/minecraft/class_2321 net/minecraft/command/arguments/SuggestionProviders - m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/suggestion/SuggestionProvider; method_10024 get - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_24473 func_239577_b_ - m (Lnet/minecraft/class_1299;)Lcom/mojang/brigadier/Message; method_10023 func_201209_a_ - m (Lcom/mojang/brigadier/suggestion/SuggestionProvider;)Lnet/minecraft/class_2960; method_10027 getId - m (Lcom/mojang/brigadier/suggestion/SuggestionProvider;)Lcom/mojang/brigadier/suggestion/SuggestionProvider; method_10026 ensureKnown - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_10028 func_201210_a_ - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_10025 func_197495_b - m (Lnet/minecraft/class_2960;Lcom/mojang/brigadier/suggestion/SuggestionProvider;)Lcom/mojang/brigadier/suggestion/SuggestionProvider; method_10022 register - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_10030 func_197501_c - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_10029 func_197500_d - f Lnet/minecraft/class_2960; field_10930 ASK_SERVER_ID - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_10935 SUMMONABLE_ENTITIES - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_10932 ALL_RECIPES - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_10934 AVAILABLE_SOUNDS - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_22245 field_239574_d_ - f Ljava/util/Map; field_10931 REGISTRY - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_10933 ASK_SERVER -c net/minecraft/class_2321$class_2322 net/minecraft/command/arguments/SuggestionProviders$Wrapper - m (Lnet/minecraft/class_2321$class_2322;)Lnet/minecraft/class_2960; method_10031 access$000 - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; getSuggestions getSuggestions - f Lnet/minecraft/class_2960; field_10936 id - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_10937 provider -c net/minecraft/class_2324 net/minecraft/command/arguments/serializers/BrigadierSerializers - m (B)Z method_10039 hasMin - m (B)Z method_10038 hasMax - m (ZZ)B method_10037 minMaxFlags - m ()V method_10040 registerArgumentTypes -c net/minecraft/class_2326 net/minecraft/command/arguments/serializers/DoubleArgumentSerializer - m (Lcom/mojang/brigadier/arguments/DoubleArgumentType;Lnet/minecraft/class_2540;)V method_10041 write - m (Lcom/mojang/brigadier/arguments/DoubleArgumentType;Lcom/google/gson/JsonObject;)V method_10043 write - m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/DoubleArgumentType; method_10042 read -c net/minecraft/class_2327 net/minecraft/command/arguments/serializers/FloatArgumentSerializer - m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/FloatArgumentType; method_10045 read - m (Lcom/mojang/brigadier/arguments/FloatArgumentType;Lcom/google/gson/JsonObject;)V method_10046 write - m (Lcom/mojang/brigadier/arguments/FloatArgumentType;Lnet/minecraft/class_2540;)V method_10044 write -c net/minecraft/class_2330 net/minecraft/command/arguments/serializers/IntArgumentSerializer - m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/IntegerArgumentType; method_10050 read - m (Lcom/mojang/brigadier/arguments/IntegerArgumentType;Lcom/google/gson/JsonObject;)V method_10049 write - m (Lcom/mojang/brigadier/arguments/IntegerArgumentType;Lnet/minecraft/class_2540;)V method_10048 write -c net/minecraft/class_4461 net/minecraft/command/arguments/serializers/LongArgumentSerializer - m (Lcom/mojang/brigadier/arguments/LongArgumentType;Lnet/minecraft/class_2540;)V method_21690 write - m (Lcom/mojang/brigadier/arguments/LongArgumentType;Lcom/google/gson/JsonObject;)V method_21689 write - m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/LongArgumentType; method_21691 read -c net/minecraft/class_2332 net/minecraft/command/arguments/serializers/StringArgumentSerializer - m (Lcom/mojang/brigadier/arguments/StringArgumentType;Lcom/google/gson/JsonObject;)V method_10051 write - m (Lnet/minecraft/class_2540;)Lcom/mojang/brigadier/arguments/StringArgumentType; method_10052 read - m (Lcom/mojang/brigadier/arguments/StringArgumentType;Lnet/minecraft/class_2540;)V method_10053 write -c net/minecraft/class_2332$1 net/minecraft/command/arguments/serializers/StringArgumentSerializer$1 - f [I field_10952 field_197512_a -c net/minecraft/class_2335 net/minecraft/util/AxisRotation - m (Ljava/lang/String;)Lnet/minecraft/class_2335; valueOf valueOf - m (IIILnet/minecraft/class_2350$class_2351;)I method_10056 getCoordinate - m (Lnet/minecraft/class_2350$class_2351;)Lnet/minecraft/class_2350$class_2351; method_10058 rotate - m ()Lnet/minecraft/class_2335; method_10055 reverse - m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_2350$class_2351;)Lnet/minecraft/class_2335; method_10057 from - m ()[Lnet/minecraft/class_2335; values values - f Lnet/minecraft/class_2335; field_10962 NONE - f [Lnet/minecraft/class_2350$class_2351; field_10961 AXES - f Lnet/minecraft/class_2335; field_10963 FORWARD - f Lnet/minecraft/class_2335; field_10965 BACKWARD - f [Lnet/minecraft/class_2335; field_10964 $VALUES - f [Lnet/minecraft/class_2335; field_10960 AXIS_ROTATIONS -c net/minecraft/class_2335$1 net/minecraft/util/AxisRotation$1 -c net/minecraft/class_2335$2 net/minecraft/util/AxisRotation$2 -c net/minecraft/class_2335$3 net/minecraft/util/AxisRotation$3 -c net/minecraft/class_4609 net/minecraft/client/renderer/model/UVTransformationUtil - m (Lnet/minecraft/class_4590;Lnet/minecraft/class_2350;Ljava/util/function/Supplier;)Lnet/minecraft/class_4590; method_23221 getUVLockTransform - m (Ljava/util/EnumMap;)V method_23222 func_229381_a_ - m (Lnet/minecraft/class_4590;)Lnet/minecraft/class_4590; method_23220 blockCenterToCorner - m (Ljava/util/EnumMap;)V method_23223 func_229382_b_ - f Lorg/apache/logging/log4j/Logger; field_21023 LOGGER - f Ljava/util/EnumMap; field_21021 TRANSFORM_LOCAL_TO_GLOBAL - f Ljava/util/EnumMap; field_21022 TRANSFORM_GLOBAL_TO_LOCAL -c net/minecraft/class_2338 net/minecraft/util/math/BlockPos - m ([I)Lnet/minecraft/class_2338; method_29095 func_239587_a_ - m (I)Lnet/minecraft/class_2338; method_10088 west - m (J)Lnet/minecraft/class_2338; method_10092 fromLong - m ()Lnet/minecraft/class_2338; method_10084 up - m (Lnet/minecraft/class_238;)Ljava/util/stream/Stream; method_29715 getAllInBox - m (I)Lnet/minecraft/class_2338; method_10086 up - m (JLnet/minecraft/class_2350;)J method_10060 offset - m (I)Lnet/minecraft/class_2338; method_10076 north - m ()Lnet/minecraft/class_2338; method_10067 west - m (Ljava/util/Random;IIIIIII)Ljava/lang/Iterable; method_27156 getRandomPositions - m (III)Lnet/minecraft/class_2338; method_10069 add - m (J)I method_10071 unpackY - m ()Lnet/minecraft/class_2338; method_10062 toImmutable - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Ljava/util/stream/Stream; method_20437 getAllInBox - m ()Lnet/minecraft/class_2338; method_10095 north - m (Lnet/minecraft/class_2338;III)Ljava/util/stream/Stream; method_25998 getProximitySortedBoxPositions - m (IIIIII)Ljava/util/stream/Stream; method_17962 getAllInBox - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Ljava/lang/Iterable; method_10097 getAllInBoxMutable - m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2338; method_10075 crossProduct - m ()Lnet/minecraft/class_2338$class_2339; method_25503 toMutable - m (Lnet/minecraft/class_2350;I)Lnet/minecraft/class_2338; method_10079 offset - m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2338; method_10081 add - m (Ljava/util/stream/IntStream;)Lcom/mojang/serialization/DataResult; method_29094 func_239586_a_ - m (Lnet/minecraft/class_3341;)Ljava/util/stream/Stream; method_23627 getAllInBox - m (Lnet/minecraft/class_2338;ILnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Ljava/lang/Iterable; method_30512 func_243514_a - m (DDD)Lnet/minecraft/class_2338; method_10080 add - m (I)Lnet/minecraft/class_2338; method_10077 south - m (III)J method_10064 pack - m ()Lnet/minecraft/class_2338; method_10074 down - m (I)Lnet/minecraft/class_2338; method_10087 down - m (Lnet/minecraft/class_2338;IILjava/util/function/Predicate;)Ljava/util/Optional; method_25997 getClosestMatchingPosition - m ()Lnet/minecraft/class_2338; method_10078 east - m (J)I method_10083 unpackZ - m ()J method_10063 toLong - m (J)I method_10061 unpackX - m (J)J method_10091 atSectionBottomY - m (I)Lnet/minecraft/class_2338; method_10089 east - m (Lnet/minecraft/class_2350$class_2351;I)Lnet/minecraft/class_2338; method_30513 func_241872_a - m ()Lnet/minecraft/class_2338; method_10072 south - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2338; method_10093 offset - m (Lnet/minecraft/class_2338;III)Ljava/lang/Iterable; method_25996 getProximitySortedBoxPositionsIterator - m (Lnet/minecraft/class_2338;)Ljava/util/stream/IntStream; method_29093 func_239582_a_ - m (IILjava/util/Random;IIIII)Ljava/util/Iterator; method_27155 func_239580_a_ - m (IIIIII)Ljava/lang/Iterable; method_10094 getAllInBoxMutable - m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2338; method_10059 subtract - m (IIIIII)Ljava/util/Iterator; method_10073 func_239589_c_ - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Lnet/minecraft/class_2338;I)Ljava/util/Iterator; method_30514 func_243515_a - m (Lnet/minecraft/class_2470;)Lnet/minecraft/class_2338; method_10070 rotate - m (JIII)J method_10096 offset - m (IIIIIII)Ljava/util/Iterator; method_25995 func_239579_a_ - f I field_10977 NUM_Z_BITS - f J field_10974 Y_MASK - f I field_10983 INVERSE_START_BITS_Z - f Lnet/minecraft/class_2338; field_10980 ZERO - f I field_10975 NUM_Y_BITS - f I field_10978 NUM_X_BITS - f Lcom/mojang/serialization/Codec; field_25064 CODEC - f J field_10976 X_MASK - f I field_10981 INVERSE_START_BITS_X - f J field_10973 Z_MASK - f Lorg/apache/logging/log4j/Logger; field_18789 LOGGER -c net/minecraft/class_2338$class_2339 net/minecraft/util/math/BlockPos$Mutable - m (III)Lnet/minecraft/class_2338$class_2339; method_10103 setPos - m (Lnet/minecraft/class_2350$class_2351;II)Lnet/minecraft/class_2338$class_2339; method_27158 clampAxisCoordinate - m (J)Lnet/minecraft/class_2338$class_2339; method_16363 setPos - m (III)Lnet/minecraft/class_2338$class_2339; method_10100 move - m (Lnet/minecraft/class_2382;III)Lnet/minecraft/class_2338$class_2339; method_25504 setAndOffset - m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2338$class_2339; method_30927 func_243531_h - m (Lnet/minecraft/class_2335;III)Lnet/minecraft/class_2338$class_2339; method_17965 setPos - m (DDD)Lnet/minecraft/class_2338$class_2339; method_10102 setPos - m (Lnet/minecraft/class_2382;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2338$class_2339; method_25505 setAndMove - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2338$class_2339; method_10098 move - m (Lnet/minecraft/class_2350;I)Lnet/minecraft/class_2338$class_2339; method_10104 move - m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2338$class_2339; method_10101 setPos -c net/minecraft/class_2338$2 net/minecraft/util/math/BlockPos$2 - m ()Ljava/lang/Object; computeNext computeNext - m ()Lnet/minecraft/class_2338; method_25999 computeNext - f I field_23377 field_239603_g_ - f Z field_23379 field_239609_n_ - f I field_23099 field_239604_i_ - f I field_23097 field_239601_e_ - f I field_23096 field_239600_d_ - f I field_23376 field_239602_f_ - f I field_23103 field_239608_m_ - f I field_23094 field_239598_b_ - f I field_23102 field_239607_l_ - f Lnet/minecraft/class_2338$class_2339; field_23378 coordinateIterator - f I field_23095 field_239599_c_ - f I field_23100 field_239605_j_ - f I field_23375 field_239597_a_ - f I field_23101 field_239606_k_ -c net/minecraft/class_2338$3 net/minecraft/util/math/BlockPos$3 - m ()Ljava/lang/Object; computeNext computeNext - m ()Lnet/minecraft/class_2338; method_10106 computeNext - f I field_23108 field_239613_d_ - f I field_23110 field_239615_f_ - f I field_23109 field_239614_e_ - f I field_23106 field_239611_b_ - f Lnet/minecraft/class_2338$class_2339; field_23380 mutablePos - f I field_23105 field_239610_a_ - f I field_23107 field_239612_c_ - f I field_23111 totalAmount -c net/minecraft/class_2338$4 net/minecraft/util/math/BlockPos$4 - m ()Ljava/lang/Object; computeNext computeNext - m ()Lnet/minecraft/class_2338$class_2339; method_30515 computeNext - f I field_25910 field_243527_l - f I field_25911 field_243528_m - f I field_25907 field_243524_i - f [Lnet/minecraft/class_2350; field_25903 field_243520_e - f I field_25909 field_243526_k - f Lnet/minecraft/class_2338; field_25901 field_243518_c - f I field_25908 field_243525_j - f I field_25905 field_243522_g - f I field_25906 field_243523_h - f I field_25902 field_243519_d - f Lnet/minecraft/class_2350; field_25900 field_243517_b - f Lnet/minecraft/class_2350; field_25899 field_243516_a - f Lnet/minecraft/class_2338$class_2339; field_25904 field_243521_f -c net/minecraft/class_2338$5 net/minecraft/util/math/BlockPos$5 - f [I field_23955 field_243530_b - f [I field_11006 field_243529_a -c net/minecraft/class_2338$1 net/minecraft/util/math/BlockPos$1 - m ()Lnet/minecraft/class_2338; method_27157 computeNext - m ()Ljava/lang/Object; computeNext computeNext - f I field_23954 field_239596_j_ - f Ljava/util/Random; field_23949 field_239593_e_ - f Lnet/minecraft/class_2338$class_2339; field_23945 pos - f I field_23950 field_239594_f_ - f I field_23952 field_239595_h_ - f I field_23946 remainingAmount - f I field_23951 field_191539_b - f I field_23948 field_191538_a - f I field_23953 field_191540_c - f I field_23947 field_239592_c_ -c net/minecraft/class_2342 net/minecraft/dispenser/IBlockSource - m ()Lnet/minecraft/class_2338; method_10122 getBlockPos - m ()Lnet/minecraft/class_2586; method_10121 getBlockTileEntity - m ()Lnet/minecraft/class_2680; method_10120 getBlockState - m ()Lnet/minecraft/class_3218; method_10207 getWorld -c net/minecraft/class_2345 net/minecraft/dispenser/ProxyBlockSource - f Lnet/minecraft/class_3218; field_11011 world - f Lnet/minecraft/class_2338; field_11012 pos -c net/minecraft/class_3980 net/minecraft/util/math/CubeCoordinateIterator - m ()I method_18673 getZ - m ()I method_18672 getY - m ()I method_18671 getX - m ()Z method_17963 hasNext - m ()I method_20789 numBoundariesTouched - f I field_23113 currentAmount - f I field_23112 totalAmount - f I field_17688 zWidth - f I field_18235 z - f I field_18234 y - f I field_18233 x - f I field_17685 startZ - f I field_17684 startY - f I field_17683 startX - f I field_17687 yHeight - f I field_17686 xWidth -c net/minecraft/class_2348 net/minecraft/util/registry/DefaultedRegistry - m ()Lnet/minecraft/class_2960; method_10137 getDefaultKey - f Lnet/minecraft/class_2960; field_11014 defaultValueKey - f Ljava/lang/Object; field_11015 defaultValue -c net/minecraft/class_2350 net/minecraft/util/Direction - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_10149 func_199787_d - m ()Lnet/minecraft/class_2350$class_2352; method_10171 getAxisDirection - m ()I method_10164 getYOffset - m (Lnet/minecraft/class_2350$class_2352;Lnet/minecraft/class_2350$class_2351;)Lnet/minecraft/class_2350; method_10156 getFacingFromAxis - m ()[Lnet/minecraft/class_2350; values values - m (I)Lnet/minecraft/class_2350; method_10139 byHorizontalIndex - m ()Lnet/minecraft/class_2382; method_10163 getDirectionVec - m ()Lnet/minecraft/class_2350; method_10153 getOpposite - m (I)[Lnet/minecraft/class_2350; method_10158 func_199791_c - m ()Lnet/minecraft/class_2350; method_10160 rotateYCCW - m (F)Z method_30928 hasOrientation - m (Lnet/minecraft/class_2350;)I method_10141 func_199789_a - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)[Lnet/minecraft/class_2350; method_10145 compose - m (Lnet/minecraft/class_2350;)I method_10140 func_199790_c - m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_2350$class_2352;)Lnet/minecraft/class_2350; method_10169 getFacingFromAxisDirection - m ()I method_10161 getHorizontalIndex - m ()Lnet/minecraft/class_1160; method_23955 toVector3f - m ()I method_10148 getXOffset - m (Ljava/util/Random;)Lnet/minecraft/class_2350; method_10162 getRandomDirection - m (Lnet/minecraft/class_2350;)Ljava/lang/Long; method_16366 func_218385_b - m (I)Lnet/minecraft/class_2350; method_10143 byIndex - m (Ljava/lang/String;)Lnet/minecraft/class_2350; valueOf valueOf - m ()Ljava/lang/String; toString toString - m ()I method_10165 getZOffset - m ()Lnet/minecraft/class_1158; method_23224 getRotation - m ()Lnet/minecraft/class_2350$class_2351; method_10166 getAxis - m ()F method_10144 getHorizontalAngle - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_16367 func_218384_a - m (DDD)Lnet/minecraft/class_2350; method_10142 getFacingFromVector - m ()Ljava/lang/String; method_10151 getName2 - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_16364 func_218386_a - m (Lnet/minecraft/class_1297;)[Lnet/minecraft/class_2350; method_10159 getFacingDirections - m (III)Lnet/minecraft/class_2350; method_16365 byLong - m ()Lnet/minecraft/class_2350; method_10170 rotateY - m (Lnet/minecraft/class_2350;)Z method_10155 func_199786_b - m (Lnet/minecraft/class_1159;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_23225 rotateFace - m (Ljava/lang/String;)Lnet/minecraft/class_2350; method_10168 byName - m (FFF)Lnet/minecraft/class_2350; method_10147 getFacingFromVector - m ()I method_10146 getIndex - m (D)Lnet/minecraft/class_2350; method_10150 fromAngle - m (I)[Lnet/minecraft/class_2350; method_10157 func_199788_d - f Lnet/minecraft/class_2350; field_11033 DOWN - f Lnet/minecraft/class_2382; field_11042 directionVec - f [Lnet/minecraft/class_2350; field_11037 $VALUES - f Lnet/minecraft/class_2350; field_11039 WEST - f [Lnet/minecraft/class_2350; field_11041 BY_HORIZONTAL_INDEX - f Lnet/minecraft/class_2350; field_11043 NORTH - f Lnet/minecraft/class_2350$class_2352; field_11044 axisDirection - f I field_11032 index - f I field_11030 horizontalIndex - f [Lnet/minecraft/class_2350; field_11040 VALUES - f Lnet/minecraft/class_2350; field_11034 EAST - f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_16542 BY_LONG - f [Lnet/minecraft/class_2350; field_11038 BY_INDEX - f Lnet/minecraft/class_2350; field_11036 UP - f Lnet/minecraft/class_2350; field_11035 SOUTH - f Lnet/minecraft/class_2350$class_2351; field_11047 axis - f Ljava/util/Map; field_11045 NAME_LOOKUP - f Ljava/lang/String; field_11046 name - f I field_11031 opposite -c net/minecraft/class_2350$class_2351 net/minecraft/util/Direction$Axis - m (DDD)D method_10172 getCoordinate - m (III)I method_10173 getCoordinate - m ()Lnet/minecraft/class_2350$class_2353; method_10180 getPlane - m (Ljava/lang/String;)Lnet/minecraft/class_2350$class_2351; method_10177 byName - m (Lnet/minecraft/class_2350$class_2351;)Lnet/minecraft/class_2350$class_2351; method_10175 func_199785_a - m ()Ljava/lang/String; toString toString - m ()Ljava/lang/String; method_10174 getName2 - m (Ljava/lang/Object;)Z test test - m ()[Lnet/minecraft/class_2350$class_2351; values values - m (Ljava/util/Random;)Lnet/minecraft/class_2350$class_2351; method_16699 getRandomAxis - m ()Z method_10178 isVertical - m (Lnet/minecraft/class_2350;)Z method_10176 test - m (Ljava/lang/String;)Lnet/minecraft/class_2350$class_2351; valueOf valueOf - m ()Z method_10179 isHorizontal - f Ljava/util/Map; field_11050 NAME_LOOKUP - f Lnet/minecraft/class_2350$class_2351; field_11051 Z - f Lnet/minecraft/class_2350$class_2351; field_11052 Y - f Lcom/mojang/serialization/Codec; field_25065 CODEC - f [Lnet/minecraft/class_2350$class_2351; field_23780 VALUES - f Lnet/minecraft/class_2350$class_2351; field_11048 X - f [Lnet/minecraft/class_2350$class_2351; field_11049 $VALUES - f Ljava/lang/String; field_11053 name -c net/minecraft/class_2350$class_2351$3 net/minecraft/util/Direction$Axis$3 -c net/minecraft/class_2350$class_2351$1 net/minecraft/util/Direction$Axis$1 -c net/minecraft/class_2350$class_2351$2 net/minecraft/util/Direction$Axis$2 -c net/minecraft/class_2350$class_2352 net/minecraft/util/Direction$AxisDirection - m (Ljava/lang/String;)Lnet/minecraft/class_2350$class_2352; valueOf valueOf - m ()Lnet/minecraft/class_2350$class_2352; method_26424 inverted - m ()Ljava/lang/String; toString toString - m ()I method_10181 getOffset - m ()[Lnet/minecraft/class_2350$class_2352; values values - f [Lnet/minecraft/class_2350$class_2352; field_11058 $VALUES - f Ljava/lang/String; field_11057 description - f I field_11059 offset - f Lnet/minecraft/class_2350$class_2352; field_11056 POSITIVE - f Lnet/minecraft/class_2350$class_2352; field_11060 NEGATIVE -c net/minecraft/class_2350$class_2353 net/minecraft/util/Direction$Plane - m ()Ljava/util/Iterator; iterator iterator - m ()Ljava/util/stream/Stream; method_29716 getDirectionValues - m ()[Lnet/minecraft/class_2350$class_2353; values values - m (Ljava/lang/Object;)Z test test - m (Ljava/lang/String;)Lnet/minecraft/class_2350$class_2353; valueOf valueOf - m (Ljava/util/Random;)Lnet/minecraft/class_2350; method_10183 random - m (Lnet/minecraft/class_2350;)Z method_10182 test - f [Lnet/minecraft/class_2350; field_11061 facingValues - f Lnet/minecraft/class_2350$class_2353; field_11064 VERTICAL - f [Lnet/minecraft/class_2350$class_2351; field_11065 axisValues - f [Lnet/minecraft/class_2350$class_2353; field_11063 $VALUES - f Lnet/minecraft/class_2350$class_2353; field_11062 HORIZONTAL -c net/minecraft/class_2350$1 net/minecraft/util/Direction$1 - f [I field_11054 field_179513_b - f [I field_11055 field_179515_a -c net/minecraft/class_2355 net/minecraft/util/Direction8 - m ()Ljava/util/Set; method_10186 getDirections - m (Ljava/lang/String;)Lnet/minecraft/class_2355; valueOf valueOf - m ()[Lnet/minecraft/class_2355; values values - f Lnet/minecraft/class_2355; field_11076 NORTH_WEST - f I field_11084 W_DIR_MASK - f I field_11067 NW_DIR_MASK - f Ljava/util/Set; field_11078 directions - f I field_11082 S_DIR_MASK - f Lnet/minecraft/class_2355; field_11073 SOUTH - f I field_11083 SW_DIR_MASK - f Lnet/minecraft/class_2355; field_11072 WEST - f Lnet/minecraft/class_2355; field_11068 SOUTH_WEST - f [Lnet/minecraft/class_2355; field_11071 $VALUES - f I field_11079 NE_DIR_MASK - f Lnet/minecraft/class_2355; field_11075 EAST - f Lnet/minecraft/class_2355; field_11074 NORTH_EAST - f Lnet/minecraft/class_2355; field_11070 SOUTH_EAST - f I field_11080 E_DIR_MASK - f I field_11081 SE_DIR_MASK - f I field_11077 N_DIR_MASK - f Lnet/minecraft/class_2355; field_11069 NORTH -c net/minecraft/class_5000 net/minecraft/world/gen/feature/jigsaw/JigsawOrientation - m ()[Lnet/minecraft/class_5000; values values - m ()Lnet/minecraft/class_2350; method_26426 func_239642_b_ - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Lnet/minecraft/class_5000; method_26425 func_239641_a_ - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)I method_26427 func_239643_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_5000; valueOf valueOf - m ()Lnet/minecraft/class_2350; method_26428 func_239644_c_ - f Lnet/minecraft/class_2350; field_23395 field_239639_o_ - f Lnet/minecraft/class_5000; field_23385 UP_EAST - f [Lnet/minecraft/class_5000; field_23397 $VALUES - f Lnet/minecraft/class_5000; field_23387 UP_SOUTH - f Lnet/minecraft/class_2350; field_23396 field_239640_p_ - f Lnet/minecraft/class_5000; field_23386 UP_NORTH - f Lnet/minecraft/class_5000; field_23383 DOWN_SOUTH - f Lnet/minecraft/class_5000; field_23382 DOWN_NORTH - f Lnet/minecraft/class_5000; field_23384 DOWN_WEST - f Lnet/minecraft/class_5000; field_23391 NORTH_UP - f Lnet/minecraft/class_5000; field_23390 EAST_UP - f Lnet/minecraft/class_5000; field_23392 SOUTH_UP - f Lnet/minecraft/class_5000; field_23381 DOWN_EAST - f Lnet/minecraft/class_5000; field_23388 UP_WEST - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_23393 field_239637_m_ - f Ljava/lang/String; field_23394 field_239638_n_ - f Lnet/minecraft/class_5000; field_23389 WEST_UP -c net/minecraft/class_4208 net/minecraft/util/math/GlobalPos - m ()I hashCode hashCode - m ()Ljava/lang/String; toString toString - m ()Lnet/minecraft/class_5321; method_19442 getDimension - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2338;)Lnet/minecraft/class_4208; method_19443 getPosition - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_29096 func_239647_a_ - m ()Lnet/minecraft/class_2338; method_19446 getPos - m (Ljava/lang/Object;)Z equals equals - f Lnet/minecraft/class_2338; field_18791 pos - f Lcom/mojang/serialization/Codec; field_25066 CODEC - f Lnet/minecraft/class_5321; field_18790 dimension -c net/minecraft/class_2359 net/minecraft/util/IObjectIntIterable - m (Ljava/lang/Object;)I method_10206 getId - m (I)Ljava/lang/Object; method_10200 getByValue -c net/minecraft/class_2361 net/minecraft/util/ObjectIntIdentityMap - m ()Ljava/util/Iterator; iterator iterator - m ()I method_10204 size - m (Ljava/lang/Object;I)V method_10203 put - m (Ljava/lang/Object;)V method_10205 add - f Ljava/util/List; field_11098 objectList - f I field_11099 nextId - f Ljava/util/IdentityHashMap; field_11100 identityMap -c net/minecraft/class_2370 net/minecraft/util/registry/SimpleRegistry - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/MapCodec;)Lcom/mojang/serialization/MapCodec; method_30929 getRegistryEntryCodec - m (ILnet/minecraft/class_5321;Ljava/lang/Object;Lcom/mojang/serialization/Lifecycle;Z)Ljava/lang/Object; method_31051 register - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Ljava/util/Map;)Lnet/minecraft/class_2370; method_29720 func_239656_a_ - m (Lnet/minecraft/class_2370;)Ljava/util/Map; method_31053 func_239651_a_ - m (Lnet/minecraft/class_2370$class_5501;)Ljava/lang/Object; method_31052 func_243538_a - m (Lnet/minecraft/class_2370;)Ljava/util/List; method_31057 func_243544_b - m (Lnet/minecraft/class_2370$class_5501;)Lnet/minecraft/class_5321; method_31058 func_243545_c - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/MapCodec;Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_31055 func_243542_a - m ()Ljava/util/Iterator; iterator iterator - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Ljava/util/List;)Lnet/minecraft/class_2370; method_31054 func_243540_a - m (Lnet/minecraft/class_2370;Lcom/mojang/serialization/Lifecycle;Lnet/minecraft/class_5321;Ljava/lang/Object;)V method_31137 func_239653_a_ - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_29721 getSimpleRegistryCodec - m (Lnet/minecraft/class_2370$class_5501;)Ljava/lang/Integer; method_31056 func_243543_b - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_29098 createSimpleRegistryCodec - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_31059 getUnboundedRegistryCodec - m (Ljava/util/Random;)Ljava/lang/Object; method_10240 getRandom - f [Ljava/lang/Object; field_11108 values - f I field_11109 nextFreeId - f Lcom/google/common/collect/BiMap; field_11107 registryObjects - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_26683 entryIndexMap - f Ljava/util/Map; field_26731 objectToLifecycleMap - f Lit/unimi/dsi/fastutil/objects/ObjectList; field_26682 entryList - f Lcom/google/common/collect/BiMap; field_25067 keyToObjectMap - f Lcom/mojang/serialization/Lifecycle; field_26732 lifecycle - f Lorg/apache/logging/log4j/Logger; field_11111 LOGGER0 -c net/minecraft/class_2370$class_5501 net/minecraft/util/registry/SimpleRegistry$Entry - f Lnet/minecraft/class_5321; field_26684 name - f Ljava/lang/Object; field_26686 value - f I field_26685 index -c net/minecraft/class_2371 net/minecraft/util/NonNullList - m (I)Ljava/lang/Object; remove remove - m (ILjava/lang/Object;)Lnet/minecraft/class_2371; method_10213 withSize - m (ILjava/lang/Object;)Ljava/lang/Object; set set - m ()V clear clear - m ()Lnet/minecraft/class_2371; method_10211 create - m (I)Ljava/lang/Object; get get - m (Ljava/lang/Object;[Ljava/lang/Object;)Lnet/minecraft/class_2371; method_10212 from - m ()I size size - m (ILjava/lang/Object;)V add add - f Ljava/lang/Object; field_11116 defaultElement - f Ljava/util/List; field_11115 delegate -c net/minecraft/class_2374 net/minecraft/dispenser/IPosition - m ()D method_10214 getY - m ()D method_10216 getX - m ()D method_10215 getZ -c net/minecraft/class_2376 net/minecraft/dispenser/Position - f D field_11117 z - f D field_11118 y - f D field_11119 x -c net/minecraft/class_2378 net/minecraft/util/registry/Registry - m (Lnet/minecraft/class_2960;)Z method_10250 containsKey - m ()Lnet/minecraft/class_4663; method_23628 func_243582_k - m ()Lnet/minecraft/class_4149; method_19451 func_243556_A - m ()Lnet/minecraft/class_3414; method_10233 func_218335_L - m ()Lnet/minecraft/class_4648; method_23629 func_243584_m - m ()Lnet/minecraft/class_1299; method_10252 func_218332_G - m ()Lnet/minecraft/class_3611; method_10248 func_218338_K - m (Ljava/lang/Object;)Lcom/mojang/serialization/Lifecycle; method_31139 getLifecycleByRegistry - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Ljava/util/function/Supplier;)Lnet/minecraft/class_2378; method_29108 register - m ()Lnet/minecraft/class_5342; method_29396 func_243593_v - m ()Lnet/minecraft/class_1535; method_10246 func_243570_O - m (Lnet/minecraft/class_2378;ILjava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; method_10231 register - m (Lnet/minecraft/class_2378;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; method_10226 register - m ()Lnet/minecraft/class_2248; method_10237 func_218344_I - m (Lnet/minecraft/class_5321;)Ljava/lang/Object; method_31140 getOrThrow - m (Lnet/minecraft/class_5321;Ljava/util/function/Supplier;)Lnet/minecraft/class_2378; method_10247 createRegistry - m ()Ljava/util/Set; method_10235 keySet - m (Ljava/lang/Number;)Lcom/mojang/serialization/DataResult; method_29105 func_239740_a_ - m (Lnet/minecraft/class_2385;)V method_29103 validateMutableRegistry - m ()Lnet/minecraft/class_4630; method_23630 func_243585_n - m ()Lnet/minecraft/class_1291; method_10219 func_218347_J - m ()Lnet/minecraft/class_2396; method_10228 func_243572_Q - m (Ljava/lang/Object;)Ljava/util/Optional; method_29113 getOptionalKey - m (Lnet/minecraft/class_5321;Ljava/lang/String;Ljava/util/function/Supplier;)Lnet/minecraft/class_2348; method_10224 registerDefaulted - m ()Lnet/minecraft/class_3195; method_16545 func_243589_r - m (Lnet/minecraft/class_2960;)Ljava/util/Optional; method_17966 getOptional - m ()Lnet/minecraft/class_3956; method_17798 func_243564_I - m ()Lnet/minecraft/class_2591; method_10218 func_243571_P - m ()Lnet/minecraft/class_3852; method_17172 func_243559_D - m (Ljava/lang/String;)Lnet/minecraft/class_5321; method_29106 createKey - m ()Ljava/util/stream/Stream; method_10220 stream - m ()Lnet/minecraft/class_4158; method_19453 func_243558_C - m ()Lnet/minecraft/class_4170; method_19450 func_243597_z - m ()Lnet/minecraft/class_5339; method_29397 func_243594_w - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/stream/Stream; keys keys - m (Lnet/minecraft/class_5321;)Ljava/util/Optional; method_31189 getOptionalValue - m ()Lnet/minecraft/class_3523; method_10229 func_243592_u - m ()Lcom/mojang/serialization/Codec; method_29114 func_243579_h - m ()Lnet/minecraft/class_2960; method_10236 func_243569_N - m (Lnet/minecraft/class_2385;Lnet/minecraft/class_2385;)V method_29104 func_239739_a_ - m ()Lnet/minecraft/class_3917; method_17583 func_243565_J - m ()Lnet/minecraft/class_4652; method_23631 func_243586_o - m ()Lnet/minecraft/class_5338; method_29398 func_243595_x - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/serialization/DataResult; method_29100 func_239735_a_ - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2960;Ljava/lang/Object;)Ljava/lang/Object; method_10230 register - m (Lnet/minecraft/class_2960;Ljava/util/function/Supplier;)V method_29110 func_239747_a_ - m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; encode encode - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2385;Ljava/util/function/Supplier;Lcom/mojang/serialization/Lifecycle;)Lnet/minecraft/class_2385; method_10227 addRegistry - m ()Lnet/minecraft/class_5321; method_30517 getRegistryKey - m ()Lnet/minecraft/class_3773; method_16544 func_243588_q - m ()Lnet/minecraft/class_1887; method_10243 func_218354_H - m ()Lnet/minecraft/class_1320; method_27041 func_243562_G - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/datafixers/util/Pair; method_29101 func_239736_a_ - m (Lnet/minecraft/class_5321;Ljava/lang/String;Lcom/mojang/serialization/Lifecycle;Ljava/util/function/Supplier;)Lnet/minecraft/class_2348; method_29109 registerDefaulted - m ()Lnet/minecraft/class_1792; method_10234 func_218353_F - m ()Lcom/mojang/serialization/Lifecycle; method_31138 getLifecycle - m ()Lnet/minecraft/class_3827; method_16701 func_243567_L - m ()Lnet/minecraft/class_3448; method_20574 func_243561_F - m ()Lnet/minecraft/class_4140; method_19452 func_243557_B - m ()Lnet/minecraft/class_3284; method_10241 func_243587_p - m ()Lcom/mojang/serialization/Codec; method_29115 func_243580_i - m (Lnet/minecraft/class_2960;)Ljava/lang/Object; method_10223 getOrDefault - m ()Lnet/minecraft/class_3816; method_16702 func_243573_a - m ()Lnet/minecraft/class_4996; method_26429 func_243566_K - m (Ljava/lang/Object;)Lnet/minecraft/class_2960; method_10221 getKey - m ()Lnet/minecraft/class_2806; method_16543 func_243568_M - m (Lnet/minecraft/class_5321;)Ljava/lang/Object; method_29107 getValueForKey - m ()Lnet/minecraft/class_2939; method_10222 func_243591_t - m ()Lnet/minecraft/class_3854; method_17173 func_243560_E - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; decode decode - m ()Lnet/minecraft/class_3828; method_16700 func_243577_e - m ()Ljava/lang/String; toString toString - m ()Lnet/minecraft/class_1842; method_10245 func_218348_E - m ()Lnet/minecraft/class_4168; method_19449 func_243596_y - m ()Lnet/minecraft/class_5202; method_27652 func_243581_j - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_2960;)Ljava/lang/Object; method_29102 func_243574_a - m ()Lnet/minecraft/class_1865; method_17797 func_243563_H - m ()Lnet/minecraft/class_5142; method_27040 func_243583_l - m ()Lnet/minecraft/class_3031; method_10251 func_243590_s - m ()Ljava/util/Set; method_29722 getEntries - f Lnet/minecraft/class_5321; field_25115 BLOCK_STATE_PROVIDER_TYPE_KEY - f Lnet/minecraft/class_5321; field_25083 MENU_KEY - f Lnet/minecraft/class_5321; field_25915 CONFIGURED_STRUCTURE_FEATURE_KEY - f Lnet/minecraft/class_5321; field_25075 CUSTOM_STAT_KEY - f Lnet/minecraft/class_2378; field_18796 ACTIVITY - f Lnet/minecraft/class_5321; field_25078 STRUCTURE_PIECE_KEY - f Lnet/minecraft/class_5321; field_25295 LOOT_POOL_ENTRY_TYPE_KEY - f Lnet/minecraft/class_5321; field_25087 STAT_TYPE_KEY - f Ljava/util/Map; field_11140 LOCATION_TO_SUPPLIER - f Lnet/minecraft/class_2348; field_11146 BLOCK - f Lnet/minecraft/class_2348; field_17166 VILLAGER_TYPE - f Lnet/minecraft/class_5321; field_25068 TREE_DECORATOR_TYPE_KEY - f Lnet/minecraft/class_5321; field_25111 SURFACE_BUILDER_KEY - f Lnet/minecraft/class_5321; field_25298 WORLD_KEY - f Lnet/minecraft/class_2378; field_11159 EFFECTS - f Lnet/minecraft/class_2378; field_11152 STATS - f Lnet/minecraft/class_5321; field_25088 VILLAGER_TYPE_KEY - f Lnet/minecraft/class_5321; field_25106 ENCHANTMENT_KEY - f Lnet/minecraft/class_2348; field_18794 SENSOR_TYPE - f Lnet/minecraft/class_5321; field_25102 SOUND_EVENT_KEY - f Lnet/minecraft/class_5321; field_25081 STRUCTURE_PROCESSOR_KEY - f Lnet/minecraft/class_2378; field_17429 MENU - f Lnet/minecraft/class_2348; field_11143 POTION - f Lnet/minecraft/class_5321; field_25092 SENSOR_TYPE_KEY - f Lnet/minecraft/class_2378; field_21447 FOLIAGE_PLACER_TYPE - f Lnet/minecraft/class_5321; field_25070 PARTICLE_TYPE_KEY - f Lnet/minecraft/class_2378; field_25097 CHUNK_GENERATOR_CODEC - f Lnet/minecraft/class_2378; field_11147 SURFACE_BUILDER - f Lnet/minecraft/class_5321; field_25916 STRUCTURE_PROCESSOR_LIST_KEY - f Lnet/minecraft/class_2378; field_11138 FEATURE - f Lnet/minecraft/class_2378; field_25293 LOOT_POOL_ENTRY_TYPE - f Lnet/minecraft/class_5321; field_25912 CONFIGURED_SURFACE_BUILDER_KEY - f Lnet/minecraft/class_5321; field_25296 LOOT_FUNCTION_TYPE_KEY - f Lnet/minecraft/class_5321; field_25076 CHUNK_STATUS_KEY - f Lnet/minecraft/class_5321; field_25069 FEATURE_SIZE_TYPE_KEY - f Lnet/minecraft/class_2348; field_17167 VILLAGER_PROFESSION - f Lnet/minecraft/class_5321; field_25490 DIMENSION_KEY - f Lnet/minecraft/class_5321; field_25084 RECIPE_TYPE_KEY - f Lnet/minecraft/class_2378; field_16645 STRUCTURE_PIECE - f Lnet/minecraft/class_5321; field_25116 BLOCK_PLACER_TYPE_KEY - f Lcom/mojang/serialization/Lifecycle; field_25099 lifecycle - f Lnet/minecraft/class_5321; field_25110 CARVER_KEY - f Lnet/minecraft/class_5321; field_25082 STRUCTURE_POOL_ELEMENT_KEY - f Lnet/minecraft/class_2385; field_25101 ROOT_REGISTRY - f Lnet/minecraft/class_2378; field_17597 RECIPE_TYPE - f Lnet/minecraft/class_5321; field_25103 FLUID_KEY - f Lnet/minecraft/class_5321; field_25077 STRUCTURE_FEATURE_KEY - f Lnet/minecraft/class_5321; field_25093 SCHEDULE_KEY - f Lnet/minecraft/class_5321; field_25073 BLOCK_ENTITY_TYPE_KEY - f Lnet/minecraft/class_2348; field_16643 CHUNK_STATUS - f Lnet/minecraft/class_5321; field_25089 VILLAGER_PROFESSION_KEY - f Lnet/minecraft/class_5321; field_25107 ENTITY_TYPE_KEY - f Lnet/minecraft/class_2960; field_25100 ROOT - f Lnet/minecraft/class_5321; field_25297 LOOT_CONDITION_TYPE_KEY - f Lnet/minecraft/class_5321; field_25079 RULE_TEST_KEY - f Lnet/minecraft/class_2378; field_25294 LOOT_FUNCTION_TYPE - f Lnet/minecraft/class_5321; field_25113 DECORATOR_KEY - f Lnet/minecraft/class_5321; field_25913 CONFIGURED_CARVER_KEY - f Lnet/minecraft/class_2378; field_23782 TRUNK_REPLACER - f Lnet/minecraft/class_2378; field_16794 STRUCTURE_PROCESSOR - f Lnet/minecraft/class_2378; field_11158 CUSTOM_STAT - f Lnet/minecraft/class_5321; field_25071 BIOME_SOURCE_KEY - f Lnet/minecraft/class_2378; field_16792 RULE_TEST - f Lnet/minecraft/class_2348; field_11145 ENTITY_TYPE - f Lnet/minecraft/class_2348; field_11154 FLUID - f Lnet/minecraft/class_5321; field_25117 FOLIAGE_PLACER_TYPE_KEY - f Lnet/minecraft/class_5321; field_25085 RECIPE_SERIALIZER_KEY - f Lnet/minecraft/class_5321; field_25917 JIGSAW_POOL_KEY - f Lnet/minecraft/class_2378; field_17598 RECIPE_SERIALIZER - f Lnet/minecraft/class_5321; field_25104 MOB_EFFECT_KEY - f Lnet/minecraft/class_2348; field_18792 POINT_OF_INTEREST_TYPE - f Lnet/minecraft/class_2378; field_11156 SOUND_EVENT - f Lnet/minecraft/class_2378; field_18795 SCHEDULE - f Lnet/minecraft/class_5321; field_25074 MOTIVE_KEY - f Lnet/minecraft/class_2378; field_11141 PARTICLE_TYPE - f Lnet/minecraft/class_2378; field_21445 BLOCK_STATE_PROVIDER_TYPE - f Lnet/minecraft/class_5321; field_25108 ITEM_KEY - f Lnet/minecraft/class_2378; field_24331 FEATURE_SIZE_TYPE - f Lnet/minecraft/class_2378; field_11160 ENCHANTMENT - f Lnet/minecraft/class_5321; field_25090 POINT_OF_INTEREST_TYPE_KEY - f Lnet/minecraft/class_5321; field_25080 POS_RULE_TEST_KEY - f Lnet/minecraft/class_2378; field_16644 STRUCTURE_FEATURE - f Lorg/apache/logging/log4j/Logger; field_11139 LOGGER - f Lnet/minecraft/class_2378; field_25299 LOOT_CONDITION_TYPE - f Lnet/minecraft/class_5321; field_25914 CONFIGURED_FEATURE_KEY - f Lnet/minecraft/class_5321; field_25095 DIMENSION_TYPE_KEY - f Lnet/minecraft/class_5321; field_25094 ACTIVITY_KEY - f Lnet/minecraft/class_2378; field_21448 TREE_DECORATOR_TYPE - f Lnet/minecraft/class_2378; field_16793 STRUCTURE_POOL_ELEMENT - f Lnet/minecraft/class_2378; field_11157 CARVER - f Lnet/minecraft/class_2378; field_23398 POS_RULE_TEST - f Lnet/minecraft/class_2378; field_11148 DECORATOR - f Lnet/minecraft/class_5321; field_25118 TRUNK_PLACER_TYPE_KEY - f Lnet/minecraft/class_5321; field_25098 registryKey - f Lnet/minecraft/class_5321; field_25114 BIOME_KEY - f Lnet/minecraft/class_5321; field_25086 ATTRIBUTE_KEY - f Lnet/minecraft/class_5321; field_25105 BLOCK_KEY - f Lnet/minecraft/class_2378; field_11144 REGISTRY - f Lnet/minecraft/class_2378; field_23781 ATTRIBUTE - f Lnet/minecraft/class_2348; field_11150 MOTIVE - f Lnet/minecraft/class_2348; field_11142 ITEM - f Lnet/minecraft/class_5321; field_25072 CHUNK_GENERATOR_KEY - f Lnet/minecraft/class_2348; field_18793 MEMORY_MODULE_TYPE - f Lnet/minecraft/class_5321; field_26374 NOISE_SETTINGS_KEY - f Lnet/minecraft/class_2378; field_21446 BLOCK_PLACER_TYPE - f Lnet/minecraft/class_5321; field_25091 MEMORY_MODULE_TYPE_KEY - f Lnet/minecraft/class_2378; field_25096 BIOME_PROVIDER_CODEC - f Lnet/minecraft/class_2378; field_11137 BLOCK_ENTITY_TYPE - f Lnet/minecraft/class_5321; field_25112 FEATURE_KEY - f Lnet/minecraft/class_5321; field_25109 POTION_KEY -c net/minecraft/class_5455 net/minecraft/util/registry/DynamicRegistries - m (Lnet/minecraft/class_5321;)Ljava/lang/IllegalStateException; method_30534 func_243618_e - m (Lnet/minecraft/class_5321;)Ljava/util/Optional; method_30527 func_230521_a_ - m (Lnet/minecraft/class_5321;)Ljava/lang/IllegalStateException; method_30532 func_243614_c - m (Lnet/minecraft/class_2370;)Lnet/minecraft/class_2370; method_30522 func_243604_a - m (Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)V method_30520 put - m ()Lcom/google/common/collect/ImmutableMap; method_30531 func_243617_e - m (Lnet/minecraft/class_2378;)Ljava/lang/IllegalStateException; method_30523 func_243605_a - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_2378;)V method_30524 registerRegistry - m (Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;Lcom/mojang/serialization/Codec;)V method_31060 put - m ()Lnet/minecraft/class_5455$class_5457; method_30528 func_239770_b_ - m (Lnet/minecraft/class_5382;Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5455$class_5456;)V method_30526 loadRegistryData - m ()Lnet/minecraft/class_5455$class_5457; method_31143 func_243615_d - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5382;)V method_30519 loadRegistryData - m ()Ljava/util/Map; method_31142 func_243613_c - m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_2385; method_30530 getRegistry - m (Lcom/mojang/serialization/DataResult$PartialResult;)V method_30521 func_243603_a - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5321;)V method_30525 getWorldGenRegistry - m ()Lnet/minecraft/class_2378; method_30518 func_230520_a_ - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5382$class_5506$class_5507;Lnet/minecraft/class_5455$class_5456;)V method_31141 registerRegistry - m (Lnet/minecraft/class_5321;)Z method_30533 func_243616_d - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5321;)V method_30529 func_243611_b - f Lorg/apache/logging/log4j/Logger; field_25918 LOGGER - f Ljava/util/Map; field_25919 registryCodecMap - f Lnet/minecraft/class_5455$class_5457; field_26733 registries -c net/minecraft/class_5455$class_5456 net/minecraft/util/registry/DynamicRegistries$CodecHolder - m ()Lnet/minecraft/class_5321; method_30535 getRegistryKey - m ()Lcom/mojang/serialization/Codec; method_30536 getRegistryCodec - m ()Lcom/mojang/serialization/Codec; method_31061 getPacketCodec - m ()Z method_30537 hasPacketCodec - f Lnet/minecraft/class_5321; field_25920 registryKey - f Lcom/mojang/serialization/Codec; field_25921 registryCodec - f Lcom/mojang/serialization/Codec; field_26687 packetCodec -c net/minecraft/class_5455$class_5457 net/minecraft/util/registry/DynamicRegistries$Impl - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_30543 func_243633_a - m (Lcom/mojang/serialization/codecs/UnboundedMapCodec;)Lcom/mojang/serialization/Codec; method_30538 getSerializableCodec - m (Lnet/minecraft/class_5455$class_5456;)Lcom/mojang/serialization/Codec; method_30540 func_243630_a - m (Lnet/minecraft/class_2370;)Lnet/minecraft/class_2385; method_30539 func_243629_a - m (Lnet/minecraft/class_2370;)Lcom/mojang/serialization/DataResult; method_30544 func_243634_b - m (Lnet/minecraft/class_5321;)Lcom/mojang/serialization/DataResult; method_30547 serializeRegistry - m (Lnet/minecraft/class_5455$class_5457;)Ljava/util/Map; method_30545 func_243635_b - m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_2370; method_30548 createStableRegistry - m (Lnet/minecraft/class_5321;)Lcom/mojang/serialization/DataResult; method_30549 func_243639_e - m (Ljava/util/Map$Entry;)Z method_30542 func_243632_a - m (Lnet/minecraft/class_5321;)Lcom/mojang/serialization/DataResult; method_30550 func_243640_f - m (Lnet/minecraft/class_5455$class_5457;)Ljava/util/Map; method_30541 func_243631_a - m ()Lcom/mojang/serialization/Codec; method_30546 getCodec - f Lcom/mojang/serialization/Codec; field_25923 registryCodec - f Ljava/util/Map; field_25924 keyToSimpleRegistryMap -c net/minecraft/class_2379 net/minecraft/util/math/Rotations - m ()F method_10258 getZ - m ()F method_10257 getY - m (Ljava/lang/Object;)Z equals equals - m ()F method_10256 getX - m ()Lnet/minecraft/class_2499; method_10255 writeToNBT - f F field_11163 z - f F field_11164 y - f F field_11165 x -c net/minecraft/class_4076 net/minecraft/util/math/SectionPos - m ()Lnet/minecraft/class_1923; method_18692 asChunkPos - m (S)I method_30556 func_243646_f - m (Lnet/minecraft/class_1923;I)Ljava/util/stream/Stream; method_22446 func_229421_b_ - m ()Lnet/minecraft/class_2338; method_19768 getCenter - m (S)I method_30555 func_243645_e - m (III)Lnet/minecraft/class_4076; method_18676 of - m (S)I method_30554 func_243644_d - m (JIII)J method_18678 withOffset - m ()Lnet/minecraft/class_2338; method_19767 asBlockPos - m (III)J method_18685 asLong - m (J)Lnet/minecraft/class_4076; method_18677 from - m (I)I method_18688 toWorld - m (J)I method_18686 extractX - m (Lnet/minecraft/class_4076;I)Ljava/util/stream/Stream; method_20439 getAllInBox - m (Lnet/minecraft/class_2338;)S method_19454 toRelativeOffset - m (I)I method_18684 mask - m ()J method_18694 asLong - m (I)I method_18675 toChunk - m ()I method_18683 getSectionY - m (J)I method_18690 extractZ - m ()I method_18674 getSectionX - m (J)I method_18689 extractY - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_4076; method_18680 from - m ()I method_19527 getWorldStartX - m ()Ljava/util/stream/Stream; method_19533 allBlocksWithin - m (J)J method_18693 toSectionColumnPos - m (Lnet/minecraft/class_1923;I)Lnet/minecraft/class_4076; method_18681 from - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_4076; method_18682 from - m ()I method_18687 getSectionZ - m (J)J method_18691 worldToSection - m (S)I method_30551 func_243641_a - m (IIIIII)Ljava/util/stream/Stream; method_20438 getAllInBox - m ()I method_19530 getWorldEndX - m ()I method_19529 getWorldStartZ - m (S)Lnet/minecraft/class_2338; method_30557 func_243647_g - m ()I method_19528 getWorldStartY - m (S)I method_30553 func_243643_c - m ()I method_19532 getWorldEndZ - m (S)I method_30552 func_243642_b - m (JLnet/minecraft/class_2350;)J method_18679 withOffset - m ()I method_19531 getWorldEndY -c net/minecraft/class_4076$1 net/minecraft/util/math/SectionPos$1 - m (Ljava/util/function/Consumer;)Z tryAdvance tryAdvance - f Lnet/minecraft/class_3980; field_19263 field_218394_a - f I field_19266 field_218397_d - f I field_19264 field_218395_b - f I field_19265 field_218396_c - f I field_19268 field_218399_f - f I field_19269 field_218400_g - f I field_19267 field_218398_e -c net/minecraft/class_4844 net/minecraft/util/UUIDCodec - m (Ljava/util/UUID;)Ljava/util/stream/IntStream; method_29727 func_239780_b_ - m (Ljava/util/stream/IntStream;)Lcom/mojang/serialization/DataResult; method_29122 func_239778_a_ - m (JJ)[I method_26274 encodeBits - m ([I)Ljava/util/UUID; method_26276 decodeUUID - m (Ljava/util/UUID;)[I method_26275 encodeUUID - f Lcom/mojang/serialization/Codec; field_25122 CODEC -c net/minecraft/class_2382 net/minecraft/util/math/vector/Vector3i - m (Ljava/lang/Object;)I compareTo compareTo - m (I)Lnet/minecraft/class_2382; method_30930 up - m (Lnet/minecraft/class_2374;Z)D method_19770 distanceSq - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2350;I)Lnet/minecraft/class_2382; method_23226 offset - m (Lnet/minecraft/class_2350$class_2351;)I method_30558 func_243648_a - m (I)Lnet/minecraft/class_2382; method_23227 down - m ()Lnet/minecraft/class_2382; method_30931 up - m ()Lnet/minecraft/class_2382; method_23228 down - m (Ljava/util/stream/IntStream;)Lcom/mojang/serialization/DataResult; method_29125 func_239783_a_ - m (Lnet/minecraft/class_2382;)I method_19455 manhattanDistance - m (Ljava/lang/Object;)Z equals equals - m (DDDZ)D method_10268 distanceSq - m (Lnet/minecraft/class_2382;D)Z method_19771 withinDistance - m (I)V method_10099 setY - m (I)V method_20787 setX - m (Lnet/minecraft/class_2382;)D method_10262 distanceSq - m (Lnet/minecraft/class_2374;D)Z method_19769 withinDistance - m (Lnet/minecraft/class_2382;)I method_10265 compareTo - m (I)V method_20788 setZ - m ()I method_10264 getY - m (Lnet/minecraft/class_2382;)Ljava/util/stream/IntStream; method_29124 func_239782_a_ - m ()I method_10263 getX - m ([I)Lnet/minecraft/class_2382; method_29126 func_239784_a_ - m (Lnet/minecraft/class_2382;)Lnet/minecraft/class_2382; method_10259 crossProduct - m ()Ljava/lang/String; method_23854 getCoordinatesAsString - m ()I method_10260 getZ - m ()I hashCode hashCode - f Lnet/minecraft/class_2382; field_11176 NULL_VECTOR - f I field_11174 y - f I field_11175 x - f I field_11173 z - f Lcom/mojang/serialization/Codec; field_25123 CODEC -c net/minecraft/class_2385 net/minecraft/util/registry/MutableRegistry - m (Lnet/minecraft/class_5321;Ljava/lang/Object;Lcom/mojang/serialization/Lifecycle;)Ljava/lang/Object; method_10272 register - m (Ljava/util/OptionalInt;Lnet/minecraft/class_5321;Ljava/lang/Object;Lcom/mojang/serialization/Lifecycle;)Ljava/lang/Object; method_31062 validateAndRegister - m (ILnet/minecraft/class_5321;Ljava/lang/Object;Lcom/mojang/serialization/Lifecycle;)Ljava/lang/Object; method_10273 register -c net/minecraft/class_2965 net/minecraft/dispenser/ProjectileDispenseBehavior - m ()F method_12845 getProjectileInaccuracy - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2374;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1676; method_12844 getProjectileEntity - m ()F method_12846 getProjectileVelocity -c net/minecraft/class_2967 net/minecraft/dispenser/DispenseBoatBehavior - f Lnet/minecraft/class_1690$class_1692; field_13361 type - f Lnet/minecraft/class_2347; field_13360 dispenseItemBehaviour -c net/minecraft/class_2347 net/minecraft/dispenser/DefaultDispenseItemBehavior - m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_10135 dispenseStack - m (Lnet/minecraft/class_2342;Lnet/minecraft/class_2350;)V method_10133 spawnDispenseParticles - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;ILnet/minecraft/class_2350;Lnet/minecraft/class_2374;)V method_10134 doDispense - m (Lnet/minecraft/class_2342;)V method_10136 playDispenseSound -c net/minecraft/class_2357 net/minecraft/dispenser/IDispenseItemBehavior - m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1297;Lnet/minecraft/class_2350;)V method_27042 dispenseEntity - m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; dispense dispense - m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_16812 func_210297_lambda$static$0 - m ()V method_18346 init - f Lnet/minecraft/class_2357; field_16902 NOOP -c net/minecraft/class_2357$1 net/minecraft/dispenser/IDispenseItemBehavior$1 -c net/minecraft/class_2357$2 net/minecraft/dispenser/IDispenseItemBehavior$10 -c net/minecraft/class_2357$3 net/minecraft/dispenser/IDispenseItemBehavior$11 - m (Lnet/minecraft/class_1309;)Z method_27159 func_239789_a_ -c net/minecraft/class_2357$20 net/minecraft/dispenser/IDispenseItemBehavior$4 - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1681;)V method_17199 func_218408_a -c net/minecraft/class_2357$21 net/minecraft/dispenser/IDispenseItemBehavior$5 - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1680;)V method_17200 func_218409_a -c net/minecraft/class_2357$24 net/minecraft/dispenser/IDispenseItemBehavior$8 -c net/minecraft/class_2357$24$1 net/minecraft/dispenser/IDispenseItemBehavior$8$1 - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1686;)V method_17202 func_218413_a - f Lnet/minecraft/class_2357$24; field_13366 field_218414_b -c net/minecraft/class_2357$25 net/minecraft/dispenser/IDispenseItemBehavior$9 -c net/minecraft/class_2357$22 net/minecraft/dispenser/IDispenseItemBehavior$6 - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1683;)V method_17201 func_218410_a -c net/minecraft/class_2357$23 net/minecraft/dispenser/IDispenseItemBehavior$7 -c net/minecraft/class_2357$23$1 net/minecraft/dispenser/IDispenseItemBehavior$7$1 - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1686;)V method_17203 func_218411_a - f Lnet/minecraft/class_2357$23; field_13369 field_218412_b -c net/minecraft/class_2357$4 net/minecraft/dispenser/IDispenseItemBehavior$12 - m (Lnet/minecraft/class_1496;)Z method_27160 func_239790_a_ -c net/minecraft/class_2357$5 net/minecraft/dispenser/IDispenseItemBehavior$13 - m (Lnet/minecraft/class_1492;)Z method_27161 func_239791_a_ -c net/minecraft/class_2357$10 net/minecraft/dispenser/IDispenseItemBehavior$18 -c net/minecraft/class_2357$6 net/minecraft/dispenser/IDispenseItemBehavior$14 -c net/minecraft/class_2357$7 net/minecraft/dispenser/IDispenseItemBehavior$15 - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1677;)V method_17204 func_229425_a_ -c net/minecraft/class_2357$8 net/minecraft/dispenser/IDispenseItemBehavior$16 - f Lnet/minecraft/class_2347; field_13367 defaultBehaviour -c net/minecraft/class_2357$13 net/minecraft/dispenser/IDispenseItemBehavior$20 -c net/minecraft/class_2357$9 net/minecraft/dispenser/IDispenseItemBehavior$17 - f Lnet/minecraft/class_2347; field_13368 defaultBehaviour -c net/minecraft/class_2357$14 net/minecraft/dispenser/IDispenseItemBehavior$21 -c net/minecraft/class_2357$11 net/minecraft/dispenser/IDispenseItemBehavior$19 -c net/minecraft/class_2357$12 net/minecraft/dispenser/IDispenseItemBehavior$2 -c net/minecraft/class_2357$17 net/minecraft/dispenser/IDispenseItemBehavior$24 - m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_22141 glassBottleFill - m (Lnet/minecraft/class_4970$class_4971;)Z method_27900 func_239787_a_ - f Lnet/minecraft/class_2347; field_20533 defaultBehaviour -c net/minecraft/class_2357$18 net/minecraft/dispenser/IDispenseItemBehavior$25 -c net/minecraft/class_2357$15 net/minecraft/dispenser/IDispenseItemBehavior$22 -c net/minecraft/class_2357$16 net/minecraft/dispenser/IDispenseItemBehavior$23 -c net/minecraft/class_2357$19 net/minecraft/dispenser/IDispenseItemBehavior$3 -c net/minecraft/class_2969 net/minecraft/dispenser/OptionalDispenseBehavior - m (Z)V method_27955 setSuccessful - m ()Z method_27954 isSuccessful - f Z field_13364 successful -c net/minecraft/class_5168 net/minecraft/dispenser/BeehiveDispenseBehavior - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_27163 shear - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_27162 shearComb -c net/minecraft/class_2970 net/minecraft/dispenser/ShulkerBoxDispenseBehavior -c net/minecraft/class_2388 net/minecraft/particles/BlockParticleData - m ()Lnet/minecraft/class_2680; method_10278 getBlockState - m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2680;)Lnet/minecraft/class_2388; method_29129 func_239801_a_ - m (Lnet/minecraft/class_2396;)Lcom/mojang/serialization/Codec; method_29128 func_239800_a_ - m (Lnet/minecraft/class_2388;)Lnet/minecraft/class_2680; method_29127 func_239799_a_ - f Lnet/minecraft/class_2394$class_2395; field_11181 DESERIALIZER - f Lnet/minecraft/class_2396; field_11183 particleType - f Lnet/minecraft/class_2680; field_11182 blockState -c net/minecraft/class_2388$1 net/minecraft/particles/BlockParticleData$1 - m (Lnet/minecraft/class_2396;Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2388; method_10279 deserialize - m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2540;)Lnet/minecraft/class_2388; method_10280 read -c net/minecraft/class_2390 net/minecraft/particles/RedstoneParticleData - m (Lnet/minecraft/class_2390;)Ljava/lang/Float; method_29133 func_239806_c_ - m (Lnet/minecraft/class_2390;)Ljava/lang/Float; method_29132 func_239805_b_ - m (Lnet/minecraft/class_2390;)Ljava/lang/Float; method_29131 func_239804_a_ - m ()F method_10284 getBlue - m ()F method_10283 getAlpha - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_29130 func_239803_a_ - m ()F method_10285 getRed - m ()F method_10286 getGreen - m (Lnet/minecraft/class_2390;)Ljava/lang/Float; method_29134 func_239807_d_ - f F field_11187 red - f Lnet/minecraft/class_2390; field_11188 REDSTONE_DUST - f F field_11186 green - f F field_11185 blue - f Lnet/minecraft/class_2394$class_2395; field_11189 DESERIALIZER - f Lcom/mojang/serialization/Codec; field_25124 field_239802_b_ - f F field_11184 alpha -c net/minecraft/class_2390$1 net/minecraft/particles/RedstoneParticleData$1 - m (Lnet/minecraft/class_2396;Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2390; method_10287 deserialize - m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2540;)Lnet/minecraft/class_2390; method_10288 read -c net/minecraft/class_2392 net/minecraft/particles/ItemParticleData - m (Lnet/minecraft/class_2396;)Lcom/mojang/serialization/Codec; method_29136 func_239809_a_ - m ()Lnet/minecraft/class_1799; method_10289 getItemStack - m (Lnet/minecraft/class_2396;Lnet/minecraft/class_1799;)Lnet/minecraft/class_2392; method_29137 func_239810_a_ - m (Lnet/minecraft/class_2392;)Lnet/minecraft/class_1799; method_29135 func_239808_a_ - f Lnet/minecraft/class_1799; field_11192 itemStack - f Lnet/minecraft/class_2394$class_2395; field_11191 DESERIALIZER - f Lnet/minecraft/class_2396; field_11193 particleType -c net/minecraft/class_2392$1 net/minecraft/particles/ItemParticleData$1 - m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2540;)Lnet/minecraft/class_2392; method_10291 read - m (Lnet/minecraft/class_2396;Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2392; method_10290 deserialize -c net/minecraft/class_2394 net/minecraft/particles/IParticleData - m ()Ljava/lang/String; method_10293 getParameters - m ()Lnet/minecraft/class_2396; method_10295 getType - m (Lnet/minecraft/class_2540;)V method_10294 write -c net/minecraft/class_2394$class_2395 net/minecraft/particles/IParticleData$IDeserializer - m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2540;)Lnet/minecraft/class_2394; method_10297 read - m (Lnet/minecraft/class_2396;Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2394; method_10296 deserialize -c net/minecraft/class_2396 net/minecraft/particles/ParticleType - m ()Lcom/mojang/serialization/Codec; method_29138 func_230522_e_ - m ()Z method_10299 getAlwaysShow - m ()Lnet/minecraft/class_2394$class_2395; method_10298 getDeserializer - f Z field_11196 alwaysShow - f Lnet/minecraft/class_2394$class_2395; field_11197 deserializer -c net/minecraft/class_2398 net/minecraft/particles/ParticleTypes - m (Ljava/lang/String;Lnet/minecraft/class_2394$class_2395;Ljava/util/function/Function;)Lnet/minecraft/class_2396; method_10304 register - m (Ljava/lang/String;Z)Lnet/minecraft/class_2400; method_10303 register - m (Lnet/minecraft/class_2396;)Lcom/mojang/serialization/Codec; method_29139 func_239822_a_ - f Lcom/mojang/serialization/Codec; field_25125 CODEC - f Lnet/minecraft/class_2400; field_11236 EXPLOSION - f Lnet/minecraft/class_2400; field_11231 ANGRY_VILLAGER - f Lnet/minecraft/class_2400; field_11241 BUBBLE_POP - f Lnet/minecraft/class_2400; field_11226 ENTITY_EFFECT - f Lnet/minecraft/class_2400; field_11230 ITEM_SNOWBALL - f Lnet/minecraft/class_2400; field_11215 ENCHANT - f Lnet/minecraft/class_2400; field_11214 PORTAL - f Lnet/minecraft/class_2400; field_17431 CAMPFIRE_SIGNAL_SMOKE - f Lnet/minecraft/class_2400; field_11204 CLOUD - f Lnet/minecraft/class_2400; field_11222 DOLPHIN - f Lnet/minecraft/class_2400; field_11248 FIREWORK - f Lnet/minecraft/class_2400; field_11224 NOTE - f Lnet/minecraft/class_2400; field_11239 LAVA - f Lnet/minecraft/class_2400; field_11238 BUBBLE_COLUMN_UP - f Lnet/minecraft/class_2396; field_11206 FALLING_DUST - f Lnet/minecraft/class_2400; field_18305 LANDING_LAVA - f Lnet/minecraft/class_2400; field_11227 SWEEP_ATTACK - f Lnet/minecraft/class_2400; field_22246 SOUL_FIRE_FLAME - f Lnet/minecraft/class_2400; field_11228 SPIT - f Lnet/minecraft/class_2400; field_20537 FALLING_NECTAR - f Lnet/minecraft/class_2400; field_11223 DRIPPING_LAVA - f Lnet/minecraft/class_2400; field_20535 FALLING_HONEY - f Lnet/minecraft/class_2400; field_11209 DAMAGE_INDICATOR - f Lnet/minecraft/class_2400; field_11251 SMOKE - f Lnet/minecraft/class_2400; field_11208 ENCHANTED_HIT - f Lnet/minecraft/class_2400; field_22448 LANDING_OBSIDIAN_TEAR - f Lnet/minecraft/class_2396; field_11212 DUST - f Lnet/minecraft/class_2400; field_11245 EFFECT - f Lnet/minecraft/class_2400; field_17741 COMPOSTER - f Lnet/minecraft/class_2400; field_11210 UNDERWATER - f Lnet/minecraft/class_2400; field_22446 DRIPPING_OBSIDIAN_TEAR - f Lnet/minecraft/class_2400; field_17909 FLASH - f Lnet/minecraft/class_2400; field_18306 FALLING_WATER - f Lnet/minecraft/class_2400; field_22248 CRIMSON_SPORE - f Lnet/minecraft/class_2400; field_11243 CURRENT_DOWN - f Lnet/minecraft/class_2400; field_11225 AMBIENT_ENTITY_EFFECT - f Lnet/minecraft/class_2400; field_11237 LARGE_SMOKE - f Lnet/minecraft/class_2400; field_11249 WITCH - f Lnet/minecraft/class_2400; field_11221 EXPLOSION_EMITTER - f Lnet/minecraft/class_2400; field_11207 END_ROD - f Lnet/minecraft/class_2396; field_11218 ITEM - f Lnet/minecraft/class_2400; field_11246 ITEM_SLIME - f Lnet/minecraft/class_2400; field_23956 WHITE_ASH - f Lnet/minecraft/class_2400; field_11213 INSTANT_EFFECT - f Lnet/minecraft/class_2400; field_11205 CRIT - f Lnet/minecraft/class_2400; field_11242 RAIN - f Lnet/minecraft/class_2400; field_11247 BUBBLE - f Lnet/minecraft/class_2400; field_17430 CAMPFIRE_COSY_SMOKE - f Lnet/minecraft/class_2400; field_11203 POOF - f Lnet/minecraft/class_2400; field_11229 NAUTILUS - f Lnet/minecraft/class_2400; field_11244 FISHING - f Lnet/minecraft/class_2396; field_11217 BLOCK - f Lnet/minecraft/class_2400; field_11235 BARRIER - f Lnet/minecraft/class_2400; field_11219 MYCELIUM - f Lnet/minecraft/class_2400; field_11240 FLAME - f Lnet/minecraft/class_2400; field_22247 ASH - f Lnet/minecraft/class_2400; field_18304 FALLING_LAVA - f Lnet/minecraft/class_2400; field_11233 SQUID_INK - f Lnet/minecraft/class_2400; field_11216 DRAGON_BREATH - f Lnet/minecraft/class_2400; field_20536 LANDING_HONEY - f Lnet/minecraft/class_2400; field_11234 SNEEZE - f Lnet/minecraft/class_2400; field_20534 DRIPPING_HONEY - f Lnet/minecraft/class_2400; field_11250 ELDER_GUARDIAN - f Lnet/minecraft/class_2400; field_23190 REVERSE_PORTAL - f Lnet/minecraft/class_2400; field_11201 HEART - f Lnet/minecraft/class_2400; field_11211 HAPPY_VILLAGER - f Lnet/minecraft/class_2400; field_22447 FALLING_OBSIDIAN_TEAR - f Lnet/minecraft/class_2400; field_11202 SPLASH - f Lnet/minecraft/class_2400; field_11232 DRIPPING_WATER - f Lnet/minecraft/class_2400; field_22249 WARPED_SPORE - f Lnet/minecraft/class_2400; field_11220 TOTEM_OF_UNDYING - f Lnet/minecraft/class_2400; field_23114 SOUL -c net/minecraft/class_2398$1 net/minecraft/particles/ParticleTypes$1 - f Ljava/util/function/Function; field_25126 field_239824_a_ -c net/minecraft/class_2400 net/minecraft/particles/BasicParticleType - m ()Lnet/minecraft/class_2400; method_29140 getType - f Lnet/minecraft/class_2394$class_2395; field_11259 DESERIALIZER - f Lcom/mojang/serialization/Codec; field_25127 field_239825_b_ -c net/minecraft/class_2400$1 net/minecraft/particles/BasicParticleType$1 - m (Lnet/minecraft/class_2396;Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2400; method_10307 deserialize - m (Lnet/minecraft/class_2396;Lnet/minecraft/class_2540;)Lnet/minecraft/class_2400; method_10306 read -c net/minecraft/class_5458 net/minecraft/util/registry/WorldGenRegistries - m ()Lnet/minecraft/class_2922; method_30572 func_243673_f - m (Lnet/minecraft/class_2960;Ljava/util/function/Supplier;)V method_30566 func_243668_a - m ()Lnet/minecraft/class_3504; method_30573 func_243674_g - m ()Lnet/minecraft/class_2975; method_30571 func_243672_e - m ()Lnet/minecraft/class_5497; method_30569 func_243670_c - m ()V method_30559 init - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2385;Ljava/util/function/Supplier;Lcom/mojang/serialization/Lifecycle;)Lnet/minecraft/class_2385; method_30564 createRegistry - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_2960;Ljava/lang/Object;)Ljava/lang/Object; method_30562 register - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Ljava/util/function/Supplier;)Lnet/minecraft/class_2378; method_30563 createRegistry - m ()Lnet/minecraft/class_5312; method_30570 func_243671_d - m (Lnet/minecraft/class_2378;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; method_30561 register - m ()Lnet/minecraft/class_1959; method_30567 func_243669_b - m (Lnet/minecraft/class_2378;ILnet/minecraft/class_5321;Ljava/lang/Object;)Ljava/lang/Object; method_30560 register - m (Lnet/minecraft/class_5321;Ljava/util/function/Supplier;)Lnet/minecraft/class_2378; method_30565 createRegistry - f Lorg/apache/logging/log4j/Logger; field_25925 LOGGER - f Ljava/util/Map; field_25934 REGISTRY_NAME_TO_DEFAULT - f Lnet/minecraft/class_2378; field_25929 CONFIGURED_FEATURE - f Lnet/minecraft/class_2378; field_25927 CONFIGURED_SURFACE_BUILDER - f Lnet/minecraft/class_2378; field_25928 CONFIGURED_CARVER - f Lnet/minecraft/class_2378; field_25926 ROOT_REGISTRIES - f Lnet/minecraft/class_2385; field_25935 INTERNAL_ROOT_REGISTRIES - f Lnet/minecraft/class_2378; field_26375 NOISE_SETTINGS - f Lnet/minecraft/class_2378; field_25933 BIOME - f Lnet/minecraft/class_2378; field_25931 STRUCTURE_PROCESSOR_LIST - f Lnet/minecraft/class_2378; field_25932 JIGSAW_POOL - f Lnet/minecraft/class_2378; field_25930 CONFIGURED_STRUCTURE_FEATURE -c net/minecraft/class_2403 net/minecraft/data/DataGenerator - m ()Ljava/util/Collection; method_10312 getInputFolders - m ()Ljava/nio/file/Path; method_10313 getOutputFolder - m (Lnet/minecraft/class_2405;)V method_10314 addProvider - m ()V method_10315 run - f Ljava/util/List; field_11273 providers - f Ljava/nio/file/Path; field_11274 outputFolder - f Ljava/util/Collection; field_11272 inputFolders - f Lorg/apache/logging/log4j/Logger; field_11275 LOGGER -c net/minecraft/class_2405 net/minecraft/data/IDataProvider - m ()Ljava/lang/String; method_10321 getName - m (Lcom/google/gson/Gson;Lnet/minecraft/class_2408;Lcom/google/gson/JsonElement;Ljava/nio/file/Path;)V method_10320 save - m (Lnet/minecraft/class_2408;)V method_10319 act - f Lcom/google/common/hash/HashFunction; field_11280 HASH_FUNCTION -c net/minecraft/class_2408 net/minecraft/data/DirectoryCache - m (Ljava/nio/file/Path;)Ljava/lang/String; method_10323 getPreviousHash - m (Ljava/util/Map$Entry;)Ljava/lang/String; method_10329 func_208319_a - m ()V method_10331 deleteStale - m (Ljava/nio/file/Path;)Z method_10327 func_209397_c - m (Ljava/nio/file/Path;)V method_10332 func_208322_d - m (Ljava/nio/file/Path;Ljava/lang/String;)V method_10325 recordHash - m (Ljava/nio/file/Path;)V method_10322 func_209395_e - m ()Ljava/util/stream/Stream; method_10328 getFiles - m (Ljava/nio/file/Path;)V method_16674 addProtectedPath - m (Ljava/nio/file/Path;Ljava/lang/String;)V method_10324 func_208315_b - m (Ljava/nio/file/Path;)Z method_10330 isStale - m ()V method_10326 writeCache - f Lorg/apache/logging/log4j/Logger; field_11287 LOGGER - f I field_11284 hits - f Ljava/nio/file/Path; field_11285 outputFolder - f Ljava/util/Set; field_16743 protectedPaths - f Ljava/nio/file/Path; field_11286 cacheFile - f Ljava/util/Map; field_11282 staleFiles - f Ljava/util/Map; field_11283 createdFiles -c net/minecraft/class_2409 net/minecraft/data/AdvancementProvider - m (Ljava/util/Set;Ljava/nio/file/Path;Lnet/minecraft/class_2408;Lnet/minecraft/class_161;)V method_10333 func_204017_a - m (Ljava/nio/file/Path;Lnet/minecraft/class_161;)Ljava/nio/file/Path; method_10334 getPath - f Ljava/util/List; field_11289 advancements - f Lorg/apache/logging/log4j/Logger; field_11290 LOGGER - f Lcom/google/gson/Gson; field_11291 GSON - f Lnet/minecraft/class_2403; field_11288 generator -c net/minecraft/class_2412 net/minecraft/data/advancements/AdventureAdvancements - m (Ljava/lang/Object;)V accept accept - m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_10336 makeMobAdvancement - m (Lnet/minecraft/class_161$class_162;Ljava/util/List;)Lnet/minecraft/class_161$class_162; method_10337 makeBiomesAdvancement - m (Ljava/util/function/Consumer;)V method_10335 accept - f Ljava/util/List; field_11293 EXPLORATION_BIOMES - f [Lnet/minecraft/class_1299; field_11294 MOB_ENTITIES -c net/minecraft/class_2414 net/minecraft/data/advancements/HusbandryAdvancements - m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_16118 makeCompleteAdvancement - m (Lnet/minecraft/class_161$class_162;Ljava/lang/Integer;Lnet/minecraft/class_2960;)V method_16117 func_218461_a - m (Ljava/util/function/Consumer;)V method_10338 accept - m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_10339 makeFish - m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_10340 makeFishBucket - m (Ljava/lang/Object;)V accept accept - m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_10342 makeBredAllAnimals - m (Lnet/minecraft/class_161$class_162;)Lnet/minecraft/class_161$class_162; method_10341 makeBalancedDiet - f [Lnet/minecraft/class_1792; field_11298 BALANCED_DIET - f [Lnet/minecraft/class_1299; field_11296 BREEDABLE_ANIMALS - f [Lnet/minecraft/class_1792; field_11297 FISH_BUCKETS - f [Lnet/minecraft/class_1792; field_11295 FISH_ITEMS -c net/minecraft/class_2416 net/minecraft/data/advancements/NetherAdvancements - m (Ljava/lang/Object;)V accept accept - m (Ljava/util/function/Consumer;)V method_10346 accept - f Ljava/util/List; field_24614 BIOMES - f Lnet/minecraft/class_2048$class_5258; field_25712 DISTRACT_PIGLIN_PREDICATE -c net/minecraft/class_2417 net/minecraft/data/advancements/StoryAdvancements - m (Ljava/util/function/Consumer;)V method_10347 accept - m (Ljava/lang/Object;)V accept accept -c net/minecraft/class_2419 net/minecraft/data/advancements/EndAdvancements - m (Ljava/lang/Object;)V accept accept - m (Ljava/util/function/Consumer;)V method_10348 accept -c net/minecraft/class_2422 net/minecraft/data/BlockListReport - f Lnet/minecraft/class_2403; field_11307 generator - f Lcom/google/gson/Gson; field_17168 GSON -c net/minecraft/class_2425 net/minecraft/data/CommandsReport - f Lcom/google/gson/Gson; field_17169 GSON - f Lnet/minecraft/class_2403; field_11321 generator -c net/minecraft/class_2427 net/minecraft/data/RegistryDumpReport - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2960;)V method_17174 func_218431_a - m (Lnet/minecraft/class_2378;)Lcom/google/gson/JsonElement; method_17175 serialize - f Lnet/minecraft/class_2403; field_11323 generator - f Lcom/google/gson/Gson; field_17170 GSON -c net/minecraft/class_2430 net/minecraft/data/loot/BlockLootTables - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16266 func_229431_G - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;[F)Lnet/minecraft/class_52$class_53; method_10378 droppingWithChancesSticksAndApples - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16268 func_218549_ab - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_52$class_53; method_10380 droppingWithShears - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16298 func_218464_u - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16250 func_218548_F_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16312 func_218566_af - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16236 func_218533_q - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10372 onlyWithShears - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16327 func_218504_V - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_30157 func_241752_C - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10382 droppingWithSilkTouch - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16270 func_218470_aj - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16269 func_218539_az - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;)Lnet/minecraft/class_52$class_53; method_10377 droppingItemWithFortune - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16301 func_241751_m_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16875 func_218565_R - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16235 func_218555_an - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16311 func_218490_aD - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_22142 droppingAndBees - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16317 func_218500_N - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16300 func_218465_ar - m (Lnet/minecraft/class_2248;)V method_16262 registerSilkTouch - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_10383 droppingSlab - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16281 func_229434_J - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16233 func_218488_Y - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16260 func_218512_x - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16328 func_218502_av - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_52$class_53; method_10397 droppingWithSilkTouch - m ()Lnet/minecraft/class_52$class_53; method_10395 blockNoDrop - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_24817 registerDoor - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_26000 droppingNetherVines - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16280 func_218554_F - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16296 func_218537_ac - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16254 func_218571_t - m (Lnet/minecraft/class_1935;Lnet/minecraft/class_116;)Ljava/lang/Object; method_10393 withExplosionDecay - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1935;Lnet/minecraft/class_59;)Lnet/minecraft/class_52$class_53; method_10386 droppingWithSilkTouchOrRandomly - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16307 func_218487_E_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16316 func_218557_ag - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16282 func_218499_aw - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_17584 func_218469_p - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16234 func_218516_U - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16288 func_218550_B - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16263 func_218521_ak - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16275 func_218501_aA - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10389 droppingAndFlowerPot - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_30159 droppingSheared - m (Ljava/util/function/BiConsumer;)V method_10379 accept - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16247 func_218473_Q - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16322 func_218567_ao - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_30158 droppingSeedsTall - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16877 droppingWithPatterns - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16303 func_218506_M - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16313 func_218534_as - m (Lnet/minecraft/class_2248;)V method_16285 registerFlowerPot - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16292 func_218517_Z - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16279 func_218496_w - m (Lnet/minecraft/class_1935;Lnet/minecraft/class_59;)Lnet/minecraft/class_52$class_53; method_10384 droppingRandomly - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16243 func_229433_I - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16232 func_218472_ad - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16314 func_218553_s - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_52$class_53;)V method_16258 registerLootTable - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16290 func_218568_H_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16306 func_218545_ah - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_27165 func_229432_o - m (Ljava/lang/Object;)V accept accept - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16251 func_218505_ax - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16324 func_218525_E - m (Lnet/minecraft/class_2248;Ljava/util/function/Function;)V method_16293 registerLootTable - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16237 func_218478_T - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16255 func_218479_al - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_10371 droppingSeeds - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;)Lnet/minecraft/class_52$class_53; method_23229 dropSeedsForStem - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10373 onlyWithSilkTouch - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16283 func_218514_aB - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_23231 func_218531_A - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16284 func_218518_P - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16277 func_218556_ap - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16876 droppingWithContents - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16310 func_218497_W - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16249 func_218467_z - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16245 func_241172_L - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_5341$class_210;Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_52$class_53; method_10381 dropping - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_29399 func_239293_at - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_16238 registerSilkTouch - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16273 func_218569_aa - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Lnet/minecraft/class_52$class_53; method_10375 droppingWhen - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;[F)Lnet/minecraft/class_52$class_53; method_10390 droppingWithChancesAndSticks - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16242 func_218532_v - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16264 func_241170_H - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_79$class_80;)Lnet/minecraft/class_52$class_53; method_10388 droppingWithSilkTouchOrShears - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16326 func_218520_ae - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16321 func_218485_r - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_26277 func_218471_G_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16246 func_218536_ai - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_27164 func_218538_n_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1935;)V method_16256 registerDropping - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10385 droppingItemRarely - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16302 func_218462_ay - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16297 func_218572_D - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_17967 func_218551_S - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;)Lnet/minecraft/class_52$class_53; method_10387 droppingByAge - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10394 dropping - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16286 func_218543_am - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_22143 droppingAndBeesWithAlternative - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16252 func_218529_aC - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16325 func_218477_O - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;Lnet/minecraft/class_5341$class_210;)Lnet/minecraft/class_52$class_53; method_10391 droppingAndBonusWhen - m (Lnet/minecraft/class_1935;Lnet/minecraft/class_192;)Ljava/lang/Object; method_10392 withSurvivesExplosion - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16241 func_218558_aq - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_10396 droppingWithName - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16874 func_241171_K - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_16295 func_218503_X - m (Lnet/minecraft/class_2248;)V method_16329 registerDropSelfLootTable - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_23230 func_218509_y - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_52$class_53; method_29400 func_239296_au - f Lnet/minecraft/class_5341$class_210; field_11343 SHEARS - f Ljava/util/Map; field_16493 lootTables - f [F field_11339 DEFAULT_SAPLING_DROP_RATES - f Lnet/minecraft/class_5341$class_210; field_11337 NO_SILK_TOUCH - f Lnet/minecraft/class_5341$class_210; field_11341 NOT_SILK_TOUCH_OR_SHEARS - f Ljava/util/Set; field_11340 IMMUNE_TO_EXPLOSIONS - f Lnet/minecraft/class_5341$class_210; field_11336 SILK_TOUCH - f Lnet/minecraft/class_5341$class_210; field_11342 SILK_TOUCH_OR_SHEARS - f [F field_11338 RARE_SAPLING_DROP_RATES -c net/minecraft/class_2432 net/minecraft/data/loot/ChestLootTables - m (Ljava/lang/Object;)V accept accept - m (Ljava/util/function/BiConsumer;)V method_10399 accept -c net/minecraft/class_2434 net/minecraft/data/loot/EntityLootTables - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_52$class_53;)V method_16369 registerLootTable - m (Lnet/minecraft/class_2487;)V method_10402 func_218584_a - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_52$class_53; method_10401 sheepLootTableBuilderWithDrop - m (Ljava/util/function/BiConsumer;)V method_10400 accept - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_52$class_53;)V method_16368 registerLootTable - m (Ljava/lang/Object;)V accept accept - f Ljava/util/Map; field_16543 lootTables - f Ljava/util/Set; field_19339 NO_DROPS - f Lnet/minecraft/class_2048$class_2049; field_11344 ON_FIRE -c net/minecraft/class_2437 net/minecraft/data/loot/FishingLootTables - m (Ljava/lang/Object;)V accept accept - m (Ljava/util/function/BiConsumer;)V method_10405 accept - m (Lnet/minecraft/class_2487;)V method_10406 func_218588_a - f Lnet/minecraft/class_5341$class_210; field_11349 IN_BAMBOO_JUNGLE - f Lnet/minecraft/class_5341$class_210; field_11350 IN_JUNGLE_EDGE - f Lnet/minecraft/class_5341$class_210; field_11347 IN_JUNGLE_HILLS - f Lnet/minecraft/class_5341$class_210; field_11352 IN_BAMBOO_JUNGLE_HILLS - f Lnet/minecraft/class_5341$class_210; field_11346 IN_JUNGLE - f Lnet/minecraft/class_5341$class_210; field_11351 IN_MODIFIED_JUNGLE_EDGE - f Lnet/minecraft/class_5341$class_210; field_11348 IN_MODIFIED_JUNGLE -c net/minecraft/class_3714 net/minecraft/data/loot/GiftLootTables - m (Lnet/minecraft/class_2487;)V method_20191 func_218599_e - m (Lnet/minecraft/class_2487;)V method_20193 func_218601_g - m (Lnet/minecraft/class_2487;)V method_20192 func_218600_f - m (Lnet/minecraft/class_2487;)V method_20194 func_218607_h - m (Ljava/lang/Object;)V accept accept - m (Lnet/minecraft/class_2487;)V method_20195 func_218603_i - m (Lnet/minecraft/class_2487;)V method_20197 func_218608_k - m (Lnet/minecraft/class_2487;)V method_20196 func_218606_j - m (Lnet/minecraft/class_2487;)V method_20198 func_218597_l - m (Ljava/util/function/BiConsumer;)V method_20187 accept - m (Lnet/minecraft/class_2487;)V method_20186 func_218604_a - m (Lnet/minecraft/class_2487;)V method_20189 func_218605_c - m (Lnet/minecraft/class_2487;)V method_20199 func_218596_m - m (Lnet/minecraft/class_2487;)V method_20188 func_218602_b - m (Lnet/minecraft/class_2487;)V method_20190 func_218598_d -c net/minecraft/class_2438 net/minecraft/data/LootTableProvider - m (Ljava/lang/String;Ljava/lang/String;)V method_10407 func_229440_a_ - m (Ljava/nio/file/Path;Lnet/minecraft/class_2408;Lnet/minecraft/class_2960;Lnet/minecraft/class_52;)V method_10408 func_229441_a_ - m (Ljava/util/Map;Lcom/mojang/datafixers/util/Pair;Lnet/minecraft/class_2960;Lnet/minecraft/class_52$class_53;)V method_10412 func_218437_a - m (Ljava/nio/file/Path;Lnet/minecraft/class_2960;)Ljava/nio/file/Path; method_10409 getPath - m (Lnet/minecraft/class_58;Lnet/minecraft/class_2960;Lnet/minecraft/class_52;)V method_10411 func_229439_a_ - m (Ljava/util/Map;Lcom/mojang/datafixers/util/Pair;)V method_10410 func_218438_a - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5341; method_22825 func_229442_a_ - f Lnet/minecraft/class_2403; field_11353 dataGenerator - f Ljava/util/List; field_11354 field_218444_e - f Lcom/google/gson/Gson; field_11356 GSON - f Lorg/apache/logging/log4j/Logger; field_11355 LOGGER -c net/minecraft/class_4845 net/minecraft/loot/PiglinBarteringAddition - m (Lnet/minecraft/class_2487;)V method_24881 func_239832_a_ - m (Lnet/minecraft/class_2487;)V method_30577 func_243684_a - m (Lnet/minecraft/class_2487;)V method_24882 func_239833_b_ - m (Ljava/util/function/BiConsumer;)V method_24818 accept - m (Ljava/lang/Object;)V accept accept -c net/minecraft/class_4910 net/minecraft/data/BlockModelProvider - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)V method_25678 func_240011_j_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)V method_25660 func_239993_g_ - m ()V method_25513 func_239841_E_ - m (Lnet/minecraft/class_2248;)V method_25694 func_240027_p_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4914; method_25676 func_240009_j_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25651 func_239985_f_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25609 func_239943_b_ - m (Lnet/minecraft/class_2248;Ljava/lang/String;)V method_25556 func_239885_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;)V method_25621 func_239955_c_ - m ()Lnet/minecraft/class_4926; method_25630 func_239964_d_ - m ()V method_25699 func_240030_r_ - m (Lnet/minecraft/class_4944;)V method_25628 func_239962_c_ - m (Lnet/minecraft/class_5000;)Lnet/minecraft/class_4935; method_26432 func_239897_a_ - m ()V method_25597 func_239929_ag_ - m (I)Ljava/util/List; method_25535 func_239864_a_ - m ()V method_25712 func_240044_y_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25662 func_239995_g_ - m (Lnet/minecraft/class_2248;)V method_25671 func_240004_i_ - m (Lnet/minecraft/class_4944;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25575 func_239906_a_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25663 func_239996_g_ - m (Ljava/util/List;Ljava/util/function/UnaryOperator;)Ljava/util/List; method_25583 func_239914_a_ - m (Lnet/minecraft/class_2776;)Lnet/minecraft/class_4935; method_25567 func_239896_a_ - m (Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/util/List; method_25615 func_239949_b_ - m (Lnet/minecraft/class_2248;)V method_25540 func_239869_a_ - m (Lnet/minecraft/class_4910;Lnet/minecraft/class_2248;)V method_25570 func_239901_a_ - m (ILjava/lang/String;Lnet/minecraft/class_4944;)Lnet/minecraft/class_2960; method_25536 func_239865_a_ - m (Lnet/minecraft/class_2248;)V method_25708 func_240041_w_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;Lnet/minecraft/class_4944;)V method_25604 func_239938_b_ - m ()V method_25528 func_239856_T_ - m (Ljava/lang/String;I)Lnet/minecraft/class_4935; method_25582 func_239913_a_ - m ()V method_25591 func_239923_aa_ - m (Lnet/minecraft/class_4944;)Lnet/minecraft/class_2960; method_25638 func_239972_d_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4925; method_25559 func_239888_a_ - m ([Lnet/minecraft/class_2960;Ljava/lang/Integer;)Lnet/minecraft/class_4935; method_26278 func_239922_a_ - m ()V method_25512 func_239840_D_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25642 func_239976_e_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)V method_31063 func_243685_g - m ()Lnet/minecraft/class_4926; method_25640 func_239974_e_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;)V method_25542 func_239871_a_ - m ()V method_25520 func_239848_L_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;)V method_25603 func_239937_b_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25564 func_239893_a_ - m (Lnet/minecraft/class_4944;)V method_25612 func_239946_b_ - m ()V method_25697 func_240028_q_ - m (Lnet/minecraft/class_2248;)V method_25692 func_240025_o_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25635 func_239969_d_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25606 func_239940_b_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25655 func_239988_f_ - m ()V method_25596 func_239928_af_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4911; method_25585 func_239916_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;)V method_25652 func_239977_e_ - m ()V method_25534 func_239863_a_ - m (Lnet/minecraft/class_2248;)V method_25665 func_239998_h_ - m ()V method_25711 func_240042_x_ - m ()V method_25670 func_240003_i_ - m ([ILit/unimi/dsi/fastutil/ints/Int2ObjectMap;Lnet/minecraft/class_2248;Ljava/lang/Integer;)Lnet/minecraft/class_4935; method_25589 func_239920_a_ - m (Lnet/minecraft/class_2248;)V method_25706 func_240039_v_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25669 func_240002_h_ - m (Ljava/lang/Boolean;Ljava/lang/Boolean;)Lnet/minecraft/class_4935; method_25577 func_239908_a_ - m ()V method_25527 func_239855_S_ - m (Lnet/minecraft/class_2248;)V method_25698 func_240031_r_ - m ()V method_25590 func_239862_Z_ - m (Lnet/minecraft/class_4946$class_4947;[Lnet/minecraft/class_2248;)V method_25576 func_239907_a_ - m ()V method_25695 func_240026_p_ - m (Ljava/lang/Integer;Ljava/lang/Integer;)Lnet/minecraft/class_2960; method_25581 func_239912_a_ - m ()V method_25510 func_239838_B_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25563 func_239892_a_ - m ()V method_25519 func_239847_K_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25666 func_239999_h_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;Lnet/minecraft/class_4946$class_4947;)V method_25554 func_239883_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;)V method_25548 func_239877_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4944;Lnet/minecraft/class_4942;)V method_25551 func_239880_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25624 func_239958_c_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25544 func_239873_a_ - m (Lnet/minecraft/class_4910;Lnet/minecraft/class_1792;)V method_25569 func_239900_a_ - m ()V method_25709 func_240040_w_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4935; method_25616 func_239950_b_ - m ()V method_25595 func_239927_ae_ - m (Lnet/minecraft/class_2248;II)Lnet/minecraft/class_2960; method_25541 func_239870_a_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25647 func_239981_e_ - m ()Lnet/minecraft/class_4926; method_25649 func_239983_f_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;)V method_25586 func_239917_a_ - m ()V method_25526 func_239854_R_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;)V method_25605 func_239939_b_ - m ()V method_25664 func_239997_h_ - m (Lnet/minecraft/class_2248;)V method_25619 func_239953_c_ - m ()V method_25693 func_240024_o_ - m (Lnet/minecraft/class_4946$class_4947;[Lnet/minecraft/class_2248;)V method_25614 func_239948_b_ - m (Lnet/minecraft/class_2248;)V method_25696 func_240029_q_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;)V method_25561 func_239890_a_ - m (Ljava/lang/Integer;)Lnet/minecraft/class_4935; method_25579 func_239910_a_ - m ()V method_25509 func_239837_A_ - m ()V method_25533 func_239861_Y_ - m ()V method_25518 func_239846_J_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25659 func_239992_g_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4944;)V method_25550 func_239879_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25668 func_240001_h_ - m (Lnet/minecraft/class_4944;)Lnet/minecraft/class_4910$class_4912; method_25574 func_239905_a_ - m ()V method_25525 func_239853_Q_ - m (Lnet/minecraft/class_2248;Ljava/lang/String;Lnet/minecraft/class_4942;Ljava/util/function/Function;)Lnet/minecraft/class_2960; method_25557 func_239886_a_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;)V method_25617 func_239951_b_ - m ()V method_25594 func_239926_ad_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25656 func_239989_f_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;)V method_25622 func_239956_c_ - m (Lnet/minecraft/class_2248;)V method_25600 func_239934_b_ - m ()V method_25657 func_239990_g_ - m (Lnet/minecraft/class_2248;)V method_25710 func_240043_x_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25601 func_239935_b_ - m ()V method_25532 func_239860_X_ - m ()V method_25691 func_240022_n_ - m (Lnet/minecraft/class_2248;)V method_25685 func_240018_l_ - m (Lnet/minecraft/class_2960;Ljava/lang/Integer;)Lnet/minecraft/class_4935; method_25587 func_239918_a_ - m ()V method_25707 func_240038_v_ - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_2960;)V method_25538 func_239867_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25677 func_240010_j_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;)V method_25602 func_239936_b_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25607 func_239941_b_ - m ()V method_25517 func_239845_I_ - m ()V method_25524 func_239852_P_ - m (Lnet/minecraft/class_2746;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4926; method_25565 func_239894_a_ - m (Lnet/minecraft/class_2248;)V method_25641 func_239975_e_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25627 func_239961_c_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25625 func_239959_c_ - m ()V method_25593 func_239925_ac_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;)V method_25629 func_239963_c_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25673 func_240006_i_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_4935;)V method_25560 func_239889_a_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25683 func_240016_k_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4925; method_25644 func_239978_e_ - m (Lnet/minecraft/class_2960;)[Lnet/minecraft/class_4935; method_25584 func_239915_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25543 func_239872_a_ - m ([Lnet/minecraft/class_2248;)V method_27166 func_239921_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4911; method_25632 func_239966_d_ - m ()V method_25687 func_240020_m_ - m (Lnet/minecraft/class_2248;)V method_31064 func_239839_C_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)V method_25623 func_239957_c_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25650 func_239984_f_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25653 func_239986_f_ - m ()V method_25705 func_240036_u_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25608 func_239942_b_ - m (Lnet/minecraft/class_2248;)V method_25681 func_240014_k_ - m ()V method_25516 func_239844_H_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25672 func_240005_i_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25562 func_239891_a_ - m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4926; method_25566 func_239895_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;)V method_25545 func_239874_a_ - m (Lnet/minecraft/class_4944;)V method_25648 func_239982_e_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25637 func_239971_d_ - m (Lnet/minecraft/class_4926$class_4930;Lnet/minecraft/class_2756;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4926$class_4930; method_25572 func_239903_a_ - m (Lnet/minecraft/class_2248;)Ljava/util/List; method_25704 func_240037_u_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25667 func_240000_h_ - m ()V method_25523 func_239851_O_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;Ljava/util/function/BiFunction;)V method_25546 func_239875_a_ - m ()V method_25531 func_239859_W_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;)V method_25639 func_239973_d_ - m (Lnet/minecraft/class_2248;)V method_25631 func_239965_d_ - m ()V method_26434 func_239932_aj_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4925; method_25634 func_239968_d_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;)V method_25553 func_239882_a_ - m (Lnet/minecraft/class_1792;)V method_25537 func_239866_a_ - m ()V method_25515 func_239843_G_ - m ()V method_25684 func_240017_l_ - m (Ljava/lang/Integer;Ljava/lang/Boolean;Ljava/lang/Boolean;)Lnet/minecraft/class_4935; method_25580 func_239911_a_ - m ()V method_25592 func_239924_ab_ - m ()V method_25703 func_240034_t_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25573 func_239904_a_ - m ()Lnet/minecraft/class_4926; method_25599 func_239933_b_ - m (Lnet/minecraft/class_2248;)V method_25690 func_240023_n_ - m (Lnet/minecraft/class_2248;)Ljava/util/List; method_25702 func_240035_t_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25686 func_240019_l_ - m ()Lnet/minecraft/class_4926; method_25675 func_240008_j_ - m (Lnet/minecraft/class_2248;)V method_25658 func_239991_g_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946;)Lnet/minecraft/class_4910$class_4912; method_25555 func_239884_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25626 func_239960_c_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4944;Ljava/lang/Integer;)Lnet/minecraft/class_4935; method_25552 func_239881_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25646 func_239980_e_ - m ()V method_25522 func_239850_N_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25661 func_239994_g_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25674 func_240007_i_ - m ()V method_25530 func_239858_V_ - m (Lnet/minecraft/class_4910;)Ljava/util/function/Consumer; method_25610 func_239944_b_ - m ()V method_26279 func_239931_ai_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4925; method_25645 func_239979_e_ - m ()V method_25514 func_239842_F_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25620 func_239954_c_ - m (Lnet/minecraft/class_4910;)Ljava/util/function/BiConsumer; method_25568 func_239899_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2769;[I)V method_25547 func_239876_a_ - m ()Lnet/minecraft/class_4926; method_25618 func_239952_c_ - m (Lnet/minecraft/class_5000;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_26433 func_239898_a_ - m (Lnet/minecraft/class_4910;Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;)V method_25571 func_239902_a_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25611 func_239945_b_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Ljava/lang/Boolean;Lnet/minecraft/class_2768;)Lnet/minecraft/class_4935; method_25588 func_239919_a_ - m ()V method_25701 func_240032_s_ - m (Lnet/minecraft/class_2248;)V method_25688 func_240021_m_ - m (Lnet/minecraft/class_2248;Ljava/util/function/Function;)V method_25558 func_239887_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)V method_25682 func_240015_k_ - m ()V method_25508 func_240045_z_ - m ()V method_25598 func_239930_ah_ - m (Lnet/minecraft/class_2248;)Ljava/util/List; method_25700 func_240033_s_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4910$class_4913;Lnet/minecraft/class_4944;)V method_25549 func_239878_a_ - m (Lnet/minecraft/class_1826;)V method_25539 func_239868_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25636 func_239970_d_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4917; method_25654 func_239987_f_ - m (Lnet/minecraft/class_4944;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25613 func_239947_b_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4946$class_4947;)Lnet/minecraft/class_4910$class_4912; method_25633 func_239967_d_ - m ()V method_25521 func_239849_M_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25679 func_240012_j_ - m ()V method_25529 func_239857_U_ - m ()V method_25680 func_240013_k_ - m (Ljava/lang/Comparable;Lnet/minecraft/class_4935;Lnet/minecraft/class_4935;Ljava/lang/Comparable;)Lnet/minecraft/class_4935; method_25578 func_239909_a_ - f Ljava/util/function/Consumer; field_22832 field_239836_c_ - f Ljava/util/function/BiConsumer; field_22831 field_239835_b_ - f Ljava/util/function/Consumer; field_22830 field_239834_a_ -c net/minecraft/class_4910$1 net/minecraft/data/BlockModelProvider$1 - f [I field_23399 field_240046_a_ - f [I field_22833 field_240047_b_ -c net/minecraft/class_4910$class_4914 net/minecraft/data/BlockModelProvider$LogsVariantHelper - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4914; method_25729 func_240071_b_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4914; method_25730 func_240072_c_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4914; method_25728 func_240070_a_ - f Lnet/minecraft/class_4910; field_22842 field_240068_a_ - f Lnet/minecraft/class_4944; field_22843 field_240069_b_ -c net/minecraft/class_4910$class_4911 net/minecraft/data/BlockModelProvider$BreakParticleHelper - m (Lnet/minecraft/class_4942;[Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4911; method_25713 func_240050_a_ - m ([Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4911; method_25715 func_240052_b_ - m ([Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4911; method_25714 func_240051_a_ - f Lnet/minecraft/class_2960; field_22835 field_240049_b_ - f Lnet/minecraft/class_4910; field_22834 field_240048_a_ -c net/minecraft/class_4910$class_4913 net/minecraft/data/BlockModelProvider$TintMode - m (Ljava/lang/String;)Lnet/minecraft/class_4910$class_4913; valueOf valueOf - m ()Lnet/minecraft/class_4942; method_25726 func_240066_a_ - m ()Lnet/minecraft/class_4942; method_25727 func_240067_b_ - m ()[Lnet/minecraft/class_4910$class_4913; values values - f Lnet/minecraft/class_4910$class_4913; field_22839 TINTED - f [Lnet/minecraft/class_4910$class_4913; field_22841 $VALUES - f Lnet/minecraft/class_4910$class_4913; field_22840 NOT_TINTED -c net/minecraft/class_4910$class_4912 net/minecraft/data/BlockModelProvider$BlockTextureCombiner - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25725 func_240065_g_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25717 func_240057_a_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25716 func_240056_a_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25724 func_240064_f_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25723 func_240063_e_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25722 func_240062_d_ - m (Ljava/util/function/Function;)Lnet/minecraft/class_4910$class_4912; method_25719 func_240059_a_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4942;)Lnet/minecraft/class_4910$class_4912; method_25718 func_240058_a_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25721 func_240061_c_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4910$class_4912; method_25720 func_240060_b_ - f Lnet/minecraft/class_4910; field_22836 field_240053_a_ - f Lnet/minecraft/class_4944; field_22837 field_240054_b_ - f Lnet/minecraft/class_2960; field_22838 field_240055_c_ -c net/minecraft/class_4915 net/minecraft/data/ItemModelProvider - m ()V method_25731 func_240074_a_ - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_4942;)V method_25733 func_240076_a_ - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;Lnet/minecraft/class_4942;)V method_25732 func_240075_a_ - m (Lnet/minecraft/class_1792;Ljava/lang/String;Lnet/minecraft/class_4942;)V method_25734 func_240077_a_ - f Ljava/util/function/BiConsumer; field_22844 field_240073_a_ -c net/minecraft/class_4916 net/minecraft/data/BlockStateProvider - m (Ljava/nio/file/Path;Lnet/minecraft/class_2248;)Ljava/nio/file/Path; method_25736 func_240082_a_ - m (Lnet/minecraft/class_2408;Ljava/nio/file/Path;Ljava/util/Map;Ljava/util/function/BiFunction;)V method_25735 func_240081_a_ - m (Ljava/util/Map;Lnet/minecraft/class_4917;)V method_25739 func_240085_a_ - m (Ljava/util/Map;Lnet/minecraft/class_2248;)Z method_25738 func_240084_a_ - m (Ljava/util/Set;Ljava/util/Map;Lnet/minecraft/class_2248;)V method_25741 func_240087_a_ - m (Ljava/util/function/BiFunction;Ljava/nio/file/Path;Lnet/minecraft/class_2408;Ljava/lang/Object;Ljava/util/function/Supplier;)V method_25742 func_240088_a_ - m (Ljava/util/Map;Lnet/minecraft/class_2960;Ljava/util/function/Supplier;)V method_25740 func_240086_a_ - m (Ljava/nio/file/Path;Lnet/minecraft/class_2960;)Ljava/nio/file/Path; method_25737 func_240083_a_ - f Lorg/apache/logging/log4j/Logger; field_22845 field_240078_b_ - f Lnet/minecraft/class_2403; field_22847 field_240080_d_ - f Lcom/google/gson/Gson; field_22846 field_240079_c_ -c net/minecraft/class_4917 net/minecraft/data/IFinishedBlockState - m ()Lnet/minecraft/class_2248; method_25743 func_230524_a_ -c net/minecraft/class_4918 net/minecraft/data/IMultiPartPredicateBuilder - m (Lnet/minecraft/class_2689;)V method_25745 func_230523_a_ - m ([Lnet/minecraft/class_4918;)Lnet/minecraft/class_4918; method_25746 func_240090_b_ - m ()Lnet/minecraft/class_4918$class_4921; method_25744 func_240089_a_ -c net/minecraft/class_4918$class_4919 net/minecraft/data/IMultiPartPredicateBuilder$Serializer - m ()Lcom/google/gson/JsonElement; method_25748 get - m (Lnet/minecraft/class_2689;Lnet/minecraft/class_4918;)V method_25747 func_240093_a_ - m ()Ljava/lang/Object; get get - f Ljava/util/List; field_22849 field_240092_b_ - f Lnet/minecraft/class_4918$class_4920; field_22848 field_240091_a_ -c net/minecraft/class_4918$1 net/minecraft/data/IMultiPartPredicateBuilder$1 -c net/minecraft/class_4918$class_4921 net/minecraft/data/IMultiPartPredicateBuilder$Properties - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2769;Ljava/lang/String;)V method_25755 func_240102_a_ - m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;[Ljava/lang/Comparable;)Ljava/lang/String; method_25757 func_240103_c_ - m (Lnet/minecraft/class_2769;Ljava/lang/String;)V method_25753 func_240100_a_ - m (Lnet/minecraft/class_2689;Lnet/minecraft/class_2769;)Z method_25750 func_240097_a_ - m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;[Ljava/lang/Comparable;)Lnet/minecraft/class_4918$class_4921; method_25752 func_240099_a_ - m ()Ljava/lang/Object; get get - m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Lnet/minecraft/class_4918$class_4921; method_25751 func_240098_a_ - m ()Lcom/google/gson/JsonElement; method_25756 get - m (Lnet/minecraft/class_2769;Ljava/util/stream/Stream;)Ljava/lang/String; method_25754 func_240101_a_ - f Ljava/util/Map; field_22854 field_240096_a_ -c net/minecraft/class_4918$class_4920 net/minecraft/data/IMultiPartPredicateBuilder$Operator - m (Ljava/lang/String;)Lnet/minecraft/class_4918$class_4920; valueOf valueOf - m (Lnet/minecraft/class_4918$class_4920;)Ljava/lang/String; method_25749 func_240095_a_ - m ()[Lnet/minecraft/class_4918$class_4920; values values - f Ljava/lang/String; field_22852 field_240094_c_ - f Lnet/minecraft/class_4918$class_4920; field_22850 AND - f [Lnet/minecraft/class_4918$class_4920; field_22853 $VALUES - f Lnet/minecraft/class_4918$class_4920; field_22851 OR -c net/minecraft/class_4922 net/minecraft/data/FinishedMultiPartBlockState - m (Lnet/minecraft/class_4918;Ljava/util/List;)Lnet/minecraft/class_4922; method_25761 func_240109_a_ - m (Lnet/minecraft/class_4935;)Lnet/minecraft/class_4922; method_25763 func_240111_a_ - m ()Lcom/google/gson/JsonElement; method_25765 get - m (Lnet/minecraft/class_4918;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4922; method_25760 func_240108_a_ - m (Lnet/minecraft/class_2689;Lnet/minecraft/class_4922$class_4924;)V method_25759 func_240107_a_ - m (Ljava/util/List;)Lnet/minecraft/class_4922; method_25764 func_240112_a_ - m (Lnet/minecraft/class_4918;[Lnet/minecraft/class_4935;)Lnet/minecraft/class_4922; method_25762 func_240110_a_ - m ()Ljava/lang/Object; get get - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4922; method_25758 func_240106_a_ - f Ljava/util/List; field_22856 field_240105_b_ - f Lnet/minecraft/class_2248; field_22855 field_240104_a_ -c net/minecraft/class_4922$1 net/minecraft/data/FinishedMultiPartBlockState$1 -c net/minecraft/class_4922$class_4924 net/minecraft/data/FinishedMultiPartBlockState$Part - m (Lcom/google/gson/JsonObject;)V method_25768 func_230526_a_ - m (Lnet/minecraft/class_2689;)V method_25767 func_230525_a_ - m ()Ljava/lang/Object; get get - m ()Lcom/google/gson/JsonElement; method_25766 get - f Ljava/util/List; field_22858 field_240114_a_ -c net/minecraft/class_4922$class_4923 net/minecraft/data/FinishedMultiPartBlockState$ConditionalPart - f Lnet/minecraft/class_4918; field_22857 field_240113_a_ -c net/minecraft/class_4925 net/minecraft/data/FinishedVariantBlockState - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4925; method_25770 func_240120_a_ - m (Ljava/util/Map;Lcom/mojang/datafixers/util/Pair;)V method_25779 func_240129_a_ - m (Lcom/mojang/datafixers/util/Pair;Ljava/util/Map$Entry;)Lcom/mojang/datafixers/util/Pair; method_25774 func_240124_a_ - m (Ljava/util/Map;Lcom/mojang/datafixers/util/Pair;)Ljava/util/stream/Stream; method_25781 func_240130_b_ - m (Lnet/minecraft/class_2248;[Lnet/minecraft/class_4935;)Lnet/minecraft/class_4925; method_25771 func_240121_a_ - m ()Lcom/google/gson/JsonElement; method_25780 get - m (Ljava/util/List;Lcom/google/common/collect/ImmutableList$Builder;Lnet/minecraft/class_4935;)V method_25776 func_240126_a_ - m ()Ljava/lang/Object; get get - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4925; method_25769 func_240119_a_ - m (Ljava/util/Map;Lcom/google/gson/JsonObject;)V method_25778 func_240128_a_ - m (Lcom/google/common/collect/ImmutableList$Builder;Lnet/minecraft/class_4935;Lnet/minecraft/class_4935;)V method_25773 func_240123_a_ - m (Lnet/minecraft/class_2769;)V method_25772 func_240122_a_ - m (Ljava/util/List;Ljava/util/List;)Ljava/util/List; method_25777 func_240127_a_ - m (Lnet/minecraft/class_4926;)Lnet/minecraft/class_4925; method_25775 func_240125_a_ - f Ljava/util/Set; field_22861 field_240117_c_ - f Lnet/minecraft/class_2248; field_22859 field_240115_a_ - f Ljava/util/List; field_22860 field_240116_b_ - f Ljava/util/List; field_22862 field_240118_d_ -c net/minecraft/class_4926 net/minecraft/data/BlockStateVariantBuilder - m (Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;)Lnet/minecraft/class_4926$class_4931; method_25787 func_240137_a_ - m (Lnet/minecraft/class_2769;Lnet/minecraft/class_4934;)Ljava/util/stream/Stream; method_25788 func_240138_a_ - m (Lnet/minecraft/class_2769;)Lnet/minecraft/class_4926$class_4927; method_25783 func_240133_a_ - m ()Ljava/util/Map; method_25782 func_240132_a_ - m ()Ljava/util/List; method_25791 func_230527_b_ - m (Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;)Lnet/minecraft/class_4926$class_4928; method_25784 func_240134_a_ - m (Lnet/minecraft/class_4934;Ljava/util/List;)V method_25790 func_240140_a_ - m ()V method_25792 func_240141_c_ - m (Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;)Lnet/minecraft/class_4926$class_4929; method_25785 func_240135_a_ - m (Lnet/minecraft/class_4934;)Z method_25789 func_240139_a_ - m (Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;Lnet/minecraft/class_2769;)Lnet/minecraft/class_4926$class_4930; method_25786 func_240136_a_ - f Ljava/util/Map; field_22863 field_240131_a_ -c net/minecraft/class_4926$1 net/minecraft/data/BlockStateVariantBuilder$1 -c net/minecraft/class_4926$class_4928 net/minecraft/data/BlockStateVariantBuilder$Two - m (Ljava/util/function/BiFunction;)Lnet/minecraft/class_4926; method_25803 func_240155_b_ - m (Ljava/lang/Comparable;Ljava/util/function/BiFunction;Ljava/lang/Comparable;)V method_25799 func_240151_a_ - m (Ljava/util/function/BiFunction;Ljava/lang/Comparable;)V method_25801 func_240153_a_ - m (Ljava/util/function/BiFunction;)Lnet/minecraft/class_4926; method_25800 func_240152_a_ - m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/util/List;)Lnet/minecraft/class_4926$class_4928; method_25798 func_240150_a_ - m (Ljava/lang/Comparable;Ljava/lang/Comparable;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4926$class_4928; method_25797 func_240149_a_ - m (Ljava/lang/Comparable;Ljava/util/function/BiFunction;Ljava/lang/Comparable;)V method_25802 func_240154_b_ - m (Ljava/util/function/BiFunction;Ljava/lang/Comparable;)V method_25804 func_240156_b_ - f Lnet/minecraft/class_2769; field_22866 field_240148_b_ - f Lnet/minecraft/class_2769; field_22865 field_240147_a_ -c net/minecraft/class_4926$class_4927 net/minecraft/data/BlockStateVariantBuilder$One - m (Ljava/util/function/Function;)Lnet/minecraft/class_4926; method_25795 func_240145_a_ - m (Ljava/lang/Comparable;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4926$class_4927; method_25793 func_240143_a_ - m (Ljava/lang/Comparable;Ljava/util/List;)Lnet/minecraft/class_4926$class_4927; method_25794 func_240144_a_ - m (Ljava/util/function/Function;Ljava/lang/Comparable;)V method_25796 func_240146_b_ - f Lnet/minecraft/class_2769; field_22864 field_240142_a_ -c net/minecraft/class_4926$class_4930 net/minecraft/data/BlockStateVariantBuilder$Four - m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4926$class_4930; method_25811 func_240170_a_ - m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/util/List;)Lnet/minecraft/class_4926$class_4930; method_25812 func_240171_a_ - f Lnet/minecraft/class_2769; field_22872 field_240168_c_ - f Lnet/minecraft/class_2769; field_22871 field_240167_b_ - f Lnet/minecraft/class_2769; field_22870 field_240166_a_ - f Lnet/minecraft/class_2769; field_22873 field_240169_d_ -c net/minecraft/class_4926$class_4929 net/minecraft/data/BlockStateVariantBuilder$Three - m (Lnet/minecraft/class_4926$class_4932;Ljava/lang/Comparable;)V method_25808 func_240163_b_ - m (Lnet/minecraft/class_4926$class_4932;)Lnet/minecraft/class_4926; method_25805 func_240160_a_ - m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/util/List;)Lnet/minecraft/class_4926$class_4929; method_25807 func_240162_a_ - m (Ljava/lang/Comparable;Lnet/minecraft/class_4926$class_4932;Ljava/lang/Comparable;)V method_25809 func_240164_b_ - m (Ljava/lang/Comparable;Ljava/lang/Comparable;Lnet/minecraft/class_4926$class_4932;Ljava/lang/Comparable;)V method_25810 func_240165_b_ - m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4926$class_4929; method_25806 func_240161_a_ - f Lnet/minecraft/class_2769; field_22867 field_240157_a_ - f Lnet/minecraft/class_2769; field_22869 field_240159_c_ - f Lnet/minecraft/class_2769; field_22868 field_240158_b_ -c net/minecraft/class_4926$class_4931 net/minecraft/data/BlockStateVariantBuilder$Five - m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/util/List;)Lnet/minecraft/class_4926$class_4931; method_25814 func_240178_a_ - m (Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Ljava/lang/Comparable;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4926$class_4931; method_25813 func_240177_a_ - f Lnet/minecraft/class_2769; field_22878 field_240176_e_ - f Lnet/minecraft/class_2769; field_22877 field_240175_d_ - f Lnet/minecraft/class_2769; field_22876 field_240174_c_ - f Lnet/minecraft/class_2769; field_22875 field_240173_b_ - f Lnet/minecraft/class_2769; field_22874 field_240172_a_ -c net/minecraft/class_4926$class_4932 net/minecraft/data/BlockStateVariantBuilder$ITriFunction - m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; apply apply -c net/minecraft/class_4934 net/minecraft/data/VariantPropertyBuilder - m ()Ljava/lang/String; toString toString - m ([Lnet/minecraft/class_2769$class_4933;)Lnet/minecraft/class_4934; method_25821 func_240190_a_ - m ()I hashCode hashCode - m ()Lnet/minecraft/class_4934; method_25818 func_240187_a_ - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/String; method_25822 func_240191_b_ - m (Lnet/minecraft/class_2769$class_4933;)Ljava/lang/String; method_25823 func_240192_b_ - m (Lnet/minecraft/class_2769$class_4933;)Lnet/minecraft/class_4934; method_25819 func_240188_a_ - m (Lnet/minecraft/class_4934;)Lnet/minecraft/class_4934; method_25820 func_240189_a_ - f Lnet/minecraft/class_4934; field_22881 field_240184_a_ - f Ljava/util/Comparator; field_22882 field_240185_b_ - f Ljava/util/List; field_22883 field_240186_c_ -c net/minecraft/class_4935 net/minecraft/data/BlockModelDefinition - m (Lnet/minecraft/class_4935;Lnet/minecraft/class_4935;)Lnet/minecraft/class_4935; method_25827 mergeDefinitions - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4938$class_4939;)V method_25826 func_240196_a_ - m (Lnet/minecraft/class_4938;Ljava/lang/Object;)Lnet/minecraft/class_4935; method_25828 replaceInfoValue - m (Lcom/google/gson/JsonArray;Lnet/minecraft/class_4935;)V method_25825 func_240195_a_ - m ()Lcom/google/gson/JsonElement; method_25830 get - m ()Ljava/lang/Object; get get - m (Ljava/util/List;)Lcom/google/gson/JsonElement; method_25829 serialize - m ()Lnet/minecraft/class_4935; method_25824 getNewModelDefinition - f Ljava/util/Map; field_22884 infoToInfoFieldMap -c net/minecraft/class_4936 net/minecraft/data/BlockModelFields - m (Lnet/minecraft/class_4936$class_4937;)Lcom/google/gson/JsonElement; method_25833 func_240207_b_ - m (Lnet/minecraft/class_4936$class_4937;)Lcom/google/gson/JsonElement; method_25831 func_240205_a_ - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonElement; method_25832 func_240206_a_ - f Lnet/minecraft/class_4938; field_22886 field_240201_b_ - f Lnet/minecraft/class_4938; field_22885 field_240200_a_ - f Lnet/minecraft/class_4938; field_22889 field_240204_e_ - f Lnet/minecraft/class_4938; field_22888 field_240203_d_ - f Lnet/minecraft/class_4938; field_22887 field_240202_c_ -c net/minecraft/class_4936$class_4937 net/minecraft/data/BlockModelFields$Rotation - m ()[Lnet/minecraft/class_4936$class_4937; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4936$class_4937; valueOf valueOf - m (Lnet/minecraft/class_4936$class_4937;)I method_25834 func_240209_a_ - f Lnet/minecraft/class_4936$class_4937; field_22892 R180 - f Lnet/minecraft/class_4936$class_4937; field_22891 R90 - f Lnet/minecraft/class_4936$class_4937; field_22893 R270 - f [Lnet/minecraft/class_4936$class_4937; field_22895 $VALUES - f I field_22894 field_240208_e_ - f Lnet/minecraft/class_4936$class_4937; field_22890 R0 -c net/minecraft/class_4938 net/minecraft/data/BlockModeInfo - m (Lnet/minecraft/class_4938;)Ljava/util/function/Function; method_25837 func_240214_b_ - m (Lnet/minecraft/class_4938;)Ljava/lang/String; method_25835 func_240212_a_ - m (Ljava/lang/Object;)Lnet/minecraft/class_4938$class_4939; method_25836 getFieldInfo - m ()Ljava/lang/String; toString toString - f Ljava/util/function/Function; field_22897 value - f Ljava/lang/String; field_22896 property -c net/minecraft/class_4938$class_4939 net/minecraft/data/BlockModeInfo$Field - m (Lcom/google/gson/JsonObject;)V method_25838 serialize - m ()Ljava/lang/String; toString toString - f Ljava/lang/Object; field_22899 element - f Lnet/minecraft/class_4938; field_22898 field_240215_a_ -c net/minecraft/class_4940 net/minecraft/data/BlockModelWriter - m ()Ljava/lang/Object; get get - m ()Lcom/google/gson/JsonElement; method_25839 get - f Lnet/minecraft/class_2960; field_22900 field_240218_a_ -c net/minecraft/class_4941 net/minecraft/data/ModelsResourceUtil - m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_2960; method_25840 func_240219_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_2960; method_25845 func_240224_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_2960; method_25844 func_240223_a_ - m (Lnet/minecraft/class_2248;Ljava/lang/String;)Lnet/minecraft/class_2960; method_25843 func_240222_a_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2960; method_25842 func_240221_a_ - m (Lnet/minecraft/class_1792;Ljava/lang/String;)Lnet/minecraft/class_2960; method_25841 func_240220_a_ -c net/minecraft/class_4942 net/minecraft/data/ModelsUtil - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_4944;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25846 func_240228_a_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_4944;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25852 func_240234_a_ - m (Lnet/minecraft/class_2248;Ljava/lang/String;Lnet/minecraft/class_4944;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25853 func_240235_b_ - m (Ljava/util/Map;)Lcom/google/gson/JsonElement; method_25851 func_240233_a_ - m (Lnet/minecraft/class_4944;)Ljava/util/Map; method_25850 func_240232_a_ - m (Lnet/minecraft/class_2248;Ljava/lang/String;Lnet/minecraft/class_4944;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25847 func_240229_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_2960;)V method_25849 func_240231_a_ - m (Lcom/google/gson/JsonObject;Lnet/minecraft/class_4945;Lnet/minecraft/class_2960;)V method_25848 func_240230_a_ - f Ljava/util/Optional; field_22901 field_240225_a_ - f Ljava/util/Set; field_22902 field_240226_b_ - f Ljava/util/Optional; field_22903 field_240227_c_ -c net/minecraft/class_4943 net/minecraft/data/StockModelShapes - m (I)Lnet/minecraft/class_4942; method_25858 func_240335_b_ - m (Ljava/lang/String;[Lnet/minecraft/class_4945;)Lnet/minecraft/class_4942; method_25859 makeItemModel - m ([Lnet/minecraft/class_4945;)Lnet/minecraft/class_4942; method_25857 makeEmptyModel - m (Ljava/lang/String;[Lnet/minecraft/class_4945;)Lnet/minecraft/class_4942; method_25856 makeBlockModel - m (I)[Lnet/minecraft/class_4942; method_25854 func_240331_a_ - m (Ljava/lang/String;Ljava/lang/String;[Lnet/minecraft/class_4945;)Lnet/minecraft/class_4942; method_25855 makeBlockModel - f Lnet/minecraft/class_4942; field_22941 TEMPLATE_SHULKER_BOX - f Lnet/minecraft/class_4942; field_22993 TEMPLATE_WALL_SIDE_TALL - f Lnet/minecraft/class_4942; field_22967 TEMPLATE_LANTERN - f Lnet/minecraft/class_4942; field_22949 TEMPLATE_CHORUS_FLOWER - f Lnet/minecraft/class_4942; field_22916 TEMPLATE_TRAPDOOR_BOTTOM - f Lnet/minecraft/class_4942; field_22974 CUBE_COLUMN - f Lnet/minecraft/class_4942; field_22937 TEMPLATE_SINGLE_FACE - f Lnet/minecraft/class_4942; field_22989 FENCE_SIDE - f Lnet/minecraft/class_4942; field_22964 TEMPLATE_FIRE_SIDE_ALT - f Lnet/minecraft/class_4942; field_22929 CARPET - f Lnet/minecraft/class_4942; field_22912 STAIRS - f Lnet/minecraft/class_4942; field_22942 CUBE - f Lnet/minecraft/class_4942; field_22982 BUTTON_PRESSED - f Lnet/minecraft/class_4942; field_22930 TEMPLATE_PISTON_HEAD - f Lnet/minecraft/class_4942; field_22905 TEMPLATE_FENCE_GATE_WALL_OPEN - f Lnet/minecraft/class_4942; field_22961 TEMPLATE_FARMLAND - f Lnet/minecraft/class_4942; field_22928 TEMPLATE_RAIL_RAISED_SW - f Lnet/minecraft/class_4942; field_22986 DOOR_TOP - f Lnet/minecraft/class_4942; field_22934 TEMPLATE_TWO_TURTLE_EGGS - f Lnet/minecraft/class_4942; field_22953 TEMPLATE_GLASS_PANE_POST - f Lnet/minecraft/class_4942; field_22920 TEMPLATE_ORIENTABLE_TRAPDOOR_OPEN - f Lnet/minecraft/class_4942; field_22978 ORIENTABLE - f Lnet/minecraft/class_4942; field_22957 TEMPLATE_ANVIL - f Lnet/minecraft/class_4942; field_22924 TINTED_FLOWER_POT_CROSS - f Lnet/minecraft/class_4942; field_22968 TEMPLATE_HANGING_LANTERN - f Lnet/minecraft/class_4942; field_23400 CUBE_DIRECTIONAL - f Lnet/minecraft/class_4942; field_22994 WALL_INVENTORY - f Lnet/minecraft/class_4942; field_22943 TEMPLATE_BED - f Lnet/minecraft/class_4942; field_22917 TEMPLATE_TRAPDOOR_OPEN - f Lnet/minecraft/class_4942; field_22950 TEMPLATE_DAYLIGHT_SENSOR - f Lnet/minecraft/class_4942; field_22975 CUBE_COLUMN_HORIZONTAL - f Lnet/minecraft/class_4942; field_22909 SLAB - f Lnet/minecraft/class_4942; field_22965 TEMPLATE_FIRE_UP - f [Lnet/minecraft/class_4942; field_22958 STEM_GROWTH_STAGES - f Lnet/minecraft/class_4942; field_22990 FENCE_INVENTORY - f Lnet/minecraft/class_4942; field_22938 GENERATED - f Lnet/minecraft/class_4942; field_22913 INNER_STAIRS - f Lnet/minecraft/class_4942; field_22946 CORAL_FAN - f Lnet/minecraft/class_4942; field_22925 RAIL_FLAT - f Lnet/minecraft/class_4942; field_22983 BUTTON_INVENTORY - f Lnet/minecraft/class_4942; field_22931 TEMPLATE_PISTON_HEAD_SHORT - f Lnet/minecraft/class_4942; field_22906 PRESSURE_PLATE_UP - f Lnet/minecraft/class_4942; field_22962 TEMPLATE_FIRE_FLOOR - f Lnet/minecraft/class_4942; field_22921 CROSS - f Lnet/minecraft/class_4942; field_22954 TEMPLATE_GLASS_PANE_SIDE - f Lnet/minecraft/class_4942; field_22979 ORIENTABLE_WITH_BOTTOM - f Lnet/minecraft/class_4942; field_22947 CORAL_WALL_FAN - f Lnet/minecraft/class_4942; field_22972 CUBE_ALL - f Lnet/minecraft/class_4942; field_22969 TEMPLATE_TORCH - f Lnet/minecraft/class_4942; field_22995 TEMPLATE_FENCE_GATE - f Lnet/minecraft/class_4942; field_22944 TEMPLATE_BANNER - f Lnet/minecraft/class_4942; field_22918 TEMPLATE_ORIENTABLE_TRAPDOOR_TOP - f Lnet/minecraft/class_4942; field_22951 TEMPLATE_GLASS_PANE_NOSIDE - f Lnet/minecraft/class_4942; field_22987 DOOR_TOP_RH - f Lnet/minecraft/class_4942; field_22935 TEMPLATE_THREE_TURTLE_EGGS - f Lnet/minecraft/class_4942; field_22910 SLAB_TOP - f Lnet/minecraft/class_4942; field_22966 TEMPLATE_FIRE_UP_ALT - f Lnet/minecraft/class_4942; field_22991 TEMPLATE_WALL_POST - f Lnet/minecraft/class_4942; field_22939 HANDHELD - f Lnet/minecraft/class_4942; field_22914 OUTER_STAIRS - f Lnet/minecraft/class_4942; field_22926 RAIL_CURVED - f Lnet/minecraft/class_4942; field_22932 TEMPLATE_SEAGRASS - f Lnet/minecraft/class_4942; field_22959 STEM_FRUIT - f Lnet/minecraft/class_4942; field_22984 DOOR_BOTTOM - f Lnet/minecraft/class_4942; field_22907 PRESSURE_PLATE_DOWN - f Lnet/minecraft/class_4942; field_22976 CUBE_TOP - f Lnet/minecraft/class_4942; field_22922 TINTED_CROSS - f Lnet/minecraft/class_4942; field_22970 TEMPLATE_TORCH_WALL - f Lnet/minecraft/class_4942; field_22955 TEMPLATE_GLASS_PANE_SIDE_ALT - f Lnet/minecraft/class_4942; field_22980 ORIENTABLE_VERTICAL - f Lnet/minecraft/class_4942; field_22996 TEMPLATE_FENCE_GATE_OPEN - f Lnet/minecraft/class_4942; field_22992 TEMPLATE_WALL_SIDE - f Lnet/minecraft/class_4942; field_22915 TEMPLATE_TRAPDOOR_TOP - f Lnet/minecraft/class_4942; field_22973 CUBE_MIRRORED_ALL - f Lnet/minecraft/class_4942; field_22948 TEMPLATE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_4942; field_22945 TEMPLATE_SKULL - f Lnet/minecraft/class_4942; field_22919 TEMPLATE_ORIENTABLE_TRAPDOOR_BOTTOM - f Lnet/minecraft/class_4942; field_22936 TEMPLATE_FOUR_TURTLE_EGGS - f Lnet/minecraft/class_4942; field_22963 TEMPLATE_FIRE_SIDE - f Lnet/minecraft/class_4942; field_22988 FENCE_POST - f Lnet/minecraft/class_4942; field_22911 LEAVES - f Lnet/minecraft/class_4942; field_22940 HANDHELD_ROD - f Lnet/minecraft/class_4942; field_23957 TEMPLATE_CAMPFIRE - f Lnet/minecraft/class_4942; field_22904 TEMPLATE_FENCE_GATE_WALL - f Lnet/minecraft/class_4942; field_22927 TEMPLATE_RAIL_RAISED_NE - f Lnet/minecraft/class_4942; field_22933 TEMPLATE_TURTLE_EGG - f Lnet/minecraft/class_4942; field_22985 DOOR_BOTTOM_RH - f Lnet/minecraft/class_4942; field_22960 CROP - f Lnet/minecraft/class_4942; field_22908 PARTICLE - f Lnet/minecraft/class_4942; field_22977 CUBE_BOTTOM_TOP - f Lnet/minecraft/class_4942; field_22952 TEMPLATE_GLASS_PANE_NOSIDE_ALT - f Lnet/minecraft/class_4942; field_22923 FLOWER_POT_CROSS - f Lnet/minecraft/class_4942; field_22971 TEMPLATE_PISTON - f Lnet/minecraft/class_4942; field_22981 BUTTON - f Lnet/minecraft/class_4942; field_22956 TEMPLATE_COMMAND_BLOCK -c net/minecraft/class_4944 net/minecraft/data/ModelTextures - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25902 func_240384_r_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25873 func_240354_b_ - m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_2960; method_25876 func_240357_c_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25904 func_240386_t_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25886 func_240367_e_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25900 func_240382_p_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25889 func_240370_g_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25882 func_240363_d_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25911 func_240340_B_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25899 func_240380_n_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25894 func_240375_j_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25869 func_240350_a_ - m (Lnet/minecraft/class_2248;Ljava/lang/String;)Lnet/minecraft/class_2960; method_25866 func_240347_a_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25897 func_240378_l_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25880 func_240361_c_ - m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_4944; method_25862 func_240343_a_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25890 func_240371_h_ - m (Lnet/minecraft/class_1792;Ljava/lang/String;)Lnet/minecraft/class_2960; method_25863 func_240344_a_ - m (Lnet/minecraft/class_4945;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25883 func_240364_d_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25887 func_240368_f_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25872 func_240353_b_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25893 func_240374_i_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25881 func_240362_d_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25909 func_240391_y_ - m (Lnet/minecraft/class_4945;)Lnet/minecraft/class_2960; method_25867 func_240348_a_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25905 func_240387_u_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25907 func_240389_w_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25884 func_240365_d_ - m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_4944; method_25871 func_240352_b_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25903 func_240385_s_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25878 func_240359_c_ - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25865 func_240346_a_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25891 func_240372_h_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25901 func_240383_q_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25898 func_240379_m_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_27168 func_240381_o_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25896 func_240377_k_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2960; method_25860 func_240341_C_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25875 func_240356_b_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_27167 func_240339_A_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25892 func_240373_i_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25910 func_240392_z_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25885 func_240366_e_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25888 func_240369_g_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25908 func_240390_x_ - m (Lnet/minecraft/class_4945;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25879 func_240360_c_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25877 func_240358_c_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25870 func_240351_a_ - m (Lnet/minecraft/class_4945;Lnet/minecraft/class_4945;)Lnet/minecraft/class_4944; method_25874 func_240355_b_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25895 func_240376_j_ - m ()Ljava/util/stream/Stream; method_25861 func_240342_a_ - m (Lnet/minecraft/class_4945;Lnet/minecraft/class_2960;)Lnet/minecraft/class_4944; method_25868 func_240349_a_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25906 func_240388_v_ - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4944; method_25864 func_240345_a_ - f Ljava/util/Set; field_22998 field_240338_b_ - f Ljava/util/Map; field_22997 field_240337_a_ -c net/minecraft/class_4945 net/minecraft/data/StockTextureAliases - m ()Lnet/minecraft/class_4945; method_25913 getAlias - m (Ljava/lang/String;Lnet/minecraft/class_4945;)Lnet/minecraft/class_4945; method_27044 createTextureAlias - m ()Ljava/lang/String; toString toString - m ()Ljava/lang/String; method_25912 getName - m (Ljava/lang/String;)Lnet/minecraft/class_4945; method_27043 createTextureAlias - f Lnet/minecraft/class_4945; field_23035 UPPERSTEM - f Lnet/minecraft/class_4945; field_23014 BOTTOM - f Lnet/minecraft/class_4945; field_23015 TOP - f Lnet/minecraft/class_4945; field_23016 FRONT - f Lnet/minecraft/class_4945; field_23017 BACK - f Lnet/minecraft/class_4945; field_23018 SIDE - f Lnet/minecraft/class_4945; field_23030 PATTERN - f Lnet/minecraft/class_4945; field_23008 textureAlias - f Lnet/minecraft/class_4945; field_23031 PANE - f Lnet/minecraft/class_4945; field_23010 ALL - f Lnet/minecraft/class_4945; field_23032 EDGE - f Lnet/minecraft/class_4945; field_23011 TEXTURE - f Lnet/minecraft/class_4945; field_23033 FAN - f Ljava/lang/String; field_23007 name - f Lnet/minecraft/class_4945; field_23012 PARTICLE - f Lnet/minecraft/class_4945; field_23034 STEM - f Lnet/minecraft/class_4945; field_23013 END - f Lnet/minecraft/class_4945; field_23003 PLATFORM - f Lnet/minecraft/class_4945; field_23025 CROSS - f Lnet/minecraft/class_4945; field_23004 UNSTICKY - f Lnet/minecraft/class_4945; field_23026 PLANT - f Lnet/minecraft/class_4945; field_23005 TORCH - f Lnet/minecraft/class_4945; field_23027 WALL - f Lnet/minecraft/class_4945; field_23006 LAYER_ZERO - f Lnet/minecraft/class_4945; field_23028 RAIL - f Lnet/minecraft/class_4945; field_23958 LIT_LOG - f Lnet/minecraft/class_4945; field_23029 WOOL - f Lnet/minecraft/class_4945; field_23019 NORTH - f Lnet/minecraft/class_4945; field_23020 SOUTH - f Lnet/minecraft/class_4945; field_22999 CROP - f Lnet/minecraft/class_4945; field_23021 EAST - f Lnet/minecraft/class_4945; field_23000 DIRT - f Lnet/minecraft/class_4945; field_23022 WEST - f Lnet/minecraft/class_4945; field_23001 FIRE - f Lnet/minecraft/class_4945; field_23023 UP - f Lnet/minecraft/class_4945; field_23002 LANTERN - f Lnet/minecraft/class_4945; field_23024 DOWN -c net/minecraft/class_4946 net/minecraft/data/TexturedModel - m (Lnet/minecraft/class_2248;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25916 func_240459_a_ - m (Ljava/util/function/Function;Lnet/minecraft/class_4942;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4946; method_25919 func_240462_a_ - m (Ljava/util/function/Function;Lnet/minecraft/class_4942;)Lnet/minecraft/class_4946$class_4947; method_25918 func_240461_a_ - m (Lnet/minecraft/class_2248;Ljava/lang/String;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25915 func_240458_a_ - m ()Lnet/minecraft/class_4942; method_25914 func_240457_a_ - m ()Lnet/minecraft/class_4944; method_25921 func_240464_b_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_4946; method_25920 func_240463_a_ - m (Ljava/util/function/Consumer;)Lnet/minecraft/class_4946; method_25917 func_240460_a_ - f Lnet/minecraft/class_4946$class_4947; field_23041 field_240439_f_ - f Lnet/minecraft/class_4944; field_23058 field_240455_v_ - f Lnet/minecraft/class_4946$class_4947; field_23040 field_240438_e_ - f Lnet/minecraft/class_4946$class_4947; field_23039 field_240437_d_ - f Lnet/minecraft/class_4942; field_23059 field_240456_w_ - f Lnet/minecraft/class_4946$class_4947; field_23038 field_240436_c_ - f Lnet/minecraft/class_4946$class_4947; field_23037 field_240435_b_ - f Lnet/minecraft/class_4946$class_4947; field_23036 field_240434_a_ - f Lnet/minecraft/class_4946$class_4947; field_23959 field_240454_u_ - f Lnet/minecraft/class_4946$class_4947; field_23057 field_240453_t_ - f Lnet/minecraft/class_4946$class_4947; field_23056 field_240452_s_ - f Lnet/minecraft/class_4946$class_4947; field_23055 field_240451_r_ - f Lnet/minecraft/class_4946$class_4947; field_23054 field_240450_q_ - f Lnet/minecraft/class_4946$class_4947; field_23051 field_240449_p_ - f Lnet/minecraft/class_4946$class_4947; field_23050 field_240448_o_ - f Lnet/minecraft/class_4946$class_4947; field_23049 field_240447_n_ - f Lnet/minecraft/class_4946$class_4947; field_23048 field_240446_m_ - f Lnet/minecraft/class_4946$class_4947; field_23047 field_240445_l_ - f Lnet/minecraft/class_4946$class_4947; field_23046 field_240444_k_ - f Lnet/minecraft/class_4946$class_4947; field_23045 field_240443_j_ - f Lnet/minecraft/class_4946$class_4947; field_23044 field_240442_i_ - f Lnet/minecraft/class_4946$class_4947; field_23043 field_240441_h_ - f Lnet/minecraft/class_4946$class_4947; field_23042 field_240440_g_ -c net/minecraft/class_4946$class_4947 net/minecraft/data/TexturedModel$ISupplier - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_4946; get get - m (Lnet/minecraft/class_2248;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25923 func_240466_a_ - m (Ljava/util/function/Consumer;)Lnet/minecraft/class_4946$class_4947; method_25924 func_240467_a_ - m (Lnet/minecraft/class_2248;Ljava/lang/String;Ljava/util/function/BiConsumer;)Lnet/minecraft/class_2960; method_25922 func_240465_a_ - m (Ljava/util/function/Consumer;Lnet/minecraft/class_2248;)Lnet/minecraft/class_4946; method_25925 func_240468_a_ -c net/minecraft/class_2444 net/minecraft/data/IFinishedRecipe - m ()Lnet/minecraft/class_2960; method_10417 getID - m ()Lcom/google/gson/JsonObject; method_17799 getRecipeJson - m (Lcom/google/gson/JsonObject;)V method_10416 serialize - m ()Lcom/google/gson/JsonObject; method_10415 getAdvancementJson - m ()Lnet/minecraft/class_1865; method_17800 getSerializer - m ()Lnet/minecraft/class_2960; method_10418 getAdvancementID -c net/minecraft/class_2446 net/minecraft/data/RecipeProvider - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24481 shapedWoodenFence - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_3494;)V method_24477 shapelessPlanks - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24483 shapedWoodenPressurePlate - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24482 shapedWoodenFenceGate - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24479 shapelessWoodenButton - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24478 shapedBoat - m (Ljava/util/function/Consumer;Ljava/lang/String;Lnet/minecraft/class_3957;I)V method_17585 cookingRecipesForMethod - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_3494;)V method_24475 shapelessPlanksNew - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24480 shapedWoodenDoor - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24893 shapedColoredTerracotta - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24476 shapelessStrippedToPlanks - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24894 shapedColorConcretePowder - m (Lnet/minecraft/class_2408;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V method_10427 saveRecipeAdvancement - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24891 shapedGlassPane - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24890 shapedColoredGlass - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24892 shapedColoredPane - m (Ljava/util/function/Consumer;)V method_10419 registerRecipes - m (Ljava/util/Set;Lnet/minecraft/class_2408;Ljava/nio/file/Path;Lnet/minecraft/class_2444;)V method_10421 func_200410_a - m (Lnet/minecraft/class_2408;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V method_10425 saveRecipe - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2037$class_2039; method_10422 enteredBlock - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24888 shapedColoredBed - m ([Lnet/minecraft/class_2073;)Lnet/minecraft/class_2066$class_2068; method_10423 hasItem - m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2066$class_2068; method_10420 hasItem - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2066$class_2068; method_10426 hasItem - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24889 shapedBanner - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24885 shapedCarpet - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24887 shapedBed - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24886 shapelessColoredCarpet - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24883 shapedSign - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24486 shapedWoodenTrapdoor - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;)V method_29728 smithingReinforce - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24884 shapelessColoredWool - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24484 shapedWoodenSlab - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1935;Lnet/minecraft/class_1935;)V method_24485 shapedWoodenStairs - f Lnet/minecraft/class_2403; field_11373 generator - f Lcom/google/gson/Gson; field_11375 GSON - f Lorg/apache/logging/log4j/Logger; field_11374 LOGGER -c net/minecraft/class_2447 net/minecraft/data/ShapedRecipeBuilder - m (Ljava/lang/Character;Lnet/minecraft/class_3494;)Lnet/minecraft/class_2447; method_10433 key - m (Ljava/util/function/Consumer;)V method_10431 build - m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_2447; method_10429 addCriterion - m (Ljava/util/function/Consumer;Lnet/minecraft/class_2960;)V method_10430 build - m (Lnet/minecraft/class_1935;I)Lnet/minecraft/class_2447; method_10436 shapedRecipe - m (Ljava/lang/Character;Lnet/minecraft/class_1856;)Lnet/minecraft/class_2447; method_10428 key - m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_10438 build - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2447; method_10437 shapedRecipe - m (Lnet/minecraft/class_2960;)V method_10432 validate - m (Ljava/lang/String;)Lnet/minecraft/class_2447; method_10435 setGroup - m (Ljava/lang/Character;Lnet/minecraft/class_1935;)Lnet/minecraft/class_2447; method_10434 key - m (Ljava/lang/String;)Lnet/minecraft/class_2447; method_10439 patternLine - f Ljava/lang/String; field_11381 group - f Lnet/minecraft/class_1792; field_11380 result - f Lorg/apache/logging/log4j/Logger; field_11382 LOGGER - f Ljava/util/List; field_11377 pattern - f Ljava/util/Map; field_11376 key - f I field_11378 count - f Lnet/minecraft/class_161$class_162; field_11379 advancementBuilder -c net/minecraft/class_2447$class_2448 net/minecraft/data/ShapedRecipeBuilder$Result - f I field_11386 count - f Lnet/minecraft/class_1792; field_11383 result - f Lnet/minecraft/class_2960; field_11390 advancementId - f Ljava/util/Map; field_11388 key - f Lnet/minecraft/class_2447; field_11391 field_200444_a - f Ljava/lang/String; field_11387 group - f Lnet/minecraft/class_2960; field_11385 id - f Ljava/util/List; field_11384 pattern - f Lnet/minecraft/class_161$class_162; field_11389 advancementBuilder -c net/minecraft/class_2450 net/minecraft/data/ShapelessRecipeBuilder - m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2450; method_10446 addIngredient - m (Ljava/util/function/Consumer;Lnet/minecraft/class_2960;)V method_10443 build - m (Lnet/minecraft/class_1935;I)Lnet/minecraft/class_2450; method_10448 shapelessRecipe - m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_10450 build - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2450; method_10447 shapelessRecipe - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_2450; method_10454 addIngredient - m (Ljava/util/function/Consumer;)V method_10444 build - m (Lnet/minecraft/class_1935;I)Lnet/minecraft/class_2450; method_10449 addIngredient - m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_2450; method_10442 addCriterion - m (Lnet/minecraft/class_2960;)V method_10445 validate - m (Lnet/minecraft/class_1856;)Lnet/minecraft/class_2450; method_10451 addIngredient - m (Lnet/minecraft/class_1856;I)Lnet/minecraft/class_2450; method_10453 addIngredient - m (Ljava/lang/String;)Lnet/minecraft/class_2450; method_10452 setGroup - f Lnet/minecraft/class_161$class_162; field_11393 advancementBuilder - f Ljava/lang/String; field_11398 group - f I field_11395 count - f Lorg/apache/logging/log4j/Logger; field_11397 LOGGER - f Ljava/util/List; field_11394 ingredients - f Lnet/minecraft/class_1792; field_11396 result -c net/minecraft/class_2450$class_2451 net/minecraft/data/ShapelessRecipeBuilder$Result - f Lnet/minecraft/class_161$class_162; field_11401 advancementBuilder - f Lnet/minecraft/class_1792; field_11403 result - f Ljava/util/List; field_11404 ingredients - f Ljava/lang/String; field_11399 group - f I field_11400 count - f Lnet/minecraft/class_2960; field_11402 id - f Lnet/minecraft/class_2960; field_11405 advancementId -c net/minecraft/class_2454 net/minecraft/data/CookingRecipeBuilder - m (Lnet/minecraft/class_2960;)V method_10471 validate - m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_2454; method_10469 addCriterion - m (Ljava/util/function/Consumer;)V method_10470 build - m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1935;FI)Lnet/minecraft/class_2454; method_17802 smeltingRecipe - m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_10472 build - m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1935;FILnet/minecraft/class_3957;)Lnet/minecraft/class_2454; method_17801 cookingRecipe - m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1935;FI)Lnet/minecraft/class_2454; method_10473 blastingRecipe - m (Ljava/util/function/Consumer;Lnet/minecraft/class_2960;)V method_10468 build - f Lnet/minecraft/class_1856; field_11418 ingredient - f Lnet/minecraft/class_3957; field_17599 recipeSerializer - f F field_11414 experience - f Lnet/minecraft/class_161$class_162; field_11416 advancementBuilder - f Lnet/minecraft/class_1792; field_11417 result - f I field_11415 cookingTime - f Ljava/lang/String; field_11419 group -c net/minecraft/class_2454$class_2455 net/minecraft/data/CookingRecipeBuilder$Result - f F field_11421 experience - f Ljava/lang/String; field_11426 group - f Lnet/minecraft/class_1856; field_11425 ingredient - f Lnet/minecraft/class_2960; field_11424 id - f Lnet/minecraft/class_2960; field_11427 advancementId - f Lnet/minecraft/class_1865; field_17600 serializer - f Lnet/minecraft/class_161$class_162; field_11423 advancementBuilder - f I field_11422 cookingTime - f Lnet/minecraft/class_1792; field_11428 result -c net/minecraft/class_3981 net/minecraft/data/SingleItemRecipeBuilder - m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1935;)Lnet/minecraft/class_3981; method_17968 stonecuttingRecipe - m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_17971 build - m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1935;I)Lnet/minecraft/class_3981; method_17969 stonecuttingRecipe - m (Ljava/util/function/Consumer;Lnet/minecraft/class_2960;)V method_17972 build - m (Lnet/minecraft/class_2960;)V method_17973 validate - m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_3981; method_17970 addCriterion - f Lnet/minecraft/class_1792; field_17690 result - f Lnet/minecraft/class_1865; field_17695 serializer - f Lnet/minecraft/class_161$class_162; field_17693 advancementBuilder - f Ljava/lang/String; field_17694 group - f Lnet/minecraft/class_1856; field_17691 ingredient - f I field_17692 count -c net/minecraft/class_3981$class_3982 net/minecraft/data/SingleItemRecipeBuilder$Result - f Lnet/minecraft/class_1865; field_17703 serializer - f Lnet/minecraft/class_161$class_162; field_17701 advancementBuilder - f Lnet/minecraft/class_2960; field_17702 advancementId - f Lnet/minecraft/class_1792; field_17699 result - f I field_17700 count - f Lnet/minecraft/class_2960; field_17696 id - f Ljava/lang/String; field_17697 group - f Lnet/minecraft/class_1856; field_17698 ingredient -c net/minecraft/class_2456 net/minecraft/data/CustomRecipeBuilder - m (Lnet/minecraft/class_1866;)Lnet/minecraft/class_2456; method_10476 customRecipe - m (Lnet/minecraft/class_2456;)Lnet/minecraft/class_1866; method_10474 func_218655_a - m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_10475 build - f Lnet/minecraft/class_1866; field_11429 serializer -c net/minecraft/class_2456$1 net/minecraft/data/CustomRecipeBuilder$1 - f Ljava/lang/String; field_11430 field_200460_a - f Lnet/minecraft/class_2456; field_11431 field_200461_b -c net/minecraft/class_5377 net/minecraft/data/SmithingRecipeBuilder - m (Ljava/util/function/Consumer;Ljava/lang/String;)V method_29731 build - m (Ljava/util/function/Consumer;Lnet/minecraft/class_2960;)V method_29732 build - m (Lnet/minecraft/class_1856;Lnet/minecraft/class_1856;Lnet/minecraft/class_1792;)Lnet/minecraft/class_5377; method_29729 smithingRecipe - m (Lnet/minecraft/class_2960;)V method_29733 validate - m (Ljava/lang/String;Lnet/minecraft/class_184;)Lnet/minecraft/class_5377; method_29730 addCriterion - f Lnet/minecraft/class_161$class_162; field_25494 advancementBuilder - f Lnet/minecraft/class_1792; field_25493 output - f Lnet/minecraft/class_1865; field_25495 serializer - f Lnet/minecraft/class_1856; field_25491 base - f Lnet/minecraft/class_1856; field_25492 addition -c net/minecraft/class_5377$class_5378 net/minecraft/data/SmithingRecipeBuilder$Result - f Lnet/minecraft/class_1856; field_25497 base - f Lnet/minecraft/class_1856; field_25498 addition - f Lnet/minecraft/class_2960; field_25501 advancementId - f Lnet/minecraft/class_161$class_162; field_25500 advancementBuilder - f Lnet/minecraft/class_2960; field_25496 id - f Lnet/minecraft/class_1792; field_25499 output - f Lnet/minecraft/class_1865; field_25502 serializer -c net/minecraft/class_2461 net/minecraft/data/NBTToSNBTConverter - m (Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/lang/String; method_10496 getFileName - m (Ljava/nio/file/Path;Ljava/lang/String;Ljava/nio/file/Path;)Ljava/nio/file/Path; method_10493 convertNBTToSNBT - m (Ljava/nio/file/Path;)Z method_10495 func_200416_a - m (Ljava/nio/file/Path;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_10494 func_200415_a - f Lorg/apache/logging/log4j/Logger; field_11450 LOGGER - f Lnet/minecraft/class_2403; field_11449 generator -c net/minecraft/class_2463 net/minecraft/data/SNBTToNBTConverter - m (Ljava/util/List;Ljava/nio/file/Path;Ljava/nio/file/Path;)V method_22145 func_229447_a_ - m (Lnet/minecraft/class_2408;Ljava/nio/file/Path;Lnet/minecraft/class_2463$class_4511;)V method_10498 func_229445_a_ - m (Lnet/minecraft/class_2463$class_4460;)Lnet/minecraft/class_2463; method_21672 addTransformer - m (Ljava/nio/file/Path;Ljava/lang/String;)Lnet/minecraft/class_2463$class_4511; method_22144 convertSNBTToNBT - m (Ljava/lang/String;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_21673 snbtToNBT - m (Lnet/minecraft/class_2408;Lnet/minecraft/class_2463$class_4511;Ljava/nio/file/Path;)V method_10497 writeStructureSNBT - m (Ljava/nio/file/Path;Ljava/nio/file/Path;)Lnet/minecraft/class_2463$class_4511; method_22146 func_229448_b_ - m (Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/lang/String; method_10500 getFileName - m (Ljava/nio/file/Path;)Z method_10499 func_200422_a - f Ljava/util/List; field_20309 transformers - f Lorg/apache/logging/log4j/Logger; field_11454 LOGGER - f Ljava/nio/file/Path; field_24615 EMPTY - f Lnet/minecraft/class_2403; field_11453 generator -c net/minecraft/class_2463$class_4460 net/minecraft/data/SNBTToNBTConverter$ITransformer - m (Ljava/lang/String;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_21674 func_225371_a -c net/minecraft/class_2463$class_4511 net/minecraft/data/SNBTToNBTConverter$TaskResult - m (Lnet/minecraft/class_2463$class_4511;)Ljava/lang/String; method_22148 func_240516_c_ - m (Lnet/minecraft/class_2463$class_4511;)[B method_22149 func_240517_d_ - m (Lnet/minecraft/class_2463$class_4511;)Ljava/lang/String; method_22147 func_229453_b_ - m (Lnet/minecraft/class_2463$class_4511;)Ljava/lang/String; method_28117 func_229452_a_ - f Ljava/lang/String; field_20538 fileName - f Ljava/lang/String; field_20540 bytesHash - f Ljava/lang/String; field_24616 field_240515_c_ - f [B field_20539 nbtBytes -c net/minecraft/class_3843 net/minecraft/data/StructureUpdater - m (Ljava/lang/String;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_16878 updateSNBT - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_16880 addDataVersion - f Lorg/apache/logging/log4j/Logger; field_24617 LOGGER -c net/minecraft/class_2466 net/minecraft/data/BlockTagsProvider -c net/minecraft/class_2467 net/minecraft/data/EntityTypeTagsProvider -c net/minecraft/class_2469 net/minecraft/data/FluidTagsProvider -c net/minecraft/class_2471 net/minecraft/data/ItemTagsProvider - m (Lnet/minecraft/class_3494$class_5123;Lnet/minecraft/class_3494$class_5123;)V method_10505 copy - f Ljava/util/function/Function; field_23783 blockTagResolver -c net/minecraft/class_2474 net/minecraft/data/TagsProvider - m (Lnet/minecraft/class_2960;)Ljava/lang/Object; method_27049 func_240527_c_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494$class_3495; method_27170 func_240526_b_ - m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_2474$class_5124; method_10512 getOrCreateBuilder - m (Lnet/minecraft/class_2960;)Ljava/nio/file/Path; method_10510 makePath - m (Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/class_2408;Lnet/minecraft/class_2960;Lnet/minecraft/class_3494$class_3495;)V method_27046 func_240524_a_ - m (Lnet/minecraft/class_3494;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_27045 func_240523_a_ - m ()V method_10514 registerTags - m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_3494$class_3495; method_27169 createBuilderIfAbsent - f Lorg/apache/logging/log4j/Logger; field_11479 LOGGER - f Lcom/google/gson/Gson; field_11480 GSON - f Lnet/minecraft/class_2378; field_11482 registry - f Lnet/minecraft/class_2403; field_11483 generator - f Ljava/util/Map; field_11481 tagToBuilder -c net/minecraft/class_2474$1 net/minecraft/data/TagsProvider$1 -c net/minecraft/class_2474$class_5124 net/minecraft/data/TagsProvider$Builder - m ([Ljava/lang/Object;)Lnet/minecraft/class_2474$class_5124; method_26795 add - m (Lnet/minecraft/class_2960;)V method_27171 func_240533_a_ - m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_2474$class_5124; method_26792 addTag - m (Ljava/lang/Object;)Lnet/minecraft/class_2474$class_5124; method_26793 addItemEntry - f Ljava/lang/String; field_23962 id - f Lnet/minecraft/class_3494$class_3495; field_23960 builder - f Lnet/minecraft/class_2378; field_23961 registry -c net/minecraft/class_5174 net/minecraft/world/gen/feature/structure/BastionRemnantsBridgePools - m ()V method_27198 func_236254_a_ -c net/minecraft/class_5177 net/minecraft/world/gen/feature/structure/BastionRemnantsStablesPools - m ()V method_27199 func_236255_a_ -c net/minecraft/class_5178 net/minecraft/world/gen/feature/structure/BastionRemnantsMainPools - m ()V method_27200 func_236256_a_ -c net/minecraft/class_5179 net/minecraft/world/gen/feature/structure/BastionRemnantsPieces - m ()V method_27201 func_236258_a_ - f Lnet/minecraft/class_3785; field_25941 field_243686_a -c net/minecraft/class_5181 net/minecraft/world/gen/feature/structure/BastionRemnantsMobsPools - m ()V method_27203 func_236261_a_ -c net/minecraft/class_5182 net/minecraft/world/gen/feature/structure/BastionRemnantsTreasurePools - m ()V method_27204 func_236262_a_ -c net/minecraft/class_3864 net/minecraft/world/biome/DefaultBiomeFeatures - m (Lnet/minecraft/class_5485$class_5495;)V method_16958 withMountainEdgeTrees - m (Lnet/minecraft/class_5485$class_5495;)V method_17010 withDisks - m (Lnet/minecraft/class_5485$class_5495;)V method_16981 withNoiseTallGrass - m (Lnet/minecraft/class_5485$class_5495;)V method_17012 withForestRocks - m (Lnet/minecraft/class_5483$class_5496;)V method_30579 withBats - m (Lnet/minecraft/class_5485$class_5495;)V method_28439 withDebrisOre - m (Lnet/minecraft/class_5485$class_5495;)V method_16960 withJungleEdgeTrees - m (Lnet/minecraft/class_5485$class_5495;)V method_16962 withSnowySpruces - m (Lnet/minecraft/class_5485$class_5495;)V method_17014 withChanceBerries - m (Lnet/minecraft/class_5485$class_5495;)V method_17016 withLightBambooVegetation - m (Lnet/minecraft/class_5483$class_5496;)V method_30583 withDesertMobs - m (Lnet/minecraft/class_5485$class_5495;)V method_16984 withSugarCaneAndPumpkins - m (Lnet/minecraft/class_5485$class_5495;)V method_16966 withTallGrass - m (Lnet/minecraft/class_5485$class_5495;)V method_16968 withSavannaGrass - m (Lnet/minecraft/class_5485$class_5495;)V method_16986 withMelonPatchesAndVines - m (Lnet/minecraft/class_5485$class_5495;)V method_17018 withTaigaVegetation - m (Lnet/minecraft/class_5485$class_5495;)V method_28437 withBadlandsStructures - m (Lnet/minecraft/class_5485$class_5495;)V method_17020 withBirchTrees - m (Lnet/minecraft/class_5485$class_5495;)V method_28441 withOceanStructures - m (Lnet/minecraft/class_5483$class_5496;)V method_30680 withSpawnsWithHorseAndDonkey - m (Lnet/minecraft/class_5485$class_5495;)V method_16983 withCavesAndCanyons - m (Lnet/minecraft/class_5485$class_5495;)V method_16989 withDesertWells - m (Lnet/minecraft/class_5485$class_5495;)V method_16971 withForestGrass - m (Lnet/minecraft/class_5485$class_5495;)V method_17021 withForestBirchTrees - m (Lnet/minecraft/class_5485$class_5495;)V method_17002 withLavaAndWaterLakes - m (Lnet/minecraft/class_5485$class_5495;)V method_16973 withMushroomBiomeVegetation - m (Lnet/minecraft/class_5485$class_5495;)V method_17004 withMonsterRoom - m (Lnet/minecraft/class_5485$class_5495;)V method_16975 withDesertDeadBushes - m (Lnet/minecraft/class_5485$class_5495;)V method_16991 withColdKelp - m (Lnet/minecraft/class_5483$class_5496;)V method_30587 withEndermen - m (Lnet/minecraft/class_5485$class_5495;)V method_16997 withIcebergs - m (Lnet/minecraft/class_5485$class_5495;)V method_16995 withWarmKelp - m (Lnet/minecraft/class_5485$class_5495;)V method_17006 withOverworldOres - m (Lnet/minecraft/class_5485$class_5495;)V method_16977 withDefaultFlowers - m (Lnet/minecraft/class_5485$class_5495;)V method_17008 withEmeraldOre - m (Lnet/minecraft/class_5485$class_5495;)V method_16999 withFrozenTopLayer - m (Lnet/minecraft/class_5485$class_5495;)V method_16979 withBadlandsGrass - m (Lnet/minecraft/class_5485$class_5495;)V method_17024 withShatteredSavannaTrees - m (Lnet/minecraft/class_5485$class_5495;)V method_17011 withClayDisks - m (Lnet/minecraft/class_5485$class_5495;)V method_24382 withCommonNetherBlocks - m (Lnet/minecraft/class_5485$class_5495;)V method_16982 withNormalMushroomGeneration - m (Lnet/minecraft/class_5483$class_5496;)V method_30580 withPassiveMobs - m (Lnet/minecraft/class_5485$class_5495;)V method_16959 withJungleTrees - m (Lnet/minecraft/class_5485$class_5495;)V method_16961 withBadlandsOakTrees - m (Lnet/minecraft/class_5485$class_5495;)V method_17013 withLargeFern - m (Lnet/minecraft/class_5485$class_5495;)V method_17015 withSparseBerries - m (Lnet/minecraft/class_5483$class_5496;)V method_30582 withSnowyBiomeMobs - m (Lnet/minecraft/class_5485$class_5495;)V method_16965 withJungleGrass - m (Lnet/minecraft/class_5483$class_5496;)V method_30585 withMooshroomsAndBats - m (Lnet/minecraft/class_5485$class_5495;)V method_16967 withNormalGrassPatch - m (Lnet/minecraft/class_5485$class_5495;)V method_17017 withBambooVegetation - m (Lnet/minecraft/class_5485$class_5495;)V method_17019 withTreesInWater - m (Lnet/minecraft/class_5483$class_5496;)V method_30581 withBatsAndHostiles - m (Lnet/minecraft/class_5485$class_5495;)V method_16987 withDesertVegetation - m (Lnet/minecraft/class_5485$class_5495;)V method_16985 withBadlandsVegetation - m (Lnet/minecraft/class_5485$class_5495;)V method_28440 withStrongholdAndMineshaft - m (Lnet/minecraft/class_5483$class_5496;III)V method_30578 withHostileMobs - m (Lnet/minecraft/class_5485$class_5495;)V method_16969 withBadlandsGrassAndBush - m (Lnet/minecraft/class_5483$class_5496;III)V method_30679 withOceanMobs - m (Lnet/minecraft/class_5485$class_5495;)V method_16970 withAllForestFlowerGeneration - m (Lnet/minecraft/class_5485$class_5495;)V method_16972 withSwampVegetation - m (Lnet/minecraft/class_5485$class_5495;)V method_17022 withTallBirches - m (Lnet/minecraft/class_5485$class_5495;)V method_17000 withOceanCavesAndCanyons - m (Lnet/minecraft/class_5485$class_5495;)V method_16988 withSwampSugarcaneAndPumpkin - m (Lnet/minecraft/class_5485$class_5495;)V method_17003 withLavaLakes - m (Lnet/minecraft/class_5483$class_5496;)V method_30586 withSpawnsWithExtraChickens - m (Lnet/minecraft/class_5485$class_5495;)V method_16992 withSimpleSeagrass - m (Lnet/minecraft/class_5485$class_5495;)V method_16990 withFossils - m (Lnet/minecraft/class_5485$class_5495;)V method_16974 withPlainGrassVegetation - m (Lnet/minecraft/class_5485$class_5495;)V method_16976 withGiantTaigaGrassVegetation - m (Lnet/minecraft/class_5485$class_5495;)V method_16996 withLavaAndWaterSprings - m (Lnet/minecraft/class_5485$class_5495;)V method_17005 withCommonOverworldBlocks - m (Lnet/minecraft/class_5485$class_5495;)V method_17007 withExtraGoldOre - m (Lnet/minecraft/class_5485$class_5495;)V method_16978 withWarmFlowers - m (Lnet/minecraft/class_5485$class_5495;)V method_17023 withSavannaTrees - m (Lnet/minecraft/class_5485$class_5495;)V method_16980 withTaigaGrassVegetation - m (Lnet/minecraft/class_5485$class_5495;)V method_16957 withMountainTrees - m (Lnet/minecraft/class_5483$class_5496;II)V method_30678 withWarmOceanMobs - m (Lnet/minecraft/class_5485$class_5495;)V method_17009 withInfestedStone - m (Lnet/minecraft/class_5485$class_5495;)V method_16998 withBlueIce -c net/minecraft/class_5463 net/minecraft/world/gen/carver/ConfiguredCarvers - m (Ljava/lang/String;Lnet/minecraft/class_2922;)Lnet/minecraft/class_2922; method_30588 func_243773_a - f Lnet/minecraft/class_2922; field_25945 field_243770_d - f Lnet/minecraft/class_2922; field_25944 field_243769_c - f Lnet/minecraft/class_2922; field_25942 field_243767_a - f Lnet/minecraft/class_2922; field_25943 field_243768_b - f Lnet/minecraft/class_2922; field_25946 field_243771_e - f Lnet/minecraft/class_2922; field_25947 field_243772_f -c net/minecraft/class_3868 net/minecraft/world/gen/feature/structure/DesertVillagePools - m ()V method_17037 init - f Lnet/minecraft/class_3785; field_25948 field_243774_a -c net/minecraft/class_5464 net/minecraft/world/gen/feature/Features - m ()Lnet/minecraft/class_2975; method_30598 func_243976_i - m ()Lnet/minecraft/class_2975; method_30591 func_243969_b - m ()Lnet/minecraft/class_2975; method_30589 func_243967_a - m ()Lnet/minecraft/class_2975; method_30593 func_243971_d - m ()Lnet/minecraft/class_2975; method_30592 func_243970_c - m (Ljava/lang/String;Lnet/minecraft/class_2975;)Lnet/minecraft/class_2975; method_30590 register - m ()Lnet/minecraft/class_2975; method_30595 func_243973_f - m ()Lnet/minecraft/class_2975; method_30594 func_243972_e - m ()Lnet/minecraft/class_2975; method_30597 func_243975_h - m ()Lnet/minecraft/class_2975; method_30596 func_243974_g - f Lnet/minecraft/class_2975; field_26111 FOREST_FLOWER_TREES - f Lnet/minecraft/class_2975; field_26131 NETHER_SPROUTS - f Lnet/minecraft/class_2975; field_25981 PATCH_MELON - f Lnet/minecraft/class_2975; field_25974 FOSSIL - f Lnet/minecraft/class_2975; field_25951 SEA_PICKLE - f Lnet/minecraft/class_2975; field_26085 TREES_GIANT_SPRUCE - f Lnet/minecraft/class_2975; field_26059 ORE_MAGMA - f Lnet/minecraft/class_2975; field_26040 END_SPIKE - f Lnet/minecraft/class_2975; field_26096 FANCY_OAK_BEES_002 - f Lnet/minecraft/class_2975; field_25959 KELP_WARM - f Lnet/minecraft/class_2975; field_26067 ORE_DIRT - f Lnet/minecraft/class_2975; field_26050 SWAMP_TREE - f Lnet/minecraft/class_2975; field_26022 PATCH_BERRY_BUSH - f Lnet/minecraft/class_2975; field_26034 HUGE_BROWN_MUSHROOM - f Lnet/minecraft/class_2975; field_26007 SPRING_OPEN - f Lnet/minecraft/class_2975; field_26139 SEAGRASS_DEEP - f Lnet/minecraft/class_2975; field_25990 PATCH_CACTUS_DESERT - f Lnet/minecraft/class_2975; field_26043 JUNGLE_TREE - f Lnet/minecraft/class_2975; field_26015 PATCH_SOUL_FIRE - f Lnet/minecraft/class_2975; field_25998 BROWN_MUSHROOM_NORMAL - f Lnet/minecraft/class_2975; field_26124 LARGE_BASALT_COLUMNS - f Lnet/minecraft/class_2975; field_26104 FLOWER_PLAIN - f Lnet/minecraft/class_2975; field_25967 DISK_GRAVEL - f Lnet/minecraft/class_2975; field_26075 ORE_GOLD - f Lnet/minecraft/class_2975; field_26110 WARM_OCEAN_VEGETATION - f Lnet/minecraft/class_2975; field_25980 PATCH_DEAD_BUSH_BADLANDS - f Lnet/minecraft/class_2975; field_26130 WARPED_FOREST_VEGETATION - f Lnet/minecraft/class_2975; field_26028 ORE_DEBRIS_LARGE - f Lnet/minecraft/class_2975; field_25973 DESERT_WELL - f Lnet/minecraft/class_2975; field_26117 TREES_MOUNTAIN - f Lnet/minecraft/class_2975; field_25989 PATCH_CACTUS - f Lnet/minecraft/class_2975; field_26138 SEAGRASS_RIVER - f Lnet/minecraft/class_2975; field_26095 FANCY_OAK_BEES_0002 - f Lnet/minecraft/class_2975; field_25958 KELP_COLD - f Lnet/minecraft/class_2975; field_26066 ORE_BLACKSTONE - f Lnet/minecraft/class_2975; field_26049 SUPER_BIRCH_BEES_0002 - f Lnet/minecraft/class_2975; field_26021 PATCH_TAIGA_GRASS - f Lnet/minecraft/class_2975; field_25966 DISK_CLAY - f Lnet/minecraft/class_2975; field_26074 ORE_GOLD_EXTRA - f Lnet/minecraft/class_2975; field_26033 WARPED_FUNGI_PLANTED - f Lnet/minecraft/class_2975; field_26006 SPRING_CLOSED_DOUBLE - f Lnet/minecraft/class_2975; field_26042 PINE - f Lnet/minecraft/class_2975; field_26014 PATCH_FIRE - f Lnet/minecraft/class_2975; field_25997 RED_MUSHROOM_NETHER - f Lnet/minecraft/class_2975; field_26103 FLOWER_SWAMP - f Lnet/minecraft/class_2975; field_26123 SMALL_BASALT_COLUMNS - f Lnet/minecraft/class_2975; field_25983 PATCH_BERRY_DECORATED - f Lnet/minecraft/class_2975; field_26087 TREES_JUNGLE - f Lnet/minecraft/class_2975; field_26061 ORE_GOLD_DELTAS - f Lnet/minecraft/class_2975; field_25953 ICE_PATCH - f Lnet/minecraft/class_2975; field_26044 FANCY_OAK - f Lnet/minecraft/class_2975; field_26016 PATCH_BROWN_MUSHROOM - f Lnet/minecraft/class_2975; field_26069 ORE_GRANITE - f Lnet/minecraft/class_2975; field_25961 BAMBOO_LIGHT - f Lnet/minecraft/class_2975; field_26052 OAK_BEES_0002 - f Lnet/minecraft/class_2975; field_26024 PATCH_GRASS_FOREST - f Lnet/minecraft/class_2975; field_26133 WEEPING_VINES - f Lnet/minecraft/class_2975; field_26113 TREES_SHATTERED_SAVANNA - f Lnet/minecraft/class_2975; field_26036 OAK - f Lnet/minecraft/class_2975; field_26009 PILE_HAY - f Lnet/minecraft/class_2975; field_25949 SEAGRASS_WARM - f Lnet/minecraft/class_2975; field_25992 PATCH_SUGAR_CANE_SWAMP - f Lnet/minecraft/class_2975; field_26098 OAK_BADLANDS - f Lnet/minecraft/class_2975; field_26118 END_GATEWAY_DELAYED - f Lnet/minecraft/class_2975; field_26000 BROWN_MUSHROOM_TAIGA - f Lnet/minecraft/class_2975; field_26106 FOREST_FLOWER_VEGETATION_COMMON - f Lnet/minecraft/class_2975; field_25976 PATCH_GRASS_TAIGA - f Lnet/minecraft/class_2975; field_26126 BLACKSTONE_BLOBS - f Lnet/minecraft/class_2975; field_26077 ORE_DIAMOND - f Lnet/minecraft/class_2975; field_25969 FREEZE_TOP_LAYER - f Lnet/minecraft/class_2975; field_26132 TWISTING_VINES - f Lnet/minecraft/class_2975; field_26112 TAIGA_VEGETATION - f Lnet/minecraft/class_2975; field_25982 PATCH_BERRY_SPARSE - f Lnet/minecraft/class_2975; field_26002 SPRING_LAVA_DOUBLE - f Lnet/minecraft/class_2975; field_26086 TREES_GIANT - f Lnet/minecraft/class_2975; field_26060 ORE_SOUL_SAND - f Lnet/minecraft/class_2975; field_25952 ICE_SPIKE - f Lcom/google/common/collect/ImmutableList; field_26090 FOREST_FLOWER_VEGETATION_LIST - f Lnet/minecraft/class_2975; field_26068 ORE_GRAVEL - f Lnet/minecraft/class_2975; field_25960 BLUE_ICE - f Lnet/minecraft/class_2975; field_26051 JUNGLE_BUSH - f Lnet/minecraft/class_2975; field_26023 PATCH_GRASS_PLAIN - f Lnet/minecraft/class_2975; field_26035 HUGE_RED_MUSHROOM - f Lnet/minecraft/class_2975; field_26008 SPRING_WATER - f Lnet/minecraft/class_2975; field_26140 SEAGRASS_SWAMP - f Lnet/minecraft/class_2975; field_25991 PATCH_CACTUS_DECORATED - f Lnet/minecraft/class_2975; field_26091 END_GATEWAY - f Lnet/minecraft/class_2975; field_26097 FANCY_OAK_BEES_005 - f Lnet/minecraft/class_2975; field_25999 RED_MUSHROOM_NORMAL - f Lnet/minecraft/class_2975; field_26125 BASALT_BLOBS - f Lnet/minecraft/class_2975; field_26105 FLOWER_PLAIN_DECORATED - f Lnet/minecraft/class_2975; field_26076 ORE_REDSTONE - f Lnet/minecraft/class_2975; field_25968 DISK_SAND - f Lnet/minecraft/class_2975; field_25955 SEAGRASS_SIMPLE - f Lnet/minecraft/class_2975; field_26089 MUSHROOM_FIELD_VEGETATION - f Lnet/minecraft/class_2975; field_26063 ORE_GOLD_NETHER - f Lnet/minecraft/class_2975; field_26046 MEGA_JUNGLE_TREE - f Lnet/minecraft/class_2975; field_26018 PATCH_CRIMSON_ROOTS - f Lnet/minecraft/class_2975; field_26001 RED_MUSHROOM_TAIGA - f Lnet/minecraft/class_2975; field_26054 OAK_BEES_005 - f Lnet/minecraft/class_2975; field_26026 PATCH_GRASS_SAVANNA - f Lnet/minecraft/class_2975; field_26030 CRIMSON_FUNGI - f Lnet/minecraft/class_2975; field_26003 SPRING_LAVA - f Lnet/minecraft/class_2975; field_26115 BIRCH_TALL - f Lnet/minecraft/class_2975; field_26135 SEAGRASS_COLD - f Lnet/minecraft/class_2975; field_25985 PATCH_TALL_GRASS_2 - f Lnet/minecraft/class_2975; field_25994 PATCH_SUGAR_CANE_BADLANDS - f Lnet/minecraft/class_2975; field_26120 END_ISLAND - f Lnet/minecraft/class_2975; field_26100 FLOWER_WARM - f Lnet/minecraft/class_2975; field_25963 VINES - f Lnet/minecraft/class_2975; field_26071 ORE_ANDESITE - f Lnet/minecraft/class_2975; field_25971 VOID_START_PLATFORM - f Lnet/minecraft/class_2975; field_26079 ORE_INFESTED - f Lnet/minecraft/class_2975; field_26082 BIRCH_OTHER - f Lnet/minecraft/class_2975; field_26056 RED_MUSHROOM_GIANT - f Lnet/minecraft/class_2975; field_26038 BIRCH - f Lnet/minecraft/class_2975; field_26011 PILE_SNOW - f Lnet/minecraft/class_2975; field_25954 FOREST_ROCK - f Lnet/minecraft/class_2975; field_26088 BAMBOO_VEGETATION - f Lnet/minecraft/class_2975; field_26062 ORE_QUARTZ_DELTAS - f Lnet/minecraft/class_2975; field_26045 JUNGLE_TREE_NO_VINE - f Lnet/minecraft/class_2975; field_26017 PATCH_RED_MUSHROOM - f Lnet/minecraft/class_2975; field_26053 OAK_BEES_002 - f Lnet/minecraft/class_2975; field_26025 PATCH_GRASS_BADLANDS - f Lnet/minecraft/class_2975; field_26029 ORE_DEBRIS_SMALL - f Lnet/minecraft/class_2975; field_26114 TREES_SAVANNA - f Lnet/minecraft/class_2975; field_25984 PATCH_WATERLILLY - f Lnet/minecraft/class_2975; field_26134 BASALT_PILLAR - f Lnet/minecraft/class_2975; field_26037 DARK_OAK - f Lnet/minecraft/class_2975; field_26010 PILE_MELON - f Lnet/minecraft/class_2975; field_25993 PATCH_SUGAR_CANE_DESERT - f Lnet/minecraft/class_2975; field_26099 SPRUCE_SNOWY - f Lnet/minecraft/class_2975; field_26119 CHORUS_PLANT - f Lnet/minecraft/class_2975; field_25962 BAMBOO - f Lnet/minecraft/class_2975; field_26070 ORE_DIORITE - f Lnet/minecraft/class_2975; field_26107 FOREST_FLOWER_VEGETATION - f Lnet/minecraft/class_2975; field_26127 GLOWSTONE_EXTRA - f Lnet/minecraft/class_2975; field_25977 PATCH_GRASS_JUNGLE - f Lnet/minecraft/class_2975; field_25970 BONUS_CHEST - f Lnet/minecraft/class_2975; field_26078 ORE_LAPIS - f Lnet/minecraft/class_2975; field_26081 TREES_WATER - f Lnet/minecraft/class_2975; field_26048 MEGA_PINE - f Lnet/minecraft/class_2975; field_26020 PATCH_PUMPKIN - f Lnet/minecraft/class_2975; field_26129 CRIMSON_FOREST_VEGETATION - f Lnet/minecraft/class_2975; field_26109 DARK_FOREST_VEGETATION_RED - f Lnet/minecraft/class_2975; field_25979 PATCH_DEAD_BUSH - f Lnet/minecraft/class_2975; field_26137 SEAGRASS_NORMAL - f Lnet/minecraft/class_2975; field_26116 TREES_MOUNTAIN_EDGE - f Lnet/minecraft/class_2975; field_25988 PATCH_LARGE_FERN - f Lnet/minecraft/class_2975; field_26094 BIRCH_BEES_005 - f Lnet/minecraft/class_2975; field_26065 ORE_GRAVEL_NETHER - f Lnet/minecraft/class_2975; field_25957 ICEBERG_BLUE - f Lnet/minecraft/class_2975; field_26102 FLOWER_FOREST - f Lnet/minecraft/class_2975; field_26122 DELTA - f Lnet/minecraft/class_2975; field_26073 ORE_IRON - f Lnet/minecraft/class_2975; field_25965 LAKE_LAVA - f Lnet/minecraft/class_2975; field_25975 PATCH_GRASS_TAIGA_2 - f Lnet/minecraft/class_2975; field_26032 WARPED_FUNGI - f Lnet/minecraft/class_2975; field_26005 SPRING_CLOSED - f Lnet/minecraft/class_2975; field_25950 SEAGRASS_DEEP_WARM - f Lnet/minecraft/class_2975; field_26084 TREES_JUNGLE_EDGE - f Lnet/minecraft/class_2975; field_26058 RED_MUSHROOM_SWAMP - f Lnet/minecraft/class_2975; field_26041 SPRUCE - f Lnet/minecraft/class_2975; field_26013 PILE_PUMPKIN - f Lnet/minecraft/class_2975; field_25996 BROWN_MUSHROOM_NETHER - f Lnet/minecraft/class_2975; field_26064 ORE_QUARTZ_NETHER - f Lnet/minecraft/class_2975; field_25956 ICEBERG_PACKED - f Lnet/minecraft/class_2975; field_26047 MEGA_SPRUCE - f Lnet/minecraft/class_2975; field_26019 PATCH_SUNFLOWER - f Lnet/minecraft/class_2975; field_26055 BROWN_MUSHROOM_GIANT - f Lnet/minecraft/class_2975; field_26128 GLOWSTONE - f Lnet/minecraft/class_2975; field_26108 DARK_FOREST_VEGETATION_BROWN - f Lnet/minecraft/class_2975; field_25978 PATCH_DEAD_BUSH_2 - f Lnet/minecraft/class_2975; field_26031 CRIMSON_FUNGI_PLANTED - f Lnet/minecraft/class_2975; field_26004 SPRING_DELTA - f Lnet/minecraft/class_2975; field_26136 SEAGRASS_DEEP_COLD - f Lnet/minecraft/class_2975; field_26376 TREES_BIRCH - f Lnet/minecraft/class_2975; field_25986 PATCH_TALL_GRASS - f Lnet/minecraft/class_2975; field_26093 BIRCH_BEES_002 - f Lnet/minecraft/class_2975; field_26121 END_ISLAND_DECORATED - f Lnet/minecraft/class_2975; field_26101 FLOWER_DEFAULT - f Lnet/minecraft/class_2975; field_26072 ORE_COAL - f Lnet/minecraft/class_2975; field_25964 LAKE_WATER - f Lnet/minecraft/class_2975; field_26092 BIRCH_BEES_0002 - f Lnet/minecraft/class_2975; field_26027 PATCH_GRASS_NORMAL - f Lnet/minecraft/class_2975; field_26080 ORE_EMERALD - f Lnet/minecraft/class_2975; field_25972 MONSTER_ROOM - f Lnet/minecraft/class_2975; field_26083 PLAIN_VEGETATION - f Lnet/minecraft/class_2975; field_26057 BROWN_MUSHROOM_SWAMP - f Lnet/minecraft/class_2975; field_26039 ACACIA - f Lnet/minecraft/class_2975; field_26012 PILE_ICE - f Lnet/minecraft/class_2975; field_25995 PATCH_SUGAR_CANE -c net/minecraft/class_5464$class_5465 net/minecraft/world/gen/feature/Features$Configs - f Lnet/minecraft/class_4634; field_26152 WARPED_FOREST_VEGETATION_CONFIG - f Lnet/minecraft/class_4638; field_26145 DEAD_BUSH_CONFIG - f Lnet/minecraft/class_4634; field_26153 NETHER_SPROUTS_CONFIG - f Lnet/minecraft/class_4642; field_26149 LAVA_SPRING_CONFIG - f Lnet/minecraft/class_4638; field_26146 BERRY_BUSH_PATCH_CONFIG - f Lnet/minecraft/class_4638; field_26141 GRASS_PATCH_CONFIG - f Lnet/minecraft/class_4638; field_26142 TAIGA_GRASS_CONFIG - f Lnet/minecraft/class_4642; field_26150 CLOSED_SPRING_CONFIG - f Lnet/minecraft/class_4638; field_26147 TALL_GRASS_CONFIG - f Lnet/minecraft/class_4638; field_26148 SUGAR_CANE_PATCH_CONFIG - f Lnet/minecraft/class_4638; field_26143 JUNGLE_VEGETATION_CONFIG - f Lnet/minecraft/class_4634; field_26151 CRIMSON_FOREST_VEGETATION_CONFIG - f Lnet/minecraft/class_4638; field_26144 NORMAL_FLOWER_CONFIG -c net/minecraft/class_5464$class_5466 net/minecraft/world/gen/feature/Features$Placements - f Lnet/minecraft/class_4659; field_26154 BEES_0002_PLACEMENT - f Lnet/minecraft/class_3243; field_26165 HEIGHTMAP_PLACEMENT - f Lnet/minecraft/class_3243; field_26166 PATCH_PLACEMENT - f Lnet/minecraft/class_4659; field_26155 BEES_002_PLACEMENT - f Lnet/minecraft/class_4659; field_26156 BEES_005_PLACEMENT - f Lnet/minecraft/class_3243; field_26162 NETHER_SPRING_ORE_PLACEMENT - f Lnet/minecraft/class_3243; field_26163 SPRING_PLACEMENT - f Lnet/minecraft/class_3243; field_26164 VEGETATION_PLACEMENT - f Lnet/minecraft/class_3243; field_26159 KELP_PLACEMENT - f Lnet/minecraft/class_3243; field_26160 BAMBOO_PLACEMENT - f Lnet/minecraft/class_3243; field_26161 HEIGHTMAP_SPREAD_DOUBLE_PLACEMENT - f Lnet/minecraft/class_3243; field_26167 SEAGRASS_DISK_PLACEMENT - f Lnet/minecraft/class_3243; field_26157 FIRE_PLACEMENT - f Lnet/minecraft/class_3243; field_26158 FLOWER_TALL_GRASS_PLACEMENT -c net/minecraft/class_5464$class_5467 net/minecraft/world/gen/feature/Features$States - f Lnet/minecraft/class_2680; field_26223 SOUL_SAND - f Lnet/minecraft/class_2680; field_26202 WATER_BLOCK - f Lnet/minecraft/class_2680; field_26246 LARGE_FERN - f Lnet/minecraft/class_2680; field_26178 SWEET_BERRY_BUSH - f Lnet/minecraft/class_2680; field_26174 DANDELION - f Lnet/minecraft/class_2680; field_26221 SEAGRASS - f Lnet/minecraft/class_2680; field_26244 DARK_OAK_LEAVES - f Lnet/minecraft/class_2680; field_26219 CLAY - f Lnet/minecraft/class_2680; field_26176 MELON - f Lnet/minecraft/class_2680; field_26240 ACACIA_LEAVES - f Lnet/minecraft/class_3610; field_26193 WATER - f Lnet/minecraft/class_2680; field_26172 BLUE_ORCHID - f Lnet/minecraft/class_2680; field_26242 BIRCH_LEAVES - f Lnet/minecraft/class_2680; field_26217 INFESTED_STONE - f Lnet/minecraft/class_2680; field_26215 STONE - f Lnet/minecraft/class_2680; field_26191 BROWN_MUSHROOM_BLOCK_UP - f Lnet/minecraft/class_2680; field_26238 SPRUCE_LEAVES - f Lnet/minecraft/class_2680; field_26198 WARPED_ROOTS - f Lnet/minecraft/class_2680; field_26196 CRIMSON_FUNGUS - f Lnet/minecraft/class_2680; field_26170 BLUE_ICE - f Lnet/minecraft/class_2680; field_26235 JUNGLE_LOG - f Lnet/minecraft/class_2680; field_26212 REDSTONE_ORE - f Lnet/minecraft/class_2680; field_26195 BASALT - f Lnet/minecraft/class_2680; field_26188 CACTUS - f Lnet/minecraft/class_2680; field_26237 SPRUCE_LOG - f Lnet/minecraft/class_2680; field_26233 OAK_LOG - f Lnet/minecraft/class_2680; field_26210 IRON_ORE - f Lnet/minecraft/class_2680; field_26208 ANDESITE - f Lnet/minecraft/class_2680; field_26186 JACK_O_LANTERN - f Lnet/minecraft/class_2680; field_26182 SOUL_SOIL - f Lnet/minecraft/class_2680; field_26231 SNOW_BLOCK - f Lnet/minecraft/class_2680; field_26206 GRANITE - f Lnet/minecraft/class_2680; field_26184 LILY_PAD - f Lnet/minecraft/class_2680; field_26227 FERN - f Lnet/minecraft/class_2680; field_26204 DIRT - f Lnet/minecraft/class_2680; field_26248 LILAC - f Lnet/minecraft/class_2680; field_26180 SOUL_FIRE - f Lnet/minecraft/class_2680; field_26229 COARSE_DIRT - f Lnet/minecraft/class_2680; field_26250 PEONY - f Lnet/minecraft/class_2680; field_26225 NETHER_QUARTZ_ORE - f Lnet/minecraft/class_2680; field_26177 PUMPKIN - f Lnet/minecraft/class_2680; field_26247 TALL_GRASS - f Lnet/minecraft/class_2680; field_26222 MAGMA_BLOCK - f Lnet/minecraft/class_3610; field_26201 LAVA - f Lnet/minecraft/class_2680; field_26179 FIRE - f Lnet/minecraft/class_2680; field_26200 GRASS - f Lnet/minecraft/class_2680; field_26243 DARK_OAK_LOG - f Lnet/minecraft/class_2680; field_26220 MOSSY_COBBLESTONE - f Lnet/minecraft/class_2680; field_26175 DEAD_BUSH - f Lnet/minecraft/class_2680; field_26245 GRASS_BLOCK - f Lnet/minecraft/class_2680; field_26241 BIRCH_LOG - f Lnet/minecraft/class_2680; field_26218 SAND - f Lnet/minecraft/class_2680; field_26216 EMERALD_ORE - f Lnet/minecraft/class_2680; field_26173 POPPY - f Lnet/minecraft/class_2680; field_26199 NETHER_SPROUTS - f Lnet/minecraft/class_2680; field_26197 WARPED_FUNGUS - f Lnet/minecraft/class_2680; field_26169 PACKED_ICE - f Lnet/minecraft/class_2680; field_26190 RED_MUSHROOM_BLOCK_DOWN - f Lnet/minecraft/class_2680; field_26239 ACACIA_LOG - f Lnet/minecraft/class_2680; field_26214 LAPIS_ORE - f Lnet/minecraft/class_2680; field_26171 LILY_OF_THE_VALLEY - f Lnet/minecraft/class_2680; field_26192 MUSHROOM_STEM - f Lnet/minecraft/class_2680; field_26213 DIAMOND_ORE - f Lnet/minecraft/class_2680; field_26189 SUGAR_CANE - f Lnet/minecraft/class_2680; field_26236 JUNGLE_LEAVES - f Lnet/minecraft/class_2680; field_26211 GOLD_ORE - f Lnet/minecraft/class_2680; field_26194 ANCIENT_DEBRIS - f Lnet/minecraft/class_2680; field_26168 RED_MUSHROOM - f Lnet/minecraft/class_2680; field_26185 SNOW - f Lnet/minecraft/class_2680; field_26232 ICE - f Lnet/minecraft/class_2680; field_26187 SUNFLOWER - f Lnet/minecraft/class_2680; field_26234 OAK_LEAVES - f Lnet/minecraft/class_2680; field_26209 COAL_ORE - f Lnet/minecraft/class_2680; field_26251 BROWN_MUSHROOM - f Lnet/minecraft/class_2680; field_26207 DIORITE - f Lnet/minecraft/class_2680; field_26183 CRIMSON_ROOTS - f Lnet/minecraft/class_2680; field_26230 MYCELIUM - f Lnet/minecraft/class_2680; field_26249 ROSE_BUSH - f Lnet/minecraft/class_2680; field_26226 BLACKSTONE - f Lnet/minecraft/class_2680; field_26205 GRAVEL - f Lnet/minecraft/class_2680; field_26224 NETHER_GOLD_ORE - f Lnet/minecraft/class_2680; field_26181 NETHERRACK - f Lnet/minecraft/class_2680; field_26228 PODZOL - f Lnet/minecraft/class_2680; field_26203 LAVA_BLOCK -c net/minecraft/class_3791 net/minecraft/world/gen/feature/structure/PillagerOutpostPools - m ()V method_27235 func_244089_a - f Lnet/minecraft/class_3785; field_26252 field_244088_a -c net/minecraft/class_3815 net/minecraft/world/gen/feature/structure/PlainsVillagePools - m ()V method_16754 init - f Lnet/minecraft/class_3785; field_26253 field_244090_a -c net/minecraft/class_5468 net/minecraft/world/gen/feature/jigsaw/JigsawPatternRegistry - m (Lnet/minecraft/class_3785;)Lnet/minecraft/class_3785; method_30600 func_244094_a - m ()Lnet/minecraft/class_3785; method_30599 func_244093_a - f Lnet/minecraft/class_3785; field_26255 field_244092_b - f Lnet/minecraft/class_5321; field_26254 field_244091_a -c net/minecraft/class_5469 net/minecraft/world/gen/feature/template/ProcessorLists - m (Ljava/lang/String;Lcom/google/common/collect/ImmutableList;)Lnet/minecraft/class_5497; method_30601 func_244127_a - f Lnet/minecraft/class_5497; field_26260 field_244103_c - f Lnet/minecraft/class_5497; field_26280 field_244124_x - f Lnet/minecraft/class_5497; field_26281 field_244125_y - f Lnet/minecraft/class_5497; field_26279 field_244123_w - f Lnet/minecraft/class_5497; field_26259 field_244102_b - f Lnet/minecraft/class_5497; field_26688 field_244101_a - f Lnet/minecraft/class_5497; field_26278 field_244122_v - f Lnet/minecraft/class_5497; field_26276 field_244120_t - f Lnet/minecraft/class_5497; field_26277 field_244121_u - f Lnet/minecraft/class_3821; field_26621 field_244099_E - f Lnet/minecraft/class_5497; field_26265 field_244108_h - f Lnet/minecraft/class_5497; field_26266 field_244109_i - f Lnet/minecraft/class_3821; field_26622 field_244100_F - f Lnet/minecraft/class_5497; field_26264 field_244107_g - f Lnet/minecraft/class_5497; field_26263 field_244106_f - f Lnet/minecraft/class_5497; field_26261 field_244104_d - f Lnet/minecraft/class_5497; field_26262 field_244105_e - f Lnet/minecraft/class_5497; field_26282 field_244126_z - f Lnet/minecraft/class_5497; field_26256 field_244097_C - f Lnet/minecraft/class_5497; field_26271 field_244114_n - f Lnet/minecraft/class_5497; field_26269 field_244112_l - f Lnet/minecraft/class_5497; field_26270 field_244113_m - f Lnet/minecraft/class_5497; field_26284 field_244096_B - f Lnet/minecraft/class_5497; field_26268 field_244111_k - f Lnet/minecraft/class_5497; field_26283 field_244095_A - f Lnet/minecraft/class_5497; field_26267 field_244110_j - f Lnet/minecraft/class_5497; field_26275 field_244119_s - f Lnet/minecraft/class_5497; field_26689 field_244118_r - f Lnet/minecraft/class_5497; field_26273 field_244116_p - f Lnet/minecraft/class_5497; field_26274 field_244117_q - f Lnet/minecraft/class_5497; field_26272 field_244115_o - f Lnet/minecraft/class_5497; field_26257 field_244098_D -c net/minecraft/class_3834 net/minecraft/world/gen/feature/structure/SavannaVillagePools - m ()V method_16844 init - f Lnet/minecraft/class_3785; field_26285 field_244128_a -c net/minecraft/class_3836 net/minecraft/world/gen/feature/structure/SnowyVillagePools - m ()V method_16845 init - f Lnet/minecraft/class_3785; field_26286 field_244129_a -c net/minecraft/class_5470 net/minecraft/world/gen/feature/structure/StructureFeatures - m ()Lnet/minecraft/class_3785; method_30604 func_244163_b - m ()Lnet/minecraft/class_3785; method_30605 func_244164_c - m ()Lnet/minecraft/class_3785; method_30602 func_244161_a - m ()Lnet/minecraft/class_3785; method_30608 func_244167_f - m ()Lnet/minecraft/class_3785; method_30609 func_244168_g - m ()Lnet/minecraft/class_3785; method_30607 func_244166_e - m ()Lnet/minecraft/class_3785; method_30606 func_244165_d - m (Ljava/lang/String;Lnet/minecraft/class_5312;)Lnet/minecraft/class_5312; method_30603 register - f Lnet/minecraft/class_5312; field_26298 IGLOO - f Lnet/minecraft/class_5312; field_26297 DESERT_PYRAMID - f Lnet/minecraft/class_5312; field_26295 MANSION - f Lnet/minecraft/class_5312; field_26296 JUNGLE_PYRAMID - f Lnet/minecraft/class_5312; field_26317 RUINED_PORTAL_DESERT - f Lnet/minecraft/class_5312; field_26294 MINESHAFT_BADLANDS - f Lnet/minecraft/class_5312; field_26315 VILLAGE_TAIGA - f Lnet/minecraft/class_5312; field_26316 RUINED_PORTAL - f Lnet/minecraft/class_5312; field_26303 MONUMENT - f Lnet/minecraft/class_5312; field_26304 OCEAN_RUIN_COLD - f Lnet/minecraft/class_5312; field_26288 RUINED_PORTAL_SWAMP - f Lnet/minecraft/class_5312; field_26302 STRONGHOLD - f Lnet/minecraft/class_5312; field_26287 RUINED_PORTAL_JUNGLE - f Lnet/minecraft/class_5312; field_26301 SWAMP_HUT - f Lnet/minecraft/class_5312; field_26299 SHIPWRECK - f Lnet/minecraft/class_5312; field_26300 SHIPWRECK_BEACHED - f Lnet/minecraft/class_5312; field_26309 BURIED_TREASURE - f Lnet/minecraft/class_5312; field_26307 NETHER_FOSSIL - f Lnet/minecraft/class_5312; field_26308 END_CITY - f Lnet/minecraft/class_5312; field_26306 FORTRESS - f Lnet/minecraft/class_5312; field_26290 RUINED_PORTAL_OCEAN - f Lnet/minecraft/class_5312; field_26291 RUINED_PORTAL_NETHER - f Lnet/minecraft/class_5312; field_26289 RUINED_PORTAL_MOUNTAIN - f Lnet/minecraft/class_5312; field_26305 OCEAN_RUIN_WARM - f Lnet/minecraft/class_5312; field_26314 VILLAGE_SNOWY - f Lnet/minecraft/class_5312; field_26293 MINESHAFT - f Lnet/minecraft/class_5312; field_26292 PILLAGER_OUTPOST - f Lnet/minecraft/class_5312; field_26313 VILLAGE_SAVANNA - f Lnet/minecraft/class_5312; field_26311 VILLAGE_PLAINS - f Lnet/minecraft/class_5312; field_26312 VILLAGE_DESERT - f Lnet/minecraft/class_5312; field_26310 BASTION_REMNANT -c net/minecraft/class_5471 net/minecraft/world/gen/surfacebuilders/ConfiguredSurfaceBuilders - m (Ljava/lang/String;Lnet/minecraft/class_3504;)Lnet/minecraft/class_3504; method_30610 func_244192_a - f Lnet/minecraft/class_3504; field_26333 field_244184_p - f Lnet/minecraft/class_3504; field_26334 field_244185_q - f Lnet/minecraft/class_3504; field_26323 field_244174_f - f Lnet/minecraft/class_3504; field_26332 field_244183_o - f Lnet/minecraft/class_3504; field_26321 field_244172_d - f Lnet/minecraft/class_3504; field_26322 field_244173_e - f Lnet/minecraft/class_3504; field_26320 field_244171_c - f Lnet/minecraft/class_3504; field_26331 field_244182_n - f Lnet/minecraft/class_3504; field_26340 field_244191_w - f Lnet/minecraft/class_3504; field_26329 field_244180_l - f Lnet/minecraft/class_3504; field_26330 field_244181_m - f Lnet/minecraft/class_3504; field_26319 field_244170_b - f Lnet/minecraft/class_3504; field_26328 field_244179_k - f Lnet/minecraft/class_3504; field_26318 field_244169_a - f Lnet/minecraft/class_3504; field_26339 field_244190_v - f Lnet/minecraft/class_3504; field_26337 field_244188_t - f Lnet/minecraft/class_3504; field_26338 field_244189_u - f Lnet/minecraft/class_3504; field_26327 field_244178_j - f Lnet/minecraft/class_3504; field_26336 field_244187_s - f Lnet/minecraft/class_3504; field_26325 field_244176_h - f Lnet/minecraft/class_3504; field_26326 field_244177_i - f Lnet/minecraft/class_3504; field_26324 field_244175_g - f Lnet/minecraft/class_3504; field_26335 field_244186_r -c net/minecraft/class_3870 net/minecraft/world/gen/feature/structure/TaigaVillagePools - m ()V method_17038 init - f Lnet/minecraft/class_3785; field_26341 field_244193_a -c net/minecraft/class_3813 net/minecraft/world/gen/feature/structure/VillagesPools - m ()V method_27221 func_244194_a -c net/minecraft/class_5475 net/minecraft/data/BiomeProvider - m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959; method_30681 func_244198_a - m (Ljava/nio/file/Path;Lnet/minecraft/class_2960;)Ljava/nio/file/Path; method_30682 getPath - f Lcom/google/gson/Gson; field_26378 GSON - f Lnet/minecraft/class_2403; field_26379 generator - f Lorg/apache/logging/log4j/Logger; field_26377 LOGGER -c net/minecraft/class_5504 net/minecraft/world/biome/BiomeRegistry - m (ILnet/minecraft/class_5321;Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959; method_31145 register - m (I)Lnet/minecraft/class_5321; method_31144 getKeyFromID - f Lnet/minecraft/class_1959; field_26734 PLAINS - f Lnet/minecraft/class_1959; field_26735 THE_VOID - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_26736 idToKeyMap -c net/minecraft/class_5478 net/minecraft/world/biome/BiomeMaker - m (Lnet/minecraft/class_3504;FFZZ)Lnet/minecraft/class_1959; method_30700 makeGenericBadlandsBiome - m ()Lnet/minecraft/class_1959; method_30707 makeModifiedJungleEdgeBiome - m (FFZ)Lnet/minecraft/class_1959; method_30691 makeBirchForestBiome - m ()Lnet/minecraft/class_1959; method_30683 makeJungleBiome - m ()Lnet/minecraft/class_1959; method_30730 makeCrimsonForestBiome - m (FFZ)Lnet/minecraft/class_1959; method_30705 makeDarkForestBiome - m ()Lnet/minecraft/class_1959; method_30728 makeSoulSandValleyBiome - m (FFLnet/minecraft/class_3504;Z)Lnet/minecraft/class_1959; method_30690 makeMountainBiome - m ()Lnet/minecraft/class_1959; method_30715 makeBambooJungleHillsBiome - m (FFZLnet/minecraft/class_5483$class_5496;)Lnet/minecraft/class_1959; method_30711 makeGenericForestBiome - m ()Lnet/minecraft/class_1959; method_30713 makeJungleHillsBiome - m (FF)Lnet/minecraft/class_1959; method_30684 makeMushroomBiome - m (FFFZZ)Lnet/minecraft/class_1959; method_30694 makeGenericSavannaBiome - m (FFFZ)Lnet/minecraft/class_1959; method_30687 makeGiantTaigaBiome - m (FF)Lnet/minecraft/class_1959; method_30704 makeForestBiome - m ()Lnet/minecraft/class_1959; method_30721 makeSavannaPlateauBiome - m (Lnet/minecraft/class_5483$class_5496;IIZLnet/minecraft/class_5485$class_5495;)Lnet/minecraft/class_1959; method_30692 makeGenericOceanBiome - m ()Lnet/minecraft/class_1959; method_30719 makeEndHighlandsBiome - m (FFFZZZLnet/minecraft/class_5483$class_5496;)Lnet/minecraft/class_1959; method_30695 makeTropicalBiome - m ()Lnet/minecraft/class_1959; method_30717 makeTheEndBiome - m ()Lnet/minecraft/class_1959; method_30727 makeNetherWastesBiome - m (FFFZZLnet/minecraft/class_5483$class_5496;)Lnet/minecraft/class_1959; method_31067 makeGenericSavannaBiome - m ()Lnet/minecraft/class_5483$class_5496; method_31068 getSpawnsWithHorseAndDonkey - m ()Lnet/minecraft/class_1959; method_30725 makeFlowerForestBiome - m (Z)Lnet/minecraft/class_1959; method_30709 makeLukewarmOceanBiome - m (Z)Lnet/minecraft/class_1959; method_30702 makeColdOceanBiome - m (FFZZZZ)Lnet/minecraft/class_1959; method_30699 makeTaigaBiome - m ()Lnet/minecraft/class_1959; method_30723 makeWarmOceanBiome - m ()Lnet/minecraft/class_1959; method_30703 makeJungleEdgeBiome - m ()Lnet/minecraft/class_1959; method_30731 makeWarpedForestBiome - m (FFZ)Lnet/minecraft/class_1959; method_30696 makeBadlandsBiome - m ()Lnet/minecraft/class_1959; method_30729 makeBasaltDeltasBiome - m (FFZ)Lnet/minecraft/class_1959; method_30708 makeGenericSwampBiome - m (F)I method_30932 getSkyColorWithTemperatureModifier - m (FFZZZ)Lnet/minecraft/class_1959; method_30698 makeDesertBiome - m (FFZZ)Lnet/minecraft/class_1959; method_30697 makeSnowyBiome - m ()Lnet/minecraft/class_1959; method_30716 makeEndBarrensBiome - m ()Lnet/minecraft/class_1959; method_30714 makeBambooJungleBiome - m (Lnet/minecraft/class_3504;ZZZ)Lnet/minecraft/class_5485$class_5495; method_31066 getOceanGenerationSettingsBuilder - m (FF)Lnet/minecraft/class_1959; method_30693 makeWoodedBadlandsPlateauBiome - m ()Lnet/minecraft/class_1959; method_30710 makeModifiedJungleBiome - m ()Lnet/minecraft/class_1959; method_30720 makeSmallEndIslandsBiome - m ()Lnet/minecraft/class_1959; method_30718 makeEndMidlandsBiome - m (FFFFIZZ)Lnet/minecraft/class_1959; method_30685 makeGenericBeachBiome - m (FFFIZ)Lnet/minecraft/class_1959; method_30686 makeRiverBiome - m (Z)Lnet/minecraft/class_1959; method_30712 makeFrozenOceanBiome - m ()Lnet/minecraft/class_5483$class_5496; method_31069 getStandardMobSpawnBuilder - m ()Lnet/minecraft/class_1959; method_30726 makeVoidBiome - m (FFII)Lnet/minecraft/class_1959; method_30688 makeGenericBambooBiome - m (FFIII)Lnet/minecraft/class_1959; method_30689 makeGenericJungleBiome - m (Lnet/minecraft/class_5485$class_5495;)Lnet/minecraft/class_1959; method_31065 makeEndBiome - m (Z)Lnet/minecraft/class_1959; method_30706 makeOceanBiome - m ()Lnet/minecraft/class_1959; method_30724 makeDeepWarmOceanBiome - m (Z)Lnet/minecraft/class_1959; method_30701 makePlainsBiome - m ()Lnet/minecraft/class_1959; method_30722 makeErodedBadlandsBiome -c net/minecraft/class_4512 net/minecraft/test/TestRuntimeException -c net/minecraft/class_4513 net/minecraft/test/TestBlockPosException - m ()Lnet/minecraft/class_2338; method_22151 func_229459_c_ - m ()Ljava/lang/String; method_22150 func_229458_a_ - m ()Ljava/lang/String; getMessage getMessage - f Lnet/minecraft/class_2338; field_20542 field_229456_b_ - f J field_21449 field_229457_c_ - f Lnet/minecraft/class_2338; field_20541 field_229455_a_ -c net/minecraft/class_4514 net/minecraft/test/TestBatch - m ()Ljava/util/Collection; method_22154 func_229465_b_ - m ()Ljava/lang/String; method_22152 func_229463_a_ - m (Lnet/minecraft/class_3218;)V method_22153 func_229464_a_ - f Ljava/util/Collection; field_20544 field_229461_b_ - f Ljava/lang/String; field_20543 field_229460_a_ - f Ljava/util/function/Consumer; field_20545 field_229462_c_ -c net/minecraft/class_4515 net/minecraft/test/TestExecutor - m (Ljava/util/Collection;)V method_29401 func_229480_a_ - m (Lnet/minecraft/class_4517;)V method_22164 func_229483_b_ - m (Lnet/minecraft/class_4515;Lnet/minecraft/class_4517;)V method_22158 func_229478_a_ - m (I)V method_22156 func_229477_a_ - m (Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;Lnet/minecraft/class_4514;)V method_23633 func_240539_a_ - m ()Ljava/util/List; method_22155 func_229476_a_ - m (Lnet/minecraft/class_4517;)V method_22159 func_229479_a_ - m ()V method_22160 func_229482_b_ - f Lnet/minecraft/class_3218; field_20549 field_229468_c_ - f Lnet/minecraft/class_4521; field_20550 field_229469_d_ - f I field_20556 field_240536_e_ - f Lnet/minecraft/class_2338; field_20548 field_229467_b_ - f Lnet/minecraft/class_4524; field_20553 field_229472_g_ - f Ljava/util/List; field_20551 field_229470_e_ - f Lnet/minecraft/class_2338$class_2339; field_20555 field_229474_i_ - f I field_20554 field_229473_h_ - f Ljava/util/Map; field_25300 field_240537_g_ - f Lorg/apache/logging/log4j/Logger; field_20546 field_229466_a_ - f Ljava/util/List; field_20547 field_229471_f_ -c net/minecraft/class_4515$1 net/minecraft/test/TestExecutor$1 - f Lnet/minecraft/class_4515; field_20557 field_229484_a_ -c net/minecraft/class_4692 net/minecraft/test/TestTickResult - f Ljava/lang/Long; field_21450 field_229485_a_ - f Ljava/lang/Runnable; field_21451 field_229486_b_ -c net/minecraft/class_4516 net/minecraft/test/TestTrackerHolder - f Lnet/minecraft/class_4517; field_20558 field_229487_a_ -c net/minecraft/class_4517 net/minecraft/test/TestTracker - m ()Lnet/minecraft/class_4529; method_29403 func_240546_u_ - m ()Ljava/lang/String; method_22169 func_229510_c_ - m ()Lnet/minecraft/class_3218; method_22176 func_229514_g_ - m ()Lnet/minecraft/class_2470; method_29402 func_240545_t_ - m ()Z method_22184 func_229521_r_ - m ()V method_23639 func_229523_t_ - m (Lnet/minecraft/class_2338;I)V method_22166 func_240543_a_ - m ()V method_23634 func_229501_a_ - m ()V method_22165 func_229507_b_ - m ()V method_23640 func_229525_v_ - m (Ljava/lang/Throwable;)V method_22168 func_229506_a_ - m (Lnet/minecraft/class_4518;)V method_22167 func_229504_a_ - m (Lnet/minecraft/class_4518;)V method_22175 func_229508_b_ - m ()Z method_22183 func_229520_q_ - m ()Lnet/minecraft/class_2338; method_22172 func_229512_d_ - m (Lnet/minecraft/class_4518;)V method_22171 func_229511_c_ - m ()Z method_22177 func_229515_h_ - m (Lnet/minecraft/class_4693;)V method_23637 func_229509_b_ - m ()Ljava/lang/Throwable; method_22182 func_229519_n_ - m ()Z method_22178 func_229516_i_ - m ()Z method_22179 func_229517_j_ - m (Lnet/minecraft/class_2338;)V method_23635 func_229503_a_ - m ()Ljava/lang/String; method_23638 func_229522_s_ - m ()Ljava/lang/String; toString toString - m ()Z method_22180 func_229518_k_ - m (Lnet/minecraft/class_4693;)V method_23636 func_229505_a_ - f Z field_20565 field_229497_j_ - f Lit/unimi/dsi/fastutil/objects/Object2LongMap; field_21453 field_229494_g_ - f J field_21454 field_229495_h_ - f J field_21455 field_229496_i_ - f Lnet/minecraft/class_4529; field_20559 field_229488_a_ - f Lnet/minecraft/class_3218; field_20561 field_229490_c_ - f Ljava/util/Collection; field_20562 field_229491_d_ - f Ljava/lang/Throwable; field_20569 field_229500_m_ - f I field_20563 field_229492_e_ - f Lcom/google/common/base/Stopwatch; field_21456 field_229498_k_ - f Lnet/minecraft/class_2470; field_25301 field_240541_m_ - f Ljava/util/Collection; field_21452 field_229493_f_ - f Z field_20567 field_229499_l_ - f Lnet/minecraft/class_2338; field_20560 field_229489_b_ -c net/minecraft/class_4518 net/minecraft/test/ITestCallback - m (Lnet/minecraft/class_4517;)V method_22188 func_225644_a_ - m (Lnet/minecraft/class_4517;)V method_22190 func_225645_c_ -c net/minecraft/class_4519 net/minecraft/test/TestRegistry - m (Lnet/minecraft/class_4529;)V method_29404 func_240548_a_ - m (Ljava/lang/String;)Z method_22196 func_229534_b_ - m (Ljava/lang/String;)Ljava/util/function/Consumer; method_22198 func_229536_c_ - m (Ljava/lang/String;)Ljava/util/Optional; method_22199 func_229537_d_ - m ()Ljava/util/Collection; method_22195 func_229533_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_4529; method_22200 func_229538_e_ - m ()V method_29406 func_240550_d_ - m ()Ljava/util/Collection; method_29405 func_240549_c_ - m (Lnet/minecraft/class_4529;Ljava/lang/String;)Z method_22192 func_229532_a_ - m (Ljava/lang/String;Lnet/minecraft/class_4529;)Z method_22194 func_229531_a_ - m (Ljava/lang/String;)Ljava/util/Collection; method_22193 func_229530_a_ - m (Ljava/lang/String;Lnet/minecraft/class_4529;)Z method_22197 func_229535_b_ - m ()Ljava/util/Collection; method_22191 func_229529_a_ - f Ljava/util/Collection; field_20570 field_229526_a_ - f Ljava/util/Map; field_20572 field_229528_c_ - f Ljava/util/Set; field_20571 field_229527_b_ - f Ljava/util/Collection; field_25302 field_240547_d_ -c net/minecraft/class_4520 net/minecraft/test/TestUtils - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/lang/String;)V method_22217 func_229554_a_ - m (Ljava/util/Collection;)Ljava/util/Collection; method_22209 func_229548_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_22215 func_229553_a_ - m (Lnet/minecraft/class_3222;)Z method_22218 func_229557_a_ - m (Lnet/minecraft/class_4517;Ljava/lang/String;)V method_22221 func_229560_b_ - m (Ljava/lang/String;)Ljava/util/Collection; method_22205 func_229543_a_ - m (Lnet/minecraft/class_4517;Ljava/lang/String;)V method_22204 func_229541_a_ - m (Ljava/lang/String;ZLjava/lang/String;)Lnet/minecraft/class_1799; method_22207 func_229546_a_ - m (Lnet/minecraft/class_3218;)V method_22213 func_229552_a_ - m (Ljava/util/Map;Lnet/minecraft/class_4529;)V method_22211 func_229551_a_ - m (Ljava/lang/StringBuffer;Ljava/lang/String;)V method_22208 func_229547_a_ - m (Ljava/lang/String;Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/util/Collection;Ljava/util/function/Consumer;Ljava/util/List;)Lnet/minecraft/class_4514; method_23641 func_240551_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_124;Ljava/lang/String;)V method_22214 func_229556_a_ - m (Ljava/lang/String;Lnet/minecraft/class_124;Lnet/minecraft/class_3222;)V method_22206 func_229544_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_4521;I)V method_22216 func_229555_a_ - m (Ljava/util/Map;Ljava/lang/String;)Ljava/util/stream/Stream; method_23642 func_229550_a_ - m (Lnet/minecraft/class_4517;)V method_22219 func_229558_b_ - m (Ljava/util/Collection;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;Lnet/minecraft/class_4521;I)Ljava/util/Collection; method_22222 func_240554_b_ - m (Lnet/minecraft/class_4517;Lnet/minecraft/class_2338;Lnet/minecraft/class_4521;)V method_22203 func_240553_a_ - m (Lnet/minecraft/class_4517;)V method_22224 func_229563_c_ - m (Ljava/util/Collection;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;Lnet/minecraft/class_4521;I)Ljava/util/Collection; method_22210 func_240552_a_ - m (Lnet/minecraft/class_4517;Lnet/minecraft/class_2248;)V method_22220 func_229559_b_ - m (Lnet/minecraft/class_4517;Lnet/minecraft/class_2248;)V method_22202 func_229540_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_22223 func_229562_b_ - f Lnet/minecraft/class_4531; field_20573 field_229539_a_ -c net/minecraft/class_4520$1 net/minecraft/test/TestUtils$1 -c net/minecraft/class_4693 net/minecraft/test/TestList - m (J)V method_23643 func_229567_a_ - m (J)V method_23644 func_229568_b_ - m (J)V method_23645 func_229569_c_ - f Lnet/minecraft/class_4517; field_21457 field_229564_a_ - f Ljava/util/List; field_21458 field_229565_b_ - f J field_21459 field_229566_c_ -c net/minecraft/class_4521 net/minecraft/test/TestCollection - m (Lnet/minecraft/class_4517;)V method_22227 func_229573_a_ - m ()V method_22226 func_229572_a_ - m ()V method_22228 func_229574_b_ - f Lnet/minecraft/class_4521; field_20574 field_229570_a_ - f Ljava/util/Collection; field_20575 field_229571_b_ -c net/minecraft/class_4522 net/minecraft/test/TestTimeoutException -c net/minecraft/class_4523 net/minecraft/test/TestLogger - f Lorg/apache/logging/log4j/Logger; field_20576 field_229575_a_ -c net/minecraft/class_4524 net/minecraft/test/TestResultList - m ()Z method_22236 func_229585_d_ - m ()Z method_22237 func_229586_e_ - m ()I method_22229 func_229578_a_ - m ()I method_22234 func_229583_b_ - m ()I method_22235 func_229584_c_ - m (Ljava/lang/StringBuffer;Lnet/minecraft/class_4517;)V method_22233 func_229582_a_ - m ()Z method_22239 func_229588_i_ - m (Lnet/minecraft/class_4518;Lnet/minecraft/class_4517;)V method_22232 func_240559_a_ - m (Lnet/minecraft/class_4518;)V method_22231 func_240558_a_ - m (Lnet/minecraft/class_4517;)V method_22230 func_229579_a_ - m (Ljava/util/function/Consumer;)V method_29407 func_240556_a_ - m ()Ljava/lang/String; toString toString - m ()I method_22238 func_229587_h_ - m ()Ljava/lang/String; method_22240 func_229589_j_ - f Ljava/util/Collection; field_20577 field_229576_a_ - f Ljava/util/Collection; field_25303 field_240555_b_ -c net/minecraft/class_4524$1 net/minecraft/test/TestResultList$1 - f Lnet/minecraft/class_4524; field_25305 field_240561_b_ - f Ljava/util/function/Consumer; field_25304 field_240560_a_ -c net/minecraft/class_4525 net/minecraft/test/StructureHelper - m (Ljava/lang/String;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;)V method_22251 func_229603_a_ - m (Lnet/minecraft/class_3341;ILnet/minecraft/class_3218;)V method_22246 func_229595_a_ - m (Lnet/minecraft/class_2338;ILnet/minecraft/class_3218;)Ljava/util/Optional; method_22244 func_229596_a_ - m (ILnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_22254 func_229592_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;)V method_22256 func_229608_b_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;)Z method_22247 func_229599_a_ - m (Lnet/minecraft/class_2338;ILnet/minecraft/class_3218;)Lnet/minecraft/class_2338; method_22255 func_229607_b_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)I method_22245 func_229597_a_ - m (I)Lnet/minecraft/class_2470; method_29408 func_240562_a_ - m (Lnet/minecraft/class_2338;ILnet/minecraft/class_3218;)Ljava/util/Collection; method_22258 func_229609_c_ - m (Lnet/minecraft/class_2633;)Lnet/minecraft/class_3341; method_29410 func_240568_b_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;)Lnet/minecraft/class_3341; method_29409 func_229598_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_22249 func_229601_a_ - m (Ljava/lang/String;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;Z)Lnet/minecraft/class_2633; method_22252 func_240566_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;Lnet/minecraft/class_3218;)V method_22248 func_240564_a_ - m (Ljava/lang/String;Lnet/minecraft/class_2338;Lnet/minecraft/class_2470;ILnet/minecraft/class_3218;Z)Lnet/minecraft/class_2633; method_22250 func_240565_a_ - m (Lnet/minecraft/class_2633;)Lnet/minecraft/class_238; method_22242 func_229594_a_ - m (Lnet/minecraft/class_1297;)Z method_22241 func_229593_a_ - m (Ljava/lang/String;Lnet/minecraft/class_3218;)Lnet/minecraft/class_3499; method_22369 func_229605_a_ - m (ILnet/minecraft/class_2338;Lnet/minecraft/class_3218;)V method_22368 func_229591_a_ - m (Ljava/nio/file/Path;)Lnet/minecraft/class_2487; method_22253 func_229606_a_ - f Ljava/lang/String; field_20579 field_229590_a_ -c net/minecraft/class_4526 net/minecraft/test/TestTypeArgument - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String; method_22262 func_229612_a_ - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/String; method_22261 parse - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Lnet/minecraft/class_4526; method_22370 func_229611_a_ - f Ljava/util/Collection; field_20580 field_229610_a_ -c net/minecraft/class_4527 net/minecraft/test/TestCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29417 func_240579_c_ - m (Lnet/minecraft/class_2168;I)I method_22265 func_229616_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29415 func_218527_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22291 func_229643_e_ - m (Lnet/minecraft/class_4517;)V method_29412 func_240576_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4524;)V method_22280 func_229631_b_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_4529;I)I method_22266 func_229620_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22288 func_229640_g_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29414 func_240587_i_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_4524;)V method_22272 func_229623_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29423 func_240582_l_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22271 func_229614_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22287 func_229637_e_ - m (Lnet/minecraft/class_3222;)Z method_22276 func_229627_a_ - m (Lnet/minecraft/class_2168;)I method_22277 func_229615_a_ - m (Lnet/minecraft/class_2168;)I method_29413 func_240581_c_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22295 func_229647_n_ - m (Lnet/minecraft/class_2168;ZII)I method_29411 func_240574_a_ - m (Lnet/minecraft/class_2168;Ljava/util/Collection;II)V method_22269 func_229619_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22283 func_229632_c_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22293 func_229645_h_ - m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_22264 func_229617_a_ - m (Lnet/minecraft/class_4529;Lnet/minecraft/class_3218;)V method_23647 func_229622_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29419 func_229644_f_ - m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_22282 func_229636_d_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29422 func_240588_j_ - m (Lnet/minecraft/class_2168;II)I method_22284 func_229633_c_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29416 func_240569_b_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4524;Lnet/minecraft/class_2338;)V method_22274 func_229626_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4524;)V method_22273 func_229625_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29418 func_240580_d_ - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_22270 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_23648 func_229639_f_ - m (Lnet/minecraft/class_2168;Ljava/lang/String;III)I method_22268 func_229618_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22290 func_229642_j_ - m (Lnet/minecraft/class_2168;Ljava/lang/String;II)I method_22267 func_229630_b_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22289 func_229641_h_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22279 func_229628_b_ - m (Lnet/minecraft/class_2168;Ljava/lang/String;)V method_22278 func_229634_c_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22294 func_229646_m_ - m (Lnet/minecraft/class_2168;)I method_22281 func_229629_b_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22286 func_229635_d_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29420 func_240584_g_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22292 func_240585_k_ - m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_22285 func_229638_e_ - m (Lnet/minecraft/class_3218;Ljava/lang/String;Lnet/minecraft/class_124;)V method_22275 func_229624_a_ - m (Lnet/minecraft/class_124;Ljava/lang/String;Lnet/minecraft/class_3222;)V method_22263 func_229621_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29421 func_240586_i_ -c net/minecraft/class_4527$class_4528 net/minecraft/test/TestCommand$Callback - f Lnet/minecraft/class_4524; field_20582 field_229649_b_ - f Lnet/minecraft/class_3218; field_20581 field_229648_a_ -c net/minecraft/class_4529 net/minecraft/test/TestFunctionInfo - m ()Ljava/lang/String; toString toString - m ()J method_23649 func_229663_f_ - m ()Ljava/lang/String; method_22298 func_229659_b_ - m (Lnet/minecraft/class_4516;)V method_22297 func_229658_a_ - m ()Ljava/lang/String; method_22296 func_229657_a_ - m ()Z method_22300 func_229661_d_ - m ()Lnet/minecraft/class_2470; method_29424 func_240590_g_ - m ()I method_22299 func_229660_c_ - m ()Ljava/lang/String; method_22301 func_229662_e_ - f Z field_20586 field_229653_d_ - f Ljava/lang/String; field_20584 field_229651_b_ - f Ljava/lang/String; field_20585 field_229652_c_ - f Ljava/lang/String; field_20583 field_229650_a_ - f I field_20588 field_229655_f_ - f Lnet/minecraft/class_2470; field_25306 field_240589_h_ - f J field_21460 field_229656_g_ - f Ljava/util/function/Consumer; field_20587 field_229654_e_ -c net/minecraft/class_4530 net/minecraft/test/TestArgArgument - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/class_4529; method_22303 func_229666_a_ - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_4529; method_22302 parse - m (Lcom/mojang/brigadier/StringReader;)Ljava/lang/Object; parse parse - m ()Ljava/util/Collection; getExamples getExamples - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; listSuggestions listSuggestions - m ()Lnet/minecraft/class_4530; method_22371 func_229665_a_ - f Ljava/util/Collection; field_20589 field_229664_a_ -c net/minecraft/class_4531 net/minecraft/test/ITestLogger - m (Lnet/minecraft/class_4517;)V method_22304 func_225646_a_ -c net/minecraft/class_2477 net/minecraft/util/text/LanguageMap - m (Lnet/minecraft/class_5348;)Lnet/minecraft/class_5481; method_30934 func_241870_a - m ()Z method_29428 func_230505_b_ - m ()Lnet/minecraft/class_2477; method_29429 func_240595_c_ - m (Ljava/lang/String;)Z method_4678 func_230506_b_ - m (Ljava/io/InputStream;Ljava/util/function/BiConsumer;)V method_29425 func_240593_a_ - m ()Lnet/minecraft/class_2477; method_10517 getInstance - m (Ljava/lang/String;)Ljava/lang/String; method_4679 func_230503_a_ - m (Lnet/minecraft/class_2477;)V method_29427 func_240594_a_ - m (Ljava/util/List;)Ljava/util/List; method_30933 func_244260_a - f Lnet/minecraft/class_2477; field_11486 field_240592_d_ - f Lorg/apache/logging/log4j/Logger; field_11490 LOGGER - f Lcom/google/gson/Gson; field_25307 field_240591_b_ - f Ljava/util/regex/Pattern; field_11489 NUMERIC_VARIABLE_PATTERN -c net/minecraft/class_2477$1 net/minecraft/util/text/LanguageMap$1 - m (Lnet/minecraft/class_5348;Lnet/minecraft/class_5224;)Z method_30936 func_244262_a - m (Lnet/minecraft/class_5224;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_30935 func_244261_a - f Ljava/util/Map; field_25308 field_240596_a_ -c net/minecraft/class_2479 net/minecraft/nbt/ByteArrayNBT - m (ILnet/minecraft/class_2481;)V method_17805 add - m (I)Lnet/minecraft/class_2481; method_17804 remove - m ()V clear clear - m ()I size size - m (Ljava/util/List;)[B method_10522 toArray - m ()I hashCode hashCode - m (ILnet/minecraft/class_2481;)Lnet/minecraft/class_2481; method_17803 set - m (I)Ljava/lang/Object; get get - m (Ljava/lang/Object;)Z equals equals - m (I)Lnet/minecraft/class_2481; method_10523 get - m ()[B method_10521 getByteArray - f [B field_11493 data - f Lnet/minecraft/class_4614; field_21024 TYPE -c net/minecraft/class_2479$1 net/minecraft/nbt/ByteArrayNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2479; method_23232 readNBT -c net/minecraft/class_2481 net/minecraft/nbt/ByteNBT - m (Ljava/lang/Object;)Z equals equals - m (B)Lnet/minecraft/class_2481; method_23233 valueOf - m ()I hashCode hashCode - m ()Lnet/minecraft/class_2481; method_10530 copy - m (Z)Lnet/minecraft/class_2481; method_23234 valueOf - f B field_11498 data - f Lnet/minecraft/class_4614; field_21025 TYPE - f Lnet/minecraft/class_2481; field_21027 ONE - f Lnet/minecraft/class_2481; field_21026 ZERO -c net/minecraft/class_2481$class_4610 net/minecraft/nbt/ByteNBT$Cache - m ()[Lnet/minecraft/class_2481; method_23236 func_229674_a_ - f [Lnet/minecraft/class_2481; field_21028 CACHE -c net/minecraft/class_2481$1 net/minecraft/nbt/ByteNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2481; method_23235 readNBT -c net/minecraft/class_2483 net/minecraft/nbt/CollectionNBT - m (I)Ljava/lang/Object; remove remove - m (I)Lnet/minecraft/class_2520; method_10536 remove - m (ILnet/minecraft/class_2520;)Z method_10533 addNBTByIndex - m ()B method_10601 getTagType - m (ILnet/minecraft/class_2520;)V method_10531 add - m (ILjava/lang/Object;)V add add - m (ILnet/minecraft/class_2520;)Z method_10535 setNBTByIndex - m (ILjava/lang/Object;)Ljava/lang/Object; set set - m (ILnet/minecraft/class_2520;)Lnet/minecraft/class_2520; method_10606 set -c net/minecraft/class_2487 net/minecraft/nbt/CompoundNBT - m (Lnet/minecraft/class_4614;Ljava/lang/String;Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2520; method_23238 func_229678_a_ - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_10543 merge - m (Ljava/lang/String;Z)V method_10556 putBoolean - m (Ljava/lang/String;)D method_10574 getDouble - m (Ljava/lang/String;)J method_10537 getLong - m (Ljava/lang/String;)Z method_10545 contains - m ()I hashCode hashCode - m (Ljava/lang/String;)S method_10568 getShort - m ()Z isEmpty isEmpty - m (Ljava/lang/String;Ljava/util/List;)V method_10572 putIntArray - m (Ljava/lang/String;)[B method_10547 getByteArray - m (Ljava/lang/String;I)Z method_10573 contains - m (Ljava/io/DataInput;Lnet/minecraft/class_2505;)Ljava/lang/String; method_23239 func_229679_b_ - m (Ljava/lang/String;[J)V method_10564 putLongArray - m (Ljava/lang/String;)[I method_10561 getIntArray - m (Ljava/lang/String;I)Lnet/minecraft/class_2499; method_10554 getList - m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_10557 getNameComponent - m (Ljava/lang/String;)Lnet/minecraft/class_2487; method_10562 getCompound - m ()Lnet/minecraft/class_2487; method_10553 copy - m (Ljava/lang/String;)Ljava/util/UUID; method_25926 getUniqueId - m (Ljava/io/DataInput;Lnet/minecraft/class_2505;)Ljava/lang/String; method_10552 readKey - m ()Ljava/util/Set; method_10541 keySet - m (Ljava/lang/String;)Lnet/minecraft/class_2520; method_10580 get - m (Ljava/lang/String;)V method_10551 remove - m (Ljava/lang/String;[B)V method_10570 putByteArray - m (Ljava/lang/String;B)V method_10567 putByte - m (Ljava/lang/String;)B method_10571 getByte - m (Lnet/minecraft/class_4614;Ljava/lang/String;Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2520; method_10581 loadNBT - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_29141 func_240598_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_10579 func_240601_u_ - m (Ljava/lang/String;D)V method_10549 putDouble - m (Ljava/lang/String;)Ljava/lang/String; method_10578 handleEscape - m (Ljava/lang/String;Lnet/minecraft/class_2520;Ljava/io/DataOutput;)V method_10555 writeEntry - m (Ljava/lang/String;)I method_10550 getInt - m (Ljava/lang/String;)Z method_25928 hasUniqueId - m (Ljava/io/DataInput;Lnet/minecraft/class_2505;)B method_23237 func_229676_a_ - m (Ljava/lang/String;)F method_10583 getFloat - m (Ljava/lang/String;Ljava/util/List;)V method_10538 putLongArray - m (Ljava/lang/String;S)V method_10575 putShort - m ()I method_10546 size - m (Ljava/lang/String;)Ljava/lang/String; method_10558 getString - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/util/Map; method_29143 getTagMap - m (Ljava/lang/String;[I)V method_10539 putIntArray - m (Ljava/io/DataInput;Lnet/minecraft/class_2505;)B method_10542 readType - m (Lnet/minecraft/class_2487;)Lcom/mojang/serialization/Dynamic; method_29142 func_240599_b_ - m (Ljava/lang/String;Lnet/minecraft/class_2520;)Lnet/minecraft/class_2520; method_10566 put - m (Ljava/lang/String;Ljava/util/UUID;)V method_25927 putUniqueId - m (Ljava/lang/String;)[J method_10565 getLongArray - m (Ljava/lang/String;Ljava/lang/String;)V method_10582 putString - m (Ljava/lang/String;F)V method_10548 putFloat - m (Ljava/lang/String;I)V method_10569 putInt - m (Ljava/lang/String;J)V method_10544 putLong - m (Ljava/lang/String;)Z method_10577 getBoolean - m (Ljava/lang/String;)B method_10540 getTagId - m (Ljava/lang/String;Lnet/minecraft/class_4614;Ljava/lang/ClassCastException;)Lnet/minecraft/class_128; method_10559 generateCrashReport - f Lorg/apache/logging/log4j/Logger; field_11514 LOGGER - f Lcom/mojang/serialization/Codec; field_25128 CODEC - f Lnet/minecraft/class_4614; field_21029 TYPE - f Ljava/util/regex/Pattern; field_11516 SIMPLE_VALUE - f Ljava/util/Map; field_11515 tagMap -c net/minecraft/class_2487$1 net/minecraft/nbt/CompoundNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2487; method_23240 readNBT -c net/minecraft/class_2489 net/minecraft/nbt/DoubleNBT - m ()Lnet/minecraft/class_2489; method_10585 copy - m (D)Lnet/minecraft/class_2489; method_23241 valueOf - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - f D field_11520 data - f Lnet/minecraft/class_4614; field_21031 TYPE - f Lnet/minecraft/class_2489; field_21030 ZERO -c net/minecraft/class_2489$1 net/minecraft/nbt/DoubleNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2489; method_23242 readNBT -c net/minecraft/class_2491 net/minecraft/nbt/EndNBT - m ()Lnet/minecraft/class_2491; method_10586 copy - f Lnet/minecraft/class_4614; field_21032 TYPE - f Lnet/minecraft/class_2491; field_21033 INSTANCE -c net/minecraft/class_2491$1 net/minecraft/nbt/EndNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2491; method_23243 readNBT -c net/minecraft/class_2494 net/minecraft/nbt/FloatNBT - m (F)Lnet/minecraft/class_2494; method_23244 valueOf - m ()Lnet/minecraft/class_2494; method_10587 copy - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - f Lnet/minecraft/class_4614; field_21035 TYPE - f F field_11523 data - f Lnet/minecraft/class_2494; field_21034 ZERO -c net/minecraft/class_2494$1 net/minecraft/nbt/FloatNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2494; method_23245 readNBT -c net/minecraft/class_2495 net/minecraft/nbt/IntArrayNBT - m (Ljava/lang/Object;)Z equals equals - m (Ljava/util/List;)[I method_10590 toArray - m ()V clear clear - m ()I size size - m ()Lnet/minecraft/class_2495; method_10591 copy - m ()[I method_10588 getIntArray - m (I)Lnet/minecraft/class_2497; method_10589 get - m ()I hashCode hashCode - m (I)Ljava/lang/Object; get get - m (ILnet/minecraft/class_2497;)V method_17808 add - m (ILnet/minecraft/class_2497;)Lnet/minecraft/class_2497; method_17806 set - m (I)Lnet/minecraft/class_2497; method_17807 remove - f Lnet/minecraft/class_4614; field_21036 TYPE - f [I field_11524 intArray -c net/minecraft/class_2495$1 net/minecraft/nbt/IntArrayNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2495; method_23246 readNBT -c net/minecraft/class_2497 net/minecraft/nbt/IntNBT - m (Ljava/lang/Object;)Z equals equals - m ()Lnet/minecraft/class_2497; method_10592 copy - m (I)Lnet/minecraft/class_2497; method_23247 valueOf - m ()I hashCode hashCode - f I field_11525 data - f Lnet/minecraft/class_4614; field_21037 TYPE -c net/minecraft/class_2497$class_4611 net/minecraft/nbt/IntNBT$Cache - f [Lnet/minecraft/class_2497; field_21038 CACHE -c net/minecraft/class_2497$1 net/minecraft/nbt/IntNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2497; method_23248 readNBT -c net/minecraft/class_2499 net/minecraft/nbt/ListNBT - m ()I hashCode hashCode - m ()V method_17809 checkEmpty - m (I)Ljava/lang/String; method_10608 getString - m (I)Ljava/lang/Object; get get - m (Ljava/lang/Object;)Z equals equals - m (I)I method_10600 getInt - m (I)Lnet/minecraft/class_2487; method_10602 getCompound - m ()Z isEmpty isEmpty - m (I)D method_10611 getDouble - m (I)Lnet/minecraft/class_2499; method_10603 getList - m (I)F method_10604 getFloat - m (I)[I method_10610 getIntArray - m (I)S method_10609 getShort - m ()I size size - m (Lnet/minecraft/class_2520;)Z method_10605 canInsert - m ()V clear clear - m (I)Lnet/minecraft/class_2520; method_10534 get - m ()Lnet/minecraft/class_2499; method_10612 copy - f Ljava/util/List; field_11550 tagList - f B field_11551 tagType - f Lnet/minecraft/class_4614; field_21039 TYPE - f Lit/unimi/dsi/fastutil/bytes/ByteSet; field_21461 typeSet -c net/minecraft/class_2499$1 net/minecraft/nbt/ListNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2499; method_23249 readNBT -c net/minecraft/class_2501 net/minecraft/nbt/LongArrayNBT - m ()V clear clear - m (Ljava/lang/Object;)Z equals equals - m ()Lnet/minecraft/class_2501; method_10618 copy - m ()I hashCode hashCode - m (Ljava/util/List;)[J method_10617 toArray - m (ILnet/minecraft/class_2503;)Lnet/minecraft/class_2503; method_17810 set - m ()[J method_10615 getAsLongArray - m (I)Lnet/minecraft/class_2503; method_10616 get - m ()I size size - m (ILnet/minecraft/class_2503;)V method_17812 add - m (I)Lnet/minecraft/class_2503; method_17811 remove - m (I)Ljava/lang/Object; get get - f Lnet/minecraft/class_4614; field_21040 TYPE - f [J field_11552 data -c net/minecraft/class_2501$1 net/minecraft/nbt/LongArrayNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2501; method_23250 readNBT -c net/minecraft/class_2503 net/minecraft/nbt/LongNBT - m (Ljava/lang/Object;)Z equals equals - m ()Lnet/minecraft/class_2503; method_10621 copy - m (J)Lnet/minecraft/class_2503; method_23251 valueOf - m ()I hashCode hashCode - f J field_11553 data - f Lnet/minecraft/class_4614; field_21041 TYPE -c net/minecraft/class_2503$class_4612 net/minecraft/nbt/LongNBT$Cache - f [Lnet/minecraft/class_2503; field_21042 CACHE -c net/minecraft/class_2503$1 net/minecraft/nbt/LongNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2503; method_23252 readNBT -c net/minecraft/class_2505 net/minecraft/nbt/NBTSizeTracker - m (J)V method_10623 read - f J field_11557 max - f Lnet/minecraft/class_2505; field_11556 INFINITE - f J field_11555 read -c net/minecraft/class_2505$1 net/minecraft/nbt/NBTSizeTracker$1 -c net/minecraft/class_2507 net/minecraft/nbt/CompressedStreamTools - m (Ljava/io/File;)Lnet/minecraft/class_2487; method_30613 readCompressed - m (Lnet/minecraft/class_2487;Ljava/io/OutputStream;)V method_10634 writeCompressed - m (Ljava/io/InputStream;)Lnet/minecraft/class_2487; method_10629 readCompressed - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2520; method_10626 read - m (Lnet/minecraft/class_2487;Ljava/io/File;)V method_10630 write - m (Ljava/io/File;)Lnet/minecraft/class_2487; method_10633 read - m (Ljava/io/DataInput;)Lnet/minecraft/class_2487; method_10627 read - m (Lnet/minecraft/class_2520;Ljava/io/DataOutput;)V method_10631 writeTag - m (Lnet/minecraft/class_2487;Ljava/io/DataOutput;)V method_10628 write - m (Lnet/minecraft/class_2487;Ljava/io/File;)V method_30614 writeCompressed - m (Ljava/io/DataInput;Lnet/minecraft/class_2505;)Lnet/minecraft/class_2487; method_10625 read -c net/minecraft/class_2509 net/minecraft/nbt/NBTDynamicOps - m (J)Ljava/lang/Object; createLong createLong - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMapEntries getMapEntries - m (S)Ljava/lang/Object; createShort createShort - m (J)Lnet/minecraft/class_2520; method_10654 createLong - m (Lnet/minecraft/class_2487;Ljava/util/function/BiConsumer;)V method_29153 func_240612_a_ - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getByteBuffer getByteBuffer - m (F)Lnet/minecraft/class_2520; method_10662 createFloat - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getStream getStream - m (Lnet/minecraft/class_2483;Lnet/minecraft/class_2520;)V method_29149 func_240607_a_ - m (Lnet/minecraft/class_2520;)Lnet/minecraft/class_2520; method_10667 func_240621_n_ - m (Lnet/minecraft/class_2520;)Ljava/lang/Byte; method_10659 func_210815_m_ - m (Ljava/util/stream/LongStream;)Ljava/lang/Object; createLongList createLongList - m (D)Lnet/minecraft/class_2520; method_10652 createDouble - m (Ljava/util/stream/IntStream;)Lnet/minecraft/class_2520; method_10663 createIntList - m (Ljava/util/stream/Stream;)Lnet/minecraft/class_2520; method_10665 createList - m (Lnet/minecraft/class_2520;)Ljava/lang/Long; method_10649 func_210816_k_ - m (Ljava/lang/String;)Lnet/minecraft/class_2520; method_10639 createString - m (B)Lnet/minecraft/class_2520; method_10640 createByte - m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29156 mergeToList - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; mergeToList mergeToList - m (Lnet/minecraft/class_2483;Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;)V method_29151 func_240609_a_ - m (Ljava/util/function/BiConsumer;Lnet/minecraft/class_2487;Ljava/lang/String;)V method_29148 func_240606_a_ - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10637 getLongStream - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2487;Ljava/lang/String;)V method_29159 func_240615_b_ - m (Ljava/nio/ByteBuffer;)Ljava/lang/Object; createByteList createByteList - m (D)Ljava/lang/Object; createDouble createDouble - m (Lnet/minecraft/class_2520;Ljava/util/List;)Lcom/mojang/serialization/DataResult; method_29155 mergeToList - m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10646 getByteBuffer - m (Lnet/minecraft/class_2483;Lnet/minecraft/class_2520;)V method_29160 func_240616_c_ - m (Ljava/util/List;Lnet/minecraft/class_2487;Lcom/mojang/datafixers/util/Pair;)V method_29147 func_240605_a_ - m (Ljava/lang/Number;)Lnet/minecraft/class_2520; method_10660 createNumeric - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getStringValue getStringValue - m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29162 getMapEntries - m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10664 getStream - m (Lnet/minecraft/class_2520;Ljava/lang/String;)Lnet/minecraft/class_2520; method_10648 remove - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMap getMap - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; convertTo convertTo - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getNumberValue getNumberValue - m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10656 getStringValue - m (Lnet/minecraft/class_2520;Lcom/mojang/serialization/MapLike;)Lcom/mojang/serialization/DataResult; method_29154 mergeToMap - m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; mergeToMap mergeToMap - m (Ljava/util/stream/IntStream;)Ljava/lang/Object; createIntList createIntList - m (Ljava/lang/Object;Lcom/mojang/serialization/MapLike;)Lcom/mojang/serialization/DataResult; mergeToMap mergeToMap - m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29157 mergeToMap - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMapValues getMapValues - m (I)Lnet/minecraft/class_2520; method_10661 createInt - m (Lnet/minecraft/class_2520;)Ljava/lang/Integer; method_10658 func_210818_l_ - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getList getList - m ()Ljava/lang/Object; empty empty - m (Lnet/minecraft/class_2483;Lnet/minecraft/class_2520;Ljava/util/List;)V method_29150 func_240608_a_ - m (Ljava/nio/ByteBuffer;)Lnet/minecraft/class_2520; method_10657 createByteList - m (I)Ljava/lang/Object; createInt createInt - m (BB)Lnet/minecraft/class_2483; method_29144 func_240602_a_ - m (B)Ljava/lang/Object; createByte createByte - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getLongStream getLongStream - m (F)Ljava/lang/Object; createFloat createFloat - m (Ljava/lang/String;Ljava/lang/String;)Z method_10666 func_212019_a_ - m (Z)Lnet/minecraft/class_2520; method_23253 createBoolean - m (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; remove remove - m (Lnet/minecraft/class_2487;Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair; method_10638 func_240611_a_ - m (Z)Ljava/lang/Object; createBoolean createBoolean - m (Ljava/util/stream/Stream;)Lnet/minecraft/class_2520; method_10655 createMap - m (Ljava/util/stream/LongStream;)Lnet/minecraft/class_2520; method_10643 createLongList - m (Ljava/util/stream/Stream;)Ljava/lang/Object; createMap createMap - m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10651 getIntStream - m (BBB)Z method_29145 func_240603_a_ - m (Ljava/lang/Object;Ljava/util/List;)Lcom/mojang/serialization/DataResult; mergeToList mergeToList - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2487;Ljava/lang/String;)V method_10670 func_212010_a_ - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getIntStream getIntStream - m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29164 getList - m (Lnet/minecraft/class_2487;Lcom/mojang/datafixers/util/Pair;)V method_29152 func_240610_a_ - m (S)Lnet/minecraft/class_2520; method_10635 createShort - m (Ljava/util/stream/Stream;)Ljava/lang/Object; createList createList - m (Ljava/lang/Number;)Ljava/lang/Object; createNumeric createNumeric - m (Lnet/minecraft/class_2483;Lnet/minecraft/class_2520;)V method_29158 func_240614_b_ - m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29163 getMap - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_2520;)Ljava/lang/Object; method_29146 convertTo - m ()Lcom/mojang/serialization/RecordBuilder; mapBuilder mapBuilder - m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10645 getNumberValue - m ()Lnet/minecraft/class_2520; method_10668 empty - m (Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_10669 getMapValues - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2487;Ljava/lang/String;)V method_29161 func_240617_c_ - m (Ljava/lang/String;)Ljava/lang/Object; createString createString - f Lnet/minecraft/class_2509; field_11560 INSTANCE -c net/minecraft/class_2509$1 net/minecraft/nbt/NBTDynamicOps$1 - m (Ljava/lang/String;)Ljava/lang/Object; get get - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;)Lnet/minecraft/class_2520; method_29165 get - m ()Ljava/util/stream/Stream; entries entries - m (Ljava/lang/Object;)Ljava/lang/Object; get get - m (Lnet/minecraft/class_2520;)Lnet/minecraft/class_2520; method_29167 get - m (Lnet/minecraft/class_2487;Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair; method_29166 func_240624_a_ - f Lnet/minecraft/class_2487; field_25129 field_240622_a_ - f Lnet/minecraft/class_2509; field_25130 field_240623_b_ -c net/minecraft/class_2509$class_5320 net/minecraft/nbt/NBTDynamicOps$NBTRecordBuilder - m (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; append append - m ()Ljava/lang/Object; initBuilder initBuilder - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; build build - m ()Lnet/minecraft/class_2487; method_29168 initBuilder - m (Ljava/lang/String;Lnet/minecraft/class_2520;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_29169 append - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)Lcom/mojang/serialization/DataResult; method_29170 build - f Lnet/minecraft/class_2509; field_25131 field_240625_a_ -c net/minecraft/class_2512 net/minecraft/nbt/NBTUtil - m (Lnet/minecraft/class_2520;)Ljava/util/UUID; method_25930 readUniqueId - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2487; method_10692 writeBlockPos - m (Ljava/util/UUID;)Lnet/minecraft/class_2495; method_25929 func_240626_a_ - m (Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Ljava/lang/String; method_10685 getName - m (Lnet/minecraft/class_2487;)Lcom/mojang/authlib/GameProfile; method_10683 readGameProfile - m (Lnet/minecraft/class_2520;Lnet/minecraft/class_2520;Z)Z method_10687 areNBTEquals - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2487; method_10686 writeBlockState - m (Lnet/minecraft/class_2487;Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/class_2487; method_10684 writeGameProfile - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2338; method_10691 readBlockPos - m (Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/class_4284;Lnet/minecraft/class_2487;II)Lnet/minecraft/class_2487; method_10693 update - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2680; method_10681 readBlockState - m (Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/class_4284;Lnet/minecraft/class_2487;I)Lnet/minecraft/class_2487; method_10688 update - m (Lnet/minecraft/class_2688;Lnet/minecraft/class_2769;Ljava/lang/String;Lnet/minecraft/class_2487;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2688; method_10682 setValueHelper - f Lorg/apache/logging/log4j/Logger; field_11582 LOGGER -c net/minecraft/class_2514 net/minecraft/nbt/NumberNBT - m ()S method_10696 getShort - m ()Ljava/lang/Number; method_10702 getAsNumber - m ()I method_10701 getInt - m ()B method_10698 getByte - m ()J method_10699 getLong - m ()D method_10697 getDouble - m ()F method_10700 getFloat -c net/minecraft/class_2516 net/minecraft/nbt/ShortNBT - m (Ljava/lang/Object;)Z equals equals - m ()Lnet/minecraft/class_2516; method_10704 copy - m ()I hashCode hashCode - m (S)Lnet/minecraft/class_2516; method_23254 valueOf - f S field_11588 data - f Lnet/minecraft/class_4614; field_21043 TYPE -c net/minecraft/class_2516$class_4613 net/minecraft/nbt/ShortNBT$Cache - f [Lnet/minecraft/class_2516; field_21044 CACHE -c net/minecraft/class_2516$1 net/minecraft/nbt/ShortNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2516; method_23255 readNBT -c net/minecraft/class_2519 net/minecraft/nbt/StringNBT - m (Ljava/lang/String;)Lnet/minecraft/class_2519; method_23256 valueOf - m ()Lnet/minecraft/class_2519; method_10705 copy - m (Ljava/lang/String;)Ljava/lang/String; method_10706 quoteAndEscape - m (Ljava/lang/Object;)Z equals equals - m ()I hashCode hashCode - f Lnet/minecraft/class_4614; field_21045 TYPE - f Lnet/minecraft/class_2519; field_21046 EMPTY_STRING - f Ljava/lang/String; field_11590 data -c net/minecraft/class_2519$1 net/minecraft/nbt/StringNBT$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2519; method_23257 readNBT -c net/minecraft/class_2520 net/minecraft/nbt/INBT - m ()Ljava/lang/String; toString toString - m ()Ljava/lang/String; method_10714 getString - m (Ljava/io/DataOutput;)V method_10713 write - m ()Lnet/minecraft/class_4614; method_23258 getType - m (Ljava/lang/String;I)Lnet/minecraft/class_2561; method_10710 toFormattedComponent - m ()Lnet/minecraft/class_2561; method_10715 toFormattedComponent - m ()Lnet/minecraft/class_2520; method_10707 copy - m ()B method_10711 getId - f Lnet/minecraft/class_124; field_11594 SYNTAX_HIGHLIGHTING_STRING - f Lnet/minecraft/class_124; field_11591 SYNTAX_HIGHLIGHTING_KEY - f Lnet/minecraft/class_124; field_11593 SYNTAX_HIGHLIGHTING_NUMBER - f Lnet/minecraft/class_124; field_11595 SYNTAX_HIGHLIGHTING_NUMBER_TYPE -c net/minecraft/class_2522 net/minecraft/nbt/JsonToNBT - m (Lnet/minecraft/class_4614;Lnet/minecraft/class_4614;)Ljava/util/List; method_10728 getNumberList - m ()Ljava/lang/String; method_10725 readKey - m ()Z method_10716 hasElementSeparator - m (Ljava/lang/String;)Lnet/minecraft/class_2520; method_10731 type - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_10724 func_208774_a - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_10730 func_208775_b - m (C)V method_10719 expect - m ()Lnet/minecraft/class_2487; method_10727 readStruct - m (Ljava/lang/String;)Lnet/minecraft/class_2487; method_10718 getTagFromJson - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_10720 func_208773_a - m ()Lnet/minecraft/class_2487; method_10721 readSingleStruct - m ()Lnet/minecraft/class_2520; method_10729 readListTag - m ()Lnet/minecraft/class_2520; method_10726 readArrayTag - m ()Lnet/minecraft/class_2520; method_10722 readTypedValue - m ()Lnet/minecraft/class_2520; method_10723 readValue - m ()Lnet/minecraft/class_2520; method_10717 readList - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_11605 ERROR_EXPECTED_VALUE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_11608 ERROR_EXPECTED_KEY - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_11602 ERROR_TRAILING_DATA - f Ljava/util/regex/Pattern; field_11607 DOUBLE_PATTERN_NOSUFFIX - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_11603 ERROR_INSERT_MIXED_LIST - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_11597 ERROR_INSERT_MIXED_ARRAY - f Ljava/util/regex/Pattern; field_11596 FLOAT_PATTERN - f Ljava/util/regex/Pattern; field_11600 DOUBLE_PATTERN - f Ljava/util/regex/Pattern; field_11601 SHORT_PATTERN - f Ljava/util/regex/Pattern; field_11609 LONG_PATTERN - f Ljava/util/regex/Pattern; field_11606 BYTE_PATTERN - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_11604 ERROR_INVALID_ARRAY - f Ljava/util/regex/Pattern; field_11599 INT_PATTERN - f Lcom/mojang/brigadier/StringReader; field_11598 reader -c net/minecraft/class_4614 net/minecraft/nbt/INBTType - m ()Ljava/lang/String; method_23259 getName - m ()Ljava/lang/String; method_23261 getTagName - m (I)Lnet/minecraft/class_4614; method_23260 getEndNBT - m ()Z method_23263 isPrimitive - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2520; method_23262 readNBT -c net/minecraft/class_4614$1 net/minecraft/nbt/INBTType$1 - m (Ljava/io/DataInput;ILnet/minecraft/class_2505;)Lnet/minecraft/class_2491; method_23264 readNBT - f I field_21047 field_229708_a_ -c net/minecraft/class_4615 net/minecraft/nbt/NBTTypes - m (I)Lnet/minecraft/class_4614; method_23265 getGetTypeByID - f [Lnet/minecraft/class_4614; field_21048 TYPES -c net/minecraft/class_2524 net/minecraft/network/NettyEncryptionTranslator - m (Lio/netty/buffer/ByteBuf;)[B method_10733 bufToBytes - m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;)Lio/netty/buffer/ByteBuf; method_10734 decipher - m (Lio/netty/buffer/ByteBuf;Lio/netty/buffer/ByteBuf;)V method_10732 cipher - f [B field_11613 inputBuffer - f [B field_11614 outputBuffer - f Ljavax/crypto/Cipher; field_11612 cipher -c net/minecraft/class_2528 net/minecraft/network/NettyEncryptingDecoder - m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List;)V method_10735 decode - m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Ljava/util/List;)V decode decode - f Lnet/minecraft/class_2524; field_11619 decryptionCodec -c net/minecraft/class_2529 net/minecraft/network/NettyEncryptingEncoder - m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Lio/netty/buffer/ByteBuf;)V encode encode - m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Lio/netty/buffer/ByteBuf;)V method_10736 encode - f Lnet/minecraft/class_2524; field_11620 encryptionCodec -c net/minecraft/class_2532 net/minecraft/network/NettyCompressionDecoder - m (I)V method_10739 setCompressionThreshold - m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List;)V decode decode - f Ljava/util/zip/Inflater; field_11622 inflater - f I field_11623 threshold -c net/minecraft/class_2534 net/minecraft/network/NettyCompressionEncoder - m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Lio/netty/buffer/ByteBuf;)V encode encode - m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Lio/netty/buffer/ByteBuf;)V method_10741 encode - m (I)V method_10742 setCompressionThreshold - f Ljava/util/zip/Deflater; field_11638 deflater - f [B field_11637 buffer - f I field_11636 threshold -c net/minecraft/class_2535 net/minecraft/network/NetworkManager - m (Lnet/minecraft/class_2539;)V method_10750 setConnectionState - m (Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/class_2596;)V method_10770 channelRead0 - m (Lnet/minecraft/class_2596;)V method_10743 sendPacket - m (Lnet/minecraft/class_2561;)V method_10747 closeChannel - m ()F method_10745 getPacketsSent - m (Lnet/minecraft/class_2539;Lnet/minecraft/class_2539;Lnet/minecraft/class_2596;Lio/netty/util/concurrent/GenericFutureListener;)V method_10761 func_211392_a - m ()Z method_10772 hasNoChannel - m (Lio/netty/channel/ChannelHandlerContext;)V channelActive channelActive - m ()V method_10768 handleDisconnection - m ()Lnet/minecraft/class_2561; method_10748 getExitMessage - m ()Lio/netty/channel/DefaultEventLoopGroup; method_10766 func_201057_n - m ()Z method_10771 isEncrypted - m (Ljava/net/InetAddress;IZ)Lnet/minecraft/class_2535; method_10753 createNetworkManagerAndConnect - m (Lnet/minecraft/class_2547;)V method_10763 setNetHandler - m ()V method_10754 tick - m (Ljavax/crypto/SecretKey;)V method_10746 enableEncryption - m (Lnet/minecraft/class_2596;Lio/netty/util/concurrent/GenericFutureListener;)V method_10752 sendPacket - m (Lnet/minecraft/class_2596;Lnet/minecraft/class_2547;)V method_10759 processPacket - m (Lnet/minecraft/class_2561;Lio/netty/util/concurrent/Future;)V method_10749 func_211391_a - m ()V method_10751 flushOutboundQueue - m ()Lnet/minecraft/class_2547; method_10744 getNetHandler - m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Throwable;)V exceptionCaught exceptionCaught - m (Lio/netty/channel/ChannelHandlerContext;)V channelInactive channelInactive - m (I)V method_10760 setCompressionThreshold - m ()V method_10757 disableAutoRead - m ()Z method_10756 isLocalChannel - m ()Lio/netty/channel/nio/NioEventLoopGroup; method_10767 func_201061_p - m ()Ljava/net/SocketAddress; method_10755 getRemoteAddress - m ()F method_10762 getPacketsReceived - m ()Z method_10758 isChannelOpen - m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;)V channelRead0 channelRead0 - m (Ljava/net/SocketAddress;)Lnet/minecraft/class_2535; method_10769 provideLocalClient - m (Lnet/minecraft/class_2596;Lio/netty/util/concurrent/GenericFutureListener;)V method_10764 dispatchPacket - m ()V method_30615 func_241877_b - m ()Lio/netty/channel/epoll/EpollEventLoopGroup; method_10765 func_201060_o - f Lnet/minecraft/class_2547; field_11652 packetListener - f Z field_11647 isEncrypted - f Lorg/apache/logging/log4j/Logger; field_11642 LOGGER - f I field_11655 ticks - f Lnet/minecraft/class_2598; field_11643 direction - f Lnet/minecraft/class_3528; field_11657 CLIENT_EPOLL_EVENTLOOP - f F field_11654 field_211396_s - f Ljava/net/SocketAddress; field_11645 socketAddress - f I field_11658 field_211394_q - f Lorg/apache/logging/log4j/Marker; field_11641 NETWORK_MARKER - f Lio/netty/util/AttributeKey; field_11648 PROTOCOL_ATTRIBUTE_KEY - f Lio/netty/channel/Channel; field_11651 channel - f Z field_11640 field_211399_v - f F field_11653 field_211397_t - f Ljava/util/Queue; field_11644 outboundPacketsQueue - f Z field_11646 disconnected - f Lnet/minecraft/class_3528; field_11650 CLIENT_NIO_EVENTLOOP - f I field_11656 field_211395_r - f Lnet/minecraft/class_3528; field_11649 CLIENT_LOCAL_EVENTLOOP - f Lnet/minecraft/class_2561; field_11660 terminationReason - f Lorg/apache/logging/log4j/Marker; field_11639 NETWORK_PACKETS_MARKER -c net/minecraft/class_2535$class_2536 net/minecraft/network/NetworkManager$QueuedPacket - m (Lnet/minecraft/class_2535$class_2536;)Lnet/minecraft/class_2596; method_10773 func_210341_a - m (Lnet/minecraft/class_2535$class_2536;)Lio/netty/util/concurrent/GenericFutureListener; method_10774 func_210340_b - f Lio/netty/util/concurrent/GenericFutureListener; field_11662 field_201049_b - f Lnet/minecraft/class_2596; field_11661 packet -c net/minecraft/class_2535$1 net/minecraft/network/NetworkManager$1 - m (Lio/netty/channel/Channel;)V initChannel initChannel - f Lnet/minecraft/class_2535; field_11663 field_210342_a -c net/minecraft/class_2535$2 net/minecraft/network/NetworkManager$2 - m (Lio/netty/channel/Channel;)V initChannel initChannel - f Lnet/minecraft/class_2535; field_11664 field_201055_a -c net/minecraft/class_2539 net/minecraft/network/ProtocolType - m (Lnet/minecraft/class_2598;Lnet/minecraft/class_2596;)Ljava/lang/Integer; method_10781 getPacketId - m (Lnet/minecraft/class_2598;I)Lnet/minecraft/class_2596; method_10783 getPacket - m (Ljava/lang/String;)Lnet/minecraft/class_2539; valueOf valueOf - m (Lnet/minecraft/class_2539;Ljava/lang/Class;)V method_22306 func_229712_a_ - m (Lnet/minecraft/class_2596;)Lnet/minecraft/class_2539; method_10786 getFromPacket - m ()Lnet/minecraft/class_2539$class_4533; method_22308 func_229714_b_ - m ()I method_10785 getId - m (Lnet/minecraft/class_2539;Lnet/minecraft/class_2598;Lnet/minecraft/class_2539$class_4532;)V method_22307 func_229713_a_ - m ()[Lnet/minecraft/class_2539; values values - m (I)Lnet/minecraft/class_2539; method_10782 getById - f [Lnet/minecraft/class_2539; field_11694 $VALUES - f Ljava/util/Map; field_20595 field_229711_h_ - f Lnet/minecraft/class_2539; field_20591 PLAY - f Lnet/minecraft/class_2539; field_20592 STATUS - f [Lnet/minecraft/class_2539; field_11693 STATES_BY_ID - f Lnet/minecraft/class_2539; field_20593 LOGIN - f Ljava/util/Map; field_11687 STATES_BY_CLASS - f Lnet/minecraft/class_2539; field_20590 HANDSHAKING - f I field_20594 id -c net/minecraft/class_2539$class_4533 net/minecraft/network/ProtocolType$PacketRegistry - m (Lnet/minecraft/class_2598;Lnet/minecraft/class_2539$class_4532;)Lnet/minecraft/class_2539$class_4533; method_22315 func_229724_a_ - m (Lnet/minecraft/class_2539$class_4533;)Ljava/util/Map; method_22314 func_229723_a_ - f Ljava/util/Map; field_20598 field_229722_a_ -c net/minecraft/class_2539$class_4532 net/minecraft/network/ProtocolType$PacketList - m (I)Lnet/minecraft/class_2596; method_22310 func_229718_a_ - m (Ljava/lang/Class;Ljava/util/function/Supplier;)Lnet/minecraft/class_2539$class_4532; method_22313 func_229721_a_ - m ()Ljava/lang/Iterable; method_22309 func_229717_a_ - m (Ljava/lang/Class;)Ljava/lang/Integer; method_22312 func_229720_a_ - m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_22311 func_229719_a_ - f Ljava/util/List; field_20597 field_229716_b_ - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_20596 field_229715_a_ -c net/minecraft/class_2539$1 net/minecraft/network/ProtocolType$1 -c net/minecraft/class_2540 net/minecraft/network/PacketBuffer - m (II)Lio/netty/buffer/ByteBuf; setZero setZero - m (I)Z isWritable isWritable - m ()Lio/netty/buffer/ByteBuf; slice slice - m (I)I getUnsignedMedium getUnsignedMedium - m ()[B array array - m (ILjava/nio/charset/Charset;)Ljava/lang/CharSequence; readCharSequence readCharSequence - m ()Z release release - m (I)I getUnsignedShort getUnsignedShort - m (I)S getShort getShort - m (I)Lio/netty/buffer/ByteBuf; writeShort writeShort - m (I)Lio/netty/buffer/ByteBuf; skipBytes skipBytes - m (Lio/netty/buffer/ByteBuf;)Lio/netty/buffer/ByteBuf; writeBytes writeBytes - m (I)Lio/netty/buffer/ByteBuf; writeMedium writeMedium - m (IJ)Lio/netty/buffer/ByteBuf; setLongLE setLongLE - m (IF)Lio/netty/buffer/ByteBuf; setFloat setFloat - m (Ljava/nio/channels/ScatteringByteChannel;I)I writeBytes writeBytes - m (ILjava/lang/CharSequence;Ljava/nio/charset/Charset;)I setCharSequence setCharSequence - m (II)Lio/netty/buffer/ByteBuf; setInt setInt - m (I)I getUnsignedMediumLE getUnsignedMediumLE - m ()Lio/netty/buffer/ByteBuf; clear clear - m (I)I method_10815 getVarIntSize - m (II)Lio/netty/buffer/ByteBuf; copy copy - m ()Lio/netty/buffer/ByteBuf; touch touch - m (I)Lio/netty/buffer/ByteBuf; writeChar writeChar - m (IILio/netty/util/ByteProcessor;)I forEachByte forEachByte - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2540; method_10812 writeResourceLocation - m (ILjava/nio/ByteBuffer;)Lio/netty/buffer/ByteBuf; setBytes setBytes - m ()[B method_10795 readByteArray - m (I[BII)Lio/netty/buffer/ByteBuf; getBytes getBytes - m (I[B)Lio/netty/buffer/ByteBuf; setBytes setBytes - m (II)Lio/netty/buffer/ByteBuf; setIntLE setIntLE - m (II)Lio/netty/buffer/ByteBuf; retainedSlice retainedSlice - m ([JI)[J method_10809 readLongArray - m (I)Lio/netty/buffer/ByteBuf; ensureWritable ensureWritable - m (I)Lio/netty/buffer/ByteBuf; writeShortLE writeShortLE - m (I)Lio/netty/buffer/ByteBuf; writeZero writeZero - m (I)Lio/netty/buffer/ByteBuf; writeInt writeInt - m ()F readFloat readFloat - m ()Ljava/nio/ByteOrder; order order - m ([J)[J method_10801 readLongArray - m ()Ljava/lang/String; toString toString - m ()S readUnsignedByte readUnsignedByte - m ()Lio/netty/buffer/ByteBuf; markReaderIndex markReaderIndex - m (Ljava/util/UUID;)Lnet/minecraft/class_2540; method_10797 writeUniqueId - m (I)I getInt getInt - m ()Lio/netty/buffer/ByteBuf; retain retain - m (J)Lio/netty/buffer/ByteBuf; writeLong writeLong - m (II)Lio/netty/buffer/ByteBuf; setByte setByte - m (Ljava/lang/String;)Lnet/minecraft/class_2540; method_10814 writeString - m (Ljava/nio/channels/GatheringByteChannel;I)I readBytes readBytes - m (II)Lio/netty/buffer/ByteBuf; setMediumLE setMediumLE - m ()Lio/netty/buffer/ByteBuf; discardReadBytes discardReadBytes - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2540; method_10793 writeItemStack - m ()Z readBoolean readBoolean - m (IB)I bytesBefore bytesBefore - m (Ljava/lang/String;I)Lnet/minecraft/class_2540; method_10788 writeString - m (II)Lio/netty/buffer/ByteBuf; setShortLE setShortLE - m (II)Ljava/nio/ByteBuffer; internalNioBuffer internalNioBuffer - m (ILio/netty/buffer/ByteBuf;)Lio/netty/buffer/ByteBuf; getBytes getBytes - m ()I readUnsignedShortLE readUnsignedShortLE - m ()Lio/netty/buffer/ByteBuf; markWriterIndex markWriterIndex - m (Ljava/nio/charset/Charset;)Ljava/lang/String; toString toString - m ()Lio/netty/buffer/ByteBuf; copy copy - m ()Lio/netty/util/ReferenceCounted; retain retain - m (IILjava/nio/charset/Charset;)Ljava/lang/String; toString toString - m ()Lio/netty/util/ReferenceCounted; touch touch - m (IJ)Lio/netty/buffer/ByteBuf; setLong setLong - m ()Lnet/minecraft/class_4076; method_19456 readSectionPos - m ()Z isReadable isReadable - m ()I readUnsignedMedium readUnsignedMedium - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2540; method_10794 writeCompoundTag - m (I)I getIntLE getIntLE - m ()Lnet/minecraft/class_1799; method_10819 readItemStack - m (I)J getLong getLong - m (II)Lio/netty/buffer/ByteBuf; setIndex setIndex - m ()I maxCapacity maxCapacity - m (ILjava/nio/channels/FileChannel;JI)I getBytes getBytes - m (I)Lio/netty/buffer/ByteBuf; writerIndex writerIndex - m (Lio/netty/buffer/ByteBuf;I)Lio/netty/buffer/ByteBuf; writeBytes writeBytes - m (I)[I method_10799 readVarIntArray - m ()I readMediumLE readMediumLE - m (II)Lio/netty/buffer/ByteBuf; setChar setChar - m (Ljava/lang/Enum;)Lnet/minecraft/class_2540; method_10817 writeEnumValue - m (IIB)I bytesBefore bytesBefore - m (Ljava/io/InputStream;I)I writeBytes writeBytes - m ()Lnet/minecraft/class_2960; method_10810 readResourceLocation - m ()J method_10792 readVarLong - m ()[Ljava/nio/ByteBuffer; nioBuffers nioBuffers - m ()I nioBufferCount nioBufferCount - m ()Lnet/minecraft/class_3965; method_17814 readBlockRay - m (I)Lio/netty/buffer/ByteBuf; writeIntLE writeIntLE - m (I)Lio/netty/buffer/ByteBuf; readRetainedSlice readRetainedSlice - m ()Lio/netty/buffer/ByteBuf; asReadOnly asReadOnly - m (II)Lio/netty/buffer/ByteBuf; setShort setShort - m (Lio/netty/util/ByteProcessor;)I forEachByte forEachByte - m (I)[B method_10803 readByteArray - m ()I maxWritableBytes maxWritableBytes - m ()I refCnt refCnt - m ()S readShortLE readShortLE - m (B)I bytesBefore bytesBefore - m (I)Z release release - m (II)Ljava/nio/ByteBuffer; nioBuffer nioBuffer - m ()Lnet/minecraft/class_2487; method_10798 readCompoundTag - m ()Ljava/util/UUID; method_10790 readUniqueId - m ()Ljava/lang/String; method_19772 readString - m (I)Lio/netty/buffer/ByteBuf; retain retain - m (ILjava/nio/ByteBuffer;)Lio/netty/buffer/ByteBuf; getBytes getBytes - m ()I capacity capacity - m (I[BII)Lio/netty/buffer/ByteBuf; setBytes setBytes - m (IILjava/nio/charset/Charset;)Ljava/lang/CharSequence; getCharSequence getCharSequence - m (Ljava/nio/ByteBuffer;)Lio/netty/buffer/ByteBuf; readBytes readBytes - m ()Lio/netty/buffer/ByteBuf; unwrap unwrap - m ()I method_10816 readVarInt - m (J)Lio/netty/buffer/ByteBuf; writeLongLE writeLongLE - m ()I readerIndex readerIndex - m (II)Lio/netty/buffer/ByteBuf; setMedium setMedium - m ()Z isWritable isWritable - m (IZ)Lio/netty/buffer/ByteBuf; setBoolean setBoolean - m ()I readUnsignedShort readUnsignedShort - m (Lio/netty/buffer/ByteBuf;I)Lio/netty/buffer/ByteBuf; readBytes readBytes - m ()J memoryAddress memoryAddress - m (Lnet/minecraft/class_3965;)V method_17813 writeBlockRay - m ()I readableBytes readableBytes - m (I[B)Lio/netty/buffer/ByteBuf; getBytes getBytes - m (D)Lio/netty/buffer/ByteBuf; writeDouble writeDouble - m ()Lio/netty/buffer/ByteBufAllocator; alloc alloc - m (Ljava/lang/Object;)Z equals equals - m (Ljava/lang/Object;)I compareTo compareTo - m ()B readByte readByte - m (I)J getLongLE getLongLE - m ()S readShort readShort - m ()Lnet/minecraft/class_2487; method_30617 func_244273_m - m (I)C getChar getChar - m ()Z isDirect isDirect - m (I)Lio/netty/buffer/ByteBuf; writeMediumLE writeMediumLE - m ()I readMedium readMedium - m ()Z hasArray hasArray - m (Z)Lio/netty/buffer/ByteBuf; writeBoolean writeBoolean - m ()D readDouble readDouble - m ()I arrayOffset arrayOffset - m ([I)Lnet/minecraft/class_2540; method_10806 writeVarIntArray - m (I)J getUnsignedIntLE getUnsignedIntLE - m (Ljava/nio/channels/FileChannel;JI)I writeBytes writeBytes - m (Ljava/lang/Class;)Ljava/lang/Enum; method_10818 readEnumValue - m ()I readIntLE readIntLE - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2540; method_10807 writeBlockPos - m (I)Lio/netty/buffer/ByteBuf; readBytes readBytes - m ()Lio/netty/buffer/ByteBuf; retainedDuplicate retainedDuplicate - m ()I readInt readInt - m (ILjava/nio/channels/ScatteringByteChannel;I)I setBytes setBytes - m ()Lio/netty/buffer/ByteBuf; duplicate duplicate - m (Ljava/io/OutputStream;I)Lio/netty/buffer/ByteBuf; readBytes readBytes - m ()I writerIndex writerIndex - m (Ljava/nio/channels/FileChannel;JI)I readBytes readBytes - m ()Lnet/minecraft/class_2338; method_10811 readBlockPos - m ()Lio/netty/buffer/ByteBuf; discardSomeReadBytes discardSomeReadBytes - m (I)Lio/netty/buffer/ByteBuf; readerIndex readerIndex - m ()I writableBytes writableBytes - m (I)Lio/netty/buffer/ByteBuf; capacity capacity - m (Ljava/util/Date;)Lnet/minecraft/class_2540; method_10796 writeTime - m (Lcom/mojang/serialization/Codec;)Ljava/lang/Object; method_29171 func_240628_a_ - m (I)F getFloat getFloat - m (ILio/netty/buffer/ByteBuf;I)Lio/netty/buffer/ByteBuf; getBytes getBytes - m ()J readUnsignedInt readUnsignedInt - m (I)S getShortLE getShortLE - m (Lio/netty/buffer/ByteBuf;)Lio/netty/buffer/ByteBuf; readBytes readBytes - m (Ljava/lang/Object;)Lio/netty/util/ReferenceCounted; touch touch - m ()J readLongLE readLongLE - m ()Z hasMemoryAddress hasMemoryAddress - m (I)I getMediumLE getMediumLE - m (ILjava/nio/channels/FileChannel;JI)I setBytes setBytes - m (I)J getUnsignedInt getUnsignedInt - m (I)S getUnsignedByte getUnsignedByte - m (Ljava/nio/ByteBuffer;)Lio/netty/buffer/ByteBuf; writeBytes writeBytes - m (IZ)I ensureWritable ensureWritable - m ()Z isReadOnly isReadOnly - m (Ljava/nio/ByteOrder;)Lio/netty/buffer/ByteBuf; order order - m (Lio/netty/util/ByteProcessor;)I forEachByteDesc forEachByteDesc - m ()Lnet/minecraft/class_2561; method_10808 readTextComponent - m (IILio/netty/util/ByteProcessor;)I forEachByteDesc forEachByteDesc - m (I)Z isReadable isReadable - m (I)D getDouble getDouble - m (J)Lnet/minecraft/class_2540; method_10791 writeVarLong - m ()I readUnsignedMediumLE readUnsignedMediumLE - m ()I hashCode hashCode - m (I)I getUnsignedShortLE getUnsignedShortLE - m (I)B getByte getByte - m ()J readUnsignedIntLE readUnsignedIntLE - m (ILjava/nio/channels/GatheringByteChannel;I)I getBytes getBytes - m ([B)Lnet/minecraft/class_2540; method_10813 writeByteArray - m (I)Lio/netty/buffer/ByteBuf; readSlice readSlice - m (II)[Ljava/nio/ByteBuffer; nioBuffers nioBuffers - m (ILio/netty/buffer/ByteBuf;)Lio/netty/buffer/ByteBuf; setBytes setBytes - m ()Lio/netty/buffer/ByteBuf; resetWriterIndex resetWriterIndex - m (I)Ljava/lang/String; method_10800 readString - m (I)Lio/netty/buffer/ByteBuf; writeByte writeByte - m (I)I getMedium getMedium - m (ILio/netty/buffer/ByteBuf;II)Lio/netty/buffer/ByteBuf; setBytes setBytes - m ()Ljava/nio/ByteBuffer; nioBuffer nioBuffer - m (Lio/netty/buffer/ByteBuf;II)Lio/netty/buffer/ByteBuf; writeBytes writeBytes - m (Lio/netty/buffer/ByteBuf;)I compareTo compareTo - m (Lcom/mojang/serialization/Codec;Ljava/lang/Object;)V method_29172 func_240629_a_ - m ([BII)Lio/netty/buffer/ByteBuf; writeBytes writeBytes - m ([BII)Lio/netty/buffer/ByteBuf; readBytes readBytes - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2540; method_10805 writeTextComponent - m (ILio/netty/buffer/ByteBuf;I)Lio/netty/buffer/ByteBuf; setBytes setBytes - m (ILio/netty/buffer/ByteBuf;II)Lio/netty/buffer/ByteBuf; getBytes getBytes - m (F)Lio/netty/buffer/ByteBuf; writeFloat writeFloat - m (ILjava/io/OutputStream;I)Lio/netty/buffer/ByteBuf; getBytes getBytes - m (Ljava/lang/CharSequence;Ljava/nio/charset/Charset;)I writeCharSequence writeCharSequence - m (Lnet/minecraft/class_2505;)Lnet/minecraft/class_2487; method_30616 func_244272_a - m ()Ljava/util/Date; method_10802 readTime - m (Lio/netty/buffer/ByteBuf;II)Lio/netty/buffer/ByteBuf; readBytes readBytes - m ([J)Lnet/minecraft/class_2540; method_10789 writeLongArray - m (I)Z getBoolean getBoolean - m ()C readChar readChar - m ()[I method_10787 readVarIntArray - m ([B)Lio/netty/buffer/ByteBuf; writeBytes writeBytes - m (Ljava/lang/Object;)Lio/netty/buffer/ByteBuf; touch touch - m (I)Lio/netty/util/ReferenceCounted; retain retain - m ()Lio/netty/buffer/ByteBuf; retainedSlice retainedSlice - m (I)Lnet/minecraft/class_2540; method_10804 writeVarInt - m (IIB)I indexOf indexOf - m ()Lio/netty/buffer/ByteBuf; resetReaderIndex resetReaderIndex - m ([B)Lio/netty/buffer/ByteBuf; readBytes readBytes - m (ID)Lio/netty/buffer/ByteBuf; setDouble setDouble - m (II)Lio/netty/buffer/ByteBuf; slice slice - m (ILjava/io/InputStream;I)I setBytes setBytes - m ()J readLong readLong - f Lio/netty/buffer/ByteBuf; field_11695 buf -c net/minecraft/class_2543 net/minecraft/network/NettyPacketDecoder - m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List;)V decode decode - f Lnet/minecraft/class_2598; field_11714 direction - f Lorg/apache/logging/log4j/Marker; field_11713 RECEIVED_PACKET_MARKER - f Lorg/apache/logging/log4j/Logger; field_11715 LOGGER -c net/minecraft/class_2545 net/minecraft/network/NettyPacketEncoder - m (Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/class_2596;Lio/netty/buffer/ByteBuf;)V method_10838 encode - m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Lio/netty/buffer/ByteBuf;)V encode encode - f Lorg/apache/logging/log4j/Logger; field_11721 LOGGER - f Lnet/minecraft/class_2598; field_11720 direction - f Lorg/apache/logging/log4j/Marker; field_11719 RECEIVED_PACKET_MARKER -c net/minecraft/class_2547 net/minecraft/network/INetHandler - m (Lnet/minecraft/class_2561;)V method_10839 onDisconnect - m ()Lnet/minecraft/class_2535; method_2872 getNetworkManager -c net/minecraft/class_5472 net/minecraft/network/RateLimitedNetworkManager - m (Lio/netty/util/concurrent/Future;)V method_30618 func_244277_a - f Lnet/minecraft/class_2561; field_26343 field_244275_h - f Lorg/apache/logging/log4j/Logger; field_26342 field_244274_g - f I field_26344 field_244276_i -c net/minecraft/class_2548 net/minecraft/network/SkipableEncoderException -c net/minecraft/class_2550 net/minecraft/network/NettyVarint21FrameDecoder - m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List;)V decode decode -c net/minecraft/class_2552 net/minecraft/network/NettyVarint21FrameEncoder - m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;Lio/netty/buffer/ByteBuf;)V encode encode - m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Lio/netty/buffer/ByteBuf;)V method_10840 encode -c net/minecraft/class_2554 net/minecraft/util/text/TextComponent - m (Ljava/lang/Object;)Z equals equals - m ()I hashCode hashCode - m ()Lnet/minecraft/class_2554; method_27653 copyRaw - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2583; field_11730 style - f Ljava/util/List; field_11729 siblings - f Lnet/minecraft/class_2477; field_26624 field_244279_e - f Lnet/minecraft/class_5481; field_26623 field_244278_d -c net/minecraft/class_2556 net/minecraft/util/text/ChatType - m ()B method_10843 getId - m ()Z method_19457 getInterrupts - m ()[Lnet/minecraft/class_2556; values values - m (B)Lnet/minecraft/class_2556; method_10842 byId - m (Ljava/lang/String;)Lnet/minecraft/class_2556; valueOf valueOf - f Lnet/minecraft/class_2556; field_11733 GAME_INFO - f Lnet/minecraft/class_2556; field_11735 SYSTEM - f [Lnet/minecraft/class_2556; field_11734 $VALUES - f B field_11736 id - f Z field_18797 interrupts - f Lnet/minecraft/class_2556; field_11737 CHAT -c net/minecraft/class_2558 net/minecraft/util/text/event/ClickEvent - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/String; method_10844 getValue - m ()I hashCode hashCode - m ()Lnet/minecraft/class_2558$class_2559; method_10845 getAction - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2558$class_2559; field_11741 action - f Ljava/lang/String; field_11740 value -c net/minecraft/class_2558$class_2559 net/minecraft/util/text/event/ClickEvent$Action - m (Ljava/lang/String;)Lnet/minecraft/class_2558$class_2559; valueOf valueOf - m (Lnet/minecraft/class_2558$class_2559;)Lnet/minecraft/class_2558$class_2559; method_10849 func_199851_a - m ()Z method_10847 shouldAllowInChat - m ()[Lnet/minecraft/class_2558$class_2559; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2558$class_2559; method_10848 getValueByCanonicalName - m ()Ljava/lang/String; method_10846 getCanonicalName - f Lnet/minecraft/class_2558$class_2559; field_11749 OPEN_URL - f [Lnet/minecraft/class_2558$class_2559; field_11747 $VALUES - f Ljava/lang/String; field_11742 canonicalName - f Lnet/minecraft/class_2558$class_2559; field_11745 SUGGEST_COMMAND - f Lnet/minecraft/class_2558$class_2559; field_11750 RUN_COMMAND - f Ljava/util/Map; field_11743 NAME_MAPPING - f Lnet/minecraft/class_2558$class_2559; field_11746 OPEN_FILE - f Z field_11744 allowedInChat - f Lnet/minecraft/class_2558$class_2559; field_21462 COPY_TO_CLIPBOARD - f Lnet/minecraft/class_2558$class_2559; field_11748 CHANGE_PAGE -c net/minecraft/class_5244 net/minecraft/client/gui/DialogTexts - m (Z)Lnet/minecraft/class_2561; method_27654 optionsEnabled - m (Lnet/minecraft/class_2561;Z)Lnet/minecraft/class_5250; method_30619 getComposedOptionMessage - f Lnet/minecraft/class_2561; field_24334 GUI_DONE - f Lnet/minecraft/class_2561; field_24339 GUI_BACK - f Lnet/minecraft/class_2561; field_26625 CONNECTION_FAILED - f Lnet/minecraft/class_2561; field_24335 GUI_CANCEL - f Lnet/minecraft/class_2561; field_24337 GUI_NO - f Lnet/minecraft/class_2561; field_24336 GUI_YES - f Lnet/minecraft/class_2561; field_24338 GUI_PROCEED - f Lnet/minecraft/class_2561; field_24333 OPTIONS_OFF - f Lnet/minecraft/class_2561; field_24332 OPTIONS_ON -c net/minecraft/class_2561 net/minecraft/util/text/ITextComponent - m ()Lnet/minecraft/class_5481; method_30937 func_241878_f - m ()Lnet/minecraft/class_5250; method_27661 deepCopy - m (Lnet/minecraft/class_5348$class_5246;Lnet/minecraft/class_2583;)Ljava/util/Optional; method_27660 func_230534_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_30163 getTextComponentOrEmpty - m ()Lnet/minecraft/class_2583; method_10866 getStyle - m (ILjava/lang/StringBuilder;Ljava/lang/String;)Ljava/util/Optional; method_27655 func_240639_a_ - m ()Ljava/lang/String; method_10851 getUnformattedComponentText - m (Lnet/minecraft/class_5348$class_5245;)Ljava/util/Optional; method_27659 func_230533_b_ - m ()Ljava/util/List; method_10855 getSiblings - m ()Lnet/minecraft/class_5250; method_27662 copyRaw - m (I)Ljava/lang/String; method_10858 getStringTruncated -c net/minecraft/class_2561$class_2562 net/minecraft/util/text/ITextComponent$Serializer - m ()Ljava/lang/reflect/Field; method_10869 func_199853_a - m (Lnet/minecraft/class_2561;)Lcom/google/gson/JsonElement; method_10868 toJsonTree - m ()Ljava/lang/reflect/Field; method_10876 func_200529_a - m ()Lcom/google/gson/Gson; method_10878 func_199852_b - m (Lnet/minecraft/class_2583;Lcom/google/gson/JsonObject;Lcom/google/gson/JsonSerializationContext;)V method_10875 serializeChatStyle - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_5250; method_10871 deserialize - m (Lnet/minecraft/class_2561;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_10874 serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/stream/JsonReader;)I method_10880 getPos - m (Lnet/minecraft/class_2561;)Ljava/lang/String; method_10867 toJson - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_5250; method_10879 getComponentFromReader - m (Ljava/lang/String;)Lnet/minecraft/class_5250; method_10873 getComponentFromJsonLenient - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_5250; method_10872 getComponentFromJson - m (Ljava/lang/String;)Lnet/minecraft/class_5250; method_10877 getComponentFromJson - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - f Lcom/google/gson/Gson; field_11754 GSON - f Ljava/lang/reflect/Field; field_11752 JSON_READER_LINESTART_FIELD - f Ljava/lang/reflect/Field; field_11753 JSON_READER_POS_FIELD -c net/minecraft/class_2564 net/minecraft/util/text/TextComponentUtils - m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_10886 func_197681_a - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_5250; method_10885 wrapWithSquareBrackets - m (Ljava/util/Collection;Ljava/util/function/Function;)Lnet/minecraft/class_2561; method_10887 makeSortedList - m (Ljava/util/Collection;)Lnet/minecraft/class_2561; method_10888 makeGreenSortedList - m (Lcom/mojang/brigadier/Message;)Lnet/minecraft/class_2561; method_10883 toTextComponent - m (Ljava/util/Collection;Ljava/util/function/Function;)Lnet/minecraft/class_5250; method_10884 func_240649_b_ - m (Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/class_2561; method_10882 getDisplayName - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2583;Lnet/minecraft/class_1297;I)Lnet/minecraft/class_2583; method_27663 func_240646_a_ - m (Lnet/minecraft/class_5250;Lnet/minecraft/class_2583;)Lnet/minecraft/class_5250; method_10889 func_240648_a_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2561;Lnet/minecraft/class_1297;I)Lnet/minecraft/class_5250; method_10881 func_240645_a_ -c net/minecraft/class_2566 net/minecraft/util/text/ITargetedTextComponent - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;I)Lnet/minecraft/class_5250; method_10890 func_230535_a_ -c net/minecraft/class_5348 net/minecraft/util/text/ITextProperties - m (Lnet/minecraft/class_5348$class_5246;Lnet/minecraft/class_2583;)Ljava/util/Optional; method_27658 getComponentWithStyle - m (Lnet/minecraft/class_5348$class_5245;)Ljava/util/Optional; method_27657 getComponent - m (Ljava/lang/String;)Lnet/minecraft/class_5348; method_29430 func_240652_a_ - m ([Lnet/minecraft/class_5348;)Lnet/minecraft/class_5348; method_29433 func_240655_a_ - m (Ljava/lang/StringBuilder;Ljava/lang/String;)Ljava/util/Optional; method_30067 func_241754_a_ - m (Ljava/util/List;)Lnet/minecraft/class_5348; method_29432 func_240654_a_ - m ()Ljava/lang/String; getString getString - m (Ljava/lang/String;Lnet/minecraft/class_2583;)Lnet/minecraft/class_5348; method_29431 func_240653_a_ - f Lnet/minecraft/class_5348; field_25310 field_240651_c_ - f Ljava/util/Optional; field_25309 field_240650_b_ -c net/minecraft/class_5348$4 net/minecraft/util/text/ITextProperties$4 - f Ljava/util/List; field_25314 field_240659_a_ -c net/minecraft/class_5348$3 net/minecraft/util/text/ITextProperties$3 - f Lnet/minecraft/class_2583; field_25313 field_240658_d_ - f Ljava/lang/String; field_25312 field_240657_a_ -c net/minecraft/class_5348$2 net/minecraft/util/text/ITextProperties$2 - f Ljava/lang/String; field_25311 field_240656_a_ -c net/minecraft/class_5348$1 net/minecraft/util/text/ITextProperties$1 -c net/minecraft/class_5348$class_5246 net/minecraft/util/text/ITextProperties$IStyledTextAcceptor - m (Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; accept accept -c net/minecraft/class_5348$class_5245 net/minecraft/util/text/ITextProperties$ITextAcceptor - m (Ljava/lang/String;)Ljava/util/Optional; accept accept -c net/minecraft/class_2568 net/minecraft/util/text/event/HoverEvent - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_2568$class_5247;)Ljava/lang/Object; method_10891 getParameter - m ()Ljava/lang/String; toString toString - m ()Lorg/apache/logging/log4j/Logger; method_27666 func_240664_c_ - m ()Lnet/minecraft/class_2568$class_5247; method_10892 getAction - m ()Lcom/google/gson/JsonObject; method_27665 serialize - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2568; method_27664 deserialize - f Lorg/apache/logging/log4j/Logger; field_24341 LOGGER - f Ljava/lang/Object; field_11755 value - f Lnet/minecraft/class_2568$class_5247; field_11756 action -c net/minecraft/class_2568$class_5249 net/minecraft/util/text/event/HoverEvent$ItemHover - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2568$class_5249; method_27689 deserialize - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2568$class_5249; method_27685 func_240691_a_ - m ()I hashCode hashCode - m ()Lcom/google/gson/JsonElement; method_27687 serialize - m (Lnet/minecraft/class_2568$class_5249;)Lcom/google/gson/JsonElement; method_27686 func_240692_a_ - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2568$class_5249; method_27688 deserialize - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2568$class_5249; method_27684 func_240690_a_ - m (Ljava/lang/Object;)Z equals equals - m ()Lnet/minecraft/class_1799; method_27683 createStack - f Lnet/minecraft/class_1799; field_24358 stack - f Lnet/minecraft/class_1792; field_24355 item - f I field_24356 count - f Lnet/minecraft/class_2487; field_24357 tag -c net/minecraft/class_2568$class_5248 net/minecraft/util/text/event/HoverEvent$EntityHover - m ()Ljava/util/List; method_27682 getTooltip - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m ()Lcom/google/gson/JsonElement; method_27679 serialize - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2568$class_5248; method_27681 deserialize - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2568$class_5248; method_27680 deserialize - f Ljava/util/UUID; field_24352 id - f Lnet/minecraft/class_1299; field_24351 type - f Lnet/minecraft/class_2561; field_24353 name - f Ljava/util/List; field_24354 tooltip -c net/minecraft/class_2568$class_5247 net/minecraft/util/text/event/HoverEvent$Action - m (Ljava/lang/Object;)Ljava/lang/Object; method_27676 castParameter - m (Lnet/minecraft/class_2568$class_5247;)Lnet/minecraft/class_2568$class_5247; method_27672 func_240671_a_ - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2568; method_27671 deserialize - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2568; method_27668 deserialize - m ()Z method_27667 shouldAllowInChat - m ()Ljava/lang/String; toString toString - m (Ljava/lang/Object;)Lcom/google/gson/JsonElement; method_27669 serialize - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2568$class_5249; method_27677 func_240675_b_ - m (Lnet/minecraft/class_2568$class_5247;Ljava/lang/Object;)Ljava/lang/Object; method_27673 func_240672_a_ - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_2568$class_5249; method_27675 func_240673_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_2568$class_5247; method_27670 getValueByCanonicalName - m (Ljava/lang/Object;)Lcom/google/gson/JsonElement; method_27678 func_240676_c_ - m ()Ljava/lang/String; method_27674 getCanonicalName - f Lnet/minecraft/class_2568$class_5247; field_24342 SHOW_TEXT - f Z field_24347 allowedInChat - f Lnet/minecraft/class_2568$class_5247; field_24343 SHOW_ITEM - f Lnet/minecraft/class_2568$class_5247; field_24344 SHOW_ENTITY - f Ljava/util/function/Function; field_24349 serializeToJSON - f Ljava/util/function/Function; field_24350 deserializeFromTextComponent - f Ljava/util/Map; field_24345 NAME_MAPPING - f Ljava/util/function/Function; field_24348 deserializeFromJSON - f Ljava/lang/String; field_24346 canonicalName -c net/minecraft/class_2572 net/minecraft/util/text/KeybindTextComponent - m (Ljava/util/function/Function;)V method_27690 func_240696_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_2561; method_10903 func_240697_d_ - m (Ljava/lang/String;)Ljava/util/function/Supplier; method_10904 func_193635_b - m ()Lnet/minecraft/class_2561; method_27691 func_240698_i_ - m ()Lnet/minecraft/class_2572; method_10902 copyRaw - m ()Ljava/lang/String; method_10901 getKeybind - f Ljava/util/function/Function; field_11766 displaySupplierFunction - f Ljava/util/function/Supplier; field_11768 displaySupplier - f Ljava/lang/String; field_11767 keybind -c net/minecraft/class_5250 net/minecraft/util/text/IFormattableTextComponent - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_5250; method_10852 append - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_5250; method_10862 setStyle - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_5250; method_27696 mergeStyle - m ([Lnet/minecraft/class_124;)Lnet/minecraft/class_5250; method_27695 mergeStyle - m (Ljava/util/function/UnaryOperator;)Lnet/minecraft/class_5250; method_27694 modifyStyle - m (Ljava/lang/String;)Lnet/minecraft/class_5250; method_27693 appendString - m (Lnet/minecraft/class_124;)Lnet/minecraft/class_5250; method_27692 mergeStyle -c net/minecraft/class_2574 net/minecraft/util/text/NBTTextComponent - m (Ljava/lang/String;)Lnet/minecraft/class_2203$class_2209; method_10919 func_218672_b - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;ILjava/lang/String;)Ljava/util/stream/Stream; method_10917 func_223137_a - m (Lnet/minecraft/class_2487;)Ljava/util/stream/Stream; method_10918 func_218675_a - m ()Z method_10921 func_218677_j - m (Lnet/minecraft/class_2168;)Ljava/util/stream/Stream; method_10916 func_218673_a - m (Lnet/minecraft/class_5250;Lnet/minecraft/class_5250;)Lnet/minecraft/class_5250; method_15880 func_240704_a_ - m ()Ljava/lang/String; method_10920 func_218676_i - f Ljava/lang/String; field_11776 field_218679_c - f Lorg/apache/logging/log4j/Logger; field_11777 field_218681_e - f Lnet/minecraft/class_2203$class_2209; field_11779 field_218680_d - f Z field_11778 field_218678_b -c net/minecraft/class_2574$class_4616 net/minecraft/util/text/NBTTextComponent$Storage - m ()Lnet/minecraft/class_2960; method_23728 func_229726_k_ - m ()Lnet/minecraft/class_2574$class_4616; method_27698 copyRaw - f Lnet/minecraft/class_2960; field_21049 field_229725_e_ -c net/minecraft/class_2574$class_2576 net/minecraft/util/text/NBTTextComponent$Entity - m ()Ljava/lang/String; method_10924 func_218687_k - m ()Lnet/minecraft/class_2574$class_2576; method_27697 copyRaw - m (Ljava/lang/String;)Lnet/minecraft/class_2300; method_10923 func_218686_b - f Ljava/lang/String; field_11782 field_218688_e - f Lnet/minecraft/class_2300; field_11781 field_218689_f -c net/minecraft/class_2574$class_2575 net/minecraft/util/text/NBTTextComponent$Block - m ()Ljava/lang/String; method_10922 func_218683_k - m ()Lnet/minecraft/class_2574$class_2575; method_10850 copyRaw - m (Ljava/lang/String;)Lnet/minecraft/class_2267; method_16121 func_218682_b - f Ljava/lang/String; field_11780 field_218684_e - f Lnet/minecraft/class_2267; field_16408 field_218685_f -c net/minecraft/class_2578 net/minecraft/util/text/ScoreTextComponent - m (Ljava/lang/String;)Lnet/minecraft/class_2300; method_27701 func_240707_c_ - m (Ljava/lang/String;Lnet/minecraft/class_2168;)Ljava/lang/String; method_27700 func_240706_a_ - m ()Ljava/lang/String; method_10930 getName - m ()Ljava/lang/String; method_10928 getObjective - m ()Lnet/minecraft/class_2578; method_10929 copyRaw - m (Lnet/minecraft/class_2168;)Ljava/lang/String; method_27699 func_240705_a_ - f Ljava/lang/String; field_11785 objective - f Lnet/minecraft/class_2300; field_11786 selector - f Ljava/lang/String; field_11787 name -c net/minecraft/class_2579 net/minecraft/util/text/SelectorTextComponent - m ()Ljava/lang/String; method_10932 getSelector - m ()Lnet/minecraft/class_2579; method_10931 copyRaw - f Ljava/lang/String; field_11789 selector - f Lorg/apache/logging/log4j/Logger; field_11791 LOGGER - f Lnet/minecraft/class_2300; field_11790 field_197670_d -c net/minecraft/class_2583 net/minecraft/util/text/Style - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_2583;)Ljava/lang/String; method_10988 func_240726_h_ - m (Lnet/minecraft/class_2583;)Ljava/lang/Boolean; method_10972 access$100 - m (Ljava/lang/Boolean;)Lnet/minecraft/class_2583; method_10982 setBold - m (Lnet/minecraft/class_2568;)Lnet/minecraft/class_2583; method_10949 setHoverEvent - m ()Z method_10967 isEmpty - m (Lnet/minecraft/class_2583;)Ljava/lang/Boolean; method_10962 access$300 - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_5251; method_10974 func_240725_g_ - m (Ljava/lang/Boolean;)Lnet/minecraft/class_2583; method_30938 func_244282_c - m (Ljava/lang/String;)Lnet/minecraft/class_2583; method_10975 setInsertion - m ()Z method_10966 getItalic - m ()I hashCode hashCode - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_27702 mergeStyle - m ()Lnet/minecraft/class_2558; method_10970 getClickEvent - m ()Z method_10965 getUnderlined - m (Lnet/minecraft/class_124;)Lnet/minecraft/class_2583; method_27707 forceFormatting - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2960; method_27709 func_240730_k_ - m (Lnet/minecraft/class_2583;)Ljava/lang/Boolean; method_10951 func_240724_f_ - m ()Lnet/minecraft/class_2568; method_10969 getHoverEvent - m ()Lnet/minecraft/class_5251; method_10973 getColor - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2583; method_27704 setFontId - m (Lnet/minecraft/class_2558;)Lnet/minecraft/class_2583; method_10958 setClickEvent - m (Ljava/lang/Boolean;)Lnet/minecraft/class_2583; method_10978 setItalic - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2568; method_10963 func_240728_j_ - m (Lnet/minecraft/class_2583;)Ljava/lang/Boolean; method_10964 access$200 - m (Lnet/minecraft/class_124;)Lnet/minecraft/class_2583; method_10977 setFormatting - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2558; method_10950 func_240727_i_ - m ()Z method_10984 getBold - m ()Ljava/lang/String; method_10955 getInsertion - m ()Z method_10987 getObfuscated - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2583;)Ljava/lang/Boolean; method_10954 access$400 - m (Lnet/minecraft/class_124;)Lnet/minecraft/class_2583; method_27706 applyFormatting - m ()Z method_10986 getStrikethrough - m (Lnet/minecraft/class_5251;)Lnet/minecraft/class_2583; method_27703 setColor - m ([Lnet/minecraft/class_124;)Lnet/minecraft/class_2583; method_27705 createStyleFromFormattings - m ()Lnet/minecraft/class_2960; method_27708 getFontId - f Ljava/lang/Boolean; field_11851 underlined - f Ljava/lang/Boolean; field_11856 bold - f Ljava/lang/Boolean; field_11861 obfuscated - f Lnet/minecraft/class_2568; field_11858 hoverEvent - f Lnet/minecraft/class_2558; field_11853 clickEvent - f Lnet/minecraft/class_2583; field_24360 EMPTY - f Ljava/lang/Boolean; field_11857 strikethrough - f Ljava/lang/Boolean; field_11852 italic - f Lnet/minecraft/class_2960; field_24359 DEFAULT_FONT - f Ljava/lang/String; field_11859 insertion - f Lnet/minecraft/class_5251; field_11855 color - f Lnet/minecraft/class_2960; field_24361 fontId -c net/minecraft/class_2583$1 net/minecraft/util/text/Style$1 - f [I field_11751 field_240731_a_ -c net/minecraft/class_2583$class_2584 net/minecraft/util/text/Style$Serializer - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2558; method_27713 deserializeClickEvent - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Ljava/lang/Boolean; method_27711 deserializeBooleanValue - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_5251; method_27715 deserializeColor - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2568; method_27712 deserializeHoverEvent - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2960; method_27710 deserializeFont - m (Lcom/google/gson/JsonObject;)Ljava/lang/String; method_27714 deserializeInsertion - m (Lnet/minecraft/class_2583;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_10990 serialize - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_2583; method_10991 deserialize -c net/minecraft/class_5492 net/minecraft/client/util/BidiReorder - m (IIZ)Ljava/util/List; method_30940 func_244287_a - m (Lnet/minecraft/class_5348;Lit/unimi/dsi/fastutil/ints/Int2IntFunction;Ljava/util/function/UnaryOperator;)Lnet/minecraft/class_5492; method_30943 func_244290_a - m (Ljava/lang/StringBuilder;Ljava/util/List;ILnet/minecraft/class_2583;I)Z method_30941 func_244288_a - m ()Ljava/lang/String; method_30939 func_244286_a - m (Ljava/lang/StringBuilder;Ljava/util/List;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_30942 func_244289_a - f Lit/unimi/dsi/fastutil/ints/Int2IntFunction; field_26628 field_244285_c - f Ljava/util/List; field_26627 field_244284_b - f Ljava/lang/String; field_26626 field_244283_a -c net/minecraft/class_5251 net/minecraft/util/text/Color - m ()Ljava/lang/String; method_27723 getHex - m (Lnet/minecraft/class_124;)Lnet/minecraft/class_5251; method_27718 fromTextFormatting - m ()Ljava/lang/String; method_27721 getName - m ()I method_27716 getColor - m (I)Lnet/minecraft/class_5251; method_27717 fromInt - m (Ljava/lang/String;)Lnet/minecraft/class_5251; method_27719 fromHex - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_5251;)Ljava/lang/String; method_27720 func_240746_a_ - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_124;)Lnet/minecraft/class_5251; method_27722 func_240748_b_ - f Ljava/util/Map; field_24363 NAME_TO_COLOR_MAP - f Ljava/util/Map; field_24362 FORMATTING_TO_COLOR_MAP - f Ljava/lang/String; field_24365 name - f I field_24364 color -c net/minecraft/class_2585 net/minecraft/util/text/StringTextComponent - m ()Lnet/minecraft/class_2585; method_10992 copyRaw - m ()Ljava/lang/String; method_10993 getText - f Lnet/minecraft/class_2561; field_24366 EMPTY - f Ljava/lang/String; field_11862 text -c net/minecraft/class_2588 net/minecraft/util/text/TranslationTextComponent - m (I)Lnet/minecraft/class_5348; method_29434 func_240757_a_ - m ()Ljava/lang/String; method_11022 getKey - m ()[Ljava/lang/Object; method_11023 getFormatArgs - m (Ljava/lang/String;)V method_11024 func_240758_a_ - m ()V method_11025 ensureInitialized - m ()Lnet/minecraft/class_2588; method_11020 copyRaw - f Ljava/util/regex/Pattern; field_11872 STRING_VARIABLE_PATTERN - f Ljava/util/List; field_11877 children - f [Ljava/lang/Object; field_24367 field_240753_d_ - f [Ljava/lang/Object; field_11875 formatArgs - f Ljava/lang/String; field_11876 key - f Lnet/minecraft/class_5348; field_24368 field_240754_e_ - f Lnet/minecraft/class_2477; field_25317 field_240756_i_ - f Lnet/minecraft/class_5348; field_24369 field_240755_f_ -c net/minecraft/class_2590 net/minecraft/util/text/TranslationTextComponentFormatException -c net/minecraft/class_2596 net/minecraft/network/IPacket - m ()Z method_11051 shouldSkipErrors - m (Lnet/minecraft/class_2540;)V method_11053 readPacketData - m (Lnet/minecraft/class_2540;)V method_11052 writePacketData - m (Lnet/minecraft/class_2547;)V method_11054 processPacket -c net/minecraft/class_2598 net/minecraft/network/PacketDirection - m ()[Lnet/minecraft/class_2598; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2598; valueOf valueOf - f [Lnet/minecraft/class_2598; field_11940 $VALUES - f Lnet/minecraft/class_2598; field_11941 SERVERBOUND - f Lnet/minecraft/class_2598; field_11942 CLIENTBOUND -c net/minecraft/class_2600 net/minecraft/network/PacketThreadUtil - m (Lnet/minecraft/class_2596;Lnet/minecraft/class_2547;Lnet/minecraft/class_1255;)V method_11074 checkThreadAndEnqueue - m (Lnet/minecraft/class_2596;Lnet/minecraft/class_2547;Lnet/minecraft/class_3218;)V method_11073 checkThreadAndEnqueue - m (Lnet/minecraft/class_2547;Lnet/minecraft/class_2596;)V method_11072 func_225383_a - f Lorg/apache/logging/log4j/Logger; field_20318 LOGGER -c net/minecraft/class_2602 net/minecraft/client/network/play/IClientPlayNetHandler - m (Lnet/minecraft/class_2645;)V method_11102 handleCloseWindow - m (Lnet/minecraft/class_2695;)V method_11090 handlePlaceGhostRecipe - m (Lnet/minecraft/class_2777;)V method_11086 handleEntityTeleport - m (Lnet/minecraft/class_2606;)V method_11091 handleSpawnExperienceOrb - m (Lnet/minecraft/class_2770;)V method_11082 handleStopSound - m (Lnet/minecraft/class_2678;)V method_11120 handleJoinGame - m (Lnet/minecraft/class_2623;)V method_11158 handleBlockAction - m (Lnet/minecraft/class_2749;)V method_11122 handleUpdateHealth - m (Lnet/minecraft/class_2664;)V method_11124 handleExplosion - m (Lnet/minecraft/class_2635;)V method_11121 handleChat - m (Lnet/minecraft/class_2720;)V method_11141 handleResourcePack - m (Lnet/minecraft/class_2788;)V method_11106 handleUpdateRecipes - m (Lnet/minecraft/class_2684;)V method_11155 handleEntityMovement - m (Lnet/minecraft/class_2632;)V method_11140 handleServerDifficulty - m (Lnet/minecraft/class_2656;)V method_11087 handleCooldown - m (Lnet/minecraft/class_2676;)V method_11143 handleUpdateLight - m (Lnet/minecraft/class_4282;)V method_20320 handleChunkPositionPacket - m (Lnet/minecraft/class_2767;)V method_11146 handleSoundEffect - m (Lnet/minecraft/class_2670;)V method_11147 handleKeepAlive - m (Lnet/minecraft/class_2729;)V method_11161 handleSelectAdvancementsTab - m (Lnet/minecraft/class_2616;)V method_11160 handleAnimation - m (Lnet/minecraft/class_2757;)V method_11118 handleUpdateScore - m (Lnet/minecraft/class_2739;)V method_11093 handleEntityMetadata - m (Lnet/minecraft/class_2707;)V method_11092 handlePlayerLook - m (Lnet/minecraft/class_2775;)V method_11150 handleCollectItem - m (Lnet/minecraft/class_2644;)V method_11123 handleConfirmTransaction - m (Lnet/minecraft/class_2755;)V method_11099 handleTeams - m (Lnet/minecraft/class_2637;)V method_11100 handleMultiBlockChange - m (Lnet/minecraft/class_2748;)V method_11101 handleSetExperience - m (Lnet/minecraft/class_2718;)V method_11119 handleRemoveEntityEffect - m (Lnet/minecraft/class_2604;)V method_11112 handleSpawnObject - m (Lnet/minecraft/class_2693;)V method_11108 handleSignEditorOpen - m (Lnet/minecraft/class_2622;)V method_11094 handleUpdateTileEntity - m (Lnet/minecraft/class_2663;)V method_11148 handleEntityStatus - m (Lnet/minecraft/class_2765;)V method_11125 handleSpawnMovingSoundEffect - m (Lnet/minecraft/class_2735;)V method_11135 handleHeldItemChange - m (Lnet/minecraft/class_2620;)V method_11116 handleBlockBreakAnim - m (Lnet/minecraft/class_2716;)V method_11095 handleDestroyEntities - m (Lnet/minecraft/class_2675;)V method_11077 handleParticles - m (Lnet/minecraft/class_2703;)V method_11113 handlePlayerListItem - m (Lnet/minecraft/class_2648;)V method_11089 handleOpenHorseWindow - m (Lnet/minecraft/class_2653;)V method_11109 handleSetSlot - m (Lnet/minecraft/class_2783;)V method_11084 handleEntityEffect - m (Lnet/minecraft/class_2613;)V method_11097 handleSpawnPlayer - m (Lnet/minecraft/class_2726;)V method_11139 handleEntityHeadLook - m (Lnet/minecraft/class_3943;)V method_17586 handleMerchantOffers - m (Lnet/minecraft/class_2752;)V method_11080 handleSetPassengers - m (Lnet/minecraft/class_2698;)V method_11133 handleCombatEvent - m (Lnet/minecraft/class_2668;)V method_11085 handleChangeGameState - m (Lnet/minecraft/class_2629;)V method_11078 handleUpdateBossInfo - m (Lnet/minecraft/class_3944;)V method_17587 handleOpenWindowPacket - m (Lnet/minecraft/class_2744;)V method_11151 handleEntityEquipment - m (Lnet/minecraft/class_2661;)V method_11083 handleDisconnect - m (Lnet/minecraft/class_2641;)V method_11145 handleCommandList - m (Lnet/minecraft/class_2774;)V method_11127 handleNBTQueryResponse - m (Lnet/minecraft/class_2736;)V method_11159 handleDisplayObjective - m (Lnet/minecraft/class_4463;)V method_21707 handleAcknowledgePlayerDigging - m (Lnet/minecraft/class_2762;)V method_11103 handleTitle - m (Lnet/minecraft/class_2713;)V method_11115 handleRecipeBook - m (Lnet/minecraft/class_2673;)V method_11098 handleEffect - m (Lnet/minecraft/class_2660;)V method_11104 handleCustomSound - m (Lnet/minecraft/class_2743;)V method_11132 handleEntityVelocity - m (Lnet/minecraft/class_2651;)V method_11131 handleWindowProperty - m (Lnet/minecraft/class_2781;)V method_11149 handleEntityProperties - m (Lnet/minecraft/class_2734;)V method_11111 handleCamera - m (Lnet/minecraft/class_2612;)V method_11114 handleSpawnPainting - m (Lnet/minecraft/class_2666;)V method_11107 processChunkUnload - m (Lnet/minecraft/class_2610;)V method_11138 handleSpawnMob - m (Lnet/minecraft/class_2751;)V method_11144 handleScoreboardObjective - m (Lnet/minecraft/class_2649;)V method_11153 handleWindowItems - m (Lnet/minecraft/class_2626;)V method_11136 handleBlockChange - m (Lnet/minecraft/class_2696;)V method_11154 handlePlayerAbilities - m (Lnet/minecraft/class_2759;)V method_11142 func_230488_a_ - m (Lnet/minecraft/class_3895;)V method_17186 handleOpenBookPacket - m (Lnet/minecraft/class_2772;)V method_11105 handlePlayerListHeaderFooter - m (Lnet/minecraft/class_2724;)V method_11117 handleRespawn - m (Lnet/minecraft/class_2683;)V method_11088 handleMaps - m (Lnet/minecraft/class_2639;)V method_11081 handleTabComplete - m (Lnet/minecraft/class_2740;)V method_11110 handleEntityAttach - m (Lnet/minecraft/class_2658;)V method_11152 handleCustomPayload - m (Lnet/minecraft/class_2708;)V method_11157 handlePlayerPosLook - m (Lnet/minecraft/class_2790;)V method_11126 handleTags - m (Lnet/minecraft/class_4273;)V method_20203 handleUpdateViewDistancePacket - m (Lnet/minecraft/class_2617;)V method_11129 handleStatistics - m (Lnet/minecraft/class_2692;)V method_11134 handleMoveVehicle - m (Lnet/minecraft/class_2779;)V method_11130 handleAdvancementInfo - m (Lnet/minecraft/class_2730;)V method_11096 handleWorldBorder - m (Lnet/minecraft/class_2761;)V method_11079 handleTimeUpdate - m (Lnet/minecraft/class_2672;)V method_11128 handleChunkData -c net/minecraft/class_2604 net/minecraft/network/play/server/SSpawnObjectPacket - m ()D method_11170 func_218693_g - m ()Lnet/minecraft/class_1299; method_11169 getType - m ()D method_11176 getZ - m ()D method_11174 getY - m ()Ljava/util/UUID; method_11164 getUniqueId - m ()D method_11173 func_218692_i - m ()D method_11172 func_218695_h - m ()I method_11168 getYaw - m ()I method_11166 getData - m (Lnet/minecraft/class_2602;)V method_11178 processPacket - m ()D method_11175 getX - m ()I method_11167 getEntityID - m ()I method_11171 getPitch - f I field_11947 pitch - f I field_11949 speedZ - f I field_11950 speedY - f I field_11954 data - f D field_11948 x - f I field_11953 entityId - f I field_11957 yaw - f D field_11956 z - f D field_11946 y - f I field_11951 speedX - f Lnet/minecraft/class_1299; field_11955 type - f Ljava/util/UUID; field_11952 uniqueId -c net/minecraft/class_2606 net/minecraft/network/play/server/SSpawnExperienceOrbPacket - m ()D method_11180 getZ - m ()I method_11184 getXPValue - m ()D method_11185 getX - m ()I method_11183 getEntityID - m (Lnet/minecraft/class_2602;)V method_11182 processPacket - m ()D method_11181 getY - f I field_11974 entityID - f D field_11972 posX - f I field_11973 xpValue - f D field_11970 posZ - f D field_11971 posY -c net/minecraft/class_2610 net/minecraft/network/play/server/SSpawnMobPacket - m ()B method_11204 getHeadPitch - m (Lnet/minecraft/class_2602;)V method_11217 processPacket - m ()I method_11207 getEntityID - m ()I method_11212 getVelocityX - m ()B method_11205 getYaw - m ()I method_11211 getVelocityY - m ()B method_11206 getPitch - m ()I method_11209 getVelocityZ - m ()D method_11216 getZ - m ()D method_11214 getX - m ()I method_11210 getEntityType - m ()D method_11215 getY - m ()Ljava/util/UUID; method_11213 getUniqueId - f D field_12002 z - f I field_11996 entityId - f D field_11990 x - f Ljava/util/UUID; field_11997 uniqueId - f I field_11995 type - f D field_12003 y - f I field_11991 velocityZ - f B field_11998 headPitch - f I field_11993 velocityX - f B field_12000 yaw - f I field_11992 velocityY - f B field_11999 pitch -c net/minecraft/class_2612 net/minecraft/network/play/server/SSpawnPaintingPacket - m ()I method_11225 getEntityID - m ()Lnet/minecraft/class_1535; method_11221 getType - m ()Ljava/util/UUID; method_11222 getUniqueId - m ()Lnet/minecraft/class_2350; method_11223 getFacing - m (Lnet/minecraft/class_2602;)V method_11224 processPacket - m ()Lnet/minecraft/class_2338; method_11226 getPosition - f Lnet/minecraft/class_2350; field_12011 facing - f I field_12012 entityID - f Ljava/util/UUID; field_12009 uniqueId - f I field_12010 title - f Lnet/minecraft/class_2338; field_12008 position -c net/minecraft/class_2613 net/minecraft/network/play/server/SSpawnPlayerPacket - m ()D method_11233 getZ - m ()B method_11234 getYaw - m ()B method_11228 getPitch - m ()I method_11227 getEntityID - m ()D method_11231 getX - m ()Ljava/util/UUID; method_11230 getUniqueId - m ()D method_11232 getY - m (Lnet/minecraft/class_2602;)V method_11235 processPacket - f Ljava/util/UUID; field_12015 uniqueId - f D field_12021 z - f B field_12020 yaw - f B field_12019 pitch - f I field_12017 entityId - f D field_12014 x - f D field_12013 y -c net/minecraft/class_2616 net/minecraft/network/play/server/SAnimateHandPacket - m ()I method_11269 getEntityID - m (Lnet/minecraft/class_2602;)V method_11268 processPacket - m ()I method_11267 getAnimationType - f I field_12029 entityId - f I field_12028 type -c net/minecraft/class_2617 net/minecraft/network/play/server/SStatisticsPacket - m (Lnet/minecraft/class_3445;)I method_11272 func_197683_a - m ()Ljava/util/Map; method_11273 getStatisticMap - m (Lnet/minecraft/class_3448;Lnet/minecraft/class_2540;)V method_11271 readValues - m (Lnet/minecraft/class_2602;)V method_11270 processPacket - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_12030 statisticMap -c net/minecraft/class_4463 net/minecraft/network/play/server/SPlayerDiggingPacket - m (Lnet/minecraft/class_2602;)V method_21708 processPacket - m ()Lnet/minecraft/class_2846$class_2847; method_21712 getAction - m ()Lnet/minecraft/class_2680; method_21709 getBlockState - m ()Z method_21711 wasSuccessful - m ()Lnet/minecraft/class_2338; method_21710 getPosition - f Z field_20323 successful - f Lnet/minecraft/class_2680; field_20322 state - f Lorg/apache/logging/log4j/Logger; field_20320 LOGGER - f Lnet/minecraft/class_2846$class_2847; field_20319 action - f Lnet/minecraft/class_2338; field_20321 pos -c net/minecraft/class_2620 net/minecraft/network/play/server/SAnimateBlockBreakPacket - m ()Lnet/minecraft/class_2338; method_11277 getPosition - m ()I method_11278 getProgress - m ()I method_11280 getBreakerId - m (Lnet/minecraft/class_2602;)V method_11279 processPacket - f Lnet/minecraft/class_2338; field_12034 position - f I field_12032 progress - f I field_12033 breakerId -c net/minecraft/class_2622 net/minecraft/network/play/server/SUpdateTileEntityPacket - m (Lnet/minecraft/class_2602;)V method_11292 processPacket - m ()I method_11291 getTileEntityType - m ()Lnet/minecraft/class_2338; method_11293 getPos - m ()Lnet/minecraft/class_2487; method_11290 getNbtCompound - f Lnet/minecraft/class_2487; field_12039 nbt - f I field_12038 tileEntityType - f Lnet/minecraft/class_2338; field_12040 blockPos -c net/minecraft/class_2623 net/minecraft/network/play/server/SBlockActionPacket - m ()Lnet/minecraft/class_2248; method_11295 getBlockType - m ()I method_11294 getData1 - m ()I method_11296 getData2 - m ()Lnet/minecraft/class_2338; method_11298 getBlockPosition - m (Lnet/minecraft/class_2602;)V method_11297 processPacket - f Lnet/minecraft/class_2338; field_12044 blockPosition - f Lnet/minecraft/class_2248; field_12043 block - f I field_12042 instrument - f I field_12041 pitch -c net/minecraft/class_2626 net/minecraft/network/play/server/SChangeBlockPacket - m (Lnet/minecraft/class_2602;)V method_11310 processPacket - m ()Lnet/minecraft/class_2338; method_11309 getPos - m ()Lnet/minecraft/class_2680; method_11308 getState - f Lnet/minecraft/class_2680; field_12051 state - f Lnet/minecraft/class_2338; field_12052 pos -c net/minecraft/class_2629 net/minecraft/network/play/server/SUpdateBossInfoPacket - m (I)V method_11323 setFlags - m ()Z method_11331 shouldDarkenSky - m (Lnet/minecraft/class_2602;)V method_11330 processPacket - m ()Z method_11321 shouldPlayEndBossMusic - m ()F method_11327 getPercent - m ()Lnet/minecraft/class_2629$class_2630; method_11324 getOperation - m ()Lnet/minecraft/class_1259$class_1260; method_11325 getColor - m ()Lnet/minecraft/class_1259$class_1261; method_11329 getOverlay - m ()I method_11326 getFlags - m ()Ljava/util/UUID; method_11322 getUniqueId - m ()Z method_11332 shouldCreateFog - m ()Lnet/minecraft/class_2561; method_11328 getName - f Ljava/util/UUID; field_12074 uniqueId - f Z field_12070 playEndBossMusic - f F field_12069 percent - f Z field_12068 createFog - f Lnet/minecraft/class_2561; field_12071 name - f Z field_12072 darkenSky - f Lnet/minecraft/class_2629$class_2630; field_12075 operation - f Lnet/minecraft/class_1259$class_1260; field_12073 color - f Lnet/minecraft/class_1259$class_1261; field_12076 overlay -c net/minecraft/class_2629$1 net/minecraft/network/play/server/SUpdateBossInfoPacket$1 - f [I field_12077 field_187039_a -c net/minecraft/class_2629$class_2630 net/minecraft/network/play/server/SUpdateBossInfoPacket$Operation - m ()[Lnet/minecraft/class_2629$class_2630; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2629$class_2630; valueOf valueOf - f Lnet/minecraft/class_2629$class_2630; field_12080 UPDATE_PCT - f [Lnet/minecraft/class_2629$class_2630; field_12079 $VALUES - f Lnet/minecraft/class_2629$class_2630; field_12082 REMOVE - f Lnet/minecraft/class_2629$class_2630; field_12084 UPDATE_NAME - f Lnet/minecraft/class_2629$class_2630; field_12081 UPDATE_STYLE - f Lnet/minecraft/class_2629$class_2630; field_12078 ADD - f Lnet/minecraft/class_2629$class_2630; field_12083 UPDATE_PROPERTIES -c net/minecraft/class_2632 net/minecraft/network/play/server/SServerDifficultyPacket - m (Lnet/minecraft/class_2602;)V method_11341 processPacket - m ()Z method_11340 isDifficultyLocked - m ()Lnet/minecraft/class_1267; method_11342 getDifficulty - f Lnet/minecraft/class_1267; field_12090 difficulty - f Z field_12091 difficultyLocked -c net/minecraft/class_2635 net/minecraft/network/play/server/SChatPacket - m ()Z method_11387 isSystem - m ()Lnet/minecraft/class_2561; method_11388 getChatComponent - m ()Ljava/util/UUID; method_29175 func_240810_e_ - m (Lnet/minecraft/class_2602;)V method_11386 processPacket - m ()Lnet/minecraft/class_2556; method_11389 getType - f Lnet/minecraft/class_2561; field_12112 chatComponent - f Lnet/minecraft/class_2556; field_12113 type - f Ljava/util/UUID; field_25133 field_240809_c_ -c net/minecraft/class_2639 net/minecraft/network/play/server/STabCompletePacket - m ()Lcom/mojang/brigadier/suggestion/Suggestions; method_11397 getSuggestions - m ()I method_11399 getTransactionId - m (Lnet/minecraft/class_2602;)V method_11398 processPacket - f Lcom/mojang/brigadier/suggestion/Suggestions; field_12121 suggestions - f I field_12122 transactionId -c net/minecraft/class_2641 net/minecraft/network/play/server/SCommandListPacket - m (Lnet/minecraft/class_2540;B)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_11402 readArgumentBuilder - m ([Lnet/minecraft/class_2641$class_2642;Lnet/minecraft/class_2641$class_2642;)Z method_30947 func_244295_a - m (Lnet/minecraft/class_2602;)V method_11404 processPacket - m (Lnet/minecraft/class_2540;Lcom/mojang/brigadier/tree/CommandNode;Ljava/util/Map;)V method_11401 writeCommandNode - m ()Lcom/mojang/brigadier/tree/RootCommandNode; method_11403 getRoot - m (Lit/unimi/dsi/fastutil/objects/Object2IntMap;)[Lcom/mojang/brigadier/tree/CommandNode; method_30945 func_244293_a - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2641$class_2642; method_11405 readEntry - m ([Lnet/minecraft/class_2641$class_2642;)V method_30946 func_244294_a - m (Lcom/mojang/brigadier/tree/RootCommandNode;)Lit/unimi/dsi/fastutil/objects/Object2IntMap; method_30944 func_244292_a - f Lcom/mojang/brigadier/tree/RootCommandNode; field_12123 root -c net/minecraft/class_2641$class_2642 net/minecraft/network/play/server/SCommandListPacket$Entry - m (Lcom/mojang/brigadier/context/CommandContext;)I method_11408 func_197724_a - m ([Lnet/minecraft/class_2641$class_2642;)Z method_11406 createCommandNode - m (Lnet/minecraft/class_2641$class_2642;)Lcom/mojang/brigadier/tree/CommandNode; method_11407 access$000 - f [I field_12125 children - f B field_12124 flags - f Lcom/mojang/brigadier/tree/CommandNode; field_12128 node - f Lcom/mojang/brigadier/builder/ArgumentBuilder; field_12127 argBuilder - f I field_12126 redirectTarget -c net/minecraft/class_2641$1 net/minecraft/network/play/server/SCommandListPacket$1 -c net/minecraft/class_2644 net/minecraft/network/play/server/SConfirmTransactionPacket - m ()Z method_11426 wasAccepted - m ()S method_11423 getActionNumber - m ()I method_11425 getWindowId - m (Lnet/minecraft/class_2602;)V method_11424 processPacket - f Z field_12135 accepted - f S field_12134 actionNumber - f I field_12136 windowId -c net/minecraft/class_2645 net/minecraft/network/play/server/SCloseWindowPacket - m (Lnet/minecraft/class_2602;)V method_11427 processPacket - f I field_12137 windowId -c net/minecraft/class_2649 net/minecraft/network/play/server/SWindowItemsPacket - m (Lnet/minecraft/class_2602;)V method_11439 processPacket - m ()I method_11440 getWindowId - m ()Ljava/util/List; method_11441 getItemStacks - f Ljava/util/List; field_12147 itemStacks - f I field_12146 windowId -c net/minecraft/class_2651 net/minecraft/network/play/server/SWindowPropertyPacket - m (Lnet/minecraft/class_2602;)V method_11447 processPacket - m ()I method_11448 getWindowId - m ()I method_11445 getProperty - m ()I method_11446 getValue - f I field_12150 windowId - f I field_12149 property - f I field_12148 value -c net/minecraft/class_2653 net/minecraft/network/play/server/SSetSlotPacket - m ()I method_11450 getSlot - m ()Lnet/minecraft/class_1799; method_11449 getStack - m (Lnet/minecraft/class_2602;)V method_11451 processPacket - m ()I method_11452 getWindowId - f I field_12152 windowId - f I field_12151 slot - f Lnet/minecraft/class_1799; field_12153 item -c net/minecraft/class_2656 net/minecraft/network/play/server/SCooldownPacket - m (Lnet/minecraft/class_2602;)V method_11455 processPacket - m ()Lnet/minecraft/class_1792; method_11453 getItem - m ()I method_11454 getTicks - f Lnet/minecraft/class_1792; field_12154 item - f I field_12155 ticks -c net/minecraft/class_2658 net/minecraft/network/play/server/SCustomPayloadPlayPacket - m ()Lnet/minecraft/class_2540; method_11458 getBufferData - m ()Lnet/minecraft/class_2960; method_11456 getChannelName - m (Lnet/minecraft/class_2602;)V method_11457 processPacket - f Lnet/minecraft/class_2540; field_12162 data - f Lnet/minecraft/class_2960; field_12165 channel - f Lnet/minecraft/class_2960; field_18957 DEBUG_POI_TICKET_COUNT - f Lnet/minecraft/class_2960; field_12164 DEBUG_WORLDGEN_ATTEMPT - f Lnet/minecraft/class_2960; field_19331 DEBUG_RAIDS - f Lnet/minecraft/class_2960; field_20600 field_229730_p_ - f Lnet/minecraft/class_2960; field_12163 DEBUG_STRUCTURES - f Lnet/minecraft/class_2960; field_12156 DEBUG_CAVES - f Lnet/minecraft/class_2960; field_20599 field_229729_o_ - f Lnet/minecraft/class_2960; field_21560 field_229728_n_ - f Lnet/minecraft/class_2960; field_12157 DEBUG_NEIGHBORS_UPDATE - f Lnet/minecraft/class_2960; field_12161 DEBUG_PATH - f Lnet/minecraft/class_2960; field_21559 field_229727_m_ - f Lnet/minecraft/class_2960; field_18800 DEBUG_BRAIN - f Lnet/minecraft/class_2960; field_12158 BRAND - f Lnet/minecraft/class_2960; field_18799 DEBUG_GOAL_SELECTOR - f Lnet/minecraft/class_2960; field_18960 DEBUG_VILLAGE_SECTIONS - f Lnet/minecraft/class_2960; field_18959 DEBUG_POI_REMOVED - f Lnet/minecraft/class_2960; field_18958 DEBUG_POI_ADDED -c net/minecraft/class_2660 net/minecraft/network/play/server/SPlaySoundPacket - m ()D method_11465 getZ - m ()F method_11463 getVolume - m ()D method_11462 getX - m ()D method_11461 getY - m ()Lnet/minecraft/class_3419; method_11459 getCategory - m ()F method_11464 getPitch - m (Lnet/minecraft/class_2602;)V method_11466 processPacket - m ()Lnet/minecraft/class_2960; method_11460 getSoundName - f Lnet/minecraft/class_3419; field_12171 category - f Lnet/minecraft/class_2960; field_12170 soundName - f F field_12172 pitch - f I field_12169 x - f I field_12168 y - f F field_12166 volume - f I field_12167 z -c net/minecraft/class_2661 net/minecraft/network/play/server/SDisconnectPacket - m ()Lnet/minecraft/class_2561; method_11468 getReason - m (Lnet/minecraft/class_2602;)V method_11467 processPacket - f Lnet/minecraft/class_2561; field_12173 reason -c net/minecraft/class_2663 net/minecraft/network/play/server/SEntityStatusPacket - m ()B method_11470 getOpCode - m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_11469 getEntity - m (Lnet/minecraft/class_2602;)V method_11471 processPacket - f B field_12174 logicOpcode - f I field_12175 entityId -c net/minecraft/class_2664 net/minecraft/network/play/server/SExplosionPacket - m ()F method_11476 getStrength - m ()Ljava/util/List; method_11479 getAffectedBlockPositions - m ()F method_11474 getMotionZ - m ()D method_11475 getX - m ()D method_11478 getZ - m ()D method_11477 getY - m ()F method_11472 getMotionX - m (Lnet/minecraft/class_2602;)V method_11480 processPacket - m ()F method_11473 getMotionY - f D field_12180 posX - f D field_12177 posZ - f D field_12178 posY - f F field_12182 motionZ - f F field_12176 motionX - f Ljava/util/List; field_12181 affectedBlockPositions - f F field_12183 motionY - f F field_12179 strength -c net/minecraft/class_2666 net/minecraft/network/play/server/SUnloadChunkPacket - m ()I method_11485 getZ - m (Lnet/minecraft/class_2602;)V method_11486 processPacket - m ()I method_11487 getX - f I field_12194 z - f I field_12195 x -c net/minecraft/class_2668 net/minecraft/network/play/server/SChangeGameStatePacket - m (Lnet/minecraft/class_2602;)V method_11490 processPacket - m ()F method_11492 getValue - m ()Lnet/minecraft/class_2668$class_5402; method_11491 func_241776_b_ - f Lnet/minecraft/class_2668$class_5402; field_25651 field_241770_g_ - f Lnet/minecraft/class_2668$class_5402; field_25652 field_241771_h_ - f Lnet/minecraft/class_2668$class_5402; field_25648 field_241767_d_ - f Lnet/minecraft/class_2668$class_5402; field_25649 field_241768_e_ - f F field_12198 value - f Lnet/minecraft/class_2668$class_5402; field_25650 field_241769_f_ - f Lnet/minecraft/class_2668$class_5402; field_25645 field_241764_a_ - f Lnet/minecraft/class_2668$class_5402; field_25656 field_241775_l_ - f Lnet/minecraft/class_2668$class_5402; field_25646 field_241765_b_ - f Lnet/minecraft/class_2668$class_5402; field_12199 state - f Lnet/minecraft/class_2668$class_5402; field_25647 field_241766_c_ - f Lnet/minecraft/class_2668$class_5402; field_25653 field_241772_i_ - f Lnet/minecraft/class_2668$class_5402; field_25654 field_241773_j_ - f Lnet/minecraft/class_2668$class_5402; field_25655 field_241774_k_ -c net/minecraft/class_2668$class_5402 net/minecraft/network/play/server/SChangeGameStatePacket$State - m ()Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; method_30004 func_241779_a_ - m (Lnet/minecraft/class_2668$class_5402;)I method_30005 func_241780_a_ - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_25657 field_241777_a_ - f I field_25658 field_241778_b_ -c net/minecraft/class_2648 net/minecraft/network/play/server/SOpenHorseWindowPacket - m ()I method_11434 func_218702_c - m ()I method_11432 func_218704_b - m ()I method_11433 func_218703_d - m (Lnet/minecraft/class_2602;)V method_11437 processPacket - f I field_12144 field_218705_a - f I field_12142 field_218707_c - f I field_12143 field_218706_b -c net/minecraft/class_2670 net/minecraft/network/play/server/SKeepAlivePacket - m ()J method_11517 getId - m (Lnet/minecraft/class_2602;)V method_11518 processPacket - f J field_12211 id -c net/minecraft/class_2672 net/minecraft/network/play/server/SChunkDataPacket - m (Lnet/minecraft/class_2602;)V method_11528 processPacket - m (Lnet/minecraft/class_2818;I)I method_11522 calculateChunkSize - m ()Lnet/minecraft/class_2487; method_16123 getHeightmapTags - m ()I method_11523 getChunkX - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2818;I)I method_11529 extractChunkData - m ()Z method_11530 isFullChunk - m ()[I method_22422 func_244296_i - m ()Lio/netty/buffer/ByteBuf; method_11527 getWriteBuffer - m ()Ljava/util/List; method_11525 getTileEntityTags - m ()Lnet/minecraft/class_2540; method_11521 getReadBuffer - m ()I method_11526 getAvailableSections - m ()I method_11524 getChunkZ - f [B field_12237 buffer - f Ljava/util/List; field_12238 tileEntityTags - f [I field_20664 biomes - f Z field_12233 fullChunk - f I field_12234 availableSections - f I field_12236 chunkX - f I field_12235 chunkZ - f Lnet/minecraft/class_2487; field_16416 heightmapTags -c net/minecraft/class_2673 net/minecraft/network/play/server/SPlaySoundEventPacket - m ()I method_11534 getSoundData - m ()I method_11532 getSoundType - m ()Lnet/minecraft/class_2338; method_11531 getSoundPos - m ()Z method_11533 isSoundServerwide - m (Lnet/minecraft/class_2602;)V method_11535 processPacket - f I field_12239 soundData - f Z field_12240 serverWide - f Lnet/minecraft/class_2338; field_12242 soundPos - f I field_12241 soundType -c net/minecraft/class_2675 net/minecraft/network/play/server/SSpawnParticlePacket - m ()F method_11550 getZOffset - m ()F method_11549 getYOffset - m ()F method_11543 getParticleSpeed - m ()Z method_11552 isLongDistance - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2396;)Lnet/minecraft/class_2394; method_11542 readParticle - m ()D method_11546 getZCoordinate - m ()F method_11548 getXOffset - m ()D method_11544 getXCoordinate - m ()Lnet/minecraft/class_2394; method_11551 getParticle - m (Lnet/minecraft/class_2602;)V method_11553 processPacket - m ()D method_11547 getYCoordinate - m ()I method_11545 getParticleCount - f D field_12257 yCoord - f D field_12258 xCoord - f D field_12256 zCoord - f I field_12253 particleCount - f F field_12251 zOffset - f F field_12260 particleSpeed - f F field_12255 xOffset - f Z field_12254 longDistance - f F field_12252 yOffset - f Lnet/minecraft/class_2394; field_12259 particle -c net/minecraft/class_2676 net/minecraft/network/play/server/SUpdateLightPacket - m ()I method_11556 getSkyLightUpdateMask - m ()I method_11554 getChunkZ - m ()Z method_30006 func_241784_j_ - m ()I method_16124 getSkyLightResetMask - m ()Ljava/util/List; method_11555 getSkyLightData - m ()I method_11558 getChunkX - m ()Ljava/util/List; method_11557 getBlockLightData - m (Lnet/minecraft/class_2602;)V method_11560 processPacket - m ()I method_16125 getBlockLightResetMask - m ()I method_11559 getBlockLightUpdateMask - f Ljava/util/List; field_12266 skyLightData - f Ljava/util/List; field_12261 blockLightData - f I field_16418 skyLightResetMask - f I field_16417 blockLightResetMask - f I field_12264 chunkZ - f Z field_25659 field_241783_i_ - f I field_12262 blockLightUpdateMask - f I field_12263 skyLightUpdateMask - f I field_12265 chunkX -c net/minecraft/class_2678 net/minecraft/network/play/server/SJoinGamePacket - m (Lnet/minecraft/class_2602;)V method_11567 processPacket - m ()I method_20204 getViewDistance - m ()Ljava/util/Set; method_29443 func_240816_f_ - m ()Lnet/minecraft/class_2874; method_29444 func_244297_i - m ()Z method_28118 isHardcoreMode - m ()Lnet/minecraft/class_5455; method_11565 func_240817_g_ - m ()J method_22423 getHashedSeed - m ()Lnet/minecraft/class_1934; method_11561 getGameType - m ()Lnet/minecraft/class_1934; method_30116 func_241786_f_ - m ()Z method_11568 func_240821_o_ - m ()I method_11564 getPlayerId - m ()Z method_22424 func_229743_k_ - m ()Z method_11562 isReducedDebugInfo - m ()Z method_28119 func_240820_n_ - m ()Lnet/minecraft/class_2874; method_31177 func_244298_q - m ()Lnet/minecraft/class_5321; method_29176 func_240819_i_ - f Lnet/minecraft/class_5321; field_25134 dimension - f Lnet/minecraft/class_5455$class_5457; field_12284 field_240812_f_ - f I field_12279 maxPlayers - f I field_19145 viewDistance - f Z field_12281 hardcoreMode - f Lnet/minecraft/class_2874; field_25321 field_240813_g_ - f Lnet/minecraft/class_1934; field_25713 field_241785_e_ - f Lnet/minecraft/class_1934; field_12282 gameType - f J field_20665 hashedSeed - f Z field_20666 field_240815_n_ - f I field_12280 playerId - f Z field_24618 reducedDebugInfo - f Z field_12278 field_240814_m_ - f Z field_24619 enableRespawnScreen - f Ljava/util/Set; field_25320 field_240811_e_ -c net/minecraft/class_2683 net/minecraft/network/play/server/SMapDataPacket - m (Lnet/minecraft/class_22;)V method_11642 setMapdataTo - m (Lnet/minecraft/class_2602;)V method_11643 processPacket - m ()I method_11644 getMapId - f I field_12300 minZ - f I field_12303 mapId - f Z field_12302 trackingPosition - f I field_12299 columns - f Z field_17433 field_218730_d - f I field_12297 rows - f [B field_12298 mapDataBytes - f [Lnet/minecraft/class_20; field_12304 icons - f I field_12301 minX - f B field_12296 mapScale -c net/minecraft/class_3943 net/minecraft/network/play/server/SMerchantOffersPacket - m (Lnet/minecraft/class_2602;)V method_17588 processPacket - m ()I method_19459 getExp - m ()Lnet/minecraft/class_1916; method_17590 getOffers - m ()Z method_19460 func_218735_f - m ()Z method_20722 func_223477_g - m ()I method_17589 getContainerId - m ()I method_19458 getLevel - f I field_18802 xp - f Z field_18803 field_218740_e - f Lnet/minecraft/class_1916; field_17435 offers - f Z field_19376 field_223478_f - f I field_17434 containerId - f I field_18801 level -c net/minecraft/class_2684 net/minecraft/network/play/server/SEntityPacket - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2602;)V method_11651 processPacket - m (J)D method_30301 func_244299_a - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_30302 func_244300_a - m (JJJ)Lnet/minecraft/class_243; method_18695 func_218744_a - m ()B method_11650 getPitch - m (D)J method_18047 func_218743_a - m ()Z method_22826 func_229745_h_ - m ()B method_11649 getYaw - m ()Z method_11653 getOnGround - m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_11645 getEntity - m ()Z method_11652 isRotating - f Z field_12306 onGround - f B field_12311 pitch - f Z field_12305 rotating - f B field_12312 yaw - f I field_12310 entityId - f S field_12307 posZ - f Z field_20849 isMovePacket - f S field_12308 posY - f S field_12309 posX -c net/minecraft/class_2684$class_2685 net/minecraft/network/play/server/SEntityPacket$RelativeMovePacket -c net/minecraft/class_2684$class_2686 net/minecraft/network/play/server/SEntityPacket$MovePacket -c net/minecraft/class_2684$class_2687 net/minecraft/network/play/server/SEntityPacket$LookPacket -c net/minecraft/class_2692 net/minecraft/network/play/server/SMoveVehiclePacket - m (Lnet/minecraft/class_2602;)V method_11672 processPacket - m ()D method_11673 getX - m ()F method_11671 getPitch - m ()D method_11674 getY - m ()D method_11670 getZ - m ()F method_11675 getYaw - f D field_12324 x - f F field_12321 pitch - f D field_12322 y - f D field_12320 z - f F field_12323 yaw -c net/minecraft/class_3895 net/minecraft/network/play/server/SOpenBookWindowPacket - m (Lnet/minecraft/class_2602;)V method_17187 processPacket - m ()Lnet/minecraft/class_1268; method_17188 getHand - f Lnet/minecraft/class_1268; field_17199 hand -c net/minecraft/class_3944 net/minecraft/network/play/server/SOpenWindowPacket - m ()Lnet/minecraft/class_3917; method_17593 getContainerType - m ()Lnet/minecraft/class_2561; method_17594 getTitle - m ()I method_17592 getWindowId - m (Lnet/minecraft/class_2602;)V method_17591 processPacket - f Lnet/minecraft/class_2561; field_17438 title - f I field_17436 windowId - f I field_17437 menuId -c net/minecraft/class_2693 net/minecraft/network/play/server/SOpenSignMenuPacket - m ()Lnet/minecraft/class_2338; method_11677 getSignPosition - m (Lnet/minecraft/class_2602;)V method_11676 processPacket - f Lnet/minecraft/class_2338; field_12325 signPosition -c net/minecraft/class_2695 net/minecraft/network/play/server/SPlaceGhostRecipePacket - m ()Lnet/minecraft/class_2960; method_11684 getRecipeId - m (Lnet/minecraft/class_2602;)V method_11686 processPacket - m ()I method_11685 getWindowId - f Lnet/minecraft/class_2960; field_12332 recipe - f I field_12333 windowId -c net/minecraft/class_2696 net/minecraft/network/play/server/SPlayerAbilitiesPacket - m ()F method_11691 getWalkSpeed - m (Lnet/minecraft/class_2602;)V method_11697 processPacket - m ()Z method_11695 isInvulnerable - m ()Z method_11699 isAllowFlying - m ()Z method_11698 isFlying - m ()Z method_11696 isCreativeMode - m ()F method_11690 getFlySpeed - f F field_12334 walkSpeed - f Z field_12339 invulnerable - f Z field_12338 flying - f Z field_12336 creativeMode - f F field_12335 flySpeed - f Z field_12337 allowFlying -c net/minecraft/class_2698 net/minecraft/network/play/server/SCombatPacket - m (Lnet/minecraft/class_2602;)V method_11706 processPacket - f I field_12349 playerId - f I field_12345 duration - f I field_12348 entityId - f Lnet/minecraft/class_2561; field_12346 deathMessage - f Lnet/minecraft/class_2698$class_2699; field_12347 eventType -c net/minecraft/class_2698$class_2699 net/minecraft/network/play/server/SCombatPacket$Event - m ()[Lnet/minecraft/class_2698$class_2699; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2698$class_2699; valueOf valueOf - f Lnet/minecraft/class_2698$class_2699; field_12352 ENTER_COMBAT - f Lnet/minecraft/class_2698$class_2699; field_12353 END_COMBAT - f Lnet/minecraft/class_2698$class_2699; field_12350 ENTITY_DIED - f [Lnet/minecraft/class_2698$class_2699; field_12351 $VALUES -c net/minecraft/class_2698$1 net/minecraft/network/play/server/SCombatPacket$1 - f [I field_12354 field_179944_a -c net/minecraft/class_2703 net/minecraft/network/play/server/SPlayerListItemPacket - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2602;)V method_11721 processPacket - m ()Ljava/util/List; method_11722 getEntries - m ()Lnet/minecraft/class_2703$class_2704; method_11723 getAction - f Lnet/minecraft/class_2703$class_2704; field_12368 action - f Ljava/util/List; field_12369 players -c net/minecraft/class_2703$class_2704 net/minecraft/network/play/server/SPlayerListItemPacket$Action - m ()[Lnet/minecraft/class_2703$class_2704; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2703$class_2704; valueOf valueOf - f Lnet/minecraft/class_2703$class_2704; field_12371 UPDATE_LATENCY - f Lnet/minecraft/class_2703$class_2704; field_12375 UPDATE_GAME_MODE - f Lnet/minecraft/class_2703$class_2704; field_12374 UPDATE_DISPLAY_NAME - f Lnet/minecraft/class_2703$class_2704; field_12376 REMOVE_PLAYER - f [Lnet/minecraft/class_2703$class_2704; field_12373 $VALUES - f Lnet/minecraft/class_2703$class_2704; field_12372 ADD_PLAYER -c net/minecraft/class_2703$1 net/minecraft/network/play/server/SPlayerListItemPacket$1 - f [I field_12370 field_179938_a -c net/minecraft/class_2703$class_2705 net/minecraft/network/play/server/SPlayerListItemPacket$AddPlayerData - m ()Lnet/minecraft/class_2561; method_11724 getDisplayName - m ()Lnet/minecraft/class_1934; method_11725 getGameMode - m ()Lcom/mojang/authlib/GameProfile; method_11726 getProfile - m ()I method_11727 getPing - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_1934; field_12379 gamemode - f I field_12378 ping - f Lcom/mojang/authlib/GameProfile; field_12380 profile - f Lnet/minecraft/class_2561; field_12377 displayName - f Lnet/minecraft/class_2703; field_12381 field_179968_a -c net/minecraft/class_2707 net/minecraft/network/play/server/SPlayerLookPacket - m ()Lnet/minecraft/class_2183$class_2184; method_11730 getSourceAnchor - m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_243; method_11732 getTargetPosition - m (Lnet/minecraft/class_2602;)V method_11731 processPacket - f Z field_12387 isEntity - f D field_12383 z - f Lnet/minecraft/class_2183$class_2184; field_12389 targetAnchor - f D field_12386 x - f Lnet/minecraft/class_2183$class_2184; field_12385 sourceAnchor - f I field_12388 entityId - f D field_12384 y -c net/minecraft/class_2708 net/minecraft/network/play/server/SPlayerPositionLookPacket - m (Lnet/minecraft/class_2602;)V method_11740 processPacket - m ()D method_11735 getY - m ()D method_11734 getX - m ()Ljava/util/Set; method_11733 getFlags - m ()I method_11737 getTeleportId - m ()F method_11739 getPitch - m ()F method_11736 getYaw - m ()D method_11738 getZ - f F field_12391 pitch - f D field_12390 z - f F field_12393 yaw - f D field_12392 y - f D field_12395 x - f I field_12394 teleportId - f Ljava/util/Set; field_12396 flags -c net/minecraft/class_2708$class_2709 net/minecraft/network/play/server/SPlayerPositionLookPacket$Flags - m ()[Lnet/minecraft/class_2708$class_2709; values values - m (Ljava/util/Set;)I method_11741 pack - m (Ljava/lang/String;)Lnet/minecraft/class_2708$class_2709; valueOf valueOf - m ()I method_11742 getMask - m (I)Ljava/util/Set; method_11744 unpack - m (I)Z method_11743 isSet - f I field_12399 bit - f Lnet/minecraft/class_2708$class_2709; field_12401 Y_ROT - f [Lnet/minecraft/class_2708$class_2709; field_12402 $VALUES - f Lnet/minecraft/class_2708$class_2709; field_12403 Z - f Lnet/minecraft/class_2708$class_2709; field_12398 Y - f Lnet/minecraft/class_2708$class_2709; field_12400 X - f Lnet/minecraft/class_2708$class_2709; field_12397 X_ROT -c net/minecraft/class_2713 net/minecraft/network/play/server/SRecipeBookPacket - m ()Ljava/util/List; method_11750 getRecipes - m ()Lnet/minecraft/class_5411; method_11756 func_244302_d - m ()Lnet/minecraft/class_2713$class_2714; method_11751 getState - m ()Ljava/util/List; method_11757 getDisplayedRecipes - m (Lnet/minecraft/class_2602;)V method_11753 processPacket - f Ljava/util/List; field_12414 recipes - f Lnet/minecraft/class_5411; field_25797 field_244301_d - f Ljava/util/List; field_12409 displayedRecipes - f Lnet/minecraft/class_2713$class_2714; field_12408 state -c net/minecraft/class_2713$class_2714 net/minecraft/network/play/server/SRecipeBookPacket$State - m ()[Lnet/minecraft/class_2713$class_2714; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2713$class_2714; valueOf valueOf - f Lnet/minecraft/class_2713$class_2714; field_12415 ADD - f Lnet/minecraft/class_2713$class_2714; field_12417 REMOVE - f [Lnet/minecraft/class_2713$class_2714; field_12418 $VALUES - f Lnet/minecraft/class_2713$class_2714; field_12416 INIT -c net/minecraft/class_2716 net/minecraft/network/play/server/SDestroyEntitiesPacket - m ()[I method_11763 getEntityIDs - m (Lnet/minecraft/class_2602;)V method_11764 processPacket - f [I field_12422 entityIDs -c net/minecraft/class_2718 net/minecraft/network/play/server/SRemoveEntityEffectPacket - m ()Lnet/minecraft/class_1291; method_11768 getPotion - m (Lnet/minecraft/class_2602;)V method_11769 processPacket - m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_11767 getEntity - f I field_12424 entityId - f Lnet/minecraft/class_1291; field_12425 effectId -c net/minecraft/class_2720 net/minecraft/network/play/server/SSendResourcePackPacket - m ()Ljava/lang/String; method_11773 getHash - m (Lnet/minecraft/class_2602;)V method_11774 processPacket - m ()Ljava/lang/String; method_11772 getURL - f Ljava/lang/String; field_12428 hash - f Ljava/lang/String; field_12427 url -c net/minecraft/class_2724 net/minecraft/network/play/server/SRespawnPacket - m ()Lnet/minecraft/class_5321; method_11779 func_240827_c_ - m ()J method_22425 getHashedSeed - m ()Lnet/minecraft/class_1934; method_11780 getGameType - m ()Z method_28121 func_240829_g_ - m ()Lnet/minecraft/class_1934; method_30117 func_241788_f_ - m ()Z method_27904 func_240830_h_ - m ()Z method_28120 func_240828_f_ - m (Lnet/minecraft/class_2602;)V method_11782 processPacket - m ()Lnet/minecraft/class_2874; method_29445 func_244303_b - m ()Lnet/minecraft/class_2874; method_31178 func_244304_j - f Z field_24620 field_240823_e_ - f Lnet/minecraft/class_5321; field_12431 dimensionID - f Z field_24451 field_240825_g_ - f J field_20667 hashedSeed - f Lnet/minecraft/class_2874; field_25322 field_240822_a_ - f Lnet/minecraft/class_1934; field_12434 gameType - f Z field_24621 field_240824_f_ - f Lnet/minecraft/class_1934; field_25714 field_241787_e_ -c net/minecraft/class_2726 net/minecraft/network/play/server/SEntityHeadLookPacket - m ()B method_11787 getYaw - m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_11786 getEntity - m (Lnet/minecraft/class_2602;)V method_11788 processPacket - f I field_12437 entityId - f B field_12436 yaw -c net/minecraft/class_2637 net/minecraft/network/play/server/SMultiBlockChangePacket - m (Lnet/minecraft/class_2602;)V method_11392 processPacket - m (I)V method_30620 func_244309_a - m (Ljava/util/function/BiConsumer;)V method_30621 func_244310_a - m ()Z method_31179 func_244311_b - f [Lnet/minecraft/class_2680; field_26347 field_244307_c - f Z field_26749 field_244308_d - f Lnet/minecraft/class_4076; field_26345 field_244305_a - f [S field_26346 field_244306_b -c net/minecraft/class_2729 net/minecraft/network/play/server/SSelectAdvancementsTabPacket - m (Lnet/minecraft/class_2602;)V method_11794 processPacket - m ()Lnet/minecraft/class_2960; method_11793 getTab - f Lnet/minecraft/class_2960; field_12440 tab -c net/minecraft/class_2730 net/minecraft/network/play/server/SWorldBorderPacket - m (Lnet/minecraft/class_2784;)V method_11795 apply - m (Lnet/minecraft/class_2602;)V method_11796 processPacket - f I field_12442 warningDistance - f J field_12445 timeUntilTarget - f I field_12444 warningTime - f D field_12447 diameter - f Lnet/minecraft/class_2730$class_2731; field_12448 action - f D field_12449 targetSize - f I field_12446 size - f D field_12441 centerZ - f D field_12443 centerX -c net/minecraft/class_2730$1 net/minecraft/network/play/server/SWorldBorderPacket$1 - f [I field_12457 field_179947_a -c net/minecraft/class_2730$class_2731 net/minecraft/network/play/server/SWorldBorderPacket$Action - m ()[Lnet/minecraft/class_2730$class_2731; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2730$class_2731; valueOf valueOf - f [Lnet/minecraft/class_2730$class_2731; field_12453 $VALUES - f Lnet/minecraft/class_2730$class_2731; field_12450 SET_CENTER - f Lnet/minecraft/class_2730$class_2731; field_12452 LERP_SIZE - f Lnet/minecraft/class_2730$class_2731; field_12454 INITIALIZE - f Lnet/minecraft/class_2730$class_2731; field_12455 SET_WARNING_TIME - f Lnet/minecraft/class_2730$class_2731; field_12456 SET_SIZE - f Lnet/minecraft/class_2730$class_2731; field_12451 SET_WARNING_BLOCKS -c net/minecraft/class_2734 net/minecraft/network/play/server/SCameraPacket - m (Lnet/minecraft/class_2602;)V method_11801 processPacket - m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_11800 getEntity - f I field_12462 entityId -c net/minecraft/class_2735 net/minecraft/network/play/server/SHeldItemChangePacket - m (Lnet/minecraft/class_2602;)V method_11802 processPacket - m ()I method_11803 getHeldItemHotbarIndex - f I field_12463 heldItemHotbarIndex -c net/minecraft/class_4282 net/minecraft/network/play/server/SUpdateChunkPositionPacket - m ()I method_20322 func_218755_b - m ()I method_20323 func_218754_c - m (Lnet/minecraft/class_2602;)V method_20321 processPacket - f I field_19206 field_218756_a - f I field_19207 field_218757_b -c net/minecraft/class_4273 net/minecraft/network/play/server/SUpdateViewDistancePacket - m (Lnet/minecraft/class_2602;)V method_20205 processPacket - m ()I method_20206 getViewDistance - f I field_19146 viewDistance -c net/minecraft/class_2759 net/minecraft/network/play/server/SWorldSpawnChangedPacket - m ()F method_30732 func_244313_c - m ()Lnet/minecraft/class_2338; method_11870 func_240832_b_ - m (Lnet/minecraft/class_2602;)V method_11869 processPacket - f Lnet/minecraft/class_2338; field_12615 field_240831_a_ - f F field_26381 field_244312_b -c net/minecraft/class_2736 net/minecraft/network/play/server/SDisplayObjectivePacket - m ()Ljava/lang/String; method_11804 getName - m (Lnet/minecraft/class_2602;)V method_11805 processPacket - m ()I method_11806 getPosition - f Ljava/lang/String; field_12465 scoreName - f I field_12464 position -c net/minecraft/class_2739 net/minecraft/network/play/server/SEntityMetadataPacket - m ()Ljava/util/List; method_11809 getDataManagerEntries - m (Lnet/minecraft/class_2602;)V method_11808 processPacket - m ()I method_11807 getEntityId - f I field_12476 entityId - f Ljava/util/List; field_12477 dataManagerEntries -c net/minecraft/class_2740 net/minecraft/network/play/server/SMountEntityPacket - m ()I method_11810 getVehicleEntityId - m (Lnet/minecraft/class_2602;)V method_11811 processPacket - m ()I method_11812 getEntityId - f I field_12478 vehicleEntityId - f I field_12479 entityId -c net/minecraft/class_2743 net/minecraft/network/play/server/SEntityVelocityPacket - m ()I method_11818 getEntityID - m ()I method_11819 getMotionZ - m ()I method_11816 getMotionY - m (Lnet/minecraft/class_2602;)V method_11817 processPacket - m ()I method_11815 getMotionX - f I field_12561 motionZ - f I field_12562 motionY - f I field_12564 entityID - f I field_12563 motionX -c net/minecraft/class_2744 net/minecraft/network/play/server/SEntityEquipmentPacket - m ()I method_11820 getEntityID - m ()Ljava/util/List; method_30145 func_241790_c_ - m (Lnet/minecraft/class_2602;)V method_11823 processPacket - f I field_12565 entityID - f Ljava/util/List; field_25721 field_241789_b_ -c net/minecraft/class_2748 net/minecraft/network/play/server/SSetExperiencePacket - m (Lnet/minecraft/class_2602;)V method_11829 processPacket - m ()F method_11830 getExperienceBar - m ()I method_11827 getTotalExperience - m ()I method_11828 getLevel - f F field_12580 experienceBar - f I field_12581 level - f I field_12582 totalExperience -c net/minecraft/class_2749 net/minecraft/network/play/server/SUpdateHealthPacket - m ()F method_11834 getSaturationLevel - m ()I method_11831 getFoodLevel - m (Lnet/minecraft/class_2602;)V method_11832 processPacket - m ()F method_11833 getHealth - f F field_12583 saturationLevel - f I field_12585 foodLevel - f F field_12584 health -c net/minecraft/class_2751 net/minecraft/network/play/server/SScoreboardObjectivePacket - m ()Lnet/minecraft/class_274$class_275; method_11839 getRenderType - m (Lnet/minecraft/class_2602;)V method_11838 processPacket - m ()I method_11837 getAction - m ()Lnet/minecraft/class_2561; method_11836 getDisplayName - m ()Ljava/lang/String; method_11835 getObjectiveName - f I field_12590 action - f Lnet/minecraft/class_274$class_275; field_12592 renderType - f Lnet/minecraft/class_2561; field_12591 displayName - f Ljava/lang/String; field_12589 objectiveName -c net/minecraft/class_2752 net/minecraft/network/play/server/SSetPassengersPacket - m ()I method_11841 getEntityId - m (Lnet/minecraft/class_2602;)V method_11842 processPacket - m ()[I method_11840 getPassengerIds - f I field_12594 entityId - f [I field_12593 passengerIds -c net/minecraft/class_2755 net/minecraft/network/play/server/STeamsPacket - m ()Lnet/minecraft/class_2561; method_11854 getSuffix - m ()Ljava/lang/String; method_11851 getNameTagVisibility - m ()Ljava/lang/String; method_11861 getCollisionRule - m (Lnet/minecraft/class_2602;)V method_11860 processPacket - m ()Ljava/util/Collection; method_11857 getPlayers - m ()Lnet/minecraft/class_2561; method_11859 getDisplayName - m ()I method_11852 getFriendlyFlags - m ()I method_11853 getAction - m ()Lnet/minecraft/class_124; method_11858 getColor - m ()Lnet/minecraft/class_2561; method_11856 getPrefix - m ()Ljava/lang/String; method_11855 getName - f Lnet/minecraft/class_2561; field_12597 suffix - f Lnet/minecraft/class_124; field_12598 color - f Ljava/util/Collection; field_12602 players - f I field_12606 friendlyFlags - f Ljava/lang/String; field_12600 name - f I field_12599 action - f Lnet/minecraft/class_2561; field_12603 displayName - f Ljava/lang/String; field_12604 nameTagVisibility - f Lnet/minecraft/class_2561; field_12601 prefix - f Ljava/lang/String; field_12605 collisionRule -c net/minecraft/class_2757 net/minecraft/network/play/server/SUpdateScorePacket - m ()Lnet/minecraft/class_2995$class_2996; method_11863 getAction - m ()Ljava/lang/String; method_11862 getPlayerName - m ()Ljava/lang/String; method_11864 getObjectiveName - m ()I method_11865 getScoreValue - m (Lnet/minecraft/class_2602;)V method_11866 processPacket - f Lnet/minecraft/class_2995$class_2996; field_12612 action - f Ljava/lang/String; field_12610 name - f Ljava/lang/String; field_12613 objective - f I field_12611 value -c net/minecraft/class_2761 net/minecraft/network/play/server/SUpdateTimePacket - m ()J method_11873 getWorldTime - m ()J method_11871 getTotalWorldTime - m (Lnet/minecraft/class_2602;)V method_11872 processPacket - f J field_12620 worldTime - f J field_12621 totalWorldTime -c net/minecraft/class_2762 net/minecraft/network/play/server/STitlePacket - m ()I method_11875 getFadeOutTime - m ()I method_11876 getDisplayTime - m ()Lnet/minecraft/class_2561; method_11877 getMessage - m ()I method_11874 getFadeInTime - m ()Lnet/minecraft/class_2762$class_2763; method_11878 getType - m (Lnet/minecraft/class_2602;)V method_11879 processPacket - f I field_12622 fadeOutTime - f I field_12623 displayTime - f Lnet/minecraft/class_2561; field_12626 message - f Lnet/minecraft/class_2762$class_2763; field_12625 type - f I field_12624 fadeInTime -c net/minecraft/class_2762$class_2763 net/minecraft/network/play/server/STitlePacket$Type - m ()[Lnet/minecraft/class_2762$class_2763; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2762$class_2763; valueOf valueOf - f Lnet/minecraft/class_2762$class_2763; field_12632 SUBTITLE - f Lnet/minecraft/class_2762$class_2763; field_12627 ACTIONBAR - f Lnet/minecraft/class_2762$class_2763; field_12629 TIMES - f Lnet/minecraft/class_2762$class_2763; field_12633 CLEAR - f Lnet/minecraft/class_2762$class_2763; field_12628 RESET - f [Lnet/minecraft/class_2762$class_2763; field_12631 $VALUES - f Lnet/minecraft/class_2762$class_2763; field_12630 TITLE -c net/minecraft/class_2765 net/minecraft/network/play/server/SSpawnMovingSoundEffectPacket - m ()F method_11885 func_218764_e - m ()I method_11883 func_218762_d - m ()Lnet/minecraft/class_3414; method_11882 func_218763_b - m ()Lnet/minecraft/class_3419; method_11881 func_218760_c - m (Lnet/minecraft/class_2602;)V method_11884 processPacket - m ()F method_11880 func_218761_f - f Lnet/minecraft/class_3419; field_12641 field_218766_b - f Lnet/minecraft/class_3414; field_12642 field_218765_a - f F field_12638 field_218769_e - f F field_12639 field_218768_d - f I field_12640 field_218767_c -c net/minecraft/class_2767 net/minecraft/network/play/server/SPlaySoundEffectPacket - m ()F method_11891 getVolume - m ()D method_11893 getZ - m ()D method_11889 getY - m ()D method_11890 getX - m (Lnet/minecraft/class_2602;)V method_11895 processPacket - m ()Lnet/minecraft/class_3419; method_11888 getCategory - m ()F method_11892 getPitch - m ()Lnet/minecraft/class_3414; method_11894 getSound - f F field_12662 soundPitch - f Lnet/minecraft/class_3414; field_12661 sound - f Lnet/minecraft/class_3419; field_12660 category - f F field_12656 soundVolume - f I field_12657 posZ - f I field_12658 posY - f I field_12659 posX -c net/minecraft/class_2770 net/minecraft/network/play/server/SStopSoundPacket - m ()Lnet/minecraft/class_3419; method_11903 getCategory - m (Lnet/minecraft/class_2602;)V method_11905 processPacket - m ()Lnet/minecraft/class_2960; method_11904 getName - f Lnet/minecraft/class_3419; field_12677 category - f Lnet/minecraft/class_2960; field_12676 name -c net/minecraft/class_2772 net/minecraft/network/play/server/SPlayerListHeaderFooterPacket - m (Lnet/minecraft/class_2602;)V method_11907 processPacket - m ()Lnet/minecraft/class_2561; method_11908 getHeader - m ()Lnet/minecraft/class_2561; method_11906 getFooter - f Lnet/minecraft/class_2561; field_12683 header - f Lnet/minecraft/class_2561; field_12684 footer -c net/minecraft/class_2774 net/minecraft/network/play/server/SQueryNBTResponsePacket - m ()I method_11910 getTransactionId - m ()Lnet/minecraft/class_2487; method_11911 getTag - m (Lnet/minecraft/class_2602;)V method_11909 processPacket - f I field_12691 transactionId - f Lnet/minecraft/class_2487; field_12690 tag -c net/minecraft/class_2775 net/minecraft/network/play/server/SCollectItemPacket - m ()I method_11913 getAmount - m (Lnet/minecraft/class_2602;)V method_11914 processPacket - m ()I method_11912 getEntityID - m ()I method_11915 getCollectedItemEntityID - f I field_12692 collectedQuantity - f I field_12693 entityId - f I field_12694 collectedItemEntityId -c net/minecraft/class_2777 net/minecraft/network/play/server/SEntityTeleportPacket - m ()I method_11916 getEntityId - m ()D method_11917 getX - m (Lnet/minecraft/class_2602;)V method_11922 processPacket - m ()B method_11921 getPitch - m ()B method_11920 getYaw - m ()Z method_11923 isOnGround - m ()D method_11918 getZ - m ()D method_11919 getY - f B field_12706 pitch - f D field_12701 posZ - f B field_12707 yaw - f Z field_12704 onGround - f I field_12705 entityId - f D field_12702 posY - f D field_12703 posX -c net/minecraft/class_2779 net/minecraft/network/play/server/SAdvancementInfoPacket - m (Lnet/minecraft/class_2602;)V method_11925 processPacket - m ()Ljava/util/Map; method_11927 getProgressUpdates - m ()Z method_11924 isFirstSync - m ()Ljava/util/Map; method_11928 getAdvancementsToAdd - m ()Ljava/util/Set; method_11926 getAdvancementsToRemove - f Ljava/util/Map; field_12716 progressUpdates - f Ljava/util/Set; field_12715 advancementsToRemove - f Z field_12718 firstSync - f Ljava/util/Map; field_12717 advancementsToAdd -c net/minecraft/class_2781 net/minecraft/network/play/server/SEntityPropertiesPacket - m (Lnet/minecraft/class_2602;)V method_11936 processPacket - m ()Ljava/util/List; method_11938 getSnapshots - m ()I method_11937 getEntityId - f Ljava/util/List; field_12720 snapshots - f I field_12719 entityId -c net/minecraft/class_2781$class_2782 net/minecraft/network/play/server/SEntityPropertiesPacket$Snapshot - m ()D method_11941 getBaseValue - m ()Lnet/minecraft/class_1320; method_11940 func_240834_a_ - m ()Ljava/util/Collection; method_11939 getModifiers - f D field_12722 baseValue - f Lnet/minecraft/class_1320; field_12724 field_240833_b_ - f Ljava/util/Collection; field_12723 modifiers - f Lnet/minecraft/class_2781; field_12721 field_151414_a -c net/minecraft/class_2783 net/minecraft/network/play/server/SPlayEntityEffectPacket - m ()B method_11945 getAmplifier - m ()Z method_11950 getIsAmbient - m ()I method_11943 getEntityId - m ()Z method_11949 doesShowParticles - m ()B method_11946 getEffectId - m (Lnet/minecraft/class_2602;)V method_11948 processPacket - m ()Z method_11947 isMaxDuration - m ()I method_11944 getDuration - m ()Z method_11942 shouldShowIcon - f I field_12726 duration - f B field_12728 flags - f B field_12729 amplifier - f I field_12727 entityId - f B field_12725 effectId -c net/minecraft/class_2788 net/minecraft/network/play/server/SUpdateRecipesPacket - m (Lnet/minecraft/class_2602;)V method_11997 processPacket - m (Lnet/minecraft/class_1860;Lnet/minecraft/class_2540;)V method_17816 func_218771_a - m (Lnet/minecraft/class_2960;)Ljava/lang/IllegalArgumentException; method_17975 func_218770_a - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_1860; method_17817 func_218772_c - m ()Ljava/util/List; method_11998 getRecipes - f Ljava/util/List; field_12751 recipes -c net/minecraft/class_2790 net/minecraft/network/play/server/STagsListPacket - m ()Lnet/minecraft/class_5415; method_12000 getTags - m (Lnet/minecraft/class_2602;)V method_12001 processPacket - f Lnet/minecraft/class_5415; field_12757 tags -c net/minecraft/class_4617 net/minecraft/util/RandomObjectDescriptor - m (Ljava/util/UUID;)Ljava/util/Random; method_23268 getRandomFromUUID - m (Ljava/util/UUID;)Ljava/lang/String; method_23267 getRandomObjectDescriptor - m (Ljava/util/Random;[Ljava/lang/String;)Ljava/lang/String; method_23266 getRandomString - f [Ljava/lang/String; field_21050 FIRST_PART - f [Ljava/lang/String; field_21051 SECOND_PART -c net/minecraft/class_4209 net/minecraft/network/DebugPacketSender - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2540;Lnet/minecraft/class_2960;)V method_22319 func_229753_a_ - m (Lnet/minecraft/class_5281;Lnet/minecraft/class_3449;)V method_19474 sendStructureStart - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_19778 func_218801_c - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_19777 func_218805_b - m (Lnet/minecraft/class_4466;)V method_23855 func_229749_a_ - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1308;Lnet/minecraft/class_11;F)V method_19470 sendPath - m (Lnet/minecraft/class_1309;)V method_19774 sendLivingEntity - m (Lnet/minecraft/class_3218;Ljava/util/Collection;)V method_20575 sendRaids - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_24819 func_240840_d_ - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_19472 func_218806_a - m (Lnet/minecraft/class_3218;)V method_22317 func_229751_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Ljava/lang/String;II)V method_22318 func_229752_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1923;)V method_19775 sendChuckPos - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_19776 func_218799_a - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1308;Lnet/minecraft/class_1355;)V method_19469 sendGoal - m (Lnet/minecraft/class_4482;)V method_23856 sendBeehiveDebugData - f Lorg/apache/logging/log4j/Logger; field_18961 LOGGER -c net/minecraft/class_2792 net/minecraft/network/play/IServerPlayNetHandler - m (Lnet/minecraft/class_2836;)V method_12064 processSteerBoat - m (Lnet/minecraft/class_2813;)V method_12076 processClickWindow - m (Lnet/minecraft/class_2851;)V method_12067 processInput - m (Lnet/minecraft/class_2886;)V method_12065 processTryUseItem - m (Lnet/minecraft/class_2873;)V method_12070 processCreativeInventoryAction - m (Lnet/minecraft/class_2793;)V method_12050 processConfirmTeleport - m (Lnet/minecraft/class_2840;)V method_12061 processPlaceRecipe - m (Lnet/minecraft/class_2817;)V method_12075 processCustomPayload - m (Lnet/minecraft/class_2853;)V method_12047 handleRecipeBookUpdate - m (Lnet/minecraft/class_2875;)V method_12051 processUpdateStructureBlock - m (Lnet/minecraft/class_4210;)V method_19475 func_217263_a - m (Lnet/minecraft/class_2846;)V method_12066 processPlayerDigging - m (Lnet/minecraft/class_2822;)V method_12074 processNBTQueryEntity - m (Lnet/minecraft/class_2856;)V method_12081 handleResourcePackStatus - m (Lnet/minecraft/class_2879;)V method_12052 handleAnimation - m (Lnet/minecraft/class_2799;)V method_12068 processClientStatus - m (Lnet/minecraft/class_5194;)V method_27273 func_230549_a_ - m (Lnet/minecraft/class_2863;)V method_12080 processSelectTrade - m (Lnet/minecraft/class_2885;)V method_12046 processTryUseItemOnBlock - m (Lnet/minecraft/class_2805;)V method_12059 processTabComplete - m (Lnet/minecraft/class_4211;)V method_19476 func_217261_a - m (Lnet/minecraft/class_2868;)V method_12056 processHeldItemChange - m (Lnet/minecraft/class_2811;)V method_12055 processEnchantItem - m (Lnet/minecraft/class_2833;)V method_12078 processVehicleMove - m (Lnet/minecraft/class_2848;)V method_12045 processEntityAction - m (Lnet/minecraft/class_2871;)V method_12049 processUpdateCommandMinecart - m (Lnet/minecraft/class_2815;)V method_12054 processCloseWindow - m (Lnet/minecraft/class_2838;)V method_12084 processPickItem - m (Lnet/minecraft/class_5427;)V method_30303 func_241831_a - m (Lnet/minecraft/class_3753;)V method_16383 func_217262_a - m (Lnet/minecraft/class_2820;)V method_12053 processEditBook - m (Lnet/minecraft/class_2795;)V method_12072 processNBTQueryBlockEntity - m (Lnet/minecraft/class_2842;)V method_12083 processPlayerAbilities - m (Lnet/minecraft/class_2855;)V method_12060 processRenameItem - m (Lnet/minecraft/class_2877;)V method_12071 processUpdateSign - m (Lnet/minecraft/class_2824;)V method_12062 processUseEntity - m (Lnet/minecraft/class_2797;)V method_12048 processChatMessage - m (Lnet/minecraft/class_2859;)V method_12058 handleSeenAdvancements - m (Lnet/minecraft/class_2884;)V method_12073 handleSpectate - m (Lnet/minecraft/class_2827;)V method_12082 processKeepAlive - m (Lnet/minecraft/class_2803;)V method_12069 processClientSettings - m (Lnet/minecraft/class_2866;)V method_12057 processUpdateBeacon - m (Lnet/minecraft/class_2828;)V method_12063 processPlayer - m (Lnet/minecraft/class_2809;)V method_12079 processConfirmTransaction - m (Lnet/minecraft/class_2870;)V method_12077 processUpdateCommandBlock -c net/minecraft/class_2793 net/minecraft/network/play/client/CConfirmTeleportPacket - m ()I method_12086 getTeleportId - m (Lnet/minecraft/class_2792;)V method_12085 processPacket - f I field_12758 telportId -c net/minecraft/class_2795 net/minecraft/network/play/client/CQueryTileEntityNBTPacket - m (Lnet/minecraft/class_2792;)V method_12095 processPacket - m ()I method_12096 getTransactionId - m ()Lnet/minecraft/class_2338; method_12094 getPosition - f I field_12762 transactionId - f Lnet/minecraft/class_2338; field_12763 pos -c net/minecraft/class_4210 net/minecraft/network/play/client/CSetDifficultyPacket - m ()Lnet/minecraft/class_1267; method_19478 func_218773_b - m (Lnet/minecraft/class_2792;)V method_19477 processPacket - f Lnet/minecraft/class_1267; field_18805 field_218774_a -c net/minecraft/class_2797 net/minecraft/network/play/client/CChatMessagePacket - m (Lnet/minecraft/class_2792;)V method_12115 processPacket - m ()Ljava/lang/String; method_12114 getMessage - f Ljava/lang/String; field_12764 message -c net/minecraft/class_2799 net/minecraft/network/play/client/CClientStatusPacket - m ()Lnet/minecraft/class_2799$class_2800; method_12119 getStatus - m (Lnet/minecraft/class_2792;)V method_12120 processPacket - f Lnet/minecraft/class_2799$class_2800; field_12773 status -c net/minecraft/class_2799$class_2800 net/minecraft/network/play/client/CClientStatusPacket$State - m ()[Lnet/minecraft/class_2799$class_2800; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2799$class_2800; valueOf valueOf - f Lnet/minecraft/class_2799$class_2800; field_12775 REQUEST_STATS - f [Lnet/minecraft/class_2799$class_2800; field_12776 $VALUES - f Lnet/minecraft/class_2799$class_2800; field_12774 PERFORM_RESPAWN -c net/minecraft/class_2803 net/minecraft/network/play/client/CClientSettingsPacket - m ()Z method_12135 isColorsEnabled - m ()I method_12136 getModelPartFlags - m ()Lnet/minecraft/class_1306; method_12132 getMainHand - m ()Lnet/minecraft/class_1659; method_12134 getChatVisibility - m (Lnet/minecraft/class_2792;)V method_12133 processPacket - f I field_12780 view - f Ljava/lang/String; field_12777 lang - f I field_12778 modelPartFlags - f Z field_12779 enableColors - f Lnet/minecraft/class_1659; field_12781 chatVisibility - f Lnet/minecraft/class_1306; field_12782 mainHand -c net/minecraft/class_2805 net/minecraft/network/play/client/CTabCompletePacket - m ()I method_12149 getTransactionId - m (Lnet/minecraft/class_2792;)V method_12147 processPacket - m ()Ljava/lang/String; method_12148 getCommand - f Ljava/lang/String; field_12785 command - f I field_12784 transactionId -c net/minecraft/class_2809 net/minecraft/network/play/client/CConfirmTransactionPacket - m ()S method_12176 getUid - m ()I method_12178 getWindowId - m (Lnet/minecraft/class_2792;)V method_12177 processPacket - f Z field_12810 accepted - f S field_12809 uid - f I field_12811 windowId -c net/minecraft/class_2811 net/minecraft/network/play/client/CEnchantItemPacket - m (Lnet/minecraft/class_2792;)V method_12185 processPacket - m ()I method_12187 getWindowId - m ()I method_12186 getButton - f I field_12813 windowId - f I field_12812 button -c net/minecraft/class_2813 net/minecraft/network/play/client/CClickWindowPacket - m ()S method_12189 getActionNumber - m ()I method_12192 getSlotId - m ()Lnet/minecraft/class_1799; method_12190 getClickedItem - m ()I method_12193 getUsedButton - m ()Lnet/minecraft/class_1713; method_12195 getClickType - m (Lnet/minecraft/class_2792;)V method_12191 processPacket - m ()I method_12194 getWindowId - f S field_12820 actionNumber - f I field_12818 slotId - f I field_12817 packedClickData - f Lnet/minecraft/class_1713; field_12815 mode - f Lnet/minecraft/class_1799; field_12816 clickedItem - f I field_12819 windowId -c net/minecraft/class_2815 net/minecraft/network/play/client/CCloseWindowPacket - m (Lnet/minecraft/class_2792;)V method_12198 processPacket - f I field_12827 windowId -c net/minecraft/class_2817 net/minecraft/network/play/client/CCustomPayloadPacket - m (Lnet/minecraft/class_2792;)V method_12199 processPacket - f Lnet/minecraft/class_2540; field_12832 data - f Lnet/minecraft/class_2960; field_12830 channel - f Lnet/minecraft/class_2960; field_12831 BRAND -c net/minecraft/class_2820 net/minecraft/network/play/client/CEditBookPacket - m ()Lnet/minecraft/class_1799; method_12237 getStack - m ()Lnet/minecraft/class_1268; method_12235 getHand - m ()Z method_12238 shouldUpdateAll - m (Lnet/minecraft/class_2792;)V method_12236 processPacket - f Lnet/minecraft/class_1799; field_12863 stack - f Lnet/minecraft/class_1268; field_12865 hand - f Z field_12864 updateAll -c net/minecraft/class_2822 net/minecraft/network/play/client/CQueryEntityNBTPacket - m ()I method_12245 getTransactionId - m ()I method_12244 getEntityId - m (Lnet/minecraft/class_2792;)V method_12243 processPacket - f I field_12868 transactionId - f I field_12867 entityId -c net/minecraft/class_2824 net/minecraft/network/play/client/CUseEntityPacket - m ()Lnet/minecraft/class_1268; method_12249 getHand - m ()Z method_30007 func_241792_e_ - m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_12248 getEntityFromWorld - m ()Lnet/minecraft/class_243; method_12250 getHitVec - m (Lnet/minecraft/class_2792;)V method_12251 processPacket - m ()Lnet/minecraft/class_2824$class_2825; method_12252 getAction - f Lnet/minecraft/class_2824$class_2825; field_12871 action - f Z field_25660 field_241791_e_ - f Lnet/minecraft/class_243; field_12872 hitVec - f I field_12870 entityId - f Lnet/minecraft/class_1268; field_12869 hand -c net/minecraft/class_2824$class_2825 net/minecraft/network/play/client/CUseEntityPacket$Action - m ()[Lnet/minecraft/class_2824$class_2825; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2824$class_2825; valueOf valueOf - f Lnet/minecraft/class_2824$class_2825; field_12873 INTERACT_AT - f Lnet/minecraft/class_2824$class_2825; field_12875 ATTACK - f Lnet/minecraft/class_2824$class_2825; field_12876 INTERACT - f [Lnet/minecraft/class_2824$class_2825; field_12874 $VALUES -c net/minecraft/class_5194 net/minecraft/network/play/client/CJigsawBlockGeneratePacket - m (Lnet/minecraft/class_2792;)V method_27274 processPacket - m ()I method_27276 func_240845_c_ - m ()Z method_29446 func_240846_d_ - m ()Lnet/minecraft/class_2338; method_27275 func_240844_b_ - f I field_24055 field_240842_b_ - f Z field_25323 field_240843_c_ - f Lnet/minecraft/class_2338; field_24054 field_240841_a_ -c net/minecraft/class_2827 net/minecraft/network/play/client/CKeepAlivePacket - m (Lnet/minecraft/class_2792;)V method_12266 processPacket - m ()J method_12267 getKey - f J field_12883 key -c net/minecraft/class_4211 net/minecraft/network/play/client/CLockDifficultyPacket - m (Lnet/minecraft/class_2792;)V method_19484 processPacket - m ()Z method_19485 func_218776_b - f Z field_18806 field_218777_a -c net/minecraft/class_2828 net/minecraft/network/play/client/CPlayerPacket - m (D)D method_12268 getY - m (D)D method_12274 getZ - m (F)F method_12271 getYaw - m (F)F method_12270 getPitch - m ()Z method_12273 isOnGround - m (Lnet/minecraft/class_2792;)V method_12272 processPacket - m (D)D method_12269 getX - f D field_12889 x - f D field_12886 y - f Z field_12891 onGround - f D field_12884 z - f Z field_12890 moving - f Z field_12888 rotating - f F field_12887 yaw - f F field_12885 pitch -c net/minecraft/class_2828$class_2830 net/minecraft/network/play/client/CPlayerPacket$PositionRotationPacket -c net/minecraft/class_2828$class_2829 net/minecraft/network/play/client/CPlayerPacket$PositionPacket -c net/minecraft/class_2828$class_2831 net/minecraft/network/play/client/CPlayerPacket$RotationPacket -c net/minecraft/class_2833 net/minecraft/network/play/client/CMoveVehiclePacket - m (Lnet/minecraft/class_2792;)V method_12278 processPacket - m ()F method_12277 getPitch - m ()D method_12279 getX - m ()D method_12280 getY - m ()D method_12276 getZ - m ()F method_12281 getYaw - f F field_12896 pitch - f D field_12899 x - f D field_12897 y - f D field_12895 z - f F field_12898 yaw -c net/minecraft/class_2836 net/minecraft/network/play/client/CSteerBoatPacket - m ()Z method_12284 getLeft - m ()Z method_12285 getRight - m (Lnet/minecraft/class_2792;)V method_12283 processPacket - f Z field_12907 left - f Z field_12906 right -c net/minecraft/class_2838 net/minecraft/network/play/client/CPickItemPacket - m ()I method_12293 getPickIndex - m (Lnet/minecraft/class_2792;)V method_12292 processPacket - f I field_12908 pickIndex -c net/minecraft/class_2840 net/minecraft/network/play/client/CPlaceRecipePacket - m ()Lnet/minecraft/class_2960; method_12320 getRecipeId - m ()I method_12318 getWindowId - m (Lnet/minecraft/class_2792;)V method_12317 processPacket - m ()Z method_12319 shouldPlaceAll - f I field_12933 windowId - f Z field_12932 placeAll - f Lnet/minecraft/class_2960; field_12931 recipeId -c net/minecraft/class_2842 net/minecraft/network/play/client/CPlayerAbilitiesPacket - m (Lnet/minecraft/class_2792;)V method_12339 processPacket - m ()Z method_12346 isFlying - f Z field_12948 flying -c net/minecraft/class_2846 net/minecraft/network/play/client/CPlayerDiggingPacket - m ()Lnet/minecraft/class_2846$class_2847; method_12363 getAction - m ()Lnet/minecraft/class_2350; method_12360 getFacing - m ()Lnet/minecraft/class_2338; method_12362 getPosition - m (Lnet/minecraft/class_2792;)V method_12361 processPacket - f Lnet/minecraft/class_2846$class_2847; field_12966 action - f Lnet/minecraft/class_2350; field_12965 facing - f Lnet/minecraft/class_2338; field_12967 position -c net/minecraft/class_2846$class_2847 net/minecraft/network/play/client/CPlayerDiggingPacket$Action - m ()[Lnet/minecraft/class_2846$class_2847; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2846$class_2847; valueOf valueOf - f Lnet/minecraft/class_2846$class_2847; field_12969 SWAP_ITEM_WITH_OFFHAND - f Lnet/minecraft/class_2846$class_2847; field_12974 RELEASE_USE_ITEM - f Lnet/minecraft/class_2846$class_2847; field_12968 START_DESTROY_BLOCK - f Lnet/minecraft/class_2846$class_2847; field_12975 DROP_ITEM - f [Lnet/minecraft/class_2846$class_2847; field_12972 $VALUES - f Lnet/minecraft/class_2846$class_2847; field_12970 DROP_ALL_ITEMS - f Lnet/minecraft/class_2846$class_2847; field_12973 STOP_DESTROY_BLOCK - f Lnet/minecraft/class_2846$class_2847; field_12971 ABORT_DESTROY_BLOCK -c net/minecraft/class_2848 net/minecraft/network/play/client/CEntityActionPacket - m ()I method_12366 getAuxData - m (Lnet/minecraft/class_2792;)V method_12364 processPacket - m ()Lnet/minecraft/class_2848$class_2849; method_12365 getAction - f I field_12976 auxData - f Lnet/minecraft/class_2848$class_2849; field_12978 action - f I field_12977 entityID -c net/minecraft/class_2848$class_2849 net/minecraft/network/play/client/CEntityActionPacket$Action - m (Ljava/lang/String;)Lnet/minecraft/class_2848$class_2849; valueOf valueOf - m ()[Lnet/minecraft/class_2848$class_2849; values values - f [Lnet/minecraft/class_2848$class_2849; field_12983 $VALUES - f Lnet/minecraft/class_2848$class_2849; field_12987 START_RIDING_JUMP - f Lnet/minecraft/class_2848$class_2849; field_12979 PRESS_SHIFT_KEY - f Lnet/minecraft/class_2848$class_2849; field_12980 STOP_RIDING_JUMP - f Lnet/minecraft/class_2848$class_2849; field_12985 STOP_SPRINTING - f Lnet/minecraft/class_2848$class_2849; field_12982 START_FALL_FLYING - f Lnet/minecraft/class_2848$class_2849; field_12981 START_SPRINTING - f Lnet/minecraft/class_2848$class_2849; field_12984 RELEASE_SHIFT_KEY - f Lnet/minecraft/class_2848$class_2849; field_12988 OPEN_INVENTORY - f Lnet/minecraft/class_2848$class_2849; field_12986 STOP_SLEEPING -c net/minecraft/class_2851 net/minecraft/network/play/client/CInputPacket - m ()F method_12372 getStrafeSpeed - m ()F method_12373 getForwardSpeed - m ()Z method_12371 isJumping - m (Lnet/minecraft/class_2792;)V method_12369 processPacket - m ()Z method_12370 isSneaking - f F field_12995 strafeSpeed - f F field_12994 forwardSpeed - f Z field_12997 jumping - f Z field_12996 sneaking -c net/minecraft/class_5427 net/minecraft/network/play/client/CUpdateRecipeBookStatusPacket - m ()Z method_30306 func_244318_c - m (Lnet/minecraft/class_2792;)V method_30304 processPacket - m ()Z method_30307 func_244319_d - m ()Lnet/minecraft/class_5421; method_30305 func_244317_b - f Lnet/minecraft/class_5421; field_25798 field_244314_a - f Z field_25799 field_244315_b - f Z field_25800 field_244316_c -c net/minecraft/class_2853 net/minecraft/network/play/client/CMarkRecipeSeenPacket - m ()Lnet/minecraft/class_2960; method_12406 func_244321_b - m (Lnet/minecraft/class_2792;)V method_12400 processPacket - f Lnet/minecraft/class_2960; field_13004 field_244320_a -c net/minecraft/class_2855 net/minecraft/network/play/client/CRenameItemPacket - m (Lnet/minecraft/class_2792;)V method_12408 processPacket - m ()Ljava/lang/String; method_12407 getName - f Ljava/lang/String; field_13013 name -c net/minecraft/class_2856 net/minecraft/network/play/client/CResourcePackStatusPacket - m (Lnet/minecraft/class_2792;)V method_12409 processPacket - f Lnet/minecraft/class_2856$class_2857; field_13014 action -c net/minecraft/class_2856$class_2857 net/minecraft/network/play/client/CResourcePackStatusPacket$Action - m ()[Lnet/minecraft/class_2856$class_2857; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2856$class_2857; valueOf valueOf - f [Lnet/minecraft/class_2856$class_2857; field_13019 $VALUES - f Lnet/minecraft/class_2856$class_2857; field_13017 SUCCESSFULLY_LOADED - f Lnet/minecraft/class_2856$class_2857; field_13016 ACCEPTED - f Lnet/minecraft/class_2856$class_2857; field_13015 FAILED_DOWNLOAD - f Lnet/minecraft/class_2856$class_2857; field_13018 DECLINED -c net/minecraft/class_2859 net/minecraft/network/play/client/CSeenAdvancementsPacket - m (Lnet/minecraft/class_161;)Lnet/minecraft/class_2859; method_12418 openedTab - m ()Lnet/minecraft/class_2859; method_12414 closedScreen - m (Lnet/minecraft/class_2792;)V method_12417 processPacket - m ()Lnet/minecraft/class_2960; method_12416 getTab - m ()Lnet/minecraft/class_2859$class_2860; method_12415 getAction - f Lnet/minecraft/class_2960; field_13020 tab - f Lnet/minecraft/class_2859$class_2860; field_13021 action -c net/minecraft/class_2859$class_2860 net/minecraft/network/play/client/CSeenAdvancementsPacket$Action - m (Ljava/lang/String;)Lnet/minecraft/class_2859$class_2860; valueOf valueOf - m ()[Lnet/minecraft/class_2859$class_2860; values values - f Lnet/minecraft/class_2859$class_2860; field_13024 OPENED_TAB - f Lnet/minecraft/class_2859$class_2860; field_13023 CLOSED_SCREEN - f [Lnet/minecraft/class_2859$class_2860; field_13022 $VALUES -c net/minecraft/class_2863 net/minecraft/network/play/client/CSelectTradePacket - m (Lnet/minecraft/class_2792;)V method_12430 processPacket - m ()I method_12431 func_210353_a - f I field_13036 field_210354_a -c net/minecraft/class_2866 net/minecraft/network/play/client/CUpdateBeaconPacket - m ()I method_12436 getPrimaryEffect - m ()I method_12435 getSecondaryEffect - m (Lnet/minecraft/class_2792;)V method_12434 processPacket - f I field_13049 secondaryEffect - f I field_13050 primaryEffect -c net/minecraft/class_2868 net/minecraft/network/play/client/CHeldItemChangePacket - m (Lnet/minecraft/class_2792;)V method_12441 processPacket - m ()I method_12442 getSlotId - f I field_13052 slotId -c net/minecraft/class_2870 net/minecraft/network/play/client/CUpdateCommandBlockPacket - m ()Z method_12474 isAuto - m ()Ljava/lang/String; method_12470 getCommand - m ()Lnet/minecraft/class_2593$class_2594; method_12468 getMode - m ()Z method_12471 isConditional - m (Lnet/minecraft/class_2792;)V method_12469 processPacket - m ()Z method_12472 shouldTrackOutput - m ()Lnet/minecraft/class_2338; method_12473 getPos - f Z field_13061 auto - f Z field_13062 conditional - f Ljava/lang/String; field_13064 command - f Lnet/minecraft/class_2593$class_2594; field_13060 mode - f Lnet/minecraft/class_2338; field_13065 pos - f Z field_13063 trackOutput -c net/minecraft/class_2871 net/minecraft/network/play/client/CUpdateMinecartCommandBlockPacket - m ()Z method_12478 shouldTrackOutput - m ()Ljava/lang/String; method_12475 getCommand - m (Lnet/minecraft/class_2792;)V method_12477 processPacket - m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1918; method_12476 getCommandBlock - f Z field_13066 trackOutput - f Ljava/lang/String; field_13068 command - f I field_13067 entityId -c net/minecraft/class_2873 net/minecraft/network/play/client/CCreativeInventoryActionPacket - m ()I method_12481 getSlotId - m ()Lnet/minecraft/class_1799; method_12479 getStack - m (Lnet/minecraft/class_2792;)V method_12480 processPacket - f Lnet/minecraft/class_1799; field_13070 stack - f I field_13071 slotId -c net/minecraft/class_3753 net/minecraft/network/play/client/CUpdateJigsawBlockPacket - m ()Lnet/minecraft/class_2960; method_16394 func_240852_d_ - m ()Lnet/minecraft/class_2960; method_16395 func_240851_c_ - m ()Lnet/minecraft/class_2338; method_16396 func_218789_b - m ()Ljava/lang/String; method_16393 func_218788_e - m (Lnet/minecraft/class_2792;)V method_16392 processPacket - m ()Lnet/minecraft/class_3751$class_4991; method_26436 func_240854_g_ - m ()Lnet/minecraft/class_2960; method_26435 func_240853_e_ - f Ljava/lang/String; field_16564 field_218793_d - f Lnet/minecraft/class_2960; field_16563 field_240847_b_ - f Lnet/minecraft/class_2338; field_16565 field_218790_a - f Lnet/minecraft/class_2960; field_23401 field_240849_d_ - f Lnet/minecraft/class_2960; field_16566 field_240848_c_ - f Lnet/minecraft/class_3751$class_4991; field_23402 field_240850_f_ -c net/minecraft/class_2875 net/minecraft/network/play/client/CUpdateStructureBlockPacket - m ()Lnet/minecraft/class_2776; method_12504 getMode - m ()F method_12494 getIntegrity - m ()Lnet/minecraft/class_2470; method_12498 getRotation - m ()Lnet/minecraft/class_2415; method_12493 getMirror - m ()Ljava/lang/String; method_12502 getName - m ()J method_12497 getSeed - m ()Z method_12506 shouldIgnoreEntities - m ()Z method_12505 shouldShowBoundingBox - m ()Z method_12503 shouldShowAir - m ()Lnet/minecraft/class_2633$class_2634; method_12500 func_210384_b - m ()Lnet/minecraft/class_2338; method_12499 getPos - m ()Lnet/minecraft/class_2338; method_12492 getSize - m ()Lnet/minecraft/class_2338; method_12496 getPosition - m (Lnet/minecraft/class_2792;)V method_12495 processPacket - m ()Ljava/lang/String; method_12501 getMetadata - f J field_13092 seed - f Lnet/minecraft/class_2415; field_13081 mirror - f Z field_13089 field_210400_j - f Lnet/minecraft/class_2470; field_13088 rotation - f Lnet/minecraft/class_2338; field_13093 pos - f Z field_13087 field_210401_k - f Ljava/lang/String; field_13085 field_210399_i - f Z field_13086 field_210402_l - f Ljava/lang/String; field_13080 name - f Lnet/minecraft/class_2338; field_13083 size - f Lnet/minecraft/class_2338; field_13091 field_210395_e - f Lnet/minecraft/class_2633$class_2634; field_13082 field_210392_b - f Lnet/minecraft/class_2776; field_13084 mode - f F field_13090 integrity -c net/minecraft/class_2877 net/minecraft/network/play/client/CUpdateSignPacket - m ()Lnet/minecraft/class_2338; method_12510 getPosition - m (Lnet/minecraft/class_2792;)V method_12509 processPacket - m ()[Ljava/lang/String; method_12508 getLines - f Lnet/minecraft/class_2338; field_13101 pos - f [Ljava/lang/String; field_13100 lines -c net/minecraft/class_2879 net/minecraft/network/play/client/CAnimateHandPacket - m (Lnet/minecraft/class_2792;)V method_12511 processPacket - m ()Lnet/minecraft/class_1268; method_12512 getHand - f Lnet/minecraft/class_1268; field_13102 hand -c net/minecraft/class_2884 net/minecraft/network/play/client/CSpectatePacket - m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_1297; method_12541 getEntity - m (Lnet/minecraft/class_2792;)V method_12542 processPacket - f Ljava/util/UUID; field_13129 id -c net/minecraft/class_2885 net/minecraft/network/play/client/CPlayerTryUseItemOnBlockPacket - m (Lnet/minecraft/class_2792;)V method_12547 processPacket - m ()Lnet/minecraft/class_3965; method_12543 func_218794_c - m ()Lnet/minecraft/class_1268; method_12546 getHand - f Lnet/minecraft/class_1268; field_13134 hand - f Lnet/minecraft/class_3965; field_17602 field_218795_a -c net/minecraft/class_2886 net/minecraft/network/play/client/CPlayerTryUseItemPacket - m (Lnet/minecraft/class_2792;)V method_12550 processPacket - m ()Lnet/minecraft/class_1268; method_12551 getHand - f Lnet/minecraft/class_1268; field_13136 hand -c net/minecraft/class_2889 net/minecraft/network/handshake/client/CHandshakePacket - m ()Lnet/minecraft/class_2539; method_12573 getRequestedState - m (Lnet/minecraft/class_2890;)V method_12575 processPacket - m ()I method_12574 getProtocolVersion - f Ljava/lang/String; field_13159 ip - f Lnet/minecraft/class_2539; field_13156 requestedState - f I field_13158 protocolVersion - f I field_13157 port -c net/minecraft/class_2890 net/minecraft/network/handshake/IHandshakeNetHandler - m (Lnet/minecraft/class_2889;)V method_12576 processHandshake -c net/minecraft/class_2896 net/minecraft/client/network/login/IClientLoginNetHandler - m (Lnet/minecraft/class_2899;)V method_12586 handleCustomPayloadLogin - m (Lnet/minecraft/class_2909;)V method_12584 handleDisconnect - m (Lnet/minecraft/class_2901;)V method_12588 handleLoginSuccess - m (Lnet/minecraft/class_2905;)V method_12587 handleEncryptionRequest - m (Lnet/minecraft/class_2907;)V method_12585 handleEnableCompression -c net/minecraft/class_2899 net/minecraft/network/login/server/SCustomPayloadLoginPacket - m (Lnet/minecraft/class_2896;)V method_12591 processPacket - m ()I method_12592 getTransaction - f Lnet/minecraft/class_2540; field_13189 payload - f Lnet/minecraft/class_2960; field_13187 channel - f I field_13188 transaction -c net/minecraft/class_2901 net/minecraft/network/login/server/SLoginSuccessPacket - m ()Lcom/mojang/authlib/GameProfile; method_12593 getProfile - m (Lnet/minecraft/class_2896;)V method_12594 processPacket - f Lcom/mojang/authlib/GameProfile; field_13190 profile -c net/minecraft/class_2905 net/minecraft/network/login/server/SEncryptionRequestPacket - m ()Ljava/lang/String; method_12610 getServerId - m ()Ljava/security/PublicKey; method_12611 getPublicKey - m (Lnet/minecraft/class_2896;)V method_12612 processPacket - m ()[B method_12613 getVerifyToken - f Ljava/lang/String; field_13209 hashedServerId - f [B field_13210 verifyToken - f Ljava/security/PublicKey; field_13211 publicKey -c net/minecraft/class_2907 net/minecraft/network/login/server/SEnableCompressionPacket - m (Lnet/minecraft/class_2896;)V method_12633 processPacket - m ()I method_12634 getCompressionThreshold - f I field_13232 compressionThreshold -c net/minecraft/class_2909 net/minecraft/network/login/server/SDisconnectLoginPacket - m ()Lnet/minecraft/class_2561; method_12638 getReason - m (Lnet/minecraft/class_2896;)V method_12637 processPacket - f Lnet/minecraft/class_2561; field_13243 reason -c net/minecraft/class_2911 net/minecraft/network/login/IServerLoginNetHandler - m (Lnet/minecraft/class_2913;)V method_12640 processCustomPayloadLogin - m (Lnet/minecraft/class_2915;)V method_12641 processLoginStart - m (Lnet/minecraft/class_2917;)V method_12642 processEncryptionResponse -c net/minecraft/class_2913 net/minecraft/network/login/client/CCustomPayloadLoginPacket - m (Lnet/minecraft/class_2911;)V method_12645 processPacket - f I field_13259 transaction - f Lnet/minecraft/class_2540; field_13258 payload -c net/minecraft/class_2915 net/minecraft/network/login/client/CLoginStartPacket - m ()Lcom/mojang/authlib/GameProfile; method_12650 getProfile - m (Lnet/minecraft/class_2911;)V method_12649 processPacket - f Lcom/mojang/authlib/GameProfile; field_13271 profile -c net/minecraft/class_2917 net/minecraft/network/login/client/CEncryptionResponsePacket - m (Lnet/minecraft/class_2911;)V method_12653 processPacket - m (Ljava/security/PrivateKey;)[B method_12655 getVerifyToken - m (Ljava/security/PrivateKey;)Ljavax/crypto/SecretKey; method_12654 getSecretKey - f [B field_13274 secretKeyEncrypted - f [B field_13273 verifyTokenEncrypted -c net/minecraft/class_2921 net/minecraft/client/network/status/IClientStatusNetHandler - m (Lnet/minecraft/class_2924;)V method_12667 handleServerInfo - m (Lnet/minecraft/class_2923;)V method_12666 handlePong -c net/minecraft/class_2923 net/minecraft/network/status/server/SPongPacket - m (Lnet/minecraft/class_2921;)V method_12670 processPacket - f J field_13280 clientTime -c net/minecraft/class_2924 net/minecraft/network/status/server/SServerInfoPacket - m ()Lnet/minecraft/class_2926; method_12672 getResponse - m (Lnet/minecraft/class_2921;)V method_12671 processPacket - f Lcom/google/gson/Gson; field_13282 GSON - f Lnet/minecraft/class_2926; field_13281 response -c net/minecraft/class_2926 net/minecraft/network/ServerStatusResponse - m (Lnet/minecraft/class_2926$class_2927;)V method_12681 setPlayers - m (Lnet/minecraft/class_2561;)V method_12684 setServerDescription - m (Lnet/minecraft/class_2926$class_2930;)V method_12679 setVersion - m (Ljava/lang/String;)V method_12677 setFavicon - m ()Lnet/minecraft/class_2926$class_2930; method_12683 getVersion - m ()Ljava/lang/String; method_12678 getFavicon - m ()Lnet/minecraft/class_2561; method_12680 getServerDescription - m ()Lnet/minecraft/class_2926$class_2927; method_12682 getPlayers - f Lnet/minecraft/class_2561; field_13284 description - f Lnet/minecraft/class_2926$class_2927; field_13285 players - f Lnet/minecraft/class_2926$class_2930; field_13286 version - f Ljava/lang/String; field_13283 favicon -c net/minecraft/class_2926$class_2927 net/minecraft/network/ServerStatusResponse$Players - m ()[Lcom/mojang/authlib/GameProfile; method_12685 getPlayers - m ()I method_12688 getOnlinePlayerCount - m ()I method_12687 getMaxPlayers - m ([Lcom/mojang/authlib/GameProfile;)V method_12686 setPlayers - f I field_13289 maxPlayers - f [Lcom/mojang/authlib/GameProfile; field_13287 players - f I field_13288 onlinePlayerCount -c net/minecraft/class_2926$class_2927$class_2928 net/minecraft/network/ServerStatusResponse$Players$Serializer - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_2926$class_2927; method_12689 deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lnet/minecraft/class_2926$class_2927;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_12690 serialize -c net/minecraft/class_2926$class_2929 net/minecraft/network/ServerStatusResponse$Serializer - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lnet/minecraft/class_2926;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_12692 serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_2926; method_12691 deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize -c net/minecraft/class_2926$class_2930 net/minecraft/network/ServerStatusResponse$Version - m ()I method_12694 getProtocol - m ()Ljava/lang/String; method_12693 getName - f Ljava/lang/String; field_13290 name - f I field_13291 protocol -c net/minecraft/class_2926$class_2930$class_2931 net/minecraft/network/ServerStatusResponse$Version$Serializer - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lnet/minecraft/class_2926$class_2930;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_12696 serialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_2926$class_2930; method_12695 deserialize -c net/minecraft/class_2933 net/minecraft/network/status/IServerStatusNetHandler - m (Lnet/minecraft/class_2935;)V method_12697 processPing - m (Lnet/minecraft/class_2937;)V method_12698 processServerQuery -c net/minecraft/class_2935 net/minecraft/network/status/client/CPingPacket - m (Lnet/minecraft/class_2933;)V method_12699 processPacket - m ()J method_12700 getClientTime - f J field_13292 clientTime -c net/minecraft/class_2937 net/minecraft/network/status/client/CServerQueryPacket - m (Lnet/minecraft/class_2933;)V method_12701 processPacket -c net/minecraft/class_2940 net/minecraft/network/datasync/DataParameter - m ()Lnet/minecraft/class_2941; method_12712 getSerializer - m ()I method_12713 getId - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/String; toString toString - f I field_13306 id - f Lnet/minecraft/class_2941; field_13307 serializer -c net/minecraft/class_2941 net/minecraft/network/datasync/IDataSerializer - m (Lnet/minecraft/class_2540;)Ljava/lang/Object; method_12716 read - m (Ljava/lang/Object;)Ljava/lang/Object; method_12714 copyValue - m (Lnet/minecraft/class_2540;Ljava/lang/Object;)V method_12715 write - m (I)Lnet/minecraft/class_2940; method_12717 createKey -c net/minecraft/class_2943 net/minecraft/network/datasync/DataSerializers - m (Lnet/minecraft/class_2941;)I method_12719 getSerializerId - m (I)Lnet/minecraft/class_2941; method_12721 getSerializer - m (Lnet/minecraft/class_2941;)V method_12720 registerSerializer - f Lnet/minecraft/class_2941; field_13314 PARTICLE_DATA - f Lnet/minecraft/class_2941; field_13316 ROTATIONS - f Lnet/minecraft/class_2941; field_13324 BLOCK_POS - f Lnet/minecraft/class_2941; field_13322 ITEMSTACK - f Lnet/minecraft/class_2941; field_13312 OPTIONAL_BLOCK_STATE - f Lnet/minecraft/class_2941; field_13323 BOOLEAN - f Lnet/minecraft/class_2941; field_13313 OPTIONAL_UNIQUE_ID - f Lnet/minecraft/class_2941; field_13318 COMPOUND_NBT - f Lnet/minecraft/class_2941; field_17207 VILLAGER_DATA - f Lnet/minecraft/class_2941; field_13315 OPTIONAL_BLOCK_POS - f Lnet/minecraft/class_2941; field_13321 DIRECTION - f Lnet/minecraft/class_2941; field_13319 BYTE - f Lnet/minecraft/class_2941; field_17910 OPTIONAL_VARINT - f Lnet/minecraft/class_2941; field_18238 POSE - f Lnet/minecraft/class_3513; field_13328 REGISTRY - f Lnet/minecraft/class_2941; field_13317 TEXT_COMPONENT - f Lnet/minecraft/class_2941; field_13325 OPTIONAL_TEXT_COMPONENT - f Lnet/minecraft/class_2941; field_13327 VARINT - f Lnet/minecraft/class_2941; field_13320 FLOAT - f Lnet/minecraft/class_2941; field_13326 STRING -c net/minecraft/class_2943$13 net/minecraft/network/datasync/DataSerializers$3 - m (Ljava/lang/Float;)Ljava/lang/Float; method_12770 copyValue - m (Lnet/minecraft/class_2540;Ljava/lang/Float;)V method_12769 write - m (Lnet/minecraft/class_2540;)Ljava/lang/Float; method_12768 read -c net/minecraft/class_2943$14 net/minecraft/network/datasync/DataSerializers$4 - m (Lnet/minecraft/class_2540;Ljava/lang/String;)V method_12723 write - m (Ljava/lang/String;)Ljava/lang/String; method_12724 copyValue - m (Lnet/minecraft/class_2540;)Ljava/lang/String; method_12722 read -c net/minecraft/class_2943$8 net/minecraft/network/datasync/DataSerializers$16 - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_12762 copyValue - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2487; method_12764 read - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2487;)V method_12763 write -c net/minecraft/class_2943$11 net/minecraft/network/datasync/DataSerializers$19 - m (Lnet/minecraft/class_4050;)Lnet/minecraft/class_4050; method_18696 copyValue - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_4050;)V method_18697 write - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_4050; method_18698 read -c net/minecraft/class_2943$9 net/minecraft/network/datasync/DataSerializers$17 - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_3850; method_17198 read - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_3850;)V method_17197 write - m (Lnet/minecraft/class_3850;)Lnet/minecraft/class_3850; method_17196 copyValue -c net/minecraft/class_2943$12 net/minecraft/network/datasync/DataSerializers$2 - m (Lnet/minecraft/class_2540;Ljava/lang/Integer;)V method_12766 write - m (Ljava/lang/Integer;)Ljava/lang/Integer; method_12767 copyValue - m (Lnet/minecraft/class_2540;)Ljava/lang/Integer; method_12765 read -c net/minecraft/class_2943$6 net/minecraft/network/datasync/DataSerializers$14 - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2350; method_12756 read - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2350;)V method_12757 write - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_12758 copyValue -c net/minecraft/class_2943$7 net/minecraft/network/datasync/DataSerializers$15 - m (Lnet/minecraft/class_2540;Ljava/util/Optional;)V method_12759 write - m (Ljava/util/Optional;)Ljava/util/Optional; method_12761 copyValue - m (Lnet/minecraft/class_2540;)Ljava/util/Optional; method_12760 read -c net/minecraft/class_2943$10 net/minecraft/network/datasync/DataSerializers$18 - m (Ljava/util/OptionalInt;)Ljava/util/OptionalInt; method_18190 copyValue - m (Lnet/minecraft/class_2540;Ljava/util/OptionalInt;)V method_18189 write - m (Lnet/minecraft/class_2540;)Ljava/util/OptionalInt; method_18191 read -c net/minecraft/class_2943$4 net/minecraft/network/datasync/DataSerializers$12 - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2338;)V method_12751 write - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_12752 copyValue - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2338; method_12750 read -c net/minecraft/class_2943$5 net/minecraft/network/datasync/DataSerializers$13 - m (Lnet/minecraft/class_2540;Ljava/util/Optional;)V method_12753 write - m (Ljava/util/Optional;)Ljava/util/Optional; method_12755 copyValue - m (Lnet/minecraft/class_2540;)Ljava/util/Optional; method_12754 read -c net/minecraft/class_2943$19 net/minecraft/network/datasync/DataSerializers$9 - m (Lnet/minecraft/class_2540;Ljava/lang/Boolean;)V method_12738 write - m (Lnet/minecraft/class_2540;)Ljava/lang/Boolean; method_12737 read - m (Ljava/lang/Boolean;)Ljava/lang/Boolean; method_12739 copyValue -c net/minecraft/class_2943$17 net/minecraft/network/datasync/DataSerializers$7 - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_1799;)V method_12731 write - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_1799; method_12733 read - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_12732 copyValue -c net/minecraft/class_2943$18 net/minecraft/network/datasync/DataSerializers$8 - m (Lnet/minecraft/class_2540;Ljava/util/Optional;)V method_12734 write - m (Lnet/minecraft/class_2540;)Ljava/util/Optional; method_12735 read - m (Ljava/util/Optional;)Ljava/util/Optional; method_12736 copyValue -c net/minecraft/class_2943$15 net/minecraft/network/datasync/DataSerializers$5 - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2561; method_12725 read - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2561;)V method_12727 write - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_12726 copyValue -c net/minecraft/class_2943$16 net/minecraft/network/datasync/DataSerializers$6 - m (Lnet/minecraft/class_2540;Ljava/util/Optional;)V method_12728 write - m (Lnet/minecraft/class_2540;)Ljava/util/Optional; method_12729 read - m (Ljava/util/Optional;)Ljava/util/Optional; method_12730 copyValue -c net/minecraft/class_2943$2 net/minecraft/network/datasync/DataSerializers$10 - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2396;)Lnet/minecraft/class_2394; method_12744 read - m (Lnet/minecraft/class_2394;)Lnet/minecraft/class_2394; method_12745 copyValue - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2394; method_12743 read - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2394;)V method_12746 write -c net/minecraft/class_2943$3 net/minecraft/network/datasync/DataSerializers$11 - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2379;)V method_12747 write - m (Lnet/minecraft/class_2379;)Lnet/minecraft/class_2379; method_12749 copyValue - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_2379; method_12748 read -c net/minecraft/class_2943$1 net/minecraft/network/datasync/DataSerializers$1 - m (Lnet/minecraft/class_2540;Ljava/lang/Byte;)V method_12741 write - m (Ljava/lang/Byte;)Ljava/lang/Byte; method_12742 copyValue - m (Lnet/minecraft/class_2540;)Ljava/lang/Byte; method_12740 read -c net/minecraft/class_2945 net/minecraft/network/datasync/EntityDataManager - m ()Z method_12786 isDirty - m (Lnet/minecraft/class_2940;)Lnet/minecraft/class_2945$class_2946; method_12783 getEntry - m (Lnet/minecraft/class_2945$class_2946;Lnet/minecraft/class_2945$class_2946;)V method_12785 setEntryValue - m (Lnet/minecraft/class_2940;Ljava/lang/Object;)V method_12776 setEntry - m ()V method_12792 setClean - m ()Z method_12790 isEmpty - m (Lnet/minecraft/class_2940;Ljava/lang/Object;)V method_12778 set - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2945$class_2946;)V method_12782 writeEntry - m (Lnet/minecraft/class_2940;Ljava/lang/Object;)V method_12784 register - m (Ljava/util/List;)V method_12779 setEntryValues - m ()Ljava/util/List; method_12793 getAll - m (Lnet/minecraft/class_2940;)Ljava/lang/Object; method_12789 get - m (Lnet/minecraft/class_2540;)Ljava/util/List; method_12788 readEntries - m (Lnet/minecraft/class_2540;ILnet/minecraft/class_2941;)Lnet/minecraft/class_2945$class_2946; method_12777 makeDataEntry - m (Ljava/util/List;Lnet/minecraft/class_2540;)V method_12787 writeEntries - m ()Ljava/util/List; method_12781 getDirty - m (Ljava/lang/Class;Lnet/minecraft/class_2941;)Lnet/minecraft/class_2940; method_12791 createKey - f Lnet/minecraft/class_1297; field_13333 entity - f Ljava/util/concurrent/locks/ReadWriteLock; field_13335 lock - f Lorg/apache/logging/log4j/Logger; field_13334 LOGGER - f Z field_13330 empty - f Z field_13329 dirty - f Ljava/util/Map; field_13331 entries - f Ljava/util/Map; field_13332 NEXT_ID_MAP -c net/minecraft/class_2945$class_2946 net/minecraft/network/datasync/EntityDataManager$DataEntry - m ()Lnet/minecraft/class_2945$class_2946; method_12798 copy - m (Lnet/minecraft/class_2945$class_2946;)Lnet/minecraft/class_2940; method_20794 func_223479_a - m ()Z method_12796 isDirty - m ()Ljava/lang/Object; method_12794 getValue - m (Ljava/lang/Object;)V method_12799 setValue - m ()Lnet/minecraft/class_2940; method_12797 getKey - m (Z)V method_12795 setDirty - m (Lnet/minecraft/class_2945$class_2946;)Ljava/lang/Object; method_20795 func_223480_b - f Lnet/minecraft/class_2940; field_13337 key - f Z field_13336 dirty - f Ljava/lang/Object; field_13338 value -c net/minecraft/class_2952 net/minecraft/item/crafting/IRecipePlacer - m (Ljava/util/Iterator;IIII)V method_12815 setSlotContents - m (IIILnet/minecraft/class_1860;Ljava/util/Iterator;I)V method_12816 placeRecipe -c net/minecraft/class_2955 net/minecraft/item/crafting/ServerRecipePlacer - m (Lnet/minecraft/class_1860;Z)V method_12821 tryPlaceRecipe - m (Lnet/minecraft/class_1735;Lnet/minecraft/class_1799;)V method_12824 consumeIngredient - m ()V method_12822 clear - m ()I method_12823 getEmptyPlayerSlots - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1860;Z)V method_12826 place - m (ZIZ)I method_12819 getMaxAmount - m (I)V method_12820 giveToPlayer - m ()Z method_12825 placeIntoInventory - f Lnet/minecraft/class_1729; field_13348 recipeBookContainer - f Lnet/minecraft/class_1662; field_13347 recipeItemHelper - f Lorg/apache/logging/log4j/Logger; field_13349 LOGGER - f Lnet/minecraft/class_1661; field_13350 playerInventory -c net/minecraft/class_2958 net/minecraft/item/crafting/ServerRecipePlacerFurnace - m (ILit/unimi/dsi/fastutil/ints/IntList;)V method_12827 func_201516_a - f Z field_13351 matches -c net/minecraft/class_5379 net/minecraft/util/datafix/DelegatingDynamicOps - m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; mergeToMap mergeToMap - m ()Z compressMaps compressMaps - m (Ljava/lang/Object;Lcom/mojang/serialization/MapLike;)Lcom/mojang/serialization/DataResult; mergeToMap mergeToMap - m (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; remove remove - m (Ljava/lang/Object;Ljava/util/List;)Lcom/mojang/serialization/DataResult; mergeToList mergeToList - m (Z)Ljava/lang/Object; createBoolean createBoolean - m (F)Ljava/lang/Object; createFloat createFloat - m (Ljava/util/stream/Stream;)Ljava/lang/Object; createMap createMap - m (B)Ljava/lang/Object; createByte createByte - m (I)Ljava/lang/Object; createInt createInt - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getByteBuffer getByteBuffer - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getLongStream getLongStream - m (D)Ljava/lang/Object; createDouble createDouble - m (Ljava/nio/ByteBuffer;)Ljava/lang/Object; createByteList createByteList - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; mergeToList mergeToList - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMapValues getMapValues - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getBooleanValue getBooleanValue - m ()Ljava/lang/Object; empty empty - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getStream getStream - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMapEntries getMapEntries - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getMap getMap - m (J)Ljava/lang/Object; createLong createLong - m (S)Ljava/lang/Object; createShort createShort - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; convertTo convertTo - m (Ljava/util/stream/LongStream;)Ljava/lang/Object; createLongList createLongList - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getList getList - m ()Lcom/mojang/serialization/RecordBuilder; mapBuilder mapBuilder - m ()Lcom/mojang/serialization/ListBuilder; listBuilder listBuilder - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getIntStream getIntStream - m (Ljava/util/stream/Stream;)Ljava/lang/Object; createList createList - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getNumberValue getNumberValue - m (Ljava/lang/Number;)Ljava/lang/Object; createNumeric createNumeric - m (Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; getStringValue getStringValue - m (Ljava/lang/String;)Ljava/lang/Object; createString createString - m (Ljava/util/stream/IntStream;)Ljava/lang/Object; createIntList createIntList - f Lcom/mojang/serialization/DynamicOps; field_25503 ops -c net/minecraft/class_5380 net/minecraft/util/registry/SimpleRegistryCodec - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; decode decode - m ()Ljava/lang/String; toString toString - m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/serialization/DataResult; method_29743 func_240862_a_ - m (Lnet/minecraft/class_2370;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_29744 encode - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Lifecycle;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_5380; method_29745 create - m (Lcom/mojang/datafixers/util/Pair;Lnet/minecraft/class_2370;)Lcom/mojang/datafixers/util/Pair; method_29742 func_240861_a_ - m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; encode encode - f Lcom/mojang/serialization/Codec; field_25504 registryCodec - f Lcom/mojang/serialization/Codec; field_25506 rawCodec - f Lnet/minecraft/class_5321; field_25505 registryKey -c net/minecraft/class_5381 net/minecraft/util/registry/RegistryKeyCodec - m (Ljava/lang/Object;)Ljava/lang/Object; method_31196 func_240869_b_ - m (Ljava/util/function/Supplier;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_29748 encode - m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; encode encode - m (Ljava/lang/Object;)Ljava/lang/Object; method_29750 func_244326_b - m (Ljava/lang/Object;)Ljava/util/function/Supplier; method_29747 func_240867_a_ - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_31194 getValueCodecs - m (Ljava/util/List;)Ljava/util/List; method_31193 func_244327_b - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_5381; method_29749 create - m (Ljava/util/List;)Ljava/util/List; method_31191 func_244324_a - m (Ljava/lang/Object;)Ljava/util/function/Supplier; method_31195 func_244329_c - m (Lcom/mojang/datafixers/util/Either;)Ljava/util/List; method_31190 func_244323_a - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;Z)Lnet/minecraft/class_5381; method_31192 create - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_29746 func_240866_a_ - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; decode decode - m ()Ljava/lang/String; toString toString - f Lcom/mojang/serialization/Codec; field_25508 registryCodec - f Lnet/minecraft/class_5321; field_25507 registryKey - f Z field_26758 allowInlineDefinitions -c net/minecraft/class_5505 net/minecraft/util/registry/RegistryLookupCodec - m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_5505; method_31148 getLookUpCodec - m (Lnet/minecraft/class_2378;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;)Lcom/mojang/serialization/RecordBuilder; method_31147 encode - m ()Ljava/lang/String; toString toString - m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;)Lcom/mojang/serialization/RecordBuilder; encode encode - m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/MapLike;)Lcom/mojang/serialization/DataResult; decode decode - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/stream/Stream; keys keys - f Lnet/minecraft/class_5321; field_26737 registryKey -c net/minecraft/class_5382 net/minecraft/util/registry/WorldSettingsImport - m (Ljava/lang/Object;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;Z)Lcom/mojang/serialization/DataResult; method_29759 decode - m (Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;Lnet/minecraft/class_2960;Lnet/minecraft/class_2370;)Lcom/mojang/serialization/DataResult; method_29762 func_240885_a_ - m (Lnet/minecraft/class_5321;)Lcom/mojang/serialization/DataResult; method_31153 func_244343_c - m (Lcom/mojang/datafixers/util/Pair;Ljava/util/function/Supplier;)Lcom/mojang/datafixers/util/Pair; method_29752 func_240875_a_ - m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_5382$class_5383; method_29761 getResultMap - m (Lnet/minecraft/class_5321;)Lcom/mojang/serialization/DataResult; method_31152 getRegistryByKey - m (Lnet/minecraft/class_5321;)Lnet/minecraft/class_5382$class_5383; method_29766 func_244344_d - m (Lnet/minecraft/class_2385;Lnet/minecraft/class_5321;Lcom/mojang/datafixers/util/Pair;)Ljava/util/function/Supplier; method_31198 func_244339_a - m (Lnet/minecraft/class_2385;)Lcom/mojang/serialization/DataResult; method_31151 func_244337_a - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_29751 func_240874_a_ - m (Lnet/minecraft/class_2385;Lnet/minecraft/class_5321;)Ljava/lang/Object; method_31197 func_244338_a - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_3300;Lnet/minecraft/class_5455$class_5457;)Lnet/minecraft/class_5382; method_29753 create - m (Lnet/minecraft/class_2385;Lnet/minecraft/class_5321;)Ljava/lang/Object; method_31199 func_241799_a_ - m (Lnet/minecraft/class_2370;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/DataResult; method_29755 decode - m (Lnet/minecraft/class_2370;Ljava/util/function/Supplier;)Lnet/minecraft/class_2370; method_29754 func_240877_a_ - m (Lnet/minecraft/class_2385;Lnet/minecraft/class_5321;)Ljava/lang/Object; method_29756 func_244342_c - m (Ljava/lang/Object;)Ljava/lang/Object; method_29767 func_244341_b - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5382$class_5506;Lnet/minecraft/class_5455$class_5457;)Lnet/minecraft/class_5382; method_31150 create - m (Ljava/lang/Object;)Ljava/util/function/Supplier; method_31070 func_240891_b_ - m ()Lorg/apache/logging/log4j/Logger; method_31149 func_244334_a - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2385;Lcom/mojang/serialization/Codec;Lnet/minecraft/class_2960;)Lcom/mojang/serialization/DataResult; method_29763 createRegistry - f Lorg/apache/logging/log4j/Logger; field_25509 LOGGER - f Lnet/minecraft/class_5382$class_5506; field_26738 resourceAccess - f Lnet/minecraft/class_5382; field_26739 jsonOps - f Lnet/minecraft/class_5455$class_5457; field_25511 dynamicRegistries - f Ljava/util/Map; field_25512 registryToResultMap -c net/minecraft/class_5382$class_5506 net/minecraft/util/registry/WorldSettingsImport$IResourceAccess - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Decoder;)Lcom/mojang/serialization/DataResult; method_31155 decode - m (Lnet/minecraft/class_5321;)Ljava/util/Collection; method_31156 getRegistryObjects - m (Lnet/minecraft/class_3300;)Lnet/minecraft/class_5382$class_5506; method_31154 create -c net/minecraft/class_5382$class_5506$class_5507 net/minecraft/util/registry/WorldSettingsImport$IResourceAccess$RegistryAccess - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;)Lnet/minecraft/class_2960; method_31161 func_244354_a - m (Lnet/minecraft/class_5455$class_5457;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Encoder;ILjava/lang/Object;Lcom/mojang/serialization/Lifecycle;)V method_31159 encode - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_5321;)Z method_31162 func_244355_b - m (Lnet/minecraft/class_5321;Ljava/lang/Object;)Lcom/mojang/datafixers/util/Pair; method_31160 func_244353_a - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_26742 keyToIDMap - f Ljava/util/Map; field_26741 keyToElementMap - f Ljava/util/Map; field_26743 keyToLifecycleMap -c net/minecraft/class_5382$class_5506$1 net/minecraft/util/registry/WorldSettingsImport$IResourceAccess$1 - m (Ljava/lang/Object;)Lcom/mojang/datafixers/util/Pair; method_31157 func_244347_a - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;)Z method_31158 func_244348_a - f Lnet/minecraft/class_3300; field_26740 field_244346_a -c net/minecraft/class_5382$1 net/minecraft/util/registry/WorldSettingsImport$1 -c net/minecraft/class_5382$class_5383 net/minecraft/util/registry/WorldSettingsImport$ResultMap - m (Lnet/minecraft/class_5382$class_5383;)Ljava/util/Map; method_29770 func_240894_a_ - f Ljava/util/Map; field_25513 resultMap -c net/minecraft/class_5384 net/minecraft/util/registry/WorldGenSettingsExport - m (Ljava/lang/Object;Ljava/lang/Object;Lnet/minecraft/class_5321;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/DataResult; method_29772 encode - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_5455;)Lnet/minecraft/class_5384; method_29771 create - f Lnet/minecraft/class_5455; field_25514 dynamicRegistries -c net/minecraft/class_5321 net/minecraft/util/RegistryKey - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_5321;)Ljava/util/function/Function; method_29178 getKeyCreator - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Ljava/lang/String;)Lnet/minecraft/class_5321; method_29182 func_240906_a_ - m ()Lnet/minecraft/class_2960; method_29177 getLocation - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2960;)Lnet/minecraft/class_5321; method_29183 func_240907_b_ - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;)Lnet/minecraft/class_5321; method_29181 getOrCreateKey - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2960;)Lnet/minecraft/class_5321; method_29179 getOrCreateKey - m (Lnet/minecraft/class_5321;)Z method_31163 isParent - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_5321; method_29180 getOrCreateRootKey - f Ljava/util/Map; field_25136 UNIVERSAL_KEY_MAP - f Lnet/minecraft/class_2960; field_25137 parent - f Lnet/minecraft/class_2960; field_25138 location -c net/minecraft/class_2960 net/minecraft/util/ResourceLocation - m (Ljava/lang/String;)Lnet/minecraft/class_2960; method_12829 tryCreate - m (C)Z method_29184 validatePathChar - m (Ljava/lang/String;C)Lnet/minecraft/class_2960; method_12838 create - m (C)Z method_12831 isValidPathCharacter - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;)Z method_20207 isResouceNameValid - m (C)Z method_29185 validateNamespaceChar - m (Ljava/lang/String;C)[Ljava/lang/String; method_12830 decompose - m (Lcom/mojang/brigadier/StringReader;)Lnet/minecraft/class_2960; method_12835 read - m (Ljava/lang/String;)Z method_20209 isValidNamespace - m (Lnet/minecraft/class_2960;)I method_12833 compareTo - m ()Ljava/lang/String; method_12832 getPath - m (Ljava/lang/String;)Lcom/mojang/serialization/DataResult; method_29186 decodeResourceLocation - m ()Ljava/lang/String; method_12836 getNamespace - m (Ljava/lang/String;)Z method_20208 isPathValid - m (Ljava/lang/Object;)I compareTo compareTo - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13354 INVALID_EXCEPTION - f Ljava/lang/String; field_13355 path - f Ljava/lang/String; field_13353 namespace - f Lcom/mojang/serialization/Codec; field_25139 CODEC -c net/minecraft/class_2960$class_2961 net/minecraft/util/ResourceLocation$Serializer - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_2960; method_12840 deserialize - m (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; serialize serialize - m (Lnet/minecraft/class_2960;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; method_12839 serialize -c net/minecraft/class_2966 net/minecraft/util/registry/Bootstrap - m (Ljava/util/function/Function;Lnet/minecraft/class_2477;Ljava/util/Set;Ljava/lang/Object;)V method_12850 func_218818_a - m ()V method_12851 register - m (Lnet/minecraft/class_2960;)Ljava/lang/String; method_17595 func_218820_a - m ()Ljava/util/Set; method_17597 getTranslationStrings - m (Ljava/lang/Iterable;Ljava/util/function/Function;Ljava/util/Set;)V method_12848 addTranslationStrings - m (Ljava/util/Set;)V method_27732 addGameRuleTranslationStrings - m (Ljava/lang/String;)V method_12847 printToSYSOUT - m ()V method_17598 checkTranslations - m ()V method_12852 redirectOutputToLog - m (Ljava/lang/String;)V method_17596 func_218817_b - f Z field_13357 alreadyRegistered - f Ljava/io/PrintStream; field_13358 SYSOUT - f Lorg/apache/logging/log4j/Logger; field_13359 LOGGER -c net/minecraft/class_2966$1 net/minecraft/util/registry/Bootstrap$1 - f Lnet/minecraft/class_2477; field_24373 field_240914_a_ - f Ljava/util/Set; field_24374 field_240915_b_ -c net/minecraft/class_2973 net/minecraft/client/util/JSONException - m (Ljava/lang/String;)V method_12854 prependJsonKey - m ()Ljava/lang/String; getMessage getMessage - m (Ljava/lang/String;)V method_12855 setFilenameAndFlush - m (Ljava/lang/Exception;)Lnet/minecraft/class_2973; method_12856 forException - f Ljava/lang/String; field_13372 message - f Ljava/util/List; field_13371 entries -c net/minecraft/class_2973$class_2974 net/minecraft/client/util/JSONException$Entry - m (Ljava/lang/String;)V method_12858 addJsonKey - m (Lnet/minecraft/class_2973$class_2974;Ljava/lang/String;)Ljava/lang/String; method_12860 access$202 - m ()Ljava/lang/String; method_12857 getJsonKeys - m (Lnet/minecraft/class_2973$class_2974;Ljava/lang/String;)V method_12859 access$100 - m ()Ljava/lang/String; toString toString - f Ljava/util/List; field_13374 jsonKeys - f Ljava/lang/String; field_13373 filename -c net/minecraft/class_2973$1 net/minecraft/client/util/JSONException$1 -c net/minecraft/class_2976 net/minecraft/server/dedicated/PendingCommand - f Lnet/minecraft/class_2168; field_13378 sender - f Ljava/lang/String; field_13377 command -c net/minecraft/class_2980 net/minecraft/server/DebugLoggingPrintStream -c net/minecraft/class_2981 net/minecraft/server/ServerEula - m ()Z method_12867 loadEulaStatus - m ()V method_12868 createEULAFile - m ()Z method_12866 hasAcceptedEULA - f Ljava/nio/file/Path; field_13380 eulaFile - f Lorg/apache/logging/log4j/Logger; field_13381 LOG - f Z field_13379 acceptedEULA -c net/minecraft/class_2983 net/minecraft/util/LoggingPrintStream - m (Ljava/lang/String;)V println println - m (Ljava/lang/String;)V method_12870 logString - m (Ljava/lang/Object;)V println println - f Ljava/lang/String; field_13383 domain - f Lorg/apache/logging/log4j/Logger; field_13384 LOGGER -c net/minecraft/class_2985 net/minecraft/advancements/PlayerAdvancements - m (Lnet/minecraft/class_161;Lnet/minecraft/class_167;)V method_12884 startProgress - m ()V method_12881 dispose - m (Lnet/minecraft/class_161;)Z method_12879 shouldBeVisible - m ()V method_12887 ensureAllVisible - m (Lnet/minecraft/class_161;Ljava/lang/String;)Z method_12883 revokeCriterion - m ()V method_12890 save - m (Lnet/minecraft/class_161;)Lnet/minecraft/class_167; method_12882 getProgress - m (Lnet/minecraft/class_3222;)V method_12876 flushDirty - m (Lnet/minecraft/class_3222;)V method_12875 setPlayer - m (Lnet/minecraft/class_161;Ljava/lang/String;)Z method_12878 grantCriterion - m (Lnet/minecraft/class_161;)Z method_12877 hasCompletedChildrenOrSelf - m (Lnet/minecraft/class_161;)V method_12888 setSelectedTab - m (Lnet/minecraft/class_161;)V method_12885 ensureVisibility - m (Lnet/minecraft/class_161;)V method_12874 registerListeners - m (Lnet/minecraft/class_161;)V method_12880 unregisterListeners - m (Lnet/minecraft/class_2989;)V method_12889 registerAchievementListeners - m (Lnet/minecraft/class_2989;)V method_12872 unlockDefaultAdvancements - m (Lnet/minecraft/class_2989;)V method_12873 deserialize - m (Lnet/minecraft/class_2989;)V method_12886 reset - f Lcom/mojang/datafixers/DataFixer; field_25324 dataFixer - f Lcom/google/gson/Gson; field_13395 GSON - f Lorg/apache/logging/log4j/Logger; field_13394 LOGGER - f Ljava/io/File; field_13393 progressFile - f Lcom/google/gson/reflect/TypeToken; field_13392 MAP_TOKEN - f Ljava/util/Map; field_13389 progress - f Lnet/minecraft/class_3222; field_13391 player - f Z field_13396 isFirstPacket - f Lnet/minecraft/class_3324; field_25325 playerList - f Lnet/minecraft/class_161; field_13387 lastSelectedTab - f Ljava/util/Set; field_13390 visible - f Ljava/util/Set; field_13386 visibilityChanged - f Ljava/util/Set; field_13388 progressChanged -c net/minecraft/class_2985$1 net/minecraft/advancements/PlayerAdvancements$1 -c net/minecraft/class_2987 net/minecraft/network/ThreadQuickExitException - m ()Ljava/lang/Throwable; fillInStackTrace fillInStackTrace - f Lnet/minecraft/class_2987; field_13400 INSTANCE -c net/minecraft/class_2989 net/minecraft/advancements/AdvancementManager - m ()Ljava/util/Collection; method_12893 getAllAdvancements - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_161; method_12896 getAdvancement - m (Ljava/util/Map;Lnet/minecraft/class_2960;Lcom/google/gson/JsonElement;)V method_20723 func_240923_a_ - m (Ljava/util/Map;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_20724 apply - f Lcom/google/gson/Gson; field_13405 GSON - f Lnet/minecraft/class_4567; field_24452 lootPredicateManager - f Lnet/minecraft/class_163; field_13404 advancementList - f Lorg/apache/logging/log4j/Logger; field_13406 LOGGER -c net/minecraft/class_5349 net/minecraft/resources/FunctionReloader - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;)Ljava/util/List; method_29450 func_240934_a_ - m (Lnet/minecraft/class_2960;)Ljava/util/Optional; method_29456 func_240940_a_ - m (Lcom/mojang/datafixers/util/Pair;)V method_29453 func_240937_a_ - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_2960;Lnet/minecraft/class_2960;Lnet/minecraft/class_2168;)Lnet/minecraft/class_2158; method_29451 func_240935_a_ - m (Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_2960;Ljava/util/concurrent/CompletableFuture;)V method_29452 func_240936_a_ - m (Lnet/minecraft/class_2960;Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/class_2158;Ljava/lang/Throwable;)Ljava/lang/Object; method_29457 func_240941_a_ - m (Ljava/util/Map;Ljava/lang/Void;Ljava/lang/Throwable;)Ljava/util/Map; method_29455 func_240939_a_ - m ()Ljava/util/Map; method_29447 func_240931_a_ - m ()Lnet/minecraft/class_5414; method_29458 func_240942_b_ - m (Ljava/lang/String;)Z method_29454 func_240938_a_ - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_29459 func_240943_b_ - m (Lnet/minecraft/class_3300;Ljava/util/concurrent/Executor;Ljava/util/Collection;)Ljava/util/concurrent/CompletionStage; method_29449 func_240933_a_ - m (Lnet/minecraft/class_3300;)Ljava/util/Collection; method_29448 func_240932_a_ - f I field_25331 field_240929_f_ - f Lorg/apache/logging/log4j/Logger; field_25326 field_240924_a_ - f I field_25328 field_240926_c_ - f Lcom/mojang/brigadier/CommandDispatcher; field_25332 field_240930_g_ - f Lnet/minecraft/class_5414; field_25801 field_240928_e_ - f Ljava/util/Map; field_25329 field_240927_d_ - f I field_25327 field_240925_b_ - f Lnet/minecraft/class_3503; field_25330 field_244357_e -c net/minecraft/class_2991 net/minecraft/advancements/FunctionManager - m (Lnet/minecraft/class_2158;Lnet/minecraft/class_2168;)I method_12904 execute - m ()Ljava/lang/Iterable; method_29464 getFunctionTagIdentifiers - m ()Ljava/lang/Iterable; method_29463 getFunctionIdentifiers - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_29462 getFunctionTag - m ()I method_12902 getMaxCommandChainLength - m (Lnet/minecraft/class_2960;)Ljava/util/Optional; method_12905 get - m ()Lnet/minecraft/class_2168; method_12899 getCommandSource - m (Lnet/minecraft/class_5349;)V method_29773 clearAndResetTickFunctions - m ()Lcom/mojang/brigadier/CommandDispatcher; method_12900 getCommandDispatcher - m (Ljava/util/Collection;Lnet/minecraft/class_2960;)V method_29460 executeAndProfile - m ()V method_18699 tick - m (Lnet/minecraft/class_5349;)V method_29461 setFunctionReloader - f Ljava/util/ArrayDeque; field_13413 commandQueue - f Lnet/minecraft/class_2960; field_13417 TICK_TAG_ID - f Lnet/minecraft/server/MinecraftServer; field_13419 server - f Lnet/minecraft/class_2960; field_13412 LOAD_TAG_ID - f Z field_13411 isExecuting - f Z field_13422 loadFunctionsRun - f Lnet/minecraft/class_5349; field_25333 reloader - f Ljava/util/List; field_19332 commandChain - f Ljava/util/List; field_13418 tickFunctions -c net/minecraft/class_2991$class_2992 net/minecraft/advancements/FunctionManager$QueuedCommand - m (Ljava/util/ArrayDeque;I)V method_12914 execute - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2168; field_13424 sender - f Lnet/minecraft/class_2158$class_2161; field_13425 entry - f Lnet/minecraft/class_2991; field_13423 functionManager -c net/minecraft/class_2994 net/minecraft/network/rcon/IServer - m ()I method_3788 getCurrentPlayerCount - m ()Lnet/minecraft/class_3806; method_16705 getServerProperties - m (Ljava/lang/String;)Ljava/lang/String; method_12934 handleRConCommand - m ()Ljava/lang/String; method_12929 getHostname - m ()Ljava/lang/String; method_3827 getMinecraftVersion - m ()Ljava/lang/String; method_12930 getMotd - m ()I method_12918 getPort - m ()[Ljava/lang/String; method_3858 getOnlinePlayerNames - m ()Ljava/lang/String; method_12916 getPlugins - m ()Ljava/lang/String; method_3865 func_230542_k__ - m ()I method_3802 getMaxPlayers -c net/minecraft/class_5350 net/minecraft/resources/DataPackRegistries - m ()Lnet/minecraft/class_3300; method_29474 getResourceManager - m ()Lnet/minecraft/class_2989; method_29473 getAdvancementManager - m (Lnet/minecraft/class_5350;Lnet/minecraft/class_3902;)Lnet/minecraft/class_5350; method_29467 func_240962_a_ - m ()Lnet/minecraft/class_2170; method_29472 getCommandManager - m (Lnet/minecraft/class_5350;Lnet/minecraft/class_3902;Ljava/lang/Throwable;)V method_29774 func_240963_a_ - m ()Lnet/minecraft/class_5349; method_29465 getFunctionReloader - m ()Lnet/minecraft/class_5415; method_29470 func_244358_d - m ()Lnet/minecraft/class_4567; method_29468 getLootPredicateManager - m ()V close close - m ()V method_29475 updateTags - m ()Lnet/minecraft/class_1863; method_29471 getRecipeManager - m ()Lnet/minecraft/class_60; method_29469 getLootTableManager - m (Ljava/util/List;Lnet/minecraft/class_2170$class_5364;ILjava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_29466 func_240961_a_ - f Lnet/minecraft/class_5349; field_25342 functionReloader - f Lnet/minecraft/class_2989; field_25341 advancementManager - f Lnet/minecraft/class_3296; field_25335 resourceManager - f Ljava/util/concurrent/CompletableFuture; field_25334 field_240951_a_ - f Lnet/minecraft/class_3505; field_25338 tagManager - f Lnet/minecraft/class_4567; field_25339 lootPredicateManager - f Lnet/minecraft/class_2170; field_25336 commands - f Lnet/minecraft/class_1863; field_25337 recipeManager - f Lnet/minecraft/class_60; field_25340 lootTableManager -c net/minecraft/class_2995 net/minecraft/scoreboard/ServerScoreboard - m (Lnet/minecraft/class_266;)Ljava/util/List; method_12937 getCreatePackets - m (Lnet/minecraft/class_266;)V method_12939 addObjective - m ()V method_12941 markSaveDataDirty - m (Lnet/minecraft/class_266;)I method_12936 getObjectiveDisplaySlotCount - m (Ljava/lang/Runnable;)V method_12935 addDirtyRunnable - m (Lnet/minecraft/class_266;)V method_12938 sendDisplaySlotRemovalPackets - m (Lnet/minecraft/class_266;)Ljava/util/List; method_12940 getDestroyPackets - f [Ljava/lang/Runnable; field_13426 dirtyRunnables - f Ljava/util/Set; field_13427 addedObjectives - f Lnet/minecraft/server/MinecraftServer; field_13428 server -c net/minecraft/class_2995$class_2996 net/minecraft/scoreboard/ServerScoreboard$Action - m ()[Lnet/minecraft/class_2995$class_2996; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2995$class_2996; valueOf valueOf - f [Lnet/minecraft/class_2995$class_2996; field_13429 $VALUES - f Lnet/minecraft/class_2995$class_2996; field_13431 CHANGE - f Lnet/minecraft/class_2995$class_2996; field_13430 REMOVE -c net/minecraft/class_3738 net/minecraft/util/concurrent/TickDelayedTask - m ()V run run - m ()I method_16338 getScheduledTime - f I field_16504 field_218824_a - f Ljava/lang/Runnable; field_16505 field_218825_b -c net/minecraft/class_3002 net/minecraft/server/CustomServerBossInfo - m ()I method_12960 getMax - m ()Lnet/minecraft/class_2561; method_12965 getFormattedName - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_12958 func_211569_a_ - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3002; method_12966 read - m (Lnet/minecraft/class_3222;)V method_12957 onPlayerLogin - m (I)V method_12954 setValue - m (Lnet/minecraft/class_3222;)V method_12961 onPlayerLogout - m (I)V method_12956 setMax - m ()I method_12955 getValue - m ()Lnet/minecraft/class_2487; method_12963 write - m (Ljava/util/UUID;)V method_12964 addPlayer - m (Ljava/util/Collection;)Z method_12962 setPlayers - m ()Lnet/minecraft/class_2960; method_12959 getId - f I field_13443 value - f Ljava/util/Set; field_13440 players - f Lnet/minecraft/class_2960; field_13441 id - f I field_13442 max -c net/minecraft/class_3004 net/minecraft/server/CustomServerBossInfoManager - m ()Lnet/minecraft/class_2487; method_12974 write - m (Lnet/minecraft/class_3002;)V method_12973 remove - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3002; method_12971 get - m (Lnet/minecraft/class_2487;)V method_12972 read - m ()Ljava/util/Collection; method_12969 getBossbars - m (Lnet/minecraft/class_3222;)V method_12975 onPlayerLogin - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2561;)Lnet/minecraft/class_3002; method_12970 add - m (Lnet/minecraft/class_3222;)V method_12976 onPlayerLogout - m ()Ljava/util/Collection; method_12968 getIDs - f Ljava/util/Map; field_13447 bars -c net/minecraft/class_3008 net/minecraft/command/impl/AdvancementCommand - m (Lnet/minecraft/class_161;Ljava/util/List;)V method_12990 addAllChildren - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12982 func_198200_e - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12983 func_198201_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12989 func_198208_d - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12978 func_198197_b - m (Lnet/minecraft/class_161;Lnet/minecraft/class_3008$class_3010;)Ljava/util/List; method_12996 getMatchingAdvancements - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12995 func_198213_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12997 func_198215_j - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_3008$class_3009;Ljava/util/Collection;)I method_12988 forEachAdvancement - m (Lnet/minecraft/class_2168;)Z method_12984 func_198205_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_12980 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12986 func_198204_i - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12998 func_198217_g - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12993 func_198211_h - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12979 func_198198_f - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_3008$class_3009;Lnet/minecraft/class_161;Ljava/lang/String;)I method_12981 updateCriterion - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_12991 func_198209_b - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_12992 func_198210_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12994 func_198212_k - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_12987 func_198206_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_12985 func_198202_l - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13453 SUGGEST_ADVANCEMENTS -c net/minecraft/class_3008$1 net/minecraft/command/impl/AdvancementCommand$1 -c net/minecraft/class_3008$class_3010 net/minecraft/command/impl/AdvancementCommand$Mode - m (Lnet/minecraft/class_3008$class_3010;)Z method_13003 access$100 - m ()[Lnet/minecraft/class_3008$class_3010; values values - m (Lnet/minecraft/class_3008$class_3010;)Z method_13004 access$000 - m (Ljava/lang/String;)Lnet/minecraft/class_3008$class_3010; valueOf valueOf - f Z field_13459 includesChildren - f Lnet/minecraft/class_3008$class_3010; field_13458 FROM - f Z field_13460 includesParents - f Lnet/minecraft/class_3008$class_3010; field_13462 THROUGH - f Lnet/minecraft/class_3008$class_3010; field_13465 UNTIL - f [Lnet/minecraft/class_3008$class_3010; field_13463 $VALUES - f Lnet/minecraft/class_3008$class_3010; field_13461 EVERYTHING - f Lnet/minecraft/class_3008$class_3010; field_13464 ONLY -c net/minecraft/class_3008$class_3009 net/minecraft/command/impl/AdvancementCommand$Action - m (Ljava/lang/String;)Lnet/minecraft/class_3008$class_3009; valueOf valueOf - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_161;Ljava/lang/String;)Z method_13000 applyToCriterion - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_161;)Z method_13002 applyToAdvancement - m (Lnet/minecraft/class_3222;Ljava/lang/Iterable;)I method_12999 applyToAdvancements - m ()Ljava/lang/String; method_13001 getPrefix - m ()[Lnet/minecraft/class_3008$class_3009; values values - f Ljava/lang/String; field_13454 prefix - f [Lnet/minecraft/class_3008$class_3009; field_13455 $VALUES - f Lnet/minecraft/class_3008$class_3009; field_13457 GRANT - f Lnet/minecraft/class_3008$class_3009; field_13456 REVOKE -c net/minecraft/class_3008$class_3009$2 net/minecraft/command/impl/AdvancementCommand$Action$2 -c net/minecraft/class_3008$class_3009$1 net/minecraft/command/impl/AdvancementCommand$Action$1 -c net/minecraft/class_5252 net/minecraft/command/impl/AttributeCommand - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;Ljava/util/UUID;D)I method_27741 func_241009_a_ - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_27734 func_241002_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27747 func_241015_b_ - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_27743 func_241011_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27736 func_241004_a_ - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_1309; method_27733 func_241001_a_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;Ljava/util/UUID;Ljava/lang/String;DLnet/minecraft/class_1322$class_1323;)I method_27742 func_241010_a_ - m (Lnet/minecraft/class_2168;)Z method_27738 func_241006_a_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;D)I method_27748 func_241016_b_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;Ljava/util/UUID;)I method_27740 func_241008_a_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;D)I method_27739 func_241007_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27755 func_241023_g_ - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_27744 func_241012_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27754 func_241022_f_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;D)I method_27751 func_241019_c_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27752 func_241020_d_ - m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_27749 func_241017_b_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27753 func_241021_e_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27750 func_241018_c_ - m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_27745 func_241013_a_ - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_27735 register - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1320;)Lnet/minecraft/class_1309; method_27746 func_241014_b_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27759 func_241027_k_ - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_27737 func_241005_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27758 func_241026_j_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27756 func_241024_h_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_27757 func_241025_i_ - f Lcom/mojang/brigadier/exceptions/Dynamic3CommandExceptionType; field_24378 field_240999_d_ - f Lcom/mojang/brigadier/exceptions/Dynamic3CommandExceptionType; field_24379 field_241000_e_ - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_24375 field_240996_a_ - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_24377 field_240998_c_ - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_24376 field_240997_b_ -c net/minecraft/class_3012 net/minecraft/command/impl/BanIpCommand - m (Lnet/minecraft/class_2168;)Z method_13011 func_198222_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13008 register - m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_2561;)I method_13009 banUsernameOrIp - m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_2561;)I method_13007 banIpAddress - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13010 func_198221_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13006 func_198219_b - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13468 IP_INVALID - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13467 FAILED_EXCEPTION - f Ljava/util/regex/Pattern; field_13466 IP_PATTERN -c net/minecraft/class_3014 net/minecraft/command/impl/BanListCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13017 func_198232_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13015 sendBanList - m (Lnet/minecraft/class_2168;)Z method_13018 func_198233_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13013 func_198228_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13016 func_198231_c - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13014 register -c net/minecraft/class_3016 net/minecraft/command/impl/BanCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13020 func_198234_b - m (Lnet/minecraft/class_2168;)Z method_13024 func_198238_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13021 register - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2561;)I method_13022 banGameProfiles - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13023 func_198237_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13473 FAILED_EXCEPTION -c net/minecraft/class_3019 net/minecraft/command/impl/BossBarCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13057 func_201418_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13064 func_201426_x - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13033 func_201392_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13038 func_201396_v - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;Ljava/util/Collection;)I method_13031 setPlayers - m (Lnet/minecraft/class_2168;)I method_13045 listBars - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13043 func_201403_i - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;)I method_13030 getPlayers - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13037 func_201395_g - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13072 func_201430_e - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;I)I method_13066 setMax - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;)I method_13056 getMax - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13032 func_201391_o - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;)I method_13065 getValue - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13040 func_201399_m - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13063 func_208783_b - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;Z)I method_13068 setVisibility - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13052 func_201412_k - m (Lnet/minecraft/class_2168;)Z method_13035 func_201423_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13061 func_201422_s - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13062 func_201424_q - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;Lnet/minecraft/class_1259$class_1260;)I method_13028 setColor - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13051 func_201411_d - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13039 func_201398_b - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13044 func_201404_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13070 func_201429_w - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13042 func_201401_u - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13029 func_201388_b - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13053 register - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;I)I method_13036 setValue - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;)I method_13069 removeBossbar - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13047 func_201408_h - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13067 func_201427_f - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;)I method_13041 getVisibility - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;Lnet/minecraft/class_1259$class_1261;)I method_13050 setStyle - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2960;Lnet/minecraft/class_2561;)I method_13049 createBossbar - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13046 func_201406_n - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;Lnet/minecraft/class_2561;)I method_13071 setName - m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_3002; method_13054 getBossbar - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13058 func_201419_l - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13060 func_201421_j - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13048 func_201409_t - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13055 func_201417_r - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13059 func_208782_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13034 func_201393_p - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13481 ALREADY_STYLE_OF_BOSSBAR - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13484 ALREADY_MAX_OF_BOSSBAR - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13485 BOSSBAR_ALREADY_VISIBLE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13476 ALREADY_NAME_OF_BOSSBAR - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13486 NO_BOSSBAR_WITH_ID - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13482 SUGGESTIONS_PROVIDER - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13477 ALREADY_VALUE_OF_BOSSBAR - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13479 BOSSBAR_ALREADY_HIDDEN - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13483 PLAYERS_ALREADY_ON_BOSSBAR - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13478 BOSS_BAR_ID_TAKEN - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13480 ALREADY_COLOR_OF_BOSSBAR -c net/minecraft/class_3020 net/minecraft/command/impl/ClearCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13078 func_198245_a - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13075 func_208785_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13080 func_198246_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13073 func_198240_b - m (Lnet/minecraft/class_2168;)Z method_13082 func_198247_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13076 register - m (Lnet/minecraft/class_1799;)Z method_13081 func_198242_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Ljava/util/function/Predicate;I)I method_13077 clearInventory - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13074 func_198241_c - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13079 func_208787_a - m (Lnet/minecraft/class_1799;)Z method_13083 func_198248_a - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13488 MULTIPLE_FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13487 SINGLE_FAILED_EXCEPTION -c net/minecraft/class_3023 net/minecraft/command/impl/CloneCommand - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/util/function/Predicate;Lnet/minecraft/class_3023$class_3025;)I method_13090 doClone - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13091 func_198266_d - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13100 func_198273_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13086 func_198261_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13093 func_198267_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13105 func_198278_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13106 func_198280_j - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13104 func_198277_k - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13089 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13097 func_198270_h - m (Lnet/minecraft/class_2694;)Z method_13108 func_198281_b - m (Lnet/minecraft/class_2694;)Z method_13092 func_198279_a - m (Lnet/minecraft/class_2694;)Z method_13101 func_198262_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13103 func_198276_g - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13087 func_198263_e - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13107 func_198282_f - m (Lnet/minecraft/class_2168;)Z method_13094 func_198271_a - m (Lnet/minecraft/class_2694;)Z method_13102 func_198272_d - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13099 func_208796_a - m (Lnet/minecraft/class_2694;)Z method_13096 func_198275_f - m (Lnet/minecraft/class_2694;)Z method_13098 func_198269_e - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13088 func_198264_m - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13095 func_198268_l - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13493 OVERLAP_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13492 FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13491 CLONE_TOO_BIG_EXCEPTION - f Ljava/util/function/Predicate; field_13490 NOT_AIR -c net/minecraft/class_3023$class_3025 net/minecraft/command/impl/CloneCommand$Mode - m (Ljava/lang/String;)Lnet/minecraft/class_3023$class_3025; valueOf valueOf - m ()Z method_13109 allowsOverlap - m ()[Lnet/minecraft/class_3023$class_3025; values values - f [Lnet/minecraft/class_3023$class_3025; field_13501 $VALUES - f Lnet/minecraft/class_3023$class_3025; field_13497 FORCE - f Lnet/minecraft/class_3023$class_3025; field_13499 NORMAL - f Z field_13498 allowOverlap - f Lnet/minecraft/class_3023$class_3025; field_13500 MOVE -c net/minecraft/class_3023$class_3024 net/minecraft/command/impl/CloneCommand$BlockInfo - f Lnet/minecraft/class_2338; field_13496 pos - f Lnet/minecraft/class_2487; field_13494 tag - f Lnet/minecraft/class_2680; field_13495 state -c net/minecraft/class_3027 net/minecraft/command/impl/DataPackCommand - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3288;Lnet/minecraft/class_3027$class_3028;)I method_13114 enablePack - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3288;)V method_13133 func_198308_b_ - m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_2561; method_13132 func_198293_b - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3288;)V method_13112 func_198302_a_ - m (Lnet/minecraft/class_2168;)Z method_13119 func_198301_d_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13111 func_198288_a - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13135 func_208818_b - m (Ljava/util/Collection;Lnet/minecraft/class_3288;)Z method_29477 func_241032_a_ - m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_3288; method_13113 func_198304_c_ - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13131 func_208815_a - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13117 func_208808_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13138 func_198309_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13141 func_198311_d - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13137 func_198307_h_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13123 func_198298_f_ - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13125 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13130 func_198300_a - m (Ljava/util/List;Lnet/minecraft/class_3288;)V method_13122 func_198289_b_ - m (Lnet/minecraft/class_2168;)I method_13128 listAvailablePacks - m (Lnet/minecraft/class_2168;)I method_13126 listEnabledPacks - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13115 func_198290_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13118 func_198295_c - m (Ljava/util/List;Lnet/minecraft/class_3288;)V method_13139 func_241034_a_ - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13120 func_241030_a_ - m (Lnet/minecraft/class_2168;)I method_13121 listAllPacks - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13136 func_198305_b - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3288;)I method_13140 disablePack - m (Lnet/minecraft/class_3288;)Lnet/minecraft/class_2561; method_13134 func_198306_a - m (Ljava/util/Collection;Ljava/lang/String;)Z method_29776 func_241033_a_ - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;Z)Lnet/minecraft/class_3288; method_13127 parsePackInfo - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13116 func_198292_i_ - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13506 SUGGEST_ENABLED_PACK - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13503 UNKNOWN_DATA_PACK_EXCEPTION - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13505 DISABLE_FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13504 ENABLE_FAILED_EXCEPTION - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13502 field_241028_e_ -c net/minecraft/class_3027$class_3028 net/minecraft/command/impl/DataPackCommand$IHandler - m (Ljava/util/List;Lnet/minecraft/class_3288;)V apply apply -c net/minecraft/class_3030 net/minecraft/command/impl/DeOpCommand - m (Lnet/minecraft/class_2168;)Z method_13147 func_198325_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13144 deopPlayers - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13143 register - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13145 func_198323_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13146 func_198324_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13507 FAILED_EXCEPTION -c net/minecraft/class_3032 net/minecraft/command/impl/DebugCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_21617 func_225388_a - m (Lnet/minecraft/class_2168;)Z method_13157 func_198332_d - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13161 func_198333_b - m (Lnet/minecraft/class_2168;)I method_13159 startDebug - m (Lnet/minecraft/class_2168;)I method_13158 stopDebug - m (Lnet/minecraft/class_2168;)I method_21618 writeDebugReport - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13154 func_198329_a - m (Ljava/nio/file/spi/FileSystemProvider;)Z method_21675 func_225386_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13156 register - f Ljava/nio/file/spi/FileSystemProvider; field_20310 JAR_FILESYSTEM_PROVIDER - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13596 ALREADY_RUNNING_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13597 NOT_RUNNING_EXCEPTION - f Lorg/apache/logging/log4j/Logger; field_20283 LOGGER -c net/minecraft/class_3035 net/minecraft/command/impl/DefaultGameModeCommand - m (Lnet/minecraft/class_2168;)Z method_13168 func_198342_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13166 register - m (Lnet/minecraft/class_1934;Lcom/mojang/brigadier/context/CommandContext;)I method_13165 func_198343_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1934;)I method_13167 setGameType -c net/minecraft/class_3036 net/minecraft/command/impl/DifficultyCommand - m (Lnet/minecraft/class_1267;Lcom/mojang/brigadier/context/CommandContext;)I method_13174 func_198347_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1267;)I method_13173 setDifficulty - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13169 register - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13170 func_208823_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13171 func_198346_a - m (Lnet/minecraft/class_2168;)Z method_13172 func_198348_a - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13602 FAILED_EXCEPTION -c net/minecraft/class_3043 net/minecraft/command/impl/EffectCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_23650 func_198352_f - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13228 func_198356_e - m (Lnet/minecraft/class_2168;)Z method_13235 func_198359_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13229 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13232 func_198351_d - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13226 func_198357_c - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_1291;Ljava/lang/Integer;IZ)I method_13227 addEffect - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13233 func_198350_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13225 func_198358_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13234 func_229759_a_ - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_1291;)I method_13231 clearEffect - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13230 clearAllEffects - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13609 CLEAR_EVERYTHING_FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13608 CLEAR_SPECIFIC_FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13607 GIVE_FAILED_EXCEPTION -c net/minecraft/class_3045 net/minecraft/command/impl/MeCommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13237 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13238 func_198365_a -c net/minecraft/class_3048 net/minecraft/command/impl/EnchantCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13240 func_202648_b - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13244 func_208837_a - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13247 func_208839_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13245 func_202650_a - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13242 func_208835_b - m (Lnet/minecraft/class_2168;)Z method_13246 func_203630_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_1887;I)I method_13241 enchant - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13248 func_208840_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13243 register - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13630 FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13633 INCOMPATIBLE_ENCHANTS_EXCEPTION - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13632 INVALID_LEVEL - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13629 NONLIVING_ENTITY_EXCEPTION - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13631 ITEMLESS_EXCEPTION -c net/minecraft/class_3050 net/minecraft/command/impl/ExecuteCommand - m (Lnet/minecraft/class_2168;)Z method_13254 func_229766_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13286 func_229804_j_ - m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13262 func_229787_c_ - m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13291 func_229805_n_ - m (Lnet/minecraft/class_3162;ZLnet/minecraft/class_2203$class_2209;Ljava/util/function/IntFunction;Lcom/mojang/brigadier/context/CommandContext;ZI)V method_13294 func_229772_a_ - m (ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13285 func_229795_d_ - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13316 func_208885_a - m (Lcom/mojang/brigadier/context/CommandContext;)Z method_22830 func_229761_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13252 func_201091_a - m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13292 func_198384_w - m (Ljava/lang/Integer;Ljava/lang/Integer;)Z method_13257 func_229793_d_ - m (ZZLnet/minecraft/class_3002;Lcom/mojang/brigadier/context/CommandContext;ZI)V method_13277 func_229779_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13274 func_210438_g - m (Ljava/lang/Integer;Ljava/lang/Integer;)Z method_13250 func_229782_b_ - m (Lnet/minecraft/class_3162;Lnet/minecraft/class_2203$class_2209;)I method_13303 func_218831_a - m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13317 func_229773_a_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_5341;)Z method_22829 func_229767_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13282 func_229802_g_ - m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13275 func_229762_a_ - m (Lnet/minecraft/class_3050$class_3051;Lcom/mojang/brigadier/context/CommandContext;)I method_13296 func_229771_a_ - m (ZLcom/mojang/brigadier/context/CommandContext;)I method_13273 func_229775_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13249 func_229796_e_ - m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13276 func_229788_c_ - m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13309 func_229774_a_ - m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13283 func_229797_e_ - m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13264 func_229790_c_ - m (Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/builder/ArgumentBuilder;ZLnet/minecraft/class_3050$class_3052;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13310 buildIfResult - m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13268 func_198381_a - m (Lcom/mojang/brigadier/context/CommandContext;Z)I method_13304 checkBlockCountUnless - m (ZLcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13300 func_229791_c_ - m (ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13322 func_201457_v - m (Ljava/util/function/IntFunction;I)Lnet/minecraft/class_2520; method_17205 func_229770_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13321 func_229780_b_ - m (Lcom/mojang/brigadier/tree/CommandNode;ZLnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13258 func_229764_a_ - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/function/BiPredicate;)Z method_13263 compareScores - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Z)Ljava/util/OptionalInt; method_13261 countMatchingBlocks - m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13256 func_229798_e_ - m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13266 func_201088_b - m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13293 func_201083_r - m (Lnet/minecraft/class_2168;)Z method_13255 func_198387_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13271 register - m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13259 func_201089_b - m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13281 func_229807_q_ - m (Ljava/lang/Integer;Ljava/lang/Integer;)Z method_13302 func_229768_a_ - m (Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;Z)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13298 makeIfCommand - m (Lcom/mojang/brigadier/tree/LiteralCommandNode;Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13253 func_229765_a_ - m (ZLnet/minecraft/class_3050$class_3051;)Lcom/mojang/brigadier/Command; method_13323 func_218834_a - m (Lcom/mojang/brigadier/tree/CommandNode;Lcom/mojang/brigadier/builder/ArgumentBuilder;ZZ)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13320 buildIfBlocks - m (Lcom/mojang/brigadier/ResultConsumer;Lcom/mojang/brigadier/ResultConsumer;Lcom/mojang/brigadier/context/CommandContext;ZI)V method_13279 func_209939_a - m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13280 func_229803_h_ - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;Z)Lnet/minecraft/class_2168; method_13290 storeIntoScore - m (Ljava/lang/Integer;Ljava/lang/Integer;)Z method_13299 func_229789_c_ - m (Lnet/minecraft/class_3050$class_3051;Lcom/mojang/brigadier/context/CommandContext;)I method_13305 func_229783_b_ - m (Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13295 func_229809_s_ - m (ZLnet/minecraft/class_3050$class_3052;Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13267 func_229786_b_ - m (Lcom/mojang/brigadier/context/CommandContext;Z)Ljava/util/OptionalInt; method_13272 countMatchingBlocks - m (Lcom/mojang/brigadier/context/CommandContext;)Z method_13288 func_229799_f_ - m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13307 func_229781_b_ - m (ZLnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13301 func_229777_a_ - m (ZLcom/mojang/brigadier/context/CommandContext;)I method_13315 func_229785_b_ - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_22831 func_229763_a_ - m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13318 func_229792_d_ - m (ZLnet/minecraft/class_3050$class_3052;Lcom/mojang/brigadier/context/CommandContext;)I method_13270 func_229776_a_ - m (ZZLcom/mojang/brigadier/context/CommandContext;)Ljava/util/Collection; method_13287 func_229778_a_ - m (Lcom/mojang/brigadier/context/CommandContext;I)Lnet/minecraft/class_2520; method_13324 func_229800_f_ - m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13311 func_229784_b_ - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2096$class_2100;)Z method_13313 checkScore - m (Lcom/mojang/brigadier/context/CommandContext;Z)I method_13306 checkBlockCountIf - m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13284 func_229801_f_ - m (Lcom/mojang/brigadier/ResultConsumer;Lcom/mojang/brigadier/ResultConsumer;)Lcom/mojang/brigadier/ResultConsumer; method_13278 func_209937_a - m (ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13269 func_201468_e - m (Lnet/minecraft/class_3164$class_3167;ZLcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13251 func_229794_d_ - m (Lcom/mojang/brigadier/context/CommandContext;ZZ)Ljava/util/Collection; method_13319 checkIfMatches - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13312 func_210446_a - m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13308 func_229806_p_ - m (Ljava/util/Collection;Lnet/minecraft/class_269;Lnet/minecraft/class_266;ZLcom/mojang/brigadier/context/CommandContext;ZI)V method_13260 func_229769_a_ - m (Lcom/mojang/brigadier/tree/LiteralCommandNode;Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;Z)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13289 makeStoreSubcommand - m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_2168; method_13314 func_229808_r_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3002;ZZ)Lnet/minecraft/class_2168; method_13297 storeIntoBossbar - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;Lnet/minecraft/class_2203$class_2209;Ljava/util/function/IntFunction;Z)Lnet/minecraft/class_2168; method_13265 storeIntoNBT - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13637 TEST_FAILED_COUNT - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13636 TEST_FAILED - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_20852 field_229760_e_ - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13635 TOO_MANY_BLOCKS - f Ljava/util/function/BinaryOperator; field_13634 COMBINE_ON_RESULT_COMPLETE -c net/minecraft/class_3050$class_3052 net/minecraft/command/impl/ExecuteCommand$IBooleanTest - m (Lcom/mojang/brigadier/context/CommandContext;)Z test test -c net/minecraft/class_3050$class_3051 net/minecraft/command/impl/ExecuteCommand$INumericTest - m (Lcom/mojang/brigadier/context/CommandContext;)I test test -c net/minecraft/class_3054 net/minecraft/command/impl/ExperienceCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13339 func_198447_g - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13329 func_198436_f - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3222;Lnet/minecraft/class_3054$class_3055;)I method_13328 queryExperience - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13331 func_198439_e - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13336 func_198444_d - m (Lnet/minecraft/class_2168;Ljava/util/Collection;ILnet/minecraft/class_3054$class_3055;)I method_13326 addExperience - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13330 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13332 func_198440_c - m (Lnet/minecraft/class_2168;Ljava/util/Collection;ILnet/minecraft/class_3054$class_3055;)I method_13333 setExperience - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13327 func_198435_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13338 func_198446_a - m (Lnet/minecraft/class_2168;)Z method_13334 func_198441_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13337 func_198445_h - m (Lnet/minecraft/class_2168;)Z method_13335 func_198442_b - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13638 SET_POINTS_INVALID_EXCEPTION -c net/minecraft/class_3054$class_3055 net/minecraft/command/impl/ExperienceCommand$Type - m (Lnet/minecraft/class_3054$class_3055;)Ljava/util/function/ToIntFunction; method_13344 access$000 - m (Lnet/minecraft/class_3222;Ljava/lang/Integer;)Z method_13342 func_198425_a - m ()[Lnet/minecraft/class_3054$class_3055; values values - m (Lnet/minecraft/class_3222;Ljava/lang/Integer;)Z method_13343 func_198424_b - m (Ljava/lang/String;)Lnet/minecraft/class_3054$class_3055; valueOf valueOf - m (Lnet/minecraft/class_3222;)I method_13340 func_198427_a - m (Lnet/minecraft/class_3222;)I method_13341 func_198422_b - f Ljava/util/function/BiConsumer; field_13639 xpAdder - f Ljava/util/function/ToIntFunction; field_13645 xpGetter - f Lnet/minecraft/class_3054$class_3055; field_13644 POINTS - f Ljava/lang/String; field_13643 name - f Ljava/util/function/BiPredicate; field_13642 xpSetter - f [Lnet/minecraft/class_3054$class_3055; field_13640 $VALUES - f Lnet/minecraft/class_3054$class_3055; field_13641 LEVELS -c net/minecraft/class_3057 net/minecraft/command/impl/FillCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13353 func_198462_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13350 func_198467_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13345 func_198461_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13355 func_198468_a - m (Lnet/minecraft/class_2168;)Z method_13351 func_198471_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13347 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13356 func_198472_f - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3341;Lnet/minecraft/class_2247;Lnet/minecraft/class_3057$class_3058;Ljava/util/function/Predicate;)I method_13354 doFill - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13352 func_208897_a - m (Lnet/minecraft/class_2694;)Z method_13348 func_198469_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13346 func_198464_e - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13349 func_198466_e - m ()Lnet/minecraft/class_2247; method_13357 access$000 - f Lnet/minecraft/class_2247; field_13648 AIR - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13650 FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13649 TOO_BIG_EXCEPTION -c net/minecraft/class_3057$class_3058 net/minecraft/command/impl/FillCommand$Mode - m (Ljava/lang/String;)Lnet/minecraft/class_3057$class_3058; valueOf valueOf - m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3218;)Lnet/minecraft/class_2247; method_13360 func_198452_a - m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3218;)Lnet/minecraft/class_2247; method_13361 func_198453_b - m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3218;)Lnet/minecraft/class_2247; method_13358 func_198450_d - m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3218;)Lnet/minecraft/class_2247; method_13359 func_198454_c - m ()[Lnet/minecraft/class_3057$class_3058; values values - f Lnet/minecraft/class_3057$class_3058; field_13655 REPLACE - f [Lnet/minecraft/class_3057$class_3058; field_13653 $VALUES - f Lnet/minecraft/class_3057$class_3058; field_13652 OUTLINE - f Lnet/minecraft/class_3057$class_3058; field_13656 HOLLOW - f Lnet/minecraft/class_3119$class_3120; field_13654 filter - f Lnet/minecraft/class_3057$class_3058; field_13651 DESTROY -c net/minecraft/class_3060 net/minecraft/command/impl/ForceLoadCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13378 func_212711_g - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2265;)I method_13374 doQuery - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13364 func_212714_f - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13367 func_218850_e - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2265;Lnet/minecraft/class_2265;Z)I method_13372 doAddOrRemove - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13370 func_212718_d - m (Lnet/minecraft/class_2168;)I method_13373 doList - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13368 func_212715_c - m (Lnet/minecraft/class_2168;)I method_13366 removeAll - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13365 register - m (Lnet/minecraft/class_3218;J)V method_13377 func_212720_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13363 func_212710_b - m (Lnet/minecraft/class_2168;)Z method_13371 func_212716_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13375 func_212723_a - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13369 func_212717_a - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13376 func_212724_b - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13659 QUERY_FAILURE_EXCEPTION - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13657 TOO_BIG_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13660 REMOVE_FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13658 FAILED_ADD_EXCEPTION -c net/minecraft/class_3062 net/minecraft/command/impl/FunctionCommand - m (Lnet/minecraft/class_2168;)Z method_13384 func_198480_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13381 executeFunctions - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13380 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13383 func_198479_a - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13382 func_198477_a - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13662 FUNCTION_SUGGESTER -c net/minecraft/class_3064 net/minecraft/command/impl/GameModeCommand - m (Lnet/minecraft/class_1934;Lcom/mojang/brigadier/context/CommandContext;)I method_13386 func_198486_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/Collection;Lnet/minecraft/class_1934;)I method_13387 setGameMode - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13388 register - m (Lnet/minecraft/class_1934;Lcom/mojang/brigadier/context/CommandContext;)I method_13391 func_198483_b - m (Lnet/minecraft/class_2168;)Z method_13389 func_198485_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3222;Lnet/minecraft/class_1934;)V method_13390 sendGameModeFeedback -c net/minecraft/class_3065 net/minecraft/command/impl/GameRuleCommand - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_1928$class_4313;)I method_13394 func_223485_b - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_1928$class_4313;)I method_13396 func_223488_a - m (Lnet/minecraft/class_2168;)Z method_13393 func_198491_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1928$class_4313;)I method_13397 func_223486_b - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13392 register - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1928$class_4313;)I method_13395 func_223487_a -c net/minecraft/class_3065$1 net/minecraft/command/impl/GameRuleCommand$1 - m (Lnet/minecraft/class_1928$class_4313;Lcom/mojang/brigadier/context/CommandContext;)I method_20797 func_223482_a - m (Lnet/minecraft/class_1928$class_4313;Lcom/mojang/brigadier/context/CommandContext;)I method_20798 func_223483_b - f Lcom/mojang/brigadier/builder/LiteralArgumentBuilder; field_19419 field_223484_a -c net/minecraft/class_3068 net/minecraft/command/impl/GiveCommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13402 register - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2290;Ljava/util/Collection;I)I method_13401 giveItem - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13400 func_198493_b - m (Lnet/minecraft/class_2168;)Z method_13404 func_198496_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13403 func_198495_a -c net/minecraft/class_3069 net/minecraft/command/impl/HelpCommand - m (Lcom/mojang/brigadier/CommandDispatcher;Lcom/mojang/brigadier/context/CommandContext;)I method_13406 func_198511_b - m (Lcom/mojang/brigadier/CommandDispatcher;Lcom/mojang/brigadier/context/CommandContext;)I method_13407 func_198512_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13405 register - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13665 FAILED_EXCEPTION -c net/minecraft/class_3073 net/minecraft/command/impl/KickCommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13410 register - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2561;)I method_13411 kickPlayers - m (Lnet/minecraft/class_2168;)Z method_13413 func_198517_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13409 func_198513_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13412 func_198516_a -c net/minecraft/class_3075 net/minecraft/command/impl/KillCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22832 func_198520_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13431 func_229810_a_ - m (Lnet/minecraft/class_2168;)Z method_13432 func_198521_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13430 killEntities - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13429 register -c net/minecraft/util/CubicSampler net/minecraft/util/CubicSampler - m (Lnet/minecraft/class_243;Lnet/minecraft/util/CubicSampler$class_4859;)Lnet/minecraft/class_243; method_24895 func_240807_a_ - f [D field_22449 field_240806_a_ -c net/minecraft/util/CubicSampler$class_4859 net/minecraft/util/CubicSampler$Vec3Fetcher - m (III)Lnet/minecraft/class_243; fetch fetch -c net/minecraft/class_3078 net/minecraft/command/impl/ListCommand - m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_2561; method_30310 func_244373_a - m (Lnet/minecraft/class_2168;)I method_13437 listNames - m (Lnet/minecraft/class_2168;)I method_13436 listUUIDs - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13435 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13433 func_198523_a - m (Lnet/minecraft/class_2168;Ljava/util/function/Function;)I method_13434 listPlayers - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13438 func_208202_a -c net/minecraft/class_4799 net/minecraft/command/impl/LocateBiomeCommand - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2960;)I method_24495 func_241049_a_ - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_24498 func_241052_b_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_24492 func_241047_a_ - m (Lnet/minecraft/class_2960;)Lcom/mojang/brigadier/exceptions/CommandSyntaxException; method_24497 func_241051_a_ - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_24496 func_241050_a_ - m (Lnet/minecraft/class_2168;)Z method_24494 func_241048_a_ - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_24491 register - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_22252 field_241044_a_ - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_22253 field_241045_b_ -c net/minecraft/class_3079 net/minecraft/command/impl/LocateCommand - m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;Ljava/lang/String;)I method_24499 func_241054_a_ - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13443 register - m (Ljava/util/Map$Entry;Lcom/mojang/brigadier/context/CommandContext;)I method_29192 func_241056_a_ - m (Lnet/minecraft/class_2168;)Z method_13448 func_198533_a - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_13447 func_241055_a_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3195;)I method_13457 func_241053_a_ - m (IIII)F method_13439 getDistance - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13666 FAILED_EXCEPTION -c net/minecraft/class_3039 net/minecraft/command/impl/LootCommand - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1263; method_13207 func_218862_a - m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13204 func_218878_c - m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13198 func_218891_e - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13195 func_218896_b - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_1297;Lnet/minecraft/class_3039$class_3041;)I method_13189 func_218869_a - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;)Z method_13223 func_218890_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_243;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13183 func_218881_a - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;Lnet/minecraft/class_3039$class_3041;)I method_13219 func_218879_a - m (Ljava/util/Collection;IILjava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13187 func_218865_a - m (Lnet/minecraft/class_2168;Ljava/util/List;)V method_13184 func_218902_b - m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13215 func_218888_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13202 func_218864_e - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13196 func_218900_a - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;Lnet/minecraft/class_3039$class_3041;)I method_13197 func_218887_a - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13210 func_218873_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13182 func_218866_g - m (Ljava/util/Collection;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13201 func_218859_a - m (Lnet/minecraft/class_2168;Ljava/util/List;Lnet/minecraft/class_2960;)V method_13212 func_218860_a - m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13216 func_218892_h - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13220 func_218877_a - m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13208 func_218899_j - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13214 func_218885_c - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1304;)Lnet/minecraft/class_1799; method_13178 func_218872_a - m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13222 func_218895_b - m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13211 func_218897_d - m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13177 func_218861_f - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2960;Ljava/util/List;)V method_13185 func_218863_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;IILjava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13209 func_218894_a - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13217 func_218889_a - m (Lnet/minecraft/class_2168;Ljava/util/List;)V method_13213 func_218875_a - m (Lcom/mojang/brigadier/builder/ArgumentBuilder;Lnet/minecraft/class_3039$class_3042;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13206 func_218868_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2680;Ljava/util/List;)V method_13224 func_218893_a - m (Lnet/minecraft/class_2168;)Z method_13181 func_218903_a - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13221 func_218884_f - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_13218 func_218883_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_243;Lnet/minecraft/class_1799;)V method_13179 func_218882_a - m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13188 func_218898_g - m (Lcom/mojang/brigadier/builder/ArgumentBuilder;Lnet/minecraft/class_3039$class_3041;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13203 func_218880_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13193 register - m (Lnet/minecraft/class_1297;Ljava/util/List;IILjava/util/List;)V method_16139 func_218901_a - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;Lnet/minecraft/class_47;Lnet/minecraft/class_3039$class_3041;)I method_13180 func_218871_a - m (Lnet/minecraft/class_3039$class_3041;Lcom/mojang/brigadier/context/CommandContext;)I method_13205 func_218874_i - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_16339 func_218870_d - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I method_13191 func_218867_b - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2960;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;Lnet/minecraft/class_3039$class_3041;)I method_13199 func_218876_a - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13606 field_218906_c - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_13605 field_218904_a - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13604 field_218905_b -c net/minecraft/class_3039$class_3040 net/minecraft/command/impl/LootCommand$ISuccessListener - m (Ljava/util/List;)V accept accept -c net/minecraft/class_3039$class_3041 net/minecraft/command/impl/LootCommand$ITargetHandler - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/util/List;Lnet/minecraft/class_3039$class_3040;)I accept accept -c net/minecraft/class_3039$class_3042 net/minecraft/command/impl/LootCommand$ISourceArgumentBuilder - m (Lcom/mojang/brigadier/builder/ArgumentBuilder;Lnet/minecraft/class_3039$class_3041;)Lcom/mojang/brigadier/builder/ArgumentBuilder; construct construct -c net/minecraft/class_3082 net/minecraft/command/impl/MessageCommand - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_31165 func_244375_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13463 func_198539_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13461 register - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)V method_31164 func_244374_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2561;)I method_13462 sendPrivateMessage -c net/minecraft/class_3083 net/minecraft/command/impl/OpCommand - m (Lnet/minecraft/class_3324;Lnet/minecraft/class_3222;)Z method_13466 func_198540_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13465 opPlayers - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13464 register - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13467 func_198543_a - m (Lnet/minecraft/class_2168;)Z method_13470 func_198545_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13468 func_198544_a - m (Lnet/minecraft/class_3222;)Ljava/lang/String; method_13469 func_200545_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13667 ALREADY_OP -c net/minecraft/class_3086 net/minecraft/command/impl/PardonCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13475 func_198550_a - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13474 func_198549_a - m (Lnet/minecraft/class_2168;)Z method_13476 func_198551_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13473 unbanPlayers - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13472 register - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13669 FAILED_EXCEPTION -c net/minecraft/class_3088 net/minecraft/command/impl/PardonIpCommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13478 register - m (Lnet/minecraft/class_2168;)Z method_13481 func_198556_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13480 func_198555_a - m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_13482 unbanIp - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13479 func_198554_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13672 FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13671 IP_INVALID_EXCEPTION -c net/minecraft/class_3089 net/minecraft/command/impl/ParticleCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13488 func_198566_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13484 func_198561_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13487 func_198565_d - m (Lnet/minecraft/class_2168;)Z method_13490 func_198568_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13486 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13485 func_201226_e - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13489 func_198567_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13492 func_198562_f - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2394;Lnet/minecraft/class_243;Lnet/minecraft/class_243;FIZLjava/util/Collection;)I method_13491 spawnParticle - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13483 func_198560_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13673 FAILED_EXCEPTION -c net/minecraft/class_3091 net/minecraft/command/impl/PlaySoundCommand - m (Lnet/minecraft/class_2168;)Z method_13502 func_198576_a - m (Lnet/minecraft/class_3419;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder; method_13497 buildCategorySubcommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13500 register - m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13499 func_198575_e - m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13503 func_198570_a - m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13498 func_198571_c - m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13505 func_198574_b - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2960;Lnet/minecraft/class_3419;Lnet/minecraft/class_243;FFF)I method_13504 playSound - m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13501 func_198578_d - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13678 FAILED_EXCEPTION -c net/minecraft/class_3093 net/minecraft/command/impl/PublishCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13508 func_198580_a - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13511 func_208900_a - m (Lnet/minecraft/class_2168;I)I method_13509 publish - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13510 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13512 func_198582_a - m (Lnet/minecraft/class_2168;)Z method_13513 func_198583_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13680 FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13679 ALREADY_PUBLISHED_EXCEPTION -c net/minecraft/class_3095 net/minecraft/command/impl/RecipeCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13521 func_198592_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Ljava/util/Collection;)I method_13518 takeRecipes - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13515 func_198587_b - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13517 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13519 func_198591_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13516 func_198588_d - m (Lnet/minecraft/class_2168;)Z method_13522 func_198593_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Ljava/util/Collection;)I method_13520 giveRecipes - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13682 TAKE_FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13681 GIVE_FAILED_EXCEPTION -c net/minecraft/class_3097 net/minecraft/command/impl/ReloadCommand - m (Lnet/minecraft/class_2168;Ljava/lang/Throwable;)Ljava/lang/Void; method_29479 func_241061_a_ - m (Lnet/minecraft/class_2168;)Z method_13531 func_198599_a_ - m (Ljava/util/Collection;Lnet/minecraft/class_2168;)V method_29480 func_241062_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13530 func_198598_a_ - m (Lnet/minecraft/class_3283;Lnet/minecraft/class_5219;Ljava/util/Collection;)Ljava/util/Collection; method_29478 func_241058_a_ - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13529 register - f Lorg/apache/logging/log4j/Logger; field_25343 field_241057_a_ -c net/minecraft/class_3102 net/minecraft/command/impl/ReplaceItemCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13544 func_198606_a - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13546 func_211411_a - m (Lnet/minecraft/class_2168;)Z method_13545 func_198607_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13538 func_198600_b - m (Lnet/minecraft/class_2168;Ljava/util/Collection;ILnet/minecraft/class_1799;)I method_13537 replaceItemEntities - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13541 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13542 func_198605_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;ILnet/minecraft/class_1799;)I method_13539 replaceItemBlock - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13540 func_198601_b - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13543 func_211409_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13696 BLOCK_FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13697 ENTITY_FAILED_EXCEPTION - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13695 INAPPLICABLE_SLOT_EXCEPTION -c net/minecraft/class_3104 net/minecraft/command/impl/SaveAllCommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13551 register - m (Lnet/minecraft/class_2168;)Z method_13554 func_198615_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13553 func_198613_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13549 func_198610_b - m (Lnet/minecraft/class_2168;Z)I method_13550 saveAll - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13701 FAILED_EXCEPTION -c net/minecraft/class_3106 net/minecraft/command/impl/SaveOffCommand - m (Lnet/minecraft/class_2168;)Z method_13558 func_198619_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13556 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13557 func_198618_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13703 SAVE_ALREADY_OFF_EXCEPTION -c net/minecraft/class_3107 net/minecraft/command/impl/SaveOnCommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13559 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13560 func_198622_a - m (Lnet/minecraft/class_2168;)Z method_13561 func_198623_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13704 SAVE_ALREADY_ON_EXCEPTION -c net/minecraft/class_3110 net/minecraft/command/impl/SayCommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13562 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13563 func_198626_a - m (Lnet/minecraft/class_2168;)Z method_13564 func_198627_a -c net/minecraft/class_3112 net/minecraft/command/impl/ScheduleCommand - m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_22833 func_229817_a_ - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13567 register - m (Lnet/minecraft/class_2960;ZLnet/minecraft/class_236;JLnet/minecraft/class_2168;ILnet/minecraft/class_2158;)V method_13571 func_229820_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22834 func_229813_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22837 func_229821_b_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_22838 func_229822_c_ - m (Lnet/minecraft/class_2960;ZLnet/minecraft/class_236;JLnet/minecraft/class_2168;ILnet/minecraft/class_3494;)V method_13570 func_229819_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13568 func_229823_d_ - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_22836 func_229818_a_ - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_22835 func_229814_a_ - m (Lnet/minecraft/class_2168;Lcom/mojang/datafixers/util/Pair;IZ)I method_13566 func_241063_a_ - m (Lnet/minecraft/class_2168;)Z method_13569 func_229815_a_ - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_20853 field_229811_b_ - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13706 field_218913_a - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_20854 field_229812_c_ -c net/minecraft/class_3115 net/minecraft/command/impl/ScoreboardCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13590 func_198636_n - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13577 func_198640_q - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;)I method_13586 resetPlayerScore - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;)I method_13609 enableTrigger - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_266;Lnet/minecraft/class_274$class_275;)I method_13581 setRenderType - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13575 resetPlayerAllScores - m (Lnet/minecraft/class_2168;)Z method_13585 func_198650_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13591 func_198642_h - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13588 func_198639_i - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;Lnet/minecraft/class_2218$class_2219;Ljava/util/Collection;Lnet/minecraft/class_266;)I method_13584 applyScoreOperation - m ()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder; method_13606 createRenderTypeArgument - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13603 func_198652_j - m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_13614 listPlayerScores - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13594 func_198646_k - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13599 func_211750_l - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13583 func_198649_m - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13598 func_198648_c - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_266;)I method_13602 removeObjective - m (Lnet/minecraft/class_2168;)I method_13597 listObjectives - m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_266;)I method_13607 getPlayerScore - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_266;Lnet/minecraft/class_2561;)I method_13576 setDisplayName - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13593 func_198645_d - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13612 func_198660_e - m (Lnet/minecraft/class_2168;ILnet/minecraft/class_266;)I method_13596 setObjectiveDisplaySlot - m (Lnet/minecraft/class_2168;)I method_13589 listPlayers - m (Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13605 func_208907_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13613 suggestTriggers - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13608 func_198655_f - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13580 func_198631_g - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13587 func_198638_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;I)I method_13600 removeFromPlayerScore - m (Lnet/minecraft/class_274$class_275;Lcom/mojang/brigadier/context/CommandContext;)I method_13601 func_211912_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;I)I method_13578 addToPlayerScore - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13595 register - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_266;I)I method_13604 setPlayerScore - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13610 func_198657_a - m (Lnet/minecraft/class_2168;I)I method_13592 clearObjectiveDisplaySlot - m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_274;Lnet/minecraft/class_2561;)I method_13611 addObjective - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13574 func_198628_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13579 func_198630_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13582 func_198635_d - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13710 ENABLE_TRIGGER_INVALID - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13712 OBJECTIVE_ALREADY_EXISTS_EXCEPTION - f Lcom/mojang/brigadier/exceptions/Dynamic2CommandExceptionType; field_13711 SCOREBOARD_PLAYER_NOT_FOUND_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13714 ENABLE_TRIGGER_FAILED - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13713 DISPLAY_ALREADY_SET_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13715 DISPLAY_ALREADY_CLEAR_EXCEPTION -c net/minecraft/class_3118 net/minecraft/command/impl/SeedCommand - m (JLnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_13619 func_211752_a_ - m (ZLnet/minecraft/class_2168;)Z method_13618 func_198673_a_ - m (Lcom/mojang/brigadier/CommandDispatcher;Z)V method_13616 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13617 func_198672_a -c net/minecraft/class_3119 net/minecraft/command/impl/SetBlockCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13622 func_198682_d - m (Lnet/minecraft/class_2168;)Z method_13627 func_198688_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3119$class_3121;Ljava/util/function/Predicate;)I method_13620 setBlock - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13626 func_198686_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13621 func_198681_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13625 func_198685_c - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13623 register - m (Lnet/minecraft/class_2694;)Z method_13624 func_198687_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13719 FAILED_EXCEPTION -c net/minecraft/class_3119$class_3120 net/minecraft/command/impl/SetBlockCommand$IFilter - m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;Lnet/minecraft/class_2247;Lnet/minecraft/class_3218;)Lnet/minecraft/class_2247; filter filter -c net/minecraft/class_3119$class_3121 net/minecraft/command/impl/SetBlockCommand$Mode - m ()[Lnet/minecraft/class_3119$class_3121; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3119$class_3121; valueOf valueOf - f [Lnet/minecraft/class_3119$class_3121; field_13720 $VALUES - f Lnet/minecraft/class_3119$class_3121; field_13721 DESTROY - f Lnet/minecraft/class_3119$class_3121; field_13722 REPLACE -c net/minecraft/class_3123 net/minecraft/command/impl/SetIdleTimeoutCommand - m (Lnet/minecraft/class_2168;I)I method_13630 setTimeout - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13632 func_198691_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13631 register - m (Lnet/minecraft/class_2168;)Z method_13633 func_198692_a -c net/minecraft/class_3127 net/minecraft/command/impl/SpawnPointCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13642 func_198697_c - m (Lnet/minecraft/class_2168;)Z method_13644 func_198699_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2338;F)I method_13645 setSpawnPoint - m (Lcom/mojang/brigadier/context/CommandContext;)I method_30733 func_244376_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13643 func_198698_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13640 func_198694_b - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13641 register -c net/minecraft/class_3128 net/minecraft/command/impl/SetWorldSpawnCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_30734 func_244377_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13648 func_198703_a - m (Lnet/minecraft/class_2168;)Z method_13649 func_198704_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2338;F)I method_13650 setSpawn - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13647 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13646 func_198700_b -c net/minecraft/class_4694 net/minecraft/command/impl/SpectateCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_23657 func_229832_c_ - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_23655 func_229830_a_ - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_23653 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_23654 func_229827_a_ - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_3222;)I method_23652 func_229829_a_ - m (Lnet/minecraft/class_2168;)Z method_23651 func_229828_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_23656 func_229831_b_ - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_21464 field_229825_b_ - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_21463 field_229824_a_ -c net/minecraft/class_3131 net/minecraft/command/impl/SpreadPlayersCommand - m (Ljava/util/Collection;Lnet/minecraft/class_3218;[Lnet/minecraft/class_3131$class_3132;IZ)D method_13657 func_241072_a_ - m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13655 func_208910_b - m (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13660 func_208912_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_241;FFIZLjava/util/Collection;)I method_13656 func_241070_a_ - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13654 register - m (Ljava/util/Collection;)I method_13652 getNumberOfTeams - m (Lcom/mojang/brigadier/context/CommandContext;)I method_29193 func_241069_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13658 func_198718_a - m (Lnet/minecraft/class_2168;)Z method_13659 func_198721_a - m (Ljava/util/Random;IDDDD)[Lnet/minecraft/class_3131$class_3132; method_13653 getPositions - m (Lnet/minecraft/class_241;DLnet/minecraft/class_3218;Ljava/util/Random;DDDDI[Lnet/minecraft/class_3131$class_3132;Z)V method_13661 func_241071_a_ - f Lcom/mojang/brigadier/exceptions/Dynamic4CommandExceptionType; field_13735 SPREAD_ENTITIES_FAILED - f Lcom/mojang/brigadier/exceptions/Dynamic4CommandExceptionType; field_13734 SPREAD_TEAMS_FAILED -c net/minecraft/class_3131$class_3132 net/minecraft/command/impl/SpreadPlayersCommand$Position - m (Lnet/minecraft/class_1922;I)I method_13669 getHighestNonAirBlock - m (DDDD)Z method_13666 clampWithinRange - m ()V method_13671 normalize - m ()F method_13668 getMagnitude - m (Ljava/util/Random;DDDD)V method_13667 computeCoords - m (Lnet/minecraft/class_3131$class_3132;)D method_13665 getDistance - m (Lnet/minecraft/class_3131$class_3132;)D method_13673 access$000 - m (Lnet/minecraft/class_3131$class_3132;)D method_13672 access$100 - m (Lnet/minecraft/class_1922;I)Z method_13662 func_241074_b_ - m (Lnet/minecraft/class_3131$class_3132;D)D method_13664 access$102 - m (Lnet/minecraft/class_3131$class_3132;D)D method_13663 access$002 - m (Lnet/minecraft/class_3131$class_3132;)V method_13670 subtract - f D field_13737 x - f D field_13736 z -c net/minecraft/class_3134 net/minecraft/command/impl/StopCommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13675 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13676 func_198726_a - m (Lnet/minecraft/class_2168;)Z method_13677 func_198727_a -c net/minecraft/class_3136 net/minecraft/command/impl/StopSoundCommand - m (Lnet/minecraft/class_2168;)Z method_13682 func_198734_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13681 register - m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13684 func_198728_a - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_3419;Lnet/minecraft/class_2960;)I method_13685 stopSound - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13683 func_198732_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13680 func_198729_b - m (Lnet/minecraft/class_3419;Lcom/mojang/brigadier/context/CommandContext;)I method_13686 func_198731_b -c net/minecraft/class_3138 net/minecraft/command/impl/SummonCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13689 func_198735_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13691 func_198738_c - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13690 register - m (Lnet/minecraft/class_2168;)Z method_13693 func_198740_a - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_18192 func_218914_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13692 func_198739_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2960;Lnet/minecraft/class_243;Lnet/minecraft/class_2487;Z)I method_13694 summonEntity - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13741 SUMMON_FAILED - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_26629 field_244378_b - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_22254 field_241075_b_ -c net/minecraft/class_3140 net/minecraft/command/impl/TagCommand - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Ljava/lang/String;)I method_13699 removeTag - m (Ljava/util/Collection;)Ljava/util/Collection; method_13706 getAllTags - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13700 listTags - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Ljava/lang/String;)I method_13702 addTag - m (Lnet/minecraft/class_2168;)Z method_13705 func_198751_a - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13701 func_198745_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13704 func_198747_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13697 func_198742_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13703 func_198746_c - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13698 register - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13742 ADD_FAILED - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13743 REMOVE_FAILED -c net/minecraft/class_3142 net/minecraft/command/impl/TeamCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13726 func_198773_s - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13712 func_207514_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13724 func_198754_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13753 func_198767_u - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13716 func_198762_m - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13746 func_198765_o - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;)I method_13723 emptyTeam - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_270$class_271;)I method_13713 setCollisionRule - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;)I method_13748 listMembers - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Z)I method_13751 setCanSeeFriendlyInvisibles - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13744 func_198758_q - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13742 func_198766_h - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13741 func_208916_b - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13736 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13740 func_198778_j - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13729 func_198775_l - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_2561;)I method_13756 setSuffix - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13733 func_198761_b - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_2561;)I method_13711 setDisplayName - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13750 func_198769_d - m (Lnet/minecraft/class_2168;Ljava/lang/String;Lnet/minecraft/class_2561;)I method_13715 addTeam - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13714 leaveFromTeams - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_270$class_272;)I method_13735 setDeathMessageVisibility - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Ljava/util/Collection;)I method_13720 joinTeam - m (Lnet/minecraft/class_2168;)I method_13728 listTeams - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13730 func_198789_f - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13731 func_198785_r - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13752 func_207516_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13722 func_198779_t - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13717 func_198790_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13749 func_198763_v - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13739 func_198756_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_124;)I method_13745 setColor - m (Lnet/minecraft/class_2168;Ljava/lang/String;)I method_13757 addTeam - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13718 func_211919_n - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13738 func_198755_p - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Z)I method_13754 setAllowFriendlyFire - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;)I method_13747 removeTeam - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13737 func_198760_A - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13734 func_198764_i - m (Lnet/minecraft/class_2168;)Z method_13719 func_198780_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13725 func_198770_k - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_2561;)I method_13743 setPrefix - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13755 func_198774_c - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_268;Lnet/minecraft/class_270$class_272;)I method_13732 setNameTagVisibility - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13721 func_198791_e - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13727 func_198759_g - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13755 NAME_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13750 COLLISION_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13748 TEAM_NAME_TOO_LONG - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13752 NAMETAG_VISIBILITY_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13753 FRIENDLY_FIRE_ALREADY_ON - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13747 SEE_FRIENDLY_INVISIBLES_ALREADY_ON - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13746 COLOR_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13749 DUPLICATE_TEAM_NAME - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13751 EMPTY_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13756 SEE_FRIENDLY_INVISIBLES_ALREADY_OFF - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13757 DEATH_MESSAGE_VISIBILITY_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13754 FRIENDLY_FIRE_ALREADY_OFF -c net/minecraft/class_3945 net/minecraft/command/impl/TeamMsgCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_17601 func_218916_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_2561;)I method_17599 func_218917_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_17600 register - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_17440 field_218919_a - f Lnet/minecraft/class_2583; field_24380 field_241076_a_ -c net/minecraft/class_3143 net/minecraft/command/impl/TeleportCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13759 func_198806_d - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_3218;Lnet/minecraft/class_2267;Lnet/minecraft/class_2267;Lnet/minecraft/class_3143$class_3144;)I method_13765 teleportToPos - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13770 func_198811_e - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13768 func_198807_f - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_1297;)I method_13771 teleportToEntity - m (Lnet/minecraft/class_2168;)Z method_13764 func_198816_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13769 func_200562_g - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13760 register - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;Lnet/minecraft/class_3218;DDDLjava/util/Set;FFLnet/minecraft/class_3143$class_3144;)V method_13766 teleport - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13758 func_200560_h - m (Lnet/minecraft/class_2168;)Z method_13763 func_200556_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13762 func_198814_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13761 func_198812_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13767 func_198805_b - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_22255 field_241077_a_ -c net/minecraft/class_3143$class_3144 net/minecraft/command/impl/TeleportCommand$Facing - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_1297;)V method_13772 updateLook - f Lnet/minecraft/class_243; field_13760 position - f Lnet/minecraft/class_2183$class_2184; field_13759 anchor - f Lnet/minecraft/class_1297; field_13758 entity -c net/minecraft/class_3146 net/minecraft/command/impl/TellRawCommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13776 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13777 func_198819_a - m (Lnet/minecraft/class_2168;)Z method_13778 func_198820_a -c net/minecraft/class_3149 net/minecraft/command/impl/TimeCommand - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13786 register - m (Lnet/minecraft/class_2168;I)I method_13784 setTime - m (Lnet/minecraft/class_2168;)Z method_13791 func_198828_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13795 func_198831_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13790 func_198827_a - m (Lnet/minecraft/class_2168;I)I method_13788 addTime - m (Lnet/minecraft/class_2168;I)I method_13796 sendQueryResults - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13783 func_198821_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13793 func_198830_b - m (Lnet/minecraft/class_3218;)I method_13787 getDayTime - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13789 func_200564_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13797 func_198822_e - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13785 func_200563_d - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13794 func_198825_f - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13792 func_198832_g -c net/minecraft/class_3151 net/minecraft/command/impl/TitleCommand - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13800 func_198836_b - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13805 clear - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13801 func_198837_d - m (Lnet/minecraft/class_2168;Ljava/util/Collection;Lnet/minecraft/class_2561;Lnet/minecraft/class_2762$class_2763;)I method_13802 show - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13808 func_198842_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13807 func_198841_e - m (Lnet/minecraft/class_2168;)Z method_13810 func_198847_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13804 register - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13799 reset - m (Lnet/minecraft/class_2168;Ljava/util/Collection;III)I method_13806 setTimes - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13809 func_198843_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13803 func_198838_f -c net/minecraft/class_3153 net/minecraft/command/impl/TriggerCommand - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_267;I)I method_13820 setTrigger - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13814 func_198853_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13816 func_198855_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_267;I)I method_13817 addToTrigger - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13812 func_198849_b - m (Lnet/minecraft/class_2168;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13819 suggestTriggers - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_266;)Lnet/minecraft/class_267; method_13821 checkValidTrigger - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_267;)I method_13818 incrementTrigger - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13813 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13815 func_198854_c - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13764 NOT_A_TRIGGER - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13763 NOT_PRIMED -c net/minecraft/class_3155 net/minecraft/command/impl/WeatherCommand - m (Lnet/minecraft/class_2168;I)I method_13828 setRain - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13823 func_198859_b - m (Lnet/minecraft/class_2168;I)I method_13824 setClear - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13831 func_198867_a - m (Lnet/minecraft/class_2168;I)I method_13833 setThunder - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13830 func_198866_c - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13827 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13825 func_198860_d - m (Lnet/minecraft/class_2168;)Z method_13832 func_198868_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13826 func_198861_f - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13829 func_198864_e -c net/minecraft/class_3156 net/minecraft/command/impl/WhitelistCommand - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13838 addPlayers - m (Lnet/minecraft/class_2168;Ljava/util/Collection;)I method_13845 removePlayers - m (Lnet/minecraft/class_2168;)I method_13837 disableWhiteList - m (Lnet/minecraft/class_3324;Lnet/minecraft/class_3222;)Z method_13841 func_198871_a - m (Lnet/minecraft/class_2168;)I method_13840 listWhitelistedPlayers - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13851 func_198882_a - m (Lnet/minecraft/class_2168;)I method_13839 enableWhiteList - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13836 register - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13843 func_198875_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13834 func_198870_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13846 func_198878_d - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13848 func_198879_b - m (Lnet/minecraft/class_2168;)I method_13850 reload - m (Lnet/minecraft/class_2168;)Z method_13847 func_198877_e - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13842 func_198874_e - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_13849 func_198881_a - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13835 func_198872_f - m (Lnet/minecraft/class_3222;)Ljava/lang/String; method_13844 func_200567_a - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13767 ALREADY_ON - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13770 ALREADY_OFF - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13768 PLAYER_ALREADY_WHITELISTED - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13769 PLAYER_NOT_WHITELISTED -c net/minecraft/class_3158 net/minecraft/command/impl/WorldBorderCommand - m (Lnet/minecraft/class_2168;)Z method_13862 func_198903_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13857 func_198893_f - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13867 func_198906_h - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13872 func_198909_g - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13864 func_198901_i - m (Lnet/minecraft/class_2168;)I method_13868 getSize - m (Lnet/minecraft/class_2168;F)I method_13865 setDamageBuffer - m (Lnet/minecraft/class_2168;DJ)I method_13854 setSize - m (Lnet/minecraft/class_2168;F)I method_13863 setDamageAmount - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13871 func_198908_j - m (Lnet/minecraft/class_2168;I)I method_13856 setWarningTime - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13870 func_198907_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_241;)I method_13869 setCenter - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13858 register - m (Lnet/minecraft/class_2168;I)I method_13859 setWarningDistance - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13855 func_198892_b - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13866 func_198905_d - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13861 func_198900_c - m (Lcom/mojang/brigadier/context/CommandContext;)I method_13860 func_198897_e - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13777 WARNING_DISTANCE_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13778 DAMAGE_BUFFER_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13774 DAMAGE_AMOUNT_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13776 SIZE_TOO_SMALL - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13779 SIZE_TOO_BIG - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13773 WARNING_TIME_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13775 CENTER_NO_CHANGE - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13780 SIZE_NO_CHANGE -c net/minecraft/class_3161 net/minecraft/command/impl/data/BlockDataAccessor - m ()Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; method_13877 access$000 - m (Ljava/lang/String;)Lnet/minecraft/class_3164$class_3167; method_13878 func_218923_a - f Lnet/minecraft/class_2338; field_13783 pos - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13785 DATA_BLOCK_INVALID_EXCEPTION - f Ljava/util/function/Function; field_13786 DATA_PROVIDER - f Lnet/minecraft/class_2586; field_13784 tileEntity -c net/minecraft/class_3161$1 net/minecraft/command/impl/data/BlockDataAccessor$1 - f Ljava/lang/String; field_13787 field_218921_a -c net/minecraft/class_3162 net/minecraft/command/impl/data/IDataAccessor - m ()Lnet/minecraft/class_2561; method_13883 getModifiedMessage - m ()Lnet/minecraft/class_2487; method_13881 getData - m (Lnet/minecraft/class_2520;)Lnet/minecraft/class_2561; method_13882 getQueryMessage - m (Lnet/minecraft/class_2487;)V method_13880 mergeData - m (Lnet/minecraft/class_2203$class_2209;DI)Lnet/minecraft/class_2561; method_13879 getGetMessage -c net/minecraft/class_3164 net/minecraft/command/impl/data/DataCommand - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13897 func_218932_d - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13902 func_208922_b - m (Lnet/minecraft/class_2168;)Z method_13890 func_198939_a - m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13904 func_198945_c - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;Lnet/minecraft/class_2203$class_2209;D)I method_13903 getScaled - m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13912 func_198941_a - m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;Lcom/mojang/brigadier/context/CommandContext;)I method_13900 func_218952_a - m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13911 func_218934_a - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;Ljava/util/List;)I method_13920 func_218933_a - m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;Lcom/mojang/brigadier/context/CommandContext;)I method_13917 func_218936_a - m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13887 func_198936_e - m (Ljava/util/function/BiConsumer;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13898 func_218935_a - m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13923 func_198934_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;Lnet/minecraft/class_2203$class_2209;)I method_13916 get - m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13896 func_198943_c - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13888 func_218954_b - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13907 func_218948_b - m (Ljava/util/function/Function;)Lnet/minecraft/class_3164$class_3167; method_13906 func_218947_a - m (Lcom/mojang/brigadier/CommandDispatcher;)V method_13905 register - m (ILnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13910 func_218944_a - m (Lcom/mojang/brigadier/builder/ArgumentBuilder;Lnet/minecraft/class_3164$class_3166;)V method_13895 func_218924_a - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13892 func_208919_a - m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13899 func_218949_a - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13891 func_218930_e - m (Lnet/minecraft/class_2203$class_2209;Lnet/minecraft/class_3162;)Lnet/minecraft/class_2520; method_13921 func_218928_a - m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13893 func_218929_a - m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13909 func_198944_d - m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/context/CommandContext;)I method_13886 func_198935_b - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;Lnet/minecraft/class_2487;)I method_13901 merge - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;)I method_13908 get - m (Ljava/util/function/BiConsumer;Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13922 func_218940_a - m (Lnet/minecraft/class_2168;Lnet/minecraft/class_3162;Lnet/minecraft/class_2203$class_2209;)I method_13885 remove - m (Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3167;Lnet/minecraft/class_3164$class_3165;Lcom/mojang/brigadier/context/CommandContext;)I method_13913 func_218937_b - m (Ljava/util/function/Function;)Lnet/minecraft/class_3164$class_3167; method_13919 func_218925_b - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_17603 func_218943_a - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13894 func_218927_a - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I method_13918 func_218941_c - m (Lnet/minecraft/class_3164$class_3167;Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13889 func_198940_b - m (Ljava/lang/Object;)Lcom/mojang/brigadier/Message; method_13915 func_218931_c - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13797 field_218959_i - f Ljava/util/List; field_13798 field_218955_b - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13791 GET_INVALID_EXCEPTION - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13796 NOTHING_CHANGED - f Ljava/util/List; field_13792 field_218956_c - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_17441 field_218960_j - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13793 GET_UNKNOWN_EXCEPTION - f Ljava/util/List; field_13790 DATA_PROVIDERS - f Lcom/mojang/brigadier/exceptions/DynamicCommandExceptionType; field_13795 field_218958_h - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13794 field_218957_g -c net/minecraft/class_3164$class_3165 net/minecraft/command/impl/data/DataCommand$IModificationType - m (Lcom/mojang/brigadier/context/CommandContext;Lnet/minecraft/class_2487;Lnet/minecraft/class_2203$class_2209;Ljava/util/List;)I modify modify -c net/minecraft/class_3164$class_3166 net/minecraft/command/impl/data/DataCommand$IModificationSourceArgumentBuilder - m (Lnet/minecraft/class_3164$class_3165;)Lcom/mojang/brigadier/builder/ArgumentBuilder; create create -c net/minecraft/class_3164$class_3167 net/minecraft/command/impl/data/DataCommand$IDataProvider - m (Lcom/mojang/brigadier/builder/ArgumentBuilder;Ljava/util/function/Function;)Lcom/mojang/brigadier/builder/ArgumentBuilder; method_13925 createArgument - m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_3162; method_13924 createAccessor -c net/minecraft/class_3169 net/minecraft/command/impl/data/EntityDataAccessor - m (Ljava/lang/String;)Lnet/minecraft/class_3164$class_3167; method_13927 func_218922_a - f Lnet/minecraft/class_1297; field_13801 entity - f Ljava/util/function/Function; field_13800 DATA_PROVIDER - f Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType; field_13799 DATA_ENTITY_INVALID -c net/minecraft/class_3169$1 net/minecraft/command/impl/data/EntityDataAccessor$1 - f Ljava/lang/String; field_13802 field_218920_a -c net/minecraft/class_4580 net/minecraft/command/impl/data/StorageAccessor - m (Lcom/mojang/brigadier/context/CommandContext;Lcom/mojang/brigadier/suggestion/SuggestionsBuilder;)Ljava/util/concurrent/CompletableFuture; method_22840 func_229838_a_ - m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_4565; method_22839 func_229837_a_ - m ()Lcom/mojang/brigadier/suggestion/SuggestionProvider; method_22843 func_229841_c_ - m (Lcom/mojang/brigadier/context/CommandContext;)Lnet/minecraft/class_4565; method_22842 func_229840_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_3164$class_3167; method_22841 func_229839_a_ - f Lnet/minecraft/class_2960; field_20858 field_229836_d_ - f Lnet/minecraft/class_4565; field_20857 field_229835_c_ - f Lcom/mojang/brigadier/suggestion/SuggestionProvider; field_20856 field_229834_b_ - f Ljava/util/function/Function; field_20855 field_229833_a_ -c net/minecraft/class_4580$1 net/minecraft/command/impl/data/StorageAccessor$1 - f Ljava/lang/String; field_20859 field_229842_a_ -c net/minecraft/class_3174 net/minecraft/server/dedicated/DedicatedPlayerList - m ()V method_13930 savePlayerBanList - m ()V method_13936 readWhiteList - m ()V method_13935 saveOpsList - m ()V method_13932 saveIPBanList - m ()Lnet/minecraft/class_3176; method_13938 getServer - m ()V method_13934 loadOpsList - m ()V method_13933 loadPlayerBanList - m ()V method_13937 saveWhiteList - m ()V method_13931 loadIPBanList - f Lorg/apache/logging/log4j/Logger; field_13804 LOGGER -c net/minecraft/class_3176 net/minecraft/server/dedicated/DedicatedServer - m ()Ljava/lang/String; method_13943 func_210177_bd - m (Ljava/lang/String;)V method_20799 func_223305_l - m ()V method_13948 setGuiEnabled - m ()V method_13942 sleepFiveSeconds - m ()Lnet/minecraft/class_3174; method_13949 getPlayerList - m (ZLnet/minecraft/class_3806;)Lnet/minecraft/class_3806; method_16711 func_213222_a - m (Ljava/lang/String;Lnet/minecraft/class_2168;)V method_13947 handleConsoleInput - m ()Z method_13951 convertFiles - m (ILnet/minecraft/class_3806;)Lnet/minecraft/class_3806; method_16710 func_213224_a - m (Z)V method_16712 func_213223_o - m ()Lorg/apache/logging/log4j/Logger; method_13940 access$000 - m ()Ljava/lang/String; method_13950 loadResourcePackSHA - m ()Ljava/lang/String; method_13946 func_210178_be - m ()J method_13944 getMaxTickTime - m ()V method_13941 executePendingCommands - f Lnet/minecraft/class_3182; field_16800 serverGui - f Ljava/util/List; field_13815 pendingCommandList - f Lorg/apache/logging/log4j/Logger; field_13814 LOGGER - f Lnet/minecraft/class_3364; field_13816 rconQueryThread - f Ljava/util/regex/Pattern; field_13810 RESOURCE_PACK_SHA1_PATTERN - f Lnet/minecraft/class_3807; field_16799 settings - f Lnet/minecraft/class_3350; field_13811 rconConsoleSource - f Lnet/minecraft/class_3408; field_13819 rconThread -c net/minecraft/class_3176$1 net/minecraft/server/dedicated/DedicatedServer$1 - m ()V run run - f Lnet/minecraft/class_3176; field_13822 field_72451_a -c net/minecraft/class_3806 net/minecraft/server/dedicated/ServerProperties - m (Ljava/lang/Integer;)Ljava/lang/Integer; method_27905 func_241083_a_ - m (Ljava/lang/Integer;)Ljava/lang/Integer; method_16716 func_218987_b - m (Lnet/minecraft/class_5455;Ljava/util/Properties;)Lnet/minecraft/class_3806; method_16713 func_241881_b - m (Ljava/lang/Integer;)Ljava/lang/Integer; method_16715 func_218986_a - m (Lnet/minecraft/class_5455;Ljava/nio/file/Path;)Lnet/minecraft/class_3806; method_16714 func_244380_a - f Ljava/lang/String; field_16820 worldName - f Lnet/minecraft/class_1267; field_16840 difficulty - f Z field_24056 field_241079_P_ - f Z field_16833 allowPvp - f Z field_16806 enableCommandBlock - f J field_16815 maxTickTime - f Z field_16808 field_218993_F - f I field_16845 opPermissionLevel - f I field_16810 maxBuildHeight - f Lnet/minecraft/class_3808$class_3809; field_16804 whitelistEnabled - f Z field_16827 forceGamemode - f Ljava/lang/String; field_16821 resourcePackSha1 - f Z field_16818 enableRcon - f Ljava/lang/String; field_16829 serverIp - f Z field_16819 enableQuery - f I field_16842 networkCompressionThreshold - f I field_16844 viewDistance - f Ljava/lang/String; field_16823 rconPassword - f Z field_16802 broadcastConsoleToOps - f Ljava/lang/String; field_16825 motd - f Z field_16813 onlineMode - f Ljava/lang/Boolean; field_16830 announceAdvancements - f I field_16837 serverPort - f Z field_16807 allowFlight - f Z field_24453 field_241080_Q_ - f Lnet/minecraft/class_1934; field_16841 gamemode - f Z field_16809 spawnNPCs - f Z field_23785 field_241078_O_ - f Z field_16811 allowNether - f Lnet/minecraft/class_3808$class_3809; field_16817 playerIdleTimeout - f Z field_16832 useNativeTransport - f I field_25802 rateLimit - f I field_16831 queryPort - f Z field_16835 spawnMonsters - f I field_20324 functionPermissionLevel - f Z field_16805 enforceWhitelist - f Lnet/minecraft/class_5285; field_24623 field_241082_U_ - f I field_16816 spawnProtection - f I field_16812 maxWorldSize - f Ljava/lang/String; field_16834 resourcePackHash - f I field_16814 maxPlayers - f I field_16828 rconPort - f Z field_16838 hardcore - f Ljava/lang/String; field_16801 resourcePack - f Z field_16836 spawnAnimals - f Z field_16824 broadcastRconToOps - f I field_24454 field_241081_R_ - f Z field_16839 preventProxyConnections -c net/minecraft/class_3807 net/minecraft/server/ServerPropertiesProvider - m ()Lnet/minecraft/class_3806; method_16717 getProperties - m ()V method_16719 save - m (Ljava/util/function/UnaryOperator;)Lnet/minecraft/class_3807; method_16718 func_219033_a - f Ljava/nio/file/Path; field_16846 propertiesPath - f Lnet/minecraft/class_3806; field_16847 properties -c net/minecraft/class_3178 net/minecraft/server/dedicated/ServerHangWatchdog - m ()V run run - m ()V method_13954 scheduleHalt - f Lnet/minecraft/class_3176; field_13823 server - f Lorg/apache/logging/log4j/Logger; field_13825 LOGGER - f J field_13824 maxTickTime -c net/minecraft/class_3178$1 net/minecraft/server/dedicated/ServerHangWatchdog$1 - m ()V run run - f Lnet/minecraft/class_3178; field_13826 field_180252_a -c net/minecraft/class_3808 net/minecraft/server/dedicated/PropertyManager - m (Ljava/nio/file/Path;)V method_16728 save - m (Ljava/lang/String;)Ljava/lang/Boolean; method_16736 func_218978_b - m (Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/Function;Ljava/lang/Object;)Ljava/lang/Object; method_16741 func_218983_a - m (Ljava/util/function/IntFunction;Ljava/util/function/Function;Ljava/lang/String;)Ljava/lang/Object; method_16729 func_218971_a - m (Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/Function;Ljava/lang/Object;)Lnet/minecraft/class_3808$class_3809; method_16724 func_218981_b - m (Ljava/lang/String;I)Lnet/minecraft/class_3808$class_3809; method_16743 func_218974_b - m (Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/UnaryOperator;Ljava/util/function/Function;Ljava/lang/Object;)Ljava/lang/Object; method_16735 func_218977_a - m (Ljava/lang/String;Ljava/util/function/UnaryOperator;I)I method_16720 func_218962_a - m (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_16732 registerString - m (Ljava/lang/String;Ljava/util/function/Function;Ljava/lang/Object;)Lnet/minecraft/class_3808$class_3809; method_16730 func_218965_b - m ()Ljava/util/Properties; method_16723 func_218966_a - m (Lnet/minecraft/class_5455;Ljava/util/Properties;)Lnet/minecraft/class_3808; method_16739 func_241881_b - m (Ljava/nio/file/Path;)Ljava/util/Properties; method_16727 load - m (Ljava/util/function/Function;Ljava/util/function/UnaryOperator;Ljava/lang/String;)Ljava/lang/Object; method_16731 func_218972_a - m (Ljava/lang/String;Ljava/util/function/Function;Ljava/lang/Object;)Ljava/lang/Object; method_16737 func_218979_a - m (Ljava/util/function/Function;Ljava/lang/String;)Ljava/lang/Number; method_16733 func_218975_a - m (Ljava/lang/String;)Ljava/lang/String; method_16734 getStringValue - m (Ljava/util/function/Function;)Ljava/util/function/Function; method_16721 safeParseNumber - m (Ljava/util/function/IntFunction;Ljava/util/function/Function;)Ljava/util/function/Function; method_16722 enumConverter - m (Ljava/lang/String;I)I method_16726 registerInt - m (Ljava/lang/String;)Ljava/lang/String; method_16738 func_218980_a - m (Ljava/lang/String;Z)Lnet/minecraft/class_3808$class_3809; method_16744 func_218961_b - m (Ljava/lang/String;Ljava/util/function/Function;)Ljava/lang/Object; method_16742 func_218984_a - m (Ljava/lang/String;Z)Z method_16740 registerBool - m (Ljava/lang/String;J)J method_16725 func_218967_a - f Lorg/apache/logging/log4j/Logger; field_16849 LOGGER - f Ljava/util/Properties; field_16848 serverProperties -c net/minecraft/class_3808$1 net/minecraft/server/dedicated/PropertyManager$1 -c net/minecraft/class_3808$class_3809 net/minecraft/server/dedicated/PropertyManager$Property - m (Lnet/minecraft/class_5455;Ljava/lang/Object;)Lnet/minecraft/class_3808; method_16745 func_244381_a - m ()Ljava/lang/Object; get get - f Ljava/util/function/Function; field_16851 field_219042_d - f Ljava/lang/Object; field_16850 field_219041_c - f Ljava/lang/String; field_16852 name - f Lnet/minecraft/class_3808; field_16853 field_219039_a -c net/minecraft/class_3182 net/minecraft/server/gui/MinecraftServerGui - m ()Ljavax/swing/JComponent; method_13973 getLogComponent - m ()V method_16750 func_219050_b - m (Ljavax/swing/JTextArea;Ljavax/swing/JScrollPane;Ljava/lang/String;)V method_13970 appendLine - m (Ljavax/swing/JTextArea;Ljavax/swing/JScrollPane;Ljava/lang/String;)V method_13971 func_210463_b - m ()Ljavax/swing/JComponent; method_13975 getPlayerListComponent - m (Ljava/lang/Runnable;)V method_16746 func_219045_a - m ()V method_13974 start - m (Lnet/minecraft/class_3176;)Lnet/minecraft/class_3182; method_13969 func_219048_a - m (Lnet/minecraft/class_3182;)V method_16749 func_219049_b - m (Ljavax/swing/JTextArea;Ljavax/swing/JScrollPane;)V method_13972 func_210464_a - m (Lnet/minecraft/class_3182;)Ljava/util/concurrent/atomic/AtomicBoolean; method_16748 func_219047_a - m ()V method_16747 func_219046_f - m (Ljavax/swing/JTextField;Ljava/awt/event/ActionEvent;)V method_13977 func_210465_a - m ()Ljavax/swing/JComponent; method_13976 getStatsComponent - f Ljava/util/Collection; field_16855 field_219051_e - f Ljava/awt/Font; field_13837 SERVER_GUI_FONT - f Lnet/minecraft/class_3176; field_13839 server - f Ljava/util/concurrent/atomic/AtomicBoolean; field_16854 field_219052_f - f Lorg/apache/logging/log4j/Logger; field_13840 LOGGER - f Ljava/lang/Thread; field_13838 field_206932_d -c net/minecraft/class_3182$2 net/minecraft/server/gui/MinecraftServerGui$2 - m (Ljava/awt/event/FocusEvent;)V focusGained focusGained - f Lnet/minecraft/class_3182; field_13842 field_120024_b -c net/minecraft/class_3182$1 net/minecraft/server/gui/MinecraftServerGui$1 - m (Ljava/awt/event/WindowEvent;)V windowClosing windowClosing - f Lnet/minecraft/class_3176; field_13841 field_120023_a - f Ljavax/swing/JFrame; field_16856 field_219044_b - f Lnet/minecraft/class_3182; field_16857 field_219043_a -c net/minecraft/class_3184 net/minecraft/server/gui/PlayerListComponent - m ()V method_18700 tick - f I field_13843 ticks - f Lnet/minecraft/server/MinecraftServer; field_13844 server -c net/minecraft/class_3186 net/minecraft/server/gui/StatsComponent - m ([J)D method_13980 mean - m ()V method_16751 func_219053_a - m (Ljava/awt/Graphics;)V paint paint - m (Ljava/awt/event/ActionEvent;)V method_13983 func_210466_a - m (Ljava/text/DecimalFormat;)V method_13981 func_212730_a - m ()V method_13982 tick - f Ljava/text/DecimalFormat; field_13846 FORMATTER - f [I field_13845 values - f [Ljava/lang/String; field_13847 msgs - f I field_13848 vp - f Ljavax/swing/Timer; field_16858 field_219054_f - f Lnet/minecraft/server/MinecraftServer; field_13849 server -c net/minecraft/class_3191 net/minecraft/client/renderer/DestroyBlockProgress - m (Lnet/minecraft/class_3191;)I method_23269 compareTo - m ()I hashCode hashCode - m ()I method_13990 getCreationCloudUpdateTick - m (Ljava/lang/Object;)I compareTo compareTo - m ()I method_13988 getPartialBlockDamage - m (I)V method_13989 setCloudUpdateTick - m ()Lnet/minecraft/class_2338; method_13991 getPosition - m (I)V method_13987 setPartialBlockDamage - m (Ljava/lang/Object;)Z equals equals - f I field_13857 createdAtCloudUpdateTick - f I field_13858 partialBlockProgress - f I field_13859 miningPlayerEntId - f Lnet/minecraft/class_2338; field_13860 position -c net/minecraft/class_3193 net/minecraft/world/server/ChunkHolder - m (I)Lnet/minecraft/class_2806; method_14011 getChunkStatusFromLevel - m ()Ljava/util/concurrent/CompletableFuture; method_14000 func_219302_f - m (Lnet/minecraft/class_2596;Lnet/minecraft/class_3222;)V method_13996 func_219304_a - m (Lnet/minecraft/class_2338;)V method_14002 func_244386_a - m (Lnet/minecraft/class_2821;)V method_20456 func_219294_a - m ()Ljava/util/concurrent/CompletableFuture; method_20725 getBorderFuture - m ()Ljava/util/concurrent/CompletableFuture; method_16145 getTickingFuture - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_3898;)Ljava/util/concurrent/CompletableFuture; method_13993 func_219276_a - m (I)V method_17207 func_219275_d - m ()Lnet/minecraft/class_2818; method_16144 getChunkIfComplete - m (I)Lnet/minecraft/class_3193$class_3194; method_14008 getLocationTypeFromLevel - m (Lnet/minecraft/class_3898;)V method_14007 processUpdates - m (Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; method_16146 func_219301_a - m (Lnet/minecraft/class_1944;I)V method_14012 markLightChanged - m (Lnet/minecraft/class_3193;)Lnet/minecraft/class_1923; method_17206 func_219290_a - m (Lnet/minecraft/class_2791;Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_2791; method_16147 func_219295_a - m ()I method_14005 getChunkLevel - m ()Lnet/minecraft/class_2806; method_23270 func_219285_d - m (Lnet/minecraft/class_2818;)V method_14006 sendChanges - m (Lnet/minecraft/class_2596;Z)V method_13992 sendToTracking - m ()Z method_20384 isAccessible - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_30312 func_244387_b - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_14009 sendTileEntity - m ()Lnet/minecraft/class_3193$class_3194; method_23271 func_219300_g - m (Ljava/util/concurrent/CompletableFuture;)V method_16143 chain - m (I)V method_15890 setChunkLevel - m (Lnet/minecraft/class_2791;)Lnet/minecraft/class_2791; method_16142 func_219283_a - m ()Ljava/util/concurrent/CompletableFuture; method_14003 getEntityTickingFuture - m ()Lnet/minecraft/class_1923; method_13994 getPosition - m (Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; method_21737 func_225410_b - m ()I method_17208 func_219281_j - m ()Lnet/minecraft/class_2791; method_14010 func_219287_e - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_30311 func_244385_a - m (Lnet/minecraft/class_2791;Lnet/minecraft/class_3193$class_3724;)Lnet/minecraft/class_2791; method_16148 func_219288_a - m ()V method_20385 updateAccessible - m (Lnet/minecraft/class_3898;Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_20457 func_222982_a - f Lnet/minecraft/class_3193$class_3897; field_17210 playerProvider - f Ljava/util/concurrent/atomic/AtomicReferenceArray; field_16425 field_219312_g - f Ljava/util/concurrent/CompletableFuture; field_13865 entityTickingFuture - f Z field_26744 field_244384_x - f Lnet/minecraft/class_1923; field_13864 pos - f Ljava/util/concurrent/CompletableFuture; field_16431 borderFuture - f Ljava/util/concurrent/CompletableFuture; field_16430 MISSING_CHUNK_FUTURE - f Ljava/util/concurrent/CompletableFuture; field_16429 UNLOADED_CHUNK_FUTURE - f I field_13862 chunkLevel - f I field_13870 skyLightChangeMask - f Ljava/util/concurrent/CompletableFuture; field_16428 field_219315_j - f Lcom/mojang/datafixers/util/Either; field_16426 MISSING_CHUNK - f Lcom/mojang/datafixers/util/Either; field_16427 UNLOADED_CHUNK - f Lnet/minecraft/class_3568; field_13863 lightManager - f Ljava/util/concurrent/CompletableFuture; field_19333 tickingFuture - f [Lnet/minecraft/class_3193$class_3194; field_13873 LOCATION_TYPES - f Z field_19238 accessible - f Lnet/minecraft/class_3193$class_3896; field_17209 field_219327_v - f Ljava/util/List; field_13868 CHUNK_STATUS_LIST - f I field_17208 field_219318_m - f I field_16432 prevChunkLevel - f [Lit/unimi/dsi/fastutil/shorts/ShortSet; field_25804 field_244383_q - f Z field_25803 field_244382_p - f I field_13871 blockLightChangeMask -c net/minecraft/class_3193$class_3897 net/minecraft/world/server/ChunkHolder$IPlayerProvider - m (Lnet/minecraft/class_1923;Z)Ljava/util/stream/Stream; method_17210 getTrackingPlayers -c net/minecraft/class_3193$class_3724 net/minecraft/world/server/ChunkHolder$IChunkLoadingError - f Lnet/minecraft/class_3193$class_3724; field_16433 UNLOADED -c net/minecraft/class_3193$class_3724$1 net/minecraft/world/server/ChunkHolder$IChunkLoadingError$1 - m ()Ljava/lang/String; toString toString -c net/minecraft/class_3193$class_3896 net/minecraft/world/server/ChunkHolder$IListener - m (Lnet/minecraft/class_1923;Ljava/util/function/IntSupplier;ILjava/util/function/IntConsumer;)V method_17209 func_219066_a -c net/minecraft/class_3193$class_3194 net/minecraft/world/server/ChunkHolder$LocationType - m (Ljava/lang/String;)Lnet/minecraft/class_3193$class_3194; valueOf valueOf - m (Lnet/minecraft/class_3193$class_3194;)Z method_14014 isAtLeast - m ()[Lnet/minecraft/class_3193$class_3194; values values - f [Lnet/minecraft/class_3193$class_3194; field_13878 $VALUES - f Lnet/minecraft/class_3193$class_3194; field_19334 INACCESSIBLE - f Lnet/minecraft/class_3193$class_3194; field_13875 TICKING - f Lnet/minecraft/class_3193$class_3194; field_13876 BORDER - f Lnet/minecraft/class_3193$class_3194; field_13877 ENTITY_TICKING -c net/minecraft/class_3193$1 net/minecraft/world/server/ChunkHolder$1 - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_3193; field_17211 field_219056_a -c net/minecraft/class_3898 net/minecraft/world/server/ChunkManager - m (Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_20577 func_222976_a_ - m (Lnet/minecraft/class_1923;)Ljava/lang/String; method_23272 getDebugInfo - m (J)Lnet/minecraft/class_3193; method_17216 func_219219_b - m (Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; method_20617 chunkGenerate - m (Ljava/util/function/BooleanSupplier;)V method_20605 scheduleUnloads - m (I)Lnet/minecraft/class_2806; method_17245 func_219172_b_ - m (Lnet/minecraft/class_2791;)Z method_20582 func_222952_e - m (Lnet/minecraft/class_2818;)Ljava/lang/String; method_21678 func_225408_c_ - m (Lnet/minecraft/class_3898;)I method_18725 func_219182_c - m (Lnet/minecraft/class_3193$class_3724;)Ljava/lang/String; method_21677 func_225400_a_ - m (Ljava/util/concurrent/CompletableFuture;)Ljava/lang/String; method_21676 func_225402_a - m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)V method_19486 func_219202_b_ - m ()Z method_17244 refreshOffThreadCache - m (Lnet/minecraft/class_3222;Z)V method_18714 setPlayerTracking - m (Ljava/io/Writer;)V method_21619 func_225406_a - m (Ljava/util/List;)Lnet/minecraft/class_2818; method_17232 func_219238_b - m (IIILjava/util/List;)Lcom/mojang/datafixers/util/Either; method_17215 func_219227_a - m (Lnet/minecraft/class_3222;)Z method_18722 cannotGenerateChunks - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3222;Z)I method_18719 func_219215_b - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3193$class_3724;)Ljava/util/concurrent/CompletableFuture; method_20440 func_219211_a_ - m (Lnet/minecraft/class_2791;)Ljava/util/Optional; method_21620 func_225407_b_ - m (Lnet/minecraft/class_3193;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_20618 func_223175_b - m (Lnet/minecraft/class_2818;)Ljava/util/concurrent/CompletableFuture; method_20576 func_222973_a - m (Z)V method_17242 save - m (Lnet/minecraft/class_2806;I)Lnet/minecraft/class_2806; method_17248 func_219195_b - m (Lnet/minecraft/class_3193;Ljava/lang/Void;Ljava/lang/Throwable;)V method_20604 func_223171_a - m ()Z method_20606 func_223161_i - m (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; method_17226 func_219200_b - m ()I method_17253 func_219174_c - m (Lnet/minecraft/class_1923;)Lcom/mojang/datafixers/util/Either; method_17256 func_223170_j - m (Lnet/minecraft/class_2806;Lnet/minecraft/class_1923;Lnet/minecraft/class_3193;Lcom/mojang/datafixers/util/Either;)Ljava/util/concurrent/CompletionStage; method_20616 func_223180_a - m (Lnet/minecraft/class_1923;Lcom/mojang/datafixers/util/Either;)V method_18194 func_219176_a_ - m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)V method_19487 func_219230_c_ - m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_4076; method_20726 func_223489_c - m ()Lnet/minecraft/class_3227; method_17212 getLightManager - m (Lnet/minecraft/class_2791;)Z method_17228 chunkSave - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3222;)Z method_18705 func_219201_a_ - m (Lnet/minecraft/class_3222;)V method_18713 updatePlayerPosition - m (JLnet/minecraft/class_3193;)V method_20458 scheduleSave - m (Lnet/minecraft/class_3193;Lnet/minecraft/class_2791;)Lnet/minecraft/class_2791; method_17227 func_219237_a_ - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;Ljava/util/List;)Ljava/util/concurrent/CompletableFuture; method_17225 func_223148_a_ - m (J)Ljava/util/function/IntSupplier; method_17604 func_219191_c - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2596;)V method_18702 sendToAllTracking - m (Lnet/minecraft/class_2818;)V method_20461 func_230207_b_ - m ()V method_18727 tickEntityTracker - m (Lnet/minecraft/class_3193;Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_20460 func_219193_a_ - m (Lorg/apache/commons/lang3/mutable/MutableBoolean;Lnet/minecraft/class_2791;)V method_20578 func_222959_a - m (Lnet/minecraft/class_1923;)Ljava/util/concurrent/CompletableFuture; method_20619 chunkLoad - m (Lnet/minecraft/class_1923;ZLnet/minecraft/class_3222;)Z method_18707 func_219192_a_ - m (Lnet/minecraft/class_3222;[Lnet/minecraft/class_2596;Lnet/minecraft/class_2818;)V method_18715 sendChunkData - m (Lnet/minecraft/class_2806;I)Lnet/minecraft/class_2806; method_17229 func_219205_a - m (Ljava/util/List;)Lcom/mojang/datafixers/util/Either; method_18711 func_219208_a_ - m ()I method_17260 getLoadedChunkCount - m (Lnet/minecraft/class_1923;)Ljava/util/concurrent/CompletableFuture; method_17247 func_219188_b - m (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; method_20580 func_222961_b - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1923;[Lnet/minecraft/class_2596;ZZ)V method_17241 setChunkLoadedAtClient - m ()Lnet/minecraft/class_4153; method_19488 getPointOfInterestManager - m (Lnet/minecraft/class_3898;)Lit/unimi/dsi/fastutil/longs/LongSet; method_17238 func_219203_a - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;Lcom/mojang/datafixers/util/Either;)Ljava/util/concurrent/CompletionStage; method_17224 func_219235_a_ - m (Lnet/minecraft/class_1923;ILjava/util/function/IntFunction;)Ljava/util/concurrent/CompletableFuture; method_17220 func_219236_a - m (Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_17230 func_219242_b - m (Lnet/minecraft/class_1923;I[Lnet/minecraft/class_2596;Lnet/minecraft/class_3222;)V method_17219 func_219224_a_ - m (Lnet/minecraft/class_1923;)Z method_27055 func_241090_h_ - m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)V method_17252 func_219228_d_ - m (Lnet/minecraft/class_2818;)Ljava/lang/Integer; method_21622 func_225401_d - m (Lnet/minecraft/class_3898;JILnet/minecraft/class_3193;I)Lnet/minecraft/class_3193; method_17240 func_219240_a - m (Lnet/minecraft/class_1297;)V method_18716 untrack - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2806$class_2808;)B method_27053 func_241088_a_ - m (Lnet/minecraft/class_3898;)Lnet/minecraft/class_3218; method_18721 func_219181_b - m (Lnet/minecraft/class_3193;)V method_20583 func_222965_e - m (Lnet/minecraft/class_3193;)Lnet/minecraft/class_2791; method_20584 func_222974_f - m ()Lnet/minecraft/class_3898$class_3216; method_17263 getTicketManager - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2596;)V method_18717 sendToTrackingAndSelf - m (Lnet/minecraft/class_1923;)Z method_18724 isOutsideSpawningRadius - m (Lnet/minecraft/class_1923;)Ljava/lang/String; method_20442 func_230218_h_ - m (Lnet/minecraft/class_2806;)Ljava/lang/String; method_24308 func_230197_a_ - m ([Lnet/minecraft/class_2596;Lnet/minecraft/class_2818;Lnet/minecraft/class_3222;)V method_17243 func_219233_a_ - m (Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; method_17236 func_219244_a - m (Ljava/util/function/BooleanSupplier;)V method_17233 tick - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2818;)Lcom/mojang/datafixers/util/Either; method_18193 func_219196_a_ - m (Lnet/minecraft/class_3193;Ljava/util/concurrent/CompletableFuture;JLnet/minecraft/class_2791;)V method_18843 func_219185_a - m (J)Lnet/minecraft/class_3193; method_17255 func_219220_a - m (Lnet/minecraft/class_2818;)Ljava/lang/Integer; method_21621 func_225405_d_ - m (Lnet/minecraft/class_2791;)Lnet/minecraft/class_2818; method_20581 func_222955_c_ - m (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; method_17235 func_219179_a - m (Lnet/minecraft/class_1923;II)I method_18703 getChunkDistance - m (I)Lnet/minecraft/class_2806; method_17254 func_219218_b - m (I)V method_17214 setViewDistance - m (J)I method_17605 func_219223_d - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_1297;)D method_18704 getDistanceSquaredToChunk - m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)V method_17259 func_219216_e_ - m (Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_17222 func_219239_b_ - m ()Ljava/lang/Iterable; method_17264 getLoadedChunksIterable - m (Lnet/minecraft/class_1297;)V method_18701 track - m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)V method_20579 func_222962_a_ - m (Lnet/minecraft/class_1923;)V method_20443 func_230219_i_ - m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2487; method_17979 loadChunkData - m (JILnet/minecraft/class_3193;I)Lnet/minecraft/class_3193; method_17217 setChunkLevel - m (Lnet/minecraft/class_1923;)V method_20441 func_219209_c - m (Lnet/minecraft/class_1923;)V method_27054 func_241089_g_ - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_3222;Z)I method_18706 func_219173_a - m (Lnet/minecraft/class_3193;Lnet/minecraft/class_2791;)Ljava/util/concurrent/CompletableFuture; method_19534 func_222954_b_ - m (Lnet/minecraft/class_3193;)Lnet/minecraft/class_3193$class_3194; method_17251 func_230215_d_ - f I field_18239 MAX_LOADED_LEVEL - f Ljava/util/concurrent/atomic/AtomicInteger; field_17230 field_219268_v - f Lnet/minecraft/class_4153; field_18808 pointOfInterestManager - f Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; field_18807 chunksToUnload - f Ljava/util/Queue; field_19343 saveTasks - f Lnet/minecraft/class_3485; field_17706 templateManager - f Lnet/minecraft/class_3227; field_17215 lightManager - f Ljava/util/function/Supplier; field_17705 field_219259_m - f Lnet/minecraft/class_3210; field_18241 playerGenerationTracker - f Lnet/minecraft/class_3906; field_17226 field_219265_s - f Ljava/io/File; field_17707 dimensionDirectory - f Lit/unimi/dsi/fastutil/longs/LongSet; field_17221 unloadableChunks - f Lnet/minecraft/class_1255; field_17216 mainThread - f Lnet/minecraft/class_3900; field_17223 field_219263_q - f Lnet/minecraft/class_3906; field_17224 field_219264_r - f Lnet/minecraft/class_3898$class_3216; field_17228 ticketManager - f Lit/unimi/dsi/fastutil/longs/Long2ByteMap; field_23786 field_241087_z_ - f Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; field_17213 loadedChunks - f Lit/unimi/dsi/fastutil/longs/LongSet; field_18307 loadedPositions - f Lorg/apache/logging/log4j/Logger; field_17212 LOGGER - f Lnet/minecraft/class_2794; field_17218 generator - f Lnet/minecraft/class_3949; field_17442 field_219266_t - f Z field_17222 immutableLoadedChunksDirty - f Lnet/minecraft/class_3218; field_17214 world - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_18242 entities - f I field_18243 viewDistance - f Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; field_17220 immutableLoadedChunks -c net/minecraft/class_3898$class_3208 net/minecraft/world/server/ChunkManager$EntityTracker - m ()I method_22844 func_229843_b_ - m ()I hashCode hashCode - m (Lnet/minecraft/class_3898$class_3208;)Lnet/minecraft/class_3231; method_18737 func_219393_c - m ()V method_18728 removeAllTrackers - m (Lnet/minecraft/class_3222;)V method_18736 updateTrackingState - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_3898$class_3208;)Lnet/minecraft/class_1297; method_18731 func_219394_a - m (Lnet/minecraft/class_2596;)V method_18734 sendToTrackingAndSelf - m (Lnet/minecraft/class_3898$class_3208;)Lnet/minecraft/class_4076; method_18735 func_219398_b - m (I)I method_27906 func_241091_a_ - m (Ljava/util/List;)V method_18729 updateTrackingState - m (Lnet/minecraft/class_2596;)V method_18730 sendToAllTracking - m (Lnet/minecraft/class_3898$class_3208;Lnet/minecraft/class_4076;)Lnet/minecraft/class_4076; method_18732 func_219395_a - m (Lnet/minecraft/class_3222;)V method_18733 removeTracker - f Lnet/minecraft/class_3898; field_18245 field_219401_a - f Ljava/util/Set; field_18250 trackingPlayers - f Lnet/minecraft/class_1297; field_18247 entity - f Lnet/minecraft/class_3231; field_18246 entry - f Lnet/minecraft/class_4076; field_18249 pos - f I field_18248 range -c net/minecraft/class_3898$class_3216 net/minecraft/world/server/ChunkManager$ProxyTicketManager - f Lnet/minecraft/class_3898; field_17443 field_219390_a -c net/minecraft/class_3898$2 net/minecraft/world/server/ChunkManager$2 - m ()Ljava/lang/String; toString toString - f Lcom/mojang/datafixers/util/Either; field_17237 field_219063_f - f I field_17234 field_219060_c - f I field_17235 field_219061_d - f Lnet/minecraft/class_3898; field_17238 field_219064_g - f I field_17233 field_219059_a - f I field_17236 field_219062_e -c net/minecraft/class_3898$1 net/minecraft/world/server/ChunkManager$1 - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_1923; field_17231 field_219057_a - f Lnet/minecraft/class_3898; field_17232 field_219058_c -c net/minecraft/class_3899 net/minecraft/world/chunk/ChunkTaskPriorityQueue - m ()Lit/unimi/dsi/fastutil/longs/LongSet; method_21679 getLoadedChunks - m (ILnet/minecraft/class_1923;I)V method_17272 func_219407_a - m ()Ljava/util/stream/Stream; method_17606 func_219417_a - m (Ljava/util/Optional;JI)V method_17274 addTaskToChunk - m (J)V method_17612 func_219414_c - m (JZ)V method_17609 clearChunkFromQueue - m (I)Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; method_17271 func_219415_a - m (J)Ljava/util/List; method_17273 func_219410_d - m (JLjava/util/Optional;)Lcom/mojang/datafixers/util/Either; method_17608 func_219408_a - m (J)Lcom/mojang/datafixers/util/Either; method_17611 func_219409_b - m (Ljava/util/Optional;)Z method_17610 func_219413_a - m (J)Ljava/lang/Runnable; method_17607 func_219418_a - m ()Ljava/lang/String; toString toString - m (J)Ljava/util/List; method_17277 func_219411_e - f Lit/unimi/dsi/fastutil/longs/LongSet; field_17444 loadedChunks - f Ljava/util/List; field_17243 chunkPriorityQueue - f I field_17445 priority - f Ljava/lang/String; field_17247 queueName - f I field_17244 maxLoaded - f I field_17241 MAX_LOADED_LEVELS -c net/minecraft/class_3900 net/minecraft/world/chunk/ChunkTaskPriorityQueueSorter - m ()V close close - m (Ljava/lang/Long;)Ljava/lang/String; method_21681 func_225398_a - m (Ljava/util/function/IntSupplier;Lnet/minecraft/class_1923;ILjava/util/function/IntConsumer;)V method_17285 func_219085_a - m (Lnet/minecraft/class_3906;Lcom/mojang/datafixers/util/Either;)Ljava/util/concurrent/CompletableFuture; method_17619 func_219092_a - m (Lnet/minecraft/class_3906;JZLjava/lang/Runnable;)V method_17616 func_219082_a - m (Lnet/minecraft/class_3899;Lnet/minecraft/class_3906;)V method_17630 func_219078_a - m (Lnet/minecraft/class_3906;ZLnet/minecraft/class_3900$class_3946;)V method_17624 func_219071_a - m (Lnet/minecraft/class_3906;Lnet/minecraft/class_3906;)Lnet/minecraft/class_3847$class_3907; method_17617 func_219080_a - m (Lnet/minecraft/class_3899;Lnet/minecraft/class_3906;)V method_17635 func_219079_b - m (Ljava/lang/Runnable;Lnet/minecraft/class_3906;)Ljava/lang/Runnable; method_17628 func_219072_a - m (Lnet/minecraft/class_3899;Lnet/minecraft/class_3906;Ljava/util/List;)V method_17631 func_219088_a - m (Lnet/minecraft/class_3906;Lnet/minecraft/class_3906;Z)V method_17618 func_219090_a - m (ILnet/minecraft/class_3906;)Lnet/minecraft/class_3899; method_17613 func_219084_a - m (Lnet/minecraft/class_3193;Ljava/lang/Runnable;)Lnet/minecraft/class_3900$class_3946; method_17629 func_219081_a - m (ILnet/minecraft/class_1923;ILnet/minecraft/class_3899;)V method_17280 func_219076_a - m (Lnet/minecraft/class_3906;JLjava/lang/Runnable;Z)V method_17615 func_219074_a - m (Ljava/lang/Runnable;JZ)Lnet/minecraft/class_3900$class_3947; method_17627 func_219073_a - m (Lnet/minecraft/class_3906;Z)Lnet/minecraft/class_3906; method_17622 func_219087_a - m (Lnet/minecraft/class_3906;Lnet/minecraft/class_3906;)V method_17633 func_219089_b - m (Ljava/util/Map$Entry;)Ljava/lang/String; method_21682 func_225397_a - m (Lnet/minecraft/class_3906;Lnet/minecraft/class_3900$class_3947;)V method_17621 func_219075_a - m ()Ljava/lang/String; method_21680 func_225396_a - m (Ljava/lang/Runnable;Lnet/minecraft/class_3906;)V method_17634 func_219083_b - m (Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture; method_17625 func_219077_a - m (Lnet/minecraft/class_3906;)Lnet/minecraft/class_3899; method_17632 getQueue - m (Ljava/lang/Runnable;JLjava/util/function/IntSupplier;)Lnet/minecraft/class_3900$class_3946; method_17626 func_219069_a - m (Lnet/minecraft/class_3906;Ljava/util/function/Function;JLjava/util/function/IntSupplier;Z)V method_17282 func_219067_a - m (Lnet/minecraft/class_3906;Ljava/util/function/IntSupplier;JLjava/util/function/Function;Z)V method_17620 func_219070_a - m (Lnet/minecraft/class_3906;)Lnet/minecraft/class_3906; method_17614 func_219091_a - m (Lnet/minecraft/class_3906;ZLnet/minecraft/class_3906;)Lnet/minecraft/class_3847$class_3907; method_17623 func_219086_a - f Lnet/minecraft/class_3846; field_17251 sorter - f Ljava/util/Set; field_17250 field_219095_c - f Ljava/util/Map; field_17249 queues - f Lorg/apache/logging/log4j/Logger; field_17248 LOGGER -c net/minecraft/class_3900$class_3947 net/minecraft/world/chunk/ChunkTaskPriorityQueueSorter$RunnableEntry - m (Lnet/minecraft/class_3900$class_3947;)Ljava/lang/Runnable; method_17640 func_219431_b - m (Lnet/minecraft/class_3900$class_3947;)Z method_17641 func_219432_c - m (Lnet/minecraft/class_3900$class_3947;)J method_17639 func_219433_a - f J field_17450 field_219435_b - f Ljava/lang/Runnable; field_17449 field_219434_a - f Z field_17451 field_219436_c -c net/minecraft/class_3900$class_3946 net/minecraft/world/chunk/ChunkTaskPriorityQueueSorter$FunctionEntry - m (Lnet/minecraft/class_3900$class_3946;)Ljava/util/function/Function; method_17636 func_219425_a - m (Lnet/minecraft/class_3900$class_3946;)J method_17637 func_219427_b - m (Lnet/minecraft/class_3900$class_3946;)Ljava/util/function/IntSupplier; method_17638 func_219426_c - f Ljava/util/function/IntSupplier; field_17448 field_219430_c - f J field_17447 chunkPos - f Ljava/util/function/Function; field_17446 task -c net/minecraft/class_3900$1 net/minecraft/world/chunk/ChunkTaskPriorityQueueSorter$1 -c net/minecraft/class_3196 net/minecraft/world/chunk/ChunkDistanceGraph - m (JIZ)V method_14027 updateSourceLevel - m (J)I method_14028 getSourceLevel -c net/minecraft/class_2265 net/minecraft/util/math/ColumnPos - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/String; toString toString - f I field_10707 z - f I field_10708 x -c net/minecraft/class_3201 net/minecraft/server/management/DemoPlayerInteractionManager - m ()V method_14031 sendDemoReminder - f Z field_13889 demoTimeExpired - f Z field_13890 displayedIntro - f I field_13887 gameModeTicks - f I field_13888 demoEndedReminder -c net/minecraft/class_3204 net/minecraft/world/server/TicketManager - m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_20444 releaseWithLevel - m (Lnet/minecraft/class_3228;)Z method_14040 func_219369_a - m ()I method_17649 func_223501_d - m ()V method_14045 tick - m (Lnet/minecraft/class_3204;JLnet/minecraft/class_3228;)V method_17644 func_229845_a_ - m (J)Z method_20800 isOutsideSpawningRadius - m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_17292 release - m (Lnet/minecraft/class_3204;)Lnet/minecraft/class_3900; method_17651 func_229847_d_ - m (JLnet/minecraft/class_3228;)V method_17645 release - m (I)V method_14049 setViewDistance - m ()Ljava/lang/String; method_21683 func_225412_c - m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3222;)V method_14051 removePlayer - m (Lnet/minecraft/class_3898;Lnet/minecraft/class_3193;)V method_15891 func_219343_a - m (J)Lnet/minecraft/class_4706; method_14041 func_229851_g_ - m (Lnet/minecraft/class_3204;)Ljava/util/concurrent/Executor; method_17653 func_229849_e_ - m (J)Lnet/minecraft/class_4706; method_14050 getTicketSet - m (JILnet/minecraft/class_3193;I)Lnet/minecraft/class_3193; method_14053 setChunkLevel - m (J)V method_17656 func_219342_h - m (Lnet/minecraft/class_3204;)Lnet/minecraft/class_3906; method_17650 func_223493_c - m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_17291 register - m (J)Z method_14035 contains - m (Lnet/minecraft/class_3228;)Z method_14037 func_219370_b - m (J)Ljava/lang/String; method_21623 func_225413_c - m (Lnet/minecraft/class_3204;JLnet/minecraft/class_3228;)V method_17647 func_223500_a - m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_17290 registerWithLevel - m (Lnet/minecraft/class_3204;)Lit/unimi/dsi/fastutil/longs/LongSet; method_17654 func_229850_f_ - m (JLnet/minecraft/class_3228;)V method_14042 register - m (J)Lnet/minecraft/class_3193; method_14038 getChunkHolder - m (JLcom/mojang/datafixers/util/Either;)V method_17642 func_219363_a - m (Lnet/minecraft/class_4706;)I method_14046 getLevel - m ()I method_14052 getSpawningChunksCount - m (Lnet/minecraft/class_3898;)Z method_15892 processUpdates - m (Lnet/minecraft/class_3204;)Ljava/util/Set; method_18745 func_229853_h_ - m (Lnet/minecraft/class_3204;)Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; method_17643 func_219330_a - m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3222;)V method_14048 updatePlayerPosition - m (J)Lit/unimi/dsi/fastutil/objects/ObjectSet; method_17655 func_219361_f - m (Lnet/minecraft/class_3204;)Lnet/minecraft/class_3906; method_17648 func_229846_b_ - m ()V method_17652 func_219348_f - m (Lnet/minecraft/class_1923;Z)V method_14036 forceChunk - m (Lnet/minecraft/class_3204;)Lit/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap; method_18744 func_229852_g_ - f Lit/unimi/dsi/fastutil/longs/LongSet; field_17459 chunkPositions - f I field_17452 PLAYER_TICKET_LEVEL - f Lnet/minecraft/class_3900; field_17456 field_219384_l - f Lit/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap; field_13895 tickets - f Lnet/minecraft/class_3204$class_4077; field_18252 ticketTracker - f Lnet/minecraft/class_3906; field_17457 field_219385_m - f J field_13894 currentTime - f Lnet/minecraft/class_3204$class_3205; field_17454 playerChunkTracker - f Lorg/apache/logging/log4j/Logger; field_16211 LOGGER - f Lnet/minecraft/class_3204$class_3948; field_17455 playerTicketTracker - f Lnet/minecraft/class_3906; field_17458 field_219386_n - f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_17453 playersByChunkPos - f Ljava/util/Set; field_16210 chunkHolders - f Ljava/util/concurrent/Executor; field_17460 field_219388_p -c net/minecraft/class_3204$class_3205 net/minecraft/world/server/TicketManager$PlayerChunkTracker - m (J)Z method_14056 hasPlayerInChunk - m (JII)V method_17657 chunkLevelChanged - m ()V method_14057 processAllUpdates - f I field_17461 range - f Lnet/minecraft/class_3204; field_17462 field_215500_c - f Lit/unimi/dsi/fastutil/longs/Long2ByteMap; field_13896 chunksInRange -c net/minecraft/class_3204$class_4077 net/minecraft/world/server/TicketManager$ChunkTicketTracker - m (I)I method_18746 func_215493_a - f Lnet/minecraft/class_3204; field_18255 field_215494_a -c net/minecraft/class_3204$class_3948 net/minecraft/world/server/TicketManager$PlayerTicketTracker - m (I)Z method_17664 func_215505_c - m (JI)V method_17662 func_215506_b - m (JLnet/minecraft/class_3228;)V method_17665 func_224753_c - m (JLnet/minecraft/class_3228;)V method_17667 func_224749_d - m (JLnet/minecraft/class_3228;)V method_17661 func_224748_a - m (J)I method_17659 func_224751_d - m (JLnet/minecraft/class_3228;)V method_17663 func_224752_b - m (I)V method_17658 setViewDistance - m (I)I method_17666 func_224750_d - m ()V method_21693 func_224754_c - m (JIZZ)V method_17660 func_215504_a - f I field_17464 viewDistance - f Lit/unimi/dsi/fastutil/longs/LongSet; field_17466 field_215514_g - f Lnet/minecraft/class_3204; field_17463 field_215511_d - f Lit/unimi/dsi/fastutil/longs/Long2IntMap; field_17465 field_215513_f -c com/mojang/blaze3d/platform/GLX com/mojang/blaze3d/platform/GLX - m ()Ljava/lang/String; getOpenGLVersionString getOpenGLVersionString - m ()Ljava/lang/String; _getCpuInfo _getCpuInfo - m (Lorg/lwjgl/glfw/GLFWErrorCallbackI;)V _setGlfwErrorCallback _setGlfwErrorCallback - m ()J lambda$_initGlfw$2 func_229881_lam_ - m ()V _setupNvFogDistance _setupNvFogDistance - m (Ljava/lang/Integer;Ljava/lang/String;)V lambda$_initGlfw$0 func_229879_lam_ - m (IZ)V _init _init - m ()Ljava/lang/String; _getLWJGLVersion _getLWJGLVersion - m ()Ljava/lang/String; _getCapsString _getCapsString - m (IZZZ)V _renderCrosshair _renderCrosshair - m (I)Ljava/lang/String; getErrorString getErrorString - m (Ljava/util/HashMap;)V lambda$static$3 func_229878_lam_ - m ()Ljava/util/function/LongSupplier; _initGlfw _initGlfw - m (Lnet/minecraft/class_1041;)Z _shouldClose _shouldClose - m (Ljava/lang/Object;Ljava/util/function/Consumer;)Ljava/lang/Object; make make - m (Ljava/util/function/Supplier;)Ljava/lang/Object; make make - m (Ljava/util/List;IJ)V lambda$_initGlfw$1 func_229880_lam_ - m (Lnet/minecraft/class_1041;)I _getRefreshRate _getRefreshRate - f Ljava/lang/String; cpuInfo cpuInfo - f Ljava/util/Map; LOOKUP_MAP LOOKUP_MAP - f Ljava/lang/String; capsString capsString - f Lorg/apache/logging/log4j/Logger; LOGGER LOGGER -c net/minecraft/data/Main net/minecraft/data/Main - m ([Ljava/lang/String;)V main main - m (Ljava/nio/file/Path;Ljava/util/Collection;ZZZZZ)Lnet/minecraft/class_2403; method_4968 makeGenerator - m (Ljava/lang/String;)Ljava/nio/file/Path; method_4967 func_200263_a -c net/minecraft/world/level/ColorResolver net/minecraft/world/level/ColorResolver - m (Lnet/minecraft/class_1959;DD)I getColor getColor -c net/minecraft/class_3210 net/minecraft/world/chunk/PlayerGenerationTracker - m (Lnet/minecraft/class_3222;)V method_14087 enableGeneration - m (Lnet/minecraft/class_3222;)V method_14086 disableGeneration - m (JLnet/minecraft/class_3222;Z)V method_14085 addPlayer - m (Lnet/minecraft/class_3222;)Z method_21715 cannotGenerateChunks - m (J)Ljava/util/stream/Stream; method_14083 getGeneratingPlayers - m (JJLnet/minecraft/class_3222;)V method_14081 updatePlayerPosition - m (JLnet/minecraft/class_3222;)V method_14084 removePlayer - m (Lnet/minecraft/class_3222;)Z method_14082 canGeneratePlayer - f Lit/unimi/dsi/fastutil/objects/Object2BooleanMap; field_13910 generatingPlayers -c net/minecraft/class_4079 net/minecraft/util/SectionDistanceGraph - m (J)I method_18749 getSourceLevel - m (JIZ)V method_18750 updateSourceLevel -c net/minecraft/class_5322 net/minecraft/entity/player/SpawnLocationHelper - m (Lnet/minecraft/class_3218;IIZ)Lnet/minecraft/class_2338; method_29194 func_241092_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1923;Z)Lnet/minecraft/class_2338; method_29196 func_241094_a_ -c net/minecraft/class_3215 net/minecraft/world/server/ServerChunkProvider - m (IILnet/minecraft/class_2806;Z)Ljava/util/concurrent/CompletableFuture; method_14098 func_222867_d - m (Lnet/minecraft/class_3215;)Ljava/lang/Thread; method_19489 func_217212_a - m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_17300 releaseTicket - m (Lnet/minecraft/class_3215;)Lnet/minecraft/class_3218; method_24309 func_230220_b_ - m (IILnet/minecraft/class_2806;Z)Ljava/util/concurrent/CompletableFuture; method_17299 func_217232_b - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2596;)V method_18754 sendToAllTracking - m (I)V method_14144 setViewDistance - m (J)Lnet/minecraft/class_3193; method_14131 func_217213_a - m (Lnet/minecraft/class_2791;)Lnet/minecraft/class_2791; method_16150 func_222874_a - m (Lnet/minecraft/class_1923;)Ljava/lang/String; method_23273 getDebugInfo - m (ZLnet/minecraft/class_3193$class_3724;)Lnet/minecraft/class_2791; method_16173 func_222870_a - m (Lnet/minecraft/class_3222;)V method_14096 updatePlayerPosition - m ()Lnet/minecraft/class_1948$class_5262; method_27908 func_241101_k_ - m (Ljava/util/function/BooleanSupplier;)V method_12127 tick - m ()Z method_16155 func_217235_l - m (Lnet/minecraft/class_1297;)V method_18755 track - m ()Lnet/minecraft/class_26; method_17981 getSavedData - m ()Lnet/minecraft/class_4153; method_19493 getPointOfInterestManager - m ()I method_21694 func_225314_f - m (IILnet/minecraft/class_2806;Z)Ljava/util/concurrent/CompletableFuture; method_14134 func_217233_c - m (Lnet/minecraft/class_3230;Lnet/minecraft/class_1923;ILjava/lang/Object;)V method_17297 registerTicket - m ()I method_17301 getLoadedChunksCount - m (Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletionStage; method_14159 func_217211_a - m ()Z method_19492 driveOneTask - m ()Lnet/minecraft/class_3227; method_17293 getLightManager - m (Lnet/minecraft/class_3215;)Z method_19490 func_230221_c_ - m ()Lnet/minecraft/class_2794; method_12129 getChunkGenerator - m ()Lnet/minecraft/class_1937; method_16434 getWorld - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2596;)V method_18751 sendToTrackingAndSelf - m ()I method_14151 getLoadedChunkCount - m (JLjava/util/function/Function;)Z method_20585 isChunkLoaded - m (Lnet/minecraft/class_3215;)Lnet/minecraft/class_3227; method_19491 func_230222_d_ - m (Lnet/minecraft/class_4076;Lnet/minecraft/class_1944;)V method_14118 func_223437_a - m (Lnet/minecraft/class_3193;I)Z method_18752 func_217224_a - m (JLjava/util/function/Consumer;)V method_27907 func_241098_a_ - m ()V method_14161 tickChunks - m (Lnet/minecraft/class_1297;)V method_18753 untrack - m (JZLnet/minecraft/class_1948$class_5262;ZILnet/minecraft/class_3193;)V method_20801 func_241099_a_ - m (IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2791; method_20586 func_222868_e - m (Lnet/minecraft/class_2338;)V method_14128 markBlockChanged - m ()V method_20587 invalidateCaches - m (Z)V method_17298 save - m (JLnet/minecraft/class_2791;Lnet/minecraft/class_2806;)V method_21738 func_225315_a - f J field_13928 lastGameTime - f Lnet/minecraft/class_3227; field_13921 lightManager - f Lnet/minecraft/class_3215$class_4212; field_18809 executor - f Z field_13941 spawnPassives - f Lnet/minecraft/class_1948$class_5262; field_24455 field_241097_p_ - f Lnet/minecraft/class_3204; field_17252 ticketManager - f [Lnet/minecraft/class_2806; field_19336 recentStatuses - f Lnet/minecraft/class_2794; field_13939 generator - f Ljava/util/List; field_13934 field_217239_c - f [J field_19335 recentPositions - f Ljava/lang/Thread; field_17253 mainThread - f [Lnet/minecraft/class_2791; field_19337 recentChunks - f Z field_13929 spawnHostiles - f Lnet/minecraft/class_26; field_17708 savedData - f Lnet/minecraft/class_3898; field_17254 chunkManager - f Lnet/minecraft/class_3218; field_13945 world -c net/minecraft/class_3215$1 net/minecraft/world/server/ServerChunkProvider$1 -c net/minecraft/class_3215$class_4212 net/minecraft/world/server/ServerChunkProvider$ChunkExecutor - f Lnet/minecraft/class_3215; field_18810 field_213181_a -c net/minecraft/class_3213 net/minecraft/world/server/ServerBossInfo - m ()Z method_14093 isVisible - m ()Ljava/util/Collection; method_14092 getPlayers - m (Lnet/minecraft/class_3222;)V method_14088 addPlayer - m (Lnet/minecraft/class_2629$class_2630;)V method_14090 sendUpdate - m (Lnet/minecraft/class_3222;)V method_14089 removePlayer - m ()V method_14094 removeAllPlayers - m (Z)V method_14091 setVisible - f Ljava/util/Set; field_13913 players - f Ljava/util/Set; field_13914 readOnlyPlayers - f Z field_13912 visible -c net/minecraft/class_3218 net/minecraft/world/server/ServerWorld - m ()F method_30630 func_242107_v - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_29201 func_241122_a_ - m (Lnet/minecraft/class_3222;)V method_18771 addPlayer - m (Ljava/io/Writer;Ljava/lang/Iterable;)V method_21624 dumpEntities - m ()Lnet/minecraft/class_2995; method_14170 getScoreboard - m (Lnet/minecraft/class_1299;Ljava/util/function/Predicate;)Ljava/util/List; method_18198 getEntities - m (Lnet/minecraft/class_1297;)Z method_18768 summonEntity - m ()Lnet/minecraft/class_2881; method_29198 func_241110_C_ - m (Lnet/minecraft/class_1297;)Ljava/lang/String; method_18781 func_241134_p_ - m (IIZ)Z method_17988 forceChunk - m (Lnet/minecraft/class_1297;)V method_18772 onEntityRemoved - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_3765; method_19502 findRaid - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)V method_18763 tickPassenger - m (Lnet/minecraft/class_3341;)V method_23658 clearBlockEvents - m (Lnet/minecraft/class_1297;)V method_18762 updateEntity - m ()V method_23660 wakeUpAllPlayers - m ()Lnet/minecraft/class_3215; method_14178 getChunkProvider - m ()Ljava/lang/String; toString toString - m (Ljava/util/UUID;)Lnet/minecraft/class_1297; method_14190 getEntityByUuid - m (Lnet/minecraft/class_1297;)V method_18769 addFromAnotherDimension - m (Lnet/minecraft/class_1297;)V method_18780 removeFromChunk - m (Lnet/minecraft/class_1959;Lnet/minecraft/class_2338;II)Lnet/minecraft/class_2338; method_24500 func_241116_a_ - m (Lnet/minecraft/class_1309;)Z method_18199 func_241115_a_ - m (Lnet/minecraft/class_3222;)V method_18213 addNewPlayer - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19536 func_241130_c_ - m (Lnet/minecraft/class_2394;DDDIDDDD)I method_14199 spawnParticle - m (Lnet/minecraft/class_2338;)V method_19501 func_242101_D - m ()V method_14197 resetUpdateEntityTick - m (Lnet/minecraft/class_1297;)Z method_14175 addEntity0 - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_29204 func_244430_b - m (Lnet/minecraft/class_3222;)V method_18773 func_241131_g_ - m (Lnet/minecraft/class_2338;F)V method_8554 func_241124_a__ - m (Lnet/minecraft/class_3611;)Z method_14194 func_205774_a - m (Lnet/minecraft/class_1297;)Ljava/lang/String; method_24310 func_241133_o_ - m (Lnet/minecraft/class_1297;)V method_18774 removeEntity - m ()Lnet/minecraft/class_3485; method_14183 getStructureTemplateManager - m (J)V method_29199 setDayTime - m (Lnet/minecraft/class_1297;)V method_18767 chunkCheck - m ()V method_29203 func_241126_b_ - m ()Lnet/minecraft/class_26; method_17983 getSavedData - m (Lnet/minecraft/class_1954;)V method_14171 tickFluid - m (Lnet/minecraft/class_1959;Lnet/minecraft/class_1959;)Z method_31071 func_242102_a - m (Lnet/minecraft/class_2818;)V method_18764 onChunkUnloading - m (Lnet/minecraft/class_2248;)Z method_14198 func_205341_a - m (Lnet/minecraft/class_2338;I)Z method_19497 func_241119_a_ - m ()V method_14192 sendQueuedBlockEvents - m (Lnet/minecraft/class_3222;)V method_18215 addRespawnedPlayer - m (Ljava/lang/String;)Lnet/minecraft/class_22; method_17989 func_242104_b - m ()V method_8448 updateAllPlayersSleepingFlag - m (Lnet/minecraft/class_2338;)Z method_19503 hasRaid - m (Lnet/minecraft/class_1919;)Z method_14174 fireBlockEvent - m ()Lnet/minecraft/class_3767; method_19495 getRaids - m ()Lnet/minecraft/class_1946; method_14173 getDefaultTeleporter - m (Lnet/minecraft/server/MinecraftServer;)Lnet/minecraft/class_26; method_17985 func_241120_a_ - m (IIZZ)V method_27910 func_241113_a_ - m (Lnet/minecraft/class_1297;)Z method_18777 hasDuplicateEntity - m (Lnet/minecraft/class_3222;)Z method_18775 func_241132_h_ - m ()Z method_28125 func_241109_A_ - m (Ljava/util/function/Predicate;)Ljava/util/List; method_18766 getPlayers - m ()Ljava/lang/Iterable; method_27909 func_241136_z_ - m (ZZ)V method_29202 func_241123_a_ - m (Lnet/minecraft/class_4076;)Z method_20588 isVillage - m (Lnet/minecraft/class_1297;)Z method_18214 addEntityIfNotDuplicate - m (Ljava/util/UUID;)Lnet/minecraft/class_1297; method_30735 func_242105_c - m ()Lnet/minecraft/class_1949; method_14179 getPendingFluidTicks - m (Ljava/util/function/BooleanSupplier;)V method_18765 tick - m (Lnet/minecraft/class_3218;)V method_29200 func_241121_a_ - m ()Lnet/minecraft/class_1949; method_14196 getPendingBlockTicks - m ()Lnet/minecraft/class_3767; method_17987 func_241125_ai_ - m (Ljava/nio/file/Path;)V method_21625 writeDebugInfo - m ()Ljava/util/List; method_18776 getDragons - m (Lnet/minecraft/class_3195;Lnet/minecraft/class_2338;IZ)Lnet/minecraft/class_2338; method_8487 func_241117_a_ - m (Lnet/minecraft/class_3341;Lnet/minecraft/class_1919;)Z method_23659 func_241118_a_ - m ()Lnet/minecraft/class_3222; method_18779 getRandomPlayer - m (Lnet/minecraft/class_1954;)V method_14189 tickBlock - m (Lnet/minecraft/class_3222;)V method_18207 addDuringCommandTeleport - m ()V method_14188 saveLevel - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19535 func_217476_c_ - m (Lnet/minecraft/class_2818;I)V method_18203 tickEnvironment - m ()Lnet/minecraft/class_5138; method_27056 func_241112_a_ - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_2394;ZDDDIDDDD)Z method_14166 spawnParticle - m (Lnet/minecraft/class_3222;)V method_18770 removePlayer - m ()Lnet/minecraft/class_4153; method_19494 getPointOfInterestManager - m (Lnet/minecraft/class_3536;ZZ)V method_14176 save - m (Lnet/minecraft/class_2338;)Z method_19500 isVillage - m ()Lnet/minecraft/class_2338; method_27911 getSpawnPoint - m (Lnet/minecraft/class_1297;)V method_18778 onEntityAdded - m (Lnet/minecraft/class_4151;Lnet/minecraft/class_1297;Lnet/minecraft/class_4094;)V method_19496 updateReputation - m (Lnet/minecraft/class_1297;)Z method_30736 func_242106_g - m (Lnet/minecraft/class_4076;)I method_19498 sectionsToVillage - m (Lnet/minecraft/class_3222;ZDDDLnet/minecraft/class_2596;)Z method_14191 sendPacketWithinDistance - m (Ljava/io/Writer;)V method_21626 dumpBlockEntities - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_18210 adjustPosToNearbyEntity - m ()Z method_14177 isInsideTick - m (Lnet/minecraft/class_3222;)V method_18211 addDuringPortalTeleport - m ()Lit/unimi/dsi/fastutil/longs/LongSet; method_17984 getForcedChunks - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19499 func_242103_b - m ()V method_14195 resetRainAndThunder - f Ljava/util/List; field_18261 players - f Lnet/minecraft/class_1946; field_13956 worldTeleporter - f Z field_18264 tickingEntities - f Lnet/minecraft/server/MinecraftServer; field_13959 server - f Lnet/minecraft/class_5268; field_24456 field_241103_E_ - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_17915 entitiesById - f Ljava/util/List; field_25141 field_241104_N_ - f Lnet/minecraft/class_3767; field_18811 raids - f Lorg/apache/logging/log4j/Logger; field_13952 LOGGER - f Z field_13955 allPlayersSleeping - f Lit/unimi/dsi/fastutil/objects/ObjectLinkedOpenHashSet; field_13950 blockEventQueue - f Lnet/minecraft/class_3215; field_24624 field_241102_C_ - f Lnet/minecraft/class_2881; field_25142 field_241105_O_ - f Lnet/minecraft/class_1949; field_13949 pendingBlockTicks - f I field_13948 updateEntityTick - f Ljava/util/Set; field_18262 navigations - f Lnet/minecraft/class_5138; field_23787 field_241106_P_ - f Z field_13953 insideTick - f Z field_25143 field_241107_Q_ - f Lnet/minecraft/class_1949; field_13951 pendingFluidTicks - f Z field_13957 disableLevelSaving - f Ljava/util/Map; field_13960 entitiesByUuid - f Ljava/util/Queue; field_18260 entitiesToAdd - f Lnet/minecraft/class_2338; field_25144 field_241108_a_ -c net/minecraft/class_3231 net/minecraft/world/TrackedEntity - m (Lnet/minecraft/class_2596;)V method_18758 sendPacket - m ()V method_18761 updateEncodedPosition - m ()V method_14306 sendMetadata - m ()Lnet/minecraft/class_243; method_18759 getDecodedPosition - m ()V method_18756 tick - m (Lnet/minecraft/class_3222;)V method_14302 untrack - m (Ljava/util/function/Consumer;)V method_18757 sendSpawnPackets - m (Lnet/minecraft/class_3222;)V method_18760 track - f Ljava/util/List; field_14045 passengers - f Lorg/apache/logging/log4j/Logger; field_14041 LOGGER - f Z field_14036 onGround - f I field_14037 updateFrequency - f Z field_14039 sendVelocityUpdates - f I field_14047 encodedRotationPitch - f I field_14060 encodedRotationYaw - f I field_14059 encodedRotationYawHead - f J field_14035 encodedPosY - f J field_14050 encodedPosX - f J field_14048 encodedPosZ - f Lnet/minecraft/class_1297; field_14049 trackedEntity - f I field_14043 ticksSinceAbsoluteTeleport - f I field_14040 updateCounter - f Lnet/minecraft/class_3218; field_18258 world - f Z field_14051 riding - f Lnet/minecraft/class_243; field_18278 velocity - f Ljava/util/function/Consumer; field_18259 packetConsumer -c net/minecraft/class_3225 net/minecraft/server/management/PlayerInteractionManager - m (Lnet/minecraft/class_1934;)V method_30118 setGameType - m ()Z method_14268 isCreative - m (Lnet/minecraft/class_1934;)V method_14260 initializeGameType - m (Lnet/minecraft/class_1934;Lnet/minecraft/class_1934;)V method_14261 func_241820_a - m (Lnet/minecraft/class_2338;)Z method_14266 tryHarvestBlock - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_14256 processRightClick - m (Lnet/minecraft/class_3218;)V method_14259 setWorld - m ()Lnet/minecraft/class_1934; method_14257 getGameType - m ()Lnet/minecraft/class_1934; method_30119 func_241815_c_ - m ()Z method_14267 survivalOrAdventure - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;I)F method_21716 func_229859_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2846$class_2847;Ljava/lang/String;)V method_21717 func_229860_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2846$class_2847;Lnet/minecraft/class_2350;I)V method_14263 func_225416_a - m ()V method_14264 tick - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;Lnet/minecraft/class_1268;Lnet/minecraft/class_3965;)Lnet/minecraft/class_1269; method_14262 func_219441_a - f Lnet/minecraft/class_3218; field_14007 world - f Z field_20328 receivedFinishDiggingPacket - f Lnet/minecraft/class_1934; field_14005 gameType - f I field_20326 initialDamage - f Lnet/minecraft/class_2338; field_20329 delayedDestroyPos - f Lorg/apache/logging/log4j/Logger; field_20325 field_225418_c - f Lnet/minecraft/class_1934; field_25715 field_241813_e_ - f Lnet/minecraft/class_2338; field_20327 destroyPos - f Z field_14003 isDestroyingBlock - f I field_20330 initialBlockDamage - f I field_20331 durabilityRemainingOnBlock - f Lnet/minecraft/class_3222; field_14008 player - f I field_14000 ticks -c net/minecraft/class_3222 net/minecraft/entity/player/ServerPlayerEntity - m ()Lnet/minecraft/class_2561; method_14206 getTabListDisplayName - m ()J method_14219 getLastActiveTime - m (Ljava/lang/String;Ljava/lang/String;[Lnet/minecraft/class_274;)V method_14227 handleTeamKill - m (Lnet/minecraft/class_4076;)V method_17668 setManagedSectionPos - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_26285 func_241147_a_ - m ()V method_14226 playerTick - m ()Lnet/minecraft/class_2985; method_14236 getAdvancements - m (Lnet/minecraft/class_2338;)Z method_26287 func_241158_g_ - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_29205 func_241148_a_ - m (I)V method_14228 func_195394_a - m ()Lnet/minecraft/class_1659; method_14238 getChatVisibility - m (Lnet/minecraft/class_2803;)V method_14213 handleClientSettings - m ()Ljava/lang/String; method_14209 getPlayerIP - m (Lnet/minecraft/class_1308;)Z method_29778 func_241155_b_ - m ()V method_14231 disconnect - m (ILnet/minecraft/class_267;)V method_14221 func_195396_a_ - m ()V method_14237 getNextWindowId - m (Lnet/minecraft/class_1923;)V method_14246 sendChunkUnload - m (Lnet/minecraft/class_2561;Lio/netty/util/concurrent/Future;)V method_14223 func_212356_a_ - m ()Z method_26282 func_241142_M_ - m ()Lnet/minecraft/class_2338; method_26280 func_241140_K_ - m (Lnet/minecraft/class_274;I)V method_14212 updateScorePoints - m ()Lnet/minecraft/class_3441; method_14253 getRecipeBook - m (Lnet/minecraft/class_3902;)V method_19504 func_241144_a_ - m (Lnet/minecraft/class_1297;)V method_14249 removeEntity - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_26286 func_241156_b_ - m ()V method_14247 closeContainer - m ()Lnet/minecraft/class_1297; method_14242 getSpectatingEntity - m ()Lnet/minecraft/class_3442; method_14248 getStats - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2338;FZZ)V method_26284 func_242111_a - m ()V method_14240 clearInvulnerableDimensionChange - m ()Lnet/minecraft/class_4076; method_14232 getManagedSectionPos - m (Lnet/minecraft/class_2183$class_2184;Lnet/minecraft/class_1297;Lnet/minecraft/class_2183$class_2184;)V method_14222 lookAt - m ()Z method_14230 canPlayersAttack - m (Lnet/minecraft/class_3218;DDDFF)V method_14251 teleport - m (Lnet/minecraft/class_1588;)Z method_26283 func_241146_a_ - m (Ljava/lang/String;Ljava/lang/String;)V method_14255 loadResourcePack - m (Lnet/minecraft/class_3222;Z)V method_14203 copyFrom - m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2556;Ljava/util/UUID;)V method_14254 func_241151_a_ - m (FFZZ)V method_14218 setEntityActionState - m ()Lnet/minecraft/class_5321; method_26281 func_241141_L_ - m ()V method_14241 updateHeldItem - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_30313 func_242110_a - m ()V method_14217 setPlayerHealthUpdated - m (Lnet/minecraft/class_1703;)V method_14204 sendContainerToPlayer - m ()F method_30631 func_242109_L - m (Lnet/minecraft/class_1297;)V method_14211 addEntity - m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_14210 func_212357_a_ - m (Lnet/minecraft/class_2586;)V method_14216 sendTileEntityUpdate - m (DZ)V method_14207 handleFalling - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2596;Lnet/minecraft/class_2596;)V method_14205 sendChunkLoad - m (Lnet/minecraft/class_3218;)V method_14245 func_205734_a - m ()Z method_14208 isInvulnerableDimensionChange - m ()V method_29779 func_241157_eT_ - m (Lnet/minecraft/class_2556;Lnet/minecraft/class_2561;Ljava/util/UUID;Lio/netty/util/concurrent/Future;)V method_14233 func_241149_a_ - m ()V method_14234 markPlayerActive - m (I)I method_14244 func_205735_q - m ()Lnet/minecraft/class_3218; method_14220 getServerWorld - m (Lnet/minecraft/class_1308;)V method_29777 func_241145_a_ - m ()Z method_14239 hasDisconnected - m (Lnet/minecraft/class_1297;)V method_14224 setSpectatingEntity - m (ILnet/minecraft/class_267;)V method_14250 func_195397_b_ - m (Lnet/minecraft/class_3218;)V method_18783 func_213846_b - m (I)V method_14252 setExperienceLevel - m ()V method_14235 addSelfToInternalCraftingInventory - f I field_13998 respawnInvulnerabilityTicks - f Lnet/minecraft/class_4076; field_13990 managedSectionPos - f Z field_13985 invulnerableDimensionChange - f I field_13973 levitatingSince - f Ljava/util/List; field_13988 entityRemoveQueue - f Lnet/minecraft/class_2985; field_13970 advancements - f Lnet/minecraft/class_5321; field_23191 field_241137_cq_ - f I field_13982 lastArmorScore - f I field_13986 currentWindowId - f I field_13978 lastExperience - f Lnet/minecraft/class_2338; field_23192 field_241138_cr_ - f Lnet/minecraft/class_1659; field_13993 chatVisibility - f Lnet/minecraft/server/MinecraftServer; field_13995 server - f F field_26353 field_242108_cn - f Lnet/minecraft/class_3244; field_13987 connection - f F field_13997 lastHealth - f Z field_13989 queuedEndExit - f Lnet/minecraft/class_243; field_13994 enteredNetherPosition - f I field_13968 lastAirScore - f J field_13976 playerLastActiveTime - f Lnet/minecraft/class_3442; field_13966 stats - f I field_13967 ping - f Lnet/minecraft/class_1297; field_13984 spectatingEntity - f Z field_13972 wasHungry - f Z field_13971 chatColours - f Lnet/minecraft/class_243; field_13992 levitationStartPos - f I field_13980 lastExperienceScore - f Z field_23193 field_241139_cs_ - f I field_13983 lastFoodScore - f I field_13979 lastFoodLevel - f Lnet/minecraft/class_3225; field_13974 interactionManager - f Lnet/minecraft/class_3441; field_13996 recipeBook - f F field_13963 lastHealthScore - f Z field_13964 disconnected - f Z field_13991 isChangingQuantityOnly - f Z field_13969 seenCredits - f Lorg/apache/logging/log4j/Logger; field_13975 LOGGER - f I field_13965 lastLevelScore -c net/minecraft/class_3228 net/minecraft/world/server/Ticket - m (J)V method_23956 setTimestamp - m ()I method_14283 getLevel - m (Ljava/lang/Object;)I compareTo compareTo - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_3228;)I method_14285 compareTo - m (J)Z method_20627 isExpired - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m ()Lnet/minecraft/class_3230; method_14281 getType - f I field_14025 level - f Ljava/lang/Object; field_14022 value - f Lnet/minecraft/class_3230; field_14023 type - f J field_14024 timestamp -c net/minecraft/class_3227 net/minecraft/world/server/ServerWorldLightManager - m (Lnet/minecraft/class_4076;)Ljava/lang/String; method_18844 func_223121_a - m (Lnet/minecraft/class_1944;Lnet/minecraft/class_4076;Lnet/minecraft/class_2804;Z)V method_14280 func_241816_b_ - m (Lnet/minecraft/class_1923;Z)V method_14278 func_215582_d - m ()V method_17303 func_215588_z_ - m (Lnet/minecraft/class_3227$class_3901;Ljava/lang/Runnable;)V method_17313 func_223119_a - m (Lnet/minecraft/class_4076;Z)Ljava/lang/String; method_18847 func_215601_b - m (Lnet/minecraft/class_1923;Z)Ljava/lang/String; method_18848 func_215591_c - m ()V close close - m ()V method_19505 func_223124_c - m (Lnet/minecraft/class_2338;)V method_14279 func_215589_c - m (Lnet/minecraft/class_1923;Z)Ljava/lang/String; method_18845 func_223126_c - m (Lnet/minecraft/class_1923;Ljava/lang/Runnable;)V method_17306 func_215597_a - m (Lnet/minecraft/class_2791;Lnet/minecraft/class_1923;)Lnet/minecraft/class_2791; method_17309 func_223122_a - m (Lnet/minecraft/class_4076;Z)V method_14273 func_215592_c - m (Lnet/minecraft/class_2791;Lnet/minecraft/class_1923;Z)V method_17312 func_223117_a - m (Lnet/minecraft/class_2338;)Ljava/lang/String; method_18846 func_215580_b - m (Lnet/minecraft/class_1923;Z)V method_20626 func_223127_d - m (Lnet/minecraft/class_2791;Z)Ljava/util/concurrent/CompletableFuture; method_17310 lightChunk - m (Lnet/minecraft/class_1923;)Ljava/lang/String; method_20624 func_223123_b - m (Lnet/minecraft/class_1923;)V method_20386 updateChunkStatus - m (I)V method_17304 func_215598_a - m (Lnet/minecraft/class_1923;)V method_20388 func_215602_c - m ()I method_20607 func_223120_e - m ()I method_20389 func_215584_e - m (IILjava/util/function/IntSupplier;Lnet/minecraft/class_3227$class_3901;Ljava/lang/Runnable;)V method_17307 func_215600_a - m ()V method_14277 func_215603_b - m (IILnet/minecraft/class_3227$class_3901;Ljava/lang/Runnable;)V method_17308 func_215586_a - m ()I method_17314 func_215599_d - m (Lnet/minecraft/class_2791;Lnet/minecraft/class_2338;)V method_14275 func_215579_a - m ()I method_20625 func_223125_d - m (Lnet/minecraft/class_1923;)Ljava/lang/String; method_20387 func_215578_b - f Lnet/minecraft/class_3846; field_17255 field_215605_b - f Lnet/minecraft/class_3898; field_17257 chunkManager - f Lorg/apache/logging/log4j/Logger; field_14020 LOGGER - f Lit/unimi/dsi/fastutil/objects/ObjectList; field_17256 field_215606_c - f I field_17260 field_215609_f - f Ljava/util/concurrent/atomic/AtomicBoolean; field_18812 field_215610_g - f Lnet/minecraft/class_3906; field_17259 field_215608_e -c net/minecraft/class_3227$class_3901 net/minecraft/world/server/ServerWorldLightManager$Phase - m (Ljava/lang/String;)Lnet/minecraft/class_3227$class_3901; valueOf valueOf - m ()[Lnet/minecraft/class_3227$class_3901; values values - f Lnet/minecraft/class_3227$class_3901; field_17261 PRE_UPDATE - f Lnet/minecraft/class_3227$class_3901; field_17262 POST_UPDATE - f [Lnet/minecraft/class_3227$class_3901; field_17263 $VALUES -c net/minecraft/class_3233 net/minecraft/world/gen/WorldGenRegion - m ()I method_14339 getMainChunkZ - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1951; method_14337 func_205334_n - m ()I method_14336 getMainChunkX - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1951; method_14340 func_205335_o - m (Lnet/minecraft/class_2338;)V method_14338 markBlockForPostprocessing - f I field_14088 field_217380_e - f J field_14087 seed - f Lnet/minecraft/class_3218; field_14093 world - f Lnet/minecraft/class_1951; field_14094 pendingFluidTickList - f I field_14090 mainChunkX - f Lnet/minecraft/class_5217; field_14097 worldInfo - f Ljava/util/Random; field_14091 random - f I field_14089 mainChunkZ - f Lnet/minecraft/class_2874; field_14096 field_241159_j_ - f Lnet/minecraft/class_4543; field_20668 biomeManager - f Lnet/minecraft/class_1951; field_14099 pendingBlockTickList - f Ljava/util/List; field_14098 chunkPrimers - f Lnet/minecraft/class_1923; field_23788 field_241160_n_ - f Lorg/apache/logging/log4j/Logger; field_14092 LOGGER - f Lnet/minecraft/class_1923; field_23789 field_241161_o_ -c net/minecraft/class_3230 net/minecraft/world/server/TicketType - m (Ljava/lang/String;Ljava/util/Comparator;)Lnet/minecraft/class_3230; method_14291 create - m (Lnet/minecraft/class_3902;Lnet/minecraft/class_3902;)I method_17316 func_219486_b - m ()J method_20629 getLifespan - m (Ljava/lang/String;Ljava/util/Comparator;I)Lnet/minecraft/class_3230; method_20628 create - m ()Ljava/util/Comparator; method_14292 getComparator - m (Lnet/minecraft/class_3902;Lnet/minecraft/class_3902;)I method_17315 func_219485_a - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_3230; field_14030 START - f Lnet/minecraft/class_3230; field_14031 FORCED - f Ljava/lang/String; field_14034 name - f Lnet/minecraft/class_3230; field_14033 PLAYER - f Lnet/minecraft/class_3230; field_17264 DRAGON - f Lnet/minecraft/class_3230; field_19347 POST_TELEPORT - f Lnet/minecraft/class_3230; field_19280 PORTAL - f Lnet/minecraft/class_3230; field_19270 LIGHT - f J field_19348 lifespan - f Ljava/util/Comparator; field_14029 typeComparator - f Lnet/minecraft/class_3230; field_14032 UNKNOWN -c net/minecraft/class_3235 net/minecraft/world/WorldGenTickList - f Ljava/util/function/Function; field_14100 tickListProvider -c net/minecraft/class_3950 net/minecraft/world/chunk/listener/IChunkStatusListenerFactory - m (I)Lnet/minecraft/class_3949; create create -c net/minecraft/class_3949 net/minecraft/world/chunk/listener/IChunkStatusListener - m ()V method_17671 stop - m (Lnet/minecraft/class_1923;)V method_17669 start - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2806;)V method_17670 statusChanged -c net/minecraft/class_3952 net/minecraft/world/chunk/listener/ChainedChunkStatusListener - m (Lnet/minecraft/class_1923;)V method_17673 func_219517_b - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2806;)V method_17674 func_219518_b - f Lnet/minecraft/class_3846; field_17473 executor - f Lnet/minecraft/class_3949; field_17472 delegate -c net/minecraft/class_3951 net/minecraft/world/chunk/listener/LoggingChunkStatusListener - m ()I method_17672 getPercentDone - f I field_17469 loadedChunks - f I field_17468 totalChunks - f J field_17470 startTime - f Lorg/apache/logging/log4j/Logger; field_17467 LOGGER - f J field_17471 nextLogTime -c net/minecraft/class_3953 net/minecraft/world/chunk/listener/TrackingChunkStatusListener - m ()I method_17677 getDiameter - m ()I method_17679 getPercentDone - m ()I method_17678 func_219523_d - m (II)Lnet/minecraft/class_2806; method_17676 getStatus - m ()V method_17675 startTracking - f I field_17479 field_219531_f - f Z field_17480 tracking - f Lnet/minecraft/class_1923; field_17476 center - f Lit/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap; field_17475 statuses - f I field_17478 positionOffset - f I field_17477 diameter - f Lnet/minecraft/class_3951; field_17474 loggingListener -c net/minecraft/class_3240 net/minecraft/client/network/handshake/ClientHandshakeNetHandler - f Lnet/minecraft/server/MinecraftServer; field_14104 server - f Lnet/minecraft/class_2535; field_14103 networkManager -c net/minecraft/class_3238 net/minecraft/network/LegacyPingHandler - m (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;)V method_14344 writeAndFlush - m (Ljava/lang/String;)Lio/netty/buffer/ByteBuf; method_14345 getStringBuffer - m (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;)V channelRead channelRead - f Lorg/apache/logging/log4j/Logger; field_14101 LOGGER - f Lnet/minecraft/class_3242; field_14102 networkSystem -c net/minecraft/class_3244 net/minecraft/network/play/ServerPlayNetHandler - m (Lnet/minecraft/class_2561;Lio/netty/util/concurrent/Future;)V method_14368 func_210161_a - m ()Z method_19507 func_217264_d - m (Lnet/minecraft/class_2833;)Z method_14371 isMoveVehiclePacketInvalid - m (Ljava/lang/String;)V method_14370 handleSlashCommand - m ()V method_18784 tick - m (Lnet/minecraft/class_1297;)Z method_29782 func_241167_b_ - m (Lnet/minecraft/class_2840;Lnet/minecraft/class_1860;)V method_17820 func_241165_a_ - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_238;)Z method_20630 func_241163_a_ - m (Lnet/minecraft/class_2561;)V method_14367 disconnect - m (DDDFF)V method_14363 setPlayerLocation - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Z method_29781 func_241164_a_ - m (Lnet/minecraft/class_2596;)Ljava/lang/String; method_14361 func_241168_b_ - m (Lnet/minecraft/class_2596;Lio/netty/util/concurrent/GenericFutureListener;)V method_14369 sendPacket - m (Lnet/minecraft/class_2805;Lcom/mojang/brigadier/suggestion/Suggestions;)V method_14365 func_195519_a - m (Lnet/minecraft/class_1297;)Z method_29780 func_241162_a_ - m ()V method_14372 captureCurrentPosition - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_1799;)Z method_27913 func_241166_a_ - m (DDDFFLjava/util/Set;)V method_14360 setPlayerLocation - m (Lnet/minecraft/class_2828;)Z method_14362 isMovePlayerPacketInvalid - m (Lnet/minecraft/class_2596;)V method_14364 sendPacket - f D field_14145 lastGoodX - f I field_14139 lastPositionUpdate - f I field_14138 floatingTickCount - f Z field_14125 keepAlivePending - f D field_14146 firstGoodY - f I field_14116 chatSpamThresholdCount - f Lnet/minecraft/server/MinecraftServer; field_14148 server - f I field_14135 lastMovePacketCounter - f D field_14142 lowestRiddenZ - f D field_14143 lowestRiddenX - f Lorg/apache/logging/log4j/Logger; field_14121 LOGGER - f D field_14144 lastGoodZ - f I field_14137 vehicleFloatingTickCount - f Lnet/minecraft/class_2535; field_14127 netManager - f D field_14141 lowestRiddenY1 - f J field_14134 keepAliveKey - f J field_14136 keepAliveTime - f D field_14128 firstGoodZ - f D field_14130 firstGoodX - f Lnet/minecraft/class_3222; field_14140 player - f Lnet/minecraft/class_243; field_14119 targetPos - f I field_14133 itemDropThreshold - f D field_14124 lowestRiddenY - f Z field_14131 floating - f D field_14126 lastGoodY - f I field_14117 movePacketCounter - f Lit/unimi/dsi/fastutil/ints/Int2ShortMap; field_14132 pendingTransactions - f D field_14120 lowestRiddenZ1 - f Z field_14129 vehicleFloating - f D field_14122 lowestRiddenX1 - f Lnet/minecraft/class_1297; field_14147 lowestRiddenEnt - f I field_14118 networkTickCount - f I field_14123 teleportId -c net/minecraft/class_3244$1 net/minecraft/network/play/ServerPlayNetHandler$1 - f [I field_14151 field_210478_d - f [I field_14149 field_210477_c - f [I field_14152 field_210475_a - f [I field_14150 field_210476_b -c net/minecraft/class_3242 net/minecraft/network/NetworkSystem - m (Lnet/minecraft/class_3242;)Lnet/minecraft/server/MinecraftServer; method_14355 func_242112_a - m (Ljava/net/InetAddress;I)V method_14354 addEndpoint - m ()Lnet/minecraft/server/MinecraftServer; method_14351 getServer - m ()V method_14357 tick - m ()Ljava/net/SocketAddress; method_14353 addLocalEndpoint - m (Lnet/minecraft/class_3242;)Ljava/util/List; method_14350 func_242113_b - m ()V method_14356 terminateEndpoints - m ()Lio/netty/channel/nio/NioEventLoopGroup; method_14348 func_201135_f - m ()Lio/netty/channel/epoll/EpollEventLoopGroup; method_14349 func_201136_e - m (Lnet/minecraft/class_2535;Lnet/minecraft/class_2561;Lio/netty/util/concurrent/Future;)V method_14352 func_210474_a - f Ljava/util/List; field_14106 endpoints - f Lnet/minecraft/server/MinecraftServer; field_14109 server - f Ljava/util/List; field_14107 networkManagers - f Lorg/apache/logging/log4j/Logger; field_14110 LOGGER - f Lnet/minecraft/class_3528; field_14111 SERVER_NIO_EVENTLOOP - f Lnet/minecraft/class_3528; field_14105 SERVER_EPOLL_EVENTLOOP - f Z field_14108 isAlive -c net/minecraft/class_3242$1 net/minecraft/network/NetworkSystem$1 - m (Lio/netty/channel/Channel;)V initChannel initChannel - f Lnet/minecraft/class_3242; field_14112 field_201131_a -c net/minecraft/class_3242$2 net/minecraft/network/NetworkSystem$2 - m (Lio/netty/channel/Channel;)V initChannel initChannel - f Lnet/minecraft/class_3242; field_14113 field_201132_a -c net/minecraft/class_3246 net/minecraft/network/handshake/ServerHandshakeNetHandler - f Lnet/minecraft/server/MinecraftServer; field_14154 server - f Lnet/minecraft/class_2561; field_24457 field_241169_a_ - f Lnet/minecraft/class_2535; field_14153 networkManager -c net/minecraft/class_3246$1 net/minecraft/network/handshake/ServerHandshakeNetHandler$1 - f [I field_14155 field_151291_a -c net/minecraft/class_3251 net/minecraft/network/status/ServerStatusNetHandler - f Lnet/minecraft/server/MinecraftServer; field_14180 server - f Lnet/minecraft/class_2561; field_14179 EXIT_MESSAGE - f Z field_14177 handled - f Lnet/minecraft/class_2535; field_14178 networkManager -c net/minecraft/class_3248 net/minecraft/network/login/ServerLoginNetHandler - m ()Lorg/apache/logging/log4j/Logger; method_14376 access$300 - m ()V method_14384 tryAcceptPlayer - m (Lnet/minecraft/class_3248;)Ljavax/crypto/SecretKey; method_14378 access$200 - m ()V method_18785 tick - m (Lnet/minecraft/class_3248;)Lcom/mojang/authlib/GameProfile; method_14379 func_210151_a - m (Lnet/minecraft/class_2561;)V method_14380 disconnect - m (Lnet/minecraft/class_3248;Lnet/minecraft/class_3248$class_3249;)Lnet/minecraft/class_3248$class_3249; method_14385 access$402 - m (Lnet/minecraft/class_3248;Lcom/mojang/authlib/GameProfile;)Lcom/mojang/authlib/GameProfile; method_14381 func_210148_a - m ()Ljava/lang/String; method_14383 getConnectionInfo - m (Lcom/mojang/authlib/GameProfile;)Lcom/mojang/authlib/GameProfile; method_14375 getOfflineProfile - m (Lnet/minecraft/class_3248;)Lnet/minecraft/server/MinecraftServer; method_14377 func_210150_b - m (Lio/netty/channel/ChannelFuture;)V method_14382 func_210149_a - f Lcom/mojang/authlib/GameProfile; field_14160 loginGameProfile - f Ljava/util/concurrent/atomic/AtomicInteger; field_14157 AUTHENTICATOR_THREAD_ID - f Lnet/minecraft/class_3248$class_3249; field_14163 currentLoginState - f Ljava/util/Random; field_14164 RANDOM - f Ljava/lang/String; field_14165 serverId - f Lnet/minecraft/class_3222; field_14161 player - f Lorg/apache/logging/log4j/Logger; field_14166 LOGGER - f Lnet/minecraft/class_2535; field_14158 networkManager - f Ljavax/crypto/SecretKey; field_14159 secretKey - f I field_14156 connectionTimer - f Lnet/minecraft/server/MinecraftServer; field_14162 server - f [B field_14167 verifyToken -c net/minecraft/class_3248$class_3249 net/minecraft/network/login/ServerLoginNetHandler$State - m (Ljava/lang/String;)Lnet/minecraft/class_3248$class_3249; valueOf valueOf - m ()[Lnet/minecraft/class_3248$class_3249; values values - f [Lnet/minecraft/class_3248$class_3249; field_14174 $VALUES - f Lnet/minecraft/class_3248$class_3249; field_14168 READY_TO_ACCEPT - f Lnet/minecraft/class_3248$class_3249; field_14172 ACCEPTED - f Lnet/minecraft/class_3248$class_3249; field_14170 HELLO - f Lnet/minecraft/class_3248$class_3249; field_14171 DELAY_ACCEPT - f Lnet/minecraft/class_3248$class_3249; field_14169 AUTHENTICATING - f Lnet/minecraft/class_3248$class_3249; field_14175 KEY - f Lnet/minecraft/class_3248$class_3249; field_14173 NEGOTIATING -c net/minecraft/class_3248$1 net/minecraft/network/login/ServerLoginNetHandler$1 - m ()Ljava/net/InetAddress; method_14386 getAddress - m ()V run run - f Lnet/minecraft/class_3248; field_14176 field_151292_a -c net/minecraft/class_3258 net/minecraft/resources/FilePack - m ()V finalize finalize - m ()Ljava/util/zip/ZipFile; method_14399 getResourcePackZipFile - f Ljava/util/zip/ZipFile; field_14184 zipFile - f Lcom/google/common/base/Splitter; field_14183 PATH_SPLITTER -c net/minecraft/class_3255 net/minecraft/resources/ResourcePack - m (Ljava/lang/String;)Ljava/io/InputStream; method_14391 getInputStream - m (Ljava/io/File;Ljava/io/File;)Ljava/lang/String; method_14396 getRelativeString - m (Lnet/minecraft/class_3270;Ljava/io/InputStream;)Ljava/lang/Object; method_14392 getResourceMetadata - m (Ljava/lang/String;)Z method_14393 resourceExists - m (Ljava/lang/String;)V method_14394 onIgnoreNonLowercaseNamespace - m (Lnet/minecraft/class_3264;Lnet/minecraft/class_2960;)Ljava/lang/String; method_14395 getFullPath - f Lorg/apache/logging/log4j/Logger; field_14182 LOGGER - f Ljava/io/File; field_14181 file -c net/minecraft/class_3262 net/minecraft/resources/IResourcePack - m ()V close close - m (Lnet/minecraft/class_3264;Lnet/minecraft/class_2960;)Z method_14411 resourceExists - m (Lnet/minecraft/class_3264;)Ljava/util/Set; method_14406 getResourceNamespaces - m (Ljava/lang/String;)Ljava/io/InputStream; method_14410 getRootResourceStream - m (Lnet/minecraft/class_3264;Lnet/minecraft/class_2960;)Ljava/io/InputStream; method_14405 getResourceStream - m (Lnet/minecraft/class_3264;Ljava/lang/String;Ljava/lang/String;ILjava/util/function/Predicate;)Ljava/util/Collection; method_14408 getAllResourceLocations - m ()Ljava/lang/String; method_14409 getName - m (Lnet/minecraft/class_3270;)Ljava/lang/Object; method_14407 getMetadata -c net/minecraft/class_3259 net/minecraft/resources/FolderPack - m (Ljava/io/File;ILjava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/function/Predicate;)V method_14400 func_199546_a - m (Ljava/lang/String;)Ljava/io/File; method_14401 getFile - m (Ljava/io/File;Ljava/lang/String;)Z method_14402 validatePath - f Z field_14186 OS_WINDOWS - f Lcom/google/common/base/CharMatcher; field_14185 BACKSLASH_MATCHER - f Lorg/apache/logging/log4j/Logger; field_14187 LOGGER -c net/minecraft/class_3266 net/minecraft/resources/ResourcePackFileNotFoundException -c net/minecraft/class_3264 net/minecraft/resources/ResourcePackType - m ()[Lnet/minecraft/class_3264; values values - m ()Ljava/lang/String; method_14413 getDirectoryName - m (Ljava/lang/String;)Lnet/minecraft/class_3264; valueOf valueOf - f [Lnet/minecraft/class_3264; field_14191 $VALUES - f Lnet/minecraft/class_3264; field_14190 SERVER_DATA - f Lnet/minecraft/class_3264; field_14188 CLIENT_RESOURCES - f Ljava/lang/String; field_14189 directoryName -c net/minecraft/class_3270 net/minecraft/resources/data/IMetadataSectionSerializer - m ()Ljava/lang/String; method_14420 getSectionName - m (Lcom/google/gson/JsonObject;)Ljava/lang/Object; method_14421 deserialize -c net/minecraft/class_3268 net/minecraft/resources/VanillaPack - m (Lnet/minecraft/class_3264;Lnet/minecraft/class_2960;)Ljava/io/InputStream; method_14416 getInputStreamVanilla - m (Ljava/util/function/Predicate;Ljava/nio/file/Path;)Z method_23858 func_229868_a_ - m (Ljava/util/Collection;ILjava/lang/String;Ljava/nio/file/Path;Ljava/lang/String;Ljava/util/function/Predicate;)V method_14418 collectResources - m (Ljava/util/HashMap;)V method_18220 func_217809_a - m (Lnet/minecraft/class_3264;Lnet/minecraft/class_2960;)Ljava/lang/String; method_20729 getPath - m (Ljava/lang/String;Ljava/net/URL;)Z method_20728 isValid - m (Ljava/lang/String;Ljava/nio/file/Path;Ljava/nio/file/Path;)Lnet/minecraft/class_2960; method_23857 func_229866_a_ - m (Ljava/lang/String;)Ljava/io/InputStream; method_14417 getInputStreamVanilla - f Ljava/nio/file/Path; field_14196 basePath - f Ljava/util/Set; field_14193 resourceNamespaces - f Lorg/apache/logging/log4j/Logger; field_14195 LOGGER - f Ljava/lang/Class; field_14194 baseClass - f Ljava/util/Map; field_17917 FILE_SYSTEMS_BY_PACK_TYPE -c net/minecraft/class_3274 net/minecraft/resources/data/PackMetadataSectionSerializer - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3272; method_14426 deserialize -c net/minecraft/class_3272 net/minecraft/resources/data/PackMetadataSection - m ()Lnet/minecraft/class_2561; method_14423 getDescription - m ()I method_14424 getPackFormat - f I field_14201 packFormat - f Lnet/minecraft/class_2561; field_14203 description - f Lnet/minecraft/class_3274; field_14202 SERIALIZER -c net/minecraft/class_3279 net/minecraft/resources/FolderPackFinder - m (Ljava/io/File;)Lnet/minecraft/class_3262; method_14433 func_195732_c - m (Ljava/io/File;)Ljava/util/function/Supplier; method_14432 makePackSupplier - m (Ljava/io/File;)Z method_14431 func_195731_d - m (Ljava/io/File;)Lnet/minecraft/class_3262; method_14434 func_195734_b - f Ljava/io/File; field_14218 folder - f Ljava/io/FileFilter; field_14217 FILE_FILTER - f Lnet/minecraft/class_5352; field_25345 field_232610_c_ -c net/minecraft/class_3281 net/minecraft/resources/PackCompatibility - m ()Lnet/minecraft/class_2561; method_14439 getDescription - m ()Z method_14437 isCompatible - m ()Lnet/minecraft/class_2561; method_14438 getConfirmMessage - m (I)Lnet/minecraft/class_3281; method_14436 getCompatibility - m (Ljava/lang/String;)Lnet/minecraft/class_3281; valueOf valueOf - m ()[Lnet/minecraft/class_3281; values values - f [Lnet/minecraft/class_3281; field_14221 $VALUES - f Lnet/minecraft/class_2561; field_14222 confirmMessage - f Lnet/minecraft/class_3281; field_14223 TOO_OLD - f Lnet/minecraft/class_3281; field_14224 COMPATIBLE - f Lnet/minecraft/class_3281; field_14220 TOO_NEW - f Lnet/minecraft/class_2561; field_14219 description -c net/minecraft/class_3288 net/minecraft/resources/ResourcePackInfo - m ()Lnet/minecraft/class_2561; method_14457 getTitle - m ()Lnet/minecraft/class_2561; method_14459 getDescription - m ()V close close - m (Ljava/lang/Object;)Z equals equals - m (ZLnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_14462 func_211689_a_ - m (Ljava/lang/String;ZLjava/util/function/Supplier;Lnet/minecraft/class_3288$class_5351;Lnet/minecraft/class_3288$class_3289;Lnet/minecraft/class_5352;)Lnet/minecraft/class_3288; method_14456 createResourcePack - m ()I hashCode hashCode - m ()Ljava/lang/String; method_14463 getName - m ()Lnet/minecraft/class_3281; method_14460 getCompatibility - m (Z)Lnet/minecraft/class_2561; method_14461 getChatLink - m ()Z method_14465 isOrderLocked - m ()Z method_14464 isAlwaysEnabled - m ()Lnet/minecraft/class_5352; method_29483 getDecorator - m ()Lnet/minecraft/class_3288$class_3289; method_14466 getPriority - m ()Lnet/minecraft/class_3262; method_14458 getResourcePack - f Lorg/apache/logging/log4j/Logger; field_14279 LOGGER - f Lnet/minecraft/class_2561; field_14274 title - f Lnet/minecraft/class_2561; field_14275 description - f Ljava/util/function/Supplier; field_14273 resourcePackSupplier - f Ljava/lang/String; field_14272 name - f Lnet/minecraft/class_3288$class_3289; field_14277 priority - f Lnet/minecraft/class_3281; field_14278 compatibility - f Lnet/minecraft/class_3272; field_14276 BROKEN_ASSETS_FALLBACK - f Z field_14270 orderLocked - f Lnet/minecraft/class_5352; field_25346 decorator - f Z field_14271 alwaysEnabled -c net/minecraft/class_3288$class_5351 net/minecraft/resources/ResourcePackInfo$IFactory - m (Ljava/lang/String;ZLjava/util/function/Supplier;Lnet/minecraft/class_3262;Lnet/minecraft/class_3272;Lnet/minecraft/class_3288$class_3289;Lnet/minecraft/class_5352;)Lnet/minecraft/class_3288; create create -c net/minecraft/class_3288$class_3289 net/minecraft/resources/ResourcePackInfo$Priority - m (Ljava/lang/String;)Lnet/minecraft/class_3288$class_3289; valueOf valueOf - m ()Lnet/minecraft/class_3288$class_3289; method_14467 opposite - m (Ljava/util/List;Ljava/lang/Object;Ljava/util/function/Function;Z)I method_14468 insert - m ()[Lnet/minecraft/class_3288$class_3289; values values - f Lnet/minecraft/class_3288$class_3289; field_14280 TOP - f Lnet/minecraft/class_3288$class_3289; field_14281 BOTTOM - f [Lnet/minecraft/class_3288$class_3289; field_14282 $VALUES -c net/minecraft/class_5352 net/minecraft/resources/IPackNameDecorator - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_29487 func_232631_a_ - m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_29488 func_232632_a_ - m ()Lnet/minecraft/class_5352; method_29485 func_232629_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_5352; method_29486 create - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; decorate decorate - f Lnet/minecraft/class_5352; field_25347 PLAIN - f Lnet/minecraft/class_5352; field_25349 WORLD - f Lnet/minecraft/class_5352; field_25348 BUILTIN - f Lnet/minecraft/class_5352; field_25350 SERVER -c net/minecraft/class_3283 net/minecraft/resources/ResourcePackList - m (Ljava/util/Collection;)Ljava/util/stream/Stream; method_29209 func_232620_c_ - m ()Ljava/util/List; method_29211 func_232623_f_ - m (Ljava/util/Collection;)Ljava/util/List; method_29208 func_232618_b_ - m ()Ljava/util/Map; method_29212 func_232624_g_ - m ()V close close - m (Ljava/lang/String;)Z method_29207 func_232617_b_ - m (Ljava/util/Collection;)V method_14447 setEnabledPacks - m ()Ljava/util/Collection; method_14441 getAllPacks - m (Ljava/lang/String;)Lnet/minecraft/class_3288; method_14449 getPackInfo - m ()Ljava/util/Collection; method_29206 func_232616_b_ - m (Ljava/util/Map;Lnet/minecraft/class_3288;)V method_29484 func_232615_a_ - m ()V method_14445 reloadPacksFromFinders - m ()Ljava/util/Collection; method_29210 func_232621_d_ - m ()Ljava/util/Collection; method_14444 getEnabledPacks - f Ljava/util/Set; field_14227 packFinders - f Lnet/minecraft/class_3288$class_5351; field_14228 packInfoFactory - f Ljava/util/Map; field_14226 packNameToInfo - f Ljava/util/List; field_14225 enabled -c net/minecraft/class_3286 net/minecraft/resources/ServerPackFinder - m ()Lnet/minecraft/class_3262; method_14454 func_195737_a - f Lnet/minecraft/class_3268; field_14269 field_195738_a -c net/minecraft/class_3285 net/minecraft/resources/IPackFinder - m (Ljava/util/function/Consumer;Lnet/minecraft/class_3288$class_5351;)V method_14453 findPacks -c net/minecraft/class_3294 net/minecraft/resources/FallbackResourceManager - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_2960; method_14473 getLocationMcmeta - m ()Lorg/apache/logging/log4j/Logger; method_14474 access$000 - m (Lnet/minecraft/class_2960;)V method_14472 checkResourcePath - m (Lnet/minecraft/class_2960;)Z method_18221 func_219541_f - m (Lnet/minecraft/class_3262;)V method_24233 addResourcePack - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_3262;)Ljava/io/InputStream; method_14476 getInputStream - f Ljava/util/List; field_14283 resourcePacks - f Lorg/apache/logging/log4j/Logger; field_14285 LOGGER - f Ljava/lang/String; field_21561 namespace - f Lnet/minecraft/class_3264; field_14284 type -c net/minecraft/class_3294$class_3295 net/minecraft/resources/FallbackResourceManager$LeakComplainerInputStream - m ()V finalize finalize - m ()V close close - f Z field_14287 isClosed - f Ljava/lang/String; field_14288 message -c net/minecraft/class_3302 net/minecraft/resources/IFutureReloadListener - m (Lnet/minecraft/class_3302$class_4045;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;Lnet/minecraft/class_3695;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_25931 reload - m ()Ljava/lang/String; method_22322 getSimpleName -c net/minecraft/class_3302$class_4045 net/minecraft/resources/IFutureReloadListener$IStage - m (Ljava/lang/Object;)Ljava/util/concurrent/CompletableFuture; method_18352 markCompleteAwaitingOthers -c net/minecraft/class_4011 net/minecraft/resources/IAsyncReloader - m ()F method_18229 estimateExecutionSpeed - m ()Ljava/util/concurrent/CompletableFuture; method_18364 onceDone - m ()Z method_18787 fullyDone - m ()V method_18849 join - m ()Z method_18786 asyncPartDone -c net/minecraft/class_4010 net/minecraft/resources/DebugAsyncReloader - m ()I method_18225 func_219580_g - m ()I method_18224 func_219579_f - m (Ljava/util/concurrent/Executor;Ljava/util/concurrent/atomic/AtomicLong;Ljava/lang/Runnable;)V method_18354 func_219574_a - m (Ljava/util/concurrent/Executor;Lnet/minecraft/class_3302$class_4045;Lnet/minecraft/class_3300;Lnet/minecraft/class_3302;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_18355 func_219578_a - m (Ljava/util/concurrent/Executor;Ljava/util/concurrent/atomic/AtomicLong;Ljava/lang/Runnable;)V method_18358 func_219577_b - m (Ljava/lang/Runnable;Ljava/util/concurrent/atomic/AtomicLong;)V method_18353 func_219581_a - m (Lnet/minecraft/class_3302;Lnet/minecraft/class_3533;Lnet/minecraft/class_3533;Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;Ljava/lang/Void;)Lnet/minecraft/class_4010$class_4046; method_18356 func_219576_a - m (Ljava/util/List;)V method_18238 logStatistics - m (Ljava/lang/Runnable;Ljava/util/concurrent/atomic/AtomicLong;)V method_18357 func_219582_b - f Lcom/google/common/base/Stopwatch; field_17919 timer - f Lorg/apache/logging/log4j/Logger; field_17918 LOGGER -c net/minecraft/class_4010$1 net/minecraft/resources/DebugAsyncReloader$1 -c net/minecraft/class_4010$class_4046 net/minecraft/resources/DebugAsyncReloader$DataPoint - m (Lnet/minecraft/class_4010$class_4046;)Lnet/minecraft/class_3696; method_18359 func_219546_a - m (Lnet/minecraft/class_4010$class_4046;)Lnet/minecraft/class_3696; method_18360 func_219545_b - m (Lnet/minecraft/class_4010$class_4046;)Ljava/lang/String; method_18363 func_219544_e - m (Lnet/minecraft/class_4010$class_4046;)Ljava/util/concurrent/atomic/AtomicLong; method_18362 func_219543_d - m (Lnet/minecraft/class_4010$class_4046;)Ljava/util/concurrent/atomic/AtomicLong; method_18361 func_219542_c - f Ljava/util/concurrent/atomic/AtomicLong; field_18040 prepareDuration - f Lnet/minecraft/class_3696; field_18038 prepareProfilerResult - f Ljava/util/concurrent/atomic/AtomicLong; field_18041 applyDuration - f Lnet/minecraft/class_3696; field_18039 applyProfilerResult - f Ljava/lang/String; field_18037 className -c net/minecraft/class_3298 net/minecraft/resources/IResource - m ()Ljava/lang/String; method_14480 getPackName - m ()Lnet/minecraft/class_2960; method_14483 getLocation - m (Lnet/minecraft/class_3270;)Ljava/lang/Object; method_14481 getMetadata - m ()Ljava/io/InputStream; method_14482 getInputStream -c net/minecraft/class_3296 net/minecraft/resources/IReloadableResourceManager - m ()V close close - m (Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/List;Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletableFuture; method_14478 reloadResourcesAndThen - m (Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;Ljava/util/List;)Lnet/minecraft/class_4011; method_18232 reloadResources - m (Lnet/minecraft/class_3302;)V method_14477 addReloadListener -c net/minecraft/class_4013 net/minecraft/resources/IResourceManagerReloadListener - m (Lnet/minecraft/class_3695;Lnet/minecraft/class_3300;)V method_29490 func_232635_a_ - m (Lnet/minecraft/class_3300;)V method_14491 onResourceManagerReload -c net/minecraft/class_3300 net/minecraft/resources/IResourceManager - m (Lnet/minecraft/class_2960;)Z method_18234 hasResource - m ()Ljava/util/stream/Stream; method_29213 getResourcePackStream - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3298; method_14486 getResource - m (Ljava/lang/String;Ljava/util/function/Predicate;)Ljava/util/Collection; method_14488 getAllResourceLocations - m (Lnet/minecraft/class_2960;)Ljava/util/List; method_14489 getAllResources - m ()Ljava/util/Set; method_14487 getResourceNamespaces -c net/minecraft/class_3300$class_5353 net/minecraft/resources/IResourceManager$Instance - m (Ljava/lang/String;)Lnet/minecraft/class_3300$class_5353; valueOf valueOf - m ()[Lnet/minecraft/class_3300$class_5353; values values - f Lnet/minecraft/class_3300$class_5353; field_25351 INSTANCE - f [Lnet/minecraft/class_3300$class_5353; field_25352 $VALUES -c net/minecraft/class_4080 net/minecraft/client/resources/ReloadListener - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Ljava/lang/Object; method_18789 prepare - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Ljava/lang/Object; method_18791 func_215270_b - m (Ljava/lang/Object;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_18788 apply - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;Ljava/lang/Object;)V method_18790 func_215269_a -c net/minecraft/class_4309 net/minecraft/client/resources/JsonReloadListener - m (Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)Ljava/util/Map; method_20731 prepare - m (Ljava/lang/String;)Z method_20730 func_223379_a - f Lcom/google/gson/Gson; field_19379 gson - f Lorg/apache/logging/log4j/Logger; field_19377 LOGGER - f Ljava/lang/String; field_19380 folder - f I field_19378 JSON_EXTENSION_LENGTH -c net/minecraft/class_3304 net/minecraft/resources/SimpleReloadableResourceManager - m (Lnet/minecraft/class_3262;)V method_14475 addResourcePack - m (Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/List;Ljava/util/concurrent/CompletableFuture;)Lnet/minecraft/class_4011; method_18240 initializeAsyncReloader - m (Ljava/util/List;)Ljava/lang/Object; method_29491 func_232637_a_ - m ()V method_14495 clearResourceNamespaces - f Ljava/util/Map; field_14293 namespaceResourceManagers - f Lnet/minecraft/class_3264; field_14294 type - f Lorg/apache/logging/log4j/Logger; field_14295 LOGGER - f Ljava/util/List; field_17935 reloadListeners - f Ljava/util/Set; field_14292 resourceNamespaces - f Ljava/util/List; field_25145 resourcePacks - f Ljava/util/List; field_17936 initTaskQueue -c net/minecraft/class_3304$class_4743 net/minecraft/resources/SimpleReloadableResourceManager$FailedPackException - m ()Lnet/minecraft/class_3262; method_24234 getPack - f Lnet/minecraft/class_3262; field_21812 pack -c net/minecraft/class_3304$class_4742 net/minecraft/resources/SimpleReloadableResourceManager$FailedPackReloader - f Lnet/minecraft/class_3304$class_4743; field_21810 exception - f Ljava/util/concurrent/CompletableFuture; field_21811 onceDone -c net/minecraft/class_4014 net/minecraft/resources/AsyncReloader - m (Ljava/util/List;)Lnet/minecraft/class_3902; method_18366 func_219558_a - m (Ljava/lang/Runnable;)V method_18371 func_219559_b - m (Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V method_18367 func_219560_a - m (Ljava/util/concurrent/Executor;Lnet/minecraft/class_3302$class_4045;Lnet/minecraft/class_3300;Lnet/minecraft/class_3302;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_18368 func_219561_a - m (Ljava/lang/Runnable;)V method_18365 func_219557_a - m (Lnet/minecraft/class_4014;)Ljava/util/Set; method_18370 func_219563_a - m (Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V method_18372 func_219564_b - m (Lnet/minecraft/class_3300;Ljava/util/List;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;)Lnet/minecraft/class_4014; method_18369 create - f Lnet/minecraft/class_3300; field_17927 resourceManager - f Ljava/util/Set; field_18044 taskSet - f I field_18047 syncCompleted - f Ljava/util/concurrent/atomic/AtomicInteger; field_18048 asyncScheduled - f I field_18046 syncScheduled - f Ljava/util/concurrent/CompletableFuture; field_18042 allAsyncCompleted - f Ljava/util/concurrent/atomic/AtomicInteger; field_18049 asyncCompleted - f I field_18045 taskCount - f Ljava/util/concurrent/CompletableFuture; field_18043 resultListFuture -c net/minecraft/class_4014$class_4047 net/minecraft/resources/AsyncReloader$IStateFactory - m (Lnet/minecraft/class_3302$class_4045;Lnet/minecraft/class_3300;Lnet/minecraft/class_3302;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; create create -c net/minecraft/class_4014$1 net/minecraft/resources/AsyncReloader$1 - m (Lnet/minecraft/class_3302;)V method_18374 func_216873_a - m (Ljava/lang/Object;Lnet/minecraft/class_3902;Ljava/lang/Object;)Ljava/lang/Object; method_18373 func_216874_a - f Ljava/util/concurrent/Executor; field_18050 field_216875_a - f Ljava/util/concurrent/CompletableFuture; field_18052 field_216877_c - f Lnet/minecraft/class_3302; field_18051 field_216876_b - f Lnet/minecraft/class_4014; field_18053 field_216878_d -c net/minecraft/class_3306 net/minecraft/resources/SimpleResource - m (Ljava/lang/Object;)Z equals equals - m ()V close close - m ()I hashCode hashCode - m ()Z method_14484 hasMetadata - f Z field_14297 wasMetadataRead - f Ljava/io/InputStream; field_14300 metadataInputStream - f Lnet/minecraft/class_2960; field_14299 location - f Lcom/google/gson/JsonObject; field_14302 metadataJson - f Ljava/io/InputStream; field_14298 inputStream - f Ljava/lang/String; field_14296 packName -c net/minecraft/class_3312 net/minecraft/server/management/PlayerProfileCache - m (I)Ljava/util/stream/Stream; method_14516 func_242117_a - m (Lnet/minecraft/class_3312$class_3313;Ljava/text/DateFormat;)Lcom/google/gson/JsonElement; method_30165 func_242119_a - m ()Z method_14514 isOnlineMode - m (Ljava/text/DateFormat;Ljava/util/List;Lcom/google/gson/JsonElement;)V method_30168 func_242122_a - m ()V method_14518 save - m ()J method_30169 func_242123_d - m (Lcom/mojang/authlib/GameProfile;)V method_14508 addEntry - m (Lcom/google/gson/JsonArray;Ljava/text/DateFormat;Lnet/minecraft/class_3312$class_3313;)V method_30166 func_242120_a - m ()Ljava/util/List; method_14517 func_242116_a - m ()Ljava/text/DateFormat; method_30170 func_242124_e - m (Ljava/lang/String;)Lcom/mojang/authlib/GameProfile; method_14515 getGameProfileForUsername - m (Lcom/google/gson/JsonElement;Ljava/text/DateFormat;)Lnet/minecraft/class_3312$class_3313; method_30167 func_242121_a - m (Lcom/mojang/authlib/GameProfileRepository;Ljava/lang/String;)Lcom/mojang/authlib/GameProfile; method_14509 lookupProfile - m (Z)V method_14510 setOnlineMode - m (Ljava/util/UUID;)Lcom/mojang/authlib/GameProfile; method_14512 getProfileByUUID - m (Lnet/minecraft/class_3312$class_3313;)V method_30164 func_242118_a - f Ljava/util/concurrent/atomic/AtomicLong; field_25724 field_242115_h - f Ljava/io/File; field_14314 usercacheFile - f Lcom/google/gson/Gson; field_14318 gson - f Lorg/apache/logging/log4j/Logger; field_25805 field_242114_a - f Z field_14313 onlineMode - f Lcom/mojang/authlib/GameProfileRepository; field_14315 profileRepo - f Ljava/util/Map; field_14310 uuidToProfileEntryMap - f Ljava/util/Map; field_14312 usernameToProfileEntryMap -c net/minecraft/class_3312$class_3313 net/minecraft/server/management/PlayerProfileCache$ProfileEntry - m (Lnet/minecraft/class_3312$class_3313;)Ljava/util/Date; method_14521 func_242127_a - m ()Ljava/util/Date; method_14520 getExpirationDate - m ()Lcom/mojang/authlib/GameProfile; method_14519 getGameProfile - m ()J method_30172 func_242128_c - m (J)V method_30171 func_242126_a - f Ljava/util/Date; field_14319 expirationDate - f J field_25726 field_242125_c - f Lcom/mojang/authlib/GameProfile; field_14321 gameProfile -c net/minecraft/class_3312$1 net/minecraft/server/management/PlayerProfileCache$1 - m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed - m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded - f Ljava/util/concurrent/atomic/AtomicReference; field_25725 field_152667_a -c net/minecraft/class_3309 net/minecraft/server/management/BanEntry - m ()Ljava/lang/String; method_14503 getBanReason - m ()Ljava/lang/String; method_14501 getBannedBy - m ()Ljava/util/Date; method_14502 getBanEndDate - m ()Lnet/minecraft/class_2561; method_14504 getDisplayName - f Ljava/lang/String; field_14304 bannedBy - f Ljava/util/Date; field_14305 banEndDate - f Ljava/lang/String; field_14307 reason - f Ljava/text/SimpleDateFormat; field_14308 DATE_FORMAT - f Ljava/util/Date; field_14306 banStartDate -c net/minecraft/class_3320 net/minecraft/server/management/IPBanEntry - m (Lcom/google/gson/JsonObject;)Ljava/lang/String; method_14532 getIPFromJson -c net/minecraft/class_3317 net/minecraft/server/management/IPBanList - m (Ljava/net/SocketAddress;)Z method_14527 isBanned - m (Ljava/lang/String;)Z method_14529 isBanned - m (Ljava/net/SocketAddress;)Ljava/lang/String; method_14526 addressToString - m (Ljava/net/SocketAddress;)Lnet/minecraft/class_3320; method_14528 getBanEntry -c net/minecraft/class_3324 net/minecraft/server/management/PlayerList - m (Ljava/lang/String;)Lnet/minecraft/class_3222; method_14566 getPlayerByUsername - m ()V method_14617 saveAllPlayerData - m (Lcom/mojang/authlib/GameProfile;)V method_14604 removeOp - m ()Lnet/minecraft/class_3337; method_14590 getWhitelistedPlayers - m (Ljava/lang/String;)Ljava/util/List; method_14559 getPlayersMatchingAddress - m ()V method_14601 tick - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_3222;Lnet/minecraft/class_3218;)V method_14615 setPlayerGameTypeBasedOnOther - m ()Lnet/minecraft/class_3335; method_14563 getBannedPlayers - m (Lnet/minecraft/class_3222;)V method_14576 updatePermissionLevel - m (Lcom/mojang/authlib/GameProfile;)Z method_14569 canSendCommands - m (Lcom/mojang/authlib/GameProfile;)Z method_14609 bypassesPlayerLimit - m ()I method_14568 getViewDistance - m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_2985; method_14578 getPlayerAdvancements - m (Lnet/minecraft/class_3222;)V method_14577 writePlayerData - m ()I method_14592 getMaxPlayers - m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_2487; method_14600 readPlayerDataFromFile - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2561;)V method_14564 sendMessageToAllTeamMembers - m ()V method_14597 removeAllPlayers - m (Lnet/minecraft/class_2535;Lnet/minecraft/class_3222;)V method_14570 initializeConnectionToPlayer - m (Z)V method_14557 setWhiteListEnabled - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_18241 func_217885_a - m ()Lnet/minecraft/server/MinecraftServer; method_14561 getServer - m ()[Ljava/lang/String; method_14584 getOppedPlayerNames - m (Lnet/minecraft/class_1934;)V method_14595 setGameType - m ()V method_14599 reloadWhitelist - m (Lnet/minecraft/class_3218;)V method_14591 func_212504_a - m ()V method_14572 reloadResources - m (I)V method_14608 setViewDistance - m ()[Ljava/lang/String; method_14560 getWhitelistedPlayerNames - m ()Lnet/minecraft/class_3317; method_14585 getBannedIPs - m (Ljava/util/UUID;)Lnet/minecraft/class_3222; method_14602 getPlayerByUUID - m ()[Ljava/lang/String; method_14580 getOnlinePlayerNames - m (Lcom/mojang/authlib/GameProfile;)Z method_14587 canJoin - m (Lnet/minecraft/class_2561;Lnet/minecraft/class_2556;Ljava/util/UUID;)V method_14616 func_232641_a_ - m (Ljava/net/SocketAddress;Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/class_2561; method_14586 canPlayerLogin - m (Lnet/minecraft/class_3222;Z)Lnet/minecraft/class_3222; method_14556 func_232644_a_ - m (Lnet/minecraft/class_3222;I)V method_14596 sendPlayerPermissionLevel - m (Lnet/minecraft/class_3222;)V method_14594 sendInventory - m (Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/class_3222; method_14613 createPlayerForUser - m ()Lnet/minecraft/class_3326; method_14603 getOppedPlayers - m ()Ljava/util/List; method_14571 getPlayers - m (Lnet/minecraft/class_3222;)V method_14611 playerLoggedOut - m ()I method_14574 getCurrentPlayerCount - m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_3442; method_14583 getPlayerStats - m (Lnet/minecraft/class_3222;Lnet/minecraft/class_3218;)V method_14606 sendWorldInfo - m (Lnet/minecraft/class_2596;)V method_14581 sendPacketToAllPlayers - m ()Z method_14614 isWhiteListEnabled - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2561;)V method_14565 sendMessageToTeamOrAllPlayers - m (Lnet/minecraft/class_2596;Lnet/minecraft/class_5321;)V method_14589 func_232642_a_ - m (Z)V method_14607 setCommandsAllowedForAll - m ()Z method_14579 commandsAllowedForAll - m (Lnet/minecraft/class_2995;Lnet/minecraft/class_3222;)V method_14588 sendScoreboard - m (Lcom/mojang/authlib/GameProfile;)V method_14582 addOp - m (Lnet/minecraft/class_1657;DDDDLnet/minecraft/class_5321;Lnet/minecraft/class_2596;)V method_14605 sendToAllNearExcept - m ()Lnet/minecraft/class_2487; method_14567 getHostPlayerData - f Lnet/minecraft/class_3337; field_14361 whiteListedPlayers - f Lnet/minecraft/class_3335; field_14344 bannedPlayers - f Ljava/util/Map; field_14354 uuidToPlayerMap - f Lnet/minecraft/class_1934; field_14363 gameType - f Lnet/minecraft/class_3326; field_14353 ops - f I field_14347 maxPlayers - f Ljava/io/File; field_14364 FILE_IPBANS - f Ljava/text/SimpleDateFormat; field_14356 DATE_FORMAT - f I field_14357 playerPingIndex - f Ljava/io/File; field_14343 FILE_WHITELIST - f Lnet/minecraft/class_29; field_14358 playerDataManager - f Lnet/minecraft/server/MinecraftServer; field_14360 server - f Ljava/util/Map; field_14362 playerStatFiles - f I field_14359 viewDistance - f Lnet/minecraft/class_3317; field_14345 bannedIPs - f Ljava/io/File; field_14348 FILE_OPS - f Ljava/io/File; field_14355 FILE_PLAYERBANS - f Lorg/apache/logging/log4j/Logger; field_14349 LOGGER - f Lnet/minecraft/class_5455$class_5457; field_24626 field_232639_s_ - f Z field_14352 whiteListEnforced - f Ljava/util/List; field_14351 players - f Ljava/util/Map; field_14346 advancements - f Z field_14350 commandsAllowedForAll -c net/minecraft/class_3324$1 net/minecraft/server/management/PlayerList$1 - f Lnet/minecraft/class_3324; field_14365 field_177697_a -c net/minecraft/class_3321 net/minecraft/server/management/PreYggdrasilConverter - m (Ljava/io/File;)V method_14548 access$400 - m (Lnet/minecraft/server/MinecraftServer;)Z method_14539 convertOplist - m (Ljava/io/File;)V method_14534 mkdir - m (Ljava/lang/String;)Z method_14552 func_201150_a - m (Lnet/minecraft/server/MinecraftServer;)Z method_14533 convertWhitelist - m (Ljava/io/File;)V method_14549 backupConverted - m (Lnet/minecraft/server/MinecraftServer;)Z method_14540 func_219587_e - m (Lnet/minecraft/server/MinecraftServer;)Z method_14547 convertUserBanlist - m (Lnet/minecraft/server/MinecraftServer;)Z method_14545 convertIpBanlist - m (Lnet/minecraft/class_3176;)Z method_14550 convertSaveFiles - m (Ljava/io/File;Ljava/util/Map;)Ljava/util/List; method_14543 readFile - m (I)[Ljava/lang/String; method_14551 func_201149_a - m (Lnet/minecraft/server/MinecraftServer;)Z method_14542 func_219589_f - m (Lnet/minecraft/server/MinecraftServer;)Ljava/io/File; method_14536 func_219585_g - m ()Lorg/apache/logging/log4j/Logger; method_14544 access$000 - m (Lnet/minecraft/server/MinecraftServer;Ljava/util/Collection;Lcom/mojang/authlib/ProfileLookupCallback;)V method_14538 lookupNames - m ()Z method_14541 hasUnconvertableFiles - m (Ljava/lang/String;Ljava/util/Date;)Ljava/util/Date; method_14535 parseDate - m (Lnet/minecraft/server/MinecraftServer;Ljava/lang/String;)Ljava/util/UUID; method_14546 convertMobOwnerIfNeeded - m (Ljava/lang/String;Ljava/util/Date;)Ljava/util/Date; method_14537 access$200 - f Lorg/apache/logging/log4j/Logger; field_14326 LOGGER - f Ljava/io/File; field_14324 OLD_IPBAN_FILE - f Ljava/io/File; field_14325 OLD_WHITELIST_FILE - f Ljava/io/File; field_14328 OLD_PLAYERBAN_FILE - f Ljava/io/File; field_14327 OLD_OPS_FILE -c net/minecraft/class_3321$class_3322 net/minecraft/server/management/PreYggdrasilConverter$ConversionError -c net/minecraft/class_3321$1 net/minecraft/server/management/PreYggdrasilConverter$1 - m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed - m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded - f Lnet/minecraft/class_3335; field_14329 field_201139_c - f Ljava/util/Map; field_14330 field_201138_b - f Lnet/minecraft/server/MinecraftServer; field_14331 field_201137_a -c net/minecraft/class_3321$3 net/minecraft/server/management/PreYggdrasilConverter$3 - m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded - m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed - f Lnet/minecraft/class_3337; field_14334 field_201141_b - f Lnet/minecraft/server/MinecraftServer; field_14335 field_152737_a -c net/minecraft/class_3321$2 net/minecraft/server/management/PreYggdrasilConverter$2 - m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded - m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed - f Lnet/minecraft/server/MinecraftServer; field_14332 field_152734_a - f Lnet/minecraft/class_3326; field_14333 field_201140_b -c net/minecraft/class_3321$5 net/minecraft/server/management/PreYggdrasilConverter$5 - m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded - m (Ljava/io/File;Ljava/lang/String;Ljava/lang/String;)V method_14553 renamePlayerFile - m (Lcom/mojang/authlib/GameProfile;)Ljava/lang/String; method_14554 getFileNameForProfile - m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed - f Ljava/io/File; field_14339 field_201146_c - f [Ljava/lang/String; field_14340 field_201148_e - f Ljava/io/File; field_14338 field_201147_d - f Ljava/io/File; field_14342 field_201145_b - f Lnet/minecraft/class_3176; field_14341 field_152741_a -c net/minecraft/class_3321$4 net/minecraft/server/management/PreYggdrasilConverter$4 - m (Lcom/mojang/authlib/GameProfile;Ljava/lang/Exception;)V onProfileLookupFailed onProfileLookupFailed - m (Lcom/mojang/authlib/GameProfile;)V onProfileLookupSucceeded onProfileLookupSucceeded - f Ljava/util/List; field_14337 field_201142_b - f Lnet/minecraft/server/MinecraftServer; field_14336 field_152739_a -c net/minecraft/class_3327 net/minecraft/server/management/OpEntry - m ()Z method_14622 bypassesPlayerLimit - m ()I method_14623 getPermissionLevel - m (Lcom/google/gson/JsonObject;)Lcom/mojang/authlib/GameProfile; method_14621 constructProfile - f Z field_14367 bypassesPlayerLimit - f I field_14366 permissionLevel -c net/minecraft/class_3326 net/minecraft/server/management/OpList - m (Lcom/mojang/authlib/GameProfile;)Ljava/lang/String; method_14619 getObjectKey - m (Lcom/mojang/authlib/GameProfile;)Z method_14620 bypassesPlayerLimit -c net/minecraft/class_3331 net/minecraft/server/management/UserList - m (Ljava/lang/Object;)Ljava/lang/String; method_14634 getObjectKey - m (Ljava/lang/Object;)Z method_14644 hasEntry - m ()Ljava/util/Collection; method_14632 getEntries - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3330; method_14642 createEntry - m (Ljava/lang/Object;)V method_14635 removeEntry - m (Ljava/lang/Object;)Lnet/minecraft/class_3330; method_14640 getEntry - m ()[Ljava/lang/String; method_14636 getKeys - m ()Ljava/io/File; method_14643 getSaveFile - m ()Z method_14641 isEmpty - m (Lnet/minecraft/class_3330;)V method_14638 removeEntry - m ()V method_14629 writeChanges - m (Lnet/minecraft/class_3330;)V method_14633 addEntry - m ()V method_14630 readSavedFile - m (Lnet/minecraft/class_3330;)Lcom/google/gson/JsonObject; method_24897 func_232646_c_ - m ()V method_14631 removeExpired - f Lcom/google/gson/Gson; field_14374 field_232645_b_ - f Lorg/apache/logging/log4j/Logger; field_14373 LOGGER - f Ljava/io/File; field_14370 saveFile - f Ljava/util/Map; field_14371 values -c net/minecraft/class_3330 net/minecraft/server/management/UserListEntry - m (Lcom/google/gson/JsonObject;)V method_24896 onSerialization - m ()Ljava/lang/Object; method_14626 getValue - m ()Z method_14627 hasBanExpired - f Ljava/lang/Object; field_14368 value -c net/minecraft/class_3336 net/minecraft/server/management/ProfileBanEntry - m (Lcom/google/gson/JsonObject;)Lcom/mojang/authlib/GameProfile; method_14651 toGameProfile -c net/minecraft/class_3335 net/minecraft/server/management/BanList - m (Lcom/mojang/authlib/GameProfile;)Ljava/lang/String; method_14649 getObjectKey - m (Lcom/mojang/authlib/GameProfile;)Z method_14650 isBanned -c net/minecraft/class_3337 net/minecraft/server/management/WhiteList - m (Lcom/mojang/authlib/GameProfile;)Ljava/lang/String; method_14652 getObjectKey - m (Lcom/mojang/authlib/GameProfile;)Z method_14653 isWhitelisted -c net/minecraft/class_3340 net/minecraft/server/management/WhitelistEntry - m (Lcom/google/gson/JsonObject;)Lcom/mojang/authlib/GameProfile; method_14656 gameProfileFromJsonObject -c net/minecraft/class_3347 net/minecraft/network/rcon/RConUtils - m (B)Ljava/lang/String; method_14699 getByteAsHexString - m ([BII)I method_14698 getBytesAsBEint - m ([BII)I method_14696 getBytesAsLEInt - m ([BII)Ljava/lang/String; method_14697 getBytesAsString - m ([BI)I method_14695 getRemainingBytesAsLEInt - f [C field_14398 HEX_DIGITS -c net/minecraft/class_3345 net/minecraft/network/rcon/RConOutputStream - m ()[B method_14689 toByteArray - m (S)V method_14691 writeShort - m ()V method_14693 reset - m (I)V method_14692 writeInt - m (Ljava/lang/String;)V method_14690 writeString - m ([B)V method_14694 writeByteArray - f Ljava/io/DataOutputStream; field_14396 output - f Ljava/io/ByteArrayOutputStream; field_14395 byteArrayOutput -c net/minecraft/class_3350 net/minecraft/network/rcon/RConConsoleSource - m ()Lnet/minecraft/class_2168; method_14700 getCommandSource - m ()V method_14702 resetLog - m ()Ljava/lang/String; method_14701 getLogContents - f Lnet/minecraft/server/MinecraftServer; field_14405 server - f Lnet/minecraft/class_2585; field_25146 field_232647_b_ - f Ljava/lang/StringBuffer; field_14404 buffer -c net/minecraft/class_3364 net/minecraft/network/rcon/QueryThread - m (Ljava/net/DatagramPacket;)Ljava/lang/Boolean; method_14753 verifyClientAuth - m (Ljava/net/DatagramPacket;)[B method_14747 createQueryResponse - m (Ljava/net/SocketAddress;)[B method_14748 getRequestID - m ([BLjava/net/DatagramPacket;)V method_14751 sendResponsePacket - m ()V method_14746 cleanQueryClientsMap - m (Lnet/minecraft/class_2994;)Lnet/minecraft/class_3364; method_30737 func_242129_a - m ()Z method_14754 initQuerySystem - m ()V run run - m (Ljava/lang/Exception;)V method_14752 stopWithException - m (JLnet/minecraft/class_3364$class_3365;)Z method_27174 func_232650_a_ - m (Ljava/net/DatagramPacket;)V method_14749 sendAuthChallenge - m (Ljava/net/DatagramPacket;)Z method_14750 parseIncomingPacket - f J field_14450 lastQueryResponseTime - f Ljava/lang/String; field_14445 serverMotd - f [B field_14452 buffer - f Lorg/apache/logging/log4j/Logger; field_23963 field_232648_d_ - f J field_14443 lastAuthCheckTime - f Ljava/lang/String; field_14454 serverHostname - f Lnet/minecraft/class_3345; field_14446 output - f I field_14442 queryPort - f Ljava/lang/String; field_14444 queryHostname - f I field_14457 serverPort - f Ljava/util/Map; field_14453 queryClients - f I field_14456 maxPlayers - f Ljava/net/DatagramSocket; field_14449 querySocket - f Ljava/lang/String; field_14447 worldName - f Lnet/minecraft/class_2994; field_23964 field_232649_r_ -c net/minecraft/class_3364$class_3365 net/minecraft/network/rcon/QueryThread$Auth - m ()[B method_14758 getRequestId - m (J)Ljava/lang/Boolean; method_14755 hasExpired - m ()I method_14756 getRandomChallenge - m ()[B method_14757 getChallengeValue - f Ljava/lang/String; field_14462 requestIdAsString - f J field_14459 timestamp - f I field_14458 randomChallenge - f [B field_14460 requestId - f [B field_14461 challengeValue -c net/minecraft/class_3359 net/minecraft/network/rcon/RConThread - m ()V method_18050 func_219591_b - m ()Z method_14728 func_241832_a - m ()Z method_14731 isRunning - f Ljava/util/concurrent/atomic/AtomicInteger; field_14428 THREAD_ID - f Ljava/lang/String; field_14424 threadName - f Lorg/apache/logging/log4j/Logger; field_14430 LOGGER - f Z field_14431 running - f Ljava/lang/Thread; field_14423 rconThread -c net/minecraft/class_3408 net/minecraft/network/rcon/MainThread - m (Ljava/net/ServerSocket;)V method_27176 func_232655_a_ - m (Lnet/minecraft/class_2994;)Lnet/minecraft/class_3408; method_30738 func_242130_a - m ()V run run - m ()V method_14820 cleanClientThreadsMap - m (Lnet/minecraft/class_3389;)Z method_27175 func_232654_a_ - f Ljava/net/ServerSocket; field_14511 serverSocket - f Ljava/util/List; field_14514 clientThreads - f Lnet/minecraft/class_2994; field_23967 field_232653_j_ - f Ljava/lang/String; field_14512 rconPassword - f Lorg/apache/logging/log4j/Logger; field_23966 field_232652_d_ -c net/minecraft/class_3389 net/minecraft/network/rcon/ClientThread - m ()V run run - m ()V method_14788 closeSocket - m (IILjava/lang/String;)V method_14790 sendResponse - m (ILjava/lang/String;)V method_14789 sendMultipacketResponse - m ()V method_14787 sendLoginFailedResponse - f Lorg/apache/logging/log4j/Logger; field_14491 LOGGER - f Ljava/net/Socket; field_14489 clientSocket - f Z field_14488 loggedIn - f [B field_14490 buffer - f Lnet/minecraft/class_2994; field_23965 field_232651_i_ - f Ljava/lang/String; field_14492 rconPassword -c net/minecraft/class_5195 net/minecraft/client/audio/BackgroundMusicSelector - m (Lnet/minecraft/class_5195;)Ljava/lang/Boolean; method_28127 func_232662_a_ - m (Lnet/minecraft/class_5195;)Ljava/lang/Integer; method_28129 func_232665_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28128 func_232663_a_ - m ()Z method_27282 shouldReplaceCurrentMusic - m ()I method_27280 getMinDelay - m (Lnet/minecraft/class_5195;)Ljava/lang/Integer; method_28130 func_232667_c_ - m ()Lnet/minecraft/class_3414; method_27279 getSoundEvent - m ()I method_27281 getMaxDelay - m (Lnet/minecraft/class_5195;)Lnet/minecraft/class_3414; method_28131 func_232669_d_ - f Lnet/minecraft/class_3414; field_24057 soundEvent - f Z field_24060 replaceCurrentMusic - f I field_24058 minDelay - f I field_24059 maxDelay - f Lcom/mojang/serialization/Codec; field_24627 CODEC -c net/minecraft/class_3414 net/minecraft/util/SoundEvent - m ()Lnet/minecraft/class_2960; method_14833 getName - m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_2960; method_28132 func_232679_a_ - f Lnet/minecraft/class_2960; field_14533 name - f Lcom/mojang/serialization/Codec; field_24628 CODEC -c net/minecraft/class_1143 net/minecraft/client/audio/BackgroundMusicTracks - m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_5195; method_27283 getDefaultBackgroundMusicSelector - f Lnet/minecraft/class_5195; field_5580 DRAGON_FIGHT_MUSIC - f Lnet/minecraft/class_5195; field_5578 CREDITS_MUSIC - f Lnet/minecraft/class_5195; field_5586 WORLD_MUSIC - f Lnet/minecraft/class_5195; field_5581 CREATIVE_MODE_MUSIC - f Lnet/minecraft/class_5195; field_5585 MAIN_MENU_MUSIC - f Lnet/minecraft/class_5195; field_5576 UNDER_WATER_MUSIC - f Lnet/minecraft/class_5195; field_5583 END_MUSIC -c net/minecraft/class_3419 net/minecraft/util/SoundCategory - m (Ljava/lang/String;)Lnet/minecraft/class_3419; valueOf valueOf - m ()Ljava/lang/String; method_14840 getName - m ()[Lnet/minecraft/class_3419; values values - f [Lnet/minecraft/class_3419; field_15255 $VALUES - f Lnet/minecraft/class_3419; field_15250 MASTER - f Ljava/util/Map; field_15257 SOUND_CATEGORIES - f Lnet/minecraft/class_3419; field_15246 VOICE - f Lnet/minecraft/class_3419; field_15256 AMBIENT - f Lnet/minecraft/class_3419; field_15248 PLAYERS - f Lnet/minecraft/class_3419; field_15254 NEUTRAL - f Lnet/minecraft/class_3419; field_15251 HOSTILE - f Ljava/lang/String; field_15249 name - f Lnet/minecraft/class_3419; field_15245 BLOCKS - f Lnet/minecraft/class_3419; field_15252 WEATHER - f Lnet/minecraft/class_3419; field_15247 RECORDS - f Lnet/minecraft/class_3419; field_15253 MUSIC -c net/minecraft/class_3417 net/minecraft/util/SoundEvents - m (Ljava/lang/String;)Lnet/minecraft/class_3414; method_14838 register - f Lnet/minecraft/class_3414; field_17710 UI_STONECUTTER_TAKE_RESULT - f Lnet/minecraft/class_3414; field_23798 ENTITY_STRIDER_SADDLE - f Lnet/minecraft/class_3414; field_14646 BLOCK_LADDER_FALL - f Lnet/minecraft/class_3414; field_15211 BLOCK_GRAVEL_BREAK - f Lnet/minecraft/class_3414; field_15194 BLOCK_SLIME_BLOCK_BREAK - f Lnet/minecraft/class_3414; field_14929 ENTITY_RAVAGER_STEP - f Lnet/minecraft/class_3414; field_19147 ENTITY_EVOKER_CELEBRATE - f Lnet/minecraft/class_3414; field_14907 ENTITY_CREEPER_DEATH - f Lnet/minecraft/class_3414; field_15149 ENTITY_PHANTOM_HURT - f Lnet/minecraft/class_3414; field_21924 BLOCK_NETHERRACK_BREAK - f Lnet/minecraft/class_3414; field_14562 ENTITY_ZOMBIE_ATTACK_WOODEN_DOOR - f Lnet/minecraft/class_3414; field_20677 ENTITY_VILLAGER_WORK_LIBRARIAN - f Lnet/minecraft/class_3414; field_15083 ENTITY_COD_AMBIENT - f Lnet/minecraft/class_3414; field_21871 BLOCK_BASALT_FALL - f Lnet/minecraft/class_3414; field_21899 BLOCK_NETHER_SPROUT_STEP - f Lnet/minecraft/class_3414; field_14789 ENTITY_LLAMA_SPIT - f Lnet/minecraft/class_3414; field_14970 ENTITY_BLAZE_SHOOT - f Lnet/minecraft/class_3414; field_18268 ENTITY_MOOSHROOM_MILK - f Lnet/minecraft/class_3414; field_14892 ENTITY_HUSK_DEATH - f Lnet/minecraft/class_3414; field_15121 ENTITY_SQUID_SQUIRT - f Lnet/minecraft/class_3414; field_15160 ENTITY_SHULKER_DEATH - f Lnet/minecraft/class_3414; field_21074 BLOCK_HONEY_BLOCK_SLIDE - f Lnet/minecraft/class_3414; field_14660 ENTITY_FISHING_BOBBER_SPLASH - f Lnet/minecraft/class_3414; field_16509 BLOCK_SCAFFOLDING_BREAK - f Lnet/minecraft/class_3414; field_19150 ENTITY_PILLAGER_CELEBRATE - f Lnet/minecraft/class_3414; field_15107 ENTITY_POLAR_BEAR_HURT - f Lnet/minecraft/class_3414; field_24634 ENTITY_PARROT_IMITATE_HOGLIN - f Lnet/minecraft/class_3414; field_15042 ENTITY_WOLF_SHAKE - f Lnet/minecraft/class_3414; field_14661 ENTITY_DONKEY_ANGRY - f Lnet/minecraft/class_3414; field_14568 ITEM_BUCKET_FILL_FISH - f Lnet/minecraft/class_3414; field_15076 ENTITY_PANDA_SNEEZE - f Lnet/minecraft/class_3414; field_14837 MUSIC_DRAGON - f Lnet/minecraft/class_3414; field_15025 BLOCK_WET_GRASS_PLACE - f Lnet/minecraft/class_3414; field_14806 ITEM_TRIDENT_RIPTIDE_2 - f Lnet/minecraft/class_3414; field_21930 BLOCK_ANCIENT_DEBRIS_HIT - f Lnet/minecraft/class_3414; field_15003 ENTITY_COD_DEATH - f Lnet/minecraft/class_3414; field_15009 ENTITY_BAT_AMBIENT - f Lnet/minecraft/class_3414; field_21900 BLOCK_NETHER_SPROUT_PLACE - f Lnet/minecraft/class_3414; field_14795 ENTITY_LLAMA_STEP - f Lnet/minecraft/class_3414; field_17711 UI_STONECUTTER_SELECT_RECIPE - f Lnet/minecraft/class_3414; field_14849 ENTITY_SLIME_DEATH_SMALL - f Lnet/minecraft/class_3414; field_14775 BLOCK_LADDER_HIT - f Lnet/minecraft/class_3414; field_15156 BLOCK_GRAVEL_FALL - f Lnet/minecraft/class_3414; field_14560 BLOCK_SLIME_BLOCK_FALL - f Lnet/minecraft/class_3414; field_14822 ENTITY_RAVAGER_STUNNED - f Lnet/minecraft/class_3414; field_16510 BLOCK_SCAFFOLDING_FALL - f Lnet/minecraft/class_3414; field_15049 ENTITY_PILLAGER_DEATH - f Lnet/minecraft/class_3414; field_14599 ENTITY_EVOKER_DEATH - f Lnet/minecraft/class_3414; field_15192 ENTITY_CREEPER_HURT - f Lnet/minecraft/class_3414; field_15238 ENTITY_PHANTOM_SWOOP - f Lnet/minecraft/class_3414; field_21925 BLOCK_NETHERRACK_STEP - f Lnet/minecraft/class_3414; field_14670 ENTITY_ZOMBIE_ATTACK_IRON_DOOR - f Lnet/minecraft/class_3414; field_20678 ENTITY_VILLAGER_WORK_MASON - f Lnet/minecraft/class_3414; field_14886 ENTITY_BOAT_PADDLE_LAND - f Lnet/minecraft/class_3414; field_18269 ENTITY_MOOSHROOM_SUSPICIOUS_MILK - f Lnet/minecraft/class_3414; field_15196 ENTITY_HUSK_HURT - f Lnet/minecraft/class_3414; field_15026 BLOCK_STONE_BREAK - f Lnet/minecraft/class_3414; field_15229 ENTITY_SHULKER_HURT - f Lnet/minecraft/class_3414; field_21075 BLOCK_HONEY_BLOCK_STEP - f Lnet/minecraft/class_3414; field_14596 ENTITY_FISHING_BOBBER_THROW - f Lnet/minecraft/class_3414; field_15018 ENTITY_GENERIC_SMALL_FALL - f Lnet/minecraft/class_3414; field_15206 BLOCK_ENDER_CHEST_CLOSE - f Lnet/minecraft/class_3414; field_15036 ENTITY_POLAR_BEAR_STEP - f Lnet/minecraft/class_3414; field_15185 ENTITY_PARROT_IMITATE_HUSK - f Lnet/minecraft/class_3414; field_14772 ENTITY_WOLF_STEP - f Lnet/minecraft/class_3414; field_14598 ENTITY_DONKEY_CHEST - f Lnet/minecraft/class_3414; field_15202 ITEM_BUCKET_FILL_LAVA - f Lnet/minecraft/class_3414; field_14604 ENTITY_PANDA_AMBIENT - f Lnet/minecraft/class_3414; field_14631 MUSIC_END - f Lnet/minecraft/class_3414; field_14774 BLOCK_WET_GRASS_STEP - f Lnet/minecraft/class_3414; field_14717 ITEM_TRIDENT_RIPTIDE_3 - f Lnet/minecraft/class_3414; field_14918 ENTITY_COD_FLOP - f Lnet/minecraft/class_3414; field_14911 ENTITY_BAT_DEATH - f Lnet/minecraft/class_3414; field_21901 BLOCK_NETHER_SPROUT_HIT - f Lnet/minecraft/class_3414; field_14554 ENTITY_LLAMA_SWAG - f Lnet/minecraft/class_3414; field_15195 UI_TOAST_CHALLENGE_COMPLETE - f Lnet/minecraft/class_3414; field_14620 ENTITY_SLIME_HURT_SMALL - f Lnet/minecraft/class_3414; field_14853 BLOCK_LADDER_PLACE - f Lnet/minecraft/class_3414; field_14697 BLOCK_GRAVEL_HIT - f Lnet/minecraft/class_3414; field_20615 ITEM_HONEY_BOTTLE_DRINK - f Lnet/minecraft/class_3414; field_15145 ITEM_FLINTANDSTEEL_USE - f Lnet/minecraft/class_3414; field_16506 BLOCK_SCAFFOLDING_HIT - f Lnet/minecraft/class_3414; field_15159 ENTITY_PILLAGER_HURT - f Lnet/minecraft/class_3414; field_14692 ENTITY_EVOKER_FANGS_ATTACK - f Lnet/minecraft/class_3414; field_15057 ENTITY_CREEPER_PRIMED - f Lnet/minecraft/class_3414; field_14615 ENTITY_PIG_AMBIENT - f Lnet/minecraft/class_3414; field_21926 BLOCK_NETHERRACK_PLACE - f Lnet/minecraft/class_3414; field_14742 ENTITY_ZOMBIE_BREAK_WOODEN_DOOR - f Lnet/minecraft/class_3414; field_20679 ENTITY_VILLAGER_WORK_SHEPHERD - f Lnet/minecraft/class_3414; field_14736 ENTITY_WITCH_AMBIENT - f Lnet/minecraft/class_3414; field_15001 ITEM_TRIDENT_THROW - f Lnet/minecraft/class_3414; field_15171 ENTITY_BOAT_PADDLE_WATER - f Lnet/minecraft/class_3414; field_14705 ENTITY_MOOSHROOM_SHEAR - f Lnet/minecraft/class_3414; field_15046 ENTITY_HUSK_STEP - f Lnet/minecraft/class_3414; field_14954 BLOCK_STONE_BUTTON_CLICK_OFF - f Lnet/minecraft/class_3414; field_15135 ENTITY_SHULKER_HURT_CLOSED - f Lnet/minecraft/class_3414; field_14737 ENTITY_GENERIC_SPLASH - f Lnet/minecraft/class_3414; field_14952 BLOCK_ENDER_CHEST_OPEN - f Lnet/minecraft/class_3414; field_14937 ENTITY_POLAR_BEAR_WARNING - f Lnet/minecraft/class_3414; field_15064 ENTITY_PARROT_IMITATE_ILLUSIONER - f Lnet/minecraft/class_3414; field_14807 ENTITY_WOLF_WHINE - f Lnet/minecraft/class_3414; field_14827 ENTITY_DONKEY_DEATH - f Lnet/minecraft/class_3414; field_17483 BLOCK_CAMPFIRE_CRACKLE - f Lnet/minecraft/class_3414; field_15208 ENTITY_PANDA_DEATH - f Lnet/minecraft/class_3414; field_14681 MUSIC_GAME - f Lnet/minecraft/class_3414; field_14850 ENTITY_ZOMBIE_CONVERTED_TO_DROWNED - f Lnet/minecraft/class_3414; field_20680 ENTITY_VILLAGER_WORK_TOOLSMITH - f Lnet/minecraft/class_3414; field_14851 ENTITY_COD_HURT - f Lnet/minecraft/class_3414; field_14746 ENTITY_BAT_HURT - f Lnet/minecraft/class_3414; field_21902 BLOCK_NETHER_SPROUT_FALL - f Lnet/minecraft/class_3414; field_14889 ENTITY_MAGMA_CUBE_DEATH_SMALL - f Lnet/minecraft/class_3414; field_14561 UI_TOAST_IN - f Lnet/minecraft/class_3414; field_14694 ENTITY_SLIME_JUMP_SMALL - f Lnet/minecraft/class_3414; field_14947 ENTITY_HORSE_AMBIENT - f Lnet/minecraft/class_3414; field_18055 ENTITY_FOX_AGGRO - f Lnet/minecraft/class_3414; field_16507 BLOCK_SCAFFOLDING_PLACE - f Lnet/minecraft/class_3414; field_15228 BLOCK_PISTON_CONTRACT - f Lnet/minecraft/class_3414; field_15111 ENTITY_EVOKER_HURT - f Lnet/minecraft/class_3414; field_17610 BLOCK_CROP_BREAK - f Lnet/minecraft/class_3414; field_14689 ENTITY_PIG_DEATH - f Lnet/minecraft/class_3414; field_21927 BLOCK_NETHERRACK_HIT - f Lnet/minecraft/class_3414; field_24629 ENTITY_DONKEY_EAT - f Lnet/minecraft/class_3414; field_15051 ENTITY_CAT_AMBIENT - f Lnet/minecraft/class_3414; field_15106 ENTITY_PANDA_EAT - f Lnet/minecraft/class_3414; field_15129 MUSIC_MENU - f Lnet/minecraft/class_3414; field_19153 ENTITY_WITCH_CELEBRATE - f Lnet/minecraft/class_3414; field_14896 ITEM_TRIDENT_THUNDER - f Lnet/minecraft/class_3414; field_21872 BLOCK_BONE_BLOCK_BREAK - f Lnet/minecraft/class_3414; field_14614 ENTITY_MULE_AMBIENT - f Lnet/minecraft/class_3414; field_14644 ENTITY_ILLUSIONER_AMBIENT - f Lnet/minecraft/class_3414; field_14791 BLOCK_STONE_BUTTON_CLICK_ON - f Lnet/minecraft/class_3414; field_15017 ENTITY_SHULKER_OPEN - f Lnet/minecraft/class_3414; field_14640 BLOCK_SLIME_BLOCK_HIT - f Lnet/minecraft/class_3414; field_14733 ENTITY_RAVAGER_ROAR - f Lnet/minecraft/class_3414; field_14818 ENTITY_GENERIC_SWIM - f Lnet/minecraft/class_3414; field_15024 ENTITY_ENDER_DRAGON_AMBIENT - f Lnet/minecraft/class_3414; field_14802 BLOCK_PORTAL_AMBIENT - f Lnet/minecraft/class_3414; field_14963 ENTITY_PARROT_IMITATE_MAGMA_CUBE - f Lnet/minecraft/class_3414; field_14541 BLOCK_WOODEN_DOOR_CLOSE - f Lnet/minecraft/class_3414; field_14908 ENTITY_EVOKER_PREPARE_ATTACK - f Lnet/minecraft/class_3414; field_17611 ITEM_CROP_PLANT - f Lnet/minecraft/class_3414; field_14750 ENTITY_PIG_HURT - f Lnet/minecraft/class_3414; field_21928 BLOCK_NETHERRACK_FALL - f Lnet/minecraft/class_3414; field_14930 ENTITY_ZOMBIE_DEATH - f Lnet/minecraft/class_3414; field_20681 ENTITY_VILLAGER_WORK_WEAPONSMITH - f Lnet/minecraft/class_3414; field_14762 BLOCK_COMPARATOR_CLICK - f Lnet/minecraft/class_3414; field_14845 ENTITY_BAT_LOOP - f Lnet/minecraft/class_3414; field_21936 BLOCK_ANCIENT_DEBRIS_FALL - f Lnet/minecraft/class_3414; field_21903 BLOCK_FUNGUS_BREAK - f Lnet/minecraft/class_3414; field_23194 BLOCK_LODESTONE_BREAK - f Lnet/minecraft/class_3414; field_14641 UI_TOAST_OUT - f Lnet/minecraft/class_3414; field_15148 ENTITY_SLIME_SQUISH_SMALL - f Lnet/minecraft/class_3414; field_14723 BLOCK_STONE_FALL - f Lnet/minecraft/class_3414; field_15000 ENTITY_SHULKER_SHOOT - f Lnet/minecraft/class_3414; field_15043 ENTITY_HORSE_ANGRY - f Lnet/minecraft/class_3414; field_18056 ENTITY_FOX_AMBIENT - f Lnet/minecraft/class_3414; field_16508 BLOCK_SCAFFOLDING_STEP - f Lnet/minecraft/class_3414; field_15134 BLOCK_PISTON_EXTEND - f Lnet/minecraft/class_3414; field_14781 ENTITY_DONKEY_HURT - f Lnet/minecraft/class_3414; field_16440 ENTITY_CAT_STRAY_AMBIENT - f Lnet/minecraft/class_3414; field_15035 ENTITY_PANDA_STEP - f Lnet/minecraft/class_3414; field_23793 MUSIC_NETHER_BASALT_DELTAS - f Lnet/minecraft/class_3414; field_14820 ENTITY_WITCH_DEATH - f Lnet/minecraft/class_3414; field_14859 BLOCK_TRIPWIRE_ATTACH - f Lnet/minecraft/class_3414; field_21873 BLOCK_BONE_BLOCK_FALL - f Lnet/minecraft/class_3414; field_24631 ENTITY_MULE_ANGRY - f Lnet/minecraft/class_3414; field_14545 ENTITY_ILLUSIONER_CAST_SPELL - f Lnet/minecraft/class_3414; field_14948 BLOCK_LADDER_STEP - f Lnet/minecraft/class_3414; field_14609 BLOCK_GRAVEL_PLACE - f Lnet/minecraft/class_3414; field_14788 BLOCK_SLIME_BLOCK_PLACE - f Lnet/minecraft/class_3414; field_24071 BLOCK_NETHER_GOLD_ORE_BREAK - f Lnet/minecraft/class_3414; field_14566 ENTITY_GHAST_AMBIENT - f Lnet/minecraft/class_3414; field_14773 ENTITY_ENDER_DRAGON_DEATH - f Lnet/minecraft/class_3414; field_14716 BLOCK_PORTAL_TRAVEL - f Lnet/minecraft/class_3414; field_14957 ENTITY_PARROT_IMITATE_PHANTOM - f Lnet/minecraft/class_3414; field_14664 BLOCK_WOODEN_DOOR_OPEN - f Lnet/minecraft/class_3414; field_15193 ENTITY_EVOKER_PREPARE_SUMMON - f Lnet/minecraft/class_3414; field_14636 ITEM_CROSSBOW_HIT - f Lnet/minecraft/class_3414; field_14824 ENTITY_PIG_SADDLE - f Lnet/minecraft/class_3414; field_15047 BLOCK_NOTE_BLOCK_BASEDRUM - f Lnet/minecraft/class_3414; field_15023 ENTITY_ZOMBIE_DESTROY_EGG - f Lnet/minecraft/class_3414; field_14735 ENTITY_VINDICATOR_AMBIENT - f Lnet/minecraft/class_3414; field_14542 BLOCK_ANVIL_BREAK - f Lnet/minecraft/class_3414; field_17606 BLOCK_COMPOSTER_EMPTY - f Lnet/minecraft/class_3414; field_14610 ENTITY_BAT_TAKEOFF - f Lnet/minecraft/class_3414; field_21904 BLOCK_FUNGUS_STEP - f Lnet/minecraft/class_3414; field_23195 BLOCK_LODESTONE_STEP - f Lnet/minecraft/class_3414; field_15063 ENTITY_MULE_CHEST - f Lnet/minecraft/class_3414; field_15153 ENTITY_ILLUSIONER_DEATH - f Lnet/minecraft/class_3414; field_14658 BLOCK_STONE_HIT - f Lnet/minecraft/class_3414; field_14915 ENTITY_SHULKER_TELEPORT - f Lnet/minecraft/class_3414; field_15141 ENTITY_HORSE_ARMOR - f Lnet/minecraft/class_3414; field_18058 ENTITY_FOX_BITE - f Lnet/minecraft/class_3414; field_14603 ENTITY_SHEEP_AMBIENT - f Lnet/minecraft/class_3414; field_15016 ENTITY_PLAYER_ATTACK_CRIT - f Lnet/minecraft/class_3414; field_15080 BLOCK_WOODEN_TRAPDOOR_CLOSE - f Lnet/minecraft/class_3414; field_15030 ENTITY_DROWNED_AMBIENT - f Lnet/minecraft/class_3414; field_14971 ENTITY_CAT_DEATH - f Lnet/minecraft/class_3414; field_14936 ENTITY_PANDA_CANT_BREED - f Lnet/minecraft/class_3414; field_23794 MUSIC_NETHER_NETHER_WASTES - f Lnet/minecraft/class_3414; field_14565 ENTITY_WITCH_DRINK - f Lnet/minecraft/class_3414; field_14787 BLOCK_TRIPWIRE_CLICK_OFF - f Lnet/minecraft/class_3414; field_21874 BLOCK_BONE_BLOCK_HIT - f Lnet/minecraft/class_3414; field_17745 BLOCK_LANTERN_BREAK - f Lnet/minecraft/class_3414; field_14798 BLOCK_GRAVEL_STEP - f Lnet/minecraft/class_3414; field_15180 BLOCK_SLIME_BLOCK_STEP - f Lnet/minecraft/class_3414; field_24072 BLOCK_NETHER_GOLD_ORE_FALL - f Lnet/minecraft/class_3414; field_14648 ENTITY_GHAST_DEATH - f Lnet/minecraft/class_3414; field_14803 ENTITY_DRAGON_FIREBALL_EXPLODE - f Lnet/minecraft/class_3414; field_14669 BLOCK_PORTAL_TRIGGER - f Lnet/minecraft/class_3414; field_24635 ENTITY_PARROT_IMITATE_PIGLIN - f Lnet/minecraft/class_3414; field_14665 BLOCK_ANVIL_DESTROY - f Lnet/minecraft/class_3414; field_15058 ENTITY_EVOKER_PREPARE_WOLOLO - f Lnet/minecraft/class_3414; field_14626 ITEM_CROSSBOW_LOADING_END - f Lnet/minecraft/class_3414; field_14894 ENTITY_PIG_STEP - f Lnet/minecraft/class_3414; field_14624 BLOCK_NOTE_BLOCK_BASS - f Lnet/minecraft/class_3414; field_15154 ENTITY_ZOMBIE_HORSE_AMBIENT - f Lnet/minecraft/class_3414; field_19151 ENTITY_VINDICATOR_CELEBRATE - f Lnet/minecraft/class_3414; field_17607 BLOCK_COMPOSTER_FILL - f Lnet/minecraft/class_3414; field_14703 BLOCK_BEACON_ACTIVATE - f Lnet/minecraft/class_3414; field_21875 BLOCK_BONE_BLOCK_PLACE - f Lnet/minecraft/class_3414; field_15158 ENTITY_MULE_DEATH - f Lnet/minecraft/class_3414; field_15223 ENTITY_ILLUSIONER_HURT - f Lnet/minecraft/class_3414; field_14574 BLOCK_STONE_PLACE - f Lnet/minecraft/class_3414; field_14786 ENTITY_SILVERFISH_AMBIENT - f Lnet/minecraft/class_3414; field_14556 ENTITY_HORSE_BREATHE - f Lnet/minecraft/class_3414; field_18059 ENTITY_FOX_DEATH - f Lnet/minecraft/class_3414; field_14814 ENTITY_SHEEP_DEATH - f Lnet/minecraft/class_3414; field_14999 ENTITY_PLAYER_ATTACK_KNOCKBACK - f Lnet/minecraft/class_3414; field_15054 ENTITY_GHAST_HURT - f Lnet/minecraft/class_3414; field_14550 ENTITY_ENDER_DRAGON_FLAP - f Lnet/minecraft/class_3414; field_14553 ENTITY_PUFFER_FISH_AMBIENT - f Lnet/minecraft/class_3414; field_25727 ENTITY_PARROT_IMITATE_PIGLIN_BRUTE - f Lnet/minecraft/class_3414; field_14932 BLOCK_WOODEN_TRAPDOOR_OPEN - f Lnet/minecraft/class_3414; field_14980 ENTITY_DROWNED_AMBIENT_WATER - f Lnet/minecraft/class_3414; field_16439 ENTITY_CAT_EAT - f Lnet/minecraft/class_3414; field_14564 AMBIENT_CAVE - f Lnet/minecraft/class_3414; field_14801 ENTITY_PANDA_AGGRESSIVE_AMBIENT - f Lnet/minecraft/class_3414; field_23795 MUSIC_NETHER_SOUL_SAND_VALLEY - f Lnet/minecraft/class_3414; field_14645 ENTITY_WITCH_HURT - f Lnet/minecraft/class_3414; field_14674 BLOCK_TRIPWIRE_CLICK_ON - f Lnet/minecraft/class_3414; field_14812 ENTITY_VEX_AMBIENT - f Lnet/minecraft/class_3414; field_22463 BLOCK_SMITHING_TABLE_USE - f Lnet/minecraft/class_3414; field_17746 BLOCK_LANTERN_FALL - f Lnet/minecraft/class_3414; field_16865 BLOCK_GRINDSTONE_USE - f Lnet/minecraft/class_3414; field_21949 BLOCK_SOUL_SAND_BREAK - f Lnet/minecraft/class_3414; field_24073 BLOCK_NETHER_GOLD_ORE_HIT - f Lnet/minecraft/class_3414; field_15166 ENTITY_HORSE_DEATH - f Lnet/minecraft/class_3414; field_18060 ENTITY_FOX_EAT - f Lnet/minecraft/class_3414; field_14727 BLOCK_ANVIL_FALL - f Lnet/minecraft/class_3414; field_14730 ENTITY_SHEEP_HURT - f Lnet/minecraft/class_3414; field_14914 ENTITY_PLAYER_ATTACK_NODAMAGE - f Lnet/minecraft/class_3414; field_14637 ENTITY_EXPERIENCE_BOTTLE_THROW - f Lnet/minecraft/class_3414; field_14860 ITEM_CROSSBOW_LOADING_MIDDLE - f Lnet/minecraft/class_3414; field_22263 ENTITY_PIGLIN_ADMIRING_ITEM - f Lnet/minecraft/class_3414; field_14793 BLOCK_NOTE_BLOCK_BELL - f Lnet/minecraft/class_3414; field_14543 ENTITY_ZOMBIE_HORSE_DEATH - f Lnet/minecraft/class_3414; field_14642 ENTITY_VINDICATOR_DEATH - f Lnet/minecraft/class_3414; field_15067 ENTITY_WITCH_THROW - f Lnet/minecraft/class_3414; field_14595 BLOCK_TRIPWIRE_DETACH - f Lnet/minecraft/class_3414; field_21876 BLOCK_BONE_BLOCK_STEP - f Lnet/minecraft/class_3414; field_24632 ENTITY_MULE_EAT - f Lnet/minecraft/class_3414; field_14941 ENTITY_ILLUSIONER_MIRROR_MOVE - f Lnet/minecraft/class_3414; field_15116 BLOCK_STONE_PRESSURE_PLATE_CLICK_OFF - f Lnet/minecraft/class_3414; field_14673 ENTITY_SILVERFISH_DEATH - f Lnet/minecraft/class_3414; field_14958 ENTITY_GHAST_SCREAM - f Lnet/minecraft/class_3414; field_14671 ENTITY_ENDER_DRAGON_GROWL - f Lnet/minecraft/class_3414; field_15133 ENTITY_PUFFER_FISH_BLOW_OUT - f Lnet/minecraft/class_3414; field_18815 ENTITY_PARROT_IMITATE_PILLAGER - f Lnet/minecraft/class_3414; field_15215 BLOCK_WOOD_BREAK - f Lnet/minecraft/class_3414; field_23790 AMBIENT_BASALT_DELTAS_ADDITIONS - f Lnet/minecraft/class_3414; field_15066 ENTITY_DROWNED_DEATH - f Lnet/minecraft/class_3414; field_14938 ENTITY_CAT_HISS - f Lnet/minecraft/class_3414; field_14715 ENTITY_PANDA_WORRIED_AMBIENT - f Lnet/minecraft/class_3414; field_23796 MUSIC_NETHER_CRIMSON_FOREST - f Lnet/minecraft/class_3414; field_21905 BLOCK_FUNGUS_PLACE - f Lnet/minecraft/class_3414; field_23196 BLOCK_LODESTONE_PLACE - f Lnet/minecraft/class_3414; field_14898 ENTITY_VEX_CHARGE - f Lnet/minecraft/class_3414; field_17618 BLOCK_SMOKER_SMOKE - f Lnet/minecraft/class_3414; field_17742 BLOCK_LANTERN_HIT - f Lnet/minecraft/class_3414; field_14714 ENTITY_GUARDIAN_AMBIENT - f Lnet/minecraft/class_3414; field_21950 BLOCK_SOUL_SAND_STEP - f Lnet/minecraft/class_3414; field_24074 BLOCK_NETHER_GOLD_ORE_PLACE - f Lnet/minecraft/class_3414; field_14590 ENTITY_DOLPHIN_EAT - f Lnet/minecraft/class_3414; field_19195 BLOCK_BUBBLE_COLUMN_UPWARDS_INSIDE - f Lnet/minecraft/class_3414; field_18312 BLOCK_NOTE_BLOCK_BANJO - f Lnet/minecraft/class_3414; field_15059 MUSIC_DISC_MALL - f Lnet/minecraft/class_3414; field_17752 ENTITY_WANDERING_TRADER_YES - f Lnet/minecraft/class_3414; field_14663 ENCHANT_THORNS_HIT - f Lnet/minecraft/class_3414; field_20612 BLOCK_BEEHIVE_WORK - f Lnet/minecraft/class_3414; field_15100 BLOCK_METAL_PRESSURE_PLATE_CLICK_OFF - f Lnet/minecraft/class_3414; field_14899 ENTITY_HOSTILE_DEATH - f Lnet/minecraft/class_3414; field_14657 ENTITY_SPIDER_HURT - f Lnet/minecraft/class_3414; field_14616 ITEM_SHOVEL_FLATTEN - f Lnet/minecraft/class_3414; field_14667 ENTITY_ITEM_FRAME_ADD_ITEM - f Lnet/minecraft/class_3414; field_14583 BLOCK_GLASS_HIT - f Lnet/minecraft/class_3414; field_14951 AMBIENT_UNDERWATER_LOOP - f Lnet/minecraft/class_3414; field_15069 ENTITY_SKELETON_HURT - f Lnet/minecraft/class_3414; field_15164 ENTITY_RABBIT_HURT - f Lnet/minecraft/class_3414; field_14928 ENTITY_GENERIC_BIG_FALL - f Lnet/minecraft/class_3414; field_15203 ENTITY_ELDER_GUARDIAN_CURSE - f Lnet/minecraft/class_3414; field_14778 ENTITY_PLAYER_SMALL_FALL - f Lnet/minecraft/class_3414; field_14647 ENTITY_PARROT_IMITATE_DROWNED - f Lnet/minecraft/class_3414; field_15181 BLOCK_WOOL_STEP - f Lnet/minecraft/class_3414; field_14871 ENTITY_CHICKEN_AMBIENT - f Lnet/minecraft/class_3414; field_15227 BLOCK_BAMBOO_SAPLING_HIT - f Lnet/minecraft/class_3414; field_21890 BLOCK_STEM_HIT - f Lnet/minecraft/class_3414; field_14865 ENTITY_LIGHTNING_BOLT_THUNDER - f Lnet/minecraft/class_3414; field_14634 ENTITY_TURTLE_LAY_EGG - f Lnet/minecraft/class_3414; field_23200 ENTITY_STRIDER_AMBIENT - f Lnet/minecraft/class_3414; field_15186 ENTITY_ARMOR_STAND_FALL - f Lnet/minecraft/class_3414; field_22259 ENTITY_HOGLIN_DEATH - f Lnet/minecraft/class_3414; field_14702 ENTITY_FIREWORK_ROCKET_LAUNCH - f Lnet/minecraft/class_3414; field_15123 ENTITY_SALMON_DEATH - f Lnet/minecraft/class_3414; field_22272 ENTITY_PIGLIN_CONVERTED_TO_ZOMBIFIED - f Lnet/minecraft/class_3414; field_14582 ENTITY_ENDERMITE_HURT - f Lnet/minecraft/class_3414; field_14672 BLOCK_CORAL_BLOCK_HIT - f Lnet/minecraft/class_3414; field_24633 ENTITY_PARROT_IMITATE_ZOGLIN - f Lnet/minecraft/class_3414; field_21916 BLOCK_WART_BLOCK_PLACE - f Lnet/minecraft/class_3414; field_14724 ENTITY_WOLF_AMBIENT - f Lnet/minecraft/class_3414; field_15216 ENTITY_DOLPHIN_HURT - f Lnet/minecraft/class_3414; field_14650 BLOCK_BUBBLE_COLUMN_WHIRLPOOL_AMBIENT - f Lnet/minecraft/class_3414; field_16441 ENTITY_OCELOT_HURT - f Lnet/minecraft/class_3414; field_15169 MUSIC_DISC_MELLOHI - f Lnet/minecraft/class_3414; field_15237 BLOCK_WATER_AMBIENT - f Lnet/minecraft/class_3414; field_15079 ENTITY_TNT_PRIMED - f Lnet/minecraft/class_3414; field_14897 ENTITY_ARMOR_STAND_HIT - f Lnet/minecraft/class_3414; field_17265 BLOCK_BELL_USE - f Lnet/minecraft/class_3414; field_15028 AMBIENT_UNDERWATER_LOOP_ADDITIONS - f Lnet/minecraft/class_3414; field_14585 ENTITY_ITEM_FRAME_BREAK - f Lnet/minecraft/class_3414; field_14843 BLOCK_GLASS_PLACE - f Lnet/minecraft/class_3414; field_14633 ENTITY_SKELETON_SHOOT - f Lnet/minecraft/class_3414; field_15091 ENTITY_RABBIT_JUMP - f Lnet/minecraft/class_3414; field_14821 ENTITY_GENERIC_BURN - f Lnet/minecraft/class_3414; field_15052 ENTITY_ELDER_GUARDIAN_DEATH - f Lnet/minecraft/class_3414; field_14810 ENTITY_PLAYER_SPLASH - f Lnet/minecraft/class_3414; field_14777 ENTITY_PARROT_IMITATE_ELDER_GUARDIAN - f Lnet/minecraft/class_3414; field_15220 ENTITY_PARROT_IMITATE_ZOMBIE - f Lnet/minecraft/class_3414; field_21917 BLOCK_WART_BLOCK_HIT - f Lnet/minecraft/class_3414; field_23672 ENTITY_ZOGLIN_AMBIENT - f Lnet/minecraft/class_3414; field_20670 ENTITY_VILLAGER_WORK_BUTCHER - f Lnet/minecraft/class_3414; field_15140 ENTITY_CHICKEN_DEATH - f Lnet/minecraft/class_3414; field_15125 BLOCK_BAMBOO_SAPLING_PLACE - f Lnet/minecraft/class_3414; field_21892 BLOCK_STEM_FALL - f Lnet/minecraft/class_3414; field_14767 ENTITY_LINGERING_POTION_THROW - f Lnet/minecraft/class_3414; field_14549 ENTITY_TURTLE_SHAMBLE - f Lnet/minecraft/class_3414; field_23201 ENTITY_STRIDER_HAPPY - f Lnet/minecraft/class_3414; field_22260 ENTITY_HOGLIN_HURT - f Lnet/minecraft/class_3414; field_14712 ENTITY_FIREWORK_ROCKET_SHOOT - f Lnet/minecraft/class_3414; field_14563 ENTITY_SALMON_FLOP - f Lnet/minecraft/class_3414; field_25728 ENTITY_PIGLIN_BRUTE_AMBIENT - f Lnet/minecraft/class_3414; field_14678 ENTITY_ENDERMITE_STEP - f Lnet/minecraft/class_3414; field_15087 BLOCK_CORAL_BLOCK_PLACE - f Lnet/minecraft/class_3414; field_14876 ENTITY_PLAYER_SPLASH_HIGH_SPEED - f Lnet/minecraft/class_3414; field_14854 ENTITY_PARROT_IMITATE_ENDER_DRAGON - f Lnet/minecraft/class_3414; field_14659 ENTITY_WOLF_DEATH - f Lnet/minecraft/class_3414; field_14707 ENTITY_DOLPHIN_JUMP - f Lnet/minecraft/class_3414; field_19196 BLOCK_BUBBLE_COLUMN_WHIRLPOOL_INSIDE - f Lnet/minecraft/class_3414; field_16437 ENTITY_OCELOT_AMBIENT - f Lnet/minecraft/class_3414; field_23968 MUSIC_DISC_PIGSTEP - f Lnet/minecraft/class_3414; field_14969 ENTITY_ARMOR_STAND_PLACE - f Lnet/minecraft/class_3414; field_14946 WEATHER_RAIN - f Lnet/minecraft/class_3414; field_14931 ITEM_TOTEM_USE - f Lnet/minecraft/class_3414; field_14844 ENTITY_ITEM_FRAME_PLACE - f Lnet/minecraft/class_3414; field_14769 BLOCK_GLASS_STEP - f Lnet/minecraft/class_3414; field_14548 ENTITY_SKELETON_STEP - f Lnet/minecraft/class_3414; field_17266 EVENT_RAID_HORN - f Lnet/minecraft/class_3414; field_14732 ENTITY_GENERIC_DEATH - f Lnet/minecraft/class_3414; field_14973 ENTITY_ELDER_GUARDIAN_DEATH_LAND - f Lnet/minecraft/class_3414; field_14757 ENTITY_ENDER_PEARL_THROW - f Lnet/minecraft/class_3414; field_14935 BLOCK_CORAL_BLOCK_STEP - f Lnet/minecraft/class_3414; field_14676 ENTITY_PARROT_IMITATE_ZOMBIE_VILLAGER - f Lnet/minecraft/class_3414; field_21918 BLOCK_WART_BLOCK_FALL - f Lnet/minecraft/class_3414; field_23673 ENTITY_ZOGLIN_ANGRY - f Lnet/minecraft/class_3414; field_20671 ENTITY_VILLAGER_WORK_CARTOGRAPHER - f Lnet/minecraft/class_3414; field_15219 ENTITY_CHICKEN_EGG - f Lnet/minecraft/class_3414; field_17603 BLOCK_BARREL_CLOSE - f Lnet/minecraft/class_3414; field_21893 BLOCK_NYLIUM_BREAK - f Lnet/minecraft/class_3414; field_14682 ENTITY_LLAMA_AMBIENT - f Lnet/minecraft/class_3414; field_14864 ENTITY_TURTLE_SHAMBLE_BABY - f Lnet/minecraft/class_3414; field_23202 ENTITY_STRIDER_RETREAT - f Lnet/minecraft/class_3414; field_14988 BLOCK_METAL_PRESSURE_PLATE_CLICK_ON - f Lnet/minecraft/class_3414; field_14994 ENTITY_HOSTILE_HURT - f Lnet/minecraft/class_3414; field_14760 ENTITY_SPIDER_STEP - f Lnet/minecraft/class_3414; field_14690 ENTITY_SHULKER_AMBIENT - f Lnet/minecraft/class_3414; field_22261 ENTITY_HOGLIN_RETREAT - f Lnet/minecraft/class_3414; field_14800 ENTITY_FIREWORK_ROCKET_TWINKLE - f Lnet/minecraft/class_3414; field_14638 ENTITY_SALMON_HURT - f Lnet/minecraft/class_3414; field_25729 ENTITY_PIGLIN_BRUTE_ANGRY - f Lnet/minecraft/class_3414; field_14905 ENTITY_ZOMBIE_VILLAGER_CURE - f Lnet/minecraft/class_3414; field_20613 ENTITY_GENERIC_DRINK - f Lnet/minecraft/class_3414; field_14939 ENTITY_ELDER_GUARDIAN_FLOP - f Lnet/minecraft/class_3414; field_14998 ENTITY_PLAYER_SWIM - f Lnet/minecraft/class_3414; field_15022 ENTITY_PARROT_IMITATE_ENDERMITE - f Lnet/minecraft/class_3414; field_15151 ENTITY_ARROW_HIT - f Lnet/minecraft/class_3414; field_14575 ENTITY_WOLF_GROWL - f Lnet/minecraft/class_3414; field_14972 ENTITY_DOLPHIN_PLAY - f Lnet/minecraft/class_3414; field_14834 ITEM_BUCKET_EMPTY - f Lnet/minecraft/class_3414; field_16442 ENTITY_OCELOT_DEATH - f Lnet/minecraft/class_3414; field_14578 MUSIC_DISC_STAL - f Lnet/minecraft/class_3414; field_15020 WEATHER_RAIN_ABOVE - f Lnet/minecraft/class_3414; field_15213 ITEM_TRIDENT_HIT - f Lnet/minecraft/class_3414; field_21894 BLOCK_NYLIUM_STEP - f Lnet/minecraft/class_3414; field_14586 ENTITY_LLAMA_ANGRY - f Lnet/minecraft/class_3414; field_14764 ENTITY_TURTLE_SWIM - f Lnet/minecraft/class_3414; field_23203 ENTITY_STRIDER_DEATH - f Lnet/minecraft/class_3414; field_14770 ENTITY_ITEM_FRAME_REMOVE_ITEM - f Lnet/minecraft/class_3414; field_15037 BLOCK_GRASS_BREAK - f Lnet/minecraft/class_3414; field_14863 ENTITY_SLIME_ATTACK - f Lnet/minecraft/class_3414; field_14639 ENTITY_RAVAGER_AMBIENT - f Lnet/minecraft/class_3414; field_14996 ENTITY_ZOMBIE_VILLAGER_DEATH - f Lnet/minecraft/class_3414; field_14816 BLOCK_END_GATEWAY_SPAWN - f Lnet/minecraft/class_3414; field_14780 ENTITY_COW_AMBIENT - f Lnet/minecraft/class_3414; field_14602 ENTITY_PARROT_STEP - f Lnet/minecraft/class_3414; field_21919 BLOCK_NETHERITE_BLOCK_BREAK - f Lnet/minecraft/class_3414; field_23674 ENTITY_ZOGLIN_ATTACK - f Lnet/minecraft/class_3414; field_20672 ENTITY_VILLAGER_WORK_CLERIC - f Lnet/minecraft/class_3414; field_15068 AMBIENT_UNDERWATER_LOOP_ADDITIONS_RARE - f Lnet/minecraft/class_3414; field_14601 ENTITY_CHICKEN_HURT - f Lnet/minecraft/class_3414; field_17604 BLOCK_BARREL_OPEN - f Lnet/minecraft/class_3414; field_19167 BLOCK_BELL_RESONATE - f Lnet/minecraft/class_3414; field_14924 BLOCK_METAL_STEP - f Lnet/minecraft/class_3414; field_14754 ENTITY_HOSTILE_SMALL_FALL - f Lnet/minecraft/class_3414; field_14839 ENTITY_SPLASH_POTION_BREAK - f Lnet/minecraft/class_3414; field_14751 BLOCK_SHULKER_BOX_CLOSE - f Lnet/minecraft/class_3414; field_22262 ENTITY_HOGLIN_STEP - f Lnet/minecraft/class_3414; field_14882 ENTITY_FIREWORK_ROCKET_TWINKLE_FAR - f Lnet/minecraft/class_3414; field_15074 BLOCK_SAND_BREAK - f Lnet/minecraft/class_3414; field_25730 ENTITY_PIGLIN_BRUTE_DEATH - f Lnet/minecraft/class_3414; field_20614 ENTITY_GENERIC_EAT - f Lnet/minecraft/class_3414; field_14868 ENTITY_ELDER_GUARDIAN_HURT - f Lnet/minecraft/class_3414; field_15224 ENTITY_ARROW_HIT_PLAYER - f Lnet/minecraft/class_3414; field_15078 ENTITY_POLAR_BEAR_AMBIENT - f Lnet/minecraft/class_3414; field_15113 ENTITY_PARROT_IMITATE_EVOKER - f Lnet/minecraft/class_3414; field_15117 ENTITY_WOLF_HOWL - f Lnet/minecraft/class_3414; field_14887 ENTITY_DOLPHIN_SPLASH - f Lnet/minecraft/class_3414; field_14912 ITEM_BUCKET_EMPTY_FISH - f Lnet/minecraft/class_3414; field_14685 ENTITY_CHICKEN_STEP - f Lnet/minecraft/class_3414; field_21867 BLOCK_BASALT_BREAK - f Lnet/minecraft/class_3414; field_21895 BLOCK_NYLIUM_PLACE - f Lnet/minecraft/class_3414; field_15097 ENTITY_LLAMA_CHEST - f Lnet/minecraft/class_3414; field_15015 UI_BUTTON_CLICK - f Lnet/minecraft/class_3414; field_23204 ENTITY_STRIDER_HURT - f Lnet/minecraft/class_3414; field_15038 ENTITY_ITEM_FRAME_ROTATE_ITEM - f Lnet/minecraft/class_3414; field_14965 BLOCK_GRASS_FALL - f Lnet/minecraft/class_3414; field_14763 ENTITY_SLIME_DEATH - f Lnet/minecraft/class_3414; field_15240 ENTITY_RAVAGER_ATTACK - f Lnet/minecraft/class_3414; field_14943 BLOCK_SAND_FALL - f Lnet/minecraft/class_3414; field_25731 ENTITY_PIGLIN_BRUTE_HURT - f Lnet/minecraft/class_3414; field_14728 ENTITY_ZOMBIE_VILLAGER_HURT - f Lnet/minecraft/class_3414; field_19197 BLOCK_END_PORTAL_FRAME_FILL - f Lnet/minecraft/class_3414; field_14857 ENTITY_COW_DEATH - f Lnet/minecraft/class_3414; field_15178 AMBIENT_UNDERWATER_LOOP_ADDITIONS_ULTRA_RARE - f Lnet/minecraft/class_3414; field_14813 ENTITY_PHANTOM_AMBIENT - f Lnet/minecraft/class_3414; field_21920 BLOCK_NETHERITE_BLOCK_STEP - f Lnet/minecraft/class_3414; field_23675 ENTITY_ZOGLIN_DEATH - f Lnet/minecraft/class_3414; field_20673 ENTITY_VILLAGER_WORK_FARMER - f Lnet/minecraft/class_3414; field_14991 ENTITY_BLAZE_AMBIENT - f Lnet/minecraft/class_3414; field_14832 ENTITY_MINECART_INSIDE - f Lnet/minecraft/class_3414; field_14836 ENTITY_HOSTILE_SPLASH - f Lnet/minecraft/class_3414; field_14910 ENTITY_SPLASH_POTION_THROW - f Lnet/minecraft/class_3414; field_14825 BLOCK_SHULKER_BOX_OPEN - f Lnet/minecraft/class_3414; field_21070 BLOCK_HONEY_BLOCK_BREAK - f Lnet/minecraft/class_3414; field_14993 BLOCK_FIRE_AMBIENT - f Lnet/minecraft/class_3414; field_15014 ENTITY_SLIME_HURT - f Lnet/minecraft/class_3414; field_19148 ENTITY_RAVAGER_CELEBRATE - f Lnet/minecraft/class_3414; field_14600 ENTITY_ARROW_SHOOT - f Lnet/minecraft/class_3414; field_15152 ENTITY_GENERIC_EXPLODE - f Lnet/minecraft/class_3414; field_14652 ENTITY_ELDER_GUARDIAN_HURT_LAND - f Lnet/minecraft/class_3414; field_14605 ENTITY_POLAR_BEAR_AMBIENT_BABY - f Lnet/minecraft/class_3414; field_14577 ENTITY_PARROT_IMITATE_GHAST - f Lnet/minecraft/class_3414; field_15218 ENTITY_WOLF_HURT - f Lnet/minecraft/class_3414; field_14739 BLOCK_CHORUS_FLOWER_DEATH - f Lnet/minecraft/class_3414; field_21868 BLOCK_BASALT_STEP - f Lnet/minecraft/class_3414; field_21896 BLOCK_NYLIUM_HIT - f Lnet/minecraft/class_3414; field_15189 ENTITY_LLAMA_DEATH - f Lnet/minecraft/class_3414; field_14920 UI_LOOM_SELECT_PATTERN - f Lnet/minecraft/class_3414; field_23205 ENTITY_STRIDER_STEP - f Lnet/minecraft/class_3414; field_15075 ENTITY_ITEM_BREAK - f Lnet/minecraft/class_3414; field_14720 BLOCK_GRASS_HIT - f Lnet/minecraft/class_3414; field_21071 BLOCK_HONEY_BLOCK_FALL - f Lnet/minecraft/class_3414; field_15102 BLOCK_FIRE_EXTINGUISH - f Lnet/minecraft/class_3414; field_15221 BLOCK_SAND_HIT - f Lnet/minecraft/class_3414; field_25732 ENTITY_PIGLIN_BRUTE_STEP - f Lnet/minecraft/class_3414; field_21891 BLOCK_ANCIENT_DEBRIS_BREAK - f Lnet/minecraft/class_3414; field_14841 ENTITY_ZOMBIE_VILLAGER_STEP - f Lnet/minecraft/class_3414; field_14981 BLOCK_END_PORTAL_SPAWN - f Lnet/minecraft/class_3414; field_14597 ENTITY_COW_HURT - f Lnet/minecraft/class_3414; field_14729 ENTITY_PHANTOM_BITE - f Lnet/minecraft/class_3414; field_21921 BLOCK_NETHERITE_BLOCK_PLACE - f Lnet/minecraft/class_3414; field_23676 ENTITY_ZOGLIN_HURT - f Lnet/minecraft/class_3414; field_20674 ENTITY_VILLAGER_WORK_FISHERMAN - f Lnet/minecraft/class_3414; field_14809 ENTITY_PAINTING_BREAK - f Lnet/minecraft/class_3414; field_14656 MUSIC_DISC_STRAD - f Lnet/minecraft/class_3414; field_15120 BLOCK_WET_GRASS_BREAK - f Lnet/minecraft/class_3414; field_15104 ITEM_TRIDENT_HIT_GROUND - f Lnet/minecraft/class_3414; field_14734 ENTITY_BLAZE_BURN - f Lnet/minecraft/class_3414; field_14784 ENTITY_MINECART_RIDING - f Lnet/minecraft/class_3414; field_14630 ENTITY_HOSTILE_SWIM - f Lnet/minecraft/class_3414; field_15034 ENTITY_SQUID_AMBIENT - f Lnet/minecraft/class_3414; field_14895 ENTITY_SHULKER_BULLET_HIT - f Lnet/minecraft/class_3414; field_15197 ENTITY_ITEM_PICKUP - f Lnet/minecraft/class_3414; field_14653 BLOCK_GRASS_PLACE - f Lnet/minecraft/class_3414; field_14919 ENTITY_SLIME_JUMP - f Lnet/minecraft/class_3414; field_15146 ENTITY_RAVAGER_DEATH - f Lnet/minecraft/class_3414; field_15222 ENTITY_GENERIC_EXTINGUISH_FIRE - f Lnet/minecraft/class_3414; field_14572 ITEM_ELYTRA_FLYING - f Lnet/minecraft/class_3414; field_15209 ENTITY_POLAR_BEAR_DEATH - f Lnet/minecraft/class_3414; field_18813 ENTITY_PARROT_IMITATE_GUARDIAN - f Lnet/minecraft/class_3414; field_14922 ENTITY_WOLF_PANT - f Lnet/minecraft/class_3414; field_14974 ENTITY_PHANTOM_DEATH - f Lnet/minecraft/class_3414; field_21922 BLOCK_NETHERITE_BLOCK_HIT - f Lnet/minecraft/class_3414; field_23677 ENTITY_ZOGLIN_STEP - f Lnet/minecraft/class_3414; field_20675 ENTITY_VILLAGER_WORK_FLETCHER - f Lnet/minecraft/class_3414; field_14817 BLOCK_CHORUS_FLOWER_GROW - f Lnet/minecraft/class_3414; field_21869 BLOCK_BASALT_PLACE - f Lnet/minecraft/class_3414; field_21897 BLOCK_NYLIUM_FALL - f Lnet/minecraft/class_3414; field_14884 ENTITY_LLAMA_EAT - f Lnet/minecraft/class_3414; field_15096 UI_LOOM_TAKE_RESULT - f Lnet/minecraft/class_3414; field_23206 ENTITY_STRIDER_STEP_LAVA - f Lnet/minecraft/class_3414; field_14675 ITEM_AXE_STRIP - f Lnet/minecraft/class_3414; field_21072 BLOCK_HONEY_BLOCK_HIT - f Lnet/minecraft/class_3414; field_14591 ENTITY_FISH_SWIM - f Lnet/minecraft/class_3414; field_21906 BLOCK_ANCIENT_DEBRIS_STEP - f Lnet/minecraft/class_3414; field_15144 BLOCK_SAND_PLACE - f Lnet/minecraft/class_3414; field_25733 ENTITY_PIGLIN_BRUTE_CONVRTED_TO_ZOMBIFIED - f Lnet/minecraft/class_3414; field_14782 ENTITY_EVOKER_AMBIENT - f Lnet/minecraft/class_3414; field_14691 ENTITY_COW_MILK - f Lnet/minecraft/class_3414; field_15172 ENTITY_DOLPHIN_SWIM - f Lnet/minecraft/class_3414; field_15010 ITEM_BUCKET_EMPTY_LAVA - f Lnet/minecraft/class_3414; field_14875 ENTITY_PAINTING_PLACE - f Lnet/minecraft/class_3414; field_14759 MUSIC_DISC_WAIT - f Lnet/minecraft/class_3414; field_15207 BLOCK_WET_GRASS_FALL - f Lnet/minecraft/class_3414; field_14698 ITEM_TRIDENT_RETURN - f Lnet/minecraft/class_3414; field_14580 ENTITY_BLAZE_DEATH - f Lnet/minecraft/class_3414; field_18266 ENTITY_MOOSHROOM_CONVERT - f Lnet/minecraft/class_3414; field_14680 ENTITY_HUSK_AMBIENT - f Lnet/minecraft/class_3414; field_15124 ENTITY_SQUID_DEATH - f Lnet/minecraft/class_3414; field_14977 ENTITY_SHULKER_BULLET_HURT - f Lnet/minecraft/class_3414; field_14546 BLOCK_LADDER_BREAK - f Lnet/minecraft/class_3414; field_14573 BLOCK_GRASS_STEP - f Lnet/minecraft/class_3414; field_15095 ENTITY_SLIME_SQUISH - f Lnet/minecraft/class_3414; field_15007 ENTITY_RAVAGER_HURT - f Lnet/minecraft/class_3414; field_14940 ENTITY_GENERIC_HURT - f Lnet/minecraft/class_3414; field_15119 BLOCK_ENCHANTMENT_TABLE_USE - f Lnet/minecraft/class_3414; field_14858 ENTITY_EVOKER_CAST_SPELL - f Lnet/minecraft/class_3414; field_15110 ENTITY_COW_STEP - f Lnet/minecraft/class_3414; field_14869 ENTITY_PHANTOM_FLAP - f Lnet/minecraft/class_3414; field_21923 BLOCK_NETHERITE_BLOCK_FALL - f Lnet/minecraft/class_3414; field_15174 ENTITY_ZOMBIE_AMBIENT - f Lnet/minecraft/class_3414; field_20676 ENTITY_VILLAGER_WORK_LEATHERWORKER - f Lnet/minecraft/class_3414; field_14890 ITEM_CHORUS_FRUIT_TELEPORT - f Lnet/minecraft/class_3414; field_21870 BLOCK_BASALT_HIT - f Lnet/minecraft/class_3414; field_21898 BLOCK_NETHER_SPROUT_BREAK - f Lnet/minecraft/class_3414; field_15031 ENTITY_LLAMA_HURT - f Lnet/minecraft/class_3414; field_17484 UI_CARTOGRAPHY_TABLE_TAKE_RESULT - f Lnet/minecraft/class_3414; field_23207 ENTITY_STRIDER_EAT - f Lnet/minecraft/class_3414; field_21929 BLOCK_ANCIENT_DEBRIS_PLACE - f Lnet/minecraft/class_3414; field_15212 ENTITY_SQUID_HURT - f Lnet/minecraft/class_3414; field_15050 ENTITY_SHULKER_CLOSE - f Lnet/minecraft/class_3414; field_21073 BLOCK_HONEY_BLOCK_PLACE - f Lnet/minecraft/class_3414; field_15093 ENTITY_FISHING_BOBBER_RETRIEVE - f Lnet/minecraft/class_3414; field_14677 BLOCK_SAND_STEP - f Lnet/minecraft/class_3414; field_14976 ENTITY_PILLAGER_AMBIENT - f Lnet/minecraft/class_3414; field_15094 ENTITY_DONKEY_AMBIENT - f Lnet/minecraft/class_3414; field_15126 ITEM_BUCKET_FILL - f Lnet/minecraft/class_3414; field_14997 ENTITY_PANDA_PRE_SNEEZE - f Lnet/minecraft/class_3414; field_14838 MUSIC_DISC_WARD - f Lnet/minecraft/class_3414; field_14953 BLOCK_WET_GRASS_HIT - f Lnet/minecraft/class_3414; field_14606 ITEM_TRIDENT_RIPTIDE_1 - f Lnet/minecraft/class_3414; field_14842 ENTITY_BLAZE_HURT - f Lnet/minecraft/class_3414; field_18267 ENTITY_MOOSHROOM_EAT - f Lnet/minecraft/class_3414; field_15128 ENTITY_HUSK_CONVERTED_TO_ZOMBIE - f Lnet/minecraft/class_3414; field_14790 ENTITY_PARROT_IMITATE_VINDICATOR - f Lnet/minecraft/class_3414; field_14983 BLOCK_WOOL_BREAK - f Lnet/minecraft/class_3414; field_14955 ENTITY_WITHER_SKELETON_STEP - f Lnet/minecraft/class_3414; field_15109 ENTITY_TURTLE_EGG_CRACK - f Lnet/minecraft/class_3414; field_22457 AMBIENT_SOUL_SAND_VALLEY_ADDITIONS - f Lnet/minecraft/class_3414; field_20604 ENTITY_BEE_LOOP_AGGRESSIVE - f Lnet/minecraft/class_3414; field_23060 PARTICLE_SOUL_ESCAPE - f Lnet/minecraft/class_3414; field_23116 BLOCK_RESPAWN_ANCHOR_CHARGE - f Lnet/minecraft/class_3414; field_14776 BLOCK_NOTE_BLOCK_XYLOPHONE - f Lnet/minecraft/class_3414; field_14621 ENTITY_ZOMBIE_STEP - f Lnet/minecraft/class_3414; field_18313 ENTITY_WANDERING_TRADER_DRINK_POTION - f Lnet/minecraft/class_3414; field_14966 ITEM_ARMOR_EQUIP_ELYTRA - f Lnet/minecraft/class_3414; field_14815 ENTITY_VILLAGER_YES - f Lnet/minecraft/class_3414; field_15040 BLOCK_SNOW_HIT - f Lnet/minecraft/class_3414; field_17616 BLOCK_SWEET_BERRY_BUSH_PLACE - f Lnet/minecraft/class_3414; field_14617 ENTITY_SKELETON_HORSE_SWIM - f Lnet/minecraft/class_3414; field_21934 BLOCK_SHROOMLIGHT_HIT - f Lnet/minecraft/class_3414; field_15115 ENTITY_PLAYER_HURT - f Lnet/minecraft/class_3414; field_15048 BLOCK_WOOL_FALL - f Lnet/minecraft/class_3414; field_22458 AMBIENT_SOUL_SAND_VALLEY_LOOP - f Lnet/minecraft/class_3414; field_14797 ENTITY_ENDERMAN_HURT - f Lnet/minecraft/class_3414; field_14792 ENTITY_WITHER_SPAWN - f Lnet/minecraft/class_3414; field_14902 ENTITY_TURTLE_EGG_HATCH - f Lnet/minecraft/class_3414; field_20669 ENTITY_VILLAGER_WORK_ARMORER - f Lnet/minecraft/class_3414; field_14945 BLOCK_SNOW_PLACE - f Lnet/minecraft/class_3414; field_20605 ENTITY_BEE_LOOP - f Lnet/minecraft/class_3414; field_23117 BLOCK_RESPAWN_ANCHOR_DEPLETE - f Lnet/minecraft/class_3414; field_14883 ITEM_ARMOR_EQUIP_GENERIC - f Lnet/minecraft/class_3414; field_15056 ENTITY_ZOMBIE_VILLAGER_AMBIENT - f Lnet/minecraft/class_3414; field_17749 ENTITY_WANDERING_TRADER_HURT - f Lnet/minecraft/class_3414; field_14611 BLOCK_DISPENSER_DISPENSE - f Lnet/minecraft/class_3414; field_24061 BLOCK_CHAIN_FALL - f Lnet/minecraft/class_3414; field_17617 ITEM_SWEET_BERRIES_PICK_FROM_BUSH - f Lnet/minecraft/class_3414; field_14686 ENTITY_SKELETON_HORSE_AMBIENT_WATER - f Lnet/minecraft/class_3414; field_15205 ENTITY_PLAYER_HURT_DROWN - f Lnet/minecraft/class_3414; field_22459 AMBIENT_SOUL_SAND_VALLEY_MOOD - f Lnet/minecraft/class_3414; field_14846 ITEM_HOE_TILL - f Lnet/minecraft/class_3414; field_14628 BLOCK_WOOL_HIT - f Lnet/minecraft/class_3414; field_14713 ENTITY_ENDERMAN_SCREAM - f Lnet/minecraft/class_3414; field_15071 BLOCK_CONDUIT_AMBIENT_SHORT - f Lnet/minecraft/class_3414; field_14701 BLOCK_DISPENSER_FAIL - f Lnet/minecraft/class_3414; field_14826 ITEM_BOTTLE_EMPTY - f Lnet/minecraft/class_3414; field_15060 BLOCK_SNOW_STEP - f Lnet/minecraft/class_3414; field_20606 ENTITY_BEE_STING - f Lnet/minecraft/class_3414; field_14761 ITEM_ARMOR_EQUIP_GOLD - f Lnet/minecraft/class_3414; field_21877 BLOCK_ROOTS_BREAK - f Lnet/minecraft/class_3414; field_15168 ENTITY_ZOMBIE_VILLAGER_CONVERTED - f Lnet/minecraft/class_3414; field_17750 ENTITY_WANDERING_TRADER_NO - f Lnet/minecraft/class_3414; field_24062 BLOCK_CHAIN_HIT - f Lnet/minecraft/class_3414; field_14740 BLOCK_BAMBOO_BREAK - f Lnet/minecraft/class_3414; field_15108 ENTITY_SKELETON_HORSE_GALLOP_WATER - f Lnet/minecraft/class_3414; field_22460 AMBIENT_WARPED_FOREST_ADDITIONS - f Lnet/minecraft/class_3414; field_22256 ENTITY_HOGLIN_AMBIENT - f Lnet/minecraft/class_3414; field_14917 ENTITY_FIREWORK_ROCKET_BLAST - f Lnet/minecraft/class_3414; field_15226 BLOCK_WOOL_PLACE - f Lnet/minecraft/class_3414; field_14711 BLOCK_DISPENSER_LAUNCH - f Lnet/minecraft/class_3414; field_14779 ITEM_BOTTLE_FILL - f Lnet/minecraft/class_3414; field_20607 ENTITY_BEE_POLLINATE - f Lnet/minecraft/class_3414; field_14749 ENTITY_MAGMA_CUBE_SQUISH_SMALL - f Lnet/minecraft/class_3414; field_14959 ENTITY_IRON_GOLEM_HURT - f Lnet/minecraft/class_3414; field_21878 BLOCK_ROOTS_STEP - f Lnet/minecraft/class_3414; field_14835 ENTITY_DROWNED_STEP - f Lnet/minecraft/class_3414; field_18314 ENTITY_WANDERING_TRADER_REAPPEARED - f Lnet/minecraft/class_3414; field_15183 ENTITY_TURTLE_HURT - f Lnet/minecraft/class_3414; field_24063 BLOCK_CHAIN_PLACE - f Lnet/minecraft/class_3414; field_14906 BLOCK_BAMBOO_FALL - f Lnet/minecraft/class_3414; field_14862 ITEM_ARMOR_EQUIP_IRON - f Lnet/minecraft/class_3414; field_15044 BLOCK_METAL_BREAK - f Lnet/minecraft/class_3414; field_14704 ENTITY_HORSE_SADDLE - f Lnet/minecraft/class_3414; field_22257 ENTITY_HOGLIN_ANGRY - f Lnet/minecraft/class_3414; field_15090 ENTITY_FIREWORK_ROCKET_BLAST_FAR - f Lnet/minecraft/class_3414; field_14799 ENTITY_DOLPHIN_AMBIENT - f Lnet/minecraft/class_3414; field_15029 ITEM_BOTTLE_FILL_DRAGONBREATH - f Lnet/minecraft/class_3414; field_18308 BLOCK_NOTE_BLOCK_IRON_XYLOPHONE - f Lnet/minecraft/class_3414; field_22461 AMBIENT_WARPED_FOREST_LOOP - f Lnet/minecraft/class_3414; field_20608 BLOCK_BEEHIVE_DROP - f Lnet/minecraft/class_3414; field_21077 ENTITY_IRON_GOLEM_REPAIR - f Lnet/minecraft/class_3414; field_24069 BLOCK_GILDED_BLACKSTONE_PLACE - f Lnet/minecraft/class_3414; field_21879 BLOCK_ROOTS_PLACE - f Lnet/minecraft/class_3414; field_14913 ENTITY_DROWNED_SWIM - f Lnet/minecraft/class_3414; field_14967 ENTITY_ENDERMAN_STARE - f Lnet/minecraft/class_3414; field_15177 BLOCK_CONDUIT_ATTACK_TARGET - f Lnet/minecraft/class_3414; field_24064 BLOCK_CHAIN_STEP - f Lnet/minecraft/class_3414; field_14811 BLOCK_BAMBOO_HIT - f Lnet/minecraft/class_3414; field_17613 ITEM_NETHER_WART_PLANT - f Lnet/minecraft/class_3414; field_14581 ITEM_ARMOR_EQUIP_LEATHER - f Lnet/minecraft/class_3414; field_20609 BLOCK_BEEHIVE_ENTER - f Lnet/minecraft/class_3414; field_15142 BLOCK_METAL_FALL - f Lnet/minecraft/class_3414; field_14613 ENTITY_HORSE_STEP - f Lnet/minecraft/class_3414; field_22258 ENTITY_HOGLIN_ATTACK - f Lnet/minecraft/class_3414; field_15188 ENTITY_FIREWORK_ROCKET_LARGE_BLAST - f Lnet/minecraft/class_3414; field_23118 BLOCK_RESPAWN_ANCHOR_SET_SPAWN - f Lnet/minecraft/class_3414; field_21880 BLOCK_ROOTS_HIT - f Lnet/minecraft/class_3414; field_15012 ENTITY_EGG_THROW - f Lnet/minecraft/class_3414; field_14623 ENTITY_PLAYER_HURT_ON_FIRE - f Lnet/minecraft/class_3414; field_14881 ENTITY_DOLPHIN_AMBIENT_WATER - f Lnet/minecraft/class_3414; field_14978 BLOCK_BREWING_STAND_BREW - f Lnet/minecraft/class_3414; field_18309 BLOCK_NOTE_BLOCK_COW_BELL - f Lnet/minecraft/class_3414; field_14744 MUSIC_DISC_CAT - f Lnet/minecraft/class_3414; field_22462 AMBIENT_WARPED_FOREST_MOOD - f Lnet/minecraft/class_3414; field_15233 ENTITY_IRON_GOLEM_STEP - f Lnet/minecraft/class_3414; field_24070 BLOCK_GILDED_BLACKSTONE_STEP - f Lnet/minecraft/class_3414; field_14879 ENTITY_ENDERMAN_TELEPORT - f Lnet/minecraft/class_3414; field_14979 BLOCK_CONDUIT_DEACTIVATE - f Lnet/minecraft/class_3414; field_14796 ENTITY_PARROT_IMITATE_WITCH - f Lnet/minecraft/class_3414; field_21866 ITEM_ARMOR_EQUIP_NETHERITE - f Lnet/minecraft/class_3414; field_14823 BLOCK_CHEST_CLOSE - f Lnet/minecraft/class_3414; field_14719 BLOCK_BAMBOO_PLACE - f Lnet/minecraft/class_3414; field_21887 BLOCK_STEM_BREAK - f Lnet/minecraft/class_3414; field_15062 ENTITY_LEASH_KNOT_PLACE - f Lnet/minecraft/class_3414; field_20610 BLOCK_BEEHIVE_EXIT - f Lnet/minecraft/class_3414; field_14557 BLOCK_METAL_HIT - f Lnet/minecraft/class_3414; field_15061 ENTITY_HORSE_STEP_WOOD - f Lnet/minecraft/class_3414; field_15170 ENTITY_SPIDER_AMBIENT - f Lnet/minecraft/class_3414; field_21881 BLOCK_ROOTS_FALL - f Lnet/minecraft/class_3414; field_15127 ENTITY_ELDER_GUARDIAN_AMBIENT - f Lnet/minecraft/class_3414; field_17614 ENTITY_PLAYER_HURT_SWEET_BERRY_BUSH - f Lnet/minecraft/class_3414; field_15199 ENTITY_PARROT_IMITATE_BLAZE - f Lnet/minecraft/class_3414; field_14756 AMBIENT_UNDERWATER_ENTER - f Lnet/minecraft/class_3414; field_14992 ENTITY_DOLPHIN_ATTACK - f Lnet/minecraft/class_3414; field_15065 BLOCK_BUBBLE_COLUMN_BUBBLE_POP - f Lnet/minecraft/class_3414; field_18310 BLOCK_NOTE_BLOCK_DIDGERIDOO - f Lnet/minecraft/class_3414; field_15039 MUSIC_DISC_CHIRP - f Lnet/minecraft/class_3414; field_21888 BLOCK_STEM_STEP - f Lnet/minecraft/class_3414; field_14962 BLOCK_LEVER_CLICK - f Lnet/minecraft/class_3414; field_15131 BLOCK_IRON_TRAPDOOR_CLOSE - f Lnet/minecraft/class_3414; field_15081 BLOCK_GLASS_BREAK - f Lnet/minecraft/class_3414; field_14901 ENTITY_SKELETON_HORSE_JUMP_WATER - f Lnet/minecraft/class_3414; field_15137 ENTITY_ENDERMITE_AMBIENT - f Lnet/minecraft/class_3414; field_14804 BLOCK_CORAL_BLOCK_BREAK - f Lnet/minecraft/class_3414; field_14684 ITEM_ARMOR_EQUIP_TURTLE - f Lnet/minecraft/class_3414; field_14555 ENTITY_PARROT_IMITATE_WITHER - f Lnet/minecraft/class_3414; field_21914 BLOCK_WART_BLOCK_BREAK - f Lnet/minecraft/class_3414; field_14731 BLOCK_CHEST_LOCKED - f Lnet/minecraft/class_3414; field_14635 BLOCK_BAMBOO_STEP - f Lnet/minecraft/class_3414; field_18311 BLOCK_NOTE_BLOCK_BIT - f Lnet/minecraft/class_3414; field_14944 MUSIC_DISC_FAR - f Lnet/minecraft/class_3414; field_17751 ENTITY_WANDERING_TRADER_TRADE - f Lnet/minecraft/class_3414; field_20611 BLOCK_BEEHIVE_SHEAR - f Lnet/minecraft/class_3414; field_15167 BLOCK_METAL_PLACE - f Lnet/minecraft/class_3414; field_15157 ENTITY_HOSTILE_BIG_FALL - f Lnet/minecraft/class_3414; field_14579 ENTITY_SPIDER_DEATH - f Lnet/minecraft/class_3414; field_21935 BLOCK_SHROOMLIGHT_FALL - f Lnet/minecraft/class_3414; field_14828 AMBIENT_UNDERWATER_EXIT - f Lnet/minecraft/class_3414; field_15006 BLOCK_FURNACE_FIRE_CRACKLE - f Lnet/minecraft/class_3414; field_14569 ENTITY_ELDER_GUARDIAN_AMBIENT_LAND - f Lnet/minecraft/class_3414; field_14709 ENTITY_PLAYER_LEVELUP - f Lnet/minecraft/class_3414; field_14547 ENTITY_PARROT_IMITATE_CREEPER - f Lnet/minecraft/class_3414; field_15101 ENTITY_DOLPHIN_DEATH - f Lnet/minecraft/class_3414; field_15161 BLOCK_BUBBLE_COLUMN_UPWARDS_AMBIENT - f Lnet/minecraft/class_3414; field_14982 BLOCK_CHEST_OPEN - f Lnet/minecraft/class_3414; field_14629 BLOCK_BAMBOO_SAPLING_BREAK - f Lnet/minecraft/class_3414; field_21889 BLOCK_STEM_PLACE - f Lnet/minecraft/class_3414; field_14956 ENTITY_LIGHTNING_BOLT_IMPACT - f Lnet/minecraft/class_3414; field_15070 ENTITY_TURTLE_HURT_BABY - f Lnet/minecraft/class_3414; field_15082 BLOCK_IRON_TRAPDOOR_OPEN - f Lnet/minecraft/class_3414; field_14666 BLOCK_GLASS_FALL - f Lnet/minecraft/class_3414; field_15182 ENTITY_SKELETON_HORSE_STEP_WATER - f Lnet/minecraft/class_3414; field_14872 ENTITY_RABBIT_DEATH - f Lnet/minecraft/class_3414; field_23671 ENTITY_HOGLIN_CONVERTED_TO_ZOMBIFIED - f Lnet/minecraft/class_3414; field_14612 ENTITY_FIREWORK_ROCKET_LARGE_BLAST_FAR - f Lnet/minecraft/class_3414; field_15118 ENTITY_ARMOR_STAND_BREAK - f Lnet/minecraft/class_3414; field_15033 ENTITY_SALMON_AMBIENT - f Lnet/minecraft/class_3414; field_22271 ENTITY_PIGLIN_STEP - f Lnet/minecraft/class_3414; field_15230 ENTITY_ENDERMITE_DEATH - f Lnet/minecraft/class_3414; field_14551 BLOCK_CORAL_BLOCK_FALL - f Lnet/minecraft/class_3414; field_15073 ENTITY_PARROT_IMITATE_WITHER_SKELETON - f Lnet/minecraft/class_3414; field_21915 BLOCK_WART_BLOCK_STEP - f Lnet/minecraft/class_3414; field_15099 ENTITY_HORSE_EAT - f Lnet/minecraft/class_3414; field_18061 ENTITY_FOX_HURT - f Lnet/minecraft/class_3414; field_14975 ENTITY_SHEEP_SHEAR - f Lnet/minecraft/class_3414; field_14840 ENTITY_PLAYER_ATTACK_STRONG - f Lnet/minecraft/class_3414; field_14627 ENTITY_EXPERIENCE_ORB_PICKUP - f Lnet/minecraft/class_3414; field_14765 ITEM_CROSSBOW_LOADING_START - f Lnet/minecraft/class_3414; field_22264 ENTITY_PIGLIN_AMBIENT - f Lnet/minecraft/class_3414; field_14725 BLOCK_NOTE_BLOCK_CHIME - f Lnet/minecraft/class_3414; field_14668 ENTITY_PANDA_HURT - f Lnet/minecraft/class_3414; field_23797 MUSIC_NETHER_WARPED_FOREST - f Lnet/minecraft/class_3414; field_15163 ENTITY_WITHER_AMBIENT - f Lnet/minecraft/class_3414; field_15085 ENTITY_TROPICAL_FISH_AMBIENT - f Lnet/minecraft/class_3414; field_17481 ITEM_BOOK_PAGE_TURN - f Lnet/minecraft/class_3414; field_14900 ENTITY_MULE_HURT - f Lnet/minecraft/class_3414; field_15019 ENTITY_ILLUSIONER_PREPARE_BLINDNESS - f Lnet/minecraft/class_3414; field_14927 BLOCK_ANVIL_HIT - f Lnet/minecraft/class_3414; field_15217 BLOCK_STONE_PRESSURE_PLATE_CLICK_ON - f Lnet/minecraft/class_3414; field_14593 ENTITY_SILVERFISH_HURT - f Lnet/minecraft/class_3414; field_23791 AMBIENT_BASALT_DELTAS_LOOP - f Lnet/minecraft/class_3414; field_15231 ENTITY_GHAST_SHOOT - f Lnet/minecraft/class_3414; field_15086 ENTITY_ENDER_DRAGON_HURT - f Lnet/minecraft/class_3414; field_15235 ENTITY_PUFFER_FISH_BLOW_UP - f Lnet/minecraft/class_3414; field_18816 ENTITY_PARROT_IMITATE_RAVAGER - f Lnet/minecraft/class_3414; field_15105 BLOCK_WOODEN_BUTTON_CLICK_OFF - f Lnet/minecraft/class_3414; field_15162 ENTITY_DROWNED_DEATH_WATER - f Lnet/minecraft/class_3414; field_16438 ENTITY_CAT_BEG_FOR_FOOD - f Lnet/minecraft/class_3414; field_17608 BLOCK_COMPOSTER_FILL_SUCCESS - f Lnet/minecraft/class_3414; field_15045 BLOCK_BEACON_AMBIENT - f Lnet/minecraft/class_3414; field_21907 BLOCK_FUNGUS_HIT - f Lnet/minecraft/class_3414; field_23197 BLOCK_LODESTONE_HIT - f Lnet/minecraft/class_3414; field_14964 ENTITY_VEX_DEATH - f Lnet/minecraft/class_3414; field_14873 ENTITY_SNOWBALL_THROW - f Lnet/minecraft/class_3414; field_17743 BLOCK_LANTERN_PLACE - f Lnet/minecraft/class_3414; field_14968 ENTITY_GUARDIAN_AMBIENT_LAND - f Lnet/minecraft/class_3414; field_21951 BLOCK_SOUL_SAND_PLACE - f Lnet/minecraft/class_3414; field_24075 BLOCK_NETHER_GOLD_ORE_STEP - f Lnet/minecraft/class_3414; field_14987 ENTITY_HORSE_GALLOP - f Lnet/minecraft/class_3414; field_18265 ENTITY_FOX_SCREECH - f Lnet/minecraft/class_3414; field_14870 ENTITY_SHEEP_STEP - f Lnet/minecraft/class_3414; field_14706 ENTITY_PLAYER_ATTACK_SWEEP - f Lnet/minecraft/class_3414; field_14861 BLOCK_FENCE_GATE_CLOSE - f Lnet/minecraft/class_3414; field_15011 ITEM_CROSSBOW_QUICK_CHARGE_1 - f Lnet/minecraft/class_3414; field_14571 ENTITY_DROWNED_HURT - f Lnet/minecraft/class_3414; field_14867 ENTITY_CAT_HURT - f Lnet/minecraft/class_3414; field_14552 ENTITY_PANDA_BITE - f Lnet/minecraft/class_3414; field_15198 MUSIC_UNDER_WATER - f Lnet/minecraft/class_3414; field_15236 ENTITY_WITHER_BREAK_BLOCK - f Lnet/minecraft/class_3414; field_15201 ENTITY_TROPICAL_FISH_DEATH - f Lnet/minecraft/class_3414; field_17482 ITEM_BOOK_PUT - f Lnet/minecraft/class_3414; field_14833 BLOCK_ANVIL_LAND - f Lnet/minecraft/class_3414; field_14995 MUSIC_CREATIVE - f Lnet/minecraft/class_3414; field_14738 ENTITY_ILLUSIONER_PREPARE_MIRROR - f Lnet/minecraft/class_3414; field_14921 BLOCK_STONE_STEP - f Lnet/minecraft/class_3414; field_15084 ENTITY_SILVERFISH_STEP - f Lnet/minecraft/class_3414; field_17744 BLOCK_LANTERN_STEP - f Lnet/minecraft/class_3414; field_14880 ENTITY_GUARDIAN_ATTACK - f Lnet/minecraft/class_3414; field_23792 AMBIENT_BASALT_DELTAS_MOOD - f Lnet/minecraft/class_3414; field_21942 BLOCK_SOUL_SAND_HIT - f Lnet/minecraft/class_3414; field_21937 BLOCK_NETHER_ORE_BREAK - f Lnet/minecraft/class_3414; field_15130 ENTITY_GHAST_WARN - f Lnet/minecraft/class_3414; field_14934 ENTITY_ENDER_DRAGON_SHOOT - f Lnet/minecraft/class_3414; field_14888 ENTITY_PUFFER_FISH_DEATH - f Lnet/minecraft/class_3414; field_14768 ENTITY_PARROT_IMITATE_SHULKER - f Lnet/minecraft/class_3414; field_14699 BLOCK_WOODEN_BUTTON_CLICK_ON - f Lnet/minecraft/class_3414; field_15179 ENTITY_ZOMBIE_HORSE_HURT - f Lnet/minecraft/class_3414; field_14558 ENTITY_VINDICATOR_HURT - f Lnet/minecraft/class_3414; field_17609 BLOCK_COMPOSTER_READY - f Lnet/minecraft/class_3414; field_19344 BLOCK_BEACON_DEACTIVATE - f Lnet/minecraft/class_3414; field_21908 BLOCK_FUNGUS_FALL - f Lnet/minecraft/class_3414; field_23198 BLOCK_LODESTONE_FALL - f Lnet/minecraft/class_3414; field_15072 ENTITY_VEX_HURT - f Lnet/minecraft/class_3414; field_15165 BLOCK_SNOW_BREAK - f Lnet/minecraft/class_3414; field_14755 MUSIC_CREDITS - f Lnet/minecraft/class_3414; field_14819 BLOCK_IRON_DOOR_CLOSE - f Lnet/minecraft/class_3414; field_15041 ENTITY_STRAY_AMBIENT - f Lnet/minecraft/class_3414; field_15200 ENTITY_SKELETON_AMBIENT - f Lnet/minecraft/class_3414; field_14923 ENTITY_HORSE_HURT - f Lnet/minecraft/class_3414; field_18062 ENTITY_FOX_SLEEP - f Lnet/minecraft/class_3414; field_15150 ITEM_SHIELD_BLOCK - f Lnet/minecraft/class_3414; field_14625 ENTITY_PLAYER_ATTACK_WEAK - f Lnet/minecraft/class_3414; field_14607 BLOCK_WOOD_FALL - f Lnet/minecraft/class_3414; field_14651 ENTITY_DROWNED_HURT_WATER - f Lnet/minecraft/class_3414; field_14741 ENTITY_CAT_PURR - f Lnet/minecraft/class_3414; field_15132 ENTITY_PARROT_AMBIENT - f Lnet/minecraft/class_3414; field_21882 BLOCK_NETHER_BRICKS_BREAK - f Lnet/minecraft/class_3414; field_14785 BLOCK_ANVIL_PLACE - f Lnet/minecraft/class_3414; field_15136 ENTITY_WITHER_DEATH - f Lnet/minecraft/class_3414; field_14878 ENTITY_TROPICAL_FISH_FLOP - f Lnet/minecraft/class_3414; field_17605 BLOCK_BLASTFURNACE_FIRE_CRACKLE - f Lnet/minecraft/class_3414; field_15021 BLOCK_LAVA_AMBIENT - f Lnet/minecraft/class_3414; field_15138 ENTITY_GUARDIAN_DEATH - f Lnet/minecraft/class_3414; field_21943 BLOCK_SOUL_SAND_FALL - f Lnet/minecraft/class_3414; field_21938 BLOCK_NETHER_ORE_FALL - f Lnet/minecraft/class_3414; field_24066 BLOCK_GILDED_BLACKSTONE_BREAK - f Lnet/minecraft/class_3414; field_15210 ENTITY_ENDER_EYE_DEATH - f Lnet/minecraft/class_3414; field_15004 ENTITY_PUFFER_FISH_FLOP - f Lnet/minecraft/class_3414; field_14683 ENTITY_PARROT_IMITATE_SILVERFISH - f Lnet/minecraft/class_3414; field_22265 ENTITY_PIGLIN_ANGRY - f Lnet/minecraft/class_3414; field_14989 BLOCK_NOTE_BLOCK_FLUTE - f Lnet/minecraft/class_3414; field_15088 ENTITY_ZOMBIE_HURT - f Lnet/minecraft/class_3414; field_23061 BLOCK_VINE_STEP - f Lnet/minecraft/class_3414; field_14700 BLOCK_CONDUIT_ACTIVATE - f Lnet/minecraft/class_3414; field_14891 BLOCK_BEACON_POWER_SELECT - f Lnet/minecraft/class_3414; field_21909 BLOCK_WEEPING_VINES_BREAK - f Lnet/minecraft/class_3414; field_23199 ITEM_LODESTONE_COMPASS_LOCK - f Lnet/minecraft/class_3414; field_22451 AMBIENT_CRIMSON_FOREST_ADDITIONS - f Lnet/minecraft/class_3414; field_15175 ENTITY_VILLAGER_AMBIENT - f Lnet/minecraft/class_3414; field_15092 BLOCK_SNOW_FALL - f Lnet/minecraft/class_3414; field_14654 MUSIC_DISC_11 - f Lnet/minecraft/class_3414; field_14567 BLOCK_IRON_DOOR_OPEN - f Lnet/minecraft/class_3414; field_14771 ENTITY_STRAY_DEATH - f Lnet/minecraft/class_3414; field_14877 ENTITY_SKELETON_DEATH - f Lnet/minecraft/class_3414; field_14831 ENTITY_HORSE_JUMP - f Lnet/minecraft/class_3414; field_18063 ENTITY_FOX_SNIFF - f Lnet/minecraft/class_3414; field_15239 ITEM_SHIELD_BREAK - f Lnet/minecraft/class_3414; field_14794 ENTITY_PLAYER_BIG_FALL - f Lnet/minecraft/class_3414; field_14748 ENTITY_PUFFER_FISH_HURT - f Lnet/minecraft/class_3414; field_14587 ENTITY_PARROT_IMITATE_SKELETON - f Lnet/minecraft/class_3414; field_14808 BLOCK_WOOD_HIT - f Lnet/minecraft/class_3414; field_14695 BLOCK_ANVIL_STEP - f Lnet/minecraft/class_3414; field_14753 ENTITY_DROWNED_SHOOT - f Lnet/minecraft/class_3414; field_14589 ENTITY_CAT_PURREOW - f Lnet/minecraft/class_3414; field_15234 ENTITY_PARROT_DEATH - f Lnet/minecraft/class_3414; field_21883 BLOCK_NETHER_BRICKS_STEP - f Lnet/minecraft/class_3414; field_14688 ENTITY_WITHER_HURT - f Lnet/minecraft/class_3414; field_14985 ENTITY_TROPICAL_FISH_HURT - f Lnet/minecraft/class_3414; field_19198 BLOCK_LAVA_EXTINGUISH - f Lnet/minecraft/class_3414; field_15232 ENTITY_GUARDIAN_DEATH_LAND - f Lnet/minecraft/class_3414; field_21944 BLOCK_SOUL_SOIL_BREAK - f Lnet/minecraft/class_3414; field_21939 BLOCK_NETHER_ORE_HIT - f Lnet/minecraft/class_3414; field_24067 BLOCK_GILDED_BLACKSTONE_FALL - f Lnet/minecraft/class_3414; field_15155 ENTITY_ENDER_EYE_LAUNCH - f Lnet/minecraft/class_3414; field_14766 BLOCK_FENCE_GATE_OPEN - f Lnet/minecraft/class_3414; field_14916 ITEM_CROSSBOW_QUICK_CHARGE_2 - f Lnet/minecraft/class_3414; field_22266 ENTITY_PIGLIN_CELEBRATE - f Lnet/minecraft/class_3414; field_14903 BLOCK_NOTE_BLOCK_GUITAR - f Lnet/minecraft/class_3414; field_14986 ENTITY_ZOMBIE_INFECT - f Lnet/minecraft/class_3414; field_15173 BLOCK_LILY_PAD_PLACE - f Lnet/minecraft/class_3414; field_14632 BLOCK_CONDUIT_AMBIENT - f Lnet/minecraft/class_3414; field_20602 ENTITY_BEE_DEATH - f Lnet/minecraft/class_3414; field_22452 AMBIENT_CRIMSON_FOREST_LOOP - f Lnet/minecraft/class_3414; field_21910 BLOCK_WEEPING_VINES_STEP - f Lnet/minecraft/class_3414; field_14662 ENTITY_MAGMA_CUBE_DEATH - f Lnet/minecraft/class_3414; field_19152 ENTITY_VILLAGER_CELEBRATE - f Lnet/minecraft/class_3414; field_14655 ENTITY_SNOW_GOLEM_AMBIENT - f Lnet/minecraft/class_3414; field_14592 MUSIC_DISC_13 - f Lnet/minecraft/class_3414; field_14649 ENTITY_IRON_GOLEM_ATTACK - f Lnet/minecraft/class_3414; field_14805 ENTITY_STRAY_HURT - f Lnet/minecraft/class_3414; field_14984 ENTITY_SKELETON_HORSE_AMBIENT - f Lnet/minecraft/class_3414; field_14783 ENTITY_HORSE_LAND - f Lnet/minecraft/class_3414; field_18054 ENTITY_FOX_SPIT - f Lnet/minecraft/class_3414; field_14559 BLOCK_ANVIL_USE - f Lnet/minecraft/class_3414; field_24068 BLOCK_GILDED_BLACKSTONE_HIT - f Lnet/minecraft/class_3414; field_14696 ENTITY_ENDERMAN_AMBIENT - f Lnet/minecraft/class_3414; field_14848 ENTITY_PUFFER_FISH_STING - f Lnet/minecraft/class_3414; field_15098 ENTITY_PARROT_IMITATE_SLIME - f Lnet/minecraft/class_3414; field_14718 BLOCK_WOOD_PLACE - f Lnet/minecraft/class_3414; field_24065 BLOCK_CHAIN_BREAK - f Lnet/minecraft/class_3414; field_14960 ENTITY_PARROT_EAT - f Lnet/minecraft/class_3414; field_21884 BLOCK_NETHER_BRICKS_PLACE - f Lnet/minecraft/class_3414; field_14588 ENTITY_WITHER_SHOOT - f Lnet/minecraft/class_3414; field_14722 ENTITY_TURTLE_AMBIENT_LAND - f Lnet/minecraft/class_3414; field_21911 BLOCK_WEEPING_VINES_PLACE - f Lnet/minecraft/class_3414; field_14747 ENTITY_MAGMA_CUBE_HURT - f Lnet/minecraft/class_3414; field_15225 ENTITY_VILLAGER_DEATH - f Lnet/minecraft/class_3414; field_14594 ENTITY_SNOW_GOLEM_DEATH - f Lnet/minecraft/class_3414; field_14576 BLOCK_LAVA_POP - f Lnet/minecraft/class_3414; field_14584 ENTITY_GUARDIAN_FLOP - f Lnet/minecraft/class_3414; field_21945 BLOCK_SOUL_SOIL_STEP - f Lnet/minecraft/class_3414; field_21940 BLOCK_NETHER_ORE_PLACE - f Lnet/minecraft/class_3414; field_15013 ITEM_FIRECHARGE_USE - f Lnet/minecraft/class_3414; field_15089 ITEM_CROSSBOW_QUICK_CHARGE_3 - f Lnet/minecraft/class_3414; field_22267 ENTITY_PIGLIN_DEATH - f Lnet/minecraft/class_3414; field_15114 BLOCK_NOTE_BLOCK_HARP - f Lnet/minecraft/class_3414; field_22453 AMBIENT_CRIMSON_FOREST_MOOD - f Lnet/minecraft/class_3414; field_14926 ENTITY_ZOMBIFIED_PIGLIN_AMBIENT - f Lnet/minecraft/class_3414; field_17747 ENTITY_WANDERING_TRADER_AMBIENT - f Lnet/minecraft/class_3414; field_20603 ENTITY_BEE_HURT - f Lnet/minecraft/class_3414; field_14925 ENTITY_PARROT_FLY - f Lnet/minecraft/class_3414; field_21885 BLOCK_NETHER_BRICKS_HIT - f Lnet/minecraft/class_3414; field_15214 ENTITY_WITHER_SKELETON_AMBIENT - f Lnet/minecraft/class_3414; field_14856 ENTITY_TURTLE_DEATH - f Lnet/minecraft/class_3414; field_14829 MUSIC_DISC_BLOCKS - f Lnet/minecraft/class_3414; field_21076 ENTITY_IRON_GOLEM_DAMAGE - f Lnet/minecraft/class_3414; field_14540 ENTITY_STRAY_STEP - f Lnet/minecraft/class_3414; field_14721 ENTITY_SKELETON_HORSE_DEATH - f Lnet/minecraft/class_3414; field_14608 ENTITY_ENDERMAN_DEATH - f Lnet/minecraft/class_3414; field_14619 BLOCK_PUMPKIN_CARVE - f Lnet/minecraft/class_3414; field_15190 ENTITY_PARROT_IMITATE_SPIDER - f Lnet/minecraft/class_3414; field_15002 BLOCK_WOODEN_PRESSURE_PLATE_CLICK_OFF - f Lnet/minecraft/class_3414; field_21912 BLOCK_WEEPING_VINES_HIT - f Lnet/minecraft/class_3414; field_15005 ENTITY_MAGMA_CUBE_HURT_SMALL - f Lnet/minecraft/class_3414; field_15139 ENTITY_VILLAGER_HURT - f Lnet/minecraft/class_3414; field_14830 ENTITY_SNOW_GOLEM_HURT - f Lnet/minecraft/class_3414; field_15184 ENTITY_LEASH_KNOT_BREAK - f Lnet/minecraft/class_3414; field_14679 ENTITY_GUARDIAN_HURT - f Lnet/minecraft/class_3414; field_21946 BLOCK_SOUL_SOIL_PLACE - f Lnet/minecraft/class_3414; field_21941 BLOCK_NETHER_ORE_STEP - f Lnet/minecraft/class_3414; field_21931 BLOCK_SHROOMLIGHT_BREAK - f Lnet/minecraft/class_3414; field_14726 ENTITY_PLAYER_BREATH - f Lnet/minecraft/class_3414; field_22454 AMBIENT_NETHER_WASTES_ADDITIONS - f Lnet/minecraft/class_3414; field_15187 ITEM_CROSSBOW_SHOOT - f Lnet/minecraft/class_3414; field_22268 ENTITY_PIGLIN_JEALOUS - f Lnet/minecraft/class_3414; field_15204 BLOCK_NOTE_BLOCK_HAT - f Lnet/minecraft/class_3414; field_14852 ENTITY_ZOMBIFIED_PIGLIN_ANGRY - f Lnet/minecraft/class_3414; field_17748 ENTITY_WANDERING_TRADER_DEATH - f Lnet/minecraft/class_3414; field_15077 ENTITY_PARROT_HURT - f Lnet/minecraft/class_3414; field_21886 BLOCK_NETHER_BRICKS_FALL - f Lnet/minecraft/class_3414; field_15122 ENTITY_WITHER_SKELETON_DEATH - f Lnet/minecraft/class_3414; field_14618 ENTITY_TURTLE_DEATH_BABY - f Lnet/minecraft/class_3414; field_15055 ENTITY_IRON_GOLEM_DEATH - f Lnet/minecraft/class_3414; field_17615 BLOCK_SWEET_BERRY_BUSH_BREAK - f Lnet/minecraft/class_3414; field_14855 ENTITY_SKELETON_HORSE_HURT - f Lnet/minecraft/class_3414; field_21947 BLOCK_SOUL_SOIL_HIT - f Lnet/minecraft/class_3414; field_19199 BLOCK_REDSTONE_TORCH_BURNOUT - f Lnet/minecraft/class_3414; field_14693 ENTITY_RABBIT_AMBIENT - f Lnet/minecraft/class_3414; field_14885 ENTITY_PARROT_IMITATE_STRAY - f Lnet/minecraft/class_3414; field_14961 BLOCK_WOODEN_PRESSURE_PLATE_CLICK_ON - f Lnet/minecraft/class_3414; field_21913 BLOCK_WEEPING_VINES_FALL - f Lnet/minecraft/class_3414; field_14847 ENTITY_MAGMA_CUBE_JUMP - f Lnet/minecraft/class_3414; field_15008 ENTITY_VILLAGER_NO - f Lnet/minecraft/class_3414; field_14745 ENTITY_SNOW_GOLEM_SHOOT - f Lnet/minecraft/class_3414; field_14758 ENTITY_GUARDIAN_HURT_LAND - f Lnet/minecraft/class_3414; field_15191 ITEM_ARMOR_EQUIP_CHAIN - f Lnet/minecraft/class_3414; field_22455 AMBIENT_NETHER_WASTES_LOOP - f Lnet/minecraft/class_3414; field_24630 ENTITY_FOX_TELEPORT - f Lnet/minecraft/class_3414; field_21932 BLOCK_SHROOMLIGHT_STEP - f Lnet/minecraft/class_3414; field_19149 ENTITY_PLAYER_BURP - f Lnet/minecraft/class_3414; field_22269 ENTITY_PIGLIN_HURT - f Lnet/minecraft/class_3414; field_14622 BLOCK_NOTE_BLOCK_PLING - f Lnet/minecraft/class_3414; field_14743 ENTITY_ZOMBIFIED_PIGLIN_DEATH - f Lnet/minecraft/class_3414; field_18315 ENTITY_WANDERING_TRADER_DISAPPEARED - f Lnet/minecraft/class_3414; field_17612 BLOCK_NETHER_WART_BREAK - f Lnet/minecraft/class_3414; field_15027 ENTITY_WITHER_SKELETON_HURT - f Lnet/minecraft/class_3414; field_14687 ENTITY_TURTLE_EGG_BREAK - f Lnet/minecraft/class_3414; field_22456 AMBIENT_NETHER_WASTES_MOOD - f Lnet/minecraft/class_3414; field_21948 BLOCK_SOUL_SOIL_FALL - f Lnet/minecraft/class_3414; field_23115 BLOCK_RESPAWN_ANCHOR_AMBIENT - f Lnet/minecraft/class_3414; field_15147 ENTITY_RABBIT_ATTACK - f Lnet/minecraft/class_3414; field_15032 ENTITY_PARROT_IMITATE_VEX - f Lnet/minecraft/class_3414; field_15053 BLOCK_WOOD_STEP - f Lnet/minecraft/class_3414; field_22270 ENTITY_PIGLIN_RETREAT - f Lnet/minecraft/class_3414; field_14708 BLOCK_NOTE_BLOCK_SNARE - f Lnet/minecraft/class_3414; field_14710 ENTITY_ZOMBIFIED_PIGLIN_HURT - f Lnet/minecraft/class_3414; field_18316 ENTITY_WANDERING_TRADER_DRINK_MILK - f Lnet/minecraft/class_3414; field_14949 ENTITY_MAGMA_CUBE_SQUISH - f Lnet/minecraft/class_3414; field_14933 ENTITY_VILLAGER_TRADE - f Lnet/minecraft/class_3414; field_22273 ENTITY_SNOW_GOLEM_SHEAR - f Lnet/minecraft/class_3414; field_15103 ITEM_ARMOR_EQUIP_DIAMOND - f Lnet/minecraft/class_3414; field_21933 BLOCK_SHROOMLIGHT_PLACE - f Lnet/minecraft/class_3414; field_14904 ENTITY_PLAYER_DEATH -c net/minecraft/class_3439 net/minecraft/item/crafting/RecipeBook - m (Lnet/minecraft/class_2960;)V method_14879 lock - m (Lnet/minecraft/class_2960;)Z method_22845 isUnlocked - m (Lnet/minecraft/class_3439;)V method_14875 copyFrom - m (Lnet/minecraft/class_1860;)V method_14876 unlock - m ()Lnet/minecraft/class_5411; method_30173 func_242139_a - m (Lnet/minecraft/class_5421;Z)V method_30177 func_242146_b - m (Lnet/minecraft/class_1860;)V method_14886 markSeen - m (Lnet/minecraft/class_5421;Z)V method_14884 func_242143_a - m (Lnet/minecraft/class_5421;)Z method_14887 func_242142_a - m (Lnet/minecraft/class_5411;)V method_30174 func_242140_a - m (Lnet/minecraft/class_2960;)V method_14877 markNew - m (Lnet/minecraft/class_1860;)Z method_14878 isUnlocked - m (Lnet/minecraft/class_5421;)Z method_30176 func_242145_b - m (Lnet/minecraft/class_1729;)Z method_14880 func_242141_a - m (Lnet/minecraft/class_5421;ZZ)V method_30175 func_242144_a - m (Lnet/minecraft/class_1860;)V method_14893 lock - m (Lnet/minecraft/class_1860;)V method_14885 markNew - m (Lnet/minecraft/class_1860;)Z method_14883 isNew - m (Lnet/minecraft/class_2960;)V method_14881 unlock - f Lnet/minecraft/class_5411; field_25734 field_242138_c - f Ljava/util/Set; field_15295 newRecipes - f Ljava/util/Set; field_15300 recipes -c net/minecraft/class_3441 net/minecraft/item/crafting/ServerRecipeBook - m (Ljava/util/Collection;Lnet/minecraft/class_3222;)I method_14903 add - m (Lnet/minecraft/class_2713$class_2714;Lnet/minecraft/class_3222;Ljava/util/List;)V method_14899 sendPacket - m (Lnet/minecraft/class_2499;Ljava/util/function/Consumer;Lnet/minecraft/class_1863;)V method_20732 deserializeRecipes - m ()Lnet/minecraft/class_2487; method_14902 write - m (Lnet/minecraft/class_3222;)V method_14904 init - m (Ljava/util/Collection;Lnet/minecraft/class_3222;)I method_14900 remove - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1863;)V method_14901 read - f Lorg/apache/logging/log4j/Logger; field_15303 LOGGER -c net/minecraft/class_5411 net/minecraft/item/crafting/RecipeBookStatus - m (Lnet/minecraft/class_5421;Z)V method_30181 func_242152_a - m (Lnet/minecraft/class_5411;)V method_30179 func_242150_a - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_5421;Z)V method_30188 func_242159_b - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_5421;Lcom/mojang/datafixers/util/Pair;)V method_30184 func_242155_a - m (Ljava/util/EnumMap;)V method_30182 func_242153_a - m (Lnet/minecraft/class_5421;)Z method_30180 func_242151_a - m ()I hashCode hashCode - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_5411; method_30183 func_242154_a - m (Lnet/minecraft/class_5421;)Z method_30187 func_242158_b - m (Lnet/minecraft/class_2487;Ljava/util/Map;Lnet/minecraft/class_5421;Lcom/mojang/datafixers/util/Pair;)V method_30185 func_242156_a - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_5411; method_30186 func_242157_a - m (Lnet/minecraft/class_2540;)V method_30190 func_242161_b - m (Lnet/minecraft/class_2487;)V method_30189 func_242160_b - m ()Lnet/minecraft/class_5411; method_30178 func_242149_a - f Ljava/util/Map; field_25735 field_242147_a - f Ljava/util/Map; field_25736 field_242148_b -c net/minecraft/class_5411$class_5412 net/minecraft/item/crafting/RecipeBookStatus$CategoryStatus - m ()Ljava/lang/String; toString toString - m (Ljava/lang/Object;)Z equals equals - m ()I hashCode hashCode - m (Lnet/minecraft/class_5411$class_5412;Z)Z method_30193 func_242166_a - m (Lnet/minecraft/class_5411$class_5412;)Z method_30192 func_242165_a - m ()Lnet/minecraft/class_5411$class_5412; method_30191 func_242164_a - m (Lnet/minecraft/class_5411$class_5412;Z)Z method_30195 func_242168_b - m (Lnet/minecraft/class_5411$class_5412;)Z method_30194 func_242167_b - f Z field_25737 field_242162_a - f Z field_25738 field_242163_b -c net/minecraft/class_3445 net/minecraft/stats/Stat - m (Lnet/minecraft/class_3448;Ljava/lang/Object;)Ljava/lang/String; method_14950 buildName - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2960;)Ljava/lang/String; method_14952 locationToKey - m ()Lnet/minecraft/class_3448; method_14949 getType - m ()I hashCode hashCode - m (I)Ljava/lang/String; method_14953 format - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/Object; method_14951 getValue - f Lnet/minecraft/class_3448; field_15321 type - f Lnet/minecraft/class_3446; field_15319 formatter - f Ljava/lang/Object; field_15320 value -c net/minecraft/class_3442 net/minecraft/stats/ServerStatisticsManager - m (Lcom/mojang/datafixers/DataFixer;Ljava/lang/String;)V method_14906 parseLocal - m ()Ljava/util/Set; method_14909 getDirty - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_2487; method_14908 func_199065_a - m (Lnet/minecraft/class_3445;)Lnet/minecraft/class_2960; method_14907 func_199066_b - m (Lnet/minecraft/class_2487;Ljava/lang/String;Lnet/minecraft/class_3448;)V method_17991 func_219731_a - m ()V method_14912 saveStatFile - m (Lnet/minecraft/class_2487;Ljava/lang/String;Lnet/minecraft/class_3445;)V method_17990 func_219730_a - m (Lnet/minecraft/class_3222;)V method_14910 sendStats - m ()Ljava/lang/String; method_14911 func_199061_b - m ()V method_14914 markAllDirty - m (Ljava/lang/String;)V method_17992 func_219726_a - m (Lnet/minecraft/class_3448;)Lcom/google/gson/JsonObject; method_14913 func_199064_a - m (Ljava/lang/String;)V method_17993 func_219729_b - m (Lnet/minecraft/class_3448;Ljava/lang/String;)Ljava/util/Optional; method_14905 func_219728_a - f Lorg/apache/logging/log4j/Logger; field_15309 LOGGER - f I field_15306 lastStatRequest - f Lnet/minecraft/server/MinecraftServer; field_15308 server - f Ljava/util/Set; field_15307 dirty - f Ljava/io/File; field_15305 statsFile -c net/minecraft/class_3448 net/minecraft/stats/StatType - m (Ljava/lang/Object;)Lnet/minecraft/class_3445; method_14956 get - m ()Lnet/minecraft/class_2378; method_14959 getRegistry - m ()Ljava/util/Iterator; iterator iterator - m (Lnet/minecraft/class_3446;Ljava/lang/Object;)Lnet/minecraft/class_3445; method_14961 func_199075_a - m ()Ljava/lang/String; method_14957 getTranslationKey - m ()Lnet/minecraft/class_2561; method_30739 func_242170_d - m (Ljava/lang/Object;Lnet/minecraft/class_3446;)Lnet/minecraft/class_3445; method_14955 get - m (Ljava/lang/Object;)Z method_14958 contains - f Lnet/minecraft/class_2378; field_15323 registry - f Ljava/util/Map; field_15324 map - f Lnet/minecraft/class_2561; field_26382 field_242169_c -c net/minecraft/class_3446 net/minecraft/stats/IStatFormatter - m (I)Ljava/lang/String; format format - m (I)Ljava/lang/String; method_16819 func_223253_a_ - m (Ljava/text/DecimalFormat;)V method_16817 func_223254_a_ - m (I)Ljava/lang/String; method_16818 func_223256_c_ - m (I)Ljava/lang/String; method_16816 func_223255_b_ - f Lnet/minecraft/class_3446; field_16977 DISTANCE - f Lnet/minecraft/class_3446; field_16978 DIVIDE_BY_TEN - f Lnet/minecraft/class_3446; field_16975 DEFAULT - f Ljava/text/DecimalFormat; field_16976 DECIMAL_FORMAT - f Lnet/minecraft/class_3446; field_16979 TIME -c net/minecraft/class_3469 net/minecraft/stats/StatisticsManager - m (Lnet/minecraft/class_3448;Ljava/lang/Object;)I method_15024 getValue - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_3445;I)V method_15022 increment - m (Lnet/minecraft/class_3445;)I method_15025 getValue - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_3445;I)V method_15023 setValue - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_15431 statsData -c net/minecraft/class_3468 net/minecraft/stats/Stats - m (Ljava/lang/String;Lnet/minecraft/class_2378;)Lnet/minecraft/class_3448; method_15020 registerType - m (Ljava/lang/String;Lnet/minecraft/class_3446;)Lnet/minecraft/class_2960; method_15021 registerCustom - f Lnet/minecraft/class_3448; field_15419 CUSTOM - f Lnet/minecraft/class_2960; field_15413 CLIMB_ONE_CM - f Lnet/minecraft/class_2960; field_15416 INTERACT_WITH_BEACON - f Lnet/minecraft/class_2960; field_19252 INTERACT_WITH_CARTOGRAPHY_TABLE - f Lnet/minecraft/class_2960; field_15397 DAMAGE_DEALT_RESISTED - f Lnet/minecraft/class_3448; field_15403 ENTITY_KILLED - f Lnet/minecraft/class_2960; field_15394 WALK_ON_WATER_ONE_CM - f Lnet/minecraft/class_2960; field_15425 DAMAGE_RESISTED - f Lnet/minecraft/class_2960; field_15401 WALK_UNDER_WATER_ONE_CM - f Lnet/minecraft/class_3448; field_15392 ITEM_PICKED_UP - f Lnet/minecraft/class_2960; field_17485 INTERACT_WITH_LECTERN - f Lnet/minecraft/class_2960; field_15380 DAMAGE_BLOCKED_BY_SHIELD - f Lnet/minecraft/class_2960; field_15398 CLEAN_SHULKER_BOX - f Lnet/minecraft/class_2960; field_15418 OPEN_SHULKER_BOX - f Lnet/minecraft/class_2960; field_15428 JUMP - f Lnet/minecraft/class_2960; field_15422 SNEAK_TIME - f Lnet/minecraft/class_2960; field_15382 CLEAN_ARMOR - f Lnet/minecraft/class_2960; field_17272 INTERACT_WITH_BLAST_FURNACE - f Lnet/minecraft/class_2960; field_15423 SWIM_ONE_CM - f Lnet/minecraft/class_2960; field_15395 OPEN_CHEST - f Lnet/minecraft/class_2960; field_15399 DAMAGE_DEALT - f Lnet/minecraft/class_2960; field_15376 CROUCH_ONE_CM - f Lnet/minecraft/class_2960; field_22413 field_232863_aD_ - f Lnet/minecraft/class_2960; field_15378 TRADED_WITH_VILLAGER - f Lnet/minecraft/class_2960; field_15379 INTERACT_WITH_FURNACE - f Lnet/minecraft/class_2960; field_21778 INTERACT_WITH_ANVIL - f Lnet/minecraft/class_2960; field_15400 TIME_SINCE_DEATH - f Lnet/minecraft/class_2960; field_15402 TRIGGER_TRAPPED_CHEST - f Lnet/minecraft/class_2960; field_15430 FILL_CAULDRON - f Lnet/minecraft/class_2960; field_15389 LEAVE_GAME - f Lnet/minecraft/class_2960; field_15420 ENCHANT_ITEM - f Lnet/minecraft/class_2960; field_15387 PIG_ONE_CM - f Lnet/minecraft/class_3448; field_15372 ITEM_USED - f Lnet/minecraft/class_2960; field_15393 TUNE_NOTEBLOCK - f Lnet/minecraft/class_2960; field_15421 DEATHS - f Lnet/minecraft/class_2960; field_15409 MINECART_ONE_CM - f Lnet/minecraft/class_3448; field_15427 BLOCK_MINED - f Lnet/minecraft/class_2960; field_15391 FISH_CAUGHT - f Lnet/minecraft/class_2960; field_19255 BELL_RING - f Lnet/minecraft/class_2960; field_15371 INSPECT_DISPENSER - f Lnet/minecraft/class_2960; field_15410 ANIMALS_BRED - f Lnet/minecraft/class_2960; field_15388 DAMAGE_TAKEN - f Lnet/minecraft/class_2960; field_15386 FALL_ONE_CM - f Lnet/minecraft/class_2960; field_19253 INTERACT_WITH_LOOM - f Lnet/minecraft/class_3448; field_15411 ENTITY_KILLED_BY - f Lnet/minecraft/class_2960; field_15408 DAMAGE_DEALT_ABSORBED - f Lnet/minecraft/class_2960; field_15367 INSPECT_DROPPER - f Lnet/minecraft/class_2960; field_17273 INTERACT_WITH_SMOKER - f Lnet/minecraft/class_2960; field_15365 DAMAGE_ABSORBED - f Lnet/minecraft/class_3448; field_15405 ITEM_DROPPED - f Lnet/minecraft/class_2960; field_15426 FLY_ONE_CM - f Lnet/minecraft/class_2960; field_17486 INTERACT_WITH_CAMPFIRE - f Lnet/minecraft/class_2960; field_17271 OPEN_BARREL - f Lnet/minecraft/class_2960; field_24458 field_232862_C_ - f Lnet/minecraft/class_2960; field_15429 TIME_SINCE_REST - f Lnet/minecraft/class_2960; field_15390 CLEAN_BANNER - f Lnet/minecraft/class_2960; field_15364 SPRINT_ONE_CM - f Lnet/minecraft/class_2960; field_21779 INTERACT_WITH_GRINDSTONE - f Lnet/minecraft/class_2960; field_15381 SLEEP_IN_BED - f Lnet/minecraft/class_2960; field_15406 DROP - f Lnet/minecraft/class_2960; field_15377 WALK_ONE_CM - f Lnet/minecraft/class_2960; field_22464 field_232864_aE_ - f Lnet/minecraft/class_2960; field_15407 INTERACT_WITH_BREWINGSTAND - f Lnet/minecraft/class_2960; field_15375 PLAY_RECORD - f Lnet/minecraft/class_2960; field_15369 EAT_CAKE_SLICE - f Lnet/minecraft/class_2960; field_19257 RAID_WIN - f Lnet/minecraft/class_2960; field_15368 INTERACT_WITH_CRAFTING_TABLE - f Lnet/minecraft/class_2960; field_15384 TALKED_TO_VILLAGER - f Lnet/minecraft/class_2960; field_15374 AVIATE_ONE_CM - f Lnet/minecraft/class_2960; field_15417 PLAY_ONE_MINUTE - f Lnet/minecraft/class_2960; field_15424 OPEN_ENDERCHEST - f Lnet/minecraft/class_2960; field_15373 USE_CAULDRON - f Lnet/minecraft/class_3448; field_15383 ITEM_BROKEN - f Lnet/minecraft/class_2960; field_15414 MOB_KILLS - f Lnet/minecraft/class_2960; field_15412 POT_FLOWER - f Lnet/minecraft/class_2960; field_15415 BOAT_ONE_CM - f Lnet/minecraft/class_3448; field_15370 ITEM_CRAFTED - f Lnet/minecraft/class_2960; field_15366 INSPECT_HOPPER - f Lnet/minecraft/class_2960; field_19254 INTERACT_WITH_STONECUTTER - f Lnet/minecraft/class_2960; field_15404 PLAYER_KILLS - f Lnet/minecraft/class_2960; field_15385 PLAY_NOTEBLOCK - f Lnet/minecraft/class_2960; field_15396 HORSE_ONE_CM - f Lnet/minecraft/class_2960; field_19256 RAID_TRIGGER -c net/minecraft/class_3483 net/minecraft/tags/EntityTypeTags - m (Ljava/lang/String;)Lnet/minecraft/class_3494$class_5123; method_15077 getTagById - m ()Ljava/util/List; method_31073 getAllTags - m ()Lnet/minecraft/class_5414; method_15082 getCollection - f Lnet/minecraft/class_3494$class_5123; field_21508 ARROWS - f Lnet/minecraft/class_3494$class_5123; field_22415 IMPACT_PROJECTILES - f Lnet/minecraft/class_5120; field_23679 tagCollection - f Lnet/minecraft/class_3494$class_5123; field_19168 RAIDERS - f Lnet/minecraft/class_3494$class_5123; field_15507 SKELETONS - f Lnet/minecraft/class_3494$class_5123; field_20631 BEEHIVE_INHABITORS -c net/minecraft/class_3481 net/minecraft/tags/BlockTags - m (Ljava/lang/String;)Lnet/minecraft/class_3494$class_5123; method_15069 makeWrapperTag - m ()Ljava/util/List; method_31072 getAllTags - m ()Lnet/minecraft/class_5414; method_15073 getCollection - f Lnet/minecraft/class_5120; field_23678 collection - f Lnet/minecraft/class_3494$class_5123; field_25588 INFINIBURN_OVERWORLD - f Lnet/minecraft/class_3494$class_5123; field_15466 SAND - f Lnet/minecraft/class_3494$class_5123; field_15477 WOODEN_PRESSURE_PLATES - f Lnet/minecraft/class_3494$class_5123; field_15496 UNDERWATER_BONEMEALS - f Lnet/minecraft/class_3494$class_5123; field_15491 WOODEN_TRAPDOORS - f Lnet/minecraft/class_3494$class_5123; field_15476 WALL_CORALS - f Lnet/minecraft/class_3494$class_5123; field_21953 NYLIUM - f Lnet/minecraft/class_3494$class_5123; field_22276 WALL_POST_OVERRIDE - f Lnet/minecraft/class_3494$class_5123; field_15469 SLABS - f Lnet/minecraft/class_3494$class_5123; field_22275 BEACON_BASE_BLOCKS - f Lnet/minecraft/class_3494$class_5123; field_15486 ANVIL - f Lnet/minecraft/class_3494$class_5123; field_15462 SAPLINGS - f Lnet/minecraft/class_3494$class_5123; field_25590 INFINIBURN_END - f Lnet/minecraft/class_3494$class_5123; field_20341 CROPS - f Lnet/minecraft/class_3494$class_5123; field_22274 WITHER_SUMMON_BASE_BLOCKS - f Lnet/minecraft/class_3494$class_5123; field_15502 WOODEN_STAIRS - f Lnet/minecraft/class_3494$class_5123; field_15460 ENDERMAN_HOLDABLE - f Lnet/minecraft/class_3494$class_5123; field_17619 WOODEN_FENCES - f Lnet/minecraft/class_3494$class_5123; field_21780 PORTALS - f Lnet/minecraft/class_3494$class_5123; field_15478 VALID_SPAWN - f Lnet/minecraft/class_3494$class_5123; field_25148 UNSTABLE_BOTTOM_CENTER - f Lnet/minecraft/class_3494$class_5123; field_24459 PREVENT_MOB_SPAWNING_INSIDE - f Lnet/minecraft/class_3494$class_5123; field_21956 WARPED_STEMS - f Lnet/minecraft/class_3494$class_5123; field_15471 PLANKS - f Lnet/minecraft/class_3494$class_5123; field_15492 WALL_SIGNS - f Lnet/minecraft/class_3494$class_5123; field_23800 GUARDED_BY_PIGLINS - f Lnet/minecraft/class_3494$class_5123; field_20338 TALL_FLOWERS - f Lnet/minecraft/class_3494$class_5123; field_15474 JUNGLE_LOGS - f Lnet/minecraft/class_3494$class_5123; field_21955 CRIMSON_STEMS - f Lnet/minecraft/class_3494$class_5123; field_15499 WOODEN_BUTTONS - f Lnet/minecraft/class_3494$class_5123; field_22465 PIGLIN_REPELLENTS - f Lnet/minecraft/class_3494$class_5123; field_15479 CARPETS - f Lnet/minecraft/class_3494$class_5123; field_23208 NON_FLAMMABLE_WOOD - f Lnet/minecraft/class_3494$class_5123; field_17753 DRAGON_IMMUNE - f Lnet/minecraft/class_3494$class_5123; field_15463 RAILS - f Lnet/minecraft/class_3494$class_5123; field_15487 TRAPDOORS - f Lnet/minecraft/class_3494$class_5123; field_15485 DARK_OAK_LOGS - f Lnet/minecraft/class_3494$class_5123; field_22414 CLIMBABLE - f Lnet/minecraft/class_3494$class_5123; field_15498 BIRCH_LOGS - f Lnet/minecraft/class_3494$class_5123; field_15497 BAMBOO_PLANTABLE_ON - f Lnet/minecraft/class_3494$class_5123; field_23209 STRIDER_WARM_BLOCKS - f Lnet/minecraft/class_3494$class_5123; field_15483 CORAL_PLANTS - f Lnet/minecraft/class_3494$class_5123; field_22466 HOGLIN_REPELLENTS - f Lnet/minecraft/class_3494$class_5123; field_16443 BEDS - f Lnet/minecraft/class_3494$class_5123; field_24077 STONE_PRESSURE_PLATES - f Lnet/minecraft/class_3494$class_5123; field_21954 WART_BLOCKS - f Lnet/minecraft/class_3494$class_5123; field_21952 FIRE - f Lnet/minecraft/class_3494$class_5123; field_15461 CORAL_BLOCKS - f Lnet/minecraft/class_3494$class_5123; field_25739 MUSHROOM_GROW_BLOCK - f Lnet/minecraft/class_3494$class_5123; field_15459 STAIRS - f Lnet/minecraft/class_3494$class_5123; field_23063 SOUL_SPEED_BLOCKS - f Lnet/minecraft/class_3494$class_5123; field_15504 WALLS - f Lnet/minecraft/class_3494$class_5123; field_15495 DOORS - f Lnet/minecraft/class_3494$class_5123; field_25806 BASE_STONE_OVERWORLD - f Lnet/minecraft/class_3494$class_5123; field_23210 LOGS_THAT_BURN - f Lnet/minecraft/class_3494$class_5123; field_25589 INFINIBURN_NETHER - f Lnet/minecraft/class_3494$class_5123; field_15470 FLOWER_POTS - f Lnet/minecraft/class_3494$class_5123; field_20340 BEEHIVES - f Lnet/minecraft/class_3494$class_5123; field_15494 WOODEN_DOORS - f Lnet/minecraft/class_3494$class_5123; field_15468 WOODEN_SLABS - f Lnet/minecraft/class_3494$class_5123; field_25147 FENCE_GATES - f Lnet/minecraft/class_3494$class_5123; field_15467 ICE - f Lnet/minecraft/class_3494$class_5123; field_15490 IMPERMEABLE - f Lnet/minecraft/class_3494$class_5123; field_15501 BANNERS - f Lnet/minecraft/class_3494$class_5123; field_24076 PRESSURE_PLATES - f Lnet/minecraft/class_3494$class_5123; field_20342 BEE_GROWABLES - f Lnet/minecraft/class_3494$class_5123; field_16584 FENCES - f Lnet/minecraft/class_3494$class_5123; field_23799 CAMPFIRES - f Lnet/minecraft/class_3494$class_5123; field_20339 FLOWERS - f Lnet/minecraft/class_3494$class_5123; field_15489 SPRUCE_LOGS - f Lnet/minecraft/class_3494$class_5123; field_15465 STONE_BRICKS - f Lnet/minecraft/class_3494$class_5123; field_15472 STANDING_SIGNS - f Lnet/minecraft/class_3494$class_5123; field_15493 BUTTONS - f Lnet/minecraft/class_3494$class_5123; field_17754 WITHER_IMMUNE - f Lnet/minecraft/class_3494$class_5123; field_15500 SIGNS - f Lnet/minecraft/class_3494$class_5123; field_23062 GOLD_ORES - f Lnet/minecraft/class_3494$class_5123; field_15475 LOGS - f Lnet/minecraft/class_3494$class_5123; field_21490 SHULKER_BOXES - f Lnet/minecraft/class_3494$class_5123; field_25807 BASE_STONE_NETHER - f Lnet/minecraft/class_3494$class_5123; field_15503 LEAVES - f Lnet/minecraft/class_3494$class_5123; field_15480 SMALL_FLOWERS - f Lnet/minecraft/class_3494$class_5123; field_15488 CORALS - f Lnet/minecraft/class_3494$class_5123; field_15482 OAK_LOGS - f Lnet/minecraft/class_3494$class_5123; field_15458 ACACIA_LOGS - f Lnet/minecraft/class_3494$class_5123; field_15481 WOOL - f Lnet/minecraft/class_3494$class_5123; field_23119 SOUL_FIRE_BASE_BLOCKS -c net/minecraft/class_3489 net/minecraft/tags/ItemTags - m (Ljava/lang/String;)Lnet/minecraft/class_3494$class_5123; method_15102 makeWrapperTag - m ()Ljava/util/List; method_31074 getAllTags - m ()Lnet/minecraft/class_5414; method_15106 getCollection - f Lnet/minecraft/class_3494$class_5123; field_15556 BANNERS - f Lnet/minecraft/class_3494$class_5123; field_15555 WOODEN_BUTTONS - f Lnet/minecraft/class_3494$class_5123; field_23065 GOLD_ORES - f Lnet/minecraft/class_3494$class_5123; field_23801 SOUL_FIRE_BASE_BLOCKS - f Lnet/minecraft/class_3494$class_5123; field_15542 CARPETS - f Lnet/minecraft/class_3494$class_5123; field_15557 WOODEN_STAIRS - f Lnet/minecraft/class_3494$class_5123; field_16444 BEDS - f Lnet/minecraft/class_3494$class_5123; field_22277 BEACON_PAYMENT_ITEMS - f Lnet/minecraft/class_3494$class_5123; field_15554 BIRCH_LOGS - f Lnet/minecraft/class_3494$class_5123; field_15538 JUNGLE_LOGS - f Lnet/minecraft/class_3494$class_5123; field_20343 TALL_FLOWERS - f Lnet/minecraft/class_3494$class_5123; field_23064 PIGLIN_REPELLENTS - f Lnet/minecraft/class_3494$class_5123; field_21957 CRIMSON_STEMS - f Lnet/minecraft/class_3494$class_5123; field_15537 PLANKS - f Lnet/minecraft/class_3494$class_5123; field_25808 STONE_CRAFTING_MATERIALS - f Lnet/minecraft/class_3494$class_5123; field_15560 WALLS - f Lnet/minecraft/class_3494$class_5123; field_15529 RAILS - f Lnet/minecraft/class_3494$class_5123; field_23212 LOGS_THAT_BURN - f Lnet/minecraft/class_3494$class_5123; field_15546 DARK_OAK_LOGS - f Lnet/minecraft/class_3494$class_5123; field_15548 TRAPDOORS - f Lnet/minecraft/class_3494$class_5123; field_15534 WOODEN_SLABS - f Lnet/minecraft/class_3494$class_5123; field_15533 SIGNS - f Lnet/minecraft/class_3494$class_5123; field_15526 STAIRS - f Lnet/minecraft/class_3494$class_5123; field_15540 WOODEN_PRESSURE_PLATES - f Lnet/minecraft/class_3494$class_5123; field_23969 CREEPER_DROP_MUSIC_DISCS - f Lnet/minecraft/class_3494$class_5123; field_15553 DOORS - f Lnet/minecraft/class_3494$class_5123; field_18317 ARROWS - f Lnet/minecraft/class_3494$class_5123; field_15531 STONE_BRICKS - f Lnet/minecraft/class_3494$class_5123; field_24481 PIGLIN_LOVED - f Lnet/minecraft/class_3494$class_5123; field_15551 BUTTONS - f Lnet/minecraft/class_3494$class_5123; field_23211 NON_FLAMMABLE_WOOD - f Lnet/minecraft/class_3494$class_5123; field_15552 WOODEN_DOORS - f Lnet/minecraft/class_3494$class_5123; field_15536 BOATS - f Lnet/minecraft/class_3494$class_5123; field_15525 ACACIA_LOGS - f Lnet/minecraft/class_3494$class_5123; field_23802 STONE_TOOL_MATERIALS - f Lnet/minecraft/class_3494$class_5123; field_16585 FENCES - f Lnet/minecraft/class_3494$class_5123; field_15544 WOOL - f Lnet/minecraft/class_3494$class_5123; field_20344 FLOWERS - f Lnet/minecraft/class_3494$class_5123; field_15549 SPRUCE_LOGS - f Lnet/minecraft/class_3494$class_5123; field_21958 WARPED_STEMS - f Lnet/minecraft/class_3494$class_5123; field_21465 LECTERN_BOOKS - f Lnet/minecraft/class_3494$class_5123; field_15547 ANVIL - f Lnet/minecraft/class_3494$class_5123; field_15528 SAPLINGS - f Lnet/minecraft/class_3494$class_5123; field_15539 LOGS - f Lnet/minecraft/class_5120; field_23681 collection - f Lnet/minecraft/class_3494$class_5123; field_15558 LEAVES - f Lnet/minecraft/class_3494$class_5123; field_15543 SMALL_FLOWERS - f Lnet/minecraft/class_3494$class_5123; field_15545 OAK_LOGS - f Lnet/minecraft/class_3494$class_5123; field_15527 FISHES - f Lnet/minecraft/class_3494$class_5123; field_15541 MUSIC_DISCS - f Lnet/minecraft/class_3494$class_5123; field_15532 SAND - f Lnet/minecraft/class_3494$class_5123; field_17620 WOODEN_FENCES - f Lnet/minecraft/class_3494$class_5123; field_15550 WOODEN_TRAPDOORS - f Lnet/minecraft/class_3494$class_5123; field_17487 COALS - f Lnet/minecraft/class_3494$class_5123; field_15535 SLABS -c net/minecraft/class_3486 net/minecraft/tags/FluidTags - m (Ljava/lang/String;)Lnet/minecraft/class_3494$class_5123; method_15095 makeWrapperTag - m ()Ljava/util/List; method_29897 getAllTags - f Lnet/minecraft/class_3494$class_5123; field_15517 WATER - f Lnet/minecraft/class_3494$class_5123; field_15518 LAVA - f Lnet/minecraft/class_5120; field_23680 collection -c net/minecraft/class_5394 net/minecraft/tags/Tag - m (Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Class; method_29899 findCommonParentClass - m (Ljava/util/Set;)Lnet/minecraft/class_5394; method_29900 getTagFromContents - m (Ljava/util/Set;)Ljava/lang/Class; method_29901 getContentsClass - m ()Lnet/minecraft/class_5394; method_29898 getEmptyTag - f Lcom/google/common/collect/ImmutableList; field_25593 immutableContents - f Ljava/util/Set; field_25594 contents - f Ljava/lang/Class; field_25591 contentsClassType -c net/minecraft/class_5323 net/minecraft/tags/TagCollectionManager - m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_3494; method_31077 func_242182_c - m ()Lnet/minecraft/class_5415; method_29223 getManager - m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_3494; method_31076 func_242181_b - m (Lnet/minecraft/class_5415;)V method_29219 setManager - m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_3494; method_31075 func_242179_a - m (Lnet/minecraft/class_3494$class_5123;)Lnet/minecraft/class_3494; method_31078 func_242183_d - f Lnet/minecraft/class_5415; field_25149 manager -c net/minecraft/class_5413 net/minecraft/tags/TagRegistryManager - m (Lnet/minecraft/class_5415;)Lcom/google/common/collect/Multimap; method_30203 validateTags - m ()V method_30202 checkHelperRegistrations - m (Lnet/minecraft/class_5415;)V method_30198 fetchTags - m (Lnet/minecraft/class_2960;Ljava/util/function/Function;)Lnet/minecraft/class_5120; method_30201 create - m (Lnet/minecraft/class_5120;)Z method_30197 func_242192_a - m (Lnet/minecraft/class_5415;Lnet/minecraft/class_5120;)V method_30199 func_242194_a - m (Lcom/google/common/collect/Multimap;Lnet/minecraft/class_5415;Lnet/minecraft/class_2960;Lnet/minecraft/class_5120;)V method_30200 func_242195_a - m ()V method_30196 fetchTags - f Ljava/util/Map; field_25741 idToRegistryMap -c net/minecraft/class_5120 net/minecraft/tags/TagRegistry - m (Lnet/minecraft/class_5414;Lnet/minecraft/class_5120$class_5121;)V method_26772 func_232936_a - m ()Lnet/minecraft/class_5414; method_26770 getCollection - m (Lnet/minecraft/class_3494;Lnet/minecraft/class_5120$class_5121;)V method_27062 func_232933_a - m (Ljava/lang/String;)Lnet/minecraft/class_3494$class_5123; method_26773 createTag - m (Lnet/minecraft/class_5415;)V method_26771 fetchTags - m (Lnet/minecraft/class_5415;)Ljava/util/Set; method_29224 getTagIdsFromSupplier - m ()V method_27061 fetchTags - m ()Ljava/util/List; method_29902 getTags - m (Lnet/minecraft/class_3494;Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_27063 func_232934_a - f Ljava/util/function/Function; field_25740 supplierToCollectionFunction - f Lnet/minecraft/class_5414; field_23682 collection - f Ljava/util/List; field_23683 tags -c net/minecraft/class_5120$class_5121 net/minecraft/tags/TagRegistry$NamedTag - m (Ljava/util/function/Function;)V method_26775 fetchTag - m ()Lnet/minecraft/class_3494; method_26776 getTag - f Lnet/minecraft/class_2960; field_23684 id - f Lnet/minecraft/class_3494; field_23685 tag -c net/minecraft/class_5120$1 net/minecraft/tags/TagRegistry$1 -c net/minecraft/class_5414 net/minecraft/tags/ITagCollection - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_30210 get - m (Ljava/lang/Object;)Ljava/util/Collection; method_30206 getOwningTags - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2378;)Lnet/minecraft/class_5414; method_30209 readTagCollectionFromBuffer - m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2960; method_30205 getDirectIdFromTag - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494; method_30213 getTagByID - m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_2960; method_30212 getValidatedIdFromTag - m ()Ljava/util/Collection; method_30211 getRegisteredTags - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_2348;)V method_30208 writeTagCollectionToBuffer - m (Ljava/util/Map;)Lnet/minecraft/class_5414; method_30207 getTagCollectionFromMap - m ()Lnet/minecraft/class_5414; method_30214 getEmptyTagCollection - m ()Ljava/util/Map; method_30204 getIDTagMap -c net/minecraft/class_5414$1 net/minecraft/tags/ITagCollection$1 - f Lnet/minecraft/class_3494; field_25743 emptyTag - f Lcom/google/common/collect/BiMap; field_25742 field_242206_a -c net/minecraft/class_3494 net/minecraft/tags/ITag - m (Ljava/util/function/Supplier;Lnet/minecraft/class_3494;)Lcom/mojang/serialization/DataResult; method_28135 func_232948_a_ - m (Ljava/util/function/Supplier;)Lcom/mojang/serialization/Codec; method_28134 getTagCodec - m (Ljava/util/Random;)Ljava/lang/Object; method_15142 getRandomElement - m (Ljava/util/function/Supplier;Lnet/minecraft/class_2960;)Lcom/mojang/serialization/DataResult; method_28136 func_232949_a_ - m (Ljava/lang/Object;)Z method_15141 contains - m ()Ljava/util/List; method_15138 getAllElements - m (Lnet/minecraft/class_3494;)Lcom/mojang/serialization/DataResult; method_28133 func_232945_a_ - m (Lnet/minecraft/class_2960;)Lcom/mojang/serialization/DataResult; method_28137 func_232950_a_ - m (Ljava/util/Set;)Lnet/minecraft/class_3494; method_26777 getTagOf -c net/minecraft/class_3494$class_3496 net/minecraft/tags/ITag$ITagEntry - m (Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/Consumer;)Z method_26790 matches - m (Lcom/google/gson/JsonArray;)V method_26789 addAdditionalData -c net/minecraft/class_3494$class_5123 net/minecraft/tags/ITag$INamedTag - m ()Lnet/minecraft/class_2960; method_26791 getName -c net/minecraft/class_3494$class_5145 net/minecraft/tags/ITag$Proxy - m ()Lnet/minecraft/class_3494$class_3496; method_27067 getEntry - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_3494$class_3496; field_23805 entry - f Ljava/lang/String; field_23806 identifier -c net/minecraft/class_3494$class_5122 net/minecraft/tags/ITag$ItemEntry - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2960; field_23689 identifier -c net/minecraft/class_3494$class_3495 net/minecraft/tags/ITag$Builder - m (Ljava/lang/String;Lnet/minecraft/class_3494$class_3496;)V method_27066 func_232958_a_ - m (Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/class_3494$class_5145;)Z method_26783 func_232960_a_ - m (Ljava/lang/Object;)V method_26781 func_232957_a_ - m (Lnet/minecraft/class_3494$class_5145;)Lnet/minecraft/class_3494$class_3495; method_27064 addProxyTag - m ()Lcom/google/gson/JsonObject; method_26788 serialize - m (Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/stream/Stream; method_26786 getProxyTags - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_3494$class_3496; method_30740 deserializeTagEntry - m ()Ljava/util/stream/Stream; method_26785 getProxyStream - m (Lnet/minecraft/class_3494$class_3496;Ljava/lang/String;)Lnet/minecraft/class_3494$class_3495; method_27065 addTag - m (Lnet/minecraft/class_2960;Ljava/lang/String;)Lnet/minecraft/class_3494$class_3495; method_26787 addTagEntry - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Lnet/minecraft/class_3494$class_3495; method_26780 deserialize - m (Lnet/minecraft/class_2960;Ljava/lang/String;)Lnet/minecraft/class_3494$class_3495; method_26784 addItemEntry - m ()Lnet/minecraft/class_3494$class_3495; method_26778 create - m (Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/Optional; method_26782 build - f Ljava/util/List; field_23688 proxyTags -c net/minecraft/class_3494$class_3497 net/minecraft/tags/ITag$TagEntry - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2960; field_15584 id -c net/minecraft/class_3494$class_5479 net/minecraft/tags/ITag$OptionalItemEntry - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2960; field_26383 id -c net/minecraft/class_3494$class_5480 net/minecraft/tags/ITag$OptionalTagEntry - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2960; field_26384 id -c net/minecraft/class_3494$1 net/minecraft/tags/ITag$1 -c net/minecraft/class_3503 net/minecraft/tags/TagCollectionReader - m (Lnet/minecraft/class_2960;)Ljava/lang/Object; method_26799 func_242228_a - m (Lnet/minecraft/class_3300;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; method_15192 readTagsFromManager - m (Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/class_2960;Lnet/minecraft/class_3494$class_3495;)V method_26797 func_242227_a - m (Lnet/minecraft/class_3300;)Ljava/util/Map; method_18243 func_242223_a - m (Ljava/util/Map;)Lnet/minecraft/class_5414; method_18242 buildTagCollectionFromMap - m (Lnet/minecraft/class_2960;)Lnet/minecraft/class_3494$class_3495; method_26800 func_242229_b - m (Ljava/lang/String;)Z method_15194 func_242225_a - f Ljava/util/function/Function; field_15609 idToTagFunction - f Lcom/google/gson/Gson; field_15608 GSON - f Lorg/apache/logging/log4j/Logger; field_15607 LOGGER - f Ljava/lang/String; field_15606 tagType - f Ljava/lang/String; field_15605 path - f I field_15603 FILE_TYPE_LENGHT_VALUE -c net/minecraft/class_5415 net/minecraft/tags/ITagCollectionSupplier - m ()Lnet/minecraft/class_5414; method_30215 getBlockTags - m ()Lnet/minecraft/class_5414; method_30218 getItemTags - m ()V method_30222 updateTags - m ()Lnet/minecraft/class_5414; method_30220 getFluidTags - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_5415; method_30219 readTagCollectionSupplierFromBuffer - m (Lnet/minecraft/class_2540;)V method_30217 writeTagCollectionSupplierToBuffer - m ()Lnet/minecraft/class_5414; method_30221 getEntityTypeTags - m (Lnet/minecraft/class_5414;Lnet/minecraft/class_5414;Lnet/minecraft/class_5414;Lnet/minecraft/class_5414;)Lnet/minecraft/class_5415; method_30216 getTagCollectionSupplier - f Lnet/minecraft/class_5415; field_25744 TAG_COLLECTION_SUPPLIER -c net/minecraft/class_5415$1 net/minecraft/tags/ITagCollectionSupplier$1 - f Lnet/minecraft/class_5414; field_25746 field_242214_c - f Lnet/minecraft/class_5414; field_25747 field_242215_d - f Lnet/minecraft/class_5414; field_25748 field_242216_e - f Lnet/minecraft/class_5414; field_25745 field_242213_b -c net/minecraft/class_3505 net/minecraft/tags/NetworkTagManager - m ()Lnet/minecraft/class_5415; method_30223 getTagCollectionSupplier - m (Ljava/util/Map$Entry;)Ljava/lang/String; method_29225 func_232978_a_ - m (Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/lang/Void;)V method_30224 func_232979_a_ - f Lnet/minecraft/class_5415; field_25749 tagCollectionSupplier - f Lnet/minecraft/class_3503; field_15612 blocks - f Lnet/minecraft/class_3503; field_15613 items - f Lnet/minecraft/class_3503; field_15614 fluids - f Lnet/minecraft/class_3503; field_15615 entityTypes -c net/minecraft/class_3509 net/minecraft/util/ClassInheritanceMultiMap - m (Ljava/lang/Object;)Z remove remove - m (Ljava/lang/Object;)Z add add - m ()I size size - m (Ljava/lang/Class;)Ljava/util/List; method_15217 func_219791_b - m (Ljava/lang/Object;)Z contains contains - m ()Ljava/util/List; method_29903 func_241289_a_ - m ()Ljava/util/Iterator; iterator iterator - m (Ljava/lang/Class;)Ljava/util/Collection; method_15216 getByClass - f Ljava/util/List; field_15635 values - f Ljava/util/Map; field_15636 map - f Ljava/lang/Class; field_15637 baseClass -c net/minecraft/class_3508 net/minecraft/util/BitArray - m (I)I method_15211 getAt - m (I)I method_27284 func_232986_b_ - m (II)I method_15214 swapAt - m ()I method_15215 size - m (Ljava/util/function/IntConsumer;)V method_21739 getAll - m ()[J method_15212 getBackingLongArray - m (II)V method_15210 setAt - f I field_15633 bitsPerEntry - f [I field_24078 field_232981_a_ - f I field_15632 arraySize - f J field_15634 maxEntryValue - f [J field_15631 longArray - f I field_24079 field_232982_f_ - f I field_24080 field_232983_g_ - f I field_24082 field_232985_i_ - f I field_24081 field_232984_h_ -c net/minecraft/class_3515 net/minecraft/util/CryptManager - m ([B)Ljava/security/PublicKey; method_15242 decodePublicKey - m (Ljava/lang/String;[B)[B method_15236 digestOperation - m (Ljava/security/Key;[B)[B method_15238 encryptData - m (ILjava/lang/String;Ljava/security/Key;)Ljavax/crypto/Cipher; method_15241 createTheCipherInstance - m (Ljava/security/Key;[B)[B method_15243 decryptData - m ()Ljava/security/KeyPair; method_15237 generateKeyPair - m (Ljava/security/PrivateKey;[B)Ljavax/crypto/SecretKey; method_15234 decryptSharedKey - m (ILjava/security/Key;[B)[B method_15244 cipherOperation - m (Ljava/lang/String;Ljava/security/PublicKey;Ljavax/crypto/SecretKey;)[B method_15240 getServerIdHash - m (ILjava/security/Key;)Ljavax/crypto/Cipher; method_15235 createNetCipherInstance - m ()Ljavax/crypto/SecretKey; method_15239 createNewSharedKey - f Lorg/apache/logging/log4j/Logger; field_15652 LOGGER -c net/minecraft/class_3513 net/minecraft/util/IntIdentityHashBiMap - m ()I method_15227 size - m ()I method_15226 nextId - m (Ljava/lang/Object;I)I method_15232 getIndex - m (I)I method_15223 findEmpty - m (Ljava/lang/Object;)I method_15225 add - m (I)V method_15224 grow - m (Ljava/lang/Object;)I method_15228 hashObject - m ()V method_15229 clear - m (I)I method_15222 getValue - m ()Ljava/util/Iterator; iterator iterator - m (Ljava/lang/Object;I)V method_15230 put - f I field_15648 mapSize - f [Ljava/lang/Object; field_15647 byId - f [I field_15646 intKeys - f I field_15649 nextFreeIndex - f [Ljava/lang/Object; field_15651 values - f Ljava/lang/Object; field_15650 EMPTY -c net/minecraft/class_5125 net/minecraft/server/SessionLockManager - m (Ljava/nio/file/Path;)Z method_26804 func_232999_b_ - m ()V close close - m (Ljava/nio/file/Path;)Lnet/minecraft/class_5125; method_26803 func_232998_a_ - m ()Z method_26802 func_232997_a_ - f Ljava/nio/channels/FileLock; field_23693 field_232995_b_ - f Ljava/nio/channels/FileChannel; field_23692 field_232994_a_ - f Ljava/nio/ByteBuffer; field_25353 field_232996_c_ -c net/minecraft/class_5125$class_5126 net/minecraft/server/SessionLockManager$AlreadyLockedException - m (Ljava/nio/file/Path;)Lnet/minecraft/class_5125$class_5126; method_26805 func_233000_a_ -c net/minecraft/class_4456 net/minecraft/util/CSVWriter - m (Ljava/util/stream/Stream;)V method_21629 func_225427_a - m ([Ljava/lang/Object;)V method_21630 func_225426_a - m (Ljava/lang/Object;)Ljava/lang/String; method_21628 func_225425_a - m ()Lnet/minecraft/class_4456$class_4457; method_21627 func_225428_a - f Ljava/io/Writer; field_20284 field_225429_a - f I field_20285 field_225430_b -c net/minecraft/class_4456$class_4457 net/minecraft/util/CSVWriter$Builder - m (Ljava/io/Writer;)Lnet/minecraft/class_4456; method_21631 func_225422_a - m (Ljava/lang/String;)Lnet/minecraft/class_4456$class_4457; method_21632 func_225423_a - f Ljava/util/List; field_20286 field_225424_a -c net/minecraft/class_4456$1 net/minecraft/util/CSVWriter$1 -c net/minecraft/class_5253 net/minecraft/util/ColorHelper -c net/minecraft/class_5253$class_5254 net/minecraft/util/ColorHelper$PackedColor - m (I)I method_27766 getGreen - m (I)I method_27762 getAlpha - m (IIII)I method_27764 packColor - m (I)I method_27765 getRed - m (II)I method_27763 blendColors - m (I)I method_27767 getBlue -c net/minecraft/class_5127 net/minecraft/world/chunk/storage/SuppressedExceptions - m ()V method_26806 func_233002_a_ - m (Ljava/lang/Throwable;)V method_26807 func_233003_a_ - f Ljava/lang/Throwable; field_23694 field_233001_a_ -c net/minecraft/class_5224 net/minecraft/util/ICharacterConsumer - m (ILnet/minecraft/class_2583;I)Z accept accept -c net/minecraft/class_5481 net/minecraft/util/IReorderingProcessor - m (Ljava/util/List;)Lnet/minecraft/class_5481; method_30749 func_242241_a - m (ILnet/minecraft/class_2583;)Lnet/minecraft/class_5481; method_30741 fromCodePoint - m (Lnet/minecraft/class_5224;)Z accept accept - m (Ljava/lang/String;Lnet/minecraft/class_2583;)Lnet/minecraft/class_5481; method_30747 fromString - m (Ljava/lang/String;Lnet/minecraft/class_2583;Lit/unimi/dsi/fastutil/ints/Int2IntFunction;Lnet/minecraft/class_5224;)Z method_30748 func_242240_a - m (Lnet/minecraft/class_5481;Lnet/minecraft/class_5481;Lnet/minecraft/class_5224;)Z method_30743 func_242235_a - m (Ljava/lang/String;Lnet/minecraft/class_2583;Lit/unimi/dsi/fastutil/ints/Int2IntFunction;)Lnet/minecraft/class_5481; method_30754 func_242246_b - m (Lnet/minecraft/class_5224;Lit/unimi/dsi/fastutil/ints/Int2IntFunction;)Lnet/minecraft/class_5224; method_30745 func_242237_a - m (Lnet/minecraft/class_5224;)Z method_30744 func_242236_a - m (Ljava/util/List;)Lnet/minecraft/class_5481; method_30755 func_242247_b - m (Lnet/minecraft/class_5481;Lnet/minecraft/class_5481;)Lnet/minecraft/class_5481; method_30752 func_242244_b - m (Lnet/minecraft/class_5224;Lit/unimi/dsi/fastutil/ints/Int2IntFunction;ILnet/minecraft/class_2583;I)Z method_30746 func_242238_a - m (Ljava/lang/String;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_30753 func_242245_b - m (Lnet/minecraft/class_2583;ILnet/minecraft/class_5224;)Z method_30751 func_242243_a - m (Ljava/util/List;Lnet/minecraft/class_5224;)Z method_30750 func_242242_a - m (Lnet/minecraft/class_5481;Lnet/minecraft/class_5481;)Lnet/minecraft/class_5481; method_30742 func_242234_a - f Lnet/minecraft/class_5481; field_26385 field_242232_a -c net/minecraft/class_3517 net/minecraft/util/FrameTimer - m ()[J method_15246 getFrames - m (I)I method_15251 parseIndex - m ()I method_15250 getIndex - m (J)V method_15247 addFrame - m ()I method_15249 getLastIndex - m (JII)I method_15248 getLineHeight - f I field_15654 index - f I field_15656 lastIndex - f I field_15655 counter - f [J field_15653 frames -c net/minecraft/class_3518 net/minecraft/util/JSONUtils - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject; method_15296 getJsonObject - m (Lcom/google/gson/Gson;Ljava/lang/String;Ljava/lang/Class;Z)Ljava/lang/Object; method_15279 fromJson - m (Lcom/google/gson/JsonElement;Ljava/lang/String;)Lcom/google/gson/JsonObject; method_15295 getJsonObject - m (Lcom/google/gson/JsonElement;Ljava/lang/String;)Lcom/google/gson/JsonArray; method_15252 getJsonArray - m (Lcom/google/gson/JsonElement;Ljava/lang/String;)J method_15263 getLong - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonArray; method_15261 getJsonArray - m (Lcom/google/gson/JsonElement;Ljava/lang/String;)B method_15293 getByte - m (Lcom/google/gson/Gson;Ljava/lang/String;Lcom/google/gson/reflect/TypeToken;)Ljava/lang/Object; method_15290 fromJSONUnlenient - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z method_15258 getBoolean - m (Lcom/google/gson/JsonObject;Ljava/lang/String;I)I method_15282 getInt - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15254 isBoolean - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Ljava/lang/String; method_15265 getString - m (Ljava/io/Reader;)Lcom/google/gson/JsonObject; method_15255 fromJson - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15294 hasField - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)J method_22449 getLong - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gson/JsonDeserializationContext;Ljava/lang/Class;)Ljava/lang/Object; method_15283 deserializeClass - m (Lcom/google/gson/JsonElement;)Z method_15286 isString - m (Lcom/google/gson/Gson;Ljava/io/Reader;Lcom/google/gson/reflect/TypeToken;)Ljava/lang/Object; method_15297 fromJSONUnlenient - m (Lcom/google/gson/Gson;Ljava/io/Reader;Ljava/lang/Class;)Ljava/lang/Object; method_15276 fromJson - m (Lcom/google/gson/Gson;Ljava/lang/String;Lcom/google/gson/reflect/TypeToken;Z)Ljava/lang/Object; method_15262 fromJSON - m (Ljava/lang/String;)Lcom/google/gson/JsonObject; method_15285 fromJson - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Lnet/minecraft/class_1792; method_15288 getItem - m (Lcom/google/gson/JsonElement;Ljava/lang/String;)Z method_15268 getBoolean - m (Lcom/google/gson/JsonElement;Ljava/lang/String;)I method_15257 getInt - m (Lcom/google/gson/JsonElement;Ljava/lang/String;)Lnet/minecraft/class_1792; method_15256 getItem - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lcom/google/gson/JsonArray;)Lcom/google/gson/JsonArray; method_15292 getJsonArray - m (Lcom/google/gson/JsonElement;Ljava/lang/String;)F method_15269 getFloat - m (Lcom/google/gson/Gson;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; method_15284 fromJson - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15289 isString - m (Ljava/io/Reader;Z)Lcom/google/gson/JsonObject; method_15274 fromJson - m (Lcom/google/gson/JsonObject;Ljava/lang/String;J)J method_15280 getLong - m (Lcom/google/gson/JsonElement;Ljava/lang/String;)Ljava/lang/String; method_15287 getString - m (Lcom/google/gson/Gson;Ljava/io/Reader;Lcom/google/gson/reflect/TypeToken;Z)Ljava/lang/Object; method_15273 fromJSON - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15264 isJsonArray - m (Ljava/lang/String;Ljava/lang/String;)Lcom/google/gson/JsonSyntaxException; method_17995 func_219793_a - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)F method_15259 getFloat - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15278 isJsonPrimitive - m (Lcom/google/gson/JsonObject;Ljava/lang/String;F)F method_15277 getFloat - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)I method_15260 getInt - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_15253 getString - m (Lcom/google/gson/JsonElement;Ljava/lang/String;Lcom/google/gson/JsonDeserializationContext;Ljava/lang/Class;)Ljava/lang/Object; method_15291 deserializeClass - m (Lcom/google/gson/JsonObject;Ljava/lang/String;)Z method_15270 getBoolean - m (Lcom/google/gson/JsonElement;)Z method_15275 isNumber - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lcom/google/gson/JsonObject;)Lcom/google/gson/JsonObject; method_15281 getJsonObject - m (Lcom/google/gson/JsonElement;)Ljava/lang/String; method_15266 toString - m (Lcom/google/gson/JsonObject;Ljava/lang/String;Lcom/google/gson/JsonDeserializationContext;Ljava/lang/Class;)Ljava/lang/Object; method_15272 deserializeClass - m (Lcom/google/gson/JsonObject;Ljava/lang/String;B)B method_15271 getByte - m (Lcom/google/gson/Gson;Ljava/io/Reader;Ljava/lang/Class;Z)Ljava/lang/Object; method_15267 fromJson - m (Ljava/lang/String;Z)Lcom/google/gson/JsonObject; method_15298 fromJson - f Lcom/google/gson/Gson; field_15657 GSON -c net/minecraft/class_3521 net/minecraft/util/HTTPUtil - m (Ljava/io/File;Ljava/lang/String;Ljava/util/Map;ILnet/minecraft/class_3536;Ljava/net/Proxy;)Ljava/util/concurrent/CompletableFuture; method_15301 downloadResourcePack - m ()I method_15302 getSuitableLanPort - m (Lnet/minecraft/class_3536;Ljava/lang/String;Ljava/net/Proxy;Ljava/util/Map;Ljava/io/File;I)Ljava/lang/Object; method_15303 func_219798_a - f Lorg/apache/logging/log4j/Logger; field_15665 LOGGER - f Lcom/google/common/util/concurrent/ListeningExecutorService; field_15664 DOWNLOADER_EXECUTOR -c net/minecraft/class_3528 net/minecraft/util/LazyValue - m ()Ljava/lang/Object; method_15332 getValue - f Ljava/lang/Object; field_15718 value - f Ljava/util/function/Supplier; field_15719 supplier -c net/minecraft/class_4801 net/minecraft/util/RangedInteger - m (Ljava/util/Random;)I method_24503 getRandomWithinRange - m ()I method_29493 getMax - m (II)Lnet/minecraft/class_4801; method_24502 createRangedInteger - m ()I method_29492 getMinInclusive - m ()Ljava/lang/String; toString toString - f I field_22278 minInclusive - f I field_22279 max -c net/minecraft/class_4540 net/minecraft/util/FastRandom - m (JJ)J method_22372 mix -c net/minecraft/class_3532 net/minecraft/util/math/MathHelper - m (D)I method_15384 ceil - m (F)I method_15375 floor - m (I)I method_15382 abs - m (III)J method_15371 getCoordinateRandom - m (D)D method_15385 frac - m (D)J method_15372 lfloor - m (D)D method_16435 perlinFade - m (F)F method_22450 frac - m (III)I method_15340 clamp - m (F)I method_15386 ceil - m (I)I method_15339 smallestEncompassingPowerOfTwo - m (Ljava/util/Random;DD)D method_15366 nextDouble - m (F)F method_15362 cos - m (DDDDDDDDDDD)D method_16438 lerp3 - m (II)I method_15387 normalizeAngle - m (D)I method_15365 fastFloor - m (FFF)F method_16439 lerp - m (FFF)I method_15353 rgb - m (Ljava/lang/String;I)I method_15343 getInt - m (JJJ)J method_24156 clamp - m (DDDDDD)D method_16437 lerp2 - m (FF)Z method_15347 epsilonEquals - m (DD)Z method_20390 epsilonEquals - m (Lnet/minecraft/class_2382;)J method_15389 getPositionRandom - m ([F)V method_15376 func_203445_a - m (Ljava/util/Random;II)I method_15395 nextInt - m (D)F method_22860 rotWrap - m (F)F method_23278 fastInvCubeRoot - m (FF)F method_24504 func_233021_e_ - m (I)I method_15354 hash - m (FFF)F method_15363 clamp - m (DDD)D method_16436 lerp - m (I)I method_15342 log2DeBruijn - m (FFF)F method_15348 approach - m ([J)D method_15373 average - m ()Ljava/util/UUID; method_15394 getRandomUUID - m (FF)F method_15381 wrapSubtractDegrees - m (DD)D method_15349 atan2 - m (DDD)D method_15390 clampedLerp - m (F)F method_15379 abs - m (DD)D method_15391 absMax - m (D)D method_15338 wrapDegrees - m (III)I method_15383 rgb - m (D)D method_15345 fastInvSqrt - m (I)I method_15392 wrapDegrees - m (F)F method_15393 wrapDegrees - m (IILjava/util/function/IntPredicate;)I method_15360 binarySearch - m (Ljava/util/Random;FF)F method_15344 nextFloat - m (D)F method_15368 sqrt - m (D)I method_15357 floor - m (II)I method_15346 intFloorDiv - m (F)F method_15355 sqrt - m (F)F method_15374 sin - m (FFF)F method_22859 rotLerp - m (II)I method_28139 roundUp - m (FFF)I method_15369 hsvToRGB - m (FFF)F method_17821 interpolateAngle - m (FFF)F method_15388 approachDegrees - m (D)I method_17822 signum - m (I)I method_15351 log2 - m (F)F method_27285 squareFloat - m (F)F method_22858 fastInvSqrt - m (Ljava/util/Random;)Ljava/util/UUID; method_15378 getRandomUUID - m (FFF)F method_20306 func_219800_b - m (FF)F method_15341 positiveModulo - m (DDD)D method_15350 clamp - m (DD)D method_15367 positiveModulo - m (I)Z method_15352 isPowerOfTwo - m (FF)F method_15356 degreesDifferenceAbs - m (DDD)D method_15370 func_233020_c_ - f [F field_15725 SIN_TABLE - f [D field_15727 ASINE_TAB - f [I field_15723 MULTIPLY_DE_BRUIJN_BIT_POSITION - f F field_15724 SQRT_2 - f D field_15728 FRAC_BIAS - f Ljava/util/Random; field_15726 RANDOM - f [D field_15722 COS_TAB -c net/minecraft/class_3530 net/minecraft/util/EnumTypeAdapterFactory - m (Lnet/minecraft/class_3530;Ljava/lang/Object;)Ljava/lang/String; method_15335 access$000 - m (Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter; create create - m (Ljava/lang/Object;)Ljava/lang/String; method_15334 getName -c net/minecraft/class_3530$1 net/minecraft/util/EnumTypeAdapterFactory$1 - m (Lcom/google/gson/stream/JsonReader;)Ljava/lang/Object; read read - m (Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V write write - f Lnet/minecraft/class_3530; field_15721 field_151230_b - f Ljava/util/Map; field_15720 field_151231_a -c net/minecraft/class_3538 net/minecraft/util/ReuseableStream - m (Lnet/minecraft/class_3538;)Ljava/util/Spliterator; method_15420 func_219808_b - m ()Ljava/util/stream/Stream; method_15418 createStream - m (Lnet/minecraft/class_3538;)Ljava/util/List; method_15419 func_212759_a - f Ljava/util/List; field_15745 cachedValues - f Ljava/util/Spliterator; field_15746 spliterator -c net/minecraft/class_3538$1 net/minecraft/util/ReuseableStream$1 - m (Ljava/util/function/Consumer;)Z tryAdvance tryAdvance - f I field_15747 nextIdx - f Lnet/minecraft/class_3538; field_15748 field_212757_a -c net/minecraft/class_3536 net/minecraft/util/IProgressUpdate - m (Lnet/minecraft/class_2561;)V method_15412 displaySavingString - m ()V method_15411 setDoneWorking - m (Lnet/minecraft/class_2561;)V method_15413 resetProgressAndMessage - m (Lnet/minecraft/class_2561;)V method_15414 displayLoadingString - m (I)V method_15410 setLoadingProgress -c net/minecraft/class_4706 net/minecraft/util/SortedArraySet - m ([Ljava/lang/Object;)[Ljava/lang/Object; method_23864 cast - m ()Ljava/util/Iterator; iterator iterator - m ()I size size - m (Lnet/minecraft/class_4706;)I method_23860 func_226173_a_ - m (Ljava/lang/Object;)Z remove remove - m (Lnet/minecraft/class_4706;)[Ljava/lang/Object; method_23867 func_226180_b_ - m ()Ljava/lang/Object; method_23865 getSmallest - m (I)Ljava/lang/Object; method_23871 func_226184_e_ - m (Ljava/lang/Object;)Z contains contains - m (I)V method_23870 func_226183_d_ - m (I)V method_23868 func_226181_c_ - m (I)Lnet/minecraft/class_4706; method_23859 newSet - m (Ljava/lang/Object;)Z equals equals - m ()V clear clear - m (Ljava/lang/Object;I)V method_23863 func_226176_a_ - m (Ljava/lang/Object;)Z add add - m (I)I method_23866 func_226179_b_ - m ()[Ljava/lang/Object; toArray toArray - m (Ljava/lang/Object;)Ljava/lang/Object; method_23862 func_226175_a_ - m (Lnet/minecraft/class_4706;I)V method_23861 func_226174_a_ - m (Ljava/lang/Object;)I method_23869 binarySearch - m ([Ljava/lang/Object;)[Ljava/lang/Object; toArray toArray - f Ljava/util/Comparator; field_21562 comparator - f I field_21564 maxIndex - f [Ljava/lang/Object; field_21563 storage -c net/minecraft/class_4706$class_4707 net/minecraft/util/SortedArraySet$Itr - m ()Z hasNext hasNext - m ()Ljava/lang/Object; next next - m ()V remove remove - f Lnet/minecraft/class_4706; field_21565 field_226185_a_ - f I field_21566 field_226186_b_ - f I field_21567 field_226187_c_ -c net/minecraft/class_4706$1 net/minecraft/util/SortedArraySet$1 -c net/minecraft/class_3540 net/minecraft/client/util/MouseSmoother - m ()V method_15428 reset - m (DD)D method_15429 smooth - f D field_15758 lastAmount - f D field_15759 remainingValue - f D field_15760 targetValue -c net/minecraft/class_3542 net/minecraft/util/IStringSerializable - m (Ljava/util/function/Supplier;Ljava/util/function/Function;)Lcom/mojang/serialization/Codec; method_28140 createEnumCodec - m ()Ljava/lang/String; method_15434 getString - m ([Ljava/lang/Enum;I)Ljava/lang/Enum; method_28143 func_233026_a_ - m (Ljava/util/function/ToIntFunction;Ljava/util/function/IntFunction;Ljava/util/function/Function;)Lcom/mojang/serialization/Codec; method_28141 createCodec - m ([Lnet/minecraft/class_3542;)Lcom/mojang/serialization/Keyable; method_28142 createKeyable -c net/minecraft/class_3542$1 net/minecraft/util/IStringSerializable$1 - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_3542;)Lcom/mojang/datafixers/util/Pair; method_28145 func_233030_a_ - m (Lnet/minecraft/class_3542;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_28144 encode - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; decode decode - m ()Ljava/lang/String; toString toString - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_3542;)Lcom/mojang/datafixers/util/Pair; method_28150 func_233035_b_ - m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; encode encode - m (Ljava/util/function/Function;Ljava/lang/String;)Lcom/mojang/serialization/DataResult; method_28148 func_233033_a_ - m (Ljava/lang/Number;)Lcom/mojang/serialization/DataResult; method_28146 func_233031_a_ - m (Ljava/lang/String;)Lcom/mojang/serialization/DataResult; method_28147 func_233032_a_ - m (Ljava/util/function/IntFunction;Ljava/lang/Number;)Lcom/mojang/serialization/DataResult; method_28149 func_233034_a_ - f Ljava/util/function/Function; field_24638 field_233029_c_ - f Ljava/util/function/IntFunction; field_24637 field_233028_b_ - f Ljava/util/function/ToIntFunction; field_24636 field_233027_a_ -c net/minecraft/class_3542$2 net/minecraft/util/IStringSerializable$2 - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/stream/Stream; keys keys - f [Lnet/minecraft/class_3542; field_24639 field_233036_a_ -c net/minecraft/class_5223 net/minecraft/util/text/TextProcessing - m (Ljava/lang/StringBuilder;ILnet/minecraft/class_2583;I)Z method_27475 func_238342_a_ - m (Ljava/lang/String;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27479 func_238346_c_ - m (Ljava/lang/String;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27478 func_238345_b_ - m (Ljava/lang/String;)Ljava/lang/String; method_27471 func_238338_a_ - m (Ljava/lang/String;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27474 func_238341_a_ - m (Ljava/lang/String;ILnet/minecraft/class_2583;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27473 func_238340_a_ - m (Lnet/minecraft/class_5224;Lnet/minecraft/class_2583;Ljava/lang/String;)Ljava/util/Optional; method_27470 func_238337_a - m (Lnet/minecraft/class_5348;Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27476 func_238343_a_ - m (Lnet/minecraft/class_2583;Lnet/minecraft/class_5224;IC)Z method_27477 func_238344_a_ - m (Ljava/lang/String;ILnet/minecraft/class_2583;Lnet/minecraft/class_5224;)Z method_27472 func_238339_a_ - f Ljava/util/Optional; field_24215 field_238336_a_ -c net/minecraft/class_4802 net/minecraft/util/TickRangeConverter - m (II)Lnet/minecraft/class_4801; method_24505 convertRange -c net/minecraft/class_3544 net/minecraft/util/StringUtils - m (I)Ljava/lang/String; method_15439 ticksToElapsedTime - m (Ljava/lang/String;)Ljava/lang/String; method_15440 stripControlCodes - m (Ljava/lang/String;)Z method_15438 isNullOrEmpty - f Ljava/util/regex/Pattern; field_15771 PATTERN_CONTROL_CODE -c net/minecraft/class_5428 net/minecraft/world/gen/feature/FeatureSpread - m ()I hashCode hashCode - m (Lnet/minecraft/class_5428;)Lcom/mojang/serialization/DataResult; method_30323 func_242261_c - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30320 func_242258_a - m (Lnet/minecraft/class_5428;)Ljava/lang/Integer; method_30324 func_242262_d - m (Ljava/lang/Object;)Z equals equals - m (I)Lnet/minecraft/class_5428; method_30314 func_242252_a - m (Lnet/minecraft/class_5428;)Ljava/lang/Integer; method_30325 func_242263_e - m (Lnet/minecraft/class_5428;)Lcom/mojang/datafixers/util/Either; method_30318 func_242256_a - m ()Ljava/lang/String; toString toString - m (Ljava/util/Random;)I method_30321 func_242259_a - m (Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_5428; method_30319 func_242257_a - m (IIILnet/minecraft/class_5428;)Lcom/mojang/serialization/DataResult; method_30317 func_242255_a - m (Lnet/minecraft/class_5428;)Lnet/minecraft/class_5428; method_30322 func_242260_b - m (III)Lcom/mojang/serialization/Codec; method_30316 func_242254_a - m (II)Lnet/minecraft/class_5428; method_30315 func_242253_a - f I field_25811 spread - f Lcom/mojang/serialization/Codec; field_25809 CODEC - f I field_25810 base -c net/minecraft/class_3545 net/minecraft/util/Tuple - m ()Ljava/lang/Object; method_15441 getB - m ()Ljava/lang/Object; method_15442 getA - f Ljava/lang/Object; field_15773 b - f Ljava/lang/Object; field_15772 a -c net/minecraft/class_3902 net/minecraft/util/Unit - m (Ljava/lang/String;)Lnet/minecraft/class_3902; valueOf valueOf - m ()[Lnet/minecraft/class_3902; values values - f [Lnet/minecraft/class_3902; field_17275 $VALUES - f Lnet/minecraft/class_3902; field_17274 INSTANCE -c net/minecraft/class_4284 net/minecraft/util/datafix/DefaultTypeReferences - m ()[Lnet/minecraft/class_4284; values values - m ()Lcom/mojang/datafixers/DSL$TypeReference; method_20329 getTypeReference - m (Ljava/lang/String;)Lnet/minecraft/class_4284; valueOf valueOf - f Lnet/minecraft/class_4284; field_19219 SAVED_DATA - f Lnet/minecraft/class_4284; field_19220 ADVANCEMENTS - f Lnet/minecraft/class_4284; field_24640 WORLD_GEN_SETTINGS - f Lnet/minecraft/class_4284; field_19221 POI_CHUNK - f Lnet/minecraft/class_4284; field_19212 LEVEL - f Lnet/minecraft/class_4284; field_19214 CHUNK - f Lcom/mojang/datafixers/DSL$TypeReference; field_19222 reference - f Lnet/minecraft/class_4284; field_19213 PLAYER - f Lnet/minecraft/class_4284; field_19215 HOTBAR - f [Lnet/minecraft/class_4284; field_19223 $VALUES - f Lnet/minecraft/class_4284; field_19216 OPTIONS - f Lnet/minecraft/class_4284; field_19218 STATS - f Lnet/minecraft/class_4284; field_19217 STRUCTURE -c net/minecraft/class_3549 net/minecraft/util/WeightedRandom - m (Ljava/util/List;I)Lnet/minecraft/class_3549$class_3550; method_15447 getRandomItem - m (Ljava/util/Random;Ljava/util/List;)Lnet/minecraft/class_3549$class_3550; method_15446 getRandomItem - m (Ljava/util/List;)I method_15445 getTotalWeight - m (Ljava/util/Random;Ljava/util/List;I)Lnet/minecraft/class_3549$class_3550; method_15444 getRandomItem -c net/minecraft/class_3549$class_3550 net/minecraft/util/WeightedRandom$Item - f I field_15774 itemWeight -c net/minecraft/class_5298 net/minecraft/util/ArbitraryBitLengthIntArray - m ()[J method_28151 func_233047_a_ - m (I)I method_28152 func_233048_a_ - m ()I method_28154 func_233050_b_ - m (II)V method_28153 func_233049_a_ - f I field_24642 field_233044_b_ - f I field_24644 field_233046_d_ - f [J field_24641 field_233043_a_ - f J field_24643 field_233045_c_ -c net/minecraft/class_3551 net/minecraft/util/datafix/DataFixesManager - m (Ljava/lang/String;)Ljava/lang/String; method_15459 func_207101_r - m (Ljava/lang/String;)Ljava/lang/String; method_15455 func_207106_s - m (Lcom/mojang/datafixers/DataFixerBuilder;)V method_15451 addFixers - m (Ljava/util/Map;Ljava/lang/String;)Ljava/lang/String; method_30071 func_241302_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_15449 func_207111_t - m ()Lcom/mojang/datafixers/DataFixer; method_15471 createFixer - m (Ljava/lang/String;Ljava/lang/String;)Ljava/util/function/UnaryOperator; method_30068 rename - m ()Lcom/mojang/datafixers/DataFixer; method_15450 getDataFixer - m (Ljava/util/Map;)Ljava/util/function/UnaryOperator; method_30070 rename - m (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; method_30069 func_241300_a_ - f Lcom/mojang/datafixers/DataFixer; field_15777 DATA_FIXER - f Ljava/util/function/BiFunction; field_15776 SCHEMA_FACTORY - f Ljava/util/function/BiFunction; field_15775 NAMESPACED_SCHEMA_FACTORY -c net/minecraft/class_3551$2 net/minecraft/util/datafix/DataFixesManager$2 -c net/minecraft/class_3551$1 net/minecraft/util/datafix/DataFixesManager$1 -c net/minecraft/class_4958 net/minecraft/util/datafix/fixes/AbstractUUIDFix - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Optional; method_26013 func_233064_c_ - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Ljava/util/Optional; method_26005 func_233057_a_ - m (Ljava/util/function/Function;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26010 func_233061_a_ - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Optional; method_26011 func_233062_b_ - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Optional; method_26006 func_233058_a_ - m (Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_26002 func_233054_a_ - m (Lcom/mojang/datafixers/Typed;Ljava/lang/String;Ljava/util/function/Function;)Lcom/mojang/datafixers/Typed; method_26009 func_233053_a_ - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Optional; method_26014 func_233065_d_ - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28157 func_233060_a_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_28155 func_233056_a_ - m (Lcom/mojang/serialization/Dynamic;JJ)Ljava/util/Optional; method_26003 func_233055_a_ - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28158 func_233063_b_ - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28156 func_233059_a_ - f Lcom/mojang/datafixers/DSL$TypeReference; field_23121 reference - f Lorg/apache/logging/log4j/Logger; field_23120 LOGGER -c net/minecraft/class_3555 net/minecraft/util/datafix/fixes/AdvancementRenamer1501 - m (Ljava/lang/String;)Ljava/lang/String; method_24238 func_230065_a_ - f Ljava/util/Map; field_15788 field_230064_a_ -c net/minecraft/class_3553 net/minecraft/util/datafix/fixes/AddNewChoices - m (Ljava/lang/String;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;)Lcom/mojang/datafixers/TypeRewriteRule; method_15476 cap - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15475 func_206291_a - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_15477 func_209687_a_ - f Lcom/mojang/datafixers/DSL$TypeReference; field_15780 type - f Ljava/lang/String; field_15779 name -c net/minecraft/class_5129 net/minecraft/util/datafix/fixes/AttributesFix - m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_28162 func_233075_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28163 func_233077_b_ - m (Ljava/lang/String;)Ljava/lang/String; method_26811 func_233074_a_ - m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_28164 func_233078_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26808 func_233073_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28166 func_233080_d_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26810 func_233072_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28167 func_233081_e_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26814 func_233076_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28165 func_233079_c_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28169 func_233083_g_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28168 func_233082_f_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26809 func_233071_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - f Ljava/util/Map; field_23695 field_233070_a_ -c net/minecraft/class_4744 net/minecraft/util/datafix/fixes/AdvancementRenamer - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24242 func_230071_a_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_28160 func_233068_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28161 func_233069_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28159 func_230068_a_ - f Ljava/util/function/Function; field_21815 field_230067_b_ - f Ljava/lang/String; field_21814 field_230066_a_ -c net/minecraft/class_3559 net/minecraft/util/datafix/fixes/BedItemColor - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15521 func_207435_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule -c net/minecraft/class_3557 net/minecraft/util/datafix/fixes/AddBedTileEntity - m (Lcom/mojang/serialization/Dynamic;)Ljava/lang/Integer; method_28170 func_233084_a_ - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28171 func_233085_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m ()Ljava/lang/IllegalStateException; method_15507 func_209694_f - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/templates/List$ListType;)Lcom/mojang/datafixers/TypeRewriteRule; method_15506 cap - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15511 func_209696_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15510 func_207434_a -c net/minecraft/class_3561 net/minecraft/util/datafix/fixes/BiomeRenames - f Ljava/util/Map; field_15810 field_210919_a -c net/minecraft/class_4619 net/minecraft/util/datafix/fixes/RenameBeehivePointOfInterest -c net/minecraft/class_3564 net/minecraft/util/datafix/fixes/BlockEntityBannerColor - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28179 func_209642_e_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28178 func_209644_d_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28176 func_209641_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28177 func_210561_c_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15546 fixTag - m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_15545 func_209639_a -c net/minecraft/class_5196 net/minecraft/util/datafix/fixes/BitStorageAlignFix - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27294 func_233090_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28173 func_233094_a_ - m (II[J)[J method_27288 func_233086_a_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27295 func_233091_a_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28175 func_233100_b_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28174 func_233096_a_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27774 func_233089_a_ - m (ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28172 func_233087_a_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27293 func_233099_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_27769 func_233093_a_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;II)Lcom/mojang/serialization/Dynamic; method_27772 func_233097_a_ - m (Ljava/util/List;)Ljava/lang/Integer; method_27296 func_233098_a_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27292 func_233088_a_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_27773 func_233095_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27775 func_233092_a_ -c net/minecraft/class_3567 net/minecraft/util/datafix/fixes/CustomNameStringToComponentFixTileEntity - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15555 func_207790_a - m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28180 func_207789_a_ -c net/minecraft/class_3566 net/minecraft/util/datafix/fixes/PistonPushedBlock - m ()Ljava/lang/IllegalStateException; method_15553 func_206377_f - m ()Ljava/lang/IllegalStateException; method_15554 func_206378_g -c net/minecraft/class_3573 net/minecraft/util/datafix/fixes/JukeboxRecordItem - m ()Ljava/lang/IllegalStateException; method_15578 func_206379_f -c net/minecraft/class_3571 net/minecraft/util/datafix/fixes/TileEntityId - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15576 func_206301_a - m (Ljava/lang/String;)Ljava/lang/String; method_15577 func_206302_a - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28181 func_209700_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Ljava/util/HashMap;)V method_15575 func_209293_a - f Ljava/util/Map; field_15824 OLD_TO_NEW_ID_MAP -c net/minecraft/class_3575 net/minecraft/util/datafix/fixes/ShulkerBoxTileColor - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15580 func_207420_a_ -c net/minecraft/class_3574 net/minecraft/util/datafix/fixes/BlockEntityKeepPacked - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15579 fixTag -c net/minecraft/class_4959 net/minecraft/util/datafix/fixes/BlockEntityUUID - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26017 func_233115_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26018 func_233116_c_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26015 func_233114_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26016 func_233113_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26019 func_233117_d_ -c net/minecraft/class_3577 net/minecraft/util/datafix/fixes/SignStrictJSON - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Lcom/mojang/serialization/Dynamic; method_15582 updateLine - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15581 func_206380_a_ - f Lcom/google/gson/Gson; field_15827 GSON -c net/minecraft/class_3577$1 net/minecraft/util/datafix/fixes/SignStrictJSON$1 - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/class_5250; method_15583 deserialize - m (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; deserialize deserialize -c net/minecraft/class_3579 net/minecraft/util/datafix/fixes/BlockRename - m (Ljava/lang/String;)Ljava/lang/String; method_15593 fixBlock - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15588 func_207439_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15592 func_209704_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15591 func_206308_a - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_15590 func_209705_a_ - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;Ljava/util/function/Function;)Lcom/mojang/datafixers/DataFix; method_15589 create - f Ljava/lang/String; field_15828 name -c net/minecraft/class_3579$1 net/minecraft/util/datafix/fixes/BlockRename$1 - f Ljava/util/function/Function; field_15829 field_206311_a -c net/minecraft/class_3578 net/minecraft/util/datafix/fixes/BlockNameFlattening - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15586 func_206303_a - m (Lcom/mojang/datafixers/util/Either;)Ljava/lang/String; method_15584 func_206304_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_15585 func_209702_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_15587 func_206305_a -c net/minecraft/class_3580 net/minecraft/util/datafix/fixes/BlockStateFlatteningMap - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15597 updateNBT - m ()V method_22426 func_226191_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_15600 updateName - m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_15595 func_209419_a - m (ILjava/lang/String;[Ljava/lang/String;)V method_15596 addEntry - m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_15601 func_209420_b - m (Ljava/lang/String;)Lcom/mojang/serialization/Dynamic; method_15598 makeDynamic - m (I)Ljava/lang/String; method_15599 updateId - m (I)Lcom/mojang/serialization/Dynamic; method_15594 getFixedNBTForID - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_15831 field_199201_c - f Lorg/apache/logging/log4j/Logger; field_15832 LOGGER - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_15833 NAME_TO_ID - f [Lcom/mojang/serialization/Dynamic; field_24646 field_226190_c_ - f [Lcom/mojang/serialization/Dynamic; field_24645 ID_TO_FIXED_NBT -c net/minecraft/class_3903 net/minecraft/util/datafix/fixes/CatTypeFix - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_17325 func_219810_a -c net/minecraft/class_3581 net/minecraft/util/datafix/fixes/BlockStateFlattenStructures - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15602 func_207440_a -c net/minecraft/class_4541 net/minecraft/util/datafix/fixes/BiomeIdFix - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_22373 func_226192_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_22375 func_226194_a_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_22374 func_226193_a_ -c net/minecraft/class_3582 net/minecraft/util/datafix/fixes/ChunkPaletteFormat - m ()Lcom/mojang/serialization/Dynamic; method_15618 func_233136_n_ - m (Ljava/util/HashMap;)V method_15631 func_209306_f - m (Ljava/util/HashMap;)V method_15607 func_209298_d - m ()Lcom/mojang/serialization/Dynamic; method_15620 func_233138_p_ - m (Ljava/util/Map;ILjava/lang/String;)V method_15636 addBeds - m ()Lcom/mojang/serialization/Dynamic; method_15628 func_233140_r_ - m ()Lcom/mojang/serialization/Dynamic; method_15632 func_233127_a_ - m ()Ljava/util/Map; method_15609 func_208448_m - m (Ljava/util/Map;Ljava/lang/String;I)V method_15611 mapDoor - m ()Lcom/mojang/serialization/Dynamic; method_15629 func_233132_d_ - m ()Ljava/util/Map; method_15623 func_208447_q - m ()Ljava/util/BitSet; method_15630 access$200 - m ()Lcom/mojang/serialization/Dynamic; method_15614 func_233134_f_ - m ()Lorg/apache/logging/log4j/Logger; method_15621 func_209709_y - m ()Lcom/mojang/serialization/Dynamic; method_15617 func_233135_j_ - m (Ljava/util/Map;ILjava/lang/String;Ljava/lang/String;)V method_15610 mapSkull - m (Ljava/util/HashMap;)V method_15626 func_209304_b - m (Ljava/util/HashMap;)V method_15639 func_209308_e - m ()Lcom/mojang/serialization/Dynamic; method_15619 func_233137_o_ - m ()Lcom/mojang/serialization/Dynamic; method_15625 func_233139_q_ - m (Ljava/util/Map;ILjava/lang/String;)V method_15605 addBanners - m ()Lcom/mojang/serialization/Dynamic; method_15624 func_233141_s_ - m ()Ljava/util/Map; method_15622 func_209720_l - m (ZZZZ)I method_15615 getSideMask - m ()Ljava/util/Map; method_15606 func_208438_n - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15633 fix - m ()Lcom/mojang/serialization/Dynamic; method_15627 func_233133_e_ - m ()Ljava/util/Map; method_15612 func_209716_p - m ()Ljava/util/Map; method_15634 func_208450_r - m ()Ljava/util/BitSet; method_15604 access$100 - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Ljava/lang/String; method_15637 getName - m (Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap;)V method_15603 func_209296_a - m (Ljava/util/HashMap;)V method_15613 func_209302_c - m (Ljava/util/HashMap;)V method_15608 func_209299_a - m (Lnet/minecraft/class_3513;Lcom/mojang/serialization/Dynamic;)I method_15616 idFor - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Ljava/lang/String; method_15638 getProperty - f Lcom/mojang/serialization/Dynamic; field_15843 AIR - f Lcom/mojang/serialization/Dynamic; field_15840 PUMPKIN - f Lcom/mojang/serialization/Dynamic; field_15838 SNOWY_GRASS - f Lcom/mojang/serialization/Dynamic; field_15850 SNOWY_MYCELIUM - f Lcom/mojang/serialization/Dynamic; field_15848 UPPER_LILAC - f Ljava/util/Map; field_15853 SKULL_MAP - f Lcom/mojang/serialization/Dynamic; field_15845 UPPER_LARGE_FERN - f Ljava/util/Map; field_15846 NOTE_BLOCK_MAP - f Lcom/mojang/serialization/Dynamic; field_15847 UPPER_PEONY - f Ljava/util/Map; field_15849 BED_BLOCK_MAP - f Ljava/util/BitSet; field_15842 VIRTUAL - f Lcom/mojang/serialization/Dynamic; field_15852 SNOWY_PODZOL - f Ljava/util/Map; field_15841 FLOWER_POT_MAP - f Lcom/mojang/serialization/Dynamic; field_15839 UPPER_SUNFLOWER - f Ljava/util/BitSet; field_15854 FIX - f Ljava/util/Map; field_15836 DOOR_MAP - f Lorg/apache/logging/log4j/Logger; field_15844 LOGGER - f Lcom/mojang/serialization/Dynamic; field_15834 UPPER_TALL_GRASS - f Lcom/mojang/serialization/Dynamic; field_15835 UPPER_ROSE_BUSH - f Ljava/util/Map; field_15851 BANNER_BLOCK_MAP - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_15837 DYE_COLOR_MAP -c net/minecraft/class_3582$class_3588 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$UpgradeChunk - m (I)Lcom/mojang/serialization/Dynamic; method_15660 removeTileEntity - m (Lcom/mojang/serialization/Dynamic;)V method_15656 func_210065_a_ - m (I)Lcom/mojang/serialization/Dynamic; method_15655 getTileEntity - m (Ljava/util/stream/Stream;)V method_15661 func_210062_a - m (I)Lcom/mojang/serialization/Dynamic; method_15662 getBlock - m (ILnet/minecraft/class_3582$class_3584;)I method_15663 relative - m (Ljava/util/stream/Stream;)V method_15659 func_210061_b - m ()Lcom/mojang/serialization/Dynamic; method_15664 write - m (Lcom/mojang/serialization/Dynamic;)V method_15665 func_233150_b_ - m (ILcom/mojang/serialization/Dynamic;)V method_15657 setBlock - m (I)Lnet/minecraft/class_3582$class_3587; method_15658 getSection - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_15887 tileEntities - f Lcom/mojang/serialization/Dynamic; field_15886 level - f [Lnet/minecraft/class_3582$class_3587; field_15888 sections - f I field_15883 z - f I field_15884 x - f I field_15885 sides -c net/minecraft/class_3582$class_3587 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$Section - m (ILcom/mojang/serialization/Dynamic;)V method_15647 setBlock - m ()Lcom/mojang/serialization/Dynamic; method_15651 write - m (Ljava/nio/ByteBuffer;)Lnet/minecraft/class_3582$class_3583; method_15646 func_210055_b - m (Ljava/nio/ByteBuffer;)Lnet/minecraft/class_3582$class_3583; method_15654 func_210052_a - m (Lnet/minecraft/class_3582$class_3587;)Lit/unimi/dsi/fastutil/ints/IntList; method_15653 func_210057_b - m (I)Lcom/mojang/serialization/Dynamic; method_15649 getBlock - m (Lnet/minecraft/class_3582$class_3587;)Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; method_15648 func_210054_a - m (II)V method_15650 addFix - m (I)I method_15652 upgrade - f [I field_15877 buffer - f Z field_15876 hasData - f Lit/unimi/dsi/fastutil/ints/IntList; field_15874 update - f Lnet/minecraft/class_3513; field_15882 palette - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_15881 toFix - f Ljava/util/List; field_15880 listTag - f Ljava/util/Set; field_15875 seen - f Lcom/mojang/serialization/Dynamic; field_15878 section - f I field_15879 y -c net/minecraft/class_3582$class_3584 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$Direction - m ()Lnet/minecraft/class_3582$class_3584$class_3585; method_15644 getAxis - m ()Lnet/minecraft/class_3582$class_3584$class_3586; method_15643 getAxisDirection - m (Ljava/lang/String;)Lnet/minecraft/class_3582$class_3584; valueOf valueOf - m ()[Lnet/minecraft/class_3582$class_3584; values values - f Lnet/minecraft/class_3582$class_3584; field_15862 SOUTH - f Lnet/minecraft/class_3582$class_3584; field_15863 UP - f Lnet/minecraft/class_3582$class_3584; field_15859 NORTH - f Lnet/minecraft/class_3582$class_3584; field_15860 EAST - f [Lnet/minecraft/class_3582$class_3584; field_15865 $VALUES - f Lnet/minecraft/class_3582$class_3584; field_15857 WEST - f Lnet/minecraft/class_3582$class_3584; field_15858 DOWN - f Lnet/minecraft/class_3582$class_3584$class_3586; field_15861 axisDirection - f Lnet/minecraft/class_3582$class_3584$class_3585; field_15864 axis -c net/minecraft/class_3582$class_3584$class_3586 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$Direction$Offset - m (Ljava/lang/String;)Lnet/minecraft/class_3582$class_3584$class_3586; valueOf valueOf - m ()[Lnet/minecraft/class_3582$class_3584$class_3586; values values - m ()I method_15645 getStep - f I field_15872 step - f Lnet/minecraft/class_3582$class_3584$class_3586; field_15873 POSITIVE - f Lnet/minecraft/class_3582$class_3584$class_3586; field_15870 NEGATIVE - f [Lnet/minecraft/class_3582$class_3584$class_3586; field_15871 $VALUES -c net/minecraft/class_3582$class_3584$class_3585 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$Direction$Axis - m ()[Lnet/minecraft/class_3582$class_3584$class_3585; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3582$class_3584$class_3585; valueOf valueOf - f Lnet/minecraft/class_3582$class_3584$class_3585; field_15867 Z - f Lnet/minecraft/class_3582$class_3584$class_3585; field_15866 Y - f [Lnet/minecraft/class_3582$class_3584$class_3585; field_15868 $VALUES - f Lnet/minecraft/class_3582$class_3584$class_3585; field_15869 X -c net/minecraft/class_3582$class_3583 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$NibbleArray - m (III)I method_15640 get - m (I)I method_15642 getPosition - m (I)Z method_15641 isFirst - f [B field_15855 data -c net/minecraft/class_3582$1 net/minecraft/util/datafix/fixes/ChunkPaletteFormat$1 - f [I field_15856 field_210936_a -c net/minecraft/class_3755 net/minecraft/util/datafix/fixes/ChunkLightRemoveFix - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_16440 func_219820_a_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_16441 func_219821_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_16442 func_219822_a -c net/minecraft/class_3788 net/minecraft/util/datafix/fixes/ChunkStatusFix2 - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_16642 func_219823_a - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_16643 func_219824_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - f Ljava/util/Map; field_16691 field_219825_a -c net/minecraft/class_3589 net/minecraft/util/datafix/fixes/ChunkStatusFix - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15667 func_219827_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15666 func_219826_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule -c net/minecraft/class_3591 net/minecraft/util/datafix/fixes/ChunkGenStatus - m ()Ljava/lang/IllegalStateException; method_15673 func_233154_a_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15672 func_207915_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (I)Lit/unimi/dsi/fastutil/shorts/ShortArrayList; method_28182 func_211428_a_ - m (III)S method_15675 packOffsetCoordinates - m (Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_28184 func_233159_a_ - m (Lcom/mojang/serialization/Dynamic;Lit/unimi/dsi/fastutil/shorts/ShortList;)Lcom/mojang/serialization/Dynamic; method_28185 func_233160_a_ - m (Lcom/mojang/datafixers/Typed;)Ljava/util/Optional; method_28183 func_233158_a_ - m (Ljava/util/List;Lcom/mojang/serialization/Dynamic;)V method_28186 func_233161_a_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15676 func_209732_a_ -c net/minecraft/class_3590 net/minecraft/util/datafix/fixes/ChunkStructuresTemplateRenameFix - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15669 func_207911_a - m (Lcom/mojang/datafixers/Typed;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15670 func_207909_a_ - m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15668 func_207908_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15671 func_233153_a_ - f Lcom/google/common/collect/ImmutableMap; field_15889 field_207912_a -c net/minecraft/class_3593 net/minecraft/util/datafix/fixes/DyeRenameMap - f Ljava/util/Map; field_15890 field_219828_a -c net/minecraft/class_3592 net/minecraft/util/datafix/fixes/ColorlessShulkerEntityFix - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15678 func_207421_a_ -c net/minecraft/class_3595 net/minecraft/util/datafix/fixes/BlockStateFlatternEntities - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15680 func_211429_c - m (Ljava/lang/Integer;)Ljava/lang/Integer; method_15688 func_211435_a - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/util/Unit;)Ljava/lang/Integer; method_15694 func_211441_a_ - m (Lcom/mojang/datafixers/Typed;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/mojang/datafixers/Typed; method_15687 updateBlockToBlockState - m (Ljava/util/HashMap;)V method_15683 func_209311_a - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15684 func_211432_a_ - m (Ljava/lang/Integer;)Ljava/lang/Integer; method_15689 func_211436_b - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15685 func_211433_b - m (Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/Function;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15691 func_211438_a - m (Lcom/mojang/datafixers/util/Pair;)Ljava/lang/Integer; method_15693 func_211440_a - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15695 updateFallingBlock - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15692 func_211439_a - m (Ljava/lang/String;)I method_15686 getBlockId - m (Lcom/mojang/datafixers/Typed;Ljava/lang/String;Ljava/util/function/Function;)Lcom/mojang/datafixers/Typed; method_15682 updateEntity - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Either; method_15690 func_211437_a_ - m (Lcom/mojang/serialization/Dynamic;)Ljava/lang/Integer; method_15681 func_233164_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15696 func_211443_d - f Ljava/util/Map; field_15891 MAP -c net/minecraft/class_3594 net/minecraft/util/datafix/fixes/ArmorStandSilent - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15679 fixTag -c net/minecraft/class_3596 net/minecraft/util/datafix/fixes/EntityCodSalmonFix - f Ljava/util/Map; field_15892 field_207460_a - f Ljava/util/Map; field_15893 field_209759_b -c net/minecraft/class_3725 net/minecraft/util/datafix/fixes/EntityCatSplitFix -c net/minecraft/class_3598 net/minecraft/util/datafix/fixes/ElderGuardianSplit -c net/minecraft/class_3597 net/minecraft/util/datafix/fixes/CustomNameStringToComponentEntity - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15697 fixTagCustomName - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15698 func_207792_a - m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15699 func_207791_a_ -c net/minecraft/class_3600 net/minecraft/util/datafix/fixes/EntityHealth - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15705 func_207449_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15704 fixTag - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - f Ljava/util/Set; field_15894 ENTITY_LIST -c net/minecraft/class_3599 net/minecraft/util/datafix/fixes/EntityArmorAndHeld - m ()Ljava/lang/IllegalStateException; method_15702 func_209741_f - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15701 func_233170_a_ - m (Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/TypeRewriteRule; method_15703 cap - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15700 func_207448_a -c net/minecraft/class_3602 net/minecraft/util/datafix/fixes/HorseSplit - m ()Ljava/lang/IllegalStateException; method_15706 func_209152_g -c net/minecraft/class_3601 net/minecraft/util/datafix/fixes/HorseSaddle -c net/minecraft/class_3604 net/minecraft/util/datafix/fixes/EntityItemFrameFacing - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15711 fixTag - m (B)B method_15712 direction2dTo3d -c net/minecraft/class_3603 net/minecraft/util/datafix/fixes/EntityId - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15709 func_206326_a - m (Ljava/util/HashMap;)V method_15708 func_209312_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_15707 func_209744_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_15710 func_206327_a - f Ljava/util/Map; field_15895 OLD_TO_NEW_ID_MAP -c net/minecraft/class_3606 net/minecraft/util/datafix/fixes/PaintingDirection - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15721 func_207457_b_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15717 func_206332_b - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15716 func_206331_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15718 func_207455_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15720 func_206330_b - m (Lcom/mojang/serialization/Dynamic;ZZ)Lcom/mojang/serialization/Dynamic; method_15719 doFix - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_15722 func_206329_a - f [[I field_15897 DIRECTIONS -c net/minecraft/class_3605 net/minecraft/util/datafix/fixes/MinecartEntityTypes - m ()Ljava/lang/IllegalStateException; method_15713 func_233174_a_ - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_28187 func_233177_a_ - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_15714 func_209746_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_15715 func_206328_a_ - f Ljava/util/List; field_15896 MINECART_TYPE_LIST -c net/minecraft/class_4860 net/minecraft/util/datafix/fixes/ProjectileOwner - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24904 func_233188_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24905 func_233189_c_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24906 func_233190_d_ - m (Lcom/mojang/datafixers/Typed;Ljava/lang/String;Ljava/util/function/Function;)Lcom/mojang/datafixers/Typed; method_24902 func_233184_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24901 func_233183_a_ - m (Lcom/mojang/serialization/Dynamic;JJ)Lcom/mojang/serialization/Dynamic; method_24900 func_233186_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24899 func_233185_a_ - m (Ljava/util/function/Function;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24903 func_233187_a_ - m (JJ)[I method_24898 func_233182_a_ -c net/minecraft/class_3607 net/minecraft/util/datafix/fixes/PaintingMotive - m (Ljava/util/HashMap;)V method_15724 func_201153_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_15723 fixTag - f Ljava/util/Map; field_15898 MAP -c net/minecraft/class_3983 net/minecraft/util/datafix/fixes/EntityRavagerRenameFix - f Ljava/util/Map; field_17712 field_219829_a -c net/minecraft/class_3608 net/minecraft/util/datafix/fixes/PufferfishRename - f Ljava/util/Map; field_15899 field_207461_a -c net/minecraft/class_1165 net/minecraft/util/datafix/fixes/RedundantChanceTags - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_4972 func_210996_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28188 func_206334_c_ - m (ILjava/util/List;)Ljava/lang/Boolean; method_30072 func_241304_a_ - m (Ljava/lang/Float;)Z method_30074 func_241307_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/OptionalDynamic;I)Z method_30073 func_241306_a_ - f Lcom/mojang/serialization/Codec; field_25695 field_241303_a_ -c net/minecraft/class_1166 net/minecraft/util/datafix/fixes/RidingToPassengers - m ()Ljava/lang/IllegalStateException; method_4975 func_206342_f - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Either; method_4979 func_208037_a_ - m (Lcom/mojang/datafixers/schemas/Schema;Lcom/mojang/datafixers/schemas/Schema;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/TypeRewriteRule; method_4978 cap - m ()Ljava/lang/IllegalStateException; method_4976 func_208040_j - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_4977 func_208042_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m ()Ljava/lang/IllegalStateException; method_4974 func_208039_h - m ()Ljava/lang/IllegalStateException; method_4973 func_208041_g - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_4980 func_209760_a_ -c net/minecraft/class_1167 net/minecraft/util/datafix/fixes/EntityRename - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_4984 func_209150_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_4981 func_209755_a_ - m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/Typed; method_4983 getEntity - m (Ljava/lang/String;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/util/Pair; method_4982 fix - f Ljava/lang/String; field_5670 name -c net/minecraft/class_5277 net/minecraft/util/datafix/fixes/ShulkerRotation - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_27960 func_233201_a_ - m (Lcom/mojang/serialization/Dynamic;)Ljava/lang/Double; method_27961 func_233202_b_ -c net/minecraft/class_1169 net/minecraft/util/datafix/fixes/ShulkerBoxEntityColor - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4985 fixTag -c net/minecraft/class_1171 net/minecraft/util/datafix/fixes/StringToUUID - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4986 func_206345_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_4987 func_206344_a -c net/minecraft/class_1168 net/minecraft/util/datafix/fixes/SkeletonSplit -c net/minecraft/class_1173 net/minecraft/util/datafix/fixes/TippedArrow -c net/minecraft/class_1170 net/minecraft/util/datafix/fixes/EntityRenaming1510 - f Ljava/util/Map; field_5671 ENTITY_RENAME_MAP - f Ljava/util/Map; field_5673 ITEM_RENAME_MAP - f Ljava/util/Map; field_5672 BLOCK_RENAME_MAP -c net/minecraft/class_1172 net/minecraft/util/datafix/fixes/WolfCollarColor - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4989 func_209654_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4988 fixTag -c net/minecraft/class_4960 net/minecraft/util/datafix/fixes/EntityUUID - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26024 func_233218_e_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26026 func_233220_f_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26037 func_233212_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28198 func_233237_w_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28199 func_233238_x_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26039 func_233214_c_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26022 func_233216_d_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26020 func_233211_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28196 func_233235_u_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28197 func_233236_v_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26023 func_233213_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26042 func_233232_r_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28194 func_233233_s_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28195 func_233234_t_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26038 func_233229_o_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26040 func_233230_p_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26041 func_233231_q_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28192 func_233217_d_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28191 func_233215_c_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26035 func_233227_m_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26036 func_233228_n_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28193 func_233219_e_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26032 func_233224_j_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26021 func_233210_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26033 func_233225_k_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26034 func_233226_l_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26028 func_233221_g_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26030 func_233222_h_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26031 func_233223_i_ - f Ljava/util/Set; field_23123 field_233205_d_ - f Ljava/util/Set; field_23122 field_233204_c_ - f Ljava/util/Set; field_23126 field_233208_g_ - f Ljava/util/Set; field_23125 field_233207_f_ - f Ljava/util/Set; field_23124 field_233206_e_ - f Ljava/util/Set; field_23127 field_233209_h_ -c net/minecraft/class_1174 net/minecraft/util/datafix/fixes/ZombieProfToType - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4990 fixTag - m (I)I method_4991 getVillagerProfession - f Ljava/util/Random; field_5674 RANDOM -c net/minecraft/class_1175 net/minecraft/util/datafix/fixes/ZombieSplit -c net/minecraft/class_4731 net/minecraft/util/datafix/fixes/PointOfInterestRebuild - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_24159 func_226197_a_ - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_24158 func_226196_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24157 func_226195_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24160 func_226198_b_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24162 func_226200_c_ - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_24161 func_226199_b_ -c net/minecraft/class_4846 net/minecraft/util/datafix/fixes/ZombifiedPiglinRename - f Ljava/util/Map; field_22416 field_233242_a_ -c net/minecraft/class_4976 net/minecraft/util/datafix/fixes/Gossip - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26289 func_233255_a_ - m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_26290 func_233256_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28200 func_233257_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28201 func_233258_c_ -c net/minecraft/class_4752 net/minecraft/util/datafix/fixes/FurnaceRecipes - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24312 func_233247_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24314 func_233249_a_ - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24317 func_233252_b_ - m (Ljava/util/List;ILcom/mojang/datafixers/util/Pair;)V method_24316 func_233251_a_ - m (Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/TypeRewriteRule; method_24313 func_233248_a_ - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24319 func_233254_d_ - m (Lcom/mojang/datafixers/types/Type;Ljava/util/List;ILcom/mojang/serialization/Dynamic;)V method_24315 func_233250_a_ - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24318 func_233253_c_ -c net/minecraft/class_1176 net/minecraft/util/datafix/fixes/IglooMetadataRemoval - m (Lcom/mojang/serialization/Dynamic;)Z method_4997 isIglooPiece - m (Ljava/util/stream/Stream;)Ljava/lang/Boolean; method_4995 func_211928_b - m (Lcom/mojang/serialization/Dynamic;)Z method_4994 func_211927_d_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4993 fixTag - m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_4992 func_211925_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4996 removeIglooPieces - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule -c net/minecraft/class_1177 net/minecraft/util/datafix/fixes/HeightmapRenamingFix - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5000 func_207307_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_4999 func_207306_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_4998 fix -c net/minecraft/class_1178 net/minecraft/util/datafix/fixes/CustomNameStringToComponentItem - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5003 func_207469_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5002 func_207467_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5001 fixTag -c net/minecraft/class_1179 net/minecraft/util/datafix/fixes/BannerItemColor - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5004 func_207466_a -c net/minecraft/class_1180 net/minecraft/util/datafix/fixes/ItemLoreComponentizeFix - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28203 func_219833_c_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5011 func_219836_a - m (Ljava/lang/String;)Ljava/lang/String; method_5012 func_219837_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28204 func_219834_d_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5007 func_219832_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5006 func_219831_a_ - m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_5005 func_219830_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28202 func_219835_b_ -c net/minecraft/class_1181 net/minecraft/util/datafix/fixes/ItemIntIDToString - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5017 func_207472_a - m (Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap;)V method_5015 func_207470_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5013 func_206349_a - m (Ljava/lang/Integer;)Lcom/mojang/datafixers/util/Pair; method_5016 func_207473_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/util/Either;)Lcom/mojang/datafixers/util/Pair; method_5014 func_206350_a - m (I)Ljava/lang/String; method_5018 getItem - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_5675 ID_MAP -c net/minecraft/class_1182 net/minecraft/util/datafix/fixes/ItemRename - m (Ljava/lang/String;)Ljava/lang/String; method_5022 fixItem - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;Ljava/util/function/Function;)Lcom/mojang/datafixers/DataFix; method_5019 create - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5021 func_206354_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_5020 func_211012_a_ - f Ljava/lang/String; field_5676 name -c net/minecraft/class_1182$1 net/minecraft/util/datafix/fixes/ItemRename$1 - f Ljava/util/function/Function; field_5677 field_206357_a -c net/minecraft/class_1183 net/minecraft/util/datafix/fixes/PotionItems - m ([Ljava/lang/String;)V method_5023 func_209316_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5024 func_206351_a - f [Ljava/lang/String; field_5678 POTION_IDS -c net/minecraft/class_1185 net/minecraft/util/datafix/fixes/ShulkerBoxItemColor - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5031 func_206358_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - f [Ljava/lang/String; field_5680 NAMES_BY_COLOR -c net/minecraft/class_1187 net/minecraft/util/datafix/fixes/ItemStackEnchantmentFix - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5036 func_208045_a - m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_5034 func_209623_a - m (Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap;)V method_5033 func_208043_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5035 fixTag - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28207 func_209624_c_ - m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_5037 func_209626_b - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28206 func_209625_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28208 func_209628_d_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5041 func_208046_a - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_5681 field_208047_a -c net/minecraft/class_1184 net/minecraft/util/datafix/fixes/SpawnEggNames - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Ljava/util/Optional; method_5030 func_207482_b - m ()Ljava/lang/IllegalStateException; method_5026 func_233270_a_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Ljava/util/Optional; method_5028 func_207481_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Ljava/util/Optional; method_5025 func_207479_c - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_28205 func_233272_a_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5027 func_206359_a_ - m ([Ljava/lang/String;)V method_5029 func_209278_a - f [Ljava/lang/String; field_5679 ENTITY_IDS -c net/minecraft/class_1189 net/minecraft/util/datafix/fixes/ItemSpawnEggSplit - m (Ljava/util/HashMap;)V method_5047 func_209279_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5046 func_206361_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - f Ljava/util/Map; field_5685 field_199421_a -c net/minecraft/class_1186 net/minecraft/util/datafix/fixes/ItemFilledMapMetadata - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5032 func_206360_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule -c net/minecraft/class_4961 net/minecraft/util/datafix/fixes/ItemStackUUID - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26053 func_233284_d_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26293 func_233281_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26294 func_233277_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26299 func_233285_e_ - m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26296 func_233278_a_ - m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26295 func_233279_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26298 func_233283_c_ - m (Lcom/mojang/datafixers/util/Pair;)Ljava/lang/Boolean; method_26051 func_233280_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26297 func_233282_b_ -c net/minecraft/class_1188 net/minecraft/util/datafix/fixes/ItemStackDataFlattening - m (Ljava/lang/String;)Ljava/lang/String; method_5045 func_199926_a - m (Ljava/lang/String;I)Ljava/lang/String; method_5042 updateItem - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Ljava/util/HashMap;)V method_5043 func_209282_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5044 func_206362_a - f Ljava/util/Map; field_5684 field_199176_a - f Ljava/util/Set; field_5683 field_199177_b - f Ljava/util/Set; field_5682 field_199178_c -c net/minecraft/class_1194 net/minecraft/util/datafix/fixes/BookPagesStrictJSON - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5088 func_207417_a - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5089 func_212821_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5086 func_207415_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5085 fixTag - m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_5084 func_209630_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5087 func_209631_b_ -c net/minecraft/class_1190 net/minecraft/util/datafix/fixes/PotionWater - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5048 func_206363_a -c net/minecraft/class_4978 net/minecraft/util/datafix/fixes/JigsawRotation - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26303 func_233293_b_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26302 func_233291_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26301 func_233292_a_ - f Ljava/util/Map; field_23213 field_233290_a_ -c net/minecraft/class_4977 net/minecraft/util/datafix/fixes/JigsawProperties - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26300 func_233289_a_ -c net/minecraft/class_1196 net/minecraft/util/datafix/fixes/LevelDataGeneratorOptionsFix - m (Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair; method_5099 getLayerInfoFromString - m ()Ljava/lang/IllegalStateException; method_5097 func_233299_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Ljava/lang/String;)Ljava/util/List; method_5103 getLayersInfoFromString - m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/util/Pair;)Ljava/lang/Object; method_5098 func_210547_a_ - m (Lcom/mojang/serialization/DynamicOps;Ljava/util/Map$Entry;)Lcom/mojang/datafixers/util/Pair; method_28210 func_210551_b_ - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5096 func_210545_a_ - m (Lcom/mojang/serialization/DynamicOps;Ljava/util/Map$Entry;)Lcom/mojang/datafixers/util/Pair; method_5095 func_210544_a_ - m (Ljava/util/HashMap;)V method_5101 func_210550_a - m (Ljava/lang/String;Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_5100 convert - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_28209 func_233301_a_ - f Ljava/util/Map; field_5702 field_210553_a -c net/minecraft/class_1191 net/minecraft/util/datafix/fixes/LeavesFix - m (I)I method_5062 getY - m (Lcom/mojang/datafixers/OpticFinder;[ILcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5063 func_208415_a - m (I)I method_5052 getX - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5054 func_208420_a - m (Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;)V method_5055 func_208417_a - m (Lcom/mojang/datafixers/Typed;)Lnet/minecraft/class_1191$class_1192; method_5057 func_212527_a - m ()Ljava/util/Set; method_5053 func_212526_b - m ([ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5059 func_208419_a_ - m (Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5058 func_208413_a - m (Lnet/minecraft/class_1191$class_1192;)Lnet/minecraft/class_1191$class_1192; method_5049 func_208410_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5056 func_208422_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (ZZZZ)I method_5061 getSideMask - m ()Lit/unimi/dsi/fastutil/objects/Object2IntMap; method_5060 func_212528_a - m (III)I method_5051 getIndex - m (I)I method_5050 getZ - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_5688 LEAVES - f [[I field_5687 DIRECTIONS - f Ljava/util/Set; field_5686 LOGS -c net/minecraft/class_1191$class_1193 net/minecraft/util/datafix/fixes/LeavesFix$Section - m ()I method_5077 getIndex - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5083 write - m (Ljava/util/List;)Ljava/util/List; method_5081 func_208463_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5080 func_212510_c_ - m (Lcom/mojang/serialization/Dynamic;)V method_5074 func_212507_a - m ()Z method_5076 func_212508_a - m ()Z method_5079 isSkippable - m (Ljava/lang/String;ZI)I method_5082 getStateId - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/datafixers/util/Pair; method_5078 func_212509_b_ - m (I)I method_5075 getBlock - f Ljava/util/List; field_5692 palette - f Lnet/minecraft/class_5298; field_5696 storage - f Lcom/mojang/datafixers/OpticFinder; field_5693 paletteFinder - f Lcom/mojang/datafixers/types/Type; field_5695 blockStateType - f I field_5694 index -c net/minecraft/class_1191$class_1192 net/minecraft/util/datafix/fixes/LeavesFix$LeavesSection - m (I)Z method_5068 isLog - m (I)Z method_5071 isLeaf - m (III)V method_5070 setDistance - m (I)I method_5065 getDistance - m (Lnet/minecraft/class_1191$class_1192;III)V method_5066 func_212522_a - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;ZI)Lcom/mojang/serialization/Dynamic; method_5072 makeLeafTag - m (Lnet/minecraft/class_1191$class_1192;I)I method_5069 func_212515_a - f Lit/unimi/dsi/fastutil/ints/Int2IntMap; field_5690 field_212525_h - f Lit/unimi/dsi/fastutil/ints/IntSet; field_5689 field_212523_f - f Lit/unimi/dsi/fastutil/ints/IntSet; field_5691 field_212524_g -c net/minecraft/class_4962 net/minecraft/util/datafix/fixes/LevelUUID - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28216 func_233318_g_ - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_28213 func_233312_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28215 func_233317_f_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28217 func_233319_h_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26055 func_233308_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26061 func_233315_d_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26058 func_233311_b_ - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_28211 func_233309_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28214 func_233316_e_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28221 func_233323_l_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26060 func_233314_c_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_26057 func_233313_b_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28212 func_233310_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28218 func_233320_i_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28220 func_233322_k_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28219 func_233321_j_ -c net/minecraft/class_1195 net/minecraft/util/datafix/fixes/BlockStateFlattenGenOptions - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5093 func_207414_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5092 func_209634_b_ - m (Ljava/lang/String;)Ljava/lang/String; method_5094 fixString - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5090 fix - m (Lcom/google/common/base/Splitter;ILjava/lang/String;)Ljava/lang/String; method_5091 func_206368_a - f Lcom/google/common/base/Splitter; field_5699 field_199183_c - f Lcom/google/common/base/Splitter; field_5701 field_199182_b - f Lcom/google/common/base/Splitter; field_5700 field_199181_a - f Lcom/google/common/base/Splitter; field_5697 field_199185_e - f Lcom/google/common/base/Splitter; field_5698 field_199184_d -c net/minecraft/class_4803 net/minecraft/util/datafix/fixes/MemoryExpiry - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24506 func_233326_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24508 func_233327_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24509 func_233328_c_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24510 func_233329_d_ - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_24507 func_233325_a_ -c net/minecraft/class_3970 net/minecraft/util/datafix/fixes/MapIdFix - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17828 func_219839_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28222 func_219838_a_ -c net/minecraft/class_1198 net/minecraft/util/datafix/fixes/SpawnerEntityTypes - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5106 fix - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5108 func_209657_b_ - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5107 func_206369_a -c net/minecraft/class_5396 net/minecraft/util/datafix/fixes/MissingDimensionFix - m (Ljava/lang/String;Lcom/mojang/datafixers/types/Type;Ljava/lang/String;Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/types/Type; method_29914 func_241313_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Ljava/lang/String;Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/types/Type; method_29915 func_241314_b_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/types/templates/CompoundList$CompoundListType;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_29910 func_241309_a_ - m (Lcom/mojang/datafixers/Typed;Lcom/mojang/datafixers/types/templates/CompoundList$CompoundListType;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_29911 func_241310_a_ - m (Lcom/mojang/datafixers/FieldFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/templates/CompoundList$CompoundListType;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_29909 func_241308_a_ - m (Ljava/lang/String;Lcom/mojang/datafixers/types/Type;)Lcom/mojang/datafixers/types/Type; method_29913 func_241312_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_29912 func_241311_a_ -c net/minecraft/class_3904 net/minecraft/util/datafix/fixes/NewVillageFix - m (Lcom/mojang/datafixers/util/Pair;)Z method_17339 func_219854_b - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17332 func_219850_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28223 func_219840_a_ - m (Ljava/util/List;)Ljava/util/List; method_17337 func_219851_a - m (Ljava/lang/String;)Ljava/lang/String; method_17336 func_219847_a - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28224 func_219846_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17330 func_219849_a - m (Lcom/mojang/datafixers/types/templates/CompoundList$CompoundListType;)Lcom/mojang/datafixers/TypeRewriteRule; method_17334 func_219848_a - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_17335 func_219852_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28227 func_219844_d_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17331 func_219842_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28226 func_219843_c_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17333 func_219853_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28225 func_219845_b_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_17329 func_219841_a -c net/minecraft/class_1197 net/minecraft/util/datafix/fixes/NamedEntityFix - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5105 fix - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5104 func_206371_a - f Lcom/mojang/datafixers/DSL$TypeReference; field_5704 type - f Ljava/lang/String; field_5703 name - f Ljava/lang/String; field_5705 entityName -c net/minecraft/class_1199 net/minecraft/util/datafix/fixes/ObjectiveRenderType - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28232 func_211859_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5111 func_211860_a - m (Ljava/lang/String;)Lnet/minecraft/class_274$class_275; method_5112 getRenderType - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28231 func_211857_a_ -c net/minecraft/class_1200 net/minecraft/util/datafix/fixes/ObjectiveDisplayName - m (Ljava/lang/String;)Ljava/lang/String; method_5117 func_211865_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28228 func_211861_a_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28229 func_211864_a_ - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28230 func_211862_a_ - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5115 func_211863_a -c net/minecraft/class_4294 net/minecraft/util/datafix/fixes/OminousBannerRenameFix - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_20446 func_219819_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_20445 func_219818_a -c net/minecraft/class_4299 net/minecraft/util/datafix/fixes/OminousBannerTileEntityRenameFix - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_20481 func_222992_a -c net/minecraft/class_1202 net/minecraft/util/datafix/fixes/ForceVBOOn - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5124 func_207425_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5123 func_207426_a_ -c net/minecraft/class_4092 net/minecraft/util/datafix/fixes/OptionsAddTextBackgroundFix - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28233 func_219855_a_ - m (Ljava/lang/String;)D method_18853 func_219856_a - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Lcom/mojang/serialization/Dynamic; method_28234 func_219857_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_18852 func_219858_a -c net/minecraft/class_1201 net/minecraft/util/datafix/fixes/LWJGL3KeyOptions - m (Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap;)V method_5118 func_206279_a - m (Ljava/util/Map$Entry;)Lcom/mojang/datafixers/util/Pair; method_5122 func_209661_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28235 func_207424_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5121 func_207423_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map;)Lcom/mojang/serialization/Dynamic; method_28236 func_209663_a_ - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_5706 field_199186_a -c net/minecraft/class_1203 net/minecraft/util/datafix/fixes/OptionsLowerCaseLanguage - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5125 func_207428_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5126 func_206281_a -c net/minecraft/class_1204 net/minecraft/util/datafix/fixes/KeyOptionsTranslation - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map;)Lcom/mojang/serialization/Dynamic; method_28239 func_209669_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5130 func_209667_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28237 func_209668_a_ - m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map$Entry;)Lcom/mojang/datafixers/util/Pair; method_28238 func_209666_a_ -c net/minecraft/class_4963 net/minecraft/util/datafix/fixes/PlayerUUID - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26072 func_233354_b_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28241 func_233356_c_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26070 func_233353_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28240 func_233355_b_ -c net/minecraft/class_5404 net/minecraft/util/datafix/fixes/SwapHandsFix - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_30019 func_241318_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_30020 func_241319_a_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_30021 func_241320_a_ - f Ljava/lang/String; field_25667 field_241317_c_ - f Ljava/lang/String; field_25665 field_241315_a_ - f Ljava/lang/String; field_25666 field_241316_b_ -c net/minecraft/class_1206 net/minecraft/util/datafix/fixes/RecipeRenamer1502 - m (Ljava/lang/String;)Ljava/lang/String; method_5136 func_230072_a_ - f Ljava/util/Map; field_5708 field_209673_a -c net/minecraft/class_4620 net/minecraft/util/datafix/fixes/PointOfInterestRename - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Ljava/lang/String;)Ljava/lang/String; method_23303 func_225501_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28244 func_226207_c_ - m (Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_23304 func_226205_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_23299 func_226201_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28248 func_226211_g_ - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28243 func_226203_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28246 func_226209_e_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28247 func_226210_f_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28245 func_226208_d_ - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_23302 func_226204_a_ - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_23305 func_226206_b_ - m (Lcom/mojang/serialization/Dynamic;Ljava/util/stream/Stream;)Lcom/mojang/serialization/Dynamic; method_28242 func_226202_a_ -c net/minecraft/class_1205 net/minecraft/util/datafix/fixes/RecipeRenamer1510 - m (Ljava/lang/String;)Ljava/lang/String; method_5133 func_230077_a_ - f Ljava/util/Map; field_5707 field_211869_a -c net/minecraft/class_4745 net/minecraft/util/datafix/fixes/RecipeRenamer - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_24244 func_230076_a_ - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_24243 func_230075_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - f Ljava/util/function/Function; field_21817 field_230074_b_ - f Ljava/lang/String; field_21816 field_230073_a_ -c net/minecraft/class_1208 net/minecraft/util/datafix/TypeReferences - m ()Ljava/lang/String; method_20336 func_211284_i - m ()Ljava/lang/String; method_25932 func_233376_a_ - m ()Ljava/lang/String; method_20334 func_211282_g - m ()Ljava/lang/String; method_20332 func_211279_e - m ()Ljava/lang/String; method_20330 func_211281_c - m ()Ljava/lang/String; method_5148 func_211280_a - m ()Ljava/lang/String; method_5145 func_219865_j - m ()Ljava/lang/String; method_5138 func_219860_h - m ()Ljava/lang/String; method_5144 func_219864_f - m ()Ljava/lang/String; method_5137 func_219859_d - m ()Ljava/lang/String; method_20338 func_211283_k - m ()Ljava/lang/String; method_5143 func_219863_b - m ()Ljava/lang/String; method_20337 func_211277_j - m ()Ljava/lang/String; method_20335 func_211276_h - m ()Ljava/lang/String; method_20333 func_211275_f - m ()Ljava/lang/String; method_20331 func_211274_d - m ()Ljava/lang/String; method_5146 func_211273_b - m ()Ljava/lang/String; method_5139 func_211872_b - m ()Ljava/lang/String; method_5142 func_211871_a - m ()Ljava/lang/String; method_5150 func_219868_i - m ()Ljava/lang/String; method_5141 func_219862_g - m ()Ljava/lang/String; method_5147 func_219866_e - m ()Ljava/lang/String; method_20339 func_211278_l - m ()Ljava/lang/String; method_5149 func_219867_c - m ()Ljava/lang/String; method_5140 func_219861_a - f Lcom/mojang/datafixers/DSL$TypeReference; field_5724 STRUCTURE_FEATURE - f Lcom/mojang/datafixers/DSL$TypeReference; field_5726 CHUNK - f Lcom/mojang/datafixers/DSL$TypeReference; field_5728 BIOME - f Lcom/mojang/datafixers/DSL$TypeReference; field_5710 LEVEL - f Lcom/mojang/datafixers/DSL$TypeReference; field_5714 TEAM - f Lcom/mojang/datafixers/DSL$TypeReference; field_5717 OPTIONS - f Lcom/mojang/datafixers/DSL$TypeReference; field_5730 STATS - f Lcom/mojang/datafixers/DSL$TypeReference; field_5727 BLOCK_ENTITY - f Lcom/mojang/datafixers/DSL$TypeReference; field_5725 ADVANCEMENTS - f Lcom/mojang/datafixers/DSL$TypeReference; field_5720 BLOCK_STATE - f Lcom/mojang/datafixers/DSL$TypeReference; field_5723 ENTITY_TYPE - f Lcom/mojang/datafixers/DSL$TypeReference; field_5718 UNTAGGED_SPAWNER - f Lcom/mojang/datafixers/DSL$TypeReference; field_5731 BLOCK_NAME - f Lcom/mojang/datafixers/DSL$TypeReference; field_5721 OBJECTIVE - f Lcom/mojang/datafixers/DSL$TypeReference; field_5715 PLAYER - f Lcom/mojang/datafixers/DSL$TypeReference; field_5711 RECIPE - f Lcom/mojang/datafixers/DSL$TypeReference; field_5722 HOTBAR - f Lcom/mojang/datafixers/DSL$TypeReference; field_23067 WORLD_GEN_SETTINGS - f Lcom/mojang/datafixers/DSL$TypeReference; field_5732 SAVED_DATA - f Lcom/mojang/datafixers/DSL$TypeReference; field_5716 STRUCTURE - f Lcom/mojang/datafixers/DSL$TypeReference; field_19224 POI_CHUNK - f Lcom/mojang/datafixers/DSL$TypeReference; field_5712 ITEM_STACK - f Lcom/mojang/datafixers/DSL$TypeReference; field_5729 ENTITY - f Lcom/mojang/datafixers/DSL$TypeReference; field_5719 ENTITY_NAME - f Lcom/mojang/datafixers/DSL$TypeReference; field_5713 ITEM_NAME -c net/minecraft/class_5255 net/minecraft/util/datafix/fixes/RedstoneConnections - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_27778 func_233368_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28250 func_233371_b_ - m (Ljava/lang/String;)Z method_27780 func_233369_a_ - m (Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28249 func_233370_a_ - m (Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28251 func_233372_b_ - m (Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28252 func_233373_c_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28253 func_233374_d_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_27779 func_233367_a_ -c net/minecraft/class_4753 net/minecraft/util/datafix/fixes/BiomeName - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_24321 func_233379_a_ - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_24320 func_233380_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_24322 func_233381_a_ - f Ljava/util/Map; field_21959 field_233378_b_ - f Ljava/lang/String; field_23068 field_233377_a_ -c net/minecraft/class_5429 net/minecraft/util/datafix/fixes/RemoveGolemGossip - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_30326 func_242266_a - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_30327 func_242267_a - m (Lcom/mojang/serialization/Dynamic;)Z method_30328 func_242268_b -c net/minecraft/class_1210 net/minecraft/util/datafix/fixes/RenamedCoral - f Ljava/util/Map; field_5733 field_204918_a -c net/minecraft/class_1207 net/minecraft/util/datafix/fixes/CoralFansRenameList - f Ljava/util/Map; field_5709 field_211870_a -c net/minecraft/class_4964 net/minecraft/util/datafix/fixes/SavedDataUUID - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28259 func_233393_g_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28254 func_233388_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28258 func_233392_f_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28256 func_233390_d_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28257 func_233391_e_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26075 func_233387_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28255 func_233389_c_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_26073 func_233386_a_ -c net/minecraft/class_4285 net/minecraft/util/datafix/fixes/PointOfInterestReorganizationFix - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_20342 func_219872_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_20341 func_219871_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_20340 func_219870_a -c net/minecraft/class_1212 net/minecraft/util/datafix/fixes/EntityRenameHelper - m (Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/datafixers/util/Pair; method_5164 getNewNameAndTag -c net/minecraft/class_1209 net/minecraft/util/datafix/fixes/BlockStateFlattenVillageCrops - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5155 updateDoubleField - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5154 updateSingleField - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5157 updateChildren - m (Ljava/util/stream/Stream;)Ljava/util/stream/Stream; method_5151 updateChildren - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5152 fixTag - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Lcom/mojang/serialization/Dynamic; method_5156 updateCrop - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5153 func_210587_e_ -c net/minecraft/class_1214 net/minecraft/util/datafix/fixes/StatsRenaming - m (Ljava/lang/String;)Ljava/lang/String; method_5172 upgradeItem - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5171 func_209679_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Ljava/lang/String;)Ljava/lang/String; method_5173 upgradeBlock - m ()Ljava/lang/IllegalStateException; method_5170 func_209678_f - m (Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5169 func_209680_a - f Ljava/util/Map; field_5735 field_209685_e - f Ljava/util/Map; field_5737 field_209683_b - f Ljava/util/Map; field_5738 field_199189_b - f Ljava/util/Map; field_5736 field_209684_d - f Ljava/util/Set; field_5739 field_209682_a -c net/minecraft/class_1211 net/minecraft/util/datafix/fixes/TypedEntityRenameHelper - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5162 func_211310_a - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_5159 func_233400_a_ - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5160 func_211307_a - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_5158 func_211308_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_5163 rename - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Ljava/lang/String;)Ljava/lang/String; method_5161 func_211309_a - f Ljava/lang/String; field_5734 name -c net/minecraft/class_4695 net/minecraft/util/datafix/fixes/StructureReferenceFix - m (Ljava/lang/Integer;)Z method_23663 func_226214_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_23662 func_226213_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_23664 func_226215_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_23661 func_226212_a_ -c net/minecraft/class_5256 net/minecraft/util/datafix/fixes/StriderGravity - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_27789 func_233403_a_ -c net/minecraft/class_1217 net/minecraft/util/datafix/fixes/TeamDisplayName - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/function/Function; method_28262 func_211876_a_ - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5183 func_211877_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Ljava/lang/String;)Ljava/lang/String; method_5185 func_211879_a - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28260 func_211875_a_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28261 func_211878_a_ -c net/minecraft/class_1213 net/minecraft/util/datafix/fixes/SwimStatsRename - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5167 func_211692_a - m (Ljava/lang/String;)Ljava/lang/String; method_5168 func_211693_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5165 func_211690_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5166 func_211691_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule -c net/minecraft/class_1215 net/minecraft/util/datafix/fixes/TrappedChestTileEntitySplit - m (IILit/unimi/dsi/fastutil/ints/IntSet;Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5174 func_212530_a - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5178 func_212534_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5175 func_212531_a - m (Lcom/mojang/datafixers/types/templates/TaggedChoice$TaggedChoiceType;IILit/unimi/dsi/fastutil/ints/IntSet;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5176 func_212532_a - m (Ljava/lang/String;)Ljava/lang/String; method_5179 func_212535_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5177 func_212533_a - f Lorg/apache/logging/log4j/Logger; field_5740 LOGGER -c net/minecraft/class_1215$class_1216 net/minecraft/util/datafix/fixes/TrappedChestTileEntitySplit$Section - m (I)Z method_5180 func_212511_a - f Lit/unimi/dsi/fastutil/ints/IntSet; field_5741 field_212512_f -c net/minecraft/class_5273 net/minecraft/util/datafix/fixes/VillagerFollowRange - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28264 func_233411_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_27914 func_233409_a_ - m (Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28263 func_233410_a_ -c net/minecraft/class_3845 net/minecraft/util/datafix/fixes/VillagerProfessionFix - m (II)Ljava/lang/String; method_16897 func_219811_a -c net/minecraft/class_1219 net/minecraft/util/datafix/fixes/VillagerTrades - m (Ljava/lang/String;)Ljava/lang/String; method_5192 func_209289_a - m (Lcom/mojang/datafixers/util/Pair;)Lcom/mojang/datafixers/util/Pair; method_5190 func_209288_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5187 updateItemStack - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5188 func_209284_b - m (Lcom/mojang/datafixers/OpticFinder;Ljava/util/function/Function;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5189 func_209286_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Ljava/util/function/Function;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5191 func_209287_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Ljava/util/function/Function;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_5186 func_209285_a -c net/minecraft/class_4300 net/minecraft/util/datafix/fixes/VillagerLevelAndXpFix - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Ljava/util/Optional; method_20489 func_223002_b - m (ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28266 func_222998_b_ - m (I)I method_20482 func_223001_a - m (Lcom/mojang/datafixers/Typed;I)Lcom/mojang/datafixers/Typed; method_20490 func_222994_b - m (Lcom/mojang/datafixers/Typed;I)Lcom/mojang/datafixers/Typed; method_20487 func_223003_a - m (ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28267 func_222999_c_ - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/types/Type;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_20486 func_222996_a - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Ljava/lang/Integer; method_20485 func_222997_a - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/OpticFinder;Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_20484 func_222995_a - m (ILcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28265 func_223000_a_ - f [I field_19285 field_223004_a -c net/minecraft/class_5299 net/minecraft/util/datafix/fixes/WorldGenSettings - m (Ljava/lang/String;II)I method_28280 func_233435_a_ - m (Ljava/util/Optional;Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_28282 func_233437_a_ - m (Ljava/lang/String;I)I method_28279 func_233434_a_ - m (Lcom/mojang/serialization/Dynamic;Lorg/apache/commons/lang3/mutable/MutableBoolean;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/util/Map;Ljava/util/Map;)V method_28274 func_233429_a_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_28270 func_233425_a_ - m (Lcom/mojang/serialization/Dynamic;Lorg/apache/commons/lang3/mutable/MutableBoolean;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/util/Map;Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)V method_28273 func_233428_a_ - m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/OptionalDynamic;)Ljava/util/Map; method_28275 func_233430_a_ - m (Lcom/mojang/serialization/OptionalDynamic;Ljava/util/Map$Entry;)Lcom/mojang/serialization/Dynamic; method_28277 func_233432_a_ - m (Lcom/mojang/serialization/Dynamic;J)Lcom/mojang/serialization/Dynamic; method_29916 func_241322_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_30075 func_233441_c_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28286 func_241331_c_ - m (Lcom/google/common/collect/ImmutableMap$Builder;Lcom/mojang/serialization/DynamicOps;Ljava/lang/String;)V method_28269 func_233424_a_ - m (Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;I)V method_28281 func_233436_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28271 func_233426_a_ - m (JLcom/mojang/serialization/DynamicLike;Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_28268 func_233423_a_ - m (Lcom/mojang/serialization/Dynamic;)Ljava/util/Optional; method_28285 func_233440_b_ - m (Ljava/lang/String;)Ljava/lang/String; method_28278 func_233433_a_ - m (Lorg/apache/commons/lang3/mutable/MutableBoolean;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/util/Map;Ljava/util/Map;)V method_28284 func_233439_a_ - m (Lorg/apache/commons/lang3/mutable/MutableBoolean;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Lorg/apache/commons/lang3/mutable/MutableInt;Ljava/util/Map;Lcom/mojang/serialization/Dynamic;Lcom/mojang/serialization/Dynamic;)V method_28283 func_233438_a_ - m (Lcom/mojang/serialization/Dynamic;JLcom/mojang/serialization/Dynamic;Z)Ljava/lang/Object; method_29917 func_241323_a_ - m (Lcom/mojang/serialization/Dynamic;JZZ)Lcom/mojang/serialization/Dynamic; method_28272 func_233427_a_ - m (Lcom/mojang/serialization/DynamicOps;Ljava/util/Map$Entry;)Lcom/mojang/serialization/Dynamic; method_28276 func_233431_a_ - f Lcom/google/common/collect/ImmutableMap; field_24647 field_233422_a_ -c net/minecraft/class_5299$class_5300 net/minecraft/util/datafix/fixes/WorldGenSettings$StructureSeparationSettingsCodec - m (Lnet/minecraft/class_5299$class_5300;)Ljava/lang/Integer; method_28292 func_233451_d_ - m (Lnet/minecraft/class_5299$class_5300;)I method_28291 func_233450_c_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28289 func_233448_a_ - m (Lnet/minecraft/class_5299$class_5300;)Ljava/lang/Integer; method_28293 func_233452_e_ - m (Lnet/minecraft/class_5299$class_5300;)I method_28290 func_233449_b_ - m (Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_28288 func_233447_a_ - m (Lnet/minecraft/class_5299$class_5300;)Ljava/lang/Integer; method_28294 func_233453_f_ - m (Lnet/minecraft/class_5299$class_5300;)I method_28287 func_233446_a_ - f Lcom/mojang/serialization/Codec; field_24648 field_233442_a_ - f I field_24651 field_233445_d_ - f I field_24649 field_233443_b_ - f I field_24650 field_233444_c_ -c net/minecraft/class_4754 net/minecraft/util/datafix/fixes/WallProperty - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24328 func_233421_c_ - m (Lcom/mojang/datafixers/Typed;)Lcom/mojang/datafixers/Typed; method_24325 func_233416_a_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24327 func_233420_b_ - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_24323 func_233417_a_ - m (Ljava/lang/String;)Ljava/lang/String; method_24326 func_233419_a_ - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;)Lcom/mojang/serialization/Dynamic; method_24324 func_233418_a_ - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - f Ljava/util/Set; field_21960 field_233415_a_ -c net/minecraft/class_4301 net/minecraft/util/datafix/fixes/ZombieVillagerXpFix - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_20492 func_222993_a_ -c net/minecraft/class_1218 net/minecraft/util/datafix/WriteAndReadDataFix - m ()Lcom/mojang/datafixers/TypeRewriteRule; makeRule makeRule - f Lcom/mojang/datafixers/DSL$TypeReference; field_5743 type - f Ljava/lang/String; field_5742 name -c net/minecraft/class_1222 net/minecraft/util/datafix/versions/V0100 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5196 equipment - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5199 func_206608_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5195 registerEntity - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5201 func_210604_b - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5200 func_210603_c - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5197 func_206612_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5198 func_206609_c -c net/minecraft/class_1220 net/minecraft/util/datafix/NamespacedSchema - m (Ljava/lang/String;)Ljava/lang/String; method_5193 ensureNamespaced - m ()Lcom/mojang/datafixers/types/Type; method_28295 func_233457_a_ - m (Lcom/mojang/datafixers/DSL$TypeReference;Ljava/lang/String;)Lcom/mojang/datafixers/types/Type; getChoiceType getChoiceType - f Lcom/mojang/datafixers/types/Type; field_24653 field_233456_b_ - f Lcom/mojang/serialization/codecs/PrimitiveCodec; field_24652 field_233455_a_ -c net/minecraft/class_1220$1 net/minecraft/util/datafix/NamespacedSchema$1 - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; read read - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/String;)Ljava/lang/Object; method_28296 write - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; write write - m ()Ljava/lang/String; toString toString -c net/minecraft/class_1224 net/minecraft/util/datafix/versions/V1022 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5203 func_210702_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5205 func_210704_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5204 func_210703_a -c net/minecraft/class_1221 net/minecraft/util/datafix/versions/V0102 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5194 func_210705_a -c net/minecraft/class_1226 net/minecraft/util/datafix/versions/V0107 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities -c net/minecraft/class_1223 net/minecraft/util/datafix/versions/V0106 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5202 func_210706_a -c net/minecraft/class_1228 net/minecraft/util/datafix/versions/V0135 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5209 func_210707_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5210 func_210708_b -c net/minecraft/class_1225 net/minecraft/util/datafix/versions/V1125 - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5207 func_210606_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5206 func_210605_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5208 func_211314_a -c net/minecraft/class_1230 net/minecraft/util/datafix/versions/V1451 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5212 func_210608_a -c net/minecraft/class_1227 net/minecraft/util/datafix/versions/V0143 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities -c net/minecraft/class_1232 net/minecraft/util/datafix/versions/V1451_2 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5225 func_206510_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities -c net/minecraft/class_1229 net/minecraft/util/datafix/versions/V1451_1 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5211 func_210607_a -c net/minecraft/class_1234 net/minecraft/util/datafix/versions/V1451_4 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5226 func_210622_a -c net/minecraft/class_1231 net/minecraft/util/datafix/versions/V1451_3 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5223 func_210619_e - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5220 func_210616_j - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5221 func_210617_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5215 func_210611_k - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5218 func_210614_f - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5214 func_210610_h - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5217 func_206498_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5219 func_210615_g - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5224 func_210620_b - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5213 func_210609_i - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5222 func_210618_d - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5216 func_210612_c -c net/minecraft/class_1236 net/minecraft/util/datafix/versions/V1451_6 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5228 func_210624_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/function/Supplier;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5229 func_210625_a -c net/minecraft/class_1233 net/minecraft/util/datafix/versions/V1451_5 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities -c net/minecraft/class_1235 net/minecraft/util/datafix/versions/V1451_7 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5227 func_210623_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes -c net/minecraft/class_1237 net/minecraft/util/datafix/versions/V1466 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5230 func_210626_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5231 func_210627_b -c net/minecraft/class_1238 net/minecraft/util/datafix/versions/V1460 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5244 func_206551_f - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5251 func_210643_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5267 func_210662_l - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5274 func_210652_c - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5239 func_210634_j - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5262 func_206527_h - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5279 func_206542_j - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5263 func_206555_l - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5259 func_210654_h - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5245 func_206535_n - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5243 func_210638_d - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5276 func_210669_f - m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5236 func_210631_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5254 func_210649_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5238 func_206541_q - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5275 func_206554_s - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5255 func_206523_u - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5250 func_206530_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5234 func_206529_w - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5273 registerInventory - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5271 func_206521_d - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5265 func_206552_y - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/function/Supplier;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5235 func_210630_a - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5257 func_210646_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5256 func_206534_e - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5277 func_206522_g - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5242 func_210637_m - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5268 func_210667_d - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5266 func_210661_i - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5260 func_210655_k - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5247 func_206516_i - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5249 func_206526_k - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5237 func_210632_g - m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5261 func_210656_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5278 func_209327_m - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5258 func_206520_o - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5253 func_210648_e - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5272 func_206545_p - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5240 func_210635_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5252 func_206515_r - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5269 func_210663_c - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5233 func_206524_t - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5264 func_206533_v - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5232 registerEntity - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5270 func_206518_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5241 func_206549_c - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5246 func_206546_x - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5248 func_211315_a -c net/minecraft/class_1239 net/minecraft/util/datafix/versions/V1481 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities -c net/minecraft/class_1240 net/minecraft/util/datafix/versions/V1470 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5280 registerEntity - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5281 func_210673_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5282 func_206561_a -c net/minecraft/class_1241 net/minecraft/util/datafix/versions/V1486 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities -c net/minecraft/class_1242 net/minecraft/util/datafix/versions/V1483 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities -c net/minecraft/class_1245 net/minecraft/util/datafix/versions/V1800 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5285 func_219873_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5287 func_219875_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5286 func_219874_a -c net/minecraft/class_1243 net/minecraft/util/datafix/versions/V1510 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities -c net/minecraft/class_3686 net/minecraft/util/datafix/versions/V1904 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_16051 func_219877_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_16050 func_219876_a -c net/minecraft/class_1244 net/minecraft/util/datafix/versions/V1801 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5284 func_219879_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5283 func_219878_a -c net/minecraft/class_3743 net/minecraft/util/datafix/versions/V1909 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities -c net/minecraft/class_3687 net/minecraft/util/datafix/versions/V1906 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_16053 func_219881_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_16054 func_219882_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_16052 func_219880_a -c net/minecraft/class_3984 net/minecraft/util/datafix/versions/V1928 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_17997 func_219884_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_17998 func_219883_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_17999 func_219885_b -c net/minecraft/class_3905 net/minecraft/util/datafix/versions/V1920 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_17342 func_219887_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_17343 func_219886_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities -c net/minecraft/class_4016 net/minecraft/util/datafix/versions/V1931 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_18246 func_219889_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_18247 func_219888_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities -c net/minecraft/class_3985 net/minecraft/util/datafix/versions/V1929 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_18001 func_219890_b - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_18000 func_219891_a -c net/minecraft/class_4755 net/minecraft/util/datafix/versions/V2501 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_24329 func_233460_a_ - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_24330 func_233461_a_ -c net/minecraft/class_4465 net/minecraft/util/datafix/versions/V2100 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_21745 func_226216_a_ - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_21746 func_226217_a_ - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_21747 func_226218_b_ - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities -c net/minecraft/class_4804 net/minecraft/util/datafix/versions/V2505 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_24512 func_233465_a_ - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_24511 func_233464_a_ -c net/minecraft/class_4756 net/minecraft/util/datafix/versions/V2502 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_24331 func_233462_a_ - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_24332 func_233463_a_ -c net/minecraft/class_4979 net/minecraft/util/datafix/versions/V2519 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_26304 func_233468_a_ - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_26305 func_233469_a_ -c net/minecraft/class_4847 net/minecraft/util/datafix/versions/V2509 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_24823 func_233466_a_ - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_24824 func_233467_a_ -c net/minecraft/class_5301 net/minecraft/util/datafix/versions/V2551 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28299 func_233474_c_ - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28298 func_233473_b_ - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28302 func_233477_f_ - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28297 func_233472_a_ - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28300 func_233475_d_ - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_28301 func_233476_e_ -c net/minecraft/class_5130 net/minecraft/util/datafix/versions/V2522 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_26821 func_233470_a_ - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_26822 func_233471_a_ - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities -c net/minecraft/class_5416 net/minecraft/util/datafix/versions/V2568 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_30226 func_242270_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_30225 func_242269_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities -c net/minecraft/class_1246 net/minecraft/util/datafix/versions/V0700 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5289 func_210711_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5288 registerEntity - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities -c net/minecraft/class_1247 net/minecraft/util/datafix/versions/V0501 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5290 registerEntity - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5291 func_210709_a -c net/minecraft/class_1248 net/minecraft/util/datafix/versions/V0702 - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5293 func_210717_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5292 registerEntity -c net/minecraft/class_1249 net/minecraft/util/datafix/versions/V0701 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5294 registerEntity - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5295 func_210710_a -c net/minecraft/class_1250 net/minecraft/util/datafix/versions/V0704 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5296 registerInventory - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5298 func_206640_a - m (Lcom/mojang/datafixers/DSL$TypeReference;Ljava/lang/String;)Lcom/mojang/datafixers/types/Type; getChoiceType getChoiceType - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5303 func_210722_b - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5300 func_210718_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5302 func_206641_c - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5301 func_206646_b - m (Ljava/util/HashMap;)V method_5297 func_209318_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities - m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5299 func_210723_a - f Lcom/mojang/datafixers/types/templates/Hook$HookFunction; field_5745 field_206648_c - f Ljava/util/Map; field_5744 field_206647_b -c net/minecraft/class_1250$1 net/minecraft/util/datafix/versions/V0704$1 - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; apply apply -c net/minecraft/class_1251 net/minecraft/util/datafix/versions/V0703 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5308 func_210716_b - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5304 func_210712_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5307 func_210715_e - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5306 func_210714_c - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5305 func_210713_d -c net/minecraft/class_1252 net/minecraft/util/datafix/versions/V0808 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5310 func_210701_a - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5309 registerInventory -c net/minecraft/class_1253 net/minecraft/util/datafix/versions/V0705 - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5322 func_206583_f - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5312 func_206571_e - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5327 func_206591_d - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5316 func_206573_h - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5333 func_206592_g - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5325 func_206587_k - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5337 func_206568_j - m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5315 func_210678_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5324 func_206579_i - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5323 func_206584_n - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5335 func_206595_m - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5318 func_206578_l - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5329 func_210692_c - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5319 func_210682_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5336 func_210698_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5328 func_206588_p - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5313 func_206570_o - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5331 func_206594_s - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5334 func_206567_r - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5317 func_206586_q - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5311 registerEntity - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5321 func_206582_v - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5338 func_206574_u - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5314 func_206575_t - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5320 func_206580_c - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5330 registerThrowableProjectile - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5332 func_206569_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5326 func_209329_a - f Lcom/mojang/datafixers/types/templates/Hook$HookFunction; field_5746 field_206597_b -c net/minecraft/class_1253$1 net/minecraft/util/datafix/versions/V0705$1 - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; apply apply -c net/minecraft/class_1254 net/minecraft/util/datafix/versions/V0099 - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5378 func_210755_e - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5364 func_211319_c - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5365 func_206653_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5340 func_206670_e - m (Ljava/util/HashMap;)V method_5344 func_209320_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5353 equipment - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5346 registerInventory - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5354 func_206684_c - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5373 func_211322_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5374 func_210752_g - m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5375 func_209870_a_ - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5369 func_211320_d - m ()Ljava/util/Map; method_5380 func_209867_d - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerEntities registerEntities - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5339 registerEntity - m (Lcom/mojang/datafixers/schemas/Schema;)Ljava/util/Map; registerBlockEntities registerBlockEntities - m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5347 func_210729_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5381 func_206679_j - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5377 registerMinecart - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5351 func_206688_l - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;)V registerTypes registerTypes - m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5357 func_209868_a_ - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5367 func_206678_p - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5361 func_210741_l - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5352 func_210734_j - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5358 func_206655_n - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5343 func_210727_h - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/String;Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/Dynamic; method_5371 func_209866_a_ - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5370 func_210748_f - m (Lcom/mojang/serialization/Dynamic;Ljava/util/Map;Ljava/lang/String;)Ljava/lang/Object; method_5359 func_209869_a - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5355 func_210736_d - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5372 func_206667_b - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5379 func_211324_b - m ()Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5341 func_210751_b - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5366 func_206656_d - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5349 func_206663_h - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5356 func_206686_f - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5362 func_206651_i - m (Ljava/util/Map;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5348 func_211317_a - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5376 func_206671_m - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/lang/String;)V method_5368 registerThrowableProjectile - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5363 func_206661_k - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5345 func_210728_k - m (Lcom/mojang/datafixers/schemas/Schema;Ljava/lang/String;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5342 func_206682_o - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5360 func_210740_i - m (Lcom/mojang/datafixers/schemas/Schema;)Lcom/mojang/datafixers/types/templates/TypeTemplate; method_5350 func_210732_g - f Lcom/mojang/datafixers/types/templates/Hook$HookFunction; field_5747 field_206691_b - f Ljava/util/Map; field_5748 field_206693_d - f Lorg/apache/logging/log4j/Logger; field_5749 LOGGER -c net/minecraft/class_1254$1 net/minecraft/util/datafix/versions/V0099$1 - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Ljava/lang/Object; apply apply -c net/minecraft/class_5169 net/minecraft/server/dedicated/ServerInfoMBean - m (Ljava/lang/Object;)Ljavax/management/MBeanAttributeInfo; method_27180 func_233489_a_ - m (Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/String;)Ljava/lang/Object; invoke invoke - m (I)[Ljavax/management/MBeanAttributeInfo; method_27178 func_233487_a_ - m ()[J method_27182 func_233491_b_ - m (Ljava/lang/String;)Ljava/lang/Object; getAttribute getAttribute - m (Ljavax/management/AttributeList;)Ljavax/management/AttributeList; setAttributes setAttributes - m (Lnet/minecraft/server/MinecraftServer;)V method_27181 func_233490_a_ - m (Ljavax/management/Attribute;)V setAttribute setAttribute - m ([Ljava/lang/String;)Ljavax/management/AttributeList; getAttributes getAttributes - m (Lnet/minecraft/class_5169$class_5170;)Ljavax/management/Attribute; method_27179 func_233488_a_ - m ()F method_27177 func_233486_a_ - m ()Ljavax/management/MBeanInfo; getMBeanInfo getMBeanInfo - m (Lnet/minecraft/class_5169$class_5170;)Ljava/lang/String; method_27183 func_233492_b_ - f Ljavax/management/MBeanInfo; field_23972 field_233484_c_ - f Lnet/minecraft/server/MinecraftServer; field_23971 field_233483_b_ - f Ljava/util/Map; field_23973 field_233485_d_ - f Lorg/apache/logging/log4j/Logger; field_23970 field_233482_a_ -c net/minecraft/class_5169$1 net/minecraft/server/dedicated/ServerInfoMBean$1 -c net/minecraft/class_5169$class_5170 net/minecraft/server/dedicated/ServerInfoMBean$Attribute - m (Lnet/minecraft/class_5169$class_5170;)Ljavax/management/MBeanAttributeInfo; method_27187 func_233500_c_ - m (Lnet/minecraft/class_5169$class_5170;)Ljava/lang/String; method_27186 func_233499_b_ - m ()Ljavax/management/MBeanAttributeInfo; method_27184 func_233497_a_ - m (Lnet/minecraft/class_5169$class_5170;)Ljava/util/function/Supplier; method_27185 func_233498_a_ - f Ljava/lang/String; field_23974 field_233493_a_ - f Ljava/lang/Class; field_23977 field_233496_d_ - f Ljava/util/function/Supplier; field_23975 field_233494_b_ - f Ljava/lang/String; field_23976 field_233495_c_ -c net/minecraft/class_4757 net/minecraft/profiler/TimeTracker - m ()Lnet/minecraft/class_3696; method_24337 func_233509_e_ - m ()V method_24335 func_233507_c_ - m ()V method_24334 func_233506_b_ - m ()Z method_24333 func_233505_a_ - m ()Lnet/minecraft/class_3695; method_24336 func_233508_d_ - f Ljava/util/function/LongSupplier; field_21962 field_233502_a_ - f Ljava/util/function/IntSupplier; field_21963 field_233503_b_ - f Lnet/minecraft/class_3693; field_21964 field_233504_c_ -c net/minecraft/class_3533 net/minecraft/profiler/Profiler - m (Ljava/lang/String;)Lnet/minecraft/class_3533$class_4746; method_24245 func_230080_d_ - m ()Lnet/minecraft/class_3533$class_4746; method_24246 func_230081_e_ - m ()Ljava/lang/Object; method_21720 func_225432_f - m ()Ljava/lang/Object; method_21719 func_225431_e - m (J)Ljava/lang/Object; method_21718 func_225433_a - f Ljava/lang/String; field_15734 currentSectionName - f J field_16267 WARN_TIME_THRESHOLD - f Lnet/minecraft/class_3533$class_4746; field_21819 field_230079_k_ - f Lorg/apache/logging/log4j/Logger; field_15735 LOGGER - f Z field_15733 tickStarted - f Lit/unimi/dsi/fastutil/longs/LongList; field_15730 timeStack - f Ljava/util/function/LongSupplier; field_21961 field_233501_g_ - f Ljava/util/List; field_15736 sectionList - f I field_15729 startTicks - f Z field_20345 field_226230_l_ - f J field_15732 startTime - f Ljava/util/function/IntSupplier; field_16266 currentTicks - f Ljava/util/Map; field_21818 field_230078_e_ -c net/minecraft/class_3533$1 net/minecraft/profiler/Profiler$1 -c net/minecraft/class_3533$class_4746 net/minecraft/profiler/Profiler$Section - m (Lnet/minecraft/class_3533$class_4746;J)J method_24248 func_230086_a_ - m (Lnet/minecraft/class_3533$class_4746;)J method_24247 func_230085_a_ - m (Lnet/minecraft/class_3533$class_4746;)J method_24249 func_230087_b_ - m (Lnet/minecraft/class_3533$class_4746;J)J method_24250 func_230088_b_ - m (Lnet/minecraft/class_3533$class_4746;)Lit/unimi/dsi/fastutil/objects/Object2LongOpenHashMap; method_24251 func_230089_c_ - f J field_21821 field_230083_b_ - f J field_21820 field_230082_a_ - f Lit/unimi/dsi/fastutil/objects/Object2LongOpenHashMap; field_21822 field_230084_c_ -c net/minecraft/class_3692 net/minecraft/profiler/FilledProfileResult - m (Ljava/lang/StringBuilder;ILjava/lang/String;Ljava/lang/Long;)V method_24258 func_230100_a_ - m ()Ljava/lang/String; method_16062 getWittyString - m (Lnet/minecraft/class_3692$class_4747;)J method_24254 func_230096_a_ - m (Ljava/util/Map;Ljava/util/List;Ljava/lang/String;Ljava/lang/Long;)V method_24261 func_230103_a_ - m (ILjava/lang/String;Ljava/lang/StringBuilder;)V method_16061 format - m (IILjava/lang/StringBuilder;Ljava/util/Map$Entry;)V method_24252 func_230094_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_4748; method_24262 func_230104_c_ - m (Ljava/lang/StringBuilder;I)Ljava/lang/StringBuilder; method_24256 func_230098_a_ - m (Ljava/util/Map;Ljava/lang/StringBuilder;I)V method_24260 func_230102_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_3692$class_4747; method_24263 func_230105_d_ - m (Ljava/lang/String;Ljava/lang/String;)Z method_24255 func_230097_a_ - m (Ljava/util/Map;Ljava/lang/String;Lnet/minecraft/class_4748;)V method_24259 func_230101_a_ - m (ILjava/lang/String;Lnet/minecraft/class_3692$class_4747;ILjava/lang/StringBuilder;)V method_24253 func_230095_a_ - m (JI)Ljava/lang/String; method_16063 inlineIntoCrashReport - m ()Ljava/util/Map; method_24264 func_230106_h_ - m (Ljava/lang/StringBuilder;ILjava/lang/String;Lnet/minecraft/class_3692$class_4747;)V method_24257 func_230099_a_ - f Lnet/minecraft/class_4748; field_21823 field_230090_b_ - f Ljava/util/Comparator; field_21825 field_230092_d_ - f Ljava/util/Map; field_21826 field_230093_e_ - f Lorg/apache/logging/log4j/Logger; field_16279 LOGGER - f I field_16275 ticksStop - f Lcom/google/common/base/Splitter; field_21824 field_230091_c_ - f J field_16278 timeStop - f I field_19383 ticksTotal - f I field_16274 ticksStart - f J field_16276 timeStart -c net/minecraft/class_3692$class_4747 net/minecraft/profiler/FilledProfileResult$Section - m (Lnet/minecraft/class_3692$class_4747;)Ljava/util/Map; method_24269 func_230114_c_ - m (Lnet/minecraft/class_3692$class_4747;)J method_24265 func_230110_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_3692$class_4747; method_24266 func_230111_a_ - m (Lnet/minecraft/class_3692$class_4747;)J method_24268 func_230113_b_ - m (Ljava/util/Iterator;J)V method_24267 func_230112_a_ - f J field_21827 field_230107_a_ - f J field_21828 field_230108_b_ - f Ljava/util/Map; field_21829 field_230109_c_ -c net/minecraft/class_3692$1 net/minecraft/profiler/FilledProfileResult$1 -c net/minecraft/class_3688 net/minecraft/profiler/EmptyProfileResult - f Lnet/minecraft/class_3688; field_16265 INSTANCE -c net/minecraft/class_3693 net/minecraft/profiler/IResultableProfiler - m ()Lnet/minecraft/class_3696; method_16064 getResults -c net/minecraft/class_3694 net/minecraft/profiler/EmptyProfiler - f Lnet/minecraft/class_3694; field_16280 INSTANCE -c net/minecraft/class_3695 net/minecraft/profiler/IProfiler - m (Lnet/minecraft/class_3695;Lnet/minecraft/class_3695;)Lnet/minecraft/class_3695; method_24338 func_233513_a_ - m ()V method_15407 endSection - m (Ljava/lang/String;)V method_15396 startSection - m (Ljava/util/function/Supplier;)V method_24271 func_230036_c_ - m ()V method_16066 endTick - m (Ljava/util/function/Supplier;)V method_15403 endStartSection - m (Ljava/lang/String;)V method_24270 func_230035_c_ - m ()V method_16065 startTick - m (Ljava/util/function/Supplier;)V method_15400 startSection - m (Ljava/lang/String;)V method_15405 endStartSection -c net/minecraft/class_3695$1 net/minecraft/profiler/IProfiler$1 - f Lnet/minecraft/class_3695; field_21966 field_233515_b_ - f Lnet/minecraft/class_3695; field_21965 field_233514_a_ -c net/minecraft/class_3696 net/minecraft/profiler/IProfileResult - m (Ljava/lang/String;)Ljava/lang/String; method_21721 decodePath - m ()I method_16070 ticksStart - m (Ljava/lang/String;)Ljava/util/List; method_16067 getDataPoints - m ()J method_16073 timeStart - m ()J method_16071 nanoTime - m ()I method_16072 ticksStop - m ()J method_16068 timeStop - m (Ljava/io/File;)Z method_16069 writeToFile - m ()I method_16074 ticksSpend -c net/minecraft/class_3534 net/minecraft/profiler/DataPoint - m ()I method_15409 getTextColor - m (Lnet/minecraft/class_3534;)I method_15408 compareTo - m (Ljava/lang/Object;)I compareTo compareTo - f Ljava/lang/String; field_15738 name - f D field_15737 rootRelTime - f D field_15739 relTime - f J field_19384 field_223511_c -c net/minecraft/class_4748 net/minecraft/profiler/IProfilerSection - m ()J method_24273 func_230038_b_ - m ()J method_24272 func_230037_a_ - m ()Lit/unimi/dsi/fastutil/objects/Object2LongMap; method_24274 func_230039_c_ -c net/minecraft/class_4758 net/minecraft/profiler/LongTickDetector - m ()Lnet/minecraft/class_3695; method_24339 func_233522_a_ - m (Lnet/minecraft/class_3695;Lnet/minecraft/class_4758;)Lnet/minecraft/class_3695; method_24340 func_233523_a_ - m ()I method_24343 func_233526_c_ - m ()V method_24342 func_233525_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_4758; method_24341 func_233524_a_ - f Ljava/io/File; field_21971 field_233520_e_ - f Lorg/apache/logging/log4j/Logger; field_21967 field_233516_a_ - f Ljava/util/function/LongSupplier; field_21968 field_233517_b_ - f Lnet/minecraft/class_3693; field_21972 field_233521_f_ - f I field_21970 field_233519_d_ - f J field_21969 field_233518_c_ -c net/minecraft/class_1255 net/minecraft/util/concurrent/ThreadTaskExecutor - m (Ljava/lang/Runnable;)V execute execute - m (Ljava/lang/Runnable;)Ljava/lang/Runnable; method_16211 wrapTask - m (Ljava/lang/Runnable;)V method_18858 enqueue - m ()Z method_5384 shouldDeferTasks - m ()I method_21684 getQueueSize - m (Ljava/lang/Runnable;)V method_19537 runImmediately - m ()V method_18855 dropTasks - m (Ljava/util/function/Supplier;)Ljava/util/concurrent/CompletableFuture; method_5385 supplyAsync - m (Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture; method_20493 runAsync - m ()V method_20813 threadYieldPark - m ()V method_5383 drainTasks - m (Ljava/util/function/BooleanSupplier;)V method_18857 driveUntil - m (Ljava/lang/Runnable;)V method_18859 run - m (Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture; method_5382 deferTask - m (Ljava/lang/Runnable;)Ljava/lang/Void; method_5386 func_222818_b - m ()Ljava/lang/Thread; method_3777 getExecutionThread - m ()Z method_18854 isOnExecutionThread - m (Ljava/lang/Runnable;)Z method_18856 canRun - m ()Z method_16075 driveOne - f Ljava/lang/String; field_18318 name - f I field_18319 drivers - f Ljava/util/Queue; field_5750 queue - f Lorg/apache/logging/log4j/Logger; field_5751 LOGGER -c net/minecraft/class_3906 net/minecraft/util/concurrent/ITaskExecutor - m (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; method_27918 func_233528_c_ - m (Ljava/util/concurrent/CompletableFuture;Lcom/mojang/datafixers/util/Either;)V method_27917 func_233527_a_ - m ()V close close - m (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; method_17345 func_213141_a - m (Ljava/lang/String;Ljava/util/function/Consumer;)Lnet/minecraft/class_3906; method_17344 inline - m ()Ljava/lang/String; method_16898 getName - m (Ljava/lang/Object;)V method_16901 enqueue -c net/minecraft/class_3906$1 net/minecraft/util/concurrent/ITaskExecutor$1 - m ()Ljava/lang/String; toString toString - f Ljava/util/function/Consumer; field_17277 field_213158_b - f Ljava/lang/String; field_17276 field_213157_a -c net/minecraft/class_4093 net/minecraft/util/concurrent/RecursiveEventLoop - m ()Z method_18860 isTaskRunning - f I field_18320 running -c net/minecraft/class_3846 net/minecraft/util/concurrent/DelegatedTaskExecutor - m (Lit/unimi/dsi/fastutil/ints/Int2BooleanFunction;)I method_16900 driveWhile - m (I)Z method_16899 func_213147_a - m ()V run run - m ()Z method_16906 isActive - m ()V method_16908 reschedule - m ()Z method_16907 driveOne - m ()Z method_16903 setActive - m ()Ljava/lang/String; toString toString - m ()Z method_16905 shouldSchedule - m (Ljava/util/concurrent/Executor;Ljava/lang/String;)Lnet/minecraft/class_3846; method_16902 create - m ()V method_16904 clearActive - f Lorg/apache/logging/log4j/Logger; field_17040 LOGGER - f Lnet/minecraft/class_3847; field_17039 queue - f Ljava/lang/String; field_17043 name - f Ljava/util/concurrent/Executor; field_17042 delegate - f Ljava/util/concurrent/atomic/AtomicInteger; field_17041 flags -c net/minecraft/class_3847 net/minecraft/util/concurrent/ITaskQueue - m ()Z method_16911 isEmpty - m ()Ljava/lang/Object; method_16909 poll - m (Ljava/lang/Object;)Z method_16910 enqueue -c net/minecraft/class_3847$class_3848 net/minecraft/util/concurrent/ITaskQueue$Priority - m (Lnet/minecraft/class_3847$class_3907;)Z method_16913 enqueue - m (I)Ljava/util/concurrent/ConcurrentLinkedQueue; method_16912 func_219948_a - m ()Ljava/lang/Runnable; method_17346 poll - f Ljava/util/List; field_17044 queues -c net/minecraft/class_3847$class_3907 net/minecraft/util/concurrent/ITaskQueue$RunnableWithPriority - m ()V run run - m ()I method_17347 getPriority - f Ljava/lang/Runnable; field_17279 runnable - f I field_17278 priority -c net/minecraft/class_3847$class_3849 net/minecraft/util/concurrent/ITaskQueue$Single - f Ljava/util/Queue; field_17045 queue -c net/minecraft/class_1257 net/minecraft/util/WorldOptimizer - m ()Lcom/google/common/collect/ImmutableSet; method_28304 func_233533_c_ - m ()Lnet/minecraft/class_2561; method_5394 getStatusText - m ()V method_5404 optimize - m ()Lnet/minecraft/class_26; method_17831 func_219955_j - m (Ljava/lang/Thread;Ljava/lang/Throwable;)V method_5398 func_219956_a - m (Ljava/io/File;Ljava/lang/String;)Z method_17829 func_219954_a - m ()V method_5402 cancel - m (Lnet/minecraft/class_5321;)Ljava/util/List; method_17830 func_233532_b_ - m ()I method_5400 getConverted - m ()I method_5399 getSkipped - m ()Z method_5403 isFinished - m ()F method_5401 getTotalProgress - m (Lnet/minecraft/class_5321;)F method_5393 func_233531_a_ - m ()I method_5397 getTotalChunks - f Z field_5759 done - f Ljava/util/concurrent/ThreadFactory; field_5757 THREAD_FACTORY - f Lnet/minecraft/class_2561; field_5765 statusText - f I field_5766 converted - f I field_5764 skipped - f Z field_5760 active - f Lit/unimi/dsi/fastutil/objects/Object2FloatMap; field_5762 progress - f Lcom/google/common/collect/ImmutableSet; field_25354 field_233529_c_ - f Lorg/apache/logging/log4j/Logger; field_5756 LOGGER - f Lnet/minecraft/class_26; field_5755 savedDataManager - f Lcom/mojang/datafixers/DataFixer; field_24084 field_233530_g_ - f Z field_19225 field_219957_d - f I field_5768 totalChunks - f Lnet/minecraft/class_32$class_5143; field_24083 worldStorage - f Ljava/lang/Thread; field_5767 thread - f Ljava/util/regex/Pattern; field_17622 REGION_FILE_PATTERN - f F field_5763 totalProgress -c net/minecraft/class_3829 net/minecraft/inventory/IClearable - m (Ljava/lang/Object;)V method_16825 clearObj - m ()V method_5448 clear -c net/minecraft/class_1259 net/minecraft/world/BossInfo - m (Z)Lnet/minecraft/class_1259; method_5410 setPlayEndBossMusic - m (Z)Lnet/minecraft/class_1259; method_5411 setCreateFog - m (Z)Lnet/minecraft/class_1259; method_5406 setDarkenSky - m (Lnet/minecraft/class_1259$class_1260;)V method_5416 setColor - m ()F method_5412 getPercent - m ()Lnet/minecraft/class_1259$class_1261; method_5415 getOverlay - m ()Lnet/minecraft/class_2561; method_5414 getName - m ()Ljava/util/UUID; method_5407 getUniqueId - m (Lnet/minecraft/class_2561;)V method_5413 setName - m (Lnet/minecraft/class_1259$class_1261;)V method_5409 setOverlay - m ()Z method_5418 shouldPlayEndBossMusic - m ()Lnet/minecraft/class_1259$class_1260; method_5420 getColor - m ()Z method_5419 shouldCreateFog - m ()Z method_5417 shouldDarkenSky - m (F)V method_5408 setPercent - f Z field_5776 darkenSky - f Ljava/util/UUID; field_5772 uniqueId - f Z field_5775 playEndBossMusic - f Z field_5773 createFog - f Lnet/minecraft/class_1259$class_1260; field_5778 color - f Lnet/minecraft/class_1259$class_1261; field_5779 overlay - f F field_5774 percent - f Lnet/minecraft/class_2561; field_5777 name -c net/minecraft/class_1259$class_1261 net/minecraft/world/BossInfo$Overlay - m (Ljava/lang/String;)Lnet/minecraft/class_1259$class_1261; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_1259$class_1261; method_5424 byName - m ()[Lnet/minecraft/class_1259$class_1261; values values - m ()Ljava/lang/String; method_5425 getName - f [Lnet/minecraft/class_1259$class_1261; field_5792 $VALUES - f Lnet/minecraft/class_1259$class_1261; field_5790 NOTCHED_20 - f Lnet/minecraft/class_1259$class_1261; field_5795 PROGRESS - f Lnet/minecraft/class_1259$class_1261; field_5791 NOTCHED_10 - f Lnet/minecraft/class_1259$class_1261; field_5796 NOTCHED_6 - f Lnet/minecraft/class_1259$class_1261; field_5793 NOTCHED_12 - f Ljava/lang/String; field_5794 name -c net/minecraft/class_1259$class_1260 net/minecraft/world/BossInfo$Color - m (Ljava/lang/String;)Lnet/minecraft/class_1259$class_1260; method_5422 byName - m ()[Lnet/minecraft/class_1259$class_1260; values values - m ()Ljava/lang/String; method_5421 getName - m ()Lnet/minecraft/class_124; method_5423 getFormatting - m (Ljava/lang/String;)Lnet/minecraft/class_1259$class_1260; valueOf valueOf - f [Lnet/minecraft/class_1259$class_1260; field_5789 $VALUES - f Lnet/minecraft/class_124; field_5787 formatting - f Ljava/lang/String; field_5781 name - f Lnet/minecraft/class_1259$class_1260; field_5788 PINK - f Lnet/minecraft/class_1259$class_1260; field_5784 RED - f Lnet/minecraft/class_1259$class_1260; field_5780 BLUE - f Lnet/minecraft/class_1259$class_1260; field_5785 GREEN - f Lnet/minecraft/class_1259$class_1260; field_5782 YELLOW - f Lnet/minecraft/class_1259$class_1260; field_5786 WHITE - f Lnet/minecraft/class_1259$class_1260; field_5783 PURPLE -c net/minecraft/class_1263 net/minecraft/inventory/IInventory - m ()Z method_5442 isEmpty - m (Lnet/minecraft/class_1792;)I method_18861 count - m (Lnet/minecraft/class_1657;)Z method_5443 isUsableByPlayer - m (II)Lnet/minecraft/class_1799; method_5434 decrStackSize - m ()I method_5439 getSizeInventory - m (Lnet/minecraft/class_1657;)V method_5432 closeInventory - m (ILnet/minecraft/class_1799;)Z method_5437 isItemValidForSlot - m (I)Lnet/minecraft/class_1799; method_5441 removeStackFromSlot - m (Ljava/util/Set;)Z method_18862 hasAny - m (I)Lnet/minecraft/class_1799; method_5438 getStackInSlot - m ()I method_5444 getInventoryStackLimit - m (ILnet/minecraft/class_1799;)V method_5447 setInventorySlotContents - m ()V method_5431 markDirty - m (Lnet/minecraft/class_1657;)V method_5435 openInventory -c net/minecraft/class_1258 net/minecraft/inventory/DoubleSidedInventory - m (Lnet/minecraft/class_1263;)Z method_5405 isPartOfLargeChest - f Lnet/minecraft/class_1263; field_5769 upperChest - f Lnet/minecraft/class_1263; field_5771 lowerChest -c net/minecraft/class_1265 net/minecraft/inventory/IInventoryChangedListener - m (Lnet/minecraft/class_1263;)V method_5453 onInventoryChanged -c net/minecraft/class_1262 net/minecraft/inventory/ItemStackHelper - m (Ljava/util/List;I)Lnet/minecraft/class_1799; method_5428 getAndRemove - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2371;)Lnet/minecraft/class_2487; method_5426 saveAllItems - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2371;)V method_5429 loadAllItems - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2371;Z)Lnet/minecraft/class_2487; method_5427 saveAllItems - m (Lnet/minecraft/class_1799;Ljava/util/function/Predicate;IZ)I method_29235 func_233535_a_ - m (Lnet/minecraft/class_1263;Ljava/util/function/Predicate;IZ)I method_29234 func_233534_a_ - m (Ljava/util/List;II)Lnet/minecraft/class_1799; method_5430 getAndSplit -c net/minecraft/class_1267 net/minecraft/world/Difficulty - m (Ljava/lang/String;)Lnet/minecraft/class_1267; method_16691 byName - m ()Ljava/lang/String; method_5460 getTranslationKey - m ()[Lnet/minecraft/class_1267; values values - m ()Lnet/minecraft/class_1267; method_27297 getNextDifficulty - m (I)Lnet/minecraft/class_1267; method_5462 byId - m ()Lnet/minecraft/class_2561; method_5463 getDisplayName - m ()I method_5461 getId - m (I)[Lnet/minecraft/class_1267; method_5459 func_199928_b - m (Ljava/lang/String;)Lnet/minecraft/class_1267; valueOf valueOf - f Ljava/lang/String; field_5806 translationKey - f Lnet/minecraft/class_1267; field_5801 PEACEFUL - f [Lnet/minecraft/class_1267; field_5804 $VALUES - f [Lnet/minecraft/class_1267; field_5800 ID_MAPPING - f Lnet/minecraft/class_1267; field_5807 HARD - f Lnet/minecraft/class_1267; field_5805 EASY - f I field_5803 id - f Lnet/minecraft/class_1267; field_5802 NORMAL -c net/minecraft/class_1264 net/minecraft/inventory/InventoryHelper - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_17348 func_219962_a - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;Lnet/minecraft/class_1263;)V method_5452 dropInventoryItems - m (Lnet/minecraft/class_1937;DDDLnet/minecraft/class_1799;)V method_5449 spawnItemStack - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2371;)V method_17349 dropItems - m (Lnet/minecraft/class_1937;DDDLnet/minecraft/class_1263;)V method_5450 dropInventoryItems - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1263;)V method_5451 dropInventoryItems - f Ljava/util/Random; field_5797 RANDOM -c net/minecraft/class_1268 net/minecraft/util/Hand - m ()[Lnet/minecraft/class_1268; values values - m (Ljava/lang/String;)Lnet/minecraft/class_1268; valueOf valueOf - f Lnet/minecraft/class_1268; field_5810 OFF_HAND - f [Lnet/minecraft/class_1268; field_5809 $VALUES - f Lnet/minecraft/class_1268; field_5808 MAIN_HAND -c net/minecraft/class_1266 net/minecraft/world/DifficultyInstance - m ()F method_5458 getClampedAdditionalDifficulty - m (Lnet/minecraft/class_1267;JJF)F method_5456 calculateAdditionalDifficulty - m ()Lnet/minecraft/class_1267; method_5454 getDifficulty - m (F)Z method_5455 isHarderThan - m ()F method_5457 getAdditionalDifficulty - f F field_5799 additionalDifficulty - f Lnet/minecraft/class_1267; field_5798 worldDifficulty -c net/minecraft/class_1271 net/minecraft/util/ActionResult - m (Ljava/lang/Object;)Lnet/minecraft/class_1271; method_22427 resultSuccess - m (Ljava/lang/Object;)Lnet/minecraft/class_1271; method_22431 resultFail - m ()Ljava/lang/Object; method_5466 getResult - m (Ljava/lang/Object;)Lnet/minecraft/class_1271; method_22430 resultPass - m (Ljava/lang/Object;Z)Lnet/minecraft/class_1271; method_29237 func_233538_a_ - m ()Lnet/minecraft/class_1269; method_5467 getType - m (Ljava/lang/Object;)Lnet/minecraft/class_1271; method_22428 resultConsume - f Ljava/lang/Object; field_5816 result - f Lnet/minecraft/class_1269; field_5815 type -c net/minecraft/class_1269 net/minecraft/util/ActionResultType - m (Ljava/lang/String;)Lnet/minecraft/class_1269; valueOf valueOf - m ()Z method_23665 isSuccessOrConsume - m ()Z method_23666 isSuccess - m ()[Lnet/minecraft/class_1269; values values - m (Z)Lnet/minecraft/class_1269; method_29236 func_233537_a_ - f Lnet/minecraft/class_1269; field_5812 SUCCESS - f Lnet/minecraft/class_1269; field_5814 FAIL - f [Lnet/minecraft/class_1269; field_5813 $VALUES - f Lnet/minecraft/class_1269; field_5811 PASS - f Lnet/minecraft/class_1269; field_21466 CONSUME -c net/minecraft/class_3908 net/minecraft/inventory/container/INamedContainerProvider - m ()Lnet/minecraft/class_2561; method_5476 getDisplayName -c net/minecraft/class_1273 net/minecraft/world/LockCode - m (Lnet/minecraft/class_1799;)Z method_5472 func_219964_a - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1273; method_5473 read - m (Lnet/minecraft/class_2487;)V method_5474 write - f Lnet/minecraft/class_1273; field_5817 EMPTY_CODE - f Ljava/lang/String; field_5818 lock -c net/minecraft/class_4759 net/minecraft/util/ShulkerAABBHelper - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Lnet/minecraft/class_238; method_24344 getOpenedCollisionBox -c net/minecraft/class_1275 net/minecraft/util/INameable - m ()Lnet/minecraft/class_2561; method_5477 getName - m ()Z method_16914 hasCustomName - m ()Lnet/minecraft/class_2561; method_5476 getDisplayName - m ()Lnet/minecraft/class_2561; method_5797 getCustomName -c net/minecraft/class_747 net/minecraft/inventory/container/SimpleNamedContainerProvider - f Lnet/minecraft/class_2561; field_3947 name - f Lnet/minecraft/class_1270; field_17280 inner -c net/minecraft/class_1277 net/minecraft/inventory/Inventory - m (Lnet/minecraft/class_1799;)Z method_20635 func_223371_e_ - m (Lnet/minecraft/class_1799;)Z method_24513 func_233544_f_ - m ()Lnet/minecraft/class_2499; method_7660 write - m (Lnet/minecraft/class_2499;)V method_7659 read - m (Lnet/minecraft/class_1799;)V method_20634 func_223372_c - m (Lnet/minecraft/class_1792;I)Lnet/minecraft/class_1799; method_20631 func_223374_a - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_24825 func_233540_a_ - m (Lnet/minecraft/class_1799;)V method_20633 func_223375_b - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_20632 func_223373_a - m (Lnet/minecraft/class_1799;)Z method_27070 func_233541_b_ - m ()Ljava/lang/String; toString toString - m ()Ljava/util/List; method_24514 func_233543_f_ - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_5491 addItem - m (Lnet/minecraft/class_1265;)V method_5489 addListener - m (Lnet/minecraft/class_1265;)V method_5488 removeListener - f I field_5831 slotsCount - f Lnet/minecraft/class_2371; field_5828 inventoryContents - f Ljava/util/List; field_5829 listeners -c net/minecraft/class_1276 net/minecraft/profiler/Snooper - m ()V method_5482 start - m ()V method_5485 addMemoryStatsToSnooper - m ()Ljava/lang/String; method_5479 getUniqueID - m ()Z method_5483 isSnooperRunning - m ()V method_5487 stop - m (Ljava/lang/String;Ljava/lang/Object;)V method_5481 addClientStat - m ()J method_5484 getMinecraftStartTimeMillis - m (Ljava/lang/String;Ljava/lang/Object;)V method_5480 addStatToSnooper - f J field_5822 minecraftStartTimeMilis - f Ljava/util/Map; field_5825 snooperStats - f Ljava/util/Timer; field_5823 timer - f Ljava/util/Map; field_5826 clientStats - f Lnet/minecraft/class_1279; field_5827 playerStatsCollector - f Z field_5820 isRunning - f Ljava/net/URL; field_5819 serverUrl - f Ljava/lang/Object; field_5824 syncLock - f Ljava/lang/String; field_5821 uniqueID -c net/minecraft/class_1278 net/minecraft/inventory/ISidedInventory - m (ILnet/minecraft/class_1799;Lnet/minecraft/class_2350;)Z method_5493 canExtractItem - m (Lnet/minecraft/class_2350;)[I method_5494 getSlotsForFace - m (ILnet/minecraft/class_1799;Lnet/minecraft/class_2350;)Z method_5492 canInsertItem -c net/minecraft/class_1279 net/minecraft/profiler/ISnooperInfo - m (Lnet/minecraft/class_1276;)V method_5495 fillSnooper -c net/minecraft/class_1286 net/minecraft/util/BedExplosionDamageSource - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_5551 func_233545_a_ -c net/minecraft/class_3954 net/minecraft/inventory/ISidedInventoryProvider - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1278; method_17680 createInventory -c net/minecraft/class_1280 net/minecraft/util/CombatRules - m (FF)F method_5497 getDamageAfterMagicAbsorb - m (FFF)F method_5496 getDamageAfterAbsorb -c net/minecraft/class_1281 net/minecraft/util/CombatEntry - m ()Z method_5502 isLivingDamageSrc - m ()F method_5503 getDamage - m ()Lnet/minecraft/class_1282; method_5499 getDamageSrc - m ()Ljava/lang/String; method_5500 getFallSuffix - m ()F method_5501 getDamageAmount - m ()Lnet/minecraft/class_2561; method_5498 getDamageSrcDisplayName - f F field_5833 fallDistance - f Lnet/minecraft/class_1282; field_5837 damageSrc - f F field_5834 health - f F field_5835 damage - f I field_5836 time - f Ljava/lang/String; field_5838 fallSuffix -c net/minecraft/class_1282 net/minecraft/util/DamageSource - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_2561; method_5506 getDeathMessage - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5524 causeThrownDamage - m ()Ljava/lang/String; method_5525 getDamageType - m ()Lnet/minecraft/class_1297; method_5526 getImmediateSource - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1282; method_5512 causeExplosionDamage - m ()Z method_5514 isDifficultyScaled - m ()Lnet/minecraft/class_1282; method_5508 setDamageBypassesArmor - m ()Lnet/minecraft/class_243; method_5510 getDamageLocation - m (Lnet/minecraft/class_1665;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5522 causeArrowDamage - m ()Lnet/minecraft/class_1282; method_5509 setDamageIsAbsolute - m ()Ljava/lang/String; toString toString - m ()F method_5528 getHungerDamage - m ()Lnet/minecraft/class_1282; method_5516 setDifficultyScaled - m ()Z method_5530 isCreativePlayer - m (Lnet/minecraft/class_1687;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_29238 func_233549_a_ - m ()Z method_5504 isDamageAbsolute - m ()Lnet/minecraft/class_1282; method_5517 setProjectile - m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_1282; method_5532 causePlayerDamage - m ()Lnet/minecraft/class_1282; method_5523 func_233546_a_ - m ()Lnet/minecraft/class_1297; method_5529 getTrueSource - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5536 causeIndirectMagicDamage - m ()Lnet/minecraft/class_1282; method_5518 setExplosion - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5513 causeThornsDamage - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5520 causeTridentDamage - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1282; method_5511 causeMobDamage - m ()Z method_5527 isMagicDamage - m ()Z method_5534 isFireDamage - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1282; method_5519 causeIndirectDamage - m ()Lnet/minecraft/class_1282; method_5505 setDamageAllowedInCreativeMode - m (Lnet/minecraft/class_1927;)Lnet/minecraft/class_1282; method_5531 causeExplosionDamage - m ()Z method_5533 isProjectile - m ()Lnet/minecraft/class_1282; method_5507 setFireDamage - m ()Z method_5535 isExplosion - m ()Z method_5538 canHarmInCreative - m ()Lnet/minecraft/class_1282; method_5515 setMagicDamage - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1282; method_21748 causeBeeStingDamage - m (Lnet/minecraft/class_3855;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_5521 func_233547_a_ - m (Lnet/minecraft/class_1671;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1282; method_24907 func_233548_a_ - m ()Z method_5537 isUnblockable - f Lnet/minecraft/class_1282; field_5852 STARVE - f Z field_5851 magicDamage - f Lnet/minecraft/class_1282; field_5868 FALL - f Ljava/lang/String; field_5841 damageType - f Lnet/minecraft/class_1282; field_5846 MAGIC - f Z field_5857 isDamageAllowedInCreativeMode - f Lnet/minecraft/class_1282; field_5849 OUT_OF_WORLD - f F field_5845 hungerDamage - f Lnet/minecraft/class_1282; field_5865 ANVIL - f Lnet/minecraft/class_1282; field_5856 DRAGON_BREATH - f Z field_5839 damageIsAbsolute - f Lnet/minecraft/class_1282; field_16992 SWEET_BERRY_BUSH - f Lnet/minecraft/class_1282; field_5863 LAVA - f Z field_5853 projectile - f Lnet/minecraft/class_1282; field_5861 LIGHTNING_BOLT - f Lnet/minecraft/class_1282; field_5855 IN_WALL - f Lnet/minecraft/class_1282; field_5859 DROWN - f Lnet/minecraft/class_1282; field_5843 FLY_INTO_WALL - f Lnet/minecraft/class_1282; field_5848 CACTUS - f Z field_5862 explosion - f Z field_5840 isUnblockable - f Lnet/minecraft/class_1282; field_5869 GENERIC - f Lnet/minecraft/class_1282; field_5850 WITHER - f Lnet/minecraft/class_1282; field_5842 DRYOUT - f Lnet/minecraft/class_1282; field_5847 FALLING_BLOCK - f Lnet/minecraft/class_1282; field_5867 IN_FIRE - f Z field_5866 fireDamage - f Lnet/minecraft/class_1282; field_5854 ON_FIRE - f Z field_5864 difficultyScaled - f Lnet/minecraft/class_1282; field_5844 CRAMMING - f Lnet/minecraft/class_1282; field_5858 HOT_FLOOR -c net/minecraft/class_1283 net/minecraft/util/CombatTracker - m ()V method_5539 reset - m ()Lnet/minecraft/class_1309; method_5540 getFighter - m (Lnet/minecraft/class_1282;FF)V method_5547 trackDamage - m ()Lnet/minecraft/class_1281; method_5544 getBestCombatEntry - m ()I method_5546 getCombatDuration - m ()Lnet/minecraft/class_1309; method_5541 getBestAttacker - m ()V method_5542 calculateFallSuffix - m (Lnet/minecraft/class_1281;)Ljava/lang/String; method_5543 getFallSuffix - m ()V method_5545 resetFallSuffix - m ()Lnet/minecraft/class_2561; method_5548 getDeathMessage - f I field_5873 combatEndTime - f Lnet/minecraft/class_1309; field_5877 fighter - f I field_5875 combatStartTime - f Z field_5872 takingDamage - f I field_5876 lastDamageTime - f Ljava/lang/String; field_5871 fallSuffix - f Z field_5874 inCombat - f Ljava/util/List; field_5870 combatEntries -c net/minecraft/class_1284 net/minecraft/util/IndirectEntityDamageSource - f Lnet/minecraft/class_1297; field_5878 indirectEntity -c net/minecraft/class_1285 net/minecraft/util/EntityDamageSource - m ()Lnet/minecraft/class_1285; method_5550 setIsThornsDamage - m ()Z method_5549 getIsThornsDamage - f Z field_5880 isThornsDamage - f Lnet/minecraft/class_1297; field_5879 damageSourceEntity -c net/minecraft/class_1288 net/minecraft/potion/AbsorptionEffect -c net/minecraft/class_1290 net/minecraft/potion/HealthBoostEffect -c net/minecraft/class_1287 net/minecraft/potion/AttackDamageEffect - f D field_5881 bonusPerLevel -c net/minecraft/class_1291 net/minecraft/potion/Effect - m ()I method_5556 getLiquidColor - m ()Ljava/util/Map; method_5565 getAttributeModifierMap - m (II)Z method_5552 isReady - m ()Ljava/lang/String; method_5567 getName - m (I)Lnet/minecraft/class_1291; method_5569 get - m ()Z method_5561 isInstant - m ()Ljava/lang/String; method_5559 getOrCreateDescriptionId - m ()Lnet/minecraft/class_2561; method_5560 getDisplayName - m ()Z method_5573 isBeneficial - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_5131;I)V method_5562 removeAttributesModifiersFromEntity - m ()Lnet/minecraft/class_4081; method_18792 getEffectType - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;Lnet/minecraft/class_1309;ID)V method_5564 affectEntity - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_5131;I)V method_5555 applyAttributesModifiersToEntity - m (Lnet/minecraft/class_1309;I)V method_5572 performEffect - m (ILnet/minecraft/class_1322;)D method_5563 getAttributeModifierAmount - m (Lnet/minecraft/class_1291;)I method_5554 getId - m (Lnet/minecraft/class_1320;Ljava/lang/String;DLnet/minecraft/class_1322$class_1323;)Lnet/minecraft/class_1291; method_5566 addAttributesModifier - f Ljava/util/Map; field_5885 attributeModifierMap - f Lnet/minecraft/class_4081; field_18270 type - f Ljava/lang/String; field_5883 name - f I field_5886 liquidColor -c net/minecraft/class_1289 net/minecraft/potion/InstantEffect -c net/minecraft/class_1293 net/minecraft/potion/EffectInstance - m ()Z method_5581 doesShowParticles - m ()I hashCode hashCode - m ()Z method_5591 isAmbient - m ()Lnet/minecraft/class_1291; method_5579 getPotion - m ()Z method_5592 isShowIcon - m (Lnet/minecraft/class_1309;Ljava/lang/Runnable;)Z method_5585 tick - m ()Ljava/lang/String; method_5586 getEffectName - m (Lnet/minecraft/class_2487;)V method_24277 writeInternal - m (Lnet/minecraft/class_1293;)I method_5587 compareTo - m ()I method_5588 deincrementDuration - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1293; method_5583 read - m ()Z method_5593 getIsPotionDurationMax - m (Z)V method_5580 setPotionDurationMax - m (Lnet/minecraft/class_1309;)V method_5589 performEffect - m (Lnet/minecraft/class_1293;)V method_24276 func_230117_a_ - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_5582 write - m (Lnet/minecraft/class_1291;Lnet/minecraft/class_2487;)Lnet/minecraft/class_1293; method_24275 readInternal - m (Lnet/minecraft/class_1293;)Z method_5590 combine - m ()I method_5584 getDuration - m (Ljava/lang/Object;)I compareTo compareTo - m ()I method_5578 getAmplifier - f Z field_5889 showIcon - f Z field_5890 showParticles - f Z field_5892 ambient - f Lnet/minecraft/class_1291; field_5896 potion - f Z field_5891 isPotionDurationMax - f Lnet/minecraft/class_1293; field_21830 hiddenEffects - f I field_5893 amplifier - f Lorg/apache/logging/log4j/Logger; field_5897 LOGGER - f I field_5895 duration - f Z field_5894 isSplashPotion -c net/minecraft/class_4081 net/minecraft/potion/EffectType - m ()[Lnet/minecraft/class_4081; values values - m ()Lnet/minecraft/class_124; method_18793 getColor - m (Ljava/lang/String;)Lnet/minecraft/class_4081; valueOf valueOf - f Lnet/minecraft/class_4081; field_18272 HARMFUL - f Lnet/minecraft/class_4081; field_18273 NEUTRAL - f [Lnet/minecraft/class_4081; field_18275 $VALUES - f Lnet/minecraft/class_124; field_18274 color - f Lnet/minecraft/class_4081; field_18271 BENEFICIAL -c net/minecraft/class_1294 net/minecraft/potion/Effects - m (ILjava/lang/String;Lnet/minecraft/class_1291;)Lnet/minecraft/class_1291; method_5594 register - f Lnet/minecraft/class_1291; field_5920 WITHER - f Lnet/minecraft/class_1291; field_5914 HEALTH_BOOST - f Lnet/minecraft/class_1291; field_18980 HERO_OF_THE_VILLAGE - f Lnet/minecraft/class_1291; field_5903 HUNGER - f Lnet/minecraft/class_1291; field_5911 WEAKNESS - f Lnet/minecraft/class_1291; field_5899 POISON - f Lnet/minecraft/class_1291; field_5902 LEVITATION - f Lnet/minecraft/class_1291; field_5901 MINING_FATIGUE - f Lnet/minecraft/class_1291; field_5926 LUCK - f Lnet/minecraft/class_1291; field_5910 STRENGTH - f Lnet/minecraft/class_1291; field_5898 ABSORPTION - f Lnet/minecraft/class_1291; field_5904 SPEED - f Lnet/minecraft/class_1291; field_5922 SATURATION - f Lnet/minecraft/class_1291; field_5909 SLOWNESS - f Lnet/minecraft/class_1291; field_5912 GLOWING - f Lnet/minecraft/class_1291; field_5917 HASTE - f Lnet/minecraft/class_1291; field_5916 NAUSEA - f Lnet/minecraft/class_1291; field_5924 REGENERATION - f Lnet/minecraft/class_1291; field_5907 RESISTANCE - f Lnet/minecraft/class_1291; field_5915 INSTANT_HEALTH - f Lnet/minecraft/class_1291; field_5921 INSTANT_DAMAGE - f Lnet/minecraft/class_1291; field_5913 JUMP_BOOST - f Lnet/minecraft/class_1291; field_5905 INVISIBILITY - f Lnet/minecraft/class_1291; field_5900 DOLPHINS_GRACE - f Lnet/minecraft/class_1291; field_5919 BLINDNESS - f Lnet/minecraft/class_1291; field_16595 BAD_OMEN - f Lnet/minecraft/class_1291; field_5925 NIGHT_VISION - f Lnet/minecraft/class_1291; field_5908 UNLUCK - f Lnet/minecraft/class_1291; field_5918 FIRE_RESISTANCE - f Lnet/minecraft/class_1291; field_5906 SLOW_FALLING - f Lnet/minecraft/class_1291; field_5923 WATER_BREATHING - f Lnet/minecraft/class_1291; field_5927 CONDUIT_POWER -c net/minecraft/class_1294$1 net/minecraft/potion/Effects$1 -c net/minecraft/class_1292 net/minecraft/potion/EffectUtils - m (Lnet/minecraft/class_1309;)I method_5575 getMiningSpeedup - m (Lnet/minecraft/class_1309;)Z method_5576 hasMiningSpeedup - m (Lnet/minecraft/class_1309;)Z method_5574 canBreatheUnderwater - m (Lnet/minecraft/class_1293;F)Ljava/lang/String; method_5577 getPotionDurationString -c net/minecraft/class_1296 net/minecraft/entity/AgeableEntity - m ()I method_5618 getGrowingAge - m ()V method_5619 onGrowingAdult - m ()Z method_19184 canBreed - m (I)V method_5614 setGrowingAge - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1296; method_5613 func_241840_a - m (IZ)V method_5620 ageUp - m (I)V method_5615 addGrowth - f Lnet/minecraft/class_2940; field_5949 BABY - f I field_5950 growingAge - f I field_5947 forcedAgeTimer - f I field_5948 forcedAge -c net/minecraft/class_1296$class_4697 net/minecraft/entity/AgeableEntity$AgeableData - m ()F method_22437 getBabySpawnProbability - m ()Z method_22436 canBabySpawn - m ()V method_22435 incrementIndexInGroup - m ()I method_22432 getIndexInGroup - f I field_20684 indexInGroup - f F field_20686 babySpawnProbability - f Z field_20685 canBabySpawn -c net/minecraft/class_1297 net/minecraft/entity/Entity - m (DDD)V method_5762 addVelocity - m (Lnet/minecraft/class_1935;)Lnet/minecraft/class_1542; method_5706 entityDropItem - m (Lnet/minecraft/class_2561;)V method_5665 setCustomName - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_243;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_5664 applyPlayerInteraction - m ()Z method_5696 doesEntityNotTriggerPressurePlate - m (Lnet/minecraft/class_2350$class_2351;D)D method_18797 calculatePistonDeltas - m ()Lnet/minecraft/class_238; method_5830 getRenderBoundingBox - m ()Ljava/util/UUID; method_5667 getUniqueID - m ()Z method_5798 isInBubbleColumn - m (D)D method_23323 getPosYHeight - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_18794 handlePistonMovement - m ()Lnet/minecraft/class_243; method_18798 getMotion - m ()Z method_5740 hasNoGravity - m (Lnet/minecraft/class_243;)V method_30228 func_242277_a - m ()Z method_7325 isSpectator - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1297;)V method_24202 func_233565_a_ - m ()Z method_5771 isInLava - m (Lnet/minecraft/class_1297;)V method_5644 applyOrientationToEntity - m (Z)V method_5684 setInvulnerable - m ()Lnet/minecraft/class_3414; method_5737 getSwimSound - m (Lnet/minecraft/class_2487;)Z method_5662 writeUnlessPassenger - m (D)D method_23322 getPosXRandom - m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_5454; method_30329 func_241829_a - m ()I method_5850 getMaxFallHeight - m ()V method_5773 tick - m (Lnet/minecraft/class_243;FF)Lnet/minecraft/class_243; method_18795 getAbsoluteMotion - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Z)Ljava/util/Optional; method_30330 func_241830_a - m ()Z method_24828 isOnGround - m ()Lnet/minecraft/class_238; method_5829 getBoundingBox - m ()I method_5691 getPermissionLevel - m (Lnet/minecraft/class_3414;FF)V method_5783 playSound - m (Z)V method_5764 onEnterBubbleColumn - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_243;Lnet/minecraft/class_238;Lnet/minecraft/class_1937;Lnet/minecraft/class_3726;Lnet/minecraft/class_3538;)Lnet/minecraft/class_243; method_20736 collideBoundingBoxHeuristically - m (FI)V method_5683 setHeadRotation - m ()V method_5839 handleRunningEffect - m (Lnet/minecraft/class_1297;)Z method_5804 startRiding - m (D)D method_23316 getPosXWidth - m ()Z method_5778 isInRain - m (Ljava/lang/String;)Z method_5738 removeTag - m (Lnet/minecraft/class_238;)V method_5857 setBoundingBox - m ()V method_5768 onKillCommand - m ()Z method_5822 isNonBoss - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1542; method_5775 entityDropItem - m (DDD)V method_5750 setVelocity - m ()V method_5825 outOfWorld - m (Lnet/minecraft/class_4050;)V method_18380 setPose - m ()V method_5879 performHurtAnimation - m (Lnet/minecraft/class_1297;)Z method_5860 canBeRidden - m (Lnet/minecraft/class_2338;FF)V method_5725 moveToBlockPosAndAngles - m (Lnet/minecraft/class_1657;)V method_5694 onCollideWithPlayer - m ()Z method_27298 shouldSpawnRunningEffects - m ()Lnet/minecraft/class_1299; method_5864 getType - m (Lnet/minecraft/class_1297;ILnet/minecraft/class_1282;)V method_5716 awardKillScore - m (Z)V method_5700 onEnterBubbleColumnWithAirAbove - m ()Lnet/minecraft/class_3414; method_5672 getHighspeedSplashSound - m ()V method_30076 setDead - m ()V method_5646 extinguish - m (Lnet/minecraft/class_243;Lnet/minecraft/class_238;Lnet/minecraft/class_3538;)Lnet/minecraft/class_243; method_20737 collideBoundingBox - m ()Z method_29240 func_233578_ci_ - m (Lnet/minecraft/class_2487;)V method_5651 read - m (D)V method_5840 setRenderDistanceWeight - m (Lnet/minecraft/class_238;)Z method_5629 isLiquidPresentInAABB - m (DDD)Z method_5727 isInRangeToRender3d - m ()Lnet/minecraft/class_1297; method_5642 getControllingPassenger - m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_5673 setItemStackToSlot - m (Lnet/minecraft/class_3494;)Z method_5777 areEyesInFluid - m (Lnet/minecraft/class_270;)Z method_5645 isOnScoreboardTeam - m ()Lnet/minecraft/class_2561; method_23315 getProfessionName - m ()Lnet/minecraft/class_3419; method_5634 getSoundCategory - m (Lnet/minecraft/class_4050;)Z method_20233 isPoseClear - m (DDDFFIZ)V method_5759 setPositionAndRotationDirect - m (Lnet/minecraft/class_4050;)Lnet/minecraft/class_238; method_20343 getBoundingBox - m (FF)Z method_5747 onLivingFall - m (F)Lnet/minecraft/class_243; method_5828 getLook - m ()Lnet/minecraft/class_3414; method_5625 getSplashSound - m (Lnet/minecraft/class_1297;)V method_5627 addPassenger - m (Z)V method_5648 setInvisible - m ()I method_5628 getEntityId - m (I)Z method_5687 hasPermissionLevel - m ()Lnet/minecraft/class_2350; method_5735 getHorizontalFacing - m ()Z method_5754 func_233577_ch_ - m (Lnet/minecraft/class_4050;)Lnet/minecraft/class_4048; method_18377 getSize - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_2561; method_5856 func_233573_b_ - m (F)V method_5636 setRenderYawOffset - m (D)Z method_5640 isInRangeToRenderDist - m ()I method_5806 getPortalCooldown - m (DDD)V method_20620 teleportKeepLoaded - m ()Z method_5624 isSprinting - m (Lnet/minecraft/class_243;)D method_5707 getDistanceSq - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_1297;)Z method_26823 func_233561_a_ - m ()Z method_5655 isInvulnerable - m (Lnet/minecraft/class_1297;)V method_5793 removePassenger - m ()V method_5746 doWaterSplashEffect - m ()Ljava/lang/Iterable; method_5877 getHeldEquipment - m ()V method_18379 updatePortal - m ()Lnet/minecraft/class_2680; method_25936 getStateBelow - m ()F method_17682 getHeight - m ()I method_20802 getFireTimer - m (F)Lnet/minecraft/class_243; method_18864 getUpVector - m ()Z method_5701 isSilent - m ()Lnet/minecraft/class_243; method_29919 func_241205_ce_ - m (Lnet/minecraft/class_1799;F)Lnet/minecraft/class_1542; method_5699 entityDropItem - m (Lnet/minecraft/class_3494;)D method_5861 func_233571_b_ - m (Lnet/minecraft/class_2487;)V method_5749 readAdditional - m (Z)V method_5834 setGlowing - m (Lnet/minecraft/class_1297;D)Z method_24516 isEntityInRange - m (FF)V method_5710 setRotation - m ()Lnet/minecraft/class_2350; method_5755 getAdjustedHorizontalFacing - m ()Z method_5732 canBeAttackedWithItem - m ()V method_5730 setOnFireFromLava - m (F)V method_5847 setRotationYawHead - m (I)V method_5855 setAir - m ()Ljava/lang/String; method_5766 func_242283_n - m ()Z method_5833 ignoreItemEntityData - m (DDD)V method_5632 pushOutOfBlocks - m (Ljava/lang/String;)Z method_5780 addTag - m ()Z method_18276 isCrouching - m ()Ljava/lang/String; method_5845 getCachedUniqueIdString - m ()V method_5713 updateWaterState - m (Lnet/minecraft/class_1935;I)Lnet/minecraft/class_1542; method_5870 entityDropItem - m ()Ljava/lang/Iterable; method_5661 getArmorInventoryList - m (Z)V method_5796 setSwimming - m (Lnet/minecraft/class_1297;)Z method_5818 canFitPassenger - m (Lnet/minecraft/class_243;)V method_18799 setMotion - m ()Lnet/minecraft/class_2338; method_23312 getOnPosition - m ()Lnet/minecraft/class_2168; method_5671 getCommandSource - m ()Lnet/minecraft/class_270; method_5781 getTeam - m ()Z method_5776 makeFlySound - m (Lnet/minecraft/class_1282;F)Z method_5643 attackEntityFrom - m (Lnet/minecraft/class_4050;)F method_18381 getEyeHeight - m ()Ljava/lang/String; method_5689 func_242284_o - m (I)Z method_5795 getFlag - m ()V method_18382 recalculateSize - m (Ljava/lang/Object;)Z equals equals - m ()Z method_5659 isImmuneToExplosions - m (Lnet/minecraft/class_243;)D method_17996 horizontalMag - m ()F method_17681 getWidth - m ()Ljava/lang/String; method_5820 getScoreboardName - m ()V method_5842 updateRidden - m ()Z method_21752 isDescending - m (B)V method_5711 handleStatusUpdate - m (Z)V method_5728 setSprinting - m ()Z method_5876 func_233566_aG_ - m ()Ljava/lang/Iterable; method_5743 getEquipmentAndArmor - m ()Lnet/minecraft/class_1297; method_5668 getLowestRidingEntity - m (DDD)V method_23327 setRawPosition - m ()Lnet/minecraft/class_243; method_5720 getLookVec - m (Lnet/minecraft/class_1297;)Z method_5722 isOnSameTeam - m ()V method_5693 registerData - m ()I method_5741 getMaxInPortalTime - m ()F method_5791 getRotationYawHead - m ()Lnet/minecraft/class_2338; method_24515 getPosition - m ()V method_5852 doBlockCollisions - m (Lnet/minecraft/class_3494;D)Z method_5692 handleFluidAcceleration - m ()V method_18375 detach - m ()Z method_30230 func_242280_ah - m (Lnet/minecraft/class_1313;Lnet/minecraft/class_243;)V method_5784 move - m (DDD)V method_18800 setMotion - m ()Z method_30948 func_241845_aY - m ()Ljava/lang/String; method_5761 func_233581_o_ - m ()D method_29241 func_233579_cu_ - m ()Z method_21751 isDiscrete - m (Z)V method_5660 setSneaking - m (Lnet/minecraft/class_243;)V method_29495 moveForced - m ()Lnet/minecraft/class_4050; method_18376 getPose - m ()V method_5790 updateSwimming - m (Lnet/minecraft/class_1297;)Z method_5779 isEntityEqual - m (Lnet/minecraft/class_1927;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;F)F method_5774 getExplosionResistance - m ()Ljava/util/Collection; method_5736 getRecursivePassengers - m ()Ljava/util/List; method_5685 getPassengers - m (Lnet/minecraft/class_2487;)V method_5652 writeAdditional - m (F)Lnet/minecraft/class_243; method_5836 getEyePosition - m ()Lnet/minecraft/class_2945; method_5841 getDataManager - m ()Z method_5733 getAlwaysRenderNameTagForRender - m (Lnet/minecraft/class_2183$class_2184;Lnet/minecraft/class_243;)V method_5702 lookAt - m (DD)V method_5872 rotateTowards - m ()Ljava/util/Set; method_5752 getTags - m ()Z method_21750 isSuppressingBounce - m (F)Lnet/minecraft/class_243; method_30950 func_242282_l - m ()Ljava/lang/String; method_5653 getEntityString - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_30332 func_242276_a - m ()V method_30229 func_242279_ag - m (DDF)Lnet/minecraft/class_243; method_24826 func_233559_a_ - m (Lnet/minecraft/class_1297;)Z method_5698 hitByEntity - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_5874 func_241847_a - m ()Ljava/lang/String; method_5849 func_233582_p_ - m ()V method_5982 checkDespawn - m ()V method_5760 decrementTimeUntilPortal - m (Ljava/lang/Class;)Z method_5703 isPassenger - m ()Z method_5757 isEntityInsideOpaqueBlock - m ()Lnet/minecraft/class_243; method_30227 func_242274_V - m ()Lnet/minecraft/class_243; method_5663 getForward - m ()Z method_5869 canSwim - m ()Lnet/minecraft/class_1297; method_5854 getRidingEntity - m (Z)V method_5875 setNoGravity - m (I)V method_20803 forceFireTicks - m (DDD)V method_24203 moveForced - m ()I method_22861 getTeamColor - m (Lnet/minecraft/class_2680;)Z method_29494 func_233572_b_ - m ()I method_5669 getAir - m (Lnet/minecraft/class_2350$class_2351;Lnet/minecraft/class_5459$class_5460;)Lnet/minecraft/class_243; method_30633 func_241839_a - m ()Z method_5807 isCustomNameVisible - m ()F method_5871 getCollisionBorderSize - m ()Z method_21749 isSteppingCarefully - m ()D method_23321 getPosZ - m (F)Lnet/minecraft/class_243; method_31166 func_241842_k - m ()Lnet/minecraft/class_241; method_5802 getPitchYaw - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_5813 func_211516_a_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_30022 func_241338_a_ - m (Lnet/minecraft/class_1297;)V method_5719 copyLocationAndAnglesFrom - m ()I method_5676 getFireImmuneTicks - m ()Z method_5805 isAlive - m ()Ljava/util/stream/Stream; method_24204 getSelfAndPassengers - m ()Lnet/minecraft/class_2338; method_23314 getPositionUnderneath - m (Z)V method_5803 setSilent - m ()Z method_5816 isInWaterOrBubbleColumn - m ()Lnet/minecraft/class_2596; method_18002 createSpawnPacket - m (ILnet/minecraft/class_1799;)Z method_5758 replaceItemInInventory - m (Lnet/minecraft/class_2680;)V method_5622 onInsideBlock - m ()V method_5670 baseTick - m (DDD)V method_5859 setPositionAndUpdate - m (I)V method_5639 setFire - m ()I method_5748 getMaxAir - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_5712 playStepSound - m ()Z method_5715 isSneaking - m (Lnet/minecraft/class_3222;)Z method_5680 isSpectatedByPlayer - m ()D method_23320 getPosYEye - m (Lnet/minecraft/class_1297;)F method_5739 getDistance - m ()D method_5824 getRenderDistanceWeight - m (Lnet/minecraft/class_1297;)V method_5878 copyDataFromOld - m ()V method_29239 dismount - m (Ljava/util/UUID;)V method_5826 setUniqueId - m ()Z method_5675 isPushedByWater - m (F)F method_5705 getYaw - m ()V method_5792 resetPositionToBB - m ()F method_5751 getEyeHeight - m ()Z method_5637 isInWaterRainOrBubbleColumn - m (Lnet/minecraft/class_1657;)Z method_5756 isInvisibleToPlayer - m ()Lnet/minecraft/class_243; method_19538 getPositionVec - m ()V method_23311 recenterBoundingBox - m (I)V method_5838 setEntityId - m ()Z method_5638 shouldSetPosAfterLoading - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_30632 func_242278_a - m ()Z method_5788 canBeRiddenInWater - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_17835 getAllowedMovement - m ()D method_23319 getPosYRandom - m (Lnet/minecraft/class_4050;Lnet/minecraft/class_4048;)F method_18378 getEyeHeight - m ()Lnet/minecraft/class_1937; method_5770 getEntityWorld - m (Lnet/minecraft/class_3222;)V method_5837 addTrackingPlayer - m (Z)V method_24830 setOnGround - m (Lnet/minecraft/class_1297;)Z method_5626 isPassenger - m ()V method_5772 removePassengers - m (Lnet/minecraft/class_1297;)D method_5858 getDistanceSq - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5459$class_5460;)Lnet/minecraft/class_5454; method_30331 func_242275_a - m (DDD)V method_18003 setPacketCoordinates - m (Lnet/minecraft/class_243;Lnet/minecraft/class_238;Lnet/minecraft/class_4538;Lnet/minecraft/class_3726;Lnet/minecraft/class_3538;)Lnet/minecraft/class_243; method_17833 getAllowedMovement - m ()Z method_5767 isInvisible - m ()Z method_5810 canBePushed - m (DDD)Z method_5654 isOffsetPositionInLiquid - m ()Lnet/minecraft/server/MinecraftServer; method_5682 getServer - m (Lnet/minecraft/class_3222;)V method_5742 removeTrackingPlayer - m ()Z method_5782 isBeingRidden - m (Lnet/minecraft/class_1297;)V method_5697 applyEntityCollision - m ()Z method_5787 canPassengerSteer - m ()Z method_5721 isWet - m (Lnet/minecraft/class_2415;)F method_5763 getMirroredYaw - m (F)F method_5695 getPitch - m ()F method_5867 determineNextStepDistance - m ()Z method_5709 isLiving - m (DDDFF)V method_5808 setLocationAndAngles - m (Lnet/minecraft/class_1297;)Z method_5794 isRidingSameEntity - m (Lnet/minecraft/class_2470;)F method_5832 getRotatedYaw - m ()Lnet/minecraft/class_3619; method_5657 getPushReaction - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1313;)Lnet/minecraft/class_243; method_18796 maybeBackOffFromEdge - m ()D method_23318 getPosY - m (FF)Lnet/minecraft/class_243; method_18863 calculateUpVector - m ()Z method_5851 isGlowing - m ()V method_5650 remove - m (Lnet/minecraft/class_1297;)Z method_5821 isRidingOrBeingRiddenBy - m (F)Lnet/minecraft/class_243; method_30951 getLeashPosition - m ()Z method_5863 canBeCollidedWith - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_5647 writeWithoutTypeId - m (IZ)V method_5729 setFlag - m ()I hashCode hashCode - m (DDD)V method_5814 setPosition - m (Lnet/minecraft/class_1927;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;F)Z method_5853 canExplosionDestroyBlock - m (DDDFF)V method_5641 setPositionAndRotation - m ()Z method_5799 isInWater - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297$class_4738;)V method_24201 positionRider - m (FF)Lnet/minecraft/class_243; method_5631 getVectorForRotation - m ()Z method_5765 isPassenger - m ([D)Lnet/minecraft/class_2499; method_5846 newDoubleNBTList - m ()D method_23317 getPosX - m ()D method_5621 getMountedYOffset - m (Lnet/minecraft/class_2940;)V method_5674 notifyDataManagerChange - m (FLnet/minecraft/class_243;)V method_5724 moveRelative - m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_1297; method_5731 changeDimension - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;)V method_5723 applyEnchantments - m (DFZ)Lnet/minecraft/class_239; method_5745 pick - m ()Z method_20448 isVisuallySwimming - m (Lnet/minecraft/class_1937;)V method_5866 setWorld - m ()V method_5823 preparePlayerToSpawn - m ()F method_23326 getSpeedFactor - m (ZLjava/util/Set;)V method_5868 getRecursivePassengers - m (DDD)V method_22862 forceSetPosition - m ()V method_5785 markVelocityChanged - m (F)F method_5801 playFlySound - m (Lnet/minecraft/class_2338;)V method_5717 setPortal - m ()Z method_5817 isOnePlayerRiding - m ()Z method_5753 isImmuneToFire - m (D)D method_23325 getPosZRandom - m ()V method_5630 updateEyesInWater - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_243; method_24829 func_230268_c_ - m (Lnet/minecraft/class_2487;)Z method_5786 writeUnlessRemoved - m (F)V method_5734 playSwimSound - m (Lnet/minecraft/class_1282;)Z method_5679 isInvulnerableTo - m ()Z method_5809 isBurning - m (DDD)D method_5649 getDistanceSq - m (Lnet/minecraft/class_1297;)Z method_30949 canCollide - m ()D method_5678 getYOffset - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_243;)V method_5844 setMotionMultiplier - m ()Z method_20232 isActualySwimming - m ()F method_23313 getJumpFactor - m (DDD)V method_30634 func_242281_f - m ()Lnet/minecraft/class_2568; method_5769 getHoverEvent - m (Z)V method_5880 setCustomNameVisible - m ()Z method_5862 canRenderOnFire - m (DZLnet/minecraft/class_2680;Lnet/minecraft/class_2338;)V method_5623 updateFallState - m ()V method_5848 stopRiding - m ()Z method_5658 canTriggerWalking - m (D)D method_23324 getPosZWidth - m ()F method_5718 getBrightness - m ()Z method_5681 isSwimming - m (Lnet/minecraft/class_129;)V method_5819 fillCrashReport - m (Lnet/minecraft/class_1297;)V method_5865 updatePassenger - m (Lnet/minecraft/class_1297;Z)Z method_5873 startRiding - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1538;)V method_5800 func_241841_a - m ([F)Lnet/minecraft/class_2499; method_5726 newFloatNBTList - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_5688 processInitialInteract - f F field_5982 prevRotationYaw - f Lnet/minecraft/class_2940; field_5975 CUSTOM_NAME_VISIBLE - f Z field_25154 isLoaded - f Lnet/minecraft/class_243; field_22467 positionVec - f D field_6038 lastTickPosX - f Z field_5958 glowing - f F field_5965 rotationPitch - f Lnet/minecraft/class_2940; field_5962 SILENT - f Ljava/lang/String; field_5981 cachedUniqueIdString - f F field_6017 fallDistance - f F field_6031 rotationYaw - f Lnet/minecraft/class_2338; field_5991 field_242271_ac - f Lnet/minecraft/class_2940; field_5995 NO_GRAVITY - f Z field_5953 firstUpdate - f Lnet/minecraft/class_3494; field_25599 field_241335_O_ - f F field_5994 distanceWalkedOnStepModified - f Lnet/minecraft/class_238; field_6005 boundingBox - f I field_6008 hurtResistantTime - f D field_5969 prevPosZ - f F field_5973 distanceWalkedModified - f Lnet/minecraft/class_2940; field_5990 FLAGS - f Lnet/minecraft/class_2945; field_6011 dataManager - f Ljava/util/UUID; field_6021 entityUniqueID - f Lnet/minecraft/class_243; field_17046 motionMultiplier - f D field_6036 prevPosY - f Lnet/minecraft/class_1297; field_6034 ridingEntity - f F field_18066 eyeHeight - f Lnet/minecraft/class_243; field_18276 motion - f Lnet/minecraft/class_2940; field_18064 POSE - f I field_5972 portalCounter - f Z field_5963 inPortal - f Ljava/util/Random; field_5974 rand - f Z field_6000 eyesInWater - f D field_6014 prevPosX - f Ljava/util/List; field_6030 EMPTY_EQUIPMENT - f Ljava/util/List; field_5979 passengers - f J field_5996 pistonDeltasGameTime - f Z field_5983 forceSpawn - f Z field_5957 inWater - f F field_6039 prevDistanceWalkedModified - f I field_5956 fire - f F field_6022 nextFlap - f I field_5951 rideCooldown - f Z field_5988 removed - f Z field_23807 preventEntitySpawning - f I field_6012 ticksExisted - f Z field_6007 isAirBorne - f Lnet/minecraft/class_2338; field_22468 position - f F field_6003 nextStepDistance - f Lorg/apache/logging/log4j/Logger; field_5955 LOGGER - f Z field_5985 ignoreFrustumCheck - f Z field_6037 velocityChanged - f F field_5968 entityCollisionReduction - f I field_5986 entityId - f Z field_5992 collidedVertically - f I field_5980 chunkCoordZ - f [D field_5993 pistonDeltas - f Z field_5966 isPositionDirty - f Z field_5960 noClip - f Z field_5976 collidedHorizontally - f I field_5959 chunkCoordY - f F field_6013 stepHeight - f Lnet/minecraft/class_1937; field_6002 world - f Lnet/minecraft/class_1299; field_5961 type - f Ljava/util/Set; field_6029 tags - f Z field_6009 invulnerable - f Z field_5952 onGround - f I field_6024 chunkCoordX - f Lit/unimi/dsi/fastutil/objects/Object2DoubleMap; field_5964 eyesFluidLevel - f D field_5989 lastTickPosZ - f Z field_6016 addedToChunk - f D field_5999 renderDistanceWeight - f Lnet/minecraft/class_4048; field_18065 size - f Lnet/minecraft/class_243; field_25750 field_242272_av - f Ljava/util/concurrent/atomic/AtomicInteger; field_5978 NEXT_ENTITY_ID - f Lnet/minecraft/class_2940; field_6032 AIR - f F field_6004 prevRotationPitch - f Lnet/minecraft/class_238; field_6025 ZERO_AABB - f I field_6018 field_242273_aw - f D field_5971 lastTickPosY - f Lnet/minecraft/class_2940; field_6027 CUSTOM_NAME -c net/minecraft/class_1297$class_4738 net/minecraft/entity/Entity$IMoveCallback - m (Lnet/minecraft/class_1297;DDD)V accept accept -c net/minecraft/class_1297$1 net/minecraft/entity/Entity$1 - f [I field_6041 field_210287_a - f [I field_6040 field_210288_b -c net/minecraft/class_1295 net/minecraft/entity/AreaEffectCloudEntity - m ()Z method_5611 shouldIgnoreRadius - m (F)V method_5596 setRadiusPerTick - m (I)V method_5602 setColor - m (Z)V method_5598 setIgnoreRadius - m (F)V method_5609 setRadiusOnUse - m (Lnet/minecraft/class_1293;)V method_5610 addEffect - m (F)V method_5603 setRadius - m ()F method_5599 getRadius - m ()V method_5597 updateFixedColor - m (Lnet/minecraft/class_1842;)V method_5612 setPotion - m (Lnet/minecraft/class_2394;)V method_5608 setParticleData - m (I)V method_5604 setDuration - m (I)V method_5595 setWaitTime - m ()Lnet/minecraft/class_1309; method_5601 getOwner - m ()I method_5605 getDuration - m ()Lnet/minecraft/class_2394; method_5600 getParticleData - m ()I method_5606 getColor - m (Lnet/minecraft/class_1309;)V method_5607 setOwner - f Ljava/util/UUID; field_5940 ownerUniqueId - f Lnet/minecraft/class_2940; field_5936 COLOR - f Lnet/minecraft/class_2940; field_5944 IGNORE_RADIUS - f Ljava/util/List; field_5934 effects - f Ljava/util/Map; field_5942 reapplicationDelayMap - f Lnet/minecraft/class_2940; field_5931 PARTICLE - f Lnet/minecraft/class_1309; field_5943 owner - f I field_5937 reapplicationDelay - f I field_5941 waitTime - f I field_5939 duration - f Lnet/minecraft/class_2940; field_5938 RADIUS - f Z field_5928 colorSet - f Lnet/minecraft/class_1842; field_5933 potion - f Lorg/apache/logging/log4j/Logger; field_5935 PRIVATE_LOGGER - f F field_5930 radiusPerTick - f F field_5929 radiusOnUse - f I field_5932 durationOnUse -c net/minecraft/class_4048 net/minecraft/entity/EntitySize - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_238; method_30757 func_242286_a - m (F)Lnet/minecraft/class_4048; method_18383 scale - m (DDD)Lnet/minecraft/class_238; method_30231 func_242285_a - m (FF)Lnet/minecraft/class_4048; method_19539 scale - m (FF)Lnet/minecraft/class_4048; method_18385 fixed - m (FF)Lnet/minecraft/class_4048; method_18384 flexible - f Z field_18069 fixed - f F field_18067 width - f F field_18068 height -c net/minecraft/class_1301 net/minecraft/util/EntityPredicates - m (Lnet/minecraft/class_1297;)Z method_5907 func_233587_c_ - m (DDDD)Ljava/util/function/Predicate; method_5909 withinRange - m (Lnet/minecraft/class_1297;)Z method_5910 func_200824_d - m (Lnet/minecraft/class_1297;)Z method_24517 func_200818_c - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_270;Lnet/minecraft/class_270$class_271;Lnet/minecraft/class_1297;)Z method_5915 func_233586_a_ - m (Lnet/minecraft/class_1297;)Ljava/util/function/Predicate; method_5911 pushableBy - m (Lnet/minecraft/class_1297;)Z method_5914 func_200822_e - m (Lnet/minecraft/class_1297;)Z method_5908 func_200821_f - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Z method_5906 func_233585_a_ - m (DDDDLnet/minecraft/class_1297;)Z method_5912 func_233584_a_ - m (Lnet/minecraft/class_1297;)Ljava/util/function/Predicate; method_5913 notRiding - f Ljava/util/function/Predicate; field_6152 HAS_INVENTORY - f Ljava/util/function/Predicate; field_6153 IS_STANDALONE - f Ljava/util/function/Predicate; field_6157 IS_LIVING_ALIVE - f Ljava/util/function/Predicate; field_6154 IS_ALIVE - f Ljava/util/function/Predicate; field_6155 NOT_SPECTATING - f Ljava/util/function/Predicate; field_22280 CAN_HOSTILE_AI_TARGET - f Ljava/util/function/Predicate; field_6156 CAN_AI_TARGET -c net/minecraft/class_1301$class_1302 net/minecraft/util/EntityPredicates$ArmoredMob - m (Lnet/minecraft/class_1297;)Z method_5916 test - m (Ljava/lang/Object;)Z test test - f Lnet/minecraft/class_1799; field_6158 armor -c net/minecraft/class_1304 net/minecraft/inventory/EquipmentSlotType - m ()Ljava/lang/String; method_5923 getName - m ()I method_5926 getSlotIndex - m ()I method_5927 getIndex - m (Ljava/lang/String;)Lnet/minecraft/class_1304; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_1304; method_5924 fromString - m (Lnet/minecraft/class_1304$class_1305;I)Lnet/minecraft/class_1304; method_20234 fromSlotTypeAndIndex - m ()[Lnet/minecraft/class_1304; values values - m ()Lnet/minecraft/class_1304$class_1305; method_5925 getSlotType - f Lnet/minecraft/class_1304$class_1305; field_6170 slotType - f Lnet/minecraft/class_1304; field_6174 CHEST - f Lnet/minecraft/class_1304; field_6169 HEAD - f Ljava/lang/String; field_6175 name - f I field_6167 slotIndex - f Lnet/minecraft/class_1304; field_6171 OFFHAND - f Lnet/minecraft/class_1304; field_6166 FEET - f I field_6168 index - f Lnet/minecraft/class_1304; field_6172 LEGS - f [Lnet/minecraft/class_1304; field_6176 $VALUES - f Lnet/minecraft/class_1304; field_6173 MAINHAND -c net/minecraft/class_1304$class_1305 net/minecraft/inventory/EquipmentSlotType$Group - m (Ljava/lang/String;)Lnet/minecraft/class_1304$class_1305; valueOf valueOf - m ()[Lnet/minecraft/class_1304$class_1305; values values - f Lnet/minecraft/class_1304$class_1305; field_6177 HAND - f Lnet/minecraft/class_1304$class_1305; field_6178 ARMOR - f [Lnet/minecraft/class_1304$class_1305; field_6179 $VALUES -c net/minecraft/class_1299 net/minecraft/entity/EntityType - m (Lnet/minecraft/class_2487;)V method_17847 func_233601_b_ - m ()Lnet/minecraft/class_4048; method_18386 getSize - m ()Z method_20814 func_225437_d - m ()Ljava/lang/String; method_5882 getTranslationKey - m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_5883 create - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1299;)Lnet/minecraft/class_1297; method_17846 func_220337_b_ - m (Ljava/lang/String;Lnet/minecraft/class_1299$class_1300;)Lnet/minecraft/class_1299; method_5895 register - m ()Lnet/minecraft/class_2960; method_16351 getLootTable - m ()Z method_18389 shouldSendVelocityUpdates - m ()Z method_19946 isImmuneToFire - m ()Ljava/lang/String; toString toString - m ()F method_17686 getHeight - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2487;Lnet/minecraft/class_2561;Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_3730;ZZ)Lnet/minecraft/class_1297; method_5888 create - m (Lnet/minecraft/class_2487;)Ljava/util/Optional; method_17684 readEntityType - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;ZLnet/minecraft/class_238;)D method_5884 func_208051_a - m ()F method_17685 getWidth - m ()Z method_5896 isSummonable - m (Lnet/minecraft/class_2680;)Z method_29496 func_233597_a_ - m ()I method_18388 getUpdateFrequency - m ()Lnet/minecraft/class_2561; method_5897 getName - m (Ljava/lang/String;)Ljava/util/Optional; method_5898 byKey - m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_2960; method_5890 getKey - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1937;)Ljava/util/Optional; method_5892 loadEntityUnchecked - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1937;Ljava/util/function/Function;Lnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_17843 func_220346_a_ - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1297;Lnet/minecraft/class_2487;)V method_5881 applyItemNBT - m ()Z method_5893 isSerializable - m (Lnet/minecraft/class_1297;)Z method_26824 func_233596_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_3730;ZZ)Lnet/minecraft/class_1297; method_5894 spawn - m ()I method_18387 func_233602_m_ - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1937;Ljava/util/function/Function;)Lnet/minecraft/class_1297; method_17842 loadEntityAndExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2487;Lnet/minecraft/class_2561;Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_3730;ZZ)Lnet/minecraft/class_1297; method_5899 spawn - m (ILnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_5889 create - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1297;)V method_17839 func_220329_a_ - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1299;)Lnet/minecraft/class_1297; method_5886 create - m ()Lnet/minecraft/class_1311; method_5891 getClassification - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1937;)Ljava/util/Optional; method_17848 loadEntity - m (Lnet/minecraft/class_3494;)Z method_20210 isContained - m (DDD)Lnet/minecraft/class_238; method_17683 getBoundingBoxWithSizeApplied - f Lnet/minecraft/class_1299; field_6110 END_CRYSTAL - f Lnet/minecraft/class_1299; field_6109 SHULKER - f Lnet/minecraft/class_1299; field_6071 HUSK - f Lnet/minecraft/class_1299; field_6064 EXPERIENCE_BOTTLE - f Lnet/minecraft/class_1299; field_6095 GIANT - f Lnet/minecraft/class_1299; field_6043 ITEM_FRAME - f Lnet/minecraft/class_1299; field_6108 BAT - f Lnet/minecraft/class_1299; field_6120 PAINTING - f Lnet/minecraft/class_1299; field_6075 SKELETON_HORSE - f Lnet/minecraft/class_1299; field_6111 TROPICAL_FISH - f Lnet/minecraft/class_1299; field_6090 EVOKER - f Z field_6072 summonable - f Lnet/minecraft/class_2561; field_6092 name - f Lnet/minecraft/class_1299; field_6076 WITHER_SKELETON - f Lnet/minecraft/class_1299; field_16281 CAT - f I field_24086 defaultUpdateInterval - f Lnet/minecraft/class_1299; field_6093 PIG - f Lnet/minecraft/class_1299; field_6074 LLAMA - f Lnet/minecraft/class_1299; field_6117 VINDICATOR - f Lnet/minecraft/class_1299; field_6133 FIREWORK_ROCKET - f Lnet/minecraft/class_1299; field_6134 RAVAGER - f Lnet/minecraft/class_1299; field_6103 FISHING_BOBBER - f Lnet/minecraft/class_1299; field_6142 SPAWNER_MINECART - f Lnet/minecraft/class_1299; field_6051 ZOMBIE - f Lnet/minecraft/class_1299; field_6126 CHEST_MINECART - f Lnet/minecraft/class_1299; field_6135 SPECTRAL_ARROW - f Lnet/minecraft/class_1311; field_6094 classification - f Lnet/minecraft/class_1299; field_6085 COW - f Lnet/minecraft/class_1299; field_6042 POLAR_BEAR - f Lnet/minecraft/class_1299; field_6086 ELDER_GUARDIAN - f Lnet/minecraft/class_1299; field_6139 HORSE - f Lnet/minecraft/class_1299; field_6115 SHEEP - f Lnet/minecraft/class_1299; field_6082 ENDER_PEARL - f Lnet/minecraft/class_1299; field_6047 SNOW_GOLEM - f Lnet/minecraft/class_1299; field_6122 ARROW - f Lnet/minecraft/class_1299; field_6077 VILLAGER - f Lnet/minecraft/class_1299; field_6081 OCELOT - f Lnet/minecraft/class_1299; field_6128 ENDERMITE - f Lnet/minecraft/class_1299; field_6137 SKELETON - f Lnet/minecraft/class_1299; field_17714 TRADER_LLAMA - f Lnet/minecraft/class_1299; field_6052 ITEM - f Z field_6056 serializable - f Lnet/minecraft/class_4048; field_18070 size - f Lnet/minecraft/class_1299; field_6119 WITHER - f Lnet/minecraft/class_1299; field_6096 MINECART - f I field_24085 defaultTrackingRange - f Lnet/minecraft/class_1299; field_6078 PHANTOM - f Lnet/minecraft/class_1299; field_6061 EYE_OF_ENDER - f Lnet/minecraft/class_1299; field_6112 LIGHTNING_BOLT - f Lnet/minecraft/class_1299; field_6121 BOAT - f Lnet/minecraft/class_1299; field_6140 RABBIT - f Lnet/minecraft/class_1299; field_6098 STRAY - f Lnet/minecraft/class_1299; field_6058 HOPPER_MINECART - f Lnet/minecraft/class_1299; field_6067 DONKEY - f Lorg/apache/logging/log4j/Logger; field_6088 LOGGER - f Lnet/minecraft/class_1299; field_6097 PLAYER - f Lnet/minecraft/class_1299; field_6070 COD - f Lnet/minecraft/class_1299; field_23696 ZOGLIN - f Lnet/minecraft/class_1299; field_6105 PILLAGER - f Lnet/minecraft/class_1299; field_6089 FALLING_BLOCK - f Lnet/minecraft/class_1299; field_6068 SNOWBALL - f Lnet/minecraft/class_1299; field_6125 SILVERFISH - f Lnet/minecraft/class_1299; field_6144 EGG - f Lnet/minecraft/class_1299; field_6053 TNT_MINECART - f Lnet/minecraft/class_1299; field_6123 DROWNED - f Lnet/minecraft/class_1299; field_6073 SALMON - f Lnet/minecraft/class_1299; field_21973 HOGLIN - f Lnet/minecraft/class_1299; field_6059 VEX - f Lnet/minecraft/class_1299; field_6131 ARMOR_STAND - f Lnet/minecraft/class_1299; field_6044 EXPERIENCE_ORB - f Lnet/minecraft/class_1299; field_6049 SMALL_FIREBALL - f Lnet/minecraft/class_1299; field_6138 LEASH_KNOT - f Lnet/minecraft/class_1299; field_6091 ENDERMAN - f Lnet/minecraft/class_1299; field_6143 MOOSHROOM - f Lnet/minecraft/class_1299; field_6147 IRON_GOLEM - f Lnet/minecraft/class_1299; field_6127 TRIDENT - f Lcom/google/common/collect/ImmutableSet; field_25355 field_233593_bg_ - f Lnet/minecraft/class_1299; field_25751 field_242287_aj - f Lnet/minecraft/class_1299; field_6102 MAGMA_CUBE - f Lnet/minecraft/class_1299; field_6145 WITCH - f Lnet/minecraft/class_1299; field_6099 BLAZE - f Lnet/minecraft/class_1299; field_6104 PARROT - f Lnet/minecraft/class_1299$class_4049; field_6101 factory - f Lnet/minecraft/class_1299; field_6087 DOLPHIN - f Lnet/minecraft/class_1299; field_6062 PUFFERFISH - f Lnet/minecraft/class_2960; field_16526 lootTable - f Lnet/minecraft/class_1299; field_6114 SQUID - f Lnet/minecraft/class_1299; field_6107 GHAST - f Lnet/minecraft/class_1299; field_6055 WOLF - f Lnet/minecraft/class_1299; field_6132 CHICKEN - f Z field_19423 field_225438_be - f Lnet/minecraft/class_1299; field_6050 ZOMBIFIED_PIGLIN - f Lnet/minecraft/class_1299; field_6080 FURNACE_MINECART - f Lnet/minecraft/class_1299; field_6045 POTION - f Lnet/minecraft/class_1299; field_6116 ENDER_DRAGON - f Lnet/minecraft/class_1299; field_6100 SHULKER_BULLET - f Lnet/minecraft/class_1299; field_6129 DRAGON_FIREBALL - f Lnet/minecraft/class_1299; field_23214 STRIDER - f Lnet/minecraft/class_1299; field_6118 GUARDIAN - f Lnet/minecraft/class_1299; field_6146 PANDA - f Lnet/minecraft/class_1299; field_6060 EVOKER_FANGS - f Lnet/minecraft/class_1299; field_6113 TURTLE - f Lnet/minecraft/class_1299; field_6066 FIREBALL - f Lnet/minecraft/class_1299; field_6065 ILLUSIONER - f Lnet/minecraft/class_1299; field_6069 SLIME - f Lnet/minecraft/class_1299; field_6083 AREA_EFFECT_CLOUD - f Lnet/minecraft/class_1299; field_6057 MULE - f Lnet/minecraft/class_1299; field_6124 LLAMA_SPIT - f Lnet/minecraft/class_1299; field_6054 ZOMBIE_VILLAGER - f Lnet/minecraft/class_1299; field_6084 CAVE_SPIDER - f Ljava/lang/String; field_6106 translationKey - f Lnet/minecraft/class_1299; field_22281 PIGLIN - f Lnet/minecraft/class_1299; field_20346 BEE - f Lnet/minecraft/class_1299; field_17713 WANDERING_TRADER - f Lnet/minecraft/class_1299; field_6046 CREEPER - f Lnet/minecraft/class_1299; field_6048 ZOMBIE_HORSE - f Lnet/minecraft/class_1299; field_17943 FOX - f Lnet/minecraft/class_1299; field_6079 SPIDER - f Lnet/minecraft/class_1299; field_6063 TNT - f Z field_18981 immuneToFire - f Lnet/minecraft/class_1299; field_6130 WITHER_SKULL - f Lnet/minecraft/class_1299; field_6136 COMMAND_BLOCK_MINECART -c net/minecraft/class_1299$class_1300 net/minecraft/entity/EntityType$Builder - m ()Lnet/minecraft/class_1299$class_1300; method_20815 func_225435_d - m (Ljava/lang/String;)Lnet/minecraft/class_1299; method_5905 build - m ([Lnet/minecraft/class_2248;)Lnet/minecraft/class_1299$class_1300; method_29497 func_233607_a_ - m (Lnet/minecraft/class_1299$class_4049;Lnet/minecraft/class_1311;)Lnet/minecraft/class_1299$class_1300; method_5903 create - m (I)Lnet/minecraft/class_1299$class_1300; method_27299 trackingRange - m (I)Lnet/minecraft/class_1299$class_1300; method_27300 func_233608_b_ - m ()Lnet/minecraft/class_1299$class_1300; method_5901 disableSummoning - m (FF)Lnet/minecraft/class_1299$class_1300; method_17687 size - m ()Lnet/minecraft/class_1299$class_1300; method_19947 immuneToFire - m ()Lnet/minecraft/class_1299$class_1300; method_5904 disableSerialization - m (Lnet/minecraft/class_1311;)Lnet/minecraft/class_1299$class_1300; method_5902 create - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; method_5900 func_220323_a - f Z field_18982 immuneToFire - f Lcom/google/common/collect/ImmutableSet; field_25356 field_233603_c_ - f Z field_6151 serializable - f Z field_6150 summonable - f I field_24088 field_233605_i_ - f Lnet/minecraft/class_1299$class_4049; field_6148 factory - f I field_24087 trackingRange - f Lnet/minecraft/class_4048; field_18071 size - f Lnet/minecraft/class_1311; field_6149 classification - f Z field_19424 field_225436_f -c net/minecraft/class_1299$class_4049 net/minecraft/entity/EntityType$IFactory - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1937;)Lnet/minecraft/class_1297; create create -c net/minecraft/class_1307 net/minecraft/entity/FlyingEntity -c net/minecraft/class_1303 net/minecraft/entity/item/ExperienceOrbEntity - m ()V method_5921 applyFloatMotion - m ()I method_5920 getTextureByXP - m (I)I method_5918 getXPSplit - m (I)I method_5922 durabilityToXp - m ()I method_5919 getXpValue - m (I)I method_5917 xpToDurability - f Lnet/minecraft/class_1657; field_6162 closestPlayer - f I field_6165 xpColor - f I field_6160 xpTargetColor - f I field_6159 xpValue - f I field_6163 delayBeforeCanPickup - f I field_6161 xpOrbHealth - f I field_6164 xpOrbAge -c net/minecraft/class_4980 net/minecraft/entity/BoostHelper - m (Lnet/minecraft/class_2487;)V method_26312 setSaddledFromNBT - m ()V method_26307 updateData - m (Lnet/minecraft/class_2487;)V method_26309 setSaddledToNBT - m (Ljava/util/Random;)Z method_26308 boost - m ()Z method_26311 getSaddled - m (Z)V method_26310 setSaddledFromBoolean - f I field_23217 boostTimeRaw - f Lnet/minecraft/class_2945; field_23218 manager - f I field_23216 field_233611_b_ - f Lnet/minecraft/class_2940; field_23219 boostTime - f Z field_23215 saddledRaw - f Lnet/minecraft/class_2940; field_23220 saddled -c net/minecraft/class_1306 net/minecraft/util/HandSide - m ()[Lnet/minecraft/class_1306; values values - m ()Lnet/minecraft/class_1306; method_5928 opposite - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;)Lnet/minecraft/class_1306; valueOf valueOf - m ()Lnet/minecraft/class_2561; method_27301 getHandName - f [Lnet/minecraft/class_1306; field_6180 $VALUES - f Lnet/minecraft/class_1306; field_6183 RIGHT - f Lnet/minecraft/class_2561; field_6181 handName - f Lnet/minecraft/class_1306; field_6182 LEFT -c net/minecraft/class_1538 net/minecraft/entity/effect/LightningBoltEntity - m (Lnet/minecraft/class_3222;)V method_6961 setCaster - m (Z)V method_29498 setEffectOnly - m (I)V method_6960 igniteBlocks - f J field_7186 boltVertex - f I field_7185 lightningState - f Lnet/minecraft/class_3222; field_7182 caster - f Z field_7184 effectOnly - f I field_7183 boltLivingTime -c net/minecraft/class_4981 net/minecraft/entity/IRideable - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4980;Lnet/minecraft/class_243;)Z method_26313 ride - m ()Z method_6577 boost - m ()F method_26316 getMountedSpeed - m (Lnet/minecraft/class_243;)V method_26315 travelTowards -c net/minecraft/class_1308 net/minecraft/entity/MobEntity - m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)Z method_5935 isItemStackInSlot - m (ZZ)V method_5932 clearLeashed - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_5955 shouldExchangeEquipment - m ()Z method_18410 detachHome - m (Lnet/minecraft/class_1799;)Z method_24523 func_233665_g_ - m (FLnet/minecraft/class_1304;)V method_30758 func_242289_a - m (Lnet/minecraft/class_7;F)V method_5941 setPathPriority - m (F)V method_30759 func_241844_w - m ()V method_5966 playAmbientSound - m ()Z method_18411 isWithinHomeDistanceCurrentPosition - m ()V method_5958 updateAITasks - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20636 canSpawnOn - m ()Z method_5987 isAIDisabled - m (Z)V method_5937 setLeftHanded - m ()Lnet/minecraft/class_1413; method_5985 getEntitySenses - m ()Z method_5956 canBeSteered - m (Lnet/minecraft/class_7;)Z method_29244 func_233660_b_ - m ()V method_5983 eatGrassBonus - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_26320 func_233659_b_ - m (Lnet/minecraft/class_1304;F)V method_5946 setDropChance - m ()Z method_5947 isNoDespawnRequired - m ()V method_18409 sendDebugPackets - m (I)V method_18810 setVehicleEntityId - m (Lnet/minecraft/class_1657;)Z method_5931 canBeLeashedTo - m (Z)V method_5977 setNoAI - m ()Lnet/minecraft/class_1334; method_5993 getJumpController - m ()Z method_5972 isInDaylight - m (Ljava/lang/String;)Z method_26321 func_233662_c_ - m (Lnet/minecraft/class_1297;FF)V method_5951 faceEntity - m (Lnet/minecraft/class_1266;)V method_5964 setEquipmentBasedOnDifficulty - m ()V method_5959 registerGoals - m ()Lnet/minecraft/class_1335; method_5962 getMoveHelper - m (F)V method_5938 setMoveStrafing - m ()I method_5945 getMaxSpawnedInChunk - m ()Lnet/minecraft/class_5132$class_5133; method_26828 func_233666_p_ - m ()Lnet/minecraft/class_1309; method_5968 getAttackTarget - m (Lnet/minecraft/class_2338;I)V method_18408 setHomePosAndDistance - m ()V method_20417 updateMovementGoalFlags - m (Lnet/minecraft/class_1304;)V method_25939 func_233663_d_ - m (Lnet/minecraft/class_1811;)Z method_25938 func_230280_a_ - m ()Lnet/minecraft/class_1408; method_5942 getNavigator - m ()Z method_5936 canPickUpLoot - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_5992 func_230254_b_ - m (Lnet/minecraft/class_7;)F method_5944 getPathPriority - m ()Z method_23734 isDespawnPeaceful - m (Lnet/minecraft/class_1799;)Z method_20820 func_230293_i_ - m (D)Z method_5974 canDespawn - m (I)Z method_5969 isMaxGroupSize - m ()I method_5970 getTalkInterval - m (Ljava/lang/String;)Z method_26322 func_233664_d_ - m (Z)V method_5952 setCanPickUpLoot - m ()Z method_6510 isAggressive - m ()F method_18413 getMaximumHomeDistance - m (Lnet/minecraft/class_1266;)V method_5984 setEnchantmentBasedOnDifficulty - m ()I method_20240 getFaceRotSpeed - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1308;)V method_24522 func_233658_b_ - m (F)V method_5976 setMoveVertical - m (Z)V method_7217 setChild - m ()Lnet/minecraft/class_2338; method_18412 getHomePosition - m ()Z method_5934 getLeashed - m (Lnet/minecraft/class_1309;)V method_5980 setAttackTarget - m (Lnet/minecraft/class_1799;)Z method_5939 canEquipItem - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1304; method_5953 getSlotForItemStack - m (Lnet/minecraft/class_4538;)Z method_5957 isNotColliding - m ()V method_5990 spawnExplosionParticle - m ()Z method_26323 func_230286_q_ - m (Lnet/minecraft/class_1937;)Lnet/minecraft/class_1408; method_5965 createNavigator - m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_24834 func_233657_b_ - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_1266;Lnet/minecraft/class_3730;Lnet/minecraft/class_1315;Lnet/minecraft/class_2487;)Lnet/minecraft/class_1315; method_5943 onInitialSpawn - m ()Lnet/minecraft/class_1330; method_5963 createBodyController - m (Lnet/minecraft/class_1304;)F method_5929 getDropChance - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_29506 func_233661_c_ - m (Lnet/minecraft/class_1297;Z)V method_5954 setLeashHolder - m ()Z method_17326 preventDespawn - m ()Lnet/minecraft/class_3414; method_5994 getAmbientSound - m (Lnet/minecraft/class_1304;I)Lnet/minecraft/class_1792; method_5948 getArmorByChance - m (FFF)F method_5960 updateRotation - m ()I method_5978 getVerticalFaceSpeed - m ()Lnet/minecraft/class_2960; method_5991 getLootTable - m ()Z method_5961 isLeftHanded - m (Lnet/minecraft/class_1542;)V method_5949 updateEquipmentIfNeeded - m ()V method_5971 enablePersistence - m ()V method_5940 recreateLeash - m ()I method_5986 getHorizontalFaceSpeed - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1308;)V method_18249 onChildSpawnFromEgg - m ()Lnet/minecraft/class_1333; method_5988 getLookController - m ()V method_5995 updateLeashedState - m (F)V method_5930 setMoveForward - m (Lnet/minecraft/class_2338;)Z method_18407 isWithinHomeDistanceFromPosition - m ()V method_5975 func_241821_eG - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_24521 func_233655_a_ - m (Lnet/minecraft/class_1299;Z)Lnet/minecraft/class_1308; method_29243 func_233656_b_ - m (Z)V method_19540 setAggroed - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;)Z method_5979 canSpawn - m ()Lnet/minecraft/class_1297; method_5933 getLeashHolder - f Z field_6200 persistenceRequired - f Lnet/minecraft/class_2371; field_6205 inventoryArmor - f Lnet/minecraft/class_1355; field_6185 targetSelector - f F field_18075 maximumHomeDistance - f Lnet/minecraft/class_1408; field_6189 navigator - f J field_6184 deathLootTableSeed - f Lnet/minecraft/class_1334; field_6204 jumpController - f Lnet/minecraft/class_2338; field_18074 homePosition - f Z field_6203 canPickUpLoot - f Lnet/minecraft/class_1355; field_6201 goalSelector - f Lnet/minecraft/class_1297; field_6202 leashHolder - f [F field_6186 inventoryArmorDropChances - f Lnet/minecraft/class_1309; field_6199 attackTarget - f Lnet/minecraft/class_1335; field_6207 moveController - f I field_6194 experienceValue - f Lnet/minecraft/class_1413; field_6190 senses - f Lnet/minecraft/class_2960; field_6198 deathLootTable - f Lnet/minecraft/class_1330; field_6188 bodyController - f [F field_6187 inventoryHandsDropChances - f Lnet/minecraft/class_2940; field_6193 AI_FLAGS - f Ljava/util/Map; field_6196 mapPathPriority - f I field_18279 leashHolderID - f I field_6191 livingSoundTime - f Lnet/minecraft/class_1333; field_6206 lookController - f Lnet/minecraft/class_2371; field_6195 inventoryHands - f Lnet/minecraft/class_2487; field_6192 leashNBTTag -c net/minecraft/class_1308$1 net/minecraft/entity/MobEntity$1 - f [I field_6208 field_188475_b - f [I field_6209 field_188474_a -c net/minecraft/class_1309 net/minecraft/entity/LivingEntity - m (Lnet/minecraft/class_1309;)V method_6060 constructKnockBackVector - m (Lnet/minecraft/class_1282;)V method_16080 spawnDrops - m (Lnet/minecraft/class_1282;F)F method_6132 applyArmorCalculations - m (Lnet/minecraft/class_1320;)D method_26825 getAttributeValue - m ()Ljava/util/Collection; method_6026 getActivePotionEffects - m (Lnet/minecraft/class_238;Lnet/minecraft/class_238;)V method_6035 updateSpinAttack - m (Lnet/minecraft/class_1799;I)V method_6037 addItemParticles - m ()V method_18400 wakeUp - m ()F method_6017 getSoundPitch - m ()Z method_6115 isHandActive - m (Lnet/minecraft/class_2680;)Z method_29500 func_230295_b_ - m ()V method_16078 dropInventory - m (F)F method_6055 getSwingProgress - m ()Lnet/minecraft/class_1310; method_6046 getCreatureAttribute - m (FF)I method_23329 calculateFallDamage - m ()Lnet/minecraft/class_1306; method_6068 getPrimaryHand - m ()Ljava/util/Map; method_30129 func_241354_r_ - m ()Z method_6128 isElytraFlying - m (Ljava/util/function/Predicate;)Z method_24520 func_233634_a_ - m ()Z method_27303 func_230296_cM_ - m (Lnet/minecraft/class_1799;)V method_6116 playEquipSound - m ()Ljava/util/Random; method_6051 getRNG - m (F)V method_6125 setAIMoveSpeed - m (I)V method_16826 setIdleTime - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_18866 onFoodEaten - m (Ljava/util/List;Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_30120 func_241341_a_ - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_243; method_20477 func_241349_g_ - m ()V method_6053 updateElytra - m ()Z method_6113 isSleeping - m (Ljava/util/Map;)V method_30121 func_241342_a_ - m ()Z method_27071 func_230282_cS_ - m ()Lnet/minecraft/class_4095; method_18868 getBrain - m (F)V method_6025 heal - m (Lnet/minecraft/class_2338;)V method_18404 func_241348_f_ - m ()Z method_29503 isWaterSensitive - m ()V method_6069 resetPotionEffectMetadata - m (Lnet/minecraft/class_1320;)D method_26826 getBaseAttributeValue - m (Lnet/minecraft/class_1282;F)F method_6036 applyPotionDamageCalculations - m ()Lcom/google/common/collect/ImmutableList; method_24831 getAvailablePoses - m (Lnet/minecraft/class_1309;)V method_23733 createWitherRose - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2338;)V method_18393 func_213338_a_ - m (Lnet/minecraft/class_1304;)Z method_6084 hasItemInSlot - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_18801 handleOnClimbable - m ()Z method_21754 hasStoppedClimbing - m ()V method_25937 addSprintingEffect - m ()I method_6096 getTotalArmorValue - m (Lnet/minecraft/class_3611;)Z method_26319 func_230285_a_ - m (F)F method_6024 getSwimAnimation - m ()F method_6107 getSoundVolume - m (F)V method_6056 damageShield - m (Lnet/minecraft/class_1291;)Z method_6059 isPotionActive - m ()Z method_6054 canDropLoot - m (Lnet/minecraft/class_4050;Lnet/minecraft/class_4048;)F method_18394 getStandingEyeHeight - m (Lnet/minecraft/class_1299;)Z method_5973 canAttack - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28305 func_233636_a_ - m ()V method_6050 updatePotionEffects - m (Lnet/minecraft/class_2338;)V method_18402 setBedPosition - m ()Lnet/minecraft/class_2960; method_5989 getLootTableResourceLocation - m (Lnet/minecraft/class_1268;Z)V method_23667 swing - m ()V method_6027 updatePotionMetadata - m (Ljava/util/Map;)V method_30123 func_241344_b_ - m ()F method_6029 getAIMoveSpeed - m ()V method_23328 playFallSound - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4051;)Z method_18391 canAttack - m (Lnet/minecraft/class_1309;)V method_5997 spinAttack - m ()V method_18399 clearBedPosition - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_31079 func_242288_h - m ()Z method_29504 getShouldBeDead - m (Lnet/minecraft/class_2338;Z)V method_6006 setPartying - m ()Z method_6039 isActiveItemStackBlocking - m ()Lnet/minecraft/class_5131; method_6127 getAttributeManager - m ()Z method_27302 getMovementSpeed - m (I)I method_6064 determineNextAir - m ()Lnet/minecraft/class_1282; method_6081 getLastDamageSource - m (Lnet/minecraft/class_1304;)Lnet/minecraft/class_1799; method_30126 getItemInHand - m ()Z method_18406 isInValidBed - m (Lnet/minecraft/class_1293;)V method_6020 onNewPotionEffect - m (I)Lnet/minecraft/class_3414; method_6041 getFallSound - m ()V method_6008 markPotionsDirty - m ()F method_18396 getArmorCoverPercentage - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_18808 findAmmo - m ()V method_6119 updateArmSwingProgress - m ()V method_30128 func_241353_q_ - m (Lnet/minecraft/class_1282;IZ)V method_6099 dropSpecialItems - m (Lnet/minecraft/class_1268;)V method_6104 swingArm - m (Lnet/minecraft/class_243;)V method_6091 travel - m ()I method_6131 getIdleTime - m ()V method_6108 onDeathUpdate - m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_5996 getAttribute - m ()V method_6044 sendEndCombat - m (Lnet/minecraft/class_1304;)V method_20235 sendBreakAnimation - m ()Z method_6094 canBreatheUnderwater - m (Lnet/minecraft/class_2338;)Ljava/lang/Boolean; method_18405 func_241350_h_ - m (Lnet/minecraft/class_1282;F)V method_6105 damageArmor - m (I)I method_6130 decreaseAirSupply - m ()F method_6120 getWaterSlowDown - m ()Lnet/minecraft/class_1268; method_6058 getActiveHand - m (Lnet/minecraft/class_1293;)V method_6129 onFinishedPotionEffect - m ()Lnet/minecraft/class_2350; method_18401 getBedDirection - m (Ljava/util/Collection;)Z method_6089 areAllPotionsAmbient - m ()V method_6021 resetActiveHand - m (IZ)V method_6085 setLivingFlag - m ()F method_6067 getAbsorptionAmount - m (Lnet/minecraft/class_1282;)Z method_6095 checkTotemDeathProtection - m (Lnet/minecraft/class_1297;)D method_18390 getVisibilityMultiplier - m ()V method_30127 swapHands - m ()F method_6032 getHealth - m (Lnet/minecraft/class_1293;Z)V method_6009 onChangedPotionEffect - m (Lnet/minecraft/class_2338;)V method_18403 startSleeping - m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_4095; method_18867 createBrain - m ()V method_6072 updateSwimAnimation - m ()I method_6083 getLastAttackedEntityTime - m (FDD)V method_6005 applyKnockback - m ()I method_21753 getBeeStingCount - m (Lnet/minecraft/class_1297;)V method_6038 func_233628_a_ - m ()Z method_29920 func_241208_cS_ - m ()V method_6093 handleFluidSneak - m (Lnet/minecraft/class_1657;)I method_6110 getExperiencePoints - m ()V method_6000 sendEnterCombat - m (Lnet/minecraft/class_1297;)Z method_6121 attackEntityAsMob - m (Lnet/minecraft/class_1291;)Z method_6016 removePotionEffect - m (DZLnet/minecraft/class_243;)Lnet/minecraft/class_243; method_26317 func_233626_a_ - m (Lnet/minecraft/class_1309;)V method_6015 setRevengeTarget - m ()Ljava/util/Map; method_6088 getActivePotionMap - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;)Z method_24519 func_233632_a_ - m ()Ljava/util/Optional; method_18398 getBedPosition - m ()Z method_6034 isServerWorld - m ()Z method_5999 isEntityUndead - m ()V method_6075 stopActiveHand - m ()I method_6048 getItemInUseMaxCount - m (Lnet/minecraft/class_1293;)Z method_6092 addPotionEffect - m (Lnet/minecraft/class_1282;)Z method_6061 canBlockDamageSource - m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_30122 setArmorInSlot - m ()Lnet/minecraft/class_2680; method_16212 getBlockState - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_3414; method_18807 getDrinkSound - m (Lnet/minecraft/class_1309;)V method_20238 func_233652_i_ - m ()Lnet/minecraft/class_1309; method_6124 getAttackingEntity - m (I)V method_6018 startSpinAttack - m ()Z method_6102 attackable - m (Lnet/minecraft/class_2338;)V method_18392 setSleepingPosition - m (Lnet/minecraft/class_1268;)V method_6019 setActiveHand - m (Lnet/minecraft/class_1268;)Lnet/minecraft/class_1799; method_5998 getHeldItem - m ()I method_6022 getArrowCountInEntity - m ()Z method_22382 shouldTriggerItemUseEffects - m ()Lnet/minecraft/class_1799; method_6030 getActiveItemStack - m ()V method_6043 jump - m (DDDZ)Z method_6082 attemptTeleport - m ()I method_6117 getRevengeTimer - m (Lnet/minecraft/class_1297;)V method_6087 collideWithEntity - m ()F method_17825 getRenderScale - m (Lnet/minecraft/class_1304;)Lnet/minecraft/class_1799; method_30125 getArmorInSlot - m (Lnet/minecraft/class_1282;)V method_6078 onDeath - m ()Lnet/minecraft/class_1283; method_6066 getCombatTracker - m (I)V method_21755 setBeeStingCount - m ()Z method_6123 isSpinAttacking - m (ZLnet/minecraft/class_1282;)Lnet/minecraft/class_47$class_48; method_16079 getLootContextBuilder - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_6077 canGoThroughtTrapDoorOnLadder - m ()I method_6014 getItemInUseCount - m (Lnet/minecraft/class_1293;)Z method_6049 isPotionApplicable - m ()I method_6028 getArmSwingAnimationEnd - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_3414; method_18869 getEatSound - m (Lnet/minecraft/class_1799;)Z method_18397 canPickUpItem - m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_30124 setItemInHand - m (Lnet/minecraft/class_1309;)V method_20239 func_233653_j_ - m ()Lnet/minecraft/class_5132$class_5133; method_26827 registerAttributes - m ()Lnet/minecraft/class_4095$class_5303; method_28306 getBrainCodec - m ()F method_6063 getMaxHealth - m (Lnet/minecraft/class_1309;)Z method_18395 canAttack - m ()Z method_6086 canBeHitWithPotion - m ()V method_29502 func_233642_cO_ - m ()Lnet/minecraft/class_1799; method_6079 getHeldItemOffhand - m (Lnet/minecraft/class_1268;)V method_20236 sendBreakAnimation - m ()Lnet/minecraft/class_1309; method_6065 getRevengeTarget - m ()V method_6076 updateActiveHand - m (Lnet/minecraft/class_4050;)Lnet/minecraft/class_238; method_24833 getPoseAABB - m (Z)V method_6100 setJumping - m (F)F method_18802 getRelevantMoveFactor - m (Lnet/minecraft/class_1282;F)V method_6074 damageEntity - m ()Z method_6109 isChild - m ()F method_6106 getJumpUpwardsMotion - m (Lnet/minecraft/class_1291;)Lnet/minecraft/class_1293; method_6112 getActivePotionEffect - m (Lnet/minecraft/class_1297;I)V method_6103 onItemPickup - m (Lnet/minecraft/class_1309;Z)V method_29242 func_233629_a_ - m (Lnet/minecraft/class_1297;)Z method_6057 canEntityBeSeen - m (F)V method_6073 setAbsorptionAmount - m (I)V method_6097 setArrowCountInEntity - m (Lnet/minecraft/class_3494;)V method_6010 handleFluidJump - m (Lnet/minecraft/class_1542;)V method_29499 triggerItemPickupTrigger - m (Lnet/minecraft/class_1293;)V method_26082 func_233646_e_ - m (Lnet/minecraft/class_1304;)B method_20237 equipmentSlotToEntityState - m (Lnet/minecraft/class_1309;)V method_26084 func_233654_k_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;)V method_18865 applyFoodEffects - m ()Lnet/minecraft/class_1309; method_6052 getLastAttackedEntity - m ()V method_6070 collideWithNearbyEntities - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1799;)V method_6122 setHeldItem - m (Lnet/minecraft/class_1282;)V method_6013 playHurtSound - m (Lnet/minecraft/class_1309;)V method_6090 blockUsingShield - m (Lnet/minecraft/class_1282;Z)V method_16077 dropLoot - m ()Z method_6062 isMovementBlocked - m ()Lnet/minecraft/class_1799; method_6047 getHeldItemMainhand - m ()V method_6040 onItemUseFinish - m ()V method_23883 dropExperience - m (Lnet/minecraft/class_1304;)Lnet/minecraft/class_1799; method_6118 getItemStackFromSlot - m (FF)F method_6031 updateDistance - m (Lnet/minecraft/class_1291;)Lnet/minecraft/class_1293; method_6111 removeActivePotionEffect - m (Lnet/minecraft/class_1657;)V method_29505 func_230246_e_ - m ()Lnet/minecraft/class_3414; method_6002 getDeathSound - m ()V method_29501 func_233641_cN_ - m ()Z method_6012 clearActivePotions - m (Lnet/minecraft/class_243;F)Lnet/minecraft/class_243; method_26318 func_233633_a_ - m ()V method_6007 livingTick - m (Lnet/minecraft/class_1293;)V method_24311 func_233647_f_ - m ()I method_6003 getTicksElytraFlying - m ()Ljava/util/Optional; method_24832 func_233644_dn_ - m ()Z method_6101 isOnLadder - m (Lnet/minecraft/class_1282;)Lnet/minecraft/class_3414; method_6011 getHurtSound - m (Lnet/minecraft/class_1799;)V method_6045 renderBrokenItemStack - m (F)V method_6033 setHealth - m (Lnet/minecraft/class_1799;I)V method_6098 triggerItemUseEffects - m (Lnet/minecraft/class_1792;)Z method_24518 canEquip - m ()Z method_6071 isPlayer - m ()V method_6023 updateEntityActionState - m (Lnet/minecraft/class_1297;)V method_6114 setLastAttackedEntity - m (Lnet/minecraft/class_2338;)V method_6126 frostWalk - f I field_6235 hurtTime - f I field_6261 spinAttackDuration - f F field_6287 landMovementFactor - f D field_6245 interpTargetY - f Lnet/minecraft/class_2940; field_20348 BEE_STING_COUNT - f Lnet/minecraft/class_4095; field_18321 brain - f I field_6232 scoreValue - f I field_6238 recentlyHit - f Lnet/minecraft/class_1282; field_6276 lastDamageSource - f F field_6211 prevLimbSwingAmount - f Lnet/minecraft/class_2940; field_6240 POTION_EFFECTS - f I field_20347 beeStingRemovalCooldown - f I field_6239 ticksElytraFlying - f Ljava/util/UUID; field_23128 SOUL_SPEED_BOOT_ID - f Lnet/minecraft/class_2338; field_6268 prevBlockpos - f Lnet/minecraft/class_1309; field_6274 revengeTarget - f I field_6270 lastAttackedEntityTime - f D field_6224 interpTargetX - f Lnet/minecraft/class_2940; field_18073 BED_POSITION - f F field_6215 unused180 - f I field_6273 ticksSinceLastSwing - f Lnet/minecraft/class_2940; field_6214 HIDE_PARTICLES - f I field_6222 activeItemStackUseCount - f I field_6210 newPosRotationIncrements - f I field_6218 arrowHitTimer - f F field_6251 swingProgress - f Ljava/util/UUID; field_6237 SPRINTING_SPEED_BOOST_ID - f F field_6275 prevMovedDistance - f Ljava/util/Map; field_6280 activePotionsMap - f F field_6250 moveForward - f F field_6281 jumpMovementFactor - f I field_6279 swingProgressInt - f F field_6262 randomUnused1 - f Lnet/minecraft/class_1309; field_6236 lastAttackedEntity - f I field_6230 revengeTimer - f F field_6255 movedDistance - f Lnet/minecraft/class_1283; field_6256 combatTracker - f F field_6229 prevSwingProgress - f F field_6227 moveVertical - f F field_6259 prevRotationYawHead - f I field_6265 interpTicksHead - f F field_6244 randomUnused2 - f F field_6233 onGroundSpeedFactor - f F field_6264 lastSwimAnimation - f D field_6221 interpTargetPitch - f Lnet/minecraft/class_1657; field_6258 attackingPlayer - f Z field_6252 isSwingInProgress - f Lnet/minecraft/class_1322; field_6231 SPRINTING_SPEED_BOOST - f I field_6213 deathTime - f D field_6242 interpTargetHeadYaw - f Z field_6285 potionsNeedUpdate - f F field_6241 rotationYawHead - f I field_6269 maxHurtResistantTime - f F field_6212 moveStrafing - f F field_6217 prevOnGroundSpeedFactor - f F field_6243 swimAnimation - f Lnet/minecraft/class_2940; field_6257 LIVING_FLAGS - f D field_6284 interpTargetYaw - f F field_6220 prevRenderYawOffset - f F field_6271 attackedAtYaw - f F field_6246 absorptionAmount - f Lnet/minecraft/class_5131; field_6260 attributes - f Z field_6282 isJumping - f Lnet/minecraft/class_2371; field_6234 handInventory - f Lnet/minecraft/class_1799; field_6277 activeItemStack - f I field_6278 idleTime - f J field_6226 lastDamageStamp - f F field_6249 limbSwing - f F field_6283 renderYawOffset - f I field_6254 maxHurtTime - f Lnet/minecraft/class_1268; field_6266 swingingHand - f I field_6228 jumpTicks - f Lnet/minecraft/class_2940; field_6219 ARROW_COUNT_IN_ENTITY - f D field_6263 interpTargetZ - f Z field_6272 dead - f F field_6253 lastDamage - f Lnet/minecraft/class_2371; field_6248 armorArray - f Ljava/util/Optional; field_22418 field_233624_bE_ - f Lnet/minecraft/class_2940; field_6247 HEALTH - f F field_6225 limbSwingAmount - f Lnet/minecraft/class_4048; field_18072 SLEEPING_SIZE -c net/minecraft/class_1309$1 net/minecraft/entity/LivingEntity$1 - f [I field_6288 field_188473_a - f [I field_19169 field_220361_b -c net/minecraft/class_3730 net/minecraft/entity/SpawnReason - m (Ljava/lang/String;)Lnet/minecraft/class_3730; valueOf valueOf - m ()[Lnet/minecraft/class_3730; values values - f Lnet/minecraft/class_3730; field_16463 REINFORCEMENT - f Lnet/minecraft/class_3730; field_16461 TRIGGERED - f Lnet/minecraft/class_3730; field_16459 NATURAL - f Lnet/minecraft/class_3730; field_16473 BUCKET - f Lnet/minecraft/class_3730; field_16467 EVENT - f Lnet/minecraft/class_3730; field_16468 CONVERSION - f [Lnet/minecraft/class_3730; field_16464 $VALUES - f Lnet/minecraft/class_3730; field_16466 BREEDING - f Lnet/minecraft/class_3730; field_16527 PATROL - f Lnet/minecraft/class_3730; field_16471 MOB_SUMMONED - f Lnet/minecraft/class_3730; field_16460 JOCKEY - f Lnet/minecraft/class_3730; field_16465 SPAWN_EGG - f Lnet/minecraft/class_3730; field_16472 CHUNK_GENERATION - f Lnet/minecraft/class_3730; field_16469 SPAWNER - f Lnet/minecraft/class_3730; field_16462 COMMAND - f Lnet/minecraft/class_3730; field_16470 DISPENSER - f Lnet/minecraft/class_3730; field_16474 STRUCTURE -c net/minecraft/class_1311 net/minecraft/entity/EntityClassification - m ()Z method_6135 getAnimal - m ()Z method_6136 getPeacefulCreature - m ()I method_27920 getRandomDespawnDistance - m (Ljava/lang/String;)Lnet/minecraft/class_1311; method_28307 getClassificationByName - m ()[Lnet/minecraft/class_1311; values values - m ()I method_27919 getInstantDespawnDistance - m ()I method_6134 getMaxNumberOfCreature - m ()Ljava/lang/String; method_6133 getName - m (Ljava/lang/String;)Lnet/minecraft/class_1311; valueOf valueOf - m (Lnet/minecraft/class_1311;)Lnet/minecraft/class_1311; method_6137 func_220362_a - f Lnet/minecraft/class_1311; field_6294 CREATURE - f Z field_6298 isPeacefulCreature - f Lnet/minecraft/class_1311; field_6303 AMBIENT - f [Lnet/minecraft/class_1311; field_6301 $VALUES - f I field_24462 instantDespawnDistance - f Lnet/minecraft/class_1311; field_6300 WATER_CREATURE - f I field_24461 randomDespawnDistance - f Ljava/lang/String; field_6304 name - f Lnet/minecraft/class_1311; field_6302 MONSTER - f Ljava/util/Map; field_6296 VALUES_MAP - f Lcom/mojang/serialization/Codec; field_24655 CODEC - f I field_6297 maxNumberOfCreature - f Lnet/minecraft/class_1311; field_24460 WATER_AMBIENT - f Lnet/minecraft/class_1311; field_17715 MISC - f Z field_6295 isAnimal -c net/minecraft/class_1313 net/minecraft/entity/MoverType - m (Ljava/lang/String;)Lnet/minecraft/class_1313; valueOf valueOf - m ()[Lnet/minecraft/class_1313; values values - f [Lnet/minecraft/class_1313; field_6307 $VALUES - f Lnet/minecraft/class_1313; field_6309 SHULKER - f Lnet/minecraft/class_1313; field_6308 SELF - f Lnet/minecraft/class_1313; field_6310 PISTON - f Lnet/minecraft/class_1313; field_6305 PLAYER - f Lnet/minecraft/class_1313; field_6306 SHULKER_BOX -c net/minecraft/class_1310 net/minecraft/entity/CreatureAttribute - f Lnet/minecraft/class_1310; field_6293 ARTHROPOD - f Lnet/minecraft/class_1310; field_6289 UNDEAD - f Lnet/minecraft/class_1310; field_6291 ILLAGER - f Lnet/minecraft/class_1310; field_6292 WATER - f Lnet/minecraft/class_1310; field_6290 UNDEFINED -c net/minecraft/class_5354 net/minecraft/entity/IAngerable - m (Lnet/minecraft/class_1657;)V method_29505 func_230246_e_ - m (Lnet/minecraft/class_1309;)V method_5980 setAttackTarget - m (Lnet/minecraft/class_1309;)Z method_29515 func_233680_b_ - m ()Z method_29511 func_233678_J__ - m (Ljava/util/UUID;)V method_29513 setAngerTarget - m ()V method_29509 func_230258_H__ - m (Lnet/minecraft/class_1657;)V method_29516 func_233681_b_ - m (Lnet/minecraft/class_3218;Z)V method_29510 func_241359_a_ - m ()Ljava/util/UUID; method_29508 getAngerTarget - m (Lnet/minecraft/class_2487;)V method_29517 writeAngerNBT - m ()V method_29921 func_241355_J__ - m (Lnet/minecraft/class_1937;)Z method_29923 func_241357_a_ - m ()I method_29507 getAngerTime - m ()V method_29922 func_241356_K__ - m (Lnet/minecraft/class_1309;)V method_6015 setRevengeTarget - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2487;)V method_29512 readAngerNBT - m (I)V method_29514 setAngerTime - m ()Lnet/minecraft/class_1309; method_5968 getAttackTarget -c net/minecraft/class_1314 net/minecraft/entity/CreatureEntity - m (Lnet/minecraft/class_2338;)F method_6149 getBlockPathWeight - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4538;)F method_6144 getBlockPathWeight - m ()D method_6148 followLeashSpeed - m (F)V method_6142 onLeashDistance - m ()Z method_6150 hasPath -c net/minecraft/class_4050 net/minecraft/entity/Pose - m (Ljava/lang/String;)Lnet/minecraft/class_4050; valueOf valueOf - m ()[Lnet/minecraft/class_4050; values values - f Lnet/minecraft/class_4050; field_18080 SPIN_ATTACK - f [Lnet/minecraft/class_4050; field_18083 $VALUES - f Lnet/minecraft/class_4050; field_18082 DYING - f Lnet/minecraft/class_4050; field_18081 CROUCHING - f Lnet/minecraft/class_4050; field_18076 STANDING - f Lnet/minecraft/class_4050; field_18078 SLEEPING - f Lnet/minecraft/class_4050; field_18077 FALL_FLYING - f Lnet/minecraft/class_4050; field_18079 SWIMMING -c net/minecraft/class_1316 net/minecraft/entity/IJumpingMount - m (I)V method_6155 handleStartJump - m ()Z method_6153 canJump - m ()V method_6156 handleStopJump - m (I)V method_6154 setJumpPower -c net/minecraft/class_4094 net/minecraft/entity/merchant/IReputationTracking - m (Lnet/minecraft/class_4151;Lnet/minecraft/class_1297;)V method_18870 updateReputation -c net/minecraft/class_4582 net/minecraft/entity/IChargeableMob - m ()Z method_6872 isCharged -c net/minecraft/class_5147 net/minecraft/entity/IShearable - m (Lnet/minecraft/class_3419;)V method_6636 shear - m ()Z method_27072 isShearable -c net/minecraft/class_5146 net/minecraft/entity/IEquipable - m ()Z method_6765 func_230264_L__ - m (Lnet/minecraft/class_3419;)V method_6576 func_230266_a_ - m ()Z method_6725 isHorseSaddled -c net/minecraft/class_1315 net/minecraft/entity/ILivingEntityData -c net/minecraft/class_1321 net/minecraft/entity/passive/TameableEntity - m (Lnet/minecraft/class_1309;)Z method_6171 isOwner - m ()Ljava/util/UUID; method_6139 getOwnerId - m ()Z method_6172 isEntitySleeping - m ()Lnet/minecraft/class_1309; method_6177 getOwner - m ()Z method_24345 isSitting - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_6178 shouldAttackEntity - m (Z)V method_24346 func_233687_w_ - m (Lnet/minecraft/class_1657;)V method_6170 setTamedBy - m (Z)V method_6179 setSleeping - m (Ljava/util/UUID;)V method_6174 setOwnerId - m (Z)V method_6173 setTamed - m (Z)V method_6180 playTameEffect - m ()V method_6175 setupTamedAI - m ()Z method_6181 isTamed - f Z field_21974 field_233683_bw_ - f Lnet/minecraft/class_2940; field_6322 TAMED - f Lnet/minecraft/class_2940; field_6320 OWNER_UNIQUE_ID -c net/minecraft/class_1317 net/minecraft/entity/EntitySpawnPlacementRegistry - m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_2902$class_2903; method_6160 func_209342_b - m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_1317$class_1319; method_6159 getPlacementType - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20638 canSpawnEntity - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1317$class_1319;Lnet/minecraft/class_2902$class_2903;Lnet/minecraft/class_1317$class_4306;)V method_20637 register - f Ljava/util/Map; field_6313 REGISTRY -c net/minecraft/class_1317$class_1318 net/minecraft/entity/EntitySpawnPlacementRegistry$Entry - m (Lnet/minecraft/class_1317$class_1318;)Lnet/minecraft/class_1317$class_4306; method_20639 func_223512_c - m (Lnet/minecraft/class_1317$class_1318;)Lnet/minecraft/class_2902$class_2903; method_6163 func_209338_b - m (Lnet/minecraft/class_1317$class_1318;)Lnet/minecraft/class_1317$class_1319; method_6164 func_209337_a - f Lnet/minecraft/class_2902$class_2903; field_6314 type - f Lnet/minecraft/class_1317$class_4306; field_19349 placementPredicate - f Lnet/minecraft/class_1317$class_1319; field_6315 placementType -c net/minecraft/class_1317$class_4306 net/minecraft/entity/EntitySpawnPlacementRegistry$IPlacementPredicate - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z test test -c net/minecraft/class_1317$class_1319 net/minecraft/entity/EntitySpawnPlacementRegistry$PlacementType - m ()[Lnet/minecraft/class_1317$class_1319; values values - m (Ljava/lang/String;)Lnet/minecraft/class_1317$class_1319; valueOf valueOf - f Lnet/minecraft/class_1317$class_1319; field_23221 IN_LAVA - f Lnet/minecraft/class_1317$class_1319; field_19350 NO_RESTRICTIONS - f Lnet/minecraft/class_1317$class_1319; field_6318 IN_WATER - f Lnet/minecraft/class_1317$class_1319; field_6317 ON_GROUND - f [Lnet/minecraft/class_1317$class_1319; field_6319 $VALUES -c net/minecraft/class_1320 net/minecraft/entity/ai/attributes/Attribute - m (D)D method_6165 clampValue - m ()D method_6169 getDefaultValue - m (Z)Lnet/minecraft/class_1320; method_26829 setShouldWatch - m ()Z method_6168 getShouldWatch - m ()Ljava/lang/String; method_26830 getAttributeName - f Ljava/lang/String; field_23699 attributeName - f D field_23697 defaultValue - f Z field_23698 shouldWatch -c net/minecraft/class_4095 net/minecraft/entity/ai/brain/Brain - m (Lnet/minecraft/class_4168;)Z method_18874 hasRequiredMemories - m (Ljava/util/Map$Entry;)Lnet/minecraft/class_4095$class_5302; method_28312 func_233707_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_27073 tickSensors - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_19542 tick - m (Lnet/minecraft/class_4140;Lnet/minecraft/class_4141;)Z method_18876 hasMemory - m (Lnet/minecraft/class_4095;)Ljava/util/stream/Stream; method_28308 func_233694_a_ - m (Lnet/minecraft/class_4140;)Ljava/util/Optional; method_18904 getMemory - m ()V method_27075 tickMemories - m (Lnet/minecraft/class_4168;)V method_18880 switchActivity - m ()Ljava/util/List; method_27074 getRunningTasks - m (Lnet/minecraft/class_4140;Ljava/util/Optional;)V method_24535 replaceMemory - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_19545 tickTasks - m ()Lorg/apache/logging/log4j/Logger; method_28314 func_233719_i_ - m ()V method_24536 switchToFallbackActivity - m (Lnet/minecraft/class_4140;Ljava/lang/Object;J)V method_24525 replaceMemory - m (Lnet/minecraft/class_4140;)Z method_18896 hasMemory - m (Ljava/lang/Integer;)Ljava/util/Map; method_18887 func_233703_a_ - m (Lnet/minecraft/class_4168;ILcom/google/common/collect/ImmutableList;Lnet/minecraft/class_4140;)V method_24527 registerActivity - m (Lnet/minecraft/class_4140;Ljava/lang/Object;)Z method_29519 hasMemory - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_4140;Ljava/util/Optional;)V method_28309 func_233695_a_ - m (JJ)V method_18871 updateActivity - m (Lnet/minecraft/class_4168;)V method_24526 switchTo - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_18900 stopAllTasks - m ()Ljava/util/Optional; method_24538 getTemporaryActivity - m (Ljava/lang/Object;Ljava/lang/Object;)Z method_29518 func_233704_a_ - m (Lnet/minecraft/class_4168;)Z method_18906 hasActivity - m (Lnet/minecraft/class_4168;)V method_24537 removeUnassociatedMemories - m (ILcom/google/common/collect/ImmutableList;)Lcom/google/common/collect/ImmutableList; method_24524 getTaskPriorityList - m (Lnet/minecraft/class_4168;)Ljava/util/Set; method_18910 func_233717_g_ - m (Ljava/util/Collection;Ljava/util/Collection;)Lnet/minecraft/class_4095$class_5303; method_28311 createCodec - m (Lnet/minecraft/class_4168;Lcom/google/common/collect/ImmutableList;)V method_18881 registerActivity - m (Lnet/minecraft/class_4140;Ljava/lang/Object;)V method_18878 setMemory - m (Ljava/util/Collection;Ljava/util/Collection;)Lcom/mojang/serialization/Codec; method_28313 getBrainCodec - m (Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/DataResult; method_28310 encode - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_18891 startTasks - m (Lnet/minecraft/class_4168;Lcom/google/common/collect/ImmutableList;Ljava/util/Set;)V method_24529 registerActivity - m (Lnet/minecraft/class_4140;Ljava/util/Optional;)V method_18879 setMemory - m (Lnet/minecraft/class_4140;)V method_18875 removeMemory - m (Ljava/lang/Object;)Z method_19948 isEmptyCollection - m (Lnet/minecraft/class_4168;Lcom/google/common/collect/ImmutableList;Ljava/util/Set;Ljava/util/Set;)V method_24530 registerActivity - m ()Ljava/util/stream/Stream; method_28315 createMemoryCodecs - m (Lnet/minecraft/class_4168;)V method_18897 setFallbackActivity - m (Ljava/util/List;)V method_24531 switchActivities - m (Lnet/minecraft/class_4170;)V method_18884 setSchedule - m (Ljava/util/Set;)V method_18890 setDefaultActivities - m ()Lnet/minecraft/class_4170; method_18894 getSchedule - m ()Lnet/minecraft/class_4095; method_18911 copy - m (Lnet/minecraft/class_4168;ILcom/google/common/collect/ImmutableList;)V method_18882 registerActivity - f Lorg/apache/logging/log4j/Logger; field_24656 LOGGER - f Ljava/util/Set; field_18328 activities - f Ljava/util/Map; field_18323 sensors - f Ljava/util/Set; field_18327 defaultActivities - f J field_18853 lastGameTime - f Lnet/minecraft/class_4170; field_18325 schedule - f Lnet/minecraft/class_4168; field_18329 fallbackActivity - f Ljava/util/Map; field_22282 memoryMap - f Ljava/util/function/Supplier; field_24657 brainCodec - f Ljava/util/Map; field_18324 taskPriorityMap - f Ljava/util/Map; field_18322 memories - f Ljava/util/Map; field_18326 requiredMemoryStates -c net/minecraft/class_4095$class_5302 net/minecraft/entity/ai/brain/Brain$MemoryCodec - m (Lcom/mojang/serialization/RecordBuilder;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/Codec;Lnet/minecraft/class_4831;)V method_28332 func_233742_a_ - m (Lnet/minecraft/class_4095;)V method_28328 refreshMemory - m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;)V method_28330 encode - m (Lnet/minecraft/class_4140;Ljava/util/Optional;)Lnet/minecraft/class_4095$class_5302; method_28333 createCodec - m (Lnet/minecraft/class_4140;Ljava/util/Optional;)Lnet/minecraft/class_4095$class_5302; method_28329 func_233739_a_ - m (Lcom/mojang/serialization/RecordBuilder;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/Codec;)V method_28331 func_233741_a_ - m (Lnet/minecraft/class_4095$class_5302;Lnet/minecraft/class_4095;)V method_28327 func_233737_a_ - f Ljava/util/Optional; field_24662 memory - f Lnet/minecraft/class_4140; field_24661 memoryType -c net/minecraft/class_4095$class_5303 net/minecraft/entity/ai/brain/Brain$BrainCodec - m (Lcom/mojang/serialization/Dynamic;)Lnet/minecraft/class_4095; method_28335 deserialize - m ()Lnet/minecraft/class_4095; method_28334 func_233747_a_ - m ()Lcom/mojang/serialization/Codec; method_28336 func_233749_b_ - f Lcom/mojang/serialization/Codec; field_24665 brainCodec - f Ljava/util/Collection; field_24663 memoryTypes - f Ljava/util/Collection; field_24664 sensorTypes -c net/minecraft/class_4095$1 net/minecraft/entity/ai/brain/Brain$1 - m (Lnet/minecraft/class_4140;)Ljava/util/stream/Stream; method_28326 func_233734_b_ - m (Lcom/mojang/serialization/DynamicOps;)Ljava/util/stream/Stream; keys keys - m (Lnet/minecraft/class_4140;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_28320 decodeMemory - m (Lnet/minecraft/class_4140;)Lcom/mojang/serialization/DataResult; method_28317 func_233725_a_ - m (Lnet/minecraft/class_4140;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_2960; method_28319 func_233727_a_ - m (Lnet/minecraft/class_4095;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;)Lcom/mojang/serialization/RecordBuilder; method_28316 encode - m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;)Lcom/mojang/serialization/RecordBuilder; encode encode - m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/MapLike;)Lcom/mojang/serialization/DataResult; decode decode - m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/RecordBuilder;Lnet/minecraft/class_4095$class_5302;)V method_28322 func_233730_a_ - m (Lcom/mojang/serialization/DynamicOps;Lorg/apache/commons/lang3/mutable/MutableObject;Lcom/mojang/datafixers/util/Pair;)V method_28324 func_233732_a_ - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_2960;)Ljava/lang/Object; method_28325 func_233733_a_ - m (Lnet/minecraft/class_4140;Lnet/minecraft/class_4831;)Lnet/minecraft/class_4095$class_5302; method_28318 func_233726_a_ - m (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/datafixers/util/Pair;Lnet/minecraft/class_4140;)Lcom/mojang/serialization/DataResult; method_28321 func_233729_a_ - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/DataResult; method_28323 func_233731_a_ - f Ljava/util/Collection; field_24659 field_233723_b_ - f Ljava/util/Collection; field_24658 field_233722_a_ - f Lorg/apache/commons/lang3/mutable/MutableObject; field_24660 field_233724_c_ -c net/minecraft/class_5131 net/minecraft/entity/ai/attributes/AttributeModifierManager - m (Lnet/minecraft/class_1324;)V method_26853 func_233792_b_ - m (Lnet/minecraft/class_1320;Lnet/minecraft/class_1322;)V method_26843 func_233780_a_ - m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_26842 createInstanceIfAbsent - m (Lnet/minecraft/class_2499;)V method_26850 deserialize - m (Lnet/minecraft/class_1324;)V method_26845 addInstance - m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_26858 func_233798_e_ - m (Ljava/lang/String;)V method_26848 func_233786_a_ - m ()Lnet/minecraft/class_2499; method_26855 serialize - m (Lnet/minecraft/class_1324;)Z method_26857 func_233796_c_ - m (Lnet/minecraft/class_1320;)Z method_27306 hasAttributeInstance - m (Lnet/minecraft/class_1320;)D method_26852 getAttributeValue - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1320;)V method_26849 func_233787_a_ - m (Lnet/minecraft/class_1320;Ljava/util/Collection;)V method_26844 func_233781_a_ - m ()Ljava/util/Set; method_26841 getInstances - m (Lnet/minecraft/class_1320;Ljava/util/UUID;)Z method_27305 hasModifier - m (Lnet/minecraft/class_1320;Ljava/util/UUID;)D method_27307 getModifierValue - m (Lcom/google/common/collect/Multimap;)V method_26847 removeModifiers - m (Lnet/minecraft/class_5131;)V method_26846 refreshOnRespawn - m (Lcom/google/common/collect/Multimap;)V method_26854 reapplyModifiers - m (Lnet/minecraft/class_1320;)D method_26856 getAttributeBaseValue - m ()Ljava/util/Collection; method_26851 getWatchedInstances - f Lorg/apache/logging/log4j/Logger; field_23708 LOGGER - f Lnet/minecraft/class_5132; field_23711 attributeMap - f Ljava/util/Set; field_23710 instanceSet - f Ljava/util/Map; field_23709 instanceMap -c net/minecraft/class_1324 net/minecraft/entity/ai/attributes/ModifiableAttributeInstance - m (Lnet/minecraft/class_1322$class_1323;)Ljava/util/Collection; method_26834 getModifiersByOperation - m (Ljava/util/UUID;)Z method_27304 removePersistentModifier - m ()V method_6203 removeAllModifiers - m ()Ljava/util/Set; method_6195 getModifierListCopy - m (Ljava/util/UUID;)V method_6200 removeModifier - m (D)V method_6192 setBaseValue - m ()Lnet/minecraft/class_1320; method_6198 getAttribute - m ()Lnet/minecraft/class_2487; method_26839 writeInstances - m (Ljava/util/UUID;)Lnet/minecraft/class_1322; method_6199 getModifier - m (Lnet/minecraft/class_1322$class_1323;Ljava/util/Set;)V method_26832 func_233764_a_ - m (Lnet/minecraft/class_1322$class_1323;)Ljava/util/Set; method_26836 func_233768_c_ - m (Lnet/minecraft/class_1322$class_1323;)Ljava/util/Set; method_6193 getOrCreateModifiersByOperation - m ()D method_6201 getBaseValue - m (Lnet/minecraft/class_1322;)V method_26837 applyPersistentModifier - m (Lnet/minecraft/class_1324;)V method_26831 copyValuesFromInstance - m (Lnet/minecraft/class_2487;)V method_26833 readInstances - m (Lnet/minecraft/class_1322;)Z method_6196 hasModifier - m ()V method_26838 compute - m (Lnet/minecraft/class_1322;)V method_26835 applyNonPersistentModifier - m ()D method_26840 computeValue - m (Lnet/minecraft/class_1322;)V method_6197 applyModifier - m (Lnet/minecraft/class_1322;)V method_6202 removeModifier - m ()D method_6194 getValue - f Lnet/minecraft/class_1320; field_23700 genericAttribute - f Ljava/util/Map; field_23702 instanceMap - f Ljava/util/Map; field_23701 mapByOperation - f Ljava/util/Set; field_23703 mapByUUID - f Ljava/util/function/Consumer; field_23707 modifiedValueConsumer - f D field_23706 modifiedValue - f D field_23704 base - f Z field_23705 requiresComputation -c net/minecraft/class_5132 net/minecraft/entity/ai/attributes/AttributeModifierMap - m (Lnet/minecraft/class_1320;Ljava/util/UUID;)Z method_27309 hasModifier - m (Lnet/minecraft/class_1320;)Z method_27310 hasAttribute - m ()Lnet/minecraft/class_5132$class_5133; method_26861 createMutableAttribute - m (Lnet/minecraft/class_1320;Ljava/util/UUID;)D method_27308 getAttributeModifierValue - m (Lnet/minecraft/class_1320;)D method_26862 getAttributeValue - m (Lnet/minecraft/class_1320;)D method_26864 getAttributeBaseValue - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_26863 createImmutableAttributeInstance - m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_26865 getModifier - f Ljava/util/Map; field_23713 attributeMap -c net/minecraft/class_5132$class_5133 net/minecraft/entity/ai/attributes/AttributeModifierMap$MutableAttribute - m (Lnet/minecraft/class_1320;Lnet/minecraft/class_1324;)V method_26869 func_233816_a_ - m ()Lnet/minecraft/class_5132; method_26866 create - m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_5132$class_5133; method_26867 createMutableAttribute - m (Lnet/minecraft/class_1320;)Lnet/minecraft/class_1324; method_26870 createAttributeInstance - m (Lnet/minecraft/class_1320;D)Lnet/minecraft/class_5132$class_5133; method_26868 createMutableAttribute - f Ljava/util/Map; field_23714 attributeMap - f Z field_23715 edited -c net/minecraft/class_1322 net/minecraft/entity/ai/attributes/AttributeModifier - m (Ljava/lang/Object;)Z equals equals - m ()I hashCode hashCode - m ()Lnet/minecraft/class_2487; method_26860 write - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1322; method_26859 read - m (Ljava/lang/String;)Ljava/lang/String; method_6183 func_210763_a - m (Ljava/lang/String;)Ljava/lang/String; method_6184 func_210764_b - m ()Lnet/minecraft/class_1322$class_1323; method_6182 getOperation - m ()Ljava/util/UUID; method_6189 getID - m ()D method_6186 getAmount - m ()Ljava/lang/String; method_6185 getName - m ()Ljava/lang/String; toString toString - f D field_6323 amount - f Ljava/util/UUID; field_6327 id - f Ljava/util/function/Supplier; field_6326 name - f Lnet/minecraft/class_1322$class_1323; field_6324 operation - f Lorg/apache/logging/log4j/Logger; field_23712 LOGGER -c net/minecraft/class_1322$class_1323 net/minecraft/entity/ai/attributes/AttributeModifier$Operation - m ()I method_6191 getId - m ()[Lnet/minecraft/class_1322$class_1323; values values - m (I)Lnet/minecraft/class_1322$class_1323; method_6190 byId - m (Ljava/lang/String;)Lnet/minecraft/class_1322$class_1323; valueOf valueOf - f I field_6329 id - f [Lnet/minecraft/class_1322$class_1323; field_6332 VALUES - f Lnet/minecraft/class_1322$class_1323; field_6330 MULTIPLY_BASE - f Lnet/minecraft/class_1322$class_1323; field_6331 MULTIPLY_TOTAL - f Lnet/minecraft/class_1322$class_1323; field_6328 ADDITION - f [Lnet/minecraft/class_1322$class_1323; field_6333 $VALUES -c net/minecraft/class_5135 net/minecraft/entity/ai/attributes/GlobalEntityTypeAttributes - m (Lnet/minecraft/class_1299;)Z method_26877 func_233839_d_ - m (Lnet/minecraft/class_1299;)Z method_26876 func_233838_c_ - m (Lnet/minecraft/class_1299;)Z method_26875 doesEntityHaveAttributes - m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_5132; method_26873 getAttributesForEntity - m (Lnet/minecraft/class_2960;)V method_26874 func_233836_a_ - m ()V method_26872 validateEntityAttributes - f Lorg/apache/logging/log4j/Logger; field_23729 LOGGER - f Ljava/util/Map; field_23730 VANILLA_ATTRIBUTES -c net/minecraft/class_5134 net/minecraft/entity/ai/attributes/Attributes - m (Ljava/lang/String;Lnet/minecraft/class_1320;)Lnet/minecraft/class_1320; method_26871 register - f Lnet/minecraft/class_1320; field_23727 ZOMBIE_SPAWN_REINFORCEMENTS - f Lnet/minecraft/class_1320; field_23716 MAX_HEALTH - f Lnet/minecraft/class_1320; field_23726 LUCK - f Lnet/minecraft/class_1320; field_23728 HORSE_JUMP_STRENGTH - f Lnet/minecraft/class_1320; field_23717 FOLLOW_RANGE - f Lnet/minecraft/class_1320; field_23724 ARMOR - f Lnet/minecraft/class_1320; field_23725 ARMOR_TOUGHNESS - f Lnet/minecraft/class_1320; field_23721 ATTACK_DAMAGE - f Lnet/minecraft/class_1320; field_23723 ATTACK_SPEED - f Lnet/minecraft/class_1320; field_23722 ATTACK_KNOCKBACK - f Lnet/minecraft/class_1320; field_23719 MOVEMENT_SPEED - f Lnet/minecraft/class_1320; field_23718 KNOCKBACK_RESISTANCE - f Lnet/minecraft/class_1320; field_23720 FLYING_SPEED -c net/minecraft/class_1329 net/minecraft/entity/ai/attributes/RangedAttribute - f D field_6351 maximumValue - f D field_6353 minimumValue -c net/minecraft/class_4806 net/minecraft/entity/ai/brain/task/AnimalBreedTask - m (Lnet/minecraft/class_1429;)Lnet/minecraft/class_1429; method_24542 getBreedTarget - m (Lnet/minecraft/class_1429;)Z method_24546 canBreed - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;)Z method_24543 shouldExecute - m (Lnet/minecraft/class_1429;)Ljava/util/Optional; method_24548 getNearestMate - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;J)V method_24550 resetTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;J)Z method_24547 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;J)V method_24549 updateTask - m (Lnet/minecraft/class_1309;)Z method_24545 func_233847_b_ - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1429; method_24541 func_233845_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;J)V method_24544 startExecuting - f F field_23129 speed - f Lnet/minecraft/class_1299; field_22283 breedTarget - f J field_22284 breedTime -c net/minecraft/class_4096 net/minecraft/entity/ai/brain/task/GatherPOITask - m (Lnet/minecraft/class_1314;JJ)Lnet/minecraft/class_4096$class_5397; method_29925 func_241363_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;Ljava/lang/Byte;)V method_30334 func_242291_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_20816 shouldExecute - m (Lnet/minecraft/class_4153;Lnet/minecraft/class_2338;Lnet/minecraft/class_1314;Lnet/minecraft/class_3218;Lnet/minecraft/class_4158;)V method_21633 func_225441_a_ - m (JLit/unimi/dsi/fastutil/longs/Long2ObjectMap$Entry;)Z method_21634 func_241362_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Z method_21635 func_225442_a_ - m (Lnet/minecraft/class_4140;Lnet/minecraft/class_4140;)Lcom/google/common/collect/ImmutableMap; method_29245 func_233841_a_ - m (JLnet/minecraft/class_2338;)Z method_29924 func_220603_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_20817 startExecuting - f Lnet/minecraft/class_4158; field_19287 field_220604_a - f Z field_18854 field_220606_c - f Lnet/minecraft/class_4140; field_20287 field_220605_b - f J field_18332 field_220607_d - f Ljava/util/Optional; field_25812 field_242290_e - f Lit/unimi/dsi/fastutil/longs/Long2ObjectMap; field_19289 field_223013_e -c net/minecraft/class_4096$class_5397 net/minecraft/entity/ai/brain/task/GatherPOITask$RetryMarker - m (J)V method_29926 func_241370_a_ - m (J)Z method_29927 func_241371_b_ - m ()Ljava/lang/String; toString toString - m (J)Z method_29928 func_241372_c_ - f J field_25601 field_241367_b_ - f J field_25602 field_241368_c_ - f I field_25603 field_241369_d_ - f Ljava/util/Random; field_25600 field_241366_a_ -c net/minecraft/class_5355 net/minecraft/entity/ai/brain/task/ChildFollowNearestAdultTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;J)V method_29522 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Z method_29521 shouldExecute - m (Lnet/minecraft/class_1296;)Lnet/minecraft/class_1296; method_29520 getNearestVisibleAdult - f Lnet/minecraft/class_4801; field_25357 distance - f F field_25358 speed -c net/minecraft/class_4114 net/minecraft/entity/ai/brain/task/AssignProfessionTask - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_3218;Lnet/minecraft/class_3852;)V method_18986 func_220388_a_ - m (Lnet/minecraft/class_4158;Lnet/minecraft/class_3852;)Z method_18984 func_220389_a_ - m (Lnet/minecraft/class_4208;Lnet/minecraft/class_3218;)Ljava/util/Optional; method_29929 func_241376_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18988 startExecuting - m (Lnet/minecraft/class_4158;)Ljava/util/Optional; method_18985 func_220390_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_18987 shouldExecute -c net/minecraft/class_4808 net/minecraft/entity/ai/brain/task/RandomlyStopAttackingTask - f I field_22287 field_233858_b_ -c net/minecraft/class_4807 net/minecraft/entity/ai/brain/task/AttackStrafingTask - m (Lnet/minecraft/class_1308;)Z method_24554 isTargetWithinDistance - m (Lnet/minecraft/class_1308;)Z method_24551 hasSeen - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24553 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_24552 shouldExecute - m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_1309; method_24555 getAttackTarget - f F field_22286 speed - f I field_22285 distance -c net/minecraft/class_4215 net/minecraft/entity/ai/brain/BrainUtil - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)V method_19554 lookAt - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;F)V method_19555 approachEachOther - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)Z method_19553 func_220615_b - m (Lnet/minecraft/class_1646;Ljava/util/function/Predicate;Ljava/util/List;)Ljava/util/stream/Stream; method_29249 func_233873_a_ - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)Z method_19550 canSee - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;F)V method_19548 lookApproachEachOther - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;D)Z method_24558 isTargetWithinDistance - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_243;)V method_19949 spawnItemNearEntity - m (Lnet/minecraft/class_1309;Ljava/util/Optional;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_24562 getNearestEntity - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1309;)Z method_19547 func_220622_a - m (Lnet/minecraft/class_3218;ILnet/minecraft/class_4076;)Z method_20418 func_220620_a - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;I)Z method_25940 canFireAtTarget - m (Lnet/minecraft/class_1309;Ljava/util/UUID;)Lnet/minecraft/class_1309; method_24563 func_233868_a_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4140;)Ljava/util/Optional; method_24560 getTargetFromMemory - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;FI)V method_24557 setTargetEntity - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1646; method_29246 func_233859_a_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_24559 getNearestEntity - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_4140;Lnet/minecraft/class_1299;)Z method_19551 isCorrectVisibleType - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1309;)Z method_29247 func_233871_a_ - m (Lnet/minecraft/class_1646;Ljava/util/function/Predicate;)Ljava/util/stream/Stream; method_29248 getNearbyVillagers - m (Lnet/minecraft/class_1309;Ljava/util/List;)Z method_19549 func_220614_a - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_2338;FI)V method_24561 setTargetPosition - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_4140;Ljava/util/function/Predicate;)Z method_24564 canSeeEntity - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_25941 canAttackTarget - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)V method_19552 lookAtEachOther - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4076;I)Lnet/minecraft/class_4076; method_20419 getClosestVillageSection - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_24565 isMobVisible -c net/minecraft/class_4097 net/minecraft/entity/ai/brain/task/Task - m (J)Z method_18915 isTimedOut - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_18923 tick - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)Z method_18922 start - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_18925 stop - m ()Lnet/minecraft/class_4097$class_4098; method_18921 getStatus - m (Lnet/minecraft/class_1309;)Z method_19546 hasRequiredMemories - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)Z method_18919 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_18920 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_18926 resetTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)Z method_18927 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_18924 updateTask - f I field_18336 durationMax - f Ljava/util/Map; field_19291 requiredMemoryState - f I field_18335 durationMin - f J field_18334 stopTime - f Lnet/minecraft/class_4097$class_4098; field_18333 status -c net/minecraft/class_4097$class_4098 net/minecraft/entity/ai/brain/task/Task$Status - m ()[Lnet/minecraft/class_4097$class_4098; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4097$class_4098; valueOf valueOf - f [Lnet/minecraft/class_4097$class_4098; field_18339 $VALUES - f Lnet/minecraft/class_4097$class_4098; field_18337 STOPPED - f Lnet/minecraft/class_4097$class_4098; field_18338 RUNNING -c net/minecraft/class_4242 net/minecraft/entity/ai/brain/task/CelebrateRaidVictoryTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19954 updateTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_19952 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19953 resetTask - m (Lnet/minecraft/class_1767;I)Lnet/minecraft/class_1799; method_19950 makeFirework - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19951 shouldExecute - f Lnet/minecraft/class_3765; field_18983 raid -c net/minecraft/class_4099 net/minecraft/util/math/BlockPosWrapper - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2338; field_18340 pos - f Lnet/minecraft/class_243; field_18341 centerPos -c net/minecraft/class_4810 net/minecraft/entity/ai/brain/task/ShootTargetTask - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_24568 func_233887_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24573 updateTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)Z method_24571 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_24570 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24574 resetTask - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_24569 func_233888_a_ - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_24572 func_233889_b_ - f I field_22293 field_233885_b_ - f Lnet/minecraft/class_4810$class_4811; field_22294 field_233886_c_ -c net/minecraft/class_4810$class_4811 net/minecraft/entity/ai/brain/task/ShootTargetTask$Status - m ()[Lnet/minecraft/class_4810$class_4811; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4810$class_4811; valueOf valueOf - f Lnet/minecraft/class_4810$class_4811; field_22297 CHARGED - f Lnet/minecraft/class_4810$class_4811; field_22296 CHARGING - f [Lnet/minecraft/class_4810$class_4811; field_22299 $VALUES - f Lnet/minecraft/class_4810$class_4811; field_22298 READY_TO_ATTACK - f Lnet/minecraft/class_4810$class_4811; field_22295 UNCHARGED -c net/minecraft/class_4809 net/minecraft/entity/ai/brain/task/PiglinIdleActivityTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_24566 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24567 startExecuting - f Lnet/minecraft/class_4140; field_22289 field_233882_c_ - f Ljava/util/function/Predicate; field_22288 field_233881_b_ - f Lnet/minecraft/class_4140; field_22290 field_233883_d_ - f Lnet/minecraft/class_4801; field_22291 field_233884_e_ -c net/minecraft/class_4101 net/minecraft/entity/ai/brain/task/DummyTask -c net/minecraft/class_4812 net/minecraft/entity/ai/brain/task/StopRidingEntityTask - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;)Z method_24575 func_233892_a_ - f I field_22300 field_233890_b_ - f Ljava/util/function/BiPredicate; field_22301 field_233891_c_ -c net/minecraft/class_4102 net/minecraft/util/math/EntityPosWrapper - m ()Ljava/lang/String; toString toString - f Z field_24382 eyePos - f Lnet/minecraft/class_1297; field_18342 entity -c net/minecraft/class_4103 net/minecraft/entity/ai/brain/task/MultiTask - m (Lcom/mojang/datafixers/util/Pair;)V method_18929 func_220411_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;JLnet/minecraft/class_4097;)Z method_18938 func_220413_c - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;JLnet/minecraft/class_4097;)V method_18932 func_220409_b - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;JLnet/minecraft/class_4097;)V method_18930 func_220412_a - m (Lnet/minecraft/class_4097;)Z method_18928 func_220407_b - m (Lnet/minecraft/class_4097;)Z method_18937 func_220414_d - m (Lnet/minecraft/class_4097;)Z method_18931 func_220408_c - m (Lnet/minecraft/class_4097;)Z method_19955 func_220410_a - f Lnet/minecraft/class_4103$class_4104; field_18345 field_220417_c - f Ljava/util/Set; field_18344 field_220416_b - f Lnet/minecraft/class_4103$class_4216; field_18346 field_220418_d - f Lnet/minecraft/class_4131; field_18347 field_220419_e -c net/minecraft/class_4103$class_4104 net/minecraft/entity/ai/brain/task/MultiTask$Ordering - m (Ljava/lang/String;)Lnet/minecraft/class_4103$class_4104; valueOf valueOf - m (Lnet/minecraft/class_4131;)V method_18940 func_220627_b - m ()[Lnet/minecraft/class_4103$class_4104; values values - m (Lnet/minecraft/class_4131;)V method_18939 func_220628_a - f Lnet/minecraft/class_4103$class_4104; field_18348 ORDERED - f Ljava/util/function/Consumer; field_18350 field_220629_c - f Lnet/minecraft/class_4103$class_4104; field_18349 SHUFFLED - f [Lnet/minecraft/class_4103$class_4104; field_18351 $VALUES -c net/minecraft/class_4103$class_4216 net/minecraft/entity/ai/brain/task/MultiTask$RunType - m (Lnet/minecraft/class_4131;Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;J)V method_19559 func_220630_a - m ()[Lnet/minecraft/class_4103$class_4216; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4103$class_4216; valueOf valueOf - f Lnet/minecraft/class_4103$class_4216; field_18856 TRY_ALL - f [Lnet/minecraft/class_4103$class_4216; field_18857 $VALUES - f Lnet/minecraft/class_4103$class_4216; field_18855 RUN_ONE -c net/minecraft/class_4103$class_4216$1 net/minecraft/entity/ai/brain/task/MultiTask$RunType$1 - m (Lnet/minecraft/class_4097;)Z method_19560 func_220634_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;JLnet/minecraft/class_4097;)Z method_19561 func_220633_a -c net/minecraft/class_4103$class_4216$2 net/minecraft/entity/ai/brain/task/MultiTask$RunType$2 - m (Lnet/minecraft/class_4097;)Z method_19562 func_220632_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;JLnet/minecraft/class_4097;)V method_19563 func_220631_a -c net/minecraft/class_4103$1 net/minecraft/entity/ai/brain/task/MultiTask$1 -c net/minecraft/class_4813 net/minecraft/entity/ai/brain/task/PredicateTask - f Ljava/util/function/Predicate; field_22302 field_233895_b_ - f Lnet/minecraft/class_4140; field_22303 field_233896_c_ -c net/minecraft/class_4244 net/minecraft/entity/ai/brain/task/GoOutsideAfterRaidTask -c net/minecraft/class_4243 net/minecraft/entity/ai/brain/task/GiveHeroGiftsTask - m (Lnet/minecraft/class_1646;)Ljava/util/Optional; method_19966 getNearestPlayer - m (Lnet/minecraft/class_1646;)Z method_19964 hasNearestPlayer - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19967 updateTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_19965 shouldContinueExecuting - m (Lnet/minecraft/class_3218;)I method_19961 getNextCooldown - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19968 resetTask - m (Lnet/minecraft/class_1657;)Z method_19959 isHero - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1309;)V method_19957 giveGifts - m (Lnet/minecraft/class_1646;)Ljava/util/List; method_19956 getGifts - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19962 shouldExecute - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1657;)Z method_19958 isCloseEnough - m (Ljava/util/HashMap;)V method_19960 func_220395_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19963 startExecuting - f J field_18987 startTime - f Z field_18986 done - f Ljava/util/Map; field_18984 GIFTS - f I field_18985 cooldown -c net/minecraft/class_4458 net/minecraft/entity/ai/brain/task/WalkToPOITask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_21637 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)D method_21638 func_225444_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_21636 shouldExecute - f F field_20288 field_225445_a - f I field_20289 field_225446_b -c net/minecraft/class_4814 net/minecraft/entity/ai/brain/task/HuntCelebrationTask - m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_2338; method_24576 func_233899_a_ - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_24577 func_233900_a_ - m (Ljava/util/Random;)I method_24578 func_233901_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24579 startExecuting - f F field_23130 field_233898_c_ - f I field_22304 field_233897_b_ -c net/minecraft/class_4815 net/minecraft/entity/ai/brain/task/PickupWantedItemTask - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1542; method_24580 func_233909_a_ - m (Lnet/minecraft/class_1309;)Z method_24581 func_233910_b_ - f Ljava/util/function/Predicate; field_22305 field_233906_b_ - f F field_23131 field_233908_d_ - f I field_22306 field_233907_c_ -c net/minecraft/class_5325 net/minecraft/entity/ai/brain/task/FindPotentialJobTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_29251 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_29252 updateTask - m (Lnet/minecraft/class_4158;)Z method_29783 func_241377_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_29523 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_29525 resetTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4208;)V method_29524 func_233905_a_ - m (Lnet/minecraft/class_4168;)Ljava/lang/Boolean; method_29250 func_233904_a_ - f F field_25155 speed -c net/minecraft/class_4289 net/minecraft/entity/ai/brain/task/WalkRandomlyInsideTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_20422 startExecuting - m (Lnet/minecraft/class_1314;Lnet/minecraft/class_2338;)V method_20420 func_220430_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_20424 func_220428_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;Lnet/minecraft/class_2338;)Z method_20425 func_220427_b - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;Lnet/minecraft/class_2338;)Z method_20423 func_220429_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_20421 shouldExecute - f F field_19258 field_233911_b_ -c net/minecraft/class_4217 net/minecraft/entity/ai/brain/task/FarmTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_20394 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_20392 startExecuting - m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_2338; method_20641 getNextPosForFarming - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;)Z method_20640 isValidPosForFarming - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19566 resetTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19565 updateTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19564 shouldExecute - f Lnet/minecraft/class_2338; field_18858 field_220422_a - f Ljava/util/List; field_19351 farmableBlocks - f J field_18861 taskCooldown - f I field_19239 idleTime -c net/minecraft/class_4107 net/minecraft/entity/ai/brain/task/InteractWithDoorTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)Z method_30763 func_242297_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_2338;)Z method_30766 func_242300_b - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_2338;)Z method_30761 func_242295_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_2338;)V method_30767 func_242301_c - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)Z method_30765 func_242299_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_9;Lnet/minecraft/class_9;)V method_30760 func_242294_a - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_30764 func_242298_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_4208;)Z method_30762 func_242296_a - f I field_26388 field_242293_c - f Lnet/minecraft/class_9; field_26387 field_242292_b -c net/minecraft/class_4106 net/minecraft/entity/ai/brain/task/InteractWithEntityTask - m (Lnet/minecraft/class_1309;)Z method_18945 func_220440_b - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_18944 func_220438_a - m (Lnet/minecraft/class_1309;)Z method_18948 func_220442_d - m (Lnet/minecraft/class_1309;)Z method_24583 func_233914_b_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4095;Ljava/util/List;)V method_18943 func_220437_a - m (Lnet/minecraft/class_1309;)Z method_24582 func_233913_a_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_18946 func_220443_a - m (Lnet/minecraft/class_1309;)Z method_18949 func_220441_e - m (Lnet/minecraft/class_1299;ILnet/minecraft/class_4140;FI)Lnet/minecraft/class_4106; method_18941 func_220445_a - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_18942 func_220439_a - f F field_18356 field_220447_b - f I field_18355 field_220446_a - f Lnet/minecraft/class_1299; field_18357 field_220448_c - f I field_18358 field_220449_d - f Lnet/minecraft/class_4140; field_18361 field_220452_g - f Ljava/util/function/Predicate; field_18359 field_220450_e - f Ljava/util/function/Predicate; field_18360 field_220451_f -c net/minecraft/class_4246 net/minecraft/entity/ai/brain/task/FindHidingPlaceTask - m (Lnet/minecraft/class_4158;)Z method_19983 func_220453_a - m (Lnet/minecraft/class_2338;)Z method_20212 func_220456_b - m (Lnet/minecraft/class_4158;)Z method_19985 func_220454_b - m (Lnet/minecraft/class_2338;)Z method_20211 func_220455_a - f I field_18994 field_220458_b - f I field_18995 field_220459_c - f Ljava/util/Optional; field_18998 hidingPos - f F field_18993 speed -c net/minecraft/class_4245 net/minecraft/entity/ai/brain/task/JumpOnBedTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_19976 resetTask - m (Lnet/minecraft/class_1308;)Ljava/util/Optional; method_19969 getBed - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19979 func_220465_d - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_19972 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19977 func_220468_c - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19975 func_220469_b - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)Z method_19978 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_19980 updateTask - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2338;)V method_19970 setWalkTarget - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19971 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_19974 isBed - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;Lnet/minecraft/class_2338;)V method_19973 func_220461_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19982 func_220462_f - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19981 func_220464_e - f I field_18992 field_220474_e - f Lnet/minecraft/class_2338; field_18989 bedPos - f F field_18988 speed - f I field_18990 field_220472_c - f I field_18991 field_220473_d -c net/minecraft/class_4108 net/minecraft/entity/ai/brain/task/TradeTask - m (Lnet/minecraft/class_1646;)V method_18953 walkAndLookCustomer - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_18954 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_18955 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18956 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18957 resetTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18958 updateTask - f F field_18362 speed -c net/minecraft/class_4247 net/minecraft/entity/ai/brain/task/FindHidingPlaceDuringRaidTask -c net/minecraft/class_4816 net/minecraft/entity/ai/brain/task/AttackTargetTask - m (Lnet/minecraft/class_1308;)Z method_25942 isRanged - m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_1309; method_25944 getAttackTarget - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1792;)Z method_25943 func_233922_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24590 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_24588 shouldExecute - f I field_22308 cooldown -c net/minecraft/class_4110 net/minecraft/entity/ai/brain/task/LookTask - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4115;)V method_18966 func_220484_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_18968 resetTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_18969 updateTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)Z method_18967 shouldContinueExecuting - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4115;)Z method_19569 func_220485_b_ -c net/minecraft/class_4248 net/minecraft/entity/ai/brain/task/MoveToSkylightTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)Lnet/minecraft/class_243; method_19987 findSkylightPosition - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_4142; method_19986 func_220492_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;Lnet/minecraft/class_2338;)Z method_20497 func_226306_a_ - f F field_18999 speed -c net/minecraft/class_4817 net/minecraft/entity/ai/brain/task/RideEntityTask - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1297; method_24592 func_233926_b_ - m (Lnet/minecraft/class_1309;)Z method_24591 func_233925_a_ - f F field_23132 field_233924_b_ -c net/minecraft/class_4218 net/minecraft/entity/ai/brain/task/WalkToVillagerBabiesTask - m (Lnet/minecraft/class_1309;)Z method_19593 func_220502_c - m (Lnet/minecraft/class_1314;)Ljava/util/Optional; method_19588 func_220497_b - m (Ljava/util/Map$Entry;)Z method_19581 func_220504_a - m (Lnet/minecraft/class_1314;Lnet/minecraft/class_1309;)V method_19580 func_220498_a - m (Lnet/minecraft/class_1314;Lnet/minecraft/class_1309;)V method_19589 func_220506_b - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19577 func_220499_a - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19591 func_220507_c - m (Lnet/minecraft/class_1309;Ljava/lang/Integer;)Ljava/lang/Integer; method_19578 func_220511_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_19584 startExecuting - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19587 func_220496_b - m (Ljava/util/Map;Lnet/minecraft/class_1309;)V method_19582 func_220509_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_19583 shouldExecute - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_19576 func_220495_a - m (Lnet/minecraft/class_1314;)Ljava/util/Map; method_19592 func_220505_c - m (Lnet/minecraft/class_1314;)Ljava/util/List; method_19594 func_220503_d - m (Lnet/minecraft/class_1314;)Ljava/util/Optional; method_19579 func_220510_a - m (Lnet/minecraft/class_1314;)Z method_19590 func_220501_e - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;Lnet/minecraft/class_1309;)V method_19585 func_220508_a - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_19586 func_220500_b -c net/minecraft/class_4112 net/minecraft/entity/ai/brain/task/WalkToTargetTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_18983 updateTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)Z method_18979 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_18982 startExecuting - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4142;)Z method_18980 hasReachedTarget - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_4142;J)Z method_18977 func_220487_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_18978 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_18981 resetTask - f F field_18371 field_220490_c - f Lnet/minecraft/class_11; field_18369 field_220488_a - f I field_18964 field_242302_b - f Lnet/minecraft/class_2338; field_18370 field_220489_b -c net/minecraft/class_4115 net/minecraft/util/math/IPosWrapper - m ()Lnet/minecraft/class_243; method_18991 getPos - m (Lnet/minecraft/class_1309;)Z method_18990 isVisibleTo - m ()Lnet/minecraft/class_2338; method_18989 getBlockPos -c net/minecraft/class_5326 net/minecraft/entity/ai/brain/task/SwitchVillagerJobTask - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4208;Lnet/minecraft/class_4158;)V method_29256 func_233933_a_ - m (Lnet/minecraft/class_4208;Lnet/minecraft/class_4158;Lnet/minecraft/class_1646;)Z method_29259 func_233935_b_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_29258 startExecuting - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1646;)Lnet/minecraft/class_1646; method_29255 func_233932_a_ - m (Lnet/minecraft/class_4208;Lnet/minecraft/class_4158;Lnet/minecraft/class_1646;)Z method_29257 func_233934_a_ - m (Lnet/minecraft/class_1646;)Z method_29254 func_233931_a_ - m (Lnet/minecraft/class_4158;Lnet/minecraft/class_3852;)Z method_29253 func_233930_a_ - f Lnet/minecraft/class_3852; field_25156 field_233929_b_ -c net/minecraft/class_4818 net/minecraft/entity/ai/brain/task/WalkRandomlyTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_24594 startExecuting - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_4142; method_24593 func_233939_a_ - f I field_22311 field_233937_c_ - f I field_22312 field_233938_d_ - f F field_22310 field_233936_b_ -c net/minecraft/class_4295 net/minecraft/entity/ai/brain/task/ChangeJobTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_20450 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_20449 shouldExecute -c net/minecraft/class_4249 net/minecraft/entity/ai/brain/task/HideFromRaidOnBellRingTask -c net/minecraft/class_4251 net/minecraft/entity/ai/brain/task/RingBellTask -c net/minecraft/class_4250 net/minecraft/entity/ai/brain/task/ForgetRaidTask -c net/minecraft/class_4118 net/minecraft/entity/ai/brain/task/FirstShuffledTask -c net/minecraft/class_4820 net/minecraft/entity/ai/brain/task/SupplementedTask - m (Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; method_24597 func_233943_a_ - f Z field_22315 field_233942_d_ - f Lnet/minecraft/class_4097; field_22314 field_233941_c_ - f Ljava/util/function/Predicate; field_22313 field_233940_b_ -c net/minecraft/class_4290 net/minecraft/entity/ai/brain/task/WalkToHouseTask - m (Lnet/minecraft/class_2338;)Z method_21639 func_225453_a_ - m (Lit/unimi/dsi/fastutil/longs/Long2LongMap$Entry;)Z method_21640 func_225454_a_ - f J field_19260 field_220525_b - f F field_20290 field_220524_a - f Lit/unimi/dsi/fastutil/longs/Long2LongMap; field_20291 field_225455_b - f I field_20292 field_225456_c -c net/minecraft/class_4821 net/minecraft/entity/ai/brain/task/RunSometimesTask - m (Lnet/minecraft/class_3218;)V method_24598 func_233949_a_ - f Z field_22317 field_233945_c_ - f I field_22320 field_233948_f_ - f Lnet/minecraft/class_4097; field_22319 field_233947_e_ - f Z field_22316 field_233944_b_ - f Lnet/minecraft/class_4801; field_22318 field_233946_d_ -c net/minecraft/class_4252 net/minecraft/entity/ai/brain/task/ExpireHidingTask - f I field_19154 hidingDistance - f I field_19001 hidingDuration - f I field_19000 field_220538_b -c net/minecraft/class_4119 net/minecraft/entity/ai/brain/task/LookAtEntityTask - m (Lnet/minecraft/class_1309;)Z method_24599 func_233953_a_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19001 func_220517_a_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1309;)Z method_18997 func_220518_a - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4095;Ljava/util/List;)V method_18998 func_220515_a_ - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_18999 func_220516_a_ - m (Lnet/minecraft/class_1311;Lnet/minecraft/class_1309;)Z method_19000 func_220514_a - f F field_18377 field_220520_b - f Ljava/util/function/Predicate; field_18376 targetPredicate -c net/minecraft/class_4253 net/minecraft/entity/ai/brain/task/BeginRaidTask -c net/minecraft/class_4109 net/minecraft/entity/ai/brain/task/FindInteractionAndLookTargetTask - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_18961 func_220527_a - m (Lnet/minecraft/class_1309;)Ljava/util/List; method_18959 getVisibleMobs - m (Lnet/minecraft/class_1309;)Z method_18962 isNearInteractableEntity - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_18963 func_220529_a - m (Lnet/minecraft/class_1309;)Z method_18964 func_220531_c - m (Lnet/minecraft/class_1309;)Z method_18965 func_220528_d - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4095;Ljava/util/List;)V method_18960 func_220526_a - f Ljava/util/function/Predicate; field_18366 field_220536_d - f I field_18364 field_220534_b - f Ljava/util/function/Predicate; field_18365 field_220535_c - f Lnet/minecraft/class_1299; field_18363 targetType -c net/minecraft/class_4822 net/minecraft/entity/ai/brain/task/MoveToTargetTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_25945 startExecuting - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)V method_24605 setTargetMemory - m (Lnet/minecraft/class_1309;)V method_24604 clearTargetMemory - f F field_22323 speed -c net/minecraft/class_4121 net/minecraft/entity/ai/brain/task/RunAwayTask - m (Lnet/minecraft/class_1314;)Lnet/minecraft/class_243; method_24600 func_233961_a_ - m (Lnet/minecraft/class_1314;)Z method_24602 func_233964_b_ - m (Lnet/minecraft/class_4140;FIZ)Lnet/minecraft/class_4121; method_24603 func_233965_b_ - m (Lnet/minecraft/class_1314;Lnet/minecraft/class_243;F)V method_19596 func_233962_a_ - m (Lnet/minecraft/class_4140;FIZ)Lnet/minecraft/class_4121; method_24601 func_233963_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_19002 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_19003 startExecuting - f F field_18381 field_233958_c_ - f I field_22321 field_233959_d_ - f Lnet/minecraft/class_4140; field_18380 field_233957_b_ - f Ljava/util/function/Function; field_22322 field_233960_e_ -c net/minecraft/class_4120 net/minecraft/entity/ai/brain/task/WalkTowardsLookTargetTask - f I field_19002 field_220544_b - f F field_18378 field_220543_a -c net/minecraft/class_4122 net/minecraft/entity/ai/brain/task/StayNearPointTask - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4208;)Z method_19597 func_242304_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_4208;)Z method_19988 func_220547_b - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_20498 func_223017_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19509 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4208;)Z method_30952 func_242303_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;JLnet/minecraft/class_4095;Lnet/minecraft/class_4208;)V method_19004 func_220545_a - m (Lnet/minecraft/class_1646;J)V method_21722 func_225457_a - f I field_19292 field_223018_e - f F field_18383 field_220549_b - f Lnet/minecraft/class_4140; field_18382 field_220548_a - f I field_18385 field_220551_d - f I field_18384 field_220550_c -c net/minecraft/class_4123 net/minecraft/entity/ai/brain/task/SleepAtHomeTask - f J field_18848 field_220552_a -c net/minecraft/class_4130 net/minecraft/entity/ai/brain/task/ShowWaresTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_19600 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19602 startExecuting - m (Lnet/minecraft/class_1914;)Z method_19028 func_220554_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19605 resetTask - m (Lnet/minecraft/class_1646;)V method_19026 func_220553_d - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19604 updateTask - m (Lnet/minecraft/class_1646;)V method_19601 func_220555_b - m (Lnet/minecraft/class_1646;)V method_19598 func_220558_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19599 shouldExecute - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1646;)V method_19027 func_220556_a - m (Lnet/minecraft/class_1646;)Lnet/minecraft/class_1309; method_19603 func_220557_c - f I field_18394 field_220561_c - f I field_18395 field_220562_d - f I field_18396 field_220563_e - f Lnet/minecraft/class_1799; field_18392 field_220559_a - f Ljava/util/List; field_18393 field_220560_b -c net/minecraft/class_4824 net/minecraft/entity/ai/brain/task/ForgetAttackTargetTask - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_24612 func_233976_a_ - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_24615 func_233977_b_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_24613 shouldExecute - m (Lnet/minecraft/class_1308;)Z method_24611 func_233975_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24614 startExecuting - f Ljava/util/function/Function; field_22326 field_233974_c_ - f Ljava/util/function/Predicate; field_22325 field_233973_b_ -c net/minecraft/class_4124 net/minecraft/entity/ai/brain/task/CongregateTask - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4095;Ljava/util/List;)V method_19006 func_220568_a - m (Lnet/minecraft/class_1309;)Z method_19008 func_220570_b - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19009 func_220571_a - m (Lnet/minecraft/class_1309;)Z method_19005 func_220572_a - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_19007 func_220569_a -c net/minecraft/class_4828 net/minecraft/entity/ai/brain/task/FindNewAttackTargetTask - m (Lnet/minecraft/class_1308;)Z method_24622 func_233983_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24623 startExecuting - m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_1309; method_24625 func_233985_b_ - m (Lnet/minecraft/class_1309;)Z method_24621 func_233982_a_ - m (Lnet/minecraft/class_1308;)V method_24627 func_233987_d_ - m (Lnet/minecraft/class_1308;)Z method_24626 func_233986_c_ - m (Lnet/minecraft/class_1309;)Z method_24624 func_233984_b_ - f Ljava/util/function/Predicate; field_22329 field_233981_b_ -c net/minecraft/class_4825 net/minecraft/entity/ai/brain/task/EndAttackTask - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1309; method_24616 getAttackTarget - f I field_22327 field_233978_b_ - f Ljava/util/function/BiPredicate; field_25157 field_233979_c_ -c net/minecraft/class_4116 net/minecraft/entity/ai/brain/task/WorkTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_18993 shouldExecute - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_4142; method_18992 func_220564_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_18994 startExecuting - f F field_25752 field_242305_e - f I field_18374 field_220567_c - f Lnet/minecraft/class_4140; field_18372 field_220565_a - f J field_18373 field_220566_b -c net/minecraft/class_4829 net/minecraft/entity/ai/brain/task/GetAngryTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_24629 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_29526 func_233988_a_ -c net/minecraft/class_4220 net/minecraft/entity/ai/brain/task/WalkTowardsRandomSecondaryPosTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19610 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19609 shouldExecute - f Lnet/minecraft/class_4140; field_18867 field_220574_b - f I field_18870 field_220577_e - f I field_18869 field_220576_d - f F field_18868 field_220575_c - f Lnet/minecraft/class_4208; field_18872 field_220579_g - f J field_18871 field_220578_f - f Lnet/minecraft/class_4140; field_18866 field_220573_a -c net/minecraft/class_4219 net/minecraft/entity/ai/brain/task/WalkTowardsPosTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_19608 startExecuting - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_4208;)V method_19606 func_220580_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_19607 shouldExecute - f F field_25753 field_242306_e - f I field_18864 field_220583_c - f Lnet/minecraft/class_4140; field_18862 field_220581_a - f I field_18863 field_220582_b - f J field_18865 field_220584_d -c net/minecraft/class_4125 net/minecraft/entity/ai/brain/task/SwimTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)V method_19012 updateTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;J)Z method_19011 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)Z method_19010 shouldExecute - f F field_18387 field_220590_b -c net/minecraft/class_4127 net/minecraft/entity/ai/brain/task/UpdateActivityTask -c net/minecraft/class_4126 net/minecraft/entity/ai/brain/task/ShareItemsTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19018 updateTask - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1646;)Ljava/util/Set; method_19611 func_220585_a - m (Lcom/google/common/collect/ImmutableSet;Lnet/minecraft/class_1792;)Z method_19014 func_220587_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19019 resetTask - m (Lnet/minecraft/class_1646;Ljava/util/Set;Lnet/minecraft/class_1309;)V method_19013 func_220586_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19015 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19017 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_19016 shouldContinueExecuting - f Ljava/util/Set; field_18389 field_220588_a -c net/minecraft/class_4128 net/minecraft/entity/ai/brain/task/ExpirePOITask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)Z method_20500 func_223019_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_20499 func_223020_a - f Lnet/minecraft/class_4140; field_18390 field_220591_a - f Ljava/util/function/Predicate; field_18391 poiType -c net/minecraft/class_4982 net/minecraft/entity/ai/brain/task/BoneMealCropsTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_26332 updateTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_26328 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_26331 resetTask - m (Lnet/minecraft/class_1646;)V method_26324 updateMemory - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_26327 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Ljava/util/Optional; method_26329 findGrowablePosition - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;)Z method_26326 isGrowable - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_26330 startExecuting - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;)V method_26325 func_233995_a_ - f I field_23224 grownObjects - f Ljava/util/Optional; field_23225 growableTarget - f J field_23223 taskCooldown - f J field_23222 taskDelay -c net/minecraft/class_4117 net/minecraft/entity/ai/brain/task/FindWalkTargetTask - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_4142; method_20431 func_220595_a - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_4142; method_20432 func_220596_b - m (Lnet/minecraft/class_1314;)V method_20429 func_220593_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;J)V method_18996 startExecuting - m (Lnet/minecraft/class_1314;Lnet/minecraft/class_4076;)V method_20430 func_220594_a - f F field_18375 speed - f I field_19352 maxXZ - f I field_19353 maxY -c net/minecraft/class_4254 net/minecraft/entity/ai/brain/task/FindWalkTargetAfterRaidVictoryTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1314;)Z method_19989 shouldExecute -c net/minecraft/class_4129 net/minecraft/entity/ai/brain/task/VillagerTasks - m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19022 rest - m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19993 hide - m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19023 meet - m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19991 preRaid - m ()Lcom/mojang/datafixers/util/Pair; method_20242 lookAtPlayerOrVillager - m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19021 work - m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19992 raid - m ()Lcom/mojang/datafixers/util/Pair; method_20241 lookAtMany - m (F)Lcom/google/common/collect/ImmutableList; method_19990 play - m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19025 panic - m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19020 core - m (Lnet/minecraft/class_3852;F)Lcom/google/common/collect/ImmutableList; method_19024 idle -c net/minecraft/class_4100 net/minecraft/entity/ai/brain/task/ClearHurtTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_20645 startExecuting - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_1309;)Z method_19558 func_223523_a - m (Lnet/minecraft/class_1646;)Z method_19557 isAttackerWithinDistance -c net/minecraft/class_4113 net/minecraft/entity/ai/brain/task/PanicTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_20648 updateTask - m (Lnet/minecraft/class_1309;)Z method_19574 hostileNearby - m (Lnet/minecraft/class_1309;)Z method_19575 hasBeenHurt - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_20647 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_20646 shouldContinueExecuting -c net/minecraft/class_4111 net/minecraft/entity/ai/brain/task/CreateBabyVillagerTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18974 startExecuting - m (Lnet/minecraft/class_1646;)Z method_18972 canBreed - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_18973 shouldContinueExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18975 updateTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;)V method_19572 setHomePosition - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_18976 resetTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Ljava/util/Optional; method_19573 findHomePosition - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_1646;)V method_20643 breed - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_19571 shouldExecute - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;)Z method_20642 canReachHomePosition - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_1646;)Ljava/util/Optional; method_18970 createChild - m (Lnet/minecraft/class_1296;)Z method_24631 func_233999_a_ - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;)Z method_20644 func_220481_b_ - f J field_18368 duration -c net/minecraft/class_4131 net/minecraft/util/WeightedList - m (Lnet/minecraft/class_4131;)Ljava/util/List; method_28337 func_234001_a_ - m (Ljava/util/Random;)Lnet/minecraft/class_4131; method_23333 func_226314_a_ - m ()Lnet/minecraft/class_4131; method_19029 func_226309_a_ - m (Ljava/util/Random;)Ljava/lang/Object; method_23337 func_226318_b_ - m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28338 func_234002_a_ - m (Ljava/lang/Object;I)Lnet/minecraft/class_4131; method_19031 func_226313_a_ - m (Ljava/lang/Object;)D method_23332 func_234003_a_ - m ()Ljava/util/stream/Stream; method_19032 func_220655_b - m (Ljava/util/Random;Lnet/minecraft/class_4131$class_4132;)V method_23334 func_234004_a_ - m ()Z method_28339 func_234005_b_ - m ()Ljava/lang/String; toString toString - f Ljava/util/List; field_18397 field_220658_a - f Ljava/util/Random; field_18398 random -c net/minecraft/class_4131$1 net/minecraft/util/WeightedList$1 -c net/minecraft/class_4131$class_4132 net/minecraft/util/WeightedList$Entry - m (Lnet/minecraft/class_4131$class_4132;)I method_28342 func_234009_b_ - m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28341 func_234008_a_ - m (Lnet/minecraft/class_4131$class_4132;)D method_23339 func_234010_c_ - m ()Ljava/lang/String; toString toString - m ()Ljava/lang/Object; method_19035 func_220647_b - m (F)V method_19034 func_220648_a - m (Lnet/minecraft/class_4131$class_4132;F)V method_23340 func_234007_a_ - m ()D method_19033 func_220649_a - m (Lnet/minecraft/class_4131$class_4132;)Ljava/lang/Object; method_28340 func_234006_a_ - f D field_18402 field_220653_d - f I field_18401 field_220652_c - f Ljava/lang/Object; field_18400 field_220651_b -c net/minecraft/class_4131$class_4132$1 net/minecraft/util/WeightedList$Entry$1 - m (Lcom/mojang/serialization/Dynamic;Ljava/lang/Object;)Lnet/minecraft/class_4131$class_4132; method_28344 func_234012_a_ - m (Ljava/lang/Object;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; encode encode - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_4131$class_4132;)Lcom/mojang/datafixers/util/Pair; method_28345 func_234013_a_ - m (Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; decode decode - m (Lnet/minecraft/class_4131$class_4132;Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult; method_28343 encode - f Lcom/mojang/serialization/Codec; field_24666 field_234011_a_ -c net/minecraft/class_4214 net/minecraft/entity/ai/brain/task/WakeUpTask -c net/minecraft/class_4133 net/minecraft/entity/ai/brain/task/SpawnGolemTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_21641 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)Z method_26336 shouldContinueExecuting - m (Lnet/minecraft/class_4095;Lnet/minecraft/class_4208;)V method_19613 func_225460_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)V method_26335 execute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_21642 startExecuting - f J field_19426 field_225461_a -c net/minecraft/class_4983 net/minecraft/entity/ai/brain/task/FarmerWorkTask - m (Lnet/minecraft/class_1646;)V method_26333 bakeBread - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_4208;Lnet/minecraft/class_2680;)V method_26334 compost - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_30232 func_242308_a - f Ljava/util/List; field_23226 field_234014_b_ -c net/minecraft/class_5327 net/minecraft/entity/ai/brain/task/FindJobTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;Lnet/minecraft/class_1646;)V method_29267 func_234023_a_ - m (Lnet/minecraft/class_1646;)V method_29261 func_234019_a_ - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)Z method_29262 func_234020_a_ - m (Lnet/minecraft/class_4158;Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;)Z method_29260 func_234018_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;Lnet/minecraft/class_1646;Lnet/minecraft/class_2338;Z)V method_29266 func_234022_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)Z method_29264 shouldExecute - m (Ljava/util/Optional;Lnet/minecraft/class_2338;Lnet/minecraft/class_1646;)Z method_29263 func_234021_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_29265 startExecuting - f F field_25158 field_234017_b_ -c net/minecraft/class_1330 net/minecraft/entity/ai/controller/BodyController - m ()V method_20245 func_220665_d - m ()V method_20244 func_220664_c - m ()Z method_20247 func_220662_f - m ()V method_20243 func_220663_b - m ()Z method_20246 func_220661_e - m ()V method_6224 updateRenderAngles - f Lnet/minecraft/class_1308; field_6356 mob - f F field_6354 prevRenderYawHead - f I field_6355 rotationTickCounter -c net/minecraft/class_1331 net/minecraft/entity/ai/controller/FlyingMovementController - f Z field_20350 field_226324_j_ - f I field_20349 field_226323_i_ -c net/minecraft/class_1332 net/minecraft/entity/ai/controller/DolphinLookController - f I field_6357 field_205139_h -c net/minecraft/class_1333 net/minecraft/entity/ai/controller/LookController - m ()D method_6227 getLookPosY - m ()D method_6225 getLookPosX - m (Lnet/minecraft/class_243;)V method_19615 setLookPosition - m ()F method_20250 getTargetPitch - m (FFF)F method_6229 clampedRotate - m ()V method_6231 tick - m ()D method_6228 getLookPosZ - m (DDDFF)V method_6230 setLookPosition - m ()Z method_6232 getIsLooking - m ()Z method_20433 shouldResetPitch - m ()F method_20251 getTargetYaw - m (DDD)V method_20248 setLookPosition - m (Lnet/minecraft/class_1297;FF)V method_6226 setLookPositionWithEntity - m (Lnet/minecraft/class_1297;)D method_20249 getEyePosition - f Z field_6360 isLooking - f F field_6358 deltaLookPitch - f F field_6359 deltaLookYaw - f Lnet/minecraft/class_1308; field_6361 mob - f D field_6362 posZ - f D field_6363 posY - f D field_6364 posX -c net/minecraft/class_1334 net/minecraft/entity/ai/controller/JumpController - m ()V method_6234 tick - m ()V method_6233 setJumping - f Lnet/minecraft/class_1308; field_6366 mob - f Z field_6365 isJumping -c net/minecraft/class_1335 net/minecraft/entity/ai/controller/MovementController - m ()Z method_6241 isUpdating - m (FF)Z method_25946 func_234024_b_ - m (DDDD)V method_6239 setMoveTo - m ()D method_6235 getY - m ()D method_6236 getX - m (FF)V method_6243 strafe - m (FFF)F method_6238 limitAngle - m ()D method_6242 getSpeed - m ()V method_6240 tick - m ()D method_6237 getZ - f D field_6369 posY - f D field_6370 posX - f Lnet/minecraft/class_1308; field_6371 mob - f D field_6372 speed - f D field_6367 posZ - f F field_6373 moveStrafe - f F field_6368 moveForward - f Lnet/minecraft/class_1335$class_1336; field_6374 action -c net/minecraft/class_1335$class_1336 net/minecraft/entity/ai/controller/MovementController$Action - m (Ljava/lang/String;)Lnet/minecraft/class_1335$class_1336; valueOf valueOf - m ()[Lnet/minecraft/class_1335$class_1336; values values - f Lnet/minecraft/class_1335$class_1336; field_6377 WAIT - f Lnet/minecraft/class_1335$class_1336; field_6378 MOVE_TO - f [Lnet/minecraft/class_1335$class_1336; field_6375 $VALUES - f Lnet/minecraft/class_1335$class_1336; field_6376 STRAFE - f Lnet/minecraft/class_1335$class_1336; field_6379 JUMPING -c net/minecraft/class_1337 net/minecraft/entity/ai/goal/BegGoal - m (Lnet/minecraft/class_1657;)Z method_6244 hasTemptationItemInHand - f F field_6380 minPlayerDistance - f Lnet/minecraft/class_1493; field_6384 wolf - f Lnet/minecraft/class_1657; field_6383 player - f Lnet/minecraft/class_4051; field_18085 playerPredicate - f I field_6382 timeoutCounter - f Lnet/minecraft/class_1937; field_6381 world -c net/minecraft/class_1338 net/minecraft/entity/ai/goal/AvoidEntityGoal - m (Lnet/minecraft/class_1309;)Z method_6246 func_200828_b - m (Lnet/minecraft/class_1309;)Z method_6245 func_203782_a - f D field_6385 farSpeed - f F field_6386 avoidDistance - f Ljava/util/function/Predicate; field_6393 avoidTargetSelector - f Lnet/minecraft/class_4051; field_18084 builtTargetSelector - f Ljava/util/function/Predicate; field_6388 field_203784_k - f Ljava/lang/Class; field_6392 classToAvoid - f Lnet/minecraft/class_1309; field_6390 avoidTarget - f Lnet/minecraft/class_11; field_6387 path - f Lnet/minecraft/class_1314; field_6391 entity - f Lnet/minecraft/class_1408; field_6394 navigation - f D field_6395 nearSpeed -c net/minecraft/class_1339 net/minecraft/entity/ai/goal/BreakDoorGoal - m (Lnet/minecraft/class_1267;)Z method_19994 func_220696_a - m ()I method_16462 func_220697_f - f I field_16596 timeToBreak - f I field_6397 previousBreakProgress - f I field_6398 breakingTime - f Ljava/util/function/Predicate; field_19003 difficultyPredicate -c net/minecraft/class_1340 net/minecraft/entity/ai/goal/BoatGoals - m (Ljava/lang/String;)Lnet/minecraft/class_1340; valueOf valueOf - m ()[Lnet/minecraft/class_1340; values values - f Lnet/minecraft/class_1340; field_6401 GO_TO_BOAT - f Lnet/minecraft/class_1340; field_6400 GO_IN_BOAT_DIRECTION - f [Lnet/minecraft/class_1340; field_6399 $VALUES -c net/minecraft/class_1341 net/minecraft/entity/ai/goal/BreedGoal - m ()Lnet/minecraft/class_1429; method_6250 getNearbyMate - m ()V method_6249 spawnBaby - f Lnet/minecraft/class_1429; field_6406 targetMate - f Ljava/lang/Class; field_6403 mateClass - f Lnet/minecraft/class_1429; field_6404 animal - f I field_6402 spawnBabyDelay - f Lnet/minecraft/class_4051; field_18086 field_220689_d - f Lnet/minecraft/class_1937; field_6405 world - f D field_6407 moveSpeed -c net/minecraft/class_1342 net/minecraft/entity/ai/goal/BreatheAirGoal - m ()V method_6252 navigate - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_6253 canBreatheAt - f Lnet/minecraft/class_1314; field_6408 field_205142_a -c net/minecraft/class_1373 net/minecraft/entity/ai/goal/CatSitOnBlockGoal - m (Lnet/minecraft/class_2742;)Ljava/lang/Boolean; method_27794 func_234026_a_ - m (Lnet/minecraft/class_4970$class_4971;)Z method_27793 func_234025_a_ - f Lnet/minecraft/class_1451; field_6545 cat -c net/minecraft/class_3697 net/minecraft/entity/ai/goal/CatLieOnBedGoal - f Lnet/minecraft/class_1451; field_16282 cat -c net/minecraft/class_1343 net/minecraft/entity/ai/goal/InteractDoorGoal - m (Z)V method_19995 toggleDoor - m ()Z method_6256 canDestroy - f F field_6409 entityPositionZ - f Z field_6411 hasStoppedDoorInteraction - f Z field_6412 doorInteract - f F field_6410 entityPositionX - f Lnet/minecraft/class_1308; field_6413 entity - f Lnet/minecraft/class_2338; field_6414 doorPosition -c net/minecraft/class_1357 net/minecraft/entity/ai/goal/DolphinJumpGoal - m (Lnet/minecraft/class_2338;III)Z method_6282 isAirAbove - m (Lnet/minecraft/class_2338;III)Z method_6284 canJumpTo - f Z field_6473 inWater - f I field_6472 field_220712_c - f [I field_6474 JUMP_DISTANCES - f Lnet/minecraft/class_1433; field_6471 dolphin -c net/minecraft/class_1344 net/minecraft/entity/ai/goal/FleeSunGoal - m ()Z method_18250 isPossibleShelter - m ()Lnet/minecraft/class_243; method_6257 findPossibleShelter - f D field_6416 shelterY - f D field_6417 shelterX - f Lnet/minecraft/class_1314; field_6419 creature - f Lnet/minecraft/class_1937; field_6418 world - f D field_6420 movementSpeed - f D field_6415 shelterZ -c net/minecraft/class_1345 net/minecraft/entity/ai/goal/EatGrassGoal - m ()I method_6258 getEatingGrassTimer - f I field_6422 eatingGrassTimer - f Lnet/minecraft/class_1308; field_6424 grassEaterEntity - f Lnet/minecraft/class_1937; field_6421 entityWorld - f Ljava/util/function/Predicate; field_6423 IS_GRASS -c net/minecraft/class_1346 net/minecraft/entity/ai/goal/FollowBoatGoal - f Lnet/minecraft/class_1314; field_6426 swimmer - f Lnet/minecraft/class_1340; field_6425 field_205146_d - f Lnet/minecraft/class_1657; field_6427 player - f I field_6428 field_205143_a -c net/minecraft/class_1347 net/minecraft/entity/ai/goal/SwimGoal - f Lnet/minecraft/class_1308; field_6429 entity -c net/minecraft/class_1348 net/minecraft/entity/ai/goal/FollowMobGoal - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1308;)Z method_6259 func_210291_a - f Lnet/minecraft/class_1408; field_6434 navigation - f Lnet/minecraft/class_1308; field_6433 followingEntity - f F field_6435 areaSize - f D field_6430 speedModifier - f Ljava/util/function/Predicate; field_6436 followPredicate - f Lnet/minecraft/class_1308; field_6432 entity - f F field_6437 oldWaterCost - f F field_6438 stopDistance - f I field_6431 timeToRecalcPath -c net/minecraft/class_1349 net/minecraft/entity/ai/goal/FollowSchoolLeaderGoal - m (Lnet/minecraft/class_1425;)Z method_6260 func_212823_b - m (Lnet/minecraft/class_1425;)Z method_6262 func_212824_c - m (Lnet/minecraft/class_1425;)I method_6261 getNewCooldown - f I field_6439 cooldown - f I field_6440 navigateTimer - f Lnet/minecraft/class_1425; field_6441 taskOwner -c net/minecraft/class_1353 net/minecraft/entity/ai/goal/FollowParentGoal - f D field_6453 moveSpeed - f Lnet/minecraft/class_1429; field_6455 childAnimal - f Lnet/minecraft/class_1429; field_6452 parentAnimal - f I field_6454 delayCounter -c net/minecraft/class_1350 net/minecraft/entity/ai/goal/FollowOwnerGoal - m (II)I method_23342 getRandomNumber - m (III)Z method_23343 tryToTeleportToLocation - m ()V method_23345 tryToTeleportNearEntity - m (Lnet/minecraft/class_2338;)Z method_23344 isTeleportFriendlyBlock - f F field_6447 oldWaterCost - f Lnet/minecraft/class_1321; field_6448 tameable - f F field_6450 maxDist - f I field_6443 timeToRecalcPath - f Lnet/minecraft/class_1408; field_6446 navigator - f F field_6449 minDist - f Lnet/minecraft/class_4538; field_6445 world - f Z field_21078 teleportToLeaves - f Lnet/minecraft/class_1309; field_6444 owner - f D field_6442 followSpeed -c net/minecraft/class_1355 net/minecraft/entity/ai/goal/GoalSelector - m (Lnet/minecraft/class_4135;Lnet/minecraft/class_1352$class_4134;)V method_19044 func_220876_a - m ()V method_6275 tick - m (Lnet/minecraft/class_4135;)Z method_19051 func_220881_e - m (Lnet/minecraft/class_1352;)V method_6280 removeGoal - m (Lnet/minecraft/class_1352;Lnet/minecraft/class_4135;)Z method_20649 func_220884_a - m (Lnet/minecraft/class_1352$class_4134;Z)V method_6276 setFlag - m (Lnet/minecraft/class_1352$class_4134;Lnet/minecraft/class_4135;)V method_19041 func_220885_a - m (Lnet/minecraft/class_1352;Lnet/minecraft/class_4135;)Z method_20650 func_220882_b - m (Lnet/minecraft/class_4135;)Z method_19046 func_220889_b - m (Lnet/minecraft/class_1352$class_4134;)V method_6273 enableFlag - m (Lnet/minecraft/class_4135;)V method_19043 func_220877_a - m (Lnet/minecraft/class_4135;)Z method_19050 func_220883_d - m ()Ljava/util/stream/Stream; method_19048 getRunningGoals - m (Lnet/minecraft/class_1352$class_4134;)V method_6274 disableFlag - m (Lnet/minecraft/class_4135;)Z method_19049 func_220879_c - m (Lnet/minecraft/class_4135;Lnet/minecraft/class_1352$class_4134;)Z method_19047 func_220887_b - m (ILnet/minecraft/class_1352;)V method_6277 addGoal - f Ljava/util/Set; field_6461 goals - f Ljava/util/Map; field_18411 flagGoals - f I field_6464 tickRate - f Lnet/minecraft/class_4135; field_18410 DUMMY - f Ljava/util/EnumSet; field_6462 disabledFlags - f Ljava/util/function/Supplier; field_6463 profiler - f Lorg/apache/logging/log4j/Logger; field_6466 LOGGER -c net/minecraft/class_1355$1 net/minecraft/entity/ai/goal/GoalSelector$1 -c net/minecraft/class_1355$2 net/minecraft/entity/ai/goal/GoalSelector$2 -c net/minecraft/class_1352 net/minecraft/entity/ai/goal/Goal - m ()V method_6268 tick - m (Ljava/util/EnumSet;)V method_6265 setMutexFlags - m ()Ljava/util/EnumSet; method_6271 getMutexFlags - m ()Ljava/lang/String; toString toString - m ()Z method_6267 isPreemptible - m ()Z method_6264 shouldExecute - m ()V method_6269 startExecuting - m ()Z method_6266 shouldContinueExecuting - m ()V method_6270 resetTask - f Ljava/util/EnumSet; field_6451 flags -c net/minecraft/class_1352$class_4134 net/minecraft/entity/ai/goal/Goal$Flag - m (Ljava/lang/String;)Lnet/minecraft/class_1352$class_4134; valueOf valueOf - m ()[Lnet/minecraft/class_1352$class_4134; values values - f Lnet/minecraft/class_1352$class_4134; field_18405 MOVE - f Lnet/minecraft/class_1352$class_4134; field_18407 JUMP - f Lnet/minecraft/class_1352$class_4134; field_18406 LOOK - f [Lnet/minecraft/class_1352$class_4134; field_18409 $VALUES - f Lnet/minecraft/class_1352$class_4134; field_18408 TARGET -c net/minecraft/class_1358 net/minecraft/entity/ai/goal/LookAtWithoutMovingGoal -c net/minecraft/class_5274 net/minecraft/entity/ai/goal/PatrolVillageGoal - m ()Lnet/minecraft/class_243; method_27927 func_234033_l_ - m (Lnet/minecraft/class_4076;)Lnet/minecraft/class_2338; method_27923 func_234029_a_ - m ()Lnet/minecraft/class_243; method_27926 func_234032_k_ - m ()Lnet/minecraft/class_243; method_27925 func_234031_j_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4076;)Z method_27924 func_234030_a_ - m ()Lnet/minecraft/class_4076; method_27928 func_234034_m_ - m (Lnet/minecraft/class_4158;)Z method_27921 func_234027_a_ - m (Lnet/minecraft/class_1646;)Z method_27922 canSpawnGolems -c net/minecraft/class_1360 net/minecraft/entity/ai/goal/LandOnOwnersShoulderGoal - f Z field_6480 isSittingOnShoulder - f Lnet/minecraft/class_1471; field_6478 entity - f Lnet/minecraft/class_3222; field_6479 owner -c net/minecraft/class_4017 net/minecraft/entity/ai/goal/JumpGoal -c net/minecraft/class_1362 net/minecraft/entity/ai/goal/LlamaFollowCaravanGoal - m (Lnet/minecraft/class_1501;I)Z method_6285 firstIsLeashed - m (Lnet/minecraft/class_1297;)Z method_19616 func_220719_a - f I field_6489 distCheckCounter - f Lnet/minecraft/class_1501; field_6488 llama - f D field_6487 speedModifier -c net/minecraft/class_1359 net/minecraft/entity/ai/goal/LeapAtTargetGoal - f F field_6475 leapMotionY - f Lnet/minecraft/class_1309; field_6477 leapTarget - f Lnet/minecraft/class_1308; field_6476 leaper -c net/minecraft/class_1361 net/minecraft/entity/ai/goal/LookAtGoal - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)Z method_18414 func_220715_a - f F field_6482 maxDistance - f I field_6483 lookTime - f Ljava/lang/Class; field_6485 watchedClass - f Lnet/minecraft/class_1297; field_6484 closestEntity - f Lnet/minecraft/class_1308; field_6486 entity - f Lnet/minecraft/class_4051; field_18087 field_220716_e - f F field_6481 chance -c net/minecraft/class_1366 net/minecraft/entity/ai/goal/MeleeAttackGoal - m (Lnet/minecraft/class_1309;D)V method_6288 checkAndPerformAttack - m (Lnet/minecraft/class_1309;)D method_6289 getAttackReachSqr - m ()Z method_28347 func_234040_h_ - m ()I method_28348 func_234041_j_ - m ()V method_28346 func_234039_g_ - m ()I method_28349 func_234042_k_ - f Lnet/minecraft/class_11; field_6509 path - f J field_19200 field_220720_k - f D field_6500 speedTowardsTarget - f I field_6501 delayCounter - f Z field_6502 longMemory - f I field_24667 field_234037_i_ - f Lnet/minecraft/class_1314; field_6503 attacker - f I field_6504 attackInterval - f D field_6506 targetZ - f D field_6508 targetX - f D field_6507 targetY -c net/minecraft/class_1364 net/minecraft/entity/ai/goal/LookAtCustomerGoal - f Lnet/minecraft/class_3988; field_6495 villager -c net/minecraft/class_4291 net/minecraft/entity/ai/goal/ReturnToVillageGoal -c net/minecraft/class_1367 net/minecraft/entity/ai/goal/MoveToBlockGoal - m ()Z method_6294 shouldMove - m ()D method_6291 getTargetDistanceSq - m ()Lnet/minecraft/class_2338; method_30953 func_241846_j - m ()Z method_6295 getIsAboveDestination - m ()V method_6290 func_220725_g - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_6296 shouldMoveTo - m (Lnet/minecraft/class_1314;)I method_6293 getRunDelay - m ()Z method_6292 searchForDestination - f I field_6510 searchLength - f I field_6519 field_203113_j - f D field_6514 movementSpeed - f Lnet/minecraft/class_1314; field_6516 creature - f I field_6511 maxStayTicks - f I field_6517 timeoutCounter - f I field_6515 field_203112_e - f Lnet/minecraft/class_2338; field_6512 destinationBlock - f Z field_6513 isAboveDestination - f I field_6518 runDelay -c net/minecraft/class_1368 net/minecraft/entity/ai/goal/MoveThroughVillageGoal - m (Lnet/minecraft/class_2338;)Z method_19052 func_220733_a - m ()V method_6297 resizeDoorList - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)D method_19053 func_220734_a - f I field_18414 maxDistance - f Ljava/util/List; field_18413 doorList - f Lnet/minecraft/class_1314; field_6525 entity - f Lnet/minecraft/class_11; field_6523 path - f Ljava/util/function/BooleanSupplier; field_18415 booleanSupplier - f Lnet/minecraft/class_2338; field_18412 field_220735_d - f D field_6520 movementSpeed - f Z field_6524 isNocturnal -c net/minecraft/class_1369 net/minecraft/entity/ai/goal/MoveTowardsTargetGoal - f D field_6531 movePosZ - f D field_6530 speed - f F field_6532 maxTargetDistance - f Lnet/minecraft/class_1314; field_6528 creature - f D field_6527 movePosX - f D field_6526 movePosY - f Lnet/minecraft/class_1309; field_6529 targetEntity -c net/minecraft/class_1370 net/minecraft/entity/ai/goal/MoveTowardsRestrictionGoal - f D field_6534 movePosY - f Lnet/minecraft/class_1314; field_6536 creature - f D field_6533 movePosZ - f D field_6537 movementSpeed - f D field_6535 movePosX -c net/minecraft/class_1372 net/minecraft/entity/ai/goal/ShowVillagerFlowerGoal - f Lnet/minecraft/class_4051; field_18089 field_220738_a - f Lnet/minecraft/class_1646; field_6544 villager - f I field_6543 lookTime - f Lnet/minecraft/class_1439; field_6542 ironGolem -c net/minecraft/class_1371 net/minecraft/entity/ai/goal/OcelotAttackGoal - f Lnet/minecraft/class_1309; field_6539 target - f Lnet/minecraft/class_1308; field_6541 entity - f Lnet/minecraft/class_1922; field_6538 world - f I field_6540 attackCountdown -c net/minecraft/class_1374 net/minecraft/entity/ai/goal/PanicGoal - m ()Z method_26337 isRunning - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_1297;II)Lnet/minecraft/class_2338; method_6300 getRandPos - m ()Z method_6301 findRandomPosition - f D field_6546 randPosY - f D field_6550 randPosZ - f Lnet/minecraft/class_1314; field_6549 creature - f D field_6548 speed - f D field_6547 randPosX - f Z field_23227 running -c net/minecraft/class_4255 net/minecraft/entity/ai/goal/OpenDoorGoal - f Z field_19004 closeDoor - f I field_19005 closeDoorTemporisation -c net/minecraft/class_3759 net/minecraft/entity/ai/goal/MoveTowardsRaidGoal - m (Lnet/minecraft/class_3765;Lnet/minecraft/class_3763;)Z method_16466 func_220742_a - m (Lnet/minecraft/class_3765;)V method_16465 func_220743_a - f Lnet/minecraft/class_3763; field_16597 raider -c net/minecraft/class_1379 net/minecraft/entity/ai/goal/RandomWalkingGoal - m ()V method_6304 makeUpdate - m ()Lnet/minecraft/class_243; method_6302 getPosition - m (I)V method_6303 setExecutionChance - f Lnet/minecraft/class_1314; field_6566 creature - f D field_6562 y - f D field_6563 x - f I field_6564 executionChance - f D field_6561 z - f Z field_6565 mustUpdate - f Z field_24463 field_234053_h_ - f D field_6567 speed -c net/minecraft/class_1376 net/minecraft/entity/ai/goal/LookRandomlyGoal - f I field_6555 idleTime - f Lnet/minecraft/class_1308; field_6556 idleEntity - f D field_6554 lookX - f D field_6553 lookZ -c net/minecraft/class_1381 net/minecraft/entity/ai/goal/RangedAttackGoal - f I field_6579 seeTime - f Lnet/minecraft/class_1309; field_6580 attackTarget - f I field_6578 attackIntervalMin - f Lnet/minecraft/class_1308; field_6583 entityHost - f D field_6586 entityMoveSpeed - f Lnet/minecraft/class_1603; field_6582 rangedAttackEntityHost - f F field_6585 attackRadius - f I field_6577 maxRangedAttackTime - f F field_6584 maxAttackDistance - f I field_6581 rangedAttackTime -c net/minecraft/class_1378 net/minecraft/entity/ai/goal/RandomSwimmingGoal -c net/minecraft/class_1383 net/minecraft/entity/ai/goal/RangedCrossbowAttackGoal - m ()Z method_6310 func_220745_g - m ()Z method_19996 func_220746_h - m ()Z method_16352 func_220747_j - f Lnet/minecraft/class_1588; field_6593 field_220748_a - f I field_6592 field_220752_e - f D field_6590 field_220750_c - f I field_25697 field_241382_h_ - f I field_16529 field_220753_f - f Lnet/minecraft/class_1383$class_3744; field_16528 field_220749_b - f Lnet/minecraft/class_4801; field_25696 field_241381_a_ - f F field_6591 field_220751_d -c net/minecraft/class_1383$class_3744 net/minecraft/entity/ai/goal/RangedCrossbowAttackGoal$CrossbowState - m (Ljava/lang/String;)Lnet/minecraft/class_1383$class_3744; valueOf valueOf - m ()[Lnet/minecraft/class_1383$class_3744; values values - f Lnet/minecraft/class_1383$class_3744; field_16534 UNCHARGED - f [Lnet/minecraft/class_1383$class_3744; field_16531 $VALUES - f Lnet/minecraft/class_1383$class_3744; field_16533 READY_TO_ATTACK - f Lnet/minecraft/class_1383$class_3744; field_16530 CHARGING - f Lnet/minecraft/class_1383$class_3744; field_16532 CHARGED -c net/minecraft/class_1380 net/minecraft/entity/ai/goal/RangedBowAttackGoal - m (I)V method_6305 setAttackCooldown - m ()Z method_6306 isBowInMainhand - f Lnet/minecraft/class_1588; field_6576 entity - f Z field_6571 strafingBackwards - f F field_6570 maxAttackDistance - f I field_6575 attackCooldown - f Z field_6573 strafingClockwise - f I field_6568 strafingTime - f D field_6569 moveSpeedAmp - f I field_6574 attackTime - f I field_6572 seeTime -c net/minecraft/class_1384 net/minecraft/entity/ai/goal/RestrictSunGoal - f Lnet/minecraft/class_1314; field_6594 entity -c net/minecraft/class_1382 net/minecraft/entity/ai/goal/BreakBlockGoal - m ()Z method_20307 func_220729_m - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_6307 playBreakingSound - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_6309 playBrokenSound - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1922;)Lnet/minecraft/class_2338; method_6308 findTarget - f I field_6588 breakingTime - f Lnet/minecraft/class_1308; field_6589 entity - f Lnet/minecraft/class_2248; field_6587 block -c net/minecraft/class_1386 net/minecraft/entity/ai/goal/SitGoal - f Lnet/minecraft/class_1321; field_6597 tameable -c net/minecraft/class_1387 net/minecraft/entity/ai/goal/RunAroundLikeCrazyGoal - f D field_6600 targetX - f D field_6599 targetY - f D field_6603 targetZ - f Lnet/minecraft/class_1496; field_6602 horseHost - f D field_6601 speed -c net/minecraft/class_4018 net/minecraft/entity/ai/goal/MoveThroughVillageAtNightGoal - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)D method_19054 func_220755_a - m ()V method_18252 func_220754_g - f Lnet/minecraft/class_1314; field_17944 entity - f I field_17945 field_220757_b - f Lnet/minecraft/class_2338; field_17947 field_220758_c -c net/minecraft/class_1389 net/minecraft/entity/ai/goal/CreeperSwellGoal - f Lnet/minecraft/class_1548; field_6608 swellingCreeper - f Lnet/minecraft/class_1309; field_6609 creeperAttackTarget -c net/minecraft/class_1390 net/minecraft/entity/ai/goal/TradeWithPlayerGoal - f Lnet/minecraft/class_3988; field_6610 villager -c net/minecraft/class_1391 net/minecraft/entity/ai/goal/TemptGoal - m (Lnet/minecraft/class_1799;)Z method_6312 isTempting - m ()Z method_16081 isScaredByPlayerMovement - m ()Z method_6313 isRunning - f D field_6614 targetX - f D field_6611 targetY - f Lnet/minecraft/class_1856; field_6622 temptItem - f D field_6615 speed - f Z field_6620 scaredByPlayerMovement - f Lnet/minecraft/class_4051; field_18090 ENTITY_PREDICATE - f I field_6612 delayTemptCounter - f Lnet/minecraft/class_1314; field_6616 creature - f D field_6619 pitch - f Z field_6613 isRunning - f D field_6621 targetZ - f Lnet/minecraft/class_1657; field_6617 closestPlayer - f D field_6618 yaw -c net/minecraft/class_3993 net/minecraft/entity/ai/goal/UseItemGoal - f Lnet/minecraft/class_3414; field_18280 field_220769_d - f Ljava/util/function/Predicate; field_17757 field_220768_c - f Lnet/minecraft/class_1799; field_17756 stack - f Lnet/minecraft/class_1308; field_17755 user -c net/minecraft/class_1393 net/minecraft/entity/ai/goal/FindWaterGoal - f Lnet/minecraft/class_1314; field_6625 creature -c net/minecraft/class_1394 net/minecraft/entity/ai/goal/WaterAvoidingRandomWalkingGoal - f F field_6626 probability -c net/minecraft/class_1395 net/minecraft/entity/ai/goal/WaterAvoidingRandomFlyingGoal - m ()Lnet/minecraft/class_243; method_6314 getTreePos -c net/minecraft/class_1396 net/minecraft/entity/ai/goal/ZombieAttackGoal - f I field_6627 raiseArmTicks - f Lnet/minecraft/class_1642; field_6628 zombie -c net/minecraft/class_4135 net/minecraft/entity/ai/goal/PrioritizedGoal - m ()I method_19057 getPriority - m ()Z method_19056 isRunning - m (Lnet/minecraft/class_4135;)Z method_19055 isPreemptedBy - m ()Lnet/minecraft/class_1352; method_19058 getGoal - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - f Lnet/minecraft/class_1352; field_18416 inner - f I field_18417 priority - f Z field_18418 running -c net/minecraft/class_1397 net/minecraft/entity/ai/goal/DefendVillageTargetGoal - f Lnet/minecraft/class_1309; field_6630 villageAgressorTarget - f Lnet/minecraft/class_1439; field_6629 irongolem - f Lnet/minecraft/class_4051; field_19340 distancePredicate -c net/minecraft/class_1400 net/minecraft/entity/ai/goal/NearestAttackableTargetGoal - m (Lnet/minecraft/class_1309;)V method_24632 setNearestTarget - m (D)Lnet/minecraft/class_238; method_6321 getTargetableArea - m ()V method_18415 findNearestTarget - f I field_6641 targetChance - f Lnet/minecraft/class_1309; field_6644 nearestTarget - f Lnet/minecraft/class_4051; field_6642 targetEntitySelector - f Ljava/lang/Class; field_6643 targetClass -c net/minecraft/class_1399 net/minecraft/entity/ai/goal/HurtByTargetGoal - m ()V method_6317 alertOthers - m ([Ljava/lang/Class;)Lnet/minecraft/class_1399; method_6318 setCallsForHelp - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1309;)V method_6319 setAttackTarget - f [Ljava/lang/Class; field_6637 excludedReinforcementTypes - f [Ljava/lang/Class; field_6640 reinforcementTypes - f Lnet/minecraft/class_4051; field_18091 field_220795_a - f Z field_6639 entityCallsForHelp - f I field_6638 revengeTimerOld -c net/minecraft/class_3909 net/minecraft/entity/ai/goal/NearestAttackableTargetExpiringGoal - m ()V method_17353 tickCooldown - m ()I method_17352 getCooldown - f I field_17282 cooldown -c net/minecraft/class_3760 net/minecraft/entity/ai/goal/ToggleableNearestAttackableTargetGoal - m (Z)V method_17351 func_220783_a - f Z field_17281 field_220784_i -c net/minecraft/class_1403 net/minecraft/entity/ai/goal/OwnerHurtByTargetGoal - f Lnet/minecraft/class_1309; field_6655 attacker - f I field_6653 timestamp - f Lnet/minecraft/class_1321; field_6654 tameable -c net/minecraft/class_1404 net/minecraft/entity/ai/goal/NonTamedTargetGoal - f Lnet/minecraft/class_1321; field_6656 tameable -c net/minecraft/class_5398 net/minecraft/entity/ai/goal/ResetAngerGoal - m (Lnet/minecraft/class_1308;)Lnet/minecraft/class_5354; method_29930 func_241386_a_ - m ()Ljava/util/List; method_29933 func_241389_h_ - m ()Z method_29932 shouldGetRevengeOnPlayer - m (Lnet/minecraft/class_1308;)Z method_29931 func_241387_b_ - f Lnet/minecraft/class_1308; field_25604 field_241383_a_ - f Z field_25605 field_241384_b_ - f I field_25606 revengeTimer -c net/minecraft/class_1406 net/minecraft/entity/ai/goal/OwnerHurtTargetGoal - f Lnet/minecraft/class_1309; field_6667 attacker - f I field_6665 timestamp - f Lnet/minecraft/class_1321; field_6666 tameable -c net/minecraft/class_1405 net/minecraft/entity/ai/goal/TargetGoal - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4051;)Z method_6328 isSuitableTarget - m ()D method_6326 getTargetDistance - m (Lnet/minecraft/class_1309;)Z method_6329 canEasilyReach - m (I)Lnet/minecraft/class_1405; method_6330 setUnseenMemoryTicks - f Lnet/minecraft/class_1309; field_6664 target - f I field_6659 targetUnseenTicks - f I field_6662 targetSearchStatus - f I field_6657 unseenMemoryTicks - f I field_6661 targetSearchDelay - f Z field_6658 shouldCheckSight - f Z field_6663 nearbyOnly - f Lnet/minecraft/class_1308; field_6660 goalOwner -c net/minecraft/class_4139 net/minecraft/village/GossipType - m (Lnet/minecraft/class_4139;)Ljava/lang/String; method_19089 func_220930_a - m (Ljava/lang/String;)Lnet/minecraft/class_4139; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_4139; method_19090 byId - m ()[Lnet/minecraft/class_4139; values values - f Lnet/minecraft/class_4139; field_18428 TRADING - f Lnet/minecraft/class_4139; field_18425 MINOR_NEGATIVE - f Lnet/minecraft/class_4139; field_18426 MINOR_POSITIVE - f Lnet/minecraft/class_4139; field_18427 MAJOR_POSITIVE - f [Lnet/minecraft/class_4139; field_18436 $VALUES - f Ljava/util/Map; field_18435 BY_ID - f I field_19354 decayPerDay - f Lnet/minecraft/class_4139; field_18424 MAJOR_NEGATIVE - f I field_18434 decayPerTransfer - f Ljava/lang/String; field_18430 id - f I field_18432 max - f I field_18431 weight -c net/minecraft/class_4136 net/minecraft/village/GossipManager - m (Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/class_4136$class_4138;)Lcom/mojang/serialization/Dynamic; method_28351 func_234059_a_ - m (Lnet/minecraft/class_4139;Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer; method_19065 func_220915_a - m (Lnet/minecraft/class_4136;Ljava/util/Random;I)V method_19061 transferFrom - m (Ljava/util/UUID;Lnet/minecraft/class_4139;I)V method_19072 add - m (Lcom/mojang/serialization/Dynamic;)V method_19066 read - m (Lnet/minecraft/class_4139;II)I method_19063 mergeValuesForAddition - m (Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_19067 write - m (Ljava/util/UUID;)Lnet/minecraft/class_4136$class_4137; method_19076 func_220922_b - m (Lcom/mojang/serialization/DataResult;)Ljava/util/stream/Stream; method_28350 func_234056_a_ - m (Ljava/util/UUID;Ljava/util/function/Predicate;)I method_19073 getReputation - m (Ljava/util/Random;I)Ljava/util/Collection; method_19070 selectGossipsForTransfer - m (Lnet/minecraft/class_4136$class_4138;)V method_19060 func_234055_a_ - m (II)I method_19059 getMax - m ()Ljava/util/stream/Stream; method_19074 getGossipEntries - m (Ljava/util/UUID;)Lnet/minecraft/class_4136$class_4137; method_19071 getOrCreate - m (Ljava/util/Map$Entry;)Ljava/util/stream/Stream; method_19069 func_220917_a - m (Lnet/minecraft/class_4136$class_4138;)V method_19075 func_220923_b - m ()V method_20651 tick - f Ljava/util/Map; field_18419 uuid_gossips_mapping -c net/minecraft/class_4136$1 net/minecraft/village/GossipManager$1 -c net/minecraft/class_4136$class_4138 net/minecraft/village/GossipManager$GossipEntry - m ()Ljava/lang/String; toString toString - m (Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult; method_19084 read - m ()I method_19083 weightedValue - m (Lcom/mojang/serialization/DynamicOps;)Lcom/mojang/serialization/Dynamic; method_19087 write - f I field_18423 value - f Lnet/minecraft/class_4139; field_18422 type - f Ljava/util/UUID; field_18421 target -c net/minecraft/class_4136$class_4137 net/minecraft/village/GossipManager$Gossips - m (Ljava/util/function/Predicate;)I method_19081 weightedValue - m ()Z method_20654 isGossipTypeMapEmpty - m (Ljava/util/UUID;)Ljava/util/stream/Stream; method_19079 unpack - m (Ljava/util/function/Predicate;Lit/unimi/dsi/fastutil/objects/Object2IntMap$Entry;)Z method_19082 func_220898_a - m (Ljava/util/UUID;Lit/unimi/dsi/fastutil/objects/Object2IntMap$Entry;)Lnet/minecraft/class_4136$class_4138; method_19080 func_220897_a - m (Lnet/minecraft/class_4139;)V method_20655 removeGossipType - m (Lnet/minecraft/class_4136$class_4137;)Lit/unimi/dsi/fastutil/objects/Object2IntMap; method_19077 func_220899_a - m ()V method_20652 decay - m (Lit/unimi/dsi/fastutil/objects/Object2IntMap$Entry;)I method_19078 func_220894_a - m (Lnet/minecraft/class_4139;)V method_20653 putGossipType - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_18420 gossipTypeMap -c net/minecraft/class_4831 net/minecraft/entity/ai/brain/Memory - m ()Ljava/lang/String; toString toString - m (Lcom/mojang/serialization/Codec;)Lcom/mojang/serialization/Codec; method_28353 createCodec - m ()V method_24913 tick - m (Lcom/mojang/serialization/Codec;Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28354 func_234067_a_ - m (Ljava/lang/Object;J)Lnet/minecraft/class_4831; method_24636 create - m (Lnet/minecraft/class_4831;)Ljava/lang/Object; method_28357 func_234071_b_ - m ()Ljava/lang/Object; method_24637 getValue - m (Ljava/lang/Object;Ljava/util/Optional;)Lnet/minecraft/class_4831; method_28356 func_234070_a_ - m ()Z method_24634 isForgotten - m ()Z method_24914 isForgettable - m (Lnet/minecraft/class_4831;)Ljava/util/Optional; method_28352 func_234065_a_ - m (Ljava/lang/Object;)Lnet/minecraft/class_4831; method_28355 create - f Ljava/lang/Object; field_22330 value - f J field_22331 timeToLive -c net/minecraft/class_4140 net/minecraft/entity/ai/brain/memory/MemoryModuleType - m ()Ljava/util/Optional; method_19093 getMemoryCodec - m (Ljava/lang/String;Lcom/mojang/serialization/Codec;)Lnet/minecraft/class_4140; method_19092 registerWithCodec - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;)Lnet/minecraft/class_4140; method_20738 register - f Lnet/minecraft/class_4140; field_22344 NEAREST_VISIBLE_ADULT_HOGLINS - f Lnet/minecraft/class_4140; field_25754 GOLEM_DETECTED_RECENTLY - f Lnet/minecraft/class_4140; field_20616 LAST_WOKEN - f Lnet/minecraft/class_4140; field_18447 INTERACTION_TARGET - f Lnet/minecraft/class_4140; field_25755 NEAREST_ADULT_PIGLINS - f Lnet/minecraft/class_4140; field_19009 HEARD_BELL_TIME - f Lnet/minecraft/class_4140; field_18445 WALK_TARGET - f Lnet/minecraft/class_4140; field_22355 ATTACK_TARGET - f Lnet/minecraft/class_4140; field_18444 NEAREST_VISIBLE_PLAYER - f Lnet/minecraft/class_4140; field_22340 NEAREST_VISIBLE_BABY_HOGLIN - f Lnet/minecraft/class_4140; field_18453 NEAREST_HOSTILE - f Lnet/minecraft/class_4140; field_22336 HUNTED_RECENTLY - f Lnet/minecraft/class_4140; field_25159 DANCING - f Lnet/minecraft/class_4140; field_19006 VISIBLE_VILLAGER_BABIES - f Lnet/minecraft/class_4140; field_22353 PACIFIED - f Lnet/minecraft/class_4140; field_22350 ATE_RECENTLY - f Lnet/minecraft/class_4140; field_18873 SECONDARY_JOB_SITE - f Lnet/minecraft/class_4140; field_22473 ADMIRING_DISABLED - f Lnet/minecraft/class_4140; field_18438 HOME - f Lnet/minecraft/class_4140; field_25361 UNIVERSAL_ANGER - f Lnet/minecraft/class_4140; field_25160 POTENTIAL_JOB_SITE - f Lnet/minecraft/class_4140; field_25813 TIME_TRYING_TO_REACH_ADMIRE_ITEM - f Lnet/minecraft/class_4140; field_22348 VISIBLE_ADULT_HOGLIN_COUNT - f Lnet/minecraft/class_4140; field_18452 HURT_BY_ENTITY - f Lnet/minecraft/class_4140; field_22346 NEAREST_VISIBLE_ZOMBIFIED - f Lnet/minecraft/class_4140; field_25360 NEAREST_VISIBLE_NEMESIS - f Lnet/minecraft/class_4140; field_18450 INTERACTABLE_DOORS - f Lnet/minecraft/class_4140; field_19007 NEAREST_BED - f Lnet/minecraft/class_4140; field_22356 RIDE_TARGET - f Lnet/minecraft/class_4140; field_25359 NEAREST_VISIBLE_ADULT - f Lnet/minecraft/class_4140; field_22475 ATTACK_COOLING_DOWN - f Lnet/minecraft/class_4140; field_19385 LAST_SLEPT - f Ljava/util/Optional; field_24668 memoryCodec - f Lnet/minecraft/class_4140; field_19008 HIDING_PLACE - f Lnet/minecraft/class_4140; field_19293 CANT_REACH_WALK_TARGET_SINCE - f Lnet/minecraft/class_4140; field_18446 LOOK_TARGET - f Lnet/minecraft/class_4140; field_22343 NEAREST_VISIBLE_ADULT_PIGLINS - f Lnet/minecraft/class_4140; field_18443 NEAREST_PLAYERS - f Lnet/minecraft/class_4140; field_22339 NEAREST_VISIBLE_HUNTABLE_HOGLIN - f Lnet/minecraft/class_4140; field_22354 NEAREST_VISIBLE_TARGETABLE_PLAYER - f Lnet/minecraft/class_4140; field_22342 NEAREST_TARGETABLE_PLAYER_NOT_WEARING_GOLD - f Lnet/minecraft/class_4140; field_18442 VISIBLE_MOBS - f Lnet/minecraft/class_4140; field_22337 CELEBRATE_LOCATION - f Lnet/minecraft/class_4140; field_25814 DISABLE_WALK_TO_ADMIRE_ITEM - f Lnet/minecraft/class_4140; field_22474 NEAREST_REPELLENT - f Lnet/minecraft/class_4140; field_22357 AVOID_TARGET - f Lnet/minecraft/class_4140; field_18440 MEETING_POINT - f Lnet/minecraft/class_4140; field_18441 MOBS - f Lnet/minecraft/class_4140; field_18451 HURT_BY - f Lnet/minecraft/class_4140; field_18439 JOB_SITE - f Lnet/minecraft/class_4140; field_22349 NEAREST_PLAYER_HOLDING_WANTED_ITEM - f Lnet/minecraft/class_4140; field_22347 VISIBLE_ADULT_PIGLIN_COUNT - f Lnet/minecraft/class_4140; field_22334 ADMIRING_ITEM - f Lnet/minecraft/class_4140; field_22332 NEAREST_VISIBLE_WANTED_ITEM - f Lnet/minecraft/class_4140; field_22333 ANGRY_AT - f Lnet/minecraft/class_4140; field_26389 OPENED_DOORS - f Lnet/minecraft/class_4140; field_22345 NEAREST_VISIBLE_ADULT_PIGLIN - f Lnet/minecraft/class_4140; field_18437 DUMMY - f Lnet/minecraft/class_4140; field_19386 LAST_WORKED_AT_POI - f Lnet/minecraft/class_4140; field_18448 BREED_TARGET - f Lnet/minecraft/class_4140; field_18449 PATH -c net/minecraft/class_4142 net/minecraft/entity/ai/brain/memory/WalkTarget - m ()I method_19096 getDistance - m ()Lnet/minecraft/class_4115; method_19094 getTarget - m ()F method_19095 getSpeed - f F field_18461 speed - f Lnet/minecraft/class_4115; field_18460 target - f I field_18462 distance -c net/minecraft/class_4141 net/minecraft/entity/ai/brain/memory/MemoryModuleStatus - m ()[Lnet/minecraft/class_4141; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4141; valueOf valueOf - f [Lnet/minecraft/class_4141; field_18459 $VALUES - f Lnet/minecraft/class_4141; field_18458 REGISTERED - f Lnet/minecraft/class_4141; field_18457 VALUE_ABSENT - f Lnet/minecraft/class_4141; field_18456 VALUE_PRESENT -c net/minecraft/class_1407 net/minecraft/pathfinding/FlyingPathNavigator - m (Z)V method_6332 setCanOpenDoors - m (Z)V method_6331 setCanEnterDoors -c net/minecraft/class_1408 net/minecraft/pathfinding/PathNavigator - m (DDDD)Z method_6337 tryMoveToXYZ - m ()Z method_6350 getCanSwim - m (Ljava/util/Set;I)Lnet/minecraft/class_11; method_29934 pathfind - m (I)Lnet/minecraft/class_13; method_6336 getPathFinder - m ()Z method_6351 isInLiquid - m (Lnet/minecraft/class_243;)Z method_27799 func_234112_b_ - m (Lnet/minecraft/class_2338;)V method_18053 onUpdateNavigation - m ()Z method_23966 hasPath - m ()Lnet/minecraft/class_11; method_6345 getPath - m ()V method_6339 pathFollow - m (DDDI)Lnet/minecraft/class_11; method_6352 getPathToPos - m ()V method_6356 updatePath - m (Ljava/util/stream/Stream;I)Lnet/minecraft/class_11; method_21643 pathfind - m ()V method_26085 resetTimeOut - m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;III)Z method_6341 isDirectPathBetweenPoints - m (Lnet/minecraft/class_243;)V method_6346 checkForStuck - m ()Lnet/minecraft/class_2338; method_6355 getTargetPos - m (Ljava/util/Set;IZI)Lnet/minecraft/class_11; method_18416 pathfind - m (Z)V method_6354 setCanSwim - m (Lnet/minecraft/class_1297;I)Lnet/minecraft/class_11; method_6349 getPathToEntity - m ()V method_6359 trimPath - m ()V method_6340 clearPath - m (Lnet/minecraft/class_2338;)Z method_6333 canEntityStandOnPos - m (F)V method_23964 setRangeMultiplier - m (D)V method_6344 setSpeed - m ()Z method_6357 noPath - m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_11; method_6348 getPathToPos - m ()Z method_6343 canUpdatePathOnTimeout - m ()V method_23965 resetRangeMultiplier - m (Lnet/minecraft/class_11;D)Z method_6334 setPath - m ()V method_31266 func_244427_e - m ()V method_6360 tick - m (Lnet/minecraft/class_1297;D)Z method_6335 tryMoveToEntityLiving - m ()Lnet/minecraft/class_243; method_6347 getEntityPosition - m ()Z method_6358 canNavigate - m ()Z method_31267 func_244428_t - m ()Lnet/minecraft/class_8; method_6342 getNodeProcessor - f I field_6674 ticksAtLastPos - f Lnet/minecraft/class_8; field_6678 nodeProcessor - f Lnet/minecraft/class_2338; field_20293 targetPos - f Lnet/minecraft/class_13; field_6673 pathFinder - f D field_6668 speed - f Z field_6679 tryUpdatePath - f I field_20294 distance - f D field_6682 timeoutLimit - f J field_6670 timeoutTimer - f Lnet/minecraft/class_11; field_6681 currentPath - f Lnet/minecraft/class_2382; field_6680 timeoutCachedNode - f Z field_26820 field_244431_t - f I field_6675 totalTicks - f Lnet/minecraft/class_1308; field_6684 entity - f F field_21642 rangeMultiplier - f Lnet/minecraft/class_243; field_6672 lastPosCheck - f J field_6685 lastTimeUpdated - f Lnet/minecraft/class_1937; field_6677 world - f F field_6683 maxDistanceToWaypoint - f J field_6669 lastTimeoutCheck -c net/minecraft/class_1409 net/minecraft/pathfinding/GroundPathNavigator - m ()I method_6362 getPathablePosY - m (Z)V method_6361 setAvoidSun - m (Lnet/minecraft/class_7;)Z method_26338 func_230287_a_ - m (IIIIIILnet/minecraft/class_243;DD)Z method_6364 isSafeToStandAt - m (Z)V method_6363 setBreakDoors - m ()Z method_6366 getEnterDoors - m (IIIIIILnet/minecraft/class_243;DD)Z method_6367 isPositionClear - f Z field_6686 shouldAvoidSun -c net/minecraft/class_1412 net/minecraft/pathfinding/SwimmerPathNavigator - f Z field_6689 field_205155_i -c net/minecraft/class_1410 net/minecraft/pathfinding/ClimberPathNavigator - f Lnet/minecraft/class_2338; field_6687 targetPosition -c net/minecraft/class_4143 net/minecraft/entity/ai/brain/sensor/DummySensor -c net/minecraft/class_5356 net/minecraft/entity/ai/brain/sensor/MateSensor - m (Lnet/minecraft/class_1296;Ljava/util/List;)V method_29529 addMemory - m (Lnet/minecraft/class_1296;)Z method_29527 func_234114_a_ - m (Lnet/minecraft/class_1309;)Lnet/minecraft/class_1296; method_29530 func_234117_a_ - m (Lnet/minecraft/class_1296;Lnet/minecraft/class_1309;)Z method_29528 func_234115_a_ - m (Lnet/minecraft/class_1296;Ljava/util/List;)V method_29532 func_234118_b_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)V method_29531 update -c net/minecraft/class_4832 net/minecraft/entity/ai/brain/sensor/HoglinMobsSensor - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4760;)V method_24639 update - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4760;)Ljava/util/Optional; method_24641 findNearestRepellent - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_24640 func_234119_a_ -c net/minecraft/class_4307 net/minecraft/entity/ai/brain/sensor/GolemLastSeenSensor - m (Lnet/minecraft/class_1309;)V method_20656 update - m (Lnet/minecraft/class_1309;)Z method_20657 func_223546_a - m (Lnet/minecraft/class_1309;)V method_30233 reset -c net/minecraft/class_4256 net/minecraft/entity/ai/brain/sensor/NearestBedSensor - m (Lnet/minecraft/class_2338;)Z method_21644 func_225469_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)V method_21646 update - m (Lit/unimi/dsi/fastutil/longs/Long2LongMap$Entry;)Z method_21645 func_225470_a - f J field_20297 persistTime - f I field_20296 bedsFound - f Lit/unimi/dsi/fastutil/longs/Long2LongMap; field_20295 bedPositionToTimeMap -c net/minecraft/class_4144 net/minecraft/entity/ai/brain/sensor/HurtBySensor - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_24642 func_234121_a_ -c net/minecraft/class_4146 net/minecraft/entity/ai/brain/sensor/NearestLivingEntitiesSensor - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19097 func_220980_b - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19784 func_220981_a -c net/minecraft/class_4833 net/minecraft/entity/ai/brain/sensor/WantedItemsSensor - m (Lnet/minecraft/class_1542;)Z method_24644 func_234123_a_ - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1542;)Z method_24643 func_234122_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;)V method_24645 update - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_1542;)Z method_24646 func_234124_b_ -c net/minecraft/class_4834 net/minecraft/entity/ai/brain/sensor/PiglinMobsSensor - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_30077 func_234125_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Z method_24648 isRepellent - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)Ljava/util/Optional; method_24649 findNearestRepellent -c net/minecraft/class_5417 net/minecraft/entity/ai/brain/sensor/PiglinBruteSpecificSensor -c net/minecraft/class_4221 net/minecraft/entity/ai/brain/sensor/SecondaryPositionSensor - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;)V method_19617 update -c net/minecraft/class_4147 net/minecraft/entity/ai/brain/sensor/NearestPlayersSensor - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1657;)Z method_29268 func_234128_a_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_3222;)Z method_19098 func_220979_a -c net/minecraft/class_4148 net/minecraft/entity/ai/brain/sensor/Sensor - m ()Ljava/util/Set; method_19099 getUsedMemories - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_30954 canAttackTarget - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_19101 update - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1309;)V method_19100 tick - f Lnet/minecraft/class_4051; field_26631 FRIENDLY_FIRE_WITHOUT_VISIBILITY_CHECK - f J field_18463 counter - f I field_18464 interval - f Lnet/minecraft/class_4051; field_26630 FRIENDLY_FIRE_WITH_VISIBILITY_CHECK - f Ljava/util/Random; field_19294 RANDOM -c net/minecraft/class_1413 net/minecraft/entity/ai/EntitySenses - m (Lnet/minecraft/class_1297;)Z method_6369 canSee - m ()V method_6370 tick - f Ljava/util/List; field_6690 unseenEntities - f Lnet/minecraft/class_1308; field_6691 entity - f Ljava/util/List; field_6692 seenEntities -c net/minecraft/class_4149 net/minecraft/entity/ai/brain/sensor/SensorType - m (Ljava/lang/String;Ljava/util/function/Supplier;)Lnet/minecraft/class_4149; method_19103 register - m ()Lnet/minecraft/class_4148; method_19102 getSensor - f Lnet/minecraft/class_4149; field_18466 NEAREST_LIVING_ENTITIES - f Lnet/minecraft/class_4149; field_22360 HOGLIN_SPECIFIC_SENSOR - f Lnet/minecraft/class_4149; field_22358 NEAREST_ITEMS - f Lnet/minecraft/class_4149; field_18467 NEAREST_PLAYERS - f Lnet/minecraft/class_4149; field_25362 NEAREST_ADULT - f Lnet/minecraft/class_4149; field_22359 PIGLIN_SPECIFIC_SENSOR - f Lnet/minecraft/class_4149; field_25756 GOLEM_DETECTED - f Lnet/minecraft/class_4149; field_25757 PIGLIN_BRUTE_SPECIFIC_SENSOR - f Ljava/util/function/Supplier; field_18471 sensorSupplier - f Lnet/minecraft/class_4149; field_18465 DUMMY - f Lnet/minecraft/class_4149; field_19011 VILLAGER_BABIES - f Lnet/minecraft/class_4149; field_18875 SECONDARY_POIS - f Lnet/minecraft/class_4149; field_19010 NEAREST_BED - f Lnet/minecraft/class_4149; field_18470 VILLAGER_HOSTILES - f Lnet/minecraft/class_4149; field_18469 HURT_BY -c net/minecraft/class_4150 net/minecraft/entity/ai/brain/sensor/VillagerHostilesSensor - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)I method_19619 compareHostileDistances - m (Lnet/minecraft/class_1309;Ljava/util/List;)Ljava/util/Optional; method_19106 func_220984_a - m (Lnet/minecraft/class_1309;)Ljava/util/Optional; method_19618 findNearestHostile - m (Lnet/minecraft/class_1309;)Z method_19104 hasPresence - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19107 func_220985_b - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)I method_19621 func_220986_b - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_19105 canNoticePresence - m (Lnet/minecraft/class_1309;)Ljava/util/Optional; method_19620 getVisibleEntities - f Lcom/google/common/collect/ImmutableMap; field_18473 enemyPresenceRange -c net/minecraft/class_4257 net/minecraft/entity/ai/brain/sensor/VillagerBabiesSensor - m (Lnet/minecraft/class_1309;)Ljava/util/List; method_20002 getVisibleEntities - m (Lnet/minecraft/class_1309;)Z method_20001 isVillagerChild - m (Lnet/minecraft/class_1309;)Ljava/util/List; method_20000 getVisibleVillagerChildren -c net/minecraft/class_4051 net/minecraft/entity/EntityPredicate - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_18419 canTarget - m ()Lnet/minecraft/class_4051; method_18424 setUseInvisibilityCheck - m (Ljava/util/function/Predicate;)Lnet/minecraft/class_4051; method_18420 setCustomPredicate - m ()Lnet/minecraft/class_4051; method_18423 setSkipAttackChecks - m ()Lnet/minecraft/class_4051; method_18421 allowFriendlyFire - m ()Lnet/minecraft/class_4051; method_18422 setLineOfSiteRequired - m (D)Lnet/minecraft/class_4051; method_18418 setDistance - m ()Lnet/minecraft/class_4051; method_18417 allowInvulnerable - f Lnet/minecraft/class_4051; field_18092 DEFAULT - f Ljava/util/function/Predicate; field_18099 customPredicate - f Z field_18098 useVisibilityModifier - f Z field_18097 skipAttackChecks - f D field_18093 distance - f Z field_18096 requireLineOfSight - f Z field_18095 friendlyFire - f Z field_18094 allowInvulnerable -c net/minecraft/class_5493 net/minecraft/util/GroundPathHelper - m (Lnet/minecraft/class_1308;)Z method_30955 isGroundNavigator -c net/minecraft/class_1414 net/minecraft/entity/ai/RandomPositionGenerator - m (Lnet/minecraft/class_1314;IIILnet/minecraft/class_243;ZDLjava/util/function/ToDoubleFunction;ZIIZ)Lnet/minecraft/class_243; method_21758 func_226339_a_ - m (Lnet/minecraft/class_1314;IIILnet/minecraft/class_243;D)Lnet/minecraft/class_243; method_23736 func_226344_b_ - m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;FII)Lnet/minecraft/class_243; method_21757 findAirTarget - m (Lnet/minecraft/class_1314;IIILnet/minecraft/class_243;D)Lnet/minecraft/class_243; method_21756 findGroundTarget - m (Lnet/minecraft/class_1314;Lnet/minecraft/class_2338;)Z method_21759 func_226341_a_ - m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;)Lnet/minecraft/class_243; method_23735 findRandomTargetBlockTowards - m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;)Lnet/minecraft/class_243; method_6379 findRandomTargetBlockAwayFrom - m (Ljava/util/Random;IIILnet/minecraft/class_243;D)Lnet/minecraft/class_2338; method_6374 func_226343_a_ - m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;)Lnet/minecraft/class_243; method_20658 func_223548_b - m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;D)Lnet/minecraft/class_243; method_6377 findRandomTargetTowardsScaled - m (Lnet/minecraft/class_1314;II)Lnet/minecraft/class_243; method_6378 getLandPos - m (Lnet/minecraft/class_1314;IILnet/minecraft/class_243;)Lnet/minecraft/class_243; method_27929 func_234133_a_ - m (Lnet/minecraft/class_2338;IILjava/util/function/Predicate;)Lnet/minecraft/class_2338; method_21761 func_226342_a_ - m (Lnet/minecraft/class_1314;IILjava/util/function/ToDoubleFunction;)Lnet/minecraft/class_243; method_19108 func_221024_a - m (Lnet/minecraft/class_1314;II)Lnet/minecraft/class_243; method_6375 findRandomTarget -c net/minecraft/class_1419 net/minecraft/village/VillageSiege - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Lnet/minecraft/class_243; method_6448 findRandomSpawnPos - m (Lnet/minecraft/class_3218;)V method_6447 spawnZombie - m (Lnet/minecraft/class_3218;)Z method_6446 trySetupSiege - f Lnet/minecraft/class_1419$class_4152; field_18479 siegeState - f I field_6720 spawnY - f Z field_6725 hasSetupSiege - f I field_6719 spawnZ - f Lorg/apache/logging/log4j/Logger; field_26390 LOGGER - f I field_6723 siegeCount - f I field_6722 nextSpawnTime - f I field_6721 spawnX -c net/minecraft/class_1419$class_4152 net/minecraft/village/VillageSiege$State - m (Ljava/lang/String;)Lnet/minecraft/class_1419$class_4152; valueOf valueOf - m ()[Lnet/minecraft/class_1419$class_4152; values values - f Lnet/minecraft/class_1419$class_4152; field_18480 SIEGE_CAN_ACTIVATE - f [Lnet/minecraft/class_1419$class_4152; field_18483 $VALUES - f Lnet/minecraft/class_1419$class_4152; field_18481 SIEGE_TONIGHT - f Lnet/minecraft/class_1419$class_4152; field_18482 SIEGE_DONE -c net/minecraft/class_4151 net/minecraft/entity/merchant/IReputationType - m (Ljava/lang/String;)Lnet/minecraft/class_4151; method_19109 register - f Lnet/minecraft/class_4151; field_18477 VILLAGER_KILLED - f Lnet/minecraft/class_4151; field_18475 GOLEM_KILLED - f Lnet/minecraft/class_4151; field_18476 VILLAGER_HURT - f Lnet/minecraft/class_4151; field_18474 ZOMBIE_VILLAGER_CURED - f Lnet/minecraft/class_4151; field_18478 TRADE -c net/minecraft/class_4151$1 net/minecraft/entity/merchant/IReputationType$1 - m ()Ljava/lang/String; toString toString - f Ljava/lang/String; field_17066 field_221034_f -c net/minecraft/class_4153 net/minecraft/village/PointOfInterestManager - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)D method_20003 func_219160_a - m (Ljava/util/function/Predicate;Lnet/minecraft/class_4156;)Z method_19130 func_219129_c - m (Lnet/minecraft/class_1923;Ljava/lang/Integer;)Ljava/util/Optional; method_19124 func_219149_a_ - m (Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/Optional; method_19127 find - m (Lnet/minecraft/class_4076;)Lcom/mojang/datafixers/util/Pair; method_22443 func_234147_c_ - m (Lnet/minecraft/class_2338;Ljava/util/function/Predicate;Lnet/minecraft/class_4157;)Ljava/lang/Boolean; method_19117 func_234141_a_ - m (Ljava/util/function/BiConsumer;Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19512 func_234142_a_ - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_1923;)V method_22438 func_234136_a_ - m (Lnet/minecraft/class_2338;)V method_19112 remove - m (Lnet/minecraft/class_2826;Lnet/minecraft/class_4076;)V method_20346 func_242321_a - m (Lnet/minecraft/class_2826;Ljava/util/function/BiConsumer;Lnet/minecraft/class_2338;)V method_19511 func_234139_a_ - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_2826;)V method_19510 checkConsistencyWithBlocks - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19115 add - m (Lnet/minecraft/class_2338;Ljava/util/function/Predicate;)Z method_19116 exists - m (Lnet/minecraft/class_2826;Lnet/minecraft/class_4076;Lnet/minecraft/class_4157;)V method_20347 func_234138_a_ - m (Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_30957 func_242324_b - m (Lnet/minecraft/class_2338;ILnet/minecraft/class_4156;)Z method_30335 func_242322_b - m (Ljava/util/function/Predicate;Lnet/minecraft/class_1923;Lnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_19123 getInChunk - m (Lnet/minecraft/class_2826;Lnet/minecraft/class_4076;Ljava/util/function/BiConsumer;)V method_20348 updateFromSelection - m (Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/Optional; method_20006 func_234148_d_ - m (Lnet/minecraft/class_2338;)Z method_19129 release - m (Ljava/util/function/Predicate;Lnet/minecraft/class_4153$class_4155;Lnet/minecraft/class_1923;)Ljava/util/stream/Stream; method_19121 func_226350_a_ - m (Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_22383 getInSquare - m (Lnet/minecraft/class_4157;)Ljava/lang/Boolean; method_20592 func_234134_a_ - m (Lnet/minecraft/class_2826;)Z method_20345 hasAnyPOI - m (Ljava/util/function/Predicate;Lnet/minecraft/class_4156;)Z method_20004 func_234143_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)D method_30956 func_242323_b - m (Lnet/minecraft/class_1923;)Z method_22441 func_234144_b_ - m (Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)J method_20252 getCountInRange - m (Lcom/mojang/datafixers/util/Pair;)Z method_22442 func_234146_b_ - m (Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/class_2338;I)Ljava/util/Optional; method_19126 take - m (J)Z method_19133 isVillageCenter - m (Lnet/minecraft/class_2338;ILnet/minecraft/class_4156;)Z method_19113 func_226349_a_ - m (Lcom/mojang/datafixers/util/Pair;)Lnet/minecraft/class_1923; method_22440 func_234140_a_ - m (Lnet/minecraft/class_4153;J)Z method_19110 func_219153_a - m (Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/class_4153$class_4155;Lnet/minecraft/class_2338;ILjava/util/Random;)Ljava/util/Optional; method_20005 getRandom - m (Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_21647 findAll - m (Lnet/minecraft/class_2826;Lnet/minecraft/class_4076;Ljava/util/function/BiConsumer;)V method_20349 func_234145_b_ - m (Lnet/minecraft/class_4156;)Lnet/minecraft/class_2338; method_19128 func_219152_b - m (Ljava/util/function/Predicate;Lnet/minecraft/class_4153$class_4155;Ljava/util/Optional;)Ljava/util/stream/Stream; method_19120 func_241393_a_ - m (Lnet/minecraft/class_2338;)Ljava/util/Optional; method_19132 getType - m (Lnet/minecraft/class_4076;)I method_19118 sectionsToVillage - m (Lnet/minecraft/class_4158;Lnet/minecraft/class_2338;)Z method_26339 hasTypeAtPosition - m (Ljava/util/function/Predicate;Lnet/minecraft/class_2338;ILnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_19125 func_219146_b - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;I)V method_22439 ensureLoadedAndValid - f Lnet/minecraft/class_4153$class_4154; field_18484 distanceTracker - f Lit/unimi/dsi/fastutil/longs/LongSet; field_20688 loadedChunks -c net/minecraft/class_4153$class_4155 net/minecraft/village/PointOfInterestManager$Status - m (Ljava/lang/String;)Lnet/minecraft/class_4153$class_4155; valueOf valueOf - m ()[Lnet/minecraft/class_4153$class_4155; values values - m ()Ljava/util/function/Predicate; method_19135 getTest - m (Lnet/minecraft/class_4156;)Z method_19136 func_221036_a - f [Lnet/minecraft/class_4153$class_4155; field_18491 $VALUES - f Ljava/util/function/Predicate; field_18490 test - f Lnet/minecraft/class_4153$class_4155; field_18488 IS_OCCUPIED - f Lnet/minecraft/class_4153$class_4155; field_18489 ANY - f Lnet/minecraft/class_4153$class_4155; field_18487 HAS_SPACE -c net/minecraft/class_4153$class_4154 net/minecraft/village/PointOfInterestManager$DistanceGraph - m ()V method_19134 runAllUpdates - f Lit/unimi/dsi/fastutil/longs/Long2ByteMap; field_18486 levels - f Lnet/minecraft/class_4153; field_18485 field_215564_a -c net/minecraft/class_4157 net/minecraft/village/PointOfInterestData - m (Ljava/util/function/Consumer;)V method_20353 refresh - m (Lit/unimi/dsi/fastutil/shorts/Short2ObjectMap;Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_20352 func_234157_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;)V method_19146 add - m (Lnet/minecraft/class_4158;)Ljava/util/Set; method_19143 func_234155_a_ - m (Lnet/minecraft/class_4156;)Z method_20350 add - m (Lnet/minecraft/class_4157;)Ljava/lang/Boolean; method_28366 func_234162_b_ - m (Lnet/minecraft/class_2338;)Ljava/lang/Object; method_20660 func_234165_e_ - m (Lnet/minecraft/class_4158;)Ljava/lang/Object; method_20659 func_234163_b_ - m (Lnet/minecraft/class_2338;)Ljava/util/Optional; method_19154 getType - m (Ljava/util/function/Predicate;Lnet/minecraft/class_4153$class_4155;)Ljava/util/stream/Stream; method_19150 getRecords - m (Lnet/minecraft/class_4157;)Ljava/util/List; method_28363 func_234154_a_ - m ()V method_20395 clear - m ()Z method_22444 isValid - m (Ljava/lang/Runnable;)Lcom/mojang/serialization/Codec; method_28364 func_234158_a_ - m (Ljava/util/Map$Entry;)Ljava/util/stream/Stream; method_19149 func_234160_a_ - m (Lnet/minecraft/class_2338;)Z method_19153 release - m (Ljava/util/function/Predicate;Ljava/util/Map$Entry;)Z method_19151 func_234161_a_ - m (Lnet/minecraft/class_2338;Ljava/util/function/Predicate;)Z method_19147 exists - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_4158;I)Lnet/minecraft/class_4156; method_20351 func_234156_a_ - m (Ljava/lang/Runnable;)Lnet/minecraft/class_4157; method_28367 func_234164_b_ - m (Lnet/minecraft/class_2338;)V method_19145 remove - m (Ljava/lang/Runnable;Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28365 func_234159_a_ - f Ljava/lang/Runnable; field_18499 onChange - f Lorg/apache/logging/log4j/Logger; field_18496 LOGGER - f Z field_19226 valid - f Lit/unimi/dsi/fastutil/shorts/Short2ObjectMap; field_18497 records - f Ljava/util/Map; field_18498 byType -c net/minecraft/class_4156 net/minecraft/village/PointOfInterest - m ()I hashCode hashCode - m ()Z method_19139 hasSpace - m (Lnet/minecraft/class_4156;)Lnet/minecraft/class_2338; method_28362 func_234153_c_ - m (Lnet/minecraft/class_4156;)Ljava/lang/Integer; method_28358 func_234149_a_ - m ()Z method_19140 isOccupied - m (Ljava/lang/Object;)Z equals equals - m (Ljava/lang/Runnable;Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28360 func_234151_a_ - m (Lnet/minecraft/class_4156;)Lnet/minecraft/class_4158; method_28361 func_234152_b_ - m ()Lnet/minecraft/class_2338; method_19141 getPos - m (Ljava/lang/Runnable;)Lcom/mojang/serialization/Codec; method_28359 func_234150_a_ - m ()Z method_19137 claim - m ()Lnet/minecraft/class_4158; method_19142 getType - m ()Z method_19138 release - f I field_18494 freeTickets - f Lnet/minecraft/class_2338; field_18492 pos - f Ljava/lang/Runnable; field_18495 onChange - f Lnet/minecraft/class_4158; field_18493 type -c net/minecraft/class_4158 net/minecraft/village/PointOfInterestType - m (Lnet/minecraft/class_4158;)Lnet/minecraft/class_4158; method_20354 registerBlockStates - m ()Ljava/util/function/Predicate; method_19164 getPredicate - m ()Ljava/util/Set; method_19165 func_234174_e_ - m (Lnet/minecraft/class_4158;)Z method_19156 func_234170_b_ - m (Lnet/minecraft/class_4158;)Z method_19162 func_234172_c_ - m (Ljava/lang/String;Ljava/util/Set;ILjava/util/function/Predicate;I)Lnet/minecraft/class_4158; method_20358 register - m (Lnet/minecraft/class_2680;)Z method_19517 func_234173_c_ - m (Lnet/minecraft/class_4158;Lnet/minecraft/class_2680;)V method_20355 func_234169_a_ - m ()I method_19161 getMaxFreeTickets - m ()I method_21648 getValidRange - m (Lnet/minecraft/class_2248;)Ljava/util/stream/Stream; method_20359 func_234171_b_ - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2248;)Ljava/util/Set; method_20356 getAllStates - m (Ljava/lang/String;Ljava/util/Set;II)Lnet/minecraft/class_4158; method_20357 register - m (Lnet/minecraft/class_4158;)Z method_29269 func_221049_c - m (Lnet/minecraft/class_2680;)Ljava/util/Optional; method_19516 forState - f Ljava/util/function/Supplier; field_25163 WORKSTATIONS - f Lnet/minecraft/class_4158; field_18513 NITWIT - f Lnet/minecraft/class_4158; field_18514 SHEPHERD - f Lnet/minecraft/class_4158; field_18512 MASON - f Ljava/util/Set; field_18850 blockStates - f Ljava/util/Map; field_18849 POIT_BY_BLOCKSTATE - f Lnet/minecraft/class_4158; field_18511 LIBRARIAN - f Lnet/minecraft/class_4158; field_18509 FLETCHER - f Ljava/lang/String; field_18519 name - f Lnet/minecraft/class_4158; field_18510 LEATHERWORKER - f Lnet/minecraft/class_4158; field_18508 FISHERMAN - f Lnet/minecraft/class_4158; field_18507 FARMER - f Lnet/minecraft/class_4158; field_18505 CARTOGRAPHER - f Lnet/minecraft/class_4158; field_18506 CLERIC - f Lnet/minecraft/class_4158; field_18504 BUTCHER - f Ljava/util/function/Predicate; field_18523 predicate - f Lnet/minecraft/class_4158; field_18503 ARMORER - f Ljava/util/Set; field_25162 BLOCKS_OF_INTEREST - f Lnet/minecraft/class_4158; field_18502 UNEMPLOYED - f Lnet/minecraft/class_4158; field_20632 NETHER_PORTAL - f Lnet/minecraft/class_4158; field_23229 LODESTONE - f Lnet/minecraft/class_4158; field_20352 BEE_NEST - f Ljava/util/function/Predicate; field_18500 ANY_VILLAGER_WORKSTATION - f Lnet/minecraft/class_4158; field_20351 BEEHIVE - f Ljava/util/function/Predicate; field_18501 MATCH_ANY - f Lnet/minecraft/class_4158; field_18517 HOME - f Lnet/minecraft/class_4158; field_18518 MEETING - f I field_18521 maxFreeTickets - f Lnet/minecraft/class_4158; field_18516 WEAPONSMITH - f I field_20298 validRange - f Ljava/util/Set; field_19227 BED_HEADS - f Lnet/minecraft/class_4158; field_18515 TOOLSMITH -c net/minecraft/class_1420 net/minecraft/entity/passive/BatEntity - m (Z)V method_6449 setIsBatHanging - m ()Z method_6451 isNearHalloween - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20661 canSpawn - m ()Lnet/minecraft/class_5132$class_5133; method_26878 func_234175_m_ - m ()Z method_6450 getIsBatHanging - f Lnet/minecraft/class_2338; field_6729 spawnPosition - f Lnet/minecraft/class_2940; field_6728 HANGING - f Lnet/minecraft/class_4051; field_18100 field_213813_c -c net/minecraft/class_1421 net/minecraft/entity/passive/AmbientEntity -c net/minecraft/class_1422 net/minecraft/entity/passive/fish/AbstractFishEntity - m (Lnet/minecraft/class_1799;)V method_6455 setBucketData - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20662 func_223363_b - m ()Lnet/minecraft/class_5132$class_5133; method_26879 func_234176_m_ - m (Z)V method_6454 setFromBucket - m ()Lnet/minecraft/class_1799; method_6452 getFishBucket - m ()Z method_6456 func_212800_dy - m ()Z method_6453 isFromBucket - m ()Lnet/minecraft/class_3414; method_6457 getFlopSound - f Lnet/minecraft/class_2940; field_6730 FROM_BUCKET -c net/minecraft/class_1422$class_1423 net/minecraft/entity/passive/fish/AbstractFishEntity$MoveHelperController - f Lnet/minecraft/class_1422; field_6731 fish -c net/minecraft/class_1422$class_1424 net/minecraft/entity/passive/fish/AbstractFishEntity$SwimGoal - f Lnet/minecraft/class_1422; field_6732 fish -c net/minecraft/class_1425 net/minecraft/entity/passive/fish/AbstractGroupFishEntity - m ()Z method_6470 hasGroupLeader - m (Ljava/util/stream/Stream;)V method_6468 func_212810_a - m ()V method_6466 leaveGroup - m ()Z method_6467 isGroupLeader - m ()V method_6463 moveToGroupLeader - m ()Z method_6469 canGroupGrow - m ()V method_6459 decreaseGroupSize - m (Lnet/minecraft/class_1425;)V method_6458 func_212804_b - m ()Z method_6464 inRangeOfGroupLeader - m ()I method_6465 getMaxGroupSize - m (Lnet/minecraft/class_1425;)Z method_6460 func_212801_c - m ()V method_6462 increaseGroupSize - m (Lnet/minecraft/class_1425;)Lnet/minecraft/class_1425; method_6461 func_212803_a - f Lnet/minecraft/class_1425; field_6734 groupLeader - f I field_6733 groupSize -c net/minecraft/class_1425$class_1426 net/minecraft/entity/passive/fish/AbstractGroupFishEntity$GroupData - f Lnet/minecraft/class_1425; field_6735 groupLeader -c net/minecraft/class_1427 net/minecraft/entity/passive/GolemEntity -c net/minecraft/class_4466 net/minecraft/entity/passive/BeeEntity - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23967 func_226378_A_ - m (Lnet/minecraft/class_2338;I)Z method_23979 isWithinDistance - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23991 func_226438_k_ - m (Lnet/minecraft/class_2338;)V method_21797 setFlowerPos - m ()V method_21788 onHoneyDelivered - m (Lnet/minecraft/class_4466;Z)V method_23975 func_226396_a_ - m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;I)Z method_23974 func_226395_a_ - m (Lnet/minecraft/class_4466;)Z method_21774 func_226434_i_ - m (IZ)V method_21775 setBeeFlag - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23969 func_226382_E_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23996 func_226443_o_ - m ()Z method_23984 isHiveNearFire - m (Z)V method_21808 setNearTarget - m ()Z method_21794 isHiveValid - m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21803 func_226389_L_ - m (I)V method_21807 setStayOutOfHiveCountdown - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_24002 func_226457_v_ - m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21765 func_226402_c_ - m ()Z method_21779 hasFlower - m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21795 func_226461_z_ - m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)V method_23978 func_226400_b_ - m (Lnet/minecraft/class_2338;)Z method_23990 isTooFar - m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_21773 func_226403_c_ - m (Lnet/minecraft/class_4466;)I method_24004 func_226460_y_ - m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21796 func_226379_B_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23993 func_226440_l_ - m ()Lnet/minecraft/class_2338; method_21778 getFlowerPos - m (Lnet/minecraft/class_4466;)I method_21800 func_226387_J_ - m ()Z method_23983 failedPollinatingTooLong - m ()I method_21792 getCropsGrownSincePollination - m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21798 func_226383_F_ - m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Z method_23981 func_226406_d_ - m (Lnet/minecraft/class_4466;I)I method_23977 func_226399_b_ - m ()Z method_21784 hasNectar - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23997 func_226444_p_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_24003 func_226458_w_ - m ()Z method_21786 isNearTarget - m ()Lnet/minecraft/class_2338; method_23884 getHivePos - m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Z method_23973 func_226394_a_ - m ()Lnet/minecraft/class_5132$class_5133; method_26880 func_234182_eX_ - m (I)Z method_21812 getBeeFlag - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_24000 func_226448_s_ - m (Lnet/minecraft/class_4466;)I method_21776 func_226459_x_ - m (Lnet/minecraft/class_2338;)Z method_23988 doesHiveHaveSpace - m (Lnet/minecraft/class_1937;DDDDDLnet/minecraft/class_2394;)V method_21769 addParticle - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23980 func_226405_d_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23994 func_226441_m_ - m ()Z method_21791 hasHive - m (Lnet/minecraft/class_4466;I)I method_23972 func_226393_a_ - m ()Z method_21785 hasStung - m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_23740 func_226384_G_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_4466$class_4472; method_23971 func_226386_I_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23998 func_226445_q_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_4466$class_4478; method_23738 func_226392_a_ - m ()Z method_21789 canEnterHive - m (Z)V method_21805 setHasNectar - m (F)F method_21811 getBodyPitch - m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_21801 func_226388_K_ - m ()V method_21783 resetCropCounter - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23968 func_226380_C_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_4466; method_21771 func_241840_a - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23982 func_226407_e_ - m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_21767 func_226408_e_ - m (Lnet/minecraft/class_4466;)V method_21804 func_226390_M_ - m (Lnet/minecraft/class_4466;)I method_23970 func_226385_H_ - m (Lnet/minecraft/class_4466;)Ljava/util/Random; method_23739 func_226381_D_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23989 func_226436_j_ - m (Lnet/minecraft/class_2338;)V method_23987 startMovingTo - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23999 func_226446_r_ - m ()V method_21790 updateBodyPitch - m ()V method_21793 addCropCounter - m (Z)V method_21806 setHasStung - m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Z method_23986 func_226429_f_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23995 func_226442_n_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_2338; method_21777 func_226451_t_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23976 func_226398_b_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_24001 func_226454_u_ - m (Lnet/minecraft/class_4466;)Z method_21802 func_226430_g_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_2338; method_21772 func_226432_h_ - m (Lnet/minecraft/class_4466;)Lnet/minecraft/class_1408; method_23985 func_226428_f_ - m ()V method_21780 resetTicksWithoutNectar - m (Lnet/minecraft/class_2338;)Z method_23992 isFlowers - f I field_21644 remainingCooldownBeforeLocatingNewFlower - f F field_20356 rollAmount - f I field_20360 stayOutOfHiveCountdown - f Lnet/minecraft/class_2940; field_20353 DATA_FLAGS_ID - f I field_21509 underWaterTicks - f Lnet/minecraft/class_4801; field_25363 field_234180_bw_ - f F field_20357 rollAmountO - f Lnet/minecraft/class_4466$class_4472; field_21645 findBeehiveGoal - f I field_20361 numCropsGrownSincePollination - f Lnet/minecraft/class_2338; field_20362 savedFlowerPos - f Lnet/minecraft/class_2940; field_20354 ANGER_TIME - f Ljava/util/UUID; field_25364 lastHurtBy - f I field_20358 timeSinceSting - f I field_21643 remainingCooldownBeforeLocatingNewHive - f Lnet/minecraft/class_2338; field_20363 hivePos - f Lnet/minecraft/class_4466$class_4478; field_21079 pollinateGoal - f I field_20359 ticksWithoutNectarSinceExitingHive - f Lnet/minecraft/class_4466$class_4473; field_21646 findFlowerGoal -c net/minecraft/class_4466$1 net/minecraft/entity/passive/BeeEntity$1 - f Lnet/minecraft/class_4466; field_20364 field_226462_p_ -c net/minecraft/class_4466$class_4467 net/minecraft/entity/passive/BeeEntity$PassiveGoal - m ()Z method_21814 canBeeStart - m ()Z method_21815 canBeeContinue - f Lnet/minecraft/class_4466; field_20365 field_226463_a_ -c net/minecraft/class_4466$class_4468 net/minecraft/entity/passive/BeeEntity$StingGoal - f Lnet/minecraft/class_4466; field_20366 field_226464_d_ -c net/minecraft/class_4466$class_4469 net/minecraft/entity/passive/BeeEntity$AttackPlayerGoal - m ()Z method_21816 canSting -c net/minecraft/class_4466$class_4470 net/minecraft/entity/passive/BeeEntity$EnterBeehiveGoal - f Lnet/minecraft/class_4466; field_20367 field_226466_b_ -c net/minecraft/class_4466$class_4472 net/minecraft/entity/passive/BeeEntity$FindBeehiveGoal - m ()V method_24011 clearPossibleHives - m (Lnet/minecraft/class_4466$class_4472;)V method_24008 func_226474_c_ - m ()V method_24012 makeChosenHivePossibleHive - m (Lnet/minecraft/class_2338;)Z method_24006 startMovingToFar - m (Lnet/minecraft/class_2338;)V method_24009 addPossibleHives - m ()V method_23885 reset - m (Lnet/minecraft/class_4466$class_4472;Lnet/minecraft/class_2338;)Z method_24005 func_226471_a_ - m (Lnet/minecraft/class_2338;)Z method_24010 isCloseEnough - m (Lnet/minecraft/class_2338;)Z method_24007 isPossibleHive - f Ljava/util/List; field_21648 possibleHives - f I field_23133 field_234183_f_ - f Lnet/minecraft/class_4466; field_20371 field_226467_b_ - f Lnet/minecraft/class_11; field_21649 path - f I field_21647 ticks -c net/minecraft/class_4466$class_4473 net/minecraft/entity/passive/BeeEntity$FindFlowerGoal - m ()Z method_24013 shouldMoveToFlower - f I field_21650 ticks - f Lnet/minecraft/class_4466; field_20372 field_226480_b_ -c net/minecraft/class_4466$class_4474 net/minecraft/entity/passive/BeeEntity$FindPollinationTargetGoal - f Lnet/minecraft/class_4466; field_20373 field_226483_b_ -c net/minecraft/class_4466$class_4475 net/minecraft/entity/passive/BeeEntity$AngerGoal - f Lnet/minecraft/class_4466; field_20374 field_226484_a_ -c net/minecraft/class_4466$class_4476 net/minecraft/entity/passive/BeeEntity$UpdateBeehiveGoal - m (Lnet/minecraft/class_4158;)Z method_23743 func_226486_a_ - m (Lnet/minecraft/class_4466;Lnet/minecraft/class_2338;)Z method_24014 func_226487_a_ - m ()Ljava/util/List; method_23742 getNearbyFreeHives - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)D method_24015 func_226488_a_ - f Lnet/minecraft/class_4466; field_20375 field_226485_b_ -c net/minecraft/class_4466$class_4477 net/minecraft/entity/passive/BeeEntity$BeeLookController - f Lnet/minecraft/class_4466; field_20376 field_226490_h_ -c net/minecraft/class_4466$class_4478 net/minecraft/entity/passive/BeeEntity$PollinateGoal - m ()V method_23748 cancel - m ()Z method_21820 completedPollination - m ()V method_23749 moveToNextTarget - m (Lnet/minecraft/class_4466$class_4478;)Z method_23746 func_226498_a_ - m ()Z method_23346 isRunning - m (Lnet/minecraft/class_4466$class_4478;)V method_23747 func_226501_b_ - m (Lnet/minecraft/class_2680;)Z method_21819 func_226499_a_ - m ()Ljava/util/Optional; method_21821 getFlower - m (Ljava/util/function/Predicate;D)Ljava/util/Optional; method_22326 findFlower - m ()F method_23750 getRandomOffset - f I field_21651 ticks - f Z field_21080 running - f Lnet/minecraft/class_4466; field_20377 field_226491_b_ - f Lnet/minecraft/class_243; field_21511 nextTarget - f I field_20378 pollinationTicks - f I field_20379 lastPollinationTick - f Ljava/util/function/Predicate; field_20617 flowerPredicate -c net/minecraft/class_4466$class_4479 net/minecraft/entity/passive/BeeEntity$WanderGoal - m ()Lnet/minecraft/class_243; method_21822 getRandomLocation - f Lnet/minecraft/class_4466; field_20380 field_226508_a_ -c net/minecraft/class_1429 net/minecraft/entity/passive/AnimalEntity - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1429;)V method_24650 func_234177_a_ - m (Lnet/minecraft/class_1657;)V method_6480 setInLove - m ()I method_29270 func_234178_eO_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20663 canAnimalSpawn - m (Lnet/minecraft/class_1799;)Z method_6481 isBreedingItem - m ()Z method_6482 canFallInLove - m (Lnet/minecraft/class_1429;)Z method_6474 canMateWith - m (I)V method_6476 setInLove - m ()Lnet/minecraft/class_3222; method_6478 getLoveCause - m ()V method_6477 resetInLove - m ()Z method_6479 isInLove - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)V method_6475 consumeItemFromStack - f Ljava/util/UUID; field_6744 playerInLove - f I field_6745 inLove -c net/minecraft/class_1428 net/minecraft/entity/passive/ChickenEntity - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1428; method_6471 func_241840_a - m (Z)V method_6473 setChickenJockey - m ()Z method_6472 isChickenJockey - m ()Lnet/minecraft/class_5132$class_5133; method_26882 func_234187_eI_ - f F field_6743 destPos - f Z field_6740 chickenJockey - f F field_6738 oFlapSpeed - f F field_6741 wingRotation - f I field_6739 timeUntilNextEgg - f Lnet/minecraft/class_1856; field_6742 TEMPTATION_ITEMS - f F field_6737 wingRotDelta - f F field_6736 oFlap -c net/minecraft/class_1451 net/minecraft/entity/passive/CatEntity - m ()F method_22327 func_226510_eF_ - m ()I method_6571 getCatType - m (Ljava/util/HashMap;)V method_16083 func_213410_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1451; method_6573 func_241840_a - m ()V method_16085 func_213412_ek - m ()V method_16090 func_213418_el - m ()Z method_16086 func_213416_eg - m ()V method_16089 func_213420_ej - m ()V method_16084 func_213411_em - m ()Z method_16093 func_213409_eh - m ()Lnet/minecraft/class_1767; method_16096 getCollarColor - m (F)F method_16082 func_213408_v - m (F)F method_16091 func_213421_w - m (Lnet/minecraft/class_1767;)V method_16094 setCollarColor - m (Z)V method_16088 func_213419_u - m (I)V method_6572 setCatType - m (Z)V method_16087 func_213415_v - m ()Lnet/minecraft/class_5132$class_5133; method_26881 func_234184_eY_ - m ()Lnet/minecraft/class_2960; method_16092 getCatTypeName - m (F)F method_16095 func_213424_x - f F field_16290 field_213433_bL - f F field_16291 field_213434_bM - f Lnet/minecraft/class_1856; field_6809 BREEDING_ITEMS - f Lnet/minecraft/class_1451$class_3698; field_6808 avoidPlayerGoal - f Lnet/minecraft/class_2940; field_6811 CAT_TYPE - f Ljava/util/Map; field_16283 TEXTURE_BY_ID - f Lnet/minecraft/class_1391; field_6810 temptGoal - f F field_16288 field_213435_bN - f Lnet/minecraft/class_2940; field_16285 COLLAR_COLOR - f F field_16286 field_213437_bP - f F field_16287 field_213438_bQ - f F field_16289 field_213436_bO - f Lnet/minecraft/class_2940; field_16284 field_213428_bG - f Lnet/minecraft/class_2940; field_16292 field_213429_bH -c net/minecraft/class_1451$class_3698 net/minecraft/entity/passive/CatEntity$AvoidPlayerGoal - f Lnet/minecraft/class_1451; field_16293 cat -c net/minecraft/class_1451$class_3699 net/minecraft/entity/passive/CatEntity$MorningGiftGoal - m ()Z method_16098 func_220805_g - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2338; method_27801 func_234186_a_ - m ()V method_16097 func_220804_h - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_27800 func_234185_a_ - f Lnet/minecraft/class_1451; field_16297 cat - f Lnet/minecraft/class_2338; field_16294 bedPos - f Lnet/minecraft/class_1657; field_16295 owner - f I field_16296 tickCounter -c net/minecraft/class_1451$class_3700 net/minecraft/entity/passive/CatEntity$TemptGoal - f Lnet/minecraft/class_1657; field_16298 temptingPlayer - f Lnet/minecraft/class_1451; field_17948 cat -c net/minecraft/class_1430 net/minecraft/entity/passive/CowEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26883 func_234188_eI_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1430; method_6483 func_241840_a -c net/minecraft/class_1431 net/minecraft/entity/passive/fish/CodEntity -c net/minecraft/class_1432 net/minecraft/entity/passive/IFlyingAnimal -c net/minecraft/class_1433 net/minecraft/entity/passive/DolphinEntity - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20664 func_223364_b - m (Lnet/minecraft/class_1433;)Ljava/util/Random; method_6488 access$100 - m ()Z method_6484 closeToTarget - m ()Lnet/minecraft/class_2338; method_6494 getTreasurePos - m (Lnet/minecraft/class_1542;)Z method_6485 func_205023_b - m ()I method_6491 getMoistness - m (Z)V method_6486 setGotFish - m ()Lnet/minecraft/class_4051; method_18425 func_213808_dY - m (I)V method_6489 setMoistness - m (Lnet/minecraft/class_1433;)Ljava/util/Random; method_18054 func_213809_b - m (Lnet/minecraft/class_2394;)V method_6492 func_208401_a - m (Lnet/minecraft/class_1433;)Ljava/util/Random; method_18055 func_213807_c - m ()Lnet/minecraft/class_5132$class_5133; method_26884 func_234190_eK_ - m (Lnet/minecraft/class_2338;)V method_6493 setTreasurePos - m ()Z method_6487 hasGotFish - f Lnet/minecraft/class_2940; field_6749 MOISTNESS - f Lnet/minecraft/class_2940; field_6747 TREASURE_POS - f Lnet/minecraft/class_2940; field_6750 GOT_FISH - f Ljava/util/function/Predicate; field_6748 ITEM_SELECTOR - f Lnet/minecraft/class_4051; field_18101 field_213810_bA -c net/minecraft/class_1433$1 net/minecraft/entity/passive/DolphinEntity$1 -c net/minecraft/class_1433$class_1435 net/minecraft/entity/passive/DolphinEntity$SwimToTreasureGoal - f Z field_6753 field_208058_b - f Lnet/minecraft/class_1433; field_6752 dolphin -c net/minecraft/class_1433$class_1436 net/minecraft/entity/passive/DolphinEntity$SwimWithPlayerGoal - f Lnet/minecraft/class_1433; field_6755 dolphin - f Lnet/minecraft/class_1657; field_6756 targetPlayer - f D field_6754 speed -c net/minecraft/class_1433$class_1434 net/minecraft/entity/passive/DolphinEntity$MoveHelperController - f Lnet/minecraft/class_1433; field_6751 dolphin -c net/minecraft/class_1433$class_1437 net/minecraft/entity/passive/DolphinEntity$PlayWithItemsGoal - m (Lnet/minecraft/class_1799;)V method_18056 func_220810_a - f I field_6758 field_205154_b - f Lnet/minecraft/class_1433; field_6757 field_205153_a -c net/minecraft/class_1439 net/minecraft/entity/passive/IronGolemEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26886 func_234200_m_ - m ()F method_22328 func_226511_et_ - m (Lnet/minecraft/class_1309;)Z method_6498 func_234199_j_ - m ()I method_6502 getHoldRoseTick - m ()I method_6501 getAttackTimer - m (Z)V method_6497 setHoldingRose - m (Z)V method_6499 setPlayerCreated - m ()Lnet/minecraft/class_1439$class_4621; method_23347 func_226512_l_ - m ()Z method_6496 isPlayerCreated - f I field_6762 attackTimer - f Lnet/minecraft/class_2940; field_6763 PLAYER_CREATED - f I field_25366 field_234197_bv_ - f I field_6759 holdRoseTick - f Lnet/minecraft/class_4801; field_25365 field_234196_bu_ - f Ljava/util/UUID; field_25367 field_234198_bw_ -c net/minecraft/class_1439$class_4621 net/minecraft/entity/passive/IronGolemEntity$Cracks - m (F)Lnet/minecraft/class_1439$class_4621; method_23693 func_226515_a_ - m (Ljava/lang/String;)Lnet/minecraft/class_1439$class_4621; valueOf valueOf - m ()[Lnet/minecraft/class_1439$class_4621; values values - m (Lnet/minecraft/class_1439$class_4621;)D method_23694 func_226516_a_ - f Lnet/minecraft/class_1439$class_4621; field_21084 HIGH - f F field_21492 field_226514_f_ - f Ljava/util/List; field_21491 field_226513_e_ - f Lnet/minecraft/class_1439$class_4621; field_21083 MEDIUM - f [Lnet/minecraft/class_1439$class_4621; field_21085 $VALUES - f Lnet/minecraft/class_1439$class_4621; field_21082 LOW - f Lnet/minecraft/class_1439$class_4621; field_21081 NONE -c net/minecraft/class_4019 net/minecraft/entity/passive/FoxEntity - m (Z)V method_18295 setStuck - m (Lnet/minecraft/class_1799;)V method_18289 spitOutItem - m (Lnet/minecraft/class_4019;)Z method_18256 func_213452_a - m (Lnet/minecraft/class_4019;)V method_18286 func_213459_e - m ()Z method_18273 isStuck - m ()Z method_18275 func_213490_ee - m (Lnet/minecraft/class_1309;)Z method_18429 func_234193_j_ - m (Lnet/minecraft/class_4019;F)F method_20435 func_234191_b_ - m (Lnet/minecraft/class_4019;)Ljava/util/Random; method_18287 func_213491_f - m (Lnet/minecraft/class_1309;)Z method_18254 func_213456_k - m (F)F method_18300 func_213503_w - m (Z)V method_18296 func_213461_s - m (Lnet/minecraft/class_1297;)Z method_18253 func_213463_a - m ()Z method_18285 func_213478_eo - m ()V method_18280 setAttackGoals - m ()Lnet/minecraft/class_4019$class_4039; method_18271 getVariantType - m (Z)V method_18301 setFoxAggroed - m (Lnet/minecraft/class_4019;Z)V method_18427 func_213476_a - m (Lnet/minecraft/class_1799;)Z method_18430 canEatItem - m ()Ljava/util/function/Predicate; method_18279 func_213477_ei - m ()Z method_18274 func_213480_dY - m ()Z method_18277 func_213467_eg - m ()Z method_18282 isFoxAggroed - m (Lnet/minecraft/class_1309;)Z method_18431 func_213497_j - m (Lnet/minecraft/class_4019$class_4039;)V method_18255 setVariantType - m ()Ljava/util/List; method_18281 getTrustedUUIDs - m (Lnet/minecraft/class_4019;)Ljava/util/Random; method_18288 func_213500_g - m (Z)V method_18297 setCrouching - m (Lnet/minecraft/class_4019;)Z method_24837 func_234195_k_ - m (IZ)V method_18269 setFoxFlag - m (I)Z method_18293 getFoxFlag - m (Z)V method_18302 setSleeping - m (Lnet/minecraft/class_4019;Z)V method_18259 func_213504_b - m (Lnet/minecraft/class_1309;)Z method_18262 func_213487_l - m ()Ljava/util/function/Predicate; method_18278 func_213457_eh - m (Lnet/minecraft/class_4019;)V method_18268 func_213458_c - m (Lnet/minecraft/class_1297;)Z method_18267 func_213470_c - m ()V method_18283 func_213454_em - m (Lnet/minecraft/class_4019;Ljava/util/UUID;)Z method_18426 func_213496_b - m (Lnet/minecraft/class_1309;)Z method_20451 func_213469_i - m (Ljava/util/UUID;)Z method_18428 isTrustedUUID - m (Lnet/minecraft/class_4019;)Ljava/util/Random; method_18290 func_213506_h - m (Lnet/minecraft/class_4019;)Z method_24836 func_234194_j_ - m ()Z method_18272 isSitting - m (Lnet/minecraft/class_4019;Lnet/minecraft/class_1309;)Z method_18257 func_213481_a - m ()Lnet/minecraft/class_5132$class_5133; method_26885 func_234192_eI_ - m (Z)V method_18299 func_213502_u - m (Lnet/minecraft/class_1799;)V method_18291 spawnItem - m (Lnet/minecraft/class_4019;Z)V method_18264 func_213494_c - m (Lnet/minecraft/class_4019;)Z method_18263 func_213484_b - m (Lnet/minecraft/class_1309;)Z method_24347 func_213493_h - m ()V method_18284 func_213499_en - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_4019; method_18260 func_241840_a - m (Lnet/minecraft/class_1297;)Z method_18261 func_213498_b - m (Lnet/minecraft/class_4019;F)F method_20434 func_213460_b - m (Lnet/minecraft/class_4019;)Z method_18292 func_213488_i - m (Lnet/minecraft/class_4019;Ljava/util/UUID;)V method_18258 func_213462_a - m (Ljava/util/UUID;)V method_18266 addTrustedUUID - m (F)F method_18298 func_213475_v - m (Z)V method_18294 setSitting - m (Lnet/minecraft/class_1542;)Z method_18265 func_213489_b - m (Lnet/minecraft/class_4019;)Ljava/util/List; method_18270 func_213483_d - f Ljava/util/function/Predicate; field_17955 IS_PREY - f Lnet/minecraft/class_2940; field_17950 FOX_FLAGS - f I field_17964 eatTicks - f F field_17960 interestedAngle - f Lnet/minecraft/class_1352; field_17959 attackFish - f Ljava/util/function/Predicate; field_17954 STALKABLE_PREY - f F field_17961 interestedAngleO - f Lnet/minecraft/class_2940; field_17951 TRUSTED_UUID_SECONDARY - f Lnet/minecraft/class_1352; field_17958 attackTurtles - f Lnet/minecraft/class_2940; field_17952 TRUSTED_UUID_MAIN - f Ljava/util/function/Predicate; field_17953 TRUSTED_TARGET_SELECTOR - f F field_17962 crouchAmount - f Lnet/minecraft/class_1352; field_17957 attackAnimals - f Ljava/util/function/Predicate; field_17956 SHOULD_AVOID - f F field_17963 crouchAmountO - f Lnet/minecraft/class_2940; field_17949 FOX_TYPE -c net/minecraft/class_4019$1 net/minecraft/entity/passive/FoxEntity$1 -c net/minecraft/class_4019$class_4034 net/minecraft/entity/passive/FoxEntity$FindItemsGoal - f Lnet/minecraft/class_4019; field_17985 field_220826_a -c net/minecraft/class_4019$class_4031 net/minecraft/entity/passive/FoxEntity$StrollGoal - m ()Z method_18308 func_220759_g - f Lnet/minecraft/class_4019; field_17982 field_220760_a -c net/minecraft/class_4019$class_4032 net/minecraft/entity/passive/FoxEntity$PanicGoal - f Lnet/minecraft/class_4019; field_17983 field_220739_f -c net/minecraft/class_4019$class_4033 net/minecraft/entity/passive/FoxEntity$PounceGoal - f Lnet/minecraft/class_4019; field_17984 field_220714_a -c net/minecraft/class_4019$class_4037 net/minecraft/entity/passive/FoxEntity$SleepGoal - m ()Z method_18432 func_220823_j - f I field_17994 field_220825_c - f Lnet/minecraft/class_4019; field_17993 field_220824_b -c net/minecraft/class_4019$class_4038 net/minecraft/entity/passive/FoxEntity$FollowTargetGoal - f Lnet/minecraft/class_4019; field_17995 field_220827_a -c net/minecraft/class_4019$class_4035 net/minecraft/entity/passive/FoxEntity$SitAndLookGoal - m ()V method_18309 func_220817_j - f I field_17989 field_220821_e - f Lnet/minecraft/class_4019; field_17986 field_220818_b - f D field_17987 field_220819_c - f D field_17988 field_220820_d - f I field_17990 field_220822_f -c net/minecraft/class_4019$class_4036 net/minecraft/entity/passive/FoxEntity$FindShelterGoal - f I field_17992 cooldown - f Lnet/minecraft/class_4019; field_17991 field_220703_b -c net/minecraft/class_4019$class_4039 net/minecraft/entity/passive/FoxEntity$Type - m (Ljava/lang/String;)Lnet/minecraft/class_4019$class_4039; method_18314 getTypeByName - m (I)[Lnet/minecraft/class_4019$class_4039; method_18316 func_221084_b - m (Ljava/util/Optional;)Lnet/minecraft/class_4019$class_4039; method_18313 func_242325_a - m (Ljava/lang/String;)Lnet/minecraft/class_4019$class_4039; valueOf valueOf - m ()I method_18317 getIndex - m ()Ljava/lang/String; method_18310 getName - m ()[Lnet/minecraft/class_4019$class_4039; values values - m (I)Lnet/minecraft/class_4019$class_4039; method_18311 getTypeByIndex - m (Lnet/minecraft/class_4019$class_4039;)Lnet/minecraft/class_4019$class_4039; method_18312 func_221081_a - f Ljava/util/Map; field_17999 TYPES_BY_NAME - f Ljava/lang/String; field_18001 name - f I field_18000 index - f Ljava/util/List; field_18002 spawnBiomes - f [Lnet/minecraft/class_4019$class_4039; field_18003 $VALUES - f Lnet/minecraft/class_4019$class_4039; field_17997 SNOW - f [Lnet/minecraft/class_4019$class_4039; field_17998 field_221088_c - f Lnet/minecraft/class_4019$class_4039; field_17996 RED -c net/minecraft/class_4019$class_4020 net/minecraft/entity/passive/FoxEntity$RevengeGoal - f I field_17968 field_220788_l - f Lnet/minecraft/class_4019; field_17965 field_220785_i - f Lnet/minecraft/class_1309; field_17967 field_220787_k - f Lnet/minecraft/class_1309; field_17966 field_220786_j -c net/minecraft/class_4019$class_4023 net/minecraft/entity/passive/FoxEntity$BaseGoal - m ()Z method_18306 func_220814_h - m ()Z method_18305 func_220813_g - f Lnet/minecraft/class_4051; field_18102 field_220816_b - f Lnet/minecraft/class_4019; field_17972 field_220815_a -c net/minecraft/class_4019$class_4024 net/minecraft/entity/passive/FoxEntity$MateGoal - f Lnet/minecraft/class_4019; field_17973 field_220690_d -c net/minecraft/class_4019$class_4021 net/minecraft/entity/passive/FoxEntity$JumpGoal - f Lnet/minecraft/class_4019; field_17970 field_220812_b - f I field_17969 delay -c net/minecraft/class_4019$class_4022 net/minecraft/entity/passive/FoxEntity$AlertablePredicate - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_1309;)Z method_18303 test - f Lnet/minecraft/class_4019; field_17971 field_221079_a -c net/minecraft/class_4019$class_4052 net/minecraft/entity/passive/FoxEntity$FollowGoal - f Lnet/minecraft/class_4019; field_18103 field_220705_a - f Lnet/minecraft/class_4019; field_18104 owner -c net/minecraft/class_4019$class_4027 net/minecraft/entity/passive/FoxEntity$FoxData - f Lnet/minecraft/class_4019$class_4039; field_17977 field_220366_a -c net/minecraft/class_4019$class_4025 net/minecraft/entity/passive/FoxEntity$EatBerriesGoal - m ()V method_18307 eatBerry - f I field_17974 field_220731_g - f Lnet/minecraft/class_4019; field_17975 field_220732_h -c net/minecraft/class_4019$class_4026 net/minecraft/entity/passive/FoxEntity$SwimGoal - f Lnet/minecraft/class_4019; field_17976 field_220701_a -c net/minecraft/class_4019$class_4029 net/minecraft/entity/passive/FoxEntity$BiteGoal - f Lnet/minecraft/class_4019; field_17980 field_220721_d -c net/minecraft/class_4019$class_4030 net/minecraft/entity/passive/FoxEntity$MoveHelperController - f Lnet/minecraft/class_4019; field_17981 field_220671_i -c net/minecraft/class_4019$class_4292 net/minecraft/entity/passive/FoxEntity$WatchGoal - f Lnet/minecraft/class_4019; field_19261 field_220717_f -c net/minecraft/class_4019$class_4028 net/minecraft/entity/passive/FoxEntity$LookHelperController - f Lnet/minecraft/class_4019; field_17979 field_220683_h -c net/minecraft/class_3701 net/minecraft/entity/passive/OcelotEntity - m ()Z method_16099 isTrusting - m (Lnet/minecraft/class_3701;)Z method_16101 func_213526_a - m ()V method_16103 func_213529_dV - m ()F method_22329 func_226517_es_ - m ()Lnet/minecraft/class_5132$class_5133; method_26887 func_234201_eI_ - m (Z)V method_16100 func_213527_s - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20666 func_223319_c - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_3701; method_16104 func_241840_a - m (Z)V method_16102 setTrusting - f Lnet/minecraft/class_1856; field_16299 BREEDING_ITEMS - f Lnet/minecraft/class_3701$class_3702; field_16300 field_213531_bB - f Lnet/minecraft/class_2940; field_16301 IS_TRUSTING - f Lnet/minecraft/class_3701$class_3703; field_16302 aiTempt -c net/minecraft/class_3701$class_3702 net/minecraft/entity/passive/OcelotEntity$AvoidEntityGoal - f Lnet/minecraft/class_3701; field_16303 ocelot -c net/minecraft/class_3701$class_3703 net/minecraft/entity/passive/OcelotEntity$TemptGoal - f Lnet/minecraft/class_3701; field_16304 ocelot -c net/minecraft/class_1438 net/minecraft/entity/passive/MooshroomEntity - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1438; method_6495 func_241840_a - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20253 func_213442_a - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20665 func_223318_c - m (Lnet/minecraft/class_1438;)Lnet/minecraft/class_1438$class_4053; method_18434 func_213445_a - m (Lnet/minecraft/class_1438$class_4053;)V method_18433 setMooshroomType - m ()Lnet/minecraft/class_1438$class_4053; method_18435 getMooshroomType - m (Lnet/minecraft/class_1799;)Ljava/util/Optional; method_18436 getStewEffect - f I field_18107 effectDuration - f Ljava/util/UUID; field_18108 lightningUUID - f Lnet/minecraft/class_1291; field_18106 hasStewEffect - f Lnet/minecraft/class_2940; field_18105 MOOSHROOM_TYPE -c net/minecraft/class_1438$class_4053 net/minecraft/entity/passive/MooshroomEntity$Type - m (Ljava/lang/String;)Lnet/minecraft/class_1438$class_4053; method_18439 func_221096_a - m (Ljava/lang/String;)Lnet/minecraft/class_1438$class_4053; method_18441 getTypeByName - m ()[Lnet/minecraft/class_1438$class_4053; values values - m (Lnet/minecraft/class_1438$class_4053;)Ljava/lang/String; method_18438 func_221095_a - m (Lnet/minecraft/class_1438$class_4053;)Lnet/minecraft/class_2680; method_18440 func_221094_b - m (Ljava/lang/String;)Lnet/minecraft/class_1438$class_4053; valueOf valueOf - m ()Lnet/minecraft/class_2680; method_18437 getRenderState - f Lnet/minecraft/class_1438$class_4053; field_18110 BROWN - f [Lnet/minecraft/class_1438$class_4053; field_18113 $VALUES - f Ljava/lang/String; field_18111 name - f Lnet/minecraft/class_2680; field_18112 renderState - f Lnet/minecraft/class_1438$class_4053; field_18109 RED -c net/minecraft/class_1453 net/minecraft/entity/passive/ParrotEntity - m ()Z method_6581 isFlying - m ()Z method_6582 isPartying - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20667 func_223317_c - m (Lnet/minecraft/class_1937;Ljava/util/Random;)Lnet/minecraft/class_3414; method_6583 func_234212_a_ - m ()Lnet/minecraft/class_5132$class_5133; method_26889 func_234213_eS_ - m ()V method_6578 calculateFlapping - m (Ljava/util/HashMap;)V method_6579 func_200609_a - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;)Z method_6587 playMimicSound - m ()I method_6584 getVariant - m (Ljava/util/Random;)F method_6580 getPitch - m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_3414; method_6586 getMimicSound - m ()Ljava/util/Map; method_6588 access$000 - m (I)V method_6585 setVariant - f F field_6824 flapping - f Lnet/minecraft/class_2338; field_6820 jukeboxPosition - f Lnet/minecraft/class_1792; field_6828 DEADLY_ITEM - f F field_6829 oFlap - f F field_6827 oFlapSpeed - f Ljava/util/Map; field_6822 IMITATION_SOUND_EVENTS - f Z field_6823 partyParrot - f Ljava/util/function/Predicate; field_6821 CAN_MIMIC - f F field_6819 flapSpeed - f Lnet/minecraft/class_2940; field_6826 VARIANT - f F field_6818 flap - f Ljava/util/Set; field_6825 TAME_ITEMS -c net/minecraft/class_1453$1 net/minecraft/entity/passive/ParrotEntity$1 - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_1308;)Z method_6590 test -c net/minecraft/class_1440 net/minecraft/entity/passive/PandaEntity - m (IZ)V method_6557 setPandaFlag - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6506 func_234208_h_ - m ()Z method_6524 func_213566_eo - m ()Lnet/minecraft/class_1440$class_1443; method_6554 func_213590_ei - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6542 func_213543_j - m (Lnet/minecraft/class_1799;)Z method_16106 isBreedingItemOrCake - m (F)F method_6534 func_213561_v - m ()Lnet/minecraft/class_5132$class_5133; method_26888 func_234204_eW_ - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6551 func_213573_a - m (Z)V method_6513 func_213553_r - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6559 func_213570_c - m (Lnet/minecraft/class_1440;)Z method_6530 func_234211_p_ - m ()Z method_6509 isWorried - m (Lnet/minecraft/class_1440;)Lnet/minecraft/class_1440$class_4056; method_24215 func_234205_f_ - m (I)V method_6558 setEatCounter - m (I)V method_6517 setUnhappyCounter - m ()V method_6523 func_213550_ex - m (Z)V method_6541 func_213576_v - m ()V method_6548 func_213577_ez - m (Z)V method_6552 func_213534_t - m ()Ljava/util/function/Predicate; method_6540 func_234207_fh_ - m ()Z method_18442 canPerformAction - m (Lnet/minecraft/class_1440;Lnet/minecraft/class_1440;)V method_6515 getGenesForChildFromParents - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6518 func_229971_m_ - m ()V method_6536 func_213546_et - m ()Z method_6514 func_213567_dY - m (Lnet/minecraft/class_1440$class_1443;)V method_6529 setMainGene - m ()V method_6544 func_213574_ev - m ()Lnet/minecraft/class_1440$class_1443; method_6525 getMainGene - m ()Z method_6545 func_213539_dW - m (Lnet/minecraft/class_1440;)V method_18058 func_234209_i_ - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6531 func_226522_h_ - m ()Z method_6522 isPlayful - m ()Z method_6550 isWeak - m ()I method_6528 getEatCounter - m ()Lnet/minecraft/class_4051; method_24216 func_234206_fg_ - m ()V method_6538 setAttributes - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6511 func_213551_k - m ()V method_18057 tryToSit - m (Z)V method_6505 func_213542_s - m ()I method_6521 getUnhappyCounter - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6556 func_213540_b - m (Lnet/minecraft/class_1440;)Z method_6553 func_229973_o_ - m ()Z method_6526 func_213564_eh - m (Lnet/minecraft/class_1542;)Z method_6504 func_213575_b - m ()Z method_6549 isLazy - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6507 func_234203_e_ - m ()V method_6503 func_213563_ew - m ()Lnet/minecraft/class_1440$class_1443; method_6519 getOneOfGenesRandomly - m (I)V method_6539 setSneezeCounter - m (Z)V method_6546 func_213581_u - m ()V method_6537 func_213535_ey - m (Lnet/minecraft/class_1440;)Z method_24838 func_234202_a_ - m (F)F method_6555 func_213583_w - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6520 func_229970_l_ - m ()I method_6532 getSneezeCounter - m ()Z method_6527 func_213578_dZ - m (I)Z method_6533 getPandaFlag - m (Lnet/minecraft/class_1440;)Ljava/util/Random; method_6516 func_234210_n_ - m (Lnet/minecraft/class_1440$class_1443;)V method_6547 setHiddenGene - m (F)F method_6560 func_213591_x - m ()V method_6512 func_213533_eu - m ()Lnet/minecraft/class_1440$class_1443; method_6508 getHiddenGene - m ()Z method_6535 func_213556_dX - f Ljava/util/function/Predicate; field_6765 PANDA_ITEMS - f Lnet/minecraft/class_2940; field_6780 EAT_COUNTER - f Lnet/minecraft/class_2940; field_6764 UNHAPPY_COUNTER - f Lnet/minecraft/class_2940; field_6781 HIDDEN_GENE - f F field_6777 sitAmount - f F field_6775 onBackAmountO - f F field_6779 sitAmountO - f Z field_6770 didBite - f Lnet/minecraft/class_4051; field_21803 BREED_TARGETING - f I field_6767 rollCounter - f F field_6773 rollAmountO - f Z field_6769 gotBamboo - f Lnet/minecraft/class_2940; field_6771 SNEEZE_COUNTER - f Lnet/minecraft/class_2940; field_6768 PANDA_FLAGS - f Lnet/minecraft/class_2940; field_6766 MAIN_GENE - f Lnet/minecraft/class_1440$class_4056; field_21804 watchGoal - f F field_6774 onBackAmount - f Lnet/minecraft/class_243; field_18277 rollDelta - f F field_6772 rollAmount -c net/minecraft/class_1440$class_1450 net/minecraft/entity/passive/PandaEntity$ChildPlayGoal - f Lnet/minecraft/class_1440; field_6806 panda -c net/minecraft/class_1440$class_1448 net/minecraft/entity/passive/PandaEntity$RollGoal - f Lnet/minecraft/class_1440; field_6803 panda -c net/minecraft/class_1440$class_1449 net/minecraft/entity/passive/PandaEntity$SitGoal - f I field_6804 field_220832_b - f Lnet/minecraft/class_1440; field_6805 field_220831_a -c net/minecraft/class_1440$class_1443 net/minecraft/entity/passive/PandaEntity$Gene - m ()Z method_6568 func_221107_c - m (Ljava/lang/String;)Lnet/minecraft/class_1440$class_1443; valueOf valueOf - m ()Ljava/lang/String; method_6565 getName - m (Lnet/minecraft/class_1440$class_1443;Lnet/minecraft/class_1440$class_1443;)Lnet/minecraft/class_1440$class_1443; method_6569 func_221101_b - m (Lnet/minecraft/class_1440$class_1443;Lnet/minecraft/class_1440$class_1443;)Lnet/minecraft/class_1440$class_1443; method_6570 func_221103_a - m (Ljava/lang/String;)Lnet/minecraft/class_1440$class_1443; method_6567 byName - m (Ljava/util/Random;)Lnet/minecraft/class_1440$class_1443; method_17688 getRandomType - m (I)[Lnet/minecraft/class_1440$class_1443; method_6563 func_221102_b - m ()[Lnet/minecraft/class_1440$class_1443; values values - m (I)Lnet/minecraft/class_1440$class_1443; method_6566 byIndex - m ()I method_6564 getIndex - f Lnet/minecraft/class_1440$class_1443; field_6791 PLAYFUL - f Ljava/lang/String; field_6797 name - f Lnet/minecraft/class_1440$class_1443; field_6795 WORRIED - f [Lnet/minecraft/class_1440$class_1443; field_6786 field_221109_h - f Lnet/minecraft/class_1440$class_1443; field_6794 LAZY - f Lnet/minecraft/class_1440$class_1443; field_6789 AGGRESSIVE - f Lnet/minecraft/class_1440$class_1443; field_6793 WEAK - f Lnet/minecraft/class_1440$class_1443; field_6792 BROWN - f [Lnet/minecraft/class_1440$class_1443; field_6796 $VALUES - f I field_6785 index - f Lnet/minecraft/class_1440$class_1443; field_6788 NORMAL - f Z field_6790 field_221112_k -c net/minecraft/class_1440$class_1442 net/minecraft/entity/passive/PandaEntity$MateGoal - m ()Z method_6561 func_220691_h - f Lnet/minecraft/class_1440; field_6784 panda - f Lnet/minecraft/class_1440; field_21805 field_229974_d_ - f I field_6783 field_220694_f -c net/minecraft/class_1440$class_1444 net/minecraft/entity/passive/PandaEntity$RevengeGoal - f Lnet/minecraft/class_1440; field_6798 panda -c net/minecraft/class_1440$class_4054 net/minecraft/entity/passive/PandaEntity$AttackGoal - f Lnet/minecraft/class_1440; field_18114 panda -c net/minecraft/class_1440$class_1441 net/minecraft/entity/passive/PandaEntity$AvoidGoal - f Lnet/minecraft/class_1440; field_6782 panda -c net/minecraft/class_1440$class_1446 net/minecraft/entity/passive/PandaEntity$MoveHelperController - f Lnet/minecraft/class_1440; field_6801 panda -c net/minecraft/class_1440$class_1447 net/minecraft/entity/passive/PandaEntity$PanicGoal - f Lnet/minecraft/class_1440; field_6802 panda -c net/minecraft/class_1440$class_1445 net/minecraft/entity/passive/PandaEntity$LieBackGoal - f Lnet/minecraft/class_1440; field_6800 panda - f I field_6799 field_220829_b -c net/minecraft/class_1440$class_4056 net/minecraft/entity/passive/PandaEntity$WatchGoal - m (Lnet/minecraft/class_1309;)V method_24217 func_229975_a_ - f Lnet/minecraft/class_1440; field_18116 field_220718_f -c net/minecraft/class_1456 net/minecraft/entity/passive/PolarBearEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26891 func_234219_eI_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20668 func_223320_c - m (F)F method_6601 getStandingAnimationScale - m ()V method_6602 playWarningSound - m (Z)V method_6603 setStanding - m ()Z method_6600 isStanding - f Lnet/minecraft/class_4801; field_25369 field_234217_by_ - f F field_6838 clientSideStandAnimation0 - f F field_6837 clientSideStandAnimation - f Ljava/util/UUID; field_25368 field_234216_bA_ - f I field_6839 warningSoundTicks - f Lnet/minecraft/class_2940; field_6840 IS_STANDING - f I field_25370 field_234218_bz_ -c net/minecraft/class_1456$class_1457 net/minecraft/entity/passive/PolarBearEntity$AttackPlayerGoal - f Lnet/minecraft/class_1456; field_6841 field_190107_i -c net/minecraft/class_1456$class_1459 net/minecraft/entity/passive/PolarBearEntity$HurtByTargetGoal - f Lnet/minecraft/class_1456; field_6843 field_190106_a -c net/minecraft/class_1456$class_1460 net/minecraft/entity/passive/PolarBearEntity$MeleeAttackGoal - f Lnet/minecraft/class_1456; field_6844 field_190103_h -c net/minecraft/class_1456$class_1461 net/minecraft/entity/passive/PolarBearEntity$PanicGoal - f Lnet/minecraft/class_1456; field_6845 field_190104_b -c net/minecraft/class_1452 net/minecraft/entity/passive/PigEntity - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1452; method_6574 func_241840_a - m ()Lnet/minecraft/class_5132$class_5133; method_26890 func_234215_eI_ - f Lnet/minecraft/class_1856; field_6817 TEMPTATION_ITEMS - f Lnet/minecraft/class_2940; field_6815 BOOST_TIME - f Lnet/minecraft/class_4980; field_23230 field_234214_bx_ - f Lnet/minecraft/class_2940; field_6816 SADDLED -c net/minecraft/class_1463 net/minecraft/entity/passive/RabbitEntity - m ()I method_6610 getRabbitType - m (F)F method_6605 getJumpCompletion - m ()V method_6618 startJumping - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1463; method_6620 func_241840_a - m ()Lnet/minecraft/class_5132$class_5133; method_26892 func_234224_eJ_ - m ()Z method_6607 isCarrotEaten - m (Lnet/minecraft/class_1792;)Z method_6614 isRabbitBreedingItem - m (I)V method_6617 setRabbitType - m (Lnet/minecraft/class_1936;)I method_6622 getRandomRabbitType - m ()V method_6621 disableJumpControl - m ()V method_6608 updateMoveTypeDuration - m (D)V method_6606 setMovementSpeed - m (Lnet/minecraft/class_1463;)Z method_24839 access$000 - m ()V method_6619 checkLandingDelay - m ()Lnet/minecraft/class_3414; method_6615 getJumpSound - m ()V method_6611 enableJumpControl - m (Lnet/minecraft/class_1463;)Z method_6612 func_234223_d_ - m (Lnet/minecraft/class_1463;)Z method_6609 func_234221_b_ - m (Lnet/minecraft/class_1463;I)I method_6613 func_234220_a_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20669 func_223321_c - m (DD)V method_6616 calculateRotationYaw - m (Lnet/minecraft/class_1463;)Lnet/minecraft/class_1334; method_6604 func_234222_c_ - f I field_6851 jumpTicks - f I field_6849 jumpDuration - f Lnet/minecraft/class_2960; field_6846 KILLER_BUNNY - f Lnet/minecraft/class_2940; field_6852 RABBIT_TYPE - f I field_6848 currentMoveTypeDuration - f I field_6847 carrotTicks - f Z field_6850 wasOnGround -c net/minecraft/class_1463$class_1470 net/minecraft/entity/passive/RabbitEntity$RaidFarmGoal - f Z field_6861 canRaid - f Lnet/minecraft/class_1463; field_6863 rabbit - f Z field_6862 wantsToRaid -c net/minecraft/class_1463$class_1468 net/minecraft/entity/passive/RabbitEntity$MoveHelperController - f D field_6858 nextJumpSpeed - f Lnet/minecraft/class_1463; field_6859 rabbit -c net/minecraft/class_1463$class_1469 net/minecraft/entity/passive/RabbitEntity$PanicGoal - f Lnet/minecraft/class_1463; field_6860 rabbit -c net/minecraft/class_1463$class_1466 net/minecraft/entity/passive/RabbitEntity$RabbitData - f I field_6854 typeData -c net/minecraft/class_1463$class_5197 net/minecraft/entity/passive/RabbitEntity$JumpHelperController - m ()Z method_27312 getIsJumping - m ()Z method_27313 canJump - m (Z)V method_27311 setCanJump - f Lnet/minecraft/class_1463; field_24089 field_180069_b - f Lnet/minecraft/class_1463; field_24090 rabbit - f Z field_24091 canJump -c net/minecraft/class_1463$class_1464 net/minecraft/entity/passive/RabbitEntity$EvilAttackGoal -c net/minecraft/class_1463$class_1465 net/minecraft/entity/passive/RabbitEntity$AvoidEntityGoal - f Lnet/minecraft/class_1463; field_6853 rabbit -c net/minecraft/class_1454 net/minecraft/entity/passive/fish/PufferfishEntity - m ()Ljava/util/function/Predicate; method_6599 func_205720_dI - m (Lnet/minecraft/class_1308;)V method_6593 attack - m (Lnet/minecraft/class_1309;)Z method_6591 func_210139_f - m (I)F method_6592 getPuffSize - m ()I method_6594 getPuffState - m (Lnet/minecraft/class_1454;I)I method_6597 access$102 - m (I)V method_6596 setPuffState - m (Lnet/minecraft/class_1454;I)I method_6598 func_205721_b - f Lnet/minecraft/class_2940; field_6835 PUFF_STATE - f I field_6832 deflateTimer - f I field_6833 puffTimer - f Ljava/util/function/Predicate; field_6834 ENEMY_MATCHER -c net/minecraft/class_1454$class_1455 net/minecraft/entity/passive/fish/PufferfishEntity$PuffGoal - f Lnet/minecraft/class_1454; field_6836 fish -c net/minecraft/class_1472 net/minecraft/entity/passive/SheepEntity - m (Lnet/minecraft/class_1767;Lnet/minecraft/class_1767;)Lnet/minecraft/class_1767; method_17691 func_213615_b - m (F)F method_6628 getHeadRotationPointY - m (Lnet/minecraft/class_1767;)[F method_6630 createSheepColor - m (Z)V method_6635 setSheared - m (Lnet/minecraft/class_1767;)[F method_6634 getDyeRgb - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1472; method_6640 func_241840_a - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20254 func_213613_a - m ()Z method_6629 getSheared - m ()Lnet/minecraft/class_5132$class_5133; method_26893 func_234225_eI_ - m (Lnet/minecraft/class_1429;Lnet/minecraft/class_1429;)Lnet/minecraft/class_1767; method_6639 getDyeColorMixFromParents - m (Lnet/minecraft/class_1767;)V method_6631 setFleeceColor - m (Ljava/util/Random;)Lnet/minecraft/class_1767; method_6632 getRandomSheepColor - m (Lnet/minecraft/class_1767;Lnet/minecraft/class_1767;)Lnet/minecraft/class_1715; method_17690 createDyeColorCraftingInventory - m (F)F method_6641 getHeadRotationAngleX - m (Ljava/util/EnumMap;)V method_6637 func_203402_a - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_3955;)Lnet/minecraft/class_1799; method_17689 func_213614_a - m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_1767; method_6638 func_200204_d - m ()Lnet/minecraft/class_1767; method_6633 getFleeceColor - f Ljava/util/Map; field_6868 WOOL_BY_COLOR - f Ljava/util/Map; field_6867 DYE_TO_RGB - f Lnet/minecraft/class_2940; field_6870 DYE_COLOR - f Lnet/minecraft/class_1345; field_6869 eatGrassGoal - f I field_6865 sheepTimer -c net/minecraft/class_1472$1 net/minecraft/entity/passive/SheepEntity$1 -c net/minecraft/class_1472$2 net/minecraft/entity/passive/SheepEntity$2 - f [I field_6872 field_188569_a -c net/minecraft/class_1462 net/minecraft/entity/passive/fish/SalmonEntity -c net/minecraft/class_1473 net/minecraft/entity/passive/SnowGolemEntity - m (Z)V method_6642 setPumpkinEquipped - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20255 func_213622_a - m (Lnet/minecraft/class_1309;)Z method_18443 func_213621_h - m ()Z method_6643 isPumpkinEquipped - m ()Lnet/minecraft/class_5132$class_5133; method_26894 func_234226_m_ - f Lnet/minecraft/class_2940; field_6873 PUMPKIN_EQUIPPED -c net/minecraft/class_1471 net/minecraft/entity/passive/ShoulderRidingEntity - m (Lnet/minecraft/class_3222;)Z method_6627 func_213439_d - m ()Z method_6626 canSitOnShoulder - f I field_6864 rideCooldownCounter -c net/minecraft/class_1474 net/minecraft/entity/passive/fish/TropicalFishEntity - m (I)I method_6648 getPatternColor - m (I)Ljava/lang/String; method_6649 func_212324_b - m (I)I method_6653 getBodyColor - m (I)Lnet/minecraft/class_1767; method_6652 func_212326_d - m ()Lnet/minecraft/class_2960; method_6650 getBodyTexture - m (Lnet/minecraft/class_1474$class_1475;Lnet/minecraft/class_1767;Lnet/minecraft/class_1767;)I method_6647 pack - m (I)I method_6656 func_212325_s - m (I)Ljava/lang/String; method_6657 func_212327_q - m ()I method_6644 getVariant - m ()Lnet/minecraft/class_2960; method_6646 getPatternTexture - m (I)Lnet/minecraft/class_1767; method_6651 func_212323_p - m (I)V method_6659 setVariant - m (I)I method_6645 getPattern - m ()[F method_6658 func_204219_dC - m ()[F method_6655 func_204222_dD - m ()I method_6654 getSize - f [Lnet/minecraft/class_2960; field_6876 PATTERN_TEXTURES_B - f [I field_6879 SPECIAL_VARIANTS - f [Lnet/minecraft/class_2960; field_6878 PATTERN_TEXTURES_A - f [Lnet/minecraft/class_2960; field_6875 BODY_TEXTURES - f Z field_6877 field_204228_bA - f Lnet/minecraft/class_2940; field_6874 VARIANT -c net/minecraft/class_1474$class_1475 net/minecraft/entity/passive/fish/TropicalFishEntity$Type - m ()Ljava/lang/String; method_6661 func_212549_c - m ()I method_6663 func_212551_b - m ()[Lnet/minecraft/class_1474$class_1475; values values - m (II)Ljava/lang/String; method_6660 func_212548_a - m ()I method_6662 func_212550_a - m (Ljava/lang/String;)Lnet/minecraft/class_1474$class_1475; valueOf valueOf - f Lnet/minecraft/class_1474$class_1475; field_6890 DASHER - f Lnet/minecraft/class_1474$class_1475; field_6882 SNOOPER - f Lnet/minecraft/class_1474$class_1475; field_6880 SUNSTREAK - f Lnet/minecraft/class_1474$class_1475; field_6889 CLAYFISH - f Lnet/minecraft/class_1474$class_1475; field_6881 KOB - f Lnet/minecraft/class_1474$class_1475; field_6888 BETTY - f [Lnet/minecraft/class_1474$class_1475; field_6886 $VALUES - f [Lnet/minecraft/class_1474$class_1475; field_6885 field_212554_o - f I field_6894 field_212553_n - f Lnet/minecraft/class_1474$class_1475; field_6884 BLOCKFISH - f Lnet/minecraft/class_1474$class_1475; field_6883 GLITTER - f I field_6895 field_212552_m - f Lnet/minecraft/class_1474$class_1475; field_6887 STRIPEY - f Lnet/minecraft/class_1474$class_1475; field_6893 FLOPPER - f Lnet/minecraft/class_1474$class_1475; field_6892 SPOTTY - f Lnet/minecraft/class_1474$class_1475; field_6891 BRINELY -c net/minecraft/class_1474$class_1476 net/minecraft/entity/passive/fish/TropicalFishEntity$TropicalFishData - m (Lnet/minecraft/class_1474$class_1476;)I method_6666 access$300 - m (Lnet/minecraft/class_1474$class_1476;)I method_6667 access$200 - m (Lnet/minecraft/class_1474$class_1476;)I method_6664 access$100 - m (Lnet/minecraft/class_1474$class_1476;)I method_6665 access$000 - f I field_6896 patternColor - f I field_6897 bodyColor - f I field_6898 pattern - f I field_6899 size -c net/minecraft/class_1474$1 net/minecraft/entity/passive/fish/TropicalFishEntity$1 -c net/minecraft/class_1477 net/minecraft/entity/passive/SquidEntity - m (Lnet/minecraft/class_1477;)Z method_6668 access$100 - m (FFF)V method_6670 setMovementVector - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20670 func_223365_b - m ()Lnet/minecraft/class_5132$class_5133; method_26895 func_234227_m_ - m ()V method_6669 squirtInk - m ()Z method_6672 hasMovementVector - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_6671 func_207400_b - f F field_6913 rotateSpeed - f F field_6910 randomMotionVecX - f F field_6911 randomMotionVecY - f F field_6909 randomMotionVecZ - f F field_6903 squidYaw - f F field_6906 prevSquidYaw - f F field_6908 squidRotation - f F field_6902 prevSquidRotation - f F field_6905 prevSquidPitch - f F field_6904 tentacleAngle - f F field_6907 squidPitch - f F field_6900 lastTentacleAngle - f F field_6901 randomMotionSpeed - f F field_6912 rotationVelocity -c net/minecraft/class_1477$class_1479 net/minecraft/entity/passive/SquidEntity$MoveRandomGoal - f Lnet/minecraft/class_1477; field_6916 field_203126_a - f Lnet/minecraft/class_1477; field_6917 squid -c net/minecraft/class_1477$class_1478 net/minecraft/entity/passive/SquidEntity$FleeGoal - f Lnet/minecraft/class_1477; field_6914 field_203124_a - f I field_6915 tickCounter -c net/minecraft/class_1477$1 net/minecraft/entity/passive/SquidEntity$1 -c net/minecraft/class_1480 net/minecraft/entity/passive/WaterMobEntity - m (I)V method_6673 updateAir -c net/minecraft/class_1481 net/minecraft/entity/passive/TurtleEntity - m (Z)V method_6697 setGoingHome - m (Z)V method_6676 setDigging - m (Lnet/minecraft/class_1481;)Z method_24840 access$1300 - m ()Z method_6679 hasEgg - m (Z)V method_6680 setHasEgg - m (Lnet/minecraft/class_1481;)Ljava/util/Random; method_6677 access$1200 - m (Lnet/minecraft/class_1481;)Z method_6686 func_234229_i_ - m ()Z method_6695 isDigging - m ()Lnet/minecraft/class_2338; method_6693 getHome - m (Lnet/minecraft/class_1309;)Z method_6688 func_213616_h - m ()Lnet/minecraft/class_2338; method_6687 getTravelPos - m (Z)V method_6696 setTravelling - m ()Lnet/minecraft/class_5132$class_5133; method_26896 func_234228_eK_ - m (Lnet/minecraft/class_1481;)Ljava/util/Random; method_6685 access$300 - m (Lnet/minecraft/class_1481;Lnet/minecraft/class_2338;)V method_6682 access$400 - m (Lnet/minecraft/class_1481;Z)V method_6689 access$500 - m (Lnet/minecraft/class_1481;Z)V method_6694 access$800 - m (Lnet/minecraft/class_1481;Z)V method_6698 access$900 - m ()Z method_6684 isGoingHome - m (Lnet/minecraft/class_2338;)V method_6683 setHome - m (Lnet/minecraft/class_1481;)Lnet/minecraft/class_2338; method_6675 access$600 - m ()Z method_6691 isTravelling - m (Lnet/minecraft/class_1481;)Lnet/minecraft/class_2338; method_6692 access$700 - m (Lnet/minecraft/class_1481;Z)V method_6690 access$1100 - m (Lnet/minecraft/class_2338;)V method_6699 setTravelPos - m (Lnet/minecraft/class_1481;)Z method_6681 access$200 - m (Lnet/minecraft/class_1481;)I method_6674 access$1000 - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20671 func_223322_c - m (Lnet/minecraft/class_1481;)I method_6678 access$1008 - f Lnet/minecraft/class_2940; field_6922 TRAVEL_POS - f Lnet/minecraft/class_2940; field_6923 IS_DIGGING - f Lnet/minecraft/class_2940; field_6924 GOING_HOME - f Lnet/minecraft/class_2940; field_6925 TRAVELLING - f Ljava/util/function/Predicate; field_6921 TARGET_DRY_BABY - f Lnet/minecraft/class_2940; field_6920 HOME_POS - f Lnet/minecraft/class_2940; field_6919 HAS_EGG - f I field_6918 isDigging -c net/minecraft/class_1481$class_1482 net/minecraft/entity/passive/TurtleEntity$MateGoal - f Lnet/minecraft/class_1481; field_6926 turtle -c net/minecraft/class_1481$class_1485 net/minecraft/entity/passive/TurtleEntity$LayEggGoal - f Lnet/minecraft/class_1481; field_6932 turtle -c net/minecraft/class_1481$class_1486 net/minecraft/entity/passive/TurtleEntity$MoveHelperController - m ()V method_6700 updateSpeed - f Lnet/minecraft/class_1481; field_6933 turtle -c net/minecraft/class_1481$class_1483 net/minecraft/entity/passive/TurtleEntity$GoHomeGoal - f Z field_6929 field_203129_c - f I field_6928 field_203130_d - f D field_6927 speed - f Lnet/minecraft/class_1481; field_6930 turtle -c net/minecraft/class_1481$class_1484 net/minecraft/entity/passive/TurtleEntity$GoToWaterGoal - f Lnet/minecraft/class_1481; field_6931 turtle -c net/minecraft/class_1481$class_1489 net/minecraft/entity/passive/TurtleEntity$WanderGoal - f Lnet/minecraft/class_1481; field_6934 turtle -c net/minecraft/class_1481$class_1490 net/minecraft/entity/passive/TurtleEntity$PlayerTemptGoal - m (Lnet/minecraft/class_1799;)Z method_6701 isTemptedBy - f Lnet/minecraft/class_4051; field_18117 field_220834_a - f I field_6936 cooldown - f Lnet/minecraft/class_1481; field_6938 turtle - f D field_6935 speed - f Lnet/minecraft/class_1657; field_6939 tempter - f Ljava/util/Set; field_6937 temptItems -c net/minecraft/class_1481$class_1487 net/minecraft/entity/passive/TurtleEntity$PanicGoal -c net/minecraft/class_1481$class_1488 net/minecraft/entity/passive/TurtleEntity$Navigator -c net/minecraft/class_1481$class_1491 net/minecraft/entity/passive/TurtleEntity$TravelGoal - f D field_6940 speed - f Lnet/minecraft/class_1481; field_6942 turtle - f Z field_6941 field_203139_c -c net/minecraft/class_1481$1 net/minecraft/entity/passive/TurtleEntity$1 -c net/minecraft/class_1492 net/minecraft/entity/passive/horse/AbstractChestedHorseEntity - m ()I method_6702 getInventoryColumns - m ()Lnet/minecraft/class_5132$class_5133; method_26898 func_234234_eJ_ - m ()Z method_6703 hasChest - m ()V method_6705 playChestEquipSound - m (Z)V method_6704 setChested - f Lnet/minecraft/class_2940; field_6943 DATA_ID_CHEST -c net/minecraft/class_1493 net/minecraft/entity/passive/WolfEntity - m ()V method_31167 func_242326_eZ - m ()Lnet/minecraft/class_5132$class_5133; method_26897 func_234233_eS_ - m ()Z method_6710 isBegging - m (Lnet/minecraft/class_1493;)Ljava/util/Random; method_6716 access$000 - m (Lnet/minecraft/class_1309;)Z method_18444 func_213440_i - m (F)F method_6707 getShadingWhileWet - m (F)F method_6719 getInterestedAngle - m ()Z method_6711 isWolfWet - m ()Lnet/minecraft/class_1767; method_6713 getCollarColor - m (Z)V method_6712 setBegging - m (FF)F method_6715 getShakeAngle - m ()F method_6714 getTailRotation - m (Lnet/minecraft/class_1767;)V method_6708 setCollarColor - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1493; method_6717 func_241840_a - f Lnet/minecraft/class_2940; field_6946 BEGGING - f Lnet/minecraft/class_2940; field_6950 COLLAR_COLOR - f Lnet/minecraft/class_2940; field_25373 field_234232_bz_ - f F field_6945 prevTimeWolfIsShaking - f Lnet/minecraft/class_4801; field_25371 field_234230_bG_ - f Z field_6944 isWet - f Ljava/util/function/Predicate; field_18004 TARGET_ENTITIES - f Z field_6951 isShaking - f F field_6952 headRotationCourse - f F field_6949 headRotationCourseOld - f Ljava/util/UUID; field_25372 field_234231_bH_ - f F field_6947 timeWolfIsShaking -c net/minecraft/class_1493$class_1494 net/minecraft/entity/passive/WolfEntity$AvoidEntityGoal - m (Lnet/minecraft/class_1501;)Z method_6720 avoidLlama - f Lnet/minecraft/class_1493; field_6953 field_190855_c - f Lnet/minecraft/class_1493; field_6954 wolf -c net/minecraft/class_1495 net/minecraft/entity/passive/horse/DonkeyEntity -c net/minecraft/class_1496 net/minecraft/entity/passive/horse/AbstractHorseEntity - m (Lnet/minecraft/class_1799;)Z method_6773 isArmor - m ()Z method_6735 func_230276_fq_ - m (Lnet/minecraft/class_1296;Lnet/minecraft/class_1496;)V method_6743 setOffspringAttributes - m ()D method_6771 getHorseJumpStrength - m ()V method_6748 makeHorseRear - m (F)F method_6772 getMouthOpennessAngle - m ()Z method_6744 isBreeding - m ()V method_6738 openHorseMouth - m ()Z method_6734 canMate - m (F)F method_6739 getGrassEatingAmount - m ()F method_6754 getModifiedMaxHealth - m ()I method_6750 getInventorySize - m ()D method_6728 getModifiedMovementSpeed - m ()Lnet/minecraft/class_5132$class_5133; method_26899 func_234237_fg_ - m ()Z method_6762 canEatGrass - m ()V method_6733 eatingHorse - m ()V method_6723 playJumpSound - m (Lnet/minecraft/class_2498;)V method_6761 playGallopSound - m ()V method_6721 initHorseChest - m ()Z method_6727 isTame - m (I)Z method_6730 getHorseWatchableBoolean - m (Z)V method_6760 spawnHorseParticles - m ()Z method_6763 isHorseJumping - m ()I method_6755 getMaxTemper - m (IZ)V method_6769 setHorseWatchableBoolean - m (Z)V method_6740 setEatingHaystack - m ()Lnet/minecraft/class_3414; method_28368 func_230274_fe_ - m (Ljava/util/UUID;)V method_6732 setOwnerUniqueId - m (Z)V method_6758 setHorseJumping - m (I)I method_6745 increaseTemper - m ()I method_6729 getTemper - m ()Z method_6753 func_230277_fr_ - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1269; method_30009 func_241395_b_ - m ()V method_6764 initExtraAI - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Z method_6742 handleEating - m ()Z method_6736 isRearing - m (Lnet/minecraft/class_1657;)V method_6722 openGUI - m ()Ljava/util/UUID; method_6768 getOwnerUniqueId - m (Lnet/minecraft/class_1657;)V method_6726 mountTo - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1309;)Lnet/minecraft/class_243; method_27930 func_234236_a_ - m (Z)V method_6766 setHorseTamed - m ()D method_6774 getModifiedJumpStrength - m ()V method_6746 followMother - m ()V method_6001 func_230273_eI_ - m ()V method_6757 makeMad - m ()V method_6759 moveTail - m (Lnet/minecraft/class_1657;)Z method_6752 setTamedBy - m (Lnet/minecraft/class_1309;)Z method_6741 func_213617_h - m (Z)V method_6737 setRearing - m (I)V method_6749 setTemper - m ()V method_6731 func_230275_fc_ - m (Z)V method_6751 setBreeding - m ()Z method_6724 isEatingHaystack - m ()Lnet/minecraft/class_3414; method_6747 getAngrySound - m (F)F method_6767 getRearingAmount - f Lnet/minecraft/class_4051; field_18118 MOMMY_TARGETING - f F field_6976 jumpPower - f F field_6965 mouthOpenness - f I field_6975 gallopTime - f Lnet/minecraft/class_1277; field_6962 horseChest - f I field_6973 openMouthCounter - f I field_6957 tailCounter - f F field_6966 prevHeadLean - f Lnet/minecraft/class_2940; field_6972 OWNER_UNIQUE_ID - f Z field_6964 canGallop - f F field_6963 prevRearingAmount - f I field_6955 temper - f F field_6961 prevMouthOpenness - f Z field_6960 allowStandSliding - f Z field_6968 horseJumping - f Ljava/util/function/Predicate; field_6956 IS_HORSE_BREEDING - f I field_6970 jumpRearingCounter - f F field_6969 headLean - f I field_6958 sprintCounter - f Lnet/minecraft/class_2940; field_6959 STATUS - f F field_6967 rearingAmount - f Lnet/minecraft/class_1856; field_25374 field_234235_bE_ - f I field_6971 eatingCounter -c net/minecraft/class_1498 net/minecraft/entity/passive/horse/HorseEntity - m (Lnet/minecraft/class_1799;)V method_6790 func_213804_l - m ()Lnet/minecraft/class_1799; method_6786 func_213803_dV - m (Lnet/minecraft/class_5149;Lnet/minecraft/class_5148;)V method_27076 func_234238_a_ - m ()I method_6788 func_234241_eS_ - m ()Lnet/minecraft/class_5149; method_27077 func_234239_eK_ - m ()Lnet/minecraft/class_5148; method_27078 func_234240_eM_ - m (I)V method_6783 func_234242_w_ - m (Lnet/minecraft/class_1799;)V method_18445 func_213805_k - f Lnet/minecraft/class_2940; field_6990 HORSE_VARIANT - f Ljava/util/UUID; field_6985 ARMOR_MODIFIER_UUID -c net/minecraft/class_1498$class_1499 net/minecraft/entity/passive/horse/HorseEntity$HorseData - f Lnet/minecraft/class_5149; field_6994 variant -c net/minecraft/class_5148 net/minecraft/entity/passive/horse/CoatTypes - m ()I method_27079 getId - m (Ljava/lang/String;)Lnet/minecraft/class_5148; valueOf valueOf - m (I)[Lnet/minecraft/class_5148; method_27081 func_234249_b_ - m (I)Lnet/minecraft/class_5148; method_27080 func_234248_a_ - m ()[Lnet/minecraft/class_5148; values values - f Lnet/minecraft/class_5148; field_23812 BLACK_DOTS - f [Lnet/minecraft/class_5148; field_23815 $VALUES - f [Lnet/minecraft/class_5148; field_23813 VALUES - f Lnet/minecraft/class_5148; field_23808 NONE - f Lnet/minecraft/class_5148; field_23810 WHITE_FIELD - f I field_23814 id - f Lnet/minecraft/class_5148; field_23809 WHITE - f Lnet/minecraft/class_5148; field_23811 WHITE_DOTS -c net/minecraft/class_1501 net/minecraft/entity/passive/horse/LlamaEntity - m (I)V method_6802 setStrength - m ()I method_6803 getStrength - m (Lnet/minecraft/class_1501;)Z method_6801 access$100 - m (I)V method_6798 setVariant - m ()I method_6809 getVariant - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1501; method_6804 func_241840_a - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1767; method_6794 getCarpetColor - m ()V method_6797 leaveCaravan - m ()Lnet/minecraft/class_1501; method_18004 createChild - m (Z)V method_6808 setDidSpit - m ()Z method_6793 hasCaravanTrail - m ()Lnet/minecraft/class_5132$class_5133; method_26900 func_234244_fu_ - m ()Z method_6805 inCaravan - m ()V method_6796 setRandomStrength - m ()Lnet/minecraft/class_1767; method_6800 getColor - m ()Z method_6807 isTraderLlama - m (Lnet/minecraft/class_1767;)V method_6799 setColor - m ()Lnet/minecraft/class_1501; method_6806 getCaravanHead - m (Lnet/minecraft/class_1501;Z)V method_6795 access$200 - m (Lnet/minecraft/class_1309;)V method_6792 spit - m (Lnet/minecraft/class_1501;)V method_6791 joinCaravan - f Lnet/minecraft/class_2940; field_6996 DATA_VARIANT_ID - f Lnet/minecraft/class_2940; field_6998 DATA_STRENGTH_ID - f Z field_6999 didSpit - f Lnet/minecraft/class_2940; field_6995 DATA_COLOR_ID - f Lnet/minecraft/class_1856; field_25375 field_234243_bC_ - f Lnet/minecraft/class_1501; field_6997 caravanTail - f Lnet/minecraft/class_1501; field_7000 caravanHead -c net/minecraft/class_1501$class_1502 net/minecraft/entity/passive/horse/LlamaEntity$DefendTargetGoal - m (Lnet/minecraft/class_1309;)Z method_18446 func_220789_a -c net/minecraft/class_1501$class_1504 net/minecraft/entity/passive/horse/LlamaEntity$HurtByTargetGoal -c net/minecraft/class_1501$class_1503 net/minecraft/entity/passive/horse/LlamaEntity$LlamaData - f I field_7001 variant -c net/minecraft/class_1501$1 net/minecraft/entity/passive/horse/LlamaEntity$1 -c net/minecraft/class_1506 net/minecraft/entity/passive/horse/SkeletonHorseEntity - m (Z)V method_6813 setTrap - m ()Z method_6812 isTrap - m ()Lnet/minecraft/class_5132$class_5133; method_26901 func_234250_eJ_ - f Z field_7005 skeletonTrap - f Lnet/minecraft/class_1505; field_7003 skeletonTrapAI - f I field_7004 skeletonTrapTime -c net/minecraft/class_1500 net/minecraft/entity/passive/horse/MuleEntity -c net/minecraft/class_3986 net/minecraft/entity/passive/horse/TraderLlamaEntity - m ()Z method_20502 canDespawn - m ()Z method_20503 isLeashedToTrader - m ()Z method_20504 isLeashedToStranger - m ()V method_20501 tryDespawn - f I field_17716 despawnDelay -c net/minecraft/class_3986$class_3987 net/minecraft/entity/passive/horse/TraderLlamaEntity$FollowTraderGoal - f Lnet/minecraft/class_1501; field_17718 field_220800_b - f Lnet/minecraft/class_1309; field_17719 field_220801_c - f I field_17720 field_220802_d - f Lnet/minecraft/class_3986; field_17717 field_220799_a -c net/minecraft/class_1505 net/minecraft/entity/ai/goal/TriggerSkeletonTrapGoal - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_30768 func_242327_a - m (Lnet/minecraft/class_1266;)Lnet/minecraft/class_1496; method_6810 createHorse - m (Lnet/minecraft/class_1266;Lnet/minecraft/class_1496;)Lnet/minecraft/class_1613; method_6811 createSkeleton - f Lnet/minecraft/class_1506; field_7002 horse -c net/minecraft/class_1507 net/minecraft/entity/passive/horse/ZombieHorseEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26902 func_234256_eJ_ -c net/minecraft/class_5149 net/minecraft/entity/passive/horse/CoatColors - m (I)Lnet/minecraft/class_5149; method_27083 func_234254_a_ - m ()[Lnet/minecraft/class_5149; values values - m ()I method_27082 getId - m (I)[Lnet/minecraft/class_5149; method_27084 func_234255_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_5149; valueOf valueOf - f Lnet/minecraft/class_5149; field_23818 CHESTNUT - f Lnet/minecraft/class_5149; field_23817 CREAMY - f Lnet/minecraft/class_5149; field_23819 BROWN - f I field_23824 id - f [Lnet/minecraft/class_5149; field_23823 VALUES - f Lnet/minecraft/class_5149; field_23816 WHITE - f [Lnet/minecraft/class_5149; field_23825 $VALUES - f Lnet/minecraft/class_5149; field_23820 BLACK - f Lnet/minecraft/class_5149; field_23822 DARKBROWN - f Lnet/minecraft/class_5149; field_23821 GRAY -c net/minecraft/class_1508 net/minecraft/entity/boss/dragon/EnderDragonPartEntity - f Lnet/minecraft/class_4048; field_18119 field_213854_d - f Lnet/minecraft/class_1510; field_7007 dragon - f Ljava/lang/String; field_7006 field_213853_c -c net/minecraft/class_1510 net/minecraft/entity/boss/dragon/EnderDragonEntity - m (IF)[D method_6817 getMovementOffsets - m (Ljava/util/List;)V method_6825 collideWithEntities - m (Ljava/util/List;)V method_6827 attackEntitiesInList - m (Lnet/minecraft/class_1508;DDD)V method_22863 setPartPosition - m (I[D[D)F method_6823 getHeadPartYOffset - m ()Lnet/minecraft/class_2881; method_6829 getFightManager - m ()[Lnet/minecraft/class_1508; method_5690 getDragonParts - m (Lnet/minecraft/class_1511;Lnet/minecraft/class_2338;Lnet/minecraft/class_1282;)V method_6828 onCrystalDestroyed - m (Lnet/minecraft/class_1282;F)Z method_6819 attackDragonFrom - m ()Lnet/minecraft/class_5132$class_5133; method_26903 registerAttributes - m ()V method_6830 updateDragonEnderCrystal - m ()Lnet/minecraft/class_1526; method_6831 getPhaseManager - m (Lnet/minecraft/class_238;)Z method_6821 destroyBlocksInAABB - m (IILnet/minecraft/class_9;)Lnet/minecraft/class_11; method_6833 findPath - m (F)Lnet/minecraft/class_243; method_6834 getHeadLookVec - m (Lnet/minecraft/class_1508;Lnet/minecraft/class_1282;F)Z method_6816 attackEntityPartFrom - m ()I method_6818 initPathPoints - m (Lnet/minecraft/class_9;Lnet/minecraft/class_9;)Lnet/minecraft/class_11; method_6826 makePath - m (I)V method_6824 dropExperience - m (D)F method_6832 simplifyAngle - m ()F method_6820 getHeadAndNeckYOffset - m (DDD)I method_6822 getNearestPpIdx - f Lorg/apache/logging/log4j/Logger; field_7021 LOGGER - f Lnet/minecraft/class_2940; field_7013 PHASE - f Lnet/minecraft/class_1508; field_7014 dragonPartLeftWing - f Lnet/minecraft/class_1508; field_7017 dragonPartHead - f Lnet/minecraft/class_1508; field_7015 dragonPartRightWing - f I field_7029 sittingDamageReceived - f [Lnet/minecraft/class_9; field_7012 pathPoints - f [I field_7025 neighbors - f Lnet/minecraft/class_2881; field_7016 fightManager - f Z field_7027 slowed - f [[D field_7026 ringBuffer - f F field_7019 prevAnimTime - f F field_7030 animTime - f Lnet/minecraft/class_1508; field_7023 dragonPartBody - f F field_20865 field_226525_bB_ - f I field_7031 deathTicks - f Lnet/minecraft/class_1508; field_7011 dragonPartNeck - f I field_7018 growlTime - f Lnet/minecraft/class_1508; field_7022 dragonPartTail3 - f Lnet/minecraft/class_4051; field_18120 PLAYER_INVADER_CONDITION - f Lnet/minecraft/class_1508; field_7009 dragonPartTail2 - f Lnet/minecraft/class_5; field_7008 pathFindQueue - f Lnet/minecraft/class_1508; field_7020 dragonPartTail1 - f I field_7010 ringBufferIndex - f [Lnet/minecraft/class_1508; field_7032 dragonParts - f Lnet/minecraft/class_1511; field_7024 closestEnderCrystal - f Lnet/minecraft/class_1526; field_7028 phaseManager -c net/minecraft/class_1511 net/minecraft/entity/item/EnderCrystalEntity - m ()Lnet/minecraft/class_2338; method_6838 getBeamTarget - m (Lnet/minecraft/class_1282;)V method_6835 onCrystalDestroyed - m ()Z method_6836 shouldShowBottom - m (Z)V method_6839 setShowBottom - m (Lnet/minecraft/class_2338;)V method_6837 setBeamTarget - f Lnet/minecraft/class_2940; field_7033 BEAM_TARGET - f Lnet/minecraft/class_2940; field_7035 SHOW_BOTTOM - f I field_7034 innerRotation -c net/minecraft/class_1512 net/minecraft/entity/boss/dragon/phase/Phase - f Lnet/minecraft/class_1510; field_7036 dragon -c net/minecraft/class_1513 net/minecraft/entity/boss/dragon/phase/ChargingPlayerPhase - m (Lnet/minecraft/class_243;)V method_6840 setTarget - f Lorg/apache/logging/log4j/Logger; field_7039 LOGGER - f I field_7037 timeSinceCharge - f Lnet/minecraft/class_243; field_7038 targetLocation -c net/minecraft/class_1514 net/minecraft/entity/boss/dragon/phase/SittingPhase -c net/minecraft/class_1517 net/minecraft/entity/boss/dragon/phase/HoldingPatternPhase - m ()V method_6842 navigateToNextPathNode - m ()V method_6841 findNewTarget - m (Lnet/minecraft/class_1657;)V method_6843 strafePlayer - f Lnet/minecraft/class_11; field_7043 currentPath - f Lnet/minecraft/class_243; field_7045 targetLocation - f Lnet/minecraft/class_4051; field_18121 field_221117_b - f Z field_7044 clockwise -c net/minecraft/class_1515 net/minecraft/entity/boss/dragon/phase/DyingPhase - f Lnet/minecraft/class_243; field_7041 targetLocation - f I field_7040 time -c net/minecraft/class_1519 net/minecraft/entity/boss/dragon/phase/LandingApproachPhase - m ()V method_6845 navigateToNextPathNode - m ()V method_6844 findNewTarget - f Lnet/minecraft/class_4051; field_18122 field_221118_b - f Lnet/minecraft/class_11; field_7047 currentPath - f Lnet/minecraft/class_243; field_7048 targetLocation -c net/minecraft/class_1516 net/minecraft/entity/boss/dragon/phase/HoverPhase - f Lnet/minecraft/class_243; field_7042 targetLocation -c net/minecraft/class_1521 net/minecraft/entity/boss/dragon/phase/IPhase - m ()F method_6846 getMaxRiseOrFall - m ()V method_6853 clientTick - m ()Lnet/minecraft/class_243; method_6851 getTargetLocation - m ()Z method_6848 getIsStationary - m ()F method_6847 getYawFactor - m (Lnet/minecraft/class_1282;F)F method_6852 func_221113_a - m ()V method_6855 serverTick - m ()V method_6856 initPhase - m ()Lnet/minecraft/class_1527; method_6849 getType - m ()V method_6854 removeAreaEffect - m (Lnet/minecraft/class_1511;Lnet/minecraft/class_2338;Lnet/minecraft/class_1282;Lnet/minecraft/class_1657;)V method_6850 onCrystalDestroyed -c net/minecraft/class_1518 net/minecraft/entity/boss/dragon/phase/LandingPhase - f Lnet/minecraft/class_243; field_7046 targetLocation -c net/minecraft/class_1520 net/minecraft/entity/boss/dragon/phase/AttackingSittingPhase - f I field_7049 attackingTicks -c net/minecraft/class_1522 net/minecraft/entity/boss/dragon/phase/ScanningSittingPhase - m (Lnet/minecraft/class_1510;Lnet/minecraft/class_1309;)Z method_18447 func_221114_a - f Lnet/minecraft/class_4051; field_18124 field_221116_c - f I field_7050 scanningTime - f Lnet/minecraft/class_4051; field_18123 field_221115_b -c net/minecraft/class_1523 net/minecraft/entity/boss/dragon/phase/FlamingSittingPhase - m ()V method_6857 resetFlameCount - f I field_7053 flameTicks - f Lnet/minecraft/class_1295; field_7051 areaEffectCloud - f I field_7052 flameCount -c net/minecraft/class_1524 net/minecraft/entity/boss/dragon/phase/TakeoffPhase - m ()V method_6858 findNewTarget - m ()V method_6859 navigateToNextPathNode - f Lnet/minecraft/class_243; field_7055 targetLocation - f Lnet/minecraft/class_11; field_7054 currentPath - f Z field_7056 firstTick -c net/minecraft/class_1525 net/minecraft/entity/boss/dragon/phase/StrafePlayerPhase - m ()V method_6861 navigateToNextPathNode - m (Lnet/minecraft/class_1309;)V method_6862 setTarget - m ()V method_6860 findNewTarget - f Lnet/minecraft/class_1309; field_7062 attackTarget - f Lorg/apache/logging/log4j/Logger; field_7061 LOGGER - f Lnet/minecraft/class_243; field_7057 targetLocation - f Lnet/minecraft/class_11; field_7059 currentPath - f Z field_7058 holdingPatternClockwise - f I field_7060 fireballCharge -c net/minecraft/class_1526 net/minecraft/entity/boss/dragon/phase/PhaseManager - m ()Lnet/minecraft/class_1521; method_6864 getCurrentPhase - m (Lnet/minecraft/class_1527;)V method_6863 setPhase - m (Lnet/minecraft/class_1527;)Lnet/minecraft/class_1521; method_6865 getPhase - f [Lnet/minecraft/class_1521; field_7064 phases - f Lnet/minecraft/class_1510; field_7065 dragon - f Lorg/apache/logging/log4j/Logger; field_7066 LOGGER - f Lnet/minecraft/class_1521; field_7063 phase -c net/minecraft/class_1527 net/minecraft/entity/boss/dragon/phase/PhaseType - m (Ljava/lang/Class;Ljava/lang/String;)Lnet/minecraft/class_1527; method_6870 create - m ()I method_6871 getId - m (I)Lnet/minecraft/class_1527; method_6868 getById - m ()Ljava/lang/reflect/Constructor; method_6867 getConstructor - m ()I method_6869 getTotalPhases - m (Lnet/minecraft/class_1510;)Lnet/minecraft/class_1521; method_6866 createPhase - m ()Ljava/lang/String; toString toString - f I field_7079 id - f Lnet/minecraft/class_1527; field_7067 LANDING - f Lnet/minecraft/class_1527; field_7076 STRAFE_PLAYER - f Lnet/minecraft/class_1527; field_7071 LANDING_APPROACH - f Ljava/lang/Class; field_7074 clazz - f Lnet/minecraft/class_1527; field_7069 HOLDING_PATTERN - f Lnet/minecraft/class_1527; field_7068 DYING - f Lnet/minecraft/class_1527; field_7075 HOVER - f Lnet/minecraft/class_1527; field_7078 CHARGING_PLAYER - f Lnet/minecraft/class_1527; field_7073 SITTING_ATTACKING - f Lnet/minecraft/class_1527; field_7072 SITTING_FLAMING - f Ljava/lang/String; field_7070 name - f Lnet/minecraft/class_1527; field_7081 SITTING_SCANNING - f Lnet/minecraft/class_1527; field_7077 TAKEOFF - f [Lnet/minecraft/class_1527; field_7080 phases -c net/minecraft/class_1528 net/minecraft/entity/boss/WitherEntity - m (I)F method_6887 getHeadXRotation - m (I)V method_6875 setInvulTime - m (ILnet/minecraft/class_1309;)V method_6878 launchWitherSkullToEntity - m (I)D method_6874 getHeadX - m (I)I method_6882 getWatchedTargetId - m ()I method_6884 getInvulTime - m (I)D method_6880 getHeadY - m (I)D method_6881 getHeadZ - m (Lnet/minecraft/class_1309;)Z method_6873 func_213797_h - m (II)V method_6876 updateWatchedTargetId - m (I)F method_6879 getHeadYRotation - m ()V method_6885 ignite - m ()Lnet/minecraft/class_5132$class_5133; method_26904 registerAttributes - m (IDDDZ)V method_6877 launchWitherSkullToCoords - m (Lnet/minecraft/class_2680;)Z method_6883 canDestroyBlock - m (FFF)F method_6886 rotlerp - f Ljava/util/function/Predicate; field_7086 NOT_UNDEAD - f [F field_7083 yRotationHeads - f [F field_7084 xRotationHeads - f Lnet/minecraft/class_2940; field_7089 THIRD_HEAD_TARGET - f Lnet/minecraft/class_3213; field_7093 bossInfo - f Ljava/util/List; field_7087 HEAD_TARGETS - f Lnet/minecraft/class_2940; field_7085 INVULNERABILITY_TIME - f Lnet/minecraft/class_2940; field_7090 SECOND_HEAD_TARGET - f Lnet/minecraft/class_2940; field_7088 FIRST_HEAD_TARGET - f [F field_7094 yRotOHeads - f [F field_7095 xRotOHeads - f Lnet/minecraft/class_4051; field_18125 ENEMY_CONDITION - f [I field_7092 idleHeadUpdates - f [I field_7091 nextHeadUpdate - f I field_7082 blockBreakCounter -c net/minecraft/class_1528$class_1529 net/minecraft/entity/boss/WitherEntity$DoNothingGoal - f Lnet/minecraft/class_1528; field_7096 field_188517_a -c net/minecraft/class_1530 net/minecraft/entity/item/HangingEntity - m ()Lnet/minecraft/class_2338; method_6896 getHangingPosition - m ()V method_6895 updateBoundingBox - m ()I method_6891 getHeightPixels - m (Lnet/minecraft/class_1297;)Z method_6890 func_210144_b - m ()Z method_6888 onValidSurface - m (Lnet/minecraft/class_1297;)V method_6889 onBroken - m (Lnet/minecraft/class_2350;)V method_6892 updateFacingWithBoundingBox - m ()V method_6894 playPlaceSound - m (I)D method_6893 offs - m ()I method_6897 getWidthPixels - f Ljava/util/function/Predicate; field_7098 IS_HANGING_ENTITY - f I field_7097 tickCounter1 - f Lnet/minecraft/class_2350; field_7099 facingDirection - f Lnet/minecraft/class_2338; field_7100 hangingPosition -c net/minecraft/class_1530$1 net/minecraft/entity/item/HangingEntity$1 - f [I field_7101 field_210296_a -c net/minecraft/class_1531 net/minecraft/entity/item/ArmorStandEntity - m ()Lnet/minecraft/class_2379; method_6900 getRightLegRotation - m (Z)V method_6907 setNoBasePlate - m (Lnet/minecraft/class_2487;)V method_6928 readPose - m ()Lnet/minecraft/class_2379; method_6917 getLeftLegRotation - m (Lnet/minecraft/class_1297;)Z method_6918 func_200617_a - m ()Lnet/minecraft/class_2487; method_6911 writePose - m ()Z method_18059 func_213814_A - m ()Lnet/minecraft/class_2379; method_6923 getBodyRotation - m (Lnet/minecraft/class_1282;)V method_6924 breakArmorStand - m ()Lnet/minecraft/class_2379; method_6903 getRightArmRotation - m ()Lnet/minecraft/class_2379; method_6921 getHeadRotation - m (Lnet/minecraft/class_2379;)V method_6910 setLeftArmRotation - m (Lnet/minecraft/class_2379;)V method_6919 setHeadRotation - m (Z)Lnet/minecraft/class_4048; method_31168 func_242330_s - m (Lnet/minecraft/class_2379;)V method_6909 setLeftLegRotation - m ()Z method_6914 isSmall - m (Lnet/minecraft/class_243;)Lnet/minecraft/class_1304; method_6916 getClickedSlot - m ()Z method_6929 getShowArms - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;Lnet/minecraft/class_1268;)Z method_6904 equipOrSwap - m ()Z method_6912 hasMarker - m (Lnet/minecraft/class_1282;F)V method_6905 damageArmorStand - m (Z)V method_6902 setMarker - m (Lnet/minecraft/class_1282;)V method_6908 func_213816_g - m ()Lnet/minecraft/class_2379; method_6930 getLeftArmRotation - m (Z)V method_6913 setShowArms - m (Lnet/minecraft/class_1304;)Z method_6915 isDisabled - m (Lnet/minecraft/class_2379;)V method_6927 setBodyRotation - m (BIZ)B method_6906 setBit - m ()V method_6898 playParticles - m (Z)V method_6922 setSmall - m (Lnet/minecraft/class_2379;)V method_6925 setRightArmRotation - m ()V method_6920 playBrokenSound - m ()Z method_6901 hasNoBasePlate - m (Lnet/minecraft/class_2379;)V method_6926 setRightLegRotation - f Ljava/util/function/Predicate; field_7102 IS_RIDEABLE_MINECART - f Lnet/minecraft/class_2379; field_7104 headRotation - f Lnet/minecraft/class_2940; field_7122 BODY_ROTATION - f Lnet/minecraft/class_2940; field_7105 RIGHT_ARM_ROTATION - f Lnet/minecraft/class_4048; field_26745 field_242328_bp - f Lnet/minecraft/class_2940; field_7107 STATUS - f Lnet/minecraft/class_2379; field_7117 DEFAULT_RIGHTLEG_ROTATION - f Z field_7111 canInteract - f Lnet/minecraft/class_2379; field_7110 leftLegRotation - f Lnet/minecraft/class_2379; field_7115 DEFAULT_RIGHTARM_ROTATION - f Lnet/minecraft/class_2371; field_7114 handItems - f I field_7118 disabledSlots - f Lnet/minecraft/class_2379; field_7119 DEFAULT_BODY_ROTATION - f Lnet/minecraft/class_2379; field_7120 rightArmRotation - f Lnet/minecraft/class_2940; field_7116 LEFT_ARM_ROTATION - f J field_7112 punchCooldown - f Lnet/minecraft/class_2379; field_7106 bodyRotation - f Lnet/minecraft/class_2940; field_7127 LEFT_LEG_ROTATION - f Lnet/minecraft/class_4048; field_26746 field_242329_bq - f Lnet/minecraft/class_2379; field_7121 DEFAULT_LEFTLEG_ROTATION - f Lnet/minecraft/class_2940; field_7123 HEAD_ROTATION - f Lnet/minecraft/class_2940; field_7125 RIGHT_LEG_ROTATION - f Lnet/minecraft/class_2379; field_7124 DEFAULT_LEFTARM_ROTATION - f Lnet/minecraft/class_2379; field_7103 rightLegRotation - f Lnet/minecraft/class_2379; field_7113 DEFAULT_HEAD_ROTATION - f Lnet/minecraft/class_2371; field_7108 armorItems - f Lnet/minecraft/class_2379; field_7126 leftArmRotation -c net/minecraft/class_1531$1 net/minecraft/entity/item/ArmorStandEntity$1 - f [I field_7128 field_200830_a -c net/minecraft/class_1532 net/minecraft/entity/item/LeashKnotEntity - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1532; method_6932 create -c net/minecraft/class_1533 net/minecraft/entity/item/ItemFrameEntity - m (Lnet/minecraft/class_1799;)V method_6935 setDisplayedItem - m (Lnet/minecraft/class_1297;Z)V method_6936 dropItemOrSelf - m (Lnet/minecraft/class_1799;)V method_6937 removeItem - m (Lnet/minecraft/class_1799;Z)V method_6933 setDisplayedItemWithUpdate - m (IZ)V method_6941 setRotation - m (I)V method_6939 setItemRotation - m ()Lnet/minecraft/class_1799; method_6940 getDisplayedItem - m ()I method_6934 getRotation - m ()I method_6938 getAnalogOutput - f Z field_22476 fixed - f F field_7129 itemDropChance - f Lorg/apache/logging/log4j/Logger; field_7131 PRIVATE_LOGGER - f Lnet/minecraft/class_2940; field_7132 ROTATION - f Lnet/minecraft/class_2940; field_7130 ITEM -c net/minecraft/class_1533$1 net/minecraft/entity/item/ItemFrameEntity$1 - f [I field_7133 field_200121_a -c net/minecraft/class_1534 net/minecraft/entity/item/PaintingEntity - f Lnet/minecraft/class_1535; field_7134 art -c net/minecraft/class_1535 net/minecraft/entity/item/PaintingType - m ()I method_6945 getWidth - m ()I method_6943 getHeight - m (Ljava/lang/String;II)Lnet/minecraft/class_1535; method_6944 register - f Lnet/minecraft/class_1535; field_7138 WITHER - f Lnet/minecraft/class_1535; field_7157 SKULL_AND_ROSES - f Lnet/minecraft/class_1535; field_7156 VOID - f Lnet/minecraft/class_1535; field_7145 STAGE - f Lnet/minecraft/class_1535; field_7160 BUST - f Lnet/minecraft/class_1535; field_7144 AZTEC2 - f Lnet/minecraft/class_1535; field_7158 SKELETON - f Lnet/minecraft/class_1535; field_7149 BURNING_SKULL - f Lnet/minecraft/class_1535; field_7159 ALBAN - f Lnet/minecraft/class_1535; field_7142 AZTEC - f Lnet/minecraft/class_1535; field_7141 PIGSCENE - f Lnet/minecraft/class_1535; field_7164 POINTER - f Lnet/minecraft/class_1535; field_7146 KEBAB - f Lnet/minecraft/class_1535; field_7153 FIGHTERS - f Lnet/minecraft/class_1535; field_7163 COURBET - f Lnet/minecraft/class_1535; field_7135 POOL - f Lnet/minecraft/class_1535; field_7152 WASTELAND - f Lnet/minecraft/class_1535; field_7162 PLANT - f Lnet/minecraft/class_1535; field_7140 DONKEY_KONG - f Lnet/minecraft/class_1535; field_7143 BOMB - f Lnet/minecraft/class_1535; field_7150 MATCH - f Lnet/minecraft/class_1535; field_7147 GRAHAM - f I field_7151 width - f Lnet/minecraft/class_1535; field_7154 WANDERER - f Lnet/minecraft/class_1535; field_7161 CREEBET - f I field_7137 height - f Lnet/minecraft/class_1535; field_7136 SUNSET - f Lnet/minecraft/class_1535; field_7155 SEA -c net/minecraft/class_1540 net/minecraft/entity/item/FallingBlockEntity - m ()Lnet/minecraft/class_2338; method_6964 getOrigin - m (Lnet/minecraft/class_2338;)V method_6963 setOrigin - m ()Lnet/minecraft/class_2680; method_6962 getBlockState - m (Z)V method_6965 setHurtEntities - m ()Lnet/minecraft/class_1937; method_6966 getWorldObj - f Lnet/minecraft/class_2940; field_7195 ORIGIN - f Lnet/minecraft/class_2680; field_7188 fallTile - f Z field_7193 shouldDropItem - f F field_7187 fallHurtAmount - f I field_7190 fallHurtMax - f Lnet/minecraft/class_2487; field_7194 tileEntityData - f Z field_7189 dontSetBlock - f I field_7192 fallTime - f Z field_7191 hurtEntities -c net/minecraft/class_1541 net/minecraft/entity/item/TNTEntity - m (I)V method_6967 setFuse - m ()I method_6969 getFuseDataManager - m ()I method_6968 getFuse - m ()V method_6971 explode - m ()Lnet/minecraft/class_1309; method_6970 getTntPlacedBy - f Lnet/minecraft/class_1309; field_7198 tntPlacedBy - f I field_7196 fuse - f Lnet/minecraft/class_2940; field_7197 FUSE -c net/minecraft/class_1542 net/minecraft/entity/item/ItemEntity - m ()Z method_20397 func_213857_z - m ()I method_6985 getAge - m (Lnet/minecraft/class_1542;Lnet/minecraft/class_1799;Lnet/minecraft/class_1542;Lnet/minecraft/class_1799;)V method_18006 func_213858_a - m (F)F method_27314 getItemHover - m ()V method_24348 func_234274_v_ - m (Lnet/minecraft/class_1542;)V method_6972 func_226530_a_ - m ()Ljava/util/UUID; method_6978 getThrowerId - m ()V method_6973 searchForOtherItemsNearby - m ()Ljava/util/UUID; method_6986 getOwnerId - m ()Lnet/minecraft/class_1799; method_6983 getItem - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;I)Lnet/minecraft/class_1799; method_24018 mergeStacks - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_24017 canMergeStacks - m ()Z method_6977 cannotPickup - m ()V method_6976 setNoDespawn - m (Lnet/minecraft/class_1542;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_24016 func_226531_a_ - m (I)V method_6982 setPickupDelay - m (Lnet/minecraft/class_1542;)Z method_20396 func_213859_b - m ()V method_6987 makeFakeItem - m ()V method_6974 applyFloatMotion - m (Lnet/minecraft/class_1799;)V method_6979 setItem - m ()Lnet/minecraft/class_1542; method_29271 func_234273_t_ - m ()V method_6988 setDefaultPickupDelay - m ()V method_6975 setNoPickupDelay - m (Ljava/util/UUID;)V method_6984 setOwnerId - m ()V method_6989 setInfinitePickupDelay - m (Ljava/util/UUID;)V method_6981 setThrowerId - f Lnet/minecraft/class_2940; field_7199 ITEM - f Ljava/util/UUID; field_7200 thrower - f Ljava/util/UUID; field_7205 owner - f I field_7204 age - f I field_7202 pickupDelay - f I field_7201 health - f F field_7203 hoverStart -c net/minecraft/class_1543 net/minecraft/entity/monster/AbstractIllagerEntity - m ()Lnet/minecraft/class_1543$class_1544; method_6990 getArmPose -c net/minecraft/class_1543$class_4258 net/minecraft/entity/monster/AbstractIllagerEntity$RaidOpenDoorGoal - f Lnet/minecraft/class_1543; field_19013 field_220700_a -c net/minecraft/class_1543$class_1544 net/minecraft/entity/monster/AbstractIllagerEntity$ArmPose - m (Ljava/lang/String;)Lnet/minecraft/class_1543$class_1544; valueOf valueOf - m ()[Lnet/minecraft/class_1543$class_1544; values values - f Lnet/minecraft/class_1543$class_1544; field_7213 CROSSBOW_HOLD - f Lnet/minecraft/class_1543$class_1544; field_7207 CROSSED - f Lnet/minecraft/class_1543$class_1544; field_7210 CROSSBOW_CHARGE - f Lnet/minecraft/class_1543$class_1544; field_19012 CELEBRATING - f Lnet/minecraft/class_1543$class_1544; field_7211 ATTACKING - f Lnet/minecraft/class_1543$class_1544; field_7212 SPELLCASTING - f Lnet/minecraft/class_1543$class_1544; field_21512 NEUTRAL - f [Lnet/minecraft/class_1543$class_1544; field_7209 $VALUES - f Lnet/minecraft/class_1543$class_1544; field_7208 BOW_AND_ARROW -c net/minecraft/class_1545 net/minecraft/entity/monster/BlazeEntity - m (Z)V method_6993 setOnFire - m ()Z method_6994 isCharged - m ()Lnet/minecraft/class_5132$class_5133; method_26906 registerAttributes - m (Lnet/minecraft/class_1545;Z)V method_20811 func_223326_a - f Lnet/minecraft/class_2940; field_7216 ON_FIRE - f F field_7214 heightOffset - f I field_7215 heightOffsetUpdateTime -c net/minecraft/class_1545$class_1546 net/minecraft/entity/monster/BlazeEntity$FireballAttackGoal - m ()D method_6995 getFollowDistance - f Lnet/minecraft/class_1545; field_7219 blaze - f I field_19420 firedRecentlyTimer - f I field_7217 attackTime - f I field_7218 attackStep -c net/minecraft/class_1547 net/minecraft/entity/monster/AbstractSkeletonEntity - m (Lnet/minecraft/class_1799;F)Lnet/minecraft/class_1665; method_6996 fireArrow - m ()Lnet/minecraft/class_3414; method_6998 getStepSound - m ()V method_6997 setCombatTask - m ()Lnet/minecraft/class_5132$class_5133; method_26905 registerAttributes - f Lnet/minecraft/class_1366; field_7221 aiAttackOnCollide - f Lnet/minecraft/class_1380; field_7220 aiArrowAttack -c net/minecraft/class_1547$1 net/minecraft/entity/monster/AbstractSkeletonEntity$1 - f Lnet/minecraft/class_1547; field_7223 field_190862_h -c net/minecraft/class_1548 net/minecraft/entity/monster/CreeperEntity - m ()Z method_7000 hasIgnited - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20256 func_213625_a - m ()V method_7004 ignite - m (I)V method_7005 setCreeperState - m ()Z method_7008 ableToCauseSkullDrop - m ()V method_7002 incrementDroppedSkulls - m ()Lnet/minecraft/class_5132$class_5133; method_26908 registerAttributes - m ()V method_7006 explode - m ()I method_7007 getCreeperState - m (F)F method_7003 getCreeperFlashIntensity - m ()V method_7001 spawnLingeringCloud - f Lnet/minecraft/class_2940; field_7224 POWERED - f I field_7225 explosionRadius - f Lnet/minecraft/class_2940; field_7230 STATE - f I field_7228 fuseTime - f I field_7226 droppedSkulls - f Lnet/minecraft/class_2940; field_7231 IGNITED - f I field_7229 lastActiveTime - f I field_7227 timeSinceIgnited -c net/minecraft/class_1549 net/minecraft/entity/monster/CaveSpiderEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26907 registerAttributes -c net/minecraft/class_3745 net/minecraft/entity/ICrossbowUser - m (Z)V method_7110 setCharging - m ()Lnet/minecraft/class_1309; method_5968 getAttackTarget - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;Lnet/minecraft/class_1676;FF)V method_24652 func_234279_a_ - m (Lnet/minecraft/class_1309;F)V method_24654 func_234281_b_ - m ()V method_24651 func_230283_U__ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_243;F)Lnet/minecraft/class_1160; method_24653 func_234280_a_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_1676;F)V method_18811 func_230284_a_ -c net/minecraft/class_1550 net/minecraft/entity/monster/ElderGuardianEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26909 func_234283_m_ - m (Lnet/minecraft/class_3222;)Z method_7011 func_210138_d - f F field_17492 field_213629_b -c net/minecraft/class_1551 net/minecraft/entity/monster/DrownedEntity - m ()Z method_7018 func_204715_dF - m (Lnet/minecraft/class_1309;)Z method_7012 shouldAttack - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_20672 func_223333_a - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20673 func_223332_b - m ()Z method_7016 isCloseToPathTarget - m (Lnet/minecraft/class_1551;Lnet/minecraft/class_1408;)Lnet/minecraft/class_1408; method_7017 access$002 - m (Z)V method_7013 setSwimmingUp - m (Lnet/minecraft/class_1551;)Z method_24841 func_234282_c_ - m (Lnet/minecraft/class_1551;)Z method_7019 access$200 - m (Lnet/minecraft/class_1551;)Z method_7014 access$100 - f Lnet/minecraft/class_1409; field_7232 groundNavigator - f Z field_7233 swimmingUp - f Lnet/minecraft/class_1412; field_7234 waterNavigator -c net/minecraft/class_1551$class_1555 net/minecraft/entity/monster/DrownedEntity$GoToWaterGoal - m ()Lnet/minecraft/class_243; method_7021 func_204729_f - f Lnet/minecraft/class_1937; field_7241 field_204735_f - f D field_7243 field_204734_e - f D field_7238 field_204733_d - f D field_7239 field_204732_c - f D field_7240 field_204731_b - f Lnet/minecraft/class_1314; field_7242 field_204730_a -c net/minecraft/class_1551$class_1554 net/minecraft/entity/monster/DrownedEntity$GoToBeachGoal - f Lnet/minecraft/class_1551; field_7237 drowned -c net/minecraft/class_1551$class_1552 net/minecraft/entity/monster/DrownedEntity$AttackGoal - f Lnet/minecraft/class_1551; field_7235 field_204726_g -c net/minecraft/class_1551$class_1558 net/minecraft/entity/monster/DrownedEntity$TridentAttackGoal - f Lnet/minecraft/class_1551; field_7249 field_204728_a -c net/minecraft/class_1551$class_1557 net/minecraft/entity/monster/DrownedEntity$SwimUpGoal - f I field_7247 targetY - f D field_7245 field_204737_b - f Lnet/minecraft/class_1551; field_7246 field_204736_a - f Z field_7248 obstructed -c net/minecraft/class_1551$class_1556 net/minecraft/entity/monster/DrownedEntity$MoveHelperController - f Lnet/minecraft/class_1551; field_7244 drowned -c net/minecraft/class_1559 net/minecraft/entity/monster/EndermiteEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26911 func_234288_m_ - m ()Z method_7023 isSpawnedByPlayer - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20674 func_223328_b - m (Z)V method_7022 setSpawnedByPlayer - f I field_7250 lifetime - f Z field_7251 playerSpawned -c net/minecraft/class_1560 net/minecraft/entity/monster/EndermanEntity - m (Lnet/minecraft/class_1560;Lnet/minecraft/class_1657;)Z method_7031 func_210137_a - m ()V method_22331 func_226538_eu_ - m ()Z method_22330 func_226537_et_ - m (Lnet/minecraft/class_2680;)V method_7032 setHeldBlockState - m ()V method_7030 func_226539_l_ - m ()Z method_7028 isScreaming - m ()Z method_7029 teleportRandomly - m (DDD)Z method_7024 teleportTo - m ()Lnet/minecraft/class_2680; method_7027 getHeldBlockState - m (Lnet/minecraft/class_1657;)Z method_7026 shouldAttackPlayer - m (Lnet/minecraft/class_1297;)Z method_7025 teleportToEntity - m (Lnet/minecraft/class_1309;)Z method_18448 func_213626_h - m (Lnet/minecraft/class_1560;Lnet/minecraft/class_1297;)Z method_20505 func_222819_a - m ()Lnet/minecraft/class_5132$class_5133; method_26910 func_234287_m_ - f Lnet/minecraft/class_1322; field_7252 ATTACKING_SPEED_BOOST - f Ljava/util/UUID; field_7256 ATTACKING_SPEED_BOOST_ID - f Ljava/util/UUID; field_25377 field_234285_bB_ - f I field_7253 field_226536_bz_ - f Lnet/minecraft/class_4801; field_25378 field_234286_bz_ - f I field_25376 field_234284_bA_ - f I field_7254 targetChangeTime - f Ljava/util/function/Predicate; field_18126 field_213627_bA - f Lnet/minecraft/class_2940; field_20618 field_226535_bx_ - f Lnet/minecraft/class_2940; field_7257 CARRIED_BLOCK - f Lnet/minecraft/class_2940; field_7255 SCREAMING -c net/minecraft/class_1560$class_4159 net/minecraft/entity/monster/EndermanEntity$StareGoal - f Lnet/minecraft/class_1309; field_21513 targetPlayer - f Lnet/minecraft/class_1560; field_18524 enderman -c net/minecraft/class_1560$class_1563 net/minecraft/entity/monster/EndermanEntity$TakeBlockGoal - f Lnet/minecraft/class_1560; field_7263 enderman -c net/minecraft/class_1560$class_1562 net/minecraft/entity/monster/EndermanEntity$FindPlayerGoal - m (Lnet/minecraft/class_1560;Lnet/minecraft/class_1309;)Z method_18449 func_220790_a - f Lnet/minecraft/class_1657; field_7259 player - f Lnet/minecraft/class_4051; field_18876 field_220792_n - f I field_7262 aggroTime - f I field_7261 teleportTime - f Lnet/minecraft/class_1560; field_7260 enderman - f Lnet/minecraft/class_4051; field_18127 field_220791_m -c net/minecraft/class_1560$class_1561 net/minecraft/entity/monster/EndermanEntity$PlaceBlockGoal - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_7033 func_220836_a - f Lnet/minecraft/class_1560; field_7258 enderman -c net/minecraft/class_1564 net/minecraft/entity/monster/EvokerEntity - m (Lnet/minecraft/class_1564;Lnet/minecraft/class_1472;)V method_7035 access$900 - m (Lnet/minecraft/class_1472;)V method_7036 setWololoTarget - m (Lnet/minecraft/class_1564;)Lnet/minecraft/class_1472; method_7042 access$300 - m (Lnet/minecraft/class_1564;)Ljava/util/Random; method_7038 access$800 - m (Lnet/minecraft/class_1564;)Ljava/util/Random; method_7037 access$500 - m ()Lnet/minecraft/class_5132$class_5133; method_26912 func_234289_eI_ - m (Lnet/minecraft/class_1564;)Ljava/util/Random; method_7041 access$700 - m (Lnet/minecraft/class_1564;)Ljava/util/Random; method_7043 access$600 - m (Lnet/minecraft/class_1564;)Ljava/util/Random; method_7040 access$400 - m ()Lnet/minecraft/class_1472; method_7039 getWololoTarget - f Lnet/minecraft/class_1472; field_7264 wololoTarget -c net/minecraft/class_1564$1 net/minecraft/entity/monster/EvokerEntity$1 -c net/minecraft/class_1564$class_1566 net/minecraft/entity/monster/EvokerEntity$CastingSpellGoal - f Lnet/minecraft/class_1564; field_7266 field_190866_a -c net/minecraft/class_1564$class_1565 net/minecraft/entity/monster/EvokerEntity$AttackSpellGoal - m (DDDDFI)V method_7044 spawnFangs - f Lnet/minecraft/class_1564; field_7265 field_190877_a -c net/minecraft/class_1564$class_1568 net/minecraft/entity/monster/EvokerEntity$WololoSpellGoal - m (Lnet/minecraft/class_1309;)Z method_7045 func_220844_a - f Lnet/minecraft/class_1564; field_7268 field_190880_e - f Lnet/minecraft/class_4051; field_7269 wololoTargetFlags -c net/minecraft/class_1564$class_1567 net/minecraft/entity/monster/EvokerEntity$SummonSpellGoal - f Lnet/minecraft/class_4051; field_18129 field_220843_e - f Lnet/minecraft/class_1564; field_7267 field_190878_a -c net/minecraft/class_1569 net/minecraft/entity/monster/IMob -c net/minecraft/class_1570 net/minecraft/entity/monster/GiantEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26914 func_234291_m_ -c net/minecraft/class_1571 net/minecraft/entity/monster/GhastEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26913 func_234290_eH_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20675 func_223368_b - m (Z)V method_7048 setAttacking - m ()I method_7049 getFireballStrength - m (Lnet/minecraft/class_1309;)Z method_18450 func_213812_h - m ()Z method_7050 isAttacking - f I field_7272 explosionStrength - f Lnet/minecraft/class_2940; field_7273 ATTACKING -c net/minecraft/class_1571$class_1572 net/minecraft/entity/monster/GhastEntity$LookAroundGoal - f Lnet/minecraft/class_1571; field_7274 parentEntity -c net/minecraft/class_1571$class_1575 net/minecraft/entity/monster/GhastEntity$RandomFlyGoal - f Lnet/minecraft/class_1571; field_7279 parentEntity -c net/minecraft/class_1571$class_1574 net/minecraft/entity/monster/GhastEntity$FireballAttackGoal - f Lnet/minecraft/class_1571; field_7277 parentEntity - f I field_7278 attackTimer -c net/minecraft/class_1571$class_1573 net/minecraft/entity/monster/GhastEntity$MoveHelperController - m (Lnet/minecraft/class_243;I)Z method_7051 func_220673_a - f I field_7276 courseChangeCooldown - f Lnet/minecraft/class_1571; field_7275 parentEntity -c net/minecraft/class_1576 net/minecraft/entity/monster/HuskEntity - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20677 func_223334_b -c net/minecraft/class_1577 net/minecraft/entity/monster/GuardianEntity - m ()Lnet/minecraft/class_1309; method_7052 getTargetedEntity - m ()Z method_7063 hasTargetedEntity - m (Lnet/minecraft/class_1577;I)V method_7059 access$000 - m ()Z method_7058 isMoving - m ()Lnet/minecraft/class_3414; method_7062 getFlopSound - m (F)F method_7061 getAttackAnimationScale - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20676 func_223329_b - m (Lnet/minecraft/class_1577;Z)V method_7056 access$100 - m (I)V method_7060 setTargetedEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26915 func_234292_eK_ - m (Z)V method_7054 setMoving - m (F)F method_7053 getSpikesAnimation - m ()I method_7055 getAttackDuration - m (F)F method_7057 getTailAnimation - f Lnet/minecraft/class_2940; field_7280 MOVING - f Z field_7283 clientSideTouchedGround - f I field_7282 clientSideAttackTime - f F field_7281 clientSideTailAnimationSpeed - f F field_7284 clientSideTailAnimationO - f F field_7286 clientSideTailAnimation - f Lnet/minecraft/class_1379; field_7289 wander - f F field_7287 clientSideSpikesAnimationO - f F field_7285 clientSideSpikesAnimation - f Lnet/minecraft/class_1309; field_7288 targetedEntity - f Lnet/minecraft/class_2940; field_7290 TARGET_ENTITY -c net/minecraft/class_1577$class_1578 net/minecraft/entity/monster/GuardianEntity$AttackGoal - f I field_7291 tickCounter - f Lnet/minecraft/class_1577; field_7293 guardian - f Z field_7292 isElder -c net/minecraft/class_1577$class_1579 net/minecraft/entity/monster/GuardianEntity$TargetPredicate - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_1309;)Z method_7064 test - f Lnet/minecraft/class_1577; field_7294 parentEntity -c net/minecraft/class_1577$class_1580 net/minecraft/entity/monster/GuardianEntity$MoveHelperController - f Lnet/minecraft/class_1577; field_7295 entityGuardian -c net/minecraft/class_1589 net/minecraft/entity/monster/MagmaCubeEntity - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20678 func_223367_b - m ()Lnet/minecraft/class_5132$class_5133; method_26917 func_234294_m_ -c net/minecraft/class_1581 net/minecraft/entity/monster/IllusionerEntity - m (F)[Lnet/minecraft/class_243; method_7065 getRenderLocations - m ()Lnet/minecraft/class_5132$class_5133; method_26916 func_234293_eI_ - f I field_7296 ghostTime - f [[Lnet/minecraft/class_243; field_7297 renderLocations -c net/minecraft/class_1581$class_1582 net/minecraft/entity/monster/IllusionerEntity$BlindnessSpellGoal - f I field_7298 lastTargetId - f Lnet/minecraft/class_1581; field_7299 field_210765_a -c net/minecraft/class_1581$1 net/minecraft/entity/monster/IllusionerEntity$1 -c net/minecraft/class_1581$class_1583 net/minecraft/entity/monster/IllusionerEntity$MirrorSpellGoal - f Lnet/minecraft/class_1581; field_7300 field_210767_a -c net/minecraft/class_3732 net/minecraft/entity/monster/PatrollerEntity - m ()Z method_16220 hasPatrolTarget - m (Z)V method_16217 setLeader - m ()Z method_16485 canBeLeader - m (Z)V method_22332 setPatrolling - m ()Lnet/minecraft/class_2338; method_16215 getPatrolTarget - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20739 func_223330_b - m ()V method_16218 resetPatrolTarget - m ()Z method_16472 notInRaid - m ()Z method_16219 isLeader - m (Lnet/minecraft/class_2338;)V method_16216 setPatrolTarget - m ()Z method_16915 isPatrolling - f Z field_16479 patrolLeader - f Lnet/minecraft/class_2338; field_16478 patrolTarget - f Z field_16477 patrolling -c net/minecraft/class_3732$class_3733 net/minecraft/entity/monster/PatrollerEntity$PatrolGoal - m ()Ljava/util/List; method_22333 func_226544_g_ - m ()Z method_16222 func_226545_h_ - m (Lnet/minecraft/class_3732;)Z method_16223 func_226543_a_ - f D field_16480 field_220840_b - f J field_20701 field_226542_d_ - f D field_16535 field_220841_c - f Lnet/minecraft/class_3732; field_16481 owner -c net/minecraft/class_1588 net/minecraft/entity/monster/MonsterEntity - m (Lnet/minecraft/class_1657;)Z method_7076 func_230292_f_ - m ()Lnet/minecraft/class_5132$class_5133; method_26918 func_234295_eP_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20680 canMonsterSpawnInLight - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20681 canMonsterSpawn - m ()V method_16827 idle - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20679 isValidLightLevel -c net/minecraft/class_1604 net/minecraft/entity/monster/PillagerEntity - m ()Z method_7108 isCharging - m (Lnet/minecraft/class_1792;)Z method_7111 func_213672_b - m ()Lnet/minecraft/class_5132$class_5133; method_26919 func_234296_eI_ - f Lnet/minecraft/class_1277; field_7335 inventory - f Lnet/minecraft/class_2940; field_7334 DATA_CHARGING_STATE -c net/minecraft/class_1593 net/minecraft/entity/monster/PhantomEntity - m (Lnet/minecraft/class_1593;Lnet/minecraft/class_1593$class_1594;)Lnet/minecraft/class_1593$class_1594; method_7089 access$502 - m (Lnet/minecraft/class_1593;)Lnet/minecraft/class_243; method_7085 access$400 - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7080 access$600 - m ()I method_7084 getPhantomSize - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7083 access$1800 - m (Lnet/minecraft/class_1593;Lnet/minecraft/class_243;)Lnet/minecraft/class_243; method_7094 access$402 - m (Lnet/minecraft/class_1593;)Lnet/minecraft/class_2338; method_7082 access$1400 - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7081 access$1700 - m (I)V method_7091 setPhantomSize - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7095 access$1500 - m (Lnet/minecraft/class_1593;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_7088 access$1402 - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7100 access$1600 - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7090 access$1200 - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7086 access$1300 - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7093 access$1000 - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7096 access$900 - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7092 access$1100 - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7098 access$700 - m (Lnet/minecraft/class_1593;)Lnet/minecraft/class_1593$class_1594; method_7087 access$500 - m ()V method_7097 updatePhantomSize - m (Lnet/minecraft/class_1593;)Ljava/util/Random; method_7099 access$800 - f Lnet/minecraft/class_1593$class_1594; field_7315 attackPhase - f Lnet/minecraft/class_2940; field_7313 SIZE - f Lnet/minecraft/class_243; field_7314 orbitOffset - f Lnet/minecraft/class_2338; field_7312 orbitPosition -c net/minecraft/class_1593$class_1599 net/minecraft/entity/monster/PhantomEntity$LookHelperController - f Lnet/minecraft/class_1593; field_7329 field_203106_a -c net/minecraft/class_1593$class_1600 net/minecraft/entity/monster/PhantomEntity$MoveHelperController - f Lnet/minecraft/class_1593; field_7330 field_203104_i - f F field_7331 speedFactor -c net/minecraft/class_1593$class_1601 net/minecraft/entity/monster/PhantomEntity$MoveGoal - m ()Z method_7104 func_203146_f - f Lnet/minecraft/class_1593; field_7332 field_203147_b -c net/minecraft/class_1593$class_1602 net/minecraft/entity/monster/PhantomEntity$SweepAttackGoal - f Lnet/minecraft/class_1593; field_7333 field_203154_a -c net/minecraft/class_1593$1 net/minecraft/entity/monster/PhantomEntity$1 -c net/minecraft/class_1593$class_1595 net/minecraft/entity/monster/PhantomEntity$AttackPlayerGoal - f Lnet/minecraft/class_4051; field_18130 field_220842_b - f I field_7320 tickDelay - f Lnet/minecraft/class_1593; field_7319 field_203141_a -c net/minecraft/class_1593$class_1596 net/minecraft/entity/monster/PhantomEntity$PickAttackGoal - m ()V method_7102 func_203143_f - f Lnet/minecraft/class_1593; field_7321 field_203144_a - f I field_7322 tickDelay -c net/minecraft/class_1593$class_1597 net/minecraft/entity/monster/PhantomEntity$BodyHelperController - f Lnet/minecraft/class_1593; field_7323 field_220669_a -c net/minecraft/class_1593$class_1598 net/minecraft/entity/monster/PhantomEntity$OrbitPointGoal - m ()V method_7103 func_203148_i - f F field_7328 field_203150_c - f Lnet/minecraft/class_1593; field_7325 field_203149_a - f F field_7327 field_203151_d - f F field_7326 field_203152_e - f F field_7324 field_203153_f -c net/minecraft/class_1593$class_1594 net/minecraft/entity/monster/PhantomEntity$AttackPhase - m (Ljava/lang/String;)Lnet/minecraft/class_1593$class_1594; valueOf valueOf - m ()[Lnet/minecraft/class_1593$class_1594; values values - f Lnet/minecraft/class_1593$class_1594; field_7318 CIRCLE - f Lnet/minecraft/class_1593$class_1594; field_7317 SWOOP - f [Lnet/minecraft/class_1593$class_1594; field_7316 $VALUES -c net/minecraft/class_1584 net/minecraft/entity/monster/RavagerEntity - m ()V method_7071 roar - m ()I method_7072 func_213687_eg - m ()I method_7070 func_213683_l - m (Lnet/minecraft/class_1297;)Z method_7069 func_213685_b - m ()Lnet/minecraft/class_5132$class_5133; method_26920 func_234297_m_ - m ()I method_7074 func_213684_dX - m (Lnet/minecraft/class_1297;)V method_7068 launch - m ()V method_7073 func_213682_eh - f I field_7302 stunTick - f I field_7303 attackTick - f I field_7305 roarTick - f Ljava/util/function/Predicate; field_7301 field_213690_b -c net/minecraft/class_1584$class_1587 net/minecraft/entity/monster/RavagerEntity$Processor -c net/minecraft/class_1584$1 net/minecraft/entity/monster/RavagerEntity$1 -c net/minecraft/class_1584$class_1585 net/minecraft/entity/monster/RavagerEntity$AttackGoal - f Lnet/minecraft/class_1584; field_7306 field_220723_d -c net/minecraft/class_1584$class_1586 net/minecraft/entity/monster/RavagerEntity$Navigator -c net/minecraft/class_1603 net/minecraft/entity/IRangedAttackMob - m (Lnet/minecraft/class_1309;F)V method_7105 attackEntityWithRangedAttack -c net/minecraft/class_1614 net/minecraft/entity/monster/SilverfishEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26922 func_234301_m_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20684 func_223331_b - f Lnet/minecraft/class_1614$class_1616; field_7366 summonSilverfish -c net/minecraft/class_1614$class_1615 net/minecraft/entity/monster/SilverfishEntity$HideInStoneGoal - f Lnet/minecraft/class_2350; field_7368 facing - f Z field_7367 doMerge -c net/minecraft/class_1614$class_1616 net/minecraft/entity/monster/SilverfishEntity$SummonSilverfishGoal - m ()V method_7136 notifyHurt - f I field_7369 lookForFriends - f Lnet/minecraft/class_1614; field_7370 silverfish -c net/minecraft/class_1606 net/minecraft/entity/monster/ShulkerEntity - m ()Z method_7127 tryTeleportToNewPosition - m (I)V method_7122 updateArmorModifier - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_24350 func_234298_a_ - m ()I method_7113 getClientTeleportInterp - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2350; method_24351 func_234299_g_ - m ()Lnet/minecraft/class_5132$class_5133; method_26921 func_234300_m_ - m (F)F method_7116 getClientPeekAmount - m ()I method_7115 getPeekTick - m ()Lnet/minecraft/class_2338; method_7120 getOldAttachPos - m (Lnet/minecraft/class_1606;)Ljava/util/Random; method_7128 access$500 - m ()Lnet/minecraft/class_2338; method_7123 getAttachmentPos - m (Lnet/minecraft/class_1606;)Ljava/util/Random; method_7126 access$400 - m ()Z method_7124 isClosed - m (Lnet/minecraft/class_1606;)Ljava/util/Random; method_7112 access$200 - m ()Lnet/minecraft/class_2350; method_7119 getAttachmentFacing - m (Lnet/minecraft/class_1606;)Ljava/util/Random; method_7114 access$300 - m (Lnet/minecraft/class_1606;)Ljava/util/Random; method_7118 access$100 - m (Lnet/minecraft/class_2338;)V method_7125 setAttachmentPos - m ()Z method_7117 isAttachedToBlock - m ()Lnet/minecraft/class_1767; method_7121 getColor - f F field_7337 peekAmount - f F field_7339 prevPeekAmount - f Lnet/minecraft/class_1322; field_7342 COVERED_ARMOR_BONUS_MODIFIER - f I field_7340 clientSideTeleportInterpolation - f Ljava/util/UUID; field_7341 COVERED_ARMOR_BONUS_ID - f Lnet/minecraft/class_2338; field_7345 currentAttachmentPosition - f Lnet/minecraft/class_2940; field_7346 PEEK_TICK - f Lnet/minecraft/class_2940; field_7344 ATTACHED_FACE - f Lnet/minecraft/class_2940; field_7343 COLOR - f Lnet/minecraft/class_2940; field_7338 ATTACHED_BLOCK_POS -c net/minecraft/class_1606$class_1608 net/minecraft/entity/monster/ShulkerEntity$BodyHelperController - f Lnet/minecraft/class_1606; field_7350 field_220670_a -c net/minecraft/class_1606$class_1609 net/minecraft/entity/monster/ShulkerEntity$DefenseAttackGoal - m (Lnet/minecraft/class_1309;)Z method_7129 func_200826_a -c net/minecraft/class_1606$class_1610 net/minecraft/entity/monster/ShulkerEntity$AttackNearestGoal - f Lnet/minecraft/class_1606; field_7351 field_188513_i -c net/minecraft/class_1606$class_1611 net/minecraft/entity/monster/ShulkerEntity$PeekGoal - f Lnet/minecraft/class_1606; field_7353 field_188521_a - f I field_7352 peekTime -c net/minecraft/class_1606$1 net/minecraft/entity/monster/ShulkerEntity$1 -c net/minecraft/class_1606$class_1607 net/minecraft/entity/monster/ShulkerEntity$AttackGoal - f I field_7347 attackTime - f Lnet/minecraft/class_1606; field_7348 field_188519_a -c net/minecraft/class_1621 net/minecraft/entity/monster/SlimeEntity - m (Lnet/minecraft/class_1309;)Z method_18451 func_213811_i - m ()F method_24353 func_234304_m_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20685 func_223366_c - m (IZ)V method_7161 setSlimeSize - m (Lnet/minecraft/class_1309;)V method_7155 dealDamage - m ()I method_7154 getJumpDelay - m ()Z method_7159 makesSoundOnJump - m ()Z method_7157 isSmallSlime - m (Lnet/minecraft/class_1621;)Z method_24842 func_234303_b_ - m ()Z method_7163 canDamagePlayer - m ()Lnet/minecraft/class_3414; method_7160 getSquishSound - m ()Lnet/minecraft/class_3414; method_7153 getJumpSound - m (Lnet/minecraft/class_1621;)F method_24352 func_234302_a_ - m ()F method_7158 func_225512_er_ - m ()I method_7152 getSlimeSize - m ()Lnet/minecraft/class_2394; method_7162 getSquishParticle - m ()V method_7156 alterSquishAmount - f Lnet/minecraft/class_2940; field_7390 SLIME_SIZE - f Z field_7391 wasOnGround - f F field_7389 squishAmount - f F field_7388 squishFactor - f F field_7387 prevSquishFactor -c net/minecraft/class_1621$class_1624 net/minecraft/entity/monster/SlimeEntity$HopGoal - f Lnet/minecraft/class_1621; field_7395 slime -c net/minecraft/class_1621$class_1625 net/minecraft/entity/monster/SlimeEntity$MoveHelperController - m (FZ)V method_7165 setDirection - m (D)V method_7164 setSpeed - f Lnet/minecraft/class_1621; field_7396 slime - f I field_7399 jumpDelay - f F field_7397 yRot - f Z field_7398 isAggressive -c net/minecraft/class_1621$class_1626 net/minecraft/entity/monster/SlimeEntity$FaceRandomGoal - f F field_7400 chosenDegrees - f Lnet/minecraft/class_1621; field_7402 slime - f I field_7401 nextRandomizeTime -c net/minecraft/class_1621$class_1622 net/minecraft/entity/monster/SlimeEntity$AttackGoal - f I field_7392 growTieredTimer - f Lnet/minecraft/class_1621; field_7393 slime -c net/minecraft/class_1621$class_1623 net/minecraft/entity/monster/SlimeEntity$FloatGoal - f Lnet/minecraft/class_1621; field_7394 slime -c net/minecraft/class_1613 net/minecraft/entity/monster/SkeletonEntity -c net/minecraft/class_1628 net/minecraft/entity/monster/SpiderEntity - m ()Z method_7167 isBesideClimbableBlock - m (Z)V method_7166 setBesideClimbableBlock - m ()Lnet/minecraft/class_5132$class_5133; method_26923 func_234305_eI_ - f Lnet/minecraft/class_2940; field_7403 CLIMBING -c net/minecraft/class_1628$class_1629 net/minecraft/entity/monster/SpiderEntity$AttackGoal -c net/minecraft/class_1628$class_1630 net/minecraft/entity/monster/SpiderEntity$GroupData - m (Ljava/util/Random;)V method_7168 setRandomEffect - f Lnet/minecraft/class_1291; field_7404 effect -c net/minecraft/class_1628$class_1631 net/minecraft/entity/monster/SpiderEntity$TargetGoal -c net/minecraft/class_1617 net/minecraft/entity/monster/SpellcastingIllagerEntity - m ()Lnet/minecraft/class_3414; method_7142 getSpellSound - m (Lnet/minecraft/class_1617$class_1618;)V method_7138 setSpellType - m ()I method_7139 getSpellTicks - m ()Z method_7137 isSpellcasting - m ()Lnet/minecraft/class_1617$class_1618; method_7140 getSpellType - m (Lnet/minecraft/class_1617;)Lnet/minecraft/class_1408; method_7141 access$200 - f Lnet/minecraft/class_2940; field_7373 SPELL - f I field_7372 spellTicks - f Lnet/minecraft/class_1617$class_1618; field_7371 activeSpell -c net/minecraft/class_1617$class_1619 net/minecraft/entity/monster/SpellcastingIllagerEntity$CastingASpellGoal - f Lnet/minecraft/class_1617; field_7383 field_193319_b -c net/minecraft/class_1617$class_1620 net/minecraft/entity/monster/SpellcastingIllagerEntity$UseSpellGoal - m ()Lnet/minecraft/class_1617$class_1618; method_7147 getSpellType - m ()V method_7148 castSpell - m ()I method_7151 getCastingInterval - m ()I method_7146 getCastWarmupTime - m ()Lnet/minecraft/class_3414; method_7150 getSpellPrepareSound - m ()I method_7149 getCastingTime - f I field_7384 spellCooldown - f I field_7385 spellWarmup - f Lnet/minecraft/class_1617; field_7386 field_193323_e -c net/minecraft/class_1617$class_1618 net/minecraft/entity/monster/SpellcastingIllagerEntity$SpellType - m (I)Lnet/minecraft/class_1617$class_1618; method_7144 getFromId - m (Ljava/lang/String;)Lnet/minecraft/class_1617$class_1618; valueOf valueOf - m ()[Lnet/minecraft/class_1617$class_1618; values values - m (Lnet/minecraft/class_1617$class_1618;)[D method_7145 access$100 - m (Lnet/minecraft/class_1617$class_1618;)I method_7143 access$000 - f Lnet/minecraft/class_1617$class_1618; field_7377 NONE - f [D field_7374 particleSpeed - f I field_7375 id - f Lnet/minecraft/class_1617$class_1618; field_7378 BLINDNESS - f Lnet/minecraft/class_1617$class_1618; field_7382 DISAPPEAR - f Lnet/minecraft/class_1617$class_1618; field_7381 WOLOLO - f Lnet/minecraft/class_1617$class_1618; field_7379 SUMMON_VEX - f [Lnet/minecraft/class_1617$class_1618; field_7376 $VALUES - f Lnet/minecraft/class_1617$class_1618; field_7380 FANGS -c net/minecraft/class_1627 net/minecraft/entity/monster/StrayEntity - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_5425;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20686 func_223327_b -c net/minecraft/class_1634 net/minecraft/entity/monster/VexEntity - m (Lnet/minecraft/class_1634;)Ljava/util/Random; method_7183 access$000 - m (Lnet/minecraft/class_1634;)Lnet/minecraft/class_1335; method_7191 access$700 - m ()Z method_7176 isCharging - m (I)Z method_7184 getVexFlag - m (I)V method_7181 setLimitedLife - m (Lnet/minecraft/class_1634;)Lnet/minecraft/class_1308; method_7185 access$800 - m (Lnet/minecraft/class_2338;)V method_7188 setBoundOrigin - m ()Lnet/minecraft/class_1308; method_7182 getOwner - m (Lnet/minecraft/class_1308;)V method_7178 setOwner - m (Z)V method_7177 setCharging - m (Lnet/minecraft/class_1634;)Ljava/util/Random; method_7180 access$600 - m ()Lnet/minecraft/class_2338; method_7186 getBoundOrigin - m ()Lnet/minecraft/class_5132$class_5133; method_26925 func_234321_m_ - m (IZ)V method_7189 setVexFlag - m (Lnet/minecraft/class_1634;)Ljava/util/Random; method_7179 access$500 - m (Lnet/minecraft/class_1634;)Lnet/minecraft/class_1335; method_7174 access$100 - m (Lnet/minecraft/class_1634;)Ljava/util/Random; method_7190 access$300 - m (Lnet/minecraft/class_1634;)Ljava/util/Random; method_7187 access$400 - m (Lnet/minecraft/class_1634;)Lnet/minecraft/class_1335; method_7175 access$200 - f Z field_7409 limitedLifespan - f I field_7408 limitedLifeTicks - f Lnet/minecraft/class_1308; field_7411 owner - f Lnet/minecraft/class_2338; field_7407 boundOrigin - f Lnet/minecraft/class_2940; field_7410 VEX_FLAGS -c net/minecraft/class_1634$class_1635 net/minecraft/entity/monster/VexEntity$ChargeAttackGoal - f Lnet/minecraft/class_1634; field_7412 field_190852_a -c net/minecraft/class_1634$class_1636 net/minecraft/entity/monster/VexEntity$CopyOwnerTargetGoal - f Lnet/minecraft/class_1634; field_7413 field_190883_a - f Lnet/minecraft/class_4051; field_18132 field_220803_b -c net/minecraft/class_1634$class_1637 net/minecraft/entity/monster/VexEntity$MoveHelperController - f Lnet/minecraft/class_1634; field_7414 field_190884_i -c net/minecraft/class_1634$class_1638 net/minecraft/entity/monster/VexEntity$MoveRandomGoal - f Lnet/minecraft/class_1634; field_7415 field_190853_a -c net/minecraft/class_4985 net/minecraft/entity/passive/StriderEntity - m ()F method_26345 func_234316_eJ_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_4985; method_26343 func_241840_a - m ()V method_26347 func_234318_eL_ - m ()Lnet/minecraft/class_5132$class_5133; method_26924 func_234317_eK_ - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_1266;Lnet/minecraft/class_1308;Lnet/minecraft/class_1315;)Lnet/minecraft/class_1315; method_30336 func_242331_a - m ()Z method_26348 func_234315_eI_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_26344 func_234314_c_ - m ()Z method_30079 func_241398_eP_ - m (Z)V method_26349 func_234319_t_ - m ()Z method_30078 func_241397_eO_ - f Lnet/minecraft/class_1374; field_23242 field_234307_bB_ - f Lnet/minecraft/class_1391; field_23241 field_234306_bA_ - f Lnet/minecraft/class_1856; field_23244 field_234309_bv_ - f Lnet/minecraft/class_1856; field_23243 field_234308_bu_ - f Lnet/minecraft/class_2940; field_23247 field_234312_by_ - f Lnet/minecraft/class_2940; field_23246 field_234311_bx_ - f Lnet/minecraft/class_4980; field_23240 field_234313_bz_ - f Lnet/minecraft/class_2940; field_23245 field_234310_bw_ -c net/minecraft/class_4985$class_4988 net/minecraft/entity/passive/StriderEntity$LavaPathNavigator -c net/minecraft/class_4985$class_5494 net/minecraft/entity/passive/StriderEntity$MoveToLavaGoal - f Lnet/minecraft/class_4985; field_26632 field_242332_g -c net/minecraft/class_4985$1 net/minecraft/entity/passive/StriderEntity$1 -c net/minecraft/class_1640 net/minecraft/entity/monster/WitchEntity - m (Z)V method_7192 setDrinkingPotion - m ()Z method_7193 isDrinkingPotion - m (Lnet/minecraft/class_1309;)Z method_16474 func_213693_h - m ()Lnet/minecraft/class_5132$class_5133; method_26927 func_234323_eI_ - f Lnet/minecraft/class_3760; field_17284 field_213695_bD - f I field_7417 potionUseTimer - f Lnet/minecraft/class_2940; field_7419 IS_DRINKING - f Lnet/minecraft/class_3909; field_17283 field_213694_bC - f Lnet/minecraft/class_1322; field_7416 MODIFIER - f Ljava/util/UUID; field_7418 MODIFIER_UUID -c net/minecraft/class_1632 net/minecraft/entity/monster/VindicatorEntity - m ()Lnet/minecraft/class_5132$class_5133; method_26926 func_234322_eI_ - m ()Ljava/util/function/Predicate; method_20008 access$000 - m (Lnet/minecraft/class_1632;)Ljava/util/Random; method_20257 func_213679_a - m (Lnet/minecraft/class_1632;)Z method_7173 func_213680_b - m (Lnet/minecraft/class_1267;)Z method_20007 func_213678_a - f Ljava/util/function/Predicate; field_19014 field_213681_b - f Z field_7406 johnny -c net/minecraft/class_1632$class_3761 net/minecraft/entity/monster/VindicatorEntity$BreakDoorGoal -c net/minecraft/class_1632$class_1633 net/minecraft/entity/monster/VindicatorEntity$JohnnyAttackGoal -c net/minecraft/class_1632$class_4293 net/minecraft/entity/monster/VindicatorEntity$AttackGoal - f Lnet/minecraft/class_1632; field_19262 field_220724_d -c net/minecraft/class_5136 net/minecraft/entity/monster/ZoglinEntity - m (Lnet/minecraft/class_4095;)V method_26930 func_234330_c_ - m (Lnet/minecraft/class_1309;)Z method_26936 func_234337_j_ - m (Lnet/minecraft/class_4095;)V method_26929 func_234329_b_ - m (Lnet/minecraft/class_1309;)V method_26938 func_234338_k_ - m (Lnet/minecraft/class_4095;)V method_26928 func_234328_a_ - m ()V method_26933 func_234334_eN_ - m ()V method_26931 func_234332_eJ_ - m ()Z method_26939 func_234331_eI_ - m ()Lnet/minecraft/class_5132$class_5133; method_26937 func_234339_m_ - m ()Ljava/util/Optional; method_26934 func_234335_eQ_ - f Lnet/minecraft/class_2940; field_23734 field_234327_d_ - f Lcom/google/common/collect/ImmutableList; field_23733 field_234326_c_ - f Lcom/google/common/collect/ImmutableList; field_23731 field_234324_b_ - f I field_23732 field_234325_bu_ -c net/minecraft/class_1639 net/minecraft/entity/monster/WitherSkeletonEntity -c net/minecraft/class_1641 net/minecraft/entity/monster/ZombieVillagerEntity - m (Lnet/minecraft/class_3218;)V method_7197 cureZombie - m (Lnet/minecraft/class_3850;)V method_7195 setVillagerData - m ()I method_7194 getConversionProgress - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28369 func_234343_a_ - m (Lnet/minecraft/class_2487;)V method_16916 setOffers - m (Lnet/minecraft/class_2520;)V method_21649 setGossips - m (I)V method_19622 setEXP - m ()Z method_7198 isConverting - m (Ljava/util/UUID;I)V method_7199 startConverting - f Lnet/minecraft/class_2520; field_20299 gossips - f Lnet/minecraft/class_2940; field_7423 CONVERTING - f I field_7422 conversionTime - f Ljava/util/UUID; field_7421 converstionStarter - f Lnet/minecraft/class_2487; field_17047 offers - f I field_18877 xp - f Lnet/minecraft/class_2940; field_7420 VILLAGER_DATA -c net/minecraft/class_1642 net/minecraft/entity/monster/ZombieEntity - m (Lnet/minecraft/class_1642;)Ljava/util/Random; method_7210 func_234340_a_ - m ()Lnet/minecraft/class_5132$class_5133; method_26940 func_234342_eQ_ - m ()Z method_7206 isDrowning - m ()V method_6001 func_230291_eT_ - m ()Z method_7211 isBreakDoorsTaskSet - m (Lnet/minecraft/class_1267;)Z method_20009 func_213697_a - m ()Z method_7216 shouldBurnInDay - m ()Z method_7209 shouldDrown - m ()V method_7218 onDrowned - m (Ljava/util/Random;)Z method_29936 func_241399_a_ - m ()Lnet/minecraft/class_3414; method_7207 getStepSound - m (I)V method_7213 startDrowning - m (F)V method_7205 applyAttributeBonuses - m ()Lnet/minecraft/class_1799; method_7215 getSkullDrop - m ()Z method_7212 canBreakDoors - m (Z)V method_7201 setBreakDoorsAItask - m ()V method_7208 applyEntityAI - m (Lnet/minecraft/class_1299;)V method_7200 func_234341_c_ - f Ljava/util/function/Predicate; field_19015 HARD_DIFFICULTY_PREDICATE - f Lnet/minecraft/class_2940; field_7434 IS_CHILD - f Lnet/minecraft/class_2940; field_7425 DROWNING - f Lnet/minecraft/class_2940; field_7427 VILLAGER_TYPE - f Z field_7432 isBreakDoorsTaskSet - f I field_7424 drownedConversionTime - f I field_7426 inWaterTime - f Lnet/minecraft/class_1322; field_7430 BABY_SPEED_BOOST - f Ljava/util/UUID; field_7429 BABY_SPEED_BOOST_ID - f Lnet/minecraft/class_1339; field_7433 breakDoor -c net/minecraft/class_1642$class_1643 net/minecraft/entity/monster/ZombieEntity$AttackTurtleEggGoal - f Lnet/minecraft/class_1642; field_7437 field_203120_f -c net/minecraft/class_1642$class_1644 net/minecraft/entity/monster/ZombieEntity$GroupData - f Z field_7439 isChild - f Z field_25607 field_241400_b_ -c net/minecraft/class_4760 net/minecraft/entity/monster/HoglinEntity - m ()Z method_26944 func_234364_eK_ - m ()Lnet/minecraft/class_5132$class_5133; method_26943 func_234362_eI_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_24349 func_234361_c_ - m ()Z method_26945 func_234365_eM_ - m ()Z method_26946 func_234368_eV_ - m ()Z method_24658 func_234363_eJ_ - m (Lnet/minecraft/class_3218;)V method_26942 func_234360_a_ - m (Z)V method_26948 func_234370_t_ - m (Z)V method_26949 func_234371_u_ - m (Lnet/minecraft/class_3414;)V method_30081 func_241412_a_ - f Lnet/minecraft/class_2940; field_23737 field_234356_bw_ - f I field_22368 field_234357_bx_ - f I field_23735 field_234358_by_ - f Z field_23736 field_234359_bz_ - f Lcom/google/common/collect/ImmutableList; field_22366 field_234355_bv_ - f Lcom/google/common/collect/ImmutableList; field_22365 field_234354_bu_ -c net/minecraft/class_1590 net/minecraft/entity/monster/ZombifiedPiglinEntity - m (Lnet/minecraft/class_1590;)V method_29937 func_241405_a_ - m ()Lnet/minecraft/class_5132$class_5133; method_26941 func_234352_eU_ - m ()V method_29942 func_241411_fa_ - m (Lnet/minecraft/class_1590;)Z method_29938 func_241406_b_ - m (Lnet/minecraft/class_1590;)Z method_29939 func_241407_c_ - m (Lnet/minecraft/class_1590;)Z method_29940 func_241408_d_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_20682 func_234351_b_ - m ()V method_30080 func_241409_eY_ - m ()V method_29941 func_241410_eZ_ - m ()V method_29533 func_234353_eV_ - f Ljava/util/UUID; field_25381 field_234348_bx_ - f I field_25608 field_241401_bA_ - f Lnet/minecraft/class_4801; field_25382 field_234350_d_ - f Lnet/minecraft/class_4801; field_25379 field_234346_bv_ - f Lnet/minecraft/class_1322; field_7307 field_234349_c_ - f I field_7308 field_234345_bu_ - f Ljava/util/UUID; field_7311 field_234344_b_ - f Lnet/minecraft/class_4801; field_25609 field_241403_bz_ - f I field_25380 field_234347_bw_ -c net/minecraft/class_5137 net/minecraft/entity/monster/IFlinging - m ()I method_24657 func_230290_eL_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_26950 func_234403_a_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)V method_26951 func_234404_b_ -c net/minecraft/class_4835 net/minecraft/entity/monster/HoglinTasks - m (Lnet/minecraft/class_4760;)Z method_25947 func_234394_f_ - m (Lnet/minecraft/class_4760;)Z method_24686 func_234396_g_ - m (Lnet/minecraft/class_4760;)Z method_30085 func_241416_h_ - m (Lnet/minecraft/class_4760;)Z method_24691 func_234402_j_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24665 func_234378_a_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24672 func_234384_b_ - m (Lnet/minecraft/class_4760;)V method_24664 func_234377_a_ - m (Lnet/minecraft/class_4760;)Ljava/util/Optional; method_30083 func_234398_h_ - m ()Lnet/minecraft/class_4118; method_24662 func_234374_a_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24675 func_234387_c_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24678 func_234390_d_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24681 func_234393_e_ - m (Lnet/minecraft/class_4760;)Z method_24677 func_234386_c_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_4168;)Lnet/minecraft/class_3414; method_30084 func_234379_b_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24683 func_234395_f_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_4168;)Lnet/minecraft/class_3414; method_30082 func_241413_a_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24685 func_234397_g_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24687 func_234399_h_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_1309;)V method_24689 func_234401_i_ - m (Lnet/minecraft/class_4760;Lnet/minecraft/class_2338;)Z method_24669 func_234380_a_ - m (Lnet/minecraft/class_4760;)Ljava/util/Optional; method_24684 func_234392_e_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4760;)V method_24663 func_234375_a_ - m (Lnet/minecraft/class_4095;)V method_24679 func_234391_e_ - m (Lnet/minecraft/class_4095;)V method_24676 func_234388_d_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4760;)V method_24670 func_234381_b_ - m (Lnet/minecraft/class_4760;)Ljava/util/List; method_24690 func_234400_i_ - m (Lnet/minecraft/class_4095;)V method_24673 func_234385_c_ - m (Lnet/minecraft/class_4095;)V method_24666 func_234382_b_ - m (Lnet/minecraft/class_4095;)Lnet/minecraft/class_4095; method_24668 func_234376_a_ - f Lnet/minecraft/class_4801; field_25383 field_234373_b_ - f Lnet/minecraft/class_4801; field_22369 field_234372_a_ -c net/minecraft/class_4836 net/minecraft/entity/monster/piglin/PiglinEntity - m (Lnet/minecraft/class_1297;I)Lnet/minecraft/class_1297; method_26089 func_234417_b_ - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_24711 func_234436_k_ - m (Lnet/minecraft/class_1799;)V method_24844 func_234438_m_ - m (Lnet/minecraft/class_1799;)Z method_27085 func_234437_l_ - m (Lnet/minecraft/class_1799;)V method_24845 func_234439_n_ - m (Z)V method_26954 setCannotHunt - m (Z)V method_29274 func_234442_u_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1936;Lnet/minecraft/class_3730;Lnet/minecraft/class_2338;Ljava/util/Random;)Z method_24695 func_234418_b_ - m ()Lnet/minecraft/class_1799; method_24702 func_234432_eW_ - m ()Lnet/minecraft/class_5132$class_5133; method_26953 func_234420_eI_ - m (Lnet/minecraft/class_3414;)V method_30086 func_241417_a_ - m ()Z method_24703 func_234433_eX_ - m (Lnet/minecraft/class_1304;Lnet/minecraft/class_1799;)V method_24696 func_234419_d_ - m (Lnet/minecraft/class_1799;)Z method_24846 func_234440_o_ - m ()Z method_29272 func_234425_eN_ - f Lnet/minecraft/class_1322; field_22380 BABY_SPEED_MODIFIER - f Ljava/util/UUID; field_22379 BABY_SPEED_MODIFIER_IDENTIFIER - f Lcom/google/common/collect/ImmutableList; field_22381 field_234414_c_ - f Lnet/minecraft/class_2940; field_25164 DANCING - f Lnet/minecraft/class_1277; field_22371 inventory - f Lnet/minecraft/class_2940; field_22378 field_234409_bv_ - f Lnet/minecraft/class_2940; field_22377 field_234415_d_ - f Lcom/google/common/collect/ImmutableList; field_22376 field_234405_b_ - f Z field_23738 field_234407_bB_ -c net/minecraft/class_5418 net/minecraft/entity/monster/piglin/AbstractPiglinEntity - m ()Z method_26952 func_234422_eK_ - m ()V method_30238 func_241848_eP - m (Lnet/minecraft/class_3218;)V method_24694 func_234416_a_ - m ()Z method_30237 func_242338_eO - m ()Lnet/minecraft/class_4837; method_24705 func_234424_eM_ - m ()Z method_30234 func_242335_eK - m (Z)V method_30240 func_242340_t - m ()Z method_30235 func_242336_eL - m ()V method_30239 func_242339_eS - m ()Z method_30236 func_242337_eM - f Lnet/minecraft/class_2940; field_25758 field_242333_b - f I field_25759 field_242334_c -c net/minecraft/class_4837 net/minecraft/entity/monster/piglin/PiglinAction - m ()[Lnet/minecraft/class_4837; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4837; valueOf valueOf - f Lnet/minecraft/class_4837; field_22384 CROSSBOW_CHARGE - f Lnet/minecraft/class_4837; field_22383 CROSSBOW_HOLD - f Lnet/minecraft/class_4837; field_22385 ADMIRING_ITEM - f Lnet/minecraft/class_4837; field_25166 DANCING - f Lnet/minecraft/class_4837; field_22386 DEFAULT - f [Lnet/minecraft/class_4837; field_22387 $VALUES - f Lnet/minecraft/class_4837; field_25165 ATTACKING_WITH_MELEE_WEAPON -c net/minecraft/class_4838 net/minecraft/entity/monster/piglin/PiglinTasks - m (Lnet/minecraft/class_4095;)V method_24756 func_234495_c_ - m (Lnet/minecraft/class_4836;Ljava/util/List;Lnet/minecraft/class_243;)V method_24731 func_234476_a_ - m (Lnet/minecraft/class_4836;)Z method_24784 func_234534_u_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_4095;)Lnet/minecraft/class_4095; method_24732 func_234469_a_ - m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)V method_24759 func_234509_e_ - m (Lnet/minecraft/class_5418;)V method_29945 func_241430_f_ - m (Lnet/minecraft/class_4836;)Z method_29538 func_234528_o_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)V method_24767 func_234516_g_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)Z method_24775 func_234523_j_ - m (Lnet/minecraft/class_1309;)Z method_24761 func_234510_f_ - m ()Lnet/minecraft/class_4118; method_24717 func_234458_a_ - m (Lnet/minecraft/class_4836;)Z method_29277 func_234522_j_ - m (Lnet/minecraft/class_5418;)Ljava/util/Optional; method_29947 func_241432_i_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_4095;Lnet/minecraft/class_1309;)V method_29535 func_234462_a_ - m (Lnet/minecraft/class_1309;)Z method_24739 func_234482_b_ - m (Lnet/minecraft/class_5418;)Ljava/util/Optional; method_24782 func_234532_s_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_5418;)V method_24740 func_234484_b_ - m (Lnet/minecraft/class_4836;)Z method_24791 func_234452_B_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1799;)V method_24849 func_234498_c_ - m (Lnet/minecraft/class_1792;)Z method_24752 func_234499_c_ - m (Lnet/minecraft/class_4836;)Z method_24783 func_234533_t_ - m (Lnet/minecraft/class_4095;)V method_24743 func_234485_b_ - m (Lnet/minecraft/class_5418;)Z method_24766 func_234520_i_ - m (Lnet/minecraft/class_4836;)V method_24787 func_234536_x_ - m (Lnet/minecraft/class_5418;)V method_29943 func_241419_G_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_4168;)Lnet/minecraft/class_3414; method_30088 func_241426_b_ - m (Lnet/minecraft/class_4836;)Ljava/util/Optional; method_24777 func_234526_m_ - m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)V method_29946 func_241431_f_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)Z method_24755 func_234504_d_ - m (Lnet/minecraft/class_4836;)Ljava/util/Optional; method_29536 func_234515_g_ - m (Lnet/minecraft/class_4836;)Z method_29275 func_234457_G_ - m (Lnet/minecraft/class_4836;)Z method_24850 func_234455_E_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)V method_24773 func_234521_i_ - m (Lnet/minecraft/class_1299;)Z method_29534 func_234459_a_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1297;)Z method_24723 func_234467_a_ - m (Lnet/minecraft/class_4836;Ljava/util/List;)V method_24774 func_234490_b_ - m (Lnet/minecraft/class_1309;)Z method_24757 func_234506_e_ - m (Lnet/minecraft/class_4836;)Ljava/util/List; method_24780 func_234529_p_ - m (Lnet/minecraft/class_4095;)V method_24768 func_234511_f_ - m (Lnet/minecraft/class_4836;)Z method_24790 func_234451_A_ - m (Lnet/minecraft/class_4836;)V method_25948 func_234496_c_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1799;)Z method_24730 func_234474_a_ - m (Lnet/minecraft/class_1309;)Z method_24719 func_234460_a_ - m (Lnet/minecraft/class_4836;Z)V method_24741 func_234477_a_ - m (Lnet/minecraft/class_4836;)Ljava/util/Optional; method_30091 func_241429_d_ - m (Lnet/minecraft/class_1792;)Z method_24746 func_234492_b_ - m ()Lnet/minecraft/class_4809; method_24747 func_234500_d_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1657;Ljava/util/List;)V method_24727 func_234472_a_ - m (Lnet/minecraft/class_4095;)V method_24725 func_234464_a_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_4168;)Lnet/minecraft/class_3414; method_30087 func_241422_a_ - m (Lnet/minecraft/class_4836;)Ljava/util/List; method_24776 func_234524_k_ - m (Lnet/minecraft/class_5418;)Z method_30241 func_242341_g - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)V method_24724 func_234468_a_ - m (Lnet/minecraft/class_4836;)Z method_29537 func_234525_l_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_4095;)V method_24751 func_234488_b_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_24728 func_234471_a_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_29276 func_234461_a_ - m (Lnet/minecraft/class_4836;)V method_24781 func_234531_r_ - m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)V method_24750 func_234497_c_ - m (Lnet/minecraft/class_5418;)V method_24762 func_234518_h_ - m (Lnet/minecraft/class_4836;)Z method_24917 func_234454_D_ - m (ZLnet/minecraft/class_1657;Lnet/minecraft/class_4836;)Z method_24745 func_234491_a_ - m (Lnet/minecraft/class_4836;)V method_24758 func_234512_f_ - m (Lnet/minecraft/class_1309;)Z method_24769 func_234517_h_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1309;)V method_24771 func_234519_h_ - m (Lnet/minecraft/class_5418;)Ljava/util/List; method_26350 func_234530_q_ - m (Lnet/minecraft/class_4836;)Lnet/minecraft/class_243; method_24788 func_234537_y_ - m (Lnet/minecraft/class_4836;Ljava/util/List;)V method_24772 func_234475_a_ - m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1657;)V method_29944 func_241421_a_ - m (Lnet/minecraft/class_1542;)Lnet/minecraft/class_1799; method_24848 func_234465_a_ - m (Lnet/minecraft/class_4836;)Z method_24789 func_234538_z_ - m (Lnet/minecraft/class_1309;)V method_24753 func_234501_d_ - m ()Lnet/minecraft/class_4821; method_24737 func_234505_e_ - m (Lnet/minecraft/class_4836;)V method_24722 func_234486_b_ - m (Lnet/minecraft/class_4095;)V method_24764 func_234507_e_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1799;)Z method_27086 func_234489_b_ - m ()Lnet/minecraft/class_4809; method_30090 func_241428_d_ - m (Lnet/minecraft/class_1792;)Z method_24735 func_234480_a_ - m (Lnet/minecraft/class_1657;Z)V method_24733 func_234478_a_ - m ()Lnet/minecraft/class_4121; method_24738 func_234493_c_ - m (Lnet/minecraft/class_4836;)Z method_24785 func_234535_v_ - m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)V method_24742 func_234487_b_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1542;)V method_24726 func_234470_a_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_24720 func_234483_b_ - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_4836;)V method_24734 func_234479_a_ - m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)V method_24763 func_234513_f_ - m (Lnet/minecraft/class_4836;)Z method_24754 func_234508_e_ - m (Lnet/minecraft/class_1309;)Z method_24765 func_234514_g_ - m ()Lnet/minecraft/class_4118; method_24718 func_234481_b_ - m (Lnet/minecraft/class_5418;)Z method_24716 func_234456_F_ - m (Lnet/minecraft/class_4836;)V method_24736 func_234466_a_ - m (Lnet/minecraft/class_1309;)Z method_24748 func_234494_c_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_5418;)V method_24721 func_234463_a_ - m (Lnet/minecraft/class_4095;)V method_24760 func_234502_d_ - m (Lnet/minecraft/class_4836;Lnet/minecraft/class_1799;)V method_30089 func_241427_c_ - m (Lnet/minecraft/class_4836;)Z method_24714 func_234453_C_ - f Lnet/minecraft/class_4801; field_25698 field_241418_g_ - f Lnet/minecraft/class_4801; field_22389 field_234446_c_ - f Lnet/minecraft/class_4801; field_25384 field_234449_f_ - f Lnet/minecraft/class_4801; field_22388 field_234445_b_ - f Ljava/util/Set; field_22392 field_234450_g_ - f Lnet/minecraft/class_4801; field_22391 field_234448_e_ - f Lnet/minecraft/class_1792; field_23826 field_234444_a_ - f Lnet/minecraft/class_4801; field_22390 field_234447_d_ -c net/minecraft/class_5420 net/minecraft/entity/monster/piglin/PiglinBruteBrain - m (Lnet/minecraft/class_1309;)Z method_30245 func_242347_a - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_30246 func_242348_a - m ()Lnet/minecraft/class_4118; method_30244 func_242346_a - m ()Lnet/minecraft/class_4118; method_30254 func_242356_b - m (Lnet/minecraft/class_5419;)V method_30250 func_242352_a - m (Lnet/minecraft/class_5419;)V method_30256 func_242358_b - m (Lnet/minecraft/class_5419;Lnet/minecraft/class_1309;)Z method_30259 func_242361_c - m (Lnet/minecraft/class_5419;Lnet/minecraft/class_4168;)V method_30253 func_242355_a - m (Lnet/minecraft/class_5419;)V method_30258 func_242360_c - m (Lnet/minecraft/class_5419;)V method_30261 func_242363_d - m (Lnet/minecraft/class_5419;Lnet/minecraft/class_1309;)V method_30251 func_242353_a - m (Lnet/minecraft/class_5419;Lnet/minecraft/class_4095;)V method_30260 func_242362_c - m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)Z method_30255 func_242357_b - m (Lnet/minecraft/class_5419;Lnet/minecraft/class_4095;)Lnet/minecraft/class_4095; method_30252 func_242354_a - m (Lnet/minecraft/class_5419;Lnet/minecraft/class_4095;)V method_30262 func_242364_d - m (Lnet/minecraft/class_5418;Lnet/minecraft/class_1309;)Z method_30248 func_242350_a - m (Lnet/minecraft/class_5418;)Ljava/util/Optional; method_30247 func_242349_a - m (Lnet/minecraft/class_5419;Lnet/minecraft/class_4095;)V method_30257 func_242359_b - m (Lnet/minecraft/class_5418;Lnet/minecraft/class_4140;)Ljava/util/Optional; method_30249 func_242351_a -c net/minecraft/class_5419 net/minecraft/entity/monster/piglin/PiglinBruteEntity - m ()V method_30243 func_242345_eT - m ()Lnet/minecraft/class_5132$class_5133; method_30242 func_242344_eS - f Lcom/google/common/collect/ImmutableList; field_25761 field_242343_d - f Lcom/google/common/collect/ImmutableList; field_25760 field_242342_bo -c net/minecraft/class_4823 net/minecraft/entity/monster/piglin/AdmireItemTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_24610 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;)Z method_24609 shouldExecute - f I field_22324 field_234540_b_ -c net/minecraft/class_4819 net/minecraft/entity/monster/piglin/FinishedHuntTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_24596 startExecuting - m (Lnet/minecraft/class_4836;)Z method_24595 func_234539_a_ -c net/minecraft/class_4827 net/minecraft/entity/monster/piglin/ForgetAdmiredItemTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_24620 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;)Z method_24619 shouldExecute - f I field_22328 field_234541_b_ -c net/minecraft/class_4826 net/minecraft/entity/monster/piglin/StartHuntTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_24618 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;)Z method_24617 shouldExecute -c net/minecraft/class_4830 net/minecraft/entity/monster/piglin/StartAdmiringItemTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;)Z method_24835 shouldExecute - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_24630 startExecuting -c net/minecraft/class_5430 net/minecraft/entity/monster/piglin/StopReachingItemTask - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;J)V method_30338 startExecuting - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_4836;)Z method_30337 shouldExecute - f I field_25816 field_242366_c - f I field_25815 field_242365_b -c net/minecraft/class_4274 net/minecraft/world/spawner/CatSpawner - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3218;)I method_20262 spawnCat - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)I method_20260 func_221123_a - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)I method_20263 func_221121_a - f I field_19171 field_221125_a -c net/minecraft/class_3988 net/minecraft/entity/merchant/villager/AbstractVillagerEntity - m ()V method_19181 resetCustomer - m (Z)Lnet/minecraft/class_3414; method_18012 getVillagerYesNoSound - m ()V method_20010 playCelebrateSound - m (Lnet/minecraft/class_1914;)V method_18008 onVillagerTrade - m ()I method_20506 getShakeHeadTicks - m (I)V method_20507 setShakeHeadTicks - m ()Z method_18009 hasCustomer - m (Lnet/minecraft/class_2394;)V method_18007 spawnParticles - m ()Lnet/minecraft/class_1277; method_18011 getVillagerInventory - m (Lnet/minecraft/class_1916;[Lnet/minecraft/class_3853$class_1652;I)V method_19170 addTrades - m ()V method_7237 populateTradeData - f Lnet/minecraft/class_1277; field_17723 villagerInventory - f Lnet/minecraft/class_1916; field_17721 offers - f Lnet/minecraft/class_1657; field_17722 customer - f Lnet/minecraft/class_2940; field_19295 SHAKE_HEAD_TICKS -c net/minecraft/class_1645 net/minecraft/entity/NPCMerchant - f Lnet/minecraft/class_1916; field_7442 offers - f I field_18525 xp - f Lnet/minecraft/class_1657; field_7441 customer - f Lnet/minecraft/class_1725; field_7443 merchantInventory -c net/minecraft/class_1646 net/minecraft/entity/merchant/villager/VillagerEntity - m ()I method_19189 getFoodValueFromInventory - m (Lnet/minecraft/class_3218;)Lnet/minecraft/class_1439; method_19190 trySpawnGolem - m (Lnet/minecraft/class_4140;)V method_19176 resetMemoryPoint - m ()V method_21724 calculateDemandOfOffers - m (J)Z method_20741 hasSleptAndWorkedRecently - m ()Z method_20824 canRestock - m ()V method_19187 resetAllSpecialPrices - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28370 func_234547_a_ - m (Lnet/minecraft/class_3218;)V method_19179 resetBrain - m (I)V method_19193 decrFoodLevel - m ()Z method_7239 wantsMoreFood - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4158;)Z method_19520 func_234546_a_ - m (Lnet/minecraft/class_1657;)V method_19192 recalculateSpecialPricesFor - m ()Z method_29279 shouldAssignProfessionOnSpawn - m ()Lnet/minecraft/class_5132$class_5133; method_26955 registerAttributes - m ()Z method_7234 canAbondonItems - m (Lnet/minecraft/class_1309;)Z method_20699 func_223349_j_ - m ()Z method_20822 canResetStock - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4158;)Z method_19521 func_213771_b - m (Lnet/minecraft/class_3850;)V method_7221 setVillagerData - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1297;Lnet/minecraft/class_1309;)V method_20691 func_223342_a_ - m (Lnet/minecraft/class_1297;)V method_20690 sawMurder - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1646;J)V method_19177 func_242368_a - m ()V method_20821 func_223718_eH - m ()Z method_20698 isHungry - m ()Z method_19188 canLevelUp - m (J)Z method_20687 canSpawnGolems - m ()V method_30958 func_242369_fq - m ()V method_19185 eat - m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_4140;Lnet/minecraft/class_4208;)V method_19178 func_213752_a_ - m ()V method_21723 resetOffersAndAdjustForDemand - m ()Z method_20823 hasUsedOffer - m (Lnet/minecraft/class_1657;)I method_20594 getPlayerReputation - m (Lnet/minecraft/class_1277;Ljava/util/Map$Entry;)I method_19172 func_226553_a_ - m (I)V method_19625 setXp - m ()V method_20264 shakeHead - m ()Z method_19623 isFarmItemInInventory - m (Lnet/minecraft/class_1916;)V method_16917 setOffers - m ()Lnet/minecraft/class_4136; method_21651 getGossip - m ()V method_20697 func_223346_ep - m (Lnet/minecraft/class_2338;DD)Lnet/minecraft/class_2338; method_30023 getValidGolemSpawnPosition - m ()V method_19183 playWorkstationSound - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4158;)Z method_19522 func_213769_c - m (Lnet/minecraft/class_3218;JI)V method_20688 func_242367_a - m (Lnet/minecraft/class_4139;)Z method_20593 func_223103_a_ - m (Lnet/minecraft/class_1646;Lnet/minecraft/class_4158;)Z method_29278 func_213772_a - m ()V method_20696 tickGossip - m (Lnet/minecraft/class_4095;)V method_19174 initBrain - m ()V method_19182 restock - m (JLnet/minecraft/class_1646;)Z method_20693 func_226554_b_ - m (Lnet/minecraft/class_1657;)V method_19191 displayMerchantGui - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1296;)Lnet/minecraft/class_1646; method_7225 func_241840_a - m (Lnet/minecraft/class_2520;)V method_21650 setGossips - m ()V method_16918 levelUp - f Lcom/google/common/collect/ImmutableList; field_18539 SENSOR_TYPES - f Ljava/util/Map; field_18526 FOOD_VALUES - f Ljava/util/Set; field_18527 ALLOWED_INVENTORY_ITEMS - f J field_20332 lastRestockDayTime - f J field_18537 lastRestock - f Lnet/minecraft/class_1657; field_18530 previousCustomer - f I field_18536 xp - f Lnet/minecraft/class_2940; field_7445 VILLAGER_DATA - f Z field_18529 leveledUp - f Lnet/minecraft/class_4136; field_18534 gossip - f B field_18533 foodLevel - f Z field_25167 assignProfessionWhenSpawned - f Ljava/util/Map; field_18851 JOB_SITE_PREDICATE_MAP - f I field_18528 timeUntilReset - f Lcom/google/common/collect/ImmutableList; field_18538 MEMORY_TYPES - f I field_19427 restocksToday - f J field_19357 lastGossipDecay - f J field_18535 lastGossipTime -c net/minecraft/class_1655 net/minecraft/entity/INPC -c net/minecraft/class_3851 net/minecraft/entity/villager/IVillagerDataHolder - m ()Lnet/minecraft/class_3850; method_7231 getVillagerData -c net/minecraft/class_3850 net/minecraft/entity/merchant/villager/VillagerData - m (I)I method_19195 getExperienceNext - m (Lnet/minecraft/class_3850;)Lnet/minecraft/class_3852; method_28373 func_234557_b_ - m (Lnet/minecraft/class_3850;)Lnet/minecraft/class_3854; method_28374 func_234558_c_ - m ()Lnet/minecraft/class_3852; method_16924 getProfession - m ()I method_16925 getLevel - m ()Lnet/minecraft/class_3852; method_29948 func_241438_d_ - m ()Lnet/minecraft/class_3854; method_29949 func_241439_e_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28372 func_234556_a_ - m (I)Z method_19196 canLevelUp - m (I)Lnet/minecraft/class_3850; method_16920 withLevel - m (I)I method_19194 getExperiencePrevious - m (Lnet/minecraft/class_3854;)Lnet/minecraft/class_3850; method_16922 withType - m ()Lnet/minecraft/class_3854; method_16919 getType - m (Lnet/minecraft/class_3852;)Lnet/minecraft/class_3850; method_16921 withProfession - m (Lnet/minecraft/class_3850;)Ljava/lang/Integer; method_28371 func_234555_a_ - f I field_17050 level - f Lcom/mojang/serialization/Codec; field_24669 CODEC - f [I field_18540 LEVEL_EXPERIENCE_AMOUNTS - f Lnet/minecraft/class_3854; field_17048 type - f Lnet/minecraft/class_3852; field_17049 profession -c net/minecraft/class_3853 net/minecraft/entity/merchant/villager/VillagerTrades - m (Ljava/util/HashMap;)V method_16929 func_221237_a - m (Lcom/google/common/collect/ImmutableMap;)Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; method_16928 gatAsIntMap - f Ljava/util/Map; field_17067 VILLAGER_DEFAULT_TRADES - f Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; field_17724 field_221240_b -c net/minecraft/class_3853$class_4160 net/minecraft/entity/merchant/villager/VillagerTrades$DyedArmorForEmeraldsTrade - m (Ljava/util/Random;)Lnet/minecraft/class_1769; method_19200 getRandomDyeItem - f I field_18545 price - f Lnet/minecraft/class_1792; field_18544 tradeItem - f I field_18546 maxUses - f I field_18547 xpValue -c net/minecraft/class_3853$class_4161 net/minecraft/entity/merchant/villager/VillagerTrades$EmeraldForItemsTrade - f Lnet/minecraft/class_1792; field_18548 tradeItem - f I field_18550 maxUses - f F field_18552 priceMultiplier - f I field_18551 xpValue - f I field_18549 count -c net/minecraft/class_3853$class_4162 net/minecraft/entity/merchant/villager/VillagerTrades$EmeraldForVillageTypeItemTrade - m (Ljava/util/Map;Lnet/minecraft/class_3854;)Z method_19202 func_221188_a - m (Lnet/minecraft/class_3854;)V method_19201 func_221189_a - f I field_18554 count - f I field_18555 maxUses - f I field_18556 xpValue - f Ljava/util/Map; field_18553 villagerTypeItems -c net/minecraft/class_3853$class_1648 net/minecraft/entity/merchant/villager/VillagerTrades$EnchantedBookForEmeraldsTrade - f I field_18557 xpValue -c net/minecraft/class_3853$class_4166 net/minecraft/entity/merchant/villager/VillagerTrades$SuspiciousStewForEmeraldTrade - f F field_18580 priceMultiplier - f I field_18579 xpValue - f Lnet/minecraft/class_1291; field_18577 effect - f I field_18578 duration -c net/minecraft/class_3853$class_4167 net/minecraft/entity/merchant/villager/VillagerTrades$ItemWithPotionForEmeraldsAndItemsTrade - m (Lnet/minecraft/class_1842;)Z method_19203 func_221218_a - f I field_18585 xpValue - f I field_18582 potionCount - f F field_18588 priceMultiplier - f I field_18587 buyingItemCount - f Lnet/minecraft/class_1792; field_18586 buyingItem - f I field_18583 emeraldCount - f I field_18584 maxUses - f Lnet/minecraft/class_1799; field_18581 potionStack -c net/minecraft/class_3853$class_1654 net/minecraft/entity/merchant/villager/VillagerTrades$EmeraldForMapTrade - f Lnet/minecraft/class_3195; field_7474 structureName - f I field_18590 maxUses - f I field_18591 xpValue - f I field_18589 count - f Lnet/minecraft/class_20$class_21; field_7473 mapDecorationType -c net/minecraft/class_3853$class_4163 net/minecraft/entity/merchant/villager/VillagerTrades$EnchantedItemForEmeraldsTrade - f F field_18562 priceMultiplier - f I field_18561 xpValue - f Lnet/minecraft/class_1799; field_18558 sellingStack - f I field_18559 emeraldCount - f I field_18560 maxUses -c net/minecraft/class_3853$class_1652 net/minecraft/entity/merchant/villager/VillagerTrades$ITrade - m (Lnet/minecraft/class_1297;Ljava/util/Random;)Lnet/minecraft/class_1914; method_7246 getOffer -c net/minecraft/class_3853$class_4164 net/minecraft/entity/merchant/villager/VillagerTrades$ItemsForEmeraldsAndItemsTrade - f I field_18567 sellingItemCount - f Lnet/minecraft/class_1799; field_18563 buyingItem - f I field_18568 maxUses - f F field_18570 priceMultiplier - f I field_18569 xpValue - f I field_18564 buyingItemCount - f I field_18565 emeraldCount - f Lnet/minecraft/class_1799; field_18566 sellingItem -c net/minecraft/class_3853$class_4165 net/minecraft/entity/merchant/villager/VillagerTrades$ItemsForEmeraldsTrade - f I field_18572 emeraldCount - f I field_18573 sellingItemCount - f I field_18574 maxUses - f F field_18576 priceMultiplier - f I field_18575 xpValue - f Lnet/minecraft/class_1799; field_18571 sellingItem -c net/minecraft/class_3852 net/minecraft/entity/merchant/villager/VillagerProfession - m (Ljava/lang/String;Lnet/minecraft/class_4158;Lcom/google/common/collect/ImmutableSet;Lcom/google/common/collect/ImmutableSet;Lnet/minecraft/class_3414;)Lnet/minecraft/class_3852; method_19197 register - m ()Lnet/minecraft/class_3414; method_22384 getSound - m ()Lnet/minecraft/class_4158; method_19198 getPointOfInterest - m ()Ljava/lang/String; toString toString - m ()Lcom/google/common/collect/ImmutableSet; method_19199 getSpecificItems - m ()Lcom/google/common/collect/ImmutableSet; method_19630 getRelatedWorldBlocks - m (Ljava/lang/String;Lnet/minecraft/class_4158;Lnet/minecraft/class_3414;)Lnet/minecraft/class_3852; method_16926 register - f Lnet/minecraft/class_4158; field_18542 pointOfInterest - f Lnet/minecraft/class_3852; field_17051 NONE - f Lnet/minecraft/class_3852; field_17054 CARTOGRAPHER - f Lnet/minecraft/class_3852; field_17052 ARMORER - f Lnet/minecraft/class_3852; field_17053 BUTCHER - f Lcom/google/common/collect/ImmutableSet; field_18543 specificItems - f Ljava/lang/String; field_18541 name - f Lcom/google/common/collect/ImmutableSet; field_18880 relatedWorldBlocks - f Lnet/minecraft/class_3852; field_17062 NITWIT - f Lnet/minecraft/class_3852; field_17060 LIBRARIAN - f Lnet/minecraft/class_3852; field_17061 MASON - f Lnet/minecraft/class_3852; field_17064 TOOLSMITH - f Lnet/minecraft/class_3852; field_17065 WEAPONSMITH - f Lnet/minecraft/class_3852; field_17063 SHEPHERD - f Lnet/minecraft/class_3852; field_17056 FARMER - f Lnet/minecraft/class_3852; field_17057 FISHERMAN - f Lnet/minecraft/class_3852; field_17055 CLERIC - f Lnet/minecraft/class_3852; field_17059 LEATHERWORKER - f Lnet/minecraft/class_3414; field_20633 sound - f Lnet/minecraft/class_3852; field_17058 FLETCHER -c net/minecraft/class_3989 net/minecraft/entity/merchant/villager/WanderingTraderEntity - m ()I method_18014 getDespawnDelay - m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_1408; method_18064 func_213729_d - m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_1408; method_18066 func_213731_e - m (Lnet/minecraft/class_3989;)Z method_18068 func_213733_g - m ()Lnet/minecraft/class_2338; method_18065 getWanderTarget - m (Lnet/minecraft/class_3989;)Z method_18067 func_213736_f - m ()V method_20508 handleDespawn - m (I)V method_18013 setDespawnDelay - m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_1408; method_18061 func_213732_a - m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_2338; method_18062 func_213734_b - m (Lnet/minecraft/class_3989;)Lnet/minecraft/class_1408; method_18063 func_213730_c - m (Lnet/minecraft/class_2338;)V method_18069 setWanderTarget - f Lnet/minecraft/class_2338; field_17758 wanderTarget - f I field_17725 despawnDelay -c net/minecraft/class_3989$class_3994 net/minecraft/entity/merchant/villager/WanderingTraderEntity$MoveToGoal - m (Lnet/minecraft/class_2338;D)Z method_18070 isWithinDistance - f Lnet/minecraft/class_3989; field_17762 field_220850_d - f D field_17761 speed - f D field_17760 maxDistance - f Lnet/minecraft/class_3989; field_17759 traderEntity -c net/minecraft/class_3854 net/minecraft/entity/villager/VillagerType - m (Ljava/lang/String;)Lnet/minecraft/class_3854; method_16931 register - m (Ljava/util/HashMap;)V method_16932 func_221172_a - m ()Ljava/lang/String; toString toString - m (Ljava/util/Optional;)Lnet/minecraft/class_3854; method_16930 func_242371_a - m (Lnet/minecraft/class_5321;)Ljava/util/Optional; method_31080 func_242372_a - f Lnet/minecraft/class_3854; field_17076 SWAMP - f Lnet/minecraft/class_3854; field_17077 TAIGA - f Lnet/minecraft/class_3854; field_17075 SNOW - f Lnet/minecraft/class_3854; field_17071 DESERT - f Ljava/util/Map; field_17078 BY_BIOME - f Ljava/lang/String; field_26690 field_242370_h - f Lnet/minecraft/class_3854; field_17074 SAVANNA - f Lnet/minecraft/class_3854; field_17072 JUNGLE - f Lnet/minecraft/class_3854; field_17073 PLAINS -c net/minecraft/class_3990 net/minecraft/world/spawner/WanderingTraderSpawner - m (Lnet/minecraft/class_2338;)Z method_19631 func_221241_a - m (Lnet/minecraft/class_3218;)Z method_18018 func_234562_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_3989;I)V method_18016 func_242373_a - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_23279 func_234560_a_ - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2338; method_18017 func_234561_a_ - f I field_17728 field_221248_c - f Ljava/util/Random; field_17726 random - f I field_17730 field_221250_e - f Lnet/minecraft/class_5268; field_24387 field_234559_b_ - f I field_17729 field_221249_d -c net/minecraft/class_1656 net/minecraft/entity/player/PlayerAbilities - m ()F method_7252 getFlySpeed - m (Lnet/minecraft/class_2487;)V method_7251 write - m (F)V method_7248 setFlySpeed - m (Lnet/minecraft/class_2487;)V method_7249 read - m (F)V method_7250 setWalkSpeed - m ()F method_7253 getWalkSpeed - f Z field_7477 isCreativeMode - f Z field_7478 allowFlying - f Z field_7479 isFlying - f Z field_7480 disableDamage - f F field_7482 walkSpeed - f Z field_7476 allowEdit - f F field_7481 flySpeed -c net/minecraft/class_1661 net/minecraft/entity/player/PlayerInventory - m ()I method_7364 getTimesChanged - m (ILnet/minecraft/class_1799;)Z method_7367 add - m (Lnet/minecraft/class_1799;)I method_7395 getSlotFor - m ()I method_7386 getBestHotbarSlot - m ()Lnet/minecraft/class_1799; method_7391 getCurrentItem - m (ILnet/minecraft/class_1799;)I method_7385 addResource - m (I)Z method_7380 isHotbar - m ()I method_7368 getHotbarSize - m (Lnet/minecraft/class_1662;)V method_7387 accountStacks - m (Ljava/util/function/Predicate;ILnet/minecraft/class_1263;)I method_29280 func_234564_a_ - m ()I method_7376 getFirstEmptyStack - m (Lnet/minecraft/class_1799;)Z method_7379 hasItemStack - m (Lnet/minecraft/class_1282;F)V method_7375 func_234563_a_ - m (I)V method_7365 pickItem - m (I)Lnet/minecraft/class_1799; method_7372 armorItemInSlot - m (Lnet/minecraft/class_1799;)V method_7396 setItemStack - m (Lnet/minecraft/class_1799;)V method_7378 deleteStack - m (Lnet/minecraft/class_1799;)Z method_7394 addItemStackToInventory - m (Lnet/minecraft/class_2499;)Lnet/minecraft/class_2499; method_7384 write - m (ILnet/minecraft/class_1657;)V method_20265 func_214023_a - m (Lnet/minecraft/class_2499;)V method_7397 read - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7393 canMergeStacks - m (Lnet/minecraft/class_2680;)F method_7370 getDestroySpeed - m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_7389 func_210164_j - m (Lnet/minecraft/class_1799;)I method_7366 storePartialItemStack - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7392 stackEqualExact - m (Lnet/minecraft/class_1799;)V method_7374 setPickedItemStack - m (D)V method_7373 changeCurrentItem - m ()Lnet/minecraft/class_1799; method_7399 getItemStack - m (Lnet/minecraft/class_1799;)I method_7371 findSlotMatchingUnusedItem - m ()V method_7381 tick - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;)V method_7398 placeItemBackInInventory - m (Lnet/minecraft/class_3494;)Z method_7382 hasTag - m ()V method_7388 dropAllItems - m (Lnet/minecraft/class_1661;)V method_7377 copyInventory - m (Lnet/minecraft/class_1799;)I method_7390 storeItemStack - f Lnet/minecraft/class_1799; field_7549 itemStack - f I field_7542 timesChanged - f Lnet/minecraft/class_2371; field_7548 armorInventory - f Lnet/minecraft/class_2371; field_7544 offHandInventory - f Lnet/minecraft/class_2371; field_7547 mainInventory - f I field_7545 currentItem - f Ljava/util/List; field_7543 allInventories - f Lnet/minecraft/class_1657; field_7546 player -c net/minecraft/class_1659 net/minecraft/entity/player/ChatVisibility - m (Ljava/lang/String;)Lnet/minecraft/class_1659; valueOf valueOf - m (I)[Lnet/minecraft/class_1659; method_7361 func_221253_b - m (I)Lnet/minecraft/class_1659; method_7360 getValue - m ()Ljava/lang/String; method_7359 getResourceKey - m ()I method_7362 getId - m ()[Lnet/minecraft/class_1659; values values - f Lnet/minecraft/class_1659; field_7538 FULL - f [Lnet/minecraft/class_1659; field_7537 $VALUES - f Ljava/lang/String; field_7540 resourceKey - f I field_7535 id - f [Lnet/minecraft/class_1659; field_7534 field_221255_d - f Lnet/minecraft/class_1659; field_7539 SYSTEM - f Lnet/minecraft/class_1659; field_7536 HIDDEN -c net/minecraft/class_1664 net/minecraft/entity/player/PlayerModelPart - m ()Ljava/lang/String; method_7429 getPartName - m (Ljava/lang/String;)Lnet/minecraft/class_1664; valueOf valueOf - m ()Lnet/minecraft/class_2561; method_7428 getName - m ()I method_7430 getPartMask - m ()[Lnet/minecraft/class_1664; values values - f I field_7560 partMask - f Lnet/minecraft/class_1664; field_7570 RIGHT_SLEEVE - f Lnet/minecraft/class_1664; field_7564 JACKET - f Lnet/minecraft/class_1664; field_7568 LEFT_SLEEVE - f Ljava/lang/String; field_7569 partName - f Lnet/minecraft/class_1664; field_7565 RIGHT_PANTS_LEG - f Lnet/minecraft/class_1664; field_7563 HAT - f Lnet/minecraft/class_1664; field_7566 LEFT_PANTS_LEG - f [Lnet/minecraft/class_1664; field_7562 $VALUES - f I field_7561 partId - f Lnet/minecraft/class_1664; field_7559 CAPE - f Lnet/minecraft/class_2561; field_7567 name -c net/minecraft/class_1657 net/minecraft/entity/player/PlayerEntity - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_7287 interactOn - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_1799;)Z method_7343 canPlayerEdit - m (Lnet/minecraft/class_2625;)V method_7311 openSignEditor - m (Ljava/util/Collection;)I method_7333 resetRecipes - m ()V method_7350 resetCooldown - m ()Lnet/minecraft/class_269; method_7327 getWorldScoreboard - m (I)V method_7316 addExperienceLevel - m (Lnet/minecraft/class_2338;)Lcom/mojang/datafixers/util/Either; method_7269 trySleep - m ()Z method_7302 hasReducedDebug - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20266 func_213833_a - m (DDD)V method_7282 addMovementStat - m (Lnet/minecraft/class_1934;)V method_7336 setGameType - m ()Z method_7294 isAllowEdit - m ()V method_7331 respawnPlayer - m (Lnet/minecraft/class_3445;)V method_7259 addStat - m (Lnet/minecraft/class_2338;)Z method_7326 isNormalCube - m ()V method_7330 updateTurtleHelmet - m (I)V method_7320 setScore - m ()I method_7272 getScore - m ()Z method_21824 wantsToStopRiding - m ()Z method_23668 tryToStartFallFlying - m ()Z method_7337 isCreative - m (Z)Z method_7332 canEat - m (Lnet/minecraft/class_2487;)V method_7345 setRightShoulderEntity - m (Lnet/minecraft/class_1297;)V method_7277 onCriticalHit - m ()I method_7349 xpBarCap - m (Ljava/util/Collection;)I method_7254 unlockRecipes - m (Lnet/minecraft/class_3445;)V method_7266 takeStat - m ()Z method_7340 isUser - m (I)V method_7255 giveExperiencePoints - m (Ljava/lang/String;Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_7321 func_234565_a_ - m (Lnet/minecraft/class_2680;)F method_7351 getDigSpeed - m (Lnet/minecraft/class_5250;)Lnet/minecraft/class_5250; method_7299 addTellEvent - m (Lnet/minecraft/class_2960;)V method_7281 addStat - m ()Z method_21825 isStayingOnGroundSurface - m ()V method_7313 updateCape - m (I)V method_7285 addScore - m ()Lnet/minecraft/class_1730; method_7274 getInventoryEnderChest - m ()V method_23669 startFallFlying - m ([Lnet/minecraft/class_2960;)V method_7335 unlockRecipes - m (Lnet/minecraft/class_1297;)V method_17853 func_226562_d_ - m (Z)V method_7268 setReducedDebug - m ()Lnet/minecraft/class_5132$class_5133; method_26956 func_234570_el_ - m (Lnet/minecraft/class_2487;)V method_7267 playShoulderEntityAmbientSound - m (ZZ)V method_7358 stopSleepInBed - m ()V method_7355 sendPlayerAbilities - m ()F method_7292 getLuck - m (Lnet/minecraft/class_1496;Lnet/minecraft/class_1263;)V method_7291 openHorseInventory - m (Lnet/minecraft/class_1799;)Z method_7270 addItemStackToInventory - m ()Lnet/minecraft/class_2487; method_7356 getLeftShoulderEntity - m (Lnet/minecraft/class_1299;)Z method_17852 func_213830_c - m (Lnet/minecraft/class_2593;)V method_7323 openCommandBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1934;)Z method_21701 blockActionRestricted - m (Lnet/minecraft/class_1799;ZZ)Lnet/minecraft/class_1542; method_7329 dropItem - m (Lnet/minecraft/class_3908;)Ljava/util/OptionalInt; method_17355 openContainer - m ()Lcom/mojang/authlib/GameProfile; method_7334 getGameProfile - m (Lnet/minecraft/class_3445;I)V method_7342 addStat - m ()Lnet/minecraft/class_1796; method_7265 createCooldownTracker - m ()V method_7262 spawnShoulderEntities - m ()V method_7293 destroyVanishingCursedItems - m (Lcom/mojang/authlib/GameProfile;)Ljava/util/UUID; method_7271 getUUID - m (Lnet/minecraft/class_2633;)V method_7303 openStructureBlock - m ()Z method_7295 updateEyesInWaterPlayer - m (Lnet/minecraft/class_2487;)V method_7296 spawnShoulderEntity - m (Lnet/minecraft/class_1664;)Z method_7348 isWearing - m (Lnet/minecraft/class_3414;Lnet/minecraft/class_3419;FF)V method_17356 playSound - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;FZZ)Ljava/util/Optional; method_26091 func_242374_a - m ()Z method_7317 shouldHeal - m ()V method_7346 closeScreen - m (F)V method_7322 addExhaustion - m (Lnet/minecraft/class_2394;)V method_16475 addParticlesAroundSelf - m (Lnet/minecraft/class_2680;)Z method_7305 func_234569_d_ - m (Lnet/minecraft/class_1297;)V method_7341 collideWithPlayer - m ()V method_23670 stopFallFlying - m (Lnet/minecraft/class_2487;)Z method_7298 addShoulderEntity - m (Lnet/minecraft/class_1306;)V method_7283 setPrimaryHand - m ()Z method_7276 isPlayerFullyAsleep - m (Lnet/minecraft/class_2960;I)V method_7339 addStat - m (Lnet/minecraft/class_1657;)Z method_7256 canAttackPlayer - m (Lnet/minecraft/class_3751;)V method_16354 openJigsaw - m ()I method_7297 getSleepTimer - m (Lnet/minecraft/class_1299;)V method_17851 func_213834_b - m (Ljava/lang/String;)Ljava/util/UUID; method_7310 getOfflineUUID - m (Lnet/minecraft/class_1799;Z)Lnet/minecraft/class_1542; method_7328 dropItem - m ()Lnet/minecraft/class_2487; method_7308 getRightShoulderEntity - m ()Lnet/minecraft/class_1702; method_7344 getFoodStats - m (Lnet/minecraft/class_2561;Z)V method_7353 sendStatusMessage - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1268;)V method_7315 openBook - m ()V method_7263 spawnSweepParticles - m ()F method_7279 getCooldownPeriod - m ()Z method_30263 func_242375_q - m (DDD)V method_7260 addMountedMovementStat - m ()V method_7318 updatePose - m ()Lnet/minecraft/class_1796; method_7357 getCooldownTracker - m (Z)Z method_7290 drop - m ()Z method_21823 isSecondaryUseActive - m (ILnet/minecraft/class_1916;IIZZ)V method_17354 openMerchantContainer - m (Lnet/minecraft/class_1297;)V method_7324 attackTargetEntityWithCurrentItem - m (F)F method_7261 getCooledAttackStrength - m (Lnet/minecraft/class_1918;)V method_7257 openMinecartCommandBlock - m (Lnet/minecraft/class_2487;)V method_7273 setLeftShoulderEntity - m ()I method_7278 getXPSeed - m (Lnet/minecraft/class_1297;)V method_7304 onEnchantmentCritical - m ()Z method_7338 canUseCommandBlock - m (Z)V method_7284 disableShield - m (Lnet/minecraft/class_1799;I)V method_7286 onEnchant - f Lnet/minecraft/class_2940; field_7518 PLAYER_MODEL_FLAG - f D field_7500 chasingPosX - f I field_7504 xpCooldown - f I field_7494 xpSeed - f Lnet/minecraft/class_1661; field_7514 inventory - f I field_7487 sleepTimer - f I field_7520 experienceLevel - f Lnet/minecraft/class_1702; field_7493 foodStats - f Z field_7523 hasReducedDebug - f Lcom/mojang/authlib/GameProfile; field_7507 gameProfile - f Lnet/minecraft/class_2940; field_7488 MAIN_HAND - f D field_7521 chasingPosY - f D field_7524 prevChasingPosX - f Lnet/minecraft/class_1656; field_7503 abilities - f I field_7508 lastXPSound - f F field_7509 speedInAir - f Lnet/minecraft/class_1536; field_7513 fishingBobber - f I field_7489 flyToggleTimer - f Lnet/minecraft/class_1730; field_7486 enterChestInventory - f I field_7495 experienceTotal - f D field_7499 chasingPosZ - f Lnet/minecraft/class_1799; field_7525 itemStackMainHand - f Lnet/minecraft/class_2940; field_7496 LEFT_SHOULDER_ENTITY - f Lnet/minecraft/class_4048; field_18135 STANDING_SIZE - f D field_7502 prevChasingPosY - f F field_7505 prevCameraYaw - f Lnet/minecraft/class_1796; field_7484 cooldownTracker - f F field_7510 experience - f Lnet/minecraft/class_2940; field_7491 ABSORPTION - f Ljava/util/Map; field_18134 SIZE_BY_POSE - f Lnet/minecraft/class_2940; field_7506 RIGHT_SHOULDER_ENTITY - f D field_7522 prevChasingPosZ - f Lnet/minecraft/class_1723; field_7498 container - f J field_19428 timeEntitySatOnShoulder - f F field_7483 cameraYaw - f Z field_7490 eyesInWaterPlayer - f Lnet/minecraft/class_1703; field_7512 openContainer - f Lnet/minecraft/class_2940; field_7511 PLAYER_SCORE -c net/minecraft/class_1657$1 net/minecraft/entity/player/PlayerEntity$1 - f [I field_7533 field_221261_a -c net/minecraft/class_1657$class_1658 net/minecraft/entity/player/PlayerEntity$SleepResult - m ()[Lnet/minecraft/class_1657$class_1658; values values - m ()Lnet/minecraft/class_2561; method_19206 getMessage - m (Ljava/lang/String;)Lnet/minecraft/class_1657$class_1658; valueOf valueOf - f Lnet/minecraft/class_1657$class_1658; field_7529 NOT_POSSIBLE_NOW - f Lnet/minecraft/class_1657$class_1658; field_7530 TOO_FAR_AWAY - f Lnet/minecraft/class_1657$class_1658; field_18592 OBSTRUCTED - f Lnet/minecraft/class_1657$class_1658; field_7531 OTHER_PROBLEM - f [Lnet/minecraft/class_1657$class_1658; field_7526 $VALUES - f Lnet/minecraft/class_1657$class_1658; field_7532 NOT_SAFE - f Lnet/minecraft/class_2561; field_18593 message - f Lnet/minecraft/class_1657$class_1658; field_7528 NOT_POSSIBLE_HERE -c net/minecraft/class_1662 net/minecraft/item/crafting/RecipeItemHelper - m (Lnet/minecraft/class_1860;Lit/unimi/dsi/fastutil/ints/IntList;)I method_7407 getBiggestCraftableStack - m (Lnet/minecraft/class_1662;II)I method_17693 func_221262_a - m (I)Z method_7410 containsItem - m (Lnet/minecraft/class_1799;)I method_7408 pack - m (Lnet/minecraft/class_1860;ILit/unimi/dsi/fastutil/ints/IntList;)I method_7403 getBiggestCraftableStack - m (Lnet/minecraft/class_1662;I)Z method_17692 func_221265_a - m (Lnet/minecraft/class_1799;I)V method_20478 func_221264_a - m (I)Lnet/minecraft/class_1799; method_7405 unpack - m (II)I method_7411 tryTake - m (Lnet/minecraft/class_1860;Lit/unimi/dsi/fastutil/ints/IntList;)Z method_7402 canCraft - m (Lnet/minecraft/class_1662;II)V method_7412 func_221263_b - m (Lnet/minecraft/class_1860;Lit/unimi/dsi/fastutil/ints/IntList;I)Z method_7406 canCraft - m ()V method_7409 clear - m (Lnet/minecraft/class_1799;)V method_7400 accountStack - m (II)V method_7401 increment - m (Lnet/minecraft/class_1799;)V method_7404 accountPlainStack - f Lit/unimi/dsi/fastutil/ints/Int2IntMap; field_7550 itemToCount -c net/minecraft/class_1662$class_1663 net/minecraft/item/crafting/RecipeItemHelper$RecipePicker - m (ZII)Z method_7425 hasResidual - m ()I method_7415 getMinIngredientCount - m ()[I method_7422 getUniqueAvailIngredientItems - m (ZII)V method_7414 toggleResidual - m (I)I method_7419 getSatisfiedIndex - m (ZII)Z method_7418 hasConnection - m (ILit/unimi/dsi/fastutil/ints/IntList;)I method_7427 tryPickAll - m (ZI)I method_7424 getVisitedIndex - m (ZI)V method_7413 visit - m (ILit/unimi/dsi/fastutil/ints/IntList;)Z method_7417 tryPick - m (ZI)Z method_7426 hasVisited - m (ZII)I method_7420 getIndex - m (I)Z method_7423 dfs - m (I)Z method_7416 isSatisfied - m (I)V method_7421 setSatisfied - f I field_7553 possessedIngredientStackCount - f Lnet/minecraft/class_1662; field_7554 field_194104_a - f [I field_7551 possessedIngredientStacks - f I field_7556 ingredientCount - f Ljava/util/BitSet; field_7558 data - f Lnet/minecraft/class_1860; field_7555 recipe - f Lit/unimi/dsi/fastutil/ints/IntList; field_7557 path - f Ljava/util/List; field_7552 ingredients -c net/minecraft/class_1668 net/minecraft/entity/projectile/DamagingProjectileEntity - m ()Lnet/minecraft/class_2394; method_7467 getParticle - m ()F method_7466 getMotionFactor - m ()Z method_7468 isFireballFiery - f D field_7599 accelerationZ - f D field_7601 accelerationX - f D field_7600 accelerationY -c net/minecraft/class_1665 net/minecraft/entity/projectile/AbstractArrowEntity - m ()F method_7436 getWaterDrag - m (Z)V method_7439 setIsCritical - m ()Lnet/minecraft/class_3414; method_7440 getHitEntitySound - m ()B method_7447 getPierceLevel - m ()V method_7453 func_213870_w - m ()Lnet/minecraft/class_3414; method_20011 getHitGroundSound - m ()Lnet/minecraft/class_1799; method_7445 getArrowStack - m (B)V method_7451 setPierceLevel - m (Z)V method_7442 setShotFromCrossbow - m ()D method_7448 getDamage - m ()V method_7446 func_225516_i_ - m (Lnet/minecraft/class_1309;)V method_7450 arrowHit - m (Lnet/minecraft/class_3414;)V method_7444 setHitSound - m (IZ)V method_7455 setArrowFlag - m (Z)V method_7433 setNoClip - m ()V method_26352 func_234594_z_ - m (Lnet/minecraft/class_1309;F)V method_7435 setEnchantmentEffectsFromEntity - m ()Z method_7441 getNoClip - m ()Z method_26351 func_234593_u_ - m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;)Lnet/minecraft/class_3966; method_7434 rayTraceEntities - m ()Z method_7456 getShotFromCrossbow - m (I)V method_7449 setKnockbackStrength - m (D)V method_7438 setDamage - m ()Z method_7443 getIsCritical - f Ljava/util/List; field_7579 hitEntities - f Lnet/minecraft/class_2940; field_7589 PIERCE_LEVEL - f Lnet/minecraft/class_2940; field_7573 CRITICAL - f Lnet/minecraft/class_1665$class_1666; field_7572 pickupStatus - f Lnet/minecraft/class_3414; field_7584 hitSound - f I field_7575 knockbackStrength - f Lit/unimi/dsi/fastutil/ints/IntOpenHashSet; field_7590 piercedEntities - f D field_7571 damage - f I field_7578 ticksInGround - f Z field_7588 inGround - f I field_7576 timeInGround - f Lnet/minecraft/class_2680; field_7586 inBlockState - f I field_7574 arrowShake -c net/minecraft/class_1665$class_1666 net/minecraft/entity/projectile/AbstractArrowEntity$PickupStatus - m (Ljava/lang/String;)Lnet/minecraft/class_1665$class_1666; valueOf valueOf - m (I)Lnet/minecraft/class_1665$class_1666; method_7458 getByOrdinal - m ()[Lnet/minecraft/class_1665$class_1666; values values - f Lnet/minecraft/class_1665$class_1666; field_7592 DISALLOWED - f Lnet/minecraft/class_1665$class_1666; field_7593 ALLOWED - f Lnet/minecraft/class_1665$class_1666; field_7594 CREATIVE_ONLY - f [Lnet/minecraft/class_1665$class_1666; field_7591 $VALUES -c net/minecraft/class_1667 net/minecraft/entity/projectile/ArrowEntity - m (Lnet/minecraft/class_1799;)V method_7459 setPotionEffect - m (I)V method_7461 spawnPotionParticles - m ()V method_7462 refreshColor - m (I)V method_7465 setFixedColor - m (Lnet/minecraft/class_1799;)I method_7464 getCustomColor - m (Lnet/minecraft/class_1293;)V method_7463 addEffect - m ()I method_7460 getColor - f Lnet/minecraft/class_2940; field_7595 COLOR - f Z field_7596 fixedColor - f Lnet/minecraft/class_1842; field_7597 potion - f Ljava/util/Set; field_7598 customPotionEffects -c net/minecraft/class_1669 net/minecraft/entity/projectile/EvokerFangsEntity - m (Lnet/minecraft/class_1309;)V method_7473 setCaster - m (F)F method_7472 getAnimationProgress - m ()Lnet/minecraft/class_1309; method_7470 getCaster - m (Lnet/minecraft/class_1309;)V method_7471 damage - f Z field_7608 clientSideAttackStarted - f I field_7609 warmupDelayTicks - f Lnet/minecraft/class_1309; field_7605 caster - f Z field_7610 sentSpikeEvent - f Ljava/util/UUID; field_7606 casterUuid - f I field_7607 lifeTicks -c net/minecraft/class_1670 net/minecraft/entity/projectile/DragonFireballEntity -c net/minecraft/class_3855 net/minecraft/entity/projectile/AbstractFireballEntity - m ()Lnet/minecraft/class_1799; method_16938 getStack - m (Lnet/minecraft/class_1799;)V method_16937 func_213897_c - m (Lnet/minecraft/class_1799;)V method_16936 setStack - f Lnet/minecraft/class_2940; field_17081 STACK -c net/minecraft/class_1672 net/minecraft/entity/projectile/EyeOfEnderEntity - m ()Lnet/minecraft/class_1799; method_16935 func_213861_i - m (Lnet/minecraft/class_2338;)V method_7478 moveTowards - m (Lnet/minecraft/class_1799;)V method_16933 func_213863_b - m (Lnet/minecraft/class_1799;)V method_16934 func_213862_c - f D field_7618 targetY - f Z field_7621 shatterOrDrop - f D field_7617 targetZ - f I field_7620 despawnTimer - f Lnet/minecraft/class_2940; field_17080 field_213864_b - f D field_7619 targetX -c net/minecraft/class_1536 net/minecraft/entity/projectile/FishingBobberEntity - m ()V method_6951 setHookedEntity - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1536$class_4984; method_26342 func_234604_c_ - m (Lnet/minecraft/class_1536$class_4984;Lnet/minecraft/class_1536$class_4984;)Lnet/minecraft/class_1536$class_4984; method_26340 func_234601_a_ - m ()V method_6958 checkCollision - m (Lnet/minecraft/class_2338;)V method_6949 catchingFish - m ()Lnet/minecraft/class_1297; method_26957 func_234607_k_ - m (Lnet/minecraft/class_1799;)I method_6957 handleHookRetraction - m ()Z method_26088 func_234605_g_ - m ()V method_6954 bringInHookedEntity - m (Lnet/minecraft/class_2338;)Z method_26086 func_234603_b_ - m ()Lnet/minecraft/class_1657; method_6947 func_234606_i_ - m (Lnet/minecraft/class_1657;)Z method_6959 func_234600_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1536$class_4984; method_26341 func_234602_a_ - f I field_23233 field_234598_d_ - f I field_7173 ticksCatchable - f Ljava/util/Random; field_23231 field_234596_b_ - f Lnet/minecraft/class_2940; field_7170 DATA_HOOKED_ENTITY - f Lnet/minecraft/class_2940; field_23234 field_234599_f_ - f Lnet/minecraft/class_1297; field_7165 caughtEntity - f Z field_23134 field_234595_aq_ - f I field_7171 luck - f I field_7168 lureSpeed - f F field_7169 fishApproachAngle - f I field_7172 ticksCatchableDelay - f Lnet/minecraft/class_1536$class_1537; field_7175 currentState - f I field_7167 ticksInGround - f Z field_23232 field_234597_c_ - f I field_7174 ticksCaughtDelay -c net/minecraft/class_1536$1 net/minecraft/entity/projectile/FishingBobberEntity$1 - f [I field_23235 field_234608_a_ -c net/minecraft/class_1536$class_4984 net/minecraft/entity/projectile/FishingBobberEntity$WaterType - m (Ljava/lang/String;)Lnet/minecraft/class_1536$class_4984; valueOf valueOf - m ()[Lnet/minecraft/class_1536$class_4984; values values - f Lnet/minecraft/class_1536$class_4984; field_23238 INVALID - f Lnet/minecraft/class_1536$class_4984; field_23237 INSIDE_WATER - f [Lnet/minecraft/class_1536$class_4984; field_23239 $VALUES - f Lnet/minecraft/class_1536$class_4984; field_23236 ABOVE_WATER -c net/minecraft/class_1536$class_1537 net/minecraft/entity/projectile/FishingBobberEntity$State - m ()[Lnet/minecraft/class_1536$class_1537; values values - m (Ljava/lang/String;)Lnet/minecraft/class_1536$class_1537; valueOf valueOf - f [Lnet/minecraft/class_1536$class_1537; field_7181 $VALUES - f Lnet/minecraft/class_1536$class_1537; field_7180 FLYING - f Lnet/minecraft/class_1536$class_1537; field_7179 BOBBING - f Lnet/minecraft/class_1536$class_1537; field_7178 HOOKED_IN_ENTITY -c net/minecraft/class_1671 net/minecraft/entity/projectile/FireworkRocketEntity - m ()Z method_7477 func_213889_i - m ()V method_16830 func_213893_k - m ()Z method_7476 isAttachedToEntity - m ()Z method_20308 func_213894_l - m (I)V method_18072 func_213891_a - m ()V method_7475 dealExplosionDamage - f Lnet/minecraft/class_2940; field_7615 field_213895_d - f Lnet/minecraft/class_1309; field_7616 boostedEntity - f Lnet/minecraft/class_2940; field_7611 BOOSTED_ENTITY_ID - f I field_7613 fireworkAge - f I field_7612 lifetime - f Lnet/minecraft/class_2940; field_7614 FIREWORK_ITEM -c net/minecraft/class_1674 net/minecraft/entity/projectile/FireballEntity - f I field_7624 explosionPower -c net/minecraft/class_3856 net/minecraft/entity/IRendersAsItem - m ()Lnet/minecraft/class_1799; method_7495 getItem -c net/minecraft/class_1676 net/minecraft/entity/projectile/ProjectileEntity - m ()Lnet/minecraft/class_1297; method_24921 func_234616_v_ - m (Lnet/minecraft/class_1297;)Z method_26958 func_230298_a_ - m (Lnet/minecraft/class_1297;)V method_7432 setShooter - m (Lnet/minecraft/class_1297;)Z method_26959 func_234613_c_ - m ()V method_26962 func_234617_x_ - m (Lnet/minecraft/class_3965;)V method_24920 func_230299_a_ - m (Lnet/minecraft/class_1297;FFFFF)V method_24919 func_234612_a_ - m (DDDFF)V method_7485 shoot - m (Lnet/minecraft/class_3966;)V method_7454 onEntityHit - m (Lnet/minecraft/class_239;)V method_7488 onImpact - m (FF)F method_26960 func_234614_e_ - m ()Z method_26961 func_234615_h_ - f I field_23739 field_234610_c_ - f Ljava/util/UUID; field_22478 field_234609_b_ - f Z field_23740 field_234611_d_ -c net/minecraft/class_1673 net/minecraft/entity/projectile/LlamaSpitEntity -c net/minecraft/class_1678 net/minecraft/entity/projectile/ShulkerBulletEntity - m (Lnet/minecraft/class_2350$class_2351;)V method_7486 selectNextMoveDirection - m (Lnet/minecraft/class_2350;)V method_7487 setDirection - f D field_7635 targetDeltaX - f I field_7627 steps - f Lnet/minecraft/class_1297; field_7626 target - f Ljava/util/UUID; field_7632 targetUniqueId - f D field_7633 targetDeltaY - f D field_7625 targetDeltaZ - f Lnet/minecraft/class_2350; field_7628 direction -c net/minecraft/class_1675 net/minecraft/entity/projectile/ProjectileHelper - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;F)Lnet/minecraft/class_1665; method_18813 fireArrow - m (Lnet/minecraft/class_1297;Ljava/util/function/Predicate;)Lnet/minecraft/class_239; method_18074 func_234618_a_ - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_243;Lnet/minecraft/class_243;Lnet/minecraft/class_238;Ljava/util/function/Predicate;D)Lnet/minecraft/class_3966; method_18075 rayTraceEntities - m (Lnet/minecraft/class_1297;F)V method_7484 rotateTowardsMovement - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;Lnet/minecraft/class_243;Lnet/minecraft/class_243;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Lnet/minecraft/class_3966; method_18077 rayTraceEntities - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1792;)Lnet/minecraft/class_1268; method_18812 getHandWith -c net/minecraft/class_1680 net/minecraft/entity/projectile/SnowballEntity - m ()Lnet/minecraft/class_2394; method_16939 makeParticle -c net/minecraft/class_1677 net/minecraft/entity/projectile/SmallFireballEntity -c net/minecraft/class_3857 net/minecraft/entity/projectile/ProjectileItemEntity - m (Lnet/minecraft/class_1799;)V method_16940 setItem - m (Lnet/minecraft/class_1799;)V method_16941 func_213883_c - m ()Lnet/minecraft/class_1792; method_16942 getDefaultItem - m ()Lnet/minecraft/class_1799; method_16943 func_213882_k - f Lnet/minecraft/class_2940; field_17082 ITEMSTACK_DATA -c net/minecraft/class_1679 net/minecraft/entity/projectile/SpectralArrowEntity - f I field_7636 duration -c net/minecraft/class_1681 net/minecraft/entity/projectile/EggEntity -c net/minecraft/class_1682 net/minecraft/entity/projectile/ThrowableEntity - m ()F method_7490 getGravityVelocity -c net/minecraft/class_1683 net/minecraft/entity/item/ExperienceBottleEntity -c net/minecraft/class_1684 net/minecraft/entity/item/EnderPearlEntity -c net/minecraft/class_1685 net/minecraft/entity/projectile/TridentEntity - m ()Z method_7493 shouldReturnToThrower - m ()Z method_23751 func_226572_w_ - f Lnet/minecraft/class_2940; field_7647 LOYALTY_LEVEL - f I field_7649 returningTicks - f Lnet/minecraft/class_2940; field_21514 field_226571_aq_ - f Z field_7648 dealtDamage - f Lnet/minecraft/class_1799; field_7650 thrownStack -c net/minecraft/class_1686 net/minecraft/entity/projectile/PotionEntity - m ()Z method_7501 isLingering - m (Ljava/util/List;Lnet/minecraft/class_1297;)V method_7498 func_213888_a - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)V method_7499 extinguishFires - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1842;)V method_7497 makeAreaOfEffectCloud - m ()V method_7500 applyWater - f Ljava/util/function/Predicate; field_7653 WATER_SENSITIVE -c net/minecraft/class_1687 net/minecraft/entity/projectile/WitherSkullEntity - m (Z)V method_7502 setSkullInvulnerable - m ()Z method_7503 isSkullInvulnerable - f Lnet/minecraft/class_2940; field_7654 INVULNERABLE -c net/minecraft/class_3763 net/minecraft/entity/monster/AbstractRaiderEntity - m (Lnet/minecraft/class_3763;)Z method_19632 func_213646_e - m (Lnet/minecraft/class_3763;)Ljava/util/Random; method_20029 func_213643_a - m (I)V method_16477 setWave - m (Lnet/minecraft/class_3763;)Ljava/util/Random; method_20032 func_213645_d - m ()Lnet/minecraft/class_3414; method_20033 getRaidLossSound - m (I)V method_16835 setJoinDelay - m (Z)V method_20036 setCelebrating - m (Lnet/minecraft/class_3763;)Ljava/util/Random; method_20035 func_213649_g - m (Lnet/minecraft/class_1542;)Z method_16483 func_213647_b - m (Lnet/minecraft/class_3763;)Ljava/util/Random; method_19633 func_213648_f - m (Lnet/minecraft/class_3763;)F method_20030 func_213659_b - m (Lnet/minecraft/class_3763;)F method_20031 func_213662_c - m (Z)V method_16480 setCanJoinRaid - m ()Z method_16481 canJoinRaid - m ()Z method_20034 getCelebrating - m (Lnet/minecraft/class_3765;)V method_16476 setRaid - m (IZ)V method_16484 applyWaveBonus - m ()Z method_16482 isRaidActive - m ()Ljava/util/function/Predicate; method_16479 func_213650_ep - m ()Lnet/minecraft/class_3765; method_16478 getRaid - m ()I method_16836 getJoinDelay - m ()I method_16486 getWave - f Lnet/minecraft/class_3765; field_16599 raid - f Z field_16602 canJoinRaid - f I field_16997 joinDelay - f I field_16601 wave - f Lnet/minecraft/class_2940; field_19032 CELEBRATING - f Ljava/util/function/Predicate; field_16600 bannerPredicate -c net/minecraft/class_3763$class_4261 net/minecraft/entity/monster/AbstractRaiderEntity$InvadeHomeGoal - m (Lnet/minecraft/class_4158;)Z method_20037 func_220859_a - m (Lnet/minecraft/class_2338;)Z method_20038 isValidDoorPosition - m ()V method_20041 clearLastCachedPoint - m ()Z method_20040 findValidHome - m ()Z method_20039 isActive - f Ljava/util/List; field_19038 cachedPointOfIntresste - f Lnet/minecraft/class_3763; field_19035 raiderEntity - f Z field_19040 idling - f I field_19039 distance - f Lnet/minecraft/class_2338; field_19037 blockPosPOI - f D field_19036 speed -c net/minecraft/class_3763$class_4260 net/minecraft/entity/monster/AbstractRaiderEntity$CelebrateRaidLossGoal - f Lnet/minecraft/class_3763; field_19034 raiderEntity - f Lnet/minecraft/class_3763; field_19033 field_220857_a -c net/minecraft/class_3763$class_3764 net/minecraft/entity/monster/AbstractRaiderEntity$PromoteLeaderGoal - f Lnet/minecraft/class_3763; field_16604 field_220855_a - f Lnet/minecraft/class_3763; field_16603 raiderEntity -c net/minecraft/class_3763$class_4223 net/minecraft/entity/monster/AbstractRaiderEntity$FindTargetGoal - f Lnet/minecraft/class_3763; field_18883 raiderEntity - f F field_18884 findTargetRange - f Lnet/minecraft/class_4051; field_18881 findTargetPredicate - f Lnet/minecraft/class_3763; field_18882 field_220852_b -c net/minecraft/class_3765 net/minecraft/world/raid/Raid - m ()Z method_20020 isBetweenWaves - m (Lnet/minecraft/class_1657;)V method_16518 increaseLevel - m ()V method_16499 updateBossInfoVisibility - m (Lnet/minecraft/class_2338;)V method_20509 setCenter - m (Lnet/minecraft/class_3763;Z)V method_16510 leaveRaid - m (Lnet/minecraft/class_2338;)V method_16521 playWaveStartSound - m (Lnet/minecraft/class_3765$class_3766;IZ)I method_20018 getDefaultNumSpawns - m (Lnet/minecraft/class_3765$class_3766;Ljava/util/Random;ILnet/minecraft/class_1266;Z)I method_20019 getPotentialBonusSpawns - m (Ljava/lang/Integer;)Ljava/util/Set; method_16508 func_221323_a - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_16502 write - m ()Z method_16519 shouldSpawnGroup - m ()I method_16494 getId - m ()F method_20025 getEnchantOdds - m ()Z method_20015 shouldSpawnBonusGroup - m ()I method_16517 getRaiderCount - m ()V method_16506 stop - m ()Z method_20012 isFinalWave - m ()Z method_16524 isStarted - m (Lnet/minecraft/class_2338;)D method_20510 func_223025_d - m ()I method_16514 getMaxLevel - m (ILnet/minecraft/class_3763;)V method_16491 setLeader - m (II)Lnet/minecraft/class_2338; method_16525 findRandomSpawnPos - m ()Z method_20022 isStopped - m ()Z method_20024 isLoss - m (ILnet/minecraft/class_3763;Lnet/minecraft/class_2338;Z)V method_16516 joinRaid - m (I)Ljava/util/Optional; method_20267 getValidSpawnPos - m ()Z method_16832 isOver - m ()Z method_20021 func_221297_c - m ()V method_20511 moveRaidCenterToNearbyVillageSection - m (Lnet/minecraft/class_2338;)V method_16522 spawnNextWave - m (Lnet/minecraft/class_1297;)V method_20017 addHero - m ()Z method_16504 isActive - m ()V method_16520 markDirty - m (I)V method_16500 removeLeader - m ()V method_16834 updateRaiders - m ()Lnet/minecraft/class_1799; method_16515 createIllagerBanner - m ()V method_16523 updateBarPercentage - m ()Z method_20014 hasSpawnedBonusWave - m ()Z method_16833 hasMoreWaves - m ()V method_16509 tick - m ()Z method_20013 hasBonusWave - m ()Lnet/minecraft/class_2338; method_16495 getCenter - m (ILnet/minecraft/class_3763;Z)Z method_16487 joinRaid - m (ILnet/minecraft/class_3763;)Z method_16505 joinRaid - m ()F method_16513 getCurrentHealth - m ()Ljava/util/function/Predicate; method_16501 getParticipantsPredicate - m ()Lnet/minecraft/class_1937; method_16831 getWorld - m ()I method_16493 getBadOmenLevel - m (Lnet/minecraft/class_1267;)I method_20016 getWaves - m (Lnet/minecraft/class_3222;)Z method_19208 func_221302_a - m ()Z method_20023 isVictory - m ()I method_16490 getGroupsSpawned - m (I)Lnet/minecraft/class_3763; method_16496 getLeader - f I field_16625 id - f Lnet/minecraft/class_3218; field_16619 world - f J field_16605 ticksActive - f Ljava/util/Map; field_16615 leaders - f Lnet/minecraft/class_3765$class_4259; field_19023 status - f Lnet/minecraft/class_2561; field_19019 RAID_VICTORY - f I field_19024 celebrationTicks - f Lnet/minecraft/class_2561; field_19017 VICTORY - f Lnet/minecraft/class_3213; field_16607 bossInfo - f I field_16616 postRaidTicks - f I field_16621 groupsSpawned - f I field_16623 badOmenLevel - f F field_16620 totalHealth - f Ljava/util/Set; field_19021 heroes - f Ljava/util/Map; field_16618 raiders - f Lnet/minecraft/class_2338; field_16613 center - f Lnet/minecraft/class_2561; field_19020 RAID_DEFEAT - f Lnet/minecraft/class_2561; field_19018 DEFEAT - f I field_19022 numGroups - f Z field_16606 active - f Lnet/minecraft/class_2561; field_19016 RAID - f I field_16614 preRaidTicks - f Ljava/util/Random; field_16608 random - f Z field_16611 started - f Ljava/util/Optional; field_19172 waveSpawnPos -c net/minecraft/class_3765$class_4259 net/minecraft/world/raid/Raid$Status - m (Ljava/lang/String;)Lnet/minecraft/class_3765$class_4259; method_20027 func_221276_a - m ()[Lnet/minecraft/class_3765$class_4259; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3765$class_4259; method_20028 getByName - m ()Ljava/lang/String; method_20026 getName - m (Ljava/lang/String;)Lnet/minecraft/class_3765$class_4259; valueOf valueOf - f Lnet/minecraft/class_3765$class_4259; field_19028 LOSS - f Lnet/minecraft/class_3765$class_4259; field_19027 VICTORY - f [Lnet/minecraft/class_3765$class_4259; field_19030 VALUES - f Lnet/minecraft/class_3765$class_4259; field_19029 STOPPED - f [Lnet/minecraft/class_3765$class_4259; field_19031 $VALUES - f Lnet/minecraft/class_3765$class_4259; field_19026 ONGOING -c net/minecraft/class_3765$class_3766 net/minecraft/world/raid/Raid$WaveMember - m (Ljava/lang/String;)Lnet/minecraft/class_3765$class_3766; valueOf valueOf - m (Lnet/minecraft/class_3765$class_3766;)[I method_16527 func_221282_b - m (Lnet/minecraft/class_3765$class_3766;)Lnet/minecraft/class_1299; method_16526 func_221281_a - m ()[Lnet/minecraft/class_3765$class_3766; method_16529 func_221283_a - m ()[Lnet/minecraft/class_3765$class_3766; values values - f Lnet/minecraft/class_3765$class_3766; field_16631 VINDICATOR - f Lnet/minecraft/class_3765$class_3766; field_16633 PILLAGER - f Lnet/minecraft/class_3765$class_3766; field_16634 EVOKER - f Lnet/minecraft/class_3765$class_3766; field_16635 WITCH - f [Lnet/minecraft/class_3765$class_3766; field_16632 $VALUES - f Lnet/minecraft/class_1299; field_16629 type - f Lnet/minecraft/class_3765$class_3766; field_16630 RAVAGER - f [Lnet/minecraft/class_3765$class_3766; field_16636 VALUES - f [I field_16628 waveCounts -c net/minecraft/class_3765$1 net/minecraft/world/raid/Raid$1 - f [I field_19025 field_221279_a - f [I field_16626 field_221280_b -c net/minecraft/class_3767 net/minecraft/world/raid/RaidManager - m (Lnet/minecraft/class_2874;)Ljava/lang/String; method_16533 func_234620_a_ - m (Lnet/minecraft/class_3222;)Lnet/minecraft/class_3765; method_16540 badOmenTick - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3765; method_16532 findOrCreateRaid - m ()V method_16539 tick - m ()I method_16534 incrementNextId - m (Lnet/minecraft/class_2338;I)Lnet/minecraft/class_3765; method_19209 findRaid - m (Lnet/minecraft/class_3763;Lnet/minecraft/class_3765;)Z method_16838 canJoinRaid - m (I)Lnet/minecraft/class_3765; method_16541 get - f Lnet/minecraft/class_3218; field_16641 world - f I field_16637 tick - f I field_16638 nextAvailableId - f Ljava/util/Map; field_16639 byId -c net/minecraft/class_4168 net/minecraft/entity/ai/brain/schedule/Activity - m ()I hashCode hashCode - m ()Ljava/lang/String; method_19634 getKey - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/String; toString toString - m (Ljava/lang/String;)Lnet/minecraft/class_4168; method_19210 register - f Lnet/minecraft/class_4168; field_18597 REST - f Lnet/minecraft/class_4168; field_18598 MEET - f I field_23827 hash - f Lnet/minecraft/class_4168; field_18599 PANIC - f Lnet/minecraft/class_4168; field_18595 IDLE - f Lnet/minecraft/class_4168; field_22398 ADMIRE_ITEM - f Lnet/minecraft/class_4168; field_18596 WORK - f Lnet/minecraft/class_4168; field_22399 AVOID - f Ljava/lang/String; field_18600 id - f Lnet/minecraft/class_4168; field_18885 PLAY - f Lnet/minecraft/class_4168; field_22400 RIDE - f Lnet/minecraft/class_4168; field_19043 HIDE - f Lnet/minecraft/class_4168; field_22396 FIGHT - f Lnet/minecraft/class_4168; field_18594 CORE - f Lnet/minecraft/class_4168; field_22397 CELEBRATE - f Lnet/minecraft/class_4168; field_19041 RAID - f Lnet/minecraft/class_4168; field_19042 PRE_RAID -c net/minecraft/class_4170 net/minecraft/entity/ai/brain/schedule/Schedule - m (ILjava/util/Map$Entry;)D method_19214 func_221376_a - m (Lnet/minecraft/class_4168;Ljava/util/Map$Entry;)Z method_19216 func_221378_a - m (Lnet/minecraft/class_4168;)Lnet/minecraft/class_4173; method_19218 getDutiesFor - m (Lnet/minecraft/class_4168;)V method_19215 createDutiesFor - m (Ljava/lang/String;)Lnet/minecraft/class_4171; method_19217 register - m (I)Lnet/minecraft/class_4168; method_19213 getScheduledActivity - m (Lnet/minecraft/class_4168;)Ljava/util/List; method_19219 getAllDutiesExcept - f Lnet/minecraft/class_4170; field_18603 EMPTY - f Lnet/minecraft/class_4170; field_18604 SIMPLE - f Lnet/minecraft/class_4170; field_18605 VILLAGER_BABY - f Lnet/minecraft/class_4170; field_18606 VILLAGER_DEFAULT - f Ljava/util/Map; field_18607 activityToDutiesMap -c net/minecraft/class_4169 net/minecraft/entity/ai/brain/schedule/DutyTime - m ()F method_19212 getActive - m ()I method_19211 getDuration - f F field_18602 active - f I field_18601 duration -c net/minecraft/class_4173 net/minecraft/entity/ai/brain/schedule/ScheduleDuties - m (I)F method_19226 updateActiveDutyTime - m (Lit/unimi/dsi/fastutil/ints/Int2ObjectSortedMap;Lnet/minecraft/class_4169;)V method_19228 func_221393_a - m ()V method_19229 sortDutyTimes - m (IF)Lnet/minecraft/class_4173; method_19227 addDutyTime - f I field_18613 index - f Ljava/util/List; field_18612 dutyTimes -c net/minecraft/class_4171 net/minecraft/entity/ai/brain/schedule/ScheduleBuilder - m (Lnet/minecraft/class_4171$class_4172;)V method_19222 func_221405_a - m ()Lnet/minecraft/class_4170; method_19220 build - m (Lnet/minecraft/class_4171$class_4172;Lnet/minecraft/class_4173;)V method_19223 func_221403_a - m (ILnet/minecraft/class_4168;)Lnet/minecraft/class_4171; method_19221 add - f Ljava/util/List; field_18609 entries - f Lnet/minecraft/class_4170; field_18608 schedule -c net/minecraft/class_4171$class_4172 net/minecraft/entity/ai/brain/schedule/ScheduleBuilder$ActivityEntry - m ()Lnet/minecraft/class_4168; method_19225 getActivity - m ()I method_19224 getDuration - f I field_18610 duration - f Lnet/minecraft/class_4168; field_18611 activity -c net/minecraft/class_1688 net/minecraft/entity/item/minecart/AbstractMinecartEntity - m (I)V method_7524 setRollingDirection - m (Lnet/minecraft/class_1937;DDDLnet/minecraft/class_1688$class_1689;)Lnet/minecraft/class_1688; method_7523 create - m (F)V method_7520 setDamage - m (Lnet/minecraft/class_2338;)Z method_18803 isNormalCube - m ()I method_7526 getDefaultDisplayTileOffset - m ()Lnet/minecraft/class_2680; method_7517 getDefaultDisplayTile - m (I)V method_7515 setDisplayTileOffset - m ()V method_7512 moveDerailedMinecart - m ()I method_7522 getRollingDirection - m (Lnet/minecraft/class_1282;)V method_7516 killMinecart - m ()D method_7504 getMaximumSpeed - m (Lnet/minecraft/class_2768;)Lcom/mojang/datafixers/util/Pair; method_22864 getMovementMatrixForShape - m ()Z method_7510 hasDisplayTile - m (DDDD)Lnet/minecraft/class_243; method_7505 getPosOffset - m (IIIZ)V method_7506 onActivatorRailPass - m ()Lnet/minecraft/class_1688$class_1689; method_7518 getMinecartType - m (I)V method_7509 setRollingAmplitude - m (DDD)Lnet/minecraft/class_243; method_7508 getPos - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_30340 func_242377_b - m (Z)V method_7511 setHasDisplayTile - m ()I method_7514 getDisplayTileOffset - m (Lnet/minecraft/class_2338$class_2339;)Lnet/minecraft/class_265; method_30339 func_242376_a - m ()V method_7525 applyDrag - m ()I method_7507 getRollingAmplitude - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_7513 moveAlongTrack - m ()Lnet/minecraft/class_2680; method_7519 getDisplayTile - m (Lnet/minecraft/class_2680;)V method_7527 setDisplayTile - m (Ljava/util/EnumMap;)V method_22865 func_226574_a_ - m ()F method_7521 getDamage - f D field_7662 minecartZ - f D field_7665 minecartX - f Lcom/google/common/collect/ImmutableMap; field_24464 field_234627_am_ - f Lnet/minecraft/class_2940; field_7661 DISPLAY_TILE_OFFSET - f Lnet/minecraft/class_2940; field_7667 DAMAGE - f Lnet/minecraft/class_2940; field_7663 ROLLING_AMPLITUDE - f D field_7655 velocityY - f D field_7657 minecartPitch - f I field_7669 turnProgress - f D field_7666 minecartY - f Ljava/util/Map; field_7664 MATRIX - f Lnet/minecraft/class_2940; field_7670 SHOW_BLOCK - f Lnet/minecraft/class_2940; field_7671 DISPLAY_TILE - f Lnet/minecraft/class_2940; field_7668 ROLLING_DIRECTION - f D field_7656 velocityZ - f D field_7658 velocityX - f Z field_7660 isInReverse - f D field_7659 minecartYaw -c net/minecraft/class_1688$1 net/minecraft/entity/item/minecart/AbstractMinecartEntity$1 - f [I field_7682 field_208060_b -c net/minecraft/class_1688$class_1689 net/minecraft/entity/item/minecart/AbstractMinecartEntity$Type - m (Ljava/lang/String;)Lnet/minecraft/class_1688$class_1689; valueOf valueOf - m ()[Lnet/minecraft/class_1688$class_1689; values values - f [Lnet/minecraft/class_1688$class_1689; field_7673 $VALUES - f Lnet/minecraft/class_1688$class_1689; field_7677 HOPPER - f Lnet/minecraft/class_1688$class_1689; field_7674 RIDEABLE - f Lnet/minecraft/class_1688$class_1689; field_7681 COMMAND_BLOCK - f Lnet/minecraft/class_1688$class_1689; field_7680 SPAWNER - f Lnet/minecraft/class_1688$class_1689; field_7675 TNT - f Lnet/minecraft/class_1688$class_1689; field_7678 CHEST - f Lnet/minecraft/class_1688$class_1689; field_7679 FURNACE -c net/minecraft/class_1690 net/minecraft/entity/item/BoatEntity - m (F)V method_7542 setDamageTaken - m ()V method_7550 updateRocking - m ()I method_7543 getForwardDirection - m ()Lnet/minecraft/class_1690$class_1692; method_7536 getBoatType - m ()F method_7554 getDamageTaken - m (Lnet/minecraft/class_1297;)V method_7546 applyYawToEntity - m ()Lnet/minecraft/class_1690$class_1691; method_7532 getUnderwaterStatus - m ()Lnet/minecraft/class_1690$class_1691; method_7552 getBoatStatus - m (IF)F method_7551 getRowingTime - m (I)V method_7531 setRockingTicks - m (ZZZZ)V method_7535 updateInputs - m (Lnet/minecraft/class_1690$class_1692;)V method_7541 setBoatType - m (I)V method_7553 setTimeSinceHit - m ()Lnet/minecraft/class_3414; method_7537 getPaddleSound - m (F)F method_7547 getRockingAngle - m ()I method_7533 getTimeSinceHit - m ()Lnet/minecraft/class_1792; method_7557 getItemBoat - m ()F method_7548 getBoatGlide - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Z method_30959 func_242378_a - m ()V method_7549 controlBoat - m ()F method_7544 getWaterLevelAbove - m ()I method_7539 getRockingTicks - m ()Z method_7545 checkInWater - m (ZZ)V method_7538 setPaddleState - m (I)V method_7540 setForwardDirection - m ()V method_7534 updateMotion - m ()V method_7555 tickLerp - m (I)Z method_7556 getPaddleState - f Z field_7709 forwardInputDown - f D field_7696 lastYd - f Z field_7710 leftInputDown - f D field_7697 waterLevel - f Z field_7703 downwards - f Lnet/minecraft/class_2940; field_7707 FORWARD_DIRECTION - f D field_7684 lerpPitch - f F field_7711 prevRockingAngle - f Lnet/minecraft/class_2940; field_7698 BOAT_TYPE - f D field_7685 lerpZ - f Lnet/minecraft/class_2940; field_7691 ROCKING_TICKS - f F field_7712 rockingIntensity - f Lnet/minecraft/class_1690$class_1691; field_7702 status - f Lnet/minecraft/class_2940; field_7713 RIGHT_PADDLE - f D field_7686 lerpX - f F field_7690 deltaRotation - f F field_7692 momentum - f Z field_7693 backInputDown - f Z field_7695 rightInputDown - f F field_7714 boatGlide - f Z field_7689 rocking - f Lnet/minecraft/class_2940; field_7688 TIME_SINCE_HIT - f Lnet/minecraft/class_2940; field_7705 DAMAGE_TAKEN - f D field_7699 lerpYaw - f F field_7694 rockingAngle - f Lnet/minecraft/class_2940; field_7687 LEFT_PADDLE - f Lnet/minecraft/class_1690$class_1691; field_7701 previousStatus - f I field_7708 lerpSteps - f D field_7700 lerpY - f [F field_7704 paddlePositions - f F field_7706 outOfControlTicks -c net/minecraft/class_1690$1 net/minecraft/entity/item/BoatEntity$1 - f [I field_7721 field_193348_b - f [I field_7722 field_184978_a -c net/minecraft/class_1690$class_1692 net/minecraft/entity/item/BoatEntity$Type - m ()Lnet/minecraft/class_2248; method_7560 asPlank - m (Ljava/lang/String;)Lnet/minecraft/class_1690$class_1692; valueOf valueOf - m (I)Lnet/minecraft/class_1690$class_1692; method_7558 byId - m (Ljava/lang/String;)Lnet/minecraft/class_1690$class_1692; method_7561 getTypeFromString - m ()[Lnet/minecraft/class_1690$class_1692; values values - m ()Ljava/lang/String; method_7559 getName - m ()Ljava/lang/String; toString toString - f Ljava/lang/String; field_7726 name - f Lnet/minecraft/class_1690$class_1692; field_7727 OAK - f Lnet/minecraft/class_2248; field_7731 block - f Lnet/minecraft/class_1690$class_1692; field_7725 ACACIA - f Lnet/minecraft/class_1690$class_1692; field_7723 DARK_OAK - f Lnet/minecraft/class_1690$class_1692; field_7728 SPRUCE - f Lnet/minecraft/class_1690$class_1692; field_7729 BIRCH - f [Lnet/minecraft/class_1690$class_1692; field_7724 $VALUES - f Lnet/minecraft/class_1690$class_1692; field_7730 JUNGLE -c net/minecraft/class_1690$class_1691 net/minecraft/entity/item/BoatEntity$Status - m ()[Lnet/minecraft/class_1690$class_1691; values values - m (Ljava/lang/String;)Lnet/minecraft/class_1690$class_1691; valueOf valueOf - f Lnet/minecraft/class_1690$class_1691; field_7717 UNDER_WATER - f Lnet/minecraft/class_1690$class_1691; field_7716 UNDER_FLOWING_WATER - f Lnet/minecraft/class_1690$class_1691; field_7719 ON_LAND - f Lnet/minecraft/class_1690$class_1691; field_7720 IN_AIR - f Lnet/minecraft/class_1690$class_1691; field_7718 IN_WATER - f [Lnet/minecraft/class_1690$class_1691; field_7715 $VALUES -c net/minecraft/class_1693 net/minecraft/entity/item/minecart/ContainerMinecartEntity - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1703; method_17357 createContainer - m (Lnet/minecraft/class_2960;J)V method_7562 setLootTable - m (Lnet/minecraft/class_1657;)V method_7563 addLoot - f J field_7732 lootTableSeed - f Z field_7733 dropContentsWhenDead - f Lnet/minecraft/class_2960; field_7734 lootTable - f Lnet/minecraft/class_2371; field_7735 minecartContainerItems -c net/minecraft/class_1695 net/minecraft/entity/item/minecart/MinecartEntity -c net/minecraft/client/ClientBrandRetriever net/minecraft/client/ClientBrandRetriever - m ()Ljava/lang/String; getClientModName getClientModName -c net/minecraft/class_5275 net/minecraft/util/TransportationHelper - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_243; method_30769 func_242379_a - m (Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_30770 func_242382_a - m (Lnet/minecraft/class_1941;DDDLnet/minecraft/class_1309;Lnet/minecraft/class_4050;)Lnet/minecraft/class_243; method_30342 func_242381_a - m (Lnet/minecraft/class_1941;Lnet/minecraft/class_1309;Lnet/minecraft/class_238;)Z method_27933 func_234631_a_ - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_30341 func_242380_a - m (D)Z method_27932 func_234630_a_ - m (Lnet/minecraft/class_2350;)[[I method_27934 func_234632_a_ - m (Lnet/minecraft/class_2338;ILjava/util/function/Function;)D method_30343 func_242383_a -c net/minecraft/class_1697 net/minecraft/entity/item/minecart/CommandBlockMinecartEntity - m ()Lnet/minecraft/class_2940; method_7566 access$100 - m ()Lnet/minecraft/class_2940; method_7568 access$000 - m ()Lnet/minecraft/class_1918; method_7567 getCommandBlockLogic - f Lnet/minecraft/class_1918; field_7744 commandBlockLogic - f Lnet/minecraft/class_2940; field_7743 COMMAND - f Lnet/minecraft/class_2940; field_7741 LAST_OUTPUT - f I field_7742 activatorRailCooldown -c net/minecraft/class_1697$class_1698 net/minecraft/entity/item/minecart/CommandBlockMinecartEntity$MinecartCommandLogic - m ()Lnet/minecraft/class_1697; method_7569 getMinecart - f Lnet/minecraft/class_1697; field_7745 field_210168_a -c net/minecraft/class_1694 net/minecraft/entity/item/minecart/ChestMinecartEntity -c net/minecraft/class_1700 net/minecraft/entity/item/minecart/HopperMinecartEntity - m (I)V method_7571 setTransferTicker - m ()Z method_7573 canTransfer - m ()Z method_7574 captureDroppedItems - m (Z)V method_7570 setBlocked - m ()Z method_7572 getBlocked - f Z field_7749 isBlocked - f I field_7748 transferTicker - f Lnet/minecraft/class_2338; field_7750 lastPosition -c net/minecraft/class_1696 net/minecraft/entity/item/minecart/FurnaceMinecartEntity - m (Z)V method_7564 setMinecartPowered - m ()Z method_7565 isMinecartPowered - f I field_7739 fuel - f Lnet/minecraft/class_2940; field_7740 POWERED - f D field_7737 pushX - f Lnet/minecraft/class_1856; field_7738 BURNABLE_FUELS - f D field_7736 pushZ -c net/minecraft/class_1701 net/minecraft/entity/item/minecart/TNTMinecartEntity - m ()Z method_7578 isIgnited - m ()I method_7577 getFuseTicks - m (D)V method_7576 explodeCart - m ()V method_7575 ignite - f I field_7751 minecartTNTFuse -c net/minecraft/class_1699 net/minecraft/entity/item/minecart/SpawnerMinecartEntity - f Lnet/minecraft/class_1917; field_7746 mobSpawnerLogic -c net/minecraft/class_1699$1 net/minecraft/entity/item/minecart/SpawnerMinecartEntity$1 - f Lnet/minecraft/class_1699; field_7747 field_184995_a -c net/minecraft/class_4174 net/minecraft/item/Food - m ()Ljava/util/List; method_19235 getEffects - m ()F method_19231 getSaturation - m ()I method_19230 getHealing - m ()Z method_19234 isFastEating - m ()Z method_19233 canEatWhenFull - m ()Z method_19232 isMeat - f Z field_18618 fastToEat - f Z field_18617 canEatWhenFull - f Z field_18616 meat - f Ljava/util/List; field_18619 effects - f F field_18615 saturation - f I field_18614 value -c net/minecraft/class_4174$1 net/minecraft/item/Food$1 -c net/minecraft/class_4174$class_4175 net/minecraft/item/Food$Builder - m ()Lnet/minecraft/class_4174$class_4175; method_19240 setAlwaysEdible - m (I)Lnet/minecraft/class_4174$class_4175; method_19238 hunger - m ()Lnet/minecraft/class_4174$class_4175; method_19241 fastToEat - m ()Lnet/minecraft/class_4174$class_4175; method_19236 meat - m (Lnet/minecraft/class_1293;F)Lnet/minecraft/class_4174$class_4175; method_19239 effect - m (F)Lnet/minecraft/class_4174$class_4175; method_19237 saturation - m ()Lnet/minecraft/class_4174; method_19242 build - f Z field_18624 fastToEat - f F field_18621 saturation - f I field_18620 value - f Ljava/util/List; field_18625 effects - f Z field_18622 meat - f Z field_18623 alwaysEdible -c net/minecraft/class_1702 net/minecraft/util/FoodStats - m (Lnet/minecraft/class_2487;)V method_7582 write - m (F)V method_7583 addExhaustion - m (F)V method_7581 setFoodSaturationLevel - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1799;)V method_7579 consume - m ()Z method_7587 needFood - m (Lnet/minecraft/class_2487;)V method_7584 read - m ()F method_7589 getSaturationLevel - m (Lnet/minecraft/class_1657;)V method_7588 tick - m (IF)V method_7585 addStats - m (I)V method_7580 setFoodLevel - m ()I method_7586 getFoodLevel - f F field_7752 foodExhaustionLevel - f F field_7753 foodSaturationLevel - f I field_7756 foodLevel - f I field_7755 foodTimer - f I field_7754 prevFoodLevel -c net/minecraft/class_4176 net/minecraft/item/Foods - m (I)Lnet/minecraft/class_4174; method_19243 buildStew - f Lnet/minecraft/class_4174; field_18639 BAKED_POTATO - f Lnet/minecraft/class_4174; field_20381 HONEY - f Lnet/minecraft/class_4174; field_18660 MELON_SLICE - f Lnet/minecraft/class_4174; field_18637 TROPICAL_FISH - f Lnet/minecraft/class_4174; field_18640 BEEF - f Lnet/minecraft/class_4174; field_18641 BEETROOT - f Lnet/minecraft/class_4174; field_18661 MUSHROOM_STEW - f Lnet/minecraft/class_4174; field_18634 SPIDER_EYE - f Lnet/minecraft/class_4174; field_18658 GOLDEN_APPLE - f Lnet/minecraft/class_4174; field_18659 GOLDEN_CARROT - f Lnet/minecraft/class_4174; field_18635 SUSPICIOUS_STEW - f Lnet/minecraft/class_4174; field_18636 SWEET_BERRIES - f Lnet/minecraft/class_4174; field_18638 APPLE - f Lnet/minecraft/class_4174; field_18655 COOKIE - f Lnet/minecraft/class_4174; field_18631 RABBIT_STEW - f Lnet/minecraft/class_4174; field_18632 ROTTEN_FLESH - f Lnet/minecraft/class_4174; field_18656 DRIED_KELP - f Lnet/minecraft/class_4174; field_18657 ENCHANTED_GOLDEN_APPLE - f Lnet/minecraft/class_4174; field_18633 SALMON - f Lnet/minecraft/class_4174; field_18652 COOKED_PORKCHOP - f Lnet/minecraft/class_4174; field_18653 COOKED_RABBIT - f Lnet/minecraft/class_4174; field_18629 PUMPKIN_PIE - f Lnet/minecraft/class_4174; field_18630 RABBIT - f Lnet/minecraft/class_4174; field_18654 COOKED_SALMON - f Lnet/minecraft/class_4174; field_18626 PORKCHOP - f Lnet/minecraft/class_4174; field_18650 COOKED_COD - f Lnet/minecraft/class_4174; field_18651 COOKED_MUTTON - f Lnet/minecraft/class_4174; field_18627 POTATO - f Lnet/minecraft/class_4174; field_18628 PUFFERFISH - f Lnet/minecraft/class_4174; field_18647 COD - f Lnet/minecraft/class_4174; field_18648 COOKED_BEEF - f Lnet/minecraft/class_4174; field_18649 COOKED_CHICKEN - f Lnet/minecraft/class_4174; field_18663 POISONOUS_POTATO - f Lnet/minecraft/class_4174; field_18644 CARROT - f Lnet/minecraft/class_4174; field_18645 CHICKEN - f Lnet/minecraft/class_4174; field_18646 CHORUS_FRUIT - f Lnet/minecraft/class_4174; field_18662 MUTTON - f Lnet/minecraft/class_4174; field_18642 BEETROOT_SOUP - f Lnet/minecraft/class_4174; field_18643 BREAD -c net/minecraft/class_1703 net/minecraft/inventory/container/Container - m (I)I method_7620 extractDragMode - m (Lnet/minecraft/class_1661;)S method_7614 getNextTransactionID - m ()Lnet/minecraft/class_2371; method_7602 getInventory - m (Lnet/minecraft/class_3915;)Lnet/minecraft/class_3915; method_17362 trackInt - m ()V method_7605 resetDrag - m (Lnet/minecraft/class_1712;)V method_7603 removeListener - m (Lnet/minecraft/class_1735;)Lnet/minecraft/class_1735; method_7621 addSlot - m (Lnet/minecraft/class_1735;Lnet/minecraft/class_1799;Z)Z method_7592 canAddItemToSlot - m (Lnet/minecraft/class_3913;)V method_17360 trackIntArray - m (Lnet/minecraft/class_1735;)Z method_7615 canDragIntoSlot - m (I)Lnet/minecraft/class_1735; method_7611 getSlot - m (Lnet/minecraft/class_1657;I)Lnet/minecraft/class_1799; method_7601 transferStackInSlot - m ()Ljava/lang/String; method_30011 func_241442_f_ - m (Lnet/minecraft/class_1657;)V method_7595 onContainerClosed - m (Lnet/minecraft/class_1263;)V method_7609 onCraftMatrixChanged - m (Lnet/minecraft/class_1263;I)V method_17359 assertInventorySize - m ()Lnet/minecraft/class_3917; method_17358 getType - m (Lnet/minecraft/class_1799;IIZ)Z method_7616 mergeItemStack - m (II)V method_7606 updateProgressBar - m (Lnet/minecraft/class_3913;I)V method_17361 assertIntArraySize - m (IILnet/minecraft/class_1713;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_30010 func_241440_b_ - m (ILnet/minecraft/class_1657;)Z method_7600 isValidDragMode - m (Ljava/util/Set;ILnet/minecraft/class_1799;I)V method_7617 computeStackSize - m (Lnet/minecraft/class_1657;Z)V method_7590 setCanCraft - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7612 areItemsAndTagsEqual - m (Lnet/minecraft/class_1263;)I method_7618 calcRedstoneFromInventory - m (ILnet/minecraft/class_1799;)V method_7619 putStackInSlot - m (Lnet/minecraft/class_1657;)Z method_7622 getCanCraft - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_1263;)V method_7607 clearContainer - m ()V method_7623 detectAndSendChanges - m (Ljava/util/List;)V method_7610 setAll - m (Lnet/minecraft/class_3914;Lnet/minecraft/class_1657;Lnet/minecraft/class_2248;)Z method_17695 isWithinUsableDistance - m (Lnet/minecraft/class_1657;I)Z method_7604 enchantItem - m (II)I method_7591 getQuickcraftMask - m ()Ljava/lang/String; method_30024 func_241441_e_ - m (Lnet/minecraft/class_1712;)V method_7596 addListener - m (Lnet/minecraft/class_1657;)Z method_7597 canInteractWith - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1735;)Z method_7613 canMergeSlot - m (Lnet/minecraft/class_2586;)I method_7608 calcRedstone - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Ljava/lang/Boolean; method_17696 func_216960_a - m (I)I method_7594 getDragEvent - m (IILnet/minecraft/class_1713;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_7593 slotClick - f Lnet/minecraft/class_2371; field_7764 inventoryItemStacks - f Ljava/util/List; field_7761 inventorySlots - f Ljava/util/Set; field_7757 dragSlots - f I field_7762 dragMode - f Ljava/util/Set; field_7760 playerList - f I field_7763 windowId - f S field_7758 transactionID - f I field_7759 dragEvent - f Ljava/util/List; field_17285 trackedIntReferences - f Lnet/minecraft/class_3917; field_17493 containerType - f Ljava/util/List; field_7765 listeners -c net/minecraft/class_1706 net/minecraft/inventory/container/RepairContainer - m (Ljava/lang/String;)V method_7625 updateItemName - m ()I method_17369 getMaximumCost - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_24922 func_234633_a_ - m (I)I method_20398 getNewRepairCost - f I field_7776 materialCost - f Lnet/minecraft/class_3915; field_7770 maximumCost - f Lorg/apache/logging/log4j/Logger; field_7771 LOGGER - f Ljava/lang/String; field_7774 repairedItemName -c net/minecraft/class_1706$1 net/minecraft/inventory/container/RepairContainer$1 - f [I field_7782 field_234634_a_ -c net/minecraft/class_1720 net/minecraft/inventory/container/AbstractFurnaceContainer - m ()Z method_17365 isBurning - m ()I method_17363 getCookProgressionScaled - m ()I method_17364 getBurnLeftScaled - m (Lnet/minecraft/class_1799;)Z method_16945 isFuel - m (Lnet/minecraft/class_1799;)Z method_7640 hasRecipe - f Lnet/minecraft/class_3956; field_17494 recipeType - f Lnet/minecraft/class_1263; field_7824 furnaceInventory - f Lnet/minecraft/class_3913; field_17286 furnaceData - f Lnet/minecraft/class_1937; field_7822 world - f Lnet/minecraft/class_5421; field_25762 field_242384_g -c net/minecraft/class_3705 net/minecraft/inventory/container/BlastFurnaceContainer -c net/minecraft/class_1704 net/minecraft/inventory/container/BeaconContainer - m ()Lnet/minecraft/class_1291; method_17374 func_216967_f - m (II)V method_17372 func_216966_c - m ()Lnet/minecraft/class_1291; method_17375 func_216968_g - m ()I method_17373 func_216969_e - m ()Z method_17376 func_216970_h - f Lnet/minecraft/class_3914; field_17289 worldPosCallable - f Lnet/minecraft/class_1263; field_17287 tileBeacon - f Lnet/minecraft/class_3913; field_17290 field_216972_f - f Lnet/minecraft/class_1704$class_1705; field_17288 beaconSlot -c net/minecraft/class_1704$class_1705 net/minecraft/inventory/container/BeaconContainer$BeaconSlot - f Lnet/minecraft/class_1704; field_7768 field_82876_a -c net/minecraft/class_1704$1 net/minecraft/inventory/container/BeaconContainer$1 - f Lnet/minecraft/class_1704; field_17291 field_213910_a -c net/minecraft/class_3910 net/minecraft/inventory/container/CartographyContainer - m (Lnet/minecraft/class_3910;)J method_21826 func_226606_a_ - m (Lnet/minecraft/class_3910;J)J method_21827 func_226607_a_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_17381 func_216993_a - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17382 func_216996_a - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17379 func_216995_a - f Lnet/minecraft/class_1731; field_19272 field_217001_f - f J field_20382 field_226605_f_ - f Lnet/minecraft/class_3914; field_17294 worldPosCallable - f Lnet/minecraft/class_1263; field_17293 tableInventory -c net/minecraft/class_3910$5 net/minecraft/inventory/container/CartographyContainer$5 - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17387 func_242385_a - f Lnet/minecraft/class_3914; field_17301 field_216937_a - f Lnet/minecraft/class_3910; field_17303 field_216938_b -c net/minecraft/class_3910$3 net/minecraft/inventory/container/CartographyContainer$3 - f Lnet/minecraft/class_3910; field_17299 field_216933_a -c net/minecraft/class_3910$4 net/minecraft/inventory/container/CartographyContainer$4 - f Lnet/minecraft/class_3910; field_17300 field_216934_a -c net/minecraft/class_3910$1 net/minecraft/inventory/container/CartographyContainer$1 - f Lnet/minecraft/class_3910; field_17298 field_213911_a -c net/minecraft/class_3910$2 net/minecraft/inventory/container/CartographyContainer$2 - f Lnet/minecraft/class_3910; field_19273 field_213924_a -c net/minecraft/class_1708 net/minecraft/inventory/container/BrewingStandContainer - m ()I method_17377 func_216982_e - m ()I method_17378 func_216981_f - f Lnet/minecraft/class_3913; field_17292 field_216983_d - f Lnet/minecraft/class_1735; field_7787 slot - f Lnet/minecraft/class_1263; field_7788 tileBrewingStand -c net/minecraft/class_1708$class_1710 net/minecraft/inventory/container/BrewingStandContainer$IngredientSlot -c net/minecraft/class_1708$class_1711 net/minecraft/inventory/container/BrewingStandContainer$PotionSlot - m (Lnet/minecraft/class_1799;)Z method_7631 canHoldPotion -c net/minecraft/class_1708$class_1709 net/minecraft/inventory/container/BrewingStandContainer$FuelSlot - m (Lnet/minecraft/class_1799;)Z method_7630 isValidBrewingFuel -c net/minecraft/class_1713 net/minecraft/inventory/container/ClickType - m (Ljava/lang/String;)Lnet/minecraft/class_1713; valueOf valueOf - m ()[Lnet/minecraft/class_1713; values values - f Lnet/minecraft/class_1713; field_7795 THROW - f [Lnet/minecraft/class_1713; field_7792 $VALUES - f Lnet/minecraft/class_1713; field_7793 PICKUP_ALL - f Lnet/minecraft/class_1713; field_7789 QUICK_CRAFT - f Lnet/minecraft/class_1713; field_7790 PICKUP - f Lnet/minecraft/class_1713; field_7791 SWAP - f Lnet/minecraft/class_1713; field_7794 QUICK_MOVE - f Lnet/minecraft/class_1713; field_7796 CLONE -c net/minecraft/class_1707 net/minecraft/inventory/container/ChestContainer - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19250 createGeneric9X5 - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19244 createGeneric9X1 - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19251 createGeneric9X6 - m ()Lnet/minecraft/class_1263; method_7629 getLowerChestInventory - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19246 createGeneric9X2 - m (ILnet/minecraft/class_1661;Lnet/minecraft/class_1263;)Lnet/minecraft/class_1707; method_19245 createGeneric9X3 - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19249 createGeneric9X4 - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1707; method_19248 createGeneric9X3 - m ()I method_17388 getNumRows - m (ILnet/minecraft/class_1661;Lnet/minecraft/class_1263;)Lnet/minecraft/class_1707; method_19247 createGeneric9X6 - f Lnet/minecraft/class_1263; field_17495 lowerChestInventory - f I field_17496 numRows -c net/minecraft/class_3914 net/minecraft/util/IWorldPosCallable - m (Ljava/util/function/BiConsumer;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Ljava/util/Optional; method_17394 func_221487_a - m (Ljava/util/function/BiFunction;Ljava/lang/Object;)Ljava/lang/Object; method_17396 applyOrElse - m (Ljava/util/function/BiFunction;)Ljava/util/Optional; method_17395 apply - m (Ljava/util/function/BiConsumer;)V method_17393 consume - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3914; method_17392 of - f Lnet/minecraft/class_3914; field_17304 DUMMY -c net/minecraft/class_3914$1 net/minecraft/util/IWorldPosCallable$1 -c net/minecraft/class_3914$2 net/minecraft/util/IWorldPosCallable$2 - f Lnet/minecraft/class_1937; field_17305 field_221490_b - f Lnet/minecraft/class_2338; field_17306 field_221491_c -c net/minecraft/class_3913 net/minecraft/util/IIntArray - m (II)V method_17391 set - m (I)I method_17390 get - m ()I method_17389 size -c net/minecraft/class_1715 net/minecraft/inventory/CraftingInventory - m ()I method_17397 getHeight - m ()I method_17398 getWidth - f Lnet/minecraft/class_2371; field_7805 stackList - f I field_7803 height - f I field_7804 width - f Lnet/minecraft/class_1703; field_7802 eventHandler -c net/minecraft/class_1712 net/minecraft/inventory/container/IContainerListener - m (Lnet/minecraft/class_1703;Lnet/minecraft/class_2371;)V method_7634 sendAllContents - m (Lnet/minecraft/class_1703;ILnet/minecraft/class_1799;)V method_7635 sendSlotContents - m (Lnet/minecraft/class_1703;II)V method_7633 sendWindowProperty -c net/minecraft/class_3915 net/minecraft/util/IntReferenceHolder - m ([II)Lnet/minecraft/class_3915; method_17406 create - m ()Lnet/minecraft/class_3915; method_17403 single - m (Lnet/minecraft/class_3913;I)Lnet/minecraft/class_3915; method_17405 create - m ()Z method_17408 isDirty - m (I)V method_17404 set - m ()I method_17407 get - f I field_17307 lastKnownValue -c net/minecraft/class_3915$3 net/minecraft/util/IntReferenceHolder$3 - f I field_17312 value -c net/minecraft/class_3915$1 net/minecraft/util/IntReferenceHolder$1 - f Lnet/minecraft/class_3913; field_17308 field_221502_a - f I field_17309 field_221503_b -c net/minecraft/class_3915$2 net/minecraft/util/IntReferenceHolder$2 - f I field_17311 field_221500_b - f [I field_17310 field_221499_a -c net/minecraft/class_1714 net/minecraft/inventory/container/WorkbenchContainer - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17400 func_217067_a - m (ILnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1715;Lnet/minecraft/class_1731;)V method_17399 updateCraftingResult - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17402 func_217068_a - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17401 func_217069_a - f Lnet/minecraft/class_1657; field_7797 player - f Lnet/minecraft/class_1715; field_7801 craftMatrix - f Lnet/minecraft/class_1731; field_7800 craftResult - f Lnet/minecraft/class_3914; field_7799 worldPosCallable -c net/minecraft/class_1718 net/minecraft/inventory/container/EnchantmentContainer - m ()I method_17413 func_217005_f - m ()I method_7638 getLapisAmount - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17411 func_217002_a - m (Lnet/minecraft/class_1799;II)Ljava/util/List; method_7637 getEnchantmentList - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17412 func_217004_a - m (Lnet/minecraft/class_1799;ILnet/minecraft/class_1657;ILnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17410 func_217003_a - f Lnet/minecraft/class_1263; field_7809 tableInventory - f [I field_7810 worldClue - f [I field_7812 enchantClue - f Lnet/minecraft/class_3915; field_7814 xpSeed - f Ljava/util/Random; field_7811 rand - f [I field_7808 enchantLevels - f Lnet/minecraft/class_3914; field_7813 worldPosCallable -c net/minecraft/class_1718$1 net/minecraft/inventory/container/EnchantmentContainer$1 - f Lnet/minecraft/class_1718; field_7815 field_70484_a -c net/minecraft/class_1718$2 net/minecraft/inventory/container/EnchantmentContainer$2 - f Lnet/minecraft/class_1718; field_7816 field_75227_a -c net/minecraft/class_1718$3 net/minecraft/inventory/container/EnchantmentContainer$3 - f Lnet/minecraft/class_1718; field_7817 field_178172_a -c net/minecraft/class_1716 net/minecraft/inventory/container/DispenserContainer - f Lnet/minecraft/class_1263; field_7806 dispenserInventory -c net/minecraft/class_3858 net/minecraft/inventory/container/FurnaceContainer -c net/minecraft/class_1717 net/minecraft/inventory/container/FurnaceFuelSlot - m (Lnet/minecraft/class_1799;)Z method_7636 isBucket - f Lnet/minecraft/class_1720; field_17083 field_216939_a -c net/minecraft/class_3803 net/minecraft/inventory/container/GrindstoneContainer - m (Lnet/minecraft/class_3803;)Lnet/minecraft/class_1263; method_16692 func_217008_a - m (Lnet/minecraft/class_1799;II)Lnet/minecraft/class_1799; method_16693 removeEnchantments - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17415 func_217009_a - m (Ljava/util/Map$Entry;)Z method_16694 func_217012_a - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_20268 copyEnchantments - m ()V method_16695 updateRecipeOutput - f Lnet/minecraft/class_3914; field_16775 worldPosCallable - f Lnet/minecraft/class_1263; field_16773 outputInventory - f Lnet/minecraft/class_1263; field_16772 inputInventory -c net/minecraft/class_3803$3 net/minecraft/inventory/container/GrindstoneContainer$3 - f Lnet/minecraft/class_3803; field_16778 field_216941_a -c net/minecraft/class_3803$4 net/minecraft/inventory/container/GrindstoneContainer$4 - m (Lnet/minecraft/class_1937;)I method_17416 getEnchantmentXpFromInputs - m (Lnet/minecraft/class_1799;)I method_16696 getEnchantmentXp - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17417 func_216944_a - f Lnet/minecraft/class_3914; field_16779 field_216945_a - f Lnet/minecraft/class_3803; field_16780 field_216946_b -c net/minecraft/class_3803$1 net/minecraft/inventory/container/GrindstoneContainer$1 - f Lnet/minecraft/class_3803; field_16776 field_213912_a -c net/minecraft/class_3803$2 net/minecraft/inventory/container/GrindstoneContainer$2 - f Lnet/minecraft/class_3803; field_16777 field_216940_a -c net/minecraft/class_1719 net/minecraft/inventory/container/FurnaceResultSlot - f I field_7819 removeCount - f Lnet/minecraft/class_1657; field_7818 player -c net/minecraft/class_1724 net/minecraft/inventory/container/HorseInventoryContainer - f Lnet/minecraft/class_1496; field_7837 horse - f Lnet/minecraft/class_1263; field_7836 horseInventory -c net/minecraft/class_1724$1 net/minecraft/inventory/container/HorseInventoryContainer$1 - f Lnet/minecraft/class_1724; field_7839 field_111239_a - f Lnet/minecraft/class_1496; field_7838 field_190902_a -c net/minecraft/class_1724$2 net/minecraft/inventory/container/HorseInventoryContainer$2 - f Lnet/minecraft/class_1496; field_7840 field_111241_a - f Lnet/minecraft/class_1724; field_7841 field_111240_b -c net/minecraft/class_1722 net/minecraft/inventory/container/HopperContainer - f Lnet/minecraft/class_1263; field_7826 hopperInventory -c net/minecraft/class_4861 net/minecraft/inventory/container/AbstractRepairContainer - m (Lnet/minecraft/class_1657;Z)Z method_24927 func_230303_b_ - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_24926 func_234647_b_ - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Ljava/lang/Boolean; method_24924 func_234646_a_ - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_24923 func_230301_a_ - m ()V method_24928 updateRepairOutput - m (Lnet/minecraft/class_2680;)Z method_24925 func_230302_a_ - m (Lnet/minecraft/class_1799;)Z method_30025 func_241210_a_ - f Lnet/minecraft/class_1657; field_22482 field_234645_f_ - f Lnet/minecraft/class_1263; field_22480 field_234643_d_ - f Lnet/minecraft/class_1731; field_22479 field_234642_c_ - f Lnet/minecraft/class_3914; field_22481 field_234644_e_ -c net/minecraft/class_4861$1 net/minecraft/inventory/container/AbstractRepairContainer$1 - f Lnet/minecraft/class_4861; field_7778 field_234648_a_ -c net/minecraft/class_4861$2 net/minecraft/inventory/container/AbstractRepairContainer$2 - f Lnet/minecraft/class_4861; field_22483 field_234649_a_ -c net/minecraft/class_1723 net/minecraft/inventory/container/PlayerContainer - m ()[Lnet/minecraft/class_2960; method_7641 func_226621_j_ - m ()Lnet/minecraft/class_1715; method_29281 func_234641_j_ - f [Lnet/minecraft/class_1304; field_7832 VALID_EQUIPMENT_SLOTS - f Lnet/minecraft/class_1715; field_7831 craftMatrix - f Lnet/minecraft/class_1731; field_7830 craftResult - f Lnet/minecraft/class_2960; field_21668 LOCATION_BLOCKS_TEXTURE - f Lnet/minecraft/class_2960; field_21669 EMPTY_ARMOR_SLOT_HELMET - f Lnet/minecraft/class_2960; field_21671 EMPTY_ARMOR_SLOT_LEGGINGS - f Lnet/minecraft/class_1657; field_7828 player - f Lnet/minecraft/class_2960; field_21670 EMPTY_ARMOR_SLOT_CHESTPLATE - f Lnet/minecraft/class_2960; field_21672 EMPTY_ARMOR_SLOT_BOOTS - f [Lnet/minecraft/class_2960; field_7829 ARMOR_SLOT_TEXTURES - f Z field_7827 isLocalWorld - f Lnet/minecraft/class_2960; field_21673 EMPTY_ARMOR_SLOT_SHIELD -c net/minecraft/class_1723$2 net/minecraft/inventory/container/PlayerContainer$2 - f Lnet/minecraft/class_1723; field_21674 field_185006_a -c net/minecraft/class_1723$1 net/minecraft/inventory/container/PlayerContainer$1 - f Lnet/minecraft/class_1304; field_7834 field_185005_a - f Lnet/minecraft/class_1723; field_7833 field_75235_b -c net/minecraft/class_1726 net/minecraft/inventory/container/LoomContainer - m (Lnet/minecraft/class_1726;)Lnet/minecraft/class_1735; method_17426 func_217029_c - m (Lnet/minecraft/class_1726;J)J method_21828 func_226623_a_ - m ()I method_7647 func_217023_e - m (Ljava/lang/Runnable;)V method_17423 func_217020_a - m (Lnet/minecraft/class_1726;)Lnet/minecraft/class_1735; method_17425 func_217027_b - m (Lnet/minecraft/class_1726;)J method_21829 func_226624_e_ - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17420 func_217028_a - m (Lnet/minecraft/class_1726;)Lnet/minecraft/class_3915; method_17427 func_217030_d - m ()Lnet/minecraft/class_1735; method_17431 getOutputSlot - m ()Lnet/minecraft/class_1735; method_17430 getPatternSlot - m ()V method_17432 func_217032_k - m (Lnet/minecraft/class_1726;)Ljava/lang/Runnable; method_17421 func_217021_a - m ()V method_7648 createOutputStack - m ()Lnet/minecraft/class_1735; method_17428 getBannerSlot - m ()Lnet/minecraft/class_1735; method_17429 getDyeSlot - f Lnet/minecraft/class_1735; field_17321 slotPattern - f Lnet/minecraft/class_1735; field_17319 slotBanner - f Lnet/minecraft/class_1735; field_17320 slotDye - f Lnet/minecraft/class_1263; field_7850 inputInventory - f Lnet/minecraft/class_1263; field_17323 outputInventory - f J field_20383 field_226622_j_ - f Ljava/lang/Runnable; field_17318 runnable - f Lnet/minecraft/class_3915; field_17317 field_217034_d - f Lnet/minecraft/class_3914; field_17316 worldPos - f Lnet/minecraft/class_1735; field_17322 output -c net/minecraft/class_1726$5 net/minecraft/inventory/container/LoomContainer$5 - f Lnet/minecraft/class_1726; field_7854 field_216950_a -c net/minecraft/class_1726$6 net/minecraft/inventory/container/LoomContainer$6 - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17433 func_216951_a - f Lnet/minecraft/class_3914; field_17325 field_216952_a - f Lnet/minecraft/class_1726; field_7855 field_216953_b -c net/minecraft/class_1726$3 net/minecraft/inventory/container/LoomContainer$3 - f Lnet/minecraft/class_1726; field_7852 field_216948_a -c net/minecraft/class_1726$4 net/minecraft/inventory/container/LoomContainer$4 - f Lnet/minecraft/class_1726; field_7853 field_216949_a -c net/minecraft/class_1726$1 net/minecraft/inventory/container/LoomContainer$1 - f Lnet/minecraft/class_1726; field_7851 field_213913_a -c net/minecraft/class_1726$2 net/minecraft/inventory/container/LoomContainer$2 - f Lnet/minecraft/class_1726; field_17324 field_213914_a -c net/minecraft/class_3916 net/minecraft/inventory/container/LecternContainer - m ()I method_17419 getPage - m ()Lnet/minecraft/class_1799; method_17418 getBook - f Lnet/minecraft/class_3913; field_17314 field_217019_d - f Lnet/minecraft/class_1263; field_17313 lecternInventory -c net/minecraft/class_3916$1 net/minecraft/inventory/container/LecternContainer$1 - f Lnet/minecraft/class_3916; field_17315 field_216947_a -c net/minecraft/class_1270 net/minecraft/inventory/container/IContainerProvider - m (ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; createMenu createMenu -c net/minecraft/class_1725 net/minecraft/inventory/MerchantInventory - m (I)V method_7643 setCurrentRecipeIndex - m ()I method_19252 getClientSideExp - m (I)Z method_7644 inventoryResetNeededOnSlotChange - m ()V method_7645 resetRecipeAndSlots - m ()Lnet/minecraft/class_1914; method_7642 func_214025_g - f Lnet/minecraft/class_2371; field_7845 slots - f Lnet/minecraft/class_1914; field_7843 field_214026_c - f I field_18668 exp - f Lnet/minecraft/class_1915; field_7844 merchant - f I field_7842 currentRecipeIndex -c net/minecraft/class_3917 net/minecraft/inventory/container/ContainerType - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_3916; method_17436 func_221504_b - m (Ljava/lang/String;Lnet/minecraft/class_3917$class_3918;)Lnet/minecraft/class_3917; method_17435 register - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1703; method_17434 create - f Lnet/minecraft/class_3917; field_17335 FURNACE - f Lnet/minecraft/class_3917; field_17336 GRINDSTONE - f Lnet/minecraft/class_3917; field_17334 ENCHANTMENT - f Lnet/minecraft/class_3917; field_17333 CRAFTING - f Lnet/minecraft/class_3917; field_17331 BLAST_FURNACE - f Lnet/minecraft/class_3917; field_17332 BREWING_STAND - f Lnet/minecraft/class_3917; field_17330 BEACON - f Lnet/minecraft/class_3917; field_17329 ANVIL - f Lnet/minecraft/class_3917; field_17327 GENERIC_9X6 - f Lnet/minecraft/class_3917; field_17328 GENERIC_3X3 - f Lnet/minecraft/class_3917; field_18667 GENERIC_9X5 - f Lnet/minecraft/class_3917; field_18666 GENERIC_9X4 - f Lnet/minecraft/class_3917; field_18665 GENERIC_9X2 - f Lnet/minecraft/class_3917; field_17625 STONECUTTER - f Lnet/minecraft/class_3917; field_17326 GENERIC_9X3 - f Lnet/minecraft/class_3917; field_17342 SMOKER - f Lnet/minecraft/class_3917; field_18664 GENERIC_9X1 - f Lnet/minecraft/class_3917; field_17343 CARTOGRAPHY_TABLE - f Lnet/minecraft/class_3917; field_22484 SMITHING - f Lnet/minecraft/class_3917; field_17341 SHULKER_BOX - f Lnet/minecraft/class_3917; field_17339 LOOM - f Lnet/minecraft/class_3917$class_3918; field_17344 factory - f Lnet/minecraft/class_3917; field_17340 MERCHANT - f Lnet/minecraft/class_3917; field_17338 LECTERN - f Lnet/minecraft/class_3917; field_17337 HOPPER -c net/minecraft/class_3917$class_3918 net/minecraft/inventory/container/ContainerType$IFactory - m (ILnet/minecraft/class_1661;)Lnet/minecraft/class_1703; create create -c net/minecraft/class_1727 net/minecraft/inventory/container/MerchantResultSlot - f Lnet/minecraft/class_1915; field_7858 merchant - f I field_7859 removeCount - f Lnet/minecraft/class_1657; field_7857 player - f Lnet/minecraft/class_1725; field_7860 merchantInventory -c net/minecraft/class_1728 net/minecraft/inventory/container/MerchantContainer - m ()I method_19256 getPendingExp - m (I)V method_19255 setXp - m ()Z method_19259 func_217042_i - m ()I method_19254 getXp - m ()V method_20595 playMerchantYesSound - m (I)V method_7650 setCurrentRecipeIndex - m ()Z method_20701 func_223432_h - m (ILnet/minecraft/class_1799;)V method_20214 func_217053_c - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_20213 areItemStacksEqual - m (Z)V method_20700 func_223431_b - m (Lnet/minecraft/class_1916;)V method_17437 setClientSideOffers - m (Z)V method_19253 func_217045_a - m ()Lnet/minecraft/class_1916; method_17438 getOffers - m (I)V method_20215 func_217046_g - m ()I method_19258 getMerchantLevel - m (I)V method_19257 setMerchantLevel - f I field_18669 merchantLevel - f Lnet/minecraft/class_1725; field_7861 merchantInventory - f Lnet/minecraft/class_1915; field_7863 merchant - f Z field_19358 field_223433_g - f Z field_18670 field_217055_f -c net/minecraft/class_1729 net/minecraft/inventory/container/RecipeBookContainer - m ()Lnet/minecraft/class_5421; method_30264 func_241850_m - m ()I method_7656 getHeight - m ()I method_7653 getWidth - m (Lnet/minecraft/class_1860;)Z method_7652 matches - m ()I method_7655 getOutputSlot - m ()V method_7657 clear - m (Lnet/minecraft/class_1662;)V method_7654 fillStackedContents - m ()I method_7658 getSize - m (ZLnet/minecraft/class_1860;Lnet/minecraft/class_3222;)V method_17697 func_217056_a -c net/minecraft/class_1730 net/minecraft/inventory/EnderChestInventory - m (Lnet/minecraft/class_2611;)V method_7661 setChestTileEntity - f Lnet/minecraft/class_2611; field_7864 associatedChest -c net/minecraft/class_1732 net/minecraft/inventory/IRecipeHolder - m (Lnet/minecraft/class_1860;)V method_7662 setRecipeUsed - m (Lnet/minecraft/class_1657;)V method_7664 onCrafting - m ()Lnet/minecraft/class_1860; method_7663 getRecipeUsed - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_3222;Lnet/minecraft/class_1860;)Z method_7665 canUseRecipe -c net/minecraft/class_5421 net/minecraft/item/crafting/RecipeBookCategory - m ()[Lnet/minecraft/class_5421; values values - m (Ljava/lang/String;)Lnet/minecraft/class_5421; valueOf valueOf - f Lnet/minecraft/class_5421; field_25766 SMOKER - f [Lnet/minecraft/class_5421; field_25767 $VALUES - f Lnet/minecraft/class_5421; field_25764 FURNACE - f Lnet/minecraft/class_5421; field_25765 BLAST_FURNACE - f Lnet/minecraft/class_5421; field_25763 CRAFTING -c net/minecraft/class_1734 net/minecraft/inventory/container/CraftingResultSlot - f Lnet/minecraft/class_1715; field_7870 craftMatrix - f I field_7869 amountCrafted - f Lnet/minecraft/class_1657; field_7868 player -c net/minecraft/class_1731 net/minecraft/inventory/CraftResultInventory - f Lnet/minecraft/class_1860; field_7865 recipeUsed - f Lnet/minecraft/class_2371; field_7866 stackResult -c net/minecraft/class_1736 net/minecraft/inventory/container/ShulkerBoxSlot -c net/minecraft/class_1733 net/minecraft/inventory/container/ShulkerBoxContainer - f Lnet/minecraft/class_1263; field_7867 inventory -c net/minecraft/class_1735 net/minecraft/inventory/container/Slot - m ()Lcom/mojang/datafixers/util/Pair; method_7679 getBackground - m (Lnet/minecraft/class_1799;)V method_7669 onCrafting - m ()Z method_7682 isEnabled - m (Lnet/minecraft/class_1799;)Z method_7680 isItemValid - m (Lnet/minecraft/class_1799;)V method_7673 putStack - m ()V method_7668 onSlotChanged - m (I)Lnet/minecraft/class_1799; method_7671 decrStackSize - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_7667 onTake - m ()Lnet/minecraft/class_1799; method_7677 getStack - m ()Z method_7681 getHasStack - m ()I method_7675 getSlotStackLimit - m (Lnet/minecraft/class_1799;I)V method_7678 onCrafting - m (Lnet/minecraft/class_1799;)I method_7676 getItemStackLimit - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_7670 onSlotChange - m (I)V method_7672 onSwapCraft - m (Lnet/minecraft/class_1657;)Z method_7674 canTakeStack - f I field_7875 slotIndex - f I field_7874 slotNumber - f Lnet/minecraft/class_1263; field_7871 inventory - f I field_7873 xPos - f I field_7872 yPos -c net/minecraft/class_3919 net/minecraft/util/IntArray - f [I field_17345 array -c net/minecraft/class_3706 net/minecraft/inventory/container/SmokerContainer -c net/minecraft/class_4862 net/minecraft/inventory/container/SmithingTableContainer - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_24929 func_234653_a_ - m (I)V method_29539 func_234654_d_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_5357;)Z method_30026 func_241444_a_ - f Lnet/minecraft/class_5357; field_25386 field_234652_h_ - f Lnet/minecraft/class_1937; field_25385 field_234651_g_ - f Ljava/util/List; field_25668 field_241443_i_ -c net/minecraft/class_3971 net/minecraft/inventory/container/StonecutterContainer - m ()I method_17862 getSelectedRecipe - m (I)Z method_30160 func_241818_d_ - m (Lnet/minecraft/class_3971;J)J method_17858 func_242386_a - m ()I method_17864 getRecipeListSize - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1799;)V method_17855 updateAvailableRecipes - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17856 func_217079_a - m (Lnet/minecraft/class_3971;)Ljava/lang/Runnable; method_17857 func_217077_a - m ()V method_17866 updateRecipeResultSlot - m ()Z method_17865 hasItemsinInputSlot - m ()V method_17867 func_217080_j - m (Lnet/minecraft/class_3971;)Lnet/minecraft/class_1731; method_30960 func_242387_b - m ()Ljava/util/List; method_17863 getRecipeList - m (Lnet/minecraft/class_3971;)J method_17861 func_242389_d - m (Lnet/minecraft/class_3971;)V method_17860 func_242388_c - m (Ljava/lang/Runnable;)V method_17859 setInventoryUpdateListener - f Ljava/lang/Runnable; field_17636 inventoryUpdateListener - f J field_17635 lastOnTake - f Lnet/minecraft/class_3914; field_17630 worldPosCallable - f Lnet/minecraft/class_1263; field_17629 inputInventory - f Lnet/minecraft/class_3915; field_17631 selectedRecipe - f Lnet/minecraft/class_1937; field_17632 world - f Lnet/minecraft/class_1799; field_17634 itemStackInput - f Ljava/util/List; field_17633 recipes - f Lnet/minecraft/class_1731; field_19173 inventory - f Lnet/minecraft/class_1735; field_17628 outputInventorySlot - f Lnet/minecraft/class_1735; field_17627 inputInventorySlot -c net/minecraft/class_3971$1 net/minecraft/inventory/container/StonecutterContainer$1 - f Lnet/minecraft/class_3971; field_17637 field_213915_a -c net/minecraft/class_3971$2 net/minecraft/inventory/container/StonecutterContainer$2 - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17868 func_216954_a - f Lnet/minecraft/class_3914; field_17638 field_216955_a - f Lnet/minecraft/class_3971; field_17639 field_216956_b -c net/minecraft/class_1737 net/minecraft/inventory/IRecipeHelperPopulator - m (Lnet/minecraft/class_1662;)V method_7683 fillStackedContents -c net/minecraft/class_1739 net/minecraft/item/AirItem - f Lnet/minecraft/class_2248; field_7882 block -c net/minecraft/class_1741 net/minecraft/item/IArmorMaterial - m ()F method_7700 getToughness - m ()F method_24355 getKnockbackResistance - m ()Ljava/lang/String; method_7694 getName - m (Lnet/minecraft/class_1304;)I method_7696 getDurability - m ()I method_7699 getEnchantability - m (Lnet/minecraft/class_1304;)I method_7697 getDamageReductionAmount - m ()Lnet/minecraft/class_3414; method_7698 getSoundEvent - m ()Lnet/minecraft/class_1856; method_7695 getRepairMaterial -c net/minecraft/class_1738 net/minecraft/item/ArmorItem - m ()Lnet/minecraft/class_1304; method_7685 getEquipmentSlot - m ()Lnet/minecraft/class_1741; method_7686 getArmorMaterial - m (Lnet/minecraft/class_2342;Lnet/minecraft/class_1799;)Z method_7684 func_226626_a_ - m ()F method_26353 getToughness - m ()I method_7687 getDamageReduceAmount - f Lnet/minecraft/class_1741; field_7881 material - f F field_7877 toughness - f I field_7878 damageReduceAmount - f F field_21976 knockbackResistance - f Lnet/minecraft/class_1304; field_7880 slot - f Lcom/google/common/collect/Multimap; field_23741 field_234656_m_ - f [Ljava/util/UUID; field_7876 ARMOR_MODIFIERS - f Lnet/minecraft/class_2357; field_7879 DISPENSER_BEHAVIOR -c net/minecraft/class_1738$1 net/minecraft/item/ArmorItem$1 -c net/minecraft/class_1742 net/minecraft/item/ArmorStandItem - m (Lnet/minecraft/class_1531;Ljava/util/Random;)V method_7701 applyRandomRotations - m (Lnet/minecraft/class_1297;)Z method_30265 func_242390_a -c net/minecraft/class_1740 net/minecraft/item/ArmorMaterial - m ()[Lnet/minecraft/class_1740; values values - m (Ljava/lang/String;)Lnet/minecraft/class_1740; valueOf valueOf - m ()Lnet/minecraft/class_1856; method_7688 func_200907_j - m ()Lnet/minecraft/class_1856; method_7690 func_200906_i - m ()Lnet/minecraft/class_1856; method_7689 func_200905_h - m ()Lnet/minecraft/class_1856; method_7691 func_200903_g - m ()Lnet/minecraft/class_1856; method_7692 func_200904_f - m ()Lnet/minecraft/class_1856; method_7693 func_203177_f - m ()Lnet/minecraft/class_1856; method_24356 func_234661_g_ - f Ljava/lang/String; field_7884 name - f Lnet/minecraft/class_3528; field_7885 repairMaterial - f Lnet/minecraft/class_1740; field_21977 NETHERITE - f Lnet/minecraft/class_1740; field_7890 TURTLE - f Lnet/minecraft/class_1740; field_7889 DIAMOND - f Lnet/minecraft/class_1740; field_7895 GOLD - f [I field_7891 MAX_DAMAGE_ARRAY - f I field_7883 maxDamageFactor - f Lnet/minecraft/class_3414; field_7886 soundEvent - f Lnet/minecraft/class_1740; field_7892 IRON - f Lnet/minecraft/class_1740; field_7887 CHAIN - f I field_7896 enchantability - f [I field_7893 damageReductionAmountArray - f F field_7894 toughness - f Lnet/minecraft/class_1740; field_7897 LEATHER - f [Lnet/minecraft/class_1740; field_7888 $VALUES - f F field_21978 knockbackResistance -c net/minecraft/class_1744 net/minecraft/item/ArrowItem - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1665; method_7702 createArrow -c net/minecraft/class_1746 net/minecraft/item/BannerItem - m ()Lnet/minecraft/class_1767; method_7706 getColor - m (Lnet/minecraft/class_1799;Ljava/util/List;)V method_7705 appendHoverTextFromTileEntityTag -c net/minecraft/class_1743 net/minecraft/item/AxeItem - m (Lnet/minecraft/class_1838;Lnet/minecraft/class_1657;)V method_20269 func_220040_a - f Ljava/util/Map; field_7898 BLOCK_STRIPPING_MAP - f Ljava/util/Set; field_23139 EFFECTIVE_ON_MATERIALS - f Ljava/util/Set; field_7899 EFFECTIVE_ON_BLOCKS -c net/minecraft/class_1748 net/minecraft/item/BedItem -c net/minecraft/class_1745 net/minecraft/item/BannerPatternItem - m ()Lnet/minecraft/class_5250; method_7703 func_219981_d_ - m ()Lnet/minecraft/class_2582; method_7704 getBannerPattern - f Lnet/minecraft/class_2582; field_7900 pattern -c net/minecraft/class_1749 net/minecraft/item/BoatItem - f Ljava/util/function/Predicate; field_17497 field_219989_a - f Lnet/minecraft/class_1690$class_1692; field_7902 type -c net/minecraft/class_1747 net/minecraft/item/BlockItem - m (Lnet/minecraft/class_1750;)Lnet/minecraft/class_2680; method_7707 getStateForPlacement - m (Lnet/minecraft/class_1750;Lnet/minecraft/class_2680;)Z method_7709 canPlace - m ()Z method_20360 checkPosition - m (Ljava/util/Map;Lnet/minecraft/class_1792;)V method_7713 addToBlockToItemMap - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;Ljava/lang/Comparable;)Lnet/minecraft/class_2680; method_18082 func_219986_a - m (Lnet/minecraft/class_1750;Lnet/minecraft/class_2680;)Z method_7708 placeBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;Ljava/lang/String;)Lnet/minecraft/class_2680; method_18083 func_219988_a - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)Z method_7714 setTileEntityNBT - m (Lnet/minecraft/class_1750;)Lnet/minecraft/class_1750; method_16356 getBlockItemUseContext - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_18084 func_219985_a - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;Lnet/minecraft/class_2680;)Z method_7710 onBlockPlaced - m (Lnet/minecraft/class_1750;)Lnet/minecraft/class_1269; method_7712 tryPlace - m ()Lnet/minecraft/class_2248; method_7711 getBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_3414; method_19260 getPlaceSound - f Lnet/minecraft/class_2248; field_7901 block -c net/minecraft/class_1751 net/minecraft/item/BookItem -c net/minecraft/class_1752 net/minecraft/item/BoneMealItem - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_7719 growSeagrass - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)V method_7721 spawnBonemealParticles - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_7720 applyBonemeal -c net/minecraft/class_1753 net/minecraft/item/BowItem - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1657;)V method_20270 func_220009_a_ - m (I)F method_7722 getArrowVelocity -c net/minecraft/class_1754 net/minecraft/item/GlassBottleItem - m (Lnet/minecraft/class_1295;)Z method_7726 func_210311_a - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_7725 turnBottleIntoItem -c net/minecraft/class_1755 net/minecraft/item/BucketItem - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;)V method_7728 onLiquidPlaced - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1799; method_7732 emptyBucket - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_3965;)Z method_7731 tryPlaceContainedLiquid - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_7727 playEmptySound - f Lnet/minecraft/class_3611; field_7905 containedBlock -c net/minecraft/class_1756 net/minecraft/item/SoupItem -c net/minecraft/class_1759 net/minecraft/item/CompassItem - m (Lnet/minecraft/class_5321;Lnet/minecraft/class_2338;Lnet/minecraft/class_2487;)V method_27315 func_234669_a_ - m (Lnet/minecraft/class_1799;)Z method_26365 func_234670_d_ - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2520;)V method_28375 func_234668_a_ - m (Lnet/minecraft/class_2487;)Ljava/util/Optional; method_26364 func_234667_a_ - f Lorg/apache/logging/log4j/Logger; field_24670 field_234666_a_ -c net/minecraft/class_1757 net/minecraft/item/ChorusFruitItem -c net/minecraft/class_1761 net/minecraft/item/ItemGroup - m ()Lnet/minecraft/class_1761; method_7748 setNoTitle - m ()Ljava/lang/String; method_7751 getPath - m (Ljava/lang/String;)Lnet/minecraft/class_1761; method_7753 setBackgroundImageName - m ()Z method_7752 isAlignedRight - m ()[Lnet/minecraft/class_1886; method_7744 getRelevantEnchantmentTypes - m ()Lnet/minecraft/class_1799; method_7747 getIcon - m ()Ljava/lang/String; method_7742 getBackgroundImageName - m (Lnet/minecraft/class_1886;)Z method_7740 hasRelevantEnchantmentType - m (Ljava/lang/String;)Lnet/minecraft/class_1761; method_7739 setTabPath - m ()I method_7743 getColumn - m ()Z method_7754 drawInForegroundOfTab - m ()Z method_7756 hasScrollbar - m ([Lnet/minecraft/class_1886;)Lnet/minecraft/class_1761; method_7745 setRelevantEnchantmentTypes - m ()Z method_7755 isOnTopRow - m (Lnet/minecraft/class_2371;)V method_7738 fill - m ()I method_7741 getIndex - m ()Lnet/minecraft/class_1799; method_7750 createIcon - m ()Lnet/minecraft/class_1761; method_7749 setNoScrollbar - m ()Lnet/minecraft/class_2561; method_7737 getGroupName - f Lnet/minecraft/class_1761; field_7924 BREWING - f Lnet/minecraft/class_1799; field_7934 icon - f Lnet/minecraft/class_1761; field_7930 TOOLS - f [Lnet/minecraft/class_1886; field_7927 enchantmentTypes - f Lnet/minecraft/class_1761; field_7915 SEARCH - f I field_7933 index - f Lnet/minecraft/class_1761; field_7923 TRANSPORTATION - f Lnet/minecraft/class_1761; field_7928 DECORATIONS - f Ljava/lang/String; field_7919 backgroundTexture - f [Lnet/minecraft/class_1761; field_7921 GROUPS - f Z field_7920 hasScrollbar - f Lnet/minecraft/class_1761; field_7918 INVENTORY - f Lnet/minecraft/class_1761; field_7929 MATERIALS - f Lnet/minecraft/class_1761; field_7916 COMBAT - f Lnet/minecraft/class_1761; field_7922 FOOD - f Lnet/minecraft/class_1761; field_7932 MISC - f Lnet/minecraft/class_1761; field_7914 REDSTONE - f Lnet/minecraft/class_2561; field_26391 groupName - f Lnet/minecraft/class_1761; field_7931 BUILDING_BLOCKS - f Ljava/lang/String; field_7926 tabPath - f Ljava/lang/String; field_7935 tabLabel - f Z field_7917 drawTitle - f Lnet/minecraft/class_1761; field_7925 HOTBAR -c net/minecraft/class_1761$4 net/minecraft/item/ItemGroup$12 -c net/minecraft/class_1761$3 net/minecraft/item/ItemGroup$11 -c net/minecraft/class_1761$2 net/minecraft/item/ItemGroup$10 -c net/minecraft/class_1761$1 net/minecraft/item/ItemGroup$1 -c net/minecraft/class_1761$9 net/minecraft/item/ItemGroup$6 -c net/minecraft/class_1761$8 net/minecraft/item/ItemGroup$5 -c net/minecraft/class_1761$7 net/minecraft/item/ItemGroup$4 -c net/minecraft/class_1761$6 net/minecraft/item/ItemGroup$3 -c net/minecraft/class_1761$5 net/minecraft/item/ItemGroup$2 -c net/minecraft/class_1761$12 net/minecraft/item/ItemGroup$9 -c net/minecraft/class_1761$10 net/minecraft/item/ItemGroup$7 -c net/minecraft/class_1761$11 net/minecraft/item/ItemGroup$8 -c net/minecraft/class_1762 net/minecraft/item/AbstractMapItem - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;)Lnet/minecraft/class_2596; method_7757 getUpdatePacket -c net/minecraft/class_1763 net/minecraft/item/DebugStickItem - m (Ljava/lang/Iterable;Ljava/lang/Object;Z)Ljava/lang/Object; method_7760 getAdjacentValue - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;)Ljava/lang/String; method_7761 func_195957_a - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2561;)V method_7762 sendMessage - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;Z)Lnet/minecraft/class_2680; method_7758 cycleProperty - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;ZLnet/minecraft/class_1799;)V method_7759 handleClick -c net/minecraft/class_1764 net/minecraft/item/CrossbowItem - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)V method_7778 addChargedProjectile - m (Z)F method_7784 getRandomSoundPitch - m (Lnet/minecraft/class_1799;Z)V method_7782 setCharged - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1799;)Z method_7768 func_220010_a_ - m (Lnet/minecraft/class_1799;)Ljava/util/List; method_7785 getChargedProjectiles - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;Lnet/minecraft/class_1268;Lnet/minecraft/class_1799;FF)V method_7777 fireProjectiles - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;)Z method_7767 hasAmmo - m (Lnet/minecraft/class_1799;)I method_7775 getChargeTime - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1665; method_18814 createArrow - m (ILnet/minecraft/class_1799;)F method_7770 getCharge - m (Lnet/minecraft/class_1799;)V method_7766 clearProjectiles - m (Lnet/minecraft/class_1799;)Z method_7781 isCharged - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1792;)Z method_7772 hasChargedProjectile - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;ZZ)Z method_7765 func_220023_a - m (Ljava/util/Random;)[F method_7780 getRandomSoundPitches - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1309;)V method_20272 func_220017_a_ - m (Lnet/minecraft/class_1799;)F method_20309 func_220013_l - m (I)Lnet/minecraft/class_3414; method_7773 getSoundEvent - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;)V method_7769 fireProjectilesAfter - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;Lnet/minecraft/class_1268;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;FZFFF)V method_7763 fireProjectile - f Z field_7937 isLoadingStart - f Z field_7936 isLoadingMiddle -c net/minecraft/class_1765 net/minecraft/item/TallBlockItem -c net/minecraft/class_1766 net/minecraft/item/ToolItem - m ()F method_26366 getAttackDamage - m (Lnet/minecraft/class_1309;)V method_20273 func_220038_a - m (Lnet/minecraft/class_1309;)V method_20274 func_220039_b - f Ljava/util/Set; field_7941 effectiveBlocks - f F field_7940 efficiency - f F field_7939 attackDamage - f Lcom/google/common/collect/Multimap; field_23742 toolAttributes -c net/minecraft/class_1769 net/minecraft/item/DyeItem - m ()Lnet/minecraft/class_1767; method_7802 getDyeColor - m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_1769; method_7803 getItem - f Lnet/minecraft/class_1767; field_7969 dyeColor - f Ljava/util/Map; field_7968 COLOR_DYE_ITEM_MAP -c net/minecraft/class_1767 net/minecraft/item/DyeColor - m (Ljava/lang/String;Lnet/minecraft/class_1767;)Lnet/minecraft/class_1767; method_7793 byTranslationKey - m (Lnet/minecraft/class_1767;)Ljava/lang/Integer; method_7795 func_199793_b - m ()Ljava/lang/String; toString toString - m ()[Lnet/minecraft/class_1767; values values - m ()Ljava/lang/String; method_7792 getTranslationKey - m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_1767; method_7797 func_199794_a - m ()I method_7789 getId - m ()Lnet/minecraft/class_3620; method_7794 getMapColor - m (I)Lnet/minecraft/class_1767; method_7791 byId - m (Ljava/lang/String;)Lnet/minecraft/class_1767; valueOf valueOf - m (I)Lnet/minecraft/class_1767; method_7786 byFireworkColor - m ()[F method_7787 getColorComponentValues - m ()I method_7790 getFireworkColor - m ()I method_16357 getTextColor - m (I)[Lnet/minecraft/class_1767; method_7796 func_199795_c - f Lnet/minecraft/class_1767; field_7967 LIGHT_GRAY - f [Lnet/minecraft/class_1767; field_7953 $VALUES - f Lnet/minecraft/class_1767; field_7944 GRAY - f Lnet/minecraft/class_3620; field_7956 mapColor - f Lnet/minecraft/class_1767; field_7954 PINK - f I field_7965 id - f Lnet/minecraft/class_1767; field_7961 LIME - f Lnet/minecraft/class_1767; field_7947 YELLOW - f I field_7949 colorValue - f Lnet/minecraft/class_1767; field_7951 LIGHT_BLUE - f [Lnet/minecraft/class_1767; field_7959 VALUES - f Lnet/minecraft/class_1767; field_7958 MAGENTA - f I field_7962 swappedColorValue - f Lnet/minecraft/class_1767; field_7946 ORANGE - f [F field_7943 colorComponentValues - f I field_7960 fireworkColor - f Lnet/minecraft/class_1767; field_7952 WHITE - f I field_16537 textColor - f Lnet/minecraft/class_1767; field_7963 BLACK - f Lnet/minecraft/class_1767; field_7964 RED - f Ljava/lang/String; field_7948 translationKey - f Lnet/minecraft/class_1767; field_7942 GREEN - f Lnet/minecraft/class_1767; field_7957 BROWN - f Lnet/minecraft/class_1767; field_7966 BLUE - f Lit/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap; field_7950 BY_FIREWORK_COLOR - f Lnet/minecraft/class_1767; field_7945 PURPLE - f Lnet/minecraft/class_1767; field_7955 CYAN -c net/minecraft/class_4058 net/minecraft/item/DyeableHorseArmorItem -c net/minecraft/class_4057 net/minecraft/item/DyeableArmorItem -c net/minecraft/class_1771 net/minecraft/item/EggItem -c net/minecraft/class_1768 net/minecraft/item/IDyeableArmorItem - m (Lnet/minecraft/class_1799;)Z method_7801 hasColor - m (Lnet/minecraft/class_1799;I)V method_7799 setColor - m (Lnet/minecraft/class_1799;)V method_7798 removeColor - m (Lnet/minecraft/class_1799;)I method_7800 getColor - m (Lnet/minecraft/class_1799;Ljava/util/List;)Lnet/minecraft/class_1799; method_19261 dyeItem -c net/minecraft/class_1770 net/minecraft/item/ElytraItem - m (Lnet/minecraft/class_1799;)Z method_7804 isUsable -c net/minecraft/class_1772 net/minecraft/item/EnchantedBookItem - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2499; method_7806 getEnchantments - m (Lnet/minecraft/class_1889;)Lnet/minecraft/class_1799; method_7808 getEnchantedItemStack - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1889;)V method_7807 addEnchantment -c net/minecraft/class_1773 net/minecraft/item/MapItem -c net/minecraft/class_1774 net/minecraft/item/EnderCrystalItem -c net/minecraft/class_1775 net/minecraft/item/EnchantedGoldenAppleItem -c net/minecraft/class_1776 net/minecraft/item/EnderPearlItem -c net/minecraft/class_1777 net/minecraft/item/EnderEyeItem -c net/minecraft/client/main/Main net/minecraft/client/main/Main - m (Ljoptsimple/OptionSet;Ljoptsimple/OptionSpec;)Ljava/lang/Object; method_11428 getValue - m (Ljava/lang/Integer;)Ljava/util/OptionalInt; method_21612 toOptionalInt - m (Ljava/lang/String;)Z method_11429 isNotEmpty - m ([Ljava/lang/String;)V main main - m ()Lorg/apache/logging/log4j/Logger; method_22316 func_229731_a_ - f Lorg/apache/logging/log4j/Logger; field_12138 LOGGER -c net/minecraft/client/main/Main$2 net/minecraft/client/main/Main$2 - m ()V run run -c net/minecraft/client/main/Main$1 net/minecraft/client/main/Main$1 - m ()Ljava/net/PasswordAuthentication; getPasswordAuthentication getPasswordAuthentication - f Ljava/lang/String; field_12139 field_178749_a - f Ljava/lang/String; field_12140 field_178748_b -c net/minecraft/client/main/Main$3 net/minecraft/client/main/Main$3 - m ()V run run - f Lnet/minecraft/class_310; field_20601 field_229732_a_ -c net/minecraft/class_1778 net/minecraft/item/FireChargeItem - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_18453 playUseSound -c net/minecraft/class_1779 net/minecraft/item/ExperienceBottleItem -c net/minecraft/class_1780 net/minecraft/item/FireworkStarItem - m (Lnet/minecraft/class_2487;Ljava/util/List;)V method_7809 addTooltip - m (I)Lnet/minecraft/class_2561; method_7810 func_200297_a - m (Lnet/minecraft/class_5250;[I)Lnet/minecraft/class_2561; method_7811 func_200298_a_ -c net/minecraft/class_1781 net/minecraft/item/FireworkRocketItem -c net/minecraft/class_1781$class_1782 net/minecraft/item/FireworkRocketItem$Shape - m ()I method_7816 getIndex - m (I)[Lnet/minecraft/class_1781$class_1782; method_7815 func_199797_b - m ()Ljava/lang/String; method_7812 getShapeName - m (Ljava/lang/String;)Lnet/minecraft/class_1781$class_1782; valueOf valueOf - m ()[Lnet/minecraft/class_1781$class_1782; values values - m (Lnet/minecraft/class_1781$class_1782;)I method_7814 func_199796_a - m (I)Lnet/minecraft/class_1781$class_1782; method_7813 get - f Lnet/minecraft/class_1781$class_1782; field_7977 LARGE_BALL - f Lnet/minecraft/class_1781$class_1782; field_7973 STAR - f I field_7972 index - f Lnet/minecraft/class_1781$class_1782; field_7974 CREEPER - f Lnet/minecraft/class_1781$class_1782; field_7970 BURST - f Ljava/lang/String; field_7971 shapeName - f [Lnet/minecraft/class_1781$class_1782; field_7978 $VALUES - f Lnet/minecraft/class_1781$class_1782; field_7976 SMALL_BALL - f [Lnet/minecraft/class_1781$class_1782; field_7975 VALUES -c net/minecraft/class_1787 net/minecraft/item/FishingRodItem - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20275 func_220000_a_ -c net/minecraft/class_1785 net/minecraft/item/FishBucketItem - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;)V method_7824 placeFish - f Lnet/minecraft/class_1299; field_7991 fishType -c net/minecraft/class_1758 net/minecraft/item/OnAStickItem - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20271 func_234682_a_ - f Lnet/minecraft/class_1299; field_23253 temptedEntity - f I field_23743 damageAmount -c net/minecraft/class_1786 net/minecraft/item/FlintAndSteelItem - m (Lnet/minecraft/class_1838;Lnet/minecraft/class_1657;)V method_20277 func_219999_b - m (Lnet/minecraft/class_1838;Lnet/minecraft/class_1657;)V method_20276 func_219998_a -c net/minecraft/class_1790 net/minecraft/item/HangingEntityItem - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2350;Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;)Z method_7834 canPlace - f Lnet/minecraft/class_1299; field_7999 hangingEntity -c net/minecraft/class_1788 net/minecraft/item/OperatorOnlyItem -c net/minecraft/class_4480 net/minecraft/item/HoneyBottleItem -c net/minecraft/class_1794 net/minecraft/item/HoeItem - m (Lnet/minecraft/class_1838;Lnet/minecraft/class_1657;)V method_20279 func_220043_a - f Ljava/util/Map; field_8023 HOE_LOOKUP - f Ljava/util/Set; field_22486 EFFECTIVE_ON_BLOCKS -c net/minecraft/class_1792 net/minecraft/item/Item - m ()Ljava/lang/String; toString toString - m (I)Lnet/minecraft/class_1792; method_7875 getItemById - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1814; method_7862 getRarity - m ()I method_7882 getMaxStackSize - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7878 getIsRepairable - m ()Lnet/minecraft/class_2561; method_7848 getName - m (Lnet/minecraft/class_1761;Lnet/minecraft/class_2371;)V method_7850 fillItemGroup - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1309;Lnet/minecraft/class_1309;)Z method_7873 hitEntity - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1271; method_7836 onItemRightClick - m ()Ljava/lang/String; method_7869 getDefaultTranslationKey - m ()Lnet/minecraft/class_3414; method_21830 getEatSound - m (Lnet/minecraft/class_1838;)Lnet/minecraft/class_1269; method_7884 onItemUse - m ()Lnet/minecraft/class_1761; method_7859 getGroup - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2561; method_7864 getDisplayName - m (Lnet/minecraft/class_1304;)Lcom/google/common/collect/Multimap; method_7844 getAttributeModifiers - m (Lnet/minecraft/class_3494;)Z method_7855 isIn - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1799; method_7861 onItemUseFinish - m ()Z method_7887 shouldSyncTag - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;I)V method_7840 onPlayerStoppedUsing - m (Lnet/minecraft/class_1799;)Ljava/lang/String; method_7866 getTranslationKey - m (Lnet/minecraft/class_2680;)Z method_7856 canHarvestBlock - m ()Z method_7857 hasContainerItem - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_3959$class_242;)Lnet/minecraft/class_3965; method_7872 rayTrace - m ()Ljava/lang/String; method_7876 getTranslationKey - m ()I method_7837 getItemEnchantability - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;I)V method_7852 onUse - m ()Lnet/minecraft/class_1799; method_7854 getDefaultInstance - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)Z method_7885 canPlayerBreakBlockWhileHolding - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_1792; method_7867 getItemFromBlock - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1839; method_7853 getUseAction - m (Lnet/minecraft/class_1799;)Z method_7838 isCrossbow - m ()Z method_24358 isImmuneToFire - m (Lnet/minecraft/class_1282;)Z method_24357 isDamageable - m (Lnet/minecraft/class_1799;)I method_7881 getUseDuration - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;IZ)V method_7888 inventoryTick - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_1309;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_7847 itemInteractionForEntity - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2680;)F method_7865 getDestroySpeed - m ()I method_7841 getMaxDamage - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Ljava/util/List;Lnet/minecraft/class_1836;)V method_7851 addInformation - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)Z method_7879 onBlockDestroyed - m ()Z method_7846 isDamageable - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;)V method_7843 onCreated - m (Lnet/minecraft/class_1792;)I method_7880 getIdFromItem - m (Lnet/minecraft/class_1761;)Z method_7877 isInGroup - m ()Lnet/minecraft/class_1792; method_7858 getContainerItem - m (Lnet/minecraft/class_1799;)Z method_7886 hasEffect - m (Lnet/minecraft/class_2487;)Z method_7860 updateItemStackNBT - m ()Lnet/minecraft/class_3414; method_21831 getDrinkSound - m ()Z method_19263 isFood - m (Lnet/minecraft/class_1799;)Z method_7870 isEnchantable - m ()Z method_16698 isComplex - m ()Lnet/minecraft/class_4174; method_19264 getFood - f Z field_21979 burnable - f Ljava/util/UUID; field_8006 ATTACK_DAMAGE_MODIFIER - f Ljava/util/Map; field_8003 BLOCK_TO_ITEM - f Lnet/minecraft/class_4174; field_18672 food - f I field_8013 maxStackSize - f Lnet/minecraft/class_1761; field_8004 group - f Lnet/minecraft/class_1814; field_8009 rarity - f Ljava/util/UUID; field_8001 ATTACK_SPEED_MODIFIER - f Ljava/lang/String; field_8014 translationKey - f Lnet/minecraft/class_1792; field_8008 containerItem - f Ljava/util/Random; field_8005 random - f I field_8012 maxDamage -c net/minecraft/class_1792$1 net/minecraft/item/Item$1 - f [I field_8021 field_210316_a -c net/minecraft/class_1792$class_1793 net/minecraft/item/Item$Properties - m (Lnet/minecraft/class_1792$class_1793;)Lnet/minecraft/class_4174; method_19266 func_221539_f - m (I)Lnet/minecraft/class_1792$class_1793; method_7898 defaultMaxDamage - m (Lnet/minecraft/class_4174;)Lnet/minecraft/class_1792$class_1793; method_19265 food - m (Lnet/minecraft/class_1792$class_1793;)Lnet/minecraft/class_1761; method_7897 access$000 - m (Lnet/minecraft/class_1792$class_1793;)Lnet/minecraft/class_1792; method_7890 func_208101_c - m (I)Lnet/minecraft/class_1792$class_1793; method_7895 maxDamage - m (Lnet/minecraft/class_1761;)Lnet/minecraft/class_1792$class_1793; method_7892 group - m (I)Lnet/minecraft/class_1792$class_1793; method_7889 maxStackSize - m (Lnet/minecraft/class_1792$class_1793;)I method_7893 func_208100_e - m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_1792$class_1793; method_7896 containerItem - m (Lnet/minecraft/class_1792$class_1793;)I method_7891 access$300 - m (Lnet/minecraft/class_1814;)Lnet/minecraft/class_1792$class_1793; method_7894 rarity - m (Lnet/minecraft/class_1792$class_1793;)Z method_24360 func_234690_g_ - m ()Lnet/minecraft/class_1792$class_1793; method_24359 isImmuneToFire - m (Lnet/minecraft/class_1792$class_1793;)Lnet/minecraft/class_1814; method_7899 func_208099_b - f Lnet/minecraft/class_4174; field_18673 food - f I field_8020 maxStackSize - f Lnet/minecraft/class_1792; field_8018 containerItem - f Lnet/minecraft/class_1761; field_8017 group - f Z field_21980 immuneToFire - f Lnet/minecraft/class_1814; field_8016 rarity - f I field_8019 maxDamage -c net/minecraft/class_4059 net/minecraft/item/HorseArmorItem - m ()Lnet/minecraft/class_2960; method_18454 getArmorTexture - m ()I method_18455 getArmorValue - f Ljava/lang/String; field_18137 field_219979_b - f I field_18136 armorValue -c net/minecraft/class_1795 net/minecraft/item/ItemFrameItem -c net/minecraft/class_1796 net/minecraft/util/CooldownTracker - m (Lnet/minecraft/class_1792;I)V method_7902 notifyOnSet - m (Lnet/minecraft/class_1792;I)V method_7906 setCooldown - m (Lnet/minecraft/class_1792;)V method_7901 notifyOnRemove - m (Lnet/minecraft/class_1792;)Z method_7904 hasCooldown - m ()V method_7903 tick - m (Lnet/minecraft/class_1792;)V method_7900 removeCooldown - m (Lnet/minecraft/class_1792;F)F method_7905 getCooldown - f I field_8025 ticks - f Ljava/util/Map; field_8024 cooldowns -c net/minecraft/class_1796$class_1797 net/minecraft/util/CooldownTracker$Cooldown - m (Lnet/minecraft/class_1796$class_1797;)I method_7907 access$100 - m (Lnet/minecraft/class_1796$class_1797;)I method_7908 access$000 - f Lnet/minecraft/class_1796; field_8026 field_185139_c - f I field_8028 createTicks - f I field_8027 expireTicks -c net/minecraft/class_1796$1 net/minecraft/util/CooldownTracker$1 -c net/minecraft/class_1799 net/minecraft/item/ItemStack - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)V method_7952 onBlockDestroyed - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1309;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1269; method_7920 interactWithEntity - m (ILnet/minecraft/class_1799$class_5422;)Z method_30267 func_242394_a - m ()Lnet/minecraft/class_1799; method_7972 copy - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;I)V method_7930 onPlayerStoppedUsing - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1657;)V method_7979 hitEntity - m ()I method_7965 getAnimationsToGo - m (Lnet/minecraft/class_1320;Lnet/minecraft/class_1322;Lnet/minecraft/class_1304;)V method_7916 addAttributeModifier - m (Lnet/minecraft/class_1799;)Z method_7962 isItemEqual - m ()Lnet/minecraft/class_1297; method_27319 getAttachedEntity - m (Ljava/lang/String;)Lnet/minecraft/class_2487; method_7941 getChildTag - m (Ljava/lang/String;)V method_7983 removeChildTag - m ()Z method_7985 hasTag - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1792; method_28379 func_234706_f_ - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7973 areItemStacksEqual - m ()Z method_7958 hasEffect - m (I)V method_7933 grow - m ()Lnet/minecraft/class_1533; method_7945 getItemFrame - m ()Z method_7961 isOnItemFrame - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28376 func_234698_a_ - m ()Z method_7986 isDamaged - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;I)V method_7982 onCrafting - m (Ljava/util/List;Lnet/minecraft/class_2487;Lnet/minecraft/class_1887;)V method_17869 func_222123_a_ - m ()I method_7947 getCount - m ()Lnet/minecraft/class_2561; method_7964 getDisplayName - m (Ljava/text/DecimalFormat;)V method_26963 func_234699_a_ - m (Lnet/minecraft/class_2680;)Z method_7951 canHarvestBlock - m (Ljava/lang/String;)Lnet/minecraft/class_2487; method_7911 getOrCreateChildTag - m (Lnet/minecraft/class_1799;)Z method_7929 isItemEqualIgnoreDurability - m ()V method_7925 clearCustomName - m ()Lnet/minecraft/class_2499; method_7921 getEnchantmentTagList - m ()V method_7957 updateEmptyState - m (Lnet/minecraft/class_2694;Lnet/minecraft/class_2694;)Z method_7918 isStateAndTileEntityEqual - m (Lnet/minecraft/class_1304;)Lcom/google/common/collect/Multimap; method_7926 getAttributeModifiers - m ()Lnet/minecraft/class_3414; method_21832 getDrinkSound - m ()Lnet/minecraft/class_2487; method_7948 getOrCreateTag - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1836;)Ljava/util/List; method_7950 getTooltip - m ()Ljava/lang/String; toString toString - m ()I method_7914 getMaxStackSize - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7975 areItemStackTagsEqual - m (I)V method_7927 setRepairCost - m ()I method_7919 getDamage - m (I)V method_7934 shrink - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;IZ)V method_7917 inventoryTick - m (Lnet/minecraft/class_1887;I)V method_7978 addEnchantment - m (Lnet/minecraft/class_2561;)Lnet/minecraft/class_1799; method_7977 setDisplayName - m ()I method_7935 getUseDuration - m ()Lnet/minecraft/class_2561; method_7954 getTextComponent - m (ILnet/minecraft/class_1309;Ljava/util/function/Consumer;)V method_7956 damageItem - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1799; method_7915 read - m ()I method_30266 func_242393_J - m (Lnet/minecraft/class_1799;)Z method_7968 isItemStackEqual - m ()Lnet/minecraft/class_1839; method_7976 getUseAction - m ()Lnet/minecraft/class_2487; method_7969 getTag - m ()Z method_19267 isFood - m (I)V method_7912 setAnimationsToGo - m (Lnet/minecraft/class_5415;Lnet/minecraft/class_2694;)Z method_7944 canPlaceOn - m ()Lnet/minecraft/class_3414; method_21833 getEatSound - m ()Z method_7923 isEnchantable - m ()I method_7936 getMaxDamage - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_7953 write - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1799; method_7910 onItemUseFinish - m ()Z method_7946 isStackable - m ()Lnet/minecraft/class_1792; method_7909 getItem - m ()Lnet/minecraft/class_1814; method_7932 getRarity - m ()Ljava/lang/String; method_7922 getTranslationKey - m ()I method_7928 getRepairCost - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7987 areItemsEqualIgnoreDurability - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1271; method_7913 useItemRightClick - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1309;I)V method_7949 onItemUsed - m ()Z method_7967 isCrossbowStack - m (Lnet/minecraft/class_2487;)V method_7980 setTag - m (I)V method_7974 setDamage - m (Lnet/minecraft/class_5250;)Lnet/minecraft/class_5250; method_7955 func_222119_a_ - m (Ljava/util/List;Lnet/minecraft/class_2499;)V method_17870 addEnchantmentTooltips - m (I)Lnet/minecraft/class_1799; method_7971 split - m (Ljava/lang/String;Lnet/minecraft/class_2520;)V method_7959 setTagInfo - m ()Z method_7938 hasDisplayName - m (Lnet/minecraft/class_2680;)F method_7924 getDestroySpeed - m (Ljava/lang/String;)Ljava/util/Collection; method_7937 getPlacementTooltip - m (ILjava/util/Random;Lnet/minecraft/class_3222;)Z method_7970 attemptDamageItem - m (Lnet/minecraft/class_1799;)Ljava/util/Optional; method_28377 func_234704_d_ - m (I)V method_7939 setCount - m (Lnet/minecraft/class_1799$class_5422;)V method_30268 func_242395_a - m ()Z method_7960 isEmpty - m ()Z method_7963 isDamageable - m ()Z method_7942 isEnchanted - m (Lnet/minecraft/class_1297;)V method_27320 setAttachedEntity - m (Lnet/minecraft/class_1799;)Ljava/lang/Integer; method_28378 func_234705_e_ - m (Lnet/minecraft/class_1838;)Lnet/minecraft/class_1269; method_7981 onItemUse - m (Lnet/minecraft/class_5415;Lnet/minecraft/class_2694;)Z method_7940 canDestroy - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_7984 areItemsEqual - m (Lnet/minecraft/class_2583;)Lnet/minecraft/class_2583; method_7966 func_234702_a_ - f Z field_8035 canDestroyCacheResult - f Lcom/mojang/serialization/Codec; field_24671 CODEC - f I field_8031 count - f Lnet/minecraft/class_2694; field_8039 canDestroyCacheBlock - f Lnet/minecraft/class_2487; field_8040 tag - f Lnet/minecraft/class_1297; field_24093 attachedEntity - f Lnet/minecraft/class_1799; field_8037 EMPTY - f Lnet/minecraft/class_1792; field_8038 item - f Z field_8036 isEmpty - f Z field_8034 canPlaceOnCacheResult - f I field_8030 animationsToGo - f Lnet/minecraft/class_2694; field_8032 canPlaceOnCacheBlock - f Lnet/minecraft/class_2583; field_24092 LORE_STYLE - f Lorg/apache/logging/log4j/Logger; field_8033 LOGGER - f Ljava/text/DecimalFormat; field_8029 DECIMALFORMAT -c net/minecraft/class_1799$class_5422 net/minecraft/item/ItemStack$TooltipDisplayFlags - m (Ljava/lang/String;)Lnet/minecraft/class_1799$class_5422; valueOf valueOf - m ()I method_30269 func_242397_a - m ()[Lnet/minecraft/class_1799$class_5422; values values - f Lnet/minecraft/class_1799$class_5422; field_25773 ADDITIONAL - f Lnet/minecraft/class_1799$class_5422; field_25768 ENCHANTMENTS - f Lnet/minecraft/class_1799$class_5422; field_25774 DYE - f Lnet/minecraft/class_1799$class_5422; field_25772 CAN_PLACE - f Lnet/minecraft/class_1799$class_5422; field_25771 CAN_DESTROY - f Lnet/minecraft/class_1799$class_5422; field_25769 MODIFIERS - f [Lnet/minecraft/class_1799$class_5422; field_25776 $VALUES - f I field_25775 field_242396_h - f Lnet/minecraft/class_1799$class_5422; field_25770 UNBREAKABLE -c net/minecraft/class_1798 net/minecraft/item/BlockNamedItem -c net/minecraft/class_5328 net/minecraft/util/DrinkHelper - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_1268;)Lnet/minecraft/class_1271; method_29282 startDrinking - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;Z)Lnet/minecraft/class_1799; method_30270 fill - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_30012 fill -c net/minecraft/class_1801 net/minecraft/item/KnowledgeBookItem - f Lorg/apache/logging/log4j/Logger; field_8042 LOGGER -c net/minecraft/class_1802 net/minecraft/item/Items - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_1792; method_7989 register - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1761;)Lnet/minecraft/class_1792; method_7988 register - m (Ljava/lang/String;Lnet/minecraft/class_1792;)Lnet/minecraft/class_1792; method_7991 register - m (Lnet/minecraft/class_1747;)Lnet/minecraft/class_1792; method_7993 register - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_1792;)Lnet/minecraft/class_1792; method_7990 register - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1792;)Lnet/minecraft/class_1792; method_7992 register - f Lnet/minecraft/class_1792; field_21990 WARPED_ROOTS - f Lnet/minecraft/class_1792; field_16538 JIGSAW - f Lnet/minecraft/class_1792; field_8690 PURPLE_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_20416 BEEHIVE - f Lnet/minecraft/class_1792; field_8573 CREEPER_BANNER_PATTERN - f Lnet/minecraft/class_1792; field_8069 TNT_MINECART - f Lnet/minecraft/class_1792; field_8687 EMERALD - f Lnet/minecraft/class_1792; field_8790 NETHER_WART - f Lnet/minecraft/class_1792; field_8508 MAGENTA_CONCRETE - f Lnet/minecraft/class_1792; field_8363 LIGHT_GRAY_STAINED_GLASS - f Lnet/minecraft/class_1792; field_8599 IRON_ORE - f Lnet/minecraft/class_1792; field_8146 LIGHT_GRAY_BED - f Lnet/minecraft/class_1792; field_22030 NETHERITE_BOOTS - f Lnet/minecraft/class_1792; field_8664 GREEN_CARPET - f Lnet/minecraft/class_1792; field_22007 WARPED_STAIRS - f Lnet/minecraft/class_1792; field_8138 DARK_OAK_BOAT - f Lnet/minecraft/class_1792; field_8229 BREAD - f Lnet/minecraft/class_1792; field_8860 DIORITE_STAIRS - f Lnet/minecraft/class_1792; field_8787 DIAMOND_ORE - f Lnet/minecraft/class_1792; field_8629 CYAN_BANNER - f Lnet/minecraft/class_1792; field_8564 SILVERFISH_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8628 BRAIN_CORAL_FAN - f Lnet/minecraft/class_1792; field_8627 GRAY_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8673 PRISMARINE_BRICK_STAIRS - f Lnet/minecraft/class_1792; field_8672 LIME_TERRACOTTA - f Lnet/minecraft/class_1792; field_20411 POLISHED_ANDESITE - f Lnet/minecraft/class_1792; field_22003 WARPED_TRAPDOOR - f Lnet/minecraft/class_1792; field_8265 GHAST_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8492 ORANGE_DYE - f Lnet/minecraft/class_1792; field_20417 HONEY_BOTTLE - f Lnet/minecraft/class_1792; field_8478 TROPICAL_FISH_BUCKET - f Lnet/minecraft/class_1792; field_8322 GOLDEN_SHOVEL - f Lnet/minecraft/class_1792; field_8891 SKULL_BANNER_PATTERN - f Lnet/minecraft/class_1792; field_8836 HOPPER_MINECART - f Lnet/minecraft/class_1792; field_8090 TURTLE_HELMET - f Lnet/minecraft/class_1792; field_8164 BLUE_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8143 ITEM_FRAME - f Lnet/minecraft/class_1792; field_8574 POTION - f Lnet/minecraft/class_1792; field_8364 LIGHT_BLUE_CONCRETE - f Lnet/minecraft/class_1792; field_8685 CYAN_STAINED_GLASS - f Lnet/minecraft/class_1792; field_8390 CYAN_BED - f Lnet/minecraft/class_1792; field_8145 FLINT - f Lnet/minecraft/class_1792; field_8476 COAL_ORE - f Lnet/minecraft/class_1792; field_8866 COMMAND_BLOCK - f Lnet/minecraft/class_1792; field_8267 LEATHER_HELMET - f Lnet/minecraft/class_1792; field_8228 POLISHED_GRANITE_SLAB - f Lnet/minecraft/class_1792; field_8288 TOTEM_OF_UNDYING - f Lnet/minecraft/class_1792; field_8405 PURPLE_BANNER - f Lnet/minecraft/class_1792; field_8300 SKELETON_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8452 BUBBLE_CORAL_FAN - f Lnet/minecraft/class_1792; field_8451 LIGHT_GRAY_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8270 GRASS_BLOCK - f Lnet/minecraft/class_1792; field_8409 GUARDIAN_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8669 MAGENTA_DYE - f Lnet/minecraft/class_1792; field_8853 PINK_TERRACOTTA - f Lnet/minecraft/class_1792; field_8772 LOOM - f Lnet/minecraft/class_1792; field_8729 NETHER_BRICK - f Lnet/minecraft/class_1792; field_8857 COMPARATOR - f Lnet/minecraft/class_1792; field_8558 LIGHT_GRAY_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8674 WRITABLE_BOOK - f Lnet/minecraft/class_1792; field_8070 GHAST_TEAR - f Lnet/minecraft/class_1792; field_8341 WHITE_CONCRETE - f Lnet/minecraft/class_1792; field_8770 PINK_STAINED_GLASS - f Lnet/minecraft/class_1792; field_19052 LIGHT_GRAY_WOOL - f Lnet/minecraft/class_1792; field_8110 GRAVEL - f Lnet/minecraft/class_1792; field_8417 PINK_BED - f Lnet/minecraft/class_1792; field_22028 NETHERITE_CHESTPLATE - f Lnet/minecraft/class_1792; field_8115 BLUE_CARPET - f Lnet/minecraft/class_1792; field_8311 JUNGLE_STAIRS - f Lnet/minecraft/class_1792; field_8317 WHEAT_SEEDS - f Lnet/minecraft/class_1792; field_8302 RED_NETHER_BRICK_STAIRS - f Lnet/minecraft/class_1792; field_21997 CRIMSON_FENCE_GATE - f Lnet/minecraft/class_1792; field_8212 OAK_STAIRS - f Lnet/minecraft/class_1792; field_8412 QUARTZ_SLAB - f Lnet/minecraft/class_1792; field_8554 WET_SPONGE - f Lnet/minecraft/class_1792; field_8549 DEAD_TUBE_CORAL - f Lnet/minecraft/class_1792; field_8548 LIME_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8730 JUNGLE_BOAT - f Lnet/minecraft/class_1792; field_20403 POLISHED_DIORITE - f Lnet/minecraft/class_1792; field_8617 GRAY_BANNER - f Lnet/minecraft/class_1792; field_8607 SHEEP_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8795 EVOKER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8759 LAPIS_LAZULI - f Lnet/minecraft/class_1792; field_20406 DARK_PRISMARINE - f Lnet/minecraft/class_1792; field_8717 LIGHT_BLUE_TERRACOTTA - f Lnet/minecraft/class_1792; field_20415 BEE_NEST - f Lnet/minecraft/class_1792; field_8714 SALMON_BUCKET - f Lnet/minecraft/class_1792; field_8431 STONE_HOE - f Lnet/minecraft/class_1792; field_8531 DARK_OAK_BUTTON - f Lnet/minecraft/class_1792; field_8844 DARK_OAK_TRAPDOOR - f Lnet/minecraft/class_1792; field_8498 FLOWER_BANNER_PATTERN - f Lnet/minecraft/class_1792; field_8155 QUARTZ - f Lnet/minecraft/class_1792; field_8238 STRUCTURE_BLOCK - f Lnet/minecraft/class_1792; field_8593 CYAN_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8565 JUKEBOX - f Lnet/minecraft/class_1792; field_21989 CRIMSON_ROOTS - f Lnet/minecraft/class_1792; field_8360 WRITTEN_BOOK - f Lnet/minecraft/class_1792; field_8397 GOLD_NUGGET - f Lnet/minecraft/class_1792; field_8771 ORANGE_CONCRETE - f Lnet/minecraft/class_1792; field_8507 GRAY_STAINED_GLASS - f Lnet/minecraft/class_1792; field_8294 BROWN_CARPET - f Lnet/minecraft/class_1792; field_22006 CRIMSON_STAIRS - f Lnet/minecraft/class_1792; field_8775 GOLD_ORE - f Lnet/minecraft/class_1792; field_21998 WARPED_FENCE_GATE - f Lnet/minecraft/class_1792; field_8106 CHEST - f Lnet/minecraft/class_1792; field_8754 GRAY_BED - f Lnet/minecraft/class_1792; field_22029 NETHERITE_LEGGINGS - f Lnet/minecraft/class_1792; field_8094 ACACIA_BOAT - f Lnet/minecraft/class_1792; field_8861 WHEAT - f Lnet/minecraft/class_1792; field_8316 POLISHED_ANDESITE_STAIRS - f Lnet/minecraft/class_1792; field_8855 LIGHT_GRAY_BANNER - f Lnet/minecraft/class_1792; field_8480 SHULKER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8521 TUBE_CORAL_FAN - f Lnet/minecraft/class_1792; field_8520 PINK_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8280 GLASS - f Lnet/minecraft/class_1792; field_20407 ANDESITE - f Lnet/minecraft/class_1792; field_18005 FOX_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8446 WHITE_DYE - f Lnet/minecraft/class_1792; field_8386 PRISMARINE_STAIRS - f Lnet/minecraft/class_1792; field_8385 YELLOW_TERRACOTTA - f Lnet/minecraft/class_1792; field_8666 COD_BUCKET - f Lnet/minecraft/class_1792; field_8845 GOLDEN_SWORD - f Lnet/minecraft/class_1792; field_22004 CRIMSON_BUTTON - f Lnet/minecraft/class_1792; field_22002 CRIMSON_TRAPDOOR - f Lnet/minecraft/class_1792; field_8117 HORSE_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8192 YELLOW_DYE - f Lnet/minecraft/class_1792; field_23256 LODESTONE - f Lnet/minecraft/class_1792; field_8303 GOLDEN_HOE - f Lnet/minecraft/class_1792; field_23831 PIGLIN_BANNER_PATTERN - f Lnet/minecraft/class_1792; field_8504 RABBIT - f Lnet/minecraft/class_1792; field_8567 POTATO - f Lnet/minecraft/class_1792; field_8711 FERMENTED_SPIDER_EYE - f Lnet/minecraft/class_1792; field_21991 NETHER_SPROUTS - f Lnet/minecraft/class_1792; field_8892 PAINTING - f Lnet/minecraft/class_1792; field_8684 SPRUCE_LOG - f Lnet/minecraft/class_1792; field_8603 DIAMOND_BLOCK - f Lnet/minecraft/class_1792; field_8361 KNOWLEDGE_BOOK - f Lnet/minecraft/class_1792; field_8295 GREEN_BANNER - f Lnet/minecraft/class_1792; field_8185 SPIDER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8131 LIME_DYE - f Lnet/minecraft/class_1792; field_8382 PODZOL - f Lnet/minecraft/class_1792; field_8055 LAPIS_BLOCK - f Lnet/minecraft/class_1792; field_22018 NETHERITE_BRICKS - f Lnet/minecraft/class_1792; field_8225 INFESTED_STONE - f Lnet/minecraft/class_1792; field_21992 WEEPING_VINES - f Lnet/minecraft/class_1792; field_21984 STRIPPED_WARPED_STEM - f Lnet/minecraft/class_1792; field_17530 COMPOSTER - f Lnet/minecraft/class_1792; field_8752 COOKED_RABBIT - f Lnet/minecraft/class_1792; field_8170 BIRCH_LOG - f Lnet/minecraft/class_1792; field_8183 BLAZE_POWDER - f Lnet/minecraft/class_1792; field_8688 DEBUG_STICK - f Lnet/minecraft/class_1792; field_8668 BEACON - f Lnet/minecraft/class_1792; field_8307 SQUID_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8465 CRAFTING_TABLE - f Lnet/minecraft/class_1792; field_19053 CYAN_WOOL - f Lnet/minecraft/class_1792; field_21086 HONEY_BLOCK - f Lnet/minecraft/class_1792; field_8621 BRICK - f Lnet/minecraft/class_1792; field_8335 GOLDEN_PICKAXE - f Lnet/minecraft/class_1792; field_8159 MOJANG_BANNER_PATTERN - f Lnet/minecraft/class_1792; field_8662 PRISMARINE_SHARD - f Lnet/minecraft/class_1792; field_8161 SCUTE - f Lnet/minecraft/class_1792; field_8437 BROWN_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8838 PURPLE_STAINED_GLASS - f Lnet/minecraft/class_1792; field_23140 NETHER_GOLD_ORE - f Lnet/minecraft/class_1792; field_8074 FLOWER_POT - f Lnet/minecraft/class_1792; field_8469 GLASS_BOTTLE - f Lnet/minecraft/class_1792; field_8262 PURPLE_BED - f Lnet/minecraft/class_1792; field_8389 PORKCHOP - f Lnet/minecraft/class_1792; field_8815 SHULKER_SHELL - f Lnet/minecraft/class_1792; field_8577 LEATHER_CHESTPLATE - f Lnet/minecraft/class_1792; field_8266 SMOOTH_RED_SANDSTONE_SLAB - f Lnet/minecraft/class_1792; field_8128 BLUE_BANNER - f Lnet/minecraft/class_1792; field_8232 SKELETON_HORSE_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8213 CYAN_SHULKER_BOX - f Lnet/minecraft/class_1792; field_22014 HOGLIN_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8273 LIGHT_BLUE_DYE - f Lnet/minecraft/class_1792; field_8831 DIRT - f Lnet/minecraft/class_1792; field_8696 CLAY_BALL - f Lnet/minecraft/class_1792; field_8825 GOLDEN_AXE - f Lnet/minecraft/class_1792; field_21087 HONEYCOMB_BLOCK - f Lnet/minecraft/class_1792; field_18674 GLOBE_BANNER_PATTERN - f Lnet/minecraft/class_1792; field_8434 PRISMARINE_CRYSTALS - f Lnet/minecraft/class_1792; field_8198 GREEN_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8179 CARROT - f Lnet/minecraft/class_1792; field_8680 SPIDER_EYE - f Lnet/minecraft/class_1792; field_8893 BLUE_BED - f Lnet/minecraft/class_1792; field_8261 COOKED_PORKCHOP - f Lnet/minecraft/class_1792; field_8583 OAK_LOG - f Lnet/minecraft/class_1792; field_8675 IRON_NUGGET - f Lnet/minecraft/class_1792; field_8576 MOSSY_STONE_BRICK_SLAB - f Lnet/minecraft/class_1792; field_8809 LAPIS_ORE - f Lnet/minecraft/class_1792; field_8460 COARSE_DIRT - f Lnet/minecraft/class_1792; field_8124 BROWN_BANNER - f Lnet/minecraft/class_1792; field_8881 SLIME_SPAWN_EGG - f Lnet/minecraft/class_1792; field_17538 JUNGLE_SAPLING - f Lnet/minecraft/class_1792; field_8258 WHITE_BED - f Lnet/minecraft/class_1792; field_8285 DIAMOND_BOOTS - f Lnet/minecraft/class_1792; field_8253 LIME_CARPET - f Lnet/minecraft/class_1792; field_8837 EMERALD_ORE - f Lnet/minecraft/class_1792; field_23841 CRACKED_POLISHED_BLACKSTONE_BRICKS - f Lnet/minecraft/class_1792; field_8087 TIPPED_ARROW - f Lnet/minecraft/class_1792; field_8600 STICK - f Lnet/minecraft/class_1792; field_8152 END_STONE_BRICK_STAIRS - f Lnet/minecraft/class_1792; field_8874 OAK_FENCE_GATE - f Lnet/minecraft/class_1792; field_8358 CHORUS_PLANT - f Lnet/minecraft/class_1792; field_8824 ORANGE_BANNER - f Lnet/minecraft/class_1792; field_8325 PILLAGER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8546 FIRE_CORAL - f Lnet/minecraft/class_1792; field_8545 SHULKER_BOX - f Lnet/minecraft/class_1792; field_18889 CUT_SANDSTONE_SLAB - f Lnet/minecraft/class_1792; field_17504 SPRUCE_LEAVES - f Lnet/minecraft/class_1792; field_8501 BROWN_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8499 QUARTZ_STAIRS - f Lnet/minecraft/class_1792; field_8781 STONE_BUTTON - f Lnet/minecraft/class_1792; field_8693 JACK_O_LANTERN - f Lnet/minecraft/class_1792; field_8751 DOLPHIN_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8846 TROPICAL_FISH - f Lnet/minecraft/class_1792; field_22016 SOUL_LANTERN - f Lnet/minecraft/class_1792; field_8725 REDSTONE - f Lnet/minecraft/class_1792; field_8406 WOODEN_AXE - f Lnet/minecraft/class_1792; field_8614 PHANTOM_MEMBRANE - f Lnet/minecraft/class_1792; field_8137 NETHER_STAR - f Lnet/minecraft/class_1792; field_8758 ACACIA_DOOR - f Lnet/minecraft/class_1792; field_8764 LIGHT_BLUE_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8530 REDSTONE_TORCH - f Lnet/minecraft/class_1792; field_17514 LILY_OF_THE_VALLEY - f Lnet/minecraft/class_1792; field_8728 ZOMBIE_HORSE_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8726 CHICKEN - f Lnet/minecraft/class_1792; field_19047 LIGHT_BLUE_WOOL - f Lnet/minecraft/class_1792; field_8484 BLUE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8393 ORANGE_STAINED_GLASS - f Lnet/minecraft/class_1792; field_8059 ORANGE_BED - f Lnet/minecraft/class_1792; field_8862 GOLDEN_HELMET - f Lnet/minecraft/class_1792; field_17539 ACACIA_SAPLING - f Lnet/minecraft/class_1792; field_8580 PINK_CARPET - f Lnet/minecraft/class_1792; field_8466 ENDER_CHEST - f Lnet/minecraft/class_1792; field_8653 SPRUCE_FENCE_GATE - f Lnet/minecraft/class_1792; field_8710 CHORUS_FLOWER - f Lnet/minecraft/class_1792; field_8428 BOWL - f Lnet/minecraft/class_1792; field_8053 STONE_STAIRS - f Lnet/minecraft/class_1792; field_8060 PETRIFIED_OAK_SLAB - f Lnet/minecraft/class_1792; field_17505 BIRCH_LEAVES - f Lnet/minecraft/class_1792; field_23141 RESPAWN_ANCHOR - f Lnet/minecraft/class_1792; field_8150 LINGERING_POTION - f Lnet/minecraft/class_1792; field_8671 MAGENTA_BANNER - f Lnet/minecraft/class_1792; field_8346 POLAR_BEAR_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8723 HORN_CORAL - f Lnet/minecraft/class_1792; field_8722 WHITE_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8162 AIR - f Lnet/minecraft/class_1792; field_8306 DONKEY_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8323 PUFFERFISH - f Lnet/minecraft/class_1792; field_8656 GREEN_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8655 ACTIVATOR_RAIL - f Lnet/minecraft/class_1792; field_16998 SWEET_BERRIES - f Lnet/minecraft/class_1792; field_8543 SNOWBALL - f Lnet/minecraft/class_1792; field_8167 WOODEN_HOE - f Lnet/minecraft/class_1792; field_8780 OAK_BUTTON - f Lnet/minecraft/class_1792; field_8376 OAK_TRAPDOOR - f Lnet/minecraft/class_1792; field_8864 NAUTILUS_SHELL - f Lnet/minecraft/class_1792; field_8741 PUMPKIN_PIE - f Lnet/minecraft/class_1792; field_8517 DARK_OAK_DOOR - f Lnet/minecraft/class_1792; field_8205 YELLOW_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8749 SNOW - f Lnet/minecraft/class_1792; field_17515 WITHER_ROSE - f Lnet/minecraft/class_1792; field_8394 BROWN_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8243 MAGENTA_STAINED_GLASS - f Lnet/minecraft/class_1792; field_19048 YELLOW_WOOL - f Lnet/minecraft/class_1792; field_22025 NETHERITE_AXE - f Lnet/minecraft/class_1792; field_8650 POLISHED_DIORITE_STAIRS - f Lnet/minecraft/class_1792; field_17522 MELON - f Lnet/minecraft/class_1792; field_8810 TORCH - f Lnet/minecraft/class_1792; field_8291 SMOOTH_STONE_SLAB - f Lnet/minecraft/class_1792; field_22490 WARPED_HYPHAE - f Lnet/minecraft/class_1792; field_8616 BRAIN_CORAL - f Lnet/minecraft/class_1792; field_8615 STRUCTURE_VOID - f Lnet/minecraft/class_1792; field_23838 POLISHED_BLACKSTONE_BRICK_SLAB - f Lnet/minecraft/class_1792; field_8436 SPLASH_POTION - f Lnet/minecraft/class_1792; field_8347 COOKED_MUTTON - f Lnet/minecraft/class_1792; field_22401 PIGLIN_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8433 COW_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8429 COD - f Lnet/minecraft/class_1792; field_8739 PURPLE_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_23830 QUARTZ_BRICKS - f Lnet/minecraft/class_1792; field_16315 BELL - f Lnet/minecraft/class_1792; field_8045 MINECART - f Lnet/minecraft/class_1792; field_8876 WOODEN_SHOVEL - f Lnet/minecraft/class_1792; field_23833 POLISHED_BLACKSTONE_WALL - f Lnet/minecraft/class_1792; field_22001 SOUL_TORCH - f Lnet/minecraft/class_1792; field_23984 MUSIC_DISC_PIGSTEP - f Lnet/minecraft/class_1792; field_8184 CARROT_ON_A_STICK - f Lnet/minecraft/class_1792; field_8438 BIRCH_DOOR - f Lnet/minecraft/class_1792; field_8487 ORANGE_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_23835 POLISHED_BLACKSTONE_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_17512 OXEYE_DAISY - f Lnet/minecraft/class_1792; field_23744 ZOGLIN_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8046 BEEF - f Lnet/minecraft/class_1792; field_8257 CYAN_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8561 LARGE_FERN - f Lnet/minecraft/class_1792; field_19045 ORANGE_WOOL - f Lnet/minecraft/class_1792; field_8142 YELLOW_CARPET - f Lnet/minecraft/class_1792; field_8443 SANDSTONE_STAIRS - f Lnet/minecraft/class_1792; field_17523 VINE - f Lnet/minecraft/class_1792; field_8056 END_ROD - f Lnet/minecraft/class_1792; field_17534 CAKE - f Lnet/minecraft/class_1792; field_8348 DIAMOND_LEGGINGS - f Lnet/minecraft/class_1792; field_23839 POLISHED_BLACKSTONE_BRICK_STAIRS - f Lnet/minecraft/class_1792; field_8236 SPECTRAL_ARROW - f Lnet/minecraft/class_1792; field_22026 NETHERITE_HOE - f Lnet/minecraft/class_1792; field_8275 MOSSY_COBBLESTONE_STAIRS - f Lnet/minecraft/class_1792; field_8539 WHITE_BANNER - f Lnet/minecraft/class_1792; field_25777 field_242399_ol - f Lnet/minecraft/class_1792; field_8538 BUBBLE_CORAL - f Lnet/minecraft/class_1792; field_8537 OBSERVER - f Lnet/minecraft/class_1792; field_18888 SANDSTONE_SLAB - f Lnet/minecraft/class_1792; field_17503 OAK_LEAVES - f Lnet/minecraft/class_1792; field_8503 CREEPER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8209 SALMON - f Lnet/minecraft/class_1792; field_8747 BLUE_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8746 QUARTZ_PILLAR - f Lnet/minecraft/class_1792; field_8175 SADDLE - f Lnet/minecraft/class_1792; field_8647 WOODEN_PICKAXE - f Lnet/minecraft/class_1792; field_23840 POLISHED_BLACKSTONE_BRICK_WALL - f Lnet/minecraft/class_1792; field_8801 GLOWSTONE - f Lnet/minecraft/class_1792; field_8604 REDSTONE_ORE - f Lnet/minecraft/class_1792; field_17513 CORNFLOWER - f Lnet/minecraft/class_1792; field_8199 JUNGLE_DOOR - f Lnet/minecraft/class_1792; field_8336 MAGENTA_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_16539 LANTERN - f Lnet/minecraft/class_1792; field_19046 MAGENTA_WOOL - f Lnet/minecraft/class_1792; field_8547 TRIDENT - f Lnet/minecraft/class_1792; field_23254 WARPED_FUNGUS_ON_A_STICK - f Lnet/minecraft/class_1792; field_8441 ZOMBIE_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8176 COOKED_BEEF - f Lnet/minecraft/class_1792; field_8562 PURPLE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8483 WHITE_STAINED_GLASS - f Lnet/minecraft/class_1792; field_8287 EXPERIENCE_BOTTLE - f Lnet/minecraft/class_1792; field_8634 ENDER_PEARL - f Lnet/minecraft/class_1792; field_8870 RED_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8095 YELLOW_STAINED_GLASS - f Lnet/minecraft/class_1792; field_19050 PINK_WOOL - f Lnet/minecraft/class_1792; field_8863 YELLOW_BED - f Lnet/minecraft/class_1792; field_8753 GOLDEN_BOOTS - f Lnet/minecraft/class_1792; field_8290 CYAN_CARPET - f Lnet/minecraft/class_1792; field_8122 SPRUCE_STAIRS - f Lnet/minecraft/class_1792; field_8858 SAND - f Lnet/minecraft/class_1792; field_8114 ACACIA_FENCE_GATE - f Lnet/minecraft/class_1792; field_8644 PURPUR_STAIRS - f Lnet/minecraft/class_1792; field_8524 STONE_BRICK_SLAB - f Lnet/minecraft/class_1792; field_17508 DARK_OAK_LEAVES - f Lnet/minecraft/class_1792; field_8486 SPRUCE_BOAT - f Lnet/minecraft/class_1792; field_8153 FEATHER - f Lnet/minecraft/class_1792; field_8608 GRANITE_STAIRS - f Lnet/minecraft/class_1792; field_8778 LIME_BANNER - f Lnet/minecraft/class_1792; field_8297 RAVAGER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8830 DEAD_FIRE_CORAL - f Lnet/minecraft/class_1792; field_8829 LIGHT_BLUE_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8374 ENDERMAN_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8794 INK_SAC - f Lnet/minecraft/class_1792; field_20397 POLISHED_GRANITE - f Lnet/minecraft/class_1792; field_20404 PRISMARINE - f Lnet/minecraft/class_1792; field_8043 ORANGE_TERRACOTTA - f Lnet/minecraft/class_1792; field_22017 SHROOMLIGHT - f Lnet/minecraft/class_1792; field_8103 MILK_BUCKET - f Lnet/minecraft/class_1792; field_8387 STONE_PICKAXE - f Lnet/minecraft/class_1792; field_8887 JUNGLE_BUTTON - f Lnet/minecraft/class_1792; field_8321 JUNGLE_TRAPDOOR - f Lnet/minecraft/class_1792; field_8619 REPEATER - f Lnet/minecraft/class_1792; field_8818 GRAY_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_17520 CACTUS - f Lnet/minecraft/class_1792; field_21987 CRIMSON_FUNGUS - f Lnet/minecraft/class_1792; field_19051 GRAY_WOOL - f Lnet/minecraft/class_1792; field_8096 BLACK_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8340 LIME_STAINED_GLASS - f Lnet/minecraft/class_1792; field_8766 SUSPICIOUS_STEW - f Lnet/minecraft/class_1792; field_8598 ENCHANTED_BOOK - f Lnet/minecraft/class_1792; field_8200 RED_SAND - f Lnet/minecraft/class_1792; field_8814 FIRE_CHARGE - f Lnet/minecraft/class_1792; field_8894 BLAZE_ROD - f Lnet/minecraft/class_1792; field_8679 LIME_BED - f Lnet/minecraft/class_1792; field_22027 NETHERITE_HELMET - f Lnet/minecraft/class_1792; field_8098 PURPLE_CARPET - f Lnet/minecraft/class_1792; field_8130 BIRCH_STAIRS - f Lnet/minecraft/class_1792; field_8442 BIRCH_BOAT - f Lnet/minecraft/class_1792; field_8293 DARK_OAK_FENCE_GATE - f Lnet/minecraft/class_1792; field_8849 SPAWNER - f Lnet/minecraft/class_1792; field_8054 GUNPOWDER - f Lnet/minecraft/class_1792; field_8526 ANDESITE_STAIRS - f Lnet/minecraft/class_1792; field_8329 PINK_BANNER - f Lnet/minecraft/class_1792; field_8447 SALMON_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8272 DEAD_HORN_CORAL - f Lnet/minecraft/class_1792; field_8271 YELLOW_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8505 NETHER_BRICK_SLAB - f Lnet/minecraft/class_1792; field_8535 SPONGE - f Lnet/minecraft/class_1792; field_8510 ENDERMITE_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8116 COCOA_BEANS - f Lnet/minecraft/class_1792; field_20405 PRISMARINE_BRICKS - f Lnet/minecraft/class_1792; field_8783 MAGENTA_TERRACOTTA - f Lnet/minecraft/class_1792; field_20401 DIORITE - f Lnet/minecraft/class_1792; field_8605 ACACIA_BUTTON - f Lnet/minecraft/class_1792; field_8190 ACACIA_TRAPDOOR - f Lnet/minecraft/class_1792; field_19060 CLAY - f Lnet/minecraft/class_1792; field_21988 WARPED_FUNGUS - f Lnet/minecraft/class_1792; field_20414 HONEYCOMB - f Lnet/minecraft/class_1792; field_8108 PUFFERFISH_BUCKET - f Lnet/minecraft/class_1792; field_8062 STONE_AXE - f Lnet/minecraft/class_1792; field_8875 GRAY_CARPET - f Lnet/minecraft/class_1792; field_8366 TRIPWIRE_HOOK - f Lnet/minecraft/class_1792; field_17540 DARK_OAK_SAPLING - f Lnet/minecraft/class_1792; field_8136 ZOMBIE_VILLAGER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8544 COOKED_CHICKEN - f Lnet/minecraft/class_1792; field_8349 MAGENTA_BED - f Lnet/minecraft/class_1792; field_8678 GOLDEN_CHESTPLATE - f Lnet/minecraft/class_1792; field_8255 SHIELD - f Lnet/minecraft/class_1792; field_8208 MUSHROOM_STEW - f Lnet/minecraft/class_1792; field_8166 SMOOTH_SANDSTONE_STAIRS - f Lnet/minecraft/class_1792; field_8289 BIRCH_FENCE_GATE - f Lnet/minecraft/class_1792; field_20393 PURPUR_BLOCK - f Lnet/minecraft/class_1792; field_8379 LIGHT_BLUE_BANNER - f Lnet/minecraft/class_1792; field_8100 PUFFERFISH_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8194 COBBLESTONE_SLAB - f Lnet/minecraft/class_1792; field_17506 JUNGLE_LEAVES - f Lnet/minecraft/class_1792; field_8381 DEAD_BRAIN_CORAL - f Lnet/minecraft/class_1792; field_8380 ORANGE_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8083 DROWNED_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8373 COOKED_COD - f Lnet/minecraft/class_1792; field_20391 STONE - f Lnet/minecraft/class_1792; field_8879 RED_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8878 DROPPER - f Lnet/minecraft/class_1792; field_8533 OAK_BOAT - f Lnet/minecraft/class_1792; field_8528 STONE_SWORD - f Lnet/minecraft/class_1792; field_8048 SPRUCE_BUTTON - f Lnet/minecraft/class_1792; field_8495 SPRUCE_TRAPDOOR - f Lnet/minecraft/class_1792; field_8426 ICE - f Lnet/minecraft/class_1792; field_17516 BROWN_MUSHROOM - f Lnet/minecraft/class_1792; field_17346 CAMPFIRE - f Lnet/minecraft/class_1792; field_19049 LIME_WOOL - f Lnet/minecraft/class_1792; field_8207 HEART_OF_THE_SEA - f Lnet/minecraft/class_1792; field_8639 FIREWORK_ROCKET - f Lnet/minecraft/class_1792; field_22010 CRIMSON_DOOR - f Lnet/minecraft/class_1792; field_8418 LIME_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8093 ZOMBIFIED_PIGLIN_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8511 ROTTEN_FLESH - f Lnet/minecraft/class_1792; field_8244 GREEN_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8869 LIGHT_BLUE_STAINED_GLASS - f Lnet/minecraft/class_1792; field_8286 LIGHT_BLUE_BED - f Lnet/minecraft/class_1792; field_8416 GOLDEN_LEGGINGS - f Lnet/minecraft/class_1792; field_8542 BEDROCK - f Lnet/minecraft/class_1792; field_8654 LIGHT_GRAY_CARPET - f Lnet/minecraft/class_1792; field_8733 EMERALD_BLOCK - f Lnet/minecraft/class_1792; field_8833 ELYTRA - f Lnet/minecraft/class_1792; field_8276 STRING - f Lnet/minecraft/class_1792; field_8430 SMOOTH_QUARTZ_STAIRS - f Lnet/minecraft/class_1792; field_8097 JUNGLE_FENCE_GATE - f Lnet/minecraft/class_1792; field_8490 PURPUR_PILLAR - f Lnet/minecraft/class_1792; field_8051 DEAD_BUBBLE_CORAL - f Lnet/minecraft/class_1792; field_8050 MAGENTA_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8342 BRICK_SLAB - f Lnet/minecraft/class_1792; field_17507 ACACIA_LEAVES - f Lnet/minecraft/class_1792; field_8157 BLACK_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8156 WHITE_TERRACOTTA - f Lnet/minecraft/class_1792; field_20394 GRANITE - f Lnet/minecraft/class_1792; field_8049 YELLOW_BANNER - f Lnet/minecraft/class_1792; field_8227 RABBIT_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8769 ELDER_GUARDIAN_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8509 COOKED_SALMON - f Lnet/minecraft/class_1792; field_23842 SOUL_CAMPFIRE - f Lnet/minecraft/class_1792; field_8745 LEATHER - f Lnet/minecraft/class_1792; field_8776 STONE_SHOVEL - f Lnet/minecraft/class_1792; field_8174 BIRCH_BUTTON - f Lnet/minecraft/class_1792; field_8774 BIRCH_TRAPDOOR - f Lnet/minecraft/class_1792; field_8399 CROSSBOW - f Lnet/minecraft/class_1792; field_8450 FIREWORK_STAR - f Lnet/minecraft/class_1792; field_8246 SNOW_BLOCK - f Lnet/minecraft/class_1792; field_17517 RED_MUSHROOM - f Lnet/minecraft/class_1792; field_22009 WARPED_DOOR - f Lnet/minecraft/class_1792; field_8222 PINK_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8703 YELLOW_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8566 DAYLIGHT_DETECTOR - f Lnet/minecraft/class_1792; field_8072 STRIPPED_ACACIA_LOG - f Lnet/minecraft/class_1792; field_8206 ANDESITE_WALL - f Lnet/minecraft/class_1792; field_17519 CARVED_PUMPKIN - f Lnet/minecraft/class_1792; field_20413 BEE_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8063 FURNACE_MINECART - f Lnet/minecraft/class_1792; field_16313 CARTOGRAPHY_TABLE - f Lnet/minecraft/class_1792; field_8496 DARK_OAK_SIGN - f Lnet/minecraft/class_1792; field_8477 DIAMOND - f Lnet/minecraft/class_1792; field_8344 MUSIC_DISC_MELLOHI - f Lnet/minecraft/class_1792; field_8398 SKELETON_SKULL - f Lnet/minecraft/class_1792; field_8395 POLISHED_ANDESITE_SLAB - f Lnet/minecraft/class_1792; field_8737 BLUE_CONCRETE - f Lnet/minecraft/class_1792; field_8779 BIRCH_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_17500 ALLIUM - f Lnet/minecraft/class_1792; field_22032 WARPED_PLANKS - f Lnet/minecraft/class_1792; field_8086 VILLAGER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8204 FILLED_MAP - f Lnet/minecraft/class_1792; field_8471 FERN - f Lnet/minecraft/class_1792; field_8640 LIGHT_BLUE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8519 GRASS_PATH - f Lnet/minecraft/class_1792; field_8408 GREEN_DYE - f Lnet/minecraft/class_1792; field_8743 IRON_HELMET - f Lnet/minecraft/class_1792; field_8241 IRON_TRAPDOOR - f Lnet/minecraft/class_1792; field_8657 ENCHANTING_TABLE - f Lnet/minecraft/class_1792; field_8682 RED_MUSHROOM_BLOCK - f Lnet/minecraft/class_1792; field_20390 BRICKS - f Lnet/minecraft/class_1792; field_8556 DIAMOND_AXE - f Lnet/minecraft/class_1792; field_8178 BLUE_ICE - f Lnet/minecraft/class_1792; field_8400 ACACIA_SLAB - f Lnet/minecraft/class_1792; field_8201 BIRCH_WOOD - f Lnet/minecraft/class_1792; field_23848 POLISHED_BLACKSTONE - f Lnet/minecraft/class_1792; field_8882 POPPED_CHORUS_FRUIT - f Lnet/minecraft/class_1792; field_18138 LEATHER_HORSE_ARMOR - f Lnet/minecraft/class_1792; field_8132 OCELOT_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8474 BRAIN_CORAL_BLOCK - f Lnet/minecraft/class_1792; field_8354 MAGMA_BLOCK - f Lnet/minecraft/class_1792; field_8808 STRIPPED_DARK_OAK_LOG - f Lnet/minecraft/class_1792; field_8154 BLAZE_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8803 EGG - f Lnet/minecraft/class_1792; field_8581 LIME_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8793 REDSTONE_BLOCK - f Lnet/minecraft/class_1792; field_16310 FLETCHING_TABLE - f Lnet/minecraft/class_1792; field_22011 CRIMSON_SIGN - f Lnet/minecraft/class_1792; field_8620 IRON_INGOT - f Lnet/minecraft/class_1792; field_8419 RED_NETHER_BRICK_WALL - f Lnet/minecraft/class_1792; field_8328 NETHERRACK - f Lnet/minecraft/class_1792; field_8834 MUSIC_DISC_STAL - f Lnet/minecraft/class_1792; field_8791 WITHER_SKELETON_SKULL - f Lnet/minecraft/class_1792; field_8659 DIORITE_SLAB - f Lnet/minecraft/class_1792; field_8762 BROWN_CONCRETE - f Lnet/minecraft/class_1792; field_8047 JUNGLE_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_17501 AZURE_BLUET - f Lnet/minecraft/class_1792; field_8889 YELLOW_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_17525 SUNFLOWER - f Lnet/minecraft/class_1792; field_8689 DEAD_BUSH - f Lnet/minecraft/class_1792; field_17535 OAK_SAPLING - f Lnet/minecraft/class_1792; field_17528 HAY_BLOCK - f Lnet/minecraft/class_1792; field_8827 END_PORTAL_FRAME - f Lnet/minecraft/class_1792; field_8149 VINDICATOR_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8868 SHEARS - f Lnet/minecraft/class_1792; field_8264 RED_DYE - f Lnet/minecraft/class_1792; field_8523 IRON_CHESTPLATE - f Lnet/minecraft/class_1792; field_23849 POLISHED_BLACKSTONE_SLAB - f Lnet/minecraft/class_1792; field_8186 BEETROOT - f Lnet/minecraft/class_1792; field_8527 DIAMOND_HOE - f Lnet/minecraft/class_1792; field_8140 CONDUIT - f Lnet/minecraft/class_1792; field_17521 MUSHROOM_STEM - f Lnet/minecraft/class_1792; field_8626 TNT - f Lnet/minecraft/class_1792; field_8597 GLISTERING_MELON_SLICE - f Lnet/minecraft/class_1792; field_8777 SLIME_BALL - f Lnet/minecraft/class_1792; field_8119 MAGENTA_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8721 LIGHT_WEIGHTED_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_16309 SMOKER - f Lnet/minecraft/class_1792; field_8867 JUNGLE_SIGN - f Lnet/minecraft/class_1792; field_8713 COAL - f Lnet/minecraft/class_1792; field_8337 STONE_BRICK_WALL - f Lnet/minecraft/class_1792; field_21996 WARPED_FENCE - f Lnet/minecraft/class_1792; field_8502 MUSIC_DISC_FAR - f Lnet/minecraft/class_1792; field_8895 MAP - f Lnet/minecraft/class_1792; field_8742 ANDESITE_SLAB - f Lnet/minecraft/class_1792; field_8637 CYAN_CONCRETE - f Lnet/minecraft/class_1792; field_8391 OAK_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_8880 POPPY - f Lnet/minecraft/class_1792; field_8435 TURTLE_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8112 BLACK_BED - f Lnet/minecraft/class_1792; field_8139 ORANGE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8658 DARK_OAK_STAIRS - f Lnet/minecraft/class_1792; field_8404 DARK_OAK_PLANKS - f Lnet/minecraft/class_1792; field_8786 COBWEB - f Lnet/minecraft/class_1792; field_8181 BLACK_TERRACOTTA - f Lnet/minecraft/class_1792; field_8080 NETHER_BRICK_FENCE - f Lnet/minecraft/class_1792; field_8525 CHISELED_STONE_BRICKS - f Lnet/minecraft/class_1792; field_20388 SMOOTH_SANDSTONE - f Lnet/minecraft/class_1792; field_8345 BLUE_DYE - f Lnet/minecraft/class_1792; field_8218 CHAINMAIL_LEGGINGS - f Lnet/minecraft/class_1792; field_23845 BLACKSTONE_STAIRS - f Lnet/minecraft/class_1792; field_8301 END_CRYSTAL - f Lnet/minecraft/class_1792; field_8250 DIAMOND_SHOVEL - f Lnet/minecraft/class_1792; field_8677 DEAD_FIRE_CORAL_FAN - f Lnet/minecraft/class_1792; field_8560 GOLDEN_HORSE_ARMOR - f Lnet/minecraft/class_1792; field_8299 MOOSHROOM_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8698 DEAD_HORN_CORAL_BLOCK - f Lnet/minecraft/class_1792; field_8468 REPEATING_COMMAND_BLOCK - f Lnet/minecraft/class_1792; field_8843 BIRCH_SLAB - f Lnet/minecraft/class_1792; field_8888 OAK_WOOD - f Lnet/minecraft/class_1792; field_8334 STRIPPED_JUNGLE_LOG - f Lnet/minecraft/class_1792; field_8727 BAT_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8388 CHEST_MINECART - f Lnet/minecraft/class_1792; field_8196 LIGHT_BLUE_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8592 HEAVY_WEIGHTED_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_8203 ACACIA_SIGN - f Lnet/minecraft/class_1792; field_8665 CHARCOAL - f Lnet/minecraft/class_1792; field_8765 NETHER_BRICK_WALL - f Lnet/minecraft/class_1792; field_17518 PUMPKIN - f Lnet/minecraft/class_1792; field_8707 SPRUCE_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_17499 BLUE_ORCHID - f Lnet/minecraft/class_1792; field_8522 RED_NETHER_BRICK_SLAB - f Lnet/minecraft/class_1792; field_8411 PURPLE_CONCRETE - f Lnet/minecraft/class_1792; field_16306 BLAST_FURNACE - f Lnet/minecraft/class_1792; field_8602 GRASS - f Lnet/minecraft/class_1792; field_22031 CRIMSON_PLANKS - f Lnet/minecraft/class_1792; field_8534 MUSIC_DISC_MALL - f Lnet/minecraft/class_1792; field_8071 GOLDEN_CARROT - f Lnet/minecraft/class_1792; field_8235 VEX_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8423 COOKIE - f Lnet/minecraft/class_1792; field_8318 MAGENTA_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8828 SLIME_BLOCK - f Lnet/minecraft/class_1792; field_8099 BROWN_DYE - f Lnet/minecraft/class_1792; field_8313 CHAINMAIL_BOOTS - f Lnet/minecraft/class_1792; field_8077 BARRIER - f Lnet/minecraft/class_1792; field_8444 NETHER_BRICK_STAIRS - f Lnet/minecraft/class_1792; field_23847 GILDED_BLACKSTONE - f Lnet/minecraft/class_1792; field_8233 CHORUS_FRUIT - f Lnet/minecraft/class_1792; field_8377 DIAMOND_PICKAXE - f Lnet/minecraft/class_1792; field_8269 DEAD_HORN_CORAL_FAN - f Lnet/minecraft/class_1792; field_8506 BROWN_MUSHROOM_BLOCK - f Lnet/minecraft/class_1792; field_20389 SMOOTH_STONE - f Lnet/minecraft/class_1792; field_8807 DIAMOND_HORSE_ARMOR - f Lnet/minecraft/class_1792; field_8331 MULE_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8402 TUBE_CORAL_BLOCK - f Lnet/minecraft/class_1792; field_8799 CHAIN_COMMAND_BLOCK - f Lnet/minecraft/class_1792; field_8224 JUNGLE_SLAB - f Lnet/minecraft/class_1792; field_8210 SPRUCE_WOOD - f Lnet/minecraft/class_1792; field_21986 WARPED_SLAB - f Lnet/minecraft/class_1792; field_8458 DARK_OAK_WOOD - f Lnet/minecraft/class_1792; field_23836 CHISELED_POLISHED_BLACKSTONE - f Lnet/minecraft/class_1792; field_8515 BEETROOT_SOUP - f Lnet/minecraft/class_1792; field_22023 NETHERITE_SHOVEL - f Lnet/minecraft/class_1792; field_8641 SMOOTH_RED_SANDSTONE_STAIRS - f Lnet/minecraft/class_1792; field_8220 COMMAND_BLOCK_MINECART - f Lnet/minecraft/class_1792; field_8670 PHANTOM_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8104 HORN_CORAL_BLOCK - f Lnet/minecraft/class_1792; field_20410 RED_NETHER_BRICKS - f Lnet/minecraft/class_1792; field_8835 CHICKEN_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8557 CLOCK - f Lnet/minecraft/class_1792; field_8240 LIGHT_GRAY_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8084 CHISELED_QUARTZ_BLOCK - f Lnet/minecraft/class_1792; field_16308 SMITHING_TABLE - f Lnet/minecraft/class_1792; field_8705 WATER_BUCKET - f Lnet/minecraft/class_1792; field_22021 NETHERITE_SCRAP - f Lnet/minecraft/class_1792; field_8559 DIORITE_WALL - f Lnet/minecraft/class_1792; field_22000 BASALT - f Lnet/minecraft/class_1792; field_8691 OAK_DOOR - f Lnet/minecraft/class_1792; field_8704 BLACK_CONCRETE - f Lnet/minecraft/class_1792; field_21993 CRIMSON_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_17510 WHITE_TULIP - f Lnet/minecraft/class_1792; field_8249 PISTON - f Lnet/minecraft/class_1792; field_8885 GRAY_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_17529 PEONY - f Lnet/minecraft/class_1792; field_8731 MUSIC_DISC_11 - f Lnet/minecraft/class_1792; field_8681 CREEPER_HEAD - f Lnet/minecraft/class_1792; field_8832 WITHER_SKELETON_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8706 PUMPKIN_SEEDS - f Lnet/minecraft/class_1792; field_8606 BONE - f Lnet/minecraft/class_1792; field_8805 DIAMOND_HELMET - f Lnet/minecraft/class_1792; field_8384 MAGENTA_CARPET - f Lnet/minecraft/class_1792; field_8840 DRAGON_EGG - f Lnet/minecraft/class_1792; field_23837 POLISHED_BLACKSTONE_BRICKS - f Lnet/minecraft/class_1792; field_8613 DRAGON_BREATH - f Lnet/minecraft/class_1792; field_8141 GLASS_PANE - f Lnet/minecraft/class_1792; field_8281 OBSIDIAN - f Lnet/minecraft/class_1792; field_22024 NETHERITE_PICKAXE - f Lnet/minecraft/class_1792; field_8890 MOSSY_STONE_BRICK_STAIRS - f Lnet/minecraft/class_1792; field_8748 MUTTON - f Lnet/minecraft/class_1792; field_8493 PIG_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8847 TUBE_CORAL - f Lnet/minecraft/class_1792; field_8242 BONE_BLOCK - f Lnet/minecraft/class_1792; field_8595 STONE_SLAB - f Lnet/minecraft/class_1792; field_22489 CRIMSON_HYPHAE - f Lnet/minecraft/class_1792; field_8661 COD_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8601 GLOWSTONE_DUST - f Lnet/minecraft/class_1792; field_8085 CYAN_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_20402 QUARTZ_BLOCK - f Lnet/minecraft/class_1792; field_23846 BLACKSTONE_WALL - f Lnet/minecraft/class_1792; field_23069 POLISHED_BASALT - f Lnet/minecraft/class_1792; field_21994 WARPED_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_17511 PINK_TULIP - f Lnet/minecraft/class_1792; field_16305 STONECUTTER - f Lnet/minecraft/class_1792; field_8187 LAVA_BUCKET - f Lnet/minecraft/class_1792; field_8091 WOODEN_SWORD - f Lnet/minecraft/class_1792; field_8806 MUSIC_DISC_WAIT - f Lnet/minecraft/class_1792; field_8712 DRAGON_HEAD - f Lnet/minecraft/class_1792; field_8165 SPRUCE_DOOR - f Lnet/minecraft/class_1792; field_8582 WHITE_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8485 WOLF_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8188 MELON_SEEDS - f Lnet/minecraft/class_1792; field_8172 LIGHT_GRAY_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8256 TALL_GRASS - f Lnet/minecraft/class_1792; field_19044 WHITE_WOOL - f Lnet/minecraft/class_1792; field_8479 SUGAR - f Lnet/minecraft/class_1792; field_8058 DIAMOND_CHESTPLATE - f Lnet/minecraft/class_1792; field_8078 LIGHT_BLUE_CARPET - f Lnet/minecraft/class_1792; field_8230 REDSTONE_LAMP - f Lnet/minecraft/class_1792; field_8719 LEAD - f Lnet/minecraft/class_1792; field_8193 PANDA_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8540 DARK_OAK_SLAB - f Lnet/minecraft/class_1792; field_8439 JUNGLE_WOOD - f Lnet/minecraft/class_1792; field_8883 BUBBLE_CORAL_BLOCK - f Lnet/minecraft/class_1792; field_8182 NETHER_WART_BLOCK - f Lnet/minecraft/class_1792; field_16314 CAT_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8251 COMPASS - f Lnet/minecraft/class_1792; field_21983 STRIPPED_CRIMSON_STEM - f Lnet/minecraft/class_1792; field_8500 PINK_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8702 NETHER_QUARTZ_ORE - f Lnet/minecraft/class_1792; field_22012 WARPED_SIGN - f Lnet/minecraft/class_1792; field_8695 GOLD_INGOT - f Lnet/minecraft/class_1792; field_8223 SANDSTONE_WALL - f Lnet/minecraft/class_1792; field_8067 SOUL_SAND - f Lnet/minecraft/class_1792; field_8173 ACACIA_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_17502 RED_TULIP - f Lnet/minecraft/class_1792; field_16311 GRINDSTONE - f Lnet/minecraft/class_1792; field_8158 SEAGRASS - f Lnet/minecraft/class_1792; field_8065 MUSIC_DISC_STRAD - f Lnet/minecraft/class_1792; field_8575 PLAYER_HEAD - f Lnet/minecraft/class_1792; field_16482 SCAFFOLDING - f Lnet/minecraft/class_1792; field_8120 GREEN_CONCRETE - f Lnet/minecraft/class_1792; field_17536 SPRUCE_SAPLING - f Lnet/minecraft/class_1792; field_17732 WANDERING_TRADER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8497 MELON_SLICE - f Lnet/minecraft/class_1792; field_8649 LIME_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_17526 LILAC - f Lnet/minecraft/class_1792; field_8226 BLACK_DYE - f Lnet/minecraft/class_1792; field_8396 IRON_LEGGINGS - f Lnet/minecraft/class_1792; field_8850 WHITE_CARPET - f Lnet/minecraft/class_1792; field_20399 END_STONE - f Lnet/minecraft/class_1792; field_23832 POLISHED_BLACKSTONE_STAIRS - f Lnet/minecraft/class_1792; field_8309 BEETROOT_SEEDS - f Lnet/minecraft/class_1792; field_22022 NETHERITE_SWORD - f Lnet/minecraft/class_1792; field_8319 POLISHED_GRANITE_STAIRS - f Lnet/minecraft/class_1792; field_8076 IRON_BARS - f Lnet/minecraft/class_1792; field_8536 BOOKSHELF - f Lnet/minecraft/class_1792; field_8278 FIRE_CORAL_BLOCK - f Lnet/minecraft/class_1792; field_22008 WARPED_WART_BLOCK - f Lnet/minecraft/class_1792; field_21985 CRIMSON_SLAB - f Lnet/minecraft/class_1792; field_8587 ACACIA_WOOD - f Lnet/minecraft/class_1792; field_8871 GRAY_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8239 HOPPER - f Lnet/minecraft/class_1792; field_8448 NAME_TAG - f Lnet/minecraft/class_1792; field_8274 PARROT_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8068 CAVE_SPIDER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8378 FISHING_ROD - f Lnet/minecraft/class_1792; field_16312 LECTERN - f Lnet/minecraft/class_1792; field_8550 BUCKET - f Lnet/minecraft/class_1792; field_22020 NETHERITE_INGOT - f Lnet/minecraft/class_1792; field_8819 END_STONE_BRICK_WALL - f Lnet/minecraft/class_1792; field_21999 SOUL_SOIL - f Lnet/minecraft/class_1792; field_8355 MUSIC_DISC_WARD - f Lnet/minecraft/class_1792; field_8470 ZOMBIE_HEAD - f Lnet/minecraft/class_1792; field_8886 DARK_OAK_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_17509 ORANGE_TULIP - f Lnet/minecraft/class_1792; field_8594 IRON_DOOR - f Lnet/minecraft/class_1792; field_8197 RED_CONCRETE - f Lnet/minecraft/class_1792; field_8254 WITCH_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8551 DRIED_KELP - f Lnet/minecraft/class_1792; field_17537 BIRCH_SAPLING - f Lnet/minecraft/class_1792; field_8277 PINK_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_17527 ROSE_BUSH - f Lnet/minecraft/class_1792; field_17498 SEA_PICKLE - f Lnet/minecraft/class_1792; field_8324 BONE_MEAL - f Lnet/minecraft/class_1792; field_8660 IRON_BOOTS - f Lnet/minecraft/class_1792; field_8683 ORANGE_CARPET - f Lnet/minecraft/class_1792; field_20400 END_STONE_BRICKS - f Lnet/minecraft/class_1792; field_23983 CHAIN - f Lnet/minecraft/class_1792; field_20392 MOSSY_COBBLESTONE - f Lnet/minecraft/class_1792; field_8569 POLISHED_DIORITE_SLAB - f Lnet/minecraft/class_1792; field_8732 FURNACE - f Lnet/minecraft/class_1792; field_19055 BLUE_WOOL - f Lnet/minecraft/class_1792; field_20412 COBBLESTONE - f Lnet/minecraft/class_1792; field_8552 CHISELED_SANDSTONE - f Lnet/minecraft/class_1792; field_8350 BLUE_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8482 RED_CARPET - f Lnet/minecraft/class_1792; field_8821 CYAN_TERRACOTTA - f Lnet/minecraft/class_1792; field_8481 STONE_BRICK_STAIRS - f Lnet/minecraft/class_1792; field_8596 INFESTED_MOSSY_STONE_BRICKS - f Lnet/minecraft/class_1792; field_8202 PURPUR_SLAB - f Lnet/minecraft/class_1792; field_8371 IRON_SWORD - f Lnet/minecraft/class_1792; field_17532 KELP - f Lnet/minecraft/class_1792; field_8472 STRIPPED_BIRCH_WOOD - f Lnet/minecraft/class_1792; field_8516 BLACK_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_8854 DARK_PRISMARINE_STAIRS - f Lnet/minecraft/class_1792; field_8652 DARK_OAK_LOG - f Lnet/minecraft/class_1792; field_8734 GREEN_STAINED_GLASS - f Lnet/minecraft/class_1792; field_23834 POLISHED_BLACKSTONE_BUTTON - f Lnet/minecraft/class_1792; field_8463 GOLDEN_APPLE - f Lnet/minecraft/class_1792; field_8804 BRICK_WALL - f Lnet/minecraft/class_1792; field_8457 BIRCH_FENCE - f Lnet/minecraft/class_1792; field_8369 MOSSY_COBBLESTONE_SLAB - f Lnet/minecraft/class_1792; field_8686 YELLOW_CONCRETE - f Lnet/minecraft/class_1792; field_8121 LADDER - f Lnet/minecraft/class_1792; field_19056 BROWN_WOOL - f Lnet/minecraft/class_1792; field_8584 BROWN_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8611 BLACK_CARPET - f Lnet/minecraft/class_1792; field_20385 CUT_SANDSTONE - f Lnet/minecraft/class_1792; field_8118 OAK_PLANKS - f Lnet/minecraft/class_1792; field_8715 PURPLE_TERRACOTTA - f Lnet/minecraft/class_1792; field_8610 MYCELIUM - f Lnet/minecraft/class_1792; field_8330 PINK_DYE - f Lnet/minecraft/class_1792; field_8699 IRON_SHOVEL - f Lnet/minecraft/class_1792; field_8214 FIRE_CORAL_FAN - f Lnet/minecraft/class_1792; field_8292 INFESTED_CRACKED_STONE_BRICKS - f Lnet/minecraft/class_1792; field_8440 PRISMARINE_SLAB - f Lnet/minecraft/class_1792; field_8648 BAMBOO - f Lnet/minecraft/class_1792; field_8785 STRIPPED_JUNGLE_WOOD - f Lnet/minecraft/class_1792; field_8618 TURTLE_EGG - f Lnet/minecraft/class_1792; field_8305 SEA_LANTERN - f Lnet/minecraft/class_1792; field_8135 MAGMA_CREAM - f Lnet/minecraft/class_1792; field_21981 CRIMSON_STEM - f Lnet/minecraft/class_1792; field_8636 RED_STAINED_GLASS - f Lnet/minecraft/class_1792; field_8782 ANVIL - f Lnet/minecraft/class_1792; field_8367 ENCHANTED_GOLDEN_APPLE - f Lnet/minecraft/class_1792; field_8884 FLINT_AND_STEEL - f Lnet/minecraft/class_1792; field_8057 PRISMARINE_WALL - f Lnet/minecraft/class_1792; field_8823 JUNGLE_FENCE - f Lnet/minecraft/class_1792; field_22013 CRIMSON_NYLIUM - f Lnet/minecraft/class_1792; field_8357 DISPENSER - f Lnet/minecraft/class_1792; field_8304 GRAY_TERRACOTTA - f Lnet/minecraft/class_1792; field_8401 INFESTED_COBBLESTONE - f Lnet/minecraft/class_1792; field_18886 RED_SANDSTONE_SLAB - f Lnet/minecraft/class_1792; field_22019 ANCIENT_DEBRIS - f Lnet/minecraft/class_1792; field_8308 RABBIT_STEW - f Lnet/minecraft/class_1792; field_23070 TWISTING_VINES - f Lnet/minecraft/class_1792; field_8248 STRIPPED_OAK_WOOD - f Lnet/minecraft/class_1792; field_8125 JUNGLE_LOG - f Lnet/minecraft/class_1792; field_8126 BLUE_STAINED_GLASS - f Lnet/minecraft/class_1792; field_8392 COBBLESTONE_WALL - f Lnet/minecraft/class_1792; field_8792 OAK_FENCE - f Lnet/minecraft/class_1792; field_8365 FARMLAND - f Lnet/minecraft/class_1792; field_19054 PURPLE_WOOL - f Lnet/minecraft/class_1792; field_8144 MUSIC_DISC_13 - f Lnet/minecraft/class_1792; field_20384 SANDSTONE - f Lnet/minecraft/class_1792; field_22015 WARPED_NYLIUM - f Lnet/minecraft/class_1792; field_8816 PURPLE_SHULKER_BOX - f Lnet/minecraft/class_1792; field_22420 TARGET - f Lnet/minecraft/class_1792; field_8133 LIGHT_GRAY_TERRACOTTA - f Lnet/minecraft/class_1792; field_8663 BRICK_STAIRS - f Lnet/minecraft/class_1792; field_8541 INFESTED_STONE_BRICKS - f Lnet/minecraft/class_1792; field_18887 CUT_RED_SANDSTONE_SLAB - f Lnet/minecraft/class_1792; field_8757 RED_CONCRETE_POWDER - f Lnet/minecraft/class_1792; field_17531 SUGAR_CANE - f Lnet/minecraft/class_1792; field_8362 STRIPPED_SPRUCE_WOOD - f Lnet/minecraft/class_1792; field_8332 BROWN_STAINED_GLASS - f Lnet/minecraft/class_1792; field_22005 WARPED_BUTTON - f Lnet/minecraft/class_1792; field_8820 ACACIA_LOG - f Lnet/minecraft/class_1792; field_8708 MOSSY_COBBLESTONE_WALL - f Lnet/minecraft/class_1792; field_8701 SPRUCE_FENCE - f Lnet/minecraft/class_1792; field_8111 SPRUCE_SIGN - f Lnet/minecraft/class_1792; field_8102 BOW - f Lnet/minecraft/class_1792; field_8811 MOSSY_STONE_BRICK_WALL - f Lnet/minecraft/class_1792; field_8454 DARK_OAK_FENCE - f Lnet/minecraft/class_1792; field_8217 SMOOTH_QUARTZ_SLAB - f Lnet/minecraft/class_1792; field_8333 GRAY_CONCRETE - f Lnet/minecraft/class_1792; field_8865 LEVER - f Lnet/minecraft/class_1792; field_19059 BLACK_WOOL - f Lnet/minecraft/class_1792; field_8211 DETECTOR_RAIL - f Lnet/minecraft/class_1792; field_8268 BLACK_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8081 PACKED_ICE - f Lnet/minecraft/class_1792; field_8842 JUNGLE_PLANKS - f Lnet/minecraft/class_1792; field_8425 MUSIC_DISC_BLOCKS - f Lnet/minecraft/class_1792; field_8512 BAKED_POTATO - f Lnet/minecraft/class_1792; field_17731 TRADER_LLAMA_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8368 GREEN_BED - f Lnet/minecraft/class_1792; field_8632 CYAN_DYE - f Lnet/minecraft/class_1792; field_8283 CHAINMAIL_HELMET - f Lnet/minecraft/class_1792; field_8798 GREEN_TERRACOTTA - f Lnet/minecraft/class_1792; field_23828 CRACKED_NETHER_BRICKS - f Lnet/minecraft/class_1792; field_23843 BLACKSTONE - f Lnet/minecraft/class_1792; field_8586 RED_BANNER - f Lnet/minecraft/class_1792; field_20396 MOSSY_STONE_BRICKS - f Lnet/minecraft/class_1792; field_20386 SMOOTH_QUARTZ - f Lnet/minecraft/class_1792; field_8609 IRON_HOE - f Lnet/minecraft/class_1792; field_8585 DEAD_BRAIN_CORAL_FAN - f Lnet/minecraft/class_1792; field_8694 ARMOR_STAND - f Lnet/minecraft/class_1792; field_8633 LLAMA_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8089 DEAD_BUBBLE_CORAL_BLOCK - f Lnet/minecraft/class_1792; field_20409 CUT_RED_SANDSTONE - f Lnet/minecraft/class_1792; field_8320 OAK_SLAB - f Lnet/minecraft/class_1792; field_22487 STRIPPED_CRIMSON_HYPHAE - f Lnet/minecraft/class_1792; field_8449 ENDER_EYE - f Lnet/minecraft/class_1792; field_8529 BOOK - f Lnet/minecraft/class_1792; field_8761 ORANGE_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8247 TRAPPED_CHEST - f Lnet/minecraft/class_1792; field_8624 STRIPPED_SPRUCE_LOG - f Lnet/minecraft/class_1792; field_8488 GRANITE_WALL - f Lnet/minecraft/class_1792; field_21995 CRIMSON_FENCE - f Lnet/minecraft/class_1792; field_8667 STONE_PRESSURE_PLATE - f Lnet/minecraft/class_1792; field_8491 DANDELION - f Lnet/minecraft/class_1792; field_16307 BARREL - f Lnet/minecraft/class_1792; field_8422 BIRCH_SIGN - f Lnet/minecraft/class_1792; field_8107 ARROW - f Lnet/minecraft/class_1792; field_8623 MUSIC_DISC_CHIRP - f Lnet/minecraft/class_1792; field_8635 POISONOUS_POTATO - f Lnet/minecraft/class_1792; field_8312 GRANITE_SLAB - f Lnet/minecraft/class_1792; field_8735 LIGHT_GRAY_CONCRETE - f Lnet/minecraft/class_1792; field_8612 TROPICAL_FISH_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8789 RED_BED - f Lnet/minecraft/class_1792; field_8651 ACACIA_PLANKS - f Lnet/minecraft/class_1792; field_8177 WHITE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_1792; field_8445 ACACIA_STAIRS - f Lnet/minecraft/class_1792; field_8105 STICKY_PISTON - f Lnet/minecraft/class_1792; field_8296 PURPLE_DYE - f Lnet/minecraft/class_1792; field_8873 CHAINMAIL_CHESTPLATE - f Lnet/minecraft/class_1792; field_8353 RED_TERRACOTTA - f Lnet/minecraft/class_1792; field_23829 CHISELED_NETHER_BRICKS - f Lnet/minecraft/class_1792; field_8802 DIAMOND_SWORD - f Lnet/minecraft/class_1792; field_8462 DEAD_BUBBLE_CORAL_FAN - f Lnet/minecraft/class_1792; field_8343 CRACKED_STONE_BRICKS - f Lnet/minecraft/class_1792; field_20387 SMOOTH_RED_SANDSTONE - f Lnet/minecraft/class_1792; field_8189 SPRUCE_SLAB - f Lnet/minecraft/class_1792; field_22488 STRIPPED_WARPED_HYPHAE - f Lnet/minecraft/class_1792; field_8160 DEAD_FIRE_CORAL_BLOCK - f Lnet/minecraft/class_1792; field_8456 RED_SANDSTONE_STAIRS - f Lnet/minecraft/class_1792; field_23844 BLACKSTONE_SLAB - f Lnet/minecraft/class_1792; field_8572 BLACK_BANNER - f Lnet/minecraft/class_1792; field_8767 STRIPPED_BIRCH_LOG - f Lnet/minecraft/class_1792; field_8578 IRON_HORSE_ARMOR - f Lnet/minecraft/class_1792; field_8852 MAGMA_CUBE_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8129 RAIL - f Lnet/minecraft/class_1792; field_19057 GREEN_WOOL - f Lnet/minecraft/class_1792; field_8643 NOTE_BLOCK - f Lnet/minecraft/class_1792; field_8282 END_STONE_BRICK_SLAB - f Lnet/minecraft/class_1792; field_8839 LIME_CONCRETE - f Lnet/minecraft/class_1792; field_8113 SPRUCE_PLANKS - f Lnet/minecraft/class_1792; field_8514 STRAY_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8461 GREEN_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8260 TERRACOTTA - f Lnet/minecraft/class_1792; field_8298 GRAY_DYE - f Lnet/minecraft/class_1792; field_8570 LEATHER_LEGGINGS - f Lnet/minecraft/class_1792; field_8455 BLUE_TERRACOTTA - f Lnet/minecraft/class_1792; field_17524 LILY_PAD - f Lnet/minecraft/class_1792; field_8403 IRON_PICKAXE - f Lnet/minecraft/class_1792; field_8817 HORN_CORAL_FAN - f Lnet/minecraft/class_1792; field_8148 INFESTED_CHISELED_STONE_BRICKS - f Lnet/minecraft/class_1792; field_8588 PRISMARINE_BRICK_SLAB - f Lnet/minecraft/class_1792; field_8856 DEAD_TUBE_CORAL_BLOCK - f Lnet/minecraft/class_1792; field_20408 RED_SANDSTONE - f Lnet/minecraft/class_1792; field_8494 GOLD_BLOCK - f Lnet/minecraft/class_1792; field_8284 STRIPPED_ACACIA_WOOD - f Lnet/minecraft/class_1792; field_8410 BLACK_STAINED_GLASS - f Lnet/minecraft/class_1792; field_8750 CHIPPED_ANVIL - f Lnet/minecraft/class_1792; field_21982 WARPED_STEM - f Lnet/minecraft/class_1792; field_8073 RABBIT_FOOT - f Lnet/minecraft/class_1792; field_8740 BREWING_STAND - f Lnet/minecraft/class_1792; field_17533 DRIED_KELP_BLOCK - f Lnet/minecraft/class_1792; field_8788 OAK_SIGN - f Lnet/minecraft/class_1792; field_8279 APPLE - f Lnet/minecraft/class_1792; field_8359 RED_SANDSTONE_WALL - f Lnet/minecraft/class_1792; field_8646 ACACIA_FENCE - f Lnet/minecraft/class_1792; field_8075 MUSIC_DISC_CAT - f Lnet/minecraft/class_1792; field_8310 COBBLESTONE_STAIRS - f Lnet/minecraft/class_1792; field_19058 RED_WOOL - f Lnet/minecraft/class_1792; field_8872 SMOOTH_SANDSTONE_SLAB - f Lnet/minecraft/class_1792; field_8127 PINK_CONCRETE - f Lnet/minecraft/class_1792; field_23255 STRIDER_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8464 BROWN_BED - f Lnet/minecraft/class_1792; field_8191 BIRCH_PLANKS - f Lnet/minecraft/class_1792; field_8676 RED_SHULKER_BOX - f Lnet/minecraft/class_1792; field_8797 COAL_BLOCK - f Lnet/minecraft/class_1792; field_8848 POWERED_RAIL - f Lnet/minecraft/class_1792; field_8851 LIGHT_GRAY_DYE - f Lnet/minecraft/class_1792; field_8370 LEATHER_BOOTS - f Lnet/minecraft/class_1792; field_8467 BROWN_TERRACOTTA - f Lnet/minecraft/class_1792; field_20398 NETHER_BRICKS - f Lnet/minecraft/class_1792; field_20395 STONE_BRICKS - f Lnet/minecraft/class_1792; field_8459 DARK_PRISMARINE_SLAB - f Lnet/minecraft/class_1792; field_8773 IRON_BLOCK - f Lnet/minecraft/class_1792; field_8219 STRIPPED_DARK_OAK_WOOD - f Lnet/minecraft/class_1792; field_22421 CRYING_OBSIDIAN - f Lnet/minecraft/class_1792; field_8475 IRON_AXE - f Lnet/minecraft/class_1792; field_8351 DEAD_TUBE_CORAL_FAN - f Lnet/minecraft/class_1792; field_8245 RABBIT_HIDE - f Lnet/minecraft/class_1792; field_8760 HUSK_SPAWN_EGG - f Lnet/minecraft/class_1792; field_8237 DEAD_BRAIN_CORAL_BLOCK - f Lnet/minecraft/class_1792; field_8822 CHISELED_RED_SANDSTONE - f Lnet/minecraft/class_1792; field_8638 CAULDRON - f Lnet/minecraft/class_1792; field_8407 PAPER - f Lnet/minecraft/class_1792; field_8415 STRIPPED_OAK_LOG - f Lnet/minecraft/class_1792; field_8736 WHITE_STAINED_GLASS_PANE - f Lnet/minecraft/class_1792; field_8427 DAMAGED_ANVIL -c net/minecraft/class_1803 net/minecraft/item/LingeringPotionItem -c net/minecraft/class_1804 net/minecraft/item/LeadItem - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1269; method_7994 bindPlayerMobs -c net/minecraft/class_1805 net/minecraft/item/MilkBucketItem -c net/minecraft/class_1806 net/minecraft/item/FilledMapItem - m (Lnet/minecraft/class_1799;)I method_8003 getMapId - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;Lnet/minecraft/class_22;)V method_7998 updateMapData - m (I)Ljava/lang/String; method_17440 getMapName - m (Lnet/minecraft/class_1937;IIBZZ)Lnet/minecraft/class_1799; method_8005 setupNewMap - m ([Lnet/minecraft/class_1959;III)Z method_8004 func_195954_a - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_7995 func_211698_a - m (Lnet/minecraft/class_1799;)I method_7999 getColor - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;I)V method_7996 scaleMap - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;IIIZZLnet/minecraft/class_5321;)Lnet/minecraft/class_22; method_8000 createMapData - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;)Lnet/minecraft/class_22; method_7997 getData - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1799;)V method_17442 func_219992_b - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1937;)Lnet/minecraft/class_22; method_8001 getMapData - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1799;)V method_8002 func_226642_a_ -c net/minecraft/class_1807 net/minecraft/item/NameTagItem -c net/minecraft/class_1808 net/minecraft/item/MinecartItem - m (Lnet/minecraft/class_1808;)Lnet/minecraft/class_1688$class_1689; method_8006 access$000 - f Lnet/minecraft/class_1688$class_1689; field_8897 minecartType - f Lnet/minecraft/class_2357; field_8896 MINECART_DISPENSER_BEHAVIOR -c net/minecraft/class_1808$1 net/minecraft/item/MinecartItem$1 - f Lnet/minecraft/class_2347; field_8898 behaviourDefaultDispenseItem -c net/minecraft/class_1809 net/minecraft/item/SkullItem -c net/minecraft/class_1810 net/minecraft/item/PickaxeItem - f Ljava/util/Set; field_8899 EFFECTIVE_ON -c net/minecraft/class_1811 net/minecraft/item/ShootableItem - m (Lnet/minecraft/class_1799;)Z method_18816 func_220003_e - m ()I method_24792 func_230305_d_ - m (Lnet/minecraft/class_1309;Ljava/util/function/Predicate;)Lnet/minecraft/class_1799; method_18815 getHeldAmmo - m ()Ljava/util/function/Predicate; method_20310 getAmmoPredicate - m (Lnet/minecraft/class_1799;)Z method_18817 func_220002_j - m ()Ljava/util/function/Predicate; method_19268 getInventoryAmmoPredicate - f Ljava/util/function/Predicate; field_18282 ARROWS_OR_FIREWORKS - f Ljava/util/function/Predicate; field_18281 ARROWS -c net/minecraft/class_1812 net/minecraft/item/PotionItem -c net/minecraft/class_1813 net/minecraft/item/MusicDiscItem - m ()Lnet/minecraft/class_3414; method_8009 getSound - m ()Lnet/minecraft/class_5250; method_8011 getDescription - m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_1813; method_8012 getBySound - m ()I method_8010 getComparatorValue - f I field_8902 comparatorValue - f Lnet/minecraft/class_3414; field_8900 sound - f Ljava/util/Map; field_8901 RECORDS -c net/minecraft/class_1814 net/minecraft/item/Rarity - m (Ljava/lang/String;)Lnet/minecraft/class_1814; valueOf valueOf - m ()[Lnet/minecraft/class_1814; values values - f [Lnet/minecraft/class_1814; field_8905 $VALUES - f Lnet/minecraft/class_1814; field_8906 COMMON - f Lnet/minecraft/class_1814; field_8903 RARE - f Lnet/minecraft/class_1814; field_8907 UNCOMMON - f Lnet/minecraft/class_1814; field_8904 EPIC - f Lnet/minecraft/class_124; field_8908 color -c net/minecraft/class_3734 net/minecraft/item/ScaffoldingItem -c net/minecraft/class_1816 net/minecraft/item/SaddleItem -c net/minecraft/class_1820 net/minecraft/item/ShearsItem - m (Lnet/minecraft/class_1309;)V method_20280 func_220036_a -c net/minecraft/class_1817 net/minecraft/util/ServerCooldownTracker - f Lnet/minecraft/class_3222; field_8910 player -c net/minecraft/class_1821 net/minecraft/item/ShovelItem - m (Lnet/minecraft/class_1838;Lnet/minecraft/class_1657;)V method_20281 func_220041_a - f Ljava/util/Map; field_8912 SHOVEL_LOOKUP - f Ljava/util/Set; field_8913 EFFECTIVE_ON -c net/minecraft/class_1819 net/minecraft/item/ShieldItem - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1767; method_8013 getColor -c net/minecraft/class_1824 net/minecraft/item/SimpleFoiledItem -c net/minecraft/class_1822 net/minecraft/item/SignItem -c net/minecraft/class_1826 net/minecraft/item/SpawnEggItem - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1308;Lnet/minecraft/class_1299;Lnet/minecraft/class_3218;Lnet/minecraft/class_243;Lnet/minecraft/class_1799;)Ljava/util/Optional; method_24793 getChildToSpawn - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1299;)Z method_8018 hasType - m (I)I method_8016 getColor - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1299; method_8015 getType - m ()Ljava/lang/Iterable; method_8017 getEggs - m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_1826; method_8019 getEgg - f Ljava/util/Map; field_8914 EGGS - f Lnet/minecraft/class_1299; field_8917 typeIn - f I field_8915 secondaryColor - f I field_8916 primaryColor -c net/minecraft/class_1823 net/minecraft/item/SnowballItem -c net/minecraft/class_1828 net/minecraft/item/SplashPotionItem -c net/minecraft/class_1825 net/minecraft/item/SpectralArrowItem -c net/minecraft/class_1827 net/minecraft/item/WallOrFloorItem - f Lnet/minecraft/class_2248; field_8918 wallBlock -c net/minecraft/class_1829 net/minecraft/item/SwordItem - m (Lnet/minecraft/class_1309;)V method_20282 func_220044_a - m (Lnet/minecraft/class_1309;)V method_20283 func_220045_b - m ()F method_8020 getAttackDamage - f F field_8920 attackDamage - f Lcom/google/common/collect/Multimap; field_23745 attributeModifiers -c net/minecraft/class_1830 net/minecraft/item/SuspiciousStewItem - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1291;I)V method_8021 addEffect -c net/minecraft/class_1832 net/minecraft/item/IItemTier - m ()I method_8024 getHarvestLevel - m ()Lnet/minecraft/class_1856; method_8023 getRepairMaterial - m ()I method_8026 getEnchantability - m ()F method_8027 getEfficiency - m ()I method_8025 getMaxUses - m ()F method_8028 getAttackDamage -c net/minecraft/class_4537 net/minecraft/item/ThrowablePotionItem -c net/minecraft/class_1834 net/minecraft/item/ItemTier - m ()Lnet/minecraft/class_1856; method_8031 func_200933_j - m ()Lnet/minecraft/class_1856; method_8029 func_200934_k - m ()Lnet/minecraft/class_1856; method_8030 func_200932_i - m (Ljava/lang/String;)Lnet/minecraft/class_1834; valueOf valueOf - m ()[Lnet/minecraft/class_1834; values values - m ()Lnet/minecraft/class_1856; method_8032 func_200931_h - m ()Lnet/minecraft/class_1856; method_24361 func_234811_g_ - m ()Lnet/minecraft/class_1856; method_8033 func_200930_g - f Lnet/minecraft/class_1834; field_8930 DIAMOND - f I field_8925 harvestLevel - f Lnet/minecraft/class_1834; field_8927 STONE - f Lnet/minecraft/class_1834; field_8923 IRON - f F field_8932 efficiency - f I field_8924 maxUses - f [Lnet/minecraft/class_1834; field_8926 $VALUES - f Lnet/minecraft/class_1834; field_22033 NETHERITE - f Lnet/minecraft/class_1834; field_8929 GOLD - f I field_8933 enchantability - f Lnet/minecraft/class_1834; field_8922 WOOD - f F field_8931 attackDamage - f Lnet/minecraft/class_3528; field_8928 repairMaterial -c net/minecraft/class_1831 net/minecraft/item/TieredItem - m ()Lnet/minecraft/class_1832; method_8022 getTier - f Lnet/minecraft/class_1832; field_8921 tier -c net/minecraft/class_1836 net/minecraft/client/util/ITooltipFlag - m ()Z method_8035 isAdvanced -c net/minecraft/class_1836$class_1837 net/minecraft/client/util/ITooltipFlag$TooltipFlags - m ()[Lnet/minecraft/class_1836$class_1837; values values - m (Ljava/lang/String;)Lnet/minecraft/class_1836$class_1837; valueOf valueOf - f Z field_8936 isAdvanced - f [Lnet/minecraft/class_1836$class_1837; field_8937 $VALUES - f Lnet/minecraft/class_1836$class_1837; field_8935 ADVANCED - f Lnet/minecraft/class_1836$class_1837; field_8934 NORMAL -c net/minecraft/class_1833 net/minecraft/item/TippedArrowItem -c net/minecraft/class_1839 net/minecraft/item/UseAction - m ()[Lnet/minecraft/class_1839; values values - m (Ljava/lang/String;)Lnet/minecraft/class_1839; valueOf valueOf - f Lnet/minecraft/class_1839; field_8949 BLOCK - f Lnet/minecraft/class_1839; field_8950 EAT - f Lnet/minecraft/class_1839; field_8946 DRINK - f Lnet/minecraft/class_1839; field_8952 NONE - f [Lnet/minecraft/class_1839; field_8948 $VALUES - f Lnet/minecraft/class_1839; field_8951 SPEAR - f Lnet/minecraft/class_1839; field_8947 CROSSBOW - f Lnet/minecraft/class_1839; field_8953 BOW -c net/minecraft/class_1835 net/minecraft/item/TridentItem - m (Lnet/minecraft/class_1309;)V method_20286 func_220048_b_ - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1657;)V method_20285 func_220047_a_ - m (Lnet/minecraft/class_1309;)V method_20284 func_220046_a_ - f Lcom/google/common/collect/Multimap; field_23746 tridentAttributes -c net/minecraft/class_1841 net/minecraft/item/LilyPadItem -c net/minecraft/class_5150 net/minecraft/enchantment/IVanishable -c net/minecraft/class_1840 net/minecraft/item/WritableBookItem - m (Lnet/minecraft/class_2487;)Z method_8047 isNBTValid -c net/minecraft/class_5151 net/minecraft/enchantment/IArmorVanishable -c net/minecraft/class_1842 net/minecraft/potion/Potion - m (Ljava/lang/String;)Lnet/minecraft/class_1842; method_8048 getPotionTypeForName - m ()Ljava/util/List; method_8049 getEffects - m ()Z method_8050 hasInstantEffect - m (Ljava/lang/String;)Ljava/lang/String; method_8051 getNamePrefixed - f Lcom/google/common/collect/ImmutableList; field_8955 effects - f Ljava/lang/String; field_8954 baseName -c net/minecraft/class_1843 net/minecraft/item/WrittenBookItem - m (Lnet/minecraft/class_1799;)I method_17443 getPageCount - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_2168;Lnet/minecraft/class_1657;)Z method_8054 resolveContents - m (Lnet/minecraft/class_1799;)I method_8052 getGeneration - m (Lnet/minecraft/class_2487;)Z method_8053 validBookTagContents -c net/minecraft/class_1844 net/minecraft/potion/PotionUtils - m (Lnet/minecraft/class_1799;Ljava/util/Collection;)Lnet/minecraft/class_1799; method_8056 appendEffects - m (Lnet/minecraft/class_1799;Ljava/util/List;F)V method_8065 addPotionTooltip - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_1842; method_8057 getPotionTypeFromNBT - m (Lnet/minecraft/class_1842;Ljava/util/Collection;)Ljava/util/List; method_8059 mergeEffects - m (Lnet/minecraft/class_1799;)Ljava/util/List; method_8067 getEffectsFromStack - m (Lnet/minecraft/class_1799;)Ljava/util/List; method_8068 getFullEffectsFromItem - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1842;)Lnet/minecraft/class_1799; method_8061 addPotionToItemStack - m (Lnet/minecraft/class_1799;)I method_8064 getColor - m (Lnet/minecraft/class_2487;Ljava/util/List;)V method_8058 addCustomPotionEffectToList - m (Lnet/minecraft/class_2487;)Ljava/util/List; method_8066 getEffectsFromTag - m (Ljava/util/Collection;)I method_8055 getPotionColorFromEffectList - m (Lnet/minecraft/class_2487;)Ljava/util/List; method_8060 getFullEffectsFromTag - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1842; method_8063 getPotionFromItem - m (Lnet/minecraft/class_1842;)I method_8062 getPotionColor - f Lnet/minecraft/class_5250; field_25817 field_242400_a -c net/minecraft/class_1845 net/minecraft/potion/PotionBrewing - m (Lnet/minecraft/class_1799;)Z method_8069 isTypeConversionReagent - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_8072 hasConversions - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_8070 hasItemConversions - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Lnet/minecraft/class_1799; method_8078 doReaction - m (Lnet/minecraft/class_1799;)Z method_8073 func_210319_d - m (Lnet/minecraft/class_1842;Lnet/minecraft/class_1792;Lnet/minecraft/class_1842;)V method_8074 addMix - m (Lnet/minecraft/class_1792;)V method_8080 addContainer - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_8075 hasTypeConversions - m (Lnet/minecraft/class_1799;)Z method_8079 isItemConversionReagent - m (Lnet/minecraft/class_1842;)Z method_20361 isBrewablePotion - m (Lnet/minecraft/class_1799;)Z method_8077 isReagent - m (Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;Lnet/minecraft/class_1792;)V method_8071 addContainerRecipe - m ()V method_8076 init - f Ljava/util/List; field_8957 POTION_ITEMS - f Ljava/util/function/Predicate; field_8958 IS_POTION_ITEM - f Ljava/util/List; field_8959 POTION_ITEM_CONVERSIONS - f Ljava/util/List; field_8956 POTION_TYPE_CONVERSIONS -c net/minecraft/class_1845$class_1846 net/minecraft/potion/PotionBrewing$MixPredicate - m (Lnet/minecraft/class_1845$class_1846;)Ljava/lang/Object; method_8083 func_210317_b - m (Lnet/minecraft/class_1845$class_1846;)Ljava/lang/Object; method_8082 access$200 - m (Lnet/minecraft/class_1845$class_1846;)Lnet/minecraft/class_1856; method_8081 func_210318_a - f Lnet/minecraft/class_1856; field_8960 reagent - f Ljava/lang/Object; field_8962 input - f Ljava/lang/Object; field_8961 output -c net/minecraft/class_1847 net/minecraft/potion/Potions - m (Ljava/lang/String;Lnet/minecraft/class_1842;)Lnet/minecraft/class_1842; method_8084 register - f Lnet/minecraft/class_1842; field_8971 LONG_LEAPING - f Lnet/minecraft/class_1842; field_8979 LEAPING - f Lnet/minecraft/class_1842; field_9000 LONG_INVISIBILITY - f Lnet/minecraft/class_1842; field_8973 STRONG_HARMING - f Lnet/minecraft/class_1842; field_8969 LONG_FIRE_RESISTANCE - f Lnet/minecraft/class_1842; field_8987 FIRE_RESISTANCE - f Lnet/minecraft/class_1842; field_9004 HARMING - f Lnet/minecraft/class_1842; field_8980 STRONG_HEALING - f Lnet/minecraft/class_1842; field_8998 STRONG_LEAPING - f Lnet/minecraft/class_1842; field_8972 STRONG_POISON - f Lnet/minecraft/class_1842; field_9002 LONG_POISON - f Lnet/minecraft/class_1842; field_8983 LONG_SWIFTNESS - f Lnet/minecraft/class_1842; field_9005 SWIFTNESS - f Lnet/minecraft/class_1842; field_8982 POISON - f Lnet/minecraft/class_1842; field_8989 LONG_SLOWNESS - f Lnet/minecraft/class_1842; field_9003 LONG_REGENERATION - f Lnet/minecraft/class_1842; field_8986 REGENERATION - f Lnet/minecraft/class_1842; field_8996 SLOWNESS - f Lnet/minecraft/class_1842; field_8966 STRONG_SWIFTNESS - f Lnet/minecraft/class_1842; field_8965 LONG_STRENGTH - f Lnet/minecraft/class_1842; field_8988 LONG_TURTLE_MASTER - f Lnet/minecraft/class_1842; field_8990 TURTLE_MASTER - f Lnet/minecraft/class_1842; field_8978 STRENGTH - f Lnet/minecraft/class_1842; field_8992 STRONG_REGENERATION - f Lnet/minecraft/class_1842; field_8976 STRONG_SLOWNESS - f Lnet/minecraft/class_1842; field_8967 MUNDANE - f Lnet/minecraft/class_1842; field_8970 LONG_WEAKNESS - f Lnet/minecraft/class_1842; field_8975 WEAKNESS - f Lnet/minecraft/class_1842; field_8994 WATER_BREATHING - f Lnet/minecraft/class_1842; field_8977 STRONG_TURTLE_MASTER - f Lnet/minecraft/class_1842; field_8991 WATER - f Lnet/minecraft/class_1842; field_8984 EMPTY - f Lnet/minecraft/class_1842; field_8993 STRONG_STRENGTH - f Lnet/minecraft/class_1842; field_8968 NIGHT_VISION - f Lnet/minecraft/class_1842; field_8999 AWKWARD - f Lnet/minecraft/class_1842; field_8974 SLOW_FALLING - f Lnet/minecraft/class_1842; field_8995 LUCK - f Lnet/minecraft/class_1842; field_8963 HEALING - f Lnet/minecraft/class_1842; field_9001 LONG_WATER_BREATHING - f Lnet/minecraft/class_1842; field_8985 THICK - f Lnet/minecraft/class_1842; field_8997 INVISIBILITY - f Lnet/minecraft/class_1842; field_8981 LONG_NIGHT_VISION - f Lnet/minecraft/class_1842; field_8964 LONG_SLOW_FALLING -c net/minecraft/class_2968 net/minecraft/item/DirectionalPlaceContext - f Lnet/minecraft/class_2350; field_13362 lookDirection -c net/minecraft/class_2968$1 net/minecraft/item/DirectionalPlaceContext$1 - f [I field_13363 field_221538_a -c net/minecraft/class_1750 net/minecraft/item/BlockItemUseContext - m ()[Lnet/minecraft/class_2350; method_7718 getNearestLookingDirections - m (Lnet/minecraft/class_1750;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Lnet/minecraft/class_1750; method_16355 func_221536_a - m ()Z method_7716 canPlace - m ()Lnet/minecraft/class_2350; method_7715 getNearestLookingDirection - m ()Z method_7717 replacingClickedOnBlock - f Lnet/minecraft/class_2338; field_7903 offsetPos - f Z field_7904 replaceClicked -c net/minecraft/class_1838 net/minecraft/item/ItemUseContext - m ()Lnet/minecraft/class_1268; method_20287 getHand - m ()Lnet/minecraft/class_1937; method_8045 getWorld - m ()Lnet/minecraft/class_243; method_17698 getHitVec - m ()Lnet/minecraft/class_2350; method_8038 getFace - m ()Lnet/minecraft/class_3965; method_30344 func_242401_i - m ()Z method_8046 hasSecondaryUseForPlayer - m ()Lnet/minecraft/class_1657; method_8036 getPlayer - m ()Lnet/minecraft/class_1799; method_8041 getItem - m ()Lnet/minecraft/class_2350; method_8042 getPlacementHorizontalFacing - m ()Z method_17699 isInside - m ()F method_8044 getPlacementYaw - m ()Lnet/minecraft/class_2338; method_8037 getPos - f Lnet/minecraft/class_1657; field_8942 player - f Lnet/minecraft/class_1799; field_8941 item - f Lnet/minecraft/class_3965; field_17543 rayTraceResult - f Lnet/minecraft/class_1937; field_8945 world - f Lnet/minecraft/class_1268; field_19176 hand -c net/minecraft/class_1874 net/minecraft/item/crafting/AbstractCookingRecipe - m ()I method_8167 getCookTime - m ()F method_8171 getExperience - f Lnet/minecraft/class_2960; field_9060 id - f Lnet/minecraft/class_1799; field_9059 result - f F field_9057 experience - f Lnet/minecraft/class_1856; field_9061 ingredient - f Ljava/lang/String; field_9062 group - f Lnet/minecraft/class_3956; field_17544 type - f I field_9058 cookTime -c net/minecraft/class_1848 net/minecraft/item/crafting/BannerDuplicateRecipe - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17703 matches - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17702 getCraftingResult - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_2371; method_17704 getRemainingItems -c net/minecraft/class_1849 net/minecraft/item/crafting/ArmorDyeRecipe - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17700 getCraftingResult - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17701 matches -c net/minecraft/class_1850 net/minecraft/item/crafting/BookCloningRecipe - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17706 matches - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_2371; method_17707 getRemainingItems - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17705 getCraftingResult -c net/minecraft/class_3859 net/minecraft/item/crafting/BlastingRecipe -c net/minecraft/class_3955 net/minecraft/item/crafting/ICraftingRecipe -c net/minecraft/class_3920 net/minecraft/item/crafting/CampfireCookingRecipe -c net/minecraft/class_1851 net/minecraft/item/crafting/FireworkRocketRecipe - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17708 getCraftingResult - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17709 matches - f Lnet/minecraft/class_1856; field_9008 INGREDIENT_FIREWORK_STAR - f Lnet/minecraft/class_1856; field_9006 INGREDIENT_GUNPOWDER - f Lnet/minecraft/class_1856; field_9007 INGREDIENT_PAPER -c net/minecraft/class_1852 net/minecraft/item/crafting/SpecialRecipe - f Lnet/minecraft/class_2960; field_9009 id -c net/minecraft/class_1853 net/minecraft/item/crafting/FireworkStarRecipe - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17712 getCraftingResult - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17713 matches - m (Ljava/util/HashMap;)V method_8085 func_209352_a - f Ljava/util/Map; field_9013 ITEM_SHAPE_MAP - f Lnet/minecraft/class_1856; field_9014 INGREDIENT_TRAIL - f Lnet/minecraft/class_1856; field_9010 INGREDIENT_FLICKER - f Lnet/minecraft/class_1856; field_9011 INGREDIENT_SHAPE - f Lnet/minecraft/class_1856; field_9012 INGREDIENT_GUNPOWDER -c net/minecraft/class_1854 net/minecraft/item/crafting/FireworkStarFadeRecipe - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17711 matches - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17710 getCraftingResult - f Lnet/minecraft/class_1856; field_9015 INGREDIENT_FIREWORK_STAR -c net/minecraft/class_1855 net/minecraft/item/crafting/MapCloningRecipe - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17715 matches - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17714 getCraftingResult -c net/minecraft/class_1856 net/minecraft/item/crafting/Ingredient - m ()Lit/unimi/dsi/fastutil/ints/IntList; method_8100 getValidItemStacksPacked - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_1856; method_8086 read - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_1856$class_1857; method_8094 func_209356_b_ - m (I)[Lnet/minecraft/class_1856$class_1859; method_8087 func_209360_b_ - m (Lnet/minecraft/class_1799;)Z method_26965 func_234824_c_ - m ([Lnet/minecraft/class_1799;)Lnet/minecraft/class_1856; method_8101 fromStacks - m ([Lnet/minecraft/class_1935;)Lnet/minecraft/class_1856; method_8091 fromItems - m (Lnet/minecraft/class_1799;)Z method_8093 test - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_1856; method_8102 deserialize - m (Lnet/minecraft/class_3494;)Lnet/minecraft/class_1856; method_8106 fromTag - m (Ljava/lang/Object;)Z test test - m (Lnet/minecraft/class_1856$class_1859;)Ljava/util/stream/Stream; method_8104 func_209359_a_ - m ()[Lnet/minecraft/class_1799; method_8105 getMatchingStacks - m (Ljava/util/stream/Stream;)Lnet/minecraft/class_1856; method_26964 fromStacks - m (Lnet/minecraft/class_2540;)V method_8088 write - m (Ljava/util/stream/Stream;)Lnet/minecraft/class_1856; method_8092 fromItemListStream - m ()Lcom/google/gson/JsonElement; method_8089 serialize - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_1856$class_1857; method_8095 func_234825_c_ - m ()Z method_8103 hasNoMatchingItems - m ()V method_8096 determineMatchingStacks - m (Lnet/minecraft/class_2960;)Lcom/google/gson/JsonSyntaxException; method_17873 func_234820_a_ - m (Lcom/google/gson/JsonElement;)Lnet/minecraft/class_1856$class_1859; method_8090 func_209355_b_ - m (I)[Lnet/minecraft/class_1799; method_8097 func_209358_a_ - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1856$class_1859; method_8107 deserializeItemList - f [Lnet/minecraft/class_1856$class_1859; field_9019 acceptedItems - f Lit/unimi/dsi/fastutil/ints/IntList; field_9016 matchingStacksPacked - f Lnet/minecraft/class_1856; field_9017 EMPTY - f [Lnet/minecraft/class_1799; field_9018 matchingStacks -c net/minecraft/class_1856$1 net/minecraft/item/crafting/Ingredient$1 -c net/minecraft/class_1856$class_1857 net/minecraft/item/crafting/Ingredient$SingleItemList - f Lnet/minecraft/class_1799; field_9021 stack -c net/minecraft/class_1856$class_1859 net/minecraft/item/crafting/Ingredient$IItemList - m ()Lcom/google/gson/JsonObject; method_8109 serialize - m ()Ljava/util/Collection; method_8108 getStacks -c net/minecraft/class_1856$class_1858 net/minecraft/item/crafting/Ingredient$TagList - f Lnet/minecraft/class_3494; field_9022 tag -c net/minecraft/class_1860 net/minecraft/item/crafting/IRecipe - m ()Lnet/minecraft/class_3956; method_17716 getType - m ()Ljava/lang/String; method_8112 getGroup - m ()Lnet/minecraft/class_2371; method_8117 getIngredients - m ()Lnet/minecraft/class_2960; method_8114 getId - m (Lnet/minecraft/class_1263;Lnet/minecraft/class_1937;)Z method_8115 matches - m (II)Z method_8113 canFit - m ()Lnet/minecraft/class_1865; method_8119 getSerializer - m ()Z method_8118 isDynamic - m ()Lnet/minecraft/class_1799; method_17447 getIcon - m ()Lnet/minecraft/class_1799; method_8110 getRecipeOutput - m (Lnet/minecraft/class_1263;)Lnet/minecraft/class_1799; method_8116 getCraftingResult - m (Lnet/minecraft/class_1263;)Lnet/minecraft/class_2371; method_8111 getRemainingItems -c net/minecraft/class_1861 net/minecraft/item/crafting/MapExtendingRecipe - m (Lnet/minecraft/class_22;)Z method_8120 isExplorationMap -c net/minecraft/class_1865 net/minecraft/item/crafting/IRecipeSerializer - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_1860; method_8122 read - m (Ljava/lang/String;Lnet/minecraft/class_1865;)Lnet/minecraft/class_1865; method_17724 register - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_1860;)V method_8124 write - m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1860; method_8121 read - f Lnet/minecraft/class_3957; field_17085 SMOKING - f Lnet/minecraft/class_1866; field_9036 CRAFTING_SPECIAL_FIREWORK_STAR - f Lnet/minecraft/class_3957; field_17347 CAMPFIRE_COOKING - f Lnet/minecraft/class_1866; field_9034 CRAFTING_SPECIAL_FIREWORK_STAR_FADE - f Lnet/minecraft/class_1865; field_9031 CRAFTING_SHAPELESS - f Lnet/minecraft/class_1866; field_9044 CRAFTING_SPECIAL_MAPCLONING - f Lnet/minecraft/class_3957; field_9042 SMELTING - f Lnet/minecraft/class_1866; field_9039 CRAFTING_SPECIAL_MAPEXTENDING - f Lnet/minecraft/class_3957; field_17084 BLASTING - f Lnet/minecraft/class_1866; field_9043 CRAFTING_SPECIAL_FIREWORK_ROCKET - f Lnet/minecraft/class_1865; field_25387 SMITHING - f Lnet/minecraft/class_1866; field_9041 CRAFTING_SPECIAL_SHULKERBOXCOLORING - f Lnet/minecraft/class_1866; field_9028 CRAFTING_SPECIAL_ARMORDYE - f Lnet/minecraft/class_1866; field_9030 CRAFTING_SPECIAL_SUSPICIOUSSTEW - f Lnet/minecraft/class_1865; field_9035 CRAFTING_SHAPED - f Lnet/minecraft/class_1866; field_9029 CRAFTING_SPECIAL_BOOKCLONING - f Lnet/minecraft/class_1866; field_19421 CRAFTING_SPECIAL_REPAIRITEM - f Lnet/minecraft/class_1866; field_9037 CRAFTING_SPECIAL_TIPPEDARROW - f Lnet/minecraft/class_1866; field_9038 CRAFTING_SPECIAL_BANNERDUPLICATE - f Lnet/minecraft/class_1865; field_17640 STONECUTTING - f Lnet/minecraft/class_1866; field_9040 CRAFTING_SPECIAL_SHIELD -c net/minecraft/class_1863 net/minecraft/item/crafting/RecipeManager - m (Ljava/lang/String;)Lcom/google/gson/JsonSyntaxException; method_17875 func_241449_a_ - m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1860; method_17720 deserializeRecipe - m (Lnet/minecraft/class_3956;)Lcom/google/common/collect/ImmutableMap$Builder; method_20707 func_223391_c - m (Ljava/util/Map;Lnet/minecraft/class_1860;)V method_20704 func_223392_a_ - m (Lnet/minecraft/class_2960;)Ljava/util/Optional; method_8130 getRecipe - m ()Ljava/util/stream/Stream; method_8127 getKeys - m (Ljava/lang/Iterable;)V method_20702 deserializeRecipes - m (Ljava/util/Map$Entry;)Ljava/util/Map; method_20703 func_223400_a - m (Lnet/minecraft/class_3956;Lnet/minecraft/class_1263;Lnet/minecraft/class_1937;)Ljava/util/List; method_17877 getRecipes - m (Ljava/util/Map;)Ljava/util/stream/Stream; method_17723 func_215376_b_ - m (Lnet/minecraft/class_3956;Lnet/minecraft/class_1937;Lnet/minecraft/class_1263;Lnet/minecraft/class_1860;)Ljava/util/stream/Stream; method_17718 func_215372_b - m (Lnet/minecraft/class_2960;Ljava/util/Map;)Lnet/minecraft/class_1860; method_17721 func_215368_a_ - m (Lnet/minecraft/class_3956;)Ljava/util/List; method_30027 getRecipesForType - m (Lnet/minecraft/class_3956;)Ljava/util/Map; method_20706 func_223390_c_ - m (Ljava/util/Map;Lnet/minecraft/class_3300;Lnet/minecraft/class_3695;)V method_20705 apply - m (Lnet/minecraft/class_3956;Lnet/minecraft/class_1937;Lnet/minecraft/class_1263;Lnet/minecraft/class_1860;)Ljava/util/stream/Stream; method_17874 func_215380_a_ - m (Lnet/minecraft/class_3956;Lnet/minecraft/class_1263;Lnet/minecraft/class_1937;)Ljava/util/Optional; method_8132 getRecipe - m ()Ljava/util/Collection; method_8126 getRecipes - m (Lnet/minecraft/class_1860;)Ljava/lang/String; method_17876 func_215379_a_ - m (Lnet/minecraft/class_3956;Lnet/minecraft/class_1263;Lnet/minecraft/class_1937;)Lnet/minecraft/class_2371; method_8128 getRecipeNonNull - m (Lnet/minecraft/class_3956;)Ljava/util/Map; method_17717 getRecipes - m (Lnet/minecraft/class_1860;)Lnet/minecraft/class_1860; method_30028 func_241453_b_ - m (Ljava/util/Map;)Ljava/util/stream/Stream; method_17722 func_215375_a_ - f Z field_9024 someRecipesErrored - f Lorg/apache/logging/log4j/Logger; field_9027 LOGGER - f Ljava/util/Map; field_9023 recipes - f Lcom/google/gson/Gson; field_19359 GSON -c net/minecraft/class_4317 net/minecraft/item/crafting/RepairItemRecipe - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_20808 matches - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_20807 getCraftingResult - m (Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Lnet/minecraft/class_1887;)V method_24364 func_234828_a_ -c net/minecraft/class_3956 net/minecraft/item/crafting/IRecipeType - m (Lnet/minecraft/class_1860;Lnet/minecraft/class_1937;Lnet/minecraft/class_1263;)Ljava/util/Optional; method_17725 matches - m (Ljava/lang/String;)Lnet/minecraft/class_3956; method_17726 register - f Lnet/minecraft/class_3956; field_17546 SMELTING - f Lnet/minecraft/class_3956; field_17547 BLASTING - f Lnet/minecraft/class_3956; field_17548 SMOKING - f Lnet/minecraft/class_3956; field_17549 CAMPFIRE_COOKING - f Lnet/minecraft/class_3956; field_17641 STONECUTTING - f Lnet/minecraft/class_3956; field_17545 CRAFTING - f Lnet/minecraft/class_3956; field_25388 SMITHING -c net/minecraft/class_3956$1 net/minecraft/item/crafting/IRecipeType$1 - m ()Ljava/lang/String; toString toString - f Ljava/lang/String; field_17550 field_222155_g -c net/minecraft/class_1867 net/minecraft/item/crafting/ShapelessRecipe - m (Lnet/minecraft/class_1867;)Ljava/lang/String; method_8139 access$000 - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17730 matches - m (Lnet/minecraft/class_1867;)Lnet/minecraft/class_2371; method_8140 access$100 - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17729 getCraftingResult - m (Lnet/minecraft/class_1867;)Lnet/minecraft/class_1799; method_8138 access$200 - f Lnet/minecraft/class_1799; field_9050 recipeOutput - f Lnet/minecraft/class_2960; field_9048 id - f Lnet/minecraft/class_2371; field_9047 recipeItems - f Ljava/lang/String; field_9049 group -c net/minecraft/class_1867$class_1868 net/minecraft/item/crafting/ShapelessRecipe$Serializer - m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1867; method_8142 read - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_1867; method_8141 read - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_1867;)V method_8143 write - m (Lcom/google/gson/JsonArray;)Lnet/minecraft/class_2371; method_8144 readIngredients -c net/minecraft/class_1869 net/minecraft/item/crafting/ShapedRecipe - m (Lnet/minecraft/class_1715;IIZ)Z method_8161 checkMatch - m ()I method_8150 getWidth - m ([Ljava/lang/String;Ljava/util/Map;II)Lnet/minecraft/class_2371; method_8148 deserializeIngredients - m (Lnet/minecraft/class_1869;)Lnet/minecraft/class_1799; method_8154 access$700 - m ()I method_8158 getHeight - m (Lcom/google/gson/JsonArray;)[Ljava/lang/String; method_8162 access$100 - m (Ljava/lang/String;)I method_8151 firstNonSpace - m (Lcom/google/gson/JsonArray;)[Ljava/lang/String; method_8145 patternFromJson - m (Ljava/lang/String;)I method_8153 lastNonSpace - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17727 getCraftingResult - m (Lnet/minecraft/class_1869;)Ljava/lang/String; method_8156 access$500 - m (Lnet/minecraft/class_1869;)Lnet/minecraft/class_2371; method_8147 access$600 - m ([Ljava/lang/String;)[Ljava/lang/String; method_8146 shrink - m (Lcom/google/gson/JsonObject;)Ljava/util/Map; method_8159 access$000 - m (Lcom/google/gson/JsonObject;)Ljava/util/Map; method_8157 deserializeKey - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17728 matches - m (Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1799; method_8155 deserializeItem - m (Ljava/lang/String;)Lcom/google/gson/JsonSyntaxException; method_17878 func_222129_c - m ([Ljava/lang/String;Ljava/util/Map;II)Lnet/minecraft/class_2371; method_8152 access$200 - m (Lnet/minecraft/class_1869;)I method_8160 access$300 - m (Lnet/minecraft/class_1869;)I method_8149 access$400 - f Lnet/minecraft/class_2960; field_9051 id - f I field_9055 recipeWidth - f Lnet/minecraft/class_2371; field_9052 recipeItems - f Ljava/lang/String; field_9056 group - f I field_9054 recipeHeight - f Lnet/minecraft/class_1799; field_9053 recipeOutput -c net/minecraft/class_1869$class_1870 net/minecraft/item/crafting/ShapedRecipe$Serializer - m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1869; method_8164 read - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_1869;)V method_8165 write - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_1869; method_8163 read -c net/minecraft/class_1871 net/minecraft/item/crafting/ShulkerBoxColoringRecipe - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17734 matches - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17733 getCraftingResult -c net/minecraft/class_1872 net/minecraft/item/crafting/ShieldRecipes - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17732 matches - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17731 getCraftingResult -c net/minecraft/class_1866 net/minecraft/item/crafting/SpecialRecipeSerializer - f Ljava/util/function/Function; field_9046 field_222176_t -c net/minecraft/class_3957 net/minecraft/item/crafting/CookingRecipeSerializer - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_1874; method_17737 read - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_1874;)V method_17735 write - m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_1874; method_17736 read - m (Ljava/lang/String;)Ljava/lang/IllegalStateException; method_17879 func_222177_a - f Lnet/minecraft/class_3957$class_3958; field_17552 factory - f I field_17551 cookingTime -c net/minecraft/class_3957$class_3958 net/minecraft/item/crafting/CookingRecipeSerializer$IFactory - m (Lnet/minecraft/class_2960;Ljava/lang/String;Lnet/minecraft/class_1856;Lnet/minecraft/class_1799;FI)Lnet/minecraft/class_1874; create create -c net/minecraft/class_3861 net/minecraft/item/crafting/FurnaceRecipe -c net/minecraft/class_3972 net/minecraft/item/crafting/SingleItemRecipe - f Lnet/minecraft/class_3956; field_17646 type - f Lnet/minecraft/class_1865; field_17647 serializer - f Lnet/minecraft/class_2960; field_17644 id - f Ljava/lang/String; field_17645 group - f Lnet/minecraft/class_1856; field_17642 ingredient - f Lnet/minecraft/class_1799; field_17643 result -c net/minecraft/class_3972$class_3973 net/minecraft/item/crafting/SingleItemRecipe$Serializer - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_3972;)V method_17880 write - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_3972; method_17882 read - m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_3972; method_17881 read - f Lnet/minecraft/class_3972$class_3973$class_3974; field_17648 factory -c net/minecraft/class_3972$class_3973$class_3974 net/minecraft/item/crafting/SingleItemRecipe$Serializer$IRecipeFactory - m (Lnet/minecraft/class_2960;Ljava/lang/String;Lnet/minecraft/class_1856;Lnet/minecraft/class_1799;)Lnet/minecraft/class_3972; create create -c net/minecraft/class_3862 net/minecraft/item/crafting/SmokingRecipe -c net/minecraft/class_1873 net/minecraft/item/crafting/SuspiciousStewRecipe - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17739 matches - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17738 getCraftingResult -c net/minecraft/class_3975 net/minecraft/item/crafting/StonecuttingRecipe -c net/minecraft/class_5357 net/minecraft/item/crafting/SmithingRecipe - m (Lnet/minecraft/class_5357;)Lnet/minecraft/class_1856; method_29541 func_234842_b_ - m (Lnet/minecraft/class_5357;)Lnet/minecraft/class_1856; method_29540 func_234841_a_ - m (Lnet/minecraft/class_1799;)Z method_30029 isValidAdditionItem - m (Lnet/minecraft/class_5357;)Lnet/minecraft/class_1799; method_29542 func_234843_c_ - f Lnet/minecraft/class_2960; field_25392 recipeId - f Lnet/minecraft/class_1856; field_25390 addition - f Lnet/minecraft/class_1799; field_25391 result - f Lnet/minecraft/class_1856; field_25389 base -c net/minecraft/class_5357$class_5358 net/minecraft/item/crafting/SmithingRecipe$Serializer - m (Lnet/minecraft/class_2960;Lcom/google/gson/JsonObject;)Lnet/minecraft/class_5357; method_29544 read - m (Lnet/minecraft/class_2960;Lnet/minecraft/class_2540;)Lnet/minecraft/class_5357; method_29545 read - m (Lnet/minecraft/class_2540;Lnet/minecraft/class_5357;)V method_29543 write -c net/minecraft/class_1876 net/minecraft/item/crafting/TippedArrowRecipe - m (Lnet/minecraft/class_1715;)Lnet/minecraft/class_1799; method_17740 getCraftingResult - m (Lnet/minecraft/class_1715;Lnet/minecraft/class_1937;)Z method_17741 matches -c net/minecraft/class_1878 net/minecraft/enchantment/PowerEnchantment -c net/minecraft/class_1880 net/minecraft/enchantment/InfinityEnchantment -c net/minecraft/class_1877 net/minecraft/enchantment/FlameEnchantment -c net/minecraft/class_1881 net/minecraft/enchantment/PiercingEnchantment -c net/minecraft/class_1879 net/minecraft/enchantment/PunchEnchantment -c net/minecraft/class_1882 net/minecraft/enchantment/DamageEnchantment - f I field_9067 damageType - f [I field_9063 MIN_COST - f [I field_9064 LEVEL_COST_SPAN - f [Ljava/lang/String; field_9065 DAMAGE_NAMES - f [I field_9066 LEVEL_COST -c net/minecraft/class_1883 net/minecraft/enchantment/BindingCurseEnchantment -c net/minecraft/class_1884 net/minecraft/enchantment/EfficiencyEnchantment -c net/minecraft/class_1885 net/minecraft/enchantment/UnbreakingEnchantment - m (Lnet/minecraft/class_1799;ILjava/util/Random;)Z method_8176 negateDamage -c net/minecraft/class_1886 net/minecraft/enchantment/EnchantmentType - m (Lnet/minecraft/class_1792;)Z method_8177 canEnchantItem - m (Ljava/lang/String;)Lnet/minecraft/class_1886; valueOf valueOf - m ()[Lnet/minecraft/class_1886; values values - f Lnet/minecraft/class_1886; field_9080 ARMOR_HEAD - f Lnet/minecraft/class_1886; field_9069 DIGGER - f Lnet/minecraft/class_1886; field_9074 WEAPON - f Lnet/minecraft/class_1886; field_9076 ARMOR_LEGS - f Lnet/minecraft/class_1886; field_9079 ARMOR_FEET - f Lnet/minecraft/class_1886; field_9071 ARMOR_CHEST - f Lnet/minecraft/class_1886; field_9070 BOW - f Lnet/minecraft/class_1886; field_9082 BREAKABLE - f Lnet/minecraft/class_1886; field_9078 WEARABLE - f Lnet/minecraft/class_1886; field_9072 FISHING_ROD - f Lnet/minecraft/class_1886; field_9073 TRIDENT - f Lnet/minecraft/class_1886; field_9081 CROSSBOW - f Lnet/minecraft/class_1886; field_23747 VANISHABLE - f Lnet/minecraft/class_1886; field_9068 ARMOR - f [Lnet/minecraft/class_1886; field_9077 $VALUES -c net/minecraft/class_1886$11 net/minecraft/enchantment/EnchantmentType$6 -c net/minecraft/class_1886$10 net/minecraft/enchantment/EnchantmentType$5 -c net/minecraft/class_1886$13 net/minecraft/enchantment/EnchantmentType$8 -c net/minecraft/class_1886$12 net/minecraft/enchantment/EnchantmentType$7 -c net/minecraft/class_1886$14 net/minecraft/enchantment/EnchantmentType$9 -c net/minecraft/class_1886$9 net/minecraft/enchantment/EnchantmentType$4 -c net/minecraft/class_1886$2 net/minecraft/enchantment/EnchantmentType$10 -c net/minecraft/class_1886$1 net/minecraft/enchantment/EnchantmentType$1 -c net/minecraft/class_1886$4 net/minecraft/enchantment/EnchantmentType$12 -c net/minecraft/class_1886$3 net/minecraft/enchantment/EnchantmentType$11 -c net/minecraft/class_1886$6 net/minecraft/enchantment/EnchantmentType$14 -c net/minecraft/class_1886$5 net/minecraft/enchantment/EnchantmentType$13 -c net/minecraft/class_1886$8 net/minecraft/enchantment/EnchantmentType$3 -c net/minecraft/class_1886$7 net/minecraft/enchantment/EnchantmentType$2 -c net/minecraft/class_1887 net/minecraft/enchantment/Enchantment - m ()Z method_25950 canGenerateInLoot - m (ILnet/minecraft/class_1282;)I method_8181 calcModifierDamage - m ()Z method_25949 canVillagerTrade - m (Lnet/minecraft/class_1887;)Z method_8180 canApplyTogether - m (I)I method_20742 getMaxEnchantability - m ()Lnet/minecraft/class_1887$class_1888; method_8186 getRarity - m (Lnet/minecraft/class_1309;)Ljava/util/Map; method_8185 getEntityEquipment - m (I)Lnet/minecraft/class_1887; method_8191 getEnchantmentByID - m (Lnet/minecraft/class_1799;)Z method_8192 canApply - m (I)I method_8182 getMinEnchantability - m (ILnet/minecraft/class_1310;)F method_8196 calcDamageByCreature - m ()I method_8183 getMaxLevel - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;I)V method_8178 onUserHurt - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;I)V method_8189 onEntityDamaged - m ()Ljava/lang/String; method_8184 getName - m ()Z method_8195 isCurse - m (Lnet/minecraft/class_1887;)Z method_8188 isCompatibleWith - m (I)Lnet/minecraft/class_2561; method_8179 getDisplayName - m ()Z method_8193 isTreasureEnchantment - m ()Ljava/lang/String; method_8190 getDefaultTranslationKey - m ()I method_8187 getMinLevel - f Lnet/minecraft/class_1887$class_1888; field_9085 rarity - f Ljava/lang/String; field_9084 name - f [Lnet/minecraft/class_1304; field_9086 applicableEquipmentTypes - f Lnet/minecraft/class_1886; field_9083 type -c net/minecraft/class_1887$class_1888 net/minecraft/enchantment/Enchantment$Rarity - m ()I method_8197 getWeight - m (Ljava/lang/String;)Lnet/minecraft/class_1887$class_1888; valueOf valueOf - m ()[Lnet/minecraft/class_1887$class_1888; values values - f [Lnet/minecraft/class_1887$class_1888; field_9092 $VALUES - f Lnet/minecraft/class_1887$class_1888; field_9087 COMMON - f Lnet/minecraft/class_1887$class_1888; field_9088 RARE - f Lnet/minecraft/class_1887$class_1888; field_9090 UNCOMMON - f Lnet/minecraft/class_1887$class_1888; field_9091 VERY_RARE - f I field_9089 weight -c net/minecraft/class_1889 net/minecraft/enchantment/EnchantmentData - f I field_9094 enchantmentLevel - f Lnet/minecraft/class_1887; field_9093 enchantment -c net/minecraft/class_1890 net/minecraft/enchantment/EnchantmentHelper - m (Ljava/util/Random;Lnet/minecraft/class_1799;IZ)Ljava/util/List; method_8230 buildEnchantmentList - m (Lnet/minecraft/class_2499;)Ljava/util/Map; method_22445 deserializeEnchantments - m (Ljava/util/Random;IILnet/minecraft/class_1799;)I method_8227 calcItemStackEnchantability - m (Ljava/lang/Iterable;Lnet/minecraft/class_1282;)I method_8219 getEnchantmentModifierDamage - m (Lnet/minecraft/class_1309;)Z method_8200 hasAquaAffinity - m (Lnet/minecraft/class_1887;Lnet/minecraft/class_1309;)Ljava/util/Map$Entry; method_8204 getRandomItemWithEnchantment - m (Lnet/minecraft/class_1799;)Z method_24366 func_234845_i_ - m (Ljava/util/Map;Lnet/minecraft/class_2487;Lnet/minecraft/class_1887;)V method_17884 func_226651_a_ - m (Lnet/minecraft/class_1799;)I method_8215 getFishingSpeedBonus - m (Lnet/minecraft/class_1309;)I method_8232 getDepthStriderModifier - m (Ljava/util/List;Lnet/minecraft/class_1889;)V method_8231 removeIncompatible - m (Lnet/minecraft/class_1309;)I method_8234 getEfficiencyModifier - m (Lnet/minecraft/class_1799;)I method_8223 getFishingLuckBonus - m (Lnet/minecraft/class_1309;)I method_8211 getRespirationModifier - m (Lnet/minecraft/class_1890$class_1891;Lnet/minecraft/class_1799;)V method_8220 applyEnchantmentModifier - m (Lnet/minecraft/class_1887;Lnet/minecraft/class_1799;)I method_8225 getEnchantmentLevel - m (Lnet/minecraft/class_1887;Lnet/minecraft/class_1309;Ljava/util/function/Predicate;)Ljava/util/Map$Entry; method_24365 getRandomEquippedWithEnchantment - m (Ljava/util/Collection;Lnet/minecraft/class_1887;)Z method_8201 areAllCompatibleWith - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1310;)F method_8218 getModifierForCreature - m (Lorg/apache/commons/lang3/mutable/MutableInt;Lnet/minecraft/class_1282;Lnet/minecraft/class_1887;I)V method_8212 func_212576_a - m (Lnet/minecraft/class_1309;)I method_8226 getLootingModifier - m (Lnet/minecraft/class_1309;)F method_8217 getSweepingDamageRatio - m (Lnet/minecraft/class_1887;Lnet/minecraft/class_1309;)I method_8203 getMaxEnchantmentLevel - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;)V method_8210 applyThornEnchantments - m (Lnet/minecraft/class_1799;)I method_8202 getRiptideModifier - m (ILnet/minecraft/class_1799;Z)Ljava/util/List; method_8229 getEnchantmentDatas - m (Lnet/minecraft/class_1799;)I method_8206 getLoyaltyModifier - m (Ljava/util/Random;Lnet/minecraft/class_1799;IZ)Lnet/minecraft/class_1799; method_8233 addRandomEnchantment - m (Lnet/minecraft/class_1309;)I method_8199 getFireAspectModifier - m (Lnet/minecraft/class_1799;)Ljava/util/Map; method_8222 getEnchantments - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;)V method_8213 applyArthropodEnchantments - m (Lnet/minecraft/class_1309;)I method_8205 getKnockbackModifier - m (Lnet/minecraft/class_1799;)Z method_8228 hasChanneling - m (Lnet/minecraft/class_1309;)Z method_25951 hasSoulSpeed - m (Lnet/minecraft/class_1890$class_1891;Ljava/lang/Iterable;)V method_8209 applyEnchantmentModifierArray - m (Lnet/minecraft/class_1309;)Z method_8216 hasFrostWalker - m (Lnet/minecraft/class_1890$class_1891;ILnet/minecraft/class_1887;)V method_17883 func_222184_a - m (Lorg/apache/commons/lang3/mutable/MutableFloat;Lnet/minecraft/class_1310;Lnet/minecraft/class_1887;I)V method_8208 func_212573_a - m (Lnet/minecraft/class_1799;)Z method_8221 hasVanishingCurse - m (Ljava/util/Map;Lnet/minecraft/class_1799;)V method_8214 setEnchantments - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;Lnet/minecraft/class_1887;I)V method_8207 func_212574_a - m (Lnet/minecraft/class_1799;)Z method_8224 hasBindingCurse - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1297;Lnet/minecraft/class_1887;I)V method_8198 func_212575_b -c net/minecraft/class_1890$class_1891 net/minecraft/enchantment/EnchantmentHelper$IEnchantmentVisitor - m (Lnet/minecraft/class_1887;I)V accept accept -c net/minecraft/class_1892 net/minecraft/enchantment/FireAspectEnchantment -c net/minecraft/class_1893 net/minecraft/enchantment/Enchantments - m (Ljava/lang/String;Lnet/minecraft/class_1887;)Lnet/minecraft/class_1887; method_8235 register - f Lnet/minecraft/class_1887; field_9105 AQUA_AFFINITY - f Lnet/minecraft/class_1887; field_9127 RESPIRATION - f [Lnet/minecraft/class_1304; field_9102 ARMOR_SLOTS - f Lnet/minecraft/class_1887; field_9097 THORNS - f Lnet/minecraft/class_1887; field_9107 BLAST_PROTECTION - f Lnet/minecraft/class_1887; field_9116 PUNCH - f Lnet/minecraft/class_1887; field_9126 FLAME - f Lnet/minecraft/class_1887; field_9096 PROJECTILE_PROTECTION - f Lnet/minecraft/class_1887; field_23071 SOUL_SPEED - f Lnet/minecraft/class_1887; field_9125 INFINITY - f Lnet/minecraft/class_1887; field_9100 LURE - f Lnet/minecraft/class_1887; field_9114 LUCK_OF_THE_SEA - f Lnet/minecraft/class_1887; field_9118 SHARPNESS - f Lnet/minecraft/class_1887; field_9128 DEPTH_STRIDER - f Lnet/minecraft/class_1887; field_9113 BINDING_CURSE - f Lnet/minecraft/class_1887; field_9122 FROST_WALKER - f Lnet/minecraft/class_1887; field_9117 CHANNELING - f Lnet/minecraft/class_1887; field_9104 RIPTIDE - f Lnet/minecraft/class_1887; field_9124 FIRE_ASPECT - f Lnet/minecraft/class_1887; field_9108 MULTISHOT - f Lnet/minecraft/class_1887; field_9115 SWEEPING - f Lnet/minecraft/class_1887; field_9110 LOOTING - f Lnet/minecraft/class_1887; field_9120 LOYALTY - f Lnet/minecraft/class_1887; field_9112 BANE_OF_ARTHROPODS - f Lnet/minecraft/class_1887; field_9123 SMITE - f Lnet/minecraft/class_1887; field_9121 KNOCKBACK - f Lnet/minecraft/class_1887; field_9106 IMPALING - f Lnet/minecraft/class_1887; field_9109 VANISHING_CURSE - f Lnet/minecraft/class_1887; field_9130 FORTUNE - f Lnet/minecraft/class_1887; field_9119 UNBREAKING - f Lnet/minecraft/class_1887; field_9111 PROTECTION - f Lnet/minecraft/class_1887; field_9103 POWER - f Lnet/minecraft/class_1887; field_9129 FEATHER_FALLING - f Lnet/minecraft/class_1887; field_9095 FIRE_PROTECTION - f Lnet/minecraft/class_1887; field_9131 EFFICIENCY - f Lnet/minecraft/class_1887; field_9098 QUICK_CHARGE - f Lnet/minecraft/class_1887; field_9101 MENDING - f Lnet/minecraft/class_1887; field_9132 PIERCING - f Lnet/minecraft/class_1887; field_9099 SILK_TOUCH -c net/minecraft/class_1894 net/minecraft/enchantment/FrostWalkerEnchantment - m (Lnet/minecraft/class_1309;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;I)V method_8236 freezeNearby -c net/minecraft/class_1895 net/minecraft/enchantment/LureEnchantment -c net/minecraft/class_1896 net/minecraft/enchantment/LootBonusEnchantment -c net/minecraft/class_1897 net/minecraft/enchantment/KnockbackEnchantment -c net/minecraft/class_1899 net/minecraft/enchantment/MendingEnchantment -c net/minecraft/class_1902 net/minecraft/enchantment/RespirationEnchantment -c net/minecraft/class_1898 net/minecraft/enchantment/MultishotEnchantment -c net/minecraft/class_1904 net/minecraft/enchantment/QuickChargeEnchantment -c net/minecraft/class_1900 net/minecraft/enchantment/ProtectionEnchantment - m (Lnet/minecraft/class_1309;I)I method_8238 getFireTimeForEntity - m (Lnet/minecraft/class_1309;D)D method_8237 getBlastDamageReduction - f Lnet/minecraft/class_1900$class_1901; field_9133 protectionType -c net/minecraft/class_1900$class_1901 net/minecraft/enchantment/ProtectionEnchantment$Type - m ()[Lnet/minecraft/class_1900$class_1901; values values - m ()I method_8240 getMinimalEnchantability - m (Ljava/lang/String;)Lnet/minecraft/class_1900$class_1901; valueOf valueOf - m ()I method_8239 getEnchantIncreasePerLevel - f Lnet/minecraft/class_1900$class_1901; field_9140 FALL - f Lnet/minecraft/class_1900$class_1901; field_9139 FIRE - f [Lnet/minecraft/class_1900$class_1901; field_9136 $VALUES - f Ljava/lang/String; field_9137 typeName - f Lnet/minecraft/class_1900$class_1901; field_9141 EXPLOSION - f I field_9135 minEnchantability - f Lnet/minecraft/class_1900$class_1901; field_9142 PROJECTILE - f I field_9134 levelCost - f Lnet/minecraft/class_1900$class_1901; field_9138 ALL -c net/minecraft/class_1903 net/minecraft/enchantment/SweepingEnchantment - m (I)F method_8241 getSweepingDamageRatio -c net/minecraft/class_4948 net/minecraft/enchantment/SoulSpeedEnchantment -c net/minecraft/class_1905 net/minecraft/enchantment/ChannelingEnchantment -c net/minecraft/class_1906 net/minecraft/enchantment/ThornsEnchantment - m (ILjava/util/Random;)Z method_8243 shouldHit - m (ILjava/util/Random;)I method_8242 getDamage - m (Ljava/util/Map$Entry;Lnet/minecraft/class_1309;)V method_30345 func_222183_b -c net/minecraft/class_1907 net/minecraft/enchantment/LoyaltyEnchantment -c net/minecraft/class_1908 net/minecraft/enchantment/ImpalingEnchantment -c net/minecraft/class_1909 net/minecraft/enchantment/SilkTouchEnchantment -c net/minecraft/class_1910 net/minecraft/enchantment/RiptideEnchantment -c net/minecraft/class_1913 net/minecraft/enchantment/DepthStriderEnchantment -c net/minecraft/class_1911 net/minecraft/enchantment/VanishingCurseEnchantment -c net/minecraft/class_1912 net/minecraft/enchantment/AquaAffinityEnchantment -c net/minecraft/class_1915 net/minecraft/entity/merchant/IMerchant - m (Lnet/minecraft/class_1657;)V method_8259 setCustomer - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2561;I)V method_17449 openMerchantContainer - m (I)V method_19271 setXP - m (Lnet/minecraft/class_1914;)V method_8262 onTrade - m (Lnet/minecraft/class_1799;)V method_8258 verifySellingItem - m ()Lnet/minecraft/class_3414; method_18010 getYesSound - m ()Lnet/minecraft/class_1916; method_8264 getOffers - m (Lnet/minecraft/class_1916;)V method_8261 setClientSideOffers - m ()Z method_19270 hasXPBar - m ()I method_19269 getXp - m ()Lnet/minecraft/class_1937; method_8260 getWorld - m (ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17448 func_213701_a - m ()Lnet/minecraft/class_1657; method_8257 getCustomer - m ()Z method_20708 canRestockTrades -c net/minecraft/class_1916 net/minecraft/item/MerchantOffers - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;I)Lnet/minecraft/class_1914; method_8267 func_222197_a - m (Lnet/minecraft/class_2540;)V method_8270 write - m ()Lnet/minecraft/class_2487; method_8268 write - m (Lnet/minecraft/class_2540;)Lnet/minecraft/class_1916; method_8265 read -c net/minecraft/class_1914 net/minecraft/item/MerchantOffer - m ()V method_19276 resetSpecialPrice - m ()Lnet/minecraft/class_2487; method_8251 write - m ()I method_19279 getGivenExp - m ()Z method_8256 getDoesRewardExp - m (I)V method_19273 setSpecialPrice - m ()Z method_21834 hasBeenUsed - m (I)V method_8245 increaseSpecialPrice - m ()Z method_8255 hasNoUsesLeft - m ()V method_8254 makeUnavailable - m ()I method_8248 getMaxUses - m ()Lnet/minecraft/class_1799; method_8247 getBuyingStackSecond - m ()Lnet/minecraft/class_1799; method_8250 getSellingStack - m ()Lnet/minecraft/class_1799; method_19272 getDiscountedBuyingStackFirst - m ()I method_8249 getUses - m ()Lnet/minecraft/class_1799; method_8246 getBuyingStackFirst - m ()V method_8244 increaseUses - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_16952 matches - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_16953 doTransaction - m ()F method_19278 getPriceMultiplier - m ()I method_19277 getSpecialPrice - m ()V method_19275 resetUses - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z method_16954 equalIgnoringDamage - m ()Lnet/minecraft/class_1799; method_18019 getCopyOfSellingStack - m ()I method_21725 getDemand - m ()V method_19274 calculateDemand - f Lnet/minecraft/class_1799; field_9143 buyingStackSecond - f I field_18676 specialPrice - f Lnet/minecraft/class_1799; field_9146 buyingStackFirst - f I field_9144 maxUses - f I field_9147 uses - f Z field_9145 doesRewardEXP - f I field_18679 givenEXP - f Lnet/minecraft/class_1799; field_9148 sellingStack - f F field_18678 priceMultiplier - f I field_18677 demand -c net/minecraft/class_1918 net/minecraft/tileentity/CommandBlockLogic - m (Lnet/minecraft/class_1657;)Lnet/minecraft/class_1269; method_8288 tryOpenEditCommandBlock - m ()V method_8295 updateCommand - m ()I method_8304 getSuccessCount - m ()Lnet/minecraft/class_2561; method_8299 getName - m (Ljava/lang/String;)V method_8286 setCommand - m (Lnet/minecraft/class_2487;)V method_8305 read - m ()Ljava/lang/String; method_8302 func_210166_g - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_8297 write - m (Lnet/minecraft/class_2561;)V method_8290 setName - m (Lnet/minecraft/class_1937;)Z method_8301 trigger - m (Lnet/minecraft/class_2561;)V method_8291 setLastOutput - m ()Ljava/lang/String; method_8289 getCommand - m ()Lnet/minecraft/class_2561; method_8292 getLastOutput - m ()Lnet/minecraft/class_2168; method_8303 getCommandSource - m ()Lnet/minecraft/class_243; method_8300 getPositionVector - m ()Z method_8296 shouldTrackOutput - m (Z)V method_8287 setTrackOutput - m (Lcom/mojang/brigadier/context/CommandContext;ZI)V method_8294 func_209527_a - m (I)V method_8298 setSuccessCount - m ()Lnet/minecraft/class_3218; method_8293 getWorld - f Z field_9164 trackOutput - f Z field_9166 updateLastExecution - f Lnet/minecraft/class_2561; field_9162 customName - f Ljava/text/SimpleDateFormat; field_9169 TIMESTAMP_FORMAT - f Lnet/minecraft/class_2561; field_9165 lastOutput - f Ljava/lang/String; field_9168 commandStored - f I field_9163 successCount - f Lnet/minecraft/class_2561; field_21515 field_226655_c_ - f J field_9167 lastExecution -c net/minecraft/class_1920 net/minecraft/world/IBlockDisplayReader - m (Lnet/minecraft/class_2338;)Z method_8311 canSeeSky - m (Lnet/minecraft/class_1944;Lnet/minecraft/class_2338;)I method_8314 getLightFor - m (Lnet/minecraft/class_2350;Z)F method_24852 func_230487_a_ - m ()Lnet/minecraft/class_3568; method_22336 getLightManager - m (Lnet/minecraft/class_2338;Lnet/minecraft/world/level/ColorResolver;)I method_23752 getBlockColor - m (Lnet/minecraft/class_2338;I)I method_22335 getLightSubtracted -c net/minecraft/class_1917 net/minecraft/world/spawner/AbstractSpawner - m ()V method_8285 tick - m (Lnet/minecraft/class_2487;)V method_8280 read - m (Lnet/minecraft/class_2487;)Lnet/minecraft/class_2487; method_8272 write - m ()D method_8279 getPrevMobRotation - m (I)Z method_8275 setDelayToMin - m ()D method_8278 getMobRotation - m (Lnet/minecraft/class_1952;)V method_8277 setNextSpawnData - m ()Lnet/minecraft/class_1297; method_8283 getCachedEntity - m ()Lnet/minecraft/class_1937; method_8271 getWorld - m (DDDLnet/minecraft/class_1297;)Lnet/minecraft/class_1297; method_18085 func_221408_a - m ()Lnet/minecraft/class_2338; method_8276 getSpawnerPosition - m ()Lnet/minecraft/class_2960; method_8281 getEntityId - m ()Z method_8284 isActivated - m ()V method_8282 resetTimer - m (I)V method_8273 broadcastEvent - m (Lnet/minecraft/class_1299;)V method_8274 setEntityType - f I field_9160 maxNearbyEntities - f I field_9149 spawnCount - f I field_9150 maxSpawnDelay - f Ljava/util/List; field_9152 potentialSpawns - f I field_9151 minSpawnDelay - f Lnet/minecraft/class_1297; field_9153 cachedEntity - f Lorg/apache/logging/log4j/Logger; field_9156 LOGGER - f I field_9157 spawnRange - f I field_9158 activatingRangeFromPlayer - f Lnet/minecraft/class_1952; field_9155 spawnData - f D field_9159 prevMobRotation - f D field_9161 mobRotation - f I field_9154 spawnDelay -c net/minecraft/class_1922 net/minecraft/world/IBlockReader - m (Lnet/minecraft/class_265;Ljava/util/function/Supplier;)D method_30346 func_242402_a - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2586; method_8321 getTileEntity - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_3610; method_8316 getFluidState - m (Lnet/minecraft/class_3959;Lnet/minecraft/class_2338;)Lnet/minecraft/class_3965; method_17743 func_217297_a - m (Lnet/minecraft/class_3959;)Lnet/minecraft/class_3965; method_17746 func_217302_b - m (Lnet/minecraft/class_243;Lnet/minecraft/class_243;Lnet/minecraft/class_2338;Lnet/minecraft/class_265;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3965; method_17745 rayTraceBlocks - m (Lnet/minecraft/class_3959;Ljava/util/function/BiFunction;Ljava/util/function/Function;)Ljava/lang/Object; method_17744 doRayTrace - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_8320 getBlockState - m (Lnet/minecraft/class_2338;)D method_30347 func_242403_h - m (Lnet/minecraft/class_3959;)Lnet/minecraft/class_3965; method_17742 rayTraceBlocks - m (Lnet/minecraft/class_238;)Ljava/util/stream/Stream; method_29546 func_234853_a_ - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_30348 func_242404_j - m (Lnet/minecraft/class_2338;)I method_8317 getLightValue - m ()I method_8322 getHeight - m ()I method_8315 getMaxLightLevel -c net/minecraft/class_1919 net/minecraft/block/BlockEventData - m (Ljava/lang/Object;)Z equals equals - m ()Lnet/minecraft/class_2338; method_8306 getPosition - m ()I hashCode hashCode - m ()Lnet/minecraft/class_2248; method_8309 getBlock - m ()I method_8308 getEventParameter - m ()Ljava/lang/String; toString toString - m ()I method_8307 getEventID - f Lnet/minecraft/class_2248; field_9172 blockType - f I field_9170 eventParameter - f Lnet/minecraft/class_2338; field_9173 position - f I field_9171 eventID -c net/minecraft/class_1923 net/minecraft/util/math/ChunkPos - m (Lnet/minecraft/class_1923;I)Ljava/util/stream/Stream; method_19280 getAllInBox - m ()I method_8326 getXStart - m (Lnet/minecraft/class_1923;Lnet/minecraft/class_1923;)Ljava/util/stream/Stream; method_19281 getAllInBox - m ()I method_8328 getZStart - m ()I method_8327 getXEnd - m ()Ljava/lang/String; toString toString - m ()I method_8329 getZEnd - m ()I method_17885 getRegionCoordX - m ()I method_17886 getRegionCoordZ - m (J)I method_8325 getX - m ()Lnet/minecraft/class_2338; method_8323 asBlockPos - m ()I method_17887 getRegionPositionX - m (J)I method_8332 getZ - m ()I method_17888 getRegionPositionZ - m (Ljava/lang/Object;)Z equals equals - m ()J method_8324 asLong - m ()I hashCode hashCode - m (II)J method_8331 asLong - m (Lnet/minecraft/class_1923;)I method_24022 getChessboardDistance - f J field_17348 SENTINEL - f I field_9181 x - f I field_9180 z -c net/minecraft/class_1923$1 net/minecraft/util/math/ChunkPos$1 - m (Ljava/util/function/Consumer;)Z tryAdvance tryAdvance - f I field_18682 field_222235_c - f Lnet/minecraft/class_1923; field_18681 field_222234_b - f I field_18683 field_222236_d - f Lnet/minecraft/class_1923; field_18680 field_222233_a - f Lnet/minecraft/class_1923; field_18684 current -c net/minecraft/class_3959 net/minecraft/util/math/RayTraceContext - m (Lnet/minecraft/class_3610;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_17749 getFluidShape - m ()Lnet/minecraft/class_243; method_17750 getStartVec - m ()Lnet/minecraft/class_243; method_17747 getEndVec - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_265; method_17748 getBlockShape - f Lnet/minecraft/class_3959$class_242; field_17556 fluidMode - f Lnet/minecraft/class_3726; field_17557 context - f Lnet/minecraft/class_243; field_17554 endVec - f Lnet/minecraft/class_243; field_17553 startVec - f Lnet/minecraft/class_3959$class_3960; field_17555 blockMode -c net/minecraft/class_3959$class_3961 net/minecraft/util/math/RayTraceContext$IVoxelProvider - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Lnet/minecraft/class_265; get get -c net/minecraft/class_3959$class_3960 net/minecraft/util/math/RayTraceContext$BlockMode - m ()[Lnet/minecraft/class_3959$class_3960; values values - m (Ljava/lang/String;)Lnet/minecraft/class_3959$class_3960; valueOf valueOf - f Lnet/minecraft/class_3959$class_3960; field_17559 OUTLINE - f [Lnet/minecraft/class_3959$class_3960; field_17561 $VALUES - f Lnet/minecraft/class_3959$class_3960; field_23142 VISUAL - f Lnet/minecraft/class_3959$class_3961; field_17560 provider - f Lnet/minecraft/class_3959$class_3960; field_17558 COLLIDER -c net/minecraft/class_3959$class_242 net/minecraft/util/math/RayTraceContext$FluidMode - m (Lnet/minecraft/class_3610;)Z method_1017 func_222247_c - m (Ljava/lang/String;)Lnet/minecraft/class_3959$class_242; valueOf valueOf - m (Lnet/minecraft/class_3610;)Z method_17751 test - m ()[Lnet/minecraft/class_3959$class_242; values values - m (Lnet/minecraft/class_3610;)Z method_1018 func_222246_b - f Lnet/minecraft/class_3959$class_242; field_1348 NONE - f Lnet/minecraft/class_3959$class_242; field_1347 ANY - f [Lnet/minecraft/class_3959$class_242; field_1349 $VALUES - f Lnet/minecraft/class_3959$class_242; field_1345 SOURCE_ONLY - f Ljava/util/function/Predicate; field_1346 fluidTest -c net/minecraft/class_4296 net/minecraft/world/SerializableTickList - m (Lnet/minecraft/class_2499;Ljava/util/function/Function;Ljava/util/function/Function;)Lnet/minecraft/class_4296; method_20512 create - m (JLnet/minecraft/class_1954;)Lnet/minecraft/class_4296$class_4989; method_26367 func_234854_a_ - m ()Lnet/minecraft/class_2499; method_20463 func_234857_b_ - m (Lnet/minecraft/class_1951;Lnet/minecraft/class_4296$class_4989;)V method_26369 func_234856_a_ - m (Lnet/minecraft/class_1951;)V method_26368 func_234855_a_ - f Ljava/util/function/Function; field_19276 toId - f Ljava/util/List; field_19275 ticks -c net/minecraft/class_4296$class_4989 net/minecraft/world/SerializableTickList$TickHolder - m (Lnet/minecraft/class_4296$class_4989;)Ljava/lang/Object; method_26370 func_234862_a_ - m ()Ljava/lang/String; toString toString - f Lnet/minecraft/class_2338; field_23257 field_234858_a_ - f Ljava/lang/Object; field_23260 field_234861_d_ - f Lnet/minecraft/class_1953; field_23259 field_234860_c_ - f I field_23258 field_234859_b_ -c net/minecraft/class_4296$1 net/minecraft/world/SerializableTickList$1 -c net/minecraft/class_5329 net/minecraft/util/math/shapes/VoxelShapeSpliterator - m (Ljava/util/function/Consumer;)Z tryAdvance tryAdvance - m (Lnet/minecraft/class_2784;Lnet/minecraft/class_238;)Z method_29284 func_234877_a_ - m (II)Lnet/minecraft/class_1922; method_29283 func_234876_a_ - m (Ljava/util/function/Consumer;)Z method_29286 func_234879_b_ - m (Lnet/minecraft/class_265;Lnet/minecraft/class_238;)Z method_30131 func_241461_b_ - m (Ljava/util/function/Consumer;)Z method_29285 func_234878_a_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Z method_30031 func_241459_a_ - m (Lnet/minecraft/class_265;Lnet/minecraft/class_238;)Z method_30130 func_241460_a_ - f Lnet/minecraft/class_265; field_25173 shape - f Lnet/minecraft/class_1941; field_25174 reader - f Lnet/minecraft/class_3980; field_25171 cubeCoordinateIterator - f Lnet/minecraft/class_238; field_25169 aabb - f Lnet/minecraft/class_2338$class_2339; field_25172 mutablePos - f Lnet/minecraft/class_1297; field_25168 entity - f Ljava/util/function/BiPredicate; field_25669 statePositionPredicate - f Lnet/minecraft/class_3726; field_25170 context - f Z field_25175 field_234875_h_ -c net/minecraft/class_1941 net/minecraft/world/ICollisionReader - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/stream/Stream; method_8600 func_234867_d_ - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;)Ljava/util/stream/Stream; method_20812 getCollisionShapes - m ()Lnet/minecraft/class_2784; method_8621 getWorldBorder - m (Lnet/minecraft/class_1297;)Z method_26970 func_234866_d_ - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;)Z method_8587 hasNoCollisions - m (II)Lnet/minecraft/class_1922; method_22338 getBlockReader - m (Lnet/minecraft/class_1297;)Z method_17892 hasNoCollisions - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_3726;)Z method_8628 placedBlockCollides - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_265;)Z method_8611 checkNoEntityCollision - m (Lnet/minecraft/class_238;)Z method_18026 hasNoCollisions - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/BiPredicate;)Ljava/util/stream/Stream; method_30030 func_241457_a_ - m (Lnet/minecraft/class_1297;)Z method_26968 func_234863_a_ - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/BiPredicate;)Z method_30635 func_242405_a - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Z method_8590 hasNoCollisions - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/stream/Stream; method_20743 func_230318_c_ - m (Lnet/minecraft/class_1297;)Z method_26969 func_234864_b_ - m (Lnet/minecraft/class_1297;)Z method_8606 checkNoEntityCollision -c net/minecraft/class_5304 net/minecraft/world/spawner/ISpecialSpawner - m (Lnet/minecraft/class_3218;ZZ)I method_6445 func_230253_a_ -c net/minecraft/class_5423 net/minecraft/world/IBiomeReader - m (Lnet/minecraft/class_2338;)Ljava/util/Optional; method_31081 func_242406_i - m ()Lnet/minecraft/class_5455; method_30349 func_241828_r -c net/minecraft/class_2682 net/minecraft/world/EmptyBlockReader - m (Ljava/lang/String;)Lnet/minecraft/class_2682; valueOf valueOf - m ()[Lnet/minecraft/class_2682; values values - f [Lnet/minecraft/class_2682; field_12295 $VALUES - f Lnet/minecraft/class_2682; field_12294 INSTANCE -c net/minecraft/class_5359 net/minecraft/util/datafix/codec/DatapackCodec - m ()Ljava/util/List; method_29550 getDisabled - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_29549 func_234886_a_ - m (Lnet/minecraft/class_5359;)Ljava/util/List; method_29551 func_234888_b_ - m (Lnet/minecraft/class_5359;)Ljava/util/List; method_29548 func_234885_a_ - m ()Ljava/util/List; method_29547 getEnabled - f Lcom/mojang/serialization/Codec; field_25394 CODEC - f Ljava/util/List; field_25396 disabled - f Ljava/util/List; field_25395 enabled - f Lnet/minecraft/class_5359; field_25393 VANILLA_CODEC -c net/minecraft/class_5361 net/minecraft/world/EntityExplosionContext - m (Lnet/minecraft/class_1927;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;Ljava/lang/Float;)Ljava/lang/Float; method_29552 func_234890_a_ - f Lnet/minecraft/class_1297; field_25399 entity -c net/minecraft/class_1925 net/minecraft/world/EmptyTickList - m ()Lnet/minecraft/class_1925; method_8339 get - f Lnet/minecraft/class_1925; field_9182 INSTANCE -c net/minecraft/class_1927 net/minecraft/world/Explosion - m ()V method_8352 clearAffectedBlockPositions - m (Lit/unimi/dsi/fastutil/objects/ObjectArrayList;Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;)V method_24023 handleExplosionDrops - m ()V method_8348 doExplosionA - m (Lnet/minecraft/class_1297;)Lnet/minecraft/class_5362; method_29553 getEntityExplosionContext - m (Lnet/minecraft/class_243;Lnet/minecraft/class_1297;)F method_17752 getBlockDensity - m ()Lnet/minecraft/class_1309; method_8347 getExplosivePlacedBy - m ()Lnet/minecraft/class_1282; method_8349 getDamageSource - m (Lit/unimi/dsi/fastutil/objects/ObjectArrayList;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_24024 func_229977_a_ - m ()Ljava/util/List; method_8346 getAffectedBlockPositions - m ()Ljava/util/Map; method_8351 getPlayerKnockbackMap - m (Z)V method_8350 doExplosionB - f Lnet/minecraft/class_5362; field_25400 context - f Ljava/util/Random; field_9191 random - f Lnet/minecraft/class_1927$class_4179; field_9184 mode - f Z field_9186 causesFire - f Lnet/minecraft/class_1297; field_9185 exploder - f F field_9190 size - f Lnet/minecraft/class_1937; field_9187 world - f Lnet/minecraft/class_1282; field_9193 damageSource - f Lnet/minecraft/class_5362; field_25818 DEFAULT_CONTEXT - f D field_9195 x - f D field_9192 y - f Ljava/util/Map; field_9194 playerKnockbackMap - f D field_9189 z - f Ljava/util/List; field_9188 affectedBlockPositions -c net/minecraft/class_1927$class_4179 net/minecraft/world/Explosion$Mode - m (Ljava/lang/String;)Lnet/minecraft/class_1927$class_4179; valueOf valueOf - m ()[Lnet/minecraft/class_1927$class_4179; values values - f Lnet/minecraft/class_1927$class_4179; field_18685 NONE - f [Lnet/minecraft/class_1927$class_4179; field_18688 $VALUES - f Lnet/minecraft/class_1927$class_4179; field_18686 BREAK - f Lnet/minecraft/class_1927$class_4179; field_18687 DESTROY -c net/minecraft/class_1924 net/minecraft/world/IEntityReader - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;)Ljava/util/List; method_8335 getEntitiesWithinAABBExcludingEntity - m (DDDDLjava/util/function/Predicate;)Lnet/minecraft/class_1657; method_8604 getClosestPlayer - m (Ljava/lang/Class;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/List; method_21729 getLoadedEntitiesWithinAABB - m (Ljava/lang/Class;Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;Lnet/minecraft/class_238;)Ljava/util/List; method_18466 getTargettableEntitiesWithinAABB - m (Ljava/util/List;Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;DDD)Lnet/minecraft/class_1309; method_18468 getClosestEntity - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/List; method_8333 getEntitiesInAABBexcluding - m ()Ljava/util/List; method_18456 getPlayers - m (Ljava/util/UUID;)Lnet/minecraft/class_1657; method_18470 getPlayerByUuid - m (Ljava/lang/Class;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/List; method_8390 getEntitiesWithinAABB - m (DDDDZ)Lnet/minecraft/class_1657; method_18459 getClosestPlayer - m (Ljava/lang/Class;Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;DDDLnet/minecraft/class_238;)Lnet/minecraft/class_1309; method_21726 getClosestEntityWithinAABB - m (Ljava/lang/Class;Lnet/minecraft/class_238;)Ljava/util/List; method_18467 getEntitiesWithinAABB - m (Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;DDD)Lnet/minecraft/class_1657; method_18463 getClosestPlayer - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/stream/Stream; method_20743 func_230318_c_ - m (Ljava/lang/Class;Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;DDDLnet/minecraft/class_238;)Lnet/minecraft/class_1309; method_21727 func_225318_b - m (Ljava/lang/Class;Lnet/minecraft/class_238;)Ljava/util/List; method_21728 getLoadedEntitiesWithinAABB - m (Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;)Lnet/minecraft/class_1657; method_18462 getClosestPlayer - m (Lnet/minecraft/class_1297;D)Lnet/minecraft/class_1657; method_18460 getClosestPlayer - m (Lnet/minecraft/class_238;Lnet/minecraft/class_1297;Lnet/minecraft/class_1297;)Z method_8338 func_234892_b_ - m (Lnet/minecraft/class_4051;DDD)Lnet/minecraft/class_1657; method_18461 getClosestPlayer - m (Lnet/minecraft/class_4051;Lnet/minecraft/class_1309;Lnet/minecraft/class_238;)Ljava/util/List; method_18464 getTargettablePlayersWithinAABB - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_265;)Z method_8611 checkNoEntityCollision - m (DDDD)Z method_18458 isPlayerWithin -c net/minecraft/class_1926 net/minecraft/world/FoliageColors - m ()I method_8341 getDefault - m ()I method_8342 getSpruce - m ()I method_8343 getBirch - m (DD)I method_8344 get - m ([I)V method_8340 setFoliageBiomeColorizer - f [I field_9183 foliageBuffer -c net/minecraft/class_5362 net/minecraft/world/ExplosionContext - m (Lnet/minecraft/class_1927;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;)Ljava/util/Optional; method_29555 getExplosionResistance - m (Lnet/minecraft/class_1927;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;F)Z method_29554 canExplosionDestroyBlock -c net/minecraft/class_1928 net/minecraft/world/GameRules - m (Lnet/minecraft/class_1928;Lnet/minecraft/server/MinecraftServer;)V method_27322 func_234899_a_ - m (Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928;Lnet/minecraft/server/MinecraftServer;)V method_27321 getValue - m (Lnet/minecraft/class_1928$class_4313;)I method_8356 getInt - m (Lcom/mojang/serialization/DynamicLike;Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4315;)V method_20747 func_234902_a_ - m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_1928$class_4310;)V method_8361 func_223589_a - m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_1928$class_4310;)V method_22386 func_226686_a_ - m (Lnet/minecraft/class_1928$class_4311;Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V method_20750 func_234906_b_ - m ()Lorg/apache/logging/log4j/Logger; method_20749 func_223588_b - m (Lnet/minecraft/class_1928;Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_1928$class_4313;)V method_27323 func_234900_a_ - m (Ljava/util/Map$Entry;)Lnet/minecraft/class_1928$class_4315; method_27324 func_234904_a_ - m (Lnet/minecraft/class_1928$class_4313;)Lnet/minecraft/class_1928$class_4315; method_20746 get - m ()Lnet/minecraft/class_2487; method_8358 write - m (Lnet/minecraft/class_1928$class_4313;)Z method_8355 getBoolean - m (Lnet/minecraft/class_1928$class_4311;)V method_20744 visitAll - m (Lnet/minecraft/class_1928$class_4313;)Ljava/lang/String; method_20752 func_223597_d - m (Lnet/minecraft/class_1928$class_4311;Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V method_20745 visit - m ()Lnet/minecraft/class_1928; method_27325 clone - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4315;)V method_20751 func_226688_b_ - m (Ljava/util/Map$Entry;)Lnet/minecraft/class_1928$class_4315; method_20748 func_226684_a_ - m (Lcom/mojang/serialization/DynamicLike;)V method_8357 decode - m (Ljava/lang/String;Lnet/minecraft/class_1928$class_5198;Lnet/minecraft/class_1928$class_4314;)Lnet/minecraft/class_1928$class_4313; method_8359 register - f Lnet/minecraft/class_1928$class_4313; field_19405 MAX_ENTITY_CRAMMING - f Lorg/apache/logging/log4j/Logger; field_19410 LOGGER - f Lnet/minecraft/class_1928$class_4313; field_19407 DO_LIMITED_CRAFTING - f Lnet/minecraft/class_1928$class_4313; field_19409 ANNOUNCE_ADVANCEMENTS - f Lnet/minecraft/class_1928$class_4313; field_19388 MOB_GRIEFING - f Lnet/minecraft/class_1928$class_4313; field_20637 DO_INSOMNIA - f Lnet/minecraft/class_1928$class_4313; field_19390 DO_MOB_SPAWNING - f Lnet/minecraft/class_1928$class_4313; field_19392 DO_TILE_DROPS - f Lnet/minecraft/class_1928$class_4313; field_19394 COMMAND_BLOCK_OUTPUT - f Lnet/minecraft/class_1928$class_4313; field_19396 DO_DAYLIGHT_CYCLE - f Lnet/minecraft/class_1928$class_4313; field_19398 SHOW_DEATH_MESSAGES - f Lnet/minecraft/class_1928$class_4313; field_20635 FALL_DAMAGE - f Lnet/minecraft/class_1928$class_4313; field_19400 SEND_COMMAND_FEEDBACK - f Ljava/util/Map; field_9197 GAME_RULES - f Lnet/minecraft/class_1928$class_4313; field_21831 DO_PATROL_SPAWNING - f Lnet/minecraft/class_1928$class_4313; field_19402 SPECTATORS_GENERATE_CHUNKS - f Lnet/minecraft/class_1928$class_4313; field_25401 FORGIVE_DEAD_PLAYERS - f Lnet/minecraft/class_1928$class_4313; field_19404 DISABLE_ELYTRA_MOVEMENT_CHECK - f Lnet/minecraft/class_1928$class_4313; field_19406 DO_WEATHER_CYCLE - f Lnet/minecraft/class_1928$class_4313; field_19408 MAX_COMMAND_CHAIN_LENGTH - f Lnet/minecraft/class_1928$class_4313; field_19387 DO_FIRE_TICK - f Lnet/minecraft/class_1928$class_4313; field_19422 DISABLE_RAIDS - f Lnet/minecraft/class_1928$class_4313; field_19389 KEEP_INVENTORY - f Lnet/minecraft/class_1928$class_4313; field_20638 DO_IMMEDIATE_RESPAWN - f Lnet/minecraft/class_1928$class_4313; field_19391 DO_MOB_LOOT - f Lnet/minecraft/class_1928$class_4313; field_19393 DO_ENTITY_DROPS - f Lnet/minecraft/class_1928$class_4313; field_19395 NATURAL_REGENERATION - f Lnet/minecraft/class_1928$class_4313; field_19397 LOG_ADMIN_COMMANDS - f Lnet/minecraft/class_1928$class_4313; field_20634 DROWNING_DAMAGE - f Lnet/minecraft/class_1928$class_4313; field_19399 RANDOM_TICK_SPEED - f Lnet/minecraft/class_1928$class_4313; field_20636 FIRE_DAMAGE - f Ljava/util/Map; field_9196 rules - f Lnet/minecraft/class_1928$class_4313; field_19401 REDUCED_DEBUG_INFO - f Lnet/minecraft/class_1928$class_4313; field_21832 DO_TRADER_SPAWNING - f Lnet/minecraft/class_1928$class_4313; field_19403 SPAWN_RADIUS - f Lnet/minecraft/class_1928$class_4313; field_25402 UNIVERSAL_ANGER -c net/minecraft/class_1928$class_4310 net/minecraft/world/GameRules$BooleanValue - m (ZLjava/util/function/BiConsumer;)Lnet/minecraft/class_1928$class_4314; method_20757 func_223573_a - m (ZLnet/minecraft/server/MinecraftServer;)V method_20758 set - m (Lnet/minecraft/class_1928$class_4310;Lnet/minecraft/server/MinecraftServer;)V method_27326 changeValue - m ()Lnet/minecraft/class_1928$class_4310; method_20761 getValue - m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_1928$class_4310;)V method_20754 func_223569_a - m ()Lnet/minecraft/class_1928$class_4310; method_27327 clone - m ()Z method_20753 get - m (ZLnet/minecraft/class_1928$class_4314;)Lnet/minecraft/class_1928$class_4310; method_20756 func_223574_a - m (ZLjava/util/function/BiConsumer;)Lnet/minecraft/class_1928$class_4314; method_20760 create - m (Z)Lnet/minecraft/class_1928$class_4314; method_20759 create - m (Z)Lnet/minecraft/class_1928$class_4314; method_20755 func_223571_a - f Z field_19411 value -c net/minecraft/class_1928$class_5198 net/minecraft/world/GameRules$Category - m (Ljava/lang/String;)Lnet/minecraft/class_1928$class_5198; valueOf valueOf - m ()[Lnet/minecraft/class_1928$class_5198; values values - m ()Ljava/lang/String; method_27328 getLocaleString - f Lnet/minecraft/class_1928$class_5198; field_24098 UPDATES - f Ljava/lang/String; field_24101 localeString - f Lnet/minecraft/class_1928$class_5198; field_24094 PLAYER - f Lnet/minecraft/class_1928$class_5198; field_24099 CHAT - f Lnet/minecraft/class_1928$class_5198; field_24100 MISC - f Lnet/minecraft/class_1928$class_5198; field_24095 MOBS - f Lnet/minecraft/class_1928$class_5198; field_24096 SPAWNING - f [Lnet/minecraft/class_1928$class_5198; field_24102 $VALUES - f Lnet/minecraft/class_1928$class_5198; field_24097 DROPS -c net/minecraft/class_1928$class_4313 net/minecraft/world/GameRules$RuleKey - m ()Lnet/minecraft/class_1928$class_5198; method_27335 getCategory - m (Lnet/minecraft/class_1928$class_4313;)Ljava/lang/String; method_20772 func_223577_a - m ()Ljava/lang/String; method_20771 getName - m ()Ljava/lang/String; toString toString - m ()I hashCode hashCode - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/lang/String; method_27334 getLocaleString - f Lnet/minecraft/class_1928$class_5198; field_24103 category - f Ljava/lang/String; field_19413 gameRuleName -c net/minecraft/class_1928$class_4314 net/minecraft/world/GameRules$RuleType - m (Ljava/lang/String;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder; method_20775 createArgument - m (Lnet/minecraft/class_1928$class_4314;)Ljava/util/function/BiConsumer; method_20774 func_223580_a - m ()Lnet/minecraft/class_1928$class_4315; method_20773 createValue - m (Lnet/minecraft/class_1928$class_4311;Lnet/minecraft/class_1928$class_4313;)V method_27336 visitRule - f Ljava/util/function/Supplier; field_19414 argTypeSupplier - f Ljava/util/function/BiConsumer; field_19416 changeListener - f Ljava/util/function/Function; field_19415 valueCreator - f Lnet/minecraft/class_1928$class_5199; field_24104 rule -c net/minecraft/class_1928$class_4311 net/minecraft/world/GameRules$IRuleEntryVisitor - m (Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V method_20762 visit - m (Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V method_27330 changeInteger - m (Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V method_27329 changeBoolean -c net/minecraft/class_1928$class_4312 net/minecraft/world/GameRules$IntegerValue - m (Ljava/lang/String;)Z method_27332 parseIntValue - m (Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/class_1928$class_4312;)V method_20767 func_223561_a - m (Lnet/minecraft/class_1928$class_4312;Lnet/minecraft/server/MinecraftServer;)V method_27331 changeValue - m (Ljava/lang/String;)I method_20769 parseInt - m (ILjava/util/function/BiConsumer;)Lnet/minecraft/class_1928$class_4314; method_20766 create - m (I)Lnet/minecraft/class_1928$class_4314; method_20768 create - m (I)Lnet/minecraft/class_1928$class_4314; method_20764 func_223562_a - m ()I method_20763 get - m ()Lnet/minecraft/class_1928$class_4312; method_20770 getValue - m ()Lnet/minecraft/class_1928$class_4312; method_27333 clone - m (ILnet/minecraft/class_1928$class_4314;)Lnet/minecraft/class_1928$class_4312; method_20765 func_223565_a - f I field_19412 value -c net/minecraft/class_1928$class_4315 net/minecraft/world/GameRules$RuleValue - m (Lnet/minecraft/class_1928$class_4315;Lnet/minecraft/server/MinecraftServer;)V method_27337 changeValue - m (Ljava/lang/String;)V method_20777 setStringValue - m ()I method_20781 intValue - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/server/MinecraftServer;)V method_20778 notifyChange - m ()Lnet/minecraft/class_1928$class_4315; method_20782 getValue - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)V method_20776 updateValue0 - m ()Lnet/minecraft/class_1928$class_4315; method_27338 clone - m (Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)V method_20780 updateValue - m ()Ljava/lang/String; method_20779 stringValue - f Lnet/minecraft/class_1928$class_4314; field_19417 type -c net/minecraft/class_1928$class_5199 net/minecraft/world/GameRules$IRule - m (Lnet/minecraft/class_1928$class_4311;Lnet/minecraft/class_1928$class_4313;Lnet/minecraft/class_1928$class_4314;)V call call -c net/minecraft/class_1928$1 net/minecraft/world/GameRules$1 -c net/minecraft/class_1932 net/minecraft/world/ForcedChunksSaveData - m ()Lit/unimi/dsi/fastutil/longs/LongSet; method_8375 getChunks - f Lit/unimi/dsi/fastutil/longs/LongSet; field_9213 chunks -c net/minecraft/class_1933 net/minecraft/world/GrassColors - m (DD)I method_8377 get - m ([I)V method_8376 setGrassBiomeColorizer - f [I field_9214 grassBuffer -c net/minecraft/class_1934 net/minecraft/world/GameType - m ()Ljava/lang/String; method_8381 getName - m (Ljava/lang/String;)Lnet/minecraft/class_1934; method_8385 getByName - m ()[Lnet/minecraft/class_1934; values values - m (Ljava/lang/String;)Lnet/minecraft/class_1934; valueOf valueOf - m (Ljava/lang/String;Lnet/minecraft/class_1934;)Lnet/minecraft/class_1934; method_8378 parseGameTypeWithDefault - m (ILnet/minecraft/class_1934;)Lnet/minecraft/class_1934; method_8380 parseGameTypeWithDefault - m ()Z method_8387 hasLimitedInteractions - m ()Z method_8386 isCreative - m ()Z method_8388 isSurvivalOrAdventure - m ()I method_8379 getID - m (Lnet/minecraft/class_1656;)V method_8382 configurePlayerCapabilities - m ()Lnet/minecraft/class_2561; method_8383 getDisplayName - m (I)Lnet/minecraft/class_1934; method_8384 getByID - f Ljava/lang/String; field_9221 name - f Lnet/minecraft/class_1934; field_9219 SPECTATOR - f Lnet/minecraft/class_1934; field_9216 ADVENTURE - f Lnet/minecraft/class_1934; field_9220 CREATIVE - f Lnet/minecraft/class_1934; field_9215 SURVIVAL - f [Lnet/minecraft/class_1934; field_9222 $VALUES - f I field_9217 id - f Lnet/minecraft/class_1934; field_9218 NOT_SET -c net/minecraft/class_1937 net/minecraft/world/World - m ()Ljava/util/function/Supplier; method_24367 getWorldProfiler - m ()V method_18471 tickBlockEntities - m ()Lnet/minecraft/class_1863; method_8433 getRecipeManager - m (Ljava/lang/String;)Lnet/minecraft/class_22; method_17891 getMapData - m (IIII)Lnet/minecraft/class_2338; method_8536 getBlockRandomPos - m ()Lnet/minecraft/class_5415; method_8514 getTags - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_1282;Lnet/minecraft/class_5362;DDDFZLnet/minecraft/class_1927$class_4179;)Lnet/minecraft/class_1927; method_8454 createExplosion - m (Ljava/util/function/Consumer;Lnet/minecraft/class_1297;)V method_18472 guardEntityTick - m (Lnet/minecraft/class_2394;ZDDDDDD)V method_8466 addParticle - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)Z method_8515 isTopSolid - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)V method_19282 onBlockStateChange - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2818; method_8500 getChunkAt - m (Lnet/minecraft/class_1297;B)V method_8421 setEntityState - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;)V method_8526 setTileEntity - m ()Z method_27982 isDebug - m (Lnet/minecraft/class_2248;)Ljava/lang/String; method_8473 func_242408_a - m (Lnet/minecraft/class_2338;)I method_8482 getRedstonePowerFromNeighbors - m (F)F method_8430 getRainStrength - m (Lnet/minecraft/class_2338;)Z method_24794 isValid - m ()I method_17889 getNextMapId - m ()V close close - m (Lnet/minecraft/class_2338;)V method_8544 removeTileEntity - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_8499 getRedstonePower - m (ILnet/minecraft/class_2338;I)V method_8517 sendBlockBreakProgress - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;)V method_8452 notifyNeighborsOfStateChange - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;II)V method_8427 addBlockEvent - m (ZZ)V method_8424 setAllowedSpawnTypes - m ()J method_8510 getGameTime - m ()Ljava/lang/String; method_8457 getProviderName - m (Ljava/util/Collection;)V method_8447 addTileEntities - m ()Ljava/lang/String; method_8484 func_242409_b - m (DDDDDDLnet/minecraft/class_2487;)V method_8547 makeFireworks - m ()Lnet/minecraft/class_269; method_8428 getScoreboard - m (Lnet/minecraft/class_2596;)V method_8522 sendPacketToServer - m ()Z method_8458 isSaveDisabled - m (Lnet/minecraft/class_2394;ZDDDDDD)V method_17452 addOptionalParticle - m (F)V method_8519 setRainStrength - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;)V method_8524 markChunkDirty - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;I)V method_8413 notifyBlockUpdate - m (I)Z method_8476 isYOutOfBounds - m ()Z method_8546 isThundering - m (Lnet/minecraft/class_2338;)Z method_25953 isInvalidPosition - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;Lnet/minecraft/class_2350;)Z method_24368 isDirectionSolid - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;Lnet/minecraft/class_2338;)V method_8492 neighborChanged - m (Lnet/minecraft/class_2338;)Z method_8477 isBlockPresent - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;)Z method_8505 isBlockModifiable - m ()V method_8525 sendQuittingDisconnectingPacket - m (F)F method_8442 getCelestialAngleRadians - m (Lnet/minecraft/class_128;)Lnet/minecraft/class_129; method_8538 fillCrashReport - m (Lnet/minecraft/class_2338;)Z method_8520 isRainingAt - m (DDDLnet/minecraft/class_3414;Lnet/minecraft/class_3419;FFZ)V method_8486 playSound - m (Lnet/minecraft/class_2586;)Z method_8438 addTileEntity - m ()Z method_8530 isDaytime - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;)V method_8455 updateComparatorOutputLevel - m (Lnet/minecraft/class_1297;DDDFZLnet/minecraft/class_1927$class_4179;)Lnet/minecraft/class_1927; method_8537 createExplosion - m ()J method_8532 getDayTime - m ()V method_8533 calculateInitialSkylight - m ()Ljava/lang/String; method_20783 func_217392_b - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_238;Ljava/util/function/Predicate;)Ljava/util/List; method_18023 getEntitiesWithinAABB - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;Lnet/minecraft/class_2350;)V method_8508 notifyNeighborsOfStateExcept - m (Lnet/minecraft/class_1657;DDDLnet/minecraft/class_3414;Lnet/minecraft/class_3419;FF)V method_8465 playSound - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2586; method_8426 getPendingTileEntityAt - m (I)V method_8509 setTimeLightningFlash - m (Lnet/minecraft/class_2338;)Z method_8518 isOutsideBuildHeight - m ()Z method_8419 isRaining - m (Lnet/minecraft/class_2338;)I method_8488 getStrongPower - m ()Lnet/minecraft/class_3695; method_16107 getProfiler - m ()Lnet/minecraft/class_1928; method_8450 getGameRules - m (Lnet/minecraft/class_2338;)Z method_8480 isBlockinHighHumidity - m (F)F method_8478 getThunderStrength - m (Lnet/minecraft/class_22;)V method_17890 registerMapData - m (I)Lnet/minecraft/class_1297; method_8469 getEntityByID - m ()Z method_23886 isNightTime - m (Lnet/minecraft/class_1297;DDDFLnet/minecraft/class_1927$class_4179;)Lnet/minecraft/class_1927; method_8437 createExplosion - m ()V method_8543 calculateInitialWeather - m (Lnet/minecraft/class_2586;)Ljava/lang/Object; method_20401 func_242411_c - m ()Lnet/minecraft/server/MinecraftServer; method_8503 getServer - m (I)Z method_25952 isInvalidYPosition - m ()Lnet/minecraft/class_5321; method_27983 getDimensionKey - m (Lnet/minecraft/class_2394;DDDDDD)V method_8494 addOptionalParticle - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)V method_16109 markBlockRangeForRenderUpdate - m (F)V method_8496 setThunderStrength - m (Lnet/minecraft/class_2338;)Z method_8558 isValidXZPosition - m (Lnet/minecraft/class_2338;)Z method_8479 isBlockPowered - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1297;Lnet/minecraft/class_3414;Lnet/minecraft/class_3419;FF)V method_8449 playMovingSound - m (II)Lnet/minecraft/class_2818; method_8497 getChunk - m (ILnet/minecraft/class_2338;I)V method_8474 playBroadcastSound - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_8501 setBlockState - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_8459 isSidePowered - m (Lnet/minecraft/class_2586;)Ljava/lang/String; method_18473 func_242410_b - f Lnet/minecraft/class_2784; field_9223 worldBorder - f Lnet/minecraft/class_5321; field_25181 THE_END - f F field_9253 prevRainingStrength - f Z field_9249 processingLoadedTiles - f I field_9226 skylightSubtracted - f Ljava/util/List; field_9231 loadedTileEntityList - f F field_9234 thunderingStrength - f Lnet/minecraft/class_5321; field_25180 THE_NETHER - f Lorg/apache/logging/log4j/Logger; field_9224 LOGGER - f Ljava/util/Random; field_9229 rand - f Lnet/minecraft/class_5269; field_9232 worldInfo - f Ljava/util/List; field_9246 tickableTileEntities - f Lnet/minecraft/class_5321; field_25176 dimension - f I field_9256 updateLCG - f Lnet/minecraft/class_5321; field_25179 OVERWORLD - f [Lnet/minecraft/class_2350; field_9233 FACING_VALUES - f Lcom/mojang/serialization/Codec; field_25178 CODEC - f Ljava/util/List; field_9241 addedTileEntityList - f Ljava/lang/Thread; field_17086 mainThread - f F field_9235 rainingStrength - f I field_9238 DIST_HASH_MAGIC - f Ljava/util/function/Supplier; field_16316 profiler - f Z field_9236 isRemote - f Ljava/util/List; field_18139 tileEntitiesToBeRemoved - f Z field_24496 isDebug - f Lnet/minecraft/class_4543; field_20639 biomeManager - f Lnet/minecraft/class_2874; field_9247 dimensionType - f F field_9251 prevThunderingStrength -c net/minecraft/class_1937$1 net/minecraft/world/World$1 - f Lnet/minecraft/class_2874; field_26691 field_242412_a - f Lnet/minecraft/class_1937; field_24672 field_234937_a_ -c net/minecraft/class_1935 net/minecraft/util/IItemProvider - m ()Lnet/minecraft/class_1792; method_8389 asItem -c net/minecraft/class_4538 net/minecraft/world/IWorldReader - m (Lnet/minecraft/class_238;)Z method_22345 containsAnyLiquid - m (Lnet/minecraft/class_2338;I)I method_22346 getNeighborAwareLightSubtracted - m (Lnet/minecraft/class_238;)Ljava/util/stream/Stream; method_29556 getStatesInArea - m ()I method_8594 getSkylightSubtracted - m (Lnet/minecraft/class_2338;)F method_22349 getBrightness - m (Lnet/minecraft/class_2338;)Z method_22347 isAirBlock - m (II)Z method_8393 chunkExists - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2791; method_22350 getChunk - m (Lnet/minecraft/class_2902$class_2903;II)I method_8624 getHeight - m (Lnet/minecraft/class_2338;)Z method_22348 canBlockSeeSky - m (IILnet/minecraft/class_2806;)Lnet/minecraft/class_2791; method_22342 getChunk - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1959; method_23753 getBiome - m (Lnet/minecraft/class_2902$class_2903;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_8598 getHeight - m (Lnet/minecraft/class_2338;)I method_22339 getLight - m (IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2791; method_8402 getChunk - m ()I method_8615 getSeaLevel - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2338;)Z method_22343 isAreaLoaded - m (IIIIII)Z method_22341 isAreaLoaded - m (II)Lnet/minecraft/class_2791; method_8392 getChunk - m (Lnet/minecraft/class_2338;)Z method_22351 hasWater - m ()Z method_8608 isRemote - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_22344 getStrongPower - m (III)Lnet/minecraft/class_1959; method_22387 getNoiseBiomeRaw - m ()Lnet/minecraft/class_4543; method_22385 getBiomeManager - m ()Lnet/minecraft/class_2874; method_8597 getDimensionType - m (Lnet/minecraft/class_2338;)Z method_22340 isBlockLoaded -c net/minecraft/class_1936 net/minecraft/world/IWorld - m ()Ljava/util/Random; method_8409 getRandom - m (ILnet/minecraft/class_2338;I)V method_20290 playEvent - m ()Lnet/minecraft/class_1267; method_8407 getDifficulty - m (Lnet/minecraft/class_2394;DDDDDD)V method_8406 addParticle - m (Lnet/minecraft/class_1657;ILnet/minecraft/class_2338;I)V method_8444 playEvent - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;)V method_8408 func_230547_a_ - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_3414;Lnet/minecraft/class_3419;FF)V method_8396 playSound - m ()Lnet/minecraft/class_2802; method_8398 getChunkProvider - m ()I method_24853 func_234938_ad_ - m ()Lnet/minecraft/class_1951; method_8397 getPendingBlockTicks - m ()Lnet/minecraft/class_5217; method_8401 getWorldInfo - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1266; method_8404 getDifficultyForLocation - m ()Lnet/minecraft/class_1951; method_8405 getPendingFluidTicks -c net/minecraft/class_3747 net/minecraft/world/gen/IWorldGenerationReader -c net/minecraft/class_1940 net/minecraft/world/WorldSettings - m ()Z method_8583 isHardcoreEnabled - m ()Lnet/minecraft/class_1928; method_27341 getGameRules - m (Lnet/minecraft/class_1267;)Lnet/minecraft/class_1940; method_28381 setDifficulty - m ()Lnet/minecraft/class_1940; method_28385 clone - m ()Z method_8582 isCommandsAllowed - m (Lcom/mojang/serialization/Dynamic;Lnet/minecraft/class_5359;)Lnet/minecraft/class_1940; method_28383 decodeWorldSettings - m (Lnet/minecraft/class_1934;)Lnet/minecraft/class_1940; method_28382 setGameType - m (Lnet/minecraft/class_5359;)Lnet/minecraft/class_1940; method_29557 setDatapackCodec - m ()Lnet/minecraft/class_1267; method_27340 getDifficulty - m ()Ljava/lang/String; method_27339 getWorldName - m (Ljava/lang/Number;)Lnet/minecraft/class_1267; method_28384 func_234952_a_ - m ()Lnet/minecraft/class_1934; method_8574 getGameType - m ()Lnet/minecraft/class_5359; method_29558 getDatapackCodec - f Lnet/minecraft/class_1934; field_9257 gameType - f Lnet/minecraft/class_5359; field_25403 datapackCodec - f Lnet/minecraft/class_1928; field_24107 gameRules - f Z field_9262 hardcoreEnabled - f Lnet/minecraft/class_1267; field_24106 difficulty - f Z field_9261 commandsAllowed - f Ljava/lang/String; field_24105 worldName -c net/minecraft/class_3746 net/minecraft/world/gen/IWorldGenerationBaseReader - m (Lnet/minecraft/class_2338;Ljava/util/function/Predicate;)Z method_16358 hasBlockState - m (Lnet/minecraft/class_2902$class_2903;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2338; method_8598 getHeight -c net/minecraft/class_1945 net/minecraft/world/IWorldWriter - m (Lnet/minecraft/class_2338;ZLnet/minecraft/class_1297;I)Z method_30093 destroyBlock - m (Lnet/minecraft/class_2338;ZLnet/minecraft/class_1297;)Z method_8651 destroyBlock - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;II)Z method_30092 setBlockState - m (Lnet/minecraft/class_1297;)Z method_8649 addEntity - m (Lnet/minecraft/class_2338;Z)Z method_8650 removeBlock - m (Lnet/minecraft/class_2338;Z)Z method_22352 destroyBlock - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;I)Z method_8652 setBlockState -c net/minecraft/class_5424 net/minecraft/world/IDayTimeReader - m ()J method_30271 func_241851_ab - m (F)F method_30274 func_242415_f - m ()I method_30273 getMoonPhase - m ()F method_30272 getMoonFactor -c net/minecraft/class_1948 net/minecraft/world/spawner/WorldEntitySpawner - m (Lnet/minecraft/class_1311;Lnet/minecraft/class_3218;Lnet/minecraft/class_2791;Lnet/minecraft/class_2338;Lnet/minecraft/class_1948$class_5261;Lnet/minecraft/class_1948$class_5259;)V method_24930 func_234966_a_ - m (I)[Lnet/minecraft/class_1311; method_27814 func_234963_a_ - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;Lnet/minecraft/class_1299;)Z method_8662 func_234968_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1299;)Lnet/minecraft/class_1308; method_24931 func_234973_a_ - m (Lnet/minecraft/class_1311;)Z method_27816 func_234965_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2818;Lnet/minecraft/class_1948$class_5262;ZZZ)V method_27821 func_234979_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2791;Lnet/minecraft/class_2338$class_2339;D)Z method_24933 func_234978_a_ - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_1299;II)Lnet/minecraft/class_2338; method_8658 getTopSolidOrLiquidBlock - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1311;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_5483$class_1964;Lnet/minecraft/class_2338$class_2339;D)Z method_24934 func_234975_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_1311;Ljava/util/Random;Lnet/minecraft/class_2338;)Lnet/minecraft/class_5483$class_1964; method_8664 func_234977_a_ - m (Lnet/minecraft/class_1317$class_1319;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_8660 canCreatureTypeSpawnAtLocation - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_1311;Lnet/minecraft/class_5483$class_1964;Lnet/minecraft/class_2338;)Z method_8659 func_234976_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_1308;D)Z method_24932 func_234974_a_ - m (Lnet/minecraft/class_5425;Lnet/minecraft/class_1959;IILjava/util/Random;)V method_8661 performWorldGenSpawning - m (Lnet/minecraft/class_1311;Lnet/minecraft/class_3218;Lnet/minecraft/class_2818;Lnet/minecraft/class_1948$class_5261;Lnet/minecraft/class_1948$class_5259;)V method_8663 func_234967_a_ - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_1311;Lnet/minecraft/class_2338;Lnet/minecraft/class_1959;)Ljava/util/List; method_29950 func_241463_a_ - m ()I method_27813 func_234962_a_ - m (ILjava/lang/Iterable;Lnet/minecraft/class_1948$class_5260;)Lnet/minecraft/class_1948$class_5262; method_27815 func_234964_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Lnet/minecraft/class_1959; method_27820 func_234972_a_ - m (Lnet/minecraft/class_1948$class_5262;Lnet/minecraft/class_1299;Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Z method_27817 func_234969_a_ - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2818;)Lnet/minecraft/class_2338; method_8657 getRandomHeight - m (Lnet/minecraft/class_1948$class_5262;Lnet/minecraft/class_1308;Lnet/minecraft/class_2791;)V method_27818 func_234970_a_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Lnet/minecraft/class_1959; method_27822 func_234980_b_ - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;Lnet/minecraft/class_5263;Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap;Lnet/minecraft/class_1311;Lnet/minecraft/class_2818;)V method_27819 func_234971_a_ - f [Lnet/minecraft/class_1311; field_24393 field_234961_c_ - f Lorg/apache/logging/log4j/Logger; field_9292 LOGGER - f I field_24392 field_234960_b_ -c net/minecraft/class_1948$1 net/minecraft/world/spawner/WorldEntitySpawner$1 - f [I field_9293 field_210772_a -c net/minecraft/class_1948$class_5261 net/minecraft/world/spawner/WorldEntitySpawner$IDensityCheck - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Z test test -c net/minecraft/class_1948$class_5262 net/minecraft/world/spawner/WorldEntitySpawner$EntityDensityManager - m ()I method_27823 func_234988_a_ - m ()Lit/unimi/dsi/fastutil/objects/Object2IntMap; method_27830 func_234995_b_ - m (Lnet/minecraft/class_1948$class_5262;Lnet/minecraft/class_1308;Lnet/minecraft/class_2791;)V method_27828 func_234993_a_ - m (Lnet/minecraft/class_1311;)Z method_27826 func_234991_a_ - m (Lnet/minecraft/class_1948$class_5262;Lnet/minecraft/class_1299;Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Z method_27827 func_234992_a_ - m (Lnet/minecraft/class_1948$class_5262;Lnet/minecraft/class_1311;)Z method_27829 func_234994_a_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_2338;Lnet/minecraft/class_2791;)Z method_27824 func_234989_a_ - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2791;)V method_27825 func_234990_a_ - f D field_24400 field_234987_g_ - f I field_24394 field_234981_a_ - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_24397 field_234984_d_ - f Lnet/minecraft/class_2338; field_24398 field_234985_e_ - f Lnet/minecraft/class_1299; field_24399 field_234986_f_ - f Lnet/minecraft/class_5263; field_24396 field_234983_c_ - f Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap; field_24395 field_234982_b_ -c net/minecraft/class_1948$class_5259 net/minecraft/world/spawner/WorldEntitySpawner$IOnSpawnDensityAdder - m (Lnet/minecraft/class_1308;Lnet/minecraft/class_2791;)V run run -c net/minecraft/class_1948$class_5260 net/minecraft/world/spawner/WorldEntitySpawner$IInitialDensityAdder - m (JLjava/util/function/Consumer;)V query query -c net/minecraft/class_1944 net/minecraft/world/LightType - m (Ljava/lang/String;)Lnet/minecraft/class_1944; valueOf valueOf - m ()[Lnet/minecraft/class_1944; values values - f Lnet/minecraft/class_1944; field_9282 BLOCK - f Lnet/minecraft/class_1944; field_9284 SKY - f [Lnet/minecraft/class_1944; field_9285 $VALUES - f I field_9283 defaultLightValue -c net/minecraft/class_1950 net/minecraft/world/Region - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2791; method_22354 getChunk - m (II)Lnet/minecraft/class_2791; method_22353 getChunk - f I field_9303 chunkZ - f I field_9304 chunkX - f [[Lnet/minecraft/class_2791; field_9305 chunks - f Lnet/minecraft/class_1937; field_9306 world - f Z field_9302 empty -c net/minecraft/class_4966 net/minecraft/world/Blockreader - f [Lnet/minecraft/class_2680; field_23143 states -c net/minecraft/class_5425 net/minecraft/world/IServerWorld - m ()Lnet/minecraft/class_3218; method_8410 getWorld - m (Lnet/minecraft/class_1297;)V method_30771 func_242417_l -c net/minecraft/class_5263 net/minecraft/world/spawner/MobDensityTracker - m (Lnet/minecraft/class_2338;D)V method_27831 func_234998_a_ - m (Lnet/minecraft/class_2338;D)D method_27832 func_234999_b_ - f Ljava/util/List; field_24401 field_234997_a_ -c net/minecraft/class_5263$class_5264 net/minecraft/world/spawner/MobDensityTracker$DensityEntry - m (Lnet/minecraft/class_2338;)D method_27833 func_235002_a_ - f D field_24403 field_235001_b_ - f Lnet/minecraft/class_2338; field_24402 field_235000_a_ -c net/minecraft/class_1952 net/minecraft/util/WeightedSpawnerEntity - m ()Lnet/minecraft/class_2487; method_8678 getNbt - m ()Lnet/minecraft/class_2487; method_8679 toCompoundTag - f Lnet/minecraft/class_2487; field_9307 nbt -c net/minecraft/class_1949 net/minecraft/world/server/ServerTickList - m (Lnet/minecraft/class_1923;ZZ)Ljava/util/List; method_8671 getPending - m (Ljava/util/List;Ljava/util/Collection;Lnet/minecraft/class_3341;Z)Ljava/util/List; method_20596 getEntries - m ()V method_8670 tick - m (Lnet/minecraft/class_1954;)V method_20514 addEntry - m (Lnet/minecraft/class_3341;ZZ)Ljava/util/List; method_8672 getPending - m (Lnet/minecraft/class_3341;Lnet/minecraft/class_2338;)V method_8666 copyTicks - m (Lnet/minecraft/class_1923;)Lnet/minecraft/class_2499; method_8669 func_219503_a - m (Ljava/util/function/Function;Ljava/lang/Iterable;J)Lnet/minecraft/class_2499; method_20469 func_219502_a - m ()I method_20825 func_225420_a - f Ljava/util/List; field_19338 entriesRunThisTick - f Ljava/util/function/Consumer; field_9300 tickFunction - f Lnet/minecraft/class_3218; field_9301 world - f Ljava/util/function/Predicate; field_9297 filter - f Ljava/util/function/Function; field_9294 serializer - f Ljava/util/TreeSet; field_19341 pendingTickListEntriesTreeSet - f Ljava/util/Queue; field_9299 pendingTickListEntriesThisTick - f Ljava/util/Set; field_9296 pendingTickListEntriesHashSet -c net/minecraft/class_1951 net/minecraft/world/ITickList - m (Lnet/minecraft/class_2338;Ljava/lang/Object;I)V method_8676 scheduleTick - m (Lnet/minecraft/class_2338;Ljava/lang/Object;ILnet/minecraft/class_1953;)V method_8675 scheduleTick - m (Lnet/minecraft/class_2338;Ljava/lang/Object;)Z method_8674 isTickScheduled - m (Lnet/minecraft/class_2338;Ljava/lang/Object;)Z method_8677 isTickPending -c net/minecraft/class_5138 net/minecraft/world/gen/feature/structure/StructureManager - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3449;)Z method_28387 func_235009_a_ - m (Lnet/minecraft/class_3233;)Lnet/minecraft/class_5138; method_29951 getStructureManager - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_3443;)Z method_28386 func_235008_a_ - m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3195;Lnet/minecraft/class_3449;Lnet/minecraft/class_2810;)V method_26976 addStructureStart - m (Lnet/minecraft/class_3449;)Z method_26972 func_235007_a_ - m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3195;JLnet/minecraft/class_2810;)V method_26973 addReference - m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3195;Lnet/minecraft/class_2810;)Lnet/minecraft/class_3449; method_26975 getStructureStart - m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3195;)Ljava/util/stream/Stream; method_26974 func_235011_a_ - m (Lnet/minecraft/class_2338;ZLnet/minecraft/class_3195;)Lnet/minecraft/class_3449; method_28388 getStructureStart - m (Ljava/lang/Long;)Lnet/minecraft/class_4076; method_26977 func_235015_a_ - m ()Z method_27834 canGenerateFeatures - m (ZLnet/minecraft/class_2338;Lnet/minecraft/class_3449;)Z method_28389 func_235016_a_ - m (Lnet/minecraft/class_3195;Lnet/minecraft/class_4076;)Lnet/minecraft/class_3449; method_26971 func_235006_a_ - f Lnet/minecraft/class_5285; field_24497 settings - f Lnet/minecraft/class_1936; field_24404 world -c net/minecraft/class_1953 net/minecraft/world/TickPriority - m ()[Lnet/minecraft/class_1953; values values - m ()I method_8681 getPriority - m (I)Lnet/minecraft/class_1953; method_8680 getPriority - m (Ljava/lang/String;)Lnet/minecraft/class_1953; valueOf valueOf - f Lnet/minecraft/class_1953; field_9313 VERY_HIGH - f I field_9308 priority - f [Lnet/minecraft/class_1953; field_9312 $VALUES - f Lnet/minecraft/class_1953; field_9310 HIGH - f Lnet/minecraft/class_1953; field_9314 NORMAL - f Lnet/minecraft/class_1953; field_9316 LOW - f Lnet/minecraft/class_1953; field_9309 VERY_LOW - f Lnet/minecraft/class_1953; field_9315 EXTREMELY_HIGH - f Lnet/minecraft/class_1953; field_9311 EXTREMELY_LOW -c net/minecraft/class_1954 net/minecraft/world/NextTickListEntry - m ()Ljava/lang/Object; method_8683 getTarget - m (Lnet/minecraft/class_1954;)J method_21837 func_226710_c_ - m (Ljava/lang/Object;)Z equals equals - m ()Ljava/util/Comparator; method_20597 func_223192_a - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_1954;)Lnet/minecraft/class_1953; method_21836 func_226709_b_ - m (Lnet/minecraft/class_1954;)J method_21835 func_226708_a_ - m ()I hashCode hashCode - f J field_9318 tickEntryID - f Lnet/minecraft/class_2338; field_9322 position - f Ljava/lang/Object; field_9317 target - f J field_9321 field_235017_b_ - f Lnet/minecraft/class_1953; field_9320 priority - f J field_9319 nextTickEntryID -c net/minecraft/class_4967 net/minecraft/world/biome/SoundAdditionsAmbience - m (Lnet/minecraft/class_4967;)Ljava/lang/Double; method_28390 func_235022_a_ - m (Lnet/minecraft/class_4967;)Lnet/minecraft/class_3414; method_28392 func_235025_b_ - m ()D method_26099 getChancePerTick - m ()Lnet/minecraft/class_3414; method_26098 getSound - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28391 func_235023_a_ - f Lnet/minecraft/class_3414; field_23144 sound - f Lcom/mojang/serialization/Codec; field_24673 CODEC - f D field_23145 tickChance -c net/minecraft/class_5281 net/minecraft/world/ISeedReader - m (Lnet/minecraft/class_4076;Lnet/minecraft/class_3195;)Ljava/util/stream/Stream; method_30275 func_241827_a - m ()J method_8412 getSeed -c net/minecraft/class_4761 net/minecraft/world/biome/ParticleEffectAmbience - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28399 func_235046_a_ - m (Lnet/minecraft/class_4761;)Ljava/lang/Float; method_28398 func_235045_a_ - m (Lnet/minecraft/class_4761;)Lnet/minecraft/class_2394; method_28400 func_235048_b_ - m ()Lnet/minecraft/class_2394; method_24369 getParticleOptions - m (Ljava/util/Random;)Z method_24370 shouldParticleSpawn - f F field_22035 probability - f Lcom/mojang/serialization/Codec; field_24675 CODEC - f Lnet/minecraft/class_2394; field_24676 particleOptions -c net/minecraft/class_4968 net/minecraft/world/biome/MoodSoundAmbience - m (Lnet/minecraft/class_4968;)Ljava/lang/Integer; method_28395 func_235036_b_ - m ()D method_26103 getOffset - m ()I method_26101 getTickDelay - m (Lnet/minecraft/class_4968;)Ljava/lang/Integer; method_28396 func_235038_c_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28394 func_235034_a_ - m (Lnet/minecraft/class_4968;)Lnet/minecraft/class_3414; method_28397 func_235040_d_ - m ()I method_26102 getSearchRadius - m ()Lnet/minecraft/class_3414; method_26100 getSound - m (Lnet/minecraft/class_4968;)Ljava/lang/Double; method_28393 func_235033_a_ - f I field_23149 searchRadius - f D field_23150 offset - f Lcom/mojang/serialization/Codec; field_24674 CODEC - f I field_23148 tickDelay - f Lnet/minecraft/class_3414; field_23147 sound - f Lnet/minecraft/class_4968; field_23146 DEFAULT_CAVE -c net/minecraft/class_5485 net/minecraft/world/biome/BiomeGenerationSettings - m ()Lnet/minecraft/class_3531; method_30985 getSurfaceBuilderConfig - m (Lnet/minecraft/class_3195;)Z method_30980 hasStructure - m (Lnet/minecraft/class_5485;)Ljava/util/function/Supplier; method_30809 func_242501_d - m (Lnet/minecraft/class_2975;)Z method_30977 func_242490_a - m ()Lnet/minecraft/class_3504; method_30986 func_242503_f - m (Lnet/minecraft/class_2893$class_2894;)Ljava/util/List; method_30976 getCarvers - m ()Ljava/util/List; method_30982 getFlowerFeatures - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30802 func_242495_a - m ()Ljava/util/List; method_30983 getFeatures - m (Lnet/minecraft/class_5312;)Lnet/minecraft/class_5312; method_30978 getStructure - m (Lnet/minecraft/class_3195;Ljava/util/function/Supplier;)Z method_30981 func_242494_a - m ()Ljava/util/function/Supplier; method_30984 getSurfaceBuilder - m (Lnet/minecraft/class_5485;)Ljava/util/Map; method_30808 func_242499_c - m (Lnet/minecraft/class_5312;Lnet/minecraft/class_5312;)Z method_30979 func_242492_a - m (Lnet/minecraft/class_5485;)Ljava/util/List; method_30807 func_242497_b - m ()Ljava/util/Collection; method_30975 getStructures - m (Lnet/minecraft/class_5485;)Ljava/util/List; method_30806 func_242488_a - f Lorg/apache/logging/log4j/Logger; field_26638 LOGGER - f Lnet/minecraft/class_5485; field_26639 DEFAULT_SETTINGS - f Ljava/util/List; field_26416 features - f Ljava/util/function/Supplier; field_26414 surfaceBuilder - f Ljava/util/List; field_26640 flowerFeatures - f Ljava/util/List; field_26417 structures - f Ljava/util/Map; field_26415 carvers - f Lcom/mojang/serialization/MapCodec; field_26413 CODEC -c net/minecraft/class_5485$1 net/minecraft/world/biome/BiomeGenerationSettings$1 -c net/minecraft/class_5485$class_5495 net/minecraft/world/biome/BiomeGenerationSettings$Builder - m (ILjava/util/function/Supplier;)Lnet/minecraft/class_5485$class_5495; method_30989 withFeature - m (Lnet/minecraft/class_2893$class_2894;)Ljava/util/List; method_30990 func_242511_a - m ()Ljava/lang/IllegalStateException; method_30999 func_242520_b - m (Lnet/minecraft/class_5312;)Lnet/minecraft/class_5485$class_5495; method_30995 withStructure - m (Lnet/minecraft/class_2922;)Lnet/minecraft/class_2922; method_30993 func_242514_a - m (Ljava/util/function/Supplier;)Lnet/minecraft/class_5485$class_5495; method_30998 withSurfaceBuilder - m (Lnet/minecraft/class_3504;)Lnet/minecraft/class_3504; method_31001 func_242522_b - m (I)V method_30988 populateStageEntries - m (Lnet/minecraft/class_2893$class_2894;Lnet/minecraft/class_2922;)Lnet/minecraft/class_5485$class_5495; method_30991 withCarver - m (Lnet/minecraft/class_3504;)Lnet/minecraft/class_5485$class_5495; method_30996 withSurfaceBuilder - m (Lnet/minecraft/class_2975;)Lnet/minecraft/class_2975; method_30994 func_242515_a - m ()Lnet/minecraft/class_5485; method_30987 build - m (Lnet/minecraft/class_2893$class_2895;Lnet/minecraft/class_2975;)Lnet/minecraft/class_5485$class_5495; method_30992 withFeature - m (Ljava/util/Map$Entry;)Ljava/util/List; method_30997 func_242518_a - m (Lnet/minecraft/class_5312;)Lnet/minecraft/class_5312; method_31000 func_242521_b - f Ljava/util/List; field_26644 structures - f Ljava/util/List; field_26643 features - f Ljava/util/Map; field_26642 carvers - f Ljava/util/Optional; field_26641 surfaceBuilder -c net/minecraft/class_1959 net/minecraft/world/biome/Biome - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_1959;)Ljava/lang/Float; method_28420 func_235085_m_ - m ()I method_8698 getFoliageColor - m ()Lnet/minecraft/class_5483; method_30966 getMobSpawnInfo - m ()Lit/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap; method_21741 func_242450_x - m ()Lnet/minecraft/class_3543; method_30772 func_242447_u - m ()F method_8715 getDownfall - m (Lnet/minecraft/class_3195;)Ljava/lang/String; method_28406 func_242431_a - m (Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_3233;JLnet/minecraft/class_2919;Lnet/minecraft/class_2338;)V method_8702 generateFeatures - m ()Lnet/minecraft/class_1959$class_1961; method_8688 getCategory - m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959$class_1961; method_28422 func_235087_o_ - m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959$class_5482; method_28423 func_242446_l - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_8696 doesSnowGenerate - m ()Ljava/util/Optional; method_24937 getAdditionalAmbientSound - m ()Ljava/util/Optional; method_24935 getAmbientSound - m (Lnet/minecraft/class_1959;)Ljava/lang/Float; method_30968 func_242438_c - m ()I method_8697 getSkyColor - m ()I method_30773 getGrassColorByClimate - m ()Lnet/minecraft/class_1959$class_1963; method_8694 getPrecipitation - m ()Lnet/minecraft/class_5485; method_30970 getGenerationSettings - m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_4763; method_28417 func_242444_h - m (Lnet/minecraft/class_2975;)Ljava/lang/String; method_23348 func_242430_a - m ()Ljava/util/Optional; method_27343 getBackgroundMusic - m ()Lnet/minecraft/class_4763; method_24377 getAmbience - m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_5483; method_28409 func_242442_f - m (Lnet/minecraft/class_2338;)F method_8707 getTemperatureAtPosition - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30963 func_242432_a - m ()I method_8713 getWaterFogColor - m (Lnet/minecraft/class_1959;)Ljava/lang/Float; method_28421 func_235086_n_ - m (Ljava/util/Random;Lnet/minecraft/class_2791;IIIDLnet/minecraft/class_2680;Lnet/minecraft/class_2680;IJ)V method_8703 buildSurface - m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_5485; method_28418 func_242443_g - m ()Lit/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap; method_21742 func_242451_y - m ()F method_8695 getDepth - m (Lnet/minecraft/class_3233;Lnet/minecraft/class_5138;Lnet/minecraft/class_2794;Lnet/minecraft/class_2919;IIIILnet/minecraft/class_3449;)V method_28401 func_242426_a - m ()I method_24376 getFogColor - m ()Z method_8724 isHighHumidity - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_8705 doesWaterFreeze - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Z)Z method_8685 doesWaterFreeze - m ()F method_8686 getScale - m (DD)I method_8711 getGrassColor - m ()I method_30774 getFoliageColorByClimate - m ()Ljava/util/Optional; method_24936 getMoodSound - m ()Ljava/util/Optional; method_24378 getAmbientParticle - m (Lnet/minecraft/class_1959;)Ljava/lang/Float; method_30967 func_242434_b - m (Lnet/minecraft/class_3195;)Ljava/lang/Integer; method_30965 func_242435_b - m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959$class_5482; method_30971 func_242441_e - m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959$class_1961; method_30969 func_242439_d - m ()F method_8712 getTemperature - m (Lnet/minecraft/class_2338;)F method_21740 getTemperature - m ()I method_8687 getWaterColor - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30776 func_235064_b - m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_4763; method_30964 func_242429_a - m (Lnet/minecraft/class_1959$class_5482;Lnet/minecraft/class_1959$class_1961;Ljava/lang/Float;Ljava/lang/Float;Lnet/minecraft/class_4763;)Lnet/minecraft/class_1959; method_30961 func_242428_a - f F field_9341 scale - f Ljava/lang/ThreadLocal; field_20335 temperatureCache - f Lnet/minecraft/class_1959$class_1961; field_9329 category - f Lcom/mojang/serialization/Codec; field_25819 CODEC - f Lcom/mojang/serialization/Codec; field_24677 BIOME_CODEC - f Ljava/util/Map; field_26634 biomeStructures - f Lnet/minecraft/class_3543; field_26392 FROZEN_TEMPERATURE_NOISE - f Lnet/minecraft/class_5485; field_26635 biomeGenerationSettings - f F field_9343 depth - f Lnet/minecraft/class_3543; field_9324 INFO_NOISE - f Lorg/apache/logging/log4j/Logger; field_9330 LOGGER - f Lcom/mojang/serialization/Codec; field_26633 PACKET_CODEC - f Lnet/minecraft/class_1959$class_5482; field_26393 climate - f Lcom/mojang/serialization/Codec; field_26750 BIOMES_CODEC - f Lnet/minecraft/class_4763; field_22039 effects - f Lnet/minecraft/class_3543; field_9335 TEMPERATURE_NOISE - f Lnet/minecraft/class_5483; field_26395 mobSpawnInfo -c net/minecraft/class_1959$class_5482 net/minecraft/world/biome/Biome$Climate - m (Lnet/minecraft/class_1959$class_5482;)Lnet/minecraft/class_1959$class_5484; method_30783 func_242466_b - m (Lnet/minecraft/class_1959$class_5482;)Lnet/minecraft/class_1959$class_1963; method_30781 func_242464_a - m (Lnet/minecraft/class_1959$class_5482;)Lnet/minecraft/class_1959$class_1963; method_30789 func_242472_h - m (Lnet/minecraft/class_1959$class_5482;)F method_30785 func_242468_d - m (Lnet/minecraft/class_1959$class_5482;)Ljava/lang/Float; method_30788 func_242471_g - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30782 func_242465_a - m (Lnet/minecraft/class_1959$class_5482;)Lnet/minecraft/class_1959$class_5484; method_30787 func_242470_f - m (Lnet/minecraft/class_1959$class_5482;)F method_30784 func_242467_c - m (Lnet/minecraft/class_1959$class_5482;)Ljava/lang/Float; method_30786 func_242469_e - f Lcom/mojang/serialization/MapCodec; field_26398 CODEC - f Lnet/minecraft/class_1959$class_1963; field_26399 precipitation - f Lnet/minecraft/class_1959$class_5484; field_26401 temperatureModifier - f F field_26400 temperature - f F field_26402 downfall -c net/minecraft/class_1959$class_1963 net/minecraft/world/biome/Biome$RainType - m ()Ljava/lang/String; method_8752 getName - m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_1963; method_28431 getRainType - m (Lnet/minecraft/class_1959$class_1963;)Lnet/minecraft/class_1959$class_1963; method_8753 func_222360_a - m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_1963; valueOf valueOf - m ()[Lnet/minecraft/class_1959$class_1963; values values - f Ljava/lang/String; field_9385 name - f Lcom/mojang/serialization/Codec; field_24680 CODEC - f [Lnet/minecraft/class_1959$class_1963; field_9386 $VALUES - f Lnet/minecraft/class_1959$class_1963; field_9382 RAIN - f Lnet/minecraft/class_1959$class_1963; field_9383 SNOW - f Lnet/minecraft/class_1959$class_1963; field_9384 NONE - f Ljava/util/Map; field_9381 BY_NAME -c net/minecraft/class_1959$class_1961 net/minecraft/world/biome/Biome$Category - m ()[Lnet/minecraft/class_1959$class_1961; values values - m ()Ljava/lang/String; method_8749 getName - m (Lnet/minecraft/class_1959$class_1961;)Lnet/minecraft/class_1959$class_1961; method_8748 func_222353_a - m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_1961; valueOf valueOf - m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_1961; method_28424 byName - f Ljava/util/Map; field_9359 BY_NAME - f Lnet/minecraft/class_1959$class_1961; field_9366 NETHER - f [Lnet/minecraft/class_1959$class_1961; field_9373 $VALUES - f Lnet/minecraft/class_1959$class_1961; field_9365 MUSHROOM - f Ljava/lang/String; field_9372 name - f Lcom/mojang/serialization/Codec; field_24678 CODEC - f Lnet/minecraft/class_1959$class_1961; field_9367 OCEAN - f Lnet/minecraft/class_1959$class_1961; field_9363 BEACH - f Lnet/minecraft/class_1959$class_1961; field_9370 FOREST - f Lnet/minecraft/class_1959$class_1961; field_9369 RIVER - f Lnet/minecraft/class_1959$class_1961; field_9364 SWAMP - f Lnet/minecraft/class_1959$class_1961; field_9368 DESERT - f Lnet/minecraft/class_1959$class_1961; field_9355 PLAINS - f Lnet/minecraft/class_1959$class_1961; field_9356 SAVANNA - f Lnet/minecraft/class_1959$class_1961; field_9354 MESA - f Lnet/minecraft/class_1959$class_1961; field_9360 THEEND - f Lnet/minecraft/class_1959$class_1961; field_9362 ICY - f Lnet/minecraft/class_1959$class_1961; field_9371 NONE - f Lnet/minecraft/class_1959$class_1961; field_9358 JUNGLE - f Lnet/minecraft/class_1959$class_1961; field_9361 TAIGA - f Lnet/minecraft/class_1959$class_1961; field_9357 EXTREME_HILLS -c net/minecraft/class_1959$class_4762 net/minecraft/world/biome/Biome$Attributes - m ()I hashCode hashCode - m (Lnet/minecraft/class_1959$class_4762;)Ljava/lang/Float; method_28430 func_235116_f_ - m (Lnet/minecraft/class_1959$class_4762;)Ljava/lang/Float; method_28429 func_235115_e_ - m (Lnet/minecraft/class_1959$class_4762;)Ljava/lang/Float; method_28428 func_235114_d_ - m (Lnet/minecraft/class_1959$class_4762;)F method_24381 getAttributeDifference - m (Ljava/lang/Object;)Z equals equals - m (Lnet/minecraft/class_1959$class_4762;)Ljava/lang/Float; method_28427 func_235113_c_ - m (Lnet/minecraft/class_1959$class_4762;)Ljava/lang/Float; method_28426 func_235112_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28425 func_235111_a_ - f F field_22045 altitude - f F field_22044 humidity - f Lcom/mojang/serialization/Codec; field_24679 CODEC - f F field_22043 temperature - f F field_22047 offset - f F field_22046 weirdness -c net/minecraft/class_1959$class_5484 net/minecraft/world/biome/Biome$TemperatureModifier - m ()[Lnet/minecraft/class_1959$class_5484; values values - m ()Ljava/lang/String; method_30800 getName - m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_5484; method_30799 byName - m (Ljava/lang/String;)Lnet/minecraft/class_1959$class_5484; valueOf valueOf - m (Lnet/minecraft/class_2338;F)F method_30798 getTemperatureAtPosition - m (Lnet/minecraft/class_1959$class_5484;)Lnet/minecraft/class_1959$class_5484; method_30797 func_242476_a - f Lcom/mojang/serialization/Codec; field_26409 CODEC - f Ljava/util/Map; field_26411 NAME_TO_MODIFIER_MAP - f Ljava/lang/String; field_26410 name - f Lnet/minecraft/class_1959$class_5484; field_26407 NONE - f [Lnet/minecraft/class_1959$class_5484; field_26412 $VALUES - f Lnet/minecraft/class_1959$class_5484; field_26408 FROZEN -c net/minecraft/class_1959$class_5484$2 net/minecraft/world/biome/Biome$TemperatureModifier$2 -c net/minecraft/class_1959$class_5484$1 net/minecraft/world/biome/Biome$TemperatureModifier$1 -c net/minecraft/class_1959$1 net/minecraft/world/biome/Biome$1 - m (I)V rehash rehash - f Lnet/minecraft/class_1959; field_20336 field_225490_a -c net/minecraft/class_1959$class_1960 net/minecraft/world/biome/Biome$Builder - m (F)Lnet/minecraft/class_1959$class_1960; method_8740 depth - m (Lnet/minecraft/class_1959$class_1963;)Lnet/minecraft/class_1959$class_1960; method_8735 precipitation - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_1959$class_5484;)Lnet/minecraft/class_1959$class_1960; method_30777 withTemperatureModifier - m (F)Lnet/minecraft/class_1959$class_1960; method_8727 downfall - m (F)Lnet/minecraft/class_1959$class_1960; method_8743 scale - m (F)Lnet/minecraft/class_1959$class_1960; method_8747 temperature - m (Lnet/minecraft/class_5485;)Lnet/minecraft/class_1959$class_1960; method_30973 withGenerationSettings - m (Lnet/minecraft/class_1959$class_1961;)Lnet/minecraft/class_1959$class_1960; method_8738 category - m ()Lnet/minecraft/class_1959; method_30972 build - m (Lnet/minecraft/class_4763;)Lnet/minecraft/class_1959$class_1960; method_24379 setEffects - m (Lnet/minecraft/class_5483;)Lnet/minecraft/class_1959$class_1960; method_30974 withMobSpawnSettings - f Lnet/minecraft/class_5485; field_26637 generationSettings - f Ljava/lang/Float; field_9344 depth - f Ljava/lang/Float; field_9348 scale - f Lnet/minecraft/class_1959$class_1961; field_9345 category - f Lnet/minecraft/class_1959$class_1963; field_9346 precipitation - f Lnet/minecraft/class_1959$class_5484; field_26396 temperatureModifier - f Lnet/minecraft/class_5483; field_26636 mobSpawnSettings - f Ljava/lang/Float; field_9349 temperature - f Lnet/minecraft/class_4763; field_22042 effects - f Ljava/lang/Float; field_9351 downfall -c net/minecraft/class_1966 net/minecraft/world/biome/provider/BiomeProvider - m (J)Lnet/minecraft/class_1966; method_27985 getBiomeProvider - m (IIIILjava/util/function/Predicate;Ljava/util/Random;)Lnet/minecraft/class_2338; method_8762 findBiomePosition - m (Lnet/minecraft/class_3195;)Z method_8754 hasStructure - m (IIIIILjava/util/function/Predicate;Ljava/util/Random;Z)Lnet/minecraft/class_2338; method_24385 findBiomePosition - m (Lnet/minecraft/class_3195;)Ljava/lang/Boolean; method_22395 func_226839_b_ - m (Lnet/minecraft/class_3195;Lnet/minecraft/class_1959;)Z method_22394 func_226838_a_ - m ()Ljava/util/List; method_28443 getBiomes - m (IIII)Ljava/util/Set; method_8763 getBiomes - m ()Lcom/mojang/serialization/Codec; method_28442 getBiomeProviderCodec - m ()Ljava/util/Set; method_8761 getSurfaceBlocks - f Ljava/util/Map; field_9392 hasStructureCache - f Ljava/util/Set; field_9390 topBlocksCache - f Lcom/mojang/serialization/Codec; field_24713 CODEC - f Ljava/util/List; field_20643 biomes -c net/minecraft/class_4543 net/minecraft/world/biome/BiomeManager - m (III)Lnet/minecraft/class_1959; method_24854 getBiomeAtPosition - m (J)J method_27984 getHashedSeed - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1959; method_27344 getBiomeAtPosition - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_1959; method_22393 getBiome - m (Lnet/minecraft/class_1966;)Lnet/minecraft/class_4543; method_22392 copyWithProvider - m (DDD)Lnet/minecraft/class_1959; method_24938 getBiomeAtPosition - f Lnet/minecraft/class_4545; field_20642 magnifier - f Lnet/minecraft/class_4543$class_4544; field_20640 reader - f J field_20641 seed -c net/minecraft/class_4543$class_4544 net/minecraft/world/biome/BiomeManager$IBiomeReader - m (III)Lnet/minecraft/class_1959; method_16359 getNoiseBiome -c net/minecraft/class_4545 net/minecraft/world/biome/IBiomeMagnifier - m (JIIILnet/minecraft/class_4543$class_4544;)Lnet/minecraft/class_1959; method_22396 getBiome -c net/minecraft/class_4763 net/minecraft/world/biome/BiomeAmbience - m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_28448 func_235221_d_ - m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_28447 func_235219_c_ - m ()Lnet/minecraft/class_4763$class_5486; method_30814 getGrassColorModifier - m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_30815 func_244426_c - m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_28449 func_235223_a_ - m ()Ljava/util/Optional; method_30812 getGrassColor - m (Lnet/minecraft/class_4763;)Lnet/minecraft/class_4763$class_5486; method_30813 func_242530_f - m ()Ljava/util/Optional; method_30811 getFoliageColor - m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_28446 func_235217_b_ - m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_28444 func_244420_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28445 func_235215_a_ - m (Lnet/minecraft/class_4763;)Ljava/lang/Integer; method_28452 func_235229_h_ - m ()I method_30810 getSkyColor - m (Lnet/minecraft/class_4763;)Ljava/lang/Integer; method_28451 func_235227_g_ - m ()Ljava/util/Optional; method_24941 getAdditionsSound - m ()Ljava/util/Optional; method_24940 getMoodSound - m (Lnet/minecraft/class_4763;)Ljava/lang/Integer; method_30817 func_242532_i - m ()Ljava/util/Optional; method_24939 getAmbientSound - m ()Ljava/util/Optional; method_24390 getParticle - m (Lnet/minecraft/class_4763;)Ljava/lang/Integer; method_28450 func_235225_f_ - m (Lnet/minecraft/class_4763;)Ljava/util/Optional; method_30816 func_244421_d_ - m ()I method_24387 getFogColor - m ()I method_24389 getWaterFogColor - m ()Ljava/util/Optional; method_27345 getMusic - m ()I method_24388 getWaterColor - f Ljava/util/Optional; field_22491 ambientSound - f Ljava/util/Optional; field_22070 particle - f Ljava/util/Optional; field_26420 grassColor - f Lnet/minecraft/class_4763$class_5486; field_26421 grassColorModifier - f Ljava/util/Optional; field_26419 foliageColor - f Ljava/util/Optional; field_22493 additionsSound - f Ljava/util/Optional; field_24113 music - f Ljava/util/Optional; field_22492 moodSound - f I field_22068 waterColor - f I field_22067 fogColor - f Lcom/mojang/serialization/Codec; field_24714 CODEC - f I field_22069 waterFogColor - f I field_26418 skyColor -c net/minecraft/class_4763$1 net/minecraft/world/biome/BiomeAmbience$1 -c net/minecraft/class_4763$class_4764 net/minecraft/world/biome/BiomeAmbience$Builder - m (I)Lnet/minecraft/class_4763$class_4764; method_24392 setFogColor - m ()Ljava/lang/IllegalStateException; method_24398 func_235249_d_ - m ()Ljava/lang/IllegalStateException; method_24396 func_235247_c_ - m ()Ljava/lang/IllegalStateException; method_24394 func_235245_b_ - m ()Ljava/lang/IllegalStateException; method_30819 func_242538_b - m ()Lnet/minecraft/class_4763; method_24391 build - m (Lnet/minecraft/class_4968;)Lnet/minecraft/class_4763$class_4764; method_24943 setMoodSound - m (Lnet/minecraft/class_4763$class_5486;)Lnet/minecraft/class_4763$class_4764; method_30818 withGrassColorModifier - m (Lnet/minecraft/class_5195;)Lnet/minecraft/class_4763$class_4764; method_27346 setMusic - m (Lnet/minecraft/class_3414;)Lnet/minecraft/class_4763$class_4764; method_24942 setAmbientSound - m (Lnet/minecraft/class_4761;)Lnet/minecraft/class_4763$class_4764; method_24393 setParticle - m (I)Lnet/minecraft/class_4763$class_4764; method_30822 withGrassColor - m (I)Lnet/minecraft/class_4763$class_4764; method_30821 withFoliageColor - m (I)Lnet/minecraft/class_4763$class_4764; method_30820 withSkyColor - m (I)Lnet/minecraft/class_4763$class_4764; method_24397 setWaterFogColor - m (Lnet/minecraft/class_4967;)Lnet/minecraft/class_4763$class_4764; method_24944 setAdditionsSound - m (I)Lnet/minecraft/class_4763$class_4764; method_24395 setWaterColor - f Ljava/util/Optional; field_22074 particle - f Ljava/util/Optional; field_26423 foliageColor - f Ljava/util/Optional; field_26424 grassColor - f Lnet/minecraft/class_4763$class_5486; field_26425 grassColorModifier - f Ljava/util/OptionalInt; field_26422 skyColor - f Ljava/util/OptionalInt; field_22071 fogColor - f Ljava/util/OptionalInt; field_22072 waterColor - f Ljava/util/OptionalInt; field_22073 waterFogColor - f Ljava/util/Optional; field_24114 music - f Ljava/util/Optional; field_22494 ambientSound - f Ljava/util/Optional; field_22495 moodSound - f Ljava/util/Optional; field_22496 additionsSound -c net/minecraft/class_4763$class_5486 net/minecraft/world/biome/BiomeAmbience$GrassColorModifier - m ()Ljava/lang/String; method_30826 getName - m (Ljava/lang/String;)Lnet/minecraft/class_4763$class_5486; method_30825 byName - m (Ljava/lang/String;)Lnet/minecraft/class_4763$class_5486; valueOf valueOf - m (DDI)I method_30823 getModifiedGrassColor - m ()[Lnet/minecraft/class_4763$class_5486; values values - m (Lnet/minecraft/class_4763$class_5486;)Lnet/minecraft/class_4763$class_5486; method_30824 func_242545_a - f Lcom/mojang/serialization/Codec; field_26429 CODEC - f Ljava/lang/String; field_26430 name - f [Lnet/minecraft/class_4763$class_5486; field_26432 $VALUES - f Lnet/minecraft/class_4763$class_5486; field_26428 SWAMP - f Lnet/minecraft/class_4763$class_5486; field_26427 DARK_FOREST - f Ljava/util/Map; field_26431 NAME_TO_MODIFIER_MAP - f Lnet/minecraft/class_4763$class_5486; field_26426 NONE -c net/minecraft/class_4763$class_5486$2 net/minecraft/world/biome/BiomeAmbience$GrassColorModifier$2 -c net/minecraft/class_4763$class_5486$3 net/minecraft/world/biome/BiomeAmbience$GrassColorModifier$3 -c net/minecraft/class_4763$class_5486$1 net/minecraft/world/biome/BiomeAmbience$GrassColorModifier$1 -c net/minecraft/class_1973 net/minecraft/world/biome/provider/CheckerboardBiomeProvider - m (Lnet/minecraft/class_1973;)Ljava/util/List; method_28455 func_235259_b_ - m (Lnet/minecraft/class_1973;)Ljava/lang/Integer; method_28453 func_235257_a_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28454 func_235258_a_ - f Ljava/util/List; field_9481 biomeList - f I field_24716 biomeScale - f Lcom/mojang/serialization/Codec; field_24715 CODEC - f I field_9480 biomeScaleShift -c net/minecraft/class_1972 net/minecraft/world/biome/Biomes - m (Ljava/lang/String;)Lnet/minecraft/class_5321; method_8775 makeKey - f Lnet/minecraft/class_5321; field_9431 TALL_BIRCH_FOREST - f Lnet/minecraft/class_5321; field_9411 THE_END - f Lnet/minecraft/class_5321; field_9450 DARK_FOREST_HILLS - f Lnet/minecraft/class_5321; field_9467 COLD_OCEAN - f Lnet/minecraft/class_5321; field_9420 TAIGA - f Lnet/minecraft/class_5321; field_9426 MODIFIED_JUNGLE - f Lnet/minecraft/class_5321; field_9442 END_HIGHLANDS - f Lnet/minecraft/class_5321; field_9438 RIVER - f Lnet/minecraft/class_5321; field_9408 WARM_OCEAN - f Lnet/minecraft/class_5321; field_9446 DEEP_OCEAN - f Lnet/minecraft/class_5321; field_9472 MOUNTAINS - f Lnet/minecraft/class_5321; field_9457 SMALL_END_ISLANDS - f Lnet/minecraft/class_5321; field_9479 SWAMP_HILLS - f Lnet/minecraft/class_5321; field_9427 DESERT_LAKES - f Lnet/minecraft/class_5321; field_9432 JUNGLE_HILLS - f Lnet/minecraft/class_5321; field_9468 BAMBOO_JUNGLE_HILLS - f Lnet/minecraft/class_5321; field_9451 PLAINS - f Lnet/minecraft/class_5321; field_9414 FLOWER_FOREST - f Lnet/minecraft/class_5321; field_22077 CRIMSON_FOREST - f Lnet/minecraft/class_5321; field_9410 WOODED_BADLANDS_PLATEAU - f Lnet/minecraft/class_5321; field_9428 TAIGA_HILLS - f Lnet/minecraft/class_5321; field_9449 SAVANNA - f Lnet/minecraft/class_5321; field_9455 SUNFLOWER_PLAINS - f Lnet/minecraft/class_5321; field_9440 BAMBOO_JUNGLE - f Lnet/minecraft/class_5321; field_9425 SNOWY_TAIGA_HILLS - f Lnet/minecraft/class_5321; field_9445 SHATTERED_SAVANNA_PLATEAU - f Lnet/minecraft/class_5321; field_9466 DESERT_HILLS - f Lnet/minecraft/class_5321; field_9413 MODIFIED_WOODED_BADLANDS_PLATEAU - f Lnet/minecraft/class_5321; field_9429 GIANT_TREE_TAIGA_HILLS - f Lnet/minecraft/class_5321; field_9444 SNOWY_MOUNTAINS - f Lnet/minecraft/class_5321; field_9436 MODIFIED_GRAVELLY_MOUNTAINS - f Lnet/minecraft/class_5321; field_9418 DEEP_FROZEN_OCEAN - f Lnet/minecraft/class_5321; field_9475 DARK_FOREST - f Lnet/minecraft/class_5321; field_9407 MUSHROOM_FIELD_SHORE - f Lnet/minecraft/class_5321; field_9463 FROZEN_RIVER - f Lnet/minecraft/class_5321; field_9439 DEEP_LUKEWARM_OCEAN - f Lnet/minecraft/class_5321; field_9412 BIRCH_FOREST - f Lnet/minecraft/class_5321; field_9416 GIANT_SPRUCE_TAIGA - f Lnet/minecraft/class_5321; field_9461 NETHER_WASTES - f Lnet/minecraft/class_5321; field_9441 LUKEWARM_OCEAN - f Lnet/minecraft/class_5321; field_23859 BASALT_DELTAS - f Lnet/minecraft/class_5321; field_9435 FROZEN_OCEAN - f Lnet/minecraft/class_5321; field_9458 TALL_BIRCH_HILLS - f Lnet/minecraft/class_5321; field_9471 SWAMP - f Lnet/minecraft/class_5321; field_9453 ICE_SPIKES - f Lnet/minecraft/class_5321; field_9465 END_BARRENS - f Lnet/minecraft/class_5321; field_9405 MODIFIED_JUNGLE_EDGE - f Lnet/minecraft/class_5321; field_9433 BADLANDS_PLATEAU - f Lnet/minecraft/class_5321; field_9422 TAIGA_MOUNTAINS - f Lnet/minecraft/class_5321; field_22075 WARPED_FOREST - f Lnet/minecraft/class_5321; field_9419 STONE_SHORE - f Lnet/minecraft/class_5321; field_9409 FOREST - f Lnet/minecraft/class_5321; field_9447 END_MIDLANDS - f Lnet/minecraft/class_5321; field_9417 JUNGLE - f Lnet/minecraft/class_5321; field_22076 SOUL_SAND_VALLEY - f Lnet/minecraft/class_5321; field_9423 OCEAN - f Lnet/minecraft/class_5321; field_9415 BADLANDS - f Lnet/minecraft/class_5321; field_9474 JUNGLE_EDGE - f Lnet/minecraft/class_5321; field_9424 DESERT - f Lnet/minecraft/class_5321; field_9476 GRAVELLY_MOUNTAINS - f Lnet/minecraft/class_5321; field_9406 MODIFIED_BADLANDS_PLATEAU - f Lnet/minecraft/class_5321; field_9460 WOODED_MOUNTAINS - f Lnet/minecraft/class_5321; field_9464 MOUNTAIN_EDGE - f Lnet/minecraft/class_5321; field_9430 SAVANNA_PLATEAU - f Lnet/minecraft/class_5321; field_9434 BEACH - f Lnet/minecraft/class_5321; field_9477 GIANT_TREE_TAIGA - f Lnet/minecraft/class_5321; field_9459 WOODED_HILLS - f Lnet/minecraft/class_5321; field_9443 ERODED_BADLANDS - f Lnet/minecraft/class_5321; field_9462 MUSHROOM_FIELDS - f Lnet/minecraft/class_5321; field_9404 GIANT_SPRUCE_TAIGA_HILLS - f Lnet/minecraft/class_5321; field_9473 THE_VOID - f Lnet/minecraft/class_5321; field_9456 SHATTERED_SAVANNA - f Lnet/minecraft/class_5321; field_9454 SNOWY_TAIGA - f Lnet/minecraft/class_5321; field_9448 DEEP_WARM_OCEAN - f Lnet/minecraft/class_5321; field_9437 SNOWY_TAIGA_MOUNTAINS - f Lnet/minecraft/class_5321; field_9478 SNOWY_BEACH - f Lnet/minecraft/class_5321; field_9452 SNOWY_TUNDRA - f Lnet/minecraft/class_5321; field_9470 DEEP_COLD_OCEAN - f Lnet/minecraft/class_5321; field_9421 BIRCH_FOREST_HILLS -c net/minecraft/class_1992 net/minecraft/world/biome/provider/SingleBiomeProvider - m (Lnet/minecraft/class_1959;)Lnet/minecraft/class_1959; method_30361 func_242549_a - m (Lnet/minecraft/class_1992;)Ljava/util/function/Supplier; method_28456 func_235261_a_ - f Lcom/mojang/serialization/Codec; field_24717 field_235260_e_ - f Ljava/util/function/Supplier; field_9486 biome -c net/minecraft/class_4547 net/minecraft/world/biome/ColumnFuzzedBiomeMagnifier - m ()[Lnet/minecraft/class_4547; values values - m (Ljava/lang/String;)Lnet/minecraft/class_4547; valueOf valueOf - f Lnet/minecraft/class_4547; field_20646 INSTANCE - f [Lnet/minecraft/class_4547; field_20647 $VALUES -c net/minecraft/class_4546 net/minecraft/world/biome/FuzzedBiomeMagnifier - m (D)D method_22397 square - m (J)D method_22398 randomDouble - m (Ljava/lang/String;)Lnet/minecraft/class_4546; valueOf valueOf - m ()[Lnet/minecraft/class_4546; values values - m (JIIIDDD)D method_22399 distanceToCorner - f Lnet/minecraft/class_4546; field_20644 INSTANCE - f [Lnet/minecraft/class_4546; field_20645 $VALUES -c net/minecraft/class_4766 net/minecraft/world/biome/provider/NetherBiomeProvider - m ()Ljava/util/Optional; method_31085 getDefaultBuilder - m (Lnet/minecraft/class_4766;)Lcom/mojang/datafixers/util/Either; method_28457 func_235275_a_ - m (Lnet/minecraft/class_4766;)Lnet/minecraft/class_4766$class_5487; method_30830 func_242607_e - m (Lnet/minecraft/class_4766;)Lnet/minecraft/class_4766$class_5487; method_30828 func_242604_c - m (Lnet/minecraft/class_4766;)Lcom/mojang/datafixers/util/Either; method_28463 func_242603_b - m (Lnet/minecraft/class_4766;)Lnet/minecraft/class_4766$class_5487; method_30829 func_242606_d - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30827 func_242602_a - m (Lnet/minecraft/class_4766;)Lnet/minecraft/class_4766$class_5487; method_30831 func_242608_f - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28464 func_235282_b_ - m (Lcom/mojang/datafixers/util/Pair;)Lnet/minecraft/class_4766$class_5502; method_31084 func_242601_a - m (Lnet/minecraft/class_1959$class_4762;Lcom/mojang/datafixers/util/Pair;)Ljava/lang/Float; method_24402 func_235272_a_ - m (Lnet/minecraft/class_4766;)Ljava/util/List; method_28466 func_235284_c_ - m (Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/class_4766; method_28459 func_235277_a_ - m (Lnet/minecraft/class_4766;)Ljava/lang/Long; method_28468 func_235286_d_ - m (J)Z method_28462 isDefaultPreset - f Lnet/minecraft/class_5216; field_22081 weirdnessNoiseMixer - f Lnet/minecraft/class_5216; field_22080 altitudeNoiseMixer - f Z field_24116 useHeightForNoise - f J field_24720 seed - f Lnet/minecraft/class_5216; field_22078 temperatureNoiseMixer - f Lcom/mojang/serialization/MapCodec; field_24718 PACKET_CODEC - f Lnet/minecraft/class_5216; field_22079 humidityNoiseMixer - f Ljava/util/Optional; field_24721 netherProviderPreset - f Lnet/minecraft/class_4766$class_5487; field_26436 altitudeNoise - f Lnet/minecraft/class_4766$class_5487; field_26435 humidityNoise - f Lnet/minecraft/class_4766$class_5487; field_26437 weirdnessNoise - f Lnet/minecraft/class_4766$class_5487; field_26433 DEFAULT_NOISE - f Lnet/minecraft/class_4766$class_5487; field_26434 temperatureNoise - f Lcom/mojang/serialization/Codec; field_24719 CODEC - f Ljava/util/List; field_24115 biomeAttributes -c net/minecraft/class_4766$class_5502 net/minecraft/world/biome/provider/NetherBiomeProvider$DefaultBuilder - m (Lnet/minecraft/class_2960;)Lcom/mojang/serialization/DataResult; method_31097 func_242631_a - m ()Lnet/minecraft/class_2378; method_31098 getLookupRegistry - m (Lnet/minecraft/class_4766$class_5305;)Lcom/mojang/serialization/DataResult; method_31095 func_242629_a - m ()Lnet/minecraft/class_4766; method_31101 build - m ()J method_31100 getSeed - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_31096 func_242630_a - m ()Lnet/minecraft/class_4766$class_5305; method_31094 getPreset - m (Lnet/minecraft/class_2960;)Lcom/mojang/serialization/DataResult; method_31099 func_242633_b - f Lnet/minecraft/class_4766$class_5305; field_26695 preset - f Lcom/mojang/serialization/MapCodec; field_26694 CODEC - f J field_26697 seed - f Lnet/minecraft/class_2378; field_26696 lookupRegistry -c net/minecraft/class_4766$class_5305 net/minecraft/world/biome/provider/NetherBiomeProvider$Preset - m (Lnet/minecraft/class_4766$class_5305;Lnet/minecraft/class_2378;Ljava/lang/Long;)Lnet/minecraft/class_4766; method_31088 func_242617_a - m ()Ljava/util/Map; method_31086 func_242615_a - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31092 func_242622_d - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31091 func_242621_c - m (Lnet/minecraft/class_2378;J)Lnet/minecraft/class_4766; method_28469 build - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31090 func_242620_b - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31089 func_242618_a - m (Lnet/minecraft/class_4766$class_5305;)Lnet/minecraft/class_2960; method_31087 func_242616_a - m (Lnet/minecraft/class_2378;)Lnet/minecraft/class_1959; method_31093 func_242623_e - f Lnet/minecraft/class_4766$class_5305; field_24723 DEFAULT_NETHER_PROVIDER_PRESET - f Ljava/util/Map; field_24724 PRESETS - f Lnet/minecraft/class_2960; field_24725 id - f Lcom/mojang/datafixers/util/Function3; field_24726 netherProviderFunction -c net/minecraft/class_4766$class_5487 net/minecraft/world/biome/provider/NetherBiomeProvider$Noise - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30833 func_242613_a - m ()Lit/unimi/dsi/fastutil/doubles/DoubleList; method_30834 getAmplitudes - m ()I method_30832 getNumberOfOctaves - f I field_26439 numOctaves - f Lit/unimi/dsi/fastutil/doubles/DoubleList; field_26440 amplitudes - f Lcom/mojang/serialization/Codec; field_26438 CODEC -c net/minecraft/class_4766$1 net/minecraft/world/biome/provider/NetherBiomeProvider$1 -c net/minecraft/class_5483 net/minecraft/world/biome/MobSpawnInfo - m (Lnet/minecraft/class_1311;)Lnet/minecraft/class_1311; method_31006 func_242565_c - m ()F method_31002 getCreatureSpawnProbability - m (Lnet/minecraft/class_5483;)Ljava/lang/Float; method_30796 func_242566_c - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30791 func_242561_a - m (Lnet/minecraft/class_5483;)Ljava/util/Map; method_30795 func_242564_b - m (Lnet/minecraft/class_5483;)Ljava/util/Map; method_30794 func_242560_a - m (Lnet/minecraft/class_1311;)Ljava/util/List; method_31005 func_242563_b - m (Lnet/minecraft/class_1311;)Ljava/util/List; method_31004 getSpawners - m ()Z method_31082 isValidSpawnBiomeForPlayer - m (Lnet/minecraft/class_1299;)Lnet/minecraft/class_5483$class_5265; method_31003 getSpawnCost - f Ljava/util/Map; field_26406 spawnCosts - f Lcom/mojang/serialization/MapCodec; field_26403 CODEC - f Lnet/minecraft/class_5483; field_26646 EMPTY - f Ljava/util/Map; field_26405 spawners - f Z field_26692 validSpawnBiomeForPlayer - f F field_26404 creatureSpawnProbability - f Lorg/apache/logging/log4j/Logger; field_26645 LOGGER -c net/minecraft/class_5483$1 net/minecraft/world/biome/MobSpawnInfo$1 -c net/minecraft/class_5483$class_1964 net/minecraft/world/biome/MobSpawnInfo$Spawners - m (Lnet/minecraft/class_5483$class_1964;)Lnet/minecraft/class_1299; method_28436 func_242595_d - m (Lnet/minecraft/class_5483$class_1964;)Ljava/lang/Integer; method_28434 func_242593_b - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28433 func_242592_a - m (Lnet/minecraft/class_5483$class_1964;)Ljava/lang/Integer; method_28432 func_242591_a - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_5483$class_1964;)Ljava/lang/Integer; method_28435 func_242594_c - f Lnet/minecraft/class_1299; field_9389 type - f I field_9387 maxCount - f Lcom/mojang/serialization/Codec; field_24681 CODEC - f I field_9388 minCount -c net/minecraft/class_5483$class_5265 net/minecraft/world/biome/MobSpawnInfo$SpawnCosts - m ()D method_27838 getEntitySpawnCost - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_30359 func_242584_a - m (Lnet/minecraft/class_5483$class_5265;)Ljava/lang/Double; method_31015 func_242586_b - m ()D method_27837 getMaxSpawnCost - m (Lnet/minecraft/class_5483$class_5265;)Ljava/lang/Double; method_31014 func_242583_a - f D field_24407 maxSpawnCost - f D field_24408 entitySpawnCost - f Lcom/mojang/serialization/Codec; field_25820 CODEC -c net/minecraft/class_5483$class_5496 net/minecraft/world/biome/MobSpawnInfo$Builder - m ()Lnet/minecraft/class_5483$class_5496; method_31083 isValidSpawnBiomeForPlayer - m (Lnet/minecraft/class_1311;)Lnet/minecraft/class_1311; method_31013 func_242578_b - m ()Lnet/minecraft/class_5483; method_31007 copy - m (Lnet/minecraft/class_1299;DD)Lnet/minecraft/class_5483$class_5496; method_31009 withSpawnCost - m (F)Lnet/minecraft/class_5483$class_5496; method_31008 withCreatureSpawnProbability - m (Lnet/minecraft/class_1311;Lnet/minecraft/class_5483$class_1964;)Lnet/minecraft/class_5483$class_5496; method_31011 withSpawner - m (Ljava/util/Map$Entry;)Ljava/util/List; method_31012 func_242576_a - m (Lnet/minecraft/class_1311;)Ljava/util/List; method_31010 func_242574_a - f F field_26649 creatureSpawnProbability - f Z field_26693 validSpawnBiomeForPlayer - f Ljava/util/Map; field_26647 spawners - f Ljava/util/Map; field_26648 spawnCosts -c net/minecraft/class_2088 net/minecraft/world/biome/provider/OverworldBiomeProvider - m (Lnet/minecraft/class_2088;)Lnet/minecraft/class_2378; method_31102 func_242637_a - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_5321;)Ljava/util/function/Supplier; method_31103 func_242638_a - m (Lnet/minecraft/class_2088;)Ljava/lang/Boolean; method_28476 func_235303_b_ - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_28475 func_235302_a_ - m (Lnet/minecraft/class_2378;Lnet/minecraft/class_5321;)Lnet/minecraft/class_1959; method_31104 func_242639_b - m (Lnet/minecraft/class_2088;)Ljava/lang/Boolean; method_28474 func_235301_a_ - m (Lnet/minecraft/class_2088;)Ljava/lang/Long; method_28477 func_235304_c_ - f Lnet/minecraft/class_3642; field_9680 genBiomes - f Z field_24729 largeBiomes - f Ljava/util/List; field_9677 biomes - f Lcom/mojang/serialization/Codec; field_24727 CODEC - f J field_24728 seed - f Z field_24498 legacyBiomes - f Lnet/minecraft/class_2378; field_26698 lookupRegistry -c net/minecraft/class_5266 net/minecraft/world/biome/DefaultBiomeMagnifier - m (Ljava/lang/String;)Lnet/minecraft/class_5266; valueOf valueOf - m ()[Lnet/minecraft/class_5266; values values - f [Lnet/minecraft/class_5266; field_24410 $VALUES - f Lnet/minecraft/class_5266; field_24409 INSTANCE -c net/minecraft/class_2169 net/minecraft/world/biome/provider/EndBiomeProvider - m (Lnet/minecraft/class_2169;)Lnet/minecraft/class_2378; method_31106 func_242648_b - m (Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; method_31105 func_242647_a - m (J)Z method_28479 areProvidersEqual - m (Lnet/minecraft/class_3541;II)F method_8757 getRandomNoise - m (Lnet/minecraft/class_2169;)Ljava/lang/Long; method_28478 func_242646_a - f Lnet/minecraft/class_2378; field_26699 lookupRegistry - f Lnet/minecraft/class_1959; field_26700 theEndBiome - f Lnet/minecraft/class_1959; field_26702 endMidlandsBiome - f Lnet/minecraft/class_1959; field_26701 endHighlandsBiome - f J field_24731 seed - f Lnet/minecraft/class_1959; field_26703 smallEndIslandsBiome - f Lnet/minecraft/class_3541; field_9831 generator - f Lcom/mojang/serialization/Codec; field_24730 CODEC - f Lnet/minecraft/class_1959; field_26704 endBarrensBiome -c net/minecraft/class_4739 net/minecraft/block/AbstractChestBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_4732$class_4734; method_24167 combine - f Ljava/util/function/Supplier; field_21796 tileEntityType -c net/minecraft/class_2185 net/minecraft/block/AbstractBannerBlock - m ()Lnet/minecraft/class_1767; method_9303 getColor - f Lnet/minecraft/class_1767; field_9855 color -c net/minecraft/class_4262 net/minecraft/block/AbstractGlassBlock -c net/minecraft/class_2363 net/minecraft/block/AbstractFurnaceBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)V method_17025 interactWith - f Lnet/minecraft/class_2753; field_11104 FACING - f Lnet/minecraft/class_2746; field_11105 LIT -c net/minecraft/class_2189 net/minecraft/block/AirBlock -c net/minecraft/class_2190 net/minecraft/block/AbstractSkullBlock - m ()Lnet/minecraft/class_2484$class_2485; method_9327 getSkullType - f Lnet/minecraft/class_2484$class_2485; field_9867 skullType -c net/minecraft/class_2195 net/minecraft/block/AttachedStemBlock - m ()Lnet/minecraft/class_1792; method_9337 getSeeds - f Lnet/minecraft/class_2511; field_9875 grownFruit - f Lnet/minecraft/class_2753; field_9873 FACING - f Ljava/util/Map; field_9874 SHAPES -c net/minecraft/class_2199 net/minecraft/block/AnvilBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_9346 damage - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17453 func_220272_a - f Lnet/minecraft/class_265; field_9886 PART_UPPER_Z - f Lnet/minecraft/class_265; field_9882 PART_BASE - f Lnet/minecraft/class_265; field_9889 PART_MID_Z - f Lnet/minecraft/class_265; field_9888 PART_MID_X - f Lnet/minecraft/class_265; field_9887 X_AXIS_AABB - f Lnet/minecraft/class_265; field_9885 PART_LOWER_X - f Lnet/minecraft/class_265; field_9884 PART_UPPER_X - f Lnet/minecraft/class_265; field_9892 Z_AXIS_AABB - f Lnet/minecraft/class_2561; field_17349 containerName - f Lnet/minecraft/class_265; field_9891 PART_LOWER_Z - f Lnet/minecraft/class_2753; field_9883 FACING -c net/minecraft/class_2202 net/minecraft/block/BambooSaplingBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9351 growBamboo - f Lnet/minecraft/class_265; field_9897 SHAPE -c net/minecraft/class_2211 net/minecraft/block/BambooBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_9386 getNumBambooBlocksBelow - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Ljava/util/Random;I)V method_9385 grow - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_9387 getNumBambooBlocksAbove - f Lnet/minecraft/class_2758; field_9916 PROPERTY_STAGE - f Lnet/minecraft/class_265; field_9915 SHAPE_LARGE_LEAVES - f Lnet/minecraft/class_2754; field_9917 PROPERTY_BAMBOO_LEAVES - f Lnet/minecraft/class_265; field_9912 SHAPE_NORMAL - f Lnet/minecraft/class_265; field_9913 SHAPE_COLLISION - f Lnet/minecraft/class_2758; field_9914 PROPERTY_AGE -c net/minecraft/class_3708 net/minecraft/block/BarrelBlock - f Lnet/minecraft/class_2753; field_16320 PROPERTY_FACING - f Lnet/minecraft/class_2746; field_18006 PROPERTY_OPEN -c net/minecraft/class_2215 net/minecraft/block/BannerBlock - m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_2248; method_9398 forColor - f Ljava/util/Map; field_9925 BANNERS_BY_COLOR - f Lnet/minecraft/class_2758; field_9924 ROTATION - f Lnet/minecraft/class_265; field_9923 SHAPE -c net/minecraft/class_2221 net/minecraft/block/CoralFanBlock - f Lnet/minecraft/class_265; field_9932 SHAPE -c net/minecraft/class_2213 net/minecraft/block/BarrierBlock -c net/minecraft/class_2230 net/minecraft/block/AbstractCoralPlantBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9431 isInWater - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_9430 updateIfDry - f Lnet/minecraft/class_2746; field_9940 WATERLOGGED - f Lnet/minecraft/class_265; field_9939 SHAPE -c net/minecraft/class_2217 net/minecraft/block/DeadCoralPlantBlock - f Lnet/minecraft/class_265; field_9928 SHAPE -c net/minecraft/class_2222 net/minecraft/block/DeadCoralWallFanBlock - f Lnet/minecraft/class_2753; field_9933 FACING - f Ljava/util/Map; field_9934 SHAPES -c net/minecraft/class_4770 net/minecraft/block/AbstractFireBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_30033 shouldLightPortal - m (Lnet/minecraft/class_1937;)Z method_30366 canLightPortal - m (Lnet/minecraft/class_2680;)Z method_10195 canBurn - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_30032 canLightBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_24416 getFireForPlacement - f Lnet/minecraft/class_265; field_22498 shapeDown - f F field_22088 fireDamage -c net/minecraft/class_2237 net/minecraft/block/ContainerBlock -c net/minecraft/class_2241 net/minecraft/block/AbstractRailBlock - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1937;Lnet/minecraft/class_2768;)Z method_27935 isValidRailDirection - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)Lnet/minecraft/class_2680; method_9475 getUpdatedState - m (Lnet/minecraft/class_2680;)Z method_9476 isRail - m ()Z method_9478 areCornersDisabled - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2248;)V method_9477 updateState - m ()Lnet/minecraft/class_2769; method_9474 getShapeProperty - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_2680; method_24417 updateRailState - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_9479 isRail - f Z field_9959 disableCorners - f Lnet/minecraft/class_265; field_9960 ASCENDING_AABB - f Lnet/minecraft/class_265; field_9958 FLAT_AABB -c net/minecraft/class_2241$1 net/minecraft/block/AbstractRailBlock$1 - f [I field_24465 field_235329_a_ -c net/minecraft/class_2231 net/minecraft/block/AbstractPressurePlateBlock - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_9436 playClickOnSound - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9437 updateNeighbors - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_9438 playClickOffSound - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)I method_9434 computeRedstoneStrength - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;I)V method_9433 updateState - m (Lnet/minecraft/class_2680;)I method_9435 getRedstoneStrength - m ()I method_9563 getPoweredDuration - m (Lnet/minecraft/class_2680;I)Lnet/minecraft/class_2680; method_9432 setRedstoneStrength - f Lnet/minecraft/class_238; field_9941 PRESSURE_AABB - f Lnet/minecraft/class_265; field_9942 PRESSED_AABB - f Lnet/minecraft/class_265; field_9943 UNPRESSED_AABB -c net/minecraft/class_2238 net/minecraft/block/BeaconBlock -c net/minecraft/class_4275 net/minecraft/block/IBeaconBeamColorProvider - m ()Lnet/minecraft/class_1767; method_10622 getColor -c net/minecraft/class_4481 net/minecraft/block/BeehiveBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_23893 angerNearbyBees - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)V method_23754 takeHoney - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_23894 hasBees - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_265;D)V method_21844 addHoneyParticle - m (Lnet/minecraft/class_1937;DDDDD)V method_21840 addHoneyParticle - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_21843 addHoneyParticle - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_21839 func_226874_a_ - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_21842 dropHoneyComb - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;Lnet/minecraft/class_4482$class_4484;)V method_21841 takeHoney - m (Ljava/util/Random;)Lnet/minecraft/class_2350; method_26978 getGenerationDirection - f Lnet/minecraft/class_2758; field_20420 HONEY_LEVEL - f [Lnet/minecraft/class_2350; field_20418 GENERATE_DIRECTIONS - f Lnet/minecraft/class_2753; field_20419 FACING -c net/minecraft/class_2244 net/minecraft/block/BedBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_4732$class_4733; method_24164 getMergeType - m (Lnet/minecraft/class_1937;)Z method_27352 doesBedWork - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_22357 tryWakeUpVillager - m ()Lnet/minecraft/class_1767; method_9487 getColor - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_30839 isBedBelow - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_24163 getFootDirection - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;F)Ljava/util/Optional; method_9484 func_242652_a - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1657$class_1658;)V method_19283 func_220173_a - m (Lnet/minecraft/class_2742;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_9488 getDirectionToOther - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;[IZ)Ljava/util/Optional; method_30836 func_242654_a - m (Lnet/minecraft/class_2350;)[[I method_30837 func_242655_a - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)[[I method_30840 func_242658_b - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)Ljava/util/Optional; method_30835 func_242653_a - m (Lnet/minecraft/class_1297;)V method_21838 bounceEntity - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2350; method_18476 getBedDirection - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;)[[I method_30838 func_242656_a - f Lnet/minecraft/class_265; field_16782 CORNER_NW - f Lnet/minecraft/class_2754; field_9967 PART - f Lnet/minecraft/class_265; field_16788 BED_BASE_SHAPE - f Lnet/minecraft/class_2746; field_9968 OCCUPIED - f Lnet/minecraft/class_1767; field_9966 color - f Lnet/minecraft/class_265; field_16790 EAST_FACING_SHAPE - f Lnet/minecraft/class_265; field_16789 CORNER_SE - f Lnet/minecraft/class_265; field_16784 CORNER_SW - f Lnet/minecraft/class_265; field_16786 CORNER_NE - f Lnet/minecraft/class_265; field_16785 SOUTH_FACING_SHAPE - f Lnet/minecraft/class_265; field_16783 WEST_FACING_SHAPE - f Lnet/minecraft/class_265; field_16787 NORTH_FACING_SHAPE -c net/minecraft/class_2244$1 net/minecraft/block/BedBlock$1 - f [I field_16791 field_222376_a -c net/minecraft/class_3709 net/minecraft/block/BellBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_16115 getDirectionFromState - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_3965;Lnet/minecraft/class_1657;Z)Z method_19285 attemptRing - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_17026 ring - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_16116 getShape - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;D)Z method_17028 canRingFrom - f Lnet/minecraft/class_265; field_16323 NORTH_FACING_WALL_SHAPE - f Lnet/minecraft/class_2753; field_16324 HORIZONTAL_FACING - f Lnet/minecraft/class_265; field_17093 SOUTH_FACING_WALL_SHAPE - f Lnet/minecraft/class_265; field_17087 BELL_CUP_SHAPE - f Lnet/minecraft/class_265; field_17092 EAST_FACING_WALL_SHAPE - f Lnet/minecraft/class_2754; field_16326 ATTACHMENT - f Lnet/minecraft/class_265; field_16325 FLOOR_NORTH_SOUTH_SHAPE - f Lnet/minecraft/class_265; field_16322 FLOOR_EAST_WEST_SHAPE - f Lnet/minecraft/class_265; field_17089 BASE_WALL_SHAPE - f Lnet/minecraft/class_265; field_17090 DOUBLE_WALL_NORTH_SOUTH_SHAPE - f Lnet/minecraft/class_2746; field_20648 POWERED - f Lnet/minecraft/class_265; field_17088 BELL_RIM_SHAPE - f Lnet/minecraft/class_265; field_17094 CEILING_SHAPE - f Lnet/minecraft/class_265; field_17091 WEST_FACING_WALL_SHAPE - f Lnet/minecraft/class_265; field_16321 DOUBLE_WALL_EAST_WEST_SHAPE -c net/minecraft/class_3709$1 net/minecraft/block/BellBlock$1 - f [I field_16327 field_222377_a -c net/minecraft/class_2242 net/minecraft/block/BeetrootBlock - f Lnet/minecraft/class_2758; field_9962 BEETROOT_AGE - f [Lnet/minecraft/class_265; field_9961 SHAPE -c net/minecraft/class_2248 net/minecraft/block/Block - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;Lnet/minecraft/class_1297;Lnet/minecraft/class_1799;)Ljava/util/List; method_9609 getDrops - m (Lnet/minecraft/class_1927;)Z method_9533 canDropFromExplosion - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_16361 hasSolidSideOnTop - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9579 propagatesSkylightDown - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Lnet/minecraft/class_1799; method_9574 getItem - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)V method_30094 replaceBlock - m (Lnet/minecraft/class_265;)Z method_9614 isOpaque - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;F)V method_9554 onFallenUpon - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_9607 shouldSideBeRendered - m ()F method_23349 getSpeedFactor - m ()Lnet/minecraft/class_5250; method_9518 getTranslatedName - m (Lnet/minecraft/class_1750;)Lnet/minecraft/class_2680; method_9605 getStateForPlacement - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Ljava/util/Random;)V method_9496 animateTick - m ()Lit/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap; method_9508 func_210298_b - m ()Ljava/lang/String; method_9539 getTranslationKey - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9577 spawnAsEntity - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1657;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2586;Lnet/minecraft/class_1799;)V method_9556 harvestBlock - m ()Lnet/minecraft/class_2689; method_9595 getStateContainer - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9587 func_220079_d - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;)Ljava/util/List; method_9562 getDrops - m (Lnet/minecraft/class_2248;)Z method_27839 matchesBlock - m (Lnet/minecraft/class_1761;Lnet/minecraft/class_2371;)V method_9578 fillItemGroup - m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_2248; method_9503 getBlockFromItem - m (Lnet/minecraft/class_3494;)Z method_9525 isIn - m (DDDDDD)Lnet/minecraft/class_265; method_9541 makeCuboidShape - m (Lnet/minecraft/class_265;Lnet/minecraft/class_2350;)Z method_9501 doesSideFillSquare - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;Lnet/minecraft/class_1297;Lnet/minecraft/class_1799;)V method_9511 spawnDrops - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_1297;)V method_9502 onLanded - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9504 fillWithRain - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1657;)V method_9576 onBlockHarvested - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)V method_9591 onEntityWalk - m ()Z method_9538 canSpawnInBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2586;)V method_9610 spawnDrops - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9596 func_220061_c - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;I)V method_9583 dropXpOnBlockBreak - m ()Lnet/minecraft/class_2680; method_9564 getDefaultState - m (Lnet/minecraft/class_2680;)I method_9507 getStateId - m ()F method_23350 getJumpFactor - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1922;Ljava/util/List;Lnet/minecraft/class_1836;)V method_9568 addInformation - m (Lnet/minecraft/class_2680;)Z method_9542 ticksRandomly - m ()F method_9520 getExplosionResistance - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;II)V method_9611 replaceBlockState - m ()F method_9499 getSlipperiness - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9585 onPlayerDestroy - m (Lnet/minecraft/class_2689$class_2690;)V method_9515 fillStateContainer - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_20044 hasEnoughSolidSide - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1309;Lnet/minecraft/class_1799;)V method_9567 onBlockPlacedBy - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_9582 nudgeEntitiesWithNewState - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)V method_9544 func_220057_b - m (Lnet/minecraft/class_2248;)Z method_9581 cannotAttach - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9497 spawnDrops - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1927;)V method_9586 onExplosionDestroy - m (I)Lnet/minecraft/class_2680; method_9531 getStateById - m (Lnet/minecraft/class_2680;)V method_9590 setDefaultState - m ()Z method_9543 isVariableOpacity - m ()Ljava/lang/String; toString toString - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2498; method_9573 getSoundType - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_9510 getValidBlockForPosition - f Lnet/minecraft/class_2361; field_10651 BLOCK_STATE_IDS - f Lnet/minecraft/class_2689; field_10647 stateContainer - f Lnet/minecraft/class_1792; field_17562 item - f Lnet/minecraft/class_2680; field_10646 defaultState - f Lcom/google/common/cache/LoadingCache; field_19312 OPAQUE_CACHE - f Ljava/lang/ThreadLocal; field_10649 SHOULD_SIDE_RENDER_CACHE - f Ljava/lang/String; field_10642 translationKey - f Lorg/apache/logging/log4j/Logger; field_10638 LOGGER -c net/minecraft/class_2248$2 net/minecraft/block/Block$2 - m (I)V rehash rehash -c net/minecraft/class_2248$1 net/minecraft/block/Block$1 - m (Ljava/lang/Object;)Ljava/lang/Object; load load - m (Lnet/minecraft/class_265;)Ljava/lang/Boolean; method_20516 load -c net/minecraft/class_2248$class_2249 net/minecraft/block/Block$RenderSideCacheKey - m (Ljava/lang/Object;)Z equals equals - m ()I hashCode hashCode - f Lnet/minecraft/class_2680; field_10652 state - f Lnet/minecraft/class_2350; field_10653 side - f Lnet/minecraft/class_2680; field_10654 adjacentState -c net/minecraft/class_3710 net/minecraft/block/BlastFurnaceBlock -c net/minecraft/class_2256 net/minecraft/block/IGrowable - m (Lnet/minecraft/class_3218;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9652 grow - m (Lnet/minecraft/class_1937;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_9650 canUseBonemeal - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)Z method_9651 canGrow -c net/minecraft/class_2246 net/minecraft/block/Blocks - m (Lnet/minecraft/class_2680;)I method_26136 func_235454_j_ - m (Lnet/minecraft/class_2680;)I method_26134 func_235452_h_ - m (Lnet/minecraft/class_2680;)I method_26135 func_235453_i_ - m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_2506; method_26120 createStainedGlassFromColor - m (Lnet/minecraft/class_1767;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3620; method_26111 func_235424_a_ - m (Lnet/minecraft/class_2680;)I method_26139 func_235457_m_ - m ()Lnet/minecraft/class_2591; method_24165 func_235446_e_ - m (Lnet/minecraft/class_2680;)I method_26140 func_235458_n_ - m ()V method_26979 cacheBlockStates - m ()Lnet/minecraft/class_2975; method_24418 func_235438_c_ - m (Lnet/minecraft/class_2680;)I method_26137 func_235455_k_ - m ()Lnet/minecraft/class_2975; method_24419 func_235442_d_ - m (Lnet/minecraft/class_2680;)I method_26138 func_235456_l_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26122 isntSolid - m (Lnet/minecraft/class_2680;)I method_26121 func_235435_b_ - m (Lnet/minecraft/class_1767;Lnet/minecraft/class_4970$class_2251;)Lnet/minecraft/class_2480; method_26110 createShulkerBoxFromColorAndProperties - m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_2244; method_26109 createBedFromColor - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26125 func_235440_c_ - m (Lnet/minecraft/class_2680;)I method_26124 func_235439_c_ - m (Lnet/minecraft/class_3620;)Lnet/minecraft/class_2248; method_26115 createRotatableNetherBlock - m (Lnet/minecraft/class_2680;)I method_26104 func_235417_A_ - m (Lnet/minecraft/class_2680;)I method_26112 func_235425_a_ - m (Lnet/minecraft/class_2680;)I method_26105 func_235418_B_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_27091 func_235444_d_ - m (Lnet/minecraft/class_2680;)I method_26131 func_235449_f_ - m (Lnet/minecraft/class_2680;)I method_26133 func_235451_g_ - m (Lnet/minecraft/class_2680;)I method_26127 func_235443_d_ - m (I)Ljava/util/function/ToIntFunction; method_26107 getLightValueLit - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_26113 needsPostProcessing - m (Lnet/minecraft/class_2680;)I method_26129 func_235447_e_ - m (Lnet/minecraft/class_2680;)I method_26151 func_235469_y_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_26132 func_235450_f_ - m (Lnet/minecraft/class_2680;)I method_26152 func_235470_z_ - m (Lnet/minecraft/class_2680;)I method_26149 func_235467_w_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_26128 func_235445_d_ - m (Lnet/minecraft/class_2680;)I method_26150 func_235468_x_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Z method_26130 func_235448_e_ - m (Z)Lnet/minecraft/class_2665; method_26119 createPiston - m ()Lnet/minecraft/class_2397; method_26106 createLeavesBlock - m (Ljava/lang/String;Lnet/minecraft/class_2248;)Lnet/minecraft/class_2248; method_9492 register - m (Lnet/minecraft/class_3620;Lnet/minecraft/class_3620;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3620; method_26118 func_235431_a_ - m (Lnet/minecraft/class_2680;)I method_26143 func_235461_q_ - m (Lnet/minecraft/class_2680;)I method_26144 func_235462_r_ - m (ILnet/minecraft/class_2680;)I method_26108 func_235421_a_ - m (Lnet/minecraft/class_2680;)I method_26141 func_235459_o_ - m (Lnet/minecraft/class_2680;)I method_26142 func_235460_p_ - m (Lnet/minecraft/class_3620;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3620; method_26116 func_235429_a_ - m (Lnet/minecraft/class_2680;)I method_26147 func_235465_u_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Ljava/lang/Boolean; method_26114 neverAllowSpawn - m (Lnet/minecraft/class_2680;)I method_26148 func_235466_v_ - m (Lnet/minecraft/class_2680;)I method_26145 func_235463_s_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Ljava/lang/Boolean; method_26126 allowsSpawnOnLeaves - m (Lnet/minecraft/class_2680;)I method_26146 func_235464_t_ - m (Lnet/minecraft/class_3620;Lnet/minecraft/class_3620;)Lnet/minecraft/class_2465; method_26117 createLogBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_1299;)Ljava/lang/Boolean; method_26123 alwaysAllowSpawn - f Lnet/minecraft/class_2248; field_10492 INFESTED_COBBLESTONE - f Lnet/minecraft/class_2248; field_16337 GRINDSTONE - f Lnet/minecraft/class_2248; field_10339 BRAIN_CORAL - f Lnet/minecraft/class_2248; field_10313 LARGE_FERN - f Lnet/minecraft/class_2248; field_10312 HOPPER - f Lnet/minecraft/class_2248; field_22121 CRIMSON_FUNGUS - f Lnet/minecraft/class_2248; field_10320 LIGHT_GRAY_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10267 GRAY_WALL_BANNER - f Lnet/minecraft/class_2248; field_10093 POLISHED_ANDESITE - f Lnet/minecraft/class_2248; field_10211 BAMBOO - f Lnet/minecraft/class_2248; field_10210 ORANGE_CONCRETE - f Lnet/minecraft/class_2248; field_10304 POTTED_JUNGLE_SAPLING - f Lnet/minecraft/class_2248; field_10431 OAK_LOG - f Lnet/minecraft/class_2248; field_22107 WARPED_WALL_SIGN - f Lnet/minecraft/class_2248; field_10064 END_STONE_BRICK_SLAB - f Lnet/minecraft/class_2248; field_10237 QUARTZ_SLAB - f Lnet/minecraft/class_2248; field_10623 DARK_PRISMARINE_SLAB - f Lnet/minecraft/class_2248; field_23875 CRACKED_POLISHED_BLACKSTONE_BRICKS - f Lnet/minecraft/class_2248; field_10023 BROWN_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10021 CHORUS_PLANT - f Lnet/minecraft/class_2248; field_16330 LECTERN - f Lnet/minecraft/class_2248; field_10134 BUBBLE_CORAL - f Lnet/minecraft/class_2248; field_22122 SHROOMLIGHT - f Lnet/minecraft/class_2248; field_10153 QUARTZ_BLOCK - f Lnet/minecraft/class_2248; field_10219 GRASS_BLOCK - f Lnet/minecraft/class_2248; field_10532 CYAN_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10604 LIGHT_GRAY_WALL_BANNER - f Lnet/minecraft/class_2248; field_10037 SPRUCE_LOG - f Lnet/minecraft/class_2248; field_10465 STRUCTURE_BLOCK - f Lnet/minecraft/class_2248; field_10262 SMOOTH_SANDSTONE_SLAB - f Lnet/minecraft/class_2248; field_10174 SEA_LANTERN - f Lnet/minecraft/class_2248; field_23876 CHISELED_POLISHED_BLACKSTONE - f Lnet/minecraft/class_2248; field_10529 GREEN_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10528 CHORUS_FLOWER - f Lnet/minecraft/class_2248; field_10404 PURPLE_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10403 DARK_OAK_DOOR - f Lnet/minecraft/class_2248; field_16336 CARTOGRAPHY_TABLE - f Lnet/minecraft/class_2248; field_10032 DEAD_HORN_CORAL - f Lnet/minecraft/class_2248; field_10227 ORANGE_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10554 OXEYE_DAISY - f Lnet/minecraft/class_2248; field_22506 STRIPPED_CRIMSON_HYPHAE - f Lnet/minecraft/class_2248; field_10346 POLISHED_DIORITE - f Lnet/minecraft/class_2248; field_10417 BIRCH_BUTTON - f Lnet/minecraft/class_2248; field_10552 CHISELED_STONE_BRICKS - f Lnet/minecraft/class_2248; field_10003 PEONY - f Lnet/minecraft/class_2248; field_10002 REDSTONE_BLOCK - f Lnet/minecraft/class_2248; field_10485 ENCHANTING_TABLE - f Lnet/minecraft/class_2248; field_10080 REDSTONE_ORE - f Lnet/minecraft/class_2248; field_10230 MAGENTA_BED - f Lnet/minecraft/class_2248; field_10502 CONDUIT - f Lnet/minecraft/class_2248; field_10501 BLACK_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_22105 WARPED_SIGN - f Lnet/minecraft/class_2248; field_10412 POLISHED_DIORITE_SLAB - f Lnet/minecraft/class_2248; field_10131 STONE_BRICK_SLAB - f Lnet/minecraft/class_2248; field_10389 PRISMARINE_SLAB - f Lnet/minecraft/class_2248; field_10193 LIGHT_BLUE_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10192 POTTED_SPRUCE_SAPLING - f Lnet/minecraft/class_2248; field_23873 POLISHED_BLACKSTONE - f Lnet/minecraft/class_2248; field_10418 COAL_ORE - f Lnet/minecraft/class_2248; field_10456 BLUE_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10455 END_ROD - f Lnet/minecraft/class_2248; field_10553 JUNGLE_BUTTON - f Lnet/minecraft/class_2248; field_10277 INFESTED_STONE - f Lnet/minecraft/class_2248; field_16331 FLETCHING_TABLE - f Lnet/minecraft/class_2248; field_10125 TUBE_CORAL - f Lnet/minecraft/class_2248; field_9995 CORNFLOWER - f Lnet/minecraft/class_2248; field_10214 TALL_GRASS - f Lnet/minecraft/class_2248; field_10213 NETHER_QUARTZ_ORE - f Lnet/minecraft/class_2248; field_22120 CRIMSON_NYLIUM - f Lnet/minecraft/class_2248; field_10140 GRAY_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10531 PINK_WALL_BANNER - f Lnet/minecraft/class_2248; field_10115 ANDESITE - f Lnet/minecraft/class_2248; field_10108 BAMBOO_SAPLING - f Lnet/minecraft/class_2248; field_10107 WHITE_CONCRETE - f Lnet/minecraft/class_2248; field_22106 CRIMSON_WALL_SIGN - f Lnet/minecraft/class_2248; field_10405 MOSSY_COBBLESTONE_SLAB - f Lnet/minecraft/class_2248; field_10523 REDSTONE_TORCH - f Lnet/minecraft/class_2248; field_23874 POLISHED_BLACKSTONE_BRICKS - f Lnet/minecraft/class_2248; field_10578 YELLOW_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10577 POTTED_BIRCH_SAPLING - f Lnet/minecraft/class_2248; field_23077 NETHER_GOLD_ORE - f Lnet/minecraft/class_2248; field_10390 NETHER_BRICK_SLAB - f Lnet/minecraft/class_2248; field_10236 PRISMARINE_BRICK_SLAB - f Lnet/minecraft/class_2248; field_10356 YELLOW_BED - f Lnet/minecraft/class_2248; field_23078 TWISTING_VINES - f Lnet/minecraft/class_2248; field_10520 PODZOL - f Lnet/minecraft/class_2248; field_10301 REDSTONE_WALL_TORCH - f Lnet/minecraft/class_2248; field_10548 LILY_OF_THE_VALLEY - f Lnet/minecraft/class_2248; field_10178 DARK_OAK_WOOD - f Lnet/minecraft/class_2248; field_10533 ACACIA_LOG - f Lnet/minecraft/class_2248; field_23879 POLISHED_BLACKSTONE_BRICK_WALL - f Lnet/minecraft/class_2248; field_10387 INFESTED_STONE_BRICKS - f Lnet/minecraft/class_2248; field_10494 STONE_BUTTON - f Lnet/minecraft/class_2248; field_10215 MAGENTA_WOOL - f Lnet/minecraft/class_2248; field_10445 COBBLESTONE - f Lnet/minecraft/class_2248; field_10180 LIME_BED - f Lnet/minecraft/class_2248; field_10564 POTTED_ACACIA_SAPLING - f Lnet/minecraft/class_2248; field_10251 BROWN_MUSHROOM - f Lnet/minecraft/class_2248; field_10250 STRIPPED_OAK_WOOD - f Lnet/minecraft/class_2248; field_10044 CHISELED_QUARTZ_BLOCK - f Lnet/minecraft/class_2248; field_10480 INFESTED_MOSSY_STONE_BRICKS - f Lnet/minecraft/class_2248; field_10411 SPRUCE_SIGN - f Lnet/minecraft/class_2248; field_16329 SMITHING_TABLE - f Lnet/minecraft/class_2248; field_10618 FIRE_CORAL - f Lnet/minecraft/class_2248; field_10566 DIRT - f Lnet/minecraft/class_2248; field_22123 WEEPING_VINES - f Lnet/minecraft/class_2248; field_10372 CYAN_WALL_BANNER - f Lnet/minecraft/class_2248; field_10586 POTTED_BAMBOO - f Lnet/minecraft/class_2248; field_10585 MAGENTA_CONCRETE - f Lnet/minecraft/class_2248; field_16540 JIGSAW - f Lnet/minecraft/class_2248; field_10601 SMOOTH_QUARTZ_SLAB - f Lnet/minecraft/class_2248; field_10511 BIRCH_LOG - f Lnet/minecraft/class_2248; field_23877 POLISHED_BLACKSTONE_BRICK_SLAB - f Lnet/minecraft/class_2248; field_10286 PURPUR_BLOCK - f Lnet/minecraft/class_2248; field_10253 COARSE_DIRT - f Lnet/minecraft/class_2248; field_10621 LIGHT_BLUE_BED - f Lnet/minecraft/class_2248; field_22124 WEEPING_VINES_PLANT - f Lnet/minecraft/class_2248; field_10242 LIGHT_BLUE_CONCRETE - f Lnet/minecraft/class_2248; field_10189 GRANITE_SLAB - f Lnet/minecraft/class_2248; field_10606 WITHER_ROSE - f Lnet/minecraft/class_2248; field_23878 POLISHED_BLACKSTONE_BRICK_STAIRS - f Lnet/minecraft/class_2248; field_10306 JUNGLE_LOG - f Lnet/minecraft/class_2248; field_10169 HORN_CORAL - f Lnet/minecraft/class_2248; field_22099 WARPED_STAIRS - f Lnet/minecraft/class_2248; field_10497 RED_NETHER_BRICK_STAIRS - f Lnet/minecraft/class_2248; field_10136 SMOOTH_STONE_SLAB - f Lnet/minecraft/class_2248; field_10135 PRISMARINE - f Lnet/minecraft/class_2248; field_22427 POTTED_WARPED_ROOTS - f Lnet/minecraft/class_2248; field_10526 GREEN_TERRACOTTA - f Lnet/minecraft/class_2248; field_10525 COMMAND_BLOCK - f Lnet/minecraft/class_2248; field_10164 LAVA - f Lnet/minecraft/class_2248; field_10145 YELLOW_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10144 ACACIA_FENCE - f Lnet/minecraft/class_2248; field_10316 NETHER_PORTAL - f Lnet/minecraft/class_2248; field_10226 ALLIUM - f Lnet/minecraft/class_2248; field_10376 SEAGRASS - f Lnet/minecraft/class_2248; field_22116 WARPED_ROOTS - f Lnet/minecraft/class_2248; field_10124 AIR - f Lnet/minecraft/class_2248; field_10381 COAL_BLOCK - f Lnet/minecraft/class_2248; field_10380 TRAPPED_CHEST - f Lnet/minecraft/class_2248; field_10402 MYCELIUM - f Lnet/minecraft/class_2248; field_10484 OAK_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_10407 ORANGE_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10202 WHITE_WALL_BANNER - f Lnet/minecraft/class_2248; field_10201 DIAMOND_BLOCK - f Lnet/minecraft/class_2248; field_9979 SANDSTONE - f Lnet/minecraft/class_2248; field_10186 BRAIN_CORAL_WALL_FAN - f Lnet/minecraft/class_2248; field_10078 CYAN_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10238 TALL_SEAGRASS - f Lnet/minecraft/class_2248; field_22100 CRIMSON_BUTTON - f Lnet/minecraft/class_2248; field_9994 POLISHED_ANDESITE_STAIRS - f Lnet/minecraft/class_2248; field_10102 SAND - f Lnet/minecraft/class_2248; field_10328 RED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10327 BEACON - f Lnet/minecraft/class_2248; field_10007 SANDSTONE_SLAB - f Lnet/minecraft/class_2248; field_10006 PRISMARINE_BRICKS - f Lnet/minecraft/class_2248; field_23261 LODESTONE - f Lnet/minecraft/class_2248; field_10133 LIME_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10132 DARK_OAK_FENCE - f Lnet/minecraft/class_2248; field_10018 POTTED_CACTUS - f Lnet/minecraft/class_2248; field_10608 ACACIA_TRAPDOOR - f Lnet/minecraft/class_2248; field_16492 SCAFFOLDING - f Lnet/minecraft/class_2248; field_10464 HORN_CORAL_BLOCK - f Lnet/minecraft/class_2248; field_10147 CARVED_PUMPKIN - f Lnet/minecraft/class_2248; field_10573 AZURE_BLUET - f Lnet/minecraft/class_2248; field_10225 PACKED_ICE - f Lnet/minecraft/class_2248; field_10224 LIGHT_WEIGHTED_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_22117 NETHER_SPROUTS - f Lnet/minecraft/class_2248; field_10063 MAGENTA_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10599 ORANGE_WALL_BANNER - f Lnet/minecraft/class_2248; field_10340 STONE - f Lnet/minecraft/class_2248; field_10447 BUBBLE_CORAL_WALL_FAN - f Lnet/minecraft/class_2248; field_10426 PURPLE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10588 LILY_PAD - f Lnet/minecraft/class_2248; field_10332 SPRUCE_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_9980 CRAFTING_TABLE - f Lnet/minecraft/class_2248; field_10292 CHISELED_SANDSTONE - f Lnet/minecraft/class_2248; field_10409 BLUE_TERRACOTTA - f Lnet/minecraft/class_2248; field_10408 BIRCH_STAIRS - f Lnet/minecraft/class_2248; field_10239 DEAD_HORN_CORAL_WALL_FAN - f Lnet/minecraft/class_2248; field_10220 GRAY_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10089 BRICK_STAIRS - f Lnet/minecraft/class_2248; field_10158 STONE_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_22097 WARPED_FENCE_GATE - f Lnet/minecraft/class_2248; field_10607 GRANITE_STAIRS - f Lnet/minecraft/class_2248; field_10500 DARK_OAK_SLAB - f Lnet/minecraft/class_2248; field_10499 BARRIER - f Lnet/minecraft/class_2248; field_22425 POTTED_WARPED_FUNGUS - f Lnet/minecraft/class_2248; field_22093 SOUL_WALL_TORCH - f Lnet/minecraft/class_2248; field_10449 POPPY - f Lnet/minecraft/class_2248; field_10300 MAGENTA_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10299 BIRCH_FENCE - f Lnet/minecraft/class_2248; field_10112 FERN - f Lnet/minecraft/class_2248; field_10001 END_STONE_BRICK_WALL - f Lnet/minecraft/class_2248; field_10000 BUBBLE_CORAL_BLOCK - f Lnet/minecraft/class_2248; field_10106 BLACK_CARPET - f Lnet/minecraft/class_2248; field_10105 CHIPPED_ANVIL - f Lnet/minecraft/class_2248; field_22114 WARPED_FUNGUS - f Lnet/minecraft/class_2248; field_10324 POTTED_BROWN_MUSHROOM - f Lnet/minecraft/class_2248; field_10486 BIRCH_TRAPDOOR - f Lnet/minecraft/class_2248; field_10603 SHULKER_BOX - f Lnet/minecraft/class_2248; field_10406 RED_BANNER - f Lnet/minecraft/class_2248; field_10091 REDSTONE_WIRE - f Lnet/minecraft/class_2248; field_10441 LAPIS_BLOCK - f Lnet/minecraft/class_2248; field_10123 BROWN_TERRACOTTA - f Lnet/minecraft/class_2248; field_10122 JUNGLE_STAIRS - f Lnet/minecraft/class_2248; field_22098 CRIMSON_STAIRS - f Lnet/minecraft/class_2248; field_10386 ANDESITE_STAIRS - f Lnet/minecraft/class_2248; field_10382 WATER - f Lnet/minecraft/class_2248; field_22426 POTTED_CRIMSON_ROOTS - f Lnet/minecraft/class_2248; field_10171 GLOWSTONE - f Lnet/minecraft/class_2248; field_10086 BLUE_ORCHID - f Lnet/minecraft/class_2248; field_10454 STONE_SLAB - f Lnet/minecraft/class_2248; field_10453 IRON_TRAPDOOR - f Lnet/minecraft/class_2248; field_10428 DEAD_BUSH - f Lnet/minecraft/class_2248; field_10321 LIGHT_BLUE_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10319 JUNGLE_FENCE - f Lnet/minecraft/class_2248; field_10517 DIORITE_WALL - f Lnet/minecraft/class_2248; field_10516 FIRE_CORAL_BLOCK - f Lnet/minecraft/class_2248; field_10487 POTTED_DEAD_BUSH - f Lnet/minecraft/class_2248; field_10017 JUNGLE_TRAPDOOR - f Lnet/minecraft/class_2248; field_10415 TERRACOTTA - f Lnet/minecraft/class_2248; field_10414 DAMAGED_ANVIL - f Lnet/minecraft/class_2248; field_22115 WARPED_WART_BLOCK - f Lnet/minecraft/class_2248; field_10199 WHITE_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10062 BLACK_BANNER - f Lnet/minecraft/class_2248; field_10392 STONE_BRICK_STAIRS - f Lnet/minecraft/class_2248; field_9973 IRON_DOOR - f Lnet/minecraft/class_2248; field_10584 TUBE_CORAL_WALL_FAN - f Lnet/minecraft/class_2248; field_10052 LIGHT_GRAY_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10442 DIAMOND_ORE - f Lnet/minecraft/class_2248; field_10200 DISPENSER - f Lnet/minecraft/class_2248; field_10351 COBBLESTONE_SLAB - f Lnet/minecraft/class_2248; field_10190 PRISMARINE_BRICK_STAIRS - f Lnet/minecraft/class_2248; field_10450 REPEATER - f Lnet/minecraft/class_2248; field_10156 WHITE_TULIP - f Lnet/minecraft/class_2248; field_23871 BLACKSTONE_WALL - f Lnet/minecraft/class_2248; field_10628 LIGHT_GRAY_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10627 JUNGLE_DOOR - f Lnet/minecraft/class_2248; field_10446 WHITE_WOOL - f Lnet/minecraft/class_2248; field_16334 SMOKER - f Lnet/minecraft/class_2248; field_10296 DEAD_BUBBLE_CORAL - f Lnet/minecraft/class_2248; field_10378 LILAC - f Lnet/minecraft/class_2248; field_10377 COMPARATOR - f Lnet/minecraft/class_2248; field_22119 STRIPPED_CRIMSON_STEM - f Lnet/minecraft/class_2248; field_10057 OAK_BUTTON - f Lnet/minecraft/class_2248; field_10065 MOSSY_STONE_BRICKS - f Lnet/minecraft/class_2248; field_10275 LIME_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10139 YELLOW_WALL_BANNER - f Lnet/minecraft/class_2248; field_10476 SEA_PICKLE - f Lnet/minecraft/class_2248; field_10475 GREEN_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10181 FURNACE - f Lnet/minecraft/class_2248; field_10120 WHITE_BED - f Lnet/minecraft/class_2248; field_22103 WARPED_DOOR - f Lnet/minecraft/class_2248; field_10283 SMOOTH_RED_SANDSTONE_SLAB - f Lnet/minecraft/class_2248; field_10496 ORANGE_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10495 FLOWER_POT - f Lnet/minecraft/class_2248; field_10571 GOLD_ORE - f Lnet/minecraft/class_2248; field_10159 NETHER_BRICK_STAIRS - f Lnet/minecraft/class_2248; field_10397 ACACIA_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_10087 WHITE_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10315 PINK_TULIP - f Lnet/minecraft/class_2248; field_10095 ORANGE_WOOL - f Lnet/minecraft/class_2248; field_10233 CYAN_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10232 ACACIA_DOOR - f Lnet/minecraft/class_2248; field_16333 BLAST_FURNACE - f Lnet/minecraft/class_2248; field_10579 DEAD_FIRE_CORAL - f Lnet/minecraft/class_2248; field_10508 DIORITE - f Lnet/minecraft/class_2248; field_10430 ROSE_BUSH - f Lnet/minecraft/class_2248; field_10429 DAYLIGHT_DETECTOR - f Lnet/minecraft/class_2248; field_10066 SPRUCE_BUTTON - f Lnet/minecraft/class_2248; field_10416 CRACKED_STONE_BRICKS - f Lnet/minecraft/class_2248; field_22505 CRIMSON_HYPHAE - f Lnet/minecraft/class_2248; field_10051 PINK_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10318 LIME_WALL_BANNER - f Lnet/minecraft/class_2248; field_9974 NETHER_WART - f Lnet/minecraft/class_2248; field_10470 DARK_OAK_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_10384 BLUE_ICE - f Lnet/minecraft/class_2248; field_10383 RED_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10121 OAK_SIGN - f Lnet/minecraft/class_2248; field_10410 ORANGE_BED - f Lnet/minecraft/class_2248; field_22104 CRIMSON_SIGN - f Lnet/minecraft/class_2248; field_10024 MOSSY_STONE_BRICK_SLAB - f Lnet/minecraft/class_2248; field_10191 BRICK_SLAB - f Lnet/minecraft/class_2248; field_10130 DARK_PRISMARINE_STAIRS - f Lnet/minecraft/class_2248; field_23872 BLACKSTONE_SLAB - f Lnet/minecraft/class_2248; field_10212 IRON_ORE - f Lnet/minecraft/class_2248; field_10469 MAGENTA_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10468 POTTED_OAK_SAPLING - f Lnet/minecraft/class_2248; field_23869 BLACKSTONE - f Lnet/minecraft/class_2248; field_10560 PISTON - f Lnet/minecraft/class_2248; field_10534 RED_SAND - f Lnet/minecraft/class_2248; field_18890 CUT_SANDSTONE_SLAB - f Lnet/minecraft/class_2248; field_10297 DARK_PRISMARINE - f Lnet/minecraft/class_2248; field_10609 CARROTS - f Lnet/minecraft/class_2248; field_10246 DARK_OAK_TRAPDOOR - f Lnet/minecraft/class_2248; field_10522 PINK_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10521 SPRUCE_DOOR - f Lnet/minecraft/class_2248; field_10009 JACK_O_LANTERN - f Lnet/minecraft/class_2248; field_10270 RED_TULIP - f Lnet/minecraft/class_2248; field_10083 LOOM - f Lnet/minecraft/class_2248; field_10082 DEAD_TUBE_CORAL - f Lnet/minecraft/class_2248; field_10583 SUNFLOWER - f Lnet/minecraft/class_2248; field_10582 HEAVY_WEIGHTED_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_10293 WHEAT - f Lnet/minecraft/class_2248; field_10361 CUT_SANDSTONE - f Lnet/minecraft/class_2248; field_22118 CRIMSON_STEM - f Lnet/minecraft/class_2248; field_10474 GRANITE - f Lnet/minecraft/class_2248; field_10203 LIGHT_BLUE_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10274 MAGENTA_WALL_BANNER - f Lnet/minecraft/class_2248; field_10498 FIRE_CORAL_WALL_FAN - f Lnet/minecraft/class_2248; field_10550 BLUE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10626 BLACK_TERRACOTTA - f Lnet/minecraft/class_2248; field_10625 COBBLESTONE_WALL - f Lnet/minecraft/class_2248; field_22101 WARPED_BUTTON - f Lnet/minecraft/class_2248; field_10216 DIORITE_STAIRS - f Lnet/minecraft/class_2248; field_10266 NETHER_BRICKS - f Lnet/minecraft/class_2248; field_10592 BIRCH_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_10298 PETRIFIED_OAK_SLAB - f Lnet/minecraft/class_2248; field_10350 PRISMARINE_STAIRS - f Lnet/minecraft/class_2248; field_23870 BLACKSTONE_STAIRS - f Lnet/minecraft/class_2248; field_10353 GRAY_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10352 BIRCH_DOOR - f Lnet/minecraft/class_2248; field_10379 PISTON_HEAD - f Lnet/minecraft/class_2248; field_16328 BARREL - f Lnet/minecraft/class_2248; field_10572 DEAD_BRAIN_CORAL - f Lnet/minecraft/class_2248; field_10247 POTATOES - f Lnet/minecraft/class_2248; field_10056 STONE_BRICKS - f Lnet/minecraft/class_2248; field_10183 CAKE - f Lnet/minecraft/class_2248; field_10048 ORANGE_TULIP - f Lnet/minecraft/class_2248; field_10362 FARMLAND - f Lnet/minecraft/class_2248; field_10179 NOTE_BLOCK - f Lnet/minecraft/class_2248; field_10289 POLISHED_GRANITE - f Lnet/minecraft/class_2248; field_10600 YELLOW_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10050 LIGHT_BLUE_WALL_BANNER - f Lnet/minecraft/class_2248; field_9991 WHITE_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_9990 MOSSY_COBBLESTONE_WALL - f Lnet/minecraft/class_2248; field_9976 HORN_CORAL_WALL_FAN - f Lnet/minecraft/class_2248; field_10004 BROWN_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10255 GRAVEL - f Lnet/minecraft/class_2248; field_10364 NETHER_BRICK_FENCE - f Lnet/minecraft/class_2248; field_10026 JUNGLE_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_22102 CRIMSON_DOOR - f Lnet/minecraft/class_2248; field_10329 POLISHED_GRANITE_SLAB - f Lnet/minecraft/class_2248; field_10099 WALL_TORCH - f Lnet/minecraft/class_2248; field_10098 ACACIA_LEAVES - f Lnet/minecraft/class_2248; field_10433 CYAN_CARPET - f Lnet/minecraft/class_2248; field_10208 PLAYER_WALL_HEAD - f Lnet/minecraft/class_2248; field_10303 JUNGLE_WOOD - f Lnet/minecraft/class_2248; field_10092 MAGMA_BLOCK - f Lnet/minecraft/class_2248; field_9985 LIGHT_GRAY_BANNER - f Lnet/minecraft/class_2248; field_10551 FIRE_CORAL_FAN - f Lnet/minecraft/class_2248; field_10280 ORANGE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10014 LIME_TERRACOTTA - f Lnet/minecraft/class_2248; field_10013 EMERALD_ORE - f Lnet/minecraft/class_2248; field_22131 WARPED_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_10310 POLISHED_DIORITE_STAIRS - f Lnet/minecraft/class_2248; field_10331 ATTACHED_PUMPKIN_STEM - f Lnet/minecraft/class_2248; field_10088 SPRUCE_WALL_SIGN - f Lnet/minecraft/class_2248; field_10119 OAK_SLAB - f Lnet/minecraft/class_2248; field_10118 RED_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_22108 NETHERITE_BLOCK - f Lnet/minecraft/class_2248; field_10114 SOUL_SAND - f Lnet/minecraft/class_2248; field_10170 GREEN_WOOL - f Lnet/minecraft/class_2248; field_10367 GREEN_CONCRETE - f Lnet/minecraft/class_2248; field_10513 BIRCH_FENCE_GATE - f Lnet/minecraft/class_2248; field_10425 POWERED_RAIL - f Lnet/minecraft/class_2248; field_10385 ACACIA_SAPLING - f Lnet/minecraft/class_2248; field_10072 GRANITE_WALL - f Lnet/minecraft/class_2248; field_10264 DEAD_BRAIN_CORAL_BLOCK - f Lnet/minecraft/class_2248; field_23867 CRACKED_NETHER_BRICKS - f Lnet/minecraft/class_2248; field_16999 SWEET_BERRY_BUSH - f Lnet/minecraft/class_2248; field_10061 POTTED_PINK_TULIP - f Lnet/minecraft/class_2248; field_10073 BROWN_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10036 FIRE - f Lnet/minecraft/class_2248; field_10035 DARK_OAK_LEAVES - f Lnet/minecraft/class_2248; field_10541 NETHER_WART_BLOCK - f Lnet/minecraft/class_2248; field_10165 CYAN_BANNER - f Lnet/minecraft/class_2248; field_10005 HORN_CORAL_FAN - f Lnet/minecraft/class_2248; field_10538 MAGENTA_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10444 PINK_TERRACOTTA - f Lnet/minecraft/class_2248; field_10443 ENDER_CHEST - f Lnet/minecraft/class_2248; field_10150 ATTACHED_MELON_STEM - f Lnet/minecraft/class_2248; field_10391 BIRCH_WALL_SIGN - f Lnet/minecraft/class_2248; field_22132 CRIMSON_FENCE - f Lnet/minecraft/class_2248; field_10207 MOSSY_COBBLESTONE_STAIRS - f Lnet/minecraft/class_2248; field_22090 SOUL_SOIL - f Lnet/minecraft/class_2248; field_10314 RED_WOOL - f Lnet/minecraft/class_2248; field_10071 SPRUCE_SLAB - f Lnet/minecraft/class_2248; field_10070 BLACK_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10160 DARK_OAK_SAPLING - f Lnet/minecraft/class_2248; field_10025 DETECTOR_RAIL - f Lnet/minecraft/class_2248; field_10058 RED_CONCRETE - f Lnet/minecraft/class_2248; field_10041 JUNGLE_FENCE_GATE - f Lnet/minecraft/class_2248; field_10252 STONE_BRICK_WALL - f Lnet/minecraft/class_2248; field_10396 DEAD_BUBBLE_CORAL_BLOCK - f Lnet/minecraft/class_2248; field_9999 ACACIA_WOOD - f Lnet/minecraft/class_2248; field_10510 PURPLE_CARPET - f Lnet/minecraft/class_2248; field_10042 CREEPER_HEAD - f Lnet/minecraft/class_2248; field_23868 QUARTZ_BRICKS - f Lnet/minecraft/class_2248; field_22111 WARPED_STEM - f Lnet/minecraft/class_2248; field_10074 POTTED_OXEYE_DAISY - f Lnet/minecraft/class_2248; field_10357 GREEN_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10591 GRAY_CARPET - f Lnet/minecraft/class_2248; field_10581 ZOMBIE_WALL_HEAD - f Lnet/minecraft/class_2248; field_23865 POLISHED_BLACKSTONE_WALL - f Lnet/minecraft/class_2248; field_17350 CAMPFIRE - f Lnet/minecraft/class_2248; field_10395 CHAIN_COMMAND_BLOCK - f Lnet/minecraft/class_2248; field_10612 PINK_BANNER - f Lnet/minecraft/class_2248; field_10155 SPRUCE_WOOD - f Lnet/minecraft/class_2248; field_10285 GLASS_PANE - f Lnet/minecraft/class_2248; field_10596 COBBLESTONE_STAIRS - f Lnet/minecraft/class_2248; field_10540 OBSIDIAN - f Lnet/minecraft/class_2248; field_10539 BIRCH_LEAVES - f Lnet/minecraft/class_2248; field_10079 BRAIN_CORAL_FAN - f Lnet/minecraft/class_2248; field_10371 BLACK_SHULKER_BOX - f Lnet/minecraft/class_2248; field_21211 HONEY_BLOCK - f Lnet/minecraft/class_2248; field_10575 BIRCH_SAPLING - f Lnet/minecraft/class_2248; field_10069 RED_BED - f Lnet/minecraft/class_2248; field_10143 YELLOW_TERRACOTTA - f Lnet/minecraft/class_2248; field_10142 SANDSTONE_STAIRS - f Lnet/minecraft/class_2248; field_10518 CUT_RED_SANDSTONE - f Lnet/minecraft/class_2248; field_10163 BROWN_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10011 BLUE_CONCRETE - f Lnet/minecraft/class_2248; field_10483 SMOOTH_RED_SANDSTONE - f Lnet/minecraft/class_2248; field_10249 POTTED_ORANGE_TULIP - f Lnet/minecraft/class_2248; field_10399 PURPLE_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10413 RED_SANDSTONE_WALL - f Lnet/minecraft/class_2248; field_10195 TURTLE_EGG - f Lnet/minecraft/class_2248; field_10261 PUMPKIN - f Lnet/minecraft/class_2248; field_10514 BLUE_WOOL - f Lnet/minecraft/class_2248; field_10209 LIGHT_GRAY_CARPET - f Lnet/minecraft/class_2248; field_10432 PLAYER_HEAD - f Lnet/minecraft/class_2248; field_23866 CHISELED_NETHER_BRICKS - f Lnet/minecraft/class_2248; field_23860 SOUL_CAMPFIRE - f Lnet/minecraft/class_2248; field_10336 TORCH - f Lnet/minecraft/class_2248; field_10335 JUNGLE_LEAVES - f Lnet/minecraft/class_2248; field_10110 FROSTED_ICE - f Lnet/minecraft/class_2248; field_10185 GRAY_BANNER - f Lnet/minecraft/class_2248; field_10307 BIRCH_WOOD - f Lnet/minecraft/class_2248; field_10427 BUBBLE_CORAL_FAN - f Lnet/minecraft/class_2248; field_10595 WHITE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_22130 CRIMSON_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_10173 MOSSY_STONE_BRICK_STAIRS - f Lnet/minecraft/class_2248; field_10545 MELON - f Lnet/minecraft/class_2248; field_10187 OAK_WALL_SIGN - f Lnet/minecraft/class_2248; field_10461 BLACK_BED - f Lnet/minecraft/class_2248; field_10420 RED_SANDSTONE_STAIRS - f Lnet/minecraft/class_2248; field_10419 GREEN_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_21212 HONEYCOMB_BLOCK - f Lnet/minecraft/class_2248; field_10439 BROWN_CONCRETE - f Lnet/minecraft/class_2248; field_10291 SPRUCE_FENCE_GATE - f Lnet/minecraft/class_2248; field_10276 JUNGLE_SAPLING - f Lnet/minecraft/class_2248; field_10400 POTTED_WHITE_TULIP - f Lnet/minecraft/class_2248; field_10060 BLUE_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10515 NETHERRACK - f Lnet/minecraft/class_2248; field_10113 BROWN_WOOL - f Lnet/minecraft/class_2248; field_10059 MOSSY_STONE_BRICK_WALL - f Lnet/minecraft/class_2248; field_10614 DEAD_TUBE_CORAL_BLOCK - f Lnet/minecraft/class_2248; field_10597 VINE - f Lnet/minecraft/class_2248; field_10265 DARK_OAK_WALL_SIGN - f Lnet/minecraft/class_2248; field_10094 DEAD_BUBBLE_CORAL_WALL_FAN - f Lnet/minecraft/class_2248; field_10046 LIME_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_22095 WARPED_TRAPDOOR - f Lnet/minecraft/class_2248; field_10549 SMOOTH_SANDSTONE_STAIRS - f Lnet/minecraft/class_2248; field_10343 COBWEB - f Lnet/minecraft/class_2248; field_10235 CYAN_TERRACOTTA - f Lnet/minecraft/class_2248; field_10234 EMERALD_BLOCK - f Lnet/minecraft/class_2248; field_10617 JUNGLE_SLAB - f Lnet/minecraft/class_2248; field_10616 DARK_OAK_STAIRS - f Lnet/minecraft/class_2248; field_23152 RESPAWN_ANCHOR - f Lnet/minecraft/class_2248; field_9998 POTTED_WITHER_ROSE - f Lnet/minecraft/class_2248; field_10137 OAK_TRAPDOOR - f Lnet/minecraft/class_2248; field_10022 ORANGE_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10020 SPRUCE_FENCE - f Lnet/minecraft/class_2248; field_22092 SOUL_TORCH - f Lnet/minecraft/class_2248; field_10182 DANDELION - f Lnet/minecraft/class_2248; field_10311 RED_NETHER_BRICK_WALL - f Lnet/minecraft/class_2248; field_10309 TUBE_CORAL_BLOCK - f Lnet/minecraft/class_2248; field_10338 GREEN_CARPET - f Lnet/minecraft/class_2248; field_10472 DRAGON_WALL_HEAD - f Lnet/minecraft/class_2248; field_22504 STRIPPED_WARPED_HYPHAE - f Lnet/minecraft/class_2248; field_10563 OAK_STAIRS - f Lnet/minecraft/class_2248; field_10033 GLASS - f Lnet/minecraft/class_2248; field_10369 STRUCTURE_VOID - f Lnet/minecraft/class_2248; field_10602 BROWN_BANNER - f Lnet/minecraft/class_2248; field_10557 DEAD_FIRE_CORAL_WALL_FAN - f Lnet/minecraft/class_2248; field_10567 PINK_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_10570 PURPLE_TERRACOTTA - f Lnet/minecraft/class_2248; field_10569 SPRUCE_STAIRS - f Lnet/minecraft/class_2248; field_22096 CRIMSON_FENCE_GATE - f Lnet/minecraft/class_2248; field_10245 SMOOTH_QUARTZ_STAIRS - f Lnet/minecraft/class_2248; field_10188 OAK_FENCE_GATE - f Lnet/minecraft/class_2248; field_10363 LEVER - f Lnet/minecraft/class_2248; field_10031 ACACIA_SLAB - f Lnet/minecraft/class_2248; field_10030 SLIME_BLOCK - f Lnet/minecraft/class_2248; field_10479 GRASS - f Lnet/minecraft/class_2248; field_22424 POTTED_CRIMSON_FUNGUS - f Lnet/minecraft/class_2248; field_10138 POTTED_RED_MUSHROOM - f Lnet/minecraft/class_2248; field_10323 SPRUCE_TRAPDOOR - f Lnet/minecraft/class_2248; field_10630 SANDSTONE_WALL - f Lnet/minecraft/class_2248; field_10629 BRAIN_CORAL_BLOCK - f Lnet/minecraft/class_2248; field_22113 WARPED_NYLIUM - f Lnet/minecraft/class_2248; field_10034 CHEST - f Lnet/minecraft/class_2248; field_10090 LAPIS_ORE - f Lnet/minecraft/class_2248; field_10536 RED_CARPET - f Lnet/minecraft/class_2248; field_10535 ANVIL - f Lnet/minecraft/class_2248; field_10282 OBSERVER - f Lnet/minecraft/class_2248; field_10198 GREEN_BANNER - f Lnet/minecraft/class_2248; field_9986 RED_NETHER_BRICKS - f Lnet/minecraft/class_2248; field_10368 PURPLE_BANNER - f Lnet/minecraft/class_2248; field_9984 PUMPKIN_STEM - f Lnet/minecraft/class_2248; field_10401 ACACIA_WALL_SIGN - f Lnet/minecraft/class_2248; field_10347 DEAD_TUBE_CORAL_WALL_FAN - f Lnet/minecraft/class_2248; field_10345 LIGHT_BLUE_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_22089 SOUL_FIRE - f Lnet/minecraft/class_2248; field_10258 SPONGE - f Lnet/minecraft/class_2248; field_22133 WARPED_FENCE - f Lnet/minecraft/class_2248; field_10012 END_STONE_BRICK_STAIRS - f Lnet/minecraft/class_2248; field_22109 ANCIENT_DEBRIS - f Lnet/minecraft/class_2248; field_10349 GRAY_TERRACOTTA - f Lnet/minecraft/class_2248; field_10348 TRIPWIRE_HOOK - f Lnet/minecraft/class_2248; field_22091 BASALT - f Lnet/minecraft/class_2248; field_10146 BLACK_WOOL - f Lnet/minecraft/class_2248; field_10458 BLACK_CONCRETE - f Lnet/minecraft/class_2248; field_10457 ACACIA_FENCE_GATE - f Lnet/minecraft/class_2248; field_10127 NETHER_BRICK_WALL - f Lnet/minecraft/class_2248; field_10111 DEAD_FIRE_CORAL_BLOCK - f Lnet/minecraft/class_2248; field_10358 POTTED_CORNFLOWER - f Lnet/minecraft/class_2248; field_10272 RED_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10043 BLUE_CARPET - f Lnet/minecraft/class_2248; field_10509 CREEPER_WALL_HEAD - f Lnet/minecraft/class_2248; field_22112 STRIPPED_WARPED_STEM - f Lnet/minecraft/class_2248; field_10168 MELON_STEM - f Lnet/minecraft/class_2248; field_10587 JUNGLE_WALL_SIGN - f Lnet/minecraft/class_2248; field_10166 BONE_BLOCK - f Lnet/minecraft/class_2248; field_10281 BLUE_BANNER - f Lnet/minecraft/class_2248; field_10260 SPAWNER - f Lnet/minecraft/class_2248; field_10562 WET_SPONGE - f Lnet/minecraft/class_2248; field_10116 DEAD_BRAIN_CORAL_WALL_FAN - f Lnet/minecraft/class_2248; field_10096 YELLOW_GLAZED_TERRACOTTA - f Lnet/minecraft/class_2248; field_9987 BEDROCK - f Lnet/minecraft/class_2248; field_22094 CRIMSON_TRAPDOOR - f Lnet/minecraft/class_2248; field_10440 STONE_STAIRS - f Lnet/minecraft/class_2248; field_10615 STICKY_PISTON - f Lnet/minecraft/class_2248; field_10257 BIRCH_SLAB - f Lnet/minecraft/class_2248; field_10256 ACACIA_STAIRS - f Lnet/minecraft/class_2248; field_22423 CRYING_OBSIDIAN - f Lnet/minecraft/class_2248; field_10590 LIGHT_GRAY_TERRACOTTA - f Lnet/minecraft/class_2248; field_10589 TRIPWIRE - f Lnet/minecraft/class_2248; field_10197 WHITE_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10196 DARK_OAK_FENCE_GATE - f Lnet/minecraft/class_2248; field_10273 POTTED_LILY_OF_THE_VALLEY - f Lnet/minecraft/class_2248; field_9997 BLACK_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10489 ANDESITE_WALL - f Lnet/minecraft/class_2248; field_10488 DEAD_HORN_CORAL_BLOCK - f Lnet/minecraft/class_2248; field_23151 POLISHED_BASALT - f Lnet/minecraft/class_2248; field_10008 MOVING_PISTON - f Lnet/minecraft/class_2248; field_10473 BROWN_CARPET - f Lnet/minecraft/class_2248; field_10337 DRAGON_HEAD - f Lnet/minecraft/class_2248; field_22503 WARPED_HYPHAE - f Lnet/minecraft/class_2248; field_10421 LIME_CONCRETE - f Lnet/minecraft/class_2248; field_10624 RED_SANDSTONE_SLAB - f Lnet/minecraft/class_2248; field_10354 POTTED_DANDELION - f Lnet/minecraft/class_2248; field_10049 YELLOW_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10016 ANDESITE_SLAB - f Lnet/minecraft/class_2248; field_10491 SNOW_BLOCK - f Lnet/minecraft/class_2248; field_10028 LIME_WOOL - f Lnet/minecraft/class_2248; field_10366 STRIPPED_BIRCH_LOG - f Lnet/minecraft/class_2248; field_9977 ORANGE_CARPET - f Lnet/minecraft/class_2248; field_10493 DARK_OAK_BUTTON - f Lnet/minecraft/class_2248; field_10097 DEAD_BRAIN_CORAL_FAN - f Lnet/minecraft/class_2248; field_10268 PURPLE_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10580 BROWN_MUSHROOM_BLOCK - f Lnet/minecraft/class_2248; field_10544 JUNGLE_SIGN - f Lnet/minecraft/class_2248; field_10085 IRON_BLOCK - f Lnet/minecraft/class_2248; field_10084 STRIPPED_JUNGLE_WOOD - f Lnet/minecraft/class_2248; field_10326 LIGHT_GRAY_BED - f Lnet/minecraft/class_2248; field_10148 BIRCH_PLANKS - f Lnet/minecraft/class_2248; field_23079 TWISTING_VINES_PLANT - f Lnet/minecraft/class_2248; field_10546 ACTIVATOR_RAIL - f Lnet/minecraft/class_2248; field_10027 END_PORTAL - f Lnet/minecraft/class_2248; field_10370 BROWN_WALL_BANNER - f Lnet/minecraft/class_2248; field_10565 PINK_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10151 POTTED_POPPY - f Lnet/minecraft/class_2248; field_10157 LIME_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10434 PINK_CONCRETE - f Lnet/minecraft/class_2248; field_18891 CUT_RED_SANDSTONE_SLAB - f Lnet/minecraft/class_2248; field_10029 CACTUS - f Lnet/minecraft/class_2248; field_10459 PINK_WOOL - f Lnet/minecraft/class_2248; field_10478 RED_NETHER_BRICK_SLAB - f Lnet/minecraft/class_2248; field_10287 RED_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_10482 MAGENTA_CARPET - f Lnet/minecraft/class_2248; field_10481 SKELETON_SKULL - f Lnet/minecraft/class_2248; field_23880 GILDED_BLACKSTONE - f Lnet/minecraft/class_2248; field_10462 END_STONE_BRICKS - f Lnet/minecraft/class_2248; field_10045 ORANGE_BANNER - f Lnet/minecraft/class_2248; field_10254 STRIPPED_JUNGLE_LOG - f Lnet/minecraft/class_2248; field_10047 DEAD_BUBBLE_CORAL_FAN - f Lnet/minecraft/class_2248; field_10605 BLUE_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10228 DROPPER - f Lnet/minecraft/class_2248; field_10398 END_PORTAL_FRAME - f Lnet/minecraft/class_2248; field_22125 CRIMSON_ROOTS - f Lnet/minecraft/class_2248; field_10243 VOID_AIR - f Lnet/minecraft/class_2248; field_10240 RED_MUSHROOM_BLOCK - f Lnet/minecraft/class_2248; field_10330 DARK_OAK_SIGN - f Lnet/minecraft/class_2248; field_10334 JUNGLE_PLANKS - f Lnet/minecraft/class_2248; field_10109 CYAN_BED - f Lnet/minecraft/class_2248; field_10594 GREEN_WALL_BANNER - f Lnet/minecraft/class_2248; field_10077 GRAY_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10477 SNOW - f Lnet/minecraft/class_2248; field_10294 LIGHT_BLUE_WOOL - f Lnet/minecraft/class_2248; field_10054 PURPLE_WALL_BANNER - f Lnet/minecraft/class_2248; field_10161 OAK_PLANKS - f Lnet/minecraft/class_2248; field_10610 PINK_BED - f Lnet/minecraft/class_2248; field_10010 DARK_OAK_LOG - f Lnet/minecraft/class_2248; field_10359 HAY_BLOCK - f Lnet/minecraft/class_2248; field_10076 POTTED_DARK_OAK_SAPLING - f Lnet/minecraft/class_2248; field_10574 MAGENTA_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10505 PURPUR_PILLAR - f Lnet/minecraft/class_2248; field_10100 INFESTED_CRACKED_STONE_BRICKS - f Lnet/minecraft/class_2248; field_10231 BIRCH_SIGN - f Lnet/minecraft/class_2248; field_10559 RED_MUSHROOM - f Lnet/minecraft/class_2248; field_10558 STRIPPED_SPRUCE_WOOD - f Lnet/minecraft/class_2248; field_10437 QUARTZ_PILLAR - f Lnet/minecraft/class_2248; field_10333 BREWING_STAND - f Lnet/minecraft/class_2248; field_10542 YELLOW_CONCRETE - f Lnet/minecraft/class_2248; field_10295 ICE - f Lnet/minecraft/class_2248; field_10490 YELLOW_WOOL - f Lnet/minecraft/class_2248; field_10141 GRAY_BED - f Lnet/minecraft/class_2248; field_10436 STRIPPED_SPRUCE_LOG - f Lnet/minecraft/class_2248; field_10128 POTTED_FERN - f Lnet/minecraft/class_2248; field_10271 LIGHT_BLUE_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10466 WHITE_CARPET - f Lnet/minecraft/class_2248; field_10278 ACACIA_BUTTON - f Lnet/minecraft/class_2248; field_10176 INFESTED_CHISELED_STONE_BRICKS - f Lnet/minecraft/class_2248; field_10284 ACACIA_SIGN - f Lnet/minecraft/class_2248; field_9992 PURPUR_STAIRS - f Lnet/minecraft/class_2248; field_10154 WHITE_BANNER - f Lnet/minecraft/class_2248; field_10205 GOLD_BLOCK - f Lnet/minecraft/class_2248; field_10204 STRIPPED_BIRCH_WOOD - f Lnet/minecraft/class_2248; field_10448 DEAD_TUBE_CORAL_FAN - f Lnet/minecraft/class_2248; field_9975 SPRUCE_PLANKS - f Lnet/minecraft/class_2248; field_10067 BLUE_WALL_BANNER - f Lnet/minecraft/class_2248; field_10305 LIME_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10451 QUARTZ_STAIRS - f Lnet/minecraft/class_2248; field_10593 CAULDRON - f Lnet/minecraft/class_2248; field_10269 BRICK_WALL - f Lnet/minecraft/class_2248; field_10463 KELP_PLANT - f Lnet/minecraft/class_2248; field_10519 STRIPPED_OAK_LOG - f Lnet/minecraft/class_2248; field_10040 LIME_CARPET - f Lnet/minecraft/class_2248; field_10101 WITHER_SKELETON_WALL_SKULL - f Lnet/minecraft/class_2248; field_10365 POTTED_AZURE_BLUET - f Lnet/minecraft/class_2248; field_9996 LIGHT_GRAY_STAINED_GLASS - f Lnet/minecraft/class_2248; field_23863 POLISHED_BLACKSTONE_PRESSURE_PLATE - f Lnet/minecraft/class_2248; field_16541 LANTERN - f Lnet/minecraft/class_2248; field_10613 END_GATEWAY - f Lnet/minecraft/class_2248; field_10547 YELLOW_BANNER - f Lnet/minecraft/class_2248; field_10221 DEAD_HORN_CORAL_FAN - f Lnet/minecraft/class_2248; field_10055 GREEN_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10504 BOOKSHELF - f Lnet/minecraft/class_2248; field_10503 OAK_LEAVES - f Lnet/minecraft/class_2248; field_22128 CRIMSON_SLAB - f Lnet/minecraft/class_2248; field_10435 POLISHED_GRANITE_STAIRS - f Lnet/minecraft/class_2248; field_10344 RED_SANDSTONE - f Lnet/minecraft/class_2248; field_10152 PURPLE_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_20421 BEE_NEST - f Lnet/minecraft/class_2248; field_10015 MAGENTA_TERRACOTTA - f Lnet/minecraft/class_2248; field_10524 REDSTONE_LAMP - f Lnet/minecraft/class_2248; field_10223 JUKEBOX - f Lnet/minecraft/class_2248; field_10619 CYAN_WOOL - f Lnet/minecraft/class_2248; field_10288 BROWN_BED - f Lnet/minecraft/class_2248; field_10394 OAK_SAPLING - f Lnet/minecraft/class_2248; field_10308 CYAN_CONCRETE - f Lnet/minecraft/class_2248; field_10467 SMOOTH_SANDSTONE - f Lnet/minecraft/class_2248; field_23864 POLISHED_BLACKSTONE_BUTTON - f Lnet/minecraft/class_2248; field_22110 SOUL_LANTERN - f Lnet/minecraft/class_2248; field_10126 OAK_WOOD - f Lnet/minecraft/class_2248; field_10598 POTTED_RED_TULIP - f Lnet/minecraft/class_2248; field_10248 CYAN_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10393 PINK_CARPET - f Lnet/minecraft/class_2248; field_10241 ZOMBIE_HEAD - f Lnet/minecraft/class_2248; field_10263 REPEATING_COMMAND_BLOCK - f Lnet/minecraft/class_2248; field_10229 LIME_BANNER - f Lnet/minecraft/class_2248; field_23985 CHAIN - f Lnet/minecraft/class_2248; field_10167 RAIL - f Lnet/minecraft/class_2248; field_10053 TUBE_CORAL_FAN - f Lnet/minecraft/class_2248; field_10068 RED_SHULKER_BOX - f Lnet/minecraft/class_2248; field_9989 MOSSY_COBBLESTONE - f Lnet/minecraft/class_2248; field_9988 SPRUCE_LEAVES - f Lnet/minecraft/class_2248; field_10217 SPRUCE_SAPLING - f Lnet/minecraft/class_2248; field_22129 WARPED_SLAB - f Lnet/minecraft/class_2248; field_10039 SMOOTH_RED_SANDSTONE_STAIRS - f Lnet/minecraft/class_2248; field_10561 GREEN_BED - f Lnet/minecraft/class_2248; field_10117 CHISELED_RED_SANDSTONE - f Lnet/minecraft/class_2248; field_9982 BLUE_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10325 LIGHT_BLUE_TERRACOTTA - f Lnet/minecraft/class_2248; field_10302 COCOA - f Lnet/minecraft/class_2248; field_20422 BEEHIVE - f Lnet/minecraft/class_2248; field_10206 PURPLE_CONCRETE - f Lnet/minecraft/class_2248; field_9978 SMOOTH_QUARTZ - f Lnet/minecraft/class_2248; field_10530 PRISMARINE_WALL - f Lnet/minecraft/class_2248; field_10342 DRIED_KELP_BLOCK - f Lnet/minecraft/class_2248; field_10620 OAK_FENCE - f Lnet/minecraft/class_2248; field_10259 PURPLE_WOOL - f Lnet/minecraft/class_2248; field_10322 POLISHED_ANDESITE_SLAB - f Lnet/minecraft/class_2248; field_10506 BLACK_CONCRETE_POWDER - f Lnet/minecraft/class_2248; field_9981 POTTED_BLUE_ORCHID - f Lnet/minecraft/class_2248; field_10317 PINK_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10460 CLAY - f Lnet/minecraft/class_2248; field_10423 GRAY_WOOL - f Lnet/minecraft/class_2248; field_10290 LIGHT_BLUE_CARPET - f Lnet/minecraft/class_2248; field_10388 SKELETON_WALL_SKULL - f Lnet/minecraft/class_2248; field_10104 BRICKS - f Lnet/minecraft/class_2248; field_10103 STRIPPED_ACACIA_WOOD - f Lnet/minecraft/class_2248; field_23861 POLISHED_BLACKSTONE_STAIRS - f Lnet/minecraft/class_2248; field_16335 STONECUTTER - f Lnet/minecraft/class_2248; field_10622 STRIPPED_ACACIA_LOG - f Lnet/minecraft/class_2248; field_10341 BEETROOTS - f Lnet/minecraft/class_2248; field_10438 MAGENTA_BANNER - f Lnet/minecraft/class_2248; field_10611 WHITE_TERRACOTTA - f Lnet/minecraft/class_2248; field_10471 END_STONE - f Lnet/minecraft/class_2248; field_10568 DEAD_FIRE_CORAL_FAN - f Lnet/minecraft/class_2248; field_10373 BROWN_SHULKER_BOX - f Lnet/minecraft/class_2248; field_10556 MUSHROOM_STEM - f Lnet/minecraft/class_2248; field_10149 OAK_DOOR - f Lnet/minecraft/class_2248; field_22126 CRIMSON_PLANKS - f Lnet/minecraft/class_2248; field_10543 CAVE_AIR - f Lnet/minecraft/class_2248; field_10279 RED_WALL_BANNER - f Lnet/minecraft/class_2248; field_10129 LIGHT_GRAY_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_17563 COMPOSTER - f Lnet/minecraft/class_2248; field_10038 GRAY_CONCRETE - f Lnet/minecraft/class_2248; field_10175 PURPUR_SLAB - f Lnet/minecraft/class_2248; field_10218 ACACIA_PLANKS - f Lnet/minecraft/class_2248; field_10019 PURPLE_BED - f Lnet/minecraft/class_2248; field_10507 DIORITE_SLAB - f Lnet/minecraft/class_2248; field_9993 KELP - f Lnet/minecraft/class_2248; field_10512 YELLOW_CARPET - f Lnet/minecraft/class_2248; field_10177 WITHER_SKELETON_SKULL - f Lnet/minecraft/class_2248; field_23862 POLISHED_BLACKSTONE_SLAB - f Lnet/minecraft/class_2248; field_16332 BELL - f Lnet/minecraft/class_2248; field_10162 POTTED_ALLIUM - f Lnet/minecraft/class_2248; field_10555 GRAY_STAINED_GLASS - f Lnet/minecraft/class_2248; field_10375 TNT - f Lnet/minecraft/class_2248; field_10374 STRIPPED_DARK_OAK_WOOD - f Lnet/minecraft/class_2248; field_10244 STRIPPED_DARK_OAK_LOG - f Lnet/minecraft/class_2248; field_10194 GRASS_PATH - f Lnet/minecraft/class_2248; field_10452 LIGHT_BLUE_BANNER - f Lnet/minecraft/class_2248; field_22127 WARPED_PLANKS - f Lnet/minecraft/class_2248; field_10422 BUBBLE_COLUMN - f Lnet/minecraft/class_2248; field_10184 ORANGE_TERRACOTTA - f Lnet/minecraft/class_2248; field_10081 DRAGON_EGG - f Lnet/minecraft/class_2248; field_10576 IRON_BARS - f Lnet/minecraft/class_2248; field_9983 LADDER - f Lnet/minecraft/class_2248; field_10537 BLACK_WALL_BANNER - f Lnet/minecraft/class_2248; field_10355 CYAN_STAINED_GLASS_PANE - f Lnet/minecraft/class_2248; field_10424 SUGAR_CANE - f Lnet/minecraft/class_2248; field_10222 LIGHT_GRAY_WOOL - f Lnet/minecraft/class_2248; field_22422 TARGET - f Lnet/minecraft/class_2248; field_10075 DARK_OAK_PLANKS - f Lnet/minecraft/class_2248; field_10172 LIGHT_GRAY_CONCRETE - f Lnet/minecraft/class_2248; field_10360 SMOOTH_STONE - f Lnet/minecraft/class_2248; field_10527 BLUE_BED -c net/minecraft/class_2258 net/minecraft/block/BubbleColumnBlock - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Z)V method_9657 placeBubbleColumn - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9656 getDrag - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_9658 canHoldBubbleColumn - f Lnet/minecraft/class_2746; field_10680 DRAG -c net/minecraft/class_2260 net/minecraft/block/BrewingStandBlock - f Lnet/minecraft/class_265; field_10701 SHAPE - f [Lnet/minecraft/class_2746; field_10700 HAS_BOTTLE -c net/minecraft/class_2261 net/minecraft/block/BushBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9695 isValidGround -c net/minecraft/class_2263 net/minecraft/block/IBucketPickupHandler - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Lnet/minecraft/class_3611; method_9700 pickupFluid -c net/minecraft/class_2266 net/minecraft/block/CactusBlock - f Lnet/minecraft/class_2758; field_10709 AGE - f Lnet/minecraft/class_265; field_10711 COLLISION_SHAPE - f Lnet/minecraft/class_265; field_10710 OUTLINE_SHAPE -c net/minecraft/class_2269 net/minecraft/block/AbstractButtonBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9715 checkPressed - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_21845 powerBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9713 updateNeighbors - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Z)V method_9714 playSound - m ()I method_26153 getActiveDuration - m (Z)Lnet/minecraft/class_3414; method_9712 getSoundEvent - f Lnet/minecraft/class_265; field_10731 AABB_WEST_OFF - f Lnet/minecraft/class_265; field_10715 AABB_SOUTH_OFF - f Lnet/minecraft/class_265; field_10726 AABB_CEILING_Z_ON - f Lnet/minecraft/class_265; field_10720 AABB_EAST_OFF - f Lnet/minecraft/class_265; field_10717 AABB_CEILING_X_ON - f Lnet/minecraft/class_265; field_10727 AABB_CEILING_Z_OFF - f Lnet/minecraft/class_265; field_10721 AABB_CEILING_X_OFF - f Lnet/minecraft/class_265; field_10716 AABB_FLOOR_Z_OFF - f Lnet/minecraft/class_265; field_10728 AABB_NORTH_OFF - f Lnet/minecraft/class_265; field_10723 AABB_FLOOR_X_OFF - f Z field_10725 wooden - f Lnet/minecraft/class_265; field_10732 AABB_WEST_ON - f Lnet/minecraft/class_2746; field_10729 POWERED - f Lnet/minecraft/class_265; field_10719 AABB_NORTH_ON - f Lnet/minecraft/class_265; field_10724 AABB_SOUTH_ON - f Lnet/minecraft/class_265; field_10718 AABB_EAST_ON - f Lnet/minecraft/class_265; field_10730 AABB_FLOOR_Z_ON - f Lnet/minecraft/class_265; field_10722 AABB_FLOOR_X_ON -c net/minecraft/class_2269$1 net/minecraft/block/AbstractButtonBlock$1 - f [I field_10733 field_208106_b - f [I field_10734 field_180420_a -c net/minecraft/class_3922 net/minecraft/block/CampfireBlock - m (Lnet/minecraft/class_2680;)Z method_23896 isLit - m (Lnet/minecraft/class_4970$class_4971;)Z method_30034 func_241469_a_ - m (Lnet/minecraft/class_2680;)Z method_30035 canBeLit - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_23895 isSmokingBlockAt - m (Lnet/minecraft/class_2680;)Z method_17456 isHayBlock - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_29288 extinguish - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ZZ)V method_17455 spawnSmokeParticles - f Lnet/minecraft/class_2753; field_17564 FACING - f Lnet/minecraft/class_2746; field_17354 WATERLOGGED - f Lnet/minecraft/class_2746; field_17353 SIGNAL_FIRE - f Lnet/minecraft/class_265; field_17351 SHAPE - f I field_25182 fireDamage - f Lnet/minecraft/class_2746; field_17352 LIT - f Lnet/minecraft/class_265; field_21580 SMOKING_SHAPE - f Z field_23881 smokey -c net/minecraft/class_2272 net/minecraft/block/CakeBlock - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1269; method_9719 eatSlice - f Lnet/minecraft/class_2758; field_10739 BITES - f [Lnet/minecraft/class_265; field_10738 SHAPES -c net/minecraft/class_3711 net/minecraft/block/CartographyTableBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17457 func_220267_a - f Lnet/minecraft/class_2561; field_17355 CONTAINER_NAME -c net/minecraft/class_2271 net/minecraft/block/CarrotBlock - f [Lnet/minecraft/class_265; field_10737 SHAPES -c net/minecraft/class_2275 net/minecraft/block/CauldronBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;I)V method_9726 setWaterLevel - f Lnet/minecraft/class_265; field_10747 INSIDE - f Lnet/minecraft/class_265; field_10746 SHAPE - f Lnet/minecraft/class_2758; field_10745 LEVEL -c net/minecraft/class_2276 net/minecraft/block/CarvedPumpkinBlock - m ()Lnet/minecraft/class_2700; method_9732 getSnowmanBasePattern - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9731 trySpawnGolem - m (Lnet/minecraft/class_2680;)Z method_9728 func_210301_j - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_9733 canDispenserPlace - m ()Lnet/minecraft/class_2700; method_9730 getGolemPattern - m ()Lnet/minecraft/class_2700; method_9729 getSnowmanPattern - m ()Lnet/minecraft/class_2700; method_9727 getGolemBasePattern - f Lnet/minecraft/class_2753; field_10748 FACING - f Lnet/minecraft/class_2700; field_10749 snowmanBasePattern - f Ljava/util/function/Predicate; field_10751 IS_PUMPKIN - f Lnet/minecraft/class_2700; field_10752 golemBasePattern - f Lnet/minecraft/class_2700; field_10753 golemPattern - f Lnet/minecraft/class_2700; field_10750 snowmanPattern -c net/minecraft/class_5172 net/minecraft/block/ChainBlock - f Lnet/minecraft/class_2746; field_24411 WATERLOGGED - f Lnet/minecraft/class_265; field_26651 X_AXIS_SHAPE - f Lnet/minecraft/class_265; field_26650 Z_AXIS_SHAPE - f Lnet/minecraft/class_265; field_23986 Y_AXIS_SHAPE -c net/minecraft/class_5172$1 net/minecraft/block/ChainBlock$1 - f [I field_26652 field_242662_a -c net/minecraft/class_2279 net/minecraft/block/ChorusFlowerBlock - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/Random;Lnet/minecraft/class_2338;II)V method_9748 growTreeRecursive - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_9746 areAllNeighborsEmpty - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;I)V method_9745 placeGrownFlower - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9747 placeDeadFlower - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/Random;I)V method_9744 generatePlant - f Lnet/minecraft/class_2283; field_10763 plantBlock - f Lnet/minecraft/class_2758; field_10762 AGE -c net/minecraft/class_2281 net/minecraft/block/ChestBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_9758 getDirectionToAttached - m (Lnet/minecraft/class_1750;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_9753 getDirectionToAttach - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9757 isBelowSolidBlock - m (Lnet/minecraft/class_2618;)Lnet/minecraft/class_4732$class_3923; method_24166 getLidRotationCallback - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_9756 isBlocked - m ()Lnet/minecraft/class_3445; method_9755 getOpenStat - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_4732$class_4733; method_24169 getChestMergerType - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_24168 func_226918_c_ - m (Lnet/minecraft/class_2281;Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)Lnet/minecraft/class_1263; method_17458 getChestInventory - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Z method_9754 isCatSittingOn - f Lnet/minecraft/class_265; field_10774 SHAPE_SINGLE - f Lnet/minecraft/class_265; field_10769 SHAPE_EAST - f Lnet/minecraft/class_265; field_10773 SHAPE_WEST - f Lnet/minecraft/class_2746; field_10772 WATERLOGGED - f Lnet/minecraft/class_4732$class_3923; field_17357 CONTAINER_MERGER - f Lnet/minecraft/class_2753; field_10768 FACING - f Lnet/minecraft/class_265; field_10771 SHAPE_SOUTH - f Lnet/minecraft/class_265; field_10767 SHAPE_NORTH - f Lnet/minecraft/class_2754; field_10770 TYPE - f Lnet/minecraft/class_4732$class_3923; field_17356 INVENTORY_MERGER -c net/minecraft/class_2281$2 net/minecraft/block/ChestBlock$2 - m (Lnet/minecraft/class_2595;Lnet/minecraft/class_2595;)Ljava/util/Optional; method_17463 func_225539_a_ - m (Lnet/minecraft/class_2595;)Ljava/util/Optional; method_17462 func_225538_a_ - m ()Ljava/util/Optional; method_24171 func_225537_b_ -c net/minecraft/class_2281$2$1 net/minecraft/block/ChestBlock$2$1 - f Lnet/minecraft/class_2595; field_17359 field_214030_b - f Lnet/minecraft/class_2281$2; field_17361 field_214032_d - f Lnet/minecraft/class_1263; field_17360 field_214031_c - f Lnet/minecraft/class_2595; field_17358 field_214029_a -c net/minecraft/class_2281$3 net/minecraft/block/ChestBlock$3 - m (Lnet/minecraft/class_2595;Lnet/minecraft/class_2595;)Lit/unimi/dsi/fastutil/floats/Float2FloatFunction; method_23899 func_225539_a_ - m ()Lit/unimi/dsi/fastutil/floats/Float2FloatFunction; method_24172 func_225537_b_ - m (Lnet/minecraft/class_2595;Lnet/minecraft/class_2595;F)F method_23900 func_226921_a_ - m (Lnet/minecraft/class_2595;)Lit/unimi/dsi/fastutil/floats/Float2FloatFunction; method_23898 func_225538_a_ - f Lnet/minecraft/class_2618; field_21782 field_226920_a_ -c net/minecraft/class_2281$4 net/minecraft/block/ChestBlock$4 - f [I field_10775 field_226922_a_ -c net/minecraft/class_2281$1 net/minecraft/block/ChestBlock$1 - m ()Ljava/util/Optional; method_24170 func_225537_b_ - m (Lnet/minecraft/class_2595;)Ljava/util/Optional; method_17460 func_225538_a_ - m (Lnet/minecraft/class_2595;Lnet/minecraft/class_2595;)Ljava/util/Optional; method_17461 func_225539_a_ -c net/minecraft/class_2282 net/minecraft/block/CocoaBlock - f [Lnet/minecraft/class_265; field_10778 COCOA_EAST_AABB - f [Lnet/minecraft/class_265; field_10776 COCOA_WEST_AABB - f [Lnet/minecraft/class_265; field_10777 COCOA_NORTH_AABB - f [Lnet/minecraft/class_265; field_10780 COCOA_SOUTH_AABB - f Lnet/minecraft/class_2758; field_10779 AGE -c net/minecraft/class_2282$1 net/minecraft/block/CocoaBlock$1 - f [I field_10781 field_180415_a -c net/minecraft/class_2283 net/minecraft/block/ChorusPlantBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_9759 makeConnections -c net/minecraft/class_2286 net/minecraft/block/ComparatorBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2350;Lnet/minecraft/class_2338;)Lnet/minecraft/class_1533; method_9774 findItemFrame - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9775 onStateChange - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)I method_9773 calculateOutput - m (Lnet/minecraft/class_2350;Lnet/minecraft/class_1533;)Z method_9772 func_210304_a - f Lnet/minecraft/class_2754; field_10789 MODE -c net/minecraft/class_2288 net/minecraft/block/CommandBlockBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)V method_9779 executeChain - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1918;Z)V method_9780 execute - f Lnet/minecraft/class_2746; field_10793 CONDITIONAL - f Lorg/apache/logging/log4j/Logger; field_10792 LOGGER - f Lnet/minecraft/class_2753; field_10791 FACING -c net/minecraft/class_2292 net/minecraft/block/ConcretePowderBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_24279 shouldSolidify - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9798 isTouchingLiquid - m (Lnet/minecraft/class_2680;)Z method_9799 causesSolidify - f Lnet/minecraft/class_2680; field_10810 solidifiedState -c net/minecraft/class_3962 net/minecraft/block/ComposterBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3218;Lnet/minecraft/class_1799;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_26373 attemptFill - m ()V method_17758 init - m ([Lnet/minecraft/class_265;)V method_17755 func_220291_a - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)Lnet/minecraft/class_2680; method_17756 attemptCompost - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)Lnet/minecraft/class_2680; method_17754 func_235485_a_ - m (FLnet/minecraft/class_1935;)V method_17753 registerCompostable - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_17757 func_235488_c_ - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_26374 empty - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_17759 resetFillState - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)V method_18027 playEvent - f [Lnet/minecraft/class_265; field_17568 SHAPE - f Lit/unimi/dsi/fastutil/objects/Object2FloatMap; field_17566 CHANCES - f Lnet/minecraft/class_265; field_17567 OUT_SHAPE - f Lnet/minecraft/class_2758; field_17565 LEVEL -c net/minecraft/class_3962$class_3925 net/minecraft/block/ComposterBlock$EmptyInventory -c net/minecraft/class_3962$class_3963 net/minecraft/block/ComposterBlock$PartialInventory - f Lnet/minecraft/class_2338; field_17571 pos - f Lnet/minecraft/class_1936; field_17570 world - f Lnet/minecraft/class_2680; field_17569 state - f Z field_17572 inserted -c net/minecraft/class_3962$class_3964 net/minecraft/block/ComposterBlock$FullInventory - f Z field_17576 extracted - f Lnet/minecraft/class_1936; field_17574 world - f Lnet/minecraft/class_2680; field_17573 state - f Lnet/minecraft/class_2338; field_17575 pos -c net/minecraft/class_2298 net/minecraft/block/CoralBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_9808 canLive - f Lnet/minecraft/class_2248; field_10818 deadBlock -c net/minecraft/class_2289 net/minecraft/block/ConduitBlock - f Lnet/minecraft/class_2746; field_10794 WATERLOGGED - f Lnet/minecraft/class_265; field_10795 SHAPE -c net/minecraft/class_2301 net/minecraft/block/CoralPlantBlock - f Lnet/minecraft/class_2248; field_10833 deadBlock - f Lnet/minecraft/class_265; field_10834 SHAPE -c net/minecraft/class_2297 net/minecraft/block/CoralFinBlock - f Lnet/minecraft/class_2248; field_10817 deadBlock -c net/minecraft/class_2304 net/minecraft/block/CraftingTableBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17466 func_220270_a - f Lnet/minecraft/class_2561; field_17362 CONTAINER_NAME -c net/minecraft/class_2299 net/minecraft/block/CoralWallFanBlock - f Lnet/minecraft/class_2248; field_10819 deadBlock -c net/minecraft/class_2310 net/minecraft/block/FourWayBlock - m (Lnet/minecraft/class_2680;)I method_20517 func_223007_q - m (Lnet/minecraft/class_2680;)I method_9987 getIndex - m (Lnet/minecraft/class_2350;)I method_9985 getMask - m (Ljava/util/Map$Entry;)Z method_9986 func_199775_a - m (FFFFF)[Lnet/minecraft/class_265; method_9984 makeShapes - f Lnet/minecraft/class_2746; field_10905 NORTH - f Lnet/minecraft/class_2746; field_10903 WEST - f Lnet/minecraft/class_2746; field_10904 SOUTH - f Lnet/minecraft/class_2746; field_10907 EAST - f Lnet/minecraft/class_2746; field_10900 WATERLOGGED - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_19313 statePaletteMap - f [Lnet/minecraft/class_265; field_10901 collisionShapes - f Ljava/util/Map; field_10902 FACING_TO_PROPERTY_MAP - f [Lnet/minecraft/class_265; field_10906 shapes -c net/minecraft/class_2310$1 net/minecraft/block/FourWayBlock$1 - f [I field_10908 field_211364_b - f [I field_10909 field_211363_a -c net/minecraft/class_2302 net/minecraft/block/CropsBlock - m ()I method_9827 getMaxAge - m ()Lnet/minecraft/class_1935; method_9832 getSeedsItem - m (Lnet/minecraft/class_2680;)I method_9829 getAge - m ()Lnet/minecraft/class_2758; method_9824 getAgeProperty - m (I)Lnet/minecraft/class_2680; method_9828 withAge - m (Lnet/minecraft/class_2680;)Z method_9825 isMaxAge - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9826 grow - m (Lnet/minecraft/class_2248;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)F method_9830 getGrowthChance - m (Lnet/minecraft/class_1937;)I method_9831 getBonemealAgeIncrease - f [Lnet/minecraft/class_265; field_10836 SHAPE_BY_AGE - f Lnet/minecraft/class_2758; field_10835 AGE -c net/minecraft/class_2309 net/minecraft/block/DaylightDetectorBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_9983 updatePower - f Lnet/minecraft/class_265; field_10898 SHAPE - f Lnet/minecraft/class_2746; field_10899 INVERTED - f Lnet/minecraft/class_2758; field_10897 POWER -c net/minecraft/class_4848 net/minecraft/block/CryingObsidianBlock -c net/minecraft/class_2313 net/minecraft/block/DetectorRailBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_10003 updateConnectedRails - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Ljava/lang/Class;Ljava/util/function/Predicate;)Ljava/util/List; method_10001 findMinecarts - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10002 updatePoweredState - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_238; method_10004 getDectectionBox - f Lnet/minecraft/class_2754; field_10914 SHAPE - f Lnet/minecraft/class_2746; field_10913 POWERED -c net/minecraft/class_2313$1 net/minecraft/block/DetectorRailBlock$1 - f [I field_10915 field_208109_c - f [I field_10917 field_208107_a - f [I field_10916 field_208108_b -c net/minecraft/class_2311 net/minecraft/block/DeadBushBlock - f Lnet/minecraft/class_265; field_10910 SHAPE -c net/minecraft/class_2318 net/minecraft/block/DirectionalBlock - f Lnet/minecraft/class_2753; field_10927 FACING -c net/minecraft/class_2312 net/minecraft/block/RedstoneDiodeBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9998 updateState - m (Lnet/minecraft/class_2680;)Z method_9989 isAlternateInput - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)I method_9995 getPowerOnSide - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_9990 shouldBePowered - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_9988 isFacingTowardsRepeater - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_9996 isLocked - m (Lnet/minecraft/class_2680;)Z method_9999 isDiode - m (Lnet/minecraft/class_2680;)I method_9992 getDelay - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)I method_9991 calculateInputStrength - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_9997 notifyNeighbors - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)I method_10000 getPowerOnSides - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)I method_9993 getActiveSignal - f Lnet/minecraft/class_265; field_10912 SHAPE - f Lnet/minecraft/class_2746; field_10911 POWERED -c net/minecraft/class_2323 net/minecraft/block/DoorBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_24795 isWooden - m (Lnet/minecraft/class_1750;)Lnet/minecraft/class_2750; method_10035 getHingeSide - m (Lnet/minecraft/class_2680;)Z method_24796 isWooden - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)V method_10036 playSound - m ()I method_10032 getOpenSound - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Z)V method_10033 openDoor - m ()I method_10034 getCloseSound - m (Lnet/minecraft/class_2680;)Z method_30841 isOpen - f Lnet/minecraft/class_265; field_10942 SOUTH_AABB - f Lnet/minecraft/class_265; field_10939 NORTH_AABB - f Lnet/minecraft/class_2754; field_10946 HALF - f Lnet/minecraft/class_2753; field_10938 FACING - f Lnet/minecraft/class_2754; field_10941 HINGE - f Lnet/minecraft/class_2746; field_10940 POWERED - f Lnet/minecraft/class_2746; field_10945 OPEN - f Lnet/minecraft/class_265; field_10944 WEST_AABB - f Lnet/minecraft/class_265; field_10943 EAST_AABB -c net/minecraft/class_2323$1 net/minecraft/block/DoorBlock$1 - f [I field_10948 field_185789_a - f [I field_10947 field_210338_b -c net/minecraft/class_2315 net/minecraft/block/DispenserBlock - m (Lnet/minecraft/class_2342;)Lnet/minecraft/class_2374; method_10010 getDispensePosition - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_10012 dispense - m (Lnet/minecraft/class_1935;Lnet/minecraft/class_2357;)V method_10009 registerDispenseBehavior - m (Lit/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap;)V method_10008 func_212564_a - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2357; method_10011 getBehavior - f Ljava/util/Map; field_10919 DISPENSE_BEHAVIOR_REGISTRY - f Lnet/minecraft/class_2753; field_10918 FACING - f Lnet/minecraft/class_2746; field_10920 TRIGGERED -c net/minecraft/class_4732 net/minecraft/tileentity/TileEntityMerger - m (Lnet/minecraft/class_2591;Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/class_2753;Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Ljava/util/function/BiPredicate;)Lnet/minecraft/class_4732$class_4734; method_24173 func_226924_a_ -c net/minecraft/class_4732$class_3923 net/minecraft/tileentity/TileEntityMerger$ICallback - m (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; method_17465 func_225539_a_ - m ()Ljava/lang/Object; method_24174 func_225537_b_ - m (Ljava/lang/Object;)Ljava/lang/Object; method_17464 func_225538_a_ -c net/minecraft/class_4732$class_4734 net/minecraft/tileentity/TileEntityMerger$ICallbackWrapper - m (Lnet/minecraft/class_4732$class_3923;)Ljava/lang/Object; apply apply -c net/minecraft/class_4732$class_4734$class_4736 net/minecraft/tileentity/TileEntityMerger$ICallbackWrapper$Single - f Ljava/lang/Object; field_21789 field_226927_a_ -c net/minecraft/class_4732$class_4734$class_4735 net/minecraft/tileentity/TileEntityMerger$ICallbackWrapper$Double - f Ljava/lang/Object; field_21788 field_226926_b_ - f Ljava/lang/Object; field_21787 field_226925_a_ -c net/minecraft/class_4732$class_4733 net/minecraft/tileentity/TileEntityMerger$Type - m (Ljava/lang/String;)Lnet/minecraft/class_4732$class_4733; valueOf valueOf - m ()[Lnet/minecraft/class_4732$class_4733; values values - f Lnet/minecraft/class_4732$class_4733; field_21783 SINGLE - f Lnet/minecraft/class_4732$class_4733; field_21784 FIRST - f Lnet/minecraft/class_4732$class_4733; field_21785 SECOND - f [Lnet/minecraft/class_4732$class_4733; field_21786 $VALUES -c net/minecraft/class_2328 net/minecraft/block/DragonEggBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10047 teleport - f Lnet/minecraft/class_265; field_10950 SHAPE -c net/minecraft/class_2320 net/minecraft/block/DoublePlantBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1657;)V method_30036 removeBottomHalf - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)V method_10021 placeAt - f Lnet/minecraft/class_2754; field_10929 HALF -c net/minecraft/class_2331 net/minecraft/block/EnchantingTableBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17467 func_220147_a - f Lnet/minecraft/class_265; field_10951 SHAPE -c net/minecraft/class_2325 net/minecraft/block/DropperBlock - f Lnet/minecraft/class_2357; field_10949 DISPENSE_BEHAVIOR -c net/minecraft/class_2334 net/minecraft/block/EndPortalBlock - f Lnet/minecraft/class_265; field_10959 SHAPE -c net/minecraft/class_2329 net/minecraft/block/EndGatewayBlock -c net/minecraft/class_2337 net/minecraft/block/EndRodBlock - f Lnet/minecraft/class_265; field_10971 END_ROD_VERTICAL_AABB - f Lnet/minecraft/class_265; field_10970 END_ROD_NS_AABB - f Lnet/minecraft/class_265; field_10969 END_ROD_EW_AABB -c net/minecraft/class_2337$1 net/minecraft/block/EndRodBlock$1 - f [I field_10972 field_185790_a -c net/minecraft/class_2333 net/minecraft/block/EndPortalFrameBlock - m ()Lnet/minecraft/class_2700; method_10054 getOrCreatePortalShape - f Lnet/minecraft/class_265; field_10956 BASE_SHAPE - f Lnet/minecraft/class_265; field_10953 EYE_SHAPE - f Lnet/minecraft/class_2700; field_10957 portalShape - f Lnet/minecraft/class_265; field_10955 BASE_WITH_EYE_SHAPE - f Lnet/minecraft/class_2753; field_10954 FACING - f Lnet/minecraft/class_2746; field_10958 EYE -c net/minecraft/class_2343 net/minecraft/block/ITileEntityProvider - m (Lnet/minecraft/class_1922;)Lnet/minecraft/class_2586; method_10123 createNewTileEntity -c net/minecraft/class_2336 net/minecraft/block/EnderChestBlock - m (Lnet/minecraft/class_1730;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17468 func_226928_a_ - m ()Lnet/minecraft/class_2591; method_24205 func_226929_c_ - f Lnet/minecraft/class_2746; field_10968 WATERLOGGED - f Lnet/minecraft/class_265; field_10967 SHAPE - f Lnet/minecraft/class_2561; field_17363 CONTAINER_NAME - f Lnet/minecraft/class_2753; field_10966 FACING -c net/minecraft/class_2346 net/minecraft/block/FallingBlock - m ()I method_26154 getFallDelay - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_1540;)V method_10127 onEndFalling - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1540;)V method_10129 onBroken - m (Lnet/minecraft/class_2680;)Z method_10128 canFallThrough - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_10130 getDustColor - m (Lnet/minecraft/class_1540;)V method_10132 onStartFalling -c net/minecraft/class_2341 net/minecraft/block/HorizontalFaceBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_10119 getFacing - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_20046 isSideSolidForDirection - f Lnet/minecraft/class_2754; field_11007 FACE -c net/minecraft/class_2341$1 net/minecraft/block/HorizontalFaceBlock$1 - f [I field_11008 field_208110_a -c net/minecraft/class_2354 net/minecraft/block/FenceBlock - m (Lnet/minecraft/class_2680;ZLnet/minecraft/class_2350;)Z method_10184 canConnect - m (Lnet/minecraft/class_2248;)Z method_26375 isWoodenFence - f [Lnet/minecraft/class_265; field_11066 renderShapes -c net/minecraft/class_2344 net/minecraft/block/FarmlandBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_10124 hasCrops - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_10126 hasWater - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10125 turnToDirt - f Lnet/minecraft/class_265; field_11010 SHAPE - f Lnet/minecraft/class_2758; field_11009 MOISTURE -c net/minecraft/class_2358 net/minecraft/block/FireBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_10192 canDie - m ()V method_10199 init - m (Ljava/util/Map$Entry;)Z method_10197 func_199776_a - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_10198 getStateForPlacement - m (Lnet/minecraft/class_2680;)Z method_31017 func_242674_n - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;I)Lnet/minecraft/class_2680; method_24855 getFireWithAge - m (Ljava/util/Random;)I method_26155 getTickCooldown - m (Lnet/minecraft/class_2680;)I method_10191 getFireSpreadSpeed - m (Lnet/minecraft/class_2248;II)V method_10189 setFireInfo - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_10193 areNeighborsFlammable - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_31016 getShapeForState - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILjava/util/Random;I)V method_10196 catchOnFire - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)I method_10194 getNeighborEncouragement - m (Lnet/minecraft/class_2680;)I method_10190 getFlammability - f Lnet/minecraft/class_2758; field_11092 AGE - f Lnet/minecraft/class_2746; field_11089 SOUTH - f Lnet/minecraft/class_2746; field_11088 WEST - f Lnet/minecraft/class_2746; field_11093 UP - f Ljava/util/Map; field_11090 FACING_TO_PROPERTY_MAP - f Lnet/minecraft/class_2746; field_11096 NORTH - f Lnet/minecraft/class_2746; field_11094 EAST - f Lnet/minecraft/class_265; field_26657 FIRE_SHAPE_SOUTH - f Lnet/minecraft/class_265; field_26656 FIRE_SHAPE_NORTH - f Lnet/minecraft/class_265; field_26655 FIRE_SHAPE_EAST - f Ljava/util/Map; field_26658 stateToShapeMap - f Lnet/minecraft/class_265; field_26653 FIRE_SHAPE_UP - f Lnet/minecraft/class_265; field_26654 FIRE_SHAPE_WEST - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_11091 flammabilities - f Lit/unimi/dsi/fastutil/objects/Object2IntMap; field_11095 encouragements -c net/minecraft/class_2349 net/minecraft/block/FenceGateBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_16703 isParallel - m (Lnet/minecraft/class_2680;)Z method_10138 isWall - f Lnet/minecraft/class_265; field_11025 AABB_HITBOX_ZAXIS_INWALL - f Lnet/minecraft/class_2746; field_11026 OPEN - f Lnet/minecraft/class_265; field_11016 AABB_HITBOX_XAXIS_INWALL - f Lnet/minecraft/class_265; field_11028 TRUE_AABB_COLLISION_BOX_ZAXIS - f Lnet/minecraft/class_2746; field_11021 POWERED - f Lnet/minecraft/class_265; field_11022 AABB_HITBOX_ZAXIS - f Lnet/minecraft/class_265; field_11020 AABB_RENDER_BOX_ZAXIS_INWALL - f Lnet/minecraft/class_265; field_11027 AABB_RENDER_BOX_XAXIS_INWALL - f Lnet/minecraft/class_265; field_11017 AABB_HITBOX_XAXIS - f Lnet/minecraft/class_265; field_11023 AABB_COLLISION_BOX_ZAXIS - f Lnet/minecraft/class_2746; field_11024 IN_WALL - f Lnet/minecraft/class_265; field_11019 AABB_COLLISION_BOX_XAXIS - f Lnet/minecraft/class_265; field_11018 AABB_RENDER_BOX_ZAXIS -c net/minecraft/class_2349$1 net/minecraft/block/FenceGateBlock$1 - f [I field_11029 field_210339_a -c net/minecraft/class_2356 net/minecraft/block/FlowerBlock - m ()Lnet/minecraft/class_1291; method_10188 getStewEffect - m ()I method_10187 getStewEffectDuration - f Lnet/minecraft/class_1291; field_11087 stewEffect - f I field_11086 stewEffectDuration - f Lnet/minecraft/class_265; field_11085 SHAPE -c net/minecraft/class_3712 net/minecraft/block/FletchingTableBlock -c net/minecraft/class_2360 net/minecraft/block/FrostedIceBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;I)Z method_10202 shouldMelt - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_10201 slightlyMelt - f Lnet/minecraft/class_2758; field_11097 AGE -c net/minecraft/class_2362 net/minecraft/block/FlowerPotBlock - m ()Lnet/minecraft/class_2248; method_16231 getFlower - f Lnet/minecraft/class_265; field_11102 SHAPE - f Lnet/minecraft/class_2248; field_11101 flower - f Ljava/util/Map; field_11103 POTTED_CONTENT -c net/minecraft/class_3865 net/minecraft/block/FurnaceBlock -c net/minecraft/class_4771 net/minecraft/block/FungusBlock - f Ljava/util/function/Supplier; field_22135 fungusFeature - f Lnet/minecraft/class_265; field_22134 SHAPE -c net/minecraft/class_2366 net/minecraft/block/GlazedTerracottaBlock -c net/minecraft/class_2368 net/minecraft/block/GlassBlock -c net/minecraft/class_2369 net/minecraft/block/GrassPathBlock - f Lnet/minecraft/class_265; field_11106 SHAPE -c net/minecraft/class_2372 net/minecraft/block/GrassBlock -c net/minecraft/class_2375 net/minecraft/block/GravelBlock -c net/minecraft/class_4863 net/minecraft/block/AbstractPlantBlock - m (Lnet/minecraft/class_1936;)Lnet/minecraft/class_2680; method_24948 grow - m (Lnet/minecraft/class_2248;)Z method_24947 canGrowOn - m ()Lnet/minecraft/class_4865; method_24945 getTopPlantBlock - m ()Lnet/minecraft/class_2248; method_24946 getBodyPlantBlock - f Lnet/minecraft/class_265; field_23080 shape - f Lnet/minecraft/class_2350; field_22507 growthDirection - f Z field_22508 breaksInWater -c net/minecraft/class_3713 net/minecraft/block/GrindstoneBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_16119 getShapeFromState - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17469 func_220187_a - f Lnet/minecraft/class_265; field_16367 SHAPE_WALL_NORTH_HOLDER_2 - f Lnet/minecraft/class_265; field_16386 SHAPE_FLOOR_EAST_WEST_LEG_HOLDER_COMBINED_1 - f Lnet/minecraft/class_265; field_16362 SHAPE_FLOOR_EAST_WEST_COMBINED - f Lnet/minecraft/class_265; field_16383 SHAPE_CEILING_EAST_OR_WEST - f Lnet/minecraft/class_265; field_16360 SHAPE_CEILING_EAST_OR_WEST_LEG_HOLDER_COMBINED_2 - f Lnet/minecraft/class_265; field_16347 SHAPE_WALL_NORTH_LEG_2 - f Lnet/minecraft/class_265; field_16391 SHAPE_WALL_EAST_COMBINED - f Lnet/minecraft/class_265; field_16345 SHAPE_WALL_EAST_HOLDER_1 - f Lnet/minecraft/class_265; field_16353 SHAPE_CEILING_EAST_OR_WEST_HOLDER_2 - f Lnet/minecraft/class_265; field_16399 SHAPE_WALL_SOUTH - f Lnet/minecraft/class_265; field_16372 SHAPE_WALL_EAST_LEG_HOLDER_COMBINED_1 - f Lnet/minecraft/class_265; field_16394 SHAPE_WALL_EAST_LEG_1 - f Lnet/minecraft/class_265; field_16380 SHAPE_FLOOR_NORTH_SOUTH - f Lnet/minecraft/class_265; field_16398 SHAPE_CEILING_EAST_OR_WEST_LEG_2 - f Lnet/minecraft/class_265; field_16346 SHAPE_FLOOR_EAST_WEST_LEG_2 - f Lnet/minecraft/class_2561; field_17364 CONTAINER_NAME - f Lnet/minecraft/class_265; field_16351 SHAPE_WALL_WEST_LEG_HOLDER_COMBINED_2 - f Lnet/minecraft/class_265; field_16348 SHAPE_FLOOR_NORTH_SOUTH_LEG_HOLDER_COMBINED_1 - f Lnet/minecraft/class_265; field_16376 SHAPE_WALL_WEST - f Lnet/minecraft/class_265; field_16385 SHAPE_FLOOR_NORTH_SOUTH_COMBINED - f Lnet/minecraft/class_265; field_16397 SHAPE_CEILING_NORTH_OR_SOUTH_COMBINED - f Lnet/minecraft/class_265; field_16382 SHAPE_WALL_WEST_HOLDER_2 - f Lnet/minecraft/class_265; field_16366 SHAPE_FLOOR_NORTH_SOUTH_HOLDER_1 - f Lnet/minecraft/class_265; field_16371 SHAPE_WALL_SOUTH_HOLDER_2 - f Lnet/minecraft/class_265; field_16364 SHAPE_CEILING_NORTH_OR_SOUTH_LEG_HOLDER_COMBINED_1 - f Lnet/minecraft/class_265; field_16354 SHAPE_WALL_SOUTH_LEG_HOLDER_COMBINED_2 - f Lnet/minecraft/class_265; field_16377 SHAPE_WALL_SOUTH_LEG_2 - f Lnet/minecraft/class_265; field_16384 SHAPE_CEILING_NORTH_OR_SOUTH_HOLDER_1 - f Lnet/minecraft/class_265; field_16358 SHAPE_WALL_WEST_LEG_2 - f Lnet/minecraft/class_265; field_16341 SHAPE_CEILING_NORTH_OR_SOUTH_LEG_1 - f Lnet/minecraft/class_265; field_16379 SHAPE_FLOOR_NORTH_SOUTH_LEG_1 - f Lnet/minecraft/class_265; field_16396 SHAPE_WALL_NORTH_LEG_HOLDER_COMBINED_2 - f Lnet/minecraft/class_265; field_16356 SHAPE_WALL_NORTH - f Lnet/minecraft/class_265; field_16352 SHAPE_WALL_SOUTH_LEG_1 - f Lnet/minecraft/class_265; field_16401 SHAPE_WALL_NORTH_HOLDER_1 - f Lnet/minecraft/class_265; field_16388 SHAPE_WALL_NORTH_LEG_HOLDER_COMBINED_1 - f Lnet/minecraft/class_265; field_16378 SHAPE_FLOOR_EAST_WEST_LEG_HOLDER_COMBINED_2 - f Lnet/minecraft/class_265; field_16363 SHAPE_WALL_NORTH_LEG_1 - f Lnet/minecraft/class_265; field_16381 SHAPE_WALL_EAST_LEG_HOLDER_COMBINED_2 - f Lnet/minecraft/class_265; field_16370 SHAPE_WALL_EAST - f Lnet/minecraft/class_265; field_16374 SHAPE_FLOOR_EAST_WEST_HOLDER_2 - f Lnet/minecraft/class_265; field_16389 SHAPE_CEILING_EAST_OR_WEST_COMBINED - f Lnet/minecraft/class_265; field_16350 SHAPE_WALL_EAST_HOLDER_2 - f Lnet/minecraft/class_265; field_16343 SHAPE_FLOOR_EAST_WEST_HOLDER_1 - f Lnet/minecraft/class_265; field_16395 SHAPE_CEILING_EAST_OR_WEST_LEG_HOLDER_COMBINED_1 - f Lnet/minecraft/class_265; field_16369 SHAPE_WALL_SOUTH_COMBINED - f Lnet/minecraft/class_265; field_16357 SHAPE_CEILING_EAST_OR_WEST_HOLDER_1 - f Lnet/minecraft/class_265; field_16375 SHAPE_WALL_EAST_LEG_2 - f Lnet/minecraft/class_265; field_16373 SHAPE_FLOOR_EAST_WEST_LEG_1 - f Lnet/minecraft/class_265; field_16387 SHAPE_CEILING_EAST_OR_WEST_LEG_1 - f Lnet/minecraft/class_265; field_16365 SHAPE_FLOOR_NORTH_SOUTH_LEG_HOLDER_COMBINED_2 - f Lnet/minecraft/class_265; field_16361 SHAPE_CEILING_NORTH_OR_SOUTH - f Lnet/minecraft/class_265; field_16349 SHAPE_CEILING_NORTH_OR_SOUTH_LEG_HOLDER_COMBINED_2 - f Lnet/minecraft/class_265; field_16344 SHAPE_WALL_WEST_COMBINED - f Lnet/minecraft/class_265; field_16390 SHAPE_WALL_WEST_HOLDER_1 - f Lnet/minecraft/class_265; field_16400 SHAPE_CEILING_NORTH_OR_SOUTH_HOLDER_2 - f Lnet/minecraft/class_265; field_16359 SHAPE_WALL_WEST_LEG_HOLDER_COMBINED_1 - f Lnet/minecraft/class_265; field_16339 SHAPE_FLOOR_NORTH_SOUTH_HOLDER_2 - f Lnet/minecraft/class_265; field_16340 SHAPE_WALL_SOUTH_LEG_HOLDER_COMBINED_1 - f Lnet/minecraft/class_265; field_16342 SHAPE_WALL_WEST_LEG_1 - f Lnet/minecraft/class_265; field_16355 SHAPE_CEILING_NORTH_OR_SOUTH_LEG_2 - f Lnet/minecraft/class_265; field_16392 SHAPE_FLOOR_NORTH_SOUTH_LEG_2 - f Lnet/minecraft/class_265; field_16393 SHAPE_WALL_SOUTH_HOLDER_1 - f Lnet/minecraft/class_265; field_16338 SHAPE_FLOOR_EAST_WEST - f Lnet/minecraft/class_265; field_16368 SHAPE_WALL_NORTH_COMBINED -c net/minecraft/class_3713$1 net/minecraft/block/GrindstoneBlock$1 - f [I field_16402 field_222464_a -c net/minecraft/class_4865 net/minecraft/block/AbstractTopPlantBlock - m (Lnet/minecraft/class_2680;)Z method_24949 canGrowIn - m (Ljava/util/Random;)I method_26376 getGrowthAmount - f D field_22510 growthChance - f Lnet/minecraft/class_2758; field_22509 AGE -c net/minecraft/class_4864 net/minecraft/block/AbstractBodyPlantBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Ljava/util/Optional; method_25960 nextGrowPosition -c net/minecraft/class_2380 net/minecraft/block/HayBlock -c net/minecraft/class_2373 net/minecraft/block/BreakableBlock -c net/minecraft/class_2377 net/minecraft/block/HopperBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10217 updateState - f Lnet/minecraft/class_265; field_11123 NORTH_RAYTRACE_SHAPE - f Lnet/minecraft/class_265; field_11132 BASE_SHAPE - f Lnet/minecraft/class_2753; field_11129 FACING - f Lnet/minecraft/class_265; field_11133 EAST_RAYTRACE_SHAPE - f Lnet/minecraft/class_2746; field_11126 ENABLED - f Lnet/minecraft/class_265; field_11128 SOUTH_RAYTRACE_SHAPE - f Lnet/minecraft/class_265; field_11120 DOWN_SHAPE - f Lnet/minecraft/class_265; field_11131 INPUT_SHAPE - f Lnet/minecraft/class_265; field_11121 INPUT_MIDDLE_SHAPE - f Lnet/minecraft/class_265; field_11125 DOWN_RAYTRACE_SHAPE - f Lnet/minecraft/class_265; field_11127 MIDDLE_SHAPE - f Lnet/minecraft/class_265; field_11130 WEST_SHAPE - f Lnet/minecraft/class_265; field_11124 NORTH_SHAPE - f Lnet/minecraft/class_265; field_11135 WEST_RAYTRACE_SHAPE - f Lnet/minecraft/class_265; field_11134 EAST_SHAPE - f Lnet/minecraft/class_265; field_11122 SOUTH_SHAPE -c net/minecraft/class_2377$1 net/minecraft/block/HopperBlock$1 - f [I field_11136 field_200962_a -c net/minecraft/class_4622 net/minecraft/block/HoneyBlock - m (Lnet/minecraft/class_1297;Lnet/minecraft/class_2338;)V method_24176 triggerSlideDownBlock - m (Lnet/minecraft/class_1297;)V method_24175 entitySlideParticles - m (Lnet/minecraft/class_1297;)Z method_24179 hasSlideEffects - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;)Z method_23356 isSliding - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;)V method_24177 slideEffects - m (Lnet/minecraft/class_1297;)V method_24180 setSlideVelocity - m (Lnet/minecraft/class_1297;)V method_24178 livingSlideParticles - m (Lnet/minecraft/class_1297;I)V method_23355 slideParticles - f Lnet/minecraft/class_265; field_21213 SHAPES -c net/minecraft/class_2381 net/minecraft/block/HugeMushroomBlock - f Lnet/minecraft/class_2746; field_11166 UP - f Lnet/minecraft/class_2746; field_11171 NORTH - f Lnet/minecraft/class_2746; field_11169 DOWN - f Lnet/minecraft/class_2746; field_11172 EAST - f Lnet/minecraft/class_2746; field_11167 WEST - f Ljava/util/Map; field_11168 FACING_TO_PROPERTY_MAP - f Lnet/minecraft/class_2746; field_11170 SOUTH -c net/minecraft/class_2383 net/minecraft/block/HorizontalBlock - f Lnet/minecraft/class_2753; field_11177 HORIZONTAL_FACING -c net/minecraft/class_2384 net/minecraft/block/SilverfishBlock - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;)V method_24797 spawnSilverFish - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_2680; method_10270 infest - m ()Lnet/minecraft/class_2248; method_10271 getMimickedBlock - m (Lnet/minecraft/class_2680;)Z method_10269 canContainSilverfish - f Lnet/minecraft/class_2248; field_11178 mimickedBlock - f Ljava/util/Map; field_11179 normalToInfectedMap -c net/minecraft/class_2386 net/minecraft/block/IceBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10275 turnIntoWater -c net/minecraft/class_3748 net/minecraft/block/JigsawBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_26378 getConnectingDirection - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_3751$class_4991; method_26377 func_235507_a_ - m (Lnet/minecraft/class_3499$class_3501;Lnet/minecraft/class_3499$class_3501;)Z method_16546 hasJigsawMatch - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_26379 getJigsawAlignmentDirection - f Lnet/minecraft/class_2754; field_23262 ORIENTATION -c net/minecraft/class_2389 net/minecraft/block/PaneBlock - m (Lnet/minecraft/class_2680;Z)Z method_10281 canAttachTo -c net/minecraft/class_2393 net/minecraft/block/KelpTopBlock - f Lnet/minecraft/class_265; field_11195 SHAPE -c net/minecraft/class_2387 net/minecraft/block/JukeboxBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10277 dropRecord - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1799;)V method_10276 insertRecord - f Lnet/minecraft/class_2746; field_11180 HAS_RECORD -c net/minecraft/class_2399 net/minecraft/block/LadderBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_10305 canAttachTo - f Lnet/minecraft/class_265; field_11252 LADDER_WEST_AABB - f Lnet/minecraft/class_2746; field_11257 WATERLOGGED - f Lnet/minecraft/class_265; field_11255 LADDER_EAST_AABB - f Lnet/minecraft/class_265; field_11256 LADDER_NORTH_AABB - f Lnet/minecraft/class_2753; field_11253 FACING - f Lnet/minecraft/class_265; field_11254 LADDER_SOUTH_AABB -c net/minecraft/class_2399$1 net/minecraft/block/LadderBlock$1 - f [I field_11258 field_180190_a -c net/minecraft/class_2391 net/minecraft/block/KelpBlock -c net/minecraft/class_2397 net/minecraft/block/LeavesBlock - m (Lnet/minecraft/class_2680;)I method_10302 getDistance - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_10300 updateDistance - f Lnet/minecraft/class_2746; field_11200 PERSISTENT - f Lnet/minecraft/class_2758; field_11199 DISTANCE -c net/minecraft/class_3749 net/minecraft/block/LanternBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2350; method_16370 getBlockConnected - f Lnet/minecraft/class_2746; field_16545 HANGING - f Lnet/minecraft/class_265; field_16546 GROUNDED_SHAPE - f Lnet/minecraft/class_2746; field_26441 WATERLOGGED - f Lnet/minecraft/class_265; field_16544 HANGING_SHAPES -c net/minecraft/class_3715 net/minecraft/block/LecternBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_17471 pulse - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_17474 notifyNeighbors - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_17473 setHasBook - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Z)V method_17476 setPowered - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1799;)V method_17475 placeBook - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_1799;)Z method_17472 tryPlaceBook - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_17477 dropBook - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1657;)V method_17470 openContainer - f Lnet/minecraft/class_265; field_17371 EAST_SHAPE - f Lnet/minecraft/class_265; field_17369 WEST_SHAPE - f Lnet/minecraft/class_265; field_17370 NORTH_SHAPE - f Lnet/minecraft/class_265; field_17368 COLLISION_SHAPE - f Lnet/minecraft/class_2746; field_17366 HAS_BOOK - f Lnet/minecraft/class_265; field_17367 TOP_PLATE_SHAPE - f Lnet/minecraft/class_2746; field_17365 POWERED - f Lnet/minecraft/class_265; field_16405 POST_SHAPE - f Lnet/minecraft/class_265; field_16403 COMMON_SHAPE - f Lnet/minecraft/class_265; field_16406 BASE_SHAPE - f Lnet/minecraft/class_2753; field_16404 FACING - f Lnet/minecraft/class_265; field_17372 SOUTH_SHAPE -c net/minecraft/class_3715$1 net/minecraft/block/LecternBlock$1 - f [I field_15363 field_222465_a -c net/minecraft/class_2404 net/minecraft/block/FlowingFluidBlock - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_10318 triggerMixEffects - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_10316 reactWithNeighbors - f Lnet/minecraft/class_2758; field_11278 LEVEL - f Ljava/util/List; field_11276 fluidStatesCache - f Lnet/minecraft/class_265; field_24412 LAVA_COLLISION_SHAPE - f Lnet/minecraft/class_3609; field_11279 fluid -c net/minecraft/class_2401 net/minecraft/block/LeverBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;F)V method_10308 addParticles - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10309 updateNeighbors - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_21846 setPowered - f Lnet/minecraft/class_265; field_11262 LEVER_EAST_AABB - f Lnet/minecraft/class_265; field_11263 LEVER_SOUTH_AABB - f Lnet/minecraft/class_265; field_11260 LEVER_WEST_AABB - f Lnet/minecraft/class_265; field_11267 LEVER_NORTH_AABB - f Lnet/minecraft/class_265; field_11266 CEILING_X_SHAPE - f Lnet/minecraft/class_265; field_11261 FLOOR_X_SHAPE - f Lnet/minecraft/class_265; field_11268 CEILING_Z_SHAPE - f Lnet/minecraft/class_265; field_11264 FLOOR_Z_SHAPE - f Lnet/minecraft/class_2746; field_11265 POWERED -c net/minecraft/class_2401$1 net/minecraft/block/LeverBlock$1 - f [I field_11270 field_180165_a - f [I field_11271 field_209401_a - f [I field_11269 field_208111_b -c net/minecraft/class_2402 net/minecraft/block/ILiquidContainer - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3610;)Z method_10311 receiveFluid - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_3611;)Z method_10310 canContainFluid -c net/minecraft/class_2413 net/minecraft/block/MagmaBlock -c net/minecraft/class_2406 net/minecraft/block/LoomBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17478 func_220254_a - f Lnet/minecraft/class_2561; field_17373 CONTAINER_NAME -c net/minecraft/class_2415 net/minecraft/util/Mirror - m (Ljava/lang/String;)Lnet/minecraft/class_2415; valueOf valueOf - m ()Lnet/minecraft/class_4990; method_26380 getOrientation - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2470; method_10345 toRotation - m (II)I method_10344 mirrorRotation - m ()[Lnet/minecraft/class_2415; values values - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_10343 mirror - f Lnet/minecraft/class_4990; field_23263 orientation - f Lnet/minecraft/class_2415; field_11302 NONE - f [Lnet/minecraft/class_2415; field_11299 $VALUES - f Lnet/minecraft/class_2415; field_11300 LEFT_RIGHT - f Lnet/minecraft/class_2415; field_11301 FRONT_BACK -c net/minecraft/class_2415$1 net/minecraft/util/Mirror$1 - f [I field_11303 field_185799_a -c net/minecraft/class_2411 net/minecraft/block/MelonBlock -c net/minecraft/class_2418 net/minecraft/block/MyceliumBlock -c net/minecraft/class_2420 net/minecraft/block/MushroomBlock - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Random;)Z method_10349 grow - f Lnet/minecraft/class_265; field_11304 SHAPE -c net/minecraft/class_4772 net/minecraft/block/NetherSproutsBlock - f Lnet/minecraft/class_265; field_22136 SHAPE -c net/minecraft/class_2423 net/minecraft/block/NetherPortalBlock - f Lnet/minecraft/class_265; field_11308 Z_AABB - f Lnet/minecraft/class_2754; field_11310 AXIS - f Lnet/minecraft/class_265; field_11309 X_AABB -c net/minecraft/class_2423$1 net/minecraft/block/NetherPortalBlock$1 - f [I field_11320 field_185810_a - f [I field_11319 field_185811_b -c net/minecraft/class_2421 net/minecraft/block/NetherWartBlock - f Lnet/minecraft/class_2758; field_11306 AGE - f [Lnet/minecraft/class_265; field_11305 SHAPES -c net/minecraft/class_4949 net/minecraft/block/PlantBlockHelper - m (Lnet/minecraft/class_2680;)Z method_25961 isAir - m (Ljava/util/Random;)I method_26381 getGrowthAmount -c net/minecraft/class_2428 net/minecraft/block/NoteBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10367 triggerNote - f Lnet/minecraft/class_2758; field_11324 NOTE - f Lnet/minecraft/class_2746; field_11326 POWERED - f Lnet/minecraft/class_2754; field_11325 INSTRUMENT -c net/minecraft/class_4773 net/minecraft/block/NetherrackBlock -c net/minecraft/class_2426 net/minecraft/block/ObserverBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10365 updateNeighborsInFront - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2338;)V method_10366 startSignal - f Lnet/minecraft/class_2746; field_11322 POWERED -c net/minecraft/class_4849 net/minecraft/block/NyliumBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_24856 isDarkEnough -c net/minecraft/class_2429 net/minecraft/block/SixWayBlock - m (Ljava/util/EnumMap;)V method_10369 func_203421_a - m (Lnet/minecraft/class_2680;)I method_10368 getShapeIndex - m (F)[Lnet/minecraft/class_265; method_10370 makeShapes - f [Lnet/minecraft/class_2350; field_11334 FACING_VALUES - f Lnet/minecraft/class_2746; field_11327 UP - f Lnet/minecraft/class_2746; field_11331 SOUTH - f Lnet/minecraft/class_2746; field_11328 WEST - f Lnet/minecraft/class_2746; field_11335 EAST - f Ljava/util/Map; field_11329 FACING_TO_PROPERTY_MAP - f [Lnet/minecraft/class_265; field_11333 shapes - f Lnet/minecraft/class_2746; field_11330 DOWN - f Lnet/minecraft/class_2746; field_11332 NORTH -c net/minecraft/class_2431 net/minecraft/block/OreBlock - m (Ljava/util/Random;)I method_10398 getExperience -c net/minecraft/class_2433 net/minecraft/block/SkullWallPlayerBlock -c net/minecraft/class_2435 net/minecraft/block/SkullPlayerBlock -c net/minecraft/class_2436 net/minecraft/block/RedstoneBlock -c net/minecraft/class_2439 net/minecraft/block/PotatoBlock - f [Lnet/minecraft/class_265; field_11357 SHAPES -c net/minecraft/class_2440 net/minecraft/block/PressurePlateBlock - f Lnet/minecraft/class_2440$class_2441; field_11359 sensitivity - f Lnet/minecraft/class_2746; field_11358 POWERED -c net/minecraft/class_2440$class_2441 net/minecraft/block/PressurePlateBlock$Sensitivity - m (Ljava/lang/String;)Lnet/minecraft/class_2440$class_2441; valueOf valueOf - m ()[Lnet/minecraft/class_2440$class_2441; values values - f Lnet/minecraft/class_2440$class_2441; field_11361 EVERYTHING - f Lnet/minecraft/class_2440$class_2441; field_11362 MOBS - f [Lnet/minecraft/class_2440$class_2441; field_11363 $VALUES -c net/minecraft/class_2440$1 net/minecraft/block/PressurePlateBlock$1 - f [I field_11360 field_180127_a -c net/minecraft/class_2442 net/minecraft/block/PoweredRailBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;ZI)Z method_10413 findPoweredRailSignal - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ZILnet/minecraft/class_2768;)Z method_10414 isSamePoweredRail - f Lnet/minecraft/class_2754; field_11365 SHAPE - f Lnet/minecraft/class_2746; field_11364 POWERED -c net/minecraft/class_2442$1 net/minecraft/block/PoweredRailBlock$1 - f [I field_11368 field_208112_a - f [I field_11367 field_208113_b - f [I field_11366 field_208114_c -c net/minecraft/class_2443 net/minecraft/block/RailBlock - f Lnet/minecraft/class_2754; field_11369 SHAPE -c net/minecraft/class_2443$1 net/minecraft/block/RailBlock$1 - f [I field_11370 field_185818_c - f [I field_11372 field_208115_a - f [I field_11371 field_185817_b -c net/minecraft/class_2445 net/minecraft/block/PumpkinBlock - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20291 func_220282_a -c net/minecraft/class_2449 net/minecraft/block/RedstoneOreBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10441 activate - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10440 spawnParticles - f Lnet/minecraft/class_2746; field_11392 LIT -c net/minecraft/class_2452 net/minecraft/block/RailState - m (Lnet/minecraft/class_2338;)Z method_10465 canConnect - m (Lnet/minecraft/class_2338;)Lnet/minecraft/class_2452; method_10458 createForAdjacent - m ()I method_10460 countAdjacentRails - m (Lnet/minecraft/class_2768;)V method_10466 reset - m ()Ljava/util/List; method_10457 getConnectedRails - m (Lnet/minecraft/class_2452;)Z method_10455 canConnect - m (Lnet/minecraft/class_2452;)V method_10461 connect - m (Lnet/minecraft/class_2452;)Z method_10464 isConnectedTo - m (ZZLnet/minecraft/class_2768;)Lnet/minecraft/class_2452; method_10459 placeRail - m (Lnet/minecraft/class_2338;)Z method_10456 isAdjacentRail - m ()Lnet/minecraft/class_2680; method_10462 getNewState - m ()V method_10467 checkConnected - m (Lnet/minecraft/class_2338;)Z method_10463 isConnectedTo - f Lnet/minecraft/class_2680; field_11406 newState - f Lnet/minecraft/class_1937; field_11409 world - f Lnet/minecraft/class_2241; field_11411 block - f Lnet/minecraft/class_2338; field_11410 pos - f Z field_11408 disableCorners - f Ljava/util/List; field_11407 connectedRails -c net/minecraft/class_2452$1 net/minecraft/block/RailState$1 - f [I field_11412 field_208116_a -c net/minecraft/class_2457 net/minecraft/block/RedstoneWireBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_27844 updateNeighboursStateChange - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_27937 canPlaceOnTopOf - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10479 notifyWireNeighborsOfStateChange - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;Z)Lnet/minecraft/class_2773; method_27841 recalculateSide - m (Lnet/minecraft/class_2680;)Z method_28483 areAllSidesInvalid - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_27845 getShapeForState - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;)V method_28482 updateChangedConnections - m (I)I method_10487 getRGBByPower - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2773; method_10477 getSide - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_10482 canConnectTo - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_27843 recalculateFacingState - m (Lnet/minecraft/class_1937;Ljava/util/Random;Lnet/minecraft/class_2338;Lnet/minecraft/class_1160;Lnet/minecraft/class_2350;Lnet/minecraft/class_2350;FF)V method_27936 spawnPoweredParticle - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_27840 getUpdatedState - m (Lnet/minecraft/class_2680;)Z method_27846 areAllSidesValid - m (Lnet/minecraft/class_2680;)Z method_10484 canConnectUpwardsTo - m (Lnet/minecraft/class_2680;)I method_10486 getPower - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10485 updatePower - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)I method_27842 getStrongestSignal - f Ljava/util/Map; field_11435 FACING_PROPERTY_MAP - f Lnet/minecraft/class_2680; field_24733 sideBaseState - f Lnet/minecraft/class_2754; field_11437 SOUTH - f Lnet/minecraft/class_2754; field_11436 EAST - f Ljava/util/Map; field_24414 SIDE_TO_SHAPE - f Lnet/minecraft/class_2754; field_11440 NORTH - f Z field_11438 canProvidePower - f [Lnet/minecraft/class_1160; field_24466 powerRGB - f Ljava/util/Map; field_24415 SIDE_TO_ASCENDING_SHAPE - f Ljava/util/Map; field_24416 stateToShapeMap - f Lnet/minecraft/class_265; field_24413 BASE_SHAPE - f Lnet/minecraft/class_2754; field_11439 WEST - f Lnet/minecraft/class_2758; field_11432 POWER -c net/minecraft/class_2457$1 net/minecraft/block/RedstoneWireBlock$1 - f [I field_11441 field_185820_b - f [I field_11442 field_185819_a - f [I field_24467 field_235558_a_ -c net/minecraft/class_2459 net/minecraft/block/RedstoneTorchBlock - m (Lnet/minecraft/class_1922;)Ljava/util/List; method_20453 func_220288_a - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)Z method_10489 isBurnedOut - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Z method_10488 shouldBeOff - f Ljava/util/Map; field_11445 BURNED_TORCHES - f Lnet/minecraft/class_2746; field_11446 LIT -c net/minecraft/class_2459$class_2460 net/minecraft/block/RedstoneTorchBlock$Toggle - m (Lnet/minecraft/class_2459$class_2460;)Lnet/minecraft/class_2338; method_10492 access$100 - m (Lnet/minecraft/class_2459$class_2460;)J method_10491 access$000 - f J field_11447 time - f Lnet/minecraft/class_2338; field_11448 pos -c net/minecraft/class_2453 net/minecraft/block/RedstoneLampBlock - f Lnet/minecraft/class_2746; field_11413 LIT -c net/minecraft/class_2464 net/minecraft/block/BlockRenderType - m ()[Lnet/minecraft/class_2464; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2464; valueOf valueOf - f Lnet/minecraft/class_2464; field_11455 INVISIBLE - f [Lnet/minecraft/class_2464; field_11457 $VALUES - f Lnet/minecraft/class_2464; field_11458 MODEL - f Lnet/minecraft/class_2464; field_11456 ENTITYBLOCK_ANIMATED -c net/minecraft/class_2458 net/minecraft/block/RedstoneWallTorchBlock - f Lnet/minecraft/class_2753; field_11443 FACING - f Lnet/minecraft/class_2746; field_11444 REDSTONE_TORCH_LIT -c net/minecraft/class_4969 net/minecraft/block/RespawnAnchorBlock - m (Lnet/minecraft/class_1937;)Z method_27353 doesRespawnAnchorWork - m (Lnet/minecraft/class_2680;I)I method_26157 getChargeScale - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_26382 chargeAnchor - m (Lnet/minecraft/class_1799;)Z method_29289 isValidFuel - m (Lnet/minecraft/class_2338;Lnet/minecraft/class_1937;)Z method_29560 isNearWater - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_29559 func_235563_a_ - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;)Ljava/util/Optional; method_26156 findRespawnPoint - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_29561 triggerExplosion - m (Lnet/minecraft/class_1299;Lnet/minecraft/class_1941;Lnet/minecraft/class_2338;Z)Ljava/util/Optional; method_30842 func_242678_a - m (Lnet/minecraft/class_2680;)Z method_29290 notFullyCharged - f Lcom/google/common/collect/ImmutableList; field_26443 field_242677_c - f Lcom/google/common/collect/ImmutableList; field_26442 field_242676_b - f Lnet/minecraft/class_2758; field_23153 CHARGES -c net/minecraft/class_4969$1 net/minecraft/block/RespawnAnchorBlock$1 - f Lnet/minecraft/class_2338; field_25404 field_235569_a_ - f Z field_25405 field_235570_b_ - f Lnet/minecraft/class_4969; field_25406 field_235571_c_ -c net/minecraft/class_2462 net/minecraft/block/RepeaterBlock - f Lnet/minecraft/class_2746; field_11452 LOCKED - f Lnet/minecraft/class_2758; field_11451 DELAY -c net/minecraft/class_2465 net/minecraft/block/RotatedPillarBlock - f Lnet/minecraft/class_2754; field_11459 AXIS -c net/minecraft/class_2465$1 net/minecraft/block/RotatedPillarBlock$1 - f [I field_11460 field_185828_b - f [I field_11461 field_185827_a -c net/minecraft/class_4774 net/minecraft/block/NetherRootsBlock - f Lnet/minecraft/class_265; field_22137 SHAPE -c net/minecraft/class_2468 net/minecraft/block/SandBlock - f I field_11462 dustColor -c net/minecraft/class_2470 net/minecraft/util/Rotation - m ()[Lnet/minecraft/class_2470; values values - m (Ljava/util/Random;)Ljava/util/List; method_16547 shuffledRotations - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2350; method_10503 rotate - m (II)I method_10502 rotate - m ()Lnet/minecraft/class_4990; method_26383 getOrientation - m (Ljava/util/Random;)Lnet/minecraft/class_2470; method_16548 randomRotation - m (Lnet/minecraft/class_2470;)Lnet/minecraft/class_2470; method_10501 add - m (Ljava/lang/String;)Lnet/minecraft/class_2470; valueOf valueOf - f [Lnet/minecraft/class_2470; field_11466 $VALUES - f Lnet/minecraft/class_2470; field_11465 COUNTERCLOCKWISE_90 - f Lnet/minecraft/class_2470; field_11464 CLOCKWISE_180 - f Lnet/minecraft/class_2470; field_11463 CLOCKWISE_90 - f Lnet/minecraft/class_2470; field_11467 NONE - f Lnet/minecraft/class_4990; field_23264 orientation -c net/minecraft/class_2470$1 net/minecraft/util/Rotation$1 - f [I field_11468 field_185829_a -c net/minecraft/class_3736 net/minecraft/block/ScaffoldingBlock - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;I)Z method_16373 hasScaffoldingBelow - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)I method_16372 getDistance - f Lnet/minecraft/class_265; field_16494 TOP_SLAB_SHAPE - f Lnet/minecraft/class_265; field_16497 FULL_SHAPE - f Lnet/minecraft/class_2746; field_16547 BOTTOM - f Lnet/minecraft/class_265; field_17577 BOTTOM_SLAB_SHAPE - f Lnet/minecraft/class_2746; field_16496 WATERLOGGED - f Lnet/minecraft/class_2758; field_16495 DISTANCE - f Lnet/minecraft/class_265; field_17578 field_220124_g -c net/minecraft/class_2473 net/minecraft/block/SaplingBlock - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Ljava/util/Random;)V method_10507 placeTree - f Lnet/minecraft/class_2758; field_11476 STAGE - f Lnet/minecraft/class_265; field_11478 SHAPE - f Lnet/minecraft/class_2647; field_11477 tree -c net/minecraft/class_2476 net/minecraft/block/SeaGrassBlock - f Lnet/minecraft/class_265; field_11485 SHAPE -c net/minecraft/class_2472 net/minecraft/block/SeaPickleBlock - m (Lnet/minecraft/class_2680;)Z method_10506 isInBadEnvironment - f Lnet/minecraft/class_265; field_11471 THREE_SHAPE - f Lnet/minecraft/class_265; field_11474 FOUR_SHAPE - f Lnet/minecraft/class_2746; field_11475 WATERLOGGED - f Lnet/minecraft/class_2758; field_11472 PICKLES - f Lnet/minecraft/class_265; field_11473 ONE_SHAPE - f Lnet/minecraft/class_265; field_11470 TWO_SHAPE -c net/minecraft/class_2478 net/minecraft/block/AbstractSignBlock - m ()Lnet/minecraft/class_4719; method_24025 getWoodType - f Lnet/minecraft/class_265; field_11492 SHAPE - f Lnet/minecraft/class_2746; field_11491 WATERLOGGED - f Lnet/minecraft/class_4719; field_21675 woodType -c net/minecraft/class_2480 net/minecraft/block/ShulkerBoxBlock - m (Lnet/minecraft/class_2627;Lnet/minecraft/class_47;Ljava/util/function/Consumer;)V method_10524 func_220168_a - m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_1799; method_10529 getColoredItemStack - m (Lnet/minecraft/class_1767;)Lnet/minecraft/class_2248; method_10525 getBlockByColor - m ()Lnet/minecraft/class_1767; method_10528 getColor - m (Lnet/minecraft/class_2248;)Lnet/minecraft/class_1767; method_10526 getColorFromBlock - m (Lnet/minecraft/class_1792;)Lnet/minecraft/class_1767; method_10527 getColorFromItem - f Lnet/minecraft/class_2754; field_11496 FACING - f Lnet/minecraft/class_2960; field_11495 CONTENTS - f Lnet/minecraft/class_1767; field_11494 color -c net/minecraft/class_2480$1 net/minecraft/block/ShulkerBoxBlock$1 - f [I field_11497 field_190992_a -c net/minecraft/class_2484 net/minecraft/block/SkullBlock - f Lnet/minecraft/class_265; field_11506 SHAPE - f Lnet/minecraft/class_2758; field_11505 ROTATION -c net/minecraft/class_2484$class_2485 net/minecraft/block/SkullBlock$ISkullType -c net/minecraft/class_2484$class_2486 net/minecraft/block/SkullBlock$Types - m ()[Lnet/minecraft/class_2484$class_2486; values values - m (Ljava/lang/String;)Lnet/minecraft/class_2484$class_2486; valueOf valueOf - f Lnet/minecraft/class_2484$class_2486; field_11510 PLAYER - f Lnet/minecraft/class_2484$class_2486; field_11513 WITHER_SKELETON - f Lnet/minecraft/class_2484$class_2486; field_11508 ZOMBIE - f [Lnet/minecraft/class_2484$class_2486; field_11509 $VALUES - f Lnet/minecraft/class_2484$class_2486; field_11507 CREEPER - f Lnet/minecraft/class_2484$class_2486; field_11512 SKELETON - f Lnet/minecraft/class_2484$class_2486; field_11511 DRAGON -c net/minecraft/class_3737 net/minecraft/block/IWaterLoggable -c net/minecraft/class_2490 net/minecraft/block/SlimeBlock - m (Lnet/minecraft/class_1297;)V method_21847 bounceEntity -c net/minecraft/class_2482 net/minecraft/block/SlabBlock - f Lnet/minecraft/class_2746; field_11502 WATERLOGGED - f Lnet/minecraft/class_265; field_11500 BOTTOM_SHAPE - f Lnet/minecraft/class_2754; field_11501 TYPE - f Lnet/minecraft/class_265; field_11499 TOP_SHAPE -c net/minecraft/class_2482$1 net/minecraft/block/SlabBlock$1 - f [I field_11503 field_210406_b - f [I field_11504 field_208121_a -c net/minecraft/class_3716 net/minecraft/block/SmokerBlock -c net/minecraft/class_3717 net/minecraft/block/SmithingTableBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_24950 func_235576_a_ - f Lnet/minecraft/class_2561; field_22511 CONTAINER_NAME -c net/minecraft/class_2493 net/minecraft/block/SnowyDirtBlock - f Lnet/minecraft/class_2746; field_11522 SNOWY -c net/minecraft/class_2488 net/minecraft/block/SnowBlock - f [Lnet/minecraft/class_265; field_11517 SHAPES - f Lnet/minecraft/class_2758; field_11518 LAYERS -c net/minecraft/class_2488$1 net/minecraft/block/SnowBlock$1 - f [I field_11519 field_210407_a -c net/minecraft/class_4775 net/minecraft/block/SoulFireBlock - m (Lnet/minecraft/class_2248;)Z method_26158 shouldLightSoulFire -c net/minecraft/class_2492 net/minecraft/block/SoulSandBlock - f Lnet/minecraft/class_265; field_11521 SHAPE -c net/minecraft/class_2496 net/minecraft/block/SpawnerBlock -c net/minecraft/class_2498 net/minecraft/block/SoundType - m ()Lnet/minecraft/class_3414; method_10593 getFallSound - m ()Lnet/minecraft/class_3414; method_10595 getBreakSound - m ()Lnet/minecraft/class_3414; method_10598 getPlaceSound - m ()F method_10599 getPitch - m ()Lnet/minecraft/class_3414; method_10596 getHitSound - m ()Lnet/minecraft/class_3414; method_10594 getStepSound - m ()F method_10597 getVolume - f Lnet/minecraft/class_2498; field_22147 NETHER_SPROUT - f Lnet/minecraft/class_2498; field_11529 GROUND - f F field_11539 pitch - f Lnet/minecraft/class_2498; field_22149 BONE - f Lnet/minecraft/class_2498; field_25183 LILY_PADS - f Lnet/minecraft/class_2498; field_17734 LANTERN - f Lnet/minecraft/class_2498; field_22145 NETHERRACK - f Lnet/minecraft/class_2498; field_17580 CROP - f Lnet/minecraft/class_2498; field_23083 VINE - f Lnet/minecraft/class_2498; field_24119 CHAIN - f Lnet/minecraft/class_2498; field_11543 CLOTH - f Lnet/minecraft/class_2498; field_22151 ANCIENT_DEBRIS - f Lnet/minecraft/class_2498; field_11533 METAL - f Lnet/minecraft/class_2498; field_22138 ROOT - f Lnet/minecraft/class_2498; field_11545 SLIME - f Lnet/minecraft/class_3414; field_11536 placeSound - f Lnet/minecraft/class_2498; field_11534 WET_GRASS - f Lnet/minecraft/class_2498; field_11532 LADDER - f Lnet/minecraft/class_3414; field_11546 breakSound - f Lnet/minecraft/class_2498; field_22153 NYLIUM - f Lnet/minecraft/class_2498; field_16498 SCAFFOLDING - f Lnet/minecraft/class_3414; field_11541 fallSound - f Lnet/minecraft/class_2498; field_22143 BASALT - f Lnet/minecraft/class_2498; field_22140 NETHER_VINE - f Lnet/minecraft/class_2498; field_22141 SOUL_SAND - f Lnet/minecraft/class_2498; field_11542 BAMBOO - f Lnet/minecraft/class_2498; field_11535 PLANT - f Lnet/minecraft/class_2498; field_17581 NETHER_WART - f Lnet/minecraft/class_2498; field_22148 NETHER_ORE - f F field_11540 volume - f Lnet/minecraft/class_2498; field_22144 WART - f Lnet/minecraft/class_2498; field_22146 NETHER_BRICK - f Lnet/minecraft/class_2498; field_11547 WOOD - f Lnet/minecraft/class_2498; field_18852 STEM - f Lnet/minecraft/class_2498; field_23265 LODESTONE - f Lnet/minecraft/class_2498; field_24120 NETHER_GOLD - f Lnet/minecraft/class_2498; field_11526 SAND - f Lnet/minecraft/class_2498; field_22150 NETHERITE - f Lnet/minecraft/class_2498; field_11544 STONE - f Lnet/minecraft/class_2498; field_22152 HYPHAE - f Lnet/minecraft/class_2498; field_11537 GLASS - f Lnet/minecraft/class_2498; field_22154 FUNGUS - f Lnet/minecraft/class_2498; field_22139 SHROOMLIGHT - f Lnet/minecraft/class_2498; field_21214 HONEY - f Lnet/minecraft/class_2498; field_24121 GILDED_BLACKSTONE - f Lnet/minecraft/class_2498; field_11548 SNOW - f Lnet/minecraft/class_3414; field_11527 stepSound - f Lnet/minecraft/class_2498; field_11531 ANVIL - f Lnet/minecraft/class_2498; field_22142 SOUL_SOIL - f Lnet/minecraft/class_2498; field_11538 BAMBOO_SAPLING - f Lnet/minecraft/class_2498; field_17579 SWEET_BERRY_BUSH - f Lnet/minecraft/class_3414; field_11530 hitSound - f Lnet/minecraft/class_2498; field_11528 CORAL - f Lnet/minecraft/class_2498; field_23082 NETHER_VINE_LOWER_PITCH -c net/minecraft/class_2500 net/minecraft/block/SpreadableSnowyDirtBlock - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_10614 isSnowyConditions - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;)Z method_10613 isSnowyAndNotUnderwater -c net/minecraft/class_2502 net/minecraft/block/SpongeBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)Z method_10619 absorb - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10620 tryAbsorb -c net/minecraft/class_2504 net/minecraft/block/StainedGlassPaneBlock - f Lnet/minecraft/class_1767; field_11554 color -c net/minecraft/class_2506 net/minecraft/block/StainedGlassBlock - f Lnet/minecraft/class_1767; field_11558 color -c net/minecraft/class_2508 net/minecraft/block/StandingSignBlock - f Lnet/minecraft/class_2758; field_11559 ROTATION -c net/minecraft/class_2510 net/minecraft/block/StairsBlock - m (Lnet/minecraft/class_2680;)I method_10673 getPaletteId - m (I)[Lnet/minecraft/class_265; method_10677 func_199778_d - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;)[Lnet/minecraft/class_265; method_10672 makeShapes - m (Lnet/minecraft/class_2680;)Z method_10676 isBlockStairs - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_10678 isDifferentStairs - m (ILnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Lnet/minecraft/class_265; method_10671 combineShapes - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;Lnet/minecraft/class_265;I)Lnet/minecraft/class_265; method_10674 func_199780_a - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2778; method_10675 getShapeProperty - f Lnet/minecraft/class_265; field_11561 NWD_CORNER - f Lnet/minecraft/class_265; field_11578 SWD_CORNER - f Lnet/minecraft/class_2753; field_11571 FACING - f Lnet/minecraft/class_265; field_11576 AABB_SLAB_BOTTOM - f Lnet/minecraft/class_265; field_11562 AABB_SLAB_TOP - f Lnet/minecraft/class_2754; field_11565 SHAPE - f Lnet/minecraft/class_2754; field_11572 HALF - f [I field_11570 PALETTE_SHAPE_MAP - f Lnet/minecraft/class_265; field_11575 NED_CORNER - f Lnet/minecraft/class_2680; field_11574 modelState - f Lnet/minecraft/class_265; field_11563 SWU_CORNER - f Lnet/minecraft/class_265; field_11568 NWU_CORNER - f [Lnet/minecraft/class_265; field_11564 SLAB_BOTTOM_SHAPES - f Lnet/minecraft/class_265; field_11567 SEU_CORNER - f [Lnet/minecraft/class_265; field_11566 SLAB_TOP_SHAPES - f Lnet/minecraft/class_265; field_11569 SED_CORNER - f Lnet/minecraft/class_2248; field_11579 modelBlock - f Lnet/minecraft/class_265; field_11577 NEU_CORNER - f Lnet/minecraft/class_2746; field_11573 WATERLOGGED -c net/minecraft/class_2510$1 net/minecraft/block/StairsBlock$1 - f [I field_11580 field_185869_c - f [I field_11581 field_208122_a -c net/minecraft/class_2511 net/minecraft/block/StemGrownBlock - m ()Lnet/minecraft/class_2195; method_10680 getAttachedStem - m ()Lnet/minecraft/class_2513; method_10679 getStem -c net/minecraft/class_2513 net/minecraft/block/StemBlock - m ()Lnet/minecraft/class_1792; method_10695 getSeedItem - m ()Lnet/minecraft/class_2511; method_10694 getCrop - f [Lnet/minecraft/class_265; field_11583 SHAPES - f Lnet/minecraft/class_2511; field_11585 crop - f Lnet/minecraft/class_2758; field_11584 AGE -c net/minecraft/class_3718 net/minecraft/block/StonecutterBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ILnet/minecraft/class_1661;Lnet/minecraft/class_1657;)Lnet/minecraft/class_1703; method_17896 func_220283_a - f Lnet/minecraft/class_2561; field_17650 CONTAINER_NAME - f Lnet/minecraft/class_265; field_16407 SHAPE - f Lnet/minecraft/class_2753; field_17649 FACING -c net/minecraft/class_2517 net/minecraft/block/StoneButtonBlock -c net/minecraft/class_2518 net/minecraft/block/StructureVoidBlock - f Lnet/minecraft/class_265; field_11589 SHAPE -c net/minecraft/class_2515 net/minecraft/block/StructureBlock - m (Lnet/minecraft/class_3218;Lnet/minecraft/class_2633;)V method_10703 execute - f Lnet/minecraft/class_2754; field_11586 MODE -c net/minecraft/class_2515$1 net/minecraft/block/StructureBlock$1 - f [I field_11587 field_208123_a -c net/minecraft/class_5431 net/minecraft/util/BlockVoxelShape - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_30367 func_241854_a - m (Ljava/lang/String;)Lnet/minecraft/class_5431; valueOf valueOf - m ()[Lnet/minecraft/class_5431; values values - f Lnet/minecraft/class_5431; field_25822 FULL - f Lnet/minecraft/class_5431; field_25823 CENTER - f [Lnet/minecraft/class_5431; field_25825 $VALUES - f Lnet/minecraft/class_5431; field_25824 RIGID -c net/minecraft/class_5431$1 net/minecraft/util/BlockVoxelShape$1 -c net/minecraft/class_5431$2 net/minecraft/util/BlockVoxelShape$2 - f I field_25826 field_242680_d - f Lnet/minecraft/class_265; field_25827 field_242681_e -c net/minecraft/class_5431$3 net/minecraft/util/BlockVoxelShape$3 - f Lnet/minecraft/class_265; field_25829 field_242683_e - f I field_25828 field_242682_d -c net/minecraft/class_2523 net/minecraft/block/SugarCaneBlock - f Lnet/minecraft/class_265; field_11611 SHAPE - f Lnet/minecraft/class_2758; field_11610 AGE -c net/minecraft/class_2521 net/minecraft/block/TallFlowerBlock -c net/minecraft/class_3830 net/minecraft/block/SweetBerryBushBlock - f Lnet/minecraft/class_2758; field_17000 AGE - f Lnet/minecraft/class_265; field_17002 GROWING_SHAPE - f Lnet/minecraft/class_265; field_17001 BUSHLING_SHAPE -c net/minecraft/class_2525 net/minecraft/block/TallSeaGrassBlock - f Lnet/minecraft/class_2754; field_11616 HALF - f Lnet/minecraft/class_265; field_11615 SHAPE -c net/minecraft/class_2526 net/minecraft/block/TallGrassBlock - f Lnet/minecraft/class_265; field_11617 SHAPE -c net/minecraft/class_2530 net/minecraft/block/TNTBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1309;)V method_10737 explode - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10738 explode - m (Lnet/minecraft/class_1268;Lnet/minecraft/class_1657;)V method_20292 func_220287_a - f Lnet/minecraft/class_2746; field_11621 UNSTABLE -c net/minecraft/class_4850 net/minecraft/block/TargetBlock - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2680;ILnet/minecraft/class_2338;I)V method_24857 powerTarget - m (Lnet/minecraft/class_3965;Lnet/minecraft/class_243;)I method_24859 getPowerFromHitVec - m (Lnet/minecraft/class_1936;Lnet/minecraft/class_2680;Lnet/minecraft/class_3965;Lnet/minecraft/class_1297;)I method_24858 getPowerFromHitVec - f Lnet/minecraft/class_2758; field_22428 POWER -c net/minecraft/class_2533 net/minecraft/block/TrapDoorBlock - m (Lnet/minecraft/class_1657;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Z)V method_10740 playSound - f Lnet/minecraft/class_2746; field_11626 WATERLOGGED - f Lnet/minecraft/class_2754; field_11625 HALF - f Lnet/minecraft/class_265; field_11627 EAST_OPEN_AABB - f Lnet/minecraft/class_265; field_11628 TOP_AABB - f Lnet/minecraft/class_265; field_11633 NORTH_OPEN_AABB - f Lnet/minecraft/class_265; field_11632 BOTTOM_AABB - f Lnet/minecraft/class_2746; field_11629 POWERED - f Lnet/minecraft/class_265; field_11624 SOUTH_OPEN_AABB - f Lnet/minecraft/class_2746; field_11631 OPEN - f Lnet/minecraft/class_265; field_11630 WEST_OPEN_AABB -c net/minecraft/class_2533$1 net/minecraft/block/TrapDoorBlock$1 - f [I field_11634 field_210408_b - f [I field_11635 field_177058_a -c net/minecraft/class_2527 net/minecraft/block/TorchBlock - f Lnet/minecraft/class_2394; field_22155 particleData - f Lnet/minecraft/class_265; field_11618 SHAPE -c net/minecraft/class_2531 net/minecraft/block/TrappedChestBlock - m ()Lnet/minecraft/class_2591; method_24181 func_226952_e_ -c net/minecraft/class_2537 net/minecraft/block/TripWireHookBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)V method_10775 notifyNeighbors - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;ZZILnet/minecraft/class_2680;)V method_10776 calculateState - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;ZZZZ)V method_10777 playSound - f Lnet/minecraft/class_2746; field_11671 POWERED - f Lnet/minecraft/class_265; field_11667 HOOK_EAST_AABB - f Lnet/minecraft/class_265; field_11670 HOOK_WEST_AABB - f Lnet/minecraft/class_2753; field_11666 FACING - f Lnet/minecraft/class_265; field_11668 HOOK_SOUTH_AABB - f Lnet/minecraft/class_265; field_11665 HOOK_NORTH_AABB - f Lnet/minecraft/class_2746; field_11669 ATTACHED -c net/minecraft/class_2537$1 net/minecraft/block/TripWireHookBlock$1 - f [I field_11672 field_177056_a -c net/minecraft/class_2538 net/minecraft/block/TripWireBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10779 notifyHook - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Z method_10778 shouldConnectTo - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V method_10780 updateState - f Ljava/util/Map; field_11676 FACING_TO_PROPERTY_MAP - f Lnet/minecraft/class_2746; field_11675 NORTH - f Lnet/minecraft/class_2746; field_11673 EAST - f Lnet/minecraft/class_265; field_11681 TRIP_WRITE_ATTACHED_AABB - f Lnet/minecraft/class_2746; field_11679 DISARMED - f Lnet/minecraft/class_265; field_11682 AABB - f Lnet/minecraft/class_2746; field_11683 ATTACHED - f Lnet/minecraft/class_2746; field_11680 POWERED - f Lnet/minecraft/class_2746; field_11674 WEST - f Lnet/minecraft/class_2537; field_11677 hook - f Lnet/minecraft/class_2746; field_11678 SOUTH -c net/minecraft/class_2538$1 net/minecraft/block/TripWireBlock$1 - f [I field_11685 field_185874_a - f [I field_11684 field_185875_b -c net/minecraft/class_4777 net/minecraft/block/TwistingVinesTopBlock - f Lnet/minecraft/class_265; field_22172 SHAPE -c net/minecraft/class_2542 net/minecraft/block/TurtleEggBlock - m (Lnet/minecraft/class_1937;)Z method_10832 canGrow - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;I)V method_10834 tryTrample - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_10831 hasProperHabitat - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V method_10833 removeOneEgg - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_29952 isProperHabitat - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_1297;)Z method_10835 canTrample - f Lnet/minecraft/class_265; field_11709 MULTI_EGG_SHAPE - f Lnet/minecraft/class_265; field_11712 ONE_EGG_SHAPE - f Lnet/minecraft/class_2758; field_11711 HATCH - f Lnet/minecraft/class_2758; field_11710 EGGS -c net/minecraft/class_2541 net/minecraft/block/VineBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_31018 getShapeForState - m (Lnet/minecraft/class_2680;)Z method_10823 getBlocksAttachedTo - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Z method_10824 hasVineBelow - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;)Lnet/minecraft/class_2680; method_10827 func_196545_h - m (Lnet/minecraft/class_2350;)Lnet/minecraft/class_2746; method_10828 getPropertyFor - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_10829 hasAttachment - m (Lnet/minecraft/class_2680;)I method_10822 countBlocksVineIsAttachedTo - m (Lnet/minecraft/class_1922;Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z method_10821 canAttachTo - m (Ljava/util/Map$Entry;)Z method_10826 func_199782_a - m (Lnet/minecraft/class_2680;)Z method_10830 isFacingCardinal - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Ljava/util/Random;)Lnet/minecraft/class_2680; method_10820 func_196544_a - f Ljava/util/Map; field_26659 stateToShapeMap - f Ljava/util/Map; field_11697 FACING_TO_PROPERTY_MAP - f Lnet/minecraft/class_2746; field_11696 WEST - f Lnet/minecraft/class_265; field_11700 NORTH_AABB - f Lnet/minecraft/class_265; field_11701 SOUTH_AABB - f Lnet/minecraft/class_2746; field_11699 SOUTH - f Lnet/minecraft/class_265; field_11705 WEST_AABB - f Lnet/minecraft/class_265; field_11704 EAST_AABB - f Lnet/minecraft/class_2746; field_11702 EAST - f Lnet/minecraft/class_2746; field_11703 UP - f Lnet/minecraft/class_2746; field_11706 NORTH - f Lnet/minecraft/class_265; field_11698 UP_AABB -c net/minecraft/class_2541$1 net/minecraft/block/VineBlock$1 - f [I field_11708 field_185876_b - f [I field_11707 field_185877_c -c net/minecraft/class_4950 net/minecraft/block/TwistingVinesBlock - f Lnet/minecraft/class_265; field_23325 SHAPE -c net/minecraft/class_2544 net/minecraft/block/WallBlock - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_24421 func_235625_a_ - m (Lnet/minecraft/class_2680;ZLnet/minecraft/class_2350;)Z method_16704 shouldConnect - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2680;Lnet/minecraft/class_265;)Z method_27092 func_235628_a_ - m (Lnet/minecraft/class_265;Lnet/minecraft/class_4778;Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Lnet/minecraft/class_265; method_24426 getHeightAlteredShape - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_2769;)Z method_24424 hasHeightForProperty - m (FFFFFF)Ljava/util/Map; method_24420 makeShapes - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;ZZZZ)Lnet/minecraft/class_2680; method_24422 func_235626_a_ - m (Lnet/minecraft/class_265;Lnet/minecraft/class_265;)Z method_24427 compareShapes - m (Lnet/minecraft/class_4538;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2350;)Lnet/minecraft/class_2680; method_24423 func_235627_a_ - m (Lnet/minecraft/class_2680;ZZZZLnet/minecraft/class_265;)Lnet/minecraft/class_2680; method_24425 func_235630_a_ - m (ZLnet/minecraft/class_265;Lnet/minecraft/class_265;)Lnet/minecraft/class_4778; method_24428 func_235633_a_ - f Lnet/minecraft/class_2746; field_11717 UP - f Lnet/minecraft/class_2754; field_22157 WALL_HEIGHT_NORTH - f Lnet/minecraft/class_2754; field_22156 WALL_HEIGHT_EAST - f Lnet/minecraft/class_2746; field_22160 WATERLOGGED - f Lnet/minecraft/class_265; field_22165 WALL_CONNECTION_SOUTH_SIDE_SHAPE - f Lnet/minecraft/class_265; field_22164 WALL_CONNECTION_NORTH_SIDE_SHAPE - f Lnet/minecraft/class_265; field_22163 CENTER_POLE_SHAPE - f Lnet/minecraft/class_2754; field_22159 WALL_HEIGHT_WEST - f Lnet/minecraft/class_2754; field_22158 WALL_HEIGHT_SOUTH - f Lnet/minecraft/class_265; field_22167 WALL_CONNECTION_EAST_SIDE_SHAPE - f Ljava/util/Map; field_22161 stateToShapeMap - f Lnet/minecraft/class_265; field_22166 WALL_CONNECTION_WEST_SIDE_SHAPE - f Ljava/util/Map; field_22162 stateToCollisionShapeMap -c net/minecraft/class_2544$1 net/minecraft/block/WallBlock$1 - f [I field_22168 field_235634_a_ - f [I field_22169 field_235635_b_ -c net/minecraft/class_2546 net/minecraft/block/WallBannerBlock - f Lnet/minecraft/class_2753; field_11722 HORIZONTAL_FACING - f Ljava/util/Map; field_11723 BANNER_SHAPES -c net/minecraft/class_2549 net/minecraft/block/WallSkullBlock - f Ljava/util/Map; field_11725 SHAPES - f Lnet/minecraft/class_2753; field_11724 FACING -c net/minecraft/class_2551 net/minecraft/block/WallSignBlock - f Lnet/minecraft/class_2753; field_11726 FACING - f Ljava/util/Map; field_11727 SHAPES -c net/minecraft/class_2553 net/minecraft/block/LilyPadBlock - f Lnet/minecraft/class_265; field_11728 LILY_PAD_AABB -c net/minecraft/class_2555 net/minecraft/block/WallTorchBlock - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_265; method_10841 getShapeForState - f Ljava/util/Map; field_11732 SHAPES - f Lnet/minecraft/class_2753; field_11731 HORIZONTAL_FACING -c net/minecraft/class_4776 net/minecraft/block/WeepingVinesTopBlock - f Lnet/minecraft/class_265; field_22171 SHAPE -c net/minecraft/class_2560 net/minecraft/block/WebBlock -c net/minecraft/class_2557 net/minecraft/block/WeightedPressurePlateBlock - f Lnet/minecraft/class_2758; field_11739 POWER - f I field_11738 maxWeight -c net/minecraft/class_4951 net/minecraft/block/WeepingVinesBlock - f Lnet/minecraft/class_265; field_23326 SHAPE -c net/minecraft/class_2563 net/minecraft/block/WitherRoseBlock -c net/minecraft/class_2565 net/minecraft/block/WetSpongeBlock -c net/minecraft/class_2567 net/minecraft/block/WitherSkeletonWallSkullBlock -c net/minecraft/class_2570 net/minecraft/block/WitherSkeletonSkullBlock - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1799;)Z method_10899 canSpawnMob - m ()Lnet/minecraft/class_2700; method_10897 getOrCreateWitherBase - m (Lnet/minecraft/class_2694;)Z method_24798 func_235638_a_ - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2631;)V method_10898 checkWitherSpawn - m ()Lnet/minecraft/class_2700; method_10900 getOrCreateWitherFull - m (Lnet/minecraft/class_2694;)Z method_24799 func_235639_b_ - f Lnet/minecraft/class_2700; field_11764 witherPatternBase - f Lnet/minecraft/class_2700; field_11765 witherPatternFull -c net/minecraft/class_2577 net/minecraft/block/CarpetBlock - m ()Lnet/minecraft/class_1767; method_10925 getColor - f Lnet/minecraft/class_265; field_11783 SHAPE - f Lnet/minecraft/class_1767; field_11784 color -c com/mojang/blaze3d/systems/RenderSystem com/mojang/blaze3d/systems/RenderSystem - m (FFF)V translatef translatef - m (Lnet/minecraft/class_4493$class_1030;)V logicOp logicOp - m (I)V lambda$shadeModel$25 func_229924_lam_ - m (Lnet/minecraft/class_4493$class_1028;)V fogMode fogMode - m ()I maxSupportedTextureSize maxSupportedTextureSize - m (I)V fogMode fogMode - m (II)V lambda$fogi$17 func_229883_lam_ - m (II)V colorMaterial colorMaterial - m (F)V fogEnd fogEnd - m (FFF)V lambda$translatef$40 func_229926_lam_ - m (IZLjava/nio/FloatBuffer;)V glUniformMatrix2 glUniformMatrix2 - m ()V replayQueue replayQueue - m (IZ)V lambda$clear$34 func_229884_lam_ - m ()V enableAlphaTest enableAlphaTest - m ()V pushLightingAttributes pushLightingAttributes - m (FFF)V normal3f normal3f - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V lambda$setupGuiFlatDiffuseLighting$69 func_231419_lam_ - m (I)V deleteTexture deleteTexture - m (IIIIIILjava/nio/ByteBuffer;)V lambda$readPixels$49 func_229923_lam_ - m ()V disableCull disableCull - m ()V enableDepthTest enableDepthTest - m (FFFF)V lambda$rotatef$37 func_229895_lam_ - m (DDDDDD)V lambda$ortho$36 func_229885_lam_ - m (IIIIIILjava/nio/ByteBuffer;)V readPixels readPixels - m ()V disableColorMaterial disableColorMaterial - m ()V defaultAlphaFunc defaultAlphaFunc - m (F)V lambda$lineWidth$46 func_229905_lam_ - m ()V setupOutline setupOutline - m (I)V lambda$matrixMode$35 func_229920_lam_ - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V lambda$setupGui3DDiffuseLighting$70 func_231417_lam_ - m (FF)V polygonOffset polygonOffset - m ()V loadIdentity loadIdentity - m (I)V bindTexture bindTexture - m ()Z isInInitPhase isInInitPhase - m (IZLjava/nio/FloatBuffer;)V lambda$glUniformMatrix2$64 func_229945_lam_ - m (IFFFF)V lambda$fog$16 func_229882_lam_ - m ()V enableTexture enableTexture - m (FFFF)V clearColor clearColor - m (F)V fogDensity fogDensity - m (II)V lambda$polygonMode$18 func_229929_lam_ - m ()Ljava/lang/String; getApiDescription getApiDescription - m ()V enableCull enableCull - m (FFF)V lambda$scalef$38 func_229888_lam_ - m (Lnet/minecraft/class_4493$class_1030;)V lambda$logicOp$20 func_229893_lam_ - m (I)V depthFunc depthFunc - m ()V beginInitialization beginInitialization - m (ILjava/nio/IntBuffer;)V lambda$glUniform3$58 func_229916_lam_ - m ()V enableColorMaterial enableColorMaterial - m (DDD)V translated translated - m (FF)V lambda$polygonOffset$19 func_229940_lam_ - m (IZLjava/nio/FloatBuffer;)V glUniformMatrix4 glUniformMatrix4 - m (I)V stencilMask stencilMask - m ()V teardownOutline teardownOutline - m (Lnet/minecraft/class_1159;)V multMatrix multMatrix - m (IZ)V clear clear - m (ILjava/util/function/Supplier;)V glBindBuffer glBindBuffer - m (I)V lambda$clearStencil$33 func_229933_lam_ - m ()V enableLighting enableLighting - m (III)V lambda$stencilFunc$28 func_229930_lam_ - m (ILjava/nio/IntBuffer;)V glUniform2 glUniform2 - m ()V disableColorLogicOp disableColorLogicOp - m (FFFF)V rotatef rotatef - m (ILjava/nio/FloatBuffer;)V lambda$glUniform3$62 func_229917_lam_ - m (Ljava/util/function/Consumer;)V glGenBuffers glGenBuffers - m (I)V clearStencil clearStencil - m (ILjava/nio/IntBuffer;)V lambda$glUniform4$59 func_229918_lam_ - m (Z)V initGameThread initGameThread - m (IZLjava/nio/FloatBuffer;)V glUniformMatrix3 glUniformMatrix3 - m (FFFF)V lambda$clearColor$32 func_229908_lam_ - m (IZLjava/nio/FloatBuffer;)V lambda$glUniformMatrix4$66 func_229947_lam_ - m (Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;)V blendFunc blendFunc - m ()Lnet/minecraft/class_289; renderThreadTesselator renderThreadTesselator - m (III)V lambda$drawArrays$45 func_229910_lam_ - m ()Z isOnRenderThreadOrInit isOnRenderThreadOrInit - m (I)V renderCrosshair renderCrosshair - m (ILjava/nio/IntBuffer;)V glUniform1 glUniform1 - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V setupGuiFlatDiffuseLighting setupGuiFlatDiffuseLighting - m (FFF)V lambda$normal3f$2 func_229894_lam_ - m ()V disableLineOffset disableLineOffset - m (ZZZZ)V colorMask colorMask - m (F)V lambda$fogDensity$13 func_229911_lam_ - m (D)V lambda$clearDepth$31 func_229909_lam_ - m ()V mulTextureByProjModelView mulTextureByProjModelView - m (DDD)V lambda$scaled$39 func_229887_lam_ - m (I)V glDeleteBuffers glDeleteBuffers - m (ILjava/nio/IntBuffer;)V lambda$glUniform1$56 func_229912_lam_ - m ()V clearCurrentColor clearCurrentColor - m (II)V glUniform1i glUniform1i - m (III)V lambda$stencilOp$30 func_229906_lam_ - m ()V enableBlend enableBlend - m (I)V lambda$fogMode$12 func_229892_lam_ - m (IFF)V glMultiTexCoord2f glMultiTexCoord2f - m (Ljava/util/function/IntSupplier;I)V lambda$setupOverlayColor$67 func_229949_lam_ - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;Lnet/minecraft/class_1159;)V setupLevelDiffuseLighting setupLevelDiffuseLighting - m (II)V lambda$pixelStore$47 func_229922_lam_ - m (ILjava/nio/FloatBuffer;)V glUniform2 glUniform2 - m (ILjava/util/function/Consumer;)V getString getString - m ()V finishInitialization finishInitialization - m ()Z isOnGameThread isOnGameThread - m (DDD)V lambda$translated$41 func_229925_lam_ - m (ILjava/util/function/Consumer;)V lambda$getString$50 func_229904_lam_ - m (F)V lambda$fogEnd$15 func_229886_lam_ - m (Lnet/minecraft/class_1159;)V lambda$multMatrix$42 func_229921_lam_ - m (ILjava/nio/IntBuffer;)V glUniform4 glUniform4 - m (Ljava/lang/Runnable;)V runAsFancy runAsFancy - m ()Ljava/lang/String; getBackendDescription getBackendDescription - m ()V enableColorLogicOp enableColorLogicOp - m ()V clearTexGen clearTexGen - m ()V popMatrix popMatrix - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;Lnet/minecraft/class_1159;)V lambda$setupLevelDiffuseLighting$68 func_231418_lam_ - m ()V disableAlphaTest disableAlphaTest - m (ILjava/nio/ByteBuffer;I)V glBufferData glBufferData - m (I)V lambda$deleteTexture$23 func_229938_lam_ - m ()V enablePolygonOffset enablePolygonOffset - m (Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;)V lambda$blendFuncSeparate$7 func_229943_lam_ - m ()V disableTexture disableTexture - m ()V disableDepthTest disableDepthTest - m (II)V pixelStore pixelStore - m (F)V lambda$fogStart$14 func_229901_lam_ - m (II)V blendFunc blendFunc - m (IZLjava/nio/FloatBuffer;)V lambda$glUniformMatrix3$65 func_229946_lam_ - m (I)V lambda$bindTexture$24 func_229927_lam_ - m (IIII)V setupDefaultState setupDefaultState - m (IF)V pixelTransfer pixelTransfer - m ()V pushMatrix pushMatrix - m (F)V lineWidth lineWidth - m (Ljava/util/function/Supplier;)V assertThread assertThread - m (III)V lambda$texParameter$22 func_229936_lam_ - m (I)V lambda$blendEquation$9 func_229932_lam_ - m ()V enableFog enableFog - m ()V disablePolygonOffset disablePolygonOffset - m (ILjava/nio/FloatBuffer;)V glUniform1 glUniform1 - m (J)V flipFrame flipFrame - m (II)V polygonMode polygonMode - m (I)V lambda$stencilMask$29 func_229931_lam_ - m (IIII)V blendFuncSeparate blendFuncSeparate - m ()V popAttributes popAttributes - m (ILjava/nio/IntBuffer;)V glUniform3 glUniform3 - m (III)V drawArrays drawArrays - m ()V setupEndPortalTexGen setupEndPortalTexGen - m (ZZZZ)V lambda$colorMask$27 func_229903_lam_ - m (ILjava/nio/FloatBuffer;)V lambda$glUniform2$61 func_229915_lam_ - m (Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;)V lambda$blendFunc$5 func_229897_lam_ - m (Ljava/util/function/Consumer;)V lambda$glGenBuffers$71 func_231416_lam_ - m (FFFF)V blendColor blendColor - m (Lorg/lwjgl/glfw/GLFWErrorCallbackI;)V setErrorCallback setErrorCallback - m ()Z isOnRenderThread isOnRenderThread - m (D)V clearDepth clearDepth - m (IF)V alphaFunc alphaFunc - m (Ljava/util/function/IntSupplier;I)V setupOverlayColor setupOverlayColor - m (I)V matrixMode matrixMode - m ()Z isOnGameThreadOrInit isOnGameThreadOrInit - m (IFFFF)V fog fog - m ()V pushTextureAttributes pushTextureAttributes - m (I)V activeTexture activeTexture - m (DDDDDD)V ortho ortho - m (IIII)V lambda$blendFuncSeparate$8 func_229944_lam_ - m ()V enableRescaleNormal enableRescaleNormal - m (FFFF)V color4f color4f - m (ILjava/nio/FloatBuffer;)V glUniform4 glUniform4 - m (I)V blendEquation blendEquation - m (Z)V lambda$depthMask$4 func_229900_lam_ - m (I)V lambda$depthFunc$3 func_229899_lam_ - m (II)V lambda$blendFunc$6 func_229898_lam_ - m (Lnet/minecraft/class_1160;Lnet/minecraft/class_1160;)V setupGui3DDiffuseLighting setupGui3DDiffuseLighting - m ()Ljava/lang/String; getCapsString getCapsString - m (FFFF)V lambda$color4f$43 func_229890_lam_ - m (F)V fogStart fogStart - m (ILjava/nio/FloatBuffer;)V lambda$glUniform1$60 func_229913_lam_ - m (I)V lambda$glDeleteBuffers$54 func_229941_lam_ - m ()Ljava/util/function/LongSupplier; initBackendSystem initBackendSystem - m (II)V lambda$glUniform1i$55 func_229928_lam_ - m (ILjava/nio/IntBuffer;)V lambda$glUniform2$57 func_229914_lam_ - m ()V disableFog disableFog - m (DDD)V scaled scaled - m (II)V lambda$colorMaterial$1 func_229934_lam_ - m (IF)V lambda$alphaFunc$0 func_229896_lam_ - m (Z)V depthMask depthMask - m (IIII)V lambda$viewport$26 func_229902_lam_ - m (ILjava/nio/FloatBuffer;)V glUniform3 glUniform3 - m (III)V stencilFunc stencilFunc - m (Lnet/minecraft/class_4573;)V recordRenderCall recordRenderCall - m (Lnet/minecraft/class_4493$class_1028;)V lambda$fogMode$11 func_229891_lam_ - m ()V disableBlend disableBlend - m ()V enableLineOffset enableLineOffset - m (IF)V lambda$pixelTransfer$48 func_229939_lam_ - m (IFF)V lambda$glMultiTexCoord2f$52 func_229948_lam_ - m (III)V texParameter texParameter - m (FFF)V scalef scalef - m ()V initRenderThread initRenderThread - m (FFFF)V lambda$blendColor$10 func_229907_lam_ - m (I)V lambda$activeTexture$21 func_229937_lam_ - m (I)V shadeModel shadeModel - m (III)V stencilOp stencilOp - m (FFF)V lambda$color3f$44 func_229889_lam_ - m (IIII)V viewport viewport - m ()V teardownOverlayColor teardownOverlayColor - m ()V defaultBlendFunc defaultBlendFunc - m (I)V lambda$renderCrosshair$51 func_229942_lam_ - m (ILjava/util/function/Supplier;)V lambda$glBindBuffer$53 func_229935_lam_ - m (Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;Lnet/minecraft/class_4493$class_4535;Lnet/minecraft/class_4493$class_4534;)V blendFuncSeparate blendFuncSeparate - m (ILjava/nio/FloatBuffer;)V lambda$glUniform4$63 func_229919_lam_ - m ()V setupNvFogDistance setupNvFogDistance - m (IZ)V initRenderer initRenderer - m ()V disableRescaleNormal disableRescaleNormal - m ()V disableLighting disableLighting - m (I)V limitDisplayFPS limitDisplayFPS - m (FFF)V color3f color3f - m (II)V fogi fogi - f D lastDrawTime lastDrawTime - f I MAX_SUPPORTED_TEXTURE_SIZE MAX_SUPPORTED_TEXTURE_SIZE - f Ljava/lang/Thread; gameThread gameThread - f Ljava/util/concurrent/ConcurrentLinkedQueue; recordingQueue recordingQueue - f Ljava/lang/Thread; renderThread renderThread - f F DEFAULTALPHACUTOFF DEFAULTALPHACUTOFF - f Lnet/minecraft/class_289; RENDER_THREAD_TESSELATOR RENDER_THREAD_TESSELATOR - f I MINIMUM_ATLAS_TEXTURE_SIZE MINIMUM_ATLAS_TEXTURE_SIZE - f Lorg/apache/logging/log4j/Logger; LOGGER LOGGER - f Z isReplayingQueue isReplayingQueue - f Z isInInit isInInit -c net/minecraft/class_2571 net/minecraft/block/WoodButtonBlock -c net/minecraft/class_2573 net/minecraft/tileentity/BannerTileEntity - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_1799; method_10907 getItem - m (Lnet/minecraft/class_1799;)Lnet/minecraft/class_2499; method_24281 getPatternData - m (Lnet/minecraft/class_1799;)I method_10910 getPatterns - m (Lnet/minecraft/class_2680;)Lnet/minecraft/class_2680; method_10906 func_211121_b - m (Lnet/minecraft/class_2561;)V method_16842 setName - m (Lnet/minecraft/class_1799;Lnet/minecraft/class_1767;)V method_10913 loadFromItemStack - m (Lnet/minecraft/class_1767;Lnet/minecraft/class_2499;)Ljava/util/List; method_24280 getPatternColorData - m ()Ljava/util/List; method_10911 getPatternList - m (Ljava/util/function/Supplier;)Lnet/minecraft/class_1767; method_10908 getBaseColor - m (Lnet/minecraft/class_1799;)V method_10905 removeBannerData - f Lnet/minecraft/class_2499; field_11773 patterns - f Lnet/minecraft/class_1767; field_11774 baseColor - f Z field_11770 patternDataSet - f Ljava/util/List; field_11769 patternList - f Lnet/minecraft/class_2561; field_11772 name -c net/minecraft/class_2609 net/minecraft/tileentity/AbstractFurnaceTileEntity - m (Ljava/util/List;Lnet/minecraft/class_1937;Lnet/minecraft/class_243;Lit/unimi/dsi/fastutil/objects/Object2IntMap$Entry;Lnet/minecraft/class_1860;)V method_17761 func_235642_a_ - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_243;IF)V method_17760 splitAndSpawnExperience - m (Lnet/minecraft/class_2487;Lnet/minecraft/class_2960;Ljava/lang/Integer;)V method_24431 func_235643_a_ - m (Lnet/minecraft/class_2609;)I method_17483 func_214010_c - m (Lnet/minecraft/class_1799;)Z method_11195 isFuel - m (Lnet/minecraft/class_2609;)I method_17485 func_214011_d - m (Lnet/minecraft/class_2609;I)I method_17486 func_213998_d - m (Lnet/minecraft/class_1937;Lnet/minecraft/class_243;)Ljava/util/List; method_27354 grantStoredRecipeExperience - m (Ljava/util/Map;Lnet/minecraft/class_3494;I)V method_11194 addItemTagBurnTime - m (Lnet/minecraft/class_2609;)I method_17479 func_214002_a - m (Lnet/minecraft/class_1860;)V method_11203 smelt - m (Lnet/minecraft/class_2609;)I method_17481 func_214000_b - m (Lnet/minecraft/class_1860;)Z method_11192 canSmelt - m (Lnet/minecraft/class_1792;)Z method_26395 isNonFlammable - m ()Ljava/util/Map; method_11196 getBurnTimes - m ()Z method_11201 isBurning - m (Lnet/minecraft/class_2609;I)I method_17484 func_214009_c - m (Lnet/minecraft/class_2609;I)I method_17482 func_213999_b - m (Lnet/minecraft/class_1657;)V method_17763 unlockRecipes - m (Lnet/minecraft/class_2609;I)I method_17480 func_213994_a - m ()I method_17029 getCookTime - m (Ljava/util/Map;Lnet/minecraft/class_1935;I)V method_11202 addItemBurnTime - m (Lnet/minecraft/class_1799;)I method_11200 getBurnTime - f [I field_11987 SLOTS_UP - f [I field_11982 SLOTS_DOWN - f I field_11981 burnTime - f I field_11980 recipesUsed - f [I field_11983 SLOTS_HORIZONTAL - f Lnet/minecraft/class_3913; field_17374 furnaceData - f Lnet/minecraft/class_3956; field_17582 recipeType - f Lnet/minecraft/class_2371; field_11984 items - f Lit/unimi/dsi/fastutil/objects/Object2IntOpenHashMap; field_11986 recipes - f I field_11989 cookTime - f I field_11988 cookTimeTotal -c net/minecraft/class_2609$1 net/minecraft/tileentity/AbstractFurnaceTileEntity$1 - f Lnet/minecraft/class_2609; field_17375 field_221480_a -c net/minecraft/class_3719 net/minecraft/tileentity/BarrelTileEntity - m (Lnet/minecraft/class_2680;Lnet/minecraft/class_3414;)V method_17764 playSound - m ()V method_20362 barrelTick - m (Lnet/minecraft/class_2680;Z)V method_18318 setOpenProperty - m ()V method_20363 scheduleTick - f Lnet/minecraft/class_2371; field_16410 barrelContents - f I field_17583 numPlayersUsing -c net/minecraft/class_2582 net/minecraft/tileentity/BannerPattern - m ()Ljava/lang/String; method_10945 getHashname - m ()[Lnet/minecraft/class_2582; values values - m (Lnet/minecraft/class_2582;)Z method_27848 func_235649_b_ - m (Ljava/lang/String;)Lnet/minecraft/class_2582; method_10946 byHash - m ()Ljava/lang/String; method_10947 getFileName - m (Lnet/minecraft/class_2582;)Ljava/lang/String; method_16374 func_222479_a - m (Z)Lnet/minecraft/class_2960; method_22536 getTextureLocation - m (Ljava/lang/String;)Lnet/minecraft/class_2582; valueOf valueOf - f Lnet/minecraft/class_2582; field_11837 STRIPE_LEFT - f Lnet/minecraft/class_2582; field_11810 STRIPE_BOTTOM - f I field_11846 BANNER_PATTERNS_COUNT - f Lnet/minecraft/class_2582; field_11836 HALF_HORIZONTAL_MIRROR - f Lnet/minecraft/class_2582; field_11814 STRIPE_SMALL - f Lnet/minecraft/class_2582; field_11843 HALF_HORIZONTAL - f Lnet/minecraft/class_2582; field_11807 STRIPE_DOWNRIGHT - f Lnet/minecraft/class_2582; field_11819 STRIPE_CENTER - f Lnet/minecraft/class_2582; field_11809 BRICKS - f Lnet/minecraft/class_2582; field_11822 TRIANGLES_BOTTOM - f Lnet/minecraft/class_2582; field_11827 GRADIENT - f Lnet/minecraft/class_2582; field_11811 TRIANGLE_BOTTOM - f Z field_24419 hasPatternItem - f Lnet/minecraft/class_2582; field_11840 BORDER - f Lnet/minecraft/class_2582; field_23882 PIGLIN - f Lnet/minecraft/class_2582; field_11831 SQUARE_TOP_LEFT - f Lnet/minecraft/class_2582; field_11826 CIRCLE_MIDDLE - f I field_18283 PATTERN_ITEM_INDEX - f Lnet/minecraft/class_2582; field_11812 FLOWER - f Lnet/minecraft/class_2582; field_11839 SQUARE_BOTTOM_LEFT - f Lnet/minecraft/class_2582; field_11817 DIAGONAL_LEFT_MIRROR - f Ljava/lang/String; field_11824 hashname - f Lnet/minecraft/class_2582; field_11823 CREEPER - f Lnet/minecraft/class_2582; field_11847 DIAGONAL_LEFT - f Lnet/minecraft/class_2582; field_11813 STRIPE_RIGHT - f [Lnet/minecraft/class_2582; field_11833 $VALUES - f Lnet/minecraft/class_2582; field_11829 STRIPE_TOP - f [Lnet/minecraft/class_2582; field_24418 BANNER_PATTERNS - f Lnet/minecraft/class_2582; field_11848 SQUARE_TOP_RIGHT - f Lnet/minecraft/class_2582; field_11821 RHOMBUS_MIDDLE - f Lnet/minecraft/class_2582; field_11844 CROSS - f Lnet/minecraft/class_2582; field_11818 HALF_VERTICAL_MIRROR - f Lnet/minecraft/class_2582; field_11820 STRIPE_DOWNLEFT - f Lnet/minecraft/class_2582; field_11828 HALF_VERTICAL - f Lnet/minecraft/class_2582; field_11838 STRIPE_MIDDLE - f Lnet/minecraft/class_2582; field_11815 TRIANGLES_TOP - f Ljava/lang/String; field_11808 fileName - f Lnet/minecraft/class_2582; field_11850 GRADIENT_UP - f Lnet/minecraft/class_2582; field_11849 TRIANGLE_TOP - f Lnet/minecraft/class_2582; field_11816 CURLY_BORDER - f Lnet/minecraft/class_2582; field_11830 STRAIGHT_CROSS - f I field_24417 BANNERS_WITH_ITEMS - f Lnet/minecraft/class_2582; field_11825 MOJANG - f Lnet/minecraft/class_2582; field_11806 SQUARE_BOTTOM_RIGHT - f Lnet/minecraft/class_2582; field_11842 DIAGONAL_RIGHT_MIRROR - f Lnet/minecraft/class_2582; field_11845 SKULL - f Lnet/minecraft/class_2582; field_11834 BASE - f Lnet/minecraft/class_2582; field_11835 DIAGONAL_RIGHT - f Lnet/minecraft/class_2582; field_18689 GLOBE -c net/minecraft/class_2582$class_3750 net/minecraft/tileentity/BannerPattern$Builder - m (Lnet/minecraft/class_2582;Lnet/minecraft/class_1767;)Lnet/minecraft/class_2582$class_3750; method_16376 setPatternWithColor - m ()Lnet/minecraft/class_2499; method_16375 buildNBT - f Ljava/util/List; field_16548 patternColors -c afd net/minecraft/util/LowerStringMap -c det net/minecraft/client/util/IDataHolder \ No newline at end of file diff --git a/volderyarn/volderyarn.jar b/volderyarn/volderyarn.jar index 309724502af68466de361ed4f6c4d47ca8e6b3f5..c868ffd679ace422c7f51d2c9497bc9374b6ca2f 100644 GIT binary patch literal 598338 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�^Lh#z)RIB`}Vi;A}2wCA>`$1amy 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 z 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

L~z$r)-n@&CMCOLH5y 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↱p?LnFu#Hll8cwSx9}+eS4mwZRL<`uJSb!E?g(PH=3L~ zH)|-Io2^!bTM=HK-=20mA3z^X3E}3tZ`o3|wI0wD{MF0$AJM=)qV5{o_JKHuOMBa; zdz!m{`~B_n^0V`Gz&g@kjL8)eVNhI6s=*)UceIIRPp7duEHNTok!qR5^2d62czRs# z5g1e1m8jNJlcAAK(X_=YCMtdbcX{?xIFHraT(YU32GCQOlWmI86PKX(Vsn^}A7*PC zR*E0J1ix$lx6EVh$S%I?y-$t^=m6Ra%|4fx44*i@x-BnVVwD8bizU@vsUeXQW(Gr> zQ9iHf6fsC_(L*ho#F0oAA;w_ceb=n$ZIZY(y83wT6APc1>eH;Pfe!kL_b))SKmj}7 z6pkn#9!^aKnmZX@!tm}PxjXlXgilm;e{K&HAW5r-bDwDVgjJh!ONGn}t*YI*PdMOW ztGetKu}f}IS1u1OQ~D`axH=hfgQg&G%S83ZX**~44ZeuyGO*nz;7>OsTS>#q0l<*3 z28YhpKpC?#tYxAzg(oDVlSzKQ2>aD<>qGstzg_#S&c`pfA!EBP2ttD49I!w2*O ztn7{;Id5!^1wqhKHgn=3MNSY|&JjH*1yEJp7n=dlNTo`P^Z5KqDAK^2821uDOBosh zRU4gD1Q;0tonVmm^>F6LP0CAjGlRo z3566j%lZfVTOv&nX=VXwQ7y|_*(wb_00+o2#2T~fh#2fZ41&{YRj5-lAX~vq4rzw- zaf0)a>bA)5ErnJ%pRGO=Zj!VRS1yRI)@8nH2S^dnRCk4dsGm4gdG(NdLkn8<`g=1K z4iR3SLV*uFRkrufhF5gAsju!f+qIkW`0yMZ1HPz=Q*eSd$FClrj$S&ydfoi@hq~Ub zm%HcZ28mu$Jv_FSr37;c8qh-nHAas^gkB~ZYSX)|sp5q_&GYg!#arkuxA4fqiH<1MlvdXBTy82QT zK7nS*AC61D(# zLR$4_F(4YU+%Z2@=^jpgW$2@@As{D7h+1~MO)!OHpd;MjddLU_Fv1Mk;FN#E*vnC~;zG@?W6R##(_g9yTn@ zyI?lAaF=u};*qnU0V4p3ggYPVo;VVki7sr)RD7uGPf+_GYo2HPdA_e+&+i5^81=;w ztKErp6z&usy%%Q@s;eT2EIO;7AL>JUP~+#?*W$W$Pk*K$y5nCe z7S4QevE^!Yy}RG9SAN3G3r}QJQ$U%rPN60aSMa5P59??RX*hsVi~9&FEqx{h%j@f# zs3!&V8Mmw#nNz)WNY7M=0>qp|a=&i24eNbq7P8LLWMUK~qUx^WKty#U;Kg)dSba&C0lwf(_IG_-AZnoSKXwk*`ZLTsQQw%Q~Q zxs2bR^7%CTh3ldS2@MYWCL3iYP0#VsO<{XA;#4$8W~LUOH~ZyrJ$2>7MH=4@94WNr zJU)FMv(B9Q8u3U)(4;2M_<|JaLa5&_KQvLxH_^|$uP3%`qc7Uv_093>X}5XYT&)h9 zt2;*|VGZ?%kG@gf)tm5N|FWIG3sgk~X>4Cm#7TR)nvO4v*`Wc4lRjH5&2-Cb`hpf) zwWS3=m^Qs92~UYGj-gV?-#3TNht0ODQ4>vX+)3_MzqcqHeP!Rn=}06ry9<9W+BU<7 zZSzIFa*!;B>7*p$UKmy_=aMW1k`0T~Yv}feRz|wM zPKpXQ36{ug%v*FA_LLv!wp-Ha!CKZn^@oOzS2G9|?zcSS@m5ZV+#K+v%7!H{EGuu# zU?Fl`P*Q!&$|+W~>uy+NCf3w_YeNWNb6ROpfO2@i74&TK1wrFS-0~nv9r{9nP36#4 znVjLy>>gha7@7Jur|ZrAL)vUWm4a+mUq5I})KO$WWt7vKyQ#5+hC#U9+6=h7-X zg%1c(A7NN}=8(D}D6Kw?HiIpo>S2}98pF(#)!L8D?cfKv;_`|WVM1`@7 z!*Km0tlP$8=}oXGtXti8Giw{9rkTY6)QPIWMaQzvSp-9}PRe~|hTQk&&-H%0{3|Q^ zxe-y-Qi zBnIu%v$bNqRneg5yjph51EuHm-Xl-9-6nEECcu*W2gCJRJ0ql|{%IsuP;dw^9>j_g z{nqE-Y)`iU4J;H?-6@vk^SK^xM|W5*zK;Il^)_UXK8xtj?%3}GZLA^A~NuzSuduR?I|6q264+& zRTthiDq6bD(kxYYVk%jaDB6df%E-4myJtT>Y__ZT>QaMurY&0tKU@4cS7a?d!(jl8 z1GG`t|DJ4i!+pLI0LpY#B+6#&&->+vrb_1&HG9zj-v-tz1Wx}X*|c9y1rjQUTaYb# z#A$qgd|tY5s`LGB^SJD_x3i$WzfA;6+YZ2ewpkL+efV#D4}dC&bsq5R>~r!J`!#q(a(=z5Sy?aK|$G{~rjJRYy0o)ijY z3?@$xHpzt53?}Sxo(PclxeL8I)|uNgU(@l|$de^=g4wV2@u$bnt;sokK6tG~$5{V+ z=XgePblr6yJp6sR-K_Atw6W;=x)2BJliPpvpPXlMQH;V+v!_jk&I`@B3LXou<3-AT zk^M)dha*Czz!yzBzT_?{-!tRgW*5vpho^1pQ$zt<_%ffTA0%&s=!E1$Hjuy@c+XtI z_#^3$;pOI-{YWityUj^n6fxtXfUp=pNg`BqimmIgnZgtNo89)WH=l>!(+9*uVZb;0 zm1o1v%;jQ)XvB!_N+%%_Kk%5^$?%-@((d_pn(OB|nhVyP_jSE}zxmu0`zsar1Rr=w zDK9sR4=n)=JXg?;=Y~!(#pc%`JUcw;AIhwcln)9|2pRfZ_If)~*@m+#vRDW{wu=t( zx){tm!ymaV6ynS5o7c^;1Q{+8CsP3(8XpNe9BgMB9f*%AW9is$lfqWc!S?qsSSR*dHJ~BKW*2C zxn&%+f*$Wy)0A=+fiTeL44GB=Q7dT2X|+0&g|B;kGmJkKzs>s)AtuOZDhOTIeW26@ z<3Nsr*7+=c=A%!h)g!H-aGK-$)!oFH7hnxlhB&X5-vn!@l_$8V?x(QMk`Y9;@@%kr zDSp-(35!-;%*+3FP^gXQj%rT+ zg@ZC3Q7UAWa@)r14&->3tRo?qg+O=PmLf^lkr2#k{NCmgAOb%GNQIClq{62pBg+gz zLehoRq{~S-E5-ZIB~GMsF0hzTDGnn3hqq_xY8+R3o%=i3%nH39hZW7MnL`g8pnJYy z7Ct61klP{VOG0-uzy3;gY?l&CmO}T;Vj8eYDwRs5s#2*6b|L}^AKWf>Il}hZ-#azj zc`#7t0CKlcn^=u%gu0Z(!*CM71+x)X{MQ}cxZ@N9S#7c?itPOan(X0#$KC21n+&@h zx#DHC<`Ht`MvoF_fST=lZbK6sK6c%)XoTdX%3V5!z+gCbFpjl4_-*qA3SbBgdTk$> z{bEv+9Y{?8o;1rt4{OW_0&;7emMTixP|P8u%U@0ijdbLiFFbJM4nuj1k*pLO(5Kv~5IMIaOC72QvY_Fd~+6$8Q z=w_A2Byjptj3INN6zNSMB#u1KsM?LKuFWq4O!f0*36GT}203HMum6ddK0~{4$d`Qf zIyC*BN7!0{)TT@i5;}-| z_zT_>DV621+ABpMYmT<5D`R&a(NH)k9xKqr9)36Z_HeZ51v7L_!7&z8&6Nc+iQ0oixvgw?zs-7#cr1S}4k$7UmCI#MG`z^qN3BM$;^hB&UId zrj}-*{W|P(JF3LxpXFjU8S=Ps;+Mq@{TPQA;FN(p8jOgvvSOqwC`AcwiUS8Iv<9_B zffO*AaZ^q_MuV>EXuMok z$rhX@_G%aM8_AmcxgNw}zaYaIZ_^j{uL9-TmlTDg4Qc>)5osP24bu>Ku9)g`W*aF! z&S&GB{F^O$Z{=MNsan3mMy<%+(o(EA$pjT}RkJn|yqj`IV=x?QeWV*Y(m=|2MY~Rj zNJ@ty1t?!=l<z3F6Kl7rOBBy8|kyYLQfHjoj4GzIiQ?+QWxCg+V9b4aWKi3Q4j z^f5N{?W1to9_I`IxDeWA93YAyltf}PRd@`v)$b!&YMAeV%E+8t&F>L~;JSw6Y?3CB zfV{^lbYxm(X@ecXqO*>r`Uun4q1CvCq?Q8GkhRWucUwZ%Q`xtzZCM9CR8ERm41~qN8lXWSNMnNp8$GTej*I0OJBScuvu|u} zigiq2G+V+f8Rnq=7QOl)OBTaATPEgCQw|gG(ADE6$}o`=2^CP=&~Cc5XsviFc~x`~ zPp({^x9_za*3bm*#YoQ3)N+Ph$Mq7X&W9ij=Oe2`5pi2lK}Q%B)u|tu#?28+IQy7I z6}-ht#udEX*a+I$2qccQ1aV8+BX|Z6qzPjZiWp;MAI1wO=;1Ny{Ye&Cr9wKXYRqAN z<^`;dUx2K$e6%^p0#Z$kmcSJBdZ6}jx(_Po+3W~~X%|*$l(hPK(~k(-0TC99h=z#J zFd{p6<@UHmDH`n=;(R{2*5nS z4b0Y^h4m9WmZdR5_aB$#eE)azzmr+syNEI1;1KA0iP9 zp-S~kI0y_Sn+^xAXxTbuj9$dk7RS&L#N&~!7Ess3`l78qRHrpsCe0E!I5En`NwC0K zh+4P(-JRPATydb3+b0VP9NdUyMG`Cnuq2Ch2M7f7S}~lBlMF&CC5#Tk!6-+@Tv9l$tV8;}U62iRE)cX?|-q-O0%l&oW zz-ElFK^WBVpg54sI3lNXEs~r1mQXeaW6Bud6ViG=0}6?3V8{Y?x@YjZBAD5s2NrBpqS9{58IS}tQHn6I$w^c4X!9D)aYuvGk%)=~6Gnr} zEwaMLAwdS{a#&N2LkUPa4=6R7*=Px?uSVMbSdS(KY&Ep2H=wx9wvj(4LW$A1e0fWP zA#6RZ1gS#^T4!VHJhdAO-Zdq)1M^F`EmcZ;?!K(< zcWQq;h&a^ld}b4j2tgF+X{5df-ThD@l!8NrHqT^ZDQ;=pbwx&3*OzD4CpS0Qhr{da z=^SBBE)OPs|=N*TqrE39OG?(7_&x5bB!y-f9rgKo6$a@73Hv-@8>ngFB8 zMrrpG+yCWv4>6@?4l!XxRGsC&c6Q*sh{Eq!x&CdSxf8^pkpiZqs-lE{@pynURanQc z)s~aVS&azC1CKa4&hlS9Js@xu`Q;lA*srR7uo5C>8zXOI;qQ0e6GU-``@7&TGEn$% z2MXGgV1t6-$&jiX;JY%&g-@=B7Bh|}ApVt;FjFah@LOMy4D1dpqYQgfQjQPE`N90_ zDV>6FP~JR!@zS|Hsu73gt!Upp#6ZHQT@q&x@sQAAAW8NZ4+-CM*#fNbkOS!_ z)&}`&y1T}-bLAgO-2y6eq1$ zFCI48jmzj@ax8phoj$pEMs;2qAptHtx@RJH?tTFlJ=bAAp^6;*#DE2>cz|bLtt0v_ zk{5w^;6HnTw=dHrAQaQTdWF4oyqG=|P)LrM0j|_`|rJvY3ow!$~0$iczfa0u(Hm(^o=!uSg zqr$j`UYzyQ%!g4g$91DY$}p78BNN1cnpk!)nmtA@hK4R9%7PvX;zB~F3f0+j0CHnH zw=-tS;UcvzDCXtPW^nffkU5e6KW@H;#17Un`x?SpX~=vq@hzj-Lo|t@Z;kTC`xFBS zxsQs*DHMI{XJj;F-%5k^+X#ERSP6S1^0^my9bK~6IGWZuT^ zfbyjXbKqYTZT-#OQw0ElcrPh}HF`J!xzi;lHY4@f>(u3rO;zTh$-jB?`to8pYvGs< zl7mn++LZ_zlwyEjK(7-rJB(+PFOUq}1PpK1>n#NoXn}^sf24o{KdPkJ zKPjT0+RSDbmuF`u*8yoFKyx|zzOlxUDj9sbXe8-tG$4HaXC!GIiqV{ZXN_F*f z#mX|eP^>K<2}TpqPcsD)5RhbxXh4{t+#Gko!YHJBJ!Llu&fcOD-dl>mI3uaDaWo)< zfI6G_4-c@Tb~s1&x=d%zc9fkIv>M#Frv(KqcsA*2!9WX|ZRcar8iCV+wq?Hqk(CHb z1$vcDI)G3xCIW%p_IXgKE;&YwI-_wgn#dkvMgv|$tty>;lQIG#q=KbZG(!OcyEi95 zVm5;f_5aSr6!wth zl>4`T2Z$jc%O0cUw}yb$7vj5C3SC>i7&&e4k@i32%i^Z_?QBuLzC<6b@WFMhUIq?2 zvz4Z+;(6)C7R6wDHOt?M#iwHaTF1;r5seaV3*Rrx*TuNFD93rL=Ku$3{ zfvrgPm;wrJ>J`hTDWD)EL4|b*PC2BS7(I3d&QV*nw4ypB1YW{`2{wlJn1K&KjIDok zad~r+o!_2(`VTC?MTC(i)sRvBpwY>vtJ}Y_n~TfaI1nyIH%Hf(7Z=&}`Ps+Y?BtKb z4;LrLk-*voK0d!mfEJ{IzBoC(jXp`BhgItADH;$ymz2`It1xqEUI#Ti>74?2QpA;0 z_tygeOlZ#A8k^C0!}|<|U*57jv82Y!bjK{jk}?-tI*DQCpP-v#r7c4T?)eM&;b;HlB z<3!gx!Ah{$Bgs~ttK?)mbesCrpZfjOIdQsIFNmo&c;L4?ID{?mc{0EVDuzVsZ96TN z`?qGYFXdu&Th3pcB`i<(lJSl}~5OEv-SxUacWY zQB;-6(<^ZFw$S%2lTnDK?J^CX3=(xGgNI0g(i=mJdRyer(TfIss7hveG$8caDwW-b z$wR_68$+#k2fu6Hd-i{=^Ki(t6X0F5Q65(f;k?seqnAnw1lE}WYf&~@1vYFZLkDtg$YA6!V;AbK>ZQ!`dDNM{qoY2uPy$$0TOqkz2069k zl~^L)v}^>(*hyy1*Nk>$HhwtAo-I>Xw+*G(gDe?~90fr$o=*Zx(jA)3PhBh)A zD!TTi4z_G-HJnecHibYXj5gblrp?h)zH&8XZOdjK7tb*q&teI2+U~uU6oIP?!QkOr z6;3}~E{oN&t0C&SI?&o`8D{dfQ9t#V z^c8uo&XUgtY142~OonpaRqYm!7YRMU`3`;#zU` zhjQ{}Gm9<%9ZYeD={jC82GdFb{#fLbHKtv4bAq(t=<(BZHnHDt#`&z+{4Trimk$qS z&)sdbAgFF(X;HWMYqJmCwP?q<1K+ukT1O5Rlg%!~CK`Wv_7>GbCGD;I+r&?W?t4gvS&W-Ko)1s+TIAvz% zAM@qmBH$m#6o~^r(>hVYbY!SBU(SqT{xP5X>~E&D7(lVct)lbCV)hcWxG6eF`(S3I zo$FC^%yqYz#vTufGHmp~ML4LrM3bWHlJyLNv+@ zC2Vw`uP$HBfpAegto}4=RvaMKE#UR^@hJh4Pzz~=d}MoM+oxeih=oZ-3|k<3batQSj6HaMhhrAPC;Kax>wWH_$hXHE5OEIFN()#n&{ElDSuH_Bn-~Z_T9u2X*W18l5~r8t*MH5#?J5>pv7p{>;zAjZ6&uxa zJe<|D**e)}bqd%i->hsc<|vs&Wfc#wtOR)^h_Ua=Z?zH-31NV=3rgY7EYNiTQR z7usM&i$0Cl7mVRs{+X}*IWW0SVVRFcuoji3dGu5)SIa>ILX#c?LW*4ti1ryI)>UeY zNhFwtVA6X_Ooc)z1}w9ZNPdO zz|uBGjy!BNfc3uWTs+>1CV8=Lr^W)AY~4j|&9IV{w(%xn+?dC&Mc)@=;uMp<4{Y>k zAB|O?eDW~qD(%R0_fjlUWTM?mk1VdSu#EmlBYRf1F^TM%jK($Yl~NEng0>^z$PrM& zrW3f{{=P*?JKW3f9Y00rmpVMgh-TEjNWpy>|Wip=5?$cH05dXU^cS&sl!Vj0ne`Po4cXib{@JZI6 zjxIm{ak~Yl>yNi5|92B#hdd+Hhkc zpuRxcltJ(8>|vX+1QLWm00cll_OkT?{fZBdJen=3bGQEN^Q@*qB*AJ~ZPrwDjXiVG zc#`j_P%I)_67Y6&SfQ_h^ByVk2@b#*fSnqTJ$WfS?0}l7T>IGT^mqPT{mAQ!Z27SA zFhpZ5?5m%7{af~v2%v(^(~}PX1dUg&EJ~3oFT>+)ku488ZK62bN~qy>LXC^yUZI7z zkJ)PdUqumd^HL~;JtIoWmh-Xq~&%51BFKv zYmcFS_983Bm+@mJ!`UN^#o&%{yMXgw`OcsU56Wf*k;+Nfk80u;RBv&d^l&$=RJPDz z2p!R0T(@4pPCJpz?ss0mUO$n}h-O-x_IP#q6xOI5j~YAs5lToe^I)yhDyt8husdmN zTuQ}`GhsRB0##aLOpMjrvjI7(g~-BWc25S3F(0QiRStM(&%(XpZ_+?|?A5xrUKPT?Bsdn2kPX zR)xtx^-rna&}?s3wlcSB@Ij$K8=d=;hx zUx6y>s)!PVduYjCIr~BTVng9jBj9J>snc1?BAS)d_2C316%*y3o-gvquSo?CYpP^c zQfG-hoPwb>i6jag4TpW&Dx%7qFcl#NRI~5Y39*-5(UZbLix*85U6)Pgb+Dh5W%iIG z-AfU3edR#NYZ~pF#o%t-?siV4&vrK1;v~FG(B5R86KE=Vdxj+gwC6?o1oVxfU*>dv zm-=*^)r%Do?KEibYY_&kH+lb|SkVX9CWO zR*?@5zC$?J`R08cyb$iJw<$CiFE3CmA#T~#Y=G&%4~+lPy*bdB=FZLgtXP`M63zL_ zo>c~QwZ6>jr|WFK+bAJ4n)Y+CD!!HZA&h!Bt%IVzMh;U^)Ft0gfpPnPX^c%zS9TKr zPee+XwBP8Ws_6;LTE2Y))&-O8XPyybW+`i+$cgMSY$2|Z7#m!~Aw(Od%RD36A89gR z?SzQp{vu~A5Nz6s#*fu1_lAyoNjwT}qZ>BpUV4aRk#a<_Hg110JXPR4U-S}#IA%N` z0z=*f2bX@F5PZ?o2Nd<66be6QD8Cn$%i+ylk4lN zFW&HRaPv;X&88pEPp-Y8qu}iNYB~iJ&fc9|zdiRJA#EypdBY{c%r|@3qJNrv6$4=@@-Y-i-Z0PvCptb{S1qC5POKo z$qytOByDYwcU3vpLtIl;q=fs;-Rj?w4;PFNP(I34GBE(sjTpx4>8ROsS~w4Y*FJf8 zlF2PdSfVpm&FertZFWp6uKtnR`3l|6kNbPqaF7SCedgsOyv(!J6mFs_=$F zH#U-x8f4IlCANd(G_3;FAoA6kQzxM(6TsWb%PX4rrUU>`>Ysj~!DQ&2N})GI*bs|3 zV<`uvL$evsJ{Sa2Q$G!OA-jW$HSIsmYtAxe4i8AmQ7vf^H7S~nNNFk^5#t10rRpFe zzE|=zU$-~%4Bhv1rnzYU=)V|)to0hxmQ^eh(+}Yexrhcb3`2SDqu9Bzi z`Q(gYZ8KH_B=I_6Xd9}o4&@u^F}oA9)dy4WSr&R<726Y3@x69Wkz*5U0=UC&2ynHW zK31D@p4Zg%PWGV7{#JB}_6ABWO2*61bX2xUka&M8@%kl!KzNQA^jE`F^efsD?!)ET z58{UPNS@a(tKdG*){l8jeBT%xbX!AtT)2~wPn=9K^D>nv%#e@~-%bNaw5BgJiVT2< z#oF8e8qNR2Ty&(+deL&(h*KHQvd^hZ_89LO$o3eM5a>T|eAxBtfE2;Ulk1y5yx~+Z zo!s0^KD_mYjDqRS$%i+`fb!tt@{eNxWpMRjHhp*X=@JTcyIF`G%R06@)+A*1W^Bw% z%N^IO%5To){P2-lhPx7*`$}xNrydpy_hzr+ix)9oxRSHdeymdbcAsqRo(>5Ii{#y^Eb&Bok%A9BQ>hBt}JLR5b-6?%I9$)JXUo9vxdVOp+ z7E=RZ7Tx<3N#7umRv?)iu$PIl!|xuD+zJ`f0pk=+i6DolzdqTo7Fk)Ikn@9*s2Q{Q z3?v9KWGZ~2FS^ZEc%v<{MYf6hv!c5mP8=-o_jF$QN@VCM7RzFJRKj@@3eQB71Rp_C z(WkmVvhomecVl2fM>}an1Ro%mA?l^in4)@GBP9e5hNrVrGN43&DxCcy14bB-&Hh7P zqm?8dk+bWSumb+c?8NC9@T;EvadUs4*HD(>w9~_+jRJ`{ou_BGRYHK{T3xL{Ll<)| zxX8?RQ$6`WB}rR^?%of{xT_E62M0;qy+h4wLe>DD8q#<{h7F`AVNz)f0k~^Ud*7py z4LHQs)sycBP8%zOj8YP}oCF@nb|%-B@RPh%nboKH;oCkkQu};d^kM~`#Z-p9ItA@X z->p#aknFvPLgB?5P&d+CQT>$@-}kUsq3)t#3;O7C;3F5+qvNRlKA#sGkE2DzJjwt; zjm=|(4ipDHLdHcb_Wa7JnFdKH;ymmK!3}jij}U7SOZWS$;hK|6^(%9bU{+IXNV*L*$Z=q7FDf_2d&nQ$3E)5UF!PIUXj79r5!asp}f>7tP zI|Az4$a`gU0s`A99o7I%R~VX9)R47dFrU22h_e>TY$!UILX+J*YFHv%(!!D5m=Wg~ zL!Y^13rNmSfHwRM$Omd3Y{Vl(iHoYDel3AlMJyAe!O|9toD3215Fyx3bTO=$1>ZM| zr;g!>WU@YqS+q+)dIbTdk9q#|rK-ww`%mPgMumy{a6Tw_PTQ{ zpq2h0_eH0&XrL(TBb7wor--5unz9n}FQAjlW445%=PnvC?`<}ah`u|xcQ(=9eahK^ zfM*nO`W90m_gnm?{NZ~mottYCmxV{U4rW^EWviSHGSvTcQ&fffd{>+wS!@w{KAGxR zw3j_97(+{(vY0zRnmFR4oo>o9_ej!=qAsn>ng6fp>4nITTw_pC<2&dhY2z~W+&%3e zTf?Lw*-xoLFF)n9D4+BC-YWHc)O|4Jdmjv%s;v6iAz*#%wJ?bbkEBt1EeutLgpLK% z$>rzs>x;?s9n^=s`E-3g`*<~-+)S=MOm|*S@av~nUuT!+AKu=)BQ8vZXknC4%d5}-_p;LD2qkzu~VRR3xHgEIc?*xfqGwU)hcl zTX(gKLVo4*@?~BZcOY+Fb-xqdUw_gcQV^ql0_rrkObF>ckuy-frp}ly3us0` zEiPvIAt1nrTA0#wT|j`+T?tV!zXSWfH$|s_kF)r2eYR9l3jstZ0h3_I#U|qBG_;x5 z85DO_Iq}fvN$MdJ)6mmydR-o_dzr9($NlKo<9;fGr#gRFX6|zai;iXGQx8^7`_@yG z*OjSXxom>=#0e5#_D?<7KlN+P1t|d|on=JgcPnrLcH>R;@X(e~yS2EZ@2d`1Ce+B` z!^`~moF8gsz?6{tm^D6GUIYVIYezd+~QVck|aI~gLoR?afIL7XB$ zG5bbao8Fg;sx$}l+u=tUJT{eEChL6RT(g%({#;mvI}hV#$~gviWwm~!f2kyRZs#E% zg5bE^0g(fAV2*S^RQui3X(t!9RBa+%M>paHYM6w>B&T(;AWoF_OChJ=t1c4{qvzri z=D9Z>2?;Yi*^MJOqHM?d8)H;&<{&0pxQNgpo{q3YaUtC_?tG5~7Hz^EE9&c_X@PNi zpj(aNUN+TjwfI&XE=nf(R&NVI>20C7mxlXNmG=j2qjX;ehVZ*X(GFq{add}x0ZNr@ zMZotV+w+PgM2@hGsJK2{`j8e*-nvfu?;&D#G~OJG%_#X}n0y zJT5jq6fRm9Wp1(Zn>u@_mVOoXmGE$ADUq7IJC~W4`U`7+smQ3S zo2Cv=mmW5j8rR<4mP$oFwS{=Bt?zl&kdC@IO|uB-(d;0PMG3U1Y4M-jaq%C@hG+I6?= zr|C}3uHj*93bJd;8K%26LbzDJ+GwMucr{-YukN$e+HgT-s-~^l>S@@p)vMBnJN=2_ z$F1QbJp3P9h*@)Quc?LX_~Lf!v9cd;4;|Z&zaG0V20gRebg`9N)eKv}U+KIs|24{# z_9lDz=Yf|ZZL;ERG9<4F);BeyjM0%ni-v!1+T+JSWUc<5s?{HC>(>Z={kr|Df?sd> z)~~S{Vf)v_jIjNyFe9*o9|7F4{vV;$EpxbRL!pnhwg=~()`ZV_t#{eSYE_J%1sEG# z&YbB{f@M`Nvhpx*v153vL#SQeXM<%cieFNeIQXPuq=G+vCM{5?&~Sr6!Ty{eyIY*L z9?0&&CnrrDUWmn}To+HK{KTs>^V8YmX8Ge|T|F0_=9|2n^lJ*CLs>TezFDn57x~XO zdh2J)yGDuN*I2?$c3+jv^SK#vbyjW0bQLu509|p52Z7eipR=;)3?GM3R99}SfQn~L(yEpID&wm3CXoft5@TW8 z9HTcwRX@DSp0c~g{8d>!JZN(i{*~WfUF!eRG#r#-8eCqzeS7Y%t>3Jte_sXp;%PnR z1z_!#6)IuH@)uOn2bz=Ux&hK;m>s@X(h9%-Lv&a_t ztpy4h6ibj{hY0I_LXpM#LyA_M8mZ#HtX`N!V2gw9#b+ayLS(5ln%VxHYt!S-$oO09 zfgY$S4t$v}A4YRhu_TSK+bNZ^YwGyjf;M_zTaE{1a>u4QgiiALO*XPkcpRtpq_ERRo1`*@ z4nv7DLKrO=@OA4uhD=#4krsFGs&iGttKi>6%W=Y>GnU>b*&ejWRz;!?SrzuD8vuDw z_8-mKqVKaO^cutX-Bg+ZO+?4de#2zPGvbR0jiD@_P-K1rP{)JV9y1E6<)^1Pcq;}Z z57NMKWHVM)yXG(O_Xx)e;gZ23m5wJWdi@4rpGrtt&VDW-7FgVs`S^4%`ae^LCoHxp zE}=+hpFk>_;#Ws3NG0LOQnAcPMZ2Pla#PH$Wg!Kezih8arY#*>w)zlDNr2OUpYGI?ZoJ50i!r*lQdou|Rb0 z+gnboV;tP`*%{yKq??yNf#PKxV`r;<8(X45*cxvK$xQe}iqKF#V z={l=VP0q*?q~D&`jGCQpmRoPp5CL!D#>m1a?fW$SYzU+vwU~^3)S+?Nm-6bBDcJ8$m7rovI%V^4K80E9=flL*b(~9 zJmh=)X4df96w+kPYJ=Mu7$>Wv1-?a}SRYEB!9@lUo&3QBhv(CLeOgxSK78q(14{^0 z=Te5V&CE;iMg2C=-{+Xu-tZX>5+LS z-7g2(?&f^z#*M9wdtJ=u`Epk}1NETiRsCbSscTS7aG~=8sDOi%j&Ci+YrK$#VasYW zHzYbtA2D>B5<+%57zxruHVF!EvR@z~%wtmUh&TV3lPeg{_MRMS#|V~^I;8=fjO+P; zyg+u@gKhil1(OmyAV=n!D?IxMVf6brHEBL_fljWE`0QQ%)kx0NrWoytTYLA zJ!j7ziV3RsV8uW3E!38^)0}akvE;WZtLG!ji6yru4P#hNQ&!tcizd)T>+VM@zYhC3 zxKviDUY^d*XYMm0iy^+d$et{Z3};aLXT3+YIuVflDKqAAa91t$3thx$gj)ur@eMN3 zSk=zT&Me^?zvkF!5I<^Xqs0QoNDbZxPKM}L2`Pw(6&xV(;8I{Qr~H^u#ZaknYgzb>`99@nV0 zcR`O3*(2;MB{ngux7i|Z)^Z>GhQ3x3JfJ7HXlKO1eVH{R+6GF4c}E$Se=6k(W(sMh zx!#Or>zTC;F!~5JN2@|&LK-CtX8KnfX=r~|XT{Q-aBKk809eT$Txl-v-+{WxvmLm& zfxF$Fh$AkKWP8;Sy`cB$qu!ygRYw??%&&I863$^k0|IiSDHzlx-#dx^QP1-Oe1gTY zo$M0+{*ari#bu{5Kp6h@>aPCvw60!F^&t8B_x#uE%c6oY*1vX~@)sM3!COwSv{TAq z8u30TvSVrOmwzdXU%RldCXr|o>72x2=0pmgty3O+uZra~ub;bPjLF(xRNrB!Y_onW zi*IO@_uXGp$W^ZlWO0|{Ax)m1{n)t~H0KSXI8<=6?zyNotGAnCs@I+`|DU*L*=`$0 zcFp@8+RUm6KJYkM$&Yk2$9CM7k~{5Q=+F}F@I)pxB;~~Y^%oC507@VLPOj!;5t$?k zKozP`RVY;132`5{Lj1(wnM|OT+H7VO2r8tbGM#yWHQ{#MfazG>C%MR!h zu9nLpuMV$D6TmAG9;#c4PugSqg_aADttWYTpo6Pew~7^eHEI~JLq8UbQ(qN_r^aot z7&j&Srp2O(23g1?dMdM*WSh}JRo!rY>ql0pwr`uli>lds`ZBdtm;xJxN!1DBb~&9q zjk_#f_q&u|Uuk4O-;xOc_DB}6^l{`hjaMujGZACa(J&g9WQ>dr5t+(6kYgI_A&O&( zDlFS>XFb4pov)j=CidyL9C829@BO=R&z>wF{LY&<(kArfcw)qLjJu1~ABVJjHy*(S zMB|sII=>o8j!2u>0U)YnjHg;ferOH0mC>w7hQZw*6R5~{mf9rExAzIvk?K*jA{j+7 zLy?B7<mDJWPMqvmb|V!01) zj<1rJ#=7sP^X1FpN*7BNDQgI*Q*_!k2cRN5P><5wvDdrps^U;?Qbyn}KFQ?6 zk*ND#oc1wNGlQOO!Hqa`AWcg`n#~ABd*0S)%BJaze$uYIRYn zD-1Q6Dyh+TMW=eq%}CSHwqOF-}o&@3P>2qBgL&*xO(4@&Jbd`S==kst2AlU zz<)|(g6sp~+5ehV*;BS-AsAx6xAAllq5d=8XX`F`O^^D3{0o7Zi(Qs~@20MYFXK&w zcaHTS?1mHgSHKV+t=l4lU-W78QajIFBe|NUGe(FH`c*aws50+PCkKAO@0$;oKJ+Ej ziYEOT&ya#FR8)4;JtbHQ` zPKTH^JsPaS#UdKmjTh8j5RrQkg=L3Qpg9^kBAO~t_(w-9- zd-hHcv-_Biu_L7HlndE~Z&}D`4|!yFVkFLZT5uY*7)61%A8>GgxI|yGIHzL*DxdH= z6GOy4_V4{c4>wJiiVP$~-fkdn6cj*jt5R5bi>1ceJs+Aq&O(-57I|GV=hKmAh_DJU zY1PE>Jh1oyezrC0U(nG?8;S#U7cu}pdhP}T2vhVnR2k!$PcC<((U*KI@?1m(;%3TJ zuj14-ho#8QBB~)5xqxs*wfnMo@58&a`n4XkYb-I2ddEqG6t4hadKa~A^Ww)Y-M*yF zATzEuQqwif-qP)n2oAV#UsRv6x@MKs$0suu&>j0SqKF^#h)Q0m{%Ziuy-zZ+KrH!M zugYTIIicL}97d4nHd&%sc2o!`t}WzIb1bPFoLX;yp$~j4xnjn>&3w7q1qlJ{C3T%N z0etU6s$yymWRyjipWstbR>wOpi0B84{F2Rzt_ybW+Fp}v0@H=tMZ39!kW1r5wLFw> z*;}&vT+X*|Y2JHY)#eSb|zf^6mKx>XBLEvTW z^1tt{d;j8P_V{SC(0uvmr}MGt*+tO`e8TxG@IJ=|2|VEJT)hG&eO% zuXi%YjZTEC;>~_TZC@pLMVT^y-k$CN9l;m+BOv8g0SJU>VV5k0Q_qC4q2Qe)9Tiy( z`4AfMZ0z1%?gH+F+kEfEtuk}qRqy$x;aw)qdgQ6A$>-y{&NttZTwYKL>tM<{%YC}3 znUA^`BJwBDqdE}Nr?#A!4#tCzMvaGniLkq(Ze^IY{Nh20tx(26us%jpfcnc5TE2CY z51dPMoE2N~4<=H|0gGcEM-I2=V?WmM@j`Rv!4iXg7?J0C87K7$y&qY=Eq*j=pM_1p zqR8Z2@(?z0QeDapM7OD`PWSwV5xZ=|?_1eMD1u=0S|uNU_bqM%4H(O*`j(Y>LzUmn zaL<)(0#?_Xfuo?W(p~aCm}ksd^ZtZBc6+Zk=|agVj6fG5!CSkAo!(FrDcyeFr}?L( z`X*UoBAdk_mvmND9#)o7B>o_Zq&LLahEokuEyaF-c4k7c6SC0W@5*KX4UX5y;wH0j z^LIyiHyS{SbmUI+J-@ys8jYQ!5mB9s6>NhMmFZMcZx49pe zE_cUGte(b4Ho(%%qMH_R2T$=W%i-qM2;5~Ql7_$#2X4$IthaGo836J@BAEfDn ztqR*dP}Ao2^Xf`vS{Qn}#B}tfLSt@BI=`=JSv4}CXYv?&Z~gP${}N-WJmxQ}Lh9*s z)IEjYx{TOk12!ONv2m}?D~@=F=~gc)dV0GEjhXmq%M7aXop68ZZBaK|@R!Y6q}JRa zt(yOI;>Q}$=jZnS|6vC~F3bR-H~Tuj`EtE5%BG7k=Fy4YTWRx7~3e1vjjBz7N;n4~IM#Au5uK$`8GLPtxPO@T`F9Z_E9TYEg3J6Cu)#VHEOP zHe4onqeY~v?SH7*}f|%j|8rh!AN4S zI&9d%$n#-0g7&}x?Ezn|{Usab3Ch`hTJb;Qr!3Fv=1=+eh}|X`#0d9O3RopOOH2^C z8C*Zvtq$zV&Cq%?h9#%v8O*>qrkXe!cF30gtfgy9PlxAcxlpg!=IEtsee8wGZJjU>(SlSN<5I_DotP z7)bOEMsn>(z*dQ3^3L8sXC+;ew{)4Y1kuthu7zD|9_iC=H}VV0=|7Ua04Vk&S-D}^ zEtm&Oe!sA>Qbn5BDV_)%c3#O?NG9u+Jc<3FPvrw7aHyhR`2z5e9Qg~Etu40N+M?FL zt?b-_R9Al0%NNaU$bFOW<+tUJG~Lhn@m`+fM#u!IOq1^ex_^|oJ@gKj zMNw{t&m-?mJlA&INkQT`gxQi+>_49z#8y<1CWKulWS&b%f?qNhWIGq&ItO4zOzb;T zIxl`aCA-}Sf_^cvi5&}?^oWbY)6>oZOotli1n`V9DVU}On714@d*C)}?HY?iD?pdU z?(mv_*&FE+c65m*0X`#rz%=?m3;KjJFm3iaI)x-O?KhXn>;5?_`w8hGwRz9kd88ZA z*)n^{lil*Q_SrkDqbEd-xO--AvD6Gk}k@{N;PWAZ`R$rM# zxBOm?#t{tWN}NOLlY<|MM9Ih=thbJr^g#=VD*$fz3h+AMYeHxqGR zi+r1HSiI)>2oz2ukZ++MSjbr!1z-eFC%cIY#PjV}*q^pv0V_1Nznmt2o4jP3^R1(3 z+B&j805Ywjhjd%jMef=;_ANcKsM}sq;5Za3)BTqaAedx`VLz}Tz|55dBb%$q6uT-j zNmqJRlVjrmcvMb~ybqd0(YM8T;xY)NC?J-~gcW>{H*uCmkwtUtc27LlynaHhTR8TC z!`x;!NiHq{<>~vme8d6EH0qN$c?}7>T$Ns;73OEfF&{9e3yaX_sf{mNx zEjge3M$=8`=pY;RG)EFCoOAh7dKKs-#vIG%{0$+EY7YBTF8YxgGmw^DY@5(R-X3dn@P zom)GLr|mvY8c9U(R7_Z}1qkB_ef%%AVb16V!qav*JFCFSECMzg!xT~VU)mUgNgG4t zyKM}3ii|zy8e?iyJZ+I#?2*W{Ag=T6L$NjSEb0#25p)80K9Bk&T@+zIwn5?yxXoJ6 ztJnyLCokY7UlVpPb0TgmWal9p7A5pJcpQtz{~A1w#N$8pqv}L5nK-`LUBZG;57qey z?oT7QjX{cMU@9Jf8Og|>3VitD3|I!!upFAPY*gBt9slZ3)z1CnfiFtVD}a6Cl|{YW zr}}%XxVzqnL-%3YxVJI>74!+iY4jmB^qGMPQ`a&8G9mK5D4v}sV(D~5oz{sWhhdy? z|C&fh3r*ALN&2{BITH;!0PfD)Fm{1=J`{$N0x2*EY*07@PLtMifsq(lnX(I8MxCsu zhwlh-wxq8_rl3dp0$0H6s;z!x`S)FV;x$ihv?`N~hpRvK@-*`5_GzEJg>L*AMA-@Ya{!{?77>54z-mBp`oYxTMRo$@6@*_>2B~REQgbCSTwM zmFfJe6W;{wH;1yh*L3yQmH19wDY*G?`7PNu85{*4p8)DN-x~Q=CM8qcU;7;8i~c#g zp()VQ?E4y-Bjq{5KI|G@|J?72ir)lQ*9LM}8)Ongo^P*-rwK}%padzr6iwuivsvC? zqIL^>D?~W6@i1vU>28M;5+I_#4@yj3-6Z8p+AVG8`Nnoi7U=>)NHA$YXVew&G|F2X zT@iCwh-UU$rNMYq@F}Igj2c|j?J%(myxBZ|Dc`?lyB!m^=OfWHj}EXgJ);?L!T_+q zDRhE(J~U1g_7;8;<8@D#obEo`d_Sm>OCt$`^{+bLF$rTS6AA`ANr`S!alg$6KC22Y z@}#p&gcm%ML8Yn>tW&*E#~)r|l32|X~u(&z1%+mbB0m1t5r zJ{?ZT9Ch{};)TSQS-wfRPC0nZY}B9G>*1B>e%B79+Xeh7LpmdC41#;~69SVaqLmuP zOT+AF+B7WEi5?O=fIB04$u!Ahajrq48E~1io)XYztLC?SjP&R(9}wgW^n6r_ruoe+ z0v$tQJT<;eYty<$#u&-l;%UC$)7_M1*f!21#Hil_06RK)Ew&>U?g0sa{Cyy88Tuj5 z+FxMG;Lk|?K&8HZLenM!v=B|Yf}$bF4gwU2Y94K(`&Dsqar6=9xmBqM&dSE$@Uc%Z z6Z)bM&IJ!x&eN*;Sd_vAbmTIjYFt*$cjL*q=}ISx9U1iXr253)CzA2ih4|I|;9oA3 z>2fdIZSs@rAABP6Jb5{g`ELI$`6%A1uXzfdW%hU5)M81X*lY3zy?;%2#iq@RZPgf~ zu5nAiQl9J&W4vh}kY zXe`Nc@l(%tQLH?3be>~`5U-TtY1xT4rAa>Kp6KuWTWq3>Pa-mm^#&*v8x16Wie zt~zd%-@w4zB>ANnf?YpU06giYPBr>gg8W`4Z+z{_IEa{v_w(okFbbq*jdNMTC+OZD zIi_RMy=#5i-AOwRv9~YNH@cAjRA0p1i+>FU(s#v~de98E%^uZeVLysF%hjbtB$N>u zgT7Q|-w9o|`(|9yL%<$B4u-?O98N7@nPMs14j@3%JRg4VH_r!CijkP>(X_PXCoxrJ z=kjh?aR7J5eSV^6)8bs1n4=?V&Q9V{G7>;wH3{ zE*g-?6*eg$LbhSQP=s4}HK`(?sX-FarPN(uAsTG~!Pr)fh{!;VFx7gqD!A`QkR>kU z6(yP~aM%1ObOd_HYF`gZ5}vMOe*H7u99YeFeZ9zk*j7N73DlOn2XPSKbut+d&C-?7 z5&I43fGz_(TDOXoDn3HPsSkl4lWwv3Xt3CTG#9cq*07*M6zMJNq^3(W+q8)>|C)kG zzwbOG>%<@e>^VIidY5%@Su+LyJddVWf)1?+w;?RO$@&Q@$~9mkX+d7U@`TirAuF~V zRk+gE{_gp_mdXx|aGaKh28&Q#Uq~V`FK|6YSRz$sg!Tf`b>To6>qo|7Y^r8Oc@5iP zitnf@szQks(K`A6p$FtyUK`zk4Wb&%lBoj3+w6);%wO+nkY(o|hx8!xHV9%#lEHCF z#(*8cl1BsrC_x*q=hujJ?W-0l)oCLcDjA1rs2e9QlBnC#K4rCeJL7WPZKLCo`D>AF zKm5Z=`&jWWt6pI=K9maHphXLI< z+E|CmV2p)9XN+k|ZDn~~{kF*4B3p8SW4_b(D6lbR!>BiAkCt@*74-hip6K1ZKJ=x} zL8E&e71vQm>w8b{!qKN!-Vw`Ow)*q_dTAIU^7iWHQ;m!^CNgp8)>YFNdIft1+*E9> zwWjFNz9Y~%T?|Q`ZkK!|EvTX*7VD^x#@v-Dtv$`KWPAk8Z*Jg)>txip3cD!v%4X88 znC#3hcIaW;KDi;T+c?pOCPuFLPdi-Gx#H!nIBZ>=0#FK&9ghH_1LzJypvzEZ%REj0 zK3{TLJnd)_8iFDQD2Sa8_j$uwx*}pdl;YkZ0Amwx#Ywk`N-{l{UNlvRr+>wQdl2cc0e}*LPRf54LRr1MW*_1{@CUM!F6sbRGVhu7e3(2fwE4ctY3lujx9P&~@}{x`q?FhW~Nb5iwq2 zdPrH}kCat~OLpxbM!?OwpYasPXDj6Z12`r3P6#ZLrE)xgNz>Qs%%(j|1*9I7Vd(9} z>!Z^-9QUsV$7?w1Up?x_)#@m~cN*dOloT>8`WMC)N{Z1 zUvcBJ6po?-@jNR(mf42c@F!pd9SnAxNj=NNKq?Q?KW2s1=(j5#McST1TVZE-TT%s! zC9n^}gL}+xWKpri$2w?9yr*qGyX-^0&<5yInr_+-%lY-kvU8EsIB`1ru@3`FY+06MS(YU^&65p! z@W8}r(swnc#o(EtRI4Q#0`J2X3vu_m?G0>7q_aK^QFu5TzT6QujDsRb=SQ(jw2$hR zW16(~^kvWa@<+=zulRP?@{JWE-eEz6Dc8;xHKd8>y$>y|(nX~fdt75;_Yp?#+0{2& z#)NKTof@&MBr_O-?}30jef~J{+%M!bw9w^<0^T4BjF;<8vfO;!eirUW13HKXbPx@W zUmxJ}x9s8L$gp3Ic1WzqFlf;p5DS9(gCKq!8Ta#Fg=~;Cu|bpnP%+xig%x@h$AI29 zg(lf{G4KH5a=V(^FnVyjOS^N$=~10!+CY zs5=PY2O59-RX7hr3thku$go)(`9b>u)qxUbAQd<00B|43i~Xv&g#Bs7F!v!O?BGQ2 zo(9D>$IF*qZuk{9f`K4EkR$u0zlMk9mX()=m?*W zxbsv$)oj;ArqCE^(W`E^>lJuGXSdngvRASyt?Rk_z&$w27OUs^QkMAoFi|7>9djZJ z+qNQz$2r-HA`l*!tv|A^rOWnn;YF?$J@z95u@E`B7vzrA-FOt>j z!z)FQ{T_3SES}sBX`ff&4sLedpkQpTQme|+hTI~|7AU5O;hr|7uA~{!VU(rbmjUKa zPxv~y1UvSAp;F%6!CRtjx>~cB$Z1aoEh0R zmt|5qC@qnwJCUMOF%G(yi2U;5_r~8@`B1!(H`O658pfp$D^g4BUI!1ozBO8e$5wFc z>g{mmB%4h#eNJa(`h~^&5nhB|(16H|Mxh|SQz!_1^PR=~G2NJp(4pt=1^5Ha*Zo{1k%ha;>kr^C%-(2Kc)ek)D*fsVS;6|b4?p*j#b$MJBL)>y`A}Rwkfr;1$SmGh z2Lh166E`u`C%q5G{CpPp9M|sX4oC;pufaf|A9m9c5`Ul9vpnuuxRZOsI&PAAub+-p zb&nVs0PX{2d%x>ui|2Pk*4)8Wno#yj79togS6gM*;$p|bFp+6nWvdQDnKFXrL8bE* zy8TFjbd9n_)D0+g=4;VF>}sP-oZNCfe2cpfqBVW_n!bbf)V~qec~pH`KSP?#GEH6} zBvtNToA`m$nAJ2K4qd;7X-{4sJC>7xNyD1l8jf zA09uf1(fOLRDQgce=O}ny%rSYLeAH!#d!IcO$v|sZtSi_5~P48W0EejX#&>3M37TL zv+GN7-}A-$CQmwg2TbcM1EuPD?9MZUV(P;%B4PV%FjybJHpjIB&N1-Qq%*Svy4tdY zxGcbwabX+~H%QeTza~#Pda&E}8uj$9B>XGrf* zmD8wX)7**GCsFPaXN5?tnVu26b0RiaB{27mHRWnw8-ehclQjR8<|it*)LfB`1sw5*Ns))M`MO0_LUF3QwHR*lHh&e6p481+8J}xD$>TzC z@Q}#*IomE&0`m2C{jBDvZq>Aj$nss+Y5qE2LxIrC^jE4fAV*`pp{!!}$2CG6NfndQ zDh;N(lAUbTsFfDVxMYRR)#D?Slgp~vVNyT_`j*ON|Y+qYNHVr6_1o3Z#UT&xj{6CgPAR7 z5|@?+Bno^cl+JRtC}Q+)(?u%d;p_Puv-#nvNC57 zc`4|Za#QXrd|Y=6-Ky+~$EoYb(|AV|e5rpbGF)eGotbKZuayuG8(^Be9!}&BJZ)aq zMW7z7vh+0;c~LD|lk1B#S!|x0W)7u{syc+v+1pu~Y@U^L?9hi1c%P!JRXd>~EmhA0 zXJ?**U7$F1A=bnK)(Sv{gi9p#kPG&Wdst8q)$NTi(f)^)p$39j6$$E3kqg z(_~prrhgw)@!6V+M#(5#m^=dK&5c}w>8z|{*P+3yo{_UwN>GCrG~xYWgeMI28XP#C zbjuv?gu=RdZY-roWS9!_sZDJHR&eF;Mg4spEeNjGJc3+oIjf?&rQ*Y_I0eYbwNSV0 z#6a0;l&x{1uB?`Kg$g#-_>iEeVsM+{wO!mFmX@c-o2cRV+Sx8hb)5lE%gV0Hu zLa&WN9EF-%4@LjRe(H8{ncH+U6ju^27hrP9TdBGg$m z_h2kt%xy}SRv}YZ4v+%f)K;j0%m|vVPX$Y+&pX3=QA5g31?M(RVI#a?`b5&d`+7l~ zP$DERz9Y^x^Iz#jAuecaRxt}0qEpo)x;zwQHPlTI?L8+^k>eAPy$iYBHVWx;&o3nC zHhX$nq%dl8rV$(uek6i){0dwDI`cFVBrJh;5iI4 z^?jRz)QzxrHfhUo$^g|A%wATxITVyniy;6#X}aHvzbUZwJ84FvEQFF$ZC|1)%QPb7 zXpf?bNBZF?2#{4=Ri=V^cd}^p=0(0t*0<_q*$H;*^GUJ=%aBU&;Sy?rfC;j z(5yoadVIE>n=~~cK~q&r-_7B}JbO(KPvBn}qR>&1jBwg%Mm@~S%93Ou^k58{IuWt5);ya&jjwh4ff)O}B zk8jU!3K*tshV*PRY9pDvygy|Bo^BtyDtEep+gD|Fk6N8NnTStAdGx=HdA+ac1-NG|6Z6OpJB? zxDexqvROOhsOhoY^>ZS+9ZuwrakbaH?o%+FhNzHaP`d+#6~nwZ8FmR3qAU&?N`5>{$UG~@- z5sDCTi;B9Rekg~x`qzLPk}rS&ng9x4PPVI+kd|B#aNbxIt_Wk&!(|JXFm*e(9yy$Q#h}Ir%?Z%I0D=i|ZTZFoa-8%2+=GNT^ zMcr5!OSAjF{;W+kikEiC5Ip0+i@WNo`Xs<8@Hp)zPlz${;&~@%7dK|{-<_a|k6Y7N zd112r=`dNrwsW}1WYj49WPcxCivLS<)SWq(SD!zh-*n@TXX}&rsk=49ge37lX8MQq z?Ws@kyjc)G=mPBGiLxl3b(2MtEH_?t;1Hs28l!lenIe#==?Oq(lAXKAxffOeN&jzVV86@c&&9-E*$2R}}l*ok9yxs8A~ zIo!R(0@NbZ#H&ziuO6Jq9dljyaEcnj$9bN->!r6ThfMPtF6*8$^NvQJjGyp~DWYQq zbUfBs;-W^?jLal0qtKX(3?*<;AkKOf?X;0Fc>`&~Jvu{3hja#IL9MRAyAl-#m%m1J z3*zDyycn_aeG82jp$3G;sce8D5Zu6xr#b}DpxOms-XwmM4eW?lqY+{tZk+CnLNOWy z*3Hzh7-QgiJs4$Ab#TaEcC+}EEVk*o_%X=vX$N)nSpJmk97sw=or538mv`rrefYqg z?^oZ?_vp!pbN>BopN_5=^5)y|r3FJN4~8=IyI6c_ZUs9W3LBojmtU>G`$NH>FO3N# ze$;ak6>_Y(fzjDmEORFjHtoA;BfpuSxVbb8US_HJJUANNYp`W1({@$D#^*ZqEay7i z^bb5T#$Am^+Hh_Wd?G;h_>BV73kA%F?PNS2TkI$-3b6_=Rc>jpFnGdCCE#VdCHI&s z-!7WzJv?`Kbsma(fnVx@Xf;rIIsKY8`gzV%N7+7|kM{DU=}22mrw`Vm=*;@I zwQH?zA04Y+g}!k)3!Kr_=eQ`WY}T-50Aa6!HTU)9;FGV$&^+Jk<3ut|&*phL?F)VL zT_Z1Wv~?h(?gUhM_ua(??{~Jkx_g7`=Fzl!q|$U1cA{6Bu4Cg+WrVx$MgrcYam#SzC_f zJ7-rvzgsr;oXOSQ?S*A)*SWj4BvHUDmJx0b1=MeDFU$+4CeV;2bkHggb-Y2yocFQl z_;2ISp7VcgfA*b!)t~#(WP{K=%~bKjM#x4GNp8mD?`P+KG;pDccWvK-PzqdYHzJtW z+J`F+w03gk@+dx;=S~LA*_c(t+^`4G=j*$lNxm$V+Cbl&e0Av4rD^QilEp6+yXxiF zRg!o3kmcdG4F9s=vfi(Mi>z-`@x#LsO+z))yBS52Dhz|zeR zbjLHPJUcp81P$rNPZpDf5Y1X9c>D@luJ`s(oMI!69T=e$6?>N~^+OV106}rExJL~% z7YUDNI}I=jymG`Kii%%f1x=?aX6tbL`nr|(uGp*O2i(O2MNN;7ACd?UB%L*8HGM#= z6?Lb&M>@wIp!gN`b$f00$(mefebgEtByJ^%`#@qyV5?C6oi(x}zdh?WK==^})#yV9 z_S2fXp<79^xxI(mm*UdVp5XRU&`st-?;fALrn;A-gAmlMZe(3T^md&3<(@$2wKN_nV~0rTu{Wf*-+#N_^MYCP&fI_X)S zyvg94tLdx@ngEMqji{SWXKHoeIk5$?*mg-QZeVB=1FOpN{VEMluayMQUc~p>^ZO>q7X<)YIk_6|p{Y zz`nsC-ONX$v3OgMTjNMrJ}TKlE3F~%0%S7Cd+GLw1FaXA$!g!S?K%Zf?_hy2N{&W2 zjZBI7cM$O(b8s0q@(MN5FlYS+nIesqh`{l}|C3(}YKgNK4ua`YTxSS`3Uj>rQEJVu zJL<{PCx)l06{Iff7p$B^LC-l5G5&_%t>#HcnqP2RYQ_soi5)0)TFi%nc-a&den zLk{oMBXRfjN6*>T@@Kq~uhNN_OCe1caRoyY`gXRn$6>#>*yyK{!1r19+W5qZPgVMq zt%>fz-FO`}QGP8++IWO8vcB%fSjxFCI;B}t< z(r4?24KOmpuR)QpdI(wF3CU!&##rI5n3SWLU&Ddt19JJNF4m&;3ng3{I@#tR9YF2q z;&<3igV?-6q#`RClPCzn56M`O}i4LK3ZpmCIM7V3C7x{?B&4TBTwq%bxO-gmO^y}vvVf&xOrx)j^U(at&u8wcctf7PrD7q2ldvZ@~3e~q{z65hgZ_GR= z?P%DF4kwrtti#&%Nh>PCs_Ps;x96F%=49e-FK*hY0jdj58yHb1{XJ}=8k@4G(dalJ z!_AHZBCV?0QuWJdaS}$ZEPv8I9t(OSlj>)hFSG2WIKrFDv)Cj(aj&{vf;uBa`oJ6I za=ajtkHC(S<@Eh?o~)kdQ>En01i!Z#+zUb+Vcm8OaFMK^;p#v~2jxKagp7Luu_J_l zS`<}U7BudmuH_6P6huc|>lylJhJMME-($6)wyZLA`n+Af;AxstH7H>rac=*-KA*%V zf5xNByRp<&_vkxy9(Aec02c5X*vaM9=~vUr3;NcbJSO)W`jCkSl{m*|qmgcPL{2iB zsc0D4{R`e-D*v;j)b4ifvts*DzTv_#BM&hT@>pEB*5JQSKd?^=j*9t!`QS-D?8c~qEvfk_6a{8Q3U($|yH;)l^Wb^ibpg5Hjze%T1kH0x1 zc(!Pht)xsVaa;G$OkXnGk+`Z0A5=lF9k(#RS5@i?pmVvj+#(EI2@xx6lt(@}8X768 z_pZstNWCja+Npwt9g9Th`J;iTOC4_hqAyt2S!SF0bQw{8_$ z6IIVzTj}k0r!?g9ezn}i*FBd*uoIY7l~FbuN-WfNZaHKpGea3iErkZ|>SVWhm*Ncc z_h6_vUkPm??Um!@?9y_=YE^XL#qjp$S3+jBxLstBM)5zY>wl}T5YdUx_qKY#m#lBx zl)|geiic3KeX`8ncGp)Z>t=1zOWm2 z`LN)mX#MXtnGMip@RYphiYwL+QSJ;WcN%XM|G(gpB@?u4$-45xn zDU$;!R4NiE0sH8(xJ8gp4XMeRjYjhqlQLz2%d}-1!oBJWE-Xg*cD?z3=8mmBZ5{dS z{T+Sjn{COG{q>0uNa!Ju4WyU!!5#ZZvUv1bL#*Qh8Zs_n}cwbP&{Szc1r zOZ>g3gre|-m~SI8EGmvfmemauI>OMtW)6w~>|dCq>->0#J>F68>spwz$Js`g**tos z+85cUv0qE$V`gaeDvq&yw!~;=m}Gf%$W}~k{|j?qj2#b*YKEEvGjoNb4POnrMGB?v zldwP8yuVm3v$H`!UQ2v~d^yhJwaNpjk{I2fm`KzSs&=d-Xl1|LgVLMwNbo6Wd{221V8H9FE zZUaZTwOGqHdc5~C-%kz=X_%*6UMybbc0}Q;CPzbHmimmrW138xSw8NT0#rc_)Ayhj zg3O1j94mQV;QewYdvg?55)L{TR01J>x=H^B_Cn%K)E<3U{mz!kYDfySF;jJ$qGFp$ zCftj4>ciq>w_fL*uxULwsv8F2trthF%f)*8$IUV&swBP=;S0ekKdfzOreMWAr=@!i z;>68*&EnA_W}wb}7prx#V&G$gYQpuuS^%TmDJv`AE;6h1Je4h7Op$Eqz&BU27yg2| z5EEMGQN;{CT#PM<@`;9gt#7&k8HkqTNb`z3 z3VCsRro5Ce?dvBOjfEM_wHx=gI_2olB`?f%qO#^scR0SkM5H=ZFy#=_C>^9N1Hp}C zlz3TPxTI;70fW1j=keu6GC!=`=B4~wmQ28keQ)#Qk7n||dKio%mE8TFL|Ef_#jrJ{S5O8Rsz|Sp>U<`Ml&!Hc6hRpx=~Y@` z50=xnE4|kTq(}#WH@P1<%QGw&6|(ew^|6P5>677MgJ^vdoOW1GH41pZF!IY-5DW^@-y= z*9R&x*(gEKV=zahbp?K*8-ZRl`a9g0tGair9+w0DxS8)t#lO3pRRP;Q1 zRXVt^#v9~pJn;JCyKb*P=nXHe$-XpSY8qT4SdPUo5DRnS6fZZ5AX}3l_>6$<@iqJD zwjM1DA@9Kc1>RT5W>wb$h)qy+F|m&k${4&%VaapLH!hD{sH`Di9=QNb9YRS%$+6UH z4C*zSUbk8c8D3W8pRP1BHqS!AE^rGq^{%1f!|b~{pY~k#sC3yMY!Mb7?7Z;+hGJc& zD&xtTPZr-A1MWxl{?BK74>(c5(@k@N&>N=|p~mO-R`!e&MA`gvss9Vq)9J2WwlXZ1 zANLRmI~V0Cj|gKhdwdjb)*I^kXaFFJp6~(y$pKt6YYgl3ok;HmQEIC)w@W4k@xuZ; zKgX^GIdF@Rs6I?*LQX*kIQa!mq3<^{In=O$dIk5Gx6isTKQo;p`B-VJMP+l`N7G6R zL$h*Zao4GYq;WK7a0~(Yri7%~LDr85kEp%hkC`?HO%oid?Ggc>SMzSZ<&A>Wys)_(+gZ3_(T`WDz4YkGzfi2v0`rld8gGq#(mDkSN zw3ZM_9=cDSrh!Qa2dc|hHK_EiTG43&Y88Q_AzSb-g(B8{ zd`jGpai3*(bOmKtcF#Bt4)IkIx}s*2jg!eMhs4Ju@m}OdhGxDykY^>IJu4XIU)6}E zTtahn7?m9c;;V_utQkDNY9>4*;GhKj=pn|s68Vh+eSp#?l1#(05_TxGJS{4YS;1yi zSmtH1dBVdDT z#h%e45Fqhp%h#vbF(4Cfr3sVMq?x`YfS5Ux`i&x5HV3slE&=|``@8xR^?tW3CkD^^ zV;LgU;4jog1Fvhf0$*wt8V%ekqObwMvL+-LK7XZL&WAx48G zH^=56OhB71cpT_kGmxC#we|?p2T5$qa{;}v&R!6SEm?{m#9BsTDcWObE;UzsTPU4)gY>rt)JW9SnHok5s`Q35!->DYv+ij}*v?&-VL`Va!h)ji|ur_{+?|Q7L*H_UnwIdMXusO1Tq8Pu}+{$-e`86EQ&MX zg|9c6n*I<(EEyuMf!@wGn|)Ol#ZZ;uX-gDs%SMKv-4_+w@mXDxl^mng3bagt><(F2 zCNMIrj?_A)GSpY6qRDpl{Mz0Mk0w?HGQFYA3WUnLU-5&@>y7Q+sCqT@y7%>=l38K} zVO`0rX0)`*)vSrrw=_wrq{JBystOlXc)Ky$kf5LSUqIF2&?{@Wc=;i`%Gd0rcukIq zA*kXEWo#lYJFWf?rY16Z=yg|U9F(_Sj+N!hWUB0X_xyD!b4(T4CW=+s0J6Y_qGFn3 z?XhBEv>@e6aC>l0Bc>hkNx*I$c=g5Ql?528j`DpSSXnIFoo0{+l0?k=h8fj#w(=8Y zA!~Qa9aM4h0}!gumMYOCz8_6$=8bX~3+(e?K3~&8CO#Ob#2!5^J?AQZN=V?R^8olc?Q@d;>s)4 z2@V>#%R&P)*en-0Rw+0YdMmqw43IceJ?;Ef2-WNybclmsj}Ds158z2X4myZ(7;-JTxk4)HVZW^n zju(T9S24Mfb0M+fovEx4x7>3IQlg;~7?)5S|qGyP6NdR8rCq97Dr|q3a;w zbzlrCfB>Wpz(&V)fb1Z7BcmePUUsQn9Nth`!aJiywV_{{n;;vukNtL0*T9;oqA5^7PI z8xU1mqafsGpy_(?D%5u7&Z-X&|0QNks?3TZX?{7I%{EVGF_gqF4CN%trcdkD?)#IA zV`UuZLvE_1CY)I5TRTY@H!blQH?ntTvm)GQ?Qdl>amW(?`|PqgYE8h|KXrFPt?~b4 zoAbz{+HBkRz;P#^!geEKXhP}?@y7ha@Z0AE|lT1(G*qh*{qOw$K=k8{FrgTf`LF)KOU7+|34gWBHiV1-BoE4|3`RHuv?MauDkgXs;Ix2 zi{y<)2S8S-eB<=g&Hac6piRpjqQW=je)=Ir+A5IVNc|!etMp-7RX9s{as5@P6OOsd zl-HNt-DbObmY0|?bzFAb)+NAkN~HKF4+A%S@}~Fi-E66RHd!j^`yc$);`aXm?rki4 z63muO89#4_ZcBaV{hTd#+4x)W|5dn}%u@9fJX8Lo;nSMI4>{5h_qSh;Lv@q?-?3_w zTg>l{gki75d-I_)yg%TT9flKogVAK#8FhOoPL1*G34*}5O*xbDv+@B*RHhP0t>S1p zQSnP?n?RvKUbft?OEcT9^uNk~oE57WhMk!28z&LaS8?-#i3u0%$H0l@PZ2rCzAv0B~q;WY@Gjp%67Tf@5WAkw4iQIW&Po zY0=;gIheu0r0i9vMx(d5gi!V+QZl|l;t)a{WI3nT?b9^dU`fXz0=_40Hgd-)oH)*_ zWht3M4Yz2Qc)!+*ZKf~dQFvRk3qO8^ofqUauS5z zqY6u6Mly?2{R2-`_EfiV2+OARQgsLEYl_6&T6XNs7vH|^Hu_=Kf#YGVCUP`+Z=jw+ zapwuDkp&d;GipXoPMXn=_9%*+H#%)zUZ_hPUD;`LWl+#@>*J@bFY(%=%T*yeX|k{o zOWe{ZEd0X8@(=Tu;`r=817+4>SU*7@(7A$+XGB zk@7SV52A{d!!7VMN%v#m4&f$@Pg|v5`i#v*d@G==@!V4tIIw$inz|R>;20SOcSc**Gs+SUJ4w zT+{^KHb>5pp`W^#B0dE3_KU+TCLHK~xQV<@zu)UlC+YZpD(_d10YbfjJ-+GfTNuh( z-7mA}?3ihYHyY~+zPJu$Wt_61H1a_d%;T8mCWn6Zrs_Fukt(1oR||!gN`KOGp8_ar&d?6W?6F3Dnb0%_jlV zO(j~1M*^_yFkRJQ1Ez{-`n`^L=CM}9{jxnyZG>(QO|V!RrGM3d2cNJgUDr{S1FA;p zs&4y0{{hNt){!I$WThazs>6iCZZ>0Y60~{Z_}9;1f#I_jMFxfP%Ch7eGNq(%0%I zGG7wzrl0ofCIUPm6vMyjBn>bh;c0jOlh}ts8_4+Kz9hmkm*mb*I5>K z0epCv{@I_5gXfh|#L`6_Z9wanh}5nsfKY;TUMEtJd`a4?n+V(%&?H^dO$7BSNe6YC z0Lhos=+%TUz`um07j+ZG-s3Wxt=p9*1DnZJ9R!KL}6?qsfi#~dY`(VZ=_EJ_8r=;C>?s}u{ zXZHiE6tu~8=dzdfMxBdco~>xa{%-f8%8J3sL(QdAwEJ)2&V4KA%^iJs43h;_FMGGs z>$LaJ`_9n)1S`Ap=MHQ-?c81UrtZg45(^{-{r>%=m#U<RgcsH2#j*(|>vL%m@2#bAqB52g_+z;J32d*q88l{`gts^g6T9bJynKhkU z_j(5tq8q~{B#ylChu)n~nQq9y*qUs}TTn*I`!O~s@E&@1V<#H~l`WOox5J_18h{uv zS_(7`co3pZsci})Y0J=d&|X5Mm*6NgmV)z*$~{H5S!#)=)AR@dj{IDJj~3ln=L8>P z$Se+LC5O9_)|Ogoq}C0L&F5h$DGsb|OFoB^e+-i{56z+Wj!?ne0F`t;L42+=h0BA3L8X$H+|Jxtlvn0R-Mru8qCTiC4bN zIbyeMCouMIR1YTY0X}*Ng5aZuZ$1{$a&x46c(6`c;Bd%-GE1=fQ35_Ha+~2hggmK9 z&Q$%AuS=GyKVg;^I4o~cUU-4^S(rxvbKftPXD<$93HpJGlEM`bSvyU=+C!mF9MI28 z3O5|L8F>2OgKWaqVj!|B#UOp%kLn4mS&2xX`K69qnU0S~Ue@H2!CGwAn|m1XR25r`lrq_`C5 z+hH6ALTQQC3b2MSNg{8hX1lNcf#rYrfLR`oT?nYId(ouhi3{oUjcB750gqU8kvLe+M=qAm*CzT1k#TL@3gH}M7qih;-V zyg`A2;R%*ET#UnIkuuVxHYm^uaVSx!`39(#I7nxEdP9pr`w=3P4c^W9Ib!K2+;Ux9 zt4ljcr*Utr=htj|6kORU0zG3<;dxp(mgiVT(V!rw z(dH~rdGWr!zi7iVU{O=%b;v+9e<5(8dZ8=3aH=vcMkG+Jf)jD*%rBtQ`_X0ZPCb8b zVkk~=3ft;$E!Oz{?R$W6AbpD8+Yht7ZX@#IS#{g1{v3LXqG8yV_uzNG$X04XI6Nc) zlUI3=?)(z&yRKq%xK=KFoy&>u{X~sZ3=PHw-fS!WpyzMK|BxlCrQk5C^ox}iaoP{8S}_FmsY@GMR`U2 z-SS7azF7S}P;!ye=v^~T$NUAkL{e_~jnv1B+0tc^s+P`V@%`n%@`UsIu6f}P07F2$ zzerredR*&K<&0x#5P)qq@gf`rNLh}^om~@o``T96vxHXH1g5)s+3cRPwO#t1F)x46 z*jX+MGPx*$NEPb3n7zC>R&Q2a>{Vs8Ge}4u6+_;6DCArhp zGP2a^Vc>PIdy{E8?DePVjkKhLmK)^&R)Pt*@9SDMx>QdpOD&)$CbD&N?=IETyUiTQ zo?wG%@203<15+u~y_`EjL6lQMz>?Rq$5A9q3Mg$;TMmsNW9&@^SEIBu9d;&Ye0e_8 zr<=~?FrL-X2^@VVFUtwp*fcVH$b}!4_PKL zCA&_{a+2=${Q9d8TOK))Et$04d!4f%c3bdBqtR%-G@3zXzR3~d`~)f{)ybPw#m1pN zq>j7qNj@%$%{IwyXQE4`&U^@be6nk&7{ADI{n`dXp^M|PahOeeJkW{|g{%|Sa;E>* z!|>a{S>~(7CNJJ6t9hnvaT#?6r&yd|RBYFq?XnS(!kCKdd77o0^dg&-y_36V$w~pSiA1cklJ-?*br0$6?Mn6A?-(k0GZOgy7$=8drSvSK&888ryOt-6z80?SF z4=uh4#<~}-jrRTZ1l;Hc=vK4PCfpcv{iEr#AKQ+-JHe^4GN3{NS;D+Y=B-$>Jeij*@Ee{hvr^kZdk{d!iSj`_)y5+Gwg7EpTBmKEhl#`EDleEWzp7B58#R0jPMrQK7?* z`e3Qxf~FU^FI?7y5c-_n=I48`X?YXQsxCuOk>y%L`pMJ?P%xc=Ogx?TAyCl5C52~7Fm`YmTs&l&B?nFK$c4>zE7YHT_3VR^UoK- zz>iP5msH_R~E%K$p?$q%R3*nmU z5Gq>qaO1;KlNnr%U+yO_G=YM;*$*F}qH5~^7!H8c0gP--YqF9^X`GGOJ3T?gu0|XE z_SaN)1yzYdE)o7F45-RS1POJXEU9E+XLgrK>!V7Xg8!(+m9F!|T@pvm6C0d2z|vQ_ zh$0{kBG-A^!*p6u4A6_6ryX|F0tNt(dNpjD1;P#Q9^nW4CRp6upC_B7 zF%@PHv|f^RV+6g~0Y>I-$|#ws$!4DKBMt7l;2LJ*N+M(Dxf~OcK5)K)H9!xWl4?_9 zZ=?XJPFlC66-1rcxf&U3dGz}T5-t?9f~3yE(p;od-aO%U*SOgmD5``o<4Do0hp!3x zs&_9%n#`F;2Qu$nki+K@_Kx5e(xOdtHpAqPBk+^c#fDXH*9o_hkP$^nQB@(N(i)KI zu*)5f9}cnN-Sxt?L@r#*C`)?TzubQ5v&I9NWB*dRMu!L*WRQ(NLWcFreAu&uN_zhL z{zr-)MHMTR9IcY7I$4SB^oI?Jnh5YRX zc7-K&u_E*$AoRTHd=Hngig{}THv7lyuMdg%6U5%*SZ^Whlitb>`&7SY89Pd+`F1s5 zb7MfGyQC#RoU_5%`{DHL`orn?iX~#Oi(V63*=Nm@ps74_x^xM$wknQ<dv6WL9Ed zagi@Nkq`3PT#%nJA4>U@)WW0jdFOUfLG=it(sBLND0bu4V19EHh)@7VA?3q$-5}r) z233qBiaj9-~=x|z+hXSVBteZmEGZ=L4t z*J%cDiogwlZt|vysb2I<3(Gcus>6)1g`|UUsFrkAaGt630zjVYj4sDF(@MZwO-Rfo z9|Q}e>d)Z zf|X}Zw=ZTdD{3!Hank~~a?|>R{JSm&M{p)_y;6(BpD^DTI-p!B-6XTG=^R`@Y8oA8 z`RdF1_>%tL8?RV*aSFxS9kND;JX-@SL_WI=ut%nI({V>xo^*`tfsy0sY>!tRm$4hp zV!fv%%V@Q7dOl&jeO)MdDpcZ$5yzkM{B1sd@fgf!e~@{=%)2q1Voeg0Vl zk^VkHu4_CA2+qX_AW9AXzUDCF2x$(BKi|0K#>HV&2TtQSHa3(a(!)@$%l-K%_G?4g z#v(#QWF@(uc#e?$ytp>B+Xy75V{g2RRa)53RGH>h%ZtU`D(btuP@3m<(~6i12GiQX zi-+Z2U$i6X9z4`PB+fj)%2#LGr^W0OAJ_;lI52T7;$I3z$lPF8Cd3{6HW*wF|80ZS zp&C}1QNYSg{YA9Va1LBnq>xC*Y=Iq%byz=q^{Zfai%0 z(Jj=MM?JLL2g76jE0``g0h=0Ho=ZJ>>oFr{rY+b@HMZj)DPV3O*&rigaY_fPFIfvx znsv9%(qyB0PG8Jfa#9DjyYk75Gz5~HQU*W&qU9kEEbr_koqc_St~ru_MQ{pK?%Mao z`fsXo40lb{r>v_qU)XT9T~hk-jK+f;lt3PoyWI4c=!Iv!5v7uo;!`ipkfjuBScV?P z;L-^DEtX+qK2v47@dyx5-UwXN^R=b(N&0QicX;Q!@*^N)P*{H?=6W1Kbtjtoa6PvJ z8q}cos=bJPr>Ll|T%S>va<<>rdh$rc65A5$x2To_+Ir9gL8WbX|Ix~<^O_w0TNP{s z&thz3)e*aM2n{2^Vv&;wjR|cU%&xrGvm{GR?W54ii^Z44O8fne4v?V4NtpE4ER(qA z%j6y@wKmx+scJ_xuhdZp2<~wsR$Nb0N{OuT)((YQohhEVe@y7+tu}2p`lO;pL{Q0D zi~M+!QcJSXaS4H%fJLdPsl<5AsuSD;7{X)AYOGstHv5Q~&Gp)z9X)L&3^lc@@%39Q zN#XV0?0>36>t(SSuyiD(o7~)AMG^zXjejC#wCA!^5+48qce5kv&yEb;gaQ`t^K9Pn zKvB7>;0?;l`t5R%7E$JfiXkTom^PtxLOFyUv`@YDUAQK>FX;aO43&3ly}3xRB?b9H z!7j3FtUV?;AQ$M&8>9L?x9L>|0r3>paJa$Vlb8 zog!EDo^lVMqSRW)9Y8H&&snU?NZ}2&gVNQe6N;6!i~%FcJ|z39P>#yKoa|-v`k(um zM3okxnQM#!$^IIqEhSsbp0;bg@geQ_6|dxK6WS3bLyFD%(_-`To?pK&`s()whNx8p_<{{&??hMga)F)P%tcM9vUe>y-)AKy8Y#8yD}{q|J9v`k;zfC18P?A7 zJtV?|$y<2e54lVzQP+ix2{cZLGa8%?r>BGe9ZvLJskpGOU;@{fQ6?-BDC=8qqXMsP z1lF!h1K+vjrRByC!%0i&KA)8^%WH|I)9wViXg;?H)73^(Vn?0851dponUV1A;fBJtOU($c21z1h& zTwY&X3@56aOHWJEJS$p5MjC~IrAhN2<(X&&7pPRBNUzr6fMg4Vjn&w$VVM%wIg-{f z@P&$#Y}H=p>P@nqDKxSp?0*3>bW8pK9qg{v7j;E$N@4J8xGV6QCh@xSBr_>wdz3ph zfA^GjPvZ80)+tSIKtl2)cKLqsWwE`S-Svv$}K=XQKP)H00OwJq~SSdEV2M~mHrbj9-gfGBkseO4=o-$RHy13u>C zcx*YW-aU(yUMkpUW!e{6)~NkqIbGBUWrVm~M0;9+e!#Zh1f&H~k$y|HWO{(_uY7tymXvqcbL7SjJdTa-8$}Nfans07@!R%M|C?VF2;dZYTZn+w z3Mxt3W6SkO>$kNHHN{g2{IV*qxQuH(+j>OUn2#gtc2Dh036BjrfJETGQLgJm5h7WN z_0+;>@z$ zacLk~2hW%%XX4{UgwsLd&8HjhidOv!S{$&rE+)xrJ?NW&0#h1#%hQBUlsY`DvwL=7=5Jt|-`j%epn5 z7rD;m;PY^DtLJ*TImXYZWSUp7$_472DrC#?f#y6`c1s)q zv{ua09i7-=ZH+j8Tg~Sw!6Ta)Bk{aScVc|wb0Y7FKp3)rf5Y)Zosq}%>>C?_EXt#rrpja*x+KGr*laN&l!HWx%;f; z53^SgWmY4@#!AQNT?@j^?B=*yrPR)g2ANGT)W^SEZ>aCLJig_BK*T_z6-GSZ*R~_R z^9`&)OJ%7Etnlu|da5gWCVqVfGOP>wN<9Z5VEdV2BMzJGW7Cu6~nYii3V|ojT8RM&rrt-SlQSxxKzBTROiVT%FsFghJ>2a9|G>I9JzK zLu;_exws!&uNFIZ@5ht#YPBrd(r>Y`b1}KTw+HlG6@xd>o6w#6W60qitpI(4XwiP; zk;*JJ`81~xnZ?-U)4AipYEEUr9NZQ(>|K-Yhg3#L7tQlyG)=l{O75}gZ;Eujm?fK3 z9XJ95yBz~-JiHhMC-2&)1QS+Hfa`{=i6P&zTEbANCEB#sd*nN_ih|m^KZI?J|7LJF zK>Rl8Q&|eC{RL_FeRqH~y>BgE`51VC&yGG*q^4fn9qd!?(OF;XW!~uM`cVHia<<eZ9KvA(5p?52{v95tQ<_8c zuvJV_IUVJjRB%2Fv%dormT&w^p830(r8;hnEycXjG5Qb!-}8Z(jQYvtW)p0|^5&x2 z3wYu|wKn<5Z@~pBK(DHM*)bCz_WG3#nq;PgkHJLvfST5ez>Wsf#6}~uy;EZS+rOqi zx<2xRJYqr>I!22844*mA#a(s6;oM?|qV0l!=jpJdkE7X0K zov1yk(s<%rI};i*79AP6VC42j3`QgKuI}_->|e@14u-KC*BBGGixv$+A_SHjRY6#t zSyx3cLgKQ^k^7=jUy8?I<(vtwM>QnQX)V+Ipa3X_?6`PAlK=dohBxi5do4rLxK=blf&GFn9lBj z*WXw+)_>QS0(|ePdPtry>&6F1QU4p@B!38 zQ6xWF(h>vDYaG*O$Dj;S&3mkmMN|NVmC(k z)`3Mh>m^-jUC|H8>(OwvDSns@h!s!pqwpjSveUrNCDO0^UGf)R%V48x8LunwNQs@& zA1pRMj!%;nm5X=u2SfgY?xx~xtz1cTqIr52V)sN}rsbh2{U2cNACpZx6smLDb1ch~TiTtyX;($~#v` z6WtFh2Izz4gY8RI#+~ZhlOTZDh+}EC!x-$ak4wNu6G-@0(YIkL9|CeV)-jc5!&C`1 zfDR};NBtm8{O66*tr}2ad$r%PEUt}v+FDN#|Q0k^UaUj?m;_WtY7&9;1))WJso2N zaoF#$sGLhoM7*{dgzm9B)}hVXN$K>3QZa)yVSFu8_8#>2Q6~mLr66jJ3%8^4R-wjl zaRDx2tM(LA)>i#wyW-WM6#53fQ*2jfMY4XGq_26g>FDHn0E*H{E1^}Nh88Q3aS?#! z&fSPQ93~bJK_}XMQcnP@@co5atL@|U-^2$vS!GeNT(XYo-f8g%G~tGEH$C_nRyG2$ z(z>7WBGc!ka`IP#kriiDNUtq9fTde({%T!56G-xFS?uurg3@5U&GgB#T*TGW_$4t!S4dr)$%7!FvskS+ z$!ex^l5rfnHill7*_e4a^3dDuFzW2$TDh3nxn-h^!esjDsO8;Qgeb$E4lggKr`PA7 zr=|MVP>w=I=9D|%CfO-ya+_sO$?R)u*WSfyvpycLHmuLByy$>Vki2#c0^F`rxD?R; z26XN4csDz#9zwTUJ@mz&Ab`KT+-=|j>d=JfEonE1$o*OTSz^P)(t zlrr)BLn!4Su6%0ksU;RG$yf93Vq+)u$N_?r^cV)Nops^CC|ZQ4i>Z-);o}H9pT<|` z(y}m|4#o*1Z~9_9UF@65Iay||xcjL3c<+RV1gmB(q`gN*5&K7~x|L5&l-W#`lJZt}sTzV?s6u&to zu`~6rnIs#}^pPI)DYlY$$FWjBIy3$2m(&xKO^R~7+e4dLBnW~42!J4Qoz1lKxEg3; zlha5u=@SCZ8>a_LQ*x%(YEp2K%$-^w4ky5PHG4@{TN8o&Y@!H*)PX?!6h@H5eT1-C zNvJl^cYFJ52>CSsq0&LQ$n&o*!qEXS!RgCx`BnS7`S)QYBPTiDk*rsNA_62{mXmi* ze87R$o!+#EojnjC)JZ1Ye>7U0Tse@4(T9`8_KSGLgN+?1;Uk6bP)bSxmPSQI+3tpn zt|b~^kWatvhJ_7?p!g&!)PL$oSj^6vKlumv^nAM8zAP7yKYvVLO?t)C!o)ot^e3PK zD=#0AE9co<<^(Y=Q^Uo?xgf4hP!=h2DChA|AE`i}CPBk_pm}u?3LLjC)>JJ8>j?cR z9DTYSjjyNPMkt#8I=OK^z&9j9GhI9nQzM#MAtiV8e2Ys>pVDoSu;SUu-GP7MdKZDS z7;;`*$8JoVk@$0($q9B#bDBWmYC4voc_hBw1_(B3eExj^_IvM2o|&HuKRe7-GnrZ& z-DSF6%)W+pK}DB~JY74@Av(Yunr_#-nF&Y_)SlKufIN;5L}CPzC)fsJ+2g0u_za(9QM&I;m{R_g!K@JCDtYXFC-8gheush%aHT)xkJGpG z+rWG_P3@D!5Syr;YbtEOfx~z;zcUAlF7pADgXXGGv+xng!_#CZNexj}YRDwOE--;& z$o!;-`3;^|!&5Ng&cSnSnqTf7v!3CO84M&`xGfJGqxw*%@s#$D^=K3&c8S1G?#J`b7q4!J%-^Y)shYYG?Mh)~*z$YW~|Y zPv-^cuhSpd`u}TiLrk?d`hEJX+yD;Tt8K6@Z_JFc$K7*zX5P;sOgL+Kbo7|OAnj8% zCxe#Ah*sY#jFYd2nlR7=CI53AqX=v<3IdEGyr-s4*|1f%008;B0qPYM(MAjHe7DR3 zK|v!@5M$9j?iS0EBaR_i5i)@o#bAomzcp)x3PPufnX|Im->-|Xlq>xJR|OYoQU>8K z1vhUx+@QtGREy5vsy3#YjrRd=Mn3>72*}{Ev4A7cXtvDK_5KhRQ&NNK=XCS6GYt&@ znd@3Nxd(t24OPtJ_k8_T8=)`jte)&}eQ^R+4DuP2|JH;wx<5ogv`FdM<=;9fab{3p z>8U2UAta;9bS8F6RXgMV-etS?;;<=_T`ESiRKx0bGR8suPS+6Ts6+2$>nyu4(pINo zwXN^gi+ru^kPc$Bw(%OoCJjWTG!N#x)%L0b7B(SelY1M8n|>|66!&FgvF1&397|D0 zaa)mb#YqK*!;o^A-kb+&bPyn?d9ZVtJ!`osR&D$}o9(uF+5aGG*Dc`SD9T_z7cYZh ztF*X^-fjb|*0@X^Z;G86Y1AfafOc+&b3G6g*FhjHNl>gMu!gXzOM|=b&k9yp1C8mt zsPvZGaf51)naTl$8)@ z;&GY1Yi==Tu1r+Uta*T~xUc-WHSB}E-zoq`3;^TgA;WdRw8C*RI|?X#KfoXgtSd~D z^b{~91~ALyz^AC&yw=uwiI;}8H(xfs$7QXt+s-%|efjk1PwxPv8enSb*k^O!BMD5~ zhFeQWpW0L%Q|2!#rR*sRk&dPxEuT?v&yF+Dnwt%{VEV<PK=!=?gY%??CvMi@ zfS(`Z{WuEjEqNJ_XcyA&#ara#(PQ?!Sb<=nZ5`MG6IbPX%X7*-E8QZEp3_UdTh6sL z@dMHqj$XQ123}pEauY1#K0JY~M*94ECsP-n;5tBVWVKakts^PpHbLyz37iE92b?1a zNfK}B&>oQ5fYPqWTc1DeP$Uov)@I{od%vfwOHKrj+%jYDf_=p0OQ+lXbus(-y!g+3 z_LLcLAa0@AW@c}dF0;ZpbuGBB>Dzd;Qb2k#ob=9{*djBULfE}jyK zr>wT20E6Np&$W%Vf}qSjk=0`JQpUVS;0urDt@ZEV3r>Pq;J3x*<2rqN>2pwkJsB5A zOt)|8-@B~I4EoFRyseC6R^^gTJU;9M^ew6a-k3+}AM;>r5Jpkts|^hF z$BwmYP}*;rAwcjhD)4q0^?D#?UY{AypDPz(;(Y5>=jPKABiJV}P@j z>8FkA$<1i|M{;|Wj7J~KpcD8^L0q#P{bI4T>^p77JQhE7dh=*h1YrMiFHhT8MWf06 z_|g>8>|!CJ(L?7a8IAsM^XC~J#G!i$l5wqQv5bXz)6O{*9jXnhz1hoe?k|&xgO)M2 zTz#bfsdKKe#D161Go}W6*8J%_4CAn@g(ypIcPzIKM=E4X(ZGj!`l#d*N(#|5ueBC6 z&9jg-v9P!03Ghv2h7|`2e|R0#mh-iA&I|%Yr@MU90Vx5bdwgdnj1geXFPK zRNbYSZp$PIS1&3s?8UW;*)8UvmxmMEZnVU{J1N#8{%7ZtXg~cC_SA`~)Lxu=JEfEb zN$J!&TsiiX(u&q8(j3{;o`qZEt0JiUDP8@rI=u6wRPoM9X?RT`dn!fX@qD>#V0rfh zMGo!>3P+c>Uv54pSLc^w*9{padaJI_cFU#7BDq{H-rn>dzhuj|DxfzSjcjK!Hi(yn z?E)h9Cb4)j>0BpK)tSI>25;nmjj|mOtO+i`Dk_X|metA2((CWt%1ASN(v^FZ1Ox>paIoF{`sa zsG}inlG6cT9^eEe0HYnxW5MtSj6^h< zm0-e(*;n=t6d&BY1x<(|_4Pz8I0NZqFpB}CzAP2VK1}wpo?KZFEy~xp4YX#w#3Zt1 z5!&R_{?v`?f;j?eVV=wfFsYrigfIqgK9eF;6vz;Ej;cf$5XoDm5R=a1g_r;l>3etj z7z%44WbFuq28_@ln9UCua2QU~A-vzEVOI<&pkh-fs%@eD84h@*=f$c(TG7sG#O(+@ z0_255TTLTPQui^4_Adre09)R_vNnn_Ah+s8(bmTd^o^6$^UD4MTtC2x6!qgfv89Xv znu>k?(5gYSEig*vhYTr9oAd#NC?B@O9kUk-8DLFD2JLiR1Q`Md#>wL;5Y$kijuOf2 zc>JgU_>~$fJU1Gf!>7Z^(S@FGTh+Ha3<ain^Q2xQQ#8wJ$bhSI#g-u%C!ZOREF@ z%a_RrVnZN!kvw?}IY7I2+jM6a>vXa5U$E(}ms_5!jhCaAV+A|3@s>0IETmfTVj@XT zjFK{Mm$WDmuV@~a4+hvVA9e=@25MjMf)>ssO2ZA{c^=70@&vs@^PPe3EKVMKz(L;S zILUm?6_xF~Oq6k%y!JGQ$Z(o;56ywUOE_ue$dCdhe|wT!HR=>W;4FFZmSZ&75Qsc4 zv3UUBDf}*yg*$kH0oWD~t(7P$!Cp1LF$AZ@^><(1g=BDX1e{^9so0POfXr0#lvvE5 zOp&n`HDhJ=k;vjM4RO|^nkZ~;qP$-Cx&wy@#m>j2I-AS;b=lqRq|{`7{3z75ngt#^ z(naBfHUH0oB9x{hh8?*x9?m2Ro9#uG4e`LQU4vCr=H~Vc)M=nbXRPfXuR`2|1Gem# zfUKjq&8)XK)8Sxo4E!fD3_Una0#2&6d!L;IJ%(a%izW8otn^Nkf_#6)lBWT1+|1y) zTx+TkfmArr7^!Zr*xXubaTLkR(MtjDxhRy(k6(%)H-w>>f<@|NDY$(JsyOV&dgBHR z#XttMlb#K6mO$xQy&kb2OG`okIb|FwA^K0=86UtA4V7#e2P~tgmrM7e5Upos;J-6Q zP}JUOCLLnNbRYn08)b;AH=hV1Hv|&0%aYRyYFi!4AxZA!`ca| zYn9B8wq(FQXX@c6?+m`1Y6dOt;&>Aa0ip}`KBWhe9*C%EWn&HGKbD7dnc|S2aP8Cf zL`2LxYoMr};^m&@3cQ%+;Js!gP%`Uj4%3jis?j>^-I(?qg2#p!vnYT;kFwv-ep&oe zxM%-q5n%0W#0r_nPvZ4oOb-TokZOt#O#?wJki6K{S`WuG;IM%=L$cr{FgArf>(tu` zXkdY+?jm&^WA&JgEZ+!0--(aS{zrB#S`KV$@<iVtOrpbjZo8FAROE7+5j;%GI5KGv|707_$Gl+a4`z zF~#khad6WmJavFCOl#k@1b!J_p67i2fL%(>lhxL!H9NfdBh8$ zXU(5+_XJ*ZaRuKuB^x6Vz8==8YLkF(_+0u=RZCLX~Ku)jJOtsCQpO+c1o;F8E z-1f(2aBQb`X!E?eHm2Xw?aR}m$S`&H;R^Iog|*`upmw8T!GOu9jhlSAn3wlbdME!JbUb zD~Huv;DhIBort2OxTW^ce#X(PWw>!sb9X*?4Axp}e*QY#-Ix*O1+GnH(>Vz$5&Zxh zc<2@B-FW4x%EUoW#4+?GwQcZsG8pSPdNEjU^Igi;al<9#QNU@J1&De?(qF%FKr9;yd7^OK4>207JNP# z?q(Kyl*tV+31Pky5{%nSJ`vYx#}juKlaq)*7m}p@bTP{p;bESF>4*HTf+1p)Gl9hM z^sHTlpv(qy9~YRTw4D3{_|D;Xk<5E?Fw8w<(1Dk}+5~)uDweS1(M1m)m`Y));C$|8 zj07GHwE=Uj*hs*6np0agMi*ioegrYgkR0kmhfe??!Gr>U#P97OPGH!M6v2mC6flY7 zNq_b!U4O0h(iNlx0f@KZRI3Thux)Y(>?RCAQOWF36G)-B3T*xd&;*9MiLeeHAl*R^ z0(;bHeiP6D!v@Sv=2(P@_O;n8hX(|OCUW!Li9*|k$a+^f4oiA#eTLBJBHr7c+e{Hn^#C1a`di`x z4n}CX0-n*Y9v=1(0Our>907m;9Z8#voQV?x2rb7#nb5K!q+1Vab`gbtR$HI0RVl$B#C>`F#bdk9{1^DKE#@}*}mBjNm1OOIy4MO zBEf`%uI!kLgf=D=fa4V=y(u|}3vj2ayjb%TInq^H=d5)@b*I2kyXhx-3~2MVPsp16 zwpcFH=WJSHwgJoM@tBabp6Ft2UZ2?tn&V_!v#~ZC)3oZz5!o98gL@Wnz;Smd=5WWA z193v&;+X6?G$y9l5ZExeXTy|X2T)Cww?Ltzl;Pf!%EJ_mC9^ea!|RlB=JOJn$|_d4D+yl?}YvWX@4lht;tBt233Lb9cv0| z!VdF|zm1I2<=acz(~2KFGqxKs6fN^vv7Proi=)T#nQdPq5k0T7Y~`kXSbD(kCXjT@ zCZ_`S+PQI4f;y-60mtt*(9>2mp)mQ_8k+GWAf zW|l6UC)bh%PC}b%nBZXR@w&z-Ly10RMOF>212%qhuk?ZQ@xco@ka^4G^j z2+akv?rw9|q&sO-MirX3r*r>I85Rd-8dP>J#_;siWG*|`Q-rSPI{y|z7{NbWy}LTH zk(Cky&rrUSjM(|be`{cKy&$R}A zdt3gv&$qSi^a2i&s2CmKGcVYOhlikIpA=yr7k-PZ#PF4vCkvk3-sFp9X0L8$V5Fs=-fkkzkaGUTKJX&JZn;h8b36ldENnXNx z!c;xhxT_&OVPYY}o*X{ko37SUq}z~vk)Uw7ib=R!^#HcO9^7!fki#VQ*qy=DXu3H6 zT-P9V7LAW_;8Ns4Yhm7|J;AmR$Nk%aP=Pd5IGlzY6vh!umKEF0-2cnOEJMg1M;EsN zbeDk^%f&MNH^flkEYPZo@d0Xh!Fs|j?Mt}~#k?ulaqUfp=n#xW7uV+x<9<#>VH7j@ zsnfTG{w;`XDp6vsKW3ru}pfPqdbYl%-qo_uNL~nG zs*xPcdn&s8WperJ_@-ZQX()xV%{H5dyTc@KlI-v#9Wfr>JkqPUpzcQrjNpdND-ZDw zSf~-NH;Lh8Bvh_0kaktK&*V!hR?lii*ACK?)mA^4i1DW+(5VMBbUPo_k+`Q=e zd+)qdp#3^pr_Wk(F4ozjUi|(k77>JF;t`XpPQ)Rm;2@dxg^VN$wzovr-ts~XSuTb6 zf#vdoeZR4K9#;8^5;5m1b#Bu9UrBbQhHELh9 zdcA_ayw?UOreCd>&yNex>rN@~EE=nRhNWB$dc&LUZIC5v;M?4`eUz_XW}Eq927%J{ z(Eu`Lj7~9T*m?5g`mQy)>b7pD?Vck8d%;CeZn6HkN9!qy zV>M7HY1MPXSR;J z?r-xnLP>1IxFKK=L9&ksu=8*|2Y&j0mu+|=AQ zS?iNJeP0Ac@BcS{Q59t!?x65=7Um8|Ibech9S@2Ju(f(vrrYo&)hUpjqPO_5SUt2> zi>JU-YJu2O3$<|`U)S?rz>jsZOuy}nQueo5W%+5Jf>vI3#z^u!+w2y$1?ByB=pKx` zYX$b3#cJM5AAo~YIjFNFLn%hc$*X_|DOGXE`zhpb=I2{x;e7~ zN*>eM9Qd(Jw$F=I3dHdq?8pt#@?<8D=3jm$#@)I;jNxRSv6Sx0iHZfFjbvyGuXi+z z9)^Lbj_xs%#qEO0z$V41Y_a%p`alw3*vvLbzRlQStQ-bJiNzy2Y|#$#y*ni0wYl8< zvUmas;`l5ocPVn!E(KFm<1AnpA6vkj>=Yh+RD9}|KDg=O#o9DvR^Z_omRJ`(Hnu3?CIOX;95j@Z}m2d=&AYitYdL~m&3!yS-h!YV6 z|FqbFoSGcwL$ej^V@S|W+i?_-jDWAwJV&9BO`tjj&Joq`PQpG+&0>%Qv$UAabUa96 z^u2S>M24h%%E7m9+jJM2_6)im1~3`{H7+#vRtd2`q}Gw@SNecPv(K$W;*91h zS>%ZiP8-2y))n8jUU&EsMbNQz2fo2#UdCk;H>x`+NM)RnL}Rm3&0bt~$cyF9gYo)> zj||JAEdB#r_D~E>@Yo$>sP=QKtlU<0cZUK|mTQGhLu1eElxT58YqoCHgHeOac!q7n zV?-6zagR|3+iyRdyg03#zu5M?i#!|BUhpgD!)$v+Uhia`a}uzG!Su0&(deyJ+MSfs z@~H@97F2s5V57urecbR%1wY(=7q9#Nv5~C5abJ zN4b?_@_E>{gTItBqGbN+dVfo5gsOv?N3-PqH4E_pkGXTIBw0Tn+!@Yh@R6M01(Uj{ zWcB^aH83E!{bT(d6pkk_P#F@qsU~ma)%M512XkcIUaw_)7J7kuhns-+4mXwvyMC;k zUJ3Y^fsPSicV?@HE#zng&=hwvm$7!*Gl(mKgmB57vXT;^ zfQ$Qx=JXNGO*^gIYj2!A0@7V)mi3y?Bu-GQ>sc&vqELPUOTiBNM7WO+D^Q2X-_NOK zoA>Ep^A&&=is)I;0?df22QMI~4f?;stKFvO&0y-T!i|yk-8uRP4494h?4%_XzjxVcZl^-1f zgFBs0qd2bWfe~kF7D~qzFtV0W(ZP1wGh9r`BBO(ufP^?hWnDM$|$@+@9m0m+(_K(DTdNL#k{kP?kFS?toM1K2)f0>iPcA7@(#4mlJs zNusD&0<*@<#I$K3vqU1fzG;mo)A7wa`cdKkYdlO&R-W zQuoo6bpa+vj7OI#7;fA#bhs*q*XM57m?apU8ybff_~8;-<3X#)3_@tqm1=4Xkr*Xk z2K|d}`(!Y>`8}>J@?=wQKq!T$@ncD7e9PuAk;+)#-*b{y8MzLciKhoC9@ zbyk7Z^C(KFxAkWIu!LlJF$s%lA&f)&c)&x zlrlvTluAhBi$RmCcBggMn@r86ut`%M;HZRFMd)VLEn!K?6vk4pFpmYe(tr(rf)VM< z7Gh7b)ybfok2jWVu}E(2#vi7~e98wSP{rzQ)~oCFGJS$@B?^`$4X7fbPz43rM3rnz z$TI1U2Dj7eL9g8pV~>Gp`DJT>gORhURO`~phHQLXY!_dbX=oS(IXW(OQ=LUs);K2T zj7hALZm)MY?hbCdt?{L!-IKSUvFXvX3CG#rk5aH4a*b57>Ib_ud;I;5PsyN075nDZsNK zwRRj0)VB3B#F(WzUantOyTC4C1nw~?dPA_K&Bx0A3rGk8WOyV%rKgw9wvQiHYmo7g z!YaMmp0!c8{0tOe7UeS&=%5D3!&VYB&A+o9#9#5K!Hbg72uNp}HX+;;7uZsAAA?GQ`Wt zG?~srlXWX}OsE4>Ycw!@v>M39M`o7c&ppv!3LG@k4iF238&R6MPTHN{9ihw%u{-`*rfMyCv}P- z{Z#+5__Q#ez3d;9-?^E@X+WV=Z7N6rjbFY1a745Y1S^`EM`%kuLpxevCq+lJ2D4-z&ryz1HQ2p0z&tHC$I5CmI@mUGWTH z`>0x@dA9U*uY2oXkd}pm3`lw0$K`stt_exch~qGXB#R@$@F{IT+jm|SCag9P%8`=; zj+Nk>@TCBA*RJy}(1n&+*5!fwZ&Pu`E64hOq zu>xeU5A4U?4I?q0a3fF3%7&P*y{dXP6(t4?exggrdh_t-?Aa#r{JC5|Jed1u|7QRG zvuA!vH!fGR2ES{YFyJ+UD3>+KBxflZbE@k}Wy_dV(rUJTCiV_DVPi)fQ;pbCHU=@u zld?v6_XAdjb6}~2)HOzX4c*Yg<8GCu!7O10F?ANp6@W$61^U=cbaNj_=Zj@SmG{{R z_rbxIH413pgEy@rKwoEXIeVIopBJ!5QhE-&i$Y!uECoV|h;ZXupH)f4EGA7ung^iQ zYxP^UAHpOQO+;`6@*xC|fK3bNXqtlmi&-^Z<0l_3a0<4T!K5@B)aq64L4{ zeBzM49a`!%1VW+rzrP1oNg?0W_3u3*T#@v z$&8SCDYt2-&Ha@+wtp#S8Oo+~T}*U8|r-2-^*DS}>!%?1=P!8lNRi0fHur>$6p6h3Vgf=S$*CBxQe1VIpn zB4{;-=o5^An_6bA_fA=d>VoObi>!qsA&9+%km<`61iD}GdN~4?Hg4vm5po2UTys~D zkbXge0?ow3#RG^&fl)op<9j(zhTZEhbphGS(9rsB4GJ#P!21^&o~vmD+3JWM#~K(^ zpOtTH8m-PnGQ4TsP6qu@qZLgVl+?h916IC+ok`=w2<{pVCGp-QrWpJx9jCO*=Pqa4)~PoY4aY?!(Fzk$jM7(Q|qDFhO3%s7;U zMBKB=;MZDnXf`g_q$Ev2b6ZAlwt2|Nxin`Bo|x}<7U}hN74uR!6YkB2{dB%~c>-P# zL6YHJr_&yFy5k#wHAXw3@&e}zj-L$I@lqI2*B!2xv&}_1+kgm6K$)Y~agD0E0Mb+A zCr}ukJLt7WHhnbIz{@ZS81_c9uU|n1b0%Q#AV!UOuF%P4t3A4C-QEtafn$tzJ{h#e z6X@qO`E=8rK(lUzO0EaJE9m4r$zl(npR;7#>VbETk_+3~4Ej0A0iBMAMs2ygY5V&9 zQ*hhaZhoc}TKU6odMyq4PWR!xlkjb-MEh*I7b7~(s)?{D;FXGHo9U=phj2!v?q=Ovs1^>{p0__XeUH!>{#3C zD?Zuqv-f|%W_9XFkx=hi1d|moK1Cw6)53B9)rk`EAj(s?P!AAei0s2DAOn%P@OM31 z8ZawXR!P(KQZI_4-iw#z5?Dn_!SEm3<@X%ce~ch5TB*Q}KYZ-?0~R`QI_Y3iTOCXw z$I~ihR4jrN2f`Q+TcZy_ngHsZh9TqI3F&&a4{y>34omcW22 z_V{@*hsjn%RW2!Ev6qwpA2vc8Q?R+D!|oMCEs;?4r1!hcY}wju);~e7w*~@<8Urb_ z!2a>DeK{GmdQhq_N4(2v6gG-F2_RXoo6V&znj|zi-JGN95wJ$R+lT7K>aMTaiTW z%anoA{5653`7;fzZg10wK#YuO#a$L9i5n{CM*fzE zvbxq?Bf*u%sHV~#nf1%`ksHvbHd#DBr*kl86~GHc8*^68GtQbbRNxSn4ViR@!}e8x z6$3@4i6!I}ESi@CQNrS)dHFd+8%pCu8!eK_$UNRPnQ8(%x}28DE=N^vxAmbNsFO`@ zCm?m~EMgx8mG1|N#HXr}_>dvN$bd(cHxIn7W^(8v({i%fb(S`=&yO4%SoMZs;F!wS zVcAi;t zRM+mzkFz)&v+pR$q2rOY|we@CNl0lB4liREAWot4BM*0YFvh-^(-=K#ZC8uhs zauKYhD%`iSu!LZ3WN%V)!azmX){23Jb`S++1f0Yr>p_jPJg&egfx7}}qjwOKq8I}G#${l@S!i-R(08UBe5Usx-`6?%!I@(LD3pRBF!jhdDGHb}V07B1 zTn96ILYHCJn-DRVZv6daxdfS7*r8zWRkR4!GRgDssI$~dEr)n0fGDl*c*dmSid>j+@fJ* z0-@IH?iihQO?wLgv>tp~FTa75lyg+zz>t2F44A`%<7zV4X)C@lA$>V?0Fom#Y299r zK2JXldY#zUmEfe&Fp^AK{r1(-njQj>7)AhjPoYw&1H8~cb6i|w#cbM2E(~eX1BNNe zi}pca^-U=egRGE~jzb%GW(AhEe_o{N*k)X(n?Uub=8eIQd!G``%MeIPzSnh&*@uiUovuP_cFA57PtFNnm!u=;?bsC)e{qUbyy<~ z+~-4MBrHafUibQDavL@tQrova?i_ZPYr~W`Z$e9qpXj0@5Q_@G!h#5tT(&0D%Yosv z{u*>tsLG&yMw$1_MdYoU&EEt`wpQOM^T^@GIRPKG=b0#lGlp1JRKEHFb3Z7UuKNLZ zKcJSOokmesur}^qthZYmT=2BDMP&ambTNWd=!VNENUqk)=f}nBa<Q<8Or^9 z+x8rc1J?ZS(`?oLm2USS0}?`*GEdPcOWm1HJ`da8M});m=$-Z7R>FNNo@;ByzrO2= z(t|D6OG0r1L+k6-aDn@sgH`WASBp7QoSWry4RG@7IrZW;Qv2!I!0~jGIgPVU1#k1J zX>|g_f(K(*IMeT)LcL`PJWd&|(VyZtW7cc+4AA?Z65nr_2V>l(*SZF*qM-=GlIl=( z4__>Woz>BSh%;w>#olJ8E~$F|#k-L&h8pVn4_Kmicc|WAhdxPLhRuaJaIg0teij&( z%z;bR!eud4bIh(vi<0fW%iMUm-a$%~Gq;AJZP>op_Rc92x@bBFFqsrjsIa3GTqnPsZ8;(VsFp;s_{%rHz zVjx=^*08&H?yZ{k7B}`3pSJ5(M7Wb=k#z@hwMhQ|%stz7;<&QUp6|%R$x|%L*Oe!d zkTkPNlMU(2OwR+$0jJ{$U^a%n?5{s6`Bt(mStd=Nv)5iT89=2{sZ@8B6cIYVpWZB< zCx%G*w-ec}@cM9z?do@#00B8_DeG%y2)w1gY$@<62JPNNV%rqQHf_}=_VYM->+hRr zaUu%?I)*p*uiwMO#Pe+Cdrb#m!1CVUzv>Fy7K%HNw_+6_bKoRsaEO~#*Q~EBvOJob*+g%K&YV7b9(LgSS&o%_DeW@ehF9BQDGE%VFs7(SGgV&dgXT~u zFK8QEP8MY?f6y*wgsw((}L-!u0X6uQ;2DR%y*c1sn9VUH9RS>s7LUjW=ITbbkC+@nQEmK!NGy zt#_`+lgAIknNE?ti-zZKU8=+n^?T-Si;`OYAo2tI&8gff#}~^qzIX}KJ&$e1n|*pQ+U%{#^FK@!Pqxvf<#{h2;I3RuUkx+i zpwf#BWDXf1>MoVdfPb3-kSw0EZSb58-|v?KUT}HSIP_#VLhEcUy!kBb(*_6u)df|DFQ2Ejhs0{MNcrhC zsO`s%n({A1d$3qCoEr7AbqYVMUR_fGs#dFRE9T0h-UB$0wi9NAr2} z*Hh0Im}tIW{?EzhBh`G=oWGrXK2-iit@--o^I2#UZsUVA<;qHd3f@pjE)uwe!+Z*^(-=fR?OEWQ|`%bfhhdU)?+He2C>Odmf#9K6IolI$xfAJ{QgBf z6@B4IK)uVGimIMR(K2a$nI447DjaFC%HON+DgNG@FY4nll_)2IVvX8P$C)KxBZ#GQ zd50)$XdpJQ)vt*`V+es8{Q&canyWe0+cC0zPZwFl{kEl?55f?NY8zn{=xo|F-+rwl zg(Ope_c%BXh$Ea9Q*qbbv$|r$`z(Z$KiI%TaEFy5u|-TLxWwJW_~S@}J^QjVMx=Or zj)CgjPW7Rb+tO|?&Iw`+}^~yXtA$hU_%d^CA3qE?pDImMrbNt2UmVS zTH=>T94Izf^BHO%JH|7c{5SOEv;%qdF9?p5dt6QKxkNNeCvPLv5hY zXdQm(8Z~17!<+2|eCS{og^#;%lWs#`oD2wOsW`b9ZMKK~Y|nnOmL5!kuJ&49(A?5? zXaXi)#dfX*QcRZsmgSr1dWGv2JgdWiFmr$g+guU%B%)goak35nbBKCjZlcMZ!k-X- zf}ZYlx&%m_HHdN8!e(@h(c4&f$}Cw#Dcq_I7e8ii@dnOCxx2UVD!MEW2{VBf;o>!d zPw|lO88An__zJf#hCq9v_rF6#&~jf zH=Nco(bL0b6Fyh?0T#4a&tsUrDKpm$u5H9{#6Im-)i3KJ_c~c`nGk|`ZV#{qJR1mB z#UmP|yNy68E`Dsnb-a+ta4(>UWhnO=;V0dj%;YGqc+Mf;g!`~5X>G<+%WxmHV4=sA z7C$h;9503fxl-zy#!{HG9IMG4mID&6FrBDl+H-~Q_B40nK2Fn0a3h06ZXJ!d5E;uR zM*CqCXs8wD5T!#X9>P1Vw(O1;1JJ@=As+KW=2;#^Zjqgp#-)dhGh*76aW>k#Bnl{E zO3}%>dXAF?&!H+fqc(SC+xbR{=9P}OX~kJqowKxp3rr{kWseqlVGuN{u4W>}ND+)+ zYjL#M4vdw%XcO(AyLrd?lRXs8zr-5{&qi>NQ8q#G&h#xdz4;zJB;Tyeo%|bD9rDL~ zOY!5C?jf-JXH-|gLL7VK!lhZnlH75-s=g907ky;w5?}fLD9vMQ0ZH3?1f7e+NxO z12Qa-cQrt}S|uYooUD%T zF?>#&;u{sqxTfg5IVM`JIS-GpLL@+BVAiq#OmrGNSL>aI+k+|M!K)RGurChc?$P*|GpiTKD7~hwuD##_As;D4uEl z#zw#SBVO)b8$BTh|B|;2fNprrGvAe`}`*O01(z%Iy{16>AXL6AnM6 zZY7q8S&AjC&FW{r5!c6ab>#7CPy`B7BU~;sGq4Y~m4qH`_7S(>5gh_#q0;$J1dL5z zUb3wZxVzGy!S@jSyjHr3DKWEs9e&R_Rrta(76Ka!UlL;>o&!N6%%Xi|dr}@s%NYJc zvSMN+t^FLdM##;{QeF5aHI3`Z{lj3&ALjWm8Q%=2A`;XG)LRi4$0^2u$y0o;g_RWX zH-6Ehlxhn@}yCEc99z&n(V&*dc)%-T7zWr0VuS_7Phv$|}W$NX%WDE2$ zF}^iSaKt=eR8VN!|iwfmf+jz~^uER)fUq-@o)!Rsc<-Jzw*nUNwKF%+g?AZ5R z7#fPG?}|s6G#`VrwA0rLdDIkqEdCF9*d@@#CDw}kVzg|AME{58KG_rdA>U4KhAGT<~iHVu76b2m>6iwB0!4_Su zqD96-6=JT?sjxZ1l`-_3?8lEJ%syL{o|SPr2R#nyKf)j2Aobh z(gqWc=1!rO#X)%ORoNMzxuuVz>v7epK+|mToC?Mj`|DpK0GXrXxyFipkg+=2X<4n2 zWBK6LZ;M%>^XRy%8m4W_&37A_O|;CGQj_?!FS4{*ch|6RWoYQV z59t!GSx?Yy-tlEB%x&AX2wFJlV>&UMoV?sG$ETOqrByR|M9$Oox&1y!e{2@VGflZl zYFcG&8WgKI^Jjf^-L|HB##ywWP%7JXx_3io1#F+(W-Xu;q{ew+5Ci089D^ei1=N;~ zPP}WEOYf92ko5x6MoRrpLI3CYUMGjmz8Q8G2e@cJ)^jE8r}cdwX?;1jRKJJkA=2cq zTU3%=ZVLD|H-R4G#T(E>&z51s9Ai41O+HPphx5|%8s0xV{w3F?em}LutqEi+-=Jq| z9iQiTA?vf-CMz)BJ}G@;@kwk#szObRS|yLj2mdXMMu&@5Mb(O6giS0oqfO_jybxPI zgMbnmzMXscxXcIVDVXee4b#%86JleykA~yX9MbJBT<2~Neh|vHxp$Q94!1Kq*Nzo9 zbqkvT=OzLkuq#qd>aCD`&#+=;rFM`YFgFWaLtfaMht|BynLdJ zLv@t2lU=e<_f2WxYKj)^6t;)BdAw@l)7RN6TgclKc%iu&{5O32xrA$;KCf~5o)l{% z;tdj#$$acA^gDehtY@1=Ijns2Xr!o>6QUzH9Z)@oCVzAIT>cg25a0N=3%6H?mls8D z31NX^P}DAW5gpOMtH)@vV>}w+6Ys-=IS=voXw|q4&>cJSMatkBs;XfmW{IpV@qN7c z)ZizNGjpEpKI&{s3sbRmPyP9_1uvT8^~Ar@WCn(GP!of_D_0$&SGnp1$T25I*c8#S zS3bmgYKUEyxZYMEO=Hb>MaaSW#`oXwYeH^O_SKPs?=6 zODR^O+ASQpM0(2mrnj=vE3RbKMbR_ zaGI7-gMn^7uxWnkaJ>H>j&Gc2L6-t0{anyvbB6z{QN2#N*~3+8UOU=u!r#=!Sxh9w z-;Y$i6d5IMRwt;V4}k1`cE?GryzqdsjRSC%;+8rwU0pdhDm=@&72{f&yq8ZQEh@;I z+Z5lkgu3C|cvDsHw85m%L#{%Aa*^=F6z*yj0sua=Onbvcw?>c!{rBVRF8NlABM|5g zP?iPyRfd1KrMOv3 zmAbFT9jo8-`VFAVP04ltIYjBcY9Dg^Mx&-5E-4MVzL1D(+Nkjc({2l{-P)Oal`P)U zi)qCE-a*rN_MesW!(8H3QZ2P#gf-}nuyWQYfA1J6I#0bX?Jx*-QRgjST!Gm|U!w09 zdFN|1&NUtekB`IY$NB8TfGDnO2NuHdCRV&vVOHnN>$W~pG3<6z1iF4yjYI2DPcsW#fQ-@`6i#&E|*RXSL;WTJ4-mr~% zVe1Cj^xFEFjxS8J{s{#W*NnItJZ$Wi#x;~s%tO6FHX7s>X;*gjSs`0c1jD7sE z%?_(peL;5LFGm-KXWd042sb#XDWld;Se;p|?&px-2@3M-QHvV4lksS9H|(Mpb^T7&!3o85QrE?u zt}6+MMlM{|0m^gOa=qr!F66Qkk6p7rcHwp#?S4khtIG`t2q1!#twNFShwS*qKFM$w zz@Cp6$@=0;l6+yRfc?2PzhUf>vr6F}xpXZv7CSd6Wy4sc)fiPz02b=RVvjXYh=V!$0PallgdfH@MFF zyh=Nz1V^*glbw-Q8WWX&Gs^xa+zYeeow`!H`!(aF(L}B7Qv?e&B(wa|Z$~6+KKTV0 zp!mM;zYhb7`~_bTszFN^S1e5Bbh_mb8O+#=cw_!9_vsUT*0OvX3! z(RA{0em5Bp@8_jX(@iD?#_Ypr$bei8W~wTEn2i=ukC`@tW=^{{@HH~qIVLk{-yu)8 zZ|Fk;VlhiT<(CB1uRar$#itS}qlnqmf&FaCbDAE<1Y(gcRvh;K8F%S1 zj$30KkuS9NL0ml69&MJy5nvgbNUsOp{P}pO?;)tLPOR76!isINoq6zYoP~AyX+qwX zYov_u{L{imlE>Dtn^s(O8qrO;mpvU2ePLxf}<{z@V15$St~ z{j(AL$KY!iufW|XU+ChS{{QOKCmSAo%04I&mVB(DQy;BZyc!_Ok>ih0`wOM{+E4}5 zgy2**@SQ9JJy4zEZ@5;XdL|vHfd>}mA93K#o_Q#>f3*9iKZNmS&z7!j0Xfvsvw*0L z%G7R?T`?1ftqFl=FRmE3XHfJmsQM^}pt`hw12XD7O~1d%bB=NjHSSJPh09 z>ATg}_eDk;<|n$Y*z0l@sa+I)cht>w-y8JQ!V}Nv3z5Tf=`CtJhBIpsst~T9N~fSkn`(JQ)7u;!FHp-Z)i~U&!2{E&J7Ll***oXS^`fjmGox1dPH>C(LBy zmEqYWAh!9CcQ!g`@C9=y-^~{_lrV6&Gc-;uBr*bOL!a9ym)Q#M7A_$(;0gO3(_+<5 zXkDETn6WZ@7!PLfwtpd_YLiXF%`#czF^(}Ee7u?5OPIy61EOG-t9Thtqh!Y=nVi`0 zP(5==+P|}Xf^=a}R_}uT@}*D3E4U1R5ClZ7%a{u6OtoF}55{bsL-?h7H>I|LHQkO) zY7dpi{4a4&*5tO0^fUK&%uAk3g5Xttl1Cbc`R0nGu^szC#gRB3l{MrnNjdTU`bC2W z8WaJ7vTMIeC8J0<8hxPw^bv{6J2g}GhE_T~WADWP`L0C)p9Cf4=Wo>FawqcJYa!ET zbJxY!N|8Hqne5`aHSBP*RlAM`qi@nJ>Q$!LXDj{pF*%gYAMLRg`%N>Xxz?5^MNHSZ zQgt6hu(eV&O=b=w#s_?|EGUD|!n4FbQnf9rPWahRPM_9e)2 zQ9F4g2kj=~xe#~2ks+9jeF*{m6UJaC;)b*}Q2N$&#am5wsbJJgCw9VYbX%ivyT&m3 zf9VfJ+b;t|)xDj=m26(TB$`MHLIWw+Q{v0w8AiOv#XtaR52ix?ek=+BhUkk z>U(vWm;}M!yQ{%GV}{xgFH2)Y%4|U}Tj+~2GHIioZ1Np%%2pvK8PrI$+j>1tUWlTbO_otSnnI4;K2;tR{-MJ zxg#yg8cud9FWzFzp@=6DERHm9=rPoy$eRH$gAR%&mgx*I+-{5x3V9M&TIyh8=xzv4#%Pa?kV3L!_>hE~ zN6i?KjXQ?8qxxjloBC&vbn$yq38%#`W-I-k9FA$({F$^{4-a+s)c#c(>4-ofB9Pl2 zflVfx&I=KmifB&T6UPl~G_G?NkNLKBdw09gS`pBUVvh1QTnxWVoy)T>KFqEk7OQgr zbu6B#aCUu8XJTDFTwkk=F=*rBCF<&$g+Hf>S81_N4*UN!mVS(%*}j%}_T~@vpT!}4 zVPn2EvS*m(&JMU`I-sEk2k*{Ps=Wq}O{`s7wje7NNo1cLG2G_!I}=`@x+D~i0l*A_ z#E6Kk)jYf>jKpq4w0AaA+X|wTnoC?$`EV;+F=P*`? zt@$S-ZUFFTLqY4uq zq8-Jyp%M??PvGHK&<>}Ni$XKnjpe9+f#T|Kc!~98Ug5MlN-%s32EYF}?XK=?GHifK z%DU%VB!s@g9{DoXL9&IUVo8C`uTdXa-%o#yE>c~jhYjSQ)zzszu|@6EcAniQU0RyZ zM;shlpPbO%{1w@TJv_hZ;e^IrqNWQ8jJr_lQ#8_pM#6L^?3_lSQVL_zhMUahY1glr z#*?RUEr_Ts>nqC%GZE_(38o>zZMv9tpi$Gon3}%R^q4?R+xj#CCeNuUY3uIOyuiAd z-EWq6YyK*?GKJo*$2MPXPzd4ID_929Xz4oGqI{>qZ8d-2;c;DcmPTwci?)u_1n_ z3d?al=|Ql0zg50YGabr}gg=jM=7wQ-LmTfZb%{i%gIF+hoMej(?2sX2_VNfQzT0jO z$8x}cfpC+3`Tn?fciM>~3@qOz<0^f*WT%26S+|NuWhv6YwT&oW)9faxxFs<5VrJw^ z!!2fhI2d=PfvkLk;oVowhqs>%(gnJ09A+&>er2TkpF}OyLwJu z^^c!S@P6LmDnbrda+Mhma*sg9+Z$Za;TQYsA>{$k^qurnRs_Zy*Y8cee_=AH@WTR$OW4b!PHrS0U`A zhJ(y(C_PeEP(>a9hUlyFI35c9bxAlSV25LDblD~&aV9Zg0s;vD5caz)&#{R? zMM9L|-X*oW;5o|FvBjvopedv)&mQGd-LTw8uFTU2`!vuO_assH*4(3j@o9j@KDWFE zJBfQH%HQ!qrhWkhnpp@9jrgHwd$6ToCLOw9WJi&rUoOLe(qjeJ?`a|S1XI!wbnWL7 z175*o^|+Gb<__PIM*12mKul0Q_wrqKs=ZQgFUVdAnyj3()d z7|J7ozG~`*KjQRT4F39E?*m*459KfbA0^ogL>j>j&Q-*A@Cy`ihVOa?k-7aH0G&BO^MI&j_SOoa2jKtgzAy&fx$ z97DSRd+~Wl=}?n0Vg}ouOR(kSIc=&^V;;DBO|yXnAdG4RVbJd|C{tO3w$UghMkF)^ z)obBCyY=9ZA;-#nQke1teT}URYEOcFs`l`0Y?OvmBBY0ums--sxLL6U7^4hxR5)$Z zMJZ%ludAXLn@kMq7j3RYXdr`ZNLrN>oftg-U#Om7t>Zmc$ukn_kvNfPY!}sR?W$ad zh(o+~i!b&`R(0_Z)6O9mi;NxmWg8Q3LG{5xb)V@AUn$RxJZrU{trwfiyW90FhIB6R zdU3P4TF!13nxnjn0{TNoMDJeDKFl^(*LNR{uL0Vd$<`-+wEUVIM1$qm#sQ520q9k{ zTx@Kkj*z<)^;9R-k)9_b-+K2DU#~au?dIlgzPMhE`0fXebrY{v@$LJ%{pMz|`rVWS zsKW0@M$YBt?!#hvJySpFbHldl9$EF2i`#WvyIJ=o9Z`%}^Tlety!&gjT-?stTP@W0pAWO^)n;{n9YdBPE#9eB<*yGX(+z6^ ziT4X83$yjzQilvXq+y4Q)q3{6L4!iKU9_LjtWjib^Q=l(>*9BwDb|qW zf!$+fM~9WrJ&|+ZkYzkytW59Uh;;vEC~{7pF+1gO<~1oDxF#JoH!zx6x0cbg_xmKxy@1sqr>9 z6!=(exPD{mtx4y)nkd$;)ygyD%A1>+R;oj*C(tqC32>I;HLV)1&`Lr8`r(~Cn0X{t zsK|9KD@mK!onGkhrNe7vOB%9Cxx)+hYi_!`1T|qa_0s!-U+?g<@H~CmXM3<&M2+pO zWnjWjo|AtDOf_jGf5E*ma*v&U?0|QYZ>b3|(c8&jM!g5f&O-C};b3g-iY4|r4y}ee zesJylLAVtf`ZFjUIW!O|kH)`>JfTb;%|1*5uYQFpN1FN879mKL9oRQx?U?g(_eRd~ zC1~z?+mmawcPnGIS8{0lyPkxHH+4KK zIdRc4aiDMltpf#X;96g6w=VT7FBJ7nwrK~~xN8V7T$R4GUT3gUBM%YQvwO+@SI^Od znmBs6-A)wIvuM<2WY)ZJ1nOFa()^eSLo3s)~DJmg1x<$K;wEJq6R!tsM4ZH*x z1UBltFhmUTM>L#k59&@t`-rQ+xgp)diC%9WtuNbTcVU^OT@&5r37PWGC6lb)w3mfy zHG%IeY44%NNV|A;&6QeKa0y}sB~r|M#Xs`M{B$StYb@q+ttzjQ!^hDGe(F+e;Heke zwfA^Qn0iw6G6ZeIGgl;&RtcEG$D;=WCKiD$WCC#=6XN>Tfqen0voyj=bS_rfulWC& z(k!THtb&Z4EzIn4eET=%rKxkPRy&nUcVU!?a}La9f)g&Z|7n;ktOH0pq|ro zpQmh%YPoPw-FZr>Rn|*UH}5Pz$Dybv6p*jd?8wi3t)Kg6lt$6Fz8><&mhEN#QBLnNTMA7N=c+3GnioG*(JY=F z>X_qQn$EJX#Sad5$q8#5%*qo0z{y~#aHh7 zeP8pNdVg?i6mLSHya?pmW73UA{)`*=R{5MC54+XhFtlp^p!Vs`?xB%nQQ00dIiHiV z?%(i-lCn&c{I{s9Z9S%GoRw9QDYJ4@xE|4??dkvM-%}xPrOpW;pgu;DZ@uzLjT#|G>^4c> zFOce!#_)1=%UB$KR7KLwJcdIi zcBDn2Y@)D38D!p4;FSb=<#~LBq6c6(WvXq`C}b-N9E#Ld?M{UZipYr|OHol)fHad8 zLl?YcJd_K;P2XXpIIDqIQ^C`%|NSv3cKak7Q4n5$&OKmvH{H~;`dZp&6*H@PrnhQt z65+W$E9ITlGi&L++`~g9uc43>l_3N^s`U+}&R?4DnjRj8IcTYyVY5=6=f@VB@xGa_Ew6=J1( zXF$Gby|&oHBEWF_+Bfmpx6GCiq>|eE?SXk~89+5E2^SrY4ZJ;?t$Qdf&)I_swyC3m ze~8rOU(816CHf?HO(G3aq)$91pe{2u)M?(0&l&MD&%jw=uwoYi1%Liu0i-}b z-m)Xd46tTJMmlin77|7n23V(>No^x0JvEJ7Ynx=tlv&E#bny>s(ivAeza5`jTdU(E zI};pg>}Yt;cRKS&{~*rvWZAVs)&#MNK7`ucjZIj#uqiR7J+Q<*tG|b~2;PL}=nXPO6x{3UuljqlJATnO=$WycpH61rcKhf0d(Bn5=)hltF5Bz& zKBB?^Qd2c=2R*Ah)LGqiR{SM?1(9!}eQ@Y)%zF0oFv9B8`JYaw)|?hX4@BZ!y4oMw z{m;nA54-^*zdyF$h+C?wNy0A%RrIAee^|)GmzmjBI@@m3vdjxUsL}osh=ZYqNf9rN z^XtVBcb$rYiU@ck6H+`$XZka7iH#u*<_4YWTU zQhdd)kaElz(dom$_^O=YRe@Cr+Ele1qS%-CZXMs$;h?KDDYnn+B2|_KLrb^jg zkx||fHRwcVzpX;2>aMgpBp4`?FL#q@E$pzZHOyOwo1Gy;hxHv}`I>Bn8|@jfd2A$H zha`wLsVM~Dr&&FBlN$+D7~si*jYhP@8H|vLjB@cu4ym#K$1+Amy*W@$&L$a`6B-fR z$K7ntp4`C$k^iRcBgEe$Djg0>@)x&KK_<-f!-g@$GsuTP|mE zl{SyrSue>y^>Ei|_O*J}>@fR`Z7*zJk+wDumc+@n&ezjBGr~M4McIQpl;FO+ySbk& z<5e4_J86Q*`a3Unt12m~X~D#vBLx#rn$)-Qr>8QlwAXH)?Q(x_ji_8WX2Npe^m(SO zH8Jp&sK?v>onl4}b&cbpA56>(h{CKta&c}p#xH_F9S8qTHjn+^UHrSFE`05{ee&WAh55<)L;UV@FSia{B`OuSCNDh5i<9EbH5QBYbCD)H{k}bn5K_CN?5>LZ z1x8x3Ls_1c={aLLO|7JAc(mU>)KyK3<7*{8wLcZd4E|NjI~9@;Adw-^QVs$Kce^4j z%aMk}w_fsUs#b`G^LK3XtZ{XH!;V8Q`|X<<|HGwR8o;w2ZsR{67Mu0&%f)QIiRV4_ z7I1f_{Pk6O&H^q1p=B!LWtDHgq3jeBa;68Sw;ZF@0 zj%_!+C!j}+L)vj{+nz=nm;5AcnBJSM?{4BtX3#y{t`|!UKD(2L>rX`OMfZ(R`A8KK z54P8jP#m|a>kOQ{GKPffKGsHRpf>93EY01#rB*ayHE{--giDdM_Y(@jRga>z9GghN zyC*y;W^*^N{uc0?;MqGH&sY0whx95|QBT(Jq6M7PdMxr}w`H1sR{tpX;^DgRYhNl| zua!z@Z@@>WE3*JqK&rpH^KEiKY@%|fcC}6@;NYLh)iH+d$1a&(J-(zkPrDO|q=1l) z%HBNo-?F2CDV`!dq)D014u{j9T?Y+7HySq|N=O?gO&uF9JO;%VF0KwKe`&ZnLX_cK z3=AZ^{`WC0>!%dqEPAcN+(q{h%HS#BqS73mxKfS$O`;!PwT#6->GsGk&Ctj`8aX_9 z41pGezdM;D(G-XBEXZr#70F>WOH_d(tu8{GKsJvPIgtb)tyg)$*o+f*Radd(k~M8C!PgMwm69@ zj+Bw)JpTTo!3P?Y0D{g;-Lr}#;?d}CG#ZV5L{H`3@uaGwl;bWU+AGL@?GMFQ&vr#j z7rt}P5I2YKUsP0F#=ViAa6tNWGq;iU&u*wDZ!H*$>kakh0k?oGNV8JPtWL<7v=%`= zIx$2iMxrvGk*7m~3CplKUDABnicDp+24UrXaXx}yD5A5sVVx#HNkSIj8l zBi?IrrJbmv<=!hORuN*&mu5V7F9lW;UdJ;$Kob2Zp%^Vei~FTCdV>StWzEOMYP|XO zaww<4-QnG}`QSkcn!PuE&c+pNNTR|nMi9O6AggrDs{ZkTNcuxYf|e}$4_yB56lXX^ zMYreaaHFnsrAfiP*DP_*6SMg}U5rPcU|Krr65GYfIQF^RYg(d7C*lGH99}-WhadaH zefZc*Fgm0J4NH$Y8aXU@N$9Z5c+*JA@@4o*?P}D98&6PcsBTZt5ym5=ps+kTJ+wn5 zAw(vPTjT&7o%Y7%(^){lf;vT)7%KC}U}jUqXWDptbO5oE2Wwq)?;~K_sc-b~;3V`z zD5X)nyD5c(Ayk@Q9g^jx5#A?Un-9B4q}YN4Gde}6=g0nCf~8Rdq)jx?sP;7=qtN*< zsgr#9s*+C{Ef|#|MBrHOzg1wg=G0>K`}>fzmYE^>;oa!R`$@#@{WRHXID2hM0a-fQ z9@wX$CxTh%WN~fiw`6M2R_5punWWtd$IP9eL!gVtk4^yw+v)4}dtn0|fGx#8T&b8i z7~sK-Ok*Or(OE4Xf|U1WbGR+!G={3#I=9o~%ct_A7d$Ix2qlTs%sSnG#<{3Lajz|i zlWnpwv@KH~+5E$#XqXe;qM*nDDks}b{V?d7$9bv};x2WR#w~bI*^ktp6-7JPTcDDt z*!&IIxvjusO9Vm!+?RdfH-XjH5|-aet}G9+%HH6) zz;HATkG4A9hu?jGlPYRwvAr`P!YIZ0z)k zS>HKaqiQ+Ux3n^#x4zcJv9#6`gQ8*F-cPGA2EtTdbqC*<>t~}?9iunK<|FG1t*+HL z&xK3yT3aSf``G|2i%=G55jr-UrrH~*j2$n&7td`I0ugBz8xukh{$EAe_n2xlT7LWX z+-Wqz7>EtWhao%@fu{Gii787@nwY}COpM9bEr8u(%8gp<*-=F6{rlzf8j0ZFwNqxi z+fLaR@;2l^dV&NH4^U&B>IOoGexb2WKM%DK9%9C^XbHM z5+YF%dMKVj!MS4hx*Fod%Y2sH0Xr;^u-F-`DO~QoY4Zmf8QCaV!`60l*BosiQ#jHB z&ln57e-m@)&5>pK(qDSAyExH*8Pw+7d%DC1c9KoFGD&A*?9j zIDZOLQn|#z)T!{q{HTd(Fy82Y?9d{KBBmvi{%OL=L)^o7?|Wm{RR+a5O0B?^)jf_> z=_-Z`wN66sH*J0wZ3DY=Ne&@*fa~gdsq|3zRUI;$FZ=nS@Eov^Wy5h+OJ<#0iZeei z_j=&M7e2*Pbng*S4U*f+kePIfP%!eaUG5KIx1^M)6J)$7(?gEUtWvuqeORs!^%)y5 zl&4fpXgpC^iGbW9UP}4 z6?R3@Eom%yl7c+BQwRL#LU-RQsrP-oec3<%3dBc(w!hUY`|CmXW1)fNz_O3G8VOn(oJ_pE4n*T z#XC?nwog0TfF)xVZ80v78_;OGnR_h(8M6!~GESn;TJ@{XJKgp2(rQE0u(wL0=tl0b z6?ZxAF^TgFRBjkqlf`PX>-9m`826}snY3*nGOHG%#MbP8^c945f{o%O_B{=`ABwB;Mt=s(m8YLm#HA<45^ih%|wY&_EOyVK03X;^1mhXyR zkLvV;V|Tl8FrheNLJJ;_t?DP~A<+{ulck{^QVD=b<#;@LVy^{pqKwl}PE;(C+0=-& z#rIJ3*}?ME4*nN6Xl89tx47m=GNz5VE*BRNDUmWBHQ(KPEDPLYFz>$W0f)&lkiJaP z*MqS&B@rEElj-lPCqF6Aj*^o0p7T^fRQCb;#zQOvy{O|8B3}@F%1Kwb091J;Rr>Gr zZaB%u6Q~g|oqY`K$3!$5PcCy%KSR67=$$a|Mqgdf7));kLvO>(?87>FBHB4 z0xnA=BLctbP+fk+c-vC1uWc>(!^Ci#~u#hf|e|&9T)6@_90`k-05V5*Tr)k#rEg1?6P4-^%l9Qw|Lyi z^Wv{dtC&$({&X~oPLuffTy%{?(KyDXtz!uZ>XhVPazk2+jnPW7dL?d9+z1ZCeI^a= zX{ZqAnET?2^B+)y6gMD##s+vyPkhQ!TJ4!`I+_6(K47GOXPl9My>UifqYMe_mPmE# zV#5vs;5wB;%enW_lUGbh%_OnpvDd-44}e%5kQGtgj8~x<-eH?FJ|Mp29rPMaTTY~&y z<47kwHqW>%`6kgUv3GlBF7!Y!VzH_5=B)Ws{P8BJm6;v#;Md_} z3j6u<@~dXt5z+)Ki7G2)0?7Sd*>HaiMXIj5Pt7p*>O}q*L>jDeBV%M%v;)peCoZWPD&#Q8nO0g_1+(e??ZEu!Znyo^LSXYIYWq%=*_n_=oF(WmPGr99LR&`5 zG?&$s3!VJmefBe_XJu;CO~{<|*KYfDQYOgj8t=X7mqezv+}7%T5lA*nEUK87~_%%B=YNWxXp&sT(_yUUSQ3JzcQXI1>m8 zUH+|_eY>d#bq#2EoI-V;@7pg$)3;~oXz%DOi9YR?n}a>Lo1Ta(M4J)OsBu-E@8|>7 zE)>n;|BC)RLFh)SOi8q}c+KffNzyoas!8h1XCc)^|6hxCI#%2dnE7c? ze2X=tWl;;HqZRz?uo(ROZc zK6y2ylwxVj1PW9M7fhjyl|?OTp3M2)Jk^(K*&lAmPoK_&n*{QZJi;>mQ6MN> z*JlQfe#l``-}VE@ZZTZ-xS(lmAE-ERlmMA)K6bWA1!i8vjuO+&#Zk=1N4281*sa0N zxDU|uQXM*5=SX&-QaWiQ(MTo)=9L7;gK6d3O`TX8lb)oC<*$dcX+9n0i|b+jetdH? zxEhA_rb>{{Z-#e^d_2j|hnF5fkPy>L-NzS$+hIPKjBf`wo=&D<3xVjw`TgzfbTYim zhm*y4@zDb#GFsA@Mih06C%sv1_hLW=j-`!m`{fD1vp19X48*eq%(m4WYPUxVPG*` z3~xOkGKTuds6=&seLvHV2OozsACWo2Tox_H7w?>{xw_pqOJndjQ4XJ94JX6dU@@HM z7t_gNFjoJ|Z>H0Q`?!)49W5f!}Z-hVlf13;*P?;ArwVx*5J7F9scbQjDUqbX$IT zKO3BnZ(!mIWu6tsh?fY7CPO7HX8B?^ct7-QVH3Kga7JLc7sJca*W3dw%1%UN5)DVA z;l*O!4P~6AsACqrQ_>8kQwyA_O?*E6;6oAa%cI7dDPUTTH(C;n#`9|k`kYNK^XuvK zowqMR8;-=$#r;e{{4l*eA2-t2v*+Rj9kqg}{R+@7)DUCeJ|_|{HU_@GtmLuVdx_J` za4&=R%fwQ--NEf(-B?!xDDM^QuOW3&|eTOB-(iGg?N`Aaos9FR9D?}}XD_~2|eOMw` zu!?8~hhBbhqX<-@DgQ8DTzBAFaO8!+xT5u7b~Rk&*JBUhgrE~ZHX>c09^HpFVo4!2 zODtyh7Yn6X3@*IF4JDa_+!I5PqFoH3t86x)rqTR*x(JXG5R+&qnnv{w1xa{03|6{G z^nQACuZ}k*UWWf2-wd5fD-Tdw8ynrpA%t;`&N6111;?BHVF@bptE|!)M@pxx?P1%^ zsAZlGym)6xUg>@;5Ipjhr|TX-=r<_i`bljCxU6u5?F)2#_X)%P4AIXni65e=BNKH3=YK=X#HOT2j zO)lg{jz-CSO1i=jNwh{^Tl>mG=KCUT6*+=<`TLoGPywgJ%b6| z$N3CKDKQdy;td1Aa-AmOa$T@6GBx7_atc(VE;+@CP)^}p(Z}ItF#HnWT8URbyIk)f z@sug3+MG1t+OYq;eR*EZKW~4O@#Q`qH1<94$%MD!ou-UEXe_Eh2b<0IMS-!{UVL62 zdYmlaRcRL8h8a%B>-B0?dCY~Ok;G=i@l$<5xFhb&box=;bQzf;b#AGTox;k6O^%2x zk3`Z4Ma6-GE7V2a?$?J9g{gDCsyx%tinOQ5f6Je{BP_vtR%avJt3CJaP(v2fQ)6|Z z6DPj*HP51wrO7tb3Q@x#Mg*y00sFfwI&5k?c|;Sk&_T(xT_wmK%&#I^wzi4&IgLJ7 ztZw}*VT=7}@>z_UFN{Y&TfeZ#lh!ChW=qOQw0;UqeyLi=kxADX&|H(qa7xI#4P{C6 zXz=V3e_pL>w6lV68)puYPI=BfOo<)nnT-$m63}~HnhG<&hH)*0Sd50E_99uyqUY!OzvCR)q zA^y`ZUw-$Kj!I?lE*|Q{PrXO2c!;D~6Y)k9MF#Dl`TDUEG?u8nZXKvYB+8=cEU0M; zd0z*UOD92Cpx*%GfSJ@Qgc1e^r&gE_yLS<>>QfBy0afOsa7 z?Drs_5_+p{y5V)uNNMWZmxCWME)X$@1l*IhJEN7MSxDtbYAKW! zwv*`adA+NE$J#^+bXc{1OLfVQPetozu9TGZUo8bCmC>)(@gPf;#l5JeFH>NZifd4F zb>D0l4bPY=J!i8je)`-z)D10q0^;t9P2hCuim`rt_GTHv3Q?LIU57j8;35L=(~bK8 z@LmO*yYbszx7(Q29#oui6l#)zff0PDA@}s|LUH^0(9>5pNDItjbE|iEX+v2ZpDYn1 z`qqNb5&V$FA`E@!N>~?rxcVG++h4`XGT3?UGC`2{wQd2}XU(5RA5)i$EW`IA3rdf7 z&q>$RUz@}7=kVuKq4jrblIFlpDQ%)M`d{fNWx^Ua!N6AuVZ!cc&^tv?`NMql#P0ji zI0)+~XgLuXMU%%3N_x6yc7TOK&Jsw{eJBD;9Z(N49f%)f^r$zOgC#hR1Ni_(LDPTj@I-%e4KjW&;mZW8L`zo?s1+LrDkwM40D4cC^B zzSa`AhWuxsF*ZQC`J~xq0)3^$I%h!UX-e?=9wAv8Bm z=2AmL?Cm@`iks}GND)S5?=K1l>uRp_s~YaGOAB#pSpUb|({#6OE4$|Z=;C=50w4h5 zWECfI>wDcaCrR6L(?t$#F|J-D(N~g_y1)JcBt;Bp0UUs8-EQjG1TYxP7iI=C4w_Qw z4Pja(5FUuM2?`Zt#BuAJaJA_jixX6)e^ha_q%ZHEo9)}~793pSdCFg6V4=zsGt|(u zsZ(+HQcWPdb1)=~l*S9N-_+ZLv0}=D5Fr7-)r+^y-lj63Sz4B}dAcm%d%V(QP3@oZ z7ETnP5lFBmv&kd<{5wM};c5VT-(|Ke%c-vUM7DK4`nQ23XP+vR98{*RSwIdt8%n0T z?;KGWdp?R}*I>?xlK}$KxW9t;yLP~U32k!UHKFH*N+B=XFI#u(tEK+^4wEj%^}XnM zwqfM5ZC7vcQ4h5I$?x7bGYQ$kG#ez%)kury( zT)s-$sO6S2&#gTX7!iBYD%&@|Hrs$AZRfSPlWm?T_Ukg+Hy%uzH-32ZZt7LNxH8>| zOid0*lH(Y}m2WYNfnvmuL)9B5Bun%+YLnORVs^a#1gus(8TXGd0w|5l;r=p@;r`=s z>0iKXEb8WfeB>t@uK2Hyv(1YmT;w% z0w!vgje%uJl1H$l7i7qmgvPNY&x;^i!fnqX4VNcpgggSL-CkO4)87EX06P(x6wJ_w zE3;L*mJfF%$0O{1U0?3&b&sqhHRpEJC{2p*{%P5g`lQ17X{sAG6tX0x`l5-QbF z7lr>Xj@#O#F2|`k5>#`}&gPQSJP$VHKqf5*MiY_f*gejZsu5LYf3~|y7^SDo za{qv`SaPMn1Vy&5zSLc^nayK6Z<+JuIAUJwLV$Z>EG*f%Wq%3|7+Mh;n!*Bqb zh?|dywwy_{EbmVpNnI+Hx+Ic0#BeA+I;1p)_};hZK}foTF>>S$%Mp0(fvK!%qaM|& z|6{@uM^=F9nCIpd_S+Stz&eM6YL|!}&9g;|jSo`_&|y}$eCP>~MWZ;B z6BoA=B=?w~r|G}oQT$oR#~VN_63JvNRR|R25g`>qaE|5DLSY%7j^xly=5rQ|{$R?s zJ{ul*yx4B5hqu*smsrb`QzyzXMAwR(+XoII-S7PkNZOZDNiZ=92GZIc9hvXA7M9|< zCzzvUHgWbQ00?=6^UsXsc5E?pkvTT9;KFwFDp+az&*+h|@2oWaZb6SM;7D<3-!aD6 z_q%2TM+rEpjBWF!Ctz@b)<^19HOLoOua=$fV`R@_OmVN^=> zZY_~j*SltQzfZWDX*K^x!YH04TsO5g{?pF{62}CuKY!MWZP#U=ETSE_f;@8I{{7Br zDy_K!@Bf1OoYR;F1A08m_NYN9xLhZ+eV)c?m%xGY4f8VO8+I0)asHSHD9LI3fhZ$; zx+N!23dM$)@;#CqTs8&G>TXkBJTaup?e)f_KJ4qoDFU9CkhEl;?PGaO{u6kO*;pBa zR}D$y1ErU!HC(=7fNx4X-v}1s8)w0E(s0=(8iSai=OyHe#K(<_i#{J!;4YE)Ll<`Y3qusY*AU9LP%wAs?q!nTo6M(91mb z(WD+j5N{@l#vwRzmDTpN0(8QF$t4Nea^HASrGihWe;Cpgt!XwSp% zyD9YN$v!R?aF%dz&oYm_x^U65_DLEh@jB4>5MTfIet8$G2d{i9TUs`iHXdsef3EpQ zI8wxF7Bh$=R135wh-h0v*MZ(d-Ina12RbE)~9MR2M4o`)sO_;Uo$jfYUY95A2DK@Rw|a*@X{;>D`E-3?5L z7V}zN()jy>8drl(y7Uy#s!@)ac=|LCC9=EwegBt}C#tBnh+_ZysgRl`mEESUz93?t zQcH_Fz5X8at(IQjmg_a*)6x|2y$)tr0^?EN7GGTb`r<$DKYe)j^XtjE^Q_slkwrgY z+rT+Vr}5Otzq7m*UrM$4Cg&|)T3*0Vt(ug_z6JGQnV59vov=Khe(H=0d;X!%IG&

g0xZ0 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 g``K`WG(;&2m(RW`)p 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Ⓢ{grML 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

O`Cv{=ey4Zq!BF-#Z$65W<$fO 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 z z|7cWY&D+-vRFoCMWjHU#0N;mIz&I$s&X}zLI3cst&kpJlH?8l?z+|j@^%luDtn-mz zw0UC(_EenPOnrOGV9UhAbv_Q1J_pgNcDwBvweyo{2b@HYY8!E9kXaslU(LDE*L~7! z5!Hi9ANuxBJn9$Hxd(Lq6QyV87q= zken-=#X}UPJ#+Acz#}24L$>gXZ5ZzuhT>h%=TeeR_IVa>*;-0ZHc+-Ze%(jQPm-4% z!zimOk|&*G<*CbWj(uxf=L{Eo@DuV)B=3KxBM0n2-X}SFTOz=Z4hTknfRt^u^pE`x zdDXN`C>mH=C<4ziPW0$AOatmWOs}syt2OZ3^1|luU$w`nxoG8&Dk++CDHU zWU|?6aL8X-QwU09JMsy3xcig%i&SO;)KrOW3`n#XEW$njTc-eiXC|E1`mEjtZJY|# z6r+h0*Im8NJppuK${aPl&buF!!NSaqNBSL76Zy7dq3`iiRtAs=XVht<8vWTvDHzWp z;+!w)!q-KM0>K_kp9tRLq$>{O_4S|#x=S{BT-C8q@M80gCiw!}nbLA04k-Ph*sDQ$ z^<}&58#2VqlG^KE+`)(XPgAY0509^5>DftzFT>^i4#ma{c+ZxxWj_p)78R4n+x{q=OnQ>=HUt%Be`_*v_7kSClbt$WIL~~LJPO?nnz_rR6Obd$lx>{K+yn|PN))y_PMHt(0a!mBg42JC-}=XdJWCB4duC~2}@ zCfP-A3X)!6cSFBpRuqqBMX_XAQGDIBw43Q@aXX!Uev&0aVFIRmQeKll=!tsb`<}Qi z0Tl}hUnJ=MvVPnWQlOwmpE_=odADa_+L1#Na%tl0+aHxe2y&kYO7tG8{*$ao?}&ym z)p!%%M%bR%CeJlKDMjD-j*ihclgfejto4C|g2Z)!uH4dI>AB3jpH4PZG89~q<70+lf!29__kX@zODD4Dt*%MZAb|6fCZ2q^8_9= zpE8AdCekzFp5j)~PEi7R`k5$j6Q=(}8A%YrHSvn)n=&~yVDx>th!r?NsjHZ_DJ<$u zyic(dNg9Huj6$ws-xJ}8UOPohA*@b0eetpn-k2UnNd|H2-GL-|IK-KPh{d52Egnx< zG*|*%^mR#PXdm2(%jkgCnSrdK@OiS`9(K_@0W+9Pi}TG-JTSOs7XE*=oFbVOm7R=o zJ&>bYVMQmB1!mZt&>#cIEm@~-pU1tsa;ktK_mfq+t!)nrBf$F(1U)gNjFYri8WK*n zV4-6|noe;Xvph}S9`{k{UQV~A2&=xUlANBuDJ?6sh{Ro9+%&*GJ=wh^>GoeB3Pi}M zT;xbb4XRXGB_b;$%Owe9U1mLTBZ^gdzmY)yrx-^_zQ@f=*E;#{+T2?&)8RR8HPY1Jkt_ zGR8@ALP0+$SQ%&a?Y)WGy}D2vAkM(&Ya>l?U>hEv?+kC;Vm2?@calIi(4G(JuC650 zozLCZbypkA=Y!$rDh+a#*Ii~m(5*77>U@gc%Gg#s-SWNBhstv=iOOOdh4kYQBFczhU*t~zkRiE;G`>`uou;R&gS^Xqg)O-YZV zaG9pLqow#$3x8&lq*`K_5l3SeHD-P^J(~5qEaV7-M;l4E^`F8x^ABYVW-Nb0;`;ie zNdC2Bf#F!eqQ^U#AE7y&?Ch-ynN{H;#3`IM0!-8?DgW=*-%{KIPYajJD9b+Ry8icl zbKJX0!0#Knu~?poT89v4&xLbp*Ji~5&Y74Ww78Bk^2n7MSOiDol!il&r!*T~fl=1AMhn zyzi`z`_9x`l&5r87+rTo|21iN)gj@e11K=ep-br!HQai)xeF-hy?|`JJ9A#k-B`T& zX5i8syLMq|K*&0G52xBd8>enl`qjxiqkO}nxx&42n`ktE`71G1iSsLzWaQYU z*(!nMkrG&Sc%-l&G7Y9iE|dNF_HT~SStq}IKo@FT=LN0zO?r+B>)c=$7pAXlo?OfF za9F0uR&JT5aIrQwA9jI>)2tkY|~0`RTsDxffQZ9Z0C?tg4kP@fpa{QLqbFQ9@K7FLnt1u5=;y+QEUHpo7tL$R1-*cEI zbs^vY?eei?zfGse@H0GQd9tn1CYmdEU70vnnlU$A*Y(o5o8BvJ z*BFX}<$h!c4(w0jFLbR2*p{)o!EV*mW@&iGd--NS3Qe(Z#{Us_Ez6M`%XN+a@aFF7 zU4!6bDN5>%zs$o4;beg6VLWQ8~^+-EDc;*5jW;N6N-mODZ8M_ry ziMln?678~?vz?n?IVMuS${Sokn|>?UxZJpo81#?JM_O5{vw!{mpC94XcSxMerTA9j zTpmO5aZ}B&P6&78B5sXu^_N=7!nuBxEc`*PSFYY`Gqn6PLmBW3tNd3%A@~FeU*Bgt z|M#i4xzyR8U%$MOd%I-=t&Xh8=Z*6EfH=R%kotzW^I`;xN9p|QY(v&K6o=n^>rlm# z$-lk-qs5`Jvj-q&x=nL5R^2CLOhH(K%u0JBHI@?8Us8*n4MKK+OAj z^=))?U0=d3Dc=dlD7=;L^p=Y;ui<`Rv#~yVev0T>O@lU96|}D-^luw&rPks$et z!P0>M&vE5Ho|FTguU}{kCJppi^R%&7$)CTDUyY>GJuXo`EKoj;Gh7{~nB0Oc%j+NM z*NIUpYprIe`tr|j4bY!mQLj}zhHvRf@4euM4e4+(!(uV*?aS>uB;@Bo&W7mwa0Y># zVcg^22OZ2B9X>d4HoO-wjXzp^cehx}RMYo)()6`myu=>AVEg4Oc$4^B@9RcUDw=AO zj00=5Zw}>t9WT%_`;TF_|CqhMr1P)mFCS&pCVtF5;63ST_!@uwD=`5Apyo-X|}F;t8Rz|pp>mfX#UboKw29Q4JfSS%{ot{425wz}%&U;oDH z#%(k&n9Ay=EpJ`_T$h}lA#i7%T87|d@2OjJlqtv2G1aN4@0#{h^dCft7KZY}fYHB= zs4-&M-7nyazl%qNo4r%YzjDa(g{e+`8~*n1jK4k?`~R5HE*n3V#b!gr;ZWi1oub}w zJ>X1v-XDu|e=5&?x8(^;c6ctgT&S{ralT#ZV!!Ef881JSUEem(TV6fSQmWxcLz>=y z0JkjLuNFVB>A!JDxZBTL-cDrK^R6w6hhkTk?;nge>uck2M;iChWP7Vscq?`rMZn{i zU;g{c@Bcq8iUNNOoPX>=9iQdf6;a#=@i~r0_%`>}!(7=k8SVQ%0O|giXBzMS&IZ6{ zdT(rihhKmD*DqiG`O}xVX&c9k8>T`>~_yx!}Qi~fAm=>mqiR`IpFXiFZ zHcj7=F2jbaA^TL_cf}Kp(YaiVEkJMk=DcsqzPw$Ur$gD&o>Lg z<~uDX?Mm(RqSrI9(gI%ZaJ#RIt|Q(%&$Fs+&NpDSv@4`>%X{uh+R`YTUooyt1>0pu z-k!lZGxXEF?Qv`O)cXma&H^q>OS~KQ_B#~q!>uVE;3*5@M^r%Ak&_TN3YG;OswOT4 z=jpKJ(4i_$&G|t8WKQL=1Mhfph&uyTy{qcSvc0RiP|%qr{K10tNjCOZLt~%TZZ4jthB|x>HC6g z&SZ9JYFH=OY{eOPcSStHaYRPirhQvn4oyS+Kv=?Ye=NG5`)y3F#!lb2Z+IuGSM=Gj zIhSzaVPR_G&NDt_;DTJLJ?;VAN4x9(fp~<228Z^(sSj}SyJPcM*2J>~#G-q+*7YW& z!2TP@=7K=O0}BDRzrVJyHn(G0pQtY>or(RtHz6rlW1YqE9CvMTB4eq6-HL886=lq# zqdgO%To}54ZviKri_vbC2kLUz?5?iPJ#~BH5Za=qn^J5dv2RW%IOId?A?jK6SzQ(g zeyq)*RG1A5n8kC%i@MkmF9#0aH@H2TyW91Ac>cyf=f%p1)a0E78sL?|(JSk+Z_aG9 zWL37i?sj#_#SAlzT-b&j=*hyBUB~&PM&#N3wP*p2*{|wcJ~2M32@cqS0Y_qR;VGb+ zR5#6u_}eN^6gEOA_2E38i%ZcKJr%&L4a?8A$^JR8WlwF@qY{LilK8m7ixE5fvY_s5 zBZpxXObdv5Rs3#z3n+78)pCuVnuZ91QpP<^22I5G_>>Gnufl@R?~i5IU+RLoEK=GL z_voZPXdqgjuIKxj$C@>~+|#ivfGU;cfqIcpI3wh?JPe$>#-c57TB}nB#_+B@@5|dg zd3lrsl2-5ttbuF(4koGp%)kh1;RKaPBAapc3*j1r(TM^W>vcC;YwCqzpxA61?X^f> zp6rwXYZZFN&(Yr^8WuVFAsqN~;BvyP$_p0|ut=|bY;Z-mSK2(Qi%Zqr>f-aYuE-1H z1}}H^n27h2en|#5xJnk4A2?NAPrV~JqD6gb&MfD_Xqm-{{op|QyDV0 zfSWGld2uEWz*w87jk=b!c0BS#v!Vm6N_*Xdr&4n0j?MMJ#W%sU1z+{k^`WF5cdQ7` zC)-JvG6NQHBOmC?GlLH3+($?AcD~-l%)nM3my@1Ed(rmu`l*j!H@;9wPIu* zRHEWu3rVam26#T&XEu6aOW}meOcb(8W-}L{du~=GZp`-C;9=?K1_94!EM-o{{x)~b z4{SfyxY17_yLLLbrF6-nw!w~*3)z05i(1Bkg{t6dPm~h2YZ@O)~grcV&zDG8lHbRKO5!JL2NaY21 z5H=mBUL*7rdtopq4G{2fZl3D$aL>^wRBp$x7srT8um|J1bN9U-CZ=-C7A$*n_)OI# zgteouLSH^G0dgrbL^qsDmXyt^^Bo*Y+>GRtiThB2Ph0{r-QOO;B9k3{+*N&BU6B1u zvB#38yh(4hh$33k_0-SpE!aocQW)@OoNI~GTdH<{r0;$i;)K=DOnokd>`?Bm_plCR zG10jIK4P&a2Pn|({`<8$u%Q~sGWldH8 z{2T@2%EegQ*`1oEKi*K3?SRWii_TCwCFUfcXvM)(pmuXaYZISTa!jrjys0=lrcVZUpKpQlU*~~ zEbZF9eFn2pug%5#+bs_xf7=$>_j$H2+LmfB9D46O!X2<*WZWNQTYOCb5>`LN#898J)hc=ot@ERJS?6W(4stVE$E z)!_KQQ5R>WjsP%Rs=6-jH^`61Wp`D}3`N?Ei^wuyn_i%+Tlfc@LNSXDW${RKD}xns zG!`q;3Q$IsnoORLQ6grtX$qlnf?*Co-g*9QkYq=N+ul3~81? zVFTH&xz@}Fg`El4(SOFxZeef&zjTiRGxM%`D?2y{Lp(8Uk+@QU*|fR;|=jfY?GXfc}dP~pVD?2xsFIu^0Wn6B*lg? zh{T}|#yP~)N+}Xf{c!4vGcF9#wpo$k&L~@y>^ND>Se>78E?K<9#E@(OETJs;={a$- zX?x}{6R*@ry4g`t=~Px!)HlN%pyvEgK6Bqn!&_ahcXvZ=2=(l^(H-8(Vw|;LANuMM zQ%rAdQPI{@I!sCEp2`wzFBs2?%)1PnrgQT|7dNEy3Fpa4M;@#fH{S?5jPg^Ba1Q3V zxb{_j?KrZXhqHRQo-Pj+s>;+P7wPAeC`M6>n8Mkc*n~HE{AOehVY8EmmC=(a+LRP*LRutx{6S%h_&JV7=b=`-N}=Sy3oJ6&vr}15wU9=5pENGmvdEHFwM6HtI!ok$LynRK(l~9fKC{$rKE2%V=n{aEZo$_C&ll? z$=onv%2eP+<+O%7KCv&uD#wOesH^igBSCaH!Ve>oSIv-&q|-44mTG;4u^F!r4Trdn zD8wk6!}rl|ZnP&V{$aX~92{!;0ahBL=BH~{?ZLcsdw`hxt}ltQvJ7Ta$#EEb!HF^( z9Y*HL$kq)$xkH-@-(ijIn`?XlGTfnIpohc|y;RoxP(GKpLs50l#7FSPfbYBIU+4>>wwGkz)lNr$Nd-Szhx|?m&2V&I9m?`6nVbOW65_{D1v!)p)UP-ks7V~oOl~A6iw7fH;)B!pL=VyfjNgMf zWJugjm|4bcS~`Rw*K5xlO-$x_3TD!gTWj~K$qEO$u}MyzapD9BM)N)CXk_8*_iY7V zpIF_Yl{Hhz1+2@p<8vV+lOE2^8uc!@2Xty+=Pad-u!WLpXGD38;(AiQR}BU$wa&XH7qPS`)Sc;FB(sZ^5T zd8IJ}tPyV_r*a>z*6)mo+xyz`_=Gaq(q6NGchR(ngT5xXw3PIsCJCSVZph=Kf8BT+e9CB@Y23Scm}B^DVFp z`g&&N+$fiAsxHWYm|4IJ26>}tScZU|j@nFuT!i!q~N-SdUsOGVp^)kj5& z5%#N|?|Dh|y!K6ji3w+V9khMbC6SyCIEO9yeLsZEcnw&DP5he!tN>dFoTZIicuDVOipW~?OAO|R9 zCm!e^rUXzf778%=2TXM-*|oLW>*;Vc2l6%;GtQ}|Djx{(Mm--O4POtNy;1>w2yoE3 zpjBabBSycBfC)ZHm0@6?$!)rf*@O!CV6~@f_HN97N=AlwA*NF9i_--?5-KR0(XpWW zgi84ASQc%c62rTa+7LzO(OZHK^#HyP8D&wX5R=c#SavzeTbokdaC%b&z?inXE!DfV0mcimHXC=Psk=y zUhAo>je&-kzf;!FaP*05=pAOH(R%`Gk@&%eVj_`GLK)X3Hn~XTfD?8VHbEvkXpS+H z#PIlHE^ZaRg71^x!l4Dy`cVMeihuI+R z`@TL8z;u8I*pu6J3$NzpM#)rBtNE2!D30Vr6#O``3&JBZoS_7PXq$}Gn5)Q6adbMn zySC>70E(4$i)p?Z}M-K7p=@qfSE?LwMAyWb77INWio}!8zO5xOtE`mg` zHj{+0kyOa6_&hY;zmj_#g~?~$hQFA?W3%qc%CUAKPufXGZpfi+#tq})!-ecvu$p29 za~2FrrtX=g?V5g6aD!(nts z46(SY$6*W9r=8pndf5&3(1cTWAOo+*-tx<6CUK6HQw}G-5?=)eK)~wtLtlwltqf~N zW**`RHOytS$Q$+q;EsrFnb=Xu zXq%>Avh$eKC}GpbJnE?{(MF%t*+s%UD<4oSM*VO+eIGDgYxh)=?Xet}g^wrTg1I4=2vAC z5UtVg=lc^zsO2m=#xD1mr*Is!cK(QWWhR%H9t4phVFo=4BJ(i$w+vIi^msTS7wu+` zU~}xnN;|1bx30Nf$W>x`Q63yM}mdV^?pYmzCN|8 zN=qsFgfUDLjllufj_x@SGRU^3F*pS7<^B4vvb0bFNn~o~U1mIkYRk&XeF1;h&1gaN z=V)oq({FGA;Ju>+3JY%IbAN_49C?fIDucNYf-pu+qt+ zXxFX$nNvhA-i=4MShRx-#yP&Vv&yrfx;tO=f`jPFV7XslbVB_9>kCs3j^0JsLK7ma+ zzRkrRdRXN+;G!Uacs9oUGVcv9w|J_kvfn8d+toP!FdYxcV!cu7Yt2*##mzZrUWH zt;jr7^60237$`oJ1cJd0iS8Vx;gmqixf;4#op5*=SWa-2gjttOO4y(fb~$5wyrAO; zS*8=Awq8)We>w)zWnK>w%j8g9YDDr$bEp_N=;7(528LG+gq&e1g%@~C!{8f5f#bfb zpWnRS8xHkl<4b1<=cF?!7VfgF7Dx;73ruzdRJt){77Y}7x`P`Aj2xKd7y0Ae)pzil zj(dIVBg!REf}2)*po!2j0HZ}8P&$RB zbP{Ax$-}cMhqR34AitO^bi^k-5UA${-F2{K^0fqG#dZ+X9pN}-2_hoz1(xWQswAPn zl`6B83F1YN*Y)elK7|%)z7VQ(xUOQ8o__R;9=gz&%Wkta66AzIrDd3V@KTLB5H)FT ze{QVL*lK&g%d|c)=;K>fdYV`e?bMF->IhPVmUxf!rAz2$m3VhMyB zI7J01g2_}_shS;ymoj*fV7K<5%Il0&UWA8PVlypf)D#mRE&5;R{vXb+XHbje>tK9~ zmM8+22WpY}QU^gMk#}e78aC7UfRf+fhDI7RhEJ@UNJ67;cnLQHbfYLgPx&FlO!%rS zu}hK$Aan2JwPNEYK&LX!aAVu8c&8AqL49r>OR2w@EuW9kHO=N z4D!5Syub;>OfWR|^}nm$jh3H~cc;9wIDR}S z_PHuDpU|?h@!t)4OG-Z>#if_$^Xr%0yFn}Z#|Uad_N4UBD{Eq*2`O&(X!XqxtYY{b zh_j|DL#;V1ptua25R2W87ue`U=#C|1rIH=)B80<_@lKO(gvahd5bgYSFqxx!mOE}{ zaUlz94!2$|QJUpOIX(%t#0NJxJk)s89}Ol@nMxB1v}IA1)#0$Uj)ioz^1pZ(%}s_8 zv|_|clde@CgO)DDg~zB_LfqJsyVb}9jmx@20*33q4Fe>JE*=~9W;bK369{Aow_ur+ zUY(W14ldE6fXhm>L}R2^*jFhJR&l>L7gf*^!W9l%K(7vTR|{!}29RYBEf9Cm%Up|0 zkQqBSO>;ml>qsk9;8iVK#Ev$SXWuAN7 zQOooNj;c{W2!sRrKWES(&<@VaQFs?OcLYP%lhjMpgdbA0IrpTa3zA##;Iw2e-UK0K zwQm#hs6JE>y(egLVXj&cN^En^isF&WSr04f318()btpv7*=?pspnbnkf;H#26iv<* z6@P+ps$uCOlrrdjHHk8d-eQXOj&qj##K+^_4LMdw`bDukd^ZXyGIJh2+g{oEe3U5c zAS|{=tuQPhS+P(c>Deq05GoltRVf!@DNUUnaN>6~P=ajYSE&T@4xL=5M;G7mly}xd z0g2}UPEz!4G8yzdnP@hWfE5%n}?D-$;SW(0>}3KqU=zY zx(05j86(6wjYrc7I+i=jcgET+Tv2qSqX*#9z`A)Ok&glfMd4RmOU zNZ^7BVj7BTrugc0FFm3|xBBTto)}BRo1_yX4C{;#k%PADia- zqK3JlIk9vlE5xEs@6_(l>g*{q!vs{~{a7XT+wPq$&6!Ok2le8ict|doO z0_K9UxEZ10Mc@agu3EIG39Sl(+8N|Z0bcF&HQG<6 z3sRn)P~tSgg;EnrhSd&DNLX-LJP}gS8g9g--Zye+w9j*3k`-&A-xWELD9k%b;|rSx zPFXyg7Ut|0p*S5vyr2QoShFr{Y@h4oykH()4G}@e2(De}g;mrdSZsaQFC<=q z_U8l@+g~5sJP~we*H8~w$E{@|8cuJB)jcM z|G(xL+}au9Xl;hESN8wvH|%@C=lWkl+3<^yQhokdKS=oDXZ9K&UUutc0QEK=lkNI; z6a9(Po89BSdH-JB{%?}akE{39kND7jc)xD&FxhP4^-c740RnoPpFfU@O)E!V#&djt zaqE^*jnL7`bramg=a2Uma1?ugTStdjFLfOqBD2`&Jb3_N zmf7AW(QABRccanO_wOH@&upF8WBd5<{x*q!>8Z`Me>cqQg?ir6$M4o)mp#32SLQd* zT}EACCVb_Pam@^}!0BcC5S;s=T1My_4i&m?6zyF{ytC<6yjxQtyjUli3<`#e6;>HPt^a5*?&x$gh%QCW7D<)rh_oL~o z1vnr0CGdRUEqie7Jt+1VzeGQi-Ftc+KSl4G!*#NMi?{o@{f5H2EzEzsZ#J#txKlUo zHd+0MerGGfz73mrKO~z^^Y~zGHe`e0aL`|j?gz{1qK2i7`C0WCGm8 zQRW!0kwY#s-gKm~!i6~1>= zf6p z-bb5vbETu=5r>+8tj>RL-qmrS!}i&tmHXAa&H9G3*+6T0*DV)Xt4++JG&%e+=Q$Tr z8v&zt_Y+PqeJcK)LFDgC1NQm9;4Ez)m*?`>hx^|6t}Q*FI>0vtqo)(>_h9Os4X|Ga z>~2Dv-(`c_QA_n2VSlXH$_T9WcPJr&vyQ;8qNk_bX05NR{bkmwRP$)P-n274;nee$ zI7;_sU^~@6N>RcQ$~lry=`W+^-JVKOIbTeF#%X`2kGuP|U8Ip#B-7@HB*am55A`E` zGg@o&L7N!p&vA@0Y8Gk<;$q;VQaFJr3@~|)9Kf{+ZHh)Q^JQ>#;d`ecQytU7{8JcB~Zj!=Kyvlc;|MZ_%&q;Q6_;Wkouw z(RL7iCMqAom2Fyyg#c5-;G)fETPn+7|B`Ihi=8=G^NApCvSr`4QGhG<674fN-&i$l z{^uXByM3*X&5K#n85yr!%C?{A3razlwZArcs=mB^%gqS`xF(daXAAS$TA!s0-I80F z5-fN8I$#HVmeIB<5pXcktajUVl>W&H|s(%am z=NE*iC%pRM@#>I9n_imkezlLURg@p}uBYj6v)iSmVpNMx8lNl}EA~qdyxQzmKbjY; zr+mM5>6*;Pghj;LO=Ra|r8U;e4Iv+gM;sKHnsPX3_I4e;M$bl89F~XGzeguOj3O$%-o&5upRZc**RsS$Uxk*vH;3f)h`vGwt_KsO$>aMWzS*r4{X^Pp$d&c{|9$_K zth55XpC9612*%O$Qn+nsQ_!M8izI`mC%yOPE!7hL5$s}-#2FE?36yY+));B&VSgCM znxD7m6I^*VMG%Ib&f>QyNpG|sl_t^Vd;voN2iw(4wAI>nvMI#s%DrZk>gh?tE#9vF zoX=ti-%a%UZXfT@hpRKRsE3aWb)9P9vv|=@5~wHQao5Y5RRCk4CktsuD|1pV{~^FV zv_`tiAA~g>You5vMEyom^&5Gv-=McDtgZ6p3wERy5&QzO(p8)wdo3PPv$k1T!AEGD(zV;; zS?!Uq#|TZ}Rdug=p7?}x;3gBSaF<&!;pg0;ZYt>si-8Ko(kh8-qztuM5>SQs$VMCA zmTjdM#;5`#+skflmHkrYzG*!1}Z4eBPS5UR^+% zH1|dfsa1g%X|mR|fUHwk4i{G~A1}I7koG3enl=E>C1p>pHP|eT1w7QUx6x*?xSt8e*xLIdFfg;=OImu_v~u7`(f6vN?_T=4OEH^2RfyhpnfGT0|00qe*JjeL(K@nuz$7!=rDddw zZHgKv`-43!%yk`&75g)Gt1s&%+K;yTgFb2YQR5!Z{+Bh4arMApy%lI z_1#=&w%hWRdn_(?`owBhEI)MFW3-Q9#pbJ!O?Y&Ox0liAB$NdLCyWAmt7WeaS-$A>+7uX?bN=>CegaT)=_5MGO>v_IjY0E8CNbGdjU znB6vvztbprY2z01_A~s@12JxB1@#vrEkkVA8SWBRGKe>{4IaJ+29IppxvY2zY?ycJ z1t;$|-MwmJ)I7Br-vpD!ckYGy@ANsw0itChKd=Y}Y<3Ph%)gk=(5>P7W@F8XczVsS zL1Bi^?c0R)Q0K7TknduR>8FRcvC31hkN*4quzSsRlYwEegHJC^+y++vU2n>S3mCF<-XEqF`If@~dnmq7-=6}1w zb(|JYsq3{7!mBj?m25A9!Xm_esKpkb7@7qCjMKfIWEN}Y(~a|-O&haQix;y$)oz-4AAS z{onKUVSX`e@$Gg{8P-hkN^_9wBZ%Jzjs2K_zv{#l)noejk7g{^>sR(G4wjGq)wH6B z$Q6!5nG<34SKQjN$^%cD#}yZ(xocXW{1dC$eEFf!$oTet@iWeL?+5s<@qUB0OKmcw zwNL;IqgSB!JZsc!wMM&^HCjK>@pSUnay;nWw)Re`jtUuNKnOAaW|`6Cel#CljmD$J zH|$!b@gfZV(wp7j_vnY&lBU|nY%m`|N^^gJ9IXP@Wnc(-C$xPkr##=FH^z?(RWXiu zccK`VRawHGORzC}c=|xuS$?9~;IF}C zFzYQw_!WKDVN~cd(iS!1`^5!QVF-0U&A7#EF!^io1$!`+4O?U->~DJW)`rs6<2kI$ zus|{5Cc_f#J6u9=1S#<@0(NsZxo*wPtge(3%7;PkD`6cim=Z^rp5qIXmJJEv1o{ya zu;_H(JX;ovS}q&h+@g6!Sn>)YcKC`-Og=rZC;ZzCS?}R%d%L(Q>|FDhm&4weLh1Fh zyz76(9z`+=BMBkTEJL|Y=%75NKS%E_3|I#lK;>KPa7VtI4XwbvUT7151~q2y>m$K&>K`~^{VY-J?~%2V%>NdGdr~#qTLQ1v zPh=twK|Q_O7mKv{hqH6$!ev!AyXx$CaG99AaF=Fv1hQ|N{ZrP~jQRQUsH&;XHGV?4E<6xik*~Ch!4>;umnQ!U)|k!EpyJ8# z0M^DpwcRJ{_$+kObt{v7i+;6kL@N8pxg%%aOtpP0zczG5k>}F*ePD;DYv3epf!5hY z=Y%rwT*=bt52W72vv~i$X{O~F0+-8p>{o`oPpsvU~6N2kWpA_s|=eC-v07yW$zau*|eu;GV{?>Bqo^Ri}YjPO=#|m3C zm9tg_=o)P~s`Z+#qU|X{*H#(8dXIso`>)Yq^%Czd%!eQ$FrA?X z{e0sE>UWs<|1P~47OVsd=b`|Ev#uLrS6z=$+@9FODj4G zps-9C85F-lMhZrg^K}@!93H7hSXbUcAt6#=V+x2`o}Y`DRUNwI&T!ssXSkIBqEx@i zikW^|cq87wt*8mW%3Lk55G)Ac)5CpNQ>Xf98;;J3c?sF2N!i8Tk43?*;1kN=QhG&V zPr=kt^07>VQak{4sFk5p@dJMo8iXrUtnj^#LGM{4cDE|eexEkWa8dr>cjkc)aTq}7_^ zh-Qj)jF510b3ujg9n3c|FH155ZDkq3lro z8(#oe1x7evN+3P$hr!GBlK%szhT`WIuOB{0SP#bL&vB_Pp_>=5SvW7|<)+2r>J7P( z>|AKd9p#@SO2gmAfl7>43K~-~+0cwMQULvNiNo8F06n#cl-xPgI@767S=J zH`RuL^l~jK$Z43cncKK1bS&FxuzcO8!7uOECgfE&fQ@i$9bl{$QufBJ*slLv6$rA~ zsYmMpP!}jq(~;s=?8tuTu@+ZAX%uqxFLuj;!}{lO=%s^jrz{N2f7}_(qJwxatD;A)btQ-NYAAQ4r6rg(OGkP64rw^~wF1Vh z0njGck0a@woWrg)sv%ja!9vRN%OwcYQKIAMbsxM$va7Vl>A^5EdTolEO^n}>9nv!1 z&$3iWImvKPt(J4lTi`Y&g7k=ATcqni=>1B={T6W~)U=vFXe#B8_v^5Wv!`dQP_qyV z6SM6a!XOs${+>^5UuYUQcVW|7E%PHnuBk@QU|y@#O%vk^oGPLj&as(%!V$Z{9-n|^HwObYi8EX(O=#6n4FwXo;S?7nSCA3CbI<|nC6@V z<6Q@(jcw{|P+RbMSkC>SKYLg%SKb$_2$~HM9AOvHA_%Ora+d%?D8$X$!8E`uy!pUi z_{HND1U2k)AS>Q%gqKXlLTO=3)`N2NFrWBCX>U~rCR|vCn$<}fKCJpkcpFo1eQz=n zTSfUjNoEwM!9I8j6X9$9z6a;xsBaL%aLa?~dzlqx4^?fBgYdQGogzS2w3< zw+)jj)}yk^-#mp**IlySWK-4eUoeK3fieInt(#WTLZJ@PftSf4VZv!y3A?-SHFLY$ zDs$Fx*3PMYY@xxGw@;JTj~|*hQvgy~HBryr!^(Lkc4}pfC7O@afS}rJ;o=1#f{{%4 z%2#8iZd*kVr|&8lu6@_%SSk)h;s6w-Z92G+olya`2T3)Dx}woDJ-#W=)~^uq*$Rv7AU#cwYR3S z?m-v3_GaL0QMjm1!jAuKmnNrHqs-7P1KgiD;_gaJ(lMbMxe?&f{1)XZ)m%)N%{mK^ z6}Or}T+IR@8)Sa2)qVJG4zasW&CMZBXON{i!o>$i>O(Dq;LbhG8LLAmY6v^RJJk_h zEO%D~D|uH$7<^CT>{Izcnx{>dW2yz7>=BN+mfR)CmCo`xIE1_KcBt`Xg> zwGI1iOG(?=1f&dYIg&u97)5G zJxa(3SpL?|XUKy2G7)uor9Xa$Bo@r_n$2?h$mkV50{@n)OnO?%w2>(v!vVP(1T{^X$~(9)grQE4)A&8-+nZS9U=YgWpxsc26bk%I%z4 zw#PJ8^-c276gIm6XypJ~2-`tyOF2H%zy0LH<$ABaA;7xM?f2W@)N+3A!q?0A0$SrB zBgGA~3(aO~(#4|J#W9%rW}3U+Tvj!i*ji9lt$-x4O7BPSHO?r-!cbMDS7DOes{pS8 z&D?p&wKdA)Ftr{YhiO%h7s0$n4x-SgIA=<)J5yr2S2{7aiZ+4o?7=`Ow~XI$E^5t= ziDg3P;*#!A4P!mSSop%1bkO;<`xz!T@h@Ij^TLk^bmO9r2z0&2BLchQg%oeqmxshI zv|8=5t0g^FYgzdBU~oINmoXgYAHey<0w-wOTBqVOzWfATdyV*x$w9VJqow^D``R{Y zJ=ksCe7EGC2G*7=r>WM_Z?_Adg55F=(y-mgx|NZ&?fe0oh=Et-M+XK`H03eau%^q< zWUwy?f5A?1l00H>z0Z-emUXKNF|`Q@a}=_#IY}9(uOi74fB6QOYTb48=sOr zuK*!=nX9{9imXga&f#DqgH~CL0F^*tSJ}e}%CBLAjNGx21m`Tn?5Lu^83lf?H7hg- zc?bsSMTH14nM?7s^en%-*cY@W^}#2W3Zj|OC* zQ)-`$(htg8nR%5*qyI0pj*Oy6oztN%UNF@Fx^_UVZRJHhM)$Hll!Gtsz-kyu7oEoR zi&L6*kg{lImgxx4&pHs5yZC1*Ozq1`| zw^3U3%6t=E3^>F~19<5?!31HDG*frW6Ef~86C1+IxO4nb#)b_cg|R`-;kdjbjzpfW z%8yPD(R$C5GsCLJ6XQLC|7Ww9Z+7G}`T7ij72$uO8kC=^KnuJJ*1Ry@tyYlHT`S0T zB#pG@@jqeWReumdaind;_K&RG{woHMZA$=+cfm`DLPypeY#xOPt3`)G$CUx18tEB@ zjwXSU^&5p?YVkSCR<`^XtK4`04!+Zsseiv7&X%j@H-<9tK6?}X-Fi76@ZzQ4CDB34 zR7Qj8;FGt$A56Vv6P^X&iPx!1)_D{0_esN3a>Vh_kN~T?L8CyK5>OBOA5_8oYzTzh z?D-&uvIzFu_@(x!iffT4>a%6M72{>emRNo6$jjkPFyQnyd&ifLmj>=dX!Y#m>{w?_ zJB4P@0onFcYw$-GtPcGMImU98kzeMeb^o582EKTM`RpG1dn?Cj;(c0T$GG{JvFEL@ zV@N(`cvjmH1F2)d{+YJ&d2mlr>#-Qi$$0WFru;DLs9N}nxA+wy_+5TwNg=5{AemA~dJjmB z6q42hk}ZW~^nm2bAh|sN88Se9)<#t6;`%_60qR2}qRAlj5dk8_$?5}1N^r9eBwYr{ z=>bU!$nF71LT@CP%+OW|$|h?xO|5y}95nRzlQ_8g572sZzHO= zlH4UZo5pb2G@qm0jy+UcCBasj>{xF@N*s>lfW6LG#q==qoS#4a3KNZ*V*W;98vODa zZTltV2AnDl&H?qEiIcrv2$BMTq&2fJ6~p1BioAWwPAC64MTe3Fz8D`c-sLxTfPFWw z{sv_dd`?h_;GOBZ^NlC5$_+4VRCy)(#wE!TnaMdR<@*~rn@Bb$KmBOs@}_x`lb>c`FW&| zq_ct+!}#S8q|uLE_$A6y>qN;ZrUjEzY@QH1ijJ(-cso)$>mx}Sb)<{}lGVLZmxmEX z;bU;xrE~-Dk2_w{p~x_*G2G5&D`)tlg4=$jLuM*TzV)OzC+rZ%S1EL;bQRQnad?AZ zR@9o3w%m|RwW5y{dUnaRQ4s6FspKo5WFQS)PQx#G+DyL_7Q~|OVXI{KX$4OT! zec1j|U@ODfbUM3#!%#IGhfmF&L?%z5q)z_cB#b4`U>MFqDxXM2nCxw!O^eRU| z8q{ICh5~-uz2gABIvgoP%|)IIZo}OnH_Yb&46()XzlpmDYr3lZVDGoVG+k|pU9m~l zG{dOn9RjdN0ph+dMjh-|O|!W%ENg(anANt2*(fhd%L*X@Y+L*-vHb%EKvQ{7-obxP z!Qe5An|4?y3E0-x;$SLn8#6L8vM^(Y4}t;r(a7sP$>1q$jsDYUdC56gjI7a^#val8tl^78b*EHBH@=nLF+7? zAcKZ8t_>Cw*Uj`Z-KWO`-Q8FfFA95Tn${rT@iM}qXTmZ_(&r>T#M>S-)Y!xI-rYXl z{QMDYeqxskw3_BHA8Po_+9d7xb77?W#o}#*H(ZNPJMJX(FkvmuBP5UN3XK=%=&CyEsTCW&)|TRR?HoeI4`>0nWzH!9H_q zK$xe#D{zhnF_hzlb_{muHdwmRZ|MeGI=pXxXJm;B`DCttNKUFi7W*7puYB;Q&(SeT zW2w;R7-luG^MAxx$?kb7y$di9gF@b_^lZoP*dH+gX-zk~Yhctu46IuJ;LnG_dN3aQ z_wxR@a2P#IFTCa4ubNsT;(M$|LU!rBoXl2BY!Jj&R=2ao{Sv#Pyh6u%zL>4NVSyiF zBvq^Phx_3zmIjtGo(!fQb{!P@V)h5aXyWxnPSaV&z;gC5VRZ?;5f(+(eWn*;oZ$(c!wpjrTEkNpbzuiJWZvqeCnz)o-I}n_vo$aDi8NOA*csGiPBq% z(gW#y_65CT=wWWm`oDXNvR67%otoJ$=#8LG6ptFaq3_)f|H4k@D1ScqRMFAhz4(MB zxk{92M@{AiYML_ly~VHx68g++FF#1jQcmd8;ZSy7N=_es;Nm_GuJtIC{L5R*mW zB)bxwo^~lcOvNb*E1AUod5Sha>FGRq3Q@3R*IV->PP2$7UU>al0Np8~E9^1rI8L$z zgANd*4}z7)Eunw@;dA=tQR zu3v_0*&Bvww2xkbo&07^emCAaZS!s%vJVCW{XKgtcMRuYlE*;%lAo@FnV~oE&E@7u zauO1bv}!l-!ek1f+dQ}7K2NCVxiD(=zRoAJWo{__3aqKToF^IehOdFsO=AK>*)eVm zV@U%bF?k$?F+{ivWC!jd=-yNfK8(*BL=>NIpVM#+nVKvkhbYx1vu;)V5(P?T<9Pi3 zct!^4GX~Aj6{_w}yX|cx{yo$IJgf{ayxT6g#5%Qd4|G*GOb~z6#UUkEm09FG#*d<( zjH&+1AwV-iX4sd}?&m5#q23L-(tPjyLInj!wnyN7HVT-`*3{#zC~z|O1!h5@fSqqA zX3MW%!h{dL_NVzLiFvoo`n871+Nh<&(=m--!lYxMI0?{);dR4smG}_u3v`AtRlU)^ z%$lu!>S{J&^M9R7W~S=5hO(t8@xCjEw;AI$9p&#Zi5_2<;cl0=q{_@~>v-KDpmvF) zX6?8B3fa}kek&PBTmpJ(Y8Fpmm_0s*$x*sQtG+}|mEn%ngjiD91pq#LgVf{cG+*a8 zLEfCq2VYv;dH8yeVynXdtCdw$jFa6qW0gP@EKy2>C3*9#>K~zqltFdfR!M#X@Ied} zaFY9@HHn2auUQNJO|YkDgOr|ExR@NpTdMU%Y$3OR>V2~X_!a60u{;Bs+m$JB?R9|f z{i@lpu*L^*{t=kW0V8@>A!>-WDJ|9I5~Gv09F4jFH?V8zIOh7Wt{g+#lc$g8TkELn<5@QVS-zQx?>XYC1Z zPOnA((q*`b_gg%GtT1b?XgLJzSVrW`&x(#4s%g`33-B1T`lRQpIm)pr#&y&2Rv+yz&L7_oH~pTud~N zY%2x#b>2jgl98*&uX8MVj&iKg`%xJKc#d*tN?d(HRwf3>$)qQUBun&T++5I3W)tGA6(IK`Q2a82cO*iuo+f7Mh=dX|2?Jn`zO zL#E5JpCBI6Xjx8F77A$(F9A#(i&-UzhS*esak`q@@2;mex>{xzs?_ycKXuK4vDB^& zEVY;$7mg_8ahy<> z0E}{#l|S{CtHE@>9?urj!3sN{$xEnL>ySiT>0w}#3s73LP^xT*MV;LmkrDH2#3W|% znZ05#^I}$iRA6moSEHjy`D@Ma&_9fA*FIOr`5VIp)nC$`%`WDkIw0)1@O~MF%l|R= zY};+)NIrAFBQJR}FW~L?iI(Jq+p^@9WOw2`=+F{lb1jQHr0j|N>lX#^Qj`P`r0v<6 zbEZ2T5kR3(cND6gWOpDwA(ERuEaiFs@-e)vx=f{z*!uZhZIw}RXjfIgbSfLm=NE)fsk(pAD~CHBoC9gJhmrvQ?obppe?x!~Ew6DWRGFqkWwz={$3FR_YyPrh z-rM=tA-=#WUqlj<=w`u*5|t@19Xu3Jv`ofi3+m&Qr`=;t%P|n+S_b3$%gsx&X4S;S zb6URbpLbr(ckEg~xh|=C`MRb&n9G(^oV02{>RP(I`!2E0JN^KB6Vt=#A3R+Zaww$m z2JS)3XfSWV$0_=|NUHMvr+%(}#Qs@P=@Uajv~@ZwVCh9zY}<%f^~yAAAuK*;gLz!U zJl68@W2nSb#ZI^Xm;AfsfBQ!@3uet95r)LbaOh;FC)G^t8z2gzhy!e;0m16Oydrk8s zgnNL;LAs8sKgcFDNn=94qS7OD=**~Oo4JlM>YnaPyIQSB<>7R0HC-r9;OFp_YKqt#0c5{52@0!m7PUk2X<*C4IW>%PxM@5cDHGr zhwWTNzw?;r2sWE=dy)P*reQ_|Kd4m6_ATp)e^CR(kORU9=kG~I(ALvmI(llHDIPr~h@Xa0j=D!AxHE5uL2a@Ie;lvjH-C3@cC)V*mYZ)mIB--jF z%fy*PU{nZkTiQrPcvfPXIKr2%)Dh`yNt*}Oj9=UB&^t}Wz62+hxW(l&2(8cyRY zh(7QzFg}o`j_}z3L^;iRLVM!iK11F7@XOpBVUi-h51IFM2v2 zU{Ig`K4vknWDAw_D|#1-6Az82fhMhD23LDnm&#|Xd|W2x`+=fxMWlNMj|-NYXY#g)Q;LOU4XjxwiCm;vJKm7!aQudv zb>6enI+w%tT>kK)+EU&@MgyNzAsi(_z-|qc>N>S{A7LnF2eeto^t9b3TE*)!$7_?U zn=Rb-wp6~AJyBmj8kIgOJVMhhfaSCC1@g05yrO!Z&3^%%6`=U#mR}{Ff5oEIoi59BTpCPr*Su`n=*Q39|M1;C{`%>qy=?z)FUwT8r+i+Vf(HbFBp^aKgQqST= zg=E*smGA09pRN|k0!MNhyz*2zXz1w~Mb&B(M_KUucMPurm{cyky24;csDRog&&k<3 zPtJZv`JNGM%A#6%5#3^yr5O!(e1^(M0!1&0PF3Gyv|VrF3hH5&?(!qhDSNNe>YJd= zCJ^wDV>T$qf&=Nw3UJ3NS-E}y?BaJE!+4vwr13+w8nj_9oj6#p@iliBq!U2r0yF_5 zH~y>_y;S>%17^plQvU-ExazLr`>xw6mpzNW5toptumrtjGq0BCjn|dlBVJSBuE7a9 zCZ`LD*mcZWWDva($T%)sRIxAg?q`1`WB0P16ror{oKLi8b~}h4!+Fqi58f6-NjW6} z=R+UD7&0Z-xi+CLJ_>_cC^=rkd&G=)Qzi{~%(C9tA3 zd@y~t9&abdVjH;&nL@skUEQz#>N?bGHMAvz9o~Vu&rp{V*?cjZ{uH0zX@4-}TH<{% zMv2g~>YkxVoI|smWE%t*7o$I`%?mHuSv}1d!i%mJC%wI%kHa6z4=63h`JT(nLt-4j zxQ~bwGv=BTZeEi0 zzlUr+i}ykmPy=w~o!Sm;|2>@7PEo?0E07v6r*lMVy?C>g&s+&Qdv0Cr031tj0RKtR z(*F=*s4~xN0Pg;y&L5`s+Lb_$Ju8xc*_8xTX-n@gv1xgo`{W$Nyy51nj(?caAR5D* zI+qw7cJe8Tm>ei#4uleseAJB@h;@89Mr>%+%>m(Xh)v1Ud3TrTCZX;TE9`Jo^4cN> z>bHITE2G-^E_+!WKf)tSs$C@6>ahU5@hd|n`{7sEh^(;sJ_S_l#({yB{KMVGU+Cos z6;#D%FRYB9Fz9HW-1&cKxKVm{0%0Optz%}CL$j3M zvWV%?J9#SKqUU(_vXNdt`{og7d7Qn*+1XY37jyRCIQHYhv(Q>J$&-O#iPCAa4D0-3 z;b2TvKV4OV05cD_UBj|Ogz%nV__mFnlhrtRiqDl6QTWKld(mA|XR`XbDZr@!DGIAK zDxJdZL81LE+w+&v=dDFosM6$2$MKvF)M9)Xu1OQuwvKS^l&bY>dnpWbTt32}SK3eS zByOecHaWmTJJBoLo+_pORf#6?+yu={I&pc&wRD#Uhl^uqFA+p>j!FcnfrLyeF8MFg zbQ4Egb!u$#E74w|vtY2o+f_K3Pp>9n&;tZthY0|R z`E~I3q!&so--Jn6FUsL;dff*VEVtt7DwqtH7vm|kfxKB<-z@sfW;> z=o-w`z6DpKybokV8;0}Xg3|10{Bto2C==W=PNvX}27mRLl2P8@ zMGL~7ghzCbNy_rH2j7EmvK)^l-xlBdh!`dySa-uk*lSm&Ss`i`gu`BP&e#4LjjpMj zx~2G?&VKe`BacbCtE}kEV7rp~7)C zr(_jOz6oEkH>c3$A)+sZFI0z8?oM5RTqO0IGbIZYo91rq+*IB9?>Yy4=tQhwwW@EV z_lhe)x;d1qL{-t0)~NR3y=Uq*ePb)o!J?Y1@A|L|nGlc#n1%sXSs zb`WKdW%N1p=jiwi`dxSW_1`((M!Ph4`Jp@H_!vB6r=6R@|7+pq0R{6R&AK+zY%I|= z3F*YxMs)~T=)<+jJHu79iCZ3SAFWl$Mgo18Z?1>IqNO*cNubyA=ACO1ja#OD#`@6r zebId+^xMA*=Yu|L+Te)J`;2rntnq$z1=&=|2@|dDYTWu#(Q#G_SHM62ir)%qR05zH9O^sn=%Hr$om->y1}n13`;l|Cxcv6;8pjV2E5QFDexL}`$AMOY^*pLsqkN4g=9y@GhssAPltd`5r z!-K(MTW`9Z9Vc)h8MyWYL#54i2GT*kkYjUSC`97bRP}{GX(=f6PAbgqMdz*xontoS zePsAAr;4xBPdr0QwvDq?we>phfWkwa%5 z0CXX#vZn5jgwE43bSic{6yHIIuM`O+*a&g8{o770VBo8m5Fc#gsp?|tF>KgBWIJiI zfehhb>$I}IOtV$IW|gn=dGs2iK2E0}Qc|jU$j_k6_dLdr2VCwLvWeI!Dh)4U+a`5m zR(z-set}z?MR|^LO`A!fy!Gsfq)?YNw`7B5DWN9xVPhZ35<)3(VwVaG^ENi{EU)R! zs>iAcbh!pSfkN~0IP zX;N`k_OBGrTk)b_->|C=akO9vH?cRfk>U_j*9Nmuun2EeM^MvielxobZ+R8xUn+|< zf`LffxLUGST^8#9E|&ArLM)a}7f`5s=Y5sO7)mWoEdG{>4ZP0M-^u2<$-YNigB4Qc z&1|;&Hi|Pm2W4Fm{`zhfuaaHdXg;YZlu*4iD0#*N>Q%I>6j~UDp-Q6;n>WGa6@Azn z_o`pV$``Kq!i8&=)Hp>Hm7giz zP?Hv@1^faH!P%RWg}jHR<&*QfA^TrF345p-t=HF4MyX0>ma+3wdQ1duWRrZ6?&j$x zS@)Tdy;YF(FRO9jLx09}TetE;4uyD80fl|Lgm8})*TgdDJW7IV2wvH<8#RQtd zYv>%?WX9A%gFPJB@hK*fd>G%qoOH`j3n!V8L|h9M`SRME1J;_9aEELbuk$_idal!d z#Tm3};Y+J70FmZk8+(|u}1L7&H z+Ip_wAsYW@+e!%c1WLL-r?0Vce?!49w%$OP?;jzIOHo;yUIdo`Zhg_@{({PwC#p6c zvN+FsLB~h~(Xnk7PI`5K)8FbmCSD^98{Fc8{Hc4h{TEDoch~rY^+^pj8;YPcE20NR z@k;?u;k{O=y#XKO70U`|MiWrjiTW87~1o4$$yy4*D zSgGeRR2qAZo?@uoLM@CZshR1ZB0z*+ch6U87PIb8l7qAT1EFIw0=te@Pw{?{@=(r! zeTMQQnRuAz=D8zk>*c_)dXC|wCfZuZ2a{V>V)Z=ayH8f0%+ z1#>aVzhTiF&ifd%F1R>9r!V{I?~C+hyFPM)pvxoGwG?bh!O8YPU3}WUZPB6O_7wzZ zS(B!>{+9?mB(kB;0M$`R#+j?>vlQoRk}`oC%`jo;s!<9jP?HKCD}tmW6E08<=g_^whx>ikJTxE**l0gaSpwl zgYCm6o<-{!7BR@V z=okO|^0J{DJcku%nge&p1e@2WolGpRA;I5{_{su+htb=<)FkiLrgjmt9i-2@h}Cze ze7$=qdYQJA4fs%(#J1d%E(zA9yaggfK&?s1Bir4&FvS!6d}!rHngu&73VR`IS)xb$Y2hP!7g@r!ET zZ^G-mTvJI!54q;2g2x-ys_tt=AAQ!t7ev7&ol@Q8r`jLX2W6X_8f+}(1$PTZ>}~k9 zxas1+a7$^QrQ3(v8b6H(%kfeBKgZBZV-m$}M7-!>BeXJF+2uk9<>cw58cDX_DH^`N zJSXc?mNoQ(%l1`R2?}--zQl(xk6u01Ys7klS_6ka9KT|M7?UbE6wDq<-n$B9Zk1oKBL&OKMpVXL}=H4T2P2GqtDFwGQ9W@U#8hC z2I@zac0(@uJiMaJB8QU6_R3hqkGlq@6%9?lkq&I3!9DBIPJ<&oq~XTN@V z0FpSM2oR*)uAQpscH6}5;NaXZOh`H?6)82$4gfL0o2&67sYm4exizQ0ngu>4i+#~R?^_?^==0a zJZJH8K`4aC*Rv^J0Uwwfq%7E}_u1N?*QrB!>dPr4Qx3@!FOS1;nz*%GFCjvf>$UGl znq`{P5OsOk^J?vc4NIiM2b4t9;^cR54)xpB^oBZ=+_Bp?pe9BI|gNYLwCBaK0C*tQtK@z$yeyn$e_RnB??D+M~@<}ZIL7qO^0_Ntt6j&)vGSw9B+EcQ&#@P-gu=P*NzI5H)Xk5`D*_2+G~-^P~0G? zDy`QF?d0ctQ=GRczjHVJ)h$J=N@q##4JBjCKg&sx?iLH_5}tMN9k&p6hR-5(m5&># zp7y&@OhAIEaPqj3az-sMp?DNg1z%17E}wGm%ogr1ka!M6))ck62Z@jzH9u1DzG$c= zL_!T|(Y~imp>&**sfwb6dUayUn+y}rBQfH0Bs+*A5u?hZv`Q$I(P#c38oFpJv_Yi) zFvTxPwe~n~hPj}5>jBP`g)L~}n~!7|+pL)P*dOISeX#;O3h+9WXjq*B{%3v`b$#Y@ zA}ajx1Fu*zpojVP+kCh0y-LCqG2OA6fk6>jmlY|?G9Q#B5C8`Rb^W+ig*30{Kh>Tc z+#8LK8-&O4JvP;iGmN-$zzL>4CT6xXouLr1@BrG4d z)G@W6*=E5?u#qUNz_MCBE?%E@!)+j;XNZl|?0xlR##(1N)Ikw8C4j@2Nr7jquj^nF z1QcB|t<*OB4YBMb(uO#gf|q`sER9hSLz?FEWnGWa+9(|@z>%?AV)~8jX>Ok&CXsM8@U{Fp?AMEU@lmTxX&Dtr{5AAxv_r-Jdia$Y; zqufL#ky<E(w8cPKN4A$k_7j z9+B`I8lyB3#bsR2+bGdlYlOocifduaQXV<4pN>xmY0Ft4MB>D?rmiSvqlikU>mIj2rDcx zz$B$?0n95P8e*oJ^}N~)LLH)|=Ssv#(C1Co{noUTB+zQP_4-$V1KN5{u!iZ2HYSaN zMfj+A)?SIP$6{|sOn|KE6{C7w&EXpqvKhsBRg@^hUr6)9 z#d`hx^nJEHjh-~c+OrSe?dQ@=IE@hF?CZ+@_6;9w&rul9F(GJ=sdJC^%TcphU=pUs z7^1ovvfw>1kyXZTF+dZv*?8n;r90RIU&!$-j`A*-CwT8-?D9@TK5Bjx$EYI<01l~z z+q+!V&AEk0WY_l|?0wSxPHdMIvFN0E%8GAB#+5 z_O2kYXFsyv$p|2D4*hbP~c<}q!hKyNBsaU)eo7H;rqn7vO)i^^F z?NB_N@($+IFfPOx#L~<@nmV= zRZqCmTn~f-4V`Dj;!l*K8wlUw#t{Kb!=`=7U_NAldI=PI?A0fpWY4>+m*V;JeER^k zxQ7w~dA$ZCG0TV~Bv*k;r>HGD;H1}4A4w$JXbuS#69k2dWoTX;O_E4p+ZDm1XrL;1 z6txPf=wn1s_A{TmR%@aPN4Il9eWNT1-oLqlmGBK0U3G%^ydRMvh{%Yc`XNF3p@{y!@Cbr`7)Q2+1a!n znc|UgUgQq*Kdyud?Ih61BwyJ_O8$jLCU_*RIl~zKh9-^iq@;%})ccCXU_yPRRE~XKW~U!c@o1!H2>~?T z9@-B~I6^!@NL!2j(3;G$Vdp=p{!>=+?m3Qmnno6m!;o~y5RK{qA4K_`FIR_PRWvem zMcl`2L0V67BYq(5U#10 zgDi|Zlvz%$^TcL#cqjs=T-`1VR{L^-f$V|7I*}cZ4Qpuf-R0y5>f^29eQ00vz zsr3(FvUN8rXZL_EJLMOTwMfW}#kwknYc+zDOd`zZu2dxfMUV@1=hv^#HxG|n0E;bI zs*&dOTTysXpG*$4^P6T=r1`5mSf-J6q&o6cccXOyR}W!99euYq>}FFGsQ4}fQGpvk zB3b=-tG7^n+M3|MUyE0~Jz*Q&4N{} zJQPdlgz~ufYxra~LP3q^$m7G7!QLniCFfw4SvBMGu<3X;T}^&0tUjWtHHvJdTz-%| z^}3Kh&FY`9Ma!|p&iBL^b}$lIm{)WDKKDGekv2Gr;fs+>=#6$vTRTqBj(dFiAx|vR zmiXiVQTHZOvvFP`xJ&_Pjyc=SUFDP7z%R!WbQFHbQNH-@n8J>)i&e2Ho)^XF^&HFD z&yM#I8wk<^xt`5KFHKUF-E9QI@K<98nVwDCU0r!G31EfAmnJCi22C zFj5B50#)Q`ai%DUl2vXGClms$-{Y|dAlVP)i6Ies8%d>-bQ2$v#z^B3GHkqxY`5#} z306{AC0JNFX15|LY5eAKy=hdE?{?Wwg87lsqq~YE`e@j~nm}CWcHDG`DizXD+SLcQ36%6)*VQw$PThbi5+t7=*4qXj!f_4gbcsG)D5N!H z0BB+~xRGDFTPv=DFZ%XVsWZuo%TB%QFM<*hyfk%-Rzb&AH`DWAS6wq+m1x6NN%y%t zs~578(4Ye79AF4hh*+P+Y8mZLNRyQ;ev@g0ljTw#ZaevL_t+!R2$}Y!A#l2W1q~YU zI1y@|LzEe;XSQxmhP!pi>}EY{;~7TwwhAnl#-@Vt1iw7 zJpfNYu)oV>?!Gn0n(-uZJcv3KdAeGaFWY<&?}rgcOk{2`5sqU#$g`*Qd}mCSqRC>P z$+{_`!0%By#G6^u<~@3hWmMHYtRbxm;3=ln5iN=WQz;LF?Zf)@sYw`@_U!*c1$77s zOV;qRS>LIiGrtDDjaa`8$5Hh6N$}D-hLsGb4y?Oaua}bacu`=pO+nS<(zxca3?XMN#4JiEND3qw?cyN0Ejg$2R5<`%pN~v0pbO8m3{*Ul=Ln(cERI6}+{j z#)QHM6Yj3o@G=aTBxqThuN=#!f*v(LGJD86Y)CrKPUhhIt8d8uwQ9t2_5{Ue4CBr_ z(IbF9K@g1ddHDUMXr^7Q2Pd6)Wg;w!N)W8$Y%aVMDcgTE191Lg zZo)Z5dl6L~VLNo}e=+f2pjk;iAF#jHy`~|4N<6>o(Ayi&vL4np`)&`}fqs!JP4oGX zkZzJBG(|Dp_8p)Bq9M++>CH`c`Dx~Gk&*<~=_p2faqe{i7g+z`;5*7xl7C~_C zi3eK*eB)Cb#F#*T`bABbTe-tBl;}L$ZnVVvq zd+flV3nKXWxO=Fs=WW=A2sJZ`q7Lg8C*XD{tfsf{}td?;bW;6wVey7>V9 zHfr-utAj-JafvtbC_5KnSad1*j zbHCpF>cz_;lLM|IH%7|yb$;jqCAJb{0n{&nCAs6?dul7-SgexQEZ4<$_PqXC2S!w| z?II=hW}rAYz_NBP&7YKYbEl13y%R_r-WxWCP{2z@3LzLG_vwV(@9eK%h(=`i%}GUE zxBUP3>*VS2hlWN!GT@j4RhIkf20BhZ?xZk1fYowoAGFx0h9VT>3B_0xACoMqYRsGg!<4E8{kWLn9~V-X@YUI{{MM)UhOlnW4ZkE2|%A%swgP|Uql zN*!-gGS)X^(~=iM!E#5e+aLJ3AlZf_dzc1qR7zF`mLaag2?P}Hb#FV6m+>%`yi6hZ zrYQcm7(J~~B{1!t7hhVcS~V=@Ri*3GQ{&-9CUfavKdddrwi!?lHs6xF6Aq9QzA7w>g@d&s^23+pcJ_+cCX zQ%-4wKplf1S!Sz9NJk4NC~2m(`H+?Z^iE&@2^jU|I4?A9qR>RJX!M~04XU8pj51;m za~|{HV|H~h&GlHDVS_T&k!fZcOggCv?&Xv~JlWax)$Q~$znNZqonB9Fe!rgPmsig~*k)#6<;xN%{SD*m#2@Y-4lZ5CvgXIE%1zBP6z4Y5DQ6X4}RXz+D%@~`Plt|9J4 zCp9!_u&5c)fR%Y1s;i#$tSlc73h@y^A>*^Qo-i%1YS1+sm=Xs+u<>URc)+I5GIoUd zwimE{SQj#uqgK)-6-ko(?hThR6j@jb5v+ve^M7(F#4tI@9|kOShNnStLz3pp0n<2y z8=fMKfJgcLJG0XisSQb-&;Lp6LSh^b^VQgUK)gEP`Qoka0U0b4krzYVuMjlprbv4z zs)s@&P{XF&Fjs+(Li|ztk0e;umfuC-ae!We1U}GQ_rUAQqrEHddu2?RugqtSfxZylSZ-ydpo88+)cqbtPlhavr4I1xQo_N0 z#j$9vc(D4DB!TXY{C(J1P6xgfylxy^{6719eRXxwLjgD$K>_$M7Kb;+gR7J2Uui68L_AcuCqU;*CR%#o>3avy=jdMxJl;pnQYaTKY_kZ&?C z5olgjtMYB;P0_q8Uk;g9n@<^4+2jqJp$!_Y_~4g^`v%A1=s2{=pE-Qq1kFqGyLZmZ zVI)TDt6~yHA{UE;`P1%k_qr_Fe__Ex;}aUh^N>Lj&quAQRQX4aQeg1!li+9ZxLL|> z*gi%f*88Myx|BXI5fY{!C_+N`cX+6#);0?W(FkLQOxP(ZT74cyYbq|%9$&l94u&5b z+e4CkKFAIVp#{ChZWcuW2(bChReo`Gnw@3S>-=K!)hQdouuuz!UWd}V;tiYqK5(dC zEehMZX=R)Ddsate%)>e&p0h`zW{+I6_fHu$q0O5DxOw$2ComfbhLkoXnMtg&w0soX zuy^@uvtK2JQ)boLq(_cOc0)FqY!LvNr9F zy9Zi35J!#XCa>(tJsJiqD6Iv+8XDGyNXOkx zYwwl=x^x6|nS^c~%RFmf>*?_1!F{K%b6?7=bsxr%@6-NOid@=0cdSRorfb@Vs_4PV zp_Y2cZMRtJ?bn6?nl!FOPjHI1plU}wB&ia^U22^@j{2PjN#bA=hGR8QLk2*?xj{HfFQ89=ipV zG#!)I_v)BmHwIWE8Qg<09Ih~z48l7(iL(}R4P3Yie5#*Fr5x;P%wpJ>MS+6q?mm9=kvtAqfGu6sygL|iqQF8`Oeml z+d|G^-p0umS;(cJaf`O%U^JqqGed z>`*p1t)qB)Hx+eeQyu`D1R(-$ogOwn;+3Em5OowMV>IRa$v4K|MRy)pZ{nWR;841rF=^UPH*lw;m$wrI zbK_=u2829pO7iu6oIvXMJtD5Fz>k3H@evxY8BgD`(1q0?pS@6!73YnoskdDVaGNL`c$kI;F zZx9GO5RSyPerx|;-~lz&Z|nECP_GUn$V-LXVsix6Hb>xQ)&&u58YwMbvweH%&a)t- zwXW9)Xmhj;R?Zyf;26X89n)i?ZC*@xDB7mi>o;zgm`LEu-Ol#2)PFiG)QC^A8t0A| zP{AyquE99?MKI3cz#38q*8Fr76Qn&n#vo(DmZ)UIQ110QSL)--XYWD)$eaK`p+uJ-{m#>BJF=3#aT3;Mb zdMSWki?(%a;q6Wj0;c2d@1~>RvO>c${`AH6%g4DOM8&(A{IAX4{~WP03%!bAu)hn_ zmv>>YmJcSJJj{RT+fee>^RjVL4wPV+0mOycO@C)!GkthPF=7Wgkzw+KL2}j~cP|nk zXWEA%Bohe|Qzk)k0QI3XD}(FphBEGTM}uBs&SPng!G22yz~1M~D+OmSX-PV04ipzC zfdkdkYS0<>Y_~+hmNb{<=YHtjbjFuX7*MtK<142zf;h+4Cr_RvVZ$@Q?r zj1xiwzezpYZBdoH`aL;fb7JU4XF83?0;}aV9g)h|j=fzLMx+*BuOw>ZeeQRL(_}i1 z<6}?|l-P5XBLqm`&*RRwcrb9E1cimnD5kP96(xe()RX-&Km zP#0Z5qGFGO>#wo1Qb5={M%lBHDJECr>u$*wwwpv{LT+-?nM|z(c7VJiHi$_mlZQK# z&S0AK;=#0I&3@E7f@x?74Jem$!cn37Y!@P4Um$*R)wkDqj4IRQtTP_R)+flP`-V^w z_deTlG$G!xatD{n#O=sS{YRy3bQSj;d0Hr<>1Y@`omfBeoE8bVBEe<9=VBKj?iHxF zMgj9Cqw9fCIbyMIf+6GYwrD4wllY(&eQo(X@Z8x52c;6UU4(f@s|+9Log;adRhE?N z;w-4_ZKq@Ad&gN9Bxp(L-@_|^VGP*Ht7wN3C*y&5@wj2V*y0iI>0xW?2M08pn;<9Z zBK&RCx4sFpmsX-r3H(xK!k?;(nHLxQ^V+?I01-Hw&8j2lc>z6XZ z94mDNres`6x;4i@;dGqOB4W1U`s9=h)`(>K_mpFbl$97hz~|TJ+dz z$Qh7h!MQc4YTvRkLjzP0PZ_dZJmnXV;~2^-!hBN-&Z~7+mWVlQB4Shvee8#*t{tP& zkS^t(tw;M+VVvgRAC(D(5c8fk*+n+Lf7qVqYxUi~U{Y4Vv0o%*S+2@Mn0wq@*rB$n zu(FrPxBL7m}u&iAi^I1MSC5L7RIxW(vN?I>*dG zsy3|VQrLzmf*0K2XyZri*{Xt#%NpyT*x8+DAvupUm_FE=L0DE+Fk~F}gd7`Z8!;7> z;h;zmBX!Twg9{KIHioLqi9w$Kep-#Qdx0fWb25kx;?pA_t?Og6s)vGw6ebAyFbezQ z7x;_Hn5lDm-^m0)e#8LY{np(;%)wbyqTx<_oR~9!jYde>BGL-J-HDVffmS7KZpE%; zBeLo!egXfPoApD%qV?y@TQu48&a>FTu_v{S4*Q7GZ(-jGuwru`lzL}~S3ITZMlQYw zJcx|7*%eSW{u{wI7#vfa%uX{YFsLy~?ph}OVrQJO2#AGOg9t8s=GMy&lY-U)%-s9+ zrFhj!0ysaA{)nB51Hk1GlO%H%9Ku2Z)>-W?j@gz3Ii3YMuSMinJhg%?` z9znhNOnq!H{Lf1dAAtkeo+-Ec$U@Qx>*ZKUQyMq#dTAzrtcWD3v9;VxdC)e06`r*H z9{(gL(py&xWx7_?V!;kBbl0aNs030qs z*(5A=l!4UfSPC1O;+ukPU-Se%d}4*=^Xa4hCvccSpIyr6u0iQJ{6dkcyDmE1s@26V zZqwWOLKQ=8sTZcZ=gR_?aP6wz!Mn9C0ZNCmooU>JKY%rhy+2wU zHe0O(-ktV5+IR1gAk$s@F1_P(MPDGQL z%lyXl0s>BNR2{i@^9utFP9vP8r`s0>6Qd+OMUhii5P&p`)O*M;&p_<*X;zk$*sA_L zAlE_Gp?FOH+s&VrTPFt+3(?qt1|?fqiE~Ko!fb;Q9syd1yEbyo-E);1nErQf>nB(n9N|z|!N0s-#Q`!@ z_OY>Q^ViVJ_9^1hyb}9Hixcid=9^lw5%es699T@;xIvQRRJ*+e3JXGUbM*xYXTucW zs&HM4h0*Id@7j-wy!Zxpox4v{)K+k}ofVEO#ik=n2-RELQLtgFd=Nrq{cN-c5zq&m zy~;{OKA0+KHlCICNo2Hip!GzI)|1X2lW{4~9@BppLR0ea0mafqXK^7M{mItq2g~p( zIqxScr#gM%r5Xst_b`F#OT8+w_&Ia8wQ{~Gm()A@13E^DOlh9_S}j< z3uhYg!5h1*h5JhE1psn<_#y{IPw+mo5dS%>-W6(af++N4WuUuf0FRc?K+=SEuMWc6FzM*s zyWh)*HtWP$%-mwqzyR3j(e!bJEabP=57-;wM|EhLMqVNo*~rUyX)P(mjJA>zyp9Cn z`(D=M^5D5M*a_-pum_L4bX{$F6Uz=y`mGZhpilii?Bq|CnOv0n1}l@m9xnotqCn(l<_UQJ1;D_Adp!d37Yfwi6xlNW@?TQOiy+5FN)b7Lgk z(&Ce>xLd34zdGp^QX?|X(xo6@jSY=Oz*!w!7?HxgSyw;O583evrQV&XMj>X{2rD{I)|666c$G^W`>^%gTb~dNIUl<(oyy z&N}aO`@_$M0dka=NLUZ~ z+j0o^{!Ti7_a{lGb9QDqh8D{dRUm8^3Lw@j2SwQXVFMkl8yg`mTm9VS%WW#YS`W)I zV-{;6xT_zQXEChKqUM-k|FG6NOCN9Ze3A;Sy}W;&#;Ns+YD6UENinO(Y!g;+k#zW9NCb#C)NnTf}$yGIlu zA#lbcacrjF6LAmyY$re>L<_nmgU-d;(Kh*HCxG(H9o{bg82=?n0UCgmi#;H^z#XpAn zLq|2hHf?c@p3~N*#llVk>RHyl&JPwgg~mjLWu<}PFdk2mv+t5Vqp>AzaNvzc)6UdL zO~?h9v`8a-SQ>Tnb-FlDmnCX!mLj-K@DVM;%rmorjEUJmR^VPO(&cMznPw4GxnNXj zx%sBQRKutJdSrd*YjCptI(rU0`=6W#l<#kUCJ`;ERH{T|%zW`^oJ@LAJNb|A9SY0 z2>lWMV0nmTZ}wl_&$|Avtcq6tO(>Dsa*1Bfm=}>rO`E56Cgk7NLYY~cGt65p(&z4C ze)oH{EDGYE;GQ0k9oGzHp7CwI-kb*95P^fWC zZy(-3MD`n7A|v`0{LfzHyqd}-42fv{>14(*p?v-DA2LiftA zw7xSTpJ7}-G-+0s703?*o;}R}ywdcoc~#&?b{kvXXX{~>u5X{k{F|fZm3(BkqHLqR zO@C(>g2SFqpm^jSRAcU=VK*FY`l$zCM_~}iULy+hMoS|7l0Esq<{ZB39LGqc=90u^ zNip8^Pyr_*M=ja!{ zT3uue1(q3$xQZ?RT*Mv-p$@Ei3*VJ&{_lGiqhb6#8N}aW<;DDIShyO7Lho}tjK`g6 zob>wRxGTM16RR7)938d2C1>grIQ7*Zp^1=UI~(pwdp4sJD2iuwmN( z6$Z(9o^Jue8Y9Csn+T9$6X(X_W&%+lppzPtaP-Gq{_>&v6G|n4;jn&uMVuJpZF!(2 z2erbg*p89~6+)-^NanJ>0bYOhf3&rj1$kSH2F9JM{r&veNI3?%@RYWWww^Ztg#l=o z+`a*Bj)JlcnIQg<8revIy{~UW?^fK9?#dXc;{`%H2O<>`E<4g^GmB&GMmhpw8Y#1j zV?d0D*z1nQLQy5d8_Rb=#?>Ra?E;~9rpgCT;-qk$+dT)c&>MBT*H`_xXBRsbNyl&@ z)2#rDd@t@yrsdmR8*I%zMLVQTtcL{EkQ>_}tRju|DpZyopI#ibDdOG4N8*Ef!_jzu zS-t7<0U3>#Jr|Lr6{BnX{KJhCZ4HrikU2{1r^EpI)7|&OdMlWlZa7+ zQT^lN52#70mu_WAvF+HHs(OOQ4H>w|JQ>S>WN;X5;F48-+?MI|u=Se2h4SS^qCpbI zj)e&(O%}e9O(Y6Fwv7h}#6@A;|1la)JA-l>tHrsjLen_5Hj6hV5C`xq7Gs3GbQ%}o zh77dZbO1Nayv}sm>0VsM!>KK*scfq>8Ycz9i=8`&8-j5;fr4ELEhl8Dek8FwmW9UX zjjqoIkGSJ8$pYQbTi3ij_rJwjl^AW^|s+RltWcS`vT?SY$>%BsPn{_zCJfYpo2;^IcAnmC zb7Q##3|%A?DHq9foh~=>4Ruy`$3Dza)Gh^p`O0EeMshPg*P>fnOed{ z5Z6MseSO92jsC<#R_0}afX=4f+d&Kty`!X(tHRj_o-!e{*MAyGd0OU!k}j&5uZl=| zV?_GVWSjP=W3BU#qb4uP$g;&kDxlBn z{Ap#HR5j1hf(j0ya+@m{rPW|oZbD854HYfZ@izTJ!1sz*My)QYM+HdrcfJVSFnWN?CU4H7U^S zDAog@GUQvbk^5RNST)0 zqCT%wU;lumNL5MsFHesvU?}QwWjMfl8t3qrA!*Q-vQP$5$iiOhN1Ko<$f5!Ew!(zl z6h_|Sd2e$V42xbm4BOqJdXB2s7gHiXZOzoYbN z0jEqKgjqBj_dR@HVPMY-4Z`9kA{cqHGQy+rO|Nh&T@5jHq_jB@{pOgL1&AxabrvB@< zm;WgH7*3%7pZ8tScRTP2E8XxL@4WEzxBi_sADBwA%e_e4KmYvJr+mnssWI5g_?JPQ z)MVhlr@m0r-*BbYs^NCLa}Vv=pV!&T55Uh;?((05HUBi;inl^rQoOM}-@cqT9C~Z3 zt-GE&fBWV0Pv8Fjzx4q9wxi&ghMw%E=V>+Xjxt+9X= zv!O*!Dlv4trLvvyN5AX4a}hE3OS!l72oxM>r{=X0O+cJ|~#zP$H#KDTG3il@n(Mi<>5ux-g_ zZ)dx|bjX8eTWVDI9robaTU*zC{H4Vy3gNdO=AuhuKtBE0dz8qFs+rVjJN5jgMY6@?h$On5$m@yO>&d(;p>LCFrtB=J z?8IzWWzj8u<;#^*g3;+14XO&}i+%S;Y_Xo{5!w9-6QG&)GdjL@eYLyz;dA}z$2eeZ zE-wQk+xLZdpsvO1AAbC`Z%yCA=J~sq;FbOuw7?&pUtSm<_}Q1wb$1S$G&?&m=ewVO z4e@$sCewT;^z52g0m_b@EzU*vf0$jL?V!uMpZ<-Tpk}tzSn&4Q89s4E_m6+)Va{H~ z6j3PO?AS01+R~kf=48FyPPv^rmXJ>_sZOYp7Q*Yk^Ya{Vv;jvv0QD&2f8s+;g9#M7FMP?+)E< zTRwIByW{%4YP&`AJLV54muLObzT#l$Q^{OP)i=9lUGMLx^~rWs?dt>gFsLo=&>EG! zKxE$04|mOhB<-89wd<3oDa54V-Shj}`$SOyZxXbpw+qLz6Q-+IG z@s}%2ZP=G>xx5eGJITXh9sa@WE4Tt3J|W!F=5ae6bNJ226<;XnCfzmdao_FM<@UhV zDB&Je%LD(86K%XWlI8;R3Egz+o7y(broXn_hgluZwGVf)FO8?mz28HtY;g9LPvtg2 zn>bL@{{1OeXf+T*ff-?wl>oz3=#u;@SypP&tL;WRc)LxpJNXikuuBWX}TRdyt4 zT+yKmQ%9-h*#yN@7vDZZc?bncDJq)A8f>^Z%D1Knx!=2*pvNc)ryXvXx zR%N|^VyX!%9Eo(jBO?-#!QIpDu4J3N097a1TGdU$}}M{D#YoTP0NNm!MtqB+iH6#yG6C) zZm6Ih6Wi6XKCoBFtk)wXq94LB1g#V-b3i{O8@t$uT>#i(q`D9`NRI}Ll?Zugx^oI{ zp`ONiG**lC@zv$-b|qU62lpxh%+Yiq0F%st&eE*_#U+JtHbgRz2FonI~*4XsPo?2zTpUDMU^z!f$&ie(AbM~ zwyh3#0hEn!kbCNcJjLW=ZlBimal_pbBeF#Ak`gI*_4Ymi2~vCzbSjCv9Gptf#p@lm zyZQk7mZUA+w5O=6XM(2PH2eM2oB%=emsR>?iw;e&*KCDjvafd3s0{6?S_hF&*PK*V zIcm-UZ(xd3EDzzi>|>&7 zE6wUd!zR3hJV{kA(|pkik26KEsq3e%x#`08b`RkPDlVXtd2#X!9vi-S(K;)a<+3i> zP9t3c|Mn&5Kb#FfUK=UwA{lQY_JM4pv=gKZd&PZQV{8T!u0j?>Gj1vbyt;{Y8_x#Q z$;!%+2-+M6!i2q0oLnbRlBg(Va$yn(7gLCnEDXv$MIxk(BnaQ0IIVoP-_!>f^0M$2xJsMh-tRP>0)72v$IBI-_*DJ@{zms zLPq`xr){ZFcrcrY*2~|~dWaRI-95J9zZl_WHF+!TzHjc!b!(lHb5D(JHWj6=orxVn z3JYp|Gxp(croDlB0iMv&K}IHC}joC5P8v~mF) zH7m@Y(|Yjd5|y=9Cr2Go*FoB&84SAqz)o{D3pf|PrC1II^|pT~efQ)q-A;!^Mq8Djo>R~RxRO8eJI0qF56H3mmg54Z2CoZ!LO zVi4oBn=Aa3qSov0?v{_rsGsKK*dp(2g*cfFz&cW6pGDcWH9McuDErFY0JhXNSoncE@J??VJ{_{CSS$1Vx9vXJhm-Lr8-upwvMU2AcJ+%&{ zjR`Cjh^mwoKdE}3i z0#P(4Y&h4H5)duzkOj-v?Br|NcsM|Mm(qF&2PKjTTE%^W>T)z0AsT!I-4+_{(`#rv z`$!ZSSkt0KM)?#7?lmgBU->jx$yM0Q<$--ag>#XBh4izLZYrjPH8j-?*(|ACD7Y4b zjN+k%uMq9*%y zRr&DrRY7YKw}7|94{^;6%{)AlZLTJkMV8>zncT$a8ux?5c^xC3DV3X3DFN=B`FZ*{ z$}3qb22-4BSe=UDp@gMpwGjQQv(2oGP8(RY;UaJaL)Ffm`9JKKt5;)KDe%!HT(B$DJ!LuW=T9uo`|rj7~w4mJIHl%hEGzf?SN@-{jO*OAKK7z`kAD znKLDe^z`?)v8%J$524}Sut@0$q8uE4D?OHN}W}k zD!lOu=|i9==#)m@NO7gt2!s#98MmM z6r)zFLDNUMP< z2+%F+XCO|ioVh@Jz#$T8luwLuf(PLO49ND6RTXeZP!La0;)s)x?84(8dCdMw3AqG` z>J=*ckJ}S11X(niVmza;!5TX|SVJrcPuMxC0$gofOm2R9{)QPiu!NO58;6hq6=&2o zeNxq%YK?Iz+Q$lMOiz=MI)O0+1S*kVfy`hIq8OEK!&gdjplkt^EAoksM9^Y%%fF&s zmYaodKouHPc8tRzI$PMmgo4IJ7HJ~Ah>R7@>Rkq9S^ryAiS0@?B@I~#4rNQ6*CCrJ$;y&TynWLIf8>xX8u zsH=Xey9?lcA*jDl?{6$1oP=A<&#wF&B)H3e%GJaCE39PR7 z(F&y~TO)OL_R@&qm7aP(wukWS>XzN7ihLZb&{vMxCrDnG@N;qrG9^Z2 z$o(hx0oJGX4oNg!01?+RiZHWjv)<=ppUsdE4R_*n(e&|6ic#W~qQMFTq`w9!0a{Ng zsRpAP@YVt=1=9Z2j0LV1@{`YqJ4Ct5(&ldn5$y?DA3<1QOfN`6?$VCj4$)_9wGs_C z;*48=<+32v9MZf_#lf(c&$9=9;+1kUz6_pm;>{KR7L5)XH$*K`6&&SPkA5VY2WI@0 zp%G93!cZ5y#bd?qIXg0i3GIE%6r;f$vZ=BMX2*-P2Mvh~W@cB0i&JiCECp+! z_kPN!M7!ou{^?*aKmia+#h_d2kQ#BON7*8)21JFxBS}emRGPf5*@je0dD&nOVXy*P zO;ki$7o%asFfQfAwB>E=!_5b}$_jHT!x}XLlsa#Ns|LzDMI3Yn)sQ$pn{o5du*8Y*r07VXm?Ur z2d8|N7~53@Hb<2OjdTbIBtyb*6q6bnc<{?5tR6ayV6?ZUsSgkA$c_ruty%1=mM{F$ zM+*aG(-rQ*B=U845%n1MNRuUGrx-C^ZWNholV5ldpwidI&a)Pi(Rtwqr~?p3idtgr zngGkVw@2%a zuIL&)&>@&o7JiEGqUf3$jlD+KfHIRob;4;MwwQcZI6uz?@olzfhWHq0!Fmi6KTiHG zACo(kJywSfP;w-y?lON2C0qP7vL;QT2U|w1bXP4O+7L?=0U+9SD7N^-;J1@BMl@)G zrw*!@R5p_PNYSHpQFB4I!vui3Y@etvCmK=qXQQGMx{&(Ggm7ig$F>QHeTKa|(Mbu6 zvyMtOaU_xVKEIak#FfLspPIq}*2NTKGqa=?#Kfh^Spo=Ry@d$sws|1wg06s>k~Ja2 zLUY_l)&?SMbe6)?n7-fJ29Ae2WnPDRkQ%tjokdwVVf@tzYux2>-jWdM3L~@qwt0k1 zpir>~1d{YUn{kT`vI+Ncnhb#Pgnl-97;Bv5^GiDl6l$D&z=Vd^g?Kd!3k&WT6Y&rd zrYY>uApw$uVn(Log*RHcxs5_Hd}0G=8t}u;QJ{3G^Rar+fFNtgh#%^Q5=}@|dGA6( zGfQ+Hr2sF|wr*@el%BS0Pr3X+gJWs)v1M3_0oCTb;{tD8QFwWocm+|N%4g7k0%QH~ zrij;@7Z;QgHi9ef*C$T#E!0#EfT_^n?d3-izHr7GhO#1fH8OU&SL!e*)M9H5YlMw1A6gtd$4dbUy6~I-NW-M(1@+P&r*neQmq?&m18>AK1S)=zP zBBPW~qf4Cz^vpWn>)AJGnsgk$@jWyw^0G2%Yy9uI3p*awZP!x(t1_ zJTN88-`Re$3(}X+$-WM}C-NUlE{$MK9_(@(vhJDv4wa7XGiUen&v)i^ZJIp zX2>K2>R8AFoAnt4XkKlv^bNwYm|yYYY%`&v1CUz$&~y2Vs_M2t4wF31bx#ZBO8a80G3Op%kUFSMgw7HGAtAeg$wjS%_l3V~7s6dSHKBsa9+k}FI;i<{ursG= z{YcWVzgkQTqEIJCLkxt3!iP?-)7i7R8>|Mno{YJ*I?IK`llG`1V6$vWwoz1M6z}Q> zHc23+;k1xK4?a+Fp6Sj#NPX547O5$r$x$tJq3zuSsFq2IQ(irHXY5pmj)b(8x;EUL ze_iZp*kwXgC&=s+q{9dHX_;S%5wZ=u$d+q1o~JaX-h)9G<2P6_?{-3&M*=`$0cFq0{ zFK$*Q_~ywJ6bSSufkpB1MDS{>{j2;XPaQ9ps$k{Pt~oQn0$)4j)SHWAakk4KORr~2 zN(XX3Un426uO0zNwR)5kjic+jndc5W38^9)y242 z8kSc2`5t=|XPKs{obokV&X~#q?LgIS!HZr-AN%yuGMWbH5db|v!oSerG4JfyF3|6C zm2Z*u&AJBxS3Z2->p*ecx=7`C{Q3polf)>pPx|*)c1V#Pi|XM{3Lv%$&HE0m!zp8I+~m@xr@?^vM~Jkw9@gp7MlSqx_P_=bqK&>W** z(uiF{vgZw>TWaZJ>!a6bc~}ZAij~p~U^+*CcnPA_&+D7R%S%9Squ{U$Z{T14P}a};7(ZI3t?UDDMaALUM%J{Jkw5(q2DX$9P48lFb2g&2 z;T&bowM`(-!pD*1}*HrxEn-}=&`#3s;YdM~JBc9`% z!|EqZr~c~aVgJBL8qoM`-jFZzQ{$g>X2N_f*8&9Jb38`D!EafK)wq&dZZ52B%$jMosDVuhN-{<^v!d#!m<=QP`>L8H^tJMER?+&q-`cWq8e@KpuK@8!@5Dmcj*u!5m zOpz=J{VxVLH_PYYe6gI2Mp#ZZGq5@1=Z79}nw7!b4#(hdU;bE5p0J>5209${!_=WVG{o|iCh}Da z#p^e%<`yqeU}@#nR*c?SqsG5jFye?jh=tPCqy0o`Z2{w_DZYKbjP)rTJz|qau|c@3s>c@ zL;%-$dzaTkxLRsVT3YVXTcYRI`CAxFtG%JE(|27twZ(vrHs3`*{cyu6F-Xz)5Zf?; z77yP0Wd=seWYt~lLM8?MCuN8p{A7Ff@_z_7AgsVtlD+p90uAWYi&K9U(44Mx1yL~s=Efkl#rdK%NUzhXy87=T@| z9#Ea=52ucswaJNt2 z&z8~k^_W@Y;+`!k%t-rNgujtTMDD1!Mhx3;v+64_n0O3n%!CjV>1`f0%@GBor2~dx z+RFiLY1{!VV_ZjeDrl0TOlmntR0}p89us2b3YWo)XppAfYTM@aWk#9W#%-u+^~Py` zN0`fIO0J*WP{t?oDDc;vq#}+4XM?FUxsyS6wMvoJ3}}?c@PG8zvnb_W+gmRPUc3vW zNNojR^K-oOeUN#B4O6742{=udLNaGKoy8o&irKIA6?3(NGv5~)Z)m)D-_zf)S{S-e z(3r(XoaL&`U&BsCi)wzBw?b-u)=ej;T>m%(XL}UC|DMe@*k<1{)7DSH^D@DDTOoM` z?$zad3=JBPP?noRfjbjBlb*vox7Higy}GuBQcq6KSY>nCg3bA5IJ+OtuxhH+t)|u& zNb&`8*D#inxqX_sq1#Y1#Hmze@qIcxhaONA{cZTPn9RNx^pIa2S6avAaiz7KGSf9b z%m4C8xI`y=kbYhu9u-S3&a-Li9sXC;c$zStQ;gRN#iWW&1Sos?vTUW+73ri`ri99u zA#9afy6OyOb7rpfNBQIes6|9jZMl|$W&)}LR7F6tT%nP51VGJg(WDuwdKZ=S3%JTp zuMeTW^RL&5fBotuX=WYJTA*O3XIFs<*f(rh;90u5~2Wm<2u5Rd(J_dK-md zW|Spzd?n7~Xt(#6=^P;(Dt3zn*>@qt6igKt6ysMvT#r+_8^zv^en1F7bQv%)7IBM< z-fq2c^C8oXh3UZY9IOrjn{aYS_lGu1PfATrGSLdLHNi=4EIq6~%S(9gT2785W0hTz z!TAw!8r?kFBv+yT(A9x&lArm@f3F!SfgwlvV2)ZKf;FU|1hu-Y=ZKKlQHWK?{xiRqy$?~u@>!bz%aIYI=% zA*zyOAU<7laUxB(u{5dpjgs_&OiEoNGDc<#yX=Bt){3nw5FFX<(~%zp96>Qr1bmTx zn5W&y@B2E4Sp~FRvh>b8*loTVIXw`o1{AGg)%gbfH{w`iOzEcKn1vQQlA&_E3Az%~ zjSsAsFAxJvDd%3ZVoH|-4ZI<% zxlB6l*3NAxAg-c^%?54s@;6gGlj{lpnVGa-yuCOGJj*_Ky3LY$Ftgf_exFAmQO1C6 zTJ6abAb=|uor#deS3Jg6xs4IyS~_N2o=xWk)yUEn>bkf>n<#7;>DQe1gs)ZQEsBFR z?kcn4@yR4(wpZncFpS2;dqU%su2B>)FccUag8K5s2`$KGghW`nMz7WAw^m!P){3IM z$tf>Yu4L+R>;;$URDzP?sJwFPkw=?RRdNn-lr{A-eO<2WyE4sieeeqt7OC_aeUlpi z$W&TOY;={#sXGV)eEe)H_=(_U#c=m!|evcL#mUk!zj*%)Hf`yn z+~%sF@=RMw*9mwz@dw(;l1JMo%e3JN#K=LWY#B7pt(h^#r|f8s^5&=8!KTX^6txo# z3T6b7oO9{4%=Ar|$>RBU@>#g_K1MNRKC zOAJIQVy=@>1u1YLybQ?~v&HZZOF`Gp${Hm!G#o>s>&Neq2K18nYroJgq$01`N-W4f z^ZekWsvty%fU2s+CgkBGx`w%v^XKLFNZ^H=>s$EO&+Yl*V(j$MPtwmKYJ`V_zQ8oh zTuwezroeof$d83DS2}5%H%E7B3*mzJ4yeo5e-r(KjMBKo=*8|X(aVxtIqO{!9P^!C zxulHzgWua-u1-F%#SijArP>FU_<^&0k>e@D(pw8%Ixs@RC2EI#Nt#b|ndVyB@Tgdf ztJxi~7@agL95bdEr0mML^P@HWC;=eKVAsiczKhw9?t16|>?eZ&Dkd1tsgv6bjUSGi8q_ z&Z@Snq-7)&Z~$l29(Jj#Wuh?f-algd#Foh)M z_r~J&q8=TL zFQTx8A_~HL6)*}uu#-;PCD}>r+;%MtD)^WXL&lPJx`Ds)6U&Pe*az#g=7dF{vC$P~ zt%k6H4ajg!>NbcH+JVgx;dIq82qPS<1Iet0reM<1YB0L1)U)3(I-X%E4}-@MR=Lo- zbL5Z4C&~l+9DV8xwLEoL2veC%hfi3-8cHp>5CftsRVJfc6kL&ZVQ{L@8ifyuIHv8m zr~0Z>cs?CI&7mLV!{FN(9@ZY-kLQcockIC?POpY3%*;@g#cX_k-*Q1h zRm#yH81|Hgsh_@IFW9d`{%ckl*20~pOBzl2GI72AkJ9DKh4+O;q9qbHzUXe~E}k=L zS?9Wt@o&g;w~wlS@Fc$)*9#CU_esX`pHKhg)9F8zT+0~5Y_6w}!oVtx#@zb8GaJVl z^(zHI?sI7M9DDnH8^0b`V>My!?f1cZ_Ww9ct6!}PkiMETwJ)Ijke?z|TsDxOoBs~1 zXQRnk{c2u<c$q1GJo&yJ6nn)2J74$Y%kHT_HH)?G|@(Jy)v zrD?Q#@PgM?WZJIRagCZ9$(lP1QmiGSxtXOSBc|T0zYoLJ)(ih1WVKXHx`>hczA-#T zx_C@tS;P^D>JHB|S86MBra@7aZ-*h-j`ftCpiZB7eUWb0B3;>J_e^tp%d-IFxY{!C zS=1-f%gvwInN9AN5H=j&4j%hhs%b^D5Rt@hN^wKc)ib=8(^ z2wiXAcV3(&q(w-MzFKp6ncQ_ViEm@dLu@b*Pd~vjkfq!V=EFWMyj@dQhTl6uY7L=W zXyV@=IWt2JUV2$#rmPu$rqR>zGaXo$bpH%V&-hAHn#R#Df8E}VN0YiEOve&-mN0W? z#W(edzExAmxyzDq7mYD3a+pn~ey9`|nwn^3VX%x8E)fhVcoM#Xb$JB?ZbvPrf7+~D zG_pWvPwL0nlSl@&tgd*b(Y&c6W>pm3a~qndbCCewd{jWFul8gb^_&2Bc895_;W}T) z??tg;I+sm%6GuO3h;KEl!c*ESF9aMH+c-LGwjID{B}NH;c#>sC-5rwjHVUFPF>d?@=)p&y$oo z^8N%;Tkx=05ijFN{eeoqBdP^<6WmGj_T*JVLI5w`1x2Cs+40!=DL0g@m++j_v-z_= zpalayw`Umq7R#G36DB>x;Uc>8k+wIyM%t%!E`dnHm&tg(_&Spx3(12}qwZ$+=x{N- z4yR>3W-~WbjS#L|mCAPH*TdJgkYH~uy^m}p0n_nTX*?BZ6lJY(cf3##8)b#Jz={_B znq?cy@B&{$H_Gg=XT9@a|DMHs<&$QSb;W}NE&SEb+b9aw(Oc(jD_(vsDW;t7nclme z?jz-wAcd2w@w9A| zIRH7xS?&S)d#6W{3*-^ZjS~0m#lS{@j z6)K*$7FEiX>yqFE#ORYKb<$!cKhp}QUd&7o8uT%>bV$;K0z#w`qvdaJJ&YGOlRuX~ zcw6o96FfkQJsO&Y&#vL3TAc7t)P!}E9c3~5I^;gcW%YJmi9Q-{((8FBcDE7%HXV8z>r#pZIEuQwegzAPeep>cH*KL}!57xwKCVtC7zaogE zerlI$RYjkw>u#G}Dsf01wT+jx5Ek5eu)bU`rf zwm? zhy6bAt2S$zMs)75XMiK>rH2?5?*Xumb`ZMcvD^E=`!`)LXdHX1C{4YNgXPEuNs?&8nf7;&__)Q|CTAxO7M zByq5bB$i&p1G)B>x8Z%5Jc3T9A%}4C!=Arl%9HMSvi{@nz8LFv^5tgy#H2jI;-yIj zEk?p3S3GA>ywjV#>^kFvVR2Dg#%Nq6mUKn~^8XowqDLC8y-QWsfq}JRbT!ZJDd7d=45Zu z=B`?cdDE%aUme)Z8Jb`H=#5{y`p-Fhp{>%h(0721y6(}JS%^}&v0KAaU)iQY#y&m5 zZ=sC1jT1$yMYMfep>haOeFLd^wbsP#N%pX4l_sTecQ!Hu-kJUfk|*WX-u= zw{kk%yQdP!A!@F}>Sfaq2hxE&nfw%vJ73~)=h7sX$$_|eO#YLcxZyxPK_141MN-sR z!BSWYJ%D)P-k{U%V*@@QZy}eAXK}=}t*ha~z>JHI6%9uBu^FNg=q|dt>KhVCb0W{1 zA+ydv>DeL}&l6XnQ|bte7JDhB*aN^Nn4S3ej;%(^H7z;w|3bQ`hrbX%SCdPzHTt1*T;b1J4nY9Lx`>;^Hs8K8$xdK z%|gf$5b${jiUwLt0yVDZiC*b2?3sC04U=Wo7DeVMD0n}UotWh3gfn?rRLjO<4y@Jk z2cL)$o29U4;0Lv~N6_tu!sWuL&@|QIR)OL)?4Ogn{q|dyrt4y3;pDvUTld&NVCd#- z5(o_K>Oo+lhj)b-L66Ra$kK+f_`%y^pP^N)5L4;}@mf-|+Lohs$@6W0I~+%k;L_<& zTM{*cX6VJ0r{$rp?wf0gL8(H19$#j!n|$zVK6qOIgo2b?$9w( z97e=Q-7VKksB&udw15cQu*g2!&6b;rSJ?0=E*{o()SB(bA2B_dNV=hYqL#=H-&L^w=7 zYG<{4-avT1SthFMxxQ<0>C@xF2O6EK_i1xT+GvK0?|H19#{i1^ZaTZ&Z2m1yl{mv@ zIr}MDy~OE@Nf2CXhpM3YP5RgVd-65?sh^?Qfn(MpOJByxJk9jgSpBo!xtgkpH8T97 zCtOJg?rP+E)@^4p9rrGWV|7tqMf0ZqZ1F)IYLC;6J)71x7;2Na)V2DZD=_gP>YLX1 z;!UeIBjcx@^o`)RmBx@^fYM! zp`(-tdYhA?zgs_<{YbW`>noDCS6&8vx!viz%A8#Y6QxOcwq2O9DoSwMl>>6EcoI!S zlsCpM3NlpGo{FIfs9H-?Xpe&4cXnca3Jim;ob=w)-U{8R!y>G_D z`@vQ3%D|xJ`h+;fQh{S5C3#cryU=5bipBk8j$rnC7*ZL5ey01?Hu-Qo1Yec^T{`P< zlpdHAZfDzWntuOyY(8K^G^+5}$EgLJ44T&j{Gd5&sCbmAaIIbTYt&B2d%S@dDO9re zpK~5EUPEPz>iES=6q)bCAZpLh*vcSG!_bV(K&+aYkr_BDtK35ahXaGKM$jg^!{H|^ zE@s8U(R9@3V$~2AHOgl7i46co{NpfCq3iB$I530qja@?=h?uBx%wrhaJKQN3PV235 ztie$TDwDj&RIR}gMc-RUf8)>n>(zeQX5ML2oup?DG=?f{@OR6f?RMq2_ZAFHGSuP8T7U=N(ac{NiE8ltoP6_wr_L4txaG7shBY`*0=gt&+Vm;puWyE2Q zSiQWe-SZ=PQ&U3SieJ~3+zu@M){w05A8J5@hK#umE-m%@V^j}!um?E-sp}A^*PZW* z{bv3I^}PZxmntTZb^$4_Clf$c0Oog;38Zh8p+)~S@mRXPW9891hG4+~-=i5IDeyfS zx$a%*c2l3si?*|Q`Z8y>^fDK6{rCf?lr7MB#yS1K59LyHj=BL0Q8e+5`pf_05=T;* zevi$}^POYC?r_0APnJItaZSCm4NFIeb3}+OxihY{@>r3ac{h7r>$8_ZD{0&PP`69$xi^Jwt**MbP;`sUm!1dj)o zRVs7p$#%LgZCyn`Topw8ypEMiw z!clM46G`vc-a*n+{vg+A@QTK+cgZT%cTFaWHm!HR=E-WgU+aMtof?iJAkOrAYee#C z5UMPSNho4Wao4+N>+4Psrl`d*;P{ek@{*MDAopr$@l8lpPv~s<}rWIHCN3PM2|YL_F}fNo#~iAWz#b zix2*dVG`8`6p2XdChDrN<=bTS(ppqjiUy;h58W9%%M25^9XKa}+e$t*ON>FfYx6pr zyy1LSS_xoa?5c>E%NVPo^GoQUq9f0SORZ=yiO2VM;H6QD4BZLNX7leYVzpV#8-Cp; z*^l27jt#cCqc?Q4xz5tf?tP3vJ`~{MXRfW+?a_LsnKtuUl z2*SLYW#4-nQ8!+>%FUEcmOme6a?ERWaC@8m`nXS{cPMPaFFx0q&P;r!esCz>5^WaA zPXT-Vheo1Ru*|mBv+qe!%3Cc5r4ly~3}2c^r)^r<(aJM?d?fTdGAZ@yxkja4J&y{@ zzb@j;b3;wQBj(2Nyu5bM7EP6H66EQ5Zthl4Zcjzys9~+Dx8_peTO_Z2-TTS!ttC_; zRO4!vmy_@N)d~uO@>}p%Dfg6PQ1uun_-3IyPNWnqHL&9Lh6h=igCf_RvX;4C`wSYS9WG+!F^ek#J+R&N2ZVdmw$% zejwco2el>*%U0C`_^UZLe4$Z+LPg{dX!4C~1SnY8d zOy?&bxbi$tP4ymgqpF0OED_W9A<*SF`}yCdJSv-gJo`CM6vti#9|s zn;M5Gl0yQpMxkTPaZt4d0qK6AHqQHxJU(i;f?Jg^kNtw_o9qwq29*~{0HY#Ui7x_a z2gz%-E9(qm*8E#i3-UDBxZW|Jlt#utdN<~tuUCC)xH#kzNNByL*-GPecV%q}Z0KM0 zR|?EV`rfu)QXw23C8UA1SZ*QT{xZ!rNw(DnjS!nz^ZFK7OApQcB=~Z2KM|*P{rDPL zPMKDgKfJw{Q+36#fRMUvX`gMy44@{&bMg`O87lh><8*>#5Rr_-O`N_ApWf%*U||st z3*0(b&4y1OH#IP=JgQp7GVf2B<-$)sTg~^N&qJF$yd^mxf#`$OS*-wY8*TVwXt{WE z^V5RO*?JBw1#Fkoih=XWO=lI<=QF z@mQCGPD z!8q;P$Yr~T)8}X1O?fn|GDgjlD^`%uwPy2qvfW-dwrw!@U-B4EIfe~mJXwE9oM6^& zxlXVTND_z#q>^!-mRtSVy2!6Zu9M?w*GW-BPoNl!uFdhUm%<#Nazyy##9w0Mw(&`W zuSV%H@nu;^Au!`}G>N)>T~y8y5JN-<)*%AxZg|z}qrZpxZE+NT>Gp@0pQfEbbk~VB zW_cRu1u*oZKO7UC;P>Q>)}CH|bfk$j?p;md;h>jGgQ{&hxg8|4tfe7&%j9cg(y%Jh;(OX6Ef9XIB9%BggxY$Vd|iFv#Va<) zC|zzoq;K74nUzi%kJkJ7vP!oiX8GMG{-~X~XTvL^>IELONBhV-EVRKub-iD$e&t6Z zH;vBI^?#nzl;5}i;lHla4gaxP@mJb^qV;;e16yXU8&x^SY2SQ0W84wcx38XdqD@ z+Ls}n>0GV-Dw-XRlNa#cWJXE>)K}pblRf}aR$8cI@$0YiMNM6^qf+E1B#Y5KF&Y7|{fMj?>gIN}RPgtQDOMC$mje z5KW$kYc2NM-DSE;Gv%1YGuHtrA^3psKAjc(O`g&mLSlqoRFX zt-4dY40U`G5>c6A((iPQia&(Ry1s`N1NfLLA-lT6I3C`ikTA;1?@{#CaBPTp&II+o0>ivr&t))-7OPH&|HCoQUuW&tLA7y?+)Je4I&KAAR zk7bsM;+I%PI#zr;?im$4hZ0oR!~3yOUOv=QGCn*GFl!WDe(LuoSlT>mI53=!ZN(46 zY0Ihw+FlpnSE?3Hq0BHRlv*6yuJFP?r0F6z@u7$fU89&(Fq~r8p3_!H9mnU3^;*)U z;)tSS#^l?6^_@S5T1$nxzN;_;5cX$N)ALKNmhRU{R+ly|sX7e%dWQk?)!Fl5DC=-; z2umZh_GA(55@@hI|9;lcNA;U&zUqQE-CqKOX3L0i0k{MX4s@MWfcj)S|1ci3k#18< zSm_Db)?E7}3r^L;#_fHoCWfUy%?a%= z)J5_JM4dWgaO2QJTYH>Lr8c$3Lw${7PTRp16VMhiFCy`~URX%u`EBFDNL&50w>I9} zydOlF;N;fEh znRUsviP3p;cda)}+HtI_apy+4r};anIodK3R{DPW{0z2I!lKNhvhSD=c* zJuu=#4%0&w57)7Y?Vp$!X=PQm14pFrsy2?JkXY;VdujJof-(i@a`%l3rMPMl_HU~p z#CJTkE1whd3$uG`5g}+d=U|HnDeBr!HtFlHt7Wz`+U3wxX)t_H8_9z}iOnQilsboO zQRJ2D1eUlFCK}Q%96fQTTigldEv_|^EAH@gzq&4ii`o>*%BST!v?+aM4Ce^eyH3mVI#e81@IJLABZq;C&ds6$aBi;$0)74%Vz{3}&k}mwg zZVh_5jx-t%?_(4kY@M(uUJd}))!)6)ddV4r#2;E+ok6o1Rgy!Q|ZR7qFl zAraxeoqmi4uuD;c-}oF#6hi4wC!N6+decBt)VuC*h+a$zugpP=KI=|7m50t4&w!wW z8jgEMa+5RXhne6emJx2h#LW*kR;W4P5qcO7k&F)l%9X~rhuf^+UZhrkc-0d@dRRf| z9(K_U-{a`(%D2!P2##HeB#L`zRuRi!A{>Wn-F_L}cF+j;ll!KRl~90ySl9Q1n|m~X zXavuN^IgBCZlnaoAA7{Q<mXiTcp=q}%7$E1qY-<3K!0uwu<+*0xfYkX(j~ z@N^kgFVpV*7!K|R~GQoJ|t>PM^SvKtk48zk>&>mzbO~+oJyN5XSS54DImnuqHPhKD|>una0I%%Ob`?^iDujdaZd6#@Hx_8;H zPClY?ZVE%bsM5W-fv=?IfG7_Ir7a!`YWuB7%@77{2m=+u4Md$t9#EW3godqd2r#9q zCYjZGm8rJ69C79|@g^V5R>^LcMEPqpLY3X~%O06d7%~=2wKZ>u^+0MtiLWdh!yxfWJfrhybY*>9>PExI;muuioz zwpM(G@=dr-7s;w6kGjqxkFVgp*{b{eja!4kxBz@&Neeh_a|hI6nKkJdBlN9u-3_sE z1suWqTAy#w+6C`TO!ExvvhuVrJ{#uMJdnNAH*SpP4%+{SM5z-x7^2^wt*z@k(#4O2tk2ANIRllKorz zy#%2z<;{EOelI??k6pEx!|p=~t=2omlkkwTGP8QeGBxwNocS#+HK=m&vi*Fw&yvsS z(#X>owA8Mo4%H((Km6MFyxKFAueFu@ge{1zC&I;@$e7j;f8ij=Z;+{Sl~LDIh|KMj zo|du};hbXF&*{%(CA7MK=w0E7RtH5+C%+xY|JU|p-HqbRK6`!#FY^>Ytf!wG+e!S5 z6X&y?>AATNJ|rd%(~j{4+&!6Je^nAo2@r^MI_Gp-2(*=I)l#($1|1uN(G7BNj0*I6 zHRj*uP_{kOWcMPJKPRKf4E7G$%qf+ydyjn8OIV}T{CYm^n0rlS_BErc22-U5^EY(k z4!Ty}=(GTXwo2jupqz`#8QZX{XGEoEM73ofw@kKSeMBC9Z*HX_&TL5toAr4gB$M71 zD1rSshB4?=sRQ9_uI2nj5(Z`y91alhwC5a^M%hY4?U+ka3Kj zE4H>|t~Ym^pVPkD%MjfcWi4^3tUVp#-RC$qc8RA@-w;pHCerlWZJ=mrIg|n)?$(ONWaPIk@I%e6$ZP_Z7w)?a-fm={lE1(84cN$xl5&t#BLR zCd&Q{pFcd3fxY3Ue}(RNt=&=JTPBMG)#*;mmPGZ~B*AGK_q&7veESH_KMF{1>2Rjy zy=U*PhM>yVD>0`t?IE0wN_iIEcX>a%8xS_vp-_i~mjNZ{G%zQ6gPS5|aqPOgPz`wg zprG!wfCZbtYW)+NqIx})Q5}xXyyc;0gNr-4 zoNKp1ReV1Y->Rt8ugqT16vw|$O19Y+JPTYnnlO`pEN(+#3yAVoa!g8*`sMlLWgb6Np=Wl z`@IU|!4&Ti=HLE0iGO^u0T1TY95VrrDuh|`PL-m!(+B;&*N>HXRPlNZQho&CCU}Y{ zclpI!*CXJF|1JI=E{_24PZ)>kQw?tv{roT(%tiRHxIZPxRhW&d`=i^3#b&;pT@P7S zGhD-DK0XwR2}_i&VNg>Mj&`bkua9UOYdMXyGX|hXrL$@Bp%%LohHiKRLUlBbalvLl zv2v3Zo6Vc}b7;b}fF{^zyFE^Q_8B2Zh@8Y$?)hOQ$F}V4Yez?z9?~HeP^Ap+#hIh4 z_>%*TG&CaE1$YheIeH6^*?@zMutUV+gYkKW8JT~^Y^(O%0NUs66|D(Mmo__6eq1Z$ zpc7_h?+G)J*?@mt9+_kkB)f=3bohW)D)D8dhIBeYx?H+T;uBCi#BYsHAk$2J_a`+| za8x!^)ihl_5BD&@v~u-4*7G2J)c1KI)i&&rf^8`lu|}X`59yVwo2-oT=R`duwyQfF zw2JDt@6o!u7s)I`>ybJQRn*n7=R&vX3c=M~{DCVC49Z*r^s1ujdMJUw{ylnV``LQ% z$lfDkJ1#VIhxL({Q3?2CS*B6CO>j)R(^WTLYEt5}4j{K+Gk=`t$>s&Sg4cZ$4a4gh zhGg%wX5&K!v7SDBqQrC^!7sdJapi{BPNjdL2=Gw-?C2*Ffy)~Snl|o>}w^NY(%-G4NL#2bj)L=yrtXu_(etdi! zjNG**?W#$l7fn8X7A;von7BC)HAh%;Y7)+HyTzd`?25Rfuj9pHdozREn%f@HSS#xY zWtBxXE$Zk)y&pj#o3}Sv-rdb6a7!s)fMx-zxX@Cp$!gTZM*e}CilbfI`{kmyXbpb8 z06);Il#6;oQ3eLp9=naP!_3u(UgM-yapOaQy=XzF(Js>^W$o76HH&s9@!=3b*om?O za!o}ux^1LzQTCuaxJ&4kY zl(bLnCpi|;;r%`sa+cXOz0wCww|QaPQZV36@Sj}QGIWTH+g#V`fEF+|UpCsbr?!hhht&pP@yl;xKlY^!dLdQS5r&2Y;;dmgF!%syn(a|^ygqTnDtaS-!X zX2)Irg8-j5QUP7FbOas;HTB3fiDMLBTpi*dyF7yf0f5N<@NkS?;^d7sn?(PZjSLQ> zKSxOjhp+y74$mP@=k-_Jc|L?eq7e%X8ch`aEx-*4Z0`fnjz&U7w>X3TE)Va8ARb51LalEyFT= z1an$^2NEmHF-Lsj->|=GZZ6-mu$r2@amrA4_t8J$A=NA&%`Xw4x{Fc((?W)Zw`>VdEMDiMI#6k0JS6_FJv>GBx)<=eEqcyWE z5WWQGL&h-bigu=v!ADzl{SZM^>0S1!SylIa-4+1MaA0}P;A7#T&aU1V-2gw(2xeD$ zRo&-cBbnB5(bW+yx>b8@UQhAieIFl}FE6wL@u?UiWevOeE@WP~g@f^W`;GH9ZKe4ZOkvH9L+#1+0s8Ea;-*22~MhM9iOAaZIFJ$>0*Q# z#n4^+*7)@KEQGtj;wb zkw!=bLPA>Ru;6dC$3n0mgy%H^+G!@j41y;{f?MSzAQh-oez3S%a5`wq!>lBipT%#z z?H=w&G{>y^k9m1tETH}2Iy~}n#?+y>cfD(h(!!X~OeFk7yC&xc3)&Sf8=5)n)BIjbZtJDr zsuX)I>NL5Mp&5ur8V1tBYZSmVdW{%}0(_yDl+WjS&*l4l693KY>OZ6Khx`qakXW(U zX{2HRp6801!2U30=1$Ih>d%8%jiK3y4h>PW$+GCTjDz#Iy5DlAlW61LE=T((`*KCZzh-ZnM zW_H|ZhK&f?slM!->b#0dfz&J{fK6k7>V;Hci`&O6l9!D=ls{RGlZY=H9od=-ptA6YyprBuvxHCg{P8W&*>}gDN0r_D;5i@6noca z8&kvxlZ-Qd;i0K~WZ^&e6j9zNp(L7#m?@FK3g%<>e`g-59a&|hZ4vA$-dCv_N(rRZ znyD&w8yft7Kztse(-jP?N>%uU*3EFbK3KF4qM3NCMguV#gxAbLOuE`l5TDdU7cx=_ zn$gPALdl|0hNe{R-p5H69JthI&BS&?4u;Zb&`iWlbb^4OOqQnRAZ5d_t2%xuJJgW2 z;SX5h$m_vt8=7k%(T1obUnF2{GTDuiysG3L||iuJu;YP%gu31QDB$S!Ek# zqKymnHF z7*(<$SwIE0a+Loxx+$E0(2z_bsFgXI-;y_KcvA}T|Hooe3h1RuweX7XQTPK+dT1uz z10J>kqzGI0)*w*=(6$6lcSu;tC9UbYTmlE(0@Gn}vshF%O`Gw}L~+e-d|1k+56*|h@IVJDPq;?nX|rHbCw=!j6Zhfm>PF!QxBujJf zeu20Hz+~>-cgmNiQJMwE=ddM^rqm4EL~o(+z)yMKj{n-OAMWp$tIce>-OT>l zJgjEh_55+x@d}C}J%uw2s;5+ozWXv+JJbIhAD{U)#l@sdE~4YNaL3NpeaZPf1qyqv zJxW@}n}EW@Z!BQtbapjoAt@0lz z0=CPFol-2I)yOD5<7br0g#7HUoNZQbhS#{iM=#>(7 zejT64W{1$rAQkd5l6__iRR@k%*%g)ikaW4S+g>ZH6}jZ_4ILFuKQz3W%L!jE)HK5| zOk>NB=gVU}prh`NXPLnA?uz9n`5+{39PES`hDX?GIdESK@TOKoz9JwmFNZlc0Tz@U z3zLB1$Ruz%6VhVPKRkEvl9lKdt@5tpN$~hSN*c1x^q~ZXnQrF}ojCG$`vnEKRL9yW zDV<7GQacInTBE0`mq7T{E4`=<`mheO8kYum;rjyq=!5~O5?F*bVvdf0ZW8X`=)Rmg zjGxjhp&I1XIXMQ;VVzCXdOGxmh(*3EqU_>)q|)_bmqr&aL7K7Z;-|mE=PbQgvR{)L zg_ZZ3_EtPc@Y?0N4s!lrnIFBxLc2J>66@7RR1Ju-@o~p4s?7d5QJXO=6chIj0qG&v`8iEWMcNdOTH<0PaO?Q?Vr>$51{er#=qSiZ&9JQ2LC zQLtmdnKr@xlF|%U@YG@F`W5W-PG?MYgf~o`jMBI8kPVtE1GT4bpZeMpkc0UVTz5Cg zLRg`jRt{k}br&D6sA2F1$~P-4^Wg#QF!v$_H1i#dM?7!?B4pC{g$A#TY!({5zkME7 z*hHA>cY+Q)xr;o6jLt_;**Nm0!y496!$r6p{Dp2ZFZ+`?{ss_JMrcY=wusQCZWah# zz+YYUqNQ~_bH9ncj(pD@tryG9di!wScxC3VrpvE);x$;GqU;l@5x>z#35VxH8txi( zlDy99GO|>H65l`}vj_{q$pm1hsz6b@a>(J@o|$)N^M2~M5=dMmtbK}-5!`rV->b^T zF%wb3g>Zkz^V>ZgRhXm?DKJu*G3l9o#$>MS^Uk;I zqg0Bx#jc?O>K+S&ND{RR+HFMbl3QJ#Aaq>MLN}T%e!cfiJ;oTT4|m%cJ-tJ(Rffn+ z;VTNGZkvy_(N&d0+;T}3E-dGa|M7RZUReUbv{xej{MvXZQ+rq~{%1RY?E?7NgpHX)yb@972;1Ep+t=H#^UV$8 zi0TApk8YR$8Q)zii%X}*3z_{ zJ$iyp-(7CHR{9;AGTIZ`X-O&If|p$lFuWiHFXXh&eIo9{tO4XGJm#OzVFlwR2Dtq{ zP)h*<6aW+e00000^kOqovVQ{Z82|tP82|tP6aWAK000000RSKX00000002!zR6#9C zPDU?HK~70VMN?ERO-4{l0RkTY6aWAK2mn)TGg9E0!^XSN2ms2WGyoO=Bme*a00000 zAOHXWO8@`>ZDDY5X>Mn8FKuCPaA|I5b1rmgZg~m-AOHXW000317yun6nSrA2)&U(R nnSrA2)&Ve1`+1`7)&WpU1qJ{B000620syK20027C2mk;86(K|z From 82436f30e1fee4b9b06b389142eda78d51312cb3 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 19 Jan 2021 23:11:08 -0700 Subject: [PATCH 150/935] cleanup --- build.gradle | 88 ++++++++++++++------------- src/launch/resources/fabric.mod.json | 7 +-- volderyarn/volderyarn.jar | Bin 598338 -> 514983 bytes 3 files changed, 48 insertions(+), 47 deletions(-) diff --git a/build.gradle b/build.gradle index dc9fe0579..a877a6627 100755 --- a/build.gradle +++ b/build.gradle @@ -49,20 +49,19 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask import baritone.gradle.fabric.CreateVolderYarn -import net.minecraftforge.gradle.userdev.tasks.GenerateSRG import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace import org.apache.tools.ant.taskdefs.condition.Os apply plugin: 'java' -def mcpVersion = [channel: 'snapshot', version: '20201028-1.16.3'] +def mcpVersion = [channel: 'snapshot', version: '20200515-1.15.1'] -if (!getProject().hasProperty("baritone.fabric_build")) { +if (getProject().hasProperty("baritone.fabric_build")) { + CreateVolderYarn.genMappings("1.15.2", mcpVersion) + apply plugin: 'fabric-loom' +} else { apply plugin: 'net.minecraftforge.gradle' apply plugin: 'org.spongepowered.mixin' -} else { - CreateVolderYarn.genMappings("1.16.4", mcpVersion) - apply plugin: 'fabric-loom' } @@ -171,8 +170,20 @@ repositories { } dependencies { - if (!getProject().hasProperty("baritone.fabric_build")) { - minecraft 'com.github.ImpactDevelopment:Vanilla:1.15.2' + if (getProject().hasProperty("baritone.fabric_build")) { + minecraft "com.mojang:minecraft:1.15.2" + mappings fileTree(dir: "volderyarn", include: "**.jar") + modImplementation "net.fabricmc:fabric-loader:0.9.1+build.205" + + // this makes it compile with the forge tweak stuff + implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' + implementation('net.minecraft:launchwrapper:1.12') { + exclude module: 'lwjgl' + } + + implementation 'com.google.code.findbugs:jsr305:3.0.2' + } else { + minecraft 'com.github.ImpactDevelopment:Vanilla:1.15.2' runtime launchCompile('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' @@ -187,18 +198,6 @@ dependencies { exclude module: 'commons-io' exclude module: 'log4j-core' } - } else { - minecraft "com.mojang:minecraft:1.16.4" - mappings fileTree(dir: "volderyarn", include: "**.jar") - modImplementation "net.fabricmc:fabric-loader:0.9.1+build.205" - - // this makes it compile with the forge tweak stuff - implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' - implementation('net.minecraft:launchwrapper:1.12') { - exclude module: 'lwjgl' - } - - implementation 'com.google.code.findbugs:jsr305:3.0.2' } testImplementation 'junit:junit:4.12' @@ -212,8 +211,8 @@ javadoc { classpath += sourceSets.api.compileClasspath } -if (!!getProject().hasProperty("baritone.fabric_build")) { - +if (getProject().hasProperty("baritone.fabric_build")) { + // skidded from fabric-example-mod (comments and all) tasks.withType(JavaCompile).configureEach { // ensure that the encoding is set to UTF-8, no matter what the system default is // this fixes some edge cases with special characters not displaying correctly @@ -236,10 +235,15 @@ jar { preserveFileTimestamps = false reproducibleFileOrder = true - filesMatching("fabric.mod.json") { - expand "version": version + if (getProject().hasProperty("baritone.fabric_build")) { + filesMatching("fabric.mod.json") { + expand "version": version + } + } else { + exclude("fabric.mod.json") } + manifest { attributes( 'MixinConfigs': 'mixins.baritone.json', @@ -270,7 +274,23 @@ File getClientJarFabric() { .get() } -if (!getProject().hasProperty("baritone.fabric_build")) { +if (getProject().hasProperty("baritone.fabric_build")) { + task copyMcJar(type: Copy) { + def mcJar = {getClientJarFabric()} + + from mcJar + into 'build/createMcIntermediaryJar/' + rename {'client.jar'} + } + + task proguard(type: ProguardTask, dependsOn: copyMcJar) { + url 'https://downloads.sourceforge.net/project/proguard/proguard/6.0/proguard6.0.3.zip' + extract 'proguard6.0.3/lib/proguard.jar' + } + + task createDist(type: CreateDistTask, dependsOn: proguard) + +} else { task copyMcJar(type: Copy) { def mcJar = {getClientJar()} @@ -286,7 +306,7 @@ if (!getProject().hasProperty("baritone.fabric_build")) { // fork setMappingType(net.minecraftforge.gradle.common.util.MappingFile.Mapping.SEARGE) setJarTask('trans alaska pipeline') -} + } project.afterEvaluate { createSrgMc.dependsOn(extractSrg, copyMcJar) @@ -301,21 +321,5 @@ if (!getProject().hasProperty("baritone.fabric_build")) { task createDist(type: CreateDistTask, dependsOn: proguard) -} else { - task copyMcJar(type: Copy) { - def mcJar = {getClientJarFabric()} - - from mcJar - into 'build/createMcIntermediaryJar/' - rename {'client.jar'} - } - - task proguard(type: ProguardTask, dependsOn: copyMcJar) { - url 'https://downloads.sourceforge.net/project/proguard/proguard/6.0/proguard6.0.3.zip' - extract 'proguard6.0.3/lib/proguard.jar' - } - - task createDist(type: CreateDistTask, dependsOn: proguard) - } build.finalizedBy(createDist) diff --git a/src/launch/resources/fabric.mod.json b/src/launch/resources/fabric.mod.json index 38be089eb..e9faec869 100644 --- a/src/launch/resources/fabric.mod.json +++ b/src/launch/resources/fabric.mod.json @@ -7,7 +7,7 @@ "name": "Baritone", "description": "Google Maps for Blockgame", "authors": [ - "people" + "leijurv", "Brady" ], "contact": { "homepage": "https://github.com/cabaletta/baritone", @@ -15,7 +15,7 @@ }, "license": "LGPL-3.0", - "icon": "assets/modid/icon.png", + "icon": "assets/baritone/icon.png", "environment": "*", "entrypoints": { @@ -27,8 +27,5 @@ "depends": { "fabricloader": ">=0.7.4", "minecraft": "1.16.x" - }, - "suggests": { - "another-mod": "*" } } \ No newline at end of file diff --git a/volderyarn/volderyarn.jar b/volderyarn/volderyarn.jar index c868ffd679ace422c7f51d2c9497bc9374b6ca2f..5ce4e259ea865e4fc9d148b5b39b253ba165604f 100644 GIT binary patch literal 514983 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 R`E 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Þ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�s)WO7S@!*J~FwpA)0Gt{QMeDiPX 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

##v^3r#YnZ>Y+ys0iG=8L3tK+=6uyl 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⁢MR|+e=Tk3z1hO@%_RS_6d`Hm9|5W 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

q00kww3j2IGz)5e}fB*M( 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 literal 598338 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�^Lh#z)RIB`}Vi;A}2wCA>`$1amy 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 z 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

##v^3r#YnZ>Y+ys0iG=8L3tK+=6uyl z6b~aXW}7l*Rb>@;T7C_}Sy~d$*)1$!BStGL*U*B!t3~AXm!navp5haEo7=$KKx)^Z z3FVopM!f4}hPSzeC=*%{!$|( z-!pwd9n-nO;OQhXrmbah4ZQ|-rI!Z4tMMv5=P*|)K*BUMeZ#nKrjXWIH`cA19iWKI z(Xf*>rCy(pl|?xa=()EavvBB;E2q)G!K#xeTRq*NLAliP)#Q<{m2B^`cmYgFk)ISf13P5tK1y92e_;rMOX_W)UJ1I zbJdlU+|+WzQ76y!-Cr^`t6`OOqo|sj?t%bBl*}c@AYgP@{7~7; zo|`zah^bbkm%<%6jZQcJW^I0dVwa6l0mc)tk2jwH`G>TqYSQq8F5(>F%hFNqqQ*{MpG1g4(Q3oXm zJ7I&cqhT_M{Cdg+{Wy(?WP&LK9?g6$a8bXOFZZVmR=5S(^o#9Cmb|yDz#;~}dC^+e$CXaur zqzBSfj;ihndR2aXiwm-Q~m@+AFCIaXb zvM^my0?^^40hieZv&mFL^gwQCSGXY}yt2&WRhXe>v|>nkp+*w%NR&D>JjS9T$bng0 zG^0~Of#K*BjNum^Hz2a;nv;3Wq+G<)vDB5hZc7O-Hw`G;j6zNpIk(gCYWMivRnF(M zlmg#s;BmmTm5GWa;|)5AJ$V6BkvH7Mz3F7E!5uu?tYkUTOW)v?ya7$dnmLy(vw_iK z5(ZWBN{YY(dDU=k_pK^%)v9A_Nw}Jp+!<7__4Blc-6)^H5~#OUbPw5w;wG@O92g-vJ16=lK67kIQ*c3QK>XEiNMfnWHAQ%0-7E?wWL=KfQrn~~)Q zl-17S`DCn-Sl6tSbO89z=gS#mdJBC$$hYdZ8#y`GxF;Z296bG>Ud*`7J=XD1VZ=kM zVX_Y@=St6XYl&QZ%C5|_CAw* zujN8bfm@m>VIYXSyL34|LLhhYg02yv~R++=WY}!A+uE;e zkh1D5_DI>}8j74+-^n2&QKUp#)xL=-%OI8cWc5mdmr`QJ<~71KNTvD<@+?F9;@}H~ zsOIr-wp10CeY?u!N0T1ARZ~wQA4NQY63gzZ#}r8#D#jE?>X8~jShY>*uf)BXI8de+YKB~t7M8(F-i^47rj4I zwx9=r>r|vR9f8v_>zVR0qI(S|Z=zQQ$L7IVgyw2#MZPIvf47N-M^wP`FlHQ3J#Q_r zKSyAH<3yQ;nOuP?LS{8dbXi2Qji#y>o`|X>Rj)>PAmd&-YME&@GcUc;L=L?o(aLO6 zm+5q561yQQ1c-FXF=^cPiNb?U6&*2ytd7adm!?S1!c>&S4!@Bd>1@93Q*NYH7`BWl zXtQl7`$YvLd=^a`Iz#y0i`iTdq!O2kxwhQIX7e zuM_6#yG?alwC>x2GNWH6VQ3gO+)^bR^lqp6mDOC&3mf>n4*WP3%>CG|uMwfqPe`{k zl3QW-IzDZt?Dn4-=5=_zWj0k`(Wp6Z@(5AJXVvQmMxl(&>aC!mhPS4lnlEIh&~O*C zFd!s<#sU!b>hrB)0SJ&X3d(pvMp1r`Rpsd#XcThOyU5dZsG=>p`RibDRIB@yo+9^U|!!%2RXnqE@!?(4r!WPPjjhY7)x*sSeCzvMXZ2e0h7TF4@>()S}iguH5(N z$kkjpq|%6vTSS>@Ym|%-7xY}80;_V-aW}#ADw-M>C^=TiPTy;~mxGKhBFc!zMOxpzpY>I*87Lo^Yd}Lf1t~7 zO}-5Hxc+T3G{|6+&&AKSJ&OqK1hHcrFM(XPBC62BGIBn{TGSU*ehE_UzHLt`9Ty&` zt=gn8lQQFh@(`hs`I@jX+V+kQ;u){r_eRV11eQVz)41);3(1SYhhfj{`iXuO81u;z zhyHT?o*uQC>j&0j-{z&*~!h%oh&8Cft0Lgzt z8`#G8Bh2arhBl33`gr)3chx+26ulvXe16`uAz-xq>G?4|zWL*Q(W7l*5e@tT#AASa zuv*JI&SvwT&c-#i`|Y`9E`jB|Dj(gJRgwvhwx_c&4%*jF>3%a^-+xWpMnkZR6SM$a z>x~rEfV(;z)f`yQk>SbhdcS^1kF4F{`0#rDw7&n6zTO=k9uTGAr~9whBlr!VNt!#x zXu^`;%TU#+5`Pg@t4P{7<-m^K{PB@M2PEX}>1w+>r${9S`0e`BF2j(I1RSu{Zob!+ zANc0#OVcMN|HSiGpBp~0Lh^~XY8=QWp9HIi?5xm9M>bCS`M6)-r;@po?_to0Ox?=o zB_SV9B%%-KpZABSpI67jV?)OQnQFMI4b5UdrSKIuB7hICpSP2zbl=d8#aB!}k_#2$ zA|hjVxNk#@u-XI!-}WXAqXfp|`uKI6e(xHHE)CSw?Pt7KZW!?5Hd$VoU0#L-47KpO(=1Y<%SG9%wx|MB=MZ zau5Y!Xr7*l^bmPKaldDT^(6EcU}o*YOaw^aA`%GiL2V=N{nfv!?IZf$TWzcJ_1kHj zeA*7<^YuAHpFsl^5oZ<9SvhcGq=J)Id2u?g&nJ+!*XOF5F!}T^5L6I@(tkg%cc=VE ziwp$ahg1dvksVZ!#m}cys;`_6*;Dz@btv0(o(N=9IHPM6eHMpz>Cf7*`I=}G3+MPA z^_=YM#Q3s4eHk1!Y5BljBppKoaXB0x*DbON15X2h+xs<*PtV)krd1z>o_&Hz$T-XSNvOGTF-xychE$9gA->K+*&%*Ek9s^^q^&(M0fJ)VEI&c&0c*cF3AWai?C6-6eH zoP2@zhsW0shr`1zef@9(QT{FbQ(}yg1`?8Py*4SIwXDNU4r6hDEDk=$D!@lYa?52r zq_^7jsQ&B9FsSb#2rx#naSDBwl7Hx_+BRR>IMfStWw^^Jx2omdWDNY=C zM~g&|Z9*H0&|V!fu3LZ-+ddxtg;U+E&+E_IAL;S*dI*nK_}Fxe1TD)qp4P`xIs$UL z<1}V_c#SisT+K5W1;`epr&~pZZdIpECq_?R-xhz!=nHL((iZ-$o#zI|CPT^3MneAV z8vy4sZo~|@UV1vq>0Kygs3qfTWU7S3hoGzM&+F}8!LEmqW5`sG>-}lRI34G6jcD!! z0#EiB@tUO%K!=aDqnJ-m&Sa#F-xCJ$aF7}uO@JS*&j;A1ZT?g~$l#$npZTSo z`{dXLjEu^R!VJ=!Q92;b6;PI&?odI0TtCV2%WuT5gb@kOe5Zy&d>H>d6E&%i3!!9K9Lobox@$^I-Hb=R>nUWi;)zFBgH za*{|+a&n}ir@`vXoK&U9CZ5$H8OfM}DCV-;z+#la^XZI+IhE@*&jIZ=8PBKjV1Yg< z(`n1igV@pq(PuD9Zu={|y&cHoM1*D$UOy!0|I>pJ(UoI0nzTe@R~vgq76;l^L!+|7 z5Y9fUSjiG4%a4AgS>zgby%DeL-$v4q*8lSF%3>guF@V=$X62RFKV8W^))GKBqXrL2^L2c^Gs?`omEG#Av5-WYiX zb01P~26%%d**lh1nPZV!uRoh8BTirkRRqsG{1uzKp5*RuR?*GM zFr6gC(nNOOD-gC5RYefH+|Br1G8(C)I7V%XP(nOng&%tT7Wc?%H<1CL0uaB8F?_IH zprG>x8ELSbx8;(cBiU8}vXMC9YoK9SL0MIFjPfWQtiuxzS4+9eOO*n;#sW4tD^d8q zD>k#**fLlo-6|QclxYy00?WWCoK?R!o5gaEg(@n7OgL+C#jAcERDcRJ0cg-Q^XXAO zFSaosV+Q|Hc2yxLwlQS|V=?$$c_cT33G?}C&t*|<=@^({K=W8eCUEGuhnp~NODA82 zs>#Io)jYu}!R`KmRR-c1%Q;LDB<5jTl9DQpMF!0CJ;v@RZ-E1{IeLh!GWQ4Nq0E9* zG0q5QqK{r=N!*f6uG)ofpu3nZk94bS0nh$mxoC6zt&%Ih6e?~sWVHzWZy1B_Dkfh= zpghcd&cP?CkzZsfvG3i1UV~#!>TSrxyJ3JuQfT>jEvg^upCpy=X&!{mC_o8ElTk`Y|H6mB%p-?f2Ij6UdXjcb=lH~?^JL!o$4m4|xc z_bqh-D-(50gT?&n((Rg1(}nU?DasP1zg0_cd-bGy886jgqoA}KtS;Cvn{B5kR25cp z2mDM?R#(R?g9RA?bgysJX;PRikkkWK9?&#ynEasBj^9$^J)jt-JbYY&UXWfpJ~B$4vgm0CeTy~*cp7IT*_Sul16 zcz-IuOG+W?cKE*oWxcx(5dnDC|->w*J@+gco%CBLZt|H z+%D6|)2XX2%fni~Oixn=1ez$bj3}7(LLGiS(s|(alUc7tl&emU*+Z4TcQI6p6(Un_ z;TxnJVjmFWHqIxQkl7=_+2h5g>gmC*tpZX={)!SCkUX^^?SGd$t26+hzGnq99?W38vSH8xY0O7rsITYe;Vc164ez3 zo@3;3amnrNveix|lDxps-sKR5{29nTy?5$MvwRnGn8aU0$`2MT(BHy&~^lr znU90@uhmx%&_cr5U4Ka=pLTIv^>}3HrwS!C(IwiZk=#x}V2E`@ z1yCG8AD_nR3krRsU8Swg3l6jf0q{&<^coc2!`KuwS*q_ySR#PV#)P4v#iw1=;+oQ= zsdr!-%zn-y%XOF@Xf2xL6BCr^aW5}4dV}5|>FJ$x&rtsy7!Qa#S&{)w#sfHXOBtP9 z{d!eCR$Y2UP3%>!)3hiwHo7Z*q$-9_T;3G1*)#6ZYjDGKCn|4wxx3!G{o(umnhRdi zrBz+3*m|yZ&)ZF@SzfM~MTOfFsC=GRdWLptn*by?Y*17$RX8J0S>dd!fFS3dE>xML zh^*gT-PaY)2-)Rqs zLFqd!-Mp$(D_dN0P9NKuc#V8mrqe(^E~H}?C{Yb;SLuLb5uFA@bwa;zt2SN5p1qnK z`%(&KnE|mpJ1q|JRX!7H8jw5?SGCO~nC$*SJDO)l8YVHcN;nr7jXci@wavWP%4hz8 z>ag=KG#9xY=AsI?U0rJ%uEo<*{o%ihRR0ho{WL|0T1U?#5K zZWr%Ze3)`O7Pbod*m0XuLxY&^>MDOwjE#l`psT}iyWVa8Q_IvfTkkiA$2V>1BUm+c z45wwE=1WpeH3+SlXG)UkMUoh0FNjbVen>ZnV{!};J#8?D>M=bXo{#q|M!P%|&4A{E zg+`hKS&lLMEL5|J6v*?ck2xz^?OQ@W^1xzYGy!%|M@F``w!U!>`e?4h{-quoEbS4r zj$$@#npG24PBD%?{&Al^iAWz{F5c2s6c(n`w(eCFR3Ppwp@_mEqDLJlCF0ZWTkV|G z8|vq-Xxl4LH;;!$>_Rh0T)tUO`(`na=}$B)d;O?CCD%9{;lQMf7JMY<*fO2~@R-VA za@@41Gw?!N>-09>gW%~+;2)&5KXsABmmvuuHiGR16qTpL)AO!4i;bw$J090R8}l3T zX$YNqgsQ6mqS087fDquIM$te!L?ubQ&8Fg?J5br7bl1vz{_gZb0ogwO((NQL+)5B)7Ok3*?-r)!>oLv0K&B5(i zuqthth`_E(+s%?*zGbdy3E5^syUdx#GNQGn@~N6$ZPO*@TE!W&oLKn|tG8m|`|OJA z)Rtq0p~`f|nIVVr!SiVZxZ%p7|ZTiM2^ z3~%JehCo8;1ihN2yTf`jOHa?cbM*w%d<8)S;(c|}vQI&-&u7~DRYbrn9n~ygD_wNs zy@u+AM!Trg#Ge7R%Y09^9YyA9Qx!#uI|9lL3-Qg0qR1+9Sc%IP^YQ|zJS2~g&m9RN z9mg~&I|Lo<{`q)>y?P!0NbjF9#m*ni?+1s+r(MeWzj{7DA5%)-Bb4zFIcofX?GX9U z&lv&yy?s@9Chaos1L%FK8i6N(#tS13|1fH$fVjWf17KCNBBP9Fwk90YkhLR+Cngdh z^rBOD$ke@t{B_OTJS3T*Q1DdpeNkC;$Rwc2alln9Y1YG*`9+KiO}_8pV0B#S;dzjv zD`22Q4zHDQ1#U6HI%03?8Smy96(!h{1xW z=loc~S5;y7`b0%5-wciGdF~i3&z$d@KBKxw#LFy_ZL&0J8P$vkiv!99okM!HhSOsT z{9R7dt5PbPTz`9J!hh{1)CP|IX?s3R(<6~!|9VTm$mFi|{a2XV=&*l~^#s~NgZZa~ zOR_&VrBSzn%qCUPv_!}lWV0lM=ia$^CyeMCr|;{h;-&bGVLiV3Y`}6#h&q<0rwnW2cFw__V?Y&B<#6kk<cr@V&l!HY%|{m<_E4OHBB@-EZQ@r+U)KhP+W&`Ug|K zX0MbQc-#gh{5`0ml(Y-SDolX&>D!ewRt>-tx?vw1y8`F_qHlm4?a%MhpG*vFFuswYt+L)p$CqwkeEOM4^^(`tBgZ^6H z#E*H+2%&UD+oT$Kux&9xum6*MFCPmIL3R)XOv(l!)CTrweMF|TlfiD?Aj^Cii96}qxWS9WevXhur}j!%K(wgaac;aq`-b697J zd`IXaD!ceT|FQ-(s7R;VkN{Df;`I5`ZhMdY$;PRy+{_Kb-(a2_l$bI)(*Hx+F>P(* zMjbY3`IfQ?3O8msqe~2mi}5sn+k_m`1lsV7tsOy7)1r2BL>IfRvV*6O;C3E2c17pQwZ<^lpmc-`k4Tkwuq`V7@o$_TkI9L1l6oyJr)qxGVb}7Sws(=M@F0 zW`dOu8e3#hIZeW$hef3D&l2E<&A?5DKlkg$?fozKlA4;Th(a2pB|29O0jT4kJM6bXLqLk!(o@M_ZRfmEXgrX zD>6!Em(0vp+Czx6G|W})b8}D3PFG^mEM0HJiVB%#^syDWSWzFr@u6wHxzAB+5gF*p zuhiFR>*`YQW?A^<;3Ytj5L_j&U_4eQSmc;O(Jpe)-gAYA;*zdP&WWL$rHbfVzO{N> zT?A*!i+xI4+@kuO=CP1_Q_zu^395W`(afoMm)&~wf3~@Fv>}_)q&-_<(%mR`Oh2R9 z<24$`+g<%^yaH@RJk8O%j=!xwTqBXuSy~sVQ6p#_2iO0lgWFEvnC}6laFw|#I)q~O zc6FkwJIgSr&a#!HQ&JUTUAeB7QsA{5DaGR!sT{ZVIn;2Yu|1dVnQ>rn*kgqbU0e$t zDnt|OrPh?+3Iv%(?nXY9^fmBNNv*rc zks-0FsMc`^RrX8{9=c`TuWgxtlwl6(>2dqGJ#W9YNGWPPhS9Ik=Dr|11tcFqJ5$ zur;`)uH@bT2Tv6tG3mvetOz%sSPf$BIA_* zRlbI5o~&#QhwoVU7I#VXmh7@I!)hwtgA&&Rwr26S3|=2$vzYTs@l)cf`SgrlO!<$R z_W=tr!LX8_@Kio@PwQR!lRme4C1zLorL#xV48Epp{OpHhbTz=jI!iAj6(^5|F6zz| z07mBK)a>kZ(dB~Ym~J-F7GDXUdDEoF{d#vREhFh-SbNiL)%ujjE@n4IZ>dcSD=<8^ zcE7qe}O5Uzucs|r>0vl$3suH2b;Ya4*wXER~XZGUhnNHo{FKE>`%*OGNhmi zLLP{T@AB@&{y`ymy07`;=DklUIK?ZbB+&j1+g zw)?B~Mpjm@GAa|6$e={@v2E8w8`Szfe?y@f`o?{lU)+fBc7Sv}uHmd4SlZXt+4aFf{KBPDqOisQ#9GZ4Nw2k$rQ+>#+3f}tZ z>3CS*e;K9^$22WIqb$gA10#JpZFj(-cs+U%h)jjep_GWXpqTX<5cu(_5kEZPC53zl zn%?nn#^~j#1JH6niGHXwc#vX=23W7G2I;frhylkw|w`z(f-<@v6krA^T4} zzk#t!k56_3y28tdy=>?i#h$WTaVIb|u>df3C^U17D#{m-X3C=Bw zKkMWDmj;ByIK2w|s`Ga_k!x5&WY;iSY#uos9|TcJU#p}qwd%5_%_JHvMiZZP83$; z0FlD@8KPYYGr6JwwKB2r>42ftz5PSc4gXI(7a=*Zvfr)=C#S$#$YlprdFp_;T-gC) zu|{%8HhaG|!}68YyyDzv8_gBvJztZuw%+i7@3u~I$KZzbzR!ZFi%@F0LKfI&`E1#a z)fR({ct9Fjv>}SzQs6ZjOJ?cwDMc@%%!R!sIEoJLe7mrWSGL)tp=`ooTOscU+@RS8L#d%;1gsMbmhB?#Oiv-tbAfC8LxGtO23 zUm$CPY{BEmJ{sra&)()6x~7sx(N8jPgFLwDM;j7_bS)vVxOr_BH>WW?BAFf!AX=PG z%csq{J;$qW35f=<_~K@JdfKgjjt*;3a2|*;GZDXJv2poV#eiBvIT&6Dl1bjSx8K~t zk3wBi?Zqx8JYRnk=PQ0^;dF#sX)xUUk{Hu}$XYl3R1~lhxXyyibHtLU)y}s>cz(Au|b` z)h7FO9W}woAp&Zu_+~qOTUl ziF1qUx}h8qD$pT&6u8B@5=nRxwkM4}3~c;f;GXizo6Oa6yzSWcfb1^FEz;fnXr#=P zlmC!^R>l*`K4`GN6MowjFIhACC*ofEWIrPLdMdl0kMCiGEjCVI5c=XBOs)gZv_RHPe1V44vQZI^n(BimXr%MhT<)rpBng1 z?SjY6(nt1GzGSxJe%IAz;257ezp)LuSm;*sfo5CFI3{uSZ}mDsYXV*q?{dcq%{@c#dJ*bNSwTJoY}`jGy3Jzbyi=8S^I zGN!!+%P~8cj2E*BmY^I;i_}JDqYSd#Z{=QivX1gg(8=fGXFdHKghekHua zfAzjMTDB!zuC#ECWQ+y322x0PZexJ`9g8$eH^g*U)x)T%$#t24vpAgByE`7FRyW#I zJCQI;oK}%G$MZ}9NyxPck6HNjZiDu2CG*!G$FGbd-xtzD_ZGb>vbzv16t*Ap$K)F# z8^~+qF1Zfy8UsDAKo>aG1=mwnlMXD?UtPF8#8zW@MWrO&PHZw0cXhY`vW^{5 zeWOW&Q`;Y(?2lc@<=UWi$%4$4><*%%lZbR;t^R#kCnabjAnL2#Wu278+XBzCSC5zN z57ijLiy`X}pg1de-JVu_3&?t`3(0}+amf1N>N2q<;L8E3UFQ0bgc9fUR4|qXMf5v+ zbJDH-e57Aeb8&|8ROnPyiYlZW~j?&NT=iM1^^k!-9*>P%9Y_P*-cTmZ$&PT6=-bvC{ z$Bu|V(vX6wRVO1ep*oq&1i`+}H#mX;jd|}q>@A{K8&cM%U-n_!$JI8jF}PWd z-zk6ZU`?(MIR#K@;2AfQMZc%qz_yI(Bw6Xr$~H#v`*c) zU@yOhYuT;mIemOWCoGns{2|?BULxz2s!imF9jS?4WU4fAf7cgu zo~8EW+gW<%MuhtPKvwNU9b5PsedC^{v=oj7mkWV_6d9Uz1qL`Jrh)5_AC1Oao7&On zqv^e%OKmuF*>+>$;}R{!IC|N>=BD+AKLdg^1jVzO=6nK} zYDabj+I%_I#Uxcg^nynWxT|Xt?iz95lHbAPv_w4@^H`Qs3#`)g_d)`XiwQmX(nH1m zm6^>26LKxGU{jEE8khj+RF+GH9ltIcNi+6iV~;it(DW@qX5UhfRx=Flr|FmNw{&{g z?$49Yc!H1UekA2H3LW>edQgMIuJFnDEy(%8stOjLwFv$5S_EoefmX1hP#L4m6ao&9 z7ec_SAaP0ET)V@Bc|rH+O!1>E82V!UdM25+B^Vi-@^vdXI(sfR)B8@O%DdDdQF3?F z^R2?7`EuP8HtD)6d9HiE)wY*o-uCdAW~cjQG$1|0tyi)E%Z#kBeJd`MGfTpYLnx^~ zmxy#FtHn|LT6%Cnj}0xeq}1@WJaxK*9!Q;gICwst50B`yn!$H*K*zDe9wd(|IFX_Z z|9=a8B{$JQWVY{G*7)+NT|$-k{a6sTZeXLku(*L!P*V>3>GSDJx?!w9Uv%YnpuQ6X z`F)OF4=(8;T*;l=0|m><+vl(8r^Am~dVe@>O8*zF`2-=EPb3w_VLl3Ejvs<#^BYJE zPXXXNrrdJTP71l120F2S7o7_Dbz5MXFJxlnV`Dn|O64~glk;0UOE%U*8*SH^jE1Yl zWHpZOR>^R6+ndVwUcp*9|MI;1njZTHMhbt2WEB!!*fv{;L7*oKzDv_5%x#^v;_L+z z#@xA?tR|glV`y2!Op)ze?a+a8FXr4-NBoc?zW2KjKlBLVcO0)Q1aXT2I$d)oRMT{S z>y5>Qv?-*t$!SAQ1yN(Zeb^%q?$2*o!MT?`Mi!rG*unDU8oSPbw(-ou+prjdLLRHo z4zfafauBxPr#Asn7Sk%pdnV+p)5(4&salQEa1c>lW{HWlW4hMgsCTg`2#3bLPYh!hX6L_ZL@(W1jwHv;{!y zw~yP`o746+W(r_nIWQofa$wuZ9_#n)8(DY6sis@r$hLd%dr_3brl@9D|N5^6XbHpm z=p;o-&;RN|u=-}X5WDnMdNJA+1qD9z7e%y7Vf(XPn?w>tR$<9gU6UvuIS%s~LIDYP zS*L3+urOH+pmKX0-ZT;>9ip$+aE0KO zQezeSBhrM-{_%Unj>sfpM~85usUk-<>AK?z=0f2iA}rbLFwdL-0Uy`E-q_FfIx%&S zb@-MFJSw6|DgGJmAvmp&ScIbsmB0u~mHx<$0IiqAA*RY~ORW(^D#8dk04Ry5mIMyb zr>;2Dj%BsTm7(e^C~Jn*KHp>MpWo@1p?BV}CUd#Lu3XJ?(c-9Pcumj`_;0kUVKPUT zup;O8UI}X7lG#o`qGuz!Gi$RZgspDC z`7FOY@4rshyA%%96((;wx9)eHtoghutr>aY>R&1rAK&436pkqdLdY9g4rx?`b!p6$ zyZM@t@2?b%CT&taE17t%i1_jalx`hp=lXlx7j^X(hvgHS9uH6HvExRd2^U;~3%(FF zP+IaDqPC6(N5|r?Yc(!K2ce@9v7sOpVlYHfx zghO`OFLznG2JY4ZYY115+G`*;OTJYEjy016%jvx1Na%k0#&&bnar54U2L!BMwA#O{ zB!%VZKX2=`%lq3i%K%M4>lVq-tRfj&7h$ppjcLH(<{b~nj)y`7k-Sl<^WjKt89~*l ztdSlpBHu?V?bB)#%I&*#BCK*+9j1u)(@jVCMZ+eNn_WNXJ|>RKkBMgrp{M2N^~ok8 z2eGhV`0!9-v~)C!=uVcOAF4J&M83Dp)lPdaJOT|TCuAStKk+BF-jr*t+HX zMz494H=i%ZSEI>Y7x*os-y4tN`^%67D10{Dq6d3;J?qWqdhNp;$#_#KHd{uvAVB>^ z1Mn+5 zXviOZN~N=Gu;lejd^K0TpNx9GDaC#Jlkaz}lTAvHRo=OJXpll6!9>F^dCp1?(# zzDGI{Um=r^ys>G-z4_vj^#{gXd{Iju7}I3AxVdD|2>8_OqNctB^hfR35>)xM6Z|Se z(94gpfV7vN=z2FaU(_$0p2+x98D%A1gu2)(>Bl!d{9+G*@lh8)6x{n-@niD&^Qm6P z=rRoPUj{?`M)FVf6gMxkn?8vtqQby7PWfLiCy9Y+jN|LxB6%+l^;YZ1F|y?HSx5R{ z;5}I-j;i2?iut&X6yxouPrH=o<`hb+_#o13PgmPxnOIfW5Stcg$UaCapO{${F@Qs# zkWWe^ln{N_|$N$ z@VzV#o#;ZX(*c$XV%aW#r4P2b1O_T(ArO|qtiE$9RO;+O8I_;KXzQx=AYtX{@>?S} zgdrm`WOvX9ZOW6wW!bv4m+O0^11C!wPe>d{1gCA0Nm5mH39;PFw{%zS%Qb#ns$PbH zaV~Ibn@xxI>=^%1rFjAE6*F!#G?C}O7usG#6XrGbX1_hW?*BZe{bwxvqr~_eK^q`A z>WMk$ezj}QC0&;Yr2^JJI`*|vHo^BCGE&f$bgO|{S>&K4qG{AK^R!bhH+_nhWG6zh z2$y?|DX+qfD&$V*@VZrgA+Q1u9X=U5s@9JXl>7jWc$)6@PPl38FxnjB-!z&9<#}rn zbu5PtWE)S}VN#$RVugz^aC0xUi;0e9oDU3%gz7$F5E!4>@xm7$$=`iU>x@1;RY5T_ zezp-91rLe_x?)x5z~V zd|^lm+{jeSRq%qNTM9`XegjR82s*uhv~cNu=}tQ&dllv!lmtS-Lwyv-UtYVw9IPg7sK}jp}`KsN9S`ezhiwN-i_82qG8J5w@*tMe; zzSb7#gQaP@mJ<;P$nD5dN8^jyJ0*PHeMt=$U}O>zB2vw})4rqhRGD?5v(fW2B!28x z2i#QlstiQ${)PgYK*Q-sd!wEI?6Pn&KO`7c%JBaPT?^PlMrN+oyB#c?TM!#)7d0t{ zerc_2Pc70;Ej6R!>bPHovUjKJd~xBwj6=j-jXKhM0H110=%JF#x_5j$9DxPwH}mZ- z&C9dDph(e~93xV=^w0KTaM;Y(I}rMEo2eWuHW&I_-|PaSQ+^#`fn{llXe^?xI@R@= zRZ+&7N*AtRU5l~g#r5+VRMqvK^(gP|*OFUxqx#>U7|M^h>Jmi1p4wISD28P8-%DUG zflZK~EWW8S+`t42iimrYu6O4zFFV!1bQKg|z0C@X#W;zZV)johS& zQD};X2s7bb9npxmzAv(6_5bLT$+KGYxo@DoSsa`fPW=^FR)=)ss{}ubx%Bj6Py?Pi z+;{BYw=${A^pt>yY{CqcQqy0M8YCcLg+MdZl*@p`7(2{3*eWM_>bdm%=EC;kz5}3O z=l2g)H~xPtE6}9k7D+`13hE1I2?}V^=+eQbqxr{=I;T4_HV35}3T2Sk_S3sc?1K)OT-?Yv;sEKDiiPi4ubfCyYka10$ZMOy01ra>Iq9eY3c}<%Ql4SkvQ$!})8cCX zPaiQi3Q5)oPbr)3|Lb%fU_xrldS?A{wEeQ9U213?&n^>~)N`A@2pBt!2OBya7JmCe zMF3io(lKw9mYj5ORuyEGS-N@NZ`S+s;0qQ|0?hcGIpB0@ts4a-A5Y}IYT^zSMPr_jk|6uI<%G(*$1wFPhJz#$!2tB2n%cmH#?O%dW1mjD16 zPef)q!6h(vNe9vDi+%@0-GW{J{A*DE2OWaTr8SZs*f%fP6Q7&|vq;a_Jj-f^-e37j z^-w5&p?ePk3lG^fh>UuxRD~&Sl$XmQU;0aMLR!wk{kCpZwZh%n-C_3`1ghQo<*N(=euclG3Ltb#YTkLS z)ZfJo9ED?Fsb4uuKRs`EFJ2bPcC9iL9TN^mScCHgfr9;;r2p_Y^lz8_+h&%k|HWZc zM*8C#f)}p?Yk2|b-}}A!t}m1VaF!vNr7urS4JTaTvN@v^)8pau;(#lvMnbz$WT8di z{T8SIC@uJ9dOE4*hEP7WETrH^5faToFYx6fDU%DaL<4uAd4aRxs3-LqS|mM-<4M&}IClzaD4sjeL6hO)kS*hP`$4M2kqPPn z%Kt$VmTQhP)L$sJ0i6+-`Jm&RU7~=(2mu+vu3ruF&`*s%ebT4%5A$n->5*FDZV|7g zn+%HOrfBsjg;StljY35EZT0s&lNV31OsipgRcMOMZu7fD#J{Kf9qiuUQ2p+*qhym} zfm!Cac3%O%-B&;@3mC^A_40LD@|CiBohQ$&1G7-DUQZ9$JI>^HngjkDa;i<~e<3-w z7H@?%H2gVt@oQ+p_aZc=6LfK1B}18)E9`@U-E01|{=SbN9#F+QDNU7|mF=J-Xh#FK z90e!rx^BHAAazKfP}t#O{-`z4++PX4oEMr5 zczv_Tw>y*qea+PIe#5=1XSybtwAY!3TLlaO>9He6&dXy8b(VR7By%rj^(oV%;>2Fu z>O-or`gU2r@Rt;Ghq~XrJT`}9!fsY#{sIj(ER&StEL){~1*B!*Mg`9sVk8_Dvk^d6;`s7|U%x{;)h(uA5@r{fF)Mod1y5DVqY`@-|53gtJ55x3y zf7~+3Xm~zoH;`zusC61*6p`?L!#knRQY=)-O_}MMcOdKi^JOVbBnk-S zPrzH&_vdV*`p@SxfLHlTw(5^?L{I4daN2$Xi15b@q#q4vwEdRmKZ-wYPep_BDYJ(r zSJ2-vMNs5F%266RYEJU*L~ruS%s+mX4|(_aAN2JJXb$@)>*u`z8}OC=Bd2Q$*P^Aw z!)#3~@!`I(Mt4y+QVKcz^_=1_k5a^Z;a_O|b90pu=uPxu`Jo%?*tX80$nKRHAzP@U z%c-Lk)Z;5jk{FgVjC>sCY*zNMLq85$?mkqqQIFE~x0L7lmUZ;1e6%HXJE~t1n31yE zR(W+niz0cZ$K0S2K)4?oG7+mp{1WI{dVS#(fBl}|zj4AmQiHgwszA}R-aeKNe3tEz zY$44%bzmEG%0umJ*fUz4#4}5eN$jjlx-FmtE4K9KKaG-kq&l{3Hcp(?_xhNbJ(Cv` z#XWkABGLTBsRaMrApq7;@1!%<1C#HN*?LW2%8F@yXglt8B$8=Co=1jzp-eVnQE-^B zCDsI|IU-nkT#_O}t|mziM%hhhjN;z=xLQ?LWC1=FX_lJ=g%hm7172lM8s*9Ayz--R z>V3})YzA={^>b-3QK3m99z`6{38sA{UxXkhjt&p?HvyLN!{JMwL~trFQ63#`PiKsN z)tH^w4KHf}2hnak39PmqAE;Z!u3`;I84iPZ7!cOkiGWe0iU@Szt{!wd;JMPV14o*5 zOazv~l^#bW>u*s$abVaU&k6Ls=8zi zFYas;5?&1g+j@!<)In`QDA`auNeZ2ooo^t3K@H44ta6Dy4g?}CbGSV>ayNA(Y6 z;@p_$`bBn)PS*~8C_GT|iX`Wm`@Xa?m>H6GzHvGqj_Ze%*4koeytmmhq|>0Bn74C^ zLSxyRmQ*b)2XIl9OnL$pZgBgD!`CUS;DqRZe||fkjQ=q<+K^ntS%0r@HVjT&imZ;T z9xq%51P154ju-EGx!%c*fMdOE#slbGycqeFs|%7v#CO{6nJ%d{vA<6D+3hb$At2Tb z`LsTzubJif3}}^T+A$(>59xRKI_QHrvI%TlDLZSQA6$%n9d*($< zOxq@E%gV}qp~JmJliTE`UvBcfia#ft&JWsTY~icfGE0)}AFW2-HjKuW(aHBi@n6o4 zzZ>5rZh`}Tdni9#Vw?p3fBp|Yj2|r`K=T~TWc-J*V%4U5qx43sI! zVh}BI`c#@xT?~J%j{AfvV&mFXdfy&Go!CS6oR)bgD$4&%EdW zhBx=Z8cDrS!!k*fp|9CLuLru5K!whZ-LEWMSeW)CZ{`u{)YAa87*|chPqQ&A2yL3~ z75-G2?9@FrVDmIhNnV)JiFE41-z4AiEPPEUpX?GGdXBD`BmOF@+KuO!D|pAx;y7>; zk_GH`*zcZ`0EJ7Cv|#VVY0OBm34Q45o%r7xOo+!MZ_Slg-3IAXBc2;`fmUMo+26pJ zY?)qFA^3Gn$d*Zhp#n?kmbjQ*z2VTfPqJjYOo(pa8i&FsAx&by9z}|{$nq=CNZ8HX zsPX`HdQ@?BXZ;m>9RtA1qDT4)u2wp!RV9F1p?8WFUZ*8Nu)(U2Q|OwoKliO(s9HA5uSRZ<7i$wk87T->^-b zDz?1Zw`=MI0_A4q!D@xp^0RpPRm9M}G11EZ*)nalhcN7x)86*0+C(;!CG}S;QOO z<)-aN5gd}s*Hs&=9oBu0K@6k5qI-+2(}eNr!=LZ2oC;xn?#?NgoTe4$nK(!M;}uVT zNeZ4-wGZ>F)Uw|Njjf0YBce9Yti9r=Q<3$^4eN zxYwLtQN{r$b;+i^Qx|K7`9m^)v`9`qe?aCB7b~s#74cU33lqFI?Vnr0`8ja$$@YSu zQ6wAIpoO^I4upTEN`%W;WEn?Mh1%BX5u7vYtMprvoyYs+3if$q(Wxh61y$Oy9iAfX z_@sgyDK*1VjbtV3U9Fy2%QbEv*^08>>2oh1m~=t3;lTwzxlsD^YQ@`SIwx+CRY}(@ z_+?w6RaX4M!7ih}3gaY>@aYKkbI@rOMX%8EO#3-zozjPaTe6!F5Jj9KP!NUAKoQ1a zt2<{3mf)honVkQd#93xxS*=ai5YKXn$scr+rN#)NgoBv=xqF1*U5(1xr>Zr`2v8Ig zjSj6L19@D2$6(WQg01!#Kny zLn0j{rtVM8fW9l_3)Xa zedGM{?&h!OjkY}F_G<8PIDO`D%a{(&$G6YiyX6}5;o$n2gH7XV_$(QttOedb9*AnFtnb%L zh6en%_J8eI^1ZSDwmvK$=P6&N_E%|11RQMavgGSJJ?49>{Z-BxH9}QLf7#?R+3X5q ztZruAGb)8xzRMt(e8X6_!FHwSS#Mi9Rq}z$?ThYp&yh?5tVZ{c#jB+3iP0lB5&QU- zuJ9l%nt=D*f>Ugvs@|cb7N<)n^GWnbs2O2-GBO@m1a_zJ`74AwuN3a!pqOf{`q-x* z7dh$eb)*6(q95DpTtr96c8_u^j_l)r&g{sG6oSmy{ZQD=%U=A6!x6p8;OLkgVL$a` zEFcIEAgw>9>t*tW{zZlKC!FLt$BoEwJ3{E57ozJ|21du~c&5Jsp#A8bZxMJ!@-Ri^ z91hkkDB@CnrfBv%pyo5N#w2hSvZPxR7#vsG!pOEX+~l)w>!*q(%j(0bZ?+;He)KAJ zM0>K#fb8#8$^@VO2p&1Y%Tupc=M7%5-@_nMC95TxN-C~4%p9I!e_Q?a*e4oUYSuD0pN|7|Kc%H?(9nx6P>*woD z!bKp`^5B#dm)1daIs!%eF^2J2qmtxF-X|?Y=sd5?IQBiR=J>g-Nq$oj8+Zf)9mbje z*6dafd(2m-EO_-xQ1v9zQqMDxx}UuJF-S>i_V6~|#mmR!?IwMA0PM#9y8n861%IO@ zz+4l{2)`T3eJqyuru?HuWR-$m3DsL^4PHyAE^29okqb(!OH0=RO_x@lwJiA;i_dj* z@?>-OR>q3F4YsSlcZC=?KAExFElW6#u{vp_jg{un{>zHFxP|a!MN?FH7O-eU4rTw;l3c$ny14}I9rTP3 zmR8Si&K(f&cGw#F&K;R#-$jv~Q{tmT_MXcvWiJIQvdi9L>;qR`+AGwF*)K@!ZI<3A z`#o`sj#b@$EI*7$+_9x7fMQ$9xa|*!)vT*;(mQ9N$IyCAD&eeiUtt8a-DN*(OPx7VqM8zclnT< zy`#+6^CZE@BrCjrp}YSQ91Ka%>ac@@{a2okG@e%_A3Hkf@t@MC&+DY1eU&7CLP6dp zj9HaPq|TK_)poy&m&t0jd`zCyuJZ<`&<_VAiUNjCROS!yZ_nZnj*)El$1JJNA_s=@ z?!LlKF+cL{d($eC!P<|rXTaLO-~WjQ`(Dv>#>X)xWwKBf1l@n zqkt-{3T9xcYK7R!up0qN=KmU$Y*OgkH#_)E>jCwjL-&o9G|Bh7LJ)L-Eo_a{t%$r5 z+T2q2OAlR@hxRSI*9E+EW#35teO&Lb!Tc|UKuE5=!$@;tvB1;@ITHT$H6O}LAw=R6 zExBb3kVfgS6Ub@siwM5bA4hlSI=^U#O0yo_q0{H#{dW-Cs>Cjkrw*sVi787&Rt{7+ zt~5mw!svR|!usF4A*!^f;N&Q+0V14!Ka%@WDA@!`s@zCNQvqh!)JM2_Rn~Mmjl`}h zC;6VGO6+uWg;Io^dkQva6XBz)-TiBb<&LI_i9w(rH+vcKSJJI-6(vM|5jt6witk4K z>>4j!nP7`$zou$kl@K>ksb9a|$~GZ;R;X?=bK;eWIl=Pt0x_?%GJ&>Ll-PNld-ll6 z)8gSJD#C)MrITG>Ka0)_1WoB~HI-n?_03a= zb^&<>UO#4ia*@Rihy?8SV&5me4xj$%zWdY5qlB#4(c;@L zMO?zE0Q|~QYbO@ah;HKab6cJMMjUb@?xIh0@JoppwQ@zjmc<1G7hG?lEaH1&J(aK( z(2#$r^V%h(92AG`Ptb~dVwdvziE^jEbfTNM_G|iZJ!1ZMqhBmh5dz?Oz(u7#65R-0 z^yu^pw|trBi--aC2~3?Y^?bS7foMUW9HSRPDI^as_=yJL(0sl@_^0~nPyTR1!ZUnT z;=H3718lkeD<*w7#7boUZ-$}24jjqDvI9jxgR32S8UCVBa7R1TIDEAbS}8Pj;|t1; zD6b7oS36uX?DyU9U}u(K(@NLi*N@o&PbMS zmUO%8DI5IOckPp7JtrjUl)?h3vJ=QN)Ez(66&9kN8KS>`8iVDV9(gulKc`s_jK_sY z=ajC-3O^S&a5ID`u@(hVyew_v}T zf@cLnGoY?gO23gnFTpc752Xe2vNcYiEeb|v^lQadCsKF25^$%_UQbPvK-eI!JbDf# zKIvx2yN~*LAW!)2LtSw>vcuPV_fbUJnTOub2F_1kbq5zjBvRNokH+NlM z^YPjzs2W1l5Pg$<^C(YeAknQa5%hZSzqQg#>JnH#O#_2Z7gUgZUU7Xbu7@q$E#m)Iz#b!O-GKPV9lGNVc(f{w*B$hEK%U+x^TFRjn7rMIT{Pg3J z;IJ_0mC4bE5<8al`(zY44#@%b!(STo?a)Zg=-1|zIW~!X37uaWyXjaYD>!g|X#}NX z6MTt&ZD77*kvj^kXXMgrK3JzxBIb`-`YryvNp7?BU)T&y-O}c#-$qr~-?5*gMxAmm zBxNJCd*uWFmj?SgHpv?b&0ktNz;S4>-mi_gbu214c)ddIPY)N82phP)vUg4o7eYKk z|Cc5!I}UlSQNP6X)9;1giy!n#R5|?}5g{Zf6Q_R>eIa`Z-6CD#7wv_-qcD8M1QLgq z@(Q0*CGwQmL8(dDDHbQfHTjIvWnnL%|766w-R1}XfB7~w zGc>Sd{ja=EvtmMh^WIM$z(_lHxWBf>fMeQZFIMr`E3x=8-aqD|akc-T(gnI|1HD>1 zsNYHaf9ahNCx-o+y=@%Q*(G>Z)hAsSfiFn|KW&C&L>#a^)7f4YVsR2y;Z>{x%PuXe zCZ5%<%8y<8v68QtJ@|_I>-dUhfS74Uzc9GZbG%BS@WXz-jg#-it&9XdC=|&F3M)84 z)d1ajU0UQ44~iW=!$^KY$dXbizSluWiZ+bRO>_*9?Xl7K-l=MqM4|tRVdJneaUy!9 zL+zxF8khL&>|bnN@=2Gu;8j&ok8t9imG549X0kF!r^)2_A*p`n9qMdETD?iVa#EQfMe}Eww3HTOv4_Fzf|HdiceGJ*4&(7B&41 zt82dWkrAcLc~v9~s8|{nVKS%HJZKTY*X$uf@-so_34U$d4XNjh_4)g|0yRYfS84-1 z{aSu_qPUuuA~EIEzqW0>;}MTY*x_K5QT3AFp+ccmT-Y zf8Bq*y@J0b85tfKSCe<|hEs)+THBUxM$xacrE6BpGDEXpvi0v)>A-W$=tWHBr7;_{ z1+u)19k8Q%3fL}7?|~C#Z--C2!;f43w`sCJZVn7-Wz!VcYWY~sdwesS4{pwfvUR;i zC$Vzfe94Ty>NabgZ3ShN4B)?01jGK>F(xEq3In=&NEz~oL+p~?$PV@q{Lrgi7P*A^kjLcT{{%uZSGO zEr2&m7?5vb4kxn46%YYB#5eZ*Tl}F9Bf!C4!3l8O8VKli{j`3&+OOZ<$NK|YZum_H=|^W_)C!)$Pp#?u7;p%`A>MCUv?(D+Nxx!OPf?@xmHrE3B)ze?-Z zndtu{z)RWd-{(}oMkr2p$+oaq(#0*Zc(hpdS)3lC^fKW*URi#jKQv0E5hwC{O(f0} zk$D0J)#`P^E5V@m@|A>6{=qZhS3s-VfPMWVxIS1X3z4o?J@G z#cR-;tPaI72&T%5rnl>qZ#|0KLZOmC%b^2pW7mZeQC;yU4=`G9HYHXTa&FV0*AN2E zj_b_|-p`oS@o}q`l8$MawweaRrYag7h%~qi<^ft4RkU2Xi59E2)|zzh9$`dLBwe#j z@A*WhA>wEhh|{z=hnbL~Tm_kixK-aGV0MZ%o(qNMxB{*sd>nExPkFG;Ex@{AZT5&9 z$&y1~Nq@hy_|PAVRaoGK z|BWa$w_=!$R)U+rpCjGNzumCW}SZ_CQDZrQ0^9-b$X|hW*$$=%8$dH2GoK4Q> z782%Ij;?BJGs6$Ci`%i z#Ia{;s+1q`d#h%3=&WWgAD6R6PRMoN{X9LyoBE1gv0}Qb$zeg5t8dL;{6evVUCLRY zTqI~=f(pSvAT@oa>{j?A5CAab6v1R^(;q3rG zWPx>x1U>mf&_sd4e9P8{WS))+-?eZOpE4}fUWu8Mj1KTIU&M#_HeGKE^;v+FL)c#P zC?@6IQhTM87?dk3&1mi)WKlra&{#5w2!K-G68y@{0rTYh;XK`>jVE6?*T&TxbT-2B zL53(L9oz9Ni{|7=EY%^P6}L@akbez~EKPxAZVCfG{SjSQ{0B)z)1Xm7uu0g2S4i1j zKx9#;R20Qeh|1-Z2HqaF+Zs;{h+6GL^7m_@7Te;fT&COH-2Zm|m?iOQ9`C;lzbDJ% zp?RIt-dmte#nQB$3YfGiF=bU7CAZ|ju|O*Yr4Q$VfMlP z$97pGd$t)`@Lt%iKjIDF##w{J(=8|LSV{5Uu5F6{SiM8rvVcm&JA_n2^W;D*zjlIv zJ$epNKpOsg?Ia!w(5oz7Z*k7O4%ovGbj4)*?_+XI>g)i1^I*DkSItJK9Q^7U>-}Wg zwx`xrg|WV|jJNRH=`I;gZvzRxPqGT4pU97{v42dDo7F|}i7tR5#GIzNF+kv~zb2Ed z9tylq*DJc&vaq!sT16s#MHFqz51G*R54@V$`ag|4o)(V$43L3XgTsGRFQaXVvozf# z@wQDC0RROY5O-S`BWP_QmTO?YW&3`C9iBz?+-gS*8ssz6$Wd2C<3p^}z-YX*$3<)9 zV*3gnk)rZip$K`Erx) z6aN3wdoQDVdZQMuSO%gxma7Q0fQ`1t=*ZxoN9nZPz#-*-D*vFyjDWS}%@s8VIJ?}h zRDzp~4d~cVn$Zj5O=|^7a=s~?EZf6F8Dd1tRhkQi0?qVIptlGIBro~V$WyaTq*Lq% z382IF0^ejC7s)1h0Os3d-Dj$Q1t!0WZ4av3w@;QjX74_A% zVZthAJ8f?R7#W4konxnbTzp8M*2}j8_8-8Fq_#3>shjvgY5@t`i?7$|&_60^Ngf`B zppT4Qy4lD$0KFy46s0iXHw*omXn|4e`%U@B*3#vzM|g9at<$W?w^NI&0S1Ftr|H@T zJgnLQ9pQjuDMKm#c(vYsNme<(C-YQopCUJGkZU2Z2QJ*@7^=E)vSoe96#)9MK0Jz0 z98-`np7_`610VtI6&FwERDX{j${-Yer>@aW@=8+(*I{ikVR2BjJg0V*BsD&A- z>RK>E(Mgf$5@>x}??>zHdjFWLYS->L5i@4YzN~k<=C5dJ#L_tF7KGwM(oo@CB=zxj znQWT#GHhbLk@Lsnwou7NWUN(wahs(Nz(-ZF6}B&c%_4{Pia2)p4UEXf9FFGQD|)^~ zl#hrhII}~1IPTH*Qzw+U5-k1;&kPYFib*r2$n$fW(7Jw9sSZA9--wPgU^DT95W)$1 z1*k3QHla@xMt}xcTq^w-b}3djnVJ7 ztzN2c+s1VGZaleJjK){P#qD4|A5L#@@Ti*D;S*OkDC4jEMn-VlH2Xo05*QeaI=EPj z2Iuq1^rH~d8rhZG6K|-L4a`GsB=rhv9k++-p$8fts0A3&W>!pH_i6FG- zR4fQ`0`C`Q)4c;rxC0Oy_u>?k_gGP`l!ynFqm^*IOc^N65+h;RkO6^Qn6PY6n9qcp z5k3j?PkI1S;G1N)o%2?Py#fv6xLZ81z&4I0-cnK?c*d@=d961a1f}Xk zrgL(&jop%Dp2l&?(daVCk3#13ja798l#Blp)G5NKG+i{|x~10&= z4Y%FikI-s+gwNhd<1Ka4A+MrCeF)3UG|v~Wrni{ivRKW$H6BZ7Ul36}#$odBV7p=w!0j_>O=O4p zMAPI6mHcJj--~!fwH$2eJl!6WB6v&lcEj9U zw)`^QmdBEfw5cBq_HBVOaa6@@S-uwtcj2Oy^NuB3o&7+auEk{QSjH1*BNyxJprWj7 zYC6p3j%N`^gvIUB>A@hR2_hGR_%a5gGG>Bayu)p?@RJThXl&av(p|ExhDzT>J$R11 zi{ejR)X|EZ;E#)o3k9ztTk}j7s#DJ1LAcbDH}E$y_PhAowxsMG6H6$f6KYX=beu%| zG#ZDHfG3jvQU{#fA8DWQDvZ*(%Y!0VKyrxAl4Co2iF3a2@AjeSg1R9yf;{2E%P&V0=iVvyCWq^iVRrjI$LM%Zj(n zoiSE%zKNf9$*O%yxkMTeB*-n?;=sz}6h%hdHoNqe>TbdMEp;nvK9h0gS-jl?ykOzK zk{^mYtr-}7hu`TQ&3w6YM zU|bHSN~@CaxoM0q7T1H@+wsji?Ln@F{Ye;L8Mnj1`EYc1C4W$@p8Wv}gyMM=W&0J9 zi|qJ55|G((xlH!^NtVa9^+n4_Vr!8?BWg9a3j6Y_eW}1yIdVhGHfDF{=V&6(8~|_~ zXnt*5E^O(1ax=TTR+;~V`CVf)7+)#zf`0Clcp<&z)|j5lIL}0p13Y{o;R*X#ru~o{ z$}}dU(c%&$2qhfI5L3rKD-6K$8{-?khzxW=T|?y@=PJcwAS+dz32Nz79tm8Y)YCOY zvh%p*jnT_=dx+uRGY*l}dGYt#Ed9D(Df4+dPtv}h zW)^zec4lh~;+O47PC!bZl@(yF?|Qq{jBs%xH&8pT0{Omm>^7qAYny)AOdb^Gz$;<` zWooTJ_Cu!PXy~uaMP0IJ*`!lCR(DpL%v$z2(%>OD)+1xfe(mzHIwm*JfdD>e!RRnY z>R9k_j~3aZ+fs&7oqeErsbOv=uI`m8Ca{P7COz!Wxy4k5(rC6S#{d;Ck+d@IN`sR< z^y6&u)n(zy76$r?KU8U?vu&F0u!gES)+_LZlSdeex7p-_l za=uw(S;&K|>P^=qCQgFG=PBKc@QsJxT*DPJ0UA`IS zscrSf;`r|wnUrUm*8?-_l7{UXm|u8Rh@^7C)wYVztP3IT39B5g_ayU4hVDdO0XcBT z+!pM>=jmpXEDtm^45zr8UJ(fgL+`S$Np_cQq&&XS_mD6r(bp_+_I4WLho*$`M~<&B z`bwq2s!);@z~p%VTDQw0kV`IOT@SkLc;+Af_fKM4%0s-7n2yqH6zBF=h2KmuF?m!G zi;^F2;kFJX?|J#G4$eCKe#qh_pH>E~u(hZ1dHVD@K1`3BT+<#2X5J{T+wc@WB!hcw zvlKt9mxIsyH2a)?E`IOVzRy3E?x|Hj<9i~d8+8Osp1#VLo@GltnHhFq(>Wqxj=GK7 z&>y+3t(WiK|{tCm$wun7D1d;7Ai8ojP zMEGaVSmm1#!~|Yls)M3Ap>a?4B&A#kymCyCFWB6n!)AjU;ob}>GPD+y&ySrRvkpfH zy-CkzHk8LCJ4;r>@4HR9FUwXC=sHNCSy1x&YeL<{<7R zZ|wzLz97r8+G<>!_{w+{`Bzad`5!U1t0xKorArkbT61%WUHRZ zIXaNY$LnOjKgot|D=0ntwr_i79Y2cr7DN0tTJgebu$%&A(rml$O~X8V>kaa#MJ5rW$jW{$rZs5sk$Y)|Mdtw}ywux7kWAu^$9fJ!t} z;brB_m1wFZN_yCHX7OQgrShE90lsBijo)3)Z^k$87H5;Ix$Zc}xEj14XnyV5#>MpG zeZ!sAy zK1`-pHFE}*NF~HeZ$jU=9=sc$>uxtRM*7$8*~V->n7&texrOgT<8m@zjIJh=si>m3 zp7AJ1`1IUPl;0rR{p|eHTV0q8ep|}Uvtdkf$cn0{Ais?EBSbh`% zOg{{V^TpY4I{mmfyPI9=9yVZi$DZKTAN|zqv*cB^qnKk4r*&han0~tFepZGkx73aS=W^qdi zSNO=TVhQV}5c-*iuHUA$L`RBs!&WI)$`OUJZgI@IT}nP$sq?u`i_u4ZyQ7f+g#hEz zmS4I>$l7IbOVj${@zC@rc&s`oz*aOC1-=1O724^#mMR=#{o43TX_>11h_%}|z~sow zwpfn9(q#Gel>8M7_lnjjnZGJ9vF2)iXRJS{OaYumc9k~t7;7*U`+{s z=$o%Ra$6qD?jP@)ItmfRT&BI&Kcbfqvhr)SpB0L6dG>%EMNC+@DPq%Zg0BHd5Rj4<=l=TjI}SztgA%lMpbkNevsyGp($G6xcD zvC(dTFHlS>cV#%X{m1`ZRQJlmnPFqu`ZGvUpcbrQHyJUf%V~vd1&?;_fhFwRRbH;L zFP7P3epP;-%FyA6vH+jGw9{-3lpEGpwPkPflmt`W0~BkQ#T!Zism zv_ee3#hSisaBIw2gWLJCz$niPP?tPQwh3r9>sV2y4WMYYRKSv?0s+RoDgWq5m1^;Z zee}LJ@1*;Dye-%yQtds4562eOLcUg%E>I0~ns4w5O#POksV~#4P z2u9k{4lU}|nrtWqF!0%0O91UCFJYR{SS9Q261Wsv@C3z(fHK1OGkE&EPCDKXm7MT| zw3kiLW?Topze@od@#RAsLO(U}bmPdMnpNyAEtYGWYaa`(NH|o>EPYxGZIi?i{ zzm63;P%Wq(k4Jj|mCag}L^|{{ zHTm~3-t6=L$Uc)arQlfl81El3&!GH66McD>VTraqN(hEgKuQQ!no5M;o*8hG{bNCe zOu(2}a+Api;3~X8DtlZ?Vi&uq{^Ilm8hJ z)?55*A+oB-GgbtaPRJm(RO4F!@gah2FjG5K~j&U=*n@<&~e)SQSaW=dej>hNXfjm{N z+1-lXZC;3>B^XsMX6Xn6uxge(V4SZimY%#qOmMgy4zA{xi?hjOrt-efQ8qQ!>a1cJ zABKa!Zq#XW0(FRt+sSw~xzSv~bd1Zpn|GQ!vcd?s2JC-=4ih-Y;{EvQYVb~FYo|Ss zJ$U$MgNw!FdZ@cW+cR#^(FH5b#`?!Xe;STB8()p*ssvL3+>vp1HNLsfhc{NPznEOz zUXE{Oi+9t(xgI3oSdQ^wFdt5H=a<@DA}r_|v#ZI6MecaeT`s`%$cwx2d~rMZppAcK zXx!ag-6=gA0suqi*;q`6vvJ;2PIG@)FOE4F2J;@b92mVurB>V1XVl&NXJYLtf2LhXRMj;A}RT-u3{N zZ5y+}{4Pg+Id5#XKoz*7wCO2~ZFCT)BkvCDLUfi&cO#{`!IJ?+IkPk2hpEL>nfLMp z3m7)rCCTcz>l#gMYd*^F&mN6ob=xyEX+0))+f|Z%iw}z2n?{Gkgc%m!4jxzwi_Ag_WW_ZS@U+4)&@* zLEkL929D_`Hi;#y%pD{8NkC??i@xcf#Fbn!P1LlS;3qzr#wsiiBXJssOv8JQS8%jV zpEP@f58V8NPvirSe&FT3d`IL1pMId|T#7z{_6wkP|LWOeO4WLQlWwuhYFDUbH7sDt z`*giRQWHPX*M4zvF&YUE5Bn4_L(86(;K6!*>46c*3+8L%d%7SGl|>m`qjxA-eVp9i z?^T`{%#V3f{?Yp5qM8cT&7g`jxCI3V7ELyXxMBM8L$njjzOA30$`(<=A#8St(I!@A za7IEk27C?7^TXkTxn1kM+TJQ9ix}rES=5&&TG6@zKKg)gH$3DW8xLUyk#aw{YIoc@ z!Wk3Zx2sJKb+Gj!J8B_?|@chY5oet+Gt_AoEgpJUMbJV8#^v5dt_3dgc%`KoMW z$BkS8(SfhWSu*^Q?8n>D=D2ROLP5`YZp*$rW{1Ic{X|T=Qj8^O`wrv!mua^C4<@#6 zM)9&h!I2Jd9B%3SkrePL-l33@4czaLY?57?9sWv^-BlW|ntfd`{^Ph?VTG@MAK@5F zRaH@GQXoSbGO5eh>ot>&u7Q)SS$jsl%j&V(j>A(U;258HowxcU4d5aFKyl=4lyv+eLw;zmz@YG3SyR&JhqfR!qC9H&CSV z{i1OEw>WFrzQ^2rUyqw@l4-<03mnHPS;r(hOW;57msPSoYcMC@<|bm0q7N-Tm5?VY z@LM=f)6FXVRxbcvK%u`fhXjXR*oXBh7Yf^V89APehXaX1yTh7e2!-`w`S>yZrcZV}?lNBe>$nFt+e&`4NTeUx z`J-g?aj;whnaR2`kFZ!Ir4c?$6l1No+6aSN5Qgd=1#u)~_;_~w47dnv_W0C71U;-u zu{-V`C&$C&{tV-4RpgC#@RHsuq2HFVWOW}efD&x05PEVtEZ>>36-yaF*?}sc7sU~H zp2R9t!<-Mcv}J?KX&|F>&;lBHeK4M~?WD|9$) zfSY%UNU&`x-SIk~w}9W%got&tE;PD{G5a+=E+0Eekzf=medNF%V-{J)MOoCr>(?6c z3XQYlXV4WNfTWNEP-(!vSMPz&er~kGWqsh*d%n~d z$n`3j?BahPlZu#0`!;&0spBInP^t$)`fjd$O)_*+GraDO{%fi-WsI!jlnvSI&&PKy ziN@W=Tb-P@eiSH<+}4TB|0;FLT{Q3k3ze?-?H3_D6D!0brKN7ra_1Jy2;DEUBUU>CgWzs4x_=A684S+OnnXBcWq`OC-i8!~!u>bV#N;~{ zurB~L4nuM0T;hRAMEb39J@6N<@=vzH4ax1F0?~4fEg;nW57Lv7SLUu88(|r&=ZM|N zlI#p+6#&Oss*C~BGKd5r*Xr|}NI_GTiwN{(I7N8Uz7dUs6`gt4!l(5fu6J3}VGJ*;M(%|GbdFl2&iy z9pS(6J~=mMbEL_gRLT#_{23TBG7y{;1OuZ)zc%3FB-S;XOk60-tDj_DTCWl zUC3V4M?-FanddetZW>m;d;Vldz9gTQkQ*4f~5S`d3G`C@fS zcwwv_4<>M_c(vHa5;J^xQo{KLsQ>V5*-3@ouT%7+oUvy$z!FMmoGWpG2qU0$ffk6U z4*#J6uAG_8lFdDk+M0AC3a0R_!`|VDxpowI>eXHa10F1WTz)zGafQfL6^SD-4jd8; ztmt6P+SSFY)jWPs;E3Z2I*!B7i7)dUp29=flZ8t4HcxCT7zePSGYy%B6m+z##lH(g z(6D`DPI>8LxZ4rywA$nta-Z>KvRRd8$A*6CnK=&ipeVk{#c`@&3A&t_Yc+r*^Ryxx z>U$tMi! zHhfTbO!I5VeO3-TPI2`gJJzZfw2$V@K7%?V;gc4QOw8AQV5~sk&2Z71TV_rCoW|LzG9fA7rBjq0EuJP#N%6w~qYT<)58-X2+ihD?A~-;^&Q`$1 zm_mg97=ODgIH&5VV#R{;shZIu(|)QRmTiR<`3prYn@aC`S{$hLK(wSb1uQiQ3=qSs zxt9$zW{g?TAO}7-pD?dOS;epvb^a+mAC;5>n@LKnT{sn#6#SFgp17q^%l0JDgTP^w ztY+}j6Y~W%jK!U7F$AT7Q5Ne30l$4IonwO1!MkIN`dIaI6xzn}Fzd@h9EZ9$FP^M-$Q!!qivR^ce< z+L%-mAmU<}hpKany;>1a+nohWwYhm5h*>%~FUYBa zJc*C7li9zUhE0br&knxg);!gV_NXN?;EA)B*r%IGyoBLYJh@z$h#Cz+nmDJi@n^@`cM-PbY$v)2gU&7-6KjjgligBXcwJXNl0C8tXj(eL3KkEIX%I&S)cqNw7~O=4s*>&2hPryZe1QpBUiE#DQo zxd?7B-jcOVLLLk69~+9sn_8X0eqm&`jDNYF>=y^bP025wwD@=3OzQM9lh&J^`VrbV zb54bfik9@HQ9EHCwNnsY(JEqNQ_q1InFGIT_&@rX;4B%IJYnQ zC_uW|Whr(%8gBv4@umnwZ0LtPM*1vcwx+T}5`~t@8tF2e!7!{lAYdCJm(r8?p5{sF zp{^`K7Sw3;%@zu@T0dpX{~R-8SA|&9ZPV~b^f-zdb{;;?)JHCIG%2aglol~UN>n?5 zt7J$%l6i{ZMY&0EBOZn%)9;*f-=G|6c-_)4ptCSRhr*NZ9r^%>p0`P&SAW6XB zlPc^)G#CZ&9^=)j5T-k5m&7_K5-%T!VVjIkSgzM%0n`dY=YYNfrK=Tlc)yyr*Tp}~ z*x#wQ*5)28{O8&o+osFqVDc0MLrB2vTsP^vEdJV^bS9v^PcLwu5**W_41N?EkL$zP zkLOqM>MxMX8?C=sAh%7#{v{Wu3GcZ~jv1(%>t$T{a4tUe46>|8xcIh{8xmPr%tNf~ za!^y&{T$oACHve^*%?UXS{@Zu0v_Ogz0NYA(WR^+*iRi^7@HCge4`|gmDgje+0tY& zccQ!=xVfa?i8}I1b9D=iEQo>= z)5&eq;h_!<*-nt2f+EhQ!SR5ba@8R3GbWaE5-1~=n`i4yTb4{O4KrJ+X@T>Ho@+lh zy1PdL3hU%jtmTN^+L<=Zl-=rb_ zq2g#4VVITTsKa4GUXf6jw}^&FjD5f$FdaK2PXwazUQsQzswmS%6D$}Wa1#<9y%dY| zaGKk~I#lBNYs79}7_QTNijv`$vU`r;av<5jO;=q%wTzdXY@lFt#3wU=QLfc z_48_&@jj2WEpS&e@`quG5c4CN0s=c|#@aYdi@sB&B5*GVwycIh( z>Qtk{n*ZFIi=yLYXP{$W0lSB=9JC0_J=6!=Zx|)1=z{T#4_lB=5mH52Yo))3EkI&> zy|B&MOG+u^NjqrSJXh8~qg5t+6YDA6&E}Kq#m(S)C{&n^!id$7$B1|Ch_7lL_@>3G z?k1~wdj5FaeyNqI;O$1_dvMDldsbk=b9idx6w{4FNQT>DVo7zs$g_E!4d!Q~qd`t4 z$M{GqGFYJryf&${j2rq|xO#HdEGwSFl4r`H zw(*S{KPW7*x^SKui**z-@zkLGtha@wobChUPN8!n?U{l>G<1_pawPqE(TBDpH5T5X z$$b5k)K2O!_=quW(&p73MY^y|VJG3ibb}Fg&B^Z?#LZ+i+2T5Rjo(%6<{iYg{h@G| zOZN~GSbN52`qH&ZvVeF<9t$hvc6K!sckX-KPEYTiT$j%Sn+vBrN+Z=}!>xs^$EV=` z=ux6G@;p+av)WYP)WAsrS>32(m3z-oLeicAJ~fTu_3ixQV)&1{@$L2SMqW}(grRR6 zv+mJxRE7svWo!xrwBBu~dRvRI_dfbAw8{$p*u2s_)8 zL@=G_YSGO4V88XmTY=aCURPH^Zn6mWtr5r2$^GFxT2iRWxjwSEzBCmj8CKH>8dL|o%6&tEype(J+dJFeyXx61BCpGhTLh|r zt~E^I9@=uJR(^!aM@xYalr95OMr0%Jo+Csb*1i#{mAx5bM9?`*_BmGe7r=+iZDsLt znd}bve^fiDSCSMLwisEi?#i`_0&EtDp}``q|8COXF)v%XbiH#_Q6Mi%Vy@7iZ_?w6 zmTMz5>!YA>nykMkw0#Hhd73_{u&n@@;1%~RmW|cbj=^@Y_zM}v3pEs`#;Ty7d^8!$ zV@Dff=~+Cn?!4T5C-gppH^H)pzipM?ywJ5p7}!-ufQB&}C@)Xc8#Bpg8n4#JrpX=N zJ9AamzY)TcxmjNNYgGL@+1~A&ae*F>pyZ$2CRtg1MDV(s>@*b~h(9u$xd2$9IZecT zsvqL@p{j2+B0n>uEjfXf)63`mkn?NND`)8%<99a`tf@S>7%RFdio-x9xgAXB<8!WO zRn!h47teq`3boU|l9%Aa+&jI;3j>*-n6#;@xhu=Kd6r`r;oV z0|fyqqqrapx69L%zg8nb*~&x|k+#H%n6IV25uqneiv$58Q&QBWrwqXkc`^N2qS*;B zavcs;-Rt#@^U2jjUdFrjd1w&q(bkGV$-146-w)=)MXnvoIx@IQHdZ=UB}V0XoDPdFsjMktC`#JU<1S`45{U-TdMz3g(!-A#X6M3>;OFAdfcR^H)iU~xkT3~$RWd+24 z2DP0FH&U)z@4X~kKp9-!GoC_Oq*xlyAv%Mw;U06!qYd}wZ2qi$*z)j1>b9~1ER~S^ zQb1=3^7=438^y5!8SCd`sXaQvD6v_Rt>ex5KUKLEq1v9OQEiVcEr$X1Mof0xgGO9) z5hi!UxrB7LWodnhGO$wUVut-_XnVSL7l2sg&IS<}!_hE3B!*ABI{PT@w>lcan$;j5 z<$riaoA}!0JJkicMV(X47wwC&fn)kx$h}-l?#vQkd)uWdU`2|@a@epd>iGucDR)lb zn16hd#5mU+y_jsrqA5!6U1tObqB()I9jYqI<`}KB6Nm1EA|ED?=F535ylNG)TaG0l zJCF9kpVs#|Z||ZBs^^DicbRv)PFl5l(nMveMpG6qQ%jMFJkp+~ft~C*7k=q!S?1?| z05>sson()<3pzdtqxT&izf)FaI8f=3Dyz0^%NSiwAyxX&i#a^&a!IH}-(}Dl|7%d$ z6;N3bI?p44;XQBn8%D1FN`9!~3-sx0BtWjE-I-eK2#wD_ioKj%tU=5UiCoi^y?j<) z>FFumN+d78R#?3+q6wsgHN}JZln0il1~R0Pga~7B1qo3I3*Kgire|@>TBrNO3NYz$ z4qDxCy12R;Tr1ldMU^QN_~Gyd23-%7y=e*_1!7V)*fOyV{gTJ3Xss6bdB3y8?62X~ zaIS8MLk5B*H=Yl#7o%w&UZF9@GmTG^>$CB2aXWt3b-wCQwqsmOvEh)?Q9}0?7VBJ2 zrZdgmS-?Yjd~ODgF&kW6YXc0ltjYQCYNBjWMGxT{=hNZvR^1AW?BBADE9}F@S~{Ig zuJjfHf(utUnyAeCe&s{)J=@33^@4fpU7&}q@%O{&XgpK)zanFRi_UHbaOu;<_4sCZ zKA7qP&UcOB-vGAp@aB97fSAv(bng^i`uX7fa51|bU+BUe-k&kM9$Z~5u(8@1{6QBg zaKV?u*}U)hg22do`swYEsanR_P#dw~Jblg|xJF6eDrZ$-8+*bFG$|(b+(Y7rD9mZ6 zF4Z)R;rq#7+KA?95{Mp( z`^NAJdD6SP!SrIRON4>(&CM_;>XOb2IYW9{IXz$}AjbO0L|7n7U6 zhRQaRlohzJo%h-=3~nPZ-eHS7-Oo*9c6oR87j~Dty8^bWdwDj;+Qsc~FxAB>&oSmV zeW{G)*g&1e=YOf&fKnJ^TfnitED#y*hkB7Huo<+bUxUPOu{gV$od4CAWJcIFbnr=A z67aB};5qirT@0omdgyWjf%8nJXS(R%8Ml2XI*_lN<|3!kzER5CFLM~$pBRLr%Vg7cs;C|rEjex?NxUyKGfihz^ay^S^kx9mt0%j#E#qu5&=%1{V|Fw7&_^@^t@z^* zds;IFsQVUCRKB?wpAY5=S8VM@ZR2_X+Uer_?o1odCQ!-o&Ag*!EgfMSeK<=LV*lWQ zuKZ%U7+f&b)-^*1b~79-h9G>N&ll%clRF`T3cHG1##%5q>Ro^Z7&y6w3qbWqSNStN zn;92$8Jk(zFz#}U(sZH2(L)kgu5%(k7r`#3gLnGY5|HdCR|63DKyZ_5+RP1D-nngT z<0oxMheltC-Yu*oz0^s--N@jF@2l}zK*uhJ!&_Zy?-wbbj$}a;5v4&B!-;@*Y@aJOym*v5IAe#+mLhEXy@!|F~1fY18Wi zk}@33E*F2@=u%({?g41n`K2O$gcy8l-!wu=-i$|u63(E7dz$2c{PRr@uGXV+0ijL5c%;RzlIPw*D%s)d4U z<%IWEMNjDHgcdw=O`WiA8?#E=7!}}beF3i3w}gGzE8h~;_p9#V09}7^FBl6ftO+4l zg2_*oXh)FH6348^!ZQ~oCm*+2vO)lL_ui{~m626om1%~y+kp?_P~aTZPzw*sqjD}Z zSGKF+mNHVIIn*U9+l$Uh6m78#CA0`)f{>0)NAU*Eo>d{L38S+AnrVmKhin&y16iG> zpzNj|$iiM4p!2E?MP@hDwL#}#BQLQa_l5RoGcvxd50C3@S4>a?z5zj^aIvg>1=2;! zC+8aD*ceULV97K8C(KA67CrE|@pwsAR_ zEyg$Rhc}@8*Yh})Lopk5zF;=s0aNPbgsGzSwhoPY!@6f+maQW2wTZsI0b>t!iKeP_ ziNEHb$jEv?#ZAx`V%9uddN8M5WLqDSr?SONCRHOqI@_dsxQe0xjWC~MtT1okEV&0P zIFGlt>*bf@uJ)0M2a2;QM@snB;#;~*;th{OuYU6)_$@!BFvf#_=W|If+^zkvE~=iq zEqgy+-YD%$^~DNo zLf>n-kbq{PvF5N>Oi7+fWLyph7qvM8Hu<>6Jb}vtDe!aEJ(b`4#+&zptGnT>!^a+Y z9TqroS{u}UmDfuA+A=1i(WTN8Cqm0NMnjc-N}S#?t_R~AHoyGIlk3%g{co@q&8|0| z3#inJ^76ZDj;)?sZ|n`Z8&r)g?L#90ar%u74E1IBZQ{cvHp^bGG!xczXDo_Pimy7z(Nh?R>+&o6huw6nR1A!bE9;CV@xr~PJWL; zyWlk1{HQ87NC!(Sd%R>Em9*NyA;iaGnJXG;KTYMc+1Q~%!(G(db^FPUGUQVh1erViYy%UU&p6ihfF=9)hb!7q%Yfa`Q@x5 zcR!>_*cNk>vQTj>Qe7`!%Yu#aikumXp&mS8eJkx8WZMax!cv6&LXvD+v>a%^^p3t> zpQ@b&tmomobp8kw96&tJ;@w4>W|Qp|mON7?ikZ!!Q4b!48(r@IRg2D0fY6r93ddnY22O?1zVdx}>QEM>;D|AiM_!fUj?z#}0P8yaa{}6pzXJ$cR zc{#_;k3$yMe#f?1A?xSGN?(^Pp2h+SguD-5?dX+E&iu-)grg;6pG7q04T|n|tP{v} zTbTnExi|&0QVKBymYMekIi5}16G2NbXXTke3ATZDmE&Xy+lIHTcUzSdRNunm(v_7 z7o4T(CW)&a1&F$($<1-xVDY$UU`NC*e4ZZS4Wkj2dal^81W=?=nH7e42SE@_zEsGo z^?EGc1+x#Yvm9HRCFs~xujB`Yd9(HB%0O;Z%+3xnk+;Un9K5AeyZY;@k_wFsguz-4uwK7EdbPWM&ahH6G;Ug7A- z-vF!Hpky_lC@sSFEBmTAIwb`Njq}ISQAe3Y#Ov|GqIlvN-X-f~(J~JUzl*nL$a5bP z*5dVBS>IN{U`UBz$12)$JEmoui=m9ME*MJNJJy01w^RO&OSfOeC_*=OFKWt}LWgrJmR2smdZoR)N#fOiB@BC;@l zr0k4NIbhL0xc~xO`a@Q9w-b?^RZALVS^ABUs_|AL$T|@^v*Dz0Lt^*BFmr}SSa*kCC`tOJwn-(LLK#!u^| zw3SulQ4s`q7T4jwm%>dtygFHn;nT#rIp{3MqdIEJy{{a zeFbRdXy_8VDEs&FqSa?v`X$+x+*O5p(#i$mWgwzBmDuR0>sIK~ODiuSDj}J27C9C) zS_gY#!EpLVxJ*+k)?^sGdjXqXXp5m`GXMe_R&evprnrr=1#jxolr88PO1+Rh z(SR%KC&wz0w#pN#rq?WeUO)%GsI&N^Lq7CneK%^927}}ojohqCb#z2c zhk5gqDJUvm-%>(-xB`E|1xPw7AwI{drf|g6`{R5Uh%9y1hxh=~Abf ztmZSsXEGkg#Thg9D&+~=qw+)`D5qU_FPf=ruC>&7JJI2=b`Tm-s?dR6#4RGW1Z%Ng zbUhGZuqP8O6>Np7M#Oel*;E9Xk;~%}F-Q@PQBi=1+qOBTPwwv@ySazP#P~#jFRZt# z!P8UPRG*oy50tXBhKklnCZe<&vI*z1{Lp4kf4tfxrD0DlgGzs)o3?U0*JOLXS%WU2 zwAS*biByneu_qO(-KOhipE;JaTd;%o>E`&<0s`AJ9+S8sBV#pPE((BRH(GDYu5JV= zctdY)ZGo?@r$ae2FLVQ26X&!}B7-C1FiGdXjfi+oazv(r-~$HD$JWK=2+G2q68R@nPLD&+j7!SLAX9xisI!rj<#C zv)usg8>|b1P_rFNby`N0ruey%^KnXdC7iUHi;?g7zDq4$#u)BvFIn^mRLVVbQrd|KRo9CxS;qg3EZsdNG=1m z=p)v1Qad50Au)lnyEAo7+OQmUT{YE=VwXeRq^x_r65^Ig&%|8~XuCURiRi4O=!t2^ zs|0O)`vfo(BN;aJ&|}t141Jue)eQ5r^EjX$PsK-T@pga6j?2SeMYIZO=P1alo}UL4 zkT)gxps?Ai=0@r<6cKCp-W0J~jSB)Jj*J)}x!L46I(YiLPE_=_<&imgtbvC6siwZc zeZZ%TYthflmLzufY zB#JdF;FnwLMeC7PV3+Svi+g1V7SNo%@k+TPeO=(5%GQL8t`*i7`VFutg#IYaFsMTa z_O-G8zhLgC1A%Iy?#KNwx#~%}T-mN|tkKz&hsp!zS{2RRuS3?3TBqp^oC{$gPY0AN8AnpVJCI8C}B3UVGov}os3o5W(1 zTs0vle`@7m;5Imz$-Fz>a)-=pvt?&MJML@s@_jq>^6nA)8`yQ#u&}x=+Y+v;>>)_b zW%A~Y%((z?pWNT?lS6GCgnY@z=;)w$gvn}f$PuCXH4KamJdMH^T7k8?7*I;qtym6n z2*9c?=S$Jdwkv?b=n_)>X$vGzL)EV6{l zm>tojv>t%tvqRN`Tm+aoxuZw8i)z~-HavmE2yD23899>KGJO-Yu7lE}2v$Nm95zW| zTbE|PMqZWu>Hwa7=B8I+DvOJ$^tD!471+iqf8-UyhOU6H4V3b2*7+}ey4xQ2$;#5a zFE>xU8e~~4HpxUw$FGzP7Nf~A|UEKbxo}5o03|i&WPIFe! z^e=~ltNCT^1fc6J(<~`-kScJphOQMjKh^T_NUs+Fy=lbMV^Xwvk!z~uO$PZ$q9zLn z=L(l**R~(!T>%9Nsrmv-X$HpU+=Dhnu>#xIR&4^wRM@r<75&YR%XN*tSe|j@I1`#R zp5}=-r*#{+s}Ku(E@q6*oKNmFyOzR&W?ugzul=Jcy5>_(;q&(d|GUiFUlMeU3c}Fn zV@miSzJo0NcF9{B$s6nNP@oc>v6Y(;1|+auyMFzZwy&8yZyU3#;qaCb?D40ecyocr zSQN66Rd;V-vH2iS`7@yZx0BhpD7ZqnqeyHto9)?_Yg~>mhKr(=l;ZkmmZFXMpGD+I zOP-<~L?XEyZ)+$VT1>ua@>7MYsYDMG7cbpR_tLh0=-X^%pX#2OAz{FQK;Uu%t-u&O zCe;YHNstsPmwW@^yXYuA-h#%5C$0%cZd3`Yx_1}x5@7tjF2*-`L(tk=Dk%aIra}}Y z3;Rag@X!bcjOs11o0Hi58_`B2Pg0S!CZuU9^#+A@7?w{VbOWc>pwNme)^UlKkuV+K zl6NS?Sj*P+`O4?`)mm&NqMbQ~1vpwWr>I8c=Eky{hpS zxtYy}%CtLSghey6Dm01$%px$z)ehReQ$ucy_J}1k?C1 z01zzBr^CVgZaNf&&QDM(}^deLPK zFSo0UMZ_6GW0?iCo%(hf`i zqm;)`n(7yM(r4-FhYow|AZo(xM*JBAg&Z_byBvK&;zQ6%_Atavbb-n6L%`)Q z=eb{M$U(P@#X9#lX^zQLjHS-h9(u7rCD(=6VUZ~)(a#gxxkql1YEufR<9qa&)KwSm)ls12emn@x=;v9bwtLCI;VyP8x*( zSw_VgVh{~{iaeKp1e;4c1j*nJk+Snd>e{=YkjeW2f;93U>{?utSGDlRwYecehCE(W z=KLX3RUwa}leRCurN{>MmoB+kG|A#+Q#Oe53L(SqyA51Sx-D{gdPuxJmv{@xAdz=R z6dQ^tuJzOLiIUHbdm9Ol#$!DM6Nx6z<##P^Ed&bzOnAbgATCJ_rB%y0--<%+F~90= zJIAo2tkn}4+X^!(Ba#)OeS1@3=D1da40JV~*~E5PxGv;uw;E{kX>ZQv^H}A;bp)4# zYdi`sSZb(oh$F;gefR{a=@!t67sQTSE$}(uo`cg3x zMFA@&PM4c!Nzr@7_kwfSLVI1YBw83$g|f({+L-O#D`W(|0!)!_ipT zkX0OFbIZ5x=a$jgkwhGT{cGlz)5)!>r;;!Pm;;_-AgjoSI#@g0W?WB*_k}9b?#^IJ z+zV=hlJV3RB{>}bI>!j#^+V%)a`S#TovB)T)CUE|@V%;8RQ-F?_!E1k$fFc$13-tl zo}4Xach}bw74nF~JUcLM2lMGf-e#u0G2b|w4u==2c1-oHx!7Ro?!0izXpJ$Ai}CDs zcr#NVYJF>V(aBJIL{v1w)!rAjZoIqsYw>OfqXx?EF7?GczSu(5X05)QW1QV7Tj$gU zfKYye4kq3mPxX4LeYu@=8tWsl^VAp{J82`D>pRADIKCN8rsuTM-?rf#X-P8ZpSlaGa_*jud_Fj_en?M*;!phT7;2XVn}KacdD@vTa9+~n`BzB#A!;ni0OSW`_9yFaSBC|LE{$2kU#^FZ(Gs#FO@O{S@qMG%EjEuNQW z0L?IKq$-q1Kk>^?(w$@$x5%2hO}{0w+W9V)k89okQ<5=v<=gQz*&TUs0SjAHX0W)H zr)+CNy(~c)yHGA5+oc!Q8&nif21N=qYgF*cyp;;fA#;QAPge39lvF*={YcE!xrvv| zyESD7xz65XGOxO6zbXGni~RUyOP|Pb?S;C%#%nvhi{d=C<5^xuQ6qUsgB6se#VuM7 zz+>dT1aL=-2Kni03us+H*Gw+vGg5b_?*yeyR$&xC8EZOx2Xe>sqXO;7D*Z9=&A9xh zvO~+SN1LjbOXsoSkCIR<<+0&M$fZo>upCJEZ6eIT;GrvmBgg-&mbzXv{rSm z0n3&38n9fkJX{!{(6_%%o|HvL*o?xss4=d+MkGF~vQp$^xBo-rZk+N02Dgu9pWVjm zj8=*W%R1Vj75XaKfrC;wF01%lxJB6Z*Q&U4mP)4pazFqQc_qXGxClI|sdcFecM;D$Y zH2{GGURI#hMC*=Hq{4~VyCFELRjm%YKQ7aqa)cGoTDxK1uw(g{td2z_D>*i>fFyoG zY7PGp#xXHx8K*T(HX?vo*O?>x5xMCbCrG2;8nf z_9D-<$XKP0;J_!kRjeb67fvAHZly@VBMiwS3{u^dYLeMtwHN{P4HNP6AiY2T6pv!j z+7czTYHL7Q;xT3`toOsG-Qh=74x|Uq!rrmKvt%n`#LYvJ{UK{NfQJeyfLM0(H8;pI zbJ8C!lKc3$Iphng*<}6Fv6E|c38AW=Fuy?Iz=RV;?(?Zn)fE;GuI#$2$s(f~L(w}> z7*UDkMDzpbqsMZyyNQSSM@Ll^Y#9HbaWEZ`C)5HFL-HC5QWk6y4DeKqoqGYyEs7Z@ z+kKiTf!0UD5h;k(L!{}odz)RiCd-OKg8DCEp4wEG@<^q%v136k=>QH$L=@BF=7&E^ zLwlH4%6Jz)CCYF$cGKlBtYUrN(6eMFIsD#X;YRa0YGDWX^LdfW1>XJQX%s5B@nXFAmAbxDNUFzSr&Cq{cDDY1%)MK8+c>f){LKH6mw5`WAi4TUwq-}% zw&iUpNhjxlOR*T66It}=lC=BRe<*+?3LtTz?VfMWT4#3JB7j1nP^f$LLVH;^OAx55 z!(phk4m11fe#{^_$qtLuuOel&LFd1=r5dKo8m&@Lj!$gLCKX353Lt&YbOAQktOY@> zA<%ss<=w(FTN4ihbHcdEn*7oUs`_OMyvE~M2eS?n!-H5_1>UpY5x~g+eNa&jvXS8T zw#1oBTwE0T-W-BUijUW`|NA&KR#srd)eWSYMa5E;TvrOc<>YFrH%5gTH`=OtFX~0S zpLOwSvn_UvtK_2DLWnB(23#Y(s@K)`w(2l)kcUlEnbp3uwI-v}c1E}`(!TX946!kd zCkd!Bh4BJ~J|5a;Euw;ixSeId`zpxb8X!p!BuQ~ssJ9YAft$7&n@x)&WBNrX)oFy7 z;6@X|2sYen2wm{Wio+RirRH{24!eiMW80sIuQELfb z6G5RP{2o8%39SpplRmGy&K9N;4!lb#FX7-yfxHXX&1%S?WN*vIc^iAT? zi65WL;j*E|l_#S^!Nv?u_~Eo(m)$?~+A4jxSDStFe;Qt@LjZbDp#{O>BWg#*^cCR8qeZSJ3P6Kg`68MKiYJbC z1f@qPX22PvO=hYWQNB}{kEeC*W%%aQ~QJAyyIXT@?U zRiRO&E4(7^0Og>ouA-5+W?>?>t}h-1x<#drSdpNA(Uo|o5EH5pls7d~M|v<7j1JWy z(p3!6(mhn#ZZog7Uf7|9ajW*3Kxz(1HTY6BR1w)@$MjX zg4FxIS>2!4J5-Q(w0JwzPzq}MbycZSzqO9&IAC8mh1zJMtX1A<`5Mp?^!yP~S+1=a zsR=KNBgi>Ac?O;#bDcQ%z6lxHFhj~`m}72-rpdg!6<89+yx$2V3sb$Yx|6bU1n-MM zM=IBQQDIjLUc$j+FS3^E^xk{S`o8TCkmfp(aN9a}hi!(enad-XuCaWdw;F}YOveU$ zpuWm1j}2=^?Tu*m?kcjg+R61+1<4ue3Pk3lS2QdlV<&1sm6IVzW4#H zC_!3LrvQ&7q`+@l3Tx;{3#AN8j9`g`GH&5++4N*aUG?;WDvV){CkwfI z4o!ynY(g1%wT0y3e$nA53EIqKg`E$oWJ$;lrCmmgG)=IxPF`%8rTg|X{1nDE=4Np%{pS@hy%+v#U1I1X=6XgM21UJhIjqMc0v9 za#I*11Y^*`SRLLU>20gtulLpa@2mZR;eS(a@AvO7>HmiCKSN$R$~N|h z!g29kcR2%HPM&-@C;NSM4^23}L-Cw?Yrdm~GbAzjO$vX3@=P;JV_$K_JYJ1Q8;E+pB1+&ZB2Of zzsw{YBm~59w*R+5YLavlIv|wKETjP*rh+#d=Ln6)2tr$2@!ZoDBLSst=C1P6xbuimfZ^+BYlAJ{ z^2Q}BV%`vjmP4tefiN^fe!fBnLT+ar78woTN_k*SS~m@+u6R=|EbPY&LbbUM{6fUA z)n5iKhM;j}XzwtwIv0yjHa^(oLstf2Xe{=Rjm355-G02jw$xtGj<%;I8V0A{VmZIL z(S~8g&{xsnAWq9oN&oXu-ma?krwXdhJ)3DiNJ(nwcz_y^=Q%WuT>U7|DP8}ncWnG}V~Q_|@a; z@bI3OqN(?vcT}u5M3W3W-`c{P5h80yp6aX)LB#DQddm_T=;MK*Uf>FR^;(GC@c_^_ z-5##431EgEzlD16H1Wmqtvx$FKJsg-z5V)N2y7CCRvBa;_0Tq&GlC?-Xka*#O`-R@XtHQtT(tsVoHM@zqgY$mwRBXh-3O)h z7oB`h_f1moo?ad+7|Le)X-s*}!!gGo*Y(uG0qeCU5dsW>7qfHTIPxp{GZg^qts)kJ z74HtU%lsYv(iq~IEU9I3PRxmUTg{ZJCavYrGpfDkbe(@Fg9xiNq9zbsFf!$szER3j z6p97?{1qun&I|fzhh`^N4?7{kj&IB%9KdXV#%3*M$7F;p%VwhAh=K>3Gl!a56q1Y96x&3{WHdMBzTV05N3tv2m^xWAb1W)ebrxHT@_@_ z^?etZ<`O#^H|c!0F3pA^hH06SkqI%(3=zFf_#dNs4vw`qknC?E_R$v7rkwOhdP$_7 zj6;FFRL0sL9{@=}w!cMSFATyGc4&&_GY~4P;CX(2X{hCD7@c|Z+cQ=O)=p2Mt{9pVzwPT$~;hmE$q(=Mg5ITfS8r1MI+7|Fd`Tm=8H zC`I=Zp#2zQLk7koz8LAt=*My5WS{)J+Wc77)>t9^#(CsR7sd^dFByu%d1>_%MW=&l z-z4%y)*WElfykFu0e}D(5qCm&)5tsL==Ti&o*4Z6vD3SMQO}QueYGwp-w)*uY?Vgq zN2ZU5R1TTfYus3Do|c#)0|j8GpvWYo|2D>2jEQ}UTQ|+y#y-X28`v)ga1bLL7^7Hh zn3Yg~RFvq&THlD1L|SGmg>{W`@-WGeFm2+@p|0SrOsMCp-Q!!C(!l-|n@wr2wKF9| z^)bJe%~6=&gvbX#P2R$nAU{R%sEgy!A&$Ojac4risrTpg4oJd?1$|g4UlrFij-heg zr`4ufE0a4J-!qBac@Tx9R&WcRsEP@V$###B{lxqUd!+~p3Gj4DFZ3|V@$aN4Ws_A# zeEfUNH5D9unS(JC_6UJ1v+bULo_9O4U%^vi@c*o%%EsTh}^f;G}n+cggc(=V(bD`@f%h|CfC^P zC37va1G5q|t5L7xWA#7bNik0}2QK#kLX;YZrZRs6V-fAevAHOEZ!8iUW8Yln+<5PL zcSRyOq-L}w&QVB@^jcHCp&GV3BVbqC9NFNcx0OB$-^UD2@WV}cwp%&{tcoRqBrJ^n z_8hN>t?O~dMS*klJGOeqjUbP4g)Qr`fzyPs6Q?<^w(Ae9Z!@c{ZecSlcpf{qQ1E=5 z#OAuRy|IWY65}Q8sXI_FMT{k;bqB^GmXahYH9|L8bhMeGO3~jV{CnDyErml>48a6W zd_{hwzvDwqz>=*!R9g-LJ5*>aGvA(+>sQ1Ks)vP;M&cJ&lFStUfBIUztOsa{o+y%- zIO#Y*-^QfTgBI~_l393nW_R54_FSga@=?&C+f82X*v*u{nXby++i3g!!^-^E$IPmz zczfFu%!*_&Vl2ULfz?Grfb|f|B}N5m)T~H}A`W_oBga83o`i+I0h_G*=UMK3E5U4_ z@a+sU;neT*ef*@SQJ+bN`1iO_BT#ZIh@_#Oi3h%0K=N+2elr_T1|h0%AN-j?bjv?! zxyvB9>K`z(We_gq@bYjxO5-B$*J|@)vRz+7ll0^MP(QvRJW2s7lNgsI8A9w7>!hfa z4csiZvcPwC1aGpAy1v~ZG%eE^)sNwC} z#|O>zWI-ZywkR>zxF2J0eT&D!whL@BP7$k2&539|z95Y?Ho6)`$*G$ad(>H>$1*ea zz!=5Bp#Je#4rYqTwZ>Ow(u0}3hUyfY$Nvnge6^5n!4~e}CrkzOLK-C$+l4fX$_W;Q z(wu8~C;^FJX(5XY7QH}UV->MRcr0Eejmk&z>Tq^dD$gJk`=6A`Gf+;PSb|paq_|Gx z$Cw~HUS>4#+Gds9Wk`k0AT?fl^iDxMJaU7-T5m`KS@ddj#-Yj!kvf{aMv_-R4c?qu z)BMe;Rh~b4libiACfv;kmV=XPX81h6n3V-=Ot68J*Z6Qt ze@d}7l;x@wElRPrmHQ@>my@=1RsSrP_2S3#20D_zDpywHIgBH0Y01z{$)mS!)6tLb z5Uw>6`J}6Er-M}IT!}+z6Nr80jh7r-I`QG>h7h(;*DQ935w@xURTHYxlH#Sr08!qY z3(+a@jUFiXh$T90<}NyMm~7I8ctR3$(udP@8FCMq8>cz@t0;{4^ewJ6T_94w=tqWj z?i(%h&Y@p0Yc#};Erkr|umAz0>44?BuMkaT@$QYl7SaUrQO;O;6(R(Yr5UoTYm`z2 zW^DF-8uH>2QI(AX7@3`#%2ZP4H98YUeq!IMwym4=H@xc%-B+7o)ESr3BVoJ?Bd#rC z+KF#;*}f#QaDYS;w4R+rU5OXp%vAsUYx|JPPs>ep_v83PN8X zf(v-FxovvlY9~&dY`ZWGOlO|T$rf^6gMwlWna`aj<3iQYII-^Y zYPUZu9**C?Z%Q*kBu?g*>0eLPuH-I`){P=!b$uTxo=MbX4dUN19-~YNz{vw#C^cch zOxo=`UD!)rAB^XV&m-7DnSCKxyA9A5Kokfn3z+W8rfT?$7DImOidztkfaO-(p=0bn6J5rDAzCv zjd3Ic5F#xt3XCnuM_de)Ihln0kWV6U(b!O(K#89u5gr)zqVLSHq6r?H^m@FS2jlA) z5kox!LnkzJg%*d^Gn81lsjKZP^O8oM7EkB+gqb6v0ZWv1FW)l_LnQRP)M=n~5vsW- zd5(->N&M0-;63?Xyk(JZejnas7YTl$iHGV>%SoMBv%g`RWwS>3hTH{yVbNb#c;`%OX4GuEJ=-4TqW#|jz#iBVk}qR z8=GJ?B{3>PV}iVLXM>PIY*k_Pu@xXOOLG0Oh?gXh$;F#WG8K+&O_IDPtl^A^gakdY zNwQed&oQSbelLY3$AT1z)Iiz@XG0_;GznTGEJVLnyY*gGQe1~`aL!n zJ`DZFv5~Ug-tWqLmk5p*Dh3p0L=t42f64ceUY6Qb7kMnYa;Z^ea#t$otmtwOyH4i{ zD^l-L)0<{!=ZfDnDtJ6i4j<~r*Olxxq#CC_wo&G4tDG#xlx*@Dgl;w}bc1ec%UeA{ z?I4&sUmORi3O~emZi6#M0wjLFX%A*wnWUL!?m|^YFki`n-f2o&YZj{_dnW19S!75& zaH~M}x!%1ZR8c++mM-Ub8m@6GJQbtk122_$)Dvcze@5LYmEOUosv(LQO{Is=Tyjwo zt5Zw?#88_kFtk<0Ea+GD^6D(TbSggx-y)q#5`Fz3_$TA{=={D}1Hy*c-0y{_WmrbZ zOt#n2G6=8lv?%ZD?RvF)wldTaGAZ%@0VgG$Ht2U4ab#^6&1tNPf*B4kOj2SHS=r+u z21++3%?fC;it2(#7W$ow}52?4S)WTfXHkgFtT zm;tf)X04CSNv8w97~}O!$(*#M0iD{IjF535T1Gx~EmLsv!E>MaYl};|=vypk4O!Y> zSafh8Kspz*hUW6IlI$hLRph}qhZ4>iPV&%T67ZeGgwsvA+I=|gT(VN#wA&;RevKr2 zX?xpV+!BeCad%mU3H28<#gzw+#R#QKXGWc)lEKQF2|i*D-W)L}dSlEX*W(ly_Z(@? zN~B7a$o!F8Y9Z+y8@$~ho)wkoPx4r`r9ngV$JJkdepO9yNt5HOd>z5pU-V4Q$%=t< zlH15cTkU?aBj{emyIJyv81r2_pWzUpx$XJCT!bODrwCP>AF8$KHGjq2A#bG2WDzuEakbh$|1+Q^-qUJZnfiFVVshWRt9Snp zP6N--+{=KH+*QGR?fmrroA9N)kxkBgqlsg4S% ze4}p@t<;@=OU=jzeLGNq8wDEyC4s55|T+myqXKuHi~I zOxw9402Dgymp-In@#|kMu5o6#@kAYs=5{kGh$%iUy4Mg0B1JSm!o)eG#wf(Veq*IC0Qy6ROj8*2iBZ?S>63Ot&fl+p^w9ggj0(^>EFj% zXF&|2-i01KkF$F7^iXYCZ8~%;5|AA?@{=ISiwFIZdi@723Dst`BtSws$${dc|M$q- zmj@VZY*#Fyh;S64?g<2f`m23Ajdmycm|?V&^UX7z1WJiK(%*;i7y8gNuDwI_x<^G- zV2J1ks52e?ATIu0=mFC^^bue~AW?Ll(f=o*GzXOOQYZ>vCt$z2FAocDUQ>RHSi{#p zl}kmyxKZty3$o?z(x?PRec{ad90L+Vv^3pL*&ma_n6J&4^M9SApE7S#Jyr*H!F%LF z-v~}d_(qb9(!4~L<8%0<&hDw~>Sc8FZqn@kQQH@=hrNNmfR616ho{2r2}hq` z?*0Dp>SlI*@q)3LcQyYsEtc~aj3wS;c{@4RcN)|WO})>P*;3zSP(L!UG#LycgLwkc zf%-fsmo#LT6h68E@-sU=B&9zA2Gk6!1YzO1Gc@-gAD}uRo&NEuT;IZ5+GhonnTr<% zPo1Et`^+q23~x3lSz z2szjHv(Q**wLi2KqJ7G<`rWMbE@~2qs@E_!E`B)FeIpPa_p~}Zj94d+ycM8^Q_-RX z!+UL%d~-C|$Ak5%5S3SjD&%Le_w8714$eykF^#PUe$kaW=c1o-SweYtu`KhJ$X5yGT2% z7r=VUIa^Q967)d`9IfTOg%yw_mG5&5KAUCv_{4QZ-u3OnYO4~R@6oxqzu8K7>g_;L z<0Q)r_49)~O3~G4PP>hw*k&Ppav#h3c(CfUaUP-BVmjN#ur{DZd>t`=9GzWD;(8^R zp9NGPe<&x_t~(O^!a@ZRejN?olQ_}EGAU6<1PU+Qt+wr=dd?;Bp4b;WISFEYdPV@& zD(iNCKxaP-0ft0wPMo9CY$R{f%!Ek`+(gKzpQm!1D*?mjH&`2LtWdg8eoUF2q^gg5 z2H?%EzTcJmy?bO8%eNKen>PWzot=v$IEjqpnKtPmf~Isv9GtGNh1w%pXk-OGg>J#JGa<^#1QT*%c9iKxtcsPFGLB_Hijx0=L3?5*k7LRWS=)gVI3gt!tx$R=xX zBguAg;5TF1wfFD{9KvotNs}E27PvnP&8w4+zPr!nS3GY zm7Dsk<)QX*!u25OL4m_z3oV&gCCSADRm3@kiWe&M*$V~6N%2bAMX4b7?m+rF?p&Xi zAQMlESRPUnI9PuwKalo^FUk)|`-1`9dZR2ycfHxvzgo4-O<87j0)_OL7%H^L%8n=` z3gb+8y+w#ZOLB0pv9KM(SKEcvs!Z8(he!5 zx8CId>LiXa)Wi_Z!{F(Dlj#i%lW;Mv>UBl`wv%~4lz1z84;IzmhI=5P4{UmDJ^E~j zhX~CG>CW{NRy)O^GYjlvxvX!?yVd6IrnMDW4I**WGl)2V8Y1?JAWXe_v;GV(>1n+; zh~gF{ij%?O?xC(Xm*r|*+Fmevm84VeRHcB*W#$IFy`erDYHTCGhax$otFQ(`l{Tg% z23t_0>2~q}IzQpT4AaY<#7$AbkC_y}y5L_)^&RDse zZrlMLOis02V(WbBfsd-QP!I|D)a34LA zxgC>_0)(>6*oC$~R$AB6f*`>Wid4n+y6@L=Ej1WeRu-|Zx;;Z5`-Hw zweySh@2bwEzZ}a|)Q_xqm+KV|f zOfe!k5+uN(yQ{xfO>os^y}N(EdV=;AIurz8yjH~#ngOZs2Xs-qi7yvzB;#q?I@ z=7a~C-L@u1abc$0<0H!XW`^ws-ZcQMTBT93^B@B){5$=qxlj5K%><9}y|a&3S6`Hg zWgr6Yp3SLe{O>HT4$S)Bg{Fxtrf6v*U2HK>fPI>gp~C+fIwwI`EG*&bcqspB4oYDh zq+jb)F%c0<&QX7PX?_;Xq5^=YAL^+r-3?!Xk9{TQIlfQXrtZ+SRWh`Y_cm4d#TTX5-rpuR%O_}NZB_n|^ z&Hs4G$b?0qnVj6(p}8dLY}nHqwWFK8rR^HSniN z6Voxm8bn{|4IQc4MW}26f4-{0++d6!LJ~WbRbWsPjiTEKvFLu6tL=KeWxC&f!MH@L z1Y$F92EkK{>Hs`xzHPtLzoJxOM}X!+wa{o+DN@#`3T3gF5zAA-5BnA7GP(AAjOzNN zL1HM{As==|kU_}FKZp`=(ts3-vYLghj@UPKWf9BoZoS-k&uK>0!qov9aCXj9v_jzB zJ(%N$ARbVBAA5J3dSC9F&LH{|v%Jceo7Llrn;}kDI|}>Oa(XPL5!Vz82s$Hk(appU zev{plU~}H>A?UJP?H@|TZ5WpxoL2MLOw(K5~4n zWh2m_p8~xVF7dNwzCV?}w?PG8mC52}9p)|j$+;~W))>*7QhYWJZxNO_H#|M=5A~zq z?ZbRK&k+C06YpnRJVe|5%EF3ymIvELQ;5X)>=KI{z^6klcSTsu6COOx0uI3ET5VS% znizlB%EVVJGC>h(QTx_3ObTnE8f5RzqsG9|1fRS?_*PC3tZm8+{yn4$z-o8*a9;0v zdqx*FM*-CBE3){HOqoGva`&Skh>CwJKl{y6m*w`JUt#oPg2#q(#ccX>0M8fn6M@^M zmzgD3cLLsNu_t!&@-+`4h%xD%x3qHR?YaYzenC3hR$#>wv2$tk!kSz9ifVj4oUxlkXuYP`l0f#L zYh9PC46zLBZp)Y)p!&}Ky1t{>->)H297p9a>Z6hG}7a;XAyv5QML8z$%%p(D z5jx#C^r~IW3*5+zKSt`377G^9W`0+0>H`+PU9`d^4hHxK{j=YQgzP0+Q-#?ODTK6Z zDn^X)^CeMB@%nvR*R|G zK2BNPi~encbh8l;dYo&nT1?sn6xNpb?GL)Jt2nedP1}e<)f&Sap)tL?4H?AkKN9g1 zq;Ax^YR^R?P2_oMGj(C!wyM@a10*;*`F59&!B>!m0yK2Uq|l2>7YB;UH>?8Mji1IN>}@AJ>;! zWXz_-`>*Qp(Pj=!Ei}TXg6gL2OpZ~PksmfqxKY;UC-gH&RZzHY-6q4#q@P)JhQ?h| zZ%;epl|T~-Jvrbtp%nQ@wc&P7>Epor+mR^{-TO--?=SgasfJz}L2T?tTJ&cY@#7Zy zh_6rTUy3nE#uf7uO`1oh-tad@W#N=O_jID!_G(paADUb*fjjyrvXTkVW}D8#xPmN= zr7V(#FEePXgj#?r1qumUS+_)c70~)o_v0z(g1@T0ip*R@L`@!_l%+vc?rxaIMu%)5 zNlFG^>oo2RMFt5Xvq%v9*klO;t&w9`(cd%0cyv{5WfXLV=PN0j#x5LWtq>woT*bj= zvF%{#es^d~W;7E&LJNn|NX{KU7$dSIu9~%>?d=!@c1vxyt95nUE4WNyPq!-2+5>gS z>-!;Fr(Tp@fNyQik_}IG^^bD9pt7MUI4F-a1-JXtrp>fGJ5EfDVEQ}0`A6GDX8&--&BB5SC2W{DZ)gmk*A_xo=>W{lZvfDDXr zYhc6zPK1p!aSC=g`HMWyu?R#8$ru+f)mBJ4No2~bl{g;miyQ@3-pA|H4-j#1X7b@{#|I8c>)OGQcRQV&eSsYI$#OY4H3cAOCkZ_S|JcDk z9}ER}wA5npJ=`9*lO6EM%j!pYx?BDI+_&%KId&{{e}}%HeTx<}RvmI1K?hRgHqsb6 za$!?}&aV&kZeM;dB^YG3E6^COy38skF*uLSOf!ZaEhA0clfyOCe;lxQLw*-xj7eKNVaL@;!jL2e#!Ql<}ubMlZ-R88TuV(dnT!=gFHej42@c|Po_UgdTEo#_uw_2AFW5jD=xVu`Rb(zK08bmf%D=XA7ENy^`tckfc zNRQBNR~iP{+icc;&>|JzGpM?^xLfV0=K0Kb+!k(=*;x={HfQH4B+#hVtZ%*N3&RHSb! zN(mU{Lz2D^@S~#9rci+r5~OWd4&SYQSeBqyBn-U+pb+Z3P%1filXfO z`cTui0{*~qyys6~*4U5yycdGo)}Ez+Z%h8ahA`dV_w}~q03%=ET?$_VBL@quXH`9JcJ-lTzBTo~`DH2@U?qo2nx{RBeS_|1 zIrYE!G*3UD+TX=Lb%5Q|(O31l?Eb;$Sgn83-BT8Jwdy7t_?t3o;~)MFuG8acyJp6O zz5HJ=VRPc)h+k?LJlifIhpT2T7T&{HgLs%{g?y zKGH|8w*&M?9opB`_wUsm{oon>Q-@7@itztkV3GgJLPgy_bPG!uk^jp$geQXTrT@?k z_+Ibs%8Ql?rT=Q482qOe*F%3af&?TW{>7i*du7u5{(LiZJnd(_zwi&0D=kq~@6YNj zK>zGtKVQ%s54lK#5dXMs*QNbDl`ltp2u5T?Y7X9#R{rIgaUE&x> z93uQ@-rsDbER2WXbFcR0WcSF!{IpFVEGW9!RrRhqRDa_FWcn;ltjn_;)1m4x^f%(7 z3JqkuCL#+8)Cjc_9sPn;BW|GXet%f)A5MWSxBpNLfvsppWtaaPf#dW4BRTxDm`5;f z&3bwg{)R@-jc&JcMFsdX6uoOe)Dn!Xm{|F}+^!p2jav!~(z&Bf)t#_%d-cv@@RwqG zNSL#jp8GbY$F8a6tZ_%fs3Lk&+A4ej)aEp99h#S&JmWnp{%VTf)u!AX=7$IN#J@EC z1W%a@zio>uI_>}K<#_0BN1kJz!744Et~Q(fdA<8kZe$NBi72I&^sT(-1v%y$*#S(V z)=8pH;iNKS??B#|+4>t1i=|%q*WKp0F4wnZwPhj;sO?K=Fk~4UlU%$y526SxVv`ZfXIeQ5+ZD2d36X5m4kSrZkvpW_iA8qp zb|SwEPU|O$l)L0YJF&D!fv+S&_|ophB6BHx!zDcu3h_XJ!|7^YZJt>kn3{MJg`}T& zVp%|cpQWXl)8SYh#0_Yza5@Aaj>nrQeBAEKa?7*Cy2KRm-jRrLt#8ls?M99xBUH|8 z()J;fZUHVUSGsF0;>sDe-a`(PIZZ~2T_E%ggA<(pQbayFY3dz^wur7;%X$|qwWpsa zL!~b13-E;>4U)aeyBc}#{RNa(e1gY&lsg<|98T6BH-nJXbKm>+JX@RG`Djtuhp+v3 z$nq6)ho;67j{^N=pzw4$z33)Om0z7(@F{pC>~PWkd&t+wW7?l6NW!ytFN z^-~dxor^ktuB|8O1oVkrm-}*8tv0NNqg#(<4|WxezL94Njru)#$8K3DE?dbXT6O z*Z6dXPwkXl3INzOuo4y=H?QR!*#FfYpy7HdQTq%^5d>7 zF7ElU7muqaLqkRel^S(1$d66UZZQs>=4xotl^v!OTh-zHaa%oB@7Me4{rA=W!1i7< z+v2{lF@}`Z7&g!`qEdNzS2Sb9WG%aw*hhvY?MgHDD9(kk($m^LwN)wPN{x`_E96NE zif~1bV0Bq5UzBV10N6x4iQ7gV<&c9it#0j?pcY%9vk;-y)?HWyH|YvR>LBKf{RJ>O z-D$iJRPQoxpKKZ0kV~NKHjkoiA((+mgb2jxhN`iOrW-o#8dF=il~re8`{98RtBr&x z^cMJC^4#0Y6oRk`>@B@R;T^U0Uw{N>uwSE7{j1BL(&EcwE zA2(&kacrpJB~;D?c6J(Ne`p>ZX+e(xv_wdm;eE9~v~5M*`^Gz)9MFm^Z5^$sJp|DS zfgVB}cvtfieZal?dFXwbEoLW|)53jN4!r~~CyQmVxSZbTixJ9eWmH92Oi$<6XOr76 z#qaZzf~vkIjagcezC;)E%js3Y*PTwUi{5i~qO+o%kLlx#{iXbUA_b&*pPixHBk2e{wsWo{dFR?%hn5 zADk~V;TQVz{PqvJ)?^9S#Cff>+uv+{jR76v*#a%nYv#z|=t0seIXh!F`EoMiPNk@H zvCA^K_kmK{S#dJGyd1@A5<#OM=8NU*(tTv;efW60EKa@@JWAXd*tA>n#E|QxE*G@R z>ECR9@~ZS^L+lgsrAU%s&OAAi4@dX>1&Q?F#=-@}hn?eJS=lyorZS(g+c5EwNOO+< z9`sWL;Log_Hiue^Abo;`R;X!QAx1|+9K0qO5RG@p0OVf_vPeDV0w^XYi|MtYnY%j9 z-lJ9>k$Jb%i`jzm4l~tCgGdA34W)O0PwTi;EhkX03jz_K1UrwMgVq?=qAQ1*>=cDO z?xkzgwjcN=Xug?33JL#63z4cRVu<>%;NqLm#$?}-yFS)W&W=tJ)JVPV(i4VVgV@W- zt}H+VQI@T|i=3!2>kiASVZdke?UL8TGh}~w$4z+d$30hWV38PTPV8ScN58?2P{y#hweZ3F6XI@q4&o5uwZ(I&L3B_Tz zcR)JmoK9Um4xU5AtIqNw!xqAm;Y|d*oWd@vp98h|q1yfIt9=_hI8&gzHIceR{KhQE zbSm{x>|=p=$L==wPZI9qY^AkKiJb$E%aLGM7>!Er1 zSU`{dEKmwKpt=o4Z0gU6NwcJzls~UZENu$x>iHwOt1hRXhHO^4S_fvkTj1m&#(G@r zO+C`kq`U@dDd+8_&C61}V*D+SqUN57V)#JD9YNzjkC|q~iWohDwQX)YC##1#w?)Da(4# z3XZ~MSx`xL!T#nPPYJ%S&MQkL*VftbyGybF3?^uBqRon;ikLpGRocwi@$vDw*@Sj3 zeO#$DSKAyKNS_g%ZC-r{wlpsfzco(=jkujAYeK6}$~8W^VIL$k7}&qRr2iYj{|vcp zfhQ+I+)I6v+g5FP84%GPj?#j$uZ6zc32y-W3D4S!h^p8?kl2uhO)jA8-tnWD;E9?Z z!@r~7Q~Z0RP067&;CShpW8)PM_D;7>gGQ)VhQ01Naz3WH=}L{GFs?>0p|>hu0kPV! zCQma_%_h$R6VZ&A)z4Ejt8d5?m9u_8Iqb3qa@JN;%i{GssZHA0?oENXN?#ZP70;<+ zLHTe`OG^Erwq>}?JQWK4CU&|#Bu7y>$2Feyv$JB9Vs0Jd3T<}DhO8FlUAl-XxRjXN#o`l`W=IG9ktT{l2PBl;!1oF7o8ojjfv5T~ zwHHiZNNwPPy--ldrE4Gf*m|k92}Mr>v%-Gdmuu!6sZ2b2)bat6Q~Hsv$Xg$Kx0CC$ z`4yHk;7}v)PE>@#4k4;Twau4w2siXimk{3eLV)sn)#lYtxdAsb%#l&}d}b`H&c~Xg zZlFe%;IO`_fA!md9|j0~VqZ^rMJ?M2d=#@~YY^^$odC&znYq23yF?ZESfWa-IFQF; z880*S?;Zsa3OLNtCYlQLU6|2bB>#*M2n{Bx>=1HrC8$$1FdOrDhxs-|+WDwUeJgHOFq6`FwJM}c=1t>$3_ACENsIbnC zpgof&SMUsd6N%6dWpwK8dz2=Bk$J~``Kcr4uEVERgVkHCS1lip_-kL(T<#BC_L$jRzqnjLQ|$*Jwx~n_n2M zqPY037i)ASJsQ1iQI+=w?Sq+okXas591gqZMR_q4<eML*d07PINav^bqy7m$7NX=2D2GRzY;^PJ7EUo<{w#xLjBvx^V9 zkZd|iSEz)A_RhaEUw_$jq?T+<5tOH2wPB>vFOVd+DOY>5YbcRiLp<_O_>-gwb4KM) ztGj_8W8bUx^Sis_Q{^6r4dVh2#bCSC@_f|Q0@c4JxWO|-n6d3S#IwNXq4!kp6?-=X z1n!`n+})3|S7aRuqJrj*CrLcstngm%@k>;9t%d}wMQg$=B!j-Ylj^kI?vIa9NJG!c zk;eeK%yS_L4$5d12NHG>%;`j7CMHb=3Xcq>`s&X@px2s+mmKVYeu=)b-FgIDB`PmNJm{RMhmOtmVsq!Q#I4s!-dK_&|bHY@(go#}`x5^quB zP#OdRm>RuxW2jVUAp-f7Mc5o-8!zQZdZsS(s!-4~Fx(XKD%Bh6O8N_O3R1*^ zOk20C#c0dvg!MI%jP+oG5HZWx?1a<8!iYjX1)oRy!?}VQyS;mc9!_nqjhC_*{c%Wi zhmmg#4YVF*=(FaG9TmssLKO_vH>*k)7sF797)9(OMv=9Q;&=H~fF4GTOn+K#4^rg@ z9Wf0@wvOitK*}r(VYXG+w4M%dv(uPqM3e0^OP7Ax9T>yreiv(pJh6#sTeB@oqWYg= z!-KC7=fMBlaDs%z4UVV0A(n+@Ac6>?{zgafNnkV^@&{#xNfEq!Y_I!e-CPM<+^+@W zk*w&vInsM<+Hf*G$By+FSY8zW_`h+x>_S8c?R+`AplaIAb~=W0JHz{o(3|f6H(pb> zr?c7W>BDjR!|_>=?m~#}LfGAfe~8HNTW8r9(nAuXNMI%&MZF0k^w^mlc_ReAAV@?p z%omDzGML0G|DrOBEmKk&6y}nVMSDuW$!~jrF>O?=drEl_giY?rpo)u6r(In@7m~^i{0u;O$CRSG=_FMRC(mNm*#z7;JZu)dZIjW+a*2bPf^pSZ)1Z<_m)H%WG8_<*fmm5)ttRQJeRst*SBv zuy6%9(Iu`YlcnB=$)Z@?GdxLbt;<-1u{xTwND$afHz|cE>t<0M(iuvj3 z$D5hSGpVbDsSus8yJP8>1Wm!@b8K@qkb+LWBAG8M%t<1MByQy^u{M~7Shx(ccOp${ zaP}~krEVP64r{R#S;{7uXG(XY)DjTpBh-XtNKOq{I(u<}LcJ*BwsPF9%uFD7@A@M$ zt1bx?ynsRq=1M1QrmuKdDh@koE1kHrArkYJY}V*ljvma52qv?jFvx8Eu?ga1;t{vf zjVooOGG(|?wnhi?BN4UMxFdqUfF59y87IIQI*!g`R#IY={OFGQJqYu#r1TtRI}(akV8B1 zLkn>phAExntoSgUoN2QS2Qe7X`%14w(Ta^O@CE?y2Xkv1nH;jV(ym@i)U`BF#KbeI zoLa>bU3y{Asjfj5vR1!NhEyDrfx;+7znBQBF}$*iO(2}oS=d$UcmorM)8f1=+iiJQ zw-M5ku$(8nWStWG0>%I+A%kK9hIQEeL%lof-!I_*gdCH=3SMUi<5x$Vr^!eH=9tG&O>}T5*DQ8=^cmkt|zpVbqJ$7Z~*zN-Rb_CnrM^zs$)n+_56) zdZ1F=Mn>FX9-z6oLRO7pVziD~h*2+U6G=8kz{d{$c{d|)OoS2mbv<)f{E`-7uvCmT zVC0*<$Rw!v$iUPZxHQZG*(g9$X*iQL+$UKHPaq0;+mvL~ z&!WjBZ)Z7KwKK?^n#8PJBNUAJ!1CA>~da$j5LfRdBzvNF`igu-86V)t=VCshDqE0p)mU$m0*B4Er zL5*P@NAg1fgx2I6Wr4m>Q4oik`r7Rof3Nlr?zJq#|NdB4WQCI7a)L1P{bH@JeJRsf>w}SP*9Psh=7EeB~*rTfliawYJ(2y|C#$C%MgVYh%|NP2El+7vnTbQ zA*v$agIWD7*>}B@Pko36V!vIMtAV=NF)IdX{D9@rvoGlX{OSQf#hEqT2MBHKqea(J zQ@495ho;kGfHnhT0SGn}ubiQwvGFdlq57W?I02foDE}f>F zoC~$TWB<*Wr5kvO8+e*}9W6|(^rcZ4is9m!g`u)US9bW3rjz`JdUR6VLi92uQJ$Nl zwP3VH1)x8*T6mly!+VtCNa@_1o$I_n_#55lif zxdmgu2a0-O5RiV)Kn9&`?{~HnF{zz;nNBQ}MhMo3g($pqJzUdV^lu|^m>1vqv^ZlT z$o!NQ9yzR@=f}hRJ79x_W3KC828o-W!&f{HLU-gB_dRq|aOf^q)uvqE(AT=!t`1b} zUDh>(3Rq9PUjj=ID2~w0;^Jc9q*Im;bqNiMni!Vr4{L!4_SA39Z%7w+UJm0MDRS_8`VZVQ{?{k2TGH+d%?52F6f&)q` zn_(<6F`Zr)W1DXG3!Eby#!2xXTP)g4f|;IpwTF22YAcnTc`Z}~al_0nPTz)E{t;>f^zQsklLqqG}F#*76kjqP7nj z7*4t}Nv~TtMm5Ah(=Lvt))+FWP;SM{ssNHPh1`M5N2uyV78GZ1bn$X@@kp_=F&T-{ zpnEJm-2>G{*;Dp5uQn0}BB--w-KfOn@rCz`D?a#KbRDDL1T0ADq+UPYREIl5zYdqD z2?3ks#pTeo$h>;{q289yXXSBDY0S}~8ySaf#}=J!C;bij@tkSSAde+9rc{Nc z?CXY}ZFRS?-y#EsQVb>uiof589U;1nNb&Di2^c9sF#2IDf6gQUFJR9*mM`Q}jyUsk zV)<_(G?NqoowWkKo4A^yhcS-gq8fU_{3ZcbzA27RWY!qisK9CGe6DgBV#Gcv)^9;d zv5zJ9BrSfv(X2kYof&J#;>uVl>X}j^V^5K0SusI)=4`c;#>jT~i3y9TiKB$MNz;`` zA@IQZb0|+As*RQPVTl^O_;HdKf4$L@hh~kVqPCt4Cc!)ei!(a_Y(SI082fYX1P!9; zC@X$g_c+5;fHl9g`2B4VgcwVdW~?8uD@gS9#vmodhu1M?bXHNC7bgR%EmiWlqs-|d zD7GV%-IRAV1?B1UrbAh|11auxyTQ6sRGh!jQ;0Z?pR`<2x=1-sGo?=x7_NV97Zp_p zJ1az!F00r@m=o`NAh#jiKg#Lyd<1jV5kVwI#({1=C#gQdmk(xPSKm~}Yo z(G9P&Cvw#P>kP3j!Ak|niE)8XB1Amx{{=hppnjw0bw4;*EaN086v>W>8d z=(xBDvkUw*_nsQ)%XV$NT_1F%K_jEnQX$?aub4??(FZ!yz+%u3v!{eJ1W*5}!0gD$ z03R4M9NLwSt7=PsKCSBwz;;r8uc4OA9kW$lm%myIqJuM($7`KUmXqTAa&oaKX8Lec zxw9VhO53k~mTM#c$)H9Kp!T-Nk}IJ997Dw7;2LxQ07c$ItHL{OJ@zKo5aZf)9TyM7 z$B(l!{3-7i$a`5CoF}@9fj##LlnOM^6yBHU772bjU}T2%yMJo>QS<>}NH+R`Re%Tv zD2B((1t5!aN&s}j|H461IAj(i@YK_f!J}Snk80^K_#|#VS%BTcc~=SE6_Ya@c9m-S z>hyQ@c?FzSY-*T5rFyJc7>c}nerqf&7wsqW#eNb$bKQ?K+1$u{)bv_mUW{#1X)K=T z#1Dq7g;4va+Cxm5IfY7HQAjnn(O{Of@0?qiY*eebS* zeA<);0MQHUQ{4#7FvPZO2QXlnlb``#ptD@k8)w~$FE z=ehSHAdo(=U|wzyOL`8HfWLNn-W($-0diQj2;b5Rk>*X0)eg@~rHm(hlyxtC^MRV4 zppW4Xedwt5oj+{$loR>hr77YgIU{P9duIur5%-Qs`(xO3irbbQdqV$pS=T=tLaGNw zn)kS!oGlQzJ2_@*P(*ttAp~{`ot%XX?u+DYHZ}4SVL`!6uy#R-CGt^b16Zk( z7pCMBHBF1J*lQ}36#Pi|mPbN8<`5sV?|RIZSYUZi?$=Y=E*Lbh+wI)uV8vP_5OWKVa%J!WoL8bCnPVI09NtGua&e1iZR2y)idU6D#~ z7gAm?;YkM9@n!^=(WLsD5yYW|yG*v#<7%VHfXG6oYwb#7vl^15ns|0Knw&E3JDyfH zJCu*Csw;3bgUZBO0;36dKNiYkPFF`$!WCZ{Zv_JB*iPt$h1FGqD}kpSk|ws7#+wYN-NtjHT0)9nh8?bHl!idw9Gl_Oyt=)yB zaqK;@$4q=H;(X)8tN5R_q;1h=Pahz0d5dUU%GgL*h)?s;?=}73{slcedsJ22-LLw@vPh&bp5=8Sl36T zJ6kDh3t!_TWsTzK2VEv5iaiO4-$g?NQ5?p_Uqhb+=#!vO^9Se`8JZ*ri}Hs`U+_(a zzR8Q@&?hPSBq@FlEEJ0+v3nykgx3>|-fpfx=Z z1anFNkY#Y4QXO)&qyJm)3@Bow@mRu($jW2KvkBDShwdcmd+h}){jl0UKt`o}4hYF@ z>O_0_0utsZqb`o9F0QY*ASG2nyw>StSuDTYOqD6&Gzlxt&hWprduiAhieA zh};p$Gc-l!t$xIVdWKt;V9ry~PYg=l1$7vJ>dOO%mWj7L(S z^eLO_$izFHUtUgb3;KWNw+8l((B;VK-%a|MG+ZNr2N0hQ4xpsI#X=xJS=vbnBrya; z#>tPqeS8OQ(5E@GUAsU}a*L!dpuehjV8gwrz8{1(FR?<=92t_-23WO-qo7|Th2D*) z9!AQxgGsAMV z=l=If07%8ZsD@A-|A9Zry-&S#5tv|KYIC$K6K#Z#^Yg#7~z0cUrG4 zwFe@LEoyeYd8Tl3)lNT)#Y%TpZ=N2it(7$CM5gE{$j=eNCVly$0QgeQ-c`~q(d#k&wEFy6_V}YzrA^LSWSn-k7AaV*RC03MorFZ;|a-qXNmJkgWV|;_Qbc;Fkuu zvRF(nr>D!gzQ&$h;UMw7i}|vEGJB3A;@rEM&lbz;=|V5WDnn9lc{`mfKvKV%FAU7d z78E0~r+0yArtY5>C!0JaR5}1tlq?#a34Bq-&TJV$asq)ixd+Aztb$q;p-~Baj~G-= z8?-ot`x~STs<|>2*;fK8?0}NYNlE9E1?f%S&sK)n;*ynN2IRq^fT?wFcCRRAV&MNo zNSFNz07<7L(z}>2?&F4y6pw>C2`;;~c*^Bnk1PoyK^NEw$Rgp-cJ&rl0Z>gNK6}f! z7ZLi0sv)XSS5_FLNaz>qKMltg`Lba+7xpd^8m&ETX?&xyPo-t#5{omzG3!8V_!=^ZR;{4VSpUf5e{MsLKbAJyc;>h zFe!VI$TjyKBuJh3FNwUH%gGn$&rI3ylGl?JlakO|p>xzz4BFNx;(2!pEdut91#TqP z2ntQ6SIyj?TbTs~JJ5MzG>-@@(6xtE;CW4t+M%iB9<^QIauDapQ=J4cOU>0^dU<9M zTorpCW*7P=-7qqw+Sccn42-<1>Dla~!HA|G8+g}EpIgV{5JMBGV86~i8s`Bf~k7me`MSY5jm#_1{⁢MR|+e=Tk3z1hO@%_RS_6d`Hm9|5W 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

q00kww3j2IGz)5e}fB*M( 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 From c1d7683896880dab5980ac52ff321c4ece869dab Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 19 Jan 2021 23:14:37 -0700 Subject: [PATCH 152/935] fix version # --- src/launch/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/launch/resources/fabric.mod.json b/src/launch/resources/fabric.mod.json index e9faec869..4782f03cb 100644 --- a/src/launch/resources/fabric.mod.json +++ b/src/launch/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.7.4", - "minecraft": "1.16.x" + "minecraft": "1.15.x" } } \ No newline at end of file From 7fbe9c062eedfa61f4cfe0531399b8af34b25512 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 19 Jan 2021 23:37:01 -0700 Subject: [PATCH 153/935] unique version names --- .../java/baritone/gradle/fabric/CreateVolderYarn.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java index 4e6ae09b6..365e7f29b 100644 --- a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java +++ b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java @@ -31,7 +31,8 @@ * @Author Wagyourtail */ public class CreateVolderYarn { - public static String VOLDER_YARN_PATH = "./volderyarn/volderyarn.jar"; + public static String VOLDERYARNFOLDER = "./volderyarn/"; + public static String VOLDERYARN = "volderyarn-%s-%s-%s.jar"; public static void genMappings(String mcVersion, Map mcpVersion) throws IOException { //download yarn intermediary @@ -54,7 +55,13 @@ public static void genMappings(String mcVersion, Map mcpVersion) builder.append("\n").append(clazz.getIntToMCP()); } - File outputFile = new File(VOLDER_YARN_PATH); + File outputFolder = new File(VOLDERYARNFOLDER); + + for (File f : outputFolder.listFiles()) { + if (!f.isDirectory()) f.delete(); + } + + File outputFile = new File(outputFolder, String.format(VOLDERYARN, mcVersion, mcpVersion.get("channel"), mcpVersion.get("version"))); if (!outputFile.getParentFile().exists()) { if (!outputFile.getParentFile().mkdir()) throw new FileNotFoundException("Failed to create folder for volderyarn!"); } From 2c3f352d0d287d915de339cbf573678456864751 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Wed, 20 Jan 2021 18:09:20 -0700 Subject: [PATCH 154/935] figure out how to revert "fix refmap location to be fabric-compliant" I did some reading --- build.gradle | 6 ++++-- src/launch/resources/mixins.baritone.json | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index a877a6627..ee1a2b8b4 100755 --- a/build.gradle +++ b/build.gradle @@ -101,7 +101,9 @@ task sourceJar(type: Jar, dependsOn: classes) { classifier = 'sources' from sourceSets.api.allSource } -if (!getProject().hasProperty("baritone.fabric_build")) { +if (getProject().hasProperty("baritone.fabric_build")) { + minecraft.refmapName="mixins.baritone.refmap.json" +} else { minecraft { mappings mcpVersion @@ -151,7 +153,7 @@ if (!getProject().hasProperty("baritone.fabric_build")) { mixin { defaultObfuscationEnv searge - add sourceSets.launch, 'baritone-refmap.json' + add sourceSets.launch, 'mixins.baritone.refmap.json' } } diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index c52948a77..12584443f 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -1,7 +1,7 @@ { "required": true, "package": "baritone.launch.mixins", - "refmap": "baritone-refmap.json", + "refmap": "mixins.baritone.refmap.json", "compatibilityLevel": "JAVA_8", "verbose": false, "injectors": { From 9a7b07befcc208d3f35fc6e562501a28d2a3ef63 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Wed, 27 Jan 2021 09:20:10 -0700 Subject: [PATCH 155/935] move mappings folder to better location and have it autocreate --- build.gradle | 2 +- .../src/main/java/baritone/gradle/fabric/CreateVolderYarn.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index ee1a2b8b4..8855318ab 100755 --- a/build.gradle +++ b/build.gradle @@ -174,7 +174,7 @@ repositories { dependencies { if (getProject().hasProperty("baritone.fabric_build")) { minecraft "com.mojang:minecraft:1.15.2" - mappings fileTree(dir: "volderyarn", include: "**.jar") + mappings fileTree(dir: "./build/volderyarn", include: "**.jar") modImplementation "net.fabricmc:fabric-loader:0.9.1+build.205" // this makes it compile with the forge tweak stuff diff --git a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java index 365e7f29b..f544023a3 100644 --- a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java +++ b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java @@ -31,7 +31,7 @@ * @Author Wagyourtail */ public class CreateVolderYarn { - public static String VOLDERYARNFOLDER = "./volderyarn/"; + public static String VOLDERYARNFOLDER = "./build/volderyarn/"; public static String VOLDERYARN = "volderyarn-%s-%s-%s.jar"; public static void genMappings(String mcVersion, Map mcpVersion) throws IOException { @@ -56,6 +56,7 @@ public static void genMappings(String mcVersion, Map mcpVersion) } File outputFolder = new File(VOLDERYARNFOLDER); + if (!outputFolder.exists() && !outputFolder.mkdirs()) throw new RuntimeException("Failed to create dir for volderyarn mappings."); for (File f : outputFolder.listFiles()) { if (!f.isDirectory()) f.delete(); From 15fd313757e6d0c9b59a938c2e7e0db4d0fe79c4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 29 Jan 2021 20:26:06 -0800 Subject: [PATCH 156/935] a long overdue reformat of every file --- src/api/java/baritone/api/IBaritone.java | 2 +- .../baritone/api/cache/IWorldScanner.java | 2 +- .../java/baritone/api/command/Command.java | 3 +-- .../command/argparser/IArgParserManager.java | 4 ++-- .../api/command/argument/IArgConsumer.java | 10 +++++----- .../command/argument/ICommandArgument.java | 2 +- .../api/command/datatypes/BlockById.java | 2 +- .../datatypes/ForBlockOptionalMeta.java | 2 +- .../api/command/datatypes/ForEnumFacing.java | 2 +- .../api/command/datatypes/ForWaypoints.java | 2 +- .../command/datatypes/IDatatypeContext.java | 3 +-- .../api/command/datatypes/IDatatypeFor.java | 3 +-- .../command/datatypes/RelativeBlockPos.java | 2 +- .../api/command/datatypes/RelativeGoal.java | 5 +---- .../command/datatypes/RelativeGoalBlock.java | 2 +- .../api/command/datatypes/RelativeGoalXZ.java | 2 +- .../command/datatypes/RelativeGoalYLevel.java | 2 +- .../exception/CommandUnhandledException.java | 2 +- .../command/exception/ICommandException.java | 2 +- .../api/command/helpers/Paginator.java | 4 ++-- .../command/helpers/TabCompleteHelper.java | 5 ++--- .../api/event/events/TabCompleteEvent.java | 1 - .../api/schematic/IStaticSchematic.java | 3 +-- .../baritone/api/utils/BlockOptionalMeta.java | 9 +++------ src/api/java/baritone/api/utils/Helper.java | 10 +++++----- .../baritone/api/utils/IPlayerContext.java | 1 - src/main/java/baritone/Baritone.java | 2 +- src/main/java/baritone/BaritoneProvider.java | 2 +- src/main/java/baritone/KeepName.java | 2 +- .../java/baritone/command/CommandSystem.java | 2 +- .../command/ExampleBaritoneControl.java | 12 ++++++------ .../command/argument/ArgConsumer.java | 2 +- .../command/argument/CommandArgument.java | 2 +- .../command/argument/CommandArguments.java | 6 +++--- .../command/defaults/AxisCommand.java | 6 +++--- .../command/defaults/BlacklistCommand.java | 4 ++-- .../command/defaults/BuildCommand.java | 1 - .../command/defaults/ChestsCommand.java | 4 ++-- .../command/defaults/ClickCommand.java | 2 +- .../command/defaults/ComeCommand.java | 4 ++-- .../command/defaults/ExploreCommand.java | 4 ++-- .../defaults/ExploreFilterCommand.java | 2 +- .../command/defaults/FarmCommand.java | 9 ++------- .../command/defaults/FindCommand.java | 4 ++-- .../command/defaults/FollowCommand.java | 2 +- .../command/defaults/ForceCancelCommand.java | 2 +- .../baritone/command/defaults/GcCommand.java | 2 +- .../command/defaults/GoalCommand.java | 8 ++++---- .../command/defaults/GotoCommand.java | 2 +- .../command/defaults/HelpCommand.java | 2 +- .../command/defaults/InvertCommand.java | 8 ++++---- .../command/defaults/MineCommand.java | 4 ++-- .../command/defaults/PathCommand.java | 2 +- .../command/defaults/ProcCommand.java | 8 ++++---- .../command/defaults/ReloadAllCommand.java | 2 +- .../command/defaults/RenderCommand.java | 4 ++-- .../command/defaults/RepackCommand.java | 2 +- .../command/defaults/SaveAllCommand.java | 2 +- .../command/defaults/SchematicaCommand.java | 2 +- .../baritone/command/defaults/SelCommand.java | 19 +++++++++---------- .../baritone/command/defaults/SetCommand.java | 6 +++--- .../command/defaults/ThisWayCommand.java | 4 ++-- .../command/defaults/TunnelCommand.java | 2 +- .../command/defaults/VersionCommand.java | 2 +- .../command/defaults/WaypointsCommand.java | 8 ++++---- .../pathing/calc/AbstractNodeCostSearch.java | 2 +- .../movement/movements/MovementDiagonal.java | 18 +++++++++--------- .../java/baritone/process/BuilderProcess.java | 8 ++++---- .../format/DefaultSchematicFormats.java | 2 -- 69 files changed, 129 insertions(+), 151 deletions(-) diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 64c4a2918..0cc73b0d1 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -20,13 +20,13 @@ import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.IPathingBehavior; import baritone.api.cache.IWorldProvider; +import baritone.api.command.manager.ICommandManager; import baritone.api.event.listener.IEventBus; import baritone.api.pathing.calc.IPathingControlManager; import baritone.api.process.*; import baritone.api.selection.ISelectionManager; import baritone.api.utils.IInputOverrideHandler; import baritone.api.utils.IPlayerContext; -import baritone.api.command.manager.ICommandManager; /** * @author Brady diff --git a/src/api/java/baritone/api/cache/IWorldScanner.java b/src/api/java/baritone/api/cache/IWorldScanner.java index 224f64c76..bc3064608 100644 --- a/src/api/java/baritone/api/cache/IWorldScanner.java +++ b/src/api/java/baritone/api/cache/IWorldScanner.java @@ -88,7 +88,7 @@ default List scanChunk(IPlayerContext ctx, List blocks, ChunkPo * Queues the chunks in a square formation around the specified player, using the specified * range, which represents 1/2 the square's dimensions, where the player is in the center. * - * @param ctx The player, describing the origin + * @param ctx The player, describing the origin * @param range The range to repack * @return The amount of chunks successfully queued for repacking */ diff --git a/src/api/java/baritone/api/command/Command.java b/src/api/java/baritone/api/command/Command.java index 4db5c0f3f..c81a3365b 100644 --- a/src/api/java/baritone/api/command/Command.java +++ b/src/api/java/baritone/api/command/Command.java @@ -34,9 +34,8 @@ * So basically, you should use it because it provides a small amount of boilerplate, * but you're not forced to use it. * - * @see ICommand - * * @author LoganDark + * @see ICommand */ public abstract class Command implements ICommand { diff --git a/src/api/java/baritone/api/command/argparser/IArgParserManager.java b/src/api/java/baritone/api/command/argparser/IArgParserManager.java index f38b4624d..d5c36adb3 100644 --- a/src/api/java/baritone/api/command/argparser/IArgParserManager.java +++ b/src/api/java/baritone/api/command/argparser/IArgParserManager.java @@ -46,8 +46,8 @@ public interface IArgParserManager { /** * Attempt to parse the specified argument with a stateless {@link IArgParser} that outputs the specified class. * - * @param type The type to try and parse the argument into. - * @param arg The argument to parse. + * @param type The type to try and parse the argument into. + * @param arg The argument to parse. * @return An instance of the specified class. * @throws CommandInvalidTypeException If the parsing failed */ diff --git a/src/api/java/baritone/api/command/argument/IArgConsumer.java b/src/api/java/baritone/api/command/argument/IArgConsumer.java index c9212fa41..883494d49 100644 --- a/src/api/java/baritone/api/command/argument/IArgConsumer.java +++ b/src/api/java/baritone/api/command/argument/IArgConsumer.java @@ -18,8 +18,6 @@ package baritone.api.command.argument; import baritone.api.command.ICommand; -import baritone.api.command.exception.CommandTooManyArgumentsException; -import baritone.api.utils.Helper; import baritone.api.command.argparser.IArgParser; import baritone.api.command.datatypes.IDatatype; import baritone.api.command.datatypes.IDatatypeFor; @@ -27,6 +25,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandTooManyArgumentsException; +import baritone.api.utils.Helper; import net.minecraft.util.EnumFacing; import java.util.Deque; @@ -223,7 +223,7 @@ public interface IArgConsumer { * @param type The type to peek as * @param index The index to peek * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #peekAs(Class) * @see #peekAsOrDefault(Class, Object, int) @@ -240,7 +240,7 @@ public interface IArgConsumer { * * @param type The type to peek as * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #peekAs(Class, int) * @see #peekAsOrDefault(Class, Object) @@ -458,7 +458,7 @@ public interface IArgConsumer { * * @param type The type to peek as * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #get() * @see #getAsOrDefault(Class, Object) diff --git a/src/api/java/baritone/api/command/argument/ICommandArgument.java b/src/api/java/baritone/api/command/argument/ICommandArgument.java index 9f3ff613c..72169de04 100644 --- a/src/api/java/baritone/api/command/argument/ICommandArgument.java +++ b/src/api/java/baritone/api/command/argument/ICommandArgument.java @@ -87,7 +87,7 @@ public interface ICommandArgument { * * @param type The class to parse this argument into * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed */ T getAs(Class type, Class stateType, S state) throws CommandInvalidTypeException; diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 93917dd10..bb288c12e 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -17,8 +17,8 @@ package baritone.api.command.datatypes; -import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; diff --git a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java index 29dc5f0b7..978450a23 100644 --- a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java +++ b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java @@ -17,8 +17,8 @@ package baritone.api.command.datatypes; -import baritone.api.utils.BlockOptionalMeta; import baritone.api.command.exception.CommandException; +import baritone.api.utils.BlockOptionalMeta; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/ForEnumFacing.java b/src/api/java/baritone/api/command/datatypes/ForEnumFacing.java index f88b372ae..d71307b10 100644 --- a/src/api/java/baritone/api/command/datatypes/ForEnumFacing.java +++ b/src/api/java/baritone/api/command/datatypes/ForEnumFacing.java @@ -17,8 +17,8 @@ package baritone.api.command.datatypes; -import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.util.EnumFacing; import java.util.Locale; diff --git a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java index 208786987..061428827 100644 --- a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java +++ b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java @@ -20,8 +20,8 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.cache.IWaypointCollection; -import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import java.util.Comparator; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java b/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java index 78358a262..f0d1b5636 100644 --- a/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java @@ -24,9 +24,8 @@ * Provides an {@link IDatatype} with contextual information so * that it can perform the desired operation on the target level. * - * @see IDatatype - * * @author Brady + * @see IDatatype * @since 9/26/2019 */ public interface IDatatypeContext { diff --git a/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java b/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java index 2f0a9c140..854fe6869 100644 --- a/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java @@ -34,11 +34,10 @@ public interface IDatatypeFor extends IDatatype { * if the expected input does not conform to a parseable value. As far as a {@link CommandException} being * thrown is concerned, see the note below for specifics. * - * @see IDatatypeContext - * * @param ctx The context * @return The parsed data-type * @throws CommandException If there was an issue parsing using another type or arguments could not be polled. + * @see IDatatypeContext */ T get(IDatatypeContext ctx) throws CommandException; } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java b/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java index 082b649eb..31ae97273 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java @@ -18,8 +18,8 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.exception.CommandException; +import baritone.api.utils.BetterBlockPos; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoal.java b/src/api/java/baritone/api/command/datatypes/RelativeGoal.java index 19312907e..0b602e9e9 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoal.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoal.java @@ -18,16 +18,13 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalXZ; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; -import net.minecraft.util.math.MathHelper; -import java.util.ArrayList; -import java.util.List; import java.util.stream.Stream; public enum RelativeGoal implements IDatatypePost { diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java index ae05c6ade..ccc45cafa 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java index c50aab015..747509f5e 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java index 58d093f1b..cd1a4c5d4 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java index 02987d4ee..5dce59313 100644 --- a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -38,7 +38,7 @@ public CommandUnhandledException(Throwable cause) { @Override public void handle(ICommand command, List args) { HELPER.logDirect("An unhandled exception occurred. " + - "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", + "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", TextFormatting.RED); this.printStackTrace(); diff --git a/src/api/java/baritone/api/command/exception/ICommandException.java b/src/api/java/baritone/api/command/exception/ICommandException.java index 58d130496..b521a2e6b 100644 --- a/src/api/java/baritone/api/command/exception/ICommandException.java +++ b/src/api/java/baritone/api/command/exception/ICommandException.java @@ -38,8 +38,8 @@ public interface ICommandException { /** - * @see Exception#getMessage() * @return The exception details + * @see Exception#getMessage() */ String getMessage(); diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index 29ddca2f9..5aa65d7d4 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -17,10 +17,10 @@ package baritone.api.command.helpers; -import baritone.api.utils.Helper; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.Helper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextFormatting; diff --git a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java index 6274c6836..54ae9e8c4 100644 --- a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java @@ -19,10 +19,10 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; -import baritone.api.event.events.TabCompleteEvent; -import baritone.api.utils.SettingsUtil; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.manager.ICommandManager; +import baritone.api.event.events.TabCompleteEvent; +import baritone.api.utils.SettingsUtil; import net.minecraft.util.ResourceLocation; import java.util.Comparator; @@ -236,7 +236,6 @@ public Stream stream() { * Appends every command in the specified {@link ICommandManager} to this {@link TabCompleteHelper} * * @param manager A command manager - * * @return This {@link TabCompleteHelper} */ public TabCompleteHelper addCommands(ICommandManager manager) { diff --git a/src/api/java/baritone/api/event/events/TabCompleteEvent.java b/src/api/java/baritone/api/event/events/TabCompleteEvent.java index 2a0ef87ba..268cf62bf 100644 --- a/src/api/java/baritone/api/event/events/TabCompleteEvent.java +++ b/src/api/java/baritone/api/event/events/TabCompleteEvent.java @@ -18,7 +18,6 @@ package baritone.api.event.events; import baritone.api.event.events.type.Cancellable; -import baritone.api.event.events.type.Overrideable; /** * @author LoganDark diff --git a/src/api/java/baritone/api/schematic/IStaticSchematic.java b/src/api/java/baritone/api/schematic/IStaticSchematic.java index 268b1b1f4..43fad7036 100644 --- a/src/api/java/baritone/api/schematic/IStaticSchematic.java +++ b/src/api/java/baritone/api/schematic/IStaticSchematic.java @@ -22,10 +22,9 @@ /** * A static schematic is capable of providing the desired state at a given position without * additional context. Schematics of this type are expected to have non-varying contents. - * - * @see #getDirect(int, int, int) * * @author Brady + * @see #getDirect(int, int, int) * @since 12/24/2019 */ public interface IStaticSchematic extends ISchematic { diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index d5ecb395d..708f14872 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -19,18 +19,15 @@ import baritone.api.utils.accessor.IItemStack; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.*; +import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; -import net.minecraft.state.IProperty; -import net.minecraft.state.properties.*; -import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.IRegistry; import javax.annotation.Nonnull; -import java.util.*; -import java.util.function.Consumer; +import java.util.HashSet; +import java.util.Set; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 03eec0b5b..f92af0574 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -67,7 +67,7 @@ static ITextComponent getPrefix() { /** * Send a message to display as a toast popup * - * @param title The title to display in the popup + * @param title The title to display in the popup * @param message The message to display in the popup */ default void logToast(ITextComponent title, ITextComponent message) { @@ -77,7 +77,7 @@ default void logToast(ITextComponent title, ITextComponent message) { /** * Send a message to display as a toast popup * - * @param title The title to display in the popup + * @param title The title to display in the popup * @param message The message to display in the popup */ default void logToast(String title, String message) { @@ -144,8 +144,8 @@ default void logDirect(ITextComponent... components) { * Send a message to chat regardless of chatDebug (should only be used for critically important messages, or as a * direct response to a chat command) * - * @param message The message to display in chat - * @param color The color to print that message in + * @param message The message to display in chat + * @param color The color to print that message in * @param logAsToast Whether to log as a toast notification */ default void logDirect(String message, TextFormatting color, boolean logAsToast) { @@ -171,7 +171,7 @@ default void logDirect(String message, TextFormatting color) { * Send a message to chat regardless of chatDebug (should only be used for critically important messages, or as a * direct response to a chat command) * - * @param message The message to display in chat + * @param message The message to display in chat * @param logAsToast Whether to log as a toast notification */ default void logDirect(String message, boolean logAsToast) { diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index b58205be6..63d1ae51a 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -20,7 +20,6 @@ import baritone.api.cache.IWorldData; import net.minecraft.block.BlockSlab; import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index b49584d13..0ea811e12 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -25,11 +25,11 @@ import baritone.api.utils.IPlayerContext; import baritone.behavior.*; import baritone.cache.WorldProvider; +import baritone.command.manager.CommandManager; import baritone.event.GameEventHandler; import baritone.process.*; import baritone.selection.SelectionManager; import baritone.utils.*; -import baritone.command.manager.CommandManager; import baritone.utils.player.PrimaryPlayerContext; import net.minecraft.client.Minecraft; diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index 6f64a8350..d5457cf85 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -22,9 +22,9 @@ import baritone.api.cache.IWorldScanner; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; -import baritone.command.ExampleBaritoneControl; import baritone.cache.WorldScanner; import baritone.command.CommandSystem; +import baritone.command.ExampleBaritoneControl; import baritone.utils.schematic.SchematicSystem; import java.util.Collections; diff --git a/src/main/java/baritone/KeepName.java b/src/main/java/baritone/KeepName.java index 20f08e7b8..7fc04cd68 100644 --- a/src/main/java/baritone/KeepName.java +++ b/src/main/java/baritone/KeepName.java @@ -18,4 +18,4 @@ package baritone; // Annotation for classes and class members that should not be renamed by proguard -public @interface KeepName { } +public @interface KeepName {} diff --git a/src/main/java/baritone/command/CommandSystem.java b/src/main/java/baritone/command/CommandSystem.java index 49d3685c1..943e0951d 100644 --- a/src/main/java/baritone/command/CommandSystem.java +++ b/src/main/java/baritone/command/CommandSystem.java @@ -18,8 +18,8 @@ package baritone.command; import baritone.api.command.ICommandSystem; -import baritone.command.argparser.ArgParserManager; import baritone.api.command.argparser.IArgParserManager; +import baritone.command.argparser.ArgParserManager; /** * @author Brady diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index e96faec01..66d5989ed 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -20,20 +20,20 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.Settings; -import baritone.utils.accessor.IGuiScreen; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandNotFoundException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.command.manager.ICommandManager; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.TabCompleteEvent; import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.utils.Helper; import baritone.api.utils.SettingsUtil; -import baritone.api.command.argument.ICommandArgument; -import baritone.api.command.exception.CommandNotEnoughArgumentsException; -import baritone.api.command.exception.CommandNotFoundException; import baritone.command.argument.ArgConsumer; -import baritone.api.command.helpers.TabCompleteHelper; -import baritone.api.command.manager.ICommandManager; import baritone.command.argument.CommandArguments; import baritone.command.manager.CommandManager; +import baritone.utils.accessor.IGuiScreen; import net.minecraft.util.Tuple; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; diff --git a/src/main/java/baritone/command/argument/ArgConsumer.java b/src/main/java/baritone/command/argument/ArgConsumer.java index f4e7dd524..4a80681dd 100644 --- a/src/main/java/baritone/command/argument/ArgConsumer.java +++ b/src/main/java/baritone/command/argument/ArgConsumer.java @@ -18,6 +18,7 @@ package baritone.command.argument; import baritone.api.IBaritone; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.ICommandArgument; import baritone.api.command.datatypes.IDatatype; import baritone.api.command.datatypes.IDatatypeContext; @@ -27,7 +28,6 @@ import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandNotEnoughArgumentsException; import baritone.api.command.exception.CommandTooManyArgumentsException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.manager.ICommandManager; import java.util.ArrayList; diff --git a/src/main/java/baritone/command/argument/CommandArgument.java b/src/main/java/baritone/command/argument/CommandArgument.java index 3ce6cda82..a40ae1d53 100644 --- a/src/main/java/baritone/command/argument/CommandArgument.java +++ b/src/main/java/baritone/command/argument/CommandArgument.java @@ -17,9 +17,9 @@ package baritone.command.argument; -import baritone.command.argparser.ArgParserManager; import baritone.api.command.argument.ICommandArgument; import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.command.argparser.ArgParserManager; import java.util.stream.Stream; diff --git a/src/main/java/baritone/command/argument/CommandArguments.java b/src/main/java/baritone/command/argument/CommandArguments.java index 8d26acb48..22a2ef887 100644 --- a/src/main/java/baritone/command/argument/CommandArguments.java +++ b/src/main/java/baritone/command/argument/CommandArguments.java @@ -48,9 +48,9 @@ public static List from(String string, boolean preserveEmptyLa int lastEnd = -1; while (argMatcher.find()) { args.add(new CommandArgument( - args.size(), - argMatcher.group(), - string.substring(argMatcher.start()) + args.size(), + argMatcher.group(), + string.substring(argMatcher.start()) )); lastEnd = argMatcher.end(); } diff --git a/src/main/java/baritone/command/defaults/AxisCommand.java b/src/main/java/baritone/command/defaults/AxisCommand.java index 0a92ac6e7..2ff98ed34 100644 --- a/src/main/java/baritone/command/defaults/AxisCommand.java +++ b/src/main/java/baritone/command/defaults/AxisCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalAxis; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalAxis; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/BlacklistCommand.java b/src/main/java/baritone/command/defaults/BlacklistCommand.java index a383e0a79..fe49477f4 100644 --- a/src/main/java/baritone/command/defaults/BlacklistCommand.java +++ b/src/main/java/baritone/command/defaults/BlacklistCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.process.IGetToBlockProcess; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.process.IGetToBlockProcess; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/BuildCommand.java b/src/main/java/baritone/command/defaults/BuildCommand.java index aa6723c27..75c1673d4 100644 --- a/src/main/java/baritone/command/defaults/BuildCommand.java +++ b/src/main/java/baritone/command/defaults/BuildCommand.java @@ -26,7 +26,6 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.utils.BetterBlockPos; -import net.minecraft.client.Minecraft; import org.apache.commons.io.FilenameUtils; import java.io.File; diff --git a/src/main/java/baritone/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java index fd084ad17..b4dcda749 100644 --- a/src/main/java/baritone/command/defaults/ChestsCommand.java +++ b/src/main/java/baritone/command/defaults/ChestsCommand.java @@ -19,11 +19,11 @@ import baritone.api.IBaritone; import baritone.api.cache.IRememberedInventory; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BetterBlockPos; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; diff --git a/src/main/java/baritone/command/defaults/ClickCommand.java b/src/main/java/baritone/command/defaults/ClickCommand.java index b882c5879..8875a3723 100644 --- a/src/main/java/baritone/command/defaults/ClickCommand.java +++ b/src/main/java/baritone/command/defaults/ClickCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index b8033c3fb..5d3e3b829 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalBlock; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.GoalBlock; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/baritone/command/defaults/ExploreCommand.java b/src/main/java/baritone/command/defaults/ExploreCommand.java index 9d27bbbe9..0b147c354 100644 --- a/src/main/java/baritone/command/defaults/ExploreCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalXZ; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeGoalXZ; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.GoalXZ; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java index b4ee393a9..c2057551f 100644 --- a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java @@ -19,11 +19,11 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeFile; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import com.google.gson.JsonSyntaxException; import java.io.File; diff --git a/src/main/java/baritone/command/defaults/FarmCommand.java b/src/main/java/baritone/command/defaults/FarmCommand.java index 1903f89f3..f8bbc0c0c 100644 --- a/src/main/java/baritone/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/command/defaults/FarmCommand.java @@ -20,21 +20,16 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForWaypoints; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.helpers.Paginator; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; -import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; - public class FarmCommand extends Command { public FarmCommand(IBaritone baritone) { @@ -51,7 +46,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { range = args.getAs(Integer.class); } //waypoint - if (args.has(1)){ + if (args.has(1)) { IWaypoint[] waypoints = args.getDatatypeFor(ForWaypoints.INSTANCE); IWaypoint waypoint = null; switch (waypoints.length) { diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index d894066a7..ce79744e7 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BetterBlockPos; import net.minecraft.block.Block; import net.minecraft.util.registry.IRegistry; diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index 896dd00c0..88f3bb150 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -20,11 +20,11 @@ import baritone.KeepName; import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.EntityClassById; import baritone.api.command.datatypes.IDatatypeFor; import baritone.api.command.datatypes.NearbyPlayer; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index 8344f4f9f..513d61bcb 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -20,8 +20,8 @@ import baritone.api.IBaritone; import baritone.api.behavior.IPathingBehavior; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GcCommand.java b/src/main/java/baritone/command/defaults/GcCommand.java index 143da5792..7e4d4fa96 100644 --- a/src/main/java/baritone/command/defaults/GcCommand.java +++ b/src/main/java/baritone/command/defaults/GcCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GoalCommand.java b/src/main/java/baritone/command/defaults/GoalCommand.java index a75af077b..40822e057 100644 --- a/src/main/java/baritone/command/defaults/GoalCommand.java +++ b/src/main/java/baritone/command/defaults/GoalCommand.java @@ -18,15 +18,15 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.process.ICustomGoalProcess; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeGoal; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.process.ICustomGoalProcess; +import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GotoCommand.java b/src/main/java/baritone/command/defaults/GotoCommand.java index a6fe4e22b..896e3f5f8 100644 --- a/src/main/java/baritone/command/defaults/GotoCommand.java +++ b/src/main/java/baritone/command/defaults/GotoCommand.java @@ -19,12 +19,12 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeGoal; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.pathing.goals.Goal; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMeta; diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index 4cb5f420c..e681d21b9 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -20,9 +20,9 @@ import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.ICommand; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandNotFoundException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.util.text.ITextComponent; diff --git a/src/main/java/baritone/command/defaults/InvertCommand.java b/src/main/java/baritone/command/defaults/InvertCommand.java index 9e3e859eb..e8bdf50d8 100644 --- a/src/main/java/baritone/command/defaults/InvertCommand.java +++ b/src/main/java/baritone/command/defaults/InvertCommand.java @@ -18,13 +18,13 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalInverted; -import baritone.api.process.ICustomGoalProcess; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalInverted; +import baritone.api.process.ICustomGoalProcess; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 2baf982af..63712fe3e 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -18,12 +18,12 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BlockOptionalMeta; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BlockOptionalMeta; import baritone.cache.WorldScanner; import java.util.ArrayList; diff --git a/src/main/java/baritone/command/defaults/PathCommand.java b/src/main/java/baritone/command/defaults/PathCommand.java index 0add64080..182a1e5bc 100644 --- a/src/main/java/baritone/command/defaults/PathCommand.java +++ b/src/main/java/baritone/command/defaults/PathCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.process.ICustomGoalProcess; import baritone.cache.WorldScanner; diff --git a/src/main/java/baritone/command/defaults/ProcCommand.java b/src/main/java/baritone/command/defaults/ProcCommand.java index cf9371bc8..1652a9917 100644 --- a/src/main/java/baritone/command/defaults/ProcCommand.java +++ b/src/main/java/baritone/command/defaults/ProcCommand.java @@ -18,13 +18,13 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.calc.IPathingControlManager; -import baritone.api.process.IBaritoneProcess; -import baritone.api.process.PathingCommand; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.calc.IPathingControlManager; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.PathingCommand; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ReloadAllCommand.java b/src/main/java/baritone/command/defaults/ReloadAllCommand.java index fa8d51175..39396a9c0 100644 --- a/src/main/java/baritone/command/defaults/ReloadAllCommand.java +++ b/src/main/java/baritone/command/defaults/ReloadAllCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java index 64c9e4fb3..a77add6e6 100644 --- a/src/main/java/baritone/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -18,10 +18,10 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/RepackCommand.java b/src/main/java/baritone/command/defaults/RepackCommand.java index 6366fbc92..cafbea524 100644 --- a/src/main/java/baritone/command/defaults/RepackCommand.java +++ b/src/main/java/baritone/command/defaults/RepackCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.cache.WorldScanner; import java.util.Arrays; diff --git a/src/main/java/baritone/command/defaults/SaveAllCommand.java b/src/main/java/baritone/command/defaults/SaveAllCommand.java index 5f064a72f..de416c60d 100644 --- a/src/main/java/baritone/command/defaults/SaveAllCommand.java +++ b/src/main/java/baritone/command/defaults/SaveAllCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/SchematicaCommand.java b/src/main/java/baritone/command/defaults/SchematicaCommand.java index 8279b1dc5..ae5cac47f 100644 --- a/src/main/java/baritone/command/defaults/SchematicaCommand.java +++ b/src/main/java/baritone/command/defaults/SchematicaCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 6f242f0b0..0eab8a9a9 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -19,24 +19,23 @@ import baritone.Baritone; import baritone.api.IBaritone; -import baritone.api.event.events.RenderEvent; -import baritone.api.event.listener.AbstractGameEventListener; -import baritone.api.schematic.*; -import baritone.api.selection.ISelection; -import baritone.api.selection.ISelectionManager; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.BlockOptionalMeta; -import baritone.api.utils.BlockOptionalMetaLookup; -import baritone.api.schematic.ISchematic; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.ForEnumFacing; import baritone.api.command.datatypes.RelativeBlockPos; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.event.events.RenderEvent; +import baritone.api.event.listener.AbstractGameEventListener; +import baritone.api.schematic.*; +import baritone.api.selection.ISelection; +import baritone.api.selection.ISelectionManager; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMeta; +import baritone.api.utils.BlockOptionalMetaLookup; import baritone.utils.IRenderer; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index d5b4f5bfc..19f1243b2 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -20,13 +20,13 @@ import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.Settings; -import baritone.api.utils.SettingsUtil; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.utils.SettingsUtil; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextFormatting; @@ -39,9 +39,9 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; import static baritone.api.utils.SettingsUtil.settingTypeToString; import static baritone.api.utils.SettingsUtil.settingValueToString; -import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class SetCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/ThisWayCommand.java b/src/main/java/baritone/command/defaults/ThisWayCommand.java index 6073d82be..0c10bba30 100644 --- a/src/main/java/baritone/command/defaults/ThisWayCommand.java +++ b/src/main/java/baritone/command/defaults/ThisWayCommand.java @@ -18,10 +18,10 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalXZ; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalXZ; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/TunnelCommand.java b/src/main/java/baritone/command/defaults/TunnelCommand.java index 6f7304a6a..711ba160e 100644 --- a/src/main/java/baritone/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/command/defaults/TunnelCommand.java @@ -77,7 +77,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { default: throw new IllegalStateException("Unexpected value: " + enumFacing); } - logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height+1, width+1, depth)); + logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height + 1, width + 1, depth)); baritone.getBuilderProcess().clearArea(corner1, corner2); } } else { diff --git a/src/main/java/baritone/command/defaults/VersionCommand.java b/src/main/java/baritone/command/defaults/VersionCommand.java index b7882d7d7..c8e13558b 100644 --- a/src/main/java/baritone/command/defaults/VersionCommand.java +++ b/src/main/java/baritone/command/defaults/VersionCommand.java @@ -19,9 +19,9 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 67aad3654..5d964da42 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -20,18 +20,18 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.cache.Waypoint; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalBlock; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForWaypoints; import baritone.api.command.datatypes.RelativeBlockPos; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.utils.BetterBlockPos; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextFormatting; diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index eea23905e..c54216568 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -25,8 +25,8 @@ import baritone.api.utils.Helper; import baritone.api.utils.PathCalculationResult; import baritone.pathing.movement.CalculationContext; -import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import baritone.utils.NotificationHelper; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import java.util.Optional; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 619d98c42..c49e2f6bc 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -67,24 +67,24 @@ protected boolean safeToCancel(MovementState state) { double y = player.posY - 1; double z = player.posZ; //standard - if (ctx.playerFeet().equals(src)){ + if (ctx.playerFeet().equals(src)) { return true; } //both corners are walkable if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) - && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))){ - return true; + && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { + return true; } //we are in a likely unwalkable corner, check for a supporting block if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) - || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))){ - return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); + || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { + return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); } return true; - } + } @Override public double calculateCost(CalculationContext context) { diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index fd26c290d..e50b710ae 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -654,14 +654,14 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPla if (logMissing && !missing.isEmpty()) { logDirect("Missing materials for at least:"); logDirect(missing.entrySet().stream() - .map(e -> String.format("%sx %s", e.getValue(), e.getKey())) - .collect(Collectors.joining("\n"))); + .map(e -> String.format("%sx %s", e.getValue(), e.getKey())) + .collect(Collectors.joining("\n"))); } if (logMissing && !flowingLiquids.isEmpty()) { logDirect("Unreplaceable liquids at at least:"); logDirect(flowingLiquids.stream() - .map(p -> String.format("%s %s %s", p.x, p.y, p.z)) - .collect(Collectors.joining("\n"))); + .map(p -> String.format("%s %s %s", p.x, p.y, p.z)) + .collect(Collectors.joining("\n"))); } return null; } diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index ca3f02255..8df0bd06e 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -41,7 +41,6 @@ public enum DefaultSchematicFormats implements ISchematicFormat { * The MCEdit schematic specification. Commonly denoted by the ".schematic" file extension. */ MCEDIT("schematic") { - @Override public IStaticSchematic parse(InputStream input) throws IOException { return new MCEditSchematic(CompressedStreamTools.readCompressed(input)); @@ -54,7 +53,6 @@ public IStaticSchematic parse(InputStream input) throws IOException { * @see Sponge Schematic Specification */ SPONGE("schem") { - @Override public IStaticSchematic parse(InputStream input) throws IOException { NBTTagCompound nbt = CompressedStreamTools.readCompressed(input); From 37cd50d4356fcb10a3165054a1921df84bc37ccf Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 29 Jan 2021 20:28:11 -0800 Subject: [PATCH 157/935] a long overdue reformat of every file --- src/api/java/baritone/api/IBaritone.java | 2 +- .../java/baritone/api/IBaritoneProvider.java | 2 +- .../baritone/api/cache/IWorldScanner.java | 2 +- .../java/baritone/api/command/Command.java | 3 +-- .../command/argparser/IArgParserManager.java | 4 ++-- .../api/command/argument/IArgConsumer.java | 10 +++++----- .../command/argument/ICommandArgument.java | 2 +- .../datatypes/ForBlockOptionalMeta.java | 2 +- .../api/command/datatypes/ForDirection.java | 2 +- .../api/command/datatypes/ForWaypoints.java | 2 +- .../command/datatypes/IDatatypeContext.java | 3 +-- .../api/command/datatypes/IDatatypeFor.java | 3 +-- .../command/datatypes/RelativeBlockPos.java | 2 +- .../api/command/datatypes/RelativeGoal.java | 5 +---- .../command/datatypes/RelativeGoalBlock.java | 2 +- .../api/command/datatypes/RelativeGoalXZ.java | 2 +- .../command/datatypes/RelativeGoalYLevel.java | 2 +- .../exception/CommandUnhandledException.java | 2 +- .../command/exception/ICommandException.java | 2 +- .../api/command/helpers/Paginator.java | 4 ++-- .../command/helpers/TabCompleteHelper.java | 5 ++--- .../api/event/events/PacketEvent.java | 2 +- .../api/event/events/TabCompleteEvent.java | 1 - .../api/schematic/IStaticSchematic.java | 3 +-- .../baritone/api/utils/BlockOptionalMeta.java | 3 ++- .../baritone/api/utils/IPlayerController.java | 2 +- .../launch/mixins/MixinLivingEntity.java | 1 - src/main/java/baritone/Baritone.java | 2 +- src/main/java/baritone/BaritoneProvider.java | 2 +- src/main/java/baritone/KeepName.java | 2 +- .../java/baritone/cache/WorldScanner.java | 1 - .../java/baritone/command/CommandSystem.java | 2 +- .../command/ExampleBaritoneControl.java | 12 ++++++------ .../command/argument/ArgConsumer.java | 2 +- .../command/argument/CommandArgument.java | 2 +- .../command/argument/CommandArguments.java | 6 +++--- .../command/defaults/AxisCommand.java | 6 +++--- .../command/defaults/BlacklistCommand.java | 4 ++-- .../command/defaults/BuildCommand.java | 1 - .../command/defaults/ChestsCommand.java | 4 ++-- .../command/defaults/ClickCommand.java | 2 +- .../command/defaults/ComeCommand.java | 4 ++-- .../command/defaults/ExploreCommand.java | 4 ++-- .../defaults/ExploreFilterCommand.java | 2 +- .../command/defaults/FarmCommand.java | 9 ++------- .../command/defaults/FindCommand.java | 4 ++-- .../command/defaults/FollowCommand.java | 2 +- .../command/defaults/ForceCancelCommand.java | 2 +- .../baritone/command/defaults/GcCommand.java | 2 +- .../command/defaults/GoalCommand.java | 8 ++++---- .../command/defaults/GotoCommand.java | 2 +- .../command/defaults/HelpCommand.java | 2 +- .../command/defaults/InvertCommand.java | 8 ++++---- .../command/defaults/MineCommand.java | 4 ++-- .../command/defaults/PathCommand.java | 2 +- .../command/defaults/ProcCommand.java | 8 ++++---- .../command/defaults/ReloadAllCommand.java | 2 +- .../command/defaults/RenderCommand.java | 4 ++-- .../command/defaults/RepackCommand.java | 2 +- .../command/defaults/SaveAllCommand.java | 2 +- .../command/defaults/SchematicaCommand.java | 2 +- .../baritone/command/defaults/SelCommand.java | 19 +++++++++---------- .../baritone/command/defaults/SetCommand.java | 6 +++--- .../command/defaults/ThisWayCommand.java | 4 ++-- .../command/defaults/TunnelCommand.java | 2 +- .../command/defaults/VersionCommand.java | 2 +- .../command/defaults/WaypointsCommand.java | 8 ++++---- .../pathing/calc/AbstractNodeCostSearch.java | 2 +- .../pathing/movement/MovementState.java | 2 -- .../movement/movements/MovementAscend.java | 3 ++- .../baritone/pathing/path/PathExecutor.java | 1 - .../java/baritone/utils/BaritoneAutoTest.java | 5 ++++- .../utils/schematic/MapArtSchematic.java | 4 ++-- .../format/DefaultSchematicFormats.java | 2 -- 74 files changed, 120 insertions(+), 138 deletions(-) diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 64c4a2918..0cc73b0d1 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -20,13 +20,13 @@ import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.IPathingBehavior; import baritone.api.cache.IWorldProvider; +import baritone.api.command.manager.ICommandManager; import baritone.api.event.listener.IEventBus; import baritone.api.pathing.calc.IPathingControlManager; import baritone.api.process.*; import baritone.api.selection.ISelectionManager; import baritone.api.utils.IInputOverrideHandler; import baritone.api.utils.IPlayerContext; -import baritone.api.command.manager.ICommandManager; /** * @author Brady diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 697f25dc6..e4f2ffc30 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -20,8 +20,8 @@ import baritone.api.cache.IWorldScanner; import baritone.api.command.ICommand; import baritone.api.command.ICommandSystem; -import net.minecraft.client.entity.player.ClientPlayerEntity; import baritone.api.schematic.ISchematicSystem; +import net.minecraft.client.entity.player.ClientPlayerEntity; import java.util.List; import java.util.Objects; diff --git a/src/api/java/baritone/api/cache/IWorldScanner.java b/src/api/java/baritone/api/cache/IWorldScanner.java index 224f64c76..bc3064608 100644 --- a/src/api/java/baritone/api/cache/IWorldScanner.java +++ b/src/api/java/baritone/api/cache/IWorldScanner.java @@ -88,7 +88,7 @@ default List scanChunk(IPlayerContext ctx, List blocks, ChunkPo * Queues the chunks in a square formation around the specified player, using the specified * range, which represents 1/2 the square's dimensions, where the player is in the center. * - * @param ctx The player, describing the origin + * @param ctx The player, describing the origin * @param range The range to repack * @return The amount of chunks successfully queued for repacking */ diff --git a/src/api/java/baritone/api/command/Command.java b/src/api/java/baritone/api/command/Command.java index 4db5c0f3f..c81a3365b 100644 --- a/src/api/java/baritone/api/command/Command.java +++ b/src/api/java/baritone/api/command/Command.java @@ -34,9 +34,8 @@ * So basically, you should use it because it provides a small amount of boilerplate, * but you're not forced to use it. * - * @see ICommand - * * @author LoganDark + * @see ICommand */ public abstract class Command implements ICommand { diff --git a/src/api/java/baritone/api/command/argparser/IArgParserManager.java b/src/api/java/baritone/api/command/argparser/IArgParserManager.java index f38b4624d..d5c36adb3 100644 --- a/src/api/java/baritone/api/command/argparser/IArgParserManager.java +++ b/src/api/java/baritone/api/command/argparser/IArgParserManager.java @@ -46,8 +46,8 @@ public interface IArgParserManager { /** * Attempt to parse the specified argument with a stateless {@link IArgParser} that outputs the specified class. * - * @param type The type to try and parse the argument into. - * @param arg The argument to parse. + * @param type The type to try and parse the argument into. + * @param arg The argument to parse. * @return An instance of the specified class. * @throws CommandInvalidTypeException If the parsing failed */ diff --git a/src/api/java/baritone/api/command/argument/IArgConsumer.java b/src/api/java/baritone/api/command/argument/IArgConsumer.java index 0a028daa7..4435b36e1 100644 --- a/src/api/java/baritone/api/command/argument/IArgConsumer.java +++ b/src/api/java/baritone/api/command/argument/IArgConsumer.java @@ -18,8 +18,6 @@ package baritone.api.command.argument; import baritone.api.command.ICommand; -import baritone.api.command.exception.CommandTooManyArgumentsException; -import baritone.api.utils.Helper; import baritone.api.command.argparser.IArgParser; import baritone.api.command.datatypes.IDatatype; import baritone.api.command.datatypes.IDatatypeFor; @@ -27,6 +25,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandTooManyArgumentsException; +import baritone.api.utils.Helper; import net.minecraft.util.Direction; import java.util.Deque; @@ -223,7 +223,7 @@ public interface IArgConsumer { * @param type The type to peek as * @param index The index to peek * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #peekAs(Class) * @see #peekAsOrDefault(Class, Object, int) @@ -240,7 +240,7 @@ public interface IArgConsumer { * * @param type The type to peek as * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #peekAs(Class, int) * @see #peekAsOrDefault(Class, Object) @@ -458,7 +458,7 @@ public interface IArgConsumer { * * @param type The type to peek as * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #get() * @see #getAsOrDefault(Class, Object) diff --git a/src/api/java/baritone/api/command/argument/ICommandArgument.java b/src/api/java/baritone/api/command/argument/ICommandArgument.java index 42a3622ea..341e9d1f6 100644 --- a/src/api/java/baritone/api/command/argument/ICommandArgument.java +++ b/src/api/java/baritone/api/command/argument/ICommandArgument.java @@ -87,7 +87,7 @@ public interface ICommandArgument { * * @param type The class to parse this argument into * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed */ T getAs(Class type, Class stateType, S state) throws CommandInvalidTypeException; diff --git a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java index 29dc5f0b7..978450a23 100644 --- a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java +++ b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java @@ -17,8 +17,8 @@ package baritone.api.command.datatypes; -import baritone.api.utils.BlockOptionalMeta; import baritone.api.command.exception.CommandException; +import baritone.api.utils.BlockOptionalMeta; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/ForDirection.java b/src/api/java/baritone/api/command/datatypes/ForDirection.java index cbfce3f20..b5a7a3e7e 100644 --- a/src/api/java/baritone/api/command/datatypes/ForDirection.java +++ b/src/api/java/baritone/api/command/datatypes/ForDirection.java @@ -17,8 +17,8 @@ package baritone.api.command.datatypes; -import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.util.Direction; import java.util.Locale; diff --git a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java index 208786987..061428827 100644 --- a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java +++ b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java @@ -20,8 +20,8 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.cache.IWaypointCollection; -import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import java.util.Comparator; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java b/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java index 78358a262..f0d1b5636 100644 --- a/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java @@ -24,9 +24,8 @@ * Provides an {@link IDatatype} with contextual information so * that it can perform the desired operation on the target level. * - * @see IDatatype - * * @author Brady + * @see IDatatype * @since 9/26/2019 */ public interface IDatatypeContext { diff --git a/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java b/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java index 2f0a9c140..854fe6869 100644 --- a/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java @@ -34,11 +34,10 @@ public interface IDatatypeFor extends IDatatype { * if the expected input does not conform to a parseable value. As far as a {@link CommandException} being * thrown is concerned, see the note below for specifics. * - * @see IDatatypeContext - * * @param ctx The context * @return The parsed data-type * @throws CommandException If there was an issue parsing using another type or arguments could not be polled. + * @see IDatatypeContext */ T get(IDatatypeContext ctx) throws CommandException; } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java b/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java index 082b649eb..31ae97273 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java @@ -18,8 +18,8 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.exception.CommandException; +import baritone.api.utils.BetterBlockPos; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoal.java b/src/api/java/baritone/api/command/datatypes/RelativeGoal.java index 19312907e..0b602e9e9 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoal.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoal.java @@ -18,16 +18,13 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalXZ; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; -import net.minecraft.util.math.MathHelper; -import java.util.ArrayList; -import java.util.List; import java.util.stream.Stream; public enum RelativeGoal implements IDatatypePost { diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java index ae05c6ade..ccc45cafa 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java index c50aab015..747509f5e 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java index 58d093f1b..cd1a4c5d4 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java index 02987d4ee..5dce59313 100644 --- a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -38,7 +38,7 @@ public CommandUnhandledException(Throwable cause) { @Override public void handle(ICommand command, List args) { HELPER.logDirect("An unhandled exception occurred. " + - "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", + "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", TextFormatting.RED); this.printStackTrace(); diff --git a/src/api/java/baritone/api/command/exception/ICommandException.java b/src/api/java/baritone/api/command/exception/ICommandException.java index 58d130496..b521a2e6b 100644 --- a/src/api/java/baritone/api/command/exception/ICommandException.java +++ b/src/api/java/baritone/api/command/exception/ICommandException.java @@ -38,8 +38,8 @@ public interface ICommandException { /** - * @see Exception#getMessage() * @return The exception details + * @see Exception#getMessage() */ String getMessage(); diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index a97d38dfa..5a97ce00e 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -17,10 +17,10 @@ package baritone.api.command.helpers; -import baritone.api.utils.Helper; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.Helper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; diff --git a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java index 6274c6836..54ae9e8c4 100644 --- a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java @@ -19,10 +19,10 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; -import baritone.api.event.events.TabCompleteEvent; -import baritone.api.utils.SettingsUtil; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.manager.ICommandManager; +import baritone.api.event.events.TabCompleteEvent; +import baritone.api.utils.SettingsUtil; import net.minecraft.util.ResourceLocation; import java.util.Comparator; @@ -236,7 +236,6 @@ public Stream stream() { * Appends every command in the specified {@link ICommandManager} to this {@link TabCompleteHelper} * * @param manager A command manager - * * @return This {@link TabCompleteHelper} */ public TabCompleteHelper addCommands(ICommandManager manager) { diff --git a/src/api/java/baritone/api/event/events/PacketEvent.java b/src/api/java/baritone/api/event/events/PacketEvent.java index b65545f24..43c61a1a9 100644 --- a/src/api/java/baritone/api/event/events/PacketEvent.java +++ b/src/api/java/baritone/api/event/events/PacketEvent.java @@ -18,8 +18,8 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; -import net.minecraft.network.NetworkManager; import net.minecraft.network.IPacket; +import net.minecraft.network.NetworkManager; /** * @author Brady diff --git a/src/api/java/baritone/api/event/events/TabCompleteEvent.java b/src/api/java/baritone/api/event/events/TabCompleteEvent.java index 2a0ef87ba..268cf62bf 100644 --- a/src/api/java/baritone/api/event/events/TabCompleteEvent.java +++ b/src/api/java/baritone/api/event/events/TabCompleteEvent.java @@ -18,7 +18,6 @@ package baritone.api.event.events; import baritone.api.event.events.type.Cancellable; -import baritone.api.event.events.type.Overrideable; /** * @author LoganDark diff --git a/src/api/java/baritone/api/schematic/IStaticSchematic.java b/src/api/java/baritone/api/schematic/IStaticSchematic.java index e0872ede3..0389d8bc7 100644 --- a/src/api/java/baritone/api/schematic/IStaticSchematic.java +++ b/src/api/java/baritone/api/schematic/IStaticSchematic.java @@ -22,10 +22,9 @@ /** * A static schematic is capable of providing the desired state at a given position without * additional context. Schematics of this type are expected to have non-varying contents. - * - * @see #getDirect(int, int, int) * * @author Brady + * @see #getDirect(int, int, int) * @since 12/24/2019 */ public interface IStaticSchematic extends ISchematic { diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index a1b38cca1..73ebb77c4 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -20,7 +20,8 @@ import baritone.api.utils.accessor.IItemStack; import com.google.common.collect.ImmutableSet; import io.netty.util.concurrent.ThreadPerTaskExecutor; -import net.minecraft.block.*; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.resources.*; diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index 06e031327..58579b18e 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -17,10 +17,10 @@ package baritone.api.utils; +import baritone.api.BaritoneAPI; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.ClickType; -import baritone.api.BaritoneAPI; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index 45c5d4643..a3536ff55 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -24,7 +24,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index a3457ba56..44bccf2bb 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -25,11 +25,11 @@ import baritone.api.utils.IPlayerContext; import baritone.behavior.*; import baritone.cache.WorldProvider; +import baritone.command.manager.CommandManager; import baritone.event.GameEventHandler; import baritone.process.*; import baritone.selection.SelectionManager; import baritone.utils.*; -import baritone.command.manager.CommandManager; import baritone.utils.player.PrimaryPlayerContext; import net.minecraft.client.Minecraft; diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index 6f64a8350..d5457cf85 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -22,9 +22,9 @@ import baritone.api.cache.IWorldScanner; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; -import baritone.command.ExampleBaritoneControl; import baritone.cache.WorldScanner; import baritone.command.CommandSystem; +import baritone.command.ExampleBaritoneControl; import baritone.utils.schematic.SchematicSystem; import java.util.Collections; diff --git a/src/main/java/baritone/KeepName.java b/src/main/java/baritone/KeepName.java index 20f08e7b8..7fc04cd68 100644 --- a/src/main/java/baritone/KeepName.java +++ b/src/main/java/baritone/KeepName.java @@ -18,4 +18,4 @@ package baritone; // Annotation for classes and class members that should not be renamed by proguard -public @interface KeepName { } +public @interface KeepName {} diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 35297a470..8d72134b2 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -30,7 +30,6 @@ import net.minecraft.world.chunk.AbstractChunkProvider; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkSection; -import net.minecraft.world.chunk.IChunk; import java.util.*; import java.util.stream.IntStream; diff --git a/src/main/java/baritone/command/CommandSystem.java b/src/main/java/baritone/command/CommandSystem.java index 49d3685c1..943e0951d 100644 --- a/src/main/java/baritone/command/CommandSystem.java +++ b/src/main/java/baritone/command/CommandSystem.java @@ -18,8 +18,8 @@ package baritone.command; import baritone.api.command.ICommandSystem; -import baritone.command.argparser.ArgParserManager; import baritone.api.command.argparser.IArgParserManager; +import baritone.command.argparser.ArgParserManager; /** * @author Brady diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index 16207876f..b132d3e7a 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -20,20 +20,20 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.Settings; -import baritone.utils.accessor.IGuiScreen; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandNotFoundException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.command.manager.ICommandManager; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.TabCompleteEvent; import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.utils.Helper; import baritone.api.utils.SettingsUtil; -import baritone.api.command.argument.ICommandArgument; -import baritone.api.command.exception.CommandNotEnoughArgumentsException; -import baritone.api.command.exception.CommandNotFoundException; import baritone.command.argument.ArgConsumer; -import baritone.api.command.helpers.TabCompleteHelper; -import baritone.api.command.manager.ICommandManager; import baritone.command.argument.CommandArguments; import baritone.command.manager.CommandManager; +import baritone.utils.accessor.IGuiScreen; import net.minecraft.util.Tuple; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; diff --git a/src/main/java/baritone/command/argument/ArgConsumer.java b/src/main/java/baritone/command/argument/ArgConsumer.java index f4e7dd524..4a80681dd 100644 --- a/src/main/java/baritone/command/argument/ArgConsumer.java +++ b/src/main/java/baritone/command/argument/ArgConsumer.java @@ -18,6 +18,7 @@ package baritone.command.argument; import baritone.api.IBaritone; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.ICommandArgument; import baritone.api.command.datatypes.IDatatype; import baritone.api.command.datatypes.IDatatypeContext; @@ -27,7 +28,6 @@ import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandNotEnoughArgumentsException; import baritone.api.command.exception.CommandTooManyArgumentsException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.manager.ICommandManager; import java.util.ArrayList; diff --git a/src/main/java/baritone/command/argument/CommandArgument.java b/src/main/java/baritone/command/argument/CommandArgument.java index 3ce6cda82..a40ae1d53 100644 --- a/src/main/java/baritone/command/argument/CommandArgument.java +++ b/src/main/java/baritone/command/argument/CommandArgument.java @@ -17,9 +17,9 @@ package baritone.command.argument; -import baritone.command.argparser.ArgParserManager; import baritone.api.command.argument.ICommandArgument; import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.command.argparser.ArgParserManager; import java.util.stream.Stream; diff --git a/src/main/java/baritone/command/argument/CommandArguments.java b/src/main/java/baritone/command/argument/CommandArguments.java index 8d26acb48..22a2ef887 100644 --- a/src/main/java/baritone/command/argument/CommandArguments.java +++ b/src/main/java/baritone/command/argument/CommandArguments.java @@ -48,9 +48,9 @@ public static List from(String string, boolean preserveEmptyLa int lastEnd = -1; while (argMatcher.find()) { args.add(new CommandArgument( - args.size(), - argMatcher.group(), - string.substring(argMatcher.start()) + args.size(), + argMatcher.group(), + string.substring(argMatcher.start()) )); lastEnd = argMatcher.end(); } diff --git a/src/main/java/baritone/command/defaults/AxisCommand.java b/src/main/java/baritone/command/defaults/AxisCommand.java index 0a92ac6e7..2ff98ed34 100644 --- a/src/main/java/baritone/command/defaults/AxisCommand.java +++ b/src/main/java/baritone/command/defaults/AxisCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalAxis; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalAxis; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/BlacklistCommand.java b/src/main/java/baritone/command/defaults/BlacklistCommand.java index a383e0a79..fe49477f4 100644 --- a/src/main/java/baritone/command/defaults/BlacklistCommand.java +++ b/src/main/java/baritone/command/defaults/BlacklistCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.process.IGetToBlockProcess; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.process.IGetToBlockProcess; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/BuildCommand.java b/src/main/java/baritone/command/defaults/BuildCommand.java index aa6723c27..75c1673d4 100644 --- a/src/main/java/baritone/command/defaults/BuildCommand.java +++ b/src/main/java/baritone/command/defaults/BuildCommand.java @@ -26,7 +26,6 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.utils.BetterBlockPos; -import net.minecraft.client.Minecraft; import org.apache.commons.io.FilenameUtils; import java.io.File; diff --git a/src/main/java/baritone/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java index fd084ad17..b4dcda749 100644 --- a/src/main/java/baritone/command/defaults/ChestsCommand.java +++ b/src/main/java/baritone/command/defaults/ChestsCommand.java @@ -19,11 +19,11 @@ import baritone.api.IBaritone; import baritone.api.cache.IRememberedInventory; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BetterBlockPos; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; diff --git a/src/main/java/baritone/command/defaults/ClickCommand.java b/src/main/java/baritone/command/defaults/ClickCommand.java index b882c5879..8875a3723 100644 --- a/src/main/java/baritone/command/defaults/ClickCommand.java +++ b/src/main/java/baritone/command/defaults/ClickCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index b8033c3fb..5d3e3b829 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalBlock; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.GoalBlock; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/baritone/command/defaults/ExploreCommand.java b/src/main/java/baritone/command/defaults/ExploreCommand.java index 9d27bbbe9..0b147c354 100644 --- a/src/main/java/baritone/command/defaults/ExploreCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalXZ; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeGoalXZ; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.GoalXZ; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java index b4ee393a9..c2057551f 100644 --- a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java @@ -19,11 +19,11 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeFile; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import com.google.gson.JsonSyntaxException; import java.io.File; diff --git a/src/main/java/baritone/command/defaults/FarmCommand.java b/src/main/java/baritone/command/defaults/FarmCommand.java index 1903f89f3..f8bbc0c0c 100644 --- a/src/main/java/baritone/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/command/defaults/FarmCommand.java @@ -20,21 +20,16 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForWaypoints; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.helpers.Paginator; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; -import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; - public class FarmCommand extends Command { public FarmCommand(IBaritone baritone) { @@ -51,7 +46,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { range = args.getAs(Integer.class); } //waypoint - if (args.has(1)){ + if (args.has(1)) { IWaypoint[] waypoints = args.getDatatypeFor(ForWaypoints.INSTANCE); IWaypoint waypoint = null; switch (waypoints.length) { diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 28c461912..a415b9b15 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BetterBlockPos; import net.minecraft.block.Block; import net.minecraft.util.registry.Registry; diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index 3fd997ec8..50844165e 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -20,11 +20,11 @@ import baritone.KeepName; import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.EntityClassById; import baritone.api.command.datatypes.IDatatypeFor; import baritone.api.command.datatypes.NearbyPlayer; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index 8344f4f9f..513d61bcb 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -20,8 +20,8 @@ import baritone.api.IBaritone; import baritone.api.behavior.IPathingBehavior; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GcCommand.java b/src/main/java/baritone/command/defaults/GcCommand.java index 143da5792..7e4d4fa96 100644 --- a/src/main/java/baritone/command/defaults/GcCommand.java +++ b/src/main/java/baritone/command/defaults/GcCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GoalCommand.java b/src/main/java/baritone/command/defaults/GoalCommand.java index a75af077b..40822e057 100644 --- a/src/main/java/baritone/command/defaults/GoalCommand.java +++ b/src/main/java/baritone/command/defaults/GoalCommand.java @@ -18,15 +18,15 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.process.ICustomGoalProcess; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeGoal; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.process.ICustomGoalProcess; +import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GotoCommand.java b/src/main/java/baritone/command/defaults/GotoCommand.java index a6fe4e22b..896e3f5f8 100644 --- a/src/main/java/baritone/command/defaults/GotoCommand.java +++ b/src/main/java/baritone/command/defaults/GotoCommand.java @@ -19,12 +19,12 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeGoal; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.pathing.goals.Goal; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMeta; diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index f92039860..b1844495c 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -20,9 +20,9 @@ import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.ICommand; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandNotFoundException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.util.text.ITextComponent; diff --git a/src/main/java/baritone/command/defaults/InvertCommand.java b/src/main/java/baritone/command/defaults/InvertCommand.java index 9e3e859eb..e8bdf50d8 100644 --- a/src/main/java/baritone/command/defaults/InvertCommand.java +++ b/src/main/java/baritone/command/defaults/InvertCommand.java @@ -18,13 +18,13 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalInverted; -import baritone.api.process.ICustomGoalProcess; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalInverted; +import baritone.api.process.ICustomGoalProcess; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 2baf982af..63712fe3e 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -18,12 +18,12 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BlockOptionalMeta; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BlockOptionalMeta; import baritone.cache.WorldScanner; import java.util.ArrayList; diff --git a/src/main/java/baritone/command/defaults/PathCommand.java b/src/main/java/baritone/command/defaults/PathCommand.java index 0add64080..182a1e5bc 100644 --- a/src/main/java/baritone/command/defaults/PathCommand.java +++ b/src/main/java/baritone/command/defaults/PathCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.process.ICustomGoalProcess; import baritone.cache.WorldScanner; diff --git a/src/main/java/baritone/command/defaults/ProcCommand.java b/src/main/java/baritone/command/defaults/ProcCommand.java index cf9371bc8..1652a9917 100644 --- a/src/main/java/baritone/command/defaults/ProcCommand.java +++ b/src/main/java/baritone/command/defaults/ProcCommand.java @@ -18,13 +18,13 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.calc.IPathingControlManager; -import baritone.api.process.IBaritoneProcess; -import baritone.api.process.PathingCommand; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.calc.IPathingControlManager; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.PathingCommand; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ReloadAllCommand.java b/src/main/java/baritone/command/defaults/ReloadAllCommand.java index fa8d51175..39396a9c0 100644 --- a/src/main/java/baritone/command/defaults/ReloadAllCommand.java +++ b/src/main/java/baritone/command/defaults/ReloadAllCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java index 64c9e4fb3..a77add6e6 100644 --- a/src/main/java/baritone/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -18,10 +18,10 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/RepackCommand.java b/src/main/java/baritone/command/defaults/RepackCommand.java index 6366fbc92..cafbea524 100644 --- a/src/main/java/baritone/command/defaults/RepackCommand.java +++ b/src/main/java/baritone/command/defaults/RepackCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.cache.WorldScanner; import java.util.Arrays; diff --git a/src/main/java/baritone/command/defaults/SaveAllCommand.java b/src/main/java/baritone/command/defaults/SaveAllCommand.java index 5f064a72f..de416c60d 100644 --- a/src/main/java/baritone/command/defaults/SaveAllCommand.java +++ b/src/main/java/baritone/command/defaults/SaveAllCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/SchematicaCommand.java b/src/main/java/baritone/command/defaults/SchematicaCommand.java index 8279b1dc5..ae5cac47f 100644 --- a/src/main/java/baritone/command/defaults/SchematicaCommand.java +++ b/src/main/java/baritone/command/defaults/SchematicaCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 773b6812d..4a8e7bb71 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -19,24 +19,23 @@ import baritone.Baritone; import baritone.api.IBaritone; -import baritone.api.event.events.RenderEvent; -import baritone.api.event.listener.AbstractGameEventListener; -import baritone.api.schematic.*; -import baritone.api.selection.ISelection; -import baritone.api.selection.ISelectionManager; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.BlockOptionalMeta; -import baritone.api.utils.BlockOptionalMetaLookup; -import baritone.api.schematic.ISchematic; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.ForDirection; import baritone.api.command.datatypes.RelativeBlockPos; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.event.events.RenderEvent; +import baritone.api.event.listener.AbstractGameEventListener; +import baritone.api.schematic.*; +import baritone.api.selection.ISelection; +import baritone.api.selection.ISelectionManager; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMeta; +import baritone.api.utils.BlockOptionalMetaLookup; import baritone.utils.IRenderer; import net.minecraft.block.Blocks; import net.minecraft.util.Direction; diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 06e443bcb..9319dc9df 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -20,13 +20,13 @@ import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.Settings; -import baritone.api.utils.SettingsUtil; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.utils.SettingsUtil; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; @@ -39,9 +39,9 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; import static baritone.api.utils.SettingsUtil.settingTypeToString; import static baritone.api.utils.SettingsUtil.settingValueToString; -import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class SetCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/ThisWayCommand.java b/src/main/java/baritone/command/defaults/ThisWayCommand.java index 6073d82be..0c10bba30 100644 --- a/src/main/java/baritone/command/defaults/ThisWayCommand.java +++ b/src/main/java/baritone/command/defaults/ThisWayCommand.java @@ -18,10 +18,10 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalXZ; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalXZ; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/TunnelCommand.java b/src/main/java/baritone/command/defaults/TunnelCommand.java index 3cce423a5..e7852dd05 100644 --- a/src/main/java/baritone/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/command/defaults/TunnelCommand.java @@ -77,7 +77,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { default: throw new IllegalStateException("Unexpected value: " + enumFacing); } - logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height+1, width+1, depth)); + logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height + 1, width + 1, depth)); baritone.getBuilderProcess().clearArea(corner1, corner2); } } else { diff --git a/src/main/java/baritone/command/defaults/VersionCommand.java b/src/main/java/baritone/command/defaults/VersionCommand.java index b7882d7d7..c8e13558b 100644 --- a/src/main/java/baritone/command/defaults/VersionCommand.java +++ b/src/main/java/baritone/command/defaults/VersionCommand.java @@ -19,9 +19,9 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index eb431be9a..acb33c9df 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -20,18 +20,18 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.cache.Waypoint; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalBlock; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForWaypoints; import baritone.api.command.datatypes.RelativeBlockPos; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.utils.BetterBlockPos; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index eea23905e..c54216568 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -25,8 +25,8 @@ import baritone.api.utils.Helper; import baritone.api.utils.PathCalculationResult; import baritone.pathing.movement.CalculationContext; -import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import baritone.utils.NotificationHelper; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import java.util.Optional; diff --git a/src/main/java/baritone/pathing/movement/MovementState.java b/src/main/java/baritone/pathing/movement/MovementState.java index 4cd2d7dfd..73539698a 100644 --- a/src/main/java/baritone/pathing/movement/MovementState.java +++ b/src/main/java/baritone/pathing/movement/MovementState.java @@ -20,8 +20,6 @@ import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.Rotation; import baritone.api.utils.input.Input; -import net.minecraft.client.Minecraft; -import net.minecraft.util.registry.Registry; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 1e702225e..e51482739 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -27,11 +27,12 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; +import com.google.common.collect.ImmutableSet; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.FallingBlock; import net.minecraft.util.Direction; -import com.google.common.collect.ImmutableSet; + import java.util.Set; public class MovementAscend extends Movement { diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 451b0bdc1..ab2cc5282 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -32,7 +32,6 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.movements.*; import baritone.utils.BlockStateInterface; -import net.minecraft.block.Blocks; import net.minecraft.util.Tuple; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index f0a29dfda..8dfc554ed 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -35,7 +35,10 @@ import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.util.HTTPUtil; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.*; +import net.minecraft.world.Difficulty; +import net.minecraft.world.GameType; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.WorldType; import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.server.ServerWorld; diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index c14ddc5ac..3af7e4c20 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -17,10 +17,10 @@ package baritone.utils.schematic; -import net.minecraft.block.AirBlock; -import net.minecraft.block.BlockState; import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.MaskSchematic; +import net.minecraft.block.AirBlock; +import net.minecraft.block.BlockState; import java.util.OptionalInt; import java.util.function.Predicate; diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 693e90af3..15aa281a9 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -41,7 +41,6 @@ public enum DefaultSchematicFormats implements ISchematicFormat { * The MCEdit schematic specification. Commonly denoted by the ".schematic" file extension. */ MCEDIT("schematic") { - @Override public IStaticSchematic parse(InputStream input) throws IOException { return new MCEditSchematic(CompressedStreamTools.readCompressed(input)); @@ -54,7 +53,6 @@ public IStaticSchematic parse(InputStream input) throws IOException { * @see Sponge Schematic Specification */ SPONGE("schem") { - @Override public IStaticSchematic parse(InputStream input) throws IOException { CompoundNBT nbt = CompressedStreamTools.readCompressed(input); From a3da25ca27c71ee4ac3af8b92c02263121b15be0 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 29 Jan 2021 20:29:41 -0800 Subject: [PATCH 158/935] a long overdue reformat of every file --- src/api/java/baritone/api/IBaritone.java | 2 +- .../java/baritone/api/IBaritoneProvider.java | 2 +- .../baritone/api/cache/IWorldScanner.java | 2 +- .../java/baritone/api/command/Command.java | 3 +-- .../command/argparser/IArgParserManager.java | 4 ++-- .../api/command/argument/IArgConsumer.java | 10 +++++----- .../command/argument/ICommandArgument.java | 2 +- .../datatypes/ForBlockOptionalMeta.java | 2 +- .../api/command/datatypes/ForDirection.java | 2 +- .../api/command/datatypes/ForWaypoints.java | 2 +- .../command/datatypes/IDatatypeContext.java | 3 +-- .../api/command/datatypes/IDatatypeFor.java | 3 +-- .../command/datatypes/RelativeBlockPos.java | 2 +- .../api/command/datatypes/RelativeGoal.java | 5 +---- .../command/datatypes/RelativeGoalBlock.java | 2 +- .../api/command/datatypes/RelativeGoalXZ.java | 2 +- .../command/datatypes/RelativeGoalYLevel.java | 2 +- .../exception/CommandUnhandledException.java | 2 +- .../command/exception/ICommandException.java | 2 +- .../api/command/helpers/Paginator.java | 4 ++-- .../command/helpers/TabCompleteHelper.java | 5 ++--- .../api/event/events/PacketEvent.java | 2 +- .../api/event/events/TabCompleteEvent.java | 1 - .../api/schematic/IStaticSchematic.java | 3 +-- .../baritone/api/utils/BlockOptionalMeta.java | 17 ++++++++--------- .../baritone/api/utils/IPlayerController.java | 2 +- .../launch/mixins/MixinLivingEntity.java | 1 - src/main/java/baritone/Baritone.java | 2 +- src/main/java/baritone/BaritoneProvider.java | 2 +- src/main/java/baritone/KeepName.java | 2 +- .../java/baritone/command/CommandSystem.java | 2 +- .../command/ExampleBaritoneControl.java | 12 ++++++------ .../command/argument/CommandArgument.java | 2 +- .../command/argument/CommandArguments.java | 6 +++--- .../command/defaults/AxisCommand.java | 6 +++--- .../command/defaults/BlacklistCommand.java | 4 ++-- .../command/defaults/BuildCommand.java | 1 - .../command/defaults/ChestsCommand.java | 4 ++-- .../command/defaults/ClickCommand.java | 2 +- .../command/defaults/ComeCommand.java | 4 ++-- .../command/defaults/ExploreCommand.java | 4 ++-- .../defaults/ExploreFilterCommand.java | 2 +- .../command/defaults/FarmCommand.java | 9 ++------- .../command/defaults/FindCommand.java | 4 ++-- .../command/defaults/FollowCommand.java | 2 +- .../command/defaults/ForceCancelCommand.java | 2 +- .../baritone/command/defaults/GcCommand.java | 2 +- .../command/defaults/GoalCommand.java | 8 ++++---- .../command/defaults/GotoCommand.java | 2 +- .../command/defaults/HelpCommand.java | 2 +- .../command/defaults/InvertCommand.java | 8 ++++---- .../command/defaults/MineCommand.java | 4 ++-- .../command/defaults/PathCommand.java | 2 +- .../command/defaults/ProcCommand.java | 8 ++++---- .../command/defaults/ReloadAllCommand.java | 2 +- .../command/defaults/RenderCommand.java | 4 ++-- .../command/defaults/RepackCommand.java | 2 +- .../command/defaults/SaveAllCommand.java | 2 +- .../command/defaults/SchematicaCommand.java | 2 +- .../baritone/command/defaults/SelCommand.java | 19 +++++++++---------- .../baritone/command/defaults/SetCommand.java | 6 +++--- .../command/defaults/ThisWayCommand.java | 4 ++-- .../command/defaults/TunnelCommand.java | 2 +- .../command/defaults/VersionCommand.java | 2 +- .../command/defaults/WaypointsCommand.java | 8 ++++---- .../pathing/calc/AbstractNodeCostSearch.java | 2 +- .../pathing/movement/MovementState.java | 2 -- .../movement/movements/MovementAscend.java | 3 ++- .../baritone/pathing/path/PathExecutor.java | 1 - .../java/baritone/utils/BaritoneAutoTest.java | 5 ++++- .../utils/schematic/MapArtSchematic.java | 4 ++-- .../format/DefaultSchematicFormats.java | 2 -- 72 files changed, 125 insertions(+), 144 deletions(-) diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 64c4a2918..0cc73b0d1 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -20,13 +20,13 @@ import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.IPathingBehavior; import baritone.api.cache.IWorldProvider; +import baritone.api.command.manager.ICommandManager; import baritone.api.event.listener.IEventBus; import baritone.api.pathing.calc.IPathingControlManager; import baritone.api.process.*; import baritone.api.selection.ISelectionManager; import baritone.api.utils.IInputOverrideHandler; import baritone.api.utils.IPlayerContext; -import baritone.api.command.manager.ICommandManager; /** * @author Brady diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 697f25dc6..e4f2ffc30 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -20,8 +20,8 @@ import baritone.api.cache.IWorldScanner; import baritone.api.command.ICommand; import baritone.api.command.ICommandSystem; -import net.minecraft.client.entity.player.ClientPlayerEntity; import baritone.api.schematic.ISchematicSystem; +import net.minecraft.client.entity.player.ClientPlayerEntity; import java.util.List; import java.util.Objects; diff --git a/src/api/java/baritone/api/cache/IWorldScanner.java b/src/api/java/baritone/api/cache/IWorldScanner.java index 224f64c76..bc3064608 100644 --- a/src/api/java/baritone/api/cache/IWorldScanner.java +++ b/src/api/java/baritone/api/cache/IWorldScanner.java @@ -88,7 +88,7 @@ default List scanChunk(IPlayerContext ctx, List blocks, ChunkPo * Queues the chunks in a square formation around the specified player, using the specified * range, which represents 1/2 the square's dimensions, where the player is in the center. * - * @param ctx The player, describing the origin + * @param ctx The player, describing the origin * @param range The range to repack * @return The amount of chunks successfully queued for repacking */ diff --git a/src/api/java/baritone/api/command/Command.java b/src/api/java/baritone/api/command/Command.java index 4db5c0f3f..c81a3365b 100644 --- a/src/api/java/baritone/api/command/Command.java +++ b/src/api/java/baritone/api/command/Command.java @@ -34,9 +34,8 @@ * So basically, you should use it because it provides a small amount of boilerplate, * but you're not forced to use it. * - * @see ICommand - * * @author LoganDark + * @see ICommand */ public abstract class Command implements ICommand { diff --git a/src/api/java/baritone/api/command/argparser/IArgParserManager.java b/src/api/java/baritone/api/command/argparser/IArgParserManager.java index f38b4624d..d5c36adb3 100644 --- a/src/api/java/baritone/api/command/argparser/IArgParserManager.java +++ b/src/api/java/baritone/api/command/argparser/IArgParserManager.java @@ -46,8 +46,8 @@ public interface IArgParserManager { /** * Attempt to parse the specified argument with a stateless {@link IArgParser} that outputs the specified class. * - * @param type The type to try and parse the argument into. - * @param arg The argument to parse. + * @param type The type to try and parse the argument into. + * @param arg The argument to parse. * @return An instance of the specified class. * @throws CommandInvalidTypeException If the parsing failed */ diff --git a/src/api/java/baritone/api/command/argument/IArgConsumer.java b/src/api/java/baritone/api/command/argument/IArgConsumer.java index 0a028daa7..4435b36e1 100644 --- a/src/api/java/baritone/api/command/argument/IArgConsumer.java +++ b/src/api/java/baritone/api/command/argument/IArgConsumer.java @@ -18,8 +18,6 @@ package baritone.api.command.argument; import baritone.api.command.ICommand; -import baritone.api.command.exception.CommandTooManyArgumentsException; -import baritone.api.utils.Helper; import baritone.api.command.argparser.IArgParser; import baritone.api.command.datatypes.IDatatype; import baritone.api.command.datatypes.IDatatypeFor; @@ -27,6 +25,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandTooManyArgumentsException; +import baritone.api.utils.Helper; import net.minecraft.util.Direction; import java.util.Deque; @@ -223,7 +223,7 @@ public interface IArgConsumer { * @param type The type to peek as * @param index The index to peek * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #peekAs(Class) * @see #peekAsOrDefault(Class, Object, int) @@ -240,7 +240,7 @@ public interface IArgConsumer { * * @param type The type to peek as * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #peekAs(Class, int) * @see #peekAsOrDefault(Class, Object) @@ -458,7 +458,7 @@ public interface IArgConsumer { * * @param type The type to peek as * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #get() * @see #getAsOrDefault(Class, Object) diff --git a/src/api/java/baritone/api/command/argument/ICommandArgument.java b/src/api/java/baritone/api/command/argument/ICommandArgument.java index 42a3622ea..341e9d1f6 100644 --- a/src/api/java/baritone/api/command/argument/ICommandArgument.java +++ b/src/api/java/baritone/api/command/argument/ICommandArgument.java @@ -87,7 +87,7 @@ public interface ICommandArgument { * * @param type The class to parse this argument into * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed */ T getAs(Class type, Class stateType, S state) throws CommandInvalidTypeException; diff --git a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java index 29dc5f0b7..978450a23 100644 --- a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java +++ b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java @@ -17,8 +17,8 @@ package baritone.api.command.datatypes; -import baritone.api.utils.BlockOptionalMeta; import baritone.api.command.exception.CommandException; +import baritone.api.utils.BlockOptionalMeta; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/ForDirection.java b/src/api/java/baritone/api/command/datatypes/ForDirection.java index cbfce3f20..b5a7a3e7e 100644 --- a/src/api/java/baritone/api/command/datatypes/ForDirection.java +++ b/src/api/java/baritone/api/command/datatypes/ForDirection.java @@ -17,8 +17,8 @@ package baritone.api.command.datatypes; -import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.util.Direction; import java.util.Locale; diff --git a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java index 208786987..061428827 100644 --- a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java +++ b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java @@ -20,8 +20,8 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.cache.IWaypointCollection; -import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import java.util.Comparator; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java b/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java index 78358a262..f0d1b5636 100644 --- a/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java @@ -24,9 +24,8 @@ * Provides an {@link IDatatype} with contextual information so * that it can perform the desired operation on the target level. * - * @see IDatatype - * * @author Brady + * @see IDatatype * @since 9/26/2019 */ public interface IDatatypeContext { diff --git a/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java b/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java index 2f0a9c140..854fe6869 100644 --- a/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java @@ -34,11 +34,10 @@ public interface IDatatypeFor extends IDatatype { * if the expected input does not conform to a parseable value. As far as a {@link CommandException} being * thrown is concerned, see the note below for specifics. * - * @see IDatatypeContext - * * @param ctx The context * @return The parsed data-type * @throws CommandException If there was an issue parsing using another type or arguments could not be polled. + * @see IDatatypeContext */ T get(IDatatypeContext ctx) throws CommandException; } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java b/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java index 082b649eb..31ae97273 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java @@ -18,8 +18,8 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.exception.CommandException; +import baritone.api.utils.BetterBlockPos; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoal.java b/src/api/java/baritone/api/command/datatypes/RelativeGoal.java index 19312907e..0b602e9e9 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoal.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoal.java @@ -18,16 +18,13 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalXZ; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; -import net.minecraft.util.math.MathHelper; -import java.util.ArrayList; -import java.util.List; import java.util.stream.Stream; public enum RelativeGoal implements IDatatypePost { diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java index ae05c6ade..ccc45cafa 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java index c50aab015..747509f5e 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java index 58d093f1b..cd1a4c5d4 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java index 02987d4ee..5dce59313 100644 --- a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -38,7 +38,7 @@ public CommandUnhandledException(Throwable cause) { @Override public void handle(ICommand command, List args) { HELPER.logDirect("An unhandled exception occurred. " + - "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", + "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", TextFormatting.RED); this.printStackTrace(); diff --git a/src/api/java/baritone/api/command/exception/ICommandException.java b/src/api/java/baritone/api/command/exception/ICommandException.java index 58d130496..b521a2e6b 100644 --- a/src/api/java/baritone/api/command/exception/ICommandException.java +++ b/src/api/java/baritone/api/command/exception/ICommandException.java @@ -38,8 +38,8 @@ public interface ICommandException { /** - * @see Exception#getMessage() * @return The exception details + * @see Exception#getMessage() */ String getMessage(); diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index a97d38dfa..5a97ce00e 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -17,10 +17,10 @@ package baritone.api.command.helpers; -import baritone.api.utils.Helper; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.Helper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; diff --git a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java index 6274c6836..54ae9e8c4 100644 --- a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java @@ -19,10 +19,10 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; -import baritone.api.event.events.TabCompleteEvent; -import baritone.api.utils.SettingsUtil; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.manager.ICommandManager; +import baritone.api.event.events.TabCompleteEvent; +import baritone.api.utils.SettingsUtil; import net.minecraft.util.ResourceLocation; import java.util.Comparator; @@ -236,7 +236,6 @@ public Stream stream() { * Appends every command in the specified {@link ICommandManager} to this {@link TabCompleteHelper} * * @param manager A command manager - * * @return This {@link TabCompleteHelper} */ public TabCompleteHelper addCommands(ICommandManager manager) { diff --git a/src/api/java/baritone/api/event/events/PacketEvent.java b/src/api/java/baritone/api/event/events/PacketEvent.java index b65545f24..43c61a1a9 100644 --- a/src/api/java/baritone/api/event/events/PacketEvent.java +++ b/src/api/java/baritone/api/event/events/PacketEvent.java @@ -18,8 +18,8 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; -import net.minecraft.network.NetworkManager; import net.minecraft.network.IPacket; +import net.minecraft.network.NetworkManager; /** * @author Brady diff --git a/src/api/java/baritone/api/event/events/TabCompleteEvent.java b/src/api/java/baritone/api/event/events/TabCompleteEvent.java index 2a0ef87ba..268cf62bf 100644 --- a/src/api/java/baritone/api/event/events/TabCompleteEvent.java +++ b/src/api/java/baritone/api/event/events/TabCompleteEvent.java @@ -18,7 +18,6 @@ package baritone.api.event.events; import baritone.api.event.events.type.Cancellable; -import baritone.api.event.events.type.Overrideable; /** * @author LoganDark diff --git a/src/api/java/baritone/api/schematic/IStaticSchematic.java b/src/api/java/baritone/api/schematic/IStaticSchematic.java index e0872ede3..0389d8bc7 100644 --- a/src/api/java/baritone/api/schematic/IStaticSchematic.java +++ b/src/api/java/baritone/api/schematic/IStaticSchematic.java @@ -22,10 +22,9 @@ /** * A static schematic is capable of providing the desired state at a given position without * additional context. Schematics of this type are expected to have non-varying contents. - * - * @see #getDirect(int, int, int) * * @author Brady + * @see #getDirect(int, int, int) * @since 12/24/2019 */ public interface IStaticSchematic extends ISchematic { diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 4bedc0201..7a8613b39 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -36,7 +36,6 @@ import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; public final class BlockOptionalMeta { @@ -163,14 +162,14 @@ private static synchronized List drops(Block b) { // the other overload for generate doesnt work in forge because forge adds code that requires a non null world getManager().getLootTableFromLocation(lootTableLocation).generate( - new LootContext.Builder(null) - .withRandom(new Random()) - .withParameter(LootParameters.POSITION, BlockPos.ZERO) - .withParameter(LootParameters.TOOL, ItemStack.EMPTY) - .withNullableParameter(LootParameters.BLOCK_ENTITY, null) - .withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()) - .build(LootParameterSets.BLOCK), - stack -> items.add(stack.getItem()) + new LootContext.Builder(null) + .withRandom(new Random()) + .withParameter(LootParameters.POSITION, BlockPos.ZERO) + .withParameter(LootParameters.TOOL, ItemStack.EMPTY) + .withNullableParameter(LootParameters.BLOCK_ENTITY, null) + .withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()) + .build(LootParameterSets.BLOCK), + stack -> items.add(stack.getItem()) ); return items; } diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index 06e031327..58579b18e 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -17,10 +17,10 @@ package baritone.api.utils; +import baritone.api.BaritoneAPI; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.ClickType; -import baritone.api.BaritoneAPI; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index 026a23cfa..41f4af731 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -24,7 +24,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index a3457ba56..44bccf2bb 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -25,11 +25,11 @@ import baritone.api.utils.IPlayerContext; import baritone.behavior.*; import baritone.cache.WorldProvider; +import baritone.command.manager.CommandManager; import baritone.event.GameEventHandler; import baritone.process.*; import baritone.selection.SelectionManager; import baritone.utils.*; -import baritone.command.manager.CommandManager; import baritone.utils.player.PrimaryPlayerContext; import net.minecraft.client.Minecraft; diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index 6f64a8350..d5457cf85 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -22,9 +22,9 @@ import baritone.api.cache.IWorldScanner; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; -import baritone.command.ExampleBaritoneControl; import baritone.cache.WorldScanner; import baritone.command.CommandSystem; +import baritone.command.ExampleBaritoneControl; import baritone.utils.schematic.SchematicSystem; import java.util.Collections; diff --git a/src/main/java/baritone/KeepName.java b/src/main/java/baritone/KeepName.java index 20f08e7b8..7fc04cd68 100644 --- a/src/main/java/baritone/KeepName.java +++ b/src/main/java/baritone/KeepName.java @@ -18,4 +18,4 @@ package baritone; // Annotation for classes and class members that should not be renamed by proguard -public @interface KeepName { } +public @interface KeepName {} diff --git a/src/main/java/baritone/command/CommandSystem.java b/src/main/java/baritone/command/CommandSystem.java index 49d3685c1..943e0951d 100644 --- a/src/main/java/baritone/command/CommandSystem.java +++ b/src/main/java/baritone/command/CommandSystem.java @@ -18,8 +18,8 @@ package baritone.command; import baritone.api.command.ICommandSystem; -import baritone.command.argparser.ArgParserManager; import baritone.api.command.argparser.IArgParserManager; +import baritone.command.argparser.ArgParserManager; /** * @author Brady diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index 16207876f..b132d3e7a 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -20,20 +20,20 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.Settings; -import baritone.utils.accessor.IGuiScreen; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandNotFoundException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.command.manager.ICommandManager; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.TabCompleteEvent; import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.utils.Helper; import baritone.api.utils.SettingsUtil; -import baritone.api.command.argument.ICommandArgument; -import baritone.api.command.exception.CommandNotEnoughArgumentsException; -import baritone.api.command.exception.CommandNotFoundException; import baritone.command.argument.ArgConsumer; -import baritone.api.command.helpers.TabCompleteHelper; -import baritone.api.command.manager.ICommandManager; import baritone.command.argument.CommandArguments; import baritone.command.manager.CommandManager; +import baritone.utils.accessor.IGuiScreen; import net.minecraft.util.Tuple; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; diff --git a/src/main/java/baritone/command/argument/CommandArgument.java b/src/main/java/baritone/command/argument/CommandArgument.java index 3ce6cda82..a40ae1d53 100644 --- a/src/main/java/baritone/command/argument/CommandArgument.java +++ b/src/main/java/baritone/command/argument/CommandArgument.java @@ -17,9 +17,9 @@ package baritone.command.argument; -import baritone.command.argparser.ArgParserManager; import baritone.api.command.argument.ICommandArgument; import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.command.argparser.ArgParserManager; import java.util.stream.Stream; diff --git a/src/main/java/baritone/command/argument/CommandArguments.java b/src/main/java/baritone/command/argument/CommandArguments.java index 8d26acb48..22a2ef887 100644 --- a/src/main/java/baritone/command/argument/CommandArguments.java +++ b/src/main/java/baritone/command/argument/CommandArguments.java @@ -48,9 +48,9 @@ public static List from(String string, boolean preserveEmptyLa int lastEnd = -1; while (argMatcher.find()) { args.add(new CommandArgument( - args.size(), - argMatcher.group(), - string.substring(argMatcher.start()) + args.size(), + argMatcher.group(), + string.substring(argMatcher.start()) )); lastEnd = argMatcher.end(); } diff --git a/src/main/java/baritone/command/defaults/AxisCommand.java b/src/main/java/baritone/command/defaults/AxisCommand.java index 0a92ac6e7..2ff98ed34 100644 --- a/src/main/java/baritone/command/defaults/AxisCommand.java +++ b/src/main/java/baritone/command/defaults/AxisCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalAxis; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalAxis; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/BlacklistCommand.java b/src/main/java/baritone/command/defaults/BlacklistCommand.java index a383e0a79..fe49477f4 100644 --- a/src/main/java/baritone/command/defaults/BlacklistCommand.java +++ b/src/main/java/baritone/command/defaults/BlacklistCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.process.IGetToBlockProcess; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.process.IGetToBlockProcess; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/BuildCommand.java b/src/main/java/baritone/command/defaults/BuildCommand.java index aa6723c27..75c1673d4 100644 --- a/src/main/java/baritone/command/defaults/BuildCommand.java +++ b/src/main/java/baritone/command/defaults/BuildCommand.java @@ -26,7 +26,6 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.utils.BetterBlockPos; -import net.minecraft.client.Minecraft; import org.apache.commons.io.FilenameUtils; import java.io.File; diff --git a/src/main/java/baritone/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java index fd084ad17..b4dcda749 100644 --- a/src/main/java/baritone/command/defaults/ChestsCommand.java +++ b/src/main/java/baritone/command/defaults/ChestsCommand.java @@ -19,11 +19,11 @@ import baritone.api.IBaritone; import baritone.api.cache.IRememberedInventory; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BetterBlockPos; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; diff --git a/src/main/java/baritone/command/defaults/ClickCommand.java b/src/main/java/baritone/command/defaults/ClickCommand.java index b882c5879..8875a3723 100644 --- a/src/main/java/baritone/command/defaults/ClickCommand.java +++ b/src/main/java/baritone/command/defaults/ClickCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index b8033c3fb..5d3e3b829 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalBlock; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.GoalBlock; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/baritone/command/defaults/ExploreCommand.java b/src/main/java/baritone/command/defaults/ExploreCommand.java index 9d27bbbe9..0b147c354 100644 --- a/src/main/java/baritone/command/defaults/ExploreCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalXZ; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeGoalXZ; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.GoalXZ; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java index b4ee393a9..c2057551f 100644 --- a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java @@ -19,11 +19,11 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeFile; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import com.google.gson.JsonSyntaxException; import java.io.File; diff --git a/src/main/java/baritone/command/defaults/FarmCommand.java b/src/main/java/baritone/command/defaults/FarmCommand.java index 1903f89f3..f8bbc0c0c 100644 --- a/src/main/java/baritone/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/command/defaults/FarmCommand.java @@ -20,21 +20,16 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForWaypoints; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.helpers.Paginator; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; -import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; - public class FarmCommand extends Command { public FarmCommand(IBaritone baritone) { @@ -51,7 +46,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { range = args.getAs(Integer.class); } //waypoint - if (args.has(1)){ + if (args.has(1)) { IWaypoint[] waypoints = args.getDatatypeFor(ForWaypoints.INSTANCE); IWaypoint waypoint = null; switch (waypoints.length) { diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 28c461912..a415b9b15 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BetterBlockPos; import net.minecraft.block.Block; import net.minecraft.util.registry.Registry; diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index 3fd997ec8..50844165e 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -20,11 +20,11 @@ import baritone.KeepName; import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.EntityClassById; import baritone.api.command.datatypes.IDatatypeFor; import baritone.api.command.datatypes.NearbyPlayer; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index 8344f4f9f..513d61bcb 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -20,8 +20,8 @@ import baritone.api.IBaritone; import baritone.api.behavior.IPathingBehavior; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GcCommand.java b/src/main/java/baritone/command/defaults/GcCommand.java index 143da5792..7e4d4fa96 100644 --- a/src/main/java/baritone/command/defaults/GcCommand.java +++ b/src/main/java/baritone/command/defaults/GcCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GoalCommand.java b/src/main/java/baritone/command/defaults/GoalCommand.java index a75af077b..40822e057 100644 --- a/src/main/java/baritone/command/defaults/GoalCommand.java +++ b/src/main/java/baritone/command/defaults/GoalCommand.java @@ -18,15 +18,15 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.process.ICustomGoalProcess; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeGoal; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.process.ICustomGoalProcess; +import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GotoCommand.java b/src/main/java/baritone/command/defaults/GotoCommand.java index a6fe4e22b..896e3f5f8 100644 --- a/src/main/java/baritone/command/defaults/GotoCommand.java +++ b/src/main/java/baritone/command/defaults/GotoCommand.java @@ -19,12 +19,12 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeGoal; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.pathing.goals.Goal; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMeta; diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index f92039860..b1844495c 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -20,9 +20,9 @@ import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.ICommand; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandNotFoundException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.util.text.ITextComponent; diff --git a/src/main/java/baritone/command/defaults/InvertCommand.java b/src/main/java/baritone/command/defaults/InvertCommand.java index 9e3e859eb..e8bdf50d8 100644 --- a/src/main/java/baritone/command/defaults/InvertCommand.java +++ b/src/main/java/baritone/command/defaults/InvertCommand.java @@ -18,13 +18,13 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalInverted; -import baritone.api.process.ICustomGoalProcess; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalInverted; +import baritone.api.process.ICustomGoalProcess; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 2baf982af..63712fe3e 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -18,12 +18,12 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BlockOptionalMeta; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BlockOptionalMeta; import baritone.cache.WorldScanner; import java.util.ArrayList; diff --git a/src/main/java/baritone/command/defaults/PathCommand.java b/src/main/java/baritone/command/defaults/PathCommand.java index 0add64080..182a1e5bc 100644 --- a/src/main/java/baritone/command/defaults/PathCommand.java +++ b/src/main/java/baritone/command/defaults/PathCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.process.ICustomGoalProcess; import baritone.cache.WorldScanner; diff --git a/src/main/java/baritone/command/defaults/ProcCommand.java b/src/main/java/baritone/command/defaults/ProcCommand.java index cf9371bc8..1652a9917 100644 --- a/src/main/java/baritone/command/defaults/ProcCommand.java +++ b/src/main/java/baritone/command/defaults/ProcCommand.java @@ -18,13 +18,13 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.calc.IPathingControlManager; -import baritone.api.process.IBaritoneProcess; -import baritone.api.process.PathingCommand; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.calc.IPathingControlManager; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.PathingCommand; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ReloadAllCommand.java b/src/main/java/baritone/command/defaults/ReloadAllCommand.java index fa8d51175..39396a9c0 100644 --- a/src/main/java/baritone/command/defaults/ReloadAllCommand.java +++ b/src/main/java/baritone/command/defaults/ReloadAllCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java index 64c9e4fb3..a77add6e6 100644 --- a/src/main/java/baritone/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -18,10 +18,10 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/RepackCommand.java b/src/main/java/baritone/command/defaults/RepackCommand.java index 6366fbc92..cafbea524 100644 --- a/src/main/java/baritone/command/defaults/RepackCommand.java +++ b/src/main/java/baritone/command/defaults/RepackCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.cache.WorldScanner; import java.util.Arrays; diff --git a/src/main/java/baritone/command/defaults/SaveAllCommand.java b/src/main/java/baritone/command/defaults/SaveAllCommand.java index 5f064a72f..de416c60d 100644 --- a/src/main/java/baritone/command/defaults/SaveAllCommand.java +++ b/src/main/java/baritone/command/defaults/SaveAllCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/SchematicaCommand.java b/src/main/java/baritone/command/defaults/SchematicaCommand.java index 8279b1dc5..ae5cac47f 100644 --- a/src/main/java/baritone/command/defaults/SchematicaCommand.java +++ b/src/main/java/baritone/command/defaults/SchematicaCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 7df047a54..bd7f0aaaa 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -19,24 +19,23 @@ import baritone.Baritone; import baritone.api.IBaritone; -import baritone.api.event.events.RenderEvent; -import baritone.api.event.listener.AbstractGameEventListener; -import baritone.api.schematic.*; -import baritone.api.selection.ISelection; -import baritone.api.selection.ISelectionManager; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.BlockOptionalMeta; -import baritone.api.utils.BlockOptionalMetaLookup; -import baritone.api.schematic.ISchematic; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.ForDirection; import baritone.api.command.datatypes.RelativeBlockPos; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.event.events.RenderEvent; +import baritone.api.event.listener.AbstractGameEventListener; +import baritone.api.schematic.*; +import baritone.api.selection.ISelection; +import baritone.api.selection.ISelectionManager; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMeta; +import baritone.api.utils.BlockOptionalMetaLookup; import baritone.utils.IRenderer; import net.minecraft.block.Blocks; import net.minecraft.util.Direction; diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 06e443bcb..9319dc9df 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -20,13 +20,13 @@ import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.Settings; -import baritone.api.utils.SettingsUtil; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.utils.SettingsUtil; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; @@ -39,9 +39,9 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; import static baritone.api.utils.SettingsUtil.settingTypeToString; import static baritone.api.utils.SettingsUtil.settingValueToString; -import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class SetCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/ThisWayCommand.java b/src/main/java/baritone/command/defaults/ThisWayCommand.java index 6073d82be..0c10bba30 100644 --- a/src/main/java/baritone/command/defaults/ThisWayCommand.java +++ b/src/main/java/baritone/command/defaults/ThisWayCommand.java @@ -18,10 +18,10 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalXZ; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalXZ; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/TunnelCommand.java b/src/main/java/baritone/command/defaults/TunnelCommand.java index 3cce423a5..e7852dd05 100644 --- a/src/main/java/baritone/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/command/defaults/TunnelCommand.java @@ -77,7 +77,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { default: throw new IllegalStateException("Unexpected value: " + enumFacing); } - logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height+1, width+1, depth)); + logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height + 1, width + 1, depth)); baritone.getBuilderProcess().clearArea(corner1, corner2); } } else { diff --git a/src/main/java/baritone/command/defaults/VersionCommand.java b/src/main/java/baritone/command/defaults/VersionCommand.java index b7882d7d7..c8e13558b 100644 --- a/src/main/java/baritone/command/defaults/VersionCommand.java +++ b/src/main/java/baritone/command/defaults/VersionCommand.java @@ -19,9 +19,9 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index eb431be9a..acb33c9df 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -20,18 +20,18 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.cache.Waypoint; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalBlock; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForWaypoints; import baritone.api.command.datatypes.RelativeBlockPos; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.utils.BetterBlockPos; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index eea23905e..c54216568 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -25,8 +25,8 @@ import baritone.api.utils.Helper; import baritone.api.utils.PathCalculationResult; import baritone.pathing.movement.CalculationContext; -import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import baritone.utils.NotificationHelper; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import java.util.Optional; diff --git a/src/main/java/baritone/pathing/movement/MovementState.java b/src/main/java/baritone/pathing/movement/MovementState.java index 4cd2d7dfd..73539698a 100644 --- a/src/main/java/baritone/pathing/movement/MovementState.java +++ b/src/main/java/baritone/pathing/movement/MovementState.java @@ -20,8 +20,6 @@ import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.Rotation; import baritone.api.utils.input.Input; -import net.minecraft.client.Minecraft; -import net.minecraft.util.registry.Registry; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 5872d4022..df75acb6f 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -27,11 +27,12 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; +import com.google.common.collect.ImmutableSet; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.FallingBlock; import net.minecraft.util.Direction; -import com.google.common.collect.ImmutableSet; + import java.util.Set; public class MovementAscend extends Movement { diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 1400875aa..605cfd41b 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -32,7 +32,6 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.movements.*; import baritone.utils.BlockStateInterface; -import net.minecraft.block.Blocks; import net.minecraft.util.Tuple; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index f0a29dfda..8dfc554ed 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -35,7 +35,10 @@ import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.util.HTTPUtil; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.*; +import net.minecraft.world.Difficulty; +import net.minecraft.world.GameType; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.WorldType; import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.server.ServerWorld; diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index c14ddc5ac..3af7e4c20 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -17,10 +17,10 @@ package baritone.utils.schematic; -import net.minecraft.block.AirBlock; -import net.minecraft.block.BlockState; import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.MaskSchematic; +import net.minecraft.block.AirBlock; +import net.minecraft.block.BlockState; import java.util.OptionalInt; import java.util.function.Predicate; diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 693e90af3..15aa281a9 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -41,7 +41,6 @@ public enum DefaultSchematicFormats implements ISchematicFormat { * The MCEdit schematic specification. Commonly denoted by the ".schematic" file extension. */ MCEDIT("schematic") { - @Override public IStaticSchematic parse(InputStream input) throws IOException { return new MCEditSchematic(CompressedStreamTools.readCompressed(input)); @@ -54,7 +53,6 @@ public IStaticSchematic parse(InputStream input) throws IOException { * @see Sponge Schematic Specification */ SPONGE("schem") { - @Override public IStaticSchematic parse(InputStream input) throws IOException { CompoundNBT nbt = CompressedStreamTools.readCompressed(input); From 5262f68215270620e1d9c3c4b7605712460a8d29 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 29 Jan 2021 20:30:51 -0800 Subject: [PATCH 159/935] a long overdue reformat of every file --- src/api/java/baritone/api/IBaritone.java | 2 +- .../java/baritone/api/IBaritoneProvider.java | 2 +- .../baritone/api/cache/IWorldScanner.java | 2 +- .../java/baritone/api/command/Command.java | 3 +-- .../command/argparser/IArgParserManager.java | 4 ++-- .../api/command/argument/IArgConsumer.java | 10 +++++----- .../command/argument/ICommandArgument.java | 2 +- .../datatypes/ForBlockOptionalMeta.java | 2 +- .../api/command/datatypes/ForDirection.java | 2 +- .../api/command/datatypes/ForWaypoints.java | 2 +- .../command/datatypes/IDatatypeContext.java | 3 +-- .../api/command/datatypes/IDatatypeFor.java | 3 +-- .../command/datatypes/RelativeBlockPos.java | 2 +- .../api/command/datatypes/RelativeGoal.java | 5 +---- .../command/datatypes/RelativeGoalBlock.java | 2 +- .../api/command/datatypes/RelativeGoalXZ.java | 2 +- .../command/datatypes/RelativeGoalYLevel.java | 2 +- .../exception/CommandUnhandledException.java | 2 +- .../command/exception/ICommandException.java | 2 +- .../api/command/helpers/Paginator.java | 4 ++-- .../command/helpers/TabCompleteHelper.java | 5 ++--- .../api/event/events/PacketEvent.java | 2 +- .../api/event/events/TabCompleteEvent.java | 1 - .../api/schematic/IStaticSchematic.java | 3 +-- .../baritone/api/utils/BlockOptionalMeta.java | 16 ++++++++-------- .../baritone/api/utils/IPlayerController.java | 2 +- .../baritone/api/utils/RotationUtils.java | 5 ++++- .../launch/mixins/MixinWorldRenderer.java | 5 ++++- src/main/java/baritone/Baritone.java | 2 +- src/main/java/baritone/BaritoneProvider.java | 2 +- src/main/java/baritone/KeepName.java | 2 +- .../java/baritone/command/CommandSystem.java | 2 +- .../command/ExampleBaritoneControl.java | 12 ++++++------ .../command/argument/CommandArgument.java | 2 +- .../command/argument/CommandArguments.java | 6 +++--- .../command/defaults/AxisCommand.java | 6 +++--- .../command/defaults/BlacklistCommand.java | 4 ++-- .../command/defaults/BuildCommand.java | 1 - .../command/defaults/ChestsCommand.java | 4 ++-- .../command/defaults/ClickCommand.java | 2 +- .../command/defaults/ComeCommand.java | 4 ++-- .../command/defaults/ExploreCommand.java | 4 ++-- .../defaults/ExploreFilterCommand.java | 2 +- .../command/defaults/FarmCommand.java | 9 ++------- .../command/defaults/FindCommand.java | 4 ++-- .../command/defaults/FollowCommand.java | 2 +- .../command/defaults/ForceCancelCommand.java | 2 +- .../baritone/command/defaults/GcCommand.java | 2 +- .../command/defaults/GoalCommand.java | 8 ++++---- .../command/defaults/GotoCommand.java | 2 +- .../command/defaults/HelpCommand.java | 2 +- .../command/defaults/InvertCommand.java | 8 ++++---- .../command/defaults/MineCommand.java | 4 ++-- .../command/defaults/PathCommand.java | 2 +- .../command/defaults/ProcCommand.java | 8 ++++---- .../command/defaults/ReloadAllCommand.java | 2 +- .../command/defaults/RenderCommand.java | 4 ++-- .../command/defaults/RepackCommand.java | 2 +- .../command/defaults/SaveAllCommand.java | 2 +- .../command/defaults/SchematicaCommand.java | 2 +- .../baritone/command/defaults/SelCommand.java | 19 +++++++++---------- .../baritone/command/defaults/SetCommand.java | 6 +++--- .../command/defaults/ThisWayCommand.java | 4 ++-- .../command/defaults/TunnelCommand.java | 2 +- .../command/defaults/VersionCommand.java | 2 +- .../command/defaults/WaypointsCommand.java | 8 ++++---- .../pathing/calc/AbstractNodeCostSearch.java | 2 +- .../pathing/movement/MovementState.java | 2 -- .../movement/movements/MovementAscend.java | 3 ++- .../baritone/pathing/path/PathExecutor.java | 1 - .../utils/schematic/MapArtSchematic.java | 4 ++-- .../format/DefaultSchematicFormats.java | 2 -- 72 files changed, 129 insertions(+), 143 deletions(-) diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 64c4a2918..0cc73b0d1 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -20,13 +20,13 @@ import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.IPathingBehavior; import baritone.api.cache.IWorldProvider; +import baritone.api.command.manager.ICommandManager; import baritone.api.event.listener.IEventBus; import baritone.api.pathing.calc.IPathingControlManager; import baritone.api.process.*; import baritone.api.selection.ISelectionManager; import baritone.api.utils.IInputOverrideHandler; import baritone.api.utils.IPlayerContext; -import baritone.api.command.manager.ICommandManager; /** * @author Brady diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 697f25dc6..e4f2ffc30 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -20,8 +20,8 @@ import baritone.api.cache.IWorldScanner; import baritone.api.command.ICommand; import baritone.api.command.ICommandSystem; -import net.minecraft.client.entity.player.ClientPlayerEntity; import baritone.api.schematic.ISchematicSystem; +import net.minecraft.client.entity.player.ClientPlayerEntity; import java.util.List; import java.util.Objects; diff --git a/src/api/java/baritone/api/cache/IWorldScanner.java b/src/api/java/baritone/api/cache/IWorldScanner.java index 224f64c76..bc3064608 100644 --- a/src/api/java/baritone/api/cache/IWorldScanner.java +++ b/src/api/java/baritone/api/cache/IWorldScanner.java @@ -88,7 +88,7 @@ default List scanChunk(IPlayerContext ctx, List blocks, ChunkPo * Queues the chunks in a square formation around the specified player, using the specified * range, which represents 1/2 the square's dimensions, where the player is in the center. * - * @param ctx The player, describing the origin + * @param ctx The player, describing the origin * @param range The range to repack * @return The amount of chunks successfully queued for repacking */ diff --git a/src/api/java/baritone/api/command/Command.java b/src/api/java/baritone/api/command/Command.java index 4db5c0f3f..c81a3365b 100644 --- a/src/api/java/baritone/api/command/Command.java +++ b/src/api/java/baritone/api/command/Command.java @@ -34,9 +34,8 @@ * So basically, you should use it because it provides a small amount of boilerplate, * but you're not forced to use it. * - * @see ICommand - * * @author LoganDark + * @see ICommand */ public abstract class Command implements ICommand { diff --git a/src/api/java/baritone/api/command/argparser/IArgParserManager.java b/src/api/java/baritone/api/command/argparser/IArgParserManager.java index f38b4624d..d5c36adb3 100644 --- a/src/api/java/baritone/api/command/argparser/IArgParserManager.java +++ b/src/api/java/baritone/api/command/argparser/IArgParserManager.java @@ -46,8 +46,8 @@ public interface IArgParserManager { /** * Attempt to parse the specified argument with a stateless {@link IArgParser} that outputs the specified class. * - * @param type The type to try and parse the argument into. - * @param arg The argument to parse. + * @param type The type to try and parse the argument into. + * @param arg The argument to parse. * @return An instance of the specified class. * @throws CommandInvalidTypeException If the parsing failed */ diff --git a/src/api/java/baritone/api/command/argument/IArgConsumer.java b/src/api/java/baritone/api/command/argument/IArgConsumer.java index 0a028daa7..4435b36e1 100644 --- a/src/api/java/baritone/api/command/argument/IArgConsumer.java +++ b/src/api/java/baritone/api/command/argument/IArgConsumer.java @@ -18,8 +18,6 @@ package baritone.api.command.argument; import baritone.api.command.ICommand; -import baritone.api.command.exception.CommandTooManyArgumentsException; -import baritone.api.utils.Helper; import baritone.api.command.argparser.IArgParser; import baritone.api.command.datatypes.IDatatype; import baritone.api.command.datatypes.IDatatypeFor; @@ -27,6 +25,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandTooManyArgumentsException; +import baritone.api.utils.Helper; import net.minecraft.util.Direction; import java.util.Deque; @@ -223,7 +223,7 @@ public interface IArgConsumer { * @param type The type to peek as * @param index The index to peek * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #peekAs(Class) * @see #peekAsOrDefault(Class, Object, int) @@ -240,7 +240,7 @@ public interface IArgConsumer { * * @param type The type to peek as * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #peekAs(Class, int) * @see #peekAsOrDefault(Class, Object) @@ -458,7 +458,7 @@ public interface IArgConsumer { * * @param type The type to peek as * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed * @see IArgParser * @see #get() * @see #getAsOrDefault(Class, Object) diff --git a/src/api/java/baritone/api/command/argument/ICommandArgument.java b/src/api/java/baritone/api/command/argument/ICommandArgument.java index 42a3622ea..341e9d1f6 100644 --- a/src/api/java/baritone/api/command/argument/ICommandArgument.java +++ b/src/api/java/baritone/api/command/argument/ICommandArgument.java @@ -87,7 +87,7 @@ public interface ICommandArgument { * * @param type The class to parse this argument into * @return An instance of the specified type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed */ T getAs(Class type, Class stateType, S state) throws CommandInvalidTypeException; diff --git a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java index 29dc5f0b7..978450a23 100644 --- a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java +++ b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java @@ -17,8 +17,8 @@ package baritone.api.command.datatypes; -import baritone.api.utils.BlockOptionalMeta; import baritone.api.command.exception.CommandException; +import baritone.api.utils.BlockOptionalMeta; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/ForDirection.java b/src/api/java/baritone/api/command/datatypes/ForDirection.java index f946b983f..2d75eb882 100644 --- a/src/api/java/baritone/api/command/datatypes/ForDirection.java +++ b/src/api/java/baritone/api/command/datatypes/ForDirection.java @@ -17,8 +17,8 @@ package baritone.api.command.datatypes; -import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.util.Direction; import java.util.Locale; diff --git a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java index 208786987..061428827 100644 --- a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java +++ b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java @@ -20,8 +20,8 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.cache.IWaypointCollection; -import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import java.util.Comparator; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java b/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java index 78358a262..f0d1b5636 100644 --- a/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java @@ -24,9 +24,8 @@ * Provides an {@link IDatatype} with contextual information so * that it can perform the desired operation on the target level. * - * @see IDatatype - * * @author Brady + * @see IDatatype * @since 9/26/2019 */ public interface IDatatypeContext { diff --git a/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java b/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java index 2f0a9c140..854fe6869 100644 --- a/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java @@ -34,11 +34,10 @@ public interface IDatatypeFor extends IDatatype { * if the expected input does not conform to a parseable value. As far as a {@link CommandException} being * thrown is concerned, see the note below for specifics. * - * @see IDatatypeContext - * * @param ctx The context * @return The parsed data-type * @throws CommandException If there was an issue parsing using another type or arguments could not be polled. + * @see IDatatypeContext */ T get(IDatatypeContext ctx) throws CommandException; } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java b/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java index 082b649eb..31ae97273 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java @@ -18,8 +18,8 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.exception.CommandException; +import baritone.api.utils.BetterBlockPos; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoal.java b/src/api/java/baritone/api/command/datatypes/RelativeGoal.java index 19312907e..0b602e9e9 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoal.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoal.java @@ -18,16 +18,13 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalXZ; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; -import net.minecraft.util.math.MathHelper; -import java.util.ArrayList; -import java.util.List; import java.util.stream.Stream; public enum RelativeGoal implements IDatatypePost { diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java index ae05c6ade..ccc45cafa 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java index c50aab015..747509f5e 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java index 58d093f1b..cd1a4c5d4 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java @@ -18,9 +18,9 @@ package baritone.api.command.datatypes; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java index 02987d4ee..5dce59313 100644 --- a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -38,7 +38,7 @@ public CommandUnhandledException(Throwable cause) { @Override public void handle(ICommand command, List args) { HELPER.logDirect("An unhandled exception occurred. " + - "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", + "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", TextFormatting.RED); this.printStackTrace(); diff --git a/src/api/java/baritone/api/command/exception/ICommandException.java b/src/api/java/baritone/api/command/exception/ICommandException.java index 58d130496..b521a2e6b 100644 --- a/src/api/java/baritone/api/command/exception/ICommandException.java +++ b/src/api/java/baritone/api/command/exception/ICommandException.java @@ -38,8 +38,8 @@ public interface ICommandException { /** - * @see Exception#getMessage() * @return The exception details + * @see Exception#getMessage() */ String getMessage(); diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index dda510ecd..8b4457653 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -17,10 +17,10 @@ package baritone.api.command.helpers; -import baritone.api.utils.Helper; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.Helper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextComponent; diff --git a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java index 6274c6836..54ae9e8c4 100644 --- a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java @@ -19,10 +19,10 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; -import baritone.api.event.events.TabCompleteEvent; -import baritone.api.utils.SettingsUtil; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.manager.ICommandManager; +import baritone.api.event.events.TabCompleteEvent; +import baritone.api.utils.SettingsUtil; import net.minecraft.util.ResourceLocation; import java.util.Comparator; @@ -236,7 +236,6 @@ public Stream stream() { * Appends every command in the specified {@link ICommandManager} to this {@link TabCompleteHelper} * * @param manager A command manager - * * @return This {@link TabCompleteHelper} */ public TabCompleteHelper addCommands(ICommandManager manager) { diff --git a/src/api/java/baritone/api/event/events/PacketEvent.java b/src/api/java/baritone/api/event/events/PacketEvent.java index b65545f24..43c61a1a9 100644 --- a/src/api/java/baritone/api/event/events/PacketEvent.java +++ b/src/api/java/baritone/api/event/events/PacketEvent.java @@ -18,8 +18,8 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; -import net.minecraft.network.NetworkManager; import net.minecraft.network.IPacket; +import net.minecraft.network.NetworkManager; /** * @author Brady diff --git a/src/api/java/baritone/api/event/events/TabCompleteEvent.java b/src/api/java/baritone/api/event/events/TabCompleteEvent.java index 2a0ef87ba..268cf62bf 100644 --- a/src/api/java/baritone/api/event/events/TabCompleteEvent.java +++ b/src/api/java/baritone/api/event/events/TabCompleteEvent.java @@ -18,7 +18,6 @@ package baritone.api.event.events; import baritone.api.event.events.type.Cancellable; -import baritone.api.event.events.type.Overrideable; /** * @author LoganDark diff --git a/src/api/java/baritone/api/schematic/IStaticSchematic.java b/src/api/java/baritone/api/schematic/IStaticSchematic.java index e0872ede3..0389d8bc7 100644 --- a/src/api/java/baritone/api/schematic/IStaticSchematic.java +++ b/src/api/java/baritone/api/schematic/IStaticSchematic.java @@ -22,10 +22,9 @@ /** * A static schematic is capable of providing the desired state at a given position without * additional context. Schematics of this type are expected to have non-varying contents. - * - * @see #getDirect(int, int, int) * * @author Brady + * @see #getDirect(int, int, int) * @since 12/24/2019 */ public interface IStaticSchematic extends ISchematic { diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 4abd9087c..29fe910fb 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -162,14 +162,14 @@ private static synchronized List drops(Block b) { // the other overload for generate doesnt work in forge because forge adds code that requires a non null world getManager().getLootTableFromLocation(lootTableLocation).generate( - new LootContext.Builder(null) - .withRandom(new Random()) - .withParameter(LootParameters.field_237457_g_, Vector3d.copy(BlockPos.NULL_VECTOR)) - .withParameter(LootParameters.TOOL, ItemStack.EMPTY) - .withNullableParameter(LootParameters.BLOCK_ENTITY, null) - .withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()) - .build(LootParameterSets.BLOCK), - stack -> items.add(stack.getItem()) + new LootContext.Builder(null) + .withRandom(new Random()) + .withParameter(LootParameters.field_237457_g_, Vector3d.copy(BlockPos.NULL_VECTOR)) + .withParameter(LootParameters.TOOL, ItemStack.EMPTY) + .withNullableParameter(LootParameters.BLOCK_ENTITY, null) + .withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()) + .build(LootParameterSets.BLOCK), + stack -> items.add(stack.getItem()) ); return items; } diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index 06e031327..58579b18e 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -17,10 +17,10 @@ package baritone.api.utils; +import baritone.api.BaritoneAPI; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.ClickType; -import baritone.api.BaritoneAPI; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 3cc609f03..fdc655472 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -24,7 +24,10 @@ import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.entity.Entity; import net.minecraft.util.Direction; -import net.minecraft.util.math.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.util.math.vector.Vector3d; diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java index d110ed9c2..dc98804ef 100644 --- a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java @@ -21,7 +21,10 @@ import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; import com.mojang.blaze3d.matrix.MatrixStack; -import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.util.math.vector.Matrix4f; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index a3457ba56..44bccf2bb 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -25,11 +25,11 @@ import baritone.api.utils.IPlayerContext; import baritone.behavior.*; import baritone.cache.WorldProvider; +import baritone.command.manager.CommandManager; import baritone.event.GameEventHandler; import baritone.process.*; import baritone.selection.SelectionManager; import baritone.utils.*; -import baritone.command.manager.CommandManager; import baritone.utils.player.PrimaryPlayerContext; import net.minecraft.client.Minecraft; diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index 6f64a8350..d5457cf85 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -22,9 +22,9 @@ import baritone.api.cache.IWorldScanner; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; -import baritone.command.ExampleBaritoneControl; import baritone.cache.WorldScanner; import baritone.command.CommandSystem; +import baritone.command.ExampleBaritoneControl; import baritone.utils.schematic.SchematicSystem; import java.util.Collections; diff --git a/src/main/java/baritone/KeepName.java b/src/main/java/baritone/KeepName.java index 20f08e7b8..7fc04cd68 100644 --- a/src/main/java/baritone/KeepName.java +++ b/src/main/java/baritone/KeepName.java @@ -18,4 +18,4 @@ package baritone; // Annotation for classes and class members that should not be renamed by proguard -public @interface KeepName { } +public @interface KeepName {} diff --git a/src/main/java/baritone/command/CommandSystem.java b/src/main/java/baritone/command/CommandSystem.java index 49d3685c1..943e0951d 100644 --- a/src/main/java/baritone/command/CommandSystem.java +++ b/src/main/java/baritone/command/CommandSystem.java @@ -18,8 +18,8 @@ package baritone.command; import baritone.api.command.ICommandSystem; -import baritone.command.argparser.ArgParserManager; import baritone.api.command.argparser.IArgParserManager; +import baritone.command.argparser.ArgParserManager; /** * @author Brady diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index ed2c1f06c..ed25d789b 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -20,20 +20,20 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.Settings; -import baritone.utils.accessor.IGuiScreen; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandNotFoundException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.command.manager.ICommandManager; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.TabCompleteEvent; import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.utils.Helper; import baritone.api.utils.SettingsUtil; -import baritone.api.command.argument.ICommandArgument; -import baritone.api.command.exception.CommandNotEnoughArgumentsException; -import baritone.api.command.exception.CommandNotFoundException; import baritone.command.argument.ArgConsumer; -import baritone.api.command.helpers.TabCompleteHelper; -import baritone.api.command.manager.ICommandManager; import baritone.command.argument.CommandArguments; import baritone.command.manager.CommandManager; +import baritone.utils.accessor.IGuiScreen; import net.minecraft.util.Tuple; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextComponent; diff --git a/src/main/java/baritone/command/argument/CommandArgument.java b/src/main/java/baritone/command/argument/CommandArgument.java index 3ce6cda82..a40ae1d53 100644 --- a/src/main/java/baritone/command/argument/CommandArgument.java +++ b/src/main/java/baritone/command/argument/CommandArgument.java @@ -17,9 +17,9 @@ package baritone.command.argument; -import baritone.command.argparser.ArgParserManager; import baritone.api.command.argument.ICommandArgument; import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.command.argparser.ArgParserManager; import java.util.stream.Stream; diff --git a/src/main/java/baritone/command/argument/CommandArguments.java b/src/main/java/baritone/command/argument/CommandArguments.java index 8d26acb48..22a2ef887 100644 --- a/src/main/java/baritone/command/argument/CommandArguments.java +++ b/src/main/java/baritone/command/argument/CommandArguments.java @@ -48,9 +48,9 @@ public static List from(String string, boolean preserveEmptyLa int lastEnd = -1; while (argMatcher.find()) { args.add(new CommandArgument( - args.size(), - argMatcher.group(), - string.substring(argMatcher.start()) + args.size(), + argMatcher.group(), + string.substring(argMatcher.start()) )); lastEnd = argMatcher.end(); } diff --git a/src/main/java/baritone/command/defaults/AxisCommand.java b/src/main/java/baritone/command/defaults/AxisCommand.java index 0a92ac6e7..2ff98ed34 100644 --- a/src/main/java/baritone/command/defaults/AxisCommand.java +++ b/src/main/java/baritone/command/defaults/AxisCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalAxis; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalAxis; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/BlacklistCommand.java b/src/main/java/baritone/command/defaults/BlacklistCommand.java index a383e0a79..fe49477f4 100644 --- a/src/main/java/baritone/command/defaults/BlacklistCommand.java +++ b/src/main/java/baritone/command/defaults/BlacklistCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.process.IGetToBlockProcess; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.process.IGetToBlockProcess; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/BuildCommand.java b/src/main/java/baritone/command/defaults/BuildCommand.java index aa6723c27..75c1673d4 100644 --- a/src/main/java/baritone/command/defaults/BuildCommand.java +++ b/src/main/java/baritone/command/defaults/BuildCommand.java @@ -26,7 +26,6 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.utils.BetterBlockPos; -import net.minecraft.client.Minecraft; import org.apache.commons.io.FilenameUtils; import java.io.File; diff --git a/src/main/java/baritone/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java index 4e4f3a2c3..88ea32f42 100644 --- a/src/main/java/baritone/command/defaults/ChestsCommand.java +++ b/src/main/java/baritone/command/defaults/ChestsCommand.java @@ -19,11 +19,11 @@ import baritone.api.IBaritone; import baritone.api.cache.IRememberedInventory; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BetterBlockPos; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.IFormattableTextComponent; diff --git a/src/main/java/baritone/command/defaults/ClickCommand.java b/src/main/java/baritone/command/defaults/ClickCommand.java index b882c5879..8875a3723 100644 --- a/src/main/java/baritone/command/defaults/ClickCommand.java +++ b/src/main/java/baritone/command/defaults/ClickCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index 354acb9e4..5a76c0296 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalBlock; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.GoalBlock; import net.minecraft.entity.Entity; import java.util.Arrays; diff --git a/src/main/java/baritone/command/defaults/ExploreCommand.java b/src/main/java/baritone/command/defaults/ExploreCommand.java index 9d27bbbe9..0b147c354 100644 --- a/src/main/java/baritone/command/defaults/ExploreCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalXZ; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeGoalXZ; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.GoalXZ; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java index b4ee393a9..c2057551f 100644 --- a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java @@ -19,11 +19,11 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeFile; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import com.google.gson.JsonSyntaxException; import java.io.File; diff --git a/src/main/java/baritone/command/defaults/FarmCommand.java b/src/main/java/baritone/command/defaults/FarmCommand.java index 1903f89f3..f8bbc0c0c 100644 --- a/src/main/java/baritone/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/command/defaults/FarmCommand.java @@ -20,21 +20,16 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForWaypoints; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.helpers.Paginator; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; -import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; - public class FarmCommand extends Command { public FarmCommand(IBaritone baritone) { @@ -51,7 +46,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { range = args.getAs(Integer.class); } //waypoint - if (args.has(1)){ + if (args.has(1)) { IWaypoint[] waypoints = args.getDatatypeFor(ForWaypoints.INSTANCE); IWaypoint waypoint = null; switch (waypoints.length) { diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 28c461912..a415b9b15 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -18,11 +18,11 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BetterBlockPos; import net.minecraft.block.Block; import net.minecraft.util.registry.Registry; diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index 3fd997ec8..50844165e 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -20,11 +20,11 @@ import baritone.KeepName; import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.EntityClassById; import baritone.api.command.datatypes.IDatatypeFor; import baritone.api.command.datatypes.NearbyPlayer; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index 8344f4f9f..513d61bcb 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -20,8 +20,8 @@ import baritone.api.IBaritone; import baritone.api.behavior.IPathingBehavior; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GcCommand.java b/src/main/java/baritone/command/defaults/GcCommand.java index 143da5792..7e4d4fa96 100644 --- a/src/main/java/baritone/command/defaults/GcCommand.java +++ b/src/main/java/baritone/command/defaults/GcCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GoalCommand.java b/src/main/java/baritone/command/defaults/GoalCommand.java index a75af077b..40822e057 100644 --- a/src/main/java/baritone/command/defaults/GoalCommand.java +++ b/src/main/java/baritone/command/defaults/GoalCommand.java @@ -18,15 +18,15 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.process.ICustomGoalProcess; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeGoal; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.process.ICustomGoalProcess; +import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GotoCommand.java b/src/main/java/baritone/command/defaults/GotoCommand.java index a6fe4e22b..896e3f5f8 100644 --- a/src/main/java/baritone/command/defaults/GotoCommand.java +++ b/src/main/java/baritone/command/defaults/GotoCommand.java @@ -19,12 +19,12 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeGoal; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.pathing.goals.Goal; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMeta; diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index bdd49bc99..9320271c6 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -20,9 +20,9 @@ import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.ICommand; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandNotFoundException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; import net.minecraft.util.text.StringTextComponent; diff --git a/src/main/java/baritone/command/defaults/InvertCommand.java b/src/main/java/baritone/command/defaults/InvertCommand.java index 9e3e859eb..e8bdf50d8 100644 --- a/src/main/java/baritone/command/defaults/InvertCommand.java +++ b/src/main/java/baritone/command/defaults/InvertCommand.java @@ -18,13 +18,13 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalInverted; -import baritone.api.process.ICustomGoalProcess; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalInverted; +import baritone.api.process.ICustomGoalProcess; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 2baf982af..63712fe3e 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -18,12 +18,12 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BlockOptionalMeta; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.exception.CommandException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BlockOptionalMeta; import baritone.cache.WorldScanner; import java.util.ArrayList; diff --git a/src/main/java/baritone/command/defaults/PathCommand.java b/src/main/java/baritone/command/defaults/PathCommand.java index 0add64080..182a1e5bc 100644 --- a/src/main/java/baritone/command/defaults/PathCommand.java +++ b/src/main/java/baritone/command/defaults/PathCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.api.process.ICustomGoalProcess; import baritone.cache.WorldScanner; diff --git a/src/main/java/baritone/command/defaults/ProcCommand.java b/src/main/java/baritone/command/defaults/ProcCommand.java index cf9371bc8..1652a9917 100644 --- a/src/main/java/baritone/command/defaults/ProcCommand.java +++ b/src/main/java/baritone/command/defaults/ProcCommand.java @@ -18,13 +18,13 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.calc.IPathingControlManager; -import baritone.api.process.IBaritoneProcess; -import baritone.api.process.PathingCommand; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.calc.IPathingControlManager; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.PathingCommand; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/ReloadAllCommand.java b/src/main/java/baritone/command/defaults/ReloadAllCommand.java index fa8d51175..39396a9c0 100644 --- a/src/main/java/baritone/command/defaults/ReloadAllCommand.java +++ b/src/main/java/baritone/command/defaults/ReloadAllCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java index 64c9e4fb3..a77add6e6 100644 --- a/src/main/java/baritone/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -18,10 +18,10 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/RepackCommand.java b/src/main/java/baritone/command/defaults/RepackCommand.java index 6366fbc92..cafbea524 100644 --- a/src/main/java/baritone/command/defaults/RepackCommand.java +++ b/src/main/java/baritone/command/defaults/RepackCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import baritone.cache.WorldScanner; import java.util.Arrays; diff --git a/src/main/java/baritone/command/defaults/SaveAllCommand.java b/src/main/java/baritone/command/defaults/SaveAllCommand.java index 5f064a72f..de416c60d 100644 --- a/src/main/java/baritone/command/defaults/SaveAllCommand.java +++ b/src/main/java/baritone/command/defaults/SaveAllCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/SchematicaCommand.java b/src/main/java/baritone/command/defaults/SchematicaCommand.java index 8279b1dc5..ae5cac47f 100644 --- a/src/main/java/baritone/command/defaults/SchematicaCommand.java +++ b/src/main/java/baritone/command/defaults/SchematicaCommand.java @@ -19,8 +19,8 @@ import baritone.api.IBaritone; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 5a04fc1df..86e5ec663 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -19,24 +19,23 @@ import baritone.Baritone; import baritone.api.IBaritone; -import baritone.api.event.events.RenderEvent; -import baritone.api.event.listener.AbstractGameEventListener; -import baritone.api.schematic.*; -import baritone.api.selection.ISelection; -import baritone.api.selection.ISelectionManager; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.BlockOptionalMeta; -import baritone.api.utils.BlockOptionalMetaLookup; -import baritone.api.schematic.ISchematic; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.ForDirection; import baritone.api.command.datatypes.RelativeBlockPos; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.event.events.RenderEvent; +import baritone.api.event.listener.AbstractGameEventListener; +import baritone.api.schematic.*; +import baritone.api.selection.ISelection; +import baritone.api.selection.ISelectionManager; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMeta; +import baritone.api.utils.BlockOptionalMetaLookup; import baritone.utils.IRenderer; import net.minecraft.block.Blocks; import net.minecraft.util.Direction; diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 5654670db..3ebe0b192 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -20,13 +20,13 @@ import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.Settings; -import baritone.api.utils.SettingsUtil; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.utils.SettingsUtil; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextComponent; import net.minecraft.util.text.TextFormatting; @@ -39,9 +39,9 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; import static baritone.api.utils.SettingsUtil.settingTypeToString; import static baritone.api.utils.SettingsUtil.settingValueToString; -import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class SetCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/ThisWayCommand.java b/src/main/java/baritone/command/defaults/ThisWayCommand.java index 6073d82be..0c10bba30 100644 --- a/src/main/java/baritone/command/defaults/ThisWayCommand.java +++ b/src/main/java/baritone/command/defaults/ThisWayCommand.java @@ -18,10 +18,10 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.GoalXZ; import baritone.api.command.Command; -import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalXZ; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/TunnelCommand.java b/src/main/java/baritone/command/defaults/TunnelCommand.java index 3cce423a5..e7852dd05 100644 --- a/src/main/java/baritone/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/command/defaults/TunnelCommand.java @@ -77,7 +77,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { default: throw new IllegalStateException("Unexpected value: " + enumFacing); } - logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height+1, width+1, depth)); + logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height + 1, width + 1, depth)); baritone.getBuilderProcess().clearArea(corner1, corner2); } } else { diff --git a/src/main/java/baritone/command/defaults/VersionCommand.java b/src/main/java/baritone/command/defaults/VersionCommand.java index b7882d7d7..c8e13558b 100644 --- a/src/main/java/baritone/command/defaults/VersionCommand.java +++ b/src/main/java/baritone/command/defaults/VersionCommand.java @@ -19,9 +19,9 @@ import baritone.api.IBaritone; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 95d857535..1dabe5446 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -20,18 +20,18 @@ import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.cache.Waypoint; -import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalBlock; -import baritone.api.utils.BetterBlockPos; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForWaypoints; import baritone.api.command.datatypes.RelativeBlockPos; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; -import baritone.api.command.argument.IArgConsumer; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.utils.BetterBlockPos; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextComponent; diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index eea23905e..c54216568 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -25,8 +25,8 @@ import baritone.api.utils.Helper; import baritone.api.utils.PathCalculationResult; import baritone.pathing.movement.CalculationContext; -import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import baritone.utils.NotificationHelper; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import java.util.Optional; diff --git a/src/main/java/baritone/pathing/movement/MovementState.java b/src/main/java/baritone/pathing/movement/MovementState.java index 4cd2d7dfd..73539698a 100644 --- a/src/main/java/baritone/pathing/movement/MovementState.java +++ b/src/main/java/baritone/pathing/movement/MovementState.java @@ -20,8 +20,6 @@ import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.Rotation; import baritone.api.utils.input.Input; -import net.minecraft.client.Minecraft; -import net.minecraft.util.registry.Registry; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 5872d4022..df75acb6f 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -27,11 +27,12 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; +import com.google.common.collect.ImmutableSet; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.FallingBlock; import net.minecraft.util.Direction; -import com.google.common.collect.ImmutableSet; + import java.util.Set; public class MovementAscend extends Movement { diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index ac992cfa6..4d524870b 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -32,7 +32,6 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.movements.*; import baritone.utils.BlockStateInterface; -import net.minecraft.block.Blocks; import net.minecraft.util.Tuple; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index c14ddc5ac..3af7e4c20 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -17,10 +17,10 @@ package baritone.utils.schematic; -import net.minecraft.block.AirBlock; -import net.minecraft.block.BlockState; import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.MaskSchematic; +import net.minecraft.block.AirBlock; +import net.minecraft.block.BlockState; import java.util.OptionalInt; import java.util.function.Predicate; diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 693e90af3..15aa281a9 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -41,7 +41,6 @@ public enum DefaultSchematicFormats implements ISchematicFormat { * The MCEdit schematic specification. Commonly denoted by the ".schematic" file extension. */ MCEDIT("schematic") { - @Override public IStaticSchematic parse(InputStream input) throws IOException { return new MCEditSchematic(CompressedStreamTools.readCompressed(input)); @@ -54,7 +53,6 @@ public IStaticSchematic parse(InputStream input) throws IOException { * @see Sponge Schematic Specification */ SPONGE("schem") { - @Override public IStaticSchematic parse(InputStream input) throws IOException { CompoundNBT nbt = CompressedStreamTools.readCompressed(input); From 78acd2f9457d507ca184521b084da6a3ccc6f01b Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 29 Jan 2021 21:02:16 -0800 Subject: [PATCH 160/935] reformatter --- build.gradle | 30 ++++---- .../gradle/fabric/CreateVolderYarn.java | 74 ++++++++++--------- 2 files changed, 53 insertions(+), 51 deletions(-) diff --git a/build.gradle b/build.gradle index 2dc68291c..b87c905d7 100755 --- a/build.gradle +++ b/build.gradle @@ -45,10 +45,10 @@ buildscript { } } + +import baritone.gradle.fabric.CreateVolderYarn import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask -import baritone.gradle.fabric.CreateVolderYarn - import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace import org.apache.tools.ant.taskdefs.condition.Os @@ -102,7 +102,7 @@ task sourceJar(type: Jar, dependsOn: classes) { from sourceSets.api.allSource } if (getProject().hasProperty("baritone.fabric_build")) { - minecraft.refmapName="mixins.baritone.refmap.json" + minecraft.refmapName = "mixins.baritone.refmap.json" } else { minecraft { mappings mcpVersion @@ -267,28 +267,28 @@ jar { File getClientJar() { return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() .stream() - .filter({f -> f.toString().endsWith("client-extra.jar")}) - .map({f -> new File(f.getParentFile(), "client.jar")}) + .filter({ f -> f.toString().endsWith("client-extra.jar") }) + .map({ f -> new File(f.getParentFile(), "client.jar") }) .findFirst() .get() } File getClientJarFabric() { return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() - .stream() - .filter({f -> f.getName().endsWith("-v2.jar") && f.getName().startsWith("minecraft-")}) - .map({f -> new File(f.getParentFile().getParentFile(), f.getName().toString().replace("mapped", "intermediary"))}) - .findFirst() - .get() + .stream() + .filter({ f -> f.getName().endsWith("-v2.jar") && f.getName().startsWith("minecraft-") }) + .map({ f -> new File(f.getParentFile().getParentFile(), f.getName().toString().replace("mapped", "intermediary")) }) + .findFirst() + .get() } if (getProject().hasProperty("baritone.fabric_build")) { task copyMcJar(type: Copy) { - def mcJar = {getClientJarFabric()} + def mcJar = { getClientJarFabric() } from mcJar into 'build/createMcIntermediaryJar/' - rename {'client.jar'} + rename { 'client.jar' } } task proguard(type: ProguardTask, dependsOn: copyMcJar) { @@ -300,16 +300,16 @@ if (getProject().hasProperty("baritone.fabric_build")) { } else { task copyMcJar(type: Copy) { - def mcJar = {getClientJar()} + def mcJar = { getClientJar() } from mcJar into 'build/createMcSrgJar/' - rename {'client-srg.jar'} + rename { 'client-srg.jar' } } task createSrgMc(type: RenameJarInPlace) { setInput(new File(copyMcJar.getOutputs().getFiles().getSingleFile(), "client-srg.jar")) - setClasspath(files({getClientJar()})) + setClasspath(files({ getClientJar() })) // fork setMappingType(net.minecraftforge.gradle.common.util.MappingFile.Mapping.SEARGE) diff --git a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java index f544023a3..9d19d8202 100644 --- a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java +++ b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java @@ -33,47 +33,49 @@ public class CreateVolderYarn { public static String VOLDERYARNFOLDER = "./build/volderyarn/"; public static String VOLDERYARN = "volderyarn-%s-%s-%s.jar"; - + public static void genMappings(String mcVersion, Map mcpVersion) throws IOException { //download yarn intermediary URL intURL = new URL(String.format("https://maven.fabricmc.net/net/fabricmc/intermediary/%s/intermediary-%s-v2.jar", mcVersion, mcVersion)); String intermediary = readZipContentFromURL(intURL, "mappings/mappings.tiny").get("mappings/mappings.tiny"); Map mappings = parseTinyMap(intermediary); - + //download srg URL srgURL = new URL(String.format("https://files.minecraftforge.net/maven/de/oceanlabs/mcp/mcp_config/%s/mcp_config-%s.zip", mcVersion, mcVersion)); String tsrg = readZipContentFromURL(srgURL, "config/joined.tsrg").get("config/joined.tsrg"); MCPData mcpData = addTSRGData(mappings, tsrg); - + //download mcp URL mcpURL = new URL(String.format("https://files.minecraftforge.net/maven/de/oceanlabs/mcp/mcp_%s/%s/mcp_%s-%s.zip", mcpVersion.get("channel"), mcpVersion.get("version"), mcpVersion.get("channel"), mcpVersion.get("version"))); Map mcpfiles = readZipContentFromURL(mcpURL, "fields.csv", "methods.csv"); addMCPData(mcpData, mcpfiles.get("fields.csv"), mcpfiles.get("methods.csv")); - + StringBuilder builder = new StringBuilder("tiny\t2\t0\tintermediary\tnamed"); for (ClassData clazz : mappings.values()) { builder.append("\n").append(clazz.getIntToMCP()); } - + File outputFolder = new File(VOLDERYARNFOLDER); - if (!outputFolder.exists() && !outputFolder.mkdirs()) throw new RuntimeException("Failed to create dir for volderyarn mappings."); - + if (!outputFolder.exists() && !outputFolder.mkdirs()) + throw new RuntimeException("Failed to create dir for volderyarn mappings."); + for (File f : outputFolder.listFiles()) { if (!f.isDirectory()) f.delete(); } - + File outputFile = new File(outputFolder, String.format(VOLDERYARN, mcVersion, mcpVersion.get("channel"), mcpVersion.get("version"))); if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdir()) throw new FileNotFoundException("Failed to create folder for volderyarn!"); + if (!outputFile.getParentFile().mkdir()) + throw new FileNotFoundException("Failed to create folder for volderyarn!"); } - + try (ZipOutputStream output = new ZipOutputStream(new FileOutputStream(outputFile))) { output.putNextEntry(new ZipEntry("mappings/mappings.tiny")); byte[] outData = builder.toString().getBytes(StandardCharsets.UTF_8); output.write(outData, 0, outData.length); } } - + private static Map parseTinyMap(String map) { Map mappings = new LinkedHashMap<>(); ClassData clazzdata = null; @@ -96,7 +98,7 @@ private static Map parseTinyMap(String map) { } return mappings; } - + private static MCPData addTSRGData(Map mappings, String tsrg) { MCPData mcpData = new MCPData(); String[] classes = String.join("\t", tsrg.split("\n\t")).split("\n"); @@ -111,11 +113,11 @@ private static MCPData addTSRGData(Map mappings, String tsrg) //method if (lineData.length == 3) { if (!mcpData.methods.containsKey(lineData[2])) mcpData.methods.put(lineData[2], new LinkedList<>()); - MethodData d = clazz.methods.get(lineData[0]+lineData[1]); + MethodData d = clazz.methods.get(lineData[0] + lineData[1]); if (d == null) continue; d.mcpName = lineData[2]; mcpData.methods.get(lineData[2]).add(d); - //field + //field } else { if (!mcpData.fields.containsKey(lineData[1])) mcpData.fields.put(lineData[1], new LinkedList<>()); FieldData d = clazz.fields.get(lineData[0]); @@ -127,20 +129,20 @@ private static MCPData addTSRGData(Map mappings, String tsrg) } return mcpData; } - + private static void addMCPData(MCPData mcpData, String fields, String methods) { for (String field : fields.split("\n")) { String[] fieldData = field.split(","); mcpData.fields.getOrDefault(fieldData[0].trim(), new LinkedList<>()).forEach(f -> f.mcpName = fieldData[1].trim()); } - + for (String method : methods.split("\n")) { String[] methodData = method.split(","); mcpData.methods.getOrDefault(methodData[0].trim(), new LinkedList<>()).forEach(m -> m.mcpName = methodData[1].trim()); } } - - private static Map readZipContentFromURL(URL remote, String ...files) throws IOException { + + private static Map readZipContentFromURL(URL remote, String... files) throws IOException { try (ZipInputStream is = new ZipInputStream(new BufferedInputStream(remote.openStream(), 1024))) { byte[] buff = new byte[1024]; ZipEntry entry; @@ -159,62 +161,62 @@ private static Map readZipContentFromURL(URL remote, String ...f return fileContents; } } - + private static class ClassData { final Map classMap; final String obf; final String intermediary; String mcpName; - + final Map methods = new LinkedHashMap<>(); final Map fields = new LinkedHashMap<>(); - + public ClassData(Map classMap, String obf, String intermediary) { this.classMap = classMap; this.obf = obf; this.intermediary = intermediary; } - + public void addMethod(String obf, String obfSig, String intermediary) { - methods.put(obf+obfSig, new MethodData(classMap, obf, obfSig, intermediary)); + methods.put(obf + obfSig, new MethodData(classMap, obf, obfSig, intermediary)); } - + public void addField(String obf, String obfSig, String intermediary) { fields.put(obf, new FieldData(classMap, obf, obfSig, intermediary)); } - + public String getIntToMCP() { StringBuilder builder = new StringBuilder("c\t").append(intermediary).append("\t").append(mcpName); for (MethodData method : methods.values()) { builder.append("\n\tm\t").append(method.getIntermediarySig()).append("\t").append(method.intermediary).append("\t").append(method.mcpName); } - for (FieldData field: fields.values()) { + for (FieldData field : fields.values()) { builder.append("\n\tf\t").append(field.getIntermediarySig()).append("\t").append(field.intermediary).append("\t").append(field.mcpName); } return builder.toString(); } } - + private static class MethodData { final Map classMap; final String obf; final String intermediary; String mcpName; - + final String obfSig; - + public MethodData(Map classMap, String obf, String obfSig, String intermediary) { this.classMap = classMap; this.obf = obf; this.obfSig = obfSig; this.intermediary = intermediary; } - + public String getIntermediarySig() { int offset = 0; Matcher m = Pattern.compile("L(.+?);").matcher(obfSig); String intSig = obfSig; - while(m.find()) { + while (m.find()) { if (!classMap.containsKey(m.group(1))) continue; String intName = classMap.get(m.group(1)).intermediary; intSig = intSig.substring(0, m.start(1) + offset) + intName + intSig.substring(m.end(1) + offset); @@ -223,22 +225,22 @@ public String getIntermediarySig() { return intSig; } } - + private static class FieldData { final Map classMap; final String obf; final String intermediary; String mcpName; - + final String obfSig; - + public FieldData(Map classMap, String obf, String obfSig, String intermediary) { this.classMap = classMap; this.obf = obf; this.obfSig = obfSig; this.intermediary = intermediary; } - + public String getIntermediarySig() { Matcher m = Pattern.compile("(\\[*)L(.+?);").matcher(obfSig); if (m.find()) { @@ -249,7 +251,7 @@ public String getIntermediarySig() { } } } - + private static class MCPData { final Map> methods = new HashMap<>(); final Map> fields = new HashMap<>(); From 825bad47efbf385b9e99607a1c7885ebf3327f27 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 29 Jan 2021 21:06:37 -0800 Subject: [PATCH 161/935] add fabric build step --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index d861c16ed..a998fa110 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,3 +22,4 @@ RUN dpkg -i scripts/xvfb_1.16.4-1_amd64.deb RUN ./gradlew build RUN ./gradlew build -Pbaritone.forge_build +RUN ./gradlew build -Pbaritone.fabric_build From 1b3799d4d741566e6955c9c0fb144af07a738268 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 29 Jan 2021 21:28:07 -0800 Subject: [PATCH 162/935] reorder dist to alphabetical --- .../main/java/baritone/gradle/task/CreateDistTask.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index ed01841a9..70c852ef0 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -77,14 +77,14 @@ private static String getFileName(Path p) { private List getAllDistJars() { return Arrays.asList( getRelativeFile("dist/" + formatVersion(ARTIFACT_API)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_API)), getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)), getRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_STANDALONE)), getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_STANDALONE)), getRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_API)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_STANDALONE)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_UNOPTIMIZED)) + getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_UNOPTIMIZED)), + getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)) ); } From 637c1821146eb2a5f325cb6d018b3562765be0ff Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Mon, 1 Feb 2021 16:14:27 -0700 Subject: [PATCH 163/935] sodium fix --- .../mixins/MixinSodiumChunkProvider.java | 97 +++++++++++++++++++ .../mixins/MixinSodiumFixedLongHashTable.java | 80 +++++++++++++++ src/launch/resources/mixins.baritone.json | 2 + .../utils/accessor/ISodiumChunkArray.java | 26 +++++ 4 files changed, 205 insertions(+) create mode 100644 src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java create mode 100644 src/main/java/baritone/utils/accessor/ISodiumChunkArray.java diff --git a/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java new file mode 100644 index 000000000..5dd4b027e --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java @@ -0,0 +1,97 @@ +/* + * 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.utils.accessor.IChunkArray; +import baritone.utils.accessor.IClientChunkProvider; +import baritone.utils.accessor.ISodiumChunkArray; +import net.minecraft.client.multiplayer.ClientChunkProvider; +import net.minecraft.client.world.ClientWorld; +import org.spongepowered.asm.mixin.*; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; +import java.util.concurrent.locks.StampedLock; + +@Pseudo +@Mixin(targets = "me.jellysquid.mods.sodium.client.world.SodiumChunkManager", remap = false) +public class MixinSodiumChunkProvider implements IClientChunkProvider { + + @Shadow + @Final + private StampedLock lock; + + @Shadow + @Final + private ClientWorld world; + + @Shadow + private int radius; + + @Unique + private static Constructor thisConstructor = null; + + @Unique + private static Field chunkArrayField = null; + + @Override + public ClientChunkProvider createThreadSafeCopy() { + // similar operation to https://github.com/jellysquid3/sodium-fabric/blob/d3528521d48a130322c910c6f0725cf365ebae6f/src/main/java/me/jellysquid/mods/sodium/client/world/SodiumChunkManager.java#L139 + long stamp = this.lock.writeLock(); + + try { + ISodiumChunkArray refArray = extractReferenceArray(); + if (thisConstructor == null) { + thisConstructor = this.getClass().getConstructor(ClientWorld.class, int.class); + } + ClientChunkProvider result = (ClientChunkProvider) thisConstructor.newInstance(world, radius - 3); // -3 because it adds 3 for no reason here too lmao + IChunkArray copyArr = ((IClientChunkProvider) result).extractReferenceArray(); + copyArr.copyFrom(refArray); + return result; + } catch (InstantiationException | InvocationTargetException | NoSuchMethodException | IllegalAccessException e) { + throw new RuntimeException("Sodium chunk manager initialization for baritone failed", e); + } finally { + // put this in finally so we can't break anything. + this.lock.unlockWrite(stamp); + } + } + + @Override + public ISodiumChunkArray extractReferenceArray() { + if (chunkArrayField == null) { + boolean flag = true; + for (Field f : this.getClass().getDeclaredFields()) { + if (ISodiumChunkArray.class.isAssignableFrom(f.getType())) { + chunkArrayField = f; + flag = false; + break; + } + } // else + if (flag) { + throw new RuntimeException(Arrays.toString(this.getClass().getDeclaredFields())); + } + } + try { + return (ISodiumChunkArray) chunkArrayField.get(this); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java b/src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java new file mode 100644 index 000000000..06e13b719 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java @@ -0,0 +1,80 @@ +/* + * 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.utils.accessor.IChunkArray; +import baritone.utils.accessor.ISodiumChunkArray; +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.objects.ObjectIterator; +import net.minecraft.world.chunk.Chunk; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.concurrent.atomic.AtomicReferenceArray; + +@Pseudo +@Mixin(targets = "me.jellysquid.mods.sodium.client.util.collections.FixedLongHashTable", remap = false) +public abstract class MixinSodiumFixedLongHashTable implements ISodiumChunkArray { + + @Shadow + public abstract ObjectIterator> iterator(); + + @Shadow + public abstract Object put(final long k, final Object v); + + /** + * similar to https://github.com/jellysquid3/sodium-fabric/blob/d3528521d48a130322c910c6f0725cf365ebae6f/src/main/java/me/jellysquid/mods/sodium/client/world/SodiumChunkManager.java#L149 + * except that since we aren't changing the radius, the key value doesn't change. + */ + @Override + public void copyFrom(IChunkArray other) { + ObjectIterator> it = ((ISodiumChunkArray) other).callIterator(); + while (it.hasNext()) { + Long2ObjectMap.Entry entry = it.next(); + this.put(entry.getLongKey(), entry.getValue()); + } + } + + @Override + public ObjectIterator> callIterator() { + return iterator(); + } + + //these are useless here... + @Override + public AtomicReferenceArray getChunks() { + return null; + } + + @Override + public int centerX() { + return 0; + } + + @Override + public int centerZ() { + return 0; + } + + @Override + public int viewDistance() { + return 0; + } + +} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index de4f25e84..6ef809b0b 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -22,6 +22,8 @@ "MixinNetworkManager", "MixinPlayerController", "MixinScreen", + "MixinSodiumChunkProvider", + "MixinSodiumFixedLongHashTable", "MixinWorldRenderer" ] } \ No newline at end of file diff --git a/src/main/java/baritone/utils/accessor/ISodiumChunkArray.java b/src/main/java/baritone/utils/accessor/ISodiumChunkArray.java new file mode 100644 index 000000000..7fcb25722 --- /dev/null +++ b/src/main/java/baritone/utils/accessor/ISodiumChunkArray.java @@ -0,0 +1,26 @@ +/* + * 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.accessor; + +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.objects.ObjectIterator; + +public interface ISodiumChunkArray extends IChunkArray { + + ObjectIterator> callIterator(); +} From 484c606dc1d5abb958ffec992ed8cd045651ed9d Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 2 Feb 2021 17:56:00 -0700 Subject: [PATCH 164/935] Update MixinSodiumChunkProvider.java --- .../baritone/launch/mixins/MixinSodiumChunkProvider.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java index 5dd4b027e..70137423c 100644 --- a/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java +++ b/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java @@ -75,18 +75,15 @@ public ClientChunkProvider createThreadSafeCopy() { @Override public ISodiumChunkArray extractReferenceArray() { + https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.15 if (chunkArrayField == null) { - boolean flag = true; for (Field f : this.getClass().getDeclaredFields()) { if (ISodiumChunkArray.class.isAssignableFrom(f.getType())) { chunkArrayField = f; - flag = false; - break; + break https; } - } // else - if (flag) { - throw new RuntimeException(Arrays.toString(this.getClass().getDeclaredFields())); } + throw new RuntimeException(Arrays.toString(this.getClass().getDeclaredFields())); } try { return (ISodiumChunkArray) chunkArrayField.get(this); From 476b7244714a9dd8c5e05f14c4d6ebbb27f67422 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 5 Feb 2021 20:47:46 -0800 Subject: [PATCH 165/935] 1.16.5 --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 53cfcfef9..7d0d17205 100755 --- a/build.gradle +++ b/build.gradle @@ -60,7 +60,7 @@ apply plugin: 'java' def mcpVersion = [channel: 'snapshot', version: '20201028-1.16.3'] if (getProject().hasProperty("baritone.fabric_build")) { - CreateVolderYarn.genMappings("1.16.4", mcpVersion) + CreateVolderYarn.genMappings("1.16.5", mcpVersion) apply plugin: 'fabric-loom' } else { apply plugin: 'net.minecraftforge.gradle' @@ -178,7 +178,7 @@ repositories { dependencies { if (getProject().hasProperty("baritone.fabric_build")) { - minecraft "com.mojang:minecraft:1.16.4" + minecraft "com.mojang:minecraft:1.16.5" mappings fileTree(dir: "./build/volderyarn", include: "**.jar") modImplementation "net.fabricmc:fabric-loader:0.9.1+build.205" @@ -190,7 +190,7 @@ dependencies { implementation 'com.google.code.findbugs:jsr305:3.0.2' } else { - minecraft 'com.github.ImpactDevelopment:Vanilla:1.16.4' + minecraft 'com.github.ImpactDevelopment:Vanilla:1.16.5' runtime launchCompile('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' From a9b956c12d672b112ea635b2ffb98b8f4c7ae4e4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 5 Feb 2021 21:01:02 -0800 Subject: [PATCH 166/935] empty From a48ae2a9a8c799ada7bc25946fdad1e806036e6a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 5 Feb 2021 22:17:20 -0800 Subject: [PATCH 167/935] v1.6.3 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7d0d17205..0ad37d913 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.6.2' +version '1.6.3' buildscript { repositories { From 373ad3efdd6b1fe9f57e58978e7cb4adbb233737 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 24 Feb 2021 13:15:57 -0800 Subject: [PATCH 168/935] soul fire --- src/api/java/baritone/api/utils/RotationUtils.java | 4 ++-- src/api/java/baritone/api/utils/VecUtils.java | 4 ++-- src/main/java/baritone/pathing/movement/MovementHelper.java | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index fdc655472..ec178c390 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -19,8 +19,8 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import net.minecraft.block.AbstractFireBlock; import net.minecraft.block.BlockState; -import net.minecraft.block.FireBlock; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.entity.Entity; import net.minecraft.util.Direction; @@ -234,7 +234,7 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve if (((BlockRayTraceResult) result).getPos().equals(pos)) { return Optional.of(rotation); } - if (entity.world.getBlockState(pos).getBlock() instanceof FireBlock && ((BlockRayTraceResult) result).getPos().equals(pos.down())) { + if (entity.world.getBlockState(pos).getBlock() instanceof AbstractFireBlock && ((BlockRayTraceResult) result).getPos().equals(pos.down())) { return Optional.of(rotation); } } diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index 6b478cfad..bd5c9555e 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -17,8 +17,8 @@ package baritone.api.utils; +import net.minecraft.block.AbstractFireBlock; import net.minecraft.block.BlockState; -import net.minecraft.block.FireBlock; import net.minecraft.entity.Entity; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; @@ -54,7 +54,7 @@ public static Vector3d calculateBlockCenter(World world, BlockPos pos) { if (Double.isNaN(xDiff) || Double.isNaN(yDiff) || Double.isNaN(zDiff)) { throw new IllegalStateException(b + " " + pos + " " + shape); } - if (b.getBlock() instanceof FireBlock) {//look at bottom of fire when putting it out + if (b.getBlock() instanceof AbstractFireBlock) {//look at bottom of fire when putting it out yDiff = 0; } return new Vector3d( diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 74173e020..9f9f1d286 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -91,7 +91,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD) { + if (block instanceof AbstractFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { @@ -170,7 +170,7 @@ static boolean fullyPassable(IBlockReader access, BlockPos pos, BlockState state return true; } // exceptions - blocks that are isPassable true, but we can't actually jump through - if (block == Blocks.FIRE + if (block instanceof AbstractFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.VINE @@ -275,7 +275,7 @@ static boolean avoidWalkingInto(BlockState state) { return !state.getFluidState().isEmpty() || block == Blocks.MAGMA_BLOCK || block == Blocks.CACTUS - || block == Blocks.FIRE + || block instanceof AbstractFireBlock || block == Blocks.END_PORTAL || block == Blocks.COBWEB || block == Blocks.BUBBLE_COLUMN; From 9d1b97931830f0aa6090b148ea579d26883a823c Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sun, 28 Mar 2021 21:32:48 -0700 Subject: [PATCH 169/935] fix replaymod crash --- src/main/java/baritone/cache/WorldProvider.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index c277a0d06..a7756137c 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -77,7 +77,14 @@ public final void initWorld(int dimension) { directory = new File(directory, "baritone"); readme = directory; } else { // Otherwise, the server must be remote... - String folderName = mc.getCurrentServerData().serverIP; + String folderName; + if (mc.getCurrentServerData() != null) { + folderName = mc.getCurrentServerData().serverIP; + } else { + //replaymod causes null currentServerData and false singleplayer. + currentWorld = null; + return; + } if (SystemUtils.IS_OS_WINDOWS) { folderName = folderName.replace(":", "_"); } From 998b84ef8771c5e456b3b08e6b4b9d527956c412 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Wed, 16 Jun 2021 02:12:47 -0600 Subject: [PATCH 170/935] switch to forgified-fabric-loom --- build.gradle | 236 ++++-------------- .../baritone/gradle/task/ProguardTask.java | 53 +++- scripts/proguard.pro | 1 + .../baritone/api/utils/BlockOptionalMeta.java | 3 +- src/launch/resources/META-INF/MANIFEST.MF | 5 + 5 files changed, 102 insertions(+), 196 deletions(-) create mode 100644 src/launch/resources/META-INF/MANIFEST.MF diff --git a/build.gradle b/build.gradle index 0ad37d913..90c7373b7 100755 --- a/build.gradle +++ b/build.gradle @@ -14,12 +14,10 @@ * You should have received a copy of the GNU Lesser General Public License * along with Baritone. If not, see . */ - -group 'baritone' -version '1.6.3' - buildscript { repositories { + mavenCentral() + maven { url "https://maven.architectury.dev/" } maven { name = 'forge' url = 'http://files.minecraftforge.net/maven' @@ -37,36 +35,23 @@ buildscript { maven { url = 'https://libraries.minecraft.net/' } - mavenCentral() - jcenter() } - dependencies { - classpath group: 'com.github.ImpactDevelopment', name: 'ForgeGradle', version: '3.0.115' - classpath group: 'com.github.ImpactDevelopment', name: 'MixinGradle', version: '0.6.2' - classpath group: 'net.fabricmc', name: 'fabric-loom', version: '0.5-SNAPSHOT' + classpath group: 'me.shedaniel', name: 'forgified-fabric-loom', version: '0.7.0-SNAPSHOT' } } +group 'baritone' +version '1.6.3' + -import baritone.gradle.fabric.CreateVolderYarn import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask -import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace -import org.apache.tools.ant.taskdefs.condition.Os - -apply plugin: 'java' -def mcpVersion = [channel: 'snapshot', version: '20201028-1.16.3'] - -if (getProject().hasProperty("baritone.fabric_build")) { - CreateVolderYarn.genMappings("1.16.5", mcpVersion) - apply plugin: 'fabric-loom' -} else { - apply plugin: 'net.minecraftforge.gradle' - apply plugin: 'org.spongepowered.mixin' -} +def compileType = project.hasProperty("baritone.fabric_build") ? "FABRIC" : project.hasProperty("baritone.forge_build") ? "FORGE" : "OFFICIAL" +apply plugin: 'java' +apply plugin: 'forgified-fabric-loom' sourceCompatibility = targetCompatibility = '1.8' compileJava { @@ -74,7 +59,6 @@ compileJava { options.encoding = "UTF-8" // allow emoji in comments :^) } - sourceSets { api { compileClasspath += main.compileClasspath @@ -100,65 +84,16 @@ sourceSets { } } +loom { + mixinConfig 'mixins.baritone.json' +} + task sourceJar(type: Jar, dependsOn: classes) { classifier = 'sources' from sourceSets.api.allSource } -if (getProject().hasProperty("baritone.fabric_build")) { - minecraft.refmapName = "mixins.baritone.refmap.json" -} else { - minecraft { - mappings mcpVersion - - if (getProject().hasProperty("baritone.forge_build")) { - reobfMappings 'searge' - } else { - reobfMappings 'notch' - } - - runs { - client { - workingDirectory project.file('run') - source sourceSets.launch - - main 'baritone.launch.LaunchTesting' - - environment 'assetIndex', '{asset_index}' - environment 'assetDirectory', downloadAssets.output - environment 'nativesDirectory', extractNatives.output - - environment 'tweakClass', 'baritone.launch.BaritoneTweaker' - - if (Os.isFamily(Os.FAMILY_MAC)) { - jvmArgs "-XstartOnFirstThread" - } - } - autoTest { - workingDirectory project.file('autotest') - source sourceSets.launch - - main 'baritone.launch.LaunchTesting' - - environment 'assetIndex', '{asset_index}' - environment 'assetDirectory', downloadAssets.output - environment 'nativesDirectory', extractNatives.output - - environment 'tweakClass', 'baritone.launch.BaritoneTweaker' - environment 'BARITONE_AUTO_TEST', 'true' - - if (Os.isFamily(Os.FAMILY_MAC)) { - jvmArgs "-XstartOnFirstThread" - } - } - } - } - - mixin { - defaultObfuscationEnv searge - add sourceSets.launch, 'mixins.baritone.refmap.json' - } -} +minecraft.refmapName = "mixins.baritone.refmap.json" repositories { mavenCentral() @@ -177,35 +112,21 @@ repositories { } dependencies { - if (getProject().hasProperty("baritone.fabric_build")) { - minecraft "com.mojang:minecraft:1.16.5" - mappings fileTree(dir: "./build/volderyarn", include: "**.jar") + if (project.hasProperty("loom.forge")) { + forge "net.minecraftforge:forge:1.16.5-36.1.0" + } + minecraft "com.mojang:minecraft:1.16.5" + mappings "de.oceanlabs.mcp:mcp_snapshot:20201028-1.16.3" + if (!project.hasProperty("loom.forge")) { modImplementation "net.fabricmc:fabric-loader:0.9.1+build.205" - - // this makes it compile with the forge tweak stuff - implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' - implementation('net.minecraft:launchwrapper:1.12') { - exclude module: 'lwjgl' - } - - implementation 'com.google.code.findbugs:jsr305:3.0.2' - } else { - minecraft 'com.github.ImpactDevelopment:Vanilla:1.16.5' - - runtime launchCompile('net.minecraft:launchwrapper:1.12') { - exclude module: 'lwjgl' - } - runtime launchCompile('org.ow2.asm:asm-debug-all:5.2') - runtime launchCompile('com.github.ImpactDevelopment:SimpleTweaker:1.2') - runtime launchCompile('org.spongepowered:mixin:0.8.+') { - // Mixin includes a lot of dependencies that are too up-to-date - exclude module: 'launchwrapper' - exclude module: 'guava' - exclude module: 'gson' - exclude module: 'commons-io' - exclude module: 'log4j-core' - } } + // this makes it compile with the forge tweak stuff + implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' + implementation('net.minecraft:launchwrapper:1.12') { + exclude module: 'lwjgl' + } + + implementation 'com.google.code.findbugs:jsr305:3.0.2' testImplementation 'junit:junit:4.12' } @@ -218,25 +139,24 @@ javadoc { classpath += sourceSets.api.compileClasspath } -if (getProject().hasProperty("baritone.fabric_build")) { - // skidded from fabric-example-mod (comments and all) - tasks.withType(JavaCompile).configureEach { - // ensure that the encoding is set to UTF-8, no matter what the system default is - // this fixes some edge cases with special characters not displaying correctly - // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html - // If Javadoc is generated, this must be specified in that task too. - it.options.encoding = "UTF-8" - - // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too - // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. - // We'll use that if it's available, but otherwise we'll use the older option. - def targetVersion = 8 - if (JavaVersion.current().isJava9Compatible()) { - it.options.release = targetVersion - } +// skidded from fabric-example-mod (comments and all) +tasks.withType(JavaCompile).configureEach { + // ensure that the encoding is set to UTF-8, no matter what the system default is + // this fixes some edge cases with special characters not displaying correctly + // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html + // If Javadoc is generated, this must be specified in that task too. + it.options.encoding = "UTF-8" + + // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too + // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. + // We'll use that if it's available, but otherwise we'll use the older option. + def targetVersion = 8 + if (JavaVersion.current().isJava9Compatible()) { + it.options.release = targetVersion } } + jar { from sourceSets.launch.output, sourceSets.api.output @@ -268,71 +188,21 @@ jar { } } -// skidded from ProguardTask -File getClientJar() { - return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() - .stream() - .filter({ f -> f.toString().endsWith("client-extra.jar") }) - .map({ f -> new File(f.getParentFile(), "client.jar") }) - .findFirst() - .get() -} - -File getClientJarFabric() { - return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() - .stream() - .filter({ f -> f.getName().endsWith("-v2.jar") && f.getName().startsWith("minecraft-") }) - .map({ f -> new File(f.getParentFile().getParentFile(), f.getName().toString().replace("mapped", "intermediary")) }) - .findFirst() - .get() -} - -if (getProject().hasProperty("baritone.fabric_build")) { - task copyMcJar(type: Copy) { - def mcJar = { getClientJarFabric() } - - from mcJar - into 'build/createMcIntermediaryJar/' - rename { 'client.jar' } - } - - task proguard(type: ProguardTask, dependsOn: copyMcJar) { - url 'https://downloads.sourceforge.net/project/proguard/proguard/6.0/proguard6.0.3.zip' - extract 'proguard6.0.3/lib/proguard.jar' - } - - task createDist(type: CreateDistTask, dependsOn: proguard) - -} else { - task copyMcJar(type: Copy) { - def mcJar = { getClientJar() } - - from mcJar - into 'build/createMcSrgJar/' - rename { 'client-srg.jar' } +if (compileType.equals("OFFICIAL")) { + remapJar { + toM.set "official" } +} - task createSrgMc(type: RenameJarInPlace) { - setInput(new File(copyMcJar.getOutputs().getFiles().getSingleFile(), "client-srg.jar")) - setClasspath(files({ getClientJar() })) - - // fork - setMappingType(net.minecraftforge.gradle.common.util.MappingFile.Mapping.SEARGE) - setJarTask('trans alaska pipeline') - } - project.afterEvaluate { - createSrgMc.dependsOn(extractSrg, copyMcJar) - createSrgMc.setMappings(extractSrg.getOutput()) - } +task proguard(type: ProguardTask) { + url 'https://downloads.sourceforge.net/project/proguard/v7.1.0-beta5/proguard-7.1.0-beta5.zip' + extract 'proguard-7.1.0-beta5/lib/proguard.jar' + compType compileType +} - task proguard(type: ProguardTask, dependsOn: createSrgMc) { // TODO: dont need to create srg mc if doing notch build - url 'https://downloads.sourceforge.net/project/proguard/proguard/6.0/proguard6.0.3.zip' - extract 'proguard6.0.3/lib/proguard.jar' - } +task createDist(type: CreateDistTask, dependsOn: proguard) - task createDist(type: CreateDistTask, dependsOn: proguard) -} -build.finalizedBy(createDist) +build.finalizedBy(createDist) \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 0773eb5bf..6c3635a80 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -40,8 +40,10 @@ import java.io.*; import java.net.URL; +import java.nio.file.CopyOption; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; @@ -62,10 +64,18 @@ public class ProguardTask extends BaritoneGradleTask { @Input private String extract; + @Input + private String compType; + + private final File copyMcTargetDir = new File("./build/createMcIntermediaryJar").getAbsoluteFile(); + private final File copyMcTargetJar = new File(copyMcTargetDir, "client.jar"); + @TaskAction protected void exec() throws Exception { super.verifyArtifacts(); + copyMcJar(); + // "Haha brady why don't you make separate tasks" processArtifact(); downloadProguard(); @@ -76,6 +86,28 @@ protected void exec() throws Exception { cleanup(); } + private void copyMcJar() throws IOException { + File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() + .stream() + //this line will change when using official mappings in 1.17 + .filter(f -> f.getName().startsWith("minecraft-")) + .map(f -> { + switch (compType) { + case "OFFICIAL": + return new File(f.getParentFile().getParentFile(), f.getName().toString().split("mapped")[0] + "merged.jar"); + case "FABRIC": + return new File(f.getParentFile().getParentFile(), f.getName().toString().replace("mapped", "intermediary")); + case "FORGE": + return new File(f.getParentFile().getParentFile(), f.getName().toString().replace("mapped", "srg")); + } + return null; + }) + .findFirst() + .get(); + if (!copyMcTargetDir.exists() && !copyMcTargetDir.mkdirs()) throw new IOException("Failed to create target for copyMcJar"); + Files.copy(mcClientJar.toPath(), copyMcTargetJar.toPath(), REPLACE_EXISTING); + } + private void processArtifact() throws Exception { if (Files.exists(this.artifactUnoptimizedPath)) { Files.delete(this.artifactUnoptimizedPath); @@ -207,27 +239,20 @@ private void generateConfigs() throws Exception { // Acquire the RT jar using "java -verbose". This doesn't work on Java 9+ Process p = new ProcessBuilder(this.getJavaBinPathForProguard(), "-verbose").start(); String out = IOUtils.toString(p.getInputStream(), "UTF-8").split("\n")[0].split("Opened ")[1].replace("]", ""); - template.add(2, "-libraryjars '" + out + "'"); + template.add(2, "-libraryjars '" + out + "'(!META-INF/versions/**)"); { final Stream libraries; { // Discover all of the libraries that we will need to acquire from gradle final Stream dependencies = acquireDependencies() - // remove MCP mapped jar - .filter(f -> !f.toString().endsWith("-recomp.jar")) + // remove MCP mapped jar, and nashorn + .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")) // go from the extra to the original downloaded client .map(f -> f.toString().endsWith("client-extra.jar") ? new File(f.getParentFile(), "client.jar") : f); - if (getProject().hasProperty("baritone.forge_build")) { - libraries = dependencies - .map(f -> f.toString().endsWith("client.jar") ? getSrgMcJar() : f); - } else if (getProject().hasProperty("baritone.fabric_build")) { - libraries = dependencies - .map(f -> f.getName().endsWith("-v2.jar") && f.getName().startsWith("minecraft-") ? getSrgMcJar() : f); - } else { - libraries = dependencies; - } + libraries = dependencies + .map(f -> f.getName().startsWith("minecraft-") ? copyMcTargetJar : f); } libraries.forEach(f -> { template.add(2, "-libraryjars '" + f + "'"); @@ -277,6 +302,10 @@ public void setExtract(String extract) { this.extract = extract; } + public void setCompType(String compType) { + this.compType = compType; + } + private void runProguard(Path config) throws Exception { // Delete the existing proguard output file. Proguard probably handles this already, but why not do it ourselves if (Files.exists(this.proguardOut)) { diff --git a/scripts/proguard.pro b/scripts/proguard.pro index b4b1e021b..ce298e3a3 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -3,6 +3,7 @@ -optimizationpasses 5 -verbose +-ignorewarnings #until https://github.com/wvengen/proguard-maven-plugin/pull/76 -allowaccessmodification # anything not kept can be changed from public to private and inlined etc -overloadaggressively diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 29fe910fb..efaf3c521 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -30,6 +30,7 @@ import net.minecraft.util.Unit; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.server.ServerWorld; import javax.annotation.Nonnull; import java.util.*; @@ -162,7 +163,7 @@ private static synchronized List drops(Block b) { // the other overload for generate doesnt work in forge because forge adds code that requires a non null world getManager().getLootTableFromLocation(lootTableLocation).generate( - new LootContext.Builder(null) + new LootContext.Builder((ServerWorld) null) .withRandom(new Random()) .withParameter(LootParameters.field_237457_g_, Vector3d.copy(BlockPos.NULL_VECTOR)) .withParameter(LootParameters.TOOL, ItemStack.EMPTY) diff --git a/src/launch/resources/META-INF/MANIFEST.MF b/src/launch/resources/META-INF/MANIFEST.MF new file mode 100644 index 000000000..f45ccbd76 --- /dev/null +++ b/src/launch/resources/META-INF/MANIFEST.MF @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +MixinConfigs: mixins.baritone.json +MixinConnector: baritone.launch.BaritoneMixinConnector +Implementation-Title: Baritone +Implementation-Version: version From a49f4ee8580e8e99bf18feadd46f65cd2daf89f1 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Wed, 16 Jun 2021 02:51:56 -0600 Subject: [PATCH 171/935] cleanup --- Dockerfile | 4 +- .../gradle/fabric/CreateVolderYarn.java | 259 ------------------ 2 files changed, 2 insertions(+), 261 deletions(-) delete mode 100644 buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java diff --git a/Dockerfile b/Dockerfile index 81ae402ec..1febc61c7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,6 @@ COPY . /code WORKDIR /code -RUN ./gradlew build +RUN ./gradlew build -Ploom.forge=true RUN ./gradlew build -Pbaritone.forge_build -RUN ./gradlew build -Pbaritone.fabric_build +RUN ./gradlew build -Pbaritone.fabric_build -Ploom.forge=true diff --git a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java deleted file mode 100644 index 9d19d8202..000000000 --- a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * 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.gradle.fabric; - -import java.io.*; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; - -/** - * @Author Wagyourtail - */ -public class CreateVolderYarn { - public static String VOLDERYARNFOLDER = "./build/volderyarn/"; - public static String VOLDERYARN = "volderyarn-%s-%s-%s.jar"; - - public static void genMappings(String mcVersion, Map mcpVersion) throws IOException { - //download yarn intermediary - URL intURL = new URL(String.format("https://maven.fabricmc.net/net/fabricmc/intermediary/%s/intermediary-%s-v2.jar", mcVersion, mcVersion)); - String intermediary = readZipContentFromURL(intURL, "mappings/mappings.tiny").get("mappings/mappings.tiny"); - Map mappings = parseTinyMap(intermediary); - - //download srg - URL srgURL = new URL(String.format("https://files.minecraftforge.net/maven/de/oceanlabs/mcp/mcp_config/%s/mcp_config-%s.zip", mcVersion, mcVersion)); - String tsrg = readZipContentFromURL(srgURL, "config/joined.tsrg").get("config/joined.tsrg"); - MCPData mcpData = addTSRGData(mappings, tsrg); - - //download mcp - URL mcpURL = new URL(String.format("https://files.minecraftforge.net/maven/de/oceanlabs/mcp/mcp_%s/%s/mcp_%s-%s.zip", mcpVersion.get("channel"), mcpVersion.get("version"), mcpVersion.get("channel"), mcpVersion.get("version"))); - Map mcpfiles = readZipContentFromURL(mcpURL, "fields.csv", "methods.csv"); - addMCPData(mcpData, mcpfiles.get("fields.csv"), mcpfiles.get("methods.csv")); - - StringBuilder builder = new StringBuilder("tiny\t2\t0\tintermediary\tnamed"); - for (ClassData clazz : mappings.values()) { - builder.append("\n").append(clazz.getIntToMCP()); - } - - File outputFolder = new File(VOLDERYARNFOLDER); - if (!outputFolder.exists() && !outputFolder.mkdirs()) - throw new RuntimeException("Failed to create dir for volderyarn mappings."); - - for (File f : outputFolder.listFiles()) { - if (!f.isDirectory()) f.delete(); - } - - File outputFile = new File(outputFolder, String.format(VOLDERYARN, mcVersion, mcpVersion.get("channel"), mcpVersion.get("version"))); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdir()) - throw new FileNotFoundException("Failed to create folder for volderyarn!"); - } - - try (ZipOutputStream output = new ZipOutputStream(new FileOutputStream(outputFile))) { - output.putNextEntry(new ZipEntry("mappings/mappings.tiny")); - byte[] outData = builder.toString().getBytes(StandardCharsets.UTF_8); - output.write(outData, 0, outData.length); - } - } - - private static Map parseTinyMap(String map) { - Map mappings = new LinkedHashMap<>(); - ClassData clazzdata = null; - for (String line : map.split("\n")) { - String[] parts = line.trim().split("\t"); - switch (parts[0]) { - case "c": - mappings.put(parts[1], clazzdata = new ClassData(mappings, parts[1], parts[2])); - break; - case "m": - assert clazzdata != null; - clazzdata.addMethod(parts[2], parts[1], parts[3]); - break; - case "f": - assert clazzdata != null; - clazzdata.addField(parts[2], parts[1], parts[3]); - break; - default: - } - } - return mappings; - } - - private static MCPData addTSRGData(Map mappings, String tsrg) { - MCPData mcpData = new MCPData(); - String[] classes = String.join("\t", tsrg.split("\n\t")).split("\n"); - for (String c : classes) { - String[] lines = c.split("\t"); - String[] classData = lines[0].split("\\s+"); - ClassData clazz = mappings.get(classData[0]); - if (clazz == null) continue; - clazz.mcpName = classData[1]; - for (int i = 1; i < lines.length; ++i) { - String[] lineData = lines[i].split("\\s+"); - //method - if (lineData.length == 3) { - if (!mcpData.methods.containsKey(lineData[2])) mcpData.methods.put(lineData[2], new LinkedList<>()); - MethodData d = clazz.methods.get(lineData[0] + lineData[1]); - if (d == null) continue; - d.mcpName = lineData[2]; - mcpData.methods.get(lineData[2]).add(d); - //field - } else { - if (!mcpData.fields.containsKey(lineData[1])) mcpData.fields.put(lineData[1], new LinkedList<>()); - FieldData d = clazz.fields.get(lineData[0]); - if (d == null) continue; - d.mcpName = lineData[1]; - mcpData.fields.get(lineData[1]).add(d); - } - } - } - return mcpData; - } - - private static void addMCPData(MCPData mcpData, String fields, String methods) { - for (String field : fields.split("\n")) { - String[] fieldData = field.split(","); - mcpData.fields.getOrDefault(fieldData[0].trim(), new LinkedList<>()).forEach(f -> f.mcpName = fieldData[1].trim()); - } - - for (String method : methods.split("\n")) { - String[] methodData = method.split(","); - mcpData.methods.getOrDefault(methodData[0].trim(), new LinkedList<>()).forEach(m -> m.mcpName = methodData[1].trim()); - } - } - - private static Map readZipContentFromURL(URL remote, String... files) throws IOException { - try (ZipInputStream is = new ZipInputStream(new BufferedInputStream(remote.openStream(), 1024))) { - byte[] buff = new byte[1024]; - ZipEntry entry; - Set fileList = new HashSet<>(Arrays.asList(files)); - Map fileContents = new HashMap<>(); - while ((entry = is.getNextEntry()) != null) { - if (fileList.contains(entry.getName())) { - StringBuilder builder = new StringBuilder(); - int read; - while ((read = is.read(buff, 0, 1024)) > 0) { - builder.append(new String(buff, 0, read)); - } - fileContents.put(entry.getName(), builder.toString()); - } - } - return fileContents; - } - } - - private static class ClassData { - final Map classMap; - final String obf; - final String intermediary; - String mcpName; - - final Map methods = new LinkedHashMap<>(); - final Map fields = new LinkedHashMap<>(); - - public ClassData(Map classMap, String obf, String intermediary) { - this.classMap = classMap; - this.obf = obf; - this.intermediary = intermediary; - } - - public void addMethod(String obf, String obfSig, String intermediary) { - methods.put(obf + obfSig, new MethodData(classMap, obf, obfSig, intermediary)); - } - - public void addField(String obf, String obfSig, String intermediary) { - fields.put(obf, new FieldData(classMap, obf, obfSig, intermediary)); - } - - public String getIntToMCP() { - StringBuilder builder = new StringBuilder("c\t").append(intermediary).append("\t").append(mcpName); - for (MethodData method : methods.values()) { - builder.append("\n\tm\t").append(method.getIntermediarySig()).append("\t").append(method.intermediary).append("\t").append(method.mcpName); - } - for (FieldData field : fields.values()) { - builder.append("\n\tf\t").append(field.getIntermediarySig()).append("\t").append(field.intermediary).append("\t").append(field.mcpName); - } - return builder.toString(); - } - } - - private static class MethodData { - final Map classMap; - final String obf; - final String intermediary; - String mcpName; - - final String obfSig; - - public MethodData(Map classMap, String obf, String obfSig, String intermediary) { - this.classMap = classMap; - this.obf = obf; - this.obfSig = obfSig; - this.intermediary = intermediary; - } - - public String getIntermediarySig() { - int offset = 0; - Matcher m = Pattern.compile("L(.+?);").matcher(obfSig); - String intSig = obfSig; - while (m.find()) { - if (!classMap.containsKey(m.group(1))) continue; - String intName = classMap.get(m.group(1)).intermediary; - intSig = intSig.substring(0, m.start(1) + offset) + intName + intSig.substring(m.end(1) + offset); - offset += intName.length() - m.group(1).length(); - } - return intSig; - } - } - - private static class FieldData { - final Map classMap; - final String obf; - final String intermediary; - String mcpName; - - final String obfSig; - - public FieldData(Map classMap, String obf, String obfSig, String intermediary) { - this.classMap = classMap; - this.obf = obf; - this.obfSig = obfSig; - this.intermediary = intermediary; - } - - public String getIntermediarySig() { - Matcher m = Pattern.compile("(\\[*)L(.+?);").matcher(obfSig); - if (m.find()) { - if (!classMap.containsKey(m.group(2))) return obfSig; - return m.group(1) + "L" + classMap.get(m.group(2)).intermediary + ";"; - } else { - return obfSig; - } - } - } - - private static class MCPData { - final Map> methods = new HashMap<>(); - final Map> fields = new HashMap<>(); - } -} From d00249bbd6721fdc3a0e2b0bd062faf6b7dbf8ff Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Mon, 5 Jul 2021 15:15:08 -0600 Subject: [PATCH 172/935] checking again, this is fixed actually (somehow...). --- scripts/proguard.pro | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/proguard.pro b/scripts/proguard.pro index ce298e3a3..b4b1e021b 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -3,7 +3,6 @@ -optimizationpasses 5 -verbose --ignorewarnings #until https://github.com/wvengen/proguard-maven-plugin/pull/76 -allowaccessmodification # anything not kept can be changed from public to private and inlined etc -overloadaggressively From f6236bdc66a772998de766983b88ccb17324ba86 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 6 Jul 2021 08:25:30 -0600 Subject: [PATCH 173/935] launchtweaker build shouldn't require forge --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 90c7373b7..7ff4ec2a7 100755 --- a/build.gradle +++ b/build.gradle @@ -112,12 +112,12 @@ repositories { } dependencies { - if (project.hasProperty("loom.forge")) { + if (compileType.equals("FORGE")) { forge "net.minecraftforge:forge:1.16.5-36.1.0" } minecraft "com.mojang:minecraft:1.16.5" mappings "de.oceanlabs.mcp:mcp_snapshot:20201028-1.16.3" - if (!project.hasProperty("loom.forge")) { + if (!compileType.equals("FORGE")) { modImplementation "net.fabricmc:fabric-loader:0.9.1+build.205" } // this makes it compile with the forge tweak stuff From 2e98eee7e0145975f1ac42a862496c6f8566ef78 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 6 Jul 2021 08:26:30 -0600 Subject: [PATCH 174/935] fix dockerfile --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1febc61c7..440ace557 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,6 @@ COPY . /code WORKDIR /code -RUN ./gradlew build -Ploom.forge=true -RUN ./gradlew build -Pbaritone.forge_build -RUN ./gradlew build -Pbaritone.fabric_build -Ploom.forge=true +RUN ./gradlew build +RUN ./gradlew build -Pbaritone.forge_build -Ploom.forge=true +RUN ./gradlew build -Pbaritone.fabric_build From de42109771e2de579d8d1a4764ea802984d21e04 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 6 Jul 2021 15:59:06 -0600 Subject: [PATCH 175/935] add check --- buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 6c3635a80..68387fc00 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -89,7 +89,6 @@ protected void exec() throws Exception { private void copyMcJar() throws IOException { File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() .stream() - //this line will change when using official mappings in 1.17 .filter(f -> f.getName().startsWith("minecraft-")) .map(f -> { switch (compType) { @@ -104,6 +103,7 @@ private void copyMcJar() throws IOException { }) .findFirst() .get(); + if (!mcClientJar.exists()) throw new IOException("Failed to find minecraft! " + mcClientJar.getAbsolutePath()); if (!copyMcTargetDir.exists() && !copyMcTargetDir.mkdirs()) throw new IOException("Failed to create target for copyMcJar"); Files.copy(mcClientJar.toPath(), copyMcTargetJar.toPath(), REPLACE_EXISTING); } From f0130c71992093f009a0b578b3c81c7ed7f7c737 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Wed, 23 Jun 2021 11:24:22 -0600 Subject: [PATCH 176/935] move to j16/gradle7 --- .vscode/launch.json | 31 ++++++++++ build.gradle | 54 ++++-------------- buildSrc/build.gradle | 4 +- .../gradle/task/BaritoneGradleTask.java | 4 +- .../baritone/gradle/task/CreateDistTask.java | 16 +++++- .../baritone/gradle/task/ProguardTask.java | 44 +++++++------- gradle/wrapper/gradle-wrapper.jar | Bin 54706 -> 54413 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- settings.gradle | 26 ++++++++- 9 files changed, 108 insertions(+), 74 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..f1102ccf1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,31 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Minecraft Client", + "request": "launch", + "cwd": "${workspaceFolder}/run", + "console": "internalConsole", + "stopOnEntry": false, + "mainClass": "net.fabricmc.devlaunchinjector.Main", + "vmArgs": "-Dfabric.dli.config\u003dC:\\Users\\ruwag\\Documents\\Baritone\\.gradle\\loom-cache\\launch.cfg -Dfabric.dli.env\u003dclient -Dfabric.dli.main\u003dnet.fabricmc.loader.launch.knot.KnotClient", + "args": "", + "env": {}, + "projectName": "" + }, + { + "type": "java", + "name": "Minecraft Server", + "request": "launch", + "cwd": "${workspaceFolder}/run", + "console": "internalConsole", + "stopOnEntry": false, + "mainClass": "net.fabricmc.devlaunchinjector.Main", + "vmArgs": "-Dfabric.dli.config\u003dC:\\Users\\ruwag\\Documents\\Baritone\\.gradle\\loom-cache\\launch.cfg -Dfabric.dli.env\u003dserver -Dfabric.dli.main\u003dnet.fabricmc.loader.launch.knot.KnotServer", + "args": "nogui", + "env": {}, + "projectName": "" + } + ] +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7ff4ec2a7..27ad8fbb6 100755 --- a/build.gradle +++ b/build.gradle @@ -14,46 +14,24 @@ * You should have received a copy of the GNU Lesser General Public License * along with Baritone. If not, see . */ -buildscript { - repositories { - mavenCentral() - maven { url "https://maven.architectury.dev/" } - maven { - name = 'forge' - url = 'http://files.minecraftforge.net/maven' - } - maven { - name = 'impactdevelopment-repo' - url = 'https://impactdevelopment.github.io/maven/' - } - maven { - url = 'https://www.dogforce-games.com/maven/' - } - maven { - url = 'https://maven.fabricmc.net/' - } - maven { - url = 'https://libraries.minecraft.net/' - } - } - dependencies { - classpath group: 'me.shedaniel', name: 'forgified-fabric-loom', version: '0.7.0-SNAPSHOT' - } + +plugins { + id 'java' + id 'dev.architectury.loom' version '0.8.0-SNAPSHOT' + id 'maven-publish' } -group 'baritone' -version '1.6.3' +group 'baritone' +version '1.7.0' import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask def compileType = project.hasProperty("baritone.fabric_build") ? "FABRIC" : project.hasProperty("baritone.forge_build") ? "FORGE" : "OFFICIAL" -apply plugin: 'java' -apply plugin: 'forgified-fabric-loom' +sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8 -sourceCompatibility = targetCompatibility = '1.8' compileJava { sourceCompatibility = targetCompatibility = '1.8' options.encoding = "UTF-8" // allow emoji in comments :^) @@ -74,11 +52,9 @@ sourceSets { compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output } - schematica_api { compileClasspath += main.compileClasspath } - main { compileClasspath += schematica_api.output } @@ -88,20 +64,11 @@ loom { mixinConfig 'mixins.baritone.json' } -task sourceJar(type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.api.allSource -} +minecraft {} minecraft.refmapName = "mixins.baritone.refmap.json" repositories { - mavenCentral() - - maven { - name = 'SpongePowered' - url = 'https://repo.spongepowered.org/repository/maven-public/' - } maven { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' @@ -109,6 +76,7 @@ repositories { maven { url = 'https://www.dogforce-games.com/maven/' } + mavenCentral() } dependencies { @@ -116,7 +84,7 @@ dependencies { forge "net.minecraftforge:forge:1.16.5-36.1.0" } minecraft "com.mojang:minecraft:1.16.5" - mappings "de.oceanlabs.mcp:mcp_snapshot:20201028-1.16.3" + mappings minecraft.officialMojangMappings() if (!compileType.equals("FORGE")) { modImplementation "net.fabricmc:fabric-loader:0.9.1+build.205" } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 2ac49af0f..8ab0f7014 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -20,6 +20,6 @@ repositories { } dependencies { - compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5' - compile group: 'commons-io', name: 'commons-io', version: '2.6' + implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' + implementation group: 'commons-io', name: 'commons-io', version: '2.6' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index c86a51e79..89d066619 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -99,7 +99,7 @@ protected String formatVersion(String string) { } protected Path getRelativeFile(String file) { - return Paths.get(new File(file).getAbsolutePath()); + return Paths.get(new File(getProject().getBuildDir(), file).getAbsolutePath()); } protected Path getTemporaryFile(String file) { @@ -107,6 +107,6 @@ protected Path getTemporaryFile(String file) { } protected Path getBuildFile(String file) { - return getRelativeFile("build/libs/" + file); + return getRelativeFile("libs/" + file); } } diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 70c852ef0..e55e84acd 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -19,7 +19,7 @@ import org.gradle.api.tasks.TaskAction; -import javax.xml.bind.DatatypeConverter; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.security.MessageDigest; @@ -93,10 +93,22 @@ private static synchronized String sha1(Path path) { if (SHA1_DIGEST == null) { SHA1_DIGEST = MessageDigest.getInstance("SHA-1"); } - return DatatypeConverter.printHexBinary(SHA1_DIGEST.digest(Files.readAllBytes(path))).toLowerCase(); + return bytesToHex(SHA1_DIGEST.digest(Files.readAllBytes(path))).toLowerCase(); } catch (Exception e) { // haha no thanks throw new IllegalStateException(e); } } + + private static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII); + + public static String bytesToHex(byte[] bytes) { + byte[] hexChars = new byte[bytes.length * 2]; + for (int j = 0; j < bytes.length; j++) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = HEX_ARRAY[v >>> 4]; + hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; + } + return new String(hexChars, StandardCharsets.UTF_8); + } } diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 68387fc00..ce41f3c2b 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -22,28 +22,15 @@ import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; -import org.gradle.api.JavaVersion; -import org.gradle.api.NamedDomainObjectContainer; -import org.gradle.api.artifacts.Configuration; -import org.gradle.api.artifacts.Dependency; -import org.gradle.api.internal.file.IdentityFileResolver; -import org.gradle.api.internal.plugins.DefaultConvention; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskCollection; import org.gradle.api.tasks.compile.ForkOptions; import org.gradle.api.tasks.compile.JavaCompile; -import org.gradle.internal.Pair; import org.gradle.internal.jvm.Jvm; -import org.gradle.internal.jvm.inspection.DefaultJvmVersionDetector; -import org.gradle.process.internal.DefaultExecActionFactory; import java.io.*; import java.net.URL; -import java.nio.file.CopyOption; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; @@ -61,12 +48,24 @@ public class ProguardTask extends BaritoneGradleTask { @Input private String url; + public String getUrl() { + return url; + } + @Input private String extract; + public String getExtract() { + return extract; + } + @Input private String compType; + public String getCompType() { + return compType; + } + private final File copyMcTargetDir = new File("./build/createMcIntermediaryJar").getAbsoluteFile(); private final File copyMcTargetJar = new File(copyMcTargetDir, "client.jar"); @@ -216,15 +215,16 @@ public boolean accept(File dir, String name) { } private boolean validateJavaVersion(String java) { - final JavaVersion javaVersion = new DefaultJvmVersionDetector(new DefaultExecActionFactory(new IdentityFileResolver())).getJavaVersion(java); - - if (!javaVersion.getMajorVersion().equals("8")) { - System.out.println("Failed to validate Java version " + javaVersion.toString() + " [" + java + "] for ProGuard libraryjars"); - // throw new RuntimeException("Java version incorrect: " + javaVersion.getMajorVersion() + " for " + java); - return false; - } - - System.out.println("Validated Java version " + javaVersion.toString() + " [" + java + "] for ProGuard libraryjars"); + //TODO: fix for j16 +// final JavaVersion javaVersion = new DefaultJvmVersionDetector(new DefaultExecActionFactory(new IdentityFileResolver())).getJavaVersion(java); +// +// if (!javaVersion.getMajorVersion().equals("8")) { +// System.out.println("Failed to validate Java version " + javaVersion.toString() + " [" + java + "] for ProGuard libraryjars"); +// // throw new RuntimeException("Java version incorrect: " + javaVersion.getMajorVersion() + " for " + java); +// return false; +// } +// +// System.out.println("Validated Java version " + javaVersion.toString() + " [" + java + "] for ProGuard libraryjars"); return true; } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 4c5670a158b8953b61fd441194873cac2c99930d..0d4a9516871afd710a9d84d89e31ba77745607bd 100755 GIT binary patch delta 23122 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 t;PwunWZVV}AOYeDUZy`^@Sm^trei0F. */ -rootProject.name = 'baritone' +pluginManagement { + repositories { + maven { url "https://maven.architectury.dev/" } + maven { + url = 'https://maven.fabricmc.net/' + } + maven { + name = 'forge' + url = 'https://files.minecraftforge.net/maven' + } + maven { + name = 'impactdevelopment-repo' + url = 'https://impactdevelopment.github.io/maven/' + } + maven { + url = 'https://www.dogforce-games.com/maven/' + } + maven { + url = 'https://libraries.minecraft.net/' + } + mavenCentral() + } +} + +rootProject.name = 'baritone' From e6d8b268c723e1885c880acaba2e616e9b2b497b Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Wed, 23 Jun 2021 11:24:32 -0600 Subject: [PATCH 177/935] migrate to mojmap --- .../java/baritone/api/IBaritoneProvider.java | 9 +- src/api/java/baritone/api/Settings.java | 16 +-- .../baritone/api/cache/IBlockTypeAccess.java | 4 +- .../java/baritone/api/cache/ICachedWorld.java | 7 +- .../baritone/api/cache/IContainerMemory.java | 3 +- .../api/cache/IRememberedInventory.java | 3 +- .../baritone/api/cache/IWorldScanner.java | 7 +- .../api/command/argument/IArgConsumer.java | 3 +- .../command/argument/ICommandArgument.java | 2 +- .../api/command/datatypes/BlockById.java | 7 +- .../command/datatypes/EntityClassById.java | 7 +- .../api/command/datatypes/ForDirection.java | 5 +- .../api/command/datatypes/NearbyPlayer.java | 15 +- .../api/command/datatypes/RelativeFile.java | 2 +- .../command/datatypes/RelativeGoalBlock.java | 9 +- .../api/command/datatypes/RelativeGoalXZ.java | 7 +- .../command/datatypes/RelativeGoalYLevel.java | 5 +- .../exception/CommandUnhandledException.java | 5 +- .../command/exception/ICommandException.java | 5 +- .../api/command/helpers/Paginator.java | 71 +++++----- .../command/helpers/TabCompleteHelper.java | 3 +- .../api/event/events/BlockInteractEvent.java | 2 +- .../api/event/events/PacketEvent.java | 16 +-- .../api/event/events/RenderEvent.java | 10 +- .../api/event/events/RotationMoveEvent.java | 8 +- .../baritone/api/event/events/WorldEvent.java | 8 +- .../event/listener/IGameEventListener.java | 30 ++-- .../java/baritone/api/pathing/goals/Goal.java | 2 +- .../baritone/api/pathing/goals/GoalBlock.java | 2 +- .../api/pathing/goals/GoalGetToBlock.java | 2 +- .../baritone/api/pathing/goals/GoalNear.java | 2 +- .../api/pathing/goals/GoalRunAway.java | 3 +- .../pathing/goals/GoalStrictDirection.java | 8 +- .../api/pathing/goals/GoalTwoBlocks.java | 2 +- .../baritone/api/pathing/goals/GoalXZ.java | 12 +- .../api/pathing/movement/IMovement.java | 2 +- .../baritone/api/process/IBuilderProcess.java | 13 +- .../baritone/api/process/IFarmProcess.java | 2 +- .../baritone/api/process/IFollowProcess.java | 3 +- .../api/process/IGetToBlockProcess.java | 2 +- .../baritone/api/process/IMineProcess.java | 3 +- .../api/schematic/CompositeSchematic.java | 3 +- .../baritone/api/schematic/FillSchematic.java | 7 +- .../baritone/api/schematic/ISchematic.java | 5 +- .../api/schematic/IStaticSchematic.java | 2 +- .../baritone/api/schematic/MaskSchematic.java | 3 +- .../api/schematic/ReplaceSchematic.java | 2 +- .../api/schematic/ShellSchematic.java | 2 +- .../api/schematic/WallsSchematic.java | 2 +- .../baritone/api/selection/ISelection.java | 12 +- .../api/selection/ISelectionManager.java | 2 +- .../baritone/api/utils/BetterBlockPos.java | 27 ++-- .../baritone/api/utils/BlockOptionalMeta.java | 71 ++++++---- .../api/utils/BlockOptionalMetaLookup.java | 7 +- .../java/baritone/api/utils/BlockUtils.java | 9 +- src/api/java/baritone/api/utils/Helper.java | 49 ++++--- .../baritone/api/utils/IPlayerContext.java | 47 ++++--- .../baritone/api/utils/IPlayerController.java | 28 ++-- .../baritone/api/utils/RayTraceUtils.java | 24 ++-- .../baritone/api/utils/RotationUtils.java | 105 +++++++------- .../java/baritone/api/utils/SettingsUtil.java | 21 ++- src/api/java/baritone/api/utils/VecUtils.java | 38 +++--- .../baritone/api/utils/gui/BaritoneToast.java | 32 ++--- .../api/utils/interfaces/IGoalRenderPos.java | 2 +- .../launch/mixins/MixinChunkArray.java | 14 +- .../mixins/MixinClientChunkProvider.java | 16 +-- .../mixins/MixinClientPlayNetHandler.java | 57 ++++---- .../mixins/MixinClientPlayerEntity.java | 32 ++--- .../mixins/MixinCommandSuggestionHelper.java | 14 +- .../baritone/launch/mixins/MixinEntity.java | 8 +- .../mixins/MixinEntityRenderManager.java | 10 +- .../launch/mixins/MixinItemStack.java | 4 +- .../launch/mixins/MixinLivingEntity.java | 22 +-- .../launch/mixins/MixinLootContext.java | 18 +-- .../launch/mixins/MixinMinecraft.java | 14 +- .../launch/mixins/MixinNetworkManager.java | 42 +++--- .../launch/mixins/MixinPlayerController.java | 6 +- .../baritone/launch/mixins/MixinScreen.java | 2 +- .../mixins/MixinSodiumChunkProvider.java | 12 +- .../mixins/MixinSodiumFixedLongHashTable.java | 4 +- .../launch/mixins/MixinWorldRenderer.java | 12 +- src/main/java/baritone/Baritone.java | 2 +- .../baritone/behavior/InventoryBehavior.java | 44 +++--- .../baritone/behavior/MemoryBehavior.java | 5 +- .../baritone/behavior/PathingBehavior.java | 3 +- src/main/java/baritone/cache/CachedChunk.java | 23 ++-- .../java/baritone/cache/CachedRegion.java | 13 +- src/main/java/baritone/cache/CachedWorld.java | 21 ++- src/main/java/baritone/cache/ChunkPacker.java | 56 ++++---- .../java/baritone/cache/ContainerMemory.java | 33 +++-- src/main/java/baritone/cache/WorldData.java | 9 +- .../java/baritone/cache/WorldProvider.java | 16 +-- .../java/baritone/cache/WorldScanner.java | 39 +++--- .../command/ExampleBaritoneControl.java | 21 ++- .../command/defaults/ChestsCommand.java | 11 +- .../command/defaults/ComeCommand.java | 5 +- .../command/defaults/FindCommand.java | 5 +- .../command/defaults/FollowCommand.java | 15 +- .../command/defaults/HelpCommand.java | 13 +- .../baritone/command/defaults/SelCommand.java | 14 +- .../baritone/command/defaults/SetCommand.java | 25 ++-- .../command/defaults/SurfaceCommand.java | 3 +- .../command/defaults/TunnelCommand.java | 5 +- .../command/defaults/WaypointsCommand.java | 53 ++++---- .../java/baritone/event/GameEventHandler.java | 11 +- .../pathing/movement/CalculationContext.java | 28 ++-- .../baritone/pathing/movement/Movement.java | 13 +- .../pathing/movement/MovementHelper.java | 128 +++++++++++------- .../java/baritone/pathing/movement/Moves.java | 2 +- .../movement/movements/MovementAscend.java | 19 ++- .../movement/movements/MovementDescend.java | 23 ++-- .../movement/movements/MovementDiagonal.java | 21 ++- .../movement/movements/MovementDownward.java | 7 +- .../movement/movements/MovementFall.java | 41 +++--- .../movement/movements/MovementParkour.java | 31 ++--- .../movement/movements/MovementPillar.java | 23 ++-- .../movement/movements/MovementTraverse.java | 35 +++-- .../baritone/pathing/path/PathExecutor.java | 23 ++-- .../baritone/process/BackfillProcess.java | 13 +- .../java/baritone/process/BuilderProcess.java | 105 +++++++------- .../java/baritone/process/ExploreProcess.java | 5 +- .../java/baritone/process/FarmProcess.java | 78 ++++++----- .../java/baritone/process/FollowProcess.java | 11 +- .../baritone/process/GetToBlockProcess.java | 16 +-- .../java/baritone/process/MineProcess.java | 42 +++--- .../java/baritone/selection/Selection.java | 20 +-- .../baritone/selection/SelectionManager.java | 3 +- .../baritone/selection/SelectionRenderer.java | 10 +- .../java/baritone/utils/BlockBreakHelper.java | 18 +-- .../java/baritone/utils/BlockPlaceHelper.java | 18 +-- .../baritone/utils/BlockStateInterface.java | 56 ++++---- .../BlockStateInterfaceAccessWrapper.java | 15 +- src/main/java/baritone/utils/GuiClick.java | 66 ++++----- src/main/java/baritone/utils/IRenderer.java | 79 ++++++----- .../baritone/utils/InputOverrideHandler.java | 5 +- .../java/baritone/utils/PathRenderer.java | 115 ++++++++-------- .../baritone/utils/PathingControlManager.java | 3 +- .../baritone/utils/PlayerMovementInput.java | 33 +++-- src/main/java/baritone/utils/ToolSet.java | 49 ++++--- .../baritone/utils/accessor/IChunkArray.java | 5 +- .../utils/accessor/IChunkProviderClient.java | 4 +- .../utils/accessor/IClientChunkProvider.java | 4 +- .../utils/accessor/IPlayerControllerMP.java | 2 +- .../baritone/utils/pathing/Avoidance.java | 7 +- .../utils/pathing/BetterWorldBorder.java | 10 +- .../java/baritone/utils/pathing/PathBase.java | 2 +- .../utils/player/PrimaryPlayerContext.java | 12 +- .../utils/player/PrimaryPlayerController.java | 32 ++--- .../utils/schematic/MapArtSchematic.java | 5 +- .../utils/schematic/StaticSchematic.java | 3 +- .../format/DefaultSchematicFormats.java | 8 +- .../format/defaults/MCEditSchematic.java | 18 +-- .../format/defaults/SpongeSchematic.java | 29 ++-- .../schematica/SchematicAdapter.java | 5 +- .../schematica/SchematicaHelper.java | 3 +- .../lunatrius/core/util/math/MBlockPos.java | 2 +- .../lunatrius/schematica/api/ISchematic.java | 4 +- .../pathing/goals/GoalGetToBlockTest.java | 2 +- .../utils/pathing/BetterBlockPosTest.java | 30 ++-- 159 files changed, 1453 insertions(+), 1447 deletions(-) diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index e4f2ffc30..7fa97d168 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -21,10 +21,9 @@ import baritone.api.command.ICommand; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; -import net.minecraft.client.entity.player.ClientPlayerEntity; - import java.util.List; import java.util.Objects; +import net.minecraft.client.player.LocalPlayer; /** * Provides the present {@link IBaritone} instances, as well as non-baritone instance related APIs. @@ -47,19 +46,19 @@ public interface IBaritoneProvider { * returned by {@link #getPrimaryBaritone()}. * * @return All active {@link IBaritone} instances. - * @see #getBaritoneForPlayer(ClientPlayerEntity) + * @see #getBaritoneForPlayer(LocalPlayer) */ List getAllBaritones(); /** - * Provides the {@link IBaritone} instance for a given {@link ClientPlayerEntity}. This will likely be + * Provides the {@link IBaritone} instance for a given {@link LocalPlayer}. This will likely be * replaced with or be overloaded in addition to {@code #getBaritoneForUser(IBaritoneUser)} when * {@code bot-system} is merged into {@code master}. * * @param player The player * @return The {@link IBaritone} instance. */ - default IBaritone getBaritoneForPlayer(ClientPlayerEntity player) { + default IBaritone getBaritoneForPlayer(LocalPlayer player) { for (IBaritone baritone : getAllBaritones()) { if (Objects.equals(player, baritone.getPlayerContext().player())) { return baritone; diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 3bf966041..89b03b535 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -19,18 +19,16 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.TypeUtils; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; -import net.minecraft.item.Item; -import net.minecraft.util.math.vector.Vector3i; -import net.minecraft.util.text.ITextComponent; - +import net.minecraft.core.Vec3i; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import java.awt.*; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.util.List; import java.util.*; import java.util.function.Consumer; @@ -824,7 +822,7 @@ public final class Settings { /** * How far to move before repeating the build. 0 to disable repeating on a certain axis, 0,0,0 to disable entirely */ - public final Setting buildRepeat = new Setting<>(new Vector3i(0, 0, 0)); + public final Setting buildRepeat = new Setting<>(new Vec3i(0, 0, 0)); /** * How many times to buildrepeat. -1 for infinite. @@ -1023,7 +1021,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ - public final Setting> logger = new Setting<>(Minecraft.getInstance().ingameGUI.getChatGUI()::printChatMessage); + public final Setting> logger = new Setting<>(Minecraft.getInstance().gui.getChat()::addMessage); /** * Print out ALL command exceptions as a stack trace to stdout, even simple syntax errors diff --git a/src/api/java/baritone/api/cache/IBlockTypeAccess.java b/src/api/java/baritone/api/cache/IBlockTypeAccess.java index 8225add14..fd6a258bf 100644 --- a/src/api/java/baritone/api/cache/IBlockTypeAccess.java +++ b/src/api/java/baritone/api/cache/IBlockTypeAccess.java @@ -17,8 +17,8 @@ package baritone.api.cache; -import net.minecraft.block.BlockState; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; /** * @author Brady diff --git a/src/api/java/baritone/api/cache/ICachedWorld.java b/src/api/java/baritone/api/cache/ICachedWorld.java index e681ce51c..6e74fa55a 100644 --- a/src/api/java/baritone/api/cache/ICachedWorld.java +++ b/src/api/java/baritone/api/cache/ICachedWorld.java @@ -17,10 +17,9 @@ package baritone.api.cache; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.chunk.Chunk; - import java.util.ArrayList; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.chunk.LevelChunk; /** * @author Brady @@ -44,7 +43,7 @@ public interface ICachedWorld { * * @param chunk The chunk to pack and store */ - void queueForPacking(Chunk chunk); + void queueForPacking(LevelChunk chunk); /** * Returns whether or not the block at the specified X and Z coordinates diff --git a/src/api/java/baritone/api/cache/IContainerMemory.java b/src/api/java/baritone/api/cache/IContainerMemory.java index 5c19d43b9..b818fb6d8 100644 --- a/src/api/java/baritone/api/cache/IContainerMemory.java +++ b/src/api/java/baritone/api/cache/IContainerMemory.java @@ -17,9 +17,8 @@ package baritone.api.cache; -import net.minecraft.util.math.BlockPos; - import java.util.Map; +import net.minecraft.core.BlockPos; /** * @author Brady diff --git a/src/api/java/baritone/api/cache/IRememberedInventory.java b/src/api/java/baritone/api/cache/IRememberedInventory.java index a7890fe3a..31c34788f 100644 --- a/src/api/java/baritone/api/cache/IRememberedInventory.java +++ b/src/api/java/baritone/api/cache/IRememberedInventory.java @@ -17,9 +17,8 @@ package baritone.api.cache; -import net.minecraft.item.ItemStack; - import java.util.List; +import net.minecraft.world.item.ItemStack; /** * @author Brady diff --git a/src/api/java/baritone/api/cache/IWorldScanner.java b/src/api/java/baritone/api/cache/IWorldScanner.java index bc3064608..ea27dd161 100644 --- a/src/api/java/baritone/api/cache/IWorldScanner.java +++ b/src/api/java/baritone/api/cache/IWorldScanner.java @@ -19,11 +19,10 @@ import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; -import net.minecraft.block.Block; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; - import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.Block; /** * @author Brady diff --git a/src/api/java/baritone/api/command/argument/IArgConsumer.java b/src/api/java/baritone/api/command/argument/IArgConsumer.java index 4435b36e1..894e4a71b 100644 --- a/src/api/java/baritone/api/command/argument/IArgConsumer.java +++ b/src/api/java/baritone/api/command/argument/IArgConsumer.java @@ -27,11 +27,10 @@ import baritone.api.command.exception.CommandNotEnoughArgumentsException; import baritone.api.command.exception.CommandTooManyArgumentsException; import baritone.api.utils.Helper; -import net.minecraft.util.Direction; - import java.util.Deque; import java.util.LinkedList; import java.util.stream.Stream; +import net.minecraft.core.Direction; /** * The {@link IArgConsumer} is how {@link ICommand}s read the arguments passed to them. This class has many benefits: diff --git a/src/api/java/baritone/api/command/argument/ICommandArgument.java b/src/api/java/baritone/api/command/argument/ICommandArgument.java index 341e9d1f6..1d6336866 100644 --- a/src/api/java/baritone/api/command/argument/ICommandArgument.java +++ b/src/api/java/baritone/api/command/argument/ICommandArgument.java @@ -19,7 +19,7 @@ import baritone.api.command.argparser.IArgParser; import baritone.api.command.exception.CommandInvalidTypeException; -import net.minecraft.util.Direction; +import net.minecraft.core.Direction; /** * A {@link ICommandArgument} is an immutable object representing one command argument. It contains data on the index of diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 6293f825c..5e63fcf25 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -19,11 +19,10 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.block.Block; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.Registry; - import java.util.stream.Stream; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; public enum BlockById implements IDatatypeFor { INSTANCE; diff --git a/src/api/java/baritone/api/command/datatypes/EntityClassById.java b/src/api/java/baritone/api/command/datatypes/EntityClassById.java index c6f264c2b..aff7a2d94 100644 --- a/src/api/java/baritone/api/command/datatypes/EntityClassById.java +++ b/src/api/java/baritone/api/command/datatypes/EntityClassById.java @@ -19,11 +19,10 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.entity.EntityType; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.Registry; - import java.util.stream.Stream; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; public enum EntityClassById implements IDatatypeFor { INSTANCE; diff --git a/src/api/java/baritone/api/command/datatypes/ForDirection.java b/src/api/java/baritone/api/command/datatypes/ForDirection.java index 2d75eb882..cbfbc2243 100644 --- a/src/api/java/baritone/api/command/datatypes/ForDirection.java +++ b/src/api/java/baritone/api/command/datatypes/ForDirection.java @@ -19,10 +19,9 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.util.Direction; - import java.util.Locale; import java.util.stream.Stream; +import net.minecraft.core.Direction; public enum ForDirection implements IDatatypeFor { INSTANCE; @@ -36,7 +35,7 @@ public Direction get(IDatatypeContext ctx) throws CommandException { public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() .append(Stream.of(Direction.values()) - .map(Direction::getName2).map(String::toLowerCase)) + .map(Direction::getName).map(String::toLowerCase)) .filterPrefix(ctx.getConsumer().getString()) .stream(); } diff --git a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java index c4095ae40..b0d72bed1 100644 --- a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java +++ b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java @@ -20,21 +20,20 @@ import baritone.api.IBaritone; import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.text.ITextComponent; - import java.util.List; import java.util.stream.Stream; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; /** * An {@link IDatatype} used to resolve nearby players, those within * render distance of the target {@link IBaritone} instance. */ -public enum NearbyPlayer implements IDatatypeFor { +public enum NearbyPlayer implements IDatatypeFor { INSTANCE; @Override - public PlayerEntity get(IDatatypeContext ctx) throws CommandException { + public Player get(IDatatypeContext ctx) throws CommandException { final String username = ctx.getConsumer().getString(); return getPlayers(ctx).stream() .filter(s -> s.getName().getString().equalsIgnoreCase(username)) @@ -44,13 +43,13 @@ public PlayerEntity get(IDatatypeContext ctx) throws CommandException { @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() - .append(getPlayers(ctx).stream().map(PlayerEntity::getName).map(ITextComponent::getString)) + .append(getPlayers(ctx).stream().map(Player::getName).map(Component::getString)) .filterPrefix(ctx.getConsumer().getString()) .sortAlphabetically() .stream(); } - private static List getPlayers(IDatatypeContext ctx) { - return ctx.getBaritone().getPlayerContext().world().getPlayers(); + private static List getPlayers(IDatatypeContext ctx) { + return ctx.getBaritone().getPlayerContext().world().players(); } } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeFile.java b/src/api/java/baritone/api/command/datatypes/RelativeFile.java index 2c7adf98f..f2de7308c 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeFile.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeFile.java @@ -94,7 +94,7 @@ public static Stream tabComplete(IArgConsumer consumer, File base0) thro } public static File gameDir() { - File gameDir = HELPER.mc.gameDir.getAbsoluteFile(); + File gameDir = HELPER.mc.gameDirectory.getAbsoluteFile(); if (gameDir.getName().equals(".")) { return gameDir.getParentFile(); } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java index ccc45cafa..d97635eb2 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java @@ -21,9 +21,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.math.MathHelper; - import java.util.stream.Stream; +import net.minecraft.util.Mth; public enum RelativeGoalBlock implements IDatatypePost { INSTANCE; @@ -36,9 +35,9 @@ public GoalBlock apply(IDatatypeContext ctx, BetterBlockPos origin) throws Comma final IArgConsumer consumer = ctx.getConsumer(); return new GoalBlock( - MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x)), - MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y)), - MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z)) + Mth.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x)), + Mth.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y)), + Mth.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z)) ); } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java index 747509f5e..8682bbbaf 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java @@ -21,9 +21,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.math.MathHelper; - import java.util.stream.Stream; +import net.minecraft.util.Mth; public enum RelativeGoalXZ implements IDatatypePost { INSTANCE; @@ -36,8 +35,8 @@ public GoalXZ apply(IDatatypeContext ctx, BetterBlockPos origin) throws CommandE final IArgConsumer consumer = ctx.getConsumer(); return new GoalXZ( - MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x)), - MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z)) + Mth.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x)), + Mth.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z)) ); } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java index cd1a4c5d4..34c8c0018 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java @@ -21,9 +21,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.math.MathHelper; - import java.util.stream.Stream; +import net.minecraft.util.Mth; public enum RelativeGoalYLevel implements IDatatypePost { INSTANCE; @@ -35,7 +34,7 @@ public GoalYLevel apply(IDatatypeContext ctx, BetterBlockPos origin) throws Comm } return new GoalYLevel( - MathHelper.floor(ctx.getConsumer().getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y)) + Mth.floor(ctx.getConsumer().getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y)) ); } diff --git a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java index 5dce59313..d615ff2cd 100644 --- a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -19,9 +19,8 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; -import net.minecraft.util.text.TextFormatting; - import java.util.List; +import net.minecraft.ChatFormatting; import static baritone.api.utils.Helper.HELPER; @@ -39,7 +38,7 @@ public CommandUnhandledException(Throwable cause) { public void handle(ICommand command, List args) { HELPER.logDirect("An unhandled exception occurred. " + "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", - TextFormatting.RED); + ChatFormatting.RED); this.printStackTrace(); } diff --git a/src/api/java/baritone/api/command/exception/ICommandException.java b/src/api/java/baritone/api/command/exception/ICommandException.java index b521a2e6b..0a1529d69 100644 --- a/src/api/java/baritone/api/command/exception/ICommandException.java +++ b/src/api/java/baritone/api/command/exception/ICommandException.java @@ -19,9 +19,8 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; -import net.minecraft.util.text.TextFormatting; - import java.util.List; +import net.minecraft.ChatFormatting; import static baritone.api.utils.Helper.HELPER; @@ -50,6 +49,6 @@ public interface ICommandException { * @param args The arguments the command was called with. */ default void handle(ICommand command, List args) { - HELPER.logDirect(this.getMessage(), TextFormatting.RED); + HELPER.logDirect(this.getMessage(), ChatFormatting.RED); } } diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index 8b4457653..e2100e95d 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -21,16 +21,15 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.utils.Helper; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; - import java.util.Arrays; import java.util.List; import java.util.function.Function; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.TextComponent; public class Paginator implements Helper { @@ -64,59 +63,59 @@ public Paginator skipPages(int pages) { return this; } - public void display(Function transform, String commandPrefix) { + public void display(Function transform, String commandPrefix) { int offset = (page - 1) * pageSize; for (int i = offset; i < offset + pageSize; i++) { if (i < entries.size()) { logDirect(transform.apply(entries.get(i))); } else { - logDirect("--", TextFormatting.DARK_GRAY); + logDirect("--", ChatFormatting.DARK_GRAY); } } boolean hasPrevPage = commandPrefix != null && validPage(page - 1); boolean hasNextPage = commandPrefix != null && validPage(page + 1); - TextComponent prevPageComponent = new StringTextComponent("<<"); + BaseComponent prevPageComponent = new TextComponent("<<"); if (hasPrevPage) { prevPageComponent.setStyle(prevPageComponent.getStyle() - .setClickEvent(new ClickEvent( + .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format("%s %d", commandPrefix, page - 1) )) - .setHoverEvent(new HoverEvent( + .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new StringTextComponent("Click to view previous page") + new TextComponent("Click to view previous page") ))); } else { - prevPageComponent.setStyle(prevPageComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + prevPageComponent.setStyle(prevPageComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); } - TextComponent nextPageComponent = new StringTextComponent(">>"); + BaseComponent nextPageComponent = new TextComponent(">>"); if (hasNextPage) { nextPageComponent.setStyle(nextPageComponent.getStyle() - .setClickEvent(new ClickEvent( + .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format("%s %d", commandPrefix, page + 1) )) - .setHoverEvent(new HoverEvent( + .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new StringTextComponent("Click to view next page") + new TextComponent("Click to view next page") ))); } else { - nextPageComponent.setStyle(nextPageComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + nextPageComponent.setStyle(nextPageComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); } - TextComponent pagerComponent = new StringTextComponent(""); - pagerComponent.setStyle(pagerComponent.getStyle().setFormatting(TextFormatting.GRAY)); + BaseComponent pagerComponent = new TextComponent(""); + pagerComponent.setStyle(pagerComponent.getStyle().withColor(ChatFormatting.GRAY)); pagerComponent.append(prevPageComponent); - pagerComponent.appendString(" | "); + pagerComponent.append(" | "); pagerComponent.append(nextPageComponent); - pagerComponent.appendString(String.format(" %d/%d", page, getMaxPage())); + pagerComponent.append(String.format(" %d/%d", page, getMaxPage())); logDirect(pagerComponent); } - public void display(Function transform) { + public void display(Function transform) { display(transform, null); } - public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform, String commandPrefix) throws CommandException { int page = 1; consumer.requireMax(1); if (consumer.hasAny()) { @@ -139,47 +138,47 @@ public static void paginate(IArgConsumer consumer, Paginator pagi, Runnab pagi.display(transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { paginate(consumer, new Paginator<>(elems), pre, transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { paginate(consumer, Arrays.asList(elems), pre, transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform, String commandPrefix) throws CommandException { paginate(consumer, pagi, null, transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, List elems, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, List elems, Function transform, String commandPrefix) throws CommandException { paginate(consumer, new Paginator<>(elems), null, transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, T[] elems, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, T[] elems, Function transform, String commandPrefix) throws CommandException { paginate(consumer, Arrays.asList(elems), null, transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform) throws CommandException { paginate(consumer, pagi, pre, transform, null); } - public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform) throws CommandException { paginate(consumer, new Paginator<>(elems), pre, transform, null); } - public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform) throws CommandException { paginate(consumer, Arrays.asList(elems), pre, transform, null); } - public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform) throws CommandException { paginate(consumer, pagi, null, transform, null); } - public static void paginate(IArgConsumer consumer, List elems, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, List elems, Function transform) throws CommandException { paginate(consumer, new Paginator<>(elems), null, transform, null); } - public static void paginate(IArgConsumer consumer, T[] elems, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, T[] elems, Function transform) throws CommandException { paginate(consumer, Arrays.asList(elems), null, transform, null); } } diff --git a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java index 54ae9e8c4..ccbdfa68e 100644 --- a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java @@ -23,14 +23,13 @@ import baritone.api.command.manager.ICommandManager; import baritone.api.event.events.TabCompleteEvent; import baritone.api.utils.SettingsUtil; -import net.minecraft.util.ResourceLocation; - import java.util.Comparator; import java.util.List; import java.util.Locale; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Stream; +import net.minecraft.resources.ResourceLocation; /** * The {@link TabCompleteHelper} is a single-use object that helps you handle tab completion. It includes helper diff --git a/src/api/java/baritone/api/event/events/BlockInteractEvent.java b/src/api/java/baritone/api/event/events/BlockInteractEvent.java index 6508d7397..62f7a0d02 100644 --- a/src/api/java/baritone/api/event/events/BlockInteractEvent.java +++ b/src/api/java/baritone/api/event/events/BlockInteractEvent.java @@ -17,7 +17,7 @@ package baritone.api.event.events; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** * Called when the local player interacts with a block, can be either {@link Type#START_BREAK} or {@link Type#USE}. diff --git a/src/api/java/baritone/api/event/events/PacketEvent.java b/src/api/java/baritone/api/event/events/PacketEvent.java index 43c61a1a9..b605f4fce 100644 --- a/src/api/java/baritone/api/event/events/PacketEvent.java +++ b/src/api/java/baritone/api/event/events/PacketEvent.java @@ -18,8 +18,8 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; -import net.minecraft.network.IPacket; -import net.minecraft.network.NetworkManager; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.Packet; /** * @author Brady @@ -27,19 +27,19 @@ */ public final class PacketEvent { - private final NetworkManager networkManager; + private final Connection networkManager; private final EventState state; - private final IPacket packet; + private final Packet packet; - public PacketEvent(NetworkManager networkManager, EventState state, IPacket packet) { + public PacketEvent(Connection networkManager, EventState state, Packet packet) { this.networkManager = networkManager; this.state = state; this.packet = packet; } - public final NetworkManager getNetworkManager() { + public final Connection getNetworkManager() { return this.networkManager; } @@ -47,12 +47,12 @@ public final EventState getState() { return this.state; } - public final IPacket getPacket() { + public final Packet getPacket() { return this.packet; } @SuppressWarnings("unchecked") - public final > T cast() { + public final > T cast() { return (T) this.packet; } } diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java index 0bd035c25..cb7a0414c 100644 --- a/src/api/java/baritone/api/event/events/RenderEvent.java +++ b/src/api/java/baritone/api/event/events/RenderEvent.java @@ -17,8 +17,8 @@ package baritone.api.event.events; -import com.mojang.blaze3d.matrix.MatrixStack; -import net.minecraft.util.math.vector.Matrix4f; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; /** * @author Brady @@ -32,9 +32,9 @@ public final class RenderEvent { private final float partialTicks; private final Matrix4f projectionMatrix; - private final MatrixStack modelViewStack; + private final PoseStack modelViewStack; - public RenderEvent(float partialTicks, MatrixStack modelViewStack, Matrix4f projectionMatrix) { + public RenderEvent(float partialTicks, PoseStack modelViewStack, Matrix4f projectionMatrix) { this.partialTicks = partialTicks; this.modelViewStack = modelViewStack; this.projectionMatrix = projectionMatrix; @@ -47,7 +47,7 @@ public final float getPartialTicks() { return this.partialTicks; } - public MatrixStack getModelViewStack() { + public PoseStack getModelViewStack() { return this.modelViewStack; } diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index 24793ce89..bae83c0fa 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -17,9 +17,9 @@ package baritone.api.event.events; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.Vec3; /** * @author Brady @@ -70,7 +70,7 @@ public enum Type { /** * Called when the player's motion is updated. * - * @see Entity#moveRelative(float, Vector3d) + * @see Entity#moveRelative(float, Vec3) */ MOTION_UPDATE, diff --git a/src/api/java/baritone/api/event/events/WorldEvent.java b/src/api/java/baritone/api/event/events/WorldEvent.java index 39cd4a32c..f40042e46 100644 --- a/src/api/java/baritone/api/event/events/WorldEvent.java +++ b/src/api/java/baritone/api/event/events/WorldEvent.java @@ -18,7 +18,7 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.multiplayer.ClientLevel; /** * @author Brady @@ -29,14 +29,14 @@ public final class WorldEvent { /** * The new world that is being loaded. {@code null} if being unloaded. */ - private final ClientWorld world; + private final ClientLevel world; /** * The state of the event */ private final EventState state; - public WorldEvent(ClientWorld world, EventState state) { + public WorldEvent(ClientLevel world, EventState state) { this.world = world; this.state = state; } @@ -44,7 +44,7 @@ public WorldEvent(ClientWorld world, EventState state) { /** * @return The new world that is being loaded. {@code null} if being unloaded. */ - public final ClientWorld getWorld() { + public final ClientLevel getWorld() { return this.world; } diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index 0785b170b..a34ea4ef3 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -19,12 +19,12 @@ import baritone.api.event.events.*; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.gui.screen.DeathScreen; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; -import net.minecraft.network.IPacket; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.client.gui.screens.DeathScreen; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.protocol.Packet; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.Vec3; /** * @author Brady @@ -36,7 +36,7 @@ public interface IGameEventListener { * Run once per game tick before screen input is handled. * * @param event The event - * @see Minecraft#runTick() + * @see Minecraft#tick() */ void onTick(TickEvent event); @@ -44,7 +44,7 @@ public interface IGameEventListener { * Run once per game tick from before and after the player rotation is sent to the server. * * @param event The event - * @see ClientPlayerEntity#tick() + * @see LocalPlayer#tick() */ void onPlayerUpdate(PlayerUpdateEvent event); @@ -52,7 +52,7 @@ public interface IGameEventListener { * Runs whenever the client player sends a message to the server. * * @param event The event - * @see ClientPlayerEntity#sendChatMessage(String) + * @see LocalPlayer#chat(String) */ void onSendChatMessage(ChatEvent event); @@ -81,7 +81,7 @@ public interface IGameEventListener { * Runs before and after whenever a new world is loaded * * @param event The event - * @see Minecraft#loadWorld(ClientWorld) + * @see Minecraft#setLevel(ClientLevel) */ void onWorldEvent(WorldEvent event); @@ -89,7 +89,7 @@ public interface IGameEventListener { * Runs before a outbound packet is sent * * @param event The event - * @see IPacket + * @see Packet */ void onSendPacket(PacketEvent event); @@ -97,7 +97,7 @@ public interface IGameEventListener { * Runs before an inbound packet is processed * * @param event The event - * @see IPacket + * @see Packet */ void onReceivePacket(PacketEvent event); @@ -106,15 +106,15 @@ public interface IGameEventListener { * and before and after the player jumps. * * @param event The event - * @see Entity#moveRelative(float, Vector3d) + * @see Entity#moveRelative(float, Vec3) */ void onPlayerRotationMove(RotationMoveEvent event); /** - * Called whenever the sprint keybind state is checked in {@link ClientPlayerEntity#livingTick} + * Called whenever the sprint keybind state is checked in {@link LocalPlayer#aiStep} * * @param event The event - * @see ClientPlayerEntity#livingTick() + * @see LocalPlayer#aiStep() */ void onPlayerSprintState(SprintStateEvent event); diff --git a/src/api/java/baritone/api/pathing/goals/Goal.java b/src/api/java/baritone/api/pathing/goals/Goal.java index acee68db8..c7d2c8183 100644 --- a/src/api/java/baritone/api/pathing/goals/Goal.java +++ b/src/api/java/baritone/api/pathing/goals/Goal.java @@ -17,7 +17,7 @@ package baritone.api.pathing.goals; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** * An abstract Goal for pathing, can be anything from a specific block to just a Y coordinate. diff --git a/src/api/java/baritone/api/pathing/goals/GoalBlock.java b/src/api/java/baritone/api/pathing/goals/GoalBlock.java index c85e5cadd..5ba728bb5 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalBlock.java @@ -19,7 +19,7 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** * A specific BlockPos goal diff --git a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java index 8d6fdcb30..8d15e4bc9 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java @@ -19,7 +19,7 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** diff --git a/src/api/java/baritone/api/pathing/goals/GoalNear.java b/src/api/java/baritone/api/pathing/goals/GoalNear.java index 73d64ed9f..eccc27b06 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalNear.java +++ b/src/api/java/baritone/api/pathing/goals/GoalNear.java @@ -19,7 +19,7 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public class GoalNear implements Goal, IGoalRenderPos { diff --git a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java index 287e3e9ed..8da1b2c56 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java +++ b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java @@ -18,9 +18,8 @@ package baritone.api.pathing.goals; import baritone.api.utils.SettingsUtil; -import net.minecraft.util.math.BlockPos; - import java.util.Arrays; +import net.minecraft.core.BlockPos; /** * Useful for automated combat (retreating specifically) diff --git a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java index 1f8e837a5..37452f21f 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java +++ b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java @@ -18,8 +18,8 @@ package baritone.api.pathing.goals; import baritone.api.utils.SettingsUtil; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; /** * Dig a tunnel in a certain direction, but if you have to deviate from the path, go back to where you started @@ -36,8 +36,8 @@ public GoalStrictDirection(BlockPos origin, Direction direction) { x = origin.getX(); y = origin.getY(); z = origin.getZ(); - dx = direction.getXOffset(); - dz = direction.getZOffset(); + dx = direction.getStepX(); + dz = direction.getStepZ(); if (dx == 0 && dz == 0) { throw new IllegalArgumentException(direction + ""); } diff --git a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java index 27be981e4..1b7213471 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java +++ b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java @@ -19,7 +19,7 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** * Useful if the goal is just to mine a block. This goal will be satisfied if the specified diff --git a/src/api/java/baritone/api/pathing/goals/GoalXZ.java b/src/api/java/baritone/api/pathing/goals/GoalXZ.java index d658cbf35..f70f6c4f7 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalXZ.java +++ b/src/api/java/baritone/api/pathing/goals/GoalXZ.java @@ -20,8 +20,8 @@ import baritone.api.BaritoneAPI; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; /** * Useful for long-range goals that don't have a specific Y level. @@ -94,11 +94,11 @@ public static double calculate(double xDiff, double zDiff) { return (diagonal + straight) * BaritoneAPI.getSettings().costHeuristic.value; // big TODO tune } - public static GoalXZ fromDirection(Vector3d origin, float yaw, double distance) { + public static GoalXZ fromDirection(Vec3 origin, float yaw, double distance) { float theta = (float) Math.toRadians(yaw); - double x = origin.x - MathHelper.sin(theta) * distance; - double z = origin.z + MathHelper.cos(theta) * distance; - return new GoalXZ(MathHelper.floor(x), MathHelper.floor(z)); + double x = origin.x - Mth.sin(theta) * distance; + double z = origin.z + Mth.cos(theta) * distance; + return new GoalXZ(Mth.floor(x), Mth.floor(z)); } public int getX() { diff --git a/src/api/java/baritone/api/pathing/movement/IMovement.java b/src/api/java/baritone/api/pathing/movement/IMovement.java index dae8668d5..5136ccc3f 100644 --- a/src/api/java/baritone/api/pathing/movement/IMovement.java +++ b/src/api/java/baritone/api/pathing/movement/IMovement.java @@ -18,7 +18,7 @@ package baritone.api.pathing.movement; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** * @author Brady diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 67255d7e8..bf49307af 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -18,11 +18,10 @@ package baritone.api.process; import baritone.api.schematic.ISchematic; -import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3i; - +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.world.level.block.state.BlockState; import java.io.File; import java.util.List; @@ -39,7 +38,7 @@ public interface IBuilderProcess extends IBaritoneProcess { * @param schematic The object representation of the schematic * @param origin The origin position of the schematic being built */ - void build(String name, ISchematic schematic, Vector3i origin); + void build(String name, ISchematic schematic, Vec3i origin); /** * Requests a build for the specified schematic, labeled as specified, with the specified origin. @@ -49,10 +48,10 @@ public interface IBuilderProcess extends IBaritoneProcess { * @param origin The origin position of the schematic being built * @return Whether or not the schematic was able to load from file */ - boolean build(String name, File schematic, Vector3i origin); + boolean build(String name, File schematic, Vec3i origin); default boolean build(String schematicFile, BlockPos origin) { - File file = new File(new File(Minecraft.getInstance().gameDir, "schematics"), schematicFile); + File file = new File(new File(Minecraft.getInstance().gameDirectory, "schematics"), schematicFile); return build(schematicFile, file, origin); } diff --git a/src/api/java/baritone/api/process/IFarmProcess.java b/src/api/java/baritone/api/process/IFarmProcess.java index 224307afa..0c07567de 100644 --- a/src/api/java/baritone/api/process/IFarmProcess.java +++ b/src/api/java/baritone/api/process/IFarmProcess.java @@ -17,7 +17,7 @@ package baritone.api.process; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public interface IFarmProcess extends IBaritoneProcess { diff --git a/src/api/java/baritone/api/process/IFollowProcess.java b/src/api/java/baritone/api/process/IFollowProcess.java index ef869da40..6f7f0a239 100644 --- a/src/api/java/baritone/api/process/IFollowProcess.java +++ b/src/api/java/baritone/api/process/IFollowProcess.java @@ -17,10 +17,9 @@ package baritone.api.process; -import net.minecraft.entity.Entity; - import java.util.List; import java.util.function.Predicate; +import net.minecraft.world.entity.Entity; /** * @author Brady diff --git a/src/api/java/baritone/api/process/IGetToBlockProcess.java b/src/api/java/baritone/api/process/IGetToBlockProcess.java index f58efbd35..8f3264dc3 100644 --- a/src/api/java/baritone/api/process/IGetToBlockProcess.java +++ b/src/api/java/baritone/api/process/IGetToBlockProcess.java @@ -18,7 +18,7 @@ package baritone.api.process; import baritone.api.utils.BlockOptionalMeta; -import net.minecraft.block.Block; +import net.minecraft.world.level.block.Block; /** * but it rescans the world every once in a while so it doesn't get fooled by its cache diff --git a/src/api/java/baritone/api/process/IMineProcess.java b/src/api/java/baritone/api/process/IMineProcess.java index 9cd76a09a..a63eb00a2 100644 --- a/src/api/java/baritone/api/process/IMineProcess.java +++ b/src/api/java/baritone/api/process/IMineProcess.java @@ -19,9 +19,8 @@ import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMetaLookup; -import net.minecraft.block.Block; - import java.util.stream.Stream; +import net.minecraft.world.level.block.Block; /** * @author Brady diff --git a/src/api/java/baritone/api/schematic/CompositeSchematic.java b/src/api/java/baritone/api/schematic/CompositeSchematic.java index 22df6a4ee..a7a98c3b6 100644 --- a/src/api/java/baritone/api/schematic/CompositeSchematic.java +++ b/src/api/java/baritone/api/schematic/CompositeSchematic.java @@ -17,10 +17,9 @@ package baritone.api.schematic; -import net.minecraft.block.BlockState; - import java.util.ArrayList; import java.util.List; +import net.minecraft.world.level.block.state.BlockState; public class CompositeSchematic extends AbstractSchematic { diff --git a/src/api/java/baritone/api/schematic/FillSchematic.java b/src/api/java/baritone/api/schematic/FillSchematic.java index e43ddb93c..886ef09ef 100644 --- a/src/api/java/baritone/api/schematic/FillSchematic.java +++ b/src/api/java/baritone/api/schematic/FillSchematic.java @@ -18,10 +18,9 @@ package baritone.api.schematic; import baritone.api.utils.BlockOptionalMeta; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; - import java.util.List; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; public class FillSchematic extends AbstractSchematic { @@ -45,7 +44,7 @@ public BlockState desiredState(int x, int y, int z, BlockState current, List stateHashes; private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); - private static LootTableManager manager; - private static LootPredicateManager predicate = new LootPredicateManager(); + private static LootTables manager; + private static PredicateManager predicate = new PredicateManager(); private static Map> drops = new HashMap<>(); public BlockOptionalMeta(@Nonnull Block block) { @@ -73,7 +84,7 @@ public BlockOptionalMeta(@Nonnull String selector) { } private static Set getStates(@Nonnull Block block) { - return new HashSet<>(block.getStateContainer().getValidStates()); + return new HashSet<>(block.getStateDefinition().getPossibleStates()); } private static ImmutableSet getStateHashes(Set blockstates) { @@ -114,7 +125,7 @@ public boolean matches(ItemStack stack) { //noinspection ConstantConditions int hash = ((IItemStack) (Object) stack).getBaritoneHash(); - hash -= stack.getDamage(); + hash -= stack.getDamageValue(); return stackHashes.contains(hash); } @@ -132,16 +143,16 @@ public BlockState getAnyBlockState() { return null; } - public static LootTableManager getManager() { + public static LootTables getManager() { if (manager == null) { - ResourcePackList rpl = new ResourcePackList(ResourcePackInfo::new, new ServerPackFinder()); - rpl.reloadPacksFromFinders(); - IResourcePack thePack = rpl.getAllPacks().iterator().next().getResourcePack(); - IReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(ResourcePackType.SERVER_DATA); - manager = new LootTableManager(predicate); - resourceManager.addReloadListener(manager); + PackRepository rpl = new PackRepository(Pack::new, new ServerPacksSource()); + rpl.reload(); + PackResources thePack = rpl.getAvailablePacks().iterator().next().open(); + ReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(PackType.SERVER_DATA); + manager = new LootTables(predicate); + resourceManager.registerReloadListener(manager); try { - resourceManager.reloadResourcesAndThen(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), Collections.singletonList(thePack), CompletableFuture.completedFuture(Unit.INSTANCE)).get(); + resourceManager.reload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), Collections.singletonList(thePack), CompletableFuture.completedFuture(Unit.INSTANCE)).get(); } catch (Exception exception) { throw new RuntimeException(exception); } @@ -149,27 +160,27 @@ public static LootTableManager getManager() { return manager; } - public static LootPredicateManager getPredicateManager() { + public static PredicateManager getPredicateManager() { return predicate; } private static synchronized List drops(Block b) { return drops.computeIfAbsent(b, block -> { ResourceLocation lootTableLocation = block.getLootTable(); - if (lootTableLocation == LootTables.EMPTY) { + if (lootTableLocation == BuiltInLootTables.EMPTY) { return Collections.emptyList(); } else { List items = new ArrayList<>(); // the other overload for generate doesnt work in forge because forge adds code that requires a non null world - getManager().getLootTableFromLocation(lootTableLocation).generate( - new LootContext.Builder((ServerWorld) null) + getManager().get(lootTableLocation).getRandomItems( + new LootContext.Builder((ServerLevel) null) .withRandom(new Random()) - .withParameter(LootParameters.field_237457_g_, Vector3d.copy(BlockPos.NULL_VECTOR)) - .withParameter(LootParameters.TOOL, ItemStack.EMPTY) - .withNullableParameter(LootParameters.BLOCK_ENTITY, null) - .withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()) - .build(LootParameterSets.BLOCK), + .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) + .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) + .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) + .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) + .create(LootContextParamSets.BLOCK), stack -> items.add(stack.getItem()) ); return items; diff --git a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java index b68432c2b..7c1070a84 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java @@ -17,13 +17,12 @@ package baritone.api.utils; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.ItemStack; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; public class BlockOptionalMetaLookup { diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index 35f626bd6..cc4204f8e 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -17,12 +17,11 @@ package baritone.api.utils; -import net.minecraft.block.Block; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.Registry; - import java.util.HashMap; import java.util.Map; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; public class BlockUtils { @@ -57,7 +56,7 @@ public static Block stringToBlockNullable(String name) { if (resourceCache.containsKey(name)) { return null; // cached as null } - block = Registry.BLOCK.getOptional(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)).orElse(null); + block = Registry.BLOCK.getOptional(ResourceLocation.tryParse(name.contains(":") ? name : "minecraft:" + name)).orElse(null); Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); resourceCache = copy; diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 09002bbf5..4f4f1351f 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -19,12 +19,11 @@ import baritone.api.BaritoneAPI; import baritone.api.utils.gui.BaritoneToast; +import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TextFormatting; - +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; import java.util.Arrays; import java.util.Calendar; import java.util.stream.Stream; @@ -48,19 +47,19 @@ public interface Helper { */ Minecraft mc = Minecraft.getInstance(); - static ITextComponent getPrefix() { + static Component getPrefix() { // Inner text component final Calendar now = Calendar.getInstance(); final boolean xd = now.get(Calendar.MONTH) == Calendar.APRIL && now.get(Calendar.DAY_OF_MONTH) <= 3; - TextComponent baritone = new StringTextComponent(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); - baritone.setStyle(baritone.getStyle().setFormatting(TextFormatting.LIGHT_PURPLE)); + BaseComponent baritone = new TextComponent(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); + baritone.setStyle(baritone.getStyle().withColor(ChatFormatting.LIGHT_PURPLE)); // Outer brackets - TextComponent prefix = new StringTextComponent(""); - prefix.setStyle(baritone.getStyle().setFormatting(TextFormatting.DARK_PURPLE)); - prefix.appendString("["); + BaseComponent prefix = new TextComponent(""); + prefix.setStyle(baritone.getStyle().withColor(ChatFormatting.DARK_PURPLE)); + prefix.append("["); prefix.append(baritone); - prefix.appendString("]"); + prefix.append("]"); return prefix; } @@ -71,8 +70,8 @@ static ITextComponent getPrefix() { * @param title The title to display in the popup * @param message The message to display in the popup */ - default void logToast(ITextComponent title, ITextComponent message) { - mc.execute(() -> BaritoneToast.addOrUpdate(mc.getToastGui(), title, message, BaritoneAPI.getSettings().toastTimer.value)); + default void logToast(Component title, Component message) { + mc.execute(() -> BaritoneToast.addOrUpdate(mc.getToasts(), title, message, BaritoneAPI.getSettings().toastTimer.value)); } /** @@ -82,7 +81,7 @@ default void logToast(ITextComponent title, ITextComponent message) { * @param message The message to display in the popup */ default void logToast(String title, String message) { - logToast(new StringTextComponent(title), new StringTextComponent(message)); + logToast(new TextComponent(title), new TextComponent(message)); } /** @@ -91,7 +90,7 @@ default void logToast(String title, String message) { * @param message The message to display in the popup */ default void logToast(String message) { - logToast(Helper.getPrefix(), new StringTextComponent(message)); + logToast(Helper.getPrefix(), new TextComponent(message)); } /** @@ -116,10 +115,10 @@ default void logDebug(String message) { * @param logAsToast Whether to log as a toast notification * @param components The components to send */ - default void logDirect(boolean logAsToast, ITextComponent... components) { - TextComponent component = new StringTextComponent(""); + default void logDirect(boolean logAsToast, Component... components) { + BaseComponent component = new TextComponent(""); component.append(getPrefix()); - component.append(new StringTextComponent(" ")); + component.append(new TextComponent(" ")); Arrays.asList(components).forEach(component::append); if (logAsToast) { logToast(getPrefix(), component); @@ -133,7 +132,7 @@ default void logDirect(boolean logAsToast, ITextComponent... components) { * * @param components The components to send */ - default void logDirect(ITextComponent... components) { + default void logDirect(Component... components) { logDirect(BaritoneAPI.getSettings().logAsToast.value, components); } @@ -145,10 +144,10 @@ default void logDirect(ITextComponent... components) { * @param color The color to print that message in * @param logAsToast Whether to log as a toast notification */ - default void logDirect(String message, TextFormatting color, boolean logAsToast) { + default void logDirect(String message, ChatFormatting color, boolean logAsToast) { Stream.of(message.split("\n")).forEach(line -> { - TextComponent component = new StringTextComponent(line.replace("\t", " ")); - component.setStyle(component.getStyle().setFormatting(color)); + BaseComponent component = new TextComponent(line.replace("\t", " ")); + component.setStyle(component.getStyle().withColor(color)); logDirect(logAsToast, component); }); } @@ -160,7 +159,7 @@ default void logDirect(String message, TextFormatting color, boolean logAsToast) * @param message The message to display in chat * @param color The color to print that message in */ - default void logDirect(String message, TextFormatting color) { + default void logDirect(String message, ChatFormatting color) { logDirect(message, color, BaritoneAPI.getSettings().logAsToast.value); } @@ -172,7 +171,7 @@ default void logDirect(String message, TextFormatting color) { * @param logAsToast Whether to log as a toast notification */ default void logDirect(String message, boolean logAsToast) { - logDirect(message, TextFormatting.GRAY, logAsToast); + logDirect(message, ChatFormatting.GRAY, logAsToast); } /** diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 4e93fd35d..dd91bdab3 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -18,19 +18,18 @@ package baritone.api.utils; import baritone.api.cache.IWorldData; -import net.minecraft.block.SlabBlock; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.world.World; - import java.util.Optional; import java.util.stream.Stream; import java.util.stream.StreamSupport; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; /** * @author Brady @@ -38,14 +37,14 @@ */ public interface IPlayerContext { - ClientPlayerEntity player(); + LocalPlayer player(); IPlayerController playerController(); - World world(); + Level world(); default Iterable entities() { - return ((ClientWorld) world()).getAllEntities(); + return ((ClientLevel) world()).entitiesForRendering(); } default Stream entitiesStream() { @@ -55,11 +54,11 @@ default Stream entitiesStream() { IWorldData worldData(); - RayTraceResult objectMouseOver(); + HitResult objectMouseOver(); default BetterBlockPos playerFeet() { // TODO find a better way to deal with soul sand!!!!! - BetterBlockPos feet = new BetterBlockPos(player().getPositionVec().x, player().getPositionVec().y + 0.1251, player().getPositionVec().z); + BetterBlockPos feet = new BetterBlockPos(player().position().x, player().position().y + 0.1251, player().position().z); // sometimes when calling this from another thread or while world is null, it'll throw a NullPointerException // that causes the game to immediately crash @@ -71,23 +70,23 @@ default BetterBlockPos playerFeet() { // if there is an exception, the only overhead is Java generating the exception object... so we can ignore it try { if (world().getBlockState(feet).getBlock() instanceof SlabBlock) { - return feet.up(); + return feet.above(); } } catch (NullPointerException ignored) {} return feet; } - default Vector3d playerFeetAsVec() { - return new Vector3d(player().getPositionVec().x, player().getPositionVec().y, player().getPositionVec().z); + default Vec3 playerFeetAsVec() { + return new Vec3(player().position().x, player().position().y, player().position().z); } - default Vector3d playerHead() { - return new Vector3d(player().getPositionVec().x, player().getPositionVec().y + player().getEyeHeight(), player().getPositionVec().z); + default Vec3 playerHead() { + return new Vec3(player().position().x, player().position().y + player().getEyeHeight(), player().position().z); } default Rotation playerRotations() { - return new Rotation(player().rotationYaw, player().rotationPitch); + return new Rotation(player().yRot, player().xRot); } static double eyeHeight(boolean ifSneaking) { @@ -100,9 +99,9 @@ static double eyeHeight(boolean ifSneaking) { * @return The position of the highlighted block */ default Optional getSelectedBlock() { - RayTraceResult result = objectMouseOver(); - if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { - return Optional.of(((BlockRayTraceResult) result).getPos()); + HitResult result = objectMouseOver(); + if (result != null && result.getType() == HitResult.Type.BLOCK) { + return Optional.of(((BlockHitResult) result).getBlockPos()); } return Optional.empty(); } diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index 58579b18e..7919654be 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -18,17 +18,17 @@ package baritone.api.utils; import baritone.api.BaritoneAPI; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ClickType; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Direction; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.world.GameType; -import net.minecraft.world.World; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.GameType; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; /** * @author Brady @@ -44,13 +44,13 @@ public interface IPlayerController { void resetBlockRemoving(); - ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, PlayerEntity player); + ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, Player player); GameType getGameType(); - ActionResultType processRightClickBlock(ClientPlayerEntity player, World world, Hand hand, BlockRayTraceResult result); + InteractionResult processRightClickBlock(LocalPlayer player, Level world, InteractionHand hand, BlockHitResult result); - ActionResultType processRightClick(ClientPlayerEntity player, World world, Hand hand); + InteractionResult processRightClick(LocalPlayer player, Level world, InteractionHand hand); boolean clickBlock(BlockPos loc, Direction face); diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 82a3e521c..70c79be0b 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -17,10 +17,10 @@ package baritone.api.utils; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.RayTraceContext; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; /** * @author Brady @@ -40,27 +40,27 @@ private RayTraceUtils() {} * @param blockReachDistance The block reach distance of the entity * @return The calculated raytrace result */ - public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance) { + public static HitResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance) { return rayTraceTowards(entity, rotation, blockReachDistance, false); } - public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance, boolean wouldSneak) { - Vector3d start; + public static HitResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance, boolean wouldSneak) { + Vec3 start; if (wouldSneak) { start = inferSneakingEyePosition(entity); } else { start = entity.getEyePosition(1.0F); // do whatever is correct } - Vector3d direction = RotationUtils.calcVector3dFromRotation(rotation); - Vector3d end = start.add( + Vec3 direction = RotationUtils.calcVector3dFromRotation(rotation); + Vec3 end = start.add( direction.x * blockReachDistance, direction.y * blockReachDistance, direction.z * blockReachDistance ); - return entity.world.rayTraceBlocks(new RayTraceContext(start, end, RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, entity)); + return entity.level.clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)); } - public static Vector3d inferSneakingEyePosition(Entity entity) { - return new Vector3d(entity.getPosX(), entity.getPosY() + IPlayerContext.eyeHeight(true), entity.getPosZ()); + public static Vec3 inferSneakingEyePosition(Entity entity) { + return new Vec3(entity.getX(), entity.getY() + IPlayerContext.eyeHeight(true), entity.getZ()); } } diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index ec178c390..4c90be512 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -19,20 +19,19 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; -import net.minecraft.block.AbstractFireBlock; -import net.minecraft.block.BlockState; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.entity.Entity; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.VoxelShapes; -import net.minecraft.util.math.vector.Vector3d; - import java.util.Optional; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; /** * @author Brady @@ -53,13 +52,13 @@ public final class RotationUtils { /** * Offsets from the root block position to the center of each side. */ - private static final Vector3d[] BLOCK_SIDE_MULTIPLIERS = new Vector3d[]{ - new Vector3d(0.5, 0, 0.5), // Down - new Vector3d(0.5, 1, 0.5), // Up - new Vector3d(0.5, 0.5, 0), // North - new Vector3d(0.5, 0.5, 1), // South - new Vector3d(0, 0.5, 0.5), // West - new Vector3d(1, 0.5, 0.5) // East + private static final Vec3[] BLOCK_SIDE_MULTIPLIERS = new Vec3[]{ + new Vec3(0.5, 0, 0.5), // Down + new Vec3(0.5, 1, 0.5), // Up + new Vec3(0.5, 0.5, 0), // North + new Vec3(0.5, 0.5, 1), // South + new Vec3(0, 0.5, 0.5), // West + new Vec3(1, 0.5, 0.5) // East }; private RotationUtils() {} @@ -72,7 +71,7 @@ private RotationUtils() {} * @return The rotation from the origin to the destination */ public static Rotation calcRotationFromCoords(BlockPos orig, BlockPos dest) { - return calcRotationFromVec3d(new Vector3d(orig.getX(), orig.getY(), orig.getZ()), new Vector3d(dest.getX(), dest.getY(), dest.getZ())); + return calcRotationFromVec3d(new Vec3(orig.getX(), orig.getY(), orig.getZ()), new Vec3(dest.getX(), dest.getY(), dest.getZ())); } /** @@ -101,7 +100,7 @@ public static Rotation wrapAnglesToRelative(Rotation current, Rotation target) { * @return The rotation from the origin to the destination * @see #wrapAnglesToRelative(Rotation, Rotation) */ - public static Rotation calcRotationFromVec3d(Vector3d orig, Vector3d dest, Rotation current) { + public static Rotation calcRotationFromVec3d(Vec3 orig, Vec3 dest, Rotation current) { return wrapAnglesToRelative(current, calcRotationFromVec3d(orig, dest)); } @@ -112,11 +111,11 @@ public static Rotation calcRotationFromVec3d(Vector3d orig, Vector3d dest, Rotat * @param dest The destination position * @return The rotation from the origin to the destination */ - private static Rotation calcRotationFromVec3d(Vector3d orig, Vector3d dest) { + private static Rotation calcRotationFromVec3d(Vec3 orig, Vec3 dest) { double[] delta = {orig.x - dest.x, orig.y - dest.y, orig.z - dest.z}; - double yaw = MathHelper.atan2(delta[0], -delta[2]); + double yaw = Mth.atan2(delta[0], -delta[2]); double dist = Math.sqrt(delta[0] * delta[0] + delta[2] * delta[2]); - double pitch = MathHelper.atan2(delta[1], dist); + double pitch = Mth.atan2(delta[1], dist); return new Rotation( (float) (yaw * RAD_TO_DEG), (float) (pitch * RAD_TO_DEG) @@ -129,19 +128,19 @@ private static Rotation calcRotationFromVec3d(Vector3d orig, Vector3d dest) { * @param rotation The input rotation * @return Look vector for the rotation */ - public static Vector3d calcVector3dFromRotation(Rotation rotation) { - float f = MathHelper.cos(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); - float f1 = MathHelper.sin(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); - float f2 = -MathHelper.cos(-rotation.getPitch() * (float) DEG_TO_RAD); - float f3 = MathHelper.sin(-rotation.getPitch() * (float) DEG_TO_RAD); - return new Vector3d((double) (f1 * f2), (double) f3, (double) (f * f2)); + public static Vec3 calcVector3dFromRotation(Rotation rotation) { + float f = Mth.cos(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); + float f1 = Mth.sin(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); + float f2 = -Mth.cos(-rotation.getPitch() * (float) DEG_TO_RAD); + float f3 = Mth.sin(-rotation.getPitch() * (float) DEG_TO_RAD); + return new Vec3((double) (f1 * f2), (double) f3, (double) (f * f2)); } /** * @param ctx Context for the viewing entity * @param pos The target block position * @return The optional rotation - * @see #reachable(ClientPlayerEntity, BlockPos, double) + * @see #reachable(LocalPlayer, BlockPos, double) */ public static Optional reachable(IPlayerContext ctx, BlockPos pos) { return reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); @@ -163,11 +162,11 @@ public static Optional reachable(IPlayerContext ctx, BlockPos pos, boo * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachable(ClientPlayerEntity entity, BlockPos pos, double blockReachDistance) { + public static Optional reachable(LocalPlayer entity, BlockPos pos, double blockReachDistance) { return reachable(entity, pos, blockReachDistance, false); } - public static Optional reachable(ClientPlayerEntity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + public static Optional reachable(LocalPlayer entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(entity); if (baritone.getPlayerContext().isLookingAt(pos)) { /* @@ -180,11 +179,11 @@ public static Optional reachable(ClientPlayerEntity entity, BlockPos p * * or if you're a normal person literally all this does it ensure that we don't nudge the pitch to a normal level */ - Rotation hypothetical = new Rotation(entity.rotationYaw, entity.rotationPitch + 0.0001F); + Rotation hypothetical = new Rotation(entity.yRot, entity.xRot + 0.0001F); if (wouldSneak) { // the concern here is: what if we're looking at it now, but as soon as we start sneaking we no longer are - RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, hypothetical, blockReachDistance, true); - if (result != null && result.getType() == RayTraceResult.Type.BLOCK && ((BlockRayTraceResult) result).getPos().equals(pos)) { + HitResult result = RayTraceUtils.rayTraceTowards(entity, hypothetical, blockReachDistance, true); + if (result != null && result.getType() == HitResult.Type.BLOCK && ((BlockHitResult) result).getBlockPos().equals(pos)) { return Optional.of(hypothetical); // yes, if we sneaked we would still be looking at the block } } else { @@ -197,16 +196,16 @@ public static Optional reachable(ClientPlayerEntity entity, BlockPos p return possibleRotation; } - BlockState state = entity.world.getBlockState(pos); - VoxelShape shape = state.getShape(entity.world, pos); + BlockState state = entity.level.getBlockState(pos); + VoxelShape shape = state.getShape(entity.level, pos); if (shape.isEmpty()) { - shape = VoxelShapes.fullCube(); + shape = Shapes.block(); } - for (Vector3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { - double xDiff = shape.getStart(Direction.Axis.X) * sideOffset.x + shape.getEnd(Direction.Axis.X) * (1 - sideOffset.x); - double yDiff = shape.getStart(Direction.Axis.Y) * sideOffset.y + shape.getEnd(Direction.Axis.Y) * (1 - sideOffset.y); - double zDiff = shape.getStart(Direction.Axis.Z) * sideOffset.z + shape.getEnd(Direction.Axis.Z) * (1 - sideOffset.z); - possibleRotation = reachableOffset(entity, pos, new Vector3d(pos.getX(), pos.getY(), pos.getZ()).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); + for (Vec3 sideOffset : BLOCK_SIDE_MULTIPLIERS) { + double xDiff = shape.min(Direction.Axis.X) * sideOffset.x + shape.max(Direction.Axis.X) * (1 - sideOffset.x); + double yDiff = shape.min(Direction.Axis.Y) * sideOffset.y + shape.max(Direction.Axis.Y) * (1 - sideOffset.y); + double zDiff = shape.min(Direction.Axis.Z) * sideOffset.z + shape.max(Direction.Axis.Z) * (1 - sideOffset.z); + possibleRotation = reachableOffset(entity, pos, new Vec3(pos.getX(), pos.getY(), pos.getZ()).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); if (possibleRotation.isPresent()) { return possibleRotation; } @@ -225,16 +224,16 @@ public static Optional reachable(ClientPlayerEntity entity, BlockPos p * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachableOffset(Entity entity, BlockPos pos, Vector3d offsetPos, double blockReachDistance, boolean wouldSneak) { - Vector3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getEyePosition(1.0F); - Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.rotationYaw, entity.rotationPitch)); - RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); + public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3 offsetPos, double blockReachDistance, boolean wouldSneak) { + Vec3 eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getEyePosition(1.0F); + Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.yRot, entity.xRot)); + HitResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); //System.out.println(result); - if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { - if (((BlockRayTraceResult) result).getPos().equals(pos)) { + if (result != null && result.getType() == HitResult.Type.BLOCK) { + if (((BlockHitResult) result).getBlockPos().equals(pos)) { return Optional.of(rotation); } - if (entity.world.getBlockState(pos).getBlock() instanceof AbstractFireBlock && ((BlockRayTraceResult) result).getPos().equals(pos.down())) { + if (entity.level.getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { return Optional.of(rotation); } } @@ -251,6 +250,6 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve * @return The optional rotation */ public static Optional reachableCenter(Entity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { - return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.world, pos), blockReachDistance, wouldSneak); + return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.level, pos), blockReachDistance, wouldSneak); } } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index da1778b28..4ef401c97 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -19,14 +19,13 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; -import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.item.Item; -import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.vector.Vector3i; -import net.minecraft.util.registry.Registry; - +import net.minecraft.core.Direction; +import net.minecraft.core.Registry; +import net.minecraft.core.Vec3i; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; import java.awt.*; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -49,7 +48,7 @@ public class SettingsUtil { - private static final Path SETTINGS_PATH = Minecraft.getInstance().gameDir.toPath().resolve("baritone").resolve("settings.txt"); + private static final Path SETTINGS_PATH = Minecraft.getInstance().gameDirectory.toPath().resolve("baritone").resolve("settings.txt"); private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?.+)"); // key and value split by the first space @@ -225,8 +224,8 @@ private enum Parser implements ISettingParser { color -> color.getRed() + "," + color.getGreen() + "," + color.getBlue() ), VEC3I( - Vector3i.class, - str -> new Vector3i(Integer.parseInt(str.split(",")[0]), Integer.parseInt(str.split(",")[1]), Integer.parseInt(str.split(",")[2])), + Vec3i.class, + str -> new Vec3i(Integer.parseInt(str.split(",")[0]), Integer.parseInt(str.split(",")[1]), Integer.parseInt(str.split(",")[2])), vec -> vec.getX() + "," + vec.getY() + "," + vec.getZ() ), BLOCK( @@ -236,7 +235,7 @@ private enum Parser implements ISettingParser { ), ITEM( Item.class, - str -> Registry.ITEM.getOrDefault(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? + str -> Registry.ITEM.get(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? item -> Registry.ITEM.getKey(item).toString() ), LIST() { diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index bd5c9555e..4ea94b95a 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -17,14 +17,14 @@ package baritone.api.utils; -import net.minecraft.block.AbstractFireBlock; -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; /** * @author Brady @@ -42,22 +42,22 @@ private VecUtils() {} * @return The center of the block's bounding box * @see #getBlockPosCenter(BlockPos) */ - public static Vector3d calculateBlockCenter(World world, BlockPos pos) { + public static Vec3 calculateBlockCenter(Level world, BlockPos pos) { BlockState b = world.getBlockState(pos); VoxelShape shape = b.getCollisionShape(world, pos); if (shape.isEmpty()) { return getBlockPosCenter(pos); } - double xDiff = (shape.getStart(Direction.Axis.X) + shape.getEnd(Direction.Axis.X)) / 2; - double yDiff = (shape.getStart(Direction.Axis.Y) + shape.getEnd(Direction.Axis.Y)) / 2; - double zDiff = (shape.getStart(Direction.Axis.Z) + shape.getEnd(Direction.Axis.Z)) / 2; + double xDiff = (shape.min(Direction.Axis.X) + shape.max(Direction.Axis.X)) / 2; + double yDiff = (shape.min(Direction.Axis.Y) + shape.max(Direction.Axis.Y)) / 2; + double zDiff = (shape.min(Direction.Axis.Z) + shape.max(Direction.Axis.Z)) / 2; if (Double.isNaN(xDiff) || Double.isNaN(yDiff) || Double.isNaN(zDiff)) { throw new IllegalStateException(b + " " + pos + " " + shape); } - if (b.getBlock() instanceof AbstractFireBlock) {//look at bottom of fire when putting it out + if (b.getBlock() instanceof BaseFireBlock) {//look at bottom of fire when putting it out yDiff = 0; } - return new Vector3d( + return new Vec3( pos.getX() + xDiff, pos.getY() + yDiff, pos.getZ() + zDiff @@ -72,10 +72,10 @@ public static Vector3d calculateBlockCenter(World world, BlockPos pos) { * * @param pos The block position * @return The assumed center of the position - * @see #calculateBlockCenter(World, BlockPos) + * @see #calculateBlockCenter(Level, BlockPos) */ - public static Vector3d getBlockPosCenter(BlockPos pos) { - return new Vector3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); + public static Vec3 getBlockPosCenter(BlockPos pos) { + return new Vec3(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); } /** @@ -105,7 +105,7 @@ public static double distanceToCenter(BlockPos pos, double x, double y, double z * @see #getBlockPosCenter(BlockPos) */ public static double entityDistanceToCenter(Entity entity, BlockPos pos) { - return distanceToCenter(pos, entity.getPositionVec().x, entity.getPositionVec().y, entity.getPositionVec().z); + return distanceToCenter(pos, entity.position().x, entity.position().y, entity.position().z); } /** @@ -118,6 +118,6 @@ public static double entityDistanceToCenter(Entity entity, BlockPos pos) { * @see #getBlockPosCenter(BlockPos) */ public static double entityFlatDistanceToCenter(Entity entity, BlockPos pos) { - return distanceToCenter(pos, entity.getPositionVec().x, pos.getY() + 0.5, entity.getPositionVec().z); + return distanceToCenter(pos, entity.position().x, pos.getY() + 0.5, entity.position().z); } } diff --git a/src/api/java/baritone/api/utils/gui/BaritoneToast.java b/src/api/java/baritone/api/utils/gui/BaritoneToast.java index 92303aab4..3429aa2df 100644 --- a/src/api/java/baritone/api/utils/gui/BaritoneToast.java +++ b/src/api/java/baritone/api/utils/gui/BaritoneToast.java @@ -17,57 +17,57 @@ package baritone.api.utils.gui; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.platform.GlStateManager; -import net.minecraft.client.gui.toasts.IToast; -import net.minecraft.client.gui.toasts.ToastGui; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.ITextComponent; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.components.toasts.Toast; +import net.minecraft.client.gui.components.toasts.ToastComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; -public class BaritoneToast implements IToast { +public class BaritoneToast implements Toast { private String title; private String subtitle; private long firstDrawTime; private boolean newDisplay; private long totalShowTime; - public BaritoneToast(ITextComponent titleComponent, ITextComponent subtitleComponent, long totalShowTime) { + public BaritoneToast(Component titleComponent, Component subtitleComponent, long totalShowTime) { this.title = titleComponent.getString(); this.subtitle = subtitleComponent == null ? null : subtitleComponent.getString(); this.totalShowTime = totalShowTime; } - public Visibility func_230444_a_(MatrixStack matrixStack, ToastGui toastGui, long delta) { + public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long delta) { if (this.newDisplay) { this.firstDrawTime = delta; this.newDisplay = false; } - toastGui.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("textures/gui/toasts.png")); - GlStateManager.color4f(1.0F, 1.0F, 1.0F, 255.0f); + toastGui.getMinecraft().getTextureManager().bind(new ResourceLocation("textures/gui/toasts.png")); + GlStateManager._color4f(1.0F, 1.0F, 1.0F, 255.0f); toastGui.blit(matrixStack, 0, 0, 0, 32, 160, 32); if (this.subtitle == null) { - toastGui.getMinecraft().fontRenderer.drawString(matrixStack, this.title, 18, 12, -11534256); + toastGui.getMinecraft().font.draw(matrixStack, this.title, 18, 12, -11534256); } else { - toastGui.getMinecraft().fontRenderer.drawString(matrixStack, this.title, 18, 7, -11534256); - toastGui.getMinecraft().fontRenderer.drawString(matrixStack, this.subtitle, 18, 18, -16777216); + toastGui.getMinecraft().font.draw(matrixStack, this.title, 18, 7, -11534256); + toastGui.getMinecraft().font.draw(matrixStack, this.subtitle, 18, 18, -16777216); } return delta - this.firstDrawTime < totalShowTime ? Visibility.SHOW : Visibility.HIDE; } - public void setDisplayedText(ITextComponent titleComponent, ITextComponent subtitleComponent) { + public void setDisplayedText(Component titleComponent, Component subtitleComponent) { this.title = titleComponent.getString(); this.subtitle = subtitleComponent == null ? null : subtitleComponent.getString(); this.newDisplay = true; } - public static void addOrUpdate(ToastGui toast, ITextComponent title, ITextComponent subtitle, long totalShowTime) { + public static void addOrUpdate(ToastComponent toast, Component title, Component subtitle, long totalShowTime) { BaritoneToast baritonetoast = toast.getToast(BaritoneToast.class, new Object()); if (baritonetoast == null) { - toast.add(new BaritoneToast(title, subtitle, totalShowTime)); + toast.addToast(new BaritoneToast(title, subtitle, totalShowTime)); } else { baritonetoast.setDisplayedText(title, subtitle); } diff --git a/src/api/java/baritone/api/utils/interfaces/IGoalRenderPos.java b/src/api/java/baritone/api/utils/interfaces/IGoalRenderPos.java index 13e7e6860..11742d75b 100644 --- a/src/api/java/baritone/api/utils/interfaces/IGoalRenderPos.java +++ b/src/api/java/baritone/api/utils/interfaces/IGoalRenderPos.java @@ -17,7 +17,7 @@ package baritone.api.utils.interfaces; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public interface IGoalRenderPos { diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java index 58ac3418f..f6372c33e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java @@ -18,17 +18,17 @@ package baritone.launch.mixins; import baritone.utils.accessor.IChunkArray; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.chunk.Chunk; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import java.util.concurrent.atomic.AtomicReferenceArray; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.LevelChunk; @Mixin(targets = "net.minecraft.client.multiplayer.ClientChunkProvider$ChunkArray") public abstract class MixinChunkArray implements IChunkArray { @Shadow - private AtomicReferenceArray chunks; + private AtomicReferenceArray chunks; @Shadow private int viewDistance; @Shadow @@ -47,7 +47,7 @@ public abstract class MixinChunkArray implements IChunkArray { protected abstract int getIndex(int x, int z); @Shadow - protected abstract void replace(int index, Chunk chunk); + protected abstract void replace(int index, LevelChunk chunk); @Override public int centerX() { @@ -65,7 +65,7 @@ public int viewDistance() { } @Override - public AtomicReferenceArray getChunks() { + public AtomicReferenceArray getChunks() { return chunks; } @@ -74,9 +74,9 @@ public void copyFrom(IChunkArray other) { centerX = other.centerX(); centerZ = other.centerZ(); - AtomicReferenceArray copyingFrom = other.getChunks(); + AtomicReferenceArray copyingFrom = other.getChunks(); for (int k = 0; k < copyingFrom.length(); ++k) { - Chunk chunk = copyingFrom.get(k); + LevelChunk chunk = copyingFrom.get(k); if (chunk != null) { ChunkPos chunkpos = chunk.getPos(); if (inView(chunkpos.x, chunkpos.z)) { diff --git a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java index 700f54ae2..fe89bc4e3 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java @@ -19,24 +19,24 @@ import baritone.utils.accessor.IChunkArray; import baritone.utils.accessor.IClientChunkProvider; -import net.minecraft.client.multiplayer.ClientChunkProvider; -import net.minecraft.client.world.ClientWorld; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import java.lang.reflect.Field; import java.util.Arrays; +import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.client.multiplayer.ClientLevel; -@Mixin(ClientChunkProvider.class) +@Mixin(ClientChunkCache.class) public class MixinClientChunkProvider implements IClientChunkProvider { @Shadow - private ClientWorld world; + private ClientLevel world; @Override - public ClientChunkProvider createThreadSafeCopy() { + public ClientChunkCache createThreadSafeCopy() { IChunkArray arr = extractReferenceArray(); - ClientChunkProvider result = new ClientChunkProvider(world, arr.viewDistance() - 3); // -3 because its adds 3 for no reason lmao + ClientChunkCache result = new ClientChunkCache(world, arr.viewDistance() - 3); // -3 because its adds 3 for no reason lmao IChunkArray copyArr = ((IClientChunkProvider) result).extractReferenceArray(); copyArr.copyFrom(arr); if (copyArr.viewDistance() != arr.viewDistance()) { @@ -47,7 +47,7 @@ public ClientChunkProvider createThreadSafeCopy() { @Override public IChunkArray extractReferenceArray() { - for (Field f : ClientChunkProvider.class.getDeclaredFields()) { + for (Field f : ClientChunkCache.class.getDeclaredFields()) { if (IChunkArray.class.isAssignableFrom(f.getType())) { try { return (IChunkArray) f.get(this); @@ -56,6 +56,6 @@ public IChunkArray extractReferenceArray() { } } } - throw new RuntimeException(Arrays.toString(ClientChunkProvider.class.getDeclaredFields())); + throw new RuntimeException(Arrays.toString(ClientChunkCache.class.getDeclaredFields())); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index b7520a6b3..b5348eb97 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -23,10 +23,15 @@ import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.type.EventState; import baritone.cache.CachedChunk; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.network.play.ClientPlayNetHandler; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; import net.minecraft.network.play.server.*; -import net.minecraft.util.math.ChunkPos; +import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; +import net.minecraft.network.protocol.game.ClientboundForgetLevelChunkPacket; +import net.minecraft.network.protocol.game.ClientboundLevelChunkPacket; +import net.minecraft.network.protocol.game.ClientboundPlayerCombatPacket; +import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket; +import net.minecraft.world.level.ChunkPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -36,7 +41,7 @@ * @author Brady * @since 8/3/2018 */ -@Mixin(ClientPlayNetHandler.class) +@Mixin(ClientPacketListener.class) public class MixinClientPlayNetHandler { // unused lol @@ -67,16 +72,16 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { method = "handleChunkData", at = @At("RETURN") ) - private void postHandleChunkData(SChunkDataPacket packetIn, CallbackInfo ci) { + private void postHandleChunkData(ClientboundLevelChunkPacket packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ClientPlayerEntity player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (ClientPlayNetHandler) (Object) this) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent( EventState.POST, packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, - packetIn.getChunkX(), - packetIn.getChunkZ() + packetIn.getX(), + packetIn.getZ() ) ); } @@ -87,10 +92,10 @@ private void postHandleChunkData(SChunkDataPacket packetIn, CallbackInfo ci) { method = "processChunkUnload", at = @At("HEAD") ) - private void preChunkUnload(SUnloadChunkPacket packet, CallbackInfo ci) { + private void preChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ClientPlayerEntity player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (ClientPlayNetHandler) (Object) this) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent(EventState.PRE, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) ); @@ -102,10 +107,10 @@ private void preChunkUnload(SUnloadChunkPacket packet, CallbackInfo ci) { method = "processChunkUnload", at = @At("RETURN") ) - private void postChunkUnload(SUnloadChunkPacket packet, CallbackInfo ci) { + private void postChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ClientPlayerEntity player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (ClientPlayNetHandler) (Object) this) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent(EventState.POST, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) ); @@ -117,16 +122,16 @@ private void postChunkUnload(SUnloadChunkPacket packet, CallbackInfo ci) { method = "handleBlockChange", at = @At("RETURN") ) - private void postHandleBlockChange(SChangeBlockPacket packetIn, CallbackInfo ci) { + private void postHandleBlockChange(ClientboundBlockUpdatePacket packetIn, CallbackInfo ci) { if (!Baritone.settings().repackOnAnyBlockChange.value) { return; } - if (!CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(packetIn.getState().getBlock())) { + if (!CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(packetIn.getBlockState().getBlock())) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ClientPlayerEntity player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (ClientPlayNetHandler) (Object) this) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent( EventState.POST, @@ -143,12 +148,12 @@ private void postHandleBlockChange(SChangeBlockPacket packetIn, CallbackInfo ci) method = "handleMultiBlockChange", at = @At("RETURN") ) - private void postHandleMultiBlockChange(SMultiBlockChangePacket packetIn, CallbackInfo ci) { + private void postHandleMultiBlockChange(ClientboundSectionBlocksUpdatePacket packetIn, CallbackInfo ci) { if (!Baritone.settings().repackOnAnyBlockChange.value) { return; } ChunkPos[] chunkPos = new ChunkPos[1]; - packetIn.func_244310_a((pos, state) -> { + packetIn.runUpdates((pos, state) -> { if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(state.getBlock())) { chunkPos[0] = new ChunkPos(pos); } @@ -157,8 +162,8 @@ private void postHandleMultiBlockChange(SMultiBlockChangePacket packetIn, Callba return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ClientPlayerEntity player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (ClientPlayNetHandler) (Object) this) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent( EventState.POST, @@ -178,10 +183,10 @@ private void postHandleMultiBlockChange(SMultiBlockChangePacket packetIn, Callba target = "net/minecraft/client/Minecraft.displayGuiScreen(Lnet/minecraft/client/gui/screen/Screen;)V" ) ) - private void onPlayerDeath(SCombatPacket packetIn, CallbackInfo ci) { + private void onPlayerDeath(ClientboundPlayerCombatPacket packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ClientPlayerEntity player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (ClientPlayNetHandler) (Object) this) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { ibaritone.getGameEventHandler().onPlayerDeath(); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index c10a4831d..49e875ad8 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -24,9 +24,9 @@ import baritone.api.event.events.SprintStateEvent; import baritone.api.event.events.type.EventState; import baritone.behavior.LookBehavior; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.entity.player.PlayerAbilities; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.player.Abilities; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -37,7 +37,7 @@ * @author Brady * @since 8/1/2018 */ -@Mixin(ClientPlayerEntity.class) +@Mixin(LocalPlayer.class) public class MixinClientPlayerEntity { @Inject( @@ -47,7 +47,7 @@ public class MixinClientPlayerEntity { ) private void sendChatMessage(String msg, CallbackInfo ci) { ChatEvent event = new ChatEvent(msg); - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone == null) { return; } @@ -67,7 +67,7 @@ private void sendChatMessage(String msg, CallbackInfo ci) { ) ) private void onPreUpdate(CallbackInfo ci) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone != null) { baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.PRE)); } @@ -83,7 +83,7 @@ private void onPreUpdate(CallbackInfo ci) { ) ) private void onPostUpdate(CallbackInfo ci) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone != null) { baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); } @@ -96,12 +96,12 @@ private void onPostUpdate(CallbackInfo ci) { target = "net/minecraft/entity/player/PlayerAbilities.allowFlying:Z" ) ) - private boolean isAllowFlying(PlayerAbilities capabilities) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); + private boolean isAllowFlying(Abilities capabilities) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone == null) { - return capabilities.allowFlying; + return capabilities.mayfly; } - return !baritone.getPathingBehavior().isPathing() && capabilities.allowFlying; + return !baritone.getPathingBehavior().isPathing() && capabilities.mayfly; } @Redirect( @@ -111,10 +111,10 @@ private boolean isAllowFlying(PlayerAbilities capabilities) { target = "net/minecraft/client/settings/KeyBinding.isKeyDown()Z" ) ) - private boolean isKeyDown(KeyBinding keyBinding) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); + private boolean isKeyDown(KeyMapping keyBinding) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone == null) { - return keyBinding.isKeyDown(); + return keyBinding.isDown(); } SprintStateEvent event = new SprintStateEvent(); baritone.getGameEventHandler().onPlayerSprintState(event); @@ -125,7 +125,7 @@ private boolean isKeyDown(KeyBinding keyBinding) { // hitting control shouldn't make all bots sprint return false; } - return keyBinding.isKeyDown(); + return keyBinding.isDown(); } @Inject( @@ -135,7 +135,7 @@ private boolean isKeyDown(KeyBinding keyBinding) { ) ) private void updateRidden(CallbackInfo cb) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone != null) { ((LookBehavior) baritone.getLookBehavior()).pig(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index 00497ab6b..0d3d1a2b4 100644 --- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -22,8 +22,6 @@ import com.mojang.brigadier.context.StringRange; import com.mojang.brigadier.suggestion.Suggestion; import com.mojang.brigadier.suggestion.Suggestions; -import net.minecraft.client.gui.CommandSuggestionHelper; -import net.minecraft.client.gui.widget.TextFieldWidget; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -35,17 +33,19 @@ import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.client.gui.components.CommandSuggestions; +import net.minecraft.client.gui.components.EditBox; /** * @author Brady * @since 10/9/2019 */ -@Mixin(CommandSuggestionHelper.class) +@Mixin(CommandSuggestions.class) public class MixinCommandSuggestionHelper { @Shadow @Final - private TextFieldWidget inputField; + private EditBox inputField; @Shadow @Final @@ -61,7 +61,7 @@ public class MixinCommandSuggestionHelper { ) private void preUpdateSuggestion(CallbackInfo ci) { // Anything that is present in the input text before the cursor position - String prefix = this.inputField.getText().substring(0, Math.min(this.inputField.getText().length(), this.inputField.getCursorPosition())); + String prefix = this.inputField.getValue().substring(0, Math.min(this.inputField.getValue().length(), this.inputField.getCursorPosition())); TabCompleteEvent event = new TabCompleteEvent(prefix); BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onPreTabComplete(event); @@ -80,9 +80,9 @@ private void preUpdateSuggestion(CallbackInfo ci) { if (event.completions.length == 0) { this.suggestionsFuture = Suggestions.empty(); } else { - int offset = this.inputField.getText().endsWith(" ") + int offset = this.inputField.getValue().endsWith(" ") ? this.inputField.getCursorPosition() - : this.inputField.getText().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes + : this.inputField.getValue().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes List suggestionList = Stream.of(event.completions) .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s)) diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index 9cd2a3c96..5e86039f3 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -19,8 +19,8 @@ import baritone.api.BaritoneAPI; import baritone.api.event.events.RotationMoveEvent; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.entity.Entity; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -42,11 +42,11 @@ public class MixinEntity { private void moveRelativeHead(CallbackInfo info) { this.yawRestore = this.rotationYaw; // noinspection ConstantConditions - if (!ClientPlayerEntity.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this) == null) { + if (!LocalPlayer.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this) == null) { return; } RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw); - BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); + BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); this.rotationYaw = motionUpdateRotationEvent.getYaw(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java b/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java index d443095c6..32f85593e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java @@ -18,25 +18,25 @@ package baritone.launch.mixins; import baritone.utils.accessor.IEntityRenderManager; -import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import org.spongepowered.asm.mixin.Mixin; -@Mixin(EntityRendererManager.class) +@Mixin(EntityRenderDispatcher.class) public class MixinEntityRenderManager implements IEntityRenderManager { @Override public double renderPosX() { - return ((EntityRendererManager) (Object) this).info.getProjectedView().x; + return ((EntityRenderDispatcher) (Object) this).camera.getPosition().x; } @Override public double renderPosY() { - return ((EntityRendererManager) (Object) this).info.getProjectedView().y; + return ((EntityRenderDispatcher) (Object) this).camera.getPosition().y; } @Override public double renderPosZ() { - return ((EntityRendererManager) (Object) this).info.getProjectedView().z; + return ((EntityRenderDispatcher) (Object) this).camera.getPosition().z; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinItemStack.java b/src/launch/java/baritone/launch/mixins/MixinItemStack.java index dd6af902a..110196e90 100644 --- a/src/launch/java/baritone/launch/mixins/MixinItemStack.java +++ b/src/launch/java/baritone/launch/mixins/MixinItemStack.java @@ -18,8 +18,8 @@ package baritone.launch.mixins; import baritone.api.utils.accessor.IItemStack; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index 41f4af731..363a36028 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -20,11 +20,11 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.RotationMoveEvent; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.world.World; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -45,7 +45,7 @@ public abstract class MixinLivingEntity extends Entity { */ private RotationMoveEvent jumpRotationEvent; - public MixinLivingEntity(EntityType entityTypeIn, World worldIn) { + public MixinLivingEntity(EntityType entityTypeIn, Level worldIn) { super(entityTypeIn, worldIn); } @@ -55,10 +55,10 @@ public MixinLivingEntity(EntityType entityTypeIn, World worldIn) { ) private void preMoveRelative(CallbackInfo ci) { // noinspection ConstantConditions - if (ClientPlayerEntity.class.isInstance(this)) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this); + if (LocalPlayer.class.isInstance(this)) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone != null) { - this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.rotationYaw); + this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.yRot); baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); } } @@ -73,10 +73,10 @@ private void preMoveRelative(CallbackInfo ci) { ) ) private float overrideYaw(LivingEntity self) { - if (self instanceof ClientPlayerEntity && BaritoneAPI.getProvider().getBaritoneForPlayer((ClientPlayerEntity) (Object) this) != null) { + if (self instanceof LocalPlayer && BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this) != null) { return this.jumpRotationEvent.getYaw(); } - return self.rotationYaw; + return self.yRot; } diff --git a/src/launch/java/baritone/launch/mixins/MixinLootContext.java b/src/launch/java/baritone/launch/mixins/MixinLootContext.java index 88b955173..64d890cf9 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLootContext.java +++ b/src/launch/java/baritone/launch/mixins/MixinLootContext.java @@ -18,11 +18,11 @@ package baritone.launch.mixins; import baritone.api.utils.BlockOptionalMeta; -import net.minecraft.loot.LootContext; -import net.minecraft.loot.LootPredicateManager; -import net.minecraft.loot.LootTableManager; import net.minecraft.server.MinecraftServer; -import net.minecraft.world.server.ServerWorld; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootTables; +import net.minecraft.world.level.storage.loot.PredicateManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -37,7 +37,7 @@ public class MixinLootContext { target = "net/minecraft/world/server/ServerWorld.getServer()Lnet/minecraft/server/MinecraftServer;" ) ) - private MinecraftServer getServer(ServerWorld world) { + private MinecraftServer getServer(ServerLevel world) { if (world == null) { return null; } @@ -51,11 +51,11 @@ private MinecraftServer getServer(ServerWorld world) { target = "net/minecraft/server/MinecraftServer.getLootTableManager()Lnet/minecraft/loot/LootTableManager;" ) ) - private LootTableManager getLootTableManager(MinecraftServer server) { + private LootTables getLootTableManager(MinecraftServer server) { if (server == null) { return BlockOptionalMeta.getManager(); } - return server.getLootTableManager(); + return server.getLootTables(); } @Redirect( @@ -65,10 +65,10 @@ private LootTableManager getLootTableManager(MinecraftServer server) { target = "net/minecraft/server/MinecraftServer.func_229736_aP_()Lnet/minecraft/loot/LootPredicateManager;" ) ) - private LootPredicateManager getLootPredicateManager(MinecraftServer server) { + private PredicateManager getLootPredicateManager(MinecraftServer server) { if (server == null) { return BlockOptionalMeta.getPredicateManager(); } - return server.func_229736_aP_(); + return server.getPredicateManager(); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 9acdb614e..b1d2974ac 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -23,9 +23,9 @@ import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.player.LocalPlayer; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -44,9 +44,9 @@ public class MixinMinecraft { @Shadow - public ClientPlayerEntity player; + public LocalPlayer player; @Shadow - public ClientWorld world; + public ClientLevel world; @Inject( method = "", @@ -86,7 +86,7 @@ private void runTick(CallbackInfo ci) { method = "loadWorld(Lnet/minecraft/client/world/ClientWorld;)V", at = @At("HEAD") ) - private void preLoadWorld(ClientWorld world, CallbackInfo ci) { + private void preLoadWorld(ClientLevel world, CallbackInfo ci) { // If we're unloading the world but one doesn't exist, ignore it if (this.world == null && world == null) { return; @@ -106,7 +106,7 @@ private void preLoadWorld(ClientWorld world, CallbackInfo ci) { method = "loadWorld(Lnet/minecraft/client/world/ClientWorld;)V", at = @At("RETURN") ) - private void postLoadWorld(ClientWorld world, CallbackInfo ci) { + private void postLoadWorld(ClientLevel world, CallbackInfo ci) { // still fire event for both null, as that means we've just finished exiting a world // mc.world changing is only the primary baritone diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index dba5df7bd..29cebebab 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -25,9 +25,9 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; -import net.minecraft.network.IPacket; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.PacketDirection; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.PacketFlow; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,7 +39,7 @@ * @author Brady * @since 8/6/2018 */ -@Mixin(NetworkManager.class) +@Mixin(Connection.class) public class MixinNetworkManager { @Shadow @@ -47,20 +47,20 @@ public class MixinNetworkManager { @Shadow @Final - private PacketDirection direction; + private PacketFlow direction; @Inject( method = "dispatchPacket", at = @At("HEAD") ) - private void preDispatchPacket(IPacket inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { - if (this.direction != PacketDirection.CLIENTBOUND) { + private void preDispatchPacket(Packet inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { + if (this.direction != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, inPacket)); + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (Connection) (Object) this) { + ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((Connection) (Object) this, EventState.PRE, inPacket)); } } } @@ -69,14 +69,14 @@ private void preDispatchPacket(IPacket inPacket, final GenericFutureListener< method = "dispatchPacket", at = @At("RETURN") ) - private void postDispatchPacket(IPacket inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { - if (this.direction != PacketDirection.CLIENTBOUND) { + private void postDispatchPacket(Packet inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { + if (this.direction != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, inPacket)); + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (Connection) (Object) this) { + ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((Connection) (Object) this, EventState.POST, inPacket)); } } } @@ -88,13 +88,13 @@ private void postDispatchPacket(IPacket inPacket, final GenericFutureListener target = "net/minecraft/network/NetworkManager.processPacket(Lnet/minecraft/network/IPacket;Lnet/minecraft/network/INetHandler;)V" ) ) - private void preProcessPacket(ChannelHandlerContext context, IPacket packet, CallbackInfo ci) { - if (this.direction != PacketDirection.CLIENTBOUND) { + private void preProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { + if (this.direction != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, packet)); + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (Connection) (Object) this) { + ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((Connection) (Object) this, EventState.PRE, packet)); } } } @@ -103,13 +103,13 @@ private void preProcessPacket(ChannelHandlerContext context, IPacket packet, method = "channelRead0", at = @At("RETURN") ) - private void postProcessPacket(ChannelHandlerContext context, IPacket packet, CallbackInfo ci) { - if (!this.channel.isOpen() || this.direction != PacketDirection.CLIENTBOUND) { + private void postProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { + if (!this.channel.isOpen() || this.direction != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, packet)); + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (Connection) (Object) this) { + ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((Connection) (Object) this, EventState.POST, packet)); } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinPlayerController.java b/src/launch/java/baritone/launch/mixins/MixinPlayerController.java index 071cbc9a9..18fdd4aec 100644 --- a/src/launch/java/baritone/launch/mixins/MixinPlayerController.java +++ b/src/launch/java/baritone/launch/mixins/MixinPlayerController.java @@ -18,13 +18,13 @@ package baritone.launch.mixins; import baritone.utils.accessor.IPlayerControllerMP; -import net.minecraft.client.multiplayer.PlayerController; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; +import net.minecraft.core.BlockPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Invoker; -@Mixin(PlayerController.class) +@Mixin(MultiPlayerGameMode.class) public abstract class MixinPlayerController implements IPlayerControllerMP { @Accessor diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java index 8d5a801cd..0d7b3ee83 100644 --- a/src/launch/java/baritone/launch/mixins/MixinScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.java @@ -18,11 +18,11 @@ package baritone.launch.mixins; import baritone.utils.accessor.IGuiScreen; -import net.minecraft.client.gui.screen.Screen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; import java.net.URI; +import net.minecraft.client.gui.screens.Screen; @Mixin(Screen.class) public abstract class MixinScreen implements IGuiScreen { diff --git a/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java index 70137423c..029c8cdaa 100644 --- a/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java +++ b/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java @@ -20,8 +20,6 @@ import baritone.utils.accessor.IChunkArray; import baritone.utils.accessor.IClientChunkProvider; import baritone.utils.accessor.ISodiumChunkArray; -import net.minecraft.client.multiplayer.ClientChunkProvider; -import net.minecraft.client.world.ClientWorld; import org.spongepowered.asm.mixin.*; import java.lang.reflect.Constructor; @@ -29,6 +27,8 @@ import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.concurrent.locks.StampedLock; +import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.client.multiplayer.ClientLevel; @Pseudo @Mixin(targets = "me.jellysquid.mods.sodium.client.world.SodiumChunkManager", remap = false) @@ -40,7 +40,7 @@ public class MixinSodiumChunkProvider implements IClientChunkProvider { @Shadow @Final - private ClientWorld world; + private ClientLevel world; @Shadow private int radius; @@ -52,16 +52,16 @@ public class MixinSodiumChunkProvider implements IClientChunkProvider { private static Field chunkArrayField = null; @Override - public ClientChunkProvider createThreadSafeCopy() { + public ClientChunkCache createThreadSafeCopy() { // similar operation to https://github.com/jellysquid3/sodium-fabric/blob/d3528521d48a130322c910c6f0725cf365ebae6f/src/main/java/me/jellysquid/mods/sodium/client/world/SodiumChunkManager.java#L139 long stamp = this.lock.writeLock(); try { ISodiumChunkArray refArray = extractReferenceArray(); if (thisConstructor == null) { - thisConstructor = this.getClass().getConstructor(ClientWorld.class, int.class); + thisConstructor = this.getClass().getConstructor(ClientLevel.class, int.class); } - ClientChunkProvider result = (ClientChunkProvider) thisConstructor.newInstance(world, radius - 3); // -3 because it adds 3 for no reason here too lmao + ClientChunkCache result = (ClientChunkCache) thisConstructor.newInstance(world, radius - 3); // -3 because it adds 3 for no reason here too lmao IChunkArray copyArr = ((IClientChunkProvider) result).extractReferenceArray(); copyArr.copyFrom(refArray); return result; diff --git a/src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java b/src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java index 06e13b719..31443e77d 100644 --- a/src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java +++ b/src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java @@ -21,12 +21,12 @@ import baritone.utils.accessor.ISodiumChunkArray; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.objects.ObjectIterator; -import net.minecraft.world.chunk.Chunk; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Shadow; import java.util.concurrent.atomic.AtomicReferenceArray; +import net.minecraft.world.level.chunk.LevelChunk; @Pseudo @Mixin(targets = "me.jellysquid.mods.sodium.client.util.collections.FixedLongHashTable", remap = false) @@ -58,7 +58,7 @@ public ObjectIterator> callIterator() { //these are useless here... @Override - public AtomicReferenceArray getChunks() { + public AtomicReferenceArray getChunks() { return null; } diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java index dc98804ef..34dbc9174 100644 --- a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java @@ -20,12 +20,12 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; -import com.mojang.blaze3d.matrix.MatrixStack; -import net.minecraft.client.renderer.ActiveRenderInfo; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; +import net.minecraft.client.Camera; import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.util.math.vector.Matrix4f; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -36,7 +36,7 @@ * @author Brady * @since 2/13/2020 */ -@Mixin(WorldRenderer.class) +@Mixin(LevelRenderer.class) public class MixinWorldRenderer { @Inject( @@ -44,7 +44,7 @@ public class MixinWorldRenderer { at = @At("RETURN"), locals = LocalCapture.CAPTURE_FAILSOFT ) - private void onStartHand(MatrixStack matrixStackIn, float partialTicks, long finishTimeNano, boolean drawBlockOutline, ActiveRenderInfo activeRenderInfoIn, GameRenderer gameRendererIn, LightTexture lightmapIn, Matrix4f projectionIn, CallbackInfo ci) { + private void onStartHand(PoseStack matrixStackIn, float partialTicks, long finishTimeNano, boolean drawBlockOutline, Camera activeRenderInfoIn, GameRenderer gameRendererIn, LightTexture lightmapIn, Matrix4f projectionIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks, matrixStackIn, projectionIn)); } diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index f7b44556c..2af9086e7 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -56,7 +56,7 @@ public class Baritone implements IBaritone { static { threadPool = new ThreadPoolExecutor(4, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<>()); - dir = new File(Minecraft.getInstance().gameDir, "baritone"); + dir = new File(Minecraft.getInstance().gameDirectory, "baritone"); if (!Files.exists(dir.toPath())) { try { Files.createDirectories(dir.toPath()); diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 8a0054628..9dc47d12b 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -20,18 +20,24 @@ import baritone.Baritone; import baritone.api.event.events.TickEvent; import baritone.utils.ToolSet; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.inventory.container.ClickType; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.Direction; +import net.minecraft.core.NonNullList; import net.minecraft.item.*; -import net.minecraft.util.Direction; -import net.minecraft.util.Hand; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.vector.Vector3d; - +import net.minecraft.world.InteractionHand; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.DiggerItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.PickaxeItem; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; import java.util.ArrayList; import java.util.OptionalInt; import java.util.Random; @@ -106,7 +112,7 @@ private int firstValidThrowaway() { // TODO offhand idk return -1; } - private int bestToolAgainst(Block against, Class cla$$) { + private int bestToolAgainst(Block against, Class cla$$) { NonNullList invy = ctx.player().inventory.mainInventory; int bestInd = -1; double bestSpeed = -1; @@ -116,7 +122,7 @@ private int bestToolAgainst(Block against, Class cla$$) { continue; } if (cla$$.isInstance(stack.getItem())) { - double speed = ToolSet.calculateSpeedVsBlock(stack, against.getDefaultState()); // takes into account enchants + double speed = ToolSet.calculateSpeedVsBlock(stack, against.defaultBlockState()); // takes into account enchants if (speed > bestSpeed) { bestSpeed = speed; bestInd = i; @@ -137,7 +143,7 @@ public boolean hasGenericThrowaway() { public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); - if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vector3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { return true; // gotem } if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && ((BlockItem) stack.getItem()).getBlock().equals(maybe.getBlock()))) { @@ -152,8 +158,8 @@ public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { } public boolean throwaway(boolean select, Predicate desired) { - ClientPlayerEntity p = ctx.player(); - NonNullList inv = p.inventory.mainInventory; + LocalPlayer p = ctx.player(); + NonNullList inv = p.inventory.items; for (int i = 0; i < 9; i++) { ItemStack item = inv.get(i); // this usage of settings() is okay because it's only called once during pathing @@ -163,12 +169,12 @@ public boolean throwaway(boolean select, Predicate desired) { // acceptableThrowawayItems to the CalculationContext if (desired.test(item)) { if (select) { - p.inventory.currentItem = i; + p.inventory.selected = i; } return true; } } - if (desired.test(p.inventory.offHandInventory.get(0))) { + if (desired.test(p.inventory.offhand.get(0))) { // main hand takes precedence over off hand // that means that if we have block A selected in main hand and block B in off hand, right clicking places block B // we've already checked above ^ and the main hand can't possible have an acceptablethrowawayitem @@ -178,7 +184,7 @@ public boolean throwaway(boolean select, Predicate desired) { ItemStack item = inv.get(i); if (item.isEmpty() || item.getItem() instanceof PickaxeItem) { if (select) { - p.inventory.currentItem = i; + p.inventory.selected = i; } return true; } diff --git a/src/main/java/baritone/behavior/MemoryBehavior.java b/src/main/java/baritone/behavior/MemoryBehavior.java index de1dace42..48b9cdbb3 100644 --- a/src/main/java/baritone/behavior/MemoryBehavior.java +++ b/src/main/java/baritone/behavior/MemoryBehavior.java @@ -23,9 +23,6 @@ import baritone.api.utils.BetterBlockPos; import baritone.cache.ContainerMemory; import baritone.utils.BlockStateInterface; -import net.minecraft.block.BedBlock; -import net.minecraft.item.ItemStack; - import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -33,6 +30,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.BedBlock; /** diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 8db5a7416..1c089df57 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -36,13 +36,12 @@ import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.pathing.Favoring; -import net.minecraft.util.math.BlockPos; - import java.util.ArrayList; import java.util.Comparator; import java.util.Objects; import java.util.Optional; import java.util.concurrent.LinkedBlockingQueue; +import net.minecraft.core.BlockPos; public final class PathingBehavior extends Behavior implements IPathingBehavior, Helper { diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 556a7e3c4..2e9aba140 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -21,17 +21,16 @@ import baritone.utils.pathing.PathingBlockType; import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.util.RegistryKey; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - import java.util.ArrayList; import java.util.BitSet; import java.util.List; import java.util.Map; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; /** * @author Brady @@ -180,7 +179,7 @@ private final void setSpecial() { } } - public final BlockState getBlock(int x, int y, int z, RegistryKey dimension) { + public final BlockState getBlock(int x, int y, int z, ResourceKey dimension) { int index = getPositionIndex(x, y, z); PathingBlockType type = getType(index); int internalPos = z << 4 | x; @@ -202,15 +201,15 @@ public final BlockState getBlock(int x, int y, int z, RegistryKey dimensi } if (type == PathingBlockType.SOLID) { - if (y == 127 && dimension == World.THE_NETHER) { + if (y == 127 && dimension == Level.NETHER) { // nether roof is always unbreakable - return Blocks.BEDROCK.getDefaultState(); + return Blocks.BEDROCK.defaultBlockState(); } - if (y < 5 && dimension == World.OVERWORLD) { + if (y < 5 && dimension == Level.OVERWORLD) { // solid blocks below 5 are commonly bedrock // however, returning bedrock always would be a little yikes // discourage paths that include breaking blocks below 5 a little more heavily just so that it takes paths breaking what's known to be stone (at 5 or above) instead of what could maybe be bedrock (below 5) - return Blocks.OBSIDIAN.getDefaultState(); + return Blocks.OBSIDIAN.defaultBlockState(); } } return ChunkPacker.pathingTypeToBlock(type, dimension); diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index bdbe43a6e..4e8597fbc 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -20,11 +20,6 @@ import baritone.Baritone; import baritone.api.cache.ICachedRegion; import baritone.api.utils.BlockUtils; -import net.minecraft.block.BlockState; -import net.minecraft.util.RegistryKey; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - import java.io.*; import java.nio.file.Files; import java.nio.file.Path; @@ -32,6 +27,10 @@ import java.util.*; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; /** * @author Brady @@ -62,14 +61,14 @@ public final class CachedRegion implements ICachedRegion { */ private final int z; - private final RegistryKey dimension; + private final ResourceKey dimension; /** * Has this region been modified since its most recent load or save */ private boolean hasUnsavedChanges; - CachedRegion(int x, int z, RegistryKey dimension) { + CachedRegion(int x, int z, ResourceKey dimension) { this.x = x; this.z = z; this.hasUnsavedChanges = false; diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 20f554e6c..4d9ff16df 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -25,12 +25,6 @@ import baritone.api.utils.Helper; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; -import net.minecraft.util.RegistryKey; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; - import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -39,6 +33,11 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; /** * @author Brady @@ -71,11 +70,11 @@ public final class CachedWorld implements ICachedWorld, Helper { * All chunk positions pending packing. This map will be updated in-place if a new update to the chunk occurs * while waiting in the queue for the packer thread to get to it. */ - private final Map toPackMap = new ConcurrentHashMap<>(); + private final Map toPackMap = new ConcurrentHashMap<>(); - private final RegistryKey dimension; + private final ResourceKey dimension; - CachedWorld(Path directory, RegistryKey dimension) { + CachedWorld(Path directory, ResourceKey dimension) { if (!Files.exists(directory)) { try { Files.createDirectories(directory); @@ -103,7 +102,7 @@ public final class CachedWorld implements ICachedWorld, Helper { } @Override - public final void queueForPacking(Chunk chunk) { + public final void queueForPacking(LevelChunk chunk) { if (toPackMap.put(chunk.getPos(), chunk) == null) { toPackQueue.add(chunk.getPos()); } @@ -308,7 +307,7 @@ public void run() { while (true) { try { ChunkPos pos = toPackQueue.take(); - Chunk chunk = toPackMap.remove(pos); + LevelChunk chunk = toPackMap.remove(pos); CachedChunk cached = ChunkPacker.pack(chunk); CachedWorld.this.updateCachedChunk(cached); //System.out.println("Processed chunk at " + chunk.x + "," + chunk.z); diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 4791ad781..12507ffcb 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -21,14 +21,20 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; import net.minecraft.block.*; -import net.minecraft.util.RegistryKey; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.palette.PalettedContainer; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.ChunkSection; - +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DoublePlantBlock; +import net.minecraft.world.level.block.FlowerBlock; +import net.minecraft.world.level.block.TallGrassBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.chunk.PalettedContainer; +import net.minecraft.world.phys.Vec3; import java.util.*; import static baritone.utils.BlockStateInterface.getFromChunk; @@ -41,15 +47,15 @@ public final class ChunkPacker { private ChunkPacker() {} - public static CachedChunk pack(Chunk chunk) { + public static CachedChunk pack(LevelChunk chunk) { //long start = System.nanoTime() / 1000000L; Map> specialBlocks = new HashMap<>(); BitSet bitSet = new BitSet(CachedChunk.SIZE); try { - ChunkSection[] chunkInternalStorageArray = chunk.getSections(); + LevelChunkSection[] chunkInternalStorageArray = chunk.getSections(); for (int y0 = 0; y0 < 16; y0++) { - ChunkSection extendedblockstorage = chunkInternalStorageArray[y0]; + LevelChunkSection extendedblockstorage = chunkInternalStorageArray[y0]; if (extendedblockstorage == null) { // any 16x16x16 area that's all air will have null storage // for example, in an ocean biome, with air from y=64 to y=256 @@ -61,7 +67,7 @@ public static CachedChunk pack(Chunk chunk) { // since a bitset is initialized to all zero, and air is saved as zeros continue; } - PalettedContainer bsc = extendedblockstorage.getData(); + PalettedContainer bsc = extendedblockstorage.getStates(); int yReal = y0 << 4; // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; // for better cache locality, iterate in that order @@ -101,14 +107,14 @@ public static CachedChunk pack(Chunk chunk) { continue https; } } - blocks[z << 4 | x] = Blocks.AIR.getDefaultState(); + blocks[z << 4 | x] = Blocks.AIR.defaultBlockState(); } } // @formatter:on return new CachedChunk(chunk.getPos().x, chunk.getPos().z, bitSet, blocks, specialBlocks, System.currentTimeMillis()); } - private static PathingBlockType getPathingBlockType(BlockState state, Chunk chunk, int x, int y, int z) { + private static PathingBlockType getPathingBlockType(BlockState state, LevelChunk chunk, int x, int y, int z) { Block block = state.getBlock(); if (MovementHelper.isWater(state)) { // only water source blocks are plausibly usable, flowing water should be avoid @@ -125,7 +131,7 @@ private static PathingBlockType getPathingBlockType(BlockState state, Chunk chun return PathingBlockType.AVOID; } if (x == 0 || x == 15 || z == 0 || z == 15) { - Vector3d flow = state.getFluidState().getFlow(chunk.getWorld(), new BlockPos(x + chunk.getPos().x << 4, y, z + chunk.getPos().z << 4)); + Vec3 flow = state.getFluidState().getFlow(chunk.getLevel(), new BlockPos(x + chunk.getPos().x << 4, y, z + chunk.getPos().z << 4)); if (flow.x != 0.0 || flow.z != 0.0) { return PathingBlockType.WATER; } @@ -148,24 +154,24 @@ private static PathingBlockType getPathingBlockType(BlockState state, Chunk chun return PathingBlockType.SOLID; } - public static BlockState pathingTypeToBlock(PathingBlockType type, RegistryKey dimension) { + public static BlockState pathingTypeToBlock(PathingBlockType type, ResourceKey dimension) { switch (type) { case AIR: - return Blocks.AIR.getDefaultState(); + return Blocks.AIR.defaultBlockState(); case WATER: - return Blocks.WATER.getDefaultState(); + return Blocks.WATER.defaultBlockState(); case AVOID: - return Blocks.LAVA.getDefaultState(); + return Blocks.LAVA.defaultBlockState(); case SOLID: // Dimension solid types - if (dimension == World.OVERWORLD) { - return Blocks.STONE.getDefaultState(); + if (dimension == Level.OVERWORLD) { + return Blocks.STONE.defaultBlockState(); } - if (dimension == World.THE_NETHER) { - return Blocks.NETHERRACK.getDefaultState(); + if (dimension == Level.NETHER) { + return Blocks.NETHERRACK.defaultBlockState(); } - if (dimension == World.THE_END) { - return Blocks.END_STONE.getDefaultState(); + if (dimension == Level.END) { + return Blocks.END_STONE.defaultBlockState(); } default: return null; diff --git a/src/main/java/baritone/cache/ContainerMemory.java b/src/main/java/baritone/cache/ContainerMemory.java index e79435e3a..0fa1b8f2f 100644 --- a/src/main/java/baritone/cache/ContainerMemory.java +++ b/src/main/java/baritone/cache/ContainerMemory.java @@ -23,15 +23,14 @@ import baritone.api.utils.IPlayerContext; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.math.BlockPos; - import java.io.IOException; import java.nio.file.Files; import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.util.*; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.item.ItemStack; public class ContainerMemory implements IContainerMemory { @@ -55,7 +54,7 @@ public ContainerMemory(Path saveTo) { } private void read(byte[] bytes) throws IOException { - PacketBuffer in = new PacketBuffer(Unpooled.wrappedBuffer(bytes)); + FriendlyByteBuf in = new FriendlyByteBuf(Unpooled.wrappedBuffer(bytes)); int chests = in.readInt(); for (int i = 0; i < chests; i++) { int x = in.readInt(); @@ -77,12 +76,12 @@ public synchronized void save() throws IOException { return; } ByteBuf buf = Unpooled.buffer(0, Integer.MAX_VALUE); - PacketBuffer out = new PacketBuffer(buf); + FriendlyByteBuf out = new FriendlyByteBuf(buf); out.writeInt(inventories.size()); for (Map.Entry entry : inventories.entrySet()) { - out = new PacketBuffer(out.writeInt(entry.getKey().getX())); - out = new PacketBuffer(out.writeInt(entry.getKey().getY())); - out = new PacketBuffer(out.writeInt(entry.getKey().getZ())); + out = new FriendlyByteBuf(out.writeInt(entry.getKey().getX())); + out = new FriendlyByteBuf(out.writeInt(entry.getKey().getY())); + out = new FriendlyByteBuf(out.writeInt(entry.getKey().getZ())); out = writeItemStacks(entry.getValue().getContents(), out); } Files.write(saveTo, out.array()); @@ -110,31 +109,31 @@ public final synchronized Map getRememberedInven } public static List readItemStacks(byte[] bytes) throws IOException { - PacketBuffer in = new PacketBuffer(Unpooled.wrappedBuffer(bytes)); + FriendlyByteBuf in = new FriendlyByteBuf(Unpooled.wrappedBuffer(bytes)); return readItemStacks(in); } - public static List readItemStacks(PacketBuffer in) throws IOException { + public static List readItemStacks(FriendlyByteBuf in) throws IOException { int count = in.readInt(); List result = new ArrayList<>(); for (int i = 0; i < count; i++) { - result.add(in.readItemStack()); + result.add(in.readItem()); } return result; } public static byte[] writeItemStacks(List write) { ByteBuf buf = Unpooled.buffer(0, Integer.MAX_VALUE); - PacketBuffer out = new PacketBuffer(buf); + FriendlyByteBuf out = new FriendlyByteBuf(buf); out = writeItemStacks(write, out); return out.array(); } - public static PacketBuffer writeItemStacks(List write, PacketBuffer out2) { - PacketBuffer out = out2; // avoid reassigning an argument LOL - out = new PacketBuffer(out.writeInt(write.size())); + public static FriendlyByteBuf writeItemStacks(List write, FriendlyByteBuf out2) { + FriendlyByteBuf out = out2; // avoid reassigning an argument LOL + out = new FriendlyByteBuf(out.writeInt(write.size())); for (ItemStack stack : write) { - out = out.writeItemStack(stack); + out = out.writeItem(stack); } return out; } diff --git a/src/main/java/baritone/cache/WorldData.java b/src/main/java/baritone/cache/WorldData.java index 29d321017..31b1964b0 100644 --- a/src/main/java/baritone/cache/WorldData.java +++ b/src/main/java/baritone/cache/WorldData.java @@ -22,11 +22,10 @@ import baritone.api.cache.IContainerMemory; import baritone.api.cache.IWaypointCollection; import baritone.api.cache.IWorldData; -import net.minecraft.util.RegistryKey; -import net.minecraft.world.World; - import java.io.IOException; import java.nio.file.Path; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; /** * Data about a world, from baritone's point of view. Includes cached chunks, waypoints, and map data. @@ -40,9 +39,9 @@ public class WorldData implements IWorldData { private final ContainerMemory containerMemory; //public final MapData map; public final Path directory; - public final RegistryKey dimension; + public final ResourceKey dimension; - WorldData(Path directory, RegistryKey dimension) { + WorldData(Path directory, ResourceKey dimension) { this.directory = directory; this.cache = new CachedWorld(directory.resolve("cache"), dimension); this.waypoints = new WaypointCollection(directory.resolve("waypoints")); diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index b4e43964d..221ca4a51 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -20,11 +20,6 @@ import baritone.Baritone; import baritone.api.cache.IWorldProvider; import baritone.api.utils.Helper; -import net.minecraft.server.integrated.IntegratedServer; -import net.minecraft.util.RegistryKey; -import net.minecraft.world.DimensionType; -import net.minecraft.world.World; -import net.minecraft.world.storage.FolderName; import org.apache.commons.lang3.SystemUtils; import java.io.File; @@ -35,6 +30,11 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; +import net.minecraft.client.server.IntegratedServer; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.storage.LevelResource; /** * @author Brady @@ -56,7 +56,7 @@ public final WorldData getCurrentWorld() { * * @param world The world's Registry Data */ - public final void initWorld(RegistryKey world) { + public final void initWorld(ResourceKey world) { File directory; File readme; @@ -64,7 +64,7 @@ public final void initWorld(RegistryKey world) { // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file if (mc.isSingleplayer()) { - directory = DimensionType.getDimensionFolder(world, integratedServer.func_240776_a_(FolderName.DOT).toFile()); + directory = DimensionType.getStorageFolder(world, integratedServer.getWorldPath(LevelResource.ROOT).toFile()); // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world if (directory.toPath().relativize(mc.gameDir.toPath()).getNameCount() != 2) { @@ -90,7 +90,7 @@ public final void initWorld(RegistryKey world) { } catch (IOException ignored) {} // We will actually store the world data in a subfolder: "DIM" - Path dir = DimensionType.getDimensionFolder(world, directory).toPath(); + Path dir = DimensionType.getStorageFolder(world, directory).toPath(); if (!Files.exists(dir)) { try { Files.createDirectories(dir); diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 402e4844b..3459f086d 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -22,17 +22,16 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; -import net.minecraft.block.BlockState; -import net.minecraft.client.multiplayer.ClientChunkProvider; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.util.palette.PalettedContainer; -import net.minecraft.world.chunk.AbstractChunkProvider; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.ChunkSection; - import java.util.*; import java.util.stream.IntStream; +import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkSource; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.chunk.PalettedContainer; public enum WorldScanner implements IWorldScanner { @@ -47,7 +46,7 @@ public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLooku if (filter.blocks().isEmpty()) { return res; } - ClientChunkProvider chunkProvider = (ClientChunkProvider) ctx.world().getChunkProvider(); + ClientChunkCache chunkProvider = (ClientChunkCache) ctx.world().getChunkProvider(); int maxSearchRadiusSq = maxSearchRadius * maxSearchRadius; int playerChunkX = ctx.playerFeet().getX() >> 4; @@ -71,7 +70,7 @@ public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLooku foundChunks = true; int chunkX = xoff + playerChunkX; int chunkZ = zoff + playerChunkZ; - Chunk chunk = chunkProvider.getChunk(chunkX, chunkZ, null, false); + LevelChunk chunk = chunkProvider.getChunk(chunkX, chunkZ, null, false); if (chunk == null) { continue; } @@ -97,8 +96,8 @@ public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filt return Collections.emptyList(); } - ClientChunkProvider chunkProvider = (ClientChunkProvider) ctx.world().getChunkProvider(); - Chunk chunk = chunkProvider.getChunk(pos.x, pos.z, null, false); + ClientChunkCache chunkProvider = (ClientChunkCache) ctx.world().getChunkProvider(); + LevelChunk chunk = chunkProvider.getChunk(pos.x, pos.z, null, false); int playerY = ctx.playerFeet().getY(); if (chunk == null || chunk.isEmpty()) { @@ -117,7 +116,7 @@ public int repack(IPlayerContext ctx) { @Override public int repack(IPlayerContext ctx, int range) { - AbstractChunkProvider chunkProvider = ctx.world().getChunkProvider(); + ChunkSource chunkProvider = ctx.world().getChunkProvider(); ICachedWorld cachedWorld = ctx.worldData().getCachedWorld(); BetterBlockPos playerPos = ctx.playerFeet(); @@ -133,7 +132,7 @@ public int repack(IPlayerContext ctx, int range) { int queued = 0; for (int x = minX; x <= maxX; x++) { for (int z = minZ; z <= maxZ; z++) { - Chunk chunk = chunkProvider.getChunk(x, z, false); + LevelChunk chunk = chunkProvider.getChunk(x, z, false); if (chunk != null && !chunk.isEmpty()) { queued++; @@ -145,17 +144,17 @@ public int repack(IPlayerContext ctx, int range) { return queued; } - private boolean scanChunkInto(int chunkX, int chunkZ, Chunk chunk, BlockOptionalMetaLookup filter, Collection result, int max, int yLevelThreshold, int playerY, int[] coordinateIterationOrder) { - ChunkSection[] chunkInternalStorageArray = chunk.getSections(); + private boolean scanChunkInto(int chunkX, int chunkZ, LevelChunk chunk, BlockOptionalMetaLookup filter, Collection result, int max, int yLevelThreshold, int playerY, int[] coordinateIterationOrder) { + LevelChunkSection[] chunkInternalStorageArray = chunk.getSections(); boolean foundWithinY = false; for (int yIndex = 0; yIndex < 16; yIndex++) { int y0 = coordinateIterationOrder[yIndex]; - ChunkSection section = chunkInternalStorageArray[y0]; - if (section == null || ChunkSection.isEmpty(section)) { + LevelChunkSection section = chunkInternalStorageArray[y0]; + if (section == null || LevelChunkSection.isEmpty(section)) { continue; } int yReal = y0 << 4; - PalettedContainer bsc = section.getData(); + PalettedContainer bsc = section.getStates(); for (int yy = 0; yy < 16; yy++) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index ed25d789b..81ea02e50 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -34,13 +34,12 @@ import baritone.command.argument.CommandArguments; import baritone.command.manager.CommandManager; import baritone.utils.accessor.IGuiScreen; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.TextComponent; import net.minecraft.util.Tuple; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; - import java.net.URI; import java.net.URISyntaxException; import java.util.List; @@ -79,14 +78,14 @@ private void logRanCommand(String command, String rest) { if (settings.echoCommands.value) { String msg = command + rest; String toDisplay = settings.censorRanCommands.value ? command + " ..." : msg; - TextComponent component = new StringTextComponent(String.format("> %s", toDisplay)); + BaseComponent component = new TextComponent(String.format("> %s", toDisplay)); component.setStyle(component.getStyle() - .setFormatting(TextFormatting.WHITE) - .setHoverEvent(new HoverEvent( + .withColor(ChatFormatting.WHITE) + .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new StringTextComponent("Click to rerun command") + new TextComponent("Click to rerun command") )) - .setClickEvent(new ClickEvent( + .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + msg ))); diff --git a/src/main/java/baritone/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java index 88ea32f42..f1b7c733d 100644 --- a/src/main/java/baritone/command/defaults/ChestsCommand.java +++ b/src/main/java/baritone/command/defaults/ChestsCommand.java @@ -24,15 +24,14 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.utils.BetterBlockPos; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.IFormattableTextComponent; - import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Stream; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.item.ItemStack; public class ChestsCommand extends Command { @@ -54,8 +53,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { IRememberedInventory inv = entry.getValue(); logDirect(pos.toString()); for (ItemStack item : inv.getContents()) { - IFormattableTextComponent component = (IFormattableTextComponent) item.getTextComponent(); - component.appendString(String.format(" x %d", item.getCount())); + MutableComponent component = (MutableComponent) item.getDisplayName(); + component.append(String.format(" x %d", item.getCount())); logDirect(component); } } diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index 5a76c0296..eb06e4ff0 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -23,11 +23,10 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.pathing.goals.GoalBlock; -import net.minecraft.entity.Entity; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.world.entity.Entity; public class ComeCommand extends Command { @@ -42,7 +41,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (entity == null) { throw new CommandInvalidStateException("render view entity is null"); } - baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(entity.getPosition())); + baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(entity.blockPosition())); logDirect("Coming"); } diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index a415b9b15..d5b62b4dc 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -23,13 +23,12 @@ import baritone.api.command.datatypes.BlockById; import baritone.api.command.exception.CommandException; import baritone.api.utils.BetterBlockPos; -import net.minecraft.block.Block; -import net.minecraft.util.registry.Registry; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.core.Registry; +import net.minecraft.world.level.block.Block; public class FindCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index 50844165e..2c797449d 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -26,16 +26,15 @@ import baritone.api.command.datatypes.NearbyPlayer; import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.Registry; - import java.util.*; import java.util.function.Predicate; import java.util.stream.Stream; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; public class FollowCommand extends Command { @@ -136,7 +135,7 @@ public List getLongDesc() { @KeepName private enum FollowGroup { ENTITIES(LivingEntity.class::isInstance), - PLAYERS(PlayerEntity.class::isInstance); /* , + PLAYERS(Player.class::isInstance); /* , FRIENDLY(entity -> entity.getAttackTarget() != HELPER.mc.player), HOSTILE(FRIENDLY.filter.negate()); */ final Predicate filter; diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index 9320271c6..b1c9783d5 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -25,16 +25,13 @@ import baritone.api.command.exception.CommandNotFoundException; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; - import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.TextComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; @@ -88,8 +85,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect(""); command.getLongDesc().forEach(this::logDirect); logDirect(""); - TextComponent returnComponent = new StringTextComponent("Click to return to the help menu"); - returnComponent.setStyle(returnComponent.getStyle().setClickEvent(new ClickEvent( + BaseComponent returnComponent = new TextComponent("Click to return to the help menu"); + returnComponent.setStyle(returnComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + label ))); diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 86e5ec663..e2f94ccf4 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -37,16 +37,14 @@ import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.utils.IRenderer; -import net.minecraft.block.Blocks; -import net.minecraft.util.Direction; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.vector.Vector3i; - import java.awt.*; -import java.util.List; import java.util.*; import java.util.function.Function; import java.util.stream.Stream; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.AABB; public class SelCommand extends Command { @@ -66,7 +64,7 @@ public void onRenderPass(RenderEvent event) { float lineWidth = Baritone.settings().selectionLineWidth.value; boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value; IRenderer.startLines(color, opacity, lineWidth, ignoreDepth); - IRenderer.drawAABB(event.getModelViewStack(), new AxisAlignedBB(pos1, pos1.add(1, 1, 1))); + IRenderer.drawAABB(event.getModelViewStack(), new AABB(pos1, pos1.add(1, 1, 1))); IRenderer.endLines(ignoreDepth); } }); @@ -143,7 +141,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { ); } for (ISelection selection : selections) { - Vector3i size = selection.size(); + Vec3i size = selection.size(); BetterBlockPos min = selection.min(); ISchematic schematic = new FillSchematic(size.getX(), size.getY(), size.getZ(), type); if (action == Action.WALLS) { diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 3ebe0b192..b9ddc7a79 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -27,17 +27,16 @@ import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.SettingsUtil; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; - import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.TextComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; import static baritone.api.utils.SettingsUtil.settingTypeToString; @@ -163,23 +162,23 @@ public void execute(String label, IArgConsumer args) throws CommandException { settingValueToString(setting) )); } - TextComponent oldValueComponent = new StringTextComponent(String.format("Old value: %s", oldValue)); + BaseComponent oldValueComponent = new TextComponent(String.format("Old value: %s", oldValue)); oldValueComponent.setStyle(oldValueComponent.getStyle() - .setFormatting(TextFormatting.GRAY) - .setHoverEvent(new HoverEvent( + .withColor(ChatFormatting.GRAY) + .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new StringTextComponent("Click to set the setting back to this value") + new TextComponent("Click to set the setting back to this value") )) - .setClickEvent(new ClickEvent( + .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + String.format("set %s %s", setting.getName(), oldValue) ))); logDirect(oldValueComponent); if ((setting.getName().equals("chatControl") && !(Boolean) setting.value && !Baritone.settings().chatControlAnyway.value) || setting.getName().equals("chatControlAnyway") && !(Boolean) setting.value && !Baritone.settings().chatControl.value) { - logDirect("Warning: Chat commands will no longer work. If you want to revert this change, use prefix control (if enabled) or click the old value listed above.", TextFormatting.RED); + logDirect("Warning: Chat commands will no longer work. If you want to revert this change, use prefix control (if enabled) or click the old value listed above.", ChatFormatting.RED); } else if (setting.getName().equals("prefixControl") && !(Boolean) setting.value) { - logDirect("Warning: Prefixed commands will no longer work. If you want to revert this change, use chat control (if enabled) or click the old value listed above.", TextFormatting.RED); + logDirect("Warning: Prefixed commands will no longer work. If you want to revert this change, use chat control (if enabled) or click the old value listed above.", ChatFormatting.RED); } } SettingsUtil.save(Baritone.settings()); diff --git a/src/main/java/baritone/command/defaults/SurfaceCommand.java b/src/main/java/baritone/command/defaults/SurfaceCommand.java index 509c9ca0e..9eeacc742 100644 --- a/src/main/java/baritone/command/defaults/SurfaceCommand.java +++ b/src/main/java/baritone/command/defaults/SurfaceCommand.java @@ -24,11 +24,10 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.block.AirBlock; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.world.level.block.AirBlock; public class SurfaceCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/TunnelCommand.java b/src/main/java/baritone/command/defaults/TunnelCommand.java index e7852dd05..f958c9d20 100644 --- a/src/main/java/baritone/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/command/defaults/TunnelCommand.java @@ -23,12 +23,11 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalStrictDirection; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; public class TunnelCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 1dabe5446..32b7610b1 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -32,17 +32,16 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; - import java.util.*; import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Stream; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.TextComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; @@ -58,24 +57,24 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == null) { throw new CommandInvalidTypeException(args.consumed(), "an action"); } - BiFunction toComponent = (waypoint, _action) -> { - TextComponent component = new StringTextComponent(""); - TextComponent tagComponent = new StringTextComponent(waypoint.getTag().name() + " "); - tagComponent.setStyle(tagComponent.getStyle().setFormatting(TextFormatting.GRAY)); + BiFunction toComponent = (waypoint, _action) -> { + BaseComponent component = new TextComponent(""); + BaseComponent tagComponent = new TextComponent(waypoint.getTag().name() + " "); + tagComponent.setStyle(tagComponent.getStyle().withColor(ChatFormatting.GRAY)); String name = waypoint.getName(); - TextComponent nameComponent = new StringTextComponent(!name.isEmpty() ? name : ""); - nameComponent.setStyle(nameComponent.getStyle().setFormatting(!name.isEmpty() ? TextFormatting.GRAY : TextFormatting.DARK_GRAY)); - TextComponent timestamp = new StringTextComponent(" @ " + new Date(waypoint.getCreationTimestamp())); - timestamp.setStyle(timestamp.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + BaseComponent nameComponent = new TextComponent(!name.isEmpty() ? name : ""); + nameComponent.setStyle(nameComponent.getStyle().withColor(!name.isEmpty() ? ChatFormatting.GRAY : ChatFormatting.DARK_GRAY)); + BaseComponent timestamp = new TextComponent(" @ " + new Date(waypoint.getCreationTimestamp())); + timestamp.setStyle(timestamp.getStyle().withColor(ChatFormatting.DARK_GRAY)); component.append(tagComponent); component.append(nameComponent); component.append(timestamp); component.setStyle(component.getStyle() - .setHoverEvent(new HoverEvent( + .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new StringTextComponent("Click to select") + new TextComponent("Click to select") )) - .setClickEvent(new ClickEvent( + .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s %s %s @ %d", @@ -88,7 +87,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { )); return component; }; - Function transform = waypoint -> + Function transform = waypoint -> toComponent.apply(waypoint, action == Action.LIST ? Action.INFO : action); if (action == Action.LIST) { IWaypoint.Tag tag = args.hasAny() ? IWaypoint.Tag.getByName(args.peekString()) : null; @@ -137,8 +136,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); IWaypoint waypoint = new Waypoint(name, tag, pos); ForWaypoints.waypoints(this.baritone).addWaypoint(waypoint); - TextComponent component = new StringTextComponent("Waypoint added: "); - component.setStyle(component.getStyle().setFormatting(TextFormatting.GRAY)); + BaseComponent component = new TextComponent("Waypoint added: "); + component.setStyle(component.getStyle().withColor(ChatFormatting.GRAY)); component.append(toComponent.apply(waypoint, Action.INFO)); logDirect(component); } else if (action == Action.CLEAR) { @@ -195,8 +194,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == Action.INFO) { logDirect(transform.apply(waypoint)); logDirect(String.format("Position: %s", waypoint.getLocation())); - TextComponent deleteComponent = new StringTextComponent("Click to delete this waypoint"); - deleteComponent.setStyle(deleteComponent.getStyle().setClickEvent(new ClickEvent( + BaseComponent deleteComponent = new TextComponent("Click to delete this waypoint"); + deleteComponent.setStyle(deleteComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s delete %s @ %d", @@ -206,8 +205,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getCreationTimestamp() ) ))); - TextComponent goalComponent = new StringTextComponent("Click to set goal to this waypoint"); - goalComponent.setStyle(goalComponent.getStyle().setClickEvent(new ClickEvent( + BaseComponent goalComponent = new TextComponent("Click to set goal to this waypoint"); + goalComponent.setStyle(goalComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s goal %s @ %d", @@ -217,8 +216,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getCreationTimestamp() ) ))); - TextComponent backComponent = new StringTextComponent("Click to return to the waypoints list"); - backComponent.setStyle(backComponent.getStyle().setClickEvent(new ClickEvent( + BaseComponent backComponent = new TextComponent("Click to return to the waypoints list"); + backComponent.setStyle(backComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s list", diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index eff8689b5..0f36fb444 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -25,11 +25,10 @@ import baritone.api.utils.Helper; import baritone.cache.WorldProvider; import baritone.utils.BlockStateInterface; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; - import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; /** * @author Brady @@ -83,18 +82,18 @@ public final void onChunkEvent(ChunkEvent event) { boolean isPostPopulate = state == EventState.POST && (type == ChunkEvent.Type.POPULATE_FULL || type == ChunkEvent.Type.POPULATE_PARTIAL); - World world = baritone.getPlayerContext().world(); + Level world = baritone.getPlayerContext().world(); // Whenever the server sends us to another dimension, chunks are unloaded // technically after the new world has been loaded, so we perform a check // to make sure the chunk being unloaded is already loaded. boolean isPreUnload = state == EventState.PRE && type == ChunkEvent.Type.UNLOAD - && world.getChunkProvider().getChunk(event.getX(), event.getZ(), null, false) != null; + && world.getChunkSource().getChunk(event.getX(), event.getZ(), null, false) != null; if (isPostPopulate || isPreUnload) { baritone.getWorldProvider().ifWorldLoaded(worldData -> { - Chunk chunk = world.getChunk(event.getX(), event.getZ()); + LevelChunk chunk = world.getChunk(event.getX(), event.getZ()); worldData.getCachedWorld().queueForPacking(chunk); }); } diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index d47569b47..9792238ce 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -24,15 +24,15 @@ import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; import baritone.utils.pathing.BetterWorldBorder; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import static baritone.api.pathing.movement.ActionCosts.COST_INF; @@ -46,7 +46,7 @@ public class CalculationContext { public final boolean safeForThreadedUse; public final IBaritone baritone; - public final World world; + public final Level world; public final WorldData worldData; public final BlockStateInterface bsi; public final ToolSet toolSet; @@ -79,14 +79,14 @@ public CalculationContext(IBaritone baritone) { public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.safeForThreadedUse = forUseOnAnotherThread; this.baritone = baritone; - ClientPlayerEntity player = baritone.getPlayerContext().player(); + LocalPlayer player = baritone.getPlayerContext().player(); this.world = baritone.getPlayerContext().world(); this.worldData = (WorldData) baritone.getWorldProvider().getCurrentWorld(); this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); this.toolSet = new ToolSet(player); this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); - this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && PlayerInventory.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && world.getDimensionKey() != World.THE_NETHER; - this.canSprint = Baritone.settings().allowSprint.value && player.getFoodStats().getFoodLevel() > 6; + this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && Inventory.isHotbarSlot(player.inventory.findSlotMatchingItem(STACK_BUCKET_WATER)) && world.dimension() != Level.NETHER; + this.canSprint = Baritone.settings().allowSprint.value && player.getFoodData().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; this.allowBreak = Baritone.settings().allowBreak.value; this.allowParkour = Baritone.settings().allowParkour.value; @@ -99,7 +99,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.allowDownward = Baritone.settings().allowDownward.value; this.maxFallHeightNoWater = Baritone.settings().maxFallHeightNoWater.value; this.maxFallHeightBucket = Baritone.settings().maxFallHeightBucket.value; - int depth = EnchantmentHelper.getDepthStriderModifier(player); + int depth = EnchantmentHelper.getDepthStrider(player); if (depth > 3) { depth = 3; } diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 395c2de00..312bb0f28 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -17,6 +17,8 @@ package baritone.pathing.movement; +import BetterBlockPos; +import IPlayerContext; import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.pathing.movement.IMovement; @@ -25,12 +27,11 @@ import baritone.api.utils.input.Input; import baritone.behavior.PathingBehavior; import baritone.utils.BlockStateInterface; -import net.minecraft.entity.item.FallingBlockEntity; -import net.minecraft.util.Direction; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; - import java.util.*; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.phys.AABB; public abstract class Movement implements IMovement, MovementHelper { @@ -157,7 +158,7 @@ protected boolean prepared(MovementState state) { } boolean somethingInTheWay = false; for (BetterBlockPos blockPos : positionsToBreak) { - if (!ctx.world().getEntitiesWithinAABB(FallingBlockEntity.class, new AxisAlignedBB(0, 0, 0, 1, 1.1, 1).offset(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { + if (!ctx.world().getEntitiesWithinAABB(FallingBlockEntity.class, new AABB(0, 0, 0, 1, 1.1, 1).move(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { return false; } if (!MovementHelper.canWalkThrough(ctx, blockPos)) { // can't break air, so don't try diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 9f9f1d286..f27c4d62b 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -28,17 +28,45 @@ import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; import net.minecraft.block.*; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.fluid.*; -import net.minecraft.pathfinding.PathType; -import net.minecraft.state.BooleanProperty; -import net.minecraft.state.properties.SlabType; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.world.IBlockReader; - +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.AbstractSkullBlock; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.BambooBlock; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DoorBlock; +import net.minecraft.world.level.block.EndPortalBlock; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.InfestedBlock; +import net.minecraft.world.level.block.ScaffoldingBlock; +import net.minecraft.world.level.block.ShulkerBoxBlock; +import net.minecraft.world.level.block.SkullBlock; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.SnowLayerBlock; +import net.minecraft.world.level.block.StainedGlassBlock; +import net.minecraft.world.level.block.StairBlock; +import net.minecraft.world.level.block.TrapDoorBlock; +import net.minecraft.world.level.block.WaterlilyBlock; +import net.minecraft.world.level.block.WoolCarpetBlock; +import net.minecraft.world.level.block.piston.MovingPistonBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.SlabType; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.WaterFluid; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; import java.util.Optional; import static baritone.pathing.movement.Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP; @@ -53,7 +81,7 @@ public interface MovementHelper extends ActionCosts, Helper { static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block b = state.getBlock(); return b == Blocks.ICE // ice becomes water, and water can mess up the path - || b instanceof SilverfishBlock // obvious reasons + || b instanceof InfestedBlock // obvious reasons // call context.get directly with x,y,z. no need to make 5 new BlockPos for no reason || avoidAdjacentBreaking(bsi, x, y + 1, z, true) || avoidAdjacentBreaking(bsi, x + 1, y, z, false) @@ -72,7 +100,7 @@ static boolean avoidAdjacentBreaking(BlockStateInterface bsi, int x, int y, int // therefore if directlyAbove is true, we will actually ignore if this is falling && block instanceof FallingBlock // obviously, this check is only valid for falling blocks && Baritone.settings().avoidUpdatingFallingBlocks.value // and if the setting is enabled - && FallingBlock.canFallThrough(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) + && FallingBlock.isFree(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) return true; // dont break a block that is adjacent to unsupported gravel because it can cause really weird stuff } return !state.getFluidState().isEmpty(); @@ -91,7 +119,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block instanceof AbstractFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { @@ -103,10 +131,10 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc // be opened by just interacting. return block != Blocks.IRON_DOOR; } - if (block instanceof CarpetBlock) { + if (block instanceof WoolCarpetBlock) { return canWalkOn(bsi, x, y - 1, z); } - if (block instanceof SnowBlock) { + if (block instanceof SnowLayerBlock) { // we've already checked doors and fence gates // so the only remaining dynamic isPassables are snow and trapdoor // if they're cached as a top block, we don't know their metadata @@ -116,7 +144,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc } // the check in BlockSnow.isPassable is layers < 5 // while actually, we want < 3 because 3 or greater makes it impassable in a 2 high ceiling - if (state.get(SnowBlock.LAYERS) >= 3) { + if (state.getValue(SnowLayerBlock.LAYERS) >= 3) { return false; } // ok, it's low enough we could walk through it, but is it supported? @@ -126,12 +154,12 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc return false; // Don't walk through flowing liquids } FluidState fluidState = state.getFluidState(); - if (fluidState.getFluid() instanceof WaterFluid) { + if (fluidState.getType() instanceof WaterFluid) { if (Baritone.settings().assumeWalkOnWater.value) { return false; } BlockState up = bsi.get0(x, y + 1, z); - if (!up.getFluidState().isEmpty() || up.getBlock() instanceof LilyPadBlock) { + if (!up.getFluidState().isEmpty() || up.getBlock() instanceof WaterlilyBlock) { return false; } return true; @@ -139,7 +167,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc // every block that overrides isPassable with anything more complicated than a "return true;" or "return false;" // has already been accounted for above // therefore it's safe to not construct a blockpos from our x, y, z ints and instead just pass null - return state.allowsMovement(bsi.access, BlockPos.ZERO, PathType.LAND); // workaround for future compatibility =P + return state.isPathfindable(bsi.access, BlockPos.ZERO, PathComputationType.LAND); // workaround for future compatibility =P } /** @@ -155,7 +183,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc static boolean fullyPassable(CalculationContext context, int x, int y, int z) { return fullyPassable( context.bsi.access, - context.bsi.isPassableBlockPos.setPos(x, y, z), + context.bsi.isPassableBlockPos.set(x, y, z), context.bsi.get0(x, y, z) ); } @@ -164,13 +192,13 @@ static boolean fullyPassable(IPlayerContext ctx, BlockPos pos) { return fullyPassable(ctx.world(), pos, ctx.world().getBlockState(pos)); } - static boolean fullyPassable(IBlockReader access, BlockPos pos, BlockState state) { + static boolean fullyPassable(BlockGetter access, BlockPos pos, BlockState state) { Block block = state.getBlock(); if (block instanceof AirBlock) { // early return for most common case return true; } // exceptions - blocks that are isPassable true, but we can't actually jump through - if (block instanceof AbstractFireBlock + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.VINE @@ -178,7 +206,7 @@ static boolean fullyPassable(IBlockReader access, BlockPos pos, BlockState state || block == Blocks.COCOA || block instanceof DoorBlock || block instanceof FenceGateBlock - || block instanceof SnowBlock + || block instanceof SnowLayerBlock || !state.getFluidState().isEmpty() || block instanceof TrapDoorBlock || block instanceof EndPortalBlock @@ -187,7 +215,7 @@ static boolean fullyPassable(IBlockReader access, BlockPos pos, BlockState state return false; } // door, fence gate, liquid, trapdoor have been accounted for, nothing else uses the world or pos parameters - return state.allowsMovement(access, pos, PathType.LAND); + return state.isPathfindable(access, pos, PathComputationType.LAND); } static boolean isReplaceable(int x, int y, int z, BlockState state, BlockStateInterface bsi) { @@ -206,12 +234,12 @@ static boolean isReplaceable(int x, int y, int z, BlockState state, BlockStateIn // early return for common cases hehe return true; } - if (block instanceof SnowBlock) { + if (block instanceof SnowLayerBlock) { // as before, default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) if (!bsi.worldContainsLoadedChunk(x, z)) { return true; } - return state.get(SnowBlock.LAYERS) == 1; + return state.getValue(SnowLayerBlock.LAYERS) == 1; } if (block == Blocks.LARGE_FERN || block == Blocks.TALL_GRASS) { return true; @@ -247,7 +275,7 @@ static boolean isGatePassable(IPlayerContext ctx, BlockPos gatePos, BlockPos pla return true; } - return state.get(FenceGateBlock.OPEN); + return state.getValue(FenceGateBlock.OPEN); } static boolean isHorizontalBlockPassable(BlockPos blockPos, BlockState blockState, BlockPos playerPos, BooleanProperty propertyOpen) { @@ -255,8 +283,8 @@ static boolean isHorizontalBlockPassable(BlockPos blockPos, BlockState blockStat return false; } - Direction.Axis facing = blockState.get(HorizontalBlock.HORIZONTAL_FACING).getAxis(); - boolean open = blockState.get(propertyOpen); + Direction.Axis facing = blockState.getValue(HorizontalDirectionalBlock.FACING).getAxis(); + boolean open = blockState.getValue(propertyOpen); Direction.Axis playerFacing; if (playerPos.north().equals(blockPos) || playerPos.south().equals(blockPos)) { @@ -275,7 +303,7 @@ static boolean avoidWalkingInto(BlockState state) { return !state.getFluidState().isEmpty() || block == Blocks.MAGMA_BLOCK || block == Blocks.CACTUS - || block instanceof AbstractFireBlock + || block instanceof BaseFireBlock || block == Blocks.END_PORTAL || block == Blocks.COBWEB || block == Blocks.BUBBLE_COLUMN; @@ -317,10 +345,10 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think its a decrease in readability BlockState upState = bsi.get0(x, y + 1, z); Block up = upState.getBlock(); - if (up == Blocks.LILY_PAD || up instanceof CarpetBlock) { + if (up == Blocks.LILY_PAD || up instanceof WoolCarpetBlock) { return true; } - if (isFlowing(x, y, z, state, bsi) || upState.getFluidState().getFluid() == Fluids.FLOWING_WATER) { + if (isFlowing(x, y, z, state, bsi) || upState.getFluidState().getType() == Fluids.FLOWING_WATER) { // the only scenario in which we can walk on flowing water is if it's under still water with jesus off return isWater(upState) && !Baritone.settings().assumeWalkOnWater.value; } @@ -336,11 +364,11 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat } if (block instanceof SlabBlock) { if (!Baritone.settings().allowWalkOnBottomSlab.value) { - return state.get(SlabBlock.TYPE) != SlabType.BOTTOM; + return state.getValue(SlabBlock.TYPE) != SlabType.BOTTOM; } return true; } - return block instanceof StairsBlock; + return block instanceof StairBlock; } static boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, BlockState state) { @@ -415,7 +443,7 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i static boolean isBottomSlab(BlockState state) { return state.getBlock() instanceof SlabBlock - && state.get(SlabBlock.TYPE) == SlabType.BOTTOM; + && state.getValue(SlabBlock.TYPE) == SlabType.BOTTOM; } /** @@ -458,7 +486,7 @@ static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { * @return Whether or not the block is water */ static boolean isWater(BlockState state) { - Fluid f = state.getFluidState().getFluid(); + Fluid f = state.getFluidState().getType(); return f == Fluids.WATER || f == Fluids.FLOWING_WATER; } @@ -475,7 +503,7 @@ static boolean isWater(IPlayerContext ctx, BlockPos bp) { } static boolean isLava(BlockState state) { - Fluid f = state.getFluidState().getFluid(); + Fluid f = state.getFluidState().getType(); return f == Fluids.LAVA || f == Fluids.FLOWING_LAVA; } @@ -496,16 +524,16 @@ static boolean isLiquid(BlockState blockState) { static boolean possiblyFlowing(BlockState state) { FluidState fluidState = state.getFluidState(); - return fluidState.getFluid() instanceof FlowingFluid - && fluidState.getFluid().getLevel(fluidState) != 8; + return fluidState.getType() instanceof FlowingFluid + && fluidState.getType().getAmount(fluidState) != 8; } static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterface bsi) { FluidState fluidState = state.getFluidState(); - if (!(fluidState.getFluid() instanceof FlowingFluid)) { + if (!(fluidState.getType() instanceof FlowingFluid)) { return false; } - if (fluidState.getFluid().getLevel(fluidState) != 8) { + if (fluidState.getType().getAmount(fluidState) != 8) { return true; } return possiblyFlowing(bsi.get0(x + 1, y, z)) @@ -522,7 +550,7 @@ static boolean isBlockNormalCube(BlockState state) { || block instanceof ShulkerBoxBlock) { return false; } - return Block.isOpaque(state.getCollisionShape(null, null)); + return Block.isShapeFullBlock(state.getCollisionShape(null, null)); } static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, BlockPos placeAt, boolean preferDown, boolean wouldSneak) { @@ -530,11 +558,11 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, Optional direct = RotationUtils.reachable(ctx, placeAt, wouldSneak); // we assume that if there is a block there, it must be replacable boolean found = false; if (direct.isPresent()) { - state.setTarget(new MovementState.MovementTarget(direct.get(), true)); + state.setTarget(new MovementTarget(direct.get(), true)); found = true; } for (int i = 0; i < 5; i++) { - BlockPos against1 = placeAt.offset(HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i]); + BlockPos against1 = placeAt.relative(HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i]); if (MovementHelper.canPlaceAgainst(ctx, against1)) { if (!((Baritone) baritone).getInventoryBehavior().selectThrowawayForLocation(false, placeAt.getX(), placeAt.getY(), placeAt.getZ())) { // get ready to place a throwaway block Helper.HELPER.logDebug("bb pls get me some blocks. dirt, netherrack, cobble"); @@ -544,10 +572,10 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, double faceX = (placeAt.getX() + against1.getX() + 1.0D) * 0.5D; double faceY = (placeAt.getY() + against1.getY() + 0.5D) * 0.5D; double faceZ = (placeAt.getZ() + against1.getZ() + 1.0D) * 0.5D; - Rotation place = RotationUtils.calcRotationFromVec3d(wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.playerHead(), new Vector3d(faceX, faceY, faceZ), ctx.playerRotations()); - RayTraceResult res = RayTraceUtils.rayTraceTowards(ctx.player(), place, ctx.playerController().getBlockReachDistance(), wouldSneak); - if (res != null && res.getType() == RayTraceResult.Type.BLOCK && ((BlockRayTraceResult) res).getPos().equals(against1) && ((BlockRayTraceResult) res).getPos().offset(((BlockRayTraceResult) res).getFace()).equals(placeAt)) { - state.setTarget(new MovementState.MovementTarget(place, true)); + Rotation place = RotationUtils.calcRotationFromVec3d(wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.playerHead(), new Vec3(faceX, faceY, faceZ), ctx.playerRotations()); + HitResult res = RayTraceUtils.rayTraceTowards(ctx.player(), place, ctx.playerController().getBlockReachDistance(), wouldSneak); + if (res != null && res.getType() == HitResult.Type.BLOCK && ((BlockHitResult) res).getBlockPos().equals(against1) && ((BlockHitResult) res).getBlockPos().relative(((BlockHitResult) res).getDirection()).equals(placeAt)) { + state.setTarget(new MovementTarget(place, true)); found = true; if (!preferDown) { @@ -560,9 +588,9 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, } if (ctx.getSelectedBlock().isPresent()) { BlockPos selectedBlock = ctx.getSelectedBlock().get(); - Direction side = ((BlockRayTraceResult) ctx.objectMouseOver()).getFace(); + Direction side = ((BlockHitResult) ctx.objectMouseOver()).getDirection(); // only way for selectedBlock.equals(placeAt) to be true is if it's replacable - if (selectedBlock.equals(placeAt) || (MovementHelper.canPlaceAgainst(ctx, selectedBlock) && selectedBlock.offset(side).equals(placeAt))) { + if (selectedBlock.equals(placeAt) || (MovementHelper.canPlaceAgainst(ctx, selectedBlock) && selectedBlock.relative(side).equals(placeAt))) { if (wouldSneak) { state.setInput(Input.SNEAK, true); } diff --git a/src/main/java/baritone/pathing/movement/Moves.java b/src/main/java/baritone/pathing/movement/Moves.java index 6441ce033..a76bf81fd 100644 --- a/src/main/java/baritone/pathing/movement/Moves.java +++ b/src/main/java/baritone/pathing/movement/Moves.java @@ -20,7 +20,7 @@ import baritone.api.utils.BetterBlockPos; import baritone.pathing.movement.movements.*; import baritone.utils.pathing.MutableMoveResult; -import net.minecraft.util.Direction; +import net.minecraft.core.Direction; /** * An enum of all possible movements attached to all possible directions they could be taken in diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index df75acb6f..a735f0f7a 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -28,12 +28,11 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.FallingBlock; -import net.minecraft.util.Direction; - import java.util.Set; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.state.BlockState; public class MovementAscend extends Movement { @@ -78,9 +77,9 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } boolean foundPlaceOption = false; for (int i = 0; i < 5; i++) { - int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getXOffset(); - int againstY = y + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getYOffset(); - int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getZOffset(); + int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepX(); + int againstY = y + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepY(); + int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepZ(); if (againstX == x && againstZ == z) { // we might be able to backplace now, but it doesn't matter because it will have been broken by the time we'd need to use it continue; } @@ -168,7 +167,7 @@ public MovementState updateState(MovementState state) { return state; } - if (ctx.playerFeet().equals(dest) || ctx.playerFeet().equals(dest.add(getDirection().down()))) { + if (ctx.playerFeet().equals(dest) || ctx.playerFeet().equals(dest.add(getDirection().below()))) { return state.setStatus(MovementStatus.SUCCESS); } @@ -225,7 +224,7 @@ public MovementState updateState(MovementState state) { public boolean headBonkClear() { BetterBlockPos startUp = src.up(2); for (int i = 0; i < 4; i++) { - BetterBlockPos check = startUp.offset(Direction.byHorizontalIndex(i)); + BetterBlockPos check = startUp.offset(Direction.from2DDataValue(i)); if (!MovementHelper.canWalkThrough(ctx, check)) { // We might bonk our head return false; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 67bb091f2..a4639cdab 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -30,15 +30,14 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.FallingBlock; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; - import java.util.Set; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; public class MovementDescend extends Movement { @@ -222,11 +221,11 @@ public MovementState updateState(MovementState state) { if (safeMode()) { double destX = (src.getX() + 0.5) * 0.17 + (dest.getX() + 0.5) * 0.83; double destZ = (src.getZ() + 0.5) * 0.17 + (dest.getZ() + 0.5) * 0.83; - ClientPlayerEntity player = ctx.player(); + LocalPlayer player = ctx.player(); state.setTarget(new MovementState.MovementTarget( new Rotation(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), - new Vector3d(destX, dest.getY(), destZ), - new Rotation(player.rotationYaw, player.rotationPitch)).getYaw(), player.rotationPitch), + new Vec3(destX, dest.getY(), destZ), + new Rotation(player.yRot, player.xRot)).getYaw(), player.xRot), false )).setInput(Input.MOVE_FORWARD, true); return state; @@ -256,7 +255,7 @@ public boolean safeMode() { return true; } for (int y = 0; y <= 2; y++) { // we could hit any of the three blocks - if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, into.up(y)))) { + if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, into.above(y)))) { return true; } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 9ec5bd570..f5947c639 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -29,16 +29,15 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; - import java.util.ArrayList; import java.util.List; import java.util.Set; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; public class MovementDiagonal extends Movement { @@ -61,11 +60,11 @@ private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPo protected boolean safeToCancel(MovementState state) { //too simple. backfill does not work after cornering with this //return MovementHelper.canWalkOn(ctx, ctx.playerFeet().down()); - ClientPlayerEntity player = ctx.player(); + LocalPlayer player = ctx.player(); double offset = 0.25; - double x = player.getPositionVec().x; - double y = player.getPositionVec().y - 1; - double z = player.getPositionVec().z; + double x = player.position().x; + double y = player.position().y - 1; + double z = player.position().z; //standard if (ctx.playerFeet().equals(src)) { return true; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 44afbb763..7e32cd4f2 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -25,11 +25,10 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; - import java.util.Set; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; public class MovementDownward extends Movement { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 9d36c4b5a..ed230dc6c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -30,23 +30,22 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.pathing.MutableMoveResult; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.LadderBlock; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.fluid.WaterFluid; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector3i; -import net.minecraft.world.World; - import java.util.HashSet; import java.util.Optional; import java.util.Set; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.WaterFluid; +import net.minecraft.world.phys.Vec3; public class MovementFall extends Movement { @@ -95,9 +94,9 @@ public MovementState updateState(MovementState state) { Rotation targetRotation = null; BlockState destState = ctx.world().getBlockState(dest); Block destBlock = destState.getBlock(); - boolean isWater = destState.getFluidState().getFluid() instanceof WaterFluid; + boolean isWater = destState.getFluidState().getType() instanceof WaterFluid; if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { - if (!PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().getDimensionKey() == World.THE_NETHER) { + if (!Inventory.isHotbarSlot(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().getDimensionKey() == Level.NETHER) { return state.setStatus(MovementStatus.UNREACHABLE); } @@ -118,7 +117,7 @@ public MovementState updateState(MovementState state) { } if (playerFeet.equals(dest) && (ctx.player().getPositionVec().y - playerFeet.getY() < 0.094 || isWater)) { // 0.094 because lilypads if (isWater) { // only match water, not flowing water (which we cannot pick up with a bucket) - if (PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY))) { + if (Inventory.isHotbarSlot(ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY))) { ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY); if (ctx.player().getMotion().y >= 0) { return state.setInput(Input.CLICK_RIGHT, true); @@ -134,14 +133,14 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.SUCCESS); } } - Vector3d destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) + Vec3 destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) if (Math.abs(ctx.player().getPositionVec().x + ctx.player().getMotion().x - destCenter.x) > 0.1 || Math.abs(ctx.player().getPositionVec().z + ctx.player().getMotion().z - destCenter.z) > 0.1) { if (!ctx.player().isOnGround() && Math.abs(ctx.player().getMotion().y) > 0.4) { state.setInput(Input.SNEAK, true); } state.setInput(Input.MOVE_FORWARD, true); } - Vector3i avoid = Optional.ofNullable(avoid()).map(Direction::getDirectionVec).orElse(null); + Vec3i avoid = Optional.ofNullable(avoid()).map(Direction::getNormal).orElse(null); if (avoid == null) { avoid = src.subtract(dest); } else { @@ -153,7 +152,7 @@ public MovementState updateState(MovementState state) { } } if (targetRotation == null) { - Vector3d destCenterOffset = new Vector3d(destCenter.x + 0.125 * avoid.getX(), destCenter.y, destCenter.z + 0.125 * avoid.getZ()); + Vec3 destCenterOffset = new Vec3(destCenter.x + 0.125 * avoid.getX(), destCenter.y, destCenter.z + 0.125 * avoid.getZ()); state.setTarget(new MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), destCenterOffset, ctx.playerRotations()), false)); } return state; @@ -163,7 +162,7 @@ private Direction avoid() { for (int i = 0; i < 15; i++) { BlockState state = ctx.world().getBlockState(ctx.playerFeet().down(i)); if (state.getBlock() == Blocks.LADDER) { - return state.get(LadderBlock.FACING); + return state.getValue(LadderBlock.FACING); } } return null; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index a2afb1996..845e96b22 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -27,16 +27,15 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.StairsBlock; -import net.minecraft.fluid.Fluids; -import net.minecraft.fluid.WaterFluid; -import net.minecraft.util.Direction; - import java.util.HashSet; import java.util.Set; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.StairBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.WaterFluid; public class MovementParkour extends Movement { @@ -68,8 +67,8 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi return; } - int xDiff = dir.getXOffset(); - int zDiff = dir.getZOffset(); + int xDiff = dir.getStepX(); + int zDiff = dir.getStepZ(); if (!MovementHelper.fullyPassable(context, x + xDiff, y, z + zDiff)) { // most common case at the top -- the adjacent block isn't air return; @@ -79,7 +78,7 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi // second most common case -- we could just traverse not parkour return; } - if (MovementHelper.avoidWalkingInto(adj) && !(adj.getFluidState().getFluid() instanceof WaterFluid)) { // magma sucks + if (MovementHelper.avoidWalkingInto(adj) && !(adj.getFluidState().getType() instanceof WaterFluid)) { // magma sucks return; } if (!MovementHelper.fullyPassable(context, x + xDiff, y + 1, z + zDiff)) { @@ -92,7 +91,7 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi return; } BlockState standingOn = context.get(x, y - 1, z); - if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof StairsBlock || MovementHelper.isBottomSlab(standingOn) || standingOn.getFluidState().getFluid() != Fluids.EMPTY) { + if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof StairBlock || MovementHelper.isBottomSlab(standingOn) || standingOn.getFluidState().getType() != Fluids.EMPTY) { return; } int maxJump; @@ -115,7 +114,7 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi return; } BlockState destInto = context.bsi.get0(destX, y, destZ); - if (!MovementHelper.fullyPassable(context.bsi.access, context.bsi.isPassableBlockPos.setPos(destX, y, destZ), destInto)) { + if (!MovementHelper.fullyPassable(context.bsi.access, context.bsi.isPassableBlockPos.set(destX, y, destZ), destInto)) { if (i <= 3 && context.allowParkourAscend && context.canSprint && MovementHelper.canWalkOn(context.bsi, destX, y, destZ, destInto) && checkOvershootSafety(context.bsi, destX + xDiff, y + 1, destZ + zDiff)) { res.x = destX; res.y = y + 1; @@ -160,9 +159,9 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi return; } for (int i = 0; i < 5; i++) { - int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getXOffset(); - int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getYOffset(); - int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getZOffset(); + int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepX(); + int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepY(); + int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepZ(); if (againstX == x + xDiff * 3 && againstZ == z + zDiff * 3) { // we can't turn around that fast continue; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index b5d7daec0..e84f851d8 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -32,10 +32,17 @@ import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; import net.minecraft.block.*; -import net.minecraft.state.properties.SlabType; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; - +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.SlabType; +import net.minecraft.world.phys.Vec3; import java.util.Set; public class MovementPillar extends Movement { @@ -63,7 +70,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (fromDown.getBlock() == Blocks.LADDER || fromDown.getBlock() == Blocks.VINE) { return COST_INF; // can't pillar from a ladder or vine onto something that isn't also climbable } - if (fromDown.getBlock() instanceof SlabBlock && fromDown.get(SlabBlock.TYPE) == SlabType.BOTTOM) { + if (fromDown.getBlock() instanceof SlabBlock && fromDown.getValue(SlabBlock.TYPE) == SlabType.BOTTOM) { return COST_INF; // can't pillar up from a bottom slab onto a non ladder } } @@ -171,7 +178,7 @@ public MovementState updateState(MovementState state) { if (MovementHelper.isWater(fromDown) && MovementHelper.isWater(ctx, dest)) { // stay centered while swimming up a water column state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()), false)); - Vector3d destCenter = VecUtils.getBlockPosCenter(dest); + Vec3 destCenter = VecUtils.getBlockPosCenter(dest); if (Math.abs(ctx.player().getPositionVec().x - destCenter.x) > 0.2 || Math.abs(ctx.player().getPositionVec().z - destCenter.z) > 0.2) { state.setInput(Input.MOVE_FORWARD, true); } @@ -191,13 +198,13 @@ public MovementState updateState(MovementState state) { boolean blockIsThere = MovementHelper.canWalkOn(ctx, src) || ladder; if (ladder) { - BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.offset(fromDown.get(LadderBlock.FACING).getOpposite()); + BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.offset(fromDown.getValue(LadderBlock.FACING).getOpposite()); if (against == null) { logDirect("Unable to climb vines. Consider disabling allowVines."); return state.setStatus(MovementStatus.UNREACHABLE); } - if (ctx.playerFeet().equals(against.up()) || ctx.playerFeet().equals(dest)) { + if (ctx.playerFeet().equals(against.above()) || ctx.playerFeet().equals(dest)) { return state.setStatus(MovementStatus.SUCCESS); } if (MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.down()))) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 73649a445..e79b8ba5e 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -32,11 +32,18 @@ import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; import net.minecraft.block.*; -import net.minecraft.fluid.WaterFluid; -import net.minecraft.state.properties.SlabType; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; - +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DoorBlock; +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.SlabType; +import net.minecraft.world.level.material.WaterFluid; +import net.minecraft.world.phys.Vec3; import java.util.Optional; import java.util.Set; @@ -129,9 +136,9 @@ public static double cost(CalculationContext context, int x, int y, int z, int d double hardness2 = MovementHelper.getMiningDurationTicks(context, destX, y + 1, destZ, pb0, true); // only include falling on the upper block to break double WC = throughWater ? context.waterWalkSpeed : WALK_ONE_BLOCK_COST; for (int i = 0; i < 5; i++) { - int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getXOffset(); - int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getYOffset(); - int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getZOffset(); + int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepX(); + int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepY(); + int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepZ(); if (againstX == x && againstZ == z) { // this would be a backplace continue; } @@ -140,10 +147,10 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } // now that we've checked all possible directions to side place, we actually need to backplace - if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof SlabBlock && down.get(SlabBlock.TYPE) != SlabType.DOUBLE)) { + if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof SlabBlock && down.getValue(SlabBlock.TYPE) != SlabType.DOUBLE)) { return COST_INF; // can't sneak and backplace against soul sand or half slabs (regardless of whether it's top half or bottom half) =/ } - if (down.getFluidState().getFluid() instanceof WaterFluid) { + if (down.getFluidState().getType() instanceof WaterFluid) { return COST_INF; // this is obviously impossible } WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol @@ -252,7 +259,7 @@ public MovementState updateState(MovementState state) { } BlockPos into = dest.subtract(src).add(dest); BlockState intoBelow = BlockStateInterface.get(ctx, into); - BlockState intoAbove = BlockStateInterface.get(ctx, into.up()); + BlockState intoAbove = BlockStateInterface.get(ctx, into.above()); if (wasTheBridgeBlockAlwaysThere && (!MovementHelper.isLiquid(ctx, feet) || Baritone.settings().sprintInWater.value) && (!MovementHelper.avoidWalkingInto(intoBelow) || MovementHelper.isWater(intoBelow)) && !MovementHelper.avoidWalkingInto(intoAbove)) { state.setInput(Input.SPRINT, true); } @@ -260,7 +267,7 @@ public MovementState updateState(MovementState state) { BlockState destDown = BlockStateInterface.get(ctx, dest.down()); BlockPos against = positionsToBreak[0]; if (feet.getY() != dest.getY() && ladder && (destDown.getBlock() == Blocks.VINE || destDown.getBlock() == Blocks.LADDER)) { - against = destDown.getBlock() == Blocks.VINE ? MovementPillar.getAgainst(new CalculationContext(baritone), dest.down()) : dest.offset(destDown.get(LadderBlock.FACING).getOpposite()); + against = destDown.getBlock() == Blocks.VINE ? MovementPillar.getAgainst(new CalculationContext(baritone), dest.down()) : dest.offset(destDown.getValue(LadderBlock.FACING).getOpposite()); if (against == null) { logDirect("Unable to climb vines. Consider disabling allowVines."); return state.setStatus(MovementStatus.UNREACHABLE); @@ -270,7 +277,7 @@ public MovementState updateState(MovementState state) { return state; } else { wasTheBridgeBlockAlwaysThere = false; - Block standingOn = BlockStateInterface.get(ctx, feet.down()).getBlock(); + Block standingOn = BlockStateInterface.get(ctx, feet.below()).getBlock(); if (standingOn.equals(Blocks.SOUL_SAND) || standingOn instanceof SlabBlock) { // see issue #118 double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().getPositionVec().x), Math.abs(dest.getZ() + 0.5 - ctx.player().getPositionVec().z)); if (dist < 0.85) { // 0.5 + 0.3 + epsilon @@ -317,7 +324,7 @@ public MovementState updateState(MovementState state) { // faceX, faceY, faceZ is the middle of the face between from and to BlockPos goalLook = src.down(); // this is the block we were just standing on, and the one we want to place against - Rotation backToFace = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vector3d(faceX, faceY, faceZ), ctx.playerRotations()); + Rotation backToFace = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3(faceX, faceY, faceZ), ctx.playerRotations()); float pitch = backToFace.getPitch(); double dist2 = Math.max(Math.abs(ctx.player().getPositionVec().x - faceX), Math.abs(ctx.player().getPositionVec().z - faceZ)); if (dist2 < 0.29) { // see issue #208 diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 4d524870b..524163a45 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -32,15 +32,16 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.movements.*; import baritone.utils.BlockStateInterface; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; import net.minecraft.util.Tuple; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector3i; - +import net.minecraft.world.phys.Vec3; import java.util.*; import static baritone.api.pathing.movement.MovementStatus.*; +import IPlayerContext; + /** * Behavior to execute a precomputed path * @@ -423,7 +424,7 @@ private boolean shouldSprintNextTick() { } } if (current instanceof MovementFall) { - Tuple data = overrideFall((MovementFall) current); + Tuple data = overrideFall((MovementFall) current); if (data != null) { BetterBlockPos fallDest = new BetterBlockPos(data.getB()); if (!path.positions().contains(fallDest)) { @@ -444,15 +445,15 @@ private boolean shouldSprintNextTick() { return false; } - private Tuple overrideFall(MovementFall movement) { - Vector3i dir = movement.getDirection(); + private Tuple overrideFall(MovementFall movement) { + Vec3i dir = movement.getDirection(); if (dir.getY() < -3) { return null; } if (!movement.toBreakCached.isEmpty()) { return null; // it's breaking } - Vector3i flatDir = new Vector3i(dir.getX(), 0, dir.getZ()); + Vec3i flatDir = new Vec3i(dir.getX(), 0, dir.getZ()); int i; outer: for (i = pathPosition + 1; i < path.length() - 1 && i < pathPosition + 3; i++) { @@ -479,7 +480,7 @@ private Tuple overrideFall(MovementFall movement) { } double len = i - pathPosition - 0.4; return new Tuple<>( - new Vector3d(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), + new Vec3(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), movement.getDest().add(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); } @@ -502,7 +503,7 @@ private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse cur if (!Baritone.settings().sprintAscends.value) { return false; } - if (!current.getDirection().equals(next.getDirection().down())) { + if (!current.getDirection().equals(next.getDirection().below())) { return false; } if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { @@ -521,7 +522,7 @@ private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse cur for (int y = 0; y < 3; y++) { BlockPos chk = current.getSrc().up(y); if (x == 1) { - chk = chk.add(current.getDirection()); + chk = chk.offset(current.getDirection()); } if (!MovementHelper.fullyPassable(ctx, chk)) { return false; diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java index 490dc8745..5d245c2eb 100644 --- a/src/main/java/baritone/process/BackfillProcess.java +++ b/src/main/java/baritone/process/BackfillProcess.java @@ -26,13 +26,12 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.path.PathExecutor; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.chunk.EmptyChunk; - import java.util.*; import java.util.stream.Collectors; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.EmptyLevelChunk; public final class BackfillProcess extends BaritoneProcessHelper { @@ -57,7 +56,7 @@ public boolean isActive() { } amIBreakingABlockHMMMMMMM(); for (BlockPos pos : new ArrayList<>(blocksToReplace.keySet())) { - if (ctx.world().getChunk(pos) instanceof EmptyChunk) { + if (ctx.world().getChunk(pos) instanceof EmptyLevelChunk) { blocksToReplace.remove(pos); } } @@ -103,7 +102,7 @@ public List toFillIn() { .keySet() .stream() .filter(pos -> ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) - .filter(pos -> baritone.getBuilderProcess().placementPlausible(pos, Blocks.DIRT.getDefaultState())) + .filter(pos -> baritone.getBuilderProcess().placementPlausible(pos, Blocks.DIRT.defaultBlockState())) .filter(pos -> !partOfCurrentMovement(pos)) .sorted(Comparator.comparingDouble(ctx.playerFeet()::distanceSq).reversed()) .collect(Collectors.toList()); diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 8d7088016..98e6db93f 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -45,25 +45,24 @@ import baritone.utils.schematic.SchematicSystem; import baritone.utils.schematic.schematica.SchematicaHelper; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import net.minecraft.block.AirBlock; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.FlowingFluidBlock; -import net.minecraft.item.BlockItem; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUseContext; -import net.minecraft.util.Direction; -import net.minecraft.util.Hand; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; import net.minecraft.util.Tuple; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector3i; - +import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; import java.io.File; import java.io.FileInputStream; import java.util.*; @@ -78,7 +77,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private String name; private ISchematic realSchematic; private ISchematic schematic; - private Vector3i origin; + private Vec3i origin; private int ticks; private boolean paused; private int layer; @@ -90,7 +89,7 @@ public BuilderProcess(Baritone baritone) { } @Override - public void build(String name, ISchematic schematic, Vector3i origin) { + public void build(String name, ISchematic schematic, Vec3i origin) { this.name = name; this.schematic = schematic; this.realSchematic = null; @@ -106,7 +105,7 @@ public void build(String name, ISchematic schematic, Vector3i origin) { if (Baritone.settings().schematicOrientationZ.value) { z += schematic.lengthZ(); } - this.origin = new Vector3i(x, y, z); + this.origin = new Vec3i(x, y, z); this.paused = false; this.layer = Baritone.settings().startAtLayer.value; this.numRepeats = 0; @@ -127,7 +126,7 @@ public boolean isPaused() { } @Override - public boolean build(String name, File schematic, Vector3i origin) { + public boolean build(String name, File schematic, Vec3i origin) { Optional format = SchematicSystem.INSTANCE.getByFile(schematic); if (!format.isPresent()) { return false; @@ -173,7 +172,7 @@ public void clearArea(BlockPos corner1, BlockPos corner2) { int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; int heightY = Math.abs(corner1.getY() - corner2.getY()) + 1; int lengthZ = Math.abs(corner1.getZ() - corner2.getZ()) + 1; - build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.getDefaultState()), origin); + build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.defaultBlockState()), origin); } @Override @@ -276,7 +275,7 @@ private Optional searchForPlacables(BuilderCalculationContext bcc, Li public boolean placementPlausible(BlockPos pos, BlockState state) { VoxelShape voxelshape = state.getCollisionShape(ctx.world(), pos); - return voxelshape.isEmpty() || ctx.world().checkNoEntityCollision(null, voxelshape.withOffset(pos.getX(), pos.getY(), pos.getZ())); + return voxelshape.isEmpty() || ctx.world().checkNoEntityCollision(null, voxelshape.move(pos.getX(), pos.getY(), pos.getZ())); } private Optional possibleToPlace(BlockState toPlace, int x, int y, int z, BlockStateInterface bsi) { @@ -286,20 +285,20 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in if (MovementHelper.isReplaceable(placeAgainstPos.x, placeAgainstPos.y, placeAgainstPos.z, placeAgainstState, bsi)) { continue; } - if (!toPlace.isValidPosition(ctx.world(), new BetterBlockPos(x, y, z))) { + if (!toPlace.canSurvive(ctx.world(), new BetterBlockPos(x, y, z))) { continue; } if (!placementPlausible(new BetterBlockPos(x, y, z), toPlace)) { continue; } - AxisAlignedBB aabb = placeAgainstState.getShape(ctx.world(), placeAgainstPos).getBoundingBox(); - for (Vector3d placementMultiplier : aabbSideMultipliers(against)) { + AABB aabb = placeAgainstState.getShape(ctx.world(), placeAgainstPos).getBoundingBox(); + for (Vec3 placementMultiplier : aabbSideMultipliers(against)) { double placeX = placeAgainstPos.x + aabb.minX * placementMultiplier.x + aabb.maxX * (1 - placementMultiplier.x); double placeY = placeAgainstPos.y + aabb.minY * placementMultiplier.y + aabb.maxY * (1 - placementMultiplier.y); double placeZ = placeAgainstPos.z + aabb.minZ * placementMultiplier.z + aabb.maxZ * (1 - placementMultiplier.z); - Rotation rot = RotationUtils.calcRotationFromVec3d(RayTraceUtils.inferSneakingEyePosition(ctx.player()), new Vector3d(placeX, placeY, placeZ), ctx.playerRotations()); - RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot, ctx.playerController().getBlockReachDistance(), true); - if (result != null && result.getType() == RayTraceResult.Type.BLOCK && ((BlockRayTraceResult) result).getPos().equals(placeAgainstPos) && ((BlockRayTraceResult) result).getFace() == against.getOpposite()) { + Rotation rot = RotationUtils.calcRotationFromVec3d(RayTraceUtils.inferSneakingEyePosition(ctx.player()), new Vec3(placeX, placeY, placeZ), ctx.playerRotations()); + HitResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot, ctx.playerController().getBlockReachDistance(), true); + if (result != null && result.getType() == HitResult.Type.BLOCK && ((BlockHitResult) result).getBlockPos().equals(placeAgainstPos) && ((BlockHitResult) result).getDirection() == against.getOpposite()) { OptionalInt hotbar = hasAnyItemThatWouldPlace(toPlace, result, rot); if (hotbar.isPresent()) { return Optional.of(new Placement(hotbar.getAsInt(), placeAgainstPos, against.getOpposite(), rot)); @@ -310,7 +309,7 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in return Optional.empty(); } - private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, RayTraceResult result, Rotation rot) { + private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { for (int i = 0; i < 9; i++) { ItemStack stack = ctx.player().inventory.mainInventory.get(i); if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { @@ -321,12 +320,12 @@ private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, RayTraceResult // the state depends on the facing of the player sometimes ctx.player().rotationYaw = rot.getYaw(); ctx.player().rotationPitch = rot.getPitch(); - BlockItemUseContext meme = new BlockItemUseContext(new ItemUseContext( + BlockPlaceContext meme = new BlockPlaceContext(new UseOnContext( ctx.world(), ctx.player(), - Hand.MAIN_HAND, + InteractionHand.MAIN_HAND, stack, - (BlockRayTraceResult) result + (BlockHitResult) result ) {}); // that {} gives us access to a protected constructor lmfao BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); ctx.player().rotationYaw = originalYaw; @@ -344,19 +343,19 @@ private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, RayTraceResult return OptionalInt.empty(); } - private static Vector3d[] aabbSideMultipliers(Direction side) { + private static Vec3[] aabbSideMultipliers(Direction side) { switch (side) { case UP: - return new Vector3d[]{new Vector3d(0.5, 1, 0.5), new Vector3d(0.1, 1, 0.5), new Vector3d(0.9, 1, 0.5), new Vector3d(0.5, 1, 0.1), new Vector3d(0.5, 1, 0.9)}; + return new Vec3[]{new Vec3(0.5, 1, 0.5), new Vec3(0.1, 1, 0.5), new Vec3(0.9, 1, 0.5), new Vec3(0.5, 1, 0.1), new Vec3(0.5, 1, 0.9)}; case DOWN: - return new Vector3d[]{new Vector3d(0.5, 0, 0.5), new Vector3d(0.1, 0, 0.5), new Vector3d(0.9, 0, 0.5), new Vector3d(0.5, 0, 0.1), new Vector3d(0.5, 0, 0.9)}; + return new Vec3[]{new Vec3(0.5, 0, 0.5), new Vec3(0.1, 0, 0.5), new Vec3(0.9, 0, 0.5), new Vec3(0.5, 0, 0.1), new Vec3(0.5, 0, 0.9)}; case NORTH: case SOUTH: case EAST: case WEST: - double x = side.getXOffset() == 0 ? 0.5 : (1 + side.getXOffset()) / 2D; - double z = side.getZOffset() == 0 ? 0.5 : (1 + side.getZOffset()) / 2D; - return new Vector3d[]{new Vector3d(x, 0.25, z), new Vector3d(x, 0.75, z)}; + double x = side.getStepX() == 0 ? 0.5 : (1 + side.getStepX()) / 2D; + double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D; + return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)}; default: // null throw new IllegalStateException(); } @@ -424,10 +423,10 @@ public int lengthZ() { layer++; return onTick(calcFailed, isSafeToCancel); } - Vector3i repeat = Baritone.settings().buildRepeat.value; + Vec3i repeat = Baritone.settings().buildRepeat.value; int max = Baritone.settings().buildRepeatCount.value; numRepeats++; - if (repeat.equals(new Vector3i(0, 0, 0)) || (max != -1 && numRepeats >= max)) { + if (repeat.equals(new Vec3i(0, 0, 0)) || (max != -1 && numRepeats >= max)) { logDirect("Done building"); if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnBuildFinished.value) { NotificationHelper.notify("Done building", false); @@ -437,7 +436,7 @@ public int lengthZ() { } // build repeat time layer = 0; - origin = new BlockPos(origin).add(repeat); + origin = new BlockPos(origin).offset(repeat); logDirect("Repeating build in vector " + repeat + ", new origin is " + origin); return onTick(calcFailed, isSafeToCancel); } @@ -471,7 +470,7 @@ public int lengthZ() { baritone.getLookBehavior().updateTarget(rot, true); ctx.player().inventory.currentItem = toPlace.get().hotbarSelection; baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); - if ((ctx.isLookingAt(toPlace.get().placeAgainst) && ((BlockRayTraceResult) ctx.objectMouseOver()).getFace().equals(toPlace.get().side)) || ctx.playerRotations().isReallyCloseTo(rot)) { + if ((ctx.isLookingAt(toPlace.get().placeAgainst) && ((BlockHitResult) ctx.objectMouseOver()).getDirection().equals(toPlace.get().side)) || ctx.playerRotations().isReallyCloseTo(rot)) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); } return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); @@ -720,20 +719,20 @@ private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? return new GoalPlace(pos); } - boolean allowSameLevel = !(ctx.world().getBlockState(pos.up()).getBlock() instanceof AirBlock); + boolean allowSameLevel = !(ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock); BlockState current = ctx.world().getBlockState(pos); for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { //noinspection ConstantConditions - if (MovementHelper.canPlaceAgainst(ctx, pos.offset(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { - return new GoalAdjacent(pos, pos.offset(facing), allowSameLevel); + if (MovementHelper.canPlaceAgainst(ctx, pos.relative(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { + return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); } } return new GoalPlace(pos); } private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.up()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.up(2)).getBlock() instanceof AirBlock) { // TODO maybe possible without the up(2) check? - return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.up()) { + if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.above()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.above(2)).getBlock() instanceof AirBlock) { // TODO maybe possible without the up(2) check? + return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.above()) { @Override public boolean isInGoal(int x, int y, int z) { if (y > this.y || (x == this.x && y == this.y && z == this.z)) { @@ -782,7 +781,7 @@ public double heuristic(int x, int y, int z) { public static class GoalPlace extends GoalBlock { public GoalPlace(BlockPos placeAt) { - super(placeAt.up()); + super(placeAt.above()); } public double heuristic(int x, int y, int z) { @@ -813,11 +812,11 @@ private List approxPlaceable(int size) { for (int i = 0; i < size; i++) { ItemStack stack = ctx.player().inventory.mainInventory.get(i); if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { - result.add(Blocks.AIR.getDefaultState()); + result.add(Blocks.AIR.defaultBlockState()); continue; } // - result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vector3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))); + result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))); // } return result; @@ -827,7 +826,7 @@ private boolean valid(BlockState current, BlockState desired, boolean itemVerify if (desired == null) { return true; } - if (current.getBlock() instanceof FlowingFluidBlock && Baritone.settings().okIfWater.value) { + if (current.getBlock() instanceof LiquidBlock && Baritone.settings().okIfWater.value) { return true; } if (current.getBlock() instanceof AirBlock && desired.getBlock() instanceof AirBlock) { diff --git a/src/main/java/baritone/process/ExploreProcess.java b/src/main/java/baritone/process/ExploreProcess.java index c42ece0e5..f86f5ed48 100644 --- a/src/main/java/baritone/process/ExploreProcess.java +++ b/src/main/java/baritone/process/ExploreProcess.java @@ -33,14 +33,13 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; - import java.io.InputStreamReader; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; public final class ExploreProcess extends BaritoneProcessHelper implements IExploreProcess { diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 3b1f8f28a..243e29cc6 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -33,18 +33,26 @@ import baritone.utils.BaritoneProcessHelper; import baritone.utils.NotificationHelper; import net.minecraft.block.*; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.ItemEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.world.World; - +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.CactusBlock; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.NetherWartBlock; +import net.minecraft.world.level.block.SugarCaneBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -109,27 +117,27 @@ public void farm(int range, BlockPos pos) { } private enum Harvest { - WHEAT((CropsBlock) Blocks.WHEAT), - CARROTS((CropsBlock) Blocks.CARROTS), - POTATOES((CropsBlock) Blocks.POTATOES), - BEETROOT((CropsBlock) Blocks.BEETROOTS), + WHEAT((CropBlock) Blocks.WHEAT), + CARROTS((CropBlock) Blocks.CARROTS), + POTATOES((CropBlock) Blocks.POTATOES), + BEETROOT((CropBlock) Blocks.BEETROOTS), PUMPKIN(Blocks.PUMPKIN, state -> true), MELON(Blocks.MELON, state -> true), - NETHERWART(Blocks.NETHER_WART, state -> state.get(NetherWartBlock.AGE) >= 3), + NETHERWART(Blocks.NETHER_WART, state -> state.getValue(NetherWartBlock.AGE) >= 3), SUGARCANE(Blocks.SUGAR_CANE, null) { @Override - public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { + public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { if (Baritone.settings().replantCrops.value) { - return world.getBlockState(pos.down()).getBlock() instanceof SugarCaneBlock; + return world.getBlockState(pos.below()).getBlock() instanceof SugarCaneBlock; } return true; } }, CACTUS(Blocks.CACTUS, null) { @Override - public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { + public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { if (Baritone.settings().replantCrops.value) { - return world.getBlockState(pos.down()).getBlock() instanceof CactusBlock; + return world.getBlockState(pos.below()).getBlock() instanceof CactusBlock; } return true; } @@ -137,7 +145,7 @@ public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { public final Block block; public final Predicate readyToHarvest; - Harvest(CropsBlock blockCrops) { + Harvest(CropBlock blockCrops) { this(blockCrops, blockCrops::isMaxAge); // max age is 7 for wheat, carrots, and potatoes, but 3 for beetroot } @@ -147,12 +155,12 @@ public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { this.readyToHarvest = readyToHarvest; } - public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { + public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { return readyToHarvest.test(state); } } - private boolean readyForHarvest(World world, BlockPos pos, BlockState state) { + private boolean readyForHarvest(Level world, BlockPos pos, BlockState state) { for (Harvest harvest : Harvest.values()) { if (harvest.block == state.getBlock()) { return harvest.readyToHarvest(world, pos, state); @@ -198,12 +206,12 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { List openSoulsand = new ArrayList<>(); for (BlockPos pos : locations) { //check if the target block is out of range. - if (range != 0 && pos.distanceSq(center) > range * range) { + if (range != 0 && pos.distSqr(center) > range * range) { continue; } BlockState state = ctx.world().getBlockState(pos); - boolean airAbove = ctx.world().getBlockState(pos.up()).getBlock() instanceof AirBlock; + boolean airAbove = ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock; if (state.getBlock() == Blocks.FARMLAND) { if (airAbove) { openFarmland.add(pos); @@ -220,9 +228,9 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { toBreak.add(pos); continue; } - if (state.getBlock() instanceof IGrowable) { - IGrowable ig = (IGrowable) state.getBlock(); - if (ig.canGrow(ctx.world(), pos, state, true) && ig.canUseBonemeal(ctx.world(), ctx.world().rand, pos, state)) { + if (state.getBlock() instanceof BonemealableBlock) { + BonemealableBlock ig = (BonemealableBlock) state.getBlock(); + if (ig.isValidBonemealTarget(ctx.world(), pos, state, true) && ig.isBonemealSuccess(ctx.world(), ctx.world().rand, pos, state)) { bonemealable.add(pos); } } @@ -244,10 +252,10 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { both.addAll(openSoulsand); for (BlockPos pos : both) { boolean soulsand = openSoulsand.contains(pos); - Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, new Vector3d(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); + Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, new Vec3(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, soulsand ? this::isNetherWart : this::isPlantable)) { - RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); - if (result instanceof BlockRayTraceResult && ((BlockRayTraceResult) result).getFace() == Direction.UP) { + HitResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); + if (result instanceof BlockHitResult && ((BlockHitResult) result).getDirection() == Direction.UP) { baritone.getLookBehavior().updateTarget(rot.get(), true); if (ctx.isLookingAt(pos)) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); @@ -282,12 +290,12 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (baritone.getInventoryBehavior().throwaway(false, this::isPlantable)) { for (BlockPos pos : openFarmland) { - goalz.add(new GoalBlock(pos.up())); + goalz.add(new GoalBlock(pos.above())); } } if (baritone.getInventoryBehavior().throwaway(false, this::isNetherWart)) { for (BlockPos pos : openSoulsand) { - goalz.add(new GoalBlock(pos.up())); + goalz.add(new GoalBlock(pos.above())); } } if (baritone.getInventoryBehavior().throwaway(false, this::isBoneMeal)) { @@ -300,7 +308,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol - goalz.add(new GoalBlock(new BlockPos(entity.getPositionVec().x, entity.getPositionVec().y + 0.1, entity.getPositionVec().z))); + goalz.add(new GoalBlock(new BlockPos(entity.position().x, entity.position().y + 0.1, entity.position().z))); } } } diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 85a273e75..085b17ae5 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -26,12 +26,11 @@ import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; - import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; /** * Follow an entity @@ -57,10 +56,10 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { private Goal towards(Entity following) { BlockPos pos; if (Baritone.settings().followOffsetDistance.value == 0) { - pos = following.getPosition(); + pos = following.blockPosition(); } else { - GoalXZ g = GoalXZ.fromDirection(following.getPositionVec(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); - pos = new BlockPos(g.getX(), following.getPositionVec().y, g.getZ()); + GoalXZ g = GoalXZ.fromDirection(following.position(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); + pos = new BlockPos(g.getX(), following.position().y, g.getZ()); } return new GoalNear(pos, Baritone.settings().followRadius.value); } diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 444b7f9d0..21bbaf4e0 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -17,6 +17,7 @@ package baritone.process; +import Goal; import baritone.Baritone; import baritone.api.pathing.goals.*; import baritone.api.process.IGetToBlockProcess; @@ -30,12 +31,11 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.inventory.container.PlayerContainer; -import net.minecraft.util.math.BlockPos; - import java.util.*; +import net.minecraft.core.BlockPos; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; public final class GetToBlockProcess extends BaritoneProcessHelper implements IGetToBlockProcess { @@ -183,8 +183,8 @@ private Goal createGoal(BlockPos pos) { if (walkIntoInsteadOfAdjacent(gettingTo.getBlock())) { return new GoalTwoBlocks(pos); } - if (blockOnTopMustBeRemoved(gettingTo.getBlock()) && MovementHelper.isBlockNormalCube(baritone.bsi.get0(pos.up()))) { // TODO this should be the check for chest openability - return new GoalBlock(pos.up()); + if (blockOnTopMustBeRemoved(gettingTo.getBlock()) && MovementHelper.isBlockNormalCube(baritone.bsi.get0(pos.above()))) { // TODO this should be the check for chest openability + return new GoalBlock(pos.above()); } return new GoalGetToBlock(pos); } @@ -197,7 +197,7 @@ private boolean rightClick() { if (knownLocations.contains(ctx.getSelectedBlock().orElse(null))) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); // TODO find some way to right click even if we're in an ESC menu System.out.println(ctx.player().openContainer); - if (!(ctx.player().openContainer instanceof PlayerContainer)) { + if (!(ctx.player().openContainer instanceof InventoryMenu)) { return true; } } diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 0772452f7..2222ed134 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -32,17 +32,25 @@ import baritone.utils.BlockStateInterface; import baritone.utils.NotificationHelper; import net.minecraft.block.*; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.ItemEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; - +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.state.BlockState; import java.util.*; import java.util.stream.Collectors; import static baritone.api.pathing.movement.ActionCosts.COST_INF; +import BlockOptionalMetaLookup; +import Goal; +import GoalRunAway; + /** * Mine blocks of a certain type * @@ -248,7 +256,7 @@ private boolean internalMiningGoal(BlockPos pos, CalculationContext context, Lis } private Goal coalesce(BlockPos loc, List locs, CalculationContext context) { - boolean assumeVerticalShaftMine = !(baritone.bsi.get0(loc.up()).getBlock() instanceof FallingBlock); + boolean assumeVerticalShaftMine = !(baritone.bsi.get0(loc.above()).getBlock() instanceof FallingBlock); if (!Baritone.settings().forceInternalMining.value) { if (assumeVerticalShaftMine) { // we can get directly below the block @@ -258,9 +266,9 @@ private Goal coalesce(BlockPos loc, List locs, CalculationContext cont return new GoalTwoBlocks(loc); } } - boolean upwardGoal = internalMiningGoal(loc.up(), context, locs); - boolean downwardGoal = internalMiningGoal(loc.down(), context, locs); - boolean doubleDownwardGoal = internalMiningGoal(loc.down(2), context, locs); + boolean upwardGoal = internalMiningGoal(loc.above(), context, locs); + boolean downwardGoal = internalMiningGoal(loc.below(), context, locs); + boolean doubleDownwardGoal = internalMiningGoal(loc.below(2), context, locs); if (upwardGoal == downwardGoal) { // symmetric if (doubleDownwardGoal && assumeVerticalShaftMine) { // we have a checkerboard like pattern @@ -282,11 +290,11 @@ private Goal coalesce(BlockPos loc, List locs, CalculationContext cont if (doubleDownwardGoal && assumeVerticalShaftMine) { // this block and two below it are goals // path into the center of the one below, because that includes directly below this one - return new GoalTwoBlocks(loc.down()); + return new GoalTwoBlocks(loc.below()); } // upwardGoal false, downwardGoal true, doubleDownwardGoal false // just this block and the one immediately below, no others - return new GoalBlock(loc.down()); + return new GoalBlock(loc.below()); } private static class GoalThreeBlocks extends GoalTwoBlocks { @@ -314,11 +322,11 @@ public List droppedItemsScan() { return Collections.emptyList(); } List ret = new ArrayList<>(); - for (Entity entity : ((ClientWorld) ctx.world()).getAllEntities()) { + for (Entity entity : ((ClientLevel) ctx.world()).entitiesForRendering()) { if (entity instanceof ItemEntity) { ItemEntity ei = (ItemEntity) entity; if (filter.has(ei.getItem())) { - ret.add(entity.getPosition()); + ret.add(entity.blockPosition()); } } } @@ -378,7 +386,7 @@ private void addNearby() { // is an x-ray and it'll get caught if (filter.has(bsi.get0(x, y, z))) { BlockPos pos = new BlockPos(x, y, z); - if ((Baritone.settings().legitMineIncludeDiagonals.value && knownOreLocations.stream().anyMatch(ore -> ore.distanceSq(pos) <= 2 /* sq means this is pytha dist <= sqrt(2) */)) || RotationUtils.reachable(ctx.player(), pos, fakedBlockReachDistance).isPresent()) { + if ((Baritone.settings().legitMineIncludeDiagonals.value && knownOreLocations.stream().anyMatch(ore -> ore.distSqr(pos) <= 2 /* sq means this is pytha dist <= sqrt(2) */)) || RotationUtils.reachable(ctx.player(), pos, fakedBlockReachDistance).isPresent()) { knownOreLocations.add(pos); } } @@ -391,7 +399,7 @@ private void addNearby() { private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { dropped.removeIf(drop -> { for (BlockPos pos : locs2) { - if (pos.distanceSq(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) && MineProcess.plausibleToBreak(ctx, pos)) { // TODO maybe drop also has to be supported? no lava below? + if (pos.distSqr(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) && MineProcess.plausibleToBreak(ctx, pos)) { // TODO maybe drop also has to be supported? no lava below? return true; } } @@ -450,7 +458,7 @@ public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { } // bedrock above and below makes it implausible, otherwise we're good - return !(ctx.bsi.get0(pos.up()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.down()).getBlock() == Blocks.BEDROCK); + return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); } @Override diff --git a/src/main/java/baritone/selection/Selection.java b/src/main/java/baritone/selection/Selection.java index df8e06c11..730856943 100644 --- a/src/main/java/baritone/selection/Selection.java +++ b/src/main/java/baritone/selection/Selection.java @@ -2,9 +2,9 @@ import baritone.api.selection.ISelection; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.Direction; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.vector.Vector3i; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.world.phys.AABB; public class Selection implements ISelection { @@ -12,8 +12,8 @@ public class Selection implements ISelection { private final BetterBlockPos pos2; private final BetterBlockPos min; private final BetterBlockPos max; - private final Vector3i size; - private final AxisAlignedBB aabb; + private final Vec3i size; + private final AABB aabb; public Selection(BetterBlockPos pos1, BetterBlockPos pos2) { this.pos1 = pos1; @@ -31,13 +31,13 @@ public Selection(BetterBlockPos pos1, BetterBlockPos pos2) { Math.max(pos1.z, pos2.z) ); - this.size = new Vector3i( + this.size = new Vec3i( max.x - min.x + 1, max.y - min.y + 1, max.z - min.z + 1 ); - this.aabb = new AxisAlignedBB(this.min, this.max.add(1, 1, 1)); + this.aabb = new AABB(this.min, this.max.add(1, 1, 1)); } @Override @@ -61,12 +61,12 @@ public BetterBlockPos max() { } @Override - public Vector3i size() { + public Vec3i size() { return size; } @Override - public AxisAlignedBB aabb() { + public AABB aabb() { return aabb; } @@ -91,7 +91,7 @@ public String toString() { * else if they're both at the same position on that axis (it really doesn't matter) */ private boolean isPos2(Direction facing) { - boolean negative = facing.getAxisDirection().getOffset() < 0; + boolean negative = facing.getAxisDirection().getStep() < 0; switch (facing.getAxis()) { case X: diff --git a/src/main/java/baritone/selection/SelectionManager.java b/src/main/java/baritone/selection/SelectionManager.java index 14e6d0c93..150bd9d17 100644 --- a/src/main/java/baritone/selection/SelectionManager.java +++ b/src/main/java/baritone/selection/SelectionManager.java @@ -4,10 +4,9 @@ import baritone.api.selection.ISelection; import baritone.api.selection.ISelectionManager; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.Direction; - import java.util.LinkedList; import java.util.ListIterator; +import net.minecraft.core.Direction; public class SelectionManager implements ISelectionManager { diff --git a/src/main/java/baritone/selection/SelectionRenderer.java b/src/main/java/baritone/selection/SelectionRenderer.java index e5493a7ea..d0be61e64 100644 --- a/src/main/java/baritone/selection/SelectionRenderer.java +++ b/src/main/java/baritone/selection/SelectionRenderer.java @@ -5,8 +5,8 @@ import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.selection.ISelection; import baritone.utils.IRenderer; -import com.mojang.blaze3d.matrix.MatrixStack; -import net.minecraft.util.math.AxisAlignedBB; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.world.phys.AABB; public class SelectionRenderer implements IRenderer, AbstractGameEventListener { @@ -19,7 +19,7 @@ public class SelectionRenderer implements IRenderer, AbstractGameEventListener { baritone.getGameEventHandler().registerEventListener(this); } - public static void renderSelections(MatrixStack stack, ISelection[] selections) { + public static void renderSelections(PoseStack stack, ISelection[] selections) { float opacity = settings.selectionOpacity.value; boolean ignoreDepth = settings.renderSelectionIgnoreDepth.value; float lineWidth = settings.selectionLineWidth.value; @@ -38,13 +38,13 @@ public static void renderSelections(MatrixStack stack, ISelection[] selections) IRenderer.glColor(settings.colorSelectionPos1.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(stack, new AxisAlignedBB(selection.pos1(), selection.pos1().add(1, 1, 1))); + IRenderer.drawAABB(stack, new AABB(selection.pos1(), selection.pos1().add(1, 1, 1))); } IRenderer.glColor(settings.colorSelectionPos2.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(stack, new AxisAlignedBB(selection.pos2(), selection.pos2().add(1, 1, 1))); + IRenderer.drawAABB(stack, new AABB(selection.pos2(), selection.pos2().add(1, 1, 1))); } } diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index ad3deda07..62262d5a8 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -19,9 +19,9 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; /** * @author Brady @@ -49,19 +49,19 @@ public void stopBreakingBlock() { } public void tick(boolean isLeftClick) { - RayTraceResult trace = ctx.objectMouseOver(); - boolean isBlockTrace = trace != null && trace.getType() == RayTraceResult.Type.BLOCK; + HitResult trace = ctx.objectMouseOver(); + boolean isBlockTrace = trace != null && trace.getType() == HitResult.Type.BLOCK; if (isLeftClick && isBlockTrace) { if (!didBreakLastTick) { ctx.playerController().syncHeldItem(); - ctx.playerController().clickBlock(((BlockRayTraceResult) trace).getPos(), ((BlockRayTraceResult) trace).getFace()); - ctx.player().swingArm(Hand.MAIN_HAND); + ctx.playerController().clickBlock(((BlockHitResult) trace).getBlockPos(), ((BlockHitResult) trace).getDirection()); + ctx.player().swingArm(InteractionHand.MAIN_HAND); } // Attempt to break the block - if (ctx.playerController().onPlayerDamageBlock(((BlockRayTraceResult) trace).getPos(), ((BlockRayTraceResult) trace).getFace())) { - ctx.player().swingArm(Hand.MAIN_HAND); + if (ctx.playerController().onPlayerDamageBlock(((BlockHitResult) trace).getBlockPos(), ((BlockHitResult) trace).getDirection())) { + ctx.player().swingArm(InteractionHand.MAIN_HAND); } ctx.playerController().setHittingBlock(false); diff --git a/src/main/java/baritone/utils/BlockPlaceHelper.java b/src/main/java/baritone/utils/BlockPlaceHelper.java index a0cc2d2d7..2374bdd0c 100644 --- a/src/main/java/baritone/utils/BlockPlaceHelper.java +++ b/src/main/java/baritone/utils/BlockPlaceHelper.java @@ -20,10 +20,10 @@ import baritone.Baritone; import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; public class BlockPlaceHelper implements Helper { @@ -39,17 +39,17 @@ public void tick(boolean rightClickRequested) { rightClickTimer--; return; } - RayTraceResult mouseOver = ctx.objectMouseOver(); - if (!rightClickRequested || ctx.player().isRowingBoat() || mouseOver == null || mouseOver.getType() != RayTraceResult.Type.BLOCK) { + HitResult mouseOver = ctx.objectMouseOver(); + if (!rightClickRequested || ctx.player().isRowingBoat() || mouseOver == null || mouseOver.getType() != HitResult.Type.BLOCK) { return; } rightClickTimer = Baritone.settings().rightClickSpeed.value; - for (Hand hand : Hand.values()) { - if (ctx.playerController().processRightClickBlock(ctx.player(), ctx.world(), hand, (BlockRayTraceResult) mouseOver) == ActionResultType.SUCCESS) { + for (InteractionHand hand : InteractionHand.values()) { + if (ctx.playerController().processRightClickBlock(ctx.player(), ctx.world(), hand, (BlockHitResult) mouseOver) == InteractionResult.SUCCESS) { ctx.player().swingArm(hand); return; } - if (!ctx.player().getHeldItem(hand).isEmpty() && ctx.playerController().processRightClick(ctx.player(), ctx.world(), hand) == ActionResultType.SUCCESS) { + if (!ctx.player().getHeldItem(hand).isEmpty() && ctx.playerController().processRightClick(ctx.player(), ctx.world(), hand) == InteractionResult.SUCCESS) { return; } } diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 60159f322..c37d898ef 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -22,17 +22,17 @@ import baritone.cache.CachedRegion; import baritone.cache.WorldData; import baritone.utils.accessor.IClientChunkProvider; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientChunkProvider; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockReader; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.ChunkSection; -import net.minecraft.world.chunk.ChunkStatus; +import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkStatus; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; /** * Wraps get for chuck caching capability @@ -41,18 +41,18 @@ */ public class BlockStateInterface { - private final ClientChunkProvider provider; + private final ClientChunkCache provider; private final WorldData worldData; - protected final IBlockReader world; - public final BlockPos.Mutable isPassableBlockPos; - public final IBlockReader access; + protected final BlockGetter world; + public final BlockPos.MutableBlockPos isPassableBlockPos; + public final BlockGetter access; - private Chunk prev = null; + private LevelChunk prev = null; private CachedRegion prevCached = null; private final boolean useTheRealWorld; - private static final BlockState AIR = Blocks.AIR.getDefaultState(); + private static final BlockState AIR = Blocks.AIR.defaultBlockState(); public BlockStateInterface(IPlayerContext ctx) { this(ctx, false); @@ -62,24 +62,24 @@ public BlockStateInterface(IPlayerContext ctx, boolean copyLoadedChunks) { this(ctx.world(), (WorldData) ctx.worldData(), copyLoadedChunks); } - public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedChunks) { + public BlockStateInterface(Level world, WorldData worldData, boolean copyLoadedChunks) { this.world = world; this.worldData = worldData; if (copyLoadedChunks) { - this.provider = ((IClientChunkProvider) world.getChunkProvider()).createThreadSafeCopy(); + this.provider = ((IClientChunkProvider) world.getChunkSource()).createThreadSafeCopy(); } else { - this.provider = (ClientChunkProvider) world.getChunkProvider(); + this.provider = (ClientChunkCache) world.getChunkSource(); } this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.value; - if (!Minecraft.getInstance().isOnExecutionThread()) { + if (!Minecraft.getInstance().isSameThread()) { throw new IllegalStateException(); } - this.isPassableBlockPos = new BlockPos.Mutable(); + this.isPassableBlockPos = new BlockPos.MutableBlockPos(); this.access = new BlockStateInterfaceAccessWrapper(this); } public boolean worldContainsLoadedChunk(int blockX, int blockZ) { - return provider.chunkExists(blockX >> 4, blockZ >> 4); + return provider.hasChunk(blockX >> 4, blockZ >> 4); } public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be called from the pathing thread because the pathing thread doesn't make a single blockpos pog @@ -104,7 +104,7 @@ public BlockState get0(int x, int y, int z) { // Mickey resigned } if (useTheRealWorld) { - Chunk cached = prev; + LevelChunk cached = prev; // there's great cache locality in block state lookups // generally it's within each movement // if it's the same chunk as last time @@ -114,7 +114,7 @@ public BlockState get0(int x, int y, int z) { // Mickey resigned if (cached != null && cached.getPos().x == x >> 4 && cached.getPos().z == z >> 4) { return getFromChunk(cached, x, y, z); } - Chunk chunk = provider.getChunk(x >> 4, z >> 4, ChunkStatus.FULL, false); + LevelChunk chunk = provider.getChunk(x >> 4, z >> 4, ChunkStatus.FULL, false); if (chunk != null && !chunk.isEmpty()) { prev = chunk; return getFromChunk(chunk, x, y, z); @@ -142,7 +142,7 @@ public BlockState get0(int x, int y, int z) { // Mickey resigned } public boolean isLoaded(int x, int z) { - Chunk prevChunk = prev; + LevelChunk prevChunk = prev; if (prevChunk != null && prevChunk.getPos().x == x >> 4 && prevChunk.getPos().z == z >> 4) { return true; } @@ -167,9 +167,9 @@ public boolean isLoaded(int x, int z) { } // get the block at x,y,z from this chunk WITHOUT creating a single blockpos object - public static BlockState getFromChunk(Chunk chunk, int x, int y, int z) { - ChunkSection section = chunk.getSections()[y >> 4]; - if (ChunkSection.isEmpty(section)) { + public static BlockState getFromChunk(LevelChunk chunk, int x, int y, int z) { + LevelChunkSection section = chunk.getSections()[y >> 4]; + if (LevelChunkSection.isEmpty(section)) { return AIR; } return section.getBlockState(x & 15, y & 15, z & 15); diff --git a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java index cc0aef236..29fbb07ba 100644 --- a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java +++ b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java @@ -17,20 +17,19 @@ package baritone.utils; -import net.minecraft.block.BlockState; -import net.minecraft.fluid.FluidState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockReader; - import javax.annotation.Nullable; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; /** * @author Brady * @since 11/5/2019 */ @SuppressWarnings("NullableProblems") -public final class BlockStateInterfaceAccessWrapper implements IBlockReader { +public final class BlockStateInterfaceAccessWrapper implements BlockGetter { private final BlockStateInterface bsi; @@ -40,7 +39,7 @@ public final class BlockStateInterfaceAccessWrapper implements IBlockReader { @Nullable @Override - public TileEntity getTileEntity(BlockPos pos) { + public BlockEntity getBlockEntity(BlockPos pos) { return null; } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 07b4093e7..70a97b077 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -22,20 +22,24 @@ import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Helper; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.entity.Entity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; +import com.mojang.math.Vector4f; +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.TextComponent; import net.minecraft.util.math.*; -import net.minecraft.util.math.vector.Matrix4f; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector4f; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; - +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; import java.awt.*; import java.util.Collections; @@ -50,7 +54,7 @@ public class GuiClick extends Screen implements Helper { private BlockPos currentMouseOver; public GuiClick() { - super(new StringTextComponent("CLICK")); + super(new TextComponent("CLICK")); } @Override @@ -59,23 +63,23 @@ public boolean isPauseScreen() { } @Override - public void render(MatrixStack stack, int mouseX, int mouseY, float partialTicks) { + public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHelper.getMouseX(); double my = mc.mouseHelper.getMouseY(); my = mc.getMainWindow().getHeight() - my; my *= mc.getMainWindow().getFramebufferHeight() / (double) mc.getMainWindow().getHeight(); mx *= mc.getMainWindow().getFramebufferWidth() / (double) mc.getMainWindow().getWidth(); - Vector3d near = toWorld(mx, my, 0); - Vector3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv + Vec3 near = toWorld(mx, my, 0); + Vec3 far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv if (near != null && far != null) { /// - Vector3d viewerPos = new Vector3d(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); - ClientPlayerEntity player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); - RayTraceResult result = player.world.rayTraceBlocks(new RayTraceContext(near.add(viewerPos), far.add(viewerPos), RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, player)); - if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { - currentMouseOver = ((BlockRayTraceResult) result).getPos(); + Vec3 viewerPos = new Vec3(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); + LocalPlayer player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); + HitResult result = player.level.clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); + if (result != null && result.getType() == HitResult.Type.BLOCK) { + currentMouseOver = ((BlockHitResult) result).getBlockPos(); } } } @@ -87,10 +91,10 @@ public boolean mouseReleased(double mouseX, double mouseY, int mouseButton) { if (clickStart != null && !clickStart.equals(currentMouseOver)) { BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().removeAllSelections(); BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().addSelection(BetterBlockPos.from(clickStart), BetterBlockPos.from(currentMouseOver)); - TextComponent component = new StringTextComponent("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); + BaseComponent component = new TextComponent("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); component.getStyle() - .setFormatting(TextFormatting.WHITE) - .setClickEvent(new ClickEvent( + .withColor(ChatFormatting.WHITE) + .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "help sel" )); @@ -100,7 +104,7 @@ public boolean mouseReleased(double mouseX, double mouseY, int mouseButton) { BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(currentMouseOver)); } } else if (mouseButton == 1) { - BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(currentMouseOver.up())); + BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(currentMouseOver.above())); } } clickStart = null; @@ -113,9 +117,9 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { return super.mouseClicked(mouseX, mouseY, mouseButton); } - public void onRender(MatrixStack modelViewStack, Matrix4f projectionMatrix) { + public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { this.projectionViewMatrix = projectionMatrix.copy(); - this.projectionViewMatrix.mul(modelViewStack.getLast().getMatrix()); + this.projectionViewMatrix.multiply(modelViewStack.last().pose()); this.projectionViewMatrix.invert(); if (currentMouseOver != null) { @@ -132,7 +136,7 @@ public void onRender(MatrixStack modelViewStack, Matrix4f projectionMatrix) { RenderSystem.disableDepthTest(); BetterBlockPos a = new BetterBlockPos(currentMouseOver); BetterBlockPos b = new BetterBlockPos(clickStart); - IRenderer.drawAABB(modelViewStack, new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); + IRenderer.drawAABB(modelViewStack, new AABB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); RenderSystem.enableDepthTest(); RenderSystem.depthMask(true); @@ -142,7 +146,7 @@ public void onRender(MatrixStack modelViewStack, Matrix4f projectionMatrix) { } } - private Vector3d toWorld(double x, double y, double z) { + private Vec3 toWorld(double x, double y, double z) { if (this.projectionViewMatrix == null) { return null; } @@ -154,11 +158,11 @@ private Vector3d toWorld(double x, double y, double z) { Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F); pos.transform(this.projectionViewMatrix); - if (pos.getW() == 0) { + if (pos.w() == 0) { return null; } pos.perspectiveDivide(); - return new Vector3d(pos.getX(), pos.getY(), pos.getZ()); + return new Vec3(pos.x(), pos.y(), pos.z()); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 27ae0915f..3f263e91a 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -21,22 +21,21 @@ import baritone.api.Settings; import baritone.api.utils.Helper; import baritone.utils.accessor.IEntityRenderManager; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.vector.Matrix4f; - +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.math.Matrix4f; import java.awt.*; +import net.minecraft.world.phys.AABB; import static org.lwjgl.opengl.GL11.*; public interface IRenderer { - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder buffer = tessellator.getBuffer(); + Tesselator tessellator = Tesselator.getInstance(); + BufferBuilder buffer = tessellator.getBuilder(); IEntityRenderManager renderManager = (IEntityRenderManager) Helper.mc.getRenderManager(); Settings settings = BaritoneAPI.getSettings(); @@ -72,42 +71,42 @@ static void endLines(boolean ignoredDepth) { RenderSystem.disableBlend(); } - static void drawAABB(MatrixStack stack, AxisAlignedBB aabb) { - AxisAlignedBB toDraw = aabb.offset(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); + static void drawAABB(PoseStack stack, AABB aabb) { + AABB toDraw = aabb.move(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); - Matrix4f matrix4f = stack.getLast().getMatrix(); - buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); + Matrix4f matrix4f = stack.last().pose(); + buffer.begin(GL_LINES, DefaultVertexFormat.POSITION); // bottom - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); // top - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); // corners - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - tessellator.draw(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + tessellator.end(); } - static void drawAABB(MatrixStack stack, AxisAlignedBB aabb, double expand) { - drawAABB(stack, aabb.grow(expand, expand, expand)); + static void drawAABB(PoseStack stack, AABB aabb, double expand) { + drawAABB(stack, aabb.inflate(expand, expand, expand)); } } diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index a043b0ac6..a024ab342 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -24,8 +24,7 @@ import baritone.api.utils.input.Input; import baritone.behavior.Behavior; import net.minecraft.client.Minecraft; -import net.minecraft.util.MovementInputFromOptions; - +import net.minecraft.client.player.KeyboardInput; import java.util.HashMap; import java.util.Map; @@ -100,7 +99,7 @@ public final void onTick(TickEvent event) { } } else { if (ctx.player().movementInput.getClass() == PlayerMovementInput.class) { // allow other movement inputs that aren't this one, e.g. for a freecam - ctx.player().movementInput = new MovementInputFromOptions(Minecraft.getInstance().gameSettings); + ctx.player().movementInput = new KeyboardInput(Minecraft.getInstance().options); } } // only set it if it was previously incorrect diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index dc4b7a368..b637e0c23 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -26,25 +26,24 @@ import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.block.BlockState; -import net.minecraft.client.renderer.tileentity.BeaconTileEntityRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.VoxelShapes; -import net.minecraft.util.math.vector.Matrix4f; -import net.minecraft.world.DimensionType; - +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; import java.awt.*; import java.util.Collection; import java.util.Collections; import java.util.List; +import net.minecraft.client.renderer.blockentity.BeaconRenderer; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import static org.lwjgl.opengl.GL11.*; @@ -88,7 +87,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { Entity renderView = Helper.mc.getRenderViewEntity(); - if (renderView.world != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { + if (renderView.level != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { System.out.println("I have no idea what's going on"); System.out.println("The primary baritone is in a different world than the render view entity"); System.out.println("Not rendering the path"); @@ -136,7 +135,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { }); } - public static void drawPath(MatrixStack stack, IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + public static void drawPath(PoseStack stack, IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); int fadeStart = fadeStart0 + startIndex; @@ -174,33 +173,33 @@ public static void drawPath(MatrixStack stack, IPath path, int startIndex, Color drawLine(stack, start.x, start.y, start.z, end.x, end.y, end.z); - tessellator.draw(); + tessellator.end(); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } - public static void drawLine(MatrixStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { - Matrix4f matrix4f = stack.getLast().getMatrix(); + public static void drawLine(PoseStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { + Matrix4f matrix4f = stack.last().pose(); double vpX = posX(); double vpY = posY(); double vpZ = posZ(); boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; - buffer.begin(renderPathAsFrickinThingy ? GL_LINE_STRIP : GL_LINES, DefaultVertexFormats.POSITION); - buffer.pos(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); - buffer.pos(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); + buffer.begin(renderPathAsFrickinThingy ? GL_LINE_STRIP : GL_LINES, DefaultVertexFormat.POSITION); + buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); + buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); if (renderPathAsFrickinThingy) { - buffer.pos(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); - buffer.pos(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); - buffer.pos(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); + buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); + buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); + buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); } } - public static void drawManySelectionBoxes(MatrixStack stack, Entity player, Collection positions, Color color) { + public static void drawManySelectionBoxes(PoseStack stack, Entity player, Collection positions, Color color) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderSelectionBoxesIgnoreDepth.value); //BlockPos blockpos = movingObjectPositionIn.getBlockPos(); @@ -208,16 +207,16 @@ public static void drawManySelectionBoxes(MatrixStack stack, Entity player, Coll positions.forEach(pos -> { BlockState state = bsi.get0(pos); - VoxelShape shape = state.getShape(player.world, pos); - AxisAlignedBB toDraw = shape.isEmpty() ? VoxelShapes.fullCube().getBoundingBox() : shape.getBoundingBox(); - toDraw = toDraw.offset(pos); + VoxelShape shape = state.getShape(player.level, pos); + AABB toDraw = shape.isEmpty() ? Shapes.block().bounds() : shape.bounds(); + toDraw = toDraw.move(pos); IRenderer.drawAABB(stack, toDraw, .002D); }); IRenderer.endLines(settings.renderSelectionBoxesIgnoreDepth.value); } - public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goal, float partialTicks, Color color) { + public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, float partialTicks, Color color) { double renderPosX = posX(); double renderPosY = posY(); double renderPosZ = posZ(); @@ -225,7 +224,7 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa double minZ, maxZ; double minY, maxY; double y1, y2; - double y = MathHelper.cos((float) (((float) ((System.nanoTime() / 100000L) % 20000L)) / 20000F * Math.PI * 2)); + double y = Mth.cos((float) (((float) ((System.nanoTime() / 100000L) % 20000L)) / 20000F * Math.PI * 2)); if (goal instanceof IGoalRenderPos) { BlockPos goalPos = ((IGoalRenderPos) goal).getGoalPos(); minX = goalPos.getX() + 0.002 - renderPosX; @@ -255,16 +254,16 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa RenderSystem.disableDepthTest(); } - stack.push(); // push + stack.pushPose(); // push stack.translate(goalPos.getX() - renderPosX, -renderPosY, goalPos.getZ() - renderPosZ); // translate - BeaconTileEntityRenderer.renderBeamSegment( + BeaconRenderer.renderBeaconBeam( stack, mc.getRenderTypeBuffers().getBufferSource(), TEXTURE_BEACON_BEAM, partialTicks, 1.0F, - player.world.getGameTime(), + player.level.getGameTime(), 0, 256, color.getColorComponents(null), @@ -274,7 +273,7 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa 0.25F ); - stack.pop(); // pop + stack.popPose(); // pop if (settings.renderGoalIgnoreDepth.value) { RenderSystem.enableDepthTest(); @@ -303,10 +302,10 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa return; } else if (goal instanceof GoalYLevel) { GoalYLevel goalpos = (GoalYLevel) goal; - minX = player.getPositionVec().x - settings.yLevelBoxSize.value - renderPosX; - minZ = player.getPositionVec().z - settings.yLevelBoxSize.value - renderPosZ; - maxX = player.getPositionVec().x + settings.yLevelBoxSize.value - renderPosX; - maxZ = player.getPositionVec().z + settings.yLevelBoxSize.value - renderPosZ; + minX = player.position().x - settings.yLevelBoxSize.value - renderPosX; + minZ = player.position().z - settings.yLevelBoxSize.value - renderPosZ; + maxX = player.position().x + settings.yLevelBoxSize.value - renderPosX; + maxZ = player.position().z + settings.yLevelBoxSize.value - renderPosZ; minY = ((GoalYLevel) goal).level - renderPosY; maxY = minY + 2; y1 = 1 + y + goalpos.level - renderPosY; @@ -320,30 +319,30 @@ public static void drawDankLitGoalBox(MatrixStack stack, Entity player, Goal goa renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y1); renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); - Matrix4f matrix4f = stack.getLast().getMatrix(); - buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); - buffer.pos(matrix4f, (float) minX, (float) minY, (float) minZ).endVertex(); - buffer.pos(matrix4f, (float) minX, (float) maxY, (float) minZ).endVertex(); - buffer.pos(matrix4f, (float) maxX, (float) minY, (float) minZ).endVertex(); - buffer.pos(matrix4f, (float) maxX, (float) maxY, (float) minZ).endVertex(); - buffer.pos(matrix4f, (float) maxX, (float) minY, (float) maxZ).endVertex(); - buffer.pos(matrix4f, (float) maxX, (float) maxY, (float) maxZ).endVertex(); - buffer.pos(matrix4f, (float) minX, (float) minY, (float) maxZ).endVertex(); - buffer.pos(matrix4f, (float) minX, (float) maxY, (float) maxZ).endVertex(); - tessellator.draw(); + Matrix4f matrix4f = stack.last().pose(); + buffer.begin(GL_LINES, DefaultVertexFormat.POSITION); + buffer.vertex(matrix4f, (float) minX, (float) minY, (float) minZ).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) minZ).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) minZ).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) minZ).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) maxZ).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) maxZ).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) minY, (float) maxZ).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) maxZ).endVertex(); + tessellator.end(); IRenderer.endLines(settings.renderGoalIgnoreDepth.value); } - private static void renderHorizontalQuad(MatrixStack stack, double minX, double maxX, double minZ, double maxZ, double y) { + private static void renderHorizontalQuad(PoseStack stack, double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { - Matrix4f matrix4f = stack.getLast().getMatrix(); - buffer.begin(GL_LINE_LOOP, DefaultVertexFormats.POSITION); - buffer.pos(matrix4f, (float) minX, (float) y, (float) minZ).endVertex(); - buffer.pos(matrix4f, (float) maxX, (float) y, (float) minZ).endVertex(); - buffer.pos(matrix4f, (float) maxX, (float) y, (float) maxZ).endVertex(); - buffer.pos(matrix4f, (float) minX, (float) y, (float) maxZ).endVertex(); - tessellator.draw(); + Matrix4f matrix4f = stack.last().pose(); + buffer.begin(GL_LINE_LOOP, DefaultVertexFormat.POSITION); + buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) y, (float) minZ).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) y, (float) maxZ).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) y, (float) maxZ).endVertex(); + tessellator.end(); } } } diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index a83e53a1e..d841cf3a1 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -27,9 +27,8 @@ import baritone.api.process.PathingCommandType; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import net.minecraft.util.math.BlockPos; - import java.util.*; +import net.minecraft.core.BlockPos; public class PathingControlManager implements IPathingControlManager { diff --git a/src/main/java/baritone/utils/PlayerMovementInput.java b/src/main/java/baritone/utils/PlayerMovementInput.java index 57745b922..854680233 100644 --- a/src/main/java/baritone/utils/PlayerMovementInput.java +++ b/src/main/java/baritone/utils/PlayerMovementInput.java @@ -18,9 +18,8 @@ package baritone.utils; import baritone.api.utils.input.Input; -import net.minecraft.util.MovementInput; -public class PlayerMovementInput extends MovementInput { +public class PlayerMovementInput extends net.minecraft.client.player.Input { private final InputOverrideHandler handler; @@ -29,31 +28,31 @@ public class PlayerMovementInput extends MovementInput { } @Override - public void tickMovement(boolean p_225607_1_) { - this.moveStrafe = 0.0F; - this.moveForward = 0.0F; + public void tick(boolean p_225607_1_) { + this.leftImpulse = 0.0F; + this.forwardImpulse = 0.0F; - this.jump = handler.isInputForcedDown(Input.JUMP); // oppa gangnam style + this.jumping = handler.isInputForcedDown(Input.JUMP); // oppa gangnam style - if (this.forwardKeyDown = handler.isInputForcedDown(Input.MOVE_FORWARD)) { - this.moveForward++; + if (this.up = handler.isInputForcedDown(Input.MOVE_FORWARD)) { + this.forwardImpulse++; } - if (this.backKeyDown = handler.isInputForcedDown(Input.MOVE_BACK)) { - this.moveForward--; + if (this.down = handler.isInputForcedDown(Input.MOVE_BACK)) { + this.forwardImpulse--; } - if (this.leftKeyDown = handler.isInputForcedDown(Input.MOVE_LEFT)) { - this.moveStrafe++; + if (this.left = handler.isInputForcedDown(Input.MOVE_LEFT)) { + this.leftImpulse++; } - if (this.rightKeyDown = handler.isInputForcedDown(Input.MOVE_RIGHT)) { - this.moveStrafe--; + if (this.right = handler.isInputForcedDown(Input.MOVE_RIGHT)) { + this.leftImpulse--; } - if (this.sneaking = handler.isInputForcedDown(Input.SNEAK)) { - this.moveStrafe *= 0.3D; - this.moveForward *= 0.3D; + if (this.shiftKeyDown = handler.isInputForcedDown(Input.SNEAK)) { + this.leftImpulse *= 0.3D; + this.forwardImpulse *= 0.3D; } } } diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 811fd905d..6dee9db9e 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -18,18 +18,17 @@ package baritone.utils; import baritone.Baritone; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ToolItem; -import net.minecraft.potion.Effects; - import java.util.HashMap; import java.util.Map; import java.util.function.Function; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.item.DiggerItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; /** * A cached list of the best tools on the hotbar for any block @@ -49,9 +48,9 @@ public class ToolSet { */ private final Function backendCalculation; - private final ClientPlayerEntity player; + private final LocalPlayer player; - public ToolSet(ClientPlayerEntity player) { + public ToolSet(LocalPlayer player) { breakStrengthCache = new HashMap<>(); this.player = player; @@ -81,11 +80,11 @@ public double getStrVsBlock(BlockState state) { * @return Either 1 or -1 */ private int getMaterialCost(ItemStack itemStack) { - return itemStack.getItem() instanceof ToolItem ? 1 : -1; + return itemStack.getItem() instanceof DiggerItem ? 1 : -1; } public boolean hasSilkTouch(ItemStack stack) { - return EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; + return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; } /** @@ -107,16 +106,16 @@ public int getBestSlot(Block b, boolean preferSilkTouch, boolean pathingCalculat possible, this lets us make pathing depend on the actual tool to be used (if auto tool is disabled) */ if (Baritone.settings().disableAutoTool.value && pathingCalculation) { - return player.inventory.currentItem; + return player.inventory.selected; } int best = 0; double highestSpeed = Double.NEGATIVE_INFINITY; int lowestCost = Integer.MIN_VALUE; boolean bestSilkTouch = false; - BlockState blockState = b.getDefaultState(); + BlockState blockState = b.defaultBlockState(); for (int i = 0; i < 9; i++) { - ItemStack itemStack = player.inventory.getStackInSlot(i); + ItemStack itemStack = player.inventory.getItem(i); double speed = calculateSpeedVsBlock(itemStack, blockState); boolean silkTouch = hasSilkTouch(itemStack); if (speed > highestSpeed) { @@ -145,8 +144,8 @@ possible, this lets us make pathing depend on the actual tool to be used (if aut * @return A double containing the destruction ticks with the best tool */ private double getBestDestructionTime(Block b) { - ItemStack stack = player.inventory.getStackInSlot(getBestSlot(b, false, true)); - return calculateSpeedVsBlock(stack, b.getDefaultState()) * avoidanceMultiplier(b); + ItemStack stack = player.inventory.getItem(getBestSlot(b, false, true)); + return calculateSpeedVsBlock(stack, b.defaultBlockState()) * avoidanceMultiplier(b); } private double avoidanceMultiplier(Block b) { @@ -162,21 +161,21 @@ private double avoidanceMultiplier(Block b) { * @return how long it would take in ticks */ public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { - float hardness = state.getBlockHardness(null, null); + float hardness = state.getDestroySpeed(null, null); if (hardness < 0) { return -1; } float speed = item.getDestroySpeed(state); if (speed > 1) { - int effLevel = EnchantmentHelper.getEnchantmentLevel(Enchantments.EFFICIENCY, item); + int effLevel = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_EFFICIENCY, item); if (effLevel > 0 && !item.isEmpty()) { speed += effLevel * effLevel + 1; } } speed /= hardness; - if (!state.getRequiresTool() || (!item.isEmpty() && item.canHarvestBlock(state))) { + if (!state.requiresCorrectToolForDrops() || (!item.isEmpty() && item.isCorrectToolForDrops(state))) { return speed / 30; } else { return speed / 100; @@ -190,11 +189,11 @@ public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { */ private double potionAmplifier() { double speed = 1; - if (player.isPotionActive(Effects.HASTE)) { - speed *= 1 + (player.getActivePotionEffect(Effects.HASTE).getAmplifier() + 1) * 0.2; + if (player.hasEffect(MobEffects.DIG_SPEED)) { + speed *= 1 + (player.getEffect(MobEffects.DIG_SPEED).getAmplifier() + 1) * 0.2; } - if (player.isPotionActive(Effects.MINING_FATIGUE)) { - switch (player.getActivePotionEffect(Effects.MINING_FATIGUE).getAmplifier()) { + if (player.hasEffect(MobEffects.DIG_SLOWDOWN)) { + switch (player.getEffect(MobEffects.DIG_SLOWDOWN).getAmplifier()) { case 0: speed *= 0.3; break; diff --git a/src/main/java/baritone/utils/accessor/IChunkArray.java b/src/main/java/baritone/utils/accessor/IChunkArray.java index 147f64007..4c76b44fe 100644 --- a/src/main/java/baritone/utils/accessor/IChunkArray.java +++ b/src/main/java/baritone/utils/accessor/IChunkArray.java @@ -17,14 +17,13 @@ package baritone.utils.accessor; -import net.minecraft.world.chunk.Chunk; - import java.util.concurrent.atomic.AtomicReferenceArray; +import net.minecraft.world.level.chunk.LevelChunk; public interface IChunkArray { void copyFrom(IChunkArray other); - AtomicReferenceArray getChunks(); + AtomicReferenceArray getChunks(); int centerX(); diff --git a/src/main/java/baritone/utils/accessor/IChunkProviderClient.java b/src/main/java/baritone/utils/accessor/IChunkProviderClient.java index e5fde40b4..edeac5080 100644 --- a/src/main/java/baritone/utils/accessor/IChunkProviderClient.java +++ b/src/main/java/baritone/utils/accessor/IChunkProviderClient.java @@ -18,9 +18,9 @@ package baritone.utils.accessor; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.level.chunk.LevelChunk; public interface IChunkProviderClient { - Long2ObjectMap loadedChunks(); + Long2ObjectMap loadedChunks(); } diff --git a/src/main/java/baritone/utils/accessor/IClientChunkProvider.java b/src/main/java/baritone/utils/accessor/IClientChunkProvider.java index cc7483ab4..145f8d3af 100644 --- a/src/main/java/baritone/utils/accessor/IClientChunkProvider.java +++ b/src/main/java/baritone/utils/accessor/IClientChunkProvider.java @@ -17,10 +17,10 @@ package baritone.utils.accessor; -import net.minecraft.client.multiplayer.ClientChunkProvider; +import net.minecraft.client.multiplayer.ClientChunkCache; public interface IClientChunkProvider { - ClientChunkProvider createThreadSafeCopy(); + ClientChunkCache createThreadSafeCopy(); IChunkArray extractReferenceArray(); } diff --git a/src/main/java/baritone/utils/accessor/IPlayerControllerMP.java b/src/main/java/baritone/utils/accessor/IPlayerControllerMP.java index 354b9eefc..72e6f7ee3 100644 --- a/src/main/java/baritone/utils/accessor/IPlayerControllerMP.java +++ b/src/main/java/baritone/utils/accessor/IPlayerControllerMP.java @@ -17,7 +17,7 @@ package baritone.utils.accessor; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public interface IPlayerControllerMP { diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index b9848845a..c9f3446e8 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -21,15 +21,10 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.IPlayerContext; import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; -import net.minecraft.entity.MobEntity; -import net.minecraft.entity.monster.EndermanEntity; -import net.minecraft.entity.monster.SpiderEntity; -import net.minecraft.entity.monster.ZombifiedPiglinEntity; -import net.minecraft.util.math.BlockPos; - import java.util.ArrayList; import java.util.Collections; import java.util.List; +import net.minecraft.core.BlockPos; public class Avoidance { diff --git a/src/main/java/baritone/utils/pathing/BetterWorldBorder.java b/src/main/java/baritone/utils/pathing/BetterWorldBorder.java index 9d8f3ef87..ef8e93ef4 100644 --- a/src/main/java/baritone/utils/pathing/BetterWorldBorder.java +++ b/src/main/java/baritone/utils/pathing/BetterWorldBorder.java @@ -17,7 +17,7 @@ package baritone.utils.pathing; -import net.minecraft.world.border.WorldBorder; +import net.minecraft.world.level.border.WorldBorder; /** * Essentially, a "rule" for the path finder, prevents proposed movements from attempting to venture @@ -31,10 +31,10 @@ public class BetterWorldBorder { private final double maxZ; public BetterWorldBorder(WorldBorder border) { - this.minX = border.minX(); - this.maxX = border.maxX(); - this.minZ = border.minZ(); - this.maxZ = border.maxZ(); + this.minX = border.getMinX(); + this.maxX = border.getMaxX(); + this.minZ = border.getMinZ(); + this.maxZ = border.getMaxZ(); } public boolean entirelyContains(int x, int z) { diff --git a/src/main/java/baritone/utils/pathing/PathBase.java b/src/main/java/baritone/utils/pathing/PathBase.java index de10fdf3c..5fff2f34a 100644 --- a/src/main/java/baritone/utils/pathing/PathBase.java +++ b/src/main/java/baritone/utils/pathing/PathBase.java @@ -23,7 +23,7 @@ import baritone.api.pathing.goals.Goal; import baritone.pathing.path.CutoffPath; import baritone.utils.BlockStateInterface; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public abstract class PathBase implements IPath { diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index c1bfb3948..f3e25a7ab 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -23,9 +23,9 @@ import baritone.api.utils.IPlayerContext; import baritone.api.utils.IPlayerController; import baritone.api.utils.RayTraceUtils; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; /** * Implementation of {@link IPlayerContext} that provides information about the primary player. @@ -38,7 +38,7 @@ public enum PrimaryPlayerContext implements IPlayerContext, Helper { INSTANCE; @Override - public ClientPlayerEntity player() { + public LocalPlayer player() { return mc.player; } @@ -48,7 +48,7 @@ public IPlayerController playerController() { } @Override - public World world() { + public Level world() { return mc.world; } @@ -58,7 +58,7 @@ public IWorldData worldData() { } @Override - public RayTraceResult objectMouseOver() { + public HitResult objectMouseOver() { return RayTraceUtils.rayTraceTowards(player(), playerRotations(), playerController().getBlockReachDistance()); } } diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index d3b53c54e..d5412d501 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -20,18 +20,18 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerController; import baritone.utils.accessor.IPlayerControllerMP; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ClickType; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Direction; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.world.GameType; -import net.minecraft.world.World; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.GameType; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; /** @@ -65,7 +65,7 @@ public void resetBlockRemoving() { } @Override - public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, PlayerEntity player) { + public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, Player player) { return mc.playerController.windowClick(windowId, slotId, mouseButton, type, player); } @@ -75,13 +75,13 @@ public GameType getGameType() { } @Override - public ActionResultType processRightClickBlock(ClientPlayerEntity player, World world, Hand hand, BlockRayTraceResult result) { + public InteractionResult processRightClickBlock(LocalPlayer player, Level world, InteractionHand hand, BlockHitResult result) { // primaryplayercontroller is always in a ClientWorld so this is ok - return mc.playerController.func_217292_a(player, (ClientWorld) world, hand, result); + return mc.playerController.func_217292_a(player, (ClientLevel) world, hand, result); } @Override - public ActionResultType processRightClick(ClientPlayerEntity player, World world, Hand hand) { + public InteractionResult processRightClick(LocalPlayer player, Level world, InteractionHand hand) { return mc.playerController.processRightClick(player, world, hand); } diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index 3af7e4c20..4f71aea64 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -19,11 +19,10 @@ import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.MaskSchematic; -import net.minecraft.block.AirBlock; -import net.minecraft.block.BlockState; - import java.util.OptionalInt; import java.util.function.Predicate; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.state.BlockState; public class MapArtSchematic extends MaskSchematic { diff --git a/src/main/java/baritone/utils/schematic/StaticSchematic.java b/src/main/java/baritone/utils/schematic/StaticSchematic.java index 37da08a8d..5a110281b 100644 --- a/src/main/java/baritone/utils/schematic/StaticSchematic.java +++ b/src/main/java/baritone/utils/schematic/StaticSchematic.java @@ -19,9 +19,8 @@ import baritone.api.schematic.AbstractSchematic; import baritone.api.schematic.IStaticSchematic; -import net.minecraft.block.BlockState; - import java.util.List; +import net.minecraft.world.level.block.state.BlockState; /** * Default implementation of {@link IStaticSchematic} diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 15aa281a9..b7cc085fb 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -21,13 +21,13 @@ import baritone.api.schematic.format.ISchematicFormat; import baritone.utils.schematic.format.defaults.MCEditSchematic; import baritone.utils.schematic.format.defaults.SpongeSchematic; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.CompressedStreamTools; import org.apache.commons.io.FilenameUtils; import java.io.File; import java.io.IOException; import java.io.InputStream; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtIo; /** * Default implementations of {@link ISchematicFormat} @@ -43,7 +43,7 @@ public enum DefaultSchematicFormats implements ISchematicFormat { MCEDIT("schematic") { @Override public IStaticSchematic parse(InputStream input) throws IOException { - return new MCEditSchematic(CompressedStreamTools.readCompressed(input)); + return new MCEditSchematic(NbtIo.readCompressed(input)); } }, @@ -55,7 +55,7 @@ public IStaticSchematic parse(InputStream input) throws IOException { SPONGE("schem") { @Override public IStaticSchematic parse(InputStream input) throws IOException { - CompoundNBT nbt = CompressedStreamTools.readCompressed(input); + CompoundTag nbt = NbtIo.readCompressed(input); int version = nbt.getInt("Version"); switch (version) { case 1: diff --git a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java index d5f69f1e9..4693ea387 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java @@ -18,12 +18,12 @@ package baritone.utils.schematic.format.defaults; import baritone.utils.schematic.StaticSchematic; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.datafix.fixes.ItemIntIDToString; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.datafix.fixes.ItemIdFix; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; /** * @author Brady @@ -31,7 +31,7 @@ */ public final class MCEditSchematic extends StaticSchematic { - public MCEditSchematic(CompoundNBT schematic) { + public MCEditSchematic(CompoundTag schematic) { String type = schematic.getString("Materials"); if (!type.equals("Alpha")) { throw new IllegalStateException("bad schematic " + type); @@ -62,10 +62,10 @@ public MCEditSchematic(CompoundNBT schematic) { // additional is 0 through 15 inclusive since it's & 0xF above blockID |= additional[blockInd] << 8; } - Block block = Registry.BLOCK.getOrDefault(ResourceLocation.tryCreate(ItemIntIDToString.getItem(blockID))); + Block block = Registry.BLOCK.get(ResourceLocation.tryParse(ItemIdFix.getItem(blockID))); // int meta = metadata[blockInd] & 0xFF; // this.states[x][z][y] = block.getStateFromMeta(meta); - this.states[x][z][y] = block.getDefaultState(); + this.states[x][z][y] = block.defaultBlockState(); } } } diff --git a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java index 375b9a968..3c00b08c6 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java @@ -20,18 +20,17 @@ import baritone.utils.schematic.StaticSchematic; import baritone.utils.type.VarInt; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.state.Property; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.Registry; - import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; +import net.minecraft.core.Registry; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.Property; /** * @author Brady @@ -39,15 +38,15 @@ */ public final class SpongeSchematic extends StaticSchematic { - public SpongeSchematic(CompoundNBT nbt) { + public SpongeSchematic(CompoundTag nbt) { this.x = nbt.getInt("Width"); this.y = nbt.getInt("Height"); this.z = nbt.getInt("Length"); this.states = new BlockState[this.x][this.z][this.y]; Int2ObjectArrayMap palette = new Int2ObjectArrayMap<>(); - CompoundNBT paletteTag = nbt.getCompound("Palette"); - for (String tag : paletteTag.keySet()) { + CompoundTag paletteTag = nbt.getCompound("Palette"); + for (String tag : paletteTag.getAllKeys()) { int index = paletteTag.getInt(tag); SerializedBlockState serializedState = SerializedBlockState.getFromString(tag); @@ -107,11 +106,11 @@ private SerializedBlockState(ResourceLocation resourceLocation, Map { - Property property = block.getStateContainer().getProperty(key); + Property property = block.getStateDefinition().getProperty(key); if (property != null) { this.blockState = setPropertyValue(this.blockState, property, this.properties.get(key)); } @@ -147,9 +146,9 @@ private static SerializedBlockState getFromString(String s) { } private static > BlockState setPropertyValue(BlockState state, Property property, String value) { - Optional parsed = property.parseValue(value); + Optional parsed = property.getValue(value); if (parsed.isPresent()) { - return state.with(property, parsed.get()); + return state.setValue(property, parsed.get()); } else { throw new IllegalArgumentException("Invalid value for property " + property); } diff --git a/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java b/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java index 6a885dec0..7905c74aa 100644 --- a/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java +++ b/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java @@ -19,10 +19,9 @@ import baritone.api.schematic.IStaticSchematic; import com.github.lunatrius.schematica.client.world.SchematicWorld; -import net.minecraft.block.BlockState; -import net.minecraft.util.math.BlockPos; - import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; public final class SchematicAdapter implements IStaticSchematic { diff --git a/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java b/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java index fab688455..35b11c8e1 100644 --- a/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java @@ -20,9 +20,8 @@ import baritone.api.schematic.IStaticSchematic; import com.github.lunatrius.schematica.Schematica; import com.github.lunatrius.schematica.proxy.ClientProxy; +import net.minecraft.core.BlockPos; import net.minecraft.util.Tuple; -import net.minecraft.util.math.BlockPos; - import java.util.Optional; public enum SchematicaHelper { diff --git a/src/schematica_api/java/com/github/lunatrius/core/util/math/MBlockPos.java b/src/schematica_api/java/com/github/lunatrius/core/util/math/MBlockPos.java index 4c9da008c..383e27996 100644 --- a/src/schematica_api/java/com/github/lunatrius/core/util/math/MBlockPos.java +++ b/src/schematica_api/java/com/github/lunatrius/core/util/math/MBlockPos.java @@ -17,7 +17,7 @@ package com.github.lunatrius.core.util.math; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public class MBlockPos extends BlockPos { diff --git a/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java b/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java index 48923b073..8af684414 100644 --- a/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java +++ b/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java @@ -17,8 +17,8 @@ package com.github.lunatrius.schematica.api; -import net.minecraft.block.BlockState; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; public interface ISchematic { diff --git a/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java b/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java index fdcef8789..64a6a6fb7 100644 --- a/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java +++ b/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java @@ -18,12 +18,12 @@ package baritone.pathing.goals; import baritone.api.pathing.goals.GoalGetToBlock; -import net.minecraft.util.math.BlockPos; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import net.minecraft.core.BlockPos; import static org.junit.Assert.assertTrue; diff --git a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java index 072c30062..cc66b1eaa 100644 --- a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java +++ b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java @@ -18,8 +18,8 @@ package baritone.utils.pathing; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -51,24 +51,24 @@ public void testSimple() { BlockPos pos = new BlockPos(1, 2, 3); BetterBlockPos better = new BetterBlockPos(1, 2, 3); assertEquals(pos, better); - assertEquals(pos.up(), better.up()); - assertEquals(pos.down(), better.down()); + assertEquals(pos.above(), better.up()); + assertEquals(pos.below(), better.down()); assertEquals(pos.north(), better.north()); assertEquals(pos.south(), better.south()); assertEquals(pos.east(), better.east()); assertEquals(pos.west(), better.west()); for (Direction dir : Direction.values()) { - assertEquals(pos.offset(dir), better.offset(dir)); - assertEquals(pos.offset(dir, 0), pos); + assertEquals(pos.relative(dir), better.offset(dir)); + assertEquals(pos.relative(dir, 0), pos); assertEquals(better.offset(dir, 0), better); for (int i = -10; i < 10; i++) { - assertEquals(pos.offset(dir, i), better.offset(dir, i)); + assertEquals(pos.relative(dir, i), better.offset(dir, i)); } assertTrue(better.offset(dir, 0) == better); } for (int i = -10; i < 10; i++) { - assertEquals(pos.up(i), better.up(i)); - assertEquals(pos.down(i), better.down(i)); + assertEquals(pos.above(i), better.up(i)); + assertEquals(pos.below(i), better.down(i)); assertEquals(pos.north(i), better.north(i)); assertEquals(pos.south(i), better.south(i)); assertEquals(pos.east(i), better.east(i)); @@ -87,7 +87,7 @@ public void benchOne() { } long before1 = System.nanoTime() / 1000000L; for (int i = 0; i < 1000000; i++) { - pos.up(); + pos.above(); } long after1 = System.nanoTime() / 1000000L; try { @@ -113,11 +113,11 @@ public void benchN() { } long before1 = System.nanoTime() / 1000000L; for (int i = 0; i < 1000000; i++) { - pos.up(0); - pos.up(1); - pos.up(2); - pos.up(3); - pos.up(4); + pos.above(0); + pos.above(1); + pos.above(2); + pos.above(3); + pos.above(4); } long after1 = System.nanoTime() / 1000000L; try { From 41abda37c1e9f8ce57c06462da9c4d24cbe53d40 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Wed, 23 Jun 2021 13:29:34 -0600 Subject: [PATCH 178/935] fix migration for 1.17. (also proguard broke with j16...) --- build.gradle | 4 +- .../gradle/task/BaritoneGradleTask.java | 4 +- src/api/java/baritone/api/Settings.java | 1 + .../baritone/api/utils/BlockOptionalMeta.java | 3 +- .../baritone/api/utils/IPlayerContext.java | 2 +- .../baritone/api/utils/IPlayerController.java | 3 +- .../baritone/api/utils/RotationUtils.java | 4 +- .../baritone/api/utils/gui/BaritoneToast.java | 6 ++- .../launch/mixins/MixinChunkArray.java | 26 ++++++------ .../mixins/MixinClientChunkProvider.java | 6 ++- .../mixins/MixinClientPlayNetHandler.java | 25 +++++------- .../mixins/MixinClientPlayerEntity.java | 16 ++++---- .../mixins/MixinCommandSuggestionHelper.java | 24 +++++------ .../baritone/launch/mixins/MixinEntity.java | 10 ++--- .../launch/mixins/MixinItemStack.java | 6 +-- .../launch/mixins/MixinLivingEntity.java | 13 +++--- .../launch/mixins/MixinLootContext.java | 8 ++-- .../launch/mixins/MixinMinecraft.java | 10 ++--- .../launch/mixins/MixinNetworkManager.java | 24 +++++------ .../launch/mixins/MixinPlayerController.java | 6 +-- .../launch/mixins/MixinWorldRenderer.java | 2 +- src/main/java/baritone/Baritone.java | 2 +- .../baritone/behavior/InventoryBehavior.java | 21 +++++----- .../java/baritone/behavior/LookBehavior.java | 26 ++++++------ .../baritone/behavior/MemoryBehavior.java | 2 +- .../baritone/behavior/PathingBehavior.java | 20 +++++----- src/main/java/baritone/cache/CachedChunk.java | 2 +- .../java/baritone/cache/CachedRegion.java | 2 +- src/main/java/baritone/cache/ChunkPacker.java | 1 - .../java/baritone/cache/ContainerMemory.java | 2 +- .../java/baritone/cache/WorldProvider.java | 8 ++-- .../java/baritone/cache/WorldScanner.java | 6 +-- .../command/ExampleBaritoneControl.java | 2 +- .../command/defaults/BuildCommand.java | 2 +- .../command/defaults/ComeCommand.java | 2 +- .../defaults/ExploreFilterCommand.java | 2 +- .../command/defaults/HelpCommand.java | 27 +++++++------ .../command/defaults/RenderCommand.java | 4 +- .../baritone/command/defaults/SelCommand.java | 5 ++- .../baritone/command/defaults/SetCommand.java | 22 +++++----- .../command/defaults/SurfaceCommand.java | 6 +-- .../command/defaults/ThisWayCommand.java | 2 +- .../command/defaults/TunnelCommand.java | 4 +- .../java/baritone/event/GameEventHandler.java | 2 +- .../pathing/movement/CalculationContext.java | 2 +- .../baritone/pathing/movement/Movement.java | 8 ++-- .../pathing/movement/MovementHelper.java | 8 ++-- .../java/baritone/pathing/movement/Moves.java | 4 +- .../movement/movements/MovementAscend.java | 26 ++++++------ .../movement/movements/MovementDescend.java | 24 +++++------ .../movement/movements/MovementDiagonal.java | 14 +++---- .../movement/movements/MovementDownward.java | 4 +- .../movement/movements/MovementFall.java | 28 ++++++------- .../movement/movements/MovementParkour.java | 20 +++++----- .../movement/movements/MovementPillar.java | 31 +++++++------- .../movement/movements/MovementTraverse.java | 37 +++++++++-------- .../baritone/pathing/path/PathExecutor.java | 40 +++++++++---------- .../baritone/process/BackfillProcess.java | 2 +- .../java/baritone/process/BuilderProcess.java | 34 ++++++++-------- .../baritone/process/CustomGoalProcess.java | 2 +- .../java/baritone/process/FarmProcess.java | 3 +- .../baritone/process/GetToBlockProcess.java | 7 ++-- .../java/baritone/process/MineProcess.java | 13 ++---- .../java/baritone/selection/Selection.java | 12 +++--- .../baritone/selection/SelectionRenderer.java | 4 +- .../java/baritone/utils/BlockBreakHelper.java | 4 +- .../java/baritone/utils/BlockPlaceHelper.java | 6 +-- .../BlockStateInterfaceAccessWrapper.java | 11 +++++ src/main/java/baritone/utils/GuiClick.java | 20 +++++----- src/main/java/baritone/utils/IRenderer.java | 13 +++--- .../baritone/utils/InputOverrideHandler.java | 8 ++-- .../java/baritone/utils/PathRenderer.java | 26 +++++++----- src/main/java/baritone/utils/ToolSet.java | 6 +-- .../baritone/utils/pathing/Avoidance.java | 14 ++++--- .../utils/player/PrimaryPlayerContext.java | 2 +- .../utils/player/PrimaryPlayerController.java | 23 +++++------ .../utils/pathing/BetterBlockPosTest.java | 30 +++++++------- 77 files changed, 432 insertions(+), 429 deletions(-) diff --git a/build.gradle b/build.gradle index 27ad8fbb6..f9391f8f1 100755 --- a/build.gradle +++ b/build.gradle @@ -81,9 +81,9 @@ repositories { dependencies { if (compileType.equals("FORGE")) { - forge "net.minecraftforge:forge:1.16.5-36.1.0" + //forge "net.minecraftforge:forge:1.16.5-36.1.0" } - minecraft "com.mojang:minecraft:1.16.5" + minecraft "com.mojang:minecraft:1.17" mappings minecraft.officialMojangMappings() if (!compileType.equals("FORGE")) { modImplementation "net.fabricmc:fabric-loader:0.9.1+build.205" diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 89d066619..1aaf3578f 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -99,7 +99,7 @@ protected String formatVersion(String string) { } protected Path getRelativeFile(String file) { - return Paths.get(new File(getProject().getBuildDir(), file).getAbsolutePath()); + return Paths.get(new File(new File(getProject().getBuildDir(), "../"), file).getAbsolutePath()); } protected Path getTemporaryFile(String file) { @@ -107,6 +107,6 @@ protected Path getTemporaryFile(String file) { } protected Path getBuildFile(String file) { - return getRelativeFile("libs/" + file); + return getRelativeFile("build/libs/" + file); } } diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 89b03b535..14f00055e 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -30,6 +30,7 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.*; +import java.util.List; import java.util.function.Consumer; /** diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index f01c88c24..d7b1b8148 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -21,7 +21,6 @@ import com.google.common.collect.ImmutableSet; import io.netty.util.concurrent.ThreadPerTaskExecutor; import net.minecraft.core.BlockPos; -import net.minecraft.loot.*; import net.minecraft.resources.*; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.packs.PackResources; @@ -145,7 +144,7 @@ public BlockState getAnyBlockState() { public static LootTables getManager() { if (manager == null) { - PackRepository rpl = new PackRepository(Pack::new, new ServerPacksSource()); + PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource()); rpl.reload(); PackResources thePack = rpl.getAvailablePacks().iterator().next().open(); ReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(PackType.SERVER_DATA); diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index dd91bdab3..4e29b1459 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -86,7 +86,7 @@ default Vec3 playerHead() { } default Rotation playerRotations() { - return new Rotation(player().yRot, player().xRot); + return new Rotation(player().getYRot(), player().getXRot()); } static double eyeHeight(boolean ifSneaking) { diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index 7919654be..48142d13b 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -25,7 +25,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.ClickType; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.GameType; import net.minecraft.world.level.Level; import net.minecraft.world.phys.BlockHitResult; @@ -44,7 +43,7 @@ public interface IPlayerController { void resetBlockRemoving(); - ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, Player player); + void windowClick(int windowId, int slotId, int mouseButton, ClickType type, Player player); GameType getGameType(); diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 4c90be512..a6156354e 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -179,7 +179,7 @@ public static Optional reachable(LocalPlayer entity, BlockPos pos, dou * * or if you're a normal person literally all this does it ensure that we don't nudge the pitch to a normal level */ - Rotation hypothetical = new Rotation(entity.yRot, entity.xRot + 0.0001F); + Rotation hypothetical = new Rotation(entity.getYRot(), entity.getXRot() + 0.0001F); if (wouldSneak) { // the concern here is: what if we're looking at it now, but as soon as we start sneaking we no longer are HitResult result = RayTraceUtils.rayTraceTowards(entity, hypothetical, blockReachDistance, true); @@ -226,7 +226,7 @@ public static Optional reachable(LocalPlayer entity, BlockPos pos, dou */ public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3 offsetPos, double blockReachDistance, boolean wouldSneak) { Vec3 eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getEyePosition(1.0F); - Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.yRot, entity.xRot)); + Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.getYRot(), entity.getXRot())); HitResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); //System.out.println(result); if (result != null && result.getType() == HitResult.Type.BLOCK) { diff --git a/src/api/java/baritone/api/utils/gui/BaritoneToast.java b/src/api/java/baritone/api/utils/gui/BaritoneToast.java index 3429aa2df..3ed665e3e 100644 --- a/src/api/java/baritone/api/utils/gui/BaritoneToast.java +++ b/src/api/java/baritone/api/utils/gui/BaritoneToast.java @@ -43,8 +43,10 @@ public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long de this.newDisplay = false; } - toastGui.getMinecraft().getTextureManager().bind(new ResourceLocation("textures/gui/toasts.png")); - GlStateManager._color4f(1.0F, 1.0F, 1.0F, 255.0f); + + //TODO: fix + toastGui.getMinecraft().getTextureManager().bindForSetup(new ResourceLocation("textures/gui/toasts.png")); + //GlStateManager._color4f(1.0F, 1.0F, 1.0F, 255.0F); toastGui.blit(matrixStack, 0, 0, 0, 32, 160, 32); if (this.subtitle == null) { diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java index f6372c33e..a40fe4d31 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java @@ -25,23 +25,23 @@ import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.LevelChunk; -@Mixin(targets = "net.minecraft.client.multiplayer.ClientChunkProvider$ChunkArray") +@Mixin(targets = "net.minecraft.client.multiplayer.ClientChunkCache$Storage") public abstract class MixinChunkArray implements IChunkArray { @Shadow private AtomicReferenceArray chunks; @Shadow - private int viewDistance; + private int chunkRadius; @Shadow - private int sideLength; + private int viewRange; @Shadow - private int centerX; + private int viewCenterX; @Shadow - private int centerZ; + private int viewCenterZ; @Shadow - private int loaded; + private int chunkCount; @Shadow - protected abstract boolean inView(int x, int z); + protected abstract boolean inRange(int x, int z); @Shadow protected abstract int getIndex(int x, int z); @@ -51,17 +51,17 @@ public abstract class MixinChunkArray implements IChunkArray { @Override public int centerX() { - return centerX; + return viewCenterX; } @Override public int centerZ() { - return centerZ; + return viewCenterZ; } @Override public int viewDistance() { - return viewDistance; + return chunkRadius; } @Override @@ -71,15 +71,15 @@ public AtomicReferenceArray getChunks() { @Override public void copyFrom(IChunkArray other) { - centerX = other.centerX(); - centerZ = other.centerZ(); + viewCenterX = other.centerX(); + viewCenterZ = other.centerZ(); AtomicReferenceArray copyingFrom = other.getChunks(); for (int k = 0; k < copyingFrom.length(); ++k) { LevelChunk chunk = copyingFrom.get(k); if (chunk != null) { ChunkPos chunkpos = chunk.getPos(); - if (inView(chunkpos.x, chunkpos.z)) { + if (inRange(chunkpos.x, chunkpos.z)) { int index = getIndex(chunkpos.x, chunkpos.z); if (chunks.get(index) != null) { throw new IllegalStateException("Doing this would mutate the client's REAL loaded chunks?!"); diff --git a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java index fe89bc4e3..de465b82a 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java @@ -19,6 +19,7 @@ import baritone.utils.accessor.IChunkArray; import baritone.utils.accessor.IClientChunkProvider; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -30,13 +31,14 @@ @Mixin(ClientChunkCache.class) public class MixinClientChunkProvider implements IClientChunkProvider { + @Final @Shadow - private ClientLevel world; + ClientLevel level; @Override public ClientChunkCache createThreadSafeCopy() { IChunkArray arr = extractReferenceArray(); - ClientChunkCache result = new ClientChunkCache(world, arr.viewDistance() - 3); // -3 because its adds 3 for no reason lmao + ClientChunkCache result = new ClientChunkCache(level, arr.viewDistance() - 3); // -3 because its adds 3 for no reason lmao IChunkArray copyArr = ((IClientChunkProvider) result).extractReferenceArray(); copyArr.copyFrom(arr); if (copyArr.viewDistance() != arr.viewDistance()) { diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index b5348eb97..e3b1d04d2 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -25,12 +25,7 @@ import baritone.cache.CachedChunk; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.network.play.server.*; -import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; -import net.minecraft.network.protocol.game.ClientboundForgetLevelChunkPacket; -import net.minecraft.network.protocol.game.ClientboundLevelChunkPacket; -import net.minecraft.network.protocol.game.ClientboundPlayerCombatPacket; -import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket; +import net.minecraft.network.protocol.game.*; import net.minecraft.world.level.ChunkPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -69,7 +64,7 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { }*/ @Inject( - method = "handleChunkData", + method = "handleLevelChunk", at = @At("RETURN") ) private void postHandleChunkData(ClientboundLevelChunkPacket packetIn, CallbackInfo ci) { @@ -79,7 +74,7 @@ private void postHandleChunkData(ClientboundLevelChunkPacket packetIn, CallbackI ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent( EventState.POST, - packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, + !packetIn.isSkippable() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, packetIn.getX(), packetIn.getZ() ) @@ -89,7 +84,7 @@ private void postHandleChunkData(ClientboundLevelChunkPacket packetIn, CallbackI } @Inject( - method = "processChunkUnload", + method = "handleForgetLevelChunk", at = @At("HEAD") ) private void preChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackInfo ci) { @@ -104,7 +99,7 @@ private void preChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackIn } @Inject( - method = "processChunkUnload", + method = "handleForgetLevelChunk", at = @At("RETURN") ) private void postChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackInfo ci) { @@ -119,7 +114,7 @@ private void postChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackI } @Inject( - method = "handleBlockChange", + method = "handleBlockUpdate", at = @At("RETURN") ) private void postHandleBlockChange(ClientboundBlockUpdatePacket packetIn, CallbackInfo ci) { @@ -145,7 +140,7 @@ private void postHandleBlockChange(ClientboundBlockUpdatePacket packetIn, Callba } @Inject( - method = "handleMultiBlockChange", + method = "handleChunkBlocksUpdate", at = @At("RETURN") ) private void postHandleMultiBlockChange(ClientboundSectionBlocksUpdatePacket packetIn, CallbackInfo ci) { @@ -177,13 +172,13 @@ private void postHandleMultiBlockChange(ClientboundSectionBlocksUpdatePacket pac } @Inject( - method = "handleCombatEvent", + method = "handlePlayerCombatKill", at = @At( value = "INVOKE", - target = "net/minecraft/client/Minecraft.displayGuiScreen(Lnet/minecraft/client/gui/screen/Screen;)V" + target = "net/minecraft/client/Minecraft.setScreen(Lnet/minecraft/client/gui/screen/Screen;)V" ) ) - private void onPlayerDeath(ClientboundPlayerCombatPacket packetIn, CallbackInfo ci) { + private void onPlayerDeath(ClientboundPlayerCombatKillPacket packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { LocalPlayer player = ibaritone.getPlayerContext().player(); if (player != null && player.connection == (ClientPacketListener) (Object) this) { diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index 49e875ad8..c87875810 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -41,7 +41,7 @@ public class MixinClientPlayerEntity { @Inject( - method = "sendChatMessage", + method = "chat", at = @At("HEAD"), cancellable = true ) @@ -61,7 +61,7 @@ private void sendChatMessage(String msg, CallbackInfo ci) { method = "tick", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/player/ClientPlayerEntity.isPassenger()Z", + target = "net/minecraft/client/player/LocalPlayer.isPassenger()Z", shift = At.Shift.BY, by = -3 ) @@ -77,7 +77,7 @@ private void onPreUpdate(CallbackInfo ci) { method = "tick", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/player/ClientPlayerEntity.onUpdateWalkingPlayer()V", + target = "net/minecraft/client/player/LocalPlayer.sendPosition()V", shift = At.Shift.BY, by = 2 ) @@ -90,10 +90,10 @@ private void onPostUpdate(CallbackInfo ci) { } @Redirect( - method = "livingTick", + method = "aiStep", at = @At( value = "FIELD", - target = "net/minecraft/entity/player/PlayerAbilities.allowFlying:Z" + target = "net/minecraft/world/entity/player/Abilities.mayfly:Z" ) ) private boolean isAllowFlying(Abilities capabilities) { @@ -105,10 +105,10 @@ private boolean isAllowFlying(Abilities capabilities) { } @Redirect( - method = "livingTick", + method = "aiStep", at = @At( value = "INVOKE", - target = "net/minecraft/client/settings/KeyBinding.isKeyDown()Z" + target = "net/minecraft/client/KeyMapping.isDown()Z" ) ) private boolean isKeyDown(KeyMapping keyBinding) { @@ -129,7 +129,7 @@ private boolean isKeyDown(KeyMapping keyBinding) { } @Inject( - method = "updateRidden", + method = "rideTick", at = @At( value = "HEAD" ) diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index 0d3d1a2b4..63331502f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -45,23 +45,23 @@ public class MixinCommandSuggestionHelper { @Shadow @Final - private EditBox inputField; + EditBox input; @Shadow @Final - private List exceptionList; + private List commandUsage; @Shadow - private CompletableFuture suggestionsFuture; + private CompletableFuture pendingSuggestions; @Inject( - method = "init", + method = "updateCommandInfo", at = @At("HEAD"), cancellable = true ) private void preUpdateSuggestion(CallbackInfo ci) { // Anything that is present in the input text before the cursor position - String prefix = this.inputField.getValue().substring(0, Math.min(this.inputField.getValue().length(), this.inputField.getCursorPosition())); + String prefix = this.input.getValue().substring(0, Math.min(this.input.getValue().length(), this.input.getCursorPosition())); TabCompleteEvent event = new TabCompleteEvent(prefix); BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onPreTabComplete(event); @@ -75,14 +75,14 @@ private void preUpdateSuggestion(CallbackInfo ci) { ci.cancel(); // TODO: Support populating the command usage - this.exceptionList.clear(); + this.commandUsage.clear(); if (event.completions.length == 0) { - this.suggestionsFuture = Suggestions.empty(); + this.pendingSuggestions = Suggestions.empty(); } else { - int offset = this.inputField.getValue().endsWith(" ") - ? this.inputField.getCursorPosition() - : this.inputField.getValue().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes + int offset = this.input.getValue().endsWith(" ") + ? this.input.getCursorPosition() + : this.input.getValue().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes List suggestionList = Stream.of(event.completions) .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s)) @@ -92,8 +92,8 @@ private void preUpdateSuggestion(CallbackInfo ci) { StringRange.between(offset, offset + suggestionList.stream().mapToInt(s -> s.getText().length()).max().orElse(0)), suggestionList); - this.suggestionsFuture = new CompletableFuture<>(); - this.suggestionsFuture.complete(suggestions); + this.pendingSuggestions = new CompletableFuture<>(); + this.pendingSuggestions.complete(suggestions); } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index 5e86039f3..b48e919f2 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -31,7 +31,7 @@ public class MixinEntity { @Shadow - private float rotationYaw; + private float yRot; float yawRestore; @@ -40,14 +40,14 @@ public class MixinEntity { at = @At("HEAD") ) private void moveRelativeHead(CallbackInfo info) { - this.yawRestore = this.rotationYaw; + this.yawRestore = this.yRot; // noinspection ConstantConditions if (!LocalPlayer.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this) == null) { return; } - RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw); + RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.yRot); BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); - this.rotationYaw = motionUpdateRotationEvent.getYaw(); + this.yRot = motionUpdateRotationEvent.getYaw(); } @Inject( @@ -55,6 +55,6 @@ private void moveRelativeHead(CallbackInfo info) { at = @At("RETURN") ) private void moveRelativeReturn(CallbackInfo info) { - this.rotationYaw = this.yawRestore; + this.yRot = this.yawRestore; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinItemStack.java b/src/launch/java/baritone/launch/mixins/MixinItemStack.java index 110196e90..1582bc880 100644 --- a/src/launch/java/baritone/launch/mixins/MixinItemStack.java +++ b/src/launch/java/baritone/launch/mixins/MixinItemStack.java @@ -39,10 +39,10 @@ public abstract class MixinItemStack implements IItemStack { private int baritoneHash; @Shadow - protected abstract int getDamage(); + protected abstract int getDamageValue(); private void recalculateHash() { - baritoneHash = item == null ? -1 : item.hashCode() + getDamage(); + baritoneHash = item == null ? -1 : item.hashCode() + getDamageValue(); } @Inject( @@ -54,7 +54,7 @@ private void onInit(CallbackInfo ci) { } @Inject( - method = "setDamage", + method = "setDamageValue", at = @At("TAIL") ) private void onItemDamageSet(CallbackInfo ci) { diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index 363a36028..44a5c1e32 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -50,7 +50,7 @@ public MixinLivingEntity(EntityType entityTypeIn, Level worldIn) { } @Inject( - method = "jump", + method = "jumpFromGround", at = @At("HEAD") ) private void preMoveRelative(CallbackInfo ci) { @@ -58,25 +58,24 @@ private void preMoveRelative(CallbackInfo ci) { if (LocalPlayer.class.isInstance(this)) { IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone != null) { - this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.yRot); + this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.getYRot()); baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); } } } @Redirect( - method = "jump", + method = "jumpFromGround", at = @At( - value = "FIELD", - opcode = GETFIELD, - target = "net/minecraft/entity/LivingEntity.rotationYaw:F" + value = "INVOKE", + target = "net/minecraft/world/entity/LivingEntity.getYRot()F" ) ) private float overrideYaw(LivingEntity self) { if (self instanceof LocalPlayer && BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this) != null) { return this.jumpRotationEvent.getYaw(); } - return self.yRot; + return self.getYRot(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinLootContext.java b/src/launch/java/baritone/launch/mixins/MixinLootContext.java index 64d890cf9..2fe767d8e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLootContext.java +++ b/src/launch/java/baritone/launch/mixins/MixinLootContext.java @@ -31,10 +31,10 @@ public class MixinLootContext { @Redirect( - method = "build", + method = "create", at = @At( value = "INVOKE", - target = "net/minecraft/world/server/ServerWorld.getServer()Lnet/minecraft/server/MinecraftServer;" + target = "net/minecraft/server/level/ServerLevel.getServer()Lnet/minecraft/server/MinecraftServer;" ) ) private MinecraftServer getServer(ServerLevel world) { @@ -45,7 +45,7 @@ private MinecraftServer getServer(ServerLevel world) { } @Redirect( - method = "build", + method = "create", at = @At( value = "INVOKE", target = "net/minecraft/server/MinecraftServer.getLootTableManager()Lnet/minecraft/loot/LootTableManager;" @@ -59,7 +59,7 @@ private LootTables getLootTableManager(MinecraftServer server) { } @Redirect( - method = "build", + method = "create", at = @At( value = "INVOKE", target = "net/minecraft/server/MinecraftServer.func_229736_aP_()Lnet/minecraft/loot/LootPredicateManager;" diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index b1d2974ac..424082495 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -46,7 +46,7 @@ public class MixinMinecraft { @Shadow public LocalPlayer player; @Shadow - public ClientLevel world; + public ClientLevel level; @Inject( method = "", @@ -83,12 +83,12 @@ private void runTick(CallbackInfo ci) { } @Inject( - method = "loadWorld(Lnet/minecraft/client/world/ClientWorld;)V", + method = "setLevel", at = @At("HEAD") ) private void preLoadWorld(ClientLevel world, CallbackInfo ci) { // If we're unloading the world but one doesn't exist, ignore it - if (this.world == null && world == null) { + if (this.level == null && world == null) { return; } @@ -103,7 +103,7 @@ private void preLoadWorld(ClientLevel world, CallbackInfo ci) { } @Inject( - method = "loadWorld(Lnet/minecraft/client/world/ClientWorld;)V", + method = "setLevel", at = @At("RETURN") ) private void postLoadWorld(ClientLevel world, CallbackInfo ci) { @@ -123,7 +123,7 @@ private void postLoadWorld(ClientLevel world, CallbackInfo ci) { at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/gui/screen/Screen.passEvents:Z" + target = "net/minecraft/client/gui/screens/Screen.passEvents:Z" ) ) private boolean passEvents(Screen screen) { diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 29cebebab..632bdb4d1 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -47,35 +47,35 @@ public class MixinNetworkManager { @Shadow @Final - private PacketFlow direction; + private PacketFlow receiving; @Inject( - method = "dispatchPacket", + method = "sendPacket", at = @At("HEAD") ) private void preDispatchPacket(Packet inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { - if (this.direction != PacketFlow.CLIENTBOUND) { + if (this.receiving != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (Connection) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getConnection() == (Connection) (Object) this) { ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((Connection) (Object) this, EventState.PRE, inPacket)); } } } @Inject( - method = "dispatchPacket", + method = "sendPacket", at = @At("RETURN") ) private void postDispatchPacket(Packet inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { - if (this.direction != PacketFlow.CLIENTBOUND) { + if (this.receiving != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (Connection) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getConnection() == (Connection) (Object) this) { ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((Connection) (Object) this, EventState.POST, inPacket)); } } @@ -85,15 +85,15 @@ private void postDispatchPacket(Packet inPacket, final GenericFutureListener< method = "channelRead0", at = @At( value = "INVOKE", - target = "net/minecraft/network/NetworkManager.processPacket(Lnet/minecraft/network/IPacket;Lnet/minecraft/network/INetHandler;)V" + target = "net/minecraft/network/Connection.genericsFtw(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;)V" ) ) private void preProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { - if (this.direction != PacketFlow.CLIENTBOUND) { + if (this.receiving != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (Connection) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getConnection() == (Connection) (Object) this) { ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((Connection) (Object) this, EventState.PRE, packet)); } } @@ -104,11 +104,11 @@ private void preProcessPacket(ChannelHandlerContext context, Packet packet, C at = @At("RETURN") ) private void postProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { - if (!this.channel.isOpen() || this.direction != PacketFlow.CLIENTBOUND) { + if (!this.channel.isOpen() || this.receiving != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (Connection) (Object) this) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getConnection() == (Connection) (Object) this) { ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((Connection) (Object) this, EventState.POST, packet)); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinPlayerController.java b/src/launch/java/baritone/launch/mixins/MixinPlayerController.java index 18fdd4aec..34f39aee9 100644 --- a/src/launch/java/baritone/launch/mixins/MixinPlayerController.java +++ b/src/launch/java/baritone/launch/mixins/MixinPlayerController.java @@ -27,15 +27,15 @@ @Mixin(MultiPlayerGameMode.class) public abstract class MixinPlayerController implements IPlayerControllerMP { - @Accessor + @Accessor("isDestroying") @Override public abstract void setIsHittingBlock(boolean isHittingBlock); - @Accessor + @Accessor("destroyBlockPos") @Override public abstract BlockPos getCurrentBlock(); - @Invoker + @Invoker("ensureHasSentCarriedItem") @Override public abstract void callSyncCurrentPlayItem(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java index 34dbc9174..622721281 100644 --- a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java @@ -40,7 +40,7 @@ public class MixinWorldRenderer { @Inject( - method = "updateCameraAndRender", + method = "renderLevel", at = @At("RETURN"), locals = LocalCapture.CAPTURE_FAILSOFT ) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 2af9086e7..e5a9a453f 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -217,7 +217,7 @@ public void openClick() { new Thread(() -> { try { Thread.sleep(100); - Helper.mc.execute(() -> Helper.mc.displayGuiScreen(new GuiClick())); + Helper.mc.execute(() -> Helper.mc.setScreen(new GuiClick())); } catch (Exception ignored) {} }).start(); } diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 9dc47d12b..788753c32 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -23,7 +23,6 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.Direction; import net.minecraft.core.NonNullList; -import net.minecraft.item.*; import net.minecraft.world.InteractionHand; import net.minecraft.world.inventory.ClickType; import net.minecraft.world.item.BlockItem; @@ -57,7 +56,7 @@ public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } - if (ctx.player().openContainer != ctx.player().container) { + if (ctx.player().containerMenu != ctx.player().inventoryMenu) { // we have a crafting table or a chest or something open return; } @@ -81,7 +80,7 @@ public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { // we're using 0 and 8 for pickaxe and throwaway ArrayList candidates = new ArrayList<>(); for (int i = 1; i < 8; i++) { - if (ctx.player().inventory.mainInventory.get(i).isEmpty() && !disallowedHotbar.test(i)) { + if (ctx.player().getInventory().items.get(i).isEmpty() && !disallowedHotbar.test(i)) { candidates.add(i); } } @@ -99,11 +98,11 @@ public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { } private void swapWithHotBar(int inInventory, int inHotbar) { - ctx.playerController().windowClick(ctx.player().container.windowId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); + ctx.playerController().windowClick(ctx.player().inventoryMenu.containerId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); } private int firstValidThrowaway() { // TODO offhand idk - NonNullList invy = ctx.player().inventory.mainInventory; + NonNullList invy = ctx.player().getInventory().items; for (int i = 0; i < invy.size(); i++) { if (Baritone.settings().acceptableThrowawayItems.value.contains(invy.get(i).getItem())) { return i; @@ -113,7 +112,7 @@ private int firstValidThrowaway() { // TODO offhand idk } private int bestToolAgainst(Block against, Class cla$$) { - NonNullList invy = ctx.player().inventory.mainInventory; + NonNullList invy = ctx.player().getInventory().items; int bestInd = -1; double bestSpeed = -1; for (int i = 0; i < invy.size(); i++) { @@ -143,7 +142,7 @@ public boolean hasGenericThrowaway() { public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); - if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { return true; // gotem } if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && ((BlockItem) stack.getItem()).getBlock().equals(maybe.getBlock()))) { @@ -159,7 +158,7 @@ public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { public boolean throwaway(boolean select, Predicate desired) { LocalPlayer p = ctx.player(); - NonNullList inv = p.inventory.items; + NonNullList inv = p.getInventory().items; for (int i = 0; i < 9; i++) { ItemStack item = inv.get(i); // this usage of settings() is okay because it's only called once during pathing @@ -169,12 +168,12 @@ public boolean throwaway(boolean select, Predicate desired) { // acceptableThrowawayItems to the CalculationContext if (desired.test(item)) { if (select) { - p.inventory.selected = i; + p.getInventory().selected = i; } return true; } } - if (desired.test(p.inventory.offhand.get(0))) { + if (desired.test(p.getInventory().offhand.get(0))) { // main hand takes precedence over off hand // that means that if we have block A selected in main hand and block B in off hand, right clicking places block B // we've already checked above ^ and the main hand can't possible have an acceptablethrowawayitem @@ -184,7 +183,7 @@ public boolean throwaway(boolean select, Predicate desired) { ItemStack item = inv.get(i); if (item.isEmpty() || item.getItem() instanceof PickaxeItem) { if (select) { - p.inventory.selected = i; + p.getInventory().selected = i; } return true; } diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 801a5e43e..e9b0ca661 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -72,26 +72,26 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { switch (event.getState()) { case PRE: { if (this.force) { - ctx.player().rotationYaw = this.target.getYaw(); - float oldPitch = ctx.player().rotationPitch; + ctx.player().setYRot(this.target.getYaw()); + float oldPitch = ctx.player().getXRot(); float desiredPitch = this.target.getPitch(); - ctx.player().rotationPitch = desiredPitch; - ctx.player().rotationYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; - ctx.player().rotationPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; + ctx.player().setXRot(desiredPitch); + ctx.player().setYRot((float) (ctx.player().getYRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); + ctx.player().setXRot((float) (ctx.player().getXRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); if (desiredPitch == oldPitch && !Baritone.settings().freeLook.value) { nudgeToLevel(); } this.target = null; } if (silent) { - this.lastYaw = ctx.player().rotationYaw; - ctx.player().rotationYaw = this.target.getYaw(); + this.lastYaw = ctx.player().getYRot(); + ctx.player().setYRot(this.target.getYaw()); } break; } case POST: { if (silent) { - ctx.player().rotationYaw = this.lastYaw; + ctx.player().setYRot(this.lastYaw); this.target = null; } break; @@ -103,7 +103,7 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { public void pig() { if (this.target != null) { - ctx.player().rotationYaw = this.target.getYaw(); + ctx.player().setYRot(this.target.getYaw()); } } @@ -125,10 +125,10 @@ public void onPlayerRotationMove(RotationMoveEvent event) { * Nudges the player's pitch to a regular level. (Between {@code -20} and {@code 10}, increments are by {@code 1}) */ private void nudgeToLevel() { - if (ctx.player().rotationPitch < -20) { - ctx.player().rotationPitch++; - } else if (ctx.player().rotationPitch > 10) { - ctx.player().rotationPitch--; + if (ctx.player().getXRot() < -20) { + ctx.player().setXRot(ctx.player().getXRot() + 1); + } else if (ctx.player().getXRot() > 10) { + ctx.player().setXRot(ctx.player().getXRot() - 1); } } } diff --git a/src/main/java/baritone/behavior/MemoryBehavior.java b/src/main/java/baritone/behavior/MemoryBehavior.java index 48b9cdbb3..387d4715e 100644 --- a/src/main/java/baritone/behavior/MemoryBehavior.java +++ b/src/main/java/baritone/behavior/MemoryBehavior.java @@ -60,7 +60,7 @@ public void onPlayerDeath() { public EnderChestMemory getCurrent() { Path path = baritone.getWorldProvider().getCurrentWorld().directory; - return EnderChestMemory.getByServerAndPlayer(path.getParent(), ctx.player().getUniqueID()); + return EnderChestMemory.getByServerAndPlayer(path.getParent(), ctx.player().getUUID()); } public static class EnderChestMemory { diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 1c089df57..bebd28925 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -151,7 +151,7 @@ private void tickPath() { queuePathEvent(PathEvent.AT_GOAL); next = null; if (Baritone.settings().disconnectOnArrival.value) { - ctx.world().sendQuittingDisconnectingPacket(); + ctx.world().disconnect(); } return; } @@ -232,11 +232,11 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { if (current != null) { switch (event.getState()) { case PRE: - lastAutoJump = mc.gameSettings.autoJump; - mc.gameSettings.autoJump = false; + lastAutoJump = mc.options.autoJump; + mc.options.autoJump = false; break; case POST: - mc.gameSettings.autoJump = lastAutoJump; + mc.options.autoJump = lastAutoJump; break; default: break; @@ -378,10 +378,10 @@ public CalculationContext secretInternalGetCalculationContext() { */ public BetterBlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); - if (!MovementHelper.canWalkOn(ctx, feet.down())) { + if (!MovementHelper.canWalkOn(ctx, feet.below())) { if (ctx.player().isOnGround()) { - double playerX = ctx.player().getPositionVec().x; - double playerZ = ctx.player().getPositionVec().z; + double playerX = ctx.player().position().x; + double playerZ = ctx.player().position().z; ArrayList closest = new ArrayList<>(); for (int dx = -1; dx <= 1; dx++) { for (int dz = -1; dz <= 1; dz++) { @@ -397,7 +397,7 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class // can't possibly be sneaking off of this one, we're too far away continue; } - if (MovementHelper.canWalkOn(ctx, possibleSupport.down()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.up())) { + if (MovementHelper.canWalkOn(ctx, possibleSupport.below()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.above())) { // this is plausible //logDebug("Faking path start assuming player is standing off the edge of a block"); return possibleSupport; @@ -407,9 +407,9 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class } else { // !onGround // we're in the middle of a jump - if (MovementHelper.canWalkOn(ctx, feet.down().down())) { + if (MovementHelper.canWalkOn(ctx, feet.below().below())) { //logDebug("Faking path start assuming player is midair and falling"); - return feet.down(); + return feet.below(); } } } diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 2e9aba140..56485fd72 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -196,7 +196,7 @@ public final BlockState getBlock(int x, int y, int z, ResourceKey dimensi if (special != null) { String str = special.get(index); if (str != null) { - return BlockUtils.stringToBlockRequired(str).getDefaultState(); + return BlockUtils.stringToBlockRequired(str).defaultBlockState(); } } diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index 4e8597fbc..7581e2bdc 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -242,7 +242,7 @@ public synchronized void load(String directory) { for (int z = 0; z < 32; z++) { if (present[x][z]) { for (int i = 0; i < 256; i++) { - overview[x][z][i] = BlockUtils.stringToBlockRequired(in.readUTF()).getDefaultState(); + overview[x][z][i] = BlockUtils.stringToBlockRequired(in.readUTF()).defaultBlockState(); } } } diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 12507ffcb..f85fc3cce 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -20,7 +20,6 @@ import baritone.api.utils.BlockUtils; import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; -import net.minecraft.block.*; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.Level; diff --git a/src/main/java/baritone/cache/ContainerMemory.java b/src/main/java/baritone/cache/ContainerMemory.java index 0fa1b8f2f..cd9d2f587 100644 --- a/src/main/java/baritone/cache/ContainerMemory.java +++ b/src/main/java/baritone/cache/ContainerMemory.java @@ -176,7 +176,7 @@ public final int getSize() { public void updateFromOpenWindow(IPlayerContext ctx) { items.clear(); - items.addAll(ctx.player().openContainer.getInventory().subList(0, size)); + items.addAll(ctx.player().containerMenu.getItems().subList(0, size)); } } } diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 221ca4a51..7f992e6dc 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -60,14 +60,14 @@ public final void initWorld(ResourceKey world) { File directory; File readme; - IntegratedServer integratedServer = mc.getIntegratedServer(); + IntegratedServer integratedServer = mc.getSingleplayerServer(); // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file - if (mc.isSingleplayer()) { + if (mc.hasSingleplayerServer()) { directory = DimensionType.getStorageFolder(world, integratedServer.getWorldPath(LevelResource.ROOT).toFile()); // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world - if (directory.toPath().relativize(mc.gameDir.toPath()).getNameCount() != 2) { + if (directory.toPath().relativize(mc.gameDirectory.toPath()).getNameCount() != 2) { // subdirectory of the main save directory for this world directory = directory.getParentFile(); } @@ -75,7 +75,7 @@ public final void initWorld(ResourceKey world) { directory = new File(directory, "baritone"); readme = directory; } else { // Otherwise, the server must be remote... - String folderName = mc.isConnectedToRealms() ? "realms" : mc.getCurrentServerData().serverIP; + String folderName = mc.isConnectedToRealms() ? "realms" : mc.getCurrentServer().ip; if (SystemUtils.IS_OS_WINDOWS) { folderName = folderName.replace(":", "_"); } diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 3459f086d..b4ec4afc8 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -46,7 +46,7 @@ public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLooku if (filter.blocks().isEmpty()) { return res; } - ClientChunkCache chunkProvider = (ClientChunkCache) ctx.world().getChunkProvider(); + ClientChunkCache chunkProvider = (ClientChunkCache) ctx.world().getChunkSource(); int maxSearchRadiusSq = maxSearchRadius * maxSearchRadius; int playerChunkX = ctx.playerFeet().getX() >> 4; @@ -96,7 +96,7 @@ public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filt return Collections.emptyList(); } - ClientChunkCache chunkProvider = (ClientChunkCache) ctx.world().getChunkProvider(); + ClientChunkCache chunkProvider = (ClientChunkCache) ctx.world().getChunkSource(); LevelChunk chunk = chunkProvider.getChunk(pos.x, pos.z, null, false); int playerY = ctx.playerFeet().getY(); @@ -116,7 +116,7 @@ public int repack(IPlayerContext ctx) { @Override public int repack(IPlayerContext ctx, int range) { - ChunkSource chunkProvider = ctx.world().getChunkProvider(); + ChunkSource chunkProvider = ctx.world().getChunkSource(); ICachedWorld cachedWorld = ctx.worldData().getCachedWorld(); BetterBlockPos playerPos = ctx.playerFeet(); diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index 81ea02e50..eac4ccf24 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -99,7 +99,7 @@ public boolean runCommand(String msg) { return false; } else if (msg.trim().equalsIgnoreCase("orderpizza")) { try { - ((IGuiScreen) mc.currentScreen).openLinkInvoker(new URI("https://www.dominos.com/en/pages/order/")); + ((IGuiScreen) mc.screen).openLinkInvoker(new URI("https://www.dominos.com/en/pages/order/")); } catch (NullPointerException | URISyntaxException ignored) {} return false; } diff --git a/src/main/java/baritone/command/defaults/BuildCommand.java b/src/main/java/baritone/command/defaults/BuildCommand.java index 75c1673d4..622aef4f8 100644 --- a/src/main/java/baritone/command/defaults/BuildCommand.java +++ b/src/main/java/baritone/command/defaults/BuildCommand.java @@ -35,7 +35,7 @@ public class BuildCommand extends Command { - private static final File schematicsDir = new File(mc.gameDir, "schematics"); + private static final File schematicsDir = new File(mc.gameDirectory, "schematics"); public BuildCommand(IBaritone baritone) { super(baritone, "build"); diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index eb06e4ff0..5cbed55bc 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -37,7 +37,7 @@ public ComeCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); - Entity entity = mc.getRenderViewEntity(); + Entity entity = mc.getCameraEntity(); if (entity == null) { throw new CommandInvalidStateException("render view entity is null"); } diff --git a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java index c2057551f..504f7c146 100644 --- a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java @@ -41,7 +41,7 @@ public ExploreFilterCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(2); - File file = args.getDatatypePost(RelativeFile.INSTANCE, mc.gameDir.getAbsoluteFile().getParentFile()); + File file = args.getDatatypePost(RelativeFile.INSTANCE, mc.gameDirectory.getAbsoluteFile().getParentFile()); boolean invert = false; if (args.hasAny()) { if (args.getString().equalsIgnoreCase("invert")) { diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index b1c9783d5..f111b4476 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -29,8 +29,11 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; + +import net.minecraft.ChatFormatting; import net.minecraft.network.chat.BaseComponent; import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.TextComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; @@ -55,22 +58,22 @@ public void execute(String label, IArgConsumer args) throws CommandException { command -> { String names = String.join("/", command.getNames()); String name = command.getNames().get(0); - TextComponent shortDescComponent = new StringTextComponent(" - " + command.getShortDesc()); - shortDescComponent.setStyle(shortDescComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); - TextComponent namesComponent = new StringTextComponent(names); - namesComponent.setStyle(namesComponent.getStyle().setFormatting(TextFormatting.WHITE)); - TextComponent hoverComponent = new StringTextComponent(""); - hoverComponent.setStyle(hoverComponent.getStyle().setFormatting(TextFormatting.GRAY)); + TextComponent shortDescComponent = new TextComponent(" - " + command.getShortDesc()); + shortDescComponent.setStyle(shortDescComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); + TextComponent namesComponent = new TextComponent(names); + namesComponent.setStyle(namesComponent.getStyle().withColor(ChatFormatting.WHITE)); + TextComponent hoverComponent = new TextComponent(""); + hoverComponent.setStyle(hoverComponent.getStyle().withColor(ChatFormatting.GRAY)); hoverComponent.append(namesComponent); - hoverComponent.appendString("\n" + command.getShortDesc()); - hoverComponent.appendString("\n\nClick to view full help"); + hoverComponent.append("\n" + command.getShortDesc()); + hoverComponent.append("\n\nClick to view full help"); String clickCommand = FORCE_COMMAND_PREFIX + String.format("%s %s", label, command.getNames().get(0)); - TextComponent component = new StringTextComponent(name); - component.setStyle(component.getStyle().setFormatting(TextFormatting.GRAY)); + TextComponent component = new TextComponent(name); + component.setStyle(component.getStyle().withColor(ChatFormatting.GRAY)); component.append(shortDescComponent); component.setStyle(component.getStyle() - .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) - .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, clickCommand))); + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) + .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, clickCommand))); return component; }, FORCE_COMMAND_PREFIX + label diff --git a/src/main/java/baritone/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java index a77add6e6..2bbfa87cd 100644 --- a/src/main/java/baritone/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -37,8 +37,8 @@ public RenderCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); BetterBlockPos origin = ctx.playerFeet(); - int renderDistance = (mc.gameSettings.renderDistanceChunks + 1) * 16; - mc.worldRenderer.markBlockRangeForRenderUpdate( + int renderDistance = (mc.options.renderDistance + 1) * 16; + mc.levelRenderer.setBlocksDirty( origin.x - renderDistance, 0, origin.z - renderDistance, diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index e2f94ccf4..635e0a240 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -39,6 +39,7 @@ import baritone.utils.IRenderer; import java.awt.*; import java.util.*; +import java.util.List; import java.util.function.Function; import java.util.stream.Stream; import net.minecraft.core.Direction; @@ -64,7 +65,7 @@ public void onRenderPass(RenderEvent event) { float lineWidth = Baritone.settings().selectionLineWidth.value; boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value; IRenderer.startLines(color, opacity, lineWidth, ignoreDepth); - IRenderer.drawAABB(event.getModelViewStack(), new AABB(pos1, pos1.add(1, 1, 1))); + IRenderer.drawAABB(event.getModelViewStack(), new AABB(pos1, pos1.offset(1, 1, 1))); IRenderer.endLines(ignoreDepth); } }); @@ -80,7 +81,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == Action.POS2 && pos1 == null) { throw new CommandInvalidStateException("Set pos1 first before using pos2"); } - BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(mc.getRenderViewEntity().getPosition()) : ctx.playerFeet(); + BetterBlockPos playerPos = mc.getCameraEntity() != null ? BetterBlockPos.from(mc.getCameraEntity().blockPosition()) : ctx.playerFeet(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); if (action == Action.POS1) { diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index b9ddc7a79..0c3597e20 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -77,23 +77,23 @@ public void execute(String label, IArgConsumer args) throws CommandException { : String.format("All %ssettings:", viewModified ? "modified " : "") ), setting -> { - TextComponent typeComponent = new StringTextComponent(String.format( + TextComponent typeComponent = new TextComponent(String.format( " (%s)", settingTypeToString(setting) )); - typeComponent.setStyle(typeComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); - TextComponent hoverComponent = new StringTextComponent(""); - hoverComponent.setStyle(hoverComponent.getStyle().setFormatting(TextFormatting.GRAY)); - hoverComponent.appendString(setting.getName()); - hoverComponent.appendString(String.format("\nType: %s", settingTypeToString(setting))); - hoverComponent.appendString(String.format("\n\nValue:\n%s", settingValueToString(setting))); + typeComponent.setStyle(typeComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); + TextComponent hoverComponent = new TextComponent(""); + hoverComponent.setStyle(hoverComponent.getStyle().withColor(ChatFormatting.GRAY)); + hoverComponent.append(setting.getName()); + hoverComponent.append(String.format("\nType: %s", settingTypeToString(setting))); + hoverComponent.append(String.format("\n\nValue:\n%s", settingValueToString(setting))); String commandSuggestion = Baritone.settings().prefix.value + String.format("set %s ", setting.getName()); - TextComponent component = new StringTextComponent(setting.getName()); - component.setStyle(component.getStyle().setFormatting(TextFormatting.GRAY)); + TextComponent component = new TextComponent(setting.getName()); + component.setStyle(component.getStyle().withColor(ChatFormatting.GRAY)); component.append(typeComponent); component.setStyle(component.getStyle() - .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) - .setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, commandSuggestion))); + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) + .withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, commandSuggestion))); return component; }, FORCE_COMMAND_PREFIX + "set " + arg + " " + search diff --git a/src/main/java/baritone/command/defaults/SurfaceCommand.java b/src/main/java/baritone/command/defaults/SurfaceCommand.java index 9eeacc742..3bbd4d738 100644 --- a/src/main/java/baritone/command/defaults/SurfaceCommand.java +++ b/src/main/java/baritone/command/defaults/SurfaceCommand.java @@ -43,7 +43,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { // Ensure this command will not run if you are above the surface level and the block above you is air // As this would imply that your are already on the open surface - if (playerPos.getY() > surfaceLevel && mc.world.getBlockState(playerPos.up()).getBlock() instanceof AirBlock) { + if (playerPos.getY() > surfaceLevel && mc.level.getBlockState(playerPos.above()).getBlock() instanceof AirBlock) { logDirect("Already at surface"); return; } @@ -53,8 +53,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { for (int currentIteratedY = startingYPos; currentIteratedY < worldHeight; currentIteratedY++) { final BetterBlockPos newPos = new BetterBlockPos(playerPos.getX(), currentIteratedY, playerPos.getZ()); - if (!(mc.world.getBlockState(newPos).getBlock() instanceof AirBlock) && newPos.getY() > playerPos.getY()) { - Goal goal = new GoalBlock(newPos.up()); + if (!(mc.level.getBlockState(newPos).getBlock() instanceof AirBlock) && newPos.getY() > playerPos.getY()) { + Goal goal = new GoalBlock(newPos.above()); logDirect(String.format("Going to: %s", goal.toString())); baritone.getCustomGoalProcess().setGoalAndPath(goal); return; diff --git a/src/main/java/baritone/command/defaults/ThisWayCommand.java b/src/main/java/baritone/command/defaults/ThisWayCommand.java index 0c10bba30..d6c59f078 100644 --- a/src/main/java/baritone/command/defaults/ThisWayCommand.java +++ b/src/main/java/baritone/command/defaults/ThisWayCommand.java @@ -38,7 +38,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { args.requireExactly(1); GoalXZ goal = GoalXZ.fromDirection( ctx.playerFeetAsVec(), - ctx.player().rotationYawHead, + ctx.player().getYHeadRot(), args.getAs(Double.class) ); baritone.getCustomGoalProcess().setGoal(goal); diff --git a/src/main/java/baritone/command/defaults/TunnelCommand.java b/src/main/java/baritone/command/defaults/TunnelCommand.java index f958c9d20..dec304a03 100644 --- a/src/main/java/baritone/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/command/defaults/TunnelCommand.java @@ -54,7 +54,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { width--; BlockPos corner1; BlockPos corner2; - Direction enumFacing = ctx.player().getHorizontalFacing(); + Direction enumFacing = ctx.player().getDirection(); int addition = ((width % 2 == 0) ? 0 : 1); switch (enumFacing) { case EAST: @@ -82,7 +82,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } else { Goal goal = new GoalStrictDirection( ctx.playerFeet(), - ctx.player().getHorizontalFacing() + ctx.player().getDirection() ); baritone.getCustomGoalProcess().setGoalAndPath(goal); logDirect(String.format("Goal: %s", goal.toString())); diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 0f36fb444..5056b6a0b 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -114,7 +114,7 @@ public final void onWorldEvent(WorldEvent event) { if (event.getState() == EventState.POST) { cache.closeWorld(); if (event.getWorld() != null) { - cache.initWorld(event.getWorld().getDimensionKey()); + cache.initWorld(event.getWorld().dimension()); } } diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 9792238ce..e8b7ab142 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -85,7 +85,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); this.toolSet = new ToolSet(player); this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); - this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && Inventory.isHotbarSlot(player.inventory.findSlotMatchingItem(STACK_BUCKET_WATER)) && world.dimension() != Level.NETHER; + this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && Inventory.isHotbarSlot(player.getInventory().findSlotMatchingItem(STACK_BUCKET_WATER)) && world.dimension() != Level.NETHER; this.canSprint = Baritone.settings().allowSprint.value && player.getFoodData().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; this.allowBreak = Baritone.settings().allowBreak.value; diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 312bb0f28..ac502b269 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -17,8 +17,6 @@ package baritone.pathing.movement; -import BetterBlockPos; -import IPlayerContext; import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.pathing.movement.IMovement; @@ -123,12 +121,12 @@ protected boolean playerInValidPosition() { */ @Override public MovementStatus update() { - ctx.player().abilities.isFlying = false; + ctx.player().getAbilities().flying = false; currentState = updateState(currentState); if (MovementHelper.isLiquid(ctx, ctx.playerFeet())) { currentState.setInput(Input.JUMP, true); } - if (ctx.player().isEntityInsideOpaqueBlock()) { + if (ctx.player().isInWall()) { ctx.getSelectedBlock().ifPresent(pos -> MovementHelper.switchToBestToolFor(ctx, BlockStateInterface.get(ctx, pos))); currentState.setInput(Input.CLICK_LEFT, true); } @@ -158,7 +156,7 @@ protected boolean prepared(MovementState state) { } boolean somethingInTheWay = false; for (BetterBlockPos blockPos : positionsToBreak) { - if (!ctx.world().getEntitiesWithinAABB(FallingBlockEntity.class, new AABB(0, 0, 0, 1, 1.1, 1).move(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { + if (!ctx.world().getEntities(null, new AABB(0, 0, 0, 1, 1.1, 1).move(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { return false; } if (!MovementHelper.canWalkThrough(ctx, blockPos)) { // can't break air, so don't try diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index f27c4d62b..b2b3d05b0 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -27,10 +27,8 @@ import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; -import net.minecraft.block.*; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.fluid.*; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.AbstractSkullBlock; import net.minecraft.world.level.block.AirBlock; @@ -334,7 +332,7 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this return true; } - if (block == Blocks.FARMLAND || block == Blocks.GRASS_PATH) { + if (block == Blocks.FARMLAND || block == Blocks.DIRT_PATH) { return true; } if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { @@ -465,7 +463,7 @@ static void switchToBestToolFor(IPlayerContext ctx, BlockState b) { */ static void switchToBestToolFor(IPlayerContext ctx, BlockState b, ToolSet ts, boolean preferSilkTouch) { if (!Baritone.settings().disableAutoTool.value && !Baritone.settings().assumeExternalAutoTool.value) { - ctx.player().inventory.currentItem = ts.getBestSlot(b.getBlock(), preferSilkTouch); + ctx.player().getInventory().selected = ts.getBestSlot(b.getBlock(), preferSilkTouch); } } @@ -473,7 +471,7 @@ static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { state.setTarget(new MovementTarget( new Rotation(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(pos), - ctx.playerRotations()).getYaw(), ctx.player().rotationPitch), + ctx.playerRotations()).getYaw(), ctx.player().getXRot()), false )).setInput(Input.MOVE_FORWARD, true); } diff --git a/src/main/java/baritone/pathing/movement/Moves.java b/src/main/java/baritone/pathing/movement/Moves.java index a76bf81fd..87b5db6ac 100644 --- a/src/main/java/baritone/pathing/movement/Moves.java +++ b/src/main/java/baritone/pathing/movement/Moves.java @@ -31,7 +31,7 @@ public enum Moves { DOWNWARD(0, -1, 0) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return new MovementDownward(context.getBaritone(), src, src.down()); + return new MovementDownward(context.getBaritone(), src, src.below()); } @Override @@ -43,7 +43,7 @@ public double cost(CalculationContext context, int x, int y, int z) { PILLAR(0, +1, 0) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return new MovementPillar(context.getBaritone(), src, src.up()); + return new MovementPillar(context.getBaritone(), src, src.above()); } @Override diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index a735f0f7a..fa70b6ddd 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -39,7 +39,7 @@ public class MovementAscend extends Movement { private int ticksWithoutPlacement = 0; public MovementAscend(IBaritone baritone, BetterBlockPos src, BetterBlockPos dest) { - super(baritone, src, dest, new BetterBlockPos[]{dest, src.up(2), dest.up()}, dest.down()); + super(baritone, src, dest, new BetterBlockPos[]{dest, src.above(2), dest.above()}, dest.below()); } @Override @@ -55,12 +55,12 @@ public double calculateCost(CalculationContext context) { @Override protected Set calculateValidPositions() { - BetterBlockPos prior = new BetterBlockPos(src.subtract(getDirection()).up()); // sometimes we back up to place the block, also sprint ascends, also skip descend to straight ascend + BetterBlockPos prior = new BetterBlockPos(src.subtract(getDirection()).above()); // sometimes we back up to place the block, also sprint ascends, also skip descend to straight ascend return ImmutableSet.of(src, - src.up(), + src.above(), dest, prior, - prior.up() + prior.above() ); } @@ -167,14 +167,14 @@ public MovementState updateState(MovementState state) { return state; } - if (ctx.playerFeet().equals(dest) || ctx.playerFeet().equals(dest.add(getDirection().below()))) { + if (ctx.playerFeet().equals(dest) || ctx.playerFeet().equals(dest.offset(getDirection().below()))) { return state.setStatus(MovementStatus.SUCCESS); } BlockState jumpingOnto = BlockStateInterface.get(ctx, positionToPlace); if (!MovementHelper.canWalkOn(ctx, positionToPlace, jumpingOnto)) { ticksWithoutPlacement++; - if (MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), false, true) == PlaceResult.READY_TO_PLACE) { + if (MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), false, true) == PlaceResult.READY_TO_PLACE) { state.setInput(Input.SNEAK, true); if (ctx.player().isCrouching()) { state.setInput(Input.CLICK_RIGHT, true); @@ -188,21 +188,21 @@ public MovementState updateState(MovementState state) { return state; } MovementHelper.moveTowards(ctx, state, dest); - if (MovementHelper.isBottomSlab(jumpingOnto) && !MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.down()))) { + if (MovementHelper.isBottomSlab(jumpingOnto) && !MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.below()))) { return state; // don't jump while walking from a non double slab into a bottom slab } - if (Baritone.settings().assumeStep.value || ctx.playerFeet().equals(src.up())) { + if (Baritone.settings().assumeStep.value || ctx.playerFeet().equals(src.above())) { // no need to hit space if we're already jumping return state; } int xAxis = Math.abs(src.getX() - dest.getX()); // either 0 or 1 int zAxis = Math.abs(src.getZ() - dest.getZ()); // either 0 or 1 - double flatDistToNext = xAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().getPositionVec().x) + zAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().getPositionVec().z); - double sideDist = zAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().getPositionVec().x) + xAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().getPositionVec().z); + double flatDistToNext = xAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().position().x) + zAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().position().z); + double sideDist = zAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().position().x) + xAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().position().z); - double lateralMotion = xAxis * ctx.player().getMotion().z + zAxis * ctx.player().getMotion().x; + double lateralMotion = xAxis * ctx.player().getDeltaMovement().z + zAxis * ctx.player().getDeltaMovement().x; if (Math.abs(lateralMotion) > 0.1) { return state; } @@ -222,9 +222,9 @@ public MovementState updateState(MovementState state) { } public boolean headBonkClear() { - BetterBlockPos startUp = src.up(2); + BetterBlockPos startUp = src.above(2); for (int i = 0; i < 4; i++) { - BetterBlockPos check = startUp.offset(Direction.from2DDataValue(i)); + BetterBlockPos check = startUp.relative(Direction.from2DDataValue(i)); if (!MovementHelper.canWalkThrough(ctx, check)) { // We might bonk our head return false; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index a4639cdab..7024e28b9 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -44,7 +44,7 @@ public class MovementDescend extends Movement { private int numTicks = 0; public MovementDescend(IBaritone baritone, BetterBlockPos start, BetterBlockPos end) { - super(baritone, start, end, new BetterBlockPos[]{end.up(2), end.up(), end}, end.down()); + super(baritone, start, end, new BetterBlockPos[]{end.above(2), end.above(), end}, end.below()); } @Override @@ -65,7 +65,7 @@ public double calculateCost(CalculationContext context) { @Override protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest.up(), dest); + return ImmutableSet.of(src, dest.above(), dest); } public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { @@ -211,11 +211,11 @@ public MovementState updateState(MovementState state) { BlockPos playerFeet = ctx.playerFeet(); BlockPos fakeDest = new BlockPos(dest.getX() * 2 - src.getX(), dest.getY(), dest.getZ() * 2 - src.getZ()); - if ((playerFeet.equals(dest) || playerFeet.equals(fakeDest)) && (MovementHelper.isLiquid(ctx, dest) || ctx.player().getPositionVec().y - dest.getY() < 0.5)) { // lilypads + if ((playerFeet.equals(dest) || playerFeet.equals(fakeDest)) && (MovementHelper.isLiquid(ctx, dest) || ctx.player().position().y - dest.getY() < 0.5)) { // lilypads // Wait until we're actually on the ground before saying we're done because sometimes we continue to fall if the next action starts immediately return state.setStatus(MovementStatus.SUCCESS); /* else { - // System.out.println(player().getPositionVec().y + " " + playerFeet.getY() + " " + (player().getPositionVec().y - playerFeet.getY())); + // System.out.println(player().position().y + " " + playerFeet.getY() + " " + (player().position().y - playerFeet.getY())); }*/ } if (safeMode()) { @@ -225,16 +225,16 @@ public MovementState updateState(MovementState state) { state.setTarget(new MovementState.MovementTarget( new Rotation(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3(destX, dest.getY(), destZ), - new Rotation(player.yRot, player.xRot)).getYaw(), player.xRot), + new Rotation(player.getYRot(), player.getXRot())).getYaw(), player.getXRot()), false )).setInput(Input.MOVE_FORWARD, true); return state; } - double diffX = ctx.player().getPositionVec().x - (dest.getX() + 0.5); - double diffZ = ctx.player().getPositionVec().z - (dest.getZ() + 0.5); + double diffX = ctx.player().position().x - (dest.getX() + 0.5); + double diffZ = ctx.player().position().z - (dest.getZ() + 0.5); double ab = Math.sqrt(diffX * diffX + diffZ * diffZ); - double x = ctx.player().getPositionVec().x - (src.getX() + 0.5); - double z = ctx.player().getPositionVec().z - (src.getZ() + 0.5); + double x = ctx.player().position().x - (src.getX() + 0.5); + double z = ctx.player().position().z - (src.getZ() + 0.5); double fromStart = Math.sqrt(x * x + z * z); if (!playerFeet.equals(dest) || ab > 0.25) { if (numTicks++ < 20 && fromStart < 1.25) { @@ -249,7 +249,7 @@ public MovementState updateState(MovementState state) { public boolean safeMode() { // (dest - src) + dest is offset 1 more in the same direction // so it's the block we'd need to worry about running into if we decide to sprint straight through this descend - BlockPos into = dest.subtract(src.down()).add(dest); + BlockPos into = dest.subtract(src.below()).offset(dest); if (skipToAscend()) { // if dest extends into can't walk through, but the two above are can walk through, then we can overshoot and glitch in that weird way return true; @@ -263,7 +263,7 @@ public boolean safeMode() { } public boolean skipToAscend() { - BlockPos into = dest.subtract(src.down()).add(dest); - return !MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into)) && MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into).up()) && MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into).up(2)); + BlockPos into = dest.subtract(src.below()).offset(dest); + return !MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into)) && MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into).above()) && MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into).above(2)); } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index f5947c639..fc3fa2f45 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -44,16 +44,16 @@ public class MovementDiagonal extends Movement { private static final double SQRT_2 = Math.sqrt(2); public MovementDiagonal(IBaritone baritone, BetterBlockPos start, Direction dir1, Direction dir2, int dy) { - this(baritone, start, start.offset(dir1), start.offset(dir2), dir2, dy); + this(baritone, start, start.relative(dir1), start.relative(dir2), dir2, dy); // super(start, start.offset(dir1).offset(dir2), new BlockPos[]{start.offset(dir1), start.offset(dir1).up(), start.offset(dir2), start.offset(dir2).up(), start.offset(dir1).offset(dir2), start.offset(dir1).offset(dir2).up()}, new BlockPos[]{start.offset(dir1).offset(dir2).down()}); } private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPos dir1, BetterBlockPos dir2, Direction drr2, int dy) { - this(baritone, start, dir1.offset(drr2).up(dy), dir1, dir2); + this(baritone, start, dir1.relative(drr2).above(dy), dir1, dir2); } private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPos end, BetterBlockPos dir1, BetterBlockPos dir2) { - super(baritone, start, end, new BetterBlockPos[]{dir1, dir1.up(), dir2, dir2.up(), end, end.up()}); + super(baritone, start, end, new BetterBlockPos[]{dir1, dir1.above(), dir2, dir2.above(), end, end.above()}); } @Override @@ -100,10 +100,10 @@ protected Set calculateValidPositions() { BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); if (dest.y < src.y) { - return ImmutableSet.of(src, dest.up(), diagA, diagB, dest, diagA.down(), diagB.down()); + return ImmutableSet.of(src, dest.above(), diagA, diagB, dest, diagA.below(), diagB.below()); } if (dest.y > src.y) { - return ImmutableSet.of(src, src.up(), diagA, diagB, dest, diagA.up(), diagB.up()); + return ImmutableSet.of(src, src.above(), diagA, diagB, dest, diagA.above(), diagB.above()); } return ImmutableSet.of(src, dest, diagA, diagB); } @@ -252,10 +252,10 @@ public MovementState updateState(MovementState state) { if (ctx.playerFeet().equals(dest)) { return state.setStatus(MovementStatus.SUCCESS); - } else if (!playerInValidPosition() && !(MovementHelper.isLiquid(ctx, src) && getValidPositions().contains(ctx.playerFeet().up()))) { + } else if (!playerInValidPosition() && !(MovementHelper.isLiquid(ctx, src) && getValidPositions().contains(ctx.playerFeet().above()))) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (dest.y > src.y && ctx.player().getPositionVec().y < src.y + 0.1 && ctx.player().collidedHorizontally) { + if (dest.y > src.y && ctx.player().position().y < src.y + 0.1 && ctx.player().horizontalCollision) { state.setInput(Input.JUMP, true); } if (sprint()) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 7e32cd4f2..474886c5f 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -83,8 +83,8 @@ public MovementState updateState(MovementState state) { } else if (!playerInValidPosition()) { return state.setStatus(MovementStatus.UNREACHABLE); } - double diffX = ctx.player().getPositionVec().x - (dest.getX() + 0.5); - double diffZ = ctx.player().getPositionVec().z - (dest.getZ() + 0.5); + double diffX = ctx.player().position().x - (dest.getX() + 0.5); + double diffZ = ctx.player().position().z - (dest.getZ() + 0.5); double ab = Math.sqrt(diffX * diffX + diffZ * diffZ); if (numTicks++ < 10 && ab < 0.2) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index ed230dc6c..669f0a7dd 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -71,7 +71,7 @@ protected Set calculateValidPositions() { Set set = new HashSet<>(); set.add(src); for (int y = src.y - dest.y; y >= 0; y--) { - set.add(dest.up(y)); + set.add(dest.above(y)); } return set; } @@ -96,16 +96,16 @@ public MovementState updateState(MovementState state) { Block destBlock = destState.getBlock(); boolean isWater = destState.getFluidState().getType() instanceof WaterFluid; if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { - if (!Inventory.isHotbarSlot(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().getDimensionKey() == Level.NETHER) { + if (!Inventory.isHotbarSlot(ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_WATER)) || ctx.world().dimension() == Level.NETHER) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (ctx.player().getPositionVec().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().isOnGround()) { - ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER); + if (ctx.player().position().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().isOnGround()) { + ctx.player().getInventory().selected = ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_WATER); targetRotation = new Rotation(toDest.getYaw(), 90.0F); - if (ctx.isLookingAt(dest) || ctx.isLookingAt(dest.down())) { + if (ctx.isLookingAt(dest) || ctx.isLookingAt(dest.below())) { state.setInput(Input.CLICK_RIGHT, true); } } @@ -115,17 +115,17 @@ public MovementState updateState(MovementState state) { } else { state.setTarget(new MovementTarget(toDest, false)); } - if (playerFeet.equals(dest) && (ctx.player().getPositionVec().y - playerFeet.getY() < 0.094 || isWater)) { // 0.094 because lilypads + if (playerFeet.equals(dest) && (ctx.player().position().y - playerFeet.getY() < 0.094 || isWater)) { // 0.094 because lilypads if (isWater) { // only match water, not flowing water (which we cannot pick up with a bucket) - if (Inventory.isHotbarSlot(ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY))) { - ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY); - if (ctx.player().getMotion().y >= 0) { + if (Inventory.isHotbarSlot(ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_EMPTY))) { + ctx.player().getInventory().selected = ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_EMPTY); + if (ctx.player().getDeltaMovement().y >= 0) { return state.setInput(Input.CLICK_RIGHT, true); } else { return state; } } else { - if (ctx.player().getMotion().y >= 0) { + if (ctx.player().getDeltaMovement().y >= 0) { return state.setStatus(MovementStatus.SUCCESS); } // don't else return state; we need to stay centered because this water might be flowing under the surface } @@ -134,8 +134,8 @@ public MovementState updateState(MovementState state) { } } Vec3 destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) - if (Math.abs(ctx.player().getPositionVec().x + ctx.player().getMotion().x - destCenter.x) > 0.1 || Math.abs(ctx.player().getPositionVec().z + ctx.player().getMotion().z - destCenter.z) > 0.1) { - if (!ctx.player().isOnGround() && Math.abs(ctx.player().getMotion().y) > 0.4) { + if (Math.abs(ctx.player().position().x + ctx.player().getDeltaMovement().x - destCenter.x) > 0.1 || Math.abs(ctx.player().position().z + ctx.player().getDeltaMovement().z - destCenter.z) > 0.1) { + if (!ctx.player().isOnGround() && Math.abs(ctx.player().getDeltaMovement().y) > 0.4) { state.setInput(Input.SNEAK, true); } state.setInput(Input.MOVE_FORWARD, true); @@ -144,7 +144,7 @@ public MovementState updateState(MovementState state) { if (avoid == null) { avoid = src.subtract(dest); } else { - double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().getPositionVec().x)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().getPositionVec().z)); + double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().position().x)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().position().z)); if (dist < 0.6) { state.setInput(Input.MOVE_FORWARD, true); } else if (!ctx.player().isOnGround()) { @@ -160,7 +160,7 @@ public MovementState updateState(MovementState state) { private Direction avoid() { for (int i = 0; i < 15; i++) { - BlockState state = ctx.world().getBlockState(ctx.playerFeet().down(i)); + BlockState state = ctx.world().getBlockState(ctx.playerFeet().below(i)); if (state.getBlock() == Blocks.LADDER) { return state.getValue(LadderBlock.FACING); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 845e96b22..b72b2a692 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -46,7 +46,7 @@ public class MovementParkour extends Movement { private final boolean ascend; private MovementParkour(IBaritone baritone, BetterBlockPos src, int dist, Direction dir, boolean ascend) { - super(baritone, src, src.offset(dir, dist).up(ascend ? 1 : 0), EMPTY, src.offset(dir, dist).down(ascend ? 0 : 1)); + super(baritone, src, src.relative(dir, dist).above(ascend ? 1 : 0), EMPTY, src.relative(dir, dist).below(ascend ? 0 : 1)); this.direction = dir; this.dist = dist; this.ascend = ascend; @@ -209,7 +209,7 @@ protected Set calculateValidPositions() { Set set = new HashSet<>(); for (int i = 0; i <= dist; i++) { for (int y = 0; y < 2; y++) { - set.add(src.offset(direction, i).up(y)); + set.add(src.relative(direction, i).above(y)); } } return set; @@ -245,19 +245,19 @@ public MovementState updateState(MovementState state) { // but i did it anyway return state.setStatus(MovementStatus.SUCCESS); } - if (ctx.player().getPositionVec().y - ctx.playerFeet().getY() < 0.094) { // lilypads + if (ctx.player().position().y - ctx.playerFeet().getY() < 0.094) { // lilypads state.setStatus(MovementStatus.SUCCESS); } } else if (!ctx.playerFeet().equals(src)) { - if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().getPositionVec().y - src.y > 0.0001) { - if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().isOnGround() && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true, false) == PlaceResult.READY_TO_PLACE) { + if (ctx.playerFeet().equals(src.relative(direction)) || ctx.player().position().y - src.y > 0.0001) { + if (!MovementHelper.canWalkOn(ctx, dest.below()) && !ctx.player().isOnGround() && MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), true, false) == PlaceResult.READY_TO_PLACE) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory state.setInput(Input.CLICK_RIGHT, true); } // prevent jumping too late by checking for ascend if (dist == 3 && !ascend) { // this is a 2 block gap, dest = src + direction * 3 - double xDiff = (src.x + 0.5) - ctx.player().getPositionVec().x; - double zDiff = (src.z + 0.5) - ctx.player().getPositionVec().z; + double xDiff = (src.x + 0.5) - ctx.player().position().x; + double zDiff = (src.z + 0.5) - ctx.player().position().z; double distFromStart = Math.max(Math.abs(xDiff), Math.abs(zDiff)); if (distFromStart < 0.7) { return state; @@ -265,12 +265,12 @@ public MovementState updateState(MovementState state) { } state.setInput(Input.JUMP, true); - } else if (!ctx.playerFeet().equals(dest.offset(direction, -1))) { + } else if (!ctx.playerFeet().equals(dest.relative(direction, -1))) { state.setInput(Input.SPRINT, false); - if (ctx.playerFeet().equals(src.offset(direction, -1))) { + if (ctx.playerFeet().equals(src.relative(direction, -1))) { MovementHelper.moveTowards(ctx, state, src); } else { - MovementHelper.moveTowards(ctx, state, src.offset(direction, -1)); + MovementHelper.moveTowards(ctx, state, src.relative(direction, -1)); } } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index e84f851d8..9b775b973 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -31,7 +31,6 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.*; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.AirBlock; import net.minecraft.world.level.block.Block; @@ -48,7 +47,7 @@ public class MovementPillar extends Movement { public MovementPillar(IBaritone baritone, BetterBlockPos start, BetterBlockPos end) { - super(baritone, start, end, new BetterBlockPos[]{start.up(2)}, start); + super(baritone, start, end, new BetterBlockPos[]{start.above(2)}, start); } @Override @@ -179,7 +178,7 @@ public MovementState updateState(MovementState state) { // stay centered while swimming up a water column state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()), false)); Vec3 destCenter = VecUtils.getBlockPosCenter(dest); - if (Math.abs(ctx.player().getPositionVec().x - destCenter.x) > 0.2 || Math.abs(ctx.player().getPositionVec().z - destCenter.z) > 0.2) { + if (Math.abs(ctx.player().position().x - destCenter.x) > 0.2 || Math.abs(ctx.player().position().z - destCenter.z) > 0.2) { state.setInput(Input.MOVE_FORWARD, true); } if (ctx.playerFeet().equals(dest)) { @@ -191,14 +190,14 @@ public MovementState updateState(MovementState state) { boolean vine = fromDown.getBlock() == Blocks.VINE; Rotation rotation = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(positionToPlace), - new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch)); + new Rotation(ctx.player().getYRot(), ctx.player().getXRot())); if (!ladder) { - state.setTarget(new MovementState.MovementTarget(new Rotation(ctx.player().rotationYaw, rotation.getPitch()), true)); + state.setTarget(new MovementState.MovementTarget(new Rotation(ctx.player().getYRot(), rotation.getPitch()), true)); } boolean blockIsThere = MovementHelper.canWalkOn(ctx, src) || ladder; if (ladder) { - BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.offset(fromDown.getValue(LadderBlock.FACING).getOpposite()); + BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.relative(fromDown.getValue(LadderBlock.FACING).getOpposite()); if (against == null) { logDirect("Unable to climb vines. Consider disabling allowVines."); return state.setStatus(MovementStatus.UNREACHABLE); @@ -207,7 +206,7 @@ public MovementState updateState(MovementState state) { if (ctx.playerFeet().equals(against.above()) || ctx.playerFeet().equals(dest)) { return state.setStatus(MovementStatus.SUCCESS); } - if (MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.down()))) { + if (MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.below()))) { state.setInput(Input.JUMP, true); } /* @@ -225,13 +224,13 @@ public MovementState updateState(MovementState state) { } - state.setInput(Input.SNEAK, ctx.player().getPositionVec().y > dest.getY() || ctx.player().getPositionVec().y < src.getY() + 0.2D); // delay placement by 1 tick for ncp compatibility + state.setInput(Input.SNEAK, ctx.player().position().y > dest.getY() || ctx.player().position().y < src.getY() + 0.2D); // delay placement by 1 tick for ncp compatibility // since (lower down) we only right click once player.isSneaking, and that happens the tick after we request to sneak - double diffX = ctx.player().getPositionVec().x - (dest.getX() + 0.5); - double diffZ = ctx.player().getPositionVec().z - (dest.getZ() + 0.5); + double diffX = ctx.player().position().x - (dest.getX() + 0.5); + double diffZ = ctx.player().position().z - (dest.getZ() + 0.5); double dist = Math.sqrt(diffX * diffX + diffZ * diffZ); - double flatMotion = Math.sqrt(ctx.player().getMotion().x * ctx.player().getMotion().x + ctx.player().getMotion().z * ctx.player().getMotion().z); + double flatMotion = Math.sqrt(ctx.player().getDeltaMovement().x * ctx.player().getDeltaMovement().x + ctx.player().getDeltaMovement().z * ctx.player().getDeltaMovement().z); if (dist > 0.17) {//why 0.17? because it seemed like a good number, that's why //[explanation added after baritone port lol] also because it needs to be less than 0.2 because of the 0.3 sneak limit //and 0.17 is reasonably less than 0.2 @@ -243,7 +242,7 @@ public MovementState updateState(MovementState state) { state.setTarget(new MovementState.MovementTarget(rotation, true)); } else if (flatMotion < 0.05) { // If our Y coordinate is above our goal, stop jumping - state.setInput(Input.JUMP, ctx.player().getPositionVec().y < dest.getY()); + state.setInput(Input.JUMP, ctx.player().position().y < dest.getY()); } @@ -258,7 +257,7 @@ public MovementState updateState(MovementState state) { state.setInput(Input.JUMP, false); // breaking is like 5x slower when you're jumping state.setInput(Input.CLICK_LEFT, true); blockIsThere = false; - } else if (ctx.player().isCrouching() && (ctx.isLookingAt(src.down()) || ctx.isLookingAt(src)) && ctx.player().getPositionVec().y > dest.getY() + 0.1) { + } else if (ctx.player().isCrouching() && (ctx.isLookingAt(src.below()) || ctx.isLookingAt(src)) && ctx.player().position().y > dest.getY() + 0.1) { state.setInput(Input.CLICK_RIGHT, true); } } @@ -274,13 +273,13 @@ public MovementState updateState(MovementState state) { @Override protected boolean prepared(MovementState state) { - if (ctx.playerFeet().equals(src) || ctx.playerFeet().equals(src.down())) { - Block block = BlockStateInterface.getBlock(ctx, src.down()); + if (ctx.playerFeet().equals(src) || ctx.playerFeet().equals(src.below())) { + Block block = BlockStateInterface.getBlock(ctx, src.below()); if (block == Blocks.LADDER || block == Blocks.VINE) { state.setInput(Input.SNEAK, true); } } - if (MovementHelper.isWater(ctx, dest.up())) { + if (MovementHelper.isWater(ctx, dest.above())) { return true; } return super.prepared(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index e79b8ba5e..91128b950 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -31,7 +31,6 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.*; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.AirBlock; import net.minecraft.world.level.block.Block; @@ -55,7 +54,7 @@ public class MovementTraverse extends Movement { private boolean wasTheBridgeBlockAlwaysThere = true; public MovementTraverse(IBaritone baritone, BetterBlockPos from, BetterBlockPos to) { - super(baritone, from, to, new BetterBlockPos[]{to.up(), to}, to.down()); + super(baritone, from, to, new BetterBlockPos[]{to.above(), to}, to.below()); } @Override @@ -182,7 +181,7 @@ public MovementState updateState(MovementState state) { return state; } // and we aren't already pressed up against the block - double dist = Math.max(Math.abs(ctx.player().getPositionVec().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().getPositionVec().z - (dest.getZ() + 0.5D))); + double dist = Math.max(Math.abs(ctx.player().position().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().position().z - (dest.getZ() + 0.5D))); if (dist < 0.83) { return state; } @@ -208,7 +207,7 @@ public MovementState updateState(MovementState state) { //sneak may have been set to true in the PREPPING state while mining an adjacent block state.setInput(Input.SNEAK, false); - Block fd = BlockStateInterface.get(ctx, src.down()).getBlock(); + Block fd = BlockStateInterface.get(ctx, src.below()).getBlock(); boolean ladder = fd == Blocks.LADDER || fd == Blocks.VINE; if (pb0.getBlock() instanceof DoorBlock || pb1.getBlock() instanceof DoorBlock) { @@ -222,7 +221,7 @@ public MovementState updateState(MovementState state) { } if (pb0.getBlock() instanceof FenceGateBlock || pb1.getBlock() instanceof FenceGateBlock) { - BlockPos blocked = !MovementHelper.isGatePassable(ctx, positionsToBreak[0], src.up()) ? positionsToBreak[0] + BlockPos blocked = !MovementHelper.isGatePassable(ctx, positionsToBreak[0], src.above()) ? positionsToBreak[0] : !MovementHelper.isGatePassable(ctx, positionsToBreak[1], src) ? positionsToBreak[1] : null; if (blocked != null) { @@ -247,27 +246,27 @@ public MovementState updateState(MovementState state) { if (feet.equals(dest)) { return state.setStatus(MovementStatus.SUCCESS); } - if (Baritone.settings().overshootTraverse.value && (feet.equals(dest.add(getDirection())) || feet.equals(dest.add(getDirection()).add(getDirection())))) { + if (Baritone.settings().overshootTraverse.value && (feet.equals(dest.offset(getDirection())) || feet.equals(dest.offset(getDirection()).offset(getDirection())))) { return state.setStatus(MovementStatus.SUCCESS); } Block low = BlockStateInterface.get(ctx, src).getBlock(); - Block high = BlockStateInterface.get(ctx, src.up()).getBlock(); - if (ctx.player().getPositionVec().y > src.y + 0.1D && !ctx.player().isOnGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { + Block high = BlockStateInterface.get(ctx, src.above()).getBlock(); + if (ctx.player().position().y > src.y + 0.1D && !ctx.player().isOnGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { // hitting W could cause us to climb the ladder instead of going forward // wait until we're on the ground return state; } - BlockPos into = dest.subtract(src).add(dest); + BlockPos into = dest.subtract(src).offset(dest); BlockState intoBelow = BlockStateInterface.get(ctx, into); BlockState intoAbove = BlockStateInterface.get(ctx, into.above()); if (wasTheBridgeBlockAlwaysThere && (!MovementHelper.isLiquid(ctx, feet) || Baritone.settings().sprintInWater.value) && (!MovementHelper.avoidWalkingInto(intoBelow) || MovementHelper.isWater(intoBelow)) && !MovementHelper.avoidWalkingInto(intoAbove)) { state.setInput(Input.SPRINT, true); } - BlockState destDown = BlockStateInterface.get(ctx, dest.down()); + BlockState destDown = BlockStateInterface.get(ctx, dest.below()); BlockPos against = positionsToBreak[0]; if (feet.getY() != dest.getY() && ladder && (destDown.getBlock() == Blocks.VINE || destDown.getBlock() == Blocks.LADDER)) { - against = destDown.getBlock() == Blocks.VINE ? MovementPillar.getAgainst(new CalculationContext(baritone), dest.down()) : dest.offset(destDown.getValue(LadderBlock.FACING).getOpposite()); + against = destDown.getBlock() == Blocks.VINE ? MovementPillar.getAgainst(new CalculationContext(baritone), dest.below()) : dest.relative(destDown.getValue(LadderBlock.FACING).getOpposite()); if (against == null) { logDirect("Unable to climb vines. Consider disabling allowVines."); return state.setStatus(MovementStatus.UNREACHABLE); @@ -279,15 +278,15 @@ public MovementState updateState(MovementState state) { wasTheBridgeBlockAlwaysThere = false; Block standingOn = BlockStateInterface.get(ctx, feet.below()).getBlock(); if (standingOn.equals(Blocks.SOUL_SAND) || standingOn instanceof SlabBlock) { // see issue #118 - double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().getPositionVec().x), Math.abs(dest.getZ() + 0.5 - ctx.player().getPositionVec().z)); + double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().position().x), Math.abs(dest.getZ() + 0.5 - ctx.player().position().z)); if (dist < 0.85) { // 0.5 + 0.3 + epsilon MovementHelper.moveTowards(ctx, state, dest); return state.setInput(Input.MOVE_FORWARD, false) .setInput(Input.MOVE_BACK, true); } } - double dist1 = Math.max(Math.abs(ctx.player().getPositionVec().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().getPositionVec().z - (dest.getZ() + 0.5D))); - PlaceResult p = MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), false, true); + double dist1 = Math.max(Math.abs(ctx.player().position().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().position().z - (dest.getZ() + 0.5D))); + PlaceResult p = MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), false, true); if ((p == PlaceResult.READY_TO_PLACE || dist1 < 0.6) && !Baritone.settings().assumeSafeWalk.value) { state.setInput(Input.SNEAK, true); } @@ -322,11 +321,11 @@ public MovementState updateState(MovementState state) { double faceY = (dest.getY() + src.getY() - 1.0D) * 0.5D; double faceZ = (dest.getZ() + src.getZ() + 1.0D) * 0.5D; // faceX, faceY, faceZ is the middle of the face between from and to - BlockPos goalLook = src.down(); // this is the block we were just standing on, and the one we want to place against + BlockPos goalLook = src.below(); // this is the block we were just standing on, and the one we want to place against Rotation backToFace = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3(faceX, faceY, faceZ), ctx.playerRotations()); float pitch = backToFace.getPitch(); - double dist2 = Math.max(Math.abs(ctx.player().getPositionVec().x - faceX), Math.abs(ctx.player().getPositionVec().z - faceZ)); + double dist2 = Math.max(Math.abs(ctx.player().position().x - faceX), Math.abs(ctx.player().position().z - faceZ)); if (dist2 < 0.29) { // see issue #208 float yaw = RotationUtils.calcRotationFromVec3d(VecUtils.getBlockPosCenter(dest), ctx.playerHead(), ctx.playerRotations()).getYaw(); state.setTarget(new MovementState.MovementTarget(new Rotation(yaw, pitch), true)); @@ -354,13 +353,13 @@ public boolean safeToCancel(MovementState state) { // if we're in the process of breaking blocks before walking forwards // or if this isn't a sneak place (the block is already there) // then it's safe to cancel this - return state.getStatus() != MovementStatus.RUNNING || MovementHelper.canWalkOn(ctx, dest.down()); + return state.getStatus() != MovementStatus.RUNNING || MovementHelper.canWalkOn(ctx, dest.below()); } @Override protected boolean prepared(MovementState state) { - if (ctx.playerFeet().equals(src) || ctx.playerFeet().equals(src.down())) { - Block block = BlockStateInterface.getBlock(ctx, src.down()); + if (ctx.playerFeet().equals(src) || ctx.playerFeet().equals(src.below())) { + Block block = BlockStateInterface.getBlock(ctx, src.below()); if (block == Blocks.LADDER || block == Blocks.VINE) { state.setInput(Input.SNEAK, true); } diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 524163a45..2b35d6f3c 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -40,8 +40,6 @@ import static baritone.api.pathing.movement.MovementStatus.*; -import IPlayerContext; - /** * Behavior to execute a precomputed path * @@ -277,11 +275,11 @@ private boolean shouldPause() { if (!ctx.player().isOnGround()) { return false; } - if (!MovementHelper.canWalkOn(ctx, ctx.playerFeet().down())) { + if (!MovementHelper.canWalkOn(ctx, ctx.playerFeet().below())) { // we're in some kind of sketchy situation, maybe parkouring return false; } - if (!MovementHelper.canWalkThrough(ctx, ctx.playerFeet()) || !MovementHelper.canWalkThrough(ctx, ctx.playerFeet().up())) { + if (!MovementHelper.canWalkThrough(ctx, ctx.playerFeet()) || !MovementHelper.canWalkThrough(ctx, ctx.playerFeet().above())) { // suffocating? return false; } @@ -328,7 +326,7 @@ public boolean snipsnapifpossible() { return false; } else { // we are either onGround or in liquid - if (ctx.player().getMotion().y < -0.1) { + if (ctx.player().getDeltaMovement().y < -0.1) { // if we are strictly moving downwards (not stationary) // we could be falling through water, which could be unsafe to splice return false; // so don't @@ -387,7 +385,7 @@ private boolean shouldSprintNextTick() { if (pathPosition < path.length() - 2) { IMovement next = path.movements().get(pathPosition + 1); - if (next instanceof MovementAscend && current.getDirection().up().equals(next.getDirection().down())) { + if (next instanceof MovementAscend && current.getDirection().above().equals(next.getDirection().below())) { // a descend then an ascend in the same direction pathPosition++; onChangeInPathPosition(); @@ -409,12 +407,12 @@ private boolean shouldSprintNextTick() { } if (current instanceof MovementAscend && pathPosition != 0) { IMovement prev = path.movements().get(pathPosition - 1); - if (prev instanceof MovementDescend && prev.getDirection().up().equals(current.getDirection().down())) { - BlockPos center = current.getSrc().up(); + if (prev instanceof MovementDescend && prev.getDirection().above().equals(current.getDirection().below())) { + BlockPos center = current.getSrc().above(); // playerFeet adds 0.1251 to account for soul sand // farmland is 0.9375 // 0.07 is to account for farmland - if (ctx.player().getPositionVec().y >= center.getY() - 0.07) { + if (ctx.player().position().y >= center.getY() - 0.07) { behavior.baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, false); return true; } @@ -470,7 +468,7 @@ private Tuple overrideFall(MovementFall movement) { break outer; } } - if (!MovementHelper.canWalkOn(ctx, next.getDest().down())) { + if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { break; } } @@ -481,21 +479,21 @@ private Tuple overrideFall(MovementFall movement) { double len = i - pathPosition - 0.4; return new Tuple<>( new Vec3(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), - movement.getDest().add(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); + movement.getDest().offset(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); } private static boolean skipNow(IPlayerContext ctx, IMovement current) { - double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().getPositionVec().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().getPositionVec().x)); + double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().position().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().position().x)); if (offTarget > 0.1) { return false; } // we are centered - BlockPos headBonk = current.getSrc().subtract(current.getDirection()).up(2); + BlockPos headBonk = current.getSrc().subtract(current.getDirection()).above(2); if (MovementHelper.fullyPassable(ctx, headBonk)) { return true; } // wait 0.3 - double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().getPositionVec().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().getPositionVec().z)); + double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().position().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().position().z)); return flatDist > 0.8; } @@ -509,10 +507,10 @@ private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse cur if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { return false; } - if (!MovementHelper.canWalkOn(ctx, current.getDest().down())) { + if (!MovementHelper.canWalkOn(ctx, current.getDest().below())) { return false; } - if (!MovementHelper.canWalkOn(ctx, next.getDest().down())) { + if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { return false; } if (!next.toBreakCached.isEmpty()) { @@ -520,7 +518,7 @@ private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse cur } for (int x = 0; x < 2; x++) { for (int y = 0; y < 3; y++) { - BlockPos chk = current.getSrc().up(y); + BlockPos chk = current.getSrc().above(y); if (x == 1) { chk = chk.offset(current.getDirection()); } @@ -529,20 +527,20 @@ private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse cur } } } - if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().up(3)))) { + if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().above(3)))) { return false; } - return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().up(2))); // codacy smh my head + return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().above(2))); // codacy smh my head } private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { return true; } - if (!MovementHelper.canWalkOn(ctx, current.getDest().add(current.getDirection()))) { + if (!MovementHelper.canWalkOn(ctx, current.getDest().offset(current.getDirection()))) { return false; } - if (next instanceof MovementTraverse && next.getDirection().down().equals(current.getDirection())) { + if (next instanceof MovementTraverse && next.getDirection().equals(current.getDirection())) { return true; } return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java index 5d245c2eb..79073860d 100644 --- a/src/main/java/baritone/process/BackfillProcess.java +++ b/src/main/java/baritone/process/BackfillProcess.java @@ -104,7 +104,7 @@ public List toFillIn() { .filter(pos -> ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) .filter(pos -> baritone.getBuilderProcess().placementPlausible(pos, Blocks.DIRT.defaultBlockState())) .filter(pos -> !partOfCurrentMovement(pos)) - .sorted(Comparator.comparingDouble(ctx.playerFeet()::distanceSq).reversed()) + .sorted(Comparator.comparingDouble(ctx.playerFeet()::distSqr).reversed()) .collect(Collectors.toList()); } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 98e6db93f..e10d32b7e 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -275,12 +275,12 @@ private Optional searchForPlacables(BuilderCalculationContext bcc, Li public boolean placementPlausible(BlockPos pos, BlockState state) { VoxelShape voxelshape = state.getCollisionShape(ctx.world(), pos); - return voxelshape.isEmpty() || ctx.world().checkNoEntityCollision(null, voxelshape.move(pos.getX(), pos.getY(), pos.getZ())); + return voxelshape.isEmpty() || ctx.world().isUnobstructed(null, voxelshape.move(pos.getX(), pos.getY(), pos.getZ())); } private Optional possibleToPlace(BlockState toPlace, int x, int y, int z, BlockStateInterface bsi) { for (Direction against : Direction.values()) { - BetterBlockPos placeAgainstPos = new BetterBlockPos(x, y, z).offset(against); + BetterBlockPos placeAgainstPos = new BetterBlockPos(x, y, z).relative(against); BlockState placeAgainstState = bsi.get0(placeAgainstPos); if (MovementHelper.isReplaceable(placeAgainstPos.x, placeAgainstPos.y, placeAgainstPos.z, placeAgainstState, bsi)) { continue; @@ -291,7 +291,7 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in if (!placementPlausible(new BetterBlockPos(x, y, z), toPlace)) { continue; } - AABB aabb = placeAgainstState.getShape(ctx.world(), placeAgainstPos).getBoundingBox(); + AABB aabb = placeAgainstState.getShape(ctx.world(), placeAgainstPos).bounds(); for (Vec3 placementMultiplier : aabbSideMultipliers(against)) { double placeX = placeAgainstPos.x + aabb.minX * placementMultiplier.x + aabb.maxX * (1 - placementMultiplier.x); double placeY = placeAgainstPos.y + aabb.minY * placementMultiplier.y + aabb.maxY * (1 - placementMultiplier.y); @@ -311,15 +311,15 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { for (int i = 0; i < 9; i++) { - ItemStack stack = ctx.player().inventory.mainInventory.get(i); + ItemStack stack = ctx.player().getInventory().items.get(i); if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { continue; } - float originalYaw = ctx.player().rotationYaw; - float originalPitch = ctx.player().rotationPitch; + float originalYaw = ctx.player().getYRot(); + float originalPitch = ctx.player().getXRot(); // the state depends on the facing of the player sometimes - ctx.player().rotationYaw = rot.getYaw(); - ctx.player().rotationPitch = rot.getPitch(); + ctx.player().setYRot(rot.getYaw()); + ctx.player().setXRot(rot.getPitch()); BlockPlaceContext meme = new BlockPlaceContext(new UseOnContext( ctx.world(), ctx.player(), @@ -328,8 +328,8 @@ private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult resul (BlockHitResult) result ) {}); // that {} gives us access to a protected constructor lmfao BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); - ctx.player().rotationYaw = originalYaw; - ctx.player().rotationPitch = originalPitch; + ctx.player().setYRot(originalYaw); + ctx.player().setXRot(originalPitch); if (wouldBePlaced == null) { continue; } @@ -468,7 +468,7 @@ public int lengthZ() { if (toPlace.isPresent() && isSafeToCancel && ctx.player().isOnGround() && ticks <= 0) { Rotation rot = toPlace.get().rot; baritone.getLookBehavior().updateTarget(rot, true); - ctx.player().inventory.currentItem = toPlace.get().hotbarSelection; + ctx.player().getInventory().selected = toPlace.get().hotbarSelection; baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); if ((ctx.isLookingAt(toPlace.get().placeAgainst) && ((BlockHitResult) ctx.objectMouseOver()).getDirection().equals(toPlace.get().side)) || ctx.playerRotations().isReallyCloseTo(rot)) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); @@ -535,7 +535,7 @@ private boolean recalc(BuilderCalculationContext bcc) { private void trim() { HashSet copy = new HashSet<>(incorrectPositions); - copy.removeIf(pos -> pos.distanceSq(ctx.player().getPosition()) > 200); + copy.removeIf(pos -> pos.distSqr(ctx.player().blockPosition()) > 200); if (!copy.isEmpty()) { incorrectPositions = copy; } @@ -626,7 +626,7 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac missing.put(desired, 1 + missing.getOrDefault(desired, 0)); } } else { - if (state.getBlock() instanceof FlowingFluidBlock) { + if (state.getBlock() instanceof LiquidBlock) { // if the block itself is JUST a liquid (i.e. not just a waterlogged block), we CANNOT break it // TODO for 1.13 make sure that this only matches pure water, not waterlogged blocks if (!MovementHelper.possiblyFlowing(state)) { @@ -644,11 +644,11 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac breakable.forEach(pos -> toBreak.add(breakGoal(pos, bcc))); List toPlace = new ArrayList<>(); placeable.forEach(pos -> { - if (!placeable.contains(pos.down()) && !placeable.contains(pos.down(2))) { + if (!placeable.contains(pos.below()) && !placeable.contains(pos.below(2))) { toPlace.add(placementGoal(pos, bcc)); } }); - sourceLiquids.forEach(pos -> toPlace.add(new GoalBlock(pos.up()))); + sourceLiquids.forEach(pos -> toPlace.add(new GoalBlock(pos.above()))); if (!toPlace.isEmpty()) { return new JankyGoalComposite(new GoalComposite(toPlace.toArray(new Goal[0])), new GoalComposite(toBreak.toArray(new Goal[0]))); @@ -810,13 +810,13 @@ public String displayName0() { private List approxPlaceable(int size) { List result = new ArrayList<>(); for (int i = 0; i < size; i++) { - ItemStack stack = ctx.player().inventory.mainInventory.get(i); + ItemStack stack = ctx.player().getInventory().items.get(i); if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { result.add(Blocks.AIR.defaultBlockState()); continue; } // - result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))); + result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {}))); // } return result; diff --git a/src/main/java/baritone/process/CustomGoalProcess.java b/src/main/java/baritone/process/CustomGoalProcess.java index f925bec79..86099860b 100644 --- a/src/main/java/baritone/process/CustomGoalProcess.java +++ b/src/main/java/baritone/process/CustomGoalProcess.java @@ -92,7 +92,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (this.goal == null || (this.goal.isInGoal(ctx.playerFeet()) && this.goal.isInGoal(baritone.getPathingBehavior().pathStart()))) { onLostControl(); // we're there xd if (Baritone.settings().disconnectOnArrival.value) { - ctx.world().sendQuittingDisconnectingPacket(); + ctx.world().disconnect(); } if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnPathComplete.value) { NotificationHelper.notify("Pathing complete", false); diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 243e29cc6..db312884b 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -32,7 +32,6 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import baritone.utils.NotificationHelper; -import net.minecraft.block.*; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.Entity; @@ -230,7 +229,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (state.getBlock() instanceof BonemealableBlock) { BonemealableBlock ig = (BonemealableBlock) state.getBlock(); - if (ig.isValidBonemealTarget(ctx.world(), pos, state, true) && ig.isBonemealSuccess(ctx.world(), ctx.world().rand, pos, state)) { + if (ig.isValidBonemealTarget(ctx.world(), pos, state, true) && ig.isBonemealSuccess(ctx.world(), ctx.world().random, pos, state)) { bonemealable.add(pos); } } diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 21bbaf4e0..28037dca0 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -17,7 +17,6 @@ package baritone.process; -import Goal; import baritone.Baritone; import baritone.api.pathing.goals.*; import baritone.api.process.IGetToBlockProcess; @@ -124,7 +123,7 @@ public boolean isInGoal(int x, int y, int z) { // blacklist the closest block and its adjacent blocks public synchronized boolean blacklistClosest() { List newBlacklist = new ArrayList<>(); - knownLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)).ifPresent(newBlacklist::add); + knownLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(newBlacklist::add); outer: while (true) { for (BlockPos known : knownLocations) { @@ -196,8 +195,8 @@ private boolean rightClick() { baritone.getLookBehavior().updateTarget(reachable.get(), true); if (knownLocations.contains(ctx.getSelectedBlock().orElse(null))) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); // TODO find some way to right click even if we're in an ESC menu - System.out.println(ctx.player().openContainer); - if (!(ctx.player().openContainer instanceof InventoryMenu)) { + System.out.println(ctx.player().containerMenu); + if (!(ctx.player().containerMenu instanceof InventoryMenu)) { return true; } } diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 2222ed134..34ae75e8c 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -31,7 +31,6 @@ import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import baritone.utils.NotificationHelper; -import net.minecraft.block.*; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; @@ -47,10 +46,6 @@ import static baritone.api.pathing.movement.ActionCosts.COST_INF; -import BlockOptionalMetaLookup; -import Goal; -import GoalRunAway; - /** * Mine blocks of a certain type * @@ -81,7 +76,7 @@ public boolean isActive() { @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (desiredQuantity > 0) { - int curr = ctx.player().inventory.mainInventory.stream() + int curr = ctx.player().getInventory().items.stream() .filter(stack -> filter.has(stack)) .mapToInt(ItemStack::getCount).sum(); System.out.println("Currently have " + curr + " valid items"); @@ -97,7 +92,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnMineFail.value) { NotificationHelper.notify("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); } - knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)).ifPresent(blacklist::add); + knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(blacklist::add); knownOreLocations.removeIf(blacklist::contains); } else { logDirect("Unable to find any path to " + filter + ", canceling mine"); @@ -127,7 +122,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( - .min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)); + .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); baritone.getInputOverrideHandler().clearAllKeys(); if (shaft.isPresent() && ctx.player().isOnGround()) { BlockPos pos = shaft.get(); @@ -427,7 +422,7 @@ private static List prune(CalculationContext ctx, List locs2 .filter(pos -> !blacklist.contains(pos)) - .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().getPosition()::distanceSq)) + .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().blockPosition()::distSqr)) .collect(Collectors.toList()); if (locs.size() > max) { diff --git a/src/main/java/baritone/selection/Selection.java b/src/main/java/baritone/selection/Selection.java index 730856943..d4b115de4 100644 --- a/src/main/java/baritone/selection/Selection.java +++ b/src/main/java/baritone/selection/Selection.java @@ -37,7 +37,7 @@ public Selection(BetterBlockPos pos1, BetterBlockPos pos2) { max.z - min.z + 1 ); - this.aabb = new AABB(this.min, this.max.add(1, 1, 1)); + this.aabb = new AABB(this.min, this.max.offset(1, 1, 1)); } @Override @@ -108,23 +108,23 @@ private boolean isPos2(Direction facing) { @Override public ISelection expand(Direction direction, int blocks) { if (isPos2(direction)) { - return new Selection(pos1, pos2.offset(direction, blocks)); + return new Selection(pos1, pos2.relative(direction, blocks)); } else { - return new Selection(pos1.offset(direction, blocks), pos2); + return new Selection(pos1.relative(direction, blocks), pos2); } } @Override public ISelection contract(Direction direction, int blocks) { if (isPos2(direction)) { - return new Selection(pos1.offset(direction, blocks), pos2); + return new Selection(pos1.relative(direction, blocks), pos2); } else { - return new Selection(pos1, pos2.offset(direction, blocks)); + return new Selection(pos1, pos2.relative(direction, blocks)); } } @Override public ISelection shift(Direction direction, int blocks) { - return new Selection(pos1.offset(direction, blocks), pos2.offset(direction, blocks)); + return new Selection(pos1.relative(direction, blocks), pos2.relative(direction, blocks)); } } diff --git a/src/main/java/baritone/selection/SelectionRenderer.java b/src/main/java/baritone/selection/SelectionRenderer.java index d0be61e64..90c4bca10 100644 --- a/src/main/java/baritone/selection/SelectionRenderer.java +++ b/src/main/java/baritone/selection/SelectionRenderer.java @@ -38,13 +38,13 @@ public static void renderSelections(PoseStack stack, ISelection[] selections) { IRenderer.glColor(settings.colorSelectionPos1.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(stack, new AABB(selection.pos1(), selection.pos1().add(1, 1, 1))); + IRenderer.drawAABB(stack, new AABB(selection.pos1(), selection.pos1().offset(1, 1, 1))); } IRenderer.glColor(settings.colorSelectionPos2.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(stack, new AABB(selection.pos2(), selection.pos2().add(1, 1, 1))); + IRenderer.drawAABB(stack, new AABB(selection.pos2(), selection.pos2().offset(1, 1, 1))); } } diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index 62262d5a8..5edc1439b 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -56,12 +56,12 @@ public void tick(boolean isLeftClick) { if (!didBreakLastTick) { ctx.playerController().syncHeldItem(); ctx.playerController().clickBlock(((BlockHitResult) trace).getBlockPos(), ((BlockHitResult) trace).getDirection()); - ctx.player().swingArm(InteractionHand.MAIN_HAND); + ctx.player().swing(InteractionHand.MAIN_HAND); } // Attempt to break the block if (ctx.playerController().onPlayerDamageBlock(((BlockHitResult) trace).getBlockPos(), ((BlockHitResult) trace).getDirection())) { - ctx.player().swingArm(InteractionHand.MAIN_HAND); + ctx.player().swing(InteractionHand.MAIN_HAND); } ctx.playerController().setHittingBlock(false); diff --git a/src/main/java/baritone/utils/BlockPlaceHelper.java b/src/main/java/baritone/utils/BlockPlaceHelper.java index 2374bdd0c..fb8cba397 100644 --- a/src/main/java/baritone/utils/BlockPlaceHelper.java +++ b/src/main/java/baritone/utils/BlockPlaceHelper.java @@ -40,16 +40,16 @@ public void tick(boolean rightClickRequested) { return; } HitResult mouseOver = ctx.objectMouseOver(); - if (!rightClickRequested || ctx.player().isRowingBoat() || mouseOver == null || mouseOver.getType() != HitResult.Type.BLOCK) { + if (!rightClickRequested || ctx.player().isHandsBusy() || mouseOver == null || mouseOver.getType() != HitResult.Type.BLOCK) { return; } rightClickTimer = Baritone.settings().rightClickSpeed.value; for (InteractionHand hand : InteractionHand.values()) { if (ctx.playerController().processRightClickBlock(ctx.player(), ctx.world(), hand, (BlockHitResult) mouseOver) == InteractionResult.SUCCESS) { - ctx.player().swingArm(hand); + ctx.player().swing(hand); return; } - if (!ctx.player().getHeldItem(hand).isEmpty() && ctx.playerController().processRightClick(ctx.player(), ctx.world(), hand) == InteractionResult.SUCCESS) { + if (!ctx.player().getItemInHand(hand).isEmpty() && ctx.playerController().processRightClick(ctx.player(), ctx.world(), hand) == InteractionResult.SUCCESS) { return; } } diff --git a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java index 29fbb07ba..19b04b454 100644 --- a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java +++ b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java @@ -53,4 +53,15 @@ public BlockState getBlockState(BlockPos pos) { public FluidState getFluidState(BlockPos blockPos) { return getBlockState(blockPos).getFluidState(); } + + @Override + public int getHeight() { + return 255; + } + + @Override + public int getMinBuildHeight() { + return 0; + } + } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 70a97b077..6635016a4 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -33,7 +33,6 @@ import net.minecraft.network.chat.BaseComponent; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.TextComponent; -import net.minecraft.util.math.*; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.ClipContext; import net.minecraft.world.phys.AABB; @@ -64,12 +63,12 @@ public boolean isPauseScreen() { @Override public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) { - double mx = mc.mouseHelper.getMouseX(); - double my = mc.mouseHelper.getMouseY(); + double mx = mc.mouseHandler.xpos(); + double my = mc.mouseHandler.ypos(); - my = mc.getMainWindow().getHeight() - my; - my *= mc.getMainWindow().getFramebufferHeight() / (double) mc.getMainWindow().getHeight(); - mx *= mc.getMainWindow().getFramebufferWidth() / (double) mc.getMainWindow().getWidth(); + my = mc.getWindow().getScreenHeight() - my; + my *= mc.getWindow().getHeight() / (double) mc.getWindow().getScreenHeight(); + mx *= mc.getWindow().getWidth() / (double) mc.getWindow().getScreenWidth(); Vec3 near = toWorld(mx, my, 0); Vec3 far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv @@ -123,13 +122,14 @@ public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { this.projectionViewMatrix.invert(); if (currentMouseOver != null) { - Entity e = mc.getRenderViewEntity(); + Entity e = mc.getCameraEntity(); // drawSingleSelectionBox WHEN? PathRenderer.drawManySelectionBoxes(modelViewStack, e, Collections.singletonList(currentMouseOver), Color.CYAN); if (clickStart != null && !clickStart.equals(currentMouseOver)) { RenderSystem.enableBlend(); RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - RenderSystem.color4f(Color.RED.getColorComponents(null)[0], Color.RED.getColorComponents(null)[1], Color.RED.getColorComponents(null)[2], 0.4F); + //TODO: fix + //RenderSystem.color4f(Color.RED.getColorComponents(null)[0], Color.RED.getColorComponents(null)[1], Color.RED.getColorComponents(null)[2], 0.4F); RenderSystem.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); RenderSystem.disableTexture(); RenderSystem.depthMask(false); @@ -151,8 +151,8 @@ private Vec3 toWorld(double x, double y, double z) { return null; } - x /= mc.getMainWindow().getFramebufferWidth(); - y /= mc.getMainWindow().getFramebufferHeight(); + x /= mc.getWindow().getWidth(); + y /= mc.getWindow().getHeight(); x = x * 2 - 1; y = y * 2 - 1; diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 3f263e91a..cb52f2a00 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -22,10 +22,7 @@ import baritone.api.utils.Helper; import baritone.utils.accessor.IEntityRenderManager; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.*; import com.mojang.math.Matrix4f; import java.awt.*; import net.minecraft.world.phys.AABB; @@ -36,12 +33,13 @@ public interface IRenderer { Tesselator tessellator = Tesselator.getInstance(); BufferBuilder buffer = tessellator.getBuilder(); - IEntityRenderManager renderManager = (IEntityRenderManager) Helper.mc.getRenderManager(); + IEntityRenderManager renderManager = (IEntityRenderManager) Helper.mc.getEntityRenderDispatcher(); Settings settings = BaritoneAPI.getSettings(); static void glColor(Color color, float alpha) { float[] colorComponents = color.getColorComponents(null); - RenderSystem.color4f(colorComponents[0], colorComponents[1], colorComponents[2], alpha); + //TODO: fix + //RenderSystem.color4f(colorComponents[0], colorComponents[1], colorComponents[2], alpha); } static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { @@ -75,7 +73,8 @@ static void drawAABB(PoseStack stack, AABB aabb) { AABB toDraw = aabb.move(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); Matrix4f matrix4f = stack.last().pose(); - buffer.begin(GL_LINES, DefaultVertexFormat.POSITION); + //TODO: check + buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION); // bottom buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index a024ab342..d91123108 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -94,12 +94,12 @@ public final void onTick(TickEvent event) { blockPlaceHelper.tick(isInputForcedDown(Input.CLICK_RIGHT)); if (inControl()) { - if (ctx.player().movementInput.getClass() != PlayerMovementInput.class) { - ctx.player().movementInput = new PlayerMovementInput(this); + if (ctx.player().input.getClass() != PlayerMovementInput.class) { + ctx.player().input = new PlayerMovementInput(this); } } else { - if (ctx.player().movementInput.getClass() == PlayerMovementInput.class) { // allow other movement inputs that aren't this one, e.g. for a freecam - ctx.player().movementInput = new KeyboardInput(Minecraft.getInstance().options); + if (ctx.player().input.getClass() == PlayerMovementInput.class) { // allow other movement inputs that aren't this one, e.g. for a freecam + ctx.player().input = new KeyboardInput(Minecraft.getInstance().options); } } // only set it if it was previously incorrect diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index b637e0c23..ffd4985bd 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -29,6 +29,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.math.Matrix4f; import java.awt.*; import java.util.Collection; @@ -73,19 +74,19 @@ public static double posZ() { public static void render(RenderEvent event, PathingBehavior behavior) { float partialTicks = event.getPartialTicks(); Goal goal = behavior.getGoal(); - if (Helper.mc.currentScreen instanceof GuiClick) { - ((GuiClick) Helper.mc.currentScreen).onRender(event.getModelViewStack(), event.getProjectionMatrix()); + if (Helper.mc.screen instanceof GuiClick) { + ((GuiClick) Helper.mc.screen).onRender(event.getModelViewStack(), event.getProjectionMatrix()); } - DimensionType thisPlayerDimension = behavior.baritone.getPlayerContext().world().getDimensionType(); - DimensionType currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().getDimensionType(); + DimensionType thisPlayerDimension = behavior.baritone.getPlayerContext().world().dimensionType(); + DimensionType currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().dimensionType(); if (thisPlayerDimension != currentRenderViewDimension) { // this is a path for a bot in a different dimension, don't render it return; } - Entity renderView = Helper.mc.getRenderViewEntity(); + Entity renderView = Helper.mc.getCameraEntity(); if (renderView.level != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { System.out.println("I have no idea what's going on"); @@ -188,7 +189,8 @@ public static void drawLine(PoseStack stack, double x1, double y1, double z1, do double vpZ = posZ(); boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; - buffer.begin(renderPathAsFrickinThingy ? GL_LINE_STRIP : GL_LINES, DefaultVertexFormat.POSITION); + //TODO: check + buffer.begin(renderPathAsFrickinThingy ? VertexFormat.Mode.DEBUG_LINE_STRIP : VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION); buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); @@ -249,7 +251,8 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, if (settings.renderGoalXZBeacon.value) { glPushAttrib(GL_LIGHTING_BIT); - Helper.mc.getTextureManager().bindTexture(TEXTURE_BEACON_BEAM); + //TODO: fix + Helper.mc.getTextureManager().bindForSetup(TEXTURE_BEACON_BEAM); if (settings.renderGoalIgnoreDepth.value) { RenderSystem.disableDepthTest(); } @@ -257,9 +260,10 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, stack.pushPose(); // push stack.translate(goalPos.getX() - renderPosX, -renderPosY, goalPos.getZ() - renderPosZ); // translate + //TODO: check BeaconRenderer.renderBeaconBeam( stack, - mc.getRenderTypeBuffers().getBufferSource(), + mc.renderBuffers().bufferSource(), TEXTURE_BEACON_BEAM, partialTicks, 1.0F, @@ -320,7 +324,7 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); Matrix4f matrix4f = stack.last().pose(); - buffer.begin(GL_LINES, DefaultVertexFormat.POSITION); + buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION); buffer.vertex(matrix4f, (float) minX, (float) minY, (float) minZ).endVertex(); buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) minZ).endVertex(); buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) minZ).endVertex(); @@ -337,11 +341,13 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, private static void renderHorizontalQuad(PoseStack stack, double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { Matrix4f matrix4f = stack.last().pose(); - buffer.begin(GL_LINE_LOOP, DefaultVertexFormat.POSITION); + //TODO: check + buffer.begin(VertexFormat.Mode.DEBUG_LINE_STRIP, DefaultVertexFormat.POSITION); buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).endVertex(); buffer.vertex(matrix4f, (float) maxX, (float) y, (float) minZ).endVertex(); buffer.vertex(matrix4f, (float) maxX, (float) y, (float) maxZ).endVertex(); buffer.vertex(matrix4f, (float) minX, (float) y, (float) maxZ).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).endVertex(); tessellator.end(); } } diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 6dee9db9e..463037623 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -106,7 +106,7 @@ public int getBestSlot(Block b, boolean preferSilkTouch, boolean pathingCalculat possible, this lets us make pathing depend on the actual tool to be used (if auto tool is disabled) */ if (Baritone.settings().disableAutoTool.value && pathingCalculation) { - return player.inventory.selected; + return player.getInventory().selected; } int best = 0; @@ -115,7 +115,7 @@ possible, this lets us make pathing depend on the actual tool to be used (if aut boolean bestSilkTouch = false; BlockState blockState = b.defaultBlockState(); for (int i = 0; i < 9; i++) { - ItemStack itemStack = player.inventory.getItem(i); + ItemStack itemStack = player.getInventory().getItem(i); double speed = calculateSpeedVsBlock(itemStack, blockState); boolean silkTouch = hasSilkTouch(itemStack); if (speed > highestSpeed) { @@ -144,7 +144,7 @@ possible, this lets us make pathing depend on the actual tool to be used (if aut * @return A double containing the destruction ticks with the best tool */ private double getBestDestructionTime(Block b) { - ItemStack stack = player.inventory.getItem(getBestSlot(b, false, true)); + ItemStack stack = player.getInventory().getItem(getBestSlot(b, false, true)); return calculateSpeedVsBlock(stack, b.defaultBlockState()) * avoidanceMultiplier(b); } diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index c9f3446e8..477ddf1ea 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -25,6 +25,10 @@ import java.util.Collections; import java.util.List; import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.monster.EnderMan; +import net.minecraft.world.entity.monster.Spider; +import net.minecraft.world.entity.monster.ZombifiedPiglin; public class Avoidance { @@ -68,11 +72,11 @@ public static List create(IPlayerContext ctx) { } if (mobCoeff != 1.0D) { ctx.entitiesStream() - .filter(entity -> entity instanceof MobEntity) - .filter(entity -> (!(entity instanceof SpiderEntity)) || ctx.player().getBrightness() < 0.5) - .filter(entity -> !(entity instanceof ZombifiedPiglinEntity) || ((ZombifiedPiglinEntity) entity).getRevengeTarget() != null) - .filter(entity -> !(entity instanceof EndermanEntity) || ((EndermanEntity) entity).isScreaming()) - .forEach(entity -> res.add(new Avoidance(entity.getPosition(), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); + .filter(entity -> entity instanceof Mob) + .filter(entity -> (!(entity instanceof Spider)) || ctx.player().getBrightness() < 0.5) + .filter(entity -> !(entity instanceof ZombifiedPiglin) || ((ZombifiedPiglin) entity).getLastHurtByMob() != null) + .filter(entity -> !(entity instanceof EnderMan) || ((EnderMan) entity).isCreepy()) + .forEach(entity -> res.add(new Avoidance(entity.blockPosition(), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); } return res; } diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index f3e25a7ab..0e9060379 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -49,7 +49,7 @@ public IPlayerController playerController() { @Override public Level world() { - return mc.world; + return mc.level; } @Override diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index d5412d501..bd91dc68b 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -28,7 +28,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.ClickType; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.GameType; import net.minecraft.world.level.Level; import net.minecraft.world.phys.BlockHitResult; @@ -46,52 +45,52 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { @Override public void syncHeldItem() { - ((IPlayerControllerMP) mc.playerController).callSyncCurrentPlayItem(); + ((IPlayerControllerMP) mc.gameMode).callSyncCurrentPlayItem(); } @Override public boolean hasBrokenBlock() { - return ((IPlayerControllerMP) mc.playerController).getCurrentBlock().getY() == -1; + return ((IPlayerControllerMP) mc.gameMode).getCurrentBlock().getY() == -1; } @Override public boolean onPlayerDamageBlock(BlockPos pos, Direction side) { - return mc.playerController.onPlayerDamageBlock(pos, side); + return mc.gameMode.continueDestroyBlock(pos, side); } @Override public void resetBlockRemoving() { - mc.playerController.resetBlockRemoving(); + mc.gameMode.stopDestroyBlock(); } @Override - public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, Player player) { - return mc.playerController.windowClick(windowId, slotId, mouseButton, type, player); + public void windowClick(int windowId, int slotId, int mouseButton, ClickType type, Player player) { + mc.gameMode.handleInventoryMouseClick(windowId, slotId, mouseButton, type, player); } @Override public GameType getGameType() { - return mc.playerController.getCurrentGameType(); + return mc.gameMode.getPlayerMode(); } @Override public InteractionResult processRightClickBlock(LocalPlayer player, Level world, InteractionHand hand, BlockHitResult result) { // primaryplayercontroller is always in a ClientWorld so this is ok - return mc.playerController.func_217292_a(player, (ClientLevel) world, hand, result); + return mc.gameMode.useItemOn(player, (ClientLevel) world, hand, result); } @Override public InteractionResult processRightClick(LocalPlayer player, Level world, InteractionHand hand) { - return mc.playerController.processRightClick(player, world, hand); + return mc.gameMode.useItem(player, world, hand); } @Override public boolean clickBlock(BlockPos loc, Direction face) { - return mc.playerController.clickBlock(loc, face); + return mc.gameMode.startDestroyBlock(loc, face); } @Override public void setHittingBlock(boolean hittingBlock) { - ((IPlayerControllerMP) mc.playerController).setIsHittingBlock(hittingBlock); + ((IPlayerControllerMP) mc.gameMode).setIsHittingBlock(hittingBlock); } } diff --git a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java index cc66b1eaa..29daa04db 100644 --- a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java +++ b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java @@ -51,30 +51,30 @@ public void testSimple() { BlockPos pos = new BlockPos(1, 2, 3); BetterBlockPos better = new BetterBlockPos(1, 2, 3); assertEquals(pos, better); - assertEquals(pos.above(), better.up()); - assertEquals(pos.below(), better.down()); + assertEquals(pos.above(), better.above()); + assertEquals(pos.below(), better.below()); assertEquals(pos.north(), better.north()); assertEquals(pos.south(), better.south()); assertEquals(pos.east(), better.east()); assertEquals(pos.west(), better.west()); for (Direction dir : Direction.values()) { - assertEquals(pos.relative(dir), better.offset(dir)); + assertEquals(pos.relative(dir), better.relative(dir)); assertEquals(pos.relative(dir, 0), pos); - assertEquals(better.offset(dir, 0), better); + assertEquals(better.relative(dir, 0), better); for (int i = -10; i < 10; i++) { - assertEquals(pos.relative(dir, i), better.offset(dir, i)); + assertEquals(pos.relative(dir, i), better.relative(dir, i)); } - assertTrue(better.offset(dir, 0) == better); + assertTrue(better.relative(dir, 0) == better); } for (int i = -10; i < 10; i++) { - assertEquals(pos.above(i), better.up(i)); - assertEquals(pos.below(i), better.down(i)); + assertEquals(pos.above(i), better.above(i)); + assertEquals(pos.below(i), better.below(i)); assertEquals(pos.north(i), better.north(i)); assertEquals(pos.south(i), better.south(i)); assertEquals(pos.east(i), better.east(i)); assertEquals(pos.west(i), better.west(i)); } - assertTrue(better.offset(null, 0) == better); + assertTrue(better.relative((Direction) null, 0) == better); } public void benchOne() { @@ -97,7 +97,7 @@ public void benchOne() { } long before2 = System.nanoTime() / 1000000L; for (int i = 0; i < 1000000; i++) { - pos2.up(); + pos2.above(); } long after2 = System.nanoTime() / 1000000L; System.out.println((after1 - before1) + " " + (after2 - before2)); @@ -127,11 +127,11 @@ public void benchN() { } long before2 = System.nanoTime() / 1000000L; for (int i = 0; i < 1000000; i++) { - pos2.up(0); - pos2.up(1); - pos2.up(2); - pos2.up(3); - pos2.up(4); + pos2.above(0); + pos2.above(1); + pos2.above(2); + pos2.above(3); + pos2.above(4); } long after2 = System.nanoTime() / 1000000L; System.out.println((after1 - before1) + " " + (after2 - before2)); From 8df87eb6200df1c70b092f650bfbac3593637f48 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Thu, 24 Jun 2021 12:50:40 -0600 Subject: [PATCH 179/935] bump fabric loader to support j16 --- build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f9391f8f1..35e6b6cc2 100755 --- a/build.gradle +++ b/build.gradle @@ -86,12 +86,13 @@ dependencies { minecraft "com.mojang:minecraft:1.17" mappings minecraft.officialMojangMappings() if (!compileType.equals("FORGE")) { - modImplementation "net.fabricmc:fabric-loader:0.9.1+build.205" + modImplementation "net.fabricmc:fabric-loader:0.11.6" } // this makes it compile with the forge tweak stuff implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' implementation('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' + exclude module: 'asm-debug-all' } implementation 'com.google.code.findbugs:jsr305:3.0.2' From a7b81940b3335f96bfe8cd19f0a8967d942ebc97 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Thu, 24 Jun 2021 13:00:33 -0600 Subject: [PATCH 180/935] fix j16 debug environment (may have to set cp to baritone.launch) --- .idea/copyright/Baritone.xml | 7 ------- .idea/copyright/profiles_settings.xml | 3 --- build.gradle | 5 ++--- src/launch/resources/fabric.mod.json | 4 ++-- src/launch/resources/mixins.baritone.json | 2 +- 5 files changed, 5 insertions(+), 16 deletions(-) delete mode 100644 .idea/copyright/Baritone.xml delete mode 100644 .idea/copyright/profiles_settings.xml diff --git a/.idea/copyright/Baritone.xml b/.idea/copyright/Baritone.xml deleted file mode 100644 index 77f2d5b13..000000000 --- a/.idea/copyright/Baritone.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index 24d95b3c9..000000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/build.gradle b/build.gradle index 35e6b6cc2..f81a794ef 100755 --- a/build.gradle +++ b/build.gradle @@ -30,10 +30,9 @@ import baritone.gradle.task.ProguardTask def compileType = project.hasProperty("baritone.fabric_build") ? "FABRIC" : project.hasProperty("baritone.forge_build") ? "FORGE" : "OFFICIAL" -sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8 +sourceCompatibility = targetCompatibility = JavaVersion.VERSION_16 compileJava { - sourceCompatibility = targetCompatibility = '1.8' options.encoding = "UTF-8" // allow emoji in comments :^) } @@ -119,7 +118,7 @@ tasks.withType(JavaCompile).configureEach { // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. // We'll use that if it's available, but otherwise we'll use the older option. - def targetVersion = 8 + def targetVersion = 16 if (JavaVersion.current().isJava9Compatible()) { it.options.release = targetVersion } diff --git a/src/launch/resources/fabric.mod.json b/src/launch/resources/fabric.mod.json index e9faec869..9f6a122c1 100644 --- a/src/launch/resources/fabric.mod.json +++ b/src/launch/resources/fabric.mod.json @@ -25,7 +25,7 @@ ], "depends": { - "fabricloader": ">=0.7.4", - "minecraft": "1.16.x" + "fabricloader": ">=0.11.6", + "minecraft": "1.17.x" } } \ No newline at end of file diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 6ef809b0b..12d3aad67 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -2,7 +2,7 @@ "required": true, "package": "baritone.launch.mixins", "refmap": "mixins.baritone.refmap.json", - "compatibilityLevel": "JAVA_8", + "compatibilityLevel": "JAVA_16", "verbose": false, "injectors": { "maxShiftBy": 2 From 2d2354730d4eee7beb58e01b40c97f053cad6193 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Fri, 25 Jun 2021 10:04:07 -0600 Subject: [PATCH 181/935] fix movement, mixins and color, proguard --- .../baritone/api/utils/gui/BaritoneToast.java | 2 +- .../mixins/MixinClientPlayNetHandler.java | 2 +- .../launch/mixins/MixinLootContext.java | 4 +- .../launch/mixins/MixinMinecraft.java | 13 +---- src/launch/resources/fabric.mod.json | 2 +- .../baritone/pathing/movement/Movement.java | 2 +- src/main/java/baritone/utils/GuiClick.java | 4 +- src/main/java/baritone/utils/IRenderer.java | 58 ++++++++++--------- .../java/baritone/utils/PathRenderer.java | 44 +++++++------- 9 files changed, 64 insertions(+), 67 deletions(-) diff --git a/src/api/java/baritone/api/utils/gui/BaritoneToast.java b/src/api/java/baritone/api/utils/gui/BaritoneToast.java index 3ed665e3e..850b7b6d8 100644 --- a/src/api/java/baritone/api/utils/gui/BaritoneToast.java +++ b/src/api/java/baritone/api/utils/gui/BaritoneToast.java @@ -44,7 +44,7 @@ public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long de } - //TODO: fix + //TODO: check toastGui.getMinecraft().getTextureManager().bindForSetup(new ResourceLocation("textures/gui/toasts.png")); //GlStateManager._color4f(1.0F, 1.0F, 1.0F, 255.0F); toastGui.blit(matrixStack, 0, 0, 0, 32, 160, 32); diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index e3b1d04d2..a1f321836 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -175,7 +175,7 @@ private void postHandleMultiBlockChange(ClientboundSectionBlocksUpdatePacket pac method = "handlePlayerCombatKill", at = @At( value = "INVOKE", - target = "net/minecraft/client/Minecraft.setScreen(Lnet/minecraft/client/gui/screen/Screen;)V" + target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V" ) ) private void onPlayerDeath(ClientboundPlayerCombatKillPacket packetIn, CallbackInfo ci) { diff --git a/src/launch/java/baritone/launch/mixins/MixinLootContext.java b/src/launch/java/baritone/launch/mixins/MixinLootContext.java index 2fe767d8e..7c7960cf1 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLootContext.java +++ b/src/launch/java/baritone/launch/mixins/MixinLootContext.java @@ -48,7 +48,7 @@ private MinecraftServer getServer(ServerLevel world) { method = "create", at = @At( value = "INVOKE", - target = "net/minecraft/server/MinecraftServer.getLootTableManager()Lnet/minecraft/loot/LootTableManager;" + target = "Lnet/minecraft/server/MinecraftServer;getLootTables()Lnet/minecraft/world/level/storage/loot/LootTables;" ) ) private LootTables getLootTableManager(MinecraftServer server) { @@ -62,7 +62,7 @@ private LootTables getLootTableManager(MinecraftServer server) { method = "create", at = @At( value = "INVOKE", - target = "net/minecraft/server/MinecraftServer.func_229736_aP_()Lnet/minecraft/loot/LootPredicateManager;" + target = "Lnet/minecraft/server/MinecraftServer;getPredicateManager()Lnet/minecraft/world/level/storage/loot/PredicateManager;" ) ) private PredicateManager getLootPredicateManager(MinecraftServer server) { diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 424082495..9d3223749 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -59,14 +59,7 @@ private void postInit(CallbackInfo ci) { @Inject( method = "runTick", - at = @At( - value = "FIELD", - opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/Minecraft.currentScreen:Lnet/minecraft/client/gui/screen/Screen;", - ordinal = 5, - shift = At.Shift.BY, - by = -3 - ) + at = @At("HEAD") ) private void runTick(CallbackInfo ci) { final BiFunction tickProvider = TickEvent.createNextProvider(); @@ -119,11 +112,11 @@ private void postLoadWorld(ClientLevel world, CallbackInfo ci) { } @Redirect( - method = "runTick", + method = "tick", at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/gui/screens/Screen.passEvents:Z" + target = "Lnet/minecraft/client/gui/screens/Screen;passEvents:Z" ) ) private boolean passEvents(Screen screen) { diff --git a/src/launch/resources/fabric.mod.json b/src/launch/resources/fabric.mod.json index 9f6a122c1..a1bed3a99 100644 --- a/src/launch/resources/fabric.mod.json +++ b/src/launch/resources/fabric.mod.json @@ -25,7 +25,7 @@ ], "depends": { - "fabricloader": ">=0.11.6", + "fabricloader": ">=0.11.0", "minecraft": "1.17.x" } } \ No newline at end of file diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index ac502b269..11b46e24a 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -156,7 +156,7 @@ protected boolean prepared(MovementState state) { } boolean somethingInTheWay = false; for (BetterBlockPos blockPos : positionsToBreak) { - if (!ctx.world().getEntities(null, new AABB(0, 0, 0, 1, 1.1, 1).move(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { + if (!ctx.world().getEntities(ctx.player(), new AABB(0, 0, 0, 1, 1.1, 1).move(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { return false; } if (!MovementHelper.canWalkThrough(ctx, blockPos)) { // can't break air, so don't try diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 6635016a4..70fd84689 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -128,8 +128,8 @@ public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { if (clickStart != null && !clickStart.equals(currentMouseOver)) { RenderSystem.enableBlend(); RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - //TODO: fix - //RenderSystem.color4f(Color.RED.getColorComponents(null)[0], Color.RED.getColorComponents(null)[1], Color.RED.getColorComponents(null)[2], 0.4F); + //TODO: check + IRenderer.glColor(Color.RED, 0.4F); RenderSystem.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); RenderSystem.disableTexture(); RenderSystem.depthMask(false); diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index cb52f2a00..d07bf44fa 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -36,10 +36,14 @@ public interface IRenderer { IEntityRenderManager renderManager = (IEntityRenderManager) Helper.mc.getEntityRenderDispatcher(); Settings settings = BaritoneAPI.getSettings(); + float[] color = new float[] {1.0F, 1.0F, 1.0F, 255.0F}; + static void glColor(Color color, float alpha) { float[] colorComponents = color.getColorComponents(null); - //TODO: fix - //RenderSystem.color4f(colorComponents[0], colorComponents[1], colorComponents[2], alpha); + IRenderer.color[0] = colorComponents[0]; + IRenderer.color[1] = colorComponents[1]; + IRenderer.color[2] = colorComponents[2]; + IRenderer.color[3] = alpha; } static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { @@ -74,34 +78,34 @@ static void drawAABB(PoseStack stack, AABB aabb) { Matrix4f matrix4f = stack.last().pose(); //TODO: check - buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION); + buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); // bottom - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); // top - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); // corners - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); tessellator.end(); } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index ffd4985bd..f68295bb7 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -190,14 +190,14 @@ public static void drawLine(PoseStack stack, double x1, double y1, double z1, do boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; //TODO: check - buffer.begin(renderPathAsFrickinThingy ? VertexFormat.Mode.DEBUG_LINE_STRIP : VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION); - buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); - buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); + buffer.begin(renderPathAsFrickinThingy ? VertexFormat.Mode.DEBUG_LINE_STRIP : VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); + buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); if (renderPathAsFrickinThingy) { - buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).endVertex(); - buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); - buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).endVertex(); + buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); } } @@ -251,7 +251,7 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, if (settings.renderGoalXZBeacon.value) { glPushAttrib(GL_LIGHTING_BIT); - //TODO: fix + //TODO: check Helper.mc.getTextureManager().bindForSetup(TEXTURE_BEACON_BEAM); if (settings.renderGoalIgnoreDepth.value) { RenderSystem.disableDepthTest(); @@ -324,15 +324,15 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); Matrix4f matrix4f = stack.last().pose(); - buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION); - buffer.vertex(matrix4f, (float) minX, (float) minY, (float) minZ).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) minZ).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) minZ).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) minZ).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) maxZ).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) maxZ).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) minY, (float) maxZ).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) maxZ).endVertex(); + buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); + buffer.vertex(matrix4f, (float) minX, (float) minY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) minY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); tessellator.end(); IRenderer.endLines(settings.renderGoalIgnoreDepth.value); @@ -342,12 +342,12 @@ private static void renderHorizontalQuad(PoseStack stack, double minX, double ma if (y != 0) { Matrix4f matrix4f = stack.last().pose(); //TODO: check - buffer.begin(VertexFormat.Mode.DEBUG_LINE_STRIP, DefaultVertexFormat.POSITION); - buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) y, (float) minZ).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) y, (float) maxZ).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) y, (float) maxZ).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).endVertex(); + buffer.begin(VertexFormat.Mode.DEBUG_LINE_STRIP, DefaultVertexFormat.POSITION_COLOR); + buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); tessellator.end(); } } From 40c323f53d7de69ac6d71d48570d8931754453c2 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sat, 26 Jun 2021 09:09:54 -0600 Subject: [PATCH 182/935] fix mis-mapping from manual mixin review and put this back --- .../java/baritone/launch/mixins/MixinMinecraft.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 9d3223749..82c62e2db 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -58,8 +58,15 @@ private void postInit(CallbackInfo ci) { @Inject( - method = "runTick", - at = @At("HEAD") + method = "tick", + at = @At( + value = "FIELD", + opcode = Opcodes.GETFIELD, + target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", + ordinal = 5, + shift = At.Shift.BY, + by = -3 + ) ) private void runTick(CallbackInfo ci) { final BiFunction tickProvider = TickEvent.createNextProvider(); From 683e987b1df8f9177f961dc29234c9b64da0c824 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sat, 26 Jun 2021 14:17:38 -0600 Subject: [PATCH 183/935] fix bad mapping breaking pathing on item entities. --- src/main/java/baritone/pathing/movement/Movement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 11b46e24a..03ac7022f 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -156,7 +156,7 @@ protected boolean prepared(MovementState state) { } boolean somethingInTheWay = false; for (BetterBlockPos blockPos : positionsToBreak) { - if (!ctx.world().getEntities(ctx.player(), new AABB(0, 0, 0, 1, 1.1, 1).move(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { + if (!ctx.world().getEntitiesOfClass(FallingBlockEntity.class, new AABB(0, 0, 0, 1, 1.1, 1).move(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { return false; } if (!MovementHelper.canWalkThrough(ctx, blockPos)) { // can't break air, so don't try From c7d210bfd6616a9e69aa2100038747cbe62f200e Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Mon, 5 Jul 2021 15:09:15 -0600 Subject: [PATCH 184/935] fix proguard maybe --- .../src/main/java/baritone/gradle/task/ProguardTask.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index ce41f3c2b..53d7ca6bf 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -236,10 +236,8 @@ private void generateConfigs() throws Exception { template.add(0, "-injars " + this.artifactPath.toString()); template.add(1, "-outjars " + this.getTemporaryFile(PROGUARD_EXPORT_PATH)); - // Acquire the RT jar using "java -verbose". This doesn't work on Java 9+ - Process p = new ProcessBuilder(this.getJavaBinPathForProguard(), "-verbose").start(); - String out = IOUtils.toString(p.getInputStream(), "UTF-8").split("\n")[0].split("Opened ")[1].replace("]", ""); - template.add(2, "-libraryjars '" + out + "'(!META-INF/versions/**)"); + template.add(2, "-libraryjars /jmods/java.base.jmod(!**.jar;!module-info.class)"); + template.add(3, "-libraryjars /jmods/java.desktop.jmod(!**.jar;!module-info.class)"); { final Stream libraries; From c06fdec28719e05bf9cb0ee65522cabd580d731c Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 6 Jul 2021 15:58:18 -0600 Subject: [PATCH 185/935] 1.17.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f81a794ef..ced2407f4 100755 --- a/build.gradle +++ b/build.gradle @@ -82,7 +82,7 @@ dependencies { if (compileType.equals("FORGE")) { //forge "net.minecraftforge:forge:1.16.5-36.1.0" } - minecraft "com.mojang:minecraft:1.17" + minecraft "com.mojang:minecraft:1.17.1" mappings minecraft.officialMojangMappings() if (!compileType.equals("FORGE")) { modImplementation "net.fabricmc:fabric-loader:0.11.6" From 29f5eaa35f852441372262001ab85a621b40df00 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sun, 11 Jul 2021 14:28:23 -0600 Subject: [PATCH 186/935] Amethyst Crystal and Pointed Dripstone --- .../pathing/movement/MovementHelper.java | 31 +++++-------------- 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index b2b3d05b0..3db7e44e7 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -23,6 +23,7 @@ import baritone.api.pathing.movement.ActionCosts; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.*; +import baritone.api.utils.Rotation; import baritone.api.utils.input.Input; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.BlockStateInterface; @@ -30,28 +31,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.block.AbstractSkullBlock; -import net.minecraft.world.level.block.AirBlock; -import net.minecraft.world.level.block.BambooBlock; -import net.minecraft.world.level.block.BaseFireBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.DoorBlock; -import net.minecraft.world.level.block.EndPortalBlock; -import net.minecraft.world.level.block.FallingBlock; -import net.minecraft.world.level.block.FenceGateBlock; -import net.minecraft.world.level.block.HorizontalDirectionalBlock; -import net.minecraft.world.level.block.InfestedBlock; -import net.minecraft.world.level.block.ScaffoldingBlock; -import net.minecraft.world.level.block.ShulkerBoxBlock; -import net.minecraft.world.level.block.SkullBlock; -import net.minecraft.world.level.block.SlabBlock; -import net.minecraft.world.level.block.SnowLayerBlock; -import net.minecraft.world.level.block.StainedGlassBlock; -import net.minecraft.world.level.block.StairBlock; -import net.minecraft.world.level.block.TrapDoorBlock; -import net.minecraft.world.level.block.WaterlilyBlock; -import net.minecraft.world.level.block.WoolCarpetBlock; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.piston.MovingPistonBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BooleanProperty; @@ -117,7 +97,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.POINTED_DRIPSTONE || block == Blocks.AMETHYST_CLUSTER) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { @@ -148,6 +128,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc // ok, it's low enough we could walk through it, but is it supported? return canWalkOn(bsi, x, y - 1, z); } + if (isFlowing(x, y, z, state, bsi)) { return false; // Don't walk through flowing liquids } @@ -545,7 +526,9 @@ static boolean isBlockNormalCube(BlockState state) { if (block instanceof BambooBlock || block instanceof MovingPistonBlock || block instanceof ScaffoldingBlock - || block instanceof ShulkerBoxBlock) { + || block instanceof ShulkerBoxBlock + || block instanceof PointedDripstoneBlock + || block instanceof AmethystClusterBlock) { return false; } return Block.isShapeFullBlock(state.getCollisionShape(null, null)); From 9c05133ac7e10f406d87584b726821d55a690c5c Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sun, 11 Jul 2021 22:10:13 -0600 Subject: [PATCH 187/935] cherry pick (and update) pr #2801 --- .github/workflows/gradle_build.yml | 39 ++++++++++++++++++++++++++++++ .github/workflows/run_tests.yml | 26 ++++++++++++++++++++ .travis.yml | 28 --------------------- scripts/proguard.pro | 2 ++ 4 files changed, 67 insertions(+), 28 deletions(-) create mode 100644 .github/workflows/gradle_build.yml create mode 100644 .github/workflows/run_tests.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml new file mode 100644 index 000000000..4a12b2bd1 --- /dev/null +++ b/.github/workflows/gradle_build.yml @@ -0,0 +1,39 @@ +# This workflow will build a Java project with Gradle +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle + +name: Java CI with Gradle + +on: + push: + pull_request: + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 16 + uses: actions/setup-java@v2 + with: + java-version: '16' + distribution: 'adopt' + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build with Gradle + run: ./gradlew build + + - name: Archive Artifacts + uses: actions/upload-artifact@v2 + with: + name: Artifacts + path: dist/ + + - name: Archive mapping.txt + uses: actions/upload-artifact@v2 + with: + name: Mappings + path: build/tmp/proguard/mapping.txt diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml new file mode 100644 index 000000000..581373af7 --- /dev/null +++ b/.github/workflows/run_tests.yml @@ -0,0 +1,26 @@ + +name: Tests + +on: + push: + pull_request: + +jobs: + test: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 16 + uses: actions/setup-java@v2 + with: + java-version: '16' + distribution: 'adopt' + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Executing tests + run: ./gradlew test + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 75d14ffc2..000000000 --- a/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ -language: java - -sudo: required - -services: -- docker - -install: -- travis_retry docker build -t cabaletta/baritone . - -script: -- docker run --name baritone cabaletta/baritone ./gradlew javadoc -- docker cp baritone:/code/dist dist -- ls dist -- cat dist/checksums.txt - -deploy: - provider: releases - api_key: - secure: YOuiXoJNpB4bW89TQoY2IGXg0tqOKls55YMXsSPU6Mx8WzRu8CjjO/A8KA9nGfNrKM+NucjiKr/h53O2Dp2uyy0i0SLvav/G0MaBMeB1NlPRwFopi6tVPNaoZsvr8NW4BIURhspckYLpOTYWnfmOkIv8q7AxrjUZWPKDlq0dte20UxEqUE6msHJ7U9XlKo/4fX40kvWMfwGI2hTyAtL0cRT1QPsd+uW3OQjAPcQj+jKaWld46V8pBK8g9Qde9mo8HC9NBv97zw1bBF1EFkynW569kElHvaS2Opl2QLGaf66guDbpnqDpGHMhQrDdxsZHJ4RksyITn+8A9UArmbkU35BxKqBeQqOWxod2+M0axdLh1pvX43Q1t9n7RiZBf7GvV8vkXL5Sjf8v6Y4LqkJGhvQkTUwpH+0knwrE761DMCtBC34AiWG70D4u7msmhurkflr9kmRHSj/3lyJ1Q2lkt8L+FOAlQBVs64vXTsfgc6Yge7N0O3UD5hCkrDNoz3BzhNBdCkbdxdKCGip71UZgUNkPy9o3ui8jATNj9ypx3+U8ovqP0XWlJqUZmyeXyNGW9NrLeCkRLTlLnZ/dv6OPONa1oAu4TwF1w5A+TGRFZcZjH/PnZKZDQ1OYQOR6drLKRYdr2unvuf5KUKUGqZ7aYtLGhP0rBvGWddRV7DSmX/s= - all_branches: true - file_glob: true - file: - - dist/* - skip_cleanup: true - on: - tags: true - repo: cabaletta/baritone diff --git a/scripts/proguard.pro b/scripts/proguard.pro index b4b1e021b..84b8e5ec9 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -337,3 +337,5 @@ public java.lang.String substring(int); public java.lang.String substring(int,int); } + +-printmapping mapping.txt From 8be821746ee7614cf15f876c4e39835fb4015238 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sun, 11 Jul 2021 22:20:06 -0600 Subject: [PATCH 188/935] update dockerfile to use java 16 debian doesn't provide it --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 440ace557..9538df60c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,11 @@ -FROM debian:stretch +FROM ubuntu:focal ENV DEBIAN_FRONTEND noninteractive RUN apt update -y RUN apt install \ - openjdk-8-jdk \ + openjdk-16-jdk \ --assume-yes COPY . /code From 0944e6255e507ae0f4584ba707b6006b5778bd5d Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sun, 11 Jul 2021 22:25:32 -0600 Subject: [PATCH 189/935] add fabric build to git --- .github/workflows/gradle_build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 4a12b2bd1..c0dbdfdc8 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -25,6 +25,9 @@ jobs: - name: Build with Gradle run: ./gradlew build + + - name: Build (fabric) with Gradle + run: ./gradlew build -Pbaritone.fabric_build - name: Archive Artifacts uses: actions/upload-artifact@v2 From 462dbce6658848466aa539da9957b424699d14e6 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Wed, 22 Sep 2021 12:14:43 -0600 Subject: [PATCH 190/935] prep forge support --- build.gradle | 24 ++++++++++++++---------- gradle.properties | 13 +++++++++++++ settings.gradle | 5 +---- 3 files changed, 28 insertions(+), 14 deletions(-) create mode 100644 gradle.properties diff --git a/build.gradle b/build.gradle index ced2407f4..10f30250e 100755 --- a/build.gradle +++ b/build.gradle @@ -17,13 +17,14 @@ plugins { id 'java' - id 'dev.architectury.loom' version '0.8.0-SNAPSHOT' + id 'dev.architectury.loom' version '0.10.0-SNAPSHOT' id 'maven-publish' } -group 'baritone' -version '1.7.0' +archivesBaseName = project.archives_base_name +version = project.mod_version +group = project.maven_group import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask @@ -60,12 +61,15 @@ sourceSets { } loom { - mixinConfig 'mixins.baritone.json' + if (compileType.equals("FORGE")) { + forge { + mixinConfig 'mixins.baritone.json' + } + } + mixin.defaultRefmapName = "mixins.baritone.refmap.json" } -minecraft {} -minecraft.refmapName = "mixins.baritone.refmap.json" repositories { maven { @@ -80,12 +84,12 @@ repositories { dependencies { if (compileType.equals("FORGE")) { - //forge "net.minecraftforge:forge:1.16.5-36.1.0" + forge "net.minecraftforge:forge:${project.forge_version}" } - minecraft "com.mojang:minecraft:1.17.1" - mappings minecraft.officialMojangMappings() + mappings loom.officialMojangMappings() + minecraft "com.mojang:minecraft:${project.minecraft_version}" if (!compileType.equals("FORGE")) { - modImplementation "net.fabricmc:fabric-loader:0.11.6" + modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" } // this makes it compile with the forge tweak stuff implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 000000000..e3fdcf846 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,13 @@ +org.gradle.jvmargs=-Xmx2048M + +mod_version=1.7.1 +maven_group=baritone +archives_base_name=baritone + +minecraft_version=1.17.1 +forge_version=1.17.1-37.0.69 +fabric_version=0.11.6 + +# # un comment for forge debugging default (as opposed to fabric) +# baritone.forge_build=true +# loom.platform=forge \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 7ff17f0a3..0e6cdeb43 100755 --- a/settings.gradle +++ b/settings.gradle @@ -37,7 +37,4 @@ pluginManagement { } mavenCentral() } -} - - -rootProject.name = 'baritone' +} \ No newline at end of file From 202618a32a0b45a50cceb92333c200d331d22678 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Wed, 22 Sep 2021 12:22:00 -0600 Subject: [PATCH 191/935] add forge build script --- .github/workflows/gradle_build.yml | 3 +++ Dockerfile | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index c0dbdfdc8..900cee060 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -28,6 +28,9 @@ jobs: - name: Build (fabric) with Gradle run: ./gradlew build -Pbaritone.fabric_build + + - name: Build (fabric) with Gradle + run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge - name: Archive Artifacts uses: actions/upload-artifact@v2 diff --git a/Dockerfile b/Dockerfile index 9538df60c..6dc0abd40 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,5 +13,5 @@ COPY . /code WORKDIR /code RUN ./gradlew build -RUN ./gradlew build -Pbaritone.forge_build -Ploom.forge=true +RUN ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge RUN ./gradlew build -Pbaritone.fabric_build From 2e2e725eb393c72747eae9eba77ea509601d7001 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Thu, 23 Sep 2021 19:10:52 -0600 Subject: [PATCH 192/935] fix proguard to have proper loom 0.10.x minecraft jar locations --- .github/workflows/gradle_build.yml | 2 +- .../src/main/java/baritone/gradle/task/ProguardTask.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 900cee060..c0b10b208 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -29,7 +29,7 @@ jobs: - name: Build (fabric) with Gradle run: ./gradlew build -Pbaritone.fabric_build - - name: Build (fabric) with Gradle + - name: Build (forge) with Gradle run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge - name: Archive Artifacts diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 53d7ca6bf..d31829384 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -92,11 +92,11 @@ private void copyMcJar() throws IOException { .map(f -> { switch (compType) { case "OFFICIAL": - return new File(f.getParentFile().getParentFile(), f.getName().toString().split("mapped")[0] + "merged.jar"); + return new File(f.getParentFile().getParentFile(), "minecraft-merged.jar"); case "FABRIC": - return new File(f.getParentFile().getParentFile(), f.getName().toString().replace("mapped", "intermediary")); + return new File(f.getParentFile(), "minecraft-intermediary.jar"); case "FORGE": - return new File(f.getParentFile().getParentFile(), f.getName().toString().replace("mapped", "srg")); + return new File(f.getParentFile(), "minecraft-srg.jar"); } return null; }) From de27fb2f68a9ea0761961db273718f6d16613011 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Thu, 23 Sep 2021 19:43:23 -0600 Subject: [PATCH 193/935] fix mc jar detection for forge build with loom 0.10.x --- .../main/java/baritone/gradle/task/ProguardTask.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index d31829384..aa5e36be0 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -85,10 +85,14 @@ protected void exec() throws Exception { cleanup(); } + private boolean isMcJar(File f) { + return f.getName().startsWith(compType.equals("FORGE") ? "forge-" : "minecraft-") && f.getName().contains("minecraft-mapped"); + } + private void copyMcJar() throws IOException { File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() .stream() - .filter(f -> f.getName().startsWith("minecraft-")) + .filter(this::isMcJar) .map(f -> { switch (compType) { case "OFFICIAL": @@ -245,12 +249,10 @@ private void generateConfigs() throws Exception { // Discover all of the libraries that we will need to acquire from gradle final Stream dependencies = acquireDependencies() // remove MCP mapped jar, and nashorn - .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")) - // go from the extra to the original downloaded client - .map(f -> f.toString().endsWith("client-extra.jar") ? new File(f.getParentFile(), "client.jar") : f); + .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")); libraries = dependencies - .map(f -> f.getName().startsWith("minecraft-") ? copyMcTargetJar : f); + .map(f -> isMcJar(f) ? copyMcTargetJar : f); } libraries.forEach(f -> { template.add(2, "-libraryjars '" + f + "'"); From 5ec6b7b72e653c2b1638f52f7c90fa2a80ea159b Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sat, 9 Oct 2021 14:16:49 -0600 Subject: [PATCH 194/935] make chunk cache/scanning work with data driven worldheight --- src/main/java/baritone/cache/CachedChunk.java | 40 ++++++++++++------- .../java/baritone/cache/CachedRegion.java | 17 ++++---- src/main/java/baritone/cache/CachedWorld.java | 5 ++- src/main/java/baritone/cache/ChunkPacker.java | 21 +++++----- src/main/java/baritone/cache/WorldData.java | 5 ++- .../java/baritone/cache/WorldProvider.java | 10 +++-- .../java/baritone/cache/WorldScanner.java | 17 ++++---- .../java/baritone/event/GameEventHandler.java | 2 +- 8 files changed, 67 insertions(+), 50 deletions(-) diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 56485fd72..bbc713af7 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -26,11 +26,10 @@ import java.util.List; import java.util.Map; import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; /** * @author Brady @@ -110,17 +109,19 @@ public final class CachedChunk { Blocks.VINE ); + public final int height; + /** * The size of the chunk data in bits. Equal to 16 KiB. *

- * Chunks are 16x16x256, each block requires 2 bits. + * Chunks are 16x16xH, each block requires 2 bits. */ - public static final int SIZE = 2 * 16 * 16 * 256; + public final int size; /** - * The size of the chunk data in bytes. Equal to 16 KiB. + * The size of the chunk data in bytes. Equal to 16 KiB for 256 height. */ - public static final int SIZE_IN_BYTES = SIZE / 8; + public final int sizeInBytes; /** * The chunk x coordinate @@ -152,11 +153,14 @@ public final class CachedChunk { public final long cacheTimestamp; - CachedChunk(int x, int z, BitSet data, BlockState[] overview, Map> specialBlockLocations, long cacheTimestamp) { + CachedChunk(int x, int z, int height, BitSet data, BlockState[] overview, Map> specialBlockLocations, long cacheTimestamp) { + this.size = size(height); + this.sizeInBytes = sizeInBytes(size); validateSize(data); this.x = x; this.z = z; + this.height = height; this.data = data; this.overview = overview; this.heightMap = new int[256]; @@ -171,6 +175,14 @@ public final class CachedChunk { calculateHeightMap(); } + public static int size(int dimension_height) { + return 2 * 16 * 16 * dimension_height; + } + + public static int sizeInBytes(int size) { + return size / 8; + } + private final void setSpecial() { for (Map.Entry> entry : specialBlockLocations.entrySet()) { for (BlockPos pos : entry.getValue()) { @@ -179,7 +191,7 @@ private final void setSpecial() { } } - public final BlockState getBlock(int x, int y, int z, ResourceKey dimension) { + public final BlockState getBlock(int x, int y, int z, DimensionType dimension) { int index = getPositionIndex(x, y, z); PathingBlockType type = getType(index); int internalPos = z << 4 | x; @@ -201,11 +213,11 @@ public final BlockState getBlock(int x, int y, int z, ResourceKey dimensi } if (type == PathingBlockType.SOLID) { - if (y == 127 && dimension == Level.NETHER) { + if (y == dimension.logicalHeight() - 1 && dimension.hasCeiling()) { // nether roof is always unbreakable return Blocks.BEDROCK.defaultBlockState(); } - if (y < 5 && dimension == Level.OVERWORLD) { + if (y < 5 && dimension.natural()) { // solid blocks below 5 are commonly bedrock // however, returning bedrock always would be a little yikes // discourage paths that include breaking blocks below 5 a little more heavily just so that it takes paths breaking what's known to be stone (at 5 or above) instead of what could maybe be bedrock (below 5) @@ -224,7 +236,7 @@ private void calculateHeightMap() { for (int x = 0; x < 16; x++) { int index = z << 4 | x; heightMap[index] = 0; - for (int y = 256; y >= 0; y--) { + for (int y = height; y >= 0; y--) { int i = getPositionIndex(x, y, z); if (data.get(i) || data.get(i + 1)) { heightMap[index] = y; @@ -275,14 +287,14 @@ public static int getPositionIndex(int x, int y, int z) { /** * Validates the size of an input {@link BitSet} containing the raw - * packed chunk data. Sizes that exceed {@link CachedChunk#SIZE} are + * 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) { + private void validateSize(BitSet data) { + if (data.size() > size) { throw new IllegalArgumentException("BitSet of invalid length provided"); } } diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index 7581e2bdc..e501a6bb4 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -28,9 +28,8 @@ import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; /** * @author Brady @@ -61,14 +60,14 @@ public final class CachedRegion implements ICachedRegion { */ private final int z; - private final ResourceKey dimension; + private final DimensionType dimension; /** * Has this region been modified since its most recent load or save */ private boolean hasUnsavedChanges; - CachedRegion(int x, int z, ResourceKey dimension) { + CachedRegion(int x, int z, DimensionType dimension) { this.x = x; this.z = z; this.hasUnsavedChanges = false; @@ -77,9 +76,10 @@ public final class CachedRegion implements ICachedRegion { @Override public final BlockState getBlock(int x, int y, int z) { + int adjY = y - dimension.minY(); CachedChunk chunk = chunks[x >> 4][z >> 4]; if (chunk != null) { - return chunk.getBlock(x & 15, y, z & 15, dimension); + return chunk.getBlock(x & 15, adjY, z & 15, dimension); } return null; } @@ -143,7 +143,7 @@ public synchronized final void save(String directory) { byte[] chunkBytes = chunk.toByteArray(); out.write(chunkBytes); // Messy, but fills the empty 0s that should be trailing to fill up the space. - out.write(new byte[CachedChunk.SIZE_IN_BYTES - chunkBytes.length]); + out.write(new byte[chunk.sizeInBytes - chunkBytes.length]); } } } @@ -224,10 +224,11 @@ public synchronized void load(String directory) { int isChunkPresent = in.read(); switch (isChunkPresent) { case CHUNK_PRESENT: - byte[] bytes = new byte[CachedChunk.SIZE_IN_BYTES]; + byte[] bytes = new byte[CachedChunk.sizeInBytes(CachedChunk.size(dimension.height()))]; in.readFully(bytes); bitSets[x][z] = BitSet.valueOf(bytes); location[x][z] = new HashMap<>(); + //this is top block in columns overview[x][z] = new BlockState[256]; present[x][z] = true; break; @@ -291,7 +292,7 @@ public synchronized void load(String directory) { int regionZ = this.z; int chunkX = x + 32 * regionX; int chunkZ = z + 32 * regionZ; - this.chunks[x][z] = new CachedChunk(chunkX, chunkZ, bitSets[x][z], overview[x][z], location[x][z], cacheTimestamp[x][z]); + this.chunks[x][z] = new CachedChunk(chunkX, chunkZ, dimension.height(), bitSets[x][z], overview[x][z], location[x][z], cacheTimestamp[x][z]); } } } diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 4d9ff16df..83fffd1a7 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -38,6 +38,7 @@ import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.dimension.DimensionType; /** * @author Brady @@ -72,9 +73,9 @@ public final class CachedWorld implements ICachedWorld, Helper { */ private final Map toPackMap = new ConcurrentHashMap<>(); - private final ResourceKey dimension; + private final DimensionType dimension; - CachedWorld(Path directory, ResourceKey dimension) { + CachedWorld(Path directory, DimensionType dimension) { if (!Files.exists(directory)) { try { Files.createDirectories(directory); diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index f85fc3cce..cd15e4ed7 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -21,8 +21,6 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.AirBlock; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -33,6 +31,7 @@ import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.PalettedContainer; +import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.phys.Vec3; import java.util.*; @@ -50,10 +49,11 @@ public static CachedChunk pack(LevelChunk chunk) { //long start = System.nanoTime() / 1000000L; Map> specialBlocks = new HashMap<>(); - BitSet bitSet = new BitSet(CachedChunk.SIZE); + final int height = chunk.getLevel().dimensionType().height(); + BitSet bitSet = new BitSet(CachedChunk.size(height)); try { LevelChunkSection[] chunkInternalStorageArray = chunk.getSections(); - for (int y0 = 0; y0 < 16; y0++) { + for (int y0 = 0; y0 < height / 16; y0++) { LevelChunkSection extendedblockstorage = chunkInternalStorageArray[y0]; if (extendedblockstorage == null) { // any 16x16x16 area that's all air will have null storage @@ -95,11 +95,12 @@ public static CachedChunk pack(LevelChunk chunk) { //System.out.println("Chunk packing took " + (end - start) + "ms for " + chunk.x + "," + chunk.z); BlockState[] blocks = new BlockState[256]; + // get top block in columns // @formatter:off for (int z = 0; z < 16; z++) { https://www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html for (int x = 0; x < 16; x++) { - for (int y = 255; y >= 0; y--) { + for (int y = height - 1; y >= 0; y--) { int index = CachedChunk.getPositionIndex(x, y, z); if (bitSet.get(index) || bitSet.get(index + 1)) { blocks[z << 4 | x] = getFromChunk(chunk, x, y, z); @@ -110,7 +111,7 @@ public static CachedChunk pack(LevelChunk chunk) { } } // @formatter:on - return new CachedChunk(chunk.getPos().x, chunk.getPos().z, bitSet, blocks, specialBlocks, System.currentTimeMillis()); + return new CachedChunk(chunk.getPos().x, chunk.getPos().z, height, bitSet, blocks, specialBlocks, System.currentTimeMillis()); } private static PathingBlockType getPathingBlockType(BlockState state, LevelChunk chunk, int x, int y, int z) { @@ -153,7 +154,7 @@ private static PathingBlockType getPathingBlockType(BlockState state, LevelChunk return PathingBlockType.SOLID; } - public static BlockState pathingTypeToBlock(PathingBlockType type, ResourceKey dimension) { + public static BlockState pathingTypeToBlock(PathingBlockType type, DimensionType dimension) { switch (type) { case AIR: return Blocks.AIR.defaultBlockState(); @@ -163,13 +164,13 @@ public static BlockState pathingTypeToBlock(PathingBlockType type, ResourceKey dimension; + public final DimensionType dimension; - WorldData(Path directory, ResourceKey dimension) { + WorldData(Path directory, DimensionType dimension) { this.directory = directory; this.cache = new CachedWorld(directory.resolve("cache"), dimension); this.waypoints = new WaypointCollection(directory.resolve("waypoints")); diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 7f992e6dc..3d30603b4 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -56,7 +56,7 @@ public final WorldData getCurrentWorld() { * * @param world The world's Registry Data */ - public final void initWorld(ResourceKey world) { + public final void initWorld(ResourceKey worldKey, DimensionType world) { File directory; File readme; @@ -64,7 +64,7 @@ public final void initWorld(ResourceKey world) { // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file if (mc.hasSingleplayerServer()) { - directory = DimensionType.getStorageFolder(world, integratedServer.getWorldPath(LevelResource.ROOT).toFile()); + directory = DimensionType.getStorageFolder(worldKey, integratedServer.getWorldPath(LevelResource.ROOT).toFile()); // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world if (directory.toPath().relativize(mc.gameDirectory.toPath()).getNameCount() != 2) { @@ -90,7 +90,7 @@ public final void initWorld(ResourceKey world) { } catch (IOException ignored) {} // We will actually store the world data in a subfolder: "DIM" - Path dir = DimensionType.getStorageFolder(world, directory).toPath(); + Path dir = getDimDir(worldKey, world.logicalHeight(), directory); if (!Files.exists(dir)) { try { Files.createDirectories(dir); @@ -103,6 +103,10 @@ public final void initWorld(ResourceKey world) { } } + public final Path getDimDir(ResourceKey level, int height, File directory) { + return directory.toPath().resolve(level.location().getNamespace()).resolve(level.location().getPath() + "_" + height); + } + public final void closeWorld() { WorldData world = this.currentWorld; this.currentWorld = null; diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index b4ec4afc8..8a932555a 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -37,8 +37,6 @@ public enum WorldScanner implements IWorldScanner { INSTANCE; - private static final int[] DEFAULT_COORDINATE_ITERATION_ORDER = IntStream.range(0, 16).toArray(); - @Override public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) { ArrayList res = new ArrayList<>(); @@ -51,10 +49,10 @@ public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLooku int maxSearchRadiusSq = maxSearchRadius * maxSearchRadius; int playerChunkX = ctx.playerFeet().getX() >> 4; int playerChunkZ = ctx.playerFeet().getZ() >> 4; - int playerY = ctx.playerFeet().getY(); + int playerY = ctx.playerFeet().getY() - ctx.world().dimensionType().minY(); int playerYBlockStateContainerIndex = playerY >> 4; - int[] coordinateIterationOrder = IntStream.range(0, 16).boxed().sorted(Comparator.comparingInt(y -> Math.abs(y - playerYBlockStateContainerIndex))).mapToInt(x -> x).toArray(); + int[] coordinateIterationOrder = IntStream.range(0, ctx.world().dimensionType().height() / 16).boxed().sorted(Comparator.comparingInt(y -> Math.abs(y - playerYBlockStateContainerIndex))).mapToInt(x -> x).toArray(); int searchRadiusSq = 0; boolean foundWithinY = false; @@ -75,7 +73,7 @@ public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLooku continue; } allUnloaded = false; - if (scanChunkInto(chunkX << 4, chunkZ << 4, chunk, filter, res, max, yLevelThreshold, playerY, coordinateIterationOrder)) { + if (scanChunkInto(chunkX << 4, chunkZ << 4, ctx.world().dimensionType().minY(), chunk, filter, res, max, yLevelThreshold, playerY, coordinateIterationOrder)) { foundWithinY = true; } } @@ -105,7 +103,7 @@ public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filt } ArrayList res = new ArrayList<>(); - scanChunkInto(pos.x << 4, pos.z << 4, chunk, filter, res, max, yLevelThreshold, playerY, DEFAULT_COORDINATE_ITERATION_ORDER); + scanChunkInto(pos.x << 4, pos.z << 4, ctx.world().dimensionType().minY(), chunk, filter, res, max, yLevelThreshold, playerY, IntStream.range(0, ctx.world().dimensionType().height() / 16).toArray()); return res; } @@ -144,11 +142,10 @@ public int repack(IPlayerContext ctx, int range) { return queued; } - private boolean scanChunkInto(int chunkX, int chunkZ, LevelChunk chunk, BlockOptionalMetaLookup filter, Collection result, int max, int yLevelThreshold, int playerY, int[] coordinateIterationOrder) { + private boolean scanChunkInto(int chunkX, int chunkZ, int minY, LevelChunk chunk, BlockOptionalMetaLookup filter, Collection result, int max, int yLevelThreshold, int playerY, int[] coordinateIterationOrder) { LevelChunkSection[] chunkInternalStorageArray = chunk.getSections(); boolean foundWithinY = false; - for (int yIndex = 0; yIndex < 16; yIndex++) { - int y0 = coordinateIterationOrder[yIndex]; + for (int y0 : coordinateIterationOrder) { LevelChunkSection section = chunkInternalStorageArray[y0]; if (section == null || LevelChunkSection.isEmpty(section)) { continue; @@ -172,7 +169,7 @@ private boolean scanChunkInto(int chunkX, int chunkZ, LevelChunk chunk, BlockOpt } } } - result.add(new BlockPos(chunkX | x, y, chunkZ | z)); + result.add(new BlockPos(chunkX | x, y + minY, chunkZ | z)); } } } diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 5056b6a0b..b7853e360 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -114,7 +114,7 @@ public final void onWorldEvent(WorldEvent event) { if (event.getState() == EventState.POST) { cache.closeWorld(); if (event.getWorld() != null) { - cache.initWorld(event.getWorld().dimension()); + cache.initWorld(event.getWorld().dimension(), event.getWorld().dimensionType()); } } From e055ef36d439a8e5a7d484c2b9335ba77d48d127 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sat, 9 Oct 2021 14:16:57 -0600 Subject: [PATCH 195/935] add parchment mappings --- build.gradle | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 10f30250e..fed91a19c 100755 --- a/build.gradle +++ b/build.gradle @@ -70,14 +70,14 @@ loom { } - repositories { maven { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' } maven { - url = 'https://www.dogforce-games.com/maven/' + name = "ldtteam" + url = "https://maven.parchmentmc.net/" } mavenCentral() } @@ -86,7 +86,11 @@ dependencies { if (compileType.equals("FORGE")) { forge "net.minecraftforge:forge:${project.forge_version}" } - mappings loom.officialMojangMappings() + mappings loom.layered() { + officialMojangMappings() + //technically optional, but really helpful in dev: + parchment("org.parchmentmc.data:parchment-1.17.1:BLEEDING-SNAPSHOT@zip" as String) + } minecraft "com.mojang:minecraft:${project.minecraft_version}" if (!compileType.equals("FORGE")) { modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" From d22a52976b2988a0daa7ec8324de32ab2c095d0c Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sat, 9 Oct 2021 14:54:07 -0600 Subject: [PATCH 196/935] fix A* and scanner for data driven world height --- src/main/java/baritone/cache/ChunkPacker.java | 9 +++++---- .../java/baritone/pathing/calc/AStarPathFinder.java | 10 ++++++---- src/main/java/baritone/utils/BlockStateInterface.java | 4 ++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index cd15e4ed7..0f3c11749 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -122,11 +122,12 @@ private static PathingBlockType getPathingBlockType(BlockState state, LevelChunk if (MovementHelper.possiblyFlowing(state)) { return PathingBlockType.AVOID; } + int adjY = y - chunk.getLevel().dimensionType().minY(); if ( - (x != 15 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x + 1, y, z))) - || (x != 0 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x - 1, y, z))) - || (z != 15 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x, y, z + 1))) - || (z != 0 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x, y, z - 1))) + (x != 15 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x + 1, adjY, z))) + || (x != 0 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x - 1, adjY, z))) + || (z != 15 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x, adjY, z + 1))) + || (z != 0 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x, adjY, z - 1))) ) { return PathingBlockType.AVOID; } diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index 3e38ff41d..9e3d1f153 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -49,6 +49,8 @@ public AStarPathFinder(int startX, int startY, int startZ, Goal goal, Favoring f @Override protected Optional calculate0(long primaryTimeout, long failureTimeout) { + int minY = calcContext.world.dimensionType().minY(); + int height = calcContext.world.dimensionType().height(); startNode = getNodeAtPosition(startX, startY, startZ, BetterBlockPos.longHash(startX, startY, startZ)); startNode.cost = 0; startNode.combinedCost = startNode.estimatedCostToGoal; @@ -80,9 +82,9 @@ protected Optional calculate0(long primaryTimeout, long failureTimeout) { while (!openSet.isEmpty() && numEmptyChunk < pathingMaxChunkBorderFetch && !cancelRequested) { if ((numNodes & (timeCheckInterval - 1)) == 0) { // only call this once every 64 nodes (about half a millisecond) long now = System.currentTimeMillis(); // since nanoTime is slow on windows (takes many microseconds) - if (now - failureTimeoutTime >= 0 || (!failing && now - primaryTimeoutTime >= 0)) { - break; - } +// if (now - failureTimeoutTime >= 0 || (!failing && now - primaryTimeoutTime >= 0)) { +// break; +// } } if (slowPath) { try { @@ -109,7 +111,7 @@ protected Optional calculate0(long primaryTimeout, long failureTimeout) { if (!moves.dynamicXZ && !worldBorder.entirelyContains(newX, newZ)) { continue; } - if (currentNode.y + moves.yOffset > 256 || currentNode.y + moves.yOffset < 0) { + if (currentNode.y + moves.yOffset > height || currentNode.y + moves.yOffset < 0) { continue; } res.reset(); diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index c37d898ef..c615ff4e1 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -97,9 +97,9 @@ public BlockState get0(BlockPos pos) { } public BlockState get0(int x, int y, int z) { // Mickey resigned - + y -= worldData.dimension.minY(); // Invalid vertical position - if (y < 0 || y >= 256) { + if (y < 0 || y >= worldData.dimension.height()) { return AIR; } From bd5ffe8f319c642b1fa567aeaac2c18ae876434a Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sat, 9 Oct 2021 14:55:20 -0600 Subject: [PATCH 197/935] put timeout back --- src/main/java/baritone/pathing/calc/AStarPathFinder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index 9e3d1f153..23ede2c7a 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -82,9 +82,9 @@ protected Optional calculate0(long primaryTimeout, long failureTimeout) { while (!openSet.isEmpty() && numEmptyChunk < pathingMaxChunkBorderFetch && !cancelRequested) { if ((numNodes & (timeCheckInterval - 1)) == 0) { // only call this once every 64 nodes (about half a millisecond) long now = System.currentTimeMillis(); // since nanoTime is slow on windows (takes many microseconds) -// if (now - failureTimeoutTime >= 0 || (!failing && now - primaryTimeoutTime >= 0)) { -// break; -// } + if (now - failureTimeoutTime >= 0 || (!failing && now - primaryTimeoutTime >= 0)) { + break; + } } if (slowPath) { try { From 6ed3a88491b2ea743ef333898fe1fab81f6d4718 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sat, 9 Oct 2021 15:29:02 -0600 Subject: [PATCH 198/935] continue fix mine and a* for data driven world height --- src/api/java/baritone/api/Settings.java | 1 + src/launch/java/baritone/launch/mixins/MixinItemStack.java | 2 ++ src/main/java/baritone/pathing/calc/AStarPathFinder.java | 2 +- .../java/baritone/pathing/movement/movements/MovementFall.java | 2 +- src/main/java/baritone/process/MineProcess.java | 2 +- 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 14f00055e..05d5d618c 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -741,6 +741,7 @@ public final class Settings { /** * Sets the minimum y level whilst mining - set to 0 to turn off. + * if world has negative y values, subtract the min world height to get the value to put here */ public final Setting minYLevelWhileMining = new Setting<>(0); diff --git a/src/launch/java/baritone/launch/mixins/MixinItemStack.java b/src/launch/java/baritone/launch/mixins/MixinItemStack.java index 1582bc880..e4d336d7a 100644 --- a/src/launch/java/baritone/launch/mixins/MixinItemStack.java +++ b/src/launch/java/baritone/launch/mixins/MixinItemStack.java @@ -63,6 +63,8 @@ private void onItemDamageSet(CallbackInfo ci) { @Override public int getBaritoneHash() { + // TODO: figure out why mixin not working, was 0 for some reason + if (baritoneHash == 0) recalculateHash(); return baritoneHash; } } diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index 23ede2c7a..b37b598ff 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -111,7 +111,7 @@ protected Optional calculate0(long primaryTimeout, long failureTimeout) { if (!moves.dynamicXZ && !worldBorder.entirelyContains(newX, newZ)) { continue; } - if (currentNode.y + moves.yOffset > height || currentNode.y + moves.yOffset < 0) { + if (currentNode.y + moves.yOffset > height || currentNode.y + moves.yOffset < minY) { continue; } res.reset(); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 669f0a7dd..cb8711757 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -179,7 +179,7 @@ private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, Better BetterBlockPos[] toBreak; int diffX = src.getX() - dest.getX(); int diffZ = src.getZ() - dest.getZ(); - int diffY = src.getY() - dest.getY(); + int diffY = Math.abs(src.getY() - dest.getY()); toBreak = new BetterBlockPos[diffY + 2]; for (int i = 0; i < toBreak.length; i++) { toBreak[i] = new BetterBlockPos(src.getX() - diffX, src.getY() + 1 - i, src.getZ() - diffZ); diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 34ae75e8c..cf14e7bf7 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -418,7 +418,7 @@ private static List prune(CalculationContext ctx, List locs2 } }) - .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value) + .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value + ctx.world.dimensionType().minY()) .filter(pos -> !blacklist.contains(pos)) From 64b647ea653d742dbd041641f2ef115bad483f0f Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Mon, 11 Oct 2021 04:42:26 -0600 Subject: [PATCH 199/935] oops... .idea folder contains copyright in file stuff (I thought gradle did that) --- .idea/copyright/Baritone.xml | 7 +++++++ .idea/copyright/profiles_settings.xml | 3 +++ 2 files changed, 10 insertions(+) create mode 100644 .idea/copyright/Baritone.xml create mode 100644 .idea/copyright/profiles_settings.xml diff --git a/.idea/copyright/Baritone.xml b/.idea/copyright/Baritone.xml new file mode 100644 index 000000000..77f2d5b13 --- /dev/null +++ b/.idea/copyright/Baritone.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 000000000..24d95b3c9 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file From 43ecc906c742a2272b1a48a80f252838c815e4c5 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 28 Oct 2021 08:03:37 -0600 Subject: [PATCH 200/935] cleanup --- build.gradle | 2 +- .../mixins/MixinSodiumChunkProvider.java | 94 ------------------- .../mixins/MixinSodiumFixedLongHashTable.java | 80 ---------------- src/launch/resources/mixins.baritone.json | 2 - .../utils/accessor/ISodiumChunkArray.java | 26 ----- 5 files changed, 1 insertion(+), 203 deletions(-) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java delete mode 100644 src/main/java/baritone/utils/accessor/ISodiumChunkArray.java diff --git a/build.gradle b/build.gradle index fed91a19c..2050d0207 100755 --- a/build.gradle +++ b/build.gradle @@ -89,7 +89,7 @@ dependencies { mappings loom.layered() { officialMojangMappings() //technically optional, but really helpful in dev: - parchment("org.parchmentmc.data:parchment-1.17.1:BLEEDING-SNAPSHOT@zip" as String) + parchment("org.parchmentmc.data:parchment-1.17.1:2021.10.24@zip" as String) } minecraft "com.mojang:minecraft:${project.minecraft_version}" if (!compileType.equals("FORGE")) { diff --git a/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java deleted file mode 100644 index 029c8cdaa..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinSodiumChunkProvider.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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.utils.accessor.IChunkArray; -import baritone.utils.accessor.IClientChunkProvider; -import baritone.utils.accessor.ISodiumChunkArray; -import org.spongepowered.asm.mixin.*; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.util.Arrays; -import java.util.concurrent.locks.StampedLock; -import net.minecraft.client.multiplayer.ClientChunkCache; -import net.minecraft.client.multiplayer.ClientLevel; - -@Pseudo -@Mixin(targets = "me.jellysquid.mods.sodium.client.world.SodiumChunkManager", remap = false) -public class MixinSodiumChunkProvider implements IClientChunkProvider { - - @Shadow - @Final - private StampedLock lock; - - @Shadow - @Final - private ClientLevel world; - - @Shadow - private int radius; - - @Unique - private static Constructor thisConstructor = null; - - @Unique - private static Field chunkArrayField = null; - - @Override - public ClientChunkCache createThreadSafeCopy() { - // similar operation to https://github.com/jellysquid3/sodium-fabric/blob/d3528521d48a130322c910c6f0725cf365ebae6f/src/main/java/me/jellysquid/mods/sodium/client/world/SodiumChunkManager.java#L139 - long stamp = this.lock.writeLock(); - - try { - ISodiumChunkArray refArray = extractReferenceArray(); - if (thisConstructor == null) { - thisConstructor = this.getClass().getConstructor(ClientLevel.class, int.class); - } - ClientChunkCache result = (ClientChunkCache) thisConstructor.newInstance(world, radius - 3); // -3 because it adds 3 for no reason here too lmao - IChunkArray copyArr = ((IClientChunkProvider) result).extractReferenceArray(); - copyArr.copyFrom(refArray); - return result; - } catch (InstantiationException | InvocationTargetException | NoSuchMethodException | IllegalAccessException e) { - throw new RuntimeException("Sodium chunk manager initialization for baritone failed", e); - } finally { - // put this in finally so we can't break anything. - this.lock.unlockWrite(stamp); - } - } - - @Override - public ISodiumChunkArray extractReferenceArray() { - https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.15 - if (chunkArrayField == null) { - for (Field f : this.getClass().getDeclaredFields()) { - if (ISodiumChunkArray.class.isAssignableFrom(f.getType())) { - chunkArrayField = f; - break https; - } - } - throw new RuntimeException(Arrays.toString(this.getClass().getDeclaredFields())); - } - try { - return (ISodiumChunkArray) chunkArrayField.get(this); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java b/src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java deleted file mode 100644 index 31443e77d..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinSodiumFixedLongHashTable.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.utils.accessor.IChunkArray; -import baritone.utils.accessor.ISodiumChunkArray; -import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import it.unimi.dsi.fastutil.objects.ObjectIterator; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.concurrent.atomic.AtomicReferenceArray; -import net.minecraft.world.level.chunk.LevelChunk; - -@Pseudo -@Mixin(targets = "me.jellysquid.mods.sodium.client.util.collections.FixedLongHashTable", remap = false) -public abstract class MixinSodiumFixedLongHashTable implements ISodiumChunkArray { - - @Shadow - public abstract ObjectIterator> iterator(); - - @Shadow - public abstract Object put(final long k, final Object v); - - /** - * similar to https://github.com/jellysquid3/sodium-fabric/blob/d3528521d48a130322c910c6f0725cf365ebae6f/src/main/java/me/jellysquid/mods/sodium/client/world/SodiumChunkManager.java#L149 - * except that since we aren't changing the radius, the key value doesn't change. - */ - @Override - public void copyFrom(IChunkArray other) { - ObjectIterator> it = ((ISodiumChunkArray) other).callIterator(); - while (it.hasNext()) { - Long2ObjectMap.Entry entry = it.next(); - this.put(entry.getLongKey(), entry.getValue()); - } - } - - @Override - public ObjectIterator> callIterator() { - return iterator(); - } - - //these are useless here... - @Override - public AtomicReferenceArray getChunks() { - return null; - } - - @Override - public int centerX() { - return 0; - } - - @Override - public int centerZ() { - return 0; - } - - @Override - public int viewDistance() { - return 0; - } - -} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 12d3aad67..befa220ff 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -22,8 +22,6 @@ "MixinNetworkManager", "MixinPlayerController", "MixinScreen", - "MixinSodiumChunkProvider", - "MixinSodiumFixedLongHashTable", "MixinWorldRenderer" ] } \ No newline at end of file diff --git a/src/main/java/baritone/utils/accessor/ISodiumChunkArray.java b/src/main/java/baritone/utils/accessor/ISodiumChunkArray.java deleted file mode 100644 index 7fcb25722..000000000 --- a/src/main/java/baritone/utils/accessor/ISodiumChunkArray.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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.accessor; - -import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import it.unimi.dsi.fastutil.objects.ObjectIterator; - -public interface ISodiumChunkArray extends IChunkArray { - - ObjectIterator> callIterator(); -} From 08c00b8a42f0cdd1b2cf5c4e353cd5e811a5baa2 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 3 Nov 2021 13:04:51 -0600 Subject: [PATCH 201/935] surround with try/catch --- .../java/baritone/pathing/movement/MovementHelper.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 13c1d4642..134b323f1 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -39,6 +39,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockReader; +import java.util.List; import java.util.Optional; import static baritone.pathing.movement.Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP; @@ -522,7 +523,12 @@ static boolean isBlockNormalCube(BlockState state) { || block instanceof ShulkerBoxBlock) { return false; } - return Block.isOpaque(state.getCollisionShape(null, null)); + try { + return Block.isOpaque(state.getCollisionShape(null, null)); + } catch (Exception ignored) { + // if we can't get the collision shape, assume it's bad and add to blocksToAvoid + } + return false; } static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, BlockPos placeAt, boolean preferDown, boolean wouldSneak) { From 62fe9888a2096dd245a568464950d7469e0a14f3 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 3 Nov 2021 13:42:29 -0600 Subject: [PATCH 202/935] eclipse dependency updated to java 11 on a minor version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c9d71fc29..801dd322b 100755 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ buildscript { dependencies { classpath group: 'com.github.ImpactDevelopment', name: 'ForgeGradle', version: '3.0.115' classpath group: 'com.github.ImpactDevelopment', name: 'MixinGradle', version: '0.6.2' - classpath group: 'net.fabricmc', name: 'fabric-loom', version: '0.5-SNAPSHOT' + classpath group: 'net.fabricmc', name: 'fabric-loom', version: '0.7-SNAPSHOT' } } From 9a9358bc78a71e9b5c0979b6080cc275e1693dd0 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 11 Nov 2021 12:49:47 -0700 Subject: [PATCH 203/935] WIP --- build.gradle | 2 +- gradle.properties | 6 +++--- .../baritone/launch/mixins/MixinClientPlayNetHandler.java | 4 ++-- src/launch/resources/fabric.mod.json | 2 +- src/main/java/baritone/cache/WorldScanner.java | 2 +- src/main/java/baritone/utils/BlockStateInterface.java | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 2050d0207..06be92b58 100755 --- a/build.gradle +++ b/build.gradle @@ -89,7 +89,7 @@ dependencies { mappings loom.layered() { officialMojangMappings() //technically optional, but really helpful in dev: - parchment("org.parchmentmc.data:parchment-1.17.1:2021.10.24@zip" as String) +// parchment("org.parchmentmc.data:parchment-1.17.1:2021.10.24@zip" as String) } minecraft "com.mojang:minecraft:${project.minecraft_version}" if (!compileType.equals("FORGE")) { diff --git a/gradle.properties b/gradle.properties index e3fdcf846..6b980966d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,12 @@ org.gradle.jvmargs=-Xmx2048M -mod_version=1.7.1 +mod_version=1.8.0 maven_group=baritone archives_base_name=baritone -minecraft_version=1.17.1 +minecraft_version=1.18-pre1 forge_version=1.17.1-37.0.69 -fabric_version=0.11.6 +fabric_version=0.12.5 # # un comment for forge debugging default (as opposed to fabric) # baritone.forge_build=true diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index a1f321836..297aabeef 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -64,10 +64,10 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { }*/ @Inject( - method = "handleLevelChunk", + method = "handleLevelChunkWithLight", at = @At("RETURN") ) - private void postHandleChunkData(ClientboundLevelChunkPacket packetIn, CallbackInfo ci) { + private void postHandleChunkData(ClientboundLevelChunkWithLightPacket packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { LocalPlayer player = ibaritone.getPlayerContext().player(); if (player != null && player.connection == (ClientPacketListener) (Object) this) { diff --git a/src/launch/resources/fabric.mod.json b/src/launch/resources/fabric.mod.json index a1bed3a99..9c9065f65 100644 --- a/src/launch/resources/fabric.mod.json +++ b/src/launch/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.17.x" + "minecraft": "1.18.x" } } \ No newline at end of file diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 8a932555a..2ce865a8d 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -147,7 +147,7 @@ private boolean scanChunkInto(int chunkX, int chunkZ, int minY, LevelChunk chunk boolean foundWithinY = false; for (int y0 : coordinateIterationOrder) { LevelChunkSection section = chunkInternalStorageArray[y0]; - if (section == null || LevelChunkSection.isEmpty(section)) { + if (section == null || section.hasOnlyAir()) { continue; } int yReal = y0 << 4; diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index c615ff4e1..7ea347d6d 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -169,7 +169,7 @@ public boolean isLoaded(int x, int z) { // get the block at x,y,z from this chunk WITHOUT creating a single blockpos object public static BlockState getFromChunk(LevelChunk chunk, int x, int y, int z) { LevelChunkSection section = chunk.getSections()[y >> 4]; - if (LevelChunkSection.isEmpty(section)) { + if (section.hasOnlyAir()) { return AIR; } return section.getBlockState(x & 15, y & 15, z & 15); From f1061cfd31b449487304322c80b18248bc3e4246 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 11 Nov 2021 15:17:24 -0700 Subject: [PATCH 204/935] fix baritone only ticking when screen open --- src/launch/java/baritone/launch/mixins/MixinMinecraft.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 82c62e2db..ae6996d0a 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -63,7 +63,7 @@ private void postInit(CallbackInfo ci) { value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", - ordinal = 5, + ordinal = 4, shift = At.Shift.BY, by = -3 ) From f52fee8254782b0cf83173b679540ff303f776d1 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 11 Nov 2021 15:23:29 -0700 Subject: [PATCH 205/935] revert this commit when shedaniel fixes arch-loom --- build.gradle | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 06be92b58..bf8f8381e 100755 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,8 @@ plugins { id 'java' - id 'dev.architectury.loom' version '0.10.0-SNAPSHOT' + id 'fabric-loom' version '0.10-SNAPSHOT' + //id 'dev.architectury.loom' version '0.10.0-SNAPSHOT' id 'maven-publish' } @@ -166,7 +167,7 @@ jar { if (compileType.equals("OFFICIAL")) { remapJar { - toM.set "official" +// toM.set "official" } } From b6fba56291c1a1f128843ce767d446130ab4fabc Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 11 Nov 2021 18:08:17 -0700 Subject: [PATCH 206/935] temp comment vanilla/forge --- .github/workflows/gradle_build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index c0b10b208..c8491d9e1 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -23,14 +23,14 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew build +# - name: Build with Gradle +# run: ./gradlew build - name: Build (fabric) with Gradle run: ./gradlew build -Pbaritone.fabric_build - - name: Build (forge) with Gradle - run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge +# - name: Build (forge) with Gradle +# run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge - name: Archive Artifacts uses: actions/upload-artifact@v2 From 186a3cb6df148283b8d4bb53735d827db6473ef6 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 12 Nov 2021 19:37:24 -0700 Subject: [PATCH 207/935] shedainel says its fixed --- .github/workflows/gradle_build.yml | 4 ++-- build.gradle | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index c8491d9e1..e292336f1 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -23,8 +23,8 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew -# - name: Build with Gradle -# run: ./gradlew build + - name: Build with Gradle + run: ./gradlew build - name: Build (fabric) with Gradle run: ./gradlew build -Pbaritone.fabric_build diff --git a/build.gradle b/build.gradle index bf8f8381e..06be92b58 100755 --- a/build.gradle +++ b/build.gradle @@ -17,8 +17,7 @@ plugins { id 'java' - id 'fabric-loom' version '0.10-SNAPSHOT' - //id 'dev.architectury.loom' version '0.10.0-SNAPSHOT' + id 'dev.architectury.loom' version '0.10.0-SNAPSHOT' id 'maven-publish' } @@ -167,7 +166,7 @@ jar { if (compileType.equals("OFFICIAL")) { remapJar { -// toM.set "official" + toM.set "official" } } From b73295d180179a136f82ca1f313bd282272132c3 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 16 Nov 2021 16:30:37 -0700 Subject: [PATCH 208/935] bump to gradle 7.3, java 17 and 1.18-pre2 --- .github/workflows/gradle_build.yml | 4 +- Dockerfile | 2 +- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 54413 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 53 ++++++++++++++-------- gradlew.bat | 43 ++++++++++-------- src/launch/resources/mixins.baritone.json | 2 +- 8 files changed, 63 insertions(+), 45 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index e292336f1..9e35b4324 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -14,10 +14,10 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up JDK 16 + - name: Set up JDK 17 uses: actions/setup-java@v2 with: - java-version: '16' + java-version: '17' distribution: 'adopt' - name: Grant execute permission for gradlew diff --git a/Dockerfile b/Dockerfile index 6dc0abd40..4168e1629 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ ENV DEBIAN_FRONTEND noninteractive RUN apt update -y RUN apt install \ - openjdk-16-jdk \ + openjdk-17-jdk \ --assume-yes COPY . /code diff --git a/gradle.properties b/gradle.properties index 6b980966d..ae8b8fdff 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ mod_version=1.8.0 maven_group=baritone archives_base_name=baritone -minecraft_version=1.18-pre1 +minecraft_version=1.18-pre2 forge_version=1.17.1-37.0.69 fabric_version=0.12.5 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 0d4a9516871afd710a9d84d89e31ba77745607bd..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f 100755 GIT binary patch literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM literal 54413 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0f80bbf51..e750102e0 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index cccdd3d51..4f906e0c8 100755 --- a/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -66,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index f9553162f..107acd32c 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index befa220ff..d3907b80f 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -2,7 +2,7 @@ "required": true, "package": "baritone.launch.mixins", "refmap": "mixins.baritone.refmap.json", - "compatibilityLevel": "JAVA_16", + "compatibilityLevel": "JAVA_17", "verbose": false, "injectors": { "maxShiftBy": 2 From e80e4afa482c88fb3f3ea875d3e57cecc8bf1e39 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 16 Nov 2021 16:41:34 -0700 Subject: [PATCH 209/935] bump proguard version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 06be92b58..40dfe09fb 100755 --- a/build.gradle +++ b/build.gradle @@ -173,7 +173,7 @@ if (compileType.equals("OFFICIAL")) { task proguard(type: ProguardTask) { - url 'https://downloads.sourceforge.net/project/proguard/v7.1.0-beta5/proguard-7.1.0-beta5.zip' + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.0-beta2/proguard-7.2.0-beta2.zip' extract 'proguard-7.1.0-beta5/lib/proguard.jar' compType compileType } From 90ac6f331e0fc18e0c5559c593dbcd3e1fa744d1 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 16 Nov 2021 16:47:37 -0700 Subject: [PATCH 210/935] missed a spot --- .github/workflows/run_tests.yml | 4 ++-- build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 581373af7..f8393273d 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -12,10 +12,10 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up JDK 16 + - name: Set up JDK 17 uses: actions/setup-java@v2 with: - java-version: '16' + java-version: '17' distribution: 'adopt' - name: Grant execute permission for gradlew diff --git a/build.gradle b/build.gradle index 40dfe09fb..a8819368b 100755 --- a/build.gradle +++ b/build.gradle @@ -31,7 +31,7 @@ import baritone.gradle.task.ProguardTask def compileType = project.hasProperty("baritone.fabric_build") ? "FABRIC" : project.hasProperty("baritone.forge_build") ? "FORGE" : "OFFICIAL" -sourceCompatibility = targetCompatibility = JavaVersion.VERSION_16 +sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17 compileJava { options.encoding = "UTF-8" // allow emoji in comments :^) @@ -174,7 +174,7 @@ if (compileType.equals("OFFICIAL")) { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.0-beta2/proguard-7.2.0-beta2.zip' - extract 'proguard-7.1.0-beta5/lib/proguard.jar' + extract 'proguard-7.2.0-beta2/lib/proguard.jar' compType compileType } From 088009fe4a8dac61dfc008acd1bf7b2b20bf41bc Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 17 Nov 2021 10:16:07 -0700 Subject: [PATCH 211/935] pre.3 --- gradle.properties | 2 +- .../java/baritone/cache/WorldProvider.java | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/gradle.properties b/gradle.properties index ae8b8fdff..f9024316a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ mod_version=1.8.0 maven_group=baritone archives_base_name=baritone -minecraft_version=1.18-pre2 +minecraft_version=1.18-pre3 forge_version=1.17.1-37.0.69 fabric_version=0.12.5 diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 3d30603b4..74401a401 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -57,34 +57,34 @@ public final WorldData getCurrentWorld() { * @param world The world's Registry Data */ public final void initWorld(ResourceKey worldKey, DimensionType world) { - File directory; - File readme; + Path directory; + Path readme; IntegratedServer integratedServer = mc.getSingleplayerServer(); // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file if (mc.hasSingleplayerServer()) { - directory = DimensionType.getStorageFolder(worldKey, integratedServer.getWorldPath(LevelResource.ROOT).toFile()); + directory = DimensionType.getStorageFolder(worldKey, integratedServer.getWorldPath(LevelResource.ROOT)); // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world - if (directory.toPath().relativize(mc.gameDirectory.toPath()).getNameCount() != 2) { + if (directory.relativize(mc.gameDirectory.toPath()).getNameCount() != 2) { // subdirectory of the main save directory for this world - directory = directory.getParentFile(); + directory = directory.getParent(); } - directory = new File(directory, "baritone"); + directory = directory.resolve("baritone"); readme = directory; } else { // Otherwise, the server must be remote... String folderName = mc.isConnectedToRealms() ? "realms" : mc.getCurrentServer().ip; if (SystemUtils.IS_OS_WINDOWS) { folderName = folderName.replace(":", "_"); } - directory = new File(Baritone.getDir(), folderName); - readme = Baritone.getDir(); + directory = Baritone.getDir().toPath().resolve(folderName); + readme = Baritone.getDir().toPath(); } // lol wtf is this baritone folder in my minecraft save? - try (FileOutputStream out = new FileOutputStream(new File(readme, "readme.txt"))) { + try (FileOutputStream out = new FileOutputStream(readme.resolve("readme.txt").toFile())) { // good thing we have a readme out.write("https://github.com/cabaletta/baritone\n".getBytes()); } catch (IOException ignored) {} @@ -103,8 +103,8 @@ public final void initWorld(ResourceKey worldKey, DimensionType world) { } } - public final Path getDimDir(ResourceKey level, int height, File directory) { - return directory.toPath().resolve(level.location().getNamespace()).resolve(level.location().getPath() + "_" + height); + public final Path getDimDir(ResourceKey level, int height, Path directory) { + return directory.resolve(level.location().getNamespace()).resolve(level.location().getPath() + "_" + height); } public final void closeWorld() { From 21534d1c0bafb5d27dadb97ae1144a54e9a2d19f Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Thu, 18 Nov 2021 00:21:12 +0100 Subject: [PATCH 212/935] Fix chat error messages being obfuscated for block type arguments --- scripts/proguard.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 9adc5174c..6f797771f 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -22,6 +22,7 @@ -keep class baritone.api.IBaritoneProvider -keep class baritone.api.utils.MyChunkPos { *; } # even in standalone we need to keep this for gson reflect +-keepname class baritone.api.utils.BlockOptionalMeta # this name is exposed to the user, so we need to keep it in all builds # Keep any class or member annotated with @KeepName so we dont have to put everything in the script -keep,allowobfuscation @interface baritone.KeepName From 1c8899ceaecd5971b7363f57052fa4aa70a7e9ea Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 30 Nov 2021 14:05:13 -0700 Subject: [PATCH 213/935] 1.18 release pre.5 pre.6 pre.7 rc.1 1.18 release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f9024316a..508f3545f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ mod_version=1.8.0 maven_group=baritone archives_base_name=baritone -minecraft_version=1.18-pre3 +minecraft_version=1.18 forge_version=1.17.1-37.0.69 fabric_version=0.12.5 From 587c2cc8e2f2c1e4192fcc982ba5772adcff2933 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 2 Dec 2021 11:13:56 -0700 Subject: [PATCH 214/935] forge support --- .github/workflows/gradle_build.yml | 4 ++-- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 9e35b4324..ebc037d45 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -29,8 +29,8 @@ jobs: - name: Build (fabric) with Gradle run: ./gradlew build -Pbaritone.fabric_build -# - name: Build (forge) with Gradle -# run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge + - name: Build (forge) with Gradle + run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge - name: Archive Artifacts uses: actions/upload-artifact@v2 diff --git a/gradle.properties b/gradle.properties index 508f3545f..6735ea871 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ maven_group=baritone archives_base_name=baritone minecraft_version=1.18 -forge_version=1.17.1-37.0.69 +forge_version=1.18-38.0.10 fabric_version=0.12.5 # # un comment for forge debugging default (as opposed to fabric) From 90fcffdf2a5f12c028dc9059f109d0cbbae5276b Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Sun, 12 Dec 2021 19:50:27 +0000 Subject: [PATCH 215/935] Remove container memory Signed-off-by: scorbett123 <50634068+scorbett123@users.noreply.github.com> --- src/api/java/baritone/api/Settings.java | 7 - .../baritone/api/cache/IContainerMemory.java | 44 --- .../api/cache/IRememberedInventory.java | 39 -- .../java/baritone/api/cache/IWorldData.java | 5 - src/main/java/baritone/Baritone.java | 6 - .../baritone/behavior/MemoryBehavior.java | 332 ------------------ .../java/baritone/cache/ContainerMemory.java | 183 ---------- src/main/java/baritone/cache/WorldData.java | 17 - .../command/defaults/ChestsCommand.java | 83 ----- .../command/defaults/DefaultCommands.java | 1 - 10 files changed, 717 deletions(-) delete mode 100644 src/api/java/baritone/api/cache/IContainerMemory.java delete mode 100644 src/api/java/baritone/api/cache/IRememberedInventory.java delete mode 100644 src/main/java/baritone/behavior/MemoryBehavior.java delete mode 100644 src/main/java/baritone/cache/ContainerMemory.java delete mode 100644 src/main/java/baritone/command/defaults/ChestsCommand.java diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index a3147292e..5611a4f93 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -555,13 +555,6 @@ public final class Settings { */ public final Setting pruneRegionsFromRAM = new Setting<>(true); - /** - * Remember the contents of containers (chests, echests, furnaces) - *

- * Really buggy since the packet stuff is multithreaded badly thanks to brady - */ - public final Setting containerMemory = new Setting<>(false); - /** * Fill in blocks behind you */ diff --git a/src/api/java/baritone/api/cache/IContainerMemory.java b/src/api/java/baritone/api/cache/IContainerMemory.java deleted file mode 100644 index 5c19d43b9..000000000 --- a/src/api/java/baritone/api/cache/IContainerMemory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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.cache; - -import net.minecraft.util.math.BlockPos; - -import java.util.Map; - -/** - * @author Brady - * @since 9/23/2018 - */ -public interface IContainerMemory { - - /** - * Gets a remembered inventory by its block position. - * - * @param pos The position of the container block - * @return The remembered inventory - */ - IRememberedInventory getInventoryByPos(BlockPos pos); - - /** - * Gets the map of all block positions to their remembered inventories. - * - * @return Map of block positions to their respective remembered inventories - */ - Map getRememberedInventories(); -} diff --git a/src/api/java/baritone/api/cache/IRememberedInventory.java b/src/api/java/baritone/api/cache/IRememberedInventory.java deleted file mode 100644 index a7890fe3a..000000000 --- a/src/api/java/baritone/api/cache/IRememberedInventory.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.cache; - -import net.minecraft.item.ItemStack; - -import java.util.List; - -/** - * @author Brady - * @since 9/23/2018 - */ -public interface IRememberedInventory { - - /** - * @return The contents of this inventory - */ - List getContents(); - - /** - * @return The number of slots in this inventory - */ - int getSize(); -} diff --git a/src/api/java/baritone/api/cache/IWorldData.java b/src/api/java/baritone/api/cache/IWorldData.java index 1eaade4c0..200771935 100644 --- a/src/api/java/baritone/api/cache/IWorldData.java +++ b/src/api/java/baritone/api/cache/IWorldData.java @@ -37,9 +37,4 @@ public interface IWorldData { */ IWaypointCollection getWaypoints(); - /** - * @return The {@link IContainerMemory} instance - * @see IContainerMemory - */ - IContainerMemory getContainerMemory(); } diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index d03953fd9..82451514f 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -68,7 +68,6 @@ public class Baritone implements IBaritone { private PathingBehavior pathingBehavior; private LookBehavior lookBehavior; - private MemoryBehavior memoryBehavior; private InventoryBehavior inventoryBehavior; private InputOverrideHandler inputOverrideHandler; @@ -100,7 +99,6 @@ public class Baritone implements IBaritone { // the Behavior constructor calls baritone.registerBehavior(this) so this populates the behaviors arraylist pathingBehavior = new PathingBehavior(this); lookBehavior = new LookBehavior(this); - memoryBehavior = new MemoryBehavior(this); inventoryBehavior = new InventoryBehavior(this); inputOverrideHandler = new InputOverrideHandler(this); } @@ -151,10 +149,6 @@ public IPlayerContext getPlayerContext() { return this.playerContext; } - public MemoryBehavior getMemoryBehavior() { - return this.memoryBehavior; - } - @Override public FollowProcess getFollowProcess() { return this.followProcess; diff --git a/src/main/java/baritone/behavior/MemoryBehavior.java b/src/main/java/baritone/behavior/MemoryBehavior.java deleted file mode 100644 index ee8bf0e43..000000000 --- a/src/main/java/baritone/behavior/MemoryBehavior.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * 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.behavior; - -import baritone.Baritone; -import baritone.api.cache.IWaypoint; -import baritone.api.cache.Waypoint; -import baritone.api.event.events.BlockInteractEvent; -import baritone.api.event.events.PacketEvent; -import baritone.api.event.events.PlayerUpdateEvent; -import baritone.api.event.events.TickEvent; -import baritone.api.event.events.type.EventState; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.Helper; -import baritone.cache.ContainerMemory; -import baritone.utils.BlockStateInterface; -import net.minecraft.block.Block; -import net.minecraft.block.BlockBed; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.network.Packet; -import net.minecraft.network.play.client.CPacketCloseWindow; -import net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock; -import net.minecraft.network.play.server.SPacketCloseWindow; -import net.minecraft.network.play.server.SPacketOpenWindow; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityLockable; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.*; - -import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; - -/** - * doesn't work for horse inventories :^) - * - * @author Brady - * @since 8/6/2018 - */ -public final class MemoryBehavior extends Behavior { - - private final List futureInventories = new ArrayList<>(); // this is per-bot - - private Integer enderChestWindowId; // nae nae - - public MemoryBehavior(Baritone baritone) { - super(baritone); - } - - @Override - public synchronized void onTick(TickEvent event) { - if (!Baritone.settings().containerMemory.value) { - return; - } - if (event.getType() == TickEvent.Type.OUT) { - enderChestWindowId = null; - futureInventories.clear(); - } - } - - @Override - public synchronized void onPlayerUpdate(PlayerUpdateEvent event) { - if (event.getState() == EventState.PRE) { - updateInventory(); - } - } - - @Override - public synchronized void onSendPacket(PacketEvent event) { - if (!Baritone.settings().containerMemory.value) { - return; - } - Packet p = event.getPacket(); - - if (event.getState() == EventState.PRE) { - if (p instanceof CPacketPlayerTryUseItemOnBlock) { - CPacketPlayerTryUseItemOnBlock packet = event.cast(); - - TileEntity tileEntity = ctx.world().getTileEntity(packet.getPos()); - // if tileEntity is an ender chest, we don't need to do anything. ender chests are treated the same regardless of what coordinate right clicked - - // Ensure the TileEntity is a container of some sort - if (tileEntity instanceof TileEntityLockable) { - - TileEntityLockable lockable = (TileEntityLockable) tileEntity; - int size = lockable.getSizeInventory(); - BetterBlockPos position = BetterBlockPos.from(tileEntity.getPos()); - BetterBlockPos adj = BetterBlockPos.from(neighboringConnectedBlock(position)); - System.out.println(position + " " + adj); - if (adj != null) { - size *= 2; // double chest or double trapped chest - if (adj.getX() < position.getX() || adj.getZ() < position.getZ()) { - position = adj; // standardize on the lower coordinate, regardless of which side of the large chest we right clicked - } - } - - this.futureInventories.add(new FutureInventory(System.nanoTime() / 1000000L, size, lockable.getGuiID(), position)); - } - } - - if (p instanceof CPacketCloseWindow) { - getCurrent().save(); - } - } - } - - @Override - public synchronized void onReceivePacket(PacketEvent event) { - if (!Baritone.settings().containerMemory.value) { - return; - } - Packet p = event.getPacket(); - - if (event.getState() == EventState.PRE) { - if (p instanceof SPacketOpenWindow) { - SPacketOpenWindow packet = event.cast(); - // Remove any entries that were created over a second ago, this should make up for INSANE latency - futureInventories.removeIf(i -> System.nanoTime() / 1000000L - i.time > 1000); - - System.out.println("Received packet " + packet.getGuiId() + " " + packet.getEntityId() + " " + packet.getSlotCount() + " " + packet.getWindowId()); - System.out.println(packet.getWindowTitle()); - if (packet.getWindowTitle() instanceof TextComponentTranslation && ((TextComponentTranslation) packet.getWindowTitle()).getKey().equals("container.enderchest")) { - // title is not customized (i.e. this isn't just a renamed shulker) - enderChestWindowId = packet.getWindowId(); - return; - } - futureInventories.stream() - .filter(i -> i.type.equals(packet.getGuiId()) && i.slots == packet.getSlotCount()) - .findFirst().ifPresent(matched -> { - // Remove the future inventory - futureInventories.remove(matched); - - // Setup the remembered inventory - getCurrentContainer().setup(matched.pos, packet.getWindowId(), packet.getSlotCount()); - }); - } - - if (p instanceof SPacketCloseWindow) { - getCurrent().save(); - } - } - } - - @Override - public void onBlockInteract(BlockInteractEvent event) { - if (event.getType() == BlockInteractEvent.Type.USE) { - BetterBlockPos pos = BetterBlockPos.from(event.getPos()); - IBlockState state = BlockStateInterface.get(ctx, pos); - if (state.getBlock() instanceof BlockBed) { - if (state.getValue(BlockBed.PART) == BlockBed.EnumPartType.FOOT) { - pos = pos.offset(state.getValue(BlockBed.FACING)); - } - Set waypoints = baritone.getWorldProvider().getCurrentWorld().getWaypoints().getByTag(IWaypoint.Tag.BED); - boolean exists = waypoints.stream().map(IWaypoint::getLocation).filter(pos::equals).findFirst().isPresent(); - if (!exists) { - baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(new Waypoint("bed", Waypoint.Tag.BED, pos)); - } - } - } - } - - @Override - public void onPlayerDeath() { - Waypoint deathWaypoint = new Waypoint("death", Waypoint.Tag.DEATH, ctx.playerFeet()); - baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(deathWaypoint); - ITextComponent component = new TextComponentString("Death position saved."); - component.getStyle() - .setColor(TextFormatting.WHITE) - .setHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, - new TextComponentString("Click to goto death") - )) - .setClickEvent(new ClickEvent( - ClickEvent.Action.RUN_COMMAND, - String.format( - "%s%s goto %s @ %d", - FORCE_COMMAND_PREFIX, - "wp", - deathWaypoint.getTag().getName(), - deathWaypoint.getCreationTimestamp() - ) - )); - Helper.HELPER.logDirect(component); - } - - - private void updateInventory() { - if (!Baritone.settings().containerMemory.value) { - return; - } - int windowId = ctx.player().openContainer.windowId; - if (enderChestWindowId != null) { - if (windowId == enderChestWindowId) { - getCurrent().contents = ctx.player().openContainer.getInventory().subList(0, 27); - } else { - getCurrent().save(); - enderChestWindowId = null; - } - } - if (getCurrentContainer() != null) { - getCurrentContainer().getInventoryFromWindow(windowId).ifPresent(inventory -> inventory.updateFromOpenWindow(ctx)); - } - } - - private ContainerMemory getCurrentContainer() { - if (baritone.getWorldProvider().getCurrentWorld() == null) { - return null; - } - return (ContainerMemory) baritone.getWorldProvider().getCurrentWorld().getContainerMemory(); - } - - private BlockPos neighboringConnectedBlock(BlockPos in) { - BlockStateInterface bsi = baritone.bsi; - Block block = bsi.get0(in).getBlock(); - if (block != Blocks.TRAPPED_CHEST && block != Blocks.CHEST) { - return null; // other things that have contents, but can be placed adjacent without combining - } - for (int i = 0; i < 4; i++) { - BlockPos adj = in.offset(EnumFacing.byHorizontalIndex(i)); - if (bsi.get0(adj).getBlock() == block) { - return adj; - } - } - return null; - } - - /** - * An inventory that we are not yet fully aware of, but are expecting to exist at some point in the future. - */ - private static final class FutureInventory { - - /** - * The time that we initially expected the inventory to be provided, in milliseconds - */ - private final long time; - - /** - * The amount of slots in the inventory - */ - private final int slots; - - /** - * The type of inventory - */ - private final String type; - - /** - * The position of the inventory container - */ - private final BlockPos pos; - - private FutureInventory(long time, int slots, String type, BlockPos pos) { - this.time = time; - this.slots = slots; - this.type = type; - this.pos = pos; - // betterblockpos has censoring - System.out.println("Future inventory created " + time + " " + slots + " " + type + " " + BetterBlockPos.from(pos)); - } - } - - public Optional> echest() { - return Optional.ofNullable(getCurrent().contents).map(Collections::unmodifiableList); - } - - public EnderChestMemory getCurrent() { - Path path = baritone.getWorldProvider().getCurrentWorld().directory; - return EnderChestMemory.getByServerAndPlayer(path.getParent(), ctx.player().getUniqueID()); - } - - public static class EnderChestMemory { - - private static final Map memory = new HashMap<>(); - private final Path enderChest; - private List contents; - - private EnderChestMemory(Path enderChest) { - this.enderChest = enderChest; - System.out.println("Echest storing in " + enderChest); - try { - this.contents = ContainerMemory.readItemStacks(Files.readAllBytes(enderChest)); - } catch (IOException e) { - e.printStackTrace(); - System.out.println("CANNOT read echest =( =("); - this.contents = null; - } - } - - public synchronized void save() { - System.out.println("Saving"); - if (contents != null) { - try { - enderChest.getParent().toFile().mkdir(); - Files.write(enderChest, ContainerMemory.writeItemStacks(contents)); - } catch (IOException e) { - e.printStackTrace(); - System.out.println("CANNOT save echest =( =("); - } - } - } - - private static synchronized EnderChestMemory getByServerAndPlayer(Path serverStorage, UUID player) { - return memory.computeIfAbsent(serverStorage.resolve("echests").resolve(player.toString()), EnderChestMemory::new); - } - } -} diff --git a/src/main/java/baritone/cache/ContainerMemory.java b/src/main/java/baritone/cache/ContainerMemory.java deleted file mode 100644 index e79435e3a..000000000 --- a/src/main/java/baritone/cache/ContainerMemory.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * 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.cache; - -import baritone.Baritone; -import baritone.api.cache.IContainerMemory; -import baritone.api.cache.IRememberedInventory; -import baritone.api.utils.IPlayerContext; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.math.BlockPos; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.NoSuchFileException; -import java.nio.file.Path; -import java.util.*; - -public class ContainerMemory implements IContainerMemory { - - private final Path saveTo; - /** - * The current remembered inventories - */ - private final Map inventories = new HashMap<>(); - - - public ContainerMemory(Path saveTo) { - this.saveTo = saveTo; - try { - read(Files.readAllBytes(saveTo)); - } catch (NoSuchFileException ignored) { - inventories.clear(); - } catch (Exception ex) { - ex.printStackTrace(); - inventories.clear(); - } - } - - private void read(byte[] bytes) throws IOException { - PacketBuffer in = new PacketBuffer(Unpooled.wrappedBuffer(bytes)); - int chests = in.readInt(); - for (int i = 0; i < chests; i++) { - int x = in.readInt(); - int y = in.readInt(); - int z = in.readInt(); - RememberedInventory rem = new RememberedInventory(); - rem.items.addAll(readItemStacks(in)); - rem.size = rem.items.size(); - rem.windowId = -1; - if (rem.items.isEmpty()) { - continue; // this only happens if the list has no elements, not if the list has elements that are all empty item stacks - } - inventories.put(new BlockPos(x, y, z), rem); - } - } - - public synchronized void save() throws IOException { - if (!Baritone.settings().containerMemory.value) { - return; - } - ByteBuf buf = Unpooled.buffer(0, Integer.MAX_VALUE); - PacketBuffer out = new PacketBuffer(buf); - out.writeInt(inventories.size()); - for (Map.Entry entry : inventories.entrySet()) { - out = new PacketBuffer(out.writeInt(entry.getKey().getX())); - out = new PacketBuffer(out.writeInt(entry.getKey().getY())); - out = new PacketBuffer(out.writeInt(entry.getKey().getZ())); - out = writeItemStacks(entry.getValue().getContents(), out); - } - Files.write(saveTo, out.array()); - } - - public synchronized void setup(BlockPos pos, int windowId, int slotCount) { - RememberedInventory inventory = inventories.computeIfAbsent(pos, x -> new RememberedInventory()); - inventory.windowId = windowId; - inventory.size = slotCount; - } - - public synchronized Optional getInventoryFromWindow(int windowId) { - return inventories.values().stream().filter(i -> i.windowId == windowId).findFirst(); - } - - @Override - public final synchronized RememberedInventory getInventoryByPos(BlockPos pos) { - return inventories.get(pos); - } - - @Override - public final synchronized Map getRememberedInventories() { - // make a copy since this map is modified from the packet thread - return new HashMap<>(inventories); - } - - public static List readItemStacks(byte[] bytes) throws IOException { - PacketBuffer in = new PacketBuffer(Unpooled.wrappedBuffer(bytes)); - return readItemStacks(in); - } - - public static List readItemStacks(PacketBuffer in) throws IOException { - int count = in.readInt(); - List result = new ArrayList<>(); - for (int i = 0; i < count; i++) { - result.add(in.readItemStack()); - } - return result; - } - - public static byte[] writeItemStacks(List write) { - ByteBuf buf = Unpooled.buffer(0, Integer.MAX_VALUE); - PacketBuffer out = new PacketBuffer(buf); - out = writeItemStacks(write, out); - return out.array(); - } - - public static PacketBuffer writeItemStacks(List write, PacketBuffer out2) { - PacketBuffer out = out2; // avoid reassigning an argument LOL - out = new PacketBuffer(out.writeInt(write.size())); - for (ItemStack stack : write) { - out = out.writeItemStack(stack); - } - return out; - } - - /** - * An inventory that we are aware of. - *

- * Associated with a {@link BlockPos} in {@link ContainerMemory#inventories}. - */ - public static class RememberedInventory implements IRememberedInventory { - - /** - * The list of items in the inventory - */ - private final List items; - - /** - * The last known window ID of the inventory - */ - private int windowId; - - /** - * The size of the inventory - */ - private int size; - - private RememberedInventory() { - this.items = new ArrayList<>(); - } - - @Override - public final List getContents() { - return Collections.unmodifiableList(this.items); - } - - @Override - public final int getSize() { - return this.size; - } - - public void updateFromOpenWindow(IPlayerContext ctx) { - items.clear(); - items.addAll(ctx.player().openContainer.getInventory().subList(0, size)); - } - } -} diff --git a/src/main/java/baritone/cache/WorldData.java b/src/main/java/baritone/cache/WorldData.java index 30fe8bd0d..cbdda3687 100644 --- a/src/main/java/baritone/cache/WorldData.java +++ b/src/main/java/baritone/cache/WorldData.java @@ -19,7 +19,6 @@ import baritone.Baritone; import baritone.api.cache.ICachedWorld; -import baritone.api.cache.IContainerMemory; import baritone.api.cache.IWaypointCollection; import baritone.api.cache.IWorldData; @@ -35,7 +34,6 @@ public class WorldData implements IWorldData { public final CachedWorld cache; private final WaypointCollection waypoints; - private final ContainerMemory containerMemory; //public final MapData map; public final Path directory; public final int dimension; @@ -44,7 +42,6 @@ public class WorldData implements IWorldData { this.directory = directory; this.cache = new CachedWorld(directory.resolve("cache"), dimension); this.waypoints = new WaypointCollection(directory.resolve("waypoints")); - this.containerMemory = new ContainerMemory(directory.resolve("containers")); this.dimension = dimension; } @@ -53,15 +50,6 @@ public void onClose() { System.out.println("Started saving the world in a new thread"); cache.save(); }); - Baritone.getExecutor().execute(() -> { - System.out.println("Started saving saved containers in a new thread"); - try { - containerMemory.save(); - } catch (IOException e) { - e.printStackTrace(); - System.out.println("Failed to save saved containers"); - } - }); } @Override @@ -73,9 +61,4 @@ public ICachedWorld getCachedWorld() { public IWaypointCollection getWaypoints() { return this.waypoints; } - - @Override - public IContainerMemory getContainerMemory() { - return this.containerMemory; - } } diff --git a/src/main/java/baritone/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java deleted file mode 100644 index b4dcda749..000000000 --- a/src/main/java/baritone/command/defaults/ChestsCommand.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.command.defaults; - -import baritone.api.IBaritone; -import baritone.api.cache.IRememberedInventory; -import baritone.api.command.Command; -import baritone.api.command.argument.IArgConsumer; -import baritone.api.command.exception.CommandException; -import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.utils.BetterBlockPos; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Stream; - -public class ChestsCommand extends Command { - - public ChestsCommand(IBaritone baritone) { - super(baritone, "chests"); - } - - @Override - public void execute(String label, IArgConsumer args) throws CommandException { - args.requireMax(0); - Set> entries = - ctx.worldData().getContainerMemory().getRememberedInventories().entrySet(); - if (entries.isEmpty()) { - throw new CommandInvalidStateException("No remembered inventories"); - } - for (Map.Entry entry : entries) { - // betterblockpos has censoring - BetterBlockPos pos = new BetterBlockPos(entry.getKey()); - IRememberedInventory inv = entry.getValue(); - logDirect(pos.toString()); - for (ItemStack item : inv.getContents()) { - ITextComponent component = item.getTextComponent(); - component.appendText(String.format(" x %d", item.getCount())); - logDirect(component); - } - } - } - - @Override - public Stream tabComplete(String label, IArgConsumer args) { - return Stream.empty(); - } - - @Override - public String getShortDesc() { - return "Display remembered inventories"; - } - - @Override - public List getLongDesc() { - return Arrays.asList( - "The chests command lists remembered inventories, I guess?", - "", - "Usage:", - "> chests" - ); - } -} diff --git a/src/main/java/baritone/command/defaults/DefaultCommands.java b/src/main/java/baritone/command/defaults/DefaultCommands.java index 17f338046..e998dcc97 100644 --- a/src/main/java/baritone/command/defaults/DefaultCommands.java +++ b/src/main/java/baritone/command/defaults/DefaultCommands.java @@ -51,7 +51,6 @@ public static List createAll(IBaritone baritone) { new TunnelCommand(baritone), new RenderCommand(baritone), new FarmCommand(baritone), - new ChestsCommand(baritone), new FollowCommand(baritone), new ExploreFilterCommand(baritone), new ReloadAllCommand(baritone), From bb8e4bd737149ed4c5582a026eedbb581ff383e1 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Sun, 2 Jan 2022 12:45:03 +0000 Subject: [PATCH 216/935] Add unpause as an alias for resume Some people can't seem to find out what to do to unpause baritone, so this should hopefully help them figure it out, as for some reason unpause makes more sense to people than resume. --- .../baritone/command/defaults/ExecutionControlCommands.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index 1b024c3b8..8a53e7d41 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -112,7 +112,7 @@ public List getLongDesc() { ); } }; - resumeCommand = new Command(baritone, "resume", "r") { + resumeCommand = new Command(baritone, "resume", "r", "unpause") { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); From 33ee39dcce99a6bea37304141f490f00e4431e02 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 10 Jan 2022 11:28:37 -0700 Subject: [PATCH 217/935] fix dripleaf and azalea behavior --- .../java/baritone/pathing/movement/MovementHelper.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 3db7e44e7..6578aba1e 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -97,7 +97,10 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.POINTED_DRIPSTONE || block == Blocks.AMETHYST_CLUSTER) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.POINTED_DRIPSTONE || block == Blocks.AMETHYST_CLUSTER || block instanceof AzaleaBlock) { + return false; + } + if (block == Blocks.BIG_DRIPLEAF) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { @@ -183,6 +186,7 @@ static boolean fullyPassable(BlockGetter access, BlockPos pos, BlockState state) || block == Blocks.VINE || block == Blocks.LADDER || block == Blocks.COCOA + || block instanceof AzaleaBlock || block instanceof DoorBlock || block instanceof FenceGateBlock || block instanceof SnowLayerBlock @@ -310,6 +314,9 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat if (isBlockNormalCube(state)) { return true; } + if (block instanceof AzaleaBlock) { + return true; + } if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this return true; } From 7f21362a2aea77049fe9f075ba86b626812ffd22 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 10 Jan 2022 11:28:37 -0700 Subject: [PATCH 218/935] fix dripleaf and azalea behavior change so rebuilds --- .../java/baritone/pathing/movement/MovementHelper.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 3db7e44e7..6578aba1e 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -97,7 +97,10 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.POINTED_DRIPSTONE || block == Blocks.AMETHYST_CLUSTER) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.POINTED_DRIPSTONE || block == Blocks.AMETHYST_CLUSTER || block instanceof AzaleaBlock) { + return false; + } + if (block == Blocks.BIG_DRIPLEAF) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { @@ -183,6 +186,7 @@ static boolean fullyPassable(BlockGetter access, BlockPos pos, BlockState state) || block == Blocks.VINE || block == Blocks.LADDER || block == Blocks.COCOA + || block instanceof AzaleaBlock || block instanceof DoorBlock || block instanceof FenceGateBlock || block instanceof SnowLayerBlock @@ -310,6 +314,9 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat if (isBlockNormalCube(state)) { return true; } + if (block instanceof AzaleaBlock) { + return true; + } if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this return true; } From e37d81d3fc574461a5e69455d694a9a4821888de Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 20 Jan 2022 15:19:35 -0700 Subject: [PATCH 219/935] fix runClient to actually have the right sourceSet by default --- build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.gradle b/build.gradle index 2050d0207..0de75c0c5 100755 --- a/build.gradle +++ b/build.gradle @@ -67,6 +67,12 @@ loom { } } mixin.defaultRefmapName = "mixins.baritone.refmap.json" + + runs { + client { + source = sourceSets.launch + } + } } From 33943dc4736c734173172b983701e0b82b2a4805 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 00:24:32 -0800 Subject: [PATCH 220/935] oopsie --- src/main/java/baritone/pathing/movement/MovementHelper.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index f1848a907..55957dc7e 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -550,16 +550,12 @@ static boolean isBlockNormalCube(BlockState state) { || block instanceof AmethystClusterBlock) { return false; } -<<<<<<< HEAD - return Block.isShapeFullBlock(state.getCollisionShape(null, null)); -======= try { - return Block.isOpaque(state.getCollisionShape(null, null)); + return Block.isShapeFullBlock(state.getCollisionShape(null, null)); } catch (Exception ignored) { // if we can't get the collision shape, assume it's bad and add to blocksToAvoid } return false; ->>>>>>> 1.16.4 } static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, BlockPos placeAt, boolean preferDown, boolean wouldSneak) { From dc4913d98dfd5ad2a743f2a09641b3f6ca1d8d4b Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 00:29:15 -0800 Subject: [PATCH 221/935] oopsie 2 --- .../baritone/pathing/movement/MovementHelper.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 55957dc7e..4eb4d9b3f 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -45,17 +45,6 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import net.minecraft.block.*; -import net.minecraft.fluid.*; -import net.minecraft.pathfinding.PathType; -import net.minecraft.state.BooleanProperty; -import net.minecraft.state.properties.SlabType; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.world.IBlockReader; import java.util.List; import java.util.Optional; From fa3f5ae52106d84141bf283bce4793af89e10c83 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 00:30:12 -0800 Subject: [PATCH 222/935] rm vscode stuff --- .vscode/launch.json | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index f1102ccf1..000000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "type": "java", - "name": "Minecraft Client", - "request": "launch", - "cwd": "${workspaceFolder}/run", - "console": "internalConsole", - "stopOnEntry": false, - "mainClass": "net.fabricmc.devlaunchinjector.Main", - "vmArgs": "-Dfabric.dli.config\u003dC:\\Users\\ruwag\\Documents\\Baritone\\.gradle\\loom-cache\\launch.cfg -Dfabric.dli.env\u003dclient -Dfabric.dli.main\u003dnet.fabricmc.loader.launch.knot.KnotClient", - "args": "", - "env": {}, - "projectName": "" - }, - { - "type": "java", - "name": "Minecraft Server", - "request": "launch", - "cwd": "${workspaceFolder}/run", - "console": "internalConsole", - "stopOnEntry": false, - "mainClass": "net.fabricmc.devlaunchinjector.Main", - "vmArgs": "-Dfabric.dli.config\u003dC:\\Users\\ruwag\\Documents\\Baritone\\.gradle\\loom-cache\\launch.cfg -Dfabric.dli.env\u003dserver -Dfabric.dli.main\u003dnet.fabricmc.loader.launch.knot.KnotServer", - "args": "nogui", - "env": {}, - "projectName": "" - } - ] -} \ No newline at end of file From 2f7f15da776757d2e20427b51e07a65f95e2a24f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 00:30:25 -0800 Subject: [PATCH 223/935] gitignore vscode file --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 4aaeac45e..146f4595b 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ classes/ # Copyright Files !/.idea/copyright/Baritone.xml !/.idea/copyright/profiles_settings.xml + +.vscode/launch.json From 71e17d6c299e403dd21d96cd4154fd37409ff930 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 00:35:37 -0800 Subject: [PATCH 224/935] v1.7.1 From e0779953320056e56879a4303e1454ac7d656176 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 00:38:06 -0800 Subject: [PATCH 225/935] v1.8.1 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6735ea871..59069b63d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.jvmargs=-Xmx2048M -mod_version=1.8.0 +mod_version=1.8.1 maven_group=baritone archives_base_name=baritone From 3fcc032547cab7f5d4f89efc42c12e5838137bb6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 00:49:51 -0800 Subject: [PATCH 226/935] readme updates for new release --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 635ffdf5f..1e9b249bc 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ Minecraft Minecraft Minecraft + Minecraft + Minecraft

@@ -56,9 +58,9 @@ For 1.15.2, [click here](https://www.youtube.com/watch?v=j1qKtCZFURM) and see de For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. -For 1.17.1 leijurv is too lazy to actually create a release so you can login to github and download the jars in the `artifacts` zip [here](https://github.com/cabaletta/baritone/actions/runs/1451572684) +For 1.17.1, if you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.1) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.1/baritone-api-fabric-1.7.1.jar)**. -For 1.18.1 leijurv is too lazy to actually create a release so you can login to github and download the jars in the `artifacts` zip [here](https://github.com/cabaletta/baritone/actions/runs/1472825778) +For 1.18.1, if you need Forge or Fabric 1.18.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.1) and get the `api-forge` or `api-fabric` jar. **For 1.18.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.1/baritone-api-fabric-1.8.1.jar)**. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 through 1.16.5. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). From ad14226c5c4ba4c6622f91ae66f586ace073a923 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 00:50:48 -0800 Subject: [PATCH 227/935] lets not keep updating this --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e9b249bc..17826c3e9 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ For 1.17.1, if you need Forge or Fabric 1.17.1, look [here](https://github.com/c For 1.18.1, if you need Forge or Fabric 1.18.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.1) and get the `api-forge` or `api-fabric` jar. **For 1.18.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.1/baritone-api-fabric-1.8.1.jar)**. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), -the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 through 1.16.5. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). +the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). Have committed at least once a day from Aug 1, 2018, to Aug 1, 2019. From 0908e509a1905d30683ecf6115206de5c4568c0e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 00:51:24 -0800 Subject: [PATCH 228/935] simplify a bit more --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 17826c3e9..86aab720b 100644 --- a/README.md +++ b/README.md @@ -58,9 +58,9 @@ For 1.15.2, [click here](https://www.youtube.com/watch?v=j1qKtCZFURM) and see de For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. -For 1.17.1, if you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.1) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.1/baritone-api-fabric-1.7.1.jar)**. +If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.1) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.1/baritone-api-fabric-1.7.1.jar)**. -For 1.18.1, if you need Forge or Fabric 1.18.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.1) and get the `api-forge` or `api-fabric` jar. **For 1.18.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.1/baritone-api-fabric-1.8.1.jar)**. +If you need Forge or Fabric 1.18.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.1) and get the `api-forge` or `api-fabric` jar. **For 1.18.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.1/baritone-api-fabric-1.8.1.jar)**. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). From 74ea803651c2e4d73c813ea38d2c790e26c209e0 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Wed, 2 Feb 2022 20:33:47 +0000 Subject: [PATCH 229/935] Add world border checks to MovementHelper --- .../java/baritone/pathing/movement/CalculationContext.java | 1 - src/main/java/baritone/pathing/movement/MovementHelper.java | 6 ++++++ src/main/java/baritone/utils/BlockStateInterface.java | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 124e6f109..fca6bc990 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -143,7 +143,6 @@ public double costOfPlacingAt(int x, int y, int z, IBlockState current) { return COST_INF; } if (!worldBorder.canPlaceAt(x, z)) { - // TODO perhaps MovementHelper.canPlaceAgainst could also use this? return COST_INF; } return placeBlockCost; diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index f5f565e39..23c261446 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -49,6 +49,9 @@ public interface MovementHelper extends ActionCosts, Helper { static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + if (!bsi.worldBorder.canPlaceAt(x, y)) { + return false; + } Block b = state.getBlock(); return Baritone.settings().blocksToDisallowBreaking.value.contains(b) || b == Blocks.ICE // ice becomes water, and water can mess up the path @@ -368,6 +371,9 @@ static boolean canPlaceAgainst(IPlayerContext ctx, BlockPos pos) { } static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + if (!bsi.worldBorder.canPlaceAt(x, z)) { + return false; + } // can we look at the center of a side face of this block and likely be able to place? // (thats how this check is used) // therefore dont include weird things that we technically could place against (like carpet) but practically can't diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 4f5f26899..f451c2f1d 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -22,6 +22,7 @@ import baritone.cache.CachedRegion; import baritone.cache.WorldData; import baritone.utils.accessor.IChunkProviderClient; +import baritone.utils.pathing.BetterWorldBorder; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import net.minecraft.block.Block; @@ -46,6 +47,7 @@ public class BlockStateInterface { protected final IBlockAccess world; public final BlockPos.MutableBlockPos isPassableBlockPos; public final IBlockAccess access; + public final BetterWorldBorder worldBorder; private Chunk prev = null; private CachedRegion prevCached = null; @@ -64,6 +66,7 @@ public BlockStateInterface(IPlayerContext ctx, boolean copyLoadedChunks) { public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedChunks) { this.world = world; + this.worldBorder = new BetterWorldBorder(world.getWorldBorder()); this.worldData = worldData; Long2ObjectMap worldLoaded = ((IChunkProviderClient) world.getChunkProvider()).loadedChunks(); if (copyLoadedChunks) { From 91bfab30e0d2071f0ec6f458ae0561ec95b62fe0 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 2 Feb 2022 14:10:20 -0700 Subject: [PATCH 230/935] fix tabbing --- src/main/java/baritone/cache/WorldProvider.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index ea8df06b2..675c515f2 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -81,12 +81,12 @@ public final void initWorld(ResourceKey worldKey, DimensionType world) { } else { if (mc.getCurrentServer() != null) { folderName = mc.getCurrentServer().ip; - } else { - //replaymod causes null currentServerData and false singleplayer. - currentWorld = null; - return; + } else { + //replaymod causes null currentServerData and false singleplayer. + currentWorld = null; + return; + } } - } if (SystemUtils.IS_OS_WINDOWS) { folderName = folderName.replace(":", "_"); } From 2d0f10c79fe4441d40bdefbc54a599037e543e5b Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 15:53:09 -0800 Subject: [PATCH 231/935] link to branches --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 86aab720b..eec452ba4 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@

- Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft

From 25de3324920fa375dad903f9386eabe496d291a6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 15:53:43 -0800 Subject: [PATCH 232/935] mfw this also needs to be in master --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 84a7e4319..d4c25ad90 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,6 @@ baritone_Client.launch # Copyright Files !/.idea/copyright/Baritone.xml !/.idea/copyright/profiles_settings.xml + +.vscode/launch.json + From fe26168a07a0d20fb0f854a83e2747712de77c6a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 15:54:39 -0800 Subject: [PATCH 233/935] v1.7.2 --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index e3fdcf846..6e8b1ff4a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.jvmargs=-Xmx2048M -mod_version=1.7.1 +mod_version=1.7.2 maven_group=baritone archives_base_name=baritone @@ -10,4 +10,4 @@ fabric_version=0.11.6 # # un comment for forge debugging default (as opposed to fabric) # baritone.forge_build=true -# loom.platform=forge \ No newline at end of file +# loom.platform=forge From b6cc15e9ab030d021143e09fa1f4065f2ce3992a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 15:55:22 -0800 Subject: [PATCH 234/935] v1.8.2 --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 59069b63d..162c6cc00 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.jvmargs=-Xmx2048M -mod_version=1.8.1 +mod_version=1.8.2 maven_group=baritone archives_base_name=baritone @@ -10,4 +10,4 @@ fabric_version=0.12.5 # # un comment for forge debugging default (as opposed to fabric) # baritone.forge_build=true -# loom.platform=forge \ No newline at end of file +# loom.platform=forge From e0a53144db0889eb9d279ce248b7a279600ccc8c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Feb 2022 16:10:14 -0800 Subject: [PATCH 235/935] bump most recent jars --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index eec452ba4..381e3f126 100644 --- a/README.md +++ b/README.md @@ -58,9 +58,9 @@ For 1.15.2, [click here](https://www.youtube.com/watch?v=j1qKtCZFURM) and see de For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. -If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.1) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.1/baritone-api-fabric-1.7.1.jar)**. +If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**. -If you need Forge or Fabric 1.18.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.1) and get the `api-forge` or `api-fabric` jar. **For 1.18.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.1/baritone-api-fabric-1.8.1.jar)**. +If you need Forge or Fabric 1.18.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.2) and get the `api-forge` or `api-fabric` jar. **For 1.18.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.2/baritone-api-fabric-1.8.2.jar)**. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). From a3dbec62dc3db933d1072fd56c6b975b2e0a6f0c Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 2 Feb 2022 21:47:45 -0700 Subject: [PATCH 236/935] fix getting stuck in powdered snow --- src/main/java/baritone/pathing/movement/MovementHelper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index c5119bec6..87eda9929 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -105,6 +105,9 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block == Blocks.BIG_DRIPLEAF) { return false; } + if (block == Blocks.POWDER_SNOW) { + return false; + } if (Baritone.settings().blocksToAvoid.value.contains(block)) { return false; } From 9b70ace1807baef93782bc34cfb37ab01359e091 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 2 Feb 2022 22:04:15 -0700 Subject: [PATCH 237/935] fix getting stuck on cauldrons (fixes #3099) --- src/main/java/baritone/pathing/movement/MovementHelper.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index f5f565e39..48ebd3c28 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -134,7 +134,9 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo } return block == Blocks.WATER || block == Blocks.FLOWING_WATER; } - + if (block instanceof BlockCauldron) { + return false; + } return block.isPassable(bsi.access, bsi.isPassableBlockPos.setPos(x, y, z)); } From 49357790f1e48186949b82f97d27b842e5ffd3e9 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Thu, 3 Feb 2022 08:06:01 +0000 Subject: [PATCH 238/935] fix world border checks Signed-off-by: scorbett123 <50634068+scorbett123@users.noreply.github.com> --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 23c261446..2990b7f20 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -50,7 +50,7 @@ public interface MovementHelper extends ActionCosts, Helper { static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { if (!bsi.worldBorder.canPlaceAt(x, y)) { - return false; + return true; } Block b = state.getBlock(); return Baritone.settings().blocksToDisallowBreaking.value.contains(b) From 7052fe62250c48bf4021857ceb8b44066887dc58 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 7 Feb 2022 22:03:31 -0800 Subject: [PATCH 239/935] put this on its own line --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 381e3f126..b125edf6e 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,9 @@ A Minecraft pathfinder bot. [**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) -Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. [Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) +Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. + +[Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.2.15/baritone-api-forge-1.2.15.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. From 407f4dbbaefb296866d6dd3f39897249eb144a33 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 8 Feb 2022 01:36:32 -0700 Subject: [PATCH 240/935] fix an array oob with dynamic worldheight --- src/api/java/baritone/api/pathing/movement/ActionCosts.java | 4 ++-- src/test/java/baritone/pathing/movement/ActionCostsTest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/java/baritone/api/pathing/movement/ActionCosts.java b/src/api/java/baritone/api/pathing/movement/ActionCosts.java index 683b1b10e..331631c50 100644 --- a/src/api/java/baritone/api/pathing/movement/ActionCosts.java +++ b/src/api/java/baritone/api/pathing/movement/ActionCosts.java @@ -65,8 +65,8 @@ public interface ActionCosts { static double[] generateFallNBlocksCost() { - double[] costs = new double[257]; - for (int i = 0; i < 257; i++) { + double[] costs = new double[4097]; + for (int i = 0; i < 4096; i++) { costs[i] = distanceToTicks(i); } return costs; diff --git a/src/test/java/baritone/pathing/movement/ActionCostsTest.java b/src/test/java/baritone/pathing/movement/ActionCostsTest.java index 9bfdafb0d..b35ea5a42 100644 --- a/src/test/java/baritone/pathing/movement/ActionCostsTest.java +++ b/src/test/java/baritone/pathing/movement/ActionCostsTest.java @@ -26,7 +26,7 @@ public class ActionCostsTest { @Test public void testFallNBlocksCost() { - assertEquals(FALL_N_BLOCKS_COST.length, 257); // Fall 0 blocks through fall 256 blocks + assertEquals(FALL_N_BLOCKS_COST.length, 4097); // Fall 0 blocks through fall 4096 blocks for (int i = 0; i < 257; i++) { double blocks = ticksToBlocks(FALL_N_BLOCKS_COST[i]); assertEquals(blocks, i, 0.000000000001); // If you add another 0 the test fails at i=217 LOL From 9dad1af960170f0ec1f87617bd36aa222a9f9791 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 8 Feb 2022 01:57:56 -0700 Subject: [PATCH 241/935] move up null check to fix new data-driven caused crash with replaymod --- src/main/java/baritone/utils/BlockStateInterface.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index c615ff4e1..95c8ba09d 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -97,6 +97,9 @@ public BlockState get0(BlockPos pos) { } public BlockState get0(int x, int y, int z) { // Mickey resigned + if (worldData == null) { + return AIR; + } y -= worldData.dimension.minY(); // Invalid vertical position if (y < 0 || y >= worldData.dimension.height()) { @@ -124,9 +127,6 @@ public BlockState get0(int x, int y, int z) { // Mickey resigned // except here, it's 512x512 tiles instead of 16x16, so even better repetition CachedRegion cached = prevCached; if (cached == null || cached.getX() != x >> 9 || cached.getZ() != z >> 9) { - if (worldData == null) { - return AIR; - } CachedRegion region = worldData.cache.getRegion(x >> 9, z >> 9); if (region == null) { return AIR; From 0ef1558803183edab08dcf47a39d65483141c49d Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 8 Feb 2022 02:09:20 -0700 Subject: [PATCH 242/935] fix this in a "better" way --- .../java/baritone/utils/BlockStateInterface.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 95c8ba09d..2ebc1c0fb 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -43,7 +43,7 @@ public class BlockStateInterface { private final ClientChunkCache provider; private final WorldData worldData; - protected final BlockGetter world; + protected final Level world; public final BlockPos.MutableBlockPos isPassableBlockPos; public final BlockGetter access; @@ -97,12 +97,9 @@ public BlockState get0(BlockPos pos) { } public BlockState get0(int x, int y, int z) { // Mickey resigned - if (worldData == null) { - return AIR; - } - y -= worldData.dimension.minY(); + y -= world.dimensionType().minY(); // Invalid vertical position - if (y < 0 || y >= worldData.dimension.height()) { + if (y < 0 || y >= world.dimensionType().height()) { return AIR; } @@ -127,6 +124,9 @@ public BlockState get0(int x, int y, int z) { // Mickey resigned // except here, it's 512x512 tiles instead of 16x16, so even better repetition CachedRegion cached = prevCached; if (cached == null || cached.getX() != x >> 9 || cached.getZ() != z >> 9) { + if (worldData == null) { + return AIR; + } CachedRegion region = worldData.cache.getRegion(x >> 9, z >> 9); if (region == null) { return AIR; From bfa644e7a7557e960db3ab1bd9b0065d2cb2cad8 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 8 Feb 2022 11:41:45 -0700 Subject: [PATCH 243/935] oops --- src/api/java/baritone/api/pathing/movement/ActionCosts.java | 2 +- src/test/java/baritone/pathing/movement/ActionCostsTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/java/baritone/api/pathing/movement/ActionCosts.java b/src/api/java/baritone/api/pathing/movement/ActionCosts.java index 331631c50..691d73b4d 100644 --- a/src/api/java/baritone/api/pathing/movement/ActionCosts.java +++ b/src/api/java/baritone/api/pathing/movement/ActionCosts.java @@ -66,7 +66,7 @@ public interface ActionCosts { static double[] generateFallNBlocksCost() { double[] costs = new double[4097]; - for (int i = 0; i < 4096; i++) { + for (int i = 0; i < 4097; i++) { costs[i] = distanceToTicks(i); } return costs; diff --git a/src/test/java/baritone/pathing/movement/ActionCostsTest.java b/src/test/java/baritone/pathing/movement/ActionCostsTest.java index b35ea5a42..a6d7e3e72 100644 --- a/src/test/java/baritone/pathing/movement/ActionCostsTest.java +++ b/src/test/java/baritone/pathing/movement/ActionCostsTest.java @@ -27,9 +27,9 @@ public class ActionCostsTest { @Test public void testFallNBlocksCost() { assertEquals(FALL_N_BLOCKS_COST.length, 4097); // Fall 0 blocks through fall 4096 blocks - for (int i = 0; i < 257; i++) { + for (int i = 0; i < 4097; i++) { double blocks = ticksToBlocks(FALL_N_BLOCKS_COST[i]); - assertEquals(blocks, i, 0.000000000001); // If you add another 0 the test fails at i=217 LOL + assertEquals(blocks, i, 0.00000000001); // If you add another 0 the test fails at i=989 LOL } assertEquals(FALL_1_25_BLOCKS_COST, 6.2344, 0.00001); assertEquals(FALL_0_25_BLOCKS_COST, 3.0710, 0.00001); From 0ade37f14f8af914c50046a5d681f1ffff3635c0 Mon Sep 17 00:00:00 2001 From: ehylo <1487662ehylo@gmail.com> Date: Tue, 8 Feb 2022 21:13:51 -0800 Subject: [PATCH 244/935] Update Setup and Usage guides Also fix 2 settings that just don't have a description for some reason, and add some information to the find command because that also for some reason did not have anything there. The descriptions I put may not be detailed enough so please let me know if things should change --- README.md | 2 +- SETUP.md | 21 ++++++++++++------- USAGE.md | 16 ++++++++++---- src/api/java/baritone/api/Settings.java | 6 ++++++ .../command/defaults/FindCommand.java | 4 ++-- 5 files changed, 35 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index b125edf6e..7222e4d89 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ jar. Below is an example of basic usage for changing some settings, and then pathing to an X/Z goal. -``` +```java BaritoneAPI.getSettings().allowSprint.value = true; BaritoneAPI.getSettings().primaryTimeoutMS.value = 2000L; diff --git a/SETUP.md b/SETUP.md index 7a43faa62..57866b192 100644 --- a/SETUP.md +++ b/SETUP.md @@ -11,7 +11,7 @@ These releases are not always completely up to date with latest features, and ar Link to the releases page: [Releases](https://github.com/cabaletta/baritone/releases) -v1.2.* is for 1.12.2, v1.3.* is for 1.13.2, v1.4.* is for 1.14.4, v1.5.* is for 1.15.2, v1.6.* is for 1.16.2 or 1.16.4 or 1.16.5 (LOL) +v1.2.* is for 1.12.2, v1.3.* is for 1.13.2, v1.4.* is for 1.14.4, v1.5.* is for 1.15.2, v1.6.* is for 1.16.5, v1.7.* is for 1.17.1, v1.8.* is for 1.18.1 Any official release will be GPG signed by leijurv (44A3EA646EADAC6A). Please verify that the hash of the file you download is in `checksums.txt` and that `checksums_signed.asc` is a valid signature by that public keys of `checksums.txt`. @@ -22,15 +22,16 @@ The build is fully deterministic and reproducible, and you can verify Travis did Building Baritone will result in 5 artifacts created in the ``dist`` directory. These are the same as the artifacts created in the [releases](https://github.com/cabaletta/baritone/releases). -**The Forge release can simply be added as a Forge mod.** +**The Forge and Fabric releases can simply be added as a Forge/Fabric mods.** If another one of your Forge mods has a Baritone integration, you want `baritone-api-forge-VERSION.jar`. Otherwise, you want `baritone-standalone-forge-VERSION.jar` - **API**: Only the non-api packages are obfuscated. This should be used in environments where other mods would like to use Baritone's features. -- **Forge API**: Same as API, but packaged for Forge. This should be used where another mod has a Baritone integration. +- **Forge/Fabric API**: Same as API, but packaged for Forge/Fabric. This should be used where another mod has a Baritone integration. - **Standalone**: Everything is obfuscated. This should be used in environments where there are no other mods present that would like to use Baritone's features. -- **Forge Standalone**: Same as Standalone, but packaged for Forge. This should be used when Baritone is your only Forge mod, or none of your other Forge mods integrate with Baritone. +- **Forge/Fabric Standalone**: Same as Standalone, but packaged for Forge/Fabric. This should be used when Baritone is your only Forge/Fabric mod, or none of your other Forge/Fabric mods integrate with Baritone. - **Unoptimized**: Nothing is obfuscated. This shouldn't be used ever in production. +- **Forge/Fabric Unoptimized**: Same as Unoptimized, but packaged for Forge/Fabric. ## Build it yourself - Clone or download Baritone @@ -42,13 +43,13 @@ If another one of your Forge mods has a Baritone integration, you want `baritone ## Command Line On Mac OSX and Linux, use `./gradlew` instead of `gradlew`. -If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8. +If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 for 1.12.2-1.16.5, JDK 16 for 1.17.1, and JDK 17 for 1.18.1. To check which java you are using do `java -version` in a command prompt or terminal. -If you are using anything above OpenJDK 8, it might not work because the Java distributions above JDK 8 using may not have the needed javax classes. +If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work because the Java distributions above JDK 8 using may not have the needed javax classes. -Open JDK 8 download: https://openjdk.java.net/install/ +Open JDK download: https://openjdk.java.net/install/ #### macOS guide In order to get JDK 8, Try running the following command: `% /usr/libexec/java_home -V` @@ -84,6 +85,12 @@ For minecraft 1.15.2+, run the following instead to include the Forge jars: $ gradlew build -Pbaritone.forge_build ``` +Do this instead for Fabric jars: + +``` +$ gradlew build -Pbaritone.fabric_build +``` + Running Baritone: ``` diff --git a/USAGE.md b/USAGE.md index f896ad012..46241e3fe 100644 --- a/USAGE.md +++ b/USAGE.md @@ -32,13 +32,13 @@ Watch this [showcase video](https://youtu.be/CZkLXWo4Fg4)! To toggle a boolean setting, just say its name in chat (for example saying `allowBreak` toggles whether Baritone will consider breaking blocks). For a numeric setting, say its name then the new value (like `primaryTimeoutMS 250`). It's case insensitive. To reset a setting to its default value, say `acceptableThrowawayItems reset`. To reset all settings, say `reset`. To see all settings that have been modified from their default values, say `modified`. -Some common examples: +Commands in Baritone: - `thisway 1000` then `path` to go in the direction you're facing for a thousand blocks - `goal x y z` or `goal x z` or `goal y`, then `path` to set a goal to a certain coordinate then path to it - `goto x y z` or `goto x z` or `goto y` to go to a certain coordinate (in a single step, starts going immediately) - `goal` to set the goal to your player's feet - `goal clear` to clear the goal -- `cancel` or `stop` to stop everything +- `cancel` or `stop` to stop everything, `forcecancel` is also an option - `goto portal` or `goto ender_chest` or `goto block_type` to go to a block. (in Impact, `.goto` is an alias for `.b goto` for the most part) - `mine diamond_ore iron_ore` to mine diamond ore or iron ore (turn on the setting `legitMine` to only mine ores that it can actually see. It will explore randomly around y=11 until it finds them.) An amount of blocks can also be specified, for example, `mine 64 diamond_ore`. - `click` to click your destination on the screen. Right click path to on top of the block, left click to path into it (either at foot level or eye level), and left click and drag to select an area (`#help sel` to see what you can do with that selection). @@ -51,11 +51,19 @@ Some common examples: - `axis` to go to an axis or diagonal axis at y=120 (`axisHeight` is a configurable setting, defaults to 120). - `explore x z` to explore the world from the origin of x,z. Leave out x and z to default to player feet. This will continually path towards the closest chunk to the origin that it's never seen before. `explorefilter filter.json` with optional invert can be used to load in a list of chunks to load. - `invert` to invert the current goal and path. This gets as far away from it as possible, instead of as close as possible. For example, do `goal` then `invert` to run as far as possible from where you're standing at the start. +- `come` tells Baritone to head towards your camera, useful when freecam doesn't move your player position. +- `blacklist` will stop baritone from going to the closest block so it won't attempt to get to it. +- `eta` to get information about the estimated time until the next segment and the goal, be aware that the ETA to your goal is really unprecise. +- `proc` to view miscellaneous information about the process currently controlling Baritone. +- `repack` to re-cache the chunks around you. +- `gc` to call `System.gc()` which may free up some memory. +- `render` to fix glitched chunk rendering without having to reload all of them. +- `reloadall` to reload Baritone's world cache or `saveall` to save Baritone's world cache. +- `find` to search through Baritone's cache and attempt to find the location of the block. +- `surface` or `top` to tell Baritone to head towards the closest surface-like area, this can be the surface or highest available air space. - `version` to get the version of Baritone you're running - `damn` daniel -For the rest of the commands, you can take a look at the code [here](https://baritone.leijurv.com/baritone/api/Settings.html). - All the settings and documentation are here. If you find HTML easier to read than Javadoc, you can look here. There are about a hundred settings, but here are some fun / interesting / important ones that you might want to look at changing in normal usage of Baritone. The documentation for each can be found at the above links. diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index c3ea4225a..b0eda7489 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -385,6 +385,9 @@ public final class Settings { */ public final Setting mobSpawnerAvoidanceCoefficient = new Setting<>(2.0); + /** + * Distance to avoid mob spawners. + */ public final Setting mobSpawnerAvoidanceRadius = new Setting<>(16); /** @@ -394,6 +397,9 @@ public final class Settings { */ public final Setting mobAvoidanceCoefficient = new Setting<>(1.5); + /** + * Distance to avoid mobs. + */ public final Setting mobAvoidanceRadius = new Setting<>(8); /** diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 22e6815be..65eb9b5c3 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -71,10 +71,10 @@ public String getShortDesc() { @Override public List getLongDesc() { return Arrays.asList( - "", + "The find command searches through Baritone's cache and attempts to find the location of the block.", "", "Usage:", - "> " + "> find - Find positions of a certain block" ); } } From d0dc8cf726a155c678058f75192f67c848717448 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 14 Feb 2022 15:35:34 -0700 Subject: [PATCH 245/935] fix amethyst bud stuck --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 87eda9929..09f9f8081 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -99,7 +99,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.POINTED_DRIPSTONE || block == Blocks.AMETHYST_CLUSTER || block instanceof AzaleaBlock) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.POINTED_DRIPSTONE || block == Blocks.AMETHYST_CLUSTER || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { return false; } if (block == Blocks.BIG_DRIPLEAF) { From 519a76a171280bd599afa9df350b56b6f2bb9e02 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 28 Feb 2022 15:29:37 -0700 Subject: [PATCH 246/935] fix for 1.18.2 --- .github/workflows/gradle_build.yml | 4 ++-- gradle.properties | 4 ++-- src/api/java/baritone/api/utils/BlockOptionalMeta.java | 5 ++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index ebc037d45..9e35b4324 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -29,8 +29,8 @@ jobs: - name: Build (fabric) with Gradle run: ./gradlew build -Pbaritone.fabric_build - - name: Build (forge) with Gradle - run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge +# - name: Build (forge) with Gradle +# run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge - name: Archive Artifacts uses: actions/upload-artifact@v2 diff --git a/gradle.properties b/gradle.properties index 162c6cc00..3954aa49b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,10 +1,10 @@ org.gradle.jvmargs=-Xmx2048M -mod_version=1.8.2 +mod_version=1.8.3 maven_group=baritone archives_base_name=baritone -minecraft_version=1.18 +minecraft_version=1.18.2 forge_version=1.18-38.0.10 fabric_version=0.12.5 diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index d7b1b8148..d18936bf7 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -29,7 +29,6 @@ import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.ServerPacksSource; import net.minecraft.server.packs.resources.ReloadableResourceManager; -import net.minecraft.server.packs.resources.SimpleReloadableResourceManager; import net.minecraft.util.Unit; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -147,11 +146,11 @@ public static LootTables getManager() { PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource()); rpl.reload(); PackResources thePack = rpl.getAvailablePacks().iterator().next().open(); - ReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(PackType.SERVER_DATA); + ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); manager = new LootTables(predicate); resourceManager.registerReloadListener(manager); try { - resourceManager.reload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), Collections.singletonList(thePack), CompletableFuture.completedFuture(Unit.INSTANCE)).get(); + resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), Collections.singletonList(thePack)).done().get(); } catch (Exception exception) { throw new RuntimeException(exception); } From 38c5388e0088ae87585b45f6069281819cf58dbe Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 1 Mar 2022 16:36:09 -0700 Subject: [PATCH 247/935] forge updated (finally) --- .github/workflows/gradle_build.yml | 4 ++-- gradle.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 9e35b4324..ebc037d45 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -29,8 +29,8 @@ jobs: - name: Build (fabric) with Gradle run: ./gradlew build -Pbaritone.fabric_build -# - name: Build (forge) with Gradle -# run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge + - name: Build (forge) with Gradle + run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge - name: Archive Artifacts uses: actions/upload-artifact@v2 diff --git a/gradle.properties b/gradle.properties index 3954aa49b..77cfe8cf6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,8 +5,8 @@ maven_group=baritone archives_base_name=baritone minecraft_version=1.18.2 -forge_version=1.18-38.0.10 -fabric_version=0.12.5 +forge_version=1.18.2-40.0.0 +fabric_version=0.13.1 # # un comment for forge debugging default (as opposed to fabric) # baritone.forge_build=true From e6ee5fc6b84c17164633607a43aed12477839cde Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sat, 5 Mar 2022 17:56:20 +0100 Subject: [PATCH 248/935] Make positions from #find clickable --- .../command/defaults/FindCommand.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 65eb9b5c3..b20857b4c 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -24,12 +24,19 @@ import baritone.api.command.exception.CommandException; import baritone.api.utils.BetterBlockPos; import net.minecraft.block.Block; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + public class FindCommand extends Command { public FindCommand(IBaritone baritone) { @@ -54,10 +61,23 @@ public void execute(String label, IArgConsumer args) throws CommandException { ).stream() ) .map(BetterBlockPos::new) - .map(BetterBlockPos::toString) + .map(this::positionToComponent) .forEach(this::logDirect); } + private ITextComponent positionToComponent(BetterBlockPos pos) { + String positionText = String.format("%s %s %s", pos.x, pos.y, pos.z); + String command = String.format("%sgoal %s", FORCE_COMMAND_PREFIX, positionText); + ITextComponent baseComponent = new TextComponentString(pos.toString()); + ITextComponent hoverComponent = new TextComponentString("Click to set goal to this position"); + baseComponent.getStyle() + .setColor(TextFormatting.GRAY) + .setInsertion(positionText) + .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)) + .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)); + return baseComponent; + } + @Override public Stream tabComplete(String label, IArgConsumer args) { return args.tabCompleteDatatype(BlockById.INSTANCE); From ef4e19002b9f6453907cc59928d0837a0911200c Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sat, 5 Mar 2022 21:04:24 +0100 Subject: [PATCH 249/935] Provide more information for #find Always log something to chat so people don't think it's broken and make sure they know about the restriction to cached blocks. --- .../command/defaults/FindCommand.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index b20857b4c..b20f14e98 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -22,7 +22,9 @@ import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.BetterBlockPos; +import baritone.cache.CachedChunk; import net.minecraft.block.Block; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; @@ -45,12 +47,13 @@ public FindCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMin(1); List toFind = new ArrayList<>(); while (args.hasAny()) { toFind.add(args.getDatatypeFor(BlockById.INSTANCE)); } BetterBlockPos origin = ctx.playerFeet(); - toFind.stream() + ITextComponent[] components = toFind.stream() .flatMap(block -> ctx.worldData().getCachedWorld().getLocationsOf( Block.REGISTRY.getNameForObject(block).getPath(), @@ -62,7 +65,12 @@ public void execute(String label, IArgConsumer args) throws CommandException { ) .map(BetterBlockPos::new) .map(this::positionToComponent) - .forEach(this::logDirect); + .toArray(ITextComponent[]::new); + if (components.length > 0) { + Arrays.asList(components).forEach(this::logDirect); + } else { + logDirect("No positions known, are you sure the blocks are cached?"); + } } private ITextComponent positionToComponent(BetterBlockPos pos) { @@ -79,8 +87,16 @@ private ITextComponent positionToComponent(BetterBlockPos pos) { } @Override - public Stream tabComplete(String label, IArgConsumer args) { - return args.tabCompleteDatatype(BlockById.INSTANCE); + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + return new TabCompleteHelper() + .append( + CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream() + .map(Block.REGISTRY::getNameForObject) + .map(Object::toString) + ) + .filterPrefixNamespaced(args.getString()) + .sortAlphabetically() + .stream(); } @Override @@ -92,9 +108,10 @@ public String getShortDesc() { public List getLongDesc() { return Arrays.asList( "The find command searches through Baritone's cache and attempts to find the location of the block.", + "Tab completion will suggest only cached blocks and uncached blocks can not be found.", "", "Usage:", - "> find - Find positions of a certain block" + "> find [...] - Try finding the listed blocks" ); } } From dc6c87b58de8fad7dd86fe3951fd207833083000 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 7 Mar 2022 15:50:42 -0700 Subject: [PATCH 250/935] fix modded toolmaterials --- .../baritone/launch/mixins/MixinItemTool.java | 35 +++++++++++++++++++ src/launch/resources/mixins.baritone.json | 1 + src/main/java/baritone/utils/ToolSet.java | 8 +++-- .../baritone/utils/accessor/IItemTool.java | 24 +++++++++++++ 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 src/launch/java/baritone/launch/mixins/MixinItemTool.java create mode 100644 src/main/java/baritone/utils/accessor/IItemTool.java diff --git a/src/launch/java/baritone/launch/mixins/MixinItemTool.java b/src/launch/java/baritone/launch/mixins/MixinItemTool.java new file mode 100644 index 000000000..4f5d025bf --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinItemTool.java @@ -0,0 +1,35 @@ +/* + * 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.utils.accessor.IItemTool; +import net.minecraft.item.Item; +import net.minecraft.item.ItemTool; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(ItemTool.class) +public class MixinItemTool implements IItemTool { + @Shadow protected Item.ToolMaterial toolMaterial; + + @Override + public int getHarvestLevel() { + return toolMaterial.getHarvestLevel(); + } + +} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index eb31a2e76..fdcd14b92 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -21,6 +21,7 @@ "MixinEntityRenderer", "MixinGuiScreen", "MixinItemStack", + "MixinItemTool", "MixinMinecraft", "MixinNetHandlerPlayClient", "MixinNetworkManager", diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 4d17b4ea1..0ad4665d6 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -18,6 +18,7 @@ package baritone.utils; import baritone.Baritone; +import baritone.utils.accessor.IItemTool; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityPlayerSP; @@ -78,15 +79,16 @@ public double getStrVsBlock(IBlockState state) { /** * Evaluate the material cost of a possible tool. The priority matches the - * listed order in the Item.ToolMaterial enum. + * harvest level order; there is a chance for multiple at the same with modded tools + * but in that case we don't really care. * * @param itemStack a possibly empty ItemStack - * @return values range from -1 to 4 + * @return values from 0 up */ private int getMaterialCost(ItemStack itemStack) { if (itemStack.getItem() instanceof ItemTool) { ItemTool tool = (ItemTool) itemStack.getItem(); - return ToolMaterial.valueOf(tool.getToolMaterialName()).ordinal(); + return ((IItemTool) tool).getHarvestLevel(); } else { return -1; } diff --git a/src/main/java/baritone/utils/accessor/IItemTool.java b/src/main/java/baritone/utils/accessor/IItemTool.java new file mode 100644 index 000000000..990cb672b --- /dev/null +++ b/src/main/java/baritone/utils/accessor/IItemTool.java @@ -0,0 +1,24 @@ +/* + * 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.accessor; + +public interface IItemTool { + + int getHarvestLevel(); + +} From 8a0771e5f41e3f8dbbbfbb0e20d0f8fd670d4e9f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 8 Mar 2022 14:50:04 -0800 Subject: [PATCH 251/935] v1.8.3 From 8aba97b577f49992894ec4a933be4587a7b00aa5 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 8 Mar 2022 15:00:14 -0800 Subject: [PATCH 252/935] update for 1.8.3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7222e4d89..e2acc7d83 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see de If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**. -If you need Forge or Fabric 1.18.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.2) and get the `api-forge` or `api-fabric` jar. **For 1.18.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.2/baritone-api-fabric-1.8.2.jar)**. +If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). From 10430f8142374153f5f443b140b191f92874f5ce Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 8 Mar 2022 15:01:48 -0800 Subject: [PATCH 253/935] bump to 1.18.2 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e2acc7d83..2687c2291 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Minecraft Minecraft Minecraft - Minecraft + Minecraft

From 25d418e96bf854d597d68dbdc00b64f827f4ffa3 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 8 Mar 2022 15:04:34 -0800 Subject: [PATCH 254/935] 1.15 is deprecated --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 2687c2291..75c04553d 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,6 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.2.15/baritone-api-forge-1.2.15.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. -For 1.15.2, [click here](https://www.youtube.com/watch?v=j1qKtCZFURM) and see description. If you need Forge 1.15.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.5.3), follow the instructions, and get the `api-forge` jar. - For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**. From 02711a73ed6db6ee22c4943efc77cc7222ed30ed Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 8 Mar 2022 15:14:00 -0800 Subject: [PATCH 255/935] fix codacy --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 75c04553d..c50caf56a 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Build Status Release License - Codacy Badge + Codacy Badge Code of Conduct Known Vulnerabilities Contributions welcome From 9b7d3af03dbf54444933f36fcc0102c6344b5807 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 14 Feb 2022 15:38:52 -0700 Subject: [PATCH 256/935] remove duplicate --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 09f9f8081..8dc19f446 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -99,7 +99,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.POINTED_DRIPSTONE || block == Blocks.AMETHYST_CLUSTER || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { return false; } if (block == Blocks.BIG_DRIPLEAF) { From 9ba8949a2e3c1192802d4aed4b1cd31aeec838bd Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 8 Mar 2022 17:28:38 -0700 Subject: [PATCH 257/935] fix ` is null` (and sneak in some other changes) --- gradle/wrapper/gradle-wrapper.properties | 2 +- .../baritone/pathing/movement/MovementHelper.java | 3 ++- src/main/java/baritone/process/BuilderProcess.java | 13 ++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0f80bbf51..84d1f85fd 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 8dc19f446..8ef34a9a2 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -99,7 +99,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { return false; } if (block == Blocks.BIG_DRIPLEAF) { @@ -291,6 +291,7 @@ static boolean avoidWalkingInto(BlockState state) { return !state.getFluidState().isEmpty() || block == Blocks.MAGMA_BLOCK || block == Blocks.CACTUS + || block == Blocks.SWEET_BERRY_BUSH || block instanceof BaseFireBlock || block == Blocks.END_PORTAL || block == Blocks.COBWEB diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 6453d58f4..ab3934dde 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -847,7 +847,18 @@ private List approxPlaceable(int size) { continue; } // - result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {}))); + BlockState itemState = ((BlockItem) stack.getItem()) + .getBlock() + .getStateForPlacement( + new BlockPlaceContext( + new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {} + ) + ); + if (itemState != null) { + result.add(itemState); + } else { + result.add(Blocks.AIR.defaultBlockState()); + } // } return result; From e58220e2c4b33278991e063cf7d2d4e192ed19a3 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 8 Mar 2022 19:45:05 -0700 Subject: [PATCH 258/935] fix inner class attribute being stripped --- scripts/proguard.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/proguard.pro b/scripts/proguard.pro index eea6fc23d..517494f46 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -1,5 +1,6 @@ -keepattributes Signature -keepattributes *Annotation* +-keepattributes InnerClasses -optimizationpasses 5 -verbose From 511941c7146135f28bde29dbe48f8459cd5efccb Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 15 Mar 2022 18:39:19 -0700 Subject: [PATCH 259/935] reimplement death and bed waypoints --- src/api/java/baritone/api/Settings.java | 11 +++ src/main/java/baritone/Baritone.java | 2 + .../baritone/behavior/WaypointBehavior.java | 92 +++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 src/main/java/baritone/behavior/WaypointBehavior.java diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index b0eda7489..0637f859c 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -550,6 +550,17 @@ public final class Settings { */ public final Setting slowPathTimeoutMS = new Setting<>(40000L); + + /** + * allows baritone to save bed waypoints when interacting with beds + */ + public final Setting doBedWaypoints = new Setting<>(true); + + /** + * allows baritone to save death waypoints + */ + public final Setting doDeathWaypoints = new Setting<>(true); + /** * The big one. Download all chunks in simplified 2-bit format and save them for better very-long-distance pathing. */ diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 82451514f..71c2c455a 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -69,6 +69,7 @@ public class Baritone implements IBaritone { private PathingBehavior pathingBehavior; private LookBehavior lookBehavior; private InventoryBehavior inventoryBehavior; + private WaypointBehavior waypointBehavior; private InputOverrideHandler inputOverrideHandler; private FollowProcess followProcess; @@ -101,6 +102,7 @@ public class Baritone implements IBaritone { lookBehavior = new LookBehavior(this); inventoryBehavior = new InventoryBehavior(this); inputOverrideHandler = new InputOverrideHandler(this); + waypointBehavior = new WaypointBehavior(this); } this.pathingControlManager = new PathingControlManager(this); diff --git a/src/main/java/baritone/behavior/WaypointBehavior.java b/src/main/java/baritone/behavior/WaypointBehavior.java new file mode 100644 index 000000000..b21e080e7 --- /dev/null +++ b/src/main/java/baritone/behavior/WaypointBehavior.java @@ -0,0 +1,92 @@ +/* + * 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.behavior; + +import baritone.Baritone; +import baritone.api.cache.IWaypoint; +import baritone.api.cache.Waypoint; +import baritone.api.event.events.BlockInteractEvent; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Helper; +import baritone.utils.BlockStateInterface; +import net.minecraft.block.BlockBed; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; + +import java.util.Set; + +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + +public class WaypointBehavior extends Behavior { + + + public WaypointBehavior(Baritone baritone) { + super(baritone); + } + + @Override + public void onBlockInteract(BlockInteractEvent event) { + if (!Baritone.settings().doBedWaypoints.value) + return; + if (event.getType() == BlockInteractEvent.Type.USE) { + BetterBlockPos pos = BetterBlockPos.from(event.getPos()); + IBlockState state = BlockStateInterface.get(ctx, pos); + if (state.getBlock() instanceof BlockBed) { + if (state.getValue(BlockBed.PART) == BlockBed.EnumPartType.FOOT) { + pos = pos.offset(state.getValue(BlockBed.FACING)); + } + Set waypoints = baritone.getWorldProvider().getCurrentWorld().getWaypoints().getByTag(IWaypoint.Tag.BED); + boolean exists = waypoints.stream().map(IWaypoint::getLocation).filter(pos::equals).findFirst().isPresent(); + if (!exists) { + baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(new Waypoint("bed", Waypoint.Tag.BED, pos)); + } + } + } + } + + @Override + public void onPlayerDeath() { + if (!Baritone.settings().doDeathWaypoints.value) + return; + Waypoint deathWaypoint = new Waypoint("death", Waypoint.Tag.DEATH, ctx.playerFeet()); + baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(deathWaypoint); + ITextComponent component = new TextComponentString("Death position saved."); + component.getStyle() + .setColor(TextFormatting.WHITE) + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + new TextComponentString("Click to goto death") + )) + .setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s goto %s @ %d", + FORCE_COMMAND_PREFIX, + "wp", + deathWaypoint.getTag().getName(), + deathWaypoint.getCreationTimestamp() + ) + )); + Helper.HELPER.logDirect(component); + } + +} From 89bd2a4a079ab90c134acf7c80e58c643ec1f6ef Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 15 Mar 2022 18:44:39 -0700 Subject: [PATCH 260/935] move death event to work with `doImmediateRespawn` gamerule --- .../java/baritone/launch/mixins/MixinClientPlayNetHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index a1f321836..94dd931fa 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -175,7 +175,7 @@ private void postHandleMultiBlockChange(ClientboundSectionBlocksUpdatePacket pac method = "handlePlayerCombatKill", at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V" + target = "Lnet/minecraft/client/player/LocalPlayer;shouldShowDeathScreen()Z" ) ) private void onPlayerDeath(ClientboundPlayerCombatKillPacket packetIn, CallbackInfo ci) { From e036f5360c49819c3fa4c83649bff5a8ad5dc542 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Wed, 16 Mar 2022 20:12:56 +0000 Subject: [PATCH 261/935] If context.player() returns none we don't want to use its position for pruning. --- src/main/java/baritone/cache/CachedWorld.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 1d1132465..6b3959fe3 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -209,7 +209,7 @@ private synchronized void prune() { private BlockPos guessPosition() { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { IWorldData data = ibaritone.getWorldProvider().getCurrentWorld(); - if (data != null && data.getCachedWorld() == this) { + if (data != null && data.getCachedWorld() == this && ibaritone.getPlayerContext().player() != null) { return ibaritone.getPlayerContext().playerFeet(); } } From 6aadd00e72af1b55a750eb47566a0ef4418497ba Mon Sep 17 00:00:00 2001 From: PhlegethonAcheron <53194290+PhlegethonAcheron@users.noreply.github.com> Date: Sun, 20 Mar 2022 15:41:25 -0400 Subject: [PATCH 262/935] Added usage syntax to the documentation for buildValidSubstitutes and buildSubstitutes --- src/api/java/baritone/api/Settings.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 0637f859c..99ffcea20 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -234,6 +234,8 @@ public final class Settings { * A mapping of blocks to blocks treated as correct in their position *

* If a schematic asks for a block on this mapping, all blocks on the mapped list will be accepted at that location as well + *

+ * Syntax same as buildSubstitutes */ public final Setting>> buildValidSubstitutes = new Setting<>(new HashMap<>()); @@ -241,6 +243,15 @@ public final class Settings { * A mapping of blocks to blocks to be built instead *

* If a schematic asks for a block on this mapping, Baritone will place the first placeable block in the mapped list + *

+ * Usage Syntax: + *

+     *      sourceblockA->blockToSubstituteA1,blockToSubstituteA2,...blockToSubstituteAN,sourceBlockB->blockToSubstituteB1,blockToSubstituteB2,...blockToSubstituteBN,...sourceBlockX->blockToSubstituteX1,blockToSubstituteX2...blockToSubstituteXN
+     * 
+ * Example: + *
+     *     stone->cobblestone,andesite,oak_planks->birch_planks,acacia_planks,glass
+     * 
*/ public final Setting>> buildSubstitutes = new Setting<>(new HashMap<>()); From 4e6b6d97ce785341f6471520cd4f91b545386f38 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 24 Mar 2022 17:33:33 -0700 Subject: [PATCH 263/935] add forceAllowBreak setting --- src/api/java/baritone/api/Settings.java | 5 +++++ .../baritone/pathing/movement/CalculationContext.java | 9 ++++++++- src/main/java/baritone/process/BuilderProcess.java | 7 ++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 0637f859c..f8dc196cc 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -49,6 +49,11 @@ public final class Settings { */ public final Setting allowBreak = new Setting<>(true); + /** + * Blocks that baritone will be allowed to break even with allowBreak set to false + */ + public final Setting> forceAllowBreak = new Setting<>(new ArrayList<>()); + /** * Allow Baritone to sprint */ diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index fca6bc990..02e5557b7 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -34,6 +34,9 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import java.util.ArrayList; +import java.util.List; + import static baritone.api.pathing.movement.ActionCosts.COST_INF; /** @@ -55,6 +58,7 @@ public class CalculationContext { public final boolean canSprint; protected final double placeBlockCost; // protected because you should call the function instead public final boolean allowBreak; + public final List forceAllowBreak; public final boolean allowParkour; public final boolean allowParkourPlace; public final boolean allowJumpAt256; @@ -89,6 +93,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.canSprint = Baritone.settings().allowSprint.value && player.getFoodStats().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; this.allowBreak = Baritone.settings().allowBreak.value; + this.forceAllowBreak = new ArrayList<>(Baritone.settings().forceAllowBreak.value); this.allowParkour = Baritone.settings().allowParkour.value; this.allowParkourPlace = Baritone.settings().allowParkourPlace.value; this.allowJumpAt256 = Baritone.settings().allowJumpAt256.value; @@ -150,7 +155,9 @@ public double costOfPlacingAt(int x, int y, int z, IBlockState current) { public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { if (!allowBreak) { - return COST_INF; + if (!forceAllowBreak.contains(current.getBlock())) { + return COST_INF; + } } if (isPossiblyProtected(x, y, z)) { return COST_INF; diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 604dbb2bc..3d98a710e 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -947,7 +947,12 @@ public double costOfPlacingAt(int x, int y, int z, IBlockState current) { @Override public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { - if (!allowBreak || isPossiblyProtected(x, y, z)) { + if (!allowBreak) { + if (!forceAllowBreak.contains(current.getBlock())) { + return COST_INF; + } + } + if (isPossiblyProtected(x, y, z)) { return COST_INF; } IBlockState sch = getSchematic(x, y, z, current); From bf450b7d68ac1dba9703cfc36809a2f475dcf105 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 24 Mar 2022 17:34:31 -0700 Subject: [PATCH 264/935] rename to allowBreakAnyway --- src/api/java/baritone/api/Settings.java | 2 +- .../java/baritone/pathing/movement/CalculationContext.java | 6 +++--- src/main/java/baritone/process/BuilderProcess.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index f8dc196cc..c883413b3 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -52,7 +52,7 @@ public final class Settings { /** * Blocks that baritone will be allowed to break even with allowBreak set to false */ - public final Setting> forceAllowBreak = new Setting<>(new ArrayList<>()); + public final Setting> allowBreakAnyway = new Setting<>(new ArrayList<>()); /** * Allow Baritone to sprint diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 02e5557b7..7a67acffe 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -58,7 +58,7 @@ public class CalculationContext { public final boolean canSprint; protected final double placeBlockCost; // protected because you should call the function instead public final boolean allowBreak; - public final List forceAllowBreak; + public final List allowBreakAnyway; public final boolean allowParkour; public final boolean allowParkourPlace; public final boolean allowJumpAt256; @@ -93,7 +93,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.canSprint = Baritone.settings().allowSprint.value && player.getFoodStats().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; this.allowBreak = Baritone.settings().allowBreak.value; - this.forceAllowBreak = new ArrayList<>(Baritone.settings().forceAllowBreak.value); + this.allowBreakAnyway = new ArrayList<>(Baritone.settings().allowBreakAnyway.value); this.allowParkour = Baritone.settings().allowParkour.value; this.allowParkourPlace = Baritone.settings().allowParkourPlace.value; this.allowJumpAt256 = Baritone.settings().allowJumpAt256.value; @@ -155,7 +155,7 @@ public double costOfPlacingAt(int x, int y, int z, IBlockState current) { public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { if (!allowBreak) { - if (!forceAllowBreak.contains(current.getBlock())) { + if (!allowBreakAnyway.contains(current.getBlock())) { return COST_INF; } } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 3d98a710e..751900df6 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -948,7 +948,7 @@ public double costOfPlacingAt(int x, int y, int z, IBlockState current) { @Override public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { if (!allowBreak) { - if (!forceAllowBreak.contains(current.getBlock())) { + if (!allowBreakAnyway.contains(current.getBlock())) { return COST_INF; } } From 2953e2c522b9c37d59d1407f79a5ee7b581f5676 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 24 Mar 2022 18:16:19 -0700 Subject: [PATCH 265/935] make codacy happy --- .../java/baritone/pathing/movement/CalculationContext.java | 6 ++---- src/main/java/baritone/process/BuilderProcess.java | 7 +------ 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 7a67acffe..d5d6c93c8 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -154,10 +154,8 @@ public double costOfPlacingAt(int x, int y, int z, IBlockState current) { } public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { - if (!allowBreak) { - if (!allowBreakAnyway.contains(current.getBlock())) { - return COST_INF; - } + if (!allowBreak && !allowBreakAnyway.contains(current.getBlock())) { + return COST_INF; } if (isPossiblyProtected(x, y, z)) { return COST_INF; diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 751900df6..e3ff4fbd9 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -947,12 +947,7 @@ public double costOfPlacingAt(int x, int y, int z, IBlockState current) { @Override public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { - if (!allowBreak) { - if (!allowBreakAnyway.contains(current.getBlock())) { - return COST_INF; - } - } - if (isPossiblyProtected(x, y, z)) { + if ((!allowBreak && !allowBreakAnyway.contains(current.getBlock())) || isPossiblyProtected(x, y, z)) { return COST_INF; } IBlockState sch = getSchematic(x, y, z, current); From 95afaf3eace3ef19a473c1913dd1f75b9d5f668e Mon Sep 17 00:00:00 2001 From: Patrick Huber Date: Fri, 25 Mar 2022 21:10:40 +0100 Subject: [PATCH 266/935] Build: print more details on error --- .../src/main/java/baritone/gradle/task/BaritoneGradleTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 1aaf3578f..b85717201 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -83,7 +83,7 @@ public BaritoneGradleTask() { protected void verifyArtifacts() throws IllegalStateException { if (!Files.exists(this.artifactPath)) { - throw new IllegalStateException("Artifact not found! Run build first!"); + throw new IllegalStateException("Artifact not found! Run build first! Missing file: " + this.artifactPath); } } From 599aa42cd8519296b613ce8e7d73d83087b14768 Mon Sep 17 00:00:00 2001 From: Patrick Huber Date: Sat, 26 Mar 2022 18:59:13 +0100 Subject: [PATCH 267/935] Build: set rootProject.name again (already present up until 1.16 and went missing afterwards) --- settings.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/settings.gradle b/settings.gradle index 0e6cdeb43..8917ae757 100755 --- a/settings.gradle +++ b/settings.gradle @@ -37,4 +37,6 @@ pluginManagement { } mavenCentral() } -} \ No newline at end of file +} + +rootProject.name = 'baritone' From ef4c2bbc98cefc8bd935748816fe214ae69ca71c Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Thu, 31 Mar 2022 23:53:58 +0200 Subject: [PATCH 268/935] Remove false information from `#help mine` Baritone no longer caches ores on Minecraft 1.13+ Metadata values were removed in Minecraft 1.13 lit_redstone_ore was merged into redstone_ore in Minecraft 1.13 --- src/main/java/baritone/command/defaults/MineCommand.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 63712fe3e..5351af54e 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -65,14 +65,12 @@ public List getLongDesc() { return Arrays.asList( "The mine command allows you to tell Baritone to search for and mine individual blocks.", "", - "The specified blocks can be ores (which are commonly cached), or any other block.", + "The specified blocks can be ores, or any other block.", "", "Also see the legitMine settings (see #set l legitMine).", "", "Usage:", "> mine diamond_ore - Mines all diamonds it can find.", - "> mine redstone_ore lit_redstone_ore - Mines redstone ore.", - "> mine log:0 - Mines only oak logs." ); } } From 2908c7499c070d21509bd1eb5895634b19ad0c5c Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 1 Apr 2022 00:33:27 +0200 Subject: [PATCH 269/935] Fix syntax That's why you shouldn't make changes on Github --- src/main/java/baritone/command/defaults/MineCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 5351af54e..98a2e264d 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -70,7 +70,7 @@ public List getLongDesc() { "Also see the legitMine settings (see #set l legitMine).", "", "Usage:", - "> mine diamond_ore - Mines all diamonds it can find.", + "> mine diamond_ore - Mines all diamonds it can find." ); } } From adc88d1fb9af5b2fb4ea98ef20d3b20b5993f8c9 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sat, 2 Apr 2022 23:44:29 +0200 Subject: [PATCH 270/935] Fix dynamic mixin dependency to 0.8.3 Newer Mixin versions use a class file format Proguard can't handle. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 59d8edef6..798b5b354 100755 --- a/build.gradle +++ b/build.gradle @@ -198,7 +198,7 @@ dependencies { } runtime launchCompile('org.ow2.asm:asm-debug-all:5.2') runtime launchCompile('com.github.ImpactDevelopment:SimpleTweaker:1.2') - runtime launchCompile('org.spongepowered:mixin:0.8.+') { + runtime launchCompile('org.spongepowered:mixin:0.8.3') { // Mixin includes a lot of dependencies that are too up-to-date exclude module: 'launchwrapper' exclude module: 'guava' From 01c75db38ae4cffc3c487682e56c34c0edc533a0 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 2 Apr 2022 21:36:18 -0700 Subject: [PATCH 271/935] rework buildscript (part 1) --- .gitignore | 1 + build.gradle | 190 ++++-------------- .../gradle/task/BaritoneGradleTask.java | 7 +- .../baritone/gradle/task/CreateDistTask.java | 28 +-- .../baritone/gradle/task/ProguardTask.java | 16 +- common/build.gradle | 129 ++++++++++++ common/logs/latest.log | 0 fabric/build.gradle | 83 ++++++++ forge/build.gradle | 103 ++++++++++ forge/gradle.properties | 18 ++ .../src/main/java/baritone/BaritoeModXD.java | 22 ++ .../src/main}/resources/META-INF/mods.toml | 0 settings.gradle | 5 + .../baritone/launch/BaritoneForgeModXD.class | Bin 412 -> 0 bytes src/launch/resources/fabric.mod.json | 2 +- src/launch/resources/mixins.baritone.json | 2 +- 16 files changed, 426 insertions(+), 180 deletions(-) create mode 100644 common/build.gradle create mode 100644 common/logs/latest.log create mode 100644 fabric/build.gradle create mode 100644 forge/build.gradle create mode 100644 forge/gradle.properties create mode 100644 forge/src/main/java/baritone/BaritoeModXD.java rename {src/launch => forge/src/main}/resources/META-INF/mods.toml (100%) delete mode 100644 src/launch/resources/baritone/launch/BaritoneForgeModXD.class diff --git a/.gitignore b/.gitignore index 0182f9989..99c56ad4f 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ baritone_Client.launch !/.idea/copyright/profiles_settings.xml .vscode/launch.json +.architectury-transformer \ No newline at end of file diff --git a/build.gradle b/build.gradle index 0de75c0c5..c1c104105 100755 --- a/build.gradle +++ b/build.gradle @@ -16,175 +16,59 @@ */ plugins { - id 'java' - id 'dev.architectury.loom' version '0.10.0-SNAPSHOT' - id 'maven-publish' + id "architectury-plugin" version "3.4-SNAPSHOT" + id 'dev.architectury.loom' version '0.11.0-SNAPSHOT' apply false } - -archivesBaseName = project.archives_base_name -version = project.mod_version -group = project.maven_group - -import baritone.gradle.task.CreateDistTask -import baritone.gradle.task.ProguardTask - -def compileType = project.hasProperty("baritone.fabric_build") ? "FABRIC" : project.hasProperty("baritone.forge_build") ? "FORGE" : "OFFICIAL" - -sourceCompatibility = targetCompatibility = JavaVersion.VERSION_16 - -compileJava { - options.encoding = "UTF-8" // allow emoji in comments :^) -} - -sourceSets { - api { - compileClasspath += main.compileClasspath - } - main { - compileClasspath += api.output - } - test { - compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output - runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output - } - launch { - compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output - runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output - } - schematica_api { - compileClasspath += main.compileClasspath - } - main { - compileClasspath += schematica_api.output - } +architectury { + minecraft = rootProject.minecraft_version } -loom { - if (compileType.equals("FORGE")) { - forge { - mixinConfig 'mixins.baritone.json' - } - } - mixin.defaultRefmapName = "mixins.baritone.refmap.json" +subprojects { + apply plugin: 'java' + apply plugin: "maven-publish" + apply plugin: "dev.architectury.loom" - runs { - client { - source = sourceSets.launch - } - } -} + archivesBaseName = rootProject.archives_base_name + version = rootProject.mod_version + group = rootProject.maven_group + sourceCompatibility = targetCompatibility = JavaVersion.VERSION_16 -repositories { - maven { - name = 'impactdevelopment-repo' - url = 'https://impactdevelopment.github.io/maven/' + loom { + silentMojangMappingsLicense() } - maven { - name = "ldtteam" - url = "https://maven.parchmentmc.net/" - } - mavenCentral() -} -dependencies { - if (compileType.equals("FORGE")) { - forge "net.minecraftforge:forge:${project.forge_version}" - } - mappings loom.layered() { - officialMojangMappings() - //technically optional, but really helpful in dev: - parchment("org.parchmentmc.data:parchment-1.17.1:2021.10.24@zip" as String) + dependencies { + minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" + // The following line declares the mojmap mappings, you may use other mappings as well + mappings loom.officialMojangMappings() + // The following line declares the yarn mappings you may select this one as well. + // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" } - minecraft "com.mojang:minecraft:${project.minecraft_version}" - if (!compileType.equals("FORGE")) { - modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" - } - // this makes it compile with the forge tweak stuff - implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' - implementation('net.minecraft:launchwrapper:1.12') { - exclude module: 'lwjgl' - exclude module: 'asm-debug-all' - } - - implementation 'com.google.code.findbugs:jsr305:3.0.2' - testImplementation 'junit:junit:4.12' -} - -javadoc { - options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error - options.linkSource true - options.encoding "UTF-8" // allow emoji in comments :^) - source = sourceSets.api.allJava - classpath += sourceSets.api.compileClasspath -} + tasks.withType(JavaCompile).configureEach { + it.options.encoding = "UTF-8" -// skidded from fabric-example-mod (comments and all) -tasks.withType(JavaCompile).configureEach { - // ensure that the encoding is set to UTF-8, no matter what the system default is - // this fixes some edge cases with special characters not displaying correctly - // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html - // If Javadoc is generated, this must be specified in that task too. - it.options.encoding = "UTF-8" - - // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too - // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. - // We'll use that if it's available, but otherwise we'll use the older option. - def targetVersion = 16 - if (JavaVersion.current().isJava9Compatible()) { - it.options.release = targetVersion + def targetVersion = 16 + if (JavaVersion.current().isJava9Compatible()) { + it.options.release = targetVersion + } } } +allprojects { + apply plugin: "architectury-plugin" -jar { - from sourceSets.launch.output, sourceSets.api.output - - if (!getProject().hasProperty("baritone.forge_build")) { - exclude "**/BaritoneForgeModXD.class" - exclude "**/mods.toml" - } - - preserveFileTimestamps = false - reproducibleFileOrder = true - - if (getProject().hasProperty("baritone.fabric_build")) { - filesMatching("fabric.mod.json") { - expand "version": version + repositories { + maven { + name = 'impactdevelopment-repo' + url = 'https://impactdevelopment.github.io/maven/' } - } else { - exclude("fabric.mod.json") - } - - - manifest { - attributes( - 'MixinConfigs': 'mixins.baritone.json', - "MixinConnector": "baritone.launch.BaritoneMixinConnector", - - 'Implementation-Title': 'Baritone', - 'Implementation-Version': version, - ) - } -} - -if (compileType.equals("OFFICIAL")) { - remapJar { - toM.set "official" + maven { + name = "ldtteam" + url = "https://maven.parchmentmc.net/" + } + mavenCentral() } } - - - -task proguard(type: ProguardTask) { - url 'https://downloads.sourceforge.net/project/proguard/v7.1.0-beta5/proguard-7.1.0-beta5.zip' - extract 'proguard-7.1.0-beta5/lib/proguard.jar' - compType compileType -} - -task createDist(type: CreateDistTask, dependsOn: proguard) - - -build.finalizedBy(createDist) \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index b85717201..cf5aed94d 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -18,6 +18,7 @@ package baritone.gradle.task; import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.Input; import java.io.File; import java.io.IOException; @@ -59,7 +60,7 @@ class BaritoneGradleTask extends DefaultTask { proguardOut; public BaritoneGradleTask() { - this.artifactName = getProject().getName(); + this.artifactName = getProject().getProperties().get("archivesBaseName").toString(); this.artifactVersion = getProject().getVersion().toString(); this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); @@ -102,6 +103,10 @@ protected Path getRelativeFile(String file) { return Paths.get(new File(new File(getProject().getBuildDir(), "../"), file).getAbsolutePath()); } + protected Path getRootRelativeFile(String file) { + return Paths.get(new File(new File(getProject().getRootProject().getBuildDir(), "../"), file).getAbsolutePath()); + } + protected Path getTemporaryFile(String file) { return Paths.get(new File(getTemporaryDir(), file).getAbsolutePath()); } diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index e55e84acd..ca06dd6f8 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -42,12 +42,12 @@ protected void exec() throws Exception { super.verifyArtifacts(); // Define the distribution file paths - Path api = getRelativeFile("dist/" + getFileName(artifactApiPath)); - Path standalone = getRelativeFile("dist/" + getFileName(artifactStandalonePath)); - Path unoptimized = getRelativeFile("dist/" + getFileName(artifactUnoptimizedPath)); + Path api = getRootRelativeFile("dist/" + getFileName(artifactApiPath)); + Path standalone = getRootRelativeFile("dist/" + getFileName(artifactStandalonePath)); + Path unoptimized = getRootRelativeFile("dist/" + getFileName(artifactUnoptimizedPath)); // NIO will not automatically create directories - Path dir = getRelativeFile("dist/"); + Path dir = getRootRelativeFile("dist/"); if (!Files.exists(dir)) { Files.createDirectory(dir); } @@ -67,7 +67,7 @@ protected void exec() throws Exception { shasum.forEach(System.out::println); // Write the checksums to a file - Files.write(getRelativeFile("dist/checksums.txt"), shasum); + Files.write(getRootRelativeFile("dist/checksums.txt"), shasum); } private static String getFileName(Path p) { @@ -76,15 +76,15 @@ private static String getFileName(Path p) { private List getAllDistJars() { return Arrays.asList( - getRelativeFile("dist/" + formatVersion(ARTIFACT_API)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_API)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_STANDALONE)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_STANDALONE)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_UNOPTIMIZED)), - getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)) + getRootRelativeFile("dist/" + formatVersion(ARTIFACT_API)), + getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_API)), + getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)), + getRootRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)), + getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_STANDALONE)), + getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_STANDALONE)), + getRootRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)), + getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_UNOPTIMIZED)), + getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)) ); } diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index aa5e36be0..4807a6a69 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -86,11 +86,11 @@ protected void exec() throws Exception { } private boolean isMcJar(File f) { - return f.getName().startsWith(compType.equals("FORGE") ? "forge-" : "minecraft-") && f.getName().contains("minecraft-mapped"); + return f.getName().startsWith(compType.equals("FORGE") ? "forge-" : "minecraft-") && f.getName().contains("minecraft-merged-named"); } private void copyMcJar() throws IOException { - File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() + File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getRuntimeClasspath().getFiles() .stream() .filter(this::isMcJar) .map(f -> { @@ -98,9 +98,9 @@ private void copyMcJar() throws IOException { case "OFFICIAL": return new File(f.getParentFile().getParentFile(), "minecraft-merged.jar"); case "FABRIC": - return new File(f.getParentFile(), "minecraft-intermediary.jar"); + return new File(f.getParentFile().getParentFile(), "minecraft-merged-intermediary.jar"); case "FORGE": - return new File(f.getParentFile(), "minecraft-srg.jar"); + return new File(f.getParentFile().getParentFile(), f.getName().replace("-named.jar", "-srg.jar")); } return null; }) @@ -233,7 +233,7 @@ private boolean validateJavaVersion(String java) { } private void generateConfigs() throws Exception { - Files.copy(getRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), REPLACE_EXISTING); + Files.copy(getRootRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), REPLACE_EXISTING); // Setup the template that will be used to derive the API and Standalone configs List template = Files.readAllLines(getTemporaryFile(PROGUARD_CONFIG_DEST)); @@ -268,12 +268,8 @@ private void generateConfigs() throws Exception { Files.write(getTemporaryFile(PROGUARD_STANDALONE_CONFIG), standalone); } - private File getSrgMcJar() { - return getProject().getTasks().findByName("copyMcJar").getOutputs().getFiles().getSingleFile(); - } - private Stream acquireDependencies() { - return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("launch").getRuntimeClasspath().getFiles() + return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getRuntimeClasspath().getFiles() .stream() .filter(File::isFile); } diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 000000000..4007d358d --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,129 @@ +import baritone.gradle.task.CreateDistTask +import baritone.gradle.task.ProguardTask + +architectury { + injectInjectables = false + common() +} + +sourceSets { + api { + compileClasspath += main.compileClasspath + java { + java { + srcDir "$rootDir/src/api/java" + } + resources { + srcDir "$rootDir/src/api/resources" + } + } + } + main { + compileClasspath += api.output + java { + java { + srcDir "$rootDir/src/main/java" + } + resources { + srcDir "$rootDir/src/main/resources" + } + } + } + test { + compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output + runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output + java { + java { + srcDir "$rootDir/src/test/java" + } + resources { + srcDir "$rootDir/src/test/resources" + } + } + } + launch { + compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output + runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output + java { + java { + srcDir "$rootDir/src/launch/java" + } + resources { + srcDir "$rootDir/src/launch/resources" + } + } + } + schematica_api { + compileClasspath += main.compileClasspath + java { + java { + srcDir "$rootDir/src/schematica_api/java" + } + resources { + srcDir "$rootDir/src/schematica_api/resources" + } + } + } + main { + compileClasspath += schematica_api.output + } +} + +dependencies { + // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies + // Do NOT use other classes from fabric loader + modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" + + // this makes it compile with the forge tweak stuff + implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' + implementation('net.minecraft:launchwrapper:1.12') { + exclude module: 'lwjgl' + exclude module: 'asm-debug-all' + } + + implementation 'com.google.code.findbugs:jsr305:3.0.2' + + testImplementation 'junit:junit:4.12' +} + +javadoc { + options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error + options.linkSource true + options.encoding "UTF-8" // allow emoji in comments :^) + source = sourceSets.api.allJava + classpath += sourceSets.api.compileClasspath +} + +jar { + classifier "dev" + from sourceSets.launch.output, sourceSets.api.output + + + preserveFileTimestamps = false + reproducibleFileOrder = true + + manifest { + attributes( + 'MixinConfigs': 'mixins.baritone.json', + "MixinConnector": "baritone.launch.BaritoneMixinConnector", + + 'Implementation-Title': 'Baritone', + 'Implementation-Version': version, + ) + } +} + +remapJar { + targetNamespace.set "official" +} + + +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "OFFICIAL" +} + +task createDist(type: CreateDistTask, dependsOn: proguard) + +build.finalizedBy(createDist) \ No newline at end of file diff --git a/common/logs/latest.log b/common/logs/latest.log new file mode 100644 index 000000000..e69de29bb diff --git a/fabric/build.gradle b/fabric/build.gradle new file mode 100644 index 000000000..65f9f6037 --- /dev/null +++ b/fabric/build.gradle @@ -0,0 +1,83 @@ +/* + * 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 . + */ + +import baritone.gradle.task.CreateDistTask +import baritone.gradle.task.ProguardTask + +plugins { + id "com.github.johnrengelman.shadow" version "7.0.0" +} + +archivesBaseName = archivesBaseName + "-" + project.name + +architectury { + platformSetupLoomIde() + fabric() +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentFabric.extendsFrom common +} + +dependencies { + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } +} + +processResources { + inputs.property "version", project.version + + filesMatching("fabric.mod.json") { + expand "version": project.version + } +} + +shadowJar { + configurations = [project.configurations.shadowCommon] + classifier "dev-shadow" +} + +remapJar { + input.set shadowJar.archiveFile + dependsOn shadowJar + classifier null +} + +jar { + classifier "dev" +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "FABRIC" +} + +task createDist(type: CreateDistTask, dependsOn: proguard) + +build.finalizedBy(createDist) \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle new file mode 100644 index 000000000..08ae62e00 --- /dev/null +++ b/forge/build.gradle @@ -0,0 +1,103 @@ +/* + * 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 . + */ + +import baritone.gradle.task.CreateDistTask +import baritone.gradle.task.ProguardTask + +plugins { + id "com.github.johnrengelman.shadow" version "7.0.0" +} + +archivesBaseName = archivesBaseName + "-" + project.name + +architectury { + platformSetupLoomIde() + forge() +} + +loom { + forge { + mixinConfig 'mixins.baritone.json' + } +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentFabric.extendsFrom common +} + +dependencies { + forge "net.minecraftforge:forge:${rootProject.forge_version}" + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive false } +} + +processResources { + inputs.property "version", project.version + + filesMatching("fabric.mod.json") { + expand "version": project.version + } +} + +shadowJar { + exclude("fabric.mod.json") + + configurations = [project.configurations.shadowCommon] + classifier "dev-shadow" +} + +remapJar { + input.set shadowJar.archiveFile + dependsOn shadowJar + classifier null +} + +jar { + classifier "dev" + + manifest { + attributes( + 'MixinConfigs': 'mixins.baritone.json', + "MixinConnector": "baritone.launch.BaritoneMixinConnector", + + 'Implementation-Title': 'Baritone', + 'Implementation-Version': version, + ) + } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "FORGE" +} + +task createDist(type: CreateDistTask, dependsOn: proguard) + + +build.finalizedBy(createDist) \ No newline at end of file diff --git a/forge/gradle.properties b/forge/gradle.properties new file mode 100644 index 000000000..24befc474 --- /dev/null +++ b/forge/gradle.properties @@ -0,0 +1,18 @@ +# +# 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 . +# + +loom.platform=forge \ No newline at end of file diff --git a/forge/src/main/java/baritone/BaritoeModXD.java b/forge/src/main/java/baritone/BaritoeModXD.java new file mode 100644 index 000000000..166ee5e26 --- /dev/null +++ b/forge/src/main/java/baritone/BaritoeModXD.java @@ -0,0 +1,22 @@ +/* + * 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;import net.minecraftforge.fml.common.Mod; + +@Mod("baritoe") +public class BaritoeModXD { +} diff --git a/src/launch/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml similarity index 100% rename from src/launch/resources/META-INF/mods.toml rename to forge/src/main/resources/META-INF/mods.toml diff --git a/settings.gradle b/settings.gradle index 8917ae757..15a6e8e89 100755 --- a/settings.gradle +++ b/settings.gradle @@ -36,7 +36,12 @@ pluginManagement { url = 'https://libraries.minecraft.net/' } mavenCentral() + gradlePluginPortal() } } rootProject.name = 'baritone' + +include("fabric") +include("forge") +include("common") diff --git a/src/launch/resources/baritone/launch/BaritoneForgeModXD.class b/src/launch/resources/baritone/launch/BaritoneForgeModXD.class deleted file mode 100644 index cfb3137e28463732febb321bc6d1462d94b56cbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmah^y-ve07(BO018Jb8AR$J624KJo8wiOXbqXK>idY@jZCxd{lsJ7aCL{(PfQLeS z4&4~ArSo_9olfVk?~hLa=h$I5$VH`{HHsIaF>=mtR(x!$nYy==*SiReVYm=WK^`;X zkNHAL7op3r``3NujSPpWQI40|C|QZAoBA|9EekGfSz5y>`GO%_ilR{r(QgZydY9U0 zcg4^>KFJcSBaRWE&k(q|t{INf{|i%aaBC-&Hb|+!LsRCedJ%a+$|$u`6d8Te^OYDs z+oqCgti5CJsWDEMD$}(l%e67q38$^8v5yXw@rTi+ZiEA3yyZZ6`i|s{gbs#;J(4|c Z5hm>%VgsA)e$--!ZF>8(^WLb&+7G`TWU>GN diff --git a/src/launch/resources/fabric.mod.json b/src/launch/resources/fabric.mod.json index a1bed3a99..a66061bf3 100644 --- a/src/launch/resources/fabric.mod.json +++ b/src/launch/resources/fabric.mod.json @@ -21,7 +21,7 @@ "entrypoints": { }, "mixins": [ - "mixins.baritone.json" + "mixins.baritone.json" ], "depends": { diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index befa220ff..c8992290f 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -1,7 +1,7 @@ { "required": true, "package": "baritone.launch.mixins", - "refmap": "mixins.baritone.refmap.json", + "refmap": "baritone-common-refmap.json", "compatibilityLevel": "JAVA_16", "verbose": false, "injectors": { From 4b2d1fe6b098943a220a7be5b2fdaf654f3e4e6f Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Sun, 3 Apr 2022 22:17:15 -0700 Subject: [PATCH 272/935] fix an oopsie in chunk caches with dynamic world height --- src/main/java/baritone/cache/CachedRegion.java | 8 ++++---- src/main/java/baritone/cache/ChunkPacker.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index e501a6bb4..9bcebcaad 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -43,7 +43,7 @@ public final class CachedRegion implements ICachedRegion { /** * Magic value to detect invalid cache files, or incompatible cache files saved in an old version of Baritone */ - private static final int CACHED_REGION_MAGIC = 456022910; + private static final int CACHED_REGION_MAGIC = 456022911; /** * All of the chunks in this region: A 32x32 array of them. @@ -166,7 +166,7 @@ public synchronized final void save(String directory) { out.writeShort(entry.getValue().size()); for (BlockPos pos : entry.getValue()) { out.writeByte((byte) (pos.getZ() << 4 | pos.getX())); - out.writeByte((byte) (pos.getY())); + out.writeInt(pos.getY()-dimension.minY()); } } } @@ -270,8 +270,8 @@ public synchronized void load(String directory) { byte xz = in.readByte(); int X = xz & 0x0f; int Z = (xz >>> 4) & 0x0f; - int Y = in.readByte() & 0xff; - locs.add(new BlockPos(X, Y, Z)); + int Y = in.readInt(); + locs.add(new BlockPos(X, Y+dimension.minY(), Z)); } } } diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 0f3c11749..5af928c92 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -82,7 +82,7 @@ public static CachedChunk pack(LevelChunk chunk) { Block block = state.getBlock(); if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { String name = BlockUtils.blockToString(block); - specialBlocks.computeIfAbsent(name, b -> new ArrayList<>()).add(new BlockPos(x, y, z)); + specialBlocks.computeIfAbsent(name, b -> new ArrayList<>()).add(new BlockPos(x, y+chunk.getMinBuildHeight(), z)); } } } From 48b34bfbb8cffd27bf76e56c09ce5b5251934836 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 4 Apr 2022 18:11:03 -0700 Subject: [PATCH 273/935] some jank to sourcesets to get dev launching --- common/build.gradle | 67 ++++++++++++++++++++++++++++----------------- fabric/build.gradle | 3 +- forge/build.gradle | 4 ++- 3 files changed, 47 insertions(+), 27 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index 4007d358d..09bc000e3 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -7,31 +7,35 @@ architectury { } sourceSets { - api { - compileClasspath += main.compileClasspath + realmain { java { java { - srcDir "$rootDir/src/api/java" + srcDir "$rootDir/src/main/java" } resources { - srcDir "$rootDir/src/api/resources" + srcDir "$rootDir/src/main/resources" } } } - main { - compileClasspath += api.output + api { + compileClasspath += main.compileClasspath + runtimeClasspath += main.runtimeClasspath java { java { - srcDir "$rootDir/src/main/java" + srcDir "$rootDir/src/api/java" } resources { - srcDir "$rootDir/src/main/resources" + srcDir "$rootDir/src/api/resources" } } } + realmain { + compileClasspath += main.compileClasspath + api.output + runtimeClasspath += main.runtimeClasspath + api.output + } test { - compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output - runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output + compileClasspath += realmain.compileClasspath + realmain.output + runtimeClasspath += realmain.runtimeClasspath + realmain.output java { java { srcDir "$rootDir/src/test/java" @@ -41,9 +45,9 @@ sourceSets { } } } - launch { - compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output - runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output + main { + compileClasspath += realmain.output + api.output + runtimeClasspath += realmain.output + api.output java { java { srcDir "$rootDir/src/launch/java" @@ -54,7 +58,8 @@ sourceSets { } } schematica_api { - compileClasspath += main.compileClasspath + compileClasspath += realmain.compileClasspath + runtimeClasspath += realmain.runtimeClasspath java { java { srcDir "$rootDir/src/schematica_api/java" @@ -64,8 +69,18 @@ sourceSets { } } } - main { + realmain { compileClasspath += schematica_api.output + runtimeClasspath += schematica_api.output + } +} + +configurations { + transformProductionTweaker { + canBeConsumed = true + canBeResolved = false + // If you want this configuration to share the same dependencies, otherwise omit this line + extendsFrom implementation, runtimeOnly } } @@ -96,7 +111,7 @@ javadoc { jar { classifier "dev" - from sourceSets.launch.output, sourceSets.api.output + from sourceSets.main.output, sourceSets.realmain.output, sourceSets.api.output preserveFileTimestamps = false @@ -113,17 +128,19 @@ jar { } } -remapJar { - targetNamespace.set "official" -} +import net.fabricmc.loom.task.RemapJarTask +task transformProductionTweakerTask(type: RemapJarTask, dependsOn: jar) { + input = project.tasks.getByName("jar").archiveFile + archiveClassifier = "transformProductionTweaker" + targetNamespace = "official" -task proguard(type: ProguardTask) { - url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - extract 'proguard-7.2.1/lib/proguard.jar' - compType "OFFICIAL" } -task createDist(type: CreateDistTask, dependsOn: proguard) +jar.finalizedBy(transformProductionTweakerTask) -build.finalizedBy(createDist) \ No newline at end of file +artifacts { + transformProductionTweaker(transformProductionTweakerTask.archiveFile) { + builtBy(transformProductionTweakerTask) + } +} \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index 65f9f6037..4b3ccbd58 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -38,8 +38,9 @@ configurations { } dependencies { + modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" - common(project(path: ":common", configuration: "namedElements")) { transitive false } + common(project(path: ":common", configuration: "namedElements")) shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } } diff --git a/forge/build.gradle b/forge/build.gradle index 08ae62e00..5a1f5dc3c 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -46,7 +46,9 @@ configurations { dependencies { forge "net.minecraftforge:forge:${rootProject.forge_version}" - common(project(path: ":common", configuration: "namedElements")) { transitive false } + common(project(path: ":common", configuration: "namedElements")) { + exclude module: "fabric-loader" + } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive false } } From 394b4fd5b8d87439c775078a3bc178e368c08a04 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 4 Apr 2022 18:38:23 -0700 Subject: [PATCH 274/935] proguard builds now --- .github/workflows/gradle_build.yml | 6 --- Dockerfile | 2 - .../gradle/task/BaritoneGradleTask.java | 1 + .../baritone/gradle/task/ProguardTask.java | 41 +++++++++++++++---- common/build.gradle | 22 +++++----- fabric/build.gradle | 10 ++++- forge/build.gradle | 12 ++++-- 7 files changed, 61 insertions(+), 33 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index c0b10b208..4a12b2bd1 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -25,12 +25,6 @@ jobs: - name: Build with Gradle run: ./gradlew build - - - name: Build (fabric) with Gradle - run: ./gradlew build -Pbaritone.fabric_build - - - name: Build (forge) with Gradle - run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge - name: Archive Artifacts uses: actions/upload-artifact@v2 diff --git a/Dockerfile b/Dockerfile index 6dc0abd40..3c7cbaefc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,5 +13,3 @@ COPY . /code WORKDIR /code RUN ./gradlew build -RUN ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge -RUN ./gradlew build -Pbaritone.fabric_build diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index cf5aed94d..ddd2a9360 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -36,6 +36,7 @@ class BaritoneGradleTask extends DefaultTask { protected static final String PROGUARD_ZIP = "proguard.zip", PROGUARD_JAR = "proguard.jar", + MIXIN_JAR = "mixin.jar", PROGUARD_CONFIG_TEMPLATE = "scripts/proguard.pro", PROGUARD_CONFIG_DEST = "template.pro", PROGUARD_API_CONFIG = "api.pro", diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 4807a6a69..25535ff4c 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -28,6 +28,7 @@ import org.gradle.internal.jvm.Jvm; import java.io.*; +import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; @@ -52,6 +53,13 @@ public String getUrl() { return url; } + @Input + private String mixinUrl; + + public String getMixinUrl() { + return mixinUrl; + } + @Input private String extract; @@ -66,15 +74,10 @@ public String getCompType() { return compType; } - private final File copyMcTargetDir = new File("./build/createMcIntermediaryJar").getAbsoluteFile(); - private final File copyMcTargetJar = new File(copyMcTargetDir, "client.jar"); - @TaskAction protected void exec() throws Exception { super.verifyArtifacts(); - copyMcJar(); - // "Haha brady why don't you make separate tasks" processArtifact(); downloadProguard(); @@ -89,7 +92,7 @@ private boolean isMcJar(File f) { return f.getName().startsWith(compType.equals("FORGE") ? "forge-" : "minecraft-") && f.getName().contains("minecraft-merged-named"); } - private void copyMcJar() throws IOException { + private File getMcJar() throws IOException { File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getRuntimeClasspath().getFiles() .stream() .filter(this::isMcJar) @@ -107,8 +110,7 @@ private void copyMcJar() throws IOException { .findFirst() .get(); if (!mcClientJar.exists()) throw new IOException("Failed to find minecraft! " + mcClientJar.getAbsolutePath()); - if (!copyMcTargetDir.exists() && !copyMcTargetDir.mkdirs()) throw new IOException("Failed to create target for copyMcJar"); - Files.copy(mcClientJar.toPath(), copyMcTargetJar.toPath(), REPLACE_EXISTING); + return mcClientJar; } private void processArtifact() throws Exception { @@ -136,6 +138,13 @@ private void extractProguard() throws Exception { } } + private void downloadMixin() throws Exception { + Path mixinJar = getTemporaryFile(MIXIN_JAR); + if (!Files.exists(mixinJar)) { + write(new URL(this.mixinUrl).openStream(), mixinJar); + } + } + private String getJavaBinPathForProguard() throws Exception { String path; try { @@ -245,6 +254,13 @@ private void generateConfigs() throws Exception { { final Stream libraries; + File mcJar; + try { + mcJar = getMcJar(); + } catch (Exception e) { + throw new RuntimeException("Failed to find Minecraft jar", e); + } + { // Discover all of the libraries that we will need to acquire from gradle final Stream dependencies = acquireDependencies() @@ -252,11 +268,14 @@ private void generateConfigs() throws Exception { .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")); libraries = dependencies - .map(f -> isMcJar(f) ? copyMcTargetJar : f); + .map(f -> isMcJar(f) ? mcJar : f); } libraries.forEach(f -> { template.add(2, "-libraryjars '" + f + "'"); }); + + downloadMixin(); + template.add(2, "-libraryjars '" + this.getTemporaryFile(MIXIN_JAR) + "'"); } // API config doesn't require any changes from the changes that we made to the template @@ -294,6 +313,10 @@ public void setUrl(String url) { this.url = url; } + public void setMixinUrl(String mixinUrl) { + this.mixinUrl = mixinUrl; + } + public void setExtract(String extract) { this.extract = extract; } diff --git a/common/build.gradle b/common/build.gradle index 09bc000e3..7d5bc7b03 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -128,19 +128,17 @@ jar { } } -import net.fabricmc.loom.task.RemapJarTask - -task transformProductionTweakerTask(type: RemapJarTask, dependsOn: jar) { - input = project.tasks.getByName("jar").archiveFile - archiveClassifier = "transformProductionTweaker" - targetNamespace = "official" +remapJar { + targetNamespace = 'official' +} +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + mixinUrl 'https://maven.fabricmc.net/net/fabricmc/sponge-mixin/0.11.3%2Bmixin.0.8.5/sponge-mixin-0.11.3%2Bmixin.0.8.5.jar' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "OFFICIAL" } -jar.finalizedBy(transformProductionTweakerTask) +task createDist(type: CreateDistTask, dependsOn: proguard) -artifacts { - transformProductionTweaker(transformProductionTweakerTask.archiveFile) { - builtBy(transformProductionTweakerTask) - } -} \ No newline at end of file +build.finalizedBy(createDist) diff --git a/fabric/build.gradle b/fabric/build.gradle index 4b3ccbd58..9f7e94d34 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -40,7 +40,14 @@ configurations { dependencies { modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" - common(project(path: ":common", configuration: "namedElements")) + // this makes it compile with the forge tweak stuff + implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' + implementation('net.minecraft:launchwrapper:1.12') { + exclude module: 'lwjgl' + exclude module: 'asm-debug-all' + } + + common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } } @@ -75,6 +82,7 @@ components.java { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + mixinUrl 'https://maven.fabricmc.net/net/fabricmc/sponge-mixin/0.11.3%2Bmixin.0.8.5/sponge-mixin-0.11.3%2Bmixin.0.8.5.jar' extract 'proguard-7.2.1/lib/proguard.jar' compType "FABRIC" } diff --git a/forge/build.gradle b/forge/build.gradle index 5a1f5dc3c..2d6dcfd51 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -46,9 +46,14 @@ configurations { dependencies { forge "net.minecraftforge:forge:${rootProject.forge_version}" - common(project(path: ":common", configuration: "namedElements")) { - exclude module: "fabric-loader" - } + // this makes it compile with the forge tweak stuff + implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' + implementation('net.minecraft:launchwrapper:1.12') { + exclude module: 'lwjgl' + exclude module: 'asm-debug-all' + } + + common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive false } } @@ -95,6 +100,7 @@ components.java { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + mixinUrl 'https://maven.fabricmc.net/net/fabricmc/sponge-mixin/0.11.3%2Bmixin.0.8.5/sponge-mixin-0.11.3%2Bmixin.0.8.5.jar' extract 'proguard-7.2.1/lib/proguard.jar' compType "FORGE" } From 88c00f2fec94641d5ecac1a6114da95e4894b505 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 4 Apr 2022 18:53:29 -0700 Subject: [PATCH 275/935] java 17 is lts, so use java 17 --- .github/workflows/gradle_build.yml | 4 ++-- .github/workflows/run_tests.yml | 4 ++-- Dockerfile | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 4a12b2bd1..15f6a3f8b 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -14,10 +14,10 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up JDK 16 + - name: Set up JDK 17 uses: actions/setup-java@v2 with: - java-version: '16' + java-version: '17' distribution: 'adopt' - name: Grant execute permission for gradlew diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 581373af7..f8393273d 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -12,10 +12,10 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up JDK 16 + - name: Set up JDK 17 uses: actions/setup-java@v2 with: - java-version: '16' + java-version: '17' distribution: 'adopt' - name: Grant execute permission for gradlew diff --git a/Dockerfile b/Dockerfile index 3c7cbaefc..9023e2020 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ ENV DEBIAN_FRONTEND noninteractive RUN apt update -y RUN apt install \ - openjdk-16-jdk \ + openjdk-17-jdk \ --assume-yes COPY . /code From 3cee66229a00214a37e70a1426b0a7ee7fb86118 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 4 Apr 2022 19:15:21 -0700 Subject: [PATCH 276/935] proper mappings per proguard run --- .github/workflows/gradle_build.yml | 2 +- .github/workflows/run_tests.yml | 2 +- .gitignore | 4 +++- .../baritone/gradle/task/BaritoneGradleTask.java | 7 ++++--- .../java/baritone/gradle/task/ProguardTask.java | 14 ++++++++++---- scripts/proguard.pro | 2 -- 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 15f6a3f8b..1604ca7f1 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -36,4 +36,4 @@ jobs: uses: actions/upload-artifact@v2 with: name: Mappings - path: build/tmp/proguard/mapping.txt + path: mapping/ diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index f8393273d..5967ec87d 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -23,4 +23,4 @@ jobs: - name: Executing tests run: ./gradlew test - + diff --git a/.gitignore b/.gitignore index 99c56ad4f..16e60bede 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,6 @@ baritone_Client.launch !/.idea/copyright/profiles_settings.xml .vscode/launch.json -.architectury-transformer \ No newline at end of file +.architectury-transformer + +mapping \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index ddd2a9360..ab1a180fc 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -42,6 +42,7 @@ class BaritoneGradleTask extends DefaultTask { PROGUARD_API_CONFIG = "api.pro", PROGUARD_STANDALONE_CONFIG = "standalone.pro", PROGUARD_EXPORT_PATH = "proguard_out.jar", + PROGUARD_MAPPING_DIR = "mapping", ARTIFACT_STANDARD = "%s-%s.jar", ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", @@ -101,11 +102,11 @@ protected String formatVersion(String string) { } protected Path getRelativeFile(String file) { - return Paths.get(new File(new File(getProject().getBuildDir(), "../"), file).getAbsolutePath()); + return Paths.get(new File(getProject().getBuildDir(), file).getAbsolutePath()); } protected Path getRootRelativeFile(String file) { - return Paths.get(new File(new File(getProject().getRootProject().getBuildDir(), "../"), file).getAbsolutePath()); + return Paths.get(new File(getProject().getRootDir(), file).getAbsolutePath()); } protected Path getTemporaryFile(String file) { @@ -113,6 +114,6 @@ protected Path getTemporaryFile(String file) { } protected Path getBuildFile(String file) { - return getRelativeFile("build/libs/" + file); + return getRelativeFile("libs/" + file); } } diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 25535ff4c..5e5dbfc0d 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -278,13 +278,19 @@ private void generateConfigs() throws Exception { template.add(2, "-libraryjars '" + this.getTemporaryFile(MIXIN_JAR) + "'"); } + Files.createDirectories(this.getRootRelativeFile(PROGUARD_MAPPING_DIR)); + + List api = new ArrayList<>(template); + api.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + compType + "-api.txt")); + // API config doesn't require any changes from the changes that we made to the template - Files.write(getTemporaryFile(PROGUARD_API_CONFIG), template); + Files.write(getTemporaryFile(compType+PROGUARD_API_CONFIG), api); // For the Standalone config, don't keep the API package List standalone = new ArrayList<>(template); standalone.removeIf(s -> s.contains("# this is the keep api")); - Files.write(getTemporaryFile(PROGUARD_STANDALONE_CONFIG), standalone); + standalone.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + compType + "-standalone.txt")); + Files.write(getTemporaryFile(compType+PROGUARD_STANDALONE_CONFIG), standalone); } private Stream acquireDependencies() { @@ -294,12 +300,12 @@ private Stream acquireDependencies() { } private void proguardApi() throws Exception { - runProguard(getTemporaryFile(PROGUARD_API_CONFIG)); + runProguard(getTemporaryFile(compType+PROGUARD_API_CONFIG)); Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); } private void proguardStandalone() throws Exception { - runProguard(getTemporaryFile(PROGUARD_STANDALONE_CONFIG)); + runProguard(getTemporaryFile(compType+PROGUARD_STANDALONE_CONFIG)); Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString()); } diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 84b8e5ec9..b4b1e021b 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -337,5 +337,3 @@ public java.lang.String substring(int); public java.lang.String substring(int,int); } - --printmapping mapping.txt From 16f93ce769ac062ebd26af31f9e1fe2ba8a2969f Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 4 Apr 2022 20:10:25 -0700 Subject: [PATCH 277/935] explicitly include mixin "properly", mavenpublish should work now --- build.gradle | 4 +++ .../baritone/gradle/task/ProguardTask.java | 25 ++----------------- common/build.gradle | 23 ++++++++++++++--- fabric/build.gradle | 21 +++++++++++++--- .../src/main}/resources/fabric.mod.json | 0 forge/build.gradle | 21 +++++++++++++--- 6 files changed, 60 insertions(+), 34 deletions(-) rename {src/launch => fabric/src/main}/resources/fabric.mod.json (100%) diff --git a/build.gradle b/build.gradle index c1c104105..cffa4b222 100755 --- a/build.gradle +++ b/build.gradle @@ -61,6 +61,10 @@ allprojects { apply plugin: "architectury-plugin" repositories { + maven { + name = 'spongepowered-repo' + url = 'https://repo.spongepowered.org/repository/maven-public/' + } maven { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 5e5dbfc0d..d3acaa6ed 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -53,13 +53,6 @@ public String getUrl() { return url; } - @Input - private String mixinUrl; - - public String getMixinUrl() { - return mixinUrl; - } - @Input private String extract; @@ -93,7 +86,7 @@ private boolean isMcJar(File f) { } private File getMcJar() throws IOException { - File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getRuntimeClasspath().getFiles() + File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() .stream() .filter(this::isMcJar) .map(f -> { @@ -138,13 +131,6 @@ private void extractProguard() throws Exception { } } - private void downloadMixin() throws Exception { - Path mixinJar = getTemporaryFile(MIXIN_JAR); - if (!Files.exists(mixinJar)) { - write(new URL(this.mixinUrl).openStream(), mixinJar); - } - } - private String getJavaBinPathForProguard() throws Exception { String path; try { @@ -273,9 +259,6 @@ private void generateConfigs() throws Exception { libraries.forEach(f -> { template.add(2, "-libraryjars '" + f + "'"); }); - - downloadMixin(); - template.add(2, "-libraryjars '" + this.getTemporaryFile(MIXIN_JAR) + "'"); } Files.createDirectories(this.getRootRelativeFile(PROGUARD_MAPPING_DIR)); @@ -294,7 +277,7 @@ private void generateConfigs() throws Exception { } private Stream acquireDependencies() { - return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getRuntimeClasspath().getFiles() + return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() .stream() .filter(File::isFile); } @@ -319,10 +302,6 @@ public void setUrl(String url) { this.url = url; } - public void setMixinUrl(String mixinUrl) { - this.mixinUrl = mixinUrl; - } - public void setExtract(String extract) { this.extract = extract; } diff --git a/common/build.gradle b/common/build.gradle index 7d5bc7b03..5880988e2 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -6,6 +6,7 @@ architectury { common() } +// ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts sourceSets { realmain { java { @@ -87,7 +88,10 @@ configurations { dependencies { // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies // Do NOT use other classes from fabric loader - modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" + modCompileOnly "net.fabricmc:fabric-loader:${project.fabric_version}" + + // want in the pom but not to compile against as it's also provided by loom + runtimeOnly "org.spongepowered:mixin:0.8.4" // this makes it compile with the forge tweak stuff implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' @@ -96,7 +100,7 @@ dependencies { exclude module: 'asm-debug-all' } - implementation 'com.google.code.findbugs:jsr305:3.0.2' + compileOnly 'com.google.code.findbugs:jsr305:3.0.2' testImplementation 'junit:junit:4.12' } @@ -134,7 +138,6 @@ remapJar { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - mixinUrl 'https://maven.fabricmc.net/net/fabricmc/sponge-mixin/0.11.3%2Bmixin.0.8.5/sponge-mixin-0.11.3%2Bmixin.0.8.5.jar' extract 'proguard-7.2.1/lib/proguard.jar' compType "OFFICIAL" } @@ -142,3 +145,17 @@ task proguard(type: ProguardTask) { task createDist(type: CreateDistTask, dependsOn: proguard) build.finalizedBy(createDist) + +publishing { + publications { + mavenCommon(MavenPublication) { + artifactId = rootProject.archives_base_name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index 9f7e94d34..170bc7922 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -41,8 +41,8 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" // this makes it compile with the forge tweak stuff - implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' - implementation('net.minecraft:launchwrapper:1.12') { + compileOnly 'com.github.ImpactDevelopment:SimpleTweaker:1.2' + compileOnly('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' exclude module: 'asm-debug-all' } @@ -82,11 +82,24 @@ components.java { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - mixinUrl 'https://maven.fabricmc.net/net/fabricmc/sponge-mixin/0.11.3%2Bmixin.0.8.5/sponge-mixin-0.11.3%2Bmixin.0.8.5.jar' extract 'proguard-7.2.1/lib/proguard.jar' compType "FABRIC" } task createDist(type: CreateDistTask, dependsOn: proguard) -build.finalizedBy(createDist) \ No newline at end of file +build.finalizedBy(createDist) + +publishing { + publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} \ No newline at end of file diff --git a/src/launch/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json similarity index 100% rename from src/launch/resources/fabric.mod.json rename to fabric/src/main/resources/fabric.mod.json diff --git a/forge/build.gradle b/forge/build.gradle index 2d6dcfd51..0cb039747 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -47,8 +47,8 @@ dependencies { forge "net.minecraftforge:forge:${rootProject.forge_version}" // this makes it compile with the forge tweak stuff - implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' - implementation('net.minecraft:launchwrapper:1.12') { + compileOnly 'com.github.ImpactDevelopment:SimpleTweaker:1.2' + compileOnly('net.minecraft:launchwrapper:1.12') { exclude module: 'lwjgl' exclude module: 'asm-debug-all' } @@ -100,7 +100,6 @@ components.java { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - mixinUrl 'https://maven.fabricmc.net/net/fabricmc/sponge-mixin/0.11.3%2Bmixin.0.8.5/sponge-mixin-0.11.3%2Bmixin.0.8.5.jar' extract 'proguard-7.2.1/lib/proguard.jar' compType "FORGE" } @@ -108,4 +107,18 @@ task proguard(type: ProguardTask) { task createDist(type: CreateDistTask, dependsOn: proguard) -build.finalizedBy(createDist) \ No newline at end of file +build.finalizedBy(createDist) + +publishing { + publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} \ No newline at end of file From c3c88c50d1c92f6618c279d0d3e5979589708e4c Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 4 Apr 2022 20:11:15 -0700 Subject: [PATCH 278/935] jitpack.yml --- jitpack.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 jitpack.yml diff --git a/jitpack.yml b/jitpack.yml new file mode 100644 index 000000000..8a6523f7e --- /dev/null +++ b/jitpack.yml @@ -0,0 +1,3 @@ +before_install: + - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh + - source install-jdk.sh --feature 17 \ No newline at end of file From af646bd313997e37c7a0361f249bc0d4872cf50a Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 4 Apr 2022 20:45:17 -0700 Subject: [PATCH 279/935] yeet change I forgot to yeet 2 commits ago --- .../src/main/java/baritone/gradle/task/BaritoneGradleTask.java | 1 - 1 file changed, 1 deletion(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index ab1a180fc..1e1365ea1 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -36,7 +36,6 @@ class BaritoneGradleTask extends DefaultTask { protected static final String PROGUARD_ZIP = "proguard.zip", PROGUARD_JAR = "proguard.jar", - MIXIN_JAR = "mixin.jar", PROGUARD_CONFIG_TEMPLATE = "scripts/proguard.pro", PROGUARD_CONFIG_DEST = "template.pro", PROGUARD_API_CONFIG = "api.pro", From 65974e15ba5efc0ea8d7a5b2388b5ca77dfd3a5a Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Mon, 11 Apr 2022 18:36:48 +0100 Subject: [PATCH 280/935] Improve output to user in eta command --- .../baritone/command/defaults/ETACommand.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/command/defaults/ETACommand.java b/src/main/java/baritone/command/defaults/ETACommand.java index 3c16bd113..6905610f6 100644 --- a/src/main/java/baritone/command/defaults/ETACommand.java +++ b/src/main/java/baritone/command/defaults/ETACommand.java @@ -28,6 +28,7 @@ import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.stream.Stream; public class ETACommand extends Command { @@ -45,12 +46,22 @@ public void execute(String label, IArgConsumer args) throws CommandException { throw new CommandInvalidStateException("No process in control"); } IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); - logDirect(String.format( - "Next segment: %.2f\n" + - "Goal: %.2f", - pathingBehavior.ticksRemainingInSegment().orElse(-1.0), - pathingBehavior.estimatedTicksToGoal().orElse(-1.0) - )); + + Optional ticksRemainingInSegment = pathingBehavior.ticksRemainingInSegment(); + Optional ticksRemainingInGoal = pathingBehavior.estimatedTicksToGoal(); + + if (ticksRemainingInGoal.isPresent() && ticksRemainingInSegment.isPresent()) { + logDirect(String.format( + "Next segment: %.1fs (%.0f ticks)\n" + + "Goal: %.1fs (%.0f ticks)", + ticksRemainingInSegment.get() / 20, // we just assume tps is 20, it isn't worth the effort that is needed to calculate it exactly + ticksRemainingInSegment.get(), + ticksRemainingInGoal.get() / 20, + ticksRemainingInGoal.get() + )); + } else { + logDirect("Not currently pathing"); + } } @Override From 2cf973809a2fc277c8a8507565131d49e3e11e6b Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Tue, 12 Apr 2022 12:15:42 +0100 Subject: [PATCH 281/935] eta command should default to NaN not just not showing the eta as suggested by ZacSharp --- .../baritone/command/defaults/ETACommand.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/baritone/command/defaults/ETACommand.java b/src/main/java/baritone/command/defaults/ETACommand.java index 6905610f6..47b6ae9fa 100644 --- a/src/main/java/baritone/command/defaults/ETACommand.java +++ b/src/main/java/baritone/command/defaults/ETACommand.java @@ -47,21 +47,17 @@ public void execute(String label, IArgConsumer args) throws CommandException { } IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); - Optional ticksRemainingInSegment = pathingBehavior.ticksRemainingInSegment(); - Optional ticksRemainingInGoal = pathingBehavior.estimatedTicksToGoal(); + double ticksRemainingInSegment = pathingBehavior.ticksRemainingInSegment().orElse(Double.NaN); + double ticksRemainingInGoal = pathingBehavior.estimatedTicksToGoal().orElse(Double.NaN); - if (ticksRemainingInGoal.isPresent() && ticksRemainingInSegment.isPresent()) { - logDirect(String.format( - "Next segment: %.1fs (%.0f ticks)\n" + - "Goal: %.1fs (%.0f ticks)", - ticksRemainingInSegment.get() / 20, // we just assume tps is 20, it isn't worth the effort that is needed to calculate it exactly - ticksRemainingInSegment.get(), - ticksRemainingInGoal.get() / 20, - ticksRemainingInGoal.get() - )); - } else { - logDirect("Not currently pathing"); - } + logDirect(String.format( + "Next segment: %.1fs (%.0f ticks)\n" + + "Goal: %.1fs (%.0f ticks)", + ticksRemainingInSegment / 20, // we just assume tps is 20, it isn't worth the effort that is needed to calculate it exactly + ticksRemainingInSegment, + ticksRemainingInGoal / 20, + ticksRemainingInGoal + )); } @Override From 4dcf260059d63ed12de94b7f1adeb6f26d1fbae8 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Thu, 14 Apr 2022 19:08:42 +0200 Subject: [PATCH 282/935] Fix mistakes made while merging upwards --- .github/workflows/gradle_build.yml | 6 ++++++ .../command/defaults/WaypointsCommand.java | 20 +++++++++---------- src/main/java/baritone/utils/GuiClick.java | 4 ++-- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 34e93bff2..2ad00904b 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -26,6 +26,12 @@ jobs: - name: Build with Gradle run: ./gradlew build + - name: Build (fabric) with Gradle + run: ./gradlew build -Pbaritone.fabric_build + + - name: Build (forge) with Gradle + run: ./gradlew build -Pbaritone.forge_build + - name: Archive Artifacts uses: actions/upload-artifact@v2 with: diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 035ddd02e..671caf574 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -156,8 +156,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint); } deletedWaypoints.computeIfAbsent(baritone.getWorldProvider().getCurrentWorld(), k -> new ArrayList<>()).addAll(Arrays.asList(waypoints)); - ITextComponent textComponent = new StringTextComponent(String.format("Cleared %d waypoints, click to restore them", waypoints.length)); - textComponent.getStyle().setClickEvent(new ClickEvent( + TextComponent textComponent = new StringTextComponent(String.format("Cleared %d waypoints, click to restore them", waypoints.length)); + textComponent.setStyle(textComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s restore @ %s", @@ -165,7 +165,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { label, Stream.of(waypoints).map(wp -> Long.toString(wp.getCreationTimestamp())).collect(Collectors.joining(" ")) ) - )); + ))); logDirect(textComponent); } else if (action == Action.RESTORE) { List waypoints = new ArrayList<>(); @@ -260,7 +260,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { ) ))); TextComponent recreateComponent = new StringTextComponent("Click to show a command to recreate this waypoint"); - recreateComponent.getStyle().setClickEvent(new ClickEvent( + recreateComponent.setStyle(recreateComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.SUGGEST_COMMAND, String.format( "%s%s save %s %s %s %s %s", @@ -272,16 +272,16 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getLocation().y, waypoint.getLocation().z ) - )); + ))); TextComponent backComponent = new StringTextComponent("Click to return to the waypoints list"); - backComponent.getStyle().setClickEvent(new ClickEvent( + backComponent.setStyle(backComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s list", FORCE_COMMAND_PREFIX, label ) - )); + ))); logDirect(deleteComponent); logDirect(goalComponent); logDirect(recreateComponent); @@ -289,8 +289,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { } else if (action == Action.DELETE) { ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint); deletedWaypoints.computeIfAbsent(baritone.getWorldProvider().getCurrentWorld(), k -> new ArrayList<>()).add(waypoint); - ITextComponent textComponent = new StringTextComponent("That waypoint has successfully been deleted, click to restore it"); - textComponent.getStyle().setClickEvent(new ClickEvent( + TextComponent textComponent = new StringTextComponent("That waypoint has successfully been deleted, click to restore it"); + textComponent.setStyle(textComponent.getStyle().setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s restore @ %s", @@ -298,7 +298,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { label, waypoint.getCreationTimestamp() ) - )); + ))); logDirect(textComponent); } else if (action == Action.GOAL) { Goal goal = new GoalBlock(waypoint.getLocation()); diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 07b4093e7..56953ceef 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -88,12 +88,12 @@ public boolean mouseReleased(double mouseX, double mouseY, int mouseButton) { BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().removeAllSelections(); BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().addSelection(BetterBlockPos.from(clickStart), BetterBlockPos.from(currentMouseOver)); TextComponent component = new StringTextComponent("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); - component.getStyle() + component.setStyle(component.getStyle() .setFormatting(TextFormatting.WHITE) .setClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "help sel" - )); + ))); Helper.HELPER.logDirect(component); clickStart = null; } else { From 070083dc9be874f970dec7e2d3ecba81862db4ef Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 16 Apr 2022 02:57:29 -0700 Subject: [PATCH 283/935] properly remap refmap for tweaker --- .gitignore | 3 + common/build.gradle | 34 ++------- common/logs/latest.log | 0 settings.gradle | 1 + tweaker/build.gradle | 166 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 176 insertions(+), 28 deletions(-) delete mode 100644 common/logs/latest.log create mode 100644 tweaker/build.gradle diff --git a/.gitignore b/.gitignore index 16e60bede..50a166bce 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,9 @@ classes/ *.iws /logs/ +tweaker/logs/ +common/logs/ + # Eclipse Files .classpath .project diff --git a/common/build.gradle b/common/build.gradle index 5880988e2..1a4e6ecc6 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -6,6 +6,12 @@ architectury { common() } +//loom { +// mixin { +// legacyRemapToNamespace = "official" +// } +//} + // ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts sourceSets { realmain { @@ -130,32 +136,4 @@ jar { 'Implementation-Version': version, ) } -} - -remapJar { - targetNamespace = 'official' -} - -task proguard(type: ProguardTask) { - url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - extract 'proguard-7.2.1/lib/proguard.jar' - compType "OFFICIAL" -} - -task createDist(type: CreateDistTask, dependsOn: proguard) - -build.finalizedBy(createDist) - -publishing { - publications { - mavenCommon(MavenPublication) { - artifactId = rootProject.archives_base_name - from components.java - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - } } \ No newline at end of file diff --git a/common/logs/latest.log b/common/logs/latest.log deleted file mode 100644 index e69de29bb..000000000 diff --git a/settings.gradle b/settings.gradle index 15a6e8e89..79018ad7c 100755 --- a/settings.gradle +++ b/settings.gradle @@ -45,3 +45,4 @@ rootProject.name = 'baritone' include("fabric") include("forge") include("common") +include("tweaker") diff --git a/tweaker/build.gradle b/tweaker/build.gradle new file mode 100644 index 000000000..9612b4b8c --- /dev/null +++ b/tweaker/build.gradle @@ -0,0 +1,166 @@ +import baritone.gradle.task.CreateDistTask +import baritone.gradle.task.ProguardTask + +architectury { + injectInjectables = false +} + +loom { + mixin { + legacyRemapToNamespace = "official" + } +} + +// ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts +sourceSets { + realmain { + java { + java { + srcDir "$rootDir/src/main/java" + } + resources { + srcDir "$rootDir/src/main/resources" + } + } + } + api { + compileClasspath += main.compileClasspath + runtimeClasspath += main.runtimeClasspath + java { + java { + srcDir "$rootDir/src/api/java" + } + resources { + srcDir "$rootDir/src/api/resources" + } + } + } + realmain { + compileClasspath += main.compileClasspath + api.output + runtimeClasspath += main.runtimeClasspath + api.output + } + test { + compileClasspath += realmain.compileClasspath + realmain.output + runtimeClasspath += realmain.runtimeClasspath + realmain.output + java { + java { + srcDir "$rootDir/src/test/java" + } + resources { + srcDir "$rootDir/src/test/resources" + } + } + } + main { + compileClasspath += realmain.output + api.output + runtimeClasspath += realmain.output + api.output + java { + java { + srcDir "$rootDir/src/launch/java" + } + resources { + srcDir "$rootDir/src/launch/resources" + } + } + } + schematica_api { + compileClasspath += realmain.compileClasspath + runtimeClasspath += realmain.runtimeClasspath + java { + java { + srcDir "$rootDir/src/schematica_api/java" + } + resources { + srcDir "$rootDir/src/schematica_api/resources" + } + } + } + realmain { + compileClasspath += schematica_api.output + runtimeClasspath += schematica_api.output + } +} + +configurations { + transformProductionTweaker { + canBeConsumed = true + canBeResolved = false + // If you want this configuration to share the same dependencies, otherwise omit this line + extendsFrom implementation, runtimeOnly + } +} + +dependencies { + // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies + // Do NOT use other classes from fabric loader + modCompileOnly "net.fabricmc:fabric-loader:${project.fabric_version}" + + // want in the pom but not to compile against as it's also provided by loom + runtimeOnly "org.spongepowered:mixin:0.8.4" + + // this makes it compile with the forge tweak stuff + implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' + implementation('net.minecraft:launchwrapper:1.12') { + exclude module: 'lwjgl' + exclude module: 'asm-debug-all' + } + + compileOnly 'com.google.code.findbugs:jsr305:3.0.2' + + testImplementation 'junit:junit:4.12' +} + +javadoc { + options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error + options.linkSource true + options.encoding "UTF-8" // allow emoji in comments :^) + source = sourceSets.api.allJava + classpath += sourceSets.api.compileClasspath +} + +jar { + classifier "dev" + from sourceSets.main.output, sourceSets.realmain.output, sourceSets.api.output + + + preserveFileTimestamps = false + reproducibleFileOrder = true + + manifest { + attributes( + 'MixinConfigs': 'mixins.baritone.json', + "MixinConnector": "baritone.launch.BaritoneMixinConnector", + + 'Implementation-Title': 'Baritone', + 'Implementation-Version': version, + ) + } +} + +remapJar { + targetNamespace = 'official' +} + +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "OFFICIAL" +} + +task createDist(type: CreateDistTask, dependsOn: proguard) + +build.finalizedBy(createDist) + +publishing { + publications { + mavenCommon(MavenPublication) { + artifactId = rootProject.archives_base_name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} \ No newline at end of file From 93a16f356d89b68f535dd7bc73a74a68fd862a7b Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 16 Apr 2022 03:22:53 -0700 Subject: [PATCH 284/935] cleanup. move tweaker classes --- build.gradle | 8 ++++++++ common/build.gradle | 11 ----------- fabric/build.gradle | 7 ------- forge/build.gradle | 7 ------- .../BaritoneForgeModXD.java} | 4 ++-- tweaker/build.gradle | 13 ++++++++----- .../java/baritone/launch/BaritoneTweaker.java | 0 .../java/baritone/launch/LaunchTesting.java | 0 8 files changed, 18 insertions(+), 32 deletions(-) rename forge/src/main/java/baritone/{BaritoeModXD.java => launch/BaritoneForgeModXD.java} (87%) rename {src/launch => tweaker/src/tweaker}/java/baritone/launch/BaritoneTweaker.java (100%) rename {src/launch => tweaker/src/tweaker}/java/baritone/launch/LaunchTesting.java (100%) diff --git a/build.gradle b/build.gradle index cffa4b222..f6c3f4c83 100755 --- a/build.gradle +++ b/build.gradle @@ -73,6 +73,14 @@ allprojects { name = "ldtteam" url = "https://maven.parchmentmc.net/" } + // for the newer version of launchwrapper + maven { + name = "multimc-maven" + url = "https://files.multimc.org/maven/" + metadataSources { + artifact() + } + } mavenCentral() } } diff --git a/common/build.gradle b/common/build.gradle index 1a4e6ecc6..17efe7ea2 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -96,16 +96,6 @@ dependencies { // Do NOT use other classes from fabric loader modCompileOnly "net.fabricmc:fabric-loader:${project.fabric_version}" - // want in the pom but not to compile against as it's also provided by loom - runtimeOnly "org.spongepowered:mixin:0.8.4" - - // this makes it compile with the forge tweak stuff - implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' - implementation('net.minecraft:launchwrapper:1.12') { - exclude module: 'lwjgl' - exclude module: 'asm-debug-all' - } - compileOnly 'com.google.code.findbugs:jsr305:3.0.2' testImplementation 'junit:junit:4.12' @@ -123,7 +113,6 @@ jar { classifier "dev" from sourceSets.main.output, sourceSets.realmain.output, sourceSets.api.output - preserveFileTimestamps = false reproducibleFileOrder = true diff --git a/fabric/build.gradle b/fabric/build.gradle index 170bc7922..86aab9dd8 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -40,13 +40,6 @@ configurations { dependencies { modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" - // this makes it compile with the forge tweak stuff - compileOnly 'com.github.ImpactDevelopment:SimpleTweaker:1.2' - compileOnly('net.minecraft:launchwrapper:1.12') { - exclude module: 'lwjgl' - exclude module: 'asm-debug-all' - } - common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } } diff --git a/forge/build.gradle b/forge/build.gradle index 0cb039747..f1cabe46d 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -46,13 +46,6 @@ configurations { dependencies { forge "net.minecraftforge:forge:${rootProject.forge_version}" - // this makes it compile with the forge tweak stuff - compileOnly 'com.github.ImpactDevelopment:SimpleTweaker:1.2' - compileOnly('net.minecraft:launchwrapper:1.12') { - exclude module: 'lwjgl' - exclude module: 'asm-debug-all' - } - common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive false } } diff --git a/forge/src/main/java/baritone/BaritoeModXD.java b/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java similarity index 87% rename from forge/src/main/java/baritone/BaritoeModXD.java rename to forge/src/main/java/baritone/launch/BaritoneForgeModXD.java index 166ee5e26..db84d62e1 100644 --- a/forge/src/main/java/baritone/BaritoeModXD.java +++ b/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java @@ -15,8 +15,8 @@ * along with Baritone. If not, see . */ -package baritone;import net.minecraftforge.fml.common.Mod; +package baritone.launch;import net.minecraftforge.fml.common.Mod; @Mod("baritoe") -public class BaritoeModXD { +public class BaritoneForgeModXD { } diff --git a/tweaker/build.gradle b/tweaker/build.gradle index 9612b4b8c..cb76d7a4d 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -51,9 +51,13 @@ sourceSets { } } } + tweaker { + compileClasspath += realmain.output + api.output + main.compileClasspath + runtimeClasspath += realmain.output + api.output + main.compileClasspath + } main { - compileClasspath += realmain.output + api.output - runtimeClasspath += realmain.output + api.output + compileClasspath += realmain.output + api.output + tweaker.output + runtimeClasspath += realmain.output + api.output + tweaker.output java { java { srcDir "$rootDir/src/launch/java" @@ -100,7 +104,7 @@ dependencies { // this makes it compile with the forge tweak stuff implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' - implementation('net.minecraft:launchwrapper:1.12') { + implementation('net.minecraft:launchwrapper:of-2.3') { exclude module: 'lwjgl' exclude module: 'asm-debug-all' } @@ -120,8 +124,7 @@ javadoc { jar { classifier "dev" - from sourceSets.main.output, sourceSets.realmain.output, sourceSets.api.output - + from sourceSets.main.output, sourceSets.realmain.output, sourceSets.api.output, sourceSets.tweaker.output preserveFileTimestamps = false reproducibleFileOrder = true diff --git a/src/launch/java/baritone/launch/BaritoneTweaker.java b/tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java similarity index 100% rename from src/launch/java/baritone/launch/BaritoneTweaker.java rename to tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java diff --git a/src/launch/java/baritone/launch/LaunchTesting.java b/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java similarity index 100% rename from src/launch/java/baritone/launch/LaunchTesting.java rename to tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java From 056107a356539ced6b9ec02d5a5b23bd39c7e645 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 16 Apr 2022 03:46:41 -0700 Subject: [PATCH 285/935] fix checksums, this'll probably confuse someone. I couldn't figure out how to fix it the other way... --- .../baritone/gradle/task/BaritoneGradleTask.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 1e1365ea1..a412f2f19 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -47,12 +47,12 @@ class BaritoneGradleTask extends DefaultTask { ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", ARTIFACT_API = "%s-api-%s.jar", ARTIFACT_STANDALONE = "%s-standalone-%s.jar", - ARTIFACT_FORGE_UNOPTIMIZED = "%s-unoptimized-forge-%s.jar", - ARTIFACT_FORGE_API = "%s-api-forge-%s.jar", - ARTIFACT_FORGE_STANDALONE = "%s-standalone-forge-%s.jar", - ARTIFACT_FABRIC_UNOPTIMIZED = "%s-unoptimized-fabric-%s.jar", - ARTIFACT_FABRIC_API = "%s-api-fabric-%s.jar", - ARTIFACT_FABRIC_STANDALONE = "%s-standalone-fabric-%s.jar"; + ARTIFACT_FORGE_UNOPTIMIZED = "%s-forge-unoptimized-%s.jar", + ARTIFACT_FORGE_API = "%s-forge-api-%s.jar", + ARTIFACT_FORGE_STANDALONE = "%s-forge-standalone-%s.jar", + ARTIFACT_FABRIC_UNOPTIMIZED = "%s-fabric-standalone-%s.jar", + ARTIFACT_FABRIC_API = "%s-fabric-api-%s.jar", + ARTIFACT_FABRIC_STANDALONE = "%s-fabric-standalone-%s.jar"; protected String artifactName, artifactVersion; protected final Path From d0d74b15916036745d0edd58022bb744033bfb3d Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 16 Apr 2022 04:02:45 -0700 Subject: [PATCH 286/935] freeze version numbers at known working --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index f6c3f4c83..6dcf43f09 100755 --- a/build.gradle +++ b/build.gradle @@ -16,8 +16,8 @@ */ plugins { - id "architectury-plugin" version "3.4-SNAPSHOT" - id 'dev.architectury.loom' version '0.11.0-SNAPSHOT' apply false + id "architectury-plugin" version "3.4.131" + id 'dev.architectury.loom' version '0.11.0.254' apply false } architectury { From bf7c840ea381ebdcb0e67817d4654552a9e18486 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Fri, 22 Apr 2022 19:00:43 -0700 Subject: [PATCH 287/935] backport 3308 --- .../baritone/pathing/movement/MovementHelper.java | 4 +++- src/main/java/baritone/process/BuilderProcess.java | 13 ++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 4d4f1887b..7f84ab0e0 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -96,7 +96,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block instanceof AbstractFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { @@ -283,6 +283,8 @@ static boolean avoidWalkingInto(BlockState state) { return !state.getFluidState().isEmpty() || block == Blocks.MAGMA_BLOCK || block == Blocks.CACTUS + || block == Blocks.SWEET_BERRY_BUSH + || block instanceof BaseFireBlock || block instanceof AbstractFireBlock || block == Blocks.END_PORTAL || block == Blocks.COBWEB diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 186412cea..f473b4cf8 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -847,7 +847,18 @@ private List approxPlaceable(int size) { continue; } // - result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vector3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))); + BlockState itemState = ((BlockItem) stack.getItem()) + .getBlock() + .getStateForPlacement( + new BlockItemUseOnContext( + new ItemUseContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockRayTraceResult(new Vector3d(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {} + ) + ); + if (itemState != null) { + result.add(itemState); + } else { + result.add(Blocks.AIR.defaultBlockState()); + } // } return result; From 25e8e1b5fe8c1cc03da9194ed37569aade533253 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Fri, 22 Apr 2022 19:23:39 -0700 Subject: [PATCH 288/935] fix --- src/main/java/baritone/pathing/movement/MovementHelper.java | 3 +-- src/main/java/baritone/process/BuilderProcess.java | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 7f84ab0e0..e67bd5638 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -96,7 +96,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof AirBlock) { // early return for most common case return true; } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH) { + if (block instanceof AbstractFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { @@ -284,7 +284,6 @@ static boolean avoidWalkingInto(BlockState state) { || block == Blocks.MAGMA_BLOCK || block == Blocks.CACTUS || block == Blocks.SWEET_BERRY_BUSH - || block instanceof BaseFireBlock || block instanceof AbstractFireBlock || block == Blocks.END_PORTAL || block == Blocks.COBWEB diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index f473b4cf8..828cb0874 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -850,14 +850,14 @@ private List approxPlaceable(int size) { BlockState itemState = ((BlockItem) stack.getItem()) .getBlock() .getStateForPlacement( - new BlockItemUseOnContext( - new ItemUseContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockRayTraceResult(new Vector3d(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {} + new BlockItemUseContext( + new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vector3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {} ) ); if (itemState != null) { result.add(itemState); } else { - result.add(Blocks.AIR.defaultBlockState()); + result.add(Blocks.AIR.getDefaultState()); } // } From ad40a9225e18559e1ec71571f14040f914df8853 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 3 May 2022 23:25:01 +0200 Subject: [PATCH 289/935] Fix leaking incorrect positions It was only cleared when the previous one was canceled, not when it was directly replaced by the next one. --- src/main/java/baritone/process/BuilderProcess.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index e3ff4fbd9..1766af623 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -108,6 +108,7 @@ public void build(String name, ISchematic schematic, Vec3i origin) { this.layer = Baritone.settings().startAtLayer.value; this.numRepeats = 0; this.observedCompleted = new LongOpenHashSet(); + this.incorrectPositions = null; } public void resume() { From 221eba11dd1d41d523e2e2b9603bf4a75055f148 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 20 May 2022 01:31:09 +0200 Subject: [PATCH 290/935] Deal with others replacing the chat gui --- src/api/java/baritone/api/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index e488a9199..897182898 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1124,7 +1124,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ - public final Setting> logger = new Setting<>(Minecraft.getMinecraft().ingameGUI.getChatGUI()::printChatMessage); + public final Setting> logger = new Setting<>(msg -> Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(msg)); /** * The function that is called when Baritone will send a desktop notification. This function can be added to From 9e021d2875f2fd85b48b5a46e97b1c995b1f44b1 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 31 May 2022 02:38:55 -0600 Subject: [PATCH 291/935] 1.19 --- build.gradle | 8 ++--- common/build.gradle | 2 +- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 6 ++-- settings.gradle | 2 +- src/api/java/baritone/api/Settings.java | 2 -- .../api/command/helpers/Paginator.java | 15 ++++---- .../baritone/api/utils/BlockOptionalMeta.java | 3 +- src/api/java/baritone/api/utils/Helper.java | 19 +++++----- .../launch/mixins/MixinChunkArray.java | 19 ++++++---- .../mixins/MixinClientPlayerEntity.java | 7 ++-- .../launch/mixins/MixinItemStack.java | 2 +- src/launch/resources/mixins.baritone.json | 4 +-- .../baritone/behavior/PathingBehavior.java | 6 ++-- src/main/java/baritone/cache/ChunkPacker.java | 3 +- .../command/ExampleBaritoneControl.java | 10 +++--- .../command/defaults/HelpCommand.java | 16 +++++---- .../command/defaults/RenderCommand.java | 2 +- .../baritone/command/defaults/SetCommand.java | 16 ++++----- .../command/defaults/WaypointsCommand.java | 36 +++++++++---------- src/main/java/baritone/utils/GuiClick.java | 9 ++--- .../baritone/utils/PlayerMovementInput.java | 2 +- .../baritone/utils/pathing/Avoidance.java | 2 +- .../utils/player/PrimaryPlayerController.java | 4 +-- tweaker/build.gradle | 10 +++--- 25 files changed, 105 insertions(+), 102 deletions(-) diff --git a/build.gradle b/build.gradle index 6dcf43f09..35e59aac1 100755 --- a/build.gradle +++ b/build.gradle @@ -16,12 +16,8 @@ */ plugins { - id "architectury-plugin" version "3.4.131" - id 'dev.architectury.loom' version '0.11.0.254' apply false -} - -architectury { - minecraft = rootProject.minecraft_version + id "architectury-plugin" version "3.4-SNAPSHOT" + id 'dev.architectury.loom' version '0.12.0-SNAPSHOT' apply false } subprojects { diff --git a/common/build.gradle b/common/build.gradle index 17efe7ea2..d23ecf6fd 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -3,7 +3,7 @@ import baritone.gradle.task.ProguardTask architectury { injectInjectables = false - common() + common("fabric") } //loom { diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 83832127e..88b46e8ad 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.18.x" + "minecraft": "1.19-beta.4" } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 77cfe8cf6..3092b4eba 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,12 @@ org.gradle.jvmargs=-Xmx2048M -mod_version=1.8.3 +mod_version=1.9.0 maven_group=baritone archives_base_name=baritone -minecraft_version=1.18.2 +minecraft_version=1.19-pre4 forge_version=1.18.2-40.0.0 -fabric_version=0.13.1 +fabric_version=0.13.3 # # un comment for forge debugging default (as opposed to fabric) # baritone.forge_build=true diff --git a/settings.gradle b/settings.gradle index 79018ad7c..eadb7a6a5 100755 --- a/settings.gradle +++ b/settings.gradle @@ -43,6 +43,6 @@ pluginManagement { rootProject.name = 'baritone' include("fabric") -include("forge") +//include("forge") include("common") include("tweaker") diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 9c80bab99..9e08e52a8 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -23,9 +23,7 @@ import baritone.api.utils.gui.BaritoneToast; import net.minecraft.client.Minecraft; import net.minecraft.core.Vec3i; -import net.minecraft.network.chat.BaseComponent; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextComponent; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index e2100e95d..4d4e3299c 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -21,15 +21,16 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.utils.Helper; + +import java.awt.*; import java.util.Arrays; import java.util.List; import java.util.function.Function; import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.BaseComponent; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.MutableComponent; public class Paginator implements Helper { @@ -74,7 +75,7 @@ public void display(Function transform, String commandPrefix) { } boolean hasPrevPage = commandPrefix != null && validPage(page - 1); boolean hasNextPage = commandPrefix != null && validPage(page + 1); - BaseComponent prevPageComponent = new TextComponent("<<"); + MutableComponent prevPageComponent = Component.literal("<<"); if (hasPrevPage) { prevPageComponent.setStyle(prevPageComponent.getStyle() .withClickEvent(new ClickEvent( @@ -83,12 +84,12 @@ public void display(Function transform, String commandPrefix) { )) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new TextComponent("Click to view previous page") + Component.literal("Click to view previous page") ))); } else { prevPageComponent.setStyle(prevPageComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); } - BaseComponent nextPageComponent = new TextComponent(">>"); + MutableComponent nextPageComponent = Component.literal(">>"); if (hasNextPage) { nextPageComponent.setStyle(nextPageComponent.getStyle() .withClickEvent(new ClickEvent( @@ -97,12 +98,12 @@ public void display(Function transform, String commandPrefix) { )) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new TextComponent("Click to view next page") + Component.literal("Click to view next page") ))); } else { nextPageComponent.setStyle(nextPageComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); } - BaseComponent pagerComponent = new TextComponent(""); + MutableComponent pagerComponent = Component.literal(""); pagerComponent.setStyle(pagerComponent.getStyle().withColor(ChatFormatting.GRAY)); pagerComponent.append(prevPageComponent); pagerComponent.append(" | "); diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index d18936bf7..dfc27e664 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -29,6 +29,7 @@ import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.ServerPacksSource; import net.minecraft.server.packs.resources.ReloadableResourceManager; +import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -173,7 +174,7 @@ private static synchronized List drops(Block b) { // the other overload for generate doesnt work in forge because forge adds code that requires a non null world getManager().get(lootTableLocation).getRandomItems( new LootContext.Builder((ServerLevel) null) - .withRandom(new Random()) + .withRandom(RandomSource.create()) .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index abe1c3854..7e3c44607 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -21,9 +21,10 @@ import baritone.api.utils.gui.BaritoneToast; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.network.chat.BaseComponent; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.MutableComponent; + +import java.awt.*; import java.util.Arrays; import java.util.Calendar; import java.util.stream.Stream; @@ -51,11 +52,11 @@ static Component getPrefix() { // Inner text component final Calendar now = Calendar.getInstance(); final boolean xd = now.get(Calendar.MONTH) == Calendar.APRIL && now.get(Calendar.DAY_OF_MONTH) <= 3; - BaseComponent baritone = new TextComponent(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); + MutableComponent baritone = Component.literal(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); baritone.setStyle(baritone.getStyle().withColor(ChatFormatting.LIGHT_PURPLE)); // Outer brackets - BaseComponent prefix = new TextComponent(""); + MutableComponent prefix = Component.literal(""); prefix.setStyle(baritone.getStyle().withColor(ChatFormatting.DARK_PURPLE)); prefix.append("["); prefix.append(baritone); @@ -81,7 +82,7 @@ default void logToast(Component title, Component message) { * @param message The message to display in the popup */ default void logToast(String title, String message) { - logToast(new TextComponent(title), new TextComponent(message)); + logToast(Component.literal(title), Component.literal(message)); } /** @@ -90,7 +91,7 @@ default void logToast(String title, String message) { * @param message The message to display in the popup */ default void logToast(String message) { - logToast(Helper.getPrefix(), new TextComponent(message)); + logToast(Helper.getPrefix(), Component.literal(message)); } /** @@ -158,9 +159,9 @@ default void logDebug(String message) { * @param components The components to send */ default void logDirect(boolean logAsToast, Component... components) { - BaseComponent component = new TextComponent(""); + MutableComponent component = Component.literal(""); component.append(getPrefix()); - component.append(new TextComponent(" ")); + component.append(Component.literal(" ")); Arrays.asList(components).forEach(component::append); if (logAsToast) { logToast(getPrefix(), component); @@ -188,7 +189,7 @@ default void logDirect(Component... components) { */ default void logDirect(String message, ChatFormatting color, boolean logAsToast) { Stream.of(message.split("\n")).forEach(line -> { - BaseComponent component = new TextComponent(line.replace("\t", " ")); + MutableComponent component = Component.literal(line.replace("\t", " ")); component.setStyle(component.getStyle().withColor(color)); logDirect(logAsToast, component); }); diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java index a40fe4d31..711ca6554 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java @@ -18,6 +18,7 @@ package baritone.launch.mixins; import baritone.utils.accessor.IChunkArray; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -27,24 +28,28 @@ @Mixin(targets = "net.minecraft.client.multiplayer.ClientChunkCache$Storage") public abstract class MixinChunkArray implements IChunkArray { + @Final @Shadow - private AtomicReferenceArray chunks; + AtomicReferenceArray chunks; + @Final @Shadow - private int chunkRadius; + int chunkRadius; + + @Final @Shadow private int viewRange; @Shadow - private int viewCenterX; + int viewCenterX; @Shadow - private int viewCenterZ; + int viewCenterZ; @Shadow - private int chunkCount; + int chunkCount; @Shadow - protected abstract boolean inRange(int x, int z); + abstract boolean inRange(int x, int z); @Shadow - protected abstract int getIndex(int x, int z); + abstract int getIndex(int x, int z); @Shadow protected abstract void replace(int index, LevelChunk chunk); diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index c87875810..89fceadd3 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -26,6 +26,7 @@ import baritone.behavior.LookBehavior; import net.minecraft.client.KeyMapping; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Abilities; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -41,12 +42,12 @@ public class MixinClientPlayerEntity { @Inject( - method = "chat", + method = "chat(Ljava/lang/String;Lnet/minecraft/network/chat/Component;)V", at = @At("HEAD"), cancellable = true ) - private void sendChatMessage(String msg, CallbackInfo ci) { - ChatEvent event = new ChatEvent(msg); + private void sendChatMessage(String string, Component component, CallbackInfo ci) { + ChatEvent event = new ChatEvent(string); IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone == null) { return; diff --git a/src/launch/java/baritone/launch/mixins/MixinItemStack.java b/src/launch/java/baritone/launch/mixins/MixinItemStack.java index e4d336d7a..906221bee 100644 --- a/src/launch/java/baritone/launch/mixins/MixinItemStack.java +++ b/src/launch/java/baritone/launch/mixins/MixinItemStack.java @@ -39,7 +39,7 @@ public abstract class MixinItemStack implements IItemStack { private int baritoneHash; @Shadow - protected abstract int getDamageValue(); + public abstract int getDamageValue(); private void recalculateHash() { baritoneHash = item == null ? -1 : item.hashCode() + getDamageValue(); diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 7b32bcd00..4b9ea4c91 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -1,11 +1,11 @@ { "required": true, "package": "baritone.launch.mixins", - "refmap": "baritone-common-refmap.json", "compatibilityLevel": "JAVA_17", "verbose": false, "injectors": { - "maxShiftBy": 2 + "maxShiftBy": 2, + "defaultRequire": 1 }, "client": [ "MixinChunkArray", diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 0082fdcf8..87b4ed518 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -237,11 +237,11 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { if (current != null) { switch (event.getState()) { case PRE: - lastAutoJump = mc.options.autoJump; - mc.options.autoJump = false; + lastAutoJump = mc.options.autoJump().get(); + mc.options.autoJump().set(false); break; case POST: - mc.options.autoJump = lastAutoJump; + mc.options.autoJump().set(lastAutoJump); break; default: break; diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 5af928c92..471809761 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -31,6 +31,7 @@ import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.PalettedContainer; +import net.minecraft.world.level.dimension.BuiltinDimensionTypes; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.phys.Vec3; import java.util.*; @@ -171,7 +172,7 @@ public static BlockState pathingTypeToBlock(PathingBlockType type, DimensionType if (dimension.ultraWarm()) { return Blocks.NETHERRACK.defaultBlockState(); } - if (dimension.createDragonFight()) { + if (dimension.effectsLocation().equals(BuiltinDimensionTypes.END_EFFECTS)) { return Blocks.END_STONE.defaultBlockState(); } default: diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index 8ca31e3df..c3c6648fe 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -35,10 +35,8 @@ import baritone.command.manager.CommandManager; import baritone.utils.accessor.IGuiScreen; import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.BaseComponent; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.*; +import net.minecraft.network.chat.MutableComponent; import net.minecraft.util.Tuple; import java.net.URI; import java.net.URISyntaxException; @@ -78,12 +76,12 @@ private void logRanCommand(String command, String rest) { if (settings.echoCommands.value) { String msg = command + rest; String toDisplay = settings.censorRanCommands.value ? command + " ..." : msg; - BaseComponent component = new TextComponent(String.format("> %s", toDisplay)); + MutableComponent component = Component.literal(String.format("> %s", toDisplay)); component.setStyle(component.getStyle() .withColor(ChatFormatting.WHITE) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new TextComponent("Click to rerun command") + Component.literal("Click to rerun command") )) .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index f111b4476..822884b09 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -25,16 +25,18 @@ import baritone.api.command.exception.CommandNotFoundException; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; + +import java.awt.*; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.BaseComponent; import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.MutableComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; @@ -58,17 +60,17 @@ public void execute(String label, IArgConsumer args) throws CommandException { command -> { String names = String.join("/", command.getNames()); String name = command.getNames().get(0); - TextComponent shortDescComponent = new TextComponent(" - " + command.getShortDesc()); + MutableComponent shortDescComponent = Component.literal(" - " + command.getShortDesc()); shortDescComponent.setStyle(shortDescComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); - TextComponent namesComponent = new TextComponent(names); + MutableComponent namesComponent = Component.literal(names); namesComponent.setStyle(namesComponent.getStyle().withColor(ChatFormatting.WHITE)); - TextComponent hoverComponent = new TextComponent(""); + MutableComponent hoverComponent = Component.literal(""); hoverComponent.setStyle(hoverComponent.getStyle().withColor(ChatFormatting.GRAY)); hoverComponent.append(namesComponent); hoverComponent.append("\n" + command.getShortDesc()); hoverComponent.append("\n\nClick to view full help"); String clickCommand = FORCE_COMMAND_PREFIX + String.format("%s %s", label, command.getNames().get(0)); - TextComponent component = new TextComponent(name); + MutableComponent component = Component.literal(name); component.setStyle(component.getStyle().withColor(ChatFormatting.GRAY)); component.append(shortDescComponent); component.setStyle(component.getStyle() @@ -88,7 +90,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect(""); command.getLongDesc().forEach(this::logDirect); logDirect(""); - BaseComponent returnComponent = new TextComponent("Click to return to the help menu"); + MutableComponent returnComponent = Component.literal("Click to return to the help menu"); returnComponent.setStyle(returnComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + label diff --git a/src/main/java/baritone/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java index 2bbfa87cd..39dc6ea7c 100644 --- a/src/main/java/baritone/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -37,7 +37,7 @@ public RenderCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); BetterBlockPos origin = ctx.playerFeet(); - int renderDistance = (mc.options.renderDistance + 1) * 16; + int renderDistance = (mc.options.renderDistance().get() + 1) * 16; mc.levelRenderer.setBlocksDirty( origin.x - renderDistance, 0, diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 05a1982e1..29e443005 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -34,10 +34,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.BaseComponent; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.*; +import net.minecraft.network.chat.MutableComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; import static baritone.api.utils.SettingsUtil.*; @@ -77,19 +75,19 @@ public void execute(String label, IArgConsumer args) throws CommandException { : String.format("All %ssettings:", viewModified ? "modified " : "") ), setting -> { - TextComponent typeComponent = new TextComponent(String.format( + MutableComponent typeComponent = Component.literal(String.format( " (%s)", settingTypeToString(setting) )); typeComponent.getStyle().withColor(ChatFormatting.DARK_GRAY); - TextComponent hoverComponent = new TextComponent(""); + MutableComponent hoverComponent = Component.literal(""); hoverComponent.getStyle().withColor(ChatFormatting.GRAY); hoverComponent.append(setting.getName()); hoverComponent.append(String.format("\nType: %s", settingTypeToString(setting))); hoverComponent.append(String.format("\n\nValue:\n%s", settingValueToString(setting))); hoverComponent.append(String.format("\n\nDefault Value:\n%s", settingDefaultToString(setting))); String commandSuggestion = Baritone.settings().prefix.value + String.format("set %s ", setting.getName()); - TextComponent component = new TextComponent(setting.getName()); + MutableComponent component = Component.literal(setting.getName()); component.setStyle(component.getStyle().withColor(ChatFormatting.GRAY)); component.append(typeComponent); component.setStyle(component.getStyle() @@ -169,12 +167,12 @@ public void execute(String label, IArgConsumer args) throws CommandException { settingValueToString(setting) )); } - BaseComponent oldValueComponent = new TextComponent(String.format("Old value: %s", oldValue)); + MutableComponent oldValueComponent = Component.literal(String.format("Old value: %s", oldValue)); oldValueComponent.setStyle(oldValueComponent.getStyle() .withColor(ChatFormatting.GRAY) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new TextComponent("Click to set the setting back to this value") + Component.literal("Click to set the setting back to this value") )) .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index adc455067..09c33dade 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -40,11 +40,11 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.MutableComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; @@ -63,13 +63,13 @@ public void execute(String label, IArgConsumer args) throws CommandException { throw new CommandInvalidTypeException(args.consumed(), "an action"); } BiFunction toComponent = (waypoint, _action) -> { - BaseComponent component = new TextComponent(""); - BaseComponent tagComponent = new TextComponent(waypoint.getTag().name() + " "); + MutableComponent component = Component.literal(""); + MutableComponent tagComponent = Component.literal(waypoint.getTag().name() + " "); tagComponent.setStyle(tagComponent.getStyle().withColor(ChatFormatting.GRAY)); String name = waypoint.getName(); - BaseComponent nameComponent = new TextComponent(!name.isEmpty() ? name : ""); + MutableComponent nameComponent = Component.literal(!name.isEmpty() ? name : ""); nameComponent.setStyle(nameComponent.getStyle().withColor(!name.isEmpty() ? ChatFormatting.GRAY : ChatFormatting.DARK_GRAY)); - BaseComponent timestamp = new TextComponent(" @ " + new Date(waypoint.getCreationTimestamp())); + MutableComponent timestamp = Component.literal(" @ " + new Date(waypoint.getCreationTimestamp())); timestamp.setStyle(timestamp.getStyle().withColor(ChatFormatting.DARK_GRAY)); component.append(tagComponent); component.append(nameComponent); @@ -77,7 +77,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { component.setStyle(component.getStyle() .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new TextComponent("Click to select") + Component.literal("Click to select") )) .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, @@ -143,7 +143,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); IWaypoint waypoint = new Waypoint(name, tag, pos); ForWaypoints.waypoints(this.baritone).addWaypoint(waypoint); - BaseComponent component = new TextComponent("Waypoint added: "); + MutableComponent component = Component.literal("Waypoint added: "); component.setStyle(component.getStyle().withColor(ChatFormatting.GRAY)); component.append(toComponent.apply(waypoint, Action.INFO)); logDirect(component); @@ -155,8 +155,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint); } deletedWaypoints.computeIfAbsent(baritone.getWorldProvider().getCurrentWorld(), k -> new ArrayList<>()).addAll(Arrays.asList(waypoints)); - TextComponent textComponent = new TextComponent(String.format("Cleared %d waypoints, click to restore them", waypoints.length)); - textComponent.getStyle().withClickEvent(new ClickEvent( + MutableComponent MutableComponent = Component.literal(String.format("Cleared %d waypoints, click to restore them", waypoints.length)); + MutableComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s restore @ %s", @@ -165,7 +165,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { Stream.of(waypoints).map(wp -> Long.toString(wp.getCreationTimestamp())).collect(Collectors.joining(" ")) ) )); - logDirect(textComponent); + logDirect(MutableComponent); } else if (action == Action.RESTORE) { List waypoints = new ArrayList<>(); List deletedWaypoints = this.deletedWaypoints.getOrDefault(baritone.getWorldProvider().getCurrentWorld(), Collections.emptyList()); @@ -236,7 +236,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == Action.INFO) { logDirect(transform.apply(waypoint)); logDirect(String.format("Position: %s", waypoint.getLocation())); - BaseComponent deleteComponent = new TextComponent("Click to delete this waypoint"); + MutableComponent deleteComponent = Component.literal("Click to delete this waypoint"); deleteComponent.setStyle(deleteComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( @@ -247,7 +247,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getCreationTimestamp() ) ))); - BaseComponent goalComponent = new TextComponent("Click to set goal to this waypoint"); + MutableComponent goalComponent = Component.literal("Click to set goal to this waypoint"); goalComponent.setStyle(goalComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( @@ -258,7 +258,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getCreationTimestamp() ) ))); - BaseComponent recreateComponent = new TextComponent("Click to show a command to recreate this waypoint"); + MutableComponent recreateComponent = Component.literal("Click to show a command to recreate this waypoint"); recreateComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.SUGGEST_COMMAND, String.format( @@ -272,7 +272,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getLocation().z ) )); - BaseComponent backComponent = new TextComponent("Click to return to the waypoints list"); + MutableComponent backComponent = Component.literal("Click to return to the waypoints list"); backComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( @@ -288,8 +288,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { } else if (action == Action.DELETE) { ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint); deletedWaypoints.computeIfAbsent(baritone.getWorldProvider().getCurrentWorld(), k -> new ArrayList<>()).add(waypoint); - TextComponent textComponent = new TextComponent("That waypoint has successfully been deleted, click to restore it"); - textComponent.getStyle().withClickEvent(new ClickEvent( + MutableComponent MutableComponent = Component.literal("That waypoint has successfully been deleted, click to restore it"); + MutableComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s restore @ %s", @@ -298,7 +298,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getCreationTimestamp() ) )); - logDirect(textComponent); + logDirect(MutableComponent); } else if (action == Action.GOAL) { Goal goal = new GoalBlock(waypoint.getLocation()); baritone.getCustomGoalProcess().setGoal(goal); diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 70fd84689..f5dd500a7 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -30,15 +30,16 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.TextComponent; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.ClipContext; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; + import java.awt.*; import java.util.Collections; @@ -53,7 +54,7 @@ public class GuiClick extends Screen implements Helper { private BlockPos currentMouseOver; public GuiClick() { - super(new TextComponent("CLICK")); + super(Component.literal("CLICK")); } @Override @@ -90,7 +91,7 @@ public boolean mouseReleased(double mouseX, double mouseY, int mouseButton) { if (clickStart != null && !clickStart.equals(currentMouseOver)) { BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().removeAllSelections(); BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().addSelection(BetterBlockPos.from(clickStart), BetterBlockPos.from(currentMouseOver)); - BaseComponent component = new TextComponent("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); + MutableComponent component = Component.literal("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); component.getStyle() .withColor(ChatFormatting.WHITE) .withClickEvent(new ClickEvent( diff --git a/src/main/java/baritone/utils/PlayerMovementInput.java b/src/main/java/baritone/utils/PlayerMovementInput.java index 854680233..f8c9bbe21 100644 --- a/src/main/java/baritone/utils/PlayerMovementInput.java +++ b/src/main/java/baritone/utils/PlayerMovementInput.java @@ -28,7 +28,7 @@ public class PlayerMovementInput extends net.minecraft.client.player.Input { } @Override - public void tick(boolean p_225607_1_) { + public void tick(boolean p_225607_1_, float f) { this.leftImpulse = 0.0F; this.forwardImpulse = 0.0F; diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index 477ddf1ea..0b4b95843 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -73,7 +73,7 @@ public static List create(IPlayerContext ctx) { if (mobCoeff != 1.0D) { ctx.entitiesStream() .filter(entity -> entity instanceof Mob) - .filter(entity -> (!(entity instanceof Spider)) || ctx.player().getBrightness() < 0.5) + .filter(entity -> (!(entity instanceof Spider)) || ctx.player().getLightLevelDependentMagicValue() < 0.5) .filter(entity -> !(entity instanceof ZombifiedPiglin) || ((ZombifiedPiglin) entity).getLastHurtByMob() != null) .filter(entity -> !(entity instanceof EnderMan) || ((EnderMan) entity).isCreepy()) .forEach(entity -> res.add(new Avoidance(entity.blockPosition(), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index bd91dc68b..4aee8c567 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -76,12 +76,12 @@ public GameType getGameType() { @Override public InteractionResult processRightClickBlock(LocalPlayer player, Level world, InteractionHand hand, BlockHitResult result) { // primaryplayercontroller is always in a ClientWorld so this is ok - return mc.gameMode.useItemOn(player, (ClientLevel) world, hand, result); + return mc.gameMode.useItemOn(player, hand, result); } @Override public InteractionResult processRightClick(LocalPlayer player, Level world, InteractionHand hand) { - return mc.gameMode.useItem(player, world, hand); + return mc.gameMode.useItem(player, hand); } @Override diff --git a/tweaker/build.gradle b/tweaker/build.gradle index cb76d7a4d..17982028d 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -5,11 +5,11 @@ architectury { injectInjectables = false } -loom { - mixin { - legacyRemapToNamespace = "official" - } -} +//loom { +// mixin { +// legacyRemapToNamespace = "official" +// } +//} // ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts sourceSets { From 3df451677cf9b931db41fb6cc00b09f1355d532e Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 31 May 2022 02:42:17 -0600 Subject: [PATCH 292/935] use loom 11 to allow building --- build.gradle | 2 +- tweaker/build.gradle | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 35e59aac1..28602f284 100755 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id 'dev.architectury.loom' version '0.12.0-SNAPSHOT' apply false + id 'dev.architectury.loom' version '0.11.0-SNAPSHOT' apply false } subprojects { diff --git a/tweaker/build.gradle b/tweaker/build.gradle index 17982028d..cb76d7a4d 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -5,11 +5,11 @@ architectury { injectInjectables = false } -//loom { -// mixin { -// legacyRemapToNamespace = "official" -// } -//} +loom { + mixin { + legacyRemapToNamespace = "official" + } +} // ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts sourceSets { From 56b44496bff9f65717cf1867a5c028e69514bf46 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 31 May 2022 03:03:43 -0600 Subject: [PATCH 293/935] verify fabric/tweaker builds are valid --- build.gradle | 2 +- src/launch/resources/mixins.baritone.json | 1 + tweaker/build.gradle | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 28602f284..d1602a579 100755 --- a/build.gradle +++ b/build.gradle @@ -46,7 +46,7 @@ subprojects { tasks.withType(JavaCompile).configureEach { it.options.encoding = "UTF-8" - def targetVersion = 16 + def targetVersion = 17 if (JavaVersion.current().isJava9Compatible()) { it.options.release = targetVersion } diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 4b9ea4c91..eb461292f 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -2,6 +2,7 @@ "required": true, "package": "baritone.launch.mixins", "compatibilityLevel": "JAVA_17", + "refmap": "baritone-common-refmap.json", "verbose": false, "injectors": { "maxShiftBy": 2, diff --git a/tweaker/build.gradle b/tweaker/build.gradle index cb76d7a4d..f6b114841 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -8,6 +8,7 @@ architectury { loom { mixin { legacyRemapToNamespace = "official" + defaultRefmapName = "baritone-common-refmap.json" } } From af1eb58bb87cbb7ce38e01a6fcf96def3222850c Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Tue, 31 May 2022 14:43:58 +0100 Subject: [PATCH 294/935] Implement Leijurv's precomputed data idea --- src/api/java/baritone/api/Settings.java | 6 + .../api/event/events/SettingChangedEvent.java | 33 +++ .../listener/AbstractGameEventListener.java | 3 + .../event/listener/IGameEventListener.java | 7 + .../java/baritone/api/utils/SettingsUtil.java | 4 +- .../baritone/behavior/PathingBehavior.java | 17 +- .../baritone/command/defaults/SetCommand.java | 3 +- .../java/baritone/event/GameEventHandler.java | 5 + .../pathing/movement/CalculationContext.java | 8 +- .../pathing/movement/MovementHelper.java | 3 + .../movement/movements/MovementAscend.java | 4 +- .../movement/movements/MovementDescend.java | 12 +- .../movement/movements/MovementDiagonal.java | 30 +-- .../movement/movements/MovementDownward.java | 2 +- .../movement/movements/MovementParkour.java | 6 +- .../movement/movements/MovementPillar.java | 2 +- .../movement/movements/MovementTraverse.java | 2 +- .../baritone/pathing/path/PathExecutor.java | 2 +- .../pathing/precompute/PrecomputedData.java | 237 ++++++++++++++++++ .../PrecomputedDataForBlockState.java | 71 ++++++ .../java/baritone/process/BuilderProcess.java | 3 +- .../baritone/process/GetToBlockProcess.java | 2 +- .../java/baritone/process/MineProcess.java | 2 +- 23 files changed, 422 insertions(+), 42 deletions(-) create mode 100644 src/api/java/baritone/api/event/events/SettingChangedEvent.java create mode 100644 src/main/java/baritone/pathing/precompute/PrecomputedData.java create mode 100644 src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 897182898..1ce87c681 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -17,6 +17,7 @@ package baritone.api; +import baritone.api.event.events.SettingChangedEvent; import baritone.api.utils.NotificationHelper; import baritone.api.utils.SettingsUtil; import baritone.api.utils.TypeUtils; @@ -1302,6 +1303,11 @@ public final T get() { return value; } + public void set(T value) { + this.value = value; + BaritoneAPI.getProvider().getAllBaritones().forEach(iBaritone -> iBaritone.getGameEventHandler().onSettingChanged(new SettingChangedEvent(this))); + } + public final String getName() { return name; } diff --git a/src/api/java/baritone/api/event/events/SettingChangedEvent.java b/src/api/java/baritone/api/event/events/SettingChangedEvent.java new file mode 100644 index 000000000..d92384e03 --- /dev/null +++ b/src/api/java/baritone/api/event/events/SettingChangedEvent.java @@ -0,0 +1,33 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.Settings; + +public class SettingChangedEvent { + + private final Settings.Setting setting; + + public SettingChangedEvent(Settings.Setting setting) { + this.setting = setting; + } + + public Settings.Setting getSetting() { + return setting; + } +} diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index 9eac8de46..9f1d2418a 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -71,4 +71,7 @@ default void onPlayerDeath() {} @Override default void onPathEvent(PathEvent event) {} + + @Override + default void onSettingChanged(SettingChangedEvent event) {} } diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index b074e978b..28afdfffe 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -144,4 +144,11 @@ public interface IGameEventListener { * @param event The event */ void onPathEvent(PathEvent event); + + /** + * When the player changes a setting + * + * @param event The event + */ + void onSettingChanged(SettingChangedEvent event); } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 0e95965f9..b098c1e0f 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -176,7 +176,7 @@ public static String settingToString(Settings.Setting setting) throws IllegalSta /** * This should always be the same as whether the setting can be parsed from or serialized to a string * - * @param the setting + * @param setting The Setting * @return true if the setting can not be set or read by the user */ public static boolean javaOnlySetting(Settings.Setting setting) { @@ -199,7 +199,7 @@ public static void parseAndApply(Settings settings, String settingName, String s if (!intendedType.isInstance(parsed)) { throw new IllegalStateException(ioMethod + " parser returned incorrect type, expected " + intendedType + " got " + parsed + " which is " + parsed.getClass()); } - setting.value = parsed; + setting.set(parsed); } private interface ISettingParser { diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index f9c56c5a4..50e2a0c2e 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -33,6 +33,7 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; import baritone.pathing.path.PathExecutor; +import baritone.pathing.precompute.PrecomputedData; import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.pathing.Favoring; @@ -74,8 +75,11 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, private final LinkedBlockingQueue toDispatch = new LinkedBlockingQueue<>(); + public PrecomputedData precomputedData; + public PathingBehavior(Baritone baritone) { super(baritone); + precomputedData = new PrecomputedData(); } private void queuePathEvent(PathEvent event) { @@ -259,7 +263,7 @@ public boolean secretInternalSetGoalAndPath(PathingCommand command) { if (command instanceof PathingCommandContext) { context = ((PathingCommandContext) command).desiredCalcContext; } else { - context = new CalculationContext(baritone, true); + context = new CalculationContext(baritone, true, precomputedData); } if (goal == null) { return false; @@ -418,7 +422,7 @@ private void resetEstimatedTicksToGoal(BetterBlockPos start) { */ public BetterBlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); - if (!MovementHelper.canWalkOn(ctx, feet.down())) { + if (!precomputedData.canWalkOn(ctx, feet.down())) { if (ctx.player().onGround) { double playerX = ctx.player().posX; double playerZ = ctx.player().posZ; @@ -437,7 +441,7 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class // can't possibly be sneaking off of this one, we're too far away continue; } - if (MovementHelper.canWalkOn(ctx, possibleSupport.down()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.up())) { + if (precomputedData.canWalkOn(ctx, possibleSupport.down()) && precomputedData.canWalkThrough(ctx, possibleSupport) && context.precomputedData.canWalkThrough(ctx, possibleSupport.up())) { // this is plausible //logDebug("Faking path start assuming player is standing off the edge of a block"); return possibleSupport; @@ -447,7 +451,7 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class } else { // !onGround // we're in the middle of a jump - if (MovementHelper.canWalkOn(ctx, feet.down().down())) { + if (precomputedData.canWalkOn(ctx, feet.down().down())) { //logDebug("Faking path start assuming player is midair and falling"); return feet.down(); } @@ -456,6 +460,11 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class return feet; } + @Override + public void onSettingChanged(SettingChangedEvent event) { + this.precomputedData.refresh(); + } + /** * In a new thread, pathfind to target blockpos * diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index e9e35d413..1b395f5a9 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -147,7 +147,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { throw new CommandInvalidTypeException(args.consumed(), "a toggleable setting", "some other setting"); } //noinspection unchecked - ((Settings.Setting) setting).value ^= true; + Settings.Setting asBoolSetting = (Settings.Setting) setting; + asBoolSetting.set(!asBoolSetting.value); logDirect(String.format( "Toggled setting %s to %s", setting.getName(), diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 8916f7f37..1bdba6b9a 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -156,6 +156,11 @@ public void onPathEvent(PathEvent event) { listeners.forEach(l -> l.onPathEvent(event)); } + @Override + public void onSettingChanged(SettingChangedEvent event) { + listeners.forEach(l -> l.onSettingChanged(event)); + } + @Override public final void registerEventListener(IGameEventListener listener) { this.listeners.add(listener); diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index d5d6c93c8..b4782fb59 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.pathing.movement.ActionCosts; import baritone.cache.WorldData; +import baritone.pathing.precompute.PrecomputedData; import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; import baritone.utils.pathing.BetterWorldBorder; @@ -76,11 +77,14 @@ public class CalculationContext { public final double walkOnWaterOnePenalty; public final BetterWorldBorder worldBorder; + public final PrecomputedData precomputedData; + public CalculationContext(IBaritone baritone) { - this(baritone, false); + this(baritone, false, new PrecomputedData()); } - public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { + public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread, PrecomputedData precomputedData) { + this.precomputedData = precomputedData; this.safeForThreadedUse = forUseOnAnotherThread; this.baritone = baritone; EntityPlayerSP player = baritone.getPlayerContext().player(); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index dd0ddff48..197f10576 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -88,6 +88,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { return canWalkThrough(bsi, x, y, z, bsi.get0(x, y, z)); } + // if changing something in this function remember to also change it in precomputed data static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Block block = state.getBlock(); if (block == Blocks.AIR) { // early return for most common case @@ -285,6 +286,8 @@ static boolean avoidWalkingInto(Block block) { * through? Includes water because we know that we automatically jump on * water * + * If changing something in this function remember to also change it in precomputed data + * * @param bsi Block state provider * @param x The block's x position * @param y The block's y position diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 161ffdacd..bbc09f521 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -68,7 +68,7 @@ protected Set calculateValidPositions() { public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { IBlockState toPlace = context.get(destX, y, destZ); double additionalPlacementCost = 0; - if (!MovementHelper.canWalkOn(context.bsi, destX, y, destZ, toPlace)) { + if (!context.precomputedData.canWalkOn(context.bsi, x, y, z, toPlace)) { additionalPlacementCost = context.costOfPlacingAt(destX, y, destZ, toPlace); if (additionalPlacementCost >= COST_INF) { return COST_INF; @@ -94,7 +94,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } IBlockState srcUp2 = context.get(x, y + 2, z); // used lower down anyway - if (context.get(x, y + 3, z).getBlock() instanceof BlockFalling && (MovementHelper.canWalkThrough(context.bsi, x, y + 1, z) || !(srcUp2.getBlock() instanceof BlockFalling))) {//it would fall on us and possibly suffocate us + if (context.get(x, y + 3, z).getBlock() instanceof BlockFalling && (context.precomputedData.canWalkThrough(context.bsi, x, y + 1, z) || !(srcUp2.getBlock() instanceof BlockFalling))) {//it would fall on us and possibly suffocate us // HOWEVER, we assume that we're standing in the start position // that means that src and src.up(1) are both air // maybe they aren't now, but they will be by the time this starts diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 128d1bf99..d0f7d9b3f 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -101,7 +101,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des //C, D, etc determine the length of the fall IBlockState below = context.get(destX, y - 2, destZ); - if (!MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ, below)) { + if (!context.precomputedData.canWalkOn(context.bsi, destX, y - 2, destZ, below)) { dynamicFallCost(context, x, y, z, destX, destZ, totalCost, below, res); return; } @@ -130,7 +130,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, // and potentially replace the water we're going to fall into return false; } - if (!MovementHelper.canWalkThrough(context.bsi, destX, y - 2, destZ, below)) { + if (!context.precomputedData.canWalkThrough(context.bsi, destX, y - 2, destZ, below)) { return false; } double costSoFar = 0; @@ -146,7 +146,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; if (MovementHelper.isWater(ontoBlock.getBlock())) { - if (!MovementHelper.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { + if (!context.precomputedData.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { return false; } if (context.assumeWalkOnWater) { @@ -155,7 +155,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, if (MovementHelper.isFlowing(destX, newY, destZ, ontoBlock, context.bsi)) { return false; // TODO flowing check required here? } - if (!MovementHelper.canWalkOn(context.bsi, destX, newY - 1, destZ)) { + if (!context.precomputedData.canWalkOn(context.bsi, destX, newY - 1, destZ)) { // we could punch right through the water into something else return false; } @@ -174,10 +174,10 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, effectiveStartHeight = newY; continue; } - if (MovementHelper.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { + if (context.precomputedData.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { continue; } - if (!MovementHelper.canWalkOn(context.bsi, destX, newY, destZ, ontoBlock)) { + if (!context.precomputedData.canWalkOn(context.bsi, destX, newY, destZ, ontoBlock)) { return false; } if (MovementHelper.isBottomSlab(ontoBlock)) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 933c86092..45d319eb6 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -58,9 +58,9 @@ private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPo } @Override - protected boolean safeToCancel(MovementState state) { + protected boolean safeToCancel(MovementState state) { // TODO move this function to use precomputed data, not urgent as it only runs once a tick //too simple. backfill does not work after cornering with this - //return MovementHelper.canWalkOn(ctx, ctx.playerFeet().down()); + //return context.precomputedData.canWalkOn(ctx, ctx.playerFeet().down()); EntityPlayerSP player = ctx.player(); double offset = 0.25; double x = player.posX; @@ -110,24 +110,24 @@ protected Set calculateValidPositions() { } public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { - if (!MovementHelper.canWalkThrough(context.bsi, destX, y + 1, destZ)) { + if (!context.precomputedData.canWalkThrough(context.bsi, destX, y + 1, destZ)) { return; } IBlockState destInto = context.get(destX, y, destZ); boolean ascend = false; IBlockState destWalkOn; boolean descend = false; - if (!MovementHelper.canWalkThrough(context.bsi, destX, y, destZ, destInto)) { + if (!context.precomputedData.canWalkThrough(context.bsi, destX, y, destZ, destInto)) { ascend = true; - if (!context.allowDiagonalAscend || !MovementHelper.canWalkThrough(context.bsi, x, y + 2, z) || !MovementHelper.canWalkOn(context.bsi, destX, y, destZ, destInto) || !MovementHelper.canWalkThrough(context.bsi, destX, y + 2, destZ)) { + if (!context.allowDiagonalAscend || !context.precomputedData.canWalkThrough(context.bsi, x, y + 2, z) || !context.precomputedData.canWalkOn(context.bsi, destX, y, destZ, destInto) || !context.precomputedData.canWalkThrough(context.bsi, destX, y + 2, destZ)) { return; } destWalkOn = destInto; } else { destWalkOn = context.get(destX, y - 1, destZ); - if (!MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn)) { + if (!context.precomputedData.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn)) { descend = true; - if (!context.allowDiagonalDescend || !MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context.bsi, destX, y - 1, destZ, destWalkOn)) { + if (!context.allowDiagonalDescend || !context.precomputedData.canWalkOn(context.bsi, destX, y - 2, destZ) || !context.precomputedData.canWalkThrough(context.bsi, destX, y - 1, destZ, destWalkOn)) { return; } } @@ -169,17 +169,17 @@ public static void cost(CalculationContext context, int x, int y, int z, int des IBlockState pb0 = context.get(x, y, destZ); IBlockState pb2 = context.get(destX, y, z); if (ascend) { - boolean ATop = MovementHelper.canWalkThrough(context.bsi, x, y + 2, destZ); - boolean AMid = MovementHelper.canWalkThrough(context.bsi, x, y + 1, destZ); - boolean ALow = MovementHelper.canWalkThrough(context.bsi, x, y, destZ, pb0); - boolean BTop = MovementHelper.canWalkThrough(context.bsi, destX, y + 2, z); - boolean BMid = MovementHelper.canWalkThrough(context.bsi, destX, y + 1, z); - boolean BLow = MovementHelper.canWalkThrough(context.bsi, destX, y, z, pb2); + boolean ATop = context.precomputedData.canWalkThrough(context.bsi, x, y + 2, destZ); + boolean AMid = context.precomputedData.canWalkThrough(context.bsi, x, y + 1, destZ); + boolean ALow = context.precomputedData.canWalkThrough(context.bsi, x, y, destZ, pb0); + boolean BTop = context.precomputedData.canWalkThrough(context.bsi, destX, y + 2, z); + boolean BMid = context.precomputedData.canWalkThrough(context.bsi, destX, y + 1, z); + boolean BLow = context.precomputedData.canWalkThrough(context.bsi, destX, y, z, pb2); if ((!(ATop && AMid && ALow) && !(BTop && BMid && BLow)) // no option || MovementHelper.avoidWalkingInto(pb0.getBlock()) // bad || MovementHelper.avoidWalkingInto(pb2.getBlock()) // bad - || (ATop && AMid && MovementHelper.canWalkOn(context.bsi, x, y, destZ, pb0)) // we could just ascend - || (BTop && BMid && MovementHelper.canWalkOn(context.bsi, destX, y, z, pb2)) // we could just ascend + || (ATop && AMid && context.precomputedData.canWalkOn(context.bsi, x, y, destZ, pb0)) // we could just ascend + || (BTop && BMid && context.precomputedData.canWalkOn(context.bsi, destX, y, z, pb2)) // we could just ascend || (!ATop && AMid && ALow) // head bonk A || (!BTop && BMid && BLow)) { // head bonk B return; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index da5e3f893..d10a7d269 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -59,7 +59,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (!context.allowDownward) { return COST_INF; } - if (!MovementHelper.canWalkOn(context.bsi, x, y - 2, z)) { + if (!context.precomputedData.canWalkOn(context.bsi, x, y - 2, z)) { return COST_INF; } IBlockState down = context.get(x, y - 1, z); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index e5d17b9ac..07140cf12 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -74,7 +74,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac return; } IBlockState adj = context.get(x + xDiff, y - 1, z + zDiff); - if (MovementHelper.canWalkOn(context.bsi, x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) + if (context.precomputedData.canWalkOn(context.bsi, x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) // second most common case -- we could just traverse not parkour return; } @@ -122,7 +122,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac // check for ascend landing position IBlockState destInto = context.bsi.get0(destX, y, destZ); if (!MovementHelper.fullyPassable(context.bsi.access, context.bsi.isPassableBlockPos.setPos(destX, y, destZ), destInto)) { - if (i <= 3 && context.allowParkourAscend && context.canSprint && MovementHelper.canWalkOn(context.bsi, destX, y, destZ, destInto) && checkOvershootSafety(context.bsi, destX + xDiff, y + 1, destZ + zDiff)) { + if (i <= 3 && context.allowParkourAscend && context.canSprint && context.precomputedData.canWalkOn(context.bsi, destX, y, destZ, destInto) && checkOvershootSafety(context.bsi, destX + xDiff, y + 1, destZ + zDiff)) { res.x = destX; res.y = y + 1; res.z = destZ; @@ -135,7 +135,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac // check for flat landing position IBlockState landingOn = context.bsi.get0(destX, y - 1, destZ); // farmland needs to be canWalkOn otherwise farm can never work at all, but we want to specifically disallow ending a jump on farmland haha - if (landingOn.getBlock() != Blocks.FARMLAND && MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, landingOn)) { + if (landingOn.getBlock() != Blocks.FARMLAND && context.precomputedData.canWalkOn(context.bsi, destX, y - 1, destZ, landingOn)) { if (checkOvershootSafety(context.bsi, destX + xDiff, y, destZ + zDiff)) { res.x = destX; res.y = y; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index b9d599334..bcd420ecc 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -120,7 +120,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { } } // this is commented because it may have had a purpose, but it's very unclear what it was. it's from the minebot era. - //if (!MovementHelper.canWalkOn(chkPos, check) || MovementHelper.canWalkThrough(chkPos, check)) {//if the block above where we want to break is not a full block, don't do it + //if (!context.precomputedData.canWalkOn(chkPos, check) || context.precomputedData.canWalkThrough(chkPos, check)) {//if the block above where we want to break is not a full block, don't do it // TODO why does canWalkThrough mean this action is COST_INF? // BlockFalling makes sense, and !canWalkOn deals with weird cases like if it were lava // but I don't understand why canWalkThrough makes it impossible diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 1ecf0f92c..2afce2f44 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -72,7 +72,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d IBlockState pb1 = context.get(destX, y, destZ); IBlockState destOn = context.get(destX, y - 1, destZ); Block srcDown = context.getBlock(x, y - 1, z); - if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge + if (context.precomputedData.canWalkOn(context.bsi, destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; boolean water = false; if (MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock())) { diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 7e4f76a3b..b28abb618 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -350,7 +350,7 @@ private boolean shouldSprintNextTick() { behavior.baritone.getInputOverrideHandler().setInputForceState(Input.SPRINT, false); // first and foremost, if allowSprint is off, or if we don't have enough hunger, don't try and sprint - if (!new CalculationContext(behavior.baritone).canSprint) { + if (!new CalculationContext(behavior.baritone, false, null).canSprint) { return false; } IMovement current = path.movements().get(pathPosition); diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java new file mode 100644 index 000000000..7531c21ac --- /dev/null +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -0,0 +1,237 @@ +/* + * 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.pathing.precompute; + +import baritone.Baritone; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.IPlayerContext; +import baritone.pathing.movement.MovementHelper; +import baritone.utils.BlockStateInterface; +import net.minecraft.block.*; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; + +import java.util.Optional; + +import static baritone.pathing.movement.MovementHelper.isFlowing; +import static baritone.pathing.movement.MovementHelper.isWater; + +public class PrecomputedData { // TODO add isFullyPassable + + PrecomputedDataForBlockState canWalkOn; + PrecomputedDataForBlockState canWalkThrough; + + public PrecomputedData() { // currently designed for this to be remade on setting change, however that could always be changed + long startTime = System.nanoTime(); + + canWalkOn = new PrecomputedDataForBlockState((state) -> { // this is just copied from the old MovementHelperFunction + Block block = state.getBlock(); + if (block == Blocks.AIR || block == Blocks.MAGMA) { + return Optional.of(false); + } + if (state.isBlockNormalCube()) { + return Optional.of(true); + } + if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this + return Optional.of(true); + } + if (block == Blocks.FARMLAND || block == Blocks.GRASS_PATH) { + return Optional.of(true); + } + if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { + return Optional.of(true); + } + if (isWater(block)) { + return Optional.empty(); + } + if (Baritone.settings().assumeWalkOnLava.value && MovementHelper.isLava(block)) { + return Optional.empty(); + } + + if (block instanceof BlockSlab) { + if (!Baritone.settings().allowWalkOnBottomSlab.value) { + if (((BlockSlab) block).isDouble()) { + return Optional.of(true); + } + return Optional.of(state.getValue(BlockSlab.HALF) != BlockSlab.EnumBlockHalf.BOTTOM); + } + return Optional.of(true); + } + + return Optional.of(block instanceof BlockStairs); + }, (bsi, x, y, z, blockState) -> { // This should just be water or lava, and could probably be made more efficient + Block block = blockState.getBlock(); + if (isWater(block)) { + // since this is called literally millions of times per second, the benefit of not allocating millions of useless "pos.up()" + // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think it's a decrease in readability + Block up = bsi.get0(x, y + 1, z).getBlock(); + if (up == Blocks.WATERLILY || up == Blocks.CARPET) { + return true; + } + if (MovementHelper.isFlowing(x, y, z, blockState, bsi) || block == Blocks.FLOWING_WATER) { + // the only scenario in which we can walk on flowing water is if it's under still water with jesus off + return isWater(up) && !Baritone.settings().assumeWalkOnWater.value; + } + // if assumeWalkOnWater is on, we can only walk on water if there isn't water above it + // if assumeWalkOnWater is off, we can only walk on water if there is water above it + return isWater(up) ^ Baritone.settings().assumeWalkOnWater.value; + } + + if (Baritone.settings().assumeWalkOnLava.value && MovementHelper.isLava(block) && !MovementHelper.isFlowing(x, y, z, blockState, bsi)) { + return true; + } + + return false; // If we don't recognise it then we want to just return false to be safe. + }); + + canWalkThrough = new PrecomputedDataForBlockState((blockState) -> { + Block block = blockState.getBlock(); + + if (block == Blocks.AIR) { + return Optional.of(true); + } + + if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block instanceof BlockTrapDoor || block == Blocks.END_ROD) { + return Optional.of(false); + } + + if (Baritone.settings().blocksToAvoid.value.contains(block)) { + return Optional.of(false); + } + + if (block instanceof BlockDoor || block instanceof BlockFenceGate) { + // Because there's no nice method in vanilla to check if a door is openable or not, we just have to assume + // that anything that isn't an iron door isn't openable, ignoring that some doors introduced in mods can't + // be opened by just interacting. + return Optional.of(block != Blocks.IRON_DOOR); + } + + if (block == Blocks.CARPET) { + return Optional.empty(); + } + + if (block instanceof BlockSnow) { + if (blockState.getValue(BlockSnow.LAYERS) >= 3) { + return Optional.of(false); + } + + return Optional.empty(); + } + + if (block instanceof BlockLiquid) { + if (blockState.getValue(BlockLiquid.LEVEL) != 0) { + return Optional.of(false); + } else { + return Optional.empty(); + } + } + + if (block instanceof BlockCauldron) { + return Optional.of(false); + } + + try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information + return Optional.of(block.isPassable(null, null)); + } catch (NullPointerException exception) { + return Optional.empty(); + } + }, (bsi, x, y, z, blockState) -> { + Block block = blockState.getBlock(); + + if (block == Blocks.CARPET) { + return canWalkOn(bsi, x, y - 1, z); + } + + if (block instanceof BlockSnow) { // TODO see if this case is necessary, shouldn't it also check this somewhere else? + return canWalkOn(bsi, x, y - 1, z); + } + + if (block instanceof BlockLiquid) { + if (isFlowing(x, y, z, blockState, bsi)) { + return false; + } + // Everything after this point has to be a special case as it relies on the water not being flowing, which means a special case is needed. + if (Baritone.settings().assumeWalkOnWater.value) { + return false; + } + + IBlockState up = bsi.get0(x, y + 1, z); + if (up.getBlock() instanceof BlockLiquid || up.getBlock() instanceof BlockLilyPad) { + return false; + } + return block == Blocks.WATER || block == Blocks.FLOWING_WATER; + } + + return block.isPassable(bsi.access, bsi.isPassableBlockPos.setPos(x, y, z)); + }); + + long endTime = System.nanoTime(); + + System.out.println(endTime - startTime); + Thread.dumpStack(); + } + + public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + return canWalkOn.get(bsi, x, y, z, state); + } + + public boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, IBlockState state) { + return canWalkOn(new BlockStateInterface(ctx), pos.x, pos.y, pos.z, state); + } + + public boolean canWalkOn(IPlayerContext ctx, BlockPos pos) { + return canWalkOn(new BlockStateInterface(ctx), pos.getX(), pos.getY(), pos.getZ()); + } + + public boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos) { + return canWalkOn(new BlockStateInterface(ctx), pos.x, pos.y, pos.z); + } + + public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z) { + return canWalkOn(bsi, x, y, z, bsi.get0(x, y, z)); + } + + public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + return false; + } + + public boolean canWalkThrough(IPlayerContext ctx, BetterBlockPos pos) { + return canWalkThrough(new BlockStateInterface(ctx), pos.x, pos.y, pos.z); + } + + public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { + return canWalkThrough(bsi, x, y, z, bsi.get0(x, y, z)); + } + + /** + * Refresh the precomputed data, for use when settings have changed etc. + */ + public void refresh() { + long startTime = System.nanoTime(); + + for (int i = 0; i < 10; i++) { + canWalkThrough.refresh(); + canWalkOn.refresh(); + } + + long endTime = System.nanoTime(); + + System.out.println(endTime - startTime); + } +} diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java b/src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java new file mode 100644 index 000000000..c7a2f67df --- /dev/null +++ b/src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java @@ -0,0 +1,71 @@ +/* + * 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.pathing.precompute; + +import baritone.utils.BlockStateInterface; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.world.IBlockAccess; + +import java.lang.reflect.Array; +import java.util.Optional; +import java.util.function.Function; + +public class PrecomputedDataForBlockState { + boolean[] dataPerBlockState = new boolean[Block.BLOCK_STATE_IDS.size()]; // Has to be of type boolean due to otherwise it has a generic type + boolean[] specialCases = new boolean[Block.BLOCK_STATE_IDS.size()]; // We can also be certain that size will return the highest as it fills in all positions with null until we get to the highest block state + + private final SpecialCaseFunction specialCaseHandler; + private final Function> precomputer; + + public PrecomputedDataForBlockState(Function> precomputer, SpecialCaseFunction specialCaseHandler) { + this.specialCaseHandler = specialCaseHandler; + this.precomputer = precomputer; + + this.refresh(); + } + + public void refresh() { + for (IBlockState state : Block.BLOCK_STATE_IDS) { // state should never be null + Optional applied = precomputer.apply(state); + + int id = Block.BLOCK_STATE_IDS.get(state); + + if (applied.isPresent()) { + dataPerBlockState[id] = applied.get(); + specialCases[id] = false; + } else { + dataPerBlockState[id] = false; + specialCases[id] = true; + } + } + } + + public boolean get(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + int id = Block.BLOCK_STATE_IDS.get(state); + if (specialCases[id]) { + return specialCaseHandler.apply(bsi, x, y, z, state); + } else { + return dataPerBlockState[id]; + } + } + + interface SpecialCaseFunction { + public boolean apply(BlockStateInterface bsi, int x, int y, int z, IBlockState blockState); + } +} diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 1766af623..39c222488 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -38,6 +38,7 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Movement; import baritone.pathing.movement.MovementHelper; +import baritone.pathing.precompute.PrecomputedData; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; @@ -893,7 +894,7 @@ public class BuilderCalculationContext extends CalculationContext { private final int originZ; public BuilderCalculationContext() { - super(BuilderProcess.this.baritone, true); // wew lad + super(BuilderProcess.this.baritone, true, new PrecomputedData()); // wew lad this.placeable = approxPlaceable(9); this.schematic = BuilderProcess.this.schematic; this.originX = origin.getX(); diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 16fc3dda5..2d1e0e985 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -158,7 +158,7 @@ public synchronized boolean blacklistClosest() { public class GetToBlockCalculationContext extends CalculationContext { public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { - super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); + super(GetToBlockProcess.super.baritone, forUseOnAnotherThread, null); } @Override diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 1ec47cd92..988089347 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -111,7 +111,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; List curr = new ArrayList<>(knownOreLocations); if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain - CalculationContext context = new CalculationContext(baritone, true); + CalculationContext context = new CalculationContext(baritone, true, null); // Precomputed data should never be used on this calculation context Baritone.getExecutor().execute(() -> rescan(curr, context)); } if (Baritone.settings().legitMine.value) { From 2dad6262cf045da884cc615fff9466232e9c7688 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Tue, 31 May 2022 14:56:23 +0100 Subject: [PATCH 295/935] Remove some benchmarking and fix loading of settings. --- src/api/java/baritone/api/Settings.java | 4 +++- .../pathing/precompute/PrecomputedData.java | 17 +++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 1ce87c681..fd120585c 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1305,7 +1305,9 @@ public final T get() { public void set(T value) { this.value = value; - BaritoneAPI.getProvider().getAllBaritones().forEach(iBaritone -> iBaritone.getGameEventHandler().onSettingChanged(new SettingChangedEvent(this))); + if (BaritoneAPI.getProvider() != null) { + BaritoneAPI.getProvider().getAllBaritones().forEach(iBaritone -> iBaritone.getGameEventHandler().onSettingChanged(new SettingChangedEvent(this))); + } } public final String getName() { diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 7531c21ac..d354f2d57 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -149,6 +149,7 @@ public PrecomputedData() { // currently designed for this to be remade on settin try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information return Optional.of(block.isPassable(null, null)); } catch (NullPointerException exception) { + System.out.println("Error"); return Optional.empty(); } }, (bsi, x, y, z, blockState) -> { @@ -181,10 +182,6 @@ public PrecomputedData() { // currently designed for this to be remade on settin return block.isPassable(bsi.access, bsi.isPassableBlockPos.setPos(x, y, z)); }); - long endTime = System.nanoTime(); - - System.out.println(endTime - startTime); - Thread.dumpStack(); } public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { @@ -223,15 +220,7 @@ public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { * Refresh the precomputed data, for use when settings have changed etc. */ public void refresh() { - long startTime = System.nanoTime(); - - for (int i = 0; i < 10; i++) { - canWalkThrough.refresh(); - canWalkOn.refresh(); - } - - long endTime = System.nanoTime(); - - System.out.println(endTime - startTime); + canWalkThrough.refresh(); + canWalkOn.refresh(); } } From a6557121a033cce192cbafe91db3d3e641c6970a Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Tue, 31 May 2022 15:08:52 +0100 Subject: [PATCH 296/935] fix github actions compiling. --- .../pathing/precompute/PrecomputedDataForBlockState.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java b/src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java index c7a2f67df..533c54954 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java @@ -23,6 +23,7 @@ import net.minecraft.world.IBlockAccess; import java.lang.reflect.Array; +import java.util.Iterator; import java.util.Optional; import java.util.function.Function; @@ -41,7 +42,8 @@ public PrecomputedDataForBlockState(Function> pre } public void refresh() { - for (IBlockState state : Block.BLOCK_STATE_IDS) { // state should never be null + for (Iterator it = Block.BLOCK_STATE_IDS.iterator(); it.hasNext(); ) { // Can be replaced with an enhanced for because that breaks github actions for some reason I can't be bothered to dig into + IBlockState state = it.next(); // state should never be null Optional applied = precomputer.apply(state); int id = Block.BLOCK_STATE_IDS.get(state); From 9bf40dd60b98f6d0608aef20cec77cb1135edf38 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 1 Jun 2022 15:17:45 -0600 Subject: [PATCH 297/935] pre.5 --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 88b46e8ad..f40a8dc4c 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19-beta.4" + "minecraft": "1.19-beta.5" } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 3092b4eba..3f87cce98 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ mod_version=1.9.0 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19-pre4 +minecraft_version=1.19-pre5 forge_version=1.18.2-40.0.0 fabric_version=0.13.3 From b0266cd14bf1c4bdb808046c2f752b416d7dfdba Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 1 Jun 2022 15:49:41 -0600 Subject: [PATCH 298/935] do beta versioning on gh action builds --- .github/workflows/gradle_build.yml | 16 +++++++++++++++- build.gradle | 2 +- gradle.properties | 18 ++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 gradle.properties diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 34e93bff2..53081763a 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -19,7 +19,21 @@ jobs: with: java-version: '8' distribution: 'adopt' - + + - uses: actions/github-script@v2 + id: fname + name: apply beta versioning + with: + result-encoding: string + script: | + const fs = require("fs"); + let file = fs.readFileSync("./gradle.properties"); + file = file.toString().split("\n").map(e => e.trim().startsWith("mod_version") ? `${e}-beta-${process.env.GITHUB_SHA.substring(0, 7)}` : e).join("\n"); + fs.writeFileSync("./gradle.properties", file); + const mod_version = file.toString().split("\n").filter(e => e.trim().startsWith("mod_version"))[0].split("=")[1].trim(); + const archives_base_name = file.toString().split("\n").filter(e => e.trim().startsWith("archives_base_name"))[0].split("=")[1].trim(); + return `${archives_base_name}-${mod_version}`; + - name: Grant execute permission for gradlew run: chmod +x gradlew diff --git a/build.gradle b/build.gradle index b922fc900..ad9c3335b 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.2.15' +version project.mod_version buildscript { repositories { diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 000000000..ca675d85d --- /dev/null +++ b/gradle.properties @@ -0,0 +1,18 @@ +# +# 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 . +# + +mod_version = 1.2.15 \ No newline at end of file From 0df45a89bec8486cbb6886c98b00d9e3ecb933c1 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 1 Jun 2022 15:51:25 -0600 Subject: [PATCH 299/935] don't do the other stuff --- .github/workflows/gradle_build.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 53081763a..4c1075f82 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -21,7 +21,6 @@ jobs: distribution: 'adopt' - uses: actions/github-script@v2 - id: fname name: apply beta versioning with: result-encoding: string @@ -30,9 +29,6 @@ jobs: let file = fs.readFileSync("./gradle.properties"); file = file.toString().split("\n").map(e => e.trim().startsWith("mod_version") ? `${e}-beta-${process.env.GITHUB_SHA.substring(0, 7)}` : e).join("\n"); fs.writeFileSync("./gradle.properties", file); - const mod_version = file.toString().split("\n").filter(e => e.trim().startsWith("mod_version"))[0].split("=")[1].trim(); - const archives_base_name = file.toString().split("\n").filter(e => e.trim().startsWith("archives_base_name"))[0].split("=")[1].trim(); - return `${archives_base_name}-${mod_version}`; - name: Grant execute permission for gradlew run: chmod +x gradlew From 3d95f0ad6596edb3a645617dee9ec2e912f4ba31 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 1 Jun 2022 16:16:41 -0600 Subject: [PATCH 300/935] auto-increment version number as well --- .github/workflows/gradle_build.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 4c1075f82..5837c65dd 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -27,7 +27,14 @@ jobs: script: | const fs = require("fs"); let file = fs.readFileSync("./gradle.properties"); - file = file.toString().split("\n").map(e => e.trim().startsWith("mod_version") ? `${e}-beta-${process.env.GITHUB_SHA.substring(0, 7)}` : e).join("\n"); + file = file.toString().split("\n").map(e => { + if (!e.trim().startsWith("mod_version")) return e; + let vers = e.split("."); + let n = parseInt(vers[vers.length]) + 1; + vers = vers.slice(0, vers.length - 1); + vers.push(n); + return `${vers.join(".")}-beta-${process.env.GITHUB_SHA.substring(0, 7)}`; + }).join("\n"); fs.writeFileSync("./gradle.properties", file); - name: Grant execute permission for gradlew From 1b3139c99aff4f2e2852ab34c512c39c855ab2df Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 1 Jun 2022 16:21:21 -0600 Subject: [PATCH 301/935] oops --- .github/workflows/gradle_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 5837c65dd..e74a9251d 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -30,7 +30,7 @@ jobs: file = file.toString().split("\n").map(e => { if (!e.trim().startsWith("mod_version")) return e; let vers = e.split("."); - let n = parseInt(vers[vers.length]) + 1; + let n = parseInt(vers[vers.length-1].trim()) + 1; vers = vers.slice(0, vers.length - 1); vers.push(n); return `${vers.join(".")}-beta-${process.env.GITHUB_SHA.substring(0, 7)}`; From caa88c5b60e29930eb44d734b1626f8126e4d703 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 1 Jun 2022 16:28:53 -0600 Subject: [PATCH 302/935] DONT on tags --- .github/workflows/gradle_build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index e74a9251d..98c6f5fee 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -29,6 +29,7 @@ jobs: let file = fs.readFileSync("./gradle.properties"); file = file.toString().split("\n").map(e => { if (!e.trim().startsWith("mod_version")) return e; + if (process.env.GITHUB_REF.includes("tags")) return e; let vers = e.split("."); let n = parseInt(vers[vers.length-1].trim()) + 1; vers = vers.slice(0, vers.length - 1); From 6e37221b3cc615a7d7072a6d6eb2e38364ce030f Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 2 Jun 2022 13:37:51 -0600 Subject: [PATCH 303/935] rc.1 --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index f40a8dc4c..c32ff5fcc 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19-beta.5" + "minecraft": "1.19-rc.1" } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 3f87cce98..337ed1c04 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ mod_version=1.9.0 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19-pre5 +minecraft_version=1.19-rc1 forge_version=1.18.2-40.0.0 fabric_version=0.13.3 From 8cfdcbdc9e830526b8fc15e395ef27b7739140f9 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 3 Jun 2022 13:47:09 -0600 Subject: [PATCH 304/935] rc.2 --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index c32ff5fcc..ed41d2c47 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19-rc.1" + "minecraft": "1.19-rc.2" } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 337ed1c04..858855520 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ mod_version=1.9.0 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19-rc1 +minecraft_version=1.19-rc2 forge_version=1.18.2-40.0.0 fabric_version=0.13.3 From 4dba5a4399f6691fdf5401b88492a0b0c2d15610 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 3 Jun 2022 14:09:37 -0600 Subject: [PATCH 305/935] use `git describe` instead --- .github/workflows/gradle_build.yml | 20 +------------------- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 98c6f5fee..0af2ebbc1 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -20,29 +20,11 @@ jobs: java-version: '8' distribution: 'adopt' - - uses: actions/github-script@v2 - name: apply beta versioning - with: - result-encoding: string - script: | - const fs = require("fs"); - let file = fs.readFileSync("./gradle.properties"); - file = file.toString().split("\n").map(e => { - if (!e.trim().startsWith("mod_version")) return e; - if (process.env.GITHUB_REF.includes("tags")) return e; - let vers = e.split("."); - let n = parseInt(vers[vers.length-1].trim()) + 1; - vers = vers.slice(0, vers.length - 1); - vers.push(n); - return `${vers.join(".")}-beta-${process.env.GITHUB_SHA.substring(0, 7)}`; - }).join("\n"); - fs.writeFileSync("./gradle.properties", file); - - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew build + run: ./gradlew build -Pmod_version=$(git describe --always --tags | cut -c2-) - name: Archive Artifacts uses: actions/upload-artifact@v2 diff --git a/gradle.properties b/gradle.properties index ca675d85d..dfce2934c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,4 @@ # along with Baritone. If not, see . # -mod_version = 1.2.15 \ No newline at end of file +mod_version = 1.2.15-local_build \ No newline at end of file From ffbe683e86811215cd4c10636a58f970786ced04 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 3 Jun 2022 14:24:17 -0600 Subject: [PATCH 306/935] versioning with normal build --- .github/workflows/gradle_build.yml | 4 ++-- build.gradle | 8 +++++++- gradle.properties | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 0af2ebbc1..9c28df452 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -24,8 +24,8 @@ jobs: run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew build -Pmod_version=$(git describe --always --tags | cut -c2-) - + run: ./gradlew build + - name: Archive Artifacts uses: actions/upload-artifact@v2 with: diff --git a/build.gradle b/build.gradle index ad9c3335b..29657d789 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,13 @@ */ group 'baritone' -version project.mod_version + +def vers = 'git describe --always --tags --dirty'.execute().text.trim(); +if (!vers.startsWith("v")) { + version project.hasProperty("mod_version") + "+" + "local_build"; +} else { + version vers.substring(1) +} buildscript { repositories { diff --git a/gradle.properties b/gradle.properties index dfce2934c..ca675d85d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,4 @@ # along with Baritone. If not, see . # -mod_version = 1.2.15-local_build \ No newline at end of file +mod_version = 1.2.15 \ No newline at end of file From 1caa99fee3baa915e55c9503920b1c689efb517d Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 3 Jun 2022 14:26:27 -0600 Subject: [PATCH 307/935] oops --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 29657d789..3fc738c9e 100755 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ group 'baritone' def vers = 'git describe --always --tags --dirty'.execute().text.trim(); if (!vers.startsWith("v")) { - version project.hasProperty("mod_version") + "+" + "local_build"; + version project.mod_version + "+" + "local_build"; } else { version vers.substring(1) } From ed381d6b33879e68d775d1e724f7321f1307ace3 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 3 Jun 2022 14:29:51 -0600 Subject: [PATCH 308/935] fix CI not having access to git when run via gradle --- .github/workflows/gradle_build.yml | 2 +- build.gradle | 2 +- gradle.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 9c28df452..70498991a 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -24,7 +24,7 @@ jobs: run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew build + run: ./gradlew build -Pmod_version=$(git describe --always --tags | cut -c2-) - name: Archive Artifacts uses: actions/upload-artifact@v2 diff --git a/build.gradle b/build.gradle index 3fc738c9e..5c0fbf146 100755 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ group 'baritone' def vers = 'git describe --always --tags --dirty'.execute().text.trim(); if (!vers.startsWith("v")) { - version project.mod_version + "+" + "local_build"; + version project.mod_version; } else { version vers.substring(1) } diff --git a/gradle.properties b/gradle.properties index ca675d85d..9242d089a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,4 @@ # along with Baritone. If not, see . # -mod_version = 1.2.15 \ No newline at end of file +mod_version = 1.2.15-local \ No newline at end of file From f699be7973357b2c994fce47b145848435d8e69e Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 3 Jun 2022 14:42:23 -0600 Subject: [PATCH 309/935] so umm, it's not using right version number in CI... --- .github/workflows/gradle_build.yml | 2 +- build.gradle | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 70498991a..de19c7a99 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -24,7 +24,7 @@ jobs: run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew build -Pmod_version=$(git describe --always --tags | cut -c2-) + run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)" - name: Archive Artifacts uses: actions/upload-artifact@v2 diff --git a/build.gradle b/build.gradle index 5c0fbf146..8cda353f4 100755 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,8 @@ group 'baritone' def vers = 'git describe --always --tags --dirty'.execute().text.trim(); if (!vers.startsWith("v")) { - version project.mod_version; + println "git doesn't appear to be installed!" + version project.mod_version } else { version vers.substring(1) } From 2b4da2a46c165b09238ea9491918af3e66400e41 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 3 Jun 2022 14:46:39 -0600 Subject: [PATCH 310/935] deep checkout so we actually get tag names in CI --- .github/workflows/gradle_build.yml | 5 ++++- build.gradle | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index de19c7a99..8a8ac2cb4 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -13,7 +13,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Set up JDK 8 uses: actions/setup-java@v2 with: diff --git a/build.gradle b/build.gradle index 8cda353f4..0013796c9 100755 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,7 @@ group 'baritone' def vers = 'git describe --always --tags --dirty'.execute().text.trim(); if (!vers.startsWith("v")) { println "git doesn't appear to be installed!" + println "using version number: " + project.mod_version version project.mod_version } else { version vers.substring(1) From f2a11df616b26c05c863b8fc28f86b6b712761e1 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 7 Jun 2022 05:13:43 -0600 Subject: [PATCH 311/935] prepare for release day --- .github/workflows/gradle_build.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index c028d9365..0c8919406 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -29,12 +29,6 @@ jobs: - name: Build with Gradle run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)" - - name: Build (fabric) with Gradle - run: ./gradlew build -Pbaritone.fabric_build - - - name: Build (forge) with Gradle - run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge - - name: Archive Artifacts uses: actions/upload-artifact@v2 with: From 606f9c55a87c53885c849fdfb6f5e4e47c350723 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 7 Jun 2022 12:07:12 -0600 Subject: [PATCH 312/935] 1.19! --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index ed41d2c47..3220a1473 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19-rc.2" + "minecraft": "1.19" } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 47b3a8966..ca402c2f4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ mod_version=1.9.0-local maven_group=baritone archives_base_name=baritone -minecraft_version=1.19-rc2 +minecraft_version=1.19 forge_version=1.18.2-40.0.0 fabric_version=0.13.3 From 9e1a5008edc07b6cbfd983daa46b06115c0145c8 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Tue, 7 Jun 2022 21:52:24 +0100 Subject: [PATCH 313/935] Move caching functions into MovementHelper --- .../baritone/behavior/PathingBehavior.java | 8 +- .../pathing/movement/MovementHelper.java | 158 ++++++++++----- .../movement/movements/MovementAscend.java | 4 +- .../movement/movements/MovementDescend.java | 10 +- .../movement/movements/MovementDiagonal.java | 26 +-- .../movement/movements/MovementDownward.java | 2 +- .../movement/movements/MovementParkour.java | 6 +- .../movement/movements/MovementTraverse.java | 2 +- .../pathing/precompute/PrecomputedData.java | 181 +----------------- 9 files changed, 145 insertions(+), 252 deletions(-) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 50e2a0c2e..6bdfe2e78 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -422,7 +422,7 @@ private void resetEstimatedTicksToGoal(BetterBlockPos start) { */ public BetterBlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); - if (!precomputedData.canWalkOn(ctx, feet.down())) { + if (!MovementHelper.canWalkOn(ctx, feet.down())) { if (ctx.player().onGround) { double playerX = ctx.player().posX; double playerZ = ctx.player().posZ; @@ -441,7 +441,7 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class // can't possibly be sneaking off of this one, we're too far away continue; } - if (precomputedData.canWalkOn(ctx, possibleSupport.down()) && precomputedData.canWalkThrough(ctx, possibleSupport) && context.precomputedData.canWalkThrough(ctx, possibleSupport.up())) { + 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"); return possibleSupport; @@ -451,7 +451,7 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class } else { // !onGround // we're in the middle of a jump - if (precomputedData.canWalkOn(ctx, feet.down().down())) { + if (MovementHelper.canWalkOn(ctx, feet.down().down())) { //logDebug("Faking path start assuming player is midair and falling"); return feet.down(); } @@ -462,7 +462,7 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class @Override public void onSettingChanged(SettingChangedEvent event) { - this.precomputedData.refresh(); + this.precomputedData = new PrecomputedData(); } /** diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 197f10576..dc4ad31b1 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -88,62 +88,105 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { return canWalkThrough(bsi, x, y, z, bsi.get0(x, y, z)); } - // if changing something in this function remember to also change it in precomputed data + static boolean canWalkThrough(CalculationContext context, int x, int y, int z, IBlockState state) { + return context.precomputedData.canWalkThrough(context.bsi, x, y, z, state); + } + + static boolean canWalkThrough(CalculationContext context, int x, int y, int z) { + return context.precomputedData.canWalkThrough(context.bsi, x, y, z, context.get(x, y, z)); + } + + static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + Optional canWalkOn = canWalkThroughBlockState(state); + return canWalkOn.orElseGet(() -> canWalkThroughPosition(bsi, x, y, z, state)); + } + + static Optional canWalkThroughBlockState(IBlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR) { // early return for most common case - return true; + + if (block == Blocks.AIR) { + return Optional.of(true); } + if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block instanceof BlockTrapDoor || block == Blocks.END_ROD) { - return false; + return Optional.of(false); } + if (Baritone.settings().blocksToAvoid.value.contains(block)) { - return false; + return Optional.of(false); } + if (block instanceof BlockDoor || block instanceof BlockFenceGate) { // Because there's no nice method in vanilla to check if a door is openable or not, we just have to assume // that anything that isn't an iron door isn't openable, ignoring that some doors introduced in mods can't // be opened by just interacting. - return block != Blocks.IRON_DOOR; + return Optional.of(block != Blocks.IRON_DOOR); } + if (block == Blocks.CARPET) { - return canWalkOn(bsi, x, y - 1, z); + return Optional.empty(); } + if (block instanceof BlockSnow) { - // we've already checked doors and fence gates - // so the only remaining dynamic isPassables are snow and trapdoor - // if they're cached as a top block, we don't know their metadata - // default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) - if (!bsi.worldContainsLoadedChunk(x, z)) { - return true; - } - // the check in BlockSnow.isPassable is layers < 5 - // while actually, we want < 3 because 3 or greater makes it impassable in a 2 high ceiling if (state.getValue(BlockSnow.LAYERS) >= 3) { - return false; + return Optional.of(false); } - // ok, it's low enough we could walk through it, but is it supported? + + return Optional.empty(); + } + + if (block instanceof BlockLiquid) { + if (state.getValue(BlockLiquid.LEVEL) != 0) { + return Optional.of(false); + } else { + return Optional.empty(); + } + } + + if (block instanceof BlockCauldron) { + return Optional.of(false); + } + + try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information + return Optional.of(block.isPassable(null, null)); + } catch (NullPointerException exception) { + System.out.println("Error"); + return Optional.empty(); + } + } + + static boolean canWalkThroughPosition(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + Block block = state.getBlock(); + + if (block == Blocks.CARPET) { return canWalkOn(bsi, x, y - 1, z); } - if (isFlowing(x, y, z, state, bsi)) { - return false; // Don't walk through flowing liquids + + if (block instanceof BlockSnow) { // TODO see if this case is necessary, shouldn't it also check this somewhere else? + return canWalkOn(bsi, x, y - 1, z); } + if (block instanceof BlockLiquid) { + if (isFlowing(x, y, z, state, bsi)) { + return false; + } + // Everything after this point has to be a special case as it relies on the water not being flowing, which means a special case is needed. if (Baritone.settings().assumeWalkOnWater.value) { return false; } + IBlockState up = bsi.get0(x, y + 1, z); if (up.getBlock() instanceof BlockLiquid || up.getBlock() instanceof BlockLilyPad) { return false; } return block == Blocks.WATER || block == Blocks.FLOWING_WATER; } - if (block instanceof BlockCauldron) { - return false; - } + return block.isPassable(bsi.access, bsi.isPassableBlockPos.setPos(x, y, z)); } + /** * canWalkThrough but also won't impede movement at all. so not including doors or fence gates (we'd have to right click), * not including water, and not including ladders or vines or cobwebs (they slow us down) @@ -296,32 +339,57 @@ static boolean avoidWalkingInto(Block block) { * @return Whether or not the specified block can be walked on */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + Optional canWalkOn = canWalkOnBlockState(state); + return canWalkOn.orElseGet(() -> canWalkOnPosition(bsi, x, y, z, state)); + } + + static Optional canWalkOnBlockState(IBlockState state) { Block block = state.getBlock(); if (block == Blocks.AIR || block == Blocks.MAGMA) { - // early return for most common case (air) - // plus magma, which is a normal cube but it hurts you - return false; + return Optional.of(false); } if (state.isBlockNormalCube()) { - return true; + return Optional.of(true); } if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this - return true; + return Optional.of(true); } if (block == Blocks.FARMLAND || block == Blocks.GRASS_PATH) { - return true; + return Optional.of(true); } if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { - return true; + return Optional.of(true); + } + if (isWater(block)) { + return Optional.empty(); + } + if (Baritone.settings().assumeWalkOnLava.value && MovementHelper.isLava(block)) { + return Optional.empty(); + } + + if (block instanceof BlockSlab) { + if (!Baritone.settings().allowWalkOnBottomSlab.value) { + if (((BlockSlab) block).isDouble()) { + return Optional.of(true); + } + return Optional.of(state.getValue(BlockSlab.HALF) != BlockSlab.EnumBlockHalf.BOTTOM); + } + return Optional.of(true); } + + return Optional.of(block instanceof BlockStairs); + } + + static boolean canWalkOnPosition(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + Block block = state.getBlock(); if (isWater(block)) { // since this is called literally millions of times per second, the benefit of not allocating millions of useless "pos.up()" - // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think its a decrease in readability + // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think it's a decrease in readability Block up = bsi.get0(x, y + 1, z).getBlock(); if (up == Blocks.WATERLILY || up == Blocks.CARPET) { return true; } - if (isFlowing(x, y, z, state, bsi) || block == Blocks.FLOWING_WATER) { + if (MovementHelper.isFlowing(x, y, z, state, bsi) || block == Blocks.FLOWING_WATER) { // the only scenario in which we can walk on flowing water is if it's under still water with jesus off return isWater(up) && !Baritone.settings().assumeWalkOnWater.value; } @@ -329,22 +397,20 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockSta // if assumeWalkOnWater is off, we can only walk on water if there is water above it return isWater(up) ^ Baritone.settings().assumeWalkOnWater.value; } - if (Baritone.settings().assumeWalkOnLava.value && isLava(block) && !isFlowing(x, y, z, state, bsi)) { - return true; - } - if (block == Blocks.GLASS || block == Blocks.STAINED_GLASS) { - return true; - } - if (block instanceof BlockSlab) { - if (!Baritone.settings().allowWalkOnBottomSlab.value) { - if (((BlockSlab) block).isDouble()) { - return true; - } - return state.getValue(BlockSlab.HALF) != BlockSlab.EnumBlockHalf.BOTTOM; - } + + if (Baritone.settings().assumeWalkOnLava.value && MovementHelper.isLava(block) && !MovementHelper.isFlowing(x, y, z, state, bsi)) { return true; } - return block instanceof BlockStairs; + + return false; // If we don't recognise it then we want to just return false to be safe. + } + + static boolean canWalkOn(CalculationContext context, int x, int y, int z, IBlockState state) { + return context.precomputedData.canWalkOn(context.bsi, x, y, z, state); + } + + static boolean canWalkOn(CalculationContext context, int x, int y, int z) { + return canWalkOn(context, x, y, z, context.get(x, y, z)); } static boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, IBlockState state) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index bbc09f521..3d6a6cb3c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -68,7 +68,7 @@ protected Set calculateValidPositions() { public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { IBlockState toPlace = context.get(destX, y, destZ); double additionalPlacementCost = 0; - if (!context.precomputedData.canWalkOn(context.bsi, x, y, z, toPlace)) { + if (!MovementHelper.canWalkOn(context, destX, y, destZ, toPlace)) { additionalPlacementCost = context.costOfPlacingAt(destX, y, destZ, toPlace); if (additionalPlacementCost >= COST_INF) { return COST_INF; @@ -94,7 +94,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } IBlockState srcUp2 = context.get(x, y + 2, z); // used lower down anyway - if (context.get(x, y + 3, z).getBlock() instanceof BlockFalling && (context.precomputedData.canWalkThrough(context.bsi, x, y + 1, z) || !(srcUp2.getBlock() instanceof BlockFalling))) {//it would fall on us and possibly suffocate us + if (context.get(x, y + 3, z).getBlock() instanceof BlockFalling && (MovementHelper.canWalkThrough(context, x, y + 1, z) || !(srcUp2.getBlock() instanceof BlockFalling))) {//it would fall on us and possibly suffocate us // HOWEVER, we assume that we're standing in the start position // that means that src and src.up(1) are both air // maybe they aren't now, but they will be by the time this starts diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index d0f7d9b3f..fc66987ef 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -101,7 +101,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des //C, D, etc determine the length of the fall IBlockState below = context.get(destX, y - 2, destZ); - if (!context.precomputedData.canWalkOn(context.bsi, destX, y - 2, destZ, below)) { + if (!MovementHelper.canWalkOn(context, destX, y - 2, destZ, below)) { dynamicFallCost(context, x, y, z, destX, destZ, totalCost, below, res); return; } @@ -146,7 +146,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; if (MovementHelper.isWater(ontoBlock.getBlock())) { - if (!context.precomputedData.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { + if (!MovementHelper.canWalkThrough(context, destX, newY, destZ, ontoBlock)) { return false; } if (context.assumeWalkOnWater) { @@ -155,7 +155,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, if (MovementHelper.isFlowing(destX, newY, destZ, ontoBlock, context.bsi)) { return false; // TODO flowing check required here? } - if (!context.precomputedData.canWalkOn(context.bsi, destX, newY - 1, destZ)) { + if (!MovementHelper.canWalkOn(context, destX, newY - 1, destZ)) { // we could punch right through the water into something else return false; } @@ -174,10 +174,10 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, effectiveStartHeight = newY; continue; } - if (context.precomputedData.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { + if (MovementHelper.canWalkThrough(context, destX, newY, destZ, ontoBlock)) { continue; } - if (!context.precomputedData.canWalkOn(context.bsi, destX, newY, destZ, ontoBlock)) { + if (!MovementHelper.canWalkOn(context, destX, newY, destZ, ontoBlock)) { return false; } if (MovementHelper.isBottomSlab(ontoBlock)) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 45d319eb6..c1d86d093 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -110,24 +110,24 @@ protected Set calculateValidPositions() { } public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { - if (!context.precomputedData.canWalkThrough(context.bsi, destX, y + 1, destZ)) { + if (!MovementHelper.canWalkThrough(context, destX, y + 1, destZ)) { return; } IBlockState destInto = context.get(destX, y, destZ); boolean ascend = false; IBlockState destWalkOn; boolean descend = false; - if (!context.precomputedData.canWalkThrough(context.bsi, destX, y, destZ, destInto)) { + if (!MovementHelper.canWalkThrough(context, destX, y, destZ, destInto)) { ascend = true; - if (!context.allowDiagonalAscend || !context.precomputedData.canWalkThrough(context.bsi, x, y + 2, z) || !context.precomputedData.canWalkOn(context.bsi, destX, y, destZ, destInto) || !context.precomputedData.canWalkThrough(context.bsi, destX, y + 2, destZ)) { + if (!context.allowDiagonalAscend || !MovementHelper.canWalkThrough(context, x, y + 2, z) || !MovementHelper.canWalkOn(context, destX, y, destZ, destInto) || !MovementHelper.canWalkThrough(context, destX, y + 2, destZ)) { return; } destWalkOn = destInto; } else { destWalkOn = context.get(destX, y - 1, destZ); - if (!context.precomputedData.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn)) { + if (!MovementHelper.canWalkOn(context, destX, y - 1, destZ, destWalkOn)) { descend = true; - if (!context.allowDiagonalDescend || !context.precomputedData.canWalkOn(context.bsi, destX, y - 2, destZ) || !context.precomputedData.canWalkThrough(context.bsi, destX, y - 1, destZ, destWalkOn)) { + if (!context.allowDiagonalDescend || !MovementHelper.canWalkOn(context, destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context, destX, y - 1, destZ, destWalkOn)) { return; } } @@ -169,17 +169,17 @@ public static void cost(CalculationContext context, int x, int y, int z, int des IBlockState pb0 = context.get(x, y, destZ); IBlockState pb2 = context.get(destX, y, z); if (ascend) { - boolean ATop = context.precomputedData.canWalkThrough(context.bsi, x, y + 2, destZ); - boolean AMid = context.precomputedData.canWalkThrough(context.bsi, x, y + 1, destZ); - boolean ALow = context.precomputedData.canWalkThrough(context.bsi, x, y, destZ, pb0); - boolean BTop = context.precomputedData.canWalkThrough(context.bsi, destX, y + 2, z); - boolean BMid = context.precomputedData.canWalkThrough(context.bsi, destX, y + 1, z); - boolean BLow = context.precomputedData.canWalkThrough(context.bsi, destX, y, z, pb2); + boolean ATop = MovementHelper.canWalkThrough(context, x, y + 2, destZ); + boolean AMid = MovementHelper.canWalkThrough(context, x, y + 1, destZ); + boolean ALow = MovementHelper.canWalkThrough(context, x, y, destZ, pb0); + boolean BTop = MovementHelper.canWalkThrough(context, destX, y + 2, z); + boolean BMid = MovementHelper.canWalkThrough(context, destX, y + 1, z); + boolean BLow = MovementHelper.canWalkThrough(context, destX, y, z, pb2); if ((!(ATop && AMid && ALow) && !(BTop && BMid && BLow)) // no option || MovementHelper.avoidWalkingInto(pb0.getBlock()) // bad || MovementHelper.avoidWalkingInto(pb2.getBlock()) // bad - || (ATop && AMid && context.precomputedData.canWalkOn(context.bsi, x, y, destZ, pb0)) // we could just ascend - || (BTop && BMid && context.precomputedData.canWalkOn(context.bsi, destX, y, z, pb2)) // we could just ascend + || (ATop && AMid && MovementHelper.canWalkOn(context, x, y, destZ, pb0)) // we could just ascend + || (BTop && BMid && MovementHelper.canWalkOn(context, destX, y, z, pb2)) // we could just ascend || (!ATop && AMid && ALow) // head bonk A || (!BTop && BMid && BLow)) { // head bonk B return; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index d10a7d269..5a6ec5ce7 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -59,7 +59,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (!context.allowDownward) { return COST_INF; } - if (!context.precomputedData.canWalkOn(context.bsi, x, y - 2, z)) { + if (!MovementHelper.canWalkOn(context, x, y - 2, z)) { return COST_INF; } IBlockState down = context.get(x, y - 1, z); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 07140cf12..557f30266 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -74,7 +74,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac return; } IBlockState adj = context.get(x + xDiff, y - 1, z + zDiff); - if (context.precomputedData.canWalkOn(context.bsi, x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) + if (MovementHelper.canWalkOn(context, x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) // second most common case -- we could just traverse not parkour return; } @@ -122,7 +122,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac // check for ascend landing position IBlockState destInto = context.bsi.get0(destX, y, destZ); if (!MovementHelper.fullyPassable(context.bsi.access, context.bsi.isPassableBlockPos.setPos(destX, y, destZ), destInto)) { - if (i <= 3 && context.allowParkourAscend && context.canSprint && context.precomputedData.canWalkOn(context.bsi, destX, y, destZ, destInto) && checkOvershootSafety(context.bsi, destX + xDiff, y + 1, destZ + zDiff)) { + if (i <= 3 && context.allowParkourAscend && context.canSprint && MovementHelper.canWalkOn(context, destX, y, destZ, destInto) && checkOvershootSafety(context.bsi, destX + xDiff, y + 1, destZ + zDiff)) { res.x = destX; res.y = y + 1; res.z = destZ; @@ -135,7 +135,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac // check for flat landing position IBlockState landingOn = context.bsi.get0(destX, y - 1, destZ); // farmland needs to be canWalkOn otherwise farm can never work at all, but we want to specifically disallow ending a jump on farmland haha - if (landingOn.getBlock() != Blocks.FARMLAND && context.precomputedData.canWalkOn(context.bsi, destX, y - 1, destZ, landingOn)) { + if (landingOn.getBlock() != Blocks.FARMLAND && MovementHelper.canWalkOn(context, destX, y - 1, destZ, landingOn)) { if (checkOvershootSafety(context.bsi, destX + xDiff, y, destZ + zDiff)) { res.x = destX; res.y = y; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 2afce2f44..d932c5f8b 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -72,7 +72,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d IBlockState pb1 = context.get(destX, y, destZ); IBlockState destOn = context.get(destX, y - 1, destZ); Block srcDown = context.getBlock(x, y - 1, z); - if (context.precomputedData.canWalkOn(context.bsi, destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge + if (MovementHelper.canWalkOn(context, destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; boolean water = false; if (MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock())) { diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index d354f2d57..42ff69b23 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -37,190 +37,17 @@ public class PrecomputedData { // TODO add isFullyPassable PrecomputedDataForBlockState canWalkOn; PrecomputedDataForBlockState canWalkThrough; - public PrecomputedData() { // currently designed for this to be remade on setting change, however that could always be changed - long startTime = System.nanoTime(); - - canWalkOn = new PrecomputedDataForBlockState((state) -> { // this is just copied from the old MovementHelperFunction - Block block = state.getBlock(); - if (block == Blocks.AIR || block == Blocks.MAGMA) { - return Optional.of(false); - } - if (state.isBlockNormalCube()) { - return Optional.of(true); - } - if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this - return Optional.of(true); - } - if (block == Blocks.FARMLAND || block == Blocks.GRASS_PATH) { - return Optional.of(true); - } - if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { - return Optional.of(true); - } - if (isWater(block)) { - return Optional.empty(); - } - if (Baritone.settings().assumeWalkOnLava.value && MovementHelper.isLava(block)) { - return Optional.empty(); - } - - if (block instanceof BlockSlab) { - if (!Baritone.settings().allowWalkOnBottomSlab.value) { - if (((BlockSlab) block).isDouble()) { - return Optional.of(true); - } - return Optional.of(state.getValue(BlockSlab.HALF) != BlockSlab.EnumBlockHalf.BOTTOM); - } - return Optional.of(true); - } - - return Optional.of(block instanceof BlockStairs); - }, (bsi, x, y, z, blockState) -> { // This should just be water or lava, and could probably be made more efficient - Block block = blockState.getBlock(); - if (isWater(block)) { - // since this is called literally millions of times per second, the benefit of not allocating millions of useless "pos.up()" - // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think it's a decrease in readability - Block up = bsi.get0(x, y + 1, z).getBlock(); - if (up == Blocks.WATERLILY || up == Blocks.CARPET) { - return true; - } - if (MovementHelper.isFlowing(x, y, z, blockState, bsi) || block == Blocks.FLOWING_WATER) { - // the only scenario in which we can walk on flowing water is if it's under still water with jesus off - return isWater(up) && !Baritone.settings().assumeWalkOnWater.value; - } - // if assumeWalkOnWater is on, we can only walk on water if there isn't water above it - // if assumeWalkOnWater is off, we can only walk on water if there is water above it - return isWater(up) ^ Baritone.settings().assumeWalkOnWater.value; - } - - if (Baritone.settings().assumeWalkOnLava.value && MovementHelper.isLava(block) && !MovementHelper.isFlowing(x, y, z, blockState, bsi)) { - return true; - } - - return false; // If we don't recognise it then we want to just return false to be safe. - }); - - canWalkThrough = new PrecomputedDataForBlockState((blockState) -> { - Block block = blockState.getBlock(); - - if (block == Blocks.AIR) { - return Optional.of(true); - } - - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block instanceof BlockTrapDoor || block == Blocks.END_ROD) { - return Optional.of(false); - } - - if (Baritone.settings().blocksToAvoid.value.contains(block)) { - return Optional.of(false); - } - - if (block instanceof BlockDoor || block instanceof BlockFenceGate) { - // Because there's no nice method in vanilla to check if a door is openable or not, we just have to assume - // that anything that isn't an iron door isn't openable, ignoring that some doors introduced in mods can't - // be opened by just interacting. - return Optional.of(block != Blocks.IRON_DOOR); - } - - if (block == Blocks.CARPET) { - return Optional.empty(); - } - - if (block instanceof BlockSnow) { - if (blockState.getValue(BlockSnow.LAYERS) >= 3) { - return Optional.of(false); - } - - return Optional.empty(); - } - - if (block instanceof BlockLiquid) { - if (blockState.getValue(BlockLiquid.LEVEL) != 0) { - return Optional.of(false); - } else { - return Optional.empty(); - } - } - - if (block instanceof BlockCauldron) { - return Optional.of(false); - } - - try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information - return Optional.of(block.isPassable(null, null)); - } catch (NullPointerException exception) { - System.out.println("Error"); - return Optional.empty(); - } - }, (bsi, x, y, z, blockState) -> { - Block block = blockState.getBlock(); - - if (block == Blocks.CARPET) { - return canWalkOn(bsi, x, y - 1, z); - } - - if (block instanceof BlockSnow) { // TODO see if this case is necessary, shouldn't it also check this somewhere else? - return canWalkOn(bsi, x, y - 1, z); - } - - if (block instanceof BlockLiquid) { - if (isFlowing(x, y, z, blockState, bsi)) { - return false; - } - // Everything after this point has to be a special case as it relies on the water not being flowing, which means a special case is needed. - if (Baritone.settings().assumeWalkOnWater.value) { - return false; - } - - IBlockState up = bsi.get0(x, y + 1, z); - if (up.getBlock() instanceof BlockLiquid || up.getBlock() instanceof BlockLilyPad) { - return false; - } - return block == Blocks.WATER || block == Blocks.FLOWING_WATER; - } - - return block.isPassable(bsi.access, bsi.isPassableBlockPos.setPos(x, y, z)); - }); + public PrecomputedData() { + canWalkOn = new PrecomputedDataForBlockState(MovementHelper::canWalkOnBlockState, MovementHelper::canWalkOnPosition); + canWalkThrough = new PrecomputedDataForBlockState(MovementHelper::canWalkThroughBlockState, MovementHelper::canWalkThroughPosition); } public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { return canWalkOn.get(bsi, x, y, z, state); } - public boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, IBlockState state) { - return canWalkOn(new BlockStateInterface(ctx), pos.x, pos.y, pos.z, state); - } - - public boolean canWalkOn(IPlayerContext ctx, BlockPos pos) { - return canWalkOn(new BlockStateInterface(ctx), pos.getX(), pos.getY(), pos.getZ()); - } - - public boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos) { - return canWalkOn(new BlockStateInterface(ctx), pos.x, pos.y, pos.z); - } - - public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z) { - return canWalkOn(bsi, x, y, z, bsi.get0(x, y, z)); - } - public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { - return false; - } - - public boolean canWalkThrough(IPlayerContext ctx, BetterBlockPos pos) { - return canWalkThrough(new BlockStateInterface(ctx), pos.x, pos.y, pos.z); - } - - public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { - return canWalkThrough(bsi, x, y, z, bsi.get0(x, y, z)); - } - - /** - * Refresh the precomputed data, for use when settings have changed etc. - */ - public void refresh() { - canWalkThrough.refresh(); - canWalkOn.refresh(); + return canWalkThrough.get(bsi, x, y, z, state); } } From f204fbb08e51b7b358380ee2a91b56f4cb47bcc3 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 8 Jun 2022 02:28:22 -0600 Subject: [PATCH 314/935] froge support --- build.gradle | 8 +++---- .../gradle/task/BaritoneGradleTask.java | 21 ++++++------------- common/build.gradle | 12 +++++++++-- gradle.properties | 4 ++-- settings.gradle | 8 +++++-- 5 files changed, 28 insertions(+), 25 deletions(-) diff --git a/build.gradle b/build.gradle index 823999f0f..bb6bf9946 100755 --- a/build.gradle +++ b/build.gradle @@ -16,8 +16,8 @@ */ plugins { - id "architectury-plugin" version "3.4-SNAPSHOT" - id 'dev.architectury.loom' version '0.11.0-SNAPSHOT' apply false + id "architectury-plugin" version "3.4.135" + id 'dev.architectury.loom' version '0.11.0.275' apply false } subprojects { @@ -36,7 +36,7 @@ subprojects { } group = rootProject.maven_group - sourceCompatibility = targetCompatibility = JavaVersion.VERSION_16 + sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17 loom { silentMojangMappingsLicense() @@ -86,4 +86,4 @@ allprojects { } mavenCentral() } -} +} \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index a412f2f19..b25885919 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -49,8 +49,8 @@ class BaritoneGradleTask extends DefaultTask { ARTIFACT_STANDALONE = "%s-standalone-%s.jar", ARTIFACT_FORGE_UNOPTIMIZED = "%s-forge-unoptimized-%s.jar", ARTIFACT_FORGE_API = "%s-forge-api-%s.jar", - ARTIFACT_FORGE_STANDALONE = "%s-forge-standalone-%s.jar", - ARTIFACT_FABRIC_UNOPTIMIZED = "%s-fabric-standalone-%s.jar", + ARTIFACT_FORGE_STANDALONE = "%s-standalone-%s.jar", + ARTIFACT_FABRIC_UNOPTIMIZED = "%s-standalone-%s.jar", ARTIFACT_FABRIC_API = "%s-fabric-api-%s.jar", ARTIFACT_FABRIC_STANDALONE = "%s-fabric-standalone-%s.jar"; @@ -66,19 +66,10 @@ public BaritoneGradleTask() { this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); - if (getProject().hasProperty("baritone.forge_build")) { - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_STANDALONE)); - } else if (getProject().hasProperty("baritone.fabric_build")) { - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_STANDALONE)); - } else { - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); - } + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); + this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); } diff --git a/common/build.gradle b/common/build.gradle index d23ecf6fd..1b356b3d6 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -3,7 +3,7 @@ import baritone.gradle.task.ProguardTask architectury { injectInjectables = false - common("fabric") + common(System.getProperty("Baritone.enabled_platforms").split(",")) } //loom { @@ -125,4 +125,12 @@ jar { 'Implementation-Version': version, ) } -} \ No newline at end of file +} + + + +task removeDist(type: Delete) { + delete new File(rootProject.rootDir, "dist") +} + +clean.finalizedBy(removeDist) \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ca402c2f4..565ac04f3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,11 +1,11 @@ -org.gradle.jvmargs=-Xmx2048M +org.gradle.jvmargs=-Xmx4G mod_version=1.9.0-local maven_group=baritone archives_base_name=baritone minecraft_version=1.19 -forge_version=1.18.2-40.0.0 +forge_version=1.19-41.0.1 fabric_version=0.13.3 # # un comment for forge debugging default (as opposed to fabric) diff --git a/settings.gradle b/settings.gradle index eadb7a6a5..7c572072c 100755 --- a/settings.gradle +++ b/settings.gradle @@ -42,7 +42,11 @@ pluginManagement { rootProject.name = 'baritone' -include("fabric") -//include("forge") include("common") include("tweaker") +if (System.getProperty("Baritone.enabled_platforms") == null) { + System.setProperty("Baritone.enabled_platforms", "fabric,forge") +} +for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { + include(platform) +} From e7c357ab7f1765546cb3255f1ce73be352ea132b Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Wed, 8 Jun 2022 14:14:14 +0100 Subject: [PATCH 315/935] Make precomputed data refresh every 200 ticks (10 seconds) --- src/main/java/baritone/behavior/PathingBehavior.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 6bdfe2e78..d1ca21301 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -103,6 +103,11 @@ public void onTick(TickEvent event) { baritone.getPathingControlManager().cancelEverything(); return; } + + if (ticksElapsedSoFar % 200 == 0) { + precomputedData = new PrecomputedData(); // This is here for now in case settings aren't changed in normal ways, should mean it is updated whatever once every 10 seconds + } + expectedSegmentStart = pathStart(); baritone.getPathingControlManager().preTick(); tickPath(); From 868c023dbdd91012a074002ead135eee78d8c6d3 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Wed, 8 Jun 2022 14:20:25 +0100 Subject: [PATCH 316/935] Fix a couple of things I missed --- .../baritone/pathing/movement/movements/MovementDescend.java | 2 +- .../baritone/pathing/movement/movements/MovementDiagonal.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index fc66987ef..8675fa04a 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -130,7 +130,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, // and potentially replace the water we're going to fall into return false; } - if (!context.precomputedData.canWalkThrough(context.bsi, destX, y - 2, destZ, below)) { + if (!MovementHelper.canWalkThrough(context, destX, y - 2, destZ, below)) { return false; } double costSoFar = 0; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index c1d86d093..48b4ed237 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -58,7 +58,7 @@ private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPo } @Override - protected boolean safeToCancel(MovementState state) { // TODO move this function to use precomputed data, not urgent as it only runs once a tick + protected boolean safeToCancel(MovementState state) { //too simple. backfill does not work after cornering with this //return context.precomputedData.canWalkOn(ctx, ctx.playerFeet().down()); EntityPlayerSP player = ctx.player(); From 347027a8e0f94130a5813aa420a09f93f5f5ec85 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 8 Jun 2022 09:26:47 -0600 Subject: [PATCH 317/935] handle this differently (grab archive name from root project) --- build.gradle | 8 ++++++- .../gradle/task/BaritoneGradleTask.java | 23 +++++++++++++------ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index bb6bf9946..857899043 100755 --- a/build.gradle +++ b/build.gradle @@ -15,9 +15,15 @@ * along with Baritone. If not, see . */ +buildscript { + dependencies { + classpath "org.ow2.asm:asm:9.3" + } +} + plugins { id "architectury-plugin" version "3.4.135" - id 'dev.architectury.loom' version '0.11.0.275' apply false + id 'dev.architectury.loom' version '0.11.0.254' apply false } subprojects { diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index b25885919..0190d5f70 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -49,8 +49,8 @@ class BaritoneGradleTask extends DefaultTask { ARTIFACT_STANDALONE = "%s-standalone-%s.jar", ARTIFACT_FORGE_UNOPTIMIZED = "%s-forge-unoptimized-%s.jar", ARTIFACT_FORGE_API = "%s-forge-api-%s.jar", - ARTIFACT_FORGE_STANDALONE = "%s-standalone-%s.jar", - ARTIFACT_FABRIC_UNOPTIMIZED = "%s-standalone-%s.jar", + ARTIFACT_FORGE_STANDALONE = "%s-forge-standalone-%s.jar", + ARTIFACT_FABRIC_UNOPTIMIZED = "%s-fabric-standalone-%s.jar", ARTIFACT_FABRIC_API = "%s-fabric-api-%s.jar", ARTIFACT_FABRIC_STANDALONE = "%s-fabric-standalone-%s.jar"; @@ -61,15 +61,24 @@ class BaritoneGradleTask extends DefaultTask { proguardOut; public BaritoneGradleTask() { - this.artifactName = getProject().getProperties().get("archivesBaseName").toString(); + this.artifactName = getProject().getRootProject().getProperties().get("archivesBaseName").toString(); this.artifactVersion = getProject().getVersion().toString(); this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); - + if (getProject().hasProperty("baritone.forge_build")) { + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_STANDALONE)); + } else if (getProject().hasProperty("baritone.fabric_build")) { + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_STANDALONE)); + } else { + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); + } this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); } From e6cc9b113186682863e51f67b55be6cd0bcf5801 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 8 Jun 2022 09:35:49 -0600 Subject: [PATCH 318/935] oops --- .../src/main/java/baritone/gradle/task/BaritoneGradleTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 0190d5f70..245b85cf8 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -61,7 +61,7 @@ class BaritoneGradleTask extends DefaultTask { proguardOut; public BaritoneGradleTask() { - this.artifactName = getProject().getRootProject().getProperties().get("archivesBaseName").toString(); + this.artifactName = getProject().getProperties().get("archives_base_name").toString(); this.artifactVersion = getProject().getVersion().toString(); this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); From a475f522ef2d4016f7d6e6e817942808a36cb7b4 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 8 Jun 2022 10:01:55 -0600 Subject: [PATCH 319/935] artifact_standard needs project artifact name --- .../src/main/java/baritone/gradle/task/BaritoneGradleTask.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 245b85cf8..dc5712a20 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -64,7 +64,8 @@ public BaritoneGradleTask() { this.artifactName = getProject().getProperties().get("archives_base_name").toString(); this.artifactVersion = getProject().getVersion().toString(); - this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); + String subprojectArtifactName = getProject().getProperties().get("archivesBaseName").toString(); + this.artifactPath = this.getBuildFile(String.format(ARTIFACT_STANDARD, subprojectArtifactName, artifactVersion)); if (getProject().hasProperty("baritone.forge_build")) { this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)); From fd43dace702c1ea6a8b06fa0509abb3b1f803c14 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 8 Jun 2022 10:16:09 -0600 Subject: [PATCH 320/935] rework this again and fix dist --- .../gradle/task/BaritoneGradleTask.java | 31 +++++-------------- .../baritone/gradle/task/CreateDistTask.java | 20 +++--------- 2 files changed, 11 insertions(+), 40 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index dc5712a20..b3bc93851 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -46,13 +46,7 @@ class BaritoneGradleTask extends DefaultTask { ARTIFACT_STANDARD = "%s-%s.jar", ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", ARTIFACT_API = "%s-api-%s.jar", - ARTIFACT_STANDALONE = "%s-standalone-%s.jar", - ARTIFACT_FORGE_UNOPTIMIZED = "%s-forge-unoptimized-%s.jar", - ARTIFACT_FORGE_API = "%s-forge-api-%s.jar", - ARTIFACT_FORGE_STANDALONE = "%s-forge-standalone-%s.jar", - ARTIFACT_FABRIC_UNOPTIMIZED = "%s-fabric-standalone-%s.jar", - ARTIFACT_FABRIC_API = "%s-fabric-api-%s.jar", - ARTIFACT_FABRIC_STANDALONE = "%s-fabric-standalone-%s.jar"; + ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; protected String artifactName, artifactVersion; protected final Path @@ -61,25 +55,14 @@ class BaritoneGradleTask extends DefaultTask { proguardOut; public BaritoneGradleTask() { - this.artifactName = getProject().getProperties().get("archives_base_name").toString(); + this.artifactName = getProject().getProperties().get("archivesBaseName").toString(); this.artifactVersion = getProject().getVersion().toString(); - String subprojectArtifactName = getProject().getProperties().get("archivesBaseName").toString(); - this.artifactPath = this.getBuildFile(String.format(ARTIFACT_STANDARD, subprojectArtifactName, artifactVersion)); - - if (getProject().hasProperty("baritone.forge_build")) { - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_STANDALONE)); - } else if (getProject().hasProperty("baritone.fabric_build")) { - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FABRIC_STANDALONE)); - } else { - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); - } + this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); + + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); } diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index ca06dd6f8..c4332c8b5 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -21,7 +21,9 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.OpenOption; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.security.MessageDigest; import java.util.Arrays; import java.util.List; @@ -59,8 +61,8 @@ protected void exec() throws Exception { Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); // Calculate all checksums and format them like "shasum" - List shasum = getAllDistJars().stream() - .filter(Files::exists) + List shasum = Files.list(getRootRelativeFile("dist/")) + .filter(e -> e.getFileName().toString().endsWith(".jar")) .map(path -> sha1(path) + " " + path.getFileName().toString()) .collect(Collectors.toList()); @@ -74,20 +76,6 @@ private static String getFileName(Path p) { return p.getFileName().toString(); } - private List getAllDistJars() { - return Arrays.asList( - getRootRelativeFile("dist/" + formatVersion(ARTIFACT_API)), - getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_API)), - getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)), - getRootRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)), - getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_STANDALONE)), - getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_STANDALONE)), - getRootRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)), - getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FABRIC_UNOPTIMIZED)), - getRootRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_UNOPTIMIZED)) - ); - } - private static synchronized String sha1(Path path) { try { if (SHA1_DIGEST == null) { From fcd20b10f11ec53fc1457cbc4b29448b3c853717 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 11 Jun 2022 11:54:30 +0000 Subject: [PATCH 321/935] WORKING TWEAKER!!! --- build.gradle | 2 +- src/launch/resources/mixins.baritone.json | 1 - tweaker/build.gradle | 4 +++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 857899043..2790bfbc8 100755 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ buildscript { plugins { id "architectury-plugin" version "3.4.135" - id 'dev.architectury.loom' version '0.11.0.254' apply false + id 'dev.architectury.loom' version '0.12.0.282' apply false } subprojects { diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index eb461292f..4b9ea4c91 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -2,7 +2,6 @@ "required": true, "package": "baritone.launch.mixins", "compatibilityLevel": "JAVA_17", - "refmap": "baritone-common-refmap.json", "verbose": false, "injectors": { "maxShiftBy": 2, diff --git a/tweaker/build.gradle b/tweaker/build.gradle index f6b114841..9facdb8d2 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -7,11 +7,13 @@ architectury { loom { mixin { - legacyRemapToNamespace = "official" + refmapTargetNamespace = "official" defaultRefmapName = "baritone-common-refmap.json" } } +loom.mixin.useLegacyMixinAp = false; + // ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts sourceSets { realmain { From 2741fc2683be6f49edbd4fdfdfce6ab5d3593217 Mon Sep 17 00:00:00 2001 From: Echocage Date: Mon, 27 Jun 2022 15:06:27 -0500 Subject: [PATCH 322/935] Swapped the order of checks within canSprintFromDescendInto --- src/main/java/baritone/pathing/path/PathExecutor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 7e4f76a3b..0ff113df8 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -536,12 +536,12 @@ private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse cur } private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { - if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { - return true; - } if (!MovementHelper.canWalkOn(ctx, current.getDest().add(current.getDirection()))) { return false; } + if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { + return true; + } if (next instanceof MovementTraverse && next.getDirection().down().equals(current.getDirection())) { return true; } From 57c4f9e1033cad41353c4bc74cee158d2041025a Mon Sep 17 00:00:00 2001 From: Echocage Date: Mon, 27 Jun 2022 18:38:54 -0500 Subject: [PATCH 323/935] Undid previous change, updated to instead check the next and the next_next block --- src/main/java/baritone/pathing/path/PathExecutor.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 0ff113df8..0ff7a3ac0 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -385,7 +385,7 @@ private boolean shouldSprintNextTick() { return false; } - if (pathPosition < path.length() - 2) { + if (pathPosition < path.length() - 3) { IMovement next = path.movements().get(pathPosition + 1); if (next instanceof MovementAscend && current.getDirection().up().equals(next.getDirection().down())) { // a descend then an ascend in the same direction @@ -396,7 +396,8 @@ private boolean shouldSprintNextTick() { logDebug("Skipping descend to straight ascend"); return true; } - if (canSprintFromDescendInto(ctx, current, next)) { + if (canSprintFromDescendInto(ctx, current, next) && + canSprintFromDescendInto(ctx, next, path.movements().get(pathPosition + 2))) { if (ctx.playerFeet().equals(current.getDest())) { pathPosition++; onChangeInPathPosition(); @@ -536,12 +537,12 @@ private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse cur } private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { - if (!MovementHelper.canWalkOn(ctx, current.getDest().add(current.getDirection()))) { - return false; - } if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { return true; } + if (!MovementHelper.canWalkOn(ctx, current.getDest().add(current.getDirection()))) { + return false; + } if (next instanceof MovementTraverse && next.getDirection().down().equals(current.getDirection())) { return true; } From 441dceb73174cfc376eaf455ba5673b3679a8102 Mon Sep 17 00:00:00 2001 From: Echocage Date: Wed, 29 Jun 2022 17:54:28 -0500 Subject: [PATCH 324/935] Narrowed scope and we now only call canSprintFromDescendInto when our next & next_next movements are both MovementDescends --- .../baritone/pathing/path/PathExecutor.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 0ff7a3ac0..17fa788db 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -73,8 +73,8 @@ public class PathExecutor implements IPathExecutor, Helper { private HashSet toPlace = new HashSet<>(); private HashSet toWalkInto = new HashSet<>(); - private PathingBehavior behavior; - private IPlayerContext ctx; + private final PathingBehavior behavior; + private final IPlayerContext ctx; private boolean sprintNextTick; @@ -385,7 +385,7 @@ private boolean shouldSprintNextTick() { return false; } - if (pathPosition < path.length() - 3) { + if (pathPosition < path.length() - 2) { IMovement next = path.movements().get(pathPosition + 1); if (next instanceof MovementAscend && current.getDirection().up().equals(next.getDirection().down())) { // a descend then an ascend in the same direction @@ -396,13 +396,21 @@ private boolean shouldSprintNextTick() { logDebug("Skipping descend to straight ascend"); return true; } - if (canSprintFromDescendInto(ctx, current, next) && - canSprintFromDescendInto(ctx, next, path.movements().get(pathPosition + 2))) { + if (canSprintFromDescendInto(ctx, current, next)) { + + if (next instanceof MovementDescend && pathPosition < path.length() - 3) { + IMovement next_next = path.movements().get(pathPosition + 2); + if (next_next instanceof MovementDescend && !canSprintFromDescendInto(ctx, next, next_next)) { + return false; + } + + } if (ctx.playerFeet().equals(current.getDest())) { pathPosition++; onChangeInPathPosition(); onTick(); } + return true; } //logDebug("Turning off sprinting " + movement + " " + next + " " + movement.getDirection() + " " + next.getDirection().down() + " " + next.getDirection().down().equals(movement.getDirection())); From 3e7f9039c4230dfcae3096e6628d6d90b0220e3b Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Wed, 6 Jul 2022 14:38:33 +0100 Subject: [PATCH 325/935] Don't construct new optionals in movement helper --- .../pathing/movement/MovementHelper.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index dc4ad31b1..e3ad6800e 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -47,6 +47,8 @@ * @author leijurv */ public interface MovementHelper extends ActionCosts, Helper { + static final Optional TRUE = Optional.of(true); + static final Optional FALSE = Optional.of(false); static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { if (!bsi.worldBorder.canPlaceAt(x, y)) { @@ -106,15 +108,15 @@ static Optional canWalkThroughBlockState(IBlockState state) { Block block = state.getBlock(); if (block == Blocks.AIR) { - return Optional.of(true); + return TRUE; } if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block instanceof BlockTrapDoor || block == Blocks.END_ROD) { - return Optional.of(false); + return FALSE; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { - return Optional.of(false); + return FALSE; } if (block instanceof BlockDoor || block instanceof BlockFenceGate) { @@ -130,7 +132,7 @@ static Optional canWalkThroughBlockState(IBlockState state) { if (block instanceof BlockSnow) { if (state.getValue(BlockSnow.LAYERS) >= 3) { - return Optional.of(false); + return FALSE; } return Optional.empty(); @@ -138,14 +140,14 @@ static Optional canWalkThroughBlockState(IBlockState state) { if (block instanceof BlockLiquid) { if (state.getValue(BlockLiquid.LEVEL) != 0) { - return Optional.of(false); + return FALSE; } else { return Optional.empty(); } } if (block instanceof BlockCauldron) { - return Optional.of(false); + return FALSE; } try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information @@ -346,19 +348,19 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockSta static Optional canWalkOnBlockState(IBlockState state) { Block block = state.getBlock(); if (block == Blocks.AIR || block == Blocks.MAGMA) { - return Optional.of(false); + return FALSE; } if (state.isBlockNormalCube()) { - return Optional.of(true); + return TRUE; } if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this - return Optional.of(true); + return TRUE; } if (block == Blocks.FARMLAND || block == Blocks.GRASS_PATH) { - return Optional.of(true); + return TRUE; } if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { - return Optional.of(true); + return TRUE; } if (isWater(block)) { return Optional.empty(); @@ -370,11 +372,11 @@ static Optional canWalkOnBlockState(IBlockState state) { if (block instanceof BlockSlab) { if (!Baritone.settings().allowWalkOnBottomSlab.value) { if (((BlockSlab) block).isDouble()) { - return Optional.of(true); + return TRUE; } return Optional.of(state.getValue(BlockSlab.HALF) != BlockSlab.EnumBlockHalf.BOTTOM); } - return Optional.of(true); + return TRUE; } return Optional.of(block instanceof BlockStairs); From 8d480cefb96b5e868717af7910a18fd678483239 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Wed, 6 Jul 2022 14:45:54 +0100 Subject: [PATCH 326/935] Switch to throwable and readd check for glass / stained glass --- .../java/baritone/pathing/movement/MovementHelper.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index e3ad6800e..b710d7f68 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -152,8 +152,8 @@ static Optional canWalkThroughBlockState(IBlockState state) { try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information return Optional.of(block.isPassable(null, null)); - } catch (NullPointerException exception) { - System.out.println("Error"); + } catch (Throwable exception) { + System.out.println("The block " + state.getBlock().getLocalizedName() + " requires a special case due to the exception " + exception.getMessage()); return Optional.empty(); } } @@ -369,6 +369,10 @@ static Optional canWalkOnBlockState(IBlockState state) { return Optional.empty(); } + if (block == Blocks.GLASS || block == Blocks.STAINED_GLASS) { + return TRUE; + } + if (block instanceof BlockSlab) { if (!Baritone.settings().allowWalkOnBottomSlab.value) { if (((BlockSlab) block).isDouble()) { From 51275b3a65c83851f0d9177408bc896a25e31df8 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 9 Jul 2022 22:06:39 -0700 Subject: [PATCH 327/935] make #paws be an alias for #pause --- .../baritone/command/defaults/ExecutionControlCommands.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index 8a53e7d41..5b3f85db6 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -79,7 +79,7 @@ public String displayName0() { } } ); - pauseCommand = new Command(baritone, "pause", "p") { + pauseCommand = new Command(baritone, "pause", "p", "paws") { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); From 4e2095d25114dd88fa01baf21a805d3f6e1b8ee9 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 9 Jul 2022 22:15:20 -0700 Subject: [PATCH 328/935] almost forgot --- .../baritone/command/defaults/ExecutionControlCommands.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index 5b3f85db6..eaab75286 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -112,7 +112,7 @@ public List getLongDesc() { ); } }; - resumeCommand = new Command(baritone, "resume", "r", "unpause") { + resumeCommand = new Command(baritone, "resume", "r", "unpause", "unpaws") { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); From fdcdcbb85fa077c156f7ecb744a06a2ea762d613 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Thu, 14 Jul 2022 12:49:47 +0100 Subject: [PATCH 329/935] Switch to using an int[] for storing precomputed data, and also use lazy loading --- .../pathing/precompute/PrecomputedData.java | 58 +++++++++++++-- .../PrecomputedDataForBlockState.java | 73 ------------------- 2 files changed, 52 insertions(+), 79 deletions(-) delete mode 100644 src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 42ff69b23..3a0faced6 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -27,27 +27,73 @@ import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; +import java.util.Arrays; import java.util.Optional; import static baritone.pathing.movement.MovementHelper.isFlowing; import static baritone.pathing.movement.MovementHelper.isWater; public class PrecomputedData { // TODO add isFullyPassable + private final int[] data = new int[Block.BLOCK_STATE_IDS.size()]; // Has to be of type boolean due to otherwise it has a generic type - PrecomputedDataForBlockState canWalkOn; - PrecomputedDataForBlockState canWalkThrough; + private final int completedMask = 0b1; + private final int canWalkOnMask = 0b10; + private final int canWalkOnSpecialMask = 0b100; + private final int canWalkThroughMask = 0b1000; + private final int canWalkThroughSpecialMask = 0b10000; public PrecomputedData() { - canWalkOn = new PrecomputedDataForBlockState(MovementHelper::canWalkOnBlockState, MovementHelper::canWalkOnPosition); + Arrays.fill(data, 0); + } + + private void fillData(int id, IBlockState state) { + Optional canWalkOnState = MovementHelper.canWalkOnBlockState(state); + if (canWalkOnState.isPresent()) { + if (canWalkOnState.get()) { + data[id] = data[id] | canWalkOnMask; + } + } else { + data[id] = data[id] | canWalkOnSpecialMask; + } + + Optional canWalkThroughState = MovementHelper.canWalkThroughBlockState(state); + if (canWalkThroughState.isPresent()) { + if (canWalkThroughState.get()) { + data[id] = data[id] | canWalkThroughMask; + } + } else { + data[id] = data[id] | canWalkThroughSpecialMask; + } + - canWalkThrough = new PrecomputedDataForBlockState(MovementHelper::canWalkThroughBlockState, MovementHelper::canWalkThroughPosition); + data[id] = data[id] | completedMask; } public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { - return canWalkOn.get(bsi, x, y, z, state); + int id = Block.BLOCK_STATE_IDS.get(state); + + if ((data[id] & completedMask) == 0) { // we need to fill in the data + fillData(id, state); + } + + if ((data[id] & canWalkOnSpecialMask) != 0) { + return MovementHelper.canWalkOnPosition(bsi, x, y, z, state); + } else { + return (data[id] & canWalkOnMask) != 0; + } } public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { - return canWalkThrough.get(bsi, x, y, z, state); + int id = Block.BLOCK_STATE_IDS.get(state); + + if ((data[id] & completedMask) == 0) { // we need to fill in the data + fillData(id, state); + } + + if ((data[id] & canWalkThroughSpecialMask) != 0) { + return MovementHelper.canWalkOnPosition(bsi, x, y, z, state); + } else { + return (data[id] & canWalkThroughMask) != 0; + } } } diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java b/src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java deleted file mode 100644 index 533c54954..000000000 --- a/src/main/java/baritone/pathing/precompute/PrecomputedDataForBlockState.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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.pathing.precompute; - -import baritone.utils.BlockStateInterface; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.world.IBlockAccess; - -import java.lang.reflect.Array; -import java.util.Iterator; -import java.util.Optional; -import java.util.function.Function; - -public class PrecomputedDataForBlockState { - boolean[] dataPerBlockState = new boolean[Block.BLOCK_STATE_IDS.size()]; // Has to be of type boolean due to otherwise it has a generic type - boolean[] specialCases = new boolean[Block.BLOCK_STATE_IDS.size()]; // We can also be certain that size will return the highest as it fills in all positions with null until we get to the highest block state - - private final SpecialCaseFunction specialCaseHandler; - private final Function> precomputer; - - public PrecomputedDataForBlockState(Function> precomputer, SpecialCaseFunction specialCaseHandler) { - this.specialCaseHandler = specialCaseHandler; - this.precomputer = precomputer; - - this.refresh(); - } - - public void refresh() { - for (Iterator it = Block.BLOCK_STATE_IDS.iterator(); it.hasNext(); ) { // Can be replaced with an enhanced for because that breaks github actions for some reason I can't be bothered to dig into - IBlockState state = it.next(); // state should never be null - Optional applied = precomputer.apply(state); - - int id = Block.BLOCK_STATE_IDS.get(state); - - if (applied.isPresent()) { - dataPerBlockState[id] = applied.get(); - specialCases[id] = false; - } else { - dataPerBlockState[id] = false; - specialCases[id] = true; - } - } - } - - public boolean get(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { - int id = Block.BLOCK_STATE_IDS.get(state); - if (specialCases[id]) { - return specialCaseHandler.apply(bsi, x, y, z, state); - } else { - return dataPerBlockState[id]; - } - } - - interface SpecialCaseFunction { - public boolean apply(BlockStateInterface bsi, int x, int y, int z, IBlockState blockState); - } -} From 6b0fb1721bced0de9a33bb021bb96456c5b4d1f1 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Thu, 14 Jul 2022 17:18:02 +0100 Subject: [PATCH 330/935] These should be all the suggested changes for the caching of can walk through block states --- .../pathing/movement/MovementHelper.java | 16 +++++++++++----- .../movement/movements/MovementPillar.java | 2 +- .../pathing/precompute/PrecomputedData.java | 1 + src/main/java/baritone/process/MineProcess.java | 3 ++- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index b710d7f68..58a166535 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -30,6 +30,7 @@ import net.minecraft.block.*; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -98,10 +99,12 @@ static boolean canWalkThrough(CalculationContext context, int x, int y, int z) { return context.precomputedData.canWalkThrough(context.bsi, x, y, z, context.get(x, y, z)); } - static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { - Optional canWalkOn = canWalkThroughBlockState(state); - return canWalkOn.orElseGet(() -> canWalkThroughPosition(bsi, x, y, z, state)); + Optional canWalkThrough = canWalkThroughBlockState(state); + if (canWalkThrough.isPresent()) { + return canWalkThrough.get(); + } + return canWalkThroughPosition(bsi, x, y, z, state); } static Optional canWalkThroughBlockState(IBlockState state) { @@ -342,7 +345,10 @@ static boolean avoidWalkingInto(Block block) { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Optional canWalkOn = canWalkOnBlockState(state); - return canWalkOn.orElseGet(() -> canWalkOnPosition(bsi, x, y, z, state)); + if (canWalkOn.isPresent()) { + return canWalkOn.get(); + } + return canWalkOnPosition(bsi, x, y, z, state); } static Optional canWalkOnBlockState(IBlockState state) { @@ -463,7 +469,7 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, IBlockState state, boolean includeFalling) { Block block = state.getBlock(); - if (!canWalkThrough(context.bsi, x, y, z, state)) { + if (!canWalkThrough(context, x, y, z, state)) { if (block instanceof BlockLiquid) { return COST_INF; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index bcd420ecc..73731aacd 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -120,7 +120,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { } } // this is commented because it may have had a purpose, but it's very unclear what it was. it's from the minebot era. - //if (!context.precomputedData.canWalkOn(chkPos, check) || context.precomputedData.canWalkThrough(chkPos, check)) {//if the block above where we want to break is not a full block, don't do it + //if (!MovementHelper.canWalkOn(context, chkPos, check) || MovementHelper.canWalkThrough(context, chkPos, check)) {//if the block above where we want to break is not a full block, don't do it // TODO why does canWalkThrough mean this action is COST_INF? // BlockFalling makes sense, and !canWalkOn deals with weird cases like if it were lava // but I don't understand why canWalkThrough makes it impossible diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 3a0faced6..01eb6dfca 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -24,6 +24,7 @@ import baritone.utils.BlockStateInterface; import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 988089347..586c57627 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -28,6 +28,7 @@ import baritone.cache.WorldScanner; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; +import baritone.pathing.precompute.PrecomputedData; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import net.minecraft.block.Block; @@ -111,7 +112,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; List curr = new ArrayList<>(knownOreLocations); if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain - CalculationContext context = new CalculationContext(baritone, true, null); // Precomputed data should never be used on this calculation context + CalculationContext context = new CalculationContext(baritone, true, new PrecomputedData()); Baritone.getExecutor().execute(() -> rescan(curr, context)); } if (Baritone.settings().legitMine.value) { From 85ab317c6cb7b38cda25105deb6d04336560185a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 21:35:30 -0700 Subject: [PATCH 331/935] simplify, remove setting changed event, always construct new precomputeddata --- src/api/java/baritone/api/Settings.java | 14 ++------ .../api/event/events/SettingChangedEvent.java | 33 ------------------- .../listener/AbstractGameEventListener.java | 3 -- .../event/listener/IGameEventListener.java | 7 ---- .../java/baritone/api/utils/SettingsUtil.java | 2 +- .../baritone/behavior/PathingBehavior.java | 15 +-------- .../baritone/command/defaults/SetCommand.java | 2 +- .../java/baritone/event/GameEventHandler.java | 5 --- .../pathing/movement/CalculationContext.java | 6 ++-- .../baritone/pathing/path/PathExecutor.java | 2 +- .../pathing/precompute/PrecomputedData.java | 31 +++++------------ .../java/baritone/process/BuilderProcess.java | 9 +++-- .../baritone/process/GetToBlockProcess.java | 2 +- .../java/baritone/process/MineProcess.java | 2 +- 14 files changed, 25 insertions(+), 108 deletions(-) delete mode 100644 src/api/java/baritone/api/event/events/SettingChangedEvent.java diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index fd120585c..98e8700d7 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -17,7 +17,6 @@ package baritone.api; -import baritone.api.event.events.SettingChangedEvent; import baritone.api.utils.NotificationHelper; import baritone.api.utils.SettingsUtil; import baritone.api.utils.TypeUtils; @@ -35,8 +34,8 @@ import java.lang.reflect.Type; import java.util.List; import java.util.*; -import java.util.function.Consumer; import java.util.function.BiConsumer; +import java.util.function.Consumer; /** * Baritone's settings. Settings apply to all Baritone instances. @@ -197,7 +196,7 @@ public final class Settings { * Blocks that Baritone is not allowed to break */ public final Setting> blocksToDisallowBreaking = new Setting<>(new ArrayList<>( - // Leave Empty by Default + // Leave Empty by Default )); /** @@ -913,7 +912,7 @@ public final class Settings { /** * Only build the selected part of schematics */ - public final Setting buildOnlySelection = new Setting<>(false); + public final Setting buildOnlySelection = new Setting<>(false); /** * How far to move before repeating the build. 0 to disable repeating on a certain axis, 0,0,0 to disable entirely @@ -1303,13 +1302,6 @@ public final T get() { return value; } - public void set(T value) { - this.value = value; - if (BaritoneAPI.getProvider() != null) { - BaritoneAPI.getProvider().getAllBaritones().forEach(iBaritone -> iBaritone.getGameEventHandler().onSettingChanged(new SettingChangedEvent(this))); - } - } - public final String getName() { return name; } diff --git a/src/api/java/baritone/api/event/events/SettingChangedEvent.java b/src/api/java/baritone/api/event/events/SettingChangedEvent.java deleted file mode 100644 index d92384e03..000000000 --- a/src/api/java/baritone/api/event/events/SettingChangedEvent.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of Baritone. - * - * Baritone is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Baritone is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Baritone. If not, see . - */ - -package baritone.api.event.events; - -import baritone.api.Settings; - -public class SettingChangedEvent { - - private final Settings.Setting setting; - - public SettingChangedEvent(Settings.Setting setting) { - this.setting = setting; - } - - public Settings.Setting getSetting() { - return setting; - } -} diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index 9f1d2418a..9eac8de46 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -71,7 +71,4 @@ default void onPlayerDeath() {} @Override default void onPathEvent(PathEvent event) {} - - @Override - default void onSettingChanged(SettingChangedEvent event) {} } diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index 28afdfffe..b074e978b 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -144,11 +144,4 @@ public interface IGameEventListener { * @param event The event */ void onPathEvent(PathEvent event); - - /** - * When the player changes a setting - * - * @param event The event - */ - void onSettingChanged(SettingChangedEvent event); } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index b098c1e0f..8b4b90b17 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -199,7 +199,7 @@ public static void parseAndApply(Settings settings, String settingName, String s if (!intendedType.isInstance(parsed)) { throw new IllegalStateException(ioMethod + " parser returned incorrect type, expected " + intendedType + " got " + parsed + " which is " + parsed.getClass()); } - setting.set(parsed); + setting.value = parsed; } private interface ISettingParser { diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index d1ca21301..33ef14ef2 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -33,7 +33,6 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; import baritone.pathing.path.PathExecutor; -import baritone.pathing.precompute.PrecomputedData; import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.pathing.Favoring; @@ -75,11 +74,8 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, private final LinkedBlockingQueue toDispatch = new LinkedBlockingQueue<>(); - public PrecomputedData precomputedData; - public PathingBehavior(Baritone baritone) { super(baritone); - precomputedData = new PrecomputedData(); } private void queuePathEvent(PathEvent event) { @@ -104,10 +100,6 @@ public void onTick(TickEvent event) { return; } - if (ticksElapsedSoFar % 200 == 0) { - precomputedData = new PrecomputedData(); // This is here for now in case settings aren't changed in normal ways, should mean it is updated whatever once every 10 seconds - } - expectedSegmentStart = pathStart(); baritone.getPathingControlManager().preTick(); tickPath(); @@ -268,7 +260,7 @@ public boolean secretInternalSetGoalAndPath(PathingCommand command) { if (command instanceof PathingCommandContext) { context = ((PathingCommandContext) command).desiredCalcContext; } else { - context = new CalculationContext(baritone, true, precomputedData); + context = new CalculationContext(baritone, true); } if (goal == null) { return false; @@ -465,11 +457,6 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class return feet; } - @Override - public void onSettingChanged(SettingChangedEvent event) { - this.precomputedData = new PrecomputedData(); - } - /** * In a new thread, pathfind to target blockpos * diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 1b395f5a9..fd9bb0457 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -148,7 +148,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } //noinspection unchecked Settings.Setting asBoolSetting = (Settings.Setting) setting; - asBoolSetting.set(!asBoolSetting.value); + asBoolSetting.value ^= true; logDirect(String.format( "Toggled setting %s to %s", setting.getName(), diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 1bdba6b9a..8916f7f37 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -156,11 +156,6 @@ public void onPathEvent(PathEvent event) { listeners.forEach(l -> l.onPathEvent(event)); } - @Override - public void onSettingChanged(SettingChangedEvent event) { - listeners.forEach(l -> l.onSettingChanged(event)); - } - @Override public final void registerEventListener(IGameEventListener listener) { this.listeners.add(listener); diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index b4782fb59..5a8d98390 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -80,11 +80,11 @@ public class CalculationContext { public final PrecomputedData precomputedData; public CalculationContext(IBaritone baritone) { - this(baritone, false, new PrecomputedData()); + this(baritone, false); } - public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread, PrecomputedData precomputedData) { - this.precomputedData = precomputedData; + public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { + this.precomputedData = new PrecomputedData(); this.safeForThreadedUse = forUseOnAnotherThread; this.baritone = baritone; EntityPlayerSP player = baritone.getPlayerContext().player(); diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index b28abb618..2ac67e221 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -350,7 +350,7 @@ private boolean shouldSprintNextTick() { behavior.baritone.getInputOverrideHandler().setInputForceState(Input.SPRINT, false); // first and foremost, if allowSprint is off, or if we don't have enough hunger, don't try and sprint - if (!new CalculationContext(behavior.baritone, false, null).canSprint) { + if (!new CalculationContext(behavior.baritone, false).canSprint) { return false; } IMovement current = path.movements().get(pathPosition); diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 01eb6dfca..99a25944a 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -17,25 +17,16 @@ package baritone.pathing.precompute; -import baritone.Baritone; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.IPlayerContext; import baritone.pathing.movement.MovementHelper; import baritone.utils.BlockStateInterface; -import net.minecraft.block.*; +import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; -import java.util.Arrays; import java.util.Optional; -import static baritone.pathing.movement.MovementHelper.isFlowing; -import static baritone.pathing.movement.MovementHelper.isWater; - public class PrecomputedData { // TODO add isFullyPassable - private final int[] data = new int[Block.BLOCK_STATE_IDS.size()]; // Has to be of type boolean due to otherwise it has a generic type + + private final int[] data = new int[Block.BLOCK_STATE_IDS.size()]; private final int completedMask = 0b1; private final int canWalkOnMask = 0b10; @@ -43,31 +34,27 @@ public class PrecomputedData { // TODO add isFullyPassable private final int canWalkThroughMask = 0b1000; private final int canWalkThroughSpecialMask = 0b10000; - public PrecomputedData() { - Arrays.fill(data, 0); - } - private void fillData(int id, IBlockState state) { Optional canWalkOnState = MovementHelper.canWalkOnBlockState(state); if (canWalkOnState.isPresent()) { if (canWalkOnState.get()) { - data[id] = data[id] | canWalkOnMask; + data[id] |= canWalkOnMask; } } else { - data[id] = data[id] | canWalkOnSpecialMask; + data[id] |= canWalkOnSpecialMask; } Optional canWalkThroughState = MovementHelper.canWalkThroughBlockState(state); if (canWalkThroughState.isPresent()) { if (canWalkThroughState.get()) { - data[id] = data[id] | canWalkThroughMask; + data[id] |= canWalkThroughMask; } } else { - data[id] = data[id] | canWalkThroughSpecialMask; + data[id] |= canWalkThroughSpecialMask; } - data[id] = data[id] | completedMask; + data[id] |= completedMask; } public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { @@ -92,7 +79,7 @@ public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo } if ((data[id] & canWalkThroughSpecialMask) != 0) { - return MovementHelper.canWalkOnPosition(bsi, x, y, z, state); + return MovementHelper.canWalkThroughPosition(bsi, x, y, z, state); } else { return (data[id] & canWalkThroughMask) != 0; } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 39c222488..181c58d77 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -26,9 +26,9 @@ import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; import baritone.api.schematic.FillSchematic; -import baritone.api.schematic.SubstituteSchematic; import baritone.api.schematic.ISchematic; import baritone.api.schematic.IStaticSchematic; +import baritone.api.schematic.SubstituteSchematic; import baritone.api.schematic.format.ISchematicFormat; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.RayTraceUtils; @@ -38,13 +38,12 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Movement; import baritone.pathing.movement.MovementHelper; -import baritone.pathing.precompute.PrecomputedData; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; import baritone.utils.schematic.MapArtSchematic; -import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.SchematicSystem; +import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.schematica.SchematicaHelper; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -607,7 +606,7 @@ private void fullRecalc(BuilderCalculationContext bcc) { } // this is not in render distance if (!observedCompleted.contains(BetterBlockPos.longHash(blockX, blockY, blockZ)) - && !Baritone.settings().buildSkipBlocks.value.contains(schematic.desiredState(x, y, z, current, this.approxPlaceable).getBlock())) { + && !Baritone.settings().buildSkipBlocks.value.contains(schematic.desiredState(x, y, z, current, this.approxPlaceable).getBlock())) { // and we've never seen this position be correct // therefore mark as incorrect incorrectPositions.add(new BetterBlockPos(blockX, blockY, blockZ)); @@ -894,7 +893,7 @@ public class BuilderCalculationContext extends CalculationContext { private final int originZ; public BuilderCalculationContext() { - super(BuilderProcess.this.baritone, true, new PrecomputedData()); // wew lad + super(BuilderProcess.this.baritone, true); // wew lad this.placeable = approxPlaceable(9); this.schematic = BuilderProcess.this.schematic; this.originX = origin.getX(); diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 2d1e0e985..16fc3dda5 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -158,7 +158,7 @@ public synchronized boolean blacklistClosest() { public class GetToBlockCalculationContext extends CalculationContext { public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { - super(GetToBlockProcess.super.baritone, forUseOnAnotherThread, null); + super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); } @Override diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 586c57627..23631f27f 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -112,7 +112,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; List curr = new ArrayList<>(knownOreLocations); if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain - CalculationContext context = new CalculationContext(baritone, true, new PrecomputedData()); + CalculationContext context = new CalculationContext(baritone, true); Baritone.getExecutor().execute(() -> rescan(curr, context)); } if (Baritone.settings().legitMine.value) { From 8018dac39603f31f06021163d662b7b213207566 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 21:38:02 -0700 Subject: [PATCH 332/935] fix default case that instantiated an optional for non stairs --- .../baritone/pathing/movement/MovementHelper.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 58a166535..cc7b42266 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -30,7 +30,6 @@ import net.minecraft.block.*; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -48,8 +47,9 @@ * @author leijurv */ public interface MovementHelper extends ActionCosts, Helper { - static final Optional TRUE = Optional.of(true); - static final Optional FALSE = Optional.of(false); + + Optional TRUE = Optional.of(true); + Optional FALSE = Optional.of(false); static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { if (!bsi.worldBorder.canPlaceAt(x, y)) { @@ -333,7 +333,7 @@ static boolean avoidWalkingInto(Block block) { * Can I walk on this block without anything weird happening like me falling * through? Includes water because we know that we automatically jump on * water - * + *

* If changing something in this function remember to also change it in precomputed data * * @param bsi Block state provider @@ -389,7 +389,11 @@ static Optional canWalkOnBlockState(IBlockState state) { return TRUE; } - return Optional.of(block instanceof BlockStairs); + if (block instanceof BlockStairs) { + return TRUE; + } + + return FALSE; } static boolean canWalkOnPosition(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { From 5b7bee977bf9f8e6e2bcfaf6bc53ea80e1750ab6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 21:38:38 -0700 Subject: [PATCH 333/935] also don't construct an optional for slabs --- src/main/java/baritone/pathing/movement/MovementHelper.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index cc7b42266..a29e06bb6 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -384,7 +384,10 @@ static Optional canWalkOnBlockState(IBlockState state) { if (((BlockSlab) block).isDouble()) { return TRUE; } - return Optional.of(state.getValue(BlockSlab.HALF) != BlockSlab.EnumBlockHalf.BOTTOM); + if (state.getValue(BlockSlab.HALF) != BlockSlab.EnumBlockHalf.BOTTOM) { + return TRUE; + } + return FALSE; } return TRUE; } From 93fa6cf8753c0d2d8b3da7ab3b8203bd6848125d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 21:42:38 -0700 Subject: [PATCH 334/935] introduce MAYBE and fix more allocation cases --- .../pathing/movement/MovementHelper.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index a29e06bb6..4a45cd990 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -50,6 +50,7 @@ public interface MovementHelper extends ActionCosts, Helper { Optional TRUE = Optional.of(true); Optional FALSE = Optional.of(false); + Optional MAYBE = Optional.empty(); static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { if (!bsi.worldBorder.canPlaceAt(x, y)) { @@ -126,11 +127,14 @@ static Optional canWalkThroughBlockState(IBlockState state) { // Because there's no nice method in vanilla to check if a door is openable or not, we just have to assume // that anything that isn't an iron door isn't openable, ignoring that some doors introduced in mods can't // be opened by just interacting. - return Optional.of(block != Blocks.IRON_DOOR); + if (block == Blocks.IRON_DOOR) { + return FALSE; + } + return TRUE; } if (block == Blocks.CARPET) { - return Optional.empty(); + return MAYBE; } if (block instanceof BlockSnow) { @@ -138,14 +142,14 @@ static Optional canWalkThroughBlockState(IBlockState state) { return FALSE; } - return Optional.empty(); + return MAYBE; } if (block instanceof BlockLiquid) { if (state.getValue(BlockLiquid.LEVEL) != 0) { return FALSE; } else { - return Optional.empty(); + return MAYBE; } } @@ -157,7 +161,7 @@ static Optional canWalkThroughBlockState(IBlockState state) { return Optional.of(block.isPassable(null, null)); } catch (Throwable exception) { System.out.println("The block " + state.getBlock().getLocalizedName() + " requires a special case due to the exception " + exception.getMessage()); - return Optional.empty(); + return MAYBE; } } @@ -369,10 +373,10 @@ static Optional canWalkOnBlockState(IBlockState state) { return TRUE; } if (isWater(block)) { - return Optional.empty(); + return MAYBE; } if (Baritone.settings().assumeWalkOnLava.value && MovementHelper.isLava(block)) { - return Optional.empty(); + return MAYBE; } if (block == Blocks.GLASS || block == Blocks.STAINED_GLASS) { From 5c7cae9ab0585c2026301da3b99da01da85fef3b Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 21:43:14 -0700 Subject: [PATCH 335/935] fix literally wrong comment that did not match subsequent code --- src/main/java/baritone/pathing/movement/MovementHelper.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 4a45cd990..c96dee789 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -124,9 +124,7 @@ static Optional canWalkThroughBlockState(IBlockState state) { } if (block instanceof BlockDoor || block instanceof BlockFenceGate) { - // Because there's no nice method in vanilla to check if a door is openable or not, we just have to assume - // that anything that isn't an iron door isn't openable, ignoring that some doors introduced in mods can't - // be opened by just interacting. + // TODO this assumes that all doors in all mods are openable if (block == Blocks.IRON_DOOR) { return FALSE; } From 5c9aeab6b4b3c276ec704306ece5fefebcf2ec76 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 21:44:42 -0700 Subject: [PATCH 336/935] add cmt --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index c96dee789..b121a0b3c 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -102,7 +102,7 @@ static boolean canWalkThrough(CalculationContext context, int x, int y, int z) { static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Optional canWalkThrough = canWalkThroughBlockState(state); - if (canWalkThrough.isPresent()) { + if (canWalkThrough.isPresent()) { // note: don't replace this with the functional style, because the lambda is impure (it captures local variables as context), meaning it allocates return canWalkThrough.get(); } return canWalkThroughPosition(bsi, x, y, z, state); From ee16eb7fde54055bd4374a51f571a71b120bbb1c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 21:47:18 -0700 Subject: [PATCH 337/935] funnier this way --- .../pathing/movement/MovementHelper.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index b121a0b3c..f915dd781 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -48,8 +48,8 @@ */ public interface MovementHelper extends ActionCosts, Helper { - Optional TRUE = Optional.of(true); - Optional FALSE = Optional.of(false); + Optional YES = Optional.of(true); + Optional NO = Optional.of(false); Optional MAYBE = Optional.empty(); static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { @@ -112,23 +112,23 @@ static Optional canWalkThroughBlockState(IBlockState state) { Block block = state.getBlock(); if (block == Blocks.AIR) { - return TRUE; + return YES; } if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block instanceof BlockTrapDoor || block == Blocks.END_ROD) { - return FALSE; + return NO; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { - return FALSE; + return NO; } if (block instanceof BlockDoor || block instanceof BlockFenceGate) { // TODO this assumes that all doors in all mods are openable if (block == Blocks.IRON_DOOR) { - return FALSE; + return NO; } - return TRUE; + return YES; } if (block == Blocks.CARPET) { @@ -137,7 +137,7 @@ static Optional canWalkThroughBlockState(IBlockState state) { if (block instanceof BlockSnow) { if (state.getValue(BlockSnow.LAYERS) >= 3) { - return FALSE; + return NO; } return MAYBE; @@ -145,14 +145,14 @@ static Optional canWalkThroughBlockState(IBlockState state) { if (block instanceof BlockLiquid) { if (state.getValue(BlockLiquid.LEVEL) != 0) { - return FALSE; + return NO; } else { return MAYBE; } } if (block instanceof BlockCauldron) { - return FALSE; + return NO; } try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information @@ -356,19 +356,19 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockSta static Optional canWalkOnBlockState(IBlockState state) { Block block = state.getBlock(); if (block == Blocks.AIR || block == Blocks.MAGMA) { - return FALSE; + return NO; } if (state.isBlockNormalCube()) { - return TRUE; + return YES; } if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this - return TRUE; + return YES; } if (block == Blocks.FARMLAND || block == Blocks.GRASS_PATH) { - return TRUE; + return YES; } if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { - return TRUE; + return YES; } if (isWater(block)) { return MAYBE; @@ -378,27 +378,27 @@ static Optional canWalkOnBlockState(IBlockState state) { } if (block == Blocks.GLASS || block == Blocks.STAINED_GLASS) { - return TRUE; + return YES; } if (block instanceof BlockSlab) { if (!Baritone.settings().allowWalkOnBottomSlab.value) { if (((BlockSlab) block).isDouble()) { - return TRUE; + return YES; } if (state.getValue(BlockSlab.HALF) != BlockSlab.EnumBlockHalf.BOTTOM) { - return TRUE; + return YES; } - return FALSE; + return NO; } - return TRUE; + return YES; } if (block instanceof BlockStairs) { - return TRUE; + return YES; } - return FALSE; + return NO; } static boolean canWalkOnPosition(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { From 0c1fec5d1efe85c62c04a19eb0ba5203fd8ea0b7 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 21:54:32 -0700 Subject: [PATCH 338/935] crucial performance optimization --- .../pathing/precompute/PrecomputedData.java | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 99a25944a..6d3a742cd 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -34,54 +34,60 @@ public class PrecomputedData { // TODO add isFullyPassable private final int canWalkThroughMask = 0b1000; private final int canWalkThroughSpecialMask = 0b10000; - private void fillData(int id, IBlockState state) { + private int fillData(int id, IBlockState state) { + int blockData = 0; + Optional canWalkOnState = MovementHelper.canWalkOnBlockState(state); if (canWalkOnState.isPresent()) { if (canWalkOnState.get()) { - data[id] |= canWalkOnMask; + blockData |= canWalkOnMask; } } else { - data[id] |= canWalkOnSpecialMask; + blockData |= canWalkOnSpecialMask; } Optional canWalkThroughState = MovementHelper.canWalkThroughBlockState(state); if (canWalkThroughState.isPresent()) { if (canWalkThroughState.get()) { - data[id] |= canWalkThroughMask; + blockData |= canWalkThroughMask; } } else { - data[id] |= canWalkThroughSpecialMask; + blockData |= canWalkThroughSpecialMask; } + blockData |= completedMask; - data[id] |= completedMask; + data[id] = blockData; // in theory, this is thread "safe" because every thread should compute the exact same int to write? + return blockData; } public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { int id = Block.BLOCK_STATE_IDS.get(state); + int blockData = data[id]; - if ((data[id] & completedMask) == 0) { // we need to fill in the data - fillData(id, state); + if ((blockData & completedMask) == 0) { // we need to fill in the data + blockData = fillData(id, state); } - if ((data[id] & canWalkOnSpecialMask) != 0) { + if ((blockData & canWalkOnSpecialMask) != 0) { return MovementHelper.canWalkOnPosition(bsi, x, y, z, state); } else { - return (data[id] & canWalkOnMask) != 0; + return (blockData & canWalkOnMask) != 0; } } public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { int id = Block.BLOCK_STATE_IDS.get(state); + int blockData = data[id]; - if ((data[id] & completedMask) == 0) { // we need to fill in the data - fillData(id, state); + if ((blockData & completedMask) == 0) { // we need to fill in the data + blockData = fillData(id, state); } - if ((data[id] & canWalkThroughSpecialMask) != 0) { + if ((blockData & canWalkThroughSpecialMask) != 0) { return MovementHelper.canWalkThroughPosition(bsi, x, y, z, state); } else { - return (data[id] & canWalkThroughMask) != 0; + return (blockData & canWalkThroughMask) != 0; } } } From 0bd16fb81a6ed5f7aca529c89ddca5c98fe0d434 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 21:56:25 -0700 Subject: [PATCH 339/935] bit literals are meh --- .../baritone/pathing/precompute/PrecomputedData.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 6d3a742cd..3ca2c4667 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -28,11 +28,11 @@ public class PrecomputedData { // TODO add isFullyPassable private final int[] data = new int[Block.BLOCK_STATE_IDS.size()]; - private final int completedMask = 0b1; - private final int canWalkOnMask = 0b10; - private final int canWalkOnSpecialMask = 0b100; - private final int canWalkThroughMask = 0b1000; - private final int canWalkThroughSpecialMask = 0b10000; + private final int completedMask = 1 << 0; + private final int canWalkOnMask = 1 << 1; + private final int canWalkOnSpecialMask = 1 << 2; + private final int canWalkThroughMask = 1 << 3; + private final int canWalkThroughSpecialMask = 1 << 4; private int fillData(int id, IBlockState state) { int blockData = 0; From 2d1b81dc20c360db96888eb9c1c1b496dbb3dab1 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 22:00:18 -0700 Subject: [PATCH 340/935] vastly increase cuteness by removing the optional boolean --- .../pathing/movement/MovementHelper.java | 34 ++++++++++++------- .../pathing/precompute/PrecomputedData.java | 25 +++++++------- .../baritone/pathing/precompute/Ternary.java | 22 ++++++++++++ 3 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 src/main/java/baritone/pathing/precompute/Ternary.java diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index f915dd781..3d115d1d1 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -25,6 +25,7 @@ import baritone.api.utils.*; import baritone.api.utils.input.Input; import baritone.pathing.movement.MovementState.MovementTarget; +import baritone.pathing.precompute.Ternary; import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; import net.minecraft.block.*; @@ -40,6 +41,7 @@ import java.util.Optional; import static baritone.pathing.movement.Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP; +import static baritone.pathing.precompute.Ternary.*; /** * Static helpers for cost calculation @@ -48,10 +50,6 @@ */ public interface MovementHelper extends ActionCosts, Helper { - Optional YES = Optional.of(true); - Optional NO = Optional.of(false); - Optional MAYBE = Optional.empty(); - static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { if (!bsi.worldBorder.canPlaceAt(x, y)) { return true; @@ -101,14 +99,17 @@ static boolean canWalkThrough(CalculationContext context, int x, int y, int z) { } static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { - Optional canWalkThrough = canWalkThroughBlockState(state); - if (canWalkThrough.isPresent()) { // note: don't replace this with the functional style, because the lambda is impure (it captures local variables as context), meaning it allocates - return canWalkThrough.get(); + Ternary canWalkThrough = canWalkThroughBlockState(state); + if (canWalkThrough == YES) { + return true; + } + if (canWalkThrough == NO) { + return false; } return canWalkThroughPosition(bsi, x, y, z, state); } - static Optional canWalkThroughBlockState(IBlockState state) { + static Ternary canWalkThroughBlockState(IBlockState state) { Block block = state.getBlock(); if (block == Blocks.AIR) { @@ -156,7 +157,11 @@ static Optional canWalkThroughBlockState(IBlockState state) { } try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information - return Optional.of(block.isPassable(null, null)); + if (block.isPassable(null, null)) { + return YES; + } else { + return NO; + } } catch (Throwable exception) { System.out.println("The block " + state.getBlock().getLocalizedName() + " requires a special case due to the exception " + exception.getMessage()); return MAYBE; @@ -346,14 +351,17 @@ static boolean avoidWalkingInto(Block block) { * @return Whether or not the specified block can be walked on */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { - Optional canWalkOn = canWalkOnBlockState(state); - if (canWalkOn.isPresent()) { - return canWalkOn.get(); + Ternary canWalkOn = canWalkOnBlockState(state); + if (canWalkOn == YES) { + return true; + } + if (canWalkOn == NO) { + return false; } return canWalkOnPosition(bsi, x, y, z, state); } - static Optional canWalkOnBlockState(IBlockState state) { + static Ternary canWalkOnBlockState(IBlockState state) { Block block = state.getBlock(); if (block == Blocks.AIR || block == Blocks.MAGMA) { return NO; diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 3ca2c4667..5b5bbc52c 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -22,7 +22,8 @@ import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; -import java.util.Optional; +import static baritone.pathing.precompute.Ternary.MAYBE; +import static baritone.pathing.precompute.Ternary.YES; public class PrecomputedData { // TODO add isFullyPassable @@ -37,21 +38,19 @@ public class PrecomputedData { // TODO add isFullyPassable private int fillData(int id, IBlockState state) { int blockData = 0; - Optional canWalkOnState = MovementHelper.canWalkOnBlockState(state); - if (canWalkOnState.isPresent()) { - if (canWalkOnState.get()) { - blockData |= canWalkOnMask; - } - } else { + Ternary canWalkOnState = MovementHelper.canWalkOnBlockState(state); + if (canWalkOnState == YES) { + blockData |= canWalkOnMask; + } + if (canWalkOnState == MAYBE) { blockData |= canWalkOnSpecialMask; } - Optional canWalkThroughState = MovementHelper.canWalkThroughBlockState(state); - if (canWalkThroughState.isPresent()) { - if (canWalkThroughState.get()) { - blockData |= canWalkThroughMask; - } - } else { + Ternary canWalkThroughState = MovementHelper.canWalkThroughBlockState(state); + if (canWalkThroughState == YES) { + blockData |= canWalkThroughMask; + } + if (canWalkOnState == MAYBE) { blockData |= canWalkThroughSpecialMask; } diff --git a/src/main/java/baritone/pathing/precompute/Ternary.java b/src/main/java/baritone/pathing/precompute/Ternary.java new file mode 100644 index 000000000..d4d8424e0 --- /dev/null +++ b/src/main/java/baritone/pathing/precompute/Ternary.java @@ -0,0 +1,22 @@ +/* + * 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.pathing.precompute; + +public enum Ternary { + YES, MAYBE, NO +} From 0587223da8aa6559fee32e4636c4a6d1e9e5f4d9 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 22:02:19 -0700 Subject: [PATCH 341/935] better constants --- .../pathing/precompute/PrecomputedData.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 5b5bbc52c..72eb575b3 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -29,32 +29,32 @@ public class PrecomputedData { // TODO add isFullyPassable private final int[] data = new int[Block.BLOCK_STATE_IDS.size()]; - private final int completedMask = 1 << 0; - private final int canWalkOnMask = 1 << 1; - private final int canWalkOnSpecialMask = 1 << 2; - private final int canWalkThroughMask = 1 << 3; - private final int canWalkThroughSpecialMask = 1 << 4; + private static final int COMPLETED_MASK = 1 << 0; + private static final int CAN_WALK_ON_MASK = 1 << 1; + private static final int CAN_WALK_ON_SPECIAL_MASK = 1 << 2; + private static final int CAN_WALK_THROUGH_MASK = 1 << 3; + private static final int CAN_WALK_THROUGH_SPECIAL_MASK = 1 << 4; private int fillData(int id, IBlockState state) { int blockData = 0; Ternary canWalkOnState = MovementHelper.canWalkOnBlockState(state); if (canWalkOnState == YES) { - blockData |= canWalkOnMask; + blockData |= CAN_WALK_ON_MASK; } if (canWalkOnState == MAYBE) { - blockData |= canWalkOnSpecialMask; + blockData |= CAN_WALK_ON_SPECIAL_MASK; } Ternary canWalkThroughState = MovementHelper.canWalkThroughBlockState(state); if (canWalkThroughState == YES) { - blockData |= canWalkThroughMask; + blockData |= CAN_WALK_THROUGH_MASK; } if (canWalkOnState == MAYBE) { - blockData |= canWalkThroughSpecialMask; + blockData |= CAN_WALK_THROUGH_SPECIAL_MASK; } - blockData |= completedMask; + blockData |= COMPLETED_MASK; data[id] = blockData; // in theory, this is thread "safe" because every thread should compute the exact same int to write? return blockData; @@ -64,14 +64,14 @@ public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockSta int id = Block.BLOCK_STATE_IDS.get(state); int blockData = data[id]; - if ((blockData & completedMask) == 0) { // we need to fill in the data + if ((blockData & COMPLETED_MASK) == 0) { // we need to fill in the data blockData = fillData(id, state); } - if ((blockData & canWalkOnSpecialMask) != 0) { + if ((blockData & CAN_WALK_ON_SPECIAL_MASK) != 0) { return MovementHelper.canWalkOnPosition(bsi, x, y, z, state); } else { - return (blockData & canWalkOnMask) != 0; + return (blockData & CAN_WALK_ON_MASK) != 0; } } @@ -79,14 +79,14 @@ public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo int id = Block.BLOCK_STATE_IDS.get(state); int blockData = data[id]; - if ((blockData & completedMask) == 0) { // we need to fill in the data + if ((blockData & COMPLETED_MASK) == 0) { // we need to fill in the data blockData = fillData(id, state); } - if ((blockData & canWalkThroughSpecialMask) != 0) { + if ((blockData & CAN_WALK_THROUGH_SPECIAL_MASK) != 0) { return MovementHelper.canWalkThroughPosition(bsi, x, y, z, state); } else { - return (blockData & canWalkThroughMask) != 0; + return (blockData & CAN_WALK_THROUGH_MASK) != 0; } } } From 658048ff2dcc4892a9124a3194eaa21435e7e9b8 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 14 Jul 2022 22:11:13 -0700 Subject: [PATCH 342/935] fix snow and tweak others --- .../pathing/movement/MovementHelper.java | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 3d115d1d1..0b6d7e348 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -137,10 +137,8 @@ static Ternary canWalkThroughBlockState(IBlockState state) { } if (block instanceof BlockSnow) { - if (state.getValue(BlockSnow.LAYERS) >= 3) { - return NO; - } - + // snow layers cached as the top layer of a packed chunk have no metadata, we can't make a decision based on their depth here + // it would otherwise make long distance pathing through snowy biomes impossible return MAYBE; } @@ -175,7 +173,18 @@ static boolean canWalkThroughPosition(BlockStateInterface bsi, int x, int y, int return canWalkOn(bsi, x, y - 1, z); } - if (block instanceof BlockSnow) { // TODO see if this case is necessary, shouldn't it also check this somewhere else? + if (block instanceof BlockSnow) { + // if they're cached as a top block, we don't know their metadata + // default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) + if (!bsi.worldContainsLoadedChunk(x, z)) { + return true; + } + // the check in BlockSnow.isPassable is layers < 5 + // while actually, we want < 3 because 3 or greater makes it impassable in a 2 high ceiling + if (state.getValue(BlockSnow.LAYERS) >= 3) { + return false; + } + // ok, it's low enough we could walk through it, but is it supported? return canWalkOn(bsi, x, y - 1, z); } @@ -363,10 +372,7 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockSta static Ternary canWalkOnBlockState(IBlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR || block == Blocks.MAGMA) { - return NO; - } - if (state.isBlockNormalCube()) { + if (state.isBlockNormalCube() && block != Blocks.MAGMA) { return YES; } if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this @@ -378,17 +384,18 @@ static Ternary canWalkOnBlockState(IBlockState state) { if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { return YES; } + if (block == Blocks.GLASS || block == Blocks.STAINED_GLASS) { + return YES; + } + if (block instanceof BlockStairs) { + return YES; + } if (isWater(block)) { return MAYBE; } - if (Baritone.settings().assumeWalkOnLava.value && MovementHelper.isLava(block)) { + if (MovementHelper.isLava(block) && Baritone.settings().assumeWalkOnLava.value) { return MAYBE; } - - if (block == Blocks.GLASS || block == Blocks.STAINED_GLASS) { - return YES; - } - if (block instanceof BlockSlab) { if (!Baritone.settings().allowWalkOnBottomSlab.value) { if (((BlockSlab) block).isDouble()) { @@ -401,11 +408,6 @@ static Ternary canWalkOnBlockState(IBlockState state) { } return YES; } - - if (block instanceof BlockStairs) { - return YES; - } - return NO; } @@ -427,7 +429,7 @@ static boolean canWalkOnPosition(BlockStateInterface bsi, int x, int y, int z, I return isWater(up) ^ Baritone.settings().assumeWalkOnWater.value; } - if (Baritone.settings().assumeWalkOnLava.value && MovementHelper.isLava(block) && !MovementHelper.isFlowing(x, y, z, state, bsi)) { + if (MovementHelper.isLava(block) && !MovementHelper.isFlowing(x, y, z, state, bsi) && Baritone.settings().assumeWalkOnLava.value) { // if we get here it means that assumeWalkOnLava must be true, so put it last return true; } From 80a4757242ac7653602ed025169776968b42d387 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 15 Jul 2022 01:36:01 -0700 Subject: [PATCH 343/935] baritone complies faster if the files are less bytes --- .../java/baritone/pathing/movement/MovementHelper.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 0b6d7e348..e3fc6a038 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -111,19 +111,15 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo static Ternary canWalkThroughBlockState(IBlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR) { return YES; } - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block instanceof BlockTrapDoor || block == Blocks.END_ROD) { return NO; } - if (Baritone.settings().blocksToAvoid.value.contains(block)) { return NO; } - if (block instanceof BlockDoor || block instanceof BlockFenceGate) { // TODO this assumes that all doors in all mods are openable if (block == Blocks.IRON_DOOR) { @@ -131,17 +127,14 @@ static Ternary canWalkThroughBlockState(IBlockState state) { } return YES; } - if (block == Blocks.CARPET) { return MAYBE; } - if (block instanceof BlockSnow) { // snow layers cached as the top layer of a packed chunk have no metadata, we can't make a decision based on their depth here // it would otherwise make long distance pathing through snowy biomes impossible return MAYBE; } - if (block instanceof BlockLiquid) { if (state.getValue(BlockLiquid.LEVEL) != 0) { return NO; @@ -149,11 +142,9 @@ static Ternary canWalkThroughBlockState(IBlockState state) { return MAYBE; } } - if (block instanceof BlockCauldron) { return NO; } - try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information if (block.isPassable(null, null)) { return YES; From 06be5f5372c77bf056f11b347e6554f56e58998f Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 21 Jul 2022 12:16:21 -0600 Subject: [PATCH 344/935] 1.19.1-rc2 --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 7 +++++++ gradle.properties | 6 +++--- settings.gradle | 2 +- .../baritone/launch/mixins/MixinClientPlayerEntity.java | 2 +- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 3220a1473..fbbb1bd43 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19" + "minecraft": "1.19.1-rc.2" } } \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 60f15841d..cc410242f 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -31,3 +31,10 @@ description=''' A Minecraft pathfinder bot. ''' +[[dependencies.baritoe]] +modId="minecraft" +mandatory=true +# This version range declares a minimum of the current minecraft version up to but not including the next major version +versionRange="[1.19.1]" +ordering="NONE" +side="BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 565ac04f3..7c4408303 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,9 +4,9 @@ mod_version=1.9.0-local maven_group=baritone archives_base_name=baritone -minecraft_version=1.19 -forge_version=1.19-41.0.1 -fabric_version=0.13.3 +minecraft_version=1.19.1-rc2 +forge_version=1.19.1-41.0.1 +fabric_version=0.14.8 # # un comment for forge debugging default (as opposed to fabric) # baritone.forge_build=true diff --git a/settings.gradle b/settings.gradle index 7c572072c..37b91dc7f 100755 --- a/settings.gradle +++ b/settings.gradle @@ -45,7 +45,7 @@ rootProject.name = 'baritone' include("common") include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { - System.setProperty("Baritone.enabled_platforms", "fabric,forge") + System.setProperty("Baritone.enabled_platforms", "fabric")//,forge") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { include(platform) diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index 89fceadd3..e5f3e0375 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -42,7 +42,7 @@ public class MixinClientPlayerEntity { @Inject( - method = "chat(Ljava/lang/String;Lnet/minecraft/network/chat/Component;)V", + method = "sendChat(Ljava/lang/String;Lnet/minecraft/network/chat/Component;)V", at = @At("HEAD"), cancellable = true ) From d7fc916d20e6f8d2abdc3f83953ebb2d0565ee99 Mon Sep 17 00:00:00 2001 From: Lucas Arden Date: Sun, 24 Jul 2022 21:37:45 -0700 Subject: [PATCH 345/935] Added check for pathing --- src/main/java/baritone/process/BackfillProcess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java index 04b3ca78b..84969e6b7 100644 --- a/src/main/java/baritone/process/BackfillProcess.java +++ b/src/main/java/baritone/process/BackfillProcess.java @@ -93,7 +93,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } private void amIBreakingABlockHMMMMMMM() { - if (!ctx.getSelectedBlock().isPresent()) { + if (!ctx.getSelectedBlock().isPresent() || !baritone.getPathingBehavior().isPathing()) { return; } blocksToReplace.put(ctx.getSelectedBlock().get(), ctx.world().getBlockState(ctx.getSelectedBlock().get())); From d37a6a0b2d083e40989766676dee442fc6718bb7 Mon Sep 17 00:00:00 2001 From: Lucas Arden Date: Tue, 26 Jul 2022 14:21:32 -0700 Subject: [PATCH 346/935] Added check for placed blocks in backfill --- src/main/java/baritone/process/BackfillProcess.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java index 84969e6b7..f42dfbe53 100644 --- a/src/main/java/baritone/process/BackfillProcess.java +++ b/src/main/java/baritone/process/BackfillProcess.java @@ -56,12 +56,12 @@ public boolean isActive() { Baritone.settings().backfill.value = false; return false; } - amIBreakingABlockHMMMMMMM(); for (BlockPos pos : new ArrayList<>(blocksToReplace.keySet())) { - if (ctx.world().getChunk(pos) instanceof EmptyChunk) { + if (ctx.world().getChunk(pos) instanceof EmptyChunk || ctx.world().getBlockState(pos).getBlock() != Blocks.AIR) { blocksToReplace.remove(pos); } } + amIBreakingABlockHMMMMMMM(); baritone.getInputOverrideHandler().clearAllKeys(); return !toFillIn().isEmpty(); From 61b9762a22d6f8fd32d6c08bb37d5bc4d01a9423 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 27 Jul 2022 19:59:44 -0600 Subject: [PATCH 347/935] 1.19.1 --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 8 ++------ .../java/baritone/launch/mixins/MixinNetworkManager.java | 9 +++++---- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index fbbb1bd43..5b799f845 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.1-rc.2" + "minecraft": "1.19.1" } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 7c4408303..0b9fad33b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,10 +4,6 @@ mod_version=1.9.0-local maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.1-rc2 +minecraft_version=1.19.1 forge_version=1.19.1-41.0.1 -fabric_version=0.14.8 - -# # un comment for forge debugging default (as opposed to fabric) -# baritone.forge_build=true -# loom.platform=forge +fabric_version=0.14.8 \ No newline at end of file diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 632bdb4d1..057a49b4b 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -26,6 +26,7 @@ import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; import net.minecraft.network.Connection; +import net.minecraft.network.PacketSendListener; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.PacketFlow; import org.spongepowered.asm.mixin.Final; @@ -53,14 +54,14 @@ public class MixinNetworkManager { method = "sendPacket", at = @At("HEAD") ) - private void preDispatchPacket(Packet inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { + private void preDispatchPacket(Packet packet, PacketSendListener packetSendListener, CallbackInfo ci) { if (this.receiving != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getConnection() == (Connection) (Object) this) { - ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((Connection) (Object) this, EventState.PRE, inPacket)); + ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((Connection) (Object) this, EventState.PRE, packet)); } } } @@ -69,14 +70,14 @@ private void preDispatchPacket(Packet inPacket, final GenericFutureListener inPacket, final GenericFutureListener> futureListeners, CallbackInfo ci) { + private void postDispatchPacket(Packet packet, PacketSendListener packetSendListener, CallbackInfo ci) { if (this.receiving != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getConnection() == (Connection) (Object) this) { - ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((Connection) (Object) this, EventState.POST, inPacket)); + ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((Connection) (Object) this, EventState.POST, packet)); } } } From df62427fee85db507308bbc426a106dfb366eb3d Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 28 Jul 2022 12:37:30 -0600 Subject: [PATCH 348/935] forge --- gradle.properties | 2 +- settings.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 0b9fad33b..634ad7798 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,5 +5,5 @@ maven_group=baritone archives_base_name=baritone minecraft_version=1.19.1 -forge_version=1.19.1-41.0.1 +forge_version=1.19.1-42.0.0 fabric_version=0.14.8 \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 37b91dc7f..7c572072c 100755 --- a/settings.gradle +++ b/settings.gradle @@ -45,7 +45,7 @@ rootProject.name = 'baritone' include("common") include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { - System.setProperty("Baritone.enabled_platforms", "fabric")//,forge") + System.setProperty("Baritone.enabled_platforms", "fabric,forge") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { include(platform) From b1f35e93dc6dd7b45f26f81854b2237f87769de0 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 3 Aug 2022 20:17:10 -0600 Subject: [PATCH 349/935] fix click menus for baritone control, closes #3587 --- .../api/command/helpers/Paginator.java | 5 +--- .../baritone/launch/mixins/MixinScreen.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index 4d4e3299c..77628a796 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -92,10 +92,7 @@ public void display(Function transform, String commandPrefix) { MutableComponent nextPageComponent = Component.literal(">>"); if (hasNextPage) { nextPageComponent.setStyle(nextPageComponent.getStyle() - .withClickEvent(new ClickEvent( - ClickEvent.Action.RUN_COMMAND, - String.format("%s %d", commandPrefix, page + 1) - )) + .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("%s %d", commandPrefix, page + 1))) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, Component.literal("Click to view next page") diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java index 0d7b3ee83..ed896730f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.java @@ -17,12 +17,20 @@ package baritone.launch.mixins; +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; +import baritone.api.event.events.ChatEvent; import baritone.utils.accessor.IGuiScreen; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Style; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; import java.net.URI; import net.minecraft.client.gui.screens.Screen; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Screen.class) public abstract class MixinScreen implements IGuiScreen { @@ -30,4 +38,21 @@ public abstract class MixinScreen implements IGuiScreen { @Override @Invoker("openLink") public abstract void openLinkInvoker(URI url); + + + //TODO: switch to enum extention with mixin 9.0 or whenever Mumfrey gets around to it + @Inject(at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;)V", remap = false, ordinal = 1), method = "handleComponentClicked", cancellable = true) + public void handleCustomClickEvent(Style style, CallbackInfoReturnable cir) { + System.out.println("handleCustomClickEvent"); + ClickEvent clickEvent = style.getClickEvent(); + if (clickEvent == null) { + return; + } + IBaritone baritone = BaritoneAPI.getProvider().getPrimaryBaritone(); + if (baritone != null) { + baritone.getGameEventHandler().onSendChatMessage(new ChatEvent(clickEvent.getValue())); + } + cir.setReturnValue(true); + cir.cancel(); + } } From 52d077de49b6bb2421f408df5fcf3e49e6fc106f Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sun, 7 Aug 2022 14:47:18 -0600 Subject: [PATCH 350/935] 1.19.2 --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 5b799f845..539fed3a8 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.1" + "minecraft": "1.19.2" } } \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index cc410242f..1ad269fce 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.19.1]" +versionRange="[1.19.2]" ordering="NONE" side="BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 634ad7798..bd327cf41 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.0-local maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.1 -forge_version=1.19.1-42.0.0 -fabric_version=0.14.8 \ No newline at end of file +minecraft_version=1.19.2 +forge_version=1.19.2-43.0.0 +fabric_version=0.14.9 \ No newline at end of file From 344085f4efc5708e0be4b26dcd24eeb0c975b82f Mon Sep 17 00:00:00 2001 From: Imeguras Date: Mon, 8 Aug 2022 12:00:48 +0100 Subject: [PATCH 351/935] Added the ability to use KmM as abreviatures for example 1m is equals to 1 million while 1K is 1000 --- .../api/command/datatypes/RelativeCoordinate.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java b/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java index 7d77a96c7..b8f30a774 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java @@ -26,7 +26,8 @@ public enum RelativeCoordinate implements IDatatypePost { INSTANCE; - private static Pattern PATTERN = Pattern.compile("^(~?)([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)([k-k]?)|)$"); + private static String ScalesAliasRegex = "[kKmM]"; + private static Pattern PATTERN = Pattern.compile("^(~?)([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)("+ScalesAliasRegex+"?)|)$"); @Override public Double apply(IDatatypeContext ctx, Double origin) throws CommandException { @@ -41,11 +42,15 @@ public Double apply(IDatatypeContext ctx, Double origin) throws CommandException boolean isRelative = !matcher.group(1).isEmpty(); - double offset = matcher.group(2).isEmpty() ? 0 : Double.parseDouble(matcher.group(2).replaceAll("k", "")); - - if (matcher.group(2).contains("k")) { + double offset = matcher.group(2).isEmpty() ? 0 : Double.parseDouble(matcher.group(2).replaceAll(ScalesAliasRegex, "")); + + if (matcher.group(2).toLowerCase().contains("k")) { offset *= 1000; } + if (matcher.group(2).toLowerCase().contains("m")) { + offset *= 1000000; + } + if (isRelative) { return origin + offset; From d1a0f1e3ca08028de927f269d0defc0e58a7e5e4 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Mon, 8 Aug 2022 15:20:41 +0200 Subject: [PATCH 352/935] Update legitMineYLevel for 1.18 + Update the legit mine default setting to work at the correct diamond level in 1.18+. --- src/api/java/baritone/api/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 9c80bab99..06d92feee 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1017,7 +1017,7 @@ public final class Settings { /** * What Y level to go to for legit strip mining */ - public final Setting legitMineYLevel = new Setting<>(11); + public final Setting legitMineYLevel = new Setting<>(-59); /** * Magically see ores that are separated diagonally from existing ores. Basically like mining around the ores that it finds From e75a4b95ccc1e8d41b24c15e22a789edd1957e34 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 29 Aug 2022 12:53:02 +0200 Subject: [PATCH 353/935] Mostly working usage of frostwalker * Sometimes overshoots Descend-Traverse chains onto water * Unwanted interactions with assumeWalkOnWater --- .../baritone/pathing/movement/CalculationContext.java | 3 +++ .../java/baritone/pathing/movement/MovementHelper.java | 6 ++++++ .../pathing/movement/movements/MovementDescend.java | 4 ++++ .../pathing/movement/movements/MovementDiagonal.java | 6 +++++- .../pathing/movement/movements/MovementParkour.java | 9 +++++++-- .../pathing/movement/movements/MovementTraverse.java | 8 +++++--- 6 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index d5d6c93c8..0b4bfc87d 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -29,6 +29,7 @@ import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Enchantments; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; @@ -64,6 +65,7 @@ public class CalculationContext { public final boolean allowJumpAt256; public final boolean allowParkourAscend; public final boolean assumeWalkOnWater; + public final int frostWalker; public final boolean allowDiagonalDescend; public final boolean allowDiagonalAscend; public final boolean allowDownward; @@ -99,6 +101,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.allowJumpAt256 = Baritone.settings().allowJumpAt256.value; this.allowParkourAscend = Baritone.settings().allowParkourAscend.value; this.assumeWalkOnWater = Baritone.settings().assumeWalkOnWater.value; + this.frostWalker = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.FROST_WALKER, baritone.getPlayerContext().player()); this.allowDiagonalDescend = Baritone.settings().allowDiagonalDescend.value; this.allowDiagonalAscend = Baritone.settings().allowDiagonalAscend.value; this.allowDownward = Baritone.settings().allowDownward.value; diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index dd0ddff48..cb6b0da3b 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -360,6 +360,12 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z) { return canWalkOn(bsi, x, y, z, bsi.get0(x, y, z)); } + static boolean canUseFrostWalker(CalculationContext context, IBlockState state) { + return context.frostWalker != 0 + && (state.getBlock() == Blocks.WATER || state.getBlock() == Blocks.FLOWING_WATER) + && ((Integer) state.getValue(BlockLiquid.LEVEL)) == 0; + } + static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z) { return canPlaceAgainst(bsi, x, y, z, bsi.get0(x, y, z)); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 128d1bf99..716db3311 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -32,6 +32,7 @@ import com.google.common.collect.ImmutableSet; import net.minecraft.block.Block; import net.minecraft.block.BlockFalling; +import net.minecraft.block.BlockLiquid; import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.init.Blocks; @@ -109,6 +110,9 @@ public static void cost(CalculationContext context, int x, int y, int z, int des if (destDown.getBlock() == Blocks.LADDER || destDown.getBlock() == Blocks.VINE) { return; } + if (MovementHelper.canUseFrostWalker(context, destDown)) { + return; // the water will freeze when we try to walk into it + } // we walk half the block plus 0.3 to get to the edge, then we walk the other 0.2 while simultaneously falling (math.max because of how it's in parallel) double walk = WALK_OFF_BLOCK_COST; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 933c86092..d8730b34d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -125,7 +125,9 @@ public static void cost(CalculationContext context, int x, int y, int z, int des destWalkOn = destInto; } else { destWalkOn = context.get(destX, y - 1, destZ); - if (!MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn)) { + if (!MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn) + && !MovementHelper.canUseFrostWalker(context, destWalkOn) + ) { descend = true; if (!context.allowDiagonalDescend || !MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context.bsi, destX, y - 1, destZ, destWalkOn)) { return; @@ -136,6 +138,8 @@ public static void cost(CalculationContext context, int x, int y, int z, int des // For either possible soul sand, that affects half of our walking if (destWalkOn.getBlock() == Blocks.SOUL_SAND) { multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; + } else if (!ascend && !descend && MovementHelper.canUseFrostWalker(context, destWalkOn)) { + // frostwalker lets us walk on water without the penalty, but only works if we don't ascend or descend } else if (destWalkOn.getBlock() == Blocks.WATER) { multiplier += context.walkOnWaterOnePenalty * SQRT_2; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index e5d17b9ac..2ea112bf3 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -91,7 +91,10 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac return; } IBlockState standingOn = context.get(x, y - 1, z); - if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof BlockStairs || MovementHelper.isBottomSlab(standingOn) || standingOn.getBlock() instanceof BlockLiquid) { + if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof BlockStairs || MovementHelper.isBottomSlab(standingOn)) { + return; + } + if (standingOn.getBlock() instanceof BlockLiquid && !MovementHelper.canUseFrostWalker(context, standingOn)) { return; } int maxJump; @@ -135,7 +138,9 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac // check for flat landing position IBlockState landingOn = context.bsi.get0(destX, y - 1, destZ); // farmland needs to be canWalkOn otherwise farm can never work at all, but we want to specifically disallow ending a jump on farmland haha - if (landingOn.getBlock() != Blocks.FARMLAND && MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, landingOn)) { + if ((landingOn.getBlock() != Blocks.FARMLAND && MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, landingOn)) + || (Math.min(16, context.frostWalker + 2) >= i && MovementHelper.canUseFrostWalker(context, landingOn)) + ) { if (checkOvershootSafety(context.bsi, destX + xDiff, y, destZ + zDiff)) { res.x = destX; res.y = y; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 1ecf0f92c..1d15d0631 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -33,6 +33,7 @@ import com.google.common.collect.ImmutableSet; import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -72,7 +73,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d IBlockState pb1 = context.get(destX, y, destZ); IBlockState destOn = context.get(destX, y - 1, destZ); Block srcDown = context.getBlock(x, y - 1, z); - if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge + if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn) || MovementHelper.canUseFrostWalker(context, destOn)) { //this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; boolean water = false; if (MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock())) { @@ -81,7 +82,8 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } else { if (destOn.getBlock() == Blocks.SOUL_SAND) { WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; - } else if (destOn.getBlock() == Blocks.WATER) { + } else if (destOn.getBlock() == Blocks.WATER && !MovementHelper.canUseFrostWalker(context, destOn)) { + // with frostwalker we can walk on water without the penalty WC += context.walkOnWaterOnePenalty; } if (srcDown == Blocks.SOUL_SAND) { @@ -226,7 +228,7 @@ public MovementState updateState(MovementState state) { } } - boolean isTheBridgeBlockThere = MovementHelper.canWalkOn(ctx, positionToPlace) || ladder; + boolean isTheBridgeBlockThere = MovementHelper.canWalkOn(ctx, positionToPlace) || ladder || EnchantmentHelper.hasFrostWalkerEnchantment(ctx.player()); BlockPos feet = ctx.playerFeet(); if (feet.getY() != dest.getY() && !ladder) { logDebug("Wrong Y coordinate"); From da998eb469f18e6d1a1f417c15cb72c32161d792 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 29 Aug 2022 16:59:01 +0200 Subject: [PATCH 354/935] Complete frostwalker usage --- src/api/java/baritone/api/Settings.java | 2 ++ .../baritone/pathing/movement/MovementHelper.java | 8 ++++++++ .../pathing/movement/movements/MovementDescend.java | 2 +- .../pathing/movement/movements/MovementDiagonal.java | 11 ++++++----- .../pathing/movement/movements/MovementParkour.java | 4 +++- .../pathing/movement/movements/MovementTraverse.java | 7 ++++--- 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 897182898..0cc80c382 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -116,6 +116,8 @@ public final class Settings { /** * Allow Baritone to assume it can walk on still water just like any other block. * This functionality is assumed to be provided by a separate library that might have imported Baritone. + *

+ * Note: This will prevent some usage of the frostwalker enchantment, like pillaring up from water. */ public final Setting assumeWalkOnWater = new Setting<>(false); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index cb6b0da3b..e1f3cf090 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -30,6 +30,7 @@ import net.minecraft.block.*; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -366,6 +367,13 @@ static boolean canUseFrostWalker(CalculationContext context, IBlockState state) && ((Integer) state.getValue(BlockLiquid.LEVEL)) == 0; } + static boolean canUseFrostWalker(IPlayerContext ctx, BlockPos pos) { + IBlockState state = BlockStateInterface.get(ctx, pos); + return EnchantmentHelper.hasFrostWalkerEnchantment(ctx.player()) + && (state.getBlock() == Blocks.WATER || state.getBlock() == Blocks.FLOWING_WATER) + && ((Integer) state.getValue(BlockLiquid.LEVEL)) == 0; + } + static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z) { return canPlaceAgainst(bsi, x, y, z, bsi.get0(x, y, z)); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 716db3311..cf711836d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -110,7 +110,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des if (destDown.getBlock() == Blocks.LADDER || destDown.getBlock() == Blocks.VINE) { return; } - if (MovementHelper.canUseFrostWalker(context, destDown)) { + if (MovementHelper.canUseFrostWalker(context, destDown)) { // no need to check assumeWalkOnWater return; // the water will freeze when we try to walk into it } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index d8730b34d..268d7f932 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -30,6 +30,7 @@ import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.init.Blocks; @@ -117,6 +118,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des boolean ascend = false; IBlockState destWalkOn; boolean descend = false; + boolean frostWalker = false; if (!MovementHelper.canWalkThrough(context.bsi, destX, y, destZ, destInto)) { ascend = true; if (!context.allowDiagonalAscend || !MovementHelper.canWalkThrough(context.bsi, x, y + 2, z) || !MovementHelper.canWalkOn(context.bsi, destX, y, destZ, destInto) || !MovementHelper.canWalkThrough(context.bsi, destX, y + 2, destZ)) { @@ -125,9 +127,8 @@ public static void cost(CalculationContext context, int x, int y, int z, int des destWalkOn = destInto; } else { destWalkOn = context.get(destX, y - 1, destZ); - if (!MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn) - && !MovementHelper.canUseFrostWalker(context, destWalkOn) - ) { + frostWalker = MovementHelper.canUseFrostWalker(context, destWalkOn) && !(context.assumeWalkOnWater && context.getBlock(x, y - 1, z) instanceof BlockLiquid); + if (!MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn) && !frostWalker) { descend = true; if (!context.allowDiagonalDescend || !MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context.bsi, destX, y - 1, destZ, destWalkOn)) { return; @@ -138,8 +139,8 @@ public static void cost(CalculationContext context, int x, int y, int z, int des // For either possible soul sand, that affects half of our walking if (destWalkOn.getBlock() == Blocks.SOUL_SAND) { multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; - } else if (!ascend && !descend && MovementHelper.canUseFrostWalker(context, destWalkOn)) { - // frostwalker lets us walk on water without the penalty, but only works if we don't ascend or descend + } else if (frostWalker) { + // frostwalker lets us walk on water without the penalty } else if (destWalkOn.getBlock() == Blocks.WATER) { multiplier += context.walkOnWaterOnePenalty * SQRT_2; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 2ea112bf3..abe4768ea 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -94,7 +94,8 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof BlockStairs || MovementHelper.isBottomSlab(standingOn)) { return; } - if (standingOn.getBlock() instanceof BlockLiquid && !MovementHelper.canUseFrostWalker(context, standingOn)) { + // we can't jump from (frozen) water with assumeWalkOnWater because we can't be sure it will be frozen + if (standingOn.getBlock() instanceof BlockLiquid && (!MovementHelper.canUseFrostWalker(context, standingOn) || context.assumeWalkOnWater)) { return; } int maxJump; @@ -138,6 +139,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac // check for flat landing position IBlockState landingOn = context.bsi.get0(destX, y - 1, destZ); // farmland needs to be canWalkOn otherwise farm can never work at all, but we want to specifically disallow ending a jump on farmland haha + // frostwalker works here because we can't jump from possibly unfrozen water if ((landingOn.getBlock() != Blocks.FARMLAND && MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, landingOn)) || (Math.min(16, context.frostWalker + 2) >= i && MovementHelper.canUseFrostWalker(context, landingOn)) ) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 1d15d0631..9eb05d46c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -82,8 +82,9 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } else { if (destOn.getBlock() == Blocks.SOUL_SAND) { WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; - } else if (destOn.getBlock() == Blocks.WATER && !MovementHelper.canUseFrostWalker(context, destOn)) { - // with frostwalker we can walk on water without the penalty + } else if (MovementHelper.canUseFrostWalker(context, destOn) && !context.assumeWalkOnWater) { + // with frostwalker we can walk on water without the penalty, if we are sure we won't be using jesus + } else if (destOn.getBlock() == Blocks.WATER) { WC += context.walkOnWaterOnePenalty; } if (srcDown == Blocks.SOUL_SAND) { @@ -228,7 +229,7 @@ public MovementState updateState(MovementState state) { } } - boolean isTheBridgeBlockThere = MovementHelper.canWalkOn(ctx, positionToPlace) || ladder || EnchantmentHelper.hasFrostWalkerEnchantment(ctx.player()); + boolean isTheBridgeBlockThere = MovementHelper.canWalkOn(ctx, positionToPlace) || ladder || MovementHelper.canUseFrostWalker(ctx, positionToPlace); BlockPos feet = ctx.playerFeet(); if (feet.getY() != dest.getY() && !ladder) { logDebug("Wrong Y coordinate"); From 96ba96ca6956bb25d49f98dc1acb0b46b26bcaef Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 29 Aug 2022 18:47:54 +0200 Subject: [PATCH 355/935] Fix some more edge cases --- .../pathing/movement/movements/MovementDiagonal.java | 3 ++- .../pathing/movement/movements/MovementTraverse.java | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 268d7f932..fafc49824 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -127,7 +127,8 @@ public static void cost(CalculationContext context, int x, int y, int z, int des destWalkOn = destInto; } else { destWalkOn = context.get(destX, y - 1, destZ); - frostWalker = MovementHelper.canUseFrostWalker(context, destWalkOn) && !(context.assumeWalkOnWater && context.getBlock(x, y - 1, z) instanceof BlockLiquid); + boolean standingOnABlock = !(context.getBlock(x, y - 1, z) instanceof BlockLiquid) || (!context.assumeWalkOnWater && !(context.getBlock(x, y, z) instanceof BlockLiquid)); + frostWalker = standingOnABlock && MovementHelper.canUseFrostWalker(context, destWalkOn); if (!MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn) && !frostWalker) { descend = true; if (!context.allowDiagonalDescend || !MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context.bsi, destX, y - 1, destZ, destWalkOn)) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 9eb05d46c..6e44ad62c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -73,7 +73,10 @@ public static double cost(CalculationContext context, int x, int y, int z, int d IBlockState pb1 = context.get(destX, y, destZ); IBlockState destOn = context.get(destX, y - 1, destZ); Block srcDown = context.getBlock(x, y - 1, z); - if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn) || MovementHelper.canUseFrostWalker(context, destOn)) { //this is a walk, not a bridge + // if we are on water but are neither in water nor can stand on water we must have placed a block to get here + boolean standingOnABlock = !(srcDown instanceof BlockLiquid) || (!context.assumeWalkOnWater && !(context.getBlock(x, y, z) instanceof BlockLiquid)); + boolean frostWalker = standingOnABlock && MovementHelper.canUseFrostWalker(context, destOn); + if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn) || frostWalker) { //this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; boolean water = false; if (MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock())) { @@ -82,7 +85,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } else { if (destOn.getBlock() == Blocks.SOUL_SAND) { WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; - } else if (MovementHelper.canUseFrostWalker(context, destOn) && !context.assumeWalkOnWater) { + } else if (frostWalker) { // with frostwalker we can walk on water without the penalty, if we are sure we won't be using jesus } else if (destOn.getBlock() == Blocks.WATER) { WC += context.walkOnWaterOnePenalty; From 287addb9fdbfa1bc9ec34c32c99c75946da1877e Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Tue, 30 Aug 2022 18:46:58 +0100 Subject: [PATCH 356/935] Fix for infinite loop in water --- .../baritone/pathing/movement/movements/MovementTraverse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 91128b950..adcc48032 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -70,7 +70,7 @@ public double calculateCost(CalculationContext context) { @Override protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest); + return ImmutableSet.of(src, src.above(), dest); // src.above means that we don't get caught in an infinite loop in water } public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { From 78f1c45e13ed0dd2e5d7f8f13d9989bdd25a3bee Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Wed, 31 Aug 2022 23:39:09 +0200 Subject: [PATCH 357/935] Don't overshoot descends before using frostwalker --- .../pathing/movement/movements/MovementDescend.java | 12 ++++++++++++ .../java/baritone/pathing/path/PathExecutor.java | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index cf711836d..9ac00309f 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -44,6 +44,7 @@ public class MovementDescend extends Movement { private int numTicks = 0; + public boolean forceSafeMode = false; public MovementDescend(IBaritone baritone, BetterBlockPos start, BetterBlockPos end) { super(baritone, start, end, new BetterBlockPos[]{end.up(2), end.up(), end}, end.down()); @@ -53,6 +54,14 @@ public MovementDescend(IBaritone baritone, BetterBlockPos start, BetterBlockPos public void reset() { super.reset(); numTicks = 0; + forceSafeMode = false; + } + + /** + * Called by PathExecutor if needing safeMode can only be detected with knowledge about the next movement + */ + public void forceSafeMode() { + forceSafeMode = true; } @Override @@ -252,6 +261,9 @@ public MovementState updateState(MovementState state) { } public boolean safeMode() { + if (forceSafeMode) { + return true; + } // (dest - src) + dest is offset 1 more in the same direction // so it's the block we'd need to worry about running into if we decide to sprint straight through this descend BlockPos into = dest.subtract(src.down()).add(dest); diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 17fa788db..37cdcaa46 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -380,13 +380,20 @@ private boolean shouldSprintNextTick() { // however, descend and ascend don't request sprinting, because they don't know the context of what movement comes after it if (current instanceof MovementDescend) { + IMovement next = path.movements().get(pathPosition + 1); + if (next instanceof MovementTraverse) { + if (MovementHelper.canUseFrostWalker(ctx, next.getDest().down())) { + // if we are going to continue straight onto the water with frostwalker feet.equals(dest) must hold, otherwise we don't want to waste time + // Since MovementDescend can't know the direction of the next movement we have to tell it + ((MovementDescend) current).forceSafeMode(); // keep this out of onTick, even if that means a tick of delay before it has an effect + } + } if (((MovementDescend) current).safeMode() && !((MovementDescend) current).skipToAscend()) { logDebug("Sprinting would be unsafe"); return false; } if (pathPosition < path.length() - 2) { - IMovement next = path.movements().get(pathPosition + 1); if (next instanceof MovementAscend && current.getDirection().up().equals(next.getDirection().down())) { // a descend then an ascend in the same direction pathPosition++; From 8803c618b1cf8ece9adbc9c53a50f6cdd3d366a9 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Wed, 31 Aug 2022 18:20:51 -0700 Subject: [PATCH 358/935] remove schematica command because it doesn't work anyway on 1.13+ since sechematica doesn't exist past 1.12.2 --- src/main/java/baritone/command/defaults/DefaultCommands.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/DefaultCommands.java b/src/main/java/baritone/command/defaults/DefaultCommands.java index e998dcc97..5af4d158e 100644 --- a/src/main/java/baritone/command/defaults/DefaultCommands.java +++ b/src/main/java/baritone/command/defaults/DefaultCommands.java @@ -42,7 +42,7 @@ public static List createAll(IBaritone baritone) { new VersionCommand(baritone), new RepackCommand(baritone), new BuildCommand(baritone), - new SchematicaCommand(baritone), + //new SchematicaCommand(baritone), new ComeCommand(baritone), new AxisCommand(baritone), new ForceCancelCommand(baritone), From af95f7713499029ee9d09f9d05a33d78b85a4b26 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Thu, 1 Sep 2022 00:56:34 +0200 Subject: [PATCH 359/935] Fix OOB and check for direction and include parkour --- .../movement/movements/MovementTraverse.java | 2 +- .../baritone/pathing/path/PathExecutor.java | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 6e44ad62c..66fed66fd 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -148,7 +148,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof BlockSlab && !((BlockSlab) srcDown).isDouble())) { return COST_INF; // can't sneak and backplace against soul sand or half slabs (regardless of whether it's top half or bottom half) =/ } - if (srcDown == Blocks.FLOWING_WATER || srcDown == Blocks.WATER) { + if (!standingOnABlock) { // standing on water / swimming return COST_INF; // this is obviously impossible } WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 37cdcaa46..01b849c8d 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -380,12 +380,19 @@ private boolean shouldSprintNextTick() { // however, descend and ascend don't request sprinting, because they don't know the context of what movement comes after it if (current instanceof MovementDescend) { - IMovement next = path.movements().get(pathPosition + 1); - if (next instanceof MovementTraverse) { + if (pathPosition < path.length() - 2) { + // keep this out of onTick, even if that means a tick of delay before it has an effect + IMovement next = path.movements().get(pathPosition + 1); if (MovementHelper.canUseFrostWalker(ctx, next.getDest().down())) { - // if we are going to continue straight onto the water with frostwalker feet.equals(dest) must hold, otherwise we don't want to waste time - // Since MovementDescend can't know the direction of the next movement we have to tell it - ((MovementDescend) current).forceSafeMode(); // keep this out of onTick, even if that means a tick of delay before it has an effect + // frostwalker only works if you cross the edge of the block on ground so in some cases we may not overshoot + // Since MovementDescend can't know the next movement we have to tell it + if (next instanceof MovementTraverse || next instanceof MovementParkour) { + boolean couldPlaceInstead = Baritone.settings().allowPlace.value && behavior.baritone.getInventoryBehavior().hasGenericThrowaway() && next instanceof MovementParkour; // traverse doesn't react fast enough + boolean sameFlatDirection = current.getDirection().up().crossProduct(next.getDirection()).equals(BlockPos.ORIGIN); // here's why you learn maths in school + if (sameFlatDirection && !couldPlaceInstead) { + ((MovementDescend) current).forceSafeMode(); + } + } } } if (((MovementDescend) current).safeMode() && !((MovementDescend) current).skipToAscend()) { @@ -394,6 +401,7 @@ private boolean shouldSprintNextTick() { } if (pathPosition < path.length() - 2) { + IMovement next = path.movements().get(pathPosition + 1); if (next instanceof MovementAscend && current.getDirection().up().equals(next.getDirection().down())) { // a descend then an ascend in the same direction pathPosition++; From 9ffe4f2c257b572690163900a7ec4f53babee64a Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Thu, 1 Sep 2022 02:17:18 +0200 Subject: [PATCH 360/935] Fix parkour with frostwalker with/without throwaways * Placing throwaways with allowPlace disabled * Failing without throwaways --- .../pathing/movement/movements/MovementParkour.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index abe4768ea..32753c5d9 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -17,6 +17,7 @@ package baritone.pathing.movement.movements; +import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.BetterBlockPos; @@ -272,7 +273,12 @@ public MovementState updateState(MovementState state) { } } else if (!ctx.playerFeet().equals(src)) { if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().posY - src.y > 0.0001) { - if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().onGround && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true, false) == PlaceResult.READY_TO_PLACE) { + if (Baritone.settings().allowPlace.value + && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway() + && !MovementHelper.canWalkOn(ctx, dest.down()) + && !ctx.player().onGround + && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true, false) == PlaceResult.READY_TO_PLACE + ) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory state.setInput(Input.CLICK_RIGHT, true); } From 96ba589d4d12152ebb1441a564b9abf9ffe691af Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sat, 17 Sep 2022 01:56:23 +0200 Subject: [PATCH 361/935] Fix yet another cave air bug --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index e67bd5638..51a451ff2 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -603,7 +603,7 @@ enum PlaceResult { static boolean isTransparent(Block b) { - return b == Blocks.AIR || + return b instanceof AirBlock || b == Blocks.LAVA || b == Blocks.WATER; } From 40449400d3270ccb91560c939b04197414625e32 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Sun, 25 Sep 2022 16:55:08 +0200 Subject: [PATCH 362/935] State of Emerson --- .../format/DefaultSchematicFormats.java | 11 + .../format/defaults/LitematicaSchematic.java | 217 ++++++++++++++++++ 2 files changed, 228 insertions(+) create mode 100644 src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index fb20164bd..6cea77fe0 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -21,6 +21,7 @@ import baritone.api.schematic.format.ISchematicFormat; import baritone.utils.schematic.format.defaults.MCEditSchematic; import baritone.utils.schematic.format.defaults.SpongeSchematic; +import baritone.utils.schematic.format.defaults.LitematicaSchematic; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import org.apache.commons.io.FilenameUtils; @@ -65,6 +66,16 @@ public IStaticSchematic parse(InputStream input) throws IOException { throw new UnsupportedOperationException("Unsupported Version of a Sponge Schematic"); } } + }, + + /** + * The Litematica schematic specification. Commonly denoted by the ".litematic" file extension. + */ + Litematica("litematic") { + @Override + public IStaticSchematic parse(InputStream input) throws IOException { + return new LitematicaSchematic(CompressedStreamTools.readCompressed(input)); + } }; private final String extension; diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java new file mode 100644 index 000000000..9c647a0b3 --- /dev/null +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -0,0 +1,217 @@ +/* + * 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.schematic.format.defaults; + +import baritone.utils.schematic.StaticSchematic; +import net.minecraft.block.*; +import net.minecraft.block.properties.IProperty; +import net.minecraft.nbt.*; +import net.minecraft.util.ResourceLocation; +import net.minecraft.block.state.IBlockState; + +import org.apache.commons.lang3.Validate; +import javax.annotation.Nullable; +import java.util.*; + +/** + * @author Emerson + * @since 12/27/2020 + */ +public final class LitematicaSchematic extends StaticSchematic { + + public LitematicaSchematic(NBTTagCompound nbt) { + String regionName = (String) nbt.getCompoundTag("Regions").getKeySet().toArray()[0]; + this.x = Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(regionName).getCompoundTag("Size").getInteger("x")); + this.y = Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(regionName).getCompoundTag("Size").getInteger("y")); + this.z = Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(regionName).getCompoundTag("Size").getInteger("z")); + this.states = new IBlockState[this.x][this.z][this.y]; + + + NBTTagList paletteTag = nbt.getCompoundTag("Regions").getCompoundTag(regionName).getTagList("BlockStatePalette",10); + // ListNBT paletteTag = nbt.getCompound("Regions").getCompound(regionName).getList("BlockStatePalette",10); + + // Create the block states array + IBlockState[] paletteBlockStates = new IBlockState[paletteTag.tagCount()]; + // For every part of the array + for (int i = 0; i propertiesMap = new HashMap<>(); + // Create a map for each state + for (int j = 0; j property = block.getBlockState().getProperty(keys[j].toString()); + if (property != null) { + blockState = setPropertyValue(blockState, property, propertiesMap.get(keys[j])); + } + } + paletteBlockStates[i] = blockState; + } + + + // BlockData is stored as an NBT long[] + int paletteSize = (int) Math.floor(log2(paletteTag.tagCount()))+1; + long litematicSize = (long) this.x*this.y*this.z; + + // In 1.12, the long array isn't exposed by the libraries so parsing has to be done manually + String rawBlockString = (nbt.getCompoundTag("Regions").getCompoundTag(regionName)).getTag("BlockStates").toString(); + rawBlockString = rawBlockString.substring(3,rawBlockString.length()-1); + String[] rawBlockArrayString = rawBlockString.split(","); + long[] rawBlockData = new long[rawBlockArrayString.length]; + for (int i = 0; i < rawBlockArrayString.length; i++) { + rawBlockData[i] = Long.parseLong(rawBlockArrayString[i].substring(0,rawBlockArrayString[i].length()-1)); + } + + + LitematicaBitArray bitArray = new LitematicaBitArray(paletteSize, litematicSize, rawBlockData); + if (paletteSize > 32) { + throw new IllegalStateException("Too many blocks in schematic to handle"); + } + + int[] serializedBlockStates = new int[(int) litematicSize]; + for (int i = 0; i> IBlockState setPropertyValue(IBlockState state, IProperty property, String value) { + Optional parsed = property.parseValue(value).toJavaUtil(); + if (parsed.isPresent()) { + return state.withProperty(property, parsed.get()); + } else { + throw new IllegalArgumentException("Invalid value for property " + property); + } + } + + /** LitematicaBitArray class from litematica */ + private static class LitematicaBitArray + { + /** The long array that is used to store the data for this BitArray. */ + private final long[] longArray; + /** Number of bits a single entry takes up */ + private final int bitsPerEntry; + /** + * The maximum value for a single entry. This also works as a bitmask for a single entry. + * For instance, if bitsPerEntry were 5, this value would be 31 (ie, {@code 0b00011111}). + */ + private final long maxEntryValue; + /** Number of entries in this array (not the length of the long array that internally backs this array) */ + private final long arraySize; + + public LitematicaBitArray(int bitsPerEntryIn, long arraySizeIn, @Nullable long[] longArrayIn) + { + Validate.inclusiveBetween(1L, 32L, (long) bitsPerEntryIn); + this.arraySize = arraySizeIn; + this.bitsPerEntry = bitsPerEntryIn; + this.maxEntryValue = (1L << bitsPerEntryIn) - 1L; + + if (longArrayIn != null) + { + this.longArray = longArrayIn; + } + else + { + this.longArray = new long[(int) (roundUp((long) arraySizeIn * (long) bitsPerEntryIn, 64L) / 64L)]; + } + } + + public void setAt(long index, int value) + { + Validate.inclusiveBetween(0L, this.arraySize - 1L, (long) index); + Validate.inclusiveBetween(0L, this.maxEntryValue, (long) value); + long startOffset = index * (long) this.bitsPerEntry; + int startArrIndex = (int) (startOffset >> 6); // startOffset / 64 + int endArrIndex = (int) (((index + 1L) * (long) this.bitsPerEntry - 1L) >> 6); + int startBitOffset = (int) (startOffset & 0x3F); // startOffset % 64 + this.longArray[startArrIndex] = this.longArray[startArrIndex] & ~(this.maxEntryValue << startBitOffset) | ((long) value & this.maxEntryValue) << startBitOffset; + + if (startArrIndex != endArrIndex) + { + int endOffset = 64 - startBitOffset; + int j1 = this.bitsPerEntry - endOffset; + this.longArray[endArrIndex] = this.longArray[endArrIndex] >>> j1 << j1 | ((long) value & this.maxEntryValue) >> endOffset; + } + } + + public int getAt(long index) + { + Validate.inclusiveBetween(0L, this.arraySize - 1L, (long) index); + long startOffset = index * (long) this.bitsPerEntry; + int startArrIndex = (int) (startOffset >> 6); // startOffset / 64 + int endArrIndex = (int) (((index + 1L) * (long) this.bitsPerEntry - 1L) >> 6); + int startBitOffset = (int) (startOffset & 0x3F); // startOffset % 64 + + if (startArrIndex == endArrIndex) + { + return (int) (this.longArray[startArrIndex] >>> startBitOffset & this.maxEntryValue); + } + else + { + int endOffset = 64 - startBitOffset; + return (int) ((this.longArray[startArrIndex] >>> startBitOffset | this.longArray[endArrIndex] << endOffset) & this.maxEntryValue); + } + } + + + public long size() + { + return this.arraySize; + } + + public static long roundUp(long number, long interval) + { + if (interval == 0) + { + return 0; + } + else if (number == 0) + { + return interval; + } + else + { + if (number < 0) + { + interval *= -1; + } + + long i = number % interval; + return i == 0 ? number : number + interval - i; + } + } + } +} \ No newline at end of file From 240e81a9e0cfbb45529ba88fd130664a97bcd03f Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Sun, 25 Sep 2022 18:22:59 +0200 Subject: [PATCH 363/935] Refactoring --- .../format/defaults/LitematicaSchematic.java | 174 ++++++++++++------ 1 file changed, 122 insertions(+), 52 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 9c647a0b3..237040450 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -31,6 +31,9 @@ /** * @author Emerson * @since 12/27/2020 + * @author rycbar + * @since 22.09.2022 + * */ public final class LitematicaSchematic extends StaticSchematic { @@ -41,82 +44,149 @@ public LitematicaSchematic(NBTTagCompound nbt) { this.z = Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(regionName).getCompoundTag("Size").getInteger("z")); this.states = new IBlockState[this.x][this.z][this.y]; + NBTTagList blockStatePalette = nbt.getCompoundTag("Regions").getCompoundTag(regionName).getTagList("BlockStatePalette", 10); + // ListTag blockStatePalette = nbt.getCompound("Regions").getCompound(regionName).getList("BlockStatePalette",10); + IBlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); + // BlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); - NBTTagList paletteTag = nbt.getCompoundTag("Regions").getCompoundTag(regionName).getTagList("BlockStatePalette",10); - // ListNBT paletteTag = nbt.getCompound("Regions").getCompound(regionName).getList("BlockStatePalette",10); - - // Create the block states array - IBlockState[] paletteBlockStates = new IBlockState[paletteTag.tagCount()]; - // For every part of the array - for (int i = 0; i propertiesMap = new HashMap<>(); - // Create a map for each state - for (int j = 0; j property = block.getBlockState().getProperty(keys[j].toString()); - if (property != null) { - blockState = setPropertyValue(blockState, property, propertiesMap.get(keys[j])); - } - } - paletteBlockStates[i] = blockState; - } - + int bitsPerBlock = bitsPerBlock(blockStatePalette); + long schematicVolume = schematicVolume(); + long[] rawBlockData = rawBlockData(rawBlockArrayString(nbt, regionName)); - // BlockData is stored as an NBT long[] - int paletteSize = (int) Math.floor(log2(paletteTag.tagCount()))+1; - long litematicSize = (long) this.x*this.y*this.z; + LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, schematicVolume, rawBlockData); - // In 1.12, the long array isn't exposed by the libraries so parsing has to be done manually - String rawBlockString = (nbt.getCompoundTag("Regions").getCompoundTag(regionName)).getTag("BlockStates").toString(); - rawBlockString = rawBlockString.substring(3,rawBlockString.length()-1); - String[] rawBlockArrayString = rawBlockString.split(","); - long[] rawBlockData = new long[rawBlockArrayString.length]; - for (int i = 0; i < rawBlockArrayString.length; i++) { - rawBlockData[i] = Long.parseLong(rawBlockArrayString[i].substring(0,rawBlockArrayString[i].length()-1)); - } - - - LitematicaBitArray bitArray = new LitematicaBitArray(paletteSize, litematicSize, rawBlockData); - if (paletteSize > 32) { + if (bitsPerBlock > 32) { throw new IllegalStateException("Too many blocks in schematic to handle"); } - int[] serializedBlockStates = new int[(int) litematicSize]; - for (int i = 0; i property = block.getBlockState().getProperty(key.toString()); + //Property property = block.getStateDefinition().getProperty(key.toString()); + if (property != null) { + blockState = setPropertyValue(blockState, property, propertiesMap(properties).get(key)); + } + } + return blockState; } + /** + * i haven't written this and i wont try to decode it. + * @param state + * @param property + * @param value + * @return + * @param + */ private static > IBlockState setPropertyValue(IBlockState state, IProperty property, String value) { + //private static > BlockState setPropertyValue(BlockState state, Property property, String value) { Optional parsed = property.parseValue(value).toJavaUtil(); + //Optional parsed = property.getValue(value); if (parsed.isPresent()) { return state.withProperty(property, parsed.get()); + //return state.setValue(property, parsed.get()); } else { throw new IllegalArgumentException("Invalid value for property " + property); } } + /** + * @param properties properties a block has. + * @return properties as map. + */ + private static Map propertiesMap(NBTTagCompound properties) { + //private static Map propertiesMap(CompoundTag properties) { + Map propertiesMap = new HashMap<>(); + + for (Object key : properties.getKeySet().toArray()) { + //for (Object key : properties.getAllKeys().toArray()) { + propertiesMap.put((String) key, (properties.getString((String) key))); + } + return propertiesMap; + } + + /** + * @param blockStatePalette List of all different block types used in the schematic. + * @return amount of bits used to encode a block. + */ + private static int bitsPerBlock(NBTTagList blockStatePalette) { + //private static int bitsPerBlock(ListTag blockStatePalette) { + return (int) Math.floor((Math.log(blockStatePalette.tagCount())) / Math.log(2))+1; + //return (int) Math.floor((Math.log(blockStatePalette.size())) / Math.log(2))+1; + } + + /** + * @return the amount of blocks in the schematic, including air blocks. + */ + private long schematicVolume() { + return (long) this.x*this.y*this.z; + } + + /** + * @param rawBlockArrayString String Array holding Long values as text. + * @return array of Long values. + */ + private static long[] rawBlockData(String[] rawBlockArrayString) { + long[] rawBlockData = new long[rawBlockArrayString.length]; + for (int i = 0; i < rawBlockArrayString.length; i++) { + rawBlockData[i] = Long.parseLong(rawBlockArrayString[i].substring(0,rawBlockArrayString[i].length()-1)); + } + return rawBlockData; + } + + /** + * @param nbt schematic file. + * @param regionName Name of the region the schematic is in. + * @return String Array holding Long values as text. + */ + private static String[] rawBlockArrayString(NBTTagCompound nbt, String regionName) { + //private static String[] rawBlockArrayString(CompoundTag nbt, String regionName) { + + String rawBlockString = Objects.requireNonNull((nbt.getCompoundTag("Regions").getCompoundTag(regionName).getTag("BlockStates"))).toString(); + //String rawBlockString = Objects.requireNonNull((nbt.getCompound("Regions").getCompound(regionName).get("BlockStates"))).toString(); + rawBlockString = rawBlockString.substring(3,rawBlockString.length()-1); + return rawBlockString.split(","); + } + /** LitematicaBitArray class from litematica */ private static class LitematicaBitArray { From 3cd8ce83236f4d2f27bc4d8c6c8b1f192f11a9e4 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 00:58:32 +0200 Subject: [PATCH 364/935] Multiple Sub-region support --- .../format/defaults/LitematicaSchematic.java | 110 +++++++++++++----- 1 file changed, 83 insertions(+), 27 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 237040450..5a9f6d904 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -36,38 +36,92 @@ * */ public final class LitematicaSchematic extends StaticSchematic { + int minX=0,minY=0,minZ=0; + private static String reg = "Regions"; + private static String meta = "Metadata"; + private static String schemSize = "EnclosingSize"; + private static String[] regNames; + private static String blSt = "BlockStates"; + private static String blStPl = "BlockStatePalette"; + private static String pos = "Position"; + private static String size = "Size"; + private static NBTTagCompound nbt; public LitematicaSchematic(NBTTagCompound nbt) { - String regionName = (String) nbt.getCompoundTag("Regions").getKeySet().toArray()[0]; - this.x = Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(regionName).getCompoundTag("Size").getInteger("x")); - this.y = Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(regionName).getCompoundTag("Size").getInteger("y")); - this.z = Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(regionName).getCompoundTag("Size").getInteger("z")); + this.nbt = nbt; + regNames = getRegions(); + + this.x = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("x")); + this.y = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("y")); + this.z = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("z")); this.states = new IBlockState[this.x][this.z][this.y]; - NBTTagList blockStatePalette = nbt.getCompoundTag("Regions").getCompoundTag(regionName).getTagList("BlockStatePalette", 10); - // ListTag blockStatePalette = nbt.getCompound("Regions").getCompound(regionName).getList("BlockStatePalette",10); - IBlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); - // BlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); + minCord(); - int bitsPerBlock = bitsPerBlock(blockStatePalette); - long schematicVolume = schematicVolume(); - long[] rawBlockData = rawBlockData(rawBlockArrayString(nbt, regionName)); + for (String subReg : regNames) { + NBTTagList blockStatePalette = nbt.getCompoundTag(reg).getCompoundTag(subReg).getTagList(blStPl, 10); + // ListTag blockStatePalette = nbt.getCompound(reg).getCompound(subReg).getList(blStPl,10); + IBlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); + // BlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); + int posX = getMin(subReg,"x"); + int posY = getMin(subReg,"y"); + int posZ = getMin(subReg,"z"); - LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, schematicVolume, rawBlockData); + int bitsPerBlock = bitsPerBlock(blockStatePalette); + long regionVolume = getVolume(subReg); + long[] rawBlockData = rawBlockData(rawBlockArrayString(subReg)); - if (bitsPerBlock > 32) { - throw new IllegalStateException("Too many blocks in schematic to handle"); - } + LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, regionVolume, rawBlockData); + + if (bitsPerBlock > 32) { + throw new IllegalStateException("Too many blocks in schematic to handle"); + } - for (int y = 0; y < this.y; y++) { - for (int z = 0; z < this.z; z++) { - for (int x = 0; x < this.x; x++) { - this.states[x][y][z] = paletteBlockStates[bitArray.getAt((y * this.z + z) * this.x + x)]; + int index = 0; + for (int y = 0; y < this.y; y++) { + for (int z = 0; z < this.z; z++) { + for (int x = 0; x < this.x; x++) { + if (inSubregion(x, y, z, subReg)) { + int paletteIndex = bitArray.getAt(index); + this.states[x-(minX-posX)][z-(minZ-posZ)][y-(minY-posY)] = paletteBlockStates[paletteIndex]; + index++; + } + } } } } } + private static boolean inSubregion(int x, int y, int z, String subReg) { + boolean inspect = + x < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x")) && + y < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y")) && + z < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("z")); + return inspect; + } + + private static int getMin(String subReg,String s) { + int a = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(pos).getInteger(s); + int b = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger(s); + if (b < 0) { + b++; + } + return Math.min(a,a+b); + + } + + private void minCord() { + for (String subReg : regNames) { + this.minX = Math.min(this.minX,getMin(subReg,"x")); + this.minY = Math.min(this.minY,getMin(subReg,"y")); + this.minZ = Math.min(this.minZ,getMin(subReg,"z")); + } + } + + private static String[] getRegions() { + return nbt.getCompoundTag(reg).getKeySet().toArray(new String[0]); + } + /** * @param blockStatePalette List of all different block types used in the schematic. * @return Array of BlockStates. @@ -157,8 +211,11 @@ private static int bitsPerBlock(NBTTagList blockStatePalette) { /** * @return the amount of blocks in the schematic, including air blocks. */ - private long schematicVolume() { - return (long) this.x*this.y*this.z; + private static long getVolume(String subReg) { + return Math.abs( + nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x") * + nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y") * + nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("z")); } /** @@ -174,15 +231,14 @@ private static long[] rawBlockData(String[] rawBlockArrayString) { } /** - * @param nbt schematic file. - * @param regionName Name of the region the schematic is in. + * @param subReg Name of the region the schematic is in. * @return String Array holding Long values as text. */ - private static String[] rawBlockArrayString(NBTTagCompound nbt, String regionName) { - //private static String[] rawBlockArrayString(CompoundTag nbt, String regionName) { + private static String[] rawBlockArrayString(String subReg) { + //private static String[] rawBlockArrayString(String regionName) { - String rawBlockString = Objects.requireNonNull((nbt.getCompoundTag("Regions").getCompoundTag(regionName).getTag("BlockStates"))).toString(); - //String rawBlockString = Objects.requireNonNull((nbt.getCompound("Regions").getCompound(regionName).get("BlockStates"))).toString(); + String rawBlockString = Objects.requireNonNull((nbt.getCompoundTag(reg).getCompoundTag(subReg).getTag(blSt))).toString(); + //String rawBlockString = Objects.requireNonNull((nbt.getCompound(reg).getCompound(subReg).get(blSt))).toString(); rawBlockString = rawBlockString.substring(3,rawBlockString.length()-1); return rawBlockString.split(","); } From 75a3fc699ebbc8903510999d685d175f35db97c0 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 01:18:56 +0200 Subject: [PATCH 365/935] Code clean up --- .../format/defaults/LitematicaSchematic.java | 74 +++++++++---------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 5a9f6d904..a312b020f 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -37,27 +37,26 @@ */ public final class LitematicaSchematic extends StaticSchematic { int minX=0,minY=0,minZ=0; - private static String reg = "Regions"; - private static String meta = "Metadata"; - private static String schemSize = "EnclosingSize"; + private static final String reg = "Regions"; + private static final String meta = "Metadata"; + private static final String schemSize = "EnclosingSize"; + private static final String blSt = "BlockStates"; + private static final String blStPl = "BlockStatePalette"; + private static final String pos = "Position"; + private static final String size = "Size"; private static String[] regNames; - private static String blSt = "BlockStates"; - private static String blStPl = "BlockStatePalette"; - private static String pos = "Position"; - private static String size = "Size"; private static NBTTagCompound nbt; public LitematicaSchematic(NBTTagCompound nbt) { - this.nbt = nbt; regNames = getRegions(); + LitematicaSchematic.nbt = nbt; + minCord(); this.x = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("x")); this.y = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("y")); this.z = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("z")); this.states = new IBlockState[this.x][this.z][this.y]; - minCord(); - for (String subReg : regNames) { NBTTagList blockStatePalette = nbt.getCompoundTag(reg).getCompoundTag(subReg).getTagList(blStPl, 10); // ListTag blockStatePalette = nbt.getCompound(reg).getCompound(subReg).getList(blStPl,10); @@ -82,8 +81,7 @@ public LitematicaSchematic(NBTTagCompound nbt) { for (int z = 0; z < this.z; z++) { for (int x = 0; x < this.x; x++) { if (inSubregion(x, y, z, subReg)) { - int paletteIndex = bitArray.getAt(index); - this.states[x-(minX-posX)][z-(minZ-posZ)][y-(minY-posY)] = paletteBlockStates[paletteIndex]; + this.states[x-(minX-posX)][z-(minZ-posZ)][y-(minY-posY)] = paletteBlockStates[bitArray.getAt(index)]; index++; } } @@ -92,14 +90,25 @@ public LitematicaSchematic(NBTTagCompound nbt) { } } + /** + * @param x cord of the schematic. + * @param y cord of the schematic. + * @param z cord of the schematic. + * @param subReg name of the subregion. + * @return if the current block is inside the subregion. + */ private static boolean inSubregion(int x, int y, int z, String subReg) { - boolean inspect = + return x < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x")) && y < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y")) && z < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("z")); - return inspect; } + /** + * @param subReg name of the subregion. + * @param s axis that should be read. + * @return the lower cord of the requested axis. + */ private static int getMin(String subReg,String s) { int a = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(pos).getInteger(s); int b = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger(s); @@ -110,6 +119,10 @@ private static int getMin(String subReg,String s) { } + /** + * Calculates the minimum cords/origin of the schematic as litematica schematics + * can have a non minimum origin. + */ private void minCord() { for (String subReg : regNames) { this.minX = Math.min(this.minX,getMin(subReg,"x")); @@ -118,6 +131,9 @@ private void minCord() { } } + /** + * @return Array of subregion names. + */ private static String[] getRegions() { return nbt.getCompoundTag(reg).getKeySet().toArray(new String[0]); } @@ -165,11 +181,11 @@ private static IBlockState getBlockState(Block block, NBTTagCompound properties) /** * i haven't written this and i wont try to decode it. - * @param state - * @param property - * @param value - * @return - * @param + * @param state . + * @param property . + * @param value . + * @return . + * @param . */ private static > IBlockState setPropertyValue(IBlockState state, IProperty property, String value) { //private static > BlockState setPropertyValue(BlockState state, Property property, String value) { @@ -209,7 +225,7 @@ private static int bitsPerBlock(NBTTagList blockStatePalette) { } /** - * @return the amount of blocks in the schematic, including air blocks. + * @return the volume of the subregion. */ private static long getVolume(String subReg) { return Math.abs( @@ -275,24 +291,6 @@ public LitematicaBitArray(int bitsPerEntryIn, long arraySizeIn, @Nullable long[] } } - public void setAt(long index, int value) - { - Validate.inclusiveBetween(0L, this.arraySize - 1L, (long) index); - Validate.inclusiveBetween(0L, this.maxEntryValue, (long) value); - long startOffset = index * (long) this.bitsPerEntry; - int startArrIndex = (int) (startOffset >> 6); // startOffset / 64 - int endArrIndex = (int) (((index + 1L) * (long) this.bitsPerEntry - 1L) >> 6); - int startBitOffset = (int) (startOffset & 0x3F); // startOffset % 64 - this.longArray[startArrIndex] = this.longArray[startArrIndex] & ~(this.maxEntryValue << startBitOffset) | ((long) value & this.maxEntryValue) << startBitOffset; - - if (startArrIndex != endArrIndex) - { - int endOffset = 64 - startBitOffset; - int j1 = this.bitsPerEntry - endOffset; - this.longArray[endArrIndex] = this.longArray[endArrIndex] >>> j1 << j1 | ((long) value & this.maxEntryValue) >> endOffset; - } - } - public int getAt(long index) { Validate.inclusiveBetween(0L, this.arraySize - 1L, (long) index); From 325aa7201bd549ba5ba8b8f544148b1194f1fb47 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 02:51:06 +0200 Subject: [PATCH 366/935] bug fix --- .../utils/schematic/format/defaults/LitematicaSchematic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index a312b020f..d19362c0f 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -48,8 +48,8 @@ public final class LitematicaSchematic extends StaticSchematic { private static NBTTagCompound nbt; public LitematicaSchematic(NBTTagCompound nbt) { + this.nbt = nbt; regNames = getRegions(); - LitematicaSchematic.nbt = nbt; minCord(); this.x = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("x")); From 70303634f548f0aaf9a7657a2f1f69ebc920a22a Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 15:59:55 +0200 Subject: [PATCH 367/935] ref files added --- .../schematic/format/schemfiles/1.12.0.litematic | Bin 0 -> 369 bytes .../schematic/format/schemfiles/1.12.1.litematic | Bin 0 -> 372 bytes .../schematic/format/schemfiles/1.12.2.litematic | Bin 0 -> 373 bytes .../schematic/format/schemfiles/1.14.2.litematic | Bin 0 -> 348 bytes .../schematic/format/schemfiles/1.14.3.litematic | Bin 0 -> 349 bytes .../schematic/format/schemfiles/1.14.4.litematic | Bin 0 -> 348 bytes .../schematic/format/schemfiles/1.15.0.litematic | Bin 0 -> 349 bytes .../schematic/format/schemfiles/1.15.1.litematic | Bin 0 -> 350 bytes .../schematic/format/schemfiles/1.15.2.litematic | Bin 0 -> 353 bytes .../schematic/format/schemfiles/1.16.0.litematic | Bin 0 -> 351 bytes .../schematic/format/schemfiles/1.16.1.litematic | Bin 0 -> 350 bytes .../schematic/format/schemfiles/1.16.2.litematic | Bin 0 -> 351 bytes .../schematic/format/schemfiles/1.16.3.litematic | Bin 0 -> 351 bytes .../schematic/format/schemfiles/1.16.4.litematic | Bin 0 -> 347 bytes .../schematic/format/schemfiles/1.16.5.litematic | Bin 0 -> 351 bytes .../schematic/format/schemfiles/1.17.1.litematic | Bin 0 -> 351 bytes .../schematic/format/schemfiles/1.18.2.litematic | Bin 0 -> 342 bytes .../schematic/format/schemfiles/1.19.2.litematic | Bin 0 -> 350 bytes 18 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.12.0.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.12.1.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.12.2.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.14.2.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.14.3.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.14.4.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.15.0.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.15.1.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.15.2.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.0.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.1.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.2.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.3.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.4.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.5.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.17.1.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.18.2.litematic create mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.19.2.litematic diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.12.0.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.12.0.litematic new file mode 100644 index 0000000000000000000000000000000000000000..d2154182cb4921a0725eb584122702d7859f80df GIT binary patch literal 369 zcmV-%0gnD3iwFP!000000G(1zPr^VDeYJ&_7W@ha{VUuQIM!4_u4ZWm+)#GOb}_=$ z|Lje1TE3!*7xpqcZ|A+4H`x$y(T=5})QE}g2`ffq3aJ&~6)yZk1}{VqlNA})c!-8_ zPF+L7QU*95tItmCp;@A_&g4WM;SjC9N^@OEH66$`xp3ZD&*iw{c*b#E<_Hk=s7Q@m z*s7(A=!vF$?dqknT;eb?)K=v8xlU&VBj*9?cT4-K4Scgo$HKhqYeqU>&WUTT19%UD zul}=A95aOQx57nu0Go&^)q!P8rL=>aas9U6er(_>A(ip;Rl!hhTZ3hSgk6=x?mS`V z$=P{21Cx)kiO9)X3i+kBAF4IqFTW$CVa+fxdO^lYDgyX#!brj9YlYQ{uxDKyS=)#I zc>dG~CG9E9Olory)74^jU|k+ri(DvPT?p^*H`r`8-{s0Ue(}oq8|BnjR+hrmsv8J? P<$Qhsq@|#=y8-|J&E>W- literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.12.1.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.12.1.litematic new file mode 100644 index 0000000000000000000000000000000000000000..04a225e5c3ac62d2a242ebcceab5825308565367 GIT binary patch literal 372 zcmV-)0gL`0iwFP!000000G(3HQo=wG?2tf00=|la{)#sRj#wzj)moAPw+Oq`X0e2; zU+Kxu@T52i1WK#Cu$RfqPWMcAHUwO>dQwqr#Kd-l6(cg4)C%z4UHJP9UWlMaRwUfx zAsWg#wG9bN3E;e~K0g{B8hN#+6FHHGa)@SE#i`DunhxZeTsW`H=W<+etZ-cCIRZo- z%3>oIwixLmdY~zPw)Ik3ZgKLt+KTix)$uID_M8N$-7M|1Ht@|V9t-nS_KkG9oYSuF zB7k=%IQ1Wu;+PNhJP@c~Ef*6rzb2_A;H>d2i;uZV0$&^`xT2h_USmD~4opsTEMYcH!?ccp-uwS&?#& zhiD*Y)HWn6rGWFc{P=wL&?u@soyxI1ltVPTD#>&%)ub<1;l?Pg)0wSjMz$w-)|vTvxf#f)}+ z=K;Js!KweK6vq@H{Oy1|+!q^&Htc=N(uxrdE=IM>ZtK2|vzS!MDmD!RS+2mw#H_AZ zdZ!ILZO%?x1q?pW#v&tYDdd}Kxm0sj{)8(b4ReOE(Q`6ZQXas65k?9&p_*H*2qo&| zfZAUChw~>!C~1#Drc#@ukggWfJ?iv;nrA|>bs@aJ&tbh@e;1Z<{9?=aIc3yURu;q? TtLq4U<$QhsBc*4+!vX*R{jjpx literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.2.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.2.litematic new file mode 100644 index 0000000000000000000000000000000000000000..3382eb96c0b36fa76cccddc5a9b1582a95995093 GIT binary patch literal 348 zcmV-i0i*sOiwFP!000000BuphQo=A4+|o)*3pzL)^jEwo;0*@_y?9_k`@jq#VbU-o zT>WmvSD;i!dwF@g+s)g&81T^vYxNqSS)c=x$(gL+7_GiemC2=^kK~qoc<=1zbKP*QaorX@A|yS^Q!7_) zf2EJ)iROIlnzeQ;@faB!C)AxX=^|(3JVO0;?cR(1Xe)?7vi9t0o5 zXRWzrh!Gx)^Y{cdk?dVZjw2P;9wf34f%cGe#?$WwV|ln5Y!eMRRWa-_Q|*`u z$4mhKT-gqVBIhVBUb7skwJab1Mo5bizNp~b8BHgmT@iCDv~>ScnKbq%)u|{W7L%0{ unnT10%7yH9yU#xhsgmETwalvIjbhV^`r2`NDzWHS&)+x4OUPng0ssJnpr$bZ literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.3.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.3.litematic new file mode 100644 index 0000000000000000000000000000000000000000..ac61c3aae708ac0b5b62a5232a409f927de913b2 GIT binary patch literal 349 zcmV-j0iymNiwFP!000000BuoCPr^VHoYG253mOau{VU$&!y5(#y^^JU;D)kGw%bIw zdiE!q`U;e4w3oMUW;*+3UkJG9jisX4h@~A0D_+TDQY)Z2cj2EqT!aY5WJSUn57A6+ zXkbWKN&x3$SA6z8v`ciX6S2s5uVuR6^)#G2~>-lO27 z|DqJv1R?yRaTcDzHll;;)N-WK+QH4Dc{}Powa}fAN_hH%U?z`OgKdHdrz(d%Won!< z;gkvBpKIHRNXc3X%h#-i>TIgVzZ24+g0E^gvs%%a=+?x_2qo>mR3f$cN%d+iPQyVU(YoUIG9B%qggW literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.4.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.4.litematic new file mode 100644 index 0000000000000000000000000000000000000000..1ea4bd2e38d0fb3de6a919c0bf884e9f0f8b7792 GIT binary patch literal 348 zcmV-i0i*sOiwFP!000000BuphPQpMGoYG253mOau{S|Ktc*CF|*Jf!SxS{Nl?KTmv z{-(cT@D(W4XfJQy%yjn6z7TNH8%afp5eqvIR?NucQY)YtyYSB)E8w~2Ypw%$PlAvB zt5RH3gz%5Xd3Xlfhz_n3%aKZJ2RHNP?XdUULU&9m<>?QCsXSf{wh6|ZsvP!|sd37L zQzn3au5HI6BWo!vU$Yvjv#uWhPDq0azN+EeYDH(FTN6tol(hd+snq5t)vGBjR`Dhi uibI6(s)g+L`>#I>sgplug-q+@t#Z>D4VC5eRAIrdp1*HVXg}m$0ssKn#i*tL literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.0.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.0.litematic new file mode 100644 index 0000000000000000000000000000000000000000..ea6ca5ae1d77f518071bd828bdb4ca27733ab60f GIT binary patch literal 349 zcmV-j0iymNiwFP!000000BuphPQpMGoYD%V1r3IS{)0Df-W2eLK|!u$X&<;@*(KX; zqFnuMgRelTMtgbtW~Q@m_CL5j+V# zHeR*nnj%8uV4OuKu!VT8ZrRUp;@{&h{CxUIG9BAgior literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.1.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.1.litematic new file mode 100644 index 0000000000000000000000000000000000000000..53df63aab72aefedea1eec60e5969362e4139c48 GIT binary patch literal 350 zcmV-k0ipgMiwFP!000000BuphPQpMGoZ3oD3mOau{S|Ktc*CF|SF*GZ+_3DD?UD#r z|H+RtG589UYP6TPZ)Q6CW?u~WX!oV2)QXww3Ma;7b7?eCoA?M%9nND!eR3jWO@L%1 zm(;N&9A$v_zV$vo0yGM=Z!$TP6&$14)2TAK)bpX-k`M2V{d}$)u4i1gMUMzcm-5ug zmD^wGBYCDdA3J8P9ZNh$M#c$suS~kg8M%m1yIZ?gV-ea-Iu&+OYQ{#bm&BT@2*IP^ zWB8&q*9(Fte!rH_2w06^LKh@D1kj{AeylT{YkYe%812e wrG(}XF@ka-yWQ^V&qAu?4{9y5DtW!ww4$DNoSsT7`qlII4I@*PY+eEY0DBXs3jhEB literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.2.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.2.litematic new file mode 100644 index 0000000000000000000000000000000000000000..dfdcac5589a46e5d99030f7736ba6cbb7e76c36c GIT binary patch literal 353 zcmV-n0iOOJiwFP!000000Buo0Qo=wG?2t%80$Nxc^ef&J@P>tgT&X1)aEq`@Z8lZH z)sOfJzvT-ooB$zOn#=5TcY3FHLcm35AQi<%%xzCtF(H#lt$^Ueg@5XB79tps6$xuR zL}R(4t|4J50i3sO?fuh3vp@$rk#kwWAzFPEr#h2rF_K$y;k>e+%XP!G#&uit2oUus zi;Y~{{gp1FCtC2at8-;p;xIDSR-|{Sj+YrD=K<=sxqZKqSJgutho%} zJqSMf&q{Gk5W+tgXW~>9R8hD7A1UH!MQV(4?e=a1Q1rIqt~vFVI@+Oc~ovFKOM=NqwGb=_V9006T+uIc~) literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.1.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.1.litematic new file mode 100644 index 0000000000000000000000000000000000000000..b671b1f9fd521a386334a77119e44799ee3d8bcd GIT binary patch literal 350 zcmV-k0ipgMiwFP!000000BuphPQpMCeWlfw1vD5A`YRqx6!3;YL9S$J2i#D0$#$Cv zSAWi*GB^cFHM*DCdGq$|ycq%b=nRym*vh%{Gi5X&LLcEN!o-kI2uX#X-hU}_n_UNg0 z^n{})fFD<~Lz$9uB#LR4O|@3#@NcEEDB;Tr&YaP7DzvM@!b+{&zokSO`?J)kN=7cH w>r`qsArO=c+3j{;e-=_Xe@t_gRL<+grc>%`$L^`bqF*_mZy>g4hh72z019oXnE(I) literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.2.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.2.litematic new file mode 100644 index 0000000000000000000000000000000000000000..f3d137028149266913fb7183b9d8a824c13e1597 GIT binary patch literal 351 zcmV-l0igaLiwFP!000000BuphQo=A0eWit#6m(!X=&yKFz#9$cSVi}@jzsW zl^b{X(ntIxmUQi#Tsxw8giMX&>Q0$tl@W3gp>dnLS7Q;{Z8GO}R&rj9%GZK8-3Y-0 zr)&7EHN_MR;ZZnaXRw9%pgM76sgU+?HE&!Gdyh?Y#zLpm{edu*$FFHXh{oiqX!hi( zcJhRiCx9MTvSY45SWH#hDmYtORkcA_R|| zuHlQ;6f-b{2jQHZz!u`Y>d29$Qrg4ytZ~y%o|@lU(mT{3(* xT`R811Vd0QWVhRW{aHxu{6Q5mtDQH?O)JsYj@*k1i+<&Fz5%sbBC%cq006`_svQ6T literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.4.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.4.litematic new file mode 100644 index 0000000000000000000000000000000000000000..a0ff6107aa675fdbd70db69ad2ba6d0a69a21fff GIT binary patch literal 347 zcmV-h0i^yPiwFP!000000BuphQo=A0eWlfw6m)Pn;ID8~z#9$z#vKy-YBmkd_|(U6=>nG+zMs5SL0 zNk=K*eeNUI4bUjip-I(3Rj@#Fpp(qxN-xK1Pd>a4*7G^;IMz7siyRT+KIMs38+ZKD zNBl}lzV^&kJEnMyOpKG+V`h?7&d5!K>xZp-Hx{AYC39(KC1+}~?V6Z#7a@3-d=1~U z=9oetJPGIG0yYpIRmYAk71AC$^XvOT`=yT7h;+)`9|;q6`kDuXXvD6HX3w5#XHPhL z0{C$yJCYeWN1~W!*;I2~4!PA`BS!4Y300LY&xTXcI=)?Ec%u6`38fMs7hV}007LgrYisd literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.5.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.5.litematic new file mode 100644 index 0000000000000000000000000000000000000000..46aead9a275c48aa290e1ac2c1590027a791c385 GIT binary patch literal 351 zcmV-l0igaLiwFP!000000BuphQo=A0eWjI_6m)Pns6XP2HwC=mpdeQ!v;i}Ogh|sG z;pzwY#SU(PQXS1@vu|Hs_U$sjM`s|lNGzYb9(Q~qY$lBc*o}|yl;Mma8VJWz;sl7t zawWP}a3@m0``9*aKLa!ibYN0Bmle#=>gzx_?WlH1=nyQWBENz5=B>)wR{+7&u7xm?NyPS6?ZOqoLJ)kN;dhxg8YKGzSfXIytxj~MBIip6B_1PFM#! oIYffs-w$b$KdMsZP4ZUt(~5@LaeAt;_*c*C8{2wM-d+L#0L)3J&j0`b literal 0 HcmV?d00001 diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.19.2.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.19.2.litematic new file mode 100644 index 0000000000000000000000000000000000000000..e3514b035da95b90a213587572ebfcc7371e66c5 GIT binary patch literal 350 zcmV-k0ipgMiwFP!00000|7}shPQpMGoZ3oD3mOau{R_|D6!3;YL9S$JAGl%JCEFzt zuKtIAYVZ{()o3qo-^}dno4y$E(e6u4sTDKV6;6!F=F(`OaqA;Ib*RON`s75$ngGd2 zE~#TlILZL;W83=l0yGM=Z!$TP6&$14)2TAK)bpX-k`M2l{d}$)u4i1gMUMzcm-5ug zmD@k*BYB}YA3J8P9ZNh$M#c&CpiH{R8M%m1yI;FEV-ea-Iu&+OYQ{#bm&BT@2*H!! zWB95y*9(Fte!rH_2w06^LKiAP3kj{Aey&%YDWqJ%FiICnlT{YkYe%812e wrG(}XF@ka-yWQ^V&qAu?k7_NmDtW!ww4$DNoSsT7`qlII4KBSA0$u_D03nR5`v3p{ literal 0 HcmV?d00001 From c89d8b69e5d50c5aa1dd7c6f03179492d3147c8b Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 16:08:37 +0200 Subject: [PATCH 368/935] ref files removed --- .../schematic/format/schemfiles/1.12.0.litematic | Bin 369 -> 0 bytes .../schematic/format/schemfiles/1.12.1.litematic | Bin 372 -> 0 bytes .../schematic/format/schemfiles/1.12.2.litematic | Bin 373 -> 0 bytes .../schematic/format/schemfiles/1.14.2.litematic | Bin 348 -> 0 bytes .../schematic/format/schemfiles/1.14.3.litematic | Bin 349 -> 0 bytes .../schematic/format/schemfiles/1.14.4.litematic | Bin 348 -> 0 bytes .../schematic/format/schemfiles/1.15.0.litematic | Bin 349 -> 0 bytes .../schematic/format/schemfiles/1.15.1.litematic | Bin 350 -> 0 bytes .../schematic/format/schemfiles/1.15.2.litematic | Bin 353 -> 0 bytes .../schematic/format/schemfiles/1.16.0.litematic | Bin 351 -> 0 bytes .../schematic/format/schemfiles/1.16.1.litematic | Bin 350 -> 0 bytes .../schematic/format/schemfiles/1.16.2.litematic | Bin 351 -> 0 bytes .../schematic/format/schemfiles/1.16.3.litematic | Bin 351 -> 0 bytes .../schematic/format/schemfiles/1.16.4.litematic | Bin 347 -> 0 bytes .../schematic/format/schemfiles/1.16.5.litematic | Bin 351 -> 0 bytes .../schematic/format/schemfiles/1.17.1.litematic | Bin 351 -> 0 bytes .../schematic/format/schemfiles/1.18.2.litematic | Bin 342 -> 0 bytes .../schematic/format/schemfiles/1.19.2.litematic | Bin 350 -> 0 bytes 18 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.12.0.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.12.1.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.12.2.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.14.2.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.14.3.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.14.4.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.15.0.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.15.1.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.15.2.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.0.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.1.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.2.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.3.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.4.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.16.5.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.17.1.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.18.2.litematic delete mode 100644 src/main/java/baritone/utils/schematic/format/schemfiles/1.19.2.litematic diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.12.0.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.12.0.litematic deleted file mode 100644 index d2154182cb4921a0725eb584122702d7859f80df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369 zcmV-%0gnD3iwFP!000000G(1zPr^VDeYJ&_7W@ha{VUuQIM!4_u4ZWm+)#GOb}_=$ z|Lje1TE3!*7xpqcZ|A+4H`x$y(T=5})QE}g2`ffq3aJ&~6)yZk1}{VqlNA})c!-8_ zPF+L7QU*95tItmCp;@A_&g4WM;SjC9N^@OEH66$`xp3ZD&*iw{c*b#E<_Hk=s7Q@m z*s7(A=!vF$?dqknT;eb?)K=v8xlU&VBj*9?cT4-K4Scgo$HKhqYeqU>&WUTT19%UD zul}=A95aOQx57nu0Go&^)q!P8rL=>aas9U6er(_>A(ip;Rl!hhTZ3hSgk6=x?mS`V z$=P{21Cx)kiO9)X3i+kBAF4IqFTW$CVa+fxdO^lYDgyX#!brj9YlYQ{uxDKyS=)#I zc>dG~CG9E9Olory)74^jU|k+ri(DvPT?p^*H`r`8-{s0Ue(}oq8|BnjR+hrmsv8J? P<$Qhsq@|#=y8-|J&E>W- diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.12.1.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.12.1.litematic deleted file mode 100644 index 04a225e5c3ac62d2a242ebcceab5825308565367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmV-)0gL`0iwFP!000000G(3HQo=wG?2tf00=|la{)#sRj#wzj)moAPw+Oq`X0e2; zU+Kxu@T52i1WK#Cu$RfqPWMcAHUwO>dQwqr#Kd-l6(cg4)C%z4UHJP9UWlMaRwUfx zAsWg#wG9bN3E;e~K0g{B8hN#+6FHHGa)@SE#i`DunhxZeTsW`H=W<+etZ-cCIRZo- z%3>oIwixLmdY~zPw)Ik3ZgKLt+KTix)$uID_M8N$-7M|1Ht@|V9t-nS_KkG9oYSuF zB7k=%IQ1Wu;+PNhJP@c~Ef*6rzb2_A;H>d2i;uZV0$&^`xT2h_USmD~4opsTEMYcH!?ccp-uwS&?#& zhiD*Y)HWn6rGWFc{P=wL&?u@soyxI1ltVPTD#>&%)ub<1;l?Pg)0wSjMz$w-)|vTvxf#f)}+ z=K;Js!KweK6vq@H{Oy1|+!q^&Htc=N(uxrdE=IM>ZtK2|vzS!MDmD!RS+2mw#H_AZ zdZ!ILZO%?x1q?pW#v&tYDdd}Kxm0sj{)8(b4ReOE(Q`6ZQXas65k?9&p_*H*2qo&| zfZAUChw~>!C~1#Drc#@ukggWfJ?iv;nrA|>bs@aJ&tbh@e;1Z<{9?=aIc3yURu;q? TtLq4U<$QhsBc*4+!vX*R{jjpx diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.2.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.2.litematic deleted file mode 100644 index 3382eb96c0b36fa76cccddc5a9b1582a95995093..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348 zcmV-i0i*sOiwFP!000000BuphQo=A4+|o)*3pzL)^jEwo;0*@_y?9_k`@jq#VbU-o zT>WmvSD;i!dwF@g+s)g&81T^vYxNqSS)c=x$(gL+7_GiemC2=^kK~qoc<=1zbKP*QaorX@A|yS^Q!7_) zf2EJ)iROIlnzeQ;@faB!C)AxX=^|(3JVO0;?cR(1Xe)?7vi9t0o5 zXRWzrh!Gx)^Y{cdk?dVZjw2P;9wf34f%cGe#?$WwV|ln5Y!eMRRWa-_Q|*`u z$4mhKT-gqVBIhVBUb7skwJab1Mo5bizNp~b8BHgmT@iCDv~>ScnKbq%)u|{W7L%0{ unnT10%7yH9yU#xhsgmETwalvIjbhV^`r2`NDzWHS&)+x4OUPng0ssJnpr$bZ diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.3.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.3.litematic deleted file mode 100644 index ac61c3aae708ac0b5b62a5232a409f927de913b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmV-j0iymNiwFP!000000BuoCPr^VHoYG253mOau{VU$&!y5(#y^^JU;D)kGw%bIw zdiE!q`U;e4w3oMUW;*+3UkJG9jisX4h@~A0D_+TDQY)Z2cj2EqT!aY5WJSUn57A6+ zXkbWKN&x3$SA6z8v`ciX6S2s5uVuR6^)#G2~>-lO27 z|DqJv1R?yRaTcDzHll;;)N-WK+QH4Dc{}Powa}fAN_hH%U?z`OgKdHdrz(d%Won!< z;gkvBpKIHRNXc3X%h#-i>TIgVzZ24+g0E^gvs%%a=+?x_2qo>mR3f$cN%d+iPQyVU(YoUIG9B%qggW diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.4.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.14.4.litematic deleted file mode 100644 index 1ea4bd2e38d0fb3de6a919c0bf884e9f0f8b7792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348 zcmV-i0i*sOiwFP!000000BuphPQpMGoYG253mOau{S|Ktc*CF|*Jf!SxS{Nl?KTmv z{-(cT@D(W4XfJQy%yjn6z7TNH8%afp5eqvIR?NucQY)YtyYSB)E8w~2Ypw%$PlAvB zt5RH3gz%5Xd3Xlfhz_n3%aKZJ2RHNP?XdUULU&9m<>?QCsXSf{wh6|ZsvP!|sd37L zQzn3au5HI6BWo!vU$Yvjv#uWhPDq0azN+EeYDH(FTN6tol(hd+snq5t)vGBjR`Dhi uibI6(s)g+L`>#I>sgplug-q+@t#Z>D4VC5eRAIrdp1*HVXg}m$0ssKn#i*tL diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.0.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.0.litematic deleted file mode 100644 index ea6ca5ae1d77f518071bd828bdb4ca27733ab60f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmV-j0iymNiwFP!000000BuphPQpMGoYD%V1r3IS{)0Df-W2eLK|!u$X&<;@*(KX; zqFnuMgRelTMtgbtW~Q@m_CL5j+V# zHeR*nnj%8uV4OuKu!VT8ZrRUp;@{&h{CxUIG9BAgior diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.1.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.1.litematic deleted file mode 100644 index 53df63aab72aefedea1eec60e5969362e4139c48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmV-k0ipgMiwFP!000000BuphPQpMGoZ3oD3mOau{S|Ktc*CF|SF*GZ+_3DD?UD#r z|H+RtG589UYP6TPZ)Q6CW?u~WX!oV2)QXww3Ma;7b7?eCoA?M%9nND!eR3jWO@L%1 zm(;N&9A$v_zV$vo0yGM=Z!$TP6&$14)2TAK)bpX-k`M2V{d}$)u4i1gMUMzcm-5ug zmD^wGBYCDdA3J8P9ZNh$M#c$suS~kg8M%m1yIZ?gV-ea-Iu&+OYQ{#bm&BT@2*IP^ zWB8&q*9(Fte!rH_2w06^LKh@D1kj{AeylT{YkYe%812e wrG(}XF@ka-yWQ^V&qAu?4{9y5DtW!ww4$DNoSsT7`qlII4I@*PY+eEY0DBXs3jhEB diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.2.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.15.2.litematic deleted file mode 100644 index dfdcac5589a46e5d99030f7736ba6cbb7e76c36c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmV-n0iOOJiwFP!000000Buo0Qo=wG?2t%80$Nxc^ef&J@P>tgT&X1)aEq`@Z8lZH z)sOfJzvT-ooB$zOn#=5TcY3FHLcm35AQi<%%xzCtF(H#lt$^Ueg@5XB79tps6$xuR zL}R(4t|4J50i3sO?fuh3vp@$rk#kwWAzFPEr#h2rF_K$y;k>e+%XP!G#&uit2oUus zi;Y~{{gp1FCtC2at8-;p;xIDSR-|{Sj+YrD=K<=sxqZKqSJgutho%} zJqSMf&q{Gk5W+tgXW~>9R8hD7A1UH!MQV(4?e=a1Q1rIqt~vFVI@+Oc~ovFKOM=NqwGb=_V9006T+uIc~) diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.1.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.1.litematic deleted file mode 100644 index b671b1f9fd521a386334a77119e44799ee3d8bcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmV-k0ipgMiwFP!000000BuphPQpMCeWlfw1vD5A`YRqx6!3;YL9S$J2i#D0$#$Cv zSAWi*GB^cFHM*DCdGq$|ycq%b=nRym*vh%{Gi5X&LLcEN!o-kI2uX#X-hU}_n_UNg0 z^n{})fFD<~Lz$9uB#LR4O|@3#@NcEEDB;Tr&YaP7DzvM@!b+{&zokSO`?J)kN=7cH w>r`qsArO=c+3j{;e-=_Xe@t_gRL<+grc>%`$L^`bqF*_mZy>g4hh72z019oXnE(I) diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.2.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.2.litematic deleted file mode 100644 index f3d137028149266913fb7183b9d8a824c13e1597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmV-l0igaLiwFP!000000BuphQo=A0eWit#6m(!X=&yKFz#9$cSVi}@jzsW zl^b{X(ntIxmUQi#Tsxw8giMX&>Q0$tl@W3gp>dnLS7Q;{Z8GO}R&rj9%GZK8-3Y-0 zr)&7EHN_MR;ZZnaXRw9%pgM76sgU+?HE&!Gdyh?Y#zLpm{edu*$FFHXh{oiqX!hi( zcJhRiCx9MTvSY45SWH#hDmYtORkcA_R|| zuHlQ;6f-b{2jQHZz!u`Y>d29$Qrg4ytZ~y%o|@lU(mT{3(* xT`R811Vd0QWVhRW{aHxu{6Q5mtDQH?O)JsYj@*k1i+<&Fz5%sbBC%cq006`_svQ6T diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.4.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.4.litematic deleted file mode 100644 index a0ff6107aa675fdbd70db69ad2ba6d0a69a21fff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmV-h0i^yPiwFP!000000BuphQo=A0eWlfw6m)Pn;ID8~z#9$z#vKy-YBmkd_|(U6=>nG+zMs5SL0 zNk=K*eeNUI4bUjip-I(3Rj@#Fpp(qxN-xK1Pd>a4*7G^;IMz7siyRT+KIMs38+ZKD zNBl}lzV^&kJEnMyOpKG+V`h?7&d5!K>xZp-Hx{AYC39(KC1+}~?V6Z#7a@3-d=1~U z=9oetJPGIG0yYpIRmYAk71AC$^XvOT`=yT7h;+)`9|;q6`kDuXXvD6HX3w5#XHPhL z0{C$yJCYeWN1~W!*;I2~4!PA`BS!4Y300LY&xTXcI=)?Ec%u6`38fMs7hV}007LgrYisd diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.5.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.16.5.litematic deleted file mode 100644 index 46aead9a275c48aa290e1ac2c1590027a791c385..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmV-l0igaLiwFP!000000BuphQo=A0eWjI_6m)Pns6XP2HwC=mpdeQ!v;i}Ogh|sG z;pzwY#SU(PQXS1@vu|Hs_U$sjM`s|lNGzYb9(Q~qY$lBc*o}|yl;Mma8VJWz;sl7t zawWP}a3@m0``9*aKLa!ibYN0Bmle#=>gzx_?WlH1=nyQWBENz5=B>)wR{+7&u7xm?NyPS6?ZOqoLJ)kN;dhxg8YKGzSfXIytxj~MBIip6B_1PFM#! oIYffs-w$b$KdMsZP4ZUt(~5@LaeAt;_*c*C8{2wM-d+L#0L)3J&j0`b diff --git a/src/main/java/baritone/utils/schematic/format/schemfiles/1.19.2.litematic b/src/main/java/baritone/utils/schematic/format/schemfiles/1.19.2.litematic deleted file mode 100644 index e3514b035da95b90a213587572ebfcc7371e66c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmV-k0ipgMiwFP!00000|7}shPQpMGoZ3oD3mOau{R_|D6!3;YL9S$JAGl%JCEFzt zuKtIAYVZ{()o3qo-^}dno4y$E(e6u4sTDKV6;6!F=F(`OaqA;Ib*RON`s75$ngGd2 zE~#TlILZL;W83=l0yGM=Z!$TP6&$14)2TAK)bpX-k`M2l{d}$)u4i1gMUMzcm-5ug zmD@k*BYB}YA3J8P9ZNh$M#c&CpiH{R8M%m1yI;FEV-ea-Iu&+OYQ{#bm&BT@2*H!! zWB95y*9(Fte!rH_2w06^LKiAP3kj{Aey&%YDWqJ%FiICnlT{YkYe%812e wrG(}XF@ka-yWQ^V&qAu?k7_NmDtW!ww4$DNoSsT7`qlII4KBSA0$u_D03nR5`v3p{ From 113e340474c3c33da94f885b81a029a07b33aa60 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 16:09:41 +0200 Subject: [PATCH 369/935] version check added --- .../schematic/format/DefaultSchematicFormats.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 6cea77fe0..de142b391 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -74,7 +74,17 @@ public IStaticSchematic parse(InputStream input) throws IOException { Litematica("litematic") { @Override public IStaticSchematic parse(InputStream input) throws IOException { - return new LitematicaSchematic(CompressedStreamTools.readCompressed(input)); + NBTTagCompound nbt = CompressedStreamTools.readCompressed(input); + int version = nbt.getInteger("Version"); + switch (version) { + case 4: + return new LitematicaSchematic(nbt); + case 5: + case 6: + throw new UnsupportedOperationException("This Schematic Verion is to new."); + default: + throw new UnsupportedOperationException("Unsuported Version of a Litematica Schematic"); + } } }; From 376d6422ec2c3f602dc2225c9008b2832ba8175e Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 16:18:43 +0200 Subject: [PATCH 370/935] refactoring --- .../format/defaults/LitematicaSchematic.java | 72 ++++++++++--------- 1 file changed, 40 insertions(+), 32 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index d19362c0f..f0e9d174b 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -44,6 +44,7 @@ public final class LitematicaSchematic extends StaticSchematic { private static final String blStPl = "BlockStatePalette"; private static final String pos = "Position"; private static final String size = "Size"; + private static String subReg; private static String[] regNames; private static NBTTagCompound nbt; @@ -57,33 +58,42 @@ public LitematicaSchematic(NBTTagCompound nbt) { this.z = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("z")); this.states = new IBlockState[this.x][this.z][this.y]; - for (String subReg : regNames) { + for (String subRegion : regNames) { + subReg = subRegion; NBTTagList blockStatePalette = nbt.getCompoundTag(reg).getCompoundTag(subReg).getTagList(blStPl, 10); // ListTag blockStatePalette = nbt.getCompound(reg).getCompound(subReg).getList(blStPl,10); IBlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); // BlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); - int posX = getMin(subReg,"x"); - int posY = getMin(subReg,"y"); - int posZ = getMin(subReg,"z"); - int bitsPerBlock = bitsPerBlock(blockStatePalette); - long regionVolume = getVolume(subReg); - long[] rawBlockData = rawBlockData(rawBlockArrayString(subReg)); + int bitsPerBlock = bitsPerBlock(blockStatePalette.tagCount()); + long regionVolume = getVolume(); + long[] blockStateArray = getBlockStates(); - LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, regionVolume, rawBlockData); + LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, regionVolume, blockStateArray); if (bitsPerBlock > 32) { throw new IllegalStateException("Too many blocks in schematic to handle"); } - int index = 0; - for (int y = 0; y < this.y; y++) { - for (int z = 0; z < this.z; z++) { - for (int x = 0; x < this.x; x++) { - if (inSubregion(x, y, z, subReg)) { - this.states[x-(minX-posX)][z-(minZ-posZ)][y-(minY-posY)] = paletteBlockStates[bitArray.getAt(index)]; - index++; - } + createSchematicOfSubRegion(paletteBlockStates, bitArray); + } + } + + /** + * @param paletteBlockStates list with the different block types used in the schematic + * @param bitArray bit array that holds the placement pattern + */ + private void createSchematicOfSubRegion(IBlockState[] paletteBlockStates, LitematicaBitArray bitArray) { + int posX = getMin("x"); + int posY = getMin("y"); + int posZ = getMin("z"); + int index = 0; + for (int y = 0; y < this.y; y++) { + for (int z = 0; z < this.z; z++) { + for (int x = 0; x < this.x; x++) { + if (inSubregion(x, y, z)) { + this.states[x-(minX- posX)][z-(minZ- posZ)][y-(minY- posY)] = paletteBlockStates[bitArray.getAt(index)]; + index++; } } } @@ -94,10 +104,9 @@ public LitematicaSchematic(NBTTagCompound nbt) { * @param x cord of the schematic. * @param y cord of the schematic. * @param z cord of the schematic. - * @param subReg name of the subregion. * @return if the current block is inside the subregion. */ - private static boolean inSubregion(int x, int y, int z, String subReg) { + private static boolean inSubregion(int x, int y, int z) { return x < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x")) && y < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y")) && @@ -105,11 +114,10 @@ private static boolean inSubregion(int x, int y, int z, String subReg) { } /** - * @param subReg name of the subregion. * @param s axis that should be read. * @return the lower cord of the requested axis. */ - private static int getMin(String subReg,String s) { + private static int getMin(String s) { int a = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(pos).getInteger(s); int b = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger(s); if (b < 0) { @@ -124,10 +132,11 @@ private static int getMin(String subReg,String s) { * can have a non minimum origin. */ private void minCord() { - for (String subReg : regNames) { - this.minX = Math.min(this.minX,getMin(subReg,"x")); - this.minY = Math.min(this.minY,getMin(subReg,"y")); - this.minZ = Math.min(this.minZ,getMin(subReg,"z")); + for (String subRegion : regNames) { + subReg = subRegion; + this.minX = Math.min(this.minX,getMin("x")); + this.minY = Math.min(this.minY,getMin("y")); + this.minZ = Math.min(this.minZ,getMin("z")); } } @@ -215,19 +224,19 @@ private static Map propertiesMap(NBTTagCompound properties) { } /** - * @param blockStatePalette List of all different block types used in the schematic. + * @param amountOfBlockTypes amount of block types in the schematic. * @return amount of bits used to encode a block. */ - private static int bitsPerBlock(NBTTagList blockStatePalette) { + private static int bitsPerBlock(int amountOfBlockTypes) { //private static int bitsPerBlock(ListTag blockStatePalette) { - return (int) Math.floor((Math.log(blockStatePalette.tagCount())) / Math.log(2))+1; + return (int) Math.floor((Math.log(amountOfBlockTypes)) / Math.log(2))+1; //return (int) Math.floor((Math.log(blockStatePalette.size())) / Math.log(2))+1; } /** * @return the volume of the subregion. */ - private static long getVolume(String subReg) { + private static long getVolume() { return Math.abs( nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x") * nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y") * @@ -235,10 +244,10 @@ private static long getVolume(String subReg) { } /** - * @param rawBlockArrayString String Array holding Long values as text. * @return array of Long values. */ - private static long[] rawBlockData(String[] rawBlockArrayString) { + private static long[] getBlockStates() { + String[] rawBlockArrayString = rawBlockArrayString(); long[] rawBlockData = new long[rawBlockArrayString.length]; for (int i = 0; i < rawBlockArrayString.length; i++) { rawBlockData[i] = Long.parseLong(rawBlockArrayString[i].substring(0,rawBlockArrayString[i].length()-1)); @@ -247,10 +256,9 @@ private static long[] rawBlockData(String[] rawBlockArrayString) { } /** - * @param subReg Name of the region the schematic is in. * @return String Array holding Long values as text. */ - private static String[] rawBlockArrayString(String subReg) { + private static String[] rawBlockArrayString() { //private static String[] rawBlockArrayString(String regionName) { String rawBlockString = Objects.requireNonNull((nbt.getCompoundTag(reg).getCompoundTag(subReg).getTag(blSt))).toString(); From 295265c2618a0e519117a17102358964d01cebb8 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 17:43:54 +0200 Subject: [PATCH 371/935] refactoring --- .../format/defaults/LitematicaSchematic.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index f0e9d174b..55723faf8 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -247,7 +247,9 @@ private static long getVolume() { * @return array of Long values. */ private static long[] getBlockStates() { - String[] rawBlockArrayString = rawBlockArrayString(); + String rawBlockString = Objects.requireNonNull((nbt.getCompoundTag(reg).getCompoundTag(subReg).getTag(blSt))).toString(); + rawBlockString = rawBlockString.substring(3,rawBlockString.length()-1); + String[] rawBlockArrayString = rawBlockString.split(","); long[] rawBlockData = new long[rawBlockArrayString.length]; for (int i = 0; i < rawBlockArrayString.length; i++) { rawBlockData[i] = Long.parseLong(rawBlockArrayString[i].substring(0,rawBlockArrayString[i].length()-1)); @@ -255,17 +257,15 @@ private static long[] getBlockStates() { return rawBlockData; } + // will only work after 1.12. will replace the getBlockStates() above. + /* /** - * @return String Array holding Long values as text. + * @return array of Long values. */ - private static String[] rawBlockArrayString() { - //private static String[] rawBlockArrayString(String regionName) { - - String rawBlockString = Objects.requireNonNull((nbt.getCompoundTag(reg).getCompoundTag(subReg).getTag(blSt))).toString(); - //String rawBlockString = Objects.requireNonNull((nbt.getCompound(reg).getCompound(subReg).get(blSt))).toString(); - rawBlockString = rawBlockString.substring(3,rawBlockString.length()-1); - return rawBlockString.split(","); - } + /* + private static long[] getBlockStates() { + return nbt.getCompoundTag(reg).getCompoundTag(subReg).getTag(blSt).getLongArray(); + }*/ /** LitematicaBitArray class from litematica */ private static class LitematicaBitArray From 3d8eddc4e161e9fca6bfa7661125d55f4b3868f8 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 19:23:09 +0200 Subject: [PATCH 372/935] cleanup --- .../format/defaults/LitematicaSchematic.java | 51 +++---------------- 1 file changed, 6 insertions(+), 45 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 55723faf8..4c8ce4c69 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -48,8 +48,8 @@ public final class LitematicaSchematic extends StaticSchematic { private static String[] regNames; private static NBTTagCompound nbt; - public LitematicaSchematic(NBTTagCompound nbt) { - this.nbt = nbt; + public LitematicaSchematic(NBTTagCompound nbtCompound) { + nbt = nbtCompound; regNames = getRegions(); minCord(); @@ -61,9 +61,7 @@ public LitematicaSchematic(NBTTagCompound nbt) { for (String subRegion : regNames) { subReg = subRegion; NBTTagList blockStatePalette = nbt.getCompoundTag(reg).getCompoundTag(subReg).getTagList(blStPl, 10); - // ListTag blockStatePalette = nbt.getCompound(reg).getCompound(subReg).getList(blStPl,10); IBlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); - // BlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); int bitsPerBlock = bitsPerBlock(blockStatePalette.tagCount()); long regionVolume = getVolume(); @@ -129,7 +127,7 @@ private static int getMin(String s) { /** * Calculates the minimum cords/origin of the schematic as litematica schematics - * can have a non minimum origin. + * can have a non-minimum origin. */ private void minCord() { for (String subRegion : regNames) { @@ -152,15 +150,11 @@ private static String[] getRegions() { * @return Array of BlockStates. */ private static IBlockState[] paletteBlockStates(NBTTagList blockStatePalette) { - // private static BlockState[] paletteBlockStates(TagList blockStatePalette) { IBlockState[] paletteBlockStates = new IBlockState[blockStatePalette.tagCount()]; - //BlockState[] paletteBlockState = new BlockState[blockStatePalette.tagCount()]; for (int i = 0; i< blockStatePalette.tagCount(); i++) { Block block = Block.REGISTRY.getObject(new ResourceLocation((((NBTTagCompound) blockStatePalette.get(i)).getString("Name")))); - //Block block = Registry.BLOCK.get(new ResourceLocation((((CompoundTag) blockStatePalette.get(i)).getString("Name")))); NBTTagCompound properties = ((NBTTagCompound) blockStatePalette.get(i)).getCompoundTag("Properties"); - //CompoundTag properties = ((CompoundTag) blockStatePalette.get(i)).getCompound("Properties"); paletteBlockStates[i] = getBlockState(block, properties); } @@ -173,16 +167,13 @@ private static IBlockState[] paletteBlockStates(NBTTagList blockStatePalette) { * @return A blockState. */ private static IBlockState getBlockState(Block block, NBTTagCompound properties) { - //private static BlockState getBlockState(Block block, CompoundTag properties) { IBlockState blockState = block.getDefaultState(); - //BlockState blockState = block.defaultBlockState(); + for (Object key : properties.getKeySet().toArray()) { - //for (Object key : properties.getAllKeys().toArray()) { - IProperty property = block.getBlockState().getProperty(key.toString()); - //Property property = block.getStateDefinition().getProperty(key.toString()); + IProperty property = block.getBlockState().getProperty((String) key); if (property != null) { - blockState = setPropertyValue(blockState, property, propertiesMap(properties).get(key)); + blockState = setPropertyValue(blockState, property, properties.getString((String) key)); } } return blockState; @@ -197,40 +188,20 @@ private static IBlockState getBlockState(Block block, NBTTagCompound properties) * @param . */ private static > IBlockState setPropertyValue(IBlockState state, IProperty property, String value) { - //private static > BlockState setPropertyValue(BlockState state, Property property, String value) { Optional parsed = property.parseValue(value).toJavaUtil(); - //Optional parsed = property.getValue(value); if (parsed.isPresent()) { return state.withProperty(property, parsed.get()); - //return state.setValue(property, parsed.get()); } else { throw new IllegalArgumentException("Invalid value for property " + property); } } - /** - * @param properties properties a block has. - * @return properties as map. - */ - private static Map propertiesMap(NBTTagCompound properties) { - //private static Map propertiesMap(CompoundTag properties) { - Map propertiesMap = new HashMap<>(); - - for (Object key : properties.getKeySet().toArray()) { - //for (Object key : properties.getAllKeys().toArray()) { - propertiesMap.put((String) key, (properties.getString((String) key))); - } - return propertiesMap; - } - /** * @param amountOfBlockTypes amount of block types in the schematic. * @return amount of bits used to encode a block. */ private static int bitsPerBlock(int amountOfBlockTypes) { - //private static int bitsPerBlock(ListTag blockStatePalette) { return (int) Math.floor((Math.log(amountOfBlockTypes)) / Math.log(2))+1; - //return (int) Math.floor((Math.log(blockStatePalette.size())) / Math.log(2))+1; } /** @@ -257,16 +228,6 @@ private static long[] getBlockStates() { return rawBlockData; } - // will only work after 1.12. will replace the getBlockStates() above. - /* - /** - * @return array of Long values. - */ - /* - private static long[] getBlockStates() { - return nbt.getCompoundTag(reg).getCompoundTag(subReg).getTag(blSt).getLongArray(); - }*/ - /** LitematicaBitArray class from litematica */ private static class LitematicaBitArray { From 52aa0d9b8a111ad51cb073757a641650297848bf Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 20:04:57 +0200 Subject: [PATCH 373/935] more cleanup --- .../format/defaults/LitematicaSchematic.java | 126 +++++++++--------- 1 file changed, 61 insertions(+), 65 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 4c8ce4c69..411e1988a 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -51,7 +51,7 @@ public final class LitematicaSchematic extends StaticSchematic { public LitematicaSchematic(NBTTagCompound nbtCompound) { nbt = nbtCompound; regNames = getRegions(); - minCord(); + getMinimumCorner(); this.x = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("x")); this.y = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("y")); @@ -60,62 +60,44 @@ public LitematicaSchematic(NBTTagCompound nbtCompound) { for (String subRegion : regNames) { subReg = subRegion; - NBTTagList blockStatePalette = nbt.getCompoundTag(reg).getCompoundTag(subReg).getTagList(blStPl, 10); - IBlockState[] paletteBlockStates = paletteBlockStates(blockStatePalette); + NBTTagList usedBlockTypes = nbt.getCompoundTag(reg).getCompoundTag(subReg).getTagList(blStPl, 10); + IBlockState[] blockList = getBlockList(usedBlockTypes); - int bitsPerBlock = bitsPerBlock(blockStatePalette.tagCount()); + int bitsPerBlock = getBitsPerBlock(usedBlockTypes.tagCount()); long regionVolume = getVolume(); long[] blockStateArray = getBlockStates(); LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, regionVolume, blockStateArray); - if (bitsPerBlock > 32) { - throw new IllegalStateException("Too many blocks in schematic to handle"); - } - - createSchematicOfSubRegion(paletteBlockStates, bitArray); + writeSubregionIntoSchematic(blockList, bitArray); } } /** - * @param paletteBlockStates list with the different block types used in the schematic - * @param bitArray bit array that holds the placement pattern + * @return Array of subregion names. */ - private void createSchematicOfSubRegion(IBlockState[] paletteBlockStates, LitematicaBitArray bitArray) { - int posX = getMin("x"); - int posY = getMin("y"); - int posZ = getMin("z"); - int index = 0; - for (int y = 0; y < this.y; y++) { - for (int z = 0; z < this.z; z++) { - for (int x = 0; x < this.x; x++) { - if (inSubregion(x, y, z)) { - this.states[x-(minX- posX)][z-(minZ- posZ)][y-(minY- posY)] = paletteBlockStates[bitArray.getAt(index)]; - index++; - } - } - } - } + private static String[] getRegions() { + return nbt.getCompoundTag(reg).getKeySet().toArray(new String[0]); } /** - * @param x cord of the schematic. - * @param y cord of the schematic. - * @param z cord of the schematic. - * @return if the current block is inside the subregion. + * Calculates the minimum cords/origin of the schematic as litematica schematics + * can have a non-minimum origin. */ - private static boolean inSubregion(int x, int y, int z) { - return - x < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x")) && - y < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y")) && - z < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("z")); + private void getMinimumCorner() { + for (String subRegion : regNames) { + subReg = subRegion; + this.minX = Math.min(this.minX, getMinimumCord("x")); + this.minY = Math.min(this.minY, getMinimumCord("y")); + this.minZ = Math.min(this.minZ, getMinimumCord("z")); + } } /** * @param s axis that should be read. * @return the lower cord of the requested axis. */ - private static int getMin(String s) { + private static int getMinimumCord(String s) { int a = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(pos).getInteger(s); int b = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger(s); if (b < 0) { @@ -125,40 +107,20 @@ private static int getMin(String s) { } - /** - * Calculates the minimum cords/origin of the schematic as litematica schematics - * can have a non-minimum origin. - */ - private void minCord() { - for (String subRegion : regNames) { - subReg = subRegion; - this.minX = Math.min(this.minX,getMin("x")); - this.minY = Math.min(this.minY,getMin("y")); - this.minZ = Math.min(this.minZ,getMin("z")); - } - } - - /** - * @return Array of subregion names. - */ - private static String[] getRegions() { - return nbt.getCompoundTag(reg).getKeySet().toArray(new String[0]); - } - /** * @param blockStatePalette List of all different block types used in the schematic. * @return Array of BlockStates. */ - private static IBlockState[] paletteBlockStates(NBTTagList blockStatePalette) { - IBlockState[] paletteBlockStates = new IBlockState[blockStatePalette.tagCount()]; + private static IBlockState[] getBlockList(NBTTagList blockStatePalette) { + IBlockState[] blockList = new IBlockState[blockStatePalette.tagCount()]; for (int i = 0; i< blockStatePalette.tagCount(); i++) { Block block = Block.REGISTRY.getObject(new ResourceLocation((((NBTTagCompound) blockStatePalette.get(i)).getString("Name")))); NBTTagCompound properties = ((NBTTagCompound) blockStatePalette.get(i)).getCompoundTag("Properties"); - paletteBlockStates[i] = getBlockState(block, properties); + blockList[i] = getBlockState(block, properties); } - return paletteBlockStates; + return blockList; } /** @@ -169,11 +131,11 @@ private static IBlockState[] paletteBlockStates(NBTTagList blockStatePalette) { private static IBlockState getBlockState(Block block, NBTTagCompound properties) { IBlockState blockState = block.getDefaultState(); - for (Object key : properties.getKeySet().toArray()) { IProperty property = block.getBlockState().getProperty((String) key); + String propertyValue = properties.getString((String) key); if (property != null) { - blockState = setPropertyValue(blockState, property, properties.getString((String) key)); + blockState = setPropertyValue(blockState, property, propertyValue); } } return blockState; @@ -200,7 +162,7 @@ private static > IBlockState setPropertyValue(IBlockStat * @param amountOfBlockTypes amount of block types in the schematic. * @return amount of bits used to encode a block. */ - private static int bitsPerBlock(int amountOfBlockTypes) { + private static int getBitsPerBlock(int amountOfBlockTypes) { return (int) Math.floor((Math.log(amountOfBlockTypes)) / Math.log(2))+1; } @@ -210,8 +172,8 @@ private static int bitsPerBlock(int amountOfBlockTypes) { private static long getVolume() { return Math.abs( nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x") * - nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y") * - nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("z")); + nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y") * + nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("z")); } /** @@ -228,6 +190,40 @@ private static long[] getBlockStates() { return rawBlockData; } + /** + * @param blockList list with the different block types used in the schematic + * @param bitArray bit array that holds the placement pattern + */ + private void writeSubregionIntoSchematic(IBlockState[] blockList, LitematicaBitArray bitArray) { + int posX = getMinimumCord("x"); + int posY = getMinimumCord("y"); + int posZ = getMinimumCord("z"); + int index = 0; + for (int y = 0; y < this.y; y++) { + for (int z = 0; z < this.z; z++) { + for (int x = 0; x < this.x; x++) { + if (inSubregion(x, y, z)) { + this.states[x-(minX- posX)][z-(minZ- posZ)][y-(minY- posY)] = blockList[bitArray.getAt(index)]; + index++; + } + } + } + } + } + + /** + * @param x cord of the schematic. + * @param y cord of the schematic. + * @param z cord of the schematic. + * @return if the current block is inside the subregion. + */ + private static boolean inSubregion(int x, int y, int z) { + return + x < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x")) && + y < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y")) && + z < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("z")); + } + /** LitematicaBitArray class from litematica */ private static class LitematicaBitArray { From a091c17b83cd7f97e9dff2b87823c99ad4cfad55 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 21:04:09 +0200 Subject: [PATCH 374/935] Added mixin to properly handle Long Arrays --- .../launch/mixins/MixinNBTTagLongArray.java | 37 +++++++++++++++++++ src/launch/resources/mixins.baritone.json | 3 +- .../utils/accessor/INBTTagLongArray.java | 27 ++++++++++++++ .../format/defaults/LitematicaSchematic.java | 10 +---- 4 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java create mode 100644 src/main/java/baritone/utils/accessor/INBTTagLongArray.java diff --git a/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java b/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java new file mode 100644 index 000000000..a4cd739ac --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java @@ -0,0 +1,37 @@ +/* + * 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.utils.accessor.INBTTagLongArray; +import net.minecraft.nbt.NBTTagLongArray; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +/** + * @author rycbar + * @since 26.09.2022 + */ +@Mixin(NBTTagLongArray.class) +public abstract class MixinNBTTagLongArray implements INBTTagLongArray { + + @Accessor("data") + @Override + public abstract long[] getLongArray(); + + +} \ No newline at end of file diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index fdcd14b92..c4b88481c 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -31,6 +31,7 @@ "MixinStateImplementation", "MixinTabCompleter", "MixinVboRenderList", - "MixinWorldClient" + "MixinWorldClient", + "MixinNBTTagLongArray" ] } \ No newline at end of file diff --git a/src/main/java/baritone/utils/accessor/INBTTagLongArray.java b/src/main/java/baritone/utils/accessor/INBTTagLongArray.java new file mode 100644 index 000000000..fe4f0bd87 --- /dev/null +++ b/src/main/java/baritone/utils/accessor/INBTTagLongArray.java @@ -0,0 +1,27 @@ +/* + * 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.accessor; + +/** + * @author rycbar + * @since 26.09.2022 + */ +public interface INBTTagLongArray { + + long[] getLongArray(); +} \ No newline at end of file diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 411e1988a..defbd3ea4 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -18,6 +18,7 @@ package baritone.utils.schematic.format.defaults; import baritone.utils.schematic.StaticSchematic; +import baritone.utils.accessor.INBTTagLongArray; import net.minecraft.block.*; import net.minecraft.block.properties.IProperty; import net.minecraft.nbt.*; @@ -180,14 +181,7 @@ private static long getVolume() { * @return array of Long values. */ private static long[] getBlockStates() { - String rawBlockString = Objects.requireNonNull((nbt.getCompoundTag(reg).getCompoundTag(subReg).getTag(blSt))).toString(); - rawBlockString = rawBlockString.substring(3,rawBlockString.length()-1); - String[] rawBlockArrayString = rawBlockString.split(","); - long[] rawBlockData = new long[rawBlockArrayString.length]; - for (int i = 0; i < rawBlockArrayString.length; i++) { - rawBlockData[i] = Long.parseLong(rawBlockArrayString[i].substring(0,rawBlockArrayString[i].length()-1)); - } - return rawBlockData; + return ((INBTTagLongArray) nbt.getCompoundTag(reg).getCompoundTag(subReg).getTag(blSt)).getLongArray(); } /** From 8aa891812473ef67a62ed4ab15d4fcf53abc7124 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 22:23:38 +0200 Subject: [PATCH 375/935] codacy issue #1 and #5 fix --- .../format/defaults/LitematicaSchematic.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index defbd3ea4..8aea77a50 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -37,7 +37,9 @@ * */ public final class LitematicaSchematic extends StaticSchematic { - int minX=0,minY=0,minZ=0; + int minX=0; + int minY=0; + int minZ=0; private static final String reg = "Regions"; private static final String meta = "Metadata"; private static final String schemSize = "EnclosingSize"; @@ -277,6 +279,7 @@ public long size() public static long roundUp(long number, long interval) { + int sign = 1; if (interval == 0) { return 0; @@ -289,11 +292,11 @@ else if (number == 0) { if (number < 0) { - interval *= -1; + sign = -1; } - long i = number % interval; - return i == 0 ? number : number + interval - i; + long i = number % (interval * sign); + return i == 0 ? number : number + (interval * sign) - i; } } } From 7a48824ced82e8b7e7dfd12a169cd378e3bd1356 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 26 Sep 2022 22:32:25 +0200 Subject: [PATCH 376/935] codacy issue #2,#3 and #4 fix --- .../format/defaults/LitematicaSchematic.java | 49 ++++++++----------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 8aea77a50..37d132fb3 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -47,39 +47,33 @@ public final class LitematicaSchematic extends StaticSchematic { private static final String blStPl = "BlockStatePalette"; private static final String pos = "Position"; private static final String size = "Size"; - private static String subReg; - private static String[] regNames; - private static NBTTagCompound nbt; - public LitematicaSchematic(NBTTagCompound nbtCompound) { - nbt = nbtCompound; - regNames = getRegions(); - getMinimumCorner(); + public LitematicaSchematic(NBTTagCompound nbt) { + getMinimumCorner(nbt); this.x = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("x")); this.y = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("y")); this.z = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("z")); this.states = new IBlockState[this.x][this.z][this.y]; - for (String subRegion : regNames) { - subReg = subRegion; + for (String subReg : getRegions(nbt)) { NBTTagList usedBlockTypes = nbt.getCompoundTag(reg).getCompoundTag(subReg).getTagList(blStPl, 10); IBlockState[] blockList = getBlockList(usedBlockTypes); int bitsPerBlock = getBitsPerBlock(usedBlockTypes.tagCount()); - long regionVolume = getVolume(); - long[] blockStateArray = getBlockStates(); + long regionVolume = getVolume(nbt, subReg); + long[] blockStateArray = getBlockStates(nbt, subReg); LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, regionVolume, blockStateArray); - writeSubregionIntoSchematic(blockList, bitArray); + writeSubregionIntoSchematic(nbt, subReg, blockList, bitArray); } } /** * @return Array of subregion names. */ - private static String[] getRegions() { + private static String[] getRegions(NBTTagCompound nbt) { return nbt.getCompoundTag(reg).getKeySet().toArray(new String[0]); } @@ -87,12 +81,11 @@ private static String[] getRegions() { * Calculates the minimum cords/origin of the schematic as litematica schematics * can have a non-minimum origin. */ - private void getMinimumCorner() { - for (String subRegion : regNames) { - subReg = subRegion; - this.minX = Math.min(this.minX, getMinimumCord("x")); - this.minY = Math.min(this.minY, getMinimumCord("y")); - this.minZ = Math.min(this.minZ, getMinimumCord("z")); + private void getMinimumCorner(NBTTagCompound nbt) { + for (String subReg : getRegions(nbt)) { + this.minX = Math.min(this.minX, getMinimumCord(nbt, subReg,"x")); + this.minY = Math.min(this.minY, getMinimumCord(nbt, subReg,"y")); + this.minZ = Math.min(this.minZ, getMinimumCord(nbt, subReg,"z")); } } @@ -100,7 +93,7 @@ private void getMinimumCorner() { * @param s axis that should be read. * @return the lower cord of the requested axis. */ - private static int getMinimumCord(String s) { + private static int getMinimumCord(NBTTagCompound nbt, String subReg, String s) { int a = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(pos).getInteger(s); int b = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger(s); if (b < 0) { @@ -172,7 +165,7 @@ private static int getBitsPerBlock(int amountOfBlockTypes) { /** * @return the volume of the subregion. */ - private static long getVolume() { + private static long getVolume(NBTTagCompound nbt, String subReg) { return Math.abs( nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x") * nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y") * @@ -182,7 +175,7 @@ private static long getVolume() { /** * @return array of Long values. */ - private static long[] getBlockStates() { + private static long[] getBlockStates(NBTTagCompound nbt, String subReg) { return ((INBTTagLongArray) nbt.getCompoundTag(reg).getCompoundTag(subReg).getTag(blSt)).getLongArray(); } @@ -190,15 +183,15 @@ private static long[] getBlockStates() { * @param blockList list with the different block types used in the schematic * @param bitArray bit array that holds the placement pattern */ - private void writeSubregionIntoSchematic(IBlockState[] blockList, LitematicaBitArray bitArray) { - int posX = getMinimumCord("x"); - int posY = getMinimumCord("y"); - int posZ = getMinimumCord("z"); + private void writeSubregionIntoSchematic(NBTTagCompound nbt, String subReg, IBlockState[] blockList, LitematicaBitArray bitArray) { + int posX = getMinimumCord(nbt, subReg,"x"); + int posY = getMinimumCord(nbt, subReg,"y"); + int posZ = getMinimumCord(nbt, subReg,"z"); int index = 0; for (int y = 0; y < this.y; y++) { for (int z = 0; z < this.z; z++) { for (int x = 0; x < this.x; x++) { - if (inSubregion(x, y, z)) { + if (inSubregion(nbt, subReg, x, y, z)) { this.states[x-(minX- posX)][z-(minZ- posZ)][y-(minY- posY)] = blockList[bitArray.getAt(index)]; index++; } @@ -213,7 +206,7 @@ private void writeSubregionIntoSchematic(IBlockState[] blockList, LitematicaBitA * @param z cord of the schematic. * @return if the current block is inside the subregion. */ - private static boolean inSubregion(int x, int y, int z) { + private static boolean inSubregion(NBTTagCompound nbt, String subReg, int x, int y, int z) { return x < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x")) && y < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y")) && From d928e705b91f7cb19f38e8b193721e781422a7d3 Mon Sep 17 00:00:00 2001 From: schmar03 Date: Wed, 28 Sep 2022 12:09:38 +0200 Subject: [PATCH 377/935] LitematicaCommand added to build loaded schematics --- .../baritone/api/process/IBuilderProcess.java | 2 + .../command/defaults/DefaultCommands.java | 1 + .../command/defaults/LitematicaCommand.java | 60 +++++++++++++++ .../java/baritone/process/BuilderProcess.java | 22 ++++++ .../litematica/LitematicaHelper.java | 74 +++++++++++++++++++ 5 files changed, 159 insertions(+) create mode 100644 src/main/java/baritone/command/defaults/LitematicaCommand.java create mode 100644 src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 9063b9900..dc17d0419 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -58,6 +58,8 @@ default boolean build(String schematicFile, BlockPos origin) { void buildOpenSchematic(); + void buildOpenLitematic(); + void pause(); boolean isPaused(); diff --git a/src/main/java/baritone/command/defaults/DefaultCommands.java b/src/main/java/baritone/command/defaults/DefaultCommands.java index e998dcc97..901fda713 100644 --- a/src/main/java/baritone/command/defaults/DefaultCommands.java +++ b/src/main/java/baritone/command/defaults/DefaultCommands.java @@ -43,6 +43,7 @@ public static List createAll(IBaritone baritone) { new RepackCommand(baritone), new BuildCommand(baritone), new SchematicaCommand(baritone), + new LitematicaCommand(baritone), new ComeCommand(baritone), new AxisCommand(baritone), new ForceCancelCommand(baritone), diff --git a/src/main/java/baritone/command/defaults/LitematicaCommand.java b/src/main/java/baritone/command/defaults/LitematicaCommand.java new file mode 100644 index 000000000..56360331e --- /dev/null +++ b/src/main/java/baritone/command/defaults/LitematicaCommand.java @@ -0,0 +1,60 @@ +/* + * 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.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class LitematicaCommand extends Command { + + public LitematicaCommand(IBaritone baritone) { + super(baritone, "litematica"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + baritone.getBuilderProcess().buildOpenLitematic(); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Builds the loaded schematic"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Builds the schematic currently open in Litematica.", + "", + "Usage:", + "> litematica" + ); + } +} \ No newline at end of file diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 1766af623..437c2c8d9 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -44,9 +44,13 @@ import baritone.utils.schematic.MapArtSchematic; import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.SchematicSystem; +import baritone.utils.schematic.litematica.LitematicaHelper; import baritone.utils.schematic.schematica.SchematicaHelper; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import fi.dy.masa.litematica.data.DataManager; +import fi.dy.masa.litematica.schematic.placement.SchematicPlacement; +import fi.dy.masa.litematica.schematic.placement.SchematicPlacementManager; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import net.minecraft.block.*; import net.minecraft.block.properties.IProperty; @@ -176,6 +180,24 @@ public void buildOpenSchematic() { } } + @Override + public void buildOpenLitematic() { + if (LitematicaHelper.isLitematicaPresent()) { + SchematicPlacementManager placementManager = DataManager.getSchematicPlacementManager(); + List placementList = placementManager.getAllSchematicsPlacements(); + if (placementList.size()>0) { + String name = LitematicaHelper.getName(placementList,0); + File schemFile = LitematicaHelper.getSchematicFile(placementList,0); + Vec3i origin = LitematicaHelper.getOrigin(placementList,0); + + build(name, schemFile, origin); + } else { + logDirect("No schematic currently open"); + } + logDirect("Litematica is not present"); + } + } + public void clearArea(BlockPos corner1, BlockPos corner2) { BlockPos origin = new BlockPos(Math.min(corner1.getX(), corner2.getX()), Math.min(corner1.getY(), corner2.getY()), Math.min(corner1.getZ(), corner2.getZ())); int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java new file mode 100644 index 000000000..825332583 --- /dev/null +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -0,0 +1,74 @@ +/* + * 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.schematic.litematica; + +import com.github.lunatrius.schematica.Schematica; +import fi.dy.masa.litematica.schematic.placement.SchematicPlacement; +import fi.dy.masa.litematica.schematic.placement.SchematicPlacementManager; +import net.minecraft.util.math.Vec3i; + +import java.io.File; +import java.util.List; + +public enum LitematicaHelper { ; + public static boolean isLitematicaPresent() { + try { + Class.forName(Schematica.class.getName()); + return true; + } catch (ClassNotFoundException | NoClassDefFoundError ex) { + return false; + } + } + public static String getName(List placementList, int i) { + return placementList.get(i).getName(); + } + public static Vec3i getOrigin(List placementList, int i) { + int x,y,z; + x=placementList.get(i).getOrigin().getX(); + y=placementList.get(i).getOrigin().getY(); + z=placementList.get(i).getOrigin().getZ(); + return new Vec3i(x,y,z); + } + public static File getSchematicFile(List placementList, int i) { + return placementList.get(i).getSchematicFile(); + } +} + + + + + + + + + + + + + + + + + + + + + + + + From 293f5db172b4705a5c1e62e0d5c461847a6a6e57 Mon Sep 17 00:00:00 2001 From: schmar03 Date: Wed, 28 Sep 2022 14:15:48 +0200 Subject: [PATCH 378/935] LitematicaCommand added to build loaded schematics --- .../java/baritone/process/BuilderProcess.java | 7 ++-- .../litematica/LitematicaHelper.java | 5 +-- .../fi/dy/masa/litematica/Litematica.java | 21 ++++++++++ .../dy/masa/litematica/data/DataManager.java | 31 +++++++++++++++ .../placement/SchematicPlacement.java | 22 +++++++++++ .../placement/SchematicPlacementManager.java | 29 ++++++++++++++ .../placement/SchematicPlacementUnloaded.java | 39 +++++++++++++++++++ 7 files changed, 147 insertions(+), 7 deletions(-) create mode 100644 src/main/java/fi/dy/masa/litematica/Litematica.java create mode 100644 src/main/java/fi/dy/masa/litematica/data/DataManager.java create mode 100644 src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java create mode 100644 src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java create mode 100644 src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 437c2c8d9..cd1a19b8b 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -50,7 +50,6 @@ import com.google.common.collect.ImmutableSet; import fi.dy.masa.litematica.data.DataManager; import fi.dy.masa.litematica.schematic.placement.SchematicPlacement; -import fi.dy.masa.litematica.schematic.placement.SchematicPlacementManager; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import net.minecraft.block.*; import net.minecraft.block.properties.IProperty; @@ -182,9 +181,8 @@ public void buildOpenSchematic() { @Override public void buildOpenLitematic() { - if (LitematicaHelper.isLitematicaPresent()) { - SchematicPlacementManager placementManager = DataManager.getSchematicPlacementManager(); - List placementList = placementManager.getAllSchematicsPlacements(); + if (LitematicaHelper.isLitematicaPresent()) { //TODO Investigate why true even without litematica being present + List placementList = DataManager.getSchematicPlacementManager().getAllSchematicPlacements(); if (placementList.size()>0) { String name = LitematicaHelper.getName(placementList,0); File schemFile = LitematicaHelper.getSchematicFile(placementList,0); @@ -194,6 +192,7 @@ public void buildOpenLitematic() { } else { logDirect("No schematic currently open"); } + } else { logDirect("Litematica is not present"); } } diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index 825332583..c97a46b71 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -17,9 +17,8 @@ package baritone.utils.schematic.litematica; -import com.github.lunatrius.schematica.Schematica; +import fi.dy.masa.litematica.Litematica; import fi.dy.masa.litematica.schematic.placement.SchematicPlacement; -import fi.dy.masa.litematica.schematic.placement.SchematicPlacementManager; import net.minecraft.util.math.Vec3i; import java.io.File; @@ -28,7 +27,7 @@ public enum LitematicaHelper { ; public static boolean isLitematicaPresent() { try { - Class.forName(Schematica.class.getName()); + Class.forName(Litematica.class.getName()); return true; } catch (ClassNotFoundException | NoClassDefFoundError ex) { return false; diff --git a/src/main/java/fi/dy/masa/litematica/Litematica.java b/src/main/java/fi/dy/masa/litematica/Litematica.java new file mode 100644 index 000000000..46f4e02ae --- /dev/null +++ b/src/main/java/fi/dy/masa/litematica/Litematica.java @@ -0,0 +1,21 @@ +/* + * 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 fi.dy.masa.litematica; + +public class Litematica { +} diff --git a/src/main/java/fi/dy/masa/litematica/data/DataManager.java b/src/main/java/fi/dy/masa/litematica/data/DataManager.java new file mode 100644 index 000000000..b590eb2e8 --- /dev/null +++ b/src/main/java/fi/dy/masa/litematica/data/DataManager.java @@ -0,0 +1,31 @@ +/* + * 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 fi.dy.masa.litematica.data; + +import fi.dy.masa.litematica.schematic.placement.SchematicPlacementManager; + +public class DataManager { + public static final DataManager INSTANCE = new DataManager(); + private final SchematicPlacementManager schematicPlacementManager = new SchematicPlacementManager(); + private static DataManager getInstance() { + return INSTANCE; + } + public static SchematicPlacementManager getSchematicPlacementManager() { + return getInstance().schematicPlacementManager; + } +} diff --git a/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java b/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java new file mode 100644 index 000000000..0407dff09 --- /dev/null +++ b/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java @@ -0,0 +1,22 @@ +/* + * 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 fi.dy.masa.litematica.schematic.placement; + +public class SchematicPlacement extends SchematicPlacementUnloaded { + +} diff --git a/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java b/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java new file mode 100644 index 000000000..c30ab149d --- /dev/null +++ b/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java @@ -0,0 +1,29 @@ +/* + * 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 fi.dy.masa.litematica.schematic.placement; + +import java.util.ArrayList; +import java.util.List; + +public class SchematicPlacementManager { + private final List schematicPlacements = new ArrayList<>(); + + public List getAllSchematicPlacements() { + return schematicPlacements; + } +} diff --git a/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java b/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java new file mode 100644 index 000000000..707aaf78c --- /dev/null +++ b/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java @@ -0,0 +1,39 @@ +/* + * 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 fi.dy.masa.litematica.schematic.placement; + +import net.minecraft.util.math.BlockPos; + +import javax.annotation.Nullable; +import java.io.File; + +public class SchematicPlacementUnloaded { + protected String name = "?"; + @Nullable protected File schematicFile; + protected BlockPos origin = BlockPos.ORIGIN; + public String getName() { + return this.name; + } + @Nullable + public File getSchematicFile() { + return this.schematicFile; + } + public BlockPos getOrigin() { + return this.origin; + } +} From 5ff274f040c6bd568857730144a8e22e1402399a Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Thu, 29 Sep 2022 19:58:05 +0200 Subject: [PATCH 379/935] Change requests part one --- .../launch/mixins/MixinNBTTagLongArray.java | 2 - src/launch/resources/mixins.baritone.json | 4 +- .../format/DefaultSchematicFormats.java | 2 +- .../format/defaults/LitematicaSchematic.java | 73 ++++++++----------- 4 files changed, 35 insertions(+), 46 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java b/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java index a4cd739ac..2c05e5442 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java +++ b/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java @@ -32,6 +32,4 @@ public abstract class MixinNBTTagLongArray implements INBTTagLongArray { @Accessor("data") @Override public abstract long[] getLongArray(); - - } \ No newline at end of file diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index c4b88481c..982736635 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -23,6 +23,7 @@ "MixinItemStack", "MixinItemTool", "MixinMinecraft", + "MixinNBTTagLongArray", "MixinNetHandlerPlayClient", "MixinNetworkManager", "MixinPlayerControllerMP", @@ -31,7 +32,6 @@ "MixinStateImplementation", "MixinTabCompleter", "MixinVboRenderList", - "MixinWorldClient", - "MixinNBTTagLongArray" + "MixinWorldClient" ] } \ No newline at end of file diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index de142b391..d8049ce4a 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -71,7 +71,7 @@ public IStaticSchematic parse(InputStream input) throws IOException { /** * The Litematica schematic specification. Commonly denoted by the ".litematic" file extension. */ - Litematica("litematic") { + LITEMATICA("litematic") { @Override public IStaticSchematic parse(InputStream input) throws IOException { NBTTagCompound nbt = CompressedStreamTools.readCompressed(input); diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 37d132fb3..4cccecee6 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -37,27 +37,30 @@ * */ public final class LitematicaSchematic extends StaticSchematic { - int minX=0; - int minY=0; - int minZ=0; - private static final String reg = "Regions"; - private static final String meta = "Metadata"; - private static final String schemSize = "EnclosingSize"; - private static final String blSt = "BlockStates"; - private static final String blStPl = "BlockStatePalette"; - private static final String pos = "Position"; - private static final String size = "Size"; + private final int minX; + private final int minY; + private final int minZ; public LitematicaSchematic(NBTTagCompound nbt) { - getMinimumCorner(nbt); + int x=0; + int y=0; + int z=0; + for (String subReg : getRegions(nbt)) { + x = Math.min(x, getMinimumCord(nbt, subReg,"x")); + y = Math.min(y, getMinimumCord(nbt, subReg,"y")); + z = Math.min(z, getMinimumCord(nbt, subReg,"z")); + } + this.minX = x; + this.minY = y; + this.minZ = z; - this.x = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("x")); - this.y = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("y")); - this.z = Math.abs(nbt.getCompoundTag(meta).getCompoundTag(schemSize).getInteger("z")); + this.x = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("x")); + this.y = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("y")); + this.z = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("z")); this.states = new IBlockState[this.x][this.z][this.y]; for (String subReg : getRegions(nbt)) { - NBTTagList usedBlockTypes = nbt.getCompoundTag(reg).getCompoundTag(subReg).getTagList(blStPl, 10); + NBTTagList usedBlockTypes = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getTagList("BlockStatePalette", 10); IBlockState[] blockList = getBlockList(usedBlockTypes); int bitsPerBlock = getBitsPerBlock(usedBlockTypes.tagCount()); @@ -74,28 +77,16 @@ public LitematicaSchematic(NBTTagCompound nbt) { * @return Array of subregion names. */ private static String[] getRegions(NBTTagCompound nbt) { - return nbt.getCompoundTag(reg).getKeySet().toArray(new String[0]); - } - - /** - * Calculates the minimum cords/origin of the schematic as litematica schematics - * can have a non-minimum origin. - */ - private void getMinimumCorner(NBTTagCompound nbt) { - for (String subReg : getRegions(nbt)) { - this.minX = Math.min(this.minX, getMinimumCord(nbt, subReg,"x")); - this.minY = Math.min(this.minY, getMinimumCord(nbt, subReg,"y")); - this.minZ = Math.min(this.minZ, getMinimumCord(nbt, subReg,"z")); - } + return nbt.getCompoundTag("Regions").getKeySet().toArray(new String[0]); } /** * @param s axis that should be read. - * @return the lower cord of the requested axis. + * @return the lower coord of the requested axis. */ private static int getMinimumCord(NBTTagCompound nbt, String subReg, String s) { - int a = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(pos).getInteger(s); - int b = nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger(s); + int a = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Position").getInteger(s); + int b = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger(s); if (b < 0) { b++; } @@ -167,16 +158,16 @@ private static int getBitsPerBlock(int amountOfBlockTypes) { */ private static long getVolume(NBTTagCompound nbt, String subReg) { return Math.abs( - nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x") * - nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y") * - nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("z")); + nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("x") * + nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("y") * + nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("z")); } /** * @return array of Long values. */ private static long[] getBlockStates(NBTTagCompound nbt, String subReg) { - return ((INBTTagLongArray) nbt.getCompoundTag(reg).getCompoundTag(subReg).getTag(blSt)).getLongArray(); + return ((INBTTagLongArray) nbt.getCompoundTag("Regions").getCompoundTag(subReg).getTag("BlockStates")).getLongArray(); } /** @@ -201,16 +192,16 @@ private void writeSubregionIntoSchematic(NBTTagCompound nbt, String subReg, IBlo } /** - * @param x cord of the schematic. - * @param y cord of the schematic. - * @param z cord of the schematic. + * @param x coord of the schematic. + * @param y coord of the schematic. + * @param z coord of the schematic. * @return if the current block is inside the subregion. */ private static boolean inSubregion(NBTTagCompound nbt, String subReg, int x, int y, int z) { return - x < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("x")) && - y < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("y")) && - z < Math.abs(nbt.getCompoundTag(reg).getCompoundTag(subReg).getCompoundTag(size).getInteger("z")); + x < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("x")) && + y < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("y")) && + z < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("z")); } /** LitematicaBitArray class from litematica */ From 7ba3de57d02e34962af3b4f610cee446b7b30196 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Thu, 29 Sep 2022 20:20:38 +0200 Subject: [PATCH 380/935] credits LitematicaBitArray --- .../schematic/format/defaults/LitematicaSchematic.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 4cccecee6..df8c82ee3 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -204,7 +204,11 @@ private static boolean inSubregion(NBTTagCompound nbt, String subReg, int x, int z < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("z")); } - /** LitematicaBitArray class from litematica */ + /** + * @author maruohon + * Class from the Litematica mod by maruohon + * https://github.com/maruohon/litematica + */ private static class LitematicaBitArray { /** The long array that is used to store the data for this BitArray. */ From e99fcbbe36450f414d98f860c461973a7ee20b07 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Thu, 29 Sep 2022 21:47:42 +0200 Subject: [PATCH 381/935] Change requests part two --- .../format/DefaultSchematicFormats.java | 8 +- .../format/defaults/LitematicaSchematic.java | 170 +++++++++--------- 2 files changed, 84 insertions(+), 94 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index d8049ce4a..699f87bc3 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -77,11 +77,11 @@ public IStaticSchematic parse(InputStream input) throws IOException { NBTTagCompound nbt = CompressedStreamTools.readCompressed(input); int version = nbt.getInteger("Version"); switch (version) { - case 4: + case 4: //1.12 return new LitematicaSchematic(nbt); - case 5: - case 6: - throw new UnsupportedOperationException("This Schematic Verion is to new."); + case 5: //1.13-1.17 + case 6: //1.18+ + throw new UnsupportedOperationException("This litematic Verion is to new."); default: throw new UnsupportedOperationException("Unsuported Version of a Litematica Schematic"); } diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index df8c82ee3..3f0e165f1 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -17,24 +17,24 @@ package baritone.utils.schematic.format.defaults; -import baritone.utils.schematic.StaticSchematic; import baritone.utils.accessor.INBTTagLongArray; -import net.minecraft.block.*; +import baritone.utils.schematic.StaticSchematic; +import net.minecraft.block.Block; import net.minecraft.block.properties.IProperty; -import net.minecraft.nbt.*; -import net.minecraft.util.ResourceLocation; import net.minecraft.block.state.IBlockState; - +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ResourceLocation; import org.apache.commons.lang3.Validate; + import javax.annotation.Nullable; -import java.util.*; +import java.util.Optional; /** * @author Emerson * @since 12/27/2020 * @author rycbar * @since 22.09.2022 - * */ public final class LitematicaSchematic extends StaticSchematic { private final int minX; @@ -42,13 +42,13 @@ public final class LitematicaSchematic extends StaticSchematic { private final int minZ; public LitematicaSchematic(NBTTagCompound nbt) { - int x=0; - int y=0; - int z=0; + int x = 0; + int y = 0; + int z = 0; for (String subReg : getRegions(nbt)) { - x = Math.min(x, getMinimumCord(nbt, subReg,"x")); - y = Math.min(y, getMinimumCord(nbt, subReg,"y")); - z = Math.min(z, getMinimumCord(nbt, subReg,"z")); + x = Math.min(x, getMinimumCoord(nbt, subReg, "x")); + y = Math.min(y, getMinimumCoord(nbt, subReg, "y")); + z = Math.min(z, getMinimumCoord(nbt, subReg, "z")); } this.minX = x; this.minY = y; @@ -81,16 +81,17 @@ private static String[] getRegions(NBTTagCompound nbt) { } /** + * Gets both ends from schematic box for a given axis and returns the lower one. * @param s axis that should be read. * @return the lower coord of the requested axis. */ - private static int getMinimumCord(NBTTagCompound nbt, String subReg, String s) { + private static int getMinimumCoord(NBTTagCompound nbt, String subReg, String s) { int a = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Position").getInteger(s); int b = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger(s); if (b < 0) { b++; } - return Math.min(a,a+b); + return Math.min(a, a + b); } @@ -101,7 +102,7 @@ private static int getMinimumCord(NBTTagCompound nbt, String subReg, String s) { private static IBlockState[] getBlockList(NBTTagList blockStatePalette) { IBlockState[] blockList = new IBlockState[blockStatePalette.tagCount()]; - for (int i = 0; i< blockStatePalette.tagCount(); i++) { + for (int i = 0; i < blockStatePalette.tagCount(); i++) { Block block = Block.REGISTRY.getObject(new ResourceLocation((((NBTTagCompound) blockStatePalette.get(i)).getString("Name")))); NBTTagCompound properties = ((NBTTagCompound) blockStatePalette.get(i)).getCompoundTag("Properties"); @@ -111,7 +112,7 @@ private static IBlockState[] getBlockList(NBTTagList blockStatePalette) { } /** - * @param block block. + * @param block block. * @param properties List of Properties the block has. * @return A blockState. */ @@ -129,12 +130,7 @@ private static IBlockState getBlockState(Block block, NBTTagCompound properties) } /** - * i haven't written this and i wont try to decode it. - * @param state . - * @param property . - * @param value . - * @return . - * @param . + * @author Emerson */ private static > IBlockState setPropertyValue(IBlockState state, IProperty property, String value) { Optional parsed = property.parseValue(value).toJavaUtil(); @@ -150,10 +146,12 @@ private static > IBlockState setPropertyValue(IBlockStat * @return amount of bits used to encode a block. */ private static int getBitsPerBlock(int amountOfBlockTypes) { - return (int) Math.floor((Math.log(amountOfBlockTypes)) / Math.log(2))+1; + return (int) Math.floor((Math.log(amountOfBlockTypes)) / Math.log(2)) + 1; } /** + * Calculates the volume of the subregion. As size can be a negative value we take the absolute value of the + * multiplication as the volume still holds a positive amount of blocks. * @return the volume of the subregion. */ private static long getVolume(NBTTagCompound nbt, String subReg) { @@ -170,20 +168,37 @@ private static long[] getBlockStates(NBTTagCompound nbt, String subReg) { return ((INBTTagLongArray) nbt.getCompoundTag("Regions").getCompoundTag(subReg).getTag("BlockStates")).getLongArray(); } + /** + * Subregion don't have to be the same size as the enclosing size of the schematic. If they are smaller we check here if the current block is part of the subregion. + * @param x coord of the block relative to the minimum corner. + * @param y coord of the block relative to the minimum corner. + * @param z coord of the block relative to the minimum corner. + * @return if the current block is part of the subregion. + */ + private static boolean inSubregion(NBTTagCompound nbt, String subReg, int x, int y, int z) { + return + x < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("x")) && + y < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("y")) && + z < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("z")); + } + /** * @param blockList list with the different block types used in the schematic - * @param bitArray bit array that holds the placement pattern + * @param bitArray bit array that holds the placement pattern */ + //x,y,z are the releative positons to the minimum corner of the enclosing box + //minX,minY,minZ are correction terms if the schematic origin isn't the minimum corner + //posX,posY,posZ are the subregions offset relative to the minimum corner private void writeSubregionIntoSchematic(NBTTagCompound nbt, String subReg, IBlockState[] blockList, LitematicaBitArray bitArray) { - int posX = getMinimumCord(nbt, subReg,"x"); - int posY = getMinimumCord(nbt, subReg,"y"); - int posZ = getMinimumCord(nbt, subReg,"z"); + int posX = getMinimumCoord(nbt, subReg, "x"); + int posY = getMinimumCoord(nbt, subReg, "y"); + int posZ = getMinimumCoord(nbt, subReg, "z"); int index = 0; for (int y = 0; y < this.y; y++) { for (int z = 0; z < this.z; z++) { for (int x = 0; x < this.x; x++) { if (inSubregion(nbt, subReg, x, y, z)) { - this.states[x-(minX- posX)][z-(minZ- posZ)][y-(minY- posY)] = blockList[bitArray.getAt(index)]; + this.states[x - (minX - posX)][z - (minZ - posZ)][y - (minY - posY)] = blockList[bitArray.getAt(index)]; index++; } } @@ -191,101 +206,76 @@ private void writeSubregionIntoSchematic(NBTTagCompound nbt, String subReg, IBlo } } - /** - * @param x coord of the schematic. - * @param y coord of the schematic. - * @param z coord of the schematic. - * @return if the current block is inside the subregion. - */ - private static boolean inSubregion(NBTTagCompound nbt, String subReg, int x, int y, int z) { - return - x < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("x")) && - y < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("y")) && - z < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("z")); - } - /** * @author maruohon * Class from the Litematica mod by maruohon - * https://github.com/maruohon/litematica + * ... */ - private static class LitematicaBitArray - { - /** The long array that is used to store the data for this BitArray. */ + private static class LitematicaBitArray { + /** + * The long array that is used to store the data for this BitArray. + */ private final long[] longArray; - /** Number of bits a single entry takes up */ + /** + * Number of bits a single entry takes up + */ private final int bitsPerEntry; /** * The maximum value for a single entry. This also works as a bitmask for a single entry. * For instance, if bitsPerEntry were 5, this value would be 31 (ie, {@code 0b00011111}). */ private final long maxEntryValue; - /** Number of entries in this array (not the length of the long array that internally backs this array) */ + /** + * Number of entries in this array (not the length of the long array that internally backs this array) + */ private final long arraySize; - public LitematicaBitArray(int bitsPerEntryIn, long arraySizeIn, @Nullable long[] longArrayIn) - { - Validate.inclusiveBetween(1L, 32L, (long) bitsPerEntryIn); + public LitematicaBitArray(int bitsPerEntryIn, long arraySizeIn, @Nullable long[] longArrayIn) { + Validate.inclusiveBetween(1L, 32L, bitsPerEntryIn); this.arraySize = arraySizeIn; this.bitsPerEntry = bitsPerEntryIn; this.maxEntryValue = (1L << bitsPerEntryIn) - 1L; - if (longArrayIn != null) - { + if (longArrayIn != null) { this.longArray = longArrayIn; + } else { + this.longArray = new long[(int) (roundUp(arraySizeIn * (long) bitsPerEntryIn, 64L) / 64L)]; } - else - { - this.longArray = new long[(int) (roundUp((long) arraySizeIn * (long) bitsPerEntryIn, 64L) / 64L)]; + } + + public static long roundUp(long number, long interval) { + int sign = 1; + if (interval == 0) { + return 0; + } else if (number == 0) { + return interval; + } else { + if (number < 0) { + sign = -1; + } + + long i = number % (interval * sign); + return i == 0 ? number : number + (interval * sign) - i; } } - public int getAt(long index) - { - Validate.inclusiveBetween(0L, this.arraySize - 1L, (long) index); + public int getAt(long index) { + Validate.inclusiveBetween(0L, this.arraySize - 1L, index); long startOffset = index * (long) this.bitsPerEntry; int startArrIndex = (int) (startOffset >> 6); // startOffset / 64 int endArrIndex = (int) (((index + 1L) * (long) this.bitsPerEntry - 1L) >> 6); int startBitOffset = (int) (startOffset & 0x3F); // startOffset % 64 - if (startArrIndex == endArrIndex) - { + if (startArrIndex == endArrIndex) { return (int) (this.longArray[startArrIndex] >>> startBitOffset & this.maxEntryValue); - } - else - { + } else { int endOffset = 64 - startBitOffset; return (int) ((this.longArray[startArrIndex] >>> startBitOffset | this.longArray[endArrIndex] << endOffset) & this.maxEntryValue); } } - - public long size() - { + public long size() { return this.arraySize; } - - public static long roundUp(long number, long interval) - { - int sign = 1; - if (interval == 0) - { - return 0; - } - else if (number == 0) - { - return interval; - } - else - { - if (number < 0) - { - sign = -1; - } - - long i = number % (interval * sign); - return i == 0 ? number : number + (interval * sign) - i; - } - } } } \ No newline at end of file From 484b3326c77c92d749cc24d919888d726ab05dc4 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Thu, 29 Sep 2022 21:52:15 +0200 Subject: [PATCH 382/935] auto-format all files I touched --- .../utils/schematic/format/DefaultSchematicFormats.java | 2 +- .../utils/schematic/format/defaults/LitematicaSchematic.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 699f87bc3..faabe57b3 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -19,9 +19,9 @@ import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.format.ISchematicFormat; +import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.format.defaults.MCEditSchematic; import baritone.utils.schematic.format.defaults.SpongeSchematic; -import baritone.utils.schematic.format.defaults.LitematicaSchematic; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import org.apache.commons.io.FilenameUtils; diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 3f0e165f1..12b3264fe 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -82,6 +82,7 @@ private static String[] getRegions(NBTTagCompound nbt) { /** * Gets both ends from schematic box for a given axis and returns the lower one. + * * @param s axis that should be read. * @return the lower coord of the requested axis. */ @@ -152,6 +153,7 @@ private static int getBitsPerBlock(int amountOfBlockTypes) { /** * Calculates the volume of the subregion. As size can be a negative value we take the absolute value of the * multiplication as the volume still holds a positive amount of blocks. + * * @return the volume of the subregion. */ private static long getVolume(NBTTagCompound nbt, String subReg) { @@ -170,6 +172,7 @@ private static long[] getBlockStates(NBTTagCompound nbt, String subReg) { /** * Subregion don't have to be the same size as the enclosing size of the schematic. If they are smaller we check here if the current block is part of the subregion. + * * @param x coord of the block relative to the minimum corner. * @param y coord of the block relative to the minimum corner. * @param z coord of the block relative to the minimum corner. From 4ba3c883e6d49d194c2e31f3e527ac5df10c2ec7 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Fri, 30 Sep 2022 13:32:31 +0200 Subject: [PATCH 383/935] something is fishy with the getAllSchematicPlacements() methode but i want my progress saved --- scripts/proguard.pro | 2 ++ .../java/baritone/process/BuilderProcess.java | 28 +++++++++++------- .../litematica/LitematicaHelper.java | 29 +++++++++++++------ .../fi/dy/masa/litematica/Litematica.java | 0 .../dy/masa/litematica/data/DataManager.java | 0 .../placement/SchematicPlacement.java | 0 .../placement/SchematicPlacementManager.java | 0 .../placement/SchematicPlacementUnloaded.java | 0 8 files changed, 39 insertions(+), 20 deletions(-) rename src/{main => schematica_api}/java/fi/dy/masa/litematica/Litematica.java (100%) rename src/{main => schematica_api}/java/fi/dy/masa/litematica/data/DataManager.java (100%) rename src/{main => schematica_api}/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java (100%) rename src/{main => schematica_api}/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java (100%) rename src/{main => schematica_api}/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java (100%) diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 517494f46..cc3130081 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -42,8 +42,10 @@ #try to keep usage of schematica in separate classes -keep class baritone.utils.schematic.schematica.** +-keep class baritone.utils.schematic.litematica.** #proguard doesnt like it when it cant find our fake schematica classes -dontwarn baritone.utils.schematic.schematica.** +-dontwarn baritone.utils.schematic.litematica.** # copy all necessary libraries into tempLibraries to build diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index cd1a19b8b..a3ee785d9 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -48,8 +48,6 @@ import baritone.utils.schematic.schematica.SchematicaHelper; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import fi.dy.masa.litematica.data.DataManager; -import fi.dy.masa.litematica.schematic.placement.SchematicPlacement; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import net.minecraft.block.*; import net.minecraft.block.properties.IProperty; @@ -181,16 +179,24 @@ public void buildOpenSchematic() { @Override public void buildOpenLitematic() { - if (LitematicaHelper.isLitematicaPresent()) { //TODO Investigate why true even without litematica being present - List placementList = DataManager.getSchematicPlacementManager().getAllSchematicPlacements(); - if (placementList.size()>0) { - String name = LitematicaHelper.getName(placementList,0); - File schemFile = LitematicaHelper.getSchematicFile(placementList,0); - Vec3i origin = LitematicaHelper.getOrigin(placementList,0); - - build(name, schemFile, origin); + logDirect("start building open litematic"); + if (LitematicaHelper.isLitematicaPresent()) { + logDirect("litematica is present"); //TODO debug line remove + if (LitematicaHelper.hasLoadedSchematic()) { + logDirect("a schematic is present"); //TODO debug line remove + String name = LitematicaHelper.getName(0); + File schemFile = LitematicaHelper.getSchematicFile(0); + Vec3i origin = LitematicaHelper.getOrigin(0); + + boolean success = build(name, schemFile, origin); + if (success) { + logDirect(String.format("Building Schematic: %s\nOrigion: %s",name,origin)); + } else { + logDirect("Couldn't load the schematic. That is strange."); + //this should happen as invalid schematics should not be abel to be loaded in litematica in the first place + } } else { - logDirect("No schematic currently open"); + logDirect("No schematic currently loaded"); } } else { logDirect("Litematica is not present"); diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index c97a46b71..3692b8b04 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -18,13 +18,15 @@ package baritone.utils.schematic.litematica; import fi.dy.masa.litematica.Litematica; +import fi.dy.masa.litematica.data.DataManager; import fi.dy.masa.litematica.schematic.placement.SchematicPlacement; +import fi.dy.masa.litematica.schematic.placement.SchematicPlacementManager; import net.minecraft.util.math.Vec3i; import java.io.File; import java.util.List; -public enum LitematicaHelper { ; +public final class LitematicaHelper { public static boolean isLitematicaPresent() { try { Class.forName(Litematica.class.getName()); @@ -33,18 +35,27 @@ public static boolean isLitematicaPresent() { return false; } } - public static String getName(List placementList, int i) { - return placementList.get(i).getName(); + //TODO compact into one line when debugging is done + public static boolean hasLoadedSchematic() { + System.out.println("start checking for schematic"); //TODO debug line remove + SchematicPlacementManager a = DataManager.getSchematicPlacementManager(); + System.out.println("manager aquired"); //TODO debug line remove + List< SchematicPlacement> b = a.getAllSchematicPlacements(); + System.out.println("list aquired"); //TODO debug line remove + return b.size()>0; } - public static Vec3i getOrigin(List placementList, int i) { + public static String getName(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicPlacements().get(i).getName(); + } + public static Vec3i getOrigin(int i) { int x,y,z; - x=placementList.get(i).getOrigin().getX(); - y=placementList.get(i).getOrigin().getY(); - z=placementList.get(i).getOrigin().getZ(); + x=DataManager.getSchematicPlacementManager().getAllSchematicPlacements().get(i).getOrigin().getX(); + y=DataManager.getSchematicPlacementManager().getAllSchematicPlacements().get(i).getOrigin().getY(); + z=DataManager.getSchematicPlacementManager().getAllSchematicPlacements().get(i).getOrigin().getZ(); return new Vec3i(x,y,z); } - public static File getSchematicFile(List placementList, int i) { - return placementList.get(i).getSchematicFile(); + public static File getSchematicFile(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicPlacements().get(i).getSchematicFile(); } } diff --git a/src/main/java/fi/dy/masa/litematica/Litematica.java b/src/schematica_api/java/fi/dy/masa/litematica/Litematica.java similarity index 100% rename from src/main/java/fi/dy/masa/litematica/Litematica.java rename to src/schematica_api/java/fi/dy/masa/litematica/Litematica.java diff --git a/src/main/java/fi/dy/masa/litematica/data/DataManager.java b/src/schematica_api/java/fi/dy/masa/litematica/data/DataManager.java similarity index 100% rename from src/main/java/fi/dy/masa/litematica/data/DataManager.java rename to src/schematica_api/java/fi/dy/masa/litematica/data/DataManager.java diff --git a/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java similarity index 100% rename from src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java rename to src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java diff --git a/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java similarity index 100% rename from src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java rename to src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java diff --git a/src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java similarity index 100% rename from src/main/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java rename to src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java From 025f6235f9eaa678088a0d595dcd9306f8d4188b Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Fri, 30 Sep 2022 17:53:31 +0200 Subject: [PATCH 384/935] litematica command works and added schematic selection if more than 1 schematic is loaded bug: if schematic origin isnt minimum corner schematic is built in the wrong place --- .../baritone/api/process/IBuilderProcess.java | 2 +- .../command/defaults/LitematicaCommand.java | 19 +++++++++++++---- .../java/baritone/process/BuilderProcess.java | 11 ++++------ .../litematica/LitematicaHelper.java | 21 ++++++------------- .../placement/SchematicPlacementManager.java | 4 +++- 5 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index dc17d0419..c63113cdd 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -58,7 +58,7 @@ default boolean build(String schematicFile, BlockPos origin) { void buildOpenSchematic(); - void buildOpenLitematic(); + void buildOpenLitematic(int i); void pause(); diff --git a/src/main/java/baritone/command/defaults/LitematicaCommand.java b/src/main/java/baritone/command/defaults/LitematicaCommand.java index 56360331e..eecab07de 100644 --- a/src/main/java/baritone/command/defaults/LitematicaCommand.java +++ b/src/main/java/baritone/command/defaults/LitematicaCommand.java @@ -34,8 +34,18 @@ public LitematicaCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { - args.requireMax(0); - baritone.getBuilderProcess().buildOpenLitematic(); + int schematic = 0; + if(args.hasAny()) { + args.requireMax(1); + if (args.is(Integer.class)) { + schematic = args.getAs(Integer.class)-1; + } + } + try { + baritone.getBuilderProcess().buildOpenLitematic(schematic); + } catch (IndexOutOfBoundsException e) { + logDirect("Pleas provide a valid index."); + } } @Override @@ -51,10 +61,11 @@ public String getShortDesc() { @Override public List getLongDesc() { return Arrays.asList( - "Builds the schematic currently open in Litematica.", + "Build a schematic currently open in Litematica.", "", "Usage:", - "> litematica" + "> litematica", + "> litematica <#>" ); } } \ No newline at end of file diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index a3ee785d9..bb62ab769 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -178,15 +178,12 @@ public void buildOpenSchematic() { } @Override - public void buildOpenLitematic() { - logDirect("start building open litematic"); + public void buildOpenLitematic(int i) { if (LitematicaHelper.isLitematicaPresent()) { - logDirect("litematica is present"); //TODO debug line remove if (LitematicaHelper.hasLoadedSchematic()) { - logDirect("a schematic is present"); //TODO debug line remove - String name = LitematicaHelper.getName(0); - File schemFile = LitematicaHelper.getSchematicFile(0); - Vec3i origin = LitematicaHelper.getOrigin(0); + String name = LitematicaHelper.getName(i); + File schemFile = LitematicaHelper.getSchematicFile(i); + Vec3i origin = LitematicaHelper.getOrigin(i); boolean success = build(name, schemFile, origin); if (success) { diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index 3692b8b04..9f5f19fb1 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -19,12 +19,9 @@ import fi.dy.masa.litematica.Litematica; import fi.dy.masa.litematica.data.DataManager; -import fi.dy.masa.litematica.schematic.placement.SchematicPlacement; -import fi.dy.masa.litematica.schematic.placement.SchematicPlacementManager; import net.minecraft.util.math.Vec3i; import java.io.File; -import java.util.List; public final class LitematicaHelper { public static boolean isLitematicaPresent() { @@ -35,27 +32,21 @@ public static boolean isLitematicaPresent() { return false; } } - //TODO compact into one line when debugging is done public static boolean hasLoadedSchematic() { - System.out.println("start checking for schematic"); //TODO debug line remove - SchematicPlacementManager a = DataManager.getSchematicPlacementManager(); - System.out.println("manager aquired"); //TODO debug line remove - List< SchematicPlacement> b = a.getAllSchematicPlacements(); - System.out.println("list aquired"); //TODO debug line remove - return b.size()>0; + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().size()>0; } public static String getName(int i) { - return DataManager.getSchematicPlacementManager().getAllSchematicPlacements().get(i).getName(); + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getName(); } public static Vec3i getOrigin(int i) { int x,y,z; - x=DataManager.getSchematicPlacementManager().getAllSchematicPlacements().get(i).getOrigin().getX(); - y=DataManager.getSchematicPlacementManager().getAllSchematicPlacements().get(i).getOrigin().getY(); - z=DataManager.getSchematicPlacementManager().getAllSchematicPlacements().get(i).getOrigin().getZ(); + x=DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin().getX(); + y=DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin().getY(); + z=DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin().getZ(); return new Vec3i(x,y,z); } public static File getSchematicFile(int i) { - return DataManager.getSchematicPlacementManager().getAllSchematicPlacements().get(i).getSchematicFile(); + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getSchematicFile(); } } diff --git a/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java index c30ab149d..9391330d3 100644 --- a/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java +++ b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java @@ -23,7 +23,9 @@ public class SchematicPlacementManager { private final List schematicPlacements = new ArrayList<>(); - public List getAllSchematicPlacements() { + //in case of a java.lang.NoSuchMethodError try change the name of this method to getAllSchematicPlacements() + // there are inconsistencies in the litematica mod about the naming of this method + public List getAllSchematicsPlacements() { return schematicPlacements; } } From 45c0b381562f7fae7d146be19c0a9adbf76af76e Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 30 Sep 2022 18:04:34 +0200 Subject: [PATCH 385/935] Fix jumping from packplaced blocks on water Not having frostwalker means that we must have replaced the water with a throwaway, not that we are standing on water --- .../baritone/pathing/movement/movements/MovementParkour.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 32753c5d9..597f0d72f 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -96,7 +96,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac return; } // we can't jump from (frozen) water with assumeWalkOnWater because we can't be sure it will be frozen - if (standingOn.getBlock() instanceof BlockLiquid && (!MovementHelper.canUseFrostWalker(context, standingOn) || context.assumeWalkOnWater)) { + if (context.assumeWalkOnWater && standingOn.getBlock() instanceof BlockLiquid) { return; } int maxJump; From c14be17e53b71e01ae18e4c1f4a1db3601b325c1 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 30 Sep 2022 22:27:32 +0200 Subject: [PATCH 386/935] Move this to a helper method and add missing cases --- .../pathing/movement/MovementHelper.java | 20 +++++++++++++++++++ .../movement/movements/MovementDiagonal.java | 2 +- .../movement/movements/MovementTraverse.java | 3 +-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index e1f3cf090..b8c4c034d 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -374,6 +374,26 @@ static boolean canUseFrostWalker(IPlayerContext ctx, BlockPos pos) { && ((Integer) state.getValue(BlockLiquid.LEVEL)) == 0; } + /** + * If movements make us stand/walk on this block, will it have a top to walk on? + */ + static boolean mustBeSolidToWalkOn(CalculationContext context, int x, int y, int z, IBlockState state) { + Block block = state.getBlock(); + if (block == Blocks.LADDER || block == Blocks.VINE) { + return false; + } + if (block instanceof BlockLiquid) { + if (context.assumeWalkOnWater) { + return false; + } + Block blockAbove = context.getBlock(x, y+1, z); + if (blockAbove instanceof BlockLiquid) { + return false; + } + } + return true; + } + static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z) { return canPlaceAgainst(bsi, x, y, z, bsi.get0(x, y, z)); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index fafc49824..8436e3cab 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -127,7 +127,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des destWalkOn = destInto; } else { destWalkOn = context.get(destX, y - 1, destZ); - boolean standingOnABlock = !(context.getBlock(x, y - 1, z) instanceof BlockLiquid) || (!context.assumeWalkOnWater && !(context.getBlock(x, y, z) instanceof BlockLiquid)); + boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y-1, z, context.get(x, y-1, z)); frostWalker = standingOnABlock && MovementHelper.canUseFrostWalker(context, destWalkOn); if (!MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn) && !frostWalker) { descend = true; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 66fed66fd..368dbbf8b 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -73,8 +73,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d IBlockState pb1 = context.get(destX, y, destZ); IBlockState destOn = context.get(destX, y - 1, destZ); Block srcDown = context.getBlock(x, y - 1, z); - // if we are on water but are neither in water nor can stand on water we must have placed a block to get here - boolean standingOnABlock = !(srcDown instanceof BlockLiquid) || (!context.assumeWalkOnWater && !(context.getBlock(x, y, z) instanceof BlockLiquid)); + boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y-1, z, context.get(x, y-1, z)); boolean frostWalker = standingOnABlock && MovementHelper.canUseFrostWalker(context, destOn); if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn) || frostWalker) { //this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; From 3da5bbd2674fa1eb85ea30f5ba736e78b14b1ff1 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 30 Sep 2022 22:38:21 +0200 Subject: [PATCH 387/935] Don't pillar from carpet/lilypad on water --- .../baritone/pathing/movement/movements/MovementPillar.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index b9d599334..1a54c104c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -101,6 +101,10 @@ public static double cost(CalculationContext context, int x, int y, int z) { // if we're standing on water and assumeWalkOnWater is false, we must have ascended to here, or sneak backplaced, so it is possible to pillar again return COST_INF; } + if (fromDown.getBlock() instanceof BlockLiquid && (from == Blocks.WATERLILY || from == Blocks.CARPET)) { + // to ascend here we'd have to break the block we are standing on + return COST_INF; + } double hardness = MovementHelper.getMiningDurationTicks(context, x, y + 2, z, toBreak, true); if (hardness >= COST_INF) { return COST_INF; From eb697b7a17071b80edab5f935849e9f1eea3d511 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 30 Sep 2022 22:40:23 +0200 Subject: [PATCH 388/935] Fix costs when assumeWalkOnWater stops us from relying on frostWalker --- .../baritone/pathing/movement/movements/MovementDiagonal.java | 1 + .../baritone/pathing/movement/movements/MovementTraverse.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 8436e3cab..ba8893a3a 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -135,6 +135,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des return; } } + frostWalker &= !context.assumeWalkOnWater; // do this after checking for descends because jesus can't prevent the water from freezing, it just prevents us from relying on the water freezing } double multiplier = WALK_ONE_BLOCK_COST; // For either possible soul sand, that affects half of our walking diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 368dbbf8b..b3a865014 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -74,7 +74,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d IBlockState destOn = context.get(destX, y - 1, destZ); Block srcDown = context.getBlock(x, y - 1, z); boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y-1, z, context.get(x, y-1, z)); - boolean frostWalker = standingOnABlock && MovementHelper.canUseFrostWalker(context, destOn); + boolean frostWalker = standingOnABlock && !context.assumeWalkOnWater && MovementHelper.canUseFrostWalker(context, destOn); if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn) || frostWalker) { //this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; boolean water = false; From 43ee86b4fe6a164b3f7719e00cfa1f147fddb0a4 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 30 Sep 2022 22:41:09 +0200 Subject: [PATCH 389/935] Don't try backplacing against water under carpet/lilypad --- .../baritone/pathing/movement/movements/MovementTraverse.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index b3a865014..1d6dd8715 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -150,6 +150,9 @@ public static double cost(CalculationContext context, int x, int y, int z, int d if (!standingOnABlock) { // standing on water / swimming return COST_INF; // this is obviously impossible } + if (srcDown instanceof BlockLiquid && (context.getBlock(x,y,z) == Blocks.WATERLILY || context.getBlock(x,y,z) == Blocks.CARPET)) { + return COST_INF; // we can stand on these but can't place against them + } WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol return WC + placeCost + hardness1 + hardness2; } From fb814e912dadf3f6e34358354a86b54674103081 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 30 Sep 2022 23:59:49 +0200 Subject: [PATCH 390/935] Don't try parkouring out of water --- .../baritone/pathing/movement/movements/MovementParkour.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 597f0d72f..6a94e47fa 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -99,6 +99,9 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac if (context.assumeWalkOnWater && standingOn.getBlock() instanceof BlockLiquid) { return; } + if (context.getBlock(x, y, z) instanceof BlockLiquid) { + return; // can't jump out of water + } int maxJump; if (standingOn.getBlock() == Blocks.SOUL_SAND) { maxJump = 2; // 1 block gap From 76404c8af671bb59e31c5480363310665606b1e7 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Sat, 1 Oct 2022 02:01:46 +0200 Subject: [PATCH 391/935] it works but its spaghetti --- .../java/baritone/process/BuilderProcess.java | 73 +++++++++++++++++-- .../format/defaults/LitematicaSchematic.java | 17 +++++ .../litematica/LitematicaHelper.java | 9 +++ .../placement/SchematicPlacement.java | 11 +++ 4 files changed, 104 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index bb62ab769..e18f7aea0 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -44,6 +44,7 @@ import baritone.utils.schematic.MapArtSchematic; import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.SchematicSystem; +import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.litematica.LitematicaHelper; import baritone.utils.schematic.schematica.SchematicaHelper; import com.google.common.collect.ImmutableMap; @@ -55,12 +56,15 @@ import net.minecraft.init.Blocks; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; import net.minecraft.util.Tuple; import net.minecraft.util.math.*; import java.io.File; import java.io.FileInputStream; +import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -180,18 +184,75 @@ public void buildOpenSchematic() { @Override public void buildOpenLitematic(int i) { if (LitematicaHelper.isLitematicaPresent()) { + //if java.lang.NoSuchMethodError is thrown see comment in SchematicPlacementManager if (LitematicaHelper.hasLoadedSchematic()) { String name = LitematicaHelper.getName(i); File schemFile = LitematicaHelper.getSchematicFile(i); Vec3i origin = LitematicaHelper.getOrigin(i); - boolean success = build(name, schemFile, origin); - if (success) { - logDirect(String.format("Building Schematic: %s\nOrigion: %s",name,origin)); - } else { - logDirect("Couldn't load the schematic. That is strange."); - //this should happen as invalid schematics should not be abel to be loaded in litematica in the first place + + + + try { + LitematicaSchematic herbert = new LitematicaSchematic(CompressedStreamTools.readCompressed(new FileInputStream(schemFile))); + LitematicaSchematic volker_rainer_fahrenhorst = new LitematicaSchematic(CompressedStreamTools.readCompressed(new FileInputStream(schemFile))); + + net.minecraft.util.Rotation rotation = LitematicaHelper.getRotation(i); + net.minecraft.util.Mirror mirror = LitematicaHelper.getMirror(i); + + + Vec3i gustav = herbert.getMinimumCorner(); + Vec3i martin = new Vec3i(origin.getX()+gustav.getX(),origin.getY()+gustav.getY(),origin.getZ()+gustav.getZ()); + int xena = herbert.getX(); + int yvonne = herbert.getY(); + int zuse = herbert.getZ(); + + for (int brian=0; brian Date: Sat, 1 Oct 2022 05:27:02 +0200 Subject: [PATCH 392/935] remove spaghetti --- .../java/baritone/process/BuilderProcess.java | 71 ++----------------- .../format/defaults/LitematicaSchematic.java | 7 +- .../litematica/LitematicaHelper.java | 60 +++++++++------- 3 files changed, 47 insertions(+), 91 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index e18f7aea0..da56bdf91 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -58,13 +58,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.util.EnumFacing; -import net.minecraft.util.Mirror; import net.minecraft.util.Tuple; import net.minecraft.util.math.*; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.nio.file.Files; import java.util.*; import java.util.stream.Collectors; @@ -187,72 +187,15 @@ public void buildOpenLitematic(int i) { //if java.lang.NoSuchMethodError is thrown see comment in SchematicPlacementManager if (LitematicaHelper.hasLoadedSchematic()) { String name = LitematicaHelper.getName(i); - File schemFile = LitematicaHelper.getSchematicFile(i); - Vec3i origin = LitematicaHelper.getOrigin(i); - - - - try { - LitematicaSchematic herbert = new LitematicaSchematic(CompressedStreamTools.readCompressed(new FileInputStream(schemFile))); - LitematicaSchematic volker_rainer_fahrenhorst = new LitematicaSchematic(CompressedStreamTools.readCompressed(new FileInputStream(schemFile))); - - net.minecraft.util.Rotation rotation = LitematicaHelper.getRotation(i); - net.minecraft.util.Mirror mirror = LitematicaHelper.getMirror(i); - - - Vec3i gustav = herbert.getMinimumCorner(); - Vec3i martin = new Vec3i(origin.getX()+gustav.getX(),origin.getY()+gustav.getY(),origin.getZ()+gustav.getZ()); - int xena = herbert.getX(); - int yvonne = herbert.getY(); - int zuse = herbert.getZ(); - - for (int brian=0; brian Date: Sat, 1 Oct 2022 17:14:05 +0200 Subject: [PATCH 393/935] debugging mirroring and rotating as well as refactoring --- .../java/baritone/process/BuilderProcess.java | 8 +-- .../format/DefaultSchematicFormats.java | 2 +- .../format/defaults/LitematicaSchematic.java | 50 +++++++++++-------- .../litematica/LitematicaHelper.java | 11 +++- 4 files changed, 43 insertions(+), 28 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index da56bdf91..3b9ba2dd5 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -188,11 +188,11 @@ public void buildOpenLitematic(int i) { if (LitematicaHelper.hasLoadedSchematic()) { String name = LitematicaHelper.getName(i); try { - LitematicaSchematic schematic = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath()))); - schematic = LitematicaHelper.blackMagicFuckery(schematic, i); - Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(LitematicaHelper.getOrigin(i), schematic.getMinimumCorner()); + LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())),false); + LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); + Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(LitematicaHelper.getOrigin(i), schematic2.getMinimumCorner()); - build(name, schematic, correctedOrigin); + build(name, schematic2, correctedOrigin); } catch (IOException e) { logDirect("Schematic File could not be loaded"); } diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index faabe57b3..2ca9e1485 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -78,7 +78,7 @@ public IStaticSchematic parse(InputStream input) throws IOException { int version = nbt.getInteger("Version"); switch (version) { case 4: //1.12 - return new LitematicaSchematic(nbt); + return new LitematicaSchematic(nbt, false); case 5: //1.13-1.17 case 6: //1.18+ throw new UnsupportedOperationException("This litematic Verion is to new."); diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 5f3c6e855..40ff37e73 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -43,25 +43,33 @@ public final class LitematicaSchematic extends StaticSchematic { private final int minZ; private final NBTTagCompound nbt; - public LitematicaSchematic(NBTTagCompound nbtTagCompound) { + public LitematicaSchematic(NBTTagCompound nbtTagCompound, boolean rotated) { this.nbt = nbtTagCompound; - int x = 0; - int y = 0; - int z = 0; - for (String subReg : getRegions(nbt)) { - x = Math.min(x, getMinimumCoord(nbt, subReg, "x")); - y = Math.min(y, getMinimumCoord(nbt, subReg, "y")); - z = Math.min(z, getMinimumCoord(nbt, subReg, "z")); - } - this.minX = x; - this.minY = y; - this.minZ = z; - - this.x = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("x")); + this.minX = getMinOfSchematic("x"); + this.minY = getMinOfSchematic("y"); + this.minZ = getMinOfSchematic("z"); this.y = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("y")); - this.z = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("z")); + + if (rotated) { + this.x = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("z")); + this.z = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("x")); + } else { + this.x = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("x")); + this.z = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("z")); + } this.states = new IBlockState[this.x][this.z][this.y]; + fillInSchematic(); + } + + private int getMinOfSchematic(String s) { + int n = 0; + for (String subReg : getRegions(nbt)) { + n = Math.min(n, getMinOfSubregion(nbt, subReg, s)); + } + return n; + } + private void fillInSchematic() { for (String subReg : getRegions(nbt)) { NBTTagList usedBlockTypes = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getTagList("BlockStatePalette", 10); IBlockState[] blockList = getBlockList(usedBlockTypes); @@ -89,7 +97,7 @@ private static String[] getRegions(NBTTagCompound nbt) { * @param s axis that should be read. * @return the lower coord of the requested axis. */ - private static int getMinimumCoord(NBTTagCompound nbt, String subReg, String s) { + private static int getMinOfSubregion(NBTTagCompound nbt, String subReg, String s) { int a = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Position").getInteger(s); int b = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger(s); if (b < 0) { @@ -196,9 +204,9 @@ private static boolean inSubregion(NBTTagCompound nbt, String subReg, int x, int //minX,minY,minZ are correction terms if the schematic origin isn't the minimum corner //posX,posY,posZ are the subregions offset relative to the minimum corner private void writeSubregionIntoSchematic(NBTTagCompound nbt, String subReg, IBlockState[] blockList, LitematicaBitArray bitArray) { - int posX = getMinimumCoord(nbt, subReg, "x"); - int posY = getMinimumCoord(nbt, subReg, "y"); - int posZ = getMinimumCoord(nbt, subReg, "z"); + int posX = getMinOfSubregion(nbt, subReg, "x"); + int posY = getMinOfSubregion(nbt, subReg, "y"); + int posZ = getMinOfSubregion(nbt, subReg, "z"); int index = 0; for (int y = 0; y < this.y; y++) { for (int z = 0; z < this.z; z++) { @@ -227,8 +235,8 @@ public int getZ() { public void setDirect(int x,int y,int z,IBlockState blockState) { this.states[x][z][y] = blockState; } - public LitematicaSchematic getCopy() { - return new LitematicaSchematic(nbt); + public LitematicaSchematic getCopy(boolean rotated) { + return new LitematicaSchematic(nbt, rotated); } /** diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index c19ae5a74..47d3fe242 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -74,14 +74,21 @@ public static Vec3i rotate(Vec3i in, int sizeX, int sizeZ) { return new Vec3i(sizeX - (sizeX - sizeZ) - in.getZ(), in.getY(), in.getX()); } public static LitematicaSchematic blackMagicFuckery(LitematicaSchematic schemIn, int i) { - LitematicaSchematic tempSchem = schemIn.getCopy(); + LitematicaSchematic tempSchem = schemIn.getCopy(LitematicaHelper.getRotation(i).ordinal()%2==1); for (int yCounter=0; yCounter Date: Sat, 1 Oct 2022 22:51:36 +0200 Subject: [PATCH 394/935] getCorrectedOrigin returns the correct origin --- .../java/baritone/process/BuilderProcess.java | 2 +- .../litematica/LitematicaHelper.java | 46 ++++++++++++++++++- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 3b9ba2dd5..65f97543f 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -190,7 +190,7 @@ public void buildOpenLitematic(int i) { try { LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())),false); LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); - Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(LitematicaHelper.getOrigin(i), schematic2.getMinimumCorner()); + Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic2, i); build(name, schematic2, correctedOrigin); } catch (IOException e) { diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index 47d3fe242..5e42ba999 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -57,8 +57,50 @@ public static Rotation getRotation(int i) { public static Mirror getMirror(int i) { return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getMirror(); } - public static Vec3i getCorrectedOrigin(Vec3i origin, Vec3i correction) { - return new Vec3i(origin.getX()+ correction.getX(), origin.getY() + correction.getY(), origin.getZ() + correction.getZ()); + public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { + int x = LitematicaHelper.getOrigin(i).getX() + schematic.getMinimumCorner().getX(); + int y = LitematicaHelper.getOrigin(i).getY() + schematic.getMinimumCorner().getY(); + int z = LitematicaHelper.getOrigin(i).getZ() + schematic.getMinimumCorner().getZ(); + Vec3i correctedOrigin; + Mirror mirror = LitematicaHelper.getMirror(i); + Rotation rotation = LitematicaHelper.getRotation(i); + + //todo there has to be a better way to do this but i cant finde it atm + switch (mirror) { + case FRONT_BACK: + case LEFT_RIGHT: + switch ((mirror.ordinal()*2+rotation.ordinal())%4) { + case 1: + correctedOrigin = new Vec3i(x - schematic.getX()+1, y, z - schematic.getZ()+1); + break; + case 2: + correctedOrigin = new Vec3i(x, y, z - schematic.getZ()+1); + break; + case 3: + correctedOrigin = new Vec3i(x, y, z); + break; + default: + correctedOrigin = new Vec3i(x - schematic.getX()+1, y, z); + break; + } + break; + default: + switch (rotation) { + case CLOCKWISE_90: + correctedOrigin = new Vec3i(x - schematic.getX()+1, y, z); + break; + case CLOCKWISE_180: + correctedOrigin = new Vec3i(x - schematic.getX()+1, y, z - schematic.getZ()+1); + break; + case COUNTERCLOCKWISE_90: + correctedOrigin = new Vec3i(x, y, z - schematic.getZ()+1); + break; + default: + correctedOrigin = new Vec3i(x, y, z); + break; + } + } + return correctedOrigin; } public static Vec3i doMirroring(Vec3i in, int sizeX, int sizeZ, Mirror mirror) { int xOut = in.getX(); From 3e75cc7408fc299149c32e71c2114c307a4b9bc4 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Sat, 1 Oct 2022 22:59:47 +0200 Subject: [PATCH 395/935] block mirroring and rotation --- .../baritone/utils/schematic/litematica/LitematicaHelper.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index 5e42ba999..14b984c49 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -20,6 +20,7 @@ import baritone.utils.schematic.format.defaults.LitematicaSchematic; import fi.dy.masa.litematica.Litematica; import fi.dy.masa.litematica.data.DataManager; +import net.minecraft.block.state.IBlockState; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; import net.minecraft.util.math.Vec3i; @@ -132,7 +133,8 @@ public static LitematicaSchematic blackMagicFuckery(LitematicaSchematic schemIn, } //System.out.println(String.format("Turned: %s, sizeX=%S, sizeZ=%s",xyzHolder,schemIn.getX(),schemIn.getZ())); } - tempSchem.setDirect(xyzHolder.getX(), xyzHolder.getY(), xyzHolder.getZ(), schemIn.getDirect(xCounter, yCounter, zCounter)); + IBlockState state = schemIn.getDirect(xCounter, yCounter, zCounter).withMirror(LitematicaHelper.getMirror(i)).withRotation(LitematicaHelper.getRotation(i)); + tempSchem.setDirect(xyzHolder.getX(), xyzHolder.getY(), xyzHolder.getZ(), state); } } } From fdfeeb2ffafc7b5b9be867e2a5e7f3f1d7e1a18e Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 3 Oct 2022 02:35:25 +0200 Subject: [PATCH 396/935] need stronger pesticides, bugs keep multiplying --- .../java/baritone/process/BuilderProcess.java | 13 ++++-- .../format/defaults/LitematicaSchematic.java | 2 +- .../litematica/LitematicaHelper.java | 40 ++++++++++++------- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 65f97543f..74d9f95c0 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -189,10 +189,15 @@ public void buildOpenLitematic(int i) { String name = LitematicaHelper.getName(i); try { LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())),false); - LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); - Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic2, i); - - build(name, schematic2, correctedOrigin); + try { + LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); + Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic2, i); + //Vec3i correctedOrigin = new Vec3i(0,4,0); + + build(name, schematic2, correctedOrigin); + } catch (IndexOutOfBoundsException e) { + logDirect("BlackMagicFuckery summoned a Balrog. This foe is beyond any of you. "); + } } catch (IOException e) { logDirect("Schematic File could not be loaded"); } diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 40ff37e73..fb2f36ebf 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -62,7 +62,7 @@ public LitematicaSchematic(NBTTagCompound nbtTagCompound, boolean rotated) { } private int getMinOfSchematic(String s) { - int n = 0; + int n = Integer.MAX_VALUE; for (String subReg : getRegions(nbt)) { n = Math.min(n, getMinOfSubregion(nbt, subReg, s)); } diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index 14b984c49..ea9b711b3 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -59,9 +59,14 @@ public static Mirror getMirror(int i) { return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getMirror(); } public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { - int x = LitematicaHelper.getOrigin(i).getX() + schematic.getMinimumCorner().getX(); - int y = LitematicaHelper.getOrigin(i).getY() + schematic.getMinimumCorner().getY(); - int z = LitematicaHelper.getOrigin(i).getZ() + schematic.getMinimumCorner().getZ(); + int x = LitematicaHelper.getOrigin(i).getX(); + int y = LitematicaHelper.getOrigin(i).getY(); + int z = LitematicaHelper.getOrigin(i).getZ(); + int mx = schematic.getMinimumCorner().getX(); + int my = schematic.getMinimumCorner().getY(); + int mz = schematic.getMinimumCorner().getZ(); + int sx = (schematic.getX() - 1) * -1; + int sz = (schematic.getZ() - 1) * -1; Vec3i correctedOrigin; Mirror mirror = LitematicaHelper.getMirror(i); Rotation rotation = LitematicaHelper.getRotation(i); @@ -72,32 +77,32 @@ public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { case LEFT_RIGHT: switch ((mirror.ordinal()*2+rotation.ordinal())%4) { case 1: - correctedOrigin = new Vec3i(x - schematic.getX()+1, y, z - schematic.getZ()+1); + correctedOrigin = new Vec3i(x + (sz - mz), y + my, z + (sx - mx)); break; case 2: - correctedOrigin = new Vec3i(x, y, z - schematic.getZ()+1); + correctedOrigin = new Vec3i(x + mx, y + my, z + (sz - mz)); break; case 3: - correctedOrigin = new Vec3i(x, y, z); + correctedOrigin = new Vec3i(x + mz, y + my, z + mx); break; default: - correctedOrigin = new Vec3i(x - schematic.getX()+1, y, z); + correctedOrigin = new Vec3i(x + (sx - mx), y + my, z + mz); break; } break; default: switch (rotation) { case CLOCKWISE_90: - correctedOrigin = new Vec3i(x - schematic.getX()+1, y, z); + correctedOrigin = new Vec3i(x + (sz - mz), y + my, z + mz); break; case CLOCKWISE_180: - correctedOrigin = new Vec3i(x - schematic.getX()+1, y, z - schematic.getZ()+1); + correctedOrigin = new Vec3i(x + (sx - mx), y + my, z + (sz - mz)); break; case COUNTERCLOCKWISE_90: - correctedOrigin = new Vec3i(x, y, z - schematic.getZ()+1); + correctedOrigin = new Vec3i(x + mz, y + my, z + (sx - mx)); break; default: - correctedOrigin = new Vec3i(x, y, z); + correctedOrigin = new Vec3i(x + mx, y + my, z + mz); break; } } @@ -122,18 +127,23 @@ public static LitematicaSchematic blackMagicFuckery(LitematicaSchematic schemIn, for (int zCounter=0; zCounter Date: Mon, 3 Oct 2022 17:44:15 +0200 Subject: [PATCH 397/935] a fucking x and z mixup --- src/main/java/baritone/process/BuilderProcess.java | 4 +--- .../baritone/utils/schematic/litematica/LitematicaHelper.java | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 74d9f95c0..110df3dee 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -189,11 +189,9 @@ public void buildOpenLitematic(int i) { String name = LitematicaHelper.getName(i); try { LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())),false); + Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i); try { LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); - Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic2, i); - //Vec3i correctedOrigin = new Vec3i(0,4,0); - build(name, schematic2, correctedOrigin); } catch (IndexOutOfBoundsException e) { logDirect("BlackMagicFuckery summoned a Balrog. This foe is beyond any of you. "); diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index ea9b711b3..f63c8eb3c 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -67,6 +67,7 @@ public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { int mz = schematic.getMinimumCorner().getZ(); int sx = (schematic.getX() - 1) * -1; int sz = (schematic.getZ() - 1) * -1; + Vec3i correctedOrigin; Mirror mirror = LitematicaHelper.getMirror(i); Rotation rotation = LitematicaHelper.getRotation(i); @@ -93,7 +94,7 @@ public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { default: switch (rotation) { case CLOCKWISE_90: - correctedOrigin = new Vec3i(x + (sz - mz), y + my, z + mz); + correctedOrigin = new Vec3i(x + (sz - mz), y + my, z + mx); break; case CLOCKWISE_180: correctedOrigin = new Vec3i(x + (sx - mx), y + my, z + (sz - mz)); From fc65f22febd6cd75fa7b9cd236685ffcfeb7772a Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 3 Oct 2022 19:59:07 +0200 Subject: [PATCH 398/935] clean up and adding javadoc --- .../java/baritone/process/BuilderProcess.java | 14 ++-- .../format/defaults/LitematicaSchematic.java | 67 +++++++++++----- .../litematica/LitematicaHelper.java | 79 +++++++++++++++++-- .../placement/SchematicPlacementManager.java | 2 +- 4 files changed, 129 insertions(+), 33 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 110df3dee..124547ee1 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -181,6 +181,10 @@ public void buildOpenSchematic() { } } + /** + * Builds the with index 'i' given schematic placement. + * @param i index reference to the schematic placement list. + */ @Override public void buildOpenLitematic(int i) { if (LitematicaHelper.isLitematicaPresent()) { @@ -190,14 +194,10 @@ public void buildOpenLitematic(int i) { try { LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())),false); Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i); - try { - LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); - build(name, schematic2, correctedOrigin); - } catch (IndexOutOfBoundsException e) { - logDirect("BlackMagicFuckery summoned a Balrog. This foe is beyond any of you. "); - } + LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); + build(name, schematic2, correctedOrigin); } catch (IOException e) { - logDirect("Schematic File could not be loaded"); + logDirect("Schematic File could not be loaded."); } } else { logDirect("No schematic currently loaded"); diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index fb2f36ebf..f55f9212d 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -38,16 +38,16 @@ * @since 22.09.2022 */ public final class LitematicaSchematic extends StaticSchematic { - private final int minX; - private final int minY; - private final int minZ; + private final Vec3i offsetMinCorner; private final NBTTagCompound nbt; + /** + * @param nbtTagCompound a decompressed file stream aka nbt data. + * @param rotated if the schematic is rotated by 90° aka x and z size are switched. + */ public LitematicaSchematic(NBTTagCompound nbtTagCompound, boolean rotated) { this.nbt = nbtTagCompound; - this.minX = getMinOfSchematic("x"); - this.minY = getMinOfSchematic("y"); - this.minZ = getMinOfSchematic("z"); + this.offsetMinCorner = new Vec3i(getMinOfSchematic("x"),getMinOfSchematic("y"),getMinOfSchematic("z")); this.y = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("y")); if (rotated) { @@ -61,6 +61,10 @@ public LitematicaSchematic(NBTTagCompound nbtTagCompound, boolean rotated) { fillInSchematic(); } + /** + * @param s axis. + * @return the lowest coordinate of that axis of the schematic. + */ private int getMinOfSchematic(String s) { int n = Integer.MAX_VALUE; for (String subReg : getRegions(nbt)) { @@ -69,6 +73,9 @@ private int getMinOfSchematic(String s) { return n; } + /** + * reads the file data. + */ private void fillInSchematic() { for (String subReg : getRegions(nbt)) { NBTTagList usedBlockTypes = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getTagList("BlockStatePalette", 10); @@ -92,7 +99,7 @@ private static String[] getRegions(NBTTagCompound nbt) { } /** - * Gets both ends from schematic box for a given axis and returns the lower one. + * Gets both ends from a region box for a given axis and returns the lower one. * * @param s axis that should be read. * @return the lower coord of the requested axis. @@ -197,22 +204,19 @@ private static boolean inSubregion(NBTTagCompound nbt, String subReg, int x, int } /** - * @param blockList list with the different block types used in the schematic - * @param bitArray bit array that holds the placement pattern + * Writes the file data in to the IBlockstate array. + * + * @param blockList list with the different block types used in the schematic. + * @param bitArray bit array that holds the placement pattern. */ - //x,y,z are the releative positons to the minimum corner of the enclosing box - //minX,minY,minZ are correction terms if the schematic origin isn't the minimum corner - //posX,posY,posZ are the subregions offset relative to the minimum corner private void writeSubregionIntoSchematic(NBTTagCompound nbt, String subReg, IBlockState[] blockList, LitematicaBitArray bitArray) { - int posX = getMinOfSubregion(nbt, subReg, "x"); - int posY = getMinOfSubregion(nbt, subReg, "y"); - int posZ = getMinOfSubregion(nbt, subReg, "z"); + Vec3i offsetSubregion = new Vec3i(getMinOfSubregion(nbt, subReg, "x"), getMinOfSubregion(nbt, subReg, "y"), getMinOfSubregion(nbt, subReg, "z")); int index = 0; for (int y = 0; y < this.y; y++) { for (int z = 0; z < this.z; z++) { for (int x = 0; x < this.x; x++) { if (inSubregion(nbt, subReg, x, y, z)) { - this.states[x - (minX - posX)][z - (minZ - posZ)][y - (minY - posY)] = blockList[bitArray.getAt(index)]; + this.states[x - (offsetMinCorner.getX() - offsetSubregion.getX())][z - (offsetMinCorner.getZ() - offsetSubregion.getZ())][y - (offsetMinCorner.getY() - offsetSubregion.getY())] = blockList[bitArray.getAt(index)]; index++; } } @@ -220,21 +224,48 @@ private void writeSubregionIntoSchematic(NBTTagCompound nbt, String subReg, IBlo } } - public Vec3i getMinimumCorner() { - return new Vec3i(this.minX, this.minY, this.minZ); + /** + * @return offset from the schematic origin to the minimum Corner as a Vec3i. + */ + public Vec3i getOffsetMinCorner() { + return offsetMinCorner; } + + /** + * @return x size of the schematic. + */ public int getX() { return this.x; } + + /** + * @return y size of the schematic. + */ public int getY() { return this.y; } + + /** + * @return z size of the schematic. + */ public int getZ() { return this.z; } + + /** + * @param x position relative to the minimum corner of the schematic. + * @param y position relative to the minimum corner of the schematic. + * @param z position relative to the minimum corner of the schematic. + * @param blockState new blockstate of the block at this position. + */ public void setDirect(int x,int y,int z,IBlockState blockState) { this.states[x][z][y] = blockState; } + + /** + * @param rotated if the schematic is rotated by 90°. + * @return a copy of the schematic. + */ public LitematicaSchematic getCopy(boolean rotated) { return new LitematicaSchematic(nbt, rotated); } diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index f63c8eb3c..be437624d 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -27,7 +27,17 @@ import java.io.File; +/** + * Helper class that provides access or processes data related to Litmatica schematics. + * + * @author rycbar + * @since 28.09.2022 + */ public final class LitematicaHelper { + + /** + * @return if Litmatica is installed. + */ public static boolean isLitematicaPresent() { try { Class.forName(Litematica.class.getName()); @@ -36,12 +46,26 @@ public static boolean isLitematicaPresent() { return false; } } + + /** + * @return if there are loaded schematics. + */ public static boolean hasLoadedSchematic() { return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().size()>0; } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the name of the requested schematic. + */ public static String getName(int i) { return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getName(); } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the world coordinates of the schematic origin. This can but does not have to be the minimum corner. + */ public static Vec3i getOrigin(int i) { int x,y,z; x=DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin().getX(); @@ -49,22 +73,43 @@ public static Vec3i getOrigin(int i) { z=DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin().getZ(); return new Vec3i(x,y,z); } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return Filepath of the schematic file. + */ public static File getSchematicFile(int i) { return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getSchematicFile(); } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return rotation of the schematic placement. + */ public static Rotation getRotation(int i) { return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getRotation(); } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the mirroring of the schematic placement. + */ public static Mirror getMirror(int i) { return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getMirror(); } + + /** + * @param schematic original schematic. + * @param i index of the Schematic in the schematic placement list. + * @return the minimum corner coordinates of the schematic, after the original schematic got rotated and mirrored. + */ public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { int x = LitematicaHelper.getOrigin(i).getX(); int y = LitematicaHelper.getOrigin(i).getY(); int z = LitematicaHelper.getOrigin(i).getZ(); - int mx = schematic.getMinimumCorner().getX(); - int my = schematic.getMinimumCorner().getY(); - int mz = schematic.getMinimumCorner().getZ(); + int mx = schematic.getOffsetMinCorner().getX(); + int my = schematic.getOffsetMinCorner().getY(); + int mz = schematic.getOffsetMinCorner().getZ(); int sx = (schematic.getX() - 1) * -1; int sz = (schematic.getZ() - 1) * -1; @@ -109,6 +154,14 @@ public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { } return correctedOrigin; } + + /** + * @param in the xyz offsets of the block relative to the schematic minimum corner. + * @param sizeX size of the schematic in the x-axis direction. + * @param sizeZ size of the schematic in the z-axis direction. + * @param mirror the mirroring of the schematic placement. + * @return the corresponding xyz coordinates after mirroring them according to the given mirroring. + */ public static Vec3i doMirroring(Vec3i in, int sizeX, int sizeZ, Mirror mirror) { int xOut = in.getX(); int zOut = in.getZ(); @@ -119,31 +172,43 @@ public static Vec3i doMirroring(Vec3i in, int sizeX, int sizeZ, Mirror mirror) { } return new Vec3i(xOut, in.getY(), zOut); } + + /** + * @param in the xyz offsets of the block relative to the schematic minimum corner. + * @param sizeX size of the schematic in the x-axis direction. + * @param sizeZ size of the schematic in the z-axis direction. + * @return the corresponding xyz coordinates after rotation them 90° clockwise. + */ public static Vec3i rotate(Vec3i in, int sizeX, int sizeZ) { return new Vec3i(sizeX - (sizeX - sizeZ) - in.getZ(), in.getY(), in.getX()); } + + /** + * IDFK this just grew and it somehow works. If you understand how, pls tell me. + * + * @param schemIn give in the original schematic. + * @param i index of the Schematic in the schematic placement list. + * @return get it out rotated and mirrored. + */ public static LitematicaSchematic blackMagicFuckery(LitematicaSchematic schemIn, int i) { LitematicaSchematic tempSchem = schemIn.getCopy(LitematicaHelper.getRotation(i).ordinal()%2==1); for (int yCounter=0; yCounter schematicPlacements = new ArrayList<>(); //in case of a java.lang.NoSuchMethodError try change the name of this method to getAllSchematicPlacements() - // there are inconsistencies in the litematica mod about the naming of this method + //there are inconsistencies in the litematica mod about the naming of this method public List getAllSchematicsPlacements() { return schematicPlacements; } From 3a5608566e3c46f61b888065675fa586791db807 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 3 Oct 2022 20:13:11 +0200 Subject: [PATCH 399/935] auto formatting --- .../java/baritone/process/BuilderProcess.java | 7 +- .../format/defaults/LitematicaSchematic.java | 72 +++++++++---------- .../litematica/LitematicaHelper.java | 36 +++++----- .../dy/masa/litematica/data/DataManager.java | 2 + .../placement/SchematicPlacement.java | 2 + .../placement/SchematicPlacementUnloaded.java | 6 +- 6 files changed, 65 insertions(+), 60 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 124547ee1..c1c0cb1d9 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -26,9 +26,9 @@ import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; import baritone.api.schematic.FillSchematic; -import baritone.api.schematic.SubstituteSchematic; import baritone.api.schematic.ISchematic; import baritone.api.schematic.IStaticSchematic; +import baritone.api.schematic.SubstituteSchematic; import baritone.api.schematic.format.ISchematicFormat; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.RayTraceUtils; @@ -42,8 +42,8 @@ import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; import baritone.utils.schematic.MapArtSchematic; -import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.SchematicSystem; +import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.litematica.LitematicaHelper; import baritone.utils.schematic.schematica.SchematicaHelper; @@ -183,6 +183,7 @@ public void buildOpenSchematic() { /** * Builds the with index 'i' given schematic placement. + * * @param i index reference to the schematic placement list. */ @Override @@ -192,7 +193,7 @@ public void buildOpenLitematic(int i) { if (LitematicaHelper.hasLoadedSchematic()) { String name = LitematicaHelper.getName(i); try { - LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())),false); + LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())), false); Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i); LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); build(name, schematic2, correctedOrigin); diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index f55f9212d..dc1c1d5bd 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -43,11 +43,11 @@ public final class LitematicaSchematic extends StaticSchematic { /** * @param nbtTagCompound a decompressed file stream aka nbt data. - * @param rotated if the schematic is rotated by 90° aka x and z size are switched. + * @param rotated if the schematic is rotated by 90° aka x and z size are switched. */ public LitematicaSchematic(NBTTagCompound nbtTagCompound, boolean rotated) { this.nbt = nbtTagCompound; - this.offsetMinCorner = new Vec3i(getMinOfSchematic("x"),getMinOfSchematic("y"),getMinOfSchematic("z")); + this.offsetMinCorner = new Vec3i(getMinOfSchematic("x"), getMinOfSchematic("y"), getMinOfSchematic("z")); this.y = Math.abs(nbt.getCompoundTag("Metadata").getCompoundTag("EnclosingSize").getInteger("y")); if (rotated) { @@ -61,36 +61,6 @@ public LitematicaSchematic(NBTTagCompound nbtTagCompound, boolean rotated) { fillInSchematic(); } - /** - * @param s axis. - * @return the lowest coordinate of that axis of the schematic. - */ - private int getMinOfSchematic(String s) { - int n = Integer.MAX_VALUE; - for (String subReg : getRegions(nbt)) { - n = Math.min(n, getMinOfSubregion(nbt, subReg, s)); - } - return n; - } - - /** - * reads the file data. - */ - private void fillInSchematic() { - for (String subReg : getRegions(nbt)) { - NBTTagList usedBlockTypes = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getTagList("BlockStatePalette", 10); - IBlockState[] blockList = getBlockList(usedBlockTypes); - - int bitsPerBlock = getBitsPerBlock(usedBlockTypes.tagCount()); - long regionVolume = getVolume(nbt, subReg); - long[] blockStateArray = getBlockStates(nbt, subReg); - - LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, regionVolume, blockStateArray); - - writeSubregionIntoSchematic(nbt, subReg, blockList, bitArray); - } - } - /** * @return Array of subregion names. */ @@ -203,6 +173,36 @@ private static boolean inSubregion(NBTTagCompound nbt, String subReg, int x, int z < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("z")); } + /** + * @param s axis. + * @return the lowest coordinate of that axis of the schematic. + */ + private int getMinOfSchematic(String s) { + int n = Integer.MAX_VALUE; + for (String subReg : getRegions(nbt)) { + n = Math.min(n, getMinOfSubregion(nbt, subReg, s)); + } + return n; + } + + /** + * reads the file data. + */ + private void fillInSchematic() { + for (String subReg : getRegions(nbt)) { + NBTTagList usedBlockTypes = nbt.getCompoundTag("Regions").getCompoundTag(subReg).getTagList("BlockStatePalette", 10); + IBlockState[] blockList = getBlockList(usedBlockTypes); + + int bitsPerBlock = getBitsPerBlock(usedBlockTypes.tagCount()); + long regionVolume = getVolume(nbt, subReg); + long[] blockStateArray = getBlockStates(nbt, subReg); + + LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, regionVolume, blockStateArray); + + writeSubregionIntoSchematic(nbt, subReg, blockList, bitArray); + } + } + /** * Writes the file data in to the IBlockstate array. * @@ -253,12 +253,12 @@ public int getZ() { } /** - * @param x position relative to the minimum corner of the schematic. - * @param y position relative to the minimum corner of the schematic. - * @param z position relative to the minimum corner of the schematic. + * @param x position relative to the minimum corner of the schematic. + * @param y position relative to the minimum corner of the schematic. + * @param z position relative to the minimum corner of the schematic. * @param blockState new blockstate of the block at this position. */ - public void setDirect(int x,int y,int z,IBlockState blockState) { + public void setDirect(int x, int y, int z, IBlockState blockState) { this.states[x][z][y] = blockState; } diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index be437624d..b6ba681fa 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -51,7 +51,7 @@ public static boolean isLitematicaPresent() { * @return if there are loaded schematics. */ public static boolean hasLoadedSchematic() { - return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().size()>0; + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().size() > 0; } /** @@ -67,11 +67,7 @@ public static String getName(int i) { * @return the world coordinates of the schematic origin. This can but does not have to be the minimum corner. */ public static Vec3i getOrigin(int i) { - int x,y,z; - x=DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin().getX(); - y=DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin().getY(); - z=DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin().getZ(); - return new Vec3i(x,y,z); + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin(); } /** @@ -100,7 +96,7 @@ public static Mirror getMirror(int i) { /** * @param schematic original schematic. - * @param i index of the Schematic in the schematic placement list. + * @param i index of the Schematic in the schematic placement list. * @return the minimum corner coordinates of the schematic, after the original schematic got rotated and mirrored. */ public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { @@ -121,7 +117,7 @@ public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { switch (mirror) { case FRONT_BACK: case LEFT_RIGHT: - switch ((mirror.ordinal()*2+rotation.ordinal())%4) { + switch ((mirror.ordinal() * 2 + rotation.ordinal()) % 4) { case 1: correctedOrigin = new Vec3i(x + (sz - mz), y + my, z + (sx - mx)); break; @@ -156,16 +152,16 @@ public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { } /** - * @param in the xyz offsets of the block relative to the schematic minimum corner. - * @param sizeX size of the schematic in the x-axis direction. - * @param sizeZ size of the schematic in the z-axis direction. + * @param in the xyz offsets of the block relative to the schematic minimum corner. + * @param sizeX size of the schematic in the x-axis direction. + * @param sizeZ size of the schematic in the z-axis direction. * @param mirror the mirroring of the schematic placement. * @return the corresponding xyz coordinates after mirroring them according to the given mirroring. */ public static Vec3i doMirroring(Vec3i in, int sizeX, int sizeZ, Mirror mirror) { int xOut = in.getX(); int zOut = in.getZ(); - if(mirror == Mirror.LEFT_RIGHT) { + if (mirror == Mirror.LEFT_RIGHT) { zOut = sizeZ - in.getZ(); } else if (mirror == Mirror.FRONT_BACK) { xOut = sizeX - in.getX(); @@ -174,31 +170,31 @@ public static Vec3i doMirroring(Vec3i in, int sizeX, int sizeZ, Mirror mirror) { } /** - * @param in the xyz offsets of the block relative to the schematic minimum corner. + * @param in the xyz offsets of the block relative to the schematic minimum corner. * @param sizeX size of the schematic in the x-axis direction. * @param sizeZ size of the schematic in the z-axis direction. * @return the corresponding xyz coordinates after rotation them 90° clockwise. */ public static Vec3i rotate(Vec3i in, int sizeX, int sizeZ) { - return new Vec3i(sizeX - (sizeX - sizeZ) - in.getZ(), in.getY(), in.getX()); + return new Vec3i(sizeX - (sizeX - sizeZ) - in.getZ(), in.getY(), in.getX()); } /** * IDFK this just grew and it somehow works. If you understand how, pls tell me. * * @param schemIn give in the original schematic. - * @param i index of the Schematic in the schematic placement list. + * @param i index of the Schematic in the schematic placement list. * @return get it out rotated and mirrored. */ public static LitematicaSchematic blackMagicFuckery(LitematicaSchematic schemIn, int i) { - LitematicaSchematic tempSchem = schemIn.getCopy(LitematicaHelper.getRotation(i).ordinal()%2==1); - for (int yCounter=0; yCounter Date: Mon, 3 Oct 2022 20:32:56 +0200 Subject: [PATCH 400/935] made a oopsie --- .../baritone/utils/schematic/litematica/LitematicaHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index b6ba681fa..ec9fcc735 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -202,7 +202,7 @@ public static LitematicaSchematic blackMagicFuckery(LitematicaSchematic schemIn, } IBlockState state = schemIn.getDirect(xCounter, yCounter, zCounter); try { - state.withMirror(LitematicaHelper.getMirror(i)).withRotation(LitematicaHelper.getRotation(i)); + state = state.withMirror(LitematicaHelper.getMirror(i)).withRotation(LitematicaHelper.getRotation(i)); } catch (NullPointerException e) { //nothing to worry about it's just a hole in the schematic. } From f9c5386e7ada3c732aeec9f436a07828ae9de68f Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Mon, 3 Oct 2022 21:39:53 +0200 Subject: [PATCH 401/935] final changes --- .../command/defaults/LitematicaCommand.java | 4 ++-- .../schematic/format/DefaultSchematicFormats.java | 2 +- .../format/defaults/LitematicaSchematic.java | 14 ++++++++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/baritone/command/defaults/LitematicaCommand.java b/src/main/java/baritone/command/defaults/LitematicaCommand.java index eecab07de..bfe0079b3 100644 --- a/src/main/java/baritone/command/defaults/LitematicaCommand.java +++ b/src/main/java/baritone/command/defaults/LitematicaCommand.java @@ -35,10 +35,10 @@ public LitematicaCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { int schematic = 0; - if(args.hasAny()) { + if (args.hasAny()) { args.requireMax(1); if (args.is(Integer.class)) { - schematic = args.getAs(Integer.class)-1; + schematic = args.getAs(Integer.class) - 1; } } try { diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 2ca9e1485..cd38433ad 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -81,7 +81,7 @@ public IStaticSchematic parse(InputStream input) throws IOException { return new LitematicaSchematic(nbt, false); case 5: //1.13-1.17 case 6: //1.18+ - throw new UnsupportedOperationException("This litematic Verion is to new."); + throw new UnsupportedOperationException("This litematic Verion is too new."); default: throw new UnsupportedOperationException("Unsuported Version of a Litematica Schematic"); } diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index dc1c1d5bd..84b9b86e2 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -32,8 +32,9 @@ import java.util.Optional; /** - * @author Emerson - * @since 12/27/2020 + * Based on EmersonDove's work + * ... + * * @author rycbar * @since 22.09.2022 */ @@ -43,7 +44,7 @@ public final class LitematicaSchematic extends StaticSchematic { /** * @param nbtTagCompound a decompressed file stream aka nbt data. - * @param rotated if the schematic is rotated by 90° aka x and z size are switched. + * @param rotated if the schematic is rotated by 90°. */ public LitematicaSchematic(NBTTagCompound nbtTagCompound, boolean rotated) { this.nbt = nbtTagCompound; @@ -167,10 +168,10 @@ private static long[] getBlockStates(NBTTagCompound nbt, String subReg) { * @return if the current block is part of the subregion. */ private static boolean inSubregion(NBTTagCompound nbt, String subReg, int x, int y, int z) { - return + return x >= 0 && y >= 0 && z >= 0 && x < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("x")) && - y < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("y")) && - z < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("z")); + y < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("y")) && + z < Math.abs(nbt.getCompoundTag("Regions").getCompoundTag(subReg).getCompoundTag("Size").getInteger("z")); } /** @@ -273,6 +274,7 @@ public LitematicaSchematic getCopy(boolean rotated) { /** * @author maruohon * Class from the Litematica mod by maruohon + * Usage under LGPLv3 with the permission of the author. * ... */ private static class LitematicaBitArray { From 8f514bd7821bd992ef40144568b23d72b4fcfa00 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Mon, 3 Oct 2022 21:22:07 +0100 Subject: [PATCH 402/935] Cleaner fix for water jump issue --- src/main/java/baritone/pathing/movement/Movement.java | 2 +- .../baritone/pathing/movement/movements/MovementTraverse.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 03ac7022f..d319cea62 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -123,7 +123,7 @@ protected boolean playerInValidPosition() { public MovementStatus update() { ctx.player().getAbilities().flying = false; currentState = updateState(currentState); - if (MovementHelper.isLiquid(ctx, ctx.playerFeet())) { + if (MovementHelper.isLiquid(ctx, ctx.playerFeet()) && ctx.player().position().y < dest.y + 0.6) { currentState.setInput(Input.JUMP, true); } if (ctx.player().isInWall()) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index adcc48032..02426c46a 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -70,7 +70,7 @@ public double calculateCost(CalculationContext context) { @Override protected Set calculateValidPositions() { - return ImmutableSet.of(src, src.above(), dest); // src.above means that we don't get caught in an infinite loop in water + return ImmutableSet.of(src, dest); // src.above means that we don't get caught in an infinite loop in water } public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { @@ -237,6 +237,7 @@ public MovementState updateState(MovementState state) { if (feet.getY() != dest.getY() && !ladder) { logDebug("Wrong Y coordinate"); if (feet.getY() < dest.getY()) { + System.out.println("In movement traverse"); return state.setInput(Input.JUMP, true); } return state; From d91abd5e45fc2352c4c2b96e2fcd0fcf1f2c4240 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Tue, 4 Oct 2022 02:09:07 +0200 Subject: [PATCH 403/935] Litematica support for 1.16.5 --- scripts/proguard.pro | 2 + .../baritone/api/process/IBuilderProcess.java | 2 + .../launch/mixins/MixinLongArrayNBT.java | 35 ++ src/launch/resources/mixins.baritone.json | 1 + .../command/defaults/DefaultCommands.java | 1 + .../command/defaults/LitematicaCommand.java | 71 ++++ .../java/baritone/process/BuilderProcess.java | 26 ++ .../utils/accessor/ILongArrayNBT.java | 27 ++ .../format/DefaultSchematicFormats.java | 21 ++ .../format/defaults/LitematicaSchematic.java | 348 ++++++++++++++++++ .../litematica/LitematicaHelper.java | 215 +++++++++++ .../fi/dy/masa/litematica/Litematica.java | 21 ++ .../dy/masa/litematica/data/DataManager.java | 33 ++ .../placement/SchematicPlacement.java | 35 ++ .../placement/SchematicPlacementManager.java | 31 ++ .../placement/SchematicPlacementUnloaded.java | 43 +++ 16 files changed, 912 insertions(+) create mode 100644 src/launch/java/baritone/launch/mixins/MixinLongArrayNBT.java create mode 100644 src/main/java/baritone/command/defaults/LitematicaCommand.java create mode 100644 src/main/java/baritone/utils/accessor/ILongArrayNBT.java create mode 100644 src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java create mode 100644 src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java create mode 100644 src/schematica_api/java/fi/dy/masa/litematica/Litematica.java create mode 100644 src/schematica_api/java/fi/dy/masa/litematica/data/DataManager.java create mode 100644 src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java create mode 100644 src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java create mode 100644 src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 8c0627112..d9b0c497c 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -47,8 +47,10 @@ #try to keep usage of schematica in separate classes -keep class baritone.utils.schematic.schematica.** +-keep class baritone.utils.schematic.litematica.** #proguard doesnt like it when it cant find our fake schematica classes -dontwarn baritone.utils.schematic.schematica.** +-dontwarn baritone.utils.schematic.litematica.** # Keep - Applications. Keep all application classes, along with their 'main' # methods. diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 67255d7e8..17a559798 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -58,6 +58,8 @@ default boolean build(String schematicFile, BlockPos origin) { void buildOpenSchematic(); + void buildOpenLitematic(int i); + void pause(); boolean isPaused(); diff --git a/src/launch/java/baritone/launch/mixins/MixinLongArrayNBT.java b/src/launch/java/baritone/launch/mixins/MixinLongArrayNBT.java new file mode 100644 index 000000000..738bdecc6 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinLongArrayNBT.java @@ -0,0 +1,35 @@ +/* + * 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.utils.accessor.ILongArrayNBT; +import net.minecraft.nbt.LongArrayNBT; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +/** + * @author rycbar + * @since 26.09.2022 + */ +@Mixin(LongArrayNBT.class) +public abstract class MixinLongArrayNBT implements ILongArrayNBT { + + @Accessor("data") + @Override + public abstract long[] getLongArray(); +} \ No newline at end of file diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 6ef809b0b..dc109abe3 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -19,6 +19,7 @@ "MixinLivingEntity", "MixinLootContext", "MixinMinecraft", + "MixinLongArrayNBT", "MixinNetworkManager", "MixinPlayerController", "MixinScreen", diff --git a/src/main/java/baritone/command/defaults/DefaultCommands.java b/src/main/java/baritone/command/defaults/DefaultCommands.java index 5af4d158e..c2118ebe8 100644 --- a/src/main/java/baritone/command/defaults/DefaultCommands.java +++ b/src/main/java/baritone/command/defaults/DefaultCommands.java @@ -43,6 +43,7 @@ public static List createAll(IBaritone baritone) { new RepackCommand(baritone), new BuildCommand(baritone), //new SchematicaCommand(baritone), + new LitematicaCommand(baritone), new ComeCommand(baritone), new AxisCommand(baritone), new ForceCancelCommand(baritone), diff --git a/src/main/java/baritone/command/defaults/LitematicaCommand.java b/src/main/java/baritone/command/defaults/LitematicaCommand.java new file mode 100644 index 000000000..bfe0079b3 --- /dev/null +++ b/src/main/java/baritone/command/defaults/LitematicaCommand.java @@ -0,0 +1,71 @@ +/* + * 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.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class LitematicaCommand extends Command { + + public LitematicaCommand(IBaritone baritone) { + super(baritone, "litematica"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + int schematic = 0; + if (args.hasAny()) { + args.requireMax(1); + if (args.is(Integer.class)) { + schematic = args.getAs(Integer.class) - 1; + } + } + try { + baritone.getBuilderProcess().buildOpenLitematic(schematic); + } catch (IndexOutOfBoundsException e) { + logDirect("Pleas provide a valid index."); + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Builds the loaded schematic"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Build a schematic currently open in Litematica.", + "", + "Usage:", + "> litematica", + "> litematica <#>" + ); + } +} \ No newline at end of file diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 411a841b8..ca61ab9a6 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -44,6 +44,8 @@ import baritone.utils.schematic.MapArtSchematic; import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.SchematicSystem; +import baritone.utils.schematic.format.defaults.LitematicaSchematic; +import baritone.utils.schematic.litematica.LitematicaHelper; import baritone.utils.schematic.schematica.SchematicaHelper; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -53,6 +55,7 @@ import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; +import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.state.Property; import net.minecraft.util.Direction; import net.minecraft.util.Hand; @@ -67,6 +70,7 @@ import java.io.File; import java.io.FileInputStream; +import java.nio.file.Files; import java.util.*; import java.util.stream.Collectors; @@ -183,6 +187,28 @@ public void buildOpenSchematic() { } } + @Override + public void buildOpenLitematic(int i) { + if (LitematicaHelper.isLitematicaPresent()) { + //if java.lang.NoSuchMethodError is thrown see comment in SchematicPlacementManager + if (LitematicaHelper.hasLoadedSchematic()) { + String name = LitematicaHelper.getName(i); + try { + LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())), false); + Vector3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i); + LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); + build(name, schematic2, correctedOrigin); + } catch (Exception e) { + logDirect("Schematic File could not be loaded."); + } + } else { + logDirect("No schematic currently loaded"); + } + } else { + logDirect("Litematica is not present"); + } + } + public void clearArea(BlockPos corner1, BlockPos corner2) { BlockPos origin = new BlockPos(Math.min(corner1.getX(), corner2.getX()), Math.min(corner1.getY(), corner2.getY()), Math.min(corner1.getZ(), corner2.getZ())); int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; diff --git a/src/main/java/baritone/utils/accessor/ILongArrayNBT.java b/src/main/java/baritone/utils/accessor/ILongArrayNBT.java new file mode 100644 index 000000000..df5ec72d0 --- /dev/null +++ b/src/main/java/baritone/utils/accessor/ILongArrayNBT.java @@ -0,0 +1,27 @@ +/* + * 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.accessor; + +/** + * @author rycbar + * @since 26.09.2022 + */ +public interface ILongArrayNBT { + + long[] getLongArray(); +} \ No newline at end of file diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 15aa281a9..092ff8f2a 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -19,6 +19,7 @@ import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.format.ISchematicFormat; +import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.format.defaults.MCEditSchematic; import baritone.utils.schematic.format.defaults.SpongeSchematic; import net.minecraft.nbt.CompoundNBT; @@ -65,6 +66,26 @@ public IStaticSchematic parse(InputStream input) throws IOException { throw new UnsupportedOperationException("Unsupported Version of a Sponge Schematic"); } } + }, + + /** + * The Litematica schematic specification. Commonly denoted by the ".litematic" file extension. + */ + LITEMATICA("litematic") { + @Override + public IStaticSchematic parse(InputStream input) throws IOException { + CompoundNBT nbt = CompressedStreamTools.readCompressed(input); + int version = nbt.getInt("Version"); + switch (version) { + case 4: //1.12 + return new LitematicaSchematic(nbt, false); + case 5: //1.13-1.17 + case 6: //1.18+ + throw new UnsupportedOperationException("This litematic Verion is too new."); + default: + throw new UnsupportedOperationException("Unsuported Version of a Litematica Schematic"); + } + } }; private final String extension; diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java new file mode 100644 index 000000000..16a8f9711 --- /dev/null +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -0,0 +1,348 @@ +/* + * 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.schematic.format.defaults; + +import baritone.utils.accessor.ILongArrayNBT; +import baritone.utils.schematic.StaticSchematic; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.state.Property; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector3i; +import net.minecraft.util.registry.Registry; +import org.apache.commons.lang3.Validate; + +import javax.annotation.Nullable; +import java.util.Optional; + +/** + * Based on EmersonDove's work + * ... + * + * @author rycbar + * @since 22.09.2022 + */ +public final class LitematicaSchematic extends StaticSchematic { + private final Vector3i offsetMinCorner; + private final CompoundNBT nbt; + + /** + * @param nbtTagCompound a decompressed file stream aka nbt data. + * @param rotated if the schematic is rotated by 90°. + */ + public LitematicaSchematic(CompoundNBT nbtTagCompound, boolean rotated) { + this.nbt = nbtTagCompound; + this.offsetMinCorner = new Vector3i(getMinOfSchematic("x"), getMinOfSchematic("y"), getMinOfSchematic("z")); + this.y = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("y")); + + if (rotated) { + this.x = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("z")); + this.z = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("x")); + } else { + this.x = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("x")); + this.z = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("z")); + } + this.states = new BlockState[this.x][this.z][this.y]; + fillInSchematic(); + } + + /** + * @return Array of subregion names. + */ + private static String[] getRegions(CompoundNBT nbt) { + return nbt.getCompound("Regions").keySet().toArray(new String[0]); + } + + /** + * Gets both ends from a region box for a given axis and returns the lower one. + * + * @param s axis that should be read. + * @return the lower coord of the requested axis. + */ + private static int getMinOfSubregion(CompoundNBT nbt, String subReg, String s) { + int a = nbt.getCompound("Regions").getCompound(subReg).getCompound("Position").getInt(s); + int b = nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt(s); + if (b < 0) { + b++; + } + return Math.min(a, a + b); + + } + + /** + * @param blockStatePalette List of all different block types used in the schematic. + * @return Array of BlockStates. + */ + private static BlockState[] getBlockList(ListNBT blockStatePalette) { + BlockState[] blockList = new BlockState[blockStatePalette.size()]; + + for (int i = 0; i < blockStatePalette.size(); i++) { + Block block = Registry.BLOCK.getOrDefault(new ResourceLocation((((CompoundNBT) blockStatePalette.get(i)).getString("Name")))); + CompoundNBT properties = ((CompoundNBT) blockStatePalette.get(i)).getCompound("Properties"); + + blockList[i] = getBlockState(block, properties); + } + return blockList; + } + + /** + * @param block block. + * @param properties List of Properties the block has. + * @return A blockState. + */ + private static BlockState getBlockState(Block block, CompoundNBT properties) { + BlockState blockState = block.getDefaultState(); + + for (Object key : properties.keySet().toArray()) { + Property property = block.getStateContainer().getProperty((String) key); + String propertyValue = properties.getString((String) key); + if (property != null) { + blockState = setPropertyValue(blockState, property, propertyValue); + } + } + return blockState; + } + + /** + * @author Emerson + */ + private static > BlockState setPropertyValue(BlockState state, Property property, String value) { + Optional parsed = property.parseValue(value); + if (parsed.isPresent()) { + return state.with(property, parsed.get()); + } else { + throw new IllegalArgumentException("Invalid value for property " + property); + } + } + + /** + * @param amountOfBlockTypes amount of block types in the schematic. + * @return amount of bits used to encode a block. + */ + private static int getBitsPerBlock(int amountOfBlockTypes) { + return (int) Math.floor((Math.log(amountOfBlockTypes)) / Math.log(2)) + 1; + } + + /** + * Calculates the volume of the subregion. As size can be a negative value we take the absolute value of the + * multiplication as the volume still holds a positive amount of blocks. + * + * @return the volume of the subregion. + */ + private static long getVolume(CompoundNBT nbt, String subReg) { + return Math.abs( + nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("x") * + nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("y") * + nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("z")); + } + + /** + * @return array of Long values. + */ + private static long[] getBlockStates(CompoundNBT nbt, String subReg) { + return ((ILongArrayNBT) nbt.getCompound("Regions").getCompound(subReg).get("BlockStates")).getLongArray(); + } + + /** + * Subregion don't have to be the same size as the enclosing size of the schematic. If they are smaller we check here if the current block is part of the subregion. + * + * @param x coord of the block relative to the minimum corner. + * @param y coord of the block relative to the minimum corner. + * @param z coord of the block relative to the minimum corner. + * @return if the current block is part of the subregion. + */ + private static boolean inSubregion(CompoundNBT nbt, String subReg, int x, int y, int z) { + return x >= 0 && y >= 0 && z >= 0 && + x < Math.abs(nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("x")) && + y < Math.abs(nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("y")) && + z < Math.abs(nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("z")); + } + + /** + * @param s axis. + * @return the lowest coordinate of that axis of the schematic. + */ + private int getMinOfSchematic(String s) { + int n = Integer.MAX_VALUE; + for (String subReg : getRegions(nbt)) { + n = Math.min(n, getMinOfSubregion(nbt, subReg, s)); + } + return n; + } + + /** + * reads the file data. + */ + private void fillInSchematic() { + for (String subReg : getRegions(nbt)) { + ListNBT usedBlockTypes = nbt.getCompound("Regions").getCompound(subReg).getList("BlockStatePalette", 10); + BlockState[] blockList = getBlockList(usedBlockTypes); + + int bitsPerBlock = getBitsPerBlock(usedBlockTypes.size()); + long regionVolume = getVolume(nbt, subReg); + long[] blockStateArray = getBlockStates(nbt, subReg); + + LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, regionVolume, blockStateArray); + + writeSubregionIntoSchematic(nbt, subReg, blockList, bitArray); + } + } + + /** + * Writes the file data in to the IBlockstate array. + * + * @param blockList list with the different block types used in the schematic. + * @param bitArray bit array that holds the placement pattern. + */ + private void writeSubregionIntoSchematic(CompoundNBT nbt, String subReg, BlockState[] blockList, LitematicaBitArray bitArray) { + Vector3i offsetSubregion = new Vector3i(getMinOfSubregion(nbt, subReg, "x"), getMinOfSubregion(nbt, subReg, "y"), getMinOfSubregion(nbt, subReg, "z")); + int index = 0; + for (int y = 0; y < this.y; y++) { + for (int z = 0; z < this.z; z++) { + for (int x = 0; x < this.x; x++) { + if (inSubregion(nbt, subReg, x, y, z)) { + this.states[x - (offsetMinCorner.getX() - offsetSubregion.getX())][z - (offsetMinCorner.getZ() - offsetSubregion.getZ())][y - (offsetMinCorner.getY() - offsetSubregion.getY())] = blockList[bitArray.getAt(index)]; + index++; + } + } + } + } + } + + /** + * @return offset from the schematic origin to the minimum Corner as a Vec3i. + */ + public Vector3i getOffsetMinCorner() { + return offsetMinCorner; + } + + /** + * @return x size of the schematic. + */ + public int getX() { + return this.x; + } + + /** + * @return y size of the schematic. + */ + public int getY() { + return this.y; + } + + /** + * @return z size of the schematic. + */ + public int getZ() { + return this.z; + } + + /** + * @param x position relative to the minimum corner of the schematic. + * @param y position relative to the minimum corner of the schematic. + * @param z position relative to the minimum corner of the schematic. + * @param blockState new blockstate of the block at this position. + */ + public void setDirect(int x, int y, int z, BlockState blockState) { + this.states[x][z][y] = blockState; + } + + /** + * @param rotated if the schematic is rotated by 90°. + * @return a copy of the schematic. + */ + public LitematicaSchematic getCopy(boolean rotated) { + return new LitematicaSchematic(nbt, rotated); + } + + /** + * @author maruohon + * Class from the Litematica mod by maruohon + * Usage under LGPLv3 with the permission of the author. + * ... + */ + private static class LitematicaBitArray { + /** + * The long array that is used to store the data for this BitArray. + */ + private final long[] longArray; + /** + * Number of bits a single entry takes up + */ + private final int bitsPerEntry; + /** + * The maximum value for a single entry. This also works as a bitmask for a single entry. + * For instance, if bitsPerEntry were 5, this value would be 31 (ie, {@code 0b00011111}). + */ + private final long maxEntryValue; + /** + * Number of entries in this array (not the length of the long array that internally backs this array) + */ + private final long arraySize; + + public LitematicaBitArray(int bitsPerEntryIn, long arraySizeIn, @Nullable long[] longArrayIn) { + Validate.inclusiveBetween(1L, 32L, bitsPerEntryIn); + this.arraySize = arraySizeIn; + this.bitsPerEntry = bitsPerEntryIn; + this.maxEntryValue = (1L << bitsPerEntryIn) - 1L; + + if (longArrayIn != null) { + this.longArray = longArrayIn; + } else { + this.longArray = new long[(int) (roundUp(arraySizeIn * (long) bitsPerEntryIn, 64L) / 64L)]; + } + } + + public static long roundUp(long number, long interval) { + int sign = 1; + if (interval == 0) { + return 0; + } else if (number == 0) { + return interval; + } else { + if (number < 0) { + sign = -1; + } + + long i = number % (interval * sign); + return i == 0 ? number : number + (interval * sign) - i; + } + } + + public int getAt(long index) { + Validate.inclusiveBetween(0L, this.arraySize - 1L, index); + long startOffset = index * (long) this.bitsPerEntry; + int startArrIndex = (int) (startOffset >> 6); // startOffset / 64 + int endArrIndex = (int) (((index + 1L) * (long) this.bitsPerEntry - 1L) >> 6); + int startBitOffset = (int) (startOffset & 0x3F); // startOffset % 64 + + if (startArrIndex == endArrIndex) { + return (int) (this.longArray[startArrIndex] >>> startBitOffset & this.maxEntryValue); + } else { + int endOffset = 64 - startBitOffset; + return (int) ((this.longArray[startArrIndex] >>> startBitOffset | this.longArray[endArrIndex] << endOffset) & this.maxEntryValue); + } + } + + public long size() { + return this.arraySize; + } + } +} \ No newline at end of file diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java new file mode 100644 index 000000000..1396e5bed --- /dev/null +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -0,0 +1,215 @@ +/* + * 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.schematic.litematica; + +import baritone.utils.schematic.format.defaults.LitematicaSchematic; +import fi.dy.masa.litematica.Litematica; +import fi.dy.masa.litematica.data.DataManager; +import net.minecraft.block.BlockState; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.vector.Vector3i; + +import java.io.File; + +/** + * Helper class that provides access or processes data related to Litmatica schematics. + * + * @author rycbar + * @since 28.09.2022 + */ +public final class LitematicaHelper { + + /** + * @return if Litmatica is installed. + */ + public static boolean isLitematicaPresent() { + try { + Class.forName(Litematica.class.getName()); + return true; + } catch (ClassNotFoundException | NoClassDefFoundError ex) { + return false; + } + } + + /** + * @return if there are loaded schematics. + */ + public static boolean hasLoadedSchematic() { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().size() > 0; + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the name of the requested schematic. + */ + public static String getName(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getName(); + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the world coordinates of the schematic origin. This can but does not have to be the minimum corner. + */ + public static Vector3i getOrigin(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin(); + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return Filepath of the schematic file. + */ + public static File getSchematicFile(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getSchematicFile(); + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return rotation of the schematic placement. + */ + public static Rotation getRotation(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getRotation(); + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the mirroring of the schematic placement. + */ + public static Mirror getMirror(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getMirror(); + } + + /** + * @param schematic original schematic. + * @param i index of the Schematic in the schematic placement list. + * @return the minimum corner coordinates of the schematic, after the original schematic got rotated and mirrored. + */ + public static Vector3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { + int x = LitematicaHelper.getOrigin(i).getX(); + int y = LitematicaHelper.getOrigin(i).getY(); + int z = LitematicaHelper.getOrigin(i).getZ(); + int mx = schematic.getOffsetMinCorner().getX(); + int my = schematic.getOffsetMinCorner().getY(); + int mz = schematic.getOffsetMinCorner().getZ(); + int sx = (schematic.getX() - 1) * -1; + int sz = (schematic.getZ() - 1) * -1; + + Vector3i correctedOrigin; + Mirror mirror = LitematicaHelper.getMirror(i); + Rotation rotation = LitematicaHelper.getRotation(i); + + //todo there has to be a better way to do this but i cant finde it atm + switch (mirror) { + case FRONT_BACK: + case LEFT_RIGHT: + switch ((mirror.ordinal() * 2 + rotation.ordinal()) % 4) { + case 1: + correctedOrigin = new Vector3i(x + (sz - mz), y + my, z + (sx - mx)); + break; + case 2: + correctedOrigin = new Vector3i(x + mx, y + my, z + (sz - mz)); + break; + case 3: + correctedOrigin = new Vector3i(x + mz, y + my, z + mx); + break; + default: + correctedOrigin = new Vector3i(x + (sx - mx), y + my, z + mz); + break; + } + break; + default: + switch (rotation) { + case CLOCKWISE_90: + correctedOrigin = new Vector3i(x + (sz - mz), y + my, z + mx); + break; + case CLOCKWISE_180: + correctedOrigin = new Vector3i(x + (sx - mx), y + my, z + (sz - mz)); + break; + case COUNTERCLOCKWISE_90: + correctedOrigin = new Vector3i(x + mz, y + my, z + (sx - mx)); + break; + default: + correctedOrigin = new Vector3i(x + mx, y + my, z + mz); + break; + } + } + return correctedOrigin; + } + + /** + * @param in the xyz offsets of the block relative to the schematic minimum corner. + * @param sizeX size of the schematic in the x-axis direction. + * @param sizeZ size of the schematic in the z-axis direction. + * @param mirror the mirroring of the schematic placement. + * @return the corresponding xyz coordinates after mirroring them according to the given mirroring. + */ + public static Vector3i doMirroring(Vector3i in, int sizeX, int sizeZ, Mirror mirror) { + int xOut = in.getX(); + int zOut = in.getZ(); + if (mirror == Mirror.LEFT_RIGHT) { + zOut = sizeZ - in.getZ(); + } else if (mirror == Mirror.FRONT_BACK) { + xOut = sizeX - in.getX(); + } + return new Vector3i(xOut, in.getY(), zOut); + } + + /** + * @param in the xyz offsets of the block relative to the schematic minimum corner. + * @param sizeX size of the schematic in the x-axis direction. + * @param sizeZ size of the schematic in the z-axis direction. + * @return the corresponding xyz coordinates after rotation them 90° clockwise. + */ + public static Vector3i rotate(Vector3i in, int sizeX, int sizeZ) { + return new Vector3i(sizeX - (sizeX - sizeZ) - in.getZ(), in.getY(), in.getX()); + } + + /** + * IDFK this just grew and it somehow works. If you understand how, pls tell me. + * + * @param schemIn give in the original schematic. + * @param i index of the Schematic in the schematic placement list. + * @return get it out rotated and mirrored. + */ + public static LitematicaSchematic blackMagicFuckery(LitematicaSchematic schemIn, int i) { + LitematicaSchematic tempSchem = schemIn.getCopy(LitematicaHelper.getRotation(i).ordinal() % 2 == 1); + for (int yCounter = 0; yCounter < schemIn.getY(); yCounter++) { + for (int zCounter = 0; zCounter < schemIn.getZ(); zCounter++) { + for (int xCounter = 0; xCounter < schemIn.getX(); xCounter++) { + Vector3i xyzHolder = new Vector3i(xCounter, yCounter, zCounter); + xyzHolder = LitematicaHelper.doMirroring(xyzHolder, schemIn.getX() - 1, schemIn.getZ() - 1, LitematicaHelper.getMirror(i)); + for (int turns = 0; turns < LitematicaHelper.getRotation(i).ordinal(); turns++) { + if ((turns % 2) == 0) { + xyzHolder = LitematicaHelper.rotate(xyzHolder, schemIn.getX() - 1, schemIn.getZ() - 1); + } else { + xyzHolder = LitematicaHelper.rotate(xyzHolder, schemIn.getZ() - 1, schemIn.getX() - 1); + } + } + BlockState state = schemIn.getDirect(xCounter, yCounter, zCounter); + try { + state = state.mirror(LitematicaHelper.getMirror(i)).rotate(LitematicaHelper.getRotation(i)); + } catch (NullPointerException e) { + //nothing to worry about it's just a hole in the schematic. + } + tempSchem.setDirect(xyzHolder.getX(), xyzHolder.getY(), xyzHolder.getZ(), state); + } + } + } + return tempSchem; + } +} \ No newline at end of file diff --git a/src/schematica_api/java/fi/dy/masa/litematica/Litematica.java b/src/schematica_api/java/fi/dy/masa/litematica/Litematica.java new file mode 100644 index 000000000..c10d5b38e --- /dev/null +++ b/src/schematica_api/java/fi/dy/masa/litematica/Litematica.java @@ -0,0 +1,21 @@ +/* + * 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 fi.dy.masa.litematica; + +public class Litematica { +} \ No newline at end of file diff --git a/src/schematica_api/java/fi/dy/masa/litematica/data/DataManager.java b/src/schematica_api/java/fi/dy/masa/litematica/data/DataManager.java new file mode 100644 index 000000000..4941e7cf3 --- /dev/null +++ b/src/schematica_api/java/fi/dy/masa/litematica/data/DataManager.java @@ -0,0 +1,33 @@ +/* + * 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 fi.dy.masa.litematica.data; + +import fi.dy.masa.litematica.schematic.placement.SchematicPlacementManager; + +public class DataManager { + public static final DataManager INSTANCE = new DataManager(); + private final SchematicPlacementManager schematicPlacementManager = new SchematicPlacementManager(); + + private static DataManager getInstance() { + return INSTANCE; + } + + public static SchematicPlacementManager getSchematicPlacementManager() { + return getInstance().schematicPlacementManager; + } +} \ No newline at end of file diff --git a/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java new file mode 100644 index 000000000..ce3f09c70 --- /dev/null +++ b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java @@ -0,0 +1,35 @@ +/* + * 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 fi.dy.masa.litematica.schematic.placement; + +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; + +public class SchematicPlacement extends SchematicPlacementUnloaded { + private Rotation rotation; + private Mirror mirror; + + public Rotation getRotation() { + return this.rotation; + } + + public Mirror getMirror() { + return this.mirror; + } + +} \ No newline at end of file diff --git a/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java new file mode 100644 index 000000000..ab60e27fa --- /dev/null +++ b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java @@ -0,0 +1,31 @@ +/* + * 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 fi.dy.masa.litematica.schematic.placement; + +import java.util.ArrayList; +import java.util.List; + +public class SchematicPlacementManager { + private final List schematicPlacements = new ArrayList<>(); + + //in case of a java.lang.NoSuchMethodError try change the name of this method to getAllSchematicPlacements() + //there are inconsistencies in the litematica mod about the naming of this method + public List getAllSchematicsPlacements() { + return schematicPlacements; + } +} \ No newline at end of file diff --git a/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java new file mode 100644 index 000000000..e5eaaffc9 --- /dev/null +++ b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.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 fi.dy.masa.litematica.schematic.placement; + +import net.minecraft.util.math.BlockPos; + +import javax.annotation.Nullable; +import java.io.File; + +public class SchematicPlacementUnloaded { + protected String name = "?"; + @Nullable + protected File schematicFile; + protected BlockPos origin = BlockPos.ZERO; + + public String getName() { + return this.name; + } + + @Nullable + public File getSchematicFile() { + return this.schematicFile; + } + + public BlockPos getOrigin() { + return this.origin; + } +} \ No newline at end of file From 9d620f8137e06cb33916f92b836cb568abd23fe8 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Tue, 4 Oct 2022 03:35:49 +0200 Subject: [PATCH 404/935] merging main into 1.16.5 --- .../java/baritone/command/defaults/FindCommand.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index b45f7050e..1bc454b82 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -27,8 +27,7 @@ import baritone.cache.CachedChunk; import net.minecraft.block.Block; import net.minecraft.util.registry.Registry; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.*; import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; @@ -76,10 +75,10 @@ public void execute(String label, IArgConsumer args) throws CommandException { private ITextComponent positionToComponent(BetterBlockPos pos) { String positionText = String.format("%s %s %s", pos.x, pos.y, pos.z); String command = String.format("%sgoal %s", FORCE_COMMAND_PREFIX, positionText); - ITextComponent baseComponent = new TextComponentString(pos.toString()); - ITextComponent hoverComponent = new TextComponentString("Click to set goal to this position"); + ITextComponent baseComponent = new StringTextComponent(pos.toString()); + ITextComponent hoverComponent = new StringTextComponent("Click to set goal to this position"); baseComponent.getStyle() - .setColor(TextFormatting.GRAY) + .setColor(Color.fromTextFormatting(TextFormatting.GRAY)) .setInsertion(positionText) .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)) .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)); @@ -91,7 +90,7 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman return new TabCompleteHelper() .append( CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream() - .map(Registry.BLOCK::getNameForObject) + .map(Registry.BLOCK::getKey) .map(Object::toString) ) .filterPrefixNamespaced(args.getString()) From c2a857f4d683057eee833096cb3bf942b39aead8 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Tue, 4 Oct 2022 03:41:38 +0200 Subject: [PATCH 405/935] merging main into 1.16.5 --- .../launch/mixins/MixinNBTTagLongArray.java | 35 ------------------- 1 file changed, 35 deletions(-) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java diff --git a/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java b/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java deleted file mode 100644 index 2c05e5442..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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.utils.accessor.INBTTagLongArray; -import net.minecraft.nbt.NBTTagLongArray; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -/** - * @author rycbar - * @since 26.09.2022 - */ -@Mixin(NBTTagLongArray.class) -public abstract class MixinNBTTagLongArray implements INBTTagLongArray { - - @Accessor("data") - @Override - public abstract long[] getLongArray(); -} \ No newline at end of file From 44c1438541b4656e24ac397e462f448a9cb9d1c9 Mon Sep 17 00:00:00 2001 From: rycbar0 Date: Tue, 4 Oct 2022 19:38:16 +0200 Subject: [PATCH 406/935] forgot to adjust version check --- .../utils/schematic/format/DefaultSchematicFormats.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 092ff8f2a..9cb5bb90b 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -78,10 +78,11 @@ public IStaticSchematic parse(InputStream input) throws IOException { int version = nbt.getInt("Version"); switch (version) { case 4: //1.12 - return new LitematicaSchematic(nbt, false); + throw new UnsupportedOperationException("This litematic Version is too old."); case 5: //1.13-1.17 + return new LitematicaSchematic(nbt, false); case 6: //1.18+ - throw new UnsupportedOperationException("This litematic Verion is too new."); + throw new UnsupportedOperationException("This litematic Version is too new."); default: throw new UnsupportedOperationException("Unsuported Version of a Litematica Schematic"); } From 98763271a49b4747158db1de87fef6890fb062d5 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Thu, 13 Oct 2022 23:36:38 +0200 Subject: [PATCH 407/935] Update litematic version check --- .../utils/schematic/format/DefaultSchematicFormats.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 9e3c7f9cc..17fafc821 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -78,11 +78,10 @@ public IStaticSchematic parse(InputStream input) throws IOException { int version = nbt.getInt("Version"); switch (version) { case 4: //1.12 - throw new UnsupportedOperationException("This litematic Version is too old."); case 5: //1.13-1.17 - return new LitematicaSchematic(nbt, false); + throw new UnsupportedOperationException("This litematic Version is too old."); case 6: //1.18+ - throw new UnsupportedOperationException("This litematic Version is too new."); + return new LitematicaSchematic(nbt, false); default: throw new UnsupportedOperationException("Unsuported Version of a Litematica Schematic"); } From ba3ca47f8c454a8c9ed34d6da66d1b63bf7acf37 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sun, 23 Oct 2022 01:42:31 +0200 Subject: [PATCH 408/935] =?UTF-8?q?=E2=9C=A8=20Add=20buildIgnoreProperties?= =?UTF-8?q?=20setting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/java/baritone/api/Settings.java | 6 ++++++ src/main/java/baritone/process/BuilderProcess.java | 13 ++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 897182898..267fe7822 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -279,6 +279,12 @@ public final class Settings { */ public final Setting buildIgnoreDirection = new Setting<>(false); + /** + * A list of names of block properties the builder will ignore. + */ + public final Setting> buildIgnoreProperties = new Setting<>(new ArrayList<>(Arrays.asList( + ))); + /** * If this setting is true, Baritone will never break a block that is adjacent to an unsupported falling block. *

diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index c1c0cb1d9..2d7714d9e 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -874,14 +874,21 @@ private List approxPlaceable(int size) { BlockTrapDoor.OPEN, BlockTrapDoor.HALF ); - private boolean sameWithoutOrientation(IBlockState first, IBlockState second) { + private boolean sameBlockstate(IBlockState first, IBlockState second) { if (first.getBlock() != second.getBlock()) { return false; } + boolean ignoreDirection = Baritone.settings().buildIgnoreDirection.value; + List ignoredProps = Baritone.settings().buildIgnoreProperties.value; + if (!ignoreDirection && ignoredProps.isEmpty()) { + return first.equals(second); // early return if no properties are being ignored + } ImmutableMap, Comparable> map1 = first.getProperties(); ImmutableMap, Comparable> map2 = second.getProperties(); for (IProperty prop : map1.keySet()) { - if (map1.get(prop) != map2.get(prop) && !orientationProps.contains(prop)) { + if (map1.get(prop) != map2.get(prop) + && !(ignoreDirection && orientationProps.contains(prop)) + && !ignoredProps.contains(prop.getName())) { return false; } } @@ -913,7 +920,7 @@ private boolean valid(IBlockState current, IBlockState desired, boolean itemVeri if (current.equals(desired)) { return true; } - return Baritone.settings().buildIgnoreDirection.value && sameWithoutOrientation(current, desired); + return sameBlockstate(current, desired); } public class BuilderCalculationContext extends CalculationContext { From 1cd2fb5b18203b7fee4f8e1c71a53326e6b7e2ea Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 24 Oct 2022 22:49:12 +0200 Subject: [PATCH 409/935] Reliably clear keys when paused --- .../java/baritone/command/defaults/ExecutionControlCommands.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index eaab75286..6f6293ccd 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -56,6 +56,7 @@ public boolean isActive() { @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + baritone.getInputOverrideHandler().clearAllKeys(); return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } From 3cef7a7911d45c94a1344239ab6895b5c7578bb8 Mon Sep 17 00:00:00 2001 From: rycbar0 <100363533+rycbar0@users.noreply.github.com> Date: Wed, 26 Oct 2022 23:09:23 +0200 Subject: [PATCH 410/935] formula error --- .../utils/schematic/format/defaults/LitematicaSchematic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 84b9b86e2..c2857bc2d 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -136,7 +136,7 @@ private static > IBlockState setPropertyValue(IBlockStat * @return amount of bits used to encode a block. */ private static int getBitsPerBlock(int amountOfBlockTypes) { - return (int) Math.floor((Math.log(amountOfBlockTypes)) / Math.log(2)) + 1; + return (int) Math.max(2,Math.ceil(Math.log(amountOfBlockTypes) / Math.log(2))); } /** From 086828fb9be0da0ae25aee19940274be57140378 Mon Sep 17 00:00:00 2001 From: Marvion Kirito Date: Mon, 31 Oct 2022 19:10:54 +0800 Subject: [PATCH 411/935] 1.19.2 Update --- .github/workflows/gradle_build.yml | 51 +- .github/workflows/run_tests.yml | 26 +- .gitignore | 11 + .gitlab-ci.yml | 14 + Dockerfile | 4 +- README.md | 52 ++- SETUP.md | 51 +- USAGE.md | 61 ++- build.gradle | 183 ++------ buildSrc/build.gradle | 4 +- .../gradle/task/BaritoneGradleTask.java | 64 +-- .../baritone/gradle/task/CreateDistTask.java | 67 +-- .../baritone/gradle/task/ProguardTask.java | 293 ++++-------- .../baritone/gradle/util/Determinizer.java | 27 +- common/build.gradle | 136 ++++++ fabric/build.gradle | 109 +++++ fabric/src/main/resources/fabric.mod.json | 31 ++ forge/build.gradle | 117 +++++ forge/gradle.properties | 18 + .../baritone/launch/BaritoneForgeModXD.java | 22 + forge/src/main/resources/META-INF/mods.toml | 40 ++ gradle.properties | 11 + gradle/wrapper/gradle-wrapper.jar | Bin 54706 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 53 ++- gradlew.bat | 43 +- jitpack.yml | 3 + scripts/proguard.pro | 61 +-- settings.gradle | 33 ++ src/api/java/baritone/api/BaritoneAPI.java | 11 +- .../java/baritone/api/IBaritoneProvider.java | 8 +- src/api/java/baritone/api/Settings.java | 82 +++- .../baritone/api/cache/IBlockTypeAccess.java | 8 +- .../java/baritone/api/cache/ICachedWorld.java | 6 +- .../baritone/api/cache/IContainerMemory.java | 44 -- .../java/baritone/api/cache/IWorldData.java | 5 - .../baritone/api/cache/IWorldScanner.java | 6 +- .../api/command/argument/IArgConsumer.java | 14 +- .../command/argument/ICommandArgument.java | 6 +- .../api/command/datatypes/BlockById.java | 10 +- .../command/datatypes/EntityClassById.java | 28 +- .../{ForEnumFacing.java => ForDirection.java} | 13 +- .../api/command/datatypes/NearbyPlayer.java | 19 +- .../api/command/datatypes/RelativeFile.java | 2 +- .../command/datatypes/RelativeGoalBlock.java | 8 +- .../api/command/datatypes/RelativeGoalXZ.java | 6 +- .../command/datatypes/RelativeGoalYLevel.java | 4 +- .../exception/CommandUnhandledException.java | 4 +- .../command/exception/ICommandException.java | 4 +- .../api/command/helpers/Paginator.java | 135 +++--- .../command/helpers/TabCompleteHelper.java | 2 +- .../api/event/events/BlockInteractEvent.java | 2 +- .../api/event/events/PacketEvent.java | 10 +- .../api/event/events/RenderEvent.java | 18 +- .../api/event/events/RotationMoveEvent.java | 9 +- .../api/event/events/TabCompleteEvent.java | 2 +- .../baritone/api/event/events/WorldEvent.java | 8 +- .../event/listener/IGameEventListener.java | 38 +- .../java/baritone/api/pathing/goals/Goal.java | 2 +- .../baritone/api/pathing/goals/GoalBlock.java | 2 +- .../api/pathing/goals/GoalGetToBlock.java | 2 +- .../baritone/api/pathing/goals/GoalNear.java | 4 +- .../api/pathing/goals/GoalRunAway.java | 4 +- .../pathing/goals/GoalStrictDirection.java | 10 +- .../api/pathing/goals/GoalTwoBlocks.java | 2 +- .../baritone/api/pathing/goals/GoalXZ.java | 12 +- .../api/pathing/movement/ActionCosts.java | 4 +- .../api/pathing/movement/IMovement.java | 2 +- .../baritone/api/process/IBuilderProcess.java | 10 +- .../baritone/api/process/IFarmProcess.java | 2 +- .../baritone/api/process/IFollowProcess.java | 2 +- .../api/process/IGetToBlockProcess.java | 2 +- .../baritone/api/process/IMineProcess.java | 2 +- .../api/schematic/CompositeSchematic.java | 8 +- .../baritone/api/schematic/FillSchematic.java | 10 +- .../baritone/api/schematic/ISchematic.java | 10 +- .../api/schematic/IStaticSchematic.java | 16 +- .../baritone/api/schematic/MaskSchematic.java | 8 +- .../api/schematic/ReplaceSchematic.java | 4 +- .../api/schematic/ShellSchematic.java | 4 +- .../api/schematic/SubstituteSchematic.java | 44 +- .../api/schematic/WallsSchematic.java | 4 +- .../baritone/api/selection/ISelection.java | 16 +- .../api/selection/ISelectionManager.java | 8 +- .../baritone/api/utils/BetterBlockPos.java | 30 +- .../baritone/api/utils/BlockOptionalMeta.java | 307 ++++-------- .../api/utils/BlockOptionalMetaLookup.java | 8 +- .../java/baritone/api/utils/BlockUtils.java | 9 +- src/api/java/baritone/api/utils/Helper.java | 62 ++- .../baritone/api/utils/IPlayerContext.java | 65 ++- .../baritone/api/utils/IPlayerController.java | 31 +- .../baritone/api/utils/RayTraceUtils.java | 27 +- src/api/java/baritone/api/utils/Rotation.java | 3 + .../baritone/api/utils/RotationUtils.java | 98 ++-- .../java/baritone/api/utils/SettingsUtil.java | 22 +- src/api/java/baritone/api/utils/VecUtils.java | 47 +- .../baritone/api/utils/gui/BaritoneToast.java | 69 +-- .../api/utils/interfaces/IGoalRenderPos.java | 2 +- ...creen.java => BaritoneMixinConnector.java} | 20 +- .../java/baritone/launch/MixinPlugin.java | 71 +++ .../baritone/launch/mixins/MixinBitArray.java | 67 --- .../mixins/MixinBlockStateContainer.java | 47 -- .../launch/mixins/MixinChatTabCompleter.java | 39 -- .../launch/mixins/MixinChunkArray.java | 97 ++++ .../mixins/MixinChunkProviderClient.java | 39 -- .../mixins/MixinChunkRenderContainer.java | 52 --- .../launch/mixins/MixinChunkRenderWorker.java | 57 --- .../mixins/MixinClientChunkProvider.java | 63 +++ .../mixins/MixinClientPlayNetHandler.java | 189 ++++++++ ...erSP.java => MixinClientPlayerEntity.java} | 59 +-- .../mixins/MixinCommandSuggestionHelper.java | 100 ++++ .../baritone/launch/mixins/MixinEntity.java | 60 +++ .../launch/mixins/MixinEntityLivingBase.java | 102 ---- ...ver.java => MixinEntityRenderManager.java} | 32 +- .../launch/mixins/MixinItemStack.java | 16 +- .../launch/mixins/MixinLivingEntity.java | 82 ++++ .../launch/mixins/MixinLootContext.java | 74 +++ .../launch/mixins/MixinMinecraft.java | 76 ++- .../mixins/MixinNetHandlerPlayClient.java | 165 ------- .../launch/mixins/MixinNetworkManager.java | 47 +- ...llerMP.java => MixinPlayerController.java} | 14 +- .../launch/mixins/MixinRenderChunk.java | 89 ---- .../launch/mixins/MixinRenderList.java | 47 -- .../baritone/launch/mixins/MixinScreen.java | 58 +++ .../mixins/MixinStateImplementation.java | 60 --- .../launch/mixins/MixinTabCompleter.java | 83 ---- .../launch/mixins/MixinVboRenderList.java | 47 -- .../launch/mixins/MixinWorldClient.java | 75 --- ...yRenderer.java => MixinWorldRenderer.java} | 31 +- src/launch/resources/META-INF/MANIFEST.MF | 5 + .../resources/mixins.baritone-meteor.json | 28 ++ src/launch/resources/pack.mcmeta | 6 + src/main/java/baritone/Baritone.java | 12 +- .../baritone/altoclef/AltoClefSettings.java | 252 ++++++++++ .../baritone/behavior/InventoryBehavior.java | 61 +-- .../java/baritone/behavior/LookBehavior.java | 36 +- .../baritone/behavior/MemoryBehavior.java | 332 ------------- .../baritone/behavior/PathingBehavior.java | 24 +- .../baritone/behavior/WaypointBehavior.java | 93 ++++ src/main/java/baritone/cache/CachedChunk.java | 111 +++-- .../java/baritone/cache/CachedRegion.java | 35 +- src/main/java/baritone/cache/CachedWorld.java | 19 +- src/main/java/baritone/cache/ChunkPacker.java | 94 ++-- .../java/baritone/cache/ContainerMemory.java | 183 -------- src/main/java/baritone/cache/WorldData.java | 23 +- .../java/baritone/cache/WorldProvider.java | 66 +-- .../java/baritone/cache/WorldScanner.java | 86 ++-- .../command/ExampleBaritoneControl.java | 44 +- .../command/argument/ArgConsumer.java | 7 + .../command/defaults/BuildCommand.java | 3 +- .../command/defaults/ChestsCommand.java | 83 ---- .../command/defaults/ComeCommand.java | 7 +- .../command/defaults/DefaultCommands.java | 1 - .../baritone/command/defaults/ETACommand.java | 20 +- .../defaults/ExecutionControlCommands.java | 2 +- .../defaults/ExploreFilterCommand.java | 2 +- .../command/defaults/FindCommand.java | 9 +- .../command/defaults/FollowCommand.java | 26 +- .../command/defaults/HelpCommand.java | 46 +- .../command/defaults/RenderCommand.java | 4 +- .../baritone/command/defaults/SelCommand.java | 31 +- .../baritone/command/defaults/SetCommand.java | 56 +-- .../command/defaults/SurfaceCommand.java | 10 +- .../command/defaults/ThisWayCommand.java | 2 +- .../command/defaults/TunnelCommand.java | 8 +- .../command/defaults/WaypointsCommand.java | 88 ++-- .../command/manager/CommandManager.java | 10 +- .../java/baritone/event/GameEventHandler.java | 13 +- .../pathing/calc/AStarPathFinder.java | 4 +- .../pathing/movement/CalculationContext.java | 44 +- .../baritone/pathing/movement/Movement.java | 21 +- .../pathing/movement/MovementHelper.java | 295 +++++++----- .../java/baritone/pathing/movement/Moves.java | 30 +- .../movement/movements/MovementAscend.java | 74 +-- .../movement/movements/MovementDescend.java | 64 +-- .../movement/movements/MovementDiagonal.java | 163 +++---- .../movement/movements/MovementDownward.java | 12 +- .../movement/movements/MovementFall.java | 113 ++--- .../movement/movements/MovementParkour.java | 75 +-- .../movement/movements/MovementPillar.java | 99 ++-- .../movement/movements/MovementTraverse.java | 101 ++-- .../baritone/pathing/path/PathExecutor.java | 201 ++++---- .../baritone/process/BackfillProcess.java | 17 +- .../java/baritone/process/BuilderProcess.java | 439 ++++++++++-------- .../baritone/process/CustomGoalProcess.java | 2 +- .../java/baritone/process/ExploreProcess.java | 4 +- .../java/baritone/process/FarmProcess.java | 172 ++++--- .../java/baritone/process/FollowProcess.java | 18 +- .../baritone/process/GetToBlockProcess.java | 61 +-- .../java/baritone/process/MineProcess.java | 415 ++++++++--------- .../java/baritone/selection/Selection.java | 38 +- .../baritone/selection/SelectionManager.java | 8 +- .../baritone/selection/SelectionRenderer.java | 13 +- .../java/baritone/utils/BlockBreakHelper.java | 17 +- .../java/baritone/utils/BlockPlaceHelper.java | 19 +- .../baritone/utils/BlockStateInterface.java | 98 ++-- .../BlockStateInterfaceAccessWrapper.java | 39 +- src/main/java/baritone/utils/GuiClick.java | 149 +++--- src/main/java/baritone/utils/IRenderer.java | 106 +++-- .../baritone/utils/InputOverrideHandler.java | 10 +- .../java/baritone/utils/PathRenderer.java | 223 +++++---- .../baritone/utils/PathingControlManager.java | 2 +- .../baritone/utils/PlayerMovementInput.java | 34 +- src/main/java/baritone/utils/ToolSet.java | 136 +++--- .../utils/accessor/IBlockStateContainer.java | 10 - .../baritone/utils/accessor/IChunkArray.java} | 26 +- .../utils/accessor/IChunkProviderClient.java | 4 +- ...rServer.java => IClientChunkProvider.java} | 13 +- .../utils/accessor/IEntityRenderManager.java} | 26 +- .../baritone/utils/accessor/IGuiScreen.java | 2 +- .../utils/accessor/IPlayerControllerMP.java | 2 +- .../baritone/utils/pathing/Avoidance.java | 22 +- .../utils/pathing/BetterWorldBorder.java | 10 +- .../java/baritone/utils/pathing/PathBase.java | 2 +- .../utils/player/PrimaryPlayerContext.java | 14 +- .../utils/player/PrimaryPlayerController.java | 54 +-- .../utils/schematic/MapArtSchematic.java | 19 +- .../utils/schematic/SelectionSchematic.java | 18 +- .../utils/schematic/StaticSchematic.java | 10 +- .../format/DefaultSchematicFormats.java | 10 +- .../format/defaults/MCEditSchematic.java | 30 +- .../format/defaults/SpongeSchematic.java | 71 +-- .../schematica/SchematicAdapter.java | 8 +- .../schematica/SchematicaHelper.java | 2 +- .../lunatrius/core/util/math/MBlockPos.java | 2 +- .../lunatrius/schematica/api/ISchematic.java | 6 +- .../pathing/goals/GoalGetToBlockTest.java | 2 +- .../pathing/movement/ActionCostsTest.java | 6 +- .../utils/pathing/BetterBlockPosTest.java | 50 +- tweaker/build.gradle | 172 +++++++ .../java/baritone/launch/BaritoneTweaker.java | 2 +- .../java/baritone/launch/LaunchTesting.java | 105 +++++ 232 files changed, 5729 insertions(+), 5355 deletions(-) create mode 100644 .gitlab-ci.yml create mode 100644 common/build.gradle create mode 100644 fabric/build.gradle create mode 100644 fabric/src/main/resources/fabric.mod.json create mode 100644 forge/build.gradle create mode 100644 forge/gradle.properties create mode 100644 forge/src/main/java/baritone/launch/BaritoneForgeModXD.java create mode 100644 forge/src/main/resources/META-INF/mods.toml create mode 100644 gradle.properties create mode 100644 jitpack.yml delete mode 100644 src/api/java/baritone/api/cache/IContainerMemory.java rename src/api/java/baritone/api/command/datatypes/{ForEnumFacing.java => ForDirection.java} (74%) rename src/launch/java/baritone/launch/{mixins/MixinGuiScreen.java => BaritoneMixinConnector.java} (64%) create mode 100644 src/launch/java/baritone/launch/MixinPlugin.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinBitArray.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinChatTabCompleter.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinChunkArray.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinChunkProviderClient.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java rename src/launch/java/baritone/launch/mixins/{MixinEntityPlayerSP.java => MixinClientPlayerEntity.java} (71%) create mode 100644 src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinEntity.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java rename src/launch/java/baritone/launch/mixins/{MixinChunkProviderServer.java => MixinEntityRenderManager.java} (59%) create mode 100644 src/launch/java/baritone/launch/mixins/MixinLivingEntity.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinLootContext.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java rename src/launch/java/baritone/launch/mixins/{MixinPlayerControllerMP.java => MixinPlayerController.java} (78%) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinRenderChunk.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinRenderList.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinScreen.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinStateImplementation.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinTabCompleter.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinVboRenderList.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinWorldClient.java rename src/launch/java/baritone/launch/mixins/{MixinEntityRenderer.java => MixinWorldRenderer.java} (59%) create mode 100644 src/launch/resources/META-INF/MANIFEST.MF create mode 100644 src/launch/resources/mixins.baritone-meteor.json create mode 100644 src/launch/resources/pack.mcmeta create mode 100644 src/main/java/baritone/altoclef/AltoClefSettings.java delete mode 100644 src/main/java/baritone/behavior/MemoryBehavior.java create mode 100644 src/main/java/baritone/behavior/WaypointBehavior.java delete mode 100644 src/main/java/baritone/cache/ContainerMemory.java delete mode 100644 src/main/java/baritone/command/defaults/ChestsCommand.java delete mode 100644 src/main/java/baritone/utils/accessor/IBlockStateContainer.java rename src/{api/java/baritone/api/cache/IRememberedInventory.java => main/java/baritone/utils/accessor/IChunkArray.java} (66%) rename src/main/java/baritone/utils/accessor/{IChunkProviderServer.java => IClientChunkProvider.java} (75%) rename src/{launch/java/baritone/launch/mixins/MixinAnvilChunkLoader.java => main/java/baritone/utils/accessor/IEntityRenderManager.java} (54%) create mode 100644 tweaker/build.gradle rename {src/launch => tweaker/src/tweaker}/java/baritone/launch/BaritoneTweaker.java (96%) create mode 100644 tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 34e93bff2..aca2cb024 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -13,27 +13,30 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Set up JDK 8 - uses: actions/setup-java@v2 - with: - java-version: '8' - distribution: 'adopt' - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Build with Gradle - run: ./gradlew build - - - name: Archive Artifacts - uses: actions/upload-artifact@v2 - with: - name: Artifacts - path: dist/ - - - name: Archive mapping.txt - uses: actions/upload-artifact@v2 - with: - name: Mappings - path: build/tmp/proguard/mapping.txt + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up JDK 17 + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'adopt' + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build with Gradle + run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)" + + - name: Archive Artifacts + uses: actions/upload-artifact@v2 + with: + name: Artifacts + path: dist/ + + - name: Archive mapping.txt + uses: actions/upload-artifact@v2 + with: + name: Mappings + path: mapping/ diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 1af26a476..b29722677 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -11,16 +11,16 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Set up JDK 9 - uses: actions/setup-java@v2 - with: - java-version: '8' - distribution: 'adopt' - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Executing tests - run: ./gradlew test - + - uses: actions/checkout@v2 + - name: Set up JDK 17 + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'adopt' + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Executing tests + run: ./gradlew test + diff --git a/.gitignore b/.gitignore index 84a7e4319..50a166bce 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ run/ autotest/ dist/ +volderyarn/ # Gradle build/ @@ -11,6 +12,8 @@ build/ classes/ *.class +/out + # IntelliJ Files .idea/ *.iml @@ -18,6 +21,9 @@ classes/ *.iws /logs/ +tweaker/logs/ +common/logs/ + # Eclipse Files .classpath .project @@ -27,3 +33,8 @@ baritone_Client.launch # Copyright Files !/.idea/copyright/Baritone.xml !/.idea/copyright/profiles_settings.xml + +.vscode/launch.json +.architectury-transformer + +mapping \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 000000000..9efb58c97 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,14 @@ +image: java:8 + +before_script: + - which java + - which javac + +build: + script: + - ./gradlew build + - ./gradlew build -Pbaritone.forge_build + artifacts: + paths: + - dist/* + expire_in: 1 week diff --git a/Dockerfile b/Dockerfile index ba782976d..9023e2020 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,11 @@ -FROM debian:stretch +FROM ubuntu:focal ENV DEBIAN_FRONTEND noninteractive RUN apt update -y RUN apt install \ - openjdk-8-jdk \ + openjdk-17-jdk \ --assume-yes COPY . /code diff --git a/README.md b/README.md index b826025c6..b2a8172c7 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,24 @@ -# Baritone for altoclef - -Please visit the 1.17.1 branch for updates +# Baritone

GitHub All Releases

- Minecraft - Minecraft - Minecraft - Minecraft - Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft

Build Status Release License - Codacy Badge + Codacy Badge Code of Conduct Known Vulnerabilities Contributions welcome @@ -51,20 +51,38 @@ A Minecraft pathfinder bot. [**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) -Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. [Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) +Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's +a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I +recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. -The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.2.15/baritone-api-forge-1.2.15.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. +[Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) -For 1.15.2, [click here](https://www.youtube.com/watch?v=j1qKtCZFURM) and see description. If you need Forge 1.15.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.5.3), follow the instructions, and get the `api-forge` jar. +The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The +second easiest way (for 1.12.2 only) is to install the v1.2.* `api-forge` jar +from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just +click [here](https://github.com/cabaletta/baritone/releases/download/v1.2.15/baritone-api-forge-1.2.15.jar)**. +Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on +how to use it. -For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. +For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric +1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` +jar. **For 1.16.5 Fabric, just +click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. -For 1.17.1 leijurv is too lazy to actually create a release so you can login to github and download the jars in the `artifacts` zip [here](https://github.com/cabaletta/baritone/actions/runs/1451572684) +If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get +the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just +click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**. -For 1.18.1 leijurv is too lazy to actually create a release so you can login to github and download the jars in the `artifacts` zip [here](https://github.com/cabaletta/baritone/actions/runs/1472825778) +If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get +the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just +click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For +1.18.2 Forge, just +click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), -the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 through 1.16.5. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). +the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and +particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) +than MineBot at calculating paths). Have committed at least once a day from Aug 1, 2018, to Aug 1, 2019. @@ -96,7 +114,7 @@ jar. Below is an example of basic usage for changing some settings, and then pathing to an X/Z goal. -``` +```java BaritoneAPI.getSettings().allowSprint.value = true; BaritoneAPI.getSettings().primaryTimeoutMS.value = 2000L; diff --git a/SETUP.md b/SETUP.md index 7a43faa62..eaadd1845 100644 --- a/SETUP.md +++ b/SETUP.md @@ -11,26 +11,38 @@ These releases are not always completely up to date with latest features, and ar Link to the releases page: [Releases](https://github.com/cabaletta/baritone/releases) -v1.2.* is for 1.12.2, v1.3.* is for 1.13.2, v1.4.* is for 1.14.4, v1.5.* is for 1.15.2, v1.6.* is for 1.16.2 or 1.16.4 or 1.16.5 (LOL) +v1.2.* is for 1.12.2, v1.3.* is for 1.13.2, v1.4.* is for 1.14.4, v1.5.* is for 1.15.2, v1.6.* is for 1.16.5, v1.7.* is +for 1.17.1, v1.8.* is for 1.18.1 -Any official release will be GPG signed by leijurv (44A3EA646EADAC6A). Please verify that the hash of the file you download is in `checksums.txt` and that `checksums_signed.asc` is a valid signature by that public keys of `checksums.txt`. +Any official release will be GPG signed by leijurv (44A3EA646EADAC6A). Please verify that the hash of the file you +download is in `checksums.txt` and that `checksums_signed.asc` is a valid signature by that public keys +of `checksums.txt`. -The build is fully deterministic and reproducible, and you can verify Travis did it properly by running `docker build --no-cache -t cabaletta/baritone .` yourself and comparing the shasum. This works identically on Travis, Mac, and Linux (if you have docker on Windows, I'd be grateful if you could let me know if it works there too). +The build is fully deterministic and reproducible, and you can verify Travis did it properly by +running `docker build --no-cache -t cabaletta/baritone .` yourself and comparing the shasum. This works identically on +Travis, Mac, and Linux (if you have docker on Windows, I'd be grateful if you could let me know if it works there too). ## Artifacts -Building Baritone will result in 5 artifacts created in the ``dist`` directory. These are the same as the artifacts created in the [releases](https://github.com/cabaletta/baritone/releases). +Building Baritone will result in 5 artifacts created in the ``dist`` directory. These are the same as the artifacts +created in the [releases](https://github.com/cabaletta/baritone/releases). -**The Forge release can simply be added as a Forge mod.** +**The Forge and Fabric releases can simply be added as a Forge/Fabric mods.** -If another one of your Forge mods has a Baritone integration, you want `baritone-api-forge-VERSION.jar`. Otherwise, you want `baritone-standalone-forge-VERSION.jar` +If another one of your Forge mods has a Baritone integration, you want `baritone-api-forge-VERSION.jar`. Otherwise, you +want `baritone-standalone-forge-VERSION.jar` -- **API**: Only the non-api packages are obfuscated. This should be used in environments where other mods would like to use Baritone's features. -- **Forge API**: Same as API, but packaged for Forge. This should be used where another mod has a Baritone integration. -- **Standalone**: Everything is obfuscated. This should be used in environments where there are no other mods present that would like to use Baritone's features. -- **Forge Standalone**: Same as Standalone, but packaged for Forge. This should be used when Baritone is your only Forge mod, or none of your other Forge mods integrate with Baritone. +- **API**: Only the non-api packages are obfuscated. This should be used in environments where other mods would like to + use Baritone's features. +- **Forge/Fabric API**: Same as API, but packaged for Forge/Fabric. This should be used where another mod has a Baritone + integration. +- **Standalone**: Everything is obfuscated. This should be used in environments where there are no other mods present + that would like to use Baritone's features. +- **Forge/Fabric Standalone**: Same as Standalone, but packaged for Forge/Fabric. This should be used when Baritone is + your only Forge/Fabric mod, or none of your other Forge/Fabric mods integrate with Baritone. - **Unoptimized**: Nothing is obfuscated. This shouldn't be used ever in production. +- **Forge/Fabric Unoptimized**: Same as Unoptimized, but packaged for Forge/Fabric. ## Build it yourself - Clone or download Baritone @@ -40,15 +52,18 @@ If another one of your Forge mods has a Baritone integration, you want `baritone - Follow one of the instruction sets below, based on your preference ## Command Line + On Mac OSX and Linux, use `./gradlew` instead of `gradlew`. -If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8. +If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 +for 1.12.2-1.16.5, JDK 16 for 1.17.1, and JDK 17 for 1.18.1. -To check which java you are using do +To check which java you are using do `java -version` in a command prompt or terminal. -If you are using anything above OpenJDK 8, it might not work because the Java distributions above JDK 8 using may not have the needed javax classes. +If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work because the Java distributions above JDK +8 using may not have the needed javax classes. -Open JDK 8 download: https://openjdk.java.net/install/ +Open JDK download: https://openjdk.java.net/install/ #### macOS guide In order to get JDK 8, Try running the following command: `% /usr/libexec/java_home -V` @@ -72,7 +87,7 @@ $ gradlew setupDecompWorkspace $ gradlew --refresh-dependencies ``` -Building Baritone: +Building Baritone: ``` $ gradlew build @@ -84,6 +99,12 @@ For minecraft 1.15.2+, run the following instead to include the Forge jars: $ gradlew build -Pbaritone.forge_build ``` +Do this instead for Fabric jars: + +``` +$ gradlew build -Pbaritone.fabric_build +``` + Running Baritone: ``` diff --git a/USAGE.md b/USAGE.md index f896ad012..08d085616 100644 --- a/USAGE.md +++ b/USAGE.md @@ -30,32 +30,63 @@ Watch this [showcase video](https://youtu.be/CZkLXWo4Fg4)! `help` -To toggle a boolean setting, just say its name in chat (for example saying `allowBreak` toggles whether Baritone will consider breaking blocks). For a numeric setting, say its name then the new value (like `primaryTimeoutMS 250`). It's case insensitive. To reset a setting to its default value, say `acceptableThrowawayItems reset`. To reset all settings, say `reset`. To see all settings that have been modified from their default values, say `modified`. +To toggle a boolean setting, just say its name in chat (for example saying `allowBreak` toggles whether Baritone will +consider breaking blocks). For a numeric setting, say its name then the new value (like `primaryTimeoutMS 250`). It's +case insensitive. To reset a setting to its default value, say `acceptableThrowawayItems reset`. To reset all settings, +say `reset`. To see all settings that have been modified from their default values, say `modified`. + +Commands in Baritone: -Some common examples: - `thisway 1000` then `path` to go in the direction you're facing for a thousand blocks - `goal x y z` or `goal x z` or `goal y`, then `path` to set a goal to a certain coordinate then path to it - `goto x y z` or `goto x z` or `goto y` to go to a certain coordinate (in a single step, starts going immediately) - `goal` to set the goal to your player's feet - `goal clear` to clear the goal -- `cancel` or `stop` to stop everything -- `goto portal` or `goto ender_chest` or `goto block_type` to go to a block. (in Impact, `.goto` is an alias for `.b goto` for the most part) -- `mine diamond_ore iron_ore` to mine diamond ore or iron ore (turn on the setting `legitMine` to only mine ores that it can actually see. It will explore randomly around y=11 until it finds them.) An amount of blocks can also be specified, for example, `mine 64 diamond_ore`. -- `click` to click your destination on the screen. Right click path to on top of the block, left click to path into it (either at foot level or eye level), and left click and drag to select an area (`#help sel` to see what you can do with that selection). -- `follow player playerName` to follow a player. `follow players` to follow any players in range (combine with Kill Aura for a fun time). `follow entities` to follow any entities. `follow entity pig` to follow entities of a specific type. -- `wp` for waypoints. A "tag" is like "home" (created automatically on right clicking a bed) or "death" (created automatically on death) or "user" (has to be created manually). So you might want `#wp save user coolbiome`, then to set the goal `#wp goal coolbiome` then `#path` to path to it. For death, `#wp goal death` will list waypoints under the "death" tag (remember stuff is clickable!) -- `build` to build a schematic. `build blah.schematic` will load `schematics/blah.schematic` and build it with the origin being your player feet. `build blah.schematic x y z` to set the origin. Any of those can be relative to your player (`~ 69 ~-420` would build at x=player x, y=69, z=player z-420). +- `cancel` or `stop` to stop everything, `forcecancel` is also an option +- `goto portal` or `goto ender_chest` or `goto block_type` to go to a block. (in Impact, `.goto` is an alias + for `.b goto` for the most part) +- `mine diamond_ore iron_ore` to mine diamond ore or iron ore (turn on the setting `legitMine` to only mine ores that it + can actually see. It will explore randomly around y=11 until it finds them.) An amount of blocks can also be + specified, for example, `mine 64 diamond_ore`. +- `click` to click your destination on the screen. Right click path to on top of the block, left click to path into it ( + either at foot level or eye level), and left click and drag to select an area (`#help sel` to see what you can do with + that selection). +- `follow player playerName` to follow a player. `follow players` to follow any players in range (combine with Kill Aura + for a fun time). `follow entities` to follow any entities. `follow entity pig` to follow entities of a specific type. +- `wp` for waypoints. A "tag" is like "home" (created automatically on right clicking a bed) or "death" (created + automatically on death) or "user" (has to be created manually). So you might want `#wp save user coolbiome`, then to + set the goal `#wp goal coolbiome` then `#path` to path to it. For death, `#wp goal death` will list waypoints under + the "death" tag (remember stuff is clickable!) +- `build` to build a schematic. `build blah.schematic` will load `schematics/blah.schematic` and build it with the + origin being your player feet. `build blah.schematic x y z` to set the origin. Any of those can be relative to your + player (`~ 69 ~-420` would build at x=player x, y=69, z=player z-420). - `schematica` to build the schematic that is currently open in schematica -- `tunnel` to dig and make a tunnel, 1x2. It will only deviate from the straight line if necessary such as to avoid lava. For a dumber tunnel that is really just cleararea, you can `tunnel 3 2 100`, to clear an area 3 high, 2 wide, and 100 deep. -- `farm` to automatically harvest, replant, or bone meal crops. Use `farm ` or `farm ` to limit the max distance from the starting point or a waypoint. +- `tunnel` to dig and make a tunnel, 1x2. It will only deviate from the straight line if necessary such as to avoid + lava. For a dumber tunnel that is really just cleararea, you can `tunnel 3 2 100`, to clear an area 3 high, 2 wide, + and 100 deep. +- `farm` to automatically harvest, replant, or bone meal crops. Use `farm ` or `farm ` to limit + the max distance from the starting point or a waypoint. - `axis` to go to an axis or diagonal axis at y=120 (`axisHeight` is a configurable setting, defaults to 120). -- `explore x z` to explore the world from the origin of x,z. Leave out x and z to default to player feet. This will continually path towards the closest chunk to the origin that it's never seen before. `explorefilter filter.json` with optional invert can be used to load in a list of chunks to load. -- `invert` to invert the current goal and path. This gets as far away from it as possible, instead of as close as possible. For example, do `goal` then `invert` to run as far as possible from where you're standing at the start. +- `explore x z` to explore the world from the origin of x,z. Leave out x and z to default to player feet. This will + continually path towards the closest chunk to the origin that it's never seen before. `explorefilter filter.json` with + optional invert can be used to load in a list of chunks to load. +- `invert` to invert the current goal and path. This gets as far away from it as possible, instead of as close as + possible. For example, do `goal` then `invert` to run as far as possible from where you're standing at the start. +- `come` tells Baritone to head towards your camera, useful when freecam doesn't move your player position. +- `blacklist` will stop baritone from going to the closest block so it won't attempt to get to it. +- `eta` to get information about the estimated time until the next segment and the goal, be aware that the ETA to your + goal is really unprecise. +- `proc` to view miscellaneous information about the process currently controlling Baritone. +- `repack` to re-cache the chunks around you. +- `gc` to call `System.gc()` which may free up some memory. +- `render` to fix glitched chunk rendering without having to reload all of them. +- `reloadall` to reload Baritone's world cache or `saveall` to save Baritone's world cache. +- `find` to search through Baritone's cache and attempt to find the location of the block. +- `surface` or `top` to tell Baritone to head towards the closest surface-like area, this can be the surface or highest + available air space. - `version` to get the version of Baritone you're running - `damn` daniel -For the rest of the commands, you can take a look at the code [here](https://baritone.leijurv.com/baritone/api/Settings.html). - All the settings and documentation are here. If you find HTML easier to read than Javadoc, you can look here. There are about a hundred settings, but here are some fun / interesting / important ones that you might want to look at changing in normal usage of Baritone. The documentation for each can be found at the above links. diff --git a/build.gradle b/build.gradle index b922fc900..5ebe15fec 100755 --- a/build.gradle +++ b/build.gradle @@ -15,155 +15,74 @@ * along with Baritone. If not, see . */ -group 'baritone' -version '1.2.15' - buildscript { - repositories { - maven { - name = 'forge' - url = 'http://files.minecraftforge.net/maven' - } - maven { - name = 'SpongePowered' - url = 'https://repo.spongepowered.org/repository/maven-public/' - } - jcenter() - } - dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' - classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT' - } -} - - -import baritone.gradle.task.CreateDistTask -import baritone.gradle.task.ProguardTask - -apply plugin: 'java' -apply plugin: 'maven' -apply plugin: 'net.minecraftforge.gradle.tweaker-client' -apply plugin: 'org.spongepowered.mixin' - -sourceCompatibility = targetCompatibility = '1.8' -compileJava { - sourceCompatibility = targetCompatibility = '1.8' - options.encoding = "UTF-8" // allow emoji in comments :^) -} - -sourceSets { - launch { - compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output - } - - schematica_api { - compileClasspath += main.compileClasspath - } - - main { - compileClasspath += schematica_api.output + classpath "org.ow2.asm:asm:9.3" } } -minecraft { - version = '1.12.2' - mappings = 'stable_39' - tweakClass = 'baritone.launch.BaritoneTweaker' - runDir = 'run' - - // The sources jar should use SRG names not MCP to ensure compatibility with all mappings - makeObfSourceJar = true +plugins { + id "architectury-plugin" version "3.4.135" + id 'dev.architectury.loom' version '0.12.0.282' apply false } -repositories { - mavenCentral() +subprojects { + apply plugin: 'java' + apply plugin: "maven-publish" + apply plugin: "dev.architectury.loom" - maven { - name = 'spongepowered-repo' - url = 'https://repo.spongepowered.org/repository/maven-public/' - } + archivesBaseName = rootProject.archives_base_name + version = rootProject.mod_version + group = rootProject.maven_group - maven { - name = 'impactdevelopment-repo' - url = 'https://impactdevelopment.github.io/maven/' - } -} + sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17 -dependencies { - runtime launchCompile('com.github.ImpactDevelopment:SimpleTweaker:1.2') - runtime launchCompile('org.spongepowered:mixin:0.7.11-SNAPSHOT') { - // Mixin includes a lot of dependencies that are too up-to-date - exclude module: 'launchwrapper' - exclude module: 'guava' - exclude module: 'gson' - exclude module: 'commons-io' - exclude module: 'log4j-core' + loom { + silentMojangMappingsLicense() } - testImplementation 'junit:junit:4.12' -} -mixin { - defaultObfuscationEnv searge - add sourceSets.launch, 'mixins.baritone.refmap.json' -} - -javadoc { - options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error - options.linkSource true - options.encoding "UTF-8" // allow emoji in comments :^) - source = sourceSets.api.allJava - classpath += sourceSets.api.compileClasspath -} - -jar { - from sourceSets.launch.output, sourceSets.api.output - - if (!getProject().hasProperty("baritone.forge_build")) { - exclude "**/BaritoneForgeModXD.class" - exclude "**/mods.toml" + dependencies { + minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" + // The following line declares the mojmap mappings, you may use other mappings as well + mappings loom.officialMojangMappings() + // The following line declares the yarn mappings you may select this one as well. + // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" } - preserveFileTimestamps = false - reproducibleFileOrder = true - - manifest { - attributes( - 'MixinConfigs': 'mixins.baritone.json', + tasks.withType(JavaCompile).configureEach { + it.options.encoding = "UTF-8" - 'Implementation-Title': 'Baritone', - 'Implementation-Version': version - ) + def targetVersion = 17 + if (JavaVersion.current().isJava9Compatible()) { + it.options.release = targetVersion + } } } -task proguard(type: ProguardTask) { - url 'https://downloads.sourceforge.net/project/proguard/proguard/6.0/proguard6.0.3.zip' - extract 'proguard6.0.3/lib/proguard.jar' -} - -task createDist(type: CreateDistTask, dependsOn: proguard) +allprojects { + apply plugin: "architectury-plugin" -build.finalizedBy(createDist) - -install { - def jarApiName = String.format("%s-api-%s", rootProject.name, version.toString()) - def jarApiForgeName = String.format("%s-api-forge-%s", rootProject.name, version.toString()) - def jarSAName = String.format("%s-standalone-%s", rootProject.name, version.toString()) - def jarSAForgeName = String.format("%s-standalone-forge-%s", rootProject.name, version.toString()) - - artifacts { - archives file("$buildDir/libs/"+jarApiName+".jar") - archives file("$buildDir/libs/"+jarApiForgeName+".jar") - archives file("$buildDir/libs/"+jarSAName+".jar") - archives file("$buildDir/libs/"+jarSAForgeName+".jar") - } - repositories.mavenInstaller { - addFilter('api') { artifact, file -> artifact.name == "baritone-api" } - addFilter('api-forge') { artifact, file -> artifact.name == "baritone-api-forge" } - addFilter('standalone') { artifact, file -> artifact.name == "baritone-standalone" } - addFilter('standalone-forge') { artifact, file -> artifact.name == "baritone-standalone-forge" } + repositories { + maven { + name = 'spongepowered-repo' + url = 'https://repo.spongepowered.org/repository/maven-public/' + } + maven { + name = 'impactdevelopment-repo' + url = 'https://impactdevelopment.github.io/maven/' + } + maven { + name = "ldtteam" + url = "https://maven.parchmentmc.net/" + } + // for the newer version of launchwrapper + maven { + name = "multimc-maven" + url = "https://files.multimc.org/maven/" + metadataSources { + artifact() + } + } + mavenCentral() } -} - -install.dependsOn(build) +} \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 2ac49af0f..8ab0f7014 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -20,6 +20,6 @@ repositories { } dependencies { - compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5' - compile group: 'commons-io', name: 'commons-io', version: '2.6' + implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' + implementation group: 'commons-io', name: 'commons-io', version: '2.6' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 7e26dac11..be8c98aed 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -20,6 +20,7 @@ import org.gradle.api.DefaultTask; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; @@ -32,45 +33,46 @@ class BaritoneGradleTask extends DefaultTask { protected static final String - PROGUARD_ZIP = "proguard.zip", - PROGUARD_JAR = "proguard.jar", - PROGUARD_CONFIG_TEMPLATE = "scripts/proguard.pro", - PROGUARD_CONFIG_DEST = "template.pro", - PROGUARD_API_CONFIG = "api.pro", - PROGUARD_STANDALONE_CONFIG = "standalone.pro", - PROGUARD_EXPORT_PATH = "proguard_out.jar", - - TEMP_LIBRARY_DIR = "tempLibraries/", - - ARTIFACT_STANDARD = "%s-%s.jar", - ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", - ARTIFACT_API = "%s-api-%s.jar", - ARTIFACT_STANDALONE = "%s-standalone-%s.jar", - ARTIFACT_FORGE_API = "%s-api-forge-%s.jar", - ARTIFACT_FORGE_STANDALONE = "%s-standalone-forge-%s.jar"; + PROGUARD_ZIP = "proguard.zip", + PROGUARD_JAR = "proguard.jar", + PROGUARD_CONFIG_TEMPLATE = "scripts/proguard.pro", + PROGUARD_CONFIG_DEST = "template.pro", + PROGUARD_API_CONFIG = "api.pro", + PROGUARD_STANDALONE_CONFIG = "standalone.pro", + PROGUARD_EXPORT_PATH = "proguard_out.jar", + PROGUARD_MAPPING_DIR = "mapping", + + ARTIFACT_STANDARD = "%s-%s.jar", + ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", + ARTIFACT_API = "%s-api-%s.jar", + ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; protected String artifactName, artifactVersion; - protected Path artifactPath, artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, artifactForgeApiPath, artifactForgeStandalonePath, proguardOut; + protected final Path + artifactPath, + artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, // these are different for forge builds + proguardOut; - protected void verifyArtifacts() throws IllegalStateException { - this.artifactName = getProject().getName(); + public BaritoneGradleTask() { + this.artifactName = getProject().getProperties().get("archivesBaseName").toString(); this.artifactVersion = getProject().getVersion().toString(); - this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); - this.artifactForgeApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); - this.artifactForgeStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_STANDALONE)); + this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); + + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); + } + protected void verifyArtifacts() throws IllegalStateException { if (!Files.exists(this.artifactPath)) { - throw new IllegalStateException("Artifact not found! Run build first!"); + throw new IllegalStateException("Artifact not found! Run build first! Missing file: " + this.artifactPath); } } - protected void write(InputStream stream, Path file) throws Exception { + protected void write(InputStream stream, Path file) throws IOException { if (Files.exists(file)) { Files.delete(file); } @@ -82,7 +84,11 @@ protected String formatVersion(String string) { } protected Path getRelativeFile(String file) { - return Paths.get(new File(file).getAbsolutePath()); + return Paths.get(new File(getProject().getBuildDir(), file).getAbsolutePath()); + } + + protected Path getRootRelativeFile(String file) { + return Paths.get(new File(getProject().getRootDir(), file).getAbsolutePath()); } protected Path getTemporaryFile(String file) { @@ -90,6 +96,6 @@ protected Path getTemporaryFile(String file) { } protected Path getBuildFile(String file) { - return getRelativeFile("build/libs/" + file); + return getRelativeFile("libs/" + file); } } diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 3ca935d16..53ee4429b 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -19,13 +19,12 @@ import org.gradle.api.tasks.TaskAction; -import javax.xml.bind.DatatypeConverter; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.security.MessageDigest; import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; @@ -37,50 +36,64 @@ public class CreateDistTask extends BaritoneGradleTask { private static MessageDigest SHA1_DIGEST; + private static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII); + + private static String getFileName(Path p) { + return p.getFileName().toString(); + } + + private static synchronized String sha1(Path path) { + try { + if (SHA1_DIGEST == null) { + SHA1_DIGEST = MessageDigest.getInstance("SHA-1"); + } + return bytesToHex(SHA1_DIGEST.digest(Files.readAllBytes(path))).toLowerCase(); + } catch (Exception e) { + // haha no thanks + throw new IllegalStateException(e); + } + } + + public static String bytesToHex(byte[] bytes) { + byte[] hexChars = new byte[bytes.length * 2]; + for (int j = 0; j < bytes.length; j++) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = HEX_ARRAY[v >>> 4]; + hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; + } + return new String(hexChars, StandardCharsets.UTF_8); + } + @TaskAction protected void exec() throws Exception { super.verifyArtifacts(); // Define the distribution file paths - Path api = getRelativeFile("dist/" + formatVersion(ARTIFACT_API)); - Path standalone = getRelativeFile("dist/" + formatVersion(ARTIFACT_STANDALONE)); - Path unoptimized = getRelativeFile("dist/" + formatVersion(ARTIFACT_UNOPTIMIZED)); - Path forgeApi = getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_API)); - Path forgeStandalone = getRelativeFile("dist/" + formatVersion(ARTIFACT_FORGE_STANDALONE)); + Path api = getRootRelativeFile("dist/" + getFileName(artifactApiPath)); + Path standalone = getRootRelativeFile("dist/" + getFileName(artifactStandalonePath)); + Path unoptimized = getRootRelativeFile("dist/" + getFileName(artifactUnoptimizedPath)); // NIO will not automatically create directories - Path dir = getRelativeFile("dist/"); + Path dir = getRootRelativeFile("dist/"); if (!Files.exists(dir)) { Files.createDirectory(dir); } // Copy build jars to dist/ - Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); - Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); - Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); - Files.copy(this.artifactForgeApiPath, forgeApi, REPLACE_EXISTING); - Files.copy(this.artifactForgeStandalonePath, forgeStandalone, REPLACE_EXISTING); + // TODO: dont copy files that dont exist + Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); + Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); + Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); // Calculate all checksums and format them like "shasum" - List shasum = Stream.of(api, forgeApi, standalone, forgeStandalone, unoptimized) + List shasum = Files.list(getRootRelativeFile("dist/")) + .filter(e -> e.getFileName().toString().endsWith(".jar")) .map(path -> sha1(path) + " " + path.getFileName().toString()) .collect(Collectors.toList()); shasum.forEach(System.out::println); // Write the checksums to a file - Files.write(getRelativeFile("dist/checksums.txt"), shasum); - } - - private static synchronized String sha1(Path path) { - try { - if (SHA1_DIGEST == null) { - SHA1_DIGEST = MessageDigest.getInstance("SHA-1"); - } - return DatatypeConverter.printHexBinary(SHA1_DIGEST.digest(Files.readAllBytes(path))).toLowerCase(); - } catch (Exception e) { - // haha no thanks - throw new IllegalStateException(e); - } + Files.write(getRootRelativeFile("dist/checksums.txt"), shasum); } } diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 01e561775..37404d65e 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -18,34 +18,21 @@ package baritone.gradle.task; import baritone.gradle.util.Determinizer; -import baritone.gradle.util.MappingType; -import baritone.gradle.util.ReobfWrapper; -import org.apache.commons.io.IOUtils; -import org.gradle.api.JavaVersion; -import org.gradle.api.NamedDomainObjectContainer; -import org.gradle.api.artifacts.Configuration; -import org.gradle.api.artifacts.Dependency; -import org.gradle.api.internal.file.IdentityFileResolver; -import org.gradle.api.internal.plugins.DefaultConvention; +import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskCollection; import org.gradle.api.tasks.compile.ForkOptions; import org.gradle.api.tasks.compile.JavaCompile; -import org.gradle.internal.Pair; import org.gradle.internal.jvm.Jvm; -import org.gradle.internal.jvm.inspection.DefaultJvmVersionDetector; -import org.gradle.process.internal.DefaultExecActionFactory; import java.io.*; -import java.lang.reflect.Field; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -57,17 +44,26 @@ */ public class ProguardTask extends BaritoneGradleTask { - private static final Pattern TEMP_LIBRARY_PATTERN = Pattern.compile("-libraryjars 'tempLibraries\\/([a-zA-Z0-9/_\\-\\.]+)\\.jar'"); - @Input private String url; + @Input + private String compType; + @Input private String extract; - private List requiredLibraries; + public String getUrl() { + return url; + } - private File mixin; + public String getExtract() { + return extract; + } + + public String getCompType() { + return compType; + } @TaskAction protected void exec() throws Exception { @@ -78,18 +74,38 @@ protected void exec() throws Exception { downloadProguard(); extractProguard(); generateConfigs(); - acquireDependencies(); proguardApi(); proguardStandalone(); cleanup(); } - private void processArtifact() throws Exception { - if (Files.exists(this.artifactUnoptimizedPath)) { - Files.delete(this.artifactUnoptimizedPath); - } + public void setCompType(String compType) { + this.compType = compType; + } + + private boolean isMcJar(File f) { + return f.getName().startsWith(compType.equals("FORGE") ? "forge-" : "minecraft-") && f.getName().contains("minecraft-merged-named"); + } - Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), Optional.empty()); + private File getMcJar() throws IOException { + File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() + .stream() + .filter(this::isMcJar) + .map(f -> { + switch (compType) { + case "OFFICIAL": + return new File(f.getParentFile().getParentFile(), "minecraft-merged.jar"); + case "FABRIC": + return new File(f.getParentFile().getParentFile(), "minecraft-merged-intermediary.jar"); + case "FORGE": + return new File(f.getParentFile().getParentFile(), f.getName().replace("-named.jar", "-srg.jar")); + } + return null; + }) + .findFirst() + .get(); + if (!mcClientJar.exists()) throw new IOException("Failed to find minecraft! " + mcClientJar.getAbsolutePath()); + return mcClientJar; } private void downloadProguard() throws Exception { @@ -191,198 +207,86 @@ public boolean accept(File dir, String name) { return null; } - private boolean validateJavaVersion(String java) { - final JavaVersion javaVersion = new DefaultJvmVersionDetector(new DefaultExecActionFactory(new IdentityFileResolver())).getJavaVersion(java); - - if (!javaVersion.getMajorVersion().equals("8")) { - System.out.println("Failed to validate Java version " + javaVersion.toString() + " [" + java + "] for ProGuard libraryjars"); - // throw new RuntimeException("Java version incorrect: " + javaVersion.getMajorVersion() + " for " + java); - return false; + private void processArtifact() throws Exception { + if (Files.exists(this.artifactUnoptimizedPath)) { + Files.delete(this.artifactUnoptimizedPath); } - System.out.println("Validated Java version " + javaVersion.toString() + " [" + java + "] for ProGuard libraryjars"); + Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString()); + } + + private boolean validateJavaVersion(String java) { + //TODO: fix for j16 +// final JavaVersion javaVersion = new DefaultJvmVersionDetector(new DefaultExecActionFactory(new IdentityFileResolver())).getJavaVersion(java); +// +// if (!javaVersion.getMajorVersion().equals("8")) { +// System.out.println("Failed to validate Java version " + javaVersion.toString() + " [" + java + "] for ProGuard libraryjars"); +// // throw new RuntimeException("Java version incorrect: " + javaVersion.getMajorVersion() + " for " + java); +// return false; +// } +// +// System.out.println("Validated Java version " + javaVersion.toString() + " [" + java + "] for ProGuard libraryjars"); return true; } private void generateConfigs() throws Exception { - Files.copy(getRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), REPLACE_EXISTING); + Files.copy(getRootRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), REPLACE_EXISTING); // Setup the template that will be used to derive the API and Standalone configs List template = Files.readAllLines(getTemporaryFile(PROGUARD_CONFIG_DEST)); template.add(0, "-injars " + this.artifactPath.toString()); template.add(1, "-outjars " + this.getTemporaryFile(PROGUARD_EXPORT_PATH)); - // Acquire the RT jar using "java -verbose". This doesn't work on Java 9+ - Process p = new ProcessBuilder(this.getJavaBinPathForProguard(), "-verbose").start(); - String out = IOUtils.toString(p.getInputStream(), "UTF-8").split("\n")[0].split("Opened ")[1].replace("]", ""); - template.add(2, "-libraryjars '" + out + "'"); - - // API config doesn't require any changes from the changes that we made to the template - Files.write(getTemporaryFile(PROGUARD_API_CONFIG), template); - - // For the Standalone config, don't keep the API package - List standalone = new ArrayList<>(template); - standalone.removeIf(s -> s.contains("# this is the keep api")); - Files.write(getTemporaryFile(PROGUARD_STANDALONE_CONFIG), standalone); - - // Discover all of the libraries that we will need to acquire from gradle - this.requiredLibraries = new ArrayList<>(); - template.forEach(line -> { - if (!line.startsWith("#")) { - Matcher m = TEMP_LIBRARY_PATTERN.matcher(line); - if (m.find()) { - this.requiredLibraries.add(m.group(1)); - } - } - }); - } - - private void acquireDependencies() throws Exception { + template.add(2, "-libraryjars /jmods/java.base.jmod(!**.jar;!module-info.class)"); + template.add(3, "-libraryjars /jmods/java.desktop.jmod(!**.jar;!module-info.class)"); - // Create a map of all of the dependencies that we are able to access in this project - // Likely a better way to do this, I just pair the dependency with the first valid configuration - Map> dependencyLookupMap = new HashMap<>(); - getProject().getConfigurations().stream().filter(Configuration::isCanBeResolved).forEach(config -> - config.getAllDependencies().forEach(dependency -> - dependencyLookupMap.putIfAbsent(dependency.getName() + "-" + dependency.getVersion(), Pair.of(config, dependency)))); - - // Create the directory if it doesn't already exist - Path tempLibraries = getTemporaryFile(TEMP_LIBRARY_DIR); - if (!Files.exists(tempLibraries)) { - Files.createDirectory(tempLibraries); - } - - // Iterate the required libraries to copy them to tempLibraries - for (String lib : this.requiredLibraries) { - // copy from the forgegradle cache - if (lib.equals("minecraft")) { - Path cachedJar = getMinecraftJar(); - Path inTempDir = getTemporaryFile("tempLibraries/minecraft.jar"); - // TODO: maybe try not to copy every time - Files.copy(cachedJar, inTempDir, REPLACE_EXISTING); - - continue; - } - - // Find a configuration/dependency pair that matches the desired library - Pair pair = null; - for (Map.Entry> entry : dependencyLookupMap.entrySet()) { - if (entry.getKey().startsWith(lib)) { - pair = entry.getValue(); - } + { + final Stream libraries; + File mcJar; + try { + mcJar = getMcJar(); + } catch (Exception e) { + throw new RuntimeException("Failed to find Minecraft jar", e); } - // The pair must be non-null - Objects.requireNonNull(pair); + { + // Discover all of the libraries that we will need to acquire from gradle + final Stream dependencies = acquireDependencies() + // remove MCP mapped jar, and nashorn + .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")); - // Find the library jar file, and copy it to tempLibraries - for (File file : pair.getLeft().files(pair.getRight())) { - if (file.getName().startsWith(lib)) { - if (lib.contains("mixin")) { - mixin = file; - } - Files.copy(file.toPath(), getTemporaryFile("tempLibraries/" + lib + ".jar"), REPLACE_EXISTING); - } + libraries = dependencies + .map(f -> isMcJar(f) ? mcJar : f); } + libraries.forEach(f -> { + template.add(2, "-libraryjars '" + f + "'"); + }); } - if (mixin == null) { - throw new IllegalStateException("Unable to find mixin jar"); - } - } - - // a bunch of epic stuff to get the path to the cached jar - private Path getMinecraftJar() throws Exception { - MappingType mappingType; - try { - mappingType = getMappingType(); - } catch (Exception e) { - System.err.println("Failed to get mapping type, assuming NOTCH."); - mappingType = MappingType.NOTCH; - } - - String suffix; - switch (mappingType) { - case NOTCH: - suffix = ""; - break; - case SEARGE: - suffix = "-srgBin"; - break; - case CUSTOM: - throw new IllegalStateException("Custom mappings not supported!"); - default: - throw new IllegalStateException("Unknown mapping type: " + mappingType); - } - - DefaultConvention convention = (DefaultConvention) this.getProject().getConvention(); - Object extension = convention.getAsMap().get("minecraft"); - Objects.requireNonNull(extension); - - // for some reason cant use Class.forName - Class class_baseExtension = extension.getClass().getSuperclass().getSuperclass().getSuperclass(); // <-- cursed - Field f_replacer = class_baseExtension.getDeclaredField("replacer"); - f_replacer.setAccessible(true); - Object replacer = f_replacer.get(extension); - Class class_replacementProvider = replacer.getClass(); - Field replacement_replaceMap = class_replacementProvider.getDeclaredField("replaceMap"); - replacement_replaceMap.setAccessible(true); - - Map replacements = (Map) replacement_replaceMap.get(replacer); - String cacheDir = replacements.get("CACHE_DIR").toString() + "/net/minecraft"; - String mcVersion = replacements.get("MC_VERSION").toString(); - String mcpInsert = replacements.get("MAPPING_CHANNEL").toString() + "/" + replacements.get("MAPPING_VERSION").toString(); - String fullJarName = "minecraft-" + mcVersion + suffix + ".jar"; - - String baseDir = String.format("%s/minecraft/%s/", cacheDir, mcVersion); - - String jarPath; - if (mappingType == MappingType.SEARGE) { - jarPath = String.format("%s/%s/%s", baseDir, mcpInsert, fullJarName); - } else { - jarPath = baseDir + fullJarName; - } - jarPath = jarPath - .replace("/", File.separator) - .replace("\\", File.separator); // hecking regex - return new File(jarPath).toPath(); - } + Files.createDirectories(this.getRootRelativeFile(PROGUARD_MAPPING_DIR)); - // throws IllegalStateException if mapping type is ambiguous or it fails to find it - private MappingType getMappingType() { - // if it fails to find this then its probably a forgegradle version problem - Set reobf = (NamedDomainObjectContainer) this.getProject().getExtensions().getByName("reobf"); + List api = new ArrayList<>(template); + api.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + compType + "-api.txt")); - List mappingTypes = getUsedMappingTypes(reobf); - long mappingTypesUsed = mappingTypes.size(); - if (mappingTypesUsed == 0) { - throw new IllegalStateException("Failed to find mapping type (no jar task?)"); - } - if (mappingTypesUsed > 1) { - throw new IllegalStateException("Ambiguous mapping type (multiple jars with different mapping types?)"); - } + // API config doesn't require any changes from the changes that we made to the template + Files.write(getTemporaryFile(compType + PROGUARD_API_CONFIG), api); - return mappingTypes.get(0); + // For the Standalone config, don't keep the API package + List standalone = new ArrayList<>(template); + standalone.removeIf(s -> s.contains("# this is the keep api")); + standalone.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + compType + "-standalone.txt")); + Files.write(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG), standalone); } - private List getUsedMappingTypes(Set reobf) { - return reobf.stream() - .map(ReobfWrapper::new) - .map(ReobfWrapper::getMappingType) - .distinct() - .collect(Collectors.toList()); + private Stream acquireDependencies() { + return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() + .stream() + .filter(File::isFile); } private void proguardApi() throws Exception { - runProguard(getTemporaryFile(PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), Optional.empty()); - Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeApiPath.toString(), Optional.of(mixin)); - } - - private void proguardStandalone() throws Exception { - runProguard(getTemporaryFile(PROGUARD_STANDALONE_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), Optional.empty()); - Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeStandalonePath.toString(), Optional.of(mixin)); + runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); } private void cleanup() { @@ -399,6 +303,11 @@ public void setExtract(String extract) { this.extract = extract; } + private void proguardStandalone() throws Exception { + runProguard(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString()); + } + private void runProguard(Path config) throws Exception { // Delete the existing proguard output file. Proguard probably handles this already, but why not do it ourselves if (Files.exists(this.proguardOut)) { diff --git a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java index d9f475a5c..fc268cd35 100644 --- a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java +++ b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java @@ -22,7 +22,10 @@ import com.google.gson.stream.JsonWriter; import java.io.*; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; @@ -36,7 +39,7 @@ */ public class Determinizer { - public static void determinize(String inputPath, String outputPath, Optional toInclude) throws IOException { + public static void determinize(String inputPath, String outputPath) throws IOException { System.out.println("Running Determinizer"); System.out.println(" Input path: " + inputPath); System.out.println(" Output path: " + outputPath); @@ -63,30 +66,10 @@ public static void determinize(String inputPath, String outputPath, Optional. + */ + +import baritone.gradle.task.CreateDistTask +import baritone.gradle.task.ProguardTask + +plugins { + id "com.github.johnrengelman.shadow" version "7.0.0" + id "maven-publish" +} + +archivesBaseName = archivesBaseName + "-" + project.name + +architectury { + platformSetupLoomIde() + fabric() +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentFabric.extendsFrom common +} + +dependencies { + modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } +} + +processResources { + inputs.property "version", project.version + + filesMatching("fabric.mod.json") { + expand "version": project.version + } +} + +shadowJar { + configurations = [project.configurations.shadowCommon] + classifier "dev-shadow" +} + +remapJar { + input.set shadowJar.archiveFile + dependsOn shadowJar + classifier null +} + +jar { + classifier "dev" +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "FABRIC" +} + +task createDist(type: CreateDistTask, dependsOn: proguard) + +build.finalizedBy(createDist) + +publishing { + publications { + maven(MavenPublication) { + artifact '../dist/baritone-fabric-api-' + version + '.jar' + } + } + + repositories { + maven { + name = "meteor-maven" + url = "https://maven.meteordev.org/snapshots" + + credentials { + username = System.getenv("MAVEN_METEOR_ALIAS") + password = System.getenv("MAVEN_METEOR_TOKEN") + } + + authentication { + basic(BasicAuthentication) + } + } + } +} \ No newline at end of file diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json new file mode 100644 index 000000000..891d4d8cc --- /dev/null +++ b/fabric/src/main/resources/fabric.mod.json @@ -0,0 +1,31 @@ + +{ + "schemaVersion": 1, + "id": "baritone-meteor", + "version": "${version}", + + "name": "Baritone", + "description": "Google Maps for Blockgame", + "authors": [ + "leijurv", "Brady" + ], + "contact": { + "homepage": "https://github.com/cabaletta/baritone", + "sources": "https://github.com/cabaletta/baritone" + }, + + "license": "LGPL-3.0", + "icon": "assets/baritone/icon.png", + + "environment": "*", + "entrypoints": { + }, + "mixins": [ + "mixins.baritone-meteor.json" + ], + + "depends": { + "fabricloader": ">=0.11.0", + "minecraft": "1.19.2" + } +} \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle new file mode 100644 index 000000000..27371070e --- /dev/null +++ b/forge/build.gradle @@ -0,0 +1,117 @@ +/* + * 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 . + */ + +import baritone.gradle.task.CreateDistTask +import baritone.gradle.task.ProguardTask + +plugins { + id "com.github.johnrengelman.shadow" version "7.0.0" +} + +archivesBaseName = archivesBaseName + "-" + project.name + +architectury { + platformSetupLoomIde() + forge() +} + +loom { + forge { + mixinConfig 'mixins.baritone-meteor.json' + } +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentFabric.extendsFrom common +} + +dependencies { + forge "net.minecraftforge:forge:${rootProject.forge_version}" + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive false } +} + +processResources { + inputs.property "version", project.version + + filesMatching("fabric.mod.json") { + expand "version": project.version + } +} + +shadowJar { + exclude("fabric.mod.json") + + configurations = [project.configurations.shadowCommon] + classifier "dev-shadow" +} + +remapJar { + input.set shadowJar.archiveFile + dependsOn shadowJar + classifier null +} + +jar { + classifier "dev" + + manifest { + attributes( + 'MixinConfigs': 'mixins.baritone-meteor.json', + "MixinConnector": "baritone.launch.BaritoneMixinConnector", + + 'Implementation-Title': 'Baritone', + 'Implementation-Version': version, + ) + } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "FORGE" +} + +task createDist(type: CreateDistTask, dependsOn: proguard) + + +build.finalizedBy(createDist) + +publishing { + publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} \ No newline at end of file diff --git a/forge/gradle.properties b/forge/gradle.properties new file mode 100644 index 000000000..24befc474 --- /dev/null +++ b/forge/gradle.properties @@ -0,0 +1,18 @@ +# +# 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 . +# + +loom.platform=forge \ No newline at end of file diff --git a/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java b/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java new file mode 100644 index 000000000..db84d62e1 --- /dev/null +++ b/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java @@ -0,0 +1,22 @@ +/* + * 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;import net.minecraftforge.fml.common.Mod; + +@Mod("baritoe") +public class BaritoneForgeModXD { +} diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml new file mode 100644 index 000000000..1ad269fce --- /dev/null +++ b/forge/src/main/resources/META-INF/mods.toml @@ -0,0 +1,40 @@ +# This is an example mods.toml file. It contains the data relating to the loading mods. +# There are several mandatory fields (#mandatory), and many more that are optional (#optional). +# The overall format is standard TOML format, v0.5.0. +# Note that there are a couple of TOML lists in this file. +# Find more information on toml format here: https://github.com/toml-lang/toml +# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml +modLoader="javafml" #mandatory +# A version range to match for said mod loader - for regular FML @Mod it will be the forge version +loaderVersion="[33,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" +# A URL to refer people to when problems occur with this mod +issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional +# A list of mods - how many allowed here is determined by the individual mod loader +[[mods]] #mandatory +# The modid of the mod +modId="baritoe" #mandatory +# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it +version="${file.jarVersion}" #mandatory + # A display name for the mod +displayName="Baritone" #mandatory +# A URL for the "homepage" for this mod, displayed in the mod UI +displayURL="https://github.com/cabaletta/baritone" #optional +# A file name (in the root of the mod JAR) containing a logo for display +#logoFile="examplemod.png" #optional +# A text field displayed in the mod UI +credits="Hat Gamers" #optional +# A text field displayed in the mod UI +authors="leijurv, Brady" #optional +# The description text for the mod (multi line!) (#mandatory) +description=''' +A Minecraft pathfinder bot. +''' + +[[dependencies.baritoe]] +modId="minecraft" +mandatory=true +# This version range declares a minimum of the current minecraft version up to but not including the next major version +versionRange="[1.19.2]" +ordering="NONE" +side="BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 000000000..f9123edda --- /dev/null +++ b/gradle.properties @@ -0,0 +1,11 @@ +org.gradle.jvmargs=-Xmx4G + +mod_version=1.19.2-SNAPSHOT +maven_group=baritone +archives_base_name=baritone + +minecraft_version=1.19.2 +forge_version=1.19.2-43.0.0 +fabric_version=0.14.9 + +baritone.fabric_build=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 4c5670a158b8953b61fd441194873cac2c99930d..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f 100755 GIT binary patch literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM literal 54706 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 599a02b7a..84d1f85fd 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Jul 31 21:56:56 PDT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip diff --git a/gradlew b/gradlew index cccdd3d51..4f906e0c8 100755 --- a/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -66,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index f9553162f..107acd32c 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/jitpack.yml b/jitpack.yml new file mode 100644 index 000000000..8a6523f7e --- /dev/null +++ b/jitpack.yml @@ -0,0 +1,3 @@ +before_install: + - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh + - source install-jdk.sh --feature 17 \ No newline at end of file diff --git a/scripts/proguard.pro b/scripts/proguard.pro index f0aaa665b..4785ddeb0 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -1,5 +1,8 @@ +-keep class * + -keepattributes Signature -keepattributes *Annotation* +-keepattributes InnerClasses -optimizationpasses 5 -verbose @@ -14,7 +17,12 @@ # lwjgl is weird -dontwarn org.lwjgl.** +# also lwjgl lol +-dontwarn module-info +# we dont have forge +-dontwarn baritone.launch.BaritoneForgeModXD +# please do not change the comment below -keep class baritone.api.** { *; } # this is the keep api # service provider needs these class names @@ -22,6 +30,7 @@ -keep class baritone.api.IBaritoneProvider -keep class baritone.api.utils.MyChunkPos { *; } # even in standalone we need to keep this for gson reflect +-keepname class baritone.api.utils.BlockOptionalMeta # this name is exposed to the user, so we need to keep it in all builds # Keep any class or member annotated with @KeepName so we dont have to put everything in the script -keep,allowobfuscation @interface baritone.KeepName @@ -43,56 +52,6 @@ #proguard doesnt like it when it cant find our fake schematica classes -dontwarn baritone.utils.schematic.schematica.** -# copy all necessary libraries into tempLibraries to build - -# The correct jar will be copied from the forgegradle cache based on the mapping type being compiled with --libraryjars 'tempLibraries/minecraft.jar' - --libraryjars 'tempLibraries/SimpleTweaker-1.2.jar' - --libraryjars 'tempLibraries/authlib-1.5.25.jar' --libraryjars 'tempLibraries/codecjorbis-20101023.jar' --libraryjars 'tempLibraries/codecwav-20101023.jar' --libraryjars 'tempLibraries/commons-codec-1.10.jar' --libraryjars 'tempLibraries/commons-compress-1.8.1.jar' --libraryjars 'tempLibraries/commons-io-2.5.jar' --libraryjars 'tempLibraries/commons-lang3-3.5.jar' --libraryjars 'tempLibraries/commons-logging-1.1.3.jar' --libraryjars 'tempLibraries/fastutil-7.1.0.jar' --libraryjars 'tempLibraries/gson-2.8.0.jar' --libraryjars 'tempLibraries/guava-21.0.jar' --libraryjars 'tempLibraries/httpclient-4.3.3.jar' --libraryjars 'tempLibraries/httpcore-4.3.2.jar' --libraryjars 'tempLibraries/icu4j-core-mojang-51.2.jar' --libraryjars 'tempLibraries/jinput-2.0.5.jar' --libraryjars 'tempLibraries/jna-4.4.0.jar' --libraryjars 'tempLibraries/jopt-simple-5.0.3.jar' --libraryjars 'tempLibraries/jsr305-3.0.1.jar' --libraryjars 'tempLibraries/jutils-1.0.0.jar' --libraryjars 'tempLibraries/libraryjavasound-20101123.jar' --libraryjars 'tempLibraries/librarylwjglopenal-20100824.jar' --libraryjars 'tempLibraries/log4j-api-2.8.1.jar' --libraryjars 'tempLibraries/log4j-core-2.8.1.jar' - -# startsWith is used to check the library, and mac/linux differ in which version they use -# this is FINE --libraryjars 'tempLibraries/lwjgl-.jar' --libraryjars 'tempLibraries/lwjgl_util-.jar' - --libraryjars 'tempLibraries/netty-all-4.1.9.Final.jar' --libraryjars 'tempLibraries/oshi-core-1.1.jar' --libraryjars 'tempLibraries/patchy-1.3.9.jar' --libraryjars 'tempLibraries/platform-3.4.0.jar' --libraryjars 'tempLibraries/realms-1.10.22.jar' --libraryjars 'tempLibraries/soundsystem-20120107.jar' --libraryjars 'tempLibraries/text2speech-1.10.3.jar' - --libraryjars 'tempLibraries/mixin-0.7.11-SNAPSHOT.jar' --libraryjars 'tempLibraries/launchwrapper-1.11.jar' # TODO why does only 1.11.jar exist? - - - - # Keep - Applications. Keep all application classes, along with their 'main' # methods. -keepclasseswithmembers public class * { @@ -381,5 +340,3 @@ public java.lang.String substring(int); public java.lang.String substring(int,int); } - --printmapping mapping.txt diff --git a/settings.gradle b/settings.gradle index 567f84110..446a41f4c 100755 --- a/settings.gradle +++ b/settings.gradle @@ -15,5 +15,38 @@ * along with Baritone. If not, see . */ +pluginManagement { + repositories { + maven { url "https://maven.architectury.dev/" } + maven { + url = 'https://maven.fabricmc.net/' + } + maven { + name = 'forge' + url = 'https://files.minecraftforge.net/maven' + } + maven { + name = 'impactdevelopment-repo' + url = 'https://impactdevelopment.github.io/maven/' + } + maven { + url = 'https://www.dogforce-games.com/maven/' + } + maven { + url = 'https://libraries.minecraft.net/' + } + mavenCentral() + gradlePluginPortal() + } +} + rootProject.name = 'baritone' +include("common") +include("tweaker") +if (System.getProperty("Baritone.enabled_platforms") == null) { + System.setProperty("Baritone.enabled_platforms", "fabric,") +} +for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { + include(platform) +} diff --git a/src/api/java/baritone/api/BaritoneAPI.java b/src/api/java/baritone/api/BaritoneAPI.java index 53937bd80..4a87449cd 100644 --- a/src/api/java/baritone/api/BaritoneAPI.java +++ b/src/api/java/baritone/api/BaritoneAPI.java @@ -19,9 +19,6 @@ import baritone.api.utils.SettingsUtil; -import java.util.Iterator; -import java.util.ServiceLoader; - /** * Exposes the {@link IBaritoneProvider} instance and the {@link Settings} instance for API usage. * @@ -37,9 +34,11 @@ public final class BaritoneAPI { settings = new Settings(); SettingsUtil.readAndApply(settings); - ServiceLoader baritoneLoader = ServiceLoader.load(IBaritoneProvider.class); - Iterator instances = baritoneLoader.iterator(); - provider = instances.next(); + try { + provider = (IBaritoneProvider) Class.forName("baritone.BaritoneProvider").newInstance(); + } catch (ReflectiveOperationException ex) { + throw new RuntimeException(ex); + } } public static IBaritoneProvider getProvider() { diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 84a8abbbd..3fdd8de8b 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -21,7 +21,7 @@ import baritone.api.command.ICommand; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.player.LocalPlayer; import java.util.List; import java.util.Objects; @@ -47,19 +47,19 @@ public interface IBaritoneProvider { * returned by {@link #getPrimaryBaritone()}. * * @return All active {@link IBaritone} instances. - * @see #getBaritoneForPlayer(EntityPlayerSP) + * @see #getBaritoneForPlayer(LocalPlayer) */ List getAllBaritones(); /** - * Provides the {@link IBaritone} instance for a given {@link EntityPlayerSP}. This will likely be + * Provides the {@link IBaritone} instance for a given {@link LocalPlayer}. This will likely be * replaced with or be overloaded in addition to {@code #getBaritoneForUser(IBaritoneUser)} when * {@code bot-system} is merged into {@code master}. * * @param player The player * @return The {@link IBaritone} instance. */ - default IBaritone getBaritoneForPlayer(EntityPlayerSP player) { + default IBaritone getBaritoneForPlayer(LocalPlayer player) { for (IBaritone baritone : getAllBaritones()) { if (Objects.equals(player, baritone.getPlayerContext().player())) { return baritone; diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 554853716..12e41f7c0 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -21,12 +21,12 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.TypeUtils; import baritone.api.utils.gui.BaritoneToast; -import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.util.math.Vec3i; -import net.minecraft.util.text.ITextComponent; +import net.minecraft.core.Vec3i; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import java.awt.*; import java.lang.reflect.Field; @@ -34,8 +34,8 @@ import java.lang.reflect.Type; import java.util.List; import java.util.*; -import java.util.function.Consumer; import java.util.function.BiConsumer; +import java.util.function.Consumer; /** * Baritone's settings. Settings apply to all Baritone instances. @@ -49,6 +49,11 @@ public final class Settings { */ public final Setting allowBreak = new Setting<>(true); + /** + * Blocks that baritone will be allowed to break even with allowBreak set to false + */ + public final Setting> allowBreakAnyway = new Setting<>(new ArrayList<>()); + /** * Allow Baritone to sprint */ @@ -174,10 +179,10 @@ public final class Settings { * Blocks that Baritone is allowed to place (as throwaway, for sneak bridging, pillaring, etc.) */ public final Setting> acceptableThrowawayItems = new Setting<>(new ArrayList<>(Arrays.asList( - Item.getItemFromBlock(Blocks.DIRT), - Item.getItemFromBlock(Blocks.COBBLESTONE), - Item.getItemFromBlock(Blocks.NETHERRACK), - Item.getItemFromBlock(Blocks.STONE) + Blocks.DIRT.asItem(), + Blocks.COBBLESTONE.asItem(), + Blocks.NETHERRACK.asItem(), + Blocks.STONE.asItem() ))); /** @@ -200,11 +205,8 @@ public final class Settings { public final Setting> blocksToAvoidBreaking = new Setting<>(new ArrayList<>(Arrays.asList( // TODO can this be a HashSet or ImmutableSet? Blocks.CRAFTING_TABLE, Blocks.FURNACE, - Blocks.LIT_FURNACE, Blocks.CHEST, - Blocks.TRAPPED_CHEST, - Blocks.STANDING_SIGN, - Blocks.WALL_SIGN + Blocks.TRAPPED_CHEST ))); /** @@ -234,6 +236,8 @@ public final class Settings { * A mapping of blocks to blocks treated as correct in their position *

* If a schematic asks for a block on this mapping, all blocks on the mapped list will be accepted at that location as well + *

+ * Syntax same as buildSubstitutes */ public final Setting>> buildValidSubstitutes = new Setting<>(new HashMap<>()); @@ -241,6 +245,15 @@ public final class Settings { * A mapping of blocks to blocks to be built instead *

* If a schematic asks for a block on this mapping, Baritone will place the first placeable block in the mapped list + *

+ * Usage Syntax: + *

+     *      sourceblockA->blockToSubstituteA1,blockToSubstituteA2,...blockToSubstituteAN,sourceBlockB->blockToSubstituteB1,blockToSubstituteB2,...blockToSubstituteBN,...sourceBlockX->blockToSubstituteX1,blockToSubstituteX2...blockToSubstituteXN
+     * 
+ * Example: + *
+     *     stone->cobblestone,andesite,oak_planks->birch_planks,acacia_planks,glass
+     * 
*/ public final Setting>> buildSubstitutes = new Setting<>(new HashMap<>()); @@ -327,6 +340,11 @@ public final class Settings { */ public final Setting rightClickSpeed = new Setting<>(4); + /** + * How many degrees to randomize the yaw every tick. Set to 0 to disable + */ + public final Setting randomLooking113 = new Setting<>(2d); + /** * Block reach distance */ @@ -385,6 +403,9 @@ public final class Settings { */ public final Setting mobSpawnerAvoidanceCoefficient = new Setting<>(2.0); + /** + * Distance to avoid mob spawners. + */ public final Setting mobSpawnerAvoidanceRadius = new Setting<>(16); /** @@ -394,6 +415,9 @@ public final class Settings { */ public final Setting mobAvoidanceCoefficient = new Setting<>(1.5); + /** + * Distance to avoid mobs. + */ public final Setting mobAvoidanceRadius = new Setting<>(8); /** @@ -544,6 +568,17 @@ public final class Settings { */ public final Setting slowPathTimeoutMS = new Setting<>(40000L); + + /** + * allows baritone to save bed waypoints when interacting with beds + */ + public final Setting doBedWaypoints = new Setting<>(true); + + /** + * allows baritone to save death waypoints + */ + public final Setting doDeathWaypoints = new Setting<>(true); + /** * The big one. Download all chunks in simplified 2-bit format and save them for better very-long-distance pathing. */ @@ -560,13 +595,6 @@ public final class Settings { */ public final Setting pruneRegionsFromRAM = new Setting<>(true); - /** - * Remember the contents of containers (chests, echests, furnaces) - *

- * Really buggy since the packet stuff is multithreaded badly thanks to brady - */ - public final Setting containerMemory = new Setting<>(false); - /** * Fill in blocks behind you */ @@ -593,7 +621,7 @@ public final class Settings { * Allow chat based control of Baritone. Most likely should be disabled when Baritone is imported for use in * something else */ - public final Setting chatControl = new Setting<>(true); + public final Setting chatControl = new Setting<>(false); /** * Some clients like Impact try to force chatControl to off, so here's a second setting to do it anyway @@ -799,6 +827,7 @@ public final class Settings { /** * Sets the minimum y level whilst mining - set to 0 to turn off. + * if world has negative y values, subtract the min world height to get the value to put here */ public final Setting minYLevelWhileMining = new Setting<>(0); @@ -1098,7 +1127,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ - public final Setting> logger = new Setting<>(Minecraft.getMinecraft().ingameGUI.getChatGUI()::printChatMessage); + public final Setting> logger = new Setting<>(msg -> Minecraft.getInstance().gui.getChat().addMessage(msg)); /** * The function that is called when Baritone will send a desktop notification. This function can be added to @@ -1112,7 +1141,12 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ - public final Setting> toaster = new Setting<>(BaritoneToast::addOrUpdate); + public final Setting> toaster = new Setting<>(BaritoneToast::addOrUpdate); + + /** + * Print out ALL command exceptions as a stack trace to stdout, even simple syntax errors + */ + public final Setting verboseCommandExceptions = new Setting<>(false); /** * The size of the box that is rendered when the current goal is a GoalYLevel diff --git a/src/api/java/baritone/api/cache/IBlockTypeAccess.java b/src/api/java/baritone/api/cache/IBlockTypeAccess.java index 0804a73ad..fd6a258bf 100644 --- a/src/api/java/baritone/api/cache/IBlockTypeAccess.java +++ b/src/api/java/baritone/api/cache/IBlockTypeAccess.java @@ -17,8 +17,8 @@ package baritone.api.cache; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; /** * @author Brady @@ -26,9 +26,9 @@ */ public interface IBlockTypeAccess { - IBlockState getBlock(int x, int y, int z); + BlockState getBlock(int x, int y, int z); - default IBlockState getBlock(BlockPos pos) { + default BlockState getBlock(BlockPos pos) { return getBlock(pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/api/java/baritone/api/cache/ICachedWorld.java b/src/api/java/baritone/api/cache/ICachedWorld.java index e681ce51c..120ca8da4 100644 --- a/src/api/java/baritone/api/cache/ICachedWorld.java +++ b/src/api/java/baritone/api/cache/ICachedWorld.java @@ -17,8 +17,8 @@ package baritone.api.cache; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.chunk.Chunk; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.chunk.LevelChunk; import java.util.ArrayList; @@ -44,7 +44,7 @@ public interface ICachedWorld { * * @param chunk The chunk to pack and store */ - void queueForPacking(Chunk chunk); + void queueForPacking(LevelChunk chunk); /** * Returns whether or not the block at the specified X and Z coordinates diff --git a/src/api/java/baritone/api/cache/IContainerMemory.java b/src/api/java/baritone/api/cache/IContainerMemory.java deleted file mode 100644 index 5c19d43b9..000000000 --- a/src/api/java/baritone/api/cache/IContainerMemory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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.cache; - -import net.minecraft.util.math.BlockPos; - -import java.util.Map; - -/** - * @author Brady - * @since 9/23/2018 - */ -public interface IContainerMemory { - - /** - * Gets a remembered inventory by its block position. - * - * @param pos The position of the container block - * @return The remembered inventory - */ - IRememberedInventory getInventoryByPos(BlockPos pos); - - /** - * Gets the map of all block positions to their remembered inventories. - * - * @return Map of block positions to their respective remembered inventories - */ - Map getRememberedInventories(); -} diff --git a/src/api/java/baritone/api/cache/IWorldData.java b/src/api/java/baritone/api/cache/IWorldData.java index 1eaade4c0..200771935 100644 --- a/src/api/java/baritone/api/cache/IWorldData.java +++ b/src/api/java/baritone/api/cache/IWorldData.java @@ -37,9 +37,4 @@ public interface IWorldData { */ IWaypointCollection getWaypoints(); - /** - * @return The {@link IContainerMemory} instance - * @see IContainerMemory - */ - IContainerMemory getContainerMemory(); } diff --git a/src/api/java/baritone/api/cache/IWorldScanner.java b/src/api/java/baritone/api/cache/IWorldScanner.java index bc3064608..d8cf2bd38 100644 --- a/src/api/java/baritone/api/cache/IWorldScanner.java +++ b/src/api/java/baritone/api/cache/IWorldScanner.java @@ -19,9 +19,9 @@ import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; -import net.minecraft.block.Block; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.Block; import java.util.List; diff --git a/src/api/java/baritone/api/command/argument/IArgConsumer.java b/src/api/java/baritone/api/command/argument/IArgConsumer.java index 883494d49..833d67736 100644 --- a/src/api/java/baritone/api/command/argument/IArgConsumer.java +++ b/src/api/java/baritone/api/command/argument/IArgConsumer.java @@ -27,7 +27,7 @@ import baritone.api.command.exception.CommandNotEnoughArgumentsException; import baritone.api.command.exception.CommandTooManyArgumentsException; import baritone.api.utils.Helper; -import net.minecraft.util.EnumFacing; +import net.minecraft.core.Direction; import java.util.Deque; import java.util.LinkedList; @@ -404,8 +404,8 @@ public interface IArgConsumer { /** * Gets an enum value from the enum class with the same name as the next argument's value *

- * For example if you getEnum as an {@link EnumFacing}, and the next argument's value is "up", this will return - * {@link EnumFacing#UP} + * For example if you getEnum as an {@link Direction}, and the next argument's value is "up", this will return + * {@link Direction#UP} * * @param enumClass The enum class to search * @return An enum constant of that class with the same name as the next argument's value @@ -419,8 +419,8 @@ public interface IArgConsumer { /** * Gets an enum value from the enum class with the same name as the next argument's value *

- * For example if you getEnum as an {@link EnumFacing}, and the next argument's value is "up", this will return - * {@link EnumFacing#UP} + * For example if you getEnum as an {@link Direction}, and the next argument's value is "up", this will return + * {@link Direction#UP} * * @param enumClass The enum class to search * @param def The default value @@ -436,8 +436,8 @@ public interface IArgConsumer { /** * Gets an enum value from the enum class with the same name as the next argument's value *

- * For example if you getEnum as an {@link EnumFacing}, and the next argument's value is "up", this will return - * {@link EnumFacing#UP} + * For example if you getEnum as an {@link Direction}, and the next argument's value is "up", this will return + * {@link Direction#UP} * * @param enumClass The enum class to search * @return An enum constant of that class with the same name as the next argument's value, or {@code null} if it diff --git a/src/api/java/baritone/api/command/argument/ICommandArgument.java b/src/api/java/baritone/api/command/argument/ICommandArgument.java index 72169de04..1d6336866 100644 --- a/src/api/java/baritone/api/command/argument/ICommandArgument.java +++ b/src/api/java/baritone/api/command/argument/ICommandArgument.java @@ -19,7 +19,7 @@ import baritone.api.command.argparser.IArgParser; import baritone.api.command.exception.CommandInvalidTypeException; -import net.minecraft.util.EnumFacing; +import net.minecraft.core.Direction; /** * A {@link ICommandArgument} is an immutable object representing one command argument. It contains data on the index of @@ -50,8 +50,8 @@ public interface ICommandArgument { /** * Gets an enum value from the enum class with the same name as this argument's value *

- * For example if you getEnum as an {@link EnumFacing}, and this argument's value is "up", it will return {@link - * EnumFacing#UP} + * For example if you getEnum as an {@link Direction}, and this argument's value is "up", it will return {@link + * Direction#UP} * * @param enumClass The enum class to search * @return An enum constant of that class with the same name as this argument's value diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 3702725e3..ea792e7a5 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -19,9 +19,9 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.util.ResourceLocation; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; import java.util.stream.Stream; @@ -32,7 +32,7 @@ public enum BlockById implements IDatatypeFor { public Block get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); Block block; - if ((block = Block.REGISTRY.getObject(id)) == Blocks.AIR) { + if ((block = Registry.BLOCK.getOptional(id).orElse(null)) == null) { throw new IllegalArgumentException("no block found by that id"); } return block; @@ -42,7 +42,7 @@ public Block get(IDatatypeContext ctx) throws CommandException { public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() .append( - Block.REGISTRY.getKeys() + Registry.BLOCK.keySet() .stream() .map(Object::toString) ) diff --git a/src/api/java/baritone/api/command/datatypes/EntityClassById.java b/src/api/java/baritone/api/command/datatypes/EntityClassById.java index c7ce2128d..d2b093251 100644 --- a/src/api/java/baritone/api/command/datatypes/EntityClassById.java +++ b/src/api/java/baritone/api/command/datatypes/EntityClassById.java @@ -19,32 +19,20 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityList; -import net.minecraft.util.ResourceLocation; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; import java.util.stream.Stream; -public enum EntityClassById implements IDatatypeFor> { +public enum EntityClassById implements IDatatypeFor { INSTANCE; @Override - public Class get(IDatatypeContext ctx) throws CommandException { + public EntityType get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); - Class entity; - try { - entity = EntityList.REGISTRY.getObject(id); - } catch (NoSuchFieldError e) { - // Forge removes EntityList.REGISTRY field and provides the getClass method as a replacement - // See https://github.com/MinecraftForge/MinecraftForge/blob/1.12.x/patches/minecraft/net/minecraft/entity/EntityList.java.patch - try { - entity = (Class) EntityList.class.getMethod("getClass", ResourceLocation.class).invoke(null, id); - } catch (Exception ex) { - throw new RuntimeException("EntityList.REGISTRY does not exist and failed to call the Forge-replacement method", ex); - } - } - - if (entity == null) { + EntityType entity; + if ((entity = Registry.ENTITY_TYPE.getOptional(id).orElse(null)) == null) { throw new IllegalArgumentException("no entity found by that id"); } return entity; @@ -53,7 +41,7 @@ public Class get(IDatatypeContext ctx) throws CommandException @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() - .append(EntityList.getEntityNameList().stream().map(Object::toString)) + .append(Registry.ENTITY_TYPE.stream().map(Object::toString)) .filterPrefixNamespaced(ctx.getConsumer().getString()) .sortAlphabetically() .stream(); diff --git a/src/api/java/baritone/api/command/datatypes/ForEnumFacing.java b/src/api/java/baritone/api/command/datatypes/ForDirection.java similarity index 74% rename from src/api/java/baritone/api/command/datatypes/ForEnumFacing.java rename to src/api/java/baritone/api/command/datatypes/ForDirection.java index d71307b10..cbfbc2243 100644 --- a/src/api/java/baritone/api/command/datatypes/ForEnumFacing.java +++ b/src/api/java/baritone/api/command/datatypes/ForDirection.java @@ -19,24 +19,23 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.util.EnumFacing; - import java.util.Locale; import java.util.stream.Stream; +import net.minecraft.core.Direction; -public enum ForEnumFacing implements IDatatypeFor { +public enum ForDirection implements IDatatypeFor { INSTANCE; @Override - public EnumFacing get(IDatatypeContext ctx) throws CommandException { - return EnumFacing.valueOf(ctx.getConsumer().getString().toUpperCase(Locale.US)); + public Direction get(IDatatypeContext ctx) throws CommandException { + return Direction.valueOf(ctx.getConsumer().getString().toUpperCase(Locale.US)); } @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() - .append(Stream.of(EnumFacing.values()) - .map(EnumFacing::getName).map(String::toLowerCase)) + .append(Stream.of(Direction.values()) + .map(Direction::getName).map(String::toLowerCase)) .filterPrefix(ctx.getConsumer().getString()) .stream(); } diff --git a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java index 9c394627c..e60845768 100644 --- a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java +++ b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java @@ -20,7 +20,8 @@ import baritone.api.IBaritone; import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; import java.util.List; import java.util.stream.Stream; @@ -29,27 +30,27 @@ * An {@link IDatatype} used to resolve nearby players, those within * render distance of the target {@link IBaritone} instance. */ -public enum NearbyPlayer implements IDatatypeFor { +public enum NearbyPlayer implements IDatatypeFor { INSTANCE; + private static List getPlayers(IDatatypeContext ctx) { + return ctx.getBaritone().getPlayerContext().world().players(); + } + @Override - public EntityPlayer get(IDatatypeContext ctx) throws CommandException { + public Player get(IDatatypeContext ctx) throws CommandException { final String username = ctx.getConsumer().getString(); return getPlayers(ctx).stream() - .filter(s -> s.getName().equalsIgnoreCase(username)) + .filter(s -> s.getName().getString().equalsIgnoreCase(username)) .findFirst().orElse(null); } @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() - .append(getPlayers(ctx).stream().map(EntityPlayer::getName)) + .append(getPlayers(ctx).stream().map(Player::getName).map(Component::getString)) .filterPrefix(ctx.getConsumer().getString()) .sortAlphabetically() .stream(); } - - private static List getPlayers(IDatatypeContext ctx) { - return ctx.getBaritone().getPlayerContext().world().playerEntities; - } } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeFile.java b/src/api/java/baritone/api/command/datatypes/RelativeFile.java index 2c7adf98f..f2de7308c 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeFile.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeFile.java @@ -94,7 +94,7 @@ public static Stream tabComplete(IArgConsumer consumer, File base0) thro } public static File gameDir() { - File gameDir = HELPER.mc.gameDir.getAbsoluteFile(); + File gameDir = HELPER.mc.gameDirectory.getAbsoluteFile(); if (gameDir.getName().equals(".")) { return gameDir.getParentFile(); } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java index ccc45cafa..738ca019a 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java @@ -21,7 +21,7 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.math.MathHelper; +import net.minecraft.util.Mth; import java.util.stream.Stream; @@ -36,9 +36,9 @@ public GoalBlock apply(IDatatypeContext ctx, BetterBlockPos origin) throws Comma final IArgConsumer consumer = ctx.getConsumer(); return new GoalBlock( - MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x)), - MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y)), - MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z)) + Mth.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x)), + Mth.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y)), + Mth.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z)) ); } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java index 747509f5e..c4dd045f3 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java @@ -21,7 +21,7 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.math.MathHelper; +import net.minecraft.util.Mth; import java.util.stream.Stream; @@ -36,8 +36,8 @@ public GoalXZ apply(IDatatypeContext ctx, BetterBlockPos origin) throws CommandE final IArgConsumer consumer = ctx.getConsumer(); return new GoalXZ( - MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x)), - MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z)) + Mth.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x)), + Mth.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z)) ); } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java index cd1a4c5d4..9a13e4bbd 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java @@ -21,7 +21,7 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.math.MathHelper; +import net.minecraft.util.Mth; import java.util.stream.Stream; @@ -35,7 +35,7 @@ public GoalYLevel apply(IDatatypeContext ctx, BetterBlockPos origin) throws Comm } return new GoalYLevel( - MathHelper.floor(ctx.getConsumer().getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y)) + Mth.floor(ctx.getConsumer().getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y)) ); } diff --git a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java index 5dce59313..51840a117 100644 --- a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -19,7 +19,7 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; import java.util.List; @@ -39,7 +39,7 @@ public CommandUnhandledException(Throwable cause) { public void handle(ICommand command, List args) { HELPER.logDirect("An unhandled exception occurred. " + "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", - TextFormatting.RED); + ChatFormatting.RED); this.printStackTrace(); } diff --git a/src/api/java/baritone/api/command/exception/ICommandException.java b/src/api/java/baritone/api/command/exception/ICommandException.java index b521a2e6b..389129761 100644 --- a/src/api/java/baritone/api/command/exception/ICommandException.java +++ b/src/api/java/baritone/api/command/exception/ICommandException.java @@ -19,7 +19,7 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; import java.util.List; @@ -50,6 +50,6 @@ public interface ICommandException { * @param args The arguments the command was called with. */ default void handle(ICommand command, List args) { - HELPER.logDirect(this.getMessage(), TextFormatting.RED); + HELPER.logDirect(this.getMessage(), ChatFormatting.RED); } } diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index 5aa65d7d4..4df11b350 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -21,11 +21,11 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.utils.Helper; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; import java.util.Arrays; import java.util.List; @@ -63,59 +63,7 @@ public Paginator skipPages(int pages) { return this; } - public void display(Function transform, String commandPrefix) { - int offset = (page - 1) * pageSize; - for (int i = offset; i < offset + pageSize; i++) { - if (i < entries.size()) { - logDirect(transform.apply(entries.get(i))); - } else { - logDirect("--", TextFormatting.DARK_GRAY); - } - } - boolean hasPrevPage = commandPrefix != null && validPage(page - 1); - boolean hasNextPage = commandPrefix != null && validPage(page + 1); - ITextComponent prevPageComponent = new TextComponentString("<<"); - if (hasPrevPage) { - prevPageComponent.getStyle() - .setClickEvent(new ClickEvent( - ClickEvent.Action.RUN_COMMAND, - String.format("%s %d", commandPrefix, page - 1) - )) - .setHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, - new TextComponentString("Click to view previous page") - )); - } else { - prevPageComponent.getStyle().setColor(TextFormatting.DARK_GRAY); - } - ITextComponent nextPageComponent = new TextComponentString(">>"); - if (hasNextPage) { - nextPageComponent.getStyle() - .setClickEvent(new ClickEvent( - ClickEvent.Action.RUN_COMMAND, - String.format("%s %d", commandPrefix, page + 1) - )) - .setHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, - new TextComponentString("Click to view next page") - )); - } else { - nextPageComponent.getStyle().setColor(TextFormatting.DARK_GRAY); - } - ITextComponent pagerComponent = new TextComponentString(""); - pagerComponent.getStyle().setColor(TextFormatting.GRAY); - pagerComponent.appendSibling(prevPageComponent); - pagerComponent.appendText(" | "); - pagerComponent.appendSibling(nextPageComponent); - pagerComponent.appendText(String.format(" %d/%d", page, getMaxPage())); - logDirect(pagerComponent); - } - - public void display(Function transform) { - display(transform, null); - } - - public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform, String commandPrefix) throws CommandException { int page = 1; consumer.requireMax(1); if (consumer.hasAny()) { @@ -138,47 +86,96 @@ public static void paginate(IArgConsumer consumer, Paginator pagi, Runnab pagi.display(transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { paginate(consumer, new Paginator<>(elems), pre, transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { paginate(consumer, Arrays.asList(elems), pre, transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform, String commandPrefix) throws CommandException { paginate(consumer, pagi, null, transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, List elems, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, List elems, Function transform, String commandPrefix) throws CommandException { paginate(consumer, new Paginator<>(elems), null, transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, T[] elems, Function transform, String commandPrefix) throws CommandException { + public static void paginate(IArgConsumer consumer, T[] elems, Function transform, String commandPrefix) throws CommandException { paginate(consumer, Arrays.asList(elems), null, transform, commandPrefix); } - public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform) throws CommandException { paginate(consumer, pagi, pre, transform, null); } - public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform) throws CommandException { paginate(consumer, new Paginator<>(elems), pre, transform, null); } - public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform) throws CommandException { paginate(consumer, Arrays.asList(elems), pre, transform, null); } - public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform) throws CommandException { paginate(consumer, pagi, null, transform, null); } - public static void paginate(IArgConsumer consumer, List elems, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, List elems, Function transform) throws CommandException { paginate(consumer, new Paginator<>(elems), null, transform, null); } - public static void paginate(IArgConsumer consumer, T[] elems, Function transform) throws CommandException { + public static void paginate(IArgConsumer consumer, T[] elems, Function transform) throws CommandException { paginate(consumer, Arrays.asList(elems), null, transform, null); } + + public void display(Function transform, String commandPrefix) { + int offset = (page - 1) * pageSize; + for (int i = offset; i < offset + pageSize; i++) { + if (i < entries.size()) { + logDirect(transform.apply(entries.get(i))); + } else { + logDirect("--", ChatFormatting.DARK_GRAY); + } + } + boolean hasPrevPage = commandPrefix != null && validPage(page - 1); + boolean hasNextPage = commandPrefix != null && validPage(page + 1); + MutableComponent prevPageComponent = Component.literal("<<"); + if (hasPrevPage) { + prevPageComponent.setStyle(prevPageComponent.getStyle() + .withClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format("%s %d", commandPrefix, page - 1) + )) + .withHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + Component.literal("Click to view previous page") + ))); + } else { + prevPageComponent.setStyle(prevPageComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); + } + MutableComponent nextPageComponent = Component.literal(">>"); + if (hasNextPage) { + nextPageComponent.setStyle(nextPageComponent.getStyle() + .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("%s %d", commandPrefix, page + 1))) + .withHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + Component.literal("Click to view next page") + ))); + } else { + nextPageComponent.setStyle(nextPageComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); + } + MutableComponent pagerComponent = Component.literal(""); + pagerComponent.setStyle(pagerComponent.getStyle().withColor(ChatFormatting.GRAY)); + pagerComponent.append(prevPageComponent); + pagerComponent.append(" | "); + pagerComponent.append(nextPageComponent); + pagerComponent.append(String.format(" %d/%d", page, getMaxPage())); + logDirect(pagerComponent); + } + + public void display(Function transform) { + display(transform, null); + } } diff --git a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java index e438da308..0722ce16d 100644 --- a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java @@ -23,7 +23,7 @@ import baritone.api.command.manager.ICommandManager; import baritone.api.event.events.TabCompleteEvent; import baritone.api.utils.SettingsUtil; -import net.minecraft.util.ResourceLocation; +import net.minecraft.resources.ResourceLocation; import java.util.Comparator; import java.util.List; diff --git a/src/api/java/baritone/api/event/events/BlockInteractEvent.java b/src/api/java/baritone/api/event/events/BlockInteractEvent.java index 6508d7397..62f7a0d02 100644 --- a/src/api/java/baritone/api/event/events/BlockInteractEvent.java +++ b/src/api/java/baritone/api/event/events/BlockInteractEvent.java @@ -17,7 +17,7 @@ package baritone.api.event.events; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** * Called when the local player interacts with a block, can be either {@link Type#START_BREAK} or {@link Type#USE}. diff --git a/src/api/java/baritone/api/event/events/PacketEvent.java b/src/api/java/baritone/api/event/events/PacketEvent.java index 9b5295ee5..b605f4fce 100644 --- a/src/api/java/baritone/api/event/events/PacketEvent.java +++ b/src/api/java/baritone/api/event/events/PacketEvent.java @@ -18,8 +18,8 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.Packet; /** * @author Brady @@ -27,19 +27,19 @@ */ public final class PacketEvent { - private final NetworkManager networkManager; + private final Connection networkManager; private final EventState state; private final Packet packet; - public PacketEvent(NetworkManager networkManager, EventState state, Packet packet) { + public PacketEvent(Connection networkManager, EventState state, Packet packet) { this.networkManager = networkManager; this.state = state; this.packet = packet; } - public final NetworkManager getNetworkManager() { + public final Connection getNetworkManager() { return this.networkManager; } diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java index 1f879bfcb..cb7a0414c 100644 --- a/src/api/java/baritone/api/event/events/RenderEvent.java +++ b/src/api/java/baritone/api/event/events/RenderEvent.java @@ -17,6 +17,9 @@ package baritone.api.event.events; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; + /** * @author Brady * @since 8/5/2018 @@ -28,8 +31,13 @@ public final class RenderEvent { */ private final float partialTicks; - public RenderEvent(float partialTicks) { + private final Matrix4f projectionMatrix; + private final PoseStack modelViewStack; + + public RenderEvent(float partialTicks, PoseStack modelViewStack, Matrix4f projectionMatrix) { this.partialTicks = partialTicks; + this.modelViewStack = modelViewStack; + this.projectionMatrix = projectionMatrix; } /** @@ -38,4 +46,12 @@ public RenderEvent(float partialTicks) { public final float getPartialTicks() { return this.partialTicks; } + + public PoseStack getModelViewStack() { + return this.modelViewStack; + } + + public Matrix4f getProjectionMatrix() { + return this.projectionMatrix; + } } diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index 109061c7e..bae83c0fa 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -17,8 +17,9 @@ package baritone.api.event.events; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.Vec3; /** * @author Brady @@ -69,14 +70,14 @@ public enum Type { /** * Called when the player's motion is updated. * - * @see Entity#moveRelative(float, float, float, float) + * @see Entity#moveRelative(float, Vec3) */ MOTION_UPDATE, /** * Called when the player jumps. * - * @see EntityLivingBase#jump + * @see LivingEntity */ JUMP } diff --git a/src/api/java/baritone/api/event/events/TabCompleteEvent.java b/src/api/java/baritone/api/event/events/TabCompleteEvent.java index 589fcedde..268cf62bf 100644 --- a/src/api/java/baritone/api/event/events/TabCompleteEvent.java +++ b/src/api/java/baritone/api/event/events/TabCompleteEvent.java @@ -22,7 +22,7 @@ /** * @author LoganDark */ -public class TabCompleteEvent extends Cancellable { +public final class TabCompleteEvent extends Cancellable { public final String prefix; public String[] completions; diff --git a/src/api/java/baritone/api/event/events/WorldEvent.java b/src/api/java/baritone/api/event/events/WorldEvent.java index 2cb0eac57..f40042e46 100644 --- a/src/api/java/baritone/api/event/events/WorldEvent.java +++ b/src/api/java/baritone/api/event/events/WorldEvent.java @@ -18,7 +18,7 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; -import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.multiplayer.ClientLevel; /** * @author Brady @@ -29,14 +29,14 @@ public final class WorldEvent { /** * The new world that is being loaded. {@code null} if being unloaded. */ - private final WorldClient world; + private final ClientLevel world; /** * The state of the event */ private final EventState state; - public WorldEvent(WorldClient world, EventState state) { + public WorldEvent(ClientLevel world, EventState state) { this.world = world; this.state = state; } @@ -44,7 +44,7 @@ public WorldEvent(WorldClient world, EventState state) { /** * @return The new world that is being loaded. {@code null} if being unloaded. */ - public final WorldClient getWorld() { + public final ClientLevel getWorld() { return this.world; } diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index b074e978b..a34ea4ef3 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -18,14 +18,13 @@ package baritone.api.event.listener; import baritone.api.event.events.*; -import io.netty.util.concurrent.GenericFutureListener; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.gui.GuiGameOver; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.client.settings.GameSettings; -import net.minecraft.entity.Entity; -import net.minecraft.network.Packet; +import net.minecraft.client.gui.screens.DeathScreen; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.protocol.Packet; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.Vec3; /** * @author Brady @@ -37,7 +36,7 @@ public interface IGameEventListener { * Run once per game tick before screen input is handled. * * @param event The event - * @see Minecraft#runTick() + * @see Minecraft#tick() */ void onTick(TickEvent event); @@ -45,7 +44,7 @@ public interface IGameEventListener { * Run once per game tick from before and after the player rotation is sent to the server. * * @param event The event - * @see EntityPlayerSP#onUpdate() + * @see LocalPlayer#tick() */ void onPlayerUpdate(PlayerUpdateEvent event); @@ -53,7 +52,7 @@ public interface IGameEventListener { * Runs whenever the client player sends a message to the server. * * @param event The event - * @see EntityPlayerSP#sendChatMessage(String) + * @see LocalPlayer#chat(String) */ void onSendChatMessage(ChatEvent event); @@ -68,14 +67,11 @@ public interface IGameEventListener { * Runs before and after whenever a chunk is either loaded, unloaded, or populated. * * @param event The event - * @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. - *

- * Note: {@link GameSettings#anaglyph} has been removed in Minecraft 1.13 + * Runs once per world render pass. * * @param event The event */ @@ -85,7 +81,7 @@ public interface IGameEventListener { * Runs before and after whenever a new world is loaded * * @param event The event - * @see Minecraft#loadWorld(WorldClient, String) + * @see Minecraft#setLevel(ClientLevel) */ void onWorldEvent(WorldEvent event); @@ -94,7 +90,6 @@ public interface IGameEventListener { * * @param event The event * @see Packet - * @see GenericFutureListener */ void onSendPacket(PacketEvent event); @@ -103,7 +98,6 @@ public interface IGameEventListener { * * @param event The event * @see Packet - * @see GenericFutureListener */ void onReceivePacket(PacketEvent event); @@ -112,15 +106,15 @@ public interface IGameEventListener { * and before and after the player jumps. * * @param event The event - * @see Entity#moveRelative(float, float, float, float) + * @see Entity#moveRelative(float, Vec3) */ void onPlayerRotationMove(RotationMoveEvent event); /** - * Called whenever the sprint keybind state is checked in {@link EntityPlayerSP#onLivingUpdate} + * Called whenever the sprint keybind state is checked in {@link LocalPlayer#aiStep} * * @param event The event - * @see EntityPlayerSP#onLivingUpdate() + * @see LocalPlayer#aiStep() */ void onPlayerSprintState(SprintStateEvent event); @@ -132,9 +126,9 @@ public interface IGameEventListener { void onBlockInteract(BlockInteractEvent event); /** - * Called when the local player dies, as indicated by the creation of the {@link GuiGameOver} screen. + * Called when the local player dies, as indicated by the creation of the {@link DeathScreen} screen. * - * @see GuiGameOver + * @see DeathScreen */ void onPlayerDeath(); diff --git a/src/api/java/baritone/api/pathing/goals/Goal.java b/src/api/java/baritone/api/pathing/goals/Goal.java index 95462f961..3dcd33427 100644 --- a/src/api/java/baritone/api/pathing/goals/Goal.java +++ b/src/api/java/baritone/api/pathing/goals/Goal.java @@ -17,7 +17,7 @@ package baritone.api.pathing.goals; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** * An abstract Goal for pathing, can be anything from a specific block to just a Y coordinate. diff --git a/src/api/java/baritone/api/pathing/goals/GoalBlock.java b/src/api/java/baritone/api/pathing/goals/GoalBlock.java index bd339549b..7cb9da14a 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalBlock.java @@ -19,7 +19,7 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** * A specific BlockPos goal diff --git a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java index 8d6fdcb30..8d15e4bc9 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java @@ -19,7 +19,7 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** diff --git a/src/api/java/baritone/api/pathing/goals/GoalNear.java b/src/api/java/baritone/api/pathing/goals/GoalNear.java index 6a8226fb4..6ee35ad7b 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalNear.java +++ b/src/api/java/baritone/api/pathing/goals/GoalNear.java @@ -19,9 +19,9 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; -import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; import it.unimi.dsi.fastutil.doubles.DoubleIterator; -import net.minecraft.util.math.BlockPos; +import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; +import net.minecraft.core.BlockPos; public class GoalNear implements Goal, IGoalRenderPos { diff --git a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java index 503ae7f43..3906713f2 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java +++ b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java @@ -18,9 +18,9 @@ package baritone.api.pathing.goals; import baritone.api.utils.SettingsUtil; -import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; import it.unimi.dsi.fastutil.doubles.DoubleIterator; -import net.minecraft.util.math.BlockPos; +import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; +import net.minecraft.core.BlockPos; import java.util.Arrays; diff --git a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java index e93f47ac0..c4a8a6272 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java +++ b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java @@ -18,8 +18,8 @@ package baritone.api.pathing.goals; import baritone.api.utils.SettingsUtil; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; /** * Dig a tunnel in a certain direction, but if you have to deviate from the path, go back to where you started @@ -32,12 +32,12 @@ public class GoalStrictDirection implements Goal { public final int dx; public final int dz; - public GoalStrictDirection(BlockPos origin, EnumFacing direction) { + public GoalStrictDirection(BlockPos origin, Direction direction) { x = origin.getX(); y = origin.getY(); z = origin.getZ(); - dx = direction.getXOffset(); - dz = direction.getZOffset(); + dx = direction.getStepX(); + dz = direction.getStepZ(); if (dx == 0 && dz == 0) { throw new IllegalArgumentException(direction + ""); } diff --git a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java index 27be981e4..1b7213471 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java +++ b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java @@ -19,7 +19,7 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** * Useful if the goal is just to mine a block. This goal will be satisfied if the specified diff --git a/src/api/java/baritone/api/pathing/goals/GoalXZ.java b/src/api/java/baritone/api/pathing/goals/GoalXZ.java index 63d39cd78..f70f6c4f7 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalXZ.java +++ b/src/api/java/baritone/api/pathing/goals/GoalXZ.java @@ -20,8 +20,8 @@ import baritone.api.BaritoneAPI; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; /** * Useful for long-range goals that don't have a specific Y level. @@ -94,11 +94,11 @@ public static double calculate(double xDiff, double zDiff) { return (diagonal + straight) * BaritoneAPI.getSettings().costHeuristic.value; // big TODO tune } - public static GoalXZ fromDirection(Vec3d origin, float yaw, double distance) { + public static GoalXZ fromDirection(Vec3 origin, float yaw, double distance) { float theta = (float) Math.toRadians(yaw); - double x = origin.x - MathHelper.sin(theta) * distance; - double z = origin.z + MathHelper.cos(theta) * distance; - return new GoalXZ(MathHelper.floor(x), MathHelper.floor(z)); + double x = origin.x - Mth.sin(theta) * distance; + double z = origin.z + Mth.cos(theta) * distance; + return new GoalXZ(Mth.floor(x), Mth.floor(z)); } public int getX() { diff --git a/src/api/java/baritone/api/pathing/movement/ActionCosts.java b/src/api/java/baritone/api/pathing/movement/ActionCosts.java index 683b1b10e..691d73b4d 100644 --- a/src/api/java/baritone/api/pathing/movement/ActionCosts.java +++ b/src/api/java/baritone/api/pathing/movement/ActionCosts.java @@ -65,8 +65,8 @@ public interface ActionCosts { static double[] generateFallNBlocksCost() { - double[] costs = new double[257]; - for (int i = 0; i < 257; i++) { + double[] costs = new double[4097]; + for (int i = 0; i < 4097; i++) { costs[i] = distanceToTicks(i); } return costs; diff --git a/src/api/java/baritone/api/pathing/movement/IMovement.java b/src/api/java/baritone/api/pathing/movement/IMovement.java index dae8668d5..5136ccc3f 100644 --- a/src/api/java/baritone/api/pathing/movement/IMovement.java +++ b/src/api/java/baritone/api/pathing/movement/IMovement.java @@ -18,7 +18,7 @@ package baritone.api.pathing.movement; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; /** * @author Brady diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 9063b9900..bb3213563 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -18,10 +18,10 @@ package baritone.api.process; import baritone.api.schematic.ISchematic; -import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3i; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.world.level.block.state.BlockState; import java.io.File; import java.util.List; @@ -52,7 +52,7 @@ public interface IBuilderProcess extends IBaritoneProcess { boolean build(String name, File schematic, Vec3i origin); default boolean build(String schematicFile, BlockPos origin) { - File file = new File(new File(Minecraft.getMinecraft().gameDir, "schematics"), schematicFile); + File file = new File(new File(Minecraft.getInstance().gameDirectory, "schematics"), schematicFile); return build(schematicFile, file, origin); } @@ -71,5 +71,5 @@ default boolean build(String schematicFile, BlockPos origin) { * schematics, for example, to pick a state that the builder process will be happy with, because any variation will * cause it to give up. This is updated every tick, but only while the builder process is active. */ - List getApproxPlaceable(); + List getApproxPlaceable(); } diff --git a/src/api/java/baritone/api/process/IFarmProcess.java b/src/api/java/baritone/api/process/IFarmProcess.java index 224307afa..0c07567de 100644 --- a/src/api/java/baritone/api/process/IFarmProcess.java +++ b/src/api/java/baritone/api/process/IFarmProcess.java @@ -17,7 +17,7 @@ package baritone.api.process; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public interface IFarmProcess extends IBaritoneProcess { diff --git a/src/api/java/baritone/api/process/IFollowProcess.java b/src/api/java/baritone/api/process/IFollowProcess.java index ef869da40..b9eedee30 100644 --- a/src/api/java/baritone/api/process/IFollowProcess.java +++ b/src/api/java/baritone/api/process/IFollowProcess.java @@ -17,7 +17,7 @@ package baritone.api.process; -import net.minecraft.entity.Entity; +import net.minecraft.world.entity.Entity; import java.util.List; import java.util.function.Predicate; diff --git a/src/api/java/baritone/api/process/IGetToBlockProcess.java b/src/api/java/baritone/api/process/IGetToBlockProcess.java index f58efbd35..8f3264dc3 100644 --- a/src/api/java/baritone/api/process/IGetToBlockProcess.java +++ b/src/api/java/baritone/api/process/IGetToBlockProcess.java @@ -18,7 +18,7 @@ package baritone.api.process; import baritone.api.utils.BlockOptionalMeta; -import net.minecraft.block.Block; +import net.minecraft.world.level.block.Block; /** * but it rescans the world every once in a while so it doesn't get fooled by its cache diff --git a/src/api/java/baritone/api/process/IMineProcess.java b/src/api/java/baritone/api/process/IMineProcess.java index 9cd76a09a..1331e3dde 100644 --- a/src/api/java/baritone/api/process/IMineProcess.java +++ b/src/api/java/baritone/api/process/IMineProcess.java @@ -19,7 +19,7 @@ import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMetaLookup; -import net.minecraft.block.Block; +import net.minecraft.world.level.block.Block; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/schematic/CompositeSchematic.java b/src/api/java/baritone/api/schematic/CompositeSchematic.java index 234f1d4fe..62faa8bf2 100644 --- a/src/api/java/baritone/api/schematic/CompositeSchematic.java +++ b/src/api/java/baritone/api/schematic/CompositeSchematic.java @@ -17,7 +17,7 @@ package baritone.api.schematic; -import net.minecraft.block.state.IBlockState; +import net.minecraft.world.level.block.state.BlockState; import java.util.ArrayList; import java.util.List; @@ -47,7 +47,7 @@ public void put(ISchematic extra, int x, int y, int z) { recalcArr(); } - private CompositeSchematicEntry getSchematic(int x, int y, int z, IBlockState currentState) { + private CompositeSchematicEntry getSchematic(int x, int y, int z, BlockState currentState) { for (CompositeSchematicEntry entry : schematicArr) { if (x >= entry.x && y >= entry.y && z >= entry.z && entry.schematic.inSchematic(x - entry.x, y - entry.y, z - entry.z, currentState)) { @@ -58,13 +58,13 @@ private CompositeSchematicEntry getSchematic(int x, int y, int z, IBlockState cu } @Override - public boolean inSchematic(int x, int y, int z, IBlockState currentState) { + public boolean inSchematic(int x, int y, int z, BlockState currentState) { CompositeSchematicEntry entry = getSchematic(x, y, z, currentState); return entry != null && entry.schematic.inSchematic(x - entry.x, y - entry.y, z - entry.z, currentState); } @Override - public IBlockState desiredState(int x, int y, int z, IBlockState current, List approxPlaceable) { + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { CompositeSchematicEntry entry = getSchematic(x, y, z, current); if (entry == null) { throw new IllegalStateException("couldn't find schematic for this position"); diff --git a/src/api/java/baritone/api/schematic/FillSchematic.java b/src/api/java/baritone/api/schematic/FillSchematic.java index f2fb203cd..d79374fc3 100644 --- a/src/api/java/baritone/api/schematic/FillSchematic.java +++ b/src/api/java/baritone/api/schematic/FillSchematic.java @@ -18,7 +18,7 @@ package baritone.api.schematic; import baritone.api.utils.BlockOptionalMeta; -import net.minecraft.block.state.IBlockState; +import net.minecraft.world.level.block.state.BlockState; import java.util.List; @@ -31,8 +31,8 @@ public FillSchematic(int x, int y, int z, BlockOptionalMeta bom) { this.bom = bom; } - public FillSchematic(int x, int y, int z, IBlockState state) { - this(x, y, z, new BlockOptionalMeta(state.getBlock(), state.getBlock().getMetaFromState(state))); + public FillSchematic(int x, int y, int z, BlockState state) { + this(x, y, z, new BlockOptionalMeta(state.getBlock())); } public BlockOptionalMeta getBom() { @@ -40,11 +40,11 @@ public BlockOptionalMeta getBom() { } @Override - public IBlockState desiredState(int x, int y, int z, IBlockState current, List approxPlaceable) { + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { if (bom.matches(current)) { return current; } - for (IBlockState placeable : approxPlaceable) { + for (BlockState placeable : approxPlaceable) { if (bom.matches(placeable)) { return placeable; } diff --git a/src/api/java/baritone/api/schematic/ISchematic.java b/src/api/java/baritone/api/schematic/ISchematic.java index deb811828..ae9a1306d 100644 --- a/src/api/java/baritone/api/schematic/ISchematic.java +++ b/src/api/java/baritone/api/schematic/ISchematic.java @@ -17,8 +17,8 @@ package baritone.api.schematic; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.EnumFacing; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.state.BlockState; import java.util.List; @@ -44,11 +44,11 @@ public interface ISchematic { * @param currentState The current state of that block in the world, or null * @return Whether or not the specified position is within the bounds of this schematic */ - default boolean inSchematic(int x, int y, int z, IBlockState currentState) { + default boolean inSchematic(int x, int y, int z, BlockState currentState) { return x >= 0 && x < widthX() && y >= 0 && y < heightY() && z >= 0 && z < lengthZ(); } - default int size(EnumFacing.Axis axis) { + default int size(Direction.Axis axis) { switch (axis) { case X: return widthX(); @@ -71,7 +71,7 @@ default int size(EnumFacing.Axis axis) { * @param approxPlaceable The list of blockstates estimated to be placeable * @return The desired block state at the specified position */ - IBlockState desiredState(int x, int y, int z, IBlockState current, List approxPlaceable); + BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable); /** * Resets possible caches to avoid wrong behavior when moving the schematic around diff --git a/src/api/java/baritone/api/schematic/IStaticSchematic.java b/src/api/java/baritone/api/schematic/IStaticSchematic.java index 43fad7036..a1f6b54f3 100644 --- a/src/api/java/baritone/api/schematic/IStaticSchematic.java +++ b/src/api/java/baritone/api/schematic/IStaticSchematic.java @@ -17,7 +17,7 @@ package baritone.api.schematic; -import net.minecraft.block.state.IBlockState; +import net.minecraft.world.level.block.state.BlockState; /** * A static schematic is capable of providing the desired state at a given position without @@ -30,7 +30,7 @@ public interface IStaticSchematic extends ISchematic { /** - * Gets the {@link IBlockState} for a given position in this schematic. It should be guaranteed + * Gets the {@link BlockState} for a given position in this schematic. It should be guaranteed * that the return value of this method will not change given that the parameters are the same. * * @param x The X block position @@ -38,19 +38,19 @@ public interface IStaticSchematic extends ISchematic { * @param z The Z block position * @return The desired state at the specified position. */ - IBlockState getDirect(int x, int y, int z); + BlockState getDirect(int x, int y, int z); /** - * Returns an {@link IBlockState} array of size {@link #heightY()} which contains all - * desired block states in the specified vertical column. The index of {@link IBlockState}s + * Returns an {@link BlockState} array of size {@link #heightY()} which contains all + * desired block states in the specified vertical column. The index of {@link BlockState}s * in the array are equivalent to their Y position in the schematic. * * @param x The X column position * @param z The Z column position - * @return An {@link IBlockState} array + * @return An {@link BlockState} array */ - default IBlockState[] getColumn(int x, int z) { - IBlockState[] column = new IBlockState[this.heightY()]; + default BlockState[] getColumn(int x, int z) { + BlockState[] column = new BlockState[this.heightY()]; for (int i = 0; i < this.heightY(); i++) { column[i] = getDirect(x, i, z); } diff --git a/src/api/java/baritone/api/schematic/MaskSchematic.java b/src/api/java/baritone/api/schematic/MaskSchematic.java index 229f58d5b..954d7973c 100644 --- a/src/api/java/baritone/api/schematic/MaskSchematic.java +++ b/src/api/java/baritone/api/schematic/MaskSchematic.java @@ -17,7 +17,7 @@ package baritone.api.schematic; -import net.minecraft.block.state.IBlockState; +import net.minecraft.world.level.block.state.BlockState; import java.util.List; @@ -30,15 +30,15 @@ public MaskSchematic(ISchematic schematic) { this.schematic = schematic; } - protected abstract boolean partOfMask(int x, int y, int z, IBlockState currentState); + protected abstract boolean partOfMask(int x, int y, int z, BlockState currentState); @Override - public boolean inSchematic(int x, int y, int z, IBlockState currentState) { + public boolean inSchematic(int x, int y, int z, BlockState currentState) { return schematic.inSchematic(x, y, z, currentState) && partOfMask(x, y, z, currentState); } @Override - public IBlockState desiredState(int x, int y, int z, IBlockState current, List approxPlaceable) { + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { return schematic.desiredState(x, y, z, current, approxPlaceable); } } diff --git a/src/api/java/baritone/api/schematic/ReplaceSchematic.java b/src/api/java/baritone/api/schematic/ReplaceSchematic.java index f8cd6656b..52389ed1a 100644 --- a/src/api/java/baritone/api/schematic/ReplaceSchematic.java +++ b/src/api/java/baritone/api/schematic/ReplaceSchematic.java @@ -18,7 +18,7 @@ package baritone.api.schematic; import baritone.api.utils.BlockOptionalMetaLookup; -import net.minecraft.block.state.IBlockState; +import net.minecraft.world.level.block.state.BlockState; public class ReplaceSchematic extends MaskSchematic { @@ -44,7 +44,7 @@ public void reset() { } @Override - protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { if (cache[x][y][z] == null) { cache[x][y][z] = filter.has(currentState); } diff --git a/src/api/java/baritone/api/schematic/ShellSchematic.java b/src/api/java/baritone/api/schematic/ShellSchematic.java index 275a4926d..b61390bdd 100644 --- a/src/api/java/baritone/api/schematic/ShellSchematic.java +++ b/src/api/java/baritone/api/schematic/ShellSchematic.java @@ -17,7 +17,7 @@ package baritone.api.schematic; -import net.minecraft.block.state.IBlockState; +import net.minecraft.world.level.block.state.BlockState; public class ShellSchematic extends MaskSchematic { @@ -26,7 +26,7 @@ public ShellSchematic(ISchematic schematic) { } @Override - protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { return x == 0 || y == 0 || z == 0 || x == widthX() - 1 || y == heightY() - 1 || z == lengthZ() - 1; } } diff --git a/src/api/java/baritone/api/schematic/SubstituteSchematic.java b/src/api/java/baritone/api/schematic/SubstituteSchematic.java index 72787c243..8013d838d 100644 --- a/src/api/java/baritone/api/schematic/SubstituteSchematic.java +++ b/src/api/java/baritone/api/schematic/SubstituteSchematic.java @@ -17,11 +17,12 @@ package baritone.api.schematic; -import net.minecraft.block.Block; -import net.minecraft.block.BlockAir; -import net.minecraft.block.properties.IProperty; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.Property; + import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -31,7 +32,7 @@ public class SubstituteSchematic extends AbstractSchematic { private final ISchematic schematic; private final Map> substitutions; - private final Map> blockStateCache = new HashMap<>(); + private final Map> blockStateCache = new HashMap<>(); public SubstituteSchematic(ISchematic schematic, Map> substitutions) { super(schematic.widthX(), schematic.heightY(), schematic.lengthZ()); @@ -40,50 +41,51 @@ public SubstituteSchematic(ISchematic schematic, Map> substitu } @Override - public boolean inSchematic(int x, int y, int z, IBlockState currentState) { + public boolean inSchematic(int x, int y, int z, BlockState currentState) { return schematic.inSchematic(x, y, z, currentState); } @Override - public IBlockState desiredState(int x, int y, int z, IBlockState current, List approxPlaceable) { - IBlockState desired = schematic.desiredState(x, y, z, current, approxPlaceable); + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { + BlockState desired = schematic.desiredState(x, y, z, current, approxPlaceable); Block desiredBlock = desired.getBlock(); if (!substitutions.containsKey(desiredBlock)) { return desired; } List substitutes = substitutions.get(desiredBlock); - if (substitutes.contains(current.getBlock()) && !(current.getBlock() instanceof BlockAir)) {// don't preserve air, it's almost always there and almost never wanted + if (substitutes.contains(current.getBlock()) && !(current.getBlock() instanceof AirBlock)) {// don't preserve air, it's almost always there and almost never wanted return withBlock(desired, current.getBlock()); } for (Block substitute : substitutes) { - if (substitute instanceof BlockAir) { - return current.getBlock() instanceof BlockAir ? current : Blocks.AIR.getDefaultState(); // can always "place" air + if (substitute instanceof AirBlock) { + return current.getBlock() instanceof AirBlock ? current : Blocks.AIR.defaultBlockState(); // can always "place" air } - for (IBlockState placeable : approxPlaceable) { + for (BlockState placeable : approxPlaceable) { if (substitute.equals(placeable.getBlock())) { return withBlock(desired, placeable.getBlock()); } } } - return substitutes.get(0).getDefaultState(); + return substitutes.get(0).defaultBlockState(); } - private IBlockState withBlock(IBlockState state, Block block) { + private BlockState withBlock(BlockState state, Block block) { if (blockStateCache.containsKey(state) && blockStateCache.get(state).containsKey(block)) { return blockStateCache.get(state).get(block); } - Collection> properties = state.getPropertyKeys(); - IBlockState newState = block.getDefaultState(); - for (IProperty property : properties) { + Collection> properties = state.getProperties(); + BlockState newState = block.defaultBlockState(); + for (Property property : properties) { try { newState = copySingleProp(state, newState, property); } catch (IllegalArgumentException e) { //property does not exist for target block } } - blockStateCache.computeIfAbsent(state, s -> new HashMap()).put(block, newState); + blockStateCache.computeIfAbsent(state, s -> new HashMap()).put(block, newState); return newState; } - private > IBlockState copySingleProp(IBlockState fromState, IBlockState toState, IProperty prop) { - return toState.withProperty(prop, fromState.getValue(prop)); + + private > BlockState copySingleProp(BlockState fromState, BlockState toState, Property prop) { + return toState.setValue(prop, fromState.getValue(prop)); } } diff --git a/src/api/java/baritone/api/schematic/WallsSchematic.java b/src/api/java/baritone/api/schematic/WallsSchematic.java index 6e1cfa5f5..a292a7321 100644 --- a/src/api/java/baritone/api/schematic/WallsSchematic.java +++ b/src/api/java/baritone/api/schematic/WallsSchematic.java @@ -17,7 +17,7 @@ package baritone.api.schematic; -import net.minecraft.block.state.IBlockState; +import net.minecraft.world.level.block.state.BlockState; public class WallsSchematic extends MaskSchematic { @@ -26,7 +26,7 @@ public WallsSchematic(ISchematic schematic) { } @Override - protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { return x == 0 || z == 0 || x == widthX() - 1 || z == lengthZ() - 1; } } diff --git a/src/api/java/baritone/api/selection/ISelection.java b/src/api/java/baritone/api/selection/ISelection.java index 59651feb0..a347cad9a 100644 --- a/src/api/java/baritone/api/selection/ISelection.java +++ b/src/api/java/baritone/api/selection/ISelection.java @@ -18,9 +18,9 @@ package baritone.api.selection; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.Vec3i; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.world.phys.AABB; /** * A selection is an immutable object representing the current selection. The selection is commonly used for certain @@ -54,9 +54,9 @@ public interface ISelection { Vec3i size(); /** - * @return An {@link AxisAlignedBB} encompassing all blocks in this selection. + * @return An {@link AABB} encompassing all blocks in this selection. */ - AxisAlignedBB aabb(); + AABB aabb(); /** * Returns a new {@link ISelection} expanded in the specified direction by the specified number of blocks. @@ -65,7 +65,7 @@ public interface ISelection { * @param blocks How many blocks to expand it. * @return A new selection, expanded as specified. */ - ISelection expand(EnumFacing direction, int blocks); + ISelection expand(Direction direction, int blocks); /** * Returns a new {@link ISelection} contracted in the specified direction by the specified number of blocks. @@ -77,7 +77,7 @@ public interface ISelection { * @param blocks How many blocks to contract it. * @return A new selection, contracted as specified. */ - ISelection contract(EnumFacing direction, int blocks); + ISelection contract(Direction direction, int blocks); /** * Returns a new {@link ISelection} shifted in the specified direction by the specified number of blocks. This moves @@ -87,5 +87,5 @@ public interface ISelection { * @param blocks How many blocks to shift it. * @return A new selection, shifted as specified. */ - ISelection shift(EnumFacing direction, int blocks); + ISelection shift(Direction direction, int blocks); } diff --git a/src/api/java/baritone/api/selection/ISelectionManager.java b/src/api/java/baritone/api/selection/ISelectionManager.java index de5ee2887..85e67429e 100644 --- a/src/api/java/baritone/api/selection/ISelectionManager.java +++ b/src/api/java/baritone/api/selection/ISelectionManager.java @@ -18,7 +18,7 @@ package baritone.api.selection; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.EnumFacing; +import net.minecraft.core.Direction; /** * The selection manager handles setting Baritone's selections. You can set the selection here, as well as retrieving @@ -87,7 +87,7 @@ public interface ISelectionManager { * @param blocks How many blocks to expand it. * @return The new selection, expanded as specified. */ - ISelection expand(ISelection selection, EnumFacing direction, int blocks); + ISelection expand(ISelection selection, Direction direction, int blocks); /** * Replaces the specified {@link ISelection} with one contracted in the specified direction by the specified number @@ -101,7 +101,7 @@ public interface ISelectionManager { * @param blocks How many blocks to contract it. * @return The new selection, contracted as specified. */ - ISelection contract(ISelection selection, EnumFacing direction, int blocks); + ISelection contract(ISelection selection, Direction direction, int blocks); /** * Replaces the specified {@link ISelection} with one shifted in the specified direction by the specified number of @@ -112,5 +112,5 @@ public interface ISelectionManager { * @param blocks How many blocks to shift it. * @return The new selection, shifted as specified. */ - ISelection shift(ISelection selection, EnumFacing direction, int blocks); + ISelection shift(ISelection selection, Direction direction, int blocks); } diff --git a/src/api/java/baritone/api/utils/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java index a9b02445b..676398887 100644 --- a/src/api/java/baritone/api/utils/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -17,10 +17,10 @@ package baritone.api.utils; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3i; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.util.Mth; import javax.annotation.Nonnull; @@ -49,7 +49,7 @@ public BetterBlockPos(int x, int y, int z) { } public BetterBlockPos(double x, double y, double z) { - this(MathHelper.floor(x), MathHelper.floor(y), MathHelper.floor(z)); + this(Mth.floor(x), Mth.floor(y), Mth.floor(z)); } public BetterBlockPos(BlockPos pos) { @@ -116,49 +116,49 @@ public boolean equals(Object o) { } @Override - public BetterBlockPos up() { + public BetterBlockPos above() { // this is unimaginably faster than blockpos.up // that literally calls // this.up(1) - // which calls this.offset(EnumFacing.UP, 1) + // which calls this.offset(Direction.UP, 1) // which does return n == 0 ? this : new BlockPos(this.getX() + facing.getXOffset() * n, this.getY() + facing.getYOffset() * n, this.getZ() + facing.getZOffset() * n); - // how many function calls is that? up(), up(int), offset(EnumFacing, int), new BlockPos, getX, getXOffset, getY, getYOffset, getZ, getZOffset + // how many function calls is that? up(), up(int), offset(Direction, int), new BlockPos, getX, getXOffset, getY, getYOffset, getZ, getZOffset // that's ten. // this is one function call. return new BetterBlockPos(x, y + 1, z); } @Override - public BetterBlockPos up(int amt) { + public BetterBlockPos above(int amt) { // see comment in up() return amt == 0 ? this : new BetterBlockPos(x, y + amt, z); } @Override - public BetterBlockPos down() { + public BetterBlockPos below() { // see comment in up() return new BetterBlockPos(x, y - 1, z); } @Override - public BetterBlockPos down(int amt) { + public BetterBlockPos below(int amt) { // see comment in up() return amt == 0 ? this : new BetterBlockPos(x, y - amt, z); } @Override - public BetterBlockPos offset(EnumFacing dir) { - Vec3i vec = dir.getDirectionVec(); + public BetterBlockPos relative(Direction dir) { + Vec3i vec = dir.getNormal(); return new BetterBlockPos(x + vec.getX(), y + vec.getY(), z + vec.getZ()); } @Override - public BetterBlockPos offset(EnumFacing dir, int dist) { + public BetterBlockPos relative(Direction dir, int dist) { if (dist == 0) { return this; } - Vec3i vec = dir.getDirectionVec(); + Vec3i vec = dir.getNormal(); return new BetterBlockPos(x + vec.getX() * dist, y + vec.getY() * dist, z + vec.getZ() * dist); } diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index a9a34a4aa..847f22d41 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -19,46 +19,54 @@ import baritone.api.utils.accessor.IItemStack; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.*; -import net.minecraft.block.properties.IProperty; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; +import io.netty.util.concurrent.ThreadPerTaskExecutor; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.packs.PackResources; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.repository.PackRepository; +import net.minecraft.server.packs.repository.ServerPacksSource; +import net.minecraft.server.packs.resources.ReloadableResourceManager; +import net.minecraft.util.RandomSource; +import net.minecraft.util.Unit; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootTables; +import net.minecraft.world.level.storage.loot.PredicateManager; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.phys.Vec3; import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.*; -import java.util.function.Consumer; +import java.util.concurrent.CompletableFuture; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; public final class BlockOptionalMeta { private final Block block; - private final int meta; - private final boolean noMeta; - private final Set blockstates; + private static LootTables manager; private final ImmutableSet stateHashes; private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); - private static final Map normalizations; + private static PredicateManager predicate = new PredicateManager(); + private static Map> drops = new HashMap<>(); + private final Set blockstates; - public BlockOptionalMeta(@Nonnull Block block, @Nullable Integer meta) { + public BlockOptionalMeta(@Nonnull Block block) { this.block = block; - this.noMeta = meta == null; - this.meta = noMeta ? 0 : meta; - this.blockstates = getStates(block, meta); + this.blockstates = getStates(block); this.stateHashes = getStateHashes(blockstates); this.stackHashes = getStackHashes(blockstates); } - public BlockOptionalMeta(@Nonnull Block block) { - this(block, null); - } - public BlockOptionalMeta(@Nonnull String selector) { Matcher matcher = pattern.matcher(selector); @@ -67,204 +75,33 @@ public BlockOptionalMeta(@Nonnull String selector) { } MatchResult matchResult = matcher.toMatchResult(); - noMeta = matchResult.group(2) == null; - ResourceLocation id = new ResourceLocation(matchResult.group(1)); - - if (!Block.REGISTRY.containsKey(id)) { - throw new IllegalArgumentException("Invalid block ID"); - } - - block = Block.REGISTRY.getObject(id); - meta = noMeta ? 0 : Integer.parseInt(matchResult.group(2)); - blockstates = getStates(block, getMeta()); + block = BlockUtils.stringToBlockRequired(matchResult.group(1)); + blockstates = getStates(block); stateHashes = getStateHashes(blockstates); stackHashes = getStackHashes(blockstates); } - static { - Map _normalizations = new HashMap<>(); - Consumer put = instance -> _normalizations.put(instance.getClass(), instance); - put.accept(EnumFacing.NORTH); - put.accept(EnumFacing.Axis.Y); - put.accept(BlockLog.EnumAxis.Y); - put.accept(BlockStairs.EnumHalf.BOTTOM); - put.accept(BlockStairs.EnumShape.STRAIGHT); - put.accept(BlockLever.EnumOrientation.DOWN_X); - put.accept(BlockDoublePlant.EnumBlockHalf.LOWER); - put.accept(BlockSlab.EnumBlockHalf.BOTTOM); - put.accept(BlockDoor.EnumDoorHalf.LOWER); - put.accept(BlockDoor.EnumHingePosition.LEFT); - put.accept(BlockBed.EnumPartType.HEAD); - put.accept(BlockRailBase.EnumRailDirection.NORTH_SOUTH); - put.accept(BlockTrapDoor.DoorHalf.BOTTOM); - _normalizations.put(BlockBanner.ROTATION, 0); - _normalizations.put(BlockBed.OCCUPIED, false); - _normalizations.put(BlockBrewingStand.HAS_BOTTLE[0], false); - _normalizations.put(BlockBrewingStand.HAS_BOTTLE[1], false); - _normalizations.put(BlockBrewingStand.HAS_BOTTLE[2], false); - _normalizations.put(BlockButton.POWERED, false); - // _normalizations.put(BlockCactus.AGE, 0); - // _normalizations.put(BlockCauldron.LEVEL, 0); - // _normalizations.put(BlockChorusFlower.AGE, 0); - _normalizations.put(BlockChorusPlant.NORTH, false); - _normalizations.put(BlockChorusPlant.EAST, false); - _normalizations.put(BlockChorusPlant.SOUTH, false); - _normalizations.put(BlockChorusPlant.WEST, false); - _normalizations.put(BlockChorusPlant.UP, false); - _normalizations.put(BlockChorusPlant.DOWN, false); - // _normalizations.put(BlockCocoa.AGE, 0); - // _normalizations.put(BlockCrops.AGE, 0); - _normalizations.put(BlockDirt.SNOWY, false); - _normalizations.put(BlockDoor.OPEN, false); - _normalizations.put(BlockDoor.POWERED, false); - // _normalizations.put(BlockFarmland.MOISTURE, 0); - _normalizations.put(BlockFence.NORTH, false); - _normalizations.put(BlockFence.EAST, false); - _normalizations.put(BlockFence.WEST, false); - _normalizations.put(BlockFence.SOUTH, false); - // _normalizations.put(BlockFenceGate.POWERED, false); - // _normalizations.put(BlockFenceGate.IN_WALL, false); - _normalizations.put(BlockFire.AGE, 0); - _normalizations.put(BlockFire.NORTH, false); - _normalizations.put(BlockFire.EAST, false); - _normalizations.put(BlockFire.SOUTH, false); - _normalizations.put(BlockFire.WEST, false); - _normalizations.put(BlockFire.UPPER, false); - // _normalizations.put(BlockFrostedIce.AGE, 0); - _normalizations.put(BlockGrass.SNOWY, false); - // _normalizations.put(BlockHopper.ENABLED, true); - // _normalizations.put(BlockLever.POWERED, false); - // _normalizations.put(BlockLiquid.LEVEL, 0); - // _normalizations.put(BlockMycelium.SNOWY, false); - // _normalizations.put(BlockNetherWart.AGE, false); - _normalizations.put(BlockLeaves.CHECK_DECAY, false); - // _normalizations.put(BlockLeaves.DECAYABLE, false); - // _normalizations.put(BlockObserver.POWERED, false); - _normalizations.put(BlockPane.NORTH, false); - _normalizations.put(BlockPane.EAST, false); - _normalizations.put(BlockPane.WEST, false); - _normalizations.put(BlockPane.SOUTH, false); - // _normalizations.put(BlockPistonBase.EXTENDED, false); - // _normalizations.put(BlockPressurePlate.POWERED, false); - // _normalizations.put(BlockPressurePlateWeighted.POWER, false); - _normalizations.put(BlockQuartz.EnumType.LINES_X, BlockQuartz.EnumType.LINES_Y); - _normalizations.put(BlockQuartz.EnumType.LINES_Z, BlockQuartz.EnumType.LINES_Y); - // _normalizations.put(BlockRailDetector.POWERED, false); - // _normalizations.put(BlockRailPowered.POWERED, false); - _normalizations.put(BlockRedstoneWire.NORTH, false); - _normalizations.put(BlockRedstoneWire.EAST, false); - _normalizations.put(BlockRedstoneWire.SOUTH, false); - _normalizations.put(BlockRedstoneWire.WEST, false); - // _normalizations.put(BlockReed.AGE, false); - _normalizations.put(BlockSapling.STAGE, 0); - _normalizations.put(BlockSkull.NODROP, false); - _normalizations.put(BlockStandingSign.ROTATION, 0); - _normalizations.put(BlockStem.AGE, 0); - _normalizations.put(BlockTripWire.NORTH, false); - _normalizations.put(BlockTripWire.EAST, false); - _normalizations.put(BlockTripWire.WEST, false); - _normalizations.put(BlockTripWire.SOUTH, false); - _normalizations.put(BlockVine.NORTH, false); - _normalizations.put(BlockVine.EAST, false); - _normalizations.put(BlockVine.SOUTH, false); - _normalizations.put(BlockVine.WEST, false); - _normalizations.put(BlockVine.UP, false); - _normalizations.put(BlockWall.UP, false); - _normalizations.put(BlockWall.NORTH, false); - _normalizations.put(BlockWall.EAST, false); - _normalizations.put(BlockWall.WEST, false); - _normalizations.put(BlockWall.SOUTH, false); - normalizations = Collections.unmodifiableMap(_normalizations); - } - - public static , P extends IProperty> P castToIProperty(Object value) { - //noinspection unchecked - return (P) value; - } - - public static , P extends IProperty> C castToIPropertyValue(P iproperty, Object value) { - //noinspection unchecked - return (C) value; + private static Set getStates(@Nonnull Block block) { + return new HashSet<>(block.getStateDefinition().getPossibleStates()); } - /** - * Normalizes the specified blockstate by setting meta-affecting properties which - * are not being targeted by the meta parameter to their default values. - *

- * For example, block variant/color is the primary target for the meta value, so properties - * such as rotation/facing direction will be set to default values in order to nullify - * the effect that they have on the state's meta value. - * - * @param state The state to normalize - * @return The normalized block state - */ - public static IBlockState normalize(IBlockState state) { - IBlockState newState = state; - - for (IProperty property : state.getProperties().keySet()) { - Class valueClass = property.getValueClass(); - if (normalizations.containsKey(property)) { - try { - newState = newState.withProperty( - castToIProperty(property), - castToIPropertyValue(property, normalizations.get(property)) - ); - } catch (IllegalArgumentException ignored) {} - } else if (normalizations.containsKey(state.getValue(property))) { - try { - newState = newState.withProperty( - castToIProperty(property), - castToIPropertyValue(property, normalizations.get(state.getValue(property))) - ); - } catch (IllegalArgumentException ignored) {} - } else if (normalizations.containsKey(valueClass)) { - try { - newState = newState.withProperty( - castToIProperty(property), - castToIPropertyValue(property, normalizations.get(valueClass)) - ); - } catch (IllegalArgumentException ignored) {} - } - } - - return newState; - } - - /** - * Evaluate the target meta value for the specified state. The target meta value is - * most often that which is influenced by the variant/color property of the block state. - * - * @param state The state to check - * @return The target meta of the state - * @see #normalize(IBlockState) - */ - public static int stateMeta(IBlockState state) { - return state.getBlock().getMetaFromState(normalize(state)); - } - - private static Set getStates(@Nonnull Block block, @Nullable Integer meta) { - return block.getBlockState().getValidStates().stream() - .filter(blockstate -> meta == null || stateMeta(blockstate) == meta) - .collect(Collectors.toSet()); - } - - private static ImmutableSet getStateHashes(Set blockstates) { + private static ImmutableSet getStateHashes(Set blockstates) { return ImmutableSet.copyOf( blockstates.stream() - .map(IBlockState::hashCode) + .map(BlockState::hashCode) .toArray(Integer[]::new) ); } - private static ImmutableSet getStackHashes(Set blockstates) { + private static ImmutableSet getStackHashes(Set blockstates) { //noinspection ConstantConditions return ImmutableSet.copyOf( blockstates.stream() - .map(state -> new ItemStack( - state.getBlock().getItemDropped(state, new Random(), 0), - state.getBlock().damageDropped(state) - )) + .flatMap(state -> drops(state.getBlock()) + .stream() + .map(item -> new ItemStack(item, 1)) + ) .map(stack -> ((IItemStack) (Object) stack).getBaritoneHash()) .toArray(Integer[]::new) ); @@ -274,15 +111,56 @@ public Block getBlock() { return block; } - public Integer getMeta() { - return noMeta ? null : meta; - } - public boolean matches(@Nonnull Block block) { return block == this.block; } - public boolean matches(@Nonnull IBlockState blockstate) { + public static LootTables getManager() { + if (manager == null) { + PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource()); + rpl.reload(); + PackResources thePack = rpl.getAvailablePacks().iterator().next().open(); + ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); + manager = new LootTables(predicate); + resourceManager.registerReloadListener(manager); + try { + resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), Collections.singletonList(thePack)).done().get(); + } catch (Exception exception) { + throw new RuntimeException(exception); + } + } + return manager; + } + + public static PredicateManager getPredicateManager() { + return predicate; + } + + private static synchronized List drops(Block b) { + return drops.computeIfAbsent(b, block -> { + ResourceLocation lootTableLocation = block.getLootTable(); + if (lootTableLocation == BuiltInLootTables.EMPTY) { + return Collections.emptyList(); + } else { + List items = new ArrayList<>(); + + // the other overload for generate doesnt work in forge because forge adds code that requires a non null world + getManager().get(lootTableLocation).getRandomItems( + new LootContext.Builder((ServerLevel) null) + .withRandom(RandomSource.create()) + .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) + .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) + .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) + .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) + .create(LootContextParamSets.BLOCK), + stack -> items.add(stack.getItem()) + ); + return items; + } + }); + } + + public boolean matches(@Nonnull BlockState blockstate) { Block block = blockstate.getBlock(); return block == this.block && stateHashes.contains(blockstate.hashCode()); } @@ -291,24 +169,17 @@ public boolean matches(ItemStack stack) { //noinspection ConstantConditions int hash = ((IItemStack) (Object) stack).getBaritoneHash(); - if (noMeta) { - hash -= stack.getItemDamage(); - } + hash -= stack.getDamageValue(); return stackHashes.contains(hash); } @Override public String toString() { - return String.format("BlockOptionalMeta{block=%s,meta=%s}", block, getMeta()); - } - - public static IBlockState blockStateFromStack(ItemStack stack) { - //noinspection deprecation - return Block.getBlockFromItem(stack.getItem()).getStateFromMeta(stack.getMetadata()); + return String.format("BlockOptionalMeta{block=%s}", block); } - public IBlockState getAnyBlockState() { + public BlockState getAnyBlockState() { if (blockstates.size() > 0) { return blockstates.iterator().next(); } diff --git a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java index 041c6162c..86d19ff5e 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java @@ -17,9 +17,9 @@ package baritone.api.utils; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import java.util.Arrays; import java.util.List; @@ -61,7 +61,7 @@ public boolean has(Block block) { return false; } - public boolean has(IBlockState state) { + public boolean has(BlockState state) { for (BlockOptionalMeta bom : boms) { if (bom.matches(state)) { return true; diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index 43a97f831..002c8126a 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -17,8 +17,9 @@ package baritone.api.utils; -import net.minecraft.block.Block; -import net.minecraft.util.ResourceLocation; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; import java.util.HashMap; import java.util.Map; @@ -28,7 +29,7 @@ public class BlockUtils { private static transient Map resourceCache = new HashMap<>(); public static String blockToString(Block block) { - ResourceLocation loc = Block.REGISTRY.getNameForObject(block); + ResourceLocation loc = Registry.BLOCK.getKey(block); String name = loc.getPath(); // normally, only write the part after the minecraft: if (!loc.getNamespace().equals("minecraft")) { // Baritone is running on top of forge with mods installed, perhaps? @@ -56,7 +57,7 @@ public static Block stringToBlockNullable(String name) { if (resourceCache.containsKey(name)) { return null; // cached as null } - block = Block.getBlockFromName(name.contains(":") ? name : "minecraft:" + name); + block = Registry.BLOCK.getOptional(ResourceLocation.tryParse(name.contains(":") ? name : "minecraft:" + name)).orElse(null); Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); resourceCache = copy; diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 9bed37383..354863921 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -18,10 +18,10 @@ package baritone.api.utils; import baritone.api.BaritoneAPI; +import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import java.util.Arrays; import java.util.Calendar; @@ -44,21 +44,21 @@ public interface Helper { /** * Instance of the game */ - Minecraft mc = Minecraft.getMinecraft(); + Minecraft mc = Minecraft.getInstance(); - static ITextComponent getPrefix() { + static Component getPrefix() { // Inner text component final Calendar now = Calendar.getInstance(); final boolean xd = now.get(Calendar.MONTH) == Calendar.APRIL && now.get(Calendar.DAY_OF_MONTH) <= 3; - ITextComponent baritone = new TextComponentString(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); - baritone.getStyle().setColor(TextFormatting.LIGHT_PURPLE); + MutableComponent baritone = Component.literal(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); + baritone.setStyle(baritone.getStyle().withColor(ChatFormatting.LIGHT_PURPLE)); // Outer brackets - ITextComponent prefix = new TextComponentString(""); - prefix.getStyle().setColor(TextFormatting.DARK_PURPLE); - prefix.appendText("["); - prefix.appendSibling(baritone); - prefix.appendText("]"); + MutableComponent prefix = Component.literal(""); + prefix.setStyle(baritone.getStyle().withColor(ChatFormatting.DARK_PURPLE)); + prefix.append("["); + prefix.append(baritone); + prefix.append("]"); return prefix; } @@ -69,8 +69,8 @@ static ITextComponent getPrefix() { * @param title The title to display in the popup * @param message The message to display in the popup */ - default void logToast(ITextComponent title, ITextComponent message) { - mc.addScheduledTask(() -> BaritoneAPI.getSettings().toaster.value.accept(title, message)); + default void logToast(Component title, Component message) { + mc.execute(() -> BaritoneAPI.getSettings().toaster.value.accept(title, message)); } /** @@ -80,7 +80,7 @@ default void logToast(ITextComponent title, ITextComponent message) { * @param message The message to display in the popup */ default void logToast(String title, String message) { - logToast(new TextComponentString(title), new TextComponentString(message)); + logToast(Component.literal(title), Component.literal(message)); } /** @@ -89,7 +89,7 @@ default void logToast(String title, String message) { * @param message The message to display in the popup */ default void logToast(String message) { - logToast(Helper.getPrefix(), new TextComponentString(message)); + logToast(Helper.getPrefix(), Component.literal(message)); } /** @@ -131,7 +131,7 @@ default void logNotificationDirect(String message) { * @param error Whether to log as an error */ default void logNotificationDirect(String message, boolean error) { - mc.addScheduledTask(() -> BaritoneAPI.getSettings().notifier.value.accept(message, error)); + mc.execute(() -> BaritoneAPI.getSettings().notifier.value.accept(message, error)); } /** @@ -156,19 +156,15 @@ default void logDebug(String message) { * @param logAsToast Whether to log as a toast notification * @param components The components to send */ - default void logDirect(boolean logAsToast, ITextComponent... components) { - ITextComponent component = new TextComponentString(""); - if (!logAsToast) { - // If we are not logging as a Toast - // Append the prefix to the base component line - component.appendSibling(getPrefix()); - component.appendSibling(new TextComponentString(" ")); - } - Arrays.asList(components).forEach(component::appendSibling); + default void logDirect(boolean logAsToast, Component... components) { + MutableComponent component = Component.literal(""); + component.append(getPrefix()); + component.append(Component.literal(" ")); + Arrays.asList(components).forEach(component::append); if (logAsToast) { logToast(getPrefix(), component); } else { - mc.addScheduledTask(() -> BaritoneAPI.getSettings().logger.value.accept(component)); + mc.execute(() -> BaritoneAPI.getSettings().logger.value.accept(component)); } } @@ -177,7 +173,7 @@ default void logDirect(boolean logAsToast, ITextComponent... components) { * * @param components The components to send */ - default void logDirect(ITextComponent... components) { + default void logDirect(Component... components) { logDirect(BaritoneAPI.getSettings().logAsToast.value, components); } @@ -189,10 +185,10 @@ default void logDirect(ITextComponent... components) { * @param color The color to print that message in * @param logAsToast Whether to log as a toast notification */ - default void logDirect(String message, TextFormatting color, boolean logAsToast) { + default void logDirect(String message, ChatFormatting color, boolean logAsToast) { Stream.of(message.split("\n")).forEach(line -> { - ITextComponent component = new TextComponentString(line.replace("\t", " ")); - component.getStyle().setColor(color); + MutableComponent component = Component.literal(line.replace("\t", " ")); + component.setStyle(component.getStyle().withColor(color)); logDirect(logAsToast, component); }); } @@ -204,7 +200,7 @@ default void logDirect(String message, TextFormatting color, boolean logAsToast) * @param message The message to display in chat * @param color The color to print that message in */ - default void logDirect(String message, TextFormatting color) { + default void logDirect(String message, ChatFormatting color) { logDirect(message, color, BaritoneAPI.getSettings().logAsToast.value); } @@ -216,7 +212,7 @@ default void logDirect(String message, TextFormatting color) { * @param logAsToast Whether to log as a toast notification */ default void logDirect(String message, boolean logAsToast) { - logDirect(message, TextFormatting.GRAY, logAsToast); + logDirect(message, ChatFormatting.GRAY, logAsToast); } /** diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index fcc4c81cc..40eb62bd2 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -18,14 +18,19 @@ package baritone.api.utils; import baritone.api.cache.IWorldData; -import net.minecraft.block.BlockSlab; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; import java.util.Optional; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; /** * @author Brady @@ -33,19 +38,32 @@ */ public interface IPlayerContext { - EntityPlayerSP player(); + static double eyeHeight(boolean ifSneaking) { + return ifSneaking ? 1.27 : 1.62; + } IPlayerController playerController(); - World world(); + LocalPlayer player(); + + Level world(); + + default Iterable entities() { + return ((ClientLevel) world()).entitiesForRendering(); + } + IWorldData worldData(); - RayTraceResult objectMouseOver(); + default Stream entitiesStream() { + return StreamSupport.stream(entities().spliterator(), false); + } + + HitResult objectMouseOver(); default BetterBlockPos playerFeet() { // TODO find a better way to deal with soul sand!!!!! - BetterBlockPos feet = new BetterBlockPos(player().posX, player().posY + 0.1251, player().posZ); + BetterBlockPos feet = new BetterBlockPos(player().position().x, player().position().y + 0.1251, player().position().z); // sometimes when calling this from another thread or while world is null, it'll throw a NullPointerException // that causes the game to immediately crash @@ -56,28 +74,25 @@ default BetterBlockPos playerFeet() { // this does not impact performance at all since we're not null checking constantly // if there is an exception, the only overhead is Java generating the exception object... so we can ignore it try { - if (world().getBlockState(feet).getBlock() instanceof BlockSlab) { - return feet.up(); + if (world().getBlockState(feet).getBlock() instanceof SlabBlock) { + return feet.above(); } - } catch (NullPointerException ignored) {} + } catch (NullPointerException ignored) { + } return feet; } - default Vec3d playerFeetAsVec() { - return new Vec3d(player().posX, player().posY, player().posZ); + default Vec3 playerFeetAsVec() { + return new Vec3(player().position().x, player().position().y, player().position().z); } - default Vec3d playerHead() { - return new Vec3d(player().posX, player().posY + player().getEyeHeight(), player().posZ); + default Vec3 playerHead() { + return new Vec3(player().position().x, player().position().y + player().getEyeHeight(), player().position().z); } default Rotation playerRotations() { - return new Rotation(player().rotationYaw, player().rotationPitch); - } - - static double eyeHeight(boolean ifSneaking) { - return ifSneaking ? 1.54 : 1.62; + return new Rotation(player().getYRot(), player().getXRot()); } /** @@ -86,9 +101,9 @@ static double eyeHeight(boolean ifSneaking) { * @return The position of the highlighted block */ default Optional getSelectedBlock() { - RayTraceResult result = objectMouseOver(); - if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) { - return Optional.of(result.getBlockPos()); + HitResult result = objectMouseOver(); + if (result != null && result.getType() == HitResult.Type.BLOCK) { + return Optional.of(((BlockHitResult) result).getBlockPos()); } return Optional.empty(); } diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index d6fa1837a..48142d13b 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -18,17 +18,16 @@ package baritone.api.utils; import baritone.api.BaritoneAPI; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.ClickType; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.GameType; -import net.minecraft.world.World; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.level.GameType; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; /** * @author Brady @@ -40,19 +39,19 @@ public interface IPlayerController { boolean hasBrokenBlock(); - boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side); + boolean onPlayerDamageBlock(BlockPos pos, Direction side); void resetBlockRemoving(); - ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, EntityPlayer player); + void windowClick(int windowId, int slotId, int mouseButton, ClickType type, Player player); GameType getGameType(); - EnumActionResult processRightClickBlock(EntityPlayerSP player, World world, BlockPos pos, EnumFacing direction, Vec3d vec, EnumHand hand); + InteractionResult processRightClickBlock(LocalPlayer player, Level world, InteractionHand hand, BlockHitResult result); - EnumActionResult processRightClick(EntityPlayerSP player, World world, EnumHand hand); + InteractionResult processRightClick(LocalPlayer player, Level world, InteractionHand hand); - boolean clickBlock(BlockPos loc, EnumFacing face); + boolean clickBlock(BlockPos loc, Direction face); void setHittingBlock(boolean hittingBlock); diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 4f763e392..c317f44bd 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -17,9 +17,10 @@ package baritone.api.utils; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; /** * @author Brady @@ -29,6 +30,8 @@ public final class RayTraceUtils { private RayTraceUtils() {} + public static ClipContext.Fluid fluidHandling = ClipContext.Fluid.NONE; + /** * Performs a block raytrace with the specified rotations. This should only be used when * any entity collisions can be ignored, because this method will not recognize if an @@ -39,27 +42,27 @@ private RayTraceUtils() {} * @param blockReachDistance The block reach distance of the entity * @return The calculated raytrace result */ - public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance) { + public static HitResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance) { return rayTraceTowards(entity, rotation, blockReachDistance, false); } - public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance, boolean wouldSneak) { - Vec3d start; + public static HitResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance, boolean wouldSneak) { + Vec3 start; if (wouldSneak) { start = inferSneakingEyePosition(entity); } else { - start = entity.getPositionEyes(1.0F); // do whatever is correct + start = entity.getEyePosition(1.0F); // do whatever is correct } - Vec3d direction = RotationUtils.calcVec3dFromRotation(rotation); - Vec3d end = start.add( + Vec3 direction = RotationUtils.calcVector3dFromRotation(rotation); + Vec3 end = start.add( direction.x * blockReachDistance, direction.y * blockReachDistance, direction.z * blockReachDistance ); - return entity.world.rayTraceBlocks(start, end, false, false, true); + return entity.level.clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)); } - public static Vec3d inferSneakingEyePosition(Entity entity) { - return new Vec3d(entity.posX, entity.posY + IPlayerContext.eyeHeight(true), entity.posZ); + public static Vec3 inferSneakingEyePosition(Entity entity) { + return new Vec3(entity.getX(), entity.getY() + IPlayerContext.eyeHeight(true), entity.getZ()); } } diff --git a/src/api/java/baritone/api/utils/Rotation.java b/src/api/java/baritone/api/utils/Rotation.java index 54f63ebfa..36beea7bc 100644 --- a/src/api/java/baritone/api/utils/Rotation.java +++ b/src/api/java/baritone/api/utils/Rotation.java @@ -36,6 +36,9 @@ public class Rotation { public Rotation(float yaw, float pitch) { this.yaw = yaw; this.pitch = pitch; + if (Float.isInfinite(yaw) || Float.isNaN(yaw) || Float.isInfinite(pitch) || Float.isNaN(pitch)) { + throw new IllegalStateException(yaw + " " + pitch); + } } /** diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 39e68fd4f..e50501563 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -19,11 +19,18 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; -import net.minecraft.block.BlockFire; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.*; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import java.util.Optional; @@ -46,13 +53,13 @@ public final class RotationUtils { /** * Offsets from the root block position to the center of each side. */ - private static final Vec3d[] BLOCK_SIDE_MULTIPLIERS = new Vec3d[]{ - new Vec3d(0.5, 0, 0.5), // Down - new Vec3d(0.5, 1, 0.5), // Up - new Vec3d(0.5, 0.5, 0), // North - new Vec3d(0.5, 0.5, 1), // South - new Vec3d(0, 0.5, 0.5), // West - new Vec3d(1, 0.5, 0.5) // East + private static final Vec3[] BLOCK_SIDE_MULTIPLIERS = new Vec3[]{ + new Vec3(0.5, 0, 0.5), // Down + new Vec3(0.5, 1, 0.5), // Up + new Vec3(0.5, 0.5, 0), // North + new Vec3(0.5, 0.5, 1), // South + new Vec3(0, 0.5, 0.5), // West + new Vec3(1, 0.5, 0.5) // East }; private RotationUtils() {} @@ -65,7 +72,7 @@ private RotationUtils() {} * @return The rotation from the origin to the destination */ public static Rotation calcRotationFromCoords(BlockPos orig, BlockPos dest) { - return calcRotationFromVec3d(new Vec3d(orig), new Vec3d(dest)); + return calcRotationFromVec3d(new Vec3(orig.getX(), orig.getY(), orig.getZ()), new Vec3(dest.getX(), dest.getY(), dest.getZ())); } /** @@ -94,7 +101,7 @@ public static Rotation wrapAnglesToRelative(Rotation current, Rotation target) { * @return The rotation from the origin to the destination * @see #wrapAnglesToRelative(Rotation, Rotation) */ - public static Rotation calcRotationFromVec3d(Vec3d orig, Vec3d dest, Rotation current) { + public static Rotation calcRotationFromVec3d(Vec3 orig, Vec3 dest, Rotation current) { return wrapAnglesToRelative(current, calcRotationFromVec3d(orig, dest)); } @@ -105,11 +112,11 @@ public static Rotation calcRotationFromVec3d(Vec3d orig, Vec3d dest, Rotation cu * @param dest The destination position * @return The rotation from the origin to the destination */ - private static Rotation calcRotationFromVec3d(Vec3d orig, Vec3d dest) { + private static Rotation calcRotationFromVec3d(Vec3 orig, Vec3 dest) { double[] delta = {orig.x - dest.x, orig.y - dest.y, orig.z - dest.z}; - double yaw = MathHelper.atan2(delta[0], -delta[2]); + double yaw = Mth.atan2(delta[0], -delta[2]); double dist = Math.sqrt(delta[0] * delta[0] + delta[2] * delta[2]); - double pitch = MathHelper.atan2(delta[1], dist); + double pitch = Mth.atan2(delta[1], dist); return new Rotation( (float) (yaw * RAD_TO_DEG), (float) (pitch * RAD_TO_DEG) @@ -122,19 +129,19 @@ private static Rotation calcRotationFromVec3d(Vec3d orig, Vec3d dest) { * @param rotation The input rotation * @return Look vector for the rotation */ - public static Vec3d calcVec3dFromRotation(Rotation rotation) { - float f = MathHelper.cos(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); - float f1 = MathHelper.sin(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); - float f2 = -MathHelper.cos(-rotation.getPitch() * (float) DEG_TO_RAD); - float f3 = MathHelper.sin(-rotation.getPitch() * (float) DEG_TO_RAD); - return new Vec3d((double) (f1 * f2), (double) f3, (double) (f * f2)); + public static Vec3 calcVector3dFromRotation(Rotation rotation) { + float f = Mth.cos(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); + float f1 = Mth.sin(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); + float f2 = -Mth.cos(-rotation.getPitch() * (float) DEG_TO_RAD); + float f3 = Mth.sin(-rotation.getPitch() * (float) DEG_TO_RAD); + return new Vec3((double) (f1 * f2), (double) f3, (double) (f * f2)); } /** * @param ctx Context for the viewing entity * @param pos The target block position * @return The optional rotation - * @see #reachable(EntityPlayerSP, BlockPos, double) + * @see #reachable(LocalPlayer, BlockPos, double) */ public static Optional reachable(IPlayerContext ctx, BlockPos pos) { return reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); @@ -156,11 +163,11 @@ public static Optional reachable(IPlayerContext ctx, BlockPos pos, boo * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachable(EntityPlayerSP entity, BlockPos pos, double blockReachDistance) { + public static Optional reachable(LocalPlayer entity, BlockPos pos, double blockReachDistance) { return reachable(entity, pos, blockReachDistance, false); } - public static Optional reachable(EntityPlayerSP entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + public static Optional reachable(LocalPlayer entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(entity); if (baritone.getPlayerContext().isLookingAt(pos)) { /* @@ -173,11 +180,11 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, * * or if you're a normal person literally all this does it ensure that we don't nudge the pitch to a normal level */ - Rotation hypothetical = new Rotation(entity.rotationYaw, entity.rotationPitch + 0.0001F); + Rotation hypothetical = new Rotation(entity.getYRot(), entity.getXRot() + 0.0001F); if (wouldSneak) { // the concern here is: what if we're looking at it now, but as soon as we start sneaking we no longer are - RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, hypothetical, blockReachDistance, true); - if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK && result.getBlockPos().equals(pos)) { + HitResult result = RayTraceUtils.rayTraceTowards(entity, hypothetical, blockReachDistance, true); + if (result != null && result.getType() == HitResult.Type.BLOCK && ((BlockHitResult) result).getBlockPos().equals(pos)) { return Optional.of(hypothetical); // yes, if we sneaked we would still be looking at the block } } else { @@ -190,13 +197,16 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, return possibleRotation; } - IBlockState state = entity.world.getBlockState(pos); - AxisAlignedBB aabb = state.getBoundingBox(entity.world, pos); - for (Vec3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { - double xDiff = aabb.minX * sideOffset.x + aabb.maxX * (1 - sideOffset.x); - double yDiff = aabb.minY * sideOffset.y + aabb.maxY * (1 - sideOffset.y); - double zDiff = aabb.minZ * sideOffset.z + aabb.maxZ * (1 - sideOffset.z); - possibleRotation = reachableOffset(entity, pos, new Vec3d(pos).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); + BlockState state = entity.level.getBlockState(pos); + VoxelShape shape = state.getShape(entity.level, pos); + if (shape.isEmpty()) { + shape = Shapes.block(); + } + for (Vec3 sideOffset : BLOCK_SIDE_MULTIPLIERS) { + double xDiff = shape.min(Direction.Axis.X) * sideOffset.x + shape.max(Direction.Axis.X) * (1 - sideOffset.x); + double yDiff = shape.min(Direction.Axis.Y) * sideOffset.y + shape.max(Direction.Axis.Y) * (1 - sideOffset.y); + double zDiff = shape.min(Direction.Axis.Z) * sideOffset.z + shape.max(Direction.Axis.Z) * (1 - sideOffset.z); + possibleRotation = reachableOffset(entity, pos, new Vec3(pos.getX(), pos.getY(), pos.getZ()).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); if (possibleRotation.isPresent()) { return possibleRotation; } @@ -215,16 +225,16 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3d offsetPos, double blockReachDistance, boolean wouldSneak) { - Vec3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getPositionEyes(1.0F); - Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.rotationYaw, entity.rotationPitch)); - RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); + public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3 offsetPos, double blockReachDistance, boolean wouldSneak) { + Vec3 eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getEyePosition(1.0F); + Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.getYRot(), entity.getXRot())); + HitResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); //System.out.println(result); - if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) { - if (result.getBlockPos().equals(pos)) { + if (result != null && result.getType() == HitResult.Type.BLOCK) { + if (((BlockHitResult) result).getBlockPos().equals(pos)) { return Optional.of(rotation); } - if (entity.world.getBlockState(pos).getBlock() instanceof BlockFire && result.getBlockPos().equals(pos.down())) { + if (entity.level.getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { return Optional.of(rotation); } } @@ -241,6 +251,6 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve * @return The optional rotation */ public static Optional reachableCenter(Entity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { - return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.world, pos), blockReachDistance, wouldSneak); + return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.level, pos), blockReachDistance, wouldSneak); } } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 0e95965f9..99cc76f28 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -19,10 +19,13 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.Vec3i; +import net.minecraft.client.Minecraft; +import net.minecraft.core.Direction; +import net.minecraft.core.Registry; +import net.minecraft.core.Vec3i; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; import java.awt.*; import java.io.BufferedReader; @@ -44,14 +47,14 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static net.minecraft.client.Minecraft.getMinecraft; public class SettingsUtil { - private static final Path SETTINGS_PATH = getMinecraft().gameDir.toPath().resolve("baritone").resolve("settings.txt"); + private static final Path SETTINGS_PATH = Minecraft.getInstance().gameDirectory.toPath().resolve("baritone").resolve("settings.txt"); private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?.+)"); // key and value split by the first space private static final String[] JAVA_ONLY_SETTINGS = {"logger", "notifier", "toaster"}; + private static boolean isComment(String line) { return line.startsWith("#") || line.startsWith("//"); } @@ -232,7 +235,7 @@ private enum Parser implements ISettingParser { FLOAT(Float.class, Float::parseFloat), LONG(Long.class, Long::parseLong), STRING(String.class, String::new), - ENUMFACING(EnumFacing.class, EnumFacing::byName), + DIRECTION(Direction.class, Direction::byName), COLOR( Color.class, str -> new Color(Integer.parseInt(str.split(",")[0]), Integer.parseInt(str.split(",")[1]), Integer.parseInt(str.split(",")[2])), @@ -250,15 +253,14 @@ private enum Parser implements ISettingParser { ), ITEM( Item.class, - str -> Item.getByNameOrId(str.trim()), - item -> Item.REGISTRY.getNameForObject(item).toString() + str -> Registry.ITEM.get(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? + item -> Registry.ITEM.getKey(item).toString() ), LIST() { @Override public Object parse(ParserContext context, String raw) { Type type = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[0]; Parser parser = Parser.getParser(type); - return Stream.of(raw.split(",")) .map(s -> parser.parse(context, s)) .collect(Collectors.toList()); diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index 4c35c05e8..4ea94b95a 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -17,13 +17,14 @@ package baritone.api.utils; -import net.minecraft.block.BlockFire; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; /** * @author Brady @@ -41,16 +42,22 @@ private VecUtils() {} * @return The center of the block's bounding box * @see #getBlockPosCenter(BlockPos) */ - public static Vec3d calculateBlockCenter(World world, BlockPos pos) { - IBlockState b = world.getBlockState(pos); - AxisAlignedBB bbox = b.getBoundingBox(world, pos); - double xDiff = (bbox.minX + bbox.maxX) / 2; - double yDiff = (bbox.minY + bbox.maxY) / 2; - double zDiff = (bbox.minZ + bbox.maxZ) / 2; - if (b.getBlock() instanceof BlockFire) {//look at bottom of fire when putting it out + public static Vec3 calculateBlockCenter(Level world, BlockPos pos) { + BlockState b = world.getBlockState(pos); + VoxelShape shape = b.getCollisionShape(world, pos); + if (shape.isEmpty()) { + return getBlockPosCenter(pos); + } + double xDiff = (shape.min(Direction.Axis.X) + shape.max(Direction.Axis.X)) / 2; + double yDiff = (shape.min(Direction.Axis.Y) + shape.max(Direction.Axis.Y)) / 2; + double zDiff = (shape.min(Direction.Axis.Z) + shape.max(Direction.Axis.Z)) / 2; + if (Double.isNaN(xDiff) || Double.isNaN(yDiff) || Double.isNaN(zDiff)) { + throw new IllegalStateException(b + " " + pos + " " + shape); + } + if (b.getBlock() instanceof BaseFireBlock) {//look at bottom of fire when putting it out yDiff = 0; } - return new Vec3d( + return new Vec3( pos.getX() + xDiff, pos.getY() + yDiff, pos.getZ() + zDiff @@ -65,10 +72,10 @@ public static Vec3d calculateBlockCenter(World world, BlockPos pos) { * * @param pos The block position * @return The assumed center of the position - * @see #calculateBlockCenter(World, BlockPos) + * @see #calculateBlockCenter(Level, BlockPos) */ - public static Vec3d getBlockPosCenter(BlockPos pos) { - return new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); + public static Vec3 getBlockPosCenter(BlockPos pos) { + return new Vec3(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); } /** @@ -98,7 +105,7 @@ public static double distanceToCenter(BlockPos pos, double x, double y, double z * @see #getBlockPosCenter(BlockPos) */ public static double entityDistanceToCenter(Entity entity, BlockPos pos) { - return distanceToCenter(pos, entity.posX, entity.posY, entity.posZ); + return distanceToCenter(pos, entity.position().x, entity.position().y, entity.position().z); } /** @@ -111,6 +118,6 @@ public static double entityDistanceToCenter(Entity entity, BlockPos pos) { * @see #getBlockPosCenter(BlockPos) */ public static double entityFlatDistanceToCenter(Entity entity, BlockPos pos) { - return distanceToCenter(pos, entity.posX, pos.getY() + 0.5, entity.posZ); + return distanceToCenter(pos, entity.position().x, pos.getY() + 0.5, entity.position().z); } } diff --git a/src/api/java/baritone/api/utils/gui/BaritoneToast.java b/src/api/java/baritone/api/utils/gui/BaritoneToast.java index eb6361478..bb3cd8fc8 100644 --- a/src/api/java/baritone/api/utils/gui/BaritoneToast.java +++ b/src/api/java/baritone/api/utils/gui/BaritoneToast.java @@ -17,62 +17,65 @@ package baritone.api.utils.gui; -import net.minecraft.client.gui.toasts.GuiToast; -import net.minecraft.client.gui.toasts.IToast; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.ITextComponent; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.toasts.Toast; +import net.minecraft.client.gui.components.toasts.ToastComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; -public class BaritoneToast implements IToast { +public class BaritoneToast implements Toast { private String title; private String subtitle; private long firstDrawTime; private boolean newDisplay; private long totalShowTime; - public BaritoneToast(ITextComponent titleComponent, ITextComponent subtitleComponent, long totalShowTime) { - this.title = titleComponent.getFormattedText(); - this.subtitle = subtitleComponent == null ? null : subtitleComponent.getFormattedText(); + public BaritoneToast(Component titleComponent, Component subtitleComponent, long totalShowTime) { + this.title = titleComponent.getString(); + this.subtitle = subtitleComponent == null ? null : subtitleComponent.getString(); this.totalShowTime = totalShowTime; } - public Visibility draw(GuiToast toastGui, long delta) { + public static void addOrUpdate(ToastComponent toast, Component title, Component subtitle, long totalShowTime) { + BaritoneToast baritonetoast = toast.getToast(BaritoneToast.class, new Object()); + + if (baritonetoast == null) { + toast.addToast(new BaritoneToast(title, subtitle, totalShowTime)); + } else { + baritonetoast.setDisplayedText(title, subtitle); + } + } + + public static void addOrUpdate(Component title, Component subtitle) { + addOrUpdate(Minecraft.getInstance().getToasts(), title, subtitle, baritone.api.BaritoneAPI.getSettings().toastTimer.value); + } + + public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long delta) { if (this.newDisplay) { this.firstDrawTime = delta; this.newDisplay = false; } - toastGui.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("textures/gui/toasts.png")); - GlStateManager.color(1.0F, 1.0F, 1.0F, 255.0f); - toastGui.drawTexturedModalRect(0, 0, 0, 32, 160, 32); + + //TODO: check + toastGui.getMinecraft().getTextureManager().bindForSetup(new ResourceLocation("textures/gui/toasts.png")); + //GlStateManager._color4f(1.0F, 1.0F, 1.0F, 255.0F); + toastGui.blit(matrixStack, 0, 0, 0, 32, 160, 32); if (this.subtitle == null) { - toastGui.getMinecraft().fontRenderer.drawString(this.title, 18, 12, -11534256); + toastGui.getMinecraft().font.draw(matrixStack, this.title, 18, 12, -11534256); } else { - toastGui.getMinecraft().fontRenderer.drawString(this.title, 18, 7, -11534256); - toastGui.getMinecraft().fontRenderer.drawString(this.subtitle, 18, 18, -16777216); + toastGui.getMinecraft().font.draw(matrixStack, this.title, 18, 7, -11534256); + toastGui.getMinecraft().font.draw(matrixStack, this.subtitle, 18, 18, -16777216); } return delta - this.firstDrawTime < totalShowTime ? Visibility.SHOW : Visibility.HIDE; } - public void setDisplayedText(ITextComponent titleComponent, ITextComponent subtitleComponent) { - this.title = titleComponent.getFormattedText(); - this.subtitle = subtitleComponent == null ? null : subtitleComponent.getFormattedText(); + public void setDisplayedText(Component titleComponent, Component subtitleComponent) { + this.title = titleComponent.getString(); + this.subtitle = subtitleComponent == null ? null : subtitleComponent.getString(); this.newDisplay = true; } - - public static void addOrUpdate(GuiToast toast, ITextComponent title, ITextComponent subtitle, long totalShowTime) { - BaritoneToast baritonetoast = toast.getToast(BaritoneToast.class, new Object()); - - if (baritonetoast == null) { - toast.add(new BaritoneToast(title, subtitle, totalShowTime)); - } else { - baritonetoast.setDisplayedText(title, subtitle); - } - } - - public static void addOrUpdate(ITextComponent title, ITextComponent subtitle) { - addOrUpdate(net.minecraft.client.Minecraft.getMinecraft().getToastGui(), title, subtitle, baritone.api.BaritoneAPI.getSettings().toastTimer.value); - } } diff --git a/src/api/java/baritone/api/utils/interfaces/IGoalRenderPos.java b/src/api/java/baritone/api/utils/interfaces/IGoalRenderPos.java index 13e7e6860..11742d75b 100644 --- a/src/api/java/baritone/api/utils/interfaces/IGoalRenderPos.java +++ b/src/api/java/baritone/api/utils/interfaces/IGoalRenderPos.java @@ -17,7 +17,7 @@ package baritone.api.utils.interfaces; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public interface IGoalRenderPos { diff --git a/src/launch/java/baritone/launch/mixins/MixinGuiScreen.java b/src/launch/java/baritone/launch/BaritoneMixinConnector.java similarity index 64% rename from src/launch/java/baritone/launch/mixins/MixinGuiScreen.java rename to src/launch/java/baritone/launch/BaritoneMixinConnector.java index 39f78fd3c..d32b83cbd 100644 --- a/src/launch/java/baritone/launch/mixins/MixinGuiScreen.java +++ b/src/launch/java/baritone/launch/BaritoneMixinConnector.java @@ -15,19 +15,15 @@ * along with Baritone. If not, see . */ -package baritone.launch.mixins; +package baritone.launch; -import baritone.utils.accessor.IGuiScreen; -import net.minecraft.client.gui.GuiScreen; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; +import org.spongepowered.asm.mixin.Mixins; +import org.spongepowered.asm.mixin.connect.IMixinConnector; -import java.net.URI; - -@Mixin(GuiScreen.class) -public abstract class MixinGuiScreen implements IGuiScreen { +public class BaritoneMixinConnector implements IMixinConnector { @Override - @Invoker("openWebLink") - public abstract void openLink(URI url); -} + public void connect() { + Mixins.addConfiguration("mixins.baritone-meteor.json"); + } +} \ No newline at end of file diff --git a/src/launch/java/baritone/launch/MixinPlugin.java b/src/launch/java/baritone/launch/MixinPlugin.java new file mode 100644 index 000000000..bbebf4988 --- /dev/null +++ b/src/launch/java/baritone/launch/MixinPlugin.java @@ -0,0 +1,71 @@ +/* + * 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; + +import net.fabricmc.loader.api.FabricLoader; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class MixinPlugin implements IMixinConfigPlugin { + private static final String mixinPackage = "baritone.launch.mixins"; + + private static boolean loaded; + + private static boolean isBaritonePresent; + + @Override + public void onLoad(String mixinPackage) { + if (loaded) return; + + isBaritonePresent = FabricLoader.getInstance().isModLoaded("baritone"); + + loaded = true; + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if (!mixinClassName.startsWith(mixinPackage)) { + throw new RuntimeException("Mixin " + mixinClassName + " is not in the mixin package"); + } else { + return !isBaritonePresent; + } + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) {} + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} +} \ No newline at end of file diff --git a/src/launch/java/baritone/launch/mixins/MixinBitArray.java b/src/launch/java/baritone/launch/mixins/MixinBitArray.java deleted file mode 100644 index bece3e3bf..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinBitArray.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.utils.accessor.IBitArray; -import net.minecraft.util.BitArray; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(BitArray.class) -public abstract class MixinBitArray implements IBitArray { - - @Shadow - @Final - private long[] longArray; - - @Shadow - @Final - private int bitsPerEntry; - - @Shadow - @Final - private long maxEntryValue; - - @Shadow - @Final - private int arraySize; - - @Override - @Unique - public int[] toArray() { - int[] out = new int[arraySize]; - - for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) { - final int i = idx * bitsPerEntry; - final int j = i >> 6; - final int l = i & 63; - final int k = kl >> 6; - final long jl = longArray[j] >>> l; - - if (j == k) { - out[idx] = (int) (jl & maxEntryValue); - } else { - out[idx] = (int) ((jl | longArray[k] << (64 - l)) & maxEntryValue); - } - } - - return out; - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java b/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java deleted file mode 100644 index f1cc28b9f..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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.utils.accessor.IBitArray; -import baritone.utils.accessor.IBlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.BitArray; -import net.minecraft.world.chunk.BlockStateContainer; -import net.minecraft.world.chunk.IBlockStatePalette; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(BlockStateContainer.class) -public abstract class MixinBlockStateContainer implements IBlockStateContainer { - - @Shadow - protected BitArray storage; - - @Shadow - protected IBlockStatePalette palette; - - @Override - public IBlockState getAtPalette(int index) { - return palette.getBlockState(index); - } - - @Override - public int[] storageArray() { - return ((IBitArray) storage).toArray(); - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinChatTabCompleter.java b/src/launch/java/baritone/launch/mixins/MixinChatTabCompleter.java deleted file mode 100644 index f8e4d789f..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinChatTabCompleter.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 net.minecraft.client.gui.GuiChat; -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.CallbackInfo; - -@Mixin(GuiChat.ChatTabCompleter.class) -public abstract class MixinChatTabCompleter extends MixinTabCompleter { - - @Inject( - method = "complete", - at = @At("HEAD"), - cancellable = true - ) - private void onComplete(CallbackInfo ci) { - if (dontComplete) { - ci.cancel(); - } - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java new file mode 100644 index 000000000..711ca6554 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java @@ -0,0 +1,97 @@ +/* + * 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.utils.accessor.IChunkArray; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.concurrent.atomic.AtomicReferenceArray; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.LevelChunk; + +@Mixin(targets = "net.minecraft.client.multiplayer.ClientChunkCache$Storage") +public abstract class MixinChunkArray implements IChunkArray { + @Final + @Shadow + AtomicReferenceArray chunks; + @Final + @Shadow + int chunkRadius; + + @Final + @Shadow + private int viewRange; + @Shadow + int viewCenterX; + @Shadow + int viewCenterZ; + @Shadow + int chunkCount; + + @Shadow + abstract boolean inRange(int x, int z); + + @Shadow + abstract int getIndex(int x, int z); + + @Shadow + protected abstract void replace(int index, LevelChunk chunk); + + @Override + public int centerX() { + return viewCenterX; + } + + @Override + public int centerZ() { + return viewCenterZ; + } + + @Override + public int viewDistance() { + return chunkRadius; + } + + @Override + public AtomicReferenceArray getChunks() { + return chunks; + } + + @Override + public void copyFrom(IChunkArray other) { + viewCenterX = other.centerX(); + viewCenterZ = other.centerZ(); + + AtomicReferenceArray copyingFrom = other.getChunks(); + for (int k = 0; k < copyingFrom.length(); ++k) { + LevelChunk chunk = copyingFrom.get(k); + if (chunk != null) { + ChunkPos chunkpos = chunk.getPos(); + if (inRange(chunkpos.x, chunkpos.z)) { + int index = getIndex(chunkpos.x, chunkpos.z); + if (chunks.get(index) != null) { + throw new IllegalStateException("Doing this would mutate the client's REAL loaded chunks?!"); + } + replace(index, chunk); + } + } + } + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkProviderClient.java b/src/launch/java/baritone/launch/mixins/MixinChunkProviderClient.java deleted file mode 100644 index b4cada6ef..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinChunkProviderClient.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.utils.accessor.IChunkProviderClient; -import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import net.minecraft.client.multiplayer.ChunkProviderClient; -import net.minecraft.world.chunk.Chunk; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(ChunkProviderClient.class) -public class MixinChunkProviderClient implements IChunkProviderClient { - - @Shadow - @Final - private Long2ObjectMap loadedChunks; - - @Override - public Long2ObjectMap loadedChunks() { - return this.loadedChunks; - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java b/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java deleted file mode 100644 index 0d228db95..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinChunkRenderContainer.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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 net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ChunkRenderContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.chunk.RenderChunk; -import net.minecraft.util.math.BlockPos; -import org.lwjgl.opengl.GL14; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import static org.lwjgl.opengl.GL11.*; - -@Mixin(ChunkRenderContainer.class) -public class MixinChunkRenderContainer { - - @Redirect( // avoid creating CallbackInfo at all costs; this is called 40k times per second - method = "preRenderChunk", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/renderer/chunk/RenderChunk.getPosition()Lnet/minecraft/util/math/BlockPos;" - ) - ) - private BlockPos getPosition(RenderChunk renderChunkIn) { - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getMinecraft().isSingleplayer() && Minecraft.getMinecraft().world.getChunk(renderChunkIn.getPosition()).isEmpty()) { - GlStateManager.enableAlpha(); - GlStateManager.enableBlend(); - GL14.glBlendColor(0, 0, 0, Baritone.settings().cachedChunksOpacity.value); - GlStateManager.tryBlendFuncSeparate(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE, GL_ZERO); - } - return renderChunkIn.getPosition(); - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java b/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java deleted file mode 100644 index d72fdd41c..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.Minecraft; -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.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(ChunkRenderWorker.class) -public abstract class MixinChunkRenderWorker { - - @Shadow - protected abstract boolean isChunkExisting(BlockPos pos, World worldIn); - - @Redirect( - method = "processTask", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/renderer/chunk/ChunkRenderWorker.isChunkExisting(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/World;)Z" - ) - ) - private boolean isChunkExisting(ChunkRenderWorker worker, BlockPos pos, World world) { - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getMinecraft().isSingleplayer()) { - Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); - IPlayerContext ctx = baritone.getPlayerContext(); - if (ctx.player() != null && ctx.world() != null && baritone.bsi != null) { - return baritone.bsi.isLoaded(pos.getX(), pos.getZ()) || this.isChunkExisting(pos, world); - } - } - - return this.isChunkExisting(pos, world); - } -} - diff --git a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java new file mode 100644 index 000000000..de465b82a --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java @@ -0,0 +1,63 @@ +/* + * 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.utils.accessor.IChunkArray; +import baritone.utils.accessor.IClientChunkProvider; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.lang.reflect.Field; +import java.util.Arrays; +import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.client.multiplayer.ClientLevel; + +@Mixin(ClientChunkCache.class) +public class MixinClientChunkProvider implements IClientChunkProvider { + + @Final + @Shadow + ClientLevel level; + + @Override + public ClientChunkCache createThreadSafeCopy() { + IChunkArray arr = extractReferenceArray(); + ClientChunkCache result = new ClientChunkCache(level, arr.viewDistance() - 3); // -3 because its adds 3 for no reason lmao + IChunkArray copyArr = ((IClientChunkProvider) result).extractReferenceArray(); + copyArr.copyFrom(arr); + if (copyArr.viewDistance() != arr.viewDistance()) { + throw new IllegalStateException(copyArr.viewDistance() + " " + arr.viewDistance()); + } + return result; + } + + @Override + public IChunkArray extractReferenceArray() { + for (Field f : ClientChunkCache.class.getDeclaredFields()) { + if (IChunkArray.class.isAssignableFrom(f.getType())) { + try { + return (IChunkArray) f.get(this); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + } + throw new RuntimeException(Arrays.toString(ClientChunkCache.class.getDeclaredFields())); + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java new file mode 100644 index 000000000..df3fbf09f --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -0,0 +1,189 @@ +/* + * 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.IBaritone; +import baritone.api.event.events.ChunkEvent; +import baritone.api.event.events.type.EventState; +import baritone.cache.CachedChunk; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.protocol.game.*; +import net.minecraft.world.level.ChunkPos; +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.CallbackInfo; + +/** + * @author Brady + * @since 8/3/2018 + */ +@Mixin(ClientPacketListener.class) +public class MixinClientPlayNetHandler { + + // unused lol + /*@Inject( + method = "handleChunkData", + at = @At( + value = "INVOKE", + target = "net/minecraft/client/multiplayer/ChunkProviderClient.func_212474_a(IILnet/minecraft/network/PacketBuffer;IZ)Lnet/minecraft/world/chunk/Chunk;" + ) + ) + private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + ClientPlayerEntity player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPlayNetHandler) (Object) this) { + ibaritone.getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.PRE, + packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, + packetIn.getChunkX(), + packetIn.getChunkZ() + ) + ); + } + } + }*/ + + @Inject( + method = "handleLevelChunkWithLight", + at = @At("RETURN") + ) + private void postHandleChunkData(ClientboundLevelChunkWithLightPacket packetIn, CallbackInfo ci) { + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { + ibaritone.getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.POST, + !packetIn.isSkippable() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, + packetIn.getX(), + packetIn.getZ() + ) + ); + } + } + } + + @Inject( + method = "handleForgetLevelChunk", + at = @At("HEAD") + ) + private void preChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackInfo ci) { + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { + ibaritone.getGameEventHandler().onChunkEvent( + new ChunkEvent(EventState.PRE, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) + ); + } + } + } + + @Inject( + method = "handleForgetLevelChunk", + at = @At("RETURN") + ) + private void postChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackInfo ci) { + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { + ibaritone.getGameEventHandler().onChunkEvent( + new ChunkEvent(EventState.POST, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) + ); + } + } + } + + @Inject( + method = "handleBlockUpdate", + at = @At("RETURN") + ) + private void postHandleBlockChange(ClientboundBlockUpdatePacket packetIn, CallbackInfo ci) { + if (!Baritone.settings().repackOnAnyBlockChange.value) { + return; + } + if (!CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(packetIn.getBlockState().getBlock())) { + return; + } + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { + ibaritone.getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.POST, + ChunkEvent.Type.POPULATE_FULL, + packetIn.getPos().getX() >> 4, + packetIn.getPos().getZ() >> 4 + ) + ); + } + } + } + + @Inject( + method = "handleChunkBlocksUpdate", + at = @At("RETURN") + ) + private void postHandleMultiBlockChange(ClientboundSectionBlocksUpdatePacket packetIn, CallbackInfo ci) { + if (!Baritone.settings().repackOnAnyBlockChange.value) { + return; + } + ChunkPos[] chunkPos = new ChunkPos[1]; + packetIn.runUpdates((pos, state) -> { + if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(state.getBlock())) { + chunkPos[0] = new ChunkPos(pos); + } + }); + if (chunkPos[0] == null) { + return; + } + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { + ibaritone.getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.POST, + ChunkEvent.Type.POPULATE_FULL, + chunkPos[0].x, + chunkPos[0].z + ) + ); + } + } + } + + @Inject( + method = "handlePlayerCombatKill", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/player/LocalPlayer;shouldShowDeathScreen()Z" + ) + ) + private void onPlayerDeath(ClientboundPlayerCombatKillPacket packetIn, CallbackInfo ci) { + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + LocalPlayer player = ibaritone.getPlayerContext().player(); + if (player != null && player.connection == (ClientPacketListener) (Object) this) { + ibaritone.getGameEventHandler().onPlayerDeath(); + } + } + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java similarity index 71% rename from src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java rename to src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index 7c1225b9b..e5f3e0375 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -24,9 +24,10 @@ import baritone.api.event.events.SprintStateEvent; import baritone.api.event.events.type.EventState; import baritone.behavior.LookBehavior; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.entity.player.PlayerCapabilities; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Abilities; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -37,17 +38,17 @@ * @author Brady * @since 8/1/2018 */ -@Mixin(EntityPlayerSP.class) -public class MixinEntityPlayerSP { +@Mixin(LocalPlayer.class) +public class MixinClientPlayerEntity { @Inject( - method = "sendChatMessage", + method = "sendChat(Ljava/lang/String;Lnet/minecraft/network/chat/Component;)V", at = @At("HEAD"), cancellable = true ) - private void sendChatMessage(String msg, CallbackInfo ci) { - ChatEvent event = new ChatEvent(msg); - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + private void sendChatMessage(String string, Component component, CallbackInfo ci) { + ChatEvent event = new ChatEvent(string); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone == null) { return; } @@ -58,63 +59,63 @@ private void sendChatMessage(String msg, CallbackInfo ci) { } @Inject( - method = "onUpdate", + method = "tick", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/EntityPlayerSP.isRiding()Z", + target = "net/minecraft/client/player/LocalPlayer.isPassenger()Z", shift = At.Shift.BY, by = -3 ) ) private void onPreUpdate(CallbackInfo ci) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone != null) { baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.PRE)); } } @Inject( - method = "onUpdate", + method = "tick", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/EntityPlayerSP.onUpdateWalkingPlayer()V", + target = "net/minecraft/client/player/LocalPlayer.sendPosition()V", shift = At.Shift.BY, by = 2 ) ) private void onPostUpdate(CallbackInfo ci) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone != null) { baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); } } @Redirect( - method = "onLivingUpdate", + method = "aiStep", at = @At( value = "FIELD", - target = "net/minecraft/entity/player/PlayerCapabilities.allowFlying:Z" + target = "net/minecraft/world/entity/player/Abilities.mayfly:Z" ) ) - private boolean isAllowFlying(PlayerCapabilities capabilities) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + private boolean isAllowFlying(Abilities capabilities) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone == null) { - return capabilities.allowFlying; + return capabilities.mayfly; } - return !baritone.getPathingBehavior().isPathing() && capabilities.allowFlying; + return !baritone.getPathingBehavior().isPathing() && capabilities.mayfly; } @Redirect( - method = "onLivingUpdate", + method = "aiStep", at = @At( value = "INVOKE", - target = "net/minecraft/client/settings/KeyBinding.isKeyDown()Z" + target = "net/minecraft/client/KeyMapping.isDown()Z" ) ) - private boolean isKeyDown(KeyBinding keyBinding) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + private boolean isKeyDown(KeyMapping keyBinding) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone == null) { - return keyBinding.isKeyDown(); + return keyBinding.isDown(); } SprintStateEvent event = new SprintStateEvent(); baritone.getGameEventHandler().onPlayerSprintState(event); @@ -125,17 +126,17 @@ private boolean isKeyDown(KeyBinding keyBinding) { // hitting control shouldn't make all bots sprint return false; } - return keyBinding.isKeyDown(); + return keyBinding.isDown(); } @Inject( - method = "updateRidden", + method = "rideTick", at = @At( value = "HEAD" ) ) private void updateRidden(CallbackInfo cb) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); if (baritone != null) { ((LookBehavior) baritone.getLookBehavior()).pig(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java new file mode 100644 index 000000000..63331502f --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -0,0 +1,100 @@ +/* + * 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.api.BaritoneAPI; +import baritone.api.event.events.TabCompleteEvent; +import com.mojang.brigadier.context.StringRange; +import com.mojang.brigadier.suggestion.Suggestion; +import com.mojang.brigadier.suggestion.Suggestions; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import net.minecraft.client.gui.components.CommandSuggestions; +import net.minecraft.client.gui.components.EditBox; + +/** + * @author Brady + * @since 10/9/2019 + */ +@Mixin(CommandSuggestions.class) +public class MixinCommandSuggestionHelper { + + @Shadow + @Final + EditBox input; + + @Shadow + @Final + private List commandUsage; + + @Shadow + private CompletableFuture pendingSuggestions; + + @Inject( + method = "updateCommandInfo", + at = @At("HEAD"), + cancellable = true + ) + private void preUpdateSuggestion(CallbackInfo ci) { + // Anything that is present in the input text before the cursor position + String prefix = this.input.getValue().substring(0, Math.min(this.input.getValue().length(), this.input.getCursorPosition())); + + TabCompleteEvent event = new TabCompleteEvent(prefix); + BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onPreTabComplete(event); + + if (event.isCancelled()) { + ci.cancel(); + return; + } + + if (event.completions != null) { + ci.cancel(); + + // TODO: Support populating the command usage + this.commandUsage.clear(); + + if (event.completions.length == 0) { + this.pendingSuggestions = Suggestions.empty(); + } else { + int offset = this.input.getValue().endsWith(" ") + ? this.input.getCursorPosition() + : this.input.getValue().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes + + List suggestionList = Stream.of(event.completions) + .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s)) + .collect(Collectors.toList()); + + Suggestions suggestions = new Suggestions( + StringRange.between(offset, offset + suggestionList.stream().mapToInt(s -> s.getText().length()).max().orElse(0)), + suggestionList); + + this.pendingSuggestions = new CompletableFuture<>(); + this.pendingSuggestions.complete(suggestions); + } + } + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java new file mode 100644 index 000000000..b48e919f2 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -0,0 +1,60 @@ +/* + * 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.api.BaritoneAPI; +import baritone.api.event.events.RotationMoveEvent; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Entity.class) +public class MixinEntity { + + @Shadow + private float yRot; + + float yawRestore; + + @Inject( + method = "moveRelative", + at = @At("HEAD") + ) + private void moveRelativeHead(CallbackInfo info) { + this.yawRestore = this.yRot; + // noinspection ConstantConditions + if (!LocalPlayer.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this) == null) { + return; + } + RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.yRot); + BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); + this.yRot = motionUpdateRotationEvent.getYaw(); + } + + @Inject( + method = "moveRelative", + at = @At("RETURN") + ) + private void moveRelativeReturn(CallbackInfo info) { + this.yRot = this.yawRestore; + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java deleted file mode 100644 index 0fd2436c9..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * 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.api.BaritoneAPI; -import baritone.api.IBaritone; -import baritone.api.event.events.RotationMoveEvent; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -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.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import static org.spongepowered.asm.lib.Opcodes.GETFIELD; - -/** - * @author Brady - * @since 9/10/2018 - */ -@Mixin(EntityLivingBase.class) -public abstract class MixinEntityLivingBase extends Entity { - - /** - * Event called to override the movement direction when jumping - */ - private RotationMoveEvent jumpRotationEvent; - - public MixinEntityLivingBase(World worldIn, RotationMoveEvent jumpRotationEvent) { - super(worldIn); - this.jumpRotationEvent = jumpRotationEvent; - } - - @Inject( - method = "jump", - at = @At("HEAD") - ) - private void preMoveRelative(CallbackInfo ci) { - // noinspection ConstantConditions - if (EntityPlayerSP.class.isInstance(this)) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); - if (baritone != null) { - this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.rotationYaw); - baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); - } - } - } - - @Redirect( - method = "jump", - at = @At( - value = "FIELD", - opcode = GETFIELD, - target = "net/minecraft/entity/EntityLivingBase.rotationYaw:F" - ) - ) - private float overrideYaw(EntityLivingBase self) { - if (self instanceof EntityPlayerSP && BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this) != null) { - return this.jumpRotationEvent.getYaw(); - } - return self.rotationYaw; - } - - @Redirect( - method = "travel", - at = @At( - value = "INVOKE", - target = "net/minecraft/entity/EntityLivingBase.moveRelative(FFFF)V" - ) - ) - private void travel(EntityLivingBase self, float strafe, float up, float forward, float friction) { - // noinspection ConstantConditions - if (!EntityPlayerSP.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this) == null) { - moveRelative(strafe, up, forward, friction); - return; - } - RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw); - BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); - float originalYaw = this.rotationYaw; - this.rotationYaw = motionUpdateRotationEvent.getYaw(); - this.moveRelative(strafe, up, forward, friction); - this.rotationYaw = originalYaw; - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkProviderServer.java b/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java similarity index 59% rename from src/launch/java/baritone/launch/mixins/MixinChunkProviderServer.java rename to src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java index 6d5a5421b..32f85593e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkProviderServer.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityRenderManager.java @@ -17,26 +17,26 @@ package baritone.launch.mixins; -import baritone.utils.accessor.IChunkProviderServer; -import net.minecraft.world.chunk.storage.IChunkLoader; -import net.minecraft.world.gen.ChunkProviderServer; -import org.spongepowered.asm.mixin.Final; +import baritone.utils.accessor.IEntityRenderManager; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -/** - * @author Brady - * @since 9/4/2018 - */ -@Mixin(ChunkProviderServer.class) -public class MixinChunkProviderServer implements IChunkProviderServer { +@Mixin(EntityRenderDispatcher.class) +public class MixinEntityRenderManager implements IEntityRenderManager { + - @Shadow - @Final - private IChunkLoader chunkLoader; + @Override + public double renderPosX() { + return ((EntityRenderDispatcher) (Object) this).camera.getPosition().x; + } + + @Override + public double renderPosY() { + return ((EntityRenderDispatcher) (Object) this).camera.getPosition().y; + } @Override - public IChunkLoader getChunkLoader() { - return this.chunkLoader; + public double renderPosZ() { + return ((EntityRenderDispatcher) (Object) this).camera.getPosition().z; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinItemStack.java b/src/launch/java/baritone/launch/mixins/MixinItemStack.java index 325359776..906221bee 100644 --- a/src/launch/java/baritone/launch/mixins/MixinItemStack.java +++ b/src/launch/java/baritone/launch/mixins/MixinItemStack.java @@ -18,8 +18,8 @@ package baritone.launch.mixins; import baritone.api.utils.accessor.IItemStack; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -35,14 +35,14 @@ public abstract class MixinItemStack implements IItemStack { @Final private Item item; - @Shadow - private int itemDamage; - @Unique private int baritoneHash; + @Shadow + public abstract int getDamageValue(); + private void recalculateHash() { - baritoneHash = item == null ? -1 : item.hashCode() + itemDamage; + baritoneHash = item == null ? -1 : item.hashCode() + getDamageValue(); } @Inject( @@ -54,7 +54,7 @@ private void onInit(CallbackInfo ci) { } @Inject( - method = "setItemDamage", + method = "setDamageValue", at = @At("TAIL") ) private void onItemDamageSet(CallbackInfo ci) { @@ -63,6 +63,8 @@ private void onItemDamageSet(CallbackInfo ci) { @Override public int getBaritoneHash() { + // TODO: figure out why mixin not working, was 0 for some reason + if (baritoneHash == 0) recalculateHash(); return baritoneHash; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java new file mode 100644 index 000000000..44a5c1e32 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -0,0 +1,82 @@ +/* + * 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.api.BaritoneAPI; +import baritone.api.IBaritone; +import baritone.api.event.events.RotationMoveEvent; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +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.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import static org.objectweb.asm.Opcodes.GETFIELD; + +/** + * @author Brady + * @since 9/10/2018 + */ +@Mixin(LivingEntity.class) +public abstract class MixinLivingEntity extends Entity { + + /** + * Event called to override the movement direction when jumping + */ + private RotationMoveEvent jumpRotationEvent; + + public MixinLivingEntity(EntityType entityTypeIn, Level worldIn) { + super(entityTypeIn, worldIn); + } + + @Inject( + method = "jumpFromGround", + at = @At("HEAD") + ) + private void preMoveRelative(CallbackInfo ci) { + // noinspection ConstantConditions + if (LocalPlayer.class.isInstance(this)) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); + if (baritone != null) { + this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.getYRot()); + baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); + } + } + } + + @Redirect( + method = "jumpFromGround", + at = @At( + value = "INVOKE", + target = "net/minecraft/world/entity/LivingEntity.getYRot()F" + ) + ) + private float overrideYaw(LivingEntity self) { + if (self instanceof LocalPlayer && BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this) != null) { + return this.jumpRotationEvent.getYaw(); + } + return self.getYRot(); + } + + +} diff --git a/src/launch/java/baritone/launch/mixins/MixinLootContext.java b/src/launch/java/baritone/launch/mixins/MixinLootContext.java new file mode 100644 index 000000000..7c7960cf1 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinLootContext.java @@ -0,0 +1,74 @@ +/* + * 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.api.utils.BlockOptionalMeta; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootTables; +import net.minecraft.world.level.storage.loot.PredicateManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(LootContext.Builder.class) +public class MixinLootContext { + + @Redirect( + method = "create", + at = @At( + value = "INVOKE", + target = "net/minecraft/server/level/ServerLevel.getServer()Lnet/minecraft/server/MinecraftServer;" + ) + ) + private MinecraftServer getServer(ServerLevel world) { + if (world == null) { + return null; + } + return world.getServer(); + } + + @Redirect( + method = "create", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/server/MinecraftServer;getLootTables()Lnet/minecraft/world/level/storage/loot/LootTables;" + ) + ) + private LootTables getLootTableManager(MinecraftServer server) { + if (server == null) { + return BlockOptionalMeta.getManager(); + } + return server.getLootTables(); + } + + @Redirect( + method = "create", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/server/MinecraftServer;getPredicateManager()Lnet/minecraft/world/level/storage/loot/PredicateManager;" + ) + ) + private PredicateManager getLootPredicateManager(MinecraftServer server) { + if (server == null) { + return BlockOptionalMeta.getPredicateManager(); + } + return server.getPredicateManager(); + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 097c72905..604feaa85 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -19,26 +19,20 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; -import baritone.api.event.events.BlockInteractEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import org.spongepowered.asm.lib.Opcodes; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.player.LocalPlayer; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import java.util.function.BiFunction; @@ -50,25 +44,26 @@ public class MixinMinecraft { @Shadow - public EntityPlayerSP player; + public LocalPlayer player; @Shadow - public WorldClient world; + public ClientLevel level; @Inject( - method = "init", + method = "", at = @At("RETURN") ) private void postInit(CallbackInfo ci) { BaritoneAPI.getProvider().getPrimaryBaritone(); } + @Inject( - method = "runTick", + method = "tick", at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/Minecraft.currentScreen:Lnet/minecraft/client/gui/GuiScreen;", - ordinal = 5, + target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", + ordinal = 4, shift = At.Shift.BY, by = -3 ) @@ -88,12 +83,12 @@ private void runTick(CallbackInfo ci) { } @Inject( - method = "loadWorld(Lnet/minecraft/client/multiplayer/WorldClient;Ljava/lang/String;)V", + method = "setLevel", at = @At("HEAD") ) - private void preLoadWorld(WorldClient world, String loadingMessage, CallbackInfo ci) { + private void preLoadWorld(ClientLevel world, CallbackInfo ci) { // If we're unloading the world but one doesn't exist, ignore it - if (this.world == null && world == null) { + if (this.level == null && world == null) { return; } @@ -108,10 +103,10 @@ private void preLoadWorld(WorldClient world, String loadingMessage, CallbackInfo } @Inject( - method = "loadWorld(Lnet/minecraft/client/multiplayer/WorldClient;Ljava/lang/String;)V", + method = "setLevel", at = @At("RETURN") ) - private void postLoadWorld(WorldClient world, String loadingMessage, CallbackInfo ci) { + private void postLoadWorld(ClientLevel world, CallbackInfo ci) { // still fire event for both null, as that means we've just finished exiting a world // mc.world changing is only the primary baritone @@ -124,41 +119,36 @@ private void postLoadWorld(WorldClient world, String loadingMessage, CallbackInf } @Redirect( - method = "runTick", + method = "tick", at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/gui/GuiScreen.allowUserInput:Z" + target = "Lnet/minecraft/client/gui/screens/Screen;passEvents:Z" ) ) - private boolean isAllowUserInput(GuiScreen screen) { + private boolean passEvents(Screen screen) { // allow user input is only the primary baritone - return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) || screen.allowUserInput; + return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) || screen.passEvents; } - @Inject( - method = "clickMouse", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/multiplayer/PlayerControllerMP.clickBlock(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/EnumFacing;)Z" - ), - locals = LocalCapture.CAPTURE_FAILHARD - ) - private void onBlockBreak(CallbackInfo ci, BlockPos pos) { - // clickMouse is only for the main player - BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(pos, BlockInteractEvent.Type.START_BREAK)); - } - - @Inject( + // TODO + // FIXME + // bradyfix + // i cant mixin + // lol + // https://discordapp.com/channels/208753003996512258/503692253881958400/674760939681349652 + // https://discordapp.com/channels/208753003996512258/503692253881958400/674756457966862376 + /*@Inject( method = "rightClickMouse", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/EntityPlayerSP.swingArm(Lnet/minecraft/util/EnumHand;)V" + target = "net/minecraft/client/entity/player/ClientPlayerEntity.swingArm(Lnet/minecraft/util/Hand;)V", + ordinal = 1 ), locals = LocalCapture.CAPTURE_FAILHARD ) - private void onBlockUse(CallbackInfo ci, EnumHand var1[], int var2, int var3, EnumHand enumhand, ItemStack itemstack, BlockPos blockpos, int i, EnumActionResult enumactionresult) { + private void onBlockUse(CallbackInfo ci, Hand var1[], int var2, int var3, Hand enumhand, ItemStack itemstack, EntityRayTraceResult rt, Entity ent, ActionResultType art, BlockRayTraceResult raytrace, int i, ActionResultType enumactionresult) { // rightClickMouse is only for the main player - BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(blockpos, BlockInteractEvent.Type.USE)); - } + BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(raytrace.getPos(), BlockInteractEvent.Type.USE)); + }*/ } diff --git a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java deleted file mode 100644 index f1c1f7972..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * 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.IBaritone; -import baritone.api.event.events.ChunkEvent; -import baritone.api.event.events.type.EventState; -import baritone.cache.CachedChunk; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.network.NetHandlerPlayClient; -import net.minecraft.network.play.server.SPacketBlockChange; -import net.minecraft.network.play.server.SPacketChunkData; -import net.minecraft.network.play.server.SPacketCombatEvent; -import net.minecraft.network.play.server.SPacketMultiBlockChange; -import net.minecraft.util.math.ChunkPos; -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.CallbackInfo; - -/** - * @author Brady - * @since 8/3/2018 - */ -@Mixin(NetHandlerPlayClient.class) -public class MixinNetHandlerPlayClient { - - @Inject( - method = "handleChunkData", - at = @At( - value = "INVOKE", - target = "net/minecraft/world/chunk/Chunk.read(Lnet/minecraft/network/PacketBuffer;IZ)V" - ) - ) - private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - EntityPlayerSP player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.PRE, - packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, - packetIn.getChunkX(), - packetIn.getChunkZ() - ) - ); - } - } - } - - @Inject( - method = "handleChunkData", - at = @At("RETURN") - ) - private void postHandleChunkData(SPacketChunkData packetIn, CallbackInfo ci) { - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - EntityPlayerSP player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, - packetIn.getChunkX(), - packetIn.getChunkZ() - ) - ); - } - } - } - - @Inject( - method = "handleBlockChange", - at = @At("RETURN") - ) - private void postHandleBlockChange(SPacketBlockChange packetIn, CallbackInfo ci) { - if (!Baritone.settings().repackOnAnyBlockChange.value) { - return; - } - if (!CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(packetIn.getBlockState().getBlock())) { - return; - } - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - EntityPlayerSP player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - ChunkEvent.Type.POPULATE_FULL, - packetIn.getBlockPosition().getX() >> 4, - packetIn.getBlockPosition().getZ() >> 4 - ) - ); - } - } - } - - @Inject( - method = "handleMultiBlockChange", - at = @At("RETURN") - ) - private void postHandleMultiBlockChange(SPacketMultiBlockChange packetIn, CallbackInfo ci) { - if (!Baritone.settings().repackOnAnyBlockChange.value) { - return; - } - if (packetIn.getChangedBlocks().length == 0) { - return; - } - https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.15 - { - for (SPacketMultiBlockChange.BlockUpdateData update : packetIn.getChangedBlocks()) { - if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(update.getBlockState().getBlock())) { - break https; - } - } - return; - } - ChunkPos pos = new ChunkPos(packetIn.getChangedBlocks()[0].getPos()); - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - EntityPlayerSP player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - ChunkEvent.Type.POPULATE_FULL, - pos.x, - pos.z - ) - ); - } - } - } - - @Inject( - method = "handleCombatEvent", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/Minecraft.displayGuiScreen(Lnet/minecraft/client/gui/GuiScreen;)V" - ) - ) - private void onPlayerDeath(SPacketCombatEvent packetIn, CallbackInfo ci) { - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - EntityPlayerSP player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { - ibaritone.getGameEventHandler().onPlayerDeath(); - } - } - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 577be96dc..52543ed91 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -23,11 +23,10 @@ import baritone.api.event.events.type.EventState; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; -import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.GenericFutureListener; -import net.minecraft.network.EnumPacketDirection; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; +import net.minecraft.network.Connection; +import net.minecraft.network.PacketSendListener; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.PacketFlow; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,7 +38,7 @@ * @author Brady * @since 8/6/2018 */ -@Mixin(NetworkManager.class) +@Mixin(Connection.class) public class MixinNetworkManager { @Shadow @@ -47,36 +46,36 @@ public class MixinNetworkManager { @Shadow @Final - private EnumPacketDirection direction; + private PacketFlow receiving; @Inject( - method = "dispatchPacket", + method = "sendPacket", at = @At("HEAD") ) - private void preDispatchPacket(Packet inPacket, final GenericFutureListener>[] futureListeners, CallbackInfo ci) { - if (this.direction != EnumPacketDirection.CLIENTBOUND) { + private void preDispatchPacket(Packet packet, PacketSendListener packetSendListener, CallbackInfo ci) { + if (this.receiving != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, inPacket)); + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getConnection() == (Connection) (Object) this) { + ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((Connection) (Object) this, EventState.PRE, packet)); } } } @Inject( - method = "dispatchPacket", + method = "sendPacket", at = @At("RETURN") ) - private void postDispatchPacket(Packet inPacket, final GenericFutureListener>[] futureListeners, CallbackInfo ci) { - if (this.direction != EnumPacketDirection.CLIENTBOUND) { + private void postDispatchPacket(Packet packet, PacketSendListener packetSendListener, CallbackInfo ci) { + if (this.receiving != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, inPacket)); + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getConnection() == (Connection) (Object) this) { + ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((Connection) (Object) this, EventState.POST, packet)); } } } @@ -85,16 +84,16 @@ private void postDispatchPacket(Packet inPacket, final GenericFutureListener< method = "channelRead0", at = @At( value = "INVOKE", - target = "net/minecraft/network/Packet.processPacket(Lnet/minecraft/network/INetHandler;)V" + target = "net/minecraft/network/Connection.genericsFtw(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;)V" ) ) private void preProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { - if (this.direction != EnumPacketDirection.CLIENTBOUND) { + if (this.receiving != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, packet)); + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getConnection() == (Connection) (Object) this) { + ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((Connection) (Object) this, EventState.PRE, packet)); } } } @@ -104,12 +103,12 @@ private void preProcessPacket(ChannelHandlerContext context, Packet packet, C at = @At("RETURN") ) private void postProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { - if (!this.channel.isOpen() || this.direction != EnumPacketDirection.CLIENTBOUND) { + if (!this.channel.isOpen() || this.receiving != PacketFlow.CLIENTBOUND) { return; } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, packet)); + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getConnection() == (Connection) (Object) this) { + ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((Connection) (Object) this, EventState.POST, packet)); } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinPlayerControllerMP.java b/src/launch/java/baritone/launch/mixins/MixinPlayerController.java similarity index 78% rename from src/launch/java/baritone/launch/mixins/MixinPlayerControllerMP.java rename to src/launch/java/baritone/launch/mixins/MixinPlayerController.java index 88c4abec0..34f39aee9 100644 --- a/src/launch/java/baritone/launch/mixins/MixinPlayerControllerMP.java +++ b/src/launch/java/baritone/launch/mixins/MixinPlayerController.java @@ -18,24 +18,24 @@ package baritone.launch.mixins; import baritone.utils.accessor.IPlayerControllerMP; -import net.minecraft.client.multiplayer.PlayerControllerMP; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; +import net.minecraft.core.BlockPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Invoker; -@Mixin(PlayerControllerMP.class) -public abstract class MixinPlayerControllerMP implements IPlayerControllerMP { +@Mixin(MultiPlayerGameMode.class) +public abstract class MixinPlayerController implements IPlayerControllerMP { - @Accessor + @Accessor("isDestroying") @Override public abstract void setIsHittingBlock(boolean isHittingBlock); - @Accessor + @Accessor("destroyBlockPos") @Override public abstract BlockPos getCurrentBlock(); - @Invoker + @Invoker("ensureHasSentCarriedItem") @Override public abstract void callSyncCurrentPlayItem(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java b/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java deleted file mode 100644 index f67d5d220..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinRenderChunk.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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.block.state.IBlockState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.chunk.RenderChunk; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.ChunkCache; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -/** - * @author Brady - * @since 1/29/2019 - */ -@Mixin(RenderChunk.class) -public class MixinRenderChunk { - - @Redirect( - method = "rebuildChunk", - at = @At( - value = "INVOKE", - target = "net/minecraft/world/ChunkCache.isEmpty()Z" - ) - ) - private boolean isEmpty(ChunkCache chunkCache) { - if (!chunkCache.isEmpty()) { - return false; - } - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getMinecraft().isSingleplayer()) { - Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); - IPlayerContext ctx = baritone.getPlayerContext(); - if (ctx.player() != null && ctx.world() != null && baritone.bsi != null) { - BlockPos position = ((RenderChunk) (Object) this).getPosition(); - // RenderChunk extends from -1,-1,-1 to +16,+16,+16 - // then the constructor of ChunkCache extends it one more (presumably to get things like the connected status of fences? idk) - // so if ANY of the adjacent chunks are loaded, we are unempty - for (int dx = -1; dx <= 1; dx++) { - for (int dz = -1; dz <= 1; dz++) { - if (baritone.bsi.isLoaded(16 * dx + position.getX(), 16 * dz + position.getZ())) { - return false; - } - } - } - } - } - - return true; - } - - @Redirect( - method = "rebuildChunk", - at = @At( - value = "INVOKE", - target = "net/minecraft/world/ChunkCache.getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/IBlockState;" - ) - ) - private IBlockState getBlockState(ChunkCache chunkCache, BlockPos pos) { - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getMinecraft().isSingleplayer()) { - Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); - IPlayerContext ctx = baritone.getPlayerContext(); - if (ctx.player() != null && ctx.world() != null && baritone.bsi != null) { - return baritone.bsi.get0(pos); - } - } - - return chunkCache.getBlockState(pos); - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderList.java b/src/launch/java/baritone/launch/mixins/MixinRenderList.java deleted file mode 100644 index 3efb3a10c..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinRenderList.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderList; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import static org.lwjgl.opengl.GL11.*; - -@Mixin(RenderList.class) -public class MixinRenderList { - - @Redirect( // avoid creating CallbackInfo at all costs; this is called 40k times per second - method = "renderChunkLayer", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/renderer/GlStateManager.popMatrix()V" - ) - ) - private void popMatrix() { - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getMinecraft().isSingleplayer()) { - // reset the blend func to normal (not dependent on constant alpha) - GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - } - GlStateManager.popMatrix(); - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java new file mode 100644 index 000000000..ed896730f --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.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.launch.mixins; + +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; +import baritone.api.event.events.ChatEvent; +import baritone.utils.accessor.IGuiScreen; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Style; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import java.net.URI; +import net.minecraft.client.gui.screens.Screen; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Screen.class) +public abstract class MixinScreen implements IGuiScreen { + + @Override + @Invoker("openLink") + public abstract void openLinkInvoker(URI url); + + + //TODO: switch to enum extention with mixin 9.0 or whenever Mumfrey gets around to it + @Inject(at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;)V", remap = false, ordinal = 1), method = "handleComponentClicked", cancellable = true) + public void handleCustomClickEvent(Style style, CallbackInfoReturnable cir) { + System.out.println("handleCustomClickEvent"); + ClickEvent clickEvent = style.getClickEvent(); + if (clickEvent == null) { + return; + } + IBaritone baritone = BaritoneAPI.getProvider().getPrimaryBaritone(); + if (baritone != null) { + baritone.getGameEventHandler().onSendChatMessage(new ChatEvent(clickEvent.getValue())); + } + cir.setReturnValue(true); + cir.cancel(); + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinStateImplementation.java b/src/launch/java/baritone/launch/mixins/MixinStateImplementation.java deleted file mode 100644 index fef47bbed..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinStateImplementation.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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 com.google.common.collect.ImmutableMap; -import net.minecraft.block.properties.IProperty; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(targets = "net.minecraft.block.state.BlockStateContainer$StateImplementation") -public abstract class MixinStateImplementation { - - @Shadow - @Final - private ImmutableMap, Comparable> properties; - - /** - * Block states are fucking immutable - */ - @Unique - private int hashCode; - - @Inject( - method = "*", - at = @At("RETURN") - ) - private void onInit(CallbackInfo ci) { - hashCode = properties.hashCode(); - } - - /** - * Cache this instead of using the fucking map every time - * - * @author LoganDark - * @reason Regular IBlockState generates a new hash every fucking time. This is not needed when scanning millions - * per second - */ - @Override - @Overwrite - public int hashCode() { - return hashCode; - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinTabCompleter.java b/src/launch/java/baritone/launch/mixins/MixinTabCompleter.java deleted file mode 100644 index 7f9a66fb7..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinTabCompleter.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.api.BaritoneAPI; -import baritone.api.IBaritone; -import baritone.api.event.events.TabCompleteEvent; -import net.minecraft.client.gui.GuiChat; -import net.minecraft.client.gui.GuiTextField; -import net.minecraft.util.TabCompleter; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(TabCompleter.class) -public abstract class MixinTabCompleter { - - @Shadow - @Final - protected GuiTextField textField; - - @Shadow - protected boolean requestedCompletions; - - @Shadow - public abstract void setCompletions(String... newCompl); - - @Unique - protected boolean dontComplete = false; - - @Inject( - method = "requestCompletions", - at = @At("HEAD"), - cancellable = true - ) - private void onRequestCompletions(String prefix, CallbackInfo ci) { - if (!((Object) this instanceof GuiChat.ChatTabCompleter)) { - return; - } - - IBaritone baritone = BaritoneAPI.getProvider().getPrimaryBaritone(); - - TabCompleteEvent event = new TabCompleteEvent(prefix); - baritone.getGameEventHandler().onPreTabComplete(event); - - if (event.isCancelled()) { - ci.cancel(); - return; - } - - if (event.completions != null) { - ci.cancel(); - - this.dontComplete = true; - - try { - this.requestedCompletions = true; - setCompletions(event.completions); - } finally { - this.dontComplete = false; - } - } - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinVboRenderList.java b/src/launch/java/baritone/launch/mixins/MixinVboRenderList.java deleted file mode 100644 index cec62336d..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinVboRenderList.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.VboRenderList; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import static org.lwjgl.opengl.GL11.*; - -@Mixin(VboRenderList.class) -public class MixinVboRenderList { - - @Redirect( // avoid creating CallbackInfo at all costs; this is called 40k times per second - method = "renderChunkLayer", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/renderer/GlStateManager.popMatrix()V" - ) - ) - private void popMatrix() { - if (Baritone.settings().renderCachedChunks.value && !Minecraft.getMinecraft().isSingleplayer()) { - // reset the blend func to normal (not dependent on constant alpha) - GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - } - GlStateManager.popMatrix(); - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldClient.java b/src/launch/java/baritone/launch/mixins/MixinWorldClient.java deleted file mode 100644 index 7c1561631..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinWorldClient.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.api.BaritoneAPI; -import baritone.api.IBaritone; -import baritone.api.event.events.ChunkEvent; -import baritone.api.event.events.type.EventState; -import net.minecraft.client.multiplayer.WorldClient; -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.CallbackInfo; - -/** - * @author Brady - * @since 8/2/2018 - */ -@Mixin(WorldClient.class) -public class MixinWorldClient { - - @Inject( - method = "doPreChunk", - at = @At("HEAD") - ) - private void preDoPreChunk(int chunkX, int chunkZ, boolean loadChunk, CallbackInfo ci) { - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().world() == (WorldClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.PRE, - loadChunk ? ChunkEvent.Type.LOAD : ChunkEvent.Type.UNLOAD, - chunkX, - chunkZ - ) - ); - } - } - - } - - @Inject( - method = "doPreChunk", - at = @At("RETURN") - ) - private void postDoPreChunk(int chunkX, int chunkZ, boolean loadChunk, CallbackInfo ci) { - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - if (ibaritone.getPlayerContext().world() == (WorldClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - loadChunk ? ChunkEvent.Type.LOAD : ChunkEvent.Type.UNLOAD, - chunkX, - chunkZ - ) - ); - } - } - } -} diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java similarity index 59% rename from src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java rename to src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java index dfd01e46e..622721281 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java @@ -20,26 +20,33 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; -import net.minecraft.client.renderer.EntityRenderer; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; +import net.minecraft.client.Camera; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.LightTexture; 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.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -@Mixin(EntityRenderer.class) -public class MixinEntityRenderer { +/** + * @author Brady + * @since 2/13/2020 + */ +@Mixin(LevelRenderer.class) +public class MixinWorldRenderer { @Inject( - method = "renderWorldPass", - at = @At( - value = "INVOKE_STRING", - target = "Lnet/minecraft/profiler/Profiler;endStartSection(Ljava/lang/String;)V", - args = {"ldc=hand"} - ) + method = "renderLevel", + at = @At("RETURN"), + locals = LocalCapture.CAPTURE_FAILSOFT ) - private void renderWorldPass(int pass, float partialTicks, long finishTimeNano, CallbackInfo ci) { + private void onStartHand(PoseStack matrixStackIn, float partialTicks, long finishTimeNano, boolean drawBlockOutline, Camera activeRenderInfoIn, GameRenderer gameRendererIn, LightTexture lightmapIn, Matrix4f projectionIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks)); + ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks, matrixStackIn, projectionIn)); } } -} +} \ No newline at end of file diff --git a/src/launch/resources/META-INF/MANIFEST.MF b/src/launch/resources/META-INF/MANIFEST.MF new file mode 100644 index 000000000..4ab94e276 --- /dev/null +++ b/src/launch/resources/META-INF/MANIFEST.MF @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +MixinConfigs: mixins.baritone-meteor.json +MixinConnector: baritone.launch.BaritoneMixinConnector +Implementation-Title: Baritone +Implementation-Version: version diff --git a/src/launch/resources/mixins.baritone-meteor.json b/src/launch/resources/mixins.baritone-meteor.json new file mode 100644 index 000000000..18638b4db --- /dev/null +++ b/src/launch/resources/mixins.baritone-meteor.json @@ -0,0 +1,28 @@ +{ + "required": true, + "package": "baritone.launch.mixins", + "compatibilityLevel": "JAVA_17", + "verbose": false, + "injectors": { + "maxShiftBy": 2, + "defaultRequire": 1 + }, + "plugin": "baritone.launch.MixinPlugin", + "client": [ + "MixinChunkArray", + "MixinClientChunkProvider", + "MixinClientPlayerEntity", + "MixinClientPlayNetHandler", + "MixinCommandSuggestionHelper", + "MixinEntity", + "MixinEntityRenderManager", + "MixinItemStack", + "MixinLivingEntity", + "MixinLootContext", + "MixinMinecraft", + "MixinNetworkManager", + "MixinPlayerController", + "MixinScreen", + "MixinWorldRenderer" + ] +} \ No newline at end of file diff --git a/src/launch/resources/pack.mcmeta b/src/launch/resources/pack.mcmeta new file mode 100644 index 000000000..1bc616027 --- /dev/null +++ b/src/launch/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "baritoe", + "pack_format": 5 + } +} diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index d03953fd9..7174a1228 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -56,7 +56,7 @@ public class Baritone implements IBaritone { static { threadPool = new ThreadPoolExecutor(4, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<>()); - dir = new File(Minecraft.getMinecraft().gameDir, "baritone"); + dir = new File(Minecraft.getInstance().gameDirectory, "baritone"); if (!Files.exists(dir.toPath())) { try { Files.createDirectories(dir.toPath()); @@ -68,8 +68,8 @@ public class Baritone implements IBaritone { private PathingBehavior pathingBehavior; private LookBehavior lookBehavior; - private MemoryBehavior memoryBehavior; private InventoryBehavior inventoryBehavior; + private WaypointBehavior waypointBehavior; private InputOverrideHandler inputOverrideHandler; private FollowProcess followProcess; @@ -100,9 +100,9 @@ public class Baritone implements IBaritone { // the Behavior constructor calls baritone.registerBehavior(this) so this populates the behaviors arraylist pathingBehavior = new PathingBehavior(this); lookBehavior = new LookBehavior(this); - memoryBehavior = new MemoryBehavior(this); inventoryBehavior = new InventoryBehavior(this); inputOverrideHandler = new InputOverrideHandler(this); + waypointBehavior = new WaypointBehavior(this); } this.pathingControlManager = new PathingControlManager(this); @@ -151,10 +151,6 @@ public IPlayerContext getPlayerContext() { return this.playerContext; } - public MemoryBehavior getMemoryBehavior() { - return this.memoryBehavior; - } - @Override public FollowProcess getFollowProcess() { return this.followProcess; @@ -217,7 +213,7 @@ public void openClick() { new Thread(() -> { try { Thread.sleep(100); - Helper.mc.addScheduledTask(() -> Helper.mc.displayGuiScreen(new GuiClick())); + Helper.mc.execute(() -> Helper.mc.setScreen(new GuiClick())); } catch (Exception ignored) {} }).start(); } diff --git a/src/main/java/baritone/altoclef/AltoClefSettings.java b/src/main/java/baritone/altoclef/AltoClefSettings.java new file mode 100644 index 000000000..9ec44b3c2 --- /dev/null +++ b/src/main/java/baritone/altoclef/AltoClefSettings.java @@ -0,0 +1,252 @@ +/* + * 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.altoclef; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.function.BiFunction; +import java.util.function.BiPredicate; +import java.util.function.Predicate; + +public class AltoClefSettings { + + // woo singletons + private static AltoClefSettings _instance = new AltoClefSettings(); + private final Object breakMutex = new Object(); + private final Object placeMutex = new Object(); + private final Object propertiesMutex = new Object(); + private final Object globalHeuristicMutex = new Object(); + private final HashSet _blocksToAvoidBreaking = new HashSet<>(); + private final List> _breakAvoiders = new ArrayList<>(); + private final List> _placeAvoiders = new ArrayList<>(); + private final List> _forceCanWalkOn = new ArrayList<>(); + private final List> _forceAvoidWalkThrough = new ArrayList<>(); + private final List> _forceUseTool = new ArrayList<>(); + private final List> _globalHeuristics = new ArrayList<>(); + private final HashSet _protectedItems = new HashSet<>(); + private boolean _allowFlowingWaterPass; + private boolean _pauseInteractions; + private boolean _dontPlaceBucketButStillFall; + private boolean _allowSwimThroughLava = false; + private boolean _treatSoulSandAsOrdinaryBlock = false; + + public static AltoClefSettings getInstance() { + return _instance; + } + + public void avoidBlockBreak(BlockPos pos) { + synchronized (breakMutex) { + _blocksToAvoidBreaking.add(pos); + } + } + + public void avoidBlockBreak(Predicate avoider) { + synchronized (breakMutex) { + _breakAvoiders.add(avoider); + } + } + + public void configurePlaceBucketButDontFall(boolean allow) { + synchronized (propertiesMutex) { + _dontPlaceBucketButStillFall = allow; + } + } + + public void treatSoulSandAsOrdinaryBlock(boolean enable) { + synchronized (propertiesMutex) { + _treatSoulSandAsOrdinaryBlock = enable; + } + } + + public void avoidBlockPlace(Predicate avoider) { + synchronized (placeMutex) { + _placeAvoiders.add(avoider); + } + } + + public boolean shouldAvoidBreaking(int x, int y, int z) { + return shouldAvoidBreaking(new BlockPos(x, y, z)); + } + + public boolean shouldAvoidBreaking(BlockPos pos) { + synchronized (breakMutex) { + if (_blocksToAvoidBreaking.contains(pos)) + return true; + return (_breakAvoiders.stream().anyMatch(pred -> pred.test(pos))); + } + } + + public boolean shouldAvoidPlacingAt(BlockPos pos) { + synchronized (placeMutex) { + return _placeAvoiders.stream().anyMatch(pred -> pred.test(pos)); + } + } + + public boolean shouldAvoidPlacingAt(int x, int y, int z) { + return shouldAvoidPlacingAt(new BlockPos(x, y, z)); + } + + public boolean canWalkOnForce(int x, int y, int z) { + synchronized (propertiesMutex) { + return _forceCanWalkOn.stream().anyMatch(pred -> pred.test(new BlockPos(x, y, z))); + } + } + + public boolean shouldAvoidWalkThroughForce(BlockPos pos) { + synchronized (propertiesMutex) { + return _forceAvoidWalkThrough.stream().anyMatch(pred -> pred.test(pos)); + } + } + + public boolean shouldAvoidWalkThroughForce(int x, int y, int z) { + return shouldAvoidWalkThroughForce(new BlockPos(x, y, z)); + } + + public boolean shouldForceUseTool(BlockState state, ItemStack tool) { + synchronized (propertiesMutex) { + return _forceUseTool.stream().anyMatch(pred -> pred.test(state, tool)); + } + } + + public boolean shouldNotPlaceBucketButStillFall() { + synchronized (propertiesMutex) { + return _dontPlaceBucketButStillFall; + } + } + + public boolean shouldTreatSoulSandAsOrdinaryBlock() { + synchronized (propertiesMutex) { + return _treatSoulSandAsOrdinaryBlock; + } + } + + public boolean isInteractionPaused() { + synchronized (propertiesMutex) { + return _pauseInteractions; + } + } + + public void setInteractionPaused(boolean paused) { + synchronized (propertiesMutex) { + _pauseInteractions = paused; + } + } + + public boolean isFlowingWaterPassAllowed() { + synchronized (propertiesMutex) { + return _allowFlowingWaterPass; + } + } + + public boolean canSwimThroughLava() { + synchronized (propertiesMutex) { + return _allowSwimThroughLava; + } + } + + public void setFlowingWaterPass(boolean pass) { + synchronized (propertiesMutex) { + _allowFlowingWaterPass = pass; + } + } + + public void allowSwimThroughLava(boolean allow) { + synchronized (propertiesMutex) { + _allowSwimThroughLava = allow; + } + } + + public double applyGlobalHeuristic(double prev, int x, int y, int z) { + return prev; + /* + synchronized (globalHeuristicMutex) { + BlockPos p = new BlockPos(x, y, z); + for (BiFunction toApply : _globalHeuristics) { + prev = toApply.apply(prev, p); + } + } + return prev; + */ + } + + public HashSet getBlocksToAvoidBreaking() { + return _blocksToAvoidBreaking; + } + + public List> getBreakAvoiders() { + return _breakAvoiders; + } + + public List> getPlaceAvoiders() { + return _placeAvoiders; + } + + public List> getForceWalkOnPredicates() { + return _forceCanWalkOn; + } + + public List> getForceAvoidWalkThroughPredicates() { + return _forceAvoidWalkThrough; + } + + public List> getForceUseToolPredicates() { + return _forceUseTool; + } + + public List> getGlobalHeuristics() { + return _globalHeuristics; + } + + public boolean isItemProtected(Item item) { + return _protectedItems.contains(item); + } + + public HashSet getProtectedItems() { + return _protectedItems; + } + + public void protectItem(Item item) { + _protectedItems.add(item); + } + + public void stopProtectingItem(Item item) { + _protectedItems.remove(item); + } + + public Object getBreakMutex() { + return breakMutex; + } + + public Object getPlaceMutex() { + return placeMutex; + } + + public Object getPropertiesMutex() { + return propertiesMutex; + } + + public Object getGlobalHeuristicMutex() { + return globalHeuristicMutex; + } +} diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index e96f1d54c..ed540b0f4 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -18,17 +18,21 @@ package baritone.behavior; import baritone.Baritone; -import baritone.api.BaritoneAPI; import baritone.api.event.events.TickEvent; import baritone.utils.ToolSet; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.ClickType; -import net.minecraft.item.*; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.NonNullList; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.Direction; +import net.minecraft.core.NonNullList; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.item.*; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; import java.util.ArrayList; import java.util.OptionalInt; @@ -49,14 +53,14 @@ public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } - if (ctx.player().openContainer != ctx.player().inventoryContainer) { + if (ctx.player().containerMenu != ctx.player().inventoryMenu) { // we have a crafting table or a chest or something open return; } if (firstValidThrowaway() >= 9) { // aka there are none on the hotbar, but there are some in main inventory swapWithHotBar(firstValidThrowaway(), 8); } - int pick = bestToolAgainst(Blocks.STONE, ItemPickaxe.class); + int pick = bestToolAgainst(Blocks.STONE, PickaxeItem.class); if (pick >= 9) { swapWithHotBar(pick, 0); } @@ -73,7 +77,7 @@ public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { // we're using 0 and 8 for pickaxe and throwaway ArrayList candidates = new ArrayList<>(); for (int i = 1; i < 8; i++) { - if (ctx.player().inventory.mainInventory.get(i).isEmpty() && !disallowedHotbar.test(i)) { + if (ctx.player().getInventory().items.get(i).isEmpty() && !disallowedHotbar.test(i)) { candidates.add(i); } } @@ -91,11 +95,11 @@ public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { } private void swapWithHotBar(int inInventory, int inHotbar) { - ctx.playerController().windowClick(ctx.player().inventoryContainer.windowId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); + ctx.playerController().windowClick(ctx.player().inventoryMenu.containerId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); } private int firstValidThrowaway() { // TODO offhand idk - NonNullList invy = ctx.player().inventory.mainInventory; + NonNullList invy = ctx.player().getInventory().items; for (int i = 0; i < invy.size(); i++) { if (Baritone.settings().acceptableThrowawayItems.value.contains(invy.get(i).getItem())) { return i; @@ -104,8 +108,8 @@ private int firstValidThrowaway() { // TODO offhand idk return -1; } - private int bestToolAgainst(Block against, Class cla$$) { - NonNullList invy = ctx.player().inventory.mainInventory; + private int bestToolAgainst(Block against, Class cla$$) { + NonNullList invy = ctx.player().getInventory().items; int bestInd = -1; double bestSpeed = -1; for (int i = 0; i < invy.size(); i++) { @@ -113,11 +117,11 @@ private int bestToolAgainst(Block against, Class cla$$) { if (stack.isEmpty()) { continue; } - if (Baritone.settings().itemSaver.value && (stack.getItemDamage() + Baritone.settings().itemSaverThreshold.value) >= stack.getMaxDamage() && stack.getMaxDamage() > 1) { + if (Baritone.settings().itemSaver.value && (stack.getDamageValue() + Baritone.settings().itemSaverThreshold.value) >= stack.getMaxDamage() && stack.getMaxDamage() > 1) { continue; } if (cla$$.isInstance(stack.getItem())) { - double speed = ToolSet.calculateSpeedVsBlock(stack, against.getDefaultState()); // takes into account enchants + double speed = ToolSet.calculateSpeedVsBlock(stack, against.defaultBlockState()); // takes into account enchants if (speed > bestSpeed) { bestSpeed = speed; bestInd = i; @@ -137,11 +141,12 @@ public boolean hasGenericThrowaway() { } public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { - IBlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); - if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof ItemBlock && maybe.equals(((ItemBlock) stack.getItem()).getBlock().getStateForPlacement(ctx.world(), ctx.playerFeet(), EnumFacing.UP, (float) ctx.player().posX, (float) ctx.player().posY, (float) ctx.player().posZ, stack.getItem().getMetadata(stack.getMetadata()), ctx.player())))) { + BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { + }))))) { return true; // gotem } - if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof ItemBlock && ((ItemBlock) stack.getItem()).getBlock().equals(maybe.getBlock()))) { + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && ((BlockItem) stack.getItem()).getBlock().equals(maybe.getBlock()))) { return true; } for (Item item : Baritone.settings().acceptableThrowawayItems.value) { @@ -157,8 +162,8 @@ public boolean throwaway(boolean select, Predicate desired) { } public boolean throwaway(boolean select, Predicate desired, boolean allowInventory) { - EntityPlayerSP p = ctx.player(); - NonNullList inv = p.inventory.mainInventory; + LocalPlayer p = ctx.player(); + NonNullList inv = p.getInventory().items; for (int i = 0; i < 9; i++) { ItemStack item = inv.get(i); // this usage of settings() is okay because it's only called once during pathing @@ -168,12 +173,12 @@ public boolean throwaway(boolean select, Predicate desired, b // acceptableThrowawayItems to the CalculationContext if (desired.test(item)) { if (select) { - p.inventory.currentItem = i; + p.getInventory().selected = i; } return true; } } - if (desired.test(p.inventory.offHandInventory.get(0))) { + if (desired.test(p.getInventory().offhand.get(0))) { // main hand takes precedence over off hand // that means that if we have block A selected in main hand and block B in off hand, right clicking places block B // we've already checked above ^ and the main hand can't possible have an acceptablethrowawayitem @@ -181,9 +186,9 @@ public boolean throwaway(boolean select, Predicate desired, b // so not a shovel, not a hoe, not a block, etc for (int i = 0; i < 9; i++) { ItemStack item = inv.get(i); - if (item.isEmpty() || item.getItem() instanceof ItemPickaxe) { + if (item.isEmpty() || item.getItem() instanceof PickaxeItem) { if (select) { - p.inventory.currentItem = i; + p.getInventory().selected = i; } return true; } @@ -195,7 +200,7 @@ public boolean throwaway(boolean select, Predicate desired, b if (desired.test(inv.get(i))) { swapWithHotBar(i, 7); if (select) { - p.inventory.currentItem = 7; + p.getInventory().selected = 7; } return true; } diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 32e5c22f5..13b8ebdd4 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -28,9 +28,6 @@ public final class LookBehavior extends Behavior implements ILookBehavior { /** * Target's values are as follows: - *

- * getFirst() -> yaw - * getSecond() -> pitch */ private Rotation target; @@ -53,6 +50,13 @@ public LookBehavior(Baritone baritone) { @Override public void updateTarget(Rotation target, boolean force) { this.target = target; + if (!force) { + double rand = Math.random() - 0.5; + if (Math.abs(rand) < 0.1) { + rand *= 4; + } + this.target = new Rotation(this.target.getYaw() + (float) (rand * Baritone.settings().randomLooking113.value), this.target.getPitch()); + } this.force = force || !Baritone.settings().freeLook.value; } @@ -68,26 +72,26 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { switch (event.getState()) { case PRE: { if (this.force) { - ctx.player().rotationYaw = this.target.getYaw(); - float oldPitch = ctx.player().rotationPitch; + ctx.player().setYRot(this.target.getYaw()); + float oldPitch = ctx.player().getXRot(); float desiredPitch = this.target.getPitch(); - ctx.player().rotationPitch = desiredPitch; - ctx.player().rotationYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; - ctx.player().rotationPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; + ctx.player().setXRot(desiredPitch); + ctx.player().setYRot((float) (ctx.player().getYRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); + ctx.player().setXRot((float) (ctx.player().getXRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); if (desiredPitch == oldPitch && !Baritone.settings().freeLook.value) { nudgeToLevel(); } this.target = null; } if (silent) { - this.lastYaw = ctx.player().rotationYaw; - ctx.player().rotationYaw = this.target.getYaw(); + this.lastYaw = ctx.player().getYRot(); + ctx.player().setYRot(this.target.getYaw()); } break; } case POST: { if (silent) { - ctx.player().rotationYaw = this.lastYaw; + ctx.player().setYRot(this.lastYaw); this.target = null; } break; @@ -99,7 +103,7 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { public void pig() { if (this.target != null) { - ctx.player().rotationYaw = this.target.getYaw(); + ctx.player().setYRot(this.target.getYaw()); } } @@ -121,10 +125,10 @@ public void onPlayerRotationMove(RotationMoveEvent event) { * Nudges the player's pitch to a regular level. (Between {@code -20} and {@code 10}, increments are by {@code 1}) */ private void nudgeToLevel() { - if (ctx.player().rotationPitch < -20) { - ctx.player().rotationPitch++; - } else if (ctx.player().rotationPitch > 10) { - ctx.player().rotationPitch--; + if (ctx.player().getXRot() < -20) { + ctx.player().setXRot(ctx.player().getXRot() + 1); + } else if (ctx.player().getXRot() > 10) { + ctx.player().setXRot(ctx.player().getXRot() - 1); } } } diff --git a/src/main/java/baritone/behavior/MemoryBehavior.java b/src/main/java/baritone/behavior/MemoryBehavior.java deleted file mode 100644 index ee8bf0e43..000000000 --- a/src/main/java/baritone/behavior/MemoryBehavior.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * 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.behavior; - -import baritone.Baritone; -import baritone.api.cache.IWaypoint; -import baritone.api.cache.Waypoint; -import baritone.api.event.events.BlockInteractEvent; -import baritone.api.event.events.PacketEvent; -import baritone.api.event.events.PlayerUpdateEvent; -import baritone.api.event.events.TickEvent; -import baritone.api.event.events.type.EventState; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.Helper; -import baritone.cache.ContainerMemory; -import baritone.utils.BlockStateInterface; -import net.minecraft.block.Block; -import net.minecraft.block.BlockBed; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.network.Packet; -import net.minecraft.network.play.client.CPacketCloseWindow; -import net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock; -import net.minecraft.network.play.server.SPacketCloseWindow; -import net.minecraft.network.play.server.SPacketOpenWindow; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityLockable; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.*; - -import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; - -/** - * doesn't work for horse inventories :^) - * - * @author Brady - * @since 8/6/2018 - */ -public final class MemoryBehavior extends Behavior { - - private final List futureInventories = new ArrayList<>(); // this is per-bot - - private Integer enderChestWindowId; // nae nae - - public MemoryBehavior(Baritone baritone) { - super(baritone); - } - - @Override - public synchronized void onTick(TickEvent event) { - if (!Baritone.settings().containerMemory.value) { - return; - } - if (event.getType() == TickEvent.Type.OUT) { - enderChestWindowId = null; - futureInventories.clear(); - } - } - - @Override - public synchronized void onPlayerUpdate(PlayerUpdateEvent event) { - if (event.getState() == EventState.PRE) { - updateInventory(); - } - } - - @Override - public synchronized void onSendPacket(PacketEvent event) { - if (!Baritone.settings().containerMemory.value) { - return; - } - Packet p = event.getPacket(); - - if (event.getState() == EventState.PRE) { - if (p instanceof CPacketPlayerTryUseItemOnBlock) { - CPacketPlayerTryUseItemOnBlock packet = event.cast(); - - TileEntity tileEntity = ctx.world().getTileEntity(packet.getPos()); - // if tileEntity is an ender chest, we don't need to do anything. ender chests are treated the same regardless of what coordinate right clicked - - // Ensure the TileEntity is a container of some sort - if (tileEntity instanceof TileEntityLockable) { - - TileEntityLockable lockable = (TileEntityLockable) tileEntity; - int size = lockable.getSizeInventory(); - BetterBlockPos position = BetterBlockPos.from(tileEntity.getPos()); - BetterBlockPos adj = BetterBlockPos.from(neighboringConnectedBlock(position)); - System.out.println(position + " " + adj); - if (adj != null) { - size *= 2; // double chest or double trapped chest - if (adj.getX() < position.getX() || adj.getZ() < position.getZ()) { - position = adj; // standardize on the lower coordinate, regardless of which side of the large chest we right clicked - } - } - - this.futureInventories.add(new FutureInventory(System.nanoTime() / 1000000L, size, lockable.getGuiID(), position)); - } - } - - if (p instanceof CPacketCloseWindow) { - getCurrent().save(); - } - } - } - - @Override - public synchronized void onReceivePacket(PacketEvent event) { - if (!Baritone.settings().containerMemory.value) { - return; - } - Packet p = event.getPacket(); - - if (event.getState() == EventState.PRE) { - if (p instanceof SPacketOpenWindow) { - SPacketOpenWindow packet = event.cast(); - // Remove any entries that were created over a second ago, this should make up for INSANE latency - futureInventories.removeIf(i -> System.nanoTime() / 1000000L - i.time > 1000); - - System.out.println("Received packet " + packet.getGuiId() + " " + packet.getEntityId() + " " + packet.getSlotCount() + " " + packet.getWindowId()); - System.out.println(packet.getWindowTitle()); - if (packet.getWindowTitle() instanceof TextComponentTranslation && ((TextComponentTranslation) packet.getWindowTitle()).getKey().equals("container.enderchest")) { - // title is not customized (i.e. this isn't just a renamed shulker) - enderChestWindowId = packet.getWindowId(); - return; - } - futureInventories.stream() - .filter(i -> i.type.equals(packet.getGuiId()) && i.slots == packet.getSlotCount()) - .findFirst().ifPresent(matched -> { - // Remove the future inventory - futureInventories.remove(matched); - - // Setup the remembered inventory - getCurrentContainer().setup(matched.pos, packet.getWindowId(), packet.getSlotCount()); - }); - } - - if (p instanceof SPacketCloseWindow) { - getCurrent().save(); - } - } - } - - @Override - public void onBlockInteract(BlockInteractEvent event) { - if (event.getType() == BlockInteractEvent.Type.USE) { - BetterBlockPos pos = BetterBlockPos.from(event.getPos()); - IBlockState state = BlockStateInterface.get(ctx, pos); - if (state.getBlock() instanceof BlockBed) { - if (state.getValue(BlockBed.PART) == BlockBed.EnumPartType.FOOT) { - pos = pos.offset(state.getValue(BlockBed.FACING)); - } - Set waypoints = baritone.getWorldProvider().getCurrentWorld().getWaypoints().getByTag(IWaypoint.Tag.BED); - boolean exists = waypoints.stream().map(IWaypoint::getLocation).filter(pos::equals).findFirst().isPresent(); - if (!exists) { - baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(new Waypoint("bed", Waypoint.Tag.BED, pos)); - } - } - } - } - - @Override - public void onPlayerDeath() { - Waypoint deathWaypoint = new Waypoint("death", Waypoint.Tag.DEATH, ctx.playerFeet()); - baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(deathWaypoint); - ITextComponent component = new TextComponentString("Death position saved."); - component.getStyle() - .setColor(TextFormatting.WHITE) - .setHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, - new TextComponentString("Click to goto death") - )) - .setClickEvent(new ClickEvent( - ClickEvent.Action.RUN_COMMAND, - String.format( - "%s%s goto %s @ %d", - FORCE_COMMAND_PREFIX, - "wp", - deathWaypoint.getTag().getName(), - deathWaypoint.getCreationTimestamp() - ) - )); - Helper.HELPER.logDirect(component); - } - - - private void updateInventory() { - if (!Baritone.settings().containerMemory.value) { - return; - } - int windowId = ctx.player().openContainer.windowId; - if (enderChestWindowId != null) { - if (windowId == enderChestWindowId) { - getCurrent().contents = ctx.player().openContainer.getInventory().subList(0, 27); - } else { - getCurrent().save(); - enderChestWindowId = null; - } - } - if (getCurrentContainer() != null) { - getCurrentContainer().getInventoryFromWindow(windowId).ifPresent(inventory -> inventory.updateFromOpenWindow(ctx)); - } - } - - private ContainerMemory getCurrentContainer() { - if (baritone.getWorldProvider().getCurrentWorld() == null) { - return null; - } - return (ContainerMemory) baritone.getWorldProvider().getCurrentWorld().getContainerMemory(); - } - - private BlockPos neighboringConnectedBlock(BlockPos in) { - BlockStateInterface bsi = baritone.bsi; - Block block = bsi.get0(in).getBlock(); - if (block != Blocks.TRAPPED_CHEST && block != Blocks.CHEST) { - return null; // other things that have contents, but can be placed adjacent without combining - } - for (int i = 0; i < 4; i++) { - BlockPos adj = in.offset(EnumFacing.byHorizontalIndex(i)); - if (bsi.get0(adj).getBlock() == block) { - return adj; - } - } - return null; - } - - /** - * An inventory that we are not yet fully aware of, but are expecting to exist at some point in the future. - */ - private static final class FutureInventory { - - /** - * The time that we initially expected the inventory to be provided, in milliseconds - */ - private final long time; - - /** - * The amount of slots in the inventory - */ - private final int slots; - - /** - * The type of inventory - */ - private final String type; - - /** - * The position of the inventory container - */ - private final BlockPos pos; - - private FutureInventory(long time, int slots, String type, BlockPos pos) { - this.time = time; - this.slots = slots; - this.type = type; - this.pos = pos; - // betterblockpos has censoring - System.out.println("Future inventory created " + time + " " + slots + " " + type + " " + BetterBlockPos.from(pos)); - } - } - - public Optional> echest() { - return Optional.ofNullable(getCurrent().contents).map(Collections::unmodifiableList); - } - - public EnderChestMemory getCurrent() { - Path path = baritone.getWorldProvider().getCurrentWorld().directory; - return EnderChestMemory.getByServerAndPlayer(path.getParent(), ctx.player().getUniqueID()); - } - - public static class EnderChestMemory { - - private static final Map memory = new HashMap<>(); - private final Path enderChest; - private List contents; - - private EnderChestMemory(Path enderChest) { - this.enderChest = enderChest; - System.out.println("Echest storing in " + enderChest); - try { - this.contents = ContainerMemory.readItemStacks(Files.readAllBytes(enderChest)); - } catch (IOException e) { - e.printStackTrace(); - System.out.println("CANNOT read echest =( =("); - this.contents = null; - } - } - - public synchronized void save() { - System.out.println("Saving"); - if (contents != null) { - try { - enderChest.getParent().toFile().mkdir(); - Files.write(enderChest, ContainerMemory.writeItemStacks(contents)); - } catch (IOException e) { - e.printStackTrace(); - System.out.println("CANNOT save echest =( =("); - } - } - } - - private static synchronized EnderChestMemory getByServerAndPlayer(Path serverStorage, UUID player) { - return memory.computeIfAbsent(serverStorage.resolve("echests").resolve(player.toString()), EnderChestMemory::new); - } - } -} diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index f9c56c5a4..f18bd862b 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -36,7 +36,7 @@ import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.pathing.Favoring; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; import java.util.ArrayList; import java.util.Comparator; @@ -157,7 +157,7 @@ private void tickPath() { queuePathEvent(PathEvent.AT_GOAL); next = null; if (Baritone.settings().disconnectOnArrival.value) { - ctx.world().sendQuittingDisconnectingPacket(); + ctx.world().disconnect(); } return; } @@ -238,11 +238,11 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { if (current != null) { switch (event.getState()) { case PRE: - lastAutoJump = mc.gameSettings.autoJump; - mc.gameSettings.autoJump = false; + lastAutoJump = mc.options.autoJump().get(); + mc.options.autoJump().set(false); break; case POST: - mc.gameSettings.autoJump = lastAutoJump; + mc.options.autoJump().set(lastAutoJump); break; default: break; @@ -418,10 +418,10 @@ private void resetEstimatedTicksToGoal(BetterBlockPos start) { */ public BetterBlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); - if (!MovementHelper.canWalkOn(ctx, feet.down())) { - if (ctx.player().onGround) { - double playerX = ctx.player().posX; - double playerZ = ctx.player().posZ; + if (!MovementHelper.canWalkOn(ctx, feet.below())) { + if (ctx.player().isOnGround()) { + double playerX = ctx.player().position().x; + double playerZ = ctx.player().position().z; ArrayList closest = new ArrayList<>(); for (int dx = -1; dx <= 1; dx++) { for (int dz = -1; dz <= 1; dz++) { @@ -437,7 +437,7 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class // can't possibly be sneaking off of this one, we're too far away continue; } - if (MovementHelper.canWalkOn(ctx, possibleSupport.down()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.up())) { + if (MovementHelper.canWalkOn(ctx, possibleSupport.below()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.above())) { // this is plausible //logDebug("Faking path start assuming player is standing off the edge of a block"); return possibleSupport; @@ -447,9 +447,9 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class } else { // !onGround // we're in the middle of a jump - if (MovementHelper.canWalkOn(ctx, feet.down().down())) { + if (MovementHelper.canWalkOn(ctx, feet.below().below())) { //logDebug("Faking path start assuming player is midair and falling"); - return feet.down(); + return feet.below(); } } } diff --git a/src/main/java/baritone/behavior/WaypointBehavior.java b/src/main/java/baritone/behavior/WaypointBehavior.java new file mode 100644 index 000000000..035f1dfd6 --- /dev/null +++ b/src/main/java/baritone/behavior/WaypointBehavior.java @@ -0,0 +1,93 @@ +/* + * 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.behavior; + +import baritone.Baritone; +import baritone.api.cache.IWaypoint; +import baritone.api.cache.Waypoint; +import baritone.api.event.events.BlockInteractEvent; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Helper; +import baritone.utils.BlockStateInterface; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.level.block.BedBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BedPart; + +import java.util.Set; + +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + +public class WaypointBehavior extends Behavior { + + + public WaypointBehavior(Baritone baritone) { + super(baritone); + } + + @Override + public void onBlockInteract(BlockInteractEvent event) { + if (!Baritone.settings().doBedWaypoints.value) + return; + if (event.getType() == BlockInteractEvent.Type.USE) { + BetterBlockPos pos = BetterBlockPos.from(event.getPos()); + BlockState state = BlockStateInterface.get(ctx, pos); + if (state.getBlock() instanceof BedBlock) { + if (state.getValue(BedBlock.PART) == BedPart.FOOT) { + pos = pos.relative(state.getValue(BedBlock.FACING)); + } + Set waypoints = baritone.getWorldProvider().getCurrentWorld().getWaypoints().getByTag(IWaypoint.Tag.BED); + boolean exists = waypoints.stream().map(IWaypoint::getLocation).filter(pos::equals).findFirst().isPresent(); + if (!exists) { + baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(new Waypoint("bed", Waypoint.Tag.BED, pos)); + } + } + } + } + + @Override + public void onPlayerDeath() { + if (!Baritone.settings().doDeathWaypoints.value) + return; + Waypoint deathWaypoint = new Waypoint("death", Waypoint.Tag.DEATH, ctx.playerFeet()); + baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(deathWaypoint); + MutableComponent component = Component.literal("Death position saved."); + component.setStyle(component.getStyle() + .withColor(ChatFormatting.WHITE) + .withHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + Component.literal("Click to goto death") + )) + .withClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s goto %s @ %d", + FORCE_COMMAND_PREFIX, + "wp", + deathWaypoint.getTag().getName(), + deathWaypoint.getCreationTimestamp() + ) + ))); + Helper.HELPER.logDirect(component); + } + +} diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 67ac69420..3109d9293 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -21,10 +21,11 @@ import baritone.utils.pathing.PathingBlockType; import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; import java.util.ArrayList; import java.util.BitSet; @@ -38,23 +39,13 @@ public final class CachedChunk { public static final ImmutableSet BLOCKS_TO_KEEP_TRACK_OF = ImmutableSet.of( - Blocks.DIAMOND_BLOCK, - //Blocks.COAL_ORE, - Blocks.COAL_BLOCK, - //Blocks.IRON_ORE, - Blocks.IRON_BLOCK, - //Blocks.GOLD_ORE, - Blocks.GOLD_BLOCK, - Blocks.EMERALD_ORE, - Blocks.EMERALD_BLOCK, - Blocks.ENDER_CHEST, Blocks.FURNACE, Blocks.CHEST, Blocks.TRAPPED_CHEST, Blocks.END_PORTAL, Blocks.END_PORTAL_FRAME, - Blocks.MOB_SPAWNER, + Blocks.SPAWNER, Blocks.BARRIER, Blocks.OBSERVER, Blocks.WHITE_SHULKER_BOX, @@ -65,7 +56,7 @@ public final class CachedChunk { Blocks.LIME_SHULKER_BOX, Blocks.PINK_SHULKER_BOX, Blocks.GRAY_SHULKER_BOX, - Blocks.SILVER_SHULKER_BOX, + Blocks.LIGHT_GRAY_SHULKER_BOX, Blocks.CYAN_SHULKER_BOX, Blocks.PURPLE_SHULKER_BOX, Blocks.BLUE_SHULKER_BOX, @@ -73,36 +64,65 @@ public final class CachedChunk { Blocks.GREEN_SHULKER_BOX, Blocks.RED_SHULKER_BOX, Blocks.BLACK_SHULKER_BOX, - Blocks.PORTAL, + Blocks.NETHER_PORTAL, Blocks.HOPPER, Blocks.BEACON, Blocks.BREWING_STAND, - Blocks.SKULL, + +// TODO: Maybe add a predicate for blocks to keep track of? +// This should really not need to happen + Blocks.CREEPER_HEAD, + Blocks.CREEPER_WALL_HEAD, + Blocks.DRAGON_HEAD, + Blocks.DRAGON_WALL_HEAD, + Blocks.PLAYER_HEAD, + Blocks.PLAYER_WALL_HEAD, + Blocks.ZOMBIE_HEAD, + Blocks.ZOMBIE_WALL_HEAD, + Blocks.SKELETON_SKULL, + Blocks.SKELETON_WALL_SKULL, + Blocks.WITHER_SKELETON_SKULL, + Blocks.WITHER_SKELETON_WALL_SKULL, Blocks.ENCHANTING_TABLE, Blocks.ANVIL, - Blocks.LIT_FURNACE, - Blocks.BED, + Blocks.WHITE_BED, + Blocks.ORANGE_BED, + Blocks.MAGENTA_BED, + Blocks.LIGHT_BLUE_BED, + Blocks.YELLOW_BED, + Blocks.LIME_BED, + Blocks.PINK_BED, + Blocks.GRAY_BED, + Blocks.LIGHT_GRAY_BED, + Blocks.CYAN_BED, + Blocks.PURPLE_BED, + Blocks.BLUE_BED, + Blocks.BROWN_BED, + Blocks.GREEN_BED, + Blocks.RED_BED, + Blocks.BLACK_BED, Blocks.DRAGON_EGG, Blocks.JUKEBOX, Blocks.END_GATEWAY, - Blocks.WEB, + Blocks.COBWEB, Blocks.NETHER_WART, Blocks.LADDER, Blocks.VINE ); + public final int height; /** * The size of the chunk data in bits. Equal to 16 KiB. *

- * Chunks are 16x16x256, each block requires 2 bits. + * Chunks are 16x16xH, each block requires 2 bits. */ - public static final int SIZE = 2 * 16 * 16 * 256; + public final int size; /** - * The size of the chunk data in bytes. Equal to 16 KiB. + * The size of the chunk data in bytes. Equal to 16 KiB for 256 height. */ - public static final int SIZE_IN_BYTES = SIZE / 8; + public final int sizeInBytes; /** * The chunk x coordinate @@ -126,7 +146,7 @@ public final class CachedChunk { /** * The block names of each surface level block for generating an overview */ - private final IBlockState[] overview; + private final BlockState[] overview; private final int[] heightMap; @@ -134,11 +154,14 @@ public final class CachedChunk { public final long cacheTimestamp; - CachedChunk(int x, int z, BitSet data, IBlockState[] overview, Map> specialBlockLocations, long cacheTimestamp) { + CachedChunk(int x, int z, int height, BitSet data, BlockState[] overview, Map> specialBlockLocations, long cacheTimestamp) { + this.size = size(height); + this.sizeInBytes = sizeInBytes(size); validateSize(data); this.x = x; this.z = z; + this.height = height; this.data = data; this.overview = overview; this.heightMap = new int[256]; @@ -153,6 +176,14 @@ public final class CachedChunk { calculateHeightMap(); } + public static int size(int dimension_height) { + return 2 * 16 * 16 * dimension_height; + } + + public static int sizeInBytes(int size) { + return size / 8; + } + private final void setSpecial() { for (Map.Entry> entry : specialBlockLocations.entrySet()) { for (BlockPos pos : entry.getValue()) { @@ -161,7 +192,7 @@ private final void setSpecial() { } } - public final IBlockState getBlock(int x, int y, int z, int dimension) { + public final BlockState getBlock(int x, int y, int z, DimensionType dimension) { int index = getPositionIndex(x, y, z); PathingBlockType type = getType(index); int internalPos = z << 4 | x; @@ -170,28 +201,28 @@ public final IBlockState getBlock(int x, int y, int z, int dimension) { // we have this exact block, it's a surface block /*System.out.println("Saying that " + x + "," + y + "," + z + " is " + state); - if (!Minecraft.getMinecraft().world.getBlockState(new BlockPos(x + this.x * 16, y, z + this.z * 16)).getBlock().equals(state.getBlock())) { - throw new IllegalStateException("failed " + Minecraft.getMinecraft().world.getBlockState(new BlockPos(x + this.x * 16, y, z + this.z * 16)).getBlock() + " " + state.getBlock() + " " + (x + this.x * 16) + " " + y + " " + (z + this.z * 16)); + if (!Minecraft.getInstance().world.getBlockState(new BlockPos(x + this.x * 16, y, z + this.z * 16)).getBlock().equals(state.getBlock())) { + throw new IllegalStateException("failed " + Minecraft.getInstance().world.getBlockState(new BlockPos(x + this.x * 16, y, z + this.z * 16)).getBlock() + " " + state.getBlock() + " " + (x + this.x * 16) + " " + y + " " + (z + this.z * 16)); }*/ return overview[internalPos]; } if (special != null) { String str = special.get(index); if (str != null) { - return BlockUtils.stringToBlockRequired(str).getDefaultState(); + return BlockUtils.stringToBlockRequired(str).defaultBlockState(); } } if (type == PathingBlockType.SOLID) { - if (y == 127 && dimension == -1) { + if (y == dimension.logicalHeight() - 1 && dimension.hasCeiling()) { // nether roof is always unbreakable - return Blocks.BEDROCK.getDefaultState(); + return Blocks.BEDROCK.defaultBlockState(); } - if (y < 5 && dimension == 0) { + if (y < 5 && dimension.natural()) { // solid blocks below 5 are commonly bedrock // however, returning bedrock always would be a little yikes // discourage paths that include breaking blocks below 5 a little more heavily just so that it takes paths breaking what's known to be stone (at 5 or above) instead of what could maybe be bedrock (below 5) - return Blocks.OBSIDIAN.getDefaultState(); + return Blocks.OBSIDIAN.defaultBlockState(); } } return ChunkPacker.pathingTypeToBlock(type, dimension); @@ -206,7 +237,7 @@ private void calculateHeightMap() { for (int x = 0; x < 16; x++) { int index = z << 4 | x; heightMap[index] = 0; - for (int y = 256; y >= 0; y--) { + for (int y = height; y >= 0; y--) { int i = getPositionIndex(x, y, z); if (data.get(i) || data.get(i + 1)) { heightMap[index] = y; @@ -217,7 +248,7 @@ private void calculateHeightMap() { } } - public final IBlockState[] getOverview() { + public final BlockState[] getOverview() { return overview; } @@ -257,14 +288,14 @@ public static int getPositionIndex(int x, int y, int z) { /** * Validates the size of an input {@link BitSet} containing the raw - * packed chunk data. Sizes that exceed {@link CachedChunk#SIZE} are + * 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) { + private void validateSize(BitSet data) { + if (data.size() > size) { throw new IllegalArgumentException("BitSet of invalid length provided"); } } diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index 630dcc9e5..6c70f1eba 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -20,8 +20,9 @@ import baritone.Baritone; import baritone.api.cache.ICachedRegion; import baritone.api.utils.BlockUtils; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; import java.io.*; import java.nio.file.Files; @@ -43,7 +44,7 @@ public final class CachedRegion implements ICachedRegion { /** * Magic value to detect invalid cache files, or incompatible cache files saved in an old version of Baritone */ - private static final int CACHED_REGION_MAGIC = 456022910; + private static final int CACHED_REGION_MAGIC = 456022911; /** * All of the chunks in this region: A 32x32 array of them. @@ -60,14 +61,14 @@ public final class CachedRegion implements ICachedRegion { */ private final int z; - private final int dimension; + private final DimensionType dimension; /** * Has this region been modified since its most recent load or save */ private boolean hasUnsavedChanges; - CachedRegion(int x, int z, int dimension) { + CachedRegion(int x, int z, DimensionType dimension) { this.x = x; this.z = z; this.hasUnsavedChanges = false; @@ -75,10 +76,11 @@ public final class CachedRegion implements ICachedRegion { } @Override - public final IBlockState getBlock(int x, int y, int z) { + public final BlockState getBlock(int x, int y, int z) { + int adjY = y - dimension.minY(); CachedChunk chunk = chunks[x >> 4][z >> 4]; if (chunk != null) { - return chunk.getBlock(x & 15, y, z & 15, dimension); + return chunk.getBlock(x & 15, adjY, z & 15, dimension); } return null; } @@ -142,7 +144,7 @@ public synchronized final void save(String directory) { byte[] chunkBytes = chunk.toByteArray(); out.write(chunkBytes); // Messy, but fills the empty 0s that should be trailing to fill up the space. - out.write(new byte[CachedChunk.SIZE_IN_BYTES - chunkBytes.length]); + out.write(new byte[chunk.sizeInBytes - chunkBytes.length]); } } } @@ -165,7 +167,7 @@ public synchronized final void save(String directory) { out.writeShort(entry.getValue().size()); for (BlockPos pos : entry.getValue()) { out.writeByte((byte) (pos.getZ() << 4 | pos.getX())); - out.writeByte((byte) (pos.getY())); + out.writeInt(pos.getY() - dimension.minY()); } } } @@ -216,18 +218,19 @@ public synchronized void load(String directory) { boolean[][] present = new boolean[32][32]; BitSet[][] bitSets = new BitSet[32][32]; Map>[][] location = new Map[32][32]; - IBlockState[][][] overview = new IBlockState[32][32][]; + BlockState[][][] overview = new BlockState[32][32][]; long[][] cacheTimestamp = new long[32][32]; for (int x = 0; x < 32; x++) { for (int z = 0; z < 32; z++) { int isChunkPresent = in.read(); switch (isChunkPresent) { case CHUNK_PRESENT: - byte[] bytes = new byte[CachedChunk.SIZE_IN_BYTES]; + byte[] bytes = new byte[CachedChunk.sizeInBytes(CachedChunk.size(dimension.height()))]; in.readFully(bytes); bitSets[x][z] = BitSet.valueOf(bytes); location[x][z] = new HashMap<>(); - overview[x][z] = new IBlockState[256]; + //this is top block in columns + overview[x][z] = new BlockState[256]; present[x][z] = true; break; case CHUNK_NOT_PRESENT: @@ -241,7 +244,7 @@ public synchronized void load(String directory) { for (int z = 0; z < 32; z++) { if (present[x][z]) { for (int i = 0; i < 256; i++) { - overview[x][z][i] = BlockUtils.stringToBlockRequired(in.readUTF()).getDefaultState(); + overview[x][z][i] = BlockUtils.stringToBlockRequired(in.readUTF()).defaultBlockState(); } } } @@ -268,8 +271,8 @@ public synchronized void load(String directory) { byte xz = in.readByte(); int X = xz & 0x0f; int Z = (xz >>> 4) & 0x0f; - int Y = in.readByte() & 0xff; - locs.add(new BlockPos(X, Y, Z)); + int Y = in.readInt(); + locs.add(new BlockPos(X, Y + dimension.minY(), Z)); } } } @@ -290,7 +293,7 @@ public synchronized void load(String directory) { int regionZ = this.z; int chunkX = x + 32 * regionX; int chunkZ = z + 32 * regionZ; - this.chunks[x][z] = new CachedChunk(chunkX, chunkZ, bitSets[x][z], overview[x][z], location[x][z], cacheTimestamp[x][z]); + this.chunks[x][z] = new CachedChunk(chunkX, chunkZ, dimension.height(), bitSets[x][z], overview[x][z], location[x][z], cacheTimestamp[x][z]); } } } diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 1d1132465..2384d1c58 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -25,9 +25,10 @@ import baritone.api.utils.Helper; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.chunk.Chunk; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.dimension.DimensionType; import java.io.IOException; import java.nio.file.Files; @@ -69,11 +70,11 @@ public final class CachedWorld implements ICachedWorld, Helper { * All chunk positions pending packing. This map will be updated in-place if a new update to the chunk occurs * while waiting in the queue for the packer thread to get to it. */ - private final Map toPackMap = new ConcurrentHashMap<>(); + private final Map toPackMap = new ConcurrentHashMap<>(); - private final int dimension; + private final DimensionType dimension; - CachedWorld(Path directory, int dimension) { + CachedWorld(Path directory, DimensionType dimension) { if (!Files.exists(directory)) { try { Files.createDirectories(directory); @@ -101,7 +102,7 @@ public final class CachedWorld implements ICachedWorld, Helper { } @Override - public final void queueForPacking(Chunk chunk) { + public final void queueForPacking(LevelChunk chunk) { if (toPackMap.put(chunk.getPos(), chunk) == null) { toPackQueue.add(chunk.getPos()); } @@ -209,7 +210,7 @@ private synchronized void prune() { private BlockPos guessPosition() { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { IWorldData data = ibaritone.getWorldProvider().getCurrentWorld(); - if (data != null && data.getCachedWorld() == this) { + if (data != null && data.getCachedWorld() == this && ibaritone.getPlayerContext().player() != null) { return ibaritone.getPlayerContext().playerFeet(); } } @@ -306,7 +307,7 @@ public void run() { while (true) { try { ChunkPos pos = toPackQueue.take(); - Chunk chunk = toPackMap.remove(pos); + LevelChunk chunk = toPackMap.remove(pos); CachedChunk cached = ChunkPacker.pack(chunk); CachedWorld.this.updateCachedChunk(cached); //System.out.println("Processed chunk at " + chunk.x + "," + chunk.z); diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index ebd2fdaf8..4f922884d 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -20,33 +20,39 @@ import baritone.api.utils.BlockUtils; import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; -import net.minecraft.block.*; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.chunk.BlockStateContainer; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.chunk.PalettedContainer; +import net.minecraft.world.level.dimension.BuiltinDimensionTypes; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.phys.Vec3; import java.util.*; +import static baritone.utils.BlockStateInterface.getFromChunk; + /** * @author Brady * @since 8/3/2018 */ public final class ChunkPacker { - private ChunkPacker() {} + private ChunkPacker() { + } - public static CachedChunk pack(Chunk chunk) { + public static CachedChunk pack(LevelChunk chunk) { //long start = System.nanoTime() / 1000000L; Map> specialBlocks = new HashMap<>(); - BitSet bitSet = new BitSet(CachedChunk.SIZE); + final int height = chunk.getLevel().dimensionType().height(); + BitSet bitSet = new BitSet(CachedChunk.size(height)); try { - ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); - for (int y0 = 0; y0 < 16; y0++) { - ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; + LevelChunkSection[] chunkInternalStorageArray = chunk.getSections(); + for (int y0 = 0; y0 < height / 16; y0++) { + LevelChunkSection extendedblockstorage = chunkInternalStorageArray[y0]; if (extendedblockstorage == null) { // any 16x16x16 area that's all air will have null storage // for example, in an ocean biome, with air from y=64 to y=256 @@ -58,7 +64,7 @@ public static CachedChunk pack(Chunk chunk) { // since a bitset is initialized to all zero, and air is saved as zeros continue; } - BlockStateContainer bsc = extendedblockstorage.getData(); + PalettedContainer bsc = extendedblockstorage.getStates(); int yReal = y0 << 4; // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; // for better cache locality, iterate in that order @@ -67,14 +73,14 @@ public static CachedChunk pack(Chunk chunk) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { int index = CachedChunk.getPositionIndex(x, y, z); - IBlockState state = bsc.get(x, y1, z); + BlockState state = bsc.get(x, y1, z); boolean[] bits = getPathingBlockType(state, chunk, x, y, z).getBits(); bitSet.set(index, bits[0]); bitSet.set(index + 1, bits[1]); Block block = state.getBlock(); if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { String name = BlockUtils.blockToString(block); - specialBlocks.computeIfAbsent(name, b -> new ArrayList<>()).add(new BlockPos(x, y, z)); + specialBlocks.computeIfAbsent(name, b -> new ArrayList<>()).add(new BlockPos(x, y + chunk.getMinBuildHeight(), z)); } } } @@ -85,45 +91,47 @@ public static CachedChunk pack(Chunk chunk) { } //long end = System.nanoTime() / 1000000L; //System.out.println("Chunk packing took " + (end - start) + "ms for " + chunk.x + "," + chunk.z); - IBlockState[] blocks = new IBlockState[256]; + BlockState[] blocks = new BlockState[256]; + // get top block in columns // @formatter:off for (int z = 0; z < 16; z++) { https://www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html for (int x = 0; x < 16; x++) { - for (int y = 255; y >= 0; y--) { + for (int y = height - 1; y >= 0; y--) { int index = CachedChunk.getPositionIndex(x, y, z); if (bitSet.get(index) || bitSet.get(index + 1)) { - blocks[z << 4 | x] = chunk.getBlockState(x, y, z); + blocks[z << 4 | x] = getFromChunk(chunk, x, y, z); continue https; } } - blocks[z << 4 | x] = Blocks.AIR.getDefaultState(); + blocks[z << 4 | x] = Blocks.AIR.defaultBlockState(); } } // @formatter:on - return new CachedChunk(chunk.x, chunk.z, bitSet, blocks, specialBlocks, System.currentTimeMillis()); + return new CachedChunk(chunk.getPos().x, chunk.getPos().z, height, bitSet, blocks, specialBlocks, System.currentTimeMillis()); } - - private static PathingBlockType getPathingBlockType(IBlockState state, Chunk chunk, int x, int y, int z) { + private static PathingBlockType getPathingBlockType(BlockState state, LevelChunk chunk, int x, int y, int z) { Block block = state.getBlock(); - if (block == Blocks.WATER || block == Blocks.FLOWING_WATER) { + if (MovementHelper.isWater(state)) { // only water source blocks are plausibly usable, flowing water should be avoid // FLOWING_WATER is a waterfall, it doesn't really matter and caching it as AVOID just makes it look wrong if (MovementHelper.possiblyFlowing(state)) { return PathingBlockType.AVOID; } + int adjY = y - chunk.getLevel().dimensionType().minY(); if ( - (x != 15 && MovementHelper.possiblyFlowing(chunk.getBlockState(x + 1, y, z))) - || (x != 0 && MovementHelper.possiblyFlowing(chunk.getBlockState(x - 1, y, z))) - || (z != 15 && MovementHelper.possiblyFlowing(chunk.getBlockState(x, y, z + 1))) - || (z != 0 && MovementHelper.possiblyFlowing(chunk.getBlockState(x, y, z - 1))) + (x != 15 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x + 1, adjY, z))) + || (x != 0 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x - 1, adjY, z))) + || (z != 15 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x, adjY, z + 1))) + || (z != 0 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x, adjY, z - 1))) ) { return PathingBlockType.AVOID; } if (x == 0 || x == 15 || z == 0 || z == 15) { - if (BlockLiquid.getSlopeAngle(chunk.getWorld(), new BlockPos(x + (chunk.x << 4), y, z + (chunk.z << 4)), state.getMaterial(), state) == -1000.0F) { + Vec3 flow = state.getFluidState().getFlow(chunk.getLevel(), new BlockPos(x + (chunk.getPos().x << 4), y, z + (chunk.getPos().z << 4))); + if (flow.x != 0.0 || flow.z != 0.0) { return PathingBlockType.WATER; } return PathingBlockType.AVOID; @@ -131,38 +139,38 @@ private static PathingBlockType getPathingBlockType(IBlockState state, Chunk chu return PathingBlockType.WATER; } - if (MovementHelper.avoidWalkingInto(block) || MovementHelper.isBottomSlab(state)) { + if (MovementHelper.avoidWalkingInto(state) || MovementHelper.isBottomSlab(state)) { return PathingBlockType.AVOID; } // We used to do an AABB check here // however, this failed in the nether when you were near a nether fortress // because fences check their adjacent blocks in the world for their fence connection status to determine AABB shape // this caused a nullpointerexception when we saved chunks on unload, because they were unable to check their neighbors - if (block == Blocks.AIR || block instanceof BlockTallGrass || block instanceof BlockDoublePlant || block instanceof BlockFlower) { + if (block instanceof AirBlock || block instanceof TallGrassBlock || block instanceof DoublePlantBlock || block instanceof FlowerBlock) { return PathingBlockType.AIR; } return PathingBlockType.SOLID; } - public static IBlockState pathingTypeToBlock(PathingBlockType type, int dimension) { + public static BlockState pathingTypeToBlock(PathingBlockType type, DimensionType dimension) { switch (type) { case AIR: - return Blocks.AIR.getDefaultState(); + return Blocks.AIR.defaultBlockState(); case WATER: - return Blocks.WATER.getDefaultState(); + return Blocks.WATER.defaultBlockState(); case AVOID: - return Blocks.LAVA.getDefaultState(); + return Blocks.LAVA.defaultBlockState(); case SOLID: // Dimension solid types - switch (dimension) { - case -1: - return Blocks.NETHERRACK.getDefaultState(); - case 0: - default: // The fallback solid type - return Blocks.STONE.getDefaultState(); - case 1: - return Blocks.END_STONE.getDefaultState(); + if (dimension.natural()) { + return Blocks.STONE.defaultBlockState(); + } + if (dimension.ultraWarm()) { + return Blocks.NETHERRACK.defaultBlockState(); + } + if (dimension.effectsLocation().equals(BuiltinDimensionTypes.END_EFFECTS)) { + return Blocks.END_STONE.defaultBlockState(); } default: return null; diff --git a/src/main/java/baritone/cache/ContainerMemory.java b/src/main/java/baritone/cache/ContainerMemory.java deleted file mode 100644 index e79435e3a..000000000 --- a/src/main/java/baritone/cache/ContainerMemory.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * 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.cache; - -import baritone.Baritone; -import baritone.api.cache.IContainerMemory; -import baritone.api.cache.IRememberedInventory; -import baritone.api.utils.IPlayerContext; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.math.BlockPos; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.NoSuchFileException; -import java.nio.file.Path; -import java.util.*; - -public class ContainerMemory implements IContainerMemory { - - private final Path saveTo; - /** - * The current remembered inventories - */ - private final Map inventories = new HashMap<>(); - - - public ContainerMemory(Path saveTo) { - this.saveTo = saveTo; - try { - read(Files.readAllBytes(saveTo)); - } catch (NoSuchFileException ignored) { - inventories.clear(); - } catch (Exception ex) { - ex.printStackTrace(); - inventories.clear(); - } - } - - private void read(byte[] bytes) throws IOException { - PacketBuffer in = new PacketBuffer(Unpooled.wrappedBuffer(bytes)); - int chests = in.readInt(); - for (int i = 0; i < chests; i++) { - int x = in.readInt(); - int y = in.readInt(); - int z = in.readInt(); - RememberedInventory rem = new RememberedInventory(); - rem.items.addAll(readItemStacks(in)); - rem.size = rem.items.size(); - rem.windowId = -1; - if (rem.items.isEmpty()) { - continue; // this only happens if the list has no elements, not if the list has elements that are all empty item stacks - } - inventories.put(new BlockPos(x, y, z), rem); - } - } - - public synchronized void save() throws IOException { - if (!Baritone.settings().containerMemory.value) { - return; - } - ByteBuf buf = Unpooled.buffer(0, Integer.MAX_VALUE); - PacketBuffer out = new PacketBuffer(buf); - out.writeInt(inventories.size()); - for (Map.Entry entry : inventories.entrySet()) { - out = new PacketBuffer(out.writeInt(entry.getKey().getX())); - out = new PacketBuffer(out.writeInt(entry.getKey().getY())); - out = new PacketBuffer(out.writeInt(entry.getKey().getZ())); - out = writeItemStacks(entry.getValue().getContents(), out); - } - Files.write(saveTo, out.array()); - } - - public synchronized void setup(BlockPos pos, int windowId, int slotCount) { - RememberedInventory inventory = inventories.computeIfAbsent(pos, x -> new RememberedInventory()); - inventory.windowId = windowId; - inventory.size = slotCount; - } - - public synchronized Optional getInventoryFromWindow(int windowId) { - return inventories.values().stream().filter(i -> i.windowId == windowId).findFirst(); - } - - @Override - public final synchronized RememberedInventory getInventoryByPos(BlockPos pos) { - return inventories.get(pos); - } - - @Override - public final synchronized Map getRememberedInventories() { - // make a copy since this map is modified from the packet thread - return new HashMap<>(inventories); - } - - public static List readItemStacks(byte[] bytes) throws IOException { - PacketBuffer in = new PacketBuffer(Unpooled.wrappedBuffer(bytes)); - return readItemStacks(in); - } - - public static List readItemStacks(PacketBuffer in) throws IOException { - int count = in.readInt(); - List result = new ArrayList<>(); - for (int i = 0; i < count; i++) { - result.add(in.readItemStack()); - } - return result; - } - - public static byte[] writeItemStacks(List write) { - ByteBuf buf = Unpooled.buffer(0, Integer.MAX_VALUE); - PacketBuffer out = new PacketBuffer(buf); - out = writeItemStacks(write, out); - return out.array(); - } - - public static PacketBuffer writeItemStacks(List write, PacketBuffer out2) { - PacketBuffer out = out2; // avoid reassigning an argument LOL - out = new PacketBuffer(out.writeInt(write.size())); - for (ItemStack stack : write) { - out = out.writeItemStack(stack); - } - return out; - } - - /** - * An inventory that we are aware of. - *

- * Associated with a {@link BlockPos} in {@link ContainerMemory#inventories}. - */ - public static class RememberedInventory implements IRememberedInventory { - - /** - * The list of items in the inventory - */ - private final List items; - - /** - * The last known window ID of the inventory - */ - private int windowId; - - /** - * The size of the inventory - */ - private int size; - - private RememberedInventory() { - this.items = new ArrayList<>(); - } - - @Override - public final List getContents() { - return Collections.unmodifiableList(this.items); - } - - @Override - public final int getSize() { - return this.size; - } - - public void updateFromOpenWindow(IPlayerContext ctx) { - items.clear(); - items.addAll(ctx.player().openContainer.getInventory().subList(0, size)); - } - } -} diff --git a/src/main/java/baritone/cache/WorldData.java b/src/main/java/baritone/cache/WorldData.java index 30fe8bd0d..b8efb5e1c 100644 --- a/src/main/java/baritone/cache/WorldData.java +++ b/src/main/java/baritone/cache/WorldData.java @@ -19,11 +19,10 @@ import baritone.Baritone; import baritone.api.cache.ICachedWorld; -import baritone.api.cache.IContainerMemory; import baritone.api.cache.IWaypointCollection; import baritone.api.cache.IWorldData; +import net.minecraft.world.level.dimension.DimensionType; -import java.io.IOException; import java.nio.file.Path; /** @@ -35,16 +34,14 @@ public class WorldData implements IWorldData { public final CachedWorld cache; private final WaypointCollection waypoints; - private final ContainerMemory containerMemory; //public final MapData map; public final Path directory; - public final int dimension; + public final DimensionType dimension; - WorldData(Path directory, int dimension) { + WorldData(Path directory, DimensionType dimension) { this.directory = directory; this.cache = new CachedWorld(directory.resolve("cache"), dimension); this.waypoints = new WaypointCollection(directory.resolve("waypoints")); - this.containerMemory = new ContainerMemory(directory.resolve("containers")); this.dimension = dimension; } @@ -53,15 +50,6 @@ public void onClose() { System.out.println("Started saving the world in a new thread"); cache.save(); }); - Baritone.getExecutor().execute(() -> { - System.out.println("Started saving saved containers in a new thread"); - try { - containerMemory.save(); - } catch (IOException e) { - e.printStackTrace(); - System.out.println("Failed to save saved containers"); - } - }); } @Override @@ -73,9 +61,4 @@ public ICachedWorld getCachedWorld() { public IWaypointCollection getWaypoints() { return this.waypoints; } - - @Override - public IContainerMemory getContainerMemory() { - return this.containerMemory; - } } diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index c277a0d06..065823fe2 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -20,13 +20,13 @@ import baritone.Baritone; import baritone.api.cache.IWorldProvider; import baritone.api.utils.Helper; -import baritone.utils.accessor.IAnvilChunkLoader; -import baritone.utils.accessor.IChunkProviderServer; -import net.minecraft.server.integrated.IntegratedServer; -import net.minecraft.world.WorldServer; +import net.minecraft.client.server.IntegratedServer; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.storage.LevelResource; import org.apache.commons.lang3.SystemUtils; -import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; @@ -53,58 +53,72 @@ public final WorldData getCurrentWorld() { /** * Called when a new world is initialized to discover the * - * @param dimension The ID of the world's dimension + * @param world The world's Registry Data */ - public final void initWorld(int dimension) { - File directory; - File readme; + public final void initWorld(ResourceKey worldKey, DimensionType world) { + Path directory; + Path readme; - IntegratedServer integratedServer = mc.getIntegratedServer(); + IntegratedServer integratedServer = mc.getSingleplayerServer(); // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file - if (mc.isSingleplayer()) { - WorldServer localServerWorld = integratedServer.getWorld(dimension); - IChunkProviderServer provider = (IChunkProviderServer) localServerWorld.getChunkProvider(); - IAnvilChunkLoader loader = (IAnvilChunkLoader) provider.getChunkLoader(); - directory = loader.getChunkSaveLocation(); + if (mc.hasSingleplayerServer()) { + directory = DimensionType.getStorageFolder(worldKey, integratedServer.getWorldPath(LevelResource.ROOT)); // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world - if (directory.toPath().relativize(mc.gameDir.toPath()).getNameCount() != 2) { + if (directory.relativize(mc.gameDirectory.toPath()).getNameCount() != 2) { // subdirectory of the main save directory for this world - directory = directory.getParentFile(); + directory = directory.getParent(); } - directory = new File(directory, "baritone"); + directory = directory.resolve("baritone"); readme = directory; } else { // Otherwise, the server must be remote... - String folderName = mc.getCurrentServerData().serverIP; + String folderName; + if (mc.isConnectedToRealms()) { + folderName = "realms"; + } else { + if (mc.getCurrentServer() != null) { + folderName = mc.getCurrentServer().ip; + } else { + //replaymod causes null currentServerData and false singleplayer. + currentWorld = null; + return; + } + } if (SystemUtils.IS_OS_WINDOWS) { folderName = folderName.replace(":", "_"); } - directory = new File(Baritone.getDir(), folderName); - readme = Baritone.getDir(); + directory = Baritone.getDir().toPath().resolve(folderName); + readme = Baritone.getDir().toPath(); } // lol wtf is this baritone folder in my minecraft save? - try (FileOutputStream out = new FileOutputStream(new File(readme, "readme.txt"))) { + try (FileOutputStream out = new FileOutputStream(readme.resolve("readme.txt").toFile())) { // good thing we have a readme out.write("https://github.com/cabaletta/baritone\n".getBytes()); - } catch (IOException ignored) {} + } catch (IOException ignored) { + } // We will actually store the world data in a subfolder: "DIM" - Path dir = new File(directory, "DIM" + dimension).toPath(); + Path dir = getDimDir(worldKey, world.logicalHeight(), directory); if (!Files.exists(dir)) { try { Files.createDirectories(dir); - } catch (IOException ignored) {} + } catch (IOException ignored) { + } } System.out.println("Baritone world data dir: " + dir); synchronized (worldCache) { - this.currentWorld = worldCache.computeIfAbsent(dir, d -> new WorldData(d, dimension)); + this.currentWorld = worldCache.computeIfAbsent(dir, d -> new WorldData(d, world)); } } + public final Path getDimDir(ResourceKey level, int height, Path directory) { + return directory.resolve(level.location().getNamespace()).resolve(level.location().getPath() + "_" + height); + } + public final void closeWorld() { WorldData world = this.currentWorld; this.currentWorld = null; diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 362506298..35e46ba23 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -22,14 +22,14 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; -import baritone.utils.accessor.IBlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.multiplayer.ChunkProviderClient; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.IChunkProvider; -import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkSource; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.chunk.PalettedContainer; import java.util.*; import java.util.stream.IntStream; @@ -38,8 +38,6 @@ public enum WorldScanner implements IWorldScanner { INSTANCE; - private static final int[] DEFAULT_COORDINATE_ITERATION_ORDER = IntStream.range(0, 16).toArray(); - @Override public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) { ArrayList res = new ArrayList<>(); @@ -47,16 +45,15 @@ public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLooku if (filter.blocks().isEmpty()) { return res; } - - ChunkProviderClient chunkProvider = (ChunkProviderClient) ctx.world().getChunkProvider(); + ClientChunkCache chunkProvider = (ClientChunkCache) ctx.world().getChunkSource(); int maxSearchRadiusSq = maxSearchRadius * maxSearchRadius; int playerChunkX = ctx.playerFeet().getX() >> 4; int playerChunkZ = ctx.playerFeet().getZ() >> 4; - int playerY = ctx.playerFeet().getY(); + int playerY = ctx.playerFeet().getY() - ctx.world().dimensionType().minY(); int playerYBlockStateContainerIndex = playerY >> 4; - int[] coordinateIterationOrder = IntStream.range(0, 16).boxed().sorted(Comparator.comparingInt(y -> Math.abs(y - playerYBlockStateContainerIndex))).mapToInt(x -> x).toArray(); + int[] coordinateIterationOrder = IntStream.range(0, ctx.world().dimensionType().height() / 16).boxed().sorted(Comparator.comparingInt(y -> Math.abs(y - playerYBlockStateContainerIndex))).mapToInt(x -> x).toArray(); int searchRadiusSq = 0; boolean foundWithinY = false; @@ -72,12 +69,12 @@ public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLooku foundChunks = true; int chunkX = xoff + playerChunkX; int chunkZ = zoff + playerChunkZ; - Chunk chunk = chunkProvider.getLoadedChunk(chunkX, chunkZ); + LevelChunk chunk = chunkProvider.getChunk(chunkX, chunkZ, null, false); if (chunk == null) { continue; } allUnloaded = false; - if (scanChunkInto(chunkX << 4, chunkZ << 4, chunk, filter, res, max, yLevelThreshold, playerY, coordinateIterationOrder)) { + if (scanChunkInto(chunkX << 4, chunkZ << 4, ctx.world().dimensionType().minY(), chunk, filter, res, max, yLevelThreshold, playerY, coordinateIterationOrder)) { foundWithinY = true; } } @@ -98,8 +95,8 @@ public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filt return Collections.emptyList(); } - ChunkProviderClient chunkProvider = (ChunkProviderClient) ctx.world().getChunkProvider(); - Chunk chunk = chunkProvider.getLoadedChunk(pos.x, pos.z); + ClientChunkCache chunkProvider = (ClientChunkCache) ctx.world().getChunkSource(); + LevelChunk chunk = chunkProvider.getChunk(pos.x, pos.z, null, false); int playerY = ctx.playerFeet().getY(); if (chunk == null || chunk.isEmpty()) { @@ -107,7 +104,7 @@ public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filt } ArrayList res = new ArrayList<>(); - scanChunkInto(pos.x << 4, pos.z << 4, chunk, filter, res, max, yLevelThreshold, playerY, DEFAULT_COORDINATE_ITERATION_ORDER); + scanChunkInto(pos.x << 4, pos.z << 4, ctx.world().dimensionType().minY(), chunk, filter, res, max, yLevelThreshold, playerY, IntStream.range(0, ctx.world().dimensionType().height() / 16).toArray()); return res; } @@ -118,7 +115,7 @@ public int repack(IPlayerContext ctx) { @Override public int repack(IPlayerContext ctx, int range) { - IChunkProvider chunkProvider = ctx.world().getChunkProvider(); + ChunkSource chunkProvider = ctx.world().getChunkSource(); ICachedWorld cachedWorld = ctx.worldData().getCachedWorld(); BetterBlockPos playerPos = ctx.playerFeet(); @@ -134,7 +131,7 @@ public int repack(IPlayerContext ctx, int range) { int queued = 0; for (int x = minX; x <= maxX; x++) { for (int z = minZ; z <= maxZ; z++) { - Chunk chunk = chunkProvider.getLoadedChunk(x, z); + LevelChunk chunk = chunkProvider.getChunk(x, z, false); if (chunk != null && !chunk.isEmpty()) { queued++; @@ -146,37 +143,36 @@ public int repack(IPlayerContext ctx, int range) { return queued; } - private boolean scanChunkInto(int chunkX, int chunkZ, Chunk chunk, BlockOptionalMetaLookup filter, Collection result, int max, int yLevelThreshold, int playerY, int[] coordinateIterationOrder) { - ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); + private boolean scanChunkInto(int chunkX, int chunkZ, int minY, LevelChunk chunk, BlockOptionalMetaLookup filter, Collection result, int max, int yLevelThreshold, int playerY, int[] coordinateIterationOrder) { + LevelChunkSection[] chunkInternalStorageArray = chunk.getSections(); boolean foundWithinY = false; - for (int yIndex = 0; yIndex < 16; yIndex++) { - int y0 = coordinateIterationOrder[yIndex]; - ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; - if (extendedblockstorage == null) { + for (int y0 : coordinateIterationOrder) { + LevelChunkSection section = chunkInternalStorageArray[y0]; + if (section == null || section.hasOnlyAir()) { continue; } int yReal = y0 << 4; - IBlockStateContainer bsc = (IBlockStateContainer) extendedblockstorage.getData(); - // storageArray uses an optimized algorithm that's faster than getAt - // creating this array and then using getAtPalette is faster than even getFast(int index) - int[] storage = bsc.storageArray(); - final int imax = 1 << 12; - for (int i = 0; i < imax; i++) { - IBlockState state = bsc.getAtPalette(storage[i]); - if (filter.has(state)) { - int y = yReal | ((i >> 8) & 15); - if (result.size() >= max) { - if (Math.abs(y - playerY) < yLevelThreshold) { - foundWithinY = true; - } else { - if (foundWithinY) { - // have found within Y in this chunk, so don't need to consider outside Y - // TODO continue iteration to one more sorted Y coordinate block - return true; + PalettedContainer bsc = section.getStates(); + for (int yy = 0; yy < 16; yy++) { + for (int z = 0; z < 16; z++) { + for (int x = 0; x < 16; x++) { + BlockState state = bsc.get(x, yy, z); + if (filter.has(state)) { + int y = yReal | yy; + if (result.size() >= max) { + if (Math.abs(y - playerY) < yLevelThreshold) { + foundWithinY = true; + } else { + if (foundWithinY) { + // have found within Y in this chunk, so don't need to consider outside Y + // TODO continue iteration to one more sorted Y coordinate block + return true; + } + } } + result.add(new BlockPos(chunkX | x, y + minY, chunkZ | z)); } } - result.add(new BlockPos(chunkX | (i & 15), y, chunkZ | ((i >> 4) & 15))); } } } diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index 7050bf302..2ba6f74c9 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -34,12 +34,12 @@ import baritone.command.argument.CommandArguments; import baritone.command.manager.CommandManager; import baritone.utils.accessor.IGuiScreen; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; import net.minecraft.util.Tuple; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; import java.net.URI; import java.net.URISyntaxException; @@ -68,7 +68,7 @@ public void onSendChatMessage(ChatEvent event) { event.cancel(); String commandStr = msg.substring(forceRun ? FORCE_COMMAND_PREFIX.length() : prefix.length()); if (!runCommand(commandStr) && !commandStr.trim().isEmpty()) { - new CommandNotFoundException(CommandManager.expand(commandStr).getFirst()).handle(null, null); + new CommandNotFoundException(CommandManager.expand(commandStr).getA()).handle(null, null); } } else if ((settings.chatControl.value || settings.chatControlAnyway.value) && runCommand(msg)) { event.cancel(); @@ -79,17 +79,17 @@ private void logRanCommand(String command, String rest) { if (settings.echoCommands.value) { String msg = command + rest; String toDisplay = settings.censorRanCommands.value ? command + " ..." : msg; - ITextComponent component = new TextComponentString(String.format("> %s", toDisplay)); - component.getStyle() - .setColor(TextFormatting.WHITE) - .setHoverEvent(new HoverEvent( + MutableComponent component = Component.literal(String.format("> %s", toDisplay)); + component.setStyle(component.getStyle() + .withColor(ChatFormatting.WHITE) + .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new TextComponentString("Click to rerun command") + Component.literal("Click to rerun command") )) - .setClickEvent(new ClickEvent( + .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + msg - )); + ))); logDirect(component); } } @@ -100,17 +100,18 @@ public boolean runCommand(String msg) { return false; } else if (msg.trim().equalsIgnoreCase("orderpizza")) { try { - ((IGuiScreen) mc.currentScreen).openLink(new URI("https://www.dominos.com/en/pages/order/")); - } catch (NullPointerException | URISyntaxException ignored) {} + ((IGuiScreen) mc.screen).openLinkInvoker(new URI("https://www.dominos.com/en/pages/order/")); + } catch (NullPointerException | URISyntaxException ignored) { + } return false; } if (msg.isEmpty()) { return this.runCommand("help"); } Tuple> pair = CommandManager.expand(msg); - String command = pair.getFirst(); - String rest = msg.substring(pair.getFirst().length()); - ArgConsumer argc = new ArgConsumer(this.manager, pair.getSecond()); + String command = pair.getA(); + String rest = msg.substring(pair.getA().length()); + ArgConsumer argc = new ArgConsumer(this.manager, pair.getB()); if (!argc.hasAny()) { Settings.Setting setting = settings.byLowerName.get(command.toLowerCase(Locale.US)); if (setting != null) { @@ -127,18 +128,19 @@ public boolean runCommand(String msg) { if (SettingsUtil.javaOnlySetting(setting)) { continue; } - if (setting.getName().equalsIgnoreCase(pair.getFirst())) { + if (setting.getName().equalsIgnoreCase(pair.getA())) { logRanCommand(command, rest); try { this.manager.execute(String.format("set %s %s", setting.getName(), argc.getString())); - } catch (CommandNotEnoughArgumentsException ignored) {} // The operation is safe + } catch (CommandNotEnoughArgumentsException ignored) { + } // The operation is safe return true; } } } // If the command exists, then handle echoing the input - if (this.manager.getCommand(pair.getFirst()) != null) { + if (this.manager.getCommand(pair.getA()) != null) { logRanCommand(command, rest); } diff --git a/src/main/java/baritone/command/argument/ArgConsumer.java b/src/main/java/baritone/command/argument/ArgConsumer.java index 4a80681dd..c4a6df002 100644 --- a/src/main/java/baritone/command/argument/ArgConsumer.java +++ b/src/main/java/baritone/command/argument/ArgConsumer.java @@ -17,6 +17,7 @@ package baritone.command.argument; +import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.ICommandArgument; @@ -316,6 +317,9 @@ public > T getDatatypePost(D datatype, O ori try { return datatype.apply(this.context, original); } catch (Exception e) { + if (Baritone.settings().verboseCommandExceptions.value) { + e.printStackTrace(); + } throw new CommandInvalidTypeException(hasAny() ? peek() : consumed(), datatype.getClass().getSimpleName(), e); } } @@ -345,6 +349,9 @@ public > T getDatatypeFor(D datatype) throws Comman try { return datatype.get(this.context); } catch (Exception e) { + if (Baritone.settings().verboseCommandExceptions.value) { + e.printStackTrace(); + } throw new CommandInvalidTypeException(hasAny() ? peek() : consumed(), datatype.getClass().getSimpleName(), e); } } diff --git a/src/main/java/baritone/command/defaults/BuildCommand.java b/src/main/java/baritone/command/defaults/BuildCommand.java index 724582865..622aef4f8 100644 --- a/src/main/java/baritone/command/defaults/BuildCommand.java +++ b/src/main/java/baritone/command/defaults/BuildCommand.java @@ -26,7 +26,6 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.utils.BetterBlockPos; -import net.minecraft.client.Minecraft; import org.apache.commons.io.FilenameUtils; import java.io.File; @@ -36,7 +35,7 @@ public class BuildCommand extends Command { - private static final File schematicsDir = new File(Minecraft.getMinecraft().gameDir, "schematics"); + private static final File schematicsDir = new File(mc.gameDirectory, "schematics"); public BuildCommand(IBaritone baritone) { super(baritone, "build"); diff --git a/src/main/java/baritone/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java deleted file mode 100644 index b4dcda749..000000000 --- a/src/main/java/baritone/command/defaults/ChestsCommand.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.command.defaults; - -import baritone.api.IBaritone; -import baritone.api.cache.IRememberedInventory; -import baritone.api.command.Command; -import baritone.api.command.argument.IArgConsumer; -import baritone.api.command.exception.CommandException; -import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.utils.BetterBlockPos; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Stream; - -public class ChestsCommand extends Command { - - public ChestsCommand(IBaritone baritone) { - super(baritone, "chests"); - } - - @Override - public void execute(String label, IArgConsumer args) throws CommandException { - args.requireMax(0); - Set> entries = - ctx.worldData().getContainerMemory().getRememberedInventories().entrySet(); - if (entries.isEmpty()) { - throw new CommandInvalidStateException("No remembered inventories"); - } - for (Map.Entry entry : entries) { - // betterblockpos has censoring - BetterBlockPos pos = new BetterBlockPos(entry.getKey()); - IRememberedInventory inv = entry.getValue(); - logDirect(pos.toString()); - for (ItemStack item : inv.getContents()) { - ITextComponent component = item.getTextComponent(); - component.appendText(String.format(" x %d", item.getCount())); - logDirect(component); - } - } - } - - @Override - public Stream tabComplete(String label, IArgConsumer args) { - return Stream.empty(); - } - - @Override - public String getShortDesc() { - return "Display remembered inventories"; - } - - @Override - public List getLongDesc() { - return Arrays.asList( - "The chests command lists remembered inventories, I guess?", - "", - "Usage:", - "> chests" - ); - } -} diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index 5d3e3b829..dfbbf06bd 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -23,8 +23,7 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.pathing.goals.GoalBlock; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; +import net.minecraft.world.entity.Entity; import java.util.Arrays; import java.util.List; @@ -39,11 +38,11 @@ public ComeCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); - Entity entity = mc.getRenderViewEntity(); + Entity entity = mc.getCameraEntity(); if (entity == null) { throw new CommandInvalidStateException("render view entity is null"); } - baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(new BlockPos(entity))); + baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(entity.blockPosition())); logDirect("Coming"); } diff --git a/src/main/java/baritone/command/defaults/DefaultCommands.java b/src/main/java/baritone/command/defaults/DefaultCommands.java index 17f338046..e998dcc97 100644 --- a/src/main/java/baritone/command/defaults/DefaultCommands.java +++ b/src/main/java/baritone/command/defaults/DefaultCommands.java @@ -51,7 +51,6 @@ public static List createAll(IBaritone baritone) { new TunnelCommand(baritone), new RenderCommand(baritone), new FarmCommand(baritone), - new ChestsCommand(baritone), new FollowCommand(baritone), new ExploreFilterCommand(baritone), new ReloadAllCommand(baritone), diff --git a/src/main/java/baritone/command/defaults/ETACommand.java b/src/main/java/baritone/command/defaults/ETACommand.java index 3c16bd113..4116d65b0 100644 --- a/src/main/java/baritone/command/defaults/ETACommand.java +++ b/src/main/java/baritone/command/defaults/ETACommand.java @@ -18,13 +18,13 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.calc.IPathingControlManager; -import baritone.api.process.IBaritoneProcess; import baritone.api.behavior.IPathingBehavior; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.calc.IPathingControlManager; +import baritone.api.process.IBaritoneProcess; import java.util.Arrays; import java.util.List; @@ -45,11 +45,17 @@ public void execute(String label, IArgConsumer args) throws CommandException { throw new CommandInvalidStateException("No process in control"); } IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); + + double ticksRemainingInSegment = pathingBehavior.ticksRemainingInSegment().orElse(Double.NaN); + double ticksRemainingInGoal = pathingBehavior.estimatedTicksToGoal().orElse(Double.NaN); + logDirect(String.format( - "Next segment: %.2f\n" + - "Goal: %.2f", - pathingBehavior.ticksRemainingInSegment().orElse(-1.0), - pathingBehavior.estimatedTicksToGoal().orElse(-1.0) + "Next segment: %.1fs (%.0f ticks)\n" + + "Goal: %.1fs (%.0f ticks)", + ticksRemainingInSegment / 20, // we just assume tps is 20, it isn't worth the effort that is needed to calculate it exactly + ticksRemainingInSegment, + ticksRemainingInGoal / 20, + ticksRemainingInGoal )); } diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index 1b024c3b8..8a53e7d41 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -112,7 +112,7 @@ public List getLongDesc() { ); } }; - resumeCommand = new Command(baritone, "resume", "r") { + resumeCommand = new Command(baritone, "resume", "r", "unpause") { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); diff --git a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java index c2057551f..504f7c146 100644 --- a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java @@ -41,7 +41,7 @@ public ExploreFilterCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(2); - File file = args.getDatatypePost(RelativeFile.INSTANCE, mc.gameDir.getAbsoluteFile().getParentFile()); + File file = args.getDatatypePost(RelativeFile.INSTANCE, mc.gameDirectory.getAbsoluteFile().getParentFile()); boolean invert = false; if (args.hasAny()) { if (args.getString().equalsIgnoreCase("invert")) { diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 22e6815be..a59924a87 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -23,7 +23,8 @@ import baritone.api.command.datatypes.BlockById; import baritone.api.command.exception.CommandException; import baritone.api.utils.BetterBlockPos; -import net.minecraft.block.Block; +import net.minecraft.core.Registry; +import net.minecraft.world.level.block.Block; import java.util.ArrayList; import java.util.Arrays; @@ -46,7 +47,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { toFind.stream() .flatMap(block -> ctx.worldData().getCachedWorld().getLocationsOf( - Block.REGISTRY.getNameForObject(block).getPath(), + Registry.BLOCK.getKey(block).getPath(), Integer.MAX_VALUE, origin.x, origin.y, @@ -71,10 +72,10 @@ public String getShortDesc() { @Override public List getLongDesc() { return Arrays.asList( - "", + "The find command searches through Baritone's cache and attempts to find the location of the block.", "", "Usage:", - "> " + "> find - Find positions of a certain block" ); } } diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index a6e7cc5b2..4b60dfb8b 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -27,11 +27,12 @@ import baritone.api.command.exception.CommandErrorMessageException; import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityList; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import java.util.*; import java.util.function.Predicate; @@ -49,7 +50,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { FollowGroup group; FollowList list; List entities = new ArrayList<>(); - List> classes = new ArrayList<>(); + List classes = new ArrayList<>(); if (args.hasExactlyOne()) { baritone.getFollowProcess().follow((group = args.getEnum(FollowGroup.class)).filter); } else { @@ -58,17 +59,18 @@ public void execute(String label, IArgConsumer args) throws CommandException { list = args.getEnum(FollowList.class); while (args.hasAny()) { Object gotten = args.getDatatypeFor(list.datatype); - if (gotten instanceof Class) { + if (gotten instanceof EntityType) { //noinspection unchecked - classes.add((Class) gotten); + classes.add((EntityType) gotten); } else if (gotten != null) { entities.add((Entity) gotten); } } + baritone.getFollowProcess().follow( classes.isEmpty() ? entities::contains - : e -> classes.stream().anyMatch(c -> c.isInstance(e)) + : e -> classes.stream().anyMatch(c -> e.getType().equals(c)) ); } if (group != null) { @@ -83,7 +85,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } else { logDirect("Following these types of entities:"); classes.stream() - .map(EntityList::getKey) + .map(Registry.ENTITY_TYPE::getKey) .map(Objects::requireNonNull) .map(ResourceLocation::toString) .forEach(this::logDirect); @@ -136,8 +138,8 @@ public List getLongDesc() { @KeepName private enum FollowGroup { - ENTITIES(EntityLiving.class::isInstance), - PLAYERS(EntityPlayer.class::isInstance); /* , + ENTITIES(LivingEntity.class::isInstance), + PLAYERS(Player.class::isInstance); /* , FRIENDLY(entity -> entity.getAttackTarget() != HELPER.mc.player), HOSTILE(FRIENDLY.filter.negate()); */ final Predicate filter; diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index e681d21b9..b751730e7 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -25,11 +25,11 @@ import baritone.api.command.exception.CommandNotFoundException; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; import java.util.Arrays; import java.util.List; @@ -58,22 +58,22 @@ public void execute(String label, IArgConsumer args) throws CommandException { command -> { String names = String.join("/", command.getNames()); String name = command.getNames().get(0); - ITextComponent shortDescComponent = new TextComponentString(" - " + command.getShortDesc()); - shortDescComponent.getStyle().setColor(TextFormatting.DARK_GRAY); - ITextComponent namesComponent = new TextComponentString(names); - namesComponent.getStyle().setColor(TextFormatting.WHITE); - ITextComponent hoverComponent = new TextComponentString(""); - hoverComponent.getStyle().setColor(TextFormatting.GRAY); - hoverComponent.appendSibling(namesComponent); - hoverComponent.appendText("\n" + command.getShortDesc()); - hoverComponent.appendText("\n\nClick to view full help"); + MutableComponent shortDescComponent = Component.literal(" - " + command.getShortDesc()); + shortDescComponent.setStyle(shortDescComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); + MutableComponent namesComponent = Component.literal(names); + namesComponent.setStyle(namesComponent.getStyle().withColor(ChatFormatting.WHITE)); + MutableComponent hoverComponent = Component.literal(""); + hoverComponent.setStyle(hoverComponent.getStyle().withColor(ChatFormatting.GRAY)); + hoverComponent.append(namesComponent); + hoverComponent.append("\n" + command.getShortDesc()); + hoverComponent.append("\n\nClick to view full help"); String clickCommand = FORCE_COMMAND_PREFIX + String.format("%s %s", label, command.getNames().get(0)); - ITextComponent component = new TextComponentString(name); - component.getStyle().setColor(TextFormatting.GRAY); - component.appendSibling(shortDescComponent); - component.getStyle() - .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) - .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, clickCommand)); + MutableComponent component = Component.literal(name); + component.setStyle(component.getStyle().withColor(ChatFormatting.GRAY)); + component.append(shortDescComponent); + component.setStyle(component.getStyle() + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) + .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, clickCommand))); return component; }, FORCE_COMMAND_PREFIX + label @@ -88,11 +88,11 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect(""); command.getLongDesc().forEach(this::logDirect); logDirect(""); - ITextComponent returnComponent = new TextComponentString("Click to return to the help menu"); - returnComponent.getStyle().setClickEvent(new ClickEvent( + MutableComponent returnComponent = Component.literal("Click to return to the help menu"); + returnComponent.setStyle(returnComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + label - )); + ))); logDirect(returnComponent); } } diff --git a/src/main/java/baritone/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java index cc9803d16..39dc6ea7c 100644 --- a/src/main/java/baritone/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -37,8 +37,8 @@ public RenderCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); BetterBlockPos origin = ctx.playerFeet(); - int renderDistance = (mc.gameSettings.renderDistanceChunks + 1) * 16; - mc.renderGlobal.markBlockRangeForRenderUpdate( + int renderDistance = (mc.options.renderDistance().get() + 1) * 16; + mc.levelRenderer.setBlocksDirty( origin.x - renderDistance, 0, origin.z - renderDistance, diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 659a31835..d3ad09133 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -22,7 +22,7 @@ import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForBlockOptionalMeta; -import baritone.api.command.datatypes.ForEnumFacing; +import baritone.api.command.datatypes.ForDirection; import baritone.api.command.datatypes.RelativeBlockPos; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; @@ -36,15 +36,14 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMetaLookup; -import baritone.utils.IRenderer; import baritone.utils.BlockStateInterface; +import baritone.utils.IRenderer; import baritone.utils.schematic.StaticSchematic; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3i; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; import java.awt.*; import java.util.List; @@ -72,7 +71,7 @@ public void onRenderPass(RenderEvent event) { float lineWidth = Baritone.settings().selectionLineWidth.value; boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value; IRenderer.startLines(color, opacity, lineWidth, ignoreDepth); - IRenderer.drawAABB(new AxisAlignedBB(pos1, pos1.add(1, 1, 1))); + IRenderer.drawAABB(event.getModelViewStack(), new AABB(pos1, pos1.offset(1, 1, 1))); IRenderer.endLines(ignoreDepth); } }); @@ -88,7 +87,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == Action.POS2 && pos1 == null) { throw new CommandInvalidStateException("Set pos1 first before using pos2"); } - BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(new BlockPos(mc.getRenderViewEntity())) : ctx.playerFeet(); + BetterBlockPos playerPos = mc.getCameraEntity() != null ? BetterBlockPos.from(mc.getCameraEntity().blockPosition()) : ctx.playerFeet(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); if (action == Action.POS1) { @@ -164,7 +163,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { baritone.getBuilderProcess().build("Fill", composite, origin); logDirect("Filling now"); } else if (action == Action.COPY) { - BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(new BlockPos(mc.getRenderViewEntity())) : ctx.playerFeet(); + BetterBlockPos playerPos = mc.getCameraEntity() != null ? BetterBlockPos.from(mc.getCameraEntity().blockPosition()) : ctx.playerFeet(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); ISelection[] selections = manager.getSelections(); @@ -185,7 +184,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { for (ISelection selection : selections) { Vec3i size = selection.size(); BetterBlockPos min = selection.min(); - IBlockState[][][] blockstates = new IBlockState[size.getX()][size.getZ()][size.getY()]; + BlockState[][][] blockstates = new BlockState[size.getX()][size.getZ()][size.getY()]; for (int x = 0; x < size.getX(); x++) { for (int y = 0; y < size.getY(); y++) { for (int z = 0; z < size.getZ(); z++) { @@ -205,13 +204,13 @@ public void execute(String label, IArgConsumer args) throws CommandException { clipboardOffset = origin.subtract(pos); logDirect("Selection copied"); } else if (action == Action.PASTE) { - BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(new BlockPos(mc.getRenderViewEntity())) : ctx.playerFeet(); + BetterBlockPos playerPos = mc.getCameraEntity() != null ? BetterBlockPos.from(mc.getCameraEntity().blockPosition()) : ctx.playerFeet(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); if (clipboard == null) { throw new CommandInvalidStateException("You need to copy a selection first"); } - baritone.getBuilderProcess().build("Fill", clipboard, pos.add(clipboardOffset)); + baritone.getBuilderProcess().build("Fill", clipboard, pos.offset(clipboardOffset)); logDirect("Building now"); } else if (action == Action.EXPAND || action == Action.CONTRACT || action == Action.SHIFT) { args.requireExactly(3); @@ -219,7 +218,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (transformTarget == null) { throw new CommandInvalidStateException("Invalid transform type"); } - EnumFacing direction = args.getDatatypeFor(ForEnumFacing.INSTANCE); + Direction direction = args.getDatatypeFor(ForDirection.INSTANCE); int blocks = args.getAs(Integer.class); ISelection[] selections = manager.getSelections(); if (selections.length < 1) { @@ -271,7 +270,7 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman } else { TransformTarget target = TransformTarget.getByName(args.getString()); if (target != null && args.hasExactlyOne()) { - return args.tabCompleteDatatype(ForEnumFacing.INSTANCE); + return args.tabCompleteDatatype(ForDirection.INSTANCE); } } } diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index e9e35d413..99dac4ac1 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -28,11 +28,11 @@ import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.SettingsUtil; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; import java.util.Arrays; import java.util.List; @@ -78,24 +78,24 @@ public void execute(String label, IArgConsumer args) throws CommandException { : String.format("All %ssettings:", viewModified ? "modified " : "") ), setting -> { - ITextComponent typeComponent = new TextComponentString(String.format( + MutableComponent typeComponent = Component.literal(String.format( " (%s)", settingTypeToString(setting) )); - typeComponent.getStyle().setColor(TextFormatting.DARK_GRAY); - ITextComponent hoverComponent = new TextComponentString(""); - hoverComponent.getStyle().setColor(TextFormatting.GRAY); - hoverComponent.appendText(setting.getName()); - hoverComponent.appendText(String.format("\nType: %s", settingTypeToString(setting))); - hoverComponent.appendText(String.format("\n\nValue:\n%s", settingValueToString(setting))); - hoverComponent.appendText(String.format("\n\nDefault Value:\n%s", settingDefaultToString(setting))); + typeComponent.setStyle(typeComponent.getStyle().withColor(ChatFormatting.DARK_GRAY)); + MutableComponent hoverComponent = Component.literal(""); + hoverComponent.setStyle(hoverComponent.getStyle().withColor(ChatFormatting.GRAY)); + hoverComponent.append(setting.getName()); + hoverComponent.append(String.format("\nType: %s", settingTypeToString(setting))); + hoverComponent.append(String.format("\n\nValue:\n%s", settingValueToString(setting))); + hoverComponent.append(String.format("\n\nDefault Value:\n%s", settingDefaultToString(setting))); String commandSuggestion = Baritone.settings().prefix.value + String.format("set %s ", setting.getName()); - ITextComponent component = new TextComponentString(setting.getName()); - component.getStyle().setColor(TextFormatting.GRAY); - component.appendSibling(typeComponent); - component.getStyle() - .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) - .setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, commandSuggestion)); + MutableComponent component = Component.literal(setting.getName()); + component.setStyle(component.getStyle().withColor(ChatFormatting.GRAY)); + component.append(typeComponent); + component.setStyle(component.getStyle() + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) + .withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, commandSuggestion))); return component; }, FORCE_COMMAND_PREFIX + "set " + arg + " " + search @@ -170,23 +170,23 @@ public void execute(String label, IArgConsumer args) throws CommandException { settingValueToString(setting) )); } - ITextComponent oldValueComponent = new TextComponentString(String.format("Old value: %s", oldValue)); - oldValueComponent.getStyle() - .setColor(TextFormatting.GRAY) - .setHoverEvent(new HoverEvent( + MutableComponent oldValueComponent = Component.literal(String.format("Old value: %s", oldValue)); + oldValueComponent.setStyle(oldValueComponent.getStyle() + .withColor(ChatFormatting.GRAY) + .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new TextComponentString("Click to set the setting back to this value") + Component.literal("Click to set the setting back to this value") )) - .setClickEvent(new ClickEvent( + .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + String.format("set %s %s", setting.getName(), oldValue) - )); + ))); logDirect(oldValueComponent); if ((setting.getName().equals("chatControl") && !(Boolean) setting.value && !Baritone.settings().chatControlAnyway.value) || setting.getName().equals("chatControlAnyway") && !(Boolean) setting.value && !Baritone.settings().chatControl.value) { - logDirect("Warning: Chat commands will no longer work. If you want to revert this change, use prefix control (if enabled) or click the old value listed above.", TextFormatting.RED); + logDirect("Warning: Chat commands will no longer work. If you want to revert this change, use prefix control (if enabled) or click the old value listed above.", ChatFormatting.RED); } else if (setting.getName().equals("prefixControl") && !(Boolean) setting.value) { - logDirect("Warning: Prefixed commands will no longer work. If you want to revert this change, use chat control (if enabled) or click the old value listed above.", TextFormatting.RED); + logDirect("Warning: Prefixed commands will no longer work. If you want to revert this change, use chat control (if enabled) or click the old value listed above.", ChatFormatting.RED); } } SettingsUtil.save(Baritone.settings()); diff --git a/src/main/java/baritone/command/defaults/SurfaceCommand.java b/src/main/java/baritone/command/defaults/SurfaceCommand.java index 842b8050c..d5e45bda2 100644 --- a/src/main/java/baritone/command/defaults/SurfaceCommand.java +++ b/src/main/java/baritone/command/defaults/SurfaceCommand.java @@ -24,7 +24,7 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.block.BlockAir; +import net.minecraft.world.level.block.AirBlock; import java.util.Arrays; import java.util.List; @@ -40,11 +40,11 @@ protected SurfaceCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { final BetterBlockPos playerPos = baritone.getPlayerContext().playerFeet(); final int surfaceLevel = baritone.getPlayerContext().world().getSeaLevel(); - final int worldHeight = baritone.getPlayerContext().world().getActualHeight(); + final int worldHeight = baritone.getPlayerContext().world().getHeight(); // Ensure this command will not run if you are above the surface level and the block above you is air // As this would imply that your are already on the open surface - if (playerPos.getY() > surfaceLevel && mc.world.getBlockState(playerPos.up()).getBlock() instanceof BlockAir) { + if (playerPos.getY() > surfaceLevel && mc.level.getBlockState(playerPos.above()).getBlock() instanceof AirBlock) { logDirect("Already at surface"); return; } @@ -54,8 +54,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { for (int currentIteratedY = startingYPos; currentIteratedY < worldHeight; currentIteratedY++) { final BetterBlockPos newPos = new BetterBlockPos(playerPos.getX(), currentIteratedY, playerPos.getZ()); - if (!(mc.world.getBlockState(newPos).getBlock() instanceof BlockAir) && newPos.getY() > playerPos.getY()) { - Goal goal = new GoalBlock(newPos.up()); + if (!(mc.level.getBlockState(newPos).getBlock() instanceof AirBlock) && newPos.getY() > playerPos.getY()) { + Goal goal = new GoalBlock(newPos.above()); logDirect(String.format("Going to: %s", goal.toString())); baritone.getCustomGoalProcess().setGoalAndPath(goal); return; diff --git a/src/main/java/baritone/command/defaults/ThisWayCommand.java b/src/main/java/baritone/command/defaults/ThisWayCommand.java index 0c10bba30..d6c59f078 100644 --- a/src/main/java/baritone/command/defaults/ThisWayCommand.java +++ b/src/main/java/baritone/command/defaults/ThisWayCommand.java @@ -38,7 +38,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { args.requireExactly(1); GoalXZ goal = GoalXZ.fromDirection( ctx.playerFeetAsVec(), - ctx.player().rotationYawHead, + ctx.player().getYHeadRot(), args.getAs(Double.class) ); baritone.getCustomGoalProcess().setGoal(goal); diff --git a/src/main/java/baritone/command/defaults/TunnelCommand.java b/src/main/java/baritone/command/defaults/TunnelCommand.java index 711ba160e..500e32cba 100644 --- a/src/main/java/baritone/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/command/defaults/TunnelCommand.java @@ -23,8 +23,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalStrictDirection; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import java.util.Arrays; import java.util.List; @@ -55,7 +55,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { width--; BlockPos corner1; BlockPos corner2; - EnumFacing enumFacing = ctx.player().getHorizontalFacing(); + Direction enumFacing = ctx.player().getDirection(); int addition = ((width % 2 == 0) ? 0 : 1); switch (enumFacing) { case EAST: @@ -83,7 +83,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } else { Goal goal = new GoalStrictDirection( ctx.playerFeet(), - ctx.player().getHorizontalFacing() + ctx.player().getDirection() ); baritone.getCustomGoalProcess().setGoalAndPath(goal); logDirect(String.format("Goal: %s", goal.toString())); diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 5a45686a3..5087c740b 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -20,8 +20,8 @@ import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; -import baritone.api.cache.Waypoint; import baritone.api.cache.IWorldData; +import baritone.api.cache.Waypoint; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForWaypoints; @@ -34,11 +34,11 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; import java.util.*; import java.util.function.BiFunction; @@ -62,24 +62,24 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == null) { throw new CommandInvalidTypeException(args.consumed(), "an action"); } - BiFunction toComponent = (waypoint, _action) -> { - ITextComponent component = new TextComponentString(""); - ITextComponent tagComponent = new TextComponentString(waypoint.getTag().name() + " "); - tagComponent.getStyle().setColor(TextFormatting.GRAY); + BiFunction toComponent = (waypoint, _action) -> { + MutableComponent component = Component.literal(""); + MutableComponent tagComponent = Component.literal(waypoint.getTag().name() + " "); + tagComponent.setStyle(tagComponent.getStyle().withColor(ChatFormatting.GRAY)); String name = waypoint.getName(); - ITextComponent nameComponent = new TextComponentString(!name.isEmpty() ? name : ""); - nameComponent.getStyle().setColor(!name.isEmpty() ? TextFormatting.GRAY : TextFormatting.DARK_GRAY); - ITextComponent timestamp = new TextComponentString(" @ " + new Date(waypoint.getCreationTimestamp())); - timestamp.getStyle().setColor(TextFormatting.DARK_GRAY); - component.appendSibling(tagComponent); - component.appendSibling(nameComponent); - component.appendSibling(timestamp); - component.getStyle() - .setHoverEvent(new HoverEvent( + MutableComponent nameComponent = Component.literal(!name.isEmpty() ? name : ""); + nameComponent.setStyle(nameComponent.getStyle().withColor(!name.isEmpty() ? ChatFormatting.GRAY : ChatFormatting.DARK_GRAY)); + MutableComponent timestamp = Component.literal(" @ " + new Date(waypoint.getCreationTimestamp())); + timestamp.setStyle(timestamp.getStyle().withColor(ChatFormatting.DARK_GRAY)); + component.append(tagComponent); + component.append(nameComponent); + component.append(timestamp); + component.setStyle(component.getStyle() + .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - new TextComponentString("Click to select") + Component.literal("Click to select") )) - .setClickEvent(new ClickEvent( + .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s %s %s @ %d", @@ -89,10 +89,10 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getTag().getName(), waypoint.getCreationTimestamp() )) - ); + )); return component; }; - Function transform = waypoint -> + Function transform = waypoint -> toComponent.apply(waypoint, action == Action.LIST ? Action.INFO : action); if (action == Action.LIST) { IWaypoint.Tag tag = args.hasAny() ? IWaypoint.Tag.getByName(args.peekString()) : null; @@ -143,9 +143,9 @@ public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); IWaypoint waypoint = new Waypoint(name, tag, pos); ForWaypoints.waypoints(this.baritone).addWaypoint(waypoint); - ITextComponent component = new TextComponentString("Waypoint added: "); - component.getStyle().setColor(TextFormatting.GRAY); - component.appendSibling(toComponent.apply(waypoint, Action.INFO)); + MutableComponent component = Component.literal("Waypoint added: "); + component.setStyle(component.getStyle().withColor(ChatFormatting.GRAY)); + component.append(toComponent.apply(waypoint, Action.INFO)); logDirect(component); } else if (action == Action.CLEAR) { args.requireMax(1); @@ -155,8 +155,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint); } deletedWaypoints.computeIfAbsent(baritone.getWorldProvider().getCurrentWorld(), k -> new ArrayList<>()).addAll(Arrays.asList(waypoints)); - ITextComponent textComponent = new TextComponentString(String.format("Cleared %d waypoints, click to restore them", waypoints.length)); - textComponent.getStyle().setClickEvent(new ClickEvent( + MutableComponent textComponent = Component.literal(String.format("Cleared %d waypoints, click to restore them", waypoints.length)); + textComponent.setStyle(textComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s restore @ %s", @@ -164,7 +164,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { label, Stream.of(waypoints).map(wp -> Long.toString(wp.getCreationTimestamp())).collect(Collectors.joining(" ")) ) - )); + ))); logDirect(textComponent); } else if (action == Action.RESTORE) { List waypoints = new ArrayList<>(); @@ -236,8 +236,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == Action.INFO) { logDirect(transform.apply(waypoint)); logDirect(String.format("Position: %s", waypoint.getLocation())); - ITextComponent deleteComponent = new TextComponentString("Click to delete this waypoint"); - deleteComponent.getStyle().setClickEvent(new ClickEvent( + MutableComponent deleteComponent = Component.literal("Click to delete this waypoint"); + deleteComponent.setStyle(deleteComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s delete %s @ %d", @@ -246,9 +246,9 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getTag().getName(), waypoint.getCreationTimestamp() ) - )); - ITextComponent goalComponent = new TextComponentString("Click to set goal to this waypoint"); - goalComponent.getStyle().setClickEvent(new ClickEvent( + ))); + MutableComponent goalComponent = Component.literal("Click to set goal to this waypoint"); + goalComponent.setStyle(goalComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s goal %s @ %d", @@ -257,9 +257,9 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getTag().getName(), waypoint.getCreationTimestamp() ) - )); - ITextComponent recreateComponent = new TextComponentString("Click to show a command to recreate this waypoint"); - recreateComponent.getStyle().setClickEvent(new ClickEvent( + ))); + MutableComponent recreateComponent = Component.literal("Click to show a command to recreate this waypoint"); + recreateComponent.setStyle(recreateComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.SUGGEST_COMMAND, String.format( "%s%s save %s %s %s %s %s", @@ -271,16 +271,16 @@ public void execute(String label, IArgConsumer args) throws CommandException { waypoint.getLocation().y, waypoint.getLocation().z ) - )); - ITextComponent backComponent = new TextComponentString("Click to return to the waypoints list"); - backComponent.getStyle().setClickEvent(new ClickEvent( + ))); + MutableComponent backComponent = Component.literal("Click to return to the waypoints list"); + backComponent.setStyle(backComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s list", FORCE_COMMAND_PREFIX, label ) - )); + ))); logDirect(deleteComponent); logDirect(goalComponent); logDirect(recreateComponent); @@ -288,8 +288,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { } else if (action == Action.DELETE) { ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint); deletedWaypoints.computeIfAbsent(baritone.getWorldProvider().getCurrentWorld(), k -> new ArrayList<>()).add(waypoint); - ITextComponent textComponent = new TextComponentString("That waypoint has successfully been deleted, click to restore it"); - textComponent.getStyle().setClickEvent(new ClickEvent( + MutableComponent textComponent = Component.literal("That waypoint has successfully been deleted, click to restore it"); + textComponent.setStyle(textComponent.getStyle().withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, String.format( "%s%s restore @ %s", @@ -297,7 +297,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { label, waypoint.getCreationTimestamp() ) - )); + ))); logDirect(textComponent); } else if (action == Action.GOAL) { Goal goal = new GoalBlock(waypoint.getLocation()); diff --git a/src/main/java/baritone/command/manager/CommandManager.java b/src/main/java/baritone/command/manager/CommandManager.java index e7d24eb33..4c33226d3 100644 --- a/src/main/java/baritone/command/manager/CommandManager.java +++ b/src/main/java/baritone/command/manager/CommandManager.java @@ -35,6 +35,7 @@ import java.util.Locale; import java.util.stream.Stream; + /** * The default, internal implementation of {@link ICommandManager} * @@ -94,8 +95,8 @@ public Stream tabComplete(Tuple> expanded @Override public Stream tabComplete(String prefix) { Tuple> pair = expand(prefix, true); - String label = pair.getFirst(); - List args = pair.getSecond(); + String label = pair.getA(); + List args = pair.getB(); if (args.isEmpty()) { return new TabCompleteHelper() .addCommands(this.baritone.getCommandManager()) @@ -107,8 +108,8 @@ public Stream tabComplete(String prefix) { } private ExecutionWrapper from(Tuple> expanded) { - String label = expanded.getFirst(); - ArgConsumer args = new ArgConsumer(this, expanded.getSecond()); + String label = expanded.getA(); + ArgConsumer args = new ArgConsumer(this, expanded.getB()); ICommand command = this.getCommand(label); return command == null ? null : new ExecutionWrapper(command, label, args); @@ -125,6 +126,7 @@ public static Tuple> expand(String string) { } private static final class ExecutionWrapper { + private ICommand command; private String label; private ArgConsumer args; diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 8916f7f37..b4e12d4be 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -25,8 +25,8 @@ import baritone.api.utils.Helper; import baritone.cache.WorldProvider; import baritone.utils.BlockStateInterface; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -51,6 +51,7 @@ public final void onTick(TickEvent event) { try { baritone.bsi = new BlockStateInterface(baritone.getPlayerContext(), true); } catch (Exception ex) { + ex.printStackTrace(); baritone.bsi = null; } } else { @@ -82,18 +83,18 @@ public final void onChunkEvent(ChunkEvent event) { boolean isPostPopulate = state == EventState.POST && (type == ChunkEvent.Type.POPULATE_FULL || type == ChunkEvent.Type.POPULATE_PARTIAL); - World world = baritone.getPlayerContext().world(); + Level world = baritone.getPlayerContext().world(); // Whenever the server sends us to another dimension, chunks are unloaded // technically after the new world has been loaded, so we perform a check // to make sure the chunk being unloaded is already loaded. boolean isPreUnload = state == EventState.PRE && type == ChunkEvent.Type.UNLOAD - && world.getChunkProvider().isChunkGeneratedAt(event.getX(), event.getZ()); + && world.getChunkSource().getChunk(event.getX(), event.getZ(), null, false) != null; if (isPostPopulate || isPreUnload) { baritone.getWorldProvider().ifWorldLoaded(worldData -> { - Chunk chunk = world.getChunk(event.getX(), event.getZ()); + LevelChunk chunk = world.getChunk(event.getX(), event.getZ()); worldData.getCachedWorld().queueForPacking(chunk); }); } @@ -114,7 +115,7 @@ public final void onWorldEvent(WorldEvent event) { if (event.getState() == EventState.POST) { cache.closeWorld(); if (event.getWorld() != null) { - cache.initWorld(event.getWorld().provider.getDimensionType().getId()); + cache.initWorld(event.getWorld().dimension(), event.getWorld().dimensionType()); } } diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index 3e38ff41d..b37b598ff 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -49,6 +49,8 @@ public AStarPathFinder(int startX, int startY, int startZ, Goal goal, Favoring f @Override protected Optional calculate0(long primaryTimeout, long failureTimeout) { + int minY = calcContext.world.dimensionType().minY(); + int height = calcContext.world.dimensionType().height(); startNode = getNodeAtPosition(startX, startY, startZ, BetterBlockPos.longHash(startX, startY, startZ)); startNode.cost = 0; startNode.combinedCost = startNode.estimatedCostToGoal; @@ -109,7 +111,7 @@ protected Optional calculate0(long primaryTimeout, long failureTimeout) { if (!moves.dynamicXZ && !worldBorder.entirelyContains(newX, newZ)) { continue; } - if (currentNode.y + moves.yOffset > 256 || currentNode.y + moves.yOffset < 0) { + if (currentNode.y + moves.yOffset > height || currentNode.y + moves.yOffset < minY) { continue; } res.reset(); diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 124e6f109..a625c63e2 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -24,15 +24,18 @@ import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; import baritone.utils.pathing.BetterWorldBorder; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.ArrayList; +import java.util.List; import static baritone.api.pathing.movement.ActionCosts.COST_INF; @@ -46,7 +49,7 @@ public class CalculationContext { public final boolean safeForThreadedUse; public final IBaritone baritone; - public final World world; + public final Level world; public final WorldData worldData; public final BlockStateInterface bsi; public final ToolSet toolSet; @@ -55,6 +58,7 @@ public class CalculationContext { public final boolean canSprint; protected final double placeBlockCost; // protected because you should call the function instead public final boolean allowBreak; + public final List allowBreakAnyway; public final boolean allowParkour; public final boolean allowParkourPlace; public final boolean allowJumpAt256; @@ -79,16 +83,17 @@ public CalculationContext(IBaritone baritone) { public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.safeForThreadedUse = forUseOnAnotherThread; this.baritone = baritone; - EntityPlayerSP player = baritone.getPlayerContext().player(); + LocalPlayer player = baritone.getPlayerContext().player(); this.world = baritone.getPlayerContext().world(); this.worldData = (WorldData) baritone.getWorldProvider().getCurrentWorld(); this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); this.toolSet = new ToolSet(player); this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); - this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && InventoryPlayer.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && !world.provider.isNether(); - this.canSprint = Baritone.settings().allowSprint.value && player.getFoodStats().getFoodLevel() > 6; + this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && Inventory.isHotbarSlot(player.getInventory().findSlotMatchingItem(STACK_BUCKET_WATER)) && world.dimension() != Level.NETHER; + this.canSprint = Baritone.settings().allowSprint.value && player.getFoodData().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; this.allowBreak = Baritone.settings().allowBreak.value; + this.allowBreakAnyway = new ArrayList<>(Baritone.settings().allowBreakAnyway.value); this.allowParkour = Baritone.settings().allowParkour.value; this.allowParkourPlace = Baritone.settings().allowParkourPlace.value; this.allowJumpAt256 = Baritone.settings().allowJumpAt256.value; @@ -99,7 +104,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.allowDownward = Baritone.settings().allowDownward.value; this.maxFallHeightNoWater = Baritone.settings().maxFallHeightNoWater.value; this.maxFallHeightBucket = Baritone.settings().maxFallHeightBucket.value; - int depth = EnchantmentHelper.getDepthStriderModifier(player); + int depth = EnchantmentHelper.getDepthStrider(player); if (depth > 3) { depth = 3; } @@ -119,7 +124,7 @@ public final IBaritone getBaritone() { return baritone; } - public IBlockState get(int x, int y, int z) { + public BlockState get(int x, int y, int z) { return bsi.get0(x, y, z); // laughs maniacally } @@ -127,7 +132,7 @@ public boolean isLoaded(int x, int z) { return bsi.isLoaded(x, z); } - public IBlockState get(BlockPos pos) { + public BlockState get(BlockPos pos) { return get(pos.getX(), pos.getY(), pos.getZ()); } @@ -135,7 +140,7 @@ public Block getBlock(int x, int y, int z) { return get(x, y, z).getBlock(); } - public double costOfPlacingAt(int x, int y, int z, IBlockState current) { + public double costOfPlacingAt(int x, int y, int z, BlockState current) { if (!hasThrowaway) { // only true if allowPlace is true, see constructor return COST_INF; } @@ -143,14 +148,13 @@ public double costOfPlacingAt(int x, int y, int z, IBlockState current) { return COST_INF; } if (!worldBorder.canPlaceAt(x, z)) { - // TODO perhaps MovementHelper.canPlaceAgainst could also use this? return COST_INF; } return placeBlockCost; } - public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { - if (!allowBreak) { + public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { + if (!allowBreak && !allowBreakAnyway.contains(current.getBlock())) { return COST_INF; } if (isPossiblyProtected(x, y, z)) { diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index c46b24dea..f671d359f 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -25,17 +25,16 @@ import baritone.api.utils.input.Input; import baritone.behavior.PathingBehavior; import baritone.utils.BlockStateInterface; -import net.minecraft.block.BlockLiquid; -import net.minecraft.entity.item.EntityFallingBlock; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.phys.AABB; import java.util.*; public abstract class Movement implements IMovement, MovementHelper { - public static final EnumFacing[] HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP = {EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.EAST, EnumFacing.WEST, EnumFacing.DOWN}; + public static final Direction[] HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP = {Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST, Direction.DOWN}; protected final IBaritone baritone; protected final IPlayerContext ctx; @@ -123,12 +122,12 @@ protected boolean playerInValidPosition() { */ @Override public MovementStatus update() { - ctx.player().capabilities.isFlying = false; + ctx.player().getAbilities().flying = false; currentState = updateState(currentState); - if (MovementHelper.isLiquid(ctx, ctx.playerFeet())) { + if (MovementHelper.isLiquid(ctx, ctx.playerFeet()) && ctx.player().position().y < dest.y + 0.6) { currentState.setInput(Input.JUMP, true); } - if (ctx.player().isEntityInsideOpaqueBlock()) { + if (ctx.player().isInWall()) { ctx.getSelectedBlock().ifPresent(pos -> MovementHelper.switchToBestToolFor(ctx, BlockStateInterface.get(ctx, pos))); currentState.setInput(Input.CLICK_LEFT, true); } @@ -158,10 +157,10 @@ protected boolean prepared(MovementState state) { } boolean somethingInTheWay = false; for (BetterBlockPos blockPos : positionsToBreak) { - if (!ctx.world().getEntitiesWithinAABB(EntityFallingBlock.class, new AxisAlignedBB(0, 0, 0, 1, 1.1, 1).offset(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { + if (!ctx.world().getEntitiesOfClass(FallingBlockEntity.class, new AABB(0, 0, 0, 1, 1.1, 1).move(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { return false; } - if (!MovementHelper.canWalkThrough(ctx, blockPos) && !(BlockStateInterface.getBlock(ctx, blockPos) instanceof BlockLiquid)) { // can't break liquid, so don't try + if (!MovementHelper.canWalkThrough(ctx, blockPos)) { // can't break air, so don't try somethingInTheWay = true; MovementHelper.switchToBestToolFor(ctx, BlockStateInterface.get(ctx, blockPos)); Optional reachable = RotationUtils.reachable(ctx.player(), blockPos, ctx.playerController().getBlockReachDistance()); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index f5f565e39..d35b63e6f 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -22,20 +22,25 @@ import baritone.api.IBaritone; import baritone.api.pathing.movement.ActionCosts; import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.Rotation; import baritone.api.utils.*; import baritone.api.utils.input.Input; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; -import net.minecraft.block.*; -import net.minecraft.block.properties.PropertyBool; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.IBlockAccess; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.piston.MovingPistonBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.SlabType; +import net.minecraft.world.level.material.*; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; import java.util.Optional; @@ -48,11 +53,14 @@ */ public interface MovementHelper extends ActionCosts, Helper { - static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + if (!bsi.worldBorder.canPlaceAt(x, y)) { + return true; + } Block b = state.getBlock(); return Baritone.settings().blocksToDisallowBreaking.value.contains(b) || b == Blocks.ICE // ice becomes water, and water can mess up the path - || b instanceof BlockSilverfish // obvious reasons + || b instanceof InfestedBlock // obvious reasons // call context.get directly with x,y,z. no need to make 5 new BlockPos for no reason || avoidAdjacentBreaking(bsi, x, y + 1, z, true) || avoidAdjacentBreaking(bsi, x + 1, y, z, false) @@ -65,16 +73,16 @@ static boolean avoidAdjacentBreaking(BlockStateInterface bsi, int x, int y, int // returns true if you should avoid breaking a block that's adjacent to this one (e.g. lava that will start flowing if you give it a path) // this is only called for north, south, east, west, and up. this is NOT called for down. // we assume that it's ALWAYS okay to break the block thats ABOVE liquid - IBlockState state = bsi.get0(x, y, z); + BlockState state = bsi.get0(x, y, z); Block block = state.getBlock(); if (!directlyAbove // it is fine to mine a block that has a falling block directly above, this (the cost of breaking the stacked fallings) is included in cost calculations // therefore if directlyAbove is true, we will actually ignore if this is falling - && block instanceof BlockFalling // obviously, this check is only valid for falling blocks + && block instanceof FallingBlock // obviously, this check is only valid for falling blocks && Baritone.settings().avoidUpdatingFallingBlocks.value // and if the setting is enabled - && BlockFalling.canFallThrough(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) + && FallingBlock.isFree(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) return true; // dont break a block that is adjacent to unsupported gravel because it can cause really weird stuff } - return block instanceof BlockLiquid; + return !state.getFluidState().isEmpty(); } static boolean canWalkThrough(IPlayerContext ctx, BetterBlockPos pos) { @@ -85,27 +93,33 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { return canWalkThrough(bsi, x, y, z, bsi.get0(x, y, z)); } - static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR) { // early return for most common case + if (block instanceof AirBlock) { // early return for most common case return true; } - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block instanceof BlockTrapDoor || block == Blocks.END_ROD) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { + return false; + } + if (block == Blocks.BIG_DRIPLEAF) { + return false; + } + if (block == Blocks.POWDER_SNOW) { return false; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { return false; } - if (block instanceof BlockDoor || block instanceof BlockFenceGate) { + if (block instanceof DoorBlock || block instanceof FenceGateBlock) { // Because there's no nice method in vanilla to check if a door is openable or not, we just have to assume // that anything that isn't an iron door isn't openable, ignoring that some doors introduced in mods can't // be opened by just interacting. return block != Blocks.IRON_DOOR; } - if (block == Blocks.CARPET) { + if (block instanceof WoolCarpetBlock) { return canWalkOn(bsi, x, y - 1, z); } - if (block instanceof BlockSnow) { + if (block instanceof SnowLayerBlock) { // we've already checked doors and fence gates // so the only remaining dynamic isPassables are snow and trapdoor // if they're cached as a top block, we don't know their metadata @@ -115,27 +129,34 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo } // the check in BlockSnow.isPassable is layers < 5 // while actually, we want < 3 because 3 or greater makes it impassable in a 2 high ceiling - if (state.getValue(BlockSnow.LAYERS) >= 3) { + if (state.getValue(SnowLayerBlock.LAYERS) >= 3) { return false; } // ok, it's low enough we could walk through it, but is it supported? return canWalkOn(bsi, x, y - 1, z); } + if (isFlowing(x, y, z, state, bsi)) { return false; // Don't walk through flowing liquids } - if (block instanceof BlockLiquid) { + FluidState fluidState = state.getFluidState(); + if (fluidState.getType() instanceof WaterFluid) { if (Baritone.settings().assumeWalkOnWater.value) { return false; } - IBlockState up = bsi.get0(x, y + 1, z); - if (up.getBlock() instanceof BlockLiquid || up.getBlock() instanceof BlockLilyPad) { + BlockState up = bsi.get0(x, y + 1, z); + if (!up.getFluidState().isEmpty() || up.getBlock() instanceof WaterlilyBlock) { return false; } - return block == Blocks.WATER || block == Blocks.FLOWING_WATER; + return true; } - - return block.isPassable(bsi.access, bsi.isPassableBlockPos.setPos(x, y, z)); + if (block instanceof CauldronBlock) { + return false; + } + // every block that overrides isPassable with anything more complicated than a "return true;" or "return false;" + // has already been accounted for above + // therefore it's safe to not construct a blockpos from our x, y, z ints and instead just pass null + return state.isPathfindable(bsi.access, BlockPos.ZERO, PathComputationType.LAND); // workaround for future compatibility =P } /** @@ -151,7 +172,7 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo static boolean fullyPassable(CalculationContext context, int x, int y, int z) { return fullyPassable( context.bsi.access, - context.bsi.isPassableBlockPos.setPos(x, y, z), + context.bsi.isPassableBlockPos.set(x, y, z), context.bsi.get0(x, y, z) ); } @@ -160,32 +181,34 @@ static boolean fullyPassable(IPlayerContext ctx, BlockPos pos) { return fullyPassable(ctx.world(), pos, ctx.world().getBlockState(pos)); } - static boolean fullyPassable(IBlockAccess access, BlockPos pos, IBlockState state) { + static boolean fullyPassable(BlockGetter access, BlockPos pos, BlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR) { // early return for most common case + if (block instanceof AirBlock) { // early return for most common case return true; } // exceptions - blocks that are isPassable true, but we can't actually jump through - if (block == Blocks.FIRE + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE - || block == Blocks.WEB + || block == Blocks.COBWEB || block == Blocks.VINE || block == Blocks.LADDER || block == Blocks.COCOA - || block instanceof BlockDoor - || block instanceof BlockFenceGate - || block instanceof BlockSnow - || block instanceof BlockLiquid - || block instanceof BlockTrapDoor - || block instanceof BlockEndPortal - || block instanceof BlockSkull) { + || block instanceof AzaleaBlock + || block instanceof DoorBlock + || block instanceof FenceGateBlock + || block instanceof SnowLayerBlock + || !state.getFluidState().isEmpty() + || block instanceof TrapDoorBlock + || block instanceof EndPortalBlock + || block instanceof SkullBlock + || block instanceof ShulkerBoxBlock) { return false; } // door, fence gate, liquid, trapdoor have been accounted for, nothing else uses the world or pos parameters - return block.isPassable(access, pos); + return state.isPathfindable(access, pos, PathComputationType.LAND); } - static boolean isReplaceable(int x, int y, int z, IBlockState state, BlockStateInterface bsi) { + static boolean isReplaceable(int x, int y, int z, BlockState state, BlockStateInterface bsi) { // for MovementTraverse and MovementAscend // block double plant defaults to true when the block doesn't match, so don't need to check that case // all other overrides just return true or false @@ -197,26 +220,25 @@ static boolean isReplaceable(int x, int y, int z, IBlockState state, BlockStateI * } */ Block block = state.getBlock(); - if (block == Blocks.AIR || isWater(block)) { + if (block instanceof AirBlock) { // early return for common cases hehe return true; } - if (block instanceof BlockSnow) { + if (block instanceof SnowLayerBlock) { // as before, default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) if (!bsi.worldContainsLoadedChunk(x, z)) { return true; } - return state.getValue(BlockSnow.LAYERS) == 1; + return state.getValue(SnowLayerBlock.LAYERS) == 1; } - if (block instanceof BlockDoublePlant) { - BlockDoublePlant.EnumPlantType kek = state.getValue(BlockDoublePlant.VARIANT); - return kek == BlockDoublePlant.EnumPlantType.FERN || kek == BlockDoublePlant.EnumPlantType.GRASS; + if (block == Blocks.LARGE_FERN || block == Blocks.TALL_GRASS) { + return true; } return state.getMaterial().isReplaceable(); } @Deprecated - static boolean isReplacable(int x, int y, int z, IBlockState state, BlockStateInterface bsi) { + static boolean isReplacable(int x, int y, int z, BlockState state, BlockStateInterface bsi) { return isReplaceable(x, y, z, state, bsi); } @@ -225,12 +247,12 @@ static boolean isDoorPassable(IPlayerContext ctx, BlockPos doorPos, BlockPos pla return false; } - IBlockState state = BlockStateInterface.get(ctx, doorPos); - if (!(state.getBlock() instanceof BlockDoor)) { + BlockState state = BlockStateInterface.get(ctx, doorPos); + if (!(state.getBlock() instanceof DoorBlock)) { return true; } - return isHorizontalBlockPassable(doorPos, state, playerPos, BlockDoor.OPEN); + return isHorizontalBlockPassable(doorPos, state, playerPos, DoorBlock.OPEN); } static boolean isGatePassable(IPlayerContext ctx, BlockPos gatePos, BlockPos playerPos) { @@ -238,27 +260,27 @@ static boolean isGatePassable(IPlayerContext ctx, BlockPos gatePos, BlockPos pla return false; } - IBlockState state = BlockStateInterface.get(ctx, gatePos); - if (!(state.getBlock() instanceof BlockFenceGate)) { + BlockState state = BlockStateInterface.get(ctx, gatePos); + if (!(state.getBlock() instanceof FenceGateBlock)) { return true; } - return state.getValue(BlockFenceGate.OPEN); + return state.getValue(FenceGateBlock.OPEN); } - static boolean isHorizontalBlockPassable(BlockPos blockPos, IBlockState blockState, BlockPos playerPos, PropertyBool propertyOpen) { + static boolean isHorizontalBlockPassable(BlockPos blockPos, BlockState blockState, BlockPos playerPos, BooleanProperty propertyOpen) { if (playerPos.equals(blockPos)) { return false; } - EnumFacing.Axis facing = blockState.getValue(BlockHorizontal.FACING).getAxis(); + Direction.Axis facing = blockState.getValue(HorizontalDirectionalBlock.FACING).getAxis(); boolean open = blockState.getValue(propertyOpen); - EnumFacing.Axis playerFacing; + Direction.Axis playerFacing; if (playerPos.north().equals(blockPos) || playerPos.south().equals(blockPos)) { - playerFacing = EnumFacing.Axis.Z; + playerFacing = Direction.Axis.Z; } else if (playerPos.east().equals(blockPos) || playerPos.west().equals(blockPos)) { - playerFacing = EnumFacing.Axis.X; + playerFacing = Direction.Axis.X; } else { return true; } @@ -266,13 +288,16 @@ static boolean isHorizontalBlockPassable(BlockPos blockPos, IBlockState blockSta return (facing == playerFacing) == open; } - static boolean avoidWalkingInto(Block block) { - return block instanceof BlockLiquid - || block == Blocks.MAGMA + static boolean avoidWalkingInto(BlockState state) { + Block block = state.getBlock(); + return !state.getFluidState().isEmpty() + || block == Blocks.MAGMA_BLOCK || block == Blocks.CACTUS - || block == Blocks.FIRE + || block == Blocks.SWEET_BERRY_BUSH + || block instanceof BaseFireBlock || block == Blocks.END_PORTAL - || block == Blocks.WEB; + || block == Blocks.COBWEB + || block == Blocks.BUBBLE_COLUMN; } /** @@ -287,59 +312,60 @@ static boolean avoidWalkingInto(Block block) { * @param state The state of the block at the specified location * @return Whether or not the specified block can be walked on */ - static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); - if (block == Blocks.AIR || block == Blocks.MAGMA) { + if (block instanceof AirBlock || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN || block == Blocks.HONEY_BLOCK) { // early return for most common case (air) // plus magma, which is a normal cube but it hurts you return false; } - if (state.isBlockNormalCube()) { + if (isBlockNormalCube(state)) { + return true; + } + if (block instanceof AzaleaBlock) { return true; } if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this return true; } - if (block == Blocks.FARMLAND || block == Blocks.GRASS_PATH) { + if (block == Blocks.FARMLAND || block == Blocks.DIRT_PATH) { return true; } if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { return true; } - if (isWater(block)) { + if (isWater(state)) { // since this is called literally millions of times per second, the benefit of not allocating millions of useless "pos.up()" // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think its a decrease in readability - Block up = bsi.get0(x, y + 1, z).getBlock(); - if (up == Blocks.WATERLILY || up == Blocks.CARPET) { + BlockState upState = bsi.get0(x, y + 1, z); + Block up = upState.getBlock(); + if (up == Blocks.LILY_PAD || up instanceof WoolCarpetBlock) { return true; } - if (isFlowing(x, y, z, state, bsi) || block == Blocks.FLOWING_WATER) { + if (isFlowing(x, y, z, state, bsi) || upState.getFluidState().getType() == Fluids.FLOWING_WATER) { // the only scenario in which we can walk on flowing water is if it's under still water with jesus off - return isWater(up) && !Baritone.settings().assumeWalkOnWater.value; + return isWater(upState) && !Baritone.settings().assumeWalkOnWater.value; } // if assumeWalkOnWater is on, we can only walk on water if there isn't water above it // if assumeWalkOnWater is off, we can only walk on water if there is water above it - return isWater(up) ^ Baritone.settings().assumeWalkOnWater.value; + return isWater(upState) ^ Baritone.settings().assumeWalkOnWater.value; } - if (Baritone.settings().assumeWalkOnLava.value && isLava(block) && !isFlowing(x, y, z, state, bsi)) { + if (Baritone.settings().assumeWalkOnLava.value && isLava(state) && !isFlowing(x, y, z, state, bsi)) { return true; } - if (block == Blocks.GLASS || block == Blocks.STAINED_GLASS) { + if (block == Blocks.GLASS || block instanceof StainedGlassBlock) { return true; } - if (block instanceof BlockSlab) { + if (block instanceof SlabBlock) { if (!Baritone.settings().allowWalkOnBottomSlab.value) { - if (((BlockSlab) block).isDouble()) { - return true; - } - return state.getValue(BlockSlab.HALF) != BlockSlab.EnumBlockHalf.BOTTOM; + return state.getValue(SlabBlock.TYPE) != SlabType.BOTTOM; } return true; } - return block instanceof BlockStairs; + return block instanceof StairBlock; } - static boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, IBlockState state) { + static boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, BlockState state) { return canWalkOn(new BlockStateInterface(ctx), pos.x, pos.y, pos.z, state); } @@ -367,21 +393,24 @@ static boolean canPlaceAgainst(IPlayerContext ctx, BlockPos pos) { return canPlaceAgainst(new BlockStateInterface(ctx), pos); } - static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + if (!bsi.worldBorder.canPlaceAt(x, z)) { + return false; + } // can we look at the center of a side face of this block and likely be able to place? // (thats how this check is used) // therefore dont include weird things that we technically could place against (like carpet) but practically can't - return state.isBlockNormalCube() || state.isFullBlock() || state.getBlock() == Blocks.GLASS || state.getBlock() == Blocks.STAINED_GLASS; + return isBlockNormalCube(state) || state.getBlock() == Blocks.GLASS || state.getBlock() instanceof StainedGlassBlock; } static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, boolean includeFalling) { return getMiningDurationTicks(context, x, y, z, context.get(x, y, z), includeFalling); } - static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, IBlockState state, boolean includeFalling) { + static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, BlockState state, boolean includeFalling) { Block block = state.getBlock(); if (!canWalkThrough(context.bsi, x, y, z, state)) { - if (block instanceof BlockLiquid) { + if (!state.getFluidState().isEmpty()) { return COST_INF; } double mult = context.breakCostMultiplierAt(x, y, z, state); @@ -399,8 +428,8 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i result += context.breakBlockAdditionalCost; result *= mult; if (includeFalling) { - IBlockState above = context.get(x, y + 1, z); - if (above.getBlock() instanceof BlockFalling) { + BlockState above = context.get(x, y + 1, z); + if (above.getBlock() instanceof FallingBlock) { result += getMiningDurationTicks(context, x, y + 1, z, above, true); } } @@ -409,10 +438,9 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i return 0; // we won't actually mine it, so don't check fallings above } - static boolean isBottomSlab(IBlockState state) { - return state.getBlock() instanceof BlockSlab - && !((BlockSlab) state.getBlock()).isDouble() - && state.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.BOTTOM; + static boolean isBottomSlab(BlockState state) { + return state.getBlock() instanceof SlabBlock + && state.getValue(SlabBlock.TYPE) == SlabType.BOTTOM; } /** @@ -421,7 +449,7 @@ static boolean isBottomSlab(IBlockState state) { * @param ctx The player context * @param b the blockstate to mine */ - static void switchToBestToolFor(IPlayerContext ctx, IBlockState b) { + static void switchToBestToolFor(IPlayerContext ctx, BlockState b) { switchToBestToolFor(ctx, b, new ToolSet(ctx.player()), BaritoneAPI.getSettings().preferSilkTouch.value); } @@ -432,9 +460,9 @@ static void switchToBestToolFor(IPlayerContext ctx, IBlockState b) { * @param b the blockstate to mine * @param ts previously calculated ToolSet */ - static void switchToBestToolFor(IPlayerContext ctx, IBlockState b, ToolSet ts, boolean preferSilkTouch) { + static void switchToBestToolFor(IPlayerContext ctx, BlockState b, ToolSet ts, boolean preferSilkTouch) { if (Baritone.settings().autoTool.value && !Baritone.settings().assumeExternalAutoTool.value) { - ctx.player().inventory.currentItem = ts.getBestSlot(b.getBlock(), preferSilkTouch); + ctx.player().getInventory().selected = ts.getBestSlot(b.getBlock(), preferSilkTouch); } } @@ -442,7 +470,7 @@ static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { state.setTarget(new MovementTarget( new Rotation(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(pos), - ctx.playerRotations()).getYaw(), ctx.player().rotationPitch), + ctx.playerRotations()).getYaw(), ctx.player().getXRot()), false )).setInput(Input.MOVE_FORWARD, true); } @@ -451,11 +479,12 @@ static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { * Returns whether or not the specified block is * water, regardless of whether or not it is flowing. * - * @param b The block + * @param state The block state * @return Whether or not the block is water */ - static boolean isWater(Block b) { - return b == Blocks.FLOWING_WATER || b == Blocks.WATER; + static boolean isWater(BlockState state) { + Fluid f = state.getFluidState().getType(); + return f == Fluids.WATER || f == Fluids.FLOWING_WATER; } /** @@ -467,11 +496,12 @@ static boolean isWater(Block b) { * @return Whether or not the block is water */ static boolean isWater(IPlayerContext ctx, BlockPos bp) { - return isWater(BlockStateInterface.getBlock(ctx, bp)); + return isWater(BlockStateInterface.get(ctx, bp)); } - static boolean isLava(Block b) { - return b == Blocks.FLOWING_LAVA || b == Blocks.LAVA; + static boolean isLava(BlockState state) { + Fluid f = state.getFluidState().getType(); + return f == Fluids.LAVA || f == Fluids.FLOWING_LAVA; } /** @@ -482,20 +512,25 @@ static boolean isLava(Block b) { * @return Whether or not the block is a liquid */ static boolean isLiquid(IPlayerContext ctx, BlockPos p) { - return BlockStateInterface.getBlock(ctx, p) instanceof BlockLiquid; + return isLiquid(BlockStateInterface.get(ctx, p)); + } + + static boolean isLiquid(BlockState blockState) { + return !blockState.getFluidState().isEmpty(); } - static boolean possiblyFlowing(IBlockState state) { - // Will be IFluidState in 1.13 - return state.getBlock() instanceof BlockLiquid - && state.getValue(BlockLiquid.LEVEL) != 0; + static boolean possiblyFlowing(BlockState state) { + FluidState fluidState = state.getFluidState(); + return fluidState.getType() instanceof FlowingFluid + && fluidState.getType().getAmount(fluidState) != 8; } - static boolean isFlowing(int x, int y, int z, IBlockState state, BlockStateInterface bsi) { - if (!(state.getBlock() instanceof BlockLiquid)) { + static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterface bsi) { + FluidState fluidState = state.getFluidState(); + if (!(fluidState.getType() instanceof FlowingFluid)) { return false; } - if (state.getValue(BlockLiquid.LEVEL) != 0) { + if (fluidState.getType().getAmount(fluidState) != 8) { return true; } return possiblyFlowing(bsi.get0(x + 1, y, z)) @@ -504,17 +539,34 @@ static boolean isFlowing(int x, int y, int z, IBlockState state, BlockStateInter || possiblyFlowing(bsi.get0(x, y, z - 1)); } + static boolean isBlockNormalCube(BlockState state) { + Block block = state.getBlock(); + if (block instanceof BambooBlock + || block instanceof MovingPistonBlock + || block instanceof ScaffoldingBlock + || block instanceof ShulkerBoxBlock + || block instanceof PointedDripstoneBlock + || block instanceof AmethystClusterBlock) { + return false; + } + try { + return Block.isShapeFullBlock(state.getCollisionShape(null, null)); + } catch (Exception ignored) { + // if we can't get the collision shape, assume it's bad and add to blocksToAvoid + } + return false; + } static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, BlockPos placeAt, boolean preferDown, boolean wouldSneak) { IPlayerContext ctx = baritone.getPlayerContext(); Optional direct = RotationUtils.reachable(ctx, placeAt, wouldSneak); // we assume that if there is a block there, it must be replacable boolean found = false; if (direct.isPresent()) { - state.setTarget(new MovementState.MovementTarget(direct.get(), true)); + state.setTarget(new MovementTarget(direct.get(), true)); found = true; } for (int i = 0; i < 5; i++) { - BlockPos against1 = placeAt.offset(HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i]); + BlockPos against1 = placeAt.relative(HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i]); if (MovementHelper.canPlaceAgainst(ctx, against1)) { if (!((Baritone) baritone).getInventoryBehavior().selectThrowawayForLocation(false, placeAt.getX(), placeAt.getY(), placeAt.getZ())) { // get ready to place a throwaway block Helper.HELPER.logDebug("bb pls get me some blocks. dirt, netherrack, cobble"); @@ -524,10 +576,10 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, double faceX = (placeAt.getX() + against1.getX() + 1.0D) * 0.5D; double faceY = (placeAt.getY() + against1.getY() + 0.5D) * 0.5D; double faceZ = (placeAt.getZ() + against1.getZ() + 1.0D) * 0.5D; - Rotation place = RotationUtils.calcRotationFromVec3d(wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()); - RayTraceResult res = RayTraceUtils.rayTraceTowards(ctx.player(), place, ctx.playerController().getBlockReachDistance(), wouldSneak); - if (res != null && res.typeOfHit == RayTraceResult.Type.BLOCK && res.getBlockPos().equals(against1) && res.getBlockPos().offset(res.sideHit).equals(placeAt)) { - state.setTarget(new MovementState.MovementTarget(place, true)); + Rotation place = RotationUtils.calcRotationFromVec3d(wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.playerHead(), new Vec3(faceX, faceY, faceZ), ctx.playerRotations()); + HitResult res = RayTraceUtils.rayTraceTowards(ctx.player(), place, ctx.playerController().getBlockReachDistance(), wouldSneak); + if (res != null && res.getType() == HitResult.Type.BLOCK && ((BlockHitResult) res).getBlockPos().equals(against1) && ((BlockHitResult) res).getBlockPos().relative(((BlockHitResult) res).getDirection()).equals(placeAt)) { + state.setTarget(new MovementTarget(place, true)); found = true; if (!preferDown) { @@ -540,9 +592,9 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, } if (ctx.getSelectedBlock().isPresent()) { BlockPos selectedBlock = ctx.getSelectedBlock().get(); - EnumFacing side = ctx.objectMouseOver().sideHit; + Direction side = ((BlockHitResult) ctx.objectMouseOver()).getDirection(); // only way for selectedBlock.equals(placeAt) to be true is if it's replacable - if (selectedBlock.equals(placeAt) || (MovementHelper.canPlaceAgainst(ctx, selectedBlock) && selectedBlock.offset(side).equals(placeAt))) { + if (selectedBlock.equals(placeAt) || (MovementHelper.canPlaceAgainst(ctx, selectedBlock) && selectedBlock.relative(side).equals(placeAt))) { if (wouldSneak) { state.setInput(Input.SNEAK, true); } @@ -567,8 +619,7 @@ enum PlaceResult { static boolean isTransparent(Block b) { return b == Blocks.AIR || - b == Blocks.FLOWING_LAVA || - b == Blocks.FLOWING_WATER || + b == Blocks.LAVA || b == Blocks.WATER; } } diff --git a/src/main/java/baritone/pathing/movement/Moves.java b/src/main/java/baritone/pathing/movement/Moves.java index da278436f..87b5db6ac 100644 --- a/src/main/java/baritone/pathing/movement/Moves.java +++ b/src/main/java/baritone/pathing/movement/Moves.java @@ -20,7 +20,7 @@ import baritone.api.utils.BetterBlockPos; import baritone.pathing.movement.movements.*; import baritone.utils.pathing.MutableMoveResult; -import net.minecraft.util.EnumFacing; +import net.minecraft.core.Direction; /** * An enum of all possible movements attached to all possible directions they could be taken in @@ -31,7 +31,7 @@ public enum Moves { DOWNWARD(0, -1, 0) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return new MovementDownward(context.getBaritone(), src, src.down()); + return new MovementDownward(context.getBaritone(), src, src.below()); } @Override @@ -43,7 +43,7 @@ public double cost(CalculationContext context, int x, int y, int z) { PILLAR(0, +1, 0) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return new MovementPillar(context.getBaritone(), src, src.up()); + return new MovementPillar(context.getBaritone(), src, src.above()); } @Override @@ -225,7 +225,7 @@ public void apply(CalculationContext context, int x, int y, int z, MutableMoveRe public Movement apply0(CalculationContext context, BetterBlockPos src) { MutableMoveResult res = new MutableMoveResult(); apply(context, src.x, src.y, src.z, res); - return new MovementDiagonal(context.getBaritone(), src, EnumFacing.NORTH, EnumFacing.EAST, res.y - src.y); + return new MovementDiagonal(context.getBaritone(), src, Direction.NORTH, Direction.EAST, res.y - src.y); } @Override @@ -239,7 +239,7 @@ public void apply(CalculationContext context, int x, int y, int z, MutableMoveRe public Movement apply0(CalculationContext context, BetterBlockPos src) { MutableMoveResult res = new MutableMoveResult(); apply(context, src.x, src.y, src.z, res); - return new MovementDiagonal(context.getBaritone(), src, EnumFacing.NORTH, EnumFacing.WEST, res.y - src.y); + return new MovementDiagonal(context.getBaritone(), src, Direction.NORTH, Direction.WEST, res.y - src.y); } @Override @@ -253,7 +253,7 @@ public void apply(CalculationContext context, int x, int y, int z, MutableMoveRe public Movement apply0(CalculationContext context, BetterBlockPos src) { MutableMoveResult res = new MutableMoveResult(); apply(context, src.x, src.y, src.z, res); - return new MovementDiagonal(context.getBaritone(), src, EnumFacing.SOUTH, EnumFacing.EAST, res.y - src.y); + return new MovementDiagonal(context.getBaritone(), src, Direction.SOUTH, Direction.EAST, res.y - src.y); } @Override @@ -267,7 +267,7 @@ public void apply(CalculationContext context, int x, int y, int z, MutableMoveRe public Movement apply0(CalculationContext context, BetterBlockPos src) { MutableMoveResult res = new MutableMoveResult(); apply(context, src.x, src.y, src.z, res); - return new MovementDiagonal(context.getBaritone(), src, EnumFacing.SOUTH, EnumFacing.WEST, res.y - src.y); + return new MovementDiagonal(context.getBaritone(), src, Direction.SOUTH, Direction.WEST, res.y - src.y); } @Override @@ -279,48 +279,48 @@ public void apply(CalculationContext context, int x, int y, int z, MutableMoveRe PARKOUR_NORTH(0, 0, -4, true, true) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return MovementParkour.cost(context, src, EnumFacing.NORTH); + return MovementParkour.cost(context, src, Direction.NORTH); } @Override public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { - MovementParkour.cost(context, x, y, z, EnumFacing.NORTH, result); + MovementParkour.cost(context, x, y, z, Direction.NORTH, result); } }, PARKOUR_SOUTH(0, 0, +4, true, true) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return MovementParkour.cost(context, src, EnumFacing.SOUTH); + return MovementParkour.cost(context, src, Direction.SOUTH); } @Override public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { - MovementParkour.cost(context, x, y, z, EnumFacing.SOUTH, result); + MovementParkour.cost(context, x, y, z, Direction.SOUTH, result); } }, PARKOUR_EAST(+4, 0, 0, true, true) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return MovementParkour.cost(context, src, EnumFacing.EAST); + return MovementParkour.cost(context, src, Direction.EAST); } @Override public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { - MovementParkour.cost(context, x, y, z, EnumFacing.EAST, result); + MovementParkour.cost(context, x, y, z, Direction.EAST, result); } }, PARKOUR_WEST(-4, 0, 0, true, true) { @Override public Movement apply0(CalculationContext context, BetterBlockPos src) { - return MovementParkour.cost(context, src, EnumFacing.WEST); + return MovementParkour.cost(context, src, Direction.WEST); } @Override public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { - MovementParkour.cost(context, x, y, z, EnumFacing.WEST, result); + MovementParkour.cost(context, x, y, z, Direction.WEST, result); } }; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 161ffdacd..abc87bd98 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -28,10 +28,10 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.BlockFalling; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.EnumFacing; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.state.BlockState; import java.util.Set; @@ -40,7 +40,7 @@ public class MovementAscend extends Movement { private int ticksWithoutPlacement = 0; public MovementAscend(IBaritone baritone, BetterBlockPos src, BetterBlockPos dest) { - super(baritone, src, dest, new BetterBlockPos[]{dest, src.up(2), dest.up()}, dest.down()); + super(baritone, src, dest, new BetterBlockPos[]{dest, src.above(2), dest.above()}, dest.below()); } @Override @@ -54,19 +54,8 @@ public double calculateCost(CalculationContext context) { return cost(context, src.x, src.y, src.z, dest.x, dest.z); } - @Override - protected Set calculateValidPositions() { - BetterBlockPos prior = new BetterBlockPos(src.subtract(getDirection()).up()); // sometimes we back up to place the block, also sprint ascends, also skip descend to straight ascend - return ImmutableSet.of(src, - src.up(), - dest, - prior, - prior.up() - ); - } - public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { - IBlockState toPlace = context.get(destX, y, destZ); + BlockState toPlace = context.get(destX, y, destZ); double additionalPlacementCost = 0; if (!MovementHelper.canWalkOn(context.bsi, destX, y, destZ, toPlace)) { additionalPlacementCost = context.costOfPlacingAt(destX, y, destZ, toPlace); @@ -78,9 +67,9 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } boolean foundPlaceOption = false; for (int i = 0; i < 5; i++) { - int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getXOffset(); - int againstY = y + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getYOffset(); - int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getZOffset(); + int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepX(); + int againstY = y + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepY(); + int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepZ(); if (againstX == x && againstZ == z) { // we might be able to backplace now, but it doesn't matter because it will have been broken by the time we'd need to use it continue; } @@ -93,26 +82,26 @@ public static double cost(CalculationContext context, int x, int y, int z, int d return COST_INF; } } - IBlockState srcUp2 = context.get(x, y + 2, z); // used lower down anyway - if (context.get(x, y + 3, z).getBlock() instanceof BlockFalling && (MovementHelper.canWalkThrough(context.bsi, x, y + 1, z) || !(srcUp2.getBlock() instanceof BlockFalling))) {//it would fall on us and possibly suffocate us + BlockState srcUp2 = context.get(x, y + 2, z); // used lower down anyway + if (context.get(x, y + 3, z).getBlock() instanceof FallingBlock && (MovementHelper.canWalkThrough(context.bsi, x, y + 1, z) || !(srcUp2.getBlock() instanceof FallingBlock))) {//it would fall on us and possibly suffocate us // HOWEVER, we assume that we're standing in the start position // that means that src and src.up(1) are both air // maybe they aren't now, but they will be by the time this starts // if the lower one is can't walk through and the upper one is falling, that means that by standing on src // (the presupposition of this Movement) - // we have necessarily already cleared the entire BlockFalling stack + // we have necessarily already cleared the entire FallingBlock stack // on top of our head - // as in, if we have a block, then two BlockFallings on top of it + // as in, if we have a block, then two FallingBlocks on top of it // and that block is x, y+1, z, and we'd have to clear it to even start this movement - // we don't need to worry about those BlockFallings because we've already cleared them + // we don't need to worry about those FallingBlocks because we've already cleared them return COST_INF; // you may think we only need to check srcUp2, not srcUp // however, in the scenario where glitchy world gen where unsupported sand / gravel generates // it's possible srcUp is AIR from the start, and srcUp2 is falling // and in that scenario, when we arrive and break srcUp2, that lets srcUp3 fall on us and suffocate us } - IBlockState srcDown = context.get(x, y - 1, z); + BlockState srcDown = context.get(x, y - 1, z); if (srcDown.getBlock() == Blocks.LADDER || srcDown.getBlock() == Blocks.VINE) { return COST_INF; } @@ -155,6 +144,17 @@ public static double cost(CalculationContext context, int x, int y, int z, int d return totalCost; } + @Override + protected Set calculateValidPositions() { + BetterBlockPos prior = new BetterBlockPos(src.subtract(getDirection()).above()); // sometimes we back up to place the block, also sprint ascends, also skip descend to straight ascend + return ImmutableSet.of(src, + src.above(), + dest, + prior, + prior.above() + ); + } + @Override public MovementState updateState(MovementState state) { if (ctx.playerFeet().y < src.y) { @@ -168,16 +168,16 @@ public MovementState updateState(MovementState state) { return state; } - if (ctx.playerFeet().equals(dest) || ctx.playerFeet().equals(dest.add(getDirection().down()))) { + if (ctx.playerFeet().equals(dest) || ctx.playerFeet().equals(dest.offset(getDirection().below()))) { return state.setStatus(MovementStatus.SUCCESS); } - IBlockState jumpingOnto = BlockStateInterface.get(ctx, positionToPlace); + BlockState jumpingOnto = BlockStateInterface.get(ctx, positionToPlace); if (!MovementHelper.canWalkOn(ctx, positionToPlace, jumpingOnto)) { ticksWithoutPlacement++; - if (MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), false, true) == PlaceResult.READY_TO_PLACE) { + if (MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), false, true) == PlaceResult.READY_TO_PLACE) { state.setInput(Input.SNEAK, true); - if (ctx.player().isSneaking()) { + if (ctx.player().isCrouching()) { state.setInput(Input.CLICK_RIGHT, true); } } @@ -189,21 +189,21 @@ public MovementState updateState(MovementState state) { return state; } MovementHelper.moveTowards(ctx, state, dest); - if (MovementHelper.isBottomSlab(jumpingOnto) && !MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.down()))) { + if (MovementHelper.isBottomSlab(jumpingOnto) && !MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.below()))) { return state; // don't jump while walking from a non double slab into a bottom slab } - if (Baritone.settings().assumeStep.value || ctx.playerFeet().equals(src.up())) { + if (Baritone.settings().assumeStep.value || ctx.playerFeet().equals(src.above())) { // no need to hit space if we're already jumping return state; } int xAxis = Math.abs(src.getX() - dest.getX()); // either 0 or 1 int zAxis = Math.abs(src.getZ() - dest.getZ()); // either 0 or 1 - double flatDistToNext = xAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().posX) + zAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().posZ); - double sideDist = zAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().posX) + xAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().posZ); + double flatDistToNext = xAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().position().x) + zAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().position().z); + double sideDist = zAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().position().x) + xAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().position().z); - double lateralMotion = xAxis * ctx.player().motionZ + zAxis * ctx.player().motionX; + double lateralMotion = xAxis * ctx.player().getDeltaMovement().z + zAxis * ctx.player().getDeltaMovement().x; if (Math.abs(lateralMotion) > 0.1) { return state; } @@ -223,9 +223,9 @@ public MovementState updateState(MovementState state) { } public boolean headBonkClear() { - BetterBlockPos startUp = src.up(2); + BetterBlockPos startUp = src.above(2); for (int i = 0; i < 4; i++) { - BetterBlockPos check = startUp.offset(EnumFacing.byHorizontalIndex(i)); + BetterBlockPos check = startUp.relative(Direction.from2DDataValue(i)); if (!MovementHelper.canWalkThrough(ctx, check)) { // We might bonk our head return false; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 128d1bf99..ad603b1b9 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -30,13 +30,13 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.Block; -import net.minecraft.block.BlockFalling; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; import java.util.Set; @@ -45,7 +45,7 @@ public class MovementDescend extends Movement { private int numTicks = 0; public MovementDescend(IBaritone baritone, BetterBlockPos start, BetterBlockPos end) { - super(baritone, start, end, new BetterBlockPos[]{end.up(2), end.up(), end}, end.down()); + super(baritone, start, end, new BetterBlockPos[]{end.above(2), end.above(), end}, end.below()); } @Override @@ -64,14 +64,9 @@ public double calculateCost(CalculationContext context) { return result.cost; } - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest.up(), dest); - } - public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { double totalCost = 0; - IBlockState destDown = context.get(destX, y - 1, destZ); + BlockState destDown = context.get(destX, y - 1, destZ); totalCost += MovementHelper.getMiningDurationTicks(context, destX, y - 1, destZ, destDown, false); if (totalCost >= COST_INF) { return; @@ -100,7 +95,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des //A is plausibly breakable by either descend or fall //C, D, etc determine the length of the fall - IBlockState below = context.get(destX, y - 2, destZ); + BlockState below = context.get(destX, y - 2, destZ); if (!MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ, below)) { dynamicFallCost(context, x, y, z, destX, destZ, totalCost, below, res); return; @@ -123,8 +118,8 @@ public static void cost(CalculationContext context, int x, int y, int z, int des res.cost = totalCost; } - public static boolean dynamicFallCost(CalculationContext context, int x, int y, int z, int destX, int destZ, double frontBreak, IBlockState below, MutableMoveResult res) { - if (frontBreak != 0 && context.get(destX, y + 2, destZ).getBlock() instanceof BlockFalling) { + public static boolean dynamicFallCost(CalculationContext context, int x, int y, int z, int destX, int destZ, double frontBreak, BlockState below, MutableMoveResult res) { + if (frontBreak != 0 && context.get(destX, y + 2, destZ).getBlock() instanceof FallingBlock) { // if frontBreak is 0 we can actually get through this without updating the falling block and making it actually fall // but if frontBreak is nonzero, we're breaking blocks in front, so don't let anything fall through this column, // and potentially replace the water we're going to fall into @@ -142,10 +137,10 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, // this check prevents it from getting the block at y=-1 and crashing return false; } - IBlockState ontoBlock = context.get(destX, newY, destZ); + BlockState ontoBlock = context.get(destX, newY, destZ); int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; - if (MovementHelper.isWater(ontoBlock.getBlock())) { + if (MovementHelper.isWater(ontoBlock)) { if (!MovementHelper.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { return false; } @@ -203,6 +198,11 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, } } + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest.above(), dest); + } + @Override public MovementState updateState(MovementState state) { super.updateState(state); @@ -212,30 +212,30 @@ public MovementState updateState(MovementState state) { BlockPos playerFeet = ctx.playerFeet(); BlockPos fakeDest = new BlockPos(dest.getX() * 2 - src.getX(), dest.getY(), dest.getZ() * 2 - src.getZ()); - if ((playerFeet.equals(dest) || playerFeet.equals(fakeDest)) && (MovementHelper.isLiquid(ctx, dest) || ctx.player().posY - dest.getY() < 0.5)) { // lilypads + if ((playerFeet.equals(dest) || playerFeet.equals(fakeDest)) && (MovementHelper.isLiquid(ctx, dest) || ctx.player().position().y - dest.getY() < 0.5)) { // lilypads // Wait until we're actually on the ground before saying we're done because sometimes we continue to fall if the next action starts immediately return state.setStatus(MovementStatus.SUCCESS); /* else { - // System.out.println(player().posY + " " + playerFeet.getY() + " " + (player().posY - playerFeet.getY())); + // System.out.println(player().position().y + " " + playerFeet.getY() + " " + (player().position().y - playerFeet.getY())); }*/ } if (safeMode()) { double destX = (src.getX() + 0.5) * 0.17 + (dest.getX() + 0.5) * 0.83; double destZ = (src.getZ() + 0.5) * 0.17 + (dest.getZ() + 0.5) * 0.83; - EntityPlayerSP player = ctx.player(); + LocalPlayer player = ctx.player(); state.setTarget(new MovementState.MovementTarget( new Rotation(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), - new Vec3d(destX, dest.getY(), destZ), - new Rotation(player.rotationYaw, player.rotationPitch)).getYaw(), player.rotationPitch), + new Vec3(destX, dest.getY(), destZ), + new Rotation(player.getYRot(), player.getXRot())).getYaw(), player.getXRot()), false )).setInput(Input.MOVE_FORWARD, true); return state; } - double diffX = ctx.player().posX - (dest.getX() + 0.5); - double diffZ = ctx.player().posZ - (dest.getZ() + 0.5); + double diffX = ctx.player().position().x - (dest.getX() + 0.5); + double diffZ = ctx.player().position().z - (dest.getZ() + 0.5); double ab = Math.sqrt(diffX * diffX + diffZ * diffZ); - double x = ctx.player().posX - (src.getX() + 0.5); - double z = ctx.player().posZ - (src.getZ() + 0.5); + double x = ctx.player().position().x - (src.getX() + 0.5); + double z = ctx.player().position().z - (src.getZ() + 0.5); double fromStart = Math.sqrt(x * x + z * z); if (!playerFeet.equals(dest) || ab > 0.25) { if (numTicks++ < 20 && fromStart < 1.25) { @@ -250,13 +250,13 @@ public MovementState updateState(MovementState state) { public boolean safeMode() { // (dest - src) + dest is offset 1 more in the same direction // so it's the block we'd need to worry about running into if we decide to sprint straight through this descend - BlockPos into = dest.subtract(src.down()).add(dest); + BlockPos into = dest.subtract(src.below()).offset(dest); if (skipToAscend()) { // if dest extends into can't walk through, but the two above are can walk through, then we can overshoot and glitch in that weird way return true; } for (int y = 0; y <= 2; y++) { // we could hit any of the three blocks - if (MovementHelper.avoidWalkingInto(BlockStateInterface.getBlock(ctx, into.up(y)))) { + if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, into.above(y)))) { return true; } } @@ -264,7 +264,7 @@ public boolean safeMode() { } public boolean skipToAscend() { - BlockPos into = dest.subtract(src.down()).add(dest); - return !MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into)) && MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into).up()) && MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into).up(2)); + BlockPos into = dest.subtract(src.below()).offset(dest); + return !MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into)) && MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into).above()) && MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into).above(2)); } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 933c86092..2cc126fb5 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -29,12 +29,12 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.init.Blocks; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import java.util.ArrayList; import java.util.List; @@ -44,78 +44,26 @@ public class MovementDiagonal extends Movement { private static final double SQRT_2 = Math.sqrt(2); - public MovementDiagonal(IBaritone baritone, BetterBlockPos start, EnumFacing dir1, EnumFacing dir2, int dy) { - this(baritone, start, start.offset(dir1), start.offset(dir2), dir2, dy); + public MovementDiagonal(IBaritone baritone, BetterBlockPos start, Direction dir1, Direction dir2, int dy) { + this(baritone, start, start.relative(dir1), start.relative(dir2), dir2, dy); // super(start, start.offset(dir1).offset(dir2), new BlockPos[]{start.offset(dir1), start.offset(dir1).up(), start.offset(dir2), start.offset(dir2).up(), start.offset(dir1).offset(dir2), start.offset(dir1).offset(dir2).up()}, new BlockPos[]{start.offset(dir1).offset(dir2).down()}); } - private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPos dir1, BetterBlockPos dir2, EnumFacing drr2, int dy) { - this(baritone, start, dir1.offset(drr2).up(dy), dir1, dir2); + private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPos dir1, BetterBlockPos dir2, Direction drr2, int dy) { + this(baritone, start, dir1.relative(drr2).above(dy), dir1, dir2); } private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPos end, BetterBlockPos dir1, BetterBlockPos dir2) { - super(baritone, start, end, new BetterBlockPos[]{dir1, dir1.up(), dir2, dir2.up(), end, end.up()}); - } - - @Override - protected boolean safeToCancel(MovementState state) { - //too simple. backfill does not work after cornering with this - //return MovementHelper.canWalkOn(ctx, ctx.playerFeet().down()); - EntityPlayerSP player = ctx.player(); - double offset = 0.25; - double x = player.posX; - double y = player.posY - 1; - double z = player.posZ; - //standard - if (ctx.playerFeet().equals(src)) { - return true; - } - //both corners are walkable - if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) - && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { - return true; - } - //we are in a likely unwalkable corner, check for a supporting block - if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) - || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { - return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); - } - return true; - } - - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is incorrect - } - return result.cost; - } - - @Override - protected Set calculateValidPositions() { - BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); - BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); - if (dest.y < src.y) { - return ImmutableSet.of(src, dest.up(), diagA, diagB, dest, diagA.down(), diagB.down()); - } - if (dest.y > src.y) { - return ImmutableSet.of(src, src.up(), diagA, diagB, dest, diagA.up(), diagB.up()); - } - return ImmutableSet.of(src, dest, diagA, diagB); + super(baritone, start, end, new BetterBlockPos[]{dir1, dir1.above(), dir2, dir2.above(), end, end.above()}); } public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { if (!MovementHelper.canWalkThrough(context.bsi, destX, y + 1, destZ)) { return; } - IBlockState destInto = context.get(destX, y, destZ); + BlockState destInto = context.get(destX, y, destZ); boolean ascend = false; - IBlockState destWalkOn; + BlockState destWalkOn; boolean descend = false; if (!MovementHelper.canWalkThrough(context.bsi, destX, y, destZ, destInto)) { ascend = true; @@ -146,17 +94,18 @@ public static void cost(CalculationContext context, int x, int y, int z, int des if (fromDown == Blocks.SOUL_SAND) { multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; } - Block cuttingOver1 = context.get(x, y - 1, destZ).getBlock(); - if (cuttingOver1 == Blocks.MAGMA || MovementHelper.isLava(cuttingOver1)) { + BlockState cuttingOver1 = context.get(x, y - 1, destZ); + if (cuttingOver1.getBlock() == Blocks.MAGMA_BLOCK || MovementHelper.isLava(cuttingOver1)) { return; } - Block cuttingOver2 = context.get(destX, y - 1, z).getBlock(); - if (cuttingOver2 == Blocks.MAGMA || MovementHelper.isLava(cuttingOver2)) { + BlockState cuttingOver2 = context.get(destX, y - 1, z); + if (cuttingOver2.getBlock() == Blocks.MAGMA_BLOCK || MovementHelper.isLava(cuttingOver2)) { return; } - Block startIn = context.getBlock(x, y, z); boolean water = false; - if (MovementHelper.isWater(startIn) || MovementHelper.isWater(destInto.getBlock())) { + BlockState startState = context.get(x, y, z); + Block startIn = startState.getBlock(); + if (MovementHelper.isWater(startState) || MovementHelper.isWater(destInto)) { if (ascend) { return; } @@ -166,8 +115,8 @@ public static void cost(CalculationContext context, int x, int y, int z, int des multiplier = context.waterWalkSpeed; water = true; } - IBlockState pb0 = context.get(x, y, destZ); - IBlockState pb2 = context.get(destX, y, z); + BlockState pb0 = context.get(x, y, destZ); + BlockState pb2 = context.get(destX, y, z); if (ascend) { boolean ATop = MovementHelper.canWalkThrough(context.bsi, x, y + 2, destZ); boolean AMid = MovementHelper.canWalkThrough(context.bsi, x, y + 1, destZ); @@ -176,8 +125,8 @@ public static void cost(CalculationContext context, int x, int y, int z, int des boolean BMid = MovementHelper.canWalkThrough(context.bsi, destX, y + 1, z); boolean BLow = MovementHelper.canWalkThrough(context.bsi, destX, y, z, pb2); if ((!(ATop && AMid && ALow) && !(BTop && BMid && BLow)) // no option - || MovementHelper.avoidWalkingInto(pb0.getBlock()) // bad - || MovementHelper.avoidWalkingInto(pb2.getBlock()) // bad + || MovementHelper.avoidWalkingInto(pb0) // bad + || MovementHelper.avoidWalkingInto(pb2) // bad || (ATop && AMid && MovementHelper.canWalkOn(context.bsi, x, y, destZ, pb0)) // we could just ascend || (BTop && BMid && MovementHelper.canWalkOn(context.bsi, destX, y, z, pb2)) // we could just ascend || (!ATop && AMid && ALow) // head bonk A @@ -197,14 +146,14 @@ public static void cost(CalculationContext context, int x, int y, int z, int des // so no need to check pb1 as well, might as well return early here return; } - IBlockState pb1 = context.get(x, y + 1, destZ); + BlockState pb1 = context.get(x, y + 1, destZ); optionA += MovementHelper.getMiningDurationTicks(context, x, y + 1, destZ, pb1, true); if (optionA != 0 && optionB != 0) { // same deal, if pb1 makes optionA nonzero and option B already was nonzero, pb3 can't affect the result return; } - IBlockState pb3 = context.get(destX, y + 1, z); - if (optionA == 0 && ((MovementHelper.avoidWalkingInto(pb2.getBlock()) && pb2.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb3.getBlock()))) { + BlockState pb3 = context.get(destX, y + 1, z); + if (optionA == 0 && ((MovementHelper.avoidWalkingInto(pb2) && pb2.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb3))) { // at this point we're done calculating optionA, so we can check if it's actually possible to edge around in that direction return; } @@ -213,7 +162,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des // and finally, if the cost is nonzero for both ways to approach this diagonal, it's not possible return; } - if (optionB == 0 && ((MovementHelper.avoidWalkingInto(pb0.getBlock()) && pb0.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb1.getBlock()))) { + if (optionB == 0 && ((MovementHelper.avoidWalkingInto(pb0) && pb0.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb1))) { // and now that option B is fully calculated, see if we can edge around that way return; } @@ -243,6 +192,58 @@ public static void cost(CalculationContext context, int x, int y, int z, int des res.z = destZ; } + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is incorrect + } + return result.cost; + } + + @Override + protected boolean safeToCancel(MovementState state) { + //too simple. backfill does not work after cornering with this + //return MovementHelper.canWalkOn(ctx, ctx.playerFeet().down()); + LocalPlayer player = ctx.player(); + double offset = 0.25; + double x = player.position().x; + double y = player.position().y - 1; + double z = player.position().z; + //standard + if (ctx.playerFeet().equals(src)) { + return true; + } + //both corners are walkable + if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) + && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { + return true; + } + //we are in a likely unwalkable corner, check for a supporting block + if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) + || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { + return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); + } + return true; + } + + @Override + protected Set calculateValidPositions() { + BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); + BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); + if (dest.y < src.y) { + return ImmutableSet.of(src, dest.above(), diagA, diagB, dest, diagA.below(), diagB.below()); + } + if (dest.y > src.y) { + return ImmutableSet.of(src, src.above(), diagA, diagB, dest, diagA.above(), diagB.above()); + } + return ImmutableSet.of(src, dest, diagA, diagB); + } + @Override public MovementState updateState(MovementState state) { super.updateState(state); @@ -252,10 +253,10 @@ public MovementState updateState(MovementState state) { if (ctx.playerFeet().equals(dest)) { return state.setStatus(MovementStatus.SUCCESS); - } else if (!playerInValidPosition() && !(MovementHelper.isLiquid(ctx, src) && getValidPositions().contains(ctx.playerFeet().up()))) { + } else if (!playerInValidPosition() && !(MovementHelper.isLiquid(ctx, src) && getValidPositions().contains(ctx.playerFeet().above()))) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (dest.y > src.y && ctx.player().posY < src.y + 0.1 && ctx.player().collidedHorizontally) { + if (dest.y > src.y && ctx.player().position().y < src.y + 0.1 && ctx.player().horizontalCollision) { state.setInput(Input.JUMP, true); } if (sprint()) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index da5e3f893..45d18d1c7 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -25,9 +25,9 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import java.util.Set; @@ -62,7 +62,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (!MovementHelper.canWalkOn(context.bsi, x, y - 2, z)) { return COST_INF; } - IBlockState down = context.get(x, y - 1, z); + BlockState down = context.get(x, y - 1, z); Block downBlock = down.getBlock(); if (downBlock == Blocks.LADDER || downBlock == Blocks.VINE) { return LADDER_DOWN_ONE_COST; @@ -84,8 +84,8 @@ public MovementState updateState(MovementState state) { } else if (!playerInValidPosition()) { return state.setStatus(MovementStatus.UNREACHABLE); } - double diffX = ctx.player().posX - (dest.getX() + 0.5); - double diffZ = ctx.player().posZ - (dest.getZ() + 0.5); + double diffX = ctx.player().position().x - (dest.getX() + 0.5); + double diffZ = ctx.player().position().z - (dest.getZ() + 0.5); double ab = Math.sqrt(diffX * diffX + diffZ * diffZ); if (numTicks++ < 10 && ab < 0.2) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index b777b0a62..f8d2775a7 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -30,17 +30,19 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.pathing.MutableMoveResult; -import net.minecraft.block.Block; -import net.minecraft.block.BlockLadder; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.WaterFluid; +import net.minecraft.world.phys.Vec3; import java.util.HashSet; import java.util.Optional; @@ -65,14 +67,16 @@ public double calculateCost(CalculationContext context) { return result.cost; } - @Override - protected Set calculateValidPositions() { - Set set = new HashSet<>(); - set.add(src); - for (int y = src.y - dest.y; y >= 0; y--) { - set.add(dest.up(y)); + private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, BetterBlockPos dest) { + BetterBlockPos[] toBreak; + int diffX = src.getX() - dest.getX(); + int diffZ = src.getZ() - dest.getZ(); + int diffY = Math.abs(src.getY() - dest.getY()); + toBreak = new BetterBlockPos[diffY + 2]; + for (int i = 0; i < toBreak.length; i++) { + toBreak[i] = new BetterBlockPos(src.getX() - diffX, src.getY() + 1 - i, src.getZ() - diffZ); } - return set; + return toBreak; } private boolean willPlaceBucket() { @@ -81,6 +85,16 @@ private boolean willPlaceBucket() { return MovementDescend.dynamicFallCost(context, src.x, src.y, src.z, dest.x, dest.z, 0, context.get(dest.x, src.y - 2, dest.z), result); } + @Override + protected Set calculateValidPositions() { + Set set = new HashSet<>(); + set.add(src); + for (int y = src.y - dest.y; y >= 0; y--) { + set.add(dest.above(y)); + } + return set; + } + @Override public MovementState updateState(MovementState state) { super.updateState(state); @@ -91,19 +105,20 @@ public MovementState updateState(MovementState state) { BlockPos playerFeet = ctx.playerFeet(); Rotation toDest = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()); Rotation targetRotation = null; - Block destBlock = ctx.world().getBlockState(dest).getBlock(); - boolean isWater = destBlock == Blocks.WATER || destBlock == Blocks.FLOWING_WATER; + BlockState destState = ctx.world().getBlockState(dest); + Block destBlock = destState.getBlock(); + boolean isWater = destState.getFluidState().getType() instanceof WaterFluid; if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { - if (!InventoryPlayer.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().provider.isNether()) { + if (!Inventory.isHotbarSlot(ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_WATER)) || ctx.world().dimension() == Level.NETHER) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (ctx.player().posY - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().onGround) { - ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER); + if (ctx.player().position().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().isOnGround()) { + ctx.player().getInventory().selected = ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_WATER); targetRotation = new Rotation(toDest.getYaw(), 90.0F); - if (ctx.isLookingAt(dest) || ctx.isLookingAt(dest.down())) { + if (ctx.isLookingAt(dest) || ctx.isLookingAt(dest.below())) { state.setInput(Input.CLICK_RIGHT, true); } } @@ -113,17 +128,17 @@ public MovementState updateState(MovementState state) { } else { state.setTarget(new MovementTarget(toDest, false)); } - if (playerFeet.equals(dest) && (ctx.player().posY - playerFeet.getY() < 0.094 || isWater)) { // 0.094 because lilypads + if (playerFeet.equals(dest) && (ctx.player().position().y - playerFeet.getY() < 0.094 || isWater)) { // 0.094 because lilypads if (isWater) { // only match water, not flowing water (which we cannot pick up with a bucket) - if (InventoryPlayer.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY))) { - ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY); - if (ctx.player().motionY >= 0) { + if (Inventory.isHotbarSlot(ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_EMPTY))) { + ctx.player().getInventory().selected = ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_EMPTY); + if (ctx.player().getDeltaMovement().y >= 0) { return state.setInput(Input.CLICK_RIGHT, true); } else { return state; } } else { - if (ctx.player().motionY >= 0) { + if (ctx.player().getDeltaMovement().y >= 0) { return state.setStatus(MovementStatus.SUCCESS); } // don't else return state; we need to stay centered because this water might be flowing under the surface } @@ -131,41 +146,31 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.SUCCESS); } } - Vec3d destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) - if (Math.abs(ctx.player().posX + ctx.player().motionX - destCenter.x) > 0.1 || Math.abs(ctx.player().posZ + ctx.player().motionZ - destCenter.z) > 0.1) { - if (!ctx.player().onGround && Math.abs(ctx.player().motionY) > 0.4) { + Vec3 destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) + if (Math.abs(ctx.player().position().x + ctx.player().getDeltaMovement().x - destCenter.x) > 0.1 || Math.abs(ctx.player().position().z + ctx.player().getDeltaMovement().z - destCenter.z) > 0.1) { + if (!ctx.player().isOnGround() && Math.abs(ctx.player().getDeltaMovement().y) > 0.4) { state.setInput(Input.SNEAK, true); } state.setInput(Input.MOVE_FORWARD, true); } - Vec3i avoid = Optional.ofNullable(avoid()).map(EnumFacing::getDirectionVec).orElse(null); + Vec3i avoid = Optional.ofNullable(avoid()).map(Direction::getNormal).orElse(null); if (avoid == null) { avoid = src.subtract(dest); } else { - double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().posX)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().posZ)); + double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().position().x)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().position().z)); if (dist < 0.6) { state.setInput(Input.MOVE_FORWARD, true); - } else if (!ctx.player().onGround) { + } else if (!ctx.player().isOnGround()) { state.setInput(Input.SNEAK, false); } } if (targetRotation == null) { - Vec3d destCenterOffset = new Vec3d(destCenter.x + 0.125 * avoid.getX(), destCenter.y, destCenter.z + 0.125 * avoid.getZ()); + Vec3 destCenterOffset = new Vec3(destCenter.x + 0.125 * avoid.getX(), destCenter.y, destCenter.z + 0.125 * avoid.getZ()); state.setTarget(new MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), destCenterOffset, ctx.playerRotations()), false)); } return state; } - private EnumFacing avoid() { - for (int i = 0; i < 15; i++) { - IBlockState state = ctx.world().getBlockState(ctx.playerFeet().down(i)); - if (state.getBlock() == Blocks.LADDER) { - return state.getValue(BlockLadder.FACING); - } - } - return null; - } - @Override public boolean safeToCancel(MovementState state) { // if we haven't started walking off the edge yet, or if we're in the process of breaking blocks before doing the fall @@ -173,16 +178,14 @@ public boolean safeToCancel(MovementState state) { return ctx.playerFeet().equals(src) || state.getStatus() != MovementStatus.RUNNING; } - private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, BetterBlockPos dest) { - BetterBlockPos[] toBreak; - int diffX = src.getX() - dest.getX(); - int diffZ = src.getZ() - dest.getZ(); - int diffY = src.getY() - dest.getY(); - toBreak = new BetterBlockPos[diffY + 2]; - for (int i = 0; i < toBreak.length; i++) { - toBreak[i] = new BetterBlockPos(src.getX() - diffX, src.getY() + 1 - i, src.getZ() - diffZ); + private Direction avoid() { + for (int i = 0; i < 15; i++) { + BlockState state = ctx.world().getBlockState(ctx.playerFeet().below(i)); + if (state.getBlock() == Blocks.LADDER) { + return state.getValue(LadderBlock.FACING); + } } - return toBreak; + return null; } @Override diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index e5d17b9ac..8e6397260 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -27,12 +27,13 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; -import net.minecraft.block.Block; -import net.minecraft.block.BlockLiquid; -import net.minecraft.block.BlockStairs; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.EnumFacing; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.StairBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.WaterFluid; import java.util.HashSet; import java.util.Set; @@ -41,25 +42,25 @@ public class MovementParkour extends Movement { private static final BetterBlockPos[] EMPTY = new BetterBlockPos[]{}; - private final EnumFacing direction; + private final Direction direction; private final int dist; private final boolean ascend; - private MovementParkour(IBaritone baritone, BetterBlockPos src, int dist, EnumFacing dir, boolean ascend) { - super(baritone, src, src.offset(dir, dist).up(ascend ? 1 : 0), EMPTY, src.offset(dir, dist).down(ascend ? 0 : 1)); + private MovementParkour(IBaritone baritone, BetterBlockPos src, int dist, Direction dir, boolean ascend) { + super(baritone, src, src.relative(dir, dist).above(ascend ? 1 : 0), EMPTY, src.relative(dir, dist).below(ascend ? 0 : 1)); this.direction = dir; this.dist = dist; this.ascend = ascend; } - public static MovementParkour cost(CalculationContext context, BetterBlockPos src, EnumFacing direction) { + public static MovementParkour cost(CalculationContext context, BetterBlockPos src, Direction direction) { MutableMoveResult res = new MutableMoveResult(); cost(context, src.x, src.y, src.z, direction, res); int dist = Math.abs(res.x - src.x) + Math.abs(res.z - src.z); return new MovementParkour(context.getBaritone(), src, dist, direction, res.y > src.y); } - public static void cost(CalculationContext context, int x, int y, int z, EnumFacing dir, MutableMoveResult res) { + public static void cost(CalculationContext context, int x, int y, int z, Direction dir, MutableMoveResult res) { if (!context.allowParkour) { return; } @@ -67,18 +68,18 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac return; } - int xDiff = dir.getXOffset(); - int zDiff = dir.getZOffset(); + int xDiff = dir.getStepX(); + int zDiff = dir.getStepZ(); if (!MovementHelper.fullyPassable(context, x + xDiff, y, z + zDiff)) { // most common case at the top -- the adjacent block isn't air return; } - IBlockState adj = context.get(x + xDiff, y - 1, z + zDiff); + BlockState adj = context.get(x + xDiff, y - 1, z + zDiff); if (MovementHelper.canWalkOn(context.bsi, x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) // second most common case -- we could just traverse not parkour return; } - if (MovementHelper.avoidWalkingInto(adj.getBlock()) && adj.getBlock() != Blocks.WATER && adj.getBlock() != Blocks.FLOWING_WATER) { // magma sucks + if (MovementHelper.avoidWalkingInto(adj) && !(adj.getFluidState().getType() instanceof WaterFluid)) { // magma sucks return; } if (!MovementHelper.fullyPassable(context, x + xDiff, y + 1, z + zDiff)) { @@ -90,8 +91,8 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac if (!MovementHelper.fullyPassable(context, x, y + 2, z)) { return; } - IBlockState standingOn = context.get(x, y - 1, z); - if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof BlockStairs || MovementHelper.isBottomSlab(standingOn) || standingOn.getBlock() instanceof BlockLiquid) { + BlockState standingOn = context.get(x, y - 1, z); + if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof StairBlock || MovementHelper.isBottomSlab(standingOn) || standingOn.getFluidState().getType() != Fluids.EMPTY) { return; } int maxJump; @@ -110,7 +111,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac for (int i = 2; i <= maxJump; i++) { int destX = x + xDiff * i; int destZ = z + zDiff * i; - + // check head/feet if (!MovementHelper.fullyPassable(context, destX, y + 1, destZ)) { break; @@ -118,10 +119,10 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac if (!MovementHelper.fullyPassable(context, destX, y + 2, destZ)) { break; } - + // check for ascend landing position - IBlockState destInto = context.bsi.get0(destX, y, destZ); - if (!MovementHelper.fullyPassable(context.bsi.access, context.bsi.isPassableBlockPos.setPos(destX, y, destZ), destInto)) { + BlockState destInto = context.bsi.get0(destX, y, destZ); + if (!MovementHelper.fullyPassable(context.bsi.access, context.bsi.isPassableBlockPos.set(destX, y, destZ), destInto)) { if (i <= 3 && context.allowParkourAscend && context.canSprint && MovementHelper.canWalkOn(context.bsi, destX, y, destZ, destInto) && checkOvershootSafety(context.bsi, destX + xDiff, y + 1, destZ + zDiff)) { res.x = destX; res.y = y + 1; @@ -131,9 +132,9 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac } break; } - + // check for flat landing position - IBlockState landingOn = context.bsi.get0(destX, y - 1, destZ); + BlockState landingOn = context.bsi.get0(destX, y - 1, destZ); // farmland needs to be canWalkOn otherwise farm can never work at all, but we want to specifically disallow ending a jump on farmland haha if (landingOn.getBlock() != Blocks.FARMLAND && MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, landingOn)) { if (checkOvershootSafety(context.bsi, destX + xDiff, y, destZ + zDiff)) { @@ -161,7 +162,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac for (int i = verifiedMaxJump; i > 1; i--) { int destX = x + i * xDiff; int destZ = z + i * zDiff; - IBlockState toReplace = context.get(destX, y - 1, destZ); + BlockState toReplace = context.get(destX, y - 1, destZ); double placeCost = context.costOfPlacingAt(destX, y - 1, destZ, toReplace); if (placeCost >= COST_INF) { continue; @@ -173,9 +174,9 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac continue; } for (int j = 0; j < 5; j++) { - int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[j].getXOffset(); - int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[j].getYOffset(); - int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[j].getZOffset(); + int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[j].getStepX(); + int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[j].getStepY(); + int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[j].getStepZ(); if (againstX == destX - xDiff && againstZ == destZ - zDiff) { // we can't turn around that fast continue; } @@ -192,7 +193,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac private static boolean checkOvershootSafety(BlockStateInterface bsi, int x, int y, int z) { // we're going to walk into these two blocks after the landing of the parkour anyway, so make sure they aren't avoidWalkingInto - return !MovementHelper.avoidWalkingInto(bsi.get0(x, y, z).getBlock()) && !MovementHelper.avoidWalkingInto(bsi.get0(x, y + 1, z).getBlock()); + return !MovementHelper.avoidWalkingInto(bsi.get0(x, y, z)) && !MovementHelper.avoidWalkingInto(bsi.get0(x, y + 1, z)); } private static double costFromJumpDistance(int dist) { @@ -224,7 +225,7 @@ protected Set calculateValidPositions() { Set set = new HashSet<>(); for (int i = 0; i <= dist; i++) { for (int y = 0; y < 2; y++) { - set.add(src.offset(direction, i).up(y)); + set.add(src.relative(direction, i).above(y)); } } return set; @@ -260,19 +261,19 @@ public MovementState updateState(MovementState state) { // but i did it anyway return state.setStatus(MovementStatus.SUCCESS); } - if (ctx.player().posY - ctx.playerFeet().getY() < 0.094) { // lilypads + if (ctx.player().position().y - ctx.playerFeet().getY() < 0.094) { // lilypads state.setStatus(MovementStatus.SUCCESS); } } else if (!ctx.playerFeet().equals(src)) { - if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().posY - src.y > 0.0001) { - if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().onGround && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true, false) == PlaceResult.READY_TO_PLACE) { + if (ctx.playerFeet().equals(src.relative(direction)) || ctx.player().position().y - src.y > 0.0001) { + if (!MovementHelper.canWalkOn(ctx, dest.below()) && !ctx.player().isOnGround() && MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), true, false) == PlaceResult.READY_TO_PLACE) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory state.setInput(Input.CLICK_RIGHT, true); } // prevent jumping too late by checking for ascend if (dist == 3 && !ascend) { // this is a 2 block gap, dest = src + direction * 3 - double xDiff = (src.x + 0.5) - ctx.player().posX; - double zDiff = (src.z + 0.5) - ctx.player().posZ; + double xDiff = (src.x + 0.5) - ctx.player().position().x; + double zDiff = (src.z + 0.5) - ctx.player().position().z; double distFromStart = Math.max(Math.abs(xDiff), Math.abs(zDiff)); if (distFromStart < 0.7) { return state; @@ -280,12 +281,12 @@ public MovementState updateState(MovementState state) { } state.setInput(Input.JUMP, true); - } else if (!ctx.playerFeet().equals(dest.offset(direction, -1))) { + } else if (!ctx.playerFeet().equals(dest.relative(direction, -1))) { state.setInput(Input.SPRINT, false); - if (ctx.playerFeet().equals(src.offset(direction, -1))) { + if (ctx.playerFeet().equals(src.relative(direction, -1))) { MovementHelper.moveTowards(ctx, state, src); } else { - MovementHelper.moveTowards(ctx, state, src.offset(direction, -1)); + MovementHelper.moveTowards(ctx, state, src.relative(direction, -1)); } } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index b9d599334..6e6a41351 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -31,19 +31,18 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.*; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.SlabType; +import net.minecraft.world.phys.Vec3; -import java.util.Objects; import java.util.Set; public class MovementPillar extends Movement { public MovementPillar(IBaritone baritone, BetterBlockPos start, BetterBlockPos end) { - super(baritone, start, end, new BetterBlockPos[]{start.up(2)}, start); + super(baritone, start, end, new BetterBlockPos[]{start.above(2)}, start); } @Override @@ -57,29 +56,29 @@ protected Set calculateValidPositions() { } public static double cost(CalculationContext context, int x, int y, int z) { - IBlockState fromState = context.get(x, y, z); + BlockState fromState = context.get(x, y, z); Block from = fromState.getBlock(); boolean ladder = from == Blocks.LADDER || from == Blocks.VINE; - IBlockState fromDown = context.get(x, y - 1, z); + BlockState fromDown = context.get(x, y - 1, z); if (!ladder) { if (fromDown.getBlock() == Blocks.LADDER || fromDown.getBlock() == Blocks.VINE) { return COST_INF; // can't pillar from a ladder or vine onto something that isn't also climbable } - if (fromDown.getBlock() instanceof BlockSlab && !((BlockSlab) fromDown.getBlock()).isDouble() && fromDown.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.BOTTOM) { + if (fromDown.getBlock() instanceof SlabBlock && fromDown.getValue(SlabBlock.TYPE) == SlabType.BOTTOM) { return COST_INF; // can't pillar up from a bottom slab onto a non ladder } } if (from == Blocks.VINE && !hasAgainst(context, x, y, z)) { // TODO this vine can't be climbed, but we could place a pillar still since vines are replacable, no? perhaps the pillar jump would be impossible because of the slowdown actually. return COST_INF; } - IBlockState toBreak = context.get(x, y + 2, z); + BlockState toBreak = context.get(x, y + 2, z); Block toBreakBlock = toBreak.getBlock(); - if (toBreakBlock instanceof BlockFenceGate) { // see issue #172 + if (toBreakBlock instanceof FenceGateBlock) { // see issue #172 return COST_INF; } - Block srcUp = null; - if (MovementHelper.isWater(toBreakBlock) && MovementHelper.isWater(from)) { // TODO should this also be allowed if toBreakBlock is air? - srcUp = context.get(x, y + 1, z).getBlock(); + BlockState srcUp = null; + if (MovementHelper.isWater(toBreak) && MovementHelper.isWater(fromState)) { // TODO should this also be allowed if toBreakBlock is air? + srcUp = context.get(x, y + 1, z); if (MovementHelper.isWater(srcUp)) { return LADDER_UP_ONE_COST; // allow ascending pillars of water, but only if we're already in one } @@ -91,11 +90,11 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (placeCost >= COST_INF) { return COST_INF; } - if (fromDown.getBlock() == Blocks.AIR) { + if (fromDown.getBlock() instanceof AirBlock) { placeCost += 0.1; // slightly (1/200th of a second) penalize pillaring on what's currently air } } - if (from instanceof BlockLiquid || (fromDown.getBlock() instanceof BlockLiquid && context.assumeWalkOnWater)) { + if ((MovementHelper.isLiquid(fromState) && !MovementHelper.canPlaceAgainst(context.bsi, x, y - 1, z, fromDown)) || (MovementHelper.isLiquid(fromDown) && context.assumeWalkOnWater)) { // otherwise, if we're standing in water, we cannot pillar // if we're standing on water and assumeWalkOnWater is true, we cannot pillar // if we're standing on water and assumeWalkOnWater is false, we must have ascended to here, or sneak backplaced, so it is possible to pillar again @@ -109,20 +108,20 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (toBreakBlock == Blocks.LADDER || toBreakBlock == Blocks.VINE) { hardness = 0; // we won't actually need to break the ladder / vine because we're going to use it } else { - IBlockState check = context.get(x, y + 3, z); // the block on top of the one we're going to break, could it fall on us? - if (check.getBlock() instanceof BlockFalling) { + BlockState check = context.get(x, y + 3, z); // the block on top of the one we're going to break, could it fall on us? + if (check.getBlock() instanceof FallingBlock) { // see MovementAscend's identical check for breaking a falling block above our head if (srcUp == null) { - srcUp = context.get(x, y + 1, z).getBlock(); + srcUp = context.get(x, y + 1, z); } - if (!(toBreakBlock instanceof BlockFalling) || !(srcUp instanceof BlockFalling)) { + if (!(toBreakBlock instanceof FallingBlock) || !(srcUp.getBlock() instanceof FallingBlock)) { return COST_INF; } } // this is commented because it may have had a purpose, but it's very unclear what it was. it's from the minebot era. //if (!MovementHelper.canWalkOn(chkPos, check) || MovementHelper.canWalkThrough(chkPos, check)) {//if the block above where we want to break is not a full block, don't do it // TODO why does canWalkThrough mean this action is COST_INF? - // BlockFalling makes sense, and !canWalkOn deals with weird cases like if it were lava + // FallingBlock makes sense, and !canWalkOn deals with weird cases like if it were lava // but I don't understand why canWalkThrough makes it impossible // return COST_INF; //} @@ -136,23 +135,23 @@ public static double cost(CalculationContext context, int x, int y, int z) { } public static boolean hasAgainst(CalculationContext context, int x, int y, int z) { - return context.get(x + 1, y, z).isBlockNormalCube() || - context.get(x - 1, y, z).isBlockNormalCube() || - context.get(x, y, z + 1).isBlockNormalCube() || - context.get(x, y, z - 1).isBlockNormalCube(); + return MovementHelper.isBlockNormalCube(context.get(x + 1, y, z)) || + MovementHelper.isBlockNormalCube(context.get(x - 1, y, z)) || + MovementHelper.isBlockNormalCube(context.get(x, y, z + 1)) || + MovementHelper.isBlockNormalCube(context.get(x, y, z - 1)); } public static BlockPos getAgainst(CalculationContext context, BetterBlockPos vine) { - if (context.get(vine.north()).isBlockNormalCube()) { + if (MovementHelper.isBlockNormalCube(context.get(vine.north()))) { return vine.north(); } - if (context.get(vine.south()).isBlockNormalCube()) { + if (MovementHelper.isBlockNormalCube(context.get(vine.south()))) { return vine.south(); } - if (context.get(vine.east()).isBlockNormalCube()) { + if (MovementHelper.isBlockNormalCube(context.get(vine.east()))) { return vine.east(); } - if (context.get(vine.west()).isBlockNormalCube()) { + if (MovementHelper.isBlockNormalCube(context.get(vine.west()))) { return vine.west(); } return null; @@ -169,12 +168,12 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.UNREACHABLE); } - IBlockState fromDown = BlockStateInterface.get(ctx, src); - if (MovementHelper.isWater(fromDown.getBlock()) && MovementHelper.isWater(ctx, dest)) { + BlockState fromDown = BlockStateInterface.get(ctx, src); + if (MovementHelper.isWater(fromDown) && MovementHelper.isWater(ctx, dest)) { // stay centered while swimming up a water column state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()), false)); - Vec3d destCenter = VecUtils.getBlockPosCenter(dest); - if (Math.abs(ctx.player().posX - destCenter.x) > 0.2 || Math.abs(ctx.player().posZ - destCenter.z) > 0.2) { + Vec3 destCenter = VecUtils.getBlockPosCenter(dest); + if (Math.abs(ctx.player().position().x - destCenter.x) > 0.2 || Math.abs(ctx.player().position().z - destCenter.z) > 0.2) { state.setInput(Input.MOVE_FORWARD, true); } if (ctx.playerFeet().equals(dest)) { @@ -186,23 +185,23 @@ public MovementState updateState(MovementState state) { boolean vine = fromDown.getBlock() == Blocks.VINE; Rotation rotation = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(positionToPlace), - new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch)); + new Rotation(ctx.player().getYRot(), ctx.player().getXRot())); if (!ladder) { - state.setTarget(new MovementState.MovementTarget(new Rotation(ctx.player().rotationYaw, rotation.getPitch()), true)); + state.setTarget(new MovementState.MovementTarget(new Rotation(ctx.player().getYRot(), rotation.getPitch()), true)); } boolean blockIsThere = MovementHelper.canWalkOn(ctx, src) || ladder; if (ladder) { - BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.offset(fromDown.getValue(BlockLadder.FACING).getOpposite()); + BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.relative(fromDown.getValue(LadderBlock.FACING).getOpposite()); if (against == null) { logDirect("Unable to climb vines. Consider disabling allowVines."); return state.setStatus(MovementStatus.UNREACHABLE); } - if (ctx.playerFeet().equals(against.up()) || ctx.playerFeet().equals(dest)) { + if (ctx.playerFeet().equals(against.above()) || ctx.playerFeet().equals(dest)) { return state.setStatus(MovementStatus.SUCCESS); } - if (MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.down()))) { + if (MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.below()))) { state.setInput(Input.JUMP, true); } /* @@ -220,13 +219,13 @@ public MovementState updateState(MovementState state) { } - state.setInput(Input.SNEAK, ctx.player().posY > dest.getY() || ctx.player().posY < src.getY() + 0.2D); // delay placement by 1 tick for ncp compatibility + state.setInput(Input.SNEAK, ctx.player().position().y > dest.getY() || ctx.player().position().y < src.getY() + 0.2D); // delay placement by 1 tick for ncp compatibility // since (lower down) we only right click once player.isSneaking, and that happens the tick after we request to sneak - double diffX = ctx.player().posX - (dest.getX() + 0.5); - double diffZ = ctx.player().posZ - (dest.getZ() + 0.5); + double diffX = ctx.player().position().x - (dest.getX() + 0.5); + double diffZ = ctx.player().position().z - (dest.getZ() + 0.5); double dist = Math.sqrt(diffX * diffX + diffZ * diffZ); - double flatMotion = Math.sqrt(ctx.player().motionX * ctx.player().motionX + ctx.player().motionZ * ctx.player().motionZ); + double flatMotion = Math.sqrt(ctx.player().getDeltaMovement().x * ctx.player().getDeltaMovement().x + ctx.player().getDeltaMovement().z * ctx.player().getDeltaMovement().z); if (dist > 0.17) {//why 0.17? because it seemed like a good number, that's why //[explanation added after baritone port lol] also because it needs to be less than 0.2 because of the 0.3 sneak limit //and 0.17 is reasonably less than 0.2 @@ -238,22 +237,22 @@ public MovementState updateState(MovementState state) { state.setTarget(new MovementState.MovementTarget(rotation, true)); } else if (flatMotion < 0.05) { // If our Y coordinate is above our goal, stop jumping - state.setInput(Input.JUMP, ctx.player().posY < dest.getY()); + state.setInput(Input.JUMP, ctx.player().position().y < dest.getY()); } if (!blockIsThere) { - IBlockState frState = BlockStateInterface.get(ctx, src); + BlockState frState = BlockStateInterface.get(ctx, src); Block fr = frState.getBlock(); // TODO: Evaluate usage of getMaterial().isReplaceable() - if (!(fr instanceof BlockAir || frState.getMaterial().isReplaceable())) { + if (!(fr instanceof AirBlock || frState.getMaterial().isReplaceable())) { RotationUtils.reachable(ctx.player(), src, ctx.playerController().getBlockReachDistance()) .map(rot -> new MovementState.MovementTarget(rot, true)) .ifPresent(state::setTarget); state.setInput(Input.JUMP, false); // breaking is like 5x slower when you're jumping state.setInput(Input.CLICK_LEFT, true); blockIsThere = false; - } else if (ctx.player().isSneaking() && (Objects.equals(src.down(), ctx.objectMouseOver().getBlockPos()) || Objects.equals(src, ctx.objectMouseOver().getBlockPos())) && ctx.player().posY > dest.getY() + 0.1) { + } else if (ctx.player().isCrouching() && (ctx.isLookingAt(src.below()) || ctx.isLookingAt(src)) && ctx.player().position().y > dest.getY() + 0.1) { state.setInput(Input.CLICK_RIGHT, true); } } @@ -269,13 +268,13 @@ public MovementState updateState(MovementState state) { @Override protected boolean prepared(MovementState state) { - if (ctx.playerFeet().equals(src) || ctx.playerFeet().equals(src.down())) { - Block block = BlockStateInterface.getBlock(ctx, src.down()); + if (ctx.playerFeet().equals(src) || ctx.playerFeet().equals(src.below())) { + Block block = BlockStateInterface.getBlock(ctx, src.below()); if (block == Blocks.LADDER || block == Blocks.VINE) { state.setInput(Input.SNEAK, true); } } - if (MovementHelper.isWater(ctx, dest.up())) { + if (MovementHelper.isWater(ctx, dest.above())) { return true; } return super.prepared(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 1ecf0f92c..d64a81502 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -31,11 +31,12 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; -import net.minecraft.block.*; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.SlabType; +import net.minecraft.world.level.material.WaterFluid; +import net.minecraft.world.phys.Vec3; import java.util.Optional; import java.util.Set; @@ -48,7 +49,7 @@ public class MovementTraverse extends Movement { private boolean wasTheBridgeBlockAlwaysThere = true; public MovementTraverse(IBaritone baritone, BetterBlockPos from, BetterBlockPos to) { - super(baritone, from, to, new BetterBlockPos[]{to.up(), to}, to.down()); + super(baritone, from, to, new BetterBlockPos[]{to.above(), to}, to.below()); } @Override @@ -68,14 +69,15 @@ protected Set calculateValidPositions() { } public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { - IBlockState pb0 = context.get(destX, y + 1, destZ); - IBlockState pb1 = context.get(destX, y, destZ); - IBlockState destOn = context.get(destX, y - 1, destZ); - Block srcDown = context.getBlock(x, y - 1, z); + BlockState pb0 = context.get(destX, y + 1, destZ); + BlockState pb1 = context.get(destX, y, destZ); + BlockState destOn = context.get(destX, y - 1, destZ); + BlockState down = context.get(x, y - 1, z); + Block srcDown = down.getBlock(); if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; boolean water = false; - if (MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock())) { + if (MovementHelper.isWater(pb0) || MovementHelper.isWater(pb1)) { WC = context.waterWalkSpeed; water = true; } else { @@ -112,8 +114,8 @@ public static double cost(CalculationContext context, int x, int y, int z, int d return COST_INF; } if (MovementHelper.isReplaceable(destX, y - 1, destZ, destOn, context.bsi)) { - boolean throughWater = MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock()); - if (MovementHelper.isWater(destOn.getBlock()) && throughWater) { + boolean throughWater = MovementHelper.isWater(pb0) || MovementHelper.isWater(pb1); + if (MovementHelper.isWater(destOn) && throughWater) { // this happens when assume walk on water is true and this is a traverse in water, which isn't allowed return COST_INF; } @@ -128,9 +130,9 @@ public static double cost(CalculationContext context, int x, int y, int z, int d double hardness2 = MovementHelper.getMiningDurationTicks(context, destX, y + 1, destZ, pb0, true); // only include falling on the upper block to break double WC = throughWater ? context.waterWalkSpeed : WALK_ONE_BLOCK_COST; for (int i = 0; i < 5; i++) { - int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getXOffset(); - int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getYOffset(); - int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getZOffset(); + int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepX(); + int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepY(); + int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getStepZ(); if (againstX == x && againstZ == z) { // this would be a backplace continue; } @@ -139,10 +141,10 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } // now that we've checked all possible directions to side place, we actually need to backplace - if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof BlockSlab && !((BlockSlab) srcDown).isDouble())) { + if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof SlabBlock && down.getValue(SlabBlock.TYPE) != SlabType.DOUBLE)) { return COST_INF; // can't sneak and backplace against soul sand or half slabs (regardless of whether it's top half or bottom half) =/ } - if (srcDown == Blocks.FLOWING_WATER || srcDown == Blocks.WATER) { + if (down.getFluidState().getType() instanceof WaterFluid) { return COST_INF; // this is obviously impossible } WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol @@ -155,8 +157,8 @@ public static double cost(CalculationContext context, int x, int y, int z, int d @Override public MovementState updateState(MovementState state) { super.updateState(state); - IBlockState pb0 = BlockStateInterface.get(ctx, positionsToBreak[0]); - IBlockState pb1 = BlockStateInterface.get(ctx, positionsToBreak[1]); + BlockState pb0 = BlockStateInterface.get(ctx, positionsToBreak[0]); + BlockState pb1 = BlockStateInterface.get(ctx, positionsToBreak[1]); if (state.getStatus() != MovementStatus.RUNNING) { // if the setting is enabled if (!Baritone.settings().walkWhileBreaking.value) { @@ -167,14 +169,14 @@ public MovementState updateState(MovementState state) { return state; } // and if it's fine to walk into the blocks in front - if (MovementHelper.avoidWalkingInto(pb0.getBlock())) { + if (MovementHelper.avoidWalkingInto(pb0)) { return state; } - if (MovementHelper.avoidWalkingInto(pb1.getBlock())) { + if (MovementHelper.avoidWalkingInto(pb1)) { return state; } // and we aren't already pressed up against the block - double dist = Math.max(Math.abs(ctx.player().posX - (dest.getX() + 0.5D)), Math.abs(ctx.player().posZ - (dest.getZ() + 0.5D))); + double dist = Math.max(Math.abs(ctx.player().position().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().position().z - (dest.getZ() + 0.5D))); if (dist < 0.83) { return state; } @@ -187,7 +189,7 @@ public MovementState updateState(MovementState state) { // it's safe to do this since the two blocks we break (in a traverse) are right on top of each other and so will have the same yaw float yawToDest = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(ctx.world(), dest), ctx.playerRotations()).getYaw(); float pitchToBreak = state.getTarget().getRotation().get().getPitch(); - if ((pb0.isFullCube() || pb0.getBlock() instanceof BlockAir && (pb1.isFullCube() || pb1.getBlock() instanceof BlockAir))) { + if ((MovementHelper.isBlockNormalCube(pb0) || pb0.getBlock() instanceof AirBlock && (MovementHelper.isBlockNormalCube(pb1) || pb1.getBlock() instanceof AirBlock))) { // in the meantime, before we're right up against the block, we can break efficiently at this angle pitchToBreak = 26; } @@ -200,12 +202,11 @@ public MovementState updateState(MovementState state) { //sneak may have been set to true in the PREPPING state while mining an adjacent block state.setInput(Input.SNEAK, false); - Block fd = BlockStateInterface.get(ctx, src.down()).getBlock(); + Block fd = BlockStateInterface.get(ctx, src.below()).getBlock(); boolean ladder = fd == Blocks.LADDER || fd == Blocks.VINE; - if (pb0.getBlock() instanceof BlockDoor || pb1.getBlock() instanceof BlockDoor) { - - boolean notPassable = pb0.getBlock() instanceof BlockDoor && !MovementHelper.isDoorPassable(ctx, src, dest) || pb1.getBlock() instanceof BlockDoor && !MovementHelper.isDoorPassable(ctx, dest, src); + if (pb0.getBlock() instanceof DoorBlock || pb1.getBlock() instanceof DoorBlock) { + boolean notPassable = pb0.getBlock() instanceof DoorBlock && !MovementHelper.isDoorPassable(ctx, src, dest) || pb1.getBlock() instanceof DoorBlock && !MovementHelper.isDoorPassable(ctx, dest, src); boolean canOpen = !(Blocks.IRON_DOOR.equals(pb0.getBlock()) || Blocks.IRON_DOOR.equals(pb1.getBlock())); if (notPassable && canOpen) { @@ -214,8 +215,8 @@ public MovementState updateState(MovementState state) { } } - if (pb0.getBlock() instanceof BlockFenceGate || pb1.getBlock() instanceof BlockFenceGate) { - BlockPos blocked = !MovementHelper.isGatePassable(ctx, positionsToBreak[0], src.up()) ? positionsToBreak[0] + if (pb0.getBlock() instanceof FenceGateBlock || pb1.getBlock() instanceof FenceGateBlock) { + BlockPos blocked = !MovementHelper.isGatePassable(ctx, positionsToBreak[0], src.above()) ? positionsToBreak[0] : !MovementHelper.isGatePassable(ctx, positionsToBreak[1], src) ? positionsToBreak[1] : null; if (blocked != null) { @@ -240,27 +241,27 @@ public MovementState updateState(MovementState state) { if (feet.equals(dest)) { return state.setStatus(MovementStatus.SUCCESS); } - if (Baritone.settings().overshootTraverse.value && (feet.equals(dest.add(getDirection())) || feet.equals(dest.add(getDirection()).add(getDirection())))) { + if (Baritone.settings().overshootTraverse.value && (feet.equals(dest.offset(getDirection())) || feet.equals(dest.offset(getDirection()).offset(getDirection())))) { return state.setStatus(MovementStatus.SUCCESS); } Block low = BlockStateInterface.get(ctx, src).getBlock(); - Block high = BlockStateInterface.get(ctx, src.up()).getBlock(); - if (ctx.player().posY > src.y + 0.1D && !ctx.player().onGround && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { + Block high = BlockStateInterface.get(ctx, src.above()).getBlock(); + if (ctx.player().position().y > src.y + 0.1D && !ctx.player().isOnGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { // hitting W could cause us to climb the ladder instead of going forward // wait until we're on the ground return state; } - BlockPos into = dest.subtract(src).add(dest); - Block intoBelow = BlockStateInterface.get(ctx, into).getBlock(); - Block intoAbove = BlockStateInterface.get(ctx, into.up()).getBlock(); + BlockPos into = dest.subtract(src).offset(dest); + BlockState intoBelow = BlockStateInterface.get(ctx, into); + BlockState intoAbove = BlockStateInterface.get(ctx, into.above()); if (wasTheBridgeBlockAlwaysThere && (!MovementHelper.isLiquid(ctx, feet) || Baritone.settings().sprintInWater.value) && (!MovementHelper.avoidWalkingInto(intoBelow) || MovementHelper.isWater(intoBelow)) && !MovementHelper.avoidWalkingInto(intoAbove)) { state.setInput(Input.SPRINT, true); } - IBlockState destDown = BlockStateInterface.get(ctx, dest.down()); + BlockState destDown = BlockStateInterface.get(ctx, dest.below()); BlockPos against = positionsToBreak[0]; if (feet.getY() != dest.getY() && ladder && (destDown.getBlock() == Blocks.VINE || destDown.getBlock() == Blocks.LADDER)) { - against = destDown.getBlock() == Blocks.VINE ? MovementPillar.getAgainst(new CalculationContext(baritone), dest.down()) : dest.offset(destDown.getValue(BlockLadder.FACING).getOpposite()); + against = destDown.getBlock() == Blocks.VINE ? MovementPillar.getAgainst(new CalculationContext(baritone), dest.below()) : dest.relative(destDown.getValue(LadderBlock.FACING).getOpposite()); if (against == null) { logDirect("Unable to climb vines. Consider disabling allowVines."); return state.setStatus(MovementStatus.UNREACHABLE); @@ -270,23 +271,23 @@ public MovementState updateState(MovementState state) { return state; } else { wasTheBridgeBlockAlwaysThere = false; - Block standingOn = BlockStateInterface.get(ctx, feet.down()).getBlock(); - if (standingOn.equals(Blocks.SOUL_SAND) || standingOn instanceof BlockSlab) { // see issue #118 - double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().posX), Math.abs(dest.getZ() + 0.5 - ctx.player().posZ)); + Block standingOn = BlockStateInterface.get(ctx, feet.below()).getBlock(); + if (standingOn.equals(Blocks.SOUL_SAND) || standingOn instanceof SlabBlock) { // see issue #118 + double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().position().x), Math.abs(dest.getZ() + 0.5 - ctx.player().position().z)); if (dist < 0.85) { // 0.5 + 0.3 + epsilon MovementHelper.moveTowards(ctx, state, dest); return state.setInput(Input.MOVE_FORWARD, false) .setInput(Input.MOVE_BACK, true); } } - double dist1 = Math.max(Math.abs(ctx.player().posX - (dest.getX() + 0.5D)), Math.abs(ctx.player().posZ - (dest.getZ() + 0.5D))); - PlaceResult p = MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), false, true); + double dist1 = Math.max(Math.abs(ctx.player().position().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().position().z - (dest.getZ() + 0.5D))); + PlaceResult p = MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), false, true); if ((p == PlaceResult.READY_TO_PLACE || dist1 < 0.6) && !Baritone.settings().assumeSafeWalk.value) { state.setInput(Input.SNEAK, true); } switch (p) { case READY_TO_PLACE: { - if (ctx.player().isSneaking() || Baritone.settings().assumeSafeWalk.value) { + if (ctx.player().isCrouching() || Baritone.settings().assumeSafeWalk.value) { state.setInput(Input.CLICK_RIGHT, true); } return state; @@ -315,11 +316,11 @@ public MovementState updateState(MovementState state) { double faceY = (dest.getY() + src.getY() - 1.0D) * 0.5D; double faceZ = (dest.getZ() + src.getZ() + 1.0D) * 0.5D; // faceX, faceY, faceZ is the middle of the face between from and to - BlockPos goalLook = src.down(); // this is the block we were just standing on, and the one we want to place against + BlockPos goalLook = src.below(); // this is the block we were just standing on, and the one we want to place against - Rotation backToFace = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()); + Rotation backToFace = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3(faceX, faceY, faceZ), ctx.playerRotations()); float pitch = backToFace.getPitch(); - double dist2 = Math.max(Math.abs(ctx.player().posX - faceX), Math.abs(ctx.player().posZ - faceZ)); + double dist2 = Math.max(Math.abs(ctx.player().position().x - faceX), Math.abs(ctx.player().position().z - faceZ)); if (dist2 < 0.29) { // see issue #208 float yaw = RotationUtils.calcRotationFromVec3d(VecUtils.getBlockPosCenter(dest), ctx.playerHead(), ctx.playerRotations()).getYaw(); state.setTarget(new MovementState.MovementTarget(new Rotation(yaw, pitch), true)); @@ -347,13 +348,13 @@ public boolean safeToCancel(MovementState state) { // if we're in the process of breaking blocks before walking forwards // or if this isn't a sneak place (the block is already there) // then it's safe to cancel this - return state.getStatus() != MovementStatus.RUNNING || MovementHelper.canWalkOn(ctx, dest.down()); + return state.getStatus() != MovementStatus.RUNNING || MovementHelper.canWalkOn(ctx, dest.below()); } @Override protected boolean prepared(MovementState state) { - if (ctx.playerFeet().equals(src) || ctx.playerFeet().equals(src.down())) { - Block block = BlockStateInterface.getBlock(ctx, src.down()); + if (ctx.playerFeet().equals(src) || ctx.playerFeet().equals(src.below())) { + Block block = BlockStateInterface.getBlock(ctx, src.below()); if (block == Blocks.LADDER || block == Blocks.VINE) { state.setInput(Input.SNEAK, true); } diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 7e4f76a3b..4e526441a 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -32,11 +32,10 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.movements.*; import baritone.utils.BlockStateInterface; -import net.minecraft.block.BlockLiquid; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; import net.minecraft.util.Tuple; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; +import net.minecraft.world.phys.Vec3; import java.util.*; @@ -85,6 +84,85 @@ public PathExecutor(PathingBehavior behavior, IPath path) { this.pathPosition = 0; } + private static boolean skipNow(IPlayerContext ctx, IMovement current) { + double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().position().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().position().x)); + if (offTarget > 0.1) { + return false; + } + // we are centered + BlockPos headBonk = current.getSrc().subtract(current.getDirection()).above(2); + if (MovementHelper.fullyPassable(ctx, headBonk)) { + return true; + } + // wait 0.3 + double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().position().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().position().z)); + return flatDist > 0.8; + } + + private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse current, MovementAscend next, IMovement nextnext) { + if (!Baritone.settings().sprintAscends.value) { + return false; + } + if (!current.getDirection().equals(next.getDirection().below())) { + return false; + } + if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, current.getDest().below())) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { + return false; + } + if (!next.toBreakCached.isEmpty()) { + return false; // it's breaking + } + for (int x = 0; x < 2; x++) { + for (int y = 0; y < 3; y++) { + BlockPos chk = current.getSrc().above(y); + if (x == 1) { + chk = chk.offset(current.getDirection()); + } + if (!MovementHelper.fullyPassable(ctx, chk)) { + return false; + } + } + } + if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().above(3)))) { + return false; + } + return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().above(2))); // codacy smh my head + } + + private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { + if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { + return true; + } + if (!MovementHelper.canWalkOn(ctx, current.getDest().offset(current.getDirection()))) { + return false; + } + if (next instanceof MovementTraverse && next.getDirection().equals(current.getDirection())) { + return true; + } + return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; + } + + private Tuple closestPathPos(IPath path) { + double best = -1; + BlockPos bestPos = null; + for (IMovement movement : path.movements()) { + for (BlockPos pos : ((Movement) movement).getValidPositions()) { + double dist = VecUtils.entityDistanceToCenter(ctx.player(), pos); + if (dist < best || best == -1) { + best = dist; + bestPos = pos; + } + } + } + return new Tuple<>(best, bestPos); + } + /** * Tick this executor * @@ -130,7 +208,7 @@ public boolean onTick() { Tuple status = closestPathPos(path); if (possiblyOffPath(status, MAX_DIST_FROM_PATH)) { ticksAway++; - System.out.println("FAR AWAY FROM PATH FOR " + ticksAway + " TICKS. Current distance: " + status.getFirst() + ". Threshold: " + MAX_DIST_FROM_PATH); + System.out.println("FAR AWAY FROM PATH FOR " + ticksAway + " TICKS. Current distance: " + status.getA() + ". Threshold: " + MAX_DIST_FROM_PATH); if (ticksAway > MAX_TICKS_AWAY) { logDebug("Too far away from path for too long, cancelling path"); cancel(); @@ -254,34 +332,19 @@ public boolean onTick() { return canCancel; // movement is in progress, but if it reports cancellable, PathingBehavior is good to cut onto the next path } - private Tuple closestPathPos(IPath path) { - double best = -1; - BlockPos bestPos = null; - for (IMovement movement : path.movements()) { - for (BlockPos pos : ((Movement) movement).getValidPositions()) { - double dist = VecUtils.entityDistanceToCenter(ctx.player(), pos); - if (dist < best || best == -1) { - best = dist; - bestPos = pos; - } - } - } - return new Tuple<>(best, bestPos); - } - private boolean shouldPause() { Optional current = behavior.getInProgress(); if (!current.isPresent()) { return false; } - if (!ctx.player().onGround) { + if (!ctx.player().isOnGround()) { return false; } - if (!MovementHelper.canWalkOn(ctx, ctx.playerFeet().down())) { + if (!MovementHelper.canWalkOn(ctx, ctx.playerFeet().below())) { // we're in some kind of sketchy situation, maybe parkouring return false; } - if (!MovementHelper.canWalkThrough(ctx, ctx.playerFeet()) || !MovementHelper.canWalkThrough(ctx, ctx.playerFeet().up())) { + if (!MovementHelper.canWalkThrough(ctx, ctx.playerFeet()) || !MovementHelper.canWalkThrough(ctx, ctx.playerFeet().above())) { // suffocating? return false; } @@ -303,7 +366,7 @@ private boolean shouldPause() { } private boolean possiblyOffPath(Tuple status, double leniency) { - double distanceFromPath = status.getFirst(); + double distanceFromPath = status.getA(); if (distanceFromPath > leniency) { // when we're midair in the middle of a fall, we're very far from both the beginning and the end, but we aren't actually off path if (path.movements().get(pathPosition) instanceof MovementFall) { @@ -323,12 +386,12 @@ private boolean possiblyOffPath(Tuple status, double leniency) * @return Whether or not it was possible to snap to the current player feet */ public boolean snipsnapifpossible() { - if (!ctx.player().onGround && !(ctx.world().getBlockState(ctx.playerFeet()).getBlock() instanceof BlockLiquid)) { + if (!ctx.player().isOnGround() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { // if we're falling in the air, and not in water, don't splice return false; } else { // we are either onGround or in liquid - if (ctx.player().motionY < -0.1) { + if (ctx.player().getDeltaMovement().y < -0.1) { // if we are strictly moving downwards (not stationary) // we could be falling through water, which could be unsafe to splice return false; // so don't @@ -387,7 +450,7 @@ private boolean shouldSprintNextTick() { if (pathPosition < path.length() - 2) { IMovement next = path.movements().get(pathPosition + 1); - if (next instanceof MovementAscend && current.getDirection().up().equals(next.getDirection().down())) { + if (next instanceof MovementAscend && current.getDirection().above().equals(next.getDirection().below())) { // a descend then an ascend in the same direction pathPosition++; onChangeInPathPosition(); @@ -409,12 +472,12 @@ private boolean shouldSprintNextTick() { } if (current instanceof MovementAscend && pathPosition != 0) { IMovement prev = path.movements().get(pathPosition - 1); - if (prev instanceof MovementDescend && prev.getDirection().up().equals(current.getDirection().down())) { - BlockPos center = current.getSrc().up(); + if (prev instanceof MovementDescend && prev.getDirection().above().equals(current.getDirection().below())) { + BlockPos center = current.getSrc().above(); // playerFeet adds 0.1251 to account for soul sand // farmland is 0.9375 // 0.07 is to account for farmland - if (ctx.player().posY >= center.getY() - 0.07) { + if (ctx.player().position().y >= center.getY() - 0.07) { behavior.baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, false); return true; } @@ -424,9 +487,9 @@ private boolean shouldSprintNextTick() { } } if (current instanceof MovementFall) { - Tuple data = overrideFall((MovementFall) current); + Tuple data = overrideFall((MovementFall) current); if (data != null) { - BetterBlockPos fallDest = new BetterBlockPos(data.getSecond()); + BetterBlockPos fallDest = new BetterBlockPos(data.getB()); if (!path.positions().contains(fallDest)) { throw new IllegalStateException(); } @@ -437,7 +500,7 @@ private boolean shouldSprintNextTick() { return true; } clearKeys(); - behavior.baritone.getLookBehavior().updateTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), data.getFirst(), ctx.playerRotations()), false); + behavior.baritone.getLookBehavior().updateTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), data.getA(), ctx.playerRotations()), false); behavior.baritone.getInputOverrideHandler().setInputForceState(Input.MOVE_FORWARD, true); return true; } @@ -445,7 +508,7 @@ private boolean shouldSprintNextTick() { return false; } - private Tuple overrideFall(MovementFall movement) { + private Tuple overrideFall(MovementFall movement) { Vec3i dir = movement.getDirection(); if (dir.getY() < -3) { return null; @@ -470,7 +533,7 @@ private Tuple overrideFall(MovementFall movement) { break outer; } } - if (!MovementHelper.canWalkOn(ctx, next.getDest().down())) { + if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { break; } } @@ -480,72 +543,8 @@ private Tuple overrideFall(MovementFall movement) { } double len = i - pathPosition - 0.4; return new Tuple<>( - new Vec3d(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), - movement.getDest().add(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); - } - - private static boolean skipNow(IPlayerContext ctx, IMovement current) { - double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().posZ)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().posX)); - if (offTarget > 0.1) { - return false; - } - // we are centered - BlockPos headBonk = current.getSrc().subtract(current.getDirection()).up(2); - if (MovementHelper.fullyPassable(ctx, headBonk)) { - return true; - } - // wait 0.3 - double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().posX)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().posZ)); - return flatDist > 0.8; - } - - private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse current, MovementAscend next, IMovement nextnext) { - if (!Baritone.settings().sprintAscends.value) { - return false; - } - if (!current.getDirection().equals(next.getDirection().down())) { - return false; - } - if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { - return false; - } - if (!MovementHelper.canWalkOn(ctx, current.getDest().down())) { - return false; - } - if (!MovementHelper.canWalkOn(ctx, next.getDest().down())) { - return false; - } - if (!next.toBreakCached.isEmpty()) { - return false; // it's breaking - } - for (int x = 0; x < 2; x++) { - for (int y = 0; y < 3; y++) { - BlockPos chk = current.getSrc().up(y); - if (x == 1) { - chk = chk.add(current.getDirection()); - } - if (!MovementHelper.fullyPassable(ctx, chk)) { - return false; - } - } - } - if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().up(3)).getBlock())) { - return false; - } - return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().up(2)).getBlock()); // codacy smh my head - } - - private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { - if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { - return true; - } - if (!MovementHelper.canWalkOn(ctx, current.getDest().add(current.getDirection()))) { - return false; - } - if (next instanceof MovementTraverse && next.getDirection().down().equals(current.getDirection())) { - return true; - } - return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; + new Vec3(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), + movement.getDest().offset(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); } private void onChangeInPathPosition() { diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java index 04b3ca78b..a6553666f 100644 --- a/src/main/java/baritone/process/BackfillProcess.java +++ b/src/main/java/baritone/process/BackfillProcess.java @@ -26,18 +26,17 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.path.PathExecutor; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.chunk.EmptyChunk; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.EmptyLevelChunk; import java.util.*; import java.util.stream.Collectors; public final class BackfillProcess extends BaritoneProcessHelper { - public HashMap blocksToReplace = new HashMap<>(); + public HashMap blocksToReplace = new HashMap<>(); public BackfillProcess(Baritone baritone) { super(baritone); @@ -58,7 +57,7 @@ public boolean isActive() { } amIBreakingABlockHMMMMMMM(); for (BlockPos pos : new ArrayList<>(blocksToReplace.keySet())) { - if (ctx.world().getChunk(pos) instanceof EmptyChunk) { + if (ctx.world().getChunk(pos) instanceof EmptyLevelChunk) { blocksToReplace.remove(pos); } } @@ -104,9 +103,9 @@ public List toFillIn() { .keySet() .stream() .filter(pos -> ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) - .filter(pos -> ctx.world().mayPlace(Blocks.DIRT, pos, false, EnumFacing.UP, null)) + .filter(pos -> baritone.getBuilderProcess().placementPlausible(pos, Blocks.DIRT.defaultBlockState())) .filter(pos -> !partOfCurrentMovement(pos)) - .sorted(Comparator.comparingDouble(ctx.player()::getDistanceSq).reversed()) + .sorted(Comparator.comparingDouble(ctx.playerFeet()::distSqr).reversed()) .collect(Collectors.toList()); } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 604dbb2bc..28b41fe29 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -26,9 +26,9 @@ import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; import baritone.api.schematic.FillSchematic; -import baritone.api.schematic.SubstituteSchematic; import baritone.api.schematic.ISchematic; import baritone.api.schematic.IStaticSchematic; +import baritone.api.schematic.SubstituteSchematic; import baritone.api.schematic.format.ISchematicFormat; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.RayTraceUtils; @@ -42,21 +42,29 @@ import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; import baritone.utils.schematic.MapArtSchematic; -import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.SchematicSystem; +import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.schematica.SchematicaHelper; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import net.minecraft.block.*; -import net.minecraft.block.properties.IProperty; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; import net.minecraft.util.Tuple; -import net.minecraft.util.math.*; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; import java.io.File; import java.io.FileInputStream; @@ -77,38 +85,19 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private boolean paused; private int layer; private int numRepeats; - private List approxPlaceable; + public static final Set> orientationProps = + ImmutableSet.of( + RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, + StairBlock.FACING, StairBlock.HALF, StairBlock.SHAPE, + PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, + TrapDoorBlock.OPEN, TrapDoorBlock.HALF + ); public BuilderProcess(Baritone baritone) { super(baritone); } - @Override - public void build(String name, ISchematic schematic, Vec3i origin) { - this.name = name; - this.schematic = schematic; - this.realSchematic = null; - if (!Baritone.settings().buildSubstitutes.value.isEmpty()) { - this.schematic = new SubstituteSchematic(this.schematic, Baritone.settings().buildSubstitutes.value); - } - int x = origin.getX(); - int y = origin.getY(); - int z = origin.getZ(); - if (Baritone.settings().schematicOrientationX.value) { - x += schematic.widthX(); - } - if (Baritone.settings().schematicOrientationY.value) { - y += schematic.heightY(); - } - if (Baritone.settings().schematicOrientationZ.value) { - z += schematic.lengthZ(); - } - this.origin = new Vec3i(x, y, z); - this.paused = false; - this.layer = Baritone.settings().startAtLayer.value; - this.numRepeats = 0; - this.observedCompleted = new LongOpenHashSet(); - } + private List approxPlaceable; public void resume() { paused = false; @@ -151,19 +140,65 @@ public boolean build(String name, File schematic, Vec3i origin) { return true; } + private static Vec3[] aabbSideMultipliers(Direction side) { + switch (side) { + case UP: + return new Vec3[]{new Vec3(0.5, 1, 0.5), new Vec3(0.1, 1, 0.5), new Vec3(0.9, 1, 0.5), new Vec3(0.5, 1, 0.1), new Vec3(0.5, 1, 0.9)}; + case DOWN: + return new Vec3[]{new Vec3(0.5, 0, 0.5), new Vec3(0.1, 0, 0.5), new Vec3(0.9, 0, 0.5), new Vec3(0.5, 0, 0.1), new Vec3(0.5, 0, 0.9)}; + case NORTH: + case SOUTH: + case EAST: + case WEST: + double x = side.getStepX() == 0 ? 0.5 : (1 + side.getStepX()) / 2D; + double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D; + return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)}; + default: // null + throw new IllegalStateException(); + } + } + + @Override + public void build(String name, ISchematic schematic, Vec3i origin) { + this.name = name; + this.schematic = schematic; + this.realSchematic = null; + if (!Baritone.settings().buildSubstitutes.value.isEmpty()) { + this.schematic = new SubstituteSchematic(this.schematic, Baritone.settings().buildSubstitutes.value); + } + int x = origin.getX(); + int y = origin.getY(); + int z = origin.getZ(); + if (Baritone.settings().schematicOrientationX.value) { + x += schematic.widthX(); + } + if (Baritone.settings().schematicOrientationY.value) { + y += schematic.heightY(); + } + if (Baritone.settings().schematicOrientationZ.value) { + z += schematic.lengthZ(); + } + this.origin = new Vec3i(x, y, z); + this.paused = false; + this.layer = Baritone.settings().startAtLayer.value; + this.numRepeats = 0; + this.observedCompleted = new LongOpenHashSet(); + this.incorrectPositions = null; + } + @Override public void buildOpenSchematic() { if (SchematicaHelper.isSchematicaPresent()) { Optional> schematic = SchematicaHelper.getOpenSchematic(); if (schematic.isPresent()) { - IStaticSchematic s = schematic.get().getFirst(); - BlockPos origin = schematic.get().getSecond(); + IStaticSchematic s = schematic.get().getA(); + BlockPos origin = schematic.get().getB(); ISchematic schem = Baritone.settings().mapArtMode.value ? new MapArtSchematic(s) : s; if (Baritone.settings().buildOnlySelection.value) { schem = new SelectionSchematic(schem, origin, baritone.getSelectionManager().getSelections()); } this.build( - schematic.get().getFirst().toString(), + schematic.get().getA().toString(), schem, origin ); @@ -175,33 +210,33 @@ public void buildOpenSchematic() { } } + @Override + public boolean isActive() { + return schematic != null; + } + public void clearArea(BlockPos corner1, BlockPos corner2) { BlockPos origin = new BlockPos(Math.min(corner1.getX(), corner2.getX()), Math.min(corner1.getY(), corner2.getY()), Math.min(corner1.getZ(), corner2.getZ())); int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; int heightY = Math.abs(corner1.getY() - corner2.getY()) + 1; int lengthZ = Math.abs(corner1.getZ() - corner2.getZ()) + 1; - build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.getDefaultState()), origin); + build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.defaultBlockState()), origin); } @Override - public List getApproxPlaceable() { + public List getApproxPlaceable() { return new ArrayList<>(approxPlaceable); } - @Override - public boolean isActive() { - return schematic != null; - } - - public IBlockState placeAt(int x, int y, int z, IBlockState current) { + public BlockState placeAt(int x, int y, int z, BlockState current) { if (!isActive()) { return null; } if (!schematic.inSchematic(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current)) { return null; } - IBlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current, this.approxPlaceable); - if (state.getBlock() == Blocks.AIR) { + BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current, this.approxPlaceable); + if (state.getBlock() instanceof AirBlock) { return null; } return state; @@ -219,12 +254,12 @@ private Optional> toBreakNearPlayer(BuilderCalcu if (dy == -1 && x == pathStart.x && z == pathStart.z) { continue; // dont mine what we're supported by, but not directly standing on } - IBlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); + BlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); if (desired == null) { continue; // irrelevant } - IBlockState curr = bcc.bsi.get0(x, y, z); - if (curr.getBlock() != Blocks.AIR && !(curr.getBlock() instanceof BlockLiquid) && !valid(curr, desired, false)) { + BlockState curr = bcc.bsi.get0(x, y, z); + if (!(curr.getBlock() instanceof AirBlock) && !(curr.getBlock() == Blocks.WATER || curr.getBlock() == Blocks.LAVA) && !valid(curr, desired, false)) { BetterBlockPos pos = new BetterBlockPos(x, y, z); Optional rot = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); if (rot.isPresent()) { @@ -237,22 +272,7 @@ private Optional> toBreakNearPlayer(BuilderCalcu return Optional.empty(); } - public static class Placement { - - private final int hotbarSelection; - private final BlockPos placeAgainst; - private final EnumFacing side; - private final Rotation rot; - - public Placement(int hotbarSelection, BlockPos placeAgainst, EnumFacing side, Rotation rot) { - this.hotbarSelection = hotbarSelection; - this.placeAgainst = placeAgainst; - this.side = side; - this.rot = rot; - } - } - - private Optional searchForPlaceables(BuilderCalculationContext bcc, List desirableOnHotbar) { + private Optional searchForPlacables(BuilderCalculationContext bcc, List desirableOnHotbar) { BetterBlockPos center = ctx.playerFeet(); for (int dx = -5; dx <= 5; dx++) { for (int dy = -5; dy <= 1; dy++) { @@ -260,13 +280,13 @@ private Optional searchForPlaceables(BuilderCalculationContext bcc, L int x = center.x + dx; int y = center.y + dy; int z = center.z + dz; - IBlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); + BlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); if (desired == null) { continue; // irrelevant } - IBlockState curr = bcc.bsi.get0(x, y, z); + BlockState curr = bcc.bsi.get0(x, y, z); if (MovementHelper.isReplaceable(x, y, z, curr, bcc.bsi) && !valid(curr, desired, false)) { - if (dy == 1 && bcc.bsi.get0(x, y + 1, z).getBlock() == Blocks.AIR) { + if (dy == 1 && bcc.bsi.get0(x, y + 1, z).getBlock() instanceof AirBlock) { continue; } desirableOnHotbar.add(desired); @@ -281,24 +301,32 @@ private Optional searchForPlaceables(BuilderCalculationContext bcc, L return Optional.empty(); } - private Optional possibleToPlace(IBlockState toPlace, int x, int y, int z, BlockStateInterface bsi) { - for (EnumFacing against : EnumFacing.values()) { - BetterBlockPos placeAgainstPos = new BetterBlockPos(x, y, z).offset(against); - IBlockState placeAgainstState = bsi.get0(placeAgainstPos); + public boolean placementPlausible(BlockPos pos, BlockState state) { + VoxelShape voxelshape = state.getCollisionShape(ctx.world(), pos); + return voxelshape.isEmpty() || ctx.world().isUnobstructed(null, voxelshape.move(pos.getX(), pos.getY(), pos.getZ())); + } + + private Optional possibleToPlace(BlockState toPlace, int x, int y, int z, BlockStateInterface bsi) { + for (Direction against : Direction.values()) { + BetterBlockPos placeAgainstPos = new BetterBlockPos(x, y, z).relative(against); + BlockState placeAgainstState = bsi.get0(placeAgainstPos); if (MovementHelper.isReplaceable(placeAgainstPos.x, placeAgainstPos.y, placeAgainstPos.z, placeAgainstState, bsi)) { continue; } - if (!ctx.world().mayPlace(toPlace.getBlock(), new BetterBlockPos(x, y, z), false, against, null)) { + if (!toPlace.canSurvive(ctx.world(), new BetterBlockPos(x, y, z))) { + continue; + } + if (!placementPlausible(new BetterBlockPos(x, y, z), toPlace)) { continue; } - AxisAlignedBB aabb = placeAgainstState.getBoundingBox(ctx.world(), placeAgainstPos); - for (Vec3d placementMultiplier : aabbSideMultipliers(against)) { + AABB aabb = placeAgainstState.getShape(ctx.world(), placeAgainstPos).bounds(); + for (Vec3 placementMultiplier : aabbSideMultipliers(against)) { double placeX = placeAgainstPos.x + aabb.minX * placementMultiplier.x + aabb.maxX * (1 - placementMultiplier.x); double placeY = placeAgainstPos.y + aabb.minY * placementMultiplier.y + aabb.maxY * (1 - placementMultiplier.y); double placeZ = placeAgainstPos.z + aabb.minZ * placementMultiplier.z + aabb.maxZ * (1 - placementMultiplier.z); - Rotation rot = RotationUtils.calcRotationFromVec3d(RayTraceUtils.inferSneakingEyePosition(ctx.player()), new Vec3d(placeX, placeY, placeZ), ctx.playerRotations()); - RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot, ctx.playerController().getBlockReachDistance(), true); - if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK && result.getBlockPos().equals(placeAgainstPos) && result.sideHit == against.getOpposite()) { + Rotation rot = RotationUtils.calcRotationFromVec3d(RayTraceUtils.inferSneakingEyePosition(ctx.player()), new Vec3(placeX, placeY, placeZ), ctx.playerRotations()); + HitResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot, ctx.playerController().getBlockReachDistance(), true); + if (result != null && result.getType() == HitResult.Type.BLOCK && ((BlockHitResult) result).getBlockPos().equals(placeAgainstPos) && ((BlockHitResult) result).getDirection() == against.getOpposite()) { OptionalInt hotbar = hasAnyItemThatWouldPlace(toPlace, result, rot); if (hotbar.isPresent()) { return Optional.of(new Placement(hotbar.getAsInt(), placeAgainstPos, against.getOpposite(), rot)); @@ -309,29 +337,34 @@ private Optional possibleToPlace(IBlockState toPlace, int x, int y, i return Optional.empty(); } - private OptionalInt hasAnyItemThatWouldPlace(IBlockState desired, RayTraceResult result, Rotation rot) { + private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { for (int i = 0; i < 9; i++) { - ItemStack stack = ctx.player().inventory.mainInventory.get(i); - if (stack.isEmpty() || !(stack.getItem() instanceof ItemBlock)) { + ItemStack stack = ctx.player().getInventory().items.get(i); + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { continue; } - float originalYaw = ctx.player().rotationYaw; - float originalPitch = ctx.player().rotationPitch; + float originalYaw = ctx.player().getYRot(); + float originalPitch = ctx.player().getXRot(); // the state depends on the facing of the player sometimes - ctx.player().rotationYaw = rot.getYaw(); - ctx.player().rotationPitch = rot.getPitch(); - IBlockState wouldBePlaced = ((ItemBlock) stack.getItem()).getBlock().getStateForPlacement( + ctx.player().setYRot(rot.getYaw()); + ctx.player().setXRot(rot.getPitch()); + BlockPlaceContext meme = new BlockPlaceContext(new UseOnContext( ctx.world(), - result.getBlockPos().offset(result.sideHit), - result.sideHit, - (float) result.hitVec.x - result.getBlockPos().getX(), // as in PlayerControllerMP - (float) result.hitVec.y - result.getBlockPos().getY(), - (float) result.hitVec.z - result.getBlockPos().getZ(), - stack.getItem().getMetadata(stack.getMetadata()), - ctx.player() - ); - ctx.player().rotationYaw = originalYaw; - ctx.player().rotationPitch = originalPitch; + ctx.player(), + InteractionHand.MAIN_HAND, + stack, + (BlockHitResult) result + ) { + }); // that {} gives us access to a protected constructor lmfao + BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); + ctx.player().setYRot(originalYaw); + ctx.player().setXRot(originalPitch); + if (wouldBePlaced == null) { + continue; + } + if (!meme.canPlace()) { + continue; + } if (valid(wouldBePlaced, desired, true)) { return OptionalInt.of(i); } @@ -339,24 +372,6 @@ private OptionalInt hasAnyItemThatWouldPlace(IBlockState desired, RayTraceResult return OptionalInt.empty(); } - private static Vec3d[] aabbSideMultipliers(EnumFacing side) { - switch (side) { - case UP: - return new Vec3d[]{new Vec3d(0.5, 1, 0.5), new Vec3d(0.1, 1, 0.5), new Vec3d(0.9, 1, 0.5), new Vec3d(0.5, 1, 0.1), new Vec3d(0.5, 1, 0.9)}; - case DOWN: - return new Vec3d[]{new Vec3d(0.5, 0, 0.5), new Vec3d(0.1, 0, 0.5), new Vec3d(0.9, 0, 0.5), new Vec3d(0.5, 0, 0.1), new Vec3d(0.5, 0, 0.9)}; - case NORTH: - case SOUTH: - case EAST: - case WEST: - double x = side.getXOffset() == 0 ? 0.5 : (1 + side.getXOffset()) / 2D; - double z = side.getZOffset() == 0 ? 0.5 : (1 + side.getZOffset()) / 2D; - return new Vec3d[]{new Vec3d(x, 0.25, z), new Vec3d(x, 0.75, z)}; - default: // null - throw new IllegalStateException(); - } - } - @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return onTick(calcFailed, isSafeToCancel, 0); @@ -394,12 +409,12 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel, int rec } schematic = new ISchematic() { @Override - public IBlockState desiredState(int x, int y, int z, IBlockState current, List approxPlaceable) { + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { return realSchematic.desiredState(x, y, z, current, BuilderProcess.this.approxPlaceable); } @Override - public boolean inSchematic(int x, int y, int z, IBlockState currentState) { + public boolean inSchematic(int x, int y, int z, BlockState currentState) { return ISchematic.super.inSchematic(x, y, z, currentState) && y >= minYInclusive && y <= maxYInclusive && realSchematic.inSchematic(x, y, z, currentState); } @@ -444,7 +459,7 @@ public int lengthZ() { } // build repeat time layer = 0; - origin = new BlockPos(origin).add(repeat); + origin = new BlockPos(origin).offset(repeat); if (!Baritone.settings().buildRepeatSneaky.value) { schematic.reset(); } @@ -456,14 +471,14 @@ public int lengthZ() { } Optional> toBreak = toBreakNearPlayer(bcc); - if (toBreak.isPresent() && isSafeToCancel && ctx.player().onGround) { + if (toBreak.isPresent() && isSafeToCancel && ctx.player().isOnGround()) { // we'd like to pause to break this block // only change look direction if it's safe (don't want to fuck up an in progress parkour for example - Rotation rot = toBreak.get().getSecond(); - BetterBlockPos pos = toBreak.get().getFirst(); + Rotation rot = toBreak.get().getB(); + BetterBlockPos pos = toBreak.get().getA(); baritone.getLookBehavior().updateTarget(rot, true); MovementHelper.switchToBestToolFor(ctx, bcc.get(pos)); - if (ctx.player().isSneaking()) { + if (ctx.player().isCrouching()) { // really horrible bug where a block is visible for breaking while sneaking but not otherwise // so you can't see it, it goes to place something else, sneaks, then the next tick it tries to break // and is unable since it's unsneaked in the intermediary tick @@ -474,14 +489,14 @@ public int lengthZ() { } return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - List desirableOnHotbar = new ArrayList<>(); - Optional toPlace = searchForPlaceables(bcc, desirableOnHotbar); - if (toPlace.isPresent() && isSafeToCancel && ctx.player().onGround && ticks <= 0) { + List desirableOnHotbar = new ArrayList<>(); + Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); + if (toPlace.isPresent() && isSafeToCancel && ctx.player().isOnGround() && ticks <= 0) { Rotation rot = toPlace.get().rot; baritone.getLookBehavior().updateTarget(rot, true); - ctx.player().inventory.currentItem = toPlace.get().hotbarSelection; + ctx.player().getInventory().selected = toPlace.get().hotbarSelection; baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); - if ((ctx.isLookingAt(toPlace.get().placeAgainst) && ctx.objectMouseOver().sideHit.equals(toPlace.get().side)) || ctx.playerRotations().isReallyCloseTo(rot)) { + if ((ctx.isLookingAt(toPlace.get().placeAgainst) && ((BlockHitResult) ctx.objectMouseOver()).getDirection().equals(toPlace.get().side)) || ctx.playerRotations().isReallyCloseTo(rot)) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); } return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); @@ -489,9 +504,9 @@ public int lengthZ() { if (Baritone.settings().allowInventory.value) { ArrayList usefulSlots = new ArrayList<>(); - List noValidHotbarOption = new ArrayList<>(); + List noValidHotbarOption = new ArrayList<>(); outer: - for (IBlockState desired : desirableOnHotbar) { + for (BlockState desired : desirableOnHotbar) { for (int i = 0; i < 9; i++) { if (valid(approxPlaceable.get(i), desired, true)) { usefulSlots.add(i); @@ -503,7 +518,7 @@ public int lengthZ() { outer: for (int i = 9; i < 36; i++) { - for (IBlockState desired : noValidHotbarOption) { + for (BlockState desired : noValidHotbarOption) { if (valid(approxPlaceable.get(i), desired, true)) { baritone.getInventoryBehavior().attemptToPutOnHotbar(i, usefulSlots::contains); break outer; @@ -546,7 +561,7 @@ private boolean recalc(BuilderCalculationContext bcc) { private void trim() { HashSet copy = new HashSet<>(incorrectPositions); - copy.removeIf(pos -> pos.distanceSq(ctx.player().posX, ctx.player().posY, ctx.player().posZ) > 200); + copy.removeIf(pos -> pos.distSqr(ctx.player().blockPosition()) > 200); if (!copy.isEmpty()) { incorrectPositions = copy; } @@ -561,7 +576,7 @@ private void recalcNearby(BuilderCalculationContext bcc) { int x = center.x + dx; int y = center.y + dy; int z = center.z + dz; - IBlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); + BlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); if (desired != null) { // we care about this position BetterBlockPos pos = new BetterBlockPos(x, y, z); @@ -586,7 +601,7 @@ private void fullRecalc(BuilderCalculationContext bcc) { int blockX = x + origin.getX(); int blockY = y + origin.getY(); int blockZ = z + origin.getZ(); - IBlockState current = bcc.bsi.get0(blockX, blockY, blockZ); + BlockState current = bcc.bsi.get0(blockX, blockY, blockZ); if (!schematic.inSchematic(x, y, z, current)) { continue; } @@ -618,27 +633,27 @@ private void fullRecalc(BuilderCalculationContext bcc) { } } - private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable) { + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable) { return assemble(bcc, approxPlaceable, false); } - private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable, boolean logMissing) { + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable, boolean logMissing) { List placeable = new ArrayList<>(); List breakable = new ArrayList<>(); List sourceLiquids = new ArrayList<>(); List flowingLiquids = new ArrayList<>(); - Map missing = new HashMap<>(); + Map missing = new HashMap<>(); incorrectPositions.forEach(pos -> { - IBlockState state = bcc.bsi.get0(pos); - if (state.getBlock() instanceof BlockAir) { + BlockState state = bcc.bsi.get0(pos); + if (state.getBlock() instanceof AirBlock) { if (approxPlaceable.contains(bcc.getSchematic(pos.x, pos.y, pos.z, state))) { placeable.add(pos); } else { - IBlockState desired = bcc.getSchematic(pos.x, pos.y, pos.z, state); + BlockState desired = bcc.getSchematic(pos.x, pos.y, pos.z, state); missing.put(desired, 1 + missing.getOrDefault(desired, 0)); } } else { - if (state.getBlock() instanceof BlockLiquid) { + if (state.getBlock() instanceof LiquidBlock) { // if the block itself is JUST a liquid (i.e. not just a waterlogged block), we CANNOT break it // TODO for 1.13 make sure that this only matches pure water, not waterlogged blocks if (!MovementHelper.possiblyFlowing(state)) { @@ -656,11 +671,11 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPla breakable.forEach(pos -> toBreak.add(breakGoal(pos, bcc))); List toPlace = new ArrayList<>(); placeable.forEach(pos -> { - if (!placeable.contains(pos.down()) && !placeable.contains(pos.down(2))) { + if (!placeable.contains(pos.below()) && !placeable.contains(pos.below(2))) { toPlace.add(placementGoal(pos, bcc)); } }); - sourceLiquids.forEach(pos -> toPlace.add(new GoalBlock(pos.up()))); + sourceLiquids.forEach(pos -> toPlace.add(new GoalBlock(pos.above()))); if (!toPlace.isEmpty()) { return new JankyGoalComposite(new GoalComposite(toPlace.toArray(new Goal[0])), new GoalComposite(toBreak.toArray(new Goal[0]))); @@ -728,23 +743,23 @@ public boolean isInGoal(int x, int y, int z) { } private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (ctx.world().getBlockState(pos).getBlock() != Blocks.AIR) { // TODO can this even happen? + if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? return new GoalPlace(pos); } - boolean allowSameLevel = ctx.world().getBlockState(pos.up()).getBlock() != Blocks.AIR; - IBlockState current = ctx.world().getBlockState(pos); - for (EnumFacing facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { + boolean allowSameLevel = !(ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock); + BlockState current = ctx.world().getBlockState(pos); + for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { //noinspection ConstantConditions - if (MovementHelper.canPlaceAgainst(ctx, pos.offset(facing)) && ctx.world().mayPlace(bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current).getBlock(), pos, false, facing, null)) { - return new GoalAdjacent(pos, pos.offset(facing), allowSameLevel); + if (MovementHelper.canPlaceAgainst(ctx, pos.relative(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { + return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); } } return new GoalPlace(pos); } private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.up()).getBlock() instanceof BlockAir && bcc.bsi.get0(pos.up(2)).getBlock() instanceof BlockAir) { // TODO maybe possible without the up(2) check? - return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.up()) { + if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.above()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.above(2)).getBlock() instanceof AirBlock) { // TODO maybe possible without the up(2) check? + return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.above()) { @Override public boolean isInGoal(int x, int y, int z) { if (y > this.y || (x == this.x && y == this.y && z == this.z)) { @@ -790,16 +805,31 @@ public double heuristic(int x, int y, int z) { } } - public static class GoalPlace extends GoalBlock { - - public GoalPlace(BlockPos placeAt) { - super(placeAt.up()); - } - - public double heuristic(int x, int y, int z) { - // prioritize lower y coordinates - return this.y * 100 + super.heuristic(x, y, z); + private List approxPlaceable(int size) { + List result = new ArrayList<>(); + for (int i = 0; i < size; i++) { + ItemStack stack = ctx.player().getInventory().items.get(i); + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { + result.add(Blocks.AIR.defaultBlockState()); + continue; + } + // + BlockState itemState = ((BlockItem) stack.getItem()) + .getBlock() + .getStateForPlacement( + new BlockPlaceContext( + new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { + } + ) + ); + if (itemState != null) { + result.add(itemState); + } else { + result.add(Blocks.AIR.defaultBlockState()); + } + // } + return result; } @Override @@ -819,35 +849,13 @@ public String displayName0() { return paused ? "Builder Paused" : "Building " + name; } - private List approxPlaceable(int size) { - List result = new ArrayList<>(); - for (int i = 0; i < size; i++) { - ItemStack stack = ctx.player().inventory.mainInventory.get(i); - if (stack.isEmpty() || !(stack.getItem() instanceof ItemBlock)) { - result.add(Blocks.AIR.getDefaultState()); - continue; - } - // - result.add(((ItemBlock) stack.getItem()).getBlock().getStateForPlacement(ctx.world(), ctx.playerFeet(), EnumFacing.UP, (float) ctx.player().posX, (float) ctx.player().posY, (float) ctx.player().posZ, stack.getItem().getMetadata(stack.getMetadata()), ctx.player())); - // - } - return result; - } - - public static final Set> orientationProps = - ImmutableSet.of(BlockRotatedPillar.AXIS, BlockLog.LOG_AXIS, BlockHorizontal.FACING, - BlockStairs.FACING, BlockStairs.HALF, BlockStairs.SHAPE, - BlockPane.NORTH, BlockPane.EAST, BlockPane.SOUTH, BlockPane.WEST, BlockVine.UP, - BlockTrapDoor.OPEN, BlockTrapDoor.HALF - ); - - private boolean sameWithoutOrientation(IBlockState first, IBlockState second) { + private boolean sameWithoutOrientation(BlockState first, BlockState second) { if (first.getBlock() != second.getBlock()) { return false; } - ImmutableMap, Comparable> map1 = first.getProperties(); - ImmutableMap, Comparable> map2 = second.getProperties(); - for (IProperty prop : map1.keySet()) { + ImmutableMap, Comparable> map1 = first.getValues(); + ImmutableMap, Comparable> map2 = second.getValues(); + for (Property prop : map1.keySet()) { if (map1.get(prop) != map2.get(prop) && !orientationProps.contains(prop)) { return false; } @@ -855,20 +863,20 @@ private boolean sameWithoutOrientation(IBlockState first, IBlockState second) { return true; } - private boolean valid(IBlockState current, IBlockState desired, boolean itemVerify) { + private boolean valid(BlockState current, BlockState desired, boolean itemVerify) { if (desired == null) { return true; } - if (current.getBlock() instanceof BlockLiquid && Baritone.settings().okIfWater.value) { + if (current.getBlock() instanceof LiquidBlock && Baritone.settings().okIfWater.value) { return true; } - if (current.getBlock() instanceof BlockAir && Baritone.settings().okIfAir.value.contains(desired.getBlock())) { + if (current.getBlock() instanceof AirBlock && desired.getBlock() instanceof AirBlock) { return true; } - if (desired.getBlock() instanceof BlockAir && Baritone.settings().buildIgnoreBlocks.value.contains(current.getBlock())) { + if (current.getBlock() instanceof AirBlock && Baritone.settings().okIfAir.value.contains(desired.getBlock())) { return true; } - if (!(current.getBlock() instanceof BlockAir) && Baritone.settings().buildIgnoreExisting.value && !itemVerify) { + if (desired.getBlock() instanceof AirBlock && Baritone.settings().buildIgnoreBlocks.value.contains(current.getBlock())) { return true; } if (Baritone.settings().buildSkipBlocks.value.contains(desired.getBlock()) && !itemVerify) { @@ -883,9 +891,36 @@ private boolean valid(IBlockState current, IBlockState desired, boolean itemVeri return Baritone.settings().buildIgnoreDirection.value && sameWithoutOrientation(current, desired); } + public static class Placement { + + private final int hotbarSelection; + private final BlockPos placeAgainst; + private final Direction side; + private final Rotation rot; + + public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { + this.hotbarSelection = hotbarSelection; + this.placeAgainst = placeAgainst; + this.side = side; + this.rot = rot; + } + } + + public static class GoalPlace extends GoalBlock { + + public GoalPlace(BlockPos placeAt) { + super(placeAt.above()); + } + + public double heuristic(int x, int y, int z) { + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); + } + } + public class BuilderCalculationContext extends CalculationContext { - private final List placeable; + private final List placeable; private final ISchematic schematic; private final int originX; private final int originY; @@ -903,7 +938,7 @@ public BuilderCalculationContext() { this.backtrackCostFavoringCoefficient = 1; } - private IBlockState getSchematic(int x, int y, int z, IBlockState current) { + private BlockState getSchematic(int x, int y, int z, BlockState current) { if (schematic.inSchematic(x - originX, y - originY, z - originZ, current)) { return schematic.desiredState(x - originX, y - originY, z - originZ, current, BuilderProcess.this.approxPlaceable); } else { @@ -912,14 +947,14 @@ private IBlockState getSchematic(int x, int y, int z, IBlockState current) { } @Override - public double costOfPlacingAt(int x, int y, int z, IBlockState current) { + public double costOfPlacingAt(int x, int y, int z, BlockState current) { if (isPossiblyProtected(x, y, z) || !worldBorder.canPlaceAt(x, z)) { // make calculation fail properly if we can't build return COST_INF; } - IBlockState sch = getSchematic(x, y, z, current); + BlockState sch = getSchematic(x, y, z, current); if (sch != null && !Baritone.settings().buildSkipBlocks.value.contains(sch.getBlock())) { // TODO this can return true even when allowPlace is off.... is that an issue? - if (sch.getBlock() == Blocks.AIR) { + if (sch.getBlock() instanceof AirBlock) { // we want this to be air, but they're asking if they can place here // this won't be a schematic block, this will be a throwaway return placeBlockCost * 2; // we're going to have to break it eventually @@ -946,13 +981,13 @@ public double costOfPlacingAt(int x, int y, int z, IBlockState current) { } @Override - public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { - if (!allowBreak || isPossiblyProtected(x, y, z)) { + public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { + if ((!allowBreak && !allowBreakAnyway.contains(current.getBlock())) || isPossiblyProtected(x, y, z)) { return COST_INF; } - IBlockState sch = getSchematic(x, y, z, current); + BlockState sch = getSchematic(x, y, z, current); if (sch != null && !Baritone.settings().buildSkipBlocks.value.contains(sch.getBlock())) { - if (sch.getBlock() == Blocks.AIR) { + if (sch.getBlock() instanceof AirBlock) { // it should be air // regardless of current contents, we can break it return 1; diff --git a/src/main/java/baritone/process/CustomGoalProcess.java b/src/main/java/baritone/process/CustomGoalProcess.java index ea9ff2092..3ee3e7b7c 100644 --- a/src/main/java/baritone/process/CustomGoalProcess.java +++ b/src/main/java/baritone/process/CustomGoalProcess.java @@ -91,7 +91,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (this.goal == null || (this.goal.isInGoal(ctx.playerFeet()) && this.goal.isInGoal(baritone.getPathingBehavior().pathStart()))) { onLostControl(); // we're there xd if (Baritone.settings().disconnectOnArrival.value) { - ctx.world().sendQuittingDisconnectingPacket(); + ctx.world().disconnect(); } if (Baritone.settings().notificationOnPathComplete.value) { logNotification("Pathing complete", false); diff --git a/src/main/java/baritone/process/ExploreProcess.java b/src/main/java/baritone/process/ExploreProcess.java index 3664d4188..e1f053e02 100644 --- a/src/main/java/baritone/process/ExploreProcess.java +++ b/src/main/java/baritone/process/ExploreProcess.java @@ -32,8 +32,8 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; import java.io.InputStreamReader; import java.nio.file.Files; diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 0ef85f07d..a9b6ee6ba 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -31,21 +31,19 @@ import baritone.cache.WorldScanner; import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.block.*; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.EnumDyeColor; -import net.minecraft.item.Item; -import net.minecraft.item.ItemDye; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; import java.util.ArrayList; import java.util.Arrays; @@ -76,17 +74,17 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro Items.BEETROOT_SEEDS, Items.BEETROOT, Items.MELON_SEEDS, - Items.MELON, - Item.getItemFromBlock(Blocks.MELON_BLOCK), + Items.MELON_SLICE, + Blocks.MELON.asItem(), Items.WHEAT_SEEDS, Items.WHEAT, Items.PUMPKIN_SEEDS, - Item.getItemFromBlock(Blocks.PUMPKIN), + Blocks.PUMPKIN.asItem(), Items.POTATO, Items.CARROT, Items.NETHER_WART, - Items.REEDS, - Item.getItemFromBlock(Blocks.CACTUS) + Blocks.SUGAR_CANE.asItem(), + Blocks.CACTUS.asItem() ); public FarmProcess(Baritone baritone) { @@ -110,51 +108,7 @@ public void farm(int range, BlockPos pos) { locations = null; } - private enum Harvest { - WHEAT((BlockCrops) Blocks.WHEAT), - CARROTS((BlockCrops) Blocks.CARROTS), - POTATOES((BlockCrops) Blocks.POTATOES), - BEETROOT((BlockCrops) Blocks.BEETROOTS), - PUMPKIN(Blocks.PUMPKIN, state -> true), - MELON(Blocks.MELON_BLOCK, state -> true), - NETHERWART(Blocks.NETHER_WART, state -> state.getValue(BlockNetherWart.AGE) >= 3), - SUGARCANE(Blocks.REEDS, null) { - @Override - public boolean readyToHarvest(World world, BlockPos pos, IBlockState state) { - if (Baritone.settings().replantCrops.value) { - return world.getBlockState(pos.down()).getBlock() instanceof BlockReed; - } - return true; - } - }, - CACTUS(Blocks.CACTUS, null) { - @Override - public boolean readyToHarvest(World world, BlockPos pos, IBlockState state) { - if (Baritone.settings().replantCrops.value) { - return world.getBlockState(pos.down()).getBlock() instanceof BlockCactus; - } - return true; - } - }; - public final Block block; - public final Predicate readyToHarvest; - - Harvest(BlockCrops blockCrops) { - this(blockCrops, blockCrops::isMaxAge); - // max age is 7 for wheat, carrots, and potatoes, but 3 for beetroot - } - - Harvest(Block block, Predicate readyToHarvest) { - this.block = block; - this.readyToHarvest = readyToHarvest; - } - - public boolean readyToHarvest(World world, BlockPos pos, IBlockState state) { - return readyToHarvest.test(state); - } - } - - private boolean readyForHarvest(World world, BlockPos pos, IBlockState state) { + private boolean readyForHarvest(Level world, BlockPos pos, BlockState state) { for (Harvest harvest : Harvest.values()) { if (harvest.block == state.getBlock()) { return harvest.readyToHarvest(world, pos, state); @@ -163,16 +117,12 @@ private boolean readyForHarvest(World world, BlockPos pos, IBlockState state) { return false; } - private boolean isPlantable(ItemStack stack) { - return FARMLAND_PLANTABLE.contains(stack.getItem()); - } - private boolean isBoneMeal(ItemStack stack) { - return !stack.isEmpty() && stack.getItem() instanceof ItemDye && EnumDyeColor.byDyeDamage(stack.getMetadata()) == EnumDyeColor.WHITE; + return !stack.isEmpty() && stack.getItem().equals(Items.BONE_MEAL); } - private boolean isNetherWart(ItemStack stack) { - return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART); + private boolean isPlantable(ItemStack stack) { + return FARMLAND_PLANTABLE.contains(stack.getItem()); } @Override @@ -200,12 +150,12 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { List openSoulsand = new ArrayList<>(); for (BlockPos pos : locations) { //check if the target block is out of range. - if (range != 0 && pos.getDistance(center.getX(), center.getY(), center.getZ()) > range) { + if (range != 0 && pos.distSqr(center) > range * range) { continue; } - IBlockState state = ctx.world().getBlockState(pos); - boolean airAbove = ctx.world().getBlockState(pos.up()).getBlock() instanceof BlockAir; + BlockState state = ctx.world().getBlockState(pos); + boolean airAbove = ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock; if (state.getBlock() == Blocks.FARMLAND) { if (airAbove) { openFarmland.add(pos); @@ -222,9 +172,9 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { toBreak.add(pos); continue; } - if (state.getBlock() instanceof IGrowable) { - IGrowable ig = (IGrowable) state.getBlock(); - if (ig.canGrow(ctx.world(), pos, state, true) && ig.canUseBonemeal(ctx.world(), ctx.world().rand, pos, state)) { + if (state.getBlock() instanceof BonemealableBlock) { + BonemealableBlock ig = (BonemealableBlock) state.getBlock(); + if (ig.isValidBonemealTarget(ctx.world(), pos, state, true) && ig.isBonemealSuccess(ctx.world(), ctx.world().random, pos, state)) { bonemealable.add(pos); } } @@ -246,10 +196,10 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { both.addAll(openSoulsand); for (BlockPos pos : both) { boolean soulsand = openSoulsand.contains(pos); - Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, new Vec3d(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); + Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, new Vec3(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, soulsand ? this::isNetherWart : this::isPlantable)) { - RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); - if (result.typeOfHit == RayTraceResult.Type.BLOCK && result.sideHit == EnumFacing.UP) { + HitResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); + if (result instanceof BlockHitResult && ((BlockHitResult) result).getDirection() == Direction.UP) { baritone.getLookBehavior().updateTarget(rot.get(), true); if (ctx.isLookingAt(pos)) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); @@ -284,12 +234,12 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (baritone.getInventoryBehavior().throwaway(false, this::isPlantable)) { for (BlockPos pos : openFarmland) { - goalz.add(new GoalBlock(pos.up())); + goalz.add(new GoalBlock(pos.above())); } } if (baritone.getInventoryBehavior().throwaway(false, this::isNetherWart)) { for (BlockPos pos : openSoulsand) { - goalz.add(new GoalBlock(pos.up())); + goalz.add(new GoalBlock(pos.above())); } } if (baritone.getInventoryBehavior().throwaway(false, this::isBoneMeal)) { @@ -297,18 +247,66 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { goalz.add(new GoalBlock(pos)); } } - for (Entity entity : ctx.world().loadedEntityList) { - if (entity instanceof EntityItem && entity.onGround) { - EntityItem ei = (EntityItem) entity; + for (Entity entity : ctx.entities()) { + if (entity instanceof ItemEntity && entity.isOnGround()) { + ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol - goalz.add(new GoalBlock(new BlockPos(entity.posX, entity.posY + 0.1, entity.posZ))); + goalz.add(new GoalBlock(new BlockPos(entity.position().x, entity.position().y + 0.1, entity.position().z))); } } } return new PathingCommand(new GoalComposite(goalz.toArray(new Goal[0])), PathingCommandType.SET_GOAL_AND_PATH); } + private boolean isNetherWart(ItemStack stack) { + return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART); + } + + private enum Harvest { + WHEAT((CropBlock) Blocks.WHEAT), + CARROTS((CropBlock) Blocks.CARROTS), + POTATOES((CropBlock) Blocks.POTATOES), + BEETROOT((CropBlock) Blocks.BEETROOTS), + PUMPKIN(Blocks.PUMPKIN, state -> true), + MELON(Blocks.MELON, state -> true), + NETHERWART(Blocks.NETHER_WART, state -> state.getValue(NetherWartBlock.AGE) >= 3), + SUGARCANE(Blocks.SUGAR_CANE, null) { + @Override + public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { + if (Baritone.settings().replantCrops.value) { + return world.getBlockState(pos.below()).getBlock() instanceof SugarCaneBlock; + } + return true; + } + }, + CACTUS(Blocks.CACTUS, null) { + @Override + public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { + if (Baritone.settings().replantCrops.value) { + return world.getBlockState(pos.below()).getBlock() instanceof CactusBlock; + } + return true; + } + }; + public final Block block; + public final Predicate readyToHarvest; + + Harvest(CropBlock blockCrops) { + this(blockCrops, blockCrops::isMaxAge); + // max age is 7 for wheat, carrots, and potatoes, but 3 for beetroot + } + + Harvest(Block block, Predicate readyToHarvest) { + this.block = block; + this.readyToHarvest = readyToHarvest; + } + + public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { + return readyToHarvest.test(state); + } + } + @Override public void onLostControl() { active = false; diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index af30b25d0..9c6a5dfb7 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -26,13 +26,12 @@ import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * Follow an entity @@ -58,10 +57,10 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { private Goal towards(Entity following) { BlockPos pos; if (Baritone.settings().followOffsetDistance.value == 0) { - pos = new BlockPos(following); + pos = following.blockPosition(); } else { - GoalXZ g = GoalXZ.fromDirection(following.getPositionVector(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); - pos = new BlockPos(g.getX(), following.posY, g.getZ()); + GoalXZ g = GoalXZ.fromDirection(following.position(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); + pos = new BlockPos(g.getX(), following.position().y, g.getZ()); } return new GoalNear(pos, Baritone.settings().followRadius.value); } @@ -71,18 +70,17 @@ private boolean followable(Entity entity) { if (entity == null) { return false; } - if (entity.isDead) { + if (!entity.isAlive()) { return false; } if (entity.equals(ctx.player())) { return false; } - return ctx.world().loadedEntityList.contains(entity); + return ctx.entitiesStream().anyMatch(entity::equals); } private void scanWorld() { - cache = Stream.of(ctx.world().loadedEntityList, ctx.world().playerEntities) - .flatMap(List::stream) + cache = ctx.entitiesStream() .filter(this::followable) .filter(this.filter) .distinct() diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 16fc3dda5..d92c64583 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -28,12 +28,13 @@ import baritone.api.utils.RotationUtils; import baritone.api.utils.input.Input; import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.ContainerPlayer; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import java.util.*; @@ -129,7 +130,7 @@ public double heuristic() { // blacklist the closest block and its adjacent blocks public synchronized boolean blacklistClosest() { List newBlacklist = new ArrayList<>(); - knownLocations.stream().min(Comparator.comparingDouble(ctx.player()::getDistanceSq)).ifPresent(newBlacklist::add); + knownLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(newBlacklist::add); outer: while (true) { for (BlockPos known : knownLocations) { @@ -153,18 +154,14 @@ public synchronized boolean blacklistClosest() { return !newBlacklist.isEmpty(); } - // this is to signal to MineProcess that we don't care about the allowBreak setting - // it is NOT to be used to actually calculate a path - public class GetToBlockCalculationContext extends CalculationContext { - - public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { - super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); + private Goal createGoal(BlockPos pos) { + if (walkIntoInsteadOfAdjacent(gettingTo.getBlock())) { + return new GoalTwoBlocks(pos); } - - @Override - public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { - return 1; + if (blockOnTopMustBeRemoved(gettingTo.getBlock()) && MovementHelper.isBlockNormalCube(baritone.bsi.get0(pos.above()))) { // TODO this should be the check for chest openability + return new GoalBlock(pos.above()); } + return new GoalGetToBlock(pos); } // safer than direct double comparison from distanceSq @@ -198,16 +195,6 @@ private synchronized void rescan(List known, CalculationContext contex knownLocations = positions; } - private Goal createGoal(BlockPos pos) { - if (walkIntoInsteadOfAdjacent(gettingTo.getBlock())) { - return new GoalTwoBlocks(pos); - } - if (blockOnTopMustBeRemoved(gettingTo.getBlock()) && baritone.bsi.get0(pos.up()).isBlockNormalCube()) { - return new GoalBlock(pos.up()); - } - return new GoalGetToBlock(pos); - } - private boolean rightClick() { for (BlockPos pos : knownLocations) { Optional reachable = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); @@ -215,8 +202,8 @@ private boolean rightClick() { baritone.getLookBehavior().updateTarget(reachable.get(), true); if (knownLocations.contains(ctx.getSelectedBlock().orElse(null))) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); // TODO find some way to right click even if we're in an ESC menu - System.out.println(ctx.player().openContainer); - if (!(ctx.player().openContainer instanceof ContainerPlayer)) { + System.out.println(ctx.player().containerMenu); + if (!(ctx.player().containerMenu instanceof InventoryMenu)) { return true; } } @@ -235,14 +222,28 @@ private boolean walkIntoInsteadOfAdjacent(Block block) { if (!Baritone.settings().enterPortal.value) { return false; } - return block == Blocks.PORTAL; + return block == Blocks.NETHER_PORTAL; } private boolean rightClickOnArrival(Block block) { if (!Baritone.settings().rightClickContainerOnArrival.value) { return false; } - return block == Blocks.CRAFTING_TABLE || block == Blocks.FURNACE || block == Blocks.LIT_FURNACE || block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST; + return block == Blocks.CRAFTING_TABLE || block == Blocks.FURNACE || block == Blocks.BLAST_FURNACE || block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST; + } + + // this is to signal to MineProcess that we don't care about the allowBreak setting + // it is NOT to be used to actually calculate a path + public class GetToBlockCalculationContext extends CalculationContext { + + public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { + super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); + } + + @Override + public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { + return 1; + } } private boolean blockOnTopMustBeRemoved(Block block) { diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 1ec47cd92..6cb56f5c2 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -30,15 +30,16 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; -import net.minecraft.block.Block; -import net.minecraft.block.BlockAir; -import net.minecraft.block.BlockFalling; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.state.BlockState; import java.util.*; import java.util.stream.Collectors; @@ -72,82 +73,47 @@ public boolean isActive() { return filter != null; } - @Override - public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - if (desiredQuantity > 0) { - int curr = ctx.player().inventory.mainInventory.stream() - .filter(stack -> filter.has(stack)) - .mapToInt(ItemStack::getCount).sum(); - System.out.println("Currently have " + curr + " valid items"); - if (curr >= desiredQuantity) { - logDirect("Have " + curr + " valid items"); - cancel(); - return null; - } - } - if (calcFailed) { - if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { - logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); - } - knownOreLocations.stream().min(Comparator.comparingDouble(ctx.player()::getDistanceSq)).ifPresent(blacklist::add); - knownOreLocations.removeIf(blacklist::contains); - } else { - logDirect("Unable to find any path to " + filter + ", canceling mine"); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("Unable to find any path to " + filter + ", canceling mine", true); + private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { + dropped.removeIf(drop -> { + for (BlockPos pos : locs2) { + if (pos.distSqr(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) && MineProcess.plausibleToBreak(ctx, pos)) { // TODO maybe drop also has to be supported? no lava below? + return true; } - cancel(); - return null; } - } - if (!Baritone.settings().allowBreak.value) { - logDirect("Unable to mine when allowBreak is false!"); - cancel(); - return null; - } - updateLoucaSystem(); - int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; - List curr = new ArrayList<>(knownOreLocations); - if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain - CalculationContext context = new CalculationContext(baritone, true); - Baritone.getExecutor().execute(() -> rescan(curr, context)); - } - if (Baritone.settings().legitMine.value) { - addNearby(); - } - Optional shaft = curr.stream() - .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) - .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) - .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof BlockAir)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( - .min(Comparator.comparingDouble(ctx.player()::getDistanceSq)); - baritone.getInputOverrideHandler().clearAllKeys(); - if (shaft.isPresent() && ctx.player().onGround) { - BlockPos pos = shaft.get(); - IBlockState state = baritone.bsi.get0(pos); - if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { - Optional rot = RotationUtils.reachable(ctx, pos); - if (rot.isPresent() && isSafeToCancel) { - baritone.getLookBehavior().updateTarget(rot.get(), true); - MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); - if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { - baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); + return false; + }); + List locs = locs2 + .stream() + .distinct() + + // remove any that are within loaded chunks that aren't actually what we want + .filter(pos -> !ctx.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ()) || filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) + + // remove any that are implausible to mine (encased in bedrock, or touching lava) + .filter(pos -> MineProcess.plausibleToBreak(ctx, pos)) + + .filter(pos -> { + if (Baritone.settings().allowOnlyExposedOres.value) { + return isNextToAir(ctx, pos); + } else { + return true; } - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); - } - } - } - PathingCommand command = updateGoal(); - if (command == null) { - // none in range - // maybe say something in chat? (ahem impact) - cancel(); - return null; + }) + + .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value + ctx.world.dimensionType().minY()) + + .filter(pos -> !blacklist.contains(pos)) + + .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().blockPosition()::distSqr)) + .collect(Collectors.toList()); + + if (locs.size() > max) { + return locs.subList(0, max); } - return command; + return locs; } + private void updateLoucaSystem() { Map copy = new HashMap<>(anticipatedDrops); ctx.getSelectedBlock().ifPresent(pos -> { @@ -240,20 +206,158 @@ private void rescan(List already, CalculationContext context) { knownOreLocations = locs; } + public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { + if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { + return false; + } + + // bedrock above and below makes it implausible, otherwise we're good + return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); + } + + public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { + List locs = new ArrayList<>(); + List untracked = new ArrayList<>(); + for (BlockOptionalMeta bom : filter.blocks()) { + Block block = bom.getBlock(); + if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { + BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); + + // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that + locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( + BlockUtils.blockToString(block), + Baritone.settings().maxCachedWorldScanCount.value, + pf.x, + pf.z, + 2 + )); + } else { + untracked.add(block); + } + } + + locs = prune(ctx, locs, filter, max, blacklist, dropped); + + if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < max)) { + locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( + ctx.getBaritone().getPlayerContext(), + filter, + max, + 10, + 32 + )); // maxSearchRadius is NOT sq + } + + locs.addAll(alreadyKnown); + + return prune(ctx, locs, filter, max, blacklist, dropped); + } + + public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { + int radius = Baritone.settings().allowOnlyExposedOresDistance.value; + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius + && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { + return true; + } + } + } + } + return false; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (desiredQuantity > 0) { + int curr = ctx.player().getInventory().items.stream() + .filter(stack -> filter.has(stack)) + .mapToInt(ItemStack::getCount).sum(); + System.out.println("Currently have " + curr + " valid items"); + if (curr >= desiredQuantity) { + logDirect("Have " + curr + " valid items"); + cancel(); + return null; + } + } + if (calcFailed) { + if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { + logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); + } + knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(blacklist::add); + knownOreLocations.removeIf(blacklist::contains); + } else { + logDirect("Unable to find any path to " + filter + ", canceling mine"); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", canceling mine", true); + } + cancel(); + return null; + } + } + if (!Baritone.settings().allowBreak.value) { + logDirect("Unable to mine when allowBreak is false!"); + cancel(); + return null; + } + updateLoucaSystem(); + int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; + List curr = new ArrayList<>(knownOreLocations); + if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain + CalculationContext context = new CalculationContext(baritone, true); + Baritone.getExecutor().execute(() -> rescan(curr, context)); + } + if (Baritone.settings().legitMine.value) { + addNearby(); + } + Optional shaft = curr.stream() + .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) + .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) + .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( + .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); + baritone.getInputOverrideHandler().clearAllKeys(); + if (shaft.isPresent() && ctx.player().isOnGround()) { + BlockPos pos = shaft.get(); + BlockState state = baritone.bsi.get0(pos); + if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { + Optional rot = RotationUtils.reachable(ctx, pos); + if (rot.isPresent() && isSafeToCancel) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); + if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + } + PathingCommand command = updateGoal(); + if (command == null) { + // none in range + // maybe say something in chat? (ahem impact) + cancel(); + return null; + } + return command; + } + private boolean internalMiningGoal(BlockPos pos, CalculationContext context, List locs) { // Here, BlockStateInterface is used because the position may be in a cached chunk (the targeted block is one that is kept track of) if (locs.contains(pos)) { return true; } - IBlockState state = context.bsi.get0(pos); - if (Baritone.settings().internalMiningAirException.value && state.getBlock() instanceof BlockAir) { + BlockState state = context.bsi.get0(pos); + if (Baritone.settings().internalMiningAirException.value && state.getBlock() instanceof AirBlock) { return true; } return filter.has(state) && plausibleToBreak(context, pos); } private Goal coalesce(BlockPos loc, List locs, CalculationContext context) { - boolean assumeVerticalShaftMine = !(baritone.bsi.get0(loc.up()).getBlock() instanceof BlockFalling); + boolean assumeVerticalShaftMine = !(baritone.bsi.get0(loc.above()).getBlock() instanceof FallingBlock); if (!Baritone.settings().forceInternalMining.value) { if (assumeVerticalShaftMine) { // we can get directly below the block @@ -263,9 +367,9 @@ private Goal coalesce(BlockPos loc, List locs, CalculationContext cont return new GoalTwoBlocks(loc); } } - boolean upwardGoal = internalMiningGoal(loc.up(), context, locs); - boolean downwardGoal = internalMiningGoal(loc.down(), context, locs); - boolean doubleDownwardGoal = internalMiningGoal(loc.down(2), context, locs); + boolean upwardGoal = internalMiningGoal(loc.above(), context, locs); + boolean downwardGoal = internalMiningGoal(loc.below(), context, locs); + boolean doubleDownwardGoal = internalMiningGoal(loc.below(2), context, locs); if (upwardGoal == downwardGoal) { // symmetric if (doubleDownwardGoal && assumeVerticalShaftMine) { // we have a checkerboard like pattern @@ -287,31 +391,11 @@ private Goal coalesce(BlockPos loc, List locs, CalculationContext cont if (doubleDownwardGoal && assumeVerticalShaftMine) { // this block and two below it are goals // path into the center of the one below, because that includes directly below this one - return new GoalTwoBlocks(loc.down()); + return new GoalTwoBlocks(loc.below()); } // upwardGoal false, downwardGoal true, doubleDownwardGoal false // just this block and the one immediately below, no others - return new GoalBlock(loc.down()); - } - - private static class GoalThreeBlocks extends GoalTwoBlocks { - - public GoalThreeBlocks(BlockPos pos) { - super(pos); - } - - @Override - public boolean isInGoal(int x, int y, int z) { - return x == this.x && (y == this.y || y == this.y - 1 || y == this.y - 2) && z == this.z; - } - - @Override - public double heuristic(int x, int y, int z) { - int xDiff = x - this.x; - int yDiff = y - this.y; - int zDiff = z - this.z; - return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); - } + return new GoalBlock(loc.below()); } public List droppedItemsScan() { @@ -319,11 +403,11 @@ public List droppedItemsScan() { return Collections.emptyList(); } List ret = new ArrayList<>(); - for (Entity entity : ctx.world().loadedEntityList) { - if (entity instanceof EntityItem) { - EntityItem ei = (EntityItem) entity; + for (Entity entity : ((ClientLevel) ctx.world()).entitiesForRendering()) { + if (entity instanceof ItemEntity) { + ItemEntity ei = (ItemEntity) entity; if (filter.has(ei.getItem())) { - ret.add(new BlockPos(entity)); + ret.add(entity.blockPosition()); } } } @@ -331,44 +415,6 @@ public List droppedItemsScan() { return ret; } - public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { - List locs = new ArrayList<>(); - List untracked = new ArrayList<>(); - for (BlockOptionalMeta bom : filter.blocks()) { - Block block = bom.getBlock(); - if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { - BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); - - // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that - locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( - BlockUtils.blockToString(block), - Baritone.settings().maxCachedWorldScanCount.value, - pf.x, - pf.z, - 2 - )); - } else { - untracked.add(block); - } - } - - locs = prune(ctx, locs, filter, max, blacklist, dropped); - - if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < max)) { - locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( - ctx.getBaritone().getPlayerContext(), - filter, - max, - 10, - 32 - )); // maxSearchRadius is NOT sq - } - - locs.addAll(alreadyKnown); - - return prune(ctx, locs, filter, max, blacklist, dropped); - } - private void addNearby() { List dropped = droppedItemsScan(); knownOreLocations.addAll(dropped); @@ -383,7 +429,7 @@ private void addNearby() { // is an x-ray and it'll get caught if (filter.has(bsi.get0(x, y, z))) { BlockPos pos = new BlockPos(x, y, z); - if ((Baritone.settings().legitMineIncludeDiagonals.value && knownOreLocations.stream().anyMatch(ore -> ore.distanceSq(pos) <= 2 /* sq means this is pytha dist <= sqrt(2) */)) || RotationUtils.reachable(ctx.player(), pos, fakedBlockReachDistance).isPresent()) { + if ((Baritone.settings().legitMineIncludeDiagonals.value && knownOreLocations.stream().anyMatch(ore -> ore.distSqr(pos) <= 2 /* sq means this is pytha dist <= sqrt(2) */)) || RotationUtils.reachable(ctx.player(), pos, fakedBlockReachDistance).isPresent()) { knownOreLocations.add(pos); } } @@ -393,69 +439,24 @@ private void addNearby() { knownOreLocations = prune(new CalculationContext(baritone), knownOreLocations, filter, ORE_LOCATIONS_COUNT, blacklist, dropped); } - private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { - dropped.removeIf(drop -> { - for (BlockPos pos : locs2) { - if (pos.distanceSq(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) && MineProcess.plausibleToBreak(ctx, pos)) { // TODO maybe drop also has to be supported? no lava below? - return true; - } - } - return false; - }); - List locs = locs2 - .stream() - .distinct() - - // remove any that are within loaded chunks that aren't actually what we want - .filter(pos -> !ctx.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ()) || filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) - - // remove any that are implausible to mine (encased in bedrock, or touching lava) - .filter(pos -> MineProcess.plausibleToBreak(ctx, pos)) - - .filter(pos -> { - if (Baritone.settings().allowOnlyExposedOres.value) { - return isNextToAir(ctx, pos); - } else { - return true; - } - }) - - .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value) - - .filter(pos -> !blacklist.contains(pos)) - - .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player()::getDistanceSq)) - .collect(Collectors.toList()); + private static class GoalThreeBlocks extends GoalTwoBlocks { - if (locs.size() > max) { - return locs.subList(0, max); + public GoalThreeBlocks(BlockPos pos) { + super(pos); } - return locs; - } - public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { - int radius = Baritone.settings().allowOnlyExposedOresDistance.value; - for (int dx = -radius; dx <= radius; dx++) { - for (int dy = -radius; dy <= radius; dy++) { - for (int dz = -radius; dz <= radius; dz++) { - if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius - && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { - return true; - } - } - } + @Override + public boolean isInGoal(int x, int y, int z) { + return x == this.x && (y == this.y || y == this.y - 1 || y == this.y - 2) && z == this.z; } - return false; - } - - public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { - if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { - return false; + @Override + public double heuristic(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); } - - // bedrock above and below makes it implausible, otherwise we're good - return !(ctx.bsi.get0(pos.up()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.down()).getBlock() == Blocks.BEDROCK); } @Override diff --git a/src/main/java/baritone/selection/Selection.java b/src/main/java/baritone/selection/Selection.java index 58e069de1..d4b115de4 100644 --- a/src/main/java/baritone/selection/Selection.java +++ b/src/main/java/baritone/selection/Selection.java @@ -2,9 +2,9 @@ import baritone.api.selection.ISelection; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.Vec3i; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.world.phys.AABB; public class Selection implements ISelection { @@ -13,7 +13,7 @@ public class Selection implements ISelection { private final BetterBlockPos min; private final BetterBlockPos max; private final Vec3i size; - private final AxisAlignedBB aabb; + private final AABB aabb; public Selection(BetterBlockPos pos1, BetterBlockPos pos2) { this.pos1 = pos1; @@ -37,7 +37,7 @@ public Selection(BetterBlockPos pos1, BetterBlockPos pos2) { max.z - min.z + 1 ); - this.aabb = new AxisAlignedBB(this.min, this.max.add(1, 1, 1)); + this.aabb = new AABB(this.min, this.max.offset(1, 1, 1)); } @Override @@ -66,7 +66,7 @@ public Vec3i size() { } @Override - public AxisAlignedBB aabb() { + public AABB aabb() { return aabb; } @@ -83,15 +83,15 @@ public String toString() { /** * Since it might not be immediately obvious what this does, let me explain. *

- * Let's say you specify EnumFacing.UP, this functions returns if pos2 is the highest BlockPos. - * If you specify EnumFacing.DOWN, it returns if pos2 is the lowest BlockPos. + * Let's say you specify Direction.UP, this functions returns if pos2 is the highest BlockPos. + * If you specify Direction.DOWN, it returns if pos2 is the lowest BlockPos. * * @param facing The direction to check. * @return {@code true} if pos2 is further in that direction than pos1, {@code false} if it isn't, and something * else if they're both at the same position on that axis (it really doesn't matter) */ - private boolean isPos2(EnumFacing facing) { - boolean negative = facing.getAxisDirection().getOffset() < 0; + private boolean isPos2(Direction facing) { + boolean negative = facing.getAxisDirection().getStep() < 0; switch (facing.getAxis()) { case X: @@ -101,30 +101,30 @@ private boolean isPos2(EnumFacing facing) { case Z: return (pos2.z > pos1.z) ^ negative; default: - throw new IllegalStateException("Bad EnumFacing.Axis"); + throw new IllegalStateException("Bad Direction.Axis"); } } @Override - public ISelection expand(EnumFacing direction, int blocks) { + public ISelection expand(Direction direction, int blocks) { if (isPos2(direction)) { - return new Selection(pos1, pos2.offset(direction, blocks)); + return new Selection(pos1, pos2.relative(direction, blocks)); } else { - return new Selection(pos1.offset(direction, blocks), pos2); + return new Selection(pos1.relative(direction, blocks), pos2); } } @Override - public ISelection contract(EnumFacing direction, int blocks) { + public ISelection contract(Direction direction, int blocks) { if (isPos2(direction)) { - return new Selection(pos1.offset(direction, blocks), pos2); + return new Selection(pos1.relative(direction, blocks), pos2); } else { - return new Selection(pos1, pos2.offset(direction, blocks)); + return new Selection(pos1, pos2.relative(direction, blocks)); } } @Override - public ISelection shift(EnumFacing direction, int blocks) { - return new Selection(pos1.offset(direction, blocks), pos2.offset(direction, blocks)); + public ISelection shift(Direction direction, int blocks) { + return new Selection(pos1.relative(direction, blocks), pos2.relative(direction, blocks)); } } diff --git a/src/main/java/baritone/selection/SelectionManager.java b/src/main/java/baritone/selection/SelectionManager.java index c7f213001..05d45ee0e 100644 --- a/src/main/java/baritone/selection/SelectionManager.java +++ b/src/main/java/baritone/selection/SelectionManager.java @@ -4,7 +4,7 @@ import baritone.api.selection.ISelection; import baritone.api.selection.ISelectionManager; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.EnumFacing; +import net.minecraft.core.Direction; import java.util.LinkedList; import java.util.ListIterator; @@ -69,7 +69,7 @@ public ISelection getLastSelection() { } @Override - public synchronized ISelection expand(ISelection selection, EnumFacing direction, int blocks) { + public synchronized ISelection expand(ISelection selection, Direction direction, int blocks) { for (ListIterator it = selections.listIterator(); it.hasNext(); ) { ISelection current = it.next(); @@ -85,7 +85,7 @@ public synchronized ISelection expand(ISelection selection, EnumFacing direction } @Override - public synchronized ISelection contract(ISelection selection, EnumFacing direction, int blocks) { + public synchronized ISelection contract(ISelection selection, Direction direction, int blocks) { for (ListIterator it = selections.listIterator(); it.hasNext(); ) { ISelection current = it.next(); @@ -101,7 +101,7 @@ public synchronized ISelection contract(ISelection selection, EnumFacing directi } @Override - public synchronized ISelection shift(ISelection selection, EnumFacing direction, int blocks) { + public synchronized ISelection shift(ISelection selection, Direction direction, int blocks) { for (ListIterator it = selections.listIterator(); it.hasNext(); ) { ISelection current = it.next(); diff --git a/src/main/java/baritone/selection/SelectionRenderer.java b/src/main/java/baritone/selection/SelectionRenderer.java index 89104d030..90c4bca10 100644 --- a/src/main/java/baritone/selection/SelectionRenderer.java +++ b/src/main/java/baritone/selection/SelectionRenderer.java @@ -5,7 +5,8 @@ import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.selection.ISelection; import baritone.utils.IRenderer; -import net.minecraft.util.math.AxisAlignedBB; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.world.phys.AABB; public class SelectionRenderer implements IRenderer, AbstractGameEventListener { @@ -18,7 +19,7 @@ public class SelectionRenderer implements IRenderer, AbstractGameEventListener { baritone.getGameEventHandler().registerEventListener(this); } - public static void renderSelections(ISelection[] selections) { + public static void renderSelections(PoseStack stack, ISelection[] selections) { float opacity = settings.selectionOpacity.value; boolean ignoreDepth = settings.renderSelectionIgnoreDepth.value; float lineWidth = settings.selectionLineWidth.value; @@ -30,20 +31,20 @@ public static void renderSelections(ISelection[] selections) { IRenderer.startLines(settings.colorSelection.value, opacity, lineWidth, ignoreDepth); for (ISelection selection : selections) { - IRenderer.drawAABB(selection.aabb(), SELECTION_BOX_EXPANSION); + IRenderer.drawAABB(stack, selection.aabb(), SELECTION_BOX_EXPANSION); } if (settings.renderSelectionCorners.value) { IRenderer.glColor(settings.colorSelectionPos1.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(new AxisAlignedBB(selection.pos1(), selection.pos1().add(1, 1, 1))); + IRenderer.drawAABB(stack, new AABB(selection.pos1(), selection.pos1().offset(1, 1, 1))); } IRenderer.glColor(settings.colorSelectionPos2.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(new AxisAlignedBB(selection.pos2(), selection.pos2().add(1, 1, 1))); + IRenderer.drawAABB(stack, new AABB(selection.pos2(), selection.pos2().offset(1, 1, 1))); } } @@ -52,6 +53,6 @@ public static void renderSelections(ISelection[] selections) { @Override public void onRenderPass(RenderEvent event) { - renderSelections(manager.getSelections()); + renderSelections(event.getModelViewStack(), manager.getSelections()); } } diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index 26e82cd78..5edc1439b 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -19,8 +19,9 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; /** * @author Brady @@ -48,19 +49,19 @@ public void stopBreakingBlock() { } public void tick(boolean isLeftClick) { - RayTraceResult trace = ctx.objectMouseOver(); - boolean isBlockTrace = trace != null && trace.typeOfHit == RayTraceResult.Type.BLOCK; + HitResult trace = ctx.objectMouseOver(); + boolean isBlockTrace = trace != null && trace.getType() == HitResult.Type.BLOCK; if (isLeftClick && isBlockTrace) { if (!didBreakLastTick) { ctx.playerController().syncHeldItem(); - ctx.playerController().clickBlock(trace.getBlockPos(), trace.sideHit); - ctx.player().swingArm(EnumHand.MAIN_HAND); + ctx.playerController().clickBlock(((BlockHitResult) trace).getBlockPos(), ((BlockHitResult) trace).getDirection()); + ctx.player().swing(InteractionHand.MAIN_HAND); } // Attempt to break the block - if (ctx.playerController().onPlayerDamageBlock(trace.getBlockPos(), trace.sideHit)) { - ctx.player().swingArm(EnumHand.MAIN_HAND); + if (ctx.playerController().onPlayerDamageBlock(((BlockHitResult) trace).getBlockPos(), ((BlockHitResult) trace).getDirection())) { + ctx.player().swing(InteractionHand.MAIN_HAND); } ctx.playerController().setHittingBlock(false); diff --git a/src/main/java/baritone/utils/BlockPlaceHelper.java b/src/main/java/baritone/utils/BlockPlaceHelper.java index 440bfb93d..fb8cba397 100644 --- a/src/main/java/baritone/utils/BlockPlaceHelper.java +++ b/src/main/java/baritone/utils/BlockPlaceHelper.java @@ -20,9 +20,10 @@ import baritone.Baritone; import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; public class BlockPlaceHelper implements Helper { @@ -38,17 +39,17 @@ public void tick(boolean rightClickRequested) { rightClickTimer--; return; } - RayTraceResult mouseOver = ctx.objectMouseOver(); - if (!rightClickRequested || ctx.player().isRowingBoat() || mouseOver == null || mouseOver.getBlockPos() == null || mouseOver.typeOfHit != RayTraceResult.Type.BLOCK) { + HitResult mouseOver = ctx.objectMouseOver(); + if (!rightClickRequested || ctx.player().isHandsBusy() || mouseOver == null || mouseOver.getType() != HitResult.Type.BLOCK) { return; } rightClickTimer = Baritone.settings().rightClickSpeed.value; - for (EnumHand hand : EnumHand.values()) { - if (ctx.playerController().processRightClickBlock(ctx.player(), ctx.world(), mouseOver.getBlockPos(), mouseOver.sideHit, mouseOver.hitVec, hand) == EnumActionResult.SUCCESS) { - ctx.player().swingArm(hand); + for (InteractionHand hand : InteractionHand.values()) { + if (ctx.playerController().processRightClickBlock(ctx.player(), ctx.world(), hand, (BlockHitResult) mouseOver) == InteractionResult.SUCCESS) { + ctx.player().swing(hand); return; } - if (!ctx.player().getHeldItem(hand).isEmpty() && ctx.playerController().processRightClick(ctx.player(), ctx.world(), hand) == EnumActionResult.SUCCESS) { + if (!ctx.player().getItemInHand(hand).isEmpty() && ctx.playerController().processRightClick(ctx.player(), ctx.world(), hand) == InteractionResult.SUCCESS) { return; } } diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 4f5f26899..e60b7b60b 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -21,18 +21,19 @@ import baritone.api.utils.IPlayerContext; import baritone.cache.CachedRegion; import baritone.cache.WorldData; -import baritone.utils.accessor.IChunkProviderClient; -import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; +import baritone.utils.accessor.IClientChunkProvider; +import baritone.utils.pathing.BetterWorldBorder; import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; +import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkStatus; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; /** * Wraps get for chuck caching capability @@ -41,18 +42,17 @@ */ public class BlockStateInterface { - private final Long2ObjectMap loadedChunks; + private static final BlockState AIR = Blocks.AIR.defaultBlockState(); private final WorldData worldData; - protected final IBlockAccess world; + public final BlockGetter access; public final BlockPos.MutableBlockPos isPassableBlockPos; - public final IBlockAccess access; - - private Chunk prev = null; + public final BetterWorldBorder worldBorder; + protected final Level world; + private final ClientChunkCache provider; private CachedRegion prevCached = null; private final boolean useTheRealWorld; - - private static final IBlockState AIR = Blocks.AIR.getDefaultState(); + private LevelChunk prev = null; public BlockStateInterface(IPlayerContext ctx) { this(ctx, false); @@ -62,64 +62,72 @@ public BlockStateInterface(IPlayerContext ctx, boolean copyLoadedChunks) { this(ctx.world(), (WorldData) ctx.worldData(), copyLoadedChunks); } - public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedChunks) { + public BlockStateInterface(Level world, WorldData worldData, boolean copyLoadedChunks) { this.world = world; + this.worldBorder = new BetterWorldBorder(world.getWorldBorder()); this.worldData = worldData; - Long2ObjectMap worldLoaded = ((IChunkProviderClient) world.getChunkProvider()).loadedChunks(); if (copyLoadedChunks) { - this.loadedChunks = new Long2ObjectOpenHashMap<>(worldLoaded); // make a copy that we can safely access from another thread + this.provider = ((IClientChunkProvider) world.getChunkSource()).createThreadSafeCopy(); } else { - this.loadedChunks = worldLoaded; // this will only be used on the main thread + this.provider = (ClientChunkCache) world.getChunkSource(); } this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.value; - if (!Minecraft.getMinecraft().isCallingFromMinecraftThread()) { + if (!Minecraft.getInstance().isSameThread()) { throw new IllegalStateException(); } this.isPassableBlockPos = new BlockPos.MutableBlockPos(); this.access = new BlockStateInterfaceAccessWrapper(this); } - public boolean worldContainsLoadedChunk(int blockX, int blockZ) { - return loadedChunks.containsKey(ChunkPos.asLong(blockX >> 4, blockZ >> 4)); + public static BlockState get(IPlayerContext ctx, BlockPos pos) { + return new BlockStateInterface(ctx).get0(pos.getX(), pos.getY(), pos.getZ()); // immense iq + // can't just do world().get because that doesn't work for out of bounds + // and toBreak and stuff fails when the movement is instantiated out of load range but it's not able to BlockStateInterface.get what it's going to walk on } public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be called from the pathing thread because the pathing thread doesn't make a single blockpos pog return get(ctx, pos).getBlock(); } - public static IBlockState get(IPlayerContext ctx, BlockPos pos) { - return new BlockStateInterface(ctx).get0(pos.getX(), pos.getY(), pos.getZ()); // immense iq - // can't just do world().get because that doesn't work for out of bounds - // and toBreak and stuff fails when the movement is instantiated out of load range but it's not able to BlockStateInterface.get what it's going to walk on + // get the block at x,y,z from this chunk WITHOUT creating a single blockpos object + public static BlockState getFromChunk(LevelChunk chunk, int x, int y, int z) { + LevelChunkSection section = chunk.getSections()[y >> 4]; + if (section.hasOnlyAir()) { + return AIR; + } + return section.getBlockState(x & 15, y & 15, z & 15); } - public IBlockState get0(BlockPos pos) { - return get0(pos.getX(), pos.getY(), pos.getZ()); + public boolean worldContainsLoadedChunk(int blockX, int blockZ) { + return provider.hasChunk(blockX >> 4, blockZ >> 4); } - public IBlockState get0(int x, int y, int z) { // Mickey resigned + public BlockState get0(BlockPos pos) { + return get0(pos.getX(), pos.getY(), pos.getZ()); + } + public BlockState get0(int x, int y, int z) { // Mickey resigned + y -= world.dimensionType().minY(); // Invalid vertical position - if (y < 0 || y >= 256) { + if (y < 0 || y >= world.dimensionType().height()) { return AIR; } if (useTheRealWorld) { - Chunk cached = prev; + LevelChunk cached = prev; // there's great cache locality in block state lookups // generally it's within each movement // if it's the same chunk as last time // we can just skip the mc.world.getChunk lookup // which is a Long2ObjectOpenHashMap.get // see issue #113 - if (cached != null && cached.x == x >> 4 && cached.z == z >> 4) { - return cached.getBlockState(x, y, z); + if (cached != null && cached.getPos().x == x >> 4 && cached.getPos().z == z >> 4) { + return getFromChunk(cached, x, y, z); } - Chunk chunk = loadedChunks.get(ChunkPos.asLong(x >> 4, z >> 4)); - - if (chunk != null && chunk.isLoaded()) { + LevelChunk chunk = provider.getChunk(x >> 4, z >> 4, ChunkStatus.FULL, false); + if (chunk != null && !chunk.isEmpty()) { prev = chunk; - return chunk.getBlockState(x, y, z); + return getFromChunk(chunk, x, y, z); } } // same idea here, skip the Long2ObjectOpenHashMap.get if at all possible @@ -136,7 +144,7 @@ public IBlockState get0(int x, int y, int z) { // Mickey resigned prevCached = region; cached = region; } - IBlockState type = cached.getBlock(x & 511, y, z & 511); + BlockState type = cached.getBlock(x & 511, y, z & 511); if (type == null) { return AIR; } @@ -144,12 +152,12 @@ public IBlockState get0(int x, int y, int z) { // Mickey resigned } public boolean isLoaded(int x, int z) { - Chunk prevChunk = prev; - if (prevChunk != null && prevChunk.x == x >> 4 && prevChunk.z == z >> 4) { + LevelChunk prevChunk = prev; + if (prevChunk != null && prevChunk.getPos().x == x >> 4 && prevChunk.getPos().z == z >> 4) { return true; } - prevChunk = loadedChunks.get(ChunkPos.asLong(x >> 4, z >> 4)); - if (prevChunk != null && prevChunk.isLoaded()) { + prevChunk = provider.getChunk(x >> 4, z >> 4, ChunkStatus.FULL, false); + if (prevChunk != null && !prevChunk.isEmpty()) { prev = prevChunk; return true; } diff --git a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java index 6dded1dd5..126e457c4 100644 --- a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java +++ b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java @@ -17,15 +17,11 @@ package baritone.utils; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Biomes; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.WorldType; -import net.minecraft.world.biome.Biome; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; import javax.annotation.Nullable; @@ -34,7 +30,7 @@ * @since 11/5/2019 */ @SuppressWarnings("NullableProblems") -public final class BlockStateInterfaceAccessWrapper implements IBlockAccess { +public final class BlockStateInterfaceAccessWrapper implements BlockGetter { private final BlockStateInterface bsi; @@ -44,38 +40,29 @@ public final class BlockStateInterfaceAccessWrapper implements IBlockAccess { @Nullable @Override - public TileEntity getTileEntity(BlockPos pos) { + public BlockEntity getBlockEntity(BlockPos pos) { return null; } @Override - public int getCombinedLight(BlockPos pos, int lightValue) { - return 0; - } - - @Override - public IBlockState getBlockState(BlockPos pos) { + public BlockState getBlockState(BlockPos pos) { // BlockStateInterface#get0(BlockPos) btfo! return this.bsi.get0(pos.getX(), pos.getY(), pos.getZ()); } @Override - public boolean isAirBlock(BlockPos pos) { - return this.bsi.get0(pos.getX(), pos.getY(), pos.getZ()).getMaterial() == Material.AIR; + public FluidState getFluidState(BlockPos blockPos) { + return getBlockState(blockPos).getFluidState(); } @Override - public Biome getBiome(BlockPos pos) { - return Biomes.FOREST; + public int getHeight() { + return 255; } @Override - public int getStrongPower(BlockPos pos, EnumFacing direction) { + public int getMinBuildHeight() { return 0; } - @Override - public WorldType getWorldType() { - return this.bsi.world.getWorldType(); - } } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 1716d74b6..8e7c30c52 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -22,125 +22,148 @@ import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Helper; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.event.ClickEvent; -import org.lwjgl.BufferUtils; -import org.lwjgl.input.Mouse; -import org.lwjgl.util.glu.GLU; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; +import com.mojang.math.Vector4f; +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; import java.awt.*; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; import java.util.Collections; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; import static org.lwjgl.opengl.GL11.*; -public class GuiClick extends GuiScreen { +public class GuiClick extends Screen implements Helper { - // My name is Brady and I grant leijurv permission to use this pasted code - private final FloatBuffer MODELVIEW = BufferUtils.createFloatBuffer(16); - private final FloatBuffer PROJECTION = BufferUtils.createFloatBuffer(16); - private final IntBuffer VIEWPORT = BufferUtils.createIntBuffer(16); - private final FloatBuffer TO_WORLD_BUFFER = BufferUtils.createFloatBuffer(3); + private Matrix4f projectionViewMatrix; private BlockPos clickStart; private BlockPos currentMouseOver; + public GuiClick() { + super(Component.literal("CLICK")); + } + @Override - public boolean doesGuiPauseGame() { + public boolean isPauseScreen() { return false; } @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - int mx = Mouse.getX(); - int my = Mouse.getY(); - Vec3d near = toWorld(mx, my, 0); - Vec3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv + public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) { + double mx = mc.mouseHandler.xpos(); + double my = mc.mouseHandler.ypos(); + + my = mc.getWindow().getScreenHeight() - my; + my *= mc.getWindow().getHeight() / (double) mc.getWindow().getScreenHeight(); + mx *= mc.getWindow().getWidth() / (double) mc.getWindow().getScreenWidth(); + Vec3 near = toWorld(mx, my, 0); + Vec3 far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv + if (near != null && far != null) { - Vec3d viewerPos = new Vec3d(mc.getRenderManager().viewerPosX, mc.getRenderManager().viewerPosY, mc.getRenderManager().viewerPosZ); - RayTraceResult result = mc.world.rayTraceBlocks(near.add(viewerPos), far.add(viewerPos), false, false, true); - if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) { - currentMouseOver = result.getBlockPos(); + /// + Vec3 viewerPos = new Vec3(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); + LocalPlayer player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); + HitResult result = player.level.clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); + if (result != null && result.getType() == HitResult.Type.BLOCK) { + currentMouseOver = ((BlockHitResult) result).getBlockPos(); } } } @Override - protected void mouseReleased(int mouseX, int mouseY, int mouseButton) { + public boolean mouseReleased(double mouseX, double mouseY, int mouseButton) { if (currentMouseOver != null) { //Catch this, or else a click into void will result in a crash if (mouseButton == 0) { if (clickStart != null && !clickStart.equals(currentMouseOver)) { BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().removeAllSelections(); BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().addSelection(BetterBlockPos.from(clickStart), BetterBlockPos.from(currentMouseOver)); - ITextComponent component = new TextComponentString("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); - component.getStyle() - .setColor(TextFormatting.WHITE) - .setClickEvent(new ClickEvent( + MutableComponent component = Component.literal("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); + component.setStyle(component.getStyle() + .withColor(ChatFormatting.WHITE) + .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "help sel" - )); + ))); Helper.HELPER.logDirect(component); clickStart = null; } else { BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(currentMouseOver)); } } else if (mouseButton == 1) { - BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(currentMouseOver.up())); + BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(currentMouseOver.above())); } } clickStart = null; + return super.mouseReleased(mouseX, mouseY, mouseButton); } @Override - protected void mouseClicked(int mouseX, int mouseY, int mouseButton) { + public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { clickStart = currentMouseOver; + return super.mouseClicked(mouseX, mouseY, mouseButton); } - public void onRender() { - GlStateManager.getFloat(GL_MODELVIEW_MATRIX, (FloatBuffer) MODELVIEW.clear()); - GlStateManager.getFloat(GL_PROJECTION_MATRIX, (FloatBuffer) PROJECTION.clear()); - GlStateManager.glGetInteger(GL_VIEWPORT, (IntBuffer) VIEWPORT.clear()); + public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { + this.projectionViewMatrix = projectionMatrix.copy(); + this.projectionViewMatrix.multiply(modelViewStack.last().pose()); + this.projectionViewMatrix.invert(); if (currentMouseOver != null) { - Entity e = mc.getRenderViewEntity(); + Entity e = mc.getCameraEntity(); // drawSingleSelectionBox WHEN? - PathRenderer.drawManySelectionBoxes(e, Collections.singletonList(currentMouseOver), Color.CYAN); + PathRenderer.drawManySelectionBoxes(modelViewStack, e, Collections.singletonList(currentMouseOver), Color.CYAN); if (clickStart != null && !clickStart.equals(currentMouseOver)) { - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - GlStateManager.color(Color.RED.getColorComponents(null)[0], Color.RED.getColorComponents(null)[1], Color.RED.getColorComponents(null)[2], 0.4F); - GlStateManager.glLineWidth(Baritone.settings().pathRenderLineWidthPixels.value); - GlStateManager.disableTexture2D(); - GlStateManager.depthMask(false); - GlStateManager.disableDepth(); + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + //TODO: check + IRenderer.glColor(Color.RED, 0.4F); + RenderSystem.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); + RenderSystem.disableTexture(); + RenderSystem.depthMask(false); + RenderSystem.disableDepthTest(); BetterBlockPos a = new BetterBlockPos(currentMouseOver); BetterBlockPos b = new BetterBlockPos(clickStart); - IRenderer.drawAABB(new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); - GlStateManager.enableDepth(); + IRenderer.drawAABB(modelViewStack, new AABB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); + RenderSystem.enableDepthTest(); - GlStateManager.depthMask(true); - GlStateManager.enableTexture2D(); - GlStateManager.disableBlend(); + RenderSystem.depthMask(true); + RenderSystem.enableTexture(); + RenderSystem.disableBlend(); } } } - private Vec3d toWorld(double x, double y, double z) { - boolean result = GLU.gluUnProject((float) x, (float) y, (float) z, MODELVIEW, PROJECTION, VIEWPORT, (FloatBuffer) TO_WORLD_BUFFER.clear()); - if (result) { - return new Vec3d(TO_WORLD_BUFFER.get(0), TO_WORLD_BUFFER.get(1), TO_WORLD_BUFFER.get(2)); + private Vec3 toWorld(double x, double y, double z) { + if (this.projectionViewMatrix == null) { + return null; } - return null; + + x /= mc.getWindow().getWidth(); + y /= mc.getWindow().getHeight(); + x = x * 2 - 1; + y = y * 2 - 1; + + Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F); + pos.transform(this.projectionViewMatrix); + if (pos.w() == 0) { + return null; + } + + pos.perspectiveDivide(); + return new Vec3(pos.x(), pos.y(), pos.z()); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index e5a5ee907..7dbbe1a92 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -20,12 +20,11 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; import baritone.api.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.entity.RenderManager; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.util.math.AxisAlignedBB; +import baritone.utils.accessor.IEntityRenderManager; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.*; +import com.mojang.math.Matrix4f; +import net.minecraft.world.phys.AABB; import java.awt.*; @@ -33,26 +32,31 @@ public interface IRenderer { - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder buffer = tessellator.getBuffer(); - RenderManager renderManager = Helper.mc.getRenderManager(); + Tesselator tessellator = Tesselator.getInstance(); + BufferBuilder buffer = tessellator.getBuilder(); + IEntityRenderManager renderManager = (IEntityRenderManager) Helper.mc.getEntityRenderDispatcher(); Settings settings = BaritoneAPI.getSettings(); + float[] color = new float[]{1.0F, 1.0F, 1.0F, 255.0F}; + static void glColor(Color color, float alpha) { float[] colorComponents = color.getColorComponents(null); - GlStateManager.color(colorComponents[0], colorComponents[1], colorComponents[2], alpha); + IRenderer.color[0] = colorComponents[0]; + IRenderer.color[1] = colorComponents[1]; + IRenderer.color[2] = colorComponents[2]; + IRenderer.color[3] = alpha; } static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); glColor(color, alpha); - GlStateManager.glLineWidth(lineWidth); - GlStateManager.disableTexture2D(); - GlStateManager.depthMask(false); + RenderSystem.lineWidth(lineWidth); + RenderSystem.disableTexture(); + RenderSystem.depthMask(false); if (ignoreDepth) { - GlStateManager.disableDepth(); + RenderSystem.disableDepthTest(); } } @@ -62,49 +66,51 @@ static void startLines(Color color, float lineWidth, boolean ignoreDepth) { static void endLines(boolean ignoredDepth) { if (ignoredDepth) { - GlStateManager.enableDepth(); + RenderSystem.enableDepthTest(); } - GlStateManager.depthMask(true); - GlStateManager.enableTexture2D(); - GlStateManager.disableBlend(); + RenderSystem.depthMask(true); + RenderSystem.enableTexture(); + RenderSystem.disableBlend(); } - static void drawAABB(AxisAlignedBB aabb) { - AxisAlignedBB toDraw = aabb.offset(-renderManager.viewerPosX, -renderManager.viewerPosY, -renderManager.viewerPosZ); + static void drawAABB(PoseStack stack, AABB aabb) { + AABB toDraw = aabb.move(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); - buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); + Matrix4f matrix4f = stack.last().pose(); + //TODO: check + buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); // bottom - buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); // top - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); // corners - buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); - tessellator.draw(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + tessellator.end(); } - static void drawAABB(AxisAlignedBB aabb, double expand) { - drawAABB(aabb.grow(expand, expand, expand)); + static void drawAABB(PoseStack stack, AABB aabb, double expand) { + drawAABB(stack, aabb.inflate(expand, expand, expand)); } } diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index d1c4689a2..b0e9beeb9 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -24,7 +24,7 @@ import baritone.api.utils.input.Input; import baritone.behavior.Behavior; import net.minecraft.client.Minecraft; -import net.minecraft.util.MovementInputFromOptions; +import net.minecraft.client.player.KeyboardInput; import java.util.HashMap; import java.util.Map; @@ -95,12 +95,12 @@ public final void onTick(TickEvent event) { blockPlaceHelper.tick(isInputForcedDown(Input.CLICK_RIGHT)); if (inControl()) { - if (ctx.player().movementInput.getClass() != PlayerMovementInput.class) { - ctx.player().movementInput = new PlayerMovementInput(this); + if (ctx.player().input.getClass() != PlayerMovementInput.class) { + ctx.player().input = new PlayerMovementInput(this); } } else { - if (ctx.player().movementInput.getClass() == PlayerMovementInput.class) { // allow other movement inputs that aren't this one, e.g. for a freecam - ctx.player().movementInput = new MovementInputFromOptions(Minecraft.getMinecraft().gameSettings); + if (ctx.player().input.getClass() == PlayerMovementInput.class) { // allow other movement inputs that aren't this one, e.g. for a freecam + ctx.player().input = new KeyboardInput(Minecraft.getInstance().options); } } // only set it if it was previously incorrect diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index de29bca43..0144a532e 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -26,15 +26,21 @@ import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.tileentity.TileEntityBeaconRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.math.Matrix4f; +import net.minecraft.client.renderer.blockentity.BeaconRenderer; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import java.awt.*; import java.util.Collection; @@ -47,28 +53,44 @@ * @author Brady * @since 8/9/2018 */ -public final class PathRenderer implements IRenderer { +public final class PathRenderer implements IRenderer, Helper { - private PathRenderer() {} + private static final ResourceLocation TEXTURE_BEACON_BEAM = new ResourceLocation("textures/entity/beacon_beam.png"); + + + private PathRenderer() { + } + + public static double posX() { + return renderManager.renderPosX(); + } + + public static double posY() { + return renderManager.renderPosY(); + } + + public static double posZ() { + return renderManager.renderPosZ(); + } public static void render(RenderEvent event, PathingBehavior behavior) { float partialTicks = event.getPartialTicks(); Goal goal = behavior.getGoal(); - if (Helper.mc.currentScreen instanceof GuiClick) { - ((GuiClick) Helper.mc.currentScreen).onRender(); + if (Helper.mc.screen instanceof GuiClick) { + ((GuiClick) Helper.mc.screen).onRender(event.getModelViewStack(), event.getProjectionMatrix()); } - int thisPlayerDimension = behavior.baritone.getPlayerContext().world().provider.getDimensionType().getId(); - int currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().provider.getDimensionType().getId(); + DimensionType thisPlayerDimension = behavior.baritone.getPlayerContext().world().dimensionType(); + DimensionType currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().dimensionType(); if (thisPlayerDimension != currentRenderViewDimension) { // this is a path for a bot in a different dimension, don't render it return; } - Entity renderView = Helper.mc.getRenderViewEntity(); + Entity renderView = Helper.mc.getCameraEntity(); - if (renderView.world != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { + if (renderView.level != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { System.out.println("I have no idea what's going on"); System.out.println("The primary baritone is in a different world than the render view entity"); System.out.println("Not rendering the path"); @@ -76,7 +98,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { } if (goal != null && settings.renderGoal.value) { - drawDankLitGoalBox(renderView, goal, partialTicks, settings.colorGoalBox.value); + drawDankLitGoalBox(event.getModelViewStack(), renderView, goal, partialTicks, settings.colorGoalBox.value); } if (!settings.renderPath.value) { @@ -86,9 +108,9 @@ public static void render(RenderEvent event, PathingBehavior behavior) { PathExecutor current = behavior.getCurrent(); // this should prevent most race conditions? PathExecutor next = behavior.getNext(); // like, now it's not possible for current!=null to be true, then suddenly false because of another thread if (current != null && settings.renderSelectionBoxes.value) { - drawManySelectionBoxes(renderView, current.toBreak(), settings.colorBlocksToBreak.value); - drawManySelectionBoxes(renderView, current.toPlace(), settings.colorBlocksToPlace.value); - drawManySelectionBoxes(renderView, current.toWalkInto(), settings.colorBlocksToWalkInto.value); + drawManySelectionBoxes(event.getModelViewStack(), renderView, current.toBreak(), settings.colorBlocksToBreak.value); + drawManySelectionBoxes(event.getModelViewStack(), renderView, current.toPlace(), settings.colorBlocksToPlace.value); + drawManySelectionBoxes(event.getModelViewStack(), renderView, current.toWalkInto(), settings.colorBlocksToWalkInto.value); } //drawManySelectionBoxes(player, Collections.singletonList(behavior.pathStart()), partialTicks, Color.WHITE); @@ -96,27 +118,27 @@ public static void render(RenderEvent event, PathingBehavior behavior) { // Render the current path, if there is one if (current != null && current.getPath() != null) { int renderBegin = Math.max(current.getPosition() - 3, 0); - drawPath(current.getPath(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); + drawPath(event.getModelViewStack(), current.getPath(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); } if (next != null && next.getPath() != null) { - drawPath(next.getPath(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); + drawPath(event.getModelViewStack(), next.getPath(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); } // If there is a path calculation currently running, render the path calculation process behavior.getInProgress().ifPresent(currentlyRunning -> { currentlyRunning.bestPathSoFar().ifPresent(p -> { - drawPath(p, 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); + drawPath(event.getModelViewStack(), p, 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); }); currentlyRunning.pathToMostRecentNodeConsidered().ifPresent(mr -> { - drawPath(mr, 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); - drawManySelectionBoxes(renderView, Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); + drawPath(event.getModelViewStack(), mr, 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); + drawManySelectionBoxes(event.getModelViewStack(), renderView, Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); }); }); } - public static void drawPath(IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + public static void drawPath(PoseStack stack, IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); int fadeStart = fadeStart0 + startIndex; @@ -149,61 +171,59 @@ public static void drawPath(IPath path, int startIndex, Color color, boolean fad } alpha = 0.4F * (1.0F - (float) (i - fadeStart) / (float) (fadeEnd - fadeStart)); } - IRenderer.glColor(color, alpha); } - drawLine(start.x, start.y, start.z, end.x, end.y, end.z); + drawLine(stack, start.x, start.y, start.z, end.x, end.y, end.z); - tessellator.draw(); + tessellator.end(); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } - public static void drawLine(double x1, double y1, double z1, double x2, double y2, double z2) { - double vpX = renderManager.viewerPosX; - double vpY = renderManager.viewerPosY; - double vpZ = renderManager.viewerPosZ; + + public static void drawLine(PoseStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { + Matrix4f matrix4f = stack.last().pose(); + + double vpX = posX(); + double vpY = posY(); + double vpZ = posZ(); boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; - buffer.begin(renderPathAsFrickinThingy ? GL_LINE_STRIP : GL_LINES, DefaultVertexFormats.POSITION); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); - buffer.pos(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).endVertex(); + //TODO: check + buffer.begin(renderPathAsFrickinThingy ? VertexFormat.Mode.DEBUG_LINE_STRIP : VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); + buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); if (renderPathAsFrickinThingy) { - buffer.pos(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).endVertex(); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).endVertex(); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); + buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); } } - public static void drawManySelectionBoxes(Entity player, Collection positions, Color color) { + public static void drawManySelectionBoxes(PoseStack stack, Entity player, Collection positions, Color color) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderSelectionBoxesIgnoreDepth.value); //BlockPos blockpos = movingObjectPositionIn.getBlockPos(); BlockStateInterface bsi = new BlockStateInterface(BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext()); // TODO this assumes same dimension between primary baritone and render view? is this safe? positions.forEach(pos -> { - IBlockState state = bsi.get0(pos); - AxisAlignedBB toDraw; - - if (state.getBlock().equals(Blocks.AIR)) { - toDraw = Blocks.DIRT.getDefaultState().getSelectedBoundingBox(player.world, pos); - } else { - toDraw = state.getSelectedBoundingBox(player.world, pos); - } - - IRenderer.drawAABB(toDraw, .002D); + BlockState state = bsi.get0(pos); + VoxelShape shape = state.getShape(player.level, pos); + AABB toDraw = shape.isEmpty() ? Shapes.block().bounds() : shape.bounds(); + toDraw = toDraw.move(pos); + IRenderer.drawAABB(stack, toDraw, .002D); }); IRenderer.endLines(settings.renderSelectionBoxesIgnoreDepth.value); } - public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTicks, Color color) { - double renderPosX = renderManager.viewerPosX; - double renderPosY = renderManager.viewerPosY; - double renderPosZ = renderManager.viewerPosZ; + public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, float partialTicks, Color color) { + double renderPosX = posX(); + double renderPosY = posY(); + double renderPosZ = posZ(); double minX, maxX; double minZ, maxZ; double minY, maxY; @@ -211,9 +231,8 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic if (!settings.renderGoalAnimated.value) { // y = 1 causes rendering issues when the player is at the same y as the top of a block for some reason y = 0.999F; - } - else { - y = MathHelper.cos((float) (((float) ((System.nanoTime() / 100000L) % 20000L)) / 20000F * Math.PI * 2)); + } else { + y = Mth.cos((float) (((float) ((System.nanoTime() / 100000L) % 20000L)) / 20000F * Math.PI * 2)); } if (goal instanceof IGoalRenderPos) { BlockPos goalPos = ((IGoalRenderPos) goal).getGoalPos(); @@ -239,26 +258,36 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic if (settings.renderGoalXZBeacon.value) { glPushAttrib(GL_LIGHTING_BIT); - Helper.mc.getTextureManager().bindTexture(TileEntityBeaconRenderer.TEXTURE_BEACON_BEAM); - + //TODO: check + Helper.mc.getTextureManager().bindForSetup(TEXTURE_BEACON_BEAM); if (settings.renderGoalIgnoreDepth.value) { - GlStateManager.disableDepth(); + RenderSystem.disableDepthTest(); } - TileEntityBeaconRenderer.renderBeamSegment( - goalPos.getX() - renderPosX, - -renderPosY, - goalPos.getZ() - renderPosZ, + stack.pushPose(); // push + stack.translate(goalPos.getX() - renderPosX, -renderPosY, goalPos.getZ() - renderPosZ); // translate + + //TODO: check + BeaconRenderer.renderBeaconBeam( + stack, + mc.renderBuffers().bufferSource(), + TEXTURE_BEACON_BEAM, settings.renderGoalAnimated.value ? partialTicks : 0, - 1.0, - settings.renderGoalAnimated.value ? player.world.getTotalWorldTime() : 0, + 1.0F, + settings.renderGoalAnimated.value ? player.level.getGameTime() : 0, 0, 256, - color.getColorComponents(null) + color.getColorComponents(null), + + // Arguments filled by the private method lol + 0.2F, + 0.25F ); + stack.popPose(); // pop + if (settings.renderGoalIgnoreDepth.value) { - GlStateManager.enableDepth(); + RenderSystem.enableDepthTest(); } glPopAttrib(); @@ -276,18 +305,18 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic maxY = 256 - renderPosY; } else if (goal instanceof GoalComposite) { for (Goal g : ((GoalComposite) goal).goals()) { - drawDankLitGoalBox(player, g, partialTicks, color); + drawDankLitGoalBox(stack, player, g, partialTicks, color); } return; } else if (goal instanceof GoalInverted) { - drawDankLitGoalBox(player, ((GoalInverted) goal).origin, partialTicks, settings.colorInvertedGoalBox.value); + drawDankLitGoalBox(stack, player, ((GoalInverted) goal).origin, partialTicks, settings.colorInvertedGoalBox.value); return; } else if (goal instanceof GoalYLevel) { GoalYLevel goalpos = (GoalYLevel) goal; - minX = player.posX - settings.yLevelBoxSize.value - renderPosX; - minZ = player.posZ - settings.yLevelBoxSize.value - renderPosZ; - maxX = player.posX + settings.yLevelBoxSize.value - renderPosX; - maxZ = player.posZ + settings.yLevelBoxSize.value - renderPosZ; + minX = player.position().x - settings.yLevelBoxSize.value - renderPosX; + minZ = player.position().z - settings.yLevelBoxSize.value - renderPosZ; + maxX = player.position().x + settings.yLevelBoxSize.value - renderPosX; + maxZ = player.position().z + settings.yLevelBoxSize.value - renderPosZ; minY = ((GoalYLevel) goal).level - renderPosY; maxY = minY + 2; y1 = 1 + y + goalpos.level - renderPosY; @@ -298,31 +327,35 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic IRenderer.startLines(color, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); - renderHorizontalQuad(minX, maxX, minZ, maxZ, y1); - renderHorizontalQuad(minX, maxX, minZ, maxZ, y2); - - buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); - buffer.pos(minX, minY, minZ).endVertex(); - buffer.pos(minX, maxY, minZ).endVertex(); - buffer.pos(maxX, minY, minZ).endVertex(); - buffer.pos(maxX, maxY, minZ).endVertex(); - buffer.pos(maxX, minY, maxZ).endVertex(); - buffer.pos(maxX, maxY, maxZ).endVertex(); - buffer.pos(minX, minY, maxZ).endVertex(); - buffer.pos(minX, maxY, maxZ).endVertex(); - tessellator.draw(); + renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y1); + renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); + + Matrix4f matrix4f = stack.last().pose(); + buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); + buffer.vertex(matrix4f, (float) minX, (float) minY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) minY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); + tessellator.end(); IRenderer.endLines(settings.renderGoalIgnoreDepth.value); } - private static void renderHorizontalQuad(double minX, double maxX, double minZ, double maxZ, double y) { + private static void renderHorizontalQuad(PoseStack stack, double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { - buffer.begin(GL_LINE_LOOP, DefaultVertexFormats.POSITION); - buffer.pos(minX, y, minZ).endVertex(); - buffer.pos(maxX, y, minZ).endVertex(); - buffer.pos(maxX, y, maxZ).endVertex(); - buffer.pos(minX, y, maxZ).endVertex(); - tessellator.draw(); + Matrix4f matrix4f = stack.last().pose(); + //TODO: check + buffer.begin(VertexFormat.Mode.DEBUG_LINE_STRIP, DefaultVertexFormat.POSITION_COLOR); + buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) maxX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + tessellator.end(); } } } diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index a83e53a1e..637d515f8 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -27,7 +27,7 @@ import baritone.api.process.PathingCommandType; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; import java.util.*; diff --git a/src/main/java/baritone/utils/PlayerMovementInput.java b/src/main/java/baritone/utils/PlayerMovementInput.java index 22e2063ae..f8c9bbe21 100644 --- a/src/main/java/baritone/utils/PlayerMovementInput.java +++ b/src/main/java/baritone/utils/PlayerMovementInput.java @@ -18,9 +18,8 @@ package baritone.utils; import baritone.api.utils.input.Input; -import net.minecraft.util.MovementInput; -public class PlayerMovementInput extends MovementInput { +public class PlayerMovementInput extends net.minecraft.client.player.Input { private final InputOverrideHandler handler; @@ -28,31 +27,32 @@ public class PlayerMovementInput extends MovementInput { this.handler = handler; } - public void updatePlayerMoveState() { - this.moveStrafe = 0.0F; - this.moveForward = 0.0F; + @Override + public void tick(boolean p_225607_1_, float f) { + this.leftImpulse = 0.0F; + this.forwardImpulse = 0.0F; - jump = handler.isInputForcedDown(Input.JUMP); // oppa gangnam style + this.jumping = handler.isInputForcedDown(Input.JUMP); // oppa gangnam style - if (this.forwardKeyDown = handler.isInputForcedDown(Input.MOVE_FORWARD)) { - this.moveForward++; + if (this.up = handler.isInputForcedDown(Input.MOVE_FORWARD)) { + this.forwardImpulse++; } - if (this.backKeyDown = handler.isInputForcedDown(Input.MOVE_BACK)) { - this.moveForward--; + if (this.down = handler.isInputForcedDown(Input.MOVE_BACK)) { + this.forwardImpulse--; } - if (this.leftKeyDown = handler.isInputForcedDown(Input.MOVE_LEFT)) { - this.moveStrafe++; + if (this.left = handler.isInputForcedDown(Input.MOVE_LEFT)) { + this.leftImpulse++; } - if (this.rightKeyDown = handler.isInputForcedDown(Input.MOVE_RIGHT)) { - this.moveStrafe--; + if (this.right = handler.isInputForcedDown(Input.MOVE_RIGHT)) { + this.leftImpulse--; } - if (this.sneak = handler.isInputForcedDown(Input.SNEAK)) { - this.moveStrafe *= 0.3D; - this.moveForward *= 0.3D; + if (this.shiftKeyDown = handler.isInputForcedDown(Input.SNEAK)) { + this.leftImpulse *= 0.3D; + this.forwardImpulse *= 0.3D; } } } diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 4d17b4ea1..f7d5964ff 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -18,16 +18,15 @@ package baritone.utils; import baritone.Baritone; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.init.Enchantments; -import net.minecraft.init.MobEffects; -import net.minecraft.item.Item.ToolMaterial; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemSword; -import net.minecraft.item.ItemTool; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.SwordItem; +import net.minecraft.world.item.TieredItem; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import java.util.HashMap; import java.util.Map; @@ -51,9 +50,9 @@ public class ToolSet { */ private final Function backendCalculation; - private final EntityPlayerSP player; + private final LocalPlayer player; - public ToolSet(EntityPlayerSP player) { + public ToolSet(LocalPlayer player) { breakStrengthCache = new HashMap<>(); this.player = player; @@ -66,36 +65,63 @@ public ToolSet(EntityPlayerSP player) { } } + /** + * Calculates how long would it take to mine the specified block given the best tool + * in this toolset is used. A negative value is returned if the specified block is unbreakable. + * + * @param item the item to mine it with + * @param state the blockstate to be mined + * @return how long it would take in ticks + */ + public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { + float hardness = state.getDestroySpeed(null, null); + if (hardness < 0) { + return -1; + } + + float speed = item.getDestroySpeed(state); + if (speed > 1) { + int effLevel = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_EFFICIENCY, item); + if (effLevel > 0 && !item.isEmpty()) { + speed += effLevel * effLevel + 1; + } + } + + speed /= hardness; + if (!state.requiresCorrectToolForDrops() || (!item.isEmpty() && item.isCorrectToolForDrops(state))) { + return speed / 30; + } else { + return speed / 100; + } + } + /** * Using the best tool on the hotbar, how fast we can mine this block * * @param state the blockstate to be mined * @return the speed of how fast we'll mine it. 1/(time in ticks) */ - public double getStrVsBlock(IBlockState state) { + public double getStrVsBlock(BlockState state) { return breakStrengthCache.computeIfAbsent(state.getBlock(), backendCalculation); } /** * Evaluate the material cost of a possible tool. The priority matches the - * listed order in the Item.ToolMaterial enum. + * harvest level order; there is a chance for multiple at the same with modded tools + * but in that case we don't really care. * * @param itemStack a possibly empty ItemStack - * @return values range from -1 to 4 + * @return values from 0 up */ private int getMaterialCost(ItemStack itemStack) { - if (itemStack.getItem() instanceof ItemTool) { - ItemTool tool = (ItemTool) itemStack.getItem(); - return ToolMaterial.valueOf(tool.getToolMaterialName()).ordinal(); + if (itemStack.getItem() instanceof TieredItem) { + TieredItem tool = (TieredItem) itemStack.getItem(); + return tool.getTier().getLevel(); } else { return -1; } } - public boolean hasSilkTouch(ItemStack stack) { - return EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; - } - /** * Calculate which tool on the hotbar is best for mining, depending on an override setting, * related to auto tool movement cost, it will either return current selected slot, or the best slot. @@ -108,6 +134,10 @@ public int getBestSlot(Block b, boolean preferSilkTouch) { return getBestSlot(b, preferSilkTouch, false); } + public boolean hasSilkTouch(ItemStack stack) { + return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; + } + public int getBestSlot(Block b, boolean preferSilkTouch, boolean pathingCalculation) { /* @@ -115,21 +145,21 @@ public int getBestSlot(Block b, boolean preferSilkTouch, boolean pathingCalculat possible, this lets us make pathing depend on the actual tool to be used (if auto tool is disabled) */ if (!Baritone.settings().autoTool.value && pathingCalculation) { - return player.inventory.currentItem; + return player.getInventory().selected; } int best = 0; double highestSpeed = Double.NEGATIVE_INFINITY; int lowestCost = Integer.MIN_VALUE; boolean bestSilkTouch = false; - IBlockState blockState = b.getDefaultState(); + BlockState blockState = b.defaultBlockState(); for (int i = 0; i < 9; i++) { - ItemStack itemStack = player.inventory.getStackInSlot(i); - if (!Baritone.settings().useSwordToMine.value && itemStack.getItem() instanceof ItemSword) { + ItemStack itemStack = player.getInventory().getItem(i); + if (!Baritone.settings().useSwordToMine.value && itemStack.getItem() instanceof SwordItem) { continue; } - - if (Baritone.settings().itemSaver.value && (itemStack.getItemDamage() + Baritone.settings().itemSaverThreshold.value) >= itemStack.getMaxDamage() && itemStack.getMaxDamage() > 1) { + + if (Baritone.settings().itemSaver.value && (itemStack.getDamageValue() + Baritone.settings().itemSaverThreshold.value) >= itemStack.getMaxDamage() && itemStack.getMaxDamage() > 1) { continue; } double speed = calculateSpeedVsBlock(itemStack, blockState); @@ -153,49 +183,19 @@ possible, this lets us make pathing depend on the actual tool to be used (if aut return best; } - /** - * Calculate how effectively a block can be destroyed - * - * @param b the blockstate to be mined - * @return A double containing the destruction ticks with the best tool - */ - private double getBestDestructionTime(Block b) { - ItemStack stack = player.inventory.getStackInSlot(getBestSlot(b, false, true)); - return calculateSpeedVsBlock(stack, b.getDefaultState()) * avoidanceMultiplier(b); - } - private double avoidanceMultiplier(Block b) { return Baritone.settings().blocksToAvoidBreaking.value.contains(b) ? Baritone.settings().avoidBreakingMultiplier.value : 1; } /** - * Calculates how long would it take to mine the specified block given the best tool - * in this toolset is used. A negative value is returned if the specified block is unbreakable. + * Calculate how effectively a block can be destroyed * - * @param item the item to mine it with - * @param state the blockstate to be mined - * @return how long it would take in ticks + * @param b the blockstate to be mined + * @return A double containing the destruction ticks with the best tool */ - public static double calculateSpeedVsBlock(ItemStack item, IBlockState state) { - float hardness = state.getBlockHardness(null, null); - if (hardness < 0) { - return -1; - } - - float speed = item.getDestroySpeed(state); - if (speed > 1) { - int effLevel = EnchantmentHelper.getEnchantmentLevel(Enchantments.EFFICIENCY, item); - if (effLevel > 0 && !item.isEmpty()) { - speed += effLevel * effLevel + 1; - } - } - - speed /= hardness; - if (state.getMaterial().isToolNotRequired() || (!item.isEmpty() && item.canHarvestBlock(state))) { - return speed / 30; - } else { - return speed / 100; - } + private double getBestDestructionTime(Block b) { + ItemStack stack = player.getInventory().getItem(getBestSlot(b, false, true)); + return calculateSpeedVsBlock(stack, b.defaultBlockState()) * avoidanceMultiplier(b); } /** @@ -205,11 +205,11 @@ public static double calculateSpeedVsBlock(ItemStack item, IBlockState state) { */ private double potionAmplifier() { double speed = 1; - if (player.isPotionActive(MobEffects.HASTE)) { - speed *= 1 + (player.getActivePotionEffect(MobEffects.HASTE).getAmplifier() + 1) * 0.2; + if (player.hasEffect(MobEffects.DIG_SPEED)) { + speed *= 1 + (player.getEffect(MobEffects.DIG_SPEED).getAmplifier() + 1) * 0.2; } - if (player.isPotionActive(MobEffects.MINING_FATIGUE)) { - switch (player.getActivePotionEffect(MobEffects.MINING_FATIGUE).getAmplifier()) { + if (player.hasEffect(MobEffects.DIG_SLOWDOWN)) { + switch (player.getEffect(MobEffects.DIG_SLOWDOWN).getAmplifier()) { case 0: speed *= 0.3; break; diff --git a/src/main/java/baritone/utils/accessor/IBlockStateContainer.java b/src/main/java/baritone/utils/accessor/IBlockStateContainer.java deleted file mode 100644 index 39572fc5d..000000000 --- a/src/main/java/baritone/utils/accessor/IBlockStateContainer.java +++ /dev/null @@ -1,10 +0,0 @@ -package baritone.utils.accessor; - -import net.minecraft.block.state.IBlockState; - -public interface IBlockStateContainer { - - IBlockState getAtPalette(int index); - - int[] storageArray(); -} diff --git a/src/api/java/baritone/api/cache/IRememberedInventory.java b/src/main/java/baritone/utils/accessor/IChunkArray.java similarity index 66% rename from src/api/java/baritone/api/cache/IRememberedInventory.java rename to src/main/java/baritone/utils/accessor/IChunkArray.java index a7890fe3a..4c76b44fe 100644 --- a/src/api/java/baritone/api/cache/IRememberedInventory.java +++ b/src/main/java/baritone/utils/accessor/IChunkArray.java @@ -15,25 +15,19 @@ * along with Baritone. If not, see . */ -package baritone.api.cache; +package baritone.utils.accessor; -import net.minecraft.item.ItemStack; +import java.util.concurrent.atomic.AtomicReferenceArray; +import net.minecraft.world.level.chunk.LevelChunk; -import java.util.List; +public interface IChunkArray { + void copyFrom(IChunkArray other); -/** - * @author Brady - * @since 9/23/2018 - */ -public interface IRememberedInventory { + AtomicReferenceArray getChunks(); + + int centerX(); - /** - * @return The contents of this inventory - */ - List getContents(); + int centerZ(); - /** - * @return The number of slots in this inventory - */ - int getSize(); + int viewDistance(); } diff --git a/src/main/java/baritone/utils/accessor/IChunkProviderClient.java b/src/main/java/baritone/utils/accessor/IChunkProviderClient.java index e5fde40b4..edeac5080 100644 --- a/src/main/java/baritone/utils/accessor/IChunkProviderClient.java +++ b/src/main/java/baritone/utils/accessor/IChunkProviderClient.java @@ -18,9 +18,9 @@ package baritone.utils.accessor; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.level.chunk.LevelChunk; public interface IChunkProviderClient { - Long2ObjectMap loadedChunks(); + Long2ObjectMap loadedChunks(); } diff --git a/src/main/java/baritone/utils/accessor/IChunkProviderServer.java b/src/main/java/baritone/utils/accessor/IClientChunkProvider.java similarity index 75% rename from src/main/java/baritone/utils/accessor/IChunkProviderServer.java rename to src/main/java/baritone/utils/accessor/IClientChunkProvider.java index e3e412b58..145f8d3af 100644 --- a/src/main/java/baritone/utils/accessor/IChunkProviderServer.java +++ b/src/main/java/baritone/utils/accessor/IClientChunkProvider.java @@ -17,15 +17,10 @@ package baritone.utils.accessor; -import net.minecraft.world.WorldProvider; -import net.minecraft.world.chunk.storage.IChunkLoader; +import net.minecraft.client.multiplayer.ClientChunkCache; -/** - * @author Brady - * @see WorldProvider - * @since 8/4/2018 - */ -public interface IChunkProviderServer { +public interface IClientChunkProvider { + ClientChunkCache createThreadSafeCopy(); - IChunkLoader getChunkLoader(); + IChunkArray extractReferenceArray(); } diff --git a/src/launch/java/baritone/launch/mixins/MixinAnvilChunkLoader.java b/src/main/java/baritone/utils/accessor/IEntityRenderManager.java similarity index 54% rename from src/launch/java/baritone/launch/mixins/MixinAnvilChunkLoader.java rename to src/main/java/baritone/utils/accessor/IEntityRenderManager.java index 8b3ea0afb..7c5aa210d 100644 --- a/src/launch/java/baritone/launch/mixins/MixinAnvilChunkLoader.java +++ b/src/main/java/baritone/utils/accessor/IEntityRenderManager.java @@ -15,29 +15,13 @@ * along with Baritone. If not, see . */ -package baritone.launch.mixins; +package baritone.utils.accessor; -import baritone.utils.accessor.IAnvilChunkLoader; -import net.minecraft.world.chunk.storage.AnvilChunkLoader; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; +public interface IEntityRenderManager { -import java.io.File; + double renderPosX(); -/** - * @author Brady - * @since 9/4/2018 - */ -@Mixin(AnvilChunkLoader.class) -public class MixinAnvilChunkLoader implements IAnvilChunkLoader { - - @Shadow - @Final - private File chunkSaveLocation; + double renderPosY(); - @Override - public File getChunkSaveLocation() { - return this.chunkSaveLocation; - } + double renderPosZ(); } diff --git a/src/main/java/baritone/utils/accessor/IGuiScreen.java b/src/main/java/baritone/utils/accessor/IGuiScreen.java index beb5df31b..90b22d1a9 100644 --- a/src/main/java/baritone/utils/accessor/IGuiScreen.java +++ b/src/main/java/baritone/utils/accessor/IGuiScreen.java @@ -21,5 +21,5 @@ public interface IGuiScreen { - void openLink(URI url); + void openLinkInvoker(URI url); } diff --git a/src/main/java/baritone/utils/accessor/IPlayerControllerMP.java b/src/main/java/baritone/utils/accessor/IPlayerControllerMP.java index 354b9eefc..72e6f7ee3 100644 --- a/src/main/java/baritone/utils/accessor/IPlayerControllerMP.java +++ b/src/main/java/baritone/utils/accessor/IPlayerControllerMP.java @@ -17,7 +17,7 @@ package baritone.utils.accessor; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public interface IPlayerControllerMP { diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index ca377fb07..61229cce4 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -21,11 +21,11 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.IPlayerContext; import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; -import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.monster.EntityPigZombie; -import net.minecraft.entity.monster.EntitySpider; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.monster.EnderMan; +import net.minecraft.world.entity.monster.Spider; +import net.minecraft.world.entity.monster.ZombifiedPiglin; import java.util.ArrayList; import java.util.Collections; @@ -72,12 +72,12 @@ public static List create(IPlayerContext ctx) { .forEach(mobspawner -> res.add(new Avoidance(mobspawner, mobSpawnerCoeff, Baritone.settings().mobSpawnerAvoidanceRadius.value))); } if (mobCoeff != 1.0D) { - ctx.world().loadedEntityList.stream() - .filter(entity -> entity instanceof EntityMob) - .filter(entity -> (!(entity instanceof EntitySpider)) || ctx.player().getBrightness() < 0.5) - .filter(entity -> !(entity instanceof EntityPigZombie) || ((EntityPigZombie) entity).isAngry()) - .filter(entity -> !(entity instanceof EntityEnderman) || ((EntityEnderman) entity).isScreaming()) - .forEach(entity -> res.add(new Avoidance(new BlockPos(entity), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); + ctx.entitiesStream() + .filter(entity -> entity instanceof Mob) + .filter(entity -> (!(entity instanceof Spider)) || ctx.player().getLightLevelDependentMagicValue() < 0.5) + .filter(entity -> !(entity instanceof ZombifiedPiglin) || ((ZombifiedPiglin) entity).getLastHurtByMob() != null) + .filter(entity -> !(entity instanceof EnderMan) || ((EnderMan) entity).isCreepy()) + .forEach(entity -> res.add(new Avoidance(entity.blockPosition(), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); } return res; } diff --git a/src/main/java/baritone/utils/pathing/BetterWorldBorder.java b/src/main/java/baritone/utils/pathing/BetterWorldBorder.java index 9d8f3ef87..ef8e93ef4 100644 --- a/src/main/java/baritone/utils/pathing/BetterWorldBorder.java +++ b/src/main/java/baritone/utils/pathing/BetterWorldBorder.java @@ -17,7 +17,7 @@ package baritone.utils.pathing; -import net.minecraft.world.border.WorldBorder; +import net.minecraft.world.level.border.WorldBorder; /** * Essentially, a "rule" for the path finder, prevents proposed movements from attempting to venture @@ -31,10 +31,10 @@ public class BetterWorldBorder { private final double maxZ; public BetterWorldBorder(WorldBorder border) { - this.minX = border.minX(); - this.maxX = border.maxX(); - this.minZ = border.minZ(); - this.maxZ = border.maxZ(); + this.minX = border.getMinX(); + this.maxX = border.getMaxX(); + this.minZ = border.getMinZ(); + this.maxZ = border.getMaxZ(); } public boolean entirelyContains(int x, int z) { diff --git a/src/main/java/baritone/utils/pathing/PathBase.java b/src/main/java/baritone/utils/pathing/PathBase.java index de10fdf3c..5fff2f34a 100644 --- a/src/main/java/baritone/utils/pathing/PathBase.java +++ b/src/main/java/baritone/utils/pathing/PathBase.java @@ -23,7 +23,7 @@ import baritone.api.pathing.goals.Goal; import baritone.pathing.path.CutoffPath; import baritone.utils.BlockStateInterface; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public abstract class PathBase implements IPath { diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index 3cb498acd..0e9060379 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -23,9 +23,9 @@ import baritone.api.utils.IPlayerContext; import baritone.api.utils.IPlayerController; import baritone.api.utils.RayTraceUtils; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; /** * Implementation of {@link IPlayerContext} that provides information about the primary player. @@ -38,7 +38,7 @@ public enum PrimaryPlayerContext implements IPlayerContext, Helper { INSTANCE; @Override - public EntityPlayerSP player() { + public LocalPlayer player() { return mc.player; } @@ -48,8 +48,8 @@ public IPlayerController playerController() { } @Override - public World world() { - return mc.world; + public Level world() { + return mc.level; } @Override @@ -58,7 +58,7 @@ public IWorldData worldData() { } @Override - public RayTraceResult objectMouseOver() { + public HitResult objectMouseOver() { return RayTraceUtils.rayTraceTowards(player(), playerRotations(), playerController().getBlockReachDistance()); } } diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index b013f9161..70cc5a014 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -20,18 +20,17 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerController; import baritone.utils.accessor.IPlayerControllerMP; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.ClickType; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.GameType; -import net.minecraft.world.World; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.level.GameType; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; + /** * Implementation of {@link IPlayerController} that chains to the primary player controller's methods @@ -45,51 +44,52 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { @Override public void syncHeldItem() { - ((IPlayerControllerMP) mc.playerController).callSyncCurrentPlayItem(); + ((IPlayerControllerMP) mc.gameMode).callSyncCurrentPlayItem(); } @Override public boolean hasBrokenBlock() { - return ((IPlayerControllerMP) mc.playerController).getCurrentBlock().getY() == -1; + return ((IPlayerControllerMP) mc.gameMode).getCurrentBlock().getY() == -1; } @Override - public boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side) { - return mc.playerController.onPlayerDamageBlock(pos, side); + public boolean onPlayerDamageBlock(BlockPos pos, Direction side) { + return mc.gameMode.continueDestroyBlock(pos, side); } @Override public void resetBlockRemoving() { - mc.playerController.resetBlockRemoving(); + mc.gameMode.stopDestroyBlock(); } @Override - public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, EntityPlayer player) { - return mc.playerController.windowClick(windowId, slotId, mouseButton, type, player); + public void windowClick(int windowId, int slotId, int mouseButton, ClickType type, Player player) { + mc.gameMode.handleInventoryMouseClick(windowId, slotId, mouseButton, type, player); } @Override public GameType getGameType() { - return mc.playerController.getCurrentGameType(); + return mc.gameMode.getPlayerMode(); } @Override - public EnumActionResult processRightClickBlock(EntityPlayerSP player, World world, BlockPos pos, EnumFacing direction, Vec3d vec, EnumHand hand) { - return mc.playerController.processRightClickBlock(player, (WorldClient) world, pos, direction, vec, hand); + public InteractionResult processRightClickBlock(LocalPlayer player, Level world, InteractionHand hand, BlockHitResult result) { + // primaryplayercontroller is always in a ClientWorld so this is ok + return mc.gameMode.useItemOn(player, hand, result); } @Override - public EnumActionResult processRightClick(EntityPlayerSP player, World world, EnumHand hand) { - return mc.playerController.processRightClick(player, world, hand); + public InteractionResult processRightClick(LocalPlayer player, Level world, InteractionHand hand) { + return mc.gameMode.useItem(player, hand); } @Override - public boolean clickBlock(BlockPos loc, EnumFacing face) { - return mc.playerController.clickBlock(loc, face); + public boolean clickBlock(BlockPos loc, Direction face) { + return mc.gameMode.startDestroyBlock(loc, face); } @Override public void setHittingBlock(boolean hittingBlock) { - ((IPlayerControllerMP) mc.playerController).setIsHittingBlock(hittingBlock); + ((IPlayerControllerMP) mc.gameMode).setIsHittingBlock(hittingBlock); } } diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index 314422613..5762dded5 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -19,8 +19,8 @@ import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.MaskSchematic; -import net.minecraft.block.BlockAir; -import net.minecraft.block.state.IBlockState; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.state.BlockState; import java.util.OptionalInt; import java.util.function.Predicate; @@ -34,19 +34,13 @@ public MapArtSchematic(IStaticSchematic schematic) { this.heightMap = generateHeightMap(schematic); } - @Override - protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { - return y >= this.heightMap[x][z]; - } - private static int[][] generateHeightMap(IStaticSchematic schematic) { int[][] heightMap = new int[schematic.widthX()][schematic.lengthZ()]; for (int x = 0; x < schematic.widthX(); x++) { for (int z = 0; z < schematic.lengthZ(); z++) { - IBlockState[] column = schematic.getColumn(x, z); - - OptionalInt lowestBlockY = lastIndexMatching(column, state -> !(state.getBlock() instanceof BlockAir)); + BlockState[] column = schematic.getColumn(x, z); + OptionalInt lowestBlockY = lastIndexMatching(column, state -> !(state.getBlock() instanceof AirBlock)); if (lowestBlockY.isPresent()) { heightMap[x][z] = lowestBlockY.getAsInt(); } else { @@ -59,6 +53,11 @@ private static int[][] generateHeightMap(IStaticSchematic schematic) { return heightMap; } + @Override + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { + return y >= this.heightMap[x][z]; + } + private static OptionalInt lastIndexMatching(T[] arr, Predicate predicate) { for (int y = arr.length - 1; y >= 0; y--) { if (predicate.test(arr[y])) { diff --git a/src/main/java/baritone/utils/schematic/SelectionSchematic.java b/src/main/java/baritone/utils/schematic/SelectionSchematic.java index 243a3d4d0..bc62e19f0 100644 --- a/src/main/java/baritone/utils/schematic/SelectionSchematic.java +++ b/src/main/java/baritone/utils/schematic/SelectionSchematic.java @@ -20,9 +20,9 @@ import baritone.api.schematic.ISchematic; import baritone.api.schematic.MaskSchematic; import baritone.api.selection.ISelection; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.Vec3i; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.world.level.block.state.BlockState; import java.util.stream.Stream; @@ -33,18 +33,18 @@ public class SelectionSchematic extends MaskSchematic { public SelectionSchematic(ISchematic schematic, Vec3i origin, ISelection[] selections) { super(schematic); this.selections = Stream.of(selections).map( - sel -> sel - .shift(EnumFacing.WEST, origin.getX()) - .shift(EnumFacing.DOWN, origin.getY()) - .shift(EnumFacing.NORTH, origin.getZ())) + sel -> sel + .shift(Direction.WEST, origin.getX()) + .shift(Direction.DOWN, origin.getY()) + .shift(Direction.NORTH, origin.getZ())) .toArray(ISelection[]::new); } @Override - protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { for (ISelection selection : selections) { if (x >= selection.min().x && y >= selection.min().y && z >= selection.min().z - && x <= selection.max().x && y <= selection.max().y && z <= selection.max().z) { + && x <= selection.max().x && y <= selection.max().y && z <= selection.max().z) { return true; } } diff --git a/src/main/java/baritone/utils/schematic/StaticSchematic.java b/src/main/java/baritone/utils/schematic/StaticSchematic.java index 2251450a3..61618fbe1 100644 --- a/src/main/java/baritone/utils/schematic/StaticSchematic.java +++ b/src/main/java/baritone/utils/schematic/StaticSchematic.java @@ -19,7 +19,7 @@ import baritone.api.schematic.AbstractSchematic; import baritone.api.schematic.IStaticSchematic; -import net.minecraft.block.state.IBlockState; +import net.minecraft.world.level.block.state.BlockState; import java.util.List; @@ -31,20 +31,20 @@ */ public class StaticSchematic extends AbstractSchematic implements IStaticSchematic { - protected IBlockState[][][] states; + protected BlockState[][][] states; @Override - public IBlockState desiredState(int x, int y, int z, IBlockState current, List approxPlaceable) { + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { return this.states[x][z][y]; } @Override - public IBlockState getDirect(int x, int y, int z) { + public BlockState getDirect(int x, int y, int z) { return this.states[x][z][y]; } @Override - public IBlockState[] getColumn(int x, int z) { + public BlockState[] getColumn(int x, int z) { return this.states[x][z]; } } diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index fb20164bd..389066cc3 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -21,8 +21,8 @@ import baritone.api.schematic.format.ISchematicFormat; import baritone.utils.schematic.format.defaults.MCEditSchematic; import baritone.utils.schematic.format.defaults.SpongeSchematic; -import net.minecraft.nbt.CompressedStreamTools; -import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtIo; import org.apache.commons.io.FilenameUtils; import java.io.File; @@ -43,7 +43,7 @@ public enum DefaultSchematicFormats implements ISchematicFormat { MCEDIT("schematic") { @Override public IStaticSchematic parse(InputStream input) throws IOException { - return new MCEditSchematic(CompressedStreamTools.readCompressed(input)); + return new MCEditSchematic(NbtIo.readCompressed(input)); } }, @@ -55,8 +55,8 @@ public IStaticSchematic parse(InputStream input) throws IOException { SPONGE("schem") { @Override public IStaticSchematic parse(InputStream input) throws IOException { - NBTTagCompound nbt = CompressedStreamTools.readCompressed(input); - int version = nbt.getInteger("Version"); + CompoundTag nbt = NbtIo.readCompressed(input); + int version = nbt.getInt("Version"); switch (version) { case 1: case 2: diff --git a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java index 08e571c96..4693ea387 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java @@ -18,9 +18,12 @@ package baritone.utils.schematic.format.defaults; import baritone.utils.schematic.StaticSchematic; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.core.Registry; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.datafix.fixes.ItemIdFix; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; /** * @author Brady @@ -28,19 +31,19 @@ */ public final class MCEditSchematic extends StaticSchematic { - public MCEditSchematic(NBTTagCompound schematic) { + public MCEditSchematic(CompoundTag schematic) { String type = schematic.getString("Materials"); if (!type.equals("Alpha")) { throw new IllegalStateException("bad schematic " + type); } - this.x = schematic.getInteger("Width"); - this.y = schematic.getInteger("Height"); - this.z = schematic.getInteger("Length"); + this.x = schematic.getInt("Width"); + this.y = schematic.getInt("Height"); + this.z = schematic.getInt("Length"); byte[] blocks = schematic.getByteArray("Blocks"); - byte[] metadata = schematic.getByteArray("Data"); +// byte[] metadata = schematic.getByteArray("Data"); byte[] additional = null; - if (schematic.hasKey("AddBlocks")) { + if (schematic.contains("AddBlocks")) { byte[] addBlocks = schematic.getByteArray("AddBlocks"); additional = new byte[addBlocks.length * 2]; for (int i = 0; i < addBlocks.length; i++) { @@ -48,7 +51,7 @@ public MCEditSchematic(NBTTagCompound schematic) { additional[i * 2 + 1] = (byte) ((addBlocks[i] >> 0) & 0xF); // upper nibble } } - this.states = new IBlockState[this.x][this.z][this.y]; + this.states = new BlockState[this.x][this.z][this.y]; for (int y = 0; y < this.y; y++) { for (int z = 0; z < this.z; z++) { for (int x = 0; x < this.x; x++) { @@ -59,9 +62,10 @@ public MCEditSchematic(NBTTagCompound schematic) { // additional is 0 through 15 inclusive since it's & 0xF above blockID |= additional[blockInd] << 8; } - Block block = Block.REGISTRY.getObjectById(blockID); - int meta = metadata[blockInd] & 0xFF; - this.states[x][z][y] = block.getStateFromMeta(meta); + Block block = Registry.BLOCK.get(ResourceLocation.tryParse(ItemIdFix.getItem(blockID))); +// int meta = metadata[blockInd] & 0xFF; +// this.states[x][z][y] = block.getStateFromMeta(meta); + this.states[x][z][y] = block.defaultBlockState(); } } } diff --git a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java index 8de038f5a..abd518bb3 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java @@ -20,11 +20,12 @@ import baritone.utils.schematic.StaticSchematic; import baritone.utils.type.VarInt; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; -import net.minecraft.block.Block; -import net.minecraft.block.properties.IProperty; -import net.minecraft.block.state.IBlockState; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; +import net.minecraft.core.Registry; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.Property; import java.util.HashMap; import java.util.Map; @@ -38,23 +39,23 @@ */ public final class SpongeSchematic extends StaticSchematic { - public SpongeSchematic(NBTTagCompound nbt) { - this.x = nbt.getInteger("Width"); - this.y = nbt.getInteger("Height"); - this.z = nbt.getInteger("Length"); - this.states = new IBlockState[this.x][this.z][this.y]; + public SpongeSchematic(CompoundTag nbt) { + this.x = nbt.getInt("Width"); + this.y = nbt.getInt("Height"); + this.z = nbt.getInt("Length"); + this.states = new BlockState[this.x][this.z][this.y]; - Int2ObjectArrayMap palette = new Int2ObjectArrayMap<>(); - NBTTagCompound paletteTag = nbt.getCompoundTag("Palette"); - for (String tag : paletteTag.getKeySet()) { - int index = paletteTag.getInteger(tag); + Int2ObjectArrayMap palette = new Int2ObjectArrayMap<>(); + CompoundTag paletteTag = nbt.getCompound("Palette"); + for (String tag : paletteTag.getAllKeys()) { + int index = paletteTag.getInt(tag); SerializedBlockState serializedState = SerializedBlockState.getFromString(tag); if (serializedState == null) { throw new IllegalArgumentException("Unable to parse palette tag"); } - IBlockState state = serializedState.deserialize(); + BlockState state = serializedState.deserialize(); if (state == null) { throw new IllegalArgumentException("Unable to deserialize palette tag"); } @@ -80,7 +81,7 @@ public SpongeSchematic(NBTTagCompound nbt) { for (int z = 0; z < this.z; z++) { for (int x = 0; x < this.x; x++) { int index = (y * this.z + z) * this.x + x; - IBlockState state = palette.get(blockData[index]); + BlockState state = palette.get(blockData[index]); if (state == null) { throw new IllegalArgumentException("Invalid Palette Index " + index); } @@ -97,26 +98,20 @@ private static final class SerializedBlockState { private final ResourceLocation resourceLocation; private final Map properties; - private IBlockState blockState; + private BlockState blockState; private SerializedBlockState(ResourceLocation resourceLocation, Map properties) { this.resourceLocation = resourceLocation; this.properties = properties; } - private IBlockState deserialize() { - if (this.blockState == null) { - Block block = Block.REGISTRY.getObject(this.resourceLocation); - this.blockState = block.getDefaultState(); - - this.properties.keySet().stream().sorted(String::compareTo).forEachOrdered(key -> { - IProperty property = block.getBlockState().getProperty(key); - if (property != null) { - this.blockState = setPropertyValue(this.blockState, property, this.properties.get(key)); - } - }); + private static > BlockState setPropertyValue(BlockState state, Property property, String value) { + Optional parsed = property.getValue(value); + if (parsed.isPresent()) { + return state.setValue(property, parsed.get()); + } else { + throw new IllegalArgumentException("Invalid value for property " + property); } - return this.blockState; } private static SerializedBlockState getFromString(String s) { @@ -145,13 +140,19 @@ private static SerializedBlockState getFromString(String s) { } } - private static > IBlockState setPropertyValue(IBlockState state, IProperty property, String value) { - Optional parsed = property.parseValue(value).toJavaUtil(); - if (parsed.isPresent()) { - return state.withProperty(property, parsed.get()); - } else { - throw new IllegalArgumentException("Invalid value for property " + property); + private BlockState deserialize() { + if (this.blockState == null) { + Block block = Registry.BLOCK.get(this.resourceLocation); + this.blockState = block.defaultBlockState(); + + this.properties.keySet().stream().sorted(String::compareTo).forEachOrdered(key -> { + Property property = block.getStateDefinition().getProperty(key); + if (property != null) { + this.blockState = setPropertyValue(this.blockState, property, this.properties.get(key)); + } + }); } + return this.blockState; } } } diff --git a/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java b/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java index 0ae3edabf..76319c33e 100644 --- a/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java +++ b/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java @@ -19,8 +19,8 @@ import baritone.api.schematic.IStaticSchematic; import com.github.lunatrius.schematica.client.world.SchematicWorld; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; import java.util.List; @@ -33,12 +33,12 @@ public SchematicAdapter(SchematicWorld schematicWorld) { } @Override - public IBlockState desiredState(int x, int y, int z, IBlockState current, List approxPlaceable) { + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { return this.getDirect(x, y, z); } @Override - public IBlockState getDirect(int x, int y, int z) { + public BlockState getDirect(int x, int y, int z) { return this.schematic.getSchematic().getBlockState(new BlockPos(x, y, z)); } diff --git a/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java b/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java index fab688455..a13714a7d 100644 --- a/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java @@ -20,8 +20,8 @@ import baritone.api.schematic.IStaticSchematic; import com.github.lunatrius.schematica.Schematica; import com.github.lunatrius.schematica.proxy.ClientProxy; +import net.minecraft.core.BlockPos; import net.minecraft.util.Tuple; -import net.minecraft.util.math.BlockPos; import java.util.Optional; diff --git a/src/schematica_api/java/com/github/lunatrius/core/util/math/MBlockPos.java b/src/schematica_api/java/com/github/lunatrius/core/util/math/MBlockPos.java index 4c9da008c..383e27996 100644 --- a/src/schematica_api/java/com/github/lunatrius/core/util/math/MBlockPos.java +++ b/src/schematica_api/java/com/github/lunatrius/core/util/math/MBlockPos.java @@ -17,7 +17,7 @@ package com.github.lunatrius.core.util.math; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public class MBlockPos extends BlockPos { diff --git a/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java b/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java index bbf114285..8af684414 100644 --- a/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java +++ b/src/schematica_api/java/com/github/lunatrius/schematica/api/ISchematic.java @@ -17,12 +17,12 @@ package com.github.lunatrius.schematica.api; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; public interface ISchematic { - IBlockState getBlockState(BlockPos var1); + BlockState getBlockState(BlockPos var1); int getWidth(); diff --git a/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java b/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java index fdcef8789..2f3521297 100644 --- a/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java +++ b/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java @@ -18,7 +18,7 @@ package baritone.pathing.goals; import baritone.api.pathing.goals.GoalGetToBlock; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; import org.junit.Test; import java.util.ArrayList; diff --git a/src/test/java/baritone/pathing/movement/ActionCostsTest.java b/src/test/java/baritone/pathing/movement/ActionCostsTest.java index 9bfdafb0d..a6d7e3e72 100644 --- a/src/test/java/baritone/pathing/movement/ActionCostsTest.java +++ b/src/test/java/baritone/pathing/movement/ActionCostsTest.java @@ -26,10 +26,10 @@ public class ActionCostsTest { @Test public void testFallNBlocksCost() { - assertEquals(FALL_N_BLOCKS_COST.length, 257); // Fall 0 blocks through fall 256 blocks - for (int i = 0; i < 257; i++) { + assertEquals(FALL_N_BLOCKS_COST.length, 4097); // Fall 0 blocks through fall 4096 blocks + for (int i = 0; i < 4097; i++) { double blocks = ticksToBlocks(FALL_N_BLOCKS_COST[i]); - assertEquals(blocks, i, 0.000000000001); // If you add another 0 the test fails at i=217 LOL + assertEquals(blocks, i, 0.00000000001); // If you add another 0 the test fails at i=989 LOL } assertEquals(FALL_1_25_BLOCKS_COST, 6.2344, 0.00001); assertEquals(FALL_0_25_BLOCKS_COST, 3.0710, 0.00001); diff --git a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java index 1cd4cf913..29daa04db 100644 --- a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java +++ b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java @@ -18,8 +18,8 @@ package baritone.utils.pathing; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -51,30 +51,30 @@ public void testSimple() { BlockPos pos = new BlockPos(1, 2, 3); BetterBlockPos better = new BetterBlockPos(1, 2, 3); assertEquals(pos, better); - assertEquals(pos.up(), better.up()); - assertEquals(pos.down(), better.down()); + assertEquals(pos.above(), better.above()); + assertEquals(pos.below(), better.below()); assertEquals(pos.north(), better.north()); assertEquals(pos.south(), better.south()); assertEquals(pos.east(), better.east()); assertEquals(pos.west(), better.west()); - for (EnumFacing dir : EnumFacing.values()) { - assertEquals(pos.offset(dir), better.offset(dir)); - assertEquals(pos.offset(dir, 0), pos); - assertEquals(better.offset(dir, 0), better); + for (Direction dir : Direction.values()) { + assertEquals(pos.relative(dir), better.relative(dir)); + assertEquals(pos.relative(dir, 0), pos); + assertEquals(better.relative(dir, 0), better); for (int i = -10; i < 10; i++) { - assertEquals(pos.offset(dir, i), better.offset(dir, i)); + assertEquals(pos.relative(dir, i), better.relative(dir, i)); } - assertTrue(better.offset(dir, 0) == better); + assertTrue(better.relative(dir, 0) == better); } for (int i = -10; i < 10; i++) { - assertEquals(pos.up(i), better.up(i)); - assertEquals(pos.down(i), better.down(i)); + assertEquals(pos.above(i), better.above(i)); + assertEquals(pos.below(i), better.below(i)); assertEquals(pos.north(i), better.north(i)); assertEquals(pos.south(i), better.south(i)); assertEquals(pos.east(i), better.east(i)); assertEquals(pos.west(i), better.west(i)); } - assertTrue(better.offset(null, 0) == better); + assertTrue(better.relative((Direction) null, 0) == better); } public void benchOne() { @@ -87,7 +87,7 @@ public void benchOne() { } long before1 = System.nanoTime() / 1000000L; for (int i = 0; i < 1000000; i++) { - pos.up(); + pos.above(); } long after1 = System.nanoTime() / 1000000L; try { @@ -97,7 +97,7 @@ public void benchOne() { } long before2 = System.nanoTime() / 1000000L; for (int i = 0; i < 1000000; i++) { - pos2.up(); + pos2.above(); } long after2 = System.nanoTime() / 1000000L; System.out.println((after1 - before1) + " " + (after2 - before2)); @@ -113,11 +113,11 @@ public void benchN() { } long before1 = System.nanoTime() / 1000000L; for (int i = 0; i < 1000000; i++) { - pos.up(0); - pos.up(1); - pos.up(2); - pos.up(3); - pos.up(4); + pos.above(0); + pos.above(1); + pos.above(2); + pos.above(3); + pos.above(4); } long after1 = System.nanoTime() / 1000000L; try { @@ -127,11 +127,11 @@ public void benchN() { } long before2 = System.nanoTime() / 1000000L; for (int i = 0; i < 1000000; i++) { - pos2.up(0); - pos2.up(1); - pos2.up(2); - pos2.up(3); - pos2.up(4); + pos2.above(0); + pos2.above(1); + pos2.above(2); + pos2.above(3); + pos2.above(4); } long after2 = System.nanoTime() / 1000000L; System.out.println((after1 - before1) + " " + (after2 - before2)); diff --git a/tweaker/build.gradle b/tweaker/build.gradle new file mode 100644 index 000000000..9afcb4383 --- /dev/null +++ b/tweaker/build.gradle @@ -0,0 +1,172 @@ +import baritone.gradle.task.CreateDistTask +import baritone.gradle.task.ProguardTask + +architectury { + injectInjectables = false +} + +loom { + mixin { + refmapTargetNamespace = "official" + defaultRefmapName = "baritone-common-refmap.json" + } +} + +loom.mixin.useLegacyMixinAp = false; + +// ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts +sourceSets { + realmain { + java { + java { + srcDir "$rootDir/src/main/java" + } + resources { + srcDir "$rootDir/src/main/resources" + } + } + } + api { + compileClasspath += main.compileClasspath + runtimeClasspath += main.runtimeClasspath + java { + java { + srcDir "$rootDir/src/api/java" + } + resources { + srcDir "$rootDir/src/api/resources" + } + } + } + realmain { + compileClasspath += main.compileClasspath + api.output + runtimeClasspath += main.runtimeClasspath + api.output + } + test { + compileClasspath += realmain.compileClasspath + realmain.output + runtimeClasspath += realmain.runtimeClasspath + realmain.output + java { + java { + srcDir "$rootDir/src/test/java" + } + resources { + srcDir "$rootDir/src/test/resources" + } + } + } + tweaker { + compileClasspath += realmain.output + api.output + main.compileClasspath + runtimeClasspath += realmain.output + api.output + main.compileClasspath + } + main { + compileClasspath += realmain.output + api.output + tweaker.output + runtimeClasspath += realmain.output + api.output + tweaker.output + java { + java { + srcDir "$rootDir/src/launch/java" + } + resources { + srcDir "$rootDir/src/launch/resources" + } + } + } + schematica_api { + compileClasspath += realmain.compileClasspath + runtimeClasspath += realmain.runtimeClasspath + java { + java { + srcDir "$rootDir/src/schematica_api/java" + } + resources { + srcDir "$rootDir/src/schematica_api/resources" + } + } + } + realmain { + compileClasspath += schematica_api.output + runtimeClasspath += schematica_api.output + } +} + +configurations { + transformProductionTweaker { + canBeConsumed = true + canBeResolved = false + // If you want this configuration to share the same dependencies, otherwise omit this line + extendsFrom implementation, runtimeOnly + } +} + +dependencies { + // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies + // Do NOT use other classes from fabric loader + modCompileOnly "net.fabricmc:fabric-loader:${project.fabric_version}" + + // want in the pom but not to compile against as it's also provided by loom + runtimeOnly "org.spongepowered:mixin:0.8.4" + + // this makes it compile with the forge tweak stuff + implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' + implementation('net.minecraft:launchwrapper:of-2.3') { + exclude module: 'lwjgl' + exclude module: 'asm-debug-all' + } + + compileOnly 'com.google.code.findbugs:jsr305:3.0.2' + + testImplementation 'junit:junit:4.12' +} + +javadoc { + options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error + options.linkSource true + options.encoding "UTF-8" // allow emoji in comments :^) + source = sourceSets.api.allJava + classpath += sourceSets.api.compileClasspath +} + +jar { + classifier "dev" + from sourceSets.main.output, sourceSets.realmain.output, sourceSets.api.output, sourceSets.tweaker.output + + preserveFileTimestamps = false + reproducibleFileOrder = true + + manifest { + attributes( + 'MixinConfigs': 'mixins.baritone-meteor.json', + "MixinConnector": "baritone.launch.BaritoneMixinConnector", + + 'Implementation-Title': 'Baritone', + 'Implementation-Version': version, + ) + } +} + +remapJar { + targetNamespace = 'official' +} + +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "OFFICIAL" +} + +task createDist(type: CreateDistTask, dependsOn: proguard) + +build.finalizedBy(createDist) + +publishing { + publications { + mavenCommon(MavenPublication) { + artifactId = rootProject.archives_base_name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} \ No newline at end of file diff --git a/src/launch/java/baritone/launch/BaritoneTweaker.java b/tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java similarity index 96% rename from src/launch/java/baritone/launch/BaritoneTweaker.java rename to tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java index b9db9b6a5..02e269506 100644 --- a/src/launch/java/baritone/launch/BaritoneTweaker.java +++ b/tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java @@ -50,6 +50,6 @@ public void injectIntoClassLoader(LaunchClassLoader classLoader) { MixinEnvironment.getDefaultEnvironment().setSide(MixinEnvironment.Side.CLIENT); MixinEnvironment.getDefaultEnvironment().setObfuscationContext(obfuscation); - Mixins.addConfiguration("mixins.baritone.json"); + Mixins.addConfiguration("mixins.baritone-meteor.json"); } } diff --git a/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java b/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java new file mode 100644 index 000000000..21607ae34 --- /dev/null +++ b/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java @@ -0,0 +1,105 @@ +/* + * 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; + +import com.google.common.base.Strings; +import com.google.gson.GsonBuilder; +import com.mojang.authlib.Agent; +import com.mojang.authlib.exceptions.AuthenticationException; +import com.mojang.authlib.properties.PropertyMap; +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication; +import net.minecraft.launchwrapper.Launch; + +import java.io.File; +import java.lang.reflect.Field; +import java.net.Proxy; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Based on GradleStart from ForgeGradle 2.3 + * + * @author Brady + * @since 3/11/2019 + */ +public class LaunchTesting { + + public static void main(String[] args) { + Map arguments = new HashMap<>(); + + hackNatives(); + arguments.put("version", "BaritownedDeveloperEnvironment"); + arguments.put("assetIndex", System.getenv("assetIndex")); + arguments.put("assetsDir", System.getenv().getOrDefault("assetDirectory", "assets")); + arguments.put("accessToken", "FML"); + arguments.put("userProperties", "{}"); + arguments.put("tweakClass", System.getenv("tweakClass")); + String password = System.getenv("password"); + if (password != null && !password.isEmpty()) { + attemptLogin(arguments, System.getenv("username"), System.getenv("password")); + } + + List argsArray = new ArrayList<>(); + arguments.forEach((k, v) -> { + argsArray.add("--" + k); + argsArray.add(v); + }); + + Launch.main(argsArray.toArray(new String[0])); + } + + private static void hackNatives() { + String paths = System.getProperty("java.library.path"); + String nativesDir = System.getenv().get("nativesDirectory"); + + if (Strings.isNullOrEmpty(paths)) + paths = nativesDir; + else + paths += File.pathSeparator + nativesDir; + + System.setProperty("java.library.path", paths); + + // hack the classloader now. + try { + final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths"); + sysPathsField.setAccessible(true); + sysPathsField.set(null, null); + } catch (Throwable ignored) {} + } + + private static void attemptLogin(Map argMap, String username, String password) { + YggdrasilUserAuthentication auth = (YggdrasilUserAuthentication) (new YggdrasilAuthenticationService(Proxy.NO_PROXY, "1")).createUserAuthentication(Agent.MINECRAFT); + auth.setUsername(username); + auth.setPassword(password); + + try { + auth.logIn(); + } catch (AuthenticationException var4) { + throw new RuntimeException(var4); + } + + argMap.put("accessToken", auth.getAuthenticatedToken()); + argMap.put("uuid", auth.getSelectedProfile().getId().toString().replace("-", "")); + argMap.put("username", auth.getSelectedProfile().getName()); + argMap.put("userType", auth.getUserType().getName()); + argMap.put("userProperties", (new GsonBuilder()).registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer()).create().toJson(auth.getUserProperties())); + } +} From 469b857519de4dba27e9383abfa8de5f1f71a7de Mon Sep 17 00:00:00 2001 From: Marvion Kirito Date: Sun, 6 Nov 2022 00:53:32 +0800 Subject: [PATCH 412/935] =?UTF-8?q?Fixes=20and=20Additions:=200.=20The=20b?= =?UTF-8?q?ot=20now=20doesn=E2=80=99t=20use=20a=20block=20needed=20for=20r?= =?UTF-8?q?esources.=201.=20The=20bot=20now=20has=20a=20settings=20dontThr?= =?UTF-8?q?owAwayEnchantedItems.=202.=20Added=20Totem=20of=20Undying=20in?= =?UTF-8?q?=20the=20default=20settings=20of=20importantItems.=203.=20Added?= =?UTF-8?q?=20Hero=20task.=20See=20@help=20to=20see=20the=20command=20and?= =?UTF-8?q?=20description.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/bug.md | 9 +- .github/ISSUE_TEMPLATE/question.md | 4 +- .github/ISSUE_TEMPLATE/suggestion.md | 6 +- .github/workflows/run_tests.yml | 3 +- CODE_OF_CONDUCT.md | 6 +- FEATURES.md | 82 +- README.md | 7 +- SETUP.md | 38 +- USAGE.md | 38 +- .../gradle/task/BaritoneGradleTask.java | 3 +- .../baritone/gradle/task/CreateDistTask.java | 3 +- .../baritone/gradle/task/ProguardTask.java | 35 +- .../baritone/gradle/util/Determinizer.java | 100 +-- common/build.gradle | 4 - fabric/src/main/resources/fabric.mod.json | 10 +- forge/gradle.properties | 1 - .../baritone/launch/BaritoneForgeModXD.java | 4 +- forge/src/main/resources/META-INF/mods.toml | 34 +- gradle.properties | 3 - src/api/java/baritone/api/Settings.java | 92 +-- .../java/baritone/api/behavior/IBehavior.java | 3 +- .../java/baritone/api/cache/IWaypoint.java | 14 +- .../java/baritone/api/command/Command.java | 5 +- .../api/command/datatypes/ForDirection.java | 3 +- .../api/command/datatypes/ForWaypoints.java | 42 +- .../api/command/datatypes/RelativeFile.java | 48 +- .../api/command/helpers/Paginator.java | 36 +- .../api/command/registry/Registry.java | 10 +- .../api/event/events/RotationMoveEvent.java | 14 +- .../api/event/events/SprintStateEvent.java | 8 +- .../baritone/api/event/events/TickEvent.java | 10 +- .../listener/AbstractGameEventListener.java | 42 +- .../baritone/api/pathing/goals/GoalBlock.java | 24 +- .../baritone/api/pathing/goals/GoalXZ.java | 42 +- .../api/pathing/goals/GoalYLevel.java | 20 +- .../baritone/api/process/IBuilderProcess.java | 21 + .../api/process/ICustomGoalProcess.java | 14 +- .../baritone/api/process/IFarmProcess.java | 8 +- .../api/schematic/CompositeSchematic.java | 12 +- .../baritone/api/schematic/ISchematic.java | 3 +- .../api/schematic/SubstituteSchematic.java | 2 +- .../baritone/api/utils/BetterBlockPos.java | 10 +- .../baritone/api/utils/BlockOptionalMeta.java | 24 +- .../java/baritone/api/utils/BlockUtils.java | 5 +- src/api/java/baritone/api/utils/Helper.java | 3 +- .../baritone/api/utils/RandomSpotNearby.java | 40 + .../baritone/api/utils/RayTraceUtils.java | 5 +- src/api/java/baritone/api/utils/Rotation.java | 54 +- .../baritone/api/utils/RotationUtils.java | 3 +- .../java/baritone/api/utils/SettingsUtil.java | 56 +- .../java/baritone/api/utils/TypeUtils.java | 3 +- src/api/java/baritone/api/utils/VecUtils.java | 3 +- .../java/baritone/launch/MixinPlugin.java | 9 +- .../launch/mixins/MixinChunkArray.java | 11 +- .../mixins/MixinClientChunkProvider.java | 4 +- .../mixins/MixinCommandSuggestionHelper.java | 4 +- .../baritone/launch/mixins/MixinEntity.java | 3 +- .../launch/mixins/MixinLivingEntity.java | 2 - .../baritone/launch/mixins/MixinScreen.java | 6 +- src/launch/resources/pack.mcmeta | 8 +- src/main/java/baritone/Baritone.java | 37 +- src/main/java/baritone/KeepName.java | 3 +- .../baritone/behavior/InventoryBehavior.java | 36 +- .../baritone/behavior/PathingBehavior.java | 38 +- .../baritone/behavior/WaypointBehavior.java | 30 +- src/main/java/baritone/cache/CachedChunk.java | 32 +- .../java/baritone/cache/CachedRegion.java | 9 +- src/main/java/baritone/cache/CachedWorld.java | 13 +- src/main/java/baritone/cache/ChunkPacker.java | 3 +- .../baritone/cache/WaypointCollection.java | 6 +- src/main/java/baritone/cache/WorldData.java | 2 +- .../command/argparser/DefaultArgParsers.java | 16 +- .../command/argument/CommandArguments.java | 5 +- .../command/defaults/CommandAlias.java | 2 +- .../baritone/command/defaults/SelCommand.java | 10 +- .../command/defaults/WaypointsCommand.java | 2 +- .../command/manager/CommandManager.java | 20 +- .../pathing/calc/AStarPathFinder.java | 3 +- .../pathing/calc/AbstractNodeCostSearch.java | 39 +- .../pathing/movement/CalculationContext.java | 6 +- .../baritone/pathing/movement/Movement.java | 12 +- .../pathing/movement/MovementHelper.java | 8 +- .../pathing/movement/MovementState.java | 10 +- .../movement/movements/MovementAscend.java | 22 +- .../movement/movements/MovementDescend.java | 32 +- .../movement/movements/MovementDownward.java | 32 +- .../movement/movements/MovementFall.java | 20 +- .../movement/movements/MovementParkour.java | 8 +- .../movement/movements/MovementPillar.java | 20 +- .../movement/movements/MovementTraverse.java | 32 +- .../baritone/pathing/path/SplicedPath.java | 50 +- .../java/baritone/process/BuilderProcess.java | 759 +++++++++++++----- .../baritone/process/CustomGoalProcess.java | 20 +- .../java/baritone/process/ExploreProcess.java | 44 +- .../java/baritone/process/FarmProcess.java | 34 +- .../baritone/process/GetToBlockProcess.java | 16 +- .../java/baritone/process/MineProcess.java | 174 ++-- .../baritone/utils/BlockStateInterface.java | 5 +- src/main/java/baritone/utils/Trail.java | 180 +++++ .../baritone/utils/accessor/IChunkArray.java | 3 +- .../baritone/utils/pathing/Avoidance.java | 14 +- .../utils/pathing/PathingBlockType.java | 8 +- .../utils/schematic/MapArtSchematic.java | 10 +- src/main/java/baritone/utils/type/VarInt.java | 36 +- .../schematica/proxy/CommonProxy.java | 3 +- .../java/baritone/launch/LaunchTesting.java | 3 +- 106 files changed, 1847 insertions(+), 1136 deletions(-) create mode 100644 src/api/java/baritone/api/utils/RandomSpotNearby.java create mode 100644 src/main/java/baritone/utils/Trail.java diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index b686a589f..5cb92c10b 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -7,13 +7,15 @@ assignees: '' --- ## Some information + Operating system: Java version: Minecraft version: Baritone version: -Other mods (if used): +Other mods (if used): ## Exception, error or logs + Please find your `latest.log` or `debug.log` in this folder and attach it to the issue Linux: `~/.minecraft/logs/` @@ -23,13 +25,16 @@ Windows: `%appdata%/.minecraft/logs/` Mac: `/Library/Application\ Support/minecraft/logs/` ## How to reproduce + Add your steps to reproduce the issue/bug experienced here. ## Modified settings + To get the modified settings run `#modified` in game ## Final checklist -- [x] I know how to properly use check boxes + +- [x] I know how to properly use check boxes - [ ] I have included the version of Minecraft I'm running, baritone's version and forge mods (if used). - [ ] I have included logs, exceptions and / or steps to reproduce the issue. - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index b5de2dfd3..454a01606 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -7,8 +7,10 @@ assignees: '' --- ## What do you need help with? + With as much detail as possible, describe your question and what you may need help with. ## Final checklist -- [x] I know how to properly use check boxes + +- [x] I know how to properly use check boxes - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/ISSUE_TEMPLATE/suggestion.md b/.github/ISSUE_TEMPLATE/suggestion.md index 9f7a30bf7..04e746a56 100644 --- a/.github/ISSUE_TEMPLATE/suggestion.md +++ b/.github/ISSUE_TEMPLATE/suggestion.md @@ -7,14 +7,18 @@ assignees: '' --- ## Describe your suggestion + With as much detail as possible, describe what your suggestion would do for Baritone. ## Settings + If applicable, what settings/customizability should be offered to tweak the functionality of your suggestion. ## Context + Describe how your suggestion would improve Baritone, or the reason behind it being added. ## Final checklist -- [x] I know how to properly use check boxes + +- [x] I know how to properly use check boxes - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index b29722677..956c826bf 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -1,4 +1,3 @@ - name: Tests on: @@ -18,7 +17,7 @@ jobs: java-version: '17' distribution: 'adopt' - - name: Grant execute permission for gradlew + - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Executing tests diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 474ecf7e6..20538e8e3 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -25,13 +25,13 @@ Examples of unacceptable behavior by participants include: * Anime * The use of sexualized language or imagery and unwelcome sexual attention or - advances + advances * ~~Trolling, insulting/derogatory comments, and personal or political attacks~~ * Public or private harassment * Publishing others' private information, such as a physical or electronic - address, without explicit permission or consent + address, without explicit permission or consent * Other conduct which could reasonably be considered inappropriate in a - professional setting + professional setting ## Our Responsibilities diff --git a/FEATURES.md b/FEATURES.md index 372a77410..2662b2e48 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -1,33 +1,78 @@ # Pathing features -- **Long distance pathing and splicing** Baritone calculates paths in segments, and precalculates the next segment when the current one is about to end, so that it's moving towards the goal at all times. -- **Chunk caching** Baritone simplifies chunks to a compacted internal 2-bit representation (AIR, SOLID, WATER, AVOID) and stores them in RAM for better very-long-distance pathing. There is also an option to save these cached chunks to disk. Example -- **Block breaking** Baritone considers breaking blocks as part of its path. It also takes into account your current tool set and hot bar. For example, if you have a Eff V diamond pick, it may choose to mine through a stone barrier, while if you only had a wood pick it might be faster to climb over it. -- **Block placing** Baritone considers placing blocks as part of its path. This includes sneak-back-placing, pillaring, etc. It has a configurable penalty of placing a block (set to 1 second by default), to conserve its resources. The list of acceptable throwaway blocks is also configurable, and is cobble, dirt, or netherrack by default. Example -- **Falling** Baritone will fall up to 3 blocks onto solid ground (configurable, if you have Feather Falling and/or don't mind taking a little damage). If you have a water bucket on your hotbar, it will fall up to 23 blocks and place the bucket beneath it. It will fall an unlimited distance into existing still water. -- **Vines and ladders** Baritone understands how to climb and descend vines and ladders. There is experimental support for more advanced maneuvers, like strafing to a different ladder / vine column in midair (off by default, setting named `allowVines`). Baritone can break its fall by grabbing ladders / vines midair, and understands when that is and isn't possible. + +- **Long distance pathing and splicing** Baritone calculates paths in segments, and precalculates the next segment when + the current one is about to end, so that it's moving towards the goal at all times. +- **Chunk caching** Baritone simplifies chunks to a compacted internal 2-bit representation (AIR, SOLID, WATER, AVOID) + and stores them in RAM for better very-long-distance pathing. There is also an option to save these cached chunks to + disk. Example +- **Block breaking** Baritone considers breaking blocks as part of its path. It also takes into account your current + tool set and hot bar. For example, if you have a Eff V diamond pick, it may choose to mine through a stone barrier, + while if you only had a wood pick it might be faster to climb over it. +- **Block placing** Baritone considers placing blocks as part of its path. This includes sneak-back-placing, pillaring, + etc. It has a configurable penalty of placing a block (set to 1 second by default), to conserve its resources. The + list of acceptable throwaway blocks is also configurable, and is cobble, dirt, or netherrack by + default. Example +- **Falling** Baritone will fall up to 3 blocks onto solid ground (configurable, if you have Feather Falling and/or + don't mind taking a little damage). If you have a water bucket on your hotbar, it will fall up to 23 blocks and place + the bucket beneath it. It will fall an unlimited distance into existing still water. +- **Vines and ladders** Baritone understands how to climb and descend vines and ladders. There is experimental support + for more advanced maneuvers, like strafing to a different ladder / vine column in midair (off by default, setting + named `allowVines`). Baritone can break its fall by grabbing ladders / vines midair, and understands when that is and + isn't possible. - **Opening fence gates and doors** - **Slabs and stairs** -- **Falling blocks** Baritone understands the costs of breaking blocks with falling blocks on top, and includes all of their break costs. Additionally, since it avoids breaking any blocks touching a liquid, it won't break the bottom of a gravel stack below a lava lake (anymore). -- **Avoiding dangerous blocks** Obviously, it knows not to walk through fire or on magma, not to corner over lava (that deals some damage), not to break any blocks touching a liquid (it might drown), etc. +- **Falling blocks** Baritone understands the costs of breaking blocks with falling blocks on top, and includes all of + their break costs. Additionally, since it avoids breaking any blocks touching a liquid, it won't break the bottom of a + gravel stack below a lava lake (anymore). +- **Avoiding dangerous blocks** Obviously, it knows not to walk through fire or on magma, not to corner over lava (that + deals some damage), not to break any blocks touching a liquid (it might drown), etc. - **Parkour** Sprint jumping over 1, 2, or 3 block gaps -- **Parkour place** Sprint jumping over a 3 block gap and placing the block to land on while executing the jump. It's really cool. +- **Parkour place** Sprint jumping over a 3 block gap and placing the block to land on while executing the jump. It's + really cool. - **Pigs** It can sort of control pigs. I wouldn't rely on it though. # Pathing method -Baritone uses A*, with some modifications: -- **Segmented calculation** Traditional A* calculates until the most promising node is in the goal, however in the environment of Minecraft with a limited render distance, we don't know the environment all the way to our goal. Baritone has three possible ways for path calculation to end: finding a path all the way to the goal, running out of time, or getting to the render distance. In the latter two scenarios, the selection of which segment to actually execute falls to the next item (incremental cost backoff). Whenever the path calculation thread finds that the best / most promising node is at the edge of loaded chunks, it increments a counter. If this happens more than 50 times (configurable), path calculation exits early. This happens with very low render distances. Otherwise, calculation continues until the timeout is hit (also configurable) or we find a path all the way to the goal. -- **Incremental cost backoff** When path calculation exits early without getting all the way to the goal, Baritone it needs to select a segment to execute first (assuming it will calculate the next segment at the end of this one). It uses incremental cost backoff to select the best node by varying metrics, then paths to that node. This is unchanged from MineBot and I made a write-up that still applies. In essence, it keeps track of the best node by various increasing coefficients, then picks the node with the least coefficient that goes at least 5 blocks from the starting position. -- **Minimum improvement repropagation** The pathfinder ignores alternate routes that provide minimal improvements (less than 0.01 ticks of improvement), because the calculation cost of repropagating this to all connected nodes is much higher than the half-millisecond path time improvement it would get. -- **Backtrack cost favoring** While calculating the next segment, Baritone favors backtracking its current segment. The cost is decreased heavily, but is still positive (this won't cause it to backtrack if it doesn't need to). This allows it to splice and jump onto the next segment as early as possible, if the next segment begins with a backtrack of the current one. Example -- **Backtrack detection and pausing** While path calculation happens on a separate thread, the main game thread has access to the latest node considered, and the best path so far (those are rendered light blue and dark blue respectively). When the current best path (rendered dark blue) passes through the player's current position on the current path segment, path execution is paused (if it's safe to do so), because there's no point continuing forward if we're about to turn around and go back that same way. Note that the current best path as reported by the path calculation thread takes into account the incremental cost backoff system, so it's accurate to what the path calculation thread will actually pick once it finishes. +Baritone uses A*, with some modifications: + +- **Segmented calculation** Traditional A* calculates until the most promising node is in the goal, however in the + environment of Minecraft with a limited render distance, we don't know the environment all the way to our goal. + Baritone has three possible ways for path calculation to end: finding a path all the way to the goal, running out of + time, or getting to the render distance. In the latter two scenarios, the selection of which segment to actually + execute falls to the next item (incremental cost backoff). Whenever the path calculation thread finds that the best / + most promising node is at the edge of loaded chunks, it increments a counter. If this happens more than 50 times ( + configurable), path calculation exits early. This happens with very low render distances. Otherwise, calculation + continues until the timeout is hit (also configurable) or we find a path all the way to the goal. +- **Incremental cost backoff** When path calculation exits early without getting all the way to the goal, Baritone it + needs to select a segment to execute first (assuming it will calculate the next segment at the end of this one). It + uses incremental cost backoff to select the best node by varying metrics, then paths to that node. This is unchanged + from MineBot and I made + a write-up that + still applies. In essence, it keeps track of the best node by various increasing coefficients, then picks the node + with the least coefficient that goes at least 5 blocks from the starting position. +- **Minimum improvement repropagation** The pathfinder ignores alternate routes that provide minimal improvements (less + than 0.01 ticks of improvement), because the calculation cost of repropagating this to all connected nodes is much + higher than the half-millisecond path time improvement it would get. +- **Backtrack cost favoring** While calculating the next segment, Baritone favors backtracking its current segment. The + cost is decreased heavily, but is still positive (this won't cause it to backtrack if it doesn't need to). This allows + it to splice and jump onto the next segment as early as possible, if the next segment begins with a backtrack of the + current one. Example +- **Backtrack detection and pausing** While path calculation happens on a separate thread, the main game thread has + access to the latest node considered, and the best path so far (those are rendered light blue and dark blue + respectively). When the current best path (rendered dark blue) passes through the player's current position on the + current path segment, path execution is paused (if it's safe to do so), because there's no point continuing forward if + we're about to turn around and go back that same way. Note that the current best path as reported by the path + calculation thread takes into account the incremental cost backoff system, so it's accurate to what the path + calculation thread will actually pick once it finishes. # Chat control - [Baritone chat control usage](USAGE.md) # Goals + The pathing goal can be set to any of these options: + - **GoalBlock** one specific block that the player should stand inside at foot level - **GoalXZ** an X and a Z coordinate, used for long distance pathing - **GoalYLevel** a Y coordinate @@ -36,17 +81,20 @@ The pathing goal can be set to any of these options: - **GoalNear** a block position that the player should get within a certain radius of, used for following entities - **GoalAxis** a block position on an axis or diagonal axis (so x=0, z=0, or x=z), and y=120 (configurable) -And finally `GoalComposite`. `GoalComposite` is a list of other goals, any one of which satisfies the goal. For example, `mine diamond_ore` creates a `GoalComposite` of `GoalTwoBlocks`s for every diamond ore location it knows of. - +And finally `GoalComposite`. `GoalComposite` is a list of other goals, any one of which satisfies the goal. For +example, `mine diamond_ore` creates a `GoalComposite` of `GoalTwoBlocks`s for every diamond ore location it knows of. # Future features + Things it doesn't have yet + - Trapdoors - Sprint jumping in a 1x2 corridor See issues for more. Things it may not ever have, from most likely to least likely =( + - Boats - Horses (2x3 path instead of 1x2) - Elytra diff --git a/README.md b/README.md index b2a8172c7..e9fc5f887 100644 --- a/README.md +++ b/README.md @@ -135,9 +135,12 @@ Magic. (Hours of [leijurv](https://github.com/leijurv/) enduring excruciating pa ![YourKit-Logo](https://www.yourkit.com/images/yklogo.png) -YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET applications. +YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET +applications. -YourKit is the creator of the [YourKit Java Profiler](https://www.yourkit.com/java/profiler/), [YourKit .NET Profiler](https://www.yourkit.com/.net/profiler/), and [YourKit YouMonitor](https://www.yourkit.com/youmonitor/). +YourKit is the creator of the [YourKit Java Profiler](https://www.yourkit.com/java/profiler/) +, [YourKit .NET Profiler](https://www.yourkit.com/.net/profiler/), +and [YourKit YouMonitor](https://www.yourkit.com/youmonitor/). We thank them for granting Baritone an OSS license so that we can make our software the best it can be. diff --git a/SETUP.md b/SETUP.md index eaadd1845..1ccb04f49 100644 --- a/SETUP.md +++ b/SETUP.md @@ -2,12 +2,17 @@ The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. -You can also use a custom version json for Minecraft, with the [1.14.4](https://www.dropbox.com/s/rkml3hjokd3qv0m/1.14.4-Baritone.zip?dl=1) version or the [1.15.2](https://www.dropbox.com/s/8rx6f0kts9hvd4f/1.15.2-Baritone.zip?dl=1) version or the [1.16.5](https://www.dropbox.com/s/i6f292o2i7o9acp/1.16.5-Baritone.zip?dl=1) version. +You can also use a custom version json for Minecraft, with +the [1.14.4](https://www.dropbox.com/s/rkml3hjokd3qv0m/1.14.4-Baritone.zip?dl=1) version or +the [1.15.2](https://www.dropbox.com/s/8rx6f0kts9hvd4f/1.15.2-Baritone.zip?dl=1) version or +the [1.16.5](https://www.dropbox.com/s/i6f292o2i7o9acp/1.16.5-Baritone.zip?dl=1) version. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. ## Prebuilt official releases -These releases are not always completely up to date with latest features, and are only released from `master`. (so if you want `backfill-2` branch for example, you'll have to build it yourself) + +These releases are not always completely up to date with latest features, and are only released from `master`. (so if +you want `backfill-2` branch for example, you'll have to build it yourself) Link to the releases page: [Releases](https://github.com/cabaletta/baritone/releases) @@ -22,7 +27,6 @@ The build is fully deterministic and reproducible, and you can verify Travis did running `docker build --no-cache -t cabaletta/baritone .` yourself and comparing the shasum. This works identically on Travis, Mac, and Linux (if you have docker on Windows, I'd be grateful if you could let me know if it works there too). - ## Artifacts Building Baritone will result in 5 artifacts created in the ``dist`` directory. These are the same as the artifacts @@ -45,6 +49,7 @@ want `baritone-standalone-forge-VERSION.jar` - **Forge/Fabric Unoptimized**: Same as Unoptimized, but packaged for Forge/Fabric. ## Build it yourself + - Clone or download Baritone ![Image](https://i.imgur.com/kbqBtoN.png) @@ -64,21 +69,25 @@ If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work b 8 using may not have the needed javax classes. Open JDK download: https://openjdk.java.net/install/ + #### macOS guide + In order to get JDK 8, Try running the following command: `% /usr/libexec/java_home -V` -If it doesn't work try this guide: https://stackoverflow.com/questions/46513639/how-to-downgrade-java-from-9-to-8-on-a-macos-eclipse-is-not-running-with-java-9 +If it doesn't work try this +guide: https://stackoverflow.com/questions/46513639/how-to-downgrade-java-from-9-to-8-on-a-macos-eclipse-is-not-running-with-java-9 If you see something like -`% 1.8.0_VERSION, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_VERSION.jdk/Contents/Home` +`% 1.8.0_VERSION, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_VERSION.jdk/Contents/Home` -in the list then you've got JDK 8 installed. -In order to get JDK 8 running in the **current terminal window** you will have to run this command: +in the list then you've got JDK 8 installed. +In order to get JDK 8 running in the **current terminal window** you will have to run this command: `% export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)` -To add OpenJDK 8 to your PATH add the export line to the end of your `.zshrc / .bashrc` if you want it to apply to each new terminal. If you're using bash change the .bachrc and if you're using zsh change the .zshrc +To add OpenJDK 8 to your PATH add the export line to the end of your `.zshrc / .bashrc` if you want it to apply to each +new terminal. If you're using bash change the .bachrc and if you're using zsh change the .zshrc Setting up the Environment: @@ -114,28 +123,29 @@ $ gradlew runClient For information on how to build baritone, see [Building Baritone](#building-baritone) ## IntelliJ + - Open the project in IntelliJ as a Gradle project - + ![Image](https://i.imgur.com/jw7Q6vY.png) - Run the Gradle tasks `setupDecompWorkspace` then `genIntellijRuns` - + ![Image](https://i.imgur.com/QEfVvWP.png) - Refresh the Gradle project (or, to be safe, just restart IntelliJ) - + ![Image](https://i.imgur.com/3V7EdWr.png) - Select the "Minecraft Client" launch config - + ![Image](https://i.imgur.com/1qz2QGV.png) - Click on ``Edit Configurations...`` from the same dropdown and select the "Minecraft Client" config - + ![Image](https://i.imgur.com/s4ly0ZF.png) - In `Edit Configurations...` you need to select `baritone_launch` for `Use classpath of module:`. - + ![Image](https://i.imgur.com/hrLhG9u.png) ## IntelliJ diff --git a/USAGE.md b/USAGE.md index 08d085616..e1886cb6e 100644 --- a/USAGE.md +++ b/USAGE.md @@ -2,11 +2,16 @@ # Prefix -Baritone's chat control prefix is `#` by default. In Impact, you can also use `.b` as a prefix. (for example, `.b click` instead of `#click`) +Baritone's chat control prefix is `#` by default. In Impact, you can also use `.b` as a prefix. (for example, `.b click` +instead of `#click`) -Baritone commands can also by default be typed in the chatbox. However if you make a typo, like typing "gola 10000 10000" instead of "goal" it goes into public chat, which is bad, so using `#` is suggested. +Baritone commands can also by default be typed in the chatbox. However if you make a typo, like typing "gola 10000 +10000" instead of "goal" it goes into public chat, which is bad, so using `#` is suggested. -To disable direct chat control (with no prefix), turn off the `chatControl` setting. To disable chat control with the `#` prefix, turn off the `prefixControl` setting. In Impact, `.b` cannot be disabled. Be careful that you don't leave yourself with all control methods disabled (if you do, reset your settings by deleting the file `minecraft/baritone/settings.txt` and relaunching). +To disable direct chat control (with no prefix), turn off the `chatControl` setting. To disable chat control with +the `#` prefix, turn off the `prefixControl` setting. In Impact, `.b` cannot be disabled. Be careful that you don't +leave yourself with all control methods disabled (if you do, reset your settings by deleting the +file `minecraft/baritone/settings.txt` and relaunching). # For Baritone 1.2.10+, 1.3.5+, 1.4.2+ @@ -16,7 +21,7 @@ Try `#help` I promise it won't just send you back here =) "wtf where is cleararea" -> look at `#help sel` -"wtf where is goto death, goto waypoint" -> look at `#help wp` +"wtf where is goto death, goto waypoint" -> look at `#help wp` just look at `#help` lmao @@ -87,9 +92,14 @@ Commands in Baritone: - `version` to get the version of Baritone you're running - `damn` daniel -All the settings and documentation are here. If you find HTML easier to read than Javadoc, you can look here. +All the settings and documentation +are here. If you +find HTML easier to read than Javadoc, you can +look here. + +There are about a hundred settings, but here are some fun / interesting / important ones that you might want to look at +changing in normal usage of Baritone. The documentation for each can be found at the above links. -There are about a hundred settings, but here are some fun / interesting / important ones that you might want to look at changing in normal usage of Baritone. The documentation for each can be found at the above links. - `allowBreak` - `allowSprint` - `allowPlace` @@ -109,22 +119,24 @@ There are about a hundred settings, but here are some fun / interesting / import - `mineScanDroppedItems` - `allowDiagonalAscend` - - - # Troubleshooting / common issues ## Why doesn't Baritone respond to any of my chat commands? + This could be one of many things. -First, make sure it's actually installed. An easy way to check is seeing if it created the folder `baritone` in your Minecraft folder. +First, make sure it's actually installed. An easy way to check is seeing if it created the folder `baritone` in your +Minecraft folder. Second, make sure that you're using the prefix properly, and that chat control is enabled in the way you expect. -For example, Impact disables direct chat control. (i.e. anything typed in chat without a prefix will be ignored and sent publicly). **This is a saved setting**, so if you run Impact once, `chatControl` will be off from then on, **even in other clients**. -So you'll need to use the `#` prefix or edit `baritone/settings.txt` in your Minecraft folder to undo that (specifically, remove the line `chatControl false` then restart your client). - +For example, Impact disables direct chat control. (i.e. anything typed in chat without a prefix will be ignored and sent +publicly). **This is a saved setting**, so if you run Impact once, `chatControl` will be off from then on, **even in +other clients**. +So you'll need to use the `#` prefix or edit `baritone/settings.txt` in your Minecraft folder to undo that ( +specifically, remove the line `chatControl false` then restart your client). ## Why can I do `.goto x z` in Impact but nowhere else? Why can I do `-path to x z` in KAMI but nowhere else? + These are custom commands that they added; those aren't from Baritone. The equivalent you're looking for is `goto x z`. diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index be8c98aed..6ededbd5d 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -46,12 +46,11 @@ class BaritoneGradleTask extends DefaultTask { ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", ARTIFACT_API = "%s-api-%s.jar", ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; - - protected String artifactName, artifactVersion; protected final Path artifactPath, artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, // these are different for forge builds proguardOut; + protected String artifactName, artifactVersion; public BaritoneGradleTask() { this.artifactName = getProject().getProperties().get("archivesBaseName").toString(); diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 53ee4429b..8d6126d8b 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -34,9 +34,8 @@ */ public class CreateDistTask extends BaritoneGradleTask { - private static MessageDigest SHA1_DIGEST; - private static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII); + private static MessageDigest SHA1_DIGEST; private static String getFileName(Path p) { return p.getFileName().toString(); diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 37404d65e..ea9c824fa 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -57,14 +57,26 @@ public String getUrl() { return url; } + public void setUrl(String url) { + this.url = url; + } + public String getExtract() { return extract; } + public void setExtract(String extract) { + this.extract = extract; + } + public String getCompType() { return compType; } + public void setCompType(String compType) { + this.compType = compType; + } + @TaskAction protected void exec() throws Exception { super.verifyArtifacts(); @@ -79,10 +91,6 @@ protected void exec() throws Exception { cleanup(); } - public void setCompType(String compType) { - this.compType = compType; - } - private boolean isMcJar(File f) { return f.getName().startsWith(compType.equals("FORGE") ? "forge-" : "minecraft-") && f.getName().contains("minecraft-merged-named"); } @@ -130,8 +138,7 @@ private String getJavaBinPathForProguard() throws Exception { try { path = findJavaPathByGradleConfig(); if (path != null) return path; - } - catch (Exception ex) { + } catch (Exception ex) { System.err.println("Unable to find java by javaCompile options"); ex.printStackTrace(); } @@ -139,8 +146,7 @@ private String getJavaBinPathForProguard() throws Exception { try { path = findJavaByJavaHome(); if (path != null) return path; - } - catch(Exception ex) { + } catch (Exception ex) { System.err.println("Unable to find java by JAVA_HOME"); ex.printStackTrace(); } @@ -148,7 +154,7 @@ private String getJavaBinPathForProguard() throws Exception { path = findJavaByGradleCurrentRuntime(); if (path != null) return path; - + throw new Exception("Unable to find java to determine ProGuard libraryjars. Please specify forkOptions.executable in javaCompile," + " JAVA_HOME environment variable, or make sure to run Gradle with the correct JDK (a v1.8 only)"); } @@ -292,15 +298,8 @@ private void proguardApi() throws Exception { private void cleanup() { try { Files.delete(this.proguardOut); - } catch (IOException ignored) {} - } - - public void setUrl(String url) { - this.url = url; - } - - public void setExtract(String extract) { - this.extract = extract; + } catch (IOException ignored) { + } } private void proguardStandalone() throws Exception { diff --git a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java index fc268cd35..93d564e90 100644 --- a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java +++ b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java @@ -39,56 +39,6 @@ */ public class Determinizer { - public static void determinize(String inputPath, String outputPath) throws IOException { - System.out.println("Running Determinizer"); - System.out.println(" Input path: " + inputPath); - System.out.println(" Output path: " + outputPath); - - try ( - JarFile jarFile = new JarFile(new File(inputPath)); - JarOutputStream jos = new JarOutputStream(new FileOutputStream(new File(outputPath))) - ) { - - List entries = jarFile.stream() - .sorted(Comparator.comparing(JarEntry::getName)) - .collect(Collectors.toList()); - - for (JarEntry entry : entries) { - if (entry.getName().equals("META-INF/fml_cache_annotation.json")) { - continue; - } - if (entry.getName().equals("META-INF/fml_cache_class_versions.json")) { - continue; - } - JarEntry clone = new JarEntry(entry.getName()); - clone.setTime(42069); - jos.putNextEntry(clone); - if (entry.getName().endsWith(".refmap.json")) { - JsonObject object = new JsonParser().parse(new InputStreamReader(jarFile.getInputStream(entry))).getAsJsonObject(); - jos.write(writeSorted(object).getBytes()); - } else { - copy(jarFile.getInputStream(entry), jos); - } - } - jos.finish(); - } - } - - private static void copy(InputStream is, OutputStream os) throws IOException { - byte[] buffer = new byte[1024]; - int len; - while ((len = is.read(buffer)) != -1) { - os.write(buffer, 0, len); - } - } - - private static String writeSorted(JsonObject in) throws IOException { - StringWriter writer = new StringWriter(); - JsonWriter jw = new JsonWriter(writer); - ORDERED_JSON_WRITER.write(jw, in); - return writer.toString() + "\n"; - } - /** * All credits go to GSON and its contributors. GSON is licensed under the Apache 2.0 License. * This implementation has been modified to write {@link JsonObject} keys in order. @@ -140,4 +90,54 @@ public void write(JsonWriter out, JsonElement value) throws IOException { } } }; + + public static void determinize(String inputPath, String outputPath) throws IOException { + System.out.println("Running Determinizer"); + System.out.println(" Input path: " + inputPath); + System.out.println(" Output path: " + outputPath); + + try ( + JarFile jarFile = new JarFile(new File(inputPath)); + JarOutputStream jos = new JarOutputStream(new FileOutputStream(new File(outputPath))) + ) { + + List entries = jarFile.stream() + .sorted(Comparator.comparing(JarEntry::getName)) + .collect(Collectors.toList()); + + for (JarEntry entry : entries) { + if (entry.getName().equals("META-INF/fml_cache_annotation.json")) { + continue; + } + if (entry.getName().equals("META-INF/fml_cache_class_versions.json")) { + continue; + } + JarEntry clone = new JarEntry(entry.getName()); + clone.setTime(42069); + jos.putNextEntry(clone); + if (entry.getName().endsWith(".refmap.json")) { + JsonObject object = new JsonParser().parse(new InputStreamReader(jarFile.getInputStream(entry))).getAsJsonObject(); + jos.write(writeSorted(object).getBytes()); + } else { + copy(jarFile.getInputStream(entry), jos); + } + } + jos.finish(); + } + } + + private static void copy(InputStream is, OutputStream os) throws IOException { + byte[] buffer = new byte[1024]; + int len; + while ((len = is.read(buffer)) != -1) { + os.write(buffer, 0, len); + } + } + + private static String writeSorted(JsonObject in) throws IOException { + StringWriter writer = new StringWriter(); + JsonWriter jw = new JsonWriter(writer); + ORDERED_JSON_WRITER.write(jw, in); + return writer.toString() + "\n"; + } } diff --git a/common/build.gradle b/common/build.gradle index 6705750c9..7164d948d 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,6 +1,3 @@ -import baritone.gradle.task.CreateDistTask -import baritone.gradle.task.ProguardTask - architectury { injectInjectables = false common(System.getProperty("Baritone.enabled_platforms").split(",")) @@ -128,7 +125,6 @@ jar { } - task removeDist(type: Delete) { delete new File(rootProject.rootDir, "dist") } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 891d4d8cc..97450b4f9 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -1,29 +1,23 @@ - { "schemaVersion": 1, "id": "baritone-meteor", "version": "${version}", - "name": "Baritone", "description": "Google Maps for Blockgame", "authors": [ - "leijurv", "Brady" + "leijurv", + "Brady" ], "contact": { "homepage": "https://github.com/cabaletta/baritone", "sources": "https://github.com/cabaletta/baritone" }, - "license": "LGPL-3.0", - "icon": "assets/baritone/icon.png", - "environment": "*", "entrypoints": { }, "mixins": [ - "mixins.baritone-meteor.json" ], - "depends": { "fabricloader": ">=0.11.0", "minecraft": "1.19.2" diff --git a/forge/gradle.properties b/forge/gradle.properties index 24befc474..bda35b14a 100644 --- a/forge/gradle.properties +++ b/forge/gradle.properties @@ -14,5 +14,4 @@ # You should have received a copy of the GNU Lesser General Public License # along with Baritone. If not, see . # - loom.platform=forge \ No newline at end of file diff --git a/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java b/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java index db84d62e1..401a0e664 100644 --- a/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java +++ b/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java @@ -15,7 +15,9 @@ * along with Baritone. If not, see . */ -package baritone.launch;import net.minecraftforge.fml.common.Mod; +package baritone.launch; + +import net.minecraftforge.fml.common.Mod; @Mod("baritoe") public class BaritoneForgeModXD { diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 1ad269fce..423074726 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -4,37 +4,37 @@ # Note that there are a couple of TOML lists in this file. # Find more information on toml format here: https://github.com/toml-lang/toml # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml -modLoader="javafml" #mandatory +modLoader = "javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[33,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. -license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" +loaderVersion = "[33,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +license = "https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" # A URL to refer people to when problems occur with this mod -issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional +issueTrackerURL = "https://github.com/cabaletta/baritone/issues" #optional # A list of mods - how many allowed here is determined by the individual mod loader [[mods]] #mandatory # The modid of the mod -modId="baritoe" #mandatory +modId = "baritoe" #mandatory # The version number of the mod - there's a few well known ${} variables useable here or just hardcode it -version="${file.jarVersion}" #mandatory - # A display name for the mod -displayName="Baritone" #mandatory +version = "${file.jarVersion}" #mandatory +# A display name for the mod +displayName = "Baritone" #mandatory # A URL for the "homepage" for this mod, displayed in the mod UI -displayURL="https://github.com/cabaletta/baritone" #optional +displayURL = "https://github.com/cabaletta/baritone" #optional # A file name (in the root of the mod JAR) containing a logo for display #logoFile="examplemod.png" #optional # A text field displayed in the mod UI -credits="Hat Gamers" #optional +credits = "Hat Gamers" #optional # A text field displayed in the mod UI -authors="leijurv, Brady" #optional +authors = "leijurv, Brady" #optional # The description text for the mod (multi line!) (#mandatory) -description=''' +description = ''' A Minecraft pathfinder bot. ''' [[dependencies.baritoe]] -modId="minecraft" -mandatory=true +modId = "minecraft" +mandatory = true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.19.2]" -ordering="NONE" -side="BOTH" \ No newline at end of file +versionRange = "[1.19.2]" +ordering = "NONE" +side = "BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index f9123edda..36260f6e7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,11 +1,8 @@ org.gradle.jvmargs=-Xmx4G - mod_version=1.19.2-SNAPSHOT maven_group=baritone archives_base_name=baritone - minecraft_version=1.19.2 forge_version=1.19.2-43.0.0 fabric_version=0.14.9 - baritone.fabric_build=true \ No newline at end of file diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 12e41f7c0..979ab59e6 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -196,7 +196,7 @@ public final class Settings { * Blocks that Baritone is not allowed to break */ public final Setting> blocksToDisallowBreaking = new Setting<>(new ArrayList<>( - // Leave Empty by Default + // Leave Empty by Default )); /** @@ -915,7 +915,7 @@ public final class Settings { /** * Only build the selected part of schematics */ - public final Setting buildOnlySelection = new Setting<>(false); + public final Setting buildOnlySelection = new Setting<>(false); /** * How far to move before repeating the build. 0 to disable repeating on a certain axis, 0,0,0 to disable entirely @@ -1285,10 +1285,53 @@ public final class Settings { public final Map, Type> settingTypes; + Settings() { + Field[] temp = getClass().getFields(); + + Map> tmpByName = new HashMap<>(); + List> tmpAll = new ArrayList<>(); + Map, Type> tmpSettingTypes = new HashMap<>(); + + try { + for (Field field : temp) { + if (field.getType().equals(Setting.class)) { + Setting setting = (Setting) field.get(this); + String name = field.getName(); + setting.name = name; + name = name.toLowerCase(); + if (tmpByName.containsKey(name)) { + throw new IllegalStateException("Duplicate setting name"); + } + tmpByName.put(name, setting); + tmpAll.add(setting); + tmpSettingTypes.put(setting, ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]); + } + } + } catch (IllegalAccessException e) { + throw new IllegalStateException(e); + } + byLowerName = Collections.unmodifiableMap(tmpByName); + allSettings = Collections.unmodifiableList(tmpAll); + settingTypes = Collections.unmodifiableMap(tmpSettingTypes); + } + + // here be dragons + + @SuppressWarnings("unchecked") + public List> getAllValuesByType(Class cla$$) { + List> result = new ArrayList<>(); + for (Setting setting : allSettings) { + if (setting.getValueClass().equals(cla$$)) { + result.add((Setting) setting); + } + } + return result; + } + public final class Setting { - public T value; public final T defaultValue; + public T value; private String name; @SuppressWarnings("unchecked") @@ -1335,47 +1378,4 @@ public final Type getType() { return settingTypes.get(this); } } - - // here be dragons - - Settings() { - Field[] temp = getClass().getFields(); - - Map> tmpByName = new HashMap<>(); - List> tmpAll = new ArrayList<>(); - Map, Type> tmpSettingTypes = new HashMap<>(); - - try { - for (Field field : temp) { - if (field.getType().equals(Setting.class)) { - Setting setting = (Setting) field.get(this); - String name = field.getName(); - setting.name = name; - name = name.toLowerCase(); - if (tmpByName.containsKey(name)) { - throw new IllegalStateException("Duplicate setting name"); - } - tmpByName.put(name, setting); - tmpAll.add(setting); - tmpSettingTypes.put(setting, ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]); - } - } - } catch (IllegalAccessException e) { - throw new IllegalStateException(e); - } - byLowerName = Collections.unmodifiableMap(tmpByName); - allSettings = Collections.unmodifiableList(tmpAll); - settingTypes = Collections.unmodifiableMap(tmpSettingTypes); - } - - @SuppressWarnings("unchecked") - public List> getAllValuesByType(Class cla$$) { - List> result = new ArrayList<>(); - for (Setting setting : allSettings) { - if (setting.getValueClass().equals(cla$$)) { - result.add((Setting) setting); - } - } - return result; - } } diff --git a/src/api/java/baritone/api/behavior/IBehavior.java b/src/api/java/baritone/api/behavior/IBehavior.java index 811563b93..95fb22344 100644 --- a/src/api/java/baritone/api/behavior/IBehavior.java +++ b/src/api/java/baritone/api/behavior/IBehavior.java @@ -27,4 +27,5 @@ * @see IGameEventListener * @since 9/23/2018 */ -public interface IBehavior extends AbstractGameEventListener {} +public interface IBehavior extends AbstractGameEventListener { +} diff --git a/src/api/java/baritone/api/cache/IWaypoint.java b/src/api/java/baritone/api/cache/IWaypoint.java index ff2350993..c0434efb4 100644 --- a/src/api/java/baritone/api/cache/IWaypoint.java +++ b/src/api/java/baritone/api/cache/IWaypoint.java @@ -95,13 +95,6 @@ enum Tag { this.names = names; } - /** - * @return A name that can be passed to {@link #getByName(String)} to retrieve this tag - */ - public String getName() { - return names[0]; - } - /** * Gets a tag by one of its names. * @@ -132,5 +125,12 @@ public static String[] getAllNames() { return names.toArray(new String[0]); } + + /** + * @return A name that can be passed to {@link #getByName(String)} to retrieve this tag + */ + public String getName() { + return names[0]; + } } } diff --git a/src/api/java/baritone/api/command/Command.java b/src/api/java/baritone/api/command/Command.java index c81a3365b..a4e94b151 100644 --- a/src/api/java/baritone/api/command/Command.java +++ b/src/api/java/baritone/api/command/Command.java @@ -39,13 +39,12 @@ */ public abstract class Command implements ICommand { - protected IBaritone baritone; - protected IPlayerContext ctx; - /** * The names of this command. This is what you put after the command prefix. */ protected final List names; + protected IBaritone baritone; + protected IPlayerContext ctx; /** * Creates a new Baritone control command. diff --git a/src/api/java/baritone/api/command/datatypes/ForDirection.java b/src/api/java/baritone/api/command/datatypes/ForDirection.java index cbfbc2243..5dd355b41 100644 --- a/src/api/java/baritone/api/command/datatypes/ForDirection.java +++ b/src/api/java/baritone/api/command/datatypes/ForDirection.java @@ -19,9 +19,10 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; +import net.minecraft.core.Direction; + import java.util.Locale; import java.util.stream.Stream; -import net.minecraft.core.Direction; public enum ForDirection implements IDatatypeFor { INSTANCE; diff --git a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java index 061428827..7afbfb8fa 100644 --- a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java +++ b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java @@ -29,27 +29,6 @@ public enum ForWaypoints implements IDatatypeFor { INSTANCE; - @Override - public IWaypoint[] get(IDatatypeContext ctx) throws CommandException { - final String input = ctx.getConsumer().getString(); - final IWaypoint.Tag tag = IWaypoint.Tag.getByName(input); - - // If the input doesn't resolve to a valid tag, resolve by name - return tag == null - ? getWaypointsByName(ctx.getBaritone(), input) - : getWaypointsByTag(ctx.getBaritone(), tag); - } - - @Override - public Stream tabComplete(IDatatypeContext ctx) throws CommandException { - return new TabCompleteHelper() - .append(getWaypointNames(ctx.getBaritone())) - .sortAlphabetically() - .prepend(IWaypoint.Tag.getAllNames()) - .filterPrefix(ctx.getConsumer().getString()) - .stream(); - } - public static IWaypointCollection waypoints(IBaritone baritone) { return baritone.getWorldProvider().getCurrentWorld().getWaypoints(); } @@ -78,4 +57,25 @@ public static IWaypoint[] getWaypointsByName(IBaritone baritone, String name) { .filter(waypoint -> waypoint.getName().equalsIgnoreCase(name)) .toArray(IWaypoint[]::new); } + + @Override + public IWaypoint[] get(IDatatypeContext ctx) throws CommandException { + final String input = ctx.getConsumer().getString(); + final IWaypoint.Tag tag = IWaypoint.Tag.getByName(input); + + // If the input doesn't resolve to a valid tag, resolve by name + return tag == null + ? getWaypointsByName(ctx.getBaritone(), input) + : getWaypointsByTag(ctx.getBaritone(), tag); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + return new TabCompleteHelper() + .append(getWaypointNames(ctx.getBaritone())) + .sortAlphabetically() + .prepend(IWaypoint.Tag.getAllNames()) + .filterPrefix(ctx.getConsumer().getString()) + .stream(); + } } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeFile.java b/src/api/java/baritone/api/command/datatypes/RelativeFile.java index f2de7308c..bb827db28 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeFile.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeFile.java @@ -35,26 +35,6 @@ public enum RelativeFile implements IDatatypePost { INSTANCE; - @Override - public File apply(IDatatypeContext ctx, File original) throws CommandException { - if (original == null) { - original = new File("./"); - } - - Path path; - try { - path = FileSystems.getDefault().getPath(ctx.getConsumer().getString()); - } catch (InvalidPathException e) { - throw new IllegalArgumentException("invalid path"); - } - return getCanonicalFileUnchecked(original.toPath().resolve(path).toFile()); - } - - @Override - public Stream tabComplete(IDatatypeContext ctx) { - return Stream.empty(); - } - /** * Seriously * @@ -83,10 +63,10 @@ public static Stream tabComplete(IArgConsumer consumer, File base0) thro boolean useParent = !currentPathStringThing.isEmpty() && !currentPathStringThing.endsWith(File.separator); File currentFile = currentPath.isAbsolute() ? currentPath.toFile() : new File(base, currentPathStringThing); return Stream.of(Objects.requireNonNull(getCanonicalFileUnchecked( - useParent - ? currentFile.getParentFile() - : currentFile - ).listFiles())) + useParent + ? currentFile.getParentFile() + : currentFile + ).listFiles())) .map(f -> (currentPath.isAbsolute() ? f : basePath.relativize(f.toPath()).toString()) + (f.isDirectory() ? File.separator : "")) .filter(s -> s.toLowerCase(Locale.US).startsWith(currentPathStringThing.toLowerCase(Locale.US))) @@ -100,4 +80,24 @@ public static File gameDir() { } return gameDir; } + + @Override + public File apply(IDatatypeContext ctx, File original) throws CommandException { + if (original == null) { + original = new File("./"); + } + + Path path; + try { + path = FileSystems.getDefault().getPath(ctx.getConsumer().getString()); + } catch (InvalidPathException e) { + throw new IllegalArgumentException("invalid path"); + } + return getCanonicalFileUnchecked(original.toPath().resolve(path).toFile()); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) { + return Stream.empty(); + } } diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index 4df11b350..8de892217 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -45,24 +45,6 @@ public Paginator(E... entries) { this.entries = Arrays.asList(entries); } - public Paginator setPageSize(int pageSize) { - this.pageSize = pageSize; - return this; - } - - public int getMaxPage() { - return (entries.size() - 1) / pageSize + 1; - } - - public boolean validPage(int page) { - return page > 0 && page <= getMaxPage(); - } - - public Paginator skipPages(int pages) { - page += pages; - return this; - } - public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform, String commandPrefix) throws CommandException { int page = 1; consumer.requireMax(1); @@ -130,6 +112,24 @@ public static void paginate(IArgConsumer consumer, T[] elems, Function setPageSize(int pageSize) { + this.pageSize = pageSize; + return this; + } + + public int getMaxPage() { + return (entries.size() - 1) / pageSize + 1; + } + + public boolean validPage(int page) { + return page > 0 && page <= getMaxPage(); + } + + public Paginator skipPages(int pages) { + page += pages; + return this; + } + public void display(Function transform, String commandPrefix) { int offset = (page - 1) * pageSize; for (int i = offset; i < offset + pageSize; i++) { diff --git a/src/api/java/baritone/api/command/registry/Registry.java b/src/api/java/baritone/api/command/registry/Registry.java index 067791690..921c33711 100644 --- a/src/api/java/baritone/api/command/registry/Registry.java +++ b/src/api/java/baritone/api/command/registry/Registry.java @@ -40,17 +40,17 @@ public class Registry { * not just use a map. */ private final Deque _entries = new LinkedList<>(); + /** + * The collection of entries that are currently in this registry. This is a collection (and not a list) because, + * internally, entries are stored in a linked list, which is not the same as a normal list. + */ + public final Collection entries = Collections.unmodifiableCollection(_entries); /** * A HashSet containing every entry currently registered. Entries are added to this set when something is registered * and removed from the set when they are unregistered. An entry being present in this set indicates that it is * currently registered, can be removed, and should not be reregistered until it is removed. */ private final Set registered = new HashSet<>(); - /** - * The collection of entries that are currently in this registry. This is a collection (and not a list) because, - * internally, entries are stored in a linked list, which is not the same as a normal list. - */ - public final Collection entries = Collections.unmodifiableCollection(_entries); /** * @param entry The entry to check. diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index bae83c0fa..894d6fa86 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -42,6 +42,13 @@ public RotationMoveEvent(Type type, float yaw) { this.yaw = yaw; } + /** + * @return The yaw rotation + */ + public final float getYaw() { + return this.yaw; + } + /** * Set the yaw movement rotation * @@ -51,13 +58,6 @@ public final void setYaw(float yaw) { this.yaw = yaw; } - /** - * @return The yaw rotation - */ - public final float getYaw() { - return this.yaw; - } - /** * @return The type of the event */ diff --git a/src/api/java/baritone/api/event/events/SprintStateEvent.java b/src/api/java/baritone/api/event/events/SprintStateEvent.java index 606728017..4c7305a19 100644 --- a/src/api/java/baritone/api/event/events/SprintStateEvent.java +++ b/src/api/java/baritone/api/event/events/SprintStateEvent.java @@ -25,11 +25,11 @@ public final class SprintStateEvent { private Boolean state; - public final void setState(boolean state) { - this.state = state; - } - public final Boolean getState() { return this.state; } + + public final void setState(boolean state) { + this.state = state; + } } diff --git a/src/api/java/baritone/api/event/events/TickEvent.java b/src/api/java/baritone/api/event/events/TickEvent.java index 5c484ae49..4cae3e200 100644 --- a/src/api/java/baritone/api/event/events/TickEvent.java +++ b/src/api/java/baritone/api/event/events/TickEvent.java @@ -35,6 +35,11 @@ public TickEvent(EventState state, Type type, int count) { this.count = count; } + public static synchronized BiFunction createNextProvider() { + final int count = overallTickCount++; + return (state, type) -> new TickEvent(state, type, count); + } + public int getCount() { return count; } @@ -47,11 +52,6 @@ public EventState getState() { return state; } - public static synchronized BiFunction createNextProvider() { - final int count = overallTickCount++; - return (state, type) -> new TickEvent(state, type, count); - } - public enum Type { /** * When guarantees can be made about diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index 9eac8de46..5a94e5100 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -31,44 +31,58 @@ public interface AbstractGameEventListener extends IGameEventListener { @Override - default void onTick(TickEvent event) {} + default void onTick(TickEvent event) { + } @Override - default void onPlayerUpdate(PlayerUpdateEvent event) {} + default void onPlayerUpdate(PlayerUpdateEvent event) { + } @Override - default void onSendChatMessage(ChatEvent event) {} + default void onSendChatMessage(ChatEvent event) { + } @Override - default void onPreTabComplete(TabCompleteEvent event) {} + default void onPreTabComplete(TabCompleteEvent event) { + } @Override - default void onChunkEvent(ChunkEvent event) {} + default void onChunkEvent(ChunkEvent event) { + } @Override - default void onRenderPass(RenderEvent event) {} + default void onRenderPass(RenderEvent event) { + } @Override - default void onWorldEvent(WorldEvent event) {} + default void onWorldEvent(WorldEvent event) { + } @Override - default void onSendPacket(PacketEvent event) {} + default void onSendPacket(PacketEvent event) { + } @Override - default void onReceivePacket(PacketEvent event) {} + default void onReceivePacket(PacketEvent event) { + } @Override - default void onPlayerRotationMove(RotationMoveEvent event) {} + default void onPlayerRotationMove(RotationMoveEvent event) { + } @Override - default void onPlayerSprintState(SprintStateEvent event) {} + default void onPlayerSprintState(SprintStateEvent event) { + } @Override - default void onBlockInteract(BlockInteractEvent event) {} + default void onBlockInteract(BlockInteractEvent event) { + } @Override - default void onPlayerDeath() {} + default void onPlayerDeath() { + } @Override - default void onPathEvent(PathEvent event) {} + default void onPathEvent(PathEvent event) { + } } diff --git a/src/api/java/baritone/api/pathing/goals/GoalBlock.java b/src/api/java/baritone/api/pathing/goals/GoalBlock.java index 7cb9da14a..9b6a28a2d 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalBlock.java @@ -53,6 +53,18 @@ public GoalBlock(int x, int y, int z) { this.z = z; } + public static double calculate(double xDiff, int yDiff, double zDiff) { + double heuristic = 0; + + // if yDiff is 1 that means that currentY-goalY==1 which means that we're 1 block above where we should be + // therefore going from 0,yDiff,0 to a GoalYLevel of 0 is accurate + heuristic += GoalYLevel.calculate(0, yDiff); + + //use the pythagorean and manhattan mixture from GoalXZ + heuristic += GoalXZ.calculate(xDiff, zDiff); + return heuristic; + } + @Override public boolean isInGoal(int x, int y, int z) { return x == this.x && y == this.y && z == this.z; @@ -83,16 +95,4 @@ public String toString() { public BlockPos getGoalPos() { return new BlockPos(x, y, z); } - - public static double calculate(double xDiff, int yDiff, double zDiff) { - double heuristic = 0; - - // if yDiff is 1 that means that currentY-goalY==1 which means that we're 1 block above where we should be - // therefore going from 0,yDiff,0 to a GoalYLevel of 0 is accurate - heuristic += GoalYLevel.calculate(0, yDiff); - - //use the pythagorean and manhattan mixture from GoalXZ - heuristic += GoalXZ.calculate(xDiff, zDiff); - return heuristic; - } } diff --git a/src/api/java/baritone/api/pathing/goals/GoalXZ.java b/src/api/java/baritone/api/pathing/goals/GoalXZ.java index f70f6c4f7..b06f548cd 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalXZ.java +++ b/src/api/java/baritone/api/pathing/goals/GoalXZ.java @@ -52,27 +52,6 @@ public GoalXZ(BetterBlockPos pos) { this.z = pos.z; } - @Override - public boolean isInGoal(int x, int y, int z) { - return x == this.x && z == this.z; - } - - @Override - public double heuristic(int x, int y, int z) {//mostly copied from GoalBlock - int xDiff = x - this.x; - int zDiff = z - this.z; - return calculate(xDiff, zDiff); - } - - @Override - public String toString() { - return String.format( - "GoalXZ{x=%s,z=%s}", - SettingsUtil.maybeCensor(x), - SettingsUtil.maybeCensor(z) - ); - } - public static double calculate(double xDiff, double zDiff) { //This is a combination of pythagorean and manhattan distance //It takes into account the fact that pathing can either walk diagonally or forwards @@ -101,6 +80,27 @@ public static GoalXZ fromDirection(Vec3 origin, float yaw, double distance) { return new GoalXZ(Mth.floor(x), Mth.floor(z)); } + @Override + public boolean isInGoal(int x, int y, int z) { + return x == this.x && z == this.z; + } + + @Override + public double heuristic(int x, int y, int z) {//mostly copied from GoalBlock + int xDiff = x - this.x; + int zDiff = z - this.z; + return calculate(xDiff, zDiff); + } + + @Override + public String toString() { + return String.format( + "GoalXZ{x=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(z) + ); + } + public int getX() { return x; } diff --git a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java index 603ef9bd1..6487f0434 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java +++ b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java @@ -36,16 +36,6 @@ public GoalYLevel(int level) { this.level = level; } - @Override - public boolean isInGoal(int x, int y, int z) { - return y == level; - } - - @Override - public double heuristic(int x, int y, int z) { - return calculate(level, y); - } - public static double calculate(int goalY, int currentY) { if (currentY > goalY) { // need to descend @@ -58,6 +48,16 @@ public static double calculate(int goalY, int currentY) { return 0; } + @Override + public boolean isInGoal(int x, int y, int z) { + return y == level; + } + + @Override + public double heuristic(int x, int y, int z) { + return calculate(level, y); + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index bb3213563..4c10a593d 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -25,6 +25,7 @@ import java.io.File; import java.util.List; +import java.util.Map; /** * @author Brady @@ -41,6 +42,8 @@ public interface IBuilderProcess extends IBaritoneProcess { */ void build(String name, ISchematic schematic, Vec3i origin); + boolean isFromAltoclef(); + /** * Requests a build for the specified schematic, labeled as specified, with the specified origin. * @@ -56,20 +59,38 @@ default boolean build(String schematicFile, BlockPos origin) { return build(schematicFile, file, origin); } + void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef); + + boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef); + void buildOpenSchematic(); void pause(); boolean isPaused(); + Vec3i getSchemSize(); + + void popStack(); + + boolean clearState(); + + boolean isFromAltoclefFinished(); + void resume(); void clearArea(BlockPos corner1, BlockPos corner2); + void reset(); + + Map getMissing(); + /** * @return A list of block states that are estimated to be placeable by this builder process. You can use this in * schematics, for example, to pick a state that the builder process will be happy with, because any variation will * cause it to give up. This is updated every tick, but only while the builder process is active. */ List getApproxPlaceable(); + + void noteInsert(BlockPos pos); } diff --git a/src/api/java/baritone/api/process/ICustomGoalProcess.java b/src/api/java/baritone/api/process/ICustomGoalProcess.java index 5084aff2f..b7b1ff56d 100644 --- a/src/api/java/baritone/api/process/ICustomGoalProcess.java +++ b/src/api/java/baritone/api/process/ICustomGoalProcess.java @@ -21,13 +21,6 @@ public interface ICustomGoalProcess extends IBaritoneProcess { - /** - * Sets the pathing goal - * - * @param goal The new goal - */ - void setGoal(Goal goal); - /** * Starts path calculation and execution. */ @@ -38,6 +31,13 @@ public interface ICustomGoalProcess extends IBaritoneProcess { */ Goal getGoal(); + /** + * Sets the pathing goal + * + * @param goal The new goal + */ + void setGoal(Goal goal); + /** * Sets the goal and begins the path execution. * diff --git a/src/api/java/baritone/api/process/IFarmProcess.java b/src/api/java/baritone/api/process/IFarmProcess.java index 0c07567de..cf63b64d3 100644 --- a/src/api/java/baritone/api/process/IFarmProcess.java +++ b/src/api/java/baritone/api/process/IFarmProcess.java @@ -33,7 +33,9 @@ public interface IFarmProcess extends IBaritoneProcess { /** * Begin to search for nearby crops to farm. */ - default void farm() {farm(0, null);} + default void farm() { + farm(0, null); + } /** * Begin to search for crops to farm with in specified aria @@ -41,5 +43,7 @@ public interface IFarmProcess extends IBaritoneProcess { * * @param range The distance to search for crops to farm */ - default void farm(int range) {farm(range, null);} + default void farm(int range) { + farm(range, null); + } } diff --git a/src/api/java/baritone/api/schematic/CompositeSchematic.java b/src/api/java/baritone/api/schematic/CompositeSchematic.java index 62faa8bf2..983273e0d 100644 --- a/src/api/java/baritone/api/schematic/CompositeSchematic.java +++ b/src/api/java/baritone/api/schematic/CompositeSchematic.java @@ -27,6 +27,12 @@ public class CompositeSchematic extends AbstractSchematic { private final List schematics; private CompositeSchematicEntry[] schematicArr; + public CompositeSchematic(int x, int y, int z) { + super(x, y, z); + schematics = new ArrayList<>(); + recalcArr(); + } + private void recalcArr() { schematicArr = schematics.toArray(new CompositeSchematicEntry[0]); for (CompositeSchematicEntry entry : schematicArr) { @@ -36,12 +42,6 @@ private void recalcArr() { } } - public CompositeSchematic(int x, int y, int z) { - super(x, y, z); - schematics = new ArrayList<>(); - recalcArr(); - } - public void put(ISchematic extra, int x, int y, int z) { schematics.add(new CompositeSchematicEntry(extra, x, y, z)); recalcArr(); diff --git a/src/api/java/baritone/api/schematic/ISchematic.java b/src/api/java/baritone/api/schematic/ISchematic.java index ae9a1306d..362d246f7 100644 --- a/src/api/java/baritone/api/schematic/ISchematic.java +++ b/src/api/java/baritone/api/schematic/ISchematic.java @@ -76,7 +76,8 @@ default int size(Direction.Axis axis) { /** * Resets possible caches to avoid wrong behavior when moving the schematic around */ - default void reset() {} + default void reset() { + } /** * @return The width (X axis length) of this schematic diff --git a/src/api/java/baritone/api/schematic/SubstituteSchematic.java b/src/api/java/baritone/api/schematic/SubstituteSchematic.java index 8013d838d..96baa38da 100644 --- a/src/api/java/baritone/api/schematic/SubstituteSchematic.java +++ b/src/api/java/baritone/api/schematic/SubstituteSchematic.java @@ -34,7 +34,7 @@ public class SubstituteSchematic extends AbstractSchematic { private final Map> substitutions; private final Map> blockStateCache = new HashMap<>(); - public SubstituteSchematic(ISchematic schematic, Map> substitutions) { + public SubstituteSchematic(ISchematic schematic, Map> substitutions) { super(schematic.widthX(), schematic.heightY(), schematic.lengthZ()); this.schematic = schematic; this.substitutions = substitutions; diff --git a/src/api/java/baritone/api/utils/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java index 676398887..058aa23d9 100644 --- a/src/api/java/baritone/api/utils/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -70,11 +70,6 @@ public static BetterBlockPos from(BlockPos pos) { return new BetterBlockPos(pos); } - @Override - public int hashCode() { - return (int) longHash(x, y, z); - } - public static long longHash(BetterBlockPos pos) { return longHash(pos.x, pos.y, pos.z); } @@ -100,6 +95,11 @@ public static long longHash(int x, int y, int z) { return hash; } + @Override + public int hashCode() { + return (int) longHash(x, y, z); + } + @Override public boolean equals(Object o) { if (o == null) { diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 847f22d41..ca5655a59 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -51,13 +51,13 @@ public final class BlockOptionalMeta { - private final Block block; - private static LootTables manager; - private final ImmutableSet stateHashes; - private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); + private static LootTables manager; private static PredicateManager predicate = new PredicateManager(); private static Map> drops = new HashMap<>(); + private final Block block; + private final ImmutableSet stateHashes; + private final ImmutableSet stackHashes; private final Set blockstates; public BlockOptionalMeta(@Nonnull Block block) { @@ -107,14 +107,6 @@ private static ImmutableSet getStackHashes(Set blockstates) ); } - public Block getBlock() { - return block; - } - - public boolean matches(@Nonnull Block block) { - return block == this.block; - } - public static LootTables getManager() { if (manager == null) { PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource()); @@ -160,6 +152,14 @@ private static synchronized List drops(Block b) { }); } + public Block getBlock() { + return block; + } + + public boolean matches(@Nonnull Block block) { + return block == this.block; + } + public boolean matches(@Nonnull BlockState blockstate) { Block block = blockstate.getBlock(); return block == this.block && stateHashes.contains(blockstate.hashCode()); diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index 002c8126a..652de1188 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -28,6 +28,9 @@ public class BlockUtils { private static transient Map resourceCache = new HashMap<>(); + private BlockUtils() { + } + public static String blockToString(Block block) { ResourceLocation loc = Registry.BLOCK.getKey(block); String name = loc.getPath(); // normally, only write the part after the minecraft: @@ -63,6 +66,4 @@ public static Block stringToBlockNullable(String name) { resourceCache = copy; return block; } - - private BlockUtils() {} } diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 354863921..2e1830c02 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -39,7 +39,8 @@ public interface Helper { /** * Instance of {@link Helper}. Used for static-context reference. */ - Helper HELPER = new Helper() {}; + Helper HELPER = new Helper() { + }; /** * Instance of the game diff --git a/src/api/java/baritone/api/utils/RandomSpotNearby.java b/src/api/java/baritone/api/utils/RandomSpotNearby.java new file mode 100644 index 000000000..8dbcaa9d6 --- /dev/null +++ b/src/api/java/baritone/api/utils/RandomSpotNearby.java @@ -0,0 +1,40 @@ +package baritone.api.utils; + +import java.util.Random; + +public class RandomSpotNearby { + private final Random rand; + private BetterBlockPos end; + private double r; + private double old_r; + + public RandomSpotNearby(final double r) { + this.rand = new Random(); + this.r = r; + this.old_r = r; + } + + private final double MAX_DIST_INCREASE() { + return old_r * 2; + } + + private BetterBlockPos calc(final BetterBlockPos start) { + final double phi = rand.nextInt(360) + rand.nextDouble(); + final double radius = rand.nextInt((int) Math.round(r)) + rand.nextDouble(); //rand.nextDouble(r) + rand.nextDouble(); + final int x = (int) Math.round(radius * Math.sin(phi)); + final int z = (int) Math.round(radius * Math.cos(phi)); + + this.end = new BetterBlockPos(start.getX() + x, start.getY(), start.getZ() + z); + return this.end; + } + + public BetterBlockPos next(final BetterBlockPos start) { + this.r = (this.r - this.old_r > MAX_DIST_INCREASE()) ? this.old_r : this.r; + return next(start, 0.3d); + } + + public BetterBlockPos next(final BetterBlockPos start, final double increaseRadius) { + this.r += increaseRadius; + return calc(start); + } +} diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index c317f44bd..01c9b6c92 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -28,10 +28,11 @@ */ public final class RayTraceUtils { - private RayTraceUtils() {} - public static ClipContext.Fluid fluidHandling = ClipContext.Fluid.NONE; + private RayTraceUtils() { + } + /** * Performs a block raytrace with the specified rotations. This should only be used when * any entity collisions can be ignored, because this method will not recognize if an diff --git a/src/api/java/baritone/api/utils/Rotation.java b/src/api/java/baritone/api/utils/Rotation.java index 36beea7bc..647687d51 100644 --- a/src/api/java/baritone/api/utils/Rotation.java +++ b/src/api/java/baritone/api/utils/Rotation.java @@ -41,6 +41,33 @@ public Rotation(float yaw, float pitch) { } } + /** + * Clamps the specified pitch value between -90 and 90. + * + * @param pitch The input pitch + * @return The clamped pitch + */ + public static float clampPitch(float pitch) { + return Math.max(-90, Math.min(90, pitch)); + } + + /** + * Normalizes the specified yaw value between -180 and 180. + * + * @param yaw The input yaw + * @return The normalized yaw + */ + public static float normalizeYaw(float yaw) { + float newYaw = yaw % 360F; + if (newYaw < -180F) { + newYaw += 360F; + } + if (newYaw > 180F) { + newYaw -= 360F; + } + return newYaw; + } + /** * @return The yaw of this rotation */ @@ -128,33 +155,6 @@ public boolean yawIsReallyClose(Rotation other) { return (yawDiff < 0.01 || yawDiff > 359.99); } - /** - * Clamps the specified pitch value between -90 and 90. - * - * @param pitch The input pitch - * @return The clamped pitch - */ - public static float clampPitch(float pitch) { - return Math.max(-90, Math.min(90, pitch)); - } - - /** - * Normalizes the specified yaw value between -180 and 180. - * - * @param yaw The input yaw - * @return The normalized yaw - */ - public static float normalizeYaw(float yaw) { - float newYaw = yaw % 360F; - if (newYaw < -180F) { - newYaw += 360F; - } - if (newYaw > 180F) { - newYaw -= 360F; - } - return newYaw; - } - @Override public String toString() { return "Yaw: " + yaw + ", Pitch: " + pitch; diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index e50501563..0f43c730b 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -62,7 +62,8 @@ public final class RotationUtils { new Vec3(1, 0.5, 0.5) // East }; - private RotationUtils() {} + private RotationUtils() { + } /** * Calculates the rotation from BlockPosdest to BlockPosorig diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 99cc76f28..e72a5b14a 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -179,7 +179,7 @@ public static String settingToString(Settings.Setting setting) throws IllegalSta /** * This should always be the same as whether the setting can be parsed from or serialized to a string * - * @param the setting + * @param setting setting * @return true if the setting can not be set or read by the user */ public static boolean javaOnlySetting(Settings.Setting setting) { @@ -205,28 +205,6 @@ public static void parseAndApply(Settings settings, String settingName, String s setting.value = parsed; } - private interface ISettingParser { - - T parse(ParserContext context, String raw); - - String toString(ParserContext context, T value); - - boolean accepts(Type type); - } - - private static class ParserContext { - - private final Settings.Setting setting; - - private ParserContext(Settings.Setting setting) { - this.setting = setting; - } - - private Settings.Setting getSetting() { - return this.setting; - } - } - private enum Parser implements ISettingParser { DOUBLE(Double.class, Double::parseDouble), @@ -301,7 +279,7 @@ public String toString(ParserContext context, Object value) { Parser keyParser = Parser.getParser(keyType); Parser valueParser = Parser.getParser(valueType); - return ((Map) value).entrySet().stream() + return ((Map) value).entrySet().stream() .map(o -> keyParser.toString(context, o.getKey()) + "->" + valueParser.toString(context, o.getValue())) .collect(Collectors.joining(",")); } @@ -332,6 +310,12 @@ Parser(Class cla$$, Function parser, Function toStr this.toString = x -> toString.apply((T) x); } + public static Parser getParser(Type type) { + return Stream.of(values()) + .filter(parser -> parser.accepts(type)) + .findFirst().orElse(null); + } + @Override public Object parse(ParserContext context, String raw) { Object parsed = this.parser.apply(raw); @@ -348,11 +332,27 @@ public String toString(ParserContext context, Object value) { public boolean accepts(Type type) { return type instanceof Class && this.cla$$.isAssignableFrom((Class) type); } + } - public static Parser getParser(Type type) { - return Stream.of(values()) - .filter(parser -> parser.accepts(type)) - .findFirst().orElse(null); + private interface ISettingParser { + + T parse(ParserContext context, String raw); + + String toString(ParserContext context, T value); + + boolean accepts(Type type); + } + + private static class ParserContext { + + private final Settings.Setting setting; + + private ParserContext(Settings.Setting setting) { + this.setting = setting; + } + + private Settings.Setting getSetting() { + return this.setting; } } } diff --git a/src/api/java/baritone/api/utils/TypeUtils.java b/src/api/java/baritone/api/utils/TypeUtils.java index 457cc449a..01fe45459 100644 --- a/src/api/java/baritone/api/utils/TypeUtils.java +++ b/src/api/java/baritone/api/utils/TypeUtils.java @@ -26,7 +26,8 @@ */ public final class TypeUtils { - private TypeUtils() {} + private TypeUtils() { + } /** * Resolves the "base type" for the specified type. For example, if the specified diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index 4ea94b95a..dceab6c61 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -32,7 +32,8 @@ */ public final class VecUtils { - private VecUtils() {} + private VecUtils() { + } /** * Calculates the center of the block at the specified position's bounding box diff --git a/src/launch/java/baritone/launch/MixinPlugin.java b/src/launch/java/baritone/launch/MixinPlugin.java index bbebf4988..17ea1d26c 100644 --- a/src/launch/java/baritone/launch/MixinPlugin.java +++ b/src/launch/java/baritone/launch/MixinPlugin.java @@ -56,7 +56,8 @@ public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { } @Override - public void acceptTargets(Set myTargets, Set otherTargets) {} + public void acceptTargets(Set myTargets, Set otherTargets) { + } @Override public List getMixins() { @@ -64,8 +65,10 @@ public List getMixins() { } @Override - public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } @Override - public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } } \ No newline at end of file diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java index 711ca6554..e8bc9456c 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java @@ -18,13 +18,13 @@ package baritone.launch.mixins; import baritone.utils.accessor.IChunkArray; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.LevelChunk; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import java.util.concurrent.atomic.AtomicReferenceArray; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.chunk.LevelChunk; @Mixin(targets = "net.minecraft.client.multiplayer.ClientChunkCache$Storage") public abstract class MixinChunkArray implements IChunkArray { @@ -34,16 +34,15 @@ public abstract class MixinChunkArray implements IChunkArray { @Final @Shadow int chunkRadius; - - @Final - @Shadow - private int viewRange; @Shadow int viewCenterX; @Shadow int viewCenterZ; @Shadow int chunkCount; + @Final + @Shadow + private int viewRange; @Shadow abstract boolean inRange(int x, int z); diff --git a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java index de465b82a..d25837754 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java @@ -19,14 +19,14 @@ import baritone.utils.accessor.IChunkArray; import baritone.utils.accessor.IClientChunkProvider; +import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.client.multiplayer.ClientLevel; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import java.lang.reflect.Field; import java.util.Arrays; -import net.minecraft.client.multiplayer.ClientChunkCache; -import net.minecraft.client.multiplayer.ClientLevel; @Mixin(ClientChunkCache.class) public class MixinClientChunkProvider implements IClientChunkProvider { diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index 63331502f..70d5861cb 100644 --- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -22,6 +22,8 @@ import com.mojang.brigadier.context.StringRange; import com.mojang.brigadier.suggestion.Suggestion; import com.mojang.brigadier.suggestion.Suggestions; +import net.minecraft.client.gui.components.CommandSuggestions; +import net.minecraft.client.gui.components.EditBox; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -33,8 +35,6 @@ import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import java.util.stream.Stream; -import net.minecraft.client.gui.components.CommandSuggestions; -import net.minecraft.client.gui.components.EditBox; /** * @author Brady diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index b48e919f2..366d819f9 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -30,11 +30,10 @@ @Mixin(Entity.class) public class MixinEntity { + float yawRestore; @Shadow private float yRot; - float yawRestore; - @Inject( method = "moveRelative", at = @At("HEAD") diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index 44a5c1e32..c14f1b846 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -31,8 +31,6 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import static org.objectweb.asm.Opcodes.GETFIELD; - /** * @author Brady * @since 9/10/2018 diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java index ed896730f..f53c7e602 100644 --- a/src/launch/java/baritone/launch/mixins/MixinScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.java @@ -21,17 +21,17 @@ import baritone.api.IBaritone; import baritone.api.event.events.ChatEvent; import baritone.utils.accessor.IGuiScreen; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Style; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; - -import java.net.URI; -import net.minecraft.client.gui.screens.Screen; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.net.URI; + @Mixin(Screen.class) public abstract class MixinScreen implements IGuiScreen { diff --git a/src/launch/resources/pack.mcmeta b/src/launch/resources/pack.mcmeta index 1bc616027..35ded91c4 100644 --- a/src/launch/resources/pack.mcmeta +++ b/src/launch/resources/pack.mcmeta @@ -1,6 +1,6 @@ { - "pack": { - "description": "baritoe", - "pack_format": 5 - } + "pack": { + "description": "baritoe", + "pack_format": 5 + } } diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 7174a1228..86ff19101 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -60,18 +60,18 @@ public class Baritone implements IBaritone { if (!Files.exists(dir.toPath())) { try { Files.createDirectories(dir.toPath()); - } catch (IOException ignored) {} + } catch (IOException ignored) { + } } } + public BlockStateInterface bsi; private GameEventHandler gameEventHandler; - private PathingBehavior pathingBehavior; private LookBehavior lookBehavior; private InventoryBehavior inventoryBehavior; private WaypointBehavior waypointBehavior; private InputOverrideHandler inputOverrideHandler; - private FollowProcess followProcess; private MineProcess mineProcess; private GetToBlockProcess getToBlockProcess; @@ -80,16 +80,12 @@ public class Baritone implements IBaritone { private ExploreProcess exploreProcess; private BackfillProcess backfillProcess; private FarmProcess farmProcess; - private PathingControlManager pathingControlManager; private SelectionManager selectionManager; private CommandManager commandManager; - private IPlayerContext playerContext; private WorldProvider worldProvider; - public BlockStateInterface bsi; - Baritone() { this.gameEventHandler = new GameEventHandler(this); @@ -122,6 +118,18 @@ public class Baritone implements IBaritone { this.commandManager = new CommandManager(this); } + public static Settings settings() { + return BaritoneAPI.getSettings(); + } + + public static File getDir() { + return dir; + } + + public static Executor getExecutor() { + return threadPool; + } + @Override public PathingControlManager getPathingControlManager() { return this.pathingControlManager; @@ -214,19 +222,8 @@ public void openClick() { try { Thread.sleep(100); Helper.mc.execute(() -> Helper.mc.setScreen(new GuiClick())); - } catch (Exception ignored) {} + } catch (Exception ignored) { + } }).start(); } - - public static Settings settings() { - return BaritoneAPI.getSettings(); - } - - public static File getDir() { - return dir; - } - - public static Executor getExecutor() { - return threadPool; - } } diff --git a/src/main/java/baritone/KeepName.java b/src/main/java/baritone/KeepName.java index 7fc04cd68..8fe29cd71 100644 --- a/src/main/java/baritone/KeepName.java +++ b/src/main/java/baritone/KeepName.java @@ -18,4 +18,5 @@ package baritone; // Annotation for classes and class members that should not be renamed by proguard -public @interface KeepName {} +public @interface KeepName { +} diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index ed540b0f4..6b9825897 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -18,7 +18,9 @@ package baritone.behavior; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.event.events.TickEvent; +import baritone.api.utils.input.Input; import baritone.utils.ToolSet; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.Direction; @@ -47,7 +49,7 @@ public InventoryBehavior(Baritone baritone) { @Override public void onTick(TickEvent event) { - if (!Baritone.settings().allowInventory.value) { + if (!Baritone.settings().allowInventory.value || AltoClefSettings.getInstance().isInteractionPaused()) { return; } if (event.getType() == TickEvent.Type.OUT) { @@ -57,16 +59,20 @@ public void onTick(TickEvent event) { // we have a crafting table or a chest or something open return; } - if (firstValidThrowaway() >= 9) { // aka there are none on the hotbar, but there are some in main inventory - swapWithHotBar(firstValidThrowaway(), 8); - } - int pick = bestToolAgainst(Blocks.STONE, PickaxeItem.class); - if (pick >= 9) { - swapWithHotBar(pick, 0); + // Only perform the inventory swap if we're pathing/mining. Otherwise, this will run every frame. + if (baritone.getPathingBehavior().isPathing() || baritone.getInputOverrideHandler().isInputForcedDown(Input.CLICK_LEFT)) { + if (firstValidThrowaway() >= 9) { // aka there are none on the hotbar, but there are some in main inventory + swapWithHotBar(firstValidThrowaway(), 8); + } + int pick = bestToolAgainst(Blocks.STONE, PickaxeItem.class); + if (pick >= 9) { + swapWithHotBar(pick, 0); + } } } public void attemptToPutOnHotbar(int inMainInvy, Predicate disallowedHotbar) { + if (AltoClefSettings.getInstance().isInteractionPaused()) return; OptionalInt destination = getTempHotbarSlot(disallowedHotbar); if (destination.isPresent()) { swapWithHotBar(inMainInvy, destination.getAsInt()); @@ -95,15 +101,20 @@ public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { } private void swapWithHotBar(int inInventory, int inHotbar) { + if (AltoClefSettings.getInstance().isInteractionPaused()) return; ctx.playerController().windowClick(ctx.player().inventoryMenu.containerId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); } private int firstValidThrowaway() { // TODO offhand idk NonNullList invy = ctx.player().getInventory().items; for (int i = 0; i < invy.size(); i++) { - if (Baritone.settings().acceptableThrowawayItems.value.contains(invy.get(i).getItem())) { - return i; + Item item = invy.get(i).getItem(); + if (Baritone.settings().acceptableThrowawayItems.value.contains(item)) { + if (!AltoClefSettings.getInstance().isItemProtected(item)) { + return i; + } } + } return -1; } @@ -133,6 +144,7 @@ private int bestToolAgainst(Block against, Class cla$$) { public boolean hasGenericThrowaway() { for (Item item : Baritone.settings().acceptableThrowawayItems.value) { + if (AltoClefSettings.getInstance().isItemProtected(item)) continue; if (throwaway(false, stack -> item.equals(stack.getItem()))) { return true; } @@ -141,6 +153,9 @@ public boolean hasGenericThrowaway() { } public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { + if (AltoClefSettings.getInstance().isInteractionPaused()) return false; + if (AltoClefSettings.getInstance().shouldAvoidPlacingAt(x, y, z)) return false; + BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { }))))) { @@ -150,6 +165,7 @@ public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { return true; } for (Item item : Baritone.settings().acceptableThrowawayItems.value) { + if (AltoClefSettings.getInstance().isItemProtected(item)) continue; if (throwaway(select, stack -> item.equals(stack.getItem()))) { return true; } @@ -162,6 +178,8 @@ public boolean throwaway(boolean select, Predicate desired) { } public boolean throwaway(boolean select, Predicate desired, boolean allowInventory) { + if (AltoClefSettings.getInstance().isInteractionPaused()) + return false; LocalPlayer p = ctx.player(); NonNullList inv = p.getInventory().items; for (int i = 0; i < 9; i++) { diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index f18bd862b..af273f2bd 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -46,38 +46,42 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, Helper { + private final Object pathCalcLock = new Object(); + private final Object pathPlanLock = new Object(); + private final LinkedBlockingQueue toDispatch = new LinkedBlockingQueue<>(); private PathExecutor current; private PathExecutor next; - private Goal goal; private CalculationContext context; - /*eta*/ private int ticksElapsedSoFar; private BetterBlockPos startPosition; - private boolean safeToCancel; private boolean pauseRequestedLastTick; private boolean unpausedLastTick; private boolean pausedThisTick; private boolean cancelRequested; private boolean calcFailedLastTick; - private volatile AbstractNodeCostSearch inProgress; - private final Object pathCalcLock = new Object(); - - private final Object pathPlanLock = new Object(); - private boolean lastAutoJump; - private BetterBlockPos expectedSegmentStart; - private final LinkedBlockingQueue toDispatch = new LinkedBlockingQueue<>(); - public PathingBehavior(Baritone baritone) { super(baritone); } + private static AbstractNodeCostSearch createPathfinder(BlockPos start, Goal goal, IPath previous, CalculationContext context) { + Goal transformed = goal; + if (Baritone.settings().simplifyUnloadedYCoord.value && goal instanceof IGoalRenderPos) { + BlockPos pos = ((IGoalRenderPos) goal).getGoalPos(); + if (!context.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ())) { + transformed = new GoalXZ(pos.getX(), pos.getZ()); + } + } + Favoring favoring = new Favoring(context.getBaritone().getPlayerContext(), previous, context); + return new AStarPathFinder(start.getX(), start.getY(), start.getZ(), transformed, favoring, context); + } + private void queuePathEvent(PathEvent event) { toDispatch.add(event); } @@ -549,18 +553,6 @@ private void findPathInNewThread(final BlockPos start, final boolean talkAboutIt }); } - private static AbstractNodeCostSearch createPathfinder(BlockPos start, Goal goal, IPath previous, CalculationContext context) { - Goal transformed = goal; - if (Baritone.settings().simplifyUnloadedYCoord.value && goal instanceof IGoalRenderPos) { - BlockPos pos = ((IGoalRenderPos) goal).getGoalPos(); - if (!context.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ())) { - transformed = new GoalXZ(pos.getX(), pos.getZ()); - } - } - Favoring favoring = new Favoring(context.getBaritone().getPlayerContext(), previous, context); - return new AStarPathFinder(start.getX(), start.getY(), start.getZ(), transformed, favoring, context); - } - @Override public void onRenderPass(RenderEvent event) { PathRenderer.render(event, this); diff --git a/src/main/java/baritone/behavior/WaypointBehavior.java b/src/main/java/baritone/behavior/WaypointBehavior.java index 035f1dfd6..34c21cbfe 100644 --- a/src/main/java/baritone/behavior/WaypointBehavior.java +++ b/src/main/java/baritone/behavior/WaypointBehavior.java @@ -72,21 +72,21 @@ public void onPlayerDeath() { baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(deathWaypoint); MutableComponent component = Component.literal("Death position saved."); component.setStyle(component.getStyle() - .withColor(ChatFormatting.WHITE) - .withHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, - Component.literal("Click to goto death") - )) - .withClickEvent(new ClickEvent( - ClickEvent.Action.RUN_COMMAND, - String.format( - "%s%s goto %s @ %d", - FORCE_COMMAND_PREFIX, - "wp", - deathWaypoint.getTag().getName(), - deathWaypoint.getCreationTimestamp() - ) - ))); + .withColor(ChatFormatting.WHITE) + .withHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + Component.literal("Click to goto death") + )) + .withClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s goto %s @ %d", + FORCE_COMMAND_PREFIX, + "wp", + deathWaypoint.getTag().getName(), + deathWaypoint.getCreationTimestamp() + ) + ))); Helper.HELPER.logDirect(component); } diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 3109d9293..2a48cf749 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -133,27 +133,21 @@ public final class CachedChunk { * The chunk z coordinate */ public final int z; - + public final long cacheTimestamp; /** * The actual raw data of this packed chunk. *

* Each block is expressed as 2 bits giving a total of 16 KiB */ private final BitSet data; - private final Int2ObjectOpenHashMap special; - /** * The block names of each surface level block for generating an overview */ private final BlockState[] overview; - private final int[] heightMap; - private final Map> specialBlockLocations; - public final long cacheTimestamp; - CachedChunk(int x, int z, int height, BitSet data, BlockState[] overview, Map> specialBlockLocations, long cacheTimestamp) { this.size = size(height); this.sizeInBytes = sizeInBytes(size); @@ -184,6 +178,18 @@ public static int sizeInBytes(int size) { return size / 8; } + /** + * Returns the raw bit index of the specified position + * + * @param x The x position + * @param y The y position + * @param z The z position + * @return The bit index + */ + public static int getPositionIndex(int x, int y, int z) { + return (x << 1) | (z << 5) | (y << 9); + } + private final void setSpecial() { for (Map.Entry> entry : specialBlockLocations.entrySet()) { for (BlockPos pos : entry.getValue()) { @@ -274,18 +280,6 @@ public final byte[] toByteArray() { return this.data.toByteArray(); } - /** - * Returns the raw bit index of the specified position - * - * @param x The x position - * @param y The y position - * @param z The z position - * @return The bit index - */ - public static int getPositionIndex(int x, int y, int z) { - return (x << 1) | (z << 5) | (y << 9); - } - /** * Validates the size of an input {@link BitSet} containing the raw * packed chunk data. Sizes that exceed {@link CachedChunk#size} are diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index 6c70f1eba..a13f43b39 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -75,6 +75,10 @@ public final class CachedRegion implements ICachedRegion { this.dimension = dimension; } + private static Path getRegionFile(Path cacheDir, int regionX, int regionZ) { + return Paths.get(cacheDir.toString(), "r." + regionX + "." + regionZ + ".bcr"); + } + @Override public final BlockState getBlock(int x, int y, int z) { int adjY = y - dimension.minY(); @@ -111,7 +115,6 @@ public final synchronized void updateCachedChunk(int chunkX, int chunkZ, CachedC hasUnsavedChanges = true; } - public synchronized final void save(String directory) { if (!hasUnsavedChanges) { return; @@ -354,8 +357,4 @@ public final int getX() { public final int getZ() { return this.z; } - - private static Path getRegionFile(Path cacheDir, int regionX, int regionZ) { - return Paths.get(cacheDir.toString(), "r." + regionX + "." + regionZ + ".bcr"); - } } diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 2384d1c58..8728106b7 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -49,30 +49,25 @@ public final class CachedWorld implements ICachedWorld, Helper { * The maximum number of regions in any direction from (0,0) */ private static final int REGION_MAX = 30_000_000 / 512 + 1; - - /** - * A map of all of the cached regions. - */ - private Long2ObjectMap cachedRegions = new Long2ObjectOpenHashMap<>(); - /** * The directory that the cached region files are saved to */ private final String directory; - /** * Queue of positions to pack. Refers to the toPackMap, in that every element of this queue will be a * key in that map. */ private final LinkedBlockingQueue toPackQueue = new LinkedBlockingQueue<>(); - /** * All chunk positions pending packing. This map will be updated in-place if a new update to the chunk occurs * while waiting in the queue for the packer thread to get to it. */ private final Map toPackMap = new ConcurrentHashMap<>(); - private final DimensionType dimension; + /** + * A map of all of the cached regions. + */ + private Long2ObjectMap cachedRegions = new Long2ObjectOpenHashMap<>(); CachedWorld(Path directory, DimensionType dimension) { if (!Files.exists(directory)) { diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 4f922884d..b90b74432 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -96,7 +96,8 @@ public static CachedChunk pack(LevelChunk chunk) { // get top block in columns // @formatter:off for (int z = 0; z < 16; z++) { - https://www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html + https: +//www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html for (int x = 0; x < 16; x++) { for (int y = height - 1; y >= 0; y--) { int index = CachedChunk.getPositionIndex(x, y, z); diff --git a/src/main/java/baritone/cache/WaypointCollection.java b/src/main/java/baritone/cache/WaypointCollection.java index 222adfdf6..52dd1f539 100644 --- a/src/main/java/baritone/cache/WaypointCollection.java +++ b/src/main/java/baritone/cache/WaypointCollection.java @@ -48,7 +48,8 @@ public class WaypointCollection implements IWaypointCollection { if (!Files.exists(directory)) { try { Files.createDirectories(directory); - } catch (IOException ignored) {} + } catch (IOException ignored) { + } } System.out.println("Would save waypoints to " + directory); this.waypoints = new HashMap<>(); @@ -88,7 +89,8 @@ private synchronized void load(Waypoint.Tag tag) { int z = in.readInt(); this.waypoints.get(tag).add(new Waypoint(name, tag, new BetterBlockPos(x, y, z), creationTimestamp)); } - } catch (IOException ignored) {} + } catch (IOException ignored) { + } } private synchronized void save(Waypoint.Tag tag) { diff --git a/src/main/java/baritone/cache/WorldData.java b/src/main/java/baritone/cache/WorldData.java index b8efb5e1c..ddf98b4ce 100644 --- a/src/main/java/baritone/cache/WorldData.java +++ b/src/main/java/baritone/cache/WorldData.java @@ -33,10 +33,10 @@ public class WorldData implements IWorldData { public final CachedWorld cache; - private final WaypointCollection waypoints; //public final MapData map; public final Path directory; public final DimensionType dimension; + private final WaypointCollection waypoints; WorldData(Path directory, DimensionType dimension) { this.directory = directory; diff --git a/src/main/java/baritone/command/argparser/DefaultArgParsers.java b/src/main/java/baritone/command/argparser/DefaultArgParsers.java index 77a14bf92..4f9730e33 100644 --- a/src/main/java/baritone/command/argparser/DefaultArgParsers.java +++ b/src/main/java/baritone/command/argparser/DefaultArgParsers.java @@ -26,6 +26,14 @@ public class DefaultArgParsers { + public static final List> ALL = Arrays.asList( + IntArgumentParser.INSTANCE, + LongArgumentParser.INSTANCE, + FloatArgumentParser.INSTANCE, + DoubleArgumentParser.INSTANCE, + BooleanArgumentParser.INSTANCE + ); + public enum IntArgumentParser implements IArgParser.Stateless { INSTANCE; @@ -113,12 +121,4 @@ public Boolean parseArg(ICommandArgument arg) throws RuntimeException { } } } - - public static final List> ALL = Arrays.asList( - IntArgumentParser.INSTANCE, - LongArgumentParser.INSTANCE, - FloatArgumentParser.INSTANCE, - DoubleArgumentParser.INSTANCE, - BooleanArgumentParser.INSTANCE - ); } diff --git a/src/main/java/baritone/command/argument/CommandArguments.java b/src/main/java/baritone/command/argument/CommandArguments.java index 22a2ef887..4dab6a6d5 100644 --- a/src/main/java/baritone/command/argument/CommandArguments.java +++ b/src/main/java/baritone/command/argument/CommandArguments.java @@ -30,10 +30,11 @@ */ public final class CommandArguments { - private CommandArguments() {} - private static final Pattern ARG_PATTERN = Pattern.compile("\\S+"); + private CommandArguments() { + } + /** * Turn a string into a list of {@link ICommandArgument}s. This is needed because of {@link ICommandArgument#getRawRest()} * diff --git a/src/main/java/baritone/command/defaults/CommandAlias.java b/src/main/java/baritone/command/defaults/CommandAlias.java index 71c322fe3..f55879d0a 100644 --- a/src/main/java/baritone/command/defaults/CommandAlias.java +++ b/src/main/java/baritone/command/defaults/CommandAlias.java @@ -27,8 +27,8 @@ public class CommandAlias extends Command { - private final String shortDesc; public final String target; + private final String shortDesc; public CommandAlias(IBaritone baritone, List names, String shortDesc, String target) { super(baritone, names.toArray(new String[0])); diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index d3ad09133..bc8fe5b91 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -192,7 +192,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } } } - ISchematic schematic = new StaticSchematic(){{ + ISchematic schematic = new StaticSchematic() {{ states = blockstates; x = size.getX(); y = size.getY(); @@ -368,10 +368,6 @@ enum TransformTarget { this.names = names; } - public ISelection[] transform(ISelection[] selections) { - return transform.apply(selections); - } - public static TransformTarget getByName(String name) { for (TransformTarget target : TransformTarget.values()) { for (String alias : target.names) { @@ -390,5 +386,9 @@ public static String[] getAllNames() { } return names.toArray(new String[0]); } + + public ISelection[] transform(ISelection[] selections) { + return transform.apply(selections); + } } } diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 5087c740b..94e67c401 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -50,7 +50,7 @@ public class WaypointsCommand extends Command { - private Map> deletedWaypoints = new HashMap<>(); + private Map> deletedWaypoints = new HashMap<>(); public WaypointsCommand(IBaritone baritone) { super(baritone, "waypoints", "waypoint", "wp"); diff --git a/src/main/java/baritone/command/manager/CommandManager.java b/src/main/java/baritone/command/manager/CommandManager.java index 4c33226d3..1313ac060 100644 --- a/src/main/java/baritone/command/manager/CommandManager.java +++ b/src/main/java/baritone/command/manager/CommandManager.java @@ -52,6 +52,16 @@ public CommandManager(Baritone baritone) { DefaultCommands.createAll(baritone).forEach(this.registry::register); } + private static Tuple> expand(String string, boolean preserveEmptyLast) { + String label = string.split("\\s", 2)[0]; + List args = CommandArguments.from(string.substring(label.length()), preserveEmptyLast); + return new Tuple<>(label, args); + } + + public static Tuple> expand(String string) { + return expand(string, false); + } + @Override public IBaritone getBaritone() { return this.baritone; @@ -115,16 +125,6 @@ private ExecutionWrapper from(Tuple> expanded) { return command == null ? null : new ExecutionWrapper(command, label, args); } - private static Tuple> expand(String string, boolean preserveEmptyLast) { - String label = string.split("\\s", 2)[0]; - List args = CommandArguments.from(string.substring(label.length()), preserveEmptyLast); - return new Tuple<>(label, args); - } - - public static Tuple> expand(String string) { - return expand(string, false); - } - private static final class ExecutionWrapper { private ICommand command; diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index b37b598ff..d2b75f481 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -89,7 +89,8 @@ protected Optional calculate0(long primaryTimeout, long failureTimeout) { if (slowPath) { try { Thread.sleep(Baritone.settings().slowPathTimeDelayMS.value); - } catch (InterruptedException ignored) {} + } catch (InterruptedException ignored) { + } } PathNode currentNode = openSet.removeLowest(); mostRecentConsidered = currentNode; diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index d20b519dc..14c04096b 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -36,29 +36,6 @@ */ public abstract class AbstractNodeCostSearch implements IPathFinder, Helper { - protected final int startX; - protected final int startY; - protected final int startZ; - - protected final Goal goal; - - private final CalculationContext context; - - /** - * @see Issue #107 - */ - private final Long2ObjectOpenHashMap map; - - protected PathNode startNode; - - protected PathNode mostRecentConsidered; - - protected final PathNode[] bestSoFar = new PathNode[COEFFICIENTS.length]; - - private volatile boolean isFinished; - - protected boolean cancelRequested; - /** * This is really complicated and hard to explain. I wrote a comment in the old version of MineBot but it was so * long it was easier as a Google Doc (because I could insert charts). @@ -66,12 +43,10 @@ public abstract class AbstractNodeCostSearch implements IPathFinder, Helper { * @see here */ protected static final double[] COEFFICIENTS = {1.5, 2, 2.5, 3, 4, 5, 10}; - /** * If a path goes less than 5 blocks and doesn't make it to its goal, it's not worth considering. */ protected static final double MIN_DIST_PATH = 5; - /** * there are floating point errors caused by random combinations of traverse and diagonal over a flat area * that means that sometimes there's a cost improvement of like 10 ^ -16 @@ -80,6 +55,20 @@ public abstract class AbstractNodeCostSearch implements IPathFinder, Helper { * who cares about a hundredth of a tick? that's half a millisecond for crying out loud! */ protected static final double MIN_IMPROVEMENT = 0.01; + protected final int startX; + protected final int startY; + protected final int startZ; + protected final Goal goal; + protected final PathNode[] bestSoFar = new PathNode[COEFFICIENTS.length]; + private final CalculationContext context; + /** + * @see Issue #107 + */ + private final Long2ObjectOpenHashMap map; + protected PathNode startNode; + protected PathNode mostRecentConsidered; + protected boolean cancelRequested; + private volatile boolean isFinished; AbstractNodeCostSearch(int startX, int startY, int startZ, Goal goal, CalculationContext context) { this.startX = startX; diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index a625c63e2..8bf16d102 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -56,7 +56,6 @@ public class CalculationContext { public final boolean hasWaterBucket; public final boolean hasThrowaway; public final boolean canSprint; - protected final double placeBlockCost; // protected because you should call the function instead public final boolean allowBreak; public final List allowBreakAnyway; public final boolean allowParkour; @@ -71,10 +70,11 @@ public class CalculationContext { public final int maxFallHeightBucket; public final double waterWalkSpeed; public final double breakBlockAdditionalCost; - public double backtrackCostFavoringCoefficient; - public double jumpPenalty; public final double walkOnWaterOnePenalty; public final BetterWorldBorder worldBorder; + protected final double placeBlockCost; // protected because you should call the function instead + public double backtrackCostFavoringCoefficient; + public double jumpPenalty; public CalculationContext(IBaritone baritone) { this(baritone, false); diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index f671d359f..570cdea68 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -38,29 +38,21 @@ public abstract class Movement implements IMovement, MovementHelper { protected final IBaritone baritone; protected final IPlayerContext ctx; - - private MovementState currentState = new MovementState().setStatus(MovementStatus.PREPPING); - protected final BetterBlockPos src; - protected final BetterBlockPos dest; - /** * The positions that need to be broken before this movement can ensue */ protected final BetterBlockPos[] positionsToBreak; - /** * The position where we need to place a block before this movement can ensue */ protected final BetterBlockPos positionToPlace; - - private Double cost; - public List toBreakCached = null; public List toPlaceCached = null; public List toWalkIntoCached = null; - + private MovementState currentState = new MovementState().setStatus(MovementStatus.PREPPING); + private Double cost; private Set validPositionsCached = null; private Boolean calculatedWhileLoaded; diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index d35b63e6f..7a6078b9e 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -612,14 +612,14 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, return PlaceResult.NO_OPTION; } - enum PlaceResult { - READY_TO_PLACE, ATTEMPTING, NO_OPTION; - } - static boolean isTransparent(Block b) { return b == Blocks.AIR || b == Blocks.LAVA || b == Blocks.WATER; } + + enum PlaceResult { + READY_TO_PLACE, ATTEMPTING, NO_OPTION; + } } diff --git a/src/main/java/baritone/pathing/movement/MovementState.java b/src/main/java/baritone/pathing/movement/MovementState.java index 73539698a..6cb042876 100644 --- a/src/main/java/baritone/pathing/movement/MovementState.java +++ b/src/main/java/baritone/pathing/movement/MovementState.java @@ -27,19 +27,19 @@ public class MovementState { + private final Map inputState = new HashMap<>(); private MovementStatus status; private MovementTarget target = new MovementTarget(); - private final Map inputState = new HashMap<>(); + + public MovementStatus getStatus() { + return status; + } public MovementState setStatus(MovementStatus status) { this.status = status; return this; } - public MovementStatus getStatus() { - return status; - } - public MovementTarget getTarget() { return this.target; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index abc87bd98..a7c91dd4e 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -43,17 +43,6 @@ public MovementAscend(IBaritone baritone, BetterBlockPos src, BetterBlockPos des super(baritone, src, dest, new BetterBlockPos[]{dest, src.above(2), dest.above()}, dest.below()); } - @Override - public void reset() { - super.reset(); - ticksWithoutPlacement = 0; - } - - @Override - public double calculateCost(CalculationContext context) { - return cost(context, src.x, src.y, src.z, dest.x, dest.z); - } - public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { BlockState toPlace = context.get(destX, y, destZ); double additionalPlacementCost = 0; @@ -144,6 +133,17 @@ public static double cost(CalculationContext context, int x, int y, int z, int d return totalCost; } + @Override + public void reset() { + super.reset(); + ticksWithoutPlacement = 0; + } + + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z, dest.x, dest.z); + } + @Override protected Set calculateValidPositions() { BetterBlockPos prior = new BetterBlockPos(src.subtract(getDirection()).above()); // sometimes we back up to place the block, also sprint ascends, also skip descend to straight ascend diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index ad603b1b9..1facef310 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -48,22 +48,6 @@ public MovementDescend(IBaritone baritone, BetterBlockPos start, BetterBlockPos super(baritone, start, end, new BetterBlockPos[]{end.above(2), end.above(), end}, end.below()); } - @Override - public void reset() { - super.reset(); - numTicks = 0; - } - - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is a fall not a descend - } - return result.cost; - } - public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { double totalCost = 0; BlockState destDown = context.get(destX, y - 1, destZ); @@ -198,6 +182,22 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, } } + @Override + public void reset() { + super.reset(); + numTicks = 0; + } + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is a fall not a descend + } + return result.cost; + } + @Override protected Set calculateValidPositions() { return ImmutableSet.of(src, dest.above(), dest); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 45d18d1c7..fbdab1330 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -39,22 +39,6 @@ public MovementDownward(IBaritone baritone, BetterBlockPos start, BetterBlockPos super(baritone, start, end, new BetterBlockPos[]{end}); } - @Override - public void reset() { - super.reset(); - numTicks = 0; - } - - @Override - public double calculateCost(CalculationContext context) { - return cost(context, src.x, src.y, src.z); - } - - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest); - } - public static double cost(CalculationContext context, int x, int y, int z) { if (!context.allowDownward) { return COST_INF; @@ -72,6 +56,22 @@ public static double cost(CalculationContext context, int x, int y, int z) { } } + @Override + public void reset() { + super.reset(); + numTicks = 0; + } + + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z); + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest); + } + @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index f8d2775a7..7bb8a535c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -57,16 +57,6 @@ public MovementFall(IBaritone baritone, BetterBlockPos src, BetterBlockPos dest) super(baritone, src, dest, MovementFall.buildPositionsToBreak(src, dest)); } - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - MovementDescend.cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is a descend not a fall - } - return result.cost; - } - private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, BetterBlockPos dest) { BetterBlockPos[] toBreak; int diffX = src.getX() - dest.getX(); @@ -79,6 +69,16 @@ private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, Better return toBreak; } + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + MovementDescend.cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is a descend not a fall + } + return result.cost; + } + private boolean willPlaceBucket() { CalculationContext context = new CalculationContext(baritone); MutableMoveResult result = new MutableMoveResult(); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 8e6397260..483fdc048 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -105,7 +105,7 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi maxJump = 3; } } - + // check parkour jumps from smallest to largest for obstacles/walls and landing positions int verifiedMaxJump = 1; // i - 1 (when i = 2) for (int i = 2; i <= maxJump; i++) { @@ -146,14 +146,14 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi } break; } - + if (!MovementHelper.fullyPassable(context, destX, y + 3, destZ)) { break; } - + verifiedMaxJump = i; } - + // parkour place starts here if (!context.allowParkourPlace) { return; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 6e6a41351..8a2408b33 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -45,16 +45,6 @@ public MovementPillar(IBaritone baritone, BetterBlockPos start, BetterBlockPos e super(baritone, start, end, new BetterBlockPos[]{start.above(2)}, start); } - @Override - public double calculateCost(CalculationContext context) { - return cost(context, src.x, src.y, src.z); - } - - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest); - } - public static double cost(CalculationContext context, int x, int y, int z) { BlockState fromState = context.get(x, y, z); Block from = fromState.getBlock(); @@ -157,6 +147,16 @@ public static BlockPos getAgainst(CalculationContext context, BetterBlockPos vin return null; } + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z); + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest); + } + @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index d64a81502..437dae57a 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -52,22 +52,6 @@ public MovementTraverse(IBaritone baritone, BetterBlockPos from, BetterBlockPos super(baritone, from, to, new BetterBlockPos[]{to.above(), to}, to.below()); } - @Override - public void reset() { - super.reset(); - wasTheBridgeBlockAlwaysThere = true; - } - - @Override - public double calculateCost(CalculationContext context) { - return cost(context, src.x, src.y, src.z, dest.x, dest.z); - } - - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest); - } - public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { BlockState pb0 = context.get(destX, y + 1, destZ); BlockState pb1 = context.get(destX, y, destZ); @@ -154,6 +138,22 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } + @Override + public void reset() { + super.reset(); + wasTheBridgeBlockAlwaysThere = true; + } + + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z, dest.x, dest.z); + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest); + } + @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/path/SplicedPath.java b/src/main/java/baritone/pathing/path/SplicedPath.java index 1ba497d81..1cffad87d 100644 --- a/src/main/java/baritone/pathing/path/SplicedPath.java +++ b/src/main/java/baritone/pathing/path/SplicedPath.java @@ -43,31 +43,6 @@ private SplicedPath(List path, List movements, int nu sanityCheck(); } - @Override - public Goal getGoal() { - return goal; - } - - @Override - public List movements() { - return Collections.unmodifiableList(movements); - } - - @Override - public List positions() { - return Collections.unmodifiableList(path); - } - - @Override - public int getNumNodesConsidered() { - return numNodes; - } - - @Override - public int length() { - return path.size(); - } - public static Optional trySplice(IPath first, IPath second, boolean allowOverlapCutoff) { if (second == null || first == null) { return Optional.empty(); @@ -103,4 +78,29 @@ public static Optional trySplice(IPath first, IPath second, boolean movements.addAll(second.movements().subList(positionInSecond, second.length() - 1)); return Optional.of(new SplicedPath(positions, movements, first.getNumNodesConsidered() + second.getNumNodesConsidered(), first.getGoal())); } + + @Override + public Goal getGoal() { + return goal; + } + + @Override + public List movements() { + return Collections.unmodifiableList(movements); + } + + @Override + public List positions() { + return Collections.unmodifiableList(path); + } + + @Override + public int getNumNodesConsidered() { + return numNodes; + } + + @Override + public int length() { + return path.size(); + } } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 28b41fe29..4ece155a4 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -18,6 +18,7 @@ package baritone.process; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalComposite; @@ -38,9 +39,11 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Movement; import baritone.pathing.movement.MovementHelper; +import baritone.pathing.path.PathExecutor; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; +import baritone.utils.Trail; import baritone.utils.schematic.MapArtSchematic; import baritone.utils.schematic.SchematicSystem; import baritone.utils.schematic.SelectionSchematic; @@ -65,16 +68,17 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.FileInputStream; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import static baritone.api.pathing.movement.ActionCosts.COST_INF; public final class BuilderProcess extends BaritoneProcessHelper implements IBuilderProcess { - private HashSet incorrectPositions; private LongOpenHashSet observedCompleted; // positions that are completed even if they're out of render distance and we can't make sure right now private String name; @@ -92,54 +96,39 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, TrapDoorBlock.OPEN, TrapDoorBlock.HALF ); - - public BuilderProcess(Baritone baritone) { - super(baritone); - } - - private List approxPlaceable; - - public void resume() { - paused = false; - } - - public void pause() { - paused = true; - } - - @Override - public boolean isPaused() { - return paused; - } - - @Override - public boolean build(String name, File schematic, Vec3i origin) { - Optional format = SchematicSystem.INSTANCE.getByFile(schematic); - if (!format.isPresent()) { - return false; - } - - ISchematic parsed; - try { - parsed = format.get().parse(new FileInputStream(schematic)); - } catch (Exception e) { - e.printStackTrace(); - return false; - } - - if (Baritone.settings().mapArtMode.value) { - parsed = new MapArtSchematic((IStaticSchematic) parsed); + private final Map protectedItems = new HashMap<>(); + private final Function, Comparable>, PropertyContainer> PROPERTY_ENTRY_TO_STRING_FUNCTION = new Function<>() { + public PropertyContainer apply(@Nullable Map.Entry, Comparable> entry) { + if (entry == null) { + return null; + } else { + Property property = (Property) entry.getKey(); + String var10000 = property.getName(); + final PropertyContainer propertyContainer = new PropertyContainer(var10000, this.getName(property, (Comparable) entry.getValue())); + return propertyContainer; + //return var10000 + "=" + this.getName(property, (Comparable) entry.getValue()); + } } - if (Baritone.settings().buildOnlySelection.value) { - parsed = new SelectionSchematic(parsed, origin, baritone.getSelectionManager().getSelections()); + private > String getName(Property property, Comparable comparable) { + return property.getName((T) comparable); } + }; + private List approxPlaceable; + private Map missing; + private boolean active; + private Stack stateStack = new Stack<>(); + private Vec3i schemSize; + private boolean fromAltoclefFinished; - - build(name, parsed, origin); - return true; + public BuilderProcess(Baritone baritone) { + super(baritone); } + private boolean fromAltoclef; + private Map sbtMissing; + private Map blockBreakHistory = new HashMap<>(); + private static Vec3[] aabbSideMultipliers(Direction side) { switch (side) { case UP: @@ -160,6 +149,11 @@ private static Vec3[] aabbSideMultipliers(Direction side) { @Override public void build(String name, ISchematic schematic, Vec3i origin) { + //Shouldn't get initially called + if (this.fromAltoclef && this.stateStack.isEmpty()) { + pushState(); + } + this.name = name; this.schematic = schematic; this.realSchematic = null; @@ -183,7 +177,146 @@ public void build(String name, ISchematic schematic, Vec3i origin) { this.layer = Baritone.settings().startAtLayer.value; this.numRepeats = 0; this.observedCompleted = new LongOpenHashSet(); - this.incorrectPositions = null; + this.active = true; + + //stopProtectItemOfMissing(); + + if (this.missing != null) { + this.missing.clear(); + } else { + missing = new HashMap<>(); + } + + this.schemSize = new Vec3i(schematic.widthX(), schematic.heightY(), schematic.lengthZ()); + this.fromAltoclefFinished = false; + this.fromAltoclef = false; + } + + private void protectItemOfMissing() { + if (missing != null && missing.keySet() != null) { + protectedItems.putAll(missing); + protectedItems.keySet().forEach(e -> { + if (!AltoClefSettings.getInstance().isItemProtected(e.getBlock().asItem())) { + AltoClefSettings.getInstance().protectItem(e.getBlock().asItem()); + } + }); + } + } + + private void stopProtectItemOfMissing() { + if (protectedItems != null && protectedItems.keySet() != null && protectedItems.size() > 0) { + protectedItems.keySet().forEach(e -> { + if (AltoClefSettings.getInstance().isItemProtected(e.getBlock().asItem())) { + AltoClefSettings.getInstance().stopProtectingItem(e.getBlock().asItem()); + } + }); + } + protectedItems.clear(); + } + + @Override + public Vec3i getSchemSize() { + return schemSize; + } + + private void pushState() { + stateStack.clear(); + stateStack.push(this.approxPlaceable); + stateStack.push(this.ticks); + stateStack.push(this.incorrectPositions); + stateStack.push(this.name); + stateStack.push(this.schematic); + stateStack.push(this.realSchematic); + stateStack.push(this.origin); + stateStack.push(this.paused); + stateStack.push(this.layer); + stateStack.push(this.numRepeats); + stateStack.push(this.observedCompleted); + stateStack.push(this.active); + stateStack.push(this.missing); + stateStack.push(this.schemSize); + stateStack.push(this.fromAltoclefFinished); + stateStack.push(this.fromAltoclef); + } + + public void pause() { + paused = true; + } + + @Override + public boolean isPaused() { + return paused; + } + + @Override + public void popStack() { + if (this.stateStack.isEmpty()) { + logDebug("ERROR in BuildProcess: No state present to pop"); + return; + } + this.fromAltoclef = (boolean) stateStack.pop(); + this.fromAltoclefFinished = (boolean) stateStack.pop(); + this.schemSize = (Vec3i) stateStack.pop(); + this.missing = (Map) stateStack.pop(); + this.active = (boolean) stateStack.pop(); + this.observedCompleted = (LongOpenHashSet) stateStack.pop(); + this.numRepeats = (int) stateStack.pop(); + this.layer = (int) stateStack.pop(); + this.paused = (boolean) stateStack.pop(); + this.origin = (Vec3i) stateStack.pop(); + this.realSchematic = (ISchematic) stateStack.pop(); + this.schematic = (ISchematic) stateStack.pop(); + this.name = (String) stateStack.pop(); + this.incorrectPositions = (HashSet) stateStack.pop(); + this.ticks = (int) stateStack.pop(); + this.approxPlaceable = (List) stateStack.pop(); + + pushState(); + + if (!stateStack.isEmpty()) { + logDebug("ERROR: state stack was not empty after state restoration. Will throw away the rest for now."); + stateStack.clear(); + } + } + + @Override + public boolean build(String name, File schematic, Vec3i origin) { + Optional format = SchematicSystem.INSTANCE.getByFile(schematic); + if (!format.isPresent()) { + return false; + } + + ISchematic parsed; + try { + parsed = format.get().parse(new FileInputStream(schematic)); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + if (Baritone.settings().mapArtMode.value) { + parsed = new MapArtSchematic((IStaticSchematic) parsed); + } + + if (Baritone.settings().buildOnlySelection.value) { + parsed = new SelectionSchematic(parsed, origin, baritone.getSelectionManager().getSelections()); + } + + + build(name, parsed, origin); + return true; + } + + @Override + public boolean clearState() { + final boolean isEmpty = !stateStack.isEmpty(); + stateStack.clear(); + return isEmpty; + } + + @Override + public boolean isFromAltoclefFinished() { + return this.fromAltoclefFinished; } @Override @@ -210,11 +343,6 @@ public void buildOpenSchematic() { } } - @Override - public boolean isActive() { - return schematic != null; - } - public void clearArea(BlockPos corner1, BlockPos corner2) { BlockPos origin = new BlockPos(Math.min(corner1.getX(), corner2.getX()), Math.min(corner1.getY(), corner2.getY()), Math.min(corner1.getZ(), corner2.getZ())); int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; @@ -223,18 +351,85 @@ public void clearArea(BlockPos corner1, BlockPos corner2) { build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.defaultBlockState()), origin); } + public void resume() { + if (!this.stateStack.isEmpty()) { + popStack(); + } + + this.paused = false; + this.active = true; + } + + @Override + public boolean isFromAltoclef() { + return this.fromAltoclef; + } + + @Override + public void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef) { + this.build(name, schematic, origin); + this.fromAltoclef = fromAltoclef; + } + + @Override + public boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef) { + final boolean bl = this.build(name, schematic, origin); + this.fromAltoclef = fromAltoclef; + return bl; + } + + @Override + public void reset() { + onLostControl(); + } + + @Override + public Map getMissing() { + if (this.sbtMissing == null) this.sbtMissing = new HashMap<>(); + if (this.fromAltoclef && this.missing != null) { + this.sbtMissing.clear(); + this.sbtMissing.putAll(this.missing); + } + return new HashMap<>(this.sbtMissing); + //return (this.fromAltoclef) ? new HashMap<>(this.missing) : null; + } + + /*private boolean isBlacklistedByAltoclef(final BlockPos pos) { + return this.ignoredBlocksInMesh.stream().anyMatch(e -> blockPosMatches(e, pos)); + }*/ + + /*public void decideToIgnoreInSchematic(BetterBlockPos positionToPlace) { + if (isActive() && isFromAltoclef()) { + // I was too lazy to check which one should be checked + if ((this.realSchematic != null && realSchematic.inSchematic(positionToPlace.x, positionToPlace.y, positionToPlace.z, ctx.world().getBlockState(positionToPlace))) + || (this.schematic != null && schematic.inSchematic(positionToPlace.x, positionToPlace.y, positionToPlace.z, ctx.world().getBlockState(positionToPlace)))) { + BlockState state = ctx.world().getBlockState(positionToPlace); + if (state.getBlock() instanceof AirBlock) { + System.out.println("where banana?"); + this.ignoredBlocksInMesh.add(positionToPlace); + } + } + } + }*/ + @Override public List getApproxPlaceable() { - return new ArrayList<>(approxPlaceable); + return this.approxPlaceable; + } + + @Override + public boolean isActive() { + return active;//schematic != null && !paused; } public BlockState placeAt(int x, int y, int z, BlockState current) { - if (!isActive()) { + if (this.schematic == null) { return null; } if (!schematic.inSchematic(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current)) { return null; } + BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current, this.approxPlaceable); if (state.getBlock() instanceof AirBlock) { return null; @@ -242,6 +437,10 @@ public BlockState placeAt(int x, int y, int z, BlockState current) { return state; } + private boolean blockPosMatches(final BlockPos pos1, final BlockPos pos2) { + return (pos1.getX() == pos2.getX() && pos1.getY() == pos2.getY() && pos1.getZ() == pos2.getZ()); + } + private Optional> toBreakNearPlayer(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); BetterBlockPos pathStart = baritone.getPathingBehavior().pathStart(); @@ -254,10 +453,17 @@ private Optional> toBreakNearPlayer(BuilderCalcu if (dy == -1 && x == pathStart.x && z == pathStart.z) { continue; // dont mine what we're supported by, but not directly standing on } + BlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); if (desired == null) { continue; // irrelevant } + + final BlockPos tmp = new BlockPos(x, y, z); + if (anyHistoryMatch(tmp) && breakLimitExceeded(tmp)) { + continue; + } + BlockState curr = bcc.bsi.get0(x, y, z); if (!(curr.getBlock() instanceof AirBlock) && !(curr.getBlock() == Blocks.WATER || curr.getBlock() == Blocks.LAVA) && !valid(curr, desired, false)) { BetterBlockPos pos = new BetterBlockPos(x, y, z); @@ -272,10 +478,45 @@ private Optional> toBreakNearPlayer(BuilderCalcu return Optional.empty(); } + private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { + for (int i = 0; i < 9; i++) { + ItemStack stack = ctx.player().getInventory().items.get(i); + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { + continue; + } + float originalYaw = ctx.player().getYRot(); + float originalPitch = ctx.player().getXRot(); + // the state depends on the facing of the player sometimes + ctx.player().setYRot(rot.getYaw()); + ctx.player().setXRot(rot.getPitch()); + BlockPlaceContext meme = new BlockPlaceContext(new UseOnContext( + ctx.world(), + ctx.player(), + InteractionHand.MAIN_HAND, + stack, + (BlockHitResult) result + ) { + }); // that {} gives us access to a protected constructor lmfao + BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); + ctx.player().setYRot(originalYaw); + ctx.player().setXRot(originalPitch); + if (wouldBePlaced == null) { + continue; + } + if (!meme.canPlace()) { + continue; + } + if (valid(wouldBePlaced, desired, true)) { + return OptionalInt.of(i); + } + } + return OptionalInt.empty(); + } + private Optional searchForPlacables(BuilderCalculationContext bcc, List desirableOnHotbar) { BetterBlockPos center = ctx.playerFeet(); for (int dx = -5; dx <= 5; dx++) { - for (int dy = -5; dy <= 1; dy++) { + for (int dy = -5; dy <= 3; dy++) { // maybe do dy <= 5 because range seems like to be 5 for (int dz = -5; dz <= 5; dz++) { int x = center.x + dx; int y = center.y + dy; @@ -302,6 +543,7 @@ private Optional searchForPlacables(BuilderCalculationContext bcc, Li } public boolean placementPlausible(BlockPos pos, BlockState state) { + if (state == null) return false; VoxelShape voxelshape = state.getCollisionShape(ctx.world(), pos); return voxelshape.isEmpty() || ctx.world().isUnobstructed(null, voxelshape.move(pos.getX(), pos.getY(), pos.getZ())); } @@ -313,6 +555,10 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in if (MovementHelper.isReplaceable(placeAgainstPos.x, placeAgainstPos.y, placeAgainstPos.z, placeAgainstState, bsi)) { continue; } + if (placeAgainstState.getBlock() instanceof AirBlock) { + // isReplacable used to check for this, but we changed that. + continue; + } if (!toPlace.canSurvive(ctx.world(), new BetterBlockPos(x, y, z))) { continue; } @@ -337,50 +583,77 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in return Optional.empty(); } - private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { - for (int i = 0; i < 9; i++) { - ItemStack stack = ctx.player().getInventory().items.get(i); - if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { - continue; - } - float originalYaw = ctx.player().getYRot(); - float originalPitch = ctx.player().getXRot(); - // the state depends on the facing of the player sometimes - ctx.player().setYRot(rot.getYaw()); - ctx.player().setXRot(rot.getPitch()); - BlockPlaceContext meme = new BlockPlaceContext(new UseOnContext( - ctx.world(), - ctx.player(), - InteractionHand.MAIN_HAND, - stack, - (BlockHitResult) result - ) { - }); // that {} gives us access to a protected constructor lmfao - BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); - ctx.player().setYRot(originalYaw); - ctx.player().setXRot(originalPitch); - if (wouldBePlaced == null) { - continue; - } - if (!meme.canPlace()) { - continue; + private BlockPos getFromHistory(final BlockPos pos) { + if (pos == null) return null; + + final Optional opt = blockBreakHistory.keySet().stream() + .filter(e -> e.getX() == pos.getX() && e.getY() == pos.getY() && e.getZ() == pos.getZ()).findFirst(); + + if (opt.isPresent()) { + return opt.get(); + } + + return null; + } + + private boolean anyHistoryMatch(final BlockPos pos) { + return getFromHistory(pos) != null; //blockBreakHistory.keySet().stream().anyMatch(e -> e.getX() == pos.getX() && e.getY() == pos.getY() && e.getZ() == pos.getZ()); + } + + private boolean breakLimitExceeded(final BlockPos pos) { + if (!anyHistoryMatch(pos)) { + return false; + } + + return blockBreakHistory.get(getFromHistory(pos)).counter > 10; + } + + private void noteRemoval(final BlockPos pos) { + if (pos == null) return; + if (anyHistoryMatch(pos)) { + final BlockPos orig = getFromHistory(pos); + final HistoryInfo info = blockBreakHistory.get(orig); + if (!info.brokenPreviously) { + info.brokenPreviously = true; } - if (valid(wouldBePlaced, desired, true)) { - return OptionalInt.of(i); + } + } + + @Override + public void noteInsert(final BlockPos pos) { + if (anyHistoryMatch(pos)) { + final BlockPos orig = getFromHistory(pos); + final HistoryInfo info = blockBreakHistory.get(orig); + if (info.brokenPreviously) { + info.counter++; + info.brokenPreviously = false; } + } else { + blockBreakHistory.put(pos, new HistoryInfo()); } - return OptionalInt.empty(); } + /*private long getHistoryCount(final BlockPos pos) { + if(!anyHistoryMatch(pos)) { + return 0; + } + + return blockBreakHistory.get(getFromHistory(pos)).counter; + }*/ + @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return onTick(calcFailed, isSafeToCancel, 0); } public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel, int recursions) { + if (Trail.getInstance().updateAndCheck()) { + return Trail.getInstance().getRunAwayCommand(); + } if (recursions > 1000) { // onTick calls itself, don't crash return new PathingCommand(null, PathingCommandType.SET_GOAL_AND_PATH); } + protectItemOfMissing(); approxPlaceable = approxPlaceable(36); if (baritone.getInputOverrideHandler().isInputForcedDown(Input.CLICK_LEFT)) { ticks = 5; @@ -439,6 +712,7 @@ public int lengthZ() { } }; } + BuilderCalculationContext bcc = new BuilderCalculationContext(); if (!recalc(bcc)) { if (Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < realSchematic.heightY()) { @@ -454,7 +728,17 @@ public int lengthZ() { if (Baritone.settings().notificationOnBuildFinished.value) { logNotification("Done building", false); } - onLostControl(); + + if (this.fromAltoclef) { + this.fromAltoclefFinished = true; + } + + reset(); + + if (this.fromAltoclefFinished) { + this.stateStack.clear(); + } + return null; } // build repeat time @@ -466,9 +750,6 @@ public int lengthZ() { logDirect("Repeating build in vector " + repeat + ", new origin is " + origin); return onTick(calcFailed, isSafeToCancel, recursions + 1); } - if (Baritone.settings().distanceTrim.value) { - trim(); - } Optional> toBreak = toBreakNearPlayer(bcc); if (toBreak.isPresent() && isSafeToCancel && ctx.player().isOnGround()) { @@ -485,13 +766,15 @@ public int lengthZ() { baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); } if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot)) { + if (anyHistoryMatch(pos)) + noteRemoval(pos); baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); } return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } List desirableOnHotbar = new ArrayList<>(); Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); - if (toPlace.isPresent() && isSafeToCancel && ctx.player().isOnGround() && ticks <= 0) { + if (!AltoClefSettings.getInstance().isInteractionPaused() && toPlace.isPresent() && isSafeToCancel && ctx.player().isOnGround() && ticks <= 0) { Rotation rot = toPlace.get().rot; baritone.getLookBehavior().updateTarget(rot, true); ctx.player().getInventory().selected = toPlace.get().hotbarSelection; @@ -499,10 +782,11 @@ public int lengthZ() { if ((ctx.isLookingAt(toPlace.get().placeAgainst) && ((BlockHitResult) ctx.objectMouseOver()).getDirection().equals(toPlace.get().side)) || ctx.playerRotations().isReallyCloseTo(rot)) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); } + stopProtectItemOfMissing(); return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - if (Baritone.settings().allowInventory.value) { + if (!AltoClefSettings.getInstance().isInteractionPaused() && Baritone.settings().allowInventory.value) { ArrayList usefulSlots = new ArrayList<>(); List noValidHotbarOption = new ArrayList<>(); outer: @@ -541,9 +825,20 @@ public int lengthZ() { return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } } + + updateMovement(); return new PathingCommandContext(goal, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH, bcc); } + private void updateMovement() { + PathExecutor exec = baritone.getPathingBehavior().getCurrent(); + if (exec == null || exec.finished() || exec.failed()) { + return; + } + Movement movement = (Movement) exec.getPath().movements().get(exec.getPosition()); + movement.update(); + } + private boolean recalc(BuilderCalculationContext bcc) { if (incorrectPositions == null) { incorrectPositions = new HashSet<>(); @@ -559,13 +854,13 @@ private boolean recalc(BuilderCalculationContext bcc) { return !incorrectPositions.isEmpty(); } - private void trim() { + /*private void trim() { HashSet copy = new HashSet<>(incorrectPositions); copy.removeIf(pos -> pos.distSqr(ctx.player().blockPosition()) > 200); if (!copy.isEmpty()) { incorrectPositions = copy; } - } + }*/ private void recalcNearby(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); @@ -580,7 +875,7 @@ private void recalcNearby(BuilderCalculationContext bcc) { if (desired != null) { // we care about this position BetterBlockPos pos = new BetterBlockPos(x, y, z); - if (valid(bcc.bsi.get0(x, y, z), desired, false)) { + if (valid(bcc.bsi.get0(x, y, z), desired, false) || breakLimitExceeded(new BlockPos(x, y, z))) { incorrectPositions.remove(pos); observedCompleted.add(BetterBlockPos.longHash(pos)); } else { @@ -607,7 +902,7 @@ private void fullRecalc(BuilderCalculationContext bcc) { } if (bcc.bsi.worldContainsLoadedChunk(blockX, blockZ)) { // check if its in render distance, not if its in cache // we can directly observe this block, it is in render distance - if (valid(bcc.bsi.get0(blockX, blockY, blockZ), schematic.desiredState(x, y, z, current, this.approxPlaceable), false)) { + if (valid(bcc.bsi.get0(blockX, blockY, blockZ), schematic.desiredState(x, y, z, current, this.approxPlaceable), false) || breakLimitExceeded(new BlockPos(x, y, z))) { observedCompleted.add(BetterBlockPos.longHash(blockX, blockY, blockZ)); } else { incorrectPositions.add(new BetterBlockPos(blockX, blockY, blockZ)); @@ -620,7 +915,7 @@ private void fullRecalc(BuilderCalculationContext bcc) { } // this is not in render distance if (!observedCompleted.contains(BetterBlockPos.longHash(blockX, blockY, blockZ)) - && !Baritone.settings().buildSkipBlocks.value.contains(schematic.desiredState(x, y, z, current, this.approxPlaceable).getBlock())) { + && !Baritone.settings().buildSkipBlocks.value.contains(schematic.desiredState(x, y, z, current, this.approxPlaceable).getBlock())) { // and we've never seen this position be correct // therefore mark as incorrect incorrectPositions.add(new BetterBlockPos(blockX, blockY, blockZ)); @@ -637,20 +932,42 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return assemble(bcc, approxPlaceable, false); } + private boolean isDefaultState(final BlockState state) { + final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); + for (final PropertyContainer container : propertyContainers) { + if (container.getPropertyKey().equals("part") && container.getPropertyValue().equals("head")) { + return false; + } + if (container.getPropertyKey().equals("half") && container.getPropertyValue().equals("upper")) { + return false; + } + } + return true; + } + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable, boolean logMissing) { List placeable = new ArrayList<>(); List breakable = new ArrayList<>(); List sourceLiquids = new ArrayList<>(); List flowingLiquids = new ArrayList<>(); - Map missing = new HashMap<>(); + //stopProtectItemOfMissing(); + missing.clear(); incorrectPositions.forEach(pos -> { BlockState state = bcc.bsi.get0(pos); if (state.getBlock() instanceof AirBlock) { - if (approxPlaceable.contains(bcc.getSchematic(pos.x, pos.y, pos.z, state))) { - placeable.add(pos); + final BlockState bsSchematic = bcc.getSchematic(pos.x, pos.y, pos.z, state); + if (approxPlaceable.stream().anyMatch(e -> e != null && e.getBlock().defaultBlockState().equals(bsSchematic.getBlock().defaultBlockState())) + //|| approxPlaceable.stream().anyMatch(e -> e != null && !(e.getBlock() instanceof AirBlock) && e.getBlock().getClass().equals(state.getBlock().getClass())) + //&& !hasNonHoldable(state) + ) { + if (isDefaultState(bsSchematic)) { + placeable.add(pos); + } } else { BlockState desired = bcc.getSchematic(pos.x, pos.y, pos.z, state); - missing.put(desired, 1 + missing.getOrDefault(desired, 0)); + if (desired != null) { + missing.put(desired.getBlock().defaultBlockState(), 1 + missing.getOrDefault(desired, 0)); + } } } else { if (state.getBlock() instanceof LiquidBlock) { @@ -667,8 +984,10 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac } } }); + List toBreak = new ArrayList<>(); breakable.forEach(pos -> toBreak.add(breakGoal(pos, bcc))); + List toPlace = new ArrayList<>(); placeable.forEach(pos -> { if (!placeable.contains(pos.below()) && !placeable.contains(pos.below(2))) { @@ -681,6 +1000,10 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return new JankyGoalComposite(new GoalComposite(toPlace.toArray(new Goal[0])), new GoalComposite(toBreak.toArray(new Goal[0]))); } if (toBreak.isEmpty()) { + if (!missing.isEmpty()) { + protectItemOfMissing(); + } + if (logMissing && !missing.isEmpty()) { logDirect("Missing materials for at least:"); logDirect(missing.entrySet().stream() @@ -698,6 +1021,58 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return new GoalComposite(toBreak.toArray(new Goal[0])); } + private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { + if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? + return new GoalPlace(pos); + } + boolean allowSameLevel = !(ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock); + BlockState current = ctx.world().getBlockState(pos); + for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { + //noinspection ConstantConditions + if (MovementHelper.canPlaceAgainst(ctx, pos.relative(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { + return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); + } + } + noteInsert(pos); + return new GoalPlace(pos); + } + + /*private boolean inInventoryWithUnderDifferentProperties(final BlockState state) { + final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); + for (final PropertyContainer container : propertyContainers) { + + } + + return false; + }*/ + + /*private final List asInventoryList(final List placeables) { + final List invStates = new ArrayList<>(); + placeables.forEach(e -> { + final BlockState defaultState = e.getBlock().defaultBlockState(); + invStates.removeIf(a -> a.toString().equals(defaultState.toString())); + invStates.add(defaultState); + }); + + return invStates; + }*/ + + private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { + if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.above()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.above(2)).getBlock() instanceof AirBlock) { + return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.above()) { + @Override + public boolean isInGoal(int x, int y, int z) { + if (y > this.y || (x == this.x && y == this.y && z == this.z)) { + return false; + } + return super.isInGoal(x, y, z); + } + }); + } + //TODO: maybe noteRemoval here? + return new GoalBreak(pos); + } + public static class JankyGoalComposite implements Goal { private final Goal primary; @@ -742,34 +1117,54 @@ public boolean isInGoal(int x, int y, int z) { } } - private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? - return new GoalPlace(pos); - } - boolean allowSameLevel = !(ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock); - BlockState current = ctx.world().getBlockState(pos); - for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { - //noinspection ConstantConditions - if (MovementHelper.canPlaceAgainst(ctx, pos.relative(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { - return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); - } + @Override + public void onLostControl() { + if (this.fromAltoclef && this.stateStack.isEmpty()) { + pushState(); } - return new GoalPlace(pos); + + incorrectPositions = null; + name = null; + schematic = null; + realSchematic = null; + layer = Baritone.settings().startAtLayer.value; + numRepeats = 0; + paused = false; + observedCompleted = null; + origin = null; + missing = null; + schemSize = null; + fromAltoclef = false; + active = false; + blockBreakHistory.clear(); } - private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.above()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.above(2)).getBlock() instanceof AirBlock) { // TODO maybe possible without the up(2) check? - return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.above()) { - @Override - public boolean isInGoal(int x, int y, int z) { - if (y > this.y || (x == this.x && y == this.y && z == this.z)) { - return false; - } - return super.isInGoal(x, y, z); - } - }); + private List approxPlaceable(int size) { + List result = new ArrayList<>(); + for (int i = 0; i < size; i++) { + ItemStack stack = ctx.player().getInventory().items.get(i); + //if (stack.getItem().toString() != "air") System.out.println("BARIT1: " + stack.getItem().toString()); + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { + result.add(Blocks.AIR.defaultBlockState()); + continue; + } + //if (stack.getItem().toString() != "air") System.out.println("BARIT2: " + stack.getItem().toString()); + /*final Vec3 playerPos = new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z); + final BlockHitResult playerFeetHitResult = new BlockHitResult(playerPos, Direction.UP, ctx.playerFeet(), false); + final UseOnContext usageMainHandAction = new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, playerFeetHitResult) {}; + final BlockPlaceContext blockPlacementContext = new BlockPlaceContext(usageMainHandAction); + final Block targetBlock = ((BlockItem) stack.getItem()).getBlock(); + final BlockState targetState = targetBlock.getStateForPlacement(blockPlacementContext);*/ + + final Block targetBlock = ((BlockItem) stack.getItem()).getBlock(); + final BlockState targetState = targetBlock.getStateDefinition().getPossibleStates().get(0); + + + //if (stack.getItem().toString() != "air") System.out.println("BARIT3: " + targetState); + result.add(targetState); + //result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {}))); } - return new GoalBreak(pos); + return result; } public static class GoalAdjacent extends GoalGetToBlock { @@ -805,68 +1200,13 @@ public double heuristic(int x, int y, int z) { } } - private List approxPlaceable(int size) { - List result = new ArrayList<>(); - for (int i = 0; i < size; i++) { - ItemStack stack = ctx.player().getInventory().items.get(i); - if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { - result.add(Blocks.AIR.defaultBlockState()); - continue; - } - // - BlockState itemState = ((BlockItem) stack.getItem()) - .getBlock() - .getStateForPlacement( - new BlockPlaceContext( - new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { - } - ) - ); - if (itemState != null) { - result.add(itemState); - } else { - result.add(Blocks.AIR.defaultBlockState()); - } - // - } - return result; - } - - @Override - public void onLostControl() { - incorrectPositions = null; - name = null; - schematic = null; - realSchematic = null; - layer = Baritone.settings().startAtLayer.value; - numRepeats = 0; - paused = false; - observedCompleted = null; - } - - @Override - public String displayName0() { - return paused ? "Builder Paused" : "Building " + name; - } - - private boolean sameWithoutOrientation(BlockState first, BlockState second) { - if (first.getBlock() != second.getBlock()) { - return false; - } - ImmutableMap, Comparable> map1 = first.getValues(); - ImmutableMap, Comparable> map2 = second.getValues(); - for (Property prop : map1.keySet()) { - if (map1.get(prop) != map2.get(prop) && !orientationProps.contains(prop)) { - return false; - } - } - return true; - } - private boolean valid(BlockState current, BlockState desired, boolean itemVerify) { if (desired == null) { return true; } + if (current == null) { + return true; // No idea why but current might be null..... oof + } if (current.getBlock() instanceof LiquidBlock && Baritone.settings().okIfWater.value) { return true; } @@ -882,6 +1222,20 @@ private boolean valid(BlockState current, BlockState desired, boolean itemVerify if (Baritone.settings().buildSkipBlocks.value.contains(desired.getBlock()) && !itemVerify) { return true; } + if (desired.getBlock() instanceof SlabBlock) { + return true; + } + if (current.getBlock() instanceof ChestBlock && desired.getBlock() instanceof ChestBlock) { + return true; + } + if (current.getBlock() instanceof DoorBlock && desired.getBlock() instanceof DoorBlock) { + return true; + } + if (current.getBlock().defaultBlockState().equals(desired.getBlock().defaultBlockState())) { + if (current.getBlock() instanceof CrossCollisionBlock) { + return true; + } + } if (Baritone.settings().buildValidSubstitutes.value.getOrDefault(desired.getBlock(), Collections.emptyList()).contains(current.getBlock()) && !itemVerify) { return true; } @@ -906,6 +1260,12 @@ public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rot } } + + @Override + public String displayName0() { + return paused ? "Builder Paused" : "Building " + name; + } + public static class GoalPlace extends GoalBlock { public GoalPlace(BlockPos placeAt) { @@ -918,6 +1278,43 @@ public double heuristic(int x, int y, int z) { } } + private boolean sameWithoutOrientation(BlockState first, BlockState second) { + if (first.getBlock() != second.getBlock()) { + return false; + } + ImmutableMap, Comparable> map1 = first.getValues(); + ImmutableMap, Comparable> map2 = second.getValues(); + for (Property prop : map1.keySet()) { + if (map1.get(prop) != map2.get(prop) && !orientationProps.contains(prop)) { + return false; + } + } + return true; + } + + private final class HistoryInfo { + public long counter = 0; + public boolean brokenPreviously = false; + } + + private final class PropertyContainer { + private final String propertyKey; + private final String propertyValue; + + public PropertyContainer(final String propertyKey, final String propertyValue) { + this.propertyKey = propertyKey; + this.propertyValue = propertyValue; + } + + public String getPropertyKey() { + return this.propertyKey; + } + + public String getPropertyValue() { + return this.propertyValue; + } + } + public class BuilderCalculationContext extends CalculationContext { private final List placeable; @@ -982,12 +1379,12 @@ public double costOfPlacingAt(int x, int y, int z, BlockState current) { @Override public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { - if ((!allowBreak && !allowBreakAnyway.contains(current.getBlock())) || isPossiblyProtected(x, y, z)) { + if (!allowBreak || isPossiblyProtected(x, y, z)) { return COST_INF; } BlockState sch = getSchematic(x, y, z, current); if (sch != null && !Baritone.settings().buildSkipBlocks.value.contains(sch.getBlock())) { - if (sch.getBlock() instanceof AirBlock) { + if (sch.getBlock() == Blocks.AIR) { // it should be air // regardless of current contents, we can break it return 1; diff --git a/src/main/java/baritone/process/CustomGoalProcess.java b/src/main/java/baritone/process/CustomGoalProcess.java index 3ee3e7b7c..c6d6435b8 100644 --- a/src/main/java/baritone/process/CustomGoalProcess.java +++ b/src/main/java/baritone/process/CustomGoalProcess.java @@ -47,6 +47,16 @@ public CustomGoalProcess(Baritone baritone) { super(baritone); } + @Override + public void path() { + this.state = State.PATH_REQUESTED; + } + + @Override + public Goal getGoal() { + return this.goal; + } + @Override public void setGoal(Goal goal) { this.goal = goal; @@ -58,16 +68,6 @@ public void setGoal(Goal goal) { } } - @Override - public void path() { - this.state = State.PATH_REQUESTED; - } - - @Override - public Goal getGoal() { - return this.goal; - } - @Override public boolean isActive() { return this.state != State.NONE; diff --git a/src/main/java/baritone/process/ExploreProcess.java b/src/main/java/baritone/process/ExploreProcess.java index e1f053e02..2ac6d5b18 100644 --- a/src/main/java/baritone/process/ExploreProcess.java +++ b/src/main/java/baritone/process/ExploreProcess.java @@ -53,6 +53,20 @@ public ExploreProcess(Baritone baritone) { super(baritone); } + private static Goal createGoal(int x, int z) { + if (Baritone.settings().exploreMaintainY.value == -1) { + return new GoalXZ(x, z); + } + // don't use a goalblock because we still want isInGoal to return true if X and Z are correct + // we just want to try and maintain Y on the way there, not necessarily end at that specific Y + return new GoalXZ(x, z) { + @Override + public double heuristic(int x, int y, int z) { + return super.heuristic(x, y, z) + GoalYLevel.calculate(Baritone.settings().exploreMaintainY.value, y); + } + }; + } + @Override public boolean isActive() { return explorationOrigin != null; @@ -160,18 +174,14 @@ private Goal[] closestUncachedChunks(BlockPos center, IChunkFilter filter) { } } - private static Goal createGoal(int x, int z) { - if (Baritone.settings().exploreMaintainY.value == -1) { - return new GoalXZ(x, z); - } - // don't use a goalblock because we still want isInGoal to return true if X and Z are correct - // we just want to try and maintain Y on the way there, not necessarily end at that specific Y - return new GoalXZ(x, z) { - @Override - public double heuristic(int x, int y, int z) { - return super.heuristic(x, y, z) + GoalYLevel.calculate(Baritone.settings().exploreMaintainY.value, y); - } - }; + @Override + public void onLostControl() { + explorationOrigin = null; + } + + @Override + public String displayName0() { + return "Exploring around " + explorationOrigin + ", distance completed " + distanceCompleted + ", currently going to " + new GoalComposite(closestUncachedChunks(explorationOrigin, calcFilter())); } private enum Status { @@ -287,14 +297,4 @@ public int countRemain() { return Math.min(a.countRemain(), b.countRemain()); } } - - @Override - public void onLostControl() { - explorationOrigin = null; - } - - @Override - public String displayName0() { - return "Exploring around " + explorationOrigin + ", distance completed " + distanceCompleted + ", currently going to " + new GoalComposite(closestUncachedChunks(explorationOrigin, calcFilter())); - } } diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index a9b6ee6ba..67b469a2c 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -53,14 +53,6 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmProcess { - private boolean active; - - private List locations; - private int tickCount; - - private int range; - private BlockPos center; - private static final List FARMLAND_PLANTABLE = Arrays.asList( Items.BEETROOT_SEEDS, Items.MELON_SEEDS, @@ -69,7 +61,6 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro Items.POTATO, Items.CARROT ); - private static final List PICKUP_DROPPED = Arrays.asList( Items.BEETROOT_SEEDS, Items.BEETROOT, @@ -86,6 +77,11 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro Blocks.SUGAR_CANE.asItem(), Blocks.CACTUS.asItem() ); + private boolean active; + private List locations; + private int tickCount; + private int range; + private BlockPos center; public FarmProcess(Baritone baritone) { super(baritone); @@ -263,6 +259,16 @@ private boolean isNetherWart(ItemStack stack) { return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART); } + @Override + public void onLostControl() { + active = false; + } + + @Override + public String displayName0() { + return "Farming"; + } + private enum Harvest { WHEAT((CropBlock) Blocks.WHEAT), CARROTS((CropBlock) Blocks.CARROTS), @@ -306,14 +312,4 @@ public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { return readyToHarvest.test(state); } } - - @Override - public void onLostControl() { - active = false; - } - - @Override - public String displayName0() { - return "Farming"; - } } diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index d92c64583..53a712d04 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -232,6 +232,14 @@ private boolean rightClickOnArrival(Block block) { return block == Blocks.CRAFTING_TABLE || block == Blocks.FURNACE || block == Blocks.BLAST_FURNACE || block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST; } + private boolean blockOnTopMustBeRemoved(Block block) { + if (!rightClickOnArrival(block)) { // only if we plan to actually open it on arrival + return false; + } + // only these chests; you can open a crafting table or furnace even with a block on top + return block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST; + } + // this is to signal to MineProcess that we don't care about the allowBreak setting // it is NOT to be used to actually calculate a path public class GetToBlockCalculationContext extends CalculationContext { @@ -245,12 +253,4 @@ public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { return 1; } } - - private boolean blockOnTopMustBeRemoved(Block block) { - if (!rightClickOnArrival(block)) { // only if we plan to actually open it on arrival - return false; - } - // only these chests; you can open a crafting table or furnace even with a block on top - return block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST; - } } diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 6cb56f5c2..027b54efe 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -68,11 +68,6 @@ public MineProcess(Baritone baritone) { super(baritone); } - @Override - public boolean isActive() { - return filter != null; - } - private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { dropped.removeIf(drop -> { for (BlockPos pos : locs2) { @@ -113,6 +108,72 @@ private static List prune(CalculationContext ctx, List locs2 return locs; } + public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { + if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { + return false; + } + + // bedrock above and below makes it implausible, otherwise we're good + return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); + } + + public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { + List locs = new ArrayList<>(); + List untracked = new ArrayList<>(); + for (BlockOptionalMeta bom : filter.blocks()) { + Block block = bom.getBlock(); + if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { + BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); + + // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that + locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( + BlockUtils.blockToString(block), + Baritone.settings().maxCachedWorldScanCount.value, + pf.x, + pf.z, + 2 + )); + } else { + untracked.add(block); + } + } + + locs = prune(ctx, locs, filter, max, blacklist, dropped); + + if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < max)) { + locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( + ctx.getBaritone().getPlayerContext(), + filter, + max, + 10, + 32 + )); // maxSearchRadius is NOT sq + } + + locs.addAll(alreadyKnown); + + return prune(ctx, locs, filter, max, blacklist, dropped); + } + + public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { + int radius = Baritone.settings().allowOnlyExposedOresDistance.value; + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius + && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { + return true; + } + } + } + } + return false; + } + + @Override + public boolean isActive() { + return filter != null; + } private void updateLoucaSystem() { Map copy = new HashMap<>(anticipatedDrops); @@ -176,6 +237,7 @@ private PathingCommand updateGoal() { public boolean isInGoal(int x, int y, int z) { return false; } + @Override public double heuristic() { return Double.NEGATIVE_INFINITY; @@ -206,68 +268,6 @@ private void rescan(List already, CalculationContext context) { knownOreLocations = locs; } - public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { - if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { - return false; - } - - // bedrock above and below makes it implausible, otherwise we're good - return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); - } - - public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { - List locs = new ArrayList<>(); - List untracked = new ArrayList<>(); - for (BlockOptionalMeta bom : filter.blocks()) { - Block block = bom.getBlock(); - if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { - BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); - - // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that - locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( - BlockUtils.blockToString(block), - Baritone.settings().maxCachedWorldScanCount.value, - pf.x, - pf.z, - 2 - )); - } else { - untracked.add(block); - } - } - - locs = prune(ctx, locs, filter, max, blacklist, dropped); - - if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < max)) { - locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( - ctx.getBaritone().getPlayerContext(), - filter, - max, - 10, - 32 - )); // maxSearchRadius is NOT sq - } - - locs.addAll(alreadyKnown); - - return prune(ctx, locs, filter, max, blacklist, dropped); - } - - public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { - int radius = Baritone.settings().allowOnlyExposedOresDistance.value; - for (int dx = -radius; dx <= radius; dx++) { - for (int dy = -radius; dy <= radius; dy++) { - for (int dz = -radius; dz <= radius; dz++) { - if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius - && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { - return true; - } - } - } - } - return false; - } - @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (desiredQuantity > 0) { @@ -439,26 +439,6 @@ private void addNearby() { knownOreLocations = prune(new CalculationContext(baritone), knownOreLocations, filter, ORE_LOCATIONS_COUNT, blacklist, dropped); } - private static class GoalThreeBlocks extends GoalTwoBlocks { - - public GoalThreeBlocks(BlockPos pos) { - super(pos); - } - - @Override - public boolean isInGoal(int x, int y, int z) { - return x == this.x && (y == this.y || y == this.y - 1 || y == this.y - 2) && z == this.z; - } - - @Override - public double heuristic(int x, int y, int z) { - int xDiff = x - this.x; - int yDiff = y - this.y; - int zDiff = z - this.z; - return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); - } - } - @Override public void mineByName(int quantity, String... blocks) { mine(quantity, new BlockOptionalMetaLookup(blocks)); @@ -482,4 +462,24 @@ public void mine(int quantity, BlockOptionalMetaLookup filter) { rescan(new ArrayList<>(), new CalculationContext(baritone)); } } + + private static class GoalThreeBlocks extends GoalTwoBlocks { + + public GoalThreeBlocks(BlockPos pos) { + super(pos); + } + + @Override + public boolean isInGoal(int x, int y, int z) { + return x == this.x && (y == this.y || y == this.y - 1 || y == this.y - 2) && z == this.z; + } + + @Override + public double heuristic(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); + } + } } diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index e60b7b60b..a201f4d83 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -43,15 +43,14 @@ public class BlockStateInterface { private static final BlockState AIR = Blocks.AIR.defaultBlockState(); - private final WorldData worldData; public final BlockGetter access; public final BlockPos.MutableBlockPos isPassableBlockPos; public final BetterWorldBorder worldBorder; protected final Level world; + private final WorldData worldData; private final ClientChunkCache provider; - private CachedRegion prevCached = null; - private final boolean useTheRealWorld; + private CachedRegion prevCached = null; private LevelChunk prev = null; public BlockStateInterface(IPlayerContext ctx) { diff --git a/src/main/java/baritone/utils/Trail.java b/src/main/java/baritone/utils/Trail.java new file mode 100644 index 000000000..e6a497fbe --- /dev/null +++ b/src/main/java/baritone/utils/Trail.java @@ -0,0 +1,180 @@ +package baritone.utils; + +import baritone.api.BaritoneAPI; +import baritone.api.behavior.IPathingBehavior; +import baritone.api.pathing.goals.GoalXZ; +import baritone.api.pathing.path.IPathExecutor; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.IPlayerContext; +import baritone.api.utils.RandomSpotNearby; +import net.minecraft.core.Vec3i; +import net.minecraft.world.level.ChunkPos; + +import java.util.*; + +/** + * @author Meloweh + */ +public final class Trail { + private final static int VECTOR_LIMIT = 350; + private final static int CROSS_LIMIT = 10; + private final static int CHUNK_TAIL_MAX = 4 * 4; + private final static Trail trail = new Trail(); + private final Queue traversedChunks; + private final IPlayerContext player; + private BetterBlockPos prev; + private boolean pathing = false; + private BetterBlockPos stuckPos; + private RandomSpotNearby randSpot = new RandomSpotNearby(16d); + private BetterBlockPos targetPos; + + public Trail() { + this.player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext(); + this.traversedChunks = new ArrayDeque<>(); + } + + public static Trail getInstance() { + return trail; + } + + private static boolean isSet(final Object o) { + return o != null; + } + + private static boolean isNull(final Object o) { + return !isSet(o); + } + + private static BetterBlockPos getCurrent() { + final IPathingBehavior p = BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior(); + if (isNull(p)) return null; + final IPathExecutor c = p.getCurrent(); + if (isNull(c)) return null; + final List bbp = c.getPath().positions(); + if (isNull(bbp)) return null; + final int posIndex = c.getPosition(); + if (c.getPath().positions().size() <= posIndex) return null; + final BetterBlockPos pos = c.getPath().positions().get(posIndex); + return pos; + } + + private boolean equalPos(final BetterBlockPos pos1, final BetterBlockPos pos2) { + if (isNull(pos1) || isNull(pos2)) return false; + return pos1.getX() == pos2.getX() && pos1.getY() == pos2.getY() && pos1.getZ() == pos2.getZ(); + } + + private boolean equalChunk(final ChunkPos c1, final ChunkPos c2) { + return c1.x == c2.x && c1.z == c2.z; + } + + public boolean passedLimits() { + return traversedChunks.stream().anyMatch(e -> + e.crossings.entrySet().stream().anyMatch(a -> a.getValue() > CROSS_LIMIT)); + } + + private int getVectorCount() { + return traversedChunks.stream().mapToInt(e -> e.crossings.size()).sum(); + } + + private boolean passedVectorCountLimit() { + return getVectorCount() > VECTOR_LIMIT; + } + + private Optional getRefFromTraversedChunks(final ChunkPos pos) { + return traversedChunks.stream().filter(e -> equalChunk(e.chunkPos, pos)).findFirst(); + } + + public void reset() { + traversedChunks.clear(); + prev = null; + pathing = false; + stuckPos = null; + System.out.println("target null"); + targetPos = null; + } + + private Pack removeOutsiders() { + if (traversedChunks.size() > CHUNK_TAIL_MAX) return traversedChunks.poll(); + if (passedVectorCountLimit()) traversedChunks.clear(); + return null; + } + + public boolean reactivateRunAway() { + final BetterBlockPos pos = getCurrent(); + if (isNull(pos)) return false; + stuckPos = pos; + System.out.println("target set"); + targetPos = randSpot.next(stuckPos); + pathing = true; + return true; + } + + public boolean isRunAwayActive() { + return pathing; + } + + public boolean updateAndCheck() { + tick(); + + if (!passedLimits()) { + return false; + } + + final BetterBlockPos curr = getCurrent(); + if (isNull(curr)) return false; + + if (targetPos != null && curr.closerThan(new Vec3i(targetPos.getX(), curr.getY(), targetPos.getZ()), 3d)) { + reset(); + return false; + } + if (!pathing) { + reactivateRunAway(); + } + + return true; + } + + public PathingCommand getRunAwayCommand() { + if (targetPos == null) { + throw new IllegalStateException("targetPos is null"); + } + return new PathingCommand(new GoalXZ(targetPos), PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH); + } + + private int addOrInc(final Pack pack, final BetterBlockPos blockPos, final boolean shouldAddPack) { + final Optional optRefBlockPos = pack.crossings.keySet().stream().filter(e -> equalPos(e, blockPos)).findFirst(); + final BetterBlockPos refBlockPos = (optRefBlockPos.isEmpty()) ? blockPos : optRefBlockPos.get(); + final int counter = (optRefBlockPos.isEmpty()) ? 1 : pack.crossings.get(refBlockPos) + 1; + pack.crossings.put(refBlockPos, counter); + if (shouldAddPack) traversedChunks.add(pack); + return counter; + } + + //TODO tick() may be called multiple times in one tick. This shouldn't be limited to one possible update per tick. + public void tick() { + final BetterBlockPos curr = getCurrent(); + if (isNull(curr) || equalPos(prev, curr)) return; + prev = curr; + final ChunkPos chunkPos = this.player.world().getChunk(curr).getPos(); + final Optional optPack = getRefFromTraversedChunks(chunkPos); + final Pack pack = optPack.isEmpty() ? new Pack(chunkPos) : optPack.get(); + final int counts = addOrInc(pack, curr, optPack.isEmpty()); + removeOutsiders(); + + //debug + //System.out.println(curr.getX() + ":" + curr.getY() + ":" + curr.getZ() + " Counts: " + // + counts + " Size: " + getVectorCount()); + } + + private class Pack { + public ChunkPos chunkPos; + public Map crossings; + + public Pack(final ChunkPos chunkPos) { + this.chunkPos = chunkPos; + this.crossings = new HashMap<>(); + } + } +} diff --git a/src/main/java/baritone/utils/accessor/IChunkArray.java b/src/main/java/baritone/utils/accessor/IChunkArray.java index 4c76b44fe..dc627bd34 100644 --- a/src/main/java/baritone/utils/accessor/IChunkArray.java +++ b/src/main/java/baritone/utils/accessor/IChunkArray.java @@ -17,9 +17,10 @@ package baritone.utils.accessor; -import java.util.concurrent.atomic.AtomicReferenceArray; import net.minecraft.world.level.chunk.LevelChunk; +import java.util.concurrent.atomic.AtomicReferenceArray; + public interface IChunkArray { void copyFrom(IChunkArray other); diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index 61229cce4..f4ffd104f 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -53,13 +53,6 @@ public Avoidance(int centerX, int centerY, int centerZ, double coefficient, int this.radiusSq = radius * radius; } - public double coefficient(int x, int y, int z) { - int xDiff = x - centerX; - int yDiff = y - centerY; - int zDiff = z - centerZ; - return xDiff * xDiff + yDiff * yDiff + zDiff * zDiff <= radiusSq ? coefficient : 1.0D; - } - public static List create(IPlayerContext ctx) { if (!Baritone.settings().avoidance.value) { return Collections.emptyList(); @@ -82,6 +75,13 @@ public static List create(IPlayerContext ctx) { return res; } + public double coefficient(int x, int y, int z) { + int xDiff = x - centerX; + int yDiff = y - centerY; + int zDiff = z - centerZ; + return xDiff * xDiff + yDiff * yDiff + zDiff * zDiff <= radiusSq ? coefficient : 1.0D; + } + public void applySpherical(Long2DoubleOpenHashMap map) { for (int x = -radius; x <= radius; x++) { for (int y = -radius; y <= radius; y++) { diff --git a/src/main/java/baritone/utils/pathing/PathingBlockType.java b/src/main/java/baritone/utils/pathing/PathingBlockType.java index 43a7ebef2..13463a1fe 100644 --- a/src/main/java/baritone/utils/pathing/PathingBlockType.java +++ b/src/main/java/baritone/utils/pathing/PathingBlockType.java @@ -37,11 +37,11 @@ public enum PathingBlockType { }; } - public final boolean[] getBits() { - return this.bits; - } - public static PathingBlockType fromBits(boolean b1, boolean b2) { return b1 ? b2 ? SOLID : AVOID : b2 ? WATER : AIR; } + + public final boolean[] getBits() { + return this.bits; + } } diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index 5762dded5..43dda57ca 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -53,11 +53,6 @@ private static int[][] generateHeightMap(IStaticSchematic schematic) { return heightMap; } - @Override - protected boolean partOfMask(int x, int y, int z, BlockState currentState) { - return y >= this.heightMap[x][z]; - } - private static OptionalInt lastIndexMatching(T[] arr, Predicate predicate) { for (int y = arr.length - 1; y >= 0; y--) { if (predicate.test(arr[y])) { @@ -66,4 +61,9 @@ private static OptionalInt lastIndexMatching(T[] arr, Predicate p } return OptionalInt.empty(); } + + @Override + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { + return y >= this.heightMap[x][z]; + } } diff --git a/src/main/java/baritone/utils/type/VarInt.java b/src/main/java/baritone/utils/type/VarInt.java index 7cc005bdb..2e9790b63 100644 --- a/src/main/java/baritone/utils/type/VarInt.java +++ b/src/main/java/baritone/utils/type/VarInt.java @@ -36,24 +36,6 @@ public VarInt(int value) { this.size = this.serialized.length; } - /** - * @return The integer value that is represented by this {@link VarInt}. - */ - public final int getValue() { - return this.value; - } - - /** - * @return The size of this {@link VarInt}, in bytes, once serialized. - */ - public final int getSize() { - return this.size; - } - - public final byte[] serialize() { - return this.serialized; - } - private static byte[] serialize0(int valueIn) { ByteList bytes = new ByteArrayList(); @@ -92,4 +74,22 @@ public static VarInt read(byte[] bytes, int start) { return new VarInt(value); } + + /** + * @return The integer value that is represented by this {@link VarInt}. + */ + public final int getValue() { + return this.value; + } + + /** + * @return The size of this {@link VarInt}, in bytes, once serialized. + */ + public final int getSize() { + return this.size; + } + + public final byte[] serialize() { + return this.serialized; + } } diff --git a/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java b/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java index eb3c034e8..e3304d030 100644 --- a/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java +++ b/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java @@ -17,4 +17,5 @@ package com.github.lunatrius.schematica.proxy; -public abstract class CommonProxy {} +public abstract class CommonProxy { +} diff --git a/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java b/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java index 21607ae34..d652b1598 100644 --- a/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java +++ b/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java @@ -82,7 +82,8 @@ private static void hackNatives() { final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths"); sysPathsField.setAccessible(true); sysPathsField.set(null, null); - } catch (Throwable ignored) {} + } catch (Throwable ignored) { + } } private static void attemptLogin(Map argMap, String username, String password) { From 2f86cad7d11dbcb353fb314679713ff616ea7534 Mon Sep 17 00:00:00 2001 From: Marvion Kirito Date: Sun, 6 Nov 2022 15:51:03 +0800 Subject: [PATCH 413/935] Fixes: 0. Fix altoclef crashing when entering the @get command. 1. Fix Hero task doesn't do anything. --- .../baritone/api/process/IBuilderProcess.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 4c10a593d..9f5e0f970 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -59,6 +59,14 @@ default boolean build(String schematicFile, BlockPos origin) { return build(schematicFile, file, origin); } + Vec3i getSchemSize(); + + void popStack(); + + boolean clearState(); + + boolean isFromAltoclefFinished(); + void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef); boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef); @@ -69,14 +77,6 @@ default boolean build(String schematicFile, BlockPos origin) { boolean isPaused(); - Vec3i getSchemSize(); - - void popStack(); - - boolean clearState(); - - boolean isFromAltoclefFinished(); - void resume(); void clearArea(BlockPos corner1, BlockPos corner2); From d7b70387f0cb370baebe1335c856f29e6bfb7ad1 Mon Sep 17 00:00:00 2001 From: Marvion Kirito Date: Sun, 13 Nov 2022 00:48:52 +0800 Subject: [PATCH 414/935] Fix: 0. Water and lava block detection. Optimizations: 0. In getting a block, the bot checks if the block is present before dimension checking. 1. Optimized block tracking. 2. In mining a block, the bot now uses a tool that is fastest to mine a block. --- .github/ISSUE_TEMPLATE/bug.md | 4 - .github/ISSUE_TEMPLATE/question.md | 2 - .github/ISSUE_TEMPLATE/suggestion.md | 4 - .github/workflows/run_tests.yml | 1 + FEATURES.md | 2 - README.md | 1 - SETUP.md | 3 - USAGE.md | 1 - .../gradle/task/BaritoneGradleTask.java | 3 +- .../baritone/gradle/task/CreateDistTask.java | 55 +- .../baritone/gradle/task/ProguardTask.java | 44 +- .../baritone/gradle/util/Determinizer.java | 100 ++-- .../baritone/gradle/util/MappingType.java | 29 - .../baritone/gradle/util/ReobfWrapper.java | 63 -- fabric/src/main/resources/fabric.mod.json | 3 + settings.gradle | 2 +- src/api/java/baritone/api/Settings.java | 86 +-- .../java/baritone/api/cache/IWaypoint.java | 14 +- .../java/baritone/api/command/Command.java | 5 +- .../api/command/datatypes/ForWaypoints.java | 42 +- .../api/command/datatypes/NearbyPlayer.java | 8 +- .../api/command/datatypes/RelativeFile.java | 40 +- .../api/command/helpers/Paginator.java | 134 ++--- .../api/command/registry/Registry.java | 10 +- .../api/event/events/RotationMoveEvent.java | 14 +- .../api/event/events/SprintStateEvent.java | 8 +- .../baritone/api/event/events/TickEvent.java | 10 +- .../baritone/api/pathing/goals/GoalBlock.java | 24 +- .../baritone/api/pathing/goals/GoalXZ.java | 42 +- .../api/pathing/goals/GoalYLevel.java | 20 +- .../baritone/api/process/IBuilderProcess.java | 16 +- .../api/process/ICustomGoalProcess.java | 14 +- .../api/schematic/CompositeSchematic.java | 12 +- .../api/schematic/SubstituteSchematic.java | 1 - .../baritone/api/utils/BetterBlockPos.java | 10 +- .../baritone/api/utils/BlockOptionalMeta.java | 78 +-- .../java/baritone/api/utils/BlockUtils.java | 6 +- .../baritone/api/utils/IPlayerContext.java | 13 +- .../baritone/api/utils/RayTraceUtils.java | 2 +- src/api/java/baritone/api/utils/Rotation.java | 54 +- .../java/baritone/api/utils/SettingsUtil.java | 12 +- .../baritone/api/utils/gui/BaritoneToast.java | 28 +- .../launch/mixins/MixinChunkArray.java | 7 +- .../baritone/launch/mixins/MixinEntity.java | 3 +- src/launch/resources/mixins.baritone.json | 35 -- src/main/java/baritone/Baritone.java | 31 +- .../baritone/altoclef/AltoClefSettings.java | 47 +- .../baritone/behavior/InventoryBehavior.java | 20 +- .../baritone/behavior/PathingBehavior.java | 38 +- src/main/java/baritone/cache/CachedChunk.java | 32 +- .../java/baritone/cache/CachedRegion.java | 9 +- src/main/java/baritone/cache/CachedWorld.java | 13 +- src/main/java/baritone/cache/WorldData.java | 2 +- .../command/argparser/DefaultArgParsers.java | 16 +- .../command/argument/CommandArguments.java | 4 +- .../command/defaults/CommandAlias.java | 2 +- .../baritone/command/defaults/SelCommand.java | 8 +- .../command/manager/CommandManager.java | 20 +- .../pathing/calc/AbstractNodeCostSearch.java | 32 +- .../java/baritone/pathing/calc/PathNode.java | 7 +- .../pathing/movement/CalculationContext.java | 11 +- .../baritone/pathing/movement/Movement.java | 12 +- .../pathing/movement/MovementHelper.java | 24 +- .../pathing/movement/MovementState.java | 10 +- .../movement/movements/MovementAscend.java | 44 +- .../movement/movements/MovementDescend.java | 5 + .../movement/movements/MovementDiagonal.java | 104 ++-- .../movement/movements/MovementDownward.java | 32 +- .../movement/movements/MovementFall.java | 4 +- .../movement/movements/MovementPillar.java | 20 +- .../movement/movements/MovementTraverse.java | 8 +- .../baritone/pathing/path/PathExecutor.java | 5 + .../baritone/pathing/path/SplicedPath.java | 50 +- .../java/baritone/process/BuilderProcess.java | 543 +++++++++--------- .../baritone/process/CustomGoalProcess.java | 20 +- .../java/baritone/process/ExploreProcess.java | 44 +- .../java/baritone/process/FarmProcess.java | 114 ++-- .../baritone/process/GetToBlockProcess.java | 28 +- .../java/baritone/process/MineProcess.java | 346 +++++------ .../baritone/utils/BlockStateInterface.java | 25 +- .../baritone/utils/InputOverrideHandler.java | 5 + src/main/java/baritone/utils/ToolSet.java | 5 +- .../utils/accessor/IAnvilChunkLoader.java | 32 -- .../baritone/utils/accessor/IBitArray.java | 6 - .../baritone/utils/pathing/Avoidance.java | 14 +- .../utils/pathing/PathingBlockType.java | 8 +- .../utils/schematic/MapArtSchematic.java | 10 +- src/main/java/baritone/utils/type/VarInt.java | 36 +- .../services/baritone.api.IBaritoneProvider | 1 - 89 files changed, 1428 insertions(+), 1484 deletions(-) delete mode 100644 buildSrc/src/main/java/baritone/gradle/util/MappingType.java delete mode 100644 buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java delete mode 100644 src/launch/resources/mixins.baritone.json delete mode 100644 src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java delete mode 100644 src/main/java/baritone/utils/accessor/IBitArray.java delete mode 100644 src/main/resources/META-INF/services/baritone.api.IBaritoneProvider diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index 5cb92c10b..edb250c3a 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -7,7 +7,6 @@ assignees: '' --- ## Some information - Operating system: Java version: Minecraft version: @@ -15,7 +14,6 @@ Baritone version: Other mods (if used): ## Exception, error or logs - Please find your `latest.log` or `debug.log` in this folder and attach it to the issue Linux: `~/.minecraft/logs/` @@ -25,11 +23,9 @@ Windows: `%appdata%/.minecraft/logs/` Mac: `/Library/Application\ Support/minecraft/logs/` ## How to reproduce - Add your steps to reproduce the issue/bug experienced here. ## Modified settings - To get the modified settings run `#modified` in game ## Final checklist diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 454a01606..db70a6850 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -7,10 +7,8 @@ assignees: '' --- ## What do you need help with? - With as much detail as possible, describe your question and what you may need help with. ## Final checklist - - [x] I know how to properly use check boxes - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/ISSUE_TEMPLATE/suggestion.md b/.github/ISSUE_TEMPLATE/suggestion.md index 04e746a56..1ee32142b 100644 --- a/.github/ISSUE_TEMPLATE/suggestion.md +++ b/.github/ISSUE_TEMPLATE/suggestion.md @@ -7,18 +7,14 @@ assignees: '' --- ## Describe your suggestion - With as much detail as possible, describe what your suggestion would do for Baritone. ## Settings - If applicable, what settings/customizability should be offered to tweak the functionality of your suggestion. ## Context - Describe how your suggestion would improve Baritone, or the reason behind it being added. ## Final checklist - - [x] I know how to properly use check boxes - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 956c826bf..16c1126bd 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -1,3 +1,4 @@ + name: Tests on: diff --git a/FEATURES.md b/FEATURES.md index 2662b2e48..e0f6e7d2d 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -1,5 +1,4 @@ # Pathing features - - **Long distance pathing and splicing** Baritone calculates paths in segments, and precalculates the next segment when the current one is about to end, so that it's moving towards the goal at all times. - **Chunk caching** Baritone simplifies chunks to a compacted internal 2-bit representation (AIR, SOLID, WATER, AVOID) @@ -94,7 +93,6 @@ Things it doesn't have yet See issues for more. Things it may not ever have, from most likely to least likely =( - - Boats - Horses (2x3 path instead of 1x2) - Elytra diff --git a/README.md b/README.md index e9fc5f887..2925ea5ec 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ # Baritone -

GitHub All Releases

diff --git a/SETUP.md b/SETUP.md index 1ccb04f49..6cbc967cd 100644 --- a/SETUP.md +++ b/SETUP.md @@ -49,7 +49,6 @@ want `baritone-standalone-forge-VERSION.jar` - **Forge/Fabric Unoptimized**: Same as Unoptimized, but packaged for Forge/Fabric. ## Build it yourself - - Clone or download Baritone ![Image](https://i.imgur.com/kbqBtoN.png) @@ -69,7 +68,6 @@ If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work b 8 using may not have the needed javax classes. Open JDK download: https://openjdk.java.net/install/ - #### macOS guide In order to get JDK 8, Try running the following command: @@ -123,7 +121,6 @@ $ gradlew runClient For information on how to build baritone, see [Building Baritone](#building-baritone) ## IntelliJ - - Open the project in IntelliJ as a Gradle project ![Image](https://i.imgur.com/jw7Q6vY.png) diff --git a/USAGE.md b/USAGE.md index e1886cb6e..485b295e7 100644 --- a/USAGE.md +++ b/USAGE.md @@ -99,7 +99,6 @@ look >> 4]; - hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; - } - return new String(hexChars, StandardCharsets.UTF_8); - } - @TaskAction protected void exec() throws Exception { super.verifyArtifacts(); @@ -95,4 +68,32 @@ protected void exec() throws Exception { // Write the checksums to a file Files.write(getRootRelativeFile("dist/checksums.txt"), shasum); } + + private static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII); + + private static String getFileName(Path p) { + return p.getFileName().toString(); + } + + private static synchronized String sha1(Path path) { + try { + if (SHA1_DIGEST == null) { + SHA1_DIGEST = MessageDigest.getInstance("SHA-1"); + } + return bytesToHex(SHA1_DIGEST.digest(Files.readAllBytes(path))).toLowerCase(); + } catch (Exception e) { + // haha no thanks + throw new IllegalStateException(e); + } + } + + public static String bytesToHex(byte[] bytes) { + byte[] hexChars = new byte[bytes.length * 2]; + for (int j = 0; j < bytes.length; j++) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = HEX_ARRAY[v >>> 4]; + hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; + } + return new String(hexChars, StandardCharsets.UTF_8); + } } diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index ea9c824fa..e2d71c4fc 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -53,30 +53,18 @@ public class ProguardTask extends BaritoneGradleTask { @Input private String extract; - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - public String getExtract() { return extract; } - public void setExtract(String extract) { - this.extract = extract; + public String getUrl() { + return url; } public String getCompType() { return compType; } - public void setCompType(String compType) { - this.compType = compType; - } - @TaskAction protected void exec() throws Exception { super.verifyArtifacts(); @@ -116,6 +104,10 @@ private File getMcJar() throws IOException { return mcClientJar; } + public void setUrl(String url) { + this.url = url; + } + private void downloadProguard() throws Exception { Path proguardZip = getTemporaryFile(PROGUARD_ZIP); if (!Files.exists(proguardZip)) { @@ -213,14 +205,6 @@ public boolean accept(File dir, String name) { return null; } - private void processArtifact() throws Exception { - if (Files.exists(this.artifactUnoptimizedPath)) { - Files.delete(this.artifactUnoptimizedPath); - } - - Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString()); - } - private boolean validateJavaVersion(String java) { //TODO: fix for j16 // final JavaVersion javaVersion = new DefaultJvmVersionDetector(new DefaultExecActionFactory(new IdentityFileResolver())).getJavaVersion(java); @@ -295,6 +279,14 @@ private void proguardApi() throws Exception { Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); } + private void processArtifact() throws Exception { + if (Files.exists(this.artifactUnoptimizedPath)) { + Files.delete(this.artifactUnoptimizedPath); + } + + Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString()); + } + private void cleanup() { try { Files.delete(this.proguardOut); @@ -307,6 +299,14 @@ private void proguardStandalone() throws Exception { Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString()); } + public void setExtract(String extract) { + this.extract = extract; + } + + public void setCompType(String compType) { + this.compType = compType; + } + private void runProguard(Path config) throws Exception { // Delete the existing proguard output file. Proguard probably handles this already, but why not do it ourselves if (Files.exists(this.proguardOut)) { diff --git a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java index 93d564e90..fc268cd35 100644 --- a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java +++ b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java @@ -39,6 +39,56 @@ */ public class Determinizer { + public static void determinize(String inputPath, String outputPath) throws IOException { + System.out.println("Running Determinizer"); + System.out.println(" Input path: " + inputPath); + System.out.println(" Output path: " + outputPath); + + try ( + JarFile jarFile = new JarFile(new File(inputPath)); + JarOutputStream jos = new JarOutputStream(new FileOutputStream(new File(outputPath))) + ) { + + List entries = jarFile.stream() + .sorted(Comparator.comparing(JarEntry::getName)) + .collect(Collectors.toList()); + + for (JarEntry entry : entries) { + if (entry.getName().equals("META-INF/fml_cache_annotation.json")) { + continue; + } + if (entry.getName().equals("META-INF/fml_cache_class_versions.json")) { + continue; + } + JarEntry clone = new JarEntry(entry.getName()); + clone.setTime(42069); + jos.putNextEntry(clone); + if (entry.getName().endsWith(".refmap.json")) { + JsonObject object = new JsonParser().parse(new InputStreamReader(jarFile.getInputStream(entry))).getAsJsonObject(); + jos.write(writeSorted(object).getBytes()); + } else { + copy(jarFile.getInputStream(entry), jos); + } + } + jos.finish(); + } + } + + private static void copy(InputStream is, OutputStream os) throws IOException { + byte[] buffer = new byte[1024]; + int len; + while ((len = is.read(buffer)) != -1) { + os.write(buffer, 0, len); + } + } + + private static String writeSorted(JsonObject in) throws IOException { + StringWriter writer = new StringWriter(); + JsonWriter jw = new JsonWriter(writer); + ORDERED_JSON_WRITER.write(jw, in); + return writer.toString() + "\n"; + } + /** * All credits go to GSON and its contributors. GSON is licensed under the Apache 2.0 License. * This implementation has been modified to write {@link JsonObject} keys in order. @@ -90,54 +140,4 @@ public void write(JsonWriter out, JsonElement value) throws IOException { } } }; - - public static void determinize(String inputPath, String outputPath) throws IOException { - System.out.println("Running Determinizer"); - System.out.println(" Input path: " + inputPath); - System.out.println(" Output path: " + outputPath); - - try ( - JarFile jarFile = new JarFile(new File(inputPath)); - JarOutputStream jos = new JarOutputStream(new FileOutputStream(new File(outputPath))) - ) { - - List entries = jarFile.stream() - .sorted(Comparator.comparing(JarEntry::getName)) - .collect(Collectors.toList()); - - for (JarEntry entry : entries) { - if (entry.getName().equals("META-INF/fml_cache_annotation.json")) { - continue; - } - if (entry.getName().equals("META-INF/fml_cache_class_versions.json")) { - continue; - } - JarEntry clone = new JarEntry(entry.getName()); - clone.setTime(42069); - jos.putNextEntry(clone); - if (entry.getName().endsWith(".refmap.json")) { - JsonObject object = new JsonParser().parse(new InputStreamReader(jarFile.getInputStream(entry))).getAsJsonObject(); - jos.write(writeSorted(object).getBytes()); - } else { - copy(jarFile.getInputStream(entry), jos); - } - } - jos.finish(); - } - } - - private static void copy(InputStream is, OutputStream os) throws IOException { - byte[] buffer = new byte[1024]; - int len; - while ((len = is.read(buffer)) != -1) { - os.write(buffer, 0, len); - } - } - - private static String writeSorted(JsonObject in) throws IOException { - StringWriter writer = new StringWriter(); - JsonWriter jw = new JsonWriter(writer); - ORDERED_JSON_WRITER.write(jw, in); - return writer.toString() + "\n"; - } } diff --git a/buildSrc/src/main/java/baritone/gradle/util/MappingType.java b/buildSrc/src/main/java/baritone/gradle/util/MappingType.java deleted file mode 100644 index a3be9b49f..000000000 --- a/buildSrc/src/main/java/baritone/gradle/util/MappingType.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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.gradle.util; - -/** - * All credits go to AsmLibGradle and its contributors. - * - * @see Original Source - */ -public enum MappingType { - SEARGE, - NOTCH, - CUSTOM // forgegradle -} diff --git a/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java b/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java deleted file mode 100644 index f752cd946..000000000 --- a/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.gradle.util; - -import java.lang.reflect.Field; -import java.util.Objects; - -/** - * All credits go to AsmLibGradle and its contributors. - * - * @see Original Source - */ -public class ReobfWrapper { - - private final Object instance; - private final Class type; - - public ReobfWrapper(Object instance) { - this.instance = instance; - Objects.requireNonNull(instance); - this.type = instance.getClass(); - } - - public String getName() { - try { - Field nameField = type.getDeclaredField("name"); - nameField.setAccessible(true); - return (String) nameField.get(this.instance); - } catch (ReflectiveOperationException ex) { - throw new IllegalStateException(ex); - } - } - - public MappingType getMappingType() { - try { - Field enumField = type.getDeclaredField("mappingType"); - enumField.setAccessible(true); - Enum aEnum = (Enum) enumField.get(this.instance); - MappingType mappingType = MappingType.values()[aEnum.ordinal()]; - if (!aEnum.name().equals(mappingType.name())) { - throw new IllegalStateException("ForgeGradle ReobfMappingType is not equivalent to MappingType (version error?)"); - } - return mappingType; - } catch (ReflectiveOperationException ex) { - throw new IllegalStateException(ex); - } - } -} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 97450b4f9..e6544ffcc 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -1,3 +1,4 @@ + { "schemaVersion": 1, "id": "baritone-meteor", @@ -13,10 +14,12 @@ "sources": "https://github.com/cabaletta/baritone" }, "license": "LGPL-3.0", + "icon": "assets/baritone/icon.png", "environment": "*", "entrypoints": { }, "mixins": [ + "mixins.baritone-meteor.json" ], "depends": { "fabricloader": ">=0.11.0", diff --git a/settings.gradle b/settings.gradle index 446a41f4c..6524b3d09 100755 --- a/settings.gradle +++ b/settings.gradle @@ -48,5 +48,5 @@ if (System.getProperty("Baritone.enabled_platforms") == null) { System.setProperty("Baritone.enabled_platforms", "fabric,") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { - include(platform) + include(platform) } diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 979ab59e6..a79b77117 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1285,49 +1285,6 @@ public final class Settings { public final Map, Type> settingTypes; - Settings() { - Field[] temp = getClass().getFields(); - - Map> tmpByName = new HashMap<>(); - List> tmpAll = new ArrayList<>(); - Map, Type> tmpSettingTypes = new HashMap<>(); - - try { - for (Field field : temp) { - if (field.getType().equals(Setting.class)) { - Setting setting = (Setting) field.get(this); - String name = field.getName(); - setting.name = name; - name = name.toLowerCase(); - if (tmpByName.containsKey(name)) { - throw new IllegalStateException("Duplicate setting name"); - } - tmpByName.put(name, setting); - tmpAll.add(setting); - tmpSettingTypes.put(setting, ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]); - } - } - } catch (IllegalAccessException e) { - throw new IllegalStateException(e); - } - byLowerName = Collections.unmodifiableMap(tmpByName); - allSettings = Collections.unmodifiableList(tmpAll); - settingTypes = Collections.unmodifiableMap(tmpSettingTypes); - } - - // here be dragons - - @SuppressWarnings("unchecked") - public List> getAllValuesByType(Class cla$$) { - List> result = new ArrayList<>(); - for (Setting setting : allSettings) { - if (setting.getValueClass().equals(cla$$)) { - result.add((Setting) setting); - } - } - return result; - } - public final class Setting { public final T defaultValue; @@ -1378,4 +1335,47 @@ public final Type getType() { return settingTypes.get(this); } } + + // here be dragons + + Settings() { + Field[] temp = getClass().getFields(); + + Map> tmpByName = new HashMap<>(); + List> tmpAll = new ArrayList<>(); + Map, Type> tmpSettingTypes = new HashMap<>(); + + try { + for (Field field : temp) { + if (field.getType().equals(Setting.class)) { + Setting setting = (Setting) field.get(this); + String name = field.getName(); + setting.name = name; + name = name.toLowerCase(); + if (tmpByName.containsKey(name)) { + throw new IllegalStateException("Duplicate setting name"); + } + tmpByName.put(name, setting); + tmpAll.add(setting); + tmpSettingTypes.put(setting, ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]); + } + } + } catch (IllegalAccessException e) { + throw new IllegalStateException(e); + } + byLowerName = Collections.unmodifiableMap(tmpByName); + allSettings = Collections.unmodifiableList(tmpAll); + settingTypes = Collections.unmodifiableMap(tmpSettingTypes); + } + + @SuppressWarnings("unchecked") + public List> getAllValuesByType(Class cla$$) { + List> result = new ArrayList<>(); + for (Setting setting : allSettings) { + if (setting.getValueClass().equals(cla$$)) { + result.add((Setting) setting); + } + } + return result; + } } diff --git a/src/api/java/baritone/api/cache/IWaypoint.java b/src/api/java/baritone/api/cache/IWaypoint.java index c0434efb4..ff2350993 100644 --- a/src/api/java/baritone/api/cache/IWaypoint.java +++ b/src/api/java/baritone/api/cache/IWaypoint.java @@ -95,6 +95,13 @@ enum Tag { this.names = names; } + /** + * @return A name that can be passed to {@link #getByName(String)} to retrieve this tag + */ + public String getName() { + return names[0]; + } + /** * Gets a tag by one of its names. * @@ -125,12 +132,5 @@ public static String[] getAllNames() { return names.toArray(new String[0]); } - - /** - * @return A name that can be passed to {@link #getByName(String)} to retrieve this tag - */ - public String getName() { - return names[0]; - } } } diff --git a/src/api/java/baritone/api/command/Command.java b/src/api/java/baritone/api/command/Command.java index a4e94b151..c81a3365b 100644 --- a/src/api/java/baritone/api/command/Command.java +++ b/src/api/java/baritone/api/command/Command.java @@ -39,12 +39,13 @@ */ public abstract class Command implements ICommand { + protected IBaritone baritone; + protected IPlayerContext ctx; + /** * The names of this command. This is what you put after the command prefix. */ protected final List names; - protected IBaritone baritone; - protected IPlayerContext ctx; /** * Creates a new Baritone control command. diff --git a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java index 7afbfb8fa..061428827 100644 --- a/src/api/java/baritone/api/command/datatypes/ForWaypoints.java +++ b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java @@ -29,6 +29,27 @@ public enum ForWaypoints implements IDatatypeFor { INSTANCE; + @Override + public IWaypoint[] get(IDatatypeContext ctx) throws CommandException { + final String input = ctx.getConsumer().getString(); + final IWaypoint.Tag tag = IWaypoint.Tag.getByName(input); + + // If the input doesn't resolve to a valid tag, resolve by name + return tag == null + ? getWaypointsByName(ctx.getBaritone(), input) + : getWaypointsByTag(ctx.getBaritone(), tag); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + return new TabCompleteHelper() + .append(getWaypointNames(ctx.getBaritone())) + .sortAlphabetically() + .prepend(IWaypoint.Tag.getAllNames()) + .filterPrefix(ctx.getConsumer().getString()) + .stream(); + } + public static IWaypointCollection waypoints(IBaritone baritone) { return baritone.getWorldProvider().getCurrentWorld().getWaypoints(); } @@ -57,25 +78,4 @@ public static IWaypoint[] getWaypointsByName(IBaritone baritone, String name) { .filter(waypoint -> waypoint.getName().equalsIgnoreCase(name)) .toArray(IWaypoint[]::new); } - - @Override - public IWaypoint[] get(IDatatypeContext ctx) throws CommandException { - final String input = ctx.getConsumer().getString(); - final IWaypoint.Tag tag = IWaypoint.Tag.getByName(input); - - // If the input doesn't resolve to a valid tag, resolve by name - return tag == null - ? getWaypointsByName(ctx.getBaritone(), input) - : getWaypointsByTag(ctx.getBaritone(), tag); - } - - @Override - public Stream tabComplete(IDatatypeContext ctx) throws CommandException { - return new TabCompleteHelper() - .append(getWaypointNames(ctx.getBaritone())) - .sortAlphabetically() - .prepend(IWaypoint.Tag.getAllNames()) - .filterPrefix(ctx.getConsumer().getString()) - .stream(); - } } diff --git a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java index e60845768..d1016e99e 100644 --- a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java +++ b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java @@ -33,10 +33,6 @@ public enum NearbyPlayer implements IDatatypeFor { INSTANCE; - private static List getPlayers(IDatatypeContext ctx) { - return ctx.getBaritone().getPlayerContext().world().players(); - } - @Override public Player get(IDatatypeContext ctx) throws CommandException { final String username = ctx.getConsumer().getString(); @@ -53,4 +49,8 @@ public Stream tabComplete(IDatatypeContext ctx) throws CommandException .sortAlphabetically() .stream(); } + + private static List getPlayers(IDatatypeContext ctx) { + return ctx.getBaritone().getPlayerContext().world().players(); + } } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeFile.java b/src/api/java/baritone/api/command/datatypes/RelativeFile.java index bb827db28..7d7e6899b 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeFile.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeFile.java @@ -35,6 +35,26 @@ public enum RelativeFile implements IDatatypePost { INSTANCE; + @Override + public File apply(IDatatypeContext ctx, File original) throws CommandException { + if (original == null) { + original = new File("./"); + } + + Path path; + try { + path = FileSystems.getDefault().getPath(ctx.getConsumer().getString()); + } catch (InvalidPathException e) { + throw new IllegalArgumentException("invalid path"); + } + return getCanonicalFileUnchecked(original.toPath().resolve(path).toFile()); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) { + return Stream.empty(); + } + /** * Seriously * @@ -80,24 +100,4 @@ public static File gameDir() { } return gameDir; } - - @Override - public File apply(IDatatypeContext ctx, File original) throws CommandException { - if (original == null) { - original = new File("./"); - } - - Path path; - try { - path = FileSystems.getDefault().getPath(ctx.getConsumer().getString()); - } catch (InvalidPathException e) { - throw new IllegalArgumentException("invalid path"); - } - return getCanonicalFileUnchecked(original.toPath().resolve(path).toFile()); - } - - @Override - public Stream tabComplete(IDatatypeContext ctx) { - return Stream.empty(); - } } diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index 8de892217..e119a9a23 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -45,73 +45,6 @@ public Paginator(E... entries) { this.entries = Arrays.asList(entries); } - public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform, String commandPrefix) throws CommandException { - int page = 1; - consumer.requireMax(1); - if (consumer.hasAny()) { - page = consumer.getAs(Integer.class); - if (!pagi.validPage(page)) { - throw new CommandInvalidTypeException( - consumer.consumed(), - String.format( - "a valid page (1-%d)", - pagi.getMaxPage() - ), - consumer.consumed().getValue() - ); - } - } - pagi.skipPages(page - pagi.page); - if (pre != null) { - pre.run(); - } - pagi.display(transform, commandPrefix); - } - - public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { - paginate(consumer, new Paginator<>(elems), pre, transform, commandPrefix); - } - - public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { - paginate(consumer, Arrays.asList(elems), pre, transform, commandPrefix); - } - - public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform, String commandPrefix) throws CommandException { - paginate(consumer, pagi, null, transform, commandPrefix); - } - - public static void paginate(IArgConsumer consumer, List elems, Function transform, String commandPrefix) throws CommandException { - paginate(consumer, new Paginator<>(elems), null, transform, commandPrefix); - } - - public static void paginate(IArgConsumer consumer, T[] elems, Function transform, String commandPrefix) throws CommandException { - paginate(consumer, Arrays.asList(elems), null, transform, commandPrefix); - } - - public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform) throws CommandException { - paginate(consumer, pagi, pre, transform, null); - } - - public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform) throws CommandException { - paginate(consumer, new Paginator<>(elems), pre, transform, null); - } - - public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform) throws CommandException { - paginate(consumer, Arrays.asList(elems), pre, transform, null); - } - - public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform) throws CommandException { - paginate(consumer, pagi, null, transform, null); - } - - public static void paginate(IArgConsumer consumer, List elems, Function transform) throws CommandException { - paginate(consumer, new Paginator<>(elems), null, transform, null); - } - - public static void paginate(IArgConsumer consumer, T[] elems, Function transform) throws CommandException { - paginate(consumer, Arrays.asList(elems), null, transform, null); - } - public Paginator setPageSize(int pageSize) { this.pageSize = pageSize; return this; @@ -178,4 +111,71 @@ public void display(Function transform, String commandPrefix) { public void display(Function transform) { display(transform, null); } + + public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform, String commandPrefix) throws CommandException { + int page = 1; + consumer.requireMax(1); + if (consumer.hasAny()) { + page = consumer.getAs(Integer.class); + if (!pagi.validPage(page)) { + throw new CommandInvalidTypeException( + consumer.consumed(), + String.format( + "a valid page (1-%d)", + pagi.getMaxPage() + ), + consumer.consumed().getValue() + ); + } + } + pagi.skipPages(page - pagi.page); + if (pre != null) { + pre.run(); + } + pagi.display(transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { + paginate(consumer, new Paginator<>(elems), pre, transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { + paginate(consumer, Arrays.asList(elems), pre, transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform, String commandPrefix) throws CommandException { + paginate(consumer, pagi, null, transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, List elems, Function transform, String commandPrefix) throws CommandException { + paginate(consumer, new Paginator<>(elems), null, transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, T[] elems, Function transform, String commandPrefix) throws CommandException { + paginate(consumer, Arrays.asList(elems), null, transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform) throws CommandException { + paginate(consumer, pagi, pre, transform, null); + } + + public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform) throws CommandException { + paginate(consumer, new Paginator<>(elems), pre, transform, null); + } + + public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform) throws CommandException { + paginate(consumer, Arrays.asList(elems), pre, transform, null); + } + + public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform) throws CommandException { + paginate(consumer, pagi, null, transform, null); + } + + public static void paginate(IArgConsumer consumer, List elems, Function transform) throws CommandException { + paginate(consumer, new Paginator<>(elems), null, transform, null); + } + + public static void paginate(IArgConsumer consumer, T[] elems, Function transform) throws CommandException { + paginate(consumer, Arrays.asList(elems), null, transform, null); + } } diff --git a/src/api/java/baritone/api/command/registry/Registry.java b/src/api/java/baritone/api/command/registry/Registry.java index 921c33711..067791690 100644 --- a/src/api/java/baritone/api/command/registry/Registry.java +++ b/src/api/java/baritone/api/command/registry/Registry.java @@ -40,17 +40,17 @@ public class Registry { * not just use a map. */ private final Deque _entries = new LinkedList<>(); - /** - * The collection of entries that are currently in this registry. This is a collection (and not a list) because, - * internally, entries are stored in a linked list, which is not the same as a normal list. - */ - public final Collection entries = Collections.unmodifiableCollection(_entries); /** * A HashSet containing every entry currently registered. Entries are added to this set when something is registered * and removed from the set when they are unregistered. An entry being present in this set indicates that it is * currently registered, can be removed, and should not be reregistered until it is removed. */ private final Set registered = new HashSet<>(); + /** + * The collection of entries that are currently in this registry. This is a collection (and not a list) because, + * internally, entries are stored in a linked list, which is not the same as a normal list. + */ + public final Collection entries = Collections.unmodifiableCollection(_entries); /** * @param entry The entry to check. diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index 894d6fa86..bae83c0fa 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -42,13 +42,6 @@ public RotationMoveEvent(Type type, float yaw) { this.yaw = yaw; } - /** - * @return The yaw rotation - */ - public final float getYaw() { - return this.yaw; - } - /** * Set the yaw movement rotation * @@ -58,6 +51,13 @@ public final void setYaw(float yaw) { this.yaw = yaw; } + /** + * @return The yaw rotation + */ + public final float getYaw() { + return this.yaw; + } + /** * @return The type of the event */ diff --git a/src/api/java/baritone/api/event/events/SprintStateEvent.java b/src/api/java/baritone/api/event/events/SprintStateEvent.java index 4c7305a19..606728017 100644 --- a/src/api/java/baritone/api/event/events/SprintStateEvent.java +++ b/src/api/java/baritone/api/event/events/SprintStateEvent.java @@ -25,11 +25,11 @@ public final class SprintStateEvent { private Boolean state; - public final Boolean getState() { - return this.state; - } - public final void setState(boolean state) { this.state = state; } + + public final Boolean getState() { + return this.state; + } } diff --git a/src/api/java/baritone/api/event/events/TickEvent.java b/src/api/java/baritone/api/event/events/TickEvent.java index 4cae3e200..5c484ae49 100644 --- a/src/api/java/baritone/api/event/events/TickEvent.java +++ b/src/api/java/baritone/api/event/events/TickEvent.java @@ -35,11 +35,6 @@ public TickEvent(EventState state, Type type, int count) { this.count = count; } - public static synchronized BiFunction createNextProvider() { - final int count = overallTickCount++; - return (state, type) -> new TickEvent(state, type, count); - } - public int getCount() { return count; } @@ -52,6 +47,11 @@ public EventState getState() { return state; } + public static synchronized BiFunction createNextProvider() { + final int count = overallTickCount++; + return (state, type) -> new TickEvent(state, type, count); + } + public enum Type { /** * When guarantees can be made about diff --git a/src/api/java/baritone/api/pathing/goals/GoalBlock.java b/src/api/java/baritone/api/pathing/goals/GoalBlock.java index 9b6a28a2d..7cb9da14a 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalBlock.java @@ -53,18 +53,6 @@ public GoalBlock(int x, int y, int z) { this.z = z; } - public static double calculate(double xDiff, int yDiff, double zDiff) { - double heuristic = 0; - - // if yDiff is 1 that means that currentY-goalY==1 which means that we're 1 block above where we should be - // therefore going from 0,yDiff,0 to a GoalYLevel of 0 is accurate - heuristic += GoalYLevel.calculate(0, yDiff); - - //use the pythagorean and manhattan mixture from GoalXZ - heuristic += GoalXZ.calculate(xDiff, zDiff); - return heuristic; - } - @Override public boolean isInGoal(int x, int y, int z) { return x == this.x && y == this.y && z == this.z; @@ -95,4 +83,16 @@ public String toString() { public BlockPos getGoalPos() { return new BlockPos(x, y, z); } + + public static double calculate(double xDiff, int yDiff, double zDiff) { + double heuristic = 0; + + // if yDiff is 1 that means that currentY-goalY==1 which means that we're 1 block above where we should be + // therefore going from 0,yDiff,0 to a GoalYLevel of 0 is accurate + heuristic += GoalYLevel.calculate(0, yDiff); + + //use the pythagorean and manhattan mixture from GoalXZ + heuristic += GoalXZ.calculate(xDiff, zDiff); + return heuristic; + } } diff --git a/src/api/java/baritone/api/pathing/goals/GoalXZ.java b/src/api/java/baritone/api/pathing/goals/GoalXZ.java index b06f548cd..f70f6c4f7 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalXZ.java +++ b/src/api/java/baritone/api/pathing/goals/GoalXZ.java @@ -52,6 +52,27 @@ public GoalXZ(BetterBlockPos pos) { this.z = pos.z; } + @Override + public boolean isInGoal(int x, int y, int z) { + return x == this.x && z == this.z; + } + + @Override + public double heuristic(int x, int y, int z) {//mostly copied from GoalBlock + int xDiff = x - this.x; + int zDiff = z - this.z; + return calculate(xDiff, zDiff); + } + + @Override + public String toString() { + return String.format( + "GoalXZ{x=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(z) + ); + } + public static double calculate(double xDiff, double zDiff) { //This is a combination of pythagorean and manhattan distance //It takes into account the fact that pathing can either walk diagonally or forwards @@ -80,27 +101,6 @@ public static GoalXZ fromDirection(Vec3 origin, float yaw, double distance) { return new GoalXZ(Mth.floor(x), Mth.floor(z)); } - @Override - public boolean isInGoal(int x, int y, int z) { - return x == this.x && z == this.z; - } - - @Override - public double heuristic(int x, int y, int z) {//mostly copied from GoalBlock - int xDiff = x - this.x; - int zDiff = z - this.z; - return calculate(xDiff, zDiff); - } - - @Override - public String toString() { - return String.format( - "GoalXZ{x=%s,z=%s}", - SettingsUtil.maybeCensor(x), - SettingsUtil.maybeCensor(z) - ); - } - public int getX() { return x; } diff --git a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java index 6487f0434..603ef9bd1 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java +++ b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java @@ -36,6 +36,16 @@ public GoalYLevel(int level) { this.level = level; } + @Override + public boolean isInGoal(int x, int y, int z) { + return y == level; + } + + @Override + public double heuristic(int x, int y, int z) { + return calculate(level, y); + } + public static double calculate(int goalY, int currentY) { if (currentY > goalY) { // need to descend @@ -48,16 +58,6 @@ public static double calculate(int goalY, int currentY) { return 0; } - @Override - public boolean isInGoal(int x, int y, int z) { - return y == level; - } - - @Override - public double heuristic(int x, int y, int z) { - return calculate(level, y); - } - @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 9f5e0f970..4c10a593d 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -59,14 +59,6 @@ default boolean build(String schematicFile, BlockPos origin) { return build(schematicFile, file, origin); } - Vec3i getSchemSize(); - - void popStack(); - - boolean clearState(); - - boolean isFromAltoclefFinished(); - void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef); boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef); @@ -77,6 +69,14 @@ default boolean build(String schematicFile, BlockPos origin) { boolean isPaused(); + Vec3i getSchemSize(); + + void popStack(); + + boolean clearState(); + + boolean isFromAltoclefFinished(); + void resume(); void clearArea(BlockPos corner1, BlockPos corner2); diff --git a/src/api/java/baritone/api/process/ICustomGoalProcess.java b/src/api/java/baritone/api/process/ICustomGoalProcess.java index b7b1ff56d..5084aff2f 100644 --- a/src/api/java/baritone/api/process/ICustomGoalProcess.java +++ b/src/api/java/baritone/api/process/ICustomGoalProcess.java @@ -21,6 +21,13 @@ public interface ICustomGoalProcess extends IBaritoneProcess { + /** + * Sets the pathing goal + * + * @param goal The new goal + */ + void setGoal(Goal goal); + /** * Starts path calculation and execution. */ @@ -31,13 +38,6 @@ public interface ICustomGoalProcess extends IBaritoneProcess { */ Goal getGoal(); - /** - * Sets the pathing goal - * - * @param goal The new goal - */ - void setGoal(Goal goal); - /** * Sets the goal and begins the path execution. * diff --git a/src/api/java/baritone/api/schematic/CompositeSchematic.java b/src/api/java/baritone/api/schematic/CompositeSchematic.java index 983273e0d..62faa8bf2 100644 --- a/src/api/java/baritone/api/schematic/CompositeSchematic.java +++ b/src/api/java/baritone/api/schematic/CompositeSchematic.java @@ -27,12 +27,6 @@ public class CompositeSchematic extends AbstractSchematic { private final List schematics; private CompositeSchematicEntry[] schematicArr; - public CompositeSchematic(int x, int y, int z) { - super(x, y, z); - schematics = new ArrayList<>(); - recalcArr(); - } - private void recalcArr() { schematicArr = schematics.toArray(new CompositeSchematicEntry[0]); for (CompositeSchematicEntry entry : schematicArr) { @@ -42,6 +36,12 @@ private void recalcArr() { } } + public CompositeSchematic(int x, int y, int z) { + super(x, y, z); + schematics = new ArrayList<>(); + recalcArr(); + } + public void put(ISchematic extra, int x, int y, int z) { schematics.add(new CompositeSchematicEntry(extra, x, y, z)); recalcArr(); diff --git a/src/api/java/baritone/api/schematic/SubstituteSchematic.java b/src/api/java/baritone/api/schematic/SubstituteSchematic.java index 96baa38da..1e7d99db0 100644 --- a/src/api/java/baritone/api/schematic/SubstituteSchematic.java +++ b/src/api/java/baritone/api/schematic/SubstituteSchematic.java @@ -84,7 +84,6 @@ private BlockState withBlock(BlockState state, Block block) { blockStateCache.computeIfAbsent(state, s -> new HashMap()).put(block, newState); return newState; } - private > BlockState copySingleProp(BlockState fromState, BlockState toState, Property prop) { return toState.setValue(prop, fromState.getValue(prop)); } diff --git a/src/api/java/baritone/api/utils/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java index 058aa23d9..676398887 100644 --- a/src/api/java/baritone/api/utils/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -70,6 +70,11 @@ public static BetterBlockPos from(BlockPos pos) { return new BetterBlockPos(pos); } + @Override + public int hashCode() { + return (int) longHash(x, y, z); + } + public static long longHash(BetterBlockPos pos) { return longHash(pos.x, pos.y, pos.z); } @@ -95,11 +100,6 @@ public static long longHash(int x, int y, int z) { return hash; } - @Override - public int hashCode() { - return (int) longHash(x, y, z); - } - @Override public boolean equals(Object o) { if (o == null) { diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index ca5655a59..dbb08678e 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -51,14 +51,14 @@ public final class BlockOptionalMeta { + private final Block block; + private final Set blockstates; + private final ImmutableSet stateHashes; + private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); private static LootTables manager; private static PredicateManager predicate = new PredicateManager(); private static Map> drops = new HashMap<>(); - private final Block block; - private final ImmutableSet stateHashes; - private final ImmutableSet stackHashes; - private final Set blockstates; public BlockOptionalMeta(@Nonnull Block block) { this.block = block; @@ -107,6 +107,41 @@ private static ImmutableSet getStackHashes(Set blockstates) ); } + public Block getBlock() { + return block; + } + + public boolean matches(@Nonnull Block block) { + return block == this.block; + } + + public boolean matches(@Nonnull BlockState blockstate) { + Block block = blockstate.getBlock(); + return block == this.block && stateHashes.contains(blockstate.hashCode()); + } + + public boolean matches(ItemStack stack) { + //noinspection ConstantConditions + int hash = ((IItemStack) (Object) stack).getBaritoneHash(); + + hash -= stack.getDamageValue(); + + return stackHashes.contains(hash); + } + + @Override + public String toString() { + return String.format("BlockOptionalMeta{block=%s}", block); + } + + public BlockState getAnyBlockState() { + if (blockstates.size() > 0) { + return blockstates.iterator().next(); + } + + return null; + } + public static LootTables getManager() { if (manager == null) { PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource()); @@ -151,39 +186,4 @@ private static synchronized List drops(Block b) { } }); } - - public Block getBlock() { - return block; - } - - public boolean matches(@Nonnull Block block) { - return block == this.block; - } - - public boolean matches(@Nonnull BlockState blockstate) { - Block block = blockstate.getBlock(); - return block == this.block && stateHashes.contains(blockstate.hashCode()); - } - - public boolean matches(ItemStack stack) { - //noinspection ConstantConditions - int hash = ((IItemStack) (Object) stack).getBaritoneHash(); - - hash -= stack.getDamageValue(); - - return stackHashes.contains(hash); - } - - @Override - public String toString() { - return String.format("BlockOptionalMeta{block=%s}", block); - } - - public BlockState getAnyBlockState() { - if (blockstates.size() > 0) { - return blockstates.iterator().next(); - } - - return null; - } } diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index 652de1188..50732ec52 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -28,9 +28,6 @@ public class BlockUtils { private static transient Map resourceCache = new HashMap<>(); - private BlockUtils() { - } - public static String blockToString(Block block) { ResourceLocation loc = Registry.BLOCK.getKey(block); String name = loc.getPath(); // normally, only write the part after the minecraft: @@ -66,4 +63,7 @@ public static Block stringToBlockNullable(String name) { resourceCache = copy; return block; } + + private BlockUtils() { + } } diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 40eb62bd2..32e331544 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -38,27 +38,24 @@ */ public interface IPlayerContext { + LocalPlayer player(); + static double eyeHeight(boolean ifSneaking) { return ifSneaking ? 1.27 : 1.62; } - IPlayerController playerController(); - - LocalPlayer player(); - Level world(); default Iterable entities() { return ((ClientLevel) world()).entitiesForRendering(); } - - IWorldData worldData(); - default Stream entitiesStream() { return StreamSupport.stream(entities().spliterator(), false); } + IPlayerController playerController(); + HitResult objectMouseOver(); default BetterBlockPos playerFeet() { @@ -95,6 +92,8 @@ default Rotation playerRotations() { return new Rotation(player().getYRot(), player().getXRot()); } + IWorldData worldData(); + /** * Returns the block that the crosshair is currently placed over. Updated once per tick. * diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 01c9b6c92..db25ac0b6 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -60,7 +60,7 @@ public static HitResult rayTraceTowards(Entity entity, Rotation rotation, double direction.y * blockReachDistance, direction.z * blockReachDistance ); - return entity.level.clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)); + return entity.level.clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, fluidHandling, entity)); } public static Vec3 inferSneakingEyePosition(Entity entity) { diff --git a/src/api/java/baritone/api/utils/Rotation.java b/src/api/java/baritone/api/utils/Rotation.java index 647687d51..36beea7bc 100644 --- a/src/api/java/baritone/api/utils/Rotation.java +++ b/src/api/java/baritone/api/utils/Rotation.java @@ -41,33 +41,6 @@ public Rotation(float yaw, float pitch) { } } - /** - * Clamps the specified pitch value between -90 and 90. - * - * @param pitch The input pitch - * @return The clamped pitch - */ - public static float clampPitch(float pitch) { - return Math.max(-90, Math.min(90, pitch)); - } - - /** - * Normalizes the specified yaw value between -180 and 180. - * - * @param yaw The input yaw - * @return The normalized yaw - */ - public static float normalizeYaw(float yaw) { - float newYaw = yaw % 360F; - if (newYaw < -180F) { - newYaw += 360F; - } - if (newYaw > 180F) { - newYaw -= 360F; - } - return newYaw; - } - /** * @return The yaw of this rotation */ @@ -155,6 +128,33 @@ public boolean yawIsReallyClose(Rotation other) { return (yawDiff < 0.01 || yawDiff > 359.99); } + /** + * Clamps the specified pitch value between -90 and 90. + * + * @param pitch The input pitch + * @return The clamped pitch + */ + public static float clampPitch(float pitch) { + return Math.max(-90, Math.min(90, pitch)); + } + + /** + * Normalizes the specified yaw value between -180 and 180. + * + * @param yaw The input yaw + * @return The normalized yaw + */ + public static float normalizeYaw(float yaw) { + float newYaw = yaw % 360F; + if (newYaw < -180F) { + newYaw += 360F; + } + if (newYaw > 180F) { + newYaw -= 360F; + } + return newYaw; + } + @Override public String toString() { return "Yaw: " + yaw + ", Pitch: " + pitch; diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index e72a5b14a..c9fbd557c 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -310,12 +310,6 @@ Parser(Class cla$$, Function parser, Function toStr this.toString = x -> toString.apply((T) x); } - public static Parser getParser(Type type) { - return Stream.of(values()) - .filter(parser -> parser.accepts(type)) - .findFirst().orElse(null); - } - @Override public Object parse(ParserContext context, String raw) { Object parsed = this.parser.apply(raw); @@ -332,6 +326,12 @@ public String toString(ParserContext context, Object value) { public boolean accepts(Type type) { return type instanceof Class && this.cla$$.isAssignableFrom((Class) type); } + + public static Parser getParser(Type type) { + return Stream.of(values()) + .filter(parser -> parser.accepts(type)) + .findFirst().orElse(null); + } } private interface ISettingParser { diff --git a/src/api/java/baritone/api/utils/gui/BaritoneToast.java b/src/api/java/baritone/api/utils/gui/BaritoneToast.java index bb3cd8fc8..87f0aac6a 100644 --- a/src/api/java/baritone/api/utils/gui/BaritoneToast.java +++ b/src/api/java/baritone/api/utils/gui/BaritoneToast.java @@ -37,20 +37,6 @@ public BaritoneToast(Component titleComponent, Component subtitleComponent, long this.totalShowTime = totalShowTime; } - public static void addOrUpdate(ToastComponent toast, Component title, Component subtitle, long totalShowTime) { - BaritoneToast baritonetoast = toast.getToast(BaritoneToast.class, new Object()); - - if (baritonetoast == null) { - toast.addToast(new BaritoneToast(title, subtitle, totalShowTime)); - } else { - baritonetoast.setDisplayedText(title, subtitle); - } - } - - public static void addOrUpdate(Component title, Component subtitle) { - addOrUpdate(Minecraft.getInstance().getToasts(), title, subtitle, baritone.api.BaritoneAPI.getSettings().toastTimer.value); - } - public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long delta) { if (this.newDisplay) { this.firstDrawTime = delta; @@ -78,4 +64,18 @@ public void setDisplayedText(Component titleComponent, Component subtitleCompone this.subtitle = subtitleComponent == null ? null : subtitleComponent.getString(); this.newDisplay = true; } + + public static void addOrUpdate(ToastComponent toast, Component title, Component subtitle, long totalShowTime) { + BaritoneToast baritonetoast = toast.getToast(BaritoneToast.class, new Object()); + + if (baritonetoast == null) { + toast.addToast(new BaritoneToast(title, subtitle, totalShowTime)); + } else { + baritonetoast.setDisplayedText(title, subtitle); + } + } + + public static void addOrUpdate(Component title, Component subtitle) { + addOrUpdate(Minecraft.getInstance().getToasts(), title, subtitle, baritone.api.BaritoneAPI.getSettings().toastTimer.value); + } } diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java index e8bc9456c..9f88fb1fe 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java @@ -34,15 +34,16 @@ public abstract class MixinChunkArray implements IChunkArray { @Final @Shadow int chunkRadius; + + @Final + @Shadow + private int viewRange; @Shadow int viewCenterX; @Shadow int viewCenterZ; @Shadow int chunkCount; - @Final - @Shadow - private int viewRange; @Shadow abstract boolean inRange(int x, int z); diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index 366d819f9..b48e919f2 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -30,10 +30,11 @@ @Mixin(Entity.class) public class MixinEntity { - float yawRestore; @Shadow private float yRot; + float yawRestore; + @Inject( method = "moveRelative", at = @At("HEAD") diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json deleted file mode 100644 index eb31a2e76..000000000 --- a/src/launch/resources/mixins.baritone.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "required": true, - "package": "baritone.launch.mixins", - "refmap": "mixins.baritone.refmap.json", - "compatibilityLevel": "JAVA_8", - "verbose": false, - "injectors": { - "maxShiftBy": 2 - }, - "client": [ - "MixinAnvilChunkLoader", - "MixinBitArray", - "MixinBlockStateContainer", - "MixinChatTabCompleter", - "MixinChunkProviderClient", - "MixinChunkProviderServer", - "MixinChunkRenderContainer", - "MixinChunkRenderWorker", - "MixinEntityLivingBase", - "MixinEntityPlayerSP", - "MixinEntityRenderer", - "MixinGuiScreen", - "MixinItemStack", - "MixinMinecraft", - "MixinNetHandlerPlayClient", - "MixinNetworkManager", - "MixinPlayerControllerMP", - "MixinRenderChunk", - "MixinRenderList", - "MixinStateImplementation", - "MixinTabCompleter", - "MixinVboRenderList", - "MixinWorldClient" - ] -} \ No newline at end of file diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 86ff19101..b81e17b38 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -65,13 +65,14 @@ public class Baritone implements IBaritone { } } - public BlockStateInterface bsi; private GameEventHandler gameEventHandler; + private PathingBehavior pathingBehavior; private LookBehavior lookBehavior; private InventoryBehavior inventoryBehavior; private WaypointBehavior waypointBehavior; private InputOverrideHandler inputOverrideHandler; + private FollowProcess followProcess; private MineProcess mineProcess; private GetToBlockProcess getToBlockProcess; @@ -80,12 +81,16 @@ public class Baritone implements IBaritone { private ExploreProcess exploreProcess; private BackfillProcess backfillProcess; private FarmProcess farmProcess; + private PathingControlManager pathingControlManager; private SelectionManager selectionManager; private CommandManager commandManager; + private IPlayerContext playerContext; private WorldProvider worldProvider; + public BlockStateInterface bsi; + Baritone() { this.gameEventHandler = new GameEventHandler(this); @@ -118,18 +123,6 @@ public class Baritone implements IBaritone { this.commandManager = new CommandManager(this); } - public static Settings settings() { - return BaritoneAPI.getSettings(); - } - - public static File getDir() { - return dir; - } - - public static Executor getExecutor() { - return threadPool; - } - @Override public PathingControlManager getPathingControlManager() { return this.pathingControlManager; @@ -226,4 +219,16 @@ public void openClick() { } }).start(); } + + public static Settings settings() { + return BaritoneAPI.getSettings(); + } + + public static File getDir() { + return dir; + } + + public static Executor getExecutor() { + return threadPool; + } } diff --git a/src/main/java/baritone/altoclef/AltoClefSettings.java b/src/main/java/baritone/altoclef/AltoClefSettings.java index 9ec44b3c2..eb75a913e 100644 --- a/src/main/java/baritone/altoclef/AltoClefSettings.java +++ b/src/main/java/baritone/altoclef/AltoClefSettings.java @@ -33,34 +33,48 @@ public class AltoClefSettings { // woo singletons private static AltoClefSettings _instance = new AltoClefSettings(); + + public static AltoClefSettings getInstance() { + return _instance; + } + private final Object breakMutex = new Object(); private final Object placeMutex = new Object(); + private final Object propertiesMutex = new Object(); + private final Object globalHeuristicMutex = new Object(); + private final HashSet _blocksToAvoidBreaking = new HashSet<>(); private final List> _breakAvoiders = new ArrayList<>(); + private final List> _placeAvoiders = new ArrayList<>(); + private final List> _forceCanWalkOn = new ArrayList<>(); + private final List> _forceAvoidWalkThrough = new ArrayList<>(); + private final List> _forceUseTool = new ArrayList<>(); + private final List> _globalHeuristics = new ArrayList<>(); + private final HashSet _protectedItems = new HashSet<>(); + private boolean _allowFlowingWaterPass; + private boolean _pauseInteractions; + private boolean _dontPlaceBucketButStillFall; + private boolean _allowSwimThroughLava = false; - private boolean _treatSoulSandAsOrdinaryBlock = false; - public static AltoClefSettings getInstance() { - return _instance; - } + private boolean _treatSoulSandAsOrdinaryBlock = false; public void avoidBlockBreak(BlockPos pos) { synchronized (breakMutex) { _blocksToAvoidBreaking.add(pos); } } - public void avoidBlockBreak(Predicate avoider) { synchronized (breakMutex) { _breakAvoiders.add(avoider); @@ -88,7 +102,6 @@ public void avoidBlockPlace(Predicate avoider) { public boolean shouldAvoidBreaking(int x, int y, int z) { return shouldAvoidBreaking(new BlockPos(x, y, z)); } - public boolean shouldAvoidBreaking(BlockPos pos) { synchronized (breakMutex) { if (_blocksToAvoidBreaking.contains(pos)) @@ -96,13 +109,11 @@ public boolean shouldAvoidBreaking(BlockPos pos) { return (_breakAvoiders.stream().anyMatch(pred -> pred.test(pos))); } } - public boolean shouldAvoidPlacingAt(BlockPos pos) { synchronized (placeMutex) { return _placeAvoiders.stream().anyMatch(pred -> pred.test(pos)); } } - public boolean shouldAvoidPlacingAt(int x, int y, int z) { return shouldAvoidPlacingAt(new BlockPos(x, y, z)); } @@ -118,7 +129,6 @@ public boolean shouldAvoidWalkThroughForce(BlockPos pos) { return _forceAvoidWalkThrough.stream().anyMatch(pred -> pred.test(pos)); } } - public boolean shouldAvoidWalkThroughForce(int x, int y, int z) { return shouldAvoidWalkThroughForce(new BlockPos(x, y, z)); } @@ -146,13 +156,6 @@ public boolean isInteractionPaused() { return _pauseInteractions; } } - - public void setInteractionPaused(boolean paused) { - synchronized (propertiesMutex) { - _pauseInteractions = paused; - } - } - public boolean isFlowingWaterPassAllowed() { synchronized (propertiesMutex) { return _allowFlowingWaterPass; @@ -165,6 +168,12 @@ public boolean canSwimThroughLava() { } } + public void setInteractionPaused(boolean paused) { + synchronized (propertiesMutex) { + _pauseInteractions = paused; + } + } + public void setFlowingWaterPass(boolean pass) { synchronized (propertiesMutex) { _allowFlowingWaterPass = pass; @@ -193,19 +202,15 @@ public double applyGlobalHeuristic(double prev, int x, int y, int z) { public HashSet getBlocksToAvoidBreaking() { return _blocksToAvoidBreaking; } - public List> getBreakAvoiders() { return _breakAvoiders; } - public List> getPlaceAvoiders() { return _placeAvoiders; } - public List> getForceWalkOnPredicates() { return _forceCanWalkOn; } - public List> getForceAvoidWalkThroughPredicates() { return _forceAvoidWalkThrough; } @@ -221,11 +226,9 @@ public List> getGlobalHeuristics() { public boolean isItemProtected(Item item) { return _protectedItems.contains(item); } - public HashSet getProtectedItems() { return _protectedItems; } - public void protectItem(Item item) { _protectedItems.add(item); } diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 6b9825897..bd61150dd 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -20,7 +20,6 @@ import baritone.Baritone; import baritone.altoclef.AltoClefSettings; import baritone.api.event.events.TickEvent; -import baritone.api.utils.input.Input; import baritone.utils.ToolSet; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.Direction; @@ -59,15 +58,12 @@ public void onTick(TickEvent event) { // we have a crafting table or a chest or something open return; } - // Only perform the inventory swap if we're pathing/mining. Otherwise, this will run every frame. - if (baritone.getPathingBehavior().isPathing() || baritone.getInputOverrideHandler().isInputForcedDown(Input.CLICK_LEFT)) { - if (firstValidThrowaway() >= 9) { // aka there are none on the hotbar, but there are some in main inventory - swapWithHotBar(firstValidThrowaway(), 8); - } - int pick = bestToolAgainst(Blocks.STONE, PickaxeItem.class); - if (pick >= 9) { - swapWithHotBar(pick, 0); - } + if (firstValidThrowaway() >= 9) { // aka there are none on the hotbar, but there are some in main inventory + swapWithHotBar(firstValidThrowaway(), 8); + } + int pick = bestToolAgainst(Blocks.STONE, PickaxeItem.class); + if (pick >= 9) { + swapWithHotBar(pick, 0); } } @@ -109,12 +105,11 @@ private int firstValidThrowaway() { // TODO offhand idk NonNullList invy = ctx.player().getInventory().items; for (int i = 0; i < invy.size(); i++) { Item item = invy.get(i).getItem(); - if (Baritone.settings().acceptableThrowawayItems.value.contains(item)) { + if (Baritone.settings().acceptableThrowawayItems.value.contains(invy.get(i).getItem())) { if (!AltoClefSettings.getInstance().isItemProtected(item)) { return i; } } - } return -1; } @@ -155,7 +150,6 @@ public boolean hasGenericThrowaway() { public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { if (AltoClefSettings.getInstance().isInteractionPaused()) return false; if (AltoClefSettings.getInstance().shouldAvoidPlacingAt(x, y, z)) return false; - BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { }))))) { diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index af273f2bd..f18bd862b 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -46,42 +46,38 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, Helper { - private final Object pathCalcLock = new Object(); - private final Object pathPlanLock = new Object(); - private final LinkedBlockingQueue toDispatch = new LinkedBlockingQueue<>(); private PathExecutor current; private PathExecutor next; + private Goal goal; private CalculationContext context; + /*eta*/ private int ticksElapsedSoFar; private BetterBlockPos startPosition; + private boolean safeToCancel; private boolean pauseRequestedLastTick; private boolean unpausedLastTick; private boolean pausedThisTick; private boolean cancelRequested; private boolean calcFailedLastTick; + private volatile AbstractNodeCostSearch inProgress; + private final Object pathCalcLock = new Object(); + + private final Object pathPlanLock = new Object(); + private boolean lastAutoJump; + private BetterBlockPos expectedSegmentStart; + private final LinkedBlockingQueue toDispatch = new LinkedBlockingQueue<>(); + public PathingBehavior(Baritone baritone) { super(baritone); } - private static AbstractNodeCostSearch createPathfinder(BlockPos start, Goal goal, IPath previous, CalculationContext context) { - Goal transformed = goal; - if (Baritone.settings().simplifyUnloadedYCoord.value && goal instanceof IGoalRenderPos) { - BlockPos pos = ((IGoalRenderPos) goal).getGoalPos(); - if (!context.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ())) { - transformed = new GoalXZ(pos.getX(), pos.getZ()); - } - } - Favoring favoring = new Favoring(context.getBaritone().getPlayerContext(), previous, context); - return new AStarPathFinder(start.getX(), start.getY(), start.getZ(), transformed, favoring, context); - } - private void queuePathEvent(PathEvent event) { toDispatch.add(event); } @@ -553,6 +549,18 @@ private void findPathInNewThread(final BlockPos start, final boolean talkAboutIt }); } + private static AbstractNodeCostSearch createPathfinder(BlockPos start, Goal goal, IPath previous, CalculationContext context) { + Goal transformed = goal; + if (Baritone.settings().simplifyUnloadedYCoord.value && goal instanceof IGoalRenderPos) { + BlockPos pos = ((IGoalRenderPos) goal).getGoalPos(); + if (!context.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ())) { + transformed = new GoalXZ(pos.getX(), pos.getZ()); + } + } + Favoring favoring = new Favoring(context.getBaritone().getPlayerContext(), previous, context); + return new AStarPathFinder(start.getX(), start.getY(), start.getZ(), transformed, favoring, context); + } + @Override public void onRenderPass(RenderEvent event) { PathRenderer.render(event, this); diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 2a48cf749..3109d9293 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -133,21 +133,27 @@ public final class CachedChunk { * The chunk z coordinate */ public final int z; - public final long cacheTimestamp; + /** * The actual raw data of this packed chunk. *

* Each block is expressed as 2 bits giving a total of 16 KiB */ private final BitSet data; + private final Int2ObjectOpenHashMap special; + /** * The block names of each surface level block for generating an overview */ private final BlockState[] overview; + private final int[] heightMap; + private final Map> specialBlockLocations; + public final long cacheTimestamp; + CachedChunk(int x, int z, int height, BitSet data, BlockState[] overview, Map> specialBlockLocations, long cacheTimestamp) { this.size = size(height); this.sizeInBytes = sizeInBytes(size); @@ -178,18 +184,6 @@ public static int sizeInBytes(int size) { return size / 8; } - /** - * Returns the raw bit index of the specified position - * - * @param x The x position - * @param y The y position - * @param z The z position - * @return The bit index - */ - public static int getPositionIndex(int x, int y, int z) { - return (x << 1) | (z << 5) | (y << 9); - } - private final void setSpecial() { for (Map.Entry> entry : specialBlockLocations.entrySet()) { for (BlockPos pos : entry.getValue()) { @@ -280,6 +274,18 @@ public final byte[] toByteArray() { return this.data.toByteArray(); } + /** + * Returns the raw bit index of the specified position + * + * @param x The x position + * @param y The y position + * @param z The z position + * @return The bit index + */ + public static int getPositionIndex(int x, int y, int z) { + return (x << 1) | (z << 5) | (y << 9); + } + /** * Validates the size of an input {@link BitSet} containing the raw * packed chunk data. Sizes that exceed {@link CachedChunk#size} are diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index a13f43b39..6c70f1eba 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -75,10 +75,6 @@ public final class CachedRegion implements ICachedRegion { this.dimension = dimension; } - private static Path getRegionFile(Path cacheDir, int regionX, int regionZ) { - return Paths.get(cacheDir.toString(), "r." + regionX + "." + regionZ + ".bcr"); - } - @Override public final BlockState getBlock(int x, int y, int z) { int adjY = y - dimension.minY(); @@ -115,6 +111,7 @@ public final synchronized void updateCachedChunk(int chunkX, int chunkZ, CachedC hasUnsavedChanges = true; } + public synchronized final void save(String directory) { if (!hasUnsavedChanges) { return; @@ -357,4 +354,8 @@ public final int getX() { public final int getZ() { return this.z; } + + private static Path getRegionFile(Path cacheDir, int regionX, int regionZ) { + return Paths.get(cacheDir.toString(), "r." + regionX + "." + regionZ + ".bcr"); + } } diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 8728106b7..2384d1c58 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -49,25 +49,30 @@ public final class CachedWorld implements ICachedWorld, Helper { * The maximum number of regions in any direction from (0,0) */ private static final int REGION_MAX = 30_000_000 / 512 + 1; + + /** + * A map of all of the cached regions. + */ + private Long2ObjectMap cachedRegions = new Long2ObjectOpenHashMap<>(); + /** * The directory that the cached region files are saved to */ private final String directory; + /** * Queue of positions to pack. Refers to the toPackMap, in that every element of this queue will be a * key in that map. */ private final LinkedBlockingQueue toPackQueue = new LinkedBlockingQueue<>(); + /** * All chunk positions pending packing. This map will be updated in-place if a new update to the chunk occurs * while waiting in the queue for the packer thread to get to it. */ private final Map toPackMap = new ConcurrentHashMap<>(); + private final DimensionType dimension; - /** - * A map of all of the cached regions. - */ - private Long2ObjectMap cachedRegions = new Long2ObjectOpenHashMap<>(); CachedWorld(Path directory, DimensionType dimension) { if (!Files.exists(directory)) { diff --git a/src/main/java/baritone/cache/WorldData.java b/src/main/java/baritone/cache/WorldData.java index ddf98b4ce..b8efb5e1c 100644 --- a/src/main/java/baritone/cache/WorldData.java +++ b/src/main/java/baritone/cache/WorldData.java @@ -33,10 +33,10 @@ public class WorldData implements IWorldData { public final CachedWorld cache; + private final WaypointCollection waypoints; //public final MapData map; public final Path directory; public final DimensionType dimension; - private final WaypointCollection waypoints; WorldData(Path directory, DimensionType dimension) { this.directory = directory; diff --git a/src/main/java/baritone/command/argparser/DefaultArgParsers.java b/src/main/java/baritone/command/argparser/DefaultArgParsers.java index 4f9730e33..77a14bf92 100644 --- a/src/main/java/baritone/command/argparser/DefaultArgParsers.java +++ b/src/main/java/baritone/command/argparser/DefaultArgParsers.java @@ -26,14 +26,6 @@ public class DefaultArgParsers { - public static final List> ALL = Arrays.asList( - IntArgumentParser.INSTANCE, - LongArgumentParser.INSTANCE, - FloatArgumentParser.INSTANCE, - DoubleArgumentParser.INSTANCE, - BooleanArgumentParser.INSTANCE - ); - public enum IntArgumentParser implements IArgParser.Stateless { INSTANCE; @@ -121,4 +113,12 @@ public Boolean parseArg(ICommandArgument arg) throws RuntimeException { } } } + + public static final List> ALL = Arrays.asList( + IntArgumentParser.INSTANCE, + LongArgumentParser.INSTANCE, + FloatArgumentParser.INSTANCE, + DoubleArgumentParser.INSTANCE, + BooleanArgumentParser.INSTANCE + ); } diff --git a/src/main/java/baritone/command/argument/CommandArguments.java b/src/main/java/baritone/command/argument/CommandArguments.java index 4dab6a6d5..d10fbc807 100644 --- a/src/main/java/baritone/command/argument/CommandArguments.java +++ b/src/main/java/baritone/command/argument/CommandArguments.java @@ -30,11 +30,11 @@ */ public final class CommandArguments { - private static final Pattern ARG_PATTERN = Pattern.compile("\\S+"); - private CommandArguments() { } + private static final Pattern ARG_PATTERN = Pattern.compile("\\S+"); + /** * Turn a string into a list of {@link ICommandArgument}s. This is needed because of {@link ICommandArgument#getRawRest()} * diff --git a/src/main/java/baritone/command/defaults/CommandAlias.java b/src/main/java/baritone/command/defaults/CommandAlias.java index f55879d0a..71c322fe3 100644 --- a/src/main/java/baritone/command/defaults/CommandAlias.java +++ b/src/main/java/baritone/command/defaults/CommandAlias.java @@ -27,8 +27,8 @@ public class CommandAlias extends Command { - public final String target; private final String shortDesc; + public final String target; public CommandAlias(IBaritone baritone, List names, String shortDesc, String target) { super(baritone, names.toArray(new String[0])); diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index bc8fe5b91..212498240 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -368,6 +368,10 @@ enum TransformTarget { this.names = names; } + public ISelection[] transform(ISelection[] selections) { + return transform.apply(selections); + } + public static TransformTarget getByName(String name) { for (TransformTarget target : TransformTarget.values()) { for (String alias : target.names) { @@ -386,9 +390,5 @@ public static String[] getAllNames() { } return names.toArray(new String[0]); } - - public ISelection[] transform(ISelection[] selections) { - return transform.apply(selections); - } } } diff --git a/src/main/java/baritone/command/manager/CommandManager.java b/src/main/java/baritone/command/manager/CommandManager.java index 1313ac060..4c33226d3 100644 --- a/src/main/java/baritone/command/manager/CommandManager.java +++ b/src/main/java/baritone/command/manager/CommandManager.java @@ -52,16 +52,6 @@ public CommandManager(Baritone baritone) { DefaultCommands.createAll(baritone).forEach(this.registry::register); } - private static Tuple> expand(String string, boolean preserveEmptyLast) { - String label = string.split("\\s", 2)[0]; - List args = CommandArguments.from(string.substring(label.length()), preserveEmptyLast); - return new Tuple<>(label, args); - } - - public static Tuple> expand(String string) { - return expand(string, false); - } - @Override public IBaritone getBaritone() { return this.baritone; @@ -125,6 +115,16 @@ private ExecutionWrapper from(Tuple> expanded) { return command == null ? null : new ExecutionWrapper(command, label, args); } + private static Tuple> expand(String string, boolean preserveEmptyLast) { + String label = string.split("\\s", 2)[0]; + List args = CommandArguments.from(string.substring(label.length()), preserveEmptyLast); + return new Tuple<>(label, args); + } + + public static Tuple> expand(String string) { + return expand(string, false); + } + private static final class ExecutionWrapper { private ICommand command; diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index 14c04096b..b0ff57020 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -36,6 +36,22 @@ */ public abstract class AbstractNodeCostSearch implements IPathFinder, Helper { + protected final int startX; + protected final int startY; + protected final int startZ; + + protected final Goal goal; + protected final PathNode[] bestSoFar = new PathNode[COEFFICIENTS.length]; + private final CalculationContext context; + /** + * @see Issue #107 + */ + private final Long2ObjectOpenHashMap map; + protected PathNode startNode; + protected PathNode mostRecentConsidered; + protected boolean cancelRequested; + private volatile boolean isFinished; + /** * This is really complicated and hard to explain. I wrote a comment in the old version of MineBot but it was so * long it was easier as a Google Doc (because I could insert charts). @@ -43,10 +59,12 @@ public abstract class AbstractNodeCostSearch implements IPathFinder, Helper { * @see here */ protected static final double[] COEFFICIENTS = {1.5, 2, 2.5, 3, 4, 5, 10}; + /** * If a path goes less than 5 blocks and doesn't make it to its goal, it's not worth considering. */ protected static final double MIN_DIST_PATH = 5; + /** * there are floating point errors caused by random combinations of traverse and diagonal over a flat area * that means that sometimes there's a cost improvement of like 10 ^ -16 @@ -55,20 +73,6 @@ public abstract class AbstractNodeCostSearch implements IPathFinder, Helper { * who cares about a hundredth of a tick? that's half a millisecond for crying out loud! */ protected static final double MIN_IMPROVEMENT = 0.01; - protected final int startX; - protected final int startY; - protected final int startZ; - protected final Goal goal; - protected final PathNode[] bestSoFar = new PathNode[COEFFICIENTS.length]; - private final CalculationContext context; - /** - * @see Issue #107 - */ - private final Long2ObjectOpenHashMap map; - protected PathNode startNode; - protected PathNode mostRecentConsidered; - protected boolean cancelRequested; - private volatile boolean isFinished; AbstractNodeCostSearch(int startX, int startY, int startZ, Goal goal, CalculationContext context) { this.startX = startX; diff --git a/src/main/java/baritone/pathing/calc/PathNode.java b/src/main/java/baritone/pathing/calc/PathNode.java index 2b693338a..e68549f42 100644 --- a/src/main/java/baritone/pathing/calc/PathNode.java +++ b/src/main/java/baritone/pathing/calc/PathNode.java @@ -17,6 +17,7 @@ package baritone.pathing.calc; +import baritone.altoclef.AltoClefSettings; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.movement.ActionCosts; import baritone.api.utils.BetterBlockPos; @@ -66,7 +67,11 @@ public final class PathNode { public PathNode(int x, int y, int z, Goal goal) { this.previous = null; this.cost = ActionCosts.COST_INF; - this.estimatedCostToGoal = goal.heuristic(x, y, z); + double originalCost = goal.heuristic(x, y, z); + if (Double.isNaN(originalCost)) { + throw new IllegalStateException(goal + " calculated implausible heuristic"); + } + this.estimatedCostToGoal = AltoClefSettings.getInstance().applyGlobalHeuristic(originalCost, x, y, z); if (Double.isNaN(estimatedCostToGoal)) { throw new IllegalStateException(goal + " calculated implausible heuristic"); } diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 8bf16d102..c85a6f282 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -18,6 +18,7 @@ package baritone.pathing.movement; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.IBaritone; import baritone.api.pathing.movement.ActionCosts; import baritone.cache.WorldData; @@ -88,11 +89,11 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.worldData = (WorldData) baritone.getWorldProvider().getCurrentWorld(); this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); this.toolSet = new ToolSet(player); - this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); + this.hasThrowaway = !AltoClefSettings.getInstance().isInteractionPaused() && Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && Inventory.isHotbarSlot(player.getInventory().findSlotMatchingItem(STACK_BUCKET_WATER)) && world.dimension() != Level.NETHER; this.canSprint = Baritone.settings().allowSprint.value && player.getFoodData().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; - this.allowBreak = Baritone.settings().allowBreak.value; + this.allowBreak = !AltoClefSettings.getInstance().isInteractionPaused() && Baritone.settings().allowBreak.value; this.allowBreakAnyway = new ArrayList<>(Baritone.settings().allowBreakAnyway.value); this.allowParkour = Baritone.settings().allowParkour.value; this.allowParkourPlace = Baritone.settings().allowParkourPlace.value; @@ -150,6 +151,9 @@ public double costOfPlacingAt(int x, int y, int z, BlockState current) { if (!worldBorder.canPlaceAt(x, z)) { return COST_INF; } + if (AltoClefSettings.getInstance().shouldAvoidPlacingAt(x, y, z)) { + return COST_INF; + } return placeBlockCost; } @@ -160,6 +164,9 @@ public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { if (isPossiblyProtected(x, y, z)) { return COST_INF; } + if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z))) { + return COST_INF; + } return 1; } diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 570cdea68..f671d359f 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -38,21 +38,29 @@ public abstract class Movement implements IMovement, MovementHelper { protected final IBaritone baritone; protected final IPlayerContext ctx; + + private MovementState currentState = new MovementState().setStatus(MovementStatus.PREPPING); + protected final BetterBlockPos src; + protected final BetterBlockPos dest; + /** * The positions that need to be broken before this movement can ensue */ protected final BetterBlockPos[] positionsToBreak; + /** * The position where we need to place a block before this movement can ensue */ protected final BetterBlockPos positionToPlace; + + private Double cost; + public List toBreakCached = null; public List toPlaceCached = null; public List toWalkIntoCached = null; - private MovementState currentState = new MovementState().setStatus(MovementStatus.PREPPING); - private Double cost; + private Set validPositionsCached = null; private Boolean calculatedWhileLoaded; diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 7a6078b9e..01802d4d6 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -18,6 +18,7 @@ package baritone.pathing.movement; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.pathing.movement.ActionCosts; @@ -54,6 +55,7 @@ public interface MovementHelper extends ActionCosts, Helper { static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z))) return true; if (!bsi.worldBorder.canPlaceAt(x, y)) { return true; } @@ -101,9 +103,16 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { return false; } + if (AltoClefSettings.getInstance().canSwimThroughLava() && block == Blocks.LAVA) { + BlockState up = bsi.get0(x, y + 1, z); + return up.getFluidState().isEmpty(); + } if (block == Blocks.BIG_DRIPLEAF) { return false; } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(x, y, z)) { + return false; + } if (block == Blocks.POWDER_SNOW) { return false; } @@ -204,6 +213,9 @@ static boolean fullyPassable(BlockGetter access, BlockPos pos, BlockState state) || block instanceof ShulkerBoxBlock) { return false; } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(pos)) { + return false; + } // door, fence gate, liquid, trapdoor have been accounted for, nothing else uses the world or pos parameters return state.isPathfindable(access, pos, PathComputationType.LAND); } @@ -314,6 +326,8 @@ static boolean avoidWalkingInto(BlockState state) { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); + if (AltoClefSettings.getInstance().canWalkOnForce(x, y, z)) return true; + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(x, y + 1, z)) return false; if (block instanceof AirBlock || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN || block == Blocks.HONEY_BLOCK) { // early return for most common case (air) // plus magma, which is a normal cube but it hurts you @@ -394,6 +408,7 @@ static boolean canPlaceAgainst(IPlayerContext ctx, BlockPos pos) { } static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + if (AltoClefSettings.getInstance().shouldAvoidPlacingAt(x, y, z)) return false; if (!bsi.worldBorder.canPlaceAt(x, z)) { return false; } @@ -424,6 +439,9 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i if (strVsBlock <= 0) { return COST_INF; } + if (AltoClefSettings.getInstance().shouldAvoidBreaking(x, y, z)) { + return COST_INF; + } double result = 1 / strVsBlock; result += context.breakBlockAdditionalCost; result *= mult; @@ -461,6 +479,7 @@ static void switchToBestToolFor(IPlayerContext ctx, BlockState b) { * @param ts previously calculated ToolSet */ static void switchToBestToolFor(IPlayerContext ctx, BlockState b, ToolSet ts, boolean preferSilkTouch) { + if (AltoClefSettings.getInstance().isInteractionPaused()) return; if (Baritone.settings().autoTool.value && !Baritone.settings().assumeExternalAutoTool.value) { ctx.player().getInventory().selected = ts.getBestSlot(b.getBlock(), preferSilkTouch); } @@ -484,7 +503,10 @@ static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { */ static boolean isWater(BlockState state) { Fluid f = state.getFluidState().getType(); - return f == Fluids.WATER || f == Fluids.FLOWING_WATER; + if (f == Fluids.WATER || f == Fluids.FLOWING_WATER) { + return true; + } + return (f == Fluids.LAVA || f == Fluids.FLOWING_LAVA) && AltoClefSettings.getInstance().canSwimThroughLava(); } /** diff --git a/src/main/java/baritone/pathing/movement/MovementState.java b/src/main/java/baritone/pathing/movement/MovementState.java index 6cb042876..73539698a 100644 --- a/src/main/java/baritone/pathing/movement/MovementState.java +++ b/src/main/java/baritone/pathing/movement/MovementState.java @@ -27,19 +27,19 @@ public class MovementState { - private final Map inputState = new HashMap<>(); private MovementStatus status; private MovementTarget target = new MovementTarget(); - - public MovementStatus getStatus() { - return status; - } + private final Map inputState = new HashMap<>(); public MovementState setStatus(MovementStatus status) { this.status = status; return this; } + public MovementStatus getStatus() { + return status; + } + public MovementTarget getTarget() { return this.target; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index a7c91dd4e..016b1d31c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -43,6 +43,28 @@ public MovementAscend(IBaritone baritone, BetterBlockPos src, BetterBlockPos des super(baritone, src, dest, new BetterBlockPos[]{dest, src.above(2), dest.above()}, dest.below()); } + @Override + public void reset() { + super.reset(); + ticksWithoutPlacement = 0; + } + + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z, dest.x, dest.z); + } + + @Override + protected Set calculateValidPositions() { + BetterBlockPos prior = new BetterBlockPos(src.subtract(getDirection()).above()); // sometimes we back up to place the block, also sprint ascends, also skip descend to straight ascend + return ImmutableSet.of(src, + src.above(), + dest, + prior, + prior.above() + ); + } + public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { BlockState toPlace = context.get(destX, y, destZ); double additionalPlacementCost = 0; @@ -133,28 +155,6 @@ public static double cost(CalculationContext context, int x, int y, int z, int d return totalCost; } - @Override - public void reset() { - super.reset(); - ticksWithoutPlacement = 0; - } - - @Override - public double calculateCost(CalculationContext context) { - return cost(context, src.x, src.y, src.z, dest.x, dest.z); - } - - @Override - protected Set calculateValidPositions() { - BetterBlockPos prior = new BetterBlockPos(src.subtract(getDirection()).above()); // sometimes we back up to place the block, also sprint ascends, also skip descend to straight ascend - return ImmutableSet.of(src, - src.above(), - dest, - prior, - prior.above() - ); - } - @Override public MovementState updateState(MovementState state) { if (ctx.playerFeet().y < src.y) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 1facef310..e0efd8601 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -17,6 +17,7 @@ package baritone.pathing.movement.movements; +import baritone.altoclef.AltoClefSettings; import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.BetterBlockPos; @@ -256,9 +257,13 @@ public boolean safeMode() { return true; } for (int y = 0; y <= 2; y++) { // we could hit any of the three blocks + BlockPos p = into.above(y); if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, into.above(y)))) { return true; } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(p)) { + return true; + } } return false; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 2cc126fb5..3637ca7ff 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -57,6 +57,58 @@ private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPo super(baritone, start, end, new BetterBlockPos[]{dir1, dir1.above(), dir2, dir2.above(), end, end.above()}); } + @Override + protected boolean safeToCancel(MovementState state) { + //too simple. backfill does not work after cornering with this + //return MovementHelper.canWalkOn(ctx, ctx.playerFeet().down()); + LocalPlayer player = ctx.player(); + double offset = 0.25; + double x = player.position().x; + double y = player.position().y - 1; + double z = player.position().z; + //standard + if (ctx.playerFeet().equals(src)) { + return true; + } + //both corners are walkable + if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) + && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { + return true; + } + //we are in a likely unwalkable corner, check for a supporting block + if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) + || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { + return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); + } + return true; + } + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is incorrect + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); + BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); + if (dest.y < src.y) { + return ImmutableSet.of(src, dest.above(), diagA, diagB, dest, diagA.below(), diagB.below()); + } + if (dest.y > src.y) { + return ImmutableSet.of(src, src.above(), diagA, diagB, dest, diagA.above(), diagB.above()); + } + return ImmutableSet.of(src, dest, diagA, diagB); + } + public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { if (!MovementHelper.canWalkThrough(context.bsi, destX, y + 1, destZ)) { return; @@ -192,58 +244,6 @@ public static void cost(CalculationContext context, int x, int y, int z, int des res.z = destZ; } - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is incorrect - } - return result.cost; - } - - @Override - protected boolean safeToCancel(MovementState state) { - //too simple. backfill does not work after cornering with this - //return MovementHelper.canWalkOn(ctx, ctx.playerFeet().down()); - LocalPlayer player = ctx.player(); - double offset = 0.25; - double x = player.position().x; - double y = player.position().y - 1; - double z = player.position().z; - //standard - if (ctx.playerFeet().equals(src)) { - return true; - } - //both corners are walkable - if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) - && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { - return true; - } - //we are in a likely unwalkable corner, check for a supporting block - if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) - || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { - return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); - } - return true; - } - - @Override - protected Set calculateValidPositions() { - BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); - BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); - if (dest.y < src.y) { - return ImmutableSet.of(src, dest.above(), diagA, diagB, dest, diagA.below(), diagB.below()); - } - if (dest.y > src.y) { - return ImmutableSet.of(src, src.above(), diagA, diagB, dest, diagA.above(), diagB.above()); - } - return ImmutableSet.of(src, dest, diagA, diagB); - } - @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index fbdab1330..45d18d1c7 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -39,6 +39,22 @@ public MovementDownward(IBaritone baritone, BetterBlockPos start, BetterBlockPos super(baritone, start, end, new BetterBlockPos[]{end}); } + @Override + public void reset() { + super.reset(); + numTicks = 0; + } + + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z); + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest); + } + public static double cost(CalculationContext context, int x, int y, int z) { if (!context.allowDownward) { return COST_INF; @@ -56,22 +72,6 @@ public static double cost(CalculationContext context, int x, int y, int z) { } } - @Override - public void reset() { - super.reset(); - numTicks = 0; - } - - @Override - public double calculateCost(CalculationContext context) { - return cost(context, src.x, src.y, src.z); - } - - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest); - } - @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 7bb8a535c..8a3c96991 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -17,6 +17,7 @@ package baritone.pathing.movement.movements; +import baritone.altoclef.AltoClefSettings; import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.BetterBlockPos; @@ -108,7 +109,8 @@ public MovementState updateState(MovementState state) { BlockState destState = ctx.world().getBlockState(dest); Block destBlock = destState.getBlock(); boolean isWater = destState.getFluidState().getType() instanceof WaterFluid; - if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { + if (!isWater && willPlaceBucket() && !playerFeet.equals(dest) && + !AltoClefSettings.getInstance().shouldNotPlaceBucketButStillFall()) { if (!Inventory.isHotbarSlot(ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_WATER)) || ctx.world().dimension() == Level.NETHER) { return state.setStatus(MovementStatus.UNREACHABLE); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 8a2408b33..6e6a41351 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -45,6 +45,16 @@ public MovementPillar(IBaritone baritone, BetterBlockPos start, BetterBlockPos e super(baritone, start, end, new BetterBlockPos[]{start.above(2)}, start); } + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z); + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest); + } + public static double cost(CalculationContext context, int x, int y, int z) { BlockState fromState = context.get(x, y, z); Block from = fromState.getBlock(); @@ -147,16 +157,6 @@ public static BlockPos getAgainst(CalculationContext context, BetterBlockPos vin return null; } - @Override - public double calculateCost(CalculationContext context) { - return cost(context, src.x, src.y, src.z); - } - - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest); - } - @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 437dae57a..a867efef5 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -18,6 +18,7 @@ package baritone.pathing.movement.movements; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.BetterBlockPos; @@ -175,6 +176,9 @@ public MovementState updateState(MovementState state) { if (MovementHelper.avoidWalkingInto(pb1)) { return state; } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(positionsToBreak[0]) || AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(positionsToBreak[1])) { + return state; + } // and we aren't already pressed up against the block double dist = Math.max(Math.abs(ctx.player().position().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().position().z - (dest.getZ() + 0.5D))); if (dist < 0.83) { @@ -254,6 +258,8 @@ public MovementState updateState(MovementState state) { BlockPos into = dest.subtract(src).offset(dest); BlockState intoBelow = BlockStateInterface.get(ctx, into); BlockState intoAbove = BlockStateInterface.get(ctx, into.above()); + boolean avoidBelow = MovementHelper.avoidWalkingInto(intoBelow) || AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(into); + boolean avoidAbove = MovementHelper.avoidWalkingInto(intoAbove) || AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(into.above()); if (wasTheBridgeBlockAlwaysThere && (!MovementHelper.isLiquid(ctx, feet) || Baritone.settings().sprintInWater.value) && (!MovementHelper.avoidWalkingInto(intoBelow) || MovementHelper.isWater(intoBelow)) && !MovementHelper.avoidWalkingInto(intoAbove)) { state.setInput(Input.SPRINT, true); } @@ -272,7 +278,7 @@ public MovementState updateState(MovementState state) { } else { wasTheBridgeBlockAlwaysThere = false; Block standingOn = BlockStateInterface.get(ctx, feet.below()).getBlock(); - if (standingOn.equals(Blocks.SOUL_SAND) || standingOn instanceof SlabBlock) { // see issue #118 + if ((standingOn.equals(Blocks.SOUL_SAND) && !AltoClefSettings.getInstance().shouldTreatSoulSandAsOrdinaryBlock()) || standingOn instanceof SlabBlock) { // see issue #118 double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().position().x), Math.abs(dest.getZ() + 0.5 - ctx.player().position().z)); if (dist < 0.85) { // 0.5 + 0.3 + epsilon MovementHelper.moveTowards(ctx, state, dest); diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 4e526441a..c7d54e2bb 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -18,6 +18,7 @@ package baritone.pathing.path; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.pathing.calc.IPath; import baritone.api.pathing.movement.ActionCosts; import baritone.api.pathing.movement.IMovement; @@ -132,6 +133,10 @@ private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse cur if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().above(3)))) { return false; } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(3)) || + AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(2))) { + return false; + } return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().above(2))); // codacy smh my head } diff --git a/src/main/java/baritone/pathing/path/SplicedPath.java b/src/main/java/baritone/pathing/path/SplicedPath.java index 1cffad87d..1ba497d81 100644 --- a/src/main/java/baritone/pathing/path/SplicedPath.java +++ b/src/main/java/baritone/pathing/path/SplicedPath.java @@ -43,6 +43,31 @@ private SplicedPath(List path, List movements, int nu sanityCheck(); } + @Override + public Goal getGoal() { + return goal; + } + + @Override + public List movements() { + return Collections.unmodifiableList(movements); + } + + @Override + public List positions() { + return Collections.unmodifiableList(path); + } + + @Override + public int getNumNodesConsidered() { + return numNodes; + } + + @Override + public int length() { + return path.size(); + } + public static Optional trySplice(IPath first, IPath second, boolean allowOverlapCutoff) { if (second == null || first == null) { return Optional.empty(); @@ -78,29 +103,4 @@ public static Optional trySplice(IPath first, IPath second, boolean movements.addAll(second.movements().subList(positionInSecond, second.length() - 1)); return Optional.of(new SplicedPath(positions, movements, first.getNumNodesConsidered() + second.getNumNodesConsidered(), first.getGoal())); } - - @Override - public Goal getGoal() { - return goal; - } - - @Override - public List movements() { - return Collections.unmodifiableList(movements); - } - - @Override - public List positions() { - return Collections.unmodifiableList(path); - } - - @Override - public int getNumNodesConsidered() { - return numNodes; - } - - @Override - public int length() { - return path.size(); - } } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 4ece155a4..72ff8a1ff 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -89,6 +89,12 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private boolean paused; private int layer; private int numRepeats; + private List approxPlaceable; + private Map missing; + private boolean active; + private Stack stateStack = new Stack<>(); + private Vec3i schemSize; + private boolean fromAltoclefFinished; public static final Set> orientationProps = ImmutableSet.of( RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, @@ -114,39 +120,11 @@ private > String getName(Property property, Comparabl return property.getName((T) comparable); } }; - private List approxPlaceable; - private Map missing; - private boolean active; - private Stack stateStack = new Stack<>(); - private Vec3i schemSize; - private boolean fromAltoclefFinished; public BuilderProcess(Baritone baritone) { super(baritone); } - private boolean fromAltoclef; - private Map sbtMissing; - private Map blockBreakHistory = new HashMap<>(); - - private static Vec3[] aabbSideMultipliers(Direction side) { - switch (side) { - case UP: - return new Vec3[]{new Vec3(0.5, 1, 0.5), new Vec3(0.1, 1, 0.5), new Vec3(0.9, 1, 0.5), new Vec3(0.5, 1, 0.1), new Vec3(0.5, 1, 0.9)}; - case DOWN: - return new Vec3[]{new Vec3(0.5, 0, 0.5), new Vec3(0.1, 0, 0.5), new Vec3(0.9, 0, 0.5), new Vec3(0.5, 0, 0.1), new Vec3(0.5, 0, 0.9)}; - case NORTH: - case SOUTH: - case EAST: - case WEST: - double x = side.getStepX() == 0 ? 0.5 : (1 + side.getStepX()) / 2D; - double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D; - return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)}; - default: // null - throw new IllegalStateException(); - } - } - @Override public void build(String name, ISchematic schematic, Vec3i origin) { //Shouldn't get initially called @@ -239,15 +217,6 @@ private void pushState() { stateStack.push(this.fromAltoclef); } - public void pause() { - paused = true; - } - - @Override - public boolean isPaused() { - return paused; - } - @Override public void popStack() { if (this.stateStack.isEmpty()) { @@ -279,6 +248,40 @@ public void popStack() { } } + private boolean fromAltoclef; + private Map sbtMissing; + private Map blockBreakHistory = new HashMap<>(); + + private static Vec3[] aabbSideMultipliers(Direction side) { + switch (side) { + case UP: + return new Vec3[]{new Vec3(0.5, 1, 0.5), new Vec3(0.1, 1, 0.5), new Vec3(0.9, 1, 0.5), new Vec3(0.5, 1, 0.1), new Vec3(0.5, 1, 0.9)}; + case DOWN: + return new Vec3[]{new Vec3(0.5, 0, 0.5), new Vec3(0.1, 0, 0.5), new Vec3(0.9, 0, 0.5), new Vec3(0.5, 0, 0.1), new Vec3(0.5, 0, 0.9)}; + case NORTH: + case SOUTH: + case EAST: + case WEST: + double x = side.getStepX() == 0 ? 0.5 : (1 + side.getStepX()) / 2D; + double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D; + return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)}; + default: // null + throw new IllegalStateException(); + } + } + + @Override + public boolean clearState() { + final boolean isEmpty = !stateStack.isEmpty(); + stateStack.clear(); + return isEmpty; + } + + @Override + public boolean isFromAltoclefFinished() { + return this.fromAltoclefFinished; + } + @Override public boolean build(String name, File schematic, Vec3i origin) { Optional format = SchematicSystem.INSTANCE.getByFile(schematic); @@ -307,16 +310,17 @@ public boolean build(String name, File schematic, Vec3i origin) { return true; } - @Override - public boolean clearState() { - final boolean isEmpty = !stateStack.isEmpty(); - stateStack.clear(); - return isEmpty; + public void resume() { + if (!this.stateStack.isEmpty()) { + popStack(); + } + + this.paused = false; + this.active = true; } - @Override - public boolean isFromAltoclefFinished() { - return this.fromAltoclefFinished; + public void pause() { + paused = true; } @Override @@ -351,33 +355,6 @@ public void clearArea(BlockPos corner1, BlockPos corner2) { build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.defaultBlockState()), origin); } - public void resume() { - if (!this.stateStack.isEmpty()) { - popStack(); - } - - this.paused = false; - this.active = true; - } - - @Override - public boolean isFromAltoclef() { - return this.fromAltoclef; - } - - @Override - public void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef) { - this.build(name, schematic, origin); - this.fromAltoclef = fromAltoclef; - } - - @Override - public boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef) { - final boolean bl = this.build(name, schematic, origin); - this.fromAltoclef = fromAltoclef; - return bl; - } - @Override public void reset() { onLostControl(); @@ -394,24 +371,6 @@ public Map getMissing() { //return (this.fromAltoclef) ? new HashMap<>(this.missing) : null; } - /*private boolean isBlacklistedByAltoclef(final BlockPos pos) { - return this.ignoredBlocksInMesh.stream().anyMatch(e -> blockPosMatches(e, pos)); - }*/ - - /*public void decideToIgnoreInSchematic(BetterBlockPos positionToPlace) { - if (isActive() && isFromAltoclef()) { - // I was too lazy to check which one should be checked - if ((this.realSchematic != null && realSchematic.inSchematic(positionToPlace.x, positionToPlace.y, positionToPlace.z, ctx.world().getBlockState(positionToPlace))) - || (this.schematic != null && schematic.inSchematic(positionToPlace.x, positionToPlace.y, positionToPlace.z, ctx.world().getBlockState(positionToPlace)))) { - BlockState state = ctx.world().getBlockState(positionToPlace); - if (state.getBlock() instanceof AirBlock) { - System.out.println("where banana?"); - this.ignoredBlocksInMesh.add(positionToPlace); - } - } - } - }*/ - @Override public List getApproxPlaceable() { return this.approxPlaceable; @@ -441,6 +400,24 @@ private boolean blockPosMatches(final BlockPos pos1, final BlockPos pos2) { return (pos1.getX() == pos2.getX() && pos1.getY() == pos2.getY() && pos1.getZ() == pos2.getZ()); } + /*private boolean isBlacklistedByAltoclef(final BlockPos pos) { + return this.ignoredBlocksInMesh.stream().anyMatch(e -> blockPosMatches(e, pos)); + }*/ + + /*public void decideToIgnoreInSchematic(BetterBlockPos positionToPlace) { + if (isActive() && isFromAltoclef()) { + // I was too lazy to check which one should be checked + if ((this.realSchematic != null && realSchematic.inSchematic(positionToPlace.x, positionToPlace.y, positionToPlace.z, ctx.world().getBlockState(positionToPlace))) + || (this.schematic != null && schematic.inSchematic(positionToPlace.x, positionToPlace.y, positionToPlace.z, ctx.world().getBlockState(positionToPlace)))) { + BlockState state = ctx.world().getBlockState(positionToPlace); + if (state.getBlock() instanceof AirBlock) { + System.out.println("where banana?"); + this.ignoredBlocksInMesh.add(positionToPlace); + } + } + } + }*/ + private Optional> toBreakNearPlayer(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); BetterBlockPos pathStart = baritone.getPathingBehavior().pathStart(); @@ -478,39 +455,9 @@ private Optional> toBreakNearPlayer(BuilderCalcu return Optional.empty(); } - private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { - for (int i = 0; i < 9; i++) { - ItemStack stack = ctx.player().getInventory().items.get(i); - if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { - continue; - } - float originalYaw = ctx.player().getYRot(); - float originalPitch = ctx.player().getXRot(); - // the state depends on the facing of the player sometimes - ctx.player().setYRot(rot.getYaw()); - ctx.player().setXRot(rot.getPitch()); - BlockPlaceContext meme = new BlockPlaceContext(new UseOnContext( - ctx.world(), - ctx.player(), - InteractionHand.MAIN_HAND, - stack, - (BlockHitResult) result - ) { - }); // that {} gives us access to a protected constructor lmfao - BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); - ctx.player().setYRot(originalYaw); - ctx.player().setXRot(originalPitch); - if (wouldBePlaced == null) { - continue; - } - if (!meme.canPlace()) { - continue; - } - if (valid(wouldBePlaced, desired, true)) { - return OptionalInt.of(i); - } - } - return OptionalInt.empty(); + @Override + public boolean isPaused() { + return paused; } private Optional searchForPlacables(BuilderCalculationContext bcc, List desirableOnHotbar) { @@ -583,6 +530,59 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in return Optional.empty(); } + @Override + public boolean isFromAltoclef() { + return this.fromAltoclef; + } + + @Override + public void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef) { + this.build(name, schematic, origin); + this.fromAltoclef = fromAltoclef; + } + + @Override + public boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef) { + final boolean bl = this.build(name, schematic, origin); + this.fromAltoclef = fromAltoclef; + return bl; + } + + private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { + for (int i = 0; i < 9; i++) { + ItemStack stack = ctx.player().getInventory().items.get(i); + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { + continue; + } + float originalYaw = ctx.player().getYRot(); + float originalPitch = ctx.player().getXRot(); + // the state depends on the facing of the player sometimes + ctx.player().setYRot(rot.getYaw()); + ctx.player().setXRot(rot.getPitch()); + BlockPlaceContext meme = new BlockPlaceContext(new UseOnContext( + ctx.world(), + ctx.player(), + InteractionHand.MAIN_HAND, + stack, + (BlockHitResult) result + ) { + }); // that {} gives us access to a protected constructor lmfao + BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); + ctx.player().setYRot(originalYaw); + ctx.player().setXRot(originalPitch); + if (wouldBePlaced == null) { + continue; + } + if (!meme.canPlace()) { + continue; + } + if (valid(wouldBePlaced, desired, true)) { + return OptionalInt.of(i); + } + } + return OptionalInt.empty(); + } + private BlockPos getFromHistory(final BlockPos pos) { if (pos == null) return null; @@ -932,19 +932,58 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return assemble(bcc, approxPlaceable, false); } - private boolean isDefaultState(final BlockState state) { - final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); - for (final PropertyContainer container : propertyContainers) { - if (container.getPropertyKey().equals("part") && container.getPropertyValue().equals("head")) { - return false; - } - if (container.getPropertyKey().equals("half") && container.getPropertyValue().equals("upper")) { - return false; - } - } + @Override + public String displayName0() { + return paused ? "Builder Paused" : "Building " + name; + } + + private boolean sameWithoutOrientation(BlockState first, BlockState second) { + if (first.getBlock() != second.getBlock()) { + return false; + } + ImmutableMap, Comparable> map1 = first.getValues(); + ImmutableMap, Comparable> map2 = second.getValues(); + for (Property prop : map1.keySet()) { + if (map1.get(prop) != map2.get(prop) && !orientationProps.contains(prop)) { + return false; + } + } + return true; + } + + private boolean isDefaultState(final BlockState state) { + final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); + for (final PropertyContainer container : propertyContainers) { + if (container.getPropertyKey().equals("part") && container.getPropertyValue().equals("head")) { + return false; + } + if (container.getPropertyKey().equals("half") && container.getPropertyValue().equals("upper")) { + return false; + } + } return true; } + /*private boolean inInventoryWithUnderDifferentProperties(final BlockState state) { + final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); + for (final PropertyContainer container : propertyContainers) { + + } + + return false; + }*/ + + /*private final List asInventoryList(final List placeables) { + final List invStates = new ArrayList<>(); + placeables.forEach(e -> { + final BlockState defaultState = e.getBlock().defaultBlockState(); + invStates.removeIf(a -> a.toString().equals(defaultState.toString())); + invStates.add(defaultState); + }); + + return invStates; + }*/ + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable, boolean logMissing) { List placeable = new ArrayList<>(); List breakable = new ArrayList<>(); @@ -1021,6 +1060,48 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return new GoalComposite(toBreak.toArray(new Goal[0])); } + public static class Placement { + + private final int hotbarSelection; + private final BlockPos placeAgainst; + private final Direction side; + private final Rotation rot; + + public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { + this.hotbarSelection = hotbarSelection; + this.placeAgainst = placeAgainst; + this.side = side; + this.rot = rot; + } + } + + public static class JankyGoalComposite implements Goal { + + private final Goal primary; + private final Goal fallback; + + public JankyGoalComposite(Goal primary, Goal fallback) { + this.primary = primary; + this.fallback = fallback; + } + + + @Override + public boolean isInGoal(int x, int y, int z) { + return primary.isInGoal(x, y, z) || fallback.isInGoal(x, y, z); + } + + @Override + public double heuristic(int x, int y, int z) { + return primary.heuristic(x, y, z); + } + + @Override + public String toString() { + return "JankyComposite Primary: " + primary + " Fallback: " + fallback; + } + } + private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? return new GoalPlace(pos); @@ -1037,26 +1118,6 @@ private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { return new GoalPlace(pos); } - /*private boolean inInventoryWithUnderDifferentProperties(final BlockState state) { - final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); - for (final PropertyContainer container : propertyContainers) { - - } - - return false; - }*/ - - /*private final List asInventoryList(final List placeables) { - final List invStates = new ArrayList<>(); - placeables.forEach(e -> { - final BlockState defaultState = e.getBlock().defaultBlockState(); - invStates.removeIf(a -> a.toString().equals(defaultState.toString())); - invStates.add(defaultState); - }); - - return invStates; - }*/ - private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.above()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.above(2)).getBlock() instanceof AirBlock) { return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.above()) { @@ -1073,48 +1134,54 @@ public boolean isInGoal(int x, int y, int z) { return new GoalBreak(pos); } - public static class JankyGoalComposite implements Goal { - - private final Goal primary; - private final Goal fallback; + public static class GoalBreak extends GoalGetToBlock { - public JankyGoalComposite(Goal primary, Goal fallback) { - this.primary = primary; - this.fallback = fallback; + public GoalBreak(BlockPos pos) { + super(pos); } - @Override public boolean isInGoal(int x, int y, int z) { - return primary.isInGoal(x, y, z) || fallback.isInGoal(x, y, z); - } - - @Override - public double heuristic(int x, int y, int z) { - return primary.heuristic(x, y, z); - } - - @Override - public String toString() { - return "JankyComposite Primary: " + primary + " Fallback: " + fallback; + // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) + if (y > this.y) { + return false; + } + // but any other adjacent works for breaking, including inside or below + return super.isInGoal(x, y, z); } } - public static class GoalBreak extends GoalGetToBlock { + public static class GoalAdjacent extends GoalGetToBlock { - public GoalBreak(BlockPos pos) { + private boolean allowSameLevel; + private BlockPos no; + + public GoalAdjacent(BlockPos pos, BlockPos no, boolean allowSameLevel) { super(pos); + this.no = no; + this.allowSameLevel = allowSameLevel; } - @Override public boolean isInGoal(int x, int y, int z) { - // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) - if (y > this.y) { + if (x == this.x && y == this.y && z == this.z) { + return false; + } + if (x == no.getX() && y == no.getY() && z == no.getZ()) { + return false; + } + if (!allowSameLevel && y == this.y - 1) { + return false; + } + if (y < this.y - 1) { return false; } - // but any other adjacent works for breaking, including inside or below return super.isInGoal(x, y, z); } + + public double heuristic(int x, int y, int z) { + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); + } } @Override @@ -1139,6 +1206,18 @@ public void onLostControl() { blockBreakHistory.clear(); } + public static class GoalPlace extends GoalBlock { + + public GoalPlace(BlockPos placeAt) { + super(placeAt.above()); + } + + public double heuristic(int x, int y, int z) { + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); + } + } + private List approxPlaceable(int size) { List result = new ArrayList<>(); for (int i = 0; i < size; i++) { @@ -1167,36 +1246,26 @@ private List approxPlaceable(int size) { return result; } - public static class GoalAdjacent extends GoalGetToBlock { + private final class HistoryInfo { + public long counter = 0; + public boolean brokenPreviously = false; + } - private boolean allowSameLevel; - private BlockPos no; + private final class PropertyContainer { + private final String propertyKey; + private final String propertyValue; - public GoalAdjacent(BlockPos pos, BlockPos no, boolean allowSameLevel) { - super(pos); - this.no = no; - this.allowSameLevel = allowSameLevel; + public PropertyContainer(final String propertyKey, final String propertyValue) { + this.propertyKey = propertyKey; + this.propertyValue = propertyValue; } - public boolean isInGoal(int x, int y, int z) { - if (x == this.x && y == this.y && z == this.z) { - return false; - } - if (x == no.getX() && y == no.getY() && z == no.getZ()) { - return false; - } - if (!allowSameLevel && y == this.y - 1) { - return false; - } - if (y < this.y - 1) { - return false; - } - return super.isInGoal(x, y, z); + public String getPropertyKey() { + return this.propertyKey; } - public double heuristic(int x, int y, int z) { - // prioritize lower y coordinates - return this.y * 100 + super.heuristic(x, y, z); + public String getPropertyValue() { + return this.propertyValue; } } @@ -1245,76 +1314,6 @@ private boolean valid(BlockState current, BlockState desired, boolean itemVerify return Baritone.settings().buildIgnoreDirection.value && sameWithoutOrientation(current, desired); } - public static class Placement { - - private final int hotbarSelection; - private final BlockPos placeAgainst; - private final Direction side; - private final Rotation rot; - - public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { - this.hotbarSelection = hotbarSelection; - this.placeAgainst = placeAgainst; - this.side = side; - this.rot = rot; - } - } - - - @Override - public String displayName0() { - return paused ? "Builder Paused" : "Building " + name; - } - - public static class GoalPlace extends GoalBlock { - - public GoalPlace(BlockPos placeAt) { - super(placeAt.above()); - } - - public double heuristic(int x, int y, int z) { - // prioritize lower y coordinates - return this.y * 100 + super.heuristic(x, y, z); - } - } - - private boolean sameWithoutOrientation(BlockState first, BlockState second) { - if (first.getBlock() != second.getBlock()) { - return false; - } - ImmutableMap, Comparable> map1 = first.getValues(); - ImmutableMap, Comparable> map2 = second.getValues(); - for (Property prop : map1.keySet()) { - if (map1.get(prop) != map2.get(prop) && !orientationProps.contains(prop)) { - return false; - } - } - return true; - } - - private final class HistoryInfo { - public long counter = 0; - public boolean brokenPreviously = false; - } - - private final class PropertyContainer { - private final String propertyKey; - private final String propertyValue; - - public PropertyContainer(final String propertyKey, final String propertyValue) { - this.propertyKey = propertyKey; - this.propertyValue = propertyValue; - } - - public String getPropertyKey() { - return this.propertyKey; - } - - public String getPropertyValue() { - return this.propertyValue; - } - } - public class BuilderCalculationContext extends CalculationContext { private final List placeable; diff --git a/src/main/java/baritone/process/CustomGoalProcess.java b/src/main/java/baritone/process/CustomGoalProcess.java index c6d6435b8..3ee3e7b7c 100644 --- a/src/main/java/baritone/process/CustomGoalProcess.java +++ b/src/main/java/baritone/process/CustomGoalProcess.java @@ -47,16 +47,6 @@ public CustomGoalProcess(Baritone baritone) { super(baritone); } - @Override - public void path() { - this.state = State.PATH_REQUESTED; - } - - @Override - public Goal getGoal() { - return this.goal; - } - @Override public void setGoal(Goal goal) { this.goal = goal; @@ -68,6 +58,16 @@ public void setGoal(Goal goal) { } } + @Override + public void path() { + this.state = State.PATH_REQUESTED; + } + + @Override + public Goal getGoal() { + return this.goal; + } + @Override public boolean isActive() { return this.state != State.NONE; diff --git a/src/main/java/baritone/process/ExploreProcess.java b/src/main/java/baritone/process/ExploreProcess.java index 2ac6d5b18..e1f053e02 100644 --- a/src/main/java/baritone/process/ExploreProcess.java +++ b/src/main/java/baritone/process/ExploreProcess.java @@ -53,20 +53,6 @@ public ExploreProcess(Baritone baritone) { super(baritone); } - private static Goal createGoal(int x, int z) { - if (Baritone.settings().exploreMaintainY.value == -1) { - return new GoalXZ(x, z); - } - // don't use a goalblock because we still want isInGoal to return true if X and Z are correct - // we just want to try and maintain Y on the way there, not necessarily end at that specific Y - return new GoalXZ(x, z) { - @Override - public double heuristic(int x, int y, int z) { - return super.heuristic(x, y, z) + GoalYLevel.calculate(Baritone.settings().exploreMaintainY.value, y); - } - }; - } - @Override public boolean isActive() { return explorationOrigin != null; @@ -174,14 +160,18 @@ private Goal[] closestUncachedChunks(BlockPos center, IChunkFilter filter) { } } - @Override - public void onLostControl() { - explorationOrigin = null; - } - - @Override - public String displayName0() { - return "Exploring around " + explorationOrigin + ", distance completed " + distanceCompleted + ", currently going to " + new GoalComposite(closestUncachedChunks(explorationOrigin, calcFilter())); + private static Goal createGoal(int x, int z) { + if (Baritone.settings().exploreMaintainY.value == -1) { + return new GoalXZ(x, z); + } + // don't use a goalblock because we still want isInGoal to return true if X and Z are correct + // we just want to try and maintain Y on the way there, not necessarily end at that specific Y + return new GoalXZ(x, z) { + @Override + public double heuristic(int x, int y, int z) { + return super.heuristic(x, y, z) + GoalYLevel.calculate(Baritone.settings().exploreMaintainY.value, y); + } + }; } private enum Status { @@ -297,4 +287,14 @@ public int countRemain() { return Math.min(a.countRemain(), b.countRemain()); } } + + @Override + public void onLostControl() { + explorationOrigin = null; + } + + @Override + public String displayName0() { + return "Exploring around " + explorationOrigin + ", distance completed " + distanceCompleted + ", currently going to " + new GoalComposite(closestUncachedChunks(explorationOrigin, calcFilter())); + } } diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 67b469a2c..ec32aa95b 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -53,6 +53,14 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmProcess { + private boolean active; + + private List locations; + private int tickCount; + + private int range; + private BlockPos center; + private static final List FARMLAND_PLANTABLE = Arrays.asList( Items.BEETROOT_SEEDS, Items.MELON_SEEDS, @@ -61,6 +69,7 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro Items.POTATO, Items.CARROT ); + private static final List PICKUP_DROPPED = Arrays.asList( Items.BEETROOT_SEEDS, Items.BEETROOT, @@ -77,11 +86,6 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro Blocks.SUGAR_CANE.asItem(), Blocks.CACTUS.asItem() ); - private boolean active; - private List locations; - private int tickCount; - private int range; - private BlockPos center; public FarmProcess(Baritone baritone) { super(baritone); @@ -104,6 +108,10 @@ public void farm(int range, BlockPos pos) { locations = null; } + private boolean isPlantable(ItemStack stack) { + return FARMLAND_PLANTABLE.contains(stack.getItem()); + } + private boolean readyForHarvest(Level world, BlockPos pos, BlockState state) { for (Harvest harvest : Harvest.values()) { if (harvest.block == state.getBlock()) { @@ -113,12 +121,56 @@ private boolean readyForHarvest(Level world, BlockPos pos, BlockState state) { return false; } + private boolean isNetherWart(ItemStack stack) { + return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART); + } + private boolean isBoneMeal(ItemStack stack) { return !stack.isEmpty() && stack.getItem().equals(Items.BONE_MEAL); } - private boolean isPlantable(ItemStack stack) { - return FARMLAND_PLANTABLE.contains(stack.getItem()); + private enum Harvest { + WHEAT((CropBlock) Blocks.WHEAT), + CARROTS((CropBlock) Blocks.CARROTS), + POTATOES((CropBlock) Blocks.POTATOES), + BEETROOT((CropBlock) Blocks.BEETROOTS), + PUMPKIN(Blocks.PUMPKIN, state -> true), + MELON(Blocks.MELON, state -> true), + NETHERWART(Blocks.NETHER_WART, state -> state.getValue(NetherWartBlock.AGE) >= 3), + SUGARCANE(Blocks.SUGAR_CANE, null) { + @Override + public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { + if (Baritone.settings().replantCrops.value) { + return world.getBlockState(pos.below()).getBlock() instanceof SugarCaneBlock; + } + return true; + } + }, + CACTUS(Blocks.CACTUS, null) { + @Override + public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { + if (Baritone.settings().replantCrops.value) { + return world.getBlockState(pos.below()).getBlock() instanceof CactusBlock; + } + return true; + } + }; + public final Block block; + public final Predicate readyToHarvest; + + Harvest(CropBlock blockCrops) { + this(blockCrops, blockCrops::isMaxAge); + // max age is 7 for wheat, carrots, and potatoes, but 3 for beetroot + } + + Harvest(Block block, Predicate readyToHarvest) { + this.block = block; + this.readyToHarvest = readyToHarvest; + } + + public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { + return readyToHarvest.test(state); + } } @Override @@ -255,10 +307,6 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(new GoalComposite(goalz.toArray(new Goal[0])), PathingCommandType.SET_GOAL_AND_PATH); } - private boolean isNetherWart(ItemStack stack) { - return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART); - } - @Override public void onLostControl() { active = false; @@ -268,48 +316,4 @@ public void onLostControl() { public String displayName0() { return "Farming"; } - - private enum Harvest { - WHEAT((CropBlock) Blocks.WHEAT), - CARROTS((CropBlock) Blocks.CARROTS), - POTATOES((CropBlock) Blocks.POTATOES), - BEETROOT((CropBlock) Blocks.BEETROOTS), - PUMPKIN(Blocks.PUMPKIN, state -> true), - MELON(Blocks.MELON, state -> true), - NETHERWART(Blocks.NETHER_WART, state -> state.getValue(NetherWartBlock.AGE) >= 3), - SUGARCANE(Blocks.SUGAR_CANE, null) { - @Override - public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { - if (Baritone.settings().replantCrops.value) { - return world.getBlockState(pos.below()).getBlock() instanceof SugarCaneBlock; - } - return true; - } - }, - CACTUS(Blocks.CACTUS, null) { - @Override - public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { - if (Baritone.settings().replantCrops.value) { - return world.getBlockState(pos.below()).getBlock() instanceof CactusBlock; - } - return true; - } - }; - public final Block block; - public final Predicate readyToHarvest; - - Harvest(CropBlock blockCrops) { - this(blockCrops, blockCrops::isMaxAge); - // max age is 7 for wheat, carrots, and potatoes, but 3 for beetroot - } - - Harvest(Block block, Predicate readyToHarvest) { - this.block = block; - this.readyToHarvest = readyToHarvest; - } - - public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { - return readyToHarvest.test(state); - } - } } diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 53a712d04..5233b6109 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -195,6 +195,20 @@ private synchronized void rescan(List known, CalculationContext contex knownLocations = positions; } + // this is to signal to MineProcess that we don't care about the allowBreak setting + // it is NOT to be used to actually calculate a path + public class GetToBlockCalculationContext extends CalculationContext { + + public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { + super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); + } + + @Override + public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { + return 1; + } + } + private boolean rightClick() { for (BlockPos pos : knownLocations) { Optional reachable = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); @@ -239,18 +253,4 @@ private boolean blockOnTopMustBeRemoved(Block block) { // only these chests; you can open a crafting table or furnace even with a block on top return block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST; } - - // this is to signal to MineProcess that we don't care about the allowBreak setting - // it is NOT to be used to actually calculate a path - public class GetToBlockCalculationContext extends CalculationContext { - - public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { - super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); - } - - @Override - public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { - return 1; - } - } } diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 027b54efe..681beaeac 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -18,6 +18,7 @@ package baritone.process; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.pathing.goals.*; import baritone.api.process.IMineProcess; import baritone.api.process.PathingCommand; @@ -30,6 +31,7 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; +import baritone.utils.Trail; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; @@ -52,7 +54,6 @@ * @author leijurv */ public final class MineProcess extends BaritoneProcessHelper implements IMineProcess { - private static final int ORE_LOCATIONS_COUNT = 64; private BlockOptionalMetaLookup filter; @@ -68,58 +69,10 @@ public MineProcess(Baritone baritone) { super(baritone); } - private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { - dropped.removeIf(drop -> { - for (BlockPos pos : locs2) { - if (pos.distSqr(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) && MineProcess.plausibleToBreak(ctx, pos)) { // TODO maybe drop also has to be supported? no lava below? - return true; - } - } - return false; - }); - List locs = locs2 - .stream() - .distinct() - - // remove any that are within loaded chunks that aren't actually what we want - .filter(pos -> !ctx.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ()) || filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) - - // remove any that are implausible to mine (encased in bedrock, or touching lava) - .filter(pos -> MineProcess.plausibleToBreak(ctx, pos)) - - .filter(pos -> { - if (Baritone.settings().allowOnlyExposedOres.value) { - return isNextToAir(ctx, pos); - } else { - return true; - } - }) - - .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value + ctx.world.dimensionType().minY()) - - .filter(pos -> !blacklist.contains(pos)) - - .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().blockPosition()::distSqr)) - .collect(Collectors.toList()); - - if (locs.size() > max) { - return locs.subList(0, max); - } - return locs; - } - - public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { - if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { - return false; - } - - // bedrock above and below makes it implausible, otherwise we're good - return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); - } - - public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { + public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int maxPerType, List alreadyKnown, List blacklist, List dropped) { List locs = new ArrayList<>(); List untracked = new ArrayList<>(); + int maxTotal = maxPerType * filter.blocks().size(); for (BlockOptionalMeta bom : filter.blocks()) { Block block = bom.getBlock(); if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { @@ -138,13 +91,13 @@ public static List searchWorld(CalculationContext ctx, BlockOptionalMe } } - locs = prune(ctx, locs, filter, max, blacklist, dropped); + locs = prune(ctx, locs, filter, maxPerType, blacklist, dropped); - if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < max)) { + if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < maxTotal)) { locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( ctx.getBaritone().getPlayerContext(), filter, - max, + maxPerType, 10, 32 )); // maxSearchRadius is NOT sq @@ -152,29 +105,62 @@ public static List searchWorld(CalculationContext ctx, BlockOptionalMe locs.addAll(alreadyKnown); - return prune(ctx, locs, filter, max, blacklist, dropped); + return prune(ctx, locs, filter, maxPerType, blacklist, dropped); } - public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { - int radius = Baritone.settings().allowOnlyExposedOresDistance.value; - for (int dx = -radius; dx <= radius; dx++) { - for (int dy = -radius; dy <= radius; dy++) { - for (int dz = -radius; dz <= radius; dz++) { - if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius - && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { - return true; - } + private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int maxPer, List blacklist, List dropped) { + dropped.removeIf(drop -> { + for (BlockPos pos : locs2) { + // No longer caring if we CAN break, we're just looking for a global search. + if (pos.distSqr(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ()))/* && MineProcess.plausibleToBreak(ctx, pos)*/) { + return true; } } - } - return false; - } + return false; + }); + HashMap countsPerBlock = new HashMap<>(); + List locs = locs2 + .stream() + .distinct() - @Override - public boolean isActive() { - return filter != null; + // remove any that are within loaded chunks that aren't actually what we want + .filter(pos -> !ctx.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ()) || filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) + + // remove any that are implausible to mine (encased in bedrock, or touching lava) + //.filter(pos -> MineProcess.plausibleToBreak(ctx, pos)) + + .filter(pos -> { + if (Baritone.settings().allowOnlyExposedOres.value) { + return isNextToAir(ctx, pos); + } else { + return true; + } + }) + + .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value + ctx.world.dimensionType().minY()) + + .filter(pos -> !blacklist.contains(pos)) + + .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().blockPosition()::distSqr)) + .collect(Collectors.toList()); + + // Prune out a certain number per block type + locs = locs.stream() + .filter(pos -> { + Block b = ctx.getBlock(pos.getX(), pos.getY(), pos.getZ()); + int count = countsPerBlock.getOrDefault(b, 0); + if (count <= maxPer) { + countsPerBlock.put(b, count + 1); + return true; + } else { + return false; + } + }).collect(Collectors.toList()); + + return locs; } + private void updateLoucaSystem() { Map copy = new HashMap<>(anticipatedDrops); ctx.getSelectedBlock().ifPresent(pos -> { @@ -237,7 +223,6 @@ private PathingCommand updateGoal() { public boolean isInGoal(int x, int y, int z) { return false; } - @Override public double heuristic() { return Double.NEGATIVE_INFINITY; @@ -268,82 +253,6 @@ private void rescan(List already, CalculationContext context) { knownOreLocations = locs; } - @Override - public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - if (desiredQuantity > 0) { - int curr = ctx.player().getInventory().items.stream() - .filter(stack -> filter.has(stack)) - .mapToInt(ItemStack::getCount).sum(); - System.out.println("Currently have " + curr + " valid items"); - if (curr >= desiredQuantity) { - logDirect("Have " + curr + " valid items"); - cancel(); - return null; - } - } - if (calcFailed) { - if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { - logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); - } - knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(blacklist::add); - knownOreLocations.removeIf(blacklist::contains); - } else { - logDirect("Unable to find any path to " + filter + ", canceling mine"); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("Unable to find any path to " + filter + ", canceling mine", true); - } - cancel(); - return null; - } - } - if (!Baritone.settings().allowBreak.value) { - logDirect("Unable to mine when allowBreak is false!"); - cancel(); - return null; - } - updateLoucaSystem(); - int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; - List curr = new ArrayList<>(knownOreLocations); - if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain - CalculationContext context = new CalculationContext(baritone, true); - Baritone.getExecutor().execute(() -> rescan(curr, context)); - } - if (Baritone.settings().legitMine.value) { - addNearby(); - } - Optional shaft = curr.stream() - .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) - .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) - .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( - .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); - baritone.getInputOverrideHandler().clearAllKeys(); - if (shaft.isPresent() && ctx.player().isOnGround()) { - BlockPos pos = shaft.get(); - BlockState state = baritone.bsi.get0(pos); - if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { - Optional rot = RotationUtils.reachable(ctx, pos); - if (rot.isPresent() && isSafeToCancel) { - baritone.getLookBehavior().updateTarget(rot.get(), true); - MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); - if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { - baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); - } - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); - } - } - } - PathingCommand command = updateGoal(); - if (command == null) { - // none in range - // maybe say something in chat? (ahem impact) - cancel(); - return null; - } - return command; - } - private boolean internalMiningGoal(BlockPos pos, CalculationContext context, List locs) { // Here, BlockStateInterface is used because the position may be in a cached chunk (the targeted block is one that is kept track of) if (locs.contains(pos)) { @@ -398,6 +307,21 @@ private Goal coalesce(BlockPos loc, List locs, CalculationContext cont return new GoalBlock(loc.below()); } + public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { + int radius = Baritone.settings().allowOnlyExposedOresDistance.value; + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius + && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { + return true; + } + } + } + } + return false; + } + public List droppedItemsScan() { if (!Baritone.settings().mineScanDroppedItems.value) { return Collections.emptyList(); @@ -415,6 +339,15 @@ public List droppedItemsScan() { return ret; } + public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { + if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { + return false; + } + + // bedrock above and below makes it implausible, otherwise we're good + return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); + } + private void addNearby() { List dropped = droppedItemsScan(); knownOreLocations.addAll(dropped); @@ -440,27 +373,92 @@ private void addNearby() { } @Override - public void mineByName(int quantity, String... blocks) { - mine(quantity, new BlockOptionalMetaLookup(blocks)); + public boolean isActive() { + return filter != null; } @Override - public void mine(int quantity, BlockOptionalMetaLookup filter) { - this.filter = filter; - if (filter != null && !Baritone.settings().allowBreak.value) { + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (Trail.getInstance().updateAndCheck()) { + return Trail.getInstance().getRunAwayCommand(); + } + + if (desiredQuantity > 0) { + int curr = ctx.player().getInventory().items.stream() + .filter(stack -> filter.has(stack)) + .mapToInt(ItemStack::getCount).sum(); + System.out.println("Currently have " + curr + " valid items"); + if (curr >= desiredQuantity) { + logDirect("Have " + curr + " valid items"); + cancel(); + return null; + } + } + if (calcFailed) { + if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { + logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); + } + knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(blacklist::add); + knownOreLocations.removeIf(blacklist::contains); + } else { + logDirect("Unable to find any path to " + filter + ", canceling mine"); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", canceling mine", true); + } + cancel(); + return null; + } + } + if (!Baritone.settings().allowBreak.value) { logDirect("Unable to mine when allowBreak is false!"); - this.mine(quantity, (BlockOptionalMetaLookup) null); - return; + cancel(); + return null; } - this.desiredQuantity = quantity; - this.knownOreLocations = new ArrayList<>(); - this.blacklist = new ArrayList<>(); - this.branchPoint = null; - this.branchPointRunaway = null; - this.anticipatedDrops = new HashMap<>(); - if (filter != null) { - rescan(new ArrayList<>(), new CalculationContext(baritone)); + // Wait for pause interactions + if (AltoClefSettings.getInstance().isInteractionPaused()) { + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } + updateLoucaSystem(); + int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; + List curr = new ArrayList<>(knownOreLocations); + if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain + CalculationContext context = new CalculationContext(baritone, true); + Baritone.getExecutor().execute(() -> rescan(curr, context)); + } + if (Baritone.settings().legitMine.value) { + addNearby(); + } + Optional shaft = curr.stream() + .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) + .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) + .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( + .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); + baritone.getInputOverrideHandler().clearAllKeys(); + if (shaft.isPresent() && ctx.player().isOnGround()) { + BlockPos pos = shaft.get(); + BlockState state = baritone.bsi.get0(pos); + if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { + Optional rot = RotationUtils.reachable(ctx, pos); + if (rot.isPresent() && isSafeToCancel) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); + if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + } + PathingCommand command = updateGoal(); + if (command == null) { + // none in range + // maybe say something in chat? (ahem impact) + cancel(); + return null; + } + return command; } private static class GoalThreeBlocks extends GoalTwoBlocks { @@ -482,4 +480,28 @@ public double heuristic(int x, int y, int z) { return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); } } + + @Override + public void mineByName(int quantity, String... blocks) { + mine(quantity, new BlockOptionalMetaLookup(blocks)); + } + + @Override + public void mine(int quantity, BlockOptionalMetaLookup filter) { + this.filter = filter; + if (filter != null && !Baritone.settings().allowBreak.value) { + logDirect("Unable to mine when allowBreak is false!"); + this.mine(quantity, (BlockOptionalMetaLookup) null); + return; + } + this.desiredQuantity = quantity; + this.knownOreLocations = new ArrayList<>(); + this.blacklist = new ArrayList<>(); + this.branchPoint = null; + this.branchPointRunaway = null; + this.anticipatedDrops = new HashMap<>(); + if (filter != null) { + rescan(new ArrayList<>(), new CalculationContext(baritone)); + } + } } diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index a201f4d83..32837cdcd 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -43,15 +43,16 @@ public class BlockStateInterface { private static final BlockState AIR = Blocks.AIR.defaultBlockState(); - public final BlockGetter access; public final BlockPos.MutableBlockPos isPassableBlockPos; - public final BetterWorldBorder worldBorder; protected final Level world; - private final WorldData worldData; private final ClientChunkCache provider; + public final BlockGetter access; + public final BetterWorldBorder worldBorder; + private final WorldData worldData; + private LevelChunk prev = null; + private final boolean useTheRealWorld; private CachedRegion prevCached = null; - private LevelChunk prev = null; public BlockStateInterface(IPlayerContext ctx) { this(ctx, false); @@ -78,12 +79,6 @@ public BlockStateInterface(Level world, WorldData worldData, boolean copyLoadedC this.access = new BlockStateInterfaceAccessWrapper(this); } - public static BlockState get(IPlayerContext ctx, BlockPos pos) { - return new BlockStateInterface(ctx).get0(pos.getX(), pos.getY(), pos.getZ()); // immense iq - // can't just do world().get because that doesn't work for out of bounds - // and toBreak and stuff fails when the movement is instantiated out of load range but it's not able to BlockStateInterface.get what it's going to walk on - } - public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be called from the pathing thread because the pathing thread doesn't make a single blockpos pog return get(ctx, pos).getBlock(); } @@ -97,8 +92,10 @@ public static BlockState getFromChunk(LevelChunk chunk, int x, int y, int z) { return section.getBlockState(x & 15, y & 15, z & 15); } - public boolean worldContainsLoadedChunk(int blockX, int blockZ) { - return provider.hasChunk(blockX >> 4, blockZ >> 4); + public static BlockState get(IPlayerContext ctx, BlockPos pos) { + return new BlockStateInterface(ctx).get0(pos.getX(), pos.getY(), pos.getZ()); // immense iq + // can't just do world().get because that doesn't work for out of bounds + // and toBreak and stuff fails when the movement is instantiated out of load range but it's not able to BlockStateInterface.get what it's going to walk on } public BlockState get0(BlockPos pos) { @@ -174,4 +171,8 @@ public boolean isLoaded(int x, int z) { prevCached = prevRegion; return prevRegion.isCached(x & 511, z & 511); } + + public boolean worldContainsLoadedChunk(int blockX, int blockZ) { + return provider.hasChunk(blockX >> 4, blockZ >> 4); + } } diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index b0e9beeb9..d97012a18 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -18,6 +18,7 @@ package baritone.utils; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.BaritoneAPI; import baritone.api.event.events.TickEvent; import baritone.api.utils.IInputOverrideHandler; @@ -88,6 +89,10 @@ public final void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } + if (AltoClefSettings.getInstance().isInteractionPaused()) { + setInputForceState(Input.CLICK_LEFT, false); + setInputForceState(Input.CLICK_RIGHT, false); + } if (isInputForcedDown(Input.CLICK_LEFT)) { setInputForceState(Input.CLICK_RIGHT, false); } diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index f7d5964ff..f5d07e298 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -18,6 +18,7 @@ package baritone.utils; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.item.ItemStack; @@ -86,7 +87,9 @@ public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { speed += effLevel * effLevel + 1; } } - + if (AltoClefSettings.getInstance().shouldForceUseTool(state, item)) { + return Double.POSITIVE_INFINITY; + } speed /= hardness; if (!state.requiresCorrectToolForDrops() || (!item.isEmpty() && item.isCorrectToolForDrops(state))) { return speed / 30; diff --git a/src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java b/src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java deleted file mode 100644 index 50582b8fa..000000000 --- a/src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.accessor; - -import baritone.cache.WorldProvider; - -import java.io.File; - -/** - * @author Brady - * @see WorldProvider - * @since 8/4/2018 - */ -public interface IAnvilChunkLoader { - - File getChunkSaveLocation(); -} diff --git a/src/main/java/baritone/utils/accessor/IBitArray.java b/src/main/java/baritone/utils/accessor/IBitArray.java deleted file mode 100644 index baea5c1da..000000000 --- a/src/main/java/baritone/utils/accessor/IBitArray.java +++ /dev/null @@ -1,6 +0,0 @@ -package baritone.utils.accessor; - -public interface IBitArray { - - int[] toArray(); -} diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index f4ffd104f..61229cce4 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -53,6 +53,13 @@ public Avoidance(int centerX, int centerY, int centerZ, double coefficient, int this.radiusSq = radius * radius; } + public double coefficient(int x, int y, int z) { + int xDiff = x - centerX; + int yDiff = y - centerY; + int zDiff = z - centerZ; + return xDiff * xDiff + yDiff * yDiff + zDiff * zDiff <= radiusSq ? coefficient : 1.0D; + } + public static List create(IPlayerContext ctx) { if (!Baritone.settings().avoidance.value) { return Collections.emptyList(); @@ -75,13 +82,6 @@ public static List create(IPlayerContext ctx) { return res; } - public double coefficient(int x, int y, int z) { - int xDiff = x - centerX; - int yDiff = y - centerY; - int zDiff = z - centerZ; - return xDiff * xDiff + yDiff * yDiff + zDiff * zDiff <= radiusSq ? coefficient : 1.0D; - } - public void applySpherical(Long2DoubleOpenHashMap map) { for (int x = -radius; x <= radius; x++) { for (int y = -radius; y <= radius; y++) { diff --git a/src/main/java/baritone/utils/pathing/PathingBlockType.java b/src/main/java/baritone/utils/pathing/PathingBlockType.java index 13463a1fe..43a7ebef2 100644 --- a/src/main/java/baritone/utils/pathing/PathingBlockType.java +++ b/src/main/java/baritone/utils/pathing/PathingBlockType.java @@ -37,11 +37,11 @@ public enum PathingBlockType { }; } - public static PathingBlockType fromBits(boolean b1, boolean b2) { - return b1 ? b2 ? SOLID : AVOID : b2 ? WATER : AIR; - } - public final boolean[] getBits() { return this.bits; } + + public static PathingBlockType fromBits(boolean b1, boolean b2) { + return b1 ? b2 ? SOLID : AVOID : b2 ? WATER : AIR; + } } diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index 43dda57ca..48c35b80c 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -34,6 +34,11 @@ public MapArtSchematic(IStaticSchematic schematic) { this.heightMap = generateHeightMap(schematic); } + @Override + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { + return y >= this.heightMap[x][z]; + } + private static int[][] generateHeightMap(IStaticSchematic schematic) { int[][] heightMap = new int[schematic.widthX()][schematic.lengthZ()]; @@ -61,9 +66,4 @@ private static OptionalInt lastIndexMatching(T[] arr, Predicate p } return OptionalInt.empty(); } - - @Override - protected boolean partOfMask(int x, int y, int z, BlockState currentState) { - return y >= this.heightMap[x][z]; - } } diff --git a/src/main/java/baritone/utils/type/VarInt.java b/src/main/java/baritone/utils/type/VarInt.java index 2e9790b63..7cc005bdb 100644 --- a/src/main/java/baritone/utils/type/VarInt.java +++ b/src/main/java/baritone/utils/type/VarInt.java @@ -36,6 +36,24 @@ public VarInt(int value) { this.size = this.serialized.length; } + /** + * @return The integer value that is represented by this {@link VarInt}. + */ + public final int getValue() { + return this.value; + } + + /** + * @return The size of this {@link VarInt}, in bytes, once serialized. + */ + public final int getSize() { + return this.size; + } + + public final byte[] serialize() { + return this.serialized; + } + private static byte[] serialize0(int valueIn) { ByteList bytes = new ByteArrayList(); @@ -74,22 +92,4 @@ public static VarInt read(byte[] bytes, int start) { return new VarInt(value); } - - /** - * @return The integer value that is represented by this {@link VarInt}. - */ - public final int getValue() { - return this.value; - } - - /** - * @return The size of this {@link VarInt}, in bytes, once serialized. - */ - public final int getSize() { - return this.size; - } - - public final byte[] serialize() { - return this.serialized; - } } diff --git a/src/main/resources/META-INF/services/baritone.api.IBaritoneProvider b/src/main/resources/META-INF/services/baritone.api.IBaritoneProvider deleted file mode 100644 index 934db7d33..000000000 --- a/src/main/resources/META-INF/services/baritone.api.IBaritoneProvider +++ /dev/null @@ -1 +0,0 @@ -baritone.BaritoneProvider \ No newline at end of file From c20d40f8dd4a9a1fc1215e84b3a15c2144c4f24e Mon Sep 17 00:00:00 2001 From: EvilCodeZ <45902651+EvilCodeZ@users.noreply.github.com> Date: Fri, 18 Nov 2022 19:39:39 +0100 Subject: [PATCH 415/935] Removed System.out.println. --- src/launch/java/baritone/launch/mixins/MixinScreen.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java index ed896730f..c99c7776c 100644 --- a/src/launch/java/baritone/launch/mixins/MixinScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.java @@ -43,7 +43,6 @@ public abstract class MixinScreen implements IGuiScreen { //TODO: switch to enum extention with mixin 9.0 or whenever Mumfrey gets around to it @Inject(at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;)V", remap = false, ordinal = 1), method = "handleComponentClicked", cancellable = true) public void handleCustomClickEvent(Style style, CallbackInfoReturnable cir) { - System.out.println("handleCustomClickEvent"); ClickEvent clickEvent = style.getClickEvent(); if (clickEvent == null) { return; From 7acadda5e806bcacc0442f573edece46e6cae543 Mon Sep 17 00:00:00 2001 From: Marvion Kirito Date: Sat, 19 Nov 2022 11:18:42 +0800 Subject: [PATCH 416/935] Just changed the mod version. --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index e6544ffcc..6d47e255c 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, - "id": "baritone-meteor", + "id": "baritone-altoclef", "version": "${version}", "name": "Baritone", "description": "Google Maps for Blockgame", diff --git a/gradle.properties b/gradle.properties index 36260f6e7..27af2b45c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx4G -mod_version=1.19.2-SNAPSHOT +mod_version=1.19.2-beta4 maven_group=baritone archives_base_name=baritone minecraft_version=1.19.2 From 6fae6e87ab3b17320b6cbc364cc25387b3c64941 Mon Sep 17 00:00:00 2001 From: Marvion Kirito Date: Sat, 19 Nov 2022 18:36:07 +0800 Subject: [PATCH 417/935] Fix: - Fixed compatibility between altoclef and meteor client. --- fabric/src/main/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 6d47e255c..e6544ffcc 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, - "id": "baritone-altoclef", + "id": "baritone-meteor", "version": "${version}", "name": "Baritone", "description": "Google Maps for Blockgame", From dc81fe724a5e045f3cf0a546a4375f2ee5037f2e Mon Sep 17 00:00:00 2001 From: Marvion Kirito Date: Sat, 19 Nov 2022 18:47:23 +0800 Subject: [PATCH 418/935] Fix: - Fixed compatibility between altoclef and meteor client. --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 27af2b45c..c17efa654 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx4G -mod_version=1.19.2-beta4 +mod_version=1.19.2-beta5 maven_group=baritone archives_base_name=baritone minecraft_version=1.19.2 From eabd1150b0a619f7e2adada9dfbd837613bf9414 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 22 Nov 2022 15:15:33 +0100 Subject: [PATCH 419/935] Allow breaking next to some liquids --- src/api/java/baritone/api/Settings.java | 7 +++++++ .../baritone/pathing/movement/MovementHelper.java | 13 ++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 267fe7822..cd3a0a805 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -107,6 +107,13 @@ public final class Settings { */ public final Setting walkOnWaterOnePenalty = new Setting<>(3D); + /** + * Don't allow breaking blocks next to liquids. + *

+ * Enable if you have mods adding custom fluid physics. + */ + public final Setting strictLiquidCheck = new Setting<>(false); + /** * Allow Baritone to fall arbitrary distances and place a water bucket beneath it. * Reliability: questionable. diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index dd0ddff48..d1cea8dc9 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -77,7 +77,18 @@ static boolean avoidAdjacentBreaking(BlockStateInterface bsi, int x, int y, int && BlockFalling.canFallThrough(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) return true; // dont break a block that is adjacent to unsupported gravel because it can cause really weird stuff } - return block instanceof BlockLiquid; + if (block instanceof BlockLiquid) { + if (directlyAbove || Baritone.settings().strictLiquidCheck.value) { + return true; + } + int level = state.getValue(BlockLiquid.LEVEL); + if (level == 0) { + return true; // source blocks like to flow horizontally + } + // everything else will prefer flowing down + return !(bsi.get0(x, y - 1, z).getBlock() instanceof BlockLiquid); // assume everything is in a static state + } + return false; } static boolean canWalkThrough(IPlayerContext ctx, BetterBlockPos pos) { From e1095962a1b2854dd65003959e17e5f812fad7e3 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 28 Nov 2022 23:07:30 +0100 Subject: [PATCH 420/935] Fix Registry.unregister --- src/api/java/baritone/api/command/registry/Registry.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/command/registry/Registry.java b/src/api/java/baritone/api/command/registry/Registry.java index 067791690..b571484b7 100644 --- a/src/api/java/baritone/api/command/registry/Registry.java +++ b/src/api/java/baritone/api/command/registry/Registry.java @@ -84,7 +84,7 @@ public boolean register(V entry) { * @param entry The entry to unregister. */ public void unregister(V entry) { - if (registered(entry)) { + if (!registered(entry)) { return; } _entries.remove(entry); From 85790c0b2fe2d6a606656d01554f5d51d3b6d532 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 1 Dec 2022 23:04:40 -0700 Subject: [PATCH 421/935] switch to unimined --- build.gradle | 121 +++++++++----- buildSrc/build.gradle | 17 +- .../baritone/gradle/task/ProguardTask.java | 30 ++-- common/build.gradle | 136 ---------------- fabric/build.gradle | 16 +- forge/build.gradle | 32 ++-- forge/src/main/resources/META-INF/mods.toml | 2 +- forge/src/main/resources/pack.mcmeta | 6 + gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 26 ++- src/launch/resources/pack.mcmeta | 6 - tweaker/build.gradle | 151 ++++++------------ .../java/baritone/launch/BaritoneTweaker.java | 0 .../java/baritone/launch/LaunchTesting.java | 0 15 files changed, 199 insertions(+), 348 deletions(-) delete mode 100644 common/build.gradle create mode 100644 forge/src/main/resources/pack.mcmeta delete mode 100644 src/launch/resources/pack.mcmeta rename tweaker/src/{tweaker => main}/java/baritone/launch/BaritoneTweaker.java (100%) rename tweaker/src/{tweaker => main}/java/baritone/launch/LaunchTesting.java (100%) diff --git a/build.gradle b/build.gradle index 2790bfbc8..9a6bdd5e2 100755 --- a/build.gradle +++ b/build.gradle @@ -15,24 +15,13 @@ * along with Baritone. If not, see . */ -buildscript { - dependencies { - classpath "org.ow2.asm:asm:9.3" - } -} - -plugins { - id "architectury-plugin" version "3.4.135" - id 'dev.architectury.loom' version '0.12.0.282' apply false -} - -subprojects { +allprojects { apply plugin: 'java' + apply plugin: "xyz.wagyourtail.unimined" apply plugin: "maven-publish" - apply plugin: "dev.architectury.loom" archivesBaseName = rootProject.archives_base_name - def vers = 'git describe --always --tags --dirty'.execute().text.trim(); + def vers = 'git describe --always --tags --dirty'.execute().text.trim() if (!vers.startsWith("v")) { println "git doesn't appear to be installed!" println "using version number: " + rootProject.mod_version @@ -44,36 +33,15 @@ subprojects { sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17 - loom { - silentMojangMappingsLicense() - } - - dependencies { - minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" - // The following line declares the mojmap mappings, you may use other mappings as well - mappings loom.officialMojangMappings() - // The following line declares the yarn mappings you may select this one as well. - // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" - } - - tasks.withType(JavaCompile).configureEach { - it.options.encoding = "UTF-8" - - def targetVersion = 17 - if (JavaVersion.current().isJava9Compatible()) { - it.options.release = targetVersion - } - } -} - -allprojects { - apply plugin: "architectury-plugin" - repositories { maven { name = 'spongepowered-repo' url = 'https://repo.spongepowered.org/repository/maven-public/' } + maven { + name = 'fabric-maven' + url = 'https://maven.fabricmc.net/' + } maven { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' @@ -92,4 +60,79 @@ allprojects { } mavenCentral() } + + dependencies { + minecraft "net.minecraft:minecraft:${rootProject.minecraft_version}" + // The following line declares the mojmap mappings, you may use other mappings as well + mappings "net.fabricmc:intermediary:${rootProject.minecraft_version}:v2" + mappings "net.minecraft:minecraft:${rootProject.minecraft_version}:client-mappings" + + implementation "org.spongepowered:mixin:0.8.5" + implementation "org.ow2.asm:asm:9.3" + // The following line declares the yarn mappings you may select this one as well. + // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" + } + + tasks.withType(JavaCompile).configureEach { + it.options.encoding = "UTF-8" + + def targetVersion = 17 + if (JavaVersion.current().isJava9Compatible()) { + it.options.release = targetVersion + } + } +} + +minecraft { + runs.off = true +} + +archivesBaseName = archivesBaseName + "-common" + +sourceSets { + api { + compileClasspath += main.compileClasspath + runtimeClasspath += main.runtimeClasspath + } + main { + compileClasspath += api.output + runtimeClasspath += api.output + } + test { + compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output + runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output + } + launch { + compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output + runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output + } + schematica_api { + compileClasspath += main.compileClasspath + runtimeClasspath += main.runtimeClasspath + } + main { + compileClasspath += schematica_api.output + runtimeClasspath += schematica_api.output + } +} + +dependencies { + testImplementation 'junit:junit:4.13.2' +} + +jar { + from sourceSets.main.output, sourceSets.launch.output, sourceSets.api.output +} + +remapJar { + targetNamespace = "named" + fallbackTargetNamespace = "intermediary" +} + +javadoc { + options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error + options.linkSource true + options.encoding "UTF-8" // allow emoji in comments :^) + source = sourceSets.api.allJava + classpath += sourceSets.api.compileClasspath } \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 8ab0f7014..eb19c7f73 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -16,10 +16,25 @@ */ repositories { + mavenLocal() + maven { + name = 'WagYourMaven' + url = 'https://maven.wagyourtail.xyz/snapshots' + } + maven { + name = 'ForgeMaven' + url = 'https://maven.minecraftforge.net/' + } + maven { + name = 'FabricMaven' + url = 'https://maven.fabricmc.net/' + } mavenCentral() } dependencies { - implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' + implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' implementation group: 'commons-io', name: 'commons-io', version: '2.6' + + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.0' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index d3acaa6ed..edcd776a8 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -26,6 +26,9 @@ import org.gradle.api.tasks.compile.ForkOptions; import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.internal.jvm.Jvm; +import xyz.wagyourtail.unimined.api.Constants; +import xyz.wagyourtail.unimined.api.minecraft.EnvType; +import xyz.wagyourtail.unimined.api.minecraft.MinecraftProvider; import java.io.*; import java.net.MalformedURLException; @@ -81,29 +84,14 @@ protected void exec() throws Exception { cleanup(); } - private boolean isMcJar(File f) { - return f.getName().startsWith(compType.equals("FORGE") ? "forge-" : "minecraft-") && f.getName().contains("minecraft-merged-named"); + MinecraftProvider provider = this.getProject().getExtensions().getByType(MinecraftProvider.class); + + private File getMcJar() { + return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdFallbackNamespace()).toFile(); } - private File getMcJar() throws IOException { - File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() - .stream() - .filter(this::isMcJar) - .map(f -> { - switch (compType) { - case "OFFICIAL": - return new File(f.getParentFile().getParentFile(), "minecraft-merged.jar"); - case "FABRIC": - return new File(f.getParentFile().getParentFile(), "minecraft-merged-intermediary.jar"); - case "FORGE": - return new File(f.getParentFile().getParentFile(), f.getName().replace("-named.jar", "-srg.jar")); - } - return null; - }) - .findFirst() - .get(); - if (!mcClientJar.exists()) throw new IOException("Failed to find minecraft! " + mcClientJar.getAbsolutePath()); - return mcClientJar; + private boolean isMcJar(File f) { + return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f); } private void processArtifact() throws Exception { diff --git a/common/build.gradle b/common/build.gradle deleted file mode 100644 index 1b356b3d6..000000000 --- a/common/build.gradle +++ /dev/null @@ -1,136 +0,0 @@ -import baritone.gradle.task.CreateDistTask -import baritone.gradle.task.ProguardTask - -architectury { - injectInjectables = false - common(System.getProperty("Baritone.enabled_platforms").split(",")) -} - -//loom { -// mixin { -// legacyRemapToNamespace = "official" -// } -//} - -// ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts -sourceSets { - realmain { - java { - java { - srcDir "$rootDir/src/main/java" - } - resources { - srcDir "$rootDir/src/main/resources" - } - } - } - api { - compileClasspath += main.compileClasspath - runtimeClasspath += main.runtimeClasspath - java { - java { - srcDir "$rootDir/src/api/java" - } - resources { - srcDir "$rootDir/src/api/resources" - } - } - } - realmain { - compileClasspath += main.compileClasspath + api.output - runtimeClasspath += main.runtimeClasspath + api.output - } - test { - compileClasspath += realmain.compileClasspath + realmain.output - runtimeClasspath += realmain.runtimeClasspath + realmain.output - java { - java { - srcDir "$rootDir/src/test/java" - } - resources { - srcDir "$rootDir/src/test/resources" - } - } - } - main { - compileClasspath += realmain.output + api.output - runtimeClasspath += realmain.output + api.output - java { - java { - srcDir "$rootDir/src/launch/java" - } - resources { - srcDir "$rootDir/src/launch/resources" - } - } - } - schematica_api { - compileClasspath += realmain.compileClasspath - runtimeClasspath += realmain.runtimeClasspath - java { - java { - srcDir "$rootDir/src/schematica_api/java" - } - resources { - srcDir "$rootDir/src/schematica_api/resources" - } - } - } - realmain { - compileClasspath += schematica_api.output - runtimeClasspath += schematica_api.output - } -} - -configurations { - transformProductionTweaker { - canBeConsumed = true - canBeResolved = false - // If you want this configuration to share the same dependencies, otherwise omit this line - extendsFrom implementation, runtimeOnly - } -} - -dependencies { - // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies - // Do NOT use other classes from fabric loader - modCompileOnly "net.fabricmc:fabric-loader:${project.fabric_version}" - - compileOnly 'com.google.code.findbugs:jsr305:3.0.2' - - testImplementation 'junit:junit:4.12' -} - -javadoc { - options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error - options.linkSource true - options.encoding "UTF-8" // allow emoji in comments :^) - source = sourceSets.api.allJava - classpath += sourceSets.api.compileClasspath -} - -jar { - classifier "dev" - from sourceSets.main.output, sourceSets.realmain.output, sourceSets.api.output - - preserveFileTimestamps = false - reproducibleFileOrder = true - - manifest { - attributes( - 'MixinConfigs': 'mixins.baritone.json', - "MixinConnector": "baritone.launch.BaritoneMixinConnector", - - 'Implementation-Title': 'Baritone', - 'Implementation-Version': version, - ) - } -} - - - -task removeDist(type: Delete) { - delete new File(rootProject.rootDir, "dist") -} - -clean.finalizedBy(removeDist) \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index 86aab9dd8..5117241ff 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -24,8 +24,7 @@ plugins { archivesBaseName = archivesBaseName + "-" + project.name -architectury { - platformSetupLoomIde() +minecraft { fabric() } @@ -34,14 +33,17 @@ configurations { shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common - developmentFabric.extendsFrom common } dependencies { - modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" + fabric "net.fabricmc:fabric-loader:${project.fabric_version}" - common(project(path: ":common", configuration: "namedElements")) { transitive false } - shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } + // because of multiple sourcesets `common project(":")` doesn't work + for (sourceSet in rootProject.sourceSets) { + if (sourceSet == rootProject.sourceSets.test) continue + common sourceSet.output + shadowCommon sourceSet.output + } } processResources { @@ -58,7 +60,7 @@ shadowJar { } remapJar { - input.set shadowJar.archiveFile + inputFile.set shadowJar.archiveFile dependsOn shadowJar classifier null } diff --git a/forge/build.gradle b/forge/build.gradle index f1cabe46d..133cdf1b1 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -24,49 +24,52 @@ plugins { archivesBaseName = archivesBaseName + "-" + project.name -architectury { - platformSetupLoomIde() - forge() -} - -loom { +minecraft { forge { - mixinConfig 'mixins.baritone.json' + devFallbackNamespace = "intermediary" + mixinConfig = ["mixins.baritone.json"] } } +//loom { +// forge { +// mixinConfig 'mixins.baritone.json' +// } +//} + configurations { common shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common - developmentFabric.extendsFrom common } dependencies { forge "net.minecraftforge:forge:${rootProject.forge_version}" - common(project(path: ":common", configuration: "namedElements")) { transitive false } - shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive false } + // because of multiple sourcesets `common project(":")` doesn't work + for (sourceSet in rootProject.sourceSets) { + if (sourceSet == rootProject.sourceSets.test) continue + common sourceSet.output + shadowCommon sourceSet.output + } } processResources { inputs.property "version", project.version - filesMatching("fabric.mod.json") { + filesMatching("META-INF/mods.toml") { expand "version": project.version } } shadowJar { - exclude("fabric.mod.json") - configurations = [project.configurations.shadowCommon] classifier "dev-shadow" } remapJar { - input.set shadowJar.archiveFile + inputFile.set shadowJar.archiveFile dependsOn shadowJar classifier null } @@ -99,7 +102,6 @@ task proguard(type: ProguardTask) { task createDist(type: CreateDistTask, dependsOn: proguard) - build.finalizedBy(createDist) publishing { diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 1ad269fce..9297ed74b 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -15,7 +15,7 @@ issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional # The modid of the mod modId="baritoe" #mandatory # The version number of the mod - there's a few well known ${} variables useable here or just hardcode it -version="${file.jarVersion}" #mandatory +version="${version}" #mandatory # A display name for the mod displayName="Baritone" #mandatory # A URL for the "homepage" for this mod, displayed in the mod UI diff --git a/forge/src/main/resources/pack.mcmeta b/forge/src/main/resources/pack.mcmeta new file mode 100644 index 000000000..663d1787a --- /dev/null +++ b/forge/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "null", + "pack_format": 8 + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index bd327cf41..af7a60880 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,5 +5,5 @@ maven_group=baritone archives_base_name=baritone minecraft_version=1.19.2 -forge_version=1.19.2-43.0.0 +forge_version=1.19.2-43.1.65 fabric_version=0.14.9 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 84d1f85fd..00e33edef 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index 7c572072c..2475b0845 100755 --- a/settings.gradle +++ b/settings.gradle @@ -17,32 +17,30 @@ pluginManagement { repositories { - maven { url "https://maven.architectury.dev/" } + mavenLocal() maven { - url = 'https://maven.fabricmc.net/' - } - maven { - name = 'forge' - url = 'https://files.minecraftforge.net/maven' + name = 'WagYourMaven' + url = 'https://maven.wagyourtail.xyz/snapshots' } maven { - name = 'impactdevelopment-repo' - url = 'https://impactdevelopment.github.io/maven/' + name = 'ForgeMaven' + url = 'https://maven.minecraftforge.net/' } maven { - url = 'https://www.dogforce-games.com/maven/' - } - maven { - url = 'https://libraries.minecraft.net/' + name = 'FabricMaven' + url = 'https://maven.fabricmc.net/' } mavenCentral() - gradlePluginPortal() + gradlePluginPortal() { + content { + excludeGroup "org.apache.logging.log4j" + } + } } } rootProject.name = 'baritone' -include("common") include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { System.setProperty("Baritone.enabled_platforms", "fabric,forge") diff --git a/src/launch/resources/pack.mcmeta b/src/launch/resources/pack.mcmeta deleted file mode 100644 index 1bc616027..000000000 --- a/src/launch/resources/pack.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "pack": { - "description": "baritoe", - "pack_format": 5 - } -} diff --git a/tweaker/build.gradle b/tweaker/build.gradle index 9facdb8d2..c3554f636 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -1,111 +1,53 @@ +/* + * 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 . + */ + import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask +import baritone.gradle.task.TweakerJsonAssembler -architectury { - injectInjectables = false +plugins { + id "com.github.johnrengelman.shadow" version "7.0.0" } -loom { - mixin { - refmapTargetNamespace = "official" - defaultRefmapName = "baritone-common-refmap.json" - } -} - -loom.mixin.useLegacyMixinAp = false; - -// ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts -sourceSets { - realmain { - java { - java { - srcDir "$rootDir/src/main/java" - } - resources { - srcDir "$rootDir/src/main/resources" - } - } - } - api { - compileClasspath += main.compileClasspath - runtimeClasspath += main.runtimeClasspath - java { - java { - srcDir "$rootDir/src/api/java" - } - resources { - srcDir "$rootDir/src/api/resources" - } - } - } - realmain { - compileClasspath += main.compileClasspath + api.output - runtimeClasspath += main.runtimeClasspath + api.output - } - test { - compileClasspath += realmain.compileClasspath + realmain.output - runtimeClasspath += realmain.runtimeClasspath + realmain.output - java { - java { - srcDir "$rootDir/src/test/java" - } - resources { - srcDir "$rootDir/src/test/resources" - } - } - } - tweaker { - compileClasspath += realmain.output + api.output + main.compileClasspath - runtimeClasspath += realmain.output + api.output + main.compileClasspath - } - main { - compileClasspath += realmain.output + api.output + tweaker.output - runtimeClasspath += realmain.output + api.output + tweaker.output - java { - java { - srcDir "$rootDir/src/launch/java" - } - resources { - srcDir "$rootDir/src/launch/resources" - } - } - } - schematica_api { - compileClasspath += realmain.compileClasspath - runtimeClasspath += realmain.runtimeClasspath - java { - java { - srcDir "$rootDir/src/schematica_api/java" - } - resources { - srcDir "$rootDir/src/schematica_api/resources" - } - } - } - realmain { - compileClasspath += schematica_api.output - runtimeClasspath += schematica_api.output +minecraft { + runs.client = { + mainClass = "net.minecraft.launchwrapper.Launch" + args.addAll(["--tweakClass", "baritone.launch.BaritoneTweaker"]) } } configurations { - transformProductionTweaker { - canBeConsumed = true - canBeResolved = false - // If you want this configuration to share the same dependencies, otherwise omit this line - extendsFrom implementation, runtimeOnly - } + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common } dependencies { - // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies - // Do NOT use other classes from fabric loader - modCompileOnly "net.fabricmc:fabric-loader:${project.fabric_version}" + implementation "org.spongepowered:mixin:0.8.5" + + // for some reason mixin isn't including these... + implementation "org.ow2.asm:asm:9.3" + implementation "org.ow2.asm:asm-tree:9.3" + implementation "org.ow2.asm:asm-commons:9.3" + implementation "org.ow2.asm:asm-util:9.3" + implementation "org.ow2.asm:asm-analysis:9.3" - // want in the pom but not to compile against as it's also provided by loom - runtimeOnly "org.spongepowered:mixin:0.8.4" - // this makes it compile with the forge tweak stuff implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' implementation('net.minecraft:launchwrapper:of-2.3') { exclude module: 'lwjgl' @@ -114,20 +56,21 @@ dependencies { compileOnly 'com.google.code.findbugs:jsr305:3.0.2' - testImplementation 'junit:junit:4.12' + // because of multiple sourcesets `common project(":")` doesn't work + for (sourceSet in rootProject.sourceSets) { + if (sourceSet == rootProject.sourceSets.test) continue + common sourceSet.output + shadowCommon sourceSet.output + } } -javadoc { - options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error - options.linkSource true - options.encoding "UTF-8" // allow emoji in comments :^) - source = sourceSets.api.allJava - classpath += sourceSets.api.compileClasspath +shadowJar { + configurations = [project.configurations.shadowCommon] + classifier "dev-shadow" } jar { classifier "dev" - from sourceSets.main.output, sourceSets.realmain.output, sourceSets.api.output, sourceSets.tweaker.output preserveFileTimestamps = false reproducibleFileOrder = true @@ -143,10 +86,6 @@ jar { } } -remapJar { - targetNamespace = 'official' -} - task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' extract 'proguard-7.2.1/lib/proguard.jar' diff --git a/tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java b/tweaker/src/main/java/baritone/launch/BaritoneTweaker.java similarity index 100% rename from tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java rename to tweaker/src/main/java/baritone/launch/BaritoneTweaker.java diff --git a/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java b/tweaker/src/main/java/baritone/launch/LaunchTesting.java similarity index 100% rename from tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java rename to tweaker/src/main/java/baritone/launch/LaunchTesting.java From 3e082b21d584e6c05544ee0505cd40c79d4eb6fd Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 2 Dec 2022 01:17:25 -0700 Subject: [PATCH 422/935] loottables broke & #click not working --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 4 +-- settings.gradle | 3 +- .../api/command/datatypes/BlockById.java | 9 ++--- .../command/datatypes/EntityClassById.java | 9 ++--- .../api/event/events/RenderEvent.java | 2 +- .../baritone/api/utils/BlockOptionalMeta.java | 24 +++++++++----- .../java/baritone/api/utils/BlockUtils.java | 5 +-- .../java/baritone/api/utils/SettingsUtil.java | 5 +-- .../utils/accessors/IServerPackSource.java | 26 +++++++++++++++ .../mixins/MixinClientPlayNetHandler.java | 24 ++++++++++++++ .../mixins/MixinClientPlayerEntity.java | 17 ---------- .../launch/mixins/MixinServerPackSource.java | 33 +++++++++++++++++++ .../launch/mixins/MixinWorldRenderer.java | 2 +- src/launch/resources/mixins.baritone.json | 1 + .../command/defaults/FindCommand.java | 5 +-- .../command/defaults/FollowCommand.java | 3 +- .../pathing/movement/MovementHelper.java | 2 +- src/main/java/baritone/utils/GuiClick.java | 15 ++++----- src/main/java/baritone/utils/IRenderer.java | 2 +- .../java/baritone/utils/PathRenderer.java | 2 +- .../format/defaults/LitematicaSchematic.java | 3 +- .../format/defaults/MCEditSchematic.java | 3 +- .../format/defaults/SpongeSchematic.java | 3 +- 25 files changed, 143 insertions(+), 63 deletions(-) create mode 100644 src/api/java/baritone/utils/accessors/IServerPackSource.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinServerPackSource.java diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 539fed3a8..20eb4c80b 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.2" + "minecraft": "1.19.3-rc.1" } } \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 9297ed74b..2a25bf8ed 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.19.2]" +versionRange="[1.19.3]" ordering="NONE" side="BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index af7a60880..be328a8d4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.0-local maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.2 +minecraft_version=1.19.3-rc1 forge_version=1.19.2-43.1.65 -fabric_version=0.14.9 \ No newline at end of file +fabric_version=0.14.11 \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 2475b0845..58b6e203d 100755 --- a/settings.gradle +++ b/settings.gradle @@ -43,7 +43,8 @@ rootProject.name = 'baritone' include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { - System.setProperty("Baritone.enabled_platforms", "fabric,forge") +// System.setProperty("Baritone.enabled_platforms", "fabric,forge") + System.setProperty("Baritone.enabled_platforms", "fabric") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { include(platform) diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 5e63fcf25..db9b48141 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -19,11 +19,12 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import java.util.stream.Stream; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; +import java.util.stream.Stream; + public enum BlockById implements IDatatypeFor { INSTANCE; @@ -31,7 +32,7 @@ public enum BlockById implements IDatatypeFor { public Block get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); Block block; - if ((block = Registry.BLOCK.getOptional(id).orElse(null)) == null) { + if ((block = BuiltInRegistries.BLOCK.getOptional(id).orElse(null)) == null) { throw new IllegalArgumentException("no block found by that id"); } return block; @@ -41,7 +42,7 @@ public Block get(IDatatypeContext ctx) throws CommandException { public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() .append( - Registry.BLOCK.keySet() + BuiltInRegistries.BLOCK.keySet() .stream() .map(Object::toString) ) diff --git a/src/api/java/baritone/api/command/datatypes/EntityClassById.java b/src/api/java/baritone/api/command/datatypes/EntityClassById.java index aff7a2d94..d7cb75734 100644 --- a/src/api/java/baritone/api/command/datatypes/EntityClassById.java +++ b/src/api/java/baritone/api/command/datatypes/EntityClassById.java @@ -19,11 +19,12 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import java.util.stream.Stream; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; +import java.util.stream.Stream; + public enum EntityClassById implements IDatatypeFor { INSTANCE; @@ -31,7 +32,7 @@ public enum EntityClassById implements IDatatypeFor { public EntityType get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); EntityType entity; - if ((entity = Registry.ENTITY_TYPE.getOptional(id).orElse(null)) == null) { + if ((entity = BuiltInRegistries.ENTITY_TYPE.getOptional(id).orElse(null)) == null) { throw new IllegalArgumentException("no entity found by that id"); } return entity; @@ -40,7 +41,7 @@ public EntityType get(IDatatypeContext ctx) throws CommandException { @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() - .append(Registry.ENTITY_TYPE.stream().map(Object::toString)) + .append(BuiltInRegistries.ENTITY_TYPE.stream().map(Object::toString)) .filterPrefixNamespaced(ctx.getConsumer().getString()) .sortAlphabetically() .stream(); diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java index cb7a0414c..a12a4dd5c 100644 --- a/src/api/java/baritone/api/event/events/RenderEvent.java +++ b/src/api/java/baritone/api/event/events/RenderEvent.java @@ -18,7 +18,7 @@ package baritone.api.event.events; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix4f; +import org.joml.Matrix4f; /** * @author Brady diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index dfc27e664..44a284e9d 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -18,19 +18,24 @@ package baritone.api.utils; import baritone.api.utils.accessor.IItemStack; +import baritone.utils.accessors.IServerPackSource; import com.google.common.collect.ImmutableSet; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.netty.util.concurrent.ThreadPerTaskExecutor; +import net.minecraft.SharedConstants; import net.minecraft.core.BlockPos; -import net.minecraft.resources.*; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.packs.PackResources; -import net.minecraft.server.packs.PackType; -import net.minecraft.server.packs.repository.Pack; +import net.minecraft.server.packs.*; +import net.minecraft.server.packs.metadata.pack.PackMetadataSection; import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.ServerPacksSource; +import net.minecraft.server.packs.resources.MultiPackResourceManager; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; +import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; @@ -42,6 +47,8 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; +import org.apache.logging.log4j.core.jmx.Server; + import javax.annotation.Nonnull; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -144,17 +151,16 @@ public BlockState getAnyBlockState() { public static LootTables getManager() { if (manager == null) { - PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource()); - rpl.reload(); - PackResources thePack = rpl.getAvailablePacks().iterator().next().open(); + MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(((IServerPackSource) new ServerPacksSource()).callCreateVanillaPackSource())); ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); manager = new LootTables(predicate); resourceManager.registerReloadListener(manager); try { - resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), Collections.singletonList(thePack)).done().get(); + resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), resources.listPacks().toList()).done().get(); } catch (Exception exception) { throw new RuntimeException(exception); } + } return manager; } @@ -173,7 +179,7 @@ private static synchronized List drops(Block b) { // the other overload for generate doesnt work in forge because forge adds code that requires a non null world getManager().get(lootTableLocation).getRandomItems( - new LootContext.Builder((ServerLevel) null) + new LootContext.Builder((ServerLevel null) .withRandom(RandomSource.create()) .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index cc4204f8e..a43d78e87 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -20,6 +20,7 @@ import java.util.HashMap; import java.util.Map; import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; @@ -28,7 +29,7 @@ public class BlockUtils { private static transient Map resourceCache = new HashMap<>(); public static String blockToString(Block block) { - ResourceLocation loc = Registry.BLOCK.getKey(block); + ResourceLocation loc = BuiltInRegistries.BLOCK.getKey(block); String name = loc.getPath(); // normally, only write the part after the minecraft: if (!loc.getNamespace().equals("minecraft")) { // Baritone is running on top of forge with mods installed, perhaps? @@ -56,7 +57,7 @@ public static Block stringToBlockNullable(String name) { if (resourceCache.containsKey(name)) { return null; // cached as null } - block = Registry.BLOCK.getOptional(ResourceLocation.tryParse(name.contains(":") ? name : "minecraft:" + name)).orElse(null); + block = BuiltInRegistries.BLOCK.getOptional(ResourceLocation.tryParse(name.contains(":") ? name : "minecraft:" + name)).orElse(null); Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); resourceCache = copy; diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 2ed98d92f..3e5e1342d 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -23,6 +23,7 @@ import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; @@ -252,8 +253,8 @@ private enum Parser implements ISettingParser { ), ITEM( Item.class, - str -> Registry.ITEM.get(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? - item -> Registry.ITEM.getKey(item).toString() + str -> BuiltInRegistries.ITEM.get(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? + item -> BuiltInRegistries.ITEM.getKey(item).toString() ), LIST() { @Override diff --git a/src/api/java/baritone/utils/accessors/IServerPackSource.java b/src/api/java/baritone/utils/accessors/IServerPackSource.java new file mode 100644 index 000000000..048c27b5c --- /dev/null +++ b/src/api/java/baritone/utils/accessors/IServerPackSource.java @@ -0,0 +1,26 @@ +/* + * 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.accessors; + +import net.minecraft.server.packs.VanillaPackResources; + +public interface IServerPackSource { + + VanillaPackResources callCreateVanillaPackSource(); + +} diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index df3fbf09f..e718685c9 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -20,14 +20,19 @@ import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import baritone.api.event.events.ChatEvent; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.type.EventState; import baritone.cache.CachedChunk; +import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.*; import net.minecraft.world.level.ChunkPos; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -63,6 +68,25 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { } }*/ + @Shadow @Final private Minecraft minecraft; + + @Inject( + method = "sendChat(Ljava/lang/String;)V", + at = @At("HEAD"), + cancellable = true + ) + private void sendChatMessage(String string, CallbackInfo ci) { + ChatEvent event = new ChatEvent(string); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(this.minecraft.player); + if (baritone == null) { + return; + } + baritone.getGameEventHandler().onSendChatMessage(event); + if (event.isCancelled()) { + ci.cancel(); + } + } + @Inject( method = "handleLevelChunkWithLight", at = @At("RETURN") diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index e5f3e0375..22ca083e0 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -41,23 +41,6 @@ @Mixin(LocalPlayer.class) public class MixinClientPlayerEntity { - @Inject( - method = "sendChat(Ljava/lang/String;Lnet/minecraft/network/chat/Component;)V", - at = @At("HEAD"), - cancellable = true - ) - private void sendChatMessage(String string, Component component, CallbackInfo ci) { - ChatEvent event = new ChatEvent(string); - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); - if (baritone == null) { - return; - } - baritone.getGameEventHandler().onSendChatMessage(event); - if (event.isCancelled()) { - ci.cancel(); - } - } - @Inject( method = "tick", at = @At( diff --git a/src/launch/java/baritone/launch/mixins/MixinServerPackSource.java b/src/launch/java/baritone/launch/mixins/MixinServerPackSource.java new file mode 100644 index 000000000..a347b1707 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinServerPackSource.java @@ -0,0 +1,33 @@ +/* + * 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.utils.accessors.IServerPackSource; +import net.minecraft.server.packs.VanillaPackResources; +import net.minecraft.server.packs.repository.ServerPacksSource; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(ServerPacksSource.class) +public abstract class MixinServerPackSource implements IServerPackSource { + + @Invoker + @Override + public abstract VanillaPackResources callCreateVanillaPackSource(); + +} diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java index 622721281..a6cf48899 100644 --- a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java @@ -21,11 +21,11 @@ import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix4f; import net.minecraft.client.Camera; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LightTexture; +import org.joml.Matrix4f; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 92e057061..d48e19ef1 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -23,6 +23,7 @@ "MixinNetworkManager", "MixinPlayerController", "MixinScreen", + "MixinServerPackSource", "MixinWorldRenderer" ] } \ No newline at end of file diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 2c5ca7c97..7433cf726 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -27,6 +27,7 @@ import baritone.cache.CachedChunk; import net.minecraft.core.Registry; import net.minecraft.ChatFormatting; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; @@ -57,7 +58,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { Component[] components = toFind.stream() .flatMap(block -> ctx.worldData().getCachedWorld().getLocationsOf( - Registry.BLOCK.getKey(block).getPath(), + BuiltInRegistries.BLOCK.getKey(block).getPath(), Integer.MAX_VALUE, origin.x, origin.y, @@ -93,7 +94,7 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman return new TabCompleteHelper() .append( CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream() - .map(Registry.BLOCK::getKey) + .map(BuiltInRegistries.BLOCK::getKey) .map(Object::toString) ) .filterPrefixNamespaced(args.getString()) diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index 46c6a1c60..b7e708377 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -31,6 +31,7 @@ import java.util.function.Predicate; import java.util.stream.Stream; import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -84,7 +85,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } else { logDirect("Following these types of entities:"); classes.stream() - .map(Registry.ENTITY_TYPE::getKey) + .map(BuiltInRegistries.ENTITY_TYPE::getKey) .map(Objects::requireNonNull) .map(ResourceLocation::toString) .forEach(this::logDirect); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 658e044aa..8efafa3db 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -545,7 +545,7 @@ static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterf static boolean isBlockNormalCube(BlockState state) { Block block = state.getBlock(); - if (block instanceof BambooBlock + if (block instanceof BambooStalkBlock || block instanceof MovingPistonBlock || block instanceof ScaffoldingBlock || block instanceof ShulkerBoxBlock diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index d0a435e1f..876d5fb42 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -24,8 +24,6 @@ import baritone.api.utils.Helper; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector4f; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; @@ -39,6 +37,8 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; +import org.joml.Matrix4f; +import org.joml.Vector4f; import java.awt.*; import java.util.Collections; @@ -118,8 +118,8 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { } public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { - this.projectionViewMatrix = projectionMatrix.copy(); - this.projectionViewMatrix.multiply(modelViewStack.last().pose()); + this.projectionViewMatrix = new Matrix4f(projectionMatrix); + this.projectionViewMatrix.mul(modelViewStack.last().pose()); this.projectionViewMatrix.invert(); if (currentMouseOver != null) { @@ -158,12 +158,9 @@ private Vec3 toWorld(double x, double y, double z) { y = y * 2 - 1; Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F); - pos.transform(this.projectionViewMatrix); - if (pos.w() == 0) { - return null; - } + projectionViewMatrix.transformProject(pos); - pos.perspectiveDivide(); + pos.normalize(); return new Vec3(pos.x(), pos.y(), pos.z()); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index d07bf44fa..380fbd9e0 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -23,9 +23,9 @@ import baritone.utils.accessor.IEntityRenderManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import com.mojang.math.Matrix4f; import java.awt.*; import net.minecraft.world.phys.AABB; +import org.joml.Matrix4f; import static org.lwjgl.opengl.GL11.*; diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index db7d11b34..55d721d8f 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -30,7 +30,6 @@ import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.math.Matrix4f; import java.awt.*; import java.util.Collection; import java.util.Collections; @@ -45,6 +44,7 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import org.joml.Matrix4f; import static org.lwjgl.opengl.GL11.*; diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 24b0bc13e..89ab4eb7f 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -21,6 +21,7 @@ import baritone.utils.schematic.StaticSchematic; import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.resources.ResourceLocation; @@ -94,7 +95,7 @@ private static BlockState[] getBlockList(ListTag blockStatePalette) { BlockState[] blockList = new BlockState[blockStatePalette.size()]; for (int i = 0; i < blockStatePalette.size(); i++) { - Block block = Registry.BLOCK.get(new ResourceLocation((((CompoundTag) blockStatePalette.get(i)).getString("Name")))); + Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation((((CompoundTag) blockStatePalette.get(i)).getString("Name")))); CompoundTag properties = ((CompoundTag) blockStatePalette.get(i)).getCompound("Properties"); blockList[i] = getBlockState(block, properties); diff --git a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java index 4693ea387..3018021a5 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java @@ -19,6 +19,7 @@ import baritone.utils.schematic.StaticSchematic; import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.datafix.fixes.ItemIdFix; @@ -62,7 +63,7 @@ public MCEditSchematic(CompoundTag schematic) { // additional is 0 through 15 inclusive since it's & 0xF above blockID |= additional[blockInd] << 8; } - Block block = Registry.BLOCK.get(ResourceLocation.tryParse(ItemIdFix.getItem(blockID))); + Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.tryParse(ItemIdFix.getItem(blockID))); // int meta = metadata[blockInd] & 0xFF; // this.states[x][z][y] = block.getStateFromMeta(meta); this.states[x][z][y] = block.defaultBlockState(); diff --git a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java index 3c00b08c6..12163cbff 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java @@ -26,6 +26,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; @@ -106,7 +107,7 @@ private SerializedBlockState(ResourceLocation resourceLocation, Map { From 4168401aa1ce2d2423602ea21e1527d54846d8fd Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 2 Dec 2022 14:09:47 -0700 Subject: [PATCH 423/935] fix items and #click --- .../baritone/api/utils/BlockOptionalMeta.java | 87 ++++++++++++++----- src/main/java/baritone/utils/GuiClick.java | 9 +- tweaker/build.gradle | 2 +- 3 files changed, 72 insertions(+), 26 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 44a284e9d..2c192ca63 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -20,26 +20,31 @@ import baritone.api.utils.accessor.IItemStack; import baritone.utils.accessors.IServerPackSource; import com.google.common.collect.ImmutableSet; -import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.mojang.authlib.minecraft.client.MinecraftClient; import io.netty.util.concurrent.ThreadPerTaskExecutor; -import net.minecraft.SharedConstants; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.server.packs.*; -import net.minecraft.server.packs.metadata.pack.PackMetadataSection; -import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.ServerPacksSource; import net.minecraft.server.packs.resources.MultiPackResourceManager; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; -import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.CustomSpawner; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.storage.LevelStorageSource; +import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.loot.BuiltInLootTables; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootTables; @@ -47,11 +52,13 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; -import org.apache.logging.log4j.core.jmx.Server; +import sun.misc.Unsafe; import javax.annotation.Nonnull; +import java.lang.reflect.Field; import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -63,7 +70,7 @@ public final class BlockOptionalMeta { private final ImmutableSet stateHashes; private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); - private static LootTables manager; + private static LootTables lootTables; private static PredicateManager predicate = new PredicateManager(); private static Map> drops = new HashMap<>(); @@ -150,11 +157,11 @@ public BlockState getAnyBlockState() { } public static LootTables getManager() { - if (manager == null) { + if (lootTables == null) { MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(((IServerPackSource) new ServerPacksSource()).callCreateVanillaPackSource())); ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); - manager = new LootTables(predicate); - resourceManager.registerReloadListener(manager); + lootTables = new LootTables(predicate); + resourceManager.registerReloadListener(lootTables); try { resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), resources.listPacks().toList()).done().get(); } catch (Exception exception) { @@ -162,7 +169,7 @@ public static LootTables getManager() { } } - return manager; + return lootTables; } public static PredicateManager getPredicateManager() { @@ -176,20 +183,54 @@ private static synchronized List drops(Block b) { return Collections.emptyList(); } else { List items = new ArrayList<>(); - - // the other overload for generate doesnt work in forge because forge adds code that requires a non null world - getManager().get(lootTableLocation).getRandomItems( - new LootContext.Builder((ServerLevel null) - .withRandom(RandomSource.create()) - .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) - .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) - .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) - .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) - .create(LootContextParamSets.BLOCK), + try { + getManager().get(lootTableLocation).getRandomItems( + new LootContext.Builder(ServerLevelStub.fastCreate()) + .withRandom(RandomSource.create()) + .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) + .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) + .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) + .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) + .create(LootContextParamSets.BLOCK), stack -> items.add(stack.getItem()) - ); + ); + } catch (Exception e) { + e.printStackTrace(); + } return items; } }); } + + private static class ServerLevelStub extends ServerLevel { + private static Minecraft client = Minecraft.getInstance(); + private static Unsafe unsafe = getUnsafe(); + public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.LevelStorageAccess $$2, ServerLevelData $$3, ResourceKey $$4, LevelStem $$5, ChunkProgressListener $$6, boolean $$7, long $$8, List $$9, boolean $$10) { + super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10); + } + + @Override + public FeatureFlagSet enabledFeatures() { + return client.level.enabledFeatures(); + } + + public static ServerLevelStub fastCreate() { + try { + return (ServerLevelStub) unsafe.allocateInstance(ServerLevelStub.class); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } + } + + public static Unsafe getUnsafe() { + try { + Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); + theUnsafe.setAccessible(true); + return (Unsafe) theUnsafe.get(null); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + } } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 876d5fb42..b3b2dc500 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -80,6 +80,7 @@ public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) HitResult result = player.level.clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); if (result != null && result.getType() == HitResult.Type.BLOCK) { currentMouseOver = ((BlockHitResult) result).getBlockPos(); + System.out.println("currentMouseOver = " + currentMouseOver); } } } @@ -158,9 +159,13 @@ private Vec3 toWorld(double x, double y, double z) { y = y * 2 - 1; Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F); - projectionViewMatrix.transformProject(pos); + projectionViewMatrix.transform(pos); - pos.normalize(); + if (pos.w() == 0) { + return null; + } + + pos.mul(1/pos.w()); return new Vec3(pos.x(), pos.y(), pos.z()); } } diff --git a/tweaker/build.gradle b/tweaker/build.gradle index c3554f636..e814a9f52 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -17,7 +17,7 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask -import baritone.gradle.task.TweakerJsonAssembler +//import baritone.gradle.task.TweakerJsonAssembler plugins { id "com.github.johnrengelman.shadow" version "7.0.0" From e7252f5b3f249ae378449f1404897638cbcdc88c Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 2 Dec 2022 14:23:16 -0700 Subject: [PATCH 424/935] remove the mixin from api --- .../baritone/api/utils/BlockOptionalMeta.java | 23 +++++++++++-- .../utils/accessors/IServerPackSource.java | 26 --------------- .../launch/mixins/MixinServerPackSource.java | 33 ------------------- src/launch/resources/mixins.baritone.json | 1 - 4 files changed, 20 insertions(+), 63 deletions(-) delete mode 100644 src/api/java/baritone/utils/accessors/IServerPackSource.java delete mode 100644 src/launch/java/baritone/launch/mixins/MixinServerPackSource.java diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 2c192ca63..b144240d0 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -18,9 +18,7 @@ package baritone.api.utils; import baritone.api.utils.accessor.IItemStack; -import baritone.utils.accessors.IServerPackSource; import com.google.common.collect.ImmutableSet; -import com.mojang.authlib.minecraft.client.MinecraftClient; import io.netty.util.concurrent.ThreadPerTaskExecutor; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; @@ -56,6 +54,7 @@ import javax.annotation.Nonnull; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; @@ -156,9 +155,26 @@ public BlockState getAnyBlockState() { return null; } + private static Method getVanillaServerPack; + + private static VanillaPackResources getVanillaServerPack() { + if (getVanillaServerPack == null) { + getVanillaServerPack = Arrays.stream(ServerPacksSource.class.getDeclaredMethods()).filter(field -> field.getReturnType() == VanillaPackResources.class).findFirst().orElseThrow(); + getVanillaServerPack.setAccessible(true); + } + + try { + return (VanillaPackResources) getVanillaServerPack.invoke(null); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + public static LootTables getManager() { if (lootTables == null) { - MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(((IServerPackSource) new ServerPacksSource()).callCreateVanillaPackSource())); + MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(getVanillaServerPack())); ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); lootTables = new LootTables(predicate); resourceManager.registerReloadListener(lootTables); @@ -211,6 +227,7 @@ public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.Lev @Override public FeatureFlagSet enabledFeatures() { + assert client.level != null; return client.level.enabledFeatures(); } diff --git a/src/api/java/baritone/utils/accessors/IServerPackSource.java b/src/api/java/baritone/utils/accessors/IServerPackSource.java deleted file mode 100644 index 048c27b5c..000000000 --- a/src/api/java/baritone/utils/accessors/IServerPackSource.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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.accessors; - -import net.minecraft.server.packs.VanillaPackResources; - -public interface IServerPackSource { - - VanillaPackResources callCreateVanillaPackSource(); - -} diff --git a/src/launch/java/baritone/launch/mixins/MixinServerPackSource.java b/src/launch/java/baritone/launch/mixins/MixinServerPackSource.java deleted file mode 100644 index a347b1707..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinServerPackSource.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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.utils.accessors.IServerPackSource; -import net.minecraft.server.packs.VanillaPackResources; -import net.minecraft.server.packs.repository.ServerPacksSource; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(ServerPacksSource.class) -public abstract class MixinServerPackSource implements IServerPackSource { - - @Invoker - @Override - public abstract VanillaPackResources callCreateVanillaPackSource(); - -} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index d48e19ef1..92e057061 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -23,7 +23,6 @@ "MixinNetworkManager", "MixinPlayerController", "MixinScreen", - "MixinServerPackSource", "MixinWorldRenderer" ] } \ No newline at end of file From e6642a2122656cf755fe0004c121bc92e4479a91 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 2 Dec 2022 14:24:29 -0700 Subject: [PATCH 425/935] fix ci --- buildSrc/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index eb19c7f73..7e0f06f82 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -19,7 +19,7 @@ repositories { mavenLocal() maven { name = 'WagYourMaven' - url = 'https://maven.wagyourtail.xyz/snapshots' + url = 'https://maven.wagyourtail.xyz/releases' } maven { name = 'ForgeMaven' From 75cd4600a0b16f68194f185e92fcb6f06bba40a8 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 2 Dec 2022 14:31:00 -0700 Subject: [PATCH 426/935] fix proguard not seeing unsafe --- scripts/proguard.pro | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 968b4d7a6..66d72629b 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -340,3 +340,6 @@ public java.lang.String substring(int); public java.lang.String substring(int,int); } + +-keep class sun.misc.Unsafe { *; } +-dontnote sun.misc.Unsafe \ No newline at end of file From f7f0c844073aa55ac470215c69559c765ea86855 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 2 Dec 2022 14:39:57 -0700 Subject: [PATCH 427/935] fix proguard not seeing unsafe 2 --- .../src/main/java/baritone/gradle/task/ProguardTask.java | 1 + scripts/proguard.pro | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index edcd776a8..623f85fad 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -225,6 +225,7 @@ private void generateConfigs() throws Exception { template.add(2, "-libraryjars /jmods/java.base.jmod(!**.jar;!module-info.class)"); template.add(3, "-libraryjars /jmods/java.desktop.jmod(!**.jar;!module-info.class)"); + template.add(4, "-libraryjars /jmods/jdk.unsupported.jmod(!**.jar;!module-info.class)"); { final Stream libraries; diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 66d72629b..86d31247e 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -339,7 +339,4 @@ public int length(); public java.lang.String substring(int); public java.lang.String substring(int,int); -} - --keep class sun.misc.Unsafe { *; } --dontnote sun.misc.Unsafe \ No newline at end of file +} \ No newline at end of file From 386caf5d1e0b47d3ea028c0734b74e3f8b1c6631 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 6 Dec 2022 18:30:43 -0700 Subject: [PATCH 428/935] add parchment back --- build.gradle | 1 + buildSrc/build.gradle | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9a6bdd5e2..471bb608f 100755 --- a/build.gradle +++ b/build.gradle @@ -66,6 +66,7 @@ allprojects { // The following line declares the mojmap mappings, you may use other mappings as well mappings "net.fabricmc:intermediary:${rootProject.minecraft_version}:v2" mappings "net.minecraft:minecraft:${rootProject.minecraft_version}:client-mappings" + mappings "org.parchmentmc.data:parchment-1.19.2:2022.11.27@zip" implementation "org.spongepowered:mixin:0.8.5" implementation "org.ow2.asm:asm:9.3" diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 7e0f06f82..ba889f8aa 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -36,5 +36,5 @@ dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' implementation group: 'commons-io', name: 'commons-io', version: '2.6' - implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.0' + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.1' } \ No newline at end of file From 3a8d438d7cb658dbe2d5c702946beb3da0c7a304 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 7 Dec 2022 22:58:20 -0700 Subject: [PATCH 429/935] update to release --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 20eb4c80b..62a815d0f 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.3-rc.1" + "minecraft": "1.19.3" } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index be328a8d4..f0a7ebcbd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.0-local maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.3-rc1 +minecraft_version=1.19.3 forge_version=1.19.2-43.1.65 fabric_version=0.14.11 \ No newline at end of file From db842445f63ea0c3f208e22fd33b8593809d8083 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 8 Dec 2022 12:31:12 -0700 Subject: [PATCH 430/935] forge support --- buildSrc/build.gradle | 2 +- gradle.properties | 2 +- settings.gradle | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index ba889f8aa..76287e95a 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -36,5 +36,5 @@ dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' implementation group: 'commons-io', name: 'commons-io', version: '2.6' - implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.1' + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.2' } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index f0a7ebcbd..055f0fb38 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,5 +5,5 @@ maven_group=baritone archives_base_name=baritone minecraft_version=1.19.3 -forge_version=1.19.2-43.1.65 +forge_version=1.19.3-44.0.1 fabric_version=0.14.11 \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 58b6e203d..7809c35c6 100755 --- a/settings.gradle +++ b/settings.gradle @@ -43,8 +43,8 @@ rootProject.name = 'baritone' include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { -// System.setProperty("Baritone.enabled_platforms", "fabric,forge") - System.setProperty("Baritone.enabled_platforms", "fabric") + System.setProperty("Baritone.enabled_platforms", "fabric,forge") +// System.setProperty("Baritone.enabled_platforms", "fabric") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { include(platform) From e09127eadf3efe6aee9afd56183c902181737c57 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 10 Dec 2022 16:35:51 -0700 Subject: [PATCH 431/935] allowBreakAnyway should let mining happen --- .../java/baritone/process/MineProcess.java | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 1ec47cd92..08a6791b6 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -102,10 +102,17 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return null; } } + if (!Baritone.settings().allowBreak.value) { - logDirect("Unable to mine when allowBreak is false!"); - cancel(); - return null; + this.filter = new BlockOptionalMetaLookup(filter.blocks() + .stream() + .filter(e -> Baritone.settings().allowBreakAnyway.value.contains(e.getBlock())) + .toArray(BlockOptionalMeta[]::new)); + if (this.filter.blocks().isEmpty()) { + logDirect("Unable to mine when allowBreak is false!"); + cancel(); + return null; + } } updateLoucaSystem(); int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; @@ -467,9 +474,15 @@ public void mineByName(int quantity, String... blocks) { public void mine(int quantity, BlockOptionalMetaLookup filter) { this.filter = filter; if (filter != null && !Baritone.settings().allowBreak.value) { - logDirect("Unable to mine when allowBreak is false!"); - this.mine(quantity, (BlockOptionalMetaLookup) null); - return; + this.filter = new BlockOptionalMetaLookup(filter.blocks() + .stream() + .filter(e -> Baritone.settings().allowBreakAnyway.value.contains(e.getBlock())) + .toArray(BlockOptionalMeta[]::new)); + if (this.filter.blocks().isEmpty()) { + logDirect("Unable to mine when allowBreak is false!"); + this.mine(quantity, (BlockOptionalMetaLookup) null); + return; + } } this.desiredQuantity = quantity; this.knownOreLocations = new ArrayList<>(); From 85087ce04a9130a92059732ca7046be3d39c9f29 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 10 Dec 2022 19:25:57 -0700 Subject: [PATCH 432/935] smarter filter filtering --- .../java/baritone/process/MineProcess.java | 59 +++++++++++-------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 08a6791b6..7666ec7c5 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -103,17 +103,6 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } } - if (!Baritone.settings().allowBreak.value) { - this.filter = new BlockOptionalMetaLookup(filter.blocks() - .stream() - .filter(e -> Baritone.settings().allowBreakAnyway.value.contains(e.getBlock())) - .toArray(BlockOptionalMeta[]::new)); - if (this.filter.blocks().isEmpty()) { - logDirect("Unable to mine when allowBreak is false!"); - cancel(); - return null; - } - } updateLoucaSystem(); int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; List curr = new ArrayList<>(knownOreLocations); @@ -122,7 +111,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { Baritone.getExecutor().execute(() -> rescan(curr, context)); } if (Baritone.settings().legitMine.value) { - addNearby(); + if (!addNearby()) return null; } Optional shaft = curr.stream() .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) @@ -183,6 +172,11 @@ public String displayName0() { } private PathingCommand updateGoal() { + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return null; + } + boolean legit = Baritone.settings().legitMine.value; List locs = knownOreLocations; if (!locs.isEmpty()) { @@ -227,6 +221,7 @@ public double heuristic() { } private void rescan(List already, CalculationContext context) { + BlockOptionalMetaLookup filter = filterFilter(); if (filter == null) { return; } @@ -376,11 +371,18 @@ public static List searchWorld(CalculationContext ctx, BlockOptionalMe return prune(ctx, locs, filter, max, blacklist, dropped); } - private void addNearby() { + private boolean addNearby() { List dropped = droppedItemsScan(); knownOreLocations.addAll(dropped); BlockPos playerFeet = ctx.playerFeet(); BlockStateInterface bsi = new BlockStateInterface(ctx); + + + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return false; + } + int searchDist = 10; double fakedBlockReachDistance = 20; // at least 10 * sqrt(3) with some extra space to account for positioning within the block for (int x = playerFeet.getX() - searchDist; x <= playerFeet.getX() + searchDist; x++) { @@ -398,6 +400,7 @@ private void addNearby() { } } knownOreLocations = prune(new CalculationContext(baritone), knownOreLocations, filter, ORE_LOCATIONS_COUNT, blacklist, dropped); + return true; } private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { @@ -473,16 +476,8 @@ public void mineByName(int quantity, String... blocks) { @Override public void mine(int quantity, BlockOptionalMetaLookup filter) { this.filter = filter; - if (filter != null && !Baritone.settings().allowBreak.value) { - this.filter = new BlockOptionalMetaLookup(filter.blocks() - .stream() - .filter(e -> Baritone.settings().allowBreakAnyway.value.contains(e.getBlock())) - .toArray(BlockOptionalMeta[]::new)); - if (this.filter.blocks().isEmpty()) { - logDirect("Unable to mine when allowBreak is false!"); - this.mine(quantity, (BlockOptionalMetaLookup) null); - return; - } + if (this.filterFilter() == null) { + this.filter = null; } this.desiredQuantity = quantity; this.knownOreLocations = new ArrayList<>(); @@ -494,4 +489,22 @@ public void mine(int quantity, BlockOptionalMetaLookup filter) { rescan(new ArrayList<>(), new CalculationContext(baritone)); } } + + private BlockOptionalMetaLookup filterFilter() { + if (this.filter == null) { + return null; + } + if (!Baritone.settings().allowBreak.value) { + BlockOptionalMetaLookup f = new BlockOptionalMetaLookup(this.filter.blocks() + .stream() + .filter(e -> Baritone.settings().allowBreakAnyway.value.contains(e.getBlock())) + .toArray(BlockOptionalMeta[]::new)); + if (f.blocks().isEmpty()) { + logDirect("Unable to mine when allowBreak is false and target block is not in allowBreakAnyway!"); + return null; + } + return f; + } + return filter; + } } From ea1914a24816ae57daa925132cafce4f7007edc8 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 10 Dec 2022 20:12:51 -0700 Subject: [PATCH 433/935] missed a spot --- src/main/java/baritone/process/MineProcess.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 7666ec7c5..395e99d9a 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -111,7 +111,10 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { Baritone.getExecutor().execute(() -> rescan(curr, context)); } if (Baritone.settings().legitMine.value) { - if (!addNearby()) return null; + if (!addNearby()) { + cancel(); + return null; + } } Optional shaft = curr.stream() .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) From d157756d9438566da4250eb3f26923f7b2d8e639 Mon Sep 17 00:00:00 2001 From: Warpten Date: Mon, 12 Dec 2022 01:08:49 +0100 Subject: [PATCH 434/935] Improve handling spaces in paths during proguard pass --- .../java/baritone/gradle/task/ProguardTask.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 01e561775..1789435f7 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -209,8 +209,8 @@ private void generateConfigs() throws Exception { // Setup the template that will be used to derive the API and Standalone configs List template = Files.readAllLines(getTemporaryFile(PROGUARD_CONFIG_DEST)); - template.add(0, "-injars " + this.artifactPath.toString()); - template.add(1, "-outjars " + this.getTemporaryFile(PROGUARD_EXPORT_PATH)); + template.add(0, "-injars '" + this.artifactPath.toString() + "'"); + template.add(1, "-outjars '" + this.getTemporaryFile(PROGUARD_EXPORT_PATH) + "'"); // Acquire the RT jar using "java -verbose". This doesn't work on Java 9+ Process p = new ProcessBuilder(this.getJavaBinPathForProguard(), "-verbose").start(); @@ -405,9 +405,15 @@ private void runProguard(Path config) throws Exception { Files.delete(this.proguardOut); } - Path proguardJar = getTemporaryFile(PROGUARD_JAR); + // Make paths relative to work directory; fixes spaces in path to config, @"" doesn't work + Path workingDirectory = getTemporaryFile(""); + Path proguardJar = workingDirectory.relativize(getTemporaryFile(PROGUARD_JAR)); + config = workingDirectory.relativize(config); + + // Honestly, if you still have spaces in your path at this point, you're SOL. + Process p = new ProcessBuilder("java", "-jar", proguardJar.toString(), "@" + config.toString()) - .directory(getTemporaryFile("").toFile()) // Set the working directory to the temporary folder] + .directory(workingDirectory.toFile()) // Set the working directory to the temporary folder] .start(); // We can't do output inherit process I/O with gradle for some reason and have it work, so we have to do this From 35b7c48430389e3e956cfd2af24f8f2ca0dec41d Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 12 Dec 2022 12:54:06 -0700 Subject: [PATCH 435/935] some people are getting a null worldData bug. add a debug line to see if its here --- src/main/java/baritone/cache/WorldProvider.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index f4f448106..9c47b0702 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -83,6 +83,7 @@ public final void initWorld(ResourceKey worldKey, DimensionType world) { folderName = mc.getCurrentServer().ip; } else { //replaymod causes null currentServerData and false singleplayer. + System.out.println("BARITONE: setting current world to null"); currentWorld = null; return; } From 2ce60fbb79c7cac7d09320bc89c6a4ed929d38e8 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 12 Dec 2022 13:12:14 -0700 Subject: [PATCH 436/935] fix tweaker build, don't include schematica api --- fabric/build.gradle | 1 + forge/build.gradle | 1 + tweaker/build.gradle | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/fabric/build.gradle b/fabric/build.gradle index 5117241ff..b1e722126 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -41,6 +41,7 @@ dependencies { // because of multiple sourcesets `common project(":")` doesn't work for (sourceSet in rootProject.sourceSets) { if (sourceSet == rootProject.sourceSets.test) continue + if (sourceSet == rootProject.sourceSets.schematica_api) continue common sourceSet.output shadowCommon sourceSet.output } diff --git a/forge/build.gradle b/forge/build.gradle index 133cdf1b1..da2c4e570 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -50,6 +50,7 @@ dependencies { // because of multiple sourcesets `common project(":")` doesn't work for (sourceSet in rootProject.sourceSets) { if (sourceSet == rootProject.sourceSets.test) continue + if (sourceSet == rootProject.sourceSets.schematica_api) continue common sourceSet.output shadowCommon sourceSet.output } diff --git a/tweaker/build.gradle b/tweaker/build.gradle index e814a9f52..3fc0ab3bd 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -59,6 +59,7 @@ dependencies { // because of multiple sourcesets `common project(":")` doesn't work for (sourceSet in rootProject.sourceSets) { if (sourceSet == rootProject.sourceSets.test) continue + if (sourceSet == rootProject.sourceSets.schematica_api) continue common sourceSet.output shadowCommon sourceSet.output } @@ -69,6 +70,13 @@ shadowJar { classifier "dev-shadow" } + +remapJar { + inputFile.set shadowJar.archiveFile + dependsOn shadowJar + classifier null +} + jar { classifier "dev" From 967dc6cbd6f4f24ea030c5f1d4bd80ab3c413389 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 12 Dec 2022 13:23:36 -0700 Subject: [PATCH 437/935] bump unimined version --- buildSrc/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 76287e95a..14b7dc3bb 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -36,5 +36,5 @@ dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' implementation group: 'commons-io', name: 'commons-io', version: '2.6' - implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.2' + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.4' } \ No newline at end of file From 1112feff5bdcda1c627baa6b320e3280f7118200 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 12 Dec 2022 13:24:43 -0700 Subject: [PATCH 438/935] cache --- .github/workflows/gradle_build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 0c8919406..4d490e166 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -18,10 +18,11 @@ jobs: fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: java-version: '17' distribution: 'adopt' + cache: gradle - name: Grant execute permission for gradlew run: chmod +x gradlew From 0e35a3e62b2c64e8a6f2fb1b4141b0b8058fdc69 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 19 Dec 2022 07:42:23 -0700 Subject: [PATCH 439/935] fix #3756 by allowing to recompute worldData if null --- src/main/java/baritone/cache/WorldProvider.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 9c47b0702..eef1592fc 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -48,6 +48,10 @@ public class WorldProvider implements IWorldProvider, Helper { @Override public final WorldData getCurrentWorld() { + // attempt reload if the worldData is null + if (currentWorld == null && mc.level != null) { + initWorld(mc.level.dimension(), mc.level.dimensionType()); + } return this.currentWorld; } From 1736f2ffc7c92eff5cd117ee7a9c0cb78207dce1 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 23 Dec 2022 16:34:49 -0700 Subject: [PATCH 440/935] replace the world scanner with a 500x faster one --- .../baritone/launch/mixins/MixinBitArray.java | 10 + .../mixins/MixinBlockStateContainer.java | 10 + src/main/java/baritone/BaritoneProvider.java | 3 +- .../baritone/cache/FasterWorldScanner.java | 270 ++++++++++++++++++ .../command/defaults/MineCommand.java | 3 +- .../command/defaults/PathCommand.java | 3 +- .../command/defaults/RepackCommand.java | 3 +- .../java/baritone/process/FarmProcess.java | 3 +- .../java/baritone/process/MineProcess.java | 3 +- .../baritone/utils/accessor/IBitArray.java | 4 + .../utils/accessor/IBlockStateContainer.java | 6 + 11 files changed, 312 insertions(+), 6 deletions(-) create mode 100644 src/main/java/baritone/cache/FasterWorldScanner.java diff --git a/src/launch/java/baritone/launch/mixins/MixinBitArray.java b/src/launch/java/baritone/launch/mixins/MixinBitArray.java index bece3e3bf..bf7d9e535 100644 --- a/src/launch/java/baritone/launch/mixins/MixinBitArray.java +++ b/src/launch/java/baritone/launch/mixins/MixinBitArray.java @@ -64,4 +64,14 @@ public int[] toArray() { return out; } + + @Override + public long getMaxEntryValue() { + return maxEntryValue; + } + + @Override + public int getBitsPerEntry() { + return bitsPerEntry; + } } diff --git a/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java b/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java index f1cc28b9f..566c3cf8b 100644 --- a/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java +++ b/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java @@ -35,6 +35,16 @@ public abstract class MixinBlockStateContainer implements IBlockStateContainer { @Shadow protected IBlockStatePalette palette; + @Override + public IBlockStatePalette getPalette() { + return palette; + } + + @Override + public BitArray getStorage() { + return storage; + } + @Override public IBlockState getAtPalette(int index) { return palette.getBlockState(index); diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index d5457cf85..c49c02e10 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -22,6 +22,7 @@ import baritone.api.cache.IWorldScanner; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; +import baritone.cache.FasterWorldScanner; import baritone.cache.WorldScanner; import baritone.command.CommandSystem; import baritone.command.ExampleBaritoneControl; @@ -59,7 +60,7 @@ public List getAllBaritones() { @Override public IWorldScanner getWorldScanner() { - return WorldScanner.INSTANCE; + return FasterWorldScanner.INSTANCE; } @Override diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java new file mode 100644 index 000000000..f1829f9f0 --- /dev/null +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -0,0 +1,270 @@ +/* + * 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.cache; + +import baritone.api.cache.ICachedWorld; +import baritone.api.cache.IWorldScanner; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMetaLookup; +import baritone.api.utils.IPlayerContext; +import baritone.utils.accessor.IBitArray; +import baritone.utils.accessor.IBlockStateContainer; +import io.netty.buffer.Unpooled; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.BitArray; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.chunk.*; +import net.minecraft.world.chunk.storage.ExtendedBlockStorage; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.BiConsumer; +import java.util.function.IntConsumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public enum FasterWorldScanner implements IWorldScanner { + INSTANCE; + @Override + public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) { + return new WorldScannerContext(filter, ctx).scanAroundPlayerRange(maxSearchRadius); + } + + @Override + public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold) { + return new WorldScannerContext(filter, ctx).scanAroundPlayerUntilCount(max); + } + + @Override + public int repack(IPlayerContext ctx) { + return this.repack(ctx, 40); + } + + @Override + public int repack(IPlayerContext ctx, int range) { + IChunkProvider chunkProvider = ctx.world().getChunkProvider(); + ICachedWorld cachedWorld = ctx.worldData().getCachedWorld(); + + BetterBlockPos playerPos = ctx.playerFeet(); + + int playerChunkX = playerPos.getX() >> 4; + int playerChunkZ = playerPos.getZ() >> 4; + + int minX = playerChunkX - range; + int minZ = playerChunkZ - range; + int maxX = playerChunkX + range; + int maxZ = playerChunkZ + range; + + int queued = 0; + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + Chunk chunk = chunkProvider.getLoadedChunk(x, z); + + if (chunk != null && !chunk.isEmpty()) { + queued++; + cachedWorld.queueForPacking(chunk); + } + } + } + + return queued; + } + + // for porting, see {@link https://github.com/JsMacros/JsMacros/blob/backport-1.12.2/common/src/main/java/xyz/wagyourtail/jsmacros/client/api/classes/worldscanner/WorldScanner.java} + public static class WorldScannerContext { + private final BlockOptionalMetaLookup filter; + private final IPlayerContext ctx; + private final Map cachedFilter = new ConcurrentHashMap<>(); + + public WorldScannerContext(BlockOptionalMetaLookup filter, IPlayerContext ctx) { + this.filter = filter; + this.ctx = ctx; + } + + public List getChunkRange(int centerX, int centerZ, int chunkrange) { + List chunks = new ArrayList<>(); + for (int x = centerX - chunkrange; x <= centerX + chunkrange; x++) { + for (int z = centerZ - chunkrange; z <= centerZ + chunkrange; z++) { + chunks.add(new ChunkPos(x, z)); + } + } + return chunks; + } + + public List scanAroundPlayerRange(int range) { + return scanAroundPlayer(range, -1); + } + + public List scanAroundPlayerUntilCount(int count) { + return scanAroundPlayer(32, count); + } + + public List scanAroundPlayer(int range, int maxCount) { + assert ctx.player() != null; + return scanChunkRange(ctx.playerFeet().x >> 4, ctx.playerFeet().z >> 4, range, maxCount); + } + + public List scanChunkRange(int centerX, int centerZ, int chunkRange, int maxBlocks) { + assert ctx.world() != null; + if (chunkRange < 0) { + throw new IllegalArgumentException("chunkRange must be >= 0"); + } + return scanChunksInternal(getChunkRange(centerX, centerZ, chunkRange), maxBlocks); + } + + private List scanChunksInternal(List chunkPositions, int maxBlocks) { + assert ctx.world() != null; + return chunkPositions.parallelStream().flatMap(this::scanChunkInternal).limit(maxBlocks <= 0 ? Long.MAX_VALUE : maxBlocks).collect(Collectors.toList()); + } + private Stream scanChunkInternal(ChunkPos pos) { + IChunkProvider chunkProvider = ctx.world().getChunkProvider(); + // if chunk is not loaded, return empty stream + if (!chunkProvider.isChunkGeneratedAt(pos.x, pos.z)) { + return Stream.empty(); + } + + long chunkX = (long) pos.x << 4; + long chunkZ = (long) pos.z << 4; + + List blocks = new ArrayList<>(); + + streamChunkSections(chunkProvider.getLoadedChunk(pos.x, pos.z), (section, isInFilter) -> { + int yOffset = section.getYLocation(); + BitArray array = (BitArray) ((IBlockStateContainer) section.getData()).getStorage(); + forEach(array, isInFilter, place -> blocks.add(new BlockPos( + chunkX + ((place & 255) & 15), + yOffset + (place >> 8), + chunkZ + ((place & 255) >> 4) + ))); + }); + return blocks.stream(); + } + + private void streamChunkSections(Chunk chunk, BiConsumer consumer) { + for (ExtendedBlockStorage section : chunk.getBlockStorageArray()) { + if (section == null || section.isEmpty()) { + continue; + } + + BlockStateContainer sectionContainer = section.getData(); + //this won't work if the PaletteStorage is of the type EmptyPaletteStorage + if (((IBlockStateContainer) sectionContainer).getStorage() == null) { + continue; + } + + boolean[] isInFilter = getIncludedFilterIndices(((IBlockStateContainer) sectionContainer).getPalette()); + if (isInFilter.length == 0) { + continue; + } + consumer.accept(section, isInFilter); + } + } + + private boolean getFilterResult(IBlockState state) { + Boolean v; + return (v = cachedFilter.get(state)) == null ? addCachedState(state) : v; + } + + private boolean addCachedState(IBlockState state) { + boolean isInFilter = false; + + if (filter != null) { + isInFilter = filter.has(state); + } + + cachedFilter.put(state, isInFilter); + return isInFilter; + } + + private boolean[] getIncludedFilterIndices(IBlockStatePalette palette) { + boolean commonBlockFound = false; + Int2ObjectOpenHashMap paletteMap = getPalette(palette); + int size = paletteMap.size(); + + boolean[] isInFilter = new boolean[size]; + + for (int i = 0; i < size; i++) { + IBlockState state = paletteMap.get(i); + if (getFilterResult(state)) { + isInFilter[i] = true; + commonBlockFound = true; + } else { + isInFilter[i] = false; + } + } + + if (!commonBlockFound) { + return new boolean[0]; + } + return isInFilter; + } + + private static void forEach(BitArray array, boolean[] isInFilter, IntConsumer action) { + int counter = 0; + long[] storage = array.getBackingLongArray(); + int arraySize = array.size(); + int elementBits = ((IBitArray) array).getBitsPerEntry(); + long maxValue = ((IBitArray) array).getMaxEntryValue(); + int storageLength = storage.length; + + if (storageLength != 0) { + int lastStorageIdx = 0; + long row = storage[0]; + long nextRow = storageLength > 1 ? storage[1] : 0L; + + for (int idx = 0; idx < arraySize; idx++) { + int n = idx * elementBits; + int storageIdx = n >> 6; + int p = (idx + 1) * elementBits - 1 >> 6; + int q = n ^ storageIdx << 6; + if (storageIdx != lastStorageIdx) { + row = nextRow; + nextRow = storageIdx + 1 < storageLength ? storage[storageIdx + 1] : 0L; + lastStorageIdx = storageIdx; + } + if (storageIdx == p) { + if (isInFilter[(int) (row >>> q & maxValue)]) { + action.accept(counter); + } else { + if (isInFilter[(int) ((row >>> q | nextRow << (64 - q)) & maxValue)]) { + action.accept(counter); + } + } + } + } + } + } + + private static Int2ObjectOpenHashMap getPalette(IBlockStatePalette palette) { + PacketBuffer buf = new PacketBuffer(Unpooled.buffer()); + palette.write(buf); + int size = buf.readVarInt(); + Int2ObjectOpenHashMap paletteMap = new Int2ObjectOpenHashMap<>(size); + for (int i = 0; i < size; i++) { + paletteMap.put(i, Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt())); + } + return paletteMap; + } + } +} diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 63712fe3e..1ab5c3321 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -17,6 +17,7 @@ package baritone.command.defaults; +import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; @@ -45,7 +46,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { while (args.hasAny()) { boms.add(args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE)); } - WorldScanner.INSTANCE.repack(ctx); + BaritoneAPI.getProvider().getWorldScanner().repack(ctx); logDirect(String.format("Mining %s", boms.toString())); baritone.getMineProcess().mine(quantity, boms.toArray(new BlockOptionalMeta[0])); } diff --git a/src/main/java/baritone/command/defaults/PathCommand.java b/src/main/java/baritone/command/defaults/PathCommand.java index 182a1e5bc..24f47d625 100644 --- a/src/main/java/baritone/command/defaults/PathCommand.java +++ b/src/main/java/baritone/command/defaults/PathCommand.java @@ -17,6 +17,7 @@ package baritone.command.defaults; +import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; @@ -38,7 +39,7 @@ public PathCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); args.requireMax(0); - WorldScanner.INSTANCE.repack(ctx); + BaritoneAPI.getProvider().getWorldScanner().repack(ctx); customGoalProcess.path(); logDirect("Now pathing"); } diff --git a/src/main/java/baritone/command/defaults/RepackCommand.java b/src/main/java/baritone/command/defaults/RepackCommand.java index cafbea524..cd054b10b 100644 --- a/src/main/java/baritone/command/defaults/RepackCommand.java +++ b/src/main/java/baritone/command/defaults/RepackCommand.java @@ -17,6 +17,7 @@ package baritone.command.defaults; +import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; @@ -36,7 +37,7 @@ public RepackCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); - logDirect(String.format("Queued %d chunks for repacking", WorldScanner.INSTANCE.repack(ctx))); + logDirect(String.format("Queued %d chunks for repacking", BaritoneAPI.getProvider().getWorldScanner().repack(ctx))); } @Override diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 0ef85f07d..73c575d22 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -18,6 +18,7 @@ package baritone.process; import baritone.Baritone; +import baritone.api.BaritoneAPI; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalComposite; @@ -189,7 +190,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (Baritone.settings().mineGoalUpdateInterval.value != 0 && tickCount++ % Baritone.settings().mineGoalUpdateInterval.value == 0) { - Baritone.getExecutor().execute(() -> locations = WorldScanner.INSTANCE.scanChunkRadius(ctx, scan, 256, 10, 10)); + Baritone.getExecutor().execute(() -> locations = BaritoneAPI.getProvider().getWorldScanner().scanChunkRadius(ctx, scan, 256, 10, 10)); } if (locations == null) { return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 1ec47cd92..a10a569aa 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -18,6 +18,7 @@ package baritone.process; import baritone.Baritone; +import baritone.api.BaritoneAPI; import baritone.api.pathing.goals.*; import baritone.api.process.IMineProcess; import baritone.api.process.PathingCommand; @@ -355,7 +356,7 @@ public static List searchWorld(CalculationContext ctx, BlockOptionalMe locs = prune(ctx, locs, filter, max, blacklist, dropped); if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < max)) { - locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( + locs.addAll(BaritoneAPI.getProvider().getWorldScanner().scanChunkRadius( ctx.getBaritone().getPlayerContext(), filter, max, diff --git a/src/main/java/baritone/utils/accessor/IBitArray.java b/src/main/java/baritone/utils/accessor/IBitArray.java index baea5c1da..08f54584c 100644 --- a/src/main/java/baritone/utils/accessor/IBitArray.java +++ b/src/main/java/baritone/utils/accessor/IBitArray.java @@ -3,4 +3,8 @@ public interface IBitArray { int[] toArray(); + + long getMaxEntryValue(); + + int getBitsPerEntry(); } diff --git a/src/main/java/baritone/utils/accessor/IBlockStateContainer.java b/src/main/java/baritone/utils/accessor/IBlockStateContainer.java index 39572fc5d..bd280aeb1 100644 --- a/src/main/java/baritone/utils/accessor/IBlockStateContainer.java +++ b/src/main/java/baritone/utils/accessor/IBlockStateContainer.java @@ -1,9 +1,15 @@ package baritone.utils.accessor; import net.minecraft.block.state.IBlockState; +import net.minecraft.util.BitArray; +import net.minecraft.world.chunk.IBlockStatePalette; public interface IBlockStateContainer { + IBlockStatePalette getPalette(); + + BitArray getStorage(); + IBlockState getAtPalette(int index); int[] storageArray(); From 0b6088cd2df5ee5a099ec7a63fa00ad0378d0c6a Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 23 Dec 2022 16:58:10 -0700 Subject: [PATCH 441/935] fix getting the block from the pallete, and change the chunk scan order to spiral out --- .../baritone/cache/FasterWorldScanner.java | 66 ++++++++++--------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index f1829f9f0..189374dd6 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -102,12 +102,27 @@ public WorldScannerContext(BlockOptionalMetaLookup filter, IPlayerContext ctx) { this.ctx = ctx; } - public List getChunkRange(int centerX, int centerZ, int chunkrange) { + public List getChunkRange(int centerX, int centerZ, int chunkRadius) { List chunks = new ArrayList<>(); - for (int x = centerX - chunkrange; x <= centerX + chunkrange; x++) { - for (int z = centerZ - chunkrange; z <= centerZ + chunkrange; z++) { + // spiral out + int x = centerX; + int z = centerZ; + int dx = 0; + int dz = -1; + int t = Math.max(chunkRadius, 1); + int maxI = t * t; + for (int i = 0; i < maxI; i++) { + if ((-chunkRadius / 2 <= x) && (x <= chunkRadius / 2) && (-chunkRadius / 2 <= z) && (z <= chunkRadius / 2)) { chunks.add(new ChunkPos(x, z)); } + // idk how this works, copilot did it + if ((x == z) || ((x < 0) && (x == -z)) || ((x > 0) && (x == 1 - z))) { + t = dx; + dx = -dz; + dz = t; + } + x += dx; + z += dz; } return chunks; } @@ -221,36 +236,25 @@ private boolean[] getIncludedFilterIndices(IBlockStatePalette palette) { } private static void forEach(BitArray array, boolean[] isInFilter, IntConsumer action) { - int counter = 0; - long[] storage = array.getBackingLongArray(); + long[] longArray = array.getBackingLongArray(); int arraySize = array.size(); - int elementBits = ((IBitArray) array).getBitsPerEntry(); - long maxValue = ((IBitArray) array).getMaxEntryValue(); - int storageLength = storage.length; - - if (storageLength != 0) { - int lastStorageIdx = 0; - long row = storage[0]; - long nextRow = storageLength > 1 ? storage[1] : 0L; - - for (int idx = 0; idx < arraySize; idx++) { - int n = idx * elementBits; - int storageIdx = n >> 6; - int p = (idx + 1) * elementBits - 1 >> 6; - int q = n ^ storageIdx << 6; - if (storageIdx != lastStorageIdx) { - row = nextRow; - nextRow = storageIdx + 1 < storageLength ? storage[storageIdx + 1] : 0L; - lastStorageIdx = storageIdx; + int bitsPerEntry = ((IBitArray) array).getBitsPerEntry(); + long maxEntryValue = ((IBitArray) array).getMaxEntryValue(); + + for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) { + final int i = idx * bitsPerEntry; + final int j = i >> 6; + final int l = i & 63; + final int k = kl >> 6; + final long jl = longArray[j] >>> l; + + if (j == k) { + if (isInFilter[(int) (jl & maxEntryValue)]) { + action.accept(idx); } - if (storageIdx == p) { - if (isInFilter[(int) (row >>> q & maxValue)]) { - action.accept(counter); - } else { - if (isInFilter[(int) ((row >>> q | nextRow << (64 - q)) & maxValue)]) { - action.accept(counter); - } - } + } else { + if (isInFilter[(int) ((jl | longArray[k] << (64 - l)) & maxEntryValue)]) { + action.accept(idx); } } } From 12b596e53696212515087f458167775d45d12a85 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 23 Dec 2022 17:10:37 -0700 Subject: [PATCH 442/935] fix spiral --- .../baritone/cache/FasterWorldScanner.java | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index 189374dd6..ce4a8cd48 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -105,24 +105,16 @@ public WorldScannerContext(BlockOptionalMetaLookup filter, IPlayerContext ctx) { public List getChunkRange(int centerX, int centerZ, int chunkRadius) { List chunks = new ArrayList<>(); // spiral out - int x = centerX; - int z = centerZ; - int dx = 0; - int dz = -1; - int t = Math.max(chunkRadius, 1); - int maxI = t * t; - for (int i = 0; i < maxI; i++) { - if ((-chunkRadius / 2 <= x) && (x <= chunkRadius / 2) && (-chunkRadius / 2 <= z) && (z <= chunkRadius / 2)) { - chunks.add(new ChunkPos(x, z)); + chunks.add(new ChunkPos(centerX, centerZ)); + for (int i = 1; i < chunkRadius; i++) { + for (int x = centerX - i; x <= centerX + i; x++) { + chunks.add(new ChunkPos(x, centerZ - i)); + chunks.add(new ChunkPos(x, centerZ + i)); } - // idk how this works, copilot did it - if ((x == z) || ((x < 0) && (x == -z)) || ((x > 0) && (x == 1 - z))) { - t = dx; - dx = -dz; - dz = t; + for (int z = centerZ - i + 1; z <= centerZ + i - 1; z++) { + chunks.add(new ChunkPos(centerX - i, z)); + chunks.add(new ChunkPos(centerX + i, z)); } - x += dx; - z += dz; } return chunks; } From 0ae59755e3ade3f576d4e83ae9b4b5abef542b75 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 23 Dec 2022 17:25:23 -0700 Subject: [PATCH 443/935] make limit not happen if it shouldn't --- .../baritone/cache/FasterWorldScanner.java | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index ce4a8cd48..535e925e1 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -30,6 +30,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.network.PacketBuffer; import net.minecraft.util.BitArray; +import net.minecraft.util.ObjectIntIdentityMap; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.chunk.*; @@ -142,8 +143,20 @@ public List scanChunkRange(int centerX, int centerZ, int chunkRange, i private List scanChunksInternal(List chunkPositions, int maxBlocks) { assert ctx.world() != null; - return chunkPositions.parallelStream().flatMap(this::scanChunkInternal).limit(maxBlocks <= 0 ? Long.MAX_VALUE : maxBlocks).collect(Collectors.toList()); + try { + Stream posStream = chunkPositions.parallelStream().flatMap(this::scanChunkInternal); + if (maxBlocks >= 0) { + // WARNING: this can be expensive if maxBlocks is large... + // see limit's javadoc + posStream = posStream.limit(maxBlocks); + } + return posStream.collect(Collectors.toList()); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } } + private Stream scanChunkInternal(ChunkPos pos) { IChunkProvider chunkProvider = ctx.world().getChunkProvider(); // if chunk is not loaded, return empty stream @@ -206,13 +219,13 @@ private boolean addCachedState(IBlockState state) { private boolean[] getIncludedFilterIndices(IBlockStatePalette palette) { boolean commonBlockFound = false; - Int2ObjectOpenHashMap paletteMap = getPalette(palette); + ObjectIntIdentityMap paletteMap = getPalette(palette); int size = paletteMap.size(); boolean[] isInFilter = new boolean[size]; for (int i = 0; i < size; i++) { - IBlockState state = paletteMap.get(i); + IBlockState state = paletteMap.getByValue(i); if (getFilterResult(state)) { isInFilter[i] = true; commonBlockFound = true; @@ -252,15 +265,24 @@ private static void forEach(BitArray array, boolean[] isInFilter, IntConsumer ac } } - private static Int2ObjectOpenHashMap getPalette(IBlockStatePalette palette) { - PacketBuffer buf = new PacketBuffer(Unpooled.buffer()); - palette.write(buf); - int size = buf.readVarInt(); - Int2ObjectOpenHashMap paletteMap = new Int2ObjectOpenHashMap<>(size); - for (int i = 0; i < size; i++) { - paletteMap.put(i, Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt())); + /** + * cheats to get the actual map of id -> blockstate from the various palette implementations + */ + private static ObjectIntIdentityMap getPalette(IBlockStatePalette palette) { + if (palette instanceof BlockStatePaletteRegistry) { + return Block.BLOCK_STATE_IDS; + } else { + PacketBuffer buf = new PacketBuffer(Unpooled.buffer()); + palette.write(buf); + int size = buf.readVarInt(); + ObjectIntIdentityMap states = new ObjectIntIdentityMap<>(); + for (int i = 0; i < size; i++) { + IBlockState state = Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt()); + assert state != null; + states.put(state, i); + } + return states; } - return paletteMap; } } } From 96f432d2d550ca92a8e96c66981696a62bb628b1 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 23 Dec 2022 17:26:46 -0700 Subject: [PATCH 444/935] add comment --- src/main/java/baritone/cache/FasterWorldScanner.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index 535e925e1..6c110decb 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -93,6 +93,7 @@ public int repack(IPlayerContext ctx, int range) { } // for porting, see {@link https://github.com/JsMacros/JsMacros/blob/backport-1.12.2/common/src/main/java/xyz/wagyourtail/jsmacros/client/api/classes/worldscanner/WorldScanner.java} + // tho I did change some things... public static class WorldScannerContext { private final BlockOptionalMetaLookup filter; private final IPlayerContext ctx; From ecdec87e7a7a8107eefe20a7797decf4ad1e7972 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 24 Dec 2022 11:43:54 -0700 Subject: [PATCH 445/935] fix using wrong functions in scan --- src/main/java/baritone/cache/FasterWorldScanner.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index 6c110decb..ace429de9 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -25,7 +25,6 @@ import baritone.utils.accessor.IBitArray; import baritone.utils.accessor.IBlockStateContainer; import io.netty.buffer.Unpooled; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.network.PacketBuffer; @@ -49,12 +48,12 @@ public enum FasterWorldScanner implements IWorldScanner { INSTANCE; @Override public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) { - return new WorldScannerContext(filter, ctx).scanAroundPlayerRange(maxSearchRadius); + return new WorldScannerContext(filter, ctx).scanAroundPlayer(maxSearchRadius, max); } @Override public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold) { - return new WorldScannerContext(filter, ctx).scanAroundPlayerUntilCount(max); + return new WorldScannerContext(filter, ctx).scanChunkInternal(pos).collect(Collectors.toList()); } @Override From ce1fb49252e897f0b223e1bbdc18bb096ac56678 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 24 Dec 2022 11:52:48 -0700 Subject: [PATCH 446/935] spiral always pick closest chunk first now --- .../baritone/cache/FasterWorldScanner.java | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index ace429de9..efb80245a 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -91,34 +91,38 @@ public int repack(IPlayerContext ctx, int range) { return queued; } - // for porting, see {@link https://github.com/JsMacros/JsMacros/blob/backport-1.12.2/common/src/main/java/xyz/wagyourtail/jsmacros/client/api/classes/worldscanner/WorldScanner.java} - // tho I did change some things... + // ordered in a way that the closest blocks are generally first + public List getChunkRange(int centerX, int centerZ, int chunkRadius) { + List chunks = new ArrayList<>(); + // spiral out + chunks.add(new ChunkPos(centerX, centerZ)); + for (int i = 1; i < chunkRadius; i++) { + for (int j = 0; j <= i; j++) { + chunks.add(new ChunkPos(centerX - j, centerZ - i)); + chunks.add(new ChunkPos(centerX + j, centerZ - i)); + chunks.add(new ChunkPos(centerX - j, centerZ + i)); + chunks.add(new ChunkPos(centerX + j, centerZ + i)); + if (j != 0 && j != i) { + chunks.add(new ChunkPos(centerX - i, centerZ - j)); + chunks.add(new ChunkPos(centerX + i, centerZ - j)); + chunks.add(new ChunkPos(centerX - i, centerZ + j)); + chunks.add(new ChunkPos(centerX + i, centerZ + j)); + } + } + } + return chunks; + } + public static class WorldScannerContext { private final BlockOptionalMetaLookup filter; private final IPlayerContext ctx; - private final Map cachedFilter = new ConcurrentHashMap<>(); public WorldScannerContext(BlockOptionalMetaLookup filter, IPlayerContext ctx) { this.filter = filter; this.ctx = ctx; } - public List getChunkRange(int centerX, int centerZ, int chunkRadius) { - List chunks = new ArrayList<>(); - // spiral out - chunks.add(new ChunkPos(centerX, centerZ)); - for (int i = 1; i < chunkRadius; i++) { - for (int x = centerX - i; x <= centerX + i; x++) { - chunks.add(new ChunkPos(x, centerZ - i)); - chunks.add(new ChunkPos(x, centerZ + i)); - } - for (int z = centerZ - i + 1; z <= centerZ + i - 1; z++) { - chunks.add(new ChunkPos(centerX - i, z)); - chunks.add(new ChunkPos(centerX + i, z)); - } - } - return chunks; - } + public List scanAroundPlayerRange(int range) { return scanAroundPlayer(range, -1); From 6260c6d3d7edd984a8b2b900770d4d11c60d4dbd Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 24 Dec 2022 12:11:26 -0700 Subject: [PATCH 447/935] apply suggestions --- .../baritone/api/utils/BlockOptionalMeta.java | 4 + .../api/utils/BlockOptionalMetaLookup.java | 25 +- .../baritone/cache/FasterWorldScanner.java | 261 ++++++++---------- 3 files changed, 123 insertions(+), 167 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index a9a34a4aa..e86341816 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -315,4 +315,8 @@ public IBlockState getAnyBlockState() { return null; } + + public Set getAllBlockStates() { + return blockstates; + } } diff --git a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java index 041c6162c..8fb52fb52 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java @@ -22,15 +22,22 @@ import net.minecraft.item.ItemStack; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.stream.Stream; public class BlockOptionalMetaLookup { - + private final Set blockSet = new HashSet<>(); + private final Set blockStateSet = new HashSet<>(); private final BlockOptionalMeta[] boms; public BlockOptionalMetaLookup(BlockOptionalMeta... boms) { this.boms = boms; + for (BlockOptionalMeta bom : boms) { + blockSet.add(bom.getBlock()); + blockStateSet.addAll(bom.getAllBlockStates()); + } } public BlockOptionalMetaLookup(Block... blocks) { @@ -52,23 +59,11 @@ public BlockOptionalMetaLookup(String... blocks) { } public boolean has(Block block) { - for (BlockOptionalMeta bom : boms) { - if (bom.getBlock() == block) { - return true; - } - } - - return false; + return blockSet.contains(block); } public boolean has(IBlockState state) { - for (BlockOptionalMeta bom : boms) { - if (bom.matches(state)) { - return true; - } - } - - return false; + return blockStateSet.contains(state); } public boolean has(ItemStack stack) { diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index efb80245a..7a46f04ff 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -37,8 +37,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; import java.util.function.IntConsumer; import java.util.stream.Collectors; @@ -48,12 +46,16 @@ public enum FasterWorldScanner implements IWorldScanner { INSTANCE; @Override public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) { - return new WorldScannerContext(filter, ctx).scanAroundPlayer(maxSearchRadius, max); + assert ctx.world() != null; + if (maxSearchRadius < 0) { + throw new IllegalArgumentException("chunkRange must be >= 0"); + } + return scanChunksInternal(ctx, filter, getChunkRange(ctx.playerFeet().x >> 4, ctx.playerFeet().z >> 4, maxSearchRadius), max); } @Override public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold) { - return new WorldScannerContext(filter, ctx).scanChunkInternal(pos).collect(Collectors.toList()); + return scanChunkInternal(ctx, filter, pos).limit(max).collect(Collectors.toList()); } @Override @@ -92,15 +94,17 @@ public int repack(IPlayerContext ctx, int range) { } // ordered in a way that the closest blocks are generally first - public List getChunkRange(int centerX, int centerZ, int chunkRadius) { + public static List getChunkRange(int centerX, int centerZ, int chunkRadius) { List chunks = new ArrayList<>(); // spiral out chunks.add(new ChunkPos(centerX, centerZ)); for (int i = 1; i < chunkRadius; i++) { for (int j = 0; j <= i; j++) { chunks.add(new ChunkPos(centerX - j, centerZ - i)); - chunks.add(new ChunkPos(centerX + j, centerZ - i)); - chunks.add(new ChunkPos(centerX - j, centerZ + i)); + if (j != 0) { + chunks.add(new ChunkPos(centerX + j, centerZ - i)); + chunks.add(new ChunkPos(centerX - j, centerZ + i)); + } chunks.add(new ChunkPos(centerX + j, centerZ + i)); if (j != 0 && j != i) { chunks.add(new ChunkPos(centerX - i, centerZ - j)); @@ -113,180 +117,133 @@ public List getChunkRange(int centerX, int centerZ, int chunkRadius) { return chunks; } - public static class WorldScannerContext { - private final BlockOptionalMetaLookup filter; - private final IPlayerContext ctx; - - public WorldScannerContext(BlockOptionalMetaLookup filter, IPlayerContext ctx) { - this.filter = filter; - this.ctx = ctx; - } - - - - public List scanAroundPlayerRange(int range) { - return scanAroundPlayer(range, -1); - } - - public List scanAroundPlayerUntilCount(int count) { - return scanAroundPlayer(32, count); - } - - public List scanAroundPlayer(int range, int maxCount) { - assert ctx.player() != null; - return scanChunkRange(ctx.playerFeet().x >> 4, ctx.playerFeet().z >> 4, range, maxCount); - } - - public List scanChunkRange(int centerX, int centerZ, int chunkRange, int maxBlocks) { - assert ctx.world() != null; - if (chunkRange < 0) { - throw new IllegalArgumentException("chunkRange must be >= 0"); - } - return scanChunksInternal(getChunkRange(centerX, centerZ, chunkRange), maxBlocks); - } - - private List scanChunksInternal(List chunkPositions, int maxBlocks) { - assert ctx.world() != null; - try { - Stream posStream = chunkPositions.parallelStream().flatMap(this::scanChunkInternal); + private List scanChunksInternal(IPlayerContext ctx, BlockOptionalMetaLookup lookup, List chunkPositions, int maxBlocks) { + assert ctx.world() != null; + try { + Stream posStream = chunkPositions.parallelStream().flatMap(p -> scanChunkInternal(ctx, lookup, p)); if (maxBlocks >= 0) { // WARNING: this can be expensive if maxBlocks is large... // see limit's javadoc posStream = posStream.limit(maxBlocks); } return posStream.collect(Collectors.toList()); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } + } catch (Exception e) { + e.printStackTrace(); + throw e; } + } - private Stream scanChunkInternal(ChunkPos pos) { - IChunkProvider chunkProvider = ctx.world().getChunkProvider(); - // if chunk is not loaded, return empty stream - if (!chunkProvider.isChunkGeneratedAt(pos.x, pos.z)) { - return Stream.empty(); - } - - long chunkX = (long) pos.x << 4; - long chunkZ = (long) pos.z << 4; - - List blocks = new ArrayList<>(); - - streamChunkSections(chunkProvider.getLoadedChunk(pos.x, pos.z), (section, isInFilter) -> { - int yOffset = section.getYLocation(); - BitArray array = (BitArray) ((IBlockStateContainer) section.getData()).getStorage(); - forEach(array, isInFilter, place -> blocks.add(new BlockPos( - chunkX + ((place & 255) & 15), - yOffset + (place >> 8), - chunkZ + ((place & 255) >> 4) - ))); - }); - return blocks.stream(); + private Stream scanChunkInternal(IPlayerContext ctx, BlockOptionalMetaLookup lookup, ChunkPos pos) { + IChunkProvider chunkProvider = ctx.world().getChunkProvider(); + // if chunk is not loaded, return empty stream + if (!chunkProvider.isChunkGeneratedAt(pos.x, pos.z)) { + return Stream.empty(); } - private void streamChunkSections(Chunk chunk, BiConsumer consumer) { - for (ExtendedBlockStorage section : chunk.getBlockStorageArray()) { - if (section == null || section.isEmpty()) { - continue; - } - - BlockStateContainer sectionContainer = section.getData(); - //this won't work if the PaletteStorage is of the type EmptyPaletteStorage - if (((IBlockStateContainer) sectionContainer).getStorage() == null) { - continue; - } + long chunkX = (long) pos.x << 4; + long chunkZ = (long) pos.z << 4; + + List blocks = new ArrayList<>(); + + collectChunkSections(lookup, chunkProvider.getLoadedChunk(pos.x, pos.z), (section, isInFilter) -> { + int yOffset = section.getYLocation(); + BitArray array = (BitArray) ((IBlockStateContainer) section.getData()).getStorage(); + collectBlockLocations(array, isInFilter, place -> blocks.add(new BlockPos( + chunkX + ((place & 255) & 15), + yOffset + (place >> 8), + chunkZ + ((place & 255) >> 4) + ))); + }); + return blocks.stream(); + } - boolean[] isInFilter = getIncludedFilterIndices(((IBlockStateContainer) sectionContainer).getPalette()); - if (isInFilter.length == 0) { - continue; - } - consumer.accept(section, isInFilter); - } - } - private boolean getFilterResult(IBlockState state) { - Boolean v; - return (v = cachedFilter.get(state)) == null ? addCachedState(state) : v; - } - private boolean addCachedState(IBlockState state) { - boolean isInFilter = false; + private void collectChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, BiConsumer consumer) { + for (ExtendedBlockStorage section : chunk.getBlockStorageArray()) { + if (section == null || section.isEmpty()) { + continue; + } - if (filter != null) { - isInFilter = filter.has(state); + BlockStateContainer sectionContainer = section.getData(); + //this won't work if the PaletteStorage is of the type EmptyPaletteStorage + if (((IBlockStateContainer) sectionContainer).getStorage() == null) { + continue; } - cachedFilter.put(state, isInFilter); - return isInFilter; + boolean[] isInFilter = getIncludedFilterIndices(lookup, ((IBlockStateContainer) sectionContainer).getPalette()); + if (isInFilter.length == 0) { + continue; + } + consumer.accept(section, isInFilter); } + } - private boolean[] getIncludedFilterIndices(IBlockStatePalette palette) { - boolean commonBlockFound = false; - ObjectIntIdentityMap paletteMap = getPalette(palette); - int size = paletteMap.size(); + private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBlockStatePalette palette) { + boolean commonBlockFound = false; + ObjectIntIdentityMap paletteMap = getPalette(palette); + int size = paletteMap.size(); - boolean[] isInFilter = new boolean[size]; + boolean[] isInFilter = new boolean[size]; - for (int i = 0; i < size; i++) { - IBlockState state = paletteMap.getByValue(i); - if (getFilterResult(state)) { - isInFilter[i] = true; - commonBlockFound = true; - } else { - isInFilter[i] = false; - } + for (int i = 0; i < size; i++) { + IBlockState state = paletteMap.getByValue(i); + if (lookup.has(state)) { + isInFilter[i] = true; + commonBlockFound = true; + } else { + isInFilter[i] = false; } + } - if (!commonBlockFound) { - return new boolean[0]; - } - return isInFilter; + if (!commonBlockFound) { + return new boolean[0]; } + return isInFilter; + } - private static void forEach(BitArray array, boolean[] isInFilter, IntConsumer action) { - long[] longArray = array.getBackingLongArray(); - int arraySize = array.size(); - int bitsPerEntry = ((IBitArray) array).getBitsPerEntry(); - long maxEntryValue = ((IBitArray) array).getMaxEntryValue(); - - for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) { - final int i = idx * bitsPerEntry; - final int j = i >> 6; - final int l = i & 63; - final int k = kl >> 6; - final long jl = longArray[j] >>> l; - - if (j == k) { - if (isInFilter[(int) (jl & maxEntryValue)]) { - action.accept(idx); - } - } else { - if (isInFilter[(int) ((jl | longArray[k] << (64 - l)) & maxEntryValue)]) { - action.accept(idx); - } + private static void collectBlockLocations(BitArray array, boolean[] isInFilter, IntConsumer action) { + long[] longArray = array.getBackingLongArray(); + int arraySize = array.size(); + int bitsPerEntry = ((IBitArray) array).getBitsPerEntry(); + long maxEntryValue = ((IBitArray) array).getMaxEntryValue(); + + for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) { + final int i = idx * bitsPerEntry; + final int j = i >> 6; + final int l = i & 63; + final int k = kl >> 6; + final long jl = longArray[j] >>> l; + + if (j == k) { + if (isInFilter[(int) (jl & maxEntryValue)]) { + action.accept(idx); + } + } else { + if (isInFilter[(int) ((jl | longArray[k] << (64 - l)) & maxEntryValue)]) { + action.accept(idx); } } } + } - /** - * cheats to get the actual map of id -> blockstate from the various palette implementations - */ - private static ObjectIntIdentityMap getPalette(IBlockStatePalette palette) { - if (palette instanceof BlockStatePaletteRegistry) { - return Block.BLOCK_STATE_IDS; - } else { - PacketBuffer buf = new PacketBuffer(Unpooled.buffer()); - palette.write(buf); - int size = buf.readVarInt(); - ObjectIntIdentityMap states = new ObjectIntIdentityMap<>(); - for (int i = 0; i < size; i++) { - IBlockState state = Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt()); - assert state != null; - states.put(state, i); - } - return states; + /** + * cheats to get the actual map of id -> blockstate from the various palette implementations + */ + private static ObjectIntIdentityMap getPalette(IBlockStatePalette palette) { + if (palette instanceof BlockStatePaletteRegistry) { + return Block.BLOCK_STATE_IDS; + } else { + PacketBuffer buf = new PacketBuffer(Unpooled.buffer()); + palette.write(buf); + int size = buf.readVarInt(); + ObjectIntIdentityMap states = new ObjectIntIdentityMap<>(); + for (int i = 0; i < size; i++) { + IBlockState state = Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt()); + assert state != null; + states.put(state, i); } + return states; } } } From c04eb066cb84e8a4362f913c301fc03da346718c Mon Sep 17 00:00:00 2001 From: William Gray Date: Wed, 28 Dec 2022 01:06:10 +0000 Subject: [PATCH 448/935] Update src/main/java/baritone/cache/FasterWorldScanner.java Co-authored-by: ZacSharp <68165024+ZacSharp@users.noreply.github.com> --- src/main/java/baritone/cache/FasterWorldScanner.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index 7a46f04ff..4dd480f25 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -106,11 +106,13 @@ public static List getChunkRange(int centerX, int centerZ, int chunkRa chunks.add(new ChunkPos(centerX - j, centerZ + i)); } chunks.add(new ChunkPos(centerX + j, centerZ + i)); - if (j != 0 && j != i) { + if (j != i) { chunks.add(new ChunkPos(centerX - i, centerZ - j)); chunks.add(new ChunkPos(centerX + i, centerZ - j)); - chunks.add(new ChunkPos(centerX - i, centerZ + j)); - chunks.add(new ChunkPos(centerX + i, centerZ + j)); + if (j != 0) { + chunks.add(new ChunkPos(centerX - i, centerZ + j)); + chunks.add(new ChunkPos(centerX + i, centerZ + j)); + } } } } From 98a748afb3340ad979a09a62623ddefcdb2d7887 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 27 Dec 2022 22:42:38 -0700 Subject: [PATCH 449/935] fix stream limit. immutable's in BOML --- .../baritone/api/utils/BlockOptionalMeta.java | 8 ++++-- .../api/utils/BlockOptionalMetaLookup.java | 28 ++++++++++++------- .../baritone/cache/FasterWorldScanner.java | 6 +++- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index e86341816..e0f491fba 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -41,8 +41,8 @@ public final class BlockOptionalMeta { private final int meta; private final boolean noMeta; private final Set blockstates; - private final ImmutableSet stateHashes; - private final ImmutableSet stackHashes; + private final Set stateHashes; + private final Set stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); private static final Map normalizations; @@ -319,4 +319,8 @@ public IBlockState getAnyBlockState() { public Set getAllBlockStates() { return blockstates; } + + public Set stackHashes() { + return stackHashes; + } } diff --git a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java index 8fb52fb52..6d236e90e 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java @@ -17,6 +17,7 @@ package baritone.api.utils; +import com.google.common.collect.ImmutableSet; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; @@ -28,34 +29,41 @@ import java.util.stream.Stream; public class BlockOptionalMetaLookup { - private final Set blockSet = new HashSet<>(); - private final Set blockStateSet = new HashSet<>(); + private final Set blockSet; + private final Set blockStateSet; private final BlockOptionalMeta[] boms; public BlockOptionalMetaLookup(BlockOptionalMeta... boms) { this.boms = boms; + Set blocks = new HashSet<>(); + Set blockStates = new HashSet<>(); + Set stacks = new HashSet<>(); for (BlockOptionalMeta bom : boms) { - blockSet.add(bom.getBlock()); - blockStateSet.addAll(bom.getAllBlockStates()); + blocks.add(bom.getBlock()); + blockStates.addAll(bom.getAllBlockStates()); + stacks.addAll(bom.stackHashes()); } + this.blockSet = ImmutableSet.copyOf(blocks); + this.blockStateSet = ImmutableSet.copyOf(blockStates); } public BlockOptionalMetaLookup(Block... blocks) { - this.boms = Stream.of(blocks) + this(Stream.of(blocks) .map(BlockOptionalMeta::new) - .toArray(BlockOptionalMeta[]::new); + .toArray(BlockOptionalMeta[]::new)); + } public BlockOptionalMetaLookup(List blocks) { - this.boms = blocks.stream() + this(blocks.stream() .map(BlockOptionalMeta::new) - .toArray(BlockOptionalMeta[]::new); + .toArray(BlockOptionalMeta[]::new)); } public BlockOptionalMetaLookup(String... blocks) { - this.boms = Stream.of(blocks) + this(Stream.of(blocks) .map(BlockOptionalMeta::new) - .toArray(BlockOptionalMeta[]::new); + .toArray(BlockOptionalMeta[]::new)); } public boolean has(Block block) { diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index 4dd480f25..e133f0e49 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -55,7 +55,11 @@ public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLooku @Override public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold) { - return scanChunkInternal(ctx, filter, pos).limit(max).collect(Collectors.toList()); + Stream stream = scanChunkInternal(ctx, filter, pos); + if (max >= 0) { + stream = stream.limit(max); + } + return stream.collect(Collectors.toList()); } @Override From e55db05f204a8e913ee90b9f3400b40a1abec509 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 27 Dec 2022 23:30:35 -0700 Subject: [PATCH 450/935] sacrifice a bit of speed for better block ordering --- .../baritone/cache/FasterWorldScanner.java | 57 ++++++++++++++----- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index e133f0e49..d4c20766e 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -36,10 +36,13 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.Objects; import java.util.function.BiConsumer; import java.util.function.IntConsumer; import java.util.stream.Collectors; +import java.util.stream.IntStream; import java.util.stream.Stream; public enum FasterWorldScanner implements IWorldScanner { @@ -146,43 +149,59 @@ private Stream scanChunkInternal(IPlayerContext ctx, BlockOptionalMeta return Stream.empty(); } - long chunkX = (long) pos.x << 4; - long chunkZ = (long) pos.z << 4; + long inChunkX = (long) pos.x << 4; + long inChunkZ = (long) pos.z << 4; - List blocks = new ArrayList<>(); + int playerY = ctx.playerFeet().y; + int playerSection = ctx.playerFeet().y >> 4; - collectChunkSections(lookup, chunkProvider.getLoadedChunk(pos.x, pos.z), (section, isInFilter) -> { + + return streamChunkSections(lookup, chunkProvider.getLoadedChunk(pos.x, pos.z), playerSection).flatMap((data) -> { + ExtendedBlockStorage section = data.section; + boolean[] isInFilter = data.isInFilter; + List blocks = new ArrayList<>(); int yOffset = section.getYLocation(); BitArray array = (BitArray) ((IBlockStateContainer) section.getData()).getStorage(); collectBlockLocations(array, isInFilter, place -> blocks.add(new BlockPos( - chunkX + ((place & 255) & 15), + (int) inChunkX + ((place & 255) & 15), yOffset + (place >> 8), - chunkZ + ((place & 255) >> 4) + (int) inChunkZ + ((place & 255) >> 4) ))); + return blocks.stream().sorted((a, b) -> { + int distA = Math.abs(a.getY() - playerY); + int distB = Math.abs(b.getY() - playerY); + return Integer.compare(distA, distB); + }); }); - return blocks.stream(); } - private void collectChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, BiConsumer consumer) { - for (ExtendedBlockStorage section : chunk.getBlockStorageArray()) { + private Stream streamChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, int playerSection) { + ExtendedBlockStorage[] sections = chunk.getBlockStorageArray(); + // order sections by distance to player + + return IntStream.range(0, sections.length) + .boxed() + .sorted(Comparator.comparingInt(a -> Math.abs(a - playerSection))) + .map(i -> { + ExtendedBlockStorage section = sections[i]; if (section == null || section.isEmpty()) { - continue; + return null; } BlockStateContainer sectionContainer = section.getData(); //this won't work if the PaletteStorage is of the type EmptyPaletteStorage if (((IBlockStateContainer) sectionContainer).getStorage() == null) { - continue; + return null; } boolean[] isInFilter = getIncludedFilterIndices(lookup, ((IBlockStateContainer) sectionContainer).getPalette()); if (isInFilter.length == 0) { - continue; + return null; } - consumer.accept(section, isInFilter); - } + return new SectionData(section, isInFilter); + }).filter(Objects::nonNull); } private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBlockStatePalette palette) { @@ -252,4 +271,14 @@ private static ObjectIntIdentityMap getPalette(IBlockStatePalette p return states; } } + + private static class SectionData { + ExtendedBlockStorage section; + boolean[] isInFilter; + + SectionData(ExtendedBlockStorage section, boolean[] isInFilter) { + this.section = section; + this.isInFilter = isInFilter; + } + } } From a367031fe248e01910c00122ab75c91c586ed005 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 27 Dec 2022 23:30:35 -0700 Subject: [PATCH 451/935] Revert "sacrifice a bit of speed for better block ordering" This reverts commit e55db05f204a8e913ee90b9f3400b40a1abec509. --- .../baritone/cache/FasterWorldScanner.java | 57 +++++-------------- 1 file changed, 14 insertions(+), 43 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index d4c20766e..e133f0e49 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -36,13 +36,10 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.util.ArrayList; -import java.util.Comparator; import java.util.List; -import java.util.Objects; import java.util.function.BiConsumer; import java.util.function.IntConsumer; import java.util.stream.Collectors; -import java.util.stream.IntStream; import java.util.stream.Stream; public enum FasterWorldScanner implements IWorldScanner { @@ -149,59 +146,43 @@ private Stream scanChunkInternal(IPlayerContext ctx, BlockOptionalMeta return Stream.empty(); } - long inChunkX = (long) pos.x << 4; - long inChunkZ = (long) pos.z << 4; + long chunkX = (long) pos.x << 4; + long chunkZ = (long) pos.z << 4; - int playerY = ctx.playerFeet().y; - int playerSection = ctx.playerFeet().y >> 4; + List blocks = new ArrayList<>(); - - return streamChunkSections(lookup, chunkProvider.getLoadedChunk(pos.x, pos.z), playerSection).flatMap((data) -> { - ExtendedBlockStorage section = data.section; - boolean[] isInFilter = data.isInFilter; - List blocks = new ArrayList<>(); + collectChunkSections(lookup, chunkProvider.getLoadedChunk(pos.x, pos.z), (section, isInFilter) -> { int yOffset = section.getYLocation(); BitArray array = (BitArray) ((IBlockStateContainer) section.getData()).getStorage(); collectBlockLocations(array, isInFilter, place -> blocks.add(new BlockPos( - (int) inChunkX + ((place & 255) & 15), + chunkX + ((place & 255) & 15), yOffset + (place >> 8), - (int) inChunkZ + ((place & 255) >> 4) + chunkZ + ((place & 255) >> 4) ))); - return blocks.stream().sorted((a, b) -> { - int distA = Math.abs(a.getY() - playerY); - int distB = Math.abs(b.getY() - playerY); - return Integer.compare(distA, distB); - }); }); + return blocks.stream(); } - private Stream streamChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, int playerSection) { - ExtendedBlockStorage[] sections = chunk.getBlockStorageArray(); - // order sections by distance to player - - return IntStream.range(0, sections.length) - .boxed() - .sorted(Comparator.comparingInt(a -> Math.abs(a - playerSection))) - .map(i -> { - ExtendedBlockStorage section = sections[i]; + private void collectChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, BiConsumer consumer) { + for (ExtendedBlockStorage section : chunk.getBlockStorageArray()) { if (section == null || section.isEmpty()) { - return null; + continue; } BlockStateContainer sectionContainer = section.getData(); //this won't work if the PaletteStorage is of the type EmptyPaletteStorage if (((IBlockStateContainer) sectionContainer).getStorage() == null) { - return null; + continue; } boolean[] isInFilter = getIncludedFilterIndices(lookup, ((IBlockStateContainer) sectionContainer).getPalette()); if (isInFilter.length == 0) { - return null; + continue; } - return new SectionData(section, isInFilter); - }).filter(Objects::nonNull); + consumer.accept(section, isInFilter); + } } private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBlockStatePalette palette) { @@ -271,14 +252,4 @@ private static ObjectIntIdentityMap getPalette(IBlockStatePalette p return states; } } - - private static class SectionData { - ExtendedBlockStorage section; - boolean[] isInFilter; - - SectionData(ExtendedBlockStorage section, boolean[] isInFilter) { - this.section = section; - this.isInFilter = isInFilter; - } - } } From 746faf6df6ea9d615dd2bcd421cef446d1b9f922 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 28 Dec 2022 01:05:17 -0700 Subject: [PATCH 452/935] faster section reorder --- .../baritone/cache/FasterWorldScanner.java | 46 +++++++++++++------ .../java/baritone/process/MineProcess.java | 2 +- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index e133f0e49..9adbf76b0 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -149,9 +149,11 @@ private Stream scanChunkInternal(IPlayerContext ctx, BlockOptionalMeta long chunkX = (long) pos.x << 4; long chunkZ = (long) pos.z << 4; + int playerSectionY = ctx.playerFeet().y >> 4; + List blocks = new ArrayList<>(); - collectChunkSections(lookup, chunkProvider.getLoadedChunk(pos.x, pos.z), (section, isInFilter) -> { + collectChunkSections(lookup, chunkProvider.getLoadedChunk(pos.x, pos.z), playerSectionY, (section, isInFilter) -> { int yOffset = section.getYLocation(); BitArray array = (BitArray) ((IBlockStateContainer) section.getData()).getStorage(); collectBlockLocations(array, isInFilter, place -> blocks.add(new BlockPos( @@ -165,24 +167,38 @@ private Stream scanChunkInternal(IPlayerContext ctx, BlockOptionalMeta - private void collectChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, BiConsumer consumer) { - for (ExtendedBlockStorage section : chunk.getBlockStorageArray()) { - if (section == null || section.isEmpty()) { - continue; + private void collectChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, int playerSection, BiConsumer consumer) { + // iterate over sections relative to player + ExtendedBlockStorage[] sections = chunk.getBlockStorageArray(); + int l = sections.length; + int i = playerSection - 1; + int j = playerSection; + for (; i >= 0 || j < l; ++j, --i) { + if (j < l) { + visitSection(lookup, sections[j], consumer); } - - BlockStateContainer sectionContainer = section.getData(); - //this won't work if the PaletteStorage is of the type EmptyPaletteStorage - if (((IBlockStateContainer) sectionContainer).getStorage() == null) { - continue; + if (i >= 0) { + visitSection(lookup, sections[i], consumer); } + } + } - boolean[] isInFilter = getIncludedFilterIndices(lookup, ((IBlockStateContainer) sectionContainer).getPalette()); - if (isInFilter.length == 0) { - continue; - } - consumer.accept(section, isInFilter); + private void visitSection(BlockOptionalMetaLookup lookup, ExtendedBlockStorage section, BiConsumer consumer) { + if (section == null || section.isEmpty()) { + return; + } + + BlockStateContainer sectionContainer = section.getData(); + //this won't work if the PaletteStorage is of the type EmptyPaletteStorage + if (((IBlockStateContainer) sectionContainer).getStorage() == null) { + return; + } + + boolean[] isInFilter = getIncludedFilterIndices(lookup, ((IBlockStateContainer) sectionContainer).getPalette()); + if (isInFilter.length == 0) { + return; } + consumer.accept(section, isInFilter); } private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBlockStatePalette palette) { diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 807dbc303..137313de9 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -54,7 +54,7 @@ */ public final class MineProcess extends BaritoneProcessHelper implements IMineProcess { - private static final int ORE_LOCATIONS_COUNT = 64; + private static final int ORE_LOCATIONS_COUNT = 32; private BlockOptionalMetaLookup filter; private List knownOreLocations; From b71c9e776ac62cef47e2ec05f484195e850d5e52 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 28 Dec 2022 01:09:46 -0700 Subject: [PATCH 453/935] oops didn't mean to commit that --- src/main/java/baritone/process/MineProcess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 137313de9..807dbc303 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -54,7 +54,7 @@ */ public final class MineProcess extends BaritoneProcessHelper implements IMineProcess { - private static final int ORE_LOCATIONS_COUNT = 32; + private static final int ORE_LOCATIONS_COUNT = 64; private BlockOptionalMetaLookup filter; private List knownOreLocations; From e7e25abc0badffd992a45e6dc0d4233187aefac0 Mon Sep 17 00:00:00 2001 From: William Gray Date: Fri, 30 Dec 2022 00:39:29 +0000 Subject: [PATCH 454/935] Update jitpack.yml --- jitpack.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jitpack.yml b/jitpack.yml index 8a6523f7e..10224fa60 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,3 +1,3 @@ before_install: - - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh - - source install-jdk.sh --feature 17 \ No newline at end of file + - curl -s "https://get.sdkman.io" | bash + - sdk install java 17.0.5-tem From fd55e455a1ce0d486499b8dd8afcecd1b77d4243 Mon Sep 17 00:00:00 2001 From: William Gray Date: Fri, 30 Dec 2022 00:42:53 +0000 Subject: [PATCH 455/935] Update jitpack.yml --- jitpack.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/jitpack.yml b/jitpack.yml index 10224fa60..577b01763 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,3 +1,4 @@ before_install: - curl -s "https://get.sdkman.io" | bash - sdk install java 17.0.5-tem + - sdk use java 17.0.5-tem From e59bf9ab97ded964c78739788a61c2ed9144dee6 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 30 Dec 2022 16:09:45 +0100 Subject: [PATCH 456/935] Grab block only once --- .../baritone/pathing/movement/movements/MovementTraverse.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 43386c4b3..bc91ee17f 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -150,7 +150,8 @@ public static double cost(CalculationContext context, int x, int y, int z, int d if (!standingOnABlock) { // standing on water / swimming return COST_INF; // this is obviously impossible } - if (srcDown instanceof BlockLiquid && (context.getBlock(x,y,z) == Blocks.WATERLILY || context.getBlock(x,y,z) == Blocks.CARPET)) { + Block blockSrc = context.getBlock(x, y, z); + if (srcDown instanceof BlockLiquid && (blockSrc == Blocks.WATERLILY || blockSrc == Blocks.CARPET)) { return COST_INF; // we can stand on these but can't place against them } WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol From f76283ebfeb5bba7d53d76f727335de665131951 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 3 Jan 2023 00:50:56 +0100 Subject: [PATCH 457/935] Remove unused imports --- .../baritone/pathing/movement/movements/MovementDescend.java | 1 - .../baritone/pathing/movement/movements/MovementDiagonal.java | 1 - .../baritone/pathing/movement/movements/MovementTraverse.java | 1 - 3 files changed, 3 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 52f102b2a..d36843cdd 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -32,7 +32,6 @@ import com.google.common.collect.ImmutableSet; import net.minecraft.block.Block; import net.minecraft.block.BlockFalling; -import net.minecraft.block.BlockLiquid; import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.init.Blocks; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 0a11b2555..f72a0446f 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -30,7 +30,6 @@ import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; import net.minecraft.block.Block; -import net.minecraft.block.BlockLiquid; import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.init.Blocks; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index bc91ee17f..473b14393 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -33,7 +33,6 @@ import com.google.common.collect.ImmutableSet; import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; -import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; From 41968546d1efb9559b172e4a1d0f66f64bd4c927 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 6 Jan 2023 04:09:56 +0100 Subject: [PATCH 458/935] Update workflows --- .github/workflows/gradle_build.yml | 8 ++++---- .github/workflows/run_tests.yml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 34e93bff2..6a800e98e 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -13,9 +13,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up JDK 8 - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: java-version: '8' distribution: 'adopt' @@ -27,13 +27,13 @@ jobs: run: ./gradlew build - name: Archive Artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: Artifacts path: dist/ - name: Archive mapping.txt - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: Mappings path: build/tmp/proguard/mapping.txt diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 1af26a476..08fd28ef6 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -11,9 +11,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up JDK 9 - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: java-version: '8' distribution: 'adopt' From 678f8bc77fa5a3f22b364faf29401c62a2e1500c Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 6 Jan 2023 04:25:03 +0100 Subject: [PATCH 459/935] Use Temurin JDK --- .github/workflows/gradle_build.yml | 2 +- .github/workflows/run_tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 6a800e98e..d69498bc3 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -18,7 +18,7 @@ jobs: uses: actions/setup-java@v3 with: java-version: '8' - distribution: 'adopt' + distribution: 'temurin' - name: Grant execute permission for gradlew run: chmod +x gradlew diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 08fd28ef6..18eac5e2e 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -16,7 +16,7 @@ jobs: uses: actions/setup-java@v3 with: java-version: '8' - distribution: 'adopt' + distribution: 'temurin' - name: Grant execute permission for gradlew run: chmod +x gradlew From a1a94ec0d154dd519b09443f0cb486aeb9ed15b6 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 6 Jan 2023 04:26:03 +0100 Subject: [PATCH 460/935] Fix step name --- .github/workflows/run_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 18eac5e2e..d2d849fb7 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 9 + - name: Set up JDK 8 uses: actions/setup-java@v3 with: java-version: '8' From b0fb474e1dd597fcb65e90c63b65d4e4a0105636 Mon Sep 17 00:00:00 2001 From: Entropy5 <44469915+Entropy5@users.noreply.github.com> Date: Mon, 9 Jan 2023 02:33:10 +0100 Subject: [PATCH 461/935] buildinlayers ~ buildonlyselection lag fix for big schematics (skips layers more properly) --- .../java/baritone/process/BuilderProcess.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index ccadd5512..9b932a657 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -67,6 +67,7 @@ import java.nio.file.Files; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; import static baritone.api.pathing.movement.ActionCosts.COST_INF; @@ -83,6 +84,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private int layer; private int numRepeats; private List approxPlaceable; + public final int[] selectionYBounds = {0, 0}; public BuilderProcess(Baritone baritone) { super(baritone); @@ -111,6 +113,24 @@ public void build(String name, ISchematic schematic, Vec3i origin) { this.origin = new Vec3i(x, y, z); this.paused = false; this.layer = Baritone.settings().startAtLayer.value; + if (Baritone.settings().buildOnlySelection.value) { + if (baritone.getSelectionManager().getSelections().length == 0) { + logDirect("Poor little kitten forgot to set a selection while BuildOnlySelection is true"); + } + if (Baritone.settings().buildInLayers.value) { + OptionalInt minim = Stream.of(baritone.getSelectionManager().getSelections()).mapToInt(sel -> sel.min().y).min(); + OptionalInt maxim = Stream.of(baritone.getSelectionManager().getSelections()).mapToInt(sel -> sel.max().y).max(); + logDirect(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); + logDirect(String.format("Selection starts at y=%s and ends at y=%s", minim.isPresent() ? minim.getAsInt() : 0, maxim.isPresent() ? maxim.getAsInt() : 0)); + if (minim.isPresent() && maxim.isPresent()) { + selectionYBounds[0] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; + selectionYBounds[1] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y; + } + this.layer = this.selectionYBounds[0] / Baritone.settings().layerHeight.value; + logDirect("Skipped everything under layer " + this.layer); + } + } + this.numRepeats = 0; this.observedCompleted = new LongOpenHashSet(); this.incorrectPositions = null; @@ -459,6 +479,7 @@ public int lengthZ() { } BuilderCalculationContext bcc = new BuilderCalculationContext(); if (!recalc(bcc)) { + checkAboveSelection(); if (Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < realSchematic.heightY()) { logDirect("Starting layer " + layer); layer++; @@ -549,6 +570,7 @@ public int lengthZ() { if (goal == null) { goal = assemble(bcc, approxPlaceable, true); // we're far away, so assume that we have our whole inventory to recalculate placeable properly if (goal == null) { + checkAboveSelection(); if (Baritone.settings().skipFailedLayers.value && Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < realSchematic.heightY()) { logDirect("Skipping layer that I cannot construct! Layer #" + layer); layer++; @@ -562,6 +584,14 @@ public int lengthZ() { return new PathingCommandContext(goal, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH, bcc); } + private void checkAboveSelection() { + if (Baritone.settings().buildInLayers.value && Baritone.settings().buildOnlySelection.value && + this.layer * Baritone.settings().layerHeight.value > this.selectionYBounds[1]) { + logDirect("Skipped everything above layer " + this.layer); + this.layer = realSchematic.heightY() / Baritone.settings().layerHeight.value; + } + } + private boolean recalc(BuilderCalculationContext bcc) { if (incorrectPositions == null) { incorrectPositions = new HashSet<>(); From 9a9b4a1874241cfd02d396830196bc4df5e80230 Mon Sep 17 00:00:00 2001 From: Entropy5 <44469915+Entropy5@users.noreply.github.com> Date: Tue, 10 Jan 2023 05:56:30 +0100 Subject: [PATCH 462/935] bugfix for odd height schematics --- src/main/java/baritone/process/BuilderProcess.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 9b932a657..d8b5316ac 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -84,7 +84,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private int layer; private int numRepeats; private List approxPlaceable; - public final int[] selectionYBounds = {0, 0}; + public final int[] selectionLayerBounds = {0, 0}; public BuilderProcess(Baritone baritone) { super(baritone); @@ -123,10 +123,10 @@ public void build(String name, ISchematic schematic, Vec3i origin) { logDirect(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); logDirect(String.format("Selection starts at y=%s and ends at y=%s", minim.isPresent() ? minim.getAsInt() : 0, maxim.isPresent() ? maxim.getAsInt() : 0)); if (minim.isPresent() && maxim.isPresent()) { - selectionYBounds[0] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; - selectionYBounds[1] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y; + selectionLayerBounds[0] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; + selectionLayerBounds[1] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y; } - this.layer = this.selectionYBounds[0] / Baritone.settings().layerHeight.value; + this.layer = this.selectionLayerBounds[0] / Baritone.settings().layerHeight.value; logDirect("Skipped everything under layer " + this.layer); } } @@ -586,9 +586,9 @@ public int lengthZ() { private void checkAboveSelection() { if (Baritone.settings().buildInLayers.value && Baritone.settings().buildOnlySelection.value && - this.layer * Baritone.settings().layerHeight.value > this.selectionYBounds[1]) { + this.layer * Baritone.settings().layerHeight.value > this.selectionLayerBounds[1]) { logDirect("Skipped everything above layer " + this.layer); - this.layer = realSchematic.heightY() / Baritone.settings().layerHeight.value; + this.layer = realSchematic.heightY() / Baritone.settings().layerHeight.value + 1; } } From 1680eeb80da785338a2d27e4c432610be5e102f2 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 10 Jan 2023 17:25:32 +0100 Subject: [PATCH 463/935] Handle mods breaking our world loading hook --- .../java/baritone/cache/WorldProvider.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index a7756137c..03ada444f 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -24,6 +24,7 @@ import baritone.utils.accessor.IChunkProviderServer; import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.world.WorldServer; +import net.minecraft.world.World; import org.apache.commons.lang3.SystemUtils; import java.io.File; @@ -44,9 +45,11 @@ public class WorldProvider implements IWorldProvider, Helper { private static final Map worldCache = new HashMap<>(); // this is how the bots have the same cached world private WorldData currentWorld; + private World mcWorld; // this let's us detect a broken load/unload hook @Override public final WorldData getCurrentWorld() { + detectAndHandleBrokenLoading(); return this.currentWorld; } @@ -83,6 +86,7 @@ public final void initWorld(int dimension) { } else { //replaymod causes null currentServerData and false singleplayer. currentWorld = null; + mcWorld = mc.world; return; } if (SystemUtils.IS_OS_WINDOWS) { @@ -110,11 +114,13 @@ public final void initWorld(int dimension) { synchronized (worldCache) { this.currentWorld = worldCache.computeIfAbsent(dir, d -> new WorldData(d, dimension)); } + this.mcWorld = mc.world; } public final void closeWorld() { WorldData world = this.currentWorld; this.currentWorld = null; + this.mcWorld = null; if (world == null) { return; } @@ -122,8 +128,20 @@ public final void closeWorld() { } public final void ifWorldLoaded(Consumer currentWorldConsumer) { + detectAndHandleBrokenLoading(); if (this.currentWorld != null) { currentWorldConsumer.accept(this.currentWorld); } } + + private final void detectAndHandleBrokenLoading() { + if (this.mcWorld != mc.world) { + if (this.currentWorld != null) { + closeWorld(); + } + if (mc.world != null) { + initWorld(mc.world.provider.getDimensionType().getId()); + } + } + } } From 77b2b26a7a86bfd7a3a3d05fd7055f81349f2a05 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 10 Jan 2023 18:52:18 +0100 Subject: [PATCH 464/935] Add fix for 1.19.3 here already --- src/main/java/baritone/cache/WorldProvider.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 03ada444f..c335b364b 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -142,6 +142,8 @@ private final void detectAndHandleBrokenLoading() { if (mc.world != null) { initWorld(mc.world.provider.getDimensionType().getId()); } + } else if (currentWorld == null && mc.world != null) { + initWorld(mc.world.provider.getDimensionType().getId()); } } } From 75e39e7ef553a07cfe0e2f577e8bd1802dc8e1fb Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 10 Jan 2023 17:30:33 +0100 Subject: [PATCH 465/935] Log when doing things out of the ordinary --- src/main/java/baritone/cache/WorldProvider.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index c335b364b..3addb1762 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -85,6 +85,7 @@ public final void initWorld(int dimension) { folderName = mc.getCurrentServerData().serverIP; } else { //replaymod causes null currentServerData and false singleplayer. + System.out.println("World seems to be a replay. Not loading Baritone cache."); currentWorld = null; mcWorld = mc.world; return; @@ -137,12 +138,15 @@ public final void ifWorldLoaded(Consumer currentWorldConsumer) { private final void detectAndHandleBrokenLoading() { if (this.mcWorld != mc.world) { if (this.currentWorld != null) { + System.out.println("mc.world unloaded unnoticed! Unloading Baritone cache now."); closeWorld(); } if (mc.world != null) { + System.out.println("mc.world loaded unnoticed! Loading Baritone cache now."); initWorld(mc.world.provider.getDimensionType().getId()); } } else if (currentWorld == null && mc.world != null) { + System.out.println("Retrying to load Baritone cache"); initWorld(mc.world.provider.getDimensionType().getId()); } } From a6f3c956846a357fbf3cafd1e6f5bf44bc158e2c Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 10 Jan 2023 18:53:43 +0100 Subject: [PATCH 466/935] Don't spam the log when in a replay --- src/main/java/baritone/cache/WorldProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 3addb1762..98ec1bbb2 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -145,7 +145,7 @@ private final void detectAndHandleBrokenLoading() { System.out.println("mc.world loaded unnoticed! Loading Baritone cache now."); initWorld(mc.world.provider.getDimensionType().getId()); } - } else if (currentWorld == null && mc.world != null) { + } else if (currentWorld == null && mc.world != null && (mc.isSingleplayer() || mc.getCurrentServerData() != null)) { System.out.println("Retrying to load Baritone cache"); initWorld(mc.world.provider.getDimensionType().getId()); } From 98a87d099b0d0d4f147fa7d35f674c08de5c2379 Mon Sep 17 00:00:00 2001 From: Entropy5 <44469915+Entropy5@users.noreply.github.com> Date: Wed, 11 Jan 2023 04:36:15 +0100 Subject: [PATCH 467/935] zac suggestion --- .../java/baritone/process/BuilderProcess.java | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index d8b5316ac..298c88770 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -84,7 +84,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private int layer; private int numRepeats; private List approxPlaceable; - public final int[] selectionLayerBounds = {0, 0}; + public int stopAtHeight = 0; public BuilderProcess(Baritone baritone) { super(baritone); @@ -113,21 +113,24 @@ public void build(String name, ISchematic schematic, Vec3i origin) { this.origin = new Vec3i(x, y, z); this.paused = false; this.layer = Baritone.settings().startAtLayer.value; + this.stopAtHeight = schematic.heightY(); if (Baritone.settings().buildOnlySelection.value) { if (baritone.getSelectionManager().getSelections().length == 0) { logDirect("Poor little kitten forgot to set a selection while BuildOnlySelection is true"); - } - if (Baritone.settings().buildInLayers.value) { + this.stopAtHeight = 0; + } else if (Baritone.settings().buildInLayers.value) { OptionalInt minim = Stream.of(baritone.getSelectionManager().getSelections()).mapToInt(sel -> sel.min().y).min(); OptionalInt maxim = Stream.of(baritone.getSelectionManager().getSelections()).mapToInt(sel -> sel.max().y).max(); - logDirect(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); - logDirect(String.format("Selection starts at y=%s and ends at y=%s", minim.isPresent() ? minim.getAsInt() : 0, maxim.isPresent() ? maxim.getAsInt() : 0)); if (minim.isPresent() && maxim.isPresent()) { - selectionLayerBounds[0] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; - selectionLayerBounds[1] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y; + int startAtHeight = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; + this.stopAtHeight = (Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y) + 1; + this.layer = startAtHeight / Baritone.settings().layerHeight.value; + if (Baritone.settings().chatDebug.value) { + logDirect(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); + logDirect(String.format("Selection starts at y=%s and ends at y=%s", minim.getAsInt(), maxim.getAsInt())); + logDirect(String.format("Considering relevant height %s - %s", startAtHeight, this.stopAtHeight)); + } } - this.layer = this.selectionLayerBounds[0] / Baritone.settings().layerHeight.value; - logDirect("Skipped everything under layer " + this.layer); } } @@ -479,8 +482,7 @@ public int lengthZ() { } BuilderCalculationContext bcc = new BuilderCalculationContext(); if (!recalc(bcc)) { - checkAboveSelection(); - if (Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < realSchematic.heightY()) { + if (Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < stopAtHeight) { logDirect("Starting layer " + layer); layer++; return onTick(calcFailed, isSafeToCancel, recursions + 1); @@ -570,7 +572,6 @@ public int lengthZ() { if (goal == null) { goal = assemble(bcc, approxPlaceable, true); // we're far away, so assume that we have our whole inventory to recalculate placeable properly if (goal == null) { - checkAboveSelection(); if (Baritone.settings().skipFailedLayers.value && Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < realSchematic.heightY()) { logDirect("Skipping layer that I cannot construct! Layer #" + layer); layer++; @@ -584,14 +585,6 @@ public int lengthZ() { return new PathingCommandContext(goal, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH, bcc); } - private void checkAboveSelection() { - if (Baritone.settings().buildInLayers.value && Baritone.settings().buildOnlySelection.value && - this.layer * Baritone.settings().layerHeight.value > this.selectionLayerBounds[1]) { - logDirect("Skipped everything above layer " + this.layer); - this.layer = realSchematic.heightY() / Baritone.settings().layerHeight.value + 1; - } - } - private boolean recalc(BuilderCalculationContext bcc) { if (incorrectPositions == null) { incorrectPositions = new HashSet<>(); From de5f6d5fced796fa6af88092e6202f5e18289562 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Wed, 11 Jan 2023 23:56:52 +0100 Subject: [PATCH 468/935] Apply suggested reordering --- .../movement/movements/MovementDiagonal.java | 11 ++++++----- .../movement/movements/MovementPillar.java | 2 +- .../movement/movements/MovementTraverse.java | 17 +++++++++-------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index f72a0446f..9a17d22bc 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -114,6 +114,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des return; } IBlockState destInto = context.get(destX, y, destZ); + IBlockState fromDown = context.get(x, y - 1, z); boolean ascend = false; IBlockState destWalkOn; boolean descend = false; @@ -126,9 +127,9 @@ public static void cost(CalculationContext context, int x, int y, int z, int des destWalkOn = destInto; } else { destWalkOn = context.get(destX, y - 1, destZ); - boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y-1, z, context.get(x, y-1, z)); + boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y - 1, z, fromDown); frostWalker = standingOnABlock && MovementHelper.canUseFrostWalker(context, destWalkOn); - if (!MovementHelper.canWalkOn(context, destX, y - 1, destZ, destWalkOn) && !frostWalker) { + if (!frostWalker && !MovementHelper.canWalkOn(context, destX, y - 1, destZ, destWalkOn)) { descend = true; if (!context.allowDiagonalDescend || !MovementHelper.canWalkOn(context, destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context, destX, y - 1, destZ, destWalkOn)) { return; @@ -145,11 +146,11 @@ public static void cost(CalculationContext context, int x, int y, int z, int des } else if (destWalkOn.getBlock() == Blocks.WATER) { multiplier += context.walkOnWaterOnePenalty * SQRT_2; } - Block fromDown = context.get(x, y - 1, z).getBlock(); - if (fromDown == Blocks.LADDER || fromDown == Blocks.VINE) { + Block fromDownBlock = fromDown.getBlock(); + if (fromDownBlock == Blocks.LADDER || fromDownBlock == Blocks.VINE) { return; } - if (fromDown == Blocks.SOUL_SAND) { + if (fromDownBlock == Blocks.SOUL_SAND) { multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; } Block cuttingOver1 = context.get(x, y - 1, destZ).getBlock(); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 5d8d32a8c..cfa9d9260 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -101,7 +101,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { // if we're standing on water and assumeWalkOnWater is false, we must have ascended to here, or sneak backplaced, so it is possible to pillar again return COST_INF; } - if (fromDown.getBlock() instanceof BlockLiquid && (from == Blocks.WATERLILY || from == Blocks.CARPET)) { + if ((from == Blocks.WATERLILY || from == Blocks.CARPET) && fromDown.getBlock() instanceof BlockLiquid) { // to ascend here we'd have to break the block we are standing on return COST_INF; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 473b14393..c8a3528ee 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -71,10 +71,11 @@ public static double cost(CalculationContext context, int x, int y, int z, int d IBlockState pb0 = context.get(destX, y + 1, destZ); IBlockState pb1 = context.get(destX, y, destZ); IBlockState destOn = context.get(destX, y - 1, destZ); - Block srcDown = context.getBlock(x, y - 1, z); - boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y-1, z, context.get(x, y-1, z)); + IBlockState srcDown = context.get(x, y - 1, z); + Block srcDownBlock = srcDown.getBlock(); + boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y-1, z, srcDown); boolean frostWalker = standingOnABlock && !context.assumeWalkOnWater && MovementHelper.canUseFrostWalker(context, destOn); - if (MovementHelper.canWalkOn(context, destX, y - 1, destZ, destOn) || frostWalker) { //this is a walk, not a bridge + if (frostWalker || MovementHelper.canWalkOn(context, destX, y - 1, destZ, destOn)) { //this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; boolean water = false; if (MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock())) { @@ -88,7 +89,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } else if (destOn.getBlock() == Blocks.WATER) { WC += context.walkOnWaterOnePenalty; } - if (srcDown == Blocks.SOUL_SAND) { + if (srcDownBlock == Blocks.SOUL_SAND) { WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; } } @@ -106,13 +107,13 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } return WC; } - if (srcDown == Blocks.LADDER || srcDown == Blocks.VINE) { + if (srcDownBlock == Blocks.LADDER || srcDownBlock == Blocks.VINE) { hardness1 *= 5; hardness2 *= 5; } return WC + hardness1 + hardness2; } else {//this is a bridge, so we need to place a block - if (srcDown == Blocks.LADDER || srcDown == Blocks.VINE) { + if (srcDownBlock == Blocks.LADDER || srcDownBlock == Blocks.VINE) { return COST_INF; } if (MovementHelper.isReplaceable(destX, y - 1, destZ, destOn, context.bsi)) { @@ -143,14 +144,14 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } // now that we've checked all possible directions to side place, we actually need to backplace - if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof BlockSlab && !((BlockSlab) srcDown).isDouble())) { + if (srcDownBlock == Blocks.SOUL_SAND || (srcDownBlock instanceof BlockSlab && !((BlockSlab) srcDownBlock).isDouble())) { return COST_INF; // can't sneak and backplace against soul sand or half slabs (regardless of whether it's top half or bottom half) =/ } if (!standingOnABlock) { // standing on water / swimming return COST_INF; // this is obviously impossible } Block blockSrc = context.getBlock(x, y, z); - if (srcDown instanceof BlockLiquid && (blockSrc == Blocks.WATERLILY || blockSrc == Blocks.CARPET)) { + if ((blockSrc == Blocks.WATERLILY || blockSrc == Blocks.CARPET) && srcDownBlock instanceof BlockLiquid) { return COST_INF; // we can stand on these but can't place against them } WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol From 16a62625b35d42420ea26e2cfb1c1ea2f6939c17 Mon Sep 17 00:00:00 2001 From: Entropy5 <44469915+Entropy5@users.noreply.github.com> Date: Thu, 12 Jan 2023 04:29:31 +0100 Subject: [PATCH 469/935] this seems to work as well? --- src/main/java/baritone/process/BuilderProcess.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 298c88770..f3f138c96 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -95,6 +95,7 @@ public void build(String name, ISchematic schematic, Vec3i origin) { this.name = name; this.schematic = schematic; this.realSchematic = null; + boolean buildingSelectionSchematic = schematic instanceof SelectionSchematic; if (!Baritone.settings().buildSubstitutes.value.isEmpty()) { this.schematic = new SubstituteSchematic(this.schematic, Baritone.settings().buildSubstitutes.value); } @@ -114,7 +115,7 @@ public void build(String name, ISchematic schematic, Vec3i origin) { this.paused = false; this.layer = Baritone.settings().startAtLayer.value; this.stopAtHeight = schematic.heightY(); - if (Baritone.settings().buildOnlySelection.value) { + if (Baritone.settings().buildOnlySelection.value && buildingSelectionSchematic) { // currently redundant but safer maybe if (baritone.getSelectionManager().getSelections().length == 0) { logDirect("Poor little kitten forgot to set a selection while BuildOnlySelection is true"); this.stopAtHeight = 0; @@ -124,12 +125,10 @@ public void build(String name, ISchematic schematic, Vec3i origin) { if (minim.isPresent() && maxim.isPresent()) { int startAtHeight = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; this.stopAtHeight = (Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y) + 1; - this.layer = startAtHeight / Baritone.settings().layerHeight.value; - if (Baritone.settings().chatDebug.value) { - logDirect(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); - logDirect(String.format("Selection starts at y=%s and ends at y=%s", minim.getAsInt(), maxim.getAsInt())); - logDirect(String.format("Considering relevant height %s - %s", startAtHeight, this.stopAtHeight)); - } + this.layer = Math.max(this.layer, startAtHeight / Baritone.settings().layerHeight.value); // startAtLayer or startAtHeight, whichever is highest + logDebug(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); + logDebug(String.format("Selection starts at y=%s and ends at y=%s", minim.getAsInt(), maxim.getAsInt())); + logDebug(String.format("Considering relevant height %s - %s", startAtHeight, this.stopAtHeight)); } } } From c8dd4f26f7496499ffbd94c7ccf01e50eb1a227d Mon Sep 17 00:00:00 2001 From: Argentoz <35398135+Argentoz@users.noreply.github.com> Date: Thu, 12 Jan 2023 15:02:54 +0300 Subject: [PATCH 470/935] Fix :) WTF --- src/main/java/baritone/pathing/movement/MovementHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index e3fc6a038..44cd1f6ac 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -51,7 +51,7 @@ public interface MovementHelper extends ActionCosts, Helper { static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { - if (!bsi.worldBorder.canPlaceAt(x, y)) { + if (!bsi.worldBorder.canPlaceAt(x, z)) { return true; } Block b = state.getBlock(); From c39b6c3fe7bf297e63377729d5c18807255650dd Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Thu, 12 Jan 2023 21:39:55 +0100 Subject: [PATCH 471/935] Don't grab state if we don't need it --- .../baritone/pathing/movement/movements/MovementDiagonal.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 9a17d22bc..f56babc2d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -114,7 +114,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des return; } IBlockState destInto = context.get(destX, y, destZ); - IBlockState fromDown = context.get(x, y - 1, z); + IBlockState fromDown; boolean ascend = false; IBlockState destWalkOn; boolean descend = false; @@ -125,8 +125,10 @@ public static void cost(CalculationContext context, int x, int y, int z, int des return; } destWalkOn = destInto; + fromDown = context.get(x, y - 1, z); } else { destWalkOn = context.get(destX, y - 1, destZ); + fromDown = context.get(x, y - 1, z); boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y - 1, z, fromDown); frostWalker = standingOnABlock && MovementHelper.canUseFrostWalker(context, destWalkOn); if (!frostWalker && !MovementHelper.canWalkOn(context, destX, y - 1, destZ, destWalkOn)) { From 9935da8a6f623d881af8b4bdf40666990701ff8d Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Thu, 12 Jan 2023 21:57:54 +0100 Subject: [PATCH 472/935] Add explanation and add extra check --- src/main/java/baritone/pathing/path/PathExecutor.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 387548517..e68de4805 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -388,7 +388,12 @@ private boolean shouldSprintNextTick() { // Since MovementDescend can't know the next movement we have to tell it if (next instanceof MovementTraverse || next instanceof MovementParkour) { boolean couldPlaceInstead = Baritone.settings().allowPlace.value && behavior.baritone.getInventoryBehavior().hasGenericThrowaway() && next instanceof MovementParkour; // traverse doesn't react fast enough - boolean sameFlatDirection = current.getDirection().up().crossProduct(next.getDirection()).equals(BlockPos.ORIGIN); // here's why you learn maths in school + // this is true if the next movement does not ascend or descends and goes into the same cardinal direction (N-NE-E-SE-S-SW-W-NW) as the descend + // in that case current.getDirection() is e.g. (0, -1, 1) and next.getDirection() is e.g. (0, 0, 3) so the cross product of (0, 0, 1) and (0, 0, 3) is taken, which is (0, 0, 0) because the vectors are colinear (don't form a plane) + // since movements in exactly the opposite direction (e.g. descend (0, -1, 1) and traverse (0, 0, -1)) would also pass this check we also have to rule out that case + // we can do that by adding the directions because traverse is always 1 long like descend and parkour can't jump through current.getSrc().down() + boolean sameFlatDirection = !current.getDirection().up().add(next.getDirection()).equals(BlockPos.ORIGIN) + && current.getDirection().up().crossProduct(next.getDirection()).equals(BlockPos.ORIGIN); // here's why you learn maths in school if (sameFlatDirection && !couldPlaceInstead) { ((MovementDescend) current).forceSafeMode(); } From 85c21fa8e35d0ca8cbb4d58cc463f4db0eae565e Mon Sep 17 00:00:00 2001 From: leijurv Date: Thu, 12 Jan 2023 14:52:38 -0800 Subject: [PATCH 473/935] add comment --- .../baritone/pathing/movement/movements/MovementParkour.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 76b17f0f6..a36f84bce 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -276,7 +276,7 @@ public MovementState updateState(MovementState state) { } } else if (!ctx.playerFeet().equals(src)) { if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().posY - src.y > 0.0001) { - if (Baritone.settings().allowPlace.value + if (Baritone.settings().allowPlace.value // see PR #3775 && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway() && !MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().onGround From 6a175379fb84d5fea09dc0ec3489967eb7d570e6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 13 Jan 2023 11:10:24 -0800 Subject: [PATCH 474/935] v1.2.16 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b922fc900..67c303265 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.2.15' +version '1.2.16' buildscript { repositories { From 6bbdba7a2182dcfe13ed12cc78a36c2afbc79d64 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 13 Jan 2023 11:17:57 -0800 Subject: [PATCH 475/935] bump --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c50caf56a..1b5c70935 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,9 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s [Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) -The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.2.15/baritone-api-forge-1.2.15.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. +The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to +install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click +[here](https://github.com/cabaletta/baritone/releases/download/v1.2.16/baritone-api-forge-1.2.16.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. From a3f70e7977128641ded8cb3635ddf47ca5d20d64 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 15 Jan 2023 00:56:30 -0800 Subject: [PATCH 476/935] add fullypassable to precomputeddata --- .../pathing/movement/MovementHelper.java | 73 +++++++++++-------- .../movement/movements/MovementParkour.java | 16 ++-- .../pathing/precompute/PrecomputedData.java | 27 ++++++- 3 files changed, 78 insertions(+), 38 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index c32cde601..575815ea2 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -37,7 +37,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.IBlockAccess; import java.util.Optional; @@ -210,33 +209,10 @@ static boolean canWalkThroughPosition(BlockStateInterface bsi, int x, int y, int return block.isPassable(bsi.access, bsi.isPassableBlockPos.setPos(x, y, z)); } - - /** - * canWalkThrough but also won't impede movement at all. so not including doors or fence gates (we'd have to right click), - * not including water, and not including ladders or vines or cobwebs (they slow us down) - * - * @param context Calculation context to provide block state lookup - * @param x The block's x position - * @param y The block's y position - * @param z The block's z position - * @return Whether or not the block at the specified position - */ - static boolean fullyPassable(CalculationContext context, int x, int y, int z) { - return fullyPassable( - context.bsi.access, - context.bsi.isPassableBlockPos.setPos(x, y, z), - context.bsi.get0(x, y, z) - ); - } - - static boolean fullyPassable(IPlayerContext ctx, BlockPos pos) { - return fullyPassable(ctx.world(), pos, ctx.world().getBlockState(pos)); - } - - static boolean fullyPassable(IBlockAccess access, BlockPos pos, IBlockState state) { + static Ternary fullyPassableBlockState(IBlockState state) { Block block = state.getBlock(); if (block == Blocks.AIR) { // early return for most common case - return true; + return YES; } // exceptions - blocks that are isPassable true, but we can't actually jump through if (block == Blocks.FIRE @@ -252,10 +228,49 @@ static boolean fullyPassable(IBlockAccess access, BlockPos pos, IBlockState stat || block instanceof BlockTrapDoor || block instanceof BlockEndPortal || block instanceof BlockSkull) { - return false; + return NO; } // door, fence gate, liquid, trapdoor have been accounted for, nothing else uses the world or pos parameters - return block.isPassable(access, pos); + // at least in 1.12.2 vanilla, that is..... + try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information + if (block.isPassable(null, null)) { + return YES; + } else { + return NO; + } + } catch (Throwable exception) { + // see PR #1087 for why + System.out.println("The block " + state.getBlock().getLocalizedName() + " requires a special case due to the exception " + exception.getMessage()); + return MAYBE; + } + } + + /** + * canWalkThrough but also won't impede movement at all. so not including doors or fence gates (we'd have to right click), + * not including water, and not including ladders or vines or cobwebs (they slow us down) + */ + static boolean fullyPassable(CalculationContext context, int x, int y, int z) { + return fullyPassable(context, x, y, z, context.get(x, y, z)); + } + + static boolean fullyPassable(CalculationContext context, int x, int y, int z, IBlockState state) { + return context.precomputedData.fullyPassable(context.bsi, x, y, z, state); + } + + static boolean fullyPassable(IPlayerContext ctx, BlockPos pos) { + IBlockState state = ctx.world().getBlockState(pos); + Ternary fullyPassable = fullyPassableBlockState(state); + if (fullyPassable == YES) { + return true; + } + if (fullyPassable == NO) { + return false; + } + return fullyPassablePosition(new BlockStateInterface(ctx), pos.getX(), pos.getY(), pos.getZ(), state); // meh + } + + static boolean fullyPassablePosition(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + return state.getBlock().isPassable(bsi.access, bsi.isPassableBlockPos.setPos(x, y, z)); } static boolean isReplaceable(int x, int y, int z, IBlockState state, BlockStateInterface bsi) { @@ -488,7 +503,7 @@ static boolean mustBeSolidToWalkOn(CalculationContext context, int x, int y, int if (context.assumeWalkOnWater) { return false; } - Block blockAbove = context.getBlock(x, y+1, z); + Block blockAbove = context.getBlock(x, y + 1, z); if (blockAbove instanceof BlockLiquid) { return false; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index a36f84bce..9a3925a02 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -112,13 +112,13 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac maxJump = 3; } } - + // check parkour jumps from smallest to largest for obstacles/walls and landing positions int verifiedMaxJump = 1; // i - 1 (when i = 2) for (int i = 2; i <= maxJump; i++) { int destX = x + xDiff * i; int destZ = z + zDiff * i; - + // check head/feet if (!MovementHelper.fullyPassable(context, destX, y + 1, destZ)) { break; @@ -126,10 +126,10 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac if (!MovementHelper.fullyPassable(context, destX, y + 2, destZ)) { break; } - + // check for ascend landing position IBlockState destInto = context.bsi.get0(destX, y, destZ); - if (!MovementHelper.fullyPassable(context.bsi.access, context.bsi.isPassableBlockPos.setPos(destX, y, destZ), destInto)) { + if (!MovementHelper.fullyPassable(context, destX, y, destZ, destInto)) { if (i <= 3 && context.allowParkourAscend && context.canSprint && MovementHelper.canWalkOn(context, destX, y, destZ, destInto) && checkOvershootSafety(context.bsi, destX + xDiff, y + 1, destZ + zDiff)) { res.x = destX; res.y = y + 1; @@ -139,7 +139,7 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac } break; } - + // check for flat landing position IBlockState landingOn = context.bsi.get0(destX, y - 1, destZ); // farmland needs to be canWalkOn otherwise farm can never work at all, but we want to specifically disallow ending a jump on farmland haha @@ -156,14 +156,14 @@ public static void cost(CalculationContext context, int x, int y, int z, EnumFac } break; } - + if (!MovementHelper.fullyPassable(context, destX, y + 3, destZ)) { break; } - + verifiedMaxJump = i; } - + // parkour place starts here if (!context.allowParkourPlace) { return; diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 72eb575b3..1b05bee6d 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -25,7 +25,7 @@ import static baritone.pathing.precompute.Ternary.MAYBE; import static baritone.pathing.precompute.Ternary.YES; -public class PrecomputedData { // TODO add isFullyPassable +public class PrecomputedData { private final int[] data = new int[Block.BLOCK_STATE_IDS.size()]; @@ -34,6 +34,8 @@ public class PrecomputedData { // TODO add isFullyPassable private static final int CAN_WALK_ON_SPECIAL_MASK = 1 << 2; private static final int CAN_WALK_THROUGH_MASK = 1 << 3; private static final int CAN_WALK_THROUGH_SPECIAL_MASK = 1 << 4; + private static final int FULLY_PASSABLE_MASK = 1 << 5; + private static final int FULLY_PASSABLE_SPECIAL_MASK = 1 << 6; private int fillData(int id, IBlockState state) { int blockData = 0; @@ -54,6 +56,14 @@ private int fillData(int id, IBlockState state) { blockData |= CAN_WALK_THROUGH_SPECIAL_MASK; } + Ternary fullyPassableState = MovementHelper.fullyPassableBlockState(state); + if (fullyPassableState == YES) { + blockData |= FULLY_PASSABLE_MASK; + } + if (fullyPassableState == MAYBE) { + blockData |= FULLY_PASSABLE_SPECIAL_MASK; + } + blockData |= COMPLETED_MASK; data[id] = blockData; // in theory, this is thread "safe" because every thread should compute the exact same int to write? @@ -89,4 +99,19 @@ public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlo return (blockData & CAN_WALK_THROUGH_MASK) != 0; } } + + public boolean fullyPassable(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { + int id = Block.BLOCK_STATE_IDS.get(state); + int blockData = data[id]; + + if ((blockData & COMPLETED_MASK) == 0) { // we need to fill in the data + blockData = fillData(id, state); + } + + if ((blockData & FULLY_PASSABLE_SPECIAL_MASK) != 0) { + return MovementHelper.fullyPassablePosition(bsi, x, y, z, state); + } else { + return (blockData & FULLY_PASSABLE_MASK) != 0; + } + } } From d6d9af65fbb6083ff528561065c270ccc053057f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 15 Jan 2023 01:02:52 -0800 Subject: [PATCH 477/935] reformat --- .../command/datatypes/RelativeCoordinate.java | 4 +-- .../api/command/datatypes/RelativeFile.java | 8 ++--- .../baritone/api/pathing/goals/GoalNear.java | 2 +- .../api/pathing/goals/GoalRunAway.java | 2 +- .../api/schematic/SubstituteSchematic.java | 6 ++-- .../java/baritone/api/utils/SettingsUtil.java | 2 +- .../baritone/launch/mixins/MixinItemTool.java | 3 +- .../baritone/behavior/InventoryBehavior.java | 1 - .../baritone/behavior/WaypointBehavior.java | 30 +++++++++---------- src/main/java/baritone/cache/WorldData.java | 1 - .../java/baritone/cache/WorldProvider.java | 2 +- .../baritone/command/defaults/ETACommand.java | 7 ++--- .../command/defaults/FindCommand.java | 14 ++++----- .../baritone/command/defaults/SelCommand.java | 4 +-- .../command/defaults/WaypointsCommand.java | 4 +-- .../movement/movements/MovementTraverse.java | 2 +- .../java/baritone/process/MineProcess.java | 8 ++--- .../java/baritone/utils/PathRenderer.java | 3 +- src/main/java/baritone/utils/ToolSet.java | 3 +- .../utils/schematic/SelectionSchematic.java | 10 +++---- .../format/defaults/LitematicaSchematic.java | 2 +- 21 files changed, 58 insertions(+), 60 deletions(-) diff --git a/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java b/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java index b8f30a774..3d0f2613f 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java @@ -27,7 +27,7 @@ public enum RelativeCoordinate implements IDatatypePost { INSTANCE; private static String ScalesAliasRegex = "[kKmM]"; - private static Pattern PATTERN = Pattern.compile("^(~?)([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)("+ScalesAliasRegex+"?)|)$"); + private static Pattern PATTERN = Pattern.compile("^(~?)([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(" + ScalesAliasRegex + "?)|)$"); @Override public Double apply(IDatatypeContext ctx, Double origin) throws CommandException { @@ -43,7 +43,7 @@ public Double apply(IDatatypeContext ctx, Double origin) throws CommandException boolean isRelative = !matcher.group(1).isEmpty(); double offset = matcher.group(2).isEmpty() ? 0 : Double.parseDouble(matcher.group(2).replaceAll(ScalesAliasRegex, "")); - + if (matcher.group(2).toLowerCase().contains("k")) { offset *= 1000; } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeFile.java b/src/api/java/baritone/api/command/datatypes/RelativeFile.java index 2c7adf98f..0bc3604ab 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeFile.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeFile.java @@ -83,10 +83,10 @@ public static Stream tabComplete(IArgConsumer consumer, File base0) thro boolean useParent = !currentPathStringThing.isEmpty() && !currentPathStringThing.endsWith(File.separator); File currentFile = currentPath.isAbsolute() ? currentPath.toFile() : new File(base, currentPathStringThing); return Stream.of(Objects.requireNonNull(getCanonicalFileUnchecked( - useParent - ? currentFile.getParentFile() - : currentFile - ).listFiles())) + useParent + ? currentFile.getParentFile() + : currentFile + ).listFiles())) .map(f -> (currentPath.isAbsolute() ? f : basePath.relativize(f.toPath()).toString()) + (f.isDirectory() ? File.separator : "")) .filter(s -> s.toLowerCase(Locale.US).startsWith(currentPathStringThing.toLowerCase(Locale.US))) diff --git a/src/api/java/baritone/api/pathing/goals/GoalNear.java b/src/api/java/baritone/api/pathing/goals/GoalNear.java index 6a8226fb4..2252446cd 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalNear.java +++ b/src/api/java/baritone/api/pathing/goals/GoalNear.java @@ -19,8 +19,8 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; -import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; import it.unimi.dsi.fastutil.doubles.DoubleIterator; +import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; import net.minecraft.util.math.BlockPos; public class GoalNear implements Goal, IGoalRenderPos { diff --git a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java index 503ae7f43..b704ae4a6 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java +++ b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java @@ -18,8 +18,8 @@ package baritone.api.pathing.goals; import baritone.api.utils.SettingsUtil; -import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; import it.unimi.dsi.fastutil.doubles.DoubleIterator; +import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; import net.minecraft.util.math.BlockPos; import java.util.Arrays; diff --git a/src/api/java/baritone/api/schematic/SubstituteSchematic.java b/src/api/java/baritone/api/schematic/SubstituteSchematic.java index 72787c243..9f2013683 100644 --- a/src/api/java/baritone/api/schematic/SubstituteSchematic.java +++ b/src/api/java/baritone/api/schematic/SubstituteSchematic.java @@ -22,6 +22,7 @@ import net.minecraft.block.properties.IProperty; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; + import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -33,7 +34,7 @@ public class SubstituteSchematic extends AbstractSchematic { private final Map> substitutions; private final Map> blockStateCache = new HashMap<>(); - public SubstituteSchematic(ISchematic schematic, Map> substitutions) { + public SubstituteSchematic(ISchematic schematic, Map> substitutions) { super(schematic.widthX(), schematic.heightY(), schematic.lengthZ()); this.schematic = schematic; this.substitutions = substitutions; @@ -80,9 +81,10 @@ private IBlockState withBlock(IBlockState state, Block block) { } catch (IllegalArgumentException e) { //property does not exist for target block } } - blockStateCache.computeIfAbsent(state, s -> new HashMap()).put(block, newState); + blockStateCache.computeIfAbsent(state, s -> new HashMap()).put(block, newState); return newState; } + private > IBlockState copySingleProp(IBlockState fromState, IBlockState toState, IProperty prop) { return toState.withProperty(prop, fromState.getValue(prop)); } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 8b4b90b17..f47f515a8 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -299,7 +299,7 @@ public String toString(ParserContext context, Object value) { Parser keyParser = Parser.getParser(keyType); Parser valueParser = Parser.getParser(valueType); - return ((Map) value).entrySet().stream() + return ((Map) value).entrySet().stream() .map(o -> keyParser.toString(context, o.getKey()) + "->" + valueParser.toString(context, o.getValue())) .collect(Collectors.joining(",")); } diff --git a/src/launch/java/baritone/launch/mixins/MixinItemTool.java b/src/launch/java/baritone/launch/mixins/MixinItemTool.java index 4f5d025bf..8be3a837d 100644 --- a/src/launch/java/baritone/launch/mixins/MixinItemTool.java +++ b/src/launch/java/baritone/launch/mixins/MixinItemTool.java @@ -25,7 +25,8 @@ @Mixin(ItemTool.class) public class MixinItemTool implements IItemTool { - @Shadow protected Item.ToolMaterial toolMaterial; + @Shadow + protected Item.ToolMaterial toolMaterial; @Override public int getHarvestLevel() { diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index e96f1d54c..3dce5c0b5 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -18,7 +18,6 @@ package baritone.behavior; import baritone.Baritone; -import baritone.api.BaritoneAPI; import baritone.api.event.events.TickEvent; import baritone.utils.ToolSet; import net.minecraft.block.Block; diff --git a/src/main/java/baritone/behavior/WaypointBehavior.java b/src/main/java/baritone/behavior/WaypointBehavior.java index b21e080e7..dfc91af82 100644 --- a/src/main/java/baritone/behavior/WaypointBehavior.java +++ b/src/main/java/baritone/behavior/WaypointBehavior.java @@ -71,21 +71,21 @@ public void onPlayerDeath() { baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(deathWaypoint); ITextComponent component = new TextComponentString("Death position saved."); component.getStyle() - .setColor(TextFormatting.WHITE) - .setHoverEvent(new HoverEvent( - HoverEvent.Action.SHOW_TEXT, - new TextComponentString("Click to goto death") - )) - .setClickEvent(new ClickEvent( - ClickEvent.Action.RUN_COMMAND, - String.format( - "%s%s goto %s @ %d", - FORCE_COMMAND_PREFIX, - "wp", - deathWaypoint.getTag().getName(), - deathWaypoint.getCreationTimestamp() - ) - )); + .setColor(TextFormatting.WHITE) + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + new TextComponentString("Click to goto death") + )) + .setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s goto %s @ %d", + FORCE_COMMAND_PREFIX, + "wp", + deathWaypoint.getTag().getName(), + deathWaypoint.getCreationTimestamp() + ) + )); Helper.HELPER.logDirect(component); } diff --git a/src/main/java/baritone/cache/WorldData.java b/src/main/java/baritone/cache/WorldData.java index cbdda3687..5a9ab389d 100644 --- a/src/main/java/baritone/cache/WorldData.java +++ b/src/main/java/baritone/cache/WorldData.java @@ -22,7 +22,6 @@ import baritone.api.cache.IWaypointCollection; import baritone.api.cache.IWorldData; -import java.io.IOException; import java.nio.file.Path; /** diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 98ec1bbb2..97b15a137 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -23,8 +23,8 @@ import baritone.utils.accessor.IAnvilChunkLoader; import baritone.utils.accessor.IChunkProviderServer; import net.minecraft.server.integrated.IntegratedServer; -import net.minecraft.world.WorldServer; import net.minecraft.world.World; +import net.minecraft.world.WorldServer; import org.apache.commons.lang3.SystemUtils; import java.io.File; diff --git a/src/main/java/baritone/command/defaults/ETACommand.java b/src/main/java/baritone/command/defaults/ETACommand.java index 47b6ae9fa..4116d65b0 100644 --- a/src/main/java/baritone/command/defaults/ETACommand.java +++ b/src/main/java/baritone/command/defaults/ETACommand.java @@ -18,17 +18,16 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.calc.IPathingControlManager; -import baritone.api.process.IBaritoneProcess; import baritone.api.behavior.IPathingBehavior; import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; -import baritone.api.command.argument.IArgConsumer; +import baritone.api.pathing.calc.IPathingControlManager; +import baritone.api.process.IBaritoneProcess; import java.util.Arrays; import java.util.List; -import java.util.Optional; import java.util.stream.Stream; public class ETACommand extends Command { diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index b20f14e98..2063d9300 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -79,10 +79,10 @@ private ITextComponent positionToComponent(BetterBlockPos pos) { ITextComponent baseComponent = new TextComponentString(pos.toString()); ITextComponent hoverComponent = new TextComponentString("Click to set goal to this position"); baseComponent.getStyle() - .setColor(TextFormatting.GRAY) - .setInsertion(positionText) - .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)) - .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)); + .setColor(TextFormatting.GRAY) + .setInsertion(positionText) + .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)) + .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)); return baseComponent; } @@ -90,9 +90,9 @@ private ITextComponent positionToComponent(BetterBlockPos pos) { public Stream tabComplete(String label, IArgConsumer args) throws CommandException { return new TabCompleteHelper() .append( - CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream() - .map(Block.REGISTRY::getNameForObject) - .map(Object::toString) + CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream() + .map(Block.REGISTRY::getNameForObject) + .map(Object::toString) ) .filterPrefixNamespaced(args.getString()) .sortAlphabetically() diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 659a31835..5677eec3c 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -36,8 +36,8 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMetaLookup; -import baritone.utils.IRenderer; import baritone.utils.BlockStateInterface; +import baritone.utils.IRenderer; import baritone.utils.schematic.StaticSchematic; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; @@ -193,7 +193,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } } } - ISchematic schematic = new StaticSchematic(){{ + ISchematic schematic = new StaticSchematic() {{ states = blockstates; x = size.getX(); y = size.getY(); diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 5a45686a3..cf420e90a 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -20,8 +20,8 @@ import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; -import baritone.api.cache.Waypoint; import baritone.api.cache.IWorldData; +import baritone.api.cache.Waypoint; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.ForWaypoints; @@ -50,7 +50,7 @@ public class WaypointsCommand extends Command { - private Map> deletedWaypoints = new HashMap<>(); + private Map> deletedWaypoints = new HashMap<>(); public WaypointsCommand(IBaritone baritone) { super(baritone, "waypoints", "waypoint", "wp"); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index c8a3528ee..1d79b0514 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -73,7 +73,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d IBlockState destOn = context.get(destX, y - 1, destZ); IBlockState srcDown = context.get(x, y - 1, z); Block srcDownBlock = srcDown.getBlock(); - boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y-1, z, srcDown); + boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y - 1, z, srcDown); boolean frostWalker = standingOnABlock && !context.assumeWalkOnWater && MovementHelper.canUseFrostWalker(context, destOn); if (frostWalker || MovementHelper.canWalkOn(context, destX, y - 1, destZ, destOn)) { //this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index e79cb815b..34f5c4c35 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -28,7 +28,6 @@ import baritone.cache.WorldScanner; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; -import baritone.pathing.precompute.PrecomputedData; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import net.minecraft.block.Block; @@ -215,6 +214,7 @@ private PathingCommand updateGoal() { public boolean isInGoal(int x, int y, int z) { return false; } + @Override public double heuristic() { return Double.NEGATIVE_INFINITY; @@ -500,9 +500,9 @@ private BlockOptionalMetaLookup filterFilter() { } if (!Baritone.settings().allowBreak.value) { BlockOptionalMetaLookup f = new BlockOptionalMetaLookup(this.filter.blocks() - .stream() - .filter(e -> Baritone.settings().allowBreakAnyway.value.contains(e.getBlock())) - .toArray(BlockOptionalMeta[]::new)); + .stream() + .filter(e -> Baritone.settings().allowBreakAnyway.value.contains(e.getBlock())) + .toArray(BlockOptionalMeta[]::new)); if (f.blocks().isEmpty()) { logDirect("Unable to mine when allowBreak is false and target block is not in allowBreakAnyway!"); return null; diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index de29bca43..2fe224706 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -211,8 +211,7 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic if (!settings.renderGoalAnimated.value) { // y = 1 causes rendering issues when the player is at the same y as the top of a block for some reason y = 0.999F; - } - else { + } else { y = MathHelper.cos((float) (((float) ((System.nanoTime() / 100000L) % 20000L)) / 20000F * Math.PI * 2)); } if (goal instanceof IGoalRenderPos) { diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 0ad4665d6..61f11e563 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -25,7 +25,6 @@ import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.init.Enchantments; import net.minecraft.init.MobEffects; -import net.minecraft.item.Item.ToolMaterial; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.item.ItemTool; @@ -130,7 +129,7 @@ possible, this lets us make pathing depend on the actual tool to be used (if aut if (!Baritone.settings().useSwordToMine.value && itemStack.getItem() instanceof ItemSword) { continue; } - + if (Baritone.settings().itemSaver.value && (itemStack.getItemDamage() + Baritone.settings().itemSaverThreshold.value) >= itemStack.getMaxDamage() && itemStack.getMaxDamage() > 1) { continue; } diff --git a/src/main/java/baritone/utils/schematic/SelectionSchematic.java b/src/main/java/baritone/utils/schematic/SelectionSchematic.java index 243a3d4d0..156a80918 100644 --- a/src/main/java/baritone/utils/schematic/SelectionSchematic.java +++ b/src/main/java/baritone/utils/schematic/SelectionSchematic.java @@ -33,10 +33,10 @@ public class SelectionSchematic extends MaskSchematic { public SelectionSchematic(ISchematic schematic, Vec3i origin, ISelection[] selections) { super(schematic); this.selections = Stream.of(selections).map( - sel -> sel - .shift(EnumFacing.WEST, origin.getX()) - .shift(EnumFacing.DOWN, origin.getY()) - .shift(EnumFacing.NORTH, origin.getZ())) + sel -> sel + .shift(EnumFacing.WEST, origin.getX()) + .shift(EnumFacing.DOWN, origin.getY()) + .shift(EnumFacing.NORTH, origin.getZ())) .toArray(ISelection[]::new); } @@ -44,7 +44,7 @@ public SelectionSchematic(ISchematic schematic, Vec3i origin, ISelection[] selec protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { for (ISelection selection : selections) { if (x >= selection.min().x && y >= selection.min().y && z >= selection.min().z - && x <= selection.max().x && y <= selection.max().y && z <= selection.max().z) { + && x <= selection.max().x && y <= selection.max().y && z <= selection.max().z) { return true; } } diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index c2857bc2d..7ff737ebc 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -136,7 +136,7 @@ private static > IBlockState setPropertyValue(IBlockStat * @return amount of bits used to encode a block. */ private static int getBitsPerBlock(int amountOfBlockTypes) { - return (int) Math.max(2,Math.ceil(Math.log(amountOfBlockTypes) / Math.log(2))); + return (int) Math.max(2, Math.ceil(Math.log(amountOfBlockTypes) / Math.log(2))); } /** From aa9206381dfd98c3e9363d20204d767e9ff713a5 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sun, 15 Jan 2023 14:53:04 +0100 Subject: [PATCH 478/935] Fix canWalkThrough caching --- src/main/java/baritone/pathing/precompute/PrecomputedData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 1b05bee6d..bf00ee087 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -52,7 +52,7 @@ private int fillData(int id, IBlockState state) { if (canWalkThroughState == YES) { blockData |= CAN_WALK_THROUGH_MASK; } - if (canWalkOnState == MAYBE) { + if (canWalkThroughState == MAYBE) { blockData |= CAN_WALK_THROUGH_SPECIAL_MASK; } From 432d42ade864715f85d7758238a68de57f2f3419 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sun, 15 Jan 2023 20:22:58 +0100 Subject: [PATCH 479/935] Fix #find results not being clickable --- .../baritone/command/defaults/FindCommand.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 1bc454b82..00810218d 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -75,13 +75,13 @@ public void execute(String label, IArgConsumer args) throws CommandException { private ITextComponent positionToComponent(BetterBlockPos pos) { String positionText = String.format("%s %s %s", pos.x, pos.y, pos.z); String command = String.format("%sgoal %s", FORCE_COMMAND_PREFIX, positionText); - ITextComponent baseComponent = new StringTextComponent(pos.toString()); - ITextComponent hoverComponent = new StringTextComponent("Click to set goal to this position"); - baseComponent.getStyle() - .setColor(Color.fromTextFormatting(TextFormatting.GRAY)) - .setInsertion(positionText) - .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)) - .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)); + IFormattableTextComponent baseComponent = new StringTextComponent(pos.toString()); + IFormattableTextComponent hoverComponent = new StringTextComponent("Click to set goal to this position"); + baseComponent.setStyle(baseComponent.getStyle() + .setFormatting(TextFormatting.GRAY) + .setInsertion(positionText) + .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)) + .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent))); return baseComponent; } From 2b6c59fa8a1efac1a105a2ab2077914f4869db0d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 16 Jan 2023 12:22:52 -0800 Subject: [PATCH 480/935] v1.2.17 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 67c303265..0ce05058c 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.2.16' +version '1.2.17' buildscript { repositories { From 698d40d7978b5cb115db68c7ac0bffd949708958 Mon Sep 17 00:00:00 2001 From: leijurv Date: Mon, 16 Jan 2023 20:55:43 -0800 Subject: [PATCH 481/935] bump --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b5c70935..e2c83ddec 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click -[here](https://github.com/cabaletta/baritone/releases/download/v1.2.16/baritone-api-forge-1.2.16.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. +[here](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. From 26cceede153a290926bc83e286ea874a6c5519a0 Mon Sep 17 00:00:00 2001 From: Entropy5 <44469915+Entropy5@users.noreply.github.com> Date: Tue, 17 Jan 2023 06:33:01 +0100 Subject: [PATCH 482/935] litematica support for buildonlyselection, mostly rycbars --- .../java/baritone/process/BuilderProcess.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index f3f138c96..14093dc6a 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -166,17 +166,21 @@ public boolean build(String name, File schematic, Vec3i origin) { return false; } + parsed = applyMapArtAndSelection(origin, parsed); + + build(name, parsed, origin); + return true; + } + + private ISchematic applyMapArtAndSelection(Vec3i origin, ISchematic schematic) { if (Baritone.settings().mapArtMode.value) { - parsed = new MapArtSchematic((IStaticSchematic) parsed); + schematic = new MapArtSchematic((IStaticSchematic) schematic); } if (Baritone.settings().buildOnlySelection.value) { - parsed = new SelectionSchematic(parsed, origin, baritone.getSelectionManager().getSelections()); + schematic = new SelectionSchematic(schematic, origin, baritone.getSelectionManager().getSelections()); } - - - build(name, parsed, origin); - return true; + return schematic; } @Override @@ -217,7 +221,8 @@ public void buildOpenLitematic(int i) { try { LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())), false); Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i); - LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); + ISchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); + schematic2 = applyMapArtAndSelection(origin, schematic2); build(name, schematic2, correctedOrigin); } catch (IOException e) { logDirect("Schematic File could not be loaded."); From 7404414e7a180925502aa6ad1063a321f121cd3a Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 20 Jan 2023 23:43:00 -0700 Subject: [PATCH 483/935] less impure --- .../baritone/cache/FasterWorldScanner.java | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index 9adbf76b0..a813e9119 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -25,6 +25,8 @@ import baritone.utils.accessor.IBitArray; import baritone.utils.accessor.IBlockStateContainer; import io.netty.buffer.Unpooled; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntList; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.network.PacketBuffer; @@ -126,6 +128,7 @@ public static List getChunkRange(int centerX, int centerZ, int chunkRa private List scanChunksInternal(IPlayerContext ctx, BlockOptionalMetaLookup lookup, List chunkPositions, int maxBlocks) { assert ctx.world() != null; try { + // p -> scanChunkInternal(ctx, lookup, p) Stream posStream = chunkPositions.parallelStream().flatMap(p -> scanChunkInternal(ctx, lookup, p)); if (maxBlocks >= 0) { // WARNING: this can be expensive if maxBlocks is large... @@ -151,39 +154,30 @@ private Stream scanChunkInternal(IPlayerContext ctx, BlockOptionalMeta int playerSectionY = ctx.playerFeet().y >> 4; - List blocks = new ArrayList<>(); - - collectChunkSections(lookup, chunkProvider.getLoadedChunk(pos.x, pos.z), playerSectionY, (section, isInFilter) -> { - int yOffset = section.getYLocation(); - BitArray array = (BitArray) ((IBlockStateContainer) section.getData()).getStorage(); - collectBlockLocations(array, isInFilter, place -> blocks.add(new BlockPos( - chunkX + ((place & 255) & 15), - yOffset + (place >> 8), - chunkZ + ((place & 255) >> 4) - ))); - }); - return blocks.stream(); + return collectChunkSections(lookup, chunkProvider.getLoadedChunk(pos.x, pos.z), chunkX, chunkZ, playerSectionY).stream(); } - private void collectChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, int playerSection, BiConsumer consumer) { + private List collectChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, long chunkX, long chunkZ, int playerSection) { // iterate over sections relative to player + List blocks = new ArrayList<>(); ExtendedBlockStorage[] sections = chunk.getBlockStorageArray(); int l = sections.length; int i = playerSection - 1; int j = playerSection; for (; i >= 0 || j < l; ++j, --i) { if (j < l) { - visitSection(lookup, sections[j], consumer); + visitSection(lookup, sections[j], blocks, chunkX, chunkZ); } if (i >= 0) { - visitSection(lookup, sections[i], consumer); + visitSection(lookup, sections[i], blocks, chunkX, chunkZ); } } + return blocks; } - private void visitSection(BlockOptionalMetaLookup lookup, ExtendedBlockStorage section, BiConsumer consumer) { + private void visitSection(BlockOptionalMetaLookup lookup, ExtendedBlockStorage section, List blocks, long chunkX, long chunkZ) { if (section == null || section.isEmpty()) { return; } @@ -198,7 +192,17 @@ private void visitSection(BlockOptionalMetaLookup lookup, ExtendedBlockStorage s if (isInFilter.length == 0) { return; } - consumer.accept(section, isInFilter); + + + int yOffset = section.getYLocation(); + BitArray array = ((IBlockStateContainer) section.getData()).getStorage(); + for (int place : collectBlockLocations(array, isInFilter)) { + blocks.add(new BlockPos( + chunkX + ((place & 255) & 15), + yOffset + (place >> 8), + chunkZ + ((place & 255) >> 4) + )); + } } private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBlockStatePalette palette) { @@ -224,12 +228,14 @@ private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBloc return isInFilter; } - private static void collectBlockLocations(BitArray array, boolean[] isInFilter, IntConsumer action) { + private static IntList collectBlockLocations(BitArray array, boolean[] isInFilter) { long[] longArray = array.getBackingLongArray(); int arraySize = array.size(); int bitsPerEntry = ((IBitArray) array).getBitsPerEntry(); long maxEntryValue = ((IBitArray) array).getMaxEntryValue(); + IntList positions = new IntArrayList(); + for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) { final int i = idx * bitsPerEntry; final int j = i >> 6; @@ -239,14 +245,15 @@ private static void collectBlockLocations(BitArray array, boolean[] isInFilter, if (j == k) { if (isInFilter[(int) (jl & maxEntryValue)]) { - action.accept(idx); + positions.add(idx); } } else { if (isInFilter[(int) ((jl | longArray[k] << (64 - l)) & maxEntryValue)]) { - action.accept(idx); + positions.add(idx); } } } + return positions; } /** From 413cc1469f0fdcefd84952924fc182ba0e3c390b Mon Sep 17 00:00:00 2001 From: Entropy5 <44469915+Entropy5@users.noreply.github.com> Date: Fri, 27 Jan 2023 14:23:08 +0100 Subject: [PATCH 484/935] zac suggestion (number 2), test ongoing --- src/main/java/baritone/process/BuilderProcess.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 14093dc6a..85be6516a 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -157,7 +157,6 @@ public boolean build(String name, File schematic, Vec3i origin) { if (!format.isPresent()) { return false; } - ISchematic parsed; try { parsed = format.get().parse(new FileInputStream(schematic)); @@ -165,18 +164,16 @@ public boolean build(String name, File schematic, Vec3i origin) { e.printStackTrace(); return false; } - - parsed = applyMapArtAndSelection(origin, parsed); - + parsed = applyMapArtAndSelection(origin, (IStaticSchematic) parsed); build(name, parsed, origin); return true; } - private ISchematic applyMapArtAndSelection(Vec3i origin, ISchematic schematic) { + private ISchematic applyMapArtAndSelection(Vec3i origin, IStaticSchematic parsed) { + ISchematic schematic = parsed; if (Baritone.settings().mapArtMode.value) { - schematic = new MapArtSchematic((IStaticSchematic) schematic); + schematic = new MapArtSchematic(parsed); } - if (Baritone.settings().buildOnlySelection.value) { schematic = new SelectionSchematic(schematic, origin, baritone.getSelectionManager().getSelections()); } @@ -222,7 +219,7 @@ public void buildOpenLitematic(int i) { LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())), false); Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i); ISchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); - schematic2 = applyMapArtAndSelection(origin, schematic2); + schematic2 = applyMapArtAndSelection(origin, (IStaticSchematic) schematic2); build(name, schematic2, correctedOrigin); } catch (IOException e) { logDirect("Schematic File could not be loaded."); From 334d9c119b6269e1896963905a214667eae24dcb Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 28 Jan 2023 00:44:54 -0700 Subject: [PATCH 485/935] remove the allocation of an intlist per section --- .../baritone/cache/FasterWorldScanner.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index a813e9119..4a41eaf10 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -196,13 +196,7 @@ private void visitSection(BlockOptionalMetaLookup lookup, ExtendedBlockStorage s int yOffset = section.getYLocation(); BitArray array = ((IBlockStateContainer) section.getData()).getStorage(); - for (int place : collectBlockLocations(array, isInFilter)) { - blocks.add(new BlockPos( - chunkX + ((place & 255) & 15), - yOffset + (place >> 8), - chunkZ + ((place & 255) >> 4) - )); - } + collectBlockLocations(array, isInFilter, blocks, chunkX, chunkZ, yOffset); } private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBlockStatePalette palette) { @@ -228,14 +222,12 @@ private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBloc return isInFilter; } - private static IntList collectBlockLocations(BitArray array, boolean[] isInFilter) { + private static void collectBlockLocations(BitArray array, boolean[] isInFilter, List blocks, long chunkX, long chunkZ, int yOffset) { long[] longArray = array.getBackingLongArray(); int arraySize = array.size(); int bitsPerEntry = ((IBitArray) array).getBitsPerEntry(); long maxEntryValue = ((IBitArray) array).getMaxEntryValue(); - IntList positions = new IntArrayList(); - for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) { final int i = idx * bitsPerEntry; final int j = i >> 6; @@ -245,15 +237,24 @@ private static IntList collectBlockLocations(BitArray array, boolean[] isInFilte if (j == k) { if (isInFilter[(int) (jl & maxEntryValue)]) { - positions.add(idx); + //noinspection DuplicateExpressions + blocks.add(new BlockPos( + chunkX + ((idx & 255) & 15), + yOffset + (idx >> 8), + chunkZ + ((idx & 255) >> 4) + )); } } else { if (isInFilter[(int) ((jl | longArray[k] << (64 - l)) & maxEntryValue)]) { - positions.add(idx); + //noinspection DuplicateExpressions + blocks.add(new BlockPos( + chunkX + ((idx & 255) & 15), + yOffset + (idx >> 8), + chunkZ + ((idx & 255) >> 4) + )); } } } - return positions; } /** From 6de266a106534b06f73550846d51aacd436b6ec7 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 28 Jan 2023 01:39:58 -0700 Subject: [PATCH 486/935] remove extra method call --- .../baritone/cache/FasterWorldScanner.java | 55 +++++++++---------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index 4a41eaf10..fbdc238ce 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -193,41 +193,15 @@ private void visitSection(BlockOptionalMetaLookup lookup, ExtendedBlockStorage s return; } - - int yOffset = section.getYLocation(); BitArray array = ((IBlockStateContainer) section.getData()).getStorage(); - collectBlockLocations(array, isInFilter, blocks, chunkX, chunkZ, yOffset); - } - - private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBlockStatePalette palette) { - boolean commonBlockFound = false; - ObjectIntIdentityMap paletteMap = getPalette(palette); - int size = paletteMap.size(); - - boolean[] isInFilter = new boolean[size]; - - for (int i = 0; i < size; i++) { - IBlockState state = paletteMap.getByValue(i); - if (lookup.has(state)) { - isInFilter[i] = true; - commonBlockFound = true; - } else { - isInFilter[i] = false; - } - } - - if (!commonBlockFound) { - return new boolean[0]; - } - return isInFilter; - } - - private static void collectBlockLocations(BitArray array, boolean[] isInFilter, List blocks, long chunkX, long chunkZ, int yOffset) { long[] longArray = array.getBackingLongArray(); int arraySize = array.size(); int bitsPerEntry = ((IBitArray) array).getBitsPerEntry(); long maxEntryValue = ((IBitArray) array).getMaxEntryValue(); + + int yOffset = section.getYLocation(); + for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) { final int i = idx * bitsPerEntry; final int j = i >> 6; @@ -257,6 +231,29 @@ private static void collectBlockLocations(BitArray array, boolean[] isInFilter, } } + private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBlockStatePalette palette) { + boolean commonBlockFound = false; + ObjectIntIdentityMap paletteMap = getPalette(palette); + int size = paletteMap.size(); + + boolean[] isInFilter = new boolean[size]; + + for (int i = 0; i < size; i++) { + IBlockState state = paletteMap.getByValue(i); + if (lookup.has(state)) { + isInFilter[i] = true; + commonBlockFound = true; + } else { + isInFilter[i] = false; + } + } + + if (!commonBlockFound) { + return new boolean[0]; + } + return isInFilter; + } + /** * cheats to get the actual map of id -> blockstate from the various palette implementations */ From 3e3312f009fd8572820040370fd4af70cebf1c75 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sun, 29 Jan 2023 01:27:58 +0100 Subject: [PATCH 487/935] Use CarpetBlock rather than WoolCarpetBlock --- src/main/java/baritone/pathing/movement/MovementHelper.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 737bbdc11..46f6e8e8a 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -159,7 +159,7 @@ static Ternary canWalkThroughBlockState(BlockState state) { } return YES; } - if (block instanceof WoolCarpetBlock) { + if (block instanceof CarpetBlock) { return MAYBE; } if (block instanceof SnowLayerBlock) { @@ -193,7 +193,7 @@ static Ternary canWalkThroughBlockState(BlockState state) { static boolean canWalkThroughPosition(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); - if (block instanceof WoolCarpetBlock) { + if (block instanceof CarpetBlock) { return canWalkOn(bsi, x, y - 1, z); } @@ -466,7 +466,7 @@ static boolean canWalkOnPosition(BlockStateInterface bsi, int x, int y, int z, B // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think its a decrease in readability BlockState upState = bsi.get0(x, y + 1, z); Block up = upState.getBlock(); - if (up == Blocks.LILY_PAD || up instanceof WoolCarpetBlock) { + if (up == Blocks.LILY_PAD || up instanceof CarpetBlock) { return true; } if (MovementHelper.isFlowing(x, y, z, state, bsi) || upState.getFluidState().getType() == Fluids.FLOWING_WATER) { From 8086f3b419ca2a03e33500771059aa482caf0db2 Mon Sep 17 00:00:00 2001 From: MarvionKirito Date: Mon, 6 Feb 2023 20:10:22 +0800 Subject: [PATCH 488/935] 1. Updated to 1.19.3 --- .github/workflows/gradle_build.yml | 3 +- README.md | 4 +- build.gradle | 129 ++++++--- buildSrc/build.gradle | 17 +- .../baritone/gradle/task/CreateDistTask.java | 4 +- .../baritone/gradle/task/ProguardTask.java | 83 +++--- common/build.gradle | 132 --------- fabric/build.gradle | 22 +- fabric/src/main/resources/fabric.mod.json | 3 +- forge/build.gradle | 35 +-- forge/src/main/resources/META-INF/mods.toml | 4 +- gradle.properties | 9 +- gradle/wrapper/gradle-wrapper.properties | 3 +- scripts/proguard.pro | 6 +- settings.gradle | 29 +- src/api/java/baritone/api/Settings.java | 4 +- .../api/command/datatypes/BlockById.java | 6 +- .../command/datatypes/EntityClassById.java | 6 +- .../api/event/events/RenderEvent.java | 2 +- .../baritone/api/process/IBuilderProcess.java | 28 +- .../baritone/api/utils/BlockOptionalMeta.java | 126 +++++++-- .../java/baritone/api/utils/BlockUtils.java | 6 +- .../baritone/api/utils/RayTraceUtils.java | 2 - .../java/baritone/api/utils/SettingsUtil.java | 8 +- .../java/baritone/launch/MixinPlugin.java | 74 ----- .../mixins/MixinClientPlayNetHandler.java | 25 ++ .../mixins/MixinClientPlayerEntity.java | 19 -- .../launch/mixins/MixinWorldRenderer.java | 2 +- src/launch/resources/META-INF/MANIFEST.MF | 2 +- .../resources/mixins.baritone-meteor.json | 5 +- src/launch/resources/pack.mcmeta | 6 - .../java/baritone/cache/WorldProvider.java | 5 + .../command/defaults/DefaultCommands.java | 3 +- .../defaults/ExecutionControlCommands.java | 4 +- .../command/defaults/FindCommand.java | 54 +++- .../command/defaults/FollowCommand.java | 4 +- .../command/defaults/MineCommand.java | 6 +- .../pathing/calc/AbstractNodeCostSearch.java | 11 +- .../pathing/movement/CalculationContext.java | 6 +- .../pathing/movement/MovementHelper.java | 4 +- .../movement/movements/MovementDescend.java | 42 +-- .../movement/movements/MovementFall.java | 50 ++-- .../movement/movements/MovementTraverse.java | 33 +-- .../baritone/pathing/path/PathExecutor.java | 257 +++++++++--------- .../baritone/process/BackfillProcess.java | 6 +- .../java/baritone/process/BuilderProcess.java | 92 +++++++ .../java/baritone/process/FarmProcess.java | 42 +-- .../baritone/utils/BlockStateInterface.java | 13 +- src/main/java/baritone/utils/GuiClick.java | 14 +- src/main/java/baritone/utils/IRenderer.java | 2 +- .../java/baritone/utils/PathRenderer.java | 2 +- src/main/java/baritone/utils/ToolSet.java | 70 ++--- .../format/DefaultSchematicFormats.java | 21 ++ .../format/defaults/MCEditSchematic.java | 4 +- .../format/defaults/SpongeSchematic.java | 4 +- tweaker/build.gradle | 160 ++++------- .../java/baritone/launch/BaritoneTweaker.java | 55 ---- .../java/baritone/launch/LaunchTesting.java | 106 -------- 58 files changed, 881 insertions(+), 993 deletions(-) delete mode 100644 common/build.gradle delete mode 100644 src/launch/java/baritone/launch/MixinPlugin.java delete mode 100644 src/launch/resources/pack.mcmeta delete mode 100644 tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java delete mode 100644 tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index aca2cb024..0d185a6d5 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -18,10 +18,11 @@ jobs: fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: java-version: '17' distribution: 'adopt' + cache: gradle - name: Grant execute permission for gradlew run: chmod +x gradlew diff --git a/README.md b/README.md index 2925ea5ec..f5652e3bd 100644 --- a/README.md +++ b/README.md @@ -137,8 +137,8 @@ Magic. (Hours of [leijurv](https://github.com/leijurv/) enduring excruciating pa YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET applications. -YourKit is the creator of the [YourKit Java Profiler](https://www.yourkit.com/java/profiler/) -, [YourKit .NET Profiler](https://www.yourkit.com/.net/profiler/), +YourKit is the creator of +the [YourKit Java Profiler](https://www.yourkit.com/java/profiler/), [YourKit .NET Profiler](https://www.yourkit.com/.net/profiler/), and [YourKit YouMonitor](https://www.yourkit.com/youmonitor/). We thank them for granting Baritone an OSS license so that we can make our software the best it can be. diff --git a/build.gradle b/build.gradle index 5ebe15fec..377386a76 100755 --- a/build.gradle +++ b/build.gradle @@ -15,58 +15,34 @@ * along with Baritone. If not, see . */ -buildscript { - dependencies { - classpath "org.ow2.asm:asm:9.3" - } -} - -plugins { - id "architectury-plugin" version "3.4.135" - id 'dev.architectury.loom' version '0.12.0.282' apply false -} - -subprojects { +allprojects { apply plugin: 'java' + apply plugin: "xyz.wagyourtail.unimined" apply plugin: "maven-publish" - apply plugin: "dev.architectury.loom" archivesBaseName = rootProject.archives_base_name + /*def vers = 'git describe --always --tags --dirty'.execute().text.trim() + if (!vers.startsWith("v")) { + println "git doesn't appear to be installed!" + println "using version number: " + rootProject.mod_version + version = rootProject.mod_version + } else { + version = vers.substring(1) + }*/ version = rootProject.mod_version group = rootProject.maven_group sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17 - loom { - silentMojangMappingsLicense() - } - - dependencies { - minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" - // The following line declares the mojmap mappings, you may use other mappings as well - mappings loom.officialMojangMappings() - // The following line declares the yarn mappings you may select this one as well. - // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" - } - - tasks.withType(JavaCompile).configureEach { - it.options.encoding = "UTF-8" - - def targetVersion = 17 - if (JavaVersion.current().isJava9Compatible()) { - it.options.release = targetVersion - } - } -} - -allprojects { - apply plugin: "architectury-plugin" - repositories { maven { name = 'spongepowered-repo' url = 'https://repo.spongepowered.org/repository/maven-public/' } + maven { + name = 'fabric-maven' + url = 'https://maven.fabricmc.net/' + } maven { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' @@ -85,4 +61,81 @@ allprojects { } mavenCentral() } + + dependencies { + minecraft "net.minecraft:minecraft:${rootProject.minecraft_version}" + // The following line declares the mojmap mappings, you may use other mappings as well + mappings "net.fabricmc:intermediary:${rootProject.minecraft_version}:v2" + mappings "net.minecraft:minecraft:${rootProject.minecraft_version}:client-mappings" + mappings "org.parchmentmc.data:parchment-1.19.2:2022.11.27@zip" + + implementation "org.spongepowered:mixin:0.8.5" + implementation "org.ow2.asm:asm:9.3" + // The following line declares the yarn mappings you may select this one as well. + // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" + } + + tasks.withType(JavaCompile).configureEach { + it.options.encoding = "UTF-8" + + def targetVersion = 17 + if (JavaVersion.current().isJava9Compatible()) { + it.options.release = targetVersion + } + } +} + +minecraft { + runs.off = true +} + +archivesBaseName = archivesBaseName + "-common" + +sourceSets { + api { + compileClasspath += main.compileClasspath + runtimeClasspath += main.runtimeClasspath + } + main { + compileClasspath += api.output + runtimeClasspath += api.output + } + test { + compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output + runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output + } + launch { + compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output + runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output + } + schematica_api { + compileClasspath += main.compileClasspath + runtimeClasspath += main.runtimeClasspath + } + main { + compileClasspath += schematica_api.output + runtimeClasspath += schematica_api.output + } +} + +dependencies { + implementation 'org.jetbrains:annotations:23.0.0' + testImplementation 'junit:junit:4.13.2' +} + +jar { + from sourceSets.main.output, sourceSets.launch.output, sourceSets.api.output +} + +remapJar { + targetNamespace = "named" + fallbackTargetNamespace = "intermediary" +} + +javadoc { + options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error + options.linkSource true + options.encoding "UTF-8" // allow emoji in comments :^) + source = sourceSets.api.allJava + classpath += sourceSets.api.compileClasspath } \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 8ab0f7014..14b7dc3bb 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -16,10 +16,25 @@ */ repositories { + mavenLocal() + maven { + name = 'WagYourMaven' + url = 'https://maven.wagyourtail.xyz/releases' + } + maven { + name = 'ForgeMaven' + url = 'https://maven.minecraftforge.net/' + } + maven { + name = 'FabricMaven' + url = 'https://maven.fabricmc.net/' + } mavenCentral() } dependencies { - implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' + implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' implementation group: 'commons-io', name: 'commons-io', version: '2.6' + + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.4' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index c3861bc90..e201512dd 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -69,8 +69,6 @@ protected void exec() throws Exception { Files.write(getRootRelativeFile("dist/checksums.txt"), shasum); } - private static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII); - private static String getFileName(Path p) { return p.getFileName().toString(); } @@ -87,6 +85,8 @@ private static synchronized String sha1(Path path) { } } + private static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII); + public static String bytesToHex(byte[] bytes) { byte[] hexChars = new byte[bytes.length * 2]; for (int j = 0; j < bytes.length; j++) { diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index e2d71c4fc..5dbdd2191 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -25,6 +25,9 @@ import org.gradle.api.tasks.compile.ForkOptions; import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.internal.jvm.Jvm; +import xyz.wagyourtail.unimined.api.Constants; +import xyz.wagyourtail.unimined.api.minecraft.EnvType; +import xyz.wagyourtail.unimined.api.minecraft.MinecraftProvider; import java.io.*; import java.net.URL; @@ -47,8 +50,7 @@ public class ProguardTask extends BaritoneGradleTask { @Input private String url; - @Input - private String compType; + MinecraftProvider provider = this.getProject().getExtensions().getByType(MinecraftProvider.class); @Input private String extract; @@ -57,9 +59,8 @@ public String getExtract() { return extract; } - public String getUrl() { - return url; - } + @Input + private String compType; public String getCompType() { return compType; @@ -79,35 +80,22 @@ protected void exec() throws Exception { cleanup(); } - private boolean isMcJar(File f) { - return f.getName().startsWith(compType.equals("FORGE") ? "forge-" : "minecraft-") && f.getName().contains("minecraft-merged-named"); - } - - private File getMcJar() throws IOException { - File mcClientJar = this.getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() - .stream() - .filter(this::isMcJar) - .map(f -> { - switch (compType) { - case "OFFICIAL": - return new File(f.getParentFile().getParentFile(), "minecraft-merged.jar"); - case "FABRIC": - return new File(f.getParentFile().getParentFile(), "minecraft-merged-intermediary.jar"); - case "FORGE": - return new File(f.getParentFile().getParentFile(), f.getName().replace("-named.jar", "-srg.jar")); - } - return null; - }) - .findFirst() - .get(); - if (!mcClientJar.exists()) throw new IOException("Failed to find minecraft! " + mcClientJar.getAbsolutePath()); - return mcClientJar; + public String getUrl() { + return url; } public void setUrl(String url) { this.url = url; } + private File getMcJar() { + return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdFallbackNamespace()).toFile(); + } + + private boolean isMcJar(File f) { + return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f); + } + private void downloadProguard() throws Exception { Path proguardZip = getTemporaryFile(PROGUARD_ZIP); if (!Files.exists(proguardZip)) { @@ -219,6 +207,25 @@ private boolean validateJavaVersion(String java) { return true; } + private void processArtifact() throws Exception { + if (Files.exists(this.artifactUnoptimizedPath)) { + Files.delete(this.artifactUnoptimizedPath); + } + + Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString()); + } + + private Stream acquireDependencies() { + return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() + .stream() + .filter(File::isFile); + } + + private void proguardApi() throws Exception { + runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); + } + private void generateConfigs() throws Exception { Files.copy(getRootRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), REPLACE_EXISTING); @@ -229,6 +236,7 @@ private void generateConfigs() throws Exception { template.add(2, "-libraryjars /jmods/java.base.jmod(!**.jar;!module-info.class)"); template.add(3, "-libraryjars /jmods/java.desktop.jmod(!**.jar;!module-info.class)"); + template.add(4, "-libraryjars /jmods/jdk.unsupported.jmod(!**.jar;!module-info.class)"); { final Stream libraries; @@ -268,25 +276,6 @@ private void generateConfigs() throws Exception { Files.write(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG), standalone); } - private Stream acquireDependencies() { - return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() - .stream() - .filter(File::isFile); - } - - private void proguardApi() throws Exception { - runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); - } - - private void processArtifact() throws Exception { - if (Files.exists(this.artifactUnoptimizedPath)) { - Files.delete(this.artifactUnoptimizedPath); - } - - Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString()); - } - private void cleanup() { try { Files.delete(this.proguardOut); diff --git a/common/build.gradle b/common/build.gradle deleted file mode 100644 index 7164d948d..000000000 --- a/common/build.gradle +++ /dev/null @@ -1,132 +0,0 @@ -architectury { - injectInjectables = false - common(System.getProperty("Baritone.enabled_platforms").split(",")) -} - -//loom { -// mixin { -// legacyRemapToNamespace = "official" -// } -//} - -// ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts -sourceSets { - realmain { - java { - java { - srcDir "$rootDir/src/main/java" - } - resources { - srcDir "$rootDir/src/main/resources" - } - } - } - api { - compileClasspath += main.compileClasspath - runtimeClasspath += main.runtimeClasspath - java { - java { - srcDir "$rootDir/src/api/java" - } - resources { - srcDir "$rootDir/src/api/resources" - } - } - } - realmain { - compileClasspath += main.compileClasspath + api.output - runtimeClasspath += main.runtimeClasspath + api.output - } - test { - compileClasspath += realmain.compileClasspath + realmain.output - runtimeClasspath += realmain.runtimeClasspath + realmain.output - java { - java { - srcDir "$rootDir/src/test/java" - } - resources { - srcDir "$rootDir/src/test/resources" - } - } - } - main { - compileClasspath += realmain.output + api.output - runtimeClasspath += realmain.output + api.output - java { - java { - srcDir "$rootDir/src/launch/java" - } - resources { - srcDir "$rootDir/src/launch/resources" - } - } - } - schematica_api { - compileClasspath += realmain.compileClasspath - runtimeClasspath += realmain.runtimeClasspath - java { - java { - srcDir "$rootDir/src/schematica_api/java" - } - resources { - srcDir "$rootDir/src/schematica_api/resources" - } - } - } - realmain { - compileClasspath += schematica_api.output - runtimeClasspath += schematica_api.output - } -} - -configurations { - transformProductionTweaker { - canBeConsumed = true - canBeResolved = false - // If you want this configuration to share the same dependencies, otherwise omit this line - extendsFrom implementation, runtimeOnly - } -} - -dependencies { - // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies - // Do NOT use other classes from fabric loader - modCompileOnly "net.fabricmc:fabric-loader:${project.fabric_version}" - - compileOnly 'com.google.code.findbugs:jsr305:3.0.2' - - testImplementation 'junit:junit:4.12' -} - -javadoc { - options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error - options.linkSource true - options.encoding "UTF-8" // allow emoji in comments :^) - source = sourceSets.api.allJava - classpath += sourceSets.api.compileClasspath -} - -jar { - classifier "dev" - from sourceSets.main.output, sourceSets.realmain.output, sourceSets.api.output - - preserveFileTimestamps = false - reproducibleFileOrder = true - - manifest { - attributes( - 'MixinConfigs': 'mixins.baritone-meteor.json', - "MixinConnector": "baritone.launch.BaritoneMixinConnector", - - 'Implementation-Title': 'Baritone', - 'Implementation-Version': version, - ) - } -} - - -task removeDist(type: Delete) { - delete new File(rootProject.rootDir, "dist") -} - -clean.finalizedBy(removeDist) \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index 014e4fb4c..b2b42ed03 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -20,13 +20,11 @@ import baritone.gradle.task.ProguardTask plugins { id "com.github.johnrengelman.shadow" version "7.0.0" - id "maven-publish" } archivesBaseName = archivesBaseName + "-" + project.name -architectury { - platformSetupLoomIde() +minecraft { fabric() } @@ -35,14 +33,18 @@ configurations { shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common - developmentFabric.extendsFrom common } dependencies { - modImplementation "net.fabricmc:fabric-loader:${project.fabric_version}" - - common(project(path: ":common", configuration: "namedElements")) { transitive false } - shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } + fabric "net.fabricmc:fabric-loader:${project.fabric_version}" + + // because of multiple sourcesets `common project(":")` doesn't work + for (sourceSet in rootProject.sourceSets) { + if (sourceSet == rootProject.sourceSets.test) continue + if (sourceSet == rootProject.sourceSets.schematica_api) continue + common sourceSet.output + shadowCommon sourceSet.output + } } processResources { @@ -59,7 +61,7 @@ shadowJar { } remapJar { - input.set shadowJar.archiveFile + inputFile.set shadowJar.archiveFile dependsOn shadowJar classifier null } @@ -87,7 +89,7 @@ build.finalizedBy(createDist) publishing { publications { maven(MavenPublication) { - artifact '../dist/baritone-fabric-api-' + version + '.jar' + artifact "../dist/baritone-fabric-api-" + version + ".jar" } } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index e6544ffcc..3e69814e4 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -3,6 +3,7 @@ "schemaVersion": 1, "id": "baritone-meteor", "version": "${version}", + "name": "Baritone", "description": "Google Maps for Blockgame", "authors": [ @@ -23,6 +24,6 @@ ], "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.2" + "minecraft": "1.19.3" } } \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle index 27371070e..da2c4e570 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -24,49 +24,53 @@ plugins { archivesBaseName = archivesBaseName + "-" + project.name -architectury { - platformSetupLoomIde() - forge() -} - -loom { +minecraft { forge { - mixinConfig 'mixins.baritone-meteor.json' + devFallbackNamespace = "intermediary" + mixinConfig = ["mixins.baritone.json"] } } +//loom { +// forge { +// mixinConfig 'mixins.baritone.json' +// } +//} + configurations { common shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common - developmentFabric.extendsFrom common } dependencies { forge "net.minecraftforge:forge:${rootProject.forge_version}" - common(project(path: ":common", configuration: "namedElements")) { transitive false } - shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive false } + // because of multiple sourcesets `common project(":")` doesn't work + for (sourceSet in rootProject.sourceSets) { + if (sourceSet == rootProject.sourceSets.test) continue + if (sourceSet == rootProject.sourceSets.schematica_api) continue + common sourceSet.output + shadowCommon sourceSet.output + } } processResources { inputs.property "version", project.version - filesMatching("fabric.mod.json") { + filesMatching("META-INF/mods.toml") { expand "version": project.version } } shadowJar { - exclude("fabric.mod.json") - configurations = [project.configurations.shadowCommon] classifier "dev-shadow" } remapJar { - input.set shadowJar.archiveFile + inputFile.set shadowJar.archiveFile dependsOn shadowJar classifier null } @@ -76,7 +80,7 @@ jar { manifest { attributes( - 'MixinConfigs': 'mixins.baritone-meteor.json', + 'MixinConfigs': 'mixins.baritone.json', "MixinConnector": "baritone.launch.BaritoneMixinConnector", 'Implementation-Title': 'Baritone', @@ -99,7 +103,6 @@ task proguard(type: ProguardTask) { task createDist(type: CreateDistTask, dependsOn: proguard) - build.finalizedBy(createDist) publishing { diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 423074726..58d9594a1 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -15,7 +15,7 @@ issueTrackerURL = "https://github.com/cabaletta/baritone/issues" #optional # The modid of the mod modId = "baritoe" #mandatory # The version number of the mod - there's a few well known ${} variables useable here or just hardcode it -version = "${file.jarVersion}" #mandatory +version = "${version}" #mandatory # A display name for the mod displayName = "Baritone" #mandatory # A URL for the "homepage" for this mod, displayed in the mod UI @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId = "minecraft" mandatory = true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange = "[1.19.2]" +versionRange = "[1.19.3]" ordering = "NONE" side = "BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index c17efa654..c1cc61494 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,7 @@ org.gradle.jvmargs=-Xmx4G -mod_version=1.19.2-beta5 +mod_version=1.19.3-beta1 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.2 -forge_version=1.19.2-43.0.0 -fabric_version=0.14.9 -baritone.fabric_build=true \ No newline at end of file +minecraft_version=1.19.3 +forge_version=1.19.3-44.0.1 +fabric_version=0.14.11 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 84d1f85fd..e5fb3413d 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Mon Feb 06 02:33:37 CST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 4785ddeb0..1ea261ea1 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -14,7 +14,7 @@ # instead of renaming to a, b, c, rename to baritone.a, baritone.b, baritone.c so as to not conflict with minecraft's obfd classes -flattenpackagehierarchy -repackageclasses 'baritone' - +-ignorewarnings # lwjgl is weird -dontwarn org.lwjgl.** # also lwjgl lol @@ -49,8 +49,10 @@ #try to keep usage of schematica in separate classes -keep class baritone.utils.schematic.schematica.** +-keep class baritone.utils.schematic.litematica.** #proguard doesnt like it when it cant find our fake schematica classes -dontwarn baritone.utils.schematic.schematica.** +-dontwarn baritone.utils.schematic.litematica.** # Keep - Applications. Keep all application classes, along with their 'main' # methods. @@ -339,4 +341,4 @@ public int length(); public java.lang.String substring(int); public java.lang.String substring(int,int); -} +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 6524b3d09..7247a2843 100755 --- a/settings.gradle +++ b/settings.gradle @@ -17,35 +17,34 @@ pluginManagement { repositories { - maven { url "https://maven.architectury.dev/" } + mavenLocal() maven { - url = 'https://maven.fabricmc.net/' - } - maven { - name = 'forge' - url = 'https://files.minecraftforge.net/maven' + name = 'WagYourMaven' + url = 'https://maven.wagyourtail.xyz/snapshots' } maven { - name = 'impactdevelopment-repo' - url = 'https://impactdevelopment.github.io/maven/' + name = 'ForgeMaven' + url = 'https://maven.minecraftforge.net/' } maven { - url = 'https://www.dogforce-games.com/maven/' - } - maven { - url = 'https://libraries.minecraft.net/' + name = 'FabricMaven' + url = 'https://maven.fabricmc.net/' } mavenCentral() - gradlePluginPortal() + gradlePluginPortal() { + content { + excludeGroup "org.apache.logging.log4j" + } + } } } rootProject.name = 'baritone' -include("common") include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { - System.setProperty("Baritone.enabled_platforms", "fabric,") + //System.setProperty("Baritone.enabled_platforms", "fabric,forge") + System.setProperty("Baritone.enabled_platforms", "fabric") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { include(platform) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index a79b77117..393820e13 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1049,7 +1049,7 @@ public final class Settings { /** * What Y level to go to for legit strip mining */ - public final Setting legitMineYLevel = new Setting<>(11); + public final Setting legitMineYLevel = new Setting<>(-59); /** * Magically see ores that are separated diagonally from existing ores. Basically like mining around the ores that it finds @@ -1287,8 +1287,8 @@ public final class Settings { public final class Setting { - public final T defaultValue; public T value; + public final T defaultValue; private String name; @SuppressWarnings("unchecked") diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index ea792e7a5..21562e188 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -19,7 +19,7 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; @@ -32,7 +32,7 @@ public enum BlockById implements IDatatypeFor { public Block get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); Block block; - if ((block = Registry.BLOCK.getOptional(id).orElse(null)) == null) { + if ((block = BuiltInRegistries.BLOCK.getOptional(id).orElse(null)) == null) { throw new IllegalArgumentException("no block found by that id"); } return block; @@ -42,7 +42,7 @@ public Block get(IDatatypeContext ctx) throws CommandException { public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() .append( - Registry.BLOCK.keySet() + BuiltInRegistries.BLOCK.keySet() .stream() .map(Object::toString) ) diff --git a/src/api/java/baritone/api/command/datatypes/EntityClassById.java b/src/api/java/baritone/api/command/datatypes/EntityClassById.java index d2b093251..d7cb75734 100644 --- a/src/api/java/baritone/api/command/datatypes/EntityClassById.java +++ b/src/api/java/baritone/api/command/datatypes/EntityClassById.java @@ -19,7 +19,7 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; @@ -32,7 +32,7 @@ public enum EntityClassById implements IDatatypeFor { public EntityType get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); EntityType entity; - if ((entity = Registry.ENTITY_TYPE.getOptional(id).orElse(null)) == null) { + if ((entity = BuiltInRegistries.ENTITY_TYPE.getOptional(id).orElse(null)) == null) { throw new IllegalArgumentException("no entity found by that id"); } return entity; @@ -41,7 +41,7 @@ public EntityType get(IDatatypeContext ctx) throws CommandException { @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() - .append(Registry.ENTITY_TYPE.stream().map(Object::toString)) + .append(BuiltInRegistries.ENTITY_TYPE.stream().map(Object::toString)) .filterPrefixNamespaced(ctx.getConsumer().getString()) .sortAlphabetically() .stream(); diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java index cb7a0414c..a12a4dd5c 100644 --- a/src/api/java/baritone/api/event/events/RenderEvent.java +++ b/src/api/java/baritone/api/event/events/RenderEvent.java @@ -18,7 +18,7 @@ package baritone.api.event.events; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix4f; +import org.joml.Matrix4f; /** * @author Brady diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 4c10a593d..34c4394aa 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -42,7 +42,13 @@ public interface IBuilderProcess extends IBaritoneProcess { */ void build(String name, ISchematic schematic, Vec3i origin); - boolean isFromAltoclef(); + Vec3i getSchemSize(); + + void popStack(); + + boolean clearState(); + + boolean isFromAltoclefFinished(); /** * Requests a build for the specified schematic, labeled as specified, with the specified origin. @@ -59,24 +65,14 @@ default boolean build(String schematicFile, BlockPos origin) { return build(schematicFile, file, origin); } - void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef); - - boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef); - void buildOpenSchematic(); + void buildOpenLitematic(int i); + void pause(); boolean isPaused(); - Vec3i getSchemSize(); - - void popStack(); - - boolean clearState(); - - boolean isFromAltoclefFinished(); - void resume(); void clearArea(BlockPos corner1, BlockPos corner2); @@ -92,5 +88,11 @@ default boolean build(String schematicFile, BlockPos origin) { */ List getApproxPlaceable(); + boolean isFromAltoclef(); + + void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef); + + boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef); + void noteInsert(BlockPos pos); } diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index dbb08678e..fe549375a 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -20,20 +20,30 @@ import baritone.api.utils.accessor.IItemStack; import com.google.common.collect.ImmutableSet; import io.netty.util.concurrent.ThreadPerTaskExecutor; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.packs.PackResources; +import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.server.packs.PackType; -import net.minecraft.server.packs.repository.PackRepository; +import net.minecraft.server.packs.VanillaPackResources; import net.minecraft.server.packs.repository.ServerPacksSource; +import net.minecraft.server.packs.resources.MultiPackResourceManager; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.CustomSpawner; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.storage.LevelStorageSource; +import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.loot.BuiltInLootTables; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootTables; @@ -41,10 +51,14 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; +import sun.misc.Unsafe; import javax.annotation.Nonnull; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -56,7 +70,7 @@ public final class BlockOptionalMeta { private final ImmutableSet stateHashes; private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); - private static LootTables manager; + private static LootTables lootTables; private static PredicateManager predicate = new PredicateManager(); private static Map> drops = new HashMap<>(); @@ -134,33 +148,37 @@ public String toString() { return String.format("BlockOptionalMeta{block=%s}", block); } - public BlockState getAnyBlockState() { - if (blockstates.size() > 0) { - return blockstates.iterator().next(); + private static Method getVanillaServerPack; + + private static VanillaPackResources getVanillaServerPack() { + if (getVanillaServerPack == null) { + getVanillaServerPack = Arrays.stream(ServerPacksSource.class.getDeclaredMethods()).filter(field -> field.getReturnType() == VanillaPackResources.class).findFirst().orElseThrow(); + getVanillaServerPack.setAccessible(true); + } + + try { + return (VanillaPackResources) getVanillaServerPack.invoke(null); + } catch (Exception e) { + e.printStackTrace(); } return null; } public static LootTables getManager() { - if (manager == null) { - PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource()); - rpl.reload(); - PackResources thePack = rpl.getAvailablePacks().iterator().next().open(); + if (lootTables == null) { + MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(getVanillaServerPack())); ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); - manager = new LootTables(predicate); - resourceManager.registerReloadListener(manager); + lootTables = new LootTables(predicate); + resourceManager.registerReloadListener(lootTables); try { - resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), Collections.singletonList(thePack)).done().get(); + resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), resources.listPacks().toList()).done().get(); } catch (Exception exception) { throw new RuntimeException(exception); } - } - return manager; - } - public static PredicateManager getPredicateManager() { - return predicate; + } + return lootTables; } private static synchronized List drops(Block b) { @@ -170,20 +188,68 @@ private static synchronized List drops(Block b) { return Collections.emptyList(); } else { List items = new ArrayList<>(); - - // the other overload for generate doesnt work in forge because forge adds code that requires a non null world - getManager().get(lootTableLocation).getRandomItems( - new LootContext.Builder((ServerLevel) null) - .withRandom(RandomSource.create()) - .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) - .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) - .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) - .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) - .create(LootContextParamSets.BLOCK), - stack -> items.add(stack.getItem()) - ); + try { + getManager().get(lootTableLocation).getRandomItems( + new LootContext.Builder(ServerLevelStub.fastCreate()) + .withRandom(RandomSource.create()) + .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) + .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) + .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) + .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) + .create(LootContextParamSets.BLOCK), + stack -> items.add(stack.getItem()) + ); + } catch (Exception e) { + e.printStackTrace(); + } return items; } }); } + + public static PredicateManager getPredicateManager() { + return predicate; + } + + public BlockState getAnyBlockState() { + if (blockstates.size() > 0) { + return blockstates.iterator().next(); + } + + return null; + } + + private static class ServerLevelStub extends ServerLevel { + private static Minecraft client = Minecraft.getInstance(); + private static Unsafe unsafe = getUnsafe(); + + public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.LevelStorageAccess $$2, ServerLevelData $$3, ResourceKey $$4, LevelStem $$5, ChunkProgressListener $$6, boolean $$7, long $$8, List $$9, boolean $$10) { + super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10); + } + + public static ServerLevelStub fastCreate() { + try { + return (ServerLevelStub) unsafe.allocateInstance(ServerLevelStub.class); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } + } + + public static Unsafe getUnsafe() { + try { + Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); + theUnsafe.setAccessible(true); + return (Unsafe) theUnsafe.get(null); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public FeatureFlagSet enabledFeatures() { + assert client.level != null; + return client.level.enabledFeatures(); + } + + } } diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index 50732ec52..d2132f9a5 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -17,7 +17,7 @@ package baritone.api.utils; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; @@ -29,7 +29,7 @@ public class BlockUtils { private static transient Map resourceCache = new HashMap<>(); public static String blockToString(Block block) { - ResourceLocation loc = Registry.BLOCK.getKey(block); + ResourceLocation loc = BuiltInRegistries.BLOCK.getKey(block); String name = loc.getPath(); // normally, only write the part after the minecraft: if (!loc.getNamespace().equals("minecraft")) { // Baritone is running on top of forge with mods installed, perhaps? @@ -57,7 +57,7 @@ public static Block stringToBlockNullable(String name) { if (resourceCache.containsKey(name)) { return null; // cached as null } - block = Registry.BLOCK.getOptional(ResourceLocation.tryParse(name.contains(":") ? name : "minecraft:" + name)).orElse(null); + block = BuiltInRegistries.BLOCK.getOptional(ResourceLocation.tryParse(name.contains(":") ? name : "minecraft:" + name)).orElse(null); Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); resourceCache = copy; diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index db25ac0b6..022281b64 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -27,9 +27,7 @@ * @since 8/25/2018 */ public final class RayTraceUtils { - public static ClipContext.Fluid fluidHandling = ClipContext.Fluid.NONE; - private RayTraceUtils() { } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index c9fbd557c..c6e0608eb 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -21,8 +21,8 @@ import baritone.api.Settings; import net.minecraft.client.Minecraft; import net.minecraft.core.Direction; -import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; @@ -179,7 +179,7 @@ public static String settingToString(Settings.Setting setting) throws IllegalSta /** * This should always be the same as whether the setting can be parsed from or serialized to a string * - * @param setting setting + * @param the setting * @return true if the setting can not be set or read by the user */ public static boolean javaOnlySetting(Settings.Setting setting) { @@ -231,8 +231,8 @@ private enum Parser implements ISettingParser { ), ITEM( Item.class, - str -> Registry.ITEM.get(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? - item -> Registry.ITEM.getKey(item).toString() + str -> BuiltInRegistries.ITEM.get(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? + item -> BuiltInRegistries.ITEM.getKey(item).toString() ), LIST() { @Override diff --git a/src/launch/java/baritone/launch/MixinPlugin.java b/src/launch/java/baritone/launch/MixinPlugin.java deleted file mode 100644 index 17ea1d26c..000000000 --- a/src/launch/java/baritone/launch/MixinPlugin.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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; - -import net.fabricmc.loader.api.FabricLoader; -import org.objectweb.asm.tree.ClassNode; -import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; -import org.spongepowered.asm.mixin.extensibility.IMixinInfo; - -import java.util.List; -import java.util.Set; - -public class MixinPlugin implements IMixinConfigPlugin { - private static final String mixinPackage = "baritone.launch.mixins"; - - private static boolean loaded; - - private static boolean isBaritonePresent; - - @Override - public void onLoad(String mixinPackage) { - if (loaded) return; - - isBaritonePresent = FabricLoader.getInstance().isModLoaded("baritone"); - - loaded = true; - } - - @Override - public String getRefMapperConfig() { - return null; - } - - @Override - public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { - if (!mixinClassName.startsWith(mixinPackage)) { - throw new RuntimeException("Mixin " + mixinClassName + " is not in the mixin package"); - } else { - return !isBaritonePresent; - } - } - - @Override - public void acceptTargets(Set myTargets, Set otherTargets) { - } - - @Override - public List getMixins() { - return null; - } - - @Override - public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - } - - @Override - public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - } -} \ No newline at end of file diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index df3fbf09f..1eafa8d54 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -20,14 +20,18 @@ import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import baritone.api.event.events.ChatEvent; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.type.EventState; import baritone.cache.CachedChunk; +import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.player.LocalPlayer; import net.minecraft.network.protocol.game.*; import net.minecraft.world.level.ChunkPos; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -63,6 +67,27 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { } }*/ + @Shadow + @Final + private Minecraft minecraft; + + @Inject( + method = "sendChat(Ljava/lang/String;)V", + at = @At("HEAD"), + cancellable = true + ) + private void sendChatMessage(String string, CallbackInfo ci) { + ChatEvent event = new ChatEvent(string); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(this.minecraft.player); + if (baritone == null) { + return; + } + baritone.getGameEventHandler().onSendChatMessage(event); + if (event.isCancelled()) { + ci.cancel(); + } + } + @Inject( method = "handleLevelChunkWithLight", at = @At("RETURN") diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index e5f3e0375..4eea7d219 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -19,14 +19,12 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; -import baritone.api.event.events.ChatEvent; import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.SprintStateEvent; import baritone.api.event.events.type.EventState; import baritone.behavior.LookBehavior; import net.minecraft.client.KeyMapping; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Abilities; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -41,23 +39,6 @@ @Mixin(LocalPlayer.class) public class MixinClientPlayerEntity { - @Inject( - method = "sendChat(Ljava/lang/String;Lnet/minecraft/network/chat/Component;)V", - at = @At("HEAD"), - cancellable = true - ) - private void sendChatMessage(String string, Component component, CallbackInfo ci) { - ChatEvent event = new ChatEvent(string); - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); - if (baritone == null) { - return; - } - baritone.getGameEventHandler().onSendChatMessage(event); - if (event.isCancelled()) { - ci.cancel(); - } - } - @Inject( method = "tick", at = @At( diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java index 622721281..a6cf48899 100644 --- a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java @@ -21,11 +21,11 @@ import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix4f; import net.minecraft.client.Camera; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LightTexture; +import org.joml.Matrix4f; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/launch/resources/META-INF/MANIFEST.MF b/src/launch/resources/META-INF/MANIFEST.MF index 4ab94e276..f45ccbd76 100644 --- a/src/launch/resources/META-INF/MANIFEST.MF +++ b/src/launch/resources/META-INF/MANIFEST.MF @@ -1,5 +1,5 @@ Manifest-Version: 1.0 -MixinConfigs: mixins.baritone-meteor.json +MixinConfigs: mixins.baritone.json MixinConnector: baritone.launch.BaritoneMixinConnector Implementation-Title: Baritone Implementation-Version: version diff --git a/src/launch/resources/mixins.baritone-meteor.json b/src/launch/resources/mixins.baritone-meteor.json index 18638b4db..02f905891 100644 --- a/src/launch/resources/mixins.baritone-meteor.json +++ b/src/launch/resources/mixins.baritone-meteor.json @@ -7,7 +7,6 @@ "maxShiftBy": 2, "defaultRequire": 1 }, - "plugin": "baritone.launch.MixinPlugin", "client": [ "MixinChunkArray", "MixinClientChunkProvider", @@ -18,11 +17,13 @@ "MixinEntityRenderManager", "MixinItemStack", "MixinLivingEntity", + "MixinLongArrayNBT", "MixinLootContext", "MixinMinecraft", "MixinNetworkManager", "MixinPlayerController", "MixinScreen", "MixinWorldRenderer" - ] + ], + "plugin": "baritone.launch.FabricMixinPlugin" } \ No newline at end of file diff --git a/src/launch/resources/pack.mcmeta b/src/launch/resources/pack.mcmeta deleted file mode 100644 index 35ded91c4..000000000 --- a/src/launch/resources/pack.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "pack": { - "description": "baritoe", - "pack_format": 5 - } -} diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 065823fe2..0fc89c3e9 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -47,6 +47,10 @@ public class WorldProvider implements IWorldProvider, Helper { @Override public final WorldData getCurrentWorld() { + // attempt reload if the worldData is null + if (currentWorld == null && mc.level != null) { + initWorld(mc.level.dimension(), mc.level.dimensionType()); + } return this.currentWorld; } @@ -82,6 +86,7 @@ public final void initWorld(ResourceKey worldKey, DimensionType world) { folderName = mc.getCurrentServer().ip; } else { //replaymod causes null currentServerData and false singleplayer. + System.out.println("BARITONE: setting current world to null"); currentWorld = null; return; } diff --git a/src/main/java/baritone/command/defaults/DefaultCommands.java b/src/main/java/baritone/command/defaults/DefaultCommands.java index e998dcc97..c2118ebe8 100644 --- a/src/main/java/baritone/command/defaults/DefaultCommands.java +++ b/src/main/java/baritone/command/defaults/DefaultCommands.java @@ -42,7 +42,8 @@ public static List createAll(IBaritone baritone) { new VersionCommand(baritone), new RepackCommand(baritone), new BuildCommand(baritone), - new SchematicaCommand(baritone), + //new SchematicaCommand(baritone), + new LitematicaCommand(baritone), new ComeCommand(baritone), new AxisCommand(baritone), new ForceCancelCommand(baritone), diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index 8a53e7d41..eaab75286 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -79,7 +79,7 @@ public String displayName0() { } } ); - pauseCommand = new Command(baritone, "pause", "p") { + pauseCommand = new Command(baritone, "pause", "p", "paws") { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); @@ -112,7 +112,7 @@ public List getLongDesc() { ); } }; - resumeCommand = new Command(baritone, "resume", "r", "unpause") { + resumeCommand = new Command(baritone, "resume", "r", "unpause", "unpaws") { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index a59924a87..1efbbc93e 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -22,8 +22,15 @@ import baritone.api.command.argument.IArgConsumer; import baritone.api.command.datatypes.BlockById; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.BetterBlockPos; -import net.minecraft.core.Registry; +import baritone.cache.CachedChunk; +import net.minecraft.ChatFormatting; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.level.block.Block; import java.util.ArrayList; @@ -31,6 +38,8 @@ import java.util.List; import java.util.stream.Stream; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + public class FindCommand extends Command { public FindCommand(IBaritone baritone) { @@ -39,15 +48,16 @@ public FindCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMin(1); List toFind = new ArrayList<>(); while (args.hasAny()) { toFind.add(args.getDatatypeFor(BlockById.INSTANCE)); } BetterBlockPos origin = ctx.playerFeet(); - toFind.stream() + Component[] components = toFind.stream() .flatMap(block -> ctx.worldData().getCachedWorld().getLocationsOf( - Registry.BLOCK.getKey(block).getPath(), + BuiltInRegistries.BLOCK.getKey(block).getPath(), Integer.MAX_VALUE, origin.x, origin.y, @@ -55,13 +65,40 @@ public void execute(String label, IArgConsumer args) throws CommandException { ).stream() ) .map(BetterBlockPos::new) - .map(BetterBlockPos::toString) - .forEach(this::logDirect); + .map(this::positionToComponent) + .toArray(Component[]::new); + if (components.length > 0) { + Arrays.asList(components).forEach(this::logDirect); + } else { + logDirect("No positions known, are you sure the blocks are cached?"); + } + } + + private Component positionToComponent(BetterBlockPos pos) { + String positionText = String.format("%s %s %s", pos.x, pos.y, pos.z); + String command = String.format("%sgoal %s", FORCE_COMMAND_PREFIX, positionText); + MutableComponent baseComponent = Component.literal(pos.toString()); + MutableComponent hoverComponent = Component.literal("Click to set goal to this position"); + baseComponent.setStyle(baseComponent.getStyle() + .withColor(ChatFormatting.GRAY) + .withInsertion(positionText) + .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)) + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) + ); + return baseComponent; } @Override - public Stream tabComplete(String label, IArgConsumer args) { - return args.tabCompleteDatatype(BlockById.INSTANCE); + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + return new TabCompleteHelper() + .append( + CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream() + .map(BuiltInRegistries.BLOCK::getKey) + .map(Object::toString) + ) + .filterPrefixNamespaced(args.getString()) + .sortAlphabetically() + .stream(); } @Override @@ -73,9 +110,10 @@ public String getShortDesc() { public List getLongDesc() { return Arrays.asList( "The find command searches through Baritone's cache and attempts to find the location of the block.", + "Tab completion will suggest only cached blocks and uncached blocks can not be found.", "", "Usage:", - "> find - Find positions of a certain block" + "> find [...] - Try finding the listed blocks" ); } } diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index 4b60dfb8b..b341db003 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -27,7 +27,7 @@ import baritone.api.command.exception.CommandErrorMessageException; import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -85,7 +85,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } else { logDirect("Following these types of entities:"); classes.stream() - .map(Registry.ENTITY_TYPE::getKey) + .map(BuiltInRegistries.ENTITY_TYPE::getKey) .map(Objects::requireNonNull) .map(ResourceLocation::toString) .forEach(this::logDirect); diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 63712fe3e..98a2e264d 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -65,14 +65,12 @@ public List getLongDesc() { return Arrays.asList( "The mine command allows you to tell Baritone to search for and mine individual blocks.", "", - "The specified blocks can be ores (which are commonly cached), or any other block.", + "The specified blocks can be ores, or any other block.", "", "Also see the legitMine settings (see #set l legitMine).", "", "Usage:", - "> mine diamond_ore - Mines all diamonds it can find.", - "> mine redstone_ore lit_redstone_ore - Mines redstone ore.", - "> mine log:0 - Mines only oak logs." + "> mine diamond_ore - Mines all diamonds it can find." ); } } diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index b0ff57020..d20b519dc 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -41,17 +41,24 @@ public abstract class AbstractNodeCostSearch implements IPathFinder, Helper { protected final int startZ; protected final Goal goal; - protected final PathNode[] bestSoFar = new PathNode[COEFFICIENTS.length]; + private final CalculationContext context; + /** * @see Issue #107 */ private final Long2ObjectOpenHashMap map; + protected PathNode startNode; + protected PathNode mostRecentConsidered; - protected boolean cancelRequested; + + protected final PathNode[] bestSoFar = new PathNode[COEFFICIENTS.length]; + private volatile boolean isFinished; + protected boolean cancelRequested; + /** * This is really complicated and hard to explain. I wrote a comment in the old version of MineBot but it was so * long it was easier as a Google Doc (because I could insert charts). diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index c85a6f282..f3df6fd08 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -57,6 +57,7 @@ public class CalculationContext { public final boolean hasWaterBucket; public final boolean hasThrowaway; public final boolean canSprint; + protected final double placeBlockCost; // protected because you should call the function instead public final boolean allowBreak; public final List allowBreakAnyway; public final boolean allowParkour; @@ -71,11 +72,10 @@ public class CalculationContext { public final int maxFallHeightBucket; public final double waterWalkSpeed; public final double breakBlockAdditionalCost; - public final double walkOnWaterOnePenalty; - public final BetterWorldBorder worldBorder; - protected final double placeBlockCost; // protected because you should call the function instead public double backtrackCostFavoringCoefficient; public double jumpPenalty; + public final double walkOnWaterOnePenalty; + public final BetterWorldBorder worldBorder; public CalculationContext(IBaritone baritone) { this(baritone, false); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 01802d4d6..170147361 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -563,7 +563,7 @@ static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterf static boolean isBlockNormalCube(BlockState state) { Block block = state.getBlock(); - if (block instanceof BambooBlock + if (block instanceof BambooStalkBlock || block instanceof MovingPistonBlock || block instanceof ScaffoldingBlock || block instanceof ShulkerBoxBlock @@ -636,7 +636,7 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, static boolean isTransparent(Block b) { - return b == Blocks.AIR || + return b instanceof AirBlock || b == Blocks.LAVA || b == Blocks.WATER; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index e0efd8601..2db0b4ee4 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -49,6 +49,27 @@ public MovementDescend(IBaritone baritone, BetterBlockPos start, BetterBlockPos super(baritone, start, end, new BetterBlockPos[]{end.above(2), end.above(), end}, end.below()); } + @Override + public void reset() { + super.reset(); + numTicks = 0; + } + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is a fall not a descend + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest.above(), dest); + } + public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { double totalCost = 0; BlockState destDown = context.get(destX, y - 1, destZ); @@ -183,27 +204,6 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, } } - @Override - public void reset() { - super.reset(); - numTicks = 0; - } - - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is a fall not a descend - } - return result.cost; - } - - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest.above(), dest); - } - @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 8a3c96991..f41504520 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -58,18 +58,6 @@ public MovementFall(IBaritone baritone, BetterBlockPos src, BetterBlockPos dest) super(baritone, src, dest, MovementFall.buildPositionsToBreak(src, dest)); } - private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, BetterBlockPos dest) { - BetterBlockPos[] toBreak; - int diffX = src.getX() - dest.getX(); - int diffZ = src.getZ() - dest.getZ(); - int diffY = Math.abs(src.getY() - dest.getY()); - toBreak = new BetterBlockPos[diffY + 2]; - for (int i = 0; i < toBreak.length; i++) { - toBreak[i] = new BetterBlockPos(src.getX() - diffX, src.getY() + 1 - i, src.getZ() - diffZ); - } - return toBreak; - } - @Override public double calculateCost(CalculationContext context) { MutableMoveResult result = new MutableMoveResult(); @@ -80,12 +68,6 @@ public double calculateCost(CalculationContext context) { return result.cost; } - private boolean willPlaceBucket() { - CalculationContext context = new CalculationContext(baritone); - MutableMoveResult result = new MutableMoveResult(); - return MovementDescend.dynamicFallCost(context, src.x, src.y, src.z, dest.x, dest.z, 0, context.get(dest.x, src.y - 2, dest.z), result); - } - @Override protected Set calculateValidPositions() { Set set = new HashSet<>(); @@ -96,6 +78,18 @@ protected Set calculateValidPositions() { return set; } + private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, BetterBlockPos dest) { + BetterBlockPos[] toBreak; + int diffX = src.getX() - dest.getX(); + int diffZ = src.getZ() - dest.getZ(); + int diffY = Math.abs(src.getY() - dest.getY()); + toBreak = new BetterBlockPos[diffY + 2]; + for (int i = 0; i < toBreak.length; i++) { + toBreak[i] = new BetterBlockPos(src.getX() - diffX, src.getY() + 1 - i, src.getZ() - diffZ); + } + return toBreak; + } + @Override public MovementState updateState(MovementState state) { super.updateState(state); @@ -173,13 +167,6 @@ public MovementState updateState(MovementState state) { return state; } - @Override - public boolean safeToCancel(MovementState state) { - // if we haven't started walking off the edge yet, or if we're in the process of breaking blocks before doing the fall - // then it's safe to cancel this - return ctx.playerFeet().equals(src) || state.getStatus() != MovementStatus.RUNNING; - } - private Direction avoid() { for (int i = 0; i < 15; i++) { BlockState state = ctx.world().getBlockState(ctx.playerFeet().below(i)); @@ -190,6 +177,19 @@ private Direction avoid() { return null; } + private boolean willPlaceBucket() { + CalculationContext context = new CalculationContext(baritone); + MutableMoveResult result = new MutableMoveResult(); + return MovementDescend.dynamicFallCost(context, src.x, src.y, src.z, dest.x, dest.z, 0, context.get(dest.x, src.y - 2, dest.z), result); + } + + @Override + public boolean safeToCancel(MovementState state) { + // if we haven't started walking off the edge yet, or if we're in the process of breaking blocks before doing the fall + // then it's safe to cancel this + return ctx.playerFeet().equals(src) || state.getStatus() != MovementStatus.RUNNING; + } + @Override protected boolean prepared(MovementState state) { if (state.getStatus() == MovementStatus.WAITING) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index a867efef5..52cbd0968 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -53,6 +53,22 @@ public MovementTraverse(IBaritone baritone, BetterBlockPos from, BetterBlockPos super(baritone, from, to, new BetterBlockPos[]{to.above(), to}, to.below()); } + @Override + public void reset() { + super.reset(); + wasTheBridgeBlockAlwaysThere = true; + } + + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z, dest.x, dest.z); + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest); // src.above means that we don't get caught in an infinite loop in water + } + public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { BlockState pb0 = context.get(destX, y + 1, destZ); BlockState pb1 = context.get(destX, y, destZ); @@ -139,22 +155,6 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } - @Override - public void reset() { - super.reset(); - wasTheBridgeBlockAlwaysThere = true; - } - - @Override - public double calculateCost(CalculationContext context) { - return cost(context, src.x, src.y, src.z, dest.x, dest.z); - } - - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest); - } - @Override public MovementState updateState(MovementState state) { super.updateState(state); @@ -236,6 +236,7 @@ public MovementState updateState(MovementState state) { if (feet.getY() != dest.getY() && !ladder) { logDebug("Wrong Y coordinate"); if (feet.getY() < dest.getY()) { + System.out.println("In movement traverse"); return state.setInput(Input.JUMP, true); } return state; diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index c7d54e2bb..ce06a3b84 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -73,8 +73,8 @@ public class PathExecutor implements IPathExecutor, Helper { private HashSet toPlace = new HashSet<>(); private HashSet toWalkInto = new HashSet<>(); - private PathingBehavior behavior; - private IPlayerContext ctx; + private final PathingBehavior behavior; + private final IPlayerContext ctx; private boolean sprintNextTick; @@ -85,89 +85,6 @@ public PathExecutor(PathingBehavior behavior, IPath path) { this.pathPosition = 0; } - private static boolean skipNow(IPlayerContext ctx, IMovement current) { - double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().position().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().position().x)); - if (offTarget > 0.1) { - return false; - } - // we are centered - BlockPos headBonk = current.getSrc().subtract(current.getDirection()).above(2); - if (MovementHelper.fullyPassable(ctx, headBonk)) { - return true; - } - // wait 0.3 - double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().position().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().position().z)); - return flatDist > 0.8; - } - - private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse current, MovementAscend next, IMovement nextnext) { - if (!Baritone.settings().sprintAscends.value) { - return false; - } - if (!current.getDirection().equals(next.getDirection().below())) { - return false; - } - if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { - return false; - } - if (!MovementHelper.canWalkOn(ctx, current.getDest().below())) { - return false; - } - if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { - return false; - } - if (!next.toBreakCached.isEmpty()) { - return false; // it's breaking - } - for (int x = 0; x < 2; x++) { - for (int y = 0; y < 3; y++) { - BlockPos chk = current.getSrc().above(y); - if (x == 1) { - chk = chk.offset(current.getDirection()); - } - if (!MovementHelper.fullyPassable(ctx, chk)) { - return false; - } - } - } - if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().above(3)))) { - return false; - } - if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(3)) || - AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(2))) { - return false; - } - return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().above(2))); // codacy smh my head - } - - private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { - if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { - return true; - } - if (!MovementHelper.canWalkOn(ctx, current.getDest().offset(current.getDirection()))) { - return false; - } - if (next instanceof MovementTraverse && next.getDirection().equals(current.getDirection())) { - return true; - } - return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; - } - - private Tuple closestPathPos(IPath path) { - double best = -1; - BlockPos bestPos = null; - for (IMovement movement : path.movements()) { - for (BlockPos pos : ((Movement) movement).getValidPositions()) { - double dist = VecUtils.entityDistanceToCenter(ctx.player(), pos); - if (dist < best || best == -1) { - best = dist; - bestPos = pos; - } - } - } - return new Tuple<>(best, bestPos); - } - /** * Tick this executor * @@ -337,6 +254,21 @@ public boolean onTick() { return canCancel; // movement is in progress, but if it reports cancellable, PathingBehavior is good to cut onto the next path } + private static boolean skipNow(IPlayerContext ctx, IMovement current) { + double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().position().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().position().x)); + if (offTarget > 0.1) { + return false; + } + // we are centered + BlockPos headBonk = current.getSrc().subtract(current.getDirection()).above(2); + if (MovementHelper.fullyPassable(ctx, headBonk)) { + return true; + } + // wait 0.3 + double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().position().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().position().z)); + return flatDist > 0.8; + } + private boolean shouldPause() { Optional current = behavior.getInProgress(); if (!current.isPresent()) { @@ -411,6 +343,113 @@ public boolean snipsnapifpossible() { return true; } + private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse current, MovementAscend next, IMovement nextnext) { + if (!Baritone.settings().sprintAscends.value) { + return false; + } + if (!current.getDirection().equals(next.getDirection().below())) { + return false; + } + if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, current.getDest().below())) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { + return false; + } + if (!next.toBreakCached.isEmpty()) { + return false; // it's breaking + } + for (int x = 0; x < 2; x++) { + for (int y = 0; y < 3; y++) { + BlockPos chk = current.getSrc().above(y); + if (x == 1) { + chk = chk.offset(current.getDirection()); + } + if (!MovementHelper.fullyPassable(ctx, chk)) { + return false; + } + } + } + if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().above(3)))) { + return false; + } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(3)) || + AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(2))) { + return false; + } + return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().above(2))); // codacy smh my head + } + + private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { + if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { + return true; + } + if (!MovementHelper.canWalkOn(ctx, current.getDest().offset(current.getDirection()))) { + return false; + } + if (next instanceof MovementTraverse && next.getDirection().equals(current.getDirection())) { + return true; + } + return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; + } + + private Tuple overrideFall(MovementFall movement) { + Vec3i dir = movement.getDirection(); + if (dir.getY() < -3) { + return null; + } + if (!movement.toBreakCached.isEmpty()) { + return null; // it's breaking + } + Vec3i flatDir = new Vec3i(dir.getX(), 0, dir.getZ()); + int i; + outer: + for (i = pathPosition + 1; i < path.length() - 1 && i < pathPosition + 3; i++) { + IMovement next = path.movements().get(i); + if (!(next instanceof MovementTraverse)) { + break; + } + if (!flatDir.equals(next.getDirection())) { + break; + } + for (int y = next.getDest().y; y <= movement.getSrc().y + 1; y++) { + BlockPos chk = new BlockPos(next.getDest().x, y, next.getDest().z); + if (!MovementHelper.fullyPassable(ctx, chk)) { + break outer; + } + } + if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { + break; + } + } + i--; + if (i == pathPosition) { + return null; // no valid extension exists + } + double len = i - pathPosition - 0.4; + return new Tuple<>( + new Vec3(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), + movement.getDest().offset(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); + } + + private Tuple closestPathPos(IPath path) { + double best = -1; + BlockPos bestPos = null; + for (IMovement movement : path.movements()) { + for (BlockPos pos : ((Movement) movement).getValidPositions()) { + double dist = VecUtils.entityDistanceToCenter(ctx.player(), pos); + if (dist < best || best == -1) { + best = dist; + bestPos = pos; + } + } + } + return new Tuple<>(best, bestPos); + } + private boolean shouldSprintNextTick() { boolean requested = behavior.baritone.getInputOverrideHandler().isInputForcedDown(Input.SPRINT); @@ -465,11 +504,20 @@ private boolean shouldSprintNextTick() { return true; } if (canSprintFromDescendInto(ctx, current, next)) { + + if (next instanceof MovementDescend && pathPosition < path.length() - 3) { + IMovement next_next = path.movements().get(pathPosition + 2); + if (next_next instanceof MovementDescend && !canSprintFromDescendInto(ctx, next, next_next)) { + return false; + } + + } if (ctx.playerFeet().equals(current.getDest())) { pathPosition++; onChangeInPathPosition(); onTick(); } + return true; } //logDebug("Turning off sprinting " + movement + " " + next + " " + movement.getDirection() + " " + next.getDirection().down() + " " + next.getDirection().down().equals(movement.getDirection())); @@ -513,45 +561,6 @@ private boolean shouldSprintNextTick() { return false; } - private Tuple overrideFall(MovementFall movement) { - Vec3i dir = movement.getDirection(); - if (dir.getY() < -3) { - return null; - } - if (!movement.toBreakCached.isEmpty()) { - return null; // it's breaking - } - Vec3i flatDir = new Vec3i(dir.getX(), 0, dir.getZ()); - int i; - outer: - for (i = pathPosition + 1; i < path.length() - 1 && i < pathPosition + 3; i++) { - IMovement next = path.movements().get(i); - if (!(next instanceof MovementTraverse)) { - break; - } - if (!flatDir.equals(next.getDirection())) { - break; - } - for (int y = next.getDest().y; y <= movement.getSrc().y + 1; y++) { - BlockPos chk = new BlockPos(next.getDest().x, y, next.getDest().z); - if (!MovementHelper.fullyPassable(ctx, chk)) { - break outer; - } - } - if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { - break; - } - } - i--; - if (i == pathPosition) { - return null; // no valid extension exists - } - double len = i - pathPosition - 0.4; - return new Tuple<>( - new Vec3(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), - movement.getDest().offset(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); - } - private void onChangeInPathPosition() { clearKeys(); ticksOnCurrent = 0; diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java index a6553666f..cebe07c97 100644 --- a/src/main/java/baritone/process/BackfillProcess.java +++ b/src/main/java/baritone/process/BackfillProcess.java @@ -55,12 +55,12 @@ public boolean isActive() { Baritone.settings().backfill.value = false; return false; } - amIBreakingABlockHMMMMMMM(); for (BlockPos pos : new ArrayList<>(blocksToReplace.keySet())) { - if (ctx.world().getChunk(pos) instanceof EmptyLevelChunk) { + if (ctx.world().getChunk(pos) instanceof EmptyLevelChunk || ctx.world().getBlockState(pos).getBlock() != Blocks.AIR) { blocksToReplace.remove(pos); } } + amIBreakingABlockHMMMMMMM(); baritone.getInputOverrideHandler().clearAllKeys(); return !toFillIn().isEmpty(); @@ -92,7 +92,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } private void amIBreakingABlockHMMMMMMM() { - if (!ctx.getSelectedBlock().isPresent()) { + if (!ctx.getSelectedBlock().isPresent() || !baritone.getPathingBehavior().isPathing()) { return; } blocksToReplace.put(ctx.getSelectedBlock().get(), ctx.world().getBlockState(ctx.getSelectedBlock().get())); diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 72ff8a1ff..9ca546840 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -51,9 +51,11 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; +import net.minecraft.network.chat.Component; import net.minecraft.util.Tuple; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.BlockItem; @@ -310,6 +312,11 @@ public boolean build(String name, File schematic, Vec3i origin) { return true; } + @Override + public boolean build(String schematicFile, BlockPos origin) { + return IBuilderProcess.super.build(schematicFile, origin); + } + public void resume() { if (!this.stateStack.isEmpty()) { popStack(); @@ -347,6 +354,11 @@ public void buildOpenSchematic() { } } + @Override + public void buildOpenLitematic(int i) { + + } + public void clearArea(BlockPos corner1, BlockPos corner2) { BlockPos origin = new BlockPos(Math.min(corner1.getX(), corner2.getX()), Math.min(corner1.getY(), corner2.getY()), Math.min(corner1.getZ(), corner2.getZ())); int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; @@ -1060,6 +1072,76 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return new GoalComposite(toBreak.toArray(new Goal[0])); } + @Override + public void logToast(Component title, Component message) { + super.logToast(title, message); + } + + @Override + public void logToast(String title, String message) { + super.logToast(title, message); + } + + @Override + public void logToast(String message) { + super.logToast(message); + } + + @Override + public void logNotification(String message) { + super.logNotification(message); + } + + @Override + public void logNotification(String message, boolean error) { + super.logNotification(message, error); + } + + @Override + public void logNotificationDirect(String message) { + super.logNotificationDirect(message); + } + + @Override + public void logNotificationDirect(String message, boolean error) { + super.logNotificationDirect(message, error); + } + + @Override + public void logDebug(String message) { + super.logDebug(message); + } + + @Override + public void logDirect(boolean logAsToast, Component... components) { + super.logDirect(logAsToast, components); + } + + @Override + public void logDirect(Component... components) { + super.logDirect(components); + } + + @Override + public void logDirect(String message, ChatFormatting color, boolean logAsToast) { + super.logDirect(message, color, logAsToast); + } + + @Override + public void logDirect(String message, ChatFormatting color) { + super.logDirect(message, color); + } + + @Override + public void logDirect(String message, boolean logAsToast) { + super.logDirect(message, logAsToast); + } + + @Override + public void logDirect(String message) { + super.logDirect(message); + } + public static class Placement { private final int hotbarSelection; @@ -1206,6 +1288,16 @@ public void onLostControl() { blockBreakHistory.clear(); } + @Override + public double priority() { + return super.priority(); + } + + @Override + public String displayName() { + return super.displayName(); + } + public static class GoalPlace extends GoalBlock { public GoalPlace(BlockPos placeAt) { diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index ec32aa95b..6ad41d90e 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -108,27 +108,6 @@ public void farm(int range, BlockPos pos) { locations = null; } - private boolean isPlantable(ItemStack stack) { - return FARMLAND_PLANTABLE.contains(stack.getItem()); - } - - private boolean readyForHarvest(Level world, BlockPos pos, BlockState state) { - for (Harvest harvest : Harvest.values()) { - if (harvest.block == state.getBlock()) { - return harvest.readyToHarvest(world, pos, state); - } - } - return false; - } - - private boolean isNetherWart(ItemStack stack) { - return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART); - } - - private boolean isBoneMeal(ItemStack stack) { - return !stack.isEmpty() && stack.getItem().equals(Items.BONE_MEAL); - } - private enum Harvest { WHEAT((CropBlock) Blocks.WHEAT), CARROTS((CropBlock) Blocks.CARROTS), @@ -173,6 +152,27 @@ public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { } } + private boolean readyForHarvest(Level world, BlockPos pos, BlockState state) { + for (Harvest harvest : Harvest.values()) { + if (harvest.block == state.getBlock()) { + return harvest.readyToHarvest(world, pos, state); + } + } + return false; + } + + private boolean isPlantable(ItemStack stack) { + return FARMLAND_PLANTABLE.contains(stack.getItem()); + } + + private boolean isBoneMeal(ItemStack stack) { + return !stack.isEmpty() && stack.getItem().equals(Items.BONE_MEAL); + } + + private boolean isNetherWart(ItemStack stack) { + return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART); + } + @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { ArrayList scan = new ArrayList<>(); diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 32837cdcd..735736732 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -43,13 +43,14 @@ public class BlockStateInterface { private static final BlockState AIR = Blocks.AIR.defaultBlockState(); - public final BlockPos.MutableBlockPos isPassableBlockPos; protected final Level world; private final ClientChunkCache provider; + public final BlockPos.MutableBlockPos isPassableBlockPos; public final BlockGetter access; public final BetterWorldBorder worldBorder; - private final WorldData worldData; + private LevelChunk prev = null; + private final WorldData worldData; private final boolean useTheRealWorld; private CachedRegion prevCached = null; @@ -79,10 +80,6 @@ public BlockStateInterface(Level world, WorldData worldData, boolean copyLoadedC this.access = new BlockStateInterfaceAccessWrapper(this); } - public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be called from the pathing thread because the pathing thread doesn't make a single blockpos pog - return get(ctx, pos).getBlock(); - } - // get the block at x,y,z from this chunk WITHOUT creating a single blockpos object public static BlockState getFromChunk(LevelChunk chunk, int x, int y, int z) { LevelChunkSection section = chunk.getSections()[y >> 4]; @@ -92,6 +89,10 @@ public static BlockState getFromChunk(LevelChunk chunk, int x, int y, int z) { return section.getBlockState(x & 15, y & 15, z & 15); } + public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be called from the pathing thread because the pathing thread doesn't make a single blockpos pog + return get(ctx, pos).getBlock(); + } + public static BlockState get(IPlayerContext ctx, BlockPos pos) { return new BlockStateInterface(ctx).get0(pos.getX(), pos.getY(), pos.getZ()); // immense iq // can't just do world().get because that doesn't work for out of bounds diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 8e7c30c52..f4f1c064b 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -24,8 +24,6 @@ import baritone.api.utils.Helper; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector4f; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; @@ -39,6 +37,8 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; +import org.joml.Matrix4f; +import org.joml.Vector4f; import java.awt.*; import java.util.Collections; @@ -80,6 +80,7 @@ public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) HitResult result = player.level.clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); if (result != null && result.getType() == HitResult.Type.BLOCK) { currentMouseOver = ((BlockHitResult) result).getBlockPos(); + System.out.println("currentMouseOver = " + currentMouseOver); } } } @@ -118,8 +119,8 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { } public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { - this.projectionViewMatrix = projectionMatrix.copy(); - this.projectionViewMatrix.multiply(modelViewStack.last().pose()); + this.projectionViewMatrix = new Matrix4f(projectionMatrix); + this.projectionViewMatrix.mul(modelViewStack.last().pose()); this.projectionViewMatrix.invert(); if (currentMouseOver != null) { @@ -158,12 +159,13 @@ private Vec3 toWorld(double x, double y, double z) { y = y * 2 - 1; Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F); - pos.transform(this.projectionViewMatrix); + projectionViewMatrix.transform(pos); + if (pos.w() == 0) { return null; } - pos.perspectiveDivide(); + pos.mul(1 / pos.w()); return new Vec3(pos.x(), pos.y(), pos.z()); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 7dbbe1a92..9858cc259 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -23,8 +23,8 @@ import baritone.utils.accessor.IEntityRenderManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import com.mojang.math.Matrix4f; import net.minecraft.world.phys.AABB; +import org.joml.Matrix4f; import java.awt.*; diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 0144a532e..7de02a08e 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -30,7 +30,6 @@ import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.math.Matrix4f; import net.minecraft.client.renderer.blockentity.BeaconRenderer; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; @@ -41,6 +40,7 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import org.joml.Matrix4f; import java.awt.*; import java.util.Collection; diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index f5d07e298..1156f13f5 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -66,6 +66,33 @@ public ToolSet(LocalPlayer player) { } } + /** + * Using the best tool on the hotbar, how fast we can mine this block + * + * @param state the blockstate to be mined + * @return the speed of how fast we'll mine it. 1/(time in ticks) + */ + public double getStrVsBlock(BlockState state) { + return breakStrengthCache.computeIfAbsent(state.getBlock(), backendCalculation); + } + + /** + * Evaluate the material cost of a possible tool. The priority matches the + * harvest level order; there is a chance for multiple at the same with modded tools + * but in that case we don't really care. + * + * @param itemStack a possibly empty ItemStack + * @return values from 0 up + */ + private int getMaterialCost(ItemStack itemStack) { + if (itemStack.getItem() instanceof TieredItem) { + TieredItem tool = (TieredItem) itemStack.getItem(); + return tool.getTier().getLevel(); + } else { + return -1; + } + } + /** * Calculates how long would it take to mine the specified block given the best tool * in this toolset is used. A negative value is returned if the specified block is unbreakable. @@ -98,33 +125,6 @@ public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { } } - /** - * Using the best tool on the hotbar, how fast we can mine this block - * - * @param state the blockstate to be mined - * @return the speed of how fast we'll mine it. 1/(time in ticks) - */ - public double getStrVsBlock(BlockState state) { - return breakStrengthCache.computeIfAbsent(state.getBlock(), backendCalculation); - } - - /** - * Evaluate the material cost of a possible tool. The priority matches the - * harvest level order; there is a chance for multiple at the same with modded tools - * but in that case we don't really care. - * - * @param itemStack a possibly empty ItemStack - * @return values from 0 up - */ - private int getMaterialCost(ItemStack itemStack) { - if (itemStack.getItem() instanceof TieredItem) { - TieredItem tool = (TieredItem) itemStack.getItem(); - return tool.getTier().getLevel(); - } else { - return -1; - } - } - /** * Calculate which tool on the hotbar is best for mining, depending on an override setting, * related to auto tool movement cost, it will either return current selected slot, or the best slot. @@ -137,10 +137,6 @@ public int getBestSlot(Block b, boolean preferSilkTouch) { return getBestSlot(b, preferSilkTouch, false); } - public boolean hasSilkTouch(ItemStack stack) { - return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; - } - public int getBestSlot(Block b, boolean preferSilkTouch, boolean pathingCalculation) { /* @@ -186,10 +182,6 @@ possible, this lets us make pathing depend on the actual tool to be used (if aut return best; } - private double avoidanceMultiplier(Block b) { - return Baritone.settings().blocksToAvoidBreaking.value.contains(b) ? Baritone.settings().avoidBreakingMultiplier.value : 1; - } - /** * Calculate how effectively a block can be destroyed * @@ -201,6 +193,14 @@ private double getBestDestructionTime(Block b) { return calculateSpeedVsBlock(stack, b.defaultBlockState()) * avoidanceMultiplier(b); } + public boolean hasSilkTouch(ItemStack stack) { + return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; + } + + private double avoidanceMultiplier(Block b) { + return Baritone.settings().blocksToAvoidBreaking.value.contains(b) ? Baritone.settings().avoidBreakingMultiplier.value : 1; + } + /** * Calculates any modifier to breaking time based on status effects. * diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 389066cc3..ca3dad029 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -19,6 +19,7 @@ import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.format.ISchematicFormat; +import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.format.defaults.MCEditSchematic; import baritone.utils.schematic.format.defaults.SpongeSchematic; import net.minecraft.nbt.CompoundTag; @@ -65,6 +66,26 @@ public IStaticSchematic parse(InputStream input) throws IOException { throw new UnsupportedOperationException("Unsupported Version of a Sponge Schematic"); } } + }, + + /** + * The Litematica schematic specification. Commonly denoted by the ".litematic" file extension. + */ + LITEMATICA("litematic") { + @Override + public IStaticSchematic parse(InputStream input) throws IOException { + CompoundTag nbt = NbtIo.readCompressed(input); + int version = nbt.getInt("Version"); + switch (version) { + case 4: //1.12 + case 5: //1.13-1.17 + throw new UnsupportedOperationException("This litematic Version is too old."); + case 6: //1.18+ + return new LitematicaSchematic(nbt, false); + default: + throw new UnsupportedOperationException("Unsuported Version of a Litematica Schematic"); + } + } }; private final String extension; diff --git a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java index 4693ea387..98203dbca 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java @@ -18,7 +18,7 @@ package baritone.utils.schematic.format.defaults; import baritone.utils.schematic.StaticSchematic; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.datafix.fixes.ItemIdFix; @@ -62,7 +62,7 @@ public MCEditSchematic(CompoundTag schematic) { // additional is 0 through 15 inclusive since it's & 0xF above blockID |= additional[blockInd] << 8; } - Block block = Registry.BLOCK.get(ResourceLocation.tryParse(ItemIdFix.getItem(blockID))); + Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.tryParse(ItemIdFix.getItem(blockID))); // int meta = metadata[blockInd] & 0xFF; // this.states[x][z][y] = block.getStateFromMeta(meta); this.states[x][z][y] = block.defaultBlockState(); diff --git a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java index abd518bb3..c53ee781a 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java @@ -20,7 +20,7 @@ import baritone.utils.schematic.StaticSchematic; import baritone.utils.type.VarInt; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; @@ -142,7 +142,7 @@ private static SerializedBlockState getFromString(String s) { private BlockState deserialize() { if (this.blockState == null) { - Block block = Registry.BLOCK.get(this.resourceLocation); + Block block = BuiltInRegistries.BLOCK.get(this.resourceLocation); this.blockState = block.defaultBlockState(); this.properties.keySet().stream().sorted(String::compareTo).forEachOrdered(key -> { diff --git a/tweaker/build.gradle b/tweaker/build.gradle index 9afcb4383..5696fee5a 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -1,111 +1,54 @@ +/* + * 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 . + */ + import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask -architectury { - injectInjectables = false -} +//import baritone.gradle.task.TweakerJsonAssembler -loom { - mixin { - refmapTargetNamespace = "official" - defaultRefmapName = "baritone-common-refmap.json" - } +plugins { + id "com.github.johnrengelman.shadow" version "7.0.0" } -loom.mixin.useLegacyMixinAp = false; - -// ignore this jank, it's so I don't have to move the src folder, as that creates unnecessary git conflicts -sourceSets { - realmain { - java { - java { - srcDir "$rootDir/src/main/java" - } - resources { - srcDir "$rootDir/src/main/resources" - } - } - } - api { - compileClasspath += main.compileClasspath - runtimeClasspath += main.runtimeClasspath - java { - java { - srcDir "$rootDir/src/api/java" - } - resources { - srcDir "$rootDir/src/api/resources" - } - } - } - realmain { - compileClasspath += main.compileClasspath + api.output - runtimeClasspath += main.runtimeClasspath + api.output - } - test { - compileClasspath += realmain.compileClasspath + realmain.output - runtimeClasspath += realmain.runtimeClasspath + realmain.output - java { - java { - srcDir "$rootDir/src/test/java" - } - resources { - srcDir "$rootDir/src/test/resources" - } - } - } - tweaker { - compileClasspath += realmain.output + api.output + main.compileClasspath - runtimeClasspath += realmain.output + api.output + main.compileClasspath - } - main { - compileClasspath += realmain.output + api.output + tweaker.output - runtimeClasspath += realmain.output + api.output + tweaker.output - java { - java { - srcDir "$rootDir/src/launch/java" - } - resources { - srcDir "$rootDir/src/launch/resources" - } - } - } - schematica_api { - compileClasspath += realmain.compileClasspath - runtimeClasspath += realmain.runtimeClasspath - java { - java { - srcDir "$rootDir/src/schematica_api/java" - } - resources { - srcDir "$rootDir/src/schematica_api/resources" - } - } - } - realmain { - compileClasspath += schematica_api.output - runtimeClasspath += schematica_api.output +minecraft { + runs.client = { + mainClass = "net.minecraft.launchwrapper.Launch" + args.addAll(["--tweakClass", "baritone.launch.BaritoneTweaker"]) } } configurations { - transformProductionTweaker { - canBeConsumed = true - canBeResolved = false - // If you want this configuration to share the same dependencies, otherwise omit this line - extendsFrom implementation, runtimeOnly - } + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common } dependencies { - // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies - // Do NOT use other classes from fabric loader - modCompileOnly "net.fabricmc:fabric-loader:${project.fabric_version}" + implementation "org.spongepowered:mixin:0.8.5" + + // for some reason mixin isn't including these... + implementation "org.ow2.asm:asm:9.3" + implementation "org.ow2.asm:asm-tree:9.3" + implementation "org.ow2.asm:asm-commons:9.3" + implementation "org.ow2.asm:asm-util:9.3" + implementation "org.ow2.asm:asm-analysis:9.3" - // want in the pom but not to compile against as it's also provided by loom - runtimeOnly "org.spongepowered:mixin:0.8.4" - // this makes it compile with the forge tweak stuff implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' implementation('net.minecraft:launchwrapper:of-2.3') { exclude module: 'lwjgl' @@ -114,27 +57,36 @@ dependencies { compileOnly 'com.google.code.findbugs:jsr305:3.0.2' - testImplementation 'junit:junit:4.12' + // because of multiple sourcesets `common project(":")` doesn't work + for (sourceSet in rootProject.sourceSets) { + if (sourceSet == rootProject.sourceSets.test) continue + if (sourceSet == rootProject.sourceSets.schematica_api) continue + common sourceSet.output + shadowCommon sourceSet.output + } +} + +shadowJar { + configurations = [project.configurations.shadowCommon] + classifier "dev-shadow" } -javadoc { - options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error - options.linkSource true - options.encoding "UTF-8" // allow emoji in comments :^) - source = sourceSets.api.allJava - classpath += sourceSets.api.compileClasspath + +remapJar { + inputFile.set shadowJar.archiveFile + dependsOn shadowJar + classifier null } jar { classifier "dev" - from sourceSets.main.output, sourceSets.realmain.output, sourceSets.api.output, sourceSets.tweaker.output preserveFileTimestamps = false reproducibleFileOrder = true manifest { attributes( - 'MixinConfigs': 'mixins.baritone-meteor.json', + 'MixinConfigs': 'mixins.baritone.json', "MixinConnector": "baritone.launch.BaritoneMixinConnector", 'Implementation-Title': 'Baritone', @@ -143,10 +95,6 @@ jar { } } -remapJar { - targetNamespace = 'official' -} - task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' extract 'proguard-7.2.1/lib/proguard.jar' diff --git a/tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java b/tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java deleted file mode 100644 index 02e269506..000000000 --- a/tweaker/src/tweaker/java/baritone/launch/BaritoneTweaker.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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; - -import io.github.impactdevelopment.simpletweaker.SimpleTweaker; -import net.minecraft.launchwrapper.Launch; -import net.minecraft.launchwrapper.LaunchClassLoader; -import org.spongepowered.asm.launch.MixinBootstrap; -import org.spongepowered.asm.mixin.MixinEnvironment; -import org.spongepowered.asm.mixin.Mixins; -import org.spongepowered.tools.obfuscation.mcp.ObfuscationServiceMCP; - -import java.util.List; - -/** - * @author Brady - * @since 7/31/2018 - */ -public class BaritoneTweaker extends SimpleTweaker { - - @Override - public void injectIntoClassLoader(LaunchClassLoader classLoader) { - super.injectIntoClassLoader(classLoader); - - MixinBootstrap.init(); - - // noinspection unchecked - List tweakClasses = (List) Launch.blackboard.get("TweakClasses"); - - String obfuscation = ObfuscationServiceMCP.NOTCH; - if (tweakClasses.stream().anyMatch(s -> s.contains("net.minecraftforge.fml.common.launcher"))) { - obfuscation = ObfuscationServiceMCP.SEARGE; - } - - MixinEnvironment.getDefaultEnvironment().setSide(MixinEnvironment.Side.CLIENT); - MixinEnvironment.getDefaultEnvironment().setObfuscationContext(obfuscation); - - Mixins.addConfiguration("mixins.baritone-meteor.json"); - } -} diff --git a/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java b/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java deleted file mode 100644 index d652b1598..000000000 --- a/tweaker/src/tweaker/java/baritone/launch/LaunchTesting.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * 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; - -import com.google.common.base.Strings; -import com.google.gson.GsonBuilder; -import com.mojang.authlib.Agent; -import com.mojang.authlib.exceptions.AuthenticationException; -import com.mojang.authlib.properties.PropertyMap; -import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; -import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication; -import net.minecraft.launchwrapper.Launch; - -import java.io.File; -import java.lang.reflect.Field; -import java.net.Proxy; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Based on GradleStart from ForgeGradle 2.3 - * - * @author Brady - * @since 3/11/2019 - */ -public class LaunchTesting { - - public static void main(String[] args) { - Map arguments = new HashMap<>(); - - hackNatives(); - arguments.put("version", "BaritownedDeveloperEnvironment"); - arguments.put("assetIndex", System.getenv("assetIndex")); - arguments.put("assetsDir", System.getenv().getOrDefault("assetDirectory", "assets")); - arguments.put("accessToken", "FML"); - arguments.put("userProperties", "{}"); - arguments.put("tweakClass", System.getenv("tweakClass")); - String password = System.getenv("password"); - if (password != null && !password.isEmpty()) { - attemptLogin(arguments, System.getenv("username"), System.getenv("password")); - } - - List argsArray = new ArrayList<>(); - arguments.forEach((k, v) -> { - argsArray.add("--" + k); - argsArray.add(v); - }); - - Launch.main(argsArray.toArray(new String[0])); - } - - private static void hackNatives() { - String paths = System.getProperty("java.library.path"); - String nativesDir = System.getenv().get("nativesDirectory"); - - if (Strings.isNullOrEmpty(paths)) - paths = nativesDir; - else - paths += File.pathSeparator + nativesDir; - - System.setProperty("java.library.path", paths); - - // hack the classloader now. - try { - final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths"); - sysPathsField.setAccessible(true); - sysPathsField.set(null, null); - } catch (Throwable ignored) { - } - } - - private static void attemptLogin(Map argMap, String username, String password) { - YggdrasilUserAuthentication auth = (YggdrasilUserAuthentication) (new YggdrasilAuthenticationService(Proxy.NO_PROXY, "1")).createUserAuthentication(Agent.MINECRAFT); - auth.setUsername(username); - auth.setPassword(password); - - try { - auth.logIn(); - } catch (AuthenticationException var4) { - throw new RuntimeException(var4); - } - - argMap.put("accessToken", auth.getAuthenticatedToken()); - argMap.put("uuid", auth.getSelectedProfile().getId().toString().replace("-", "")); - argMap.put("username", auth.getSelectedProfile().getName()); - argMap.put("userType", auth.getUserType().getName()); - argMap.put("userProperties", (new GsonBuilder()).registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer()).create().toJson(auth.getUserProperties())); - } -} From 7b6094371403cdd6cc2cebf2cefef678b651e652 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 18 Feb 2023 15:01:48 -0800 Subject: [PATCH 489/935] v1.9.1 --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 055f0fb38..7b0d1f440 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ org.gradle.jvmargs=-Xmx4G -mod_version=1.9.0-local +mod_version=1.9.1 maven_group=baritone archives_base_name=baritone minecraft_version=1.19.3 forge_version=1.19.3-44.0.1 -fabric_version=0.14.11 \ No newline at end of file +fabric_version=0.14.11 From c1b58f8a0182ecdf10d5c56a5bec05aabbc119b5 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 18 Feb 2023 15:12:17 -0800 Subject: [PATCH 490/935] link 1.19 --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index e2c83ddec..5a59867d1 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Minecraft Minecraft Minecraft + Minecraft

@@ -64,6 +65,8 @@ If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/bar If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. +If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar)**. + This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). From b622adf3000fe4deba204f052c0ac7c530361f23 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 18 Feb 2023 15:13:15 -0800 Subject: [PATCH 491/935] ugh why was this changed since 1.18 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a59867d1..d0fd1dc83 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/bar If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. -If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar)**. +If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-fabric-api-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-forge-api-1.9.1.jar)**. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). From 814c17522a1a3dc4db0f465a4c4e3c0603e74527 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 18 Feb 2023 15:20:50 -0800 Subject: [PATCH 492/935] changed it back to the old way by manually renaming the release files --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d0fd1dc83..5a59867d1 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/bar If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. -If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-fabric-api-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-forge-api-1.9.1.jar)**. +If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar)**. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). From 1e7e504650222dc24e82379f1e81fbbb3c793e3e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 18 Feb 2023 15:37:37 -0800 Subject: [PATCH 493/935] v1.6.4 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 798b5b354..cfce46351 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.6.3' +version '1.6.4' buildscript { repositories { From 6e5fec576fe837f4af83d09b7dccfc974233c5b6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 18 Feb 2023 15:38:40 -0800 Subject: [PATCH 494/935] v1.7.3 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6e8b1ff4a..370de3110 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.jvmargs=-Xmx2048M -mod_version=1.7.2 +mod_version=1.7.3 maven_group=baritone archives_base_name=baritone From 24e047c12e807fc4ee6528f4698c560b70e5a641 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 18 Feb 2023 15:41:19 -0800 Subject: [PATCH 495/935] v1.8.4 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 77cfe8cf6..4a9d6249d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.jvmargs=-Xmx2048M -mod_version=1.8.3 +mod_version=1.8.4 maven_group=baritone archives_base_name=baritone From 787644181a20d96bbbf0e363d01ec9310fe0ac3b Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sat, 18 Feb 2023 16:59:39 -0700 Subject: [PATCH 496/935] fix dist names to match previous versions --- .../gradle/task/BaritoneGradleTask.java | 33 +++++++++++++++++-- .../baritone/gradle/task/CreateDistTask.java | 1 + .../baritone/gradle/task/ProguardTask.java | 17 ++-------- fabric/build.gradle | 8 +++-- forge/build.gradle | 8 +++-- tweaker/build.gradle | 1 - 6 files changed, 44 insertions(+), 24 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index b3bc93851..2dad551f2 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -19,6 +19,8 @@ import org.gradle.api.DefaultTask; import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Optional; +import org.gradle.api.tasks.TaskAction; import java.io.File; import java.io.IOException; @@ -49,14 +51,35 @@ class BaritoneGradleTask extends DefaultTask { ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; protected String artifactName, artifactVersion; - protected final Path + protected Path artifactPath, artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, // these are different for forge builds proguardOut; + + @Input + @Optional + protected String compType = null; + + public String getCompType() { + return compType; + } + + public void setCompType(String compType) { + this.compType = compType; + } + + public BaritoneGradleTask() { - this.artifactName = getProject().getProperties().get("archivesBaseName").toString(); - this.artifactVersion = getProject().getVersion().toString(); + this.artifactName = getProject().getRootProject().getProperties().get("archives_base_name").toString(); + } + + public void doFirst() { + if (compType != null) { + this.artifactVersion = compType + "-" + getProject().getVersion(); + } else { + this.artifactVersion = getProject().getVersion().toString(); + } this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); @@ -99,4 +122,8 @@ protected Path getTemporaryFile(String file) { protected Path getBuildFile(String file) { return getRelativeFile("libs/" + file); } + + protected String addCompTypeFirst(String string) { + return compType == null ? string : compType + "-" + string; + } } diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index c4332c8b5..48cd0a72a 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -41,6 +41,7 @@ public class CreateDistTask extends BaritoneGradleTask { @TaskAction protected void exec() throws Exception { + super.doFirst(); super.verifyArtifacts(); // Define the distribution file paths diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 37270b607..5d80a65ea 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -63,15 +63,9 @@ public String getExtract() { return extract; } - @Input - private String compType; - - public String getCompType() { - return compType; - } - @TaskAction protected void exec() throws Exception { + super.doFirst(); super.verifyArtifacts(); // "Haha brady why don't you make separate tasks" @@ -253,7 +247,7 @@ private void generateConfigs() throws Exception { Files.createDirectories(this.getRootRelativeFile(PROGUARD_MAPPING_DIR)); List api = new ArrayList<>(template); - api.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + compType + "-api.txt")); + api.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + addCompTypeFirst("api.txt"))); // API config doesn't require any changes from the changes that we made to the template Files.write(getTemporaryFile(compType+PROGUARD_API_CONFIG), api); @@ -261,7 +255,7 @@ private void generateConfigs() throws Exception { // For the Standalone config, don't keep the API package List standalone = new ArrayList<>(template); standalone.removeIf(s -> s.contains("# this is the keep api")); - standalone.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + compType + "-standalone.txt")); + standalone.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + addCompTypeFirst("standalone.txt"))); Files.write(getTemporaryFile(compType+PROGUARD_STANDALONE_CONFIG), standalone); } @@ -294,11 +288,6 @@ public void setUrl(String url) { public void setExtract(String extract) { this.extract = extract; } - - public void setCompType(String compType) { - this.compType = compType; - } - private void runProguard(Path config) throws Exception { // Delete the existing proguard output file. Proguard probably handles this already, but why not do it ourselves if (Files.exists(this.proguardOut)) { diff --git a/fabric/build.gradle b/fabric/build.gradle index b1e722126..8adf7571b 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -22,7 +22,7 @@ plugins { id "com.github.johnrengelman.shadow" version "7.0.0" } -archivesBaseName = archivesBaseName + "-" + project.name +archivesBaseName = archivesBaseName + "-fabric" minecraft { fabric() @@ -79,10 +79,12 @@ components.java { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' extract 'proguard-7.2.1/lib/proguard.jar' - compType "FABRIC" + compType "fabric" } -task createDist(type: CreateDistTask, dependsOn: proguard) +task createDist(type: CreateDistTask, dependsOn: proguard) { + compType "fabric" +} build.finalizedBy(createDist) diff --git a/forge/build.gradle b/forge/build.gradle index da2c4e570..bac8ca54a 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -22,7 +22,7 @@ plugins { id "com.github.johnrengelman.shadow" version "7.0.0" } -archivesBaseName = archivesBaseName + "-" + project.name +archivesBaseName = archivesBaseName + "-forge" minecraft { forge { @@ -98,10 +98,12 @@ components.java { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' extract 'proguard-7.2.1/lib/proguard.jar' - compType "FORGE" + compType "forge" } -task createDist(type: CreateDistTask, dependsOn: proguard) +task createDist(type: CreateDistTask, dependsOn: proguard) { + compType "forge" +} build.finalizedBy(createDist) diff --git a/tweaker/build.gradle b/tweaker/build.gradle index 3fc0ab3bd..ce623af6c 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -97,7 +97,6 @@ jar { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' extract 'proguard-7.2.1/lib/proguard.jar' - compType "OFFICIAL" } task createDist(type: CreateDistTask, dependsOn: proguard) From 174bdd230742486dd858be2032255f59724a0e6e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 18 Feb 2023 16:42:05 -0800 Subject: [PATCH 497/935] overhaul readme --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 5a59867d1..0a511013b 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Minecraft Minecraft Minecraft - Minecraft + Minecraft Minecraft Minecraft

@@ -49,23 +49,23 @@ A Minecraft pathfinder bot. -[**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) - Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. -[Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) - -The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to -install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click -[here](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. +[**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) -For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. +**Quick download links:** -If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**. +| Forge | Fabric | +|---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| +| [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar) | | +| [1.16.5 Forge](https://github.com/cabaletta/baritone/releases/download/v1.6.4/baritone-api-forge-1.6.4.jar) | [1.16.5 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.6.4/baritone-api-fabric-1.6.4.jar) | +| [1.17.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-forge-1.7.3.jar) | [1.17.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-fabric-1.7.3.jar) | +| [1.18.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-forge-1.8.4.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-fabric-1.8.4.jar) | +| [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) | -If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. +**How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) -If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar)**. +For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). From 9efc5122538b63db9cf57e1a83048a4882169c0b Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sun, 19 Feb 2023 19:17:11 +0100 Subject: [PATCH 498/935] Make tab completion usable Now behaves almost identical to vanilla tab completion --- .../mixins/MixinCommandSuggestionHelper.java | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index 00497ab6b..5603246d4 100644 --- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -19,6 +19,7 @@ import baritone.api.BaritoneAPI; import baritone.api.event.events.TabCompleteEvent; +import com.mojang.brigadier.ParseResults; import com.mojang.brigadier.context.StringRange; import com.mojang.brigadier.suggestion.Suggestion; import com.mojang.brigadier.suggestion.Suggestions; @@ -51,9 +52,18 @@ public class MixinCommandSuggestionHelper { @Final private List exceptionList; + @Shadow + private ParseResults parseResults; + @Shadow private CompletableFuture suggestionsFuture; + @Shadow + private CommandSuggestionHelper.Suggestions suggestions; + + @Shadow + boolean isApplyingSuggestion; + @Inject( method = "init", at = @At("HEAD"), @@ -74,27 +84,32 @@ private void preUpdateSuggestion(CallbackInfo ci) { if (event.completions != null) { ci.cancel(); + this.parseResults = null; // stop coloring + + if (this.isApplyingSuggestion) { // Supress suggestions update when cycling suggestions. + return; + } + + this.inputField.setSuggestion(null); // clear old suggestions + this.suggestions = null; // TODO: Support populating the command usage this.exceptionList.clear(); if (event.completions.length == 0) { this.suggestionsFuture = Suggestions.empty(); } else { - int offset = this.inputField.getText().endsWith(" ") - ? this.inputField.getCursorPosition() - : this.inputField.getText().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes + StringRange range = StringRange.between(prefix.lastIndexOf(" ") + 1, prefix.length()); // if there is no space this starts at 0 List suggestionList = Stream.of(event.completions) - .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s)) + .map(s -> new Suggestion(range, s)) .collect(Collectors.toList()); - Suggestions suggestions = new Suggestions( - StringRange.between(offset, offset + suggestionList.stream().mapToInt(s -> s.getText().length()).max().orElse(0)), - suggestionList); + Suggestions suggestions = new Suggestions(range, suggestionList); this.suggestionsFuture = new CompletableFuture<>(); this.suggestionsFuture.complete(suggestions); } + ((CommandSuggestionHelper) (Object) this).updateSuggestions(true); // actually populate the suggestions list from the suggestions future } } } From f1ead19b6e0ea41e7a2343d56b4dcab417140725 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 28 Feb 2023 23:44:33 -0800 Subject: [PATCH 499/935] option to only move inventory when stationary --- src/api/java/baritone/api/Settings.java | 10 +++ src/main/java/baritone/Baritone.java | 6 ++ .../baritone/behavior/InventoryBehavior.java | 38 ++++++-- .../java/baritone/process/BuilderProcess.java | 5 +- .../process/InventoryPauserProcess.java | 90 +++++++++++++++++++ 5 files changed, 141 insertions(+), 8 deletions(-) create mode 100644 src/main/java/baritone/process/InventoryPauserProcess.java diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 9e3e6a385..38661d8be 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -69,6 +69,16 @@ public final class Settings { */ public final Setting allowInventory = new Setting<>(false); + /** + * Wait this many ticks between InventoryBehavior moving inventory items + */ + public final Setting ticksBetweenInventoryMoves = new Setting<>(1); + + /** + * Come to a halt before doing any inventory moves. Intended for anticheat such as 2b2t + */ + public final Setting inventoryMoveOnlyIfStationary = new Setting<>(false); + /** * Disable baritone's auto-tool at runtime, but still assume that another mod will provide auto tool functionality *

diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 71c2c455a..61db54211 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -80,6 +80,7 @@ public class Baritone implements IBaritone { private ExploreProcess exploreProcess; private BackfillProcess backfillProcess; private FarmProcess farmProcess; + private InventoryPauserProcess inventoryPauserProcess; private PathingControlManager pathingControlManager; private SelectionManager selectionManager; @@ -115,6 +116,7 @@ public class Baritone implements IBaritone { this.pathingControlManager.registerProcess(exploreProcess = new ExploreProcess(this)); this.pathingControlManager.registerProcess(backfillProcess = new BackfillProcess(this)); this.pathingControlManager.registerProcess(farmProcess = new FarmProcess(this)); + this.pathingControlManager.registerProcess(inventoryPauserProcess = new InventoryPauserProcess(this)); } this.worldProvider = new WorldProvider(); @@ -183,6 +185,10 @@ public FarmProcess getFarmProcess() { return this.farmProcess; } + public InventoryPauserProcess getInventoryPauserProcess() { + return this.inventoryPauserProcess; + } + @Override public PathingBehavior getPathingBehavior() { return this.pathingBehavior; diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 3dce5c0b5..93dc200cc 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -19,6 +19,7 @@ import baritone.Baritone; import baritone.api.event.events.TickEvent; +import baritone.api.utils.Helper; import baritone.utils.ToolSet; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -34,7 +35,10 @@ import java.util.Random; import java.util.function.Predicate; -public final class InventoryBehavior extends Behavior { +public final class InventoryBehavior extends Behavior implements Helper { + + int ticksSinceLastInventoryMove; + int[] lastTickRequestedMove; // not everything asks every tick, so remember the request while coming to a halt public InventoryBehavior(Baritone baritone) { super(baritone); @@ -52,20 +56,28 @@ public void onTick(TickEvent event) { // we have a crafting table or a chest or something open return; } + ticksSinceLastInventoryMove++; if (firstValidThrowaway() >= 9) { // aka there are none on the hotbar, but there are some in main inventory - swapWithHotBar(firstValidThrowaway(), 8); + requestSwapWithHotBar(firstValidThrowaway(), 8); } int pick = bestToolAgainst(Blocks.STONE, ItemPickaxe.class); if (pick >= 9) { - swapWithHotBar(pick, 0); + requestSwapWithHotBar(pick, 0); + } + if (lastTickRequestedMove != null) { + logDebug("Remembering to move " + lastTickRequestedMove[0] + " " + lastTickRequestedMove[1] + " from a previous tick"); + requestSwapWithHotBar(lastTickRequestedMove[0], lastTickRequestedMove[1]); } } - public void attemptToPutOnHotbar(int inMainInvy, Predicate disallowedHotbar) { + public boolean attemptToPutOnHotbar(int inMainInvy, Predicate disallowedHotbar) { OptionalInt destination = getTempHotbarSlot(disallowedHotbar); if (destination.isPresent()) { - swapWithHotBar(inMainInvy, destination.getAsInt()); + if (!requestSwapWithHotBar(inMainInvy, destination.getAsInt())) { + return false; + } } + return true; } public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { @@ -89,8 +101,20 @@ public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { return OptionalInt.of(candidates.get(new Random().nextInt(candidates.size()))); } - private void swapWithHotBar(int inInventory, int inHotbar) { + private boolean requestSwapWithHotBar(int inInventory, int inHotbar) { + lastTickRequestedMove = new int[]{inInventory, inHotbar}; + if (ticksSinceLastInventoryMove < Baritone.settings().ticksBetweenInventoryMoves.value) { + logDebug("Inventory move requested but delaying " + ticksSinceLastInventoryMove + " " + Baritone.settings().ticksBetweenInventoryMoves.value); + return false; + } + if (Baritone.settings().inventoryMoveOnlyIfStationary.value && !baritone.getInventoryPauserProcess().stationaryForInventoryMove()) { + logDebug("Inventory move requested but delaying until stationary"); + return false; + } ctx.playerController().windowClick(ctx.player().inventoryContainer.windowId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); + ticksSinceLastInventoryMove = 0; + lastTickRequestedMove = null; + return true; } private int firstValidThrowaway() { // TODO offhand idk @@ -192,8 +216,8 @@ public boolean throwaway(boolean select, Predicate desired, b if (allowInventory) { for (int i = 9; i < 36; i++) { if (desired.test(inv.get(i))) { - swapWithHotBar(i, 7); if (select) { + requestSwapWithHotBar(i, 7); p.inventory.currentItem = 7; } return true; diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 85be6516a..c7868a4a0 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -562,7 +562,10 @@ public int lengthZ() { for (int i = 9; i < 36; i++) { for (IBlockState desired : noValidHotbarOption) { if (valid(approxPlaceable.get(i), desired, true)) { - baritone.getInventoryBehavior().attemptToPutOnHotbar(i, usefulSlots::contains); + if (!baritone.getInventoryBehavior().attemptToPutOnHotbar(i, usefulSlots::contains)) { + // awaiting inventory move, so pause + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } break outer; } } diff --git a/src/main/java/baritone/process/InventoryPauserProcess.java b/src/main/java/baritone/process/InventoryPauserProcess.java new file mode 100644 index 000000000..ab210532b --- /dev/null +++ b/src/main/java/baritone/process/InventoryPauserProcess.java @@ -0,0 +1,90 @@ +/* + * 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.process; + +import baritone.Baritone; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.utils.BaritoneProcessHelper; + +public class InventoryPauserProcess extends BaritoneProcessHelper { + + boolean pauseRequestedLastTick; + boolean safeToCancelLastTick; + int ticksOfStationary; + + public InventoryPauserProcess(Baritone baritone) { + super(baritone); + } + + @Override + public boolean isActive() { + if (mc.player == null || mc.world == null) { + return false; + } + return true; + } + + private double motion() { + return Math.sqrt(mc.player.motionX * mc.player.motionX + mc.player.motionZ * mc.player.motionZ); + } + + private boolean stationaryNow() { + return motion() < 0.00001; + } + + public boolean stationaryForInventoryMove() { + pauseRequestedLastTick = true; + return safeToCancelLastTick && ticksOfStationary > 1; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + //logDebug(pauseRequestedLastTick + " " + safeToCancelLastTick + " " + ticksOfStationary); + safeToCancelLastTick = isSafeToCancel; + if (pauseRequestedLastTick) { + pauseRequestedLastTick = false; + if (stationaryNow()) { + ticksOfStationary++; + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + ticksOfStationary = 0; + return new PathingCommand(null, PathingCommandType.DEFER); + } + + @Override + public void onLostControl() { + + } + + @Override + public String displayName0() { + return "inventory pauser"; + } + + @Override + public double priority() { + return 5.1; // slightly higher than backfill + } + + @Override + public boolean isTemporary() { + return true; + } +} From c9d7a5bea61ae28aeeb5e01e7520217fd487b371 Mon Sep 17 00:00:00 2001 From: leijurv Date: Tue, 28 Feb 2023 23:56:34 -0800 Subject: [PATCH 500/935] kami blue to lambda --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0a511013b..0aec1468d 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@

Impact integration - KAMI Blue integration + Lambda integration ForgeHax integration Aristois add-on integration rootNET integration From 790a4f6769f462dd1fb92d64b2f5855f10c86dce Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 1 Mar 2023 00:25:30 -0800 Subject: [PATCH 501/935] command to load settings from a specific file --- src/api/java/baritone/api/BaritoneAPI.java | 2 +- .../java/baritone/api/utils/SettingsUtil.java | 22 +++++++++++-------- .../baritone/command/defaults/SetCommand.java | 18 +++++++++++++-- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/api/java/baritone/api/BaritoneAPI.java b/src/api/java/baritone/api/BaritoneAPI.java index 53937bd80..935bf9e4f 100644 --- a/src/api/java/baritone/api/BaritoneAPI.java +++ b/src/api/java/baritone/api/BaritoneAPI.java @@ -35,7 +35,7 @@ public final class BaritoneAPI { static { settings = new Settings(); - SettingsUtil.readAndApply(settings); + SettingsUtil.readAndApply(settings, SettingsUtil.SETTINGS_DEFAULT_NAME); ServiceLoader baritoneLoader = ServiceLoader.load(IBaritoneProvider.class); Iterator instances = baritoneLoader.iterator(); diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index f47f515a8..50e2363a6 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -48,7 +48,7 @@ public class SettingsUtil { - private static final Path SETTINGS_PATH = getMinecraft().gameDir.toPath().resolve("baritone").resolve("settings.txt"); + public static final String SETTINGS_DEFAULT_NAME = "settings.txt"; private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?.+)"); // key and value split by the first space private static final String[] JAVA_ONLY_SETTINGS = {"logger", "notifier", "toaster"}; @@ -68,12 +68,12 @@ private static void forEachLine(Path file, Consumer consumer) throws IOE } } - public static void readAndApply(Settings settings) { + public static void readAndApply(Settings settings, String settingsName) { try { - forEachLine(SETTINGS_PATH, line -> { + forEachLine(settingsByName(settingsName), line -> { Matcher matcher = SETTING_PATTERN.matcher(line); if (!matcher.matches()) { - System.out.println("Invalid syntax in setting file: " + line); + Helper.HELPER.logDirect("Invalid syntax in setting file: " + line); return; } @@ -82,29 +82,33 @@ public static void readAndApply(Settings settings) { try { parseAndApply(settings, settingName, settingValue); } catch (Exception ex) { - System.out.println("Unable to parse line " + line); + Helper.HELPER.logDirect("Unable to parse line " + line); ex.printStackTrace(); } }); } catch (NoSuchFileException ignored) { - System.out.println("Baritone settings file not found, resetting."); + Helper.HELPER.logDirect("Baritone settings file not found, resetting."); } catch (Exception ex) { - System.out.println("Exception while reading Baritone settings, some settings may be reset to default values!"); + Helper.HELPER.logDirect("Exception while reading Baritone settings, some settings may be reset to default values!"); ex.printStackTrace(); } } public static synchronized void save(Settings settings) { - try (BufferedWriter out = Files.newBufferedWriter(SETTINGS_PATH)) { + try (BufferedWriter out = Files.newBufferedWriter(settingsByName(SETTINGS_DEFAULT_NAME))) { for (Settings.Setting setting : modifiedSettings(settings)) { out.write(settingToString(setting) + "\n"); } } catch (Exception ex) { - System.out.println("Exception thrown while saving Baritone settings!"); + Helper.HELPER.logDirect("Exception thrown while saving Baritone settings!"); ex.printStackTrace(); } } + private static Path settingsByName(String name) { + return getMinecraft().gameDir.toPath().resolve("baritone").resolve(name); + } + public static List modifiedSettings(Settings settings) { List modified = new ArrayList<>(); for (Settings.Setting setting : settings.allSettings) { diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index fd9bb0457..255dd6b28 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -57,6 +57,18 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect("Settings saved"); return; } + if (Arrays.asList("load", "ld").contains(arg)) { + String file = SETTINGS_DEFAULT_NAME; + if (args.hasAny()) { + file = args.getString(); + } + // reset to defaults + SettingsUtil.modifiedSettings(Baritone.settings()).forEach(Settings.Setting::reset); + // then load from disk + SettingsUtil.readAndApply(Baritone.settings(), file); + logDirect("Settings reloaded from " + file); + return; + } boolean viewModified = Arrays.asList("m", "mod", "modified").contains(arg); boolean viewAll = Arrays.asList("all", "l", "list").contains(arg); boolean paginate = viewModified || viewAll; @@ -228,7 +240,7 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman return new TabCompleteHelper() .addSettings() .sortAlphabetically() - .prepend("list", "modified", "reset", "toggle", "save") + .prepend("list", "modified", "reset", "toggle", "save", "load") .filterPrefix(arg) .stream(); } @@ -255,7 +267,9 @@ public List getLongDesc() { "> set reset all - Reset ALL SETTINGS to their defaults", "> set reset - Reset a setting to its default", "> set toggle - Toggle a boolean setting", - "> set save - Save all settings (this is automatic tho)" + "> set save - Save all settings (this is automatic tho)", + "> set load - Load settings from settings.txt", + "> set load [filename] - Load settings from another file in your minecraft/baritone" ); } } From fe64f1fd8a797cdbd9626696eda2fcf7578f930c Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 9 Mar 2023 10:17:48 -0700 Subject: [PATCH 502/935] 1.19.4-rc1 --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- settings.gradle | 4 ++-- src/main/java/baritone/process/FarmProcess.java | 3 ++- src/main/java/baritone/process/FollowProcess.java | 3 ++- src/main/java/baritone/utils/GuiClick.java | 4 ++-- src/main/java/baritone/utils/IRenderer.java | 5 +++-- 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 62a815d0f..69fcb4115 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.3" + "minecraft": "1.19.4-rc.1" } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 7b0d1f440..d99b8caf0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.1 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.3 +minecraft_version=1.19.4-rc1 forge_version=1.19.3-44.0.1 fabric_version=0.14.11 diff --git a/settings.gradle b/settings.gradle index 7809c35c6..58b6e203d 100755 --- a/settings.gradle +++ b/settings.gradle @@ -43,8 +43,8 @@ rootProject.name = 'baritone' include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { - System.setProperty("Baritone.enabled_platforms", "fabric,forge") -// System.setProperty("Baritone.enabled_platforms", "fabric") +// System.setProperty("Baritone.enabled_platforms", "fabric,forge") + System.setProperty("Baritone.enabled_platforms", "fabric") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { include(platform) diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 13112ca68..512951753 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -24,6 +24,7 @@ import baritone.api.process.IFarmProcess; import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.RayTraceUtils; import baritone.api.utils.Rotation; import baritone.api.utils.RotationUtils; @@ -306,7 +307,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol - goalz.add(new GoalBlock(new BlockPos(entity.position().x, entity.position().y + 0.1, entity.position().z))); + goalz.add(new GoalBlock(new BetterBlockPos(entity.position().x, entity.position().y + 0.1, entity.position().z))); } } } diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 085b17ae5..b123216a6 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -25,6 +25,7 @@ import baritone.api.process.IFollowProcess; import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; +import baritone.api.utils.BetterBlockPos; import baritone.utils.BaritoneProcessHelper; import java.util.List; import java.util.function.Predicate; @@ -59,7 +60,7 @@ private Goal towards(Entity following) { pos = following.blockPosition(); } else { GoalXZ g = GoalXZ.fromDirection(following.position(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); - pos = new BlockPos(g.getX(), following.position().y, g.getZ()); + pos = new BetterBlockPos(g.getX(), following.position().y, g.getZ()); } return new GoalNear(pos, Baritone.settings().followRadius.value); } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index b3b2dc500..5c7832b71 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -27,6 +27,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -133,7 +134,7 @@ public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { //TODO: check IRenderer.glColor(Color.RED, 0.4F); RenderSystem.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); - RenderSystem.disableTexture(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); RenderSystem.depthMask(false); RenderSystem.disableDepthTest(); BetterBlockPos a = new BetterBlockPos(currentMouseOver); @@ -142,7 +143,6 @@ public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { RenderSystem.enableDepthTest(); RenderSystem.depthMask(true); - RenderSystem.enableTexture(); RenderSystem.disableBlend(); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 380fbd9e0..cfd38a393 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -24,6 +24,8 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; import java.awt.*; + +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.world.phys.AABB; import org.joml.Matrix4f; @@ -48,10 +50,10 @@ static void glColor(Color color, float alpha) { static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { RenderSystem.enableBlend(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); glColor(color, alpha); RenderSystem.lineWidth(lineWidth); - RenderSystem.disableTexture(); RenderSystem.depthMask(false); if (ignoreDepth) { @@ -69,7 +71,6 @@ static void endLines(boolean ignoredDepth) { } RenderSystem.depthMask(true); - RenderSystem.enableTexture(); RenderSystem.disableBlend(); } From 6698505dd83b239f67d5ca459196d011c852ed49 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 13 Mar 2023 15:31:18 -0700 Subject: [PATCH 503/935] make wp c not throw npe on invalid tag name --- .../java/baritone/command/defaults/WaypointsCommand.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index cf420e90a..3016745e1 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -149,7 +149,11 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect(component); } else if (action == Action.CLEAR) { args.requireMax(1); - IWaypoint.Tag tag = IWaypoint.Tag.getByName(args.getString()); + String name = args.getString(); + IWaypoint.Tag tag = IWaypoint.Tag.getByName(name); + if (tag == null) { + throw new CommandInvalidStateException("Invalid tag, \"" + name + "\""); + } IWaypoint[] waypoints = ForWaypoints.getWaypointsByTag(this.baritone, tag); for (IWaypoint waypoint : waypoints) { ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint); From a1e797ab5325ebe47a2307049b4e83e0559f96f3 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 13 Mar 2023 15:47:54 -0700 Subject: [PATCH 504/935] rc3 --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 69fcb4115..17afc6c08 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.4-rc.1" + "minecraft": "1.19.4-rc.3" } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index d99b8caf0..7d7c5c7f2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.1 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.4-rc1 +minecraft_version=1.19.4-rc3 forge_version=1.19.3-44.0.1 fabric_version=0.14.11 From 63e3dfc9b899170167b48cc0720b06f68ed0ae53 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Mar 2023 18:20:27 -0700 Subject: [PATCH 505/935] 1.19.4 --- fabric/src/main/resources/fabric.mod.json | 4 ++-- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 17afc6c08..0dbbe1078 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.4-rc.3" + "minecraft": "1.19.4" } -} \ No newline at end of file +} diff --git a/gradle.properties b/gradle.properties index 7d7c5c7f2..4c56aa1d3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.1 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.4-rc3 +minecraft_version=1.19.4 forge_version=1.19.3-44.0.1 fabric_version=0.14.11 From d1a55c43e1896c3a7c7d0914e6b9a189caa01e74 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Mar 2023 18:26:48 -0700 Subject: [PATCH 506/935] v1.9.2 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4c56aa1d3..73cacce7d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.jvmargs=-Xmx4G -mod_version=1.9.1 +mod_version=1.9.2 maven_group=baritone archives_base_name=baritone From 3200d976d732a9920a5c650f450265e95ecc3ef0 Mon Sep 17 00:00:00 2001 From: leijurv Date: Tue, 14 Mar 2023 18:35:15 -0700 Subject: [PATCH 507/935] 1.19.4 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0aec1468d..3cf5402e9 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | [1.17.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-forge-1.7.3.jar) | [1.17.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-fabric-1.7.3.jar) | | [1.18.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-forge-1.8.4.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-fabric-1.8.4.jar) | | [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) | +| | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.2/baritone-api-fabric-1.9.2.jar) | **How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) From ff1732011ed8cc9642a3d92bfe62e31d10a51708 Mon Sep 17 00:00:00 2001 From: leijurv Date: Mon, 20 Mar 2023 22:07:51 -0700 Subject: [PATCH 508/935] vid is outdated and doesn't get to the point fast enough, so let's move it lower down --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3cf5402e9..7a35e1199 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ A Minecraft pathfinder bot. -Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. +Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. [**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) @@ -66,7 +66,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s **How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) -For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. +For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#6313 on Baritone which I recommend. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). From b53be74ed7d5c78764456a223e8b979803f2aa26 Mon Sep 17 00:00:00 2001 From: MarvionKirito Date: Fri, 31 Mar 2023 22:56:46 +0800 Subject: [PATCH 509/935] Updated to 1.19.4 --- .github/workflows/gradle_build.yml | 6 +- .github/workflows/run_tests.yml | 6 +- README.md | 11 +- build.gradle | 1 - .../gradle/task/BaritoneGradleTask.java | 32 +- .../baritone/gradle/task/CreateDistTask.java | 1 + .../baritone/gradle/task/ProguardTask.java | 78 +- fabric/build.gradle | 10 +- .../baritone/launch/FabricMixinPlugin.java | 71 ++ fabric/src/main/resources/fabric.mod.json | 5 +- forge/build.gradle | 8 +- forge/src/main/resources/pack.mcmeta | 6 + gradle.properties | 6 +- gradle/wrapper/gradle-wrapper.properties | 3 +- jitpack.yml | 5 +- scripts/proguard.pro | 2 +- settings.gradle | 2 +- src/api/java/baritone/api/Settings.java | 15 + .../command/datatypes/RelativeCoordinate.java | 11 +- .../api/command/registry/Registry.java | 2 +- .../baritone/api/process/IBuilderProcess.java | 26 +- .../api/schematic/SubstituteSchematic.java | 1 + .../baritone/api/utils/BlockOptionalMeta.java | 36 +- .../baritone/api/utils/RandomSpotNearby.java | 40 - .../java/baritone/api/utils/SettingsUtil.java | 46 +- .../baritone/launch/mixins/MixinScreen.java | 1 - .../resources/mixins.baritone-meteor.json | 1 - .../baritone/altoclef/AltoClefSettings.java | 56 +- .../baritone/behavior/InventoryBehavior.java | 3 +- .../baritone/behavior/PathingBehavior.java | 1 + src/main/java/baritone/cache/ChunkPacker.java | 3 +- .../java/baritone/cache/WorldProvider.java | 42 +- .../defaults/ExecutionControlCommands.java | 1 + .../command/defaults/FindCommand.java | 3 +- .../command/defaults/LitematicaCommand.java | 71 ++ .../baritone/command/defaults/SetCommand.java | 3 +- .../pathing/movement/CalculationContext.java | 7 + .../pathing/movement/MovementHelper.java | 349 ++++++-- .../movement/movements/MovementAscend.java | 4 +- .../movement/movements/MovementDescend.java | 69 +- .../movement/movements/MovementDiagonal.java | 145 ++-- .../movement/movements/MovementDownward.java | 2 +- .../movement/movements/MovementFall.java | 12 +- .../movement/movements/MovementParkour.java | 29 +- .../movement/movements/MovementPillar.java | 6 +- .../movement/movements/MovementTraverse.java | 27 +- .../baritone/pathing/path/PathExecutor.java | 100 ++- .../pathing/precompute/PrecomputedData.java | 117 +++ .../baritone/pathing/precompute/Ternary.java | 22 + .../java/baritone/process/BuilderProcess.java | 767 +++++++++--------- .../java/baritone/process/FarmProcess.java | 3 +- .../java/baritone/process/FollowProcess.java | 3 +- .../java/baritone/process/MineProcess.java | 276 ++++--- .../baritone/utils/BlockStateInterface.java | 5 +- src/main/java/baritone/utils/GuiClick.java | 4 +- src/main/java/baritone/utils/IRenderer.java | 4 +- src/main/java/baritone/utils/ToolSet.java | 8 +- src/main/java/baritone/utils/Trail.java | 180 ---- .../format/defaults/LitematicaSchematic.java | 348 ++++++++ .../litematica/LitematicaHelper.java | 215 +++++ .../fi/dy/masa/litematica/Litematica.java | 21 + .../dy/masa/litematica/data/DataManager.java | 33 + .../placement/SchematicPlacement.java | 35 + .../placement/SchematicPlacementManager.java | 31 + .../placement/SchematicPlacementUnloaded.java | 43 + tweaker/build.gradle | 2 - .../java/baritone/launch/BaritoneTweaker.java | 55 ++ .../java/baritone/launch/LaunchTesting.java | 105 +++ 68 files changed, 2456 insertions(+), 1186 deletions(-) create mode 100644 fabric/src/main/java/baritone/launch/FabricMixinPlugin.java create mode 100644 forge/src/main/resources/pack.mcmeta delete mode 100644 src/api/java/baritone/api/utils/RandomSpotNearby.java create mode 100644 src/main/java/baritone/command/defaults/LitematicaCommand.java create mode 100644 src/main/java/baritone/pathing/precompute/PrecomputedData.java create mode 100644 src/main/java/baritone/pathing/precompute/Ternary.java delete mode 100644 src/main/java/baritone/utils/Trail.java create mode 100644 src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java create mode 100644 src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java create mode 100644 src/schematica_api/java/fi/dy/masa/litematica/Litematica.java create mode 100644 src/schematica_api/java/fi/dy/masa/litematica/data/DataManager.java create mode 100644 src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java create mode 100644 src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java create mode 100644 src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java create mode 100644 tweaker/src/main/java/baritone/launch/BaritoneTweaker.java create mode 100644 tweaker/src/main/java/baritone/launch/LaunchTesting.java diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 0d185a6d5..8ab9ee0c4 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -21,7 +21,7 @@ jobs: uses: actions/setup-java@v3 with: java-version: '17' - distribution: 'adopt' + distribution: 'temurin' cache: gradle - name: Grant execute permission for gradlew @@ -31,13 +31,13 @@ jobs: run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)" - name: Archive Artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: Artifacts path: dist/ - name: Archive mapping.txt - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: Mappings path: mapping/ diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 16c1126bd..1c10740bc 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -11,12 +11,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up JDK 17 - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: java-version: '17' - distribution: 'adopt' + distribution: 'temurin' - name: Grant execute permission for gradlew run: chmod +x gradlew diff --git a/README.md b/README.md index f5652e3bd..d723db1d5 100644 --- a/README.md +++ b/README.md @@ -57,11 +57,12 @@ recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) v [Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The -second easiest way (for 1.12.2 only) is to install the v1.2.* `api-forge` jar -from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just -click [here](https://github.com/cabaletta/baritone/releases/download/v1.2.15/baritone-api-forge-1.2.15.jar)**. -Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on -how to use it. +second easiest way (for 1.12.2 only) is to +install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, +just click +[here](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar)**. Otherwise, +see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use +it. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` diff --git a/build.gradle b/build.gradle index 377386a76..3819b5ede 100755 --- a/build.gradle +++ b/build.gradle @@ -119,7 +119,6 @@ sourceSets { } dependencies { - implementation 'org.jetbrains:annotations:23.0.0' testImplementation 'junit:junit:4.13.2' } diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index be8c98aed..eb3151d59 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -18,6 +18,8 @@ package baritone.gradle.task; import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Optional; import java.io.File; import java.io.IOException; @@ -48,14 +50,34 @@ class BaritoneGradleTask extends DefaultTask { ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; protected String artifactName, artifactVersion; - protected final Path + protected Path artifactPath, artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, // these are different for forge builds proguardOut; + + @Input + @Optional + protected String compType = null; + public BaritoneGradleTask() { - this.artifactName = getProject().getProperties().get("archivesBaseName").toString(); - this.artifactVersion = getProject().getVersion().toString(); + this.artifactName = getProject().getRootProject().getProperties().get("archives_base_name").toString(); + } + + public String getCompType() { + return compType; + } + + public void setCompType(String compType) { + this.compType = compType; + } + + public void doFirst() { + if (compType != null) { + this.artifactVersion = compType + "-" + getProject().getVersion(); + } else { + this.artifactVersion = getProject().getVersion().toString(); + } this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); @@ -98,4 +120,8 @@ protected Path getTemporaryFile(String file) { protected Path getBuildFile(String file) { return getRelativeFile("libs/" + file); } + + protected String addCompTypeFirst(String string) { + return compType == null ? string : compType + "-" + string; + } } diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index e201512dd..02397d3c5 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -38,6 +38,7 @@ public class CreateDistTask extends BaritoneGradleTask { @TaskAction protected void exec() throws Exception { + super.doFirst(); super.verifyArtifacts(); // Define the distribution file paths diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 5dbdd2191..a940b9d72 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -59,15 +59,25 @@ public String getExtract() { return extract; } - @Input - private String compType; + public String getUrl() { + return url; + } - public String getCompType() { - return compType; + public void setUrl(String url) { + this.url = url; + } + + private File getMcJar() { + return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdFallbackNamespace()).toFile(); + } + + private boolean isMcJar(File f) { + return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f); } @TaskAction protected void exec() throws Exception { + super.doFirst(); super.verifyArtifacts(); // "Haha brady why don't you make separate tasks" @@ -80,22 +90,6 @@ protected void exec() throws Exception { cleanup(); } - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - private File getMcJar() { - return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdFallbackNamespace()).toFile(); - } - - private boolean isMcJar(File f) { - return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f); - } - private void downloadProguard() throws Exception { Path proguardZip = getTemporaryFile(PROGUARD_ZIP); if (!Files.exists(proguardZip)) { @@ -215,24 +209,13 @@ private void processArtifact() throws Exception { Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString()); } - private Stream acquireDependencies() { - return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() - .stream() - .filter(File::isFile); - } - - private void proguardApi() throws Exception { - runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); - } - private void generateConfigs() throws Exception { Files.copy(getRootRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), REPLACE_EXISTING); // Setup the template that will be used to derive the API and Standalone configs List template = Files.readAllLines(getTemporaryFile(PROGUARD_CONFIG_DEST)); - template.add(0, "-injars " + this.artifactPath.toString()); - template.add(1, "-outjars " + this.getTemporaryFile(PROGUARD_EXPORT_PATH)); + template.add(0, "-injars '" + this.artifactPath.toString() + "'"); + template.add(1, "-outjars '" + this.getTemporaryFile(PROGUARD_EXPORT_PATH) + "'"); template.add(2, "-libraryjars /jmods/java.base.jmod(!**.jar;!module-info.class)"); template.add(3, "-libraryjars /jmods/java.desktop.jmod(!**.jar;!module-info.class)"); @@ -264,7 +247,7 @@ private void generateConfigs() throws Exception { Files.createDirectories(this.getRootRelativeFile(PROGUARD_MAPPING_DIR)); List api = new ArrayList<>(template); - api.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + compType + "-api.txt")); + api.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + addCompTypeFirst("api.txt"))); // API config doesn't require any changes from the changes that we made to the template Files.write(getTemporaryFile(compType + PROGUARD_API_CONFIG), api); @@ -272,10 +255,21 @@ private void generateConfigs() throws Exception { // For the Standalone config, don't keep the API package List standalone = new ArrayList<>(template); standalone.removeIf(s -> s.contains("# this is the keep api")); - standalone.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + compType + "-standalone.txt")); + standalone.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + addCompTypeFirst("standalone.txt"))); Files.write(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG), standalone); } + private Stream acquireDependencies() { + return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() + .stream() + .filter(File::isFile); + } + + private void proguardApi() throws Exception { + runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); + } + private void cleanup() { try { Files.delete(this.proguardOut); @@ -292,19 +286,21 @@ public void setExtract(String extract) { this.extract = extract; } - public void setCompType(String compType) { - this.compType = compType; - } - private void runProguard(Path config) throws Exception { // Delete the existing proguard output file. Proguard probably handles this already, but why not do it ourselves if (Files.exists(this.proguardOut)) { Files.delete(this.proguardOut); } - Path proguardJar = getTemporaryFile(PROGUARD_JAR); + // Make paths relative to work directory; fixes spaces in path to config, @"" doesn't work + Path workingDirectory = getTemporaryFile(""); + Path proguardJar = workingDirectory.relativize(getTemporaryFile(PROGUARD_JAR)); + config = workingDirectory.relativize(config); + + // Honestly, if you still have spaces in your path at this point, you're SOL. + Process p = new ProcessBuilder("java", "-jar", proguardJar.toString(), "@" + config.toString()) - .directory(getTemporaryFile("").toFile()) // Set the working directory to the temporary folder] + .directory(workingDirectory.toFile()) // Set the working directory to the temporary folder] .start(); // We can't do output inherit process I/O with gradle for some reason and have it work, so we have to do this diff --git a/fabric/build.gradle b/fabric/build.gradle index b2b42ed03..5d4b6c67e 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -22,7 +22,7 @@ plugins { id "com.github.johnrengelman.shadow" version "7.0.0" } -archivesBaseName = archivesBaseName + "-" + project.name +archivesBaseName = archivesBaseName + "-fabric" minecraft { fabric() @@ -79,17 +79,19 @@ components.java { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' extract 'proguard-7.2.1/lib/proguard.jar' - compType "FABRIC" + compType "fabric" } -task createDist(type: CreateDistTask, dependsOn: proguard) +task createDist(type: CreateDistTask, dependsOn: proguard) { + compType "fabric" +} build.finalizedBy(createDist) publishing { publications { maven(MavenPublication) { - artifact "../dist/baritone-fabric-api-" + version + ".jar" + artifact "../dist/baritone-api-fabric-" + version + ".jar" } } diff --git a/fabric/src/main/java/baritone/launch/FabricMixinPlugin.java b/fabric/src/main/java/baritone/launch/FabricMixinPlugin.java new file mode 100644 index 000000000..655de50d4 --- /dev/null +++ b/fabric/src/main/java/baritone/launch/FabricMixinPlugin.java @@ -0,0 +1,71 @@ +/* + * 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; + +import net.fabricmc.loader.api.FabricLoader; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class FabricMixinPlugin implements IMixinConfigPlugin { + private static final String mixinPackage = "baritone.launch.mixins"; + + private static boolean loaded; + + private static boolean isBaritonePresent; + + @Override + public void onLoad(String mixinPackage) { + if (loaded) return; + + isBaritonePresent = FabricLoader.getInstance().isModLoaded("baritone"); + + loaded = true; + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if (!mixinClassName.startsWith(mixinPackage)) { + throw new RuntimeException("Mixin " + mixinClassName + " is not in the mixin package"); + } else { + return !isBaritonePresent; + } + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) {} + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 3e69814e4..f7f0ca756 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -14,6 +14,7 @@ "homepage": "https://github.com/cabaletta/baritone", "sources": "https://github.com/cabaletta/baritone" }, + "license": "LGPL-3.0", "icon": "assets/baritone/icon.png", "environment": "*", @@ -24,6 +25,6 @@ ], "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.3" + "minecraft": "1.19.4" } -} \ No newline at end of file +} diff --git a/forge/build.gradle b/forge/build.gradle index da2c4e570..bac8ca54a 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -22,7 +22,7 @@ plugins { id "com.github.johnrengelman.shadow" version "7.0.0" } -archivesBaseName = archivesBaseName + "-" + project.name +archivesBaseName = archivesBaseName + "-forge" minecraft { forge { @@ -98,10 +98,12 @@ components.java { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' extract 'proguard-7.2.1/lib/proguard.jar' - compType "FORGE" + compType "forge" } -task createDist(type: CreateDistTask, dependsOn: proguard) +task createDist(type: CreateDistTask, dependsOn: proguard) { + compType "forge" +} build.finalizedBy(createDist) diff --git a/forge/src/main/resources/pack.mcmeta b/forge/src/main/resources/pack.mcmeta new file mode 100644 index 000000000..663d1787a --- /dev/null +++ b/forge/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "null", + "pack_format": 8 + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index c1cc61494..29d123f5b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ org.gradle.jvmargs=-Xmx4G -mod_version=1.19.3-beta1 +mod_version=1.19.4-beta1 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.3 +minecraft_version=1.19.4 forge_version=1.19.3-44.0.1 -fabric_version=0.14.11 \ No newline at end of file +fabric_version=0.14.11 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e5fb3413d..00e33edef 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Mon Feb 06 02:33:37 CST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/jitpack.yml b/jitpack.yml index 8a6523f7e..577b01763 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,3 +1,4 @@ before_install: - - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh - - source install-jdk.sh --feature 17 \ No newline at end of file + - curl -s "https://get.sdkman.io" | bash + - sdk install java 17.0.5-tem + - sdk use java 17.0.5-tem diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 1ea261ea1..0a7b128b9 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -14,7 +14,7 @@ # instead of renaming to a, b, c, rename to baritone.a, baritone.b, baritone.c so as to not conflict with minecraft's obfd classes -flattenpackagehierarchy -repackageclasses 'baritone' --ignorewarnings + # lwjgl is weird -dontwarn org.lwjgl.** # also lwjgl lol diff --git a/settings.gradle b/settings.gradle index 7247a2843..58b6e203d 100755 --- a/settings.gradle +++ b/settings.gradle @@ -43,7 +43,7 @@ rootProject.name = 'baritone' include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { - //System.setProperty("Baritone.enabled_platforms", "fabric,forge") +// System.setProperty("Baritone.enabled_platforms", "fabric,forge") System.setProperty("Baritone.enabled_platforms", "fabric") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 393820e13..4f9431010 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -107,6 +107,13 @@ public final class Settings { */ public final Setting walkOnWaterOnePenalty = new Setting<>(3D); + /** + * Don't allow breaking blocks next to liquids. + *

+ * Enable if you have mods adding custom fluid physics. + */ + public final Setting strictLiquidCheck = new Setting<>(false); + /** * Allow Baritone to fall arbitrary distances and place a water bucket beneath it. * Reliability: questionable. @@ -116,6 +123,8 @@ public final class Settings { /** * Allow Baritone to assume it can walk on still water just like any other block. * This functionality is assumed to be provided by a separate library that might have imported Baritone. + *

+ * Note: This will prevent some usage of the frostwalker enchantment, like pillaring up from water. */ public final Setting assumeWalkOnWater = new Setting<>(false); @@ -276,6 +285,12 @@ public final class Settings { */ public final Setting buildIgnoreDirection = new Setting<>(false); + /** + * A list of names of block properties the builder will ignore. + */ + public final Setting> buildIgnoreProperties = new Setting<>(new ArrayList<>(Arrays.asList( + ))); + /** * If this setting is true, Baritone will never break a block that is adjacent to an unsupported falling block. *

diff --git a/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java b/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java index 7d77a96c7..3d0f2613f 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java @@ -26,7 +26,8 @@ public enum RelativeCoordinate implements IDatatypePost { INSTANCE; - private static Pattern PATTERN = Pattern.compile("^(~?)([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)([k-k]?)|)$"); + private static String ScalesAliasRegex = "[kKmM]"; + private static Pattern PATTERN = Pattern.compile("^(~?)([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(" + ScalesAliasRegex + "?)|)$"); @Override public Double apply(IDatatypeContext ctx, Double origin) throws CommandException { @@ -41,11 +42,15 @@ public Double apply(IDatatypeContext ctx, Double origin) throws CommandException boolean isRelative = !matcher.group(1).isEmpty(); - double offset = matcher.group(2).isEmpty() ? 0 : Double.parseDouble(matcher.group(2).replaceAll("k", "")); + double offset = matcher.group(2).isEmpty() ? 0 : Double.parseDouble(matcher.group(2).replaceAll(ScalesAliasRegex, "")); - if (matcher.group(2).contains("k")) { + if (matcher.group(2).toLowerCase().contains("k")) { offset *= 1000; } + if (matcher.group(2).toLowerCase().contains("m")) { + offset *= 1000000; + } + if (isRelative) { return origin + offset; diff --git a/src/api/java/baritone/api/command/registry/Registry.java b/src/api/java/baritone/api/command/registry/Registry.java index 067791690..b571484b7 100644 --- a/src/api/java/baritone/api/command/registry/Registry.java +++ b/src/api/java/baritone/api/command/registry/Registry.java @@ -84,7 +84,7 @@ public boolean register(V entry) { * @param entry The entry to unregister. */ public void unregister(V entry) { - if (registered(entry)) { + if (!registered(entry)) { return; } _entries.remove(entry); diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 34c4394aa..9ae873fb6 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -42,14 +42,6 @@ public interface IBuilderProcess extends IBaritoneProcess { */ void build(String name, ISchematic schematic, Vec3i origin); - Vec3i getSchemSize(); - - void popStack(); - - boolean clearState(); - - boolean isFromAltoclefFinished(); - /** * Requests a build for the specified schematic, labeled as specified, with the specified origin. * @@ -73,13 +65,21 @@ default boolean build(String schematicFile, BlockPos origin) { boolean isPaused(); + Vec3i getSchemSize(); + + void popStack(); + + boolean clearState(); + + boolean isFromAltoclefFinished(); + void resume(); void clearArea(BlockPos corner1, BlockPos corner2); - void reset(); + void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef); - Map getMissing(); + boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef); /** * @return A list of block states that are estimated to be placeable by this builder process. You can use this in @@ -90,9 +90,9 @@ default boolean build(String schematicFile, BlockPos origin) { boolean isFromAltoclef(); - void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef); + void noteInsert(BlockPos pos); - boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef); + void reset(); - void noteInsert(BlockPos pos); + Map getMissing(); } diff --git a/src/api/java/baritone/api/schematic/SubstituteSchematic.java b/src/api/java/baritone/api/schematic/SubstituteSchematic.java index 1e7d99db0..96baa38da 100644 --- a/src/api/java/baritone/api/schematic/SubstituteSchematic.java +++ b/src/api/java/baritone/api/schematic/SubstituteSchematic.java @@ -84,6 +84,7 @@ private BlockState withBlock(BlockState state, Block block) { blockStateCache.computeIfAbsent(state, s -> new HashMap()).put(block, newState); return newState; } + private > BlockState copySingleProp(BlockState fromState, BlockState toState, Property prop) { return toState.setValue(prop, fromState.getValue(prop)); } diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index fe549375a..90a2756d8 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -148,6 +148,10 @@ public String toString() { return String.format("BlockOptionalMeta{block=%s}", block); } + public static PredicateManager getPredicateManager() { + return predicate; + } + private static Method getVanillaServerPack; private static VanillaPackResources getVanillaServerPack() { @@ -181,6 +185,14 @@ public static LootTables getManager() { return lootTables; } + public BlockState getAnyBlockState() { + if (blockstates.size() > 0) { + return blockstates.iterator().next(); + } + + return null; + } + private static synchronized List drops(Block b) { return drops.computeIfAbsent(b, block -> { ResourceLocation lootTableLocation = block.getLootTable(); @@ -207,18 +219,6 @@ private static synchronized List drops(Block b) { }); } - public static PredicateManager getPredicateManager() { - return predicate; - } - - public BlockState getAnyBlockState() { - if (blockstates.size() > 0) { - return blockstates.iterator().next(); - } - - return null; - } - private static class ServerLevelStub extends ServerLevel { private static Minecraft client = Minecraft.getInstance(); private static Unsafe unsafe = getUnsafe(); @@ -227,6 +227,12 @@ public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.Lev super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10); } + @Override + public FeatureFlagSet enabledFeatures() { + assert client.level != null; + return client.level.enabledFeatures(); + } + public static ServerLevelStub fastCreate() { try { return (ServerLevelStub) unsafe.allocateInstance(ServerLevelStub.class); @@ -245,11 +251,5 @@ public static Unsafe getUnsafe() { } } - @Override - public FeatureFlagSet enabledFeatures() { - assert client.level != null; - return client.level.enabledFeatures(); - } - } } diff --git a/src/api/java/baritone/api/utils/RandomSpotNearby.java b/src/api/java/baritone/api/utils/RandomSpotNearby.java deleted file mode 100644 index 8dbcaa9d6..000000000 --- a/src/api/java/baritone/api/utils/RandomSpotNearby.java +++ /dev/null @@ -1,40 +0,0 @@ -package baritone.api.utils; - -import java.util.Random; - -public class RandomSpotNearby { - private final Random rand; - private BetterBlockPos end; - private double r; - private double old_r; - - public RandomSpotNearby(final double r) { - this.rand = new Random(); - this.r = r; - this.old_r = r; - } - - private final double MAX_DIST_INCREASE() { - return old_r * 2; - } - - private BetterBlockPos calc(final BetterBlockPos start) { - final double phi = rand.nextInt(360) + rand.nextDouble(); - final double radius = rand.nextInt((int) Math.round(r)) + rand.nextDouble(); //rand.nextDouble(r) + rand.nextDouble(); - final int x = (int) Math.round(radius * Math.sin(phi)); - final int z = (int) Math.round(radius * Math.cos(phi)); - - this.end = new BetterBlockPos(start.getX() + x, start.getY(), start.getZ() + z); - return this.end; - } - - public BetterBlockPos next(final BetterBlockPos start) { - this.r = (this.r - this.old_r > MAX_DIST_INCREASE()) ? this.old_r : this.r; - return next(start, 0.3d); - } - - public BetterBlockPos next(final BetterBlockPos start, final double increaseRadius) { - this.r += increaseRadius; - return calc(start); - } -} diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index c6e0608eb..9f2324a24 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -179,7 +179,7 @@ public static String settingToString(Settings.Setting setting) throws IllegalSta /** * This should always be the same as whether the setting can be parsed from or serialized to a string * - * @param the setting + * @param setting The Setting * @return true if the setting can not be set or read by the user */ public static boolean javaOnlySetting(Settings.Setting setting) { @@ -205,6 +205,28 @@ public static void parseAndApply(Settings settings, String settingName, String s setting.value = parsed; } + private interface ISettingParser { + + T parse(ParserContext context, String raw); + + String toString(ParserContext context, T value); + + boolean accepts(Type type); + } + + private static class ParserContext { + + private final Settings.Setting setting; + + private ParserContext(Settings.Setting setting) { + this.setting = setting; + } + + private Settings.Setting getSetting() { + return this.setting; + } + } + private enum Parser implements ISettingParser { DOUBLE(Double.class, Double::parseDouble), @@ -333,26 +355,4 @@ public static Parser getParser(Type type) { .findFirst().orElse(null); } } - - private interface ISettingParser { - - T parse(ParserContext context, String raw); - - String toString(ParserContext context, T value); - - boolean accepts(Type type); - } - - private static class ParserContext { - - private final Settings.Setting setting; - - private ParserContext(Settings.Setting setting) { - this.setting = setting; - } - - private Settings.Setting getSetting() { - return this.setting; - } - } } diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java index f53c7e602..8e6ab9955 100644 --- a/src/launch/java/baritone/launch/mixins/MixinScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.java @@ -43,7 +43,6 @@ public abstract class MixinScreen implements IGuiScreen { //TODO: switch to enum extention with mixin 9.0 or whenever Mumfrey gets around to it @Inject(at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;)V", remap = false, ordinal = 1), method = "handleComponentClicked", cancellable = true) public void handleCustomClickEvent(Style style, CallbackInfoReturnable cir) { - System.out.println("handleCustomClickEvent"); ClickEvent clickEvent = style.getClickEvent(); if (clickEvent == null) { return; diff --git a/src/launch/resources/mixins.baritone-meteor.json b/src/launch/resources/mixins.baritone-meteor.json index 02f905891..22e02226b 100644 --- a/src/launch/resources/mixins.baritone-meteor.json +++ b/src/launch/resources/mixins.baritone-meteor.json @@ -17,7 +17,6 @@ "MixinEntityRenderManager", "MixinItemStack", "MixinLivingEntity", - "MixinLongArrayNBT", "MixinLootContext", "MixinMinecraft", "MixinNetworkManager", diff --git a/src/main/java/baritone/altoclef/AltoClefSettings.java b/src/main/java/baritone/altoclef/AltoClefSettings.java index eb75a913e..cfd1e0c28 100644 --- a/src/main/java/baritone/altoclef/AltoClefSettings.java +++ b/src/main/java/baritone/altoclef/AltoClefSettings.java @@ -33,48 +33,39 @@ public class AltoClefSettings { // woo singletons private static AltoClefSettings _instance = new AltoClefSettings(); - - public static AltoClefSettings getInstance() { - return _instance; - } - private final Object breakMutex = new Object(); private final Object placeMutex = new Object(); - private final Object propertiesMutex = new Object(); - private final Object globalHeuristicMutex = new Object(); - private final HashSet _blocksToAvoidBreaking = new HashSet<>(); private final List> _breakAvoiders = new ArrayList<>(); - private final List> _placeAvoiders = new ArrayList<>(); - private final List> _forceCanWalkOn = new ArrayList<>(); - private final List> _forceAvoidWalkThrough = new ArrayList<>(); - private final List> _forceUseTool = new ArrayList<>(); - private final List> _globalHeuristics = new ArrayList<>(); - private final HashSet _protectedItems = new HashSet<>(); - private boolean _allowFlowingWaterPass; - private boolean _pauseInteractions; - private boolean _dontPlaceBucketButStillFall; - private boolean _allowSwimThroughLava = false; - private boolean _treatSoulSandAsOrdinaryBlock = false; + private boolean canWalkOnEndPortal = false; + + public static AltoClefSettings getInstance() { + return _instance; + } + + public void canWalkOnEndPortal(boolean canWalk) { + canWalkOnEndPortal = canWalk; + } public void avoidBlockBreak(BlockPos pos) { synchronized (breakMutex) { _blocksToAvoidBreaking.add(pos); } } + public void avoidBlockBreak(Predicate avoider) { synchronized (breakMutex) { _breakAvoiders.add(avoider); @@ -102,6 +93,7 @@ public void avoidBlockPlace(Predicate avoider) { public boolean shouldAvoidBreaking(int x, int y, int z) { return shouldAvoidBreaking(new BlockPos(x, y, z)); } + public boolean shouldAvoidBreaking(BlockPos pos) { synchronized (breakMutex) { if (_blocksToAvoidBreaking.contains(pos)) @@ -109,11 +101,13 @@ public boolean shouldAvoidBreaking(BlockPos pos) { return (_breakAvoiders.stream().anyMatch(pred -> pred.test(pos))); } } + public boolean shouldAvoidPlacingAt(BlockPos pos) { synchronized (placeMutex) { return _placeAvoiders.stream().anyMatch(pred -> pred.test(pos)); } } + public boolean shouldAvoidPlacingAt(int x, int y, int z) { return shouldAvoidPlacingAt(new BlockPos(x, y, z)); } @@ -129,6 +123,7 @@ public boolean shouldAvoidWalkThroughForce(BlockPos pos) { return _forceAvoidWalkThrough.stream().anyMatch(pred -> pred.test(pos)); } } + public boolean shouldAvoidWalkThroughForce(int x, int y, int z) { return shouldAvoidWalkThroughForce(new BlockPos(x, y, z)); } @@ -156,21 +151,22 @@ public boolean isInteractionPaused() { return _pauseInteractions; } } - public boolean isFlowingWaterPassAllowed() { + + public void setInteractionPaused(boolean paused) { synchronized (propertiesMutex) { - return _allowFlowingWaterPass; + _pauseInteractions = paused; } } - public boolean canSwimThroughLava() { + public boolean isFlowingWaterPassAllowed() { synchronized (propertiesMutex) { - return _allowSwimThroughLava; + return _allowFlowingWaterPass; } } - public void setInteractionPaused(boolean paused) { + public boolean canSwimThroughLava() { synchronized (propertiesMutex) { - _pauseInteractions = paused; + return _allowSwimThroughLava; } } @@ -202,15 +198,19 @@ public double applyGlobalHeuristic(double prev, int x, int y, int z) { public HashSet getBlocksToAvoidBreaking() { return _blocksToAvoidBreaking; } + public List> getBreakAvoiders() { return _breakAvoiders; } + public List> getPlaceAvoiders() { return _placeAvoiders; } + public List> getForceWalkOnPredicates() { return _forceCanWalkOn; } + public List> getForceAvoidWalkThroughPredicates() { return _forceAvoidWalkThrough; } @@ -226,9 +226,11 @@ public List> getGlobalHeuristics() { public boolean isItemProtected(Item item) { return _protectedItems.contains(item); } + public HashSet getProtectedItems() { return _protectedItems; } + public void protectItem(Item item) { _protectedItems.add(item); } @@ -252,4 +254,8 @@ public Object getPropertiesMutex() { public Object getGlobalHeuristicMutex() { return globalHeuristicMutex; } + + public boolean isCanWalkOnEndPortal() { + return canWalkOnEndPortal; + } } diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index bd61150dd..3cad14421 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -172,8 +172,7 @@ public boolean throwaway(boolean select, Predicate desired) { } public boolean throwaway(boolean select, Predicate desired, boolean allowInventory) { - if (AltoClefSettings.getInstance().isInteractionPaused()) - return false; + if (AltoClefSettings.getInstance().isInteractionPaused()) return false; LocalPlayer p = ctx.player(); NonNullList inv = p.getInventory().items; for (int i = 0; i < 9; i++) { diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index f18bd862b..148952164 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -99,6 +99,7 @@ public void onTick(TickEvent event) { baritone.getPathingControlManager().cancelEverything(); return; } + expectedSegmentStart = pathStart(); baritone.getPathingControlManager().preTick(); tickPath(); diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index b90b74432..4f922884d 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -96,8 +96,7 @@ public static CachedChunk pack(LevelChunk chunk) { // get top block in columns // @formatter:off for (int z = 0; z < 16; z++) { - https: -//www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html + https://www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html for (int x = 0; x < 16; x++) { for (int y = height - 1; y >= 0; y--) { int index = CachedChunk.getPositionIndex(x, y, z); diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 0fc89c3e9..0503a6827 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -44,13 +44,11 @@ public class WorldProvider implements IWorldProvider, Helper { private static final Map worldCache = new HashMap<>(); // this is how the bots have the same cached world private WorldData currentWorld; + private Level mcWorld; // this let's us detect a broken load/unload hook @Override public final WorldData getCurrentWorld() { - // attempt reload if the worldData is null - if (currentWorld == null && mc.level != null) { - initWorld(mc.level.dimension(), mc.level.dimensionType()); - } + detectAndHandleBrokenLoading(); return this.currentWorld; } @@ -79,17 +77,14 @@ public final void initWorld(ResourceKey worldKey, DimensionType world) { readme = directory; } else { // Otherwise, the server must be remote... String folderName; - if (mc.isConnectedToRealms()) { - folderName = "realms"; + if (mc.getCurrentServer() != null) { + folderName = mc.isConnectedToRealms() ? "realms" : mc.getCurrentServer().ip; } else { - if (mc.getCurrentServer() != null) { - folderName = mc.getCurrentServer().ip; - } else { - //replaymod causes null currentServerData and false singleplayer. - System.out.println("BARITONE: setting current world to null"); - currentWorld = null; - return; - } + //replaymod causes null currentServer and false singleplayer. + System.out.println("World seems to be a replay. Not loading Baritone cache."); + currentWorld = null; + mcWorld = mc.level; + return; } if (SystemUtils.IS_OS_WINDOWS) { folderName = folderName.replace(":", "_"); @@ -118,6 +113,7 @@ public final void initWorld(ResourceKey worldKey, DimensionType world) { synchronized (worldCache) { this.currentWorld = worldCache.computeIfAbsent(dir, d -> new WorldData(d, world)); } + this.mcWorld = mc.level; } public final Path getDimDir(ResourceKey level, int height, Path directory) { @@ -127,6 +123,7 @@ public final Path getDimDir(ResourceKey level, int height, Path directory public final void closeWorld() { WorldData world = this.currentWorld; this.currentWorld = null; + this.mcWorld = null; if (world == null) { return; } @@ -134,8 +131,25 @@ public final void closeWorld() { } public final void ifWorldLoaded(Consumer currentWorldConsumer) { + detectAndHandleBrokenLoading(); if (this.currentWorld != null) { currentWorldConsumer.accept(this.currentWorld); } } + + private final void detectAndHandleBrokenLoading() { + if (this.mcWorld != mc.level) { + if (this.currentWorld != null) { + System.out.println("mc.world unloaded unnoticed! Unloading Baritone cache now."); + closeWorld(); + } + if (mc.level != null) { + System.out.println("mc.world loaded unnoticed! Loading Baritone cache now."); + initWorld(mc.level.dimension(), mc.level.dimensionType()); + } + } else if (currentWorld == null && mc.level != null && (mc.hasSingleplayerServer() || mc.getCurrentServer() != null)) { + System.out.println("Retrying to load Baritone cache"); + initWorld(mc.level.dimension(), mc.level.dimensionType()); + } + } } diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index eaab75286..6f6293ccd 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -56,6 +56,7 @@ public boolean isActive() { @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + baritone.getInputOverrideHandler().clearAllKeys(); return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 1efbbc93e..02f46243b 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -83,8 +83,7 @@ private Component positionToComponent(BetterBlockPos pos) { .withColor(ChatFormatting.GRAY) .withInsertion(positionText) .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)) - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) - ); + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent))); return baseComponent; } diff --git a/src/main/java/baritone/command/defaults/LitematicaCommand.java b/src/main/java/baritone/command/defaults/LitematicaCommand.java new file mode 100644 index 000000000..bfe0079b3 --- /dev/null +++ b/src/main/java/baritone/command/defaults/LitematicaCommand.java @@ -0,0 +1,71 @@ +/* + * 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.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class LitematicaCommand extends Command { + + public LitematicaCommand(IBaritone baritone) { + super(baritone, "litematica"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + int schematic = 0; + if (args.hasAny()) { + args.requireMax(1); + if (args.is(Integer.class)) { + schematic = args.getAs(Integer.class) - 1; + } + } + try { + baritone.getBuilderProcess().buildOpenLitematic(schematic); + } catch (IndexOutOfBoundsException e) { + logDirect("Pleas provide a valid index."); + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Builds the loaded schematic"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Build a schematic currently open in Litematica.", + "", + "Usage:", + "> litematica", + "> litematica <#>" + ); + } +} \ No newline at end of file diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 99dac4ac1..02174faed 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -147,7 +147,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { throw new CommandInvalidTypeException(args.consumed(), "a toggleable setting", "some other setting"); } //noinspection unchecked - ((Settings.Setting) setting).value ^= true; + Settings.Setting asBoolSetting = (Settings.Setting) setting; + asBoolSetting.value ^= true; logDirect(String.format( "Toggled setting %s to %s", setting.getName(), diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index f3df6fd08..173748bb3 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -22,6 +22,7 @@ import baritone.api.IBaritone; import baritone.api.pathing.movement.ActionCosts; import baritone.cache.WorldData; +import baritone.pathing.precompute.PrecomputedData; import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; import baritone.utils.pathing.BetterWorldBorder; @@ -31,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; @@ -65,6 +67,7 @@ public class CalculationContext { public final boolean allowJumpAt256; public final boolean allowParkourAscend; public final boolean assumeWalkOnWater; + public final int frostWalker; public final boolean allowDiagonalDescend; public final boolean allowDiagonalAscend; public final boolean allowDownward; @@ -77,11 +80,14 @@ public class CalculationContext { public final double walkOnWaterOnePenalty; public final BetterWorldBorder worldBorder; + public final PrecomputedData precomputedData; + public CalculationContext(IBaritone baritone) { this(baritone, false); } public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { + this.precomputedData = new PrecomputedData(); this.safeForThreadedUse = forUseOnAnotherThread; this.baritone = baritone; LocalPlayer player = baritone.getPlayerContext().player(); @@ -100,6 +106,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.allowJumpAt256 = Baritone.settings().allowJumpAt256.value; this.allowParkourAscend = Baritone.settings().allowParkourAscend.value; this.assumeWalkOnWater = Baritone.settings().assumeWalkOnWater.value; + this.frostWalker = EnchantmentHelper.getEnchantmentLevel(Enchantments.FROST_WALKER, baritone.getPlayerContext().player()); this.allowDiagonalDescend = Baritone.settings().allowDiagonalDescend.value; this.allowDiagonalAscend = Baritone.settings().allowDiagonalAscend.value; this.allowDownward = Baritone.settings().allowDownward.value; diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 170147361..01e250049 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -27,16 +27,19 @@ import baritone.api.utils.*; import baritone.api.utils.input.Input; import baritone.pathing.movement.MovementState.MovementTarget; +import baritone.pathing.precompute.Ternary; import baritone.utils.BlockStateInterface; import baritone.utils.ToolSet; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.piston.MovingPistonBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.Half; import net.minecraft.world.level.block.state.properties.SlabType; +import net.minecraft.world.level.block.state.properties.StairsShape; import net.minecraft.world.level.material.*; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.BlockHitResult; @@ -46,6 +49,7 @@ import java.util.Optional; import static baritone.pathing.movement.Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP; +import static baritone.pathing.precompute.Ternary.*; /** * Static helpers for cost calculation @@ -56,7 +60,7 @@ public interface MovementHelper extends ActionCosts, Helper { static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z))) return true; - if (!bsi.worldBorder.canPlaceAt(x, y)) { + if (!bsi.worldBorder.canPlaceAt(x, z)) { return true; } Block b = state.getBlock(); @@ -84,6 +88,19 @@ static boolean avoidAdjacentBreaking(BlockStateInterface bsi, int x, int y, int && FallingBlock.isFree(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) return true; // dont break a block that is adjacent to unsupported gravel because it can cause really weird stuff } + // only pure liquids for now + // waterlogged blocks can have closed bottom sides and such + if (block instanceof LiquidBlock) { + if (directlyAbove || Baritone.settings().strictLiquidCheck.value) { + return true; + } + int level = state.getValue(LiquidBlock.LEVEL); + if (level == 0) { + return true; // source blocks like to flow horizontally + } + // everything else will prefer flowing down + return !(bsi.get0(x, y - 1, z).getBlock() instanceof LiquidBlock); // assume everything is in a static state + } return !state.getFluidState().isEmpty(); } @@ -95,42 +112,96 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { return canWalkThrough(bsi, x, y, z, bsi.get0(x, y, z)); } + static boolean canWalkThrough(CalculationContext context, int x, int y, int z, BlockState state) { + return context.precomputedData.canWalkThrough(context.bsi, x, y, z, state); + } + + static boolean canWalkThrough(CalculationContext context, int x, int y, int z) { + return context.precomputedData.canWalkThrough(context.bsi, x, y, z, context.get(x, y, z)); + } + static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + Ternary canWalkThrough = canWalkThroughBlockState(state); Block block = state.getBlock(); - if (block instanceof AirBlock) { // early return for most common case - return true; - } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { - return false; - } if (AltoClefSettings.getInstance().canSwimThroughLava() && block == Blocks.LAVA) { BlockState up = bsi.get0(x, y + 1, z); return up.getFluidState().isEmpty(); } - if (block == Blocks.BIG_DRIPLEAF) { + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(x, y, z)) { return false; } - if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(x, y, z)) { + if (canWalkThrough == YES) { + return true; + } + if (canWalkThrough == NO) { return false; } + return canWalkThroughPosition(bsi, x, y, z, state); + } + + static Ternary canWalkThroughBlockState(BlockState state) { + Block block = state.getBlock(); + if (block instanceof AirBlock) { + return YES; + } + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { + return NO; + } + if (block == Blocks.BIG_DRIPLEAF) { + return NO; + } if (block == Blocks.POWDER_SNOW) { - return false; + return NO; } if (Baritone.settings().blocksToAvoid.value.contains(block)) { - return false; + return NO; } if (block instanceof DoorBlock || block instanceof FenceGateBlock) { - // Because there's no nice method in vanilla to check if a door is openable or not, we just have to assume - // that anything that isn't an iron door isn't openable, ignoring that some doors introduced in mods can't - // be opened by just interacting. - return block != Blocks.IRON_DOOR; + // TODO this assumes that all doors in all mods are openable + if (block == Blocks.IRON_DOOR) { + return NO; + } + return YES; + } + if (block instanceof CarpetBlock) { + return MAYBE; + } + if (block instanceof SnowLayerBlock) { + // snow layers cached as the top layer of a packed chunk have no metadata, we can't make a decision based on their depth here + // it would otherwise make long distance pathing through snowy biomes impossible + return MAYBE; + } + FluidState fluidState = state.getFluidState(); + if (!fluidState.isEmpty()) { + if (fluidState.getType().getAmount(fluidState) != 8) { + return NO; + } else { + return MAYBE; + } + } + if (block instanceof CauldronBlock) { + return NO; + } + try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information + if (state.isPathfindable(null, null, PathComputationType.LAND)) { + return YES; + } else { + return NO; + } + } catch (Throwable exception) { + System.out.println("The block " + state.getBlock().getName().getString() + " requires a special case due to the exception " + exception.getMessage()); + return MAYBE; } - if (block instanceof WoolCarpetBlock) { + } + + static boolean canWalkThroughPosition(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + Block block = state.getBlock(); + + if (block instanceof CarpetBlock) { return canWalkOn(bsi, x, y - 1, z); } + if (block instanceof SnowLayerBlock) { - // we've already checked doors and fence gates - // so the only remaining dynamic isPassables are snow and trapdoor // if they're cached as a top block, we don't know their metadata // default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) if (!bsi.worldContainsLoadedChunk(x, z)) { @@ -145,55 +216,33 @@ static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, Bloc return canWalkOn(bsi, x, y - 1, z); } - if (isFlowing(x, y, z, state, bsi)) { - return false; // Don't walk through flowing liquids - } FluidState fluidState = state.getFluidState(); - if (fluidState.getType() instanceof WaterFluid) { + if (!fluidState.isEmpty()) { + if (isFlowing(x, y, z, state, bsi)) { + return false; + } + // Everything after this point has to be a special case as it relies on the water not being flowing, which means a special case is needed. if (Baritone.settings().assumeWalkOnWater.value) { return false; } + BlockState up = bsi.get0(x, y + 1, z); if (!up.getFluidState().isEmpty() || up.getBlock() instanceof WaterlilyBlock) { return false; } - return true; - } - if (block instanceof CauldronBlock) { - return false; + return fluidState.getType() instanceof WaterFluid; } + // every block that overrides isPassable with anything more complicated than a "return true;" or "return false;" // has already been accounted for above // therefore it's safe to not construct a blockpos from our x, y, z ints and instead just pass null return state.isPathfindable(bsi.access, BlockPos.ZERO, PathComputationType.LAND); // workaround for future compatibility =P } - /** - * canWalkThrough but also won't impede movement at all. so not including doors or fence gates (we'd have to right click), - * not including water, and not including ladders or vines or cobwebs (they slow us down) - * - * @param context Calculation context to provide block state lookup - * @param x The block's x position - * @param y The block's y position - * @param z The block's z position - * @return Whether or not the block at the specified position - */ - static boolean fullyPassable(CalculationContext context, int x, int y, int z) { - return fullyPassable( - context.bsi.access, - context.bsi.isPassableBlockPos.set(x, y, z), - context.bsi.get0(x, y, z) - ); - } - - static boolean fullyPassable(IPlayerContext ctx, BlockPos pos) { - return fullyPassable(ctx.world(), pos, ctx.world().getBlockState(pos)); - } - - static boolean fullyPassable(BlockGetter access, BlockPos pos, BlockState state) { + static Ternary fullyPassableBlockState(BlockState state) { Block block = state.getBlock(); if (block instanceof AirBlock) { // early return for most common case - return true; + return YES; } // exceptions - blocks that are isPassable true, but we can't actually jump through if (block instanceof BaseFireBlock @@ -211,13 +260,52 @@ static boolean fullyPassable(BlockGetter access, BlockPos pos, BlockState state) || block instanceof EndPortalBlock || block instanceof SkullBlock || block instanceof ShulkerBoxBlock) { - return false; + return NO; + } + // door, fence gate, liquid, trapdoor have been accounted for, nothing else uses the world or pos parameters + // at least in 1.12.2 vanilla, that is..... + try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information + if (state.isPathfindable(null, null, PathComputationType.LAND)) { + return YES; + } else { + return NO; + } + } catch (Throwable exception) { + // see PR #1087 for why + System.out.println("The block " + state.getBlock().getName().getString() + " requires a special case due to the exception " + exception.getMessage()); + return MAYBE; } + } + + /** + * canWalkThrough but also won't impede movement at all. so not including doors or fence gates (we'd have to right click), + * not including water, and not including ladders or vines or cobwebs (they slow us down) + */ + static boolean fullyPassable(CalculationContext context, int x, int y, int z) { + return fullyPassable(context, x, y, z, context.get(x, y, z)); + } + + static boolean fullyPassable(CalculationContext context, int x, int y, int z, BlockState state) { + return context.precomputedData.fullyPassable(context.bsi, x, y, z, state); + } + + static boolean fullyPassable(IPlayerContext ctx, BlockPos pos) { + BlockState state = ctx.world().getBlockState(pos); + Ternary fullyPassable = fullyPassableBlockState(state); if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(pos)) { return false; } - // door, fence gate, liquid, trapdoor have been accounted for, nothing else uses the world or pos parameters - return state.isPathfindable(access, pos, PathComputationType.LAND); + if (fullyPassable == YES) { + return true; + } + if (fullyPassable == NO) { + return false; + } + return fullyPassablePosition(new BlockStateInterface(ctx), pos.getX(), pos.getY(), pos.getZ(), state); // meh + } + + static boolean fullyPassablePosition(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + return state.isPathfindable(bsi.access, bsi.isPassableBlockPos.set(x, y, z), PathComputationType.LAND); } static boolean isReplaceable(int x, int y, int z, BlockState state, BlockStateInterface bsi) { @@ -316,6 +404,8 @@ static boolean avoidWalkingInto(BlockState state) { * Can I walk on this block without anything weird happening like me falling * through? Includes water because we know that we automatically jump on * water + *

+ * If changing something in this function remember to also change it in precomputed data * * @param bsi Block state provider * @param x The block's x position @@ -325,38 +415,77 @@ static boolean avoidWalkingInto(BlockState state) { * @return Whether or not the specified block can be walked on */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockState state) { - Block block = state.getBlock(); + Ternary canWalkOn = canWalkOnBlockState(state); if (AltoClefSettings.getInstance().canWalkOnForce(x, y, z)) return true; if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(x, y + 1, z)) return false; - if (block instanceof AirBlock || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN || block == Blocks.HONEY_BLOCK) { - // early return for most common case (air) - // plus magma, which is a normal cube but it hurts you + if (canWalkOn == YES) { + return true; + } + if (canWalkOn == NO) { return false; } - if (isBlockNormalCube(state)) { - return true; + return canWalkOnPosition(bsi, x, y, z, state); + } + + static Ternary canWalkOnBlockState(BlockState state) { + Block block = state.getBlock(); + if (isBlockNormalCube(state) && block != Blocks.MAGMA_BLOCK && block != Blocks.BUBBLE_COLUMN && block != Blocks.HONEY_BLOCK) { + return YES; } if (block instanceof AzaleaBlock) { - return true; + return YES; } if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this - return true; + return YES; } if (block == Blocks.FARMLAND || block == Blocks.DIRT_PATH) { - return true; + return YES; } if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { - return true; + return YES; } + if (block == Blocks.GLASS || block instanceof StainedGlassBlock) { + return YES; + } + if (block instanceof StairBlock) { + return YES; + } + if (isWater(state)) { + return MAYBE; + } + if (MovementHelper.isLava(state) && Baritone.settings().assumeWalkOnLava.value) { + return MAYBE; + } + if (block instanceof SlabBlock) { + if (!Baritone.settings().allowWalkOnBottomSlab.value) { + if (state.getValue(SlabBlock.TYPE) != SlabType.BOTTOM) { + return YES; + } + return NO; + } + return YES; + } + // Extra blocks we may want to walk on. + if (block == Blocks.END_PORTAL_FRAME) { + return YES; + } + if (block == Blocks.END_PORTAL && AltoClefSettings.getInstance().isCanWalkOnEndPortal()) { + return YES; + } + return NO; + } + + static boolean canWalkOnPosition(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + Block block = state.getBlock(); if (isWater(state)) { // since this is called literally millions of times per second, the benefit of not allocating millions of useless "pos.up()" // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think its a decrease in readability BlockState upState = bsi.get0(x, y + 1, z); Block up = upState.getBlock(); - if (up == Blocks.LILY_PAD || up instanceof WoolCarpetBlock) { + if (up == Blocks.LILY_PAD || up instanceof CarpetBlock) { return true; } - if (isFlowing(x, y, z, state, bsi) || upState.getFluidState().getType() == Fluids.FLOWING_WATER) { + if (MovementHelper.isFlowing(x, y, z, state, bsi) || upState.getFluidState().getType() == Fluids.FLOWING_WATER) { // the only scenario in which we can walk on flowing water is if it's under still water with jesus off return isWater(upState) && !Baritone.settings().assumeWalkOnWater.value; } @@ -364,19 +493,20 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat // if assumeWalkOnWater is off, we can only walk on water if there is water above it return isWater(upState) ^ Baritone.settings().assumeWalkOnWater.value; } - if (Baritone.settings().assumeWalkOnLava.value && isLava(state) && !isFlowing(x, y, z, state, bsi)) { - return true; - } - if (block == Blocks.GLASS || block instanceof StainedGlassBlock) { - return true; - } - if (block instanceof SlabBlock) { - if (!Baritone.settings().allowWalkOnBottomSlab.value) { - return state.getValue(SlabBlock.TYPE) != SlabType.BOTTOM; - } + + if (MovementHelper.isLava(state) && !MovementHelper.isFlowing(x, y, z, state, bsi) && Baritone.settings().assumeWalkOnLava.value) { // if we get here it means that assumeWalkOnLava must be true, so put it last return true; } - return block instanceof StairBlock; + + return false; // If we don't recognise it then we want to just return false to be safe. + } + + static boolean canWalkOn(CalculationContext context, int x, int y, int z, BlockState state) { + return context.precomputedData.canWalkOn(context.bsi, x, y, z, state); + } + + static boolean canWalkOn(CalculationContext context, int x, int y, int z) { + return canWalkOn(context, x, y, z, context.get(x, y, z)); } static boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, BlockState state) { @@ -395,6 +525,61 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z) { return canWalkOn(bsi, x, y, z, bsi.get0(x, y, z)); } + static boolean canUseFrostWalker(CalculationContext context, BlockState state) { + return context.frostWalker != 0 + && state.getMaterial() == Material.WATER + && ((Integer) state.getValue(LiquidBlock.LEVEL)) == 0; + } + + static boolean canUseFrostWalker(IPlayerContext ctx, BlockPos pos) { + BlockState state = BlockStateInterface.get(ctx, pos); + return EnchantmentHelper.hasFrostWalker(ctx.player()) + && state.getMaterial() == Material.WATER + && ((Integer) state.getValue(LiquidBlock.LEVEL)) == 0; + } + + /** + * If movements make us stand/walk on this block, will it have a top to walk on? + */ + static boolean mustBeSolidToWalkOn(CalculationContext context, int x, int y, int z, BlockState state) { + Block block = state.getBlock(); + if (block == Blocks.LADDER || block == Blocks.VINE) { + return false; + } + if (!state.getFluidState().isEmpty()) { + // used for frostwalker so only includes blocks where we are still on ground when leaving them to any side + if (block instanceof SlabBlock) { + if (state.getValue(SlabBlock.TYPE) != SlabType.BOTTOM) { + return true; + } + } else if (block instanceof StairBlock) { + if (state.getValue(StairBlock.HALF) == Half.TOP) { + return true; + } + StairsShape shape = state.getValue(StairBlock.SHAPE); + if (shape == StairsShape.INNER_LEFT || shape == StairsShape.INNER_RIGHT) { + return true; + } + } else if (block instanceof TrapDoorBlock) { + if (!state.getValue(TrapDoorBlock.OPEN) && state.getValue(TrapDoorBlock.HALF) == Half.TOP) { + return true; + } + } else if (block == Blocks.SCAFFOLDING) { + return true; + } else if (block instanceof LeavesBlock) { + return true; + } + if (context.assumeWalkOnWater) { + return false; + } + Block blockAbove = context.getBlock(x, y + 1, z); + if (blockAbove instanceof LiquidBlock) { + return false; + } + } + return true; + } + static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z) { return canPlaceAgainst(bsi, x, y, z, bsi.get0(x, y, z)); } @@ -424,7 +609,7 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, BlockState state, boolean includeFalling) { Block block = state.getBlock(); - if (!canWalkThrough(context.bsi, x, y, z, state)) { + if (!canWalkThrough(context, x, y, z, state)) { if (!state.getFluidState().isEmpty()) { return COST_INF; } @@ -634,14 +819,14 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, return PlaceResult.NO_OPTION; } + enum PlaceResult { + READY_TO_PLACE, ATTEMPTING, NO_OPTION; + } + static boolean isTransparent(Block b) { return b instanceof AirBlock || b == Blocks.LAVA || b == Blocks.WATER; } - - enum PlaceResult { - READY_TO_PLACE, ATTEMPTING, NO_OPTION; - } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 016b1d31c..d7d95eb1b 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -68,7 +68,7 @@ protected Set calculateValidPositions() { public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { BlockState toPlace = context.get(destX, y, destZ); double additionalPlacementCost = 0; - if (!MovementHelper.canWalkOn(context.bsi, destX, y, destZ, toPlace)) { + if (!MovementHelper.canWalkOn(context, destX, y, destZ, toPlace)) { additionalPlacementCost = context.costOfPlacingAt(destX, y, destZ, toPlace); if (additionalPlacementCost >= COST_INF) { return COST_INF; @@ -94,7 +94,7 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } BlockState srcUp2 = context.get(x, y + 2, z); // used lower down anyway - if (context.get(x, y + 3, z).getBlock() instanceof FallingBlock && (MovementHelper.canWalkThrough(context.bsi, x, y + 1, z) || !(srcUp2.getBlock() instanceof FallingBlock))) {//it would fall on us and possibly suffocate us + if (context.get(x, y + 3, z).getBlock() instanceof FallingBlock && (MovementHelper.canWalkThrough(context, x, y + 1, z) || !(srcUp2.getBlock() instanceof FallingBlock))) {//it would fall on us and possibly suffocate us // HOWEVER, we assume that we're standing in the start position // that means that src and src.up(1) are both air // maybe they aren't now, but they will be by the time this starts diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 2db0b4ee4..b0afaf8d1 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -44,32 +44,12 @@ public class MovementDescend extends Movement { private int numTicks = 0; + public boolean forceSafeMode = false; public MovementDescend(IBaritone baritone, BetterBlockPos start, BetterBlockPos end) { super(baritone, start, end, new BetterBlockPos[]{end.above(2), end.above(), end}, end.below()); } - @Override - public void reset() { - super.reset(); - numTicks = 0; - } - - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is a fall not a descend - } - return result.cost; - } - - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest.above(), dest); - } - public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { double totalCost = 0; BlockState destDown = context.get(destX, y - 1, destZ); @@ -102,7 +82,7 @@ public static void cost(CalculationContext context, int x, int y, int z, int des //C, D, etc determine the length of the fall BlockState below = context.get(destX, y - 2, destZ); - if (!MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ, below)) { + if (!MovementHelper.canWalkOn(context, destX, y - 2, destZ, below)) { dynamicFallCost(context, x, y, z, destX, destZ, totalCost, below, res); return; } @@ -110,6 +90,9 @@ public static void cost(CalculationContext context, int x, int y, int z, int des if (destDown.getBlock() == Blocks.LADDER || destDown.getBlock() == Blocks.VINE) { return; } + if (MovementHelper.canUseFrostWalker(context, destDown)) { // no need to check assumeWalkOnWater + return; // the water will freeze when we try to walk into it + } // we walk half the block plus 0.3 to get to the edge, then we walk the other 0.2 while simultaneously falling (math.max because of how it's in parallel) double walk = WALK_OFF_BLOCK_COST; @@ -131,7 +114,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, // and potentially replace the water we're going to fall into return false; } - if (!MovementHelper.canWalkThrough(context.bsi, destX, y - 2, destZ, below)) { + if (!MovementHelper.canWalkThrough(context, destX, y - 2, destZ, below)) { return false; } double costSoFar = 0; @@ -147,7 +130,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; if (MovementHelper.isWater(ontoBlock)) { - if (!MovementHelper.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { + if (!MovementHelper.canWalkThrough(context, destX, newY, destZ, ontoBlock)) { return false; } if (context.assumeWalkOnWater) { @@ -156,7 +139,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, if (MovementHelper.isFlowing(destX, newY, destZ, ontoBlock, context.bsi)) { return false; // TODO flowing check required here? } - if (!MovementHelper.canWalkOn(context.bsi, destX, newY - 1, destZ)) { + if (!MovementHelper.canWalkOn(context, destX, newY - 1, destZ)) { // we could punch right through the water into something else return false; } @@ -175,10 +158,10 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, effectiveStartHeight = newY; continue; } - if (MovementHelper.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { + if (MovementHelper.canWalkThrough(context, destX, newY, destZ, ontoBlock)) { continue; } - if (!MovementHelper.canWalkOn(context.bsi, destX, newY, destZ, ontoBlock)) { + if (!MovementHelper.canWalkOn(context, destX, newY, destZ, ontoBlock)) { return false; } if (MovementHelper.isBottomSlab(ontoBlock)) { @@ -204,6 +187,35 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, } } + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is a fall not a descend + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest.above(), dest); + } + + @Override + public void reset() { + super.reset(); + numTicks = 0; + forceSafeMode = false; + } + + /** + * Called by PathExecutor if needing safeMode can only be detected with knowledge about the next movement + */ + public void forceSafeMode() { + forceSafeMode = true; + } + @Override public MovementState updateState(MovementState state) { super.updateState(state); @@ -249,6 +261,9 @@ public MovementState updateState(MovementState state) { } public boolean safeMode() { + if (forceSafeMode) { + return true; + } // (dest - src) + dest is offset 1 more in the same direction // so it's the block we'd need to worry about running into if we decide to sprint straight through this descend BlockPos into = dest.subtract(src.below()).offset(dest); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 3637ca7ff..6d7dd885d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -57,93 +57,50 @@ private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPo super(baritone, start, end, new BetterBlockPos[]{dir1, dir1.above(), dir2, dir2.above(), end, end.above()}); } - @Override - protected boolean safeToCancel(MovementState state) { - //too simple. backfill does not work after cornering with this - //return MovementHelper.canWalkOn(ctx, ctx.playerFeet().down()); - LocalPlayer player = ctx.player(); - double offset = 0.25; - double x = player.position().x; - double y = player.position().y - 1; - double z = player.position().z; - //standard - if (ctx.playerFeet().equals(src)) { - return true; - } - //both corners are walkable - if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) - && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { - return true; - } - //we are in a likely unwalkable corner, check for a supporting block - if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) - || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { - return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); - } - return true; - } - - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is incorrect - } - return result.cost; - } - - @Override - protected Set calculateValidPositions() { - BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); - BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); - if (dest.y < src.y) { - return ImmutableSet.of(src, dest.above(), diagA, diagB, dest, diagA.below(), diagB.below()); - } - if (dest.y > src.y) { - return ImmutableSet.of(src, src.above(), diagA, diagB, dest, diagA.above(), diagB.above()); - } - return ImmutableSet.of(src, dest, diagA, diagB); - } - public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { - if (!MovementHelper.canWalkThrough(context.bsi, destX, y + 1, destZ)) { + if (!MovementHelper.canWalkThrough(context, destX, y + 1, destZ)) { return; } BlockState destInto = context.get(destX, y, destZ); + BlockState fromDown; boolean ascend = false; BlockState destWalkOn; boolean descend = false; - if (!MovementHelper.canWalkThrough(context.bsi, destX, y, destZ, destInto)) { + boolean frostWalker = false; + if (!MovementHelper.canWalkThrough(context, destX, y, destZ, destInto)) { ascend = true; - if (!context.allowDiagonalAscend || !MovementHelper.canWalkThrough(context.bsi, x, y + 2, z) || !MovementHelper.canWalkOn(context.bsi, destX, y, destZ, destInto) || !MovementHelper.canWalkThrough(context.bsi, destX, y + 2, destZ)) { + if (!context.allowDiagonalAscend || !MovementHelper.canWalkThrough(context, x, y + 2, z) || !MovementHelper.canWalkOn(context, destX, y, destZ, destInto) || !MovementHelper.canWalkThrough(context, destX, y + 2, destZ)) { return; } destWalkOn = destInto; + fromDown = context.get(x, y - 1, z); } else { destWalkOn = context.get(destX, y - 1, destZ); - if (!MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn)) { + fromDown = context.get(x, y - 1, z); + boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y - 1, z, fromDown); + frostWalker = standingOnABlock && MovementHelper.canUseFrostWalker(context, destWalkOn); + if (!frostWalker && !MovementHelper.canWalkOn(context, destX, y - 1, destZ, destWalkOn)) { descend = true; - if (!context.allowDiagonalDescend || !MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context.bsi, destX, y - 1, destZ, destWalkOn)) { + if (!context.allowDiagonalDescend || !MovementHelper.canWalkOn(context, destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context, destX, y - 1, destZ, destWalkOn)) { return; } } + frostWalker &= !context.assumeWalkOnWater; // do this after checking for descends because jesus can't prevent the water from freezing, it just prevents us from relying on the water freezing } double multiplier = WALK_ONE_BLOCK_COST; // For either possible soul sand, that affects half of our walking if (destWalkOn.getBlock() == Blocks.SOUL_SAND) { multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; + } else if (frostWalker) { + // frostwalker lets us walk on water without the penalty } else if (destWalkOn.getBlock() == Blocks.WATER) { multiplier += context.walkOnWaterOnePenalty * SQRT_2; } - Block fromDown = context.get(x, y - 1, z).getBlock(); - if (fromDown == Blocks.LADDER || fromDown == Blocks.VINE) { + Block fromDownBlock = fromDown.getBlock(); + if (fromDownBlock == Blocks.LADDER || fromDownBlock == Blocks.VINE) { return; } - if (fromDown == Blocks.SOUL_SAND) { + if (fromDownBlock == Blocks.SOUL_SAND) { multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; } BlockState cuttingOver1 = context.get(x, y - 1, destZ); @@ -170,17 +127,17 @@ public static void cost(CalculationContext context, int x, int y, int z, int des BlockState pb0 = context.get(x, y, destZ); BlockState pb2 = context.get(destX, y, z); if (ascend) { - boolean ATop = MovementHelper.canWalkThrough(context.bsi, x, y + 2, destZ); - boolean AMid = MovementHelper.canWalkThrough(context.bsi, x, y + 1, destZ); - boolean ALow = MovementHelper.canWalkThrough(context.bsi, x, y, destZ, pb0); - boolean BTop = MovementHelper.canWalkThrough(context.bsi, destX, y + 2, z); - boolean BMid = MovementHelper.canWalkThrough(context.bsi, destX, y + 1, z); - boolean BLow = MovementHelper.canWalkThrough(context.bsi, destX, y, z, pb2); + boolean ATop = MovementHelper.canWalkThrough(context, x, y + 2, destZ); + boolean AMid = MovementHelper.canWalkThrough(context, x, y + 1, destZ); + boolean ALow = MovementHelper.canWalkThrough(context, x, y, destZ, pb0); + boolean BTop = MovementHelper.canWalkThrough(context, destX, y + 2, z); + boolean BMid = MovementHelper.canWalkThrough(context, destX, y + 1, z); + boolean BLow = MovementHelper.canWalkThrough(context, destX, y, z, pb2); if ((!(ATop && AMid && ALow) && !(BTop && BMid && BLow)) // no option || MovementHelper.avoidWalkingInto(pb0) // bad || MovementHelper.avoidWalkingInto(pb2) // bad - || (ATop && AMid && MovementHelper.canWalkOn(context.bsi, x, y, destZ, pb0)) // we could just ascend - || (BTop && BMid && MovementHelper.canWalkOn(context.bsi, destX, y, z, pb2)) // we could just ascend + || (ATop && AMid && MovementHelper.canWalkOn(context, x, y, destZ, pb0)) // we could just ascend + || (BTop && BMid && MovementHelper.canWalkOn(context, destX, y, z, pb2)) // we could just ascend || (!ATop && AMid && ALow) // head bonk A || (!BTop && BMid && BLow)) { // head bonk B return; @@ -244,6 +201,58 @@ public static void cost(CalculationContext context, int x, int y, int z, int des res.z = destZ; } + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is incorrect + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); + BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); + if (dest.y < src.y) { + return ImmutableSet.of(src, dest.above(), diagA, diagB, dest, diagA.below(), diagB.below()); + } + if (dest.y > src.y) { + return ImmutableSet.of(src, src.above(), diagA, diagB, dest, diagA.above(), diagB.above()); + } + return ImmutableSet.of(src, dest, diagA, diagB); + } + + @Override + protected boolean safeToCancel(MovementState state) { + //too simple. backfill does not work after cornering with this + //return context.precomputedData.canWalkOn(ctx, ctx.playerFeet().down()); + LocalPlayer player = ctx.player(); + double offset = 0.25; + double x = player.position().x; + double y = player.position().y - 1; + double z = player.position().z; + //standard + if (ctx.playerFeet().equals(src)) { + return true; + } + //both corners are walkable + if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) + && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { + return true; + } + //we are in a likely unwalkable corner, check for a supporting block + if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) + || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { + return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); + } + return true; + } + @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 45d18d1c7..154abddc7 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -59,7 +59,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { if (!context.allowDownward) { return COST_INF; } - if (!MovementHelper.canWalkOn(context.bsi, x, y - 2, z)) { + if (!MovementHelper.canWalkOn(context, x, y - 2, z)) { return COST_INF; } BlockState down = context.get(x, y - 1, z); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index f41504520..505921524 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -177,12 +177,6 @@ private Direction avoid() { return null; } - private boolean willPlaceBucket() { - CalculationContext context = new CalculationContext(baritone); - MutableMoveResult result = new MutableMoveResult(); - return MovementDescend.dynamicFallCost(context, src.x, src.y, src.z, dest.x, dest.z, 0, context.get(dest.x, src.y - 2, dest.z), result); - } - @Override public boolean safeToCancel(MovementState state) { // if we haven't started walking off the edge yet, or if we're in the process of breaking blocks before doing the fall @@ -190,6 +184,12 @@ public boolean safeToCancel(MovementState state) { return ctx.playerFeet().equals(src) || state.getStatus() != MovementStatus.RUNNING; } + private boolean willPlaceBucket() { + CalculationContext context = new CalculationContext(baritone); + MutableMoveResult result = new MutableMoveResult(); + return MovementDescend.dynamicFallCost(context, src.x, src.y, src.z, dest.x, dest.z, 0, context.get(dest.x, src.y - 2, dest.z), result); + } + @Override protected boolean prepared(MovementState state) { if (state.getStatus() == MovementStatus.WAITING) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 483fdc048..c46cf68bd 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -17,6 +17,7 @@ package baritone.pathing.movement.movements; +import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.BetterBlockPos; @@ -32,7 +33,6 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.StairBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.WaterFluid; import java.util.HashSet; @@ -75,7 +75,7 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi return; } BlockState adj = context.get(x + xDiff, y - 1, z + zDiff); - if (MovementHelper.canWalkOn(context.bsi, x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) + if (MovementHelper.canWalkOn(context, x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) // second most common case -- we could just traverse not parkour return; } @@ -92,9 +92,16 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi return; } BlockState standingOn = context.get(x, y - 1, z); - if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof StairBlock || MovementHelper.isBottomSlab(standingOn) || standingOn.getFluidState().getType() != Fluids.EMPTY) { + if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof StairBlock || MovementHelper.isBottomSlab(standingOn)) { return; } + // we can't jump from (frozen) water with assumeWalkOnWater because we can't be sure it will be frozen + if (context.assumeWalkOnWater && !standingOn.getFluidState().isEmpty()) { + return; + } + if (!context.get(x, y, z).getFluidState().isEmpty()) { + return; // can't jump out of water + } int maxJump; if (standingOn.getBlock() == Blocks.SOUL_SAND) { maxJump = 2; // 1 block gap @@ -122,8 +129,8 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi // check for ascend landing position BlockState destInto = context.bsi.get0(destX, y, destZ); - if (!MovementHelper.fullyPassable(context.bsi.access, context.bsi.isPassableBlockPos.set(destX, y, destZ), destInto)) { - if (i <= 3 && context.allowParkourAscend && context.canSprint && MovementHelper.canWalkOn(context.bsi, destX, y, destZ, destInto) && checkOvershootSafety(context.bsi, destX + xDiff, y + 1, destZ + zDiff)) { + if (!MovementHelper.fullyPassable(context, destX, y, destZ, destInto)) { + if (i <= 3 && context.allowParkourAscend && context.canSprint && MovementHelper.canWalkOn(context, destX, y, destZ, destInto) && checkOvershootSafety(context.bsi, destX + xDiff, y + 1, destZ + zDiff)) { res.x = destX; res.y = y + 1; res.z = destZ; @@ -136,7 +143,10 @@ public static void cost(CalculationContext context, int x, int y, int z, Directi // check for flat landing position BlockState landingOn = context.bsi.get0(destX, y - 1, destZ); // farmland needs to be canWalkOn otherwise farm can never work at all, but we want to specifically disallow ending a jump on farmland haha - if (landingOn.getBlock() != Blocks.FARMLAND && MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, landingOn)) { + // frostwalker works here because we can't jump from possibly unfrozen water + if ((landingOn.getBlock() != Blocks.FARMLAND && MovementHelper.canWalkOn(context, destX, y - 1, destZ, landingOn)) + || (Math.min(16, context.frostWalker + 2) >= i && MovementHelper.canUseFrostWalker(context, landingOn)) + ) { if (checkOvershootSafety(context.bsi, destX + xDiff, y, destZ + zDiff)) { res.x = destX; res.y = y; @@ -266,7 +276,12 @@ public MovementState updateState(MovementState state) { } } else if (!ctx.playerFeet().equals(src)) { if (ctx.playerFeet().equals(src.relative(direction)) || ctx.player().position().y - src.y > 0.0001) { - if (!MovementHelper.canWalkOn(ctx, dest.below()) && !ctx.player().isOnGround() && MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), true, false) == PlaceResult.READY_TO_PLACE) { + if (Baritone.settings().allowPlace.value // see PR #3775 + && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway() + && !MovementHelper.canWalkOn(ctx, dest.below()) + && !ctx.player().isOnGround() + && MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), true, false) == PlaceResult.READY_TO_PLACE + ) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory state.setInput(Input.CLICK_RIGHT, true); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 6e6a41351..e0fba9601 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -100,6 +100,10 @@ public static double cost(CalculationContext context, int x, int y, int z) { // if we're standing on water and assumeWalkOnWater is false, we must have ascended to here, or sneak backplaced, so it is possible to pillar again return COST_INF; } + if ((from == Blocks.LILY_PAD || from instanceof CarpetBlock) && !fromDown.getFluidState().isEmpty()) { + // to ascend here we'd have to break the block we are standing on + return COST_INF; + } double hardness = MovementHelper.getMiningDurationTicks(context, x, y + 2, z, toBreak, true); if (hardness >= COST_INF) { return COST_INF; @@ -119,7 +123,7 @@ public static double cost(CalculationContext context, int x, int y, int z) { } } // this is commented because it may have had a purpose, but it's very unclear what it was. it's from the minebot era. - //if (!MovementHelper.canWalkOn(chkPos, check) || MovementHelper.canWalkThrough(chkPos, check)) {//if the block above where we want to break is not a full block, don't do it + //if (!MovementHelper.canWalkOn(context, chkPos, check) || MovementHelper.canWalkThrough(context, chkPos, check)) {//if the block above where we want to break is not a full block, don't do it // TODO why does canWalkThrough mean this action is COST_INF? // FallingBlock makes sense, and !canWalkOn deals with weird cases like if it were lava // but I don't understand why canWalkThrough makes it impossible diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 52cbd0968..ffb93c0ef 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -36,7 +36,6 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.SlabType; -import net.minecraft.world.level.material.WaterFluid; import net.minecraft.world.phys.Vec3; import java.util.Optional; @@ -73,9 +72,11 @@ public static double cost(CalculationContext context, int x, int y, int z, int d BlockState pb0 = context.get(destX, y + 1, destZ); BlockState pb1 = context.get(destX, y, destZ); BlockState destOn = context.get(destX, y - 1, destZ); - BlockState down = context.get(x, y - 1, z); - Block srcDown = down.getBlock(); - if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge + BlockState srcDown = context.get(x, y - 1, z); + Block srcDownBlock = srcDown.getBlock(); + boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y - 1, z, srcDown); + boolean frostWalker = standingOnABlock && !context.assumeWalkOnWater && MovementHelper.canUseFrostWalker(context, destOn); + if (frostWalker || MovementHelper.canWalkOn(context, destX, y - 1, destZ, destOn)) { //this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; boolean water = false; if (MovementHelper.isWater(pb0) || MovementHelper.isWater(pb1)) { @@ -84,10 +85,12 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } else { if (destOn.getBlock() == Blocks.SOUL_SAND) { WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; + } else if (frostWalker) { + // with frostwalker we can walk on water without the penalty, if we are sure we won't be using jesus } else if (destOn.getBlock() == Blocks.WATER) { WC += context.walkOnWaterOnePenalty; } - if (srcDown == Blocks.SOUL_SAND) { + if (srcDownBlock == Blocks.SOUL_SAND) { WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; } } @@ -105,13 +108,13 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } return WC; } - if (srcDown == Blocks.LADDER || srcDown == Blocks.VINE) { + if (srcDownBlock == Blocks.LADDER || srcDownBlock == Blocks.VINE) { hardness1 *= 5; hardness2 *= 5; } return WC + hardness1 + hardness2; } else {//this is a bridge, so we need to place a block - if (srcDown == Blocks.LADDER || srcDown == Blocks.VINE) { + if (srcDownBlock == Blocks.LADDER || srcDownBlock == Blocks.VINE) { return COST_INF; } if (MovementHelper.isReplaceable(destX, y - 1, destZ, destOn, context.bsi)) { @@ -142,12 +145,16 @@ public static double cost(CalculationContext context, int x, int y, int z, int d } } // now that we've checked all possible directions to side place, we actually need to backplace - if (srcDown == Blocks.SOUL_SAND || (srcDown instanceof SlabBlock && down.getValue(SlabBlock.TYPE) != SlabType.DOUBLE)) { + if (srcDownBlock == Blocks.SOUL_SAND || (srcDownBlock instanceof SlabBlock && srcDown.getValue(SlabBlock.TYPE) != SlabType.DOUBLE)) { return COST_INF; // can't sneak and backplace against soul sand or half slabs (regardless of whether it's top half or bottom half) =/ } - if (down.getFluidState().getType() instanceof WaterFluid) { + if (!standingOnABlock) { // standing on water / swimming return COST_INF; // this is obviously impossible } + Block blockSrc = context.getBlock(x, y, z); + if ((blockSrc == Blocks.LILY_PAD || blockSrc instanceof CarpetBlock) && !srcDown.getFluidState().isEmpty()) { + return COST_INF; // we can stand on these but can't place against them + } WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol return WC + placeCost + hardness1 + hardness2; } @@ -231,7 +238,7 @@ public MovementState updateState(MovementState state) { } } - boolean isTheBridgeBlockThere = MovementHelper.canWalkOn(ctx, positionToPlace) || ladder; + boolean isTheBridgeBlockThere = MovementHelper.canWalkOn(ctx, positionToPlace) || ladder || MovementHelper.canUseFrostWalker(ctx, positionToPlace); BlockPos feet = ctx.playerFeet(); if (feet.getY() != dest.getY() && !ladder) { logDebug("Wrong Y coordinate"); diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index ce06a3b84..e4faf0ba0 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -396,45 +396,6 @@ private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement cu return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; } - private Tuple overrideFall(MovementFall movement) { - Vec3i dir = movement.getDirection(); - if (dir.getY() < -3) { - return null; - } - if (!movement.toBreakCached.isEmpty()) { - return null; // it's breaking - } - Vec3i flatDir = new Vec3i(dir.getX(), 0, dir.getZ()); - int i; - outer: - for (i = pathPosition + 1; i < path.length() - 1 && i < pathPosition + 3; i++) { - IMovement next = path.movements().get(i); - if (!(next instanceof MovementTraverse)) { - break; - } - if (!flatDir.equals(next.getDirection())) { - break; - } - for (int y = next.getDest().y; y <= movement.getSrc().y + 1; y++) { - BlockPos chk = new BlockPos(next.getDest().x, y, next.getDest().z); - if (!MovementHelper.fullyPassable(ctx, chk)) { - break outer; - } - } - if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { - break; - } - } - i--; - if (i == pathPosition) { - return null; // no valid extension exists - } - double len = i - pathPosition - 0.4; - return new Tuple<>( - new Vec3(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), - movement.getDest().offset(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); - } - private Tuple closestPathPos(IPath path) { double best = -1; BlockPos bestPos = null; @@ -457,7 +418,7 @@ private boolean shouldSprintNextTick() { behavior.baritone.getInputOverrideHandler().setInputForceState(Input.SPRINT, false); // first and foremost, if allowSprint is off, or if we don't have enough hunger, don't try and sprint - if (!new CalculationContext(behavior.baritone).canSprint) { + if (!new CalculationContext(behavior.baritone, false).canSprint) { return false; } IMovement current = path.movements().get(pathPosition); @@ -487,6 +448,26 @@ private boolean shouldSprintNextTick() { // however, descend and ascend don't request sprinting, because they don't know the context of what movement comes after it if (current instanceof MovementDescend) { + if (pathPosition < path.length() - 2) { + // keep this out of onTick, even if that means a tick of delay before it has an effect + IMovement next = path.movements().get(pathPosition + 1); + if (MovementHelper.canUseFrostWalker(ctx, next.getDest().below())) { + // frostwalker only works if you cross the edge of the block on ground so in some cases we may not overshoot + // Since MovementDescend can't know the next movement we have to tell it + if (next instanceof MovementTraverse || next instanceof MovementParkour) { + boolean couldPlaceInstead = Baritone.settings().allowPlace.value && behavior.baritone.getInventoryBehavior().hasGenericThrowaway() && next instanceof MovementParkour; // traverse doesn't react fast enough + // this is true if the next movement does not ascend or descends and goes into the same cardinal direction (N-NE-E-SE-S-SW-W-NW) as the descend + // in that case current.getDirection() is e.g. (0, -1, 1) and next.getDirection() is e.g. (0, 0, 3) so the cross product of (0, 0, 1) and (0, 0, 3) is taken, which is (0, 0, 0) because the vectors are colinear (don't form a plane) + // since movements in exactly the opposite direction (e.g. descend (0, -1, 1) and traverse (0, 0, -1)) would also pass this check we also have to rule out that case + // we can do that by adding the directions because traverse is always 1 long like descend and parkour can't jump through current.getSrc().down() + boolean sameFlatDirection = !current.getDirection().above().offset(next.getDirection()).equals(BlockPos.ZERO) + && current.getDirection().above().cross(next.getDirection()).equals(BlockPos.ZERO); // here's why you learn maths in school + if (sameFlatDirection && !couldPlaceInstead) { + ((MovementDescend) current).forceSafeMode(); + } + } + } + } if (((MovementDescend) current).safeMode() && !((MovementDescend) current).skipToAscend()) { logDebug("Sprinting would be unsafe"); return false; @@ -561,6 +542,45 @@ private boolean shouldSprintNextTick() { return false; } + private Tuple overrideFall(MovementFall movement) { + Vec3i dir = movement.getDirection(); + if (dir.getY() < -3) { + return null; + } + if (!movement.toBreakCached.isEmpty()) { + return null; // it's breaking + } + Vec3i flatDir = new Vec3i(dir.getX(), 0, dir.getZ()); + int i; + outer: + for (i = pathPosition + 1; i < path.length() - 1 && i < pathPosition + 3; i++) { + IMovement next = path.movements().get(i); + if (!(next instanceof MovementTraverse)) { + break; + } + if (!flatDir.equals(next.getDirection())) { + break; + } + for (int y = next.getDest().y; y <= movement.getSrc().y + 1; y++) { + BlockPos chk = new BlockPos(next.getDest().x, y, next.getDest().z); + if (!MovementHelper.fullyPassable(ctx, chk)) { + break outer; + } + } + if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { + break; + } + } + i--; + if (i == pathPosition) { + return null; // no valid extension exists + } + double len = i - pathPosition - 0.4; + return new Tuple<>( + new Vec3(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), + movement.getDest().offset(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); + } + private void onChangeInPathPosition() { clearKeys(); ticksOnCurrent = 0; diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java new file mode 100644 index 000000000..9d7394254 --- /dev/null +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -0,0 +1,117 @@ +/* + * 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.pathing.precompute; + +import baritone.pathing.movement.MovementHelper; +import baritone.utils.BlockStateInterface; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +import static baritone.pathing.precompute.Ternary.MAYBE; +import static baritone.pathing.precompute.Ternary.YES; + +public class PrecomputedData { + + private final int[] data = new int[Block.BLOCK_STATE_REGISTRY.size()]; + + private static final int COMPLETED_MASK = 1 << 0; + private static final int CAN_WALK_ON_MASK = 1 << 1; + private static final int CAN_WALK_ON_SPECIAL_MASK = 1 << 2; + private static final int CAN_WALK_THROUGH_MASK = 1 << 3; + private static final int CAN_WALK_THROUGH_SPECIAL_MASK = 1 << 4; + private static final int FULLY_PASSABLE_MASK = 1 << 5; + private static final int FULLY_PASSABLE_SPECIAL_MASK = 1 << 6; + + private int fillData(int id, BlockState state) { + int blockData = 0; + + Ternary canWalkOnState = MovementHelper.canWalkOnBlockState(state); + if (canWalkOnState == YES) { + blockData |= CAN_WALK_ON_MASK; + } + if (canWalkOnState == MAYBE) { + blockData |= CAN_WALK_ON_SPECIAL_MASK; + } + + Ternary canWalkThroughState = MovementHelper.canWalkThroughBlockState(state); + if (canWalkThroughState == YES) { + blockData |= CAN_WALK_THROUGH_MASK; + } + if (canWalkThroughState == MAYBE) { + blockData |= CAN_WALK_THROUGH_SPECIAL_MASK; + } + + Ternary fullyPassableState = MovementHelper.fullyPassableBlockState(state); + if (fullyPassableState == YES) { + blockData |= FULLY_PASSABLE_MASK; + } + if (fullyPassableState == MAYBE) { + blockData |= FULLY_PASSABLE_SPECIAL_MASK; + } + + blockData |= COMPLETED_MASK; + + data[id] = blockData; // in theory, this is thread "safe" because every thread should compute the exact same int to write? + return blockData; + } + + public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + int id = Block.BLOCK_STATE_REGISTRY.getId(state); + int blockData = data[id]; + + if ((blockData & COMPLETED_MASK) == 0) { // we need to fill in the data + blockData = fillData(id, state); + } + + if ((blockData & CAN_WALK_ON_SPECIAL_MASK) != 0) { + return MovementHelper.canWalkOnPosition(bsi, x, y, z, state); + } else { + return (blockData & CAN_WALK_ON_MASK) != 0; + } + } + + public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + int id = Block.BLOCK_STATE_REGISTRY.getId(state); + int blockData = data[id]; + + if ((blockData & COMPLETED_MASK) == 0) { // we need to fill in the data + blockData = fillData(id, state); + } + + if ((blockData & CAN_WALK_THROUGH_SPECIAL_MASK) != 0) { + return MovementHelper.canWalkThroughPosition(bsi, x, y, z, state); + } else { + return (blockData & CAN_WALK_THROUGH_MASK) != 0; + } + } + + public boolean fullyPassable(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + int id = Block.BLOCK_STATE_REGISTRY.getId(state); + int blockData = data[id]; + + if ((blockData & COMPLETED_MASK) == 0) { // we need to fill in the data + blockData = fillData(id, state); + } + + if ((blockData & FULLY_PASSABLE_SPECIAL_MASK) != 0) { + return MovementHelper.fullyPassablePosition(bsi, x, y, z, state); + } else { + return (blockData & FULLY_PASSABLE_MASK) != 0; + } + } +} diff --git a/src/main/java/baritone/pathing/precompute/Ternary.java b/src/main/java/baritone/pathing/precompute/Ternary.java new file mode 100644 index 000000000..d4d8424e0 --- /dev/null +++ b/src/main/java/baritone/pathing/precompute/Ternary.java @@ -0,0 +1,22 @@ +/* + * 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.pathing.precompute; + +public enum Ternary { + YES, MAYBE, NO +} diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 9ca546840..8b745d95b 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -43,10 +43,11 @@ import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; -import baritone.utils.Trail; import baritone.utils.schematic.MapArtSchematic; import baritone.utils.schematic.SchematicSystem; import baritone.utils.schematic.SelectionSchematic; +import baritone.utils.schematic.format.defaults.LitematicaSchematic; +import baritone.utils.schematic.litematica.LitematicaHelper; import baritone.utils.schematic.schematica.SchematicaHelper; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -55,6 +56,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; +import net.minecraft.nbt.NbtIo; import net.minecraft.network.chat.Component; import net.minecraft.util.Tuple; import net.minecraft.world.InteractionHand; @@ -70,17 +72,26 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import javax.annotation.Nullable; import java.io.File; import java.io.FileInputStream; +import java.nio.file.Files; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; import static baritone.api.pathing.movement.ActionCosts.COST_INF; public final class BuilderProcess extends BaritoneProcessHelper implements IBuilderProcess { + public static final Set> orientationProps = + ImmutableSet.of( + RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, + StairBlock.FACING, StairBlock.HALF, StairBlock.SHAPE, + PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, + TrapDoorBlock.OPEN, TrapDoorBlock.HALF + ); private HashSet incorrectPositions; private LongOpenHashSet observedCompleted; // positions that are completed even if they're out of render distance and we can't make sure right now private String name; @@ -92,18 +103,6 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private int layer; private int numRepeats; private List approxPlaceable; - private Map missing; - private boolean active; - private Stack stateStack = new Stack<>(); - private Vec3i schemSize; - private boolean fromAltoclefFinished; - public static final Set> orientationProps = - ImmutableSet.of( - RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, - StairBlock.FACING, StairBlock.HALF, StairBlock.SHAPE, - PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, - TrapDoorBlock.OPEN, TrapDoorBlock.HALF - ); private final Map protectedItems = new HashMap<>(); private final Function, Comparable>, PropertyContainer> PROPERTY_ENTRY_TO_STRING_FUNCTION = new Function<>() { public PropertyContainer apply(@Nullable Map.Entry, Comparable> entry) { @@ -122,21 +121,49 @@ private > String getName(Property property, Comparabl return property.getName((T) comparable); } }; + public int stopAtHeight = 0; + private boolean fromAltoclef; + private Map missing; + private boolean active; + private Stack stateStack = new Stack<>(); + private Vec3i schemSize; + private boolean fromAltoclefFinished; public BuilderProcess(Baritone baritone) { super(baritone); } + private Map sbtMissing; + private Map blockBreakHistory = new HashMap<>(); + + private static Vec3[] aabbSideMultipliers(Direction side) { + switch (side) { + case UP: + return new Vec3[]{new Vec3(0.5, 1, 0.5), new Vec3(0.1, 1, 0.5), new Vec3(0.9, 1, 0.5), new Vec3(0.5, 1, 0.1), new Vec3(0.5, 1, 0.9)}; + case DOWN: + return new Vec3[]{new Vec3(0.5, 0, 0.5), new Vec3(0.1, 0, 0.5), new Vec3(0.9, 0, 0.5), new Vec3(0.5, 0, 0.1), new Vec3(0.5, 0, 0.9)}; + case NORTH: + case SOUTH: + case EAST: + case WEST: + double x = side.getStepX() == 0 ? 0.5 : (1 + side.getStepX()) / 2D; + double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D; + return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)}; + default: // null + throw new IllegalStateException(); + } + } + @Override public void build(String name, ISchematic schematic, Vec3i origin) { //Shouldn't get initially called if (this.fromAltoclef && this.stateStack.isEmpty()) { pushState(); } - this.name = name; this.schematic = schematic; this.realSchematic = null; + boolean buildingSelectionSchematic = schematic instanceof SelectionSchematic; if (!Baritone.settings().buildSubstitutes.value.isEmpty()) { this.schematic = new SubstituteSchematic(this.schematic, Baritone.settings().buildSubstitutes.value); } @@ -155,25 +182,41 @@ public void build(String name, ISchematic schematic, Vec3i origin) { this.origin = new Vec3i(x, y, z); this.paused = false; this.layer = Baritone.settings().startAtLayer.value; + this.stopAtHeight = schematic.heightY(); + if (Baritone.settings().buildOnlySelection.value && buildingSelectionSchematic) { // currently redundant but safer maybe + if (baritone.getSelectionManager().getSelections().length == 0) { + logDirect("Poor little kitten forgot to set a selection while BuildOnlySelection is true"); + this.stopAtHeight = 0; + } else if (Baritone.settings().buildInLayers.value) { + OptionalInt minim = Stream.of(baritone.getSelectionManager().getSelections()).mapToInt(sel -> sel.min().y).min(); + OptionalInt maxim = Stream.of(baritone.getSelectionManager().getSelections()).mapToInt(sel -> sel.max().y).max(); + if (minim.isPresent() && maxim.isPresent()) { + int startAtHeight = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; + this.stopAtHeight = (Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y) + 1; + this.layer = Math.max(this.layer, startAtHeight / Baritone.settings().layerHeight.value); // startAtLayer or startAtHeight, whichever is highest + logDebug(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); + logDebug(String.format("Selection starts at y=%s and ends at y=%s", minim.getAsInt(), maxim.getAsInt())); + logDebug(String.format("Considering relevant height %s - %s", startAtHeight, this.stopAtHeight)); + } + } + } + this.numRepeats = 0; this.observedCompleted = new LongOpenHashSet(); + this.incorrectPositions = null; this.active = true; - - //stopProtectItemOfMissing(); - if (this.missing != null) { this.missing.clear(); } else { missing = new HashMap<>(); } - this.schemSize = new Vec3i(schematic.widthX(), schematic.heightY(), schematic.lengthZ()); this.fromAltoclefFinished = false; this.fromAltoclef = false; } private void protectItemOfMissing() { - if (missing != null && missing.keySet() != null) { + if (missing != null) { protectedItems.putAll(missing); protectedItems.keySet().forEach(e -> { if (!AltoClefSettings.getInstance().isItemProtected(e.getBlock().asItem())) { @@ -183,42 +226,11 @@ private void protectItemOfMissing() { } } - private void stopProtectItemOfMissing() { - if (protectedItems != null && protectedItems.keySet() != null && protectedItems.size() > 0) { - protectedItems.keySet().forEach(e -> { - if (AltoClefSettings.getInstance().isItemProtected(e.getBlock().asItem())) { - AltoClefSettings.getInstance().stopProtectingItem(e.getBlock().asItem()); - } - }); - } - protectedItems.clear(); - } - @Override public Vec3i getSchemSize() { return schemSize; } - private void pushState() { - stateStack.clear(); - stateStack.push(this.approxPlaceable); - stateStack.push(this.ticks); - stateStack.push(this.incorrectPositions); - stateStack.push(this.name); - stateStack.push(this.schematic); - stateStack.push(this.realSchematic); - stateStack.push(this.origin); - stateStack.push(this.paused); - stateStack.push(this.layer); - stateStack.push(this.numRepeats); - stateStack.push(this.observedCompleted); - stateStack.push(this.active); - stateStack.push(this.missing); - stateStack.push(this.schemSize); - stateStack.push(this.fromAltoclefFinished); - stateStack.push(this.fromAltoclef); - } - @Override public void popStack() { if (this.stateStack.isEmpty()) { @@ -241,37 +253,13 @@ public void popStack() { this.incorrectPositions = (HashSet) stateStack.pop(); this.ticks = (int) stateStack.pop(); this.approxPlaceable = (List) stateStack.pop(); - pushState(); - if (!stateStack.isEmpty()) { logDebug("ERROR: state stack was not empty after state restoration. Will throw away the rest for now."); stateStack.clear(); } } - private boolean fromAltoclef; - private Map sbtMissing; - private Map blockBreakHistory = new HashMap<>(); - - private static Vec3[] aabbSideMultipliers(Direction side) { - switch (side) { - case UP: - return new Vec3[]{new Vec3(0.5, 1, 0.5), new Vec3(0.1, 1, 0.5), new Vec3(0.9, 1, 0.5), new Vec3(0.5, 1, 0.1), new Vec3(0.5, 1, 0.9)}; - case DOWN: - return new Vec3[]{new Vec3(0.5, 0, 0.5), new Vec3(0.1, 0, 0.5), new Vec3(0.9, 0, 0.5), new Vec3(0.5, 0, 0.1), new Vec3(0.5, 0, 0.9)}; - case NORTH: - case SOUTH: - case EAST: - case WEST: - double x = side.getStepX() == 0 ? 0.5 : (1 + side.getStepX()) / 2D; - double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D; - return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)}; - default: // null - throw new IllegalStateException(); - } - } - @Override public boolean clearState() { final boolean isEmpty = !stateStack.isEmpty(); @@ -284,6 +272,31 @@ public boolean isFromAltoclefFinished() { return this.fromAltoclefFinished; } + private void stopProtectItemOfMissing() { + if (protectedItems != null && protectedItems.size() > 0) { + protectedItems.keySet().forEach(e -> { + if (AltoClefSettings.getInstance().isItemProtected(e.getBlock().asItem())) { + AltoClefSettings.getInstance().stopProtectingItem(e.getBlock().asItem()); + } + }); + } + assert protectedItems != null; + protectedItems.clear(); + } + + public void resume() { + if (!this.stateStack.isEmpty()) { + popStack(); + } + + this.paused = false; + this.active = true; + } + + public void pause() { + paused = true; + } + @Override public boolean build(String name, File schematic, Vec3i origin) { Optional format = SchematicSystem.INSTANCE.getByFile(schematic); @@ -317,19 +330,6 @@ public boolean build(String schematicFile, BlockPos origin) { return IBuilderProcess.super.build(schematicFile, origin); } - public void resume() { - if (!this.stateStack.isEmpty()) { - popStack(); - } - - this.paused = false; - this.active = true; - } - - public void pause() { - paused = true; - } - @Override public void buildOpenSchematic() { if (SchematicaHelper.isSchematicaPresent()) { @@ -355,8 +355,8 @@ public void buildOpenSchematic() { } @Override - public void buildOpenLitematic(int i) { - + public boolean isPaused() { + return paused; } public void clearArea(BlockPos corner1, BlockPos corner2) { @@ -368,68 +368,50 @@ public void clearArea(BlockPos corner1, BlockPos corner2) { } @Override - public void reset() { - onLostControl(); - } - - @Override - public Map getMissing() { - if (this.sbtMissing == null) this.sbtMissing = new HashMap<>(); - if (this.fromAltoclef && this.missing != null) { - this.sbtMissing.clear(); - this.sbtMissing.putAll(this.missing); + public void buildOpenLitematic(int i) { + if (LitematicaHelper.isLitematicaPresent()) { + //if java.lang.NoSuchMethodError is thrown see comment in SchematicPlacementManager + if (LitematicaHelper.hasLoadedSchematic()) { + String name = LitematicaHelper.getName(i); + try { + LitematicaSchematic schematic1 = new LitematicaSchematic(NbtIo.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())), false); + Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i); + LitematicaSchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); + build(name, schematic2, correctedOrigin); + } catch (Exception e) { + logDirect("Schematic File could not be loaded."); + } + } else { + logDirect("No schematic currently loaded"); + } + } else { + logDirect("Litematica is not present"); } - return new HashMap<>(this.sbtMissing); - //return (this.fromAltoclef) ? new HashMap<>(this.missing) : null; } @Override - public List getApproxPlaceable() { - return this.approxPlaceable; + public void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef) { + this.build(name, schematic, origin); + this.fromAltoclef = fromAltoclef; } @Override - public boolean isActive() { - return active;//schematic != null && !paused; + public boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef) { + final boolean bl = this.build(name, schematic, origin); + this.fromAltoclef = fromAltoclef; + return bl; } - public BlockState placeAt(int x, int y, int z, BlockState current) { - if (this.schematic == null) { - return null; - } - if (!schematic.inSchematic(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current)) { - return null; - } - - BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current, this.approxPlaceable); - if (state.getBlock() instanceof AirBlock) { - return null; - } - return state; + @Override + public List getApproxPlaceable() { + return new ArrayList<>(approxPlaceable); } - private boolean blockPosMatches(final BlockPos pos1, final BlockPos pos2) { - return (pos1.getX() == pos2.getX() && pos1.getY() == pos2.getY() && pos1.getZ() == pos2.getZ()); + @Override + public boolean isActive() { + return schematic != null; } - /*private boolean isBlacklistedByAltoclef(final BlockPos pos) { - return this.ignoredBlocksInMesh.stream().anyMatch(e -> blockPosMatches(e, pos)); - }*/ - - /*public void decideToIgnoreInSchematic(BetterBlockPos positionToPlace) { - if (isActive() && isFromAltoclef()) { - // I was too lazy to check which one should be checked - if ((this.realSchematic != null && realSchematic.inSchematic(positionToPlace.x, positionToPlace.y, positionToPlace.z, ctx.world().getBlockState(positionToPlace))) - || (this.schematic != null && schematic.inSchematic(positionToPlace.x, positionToPlace.y, positionToPlace.z, ctx.world().getBlockState(positionToPlace)))) { - BlockState state = ctx.world().getBlockState(positionToPlace); - if (state.getBlock() instanceof AirBlock) { - System.out.println("where banana?"); - this.ignoredBlocksInMesh.add(positionToPlace); - } - } - } - }*/ - private Optional> toBreakNearPlayer(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); BetterBlockPos pathStart = baritone.getPathingBehavior().pathStart(); @@ -442,17 +424,10 @@ private Optional> toBreakNearPlayer(BuilderCalcu if (dy == -1 && x == pathStart.x && z == pathStart.z) { continue; // dont mine what we're supported by, but not directly standing on } - BlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); if (desired == null) { continue; // irrelevant } - - final BlockPos tmp = new BlockPos(x, y, z); - if (anyHistoryMatch(tmp) && breakLimitExceeded(tmp)) { - continue; - } - BlockState curr = bcc.bsi.get0(x, y, z); if (!(curr.getBlock() instanceof AirBlock) && !(curr.getBlock() == Blocks.WATER || curr.getBlock() == Blocks.LAVA) && !valid(curr, desired, false)) { BetterBlockPos pos = new BetterBlockPos(x, y, z); @@ -467,15 +442,24 @@ private Optional> toBreakNearPlayer(BuilderCalcu return Optional.empty(); } - @Override - public boolean isPaused() { - return paused; + public BlockState placeAt(int x, int y, int z, BlockState current) { + if (!isActive()) { + return null; + } + if (!schematic.inSchematic(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current)) { + return null; + } + BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current, this.approxPlaceable); + if (state.getBlock() instanceof AirBlock) { + return null; + } + return state; } private Optional searchForPlacables(BuilderCalculationContext bcc, List desirableOnHotbar) { BetterBlockPos center = ctx.playerFeet(); for (int dx = -5; dx <= 5; dx++) { - for (int dy = -5; dy <= 3; dy++) { // maybe do dy <= 5 because range seems like to be 5 + for (int dy = -5; dy <= 1; dy++) { for (int dz = -5; dz <= 5; dz++) { int x = center.x + dx; int y = center.y + dy; @@ -514,10 +498,6 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in if (MovementHelper.isReplaceable(placeAgainstPos.x, placeAgainstPos.y, placeAgainstPos.z, placeAgainstState, bsi)) { continue; } - if (placeAgainstState.getBlock() instanceof AirBlock) { - // isReplacable used to check for this, but we changed that. - continue; - } if (!toPlace.canSurvive(ctx.world(), new BetterBlockPos(x, y, z))) { continue; } @@ -547,19 +527,6 @@ public boolean isFromAltoclef() { return this.fromAltoclef; } - @Override - public void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef) { - this.build(name, schematic, origin); - this.fromAltoclef = fromAltoclef; - } - - @Override - public boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef) { - final boolean bl = this.build(name, schematic, origin); - this.fromAltoclef = fromAltoclef; - return bl; - } - private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { for (int i = 0; i < 9; i++) { ItemStack stack = ctx.player().getInventory().items.get(i); @@ -645,27 +612,10 @@ public void noteInsert(final BlockPos pos) { } } - /*private long getHistoryCount(final BlockPos pos) { - if(!anyHistoryMatch(pos)) { - return 0; - } - - return blockBreakHistory.get(getFromHistory(pos)).counter; - }*/ - - @Override - public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - return onTick(calcFailed, isSafeToCancel, 0); - } - public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel, int recursions) { - if (Trail.getInstance().updateAndCheck()) { - return Trail.getInstance().getRunAwayCommand(); - } if (recursions > 1000) { // onTick calls itself, don't crash return new PathingCommand(null, PathingCommandType.SET_GOAL_AND_PATH); } - protectItemOfMissing(); approxPlaceable = approxPlaceable(36); if (baritone.getInputOverrideHandler().isInputForcedDown(Input.CLICK_LEFT)) { ticks = 5; @@ -724,10 +674,9 @@ public int lengthZ() { } }; } - BuilderCalculationContext bcc = new BuilderCalculationContext(); if (!recalc(bcc)) { - if (Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < realSchematic.heightY()) { + if (Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < stopAtHeight) { logDirect("Starting layer " + layer); layer++; return onTick(calcFailed, isSafeToCancel, recursions + 1); @@ -740,7 +689,6 @@ public int lengthZ() { if (Baritone.settings().notificationOnBuildFinished.value) { logNotification("Done building", false); } - if (this.fromAltoclef) { this.fromAltoclefFinished = true; } @@ -750,7 +698,6 @@ public int lengthZ() { if (this.fromAltoclefFinished) { this.stateStack.clear(); } - return null; } // build repeat time @@ -762,6 +709,9 @@ public int lengthZ() { logDirect("Repeating build in vector " + repeat + ", new origin is " + origin); return onTick(calcFailed, isSafeToCancel, recursions + 1); } + if (Baritone.settings().distanceTrim.value) { + trim(); + } Optional> toBreak = toBreakNearPlayer(bcc); if (toBreak.isPresent() && isSafeToCancel && ctx.player().isOnGround()) { @@ -786,7 +736,8 @@ public int lengthZ() { } List desirableOnHotbar = new ArrayList<>(); Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); - if (!AltoClefSettings.getInstance().isInteractionPaused() && toPlace.isPresent() && isSafeToCancel && ctx.player().isOnGround() && ticks <= 0) { + if (!AltoClefSettings.getInstance().isInteractionPaused() && toPlace.isPresent() && isSafeToCancel && + ctx.player().isOnGround() && ticks <= 0) { Rotation rot = toPlace.get().rot; baritone.getLookBehavior().updateTarget(rot, true); ctx.player().getInventory().selected = toPlace.get().hotbarSelection; @@ -837,11 +788,23 @@ public int lengthZ() { return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } } - updateMovement(); return new PathingCommandContext(goal, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH, bcc); } + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + return onTick(calcFailed, isSafeToCancel, 0); + } + + private void trim() { + HashSet copy = new HashSet<>(incorrectPositions); + copy.removeIf(pos -> pos.distSqr(ctx.player().blockPosition()) > 200); + if (!copy.isEmpty()) { + incorrectPositions = copy; + } + } + private void updateMovement() { PathExecutor exec = baritone.getPathingBehavior().getCurrent(); if (exec == null || exec.finished() || exec.failed()) { @@ -866,14 +829,6 @@ private boolean recalc(BuilderCalculationContext bcc) { return !incorrectPositions.isEmpty(); } - /*private void trim() { - HashSet copy = new HashSet<>(incorrectPositions); - copy.removeIf(pos -> pos.distSqr(ctx.player().blockPosition()) > 200); - if (!copy.isEmpty()) { - incorrectPositions = copy; - } - }*/ - private void recalcNearby(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); int radius = Baritone.settings().builderTickScanRadius.value; @@ -887,7 +842,7 @@ private void recalcNearby(BuilderCalculationContext bcc) { if (desired != null) { // we care about this position BetterBlockPos pos = new BetterBlockPos(x, y, z); - if (valid(bcc.bsi.get0(x, y, z), desired, false) || breakLimitExceeded(new BlockPos(x, y, z))) { + if (valid(bcc.bsi.get0(x, y, z), desired, false)) { incorrectPositions.remove(pos); observedCompleted.add(BetterBlockPos.longHash(pos)); } else { @@ -914,7 +869,7 @@ private void fullRecalc(BuilderCalculationContext bcc) { } if (bcc.bsi.worldContainsLoadedChunk(blockX, blockZ)) { // check if its in render distance, not if its in cache // we can directly observe this block, it is in render distance - if (valid(bcc.bsi.get0(blockX, blockY, blockZ), schematic.desiredState(x, y, z, current, this.approxPlaceable), false) || breakLimitExceeded(new BlockPos(x, y, z))) { + if (valid(bcc.bsi.get0(blockX, blockY, blockZ), schematic.desiredState(x, y, z, current, this.approxPlaceable), false)) { observedCompleted.add(BetterBlockPos.longHash(blockX, blockY, blockZ)); } else { incorrectPositions.add(new BetterBlockPos(blockX, blockY, blockZ)); @@ -940,84 +895,25 @@ private void fullRecalc(BuilderCalculationContext bcc) { } } - private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable) { - return assemble(bcc, approxPlaceable, false); - } - - @Override - public String displayName0() { - return paused ? "Builder Paused" : "Building " + name; - } - - private boolean sameWithoutOrientation(BlockState first, BlockState second) { - if (first.getBlock() != second.getBlock()) { - return false; - } - ImmutableMap, Comparable> map1 = first.getValues(); - ImmutableMap, Comparable> map2 = second.getValues(); - for (Property prop : map1.keySet()) { - if (map1.get(prop) != map2.get(prop) && !orientationProps.contains(prop)) { - return false; - } - } - return true; - } - - private boolean isDefaultState(final BlockState state) { - final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); - for (final PropertyContainer container : propertyContainers) { - if (container.getPropertyKey().equals("part") && container.getPropertyValue().equals("head")) { - return false; - } - if (container.getPropertyKey().equals("half") && container.getPropertyValue().equals("upper")) { - return false; - } - } - return true; - } - - /*private boolean inInventoryWithUnderDifferentProperties(final BlockState state) { - final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); - for (final PropertyContainer container : propertyContainers) { - - } - - return false; - }*/ - - /*private final List asInventoryList(final List placeables) { - final List invStates = new ArrayList<>(); - placeables.forEach(e -> { - final BlockState defaultState = e.getBlock().defaultBlockState(); - invStates.removeIf(a -> a.toString().equals(defaultState.toString())); - invStates.add(defaultState); - }); - - return invStates; - }*/ - private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable, boolean logMissing) { List placeable = new ArrayList<>(); List breakable = new ArrayList<>(); List sourceLiquids = new ArrayList<>(); List flowingLiquids = new ArrayList<>(); - //stopProtectItemOfMissing(); missing.clear(); incorrectPositions.forEach(pos -> { BlockState state = bcc.bsi.get0(pos); if (state.getBlock() instanceof AirBlock) { final BlockState bsSchematic = bcc.getSchematic(pos.x, pos.y, pos.z, state); - if (approxPlaceable.stream().anyMatch(e -> e != null && e.getBlock().defaultBlockState().equals(bsSchematic.getBlock().defaultBlockState())) - //|| approxPlaceable.stream().anyMatch(e -> e != null && !(e.getBlock() instanceof AirBlock) && e.getBlock().getClass().equals(state.getBlock().getClass())) - //&& !hasNonHoldable(state) - ) { + if (approxPlaceable.contains(bcc.getSchematic(pos.x, pos.y, pos.z, state))) { + assert bsSchematic != null; if (isDefaultState(bsSchematic)) { placeable.add(pos); } } else { BlockState desired = bcc.getSchematic(pos.x, pos.y, pos.z, state); if (desired != null) { - missing.put(desired.getBlock().defaultBlockState(), 1 + missing.getOrDefault(desired, 0)); + missing.put(desired, 1 + missing.getOrDefault(desired, 0)); } } } else { @@ -1035,10 +931,8 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac } } }); - List toBreak = new ArrayList<>(); breakable.forEach(pos -> toBreak.add(breakGoal(pos, bcc))); - List toPlace = new ArrayList<>(); placeable.forEach(pos -> { if (!placeable.contains(pos.below()) && !placeable.contains(pos.below(2))) { @@ -1054,7 +948,6 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac if (!missing.isEmpty()) { protectItemOfMissing(); } - if (logMissing && !missing.isEmpty()) { logDirect("Missing materials for at least:"); logDirect(missing.entrySet().stream() @@ -1072,6 +965,52 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return new GoalComposite(toBreak.toArray(new Goal[0])); } + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable) { + return assemble(bcc, approxPlaceable, false); + } + + private boolean sameWithoutOrientation(BlockState first, BlockState second) { + if (first.getBlock() != second.getBlock()) { + return false; + } + ImmutableMap, Comparable> map1 = first.getValues(); + ImmutableMap, Comparable> map2 = second.getValues(); + for (Property prop : map1.keySet()) { + if (map1.get(prop) != map2.get(prop) && !orientationProps.contains(prop)) { + return false; + } + } + return true; + } + + private boolean isDefaultState(final BlockState state) { + final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); + for (final PropertyContainer container : propertyContainers) { + if (container.getPropertyKey().equals("part") && container.getPropertyValue().equals("head")) { + return false; + } + if (container.getPropertyKey().equals("half") && container.getPropertyValue().equals("upper")) { + return false; + } + } + return true; + } + + private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { + if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.above()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.above(2)).getBlock() instanceof AirBlock) { // TODO maybe possible without the up(2) check? + return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.above()) { + @Override + public boolean isInGoal(int x, int y, int z) { + if (y > this.y || (x == this.x && y == this.y && z == this.z)) { + return false; + } + return super.isInGoal(x, y, z); + } + }); + } + return new GoalBreak(pos); + } + @Override public void logToast(Component title, Component message) { super.logToast(title, message); @@ -1142,21 +1081,6 @@ public void logDirect(String message) { super.logDirect(message); } - public static class Placement { - - private final int hotbarSelection; - private final BlockPos placeAgainst; - private final Direction side; - private final Rotation rot; - - public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { - this.hotbarSelection = hotbarSelection; - this.placeAgainst = placeAgainst; - this.side = side; - this.rot = rot; - } - } - public static class JankyGoalComposite implements Goal { private final Goal primary; @@ -1184,6 +1108,11 @@ public String toString() { } } + @Override + public String displayName0() { + return paused ? "Builder Paused" : "Building " + name; + } + private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? return new GoalPlace(pos); @@ -1196,41 +1125,34 @@ private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); } } - noteInsert(pos); return new GoalPlace(pos); } - private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.above()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.above(2)).getBlock() instanceof AirBlock) { - return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.above()) { - @Override - public boolean isInGoal(int x, int y, int z) { - if (y > this.y || (x == this.x && y == this.y && z == this.z)) { - return false; - } - return super.isInGoal(x, y, z); - } - }); - } - //TODO: maybe noteRemoval here? - return new GoalBreak(pos); - } - - public static class GoalBreak extends GoalGetToBlock { - - public GoalBreak(BlockPos pos) { - super(pos); - } - - @Override - public boolean isInGoal(int x, int y, int z) { - // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) - if (y > this.y) { - return false; + private List approxPlaceable(int size) { + List result = new ArrayList<>(); + for (int i = 0; i < size; i++) { + ItemStack stack = ctx.player().getInventory().items.get(i); + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { + result.add(Blocks.AIR.defaultBlockState()); + continue; } - // but any other adjacent works for breaking, including inside or below - return super.isInGoal(x, y, z); + // + BlockState itemState = ((BlockItem) stack.getItem()) + .getBlock() + .getStateForPlacement( + new BlockPlaceContext( + new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { + } + ) + ); + if (itemState != null) { + result.add(itemState); + } else { + result.add(Blocks.AIR.defaultBlockState()); + } + // } + return result; } public static class GoalAdjacent extends GoalGetToBlock { @@ -1266,12 +1188,32 @@ public double heuristic(int x, int y, int z) { } } + private boolean sameBlockstate(BlockState first, BlockState second) { + if (first.getBlock() != second.getBlock()) { + return false; + } + boolean ignoreDirection = Baritone.settings().buildIgnoreDirection.value; + List ignoredProps = Baritone.settings().buildIgnoreProperties.value; + if (!ignoreDirection && ignoredProps.isEmpty()) { + return first.equals(second); // early return if no properties are being ignored + } + ImmutableMap, Comparable> map1 = first.getValues(); + ImmutableMap, Comparable> map2 = second.getValues(); + for (Property prop : map1.keySet()) { + if (map1.get(prop) != map2.get(prop) + && !(ignoreDirection && orientationProps.contains(prop)) + && !ignoredProps.contains(prop.getName())) { + return false; + } + } + return true; + } + @Override public void onLostControl() { if (this.fromAltoclef && this.stateStack.isEmpty()) { pushState(); } - incorrectPositions = null; name = null; schematic = null; @@ -1288,86 +1230,10 @@ public void onLostControl() { blockBreakHistory.clear(); } - @Override - public double priority() { - return super.priority(); - } - - @Override - public String displayName() { - return super.displayName(); - } - - public static class GoalPlace extends GoalBlock { - - public GoalPlace(BlockPos placeAt) { - super(placeAt.above()); - } - - public double heuristic(int x, int y, int z) { - // prioritize lower y coordinates - return this.y * 100 + super.heuristic(x, y, z); - } - } - - private List approxPlaceable(int size) { - List result = new ArrayList<>(); - for (int i = 0; i < size; i++) { - ItemStack stack = ctx.player().getInventory().items.get(i); - //if (stack.getItem().toString() != "air") System.out.println("BARIT1: " + stack.getItem().toString()); - if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { - result.add(Blocks.AIR.defaultBlockState()); - continue; - } - //if (stack.getItem().toString() != "air") System.out.println("BARIT2: " + stack.getItem().toString()); - /*final Vec3 playerPos = new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z); - final BlockHitResult playerFeetHitResult = new BlockHitResult(playerPos, Direction.UP, ctx.playerFeet(), false); - final UseOnContext usageMainHandAction = new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, playerFeetHitResult) {}; - final BlockPlaceContext blockPlacementContext = new BlockPlaceContext(usageMainHandAction); - final Block targetBlock = ((BlockItem) stack.getItem()).getBlock(); - final BlockState targetState = targetBlock.getStateForPlacement(blockPlacementContext);*/ - - final Block targetBlock = ((BlockItem) stack.getItem()).getBlock(); - final BlockState targetState = targetBlock.getStateDefinition().getPossibleStates().get(0); - - - //if (stack.getItem().toString() != "air") System.out.println("BARIT3: " + targetState); - result.add(targetState); - //result.add(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {}))); - } - return result; - } - - private final class HistoryInfo { - public long counter = 0; - public boolean brokenPreviously = false; - } - - private final class PropertyContainer { - private final String propertyKey; - private final String propertyValue; - - public PropertyContainer(final String propertyKey, final String propertyValue) { - this.propertyKey = propertyKey; - this.propertyValue = propertyValue; - } - - public String getPropertyKey() { - return this.propertyKey; - } - - public String getPropertyValue() { - return this.propertyValue; - } - } - private boolean valid(BlockState current, BlockState desired, boolean itemVerify) { if (desired == null) { return true; } - if (current == null) { - return true; // No idea why but current might be null..... oof - } if (current.getBlock() instanceof LiquidBlock && Baritone.settings().okIfWater.value) { return true; } @@ -1383,27 +1249,103 @@ private boolean valid(BlockState current, BlockState desired, boolean itemVerify if (Baritone.settings().buildSkipBlocks.value.contains(desired.getBlock()) && !itemVerify) { return true; } - if (desired.getBlock() instanceof SlabBlock) { + if (Baritone.settings().buildValidSubstitutes.value.getOrDefault(desired.getBlock(), Collections.emptyList()).contains(current.getBlock()) && !itemVerify) { return true; } - if (current.getBlock() instanceof ChestBlock && desired.getBlock() instanceof ChestBlock) { + if (current.equals(desired)) { return true; } - if (current.getBlock() instanceof DoorBlock && desired.getBlock() instanceof DoorBlock) { - return true; + return sameBlockstate(current, desired); + } + + private void pushState() { + stateStack.clear(); + stateStack.push(this.approxPlaceable); + stateStack.push(this.ticks); + stateStack.push(this.incorrectPositions); + stateStack.push(this.name); + stateStack.push(this.schematic); + stateStack.push(this.realSchematic); + stateStack.push(this.origin); + stateStack.push(this.paused); + stateStack.push(this.layer); + stateStack.push(this.numRepeats); + stateStack.push(this.observedCompleted); + stateStack.push(this.active); + stateStack.push(this.missing); + stateStack.push(this.schemSize); + stateStack.push(this.fromAltoclefFinished); + stateStack.push(this.fromAltoclef); + } + + @Override + public void reset() { + onLostControl(); + } + + @Override + public Map getMissing() { + if (this.sbtMissing == null) this.sbtMissing = new HashMap<>(); + if (this.fromAltoclef && this.missing != null) { + this.sbtMissing.clear(); + this.sbtMissing.putAll(this.missing); } - if (current.getBlock().defaultBlockState().equals(desired.getBlock().defaultBlockState())) { - if (current.getBlock() instanceof CrossCollisionBlock) { - return true; + return new HashMap<>(this.sbtMissing); + //return (this.fromAltoclef) ? new HashMap<>(this.missing) : null; + } + + @Override + public double priority() { + return super.priority(); + } + + @Override + public String displayName() { + return super.displayName(); + } + + public static class Placement { + + private final int hotbarSelection; + private final BlockPos placeAgainst; + private final Direction side; + private final Rotation rot; + + public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { + this.hotbarSelection = hotbarSelection; + this.placeAgainst = placeAgainst; + this.side = side; + this.rot = rot; + } + } + + public static class GoalBreak extends GoalGetToBlock { + + public GoalBreak(BlockPos pos) { + super(pos); + } + + @Override + public boolean isInGoal(int x, int y, int z) { + // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) + if (y > this.y) { + return false; } + // but any other adjacent works for breaking, including inside or below + return super.isInGoal(x, y, z); } - if (Baritone.settings().buildValidSubstitutes.value.getOrDefault(desired.getBlock(), Collections.emptyList()).contains(current.getBlock()) && !itemVerify) { - return true; + } + + public static class GoalPlace extends GoalBlock { + + public GoalPlace(BlockPos placeAt) { + super(placeAt.above()); } - if (current.equals(desired)) { - return true; + + public double heuristic(int x, int y, int z) { + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); } - return Baritone.settings().buildIgnoreDirection.value && sameWithoutOrientation(current, desired); } public class BuilderCalculationContext extends CalculationContext { @@ -1470,12 +1412,12 @@ public double costOfPlacingAt(int x, int y, int z, BlockState current) { @Override public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { - if (!allowBreak || isPossiblyProtected(x, y, z)) { + if ((!allowBreak && !allowBreakAnyway.contains(current.getBlock())) || isPossiblyProtected(x, y, z)) { return COST_INF; } BlockState sch = getSchematic(x, y, z, current); if (sch != null && !Baritone.settings().buildSkipBlocks.value.contains(sch.getBlock())) { - if (sch.getBlock() == Blocks.AIR) { + if (sch.getBlock() instanceof AirBlock) { // it should be air // regardless of current contents, we can break it return 1; @@ -1498,4 +1440,27 @@ public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { } } } + + private final class PropertyContainer { + private final String propertyKey; + private final String propertyValue; + + public PropertyContainer(final String propertyKey, final String propertyValue) { + this.propertyKey = propertyKey; + this.propertyValue = propertyValue; + } + + public String getPropertyKey() { + return this.propertyKey; + } + + public String getPropertyValue() { + return this.propertyValue; + } + } + + private final class HistoryInfo { + public long counter = 0; + public boolean brokenPreviously = false; + } } diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 6ad41d90e..3b9934174 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -24,6 +24,7 @@ import baritone.api.process.IFarmProcess; import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.RayTraceUtils; import baritone.api.utils.Rotation; import baritone.api.utils.RotationUtils; @@ -300,7 +301,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol - goalz.add(new GoalBlock(new BlockPos(entity.position().x, entity.position().y + 0.1, entity.position().z))); + goalz.add(new GoalBlock(new BetterBlockPos(entity.position().x, entity.position().y + 0.1, entity.position().z))); } } } diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 9c6a5dfb7..71f43c6de 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -25,6 +25,7 @@ import baritone.api.process.IFollowProcess; import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; +import baritone.api.utils.BetterBlockPos; import baritone.utils.BaritoneProcessHelper; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; @@ -60,7 +61,7 @@ private Goal towards(Entity following) { pos = following.blockPosition(); } else { GoalXZ g = GoalXZ.fromDirection(following.position(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); - pos = new BlockPos(g.getX(), following.position().y, g.getZ()); + pos = new BetterBlockPos(g.getX(), following.position().y, g.getZ()); } return new GoalNear(pos, Baritone.settings().followRadius.value); } diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 681beaeac..54755df44 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -31,7 +31,6 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; -import baritone.utils.Trail; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; @@ -54,6 +53,7 @@ * @author leijurv */ public final class MineProcess extends BaritoneProcessHelper implements IMineProcess { + private static final int ORE_LOCATIONS_COUNT = 64; private BlockOptionalMetaLookup filter; @@ -69,10 +69,10 @@ public MineProcess(Baritone baritone) { super(baritone); } - public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int maxPerType, List alreadyKnown, List blacklist, List dropped) { + public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { List locs = new ArrayList<>(); List untracked = new ArrayList<>(); - int maxTotal = maxPerType * filter.blocks().size(); + int maxTotal = max * filter.blocks().size(); for (BlockOptionalMeta bom : filter.blocks()) { Block block = bom.getBlock(); if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { @@ -91,13 +91,13 @@ public static List searchWorld(CalculationContext ctx, BlockOptionalMe } } - locs = prune(ctx, locs, filter, maxPerType, blacklist, dropped); + locs = prune(ctx, locs, filter, max, blacklist, dropped); if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < maxTotal)) { locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( ctx.getBaritone().getPlayerContext(), filter, - maxPerType, + max, 10, 32 )); // maxSearchRadius is NOT sq @@ -105,14 +105,13 @@ public static List searchWorld(CalculationContext ctx, BlockOptionalMe locs.addAll(alreadyKnown); - return prune(ctx, locs, filter, maxPerType, blacklist, dropped); + return prune(ctx, locs, filter, max, blacklist, dropped); } - private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int maxPer, List blacklist, List dropped) { + private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { dropped.removeIf(drop -> { for (BlockPos pos : locs2) { - // No longer caring if we CAN break, we're just looking for a global search. - if (pos.distSqr(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ()))/* && MineProcess.plausibleToBreak(ctx, pos)*/) { + if (pos.distSqr(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ()))/* && MineProcess.plausibleToBreak(ctx, pos)*/) { // TODO maybe drop also has to be supported? no lava below? return true; } } @@ -149,7 +148,7 @@ private static List prune(CalculationContext ctx, List locs2 .filter(pos -> { Block b = ctx.getBlock(pos.getX(), pos.getY(), pos.getZ()); int count = countsPerBlock.getOrDefault(b, 0); - if (count <= maxPer) { + if (count <= max) { countsPerBlock.put(b, count + 1); return true; } else { @@ -188,69 +187,28 @@ public String displayName0() { return "Mine " + filter; } - private PathingCommand updateGoal() { - boolean legit = Baritone.settings().legitMine.value; - List locs = knownOreLocations; - if (!locs.isEmpty()) { - CalculationContext context = new CalculationContext(baritone); - List locs2 = prune(context, new ArrayList<>(locs), filter, ORE_LOCATIONS_COUNT, blacklist, droppedItemsScan()); - // can't reassign locs, gotta make a new var locs2, because we use it in a lambda right here, and variables you use in a lambda must be effectively final - Goal goal = new GoalComposite(locs2.stream().map(loc -> coalesce(loc, locs2, context)).toArray(Goal[]::new)); - knownOreLocations = locs2; - return new PathingCommand(goal, legit ? PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH : PathingCommandType.REVALIDATE_GOAL_AND_PATH); - } - // we don't know any ore locations at the moment - if (!legit && !Baritone.settings().exploreForBlocks.value) { - return null; - } - // only when we should explore for blocks or are in legit mode we do this - int y = Baritone.settings().legitMineYLevel.value; - if (branchPoint == null) { - /*if (!baritone.getPathingBehavior().isPathing() && playerFeet().y == y) { - // cool, path is over and we are at desired y - branchPoint = playerFeet(); - branchPointRunaway = null; - } else { - return new GoalYLevel(y); - }*/ - branchPoint = ctx.playerFeet(); - } - // TODO shaft mode, mine 1x1 shafts to either side - // TODO also, see if the GoalRunAway with maintain Y at 11 works even from the surface - if (branchPointRunaway == null) { - branchPointRunaway = new GoalRunAway(1, y, branchPoint) { - @Override - public boolean isInGoal(int x, int y, int z) { - return false; - } - @Override - public double heuristic() { - return Double.NEGATIVE_INFINITY; + public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { + int radius = Baritone.settings().allowOnlyExposedOresDistance.value; + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius + && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { + return true; + } } - }; + } } - return new PathingCommand(branchPointRunaway, PathingCommandType.REVALIDATE_GOAL_AND_PATH); + return false; } - private void rescan(List already, CalculationContext context) { - if (filter == null) { - return; - } - if (Baritone.settings().legitMine.value) { - return; - } - List dropped = droppedItemsScan(); - List locs = searchWorld(context, filter, ORE_LOCATIONS_COUNT, already, blacklist, dropped); - locs.addAll(dropped); - if (locs.isEmpty() && !Baritone.settings().exploreForBlocks.value) { - logDirect("No locations for " + filter + " known, cancelling"); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("No locations for " + filter + " known, cancelling", true); - } - cancel(); - return; + public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { + if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { + return false; } - knownOreLocations = locs; + + // bedrock above and below makes it implausible, otherwise we're good + return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); } private boolean internalMiningGoal(BlockPos pos, CalculationContext context, List locs) { @@ -307,19 +265,9 @@ private Goal coalesce(BlockPos loc, List locs, CalculationContext cont return new GoalBlock(loc.below()); } - public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { - int radius = Baritone.settings().allowOnlyExposedOresDistance.value; - for (int dx = -radius; dx <= radius; dx++) { - for (int dy = -radius; dy <= radius; dy++) { - for (int dz = -radius; dz <= radius; dz++) { - if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius - && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { - return true; - } - } - } - } - return false; + @Override + public boolean isActive() { + return filter != null; } public List droppedItemsScan() { @@ -339,20 +287,90 @@ public List droppedItemsScan() { return ret; } - public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { - if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { - return false; + private PathingCommand updateGoal() { + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return null; } - // bedrock above and below makes it implausible, otherwise we're good - return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); + boolean legit = Baritone.settings().legitMine.value; + List locs = knownOreLocations; + if (!locs.isEmpty()) { + CalculationContext context = new CalculationContext(baritone); + List locs2 = prune(context, new ArrayList<>(locs), filter, ORE_LOCATIONS_COUNT, blacklist, droppedItemsScan()); + // can't reassign locs, gotta make a new var locs2, because we use it in a lambda right here, and variables you use in a lambda must be effectively final + Goal goal = new GoalComposite(locs2.stream().map(loc -> coalesce(loc, locs2, context)).toArray(Goal[]::new)); + knownOreLocations = locs2; + return new PathingCommand(goal, legit ? PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH : PathingCommandType.REVALIDATE_GOAL_AND_PATH); + } + // we don't know any ore locations at the moment + if (!legit && !Baritone.settings().exploreForBlocks.value) { + return null; + } + // only when we should explore for blocks or are in legit mode we do this + int y = Baritone.settings().legitMineYLevel.value; + if (branchPoint == null) { + /*if (!baritone.getPathingBehavior().isPathing() && playerFeet().y == y) { + // cool, path is over and we are at desired y + branchPoint = playerFeet(); + branchPointRunaway = null; + } else { + return new GoalYLevel(y); + }*/ + branchPoint = ctx.playerFeet(); + } + // TODO shaft mode, mine 1x1 shafts to either side + // TODO also, see if the GoalRunAway with maintain Y at 11 works even from the surface + if (branchPointRunaway == null) { + branchPointRunaway = new GoalRunAway(1, y, branchPoint) { + @Override + public boolean isInGoal(int x, int y, int z) { + return false; + } + + @Override + public double heuristic() { + return Double.NEGATIVE_INFINITY; + } + }; + } + return new PathingCommand(branchPointRunaway, PathingCommandType.REVALIDATE_GOAL_AND_PATH); + } + + private void rescan(List already, CalculationContext context) { + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return; + } + if (Baritone.settings().legitMine.value) { + return; + } + List dropped = droppedItemsScan(); + List locs = searchWorld(context, filter, ORE_LOCATIONS_COUNT, already, blacklist, dropped); + locs.addAll(dropped); + if (locs.isEmpty() && !Baritone.settings().exploreForBlocks.value) { + logDirect("No locations for " + filter + " known, cancelling"); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("No locations for " + filter + " known, cancelling", true); + } + cancel(); + return; + } + knownOreLocations = locs; } - private void addNearby() { + private boolean addNearby() { List dropped = droppedItemsScan(); knownOreLocations.addAll(dropped); BlockPos playerFeet = ctx.playerFeet(); BlockStateInterface bsi = new BlockStateInterface(ctx); + + + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return false; + } + int searchDist = 10; double fakedBlockReachDistance = 20; // at least 10 * sqrt(3) with some extra space to account for positioning within the block for (int x = playerFeet.getX() - searchDist; x <= playerFeet.getX() + searchDist; x++) { @@ -370,19 +388,11 @@ private void addNearby() { } } knownOreLocations = prune(new CalculationContext(baritone), knownOreLocations, filter, ORE_LOCATIONS_COUNT, blacklist, dropped); - } - - @Override - public boolean isActive() { - return filter != null; + return true; } @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - if (Trail.getInstance().updateAndCheck()) { - return Trail.getInstance().getRunAwayCommand(); - } - if (desiredQuantity > 0) { int curr = ctx.player().getInventory().items.stream() .filter(stack -> filter.has(stack)) @@ -411,11 +421,6 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return null; } } - if (!Baritone.settings().allowBreak.value) { - logDirect("Unable to mine when allowBreak is false!"); - cancel(); - return null; - } // Wait for pause interactions if (AltoClefSettings.getInstance().isInteractionPaused()) { return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); @@ -428,7 +433,10 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { Baritone.getExecutor().execute(() -> rescan(curr, context)); } if (Baritone.settings().legitMine.value) { - addNearby(); + if (!addNearby()) { + cancel(); + return null; + } } Optional shaft = curr.stream() .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) @@ -461,6 +469,46 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return command; } + @Override + public void mine(int quantity, BlockOptionalMetaLookup filter) { + this.filter = filter; + if (this.filterFilter() == null) { + this.filter = null; + } + this.desiredQuantity = quantity; + this.knownOreLocations = new ArrayList<>(); + this.blacklist = new ArrayList<>(); + this.branchPoint = null; + this.branchPointRunaway = null; + this.anticipatedDrops = new HashMap<>(); + if (filter != null) { + rescan(new ArrayList<>(), new CalculationContext(baritone)); + } + } + + @Override + public void mineByName(int quantity, String... blocks) { + mine(quantity, new BlockOptionalMetaLookup(blocks)); + } + + private BlockOptionalMetaLookup filterFilter() { + if (this.filter == null) { + return null; + } + if (!Baritone.settings().allowBreak.value) { + BlockOptionalMetaLookup f = new BlockOptionalMetaLookup(this.filter.blocks() + .stream() + .filter(e -> Baritone.settings().allowBreakAnyway.value.contains(e.getBlock())) + .toArray(BlockOptionalMeta[]::new)); + if (f.blocks().isEmpty()) { + logDirect("Unable to mine when allowBreak is false and target block is not in allowBreakAnyway!"); + return null; + } + return f; + } + return filter; + } + private static class GoalThreeBlocks extends GoalTwoBlocks { public GoalThreeBlocks(BlockPos pos) { @@ -480,28 +528,4 @@ public double heuristic(int x, int y, int z) { return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); } } - - @Override - public void mineByName(int quantity, String... blocks) { - mine(quantity, new BlockOptionalMetaLookup(blocks)); - } - - @Override - public void mine(int quantity, BlockOptionalMetaLookup filter) { - this.filter = filter; - if (filter != null && !Baritone.settings().allowBreak.value) { - logDirect("Unable to mine when allowBreak is false!"); - this.mine(quantity, (BlockOptionalMetaLookup) null); - return; - } - this.desiredQuantity = quantity; - this.knownOreLocations = new ArrayList<>(); - this.blacklist = new ArrayList<>(); - this.branchPoint = null; - this.branchPointRunaway = null; - this.anticipatedDrops = new HashMap<>(); - if (filter != null) { - rescan(new ArrayList<>(), new CalculationContext(baritone)); - } - } } diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 735736732..6c3a2df81 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -42,18 +42,17 @@ */ public class BlockStateInterface { + private final ClientChunkCache provider; private static final BlockState AIR = Blocks.AIR.defaultBlockState(); protected final Level world; - private final ClientChunkCache provider; public final BlockPos.MutableBlockPos isPassableBlockPos; public final BlockGetter access; public final BetterWorldBorder worldBorder; private LevelChunk prev = null; + private CachedRegion prevCached = null; private final WorldData worldData; - private final boolean useTheRealWorld; - private CachedRegion prevCached = null; public BlockStateInterface(IPlayerContext ctx) { this(ctx, false); diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index f4f1c064b..d78707a0c 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -27,6 +27,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; @@ -133,7 +134,7 @@ public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { //TODO: check IRenderer.glColor(Color.RED, 0.4F); RenderSystem.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); - RenderSystem.disableTexture(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); RenderSystem.depthMask(false); RenderSystem.disableDepthTest(); BetterBlockPos a = new BetterBlockPos(currentMouseOver); @@ -142,7 +143,6 @@ public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { RenderSystem.enableDepthTest(); RenderSystem.depthMask(true); - RenderSystem.enableTexture(); RenderSystem.disableBlend(); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 9858cc259..2950bf9bd 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -23,6 +23,7 @@ import baritone.utils.accessor.IEntityRenderManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.world.phys.AABB; import org.joml.Matrix4f; @@ -49,10 +50,10 @@ static void glColor(Color color, float alpha) { static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { RenderSystem.enableBlend(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); glColor(color, alpha); RenderSystem.lineWidth(lineWidth); - RenderSystem.disableTexture(); RenderSystem.depthMask(false); if (ignoreDepth) { @@ -70,7 +71,6 @@ static void endLines(boolean ignoredDepth) { } RenderSystem.depthMask(true); - RenderSystem.enableTexture(); RenderSystem.disableBlend(); } diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 1156f13f5..3b480d23a 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -193,14 +193,14 @@ private double getBestDestructionTime(Block b) { return calculateSpeedVsBlock(stack, b.defaultBlockState()) * avoidanceMultiplier(b); } - public boolean hasSilkTouch(ItemStack stack) { - return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; - } - private double avoidanceMultiplier(Block b) { return Baritone.settings().blocksToAvoidBreaking.value.contains(b) ? Baritone.settings().avoidBreakingMultiplier.value : 1; } + public boolean hasSilkTouch(ItemStack stack) { + return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; + } + /** * Calculates any modifier to breaking time based on status effects. * diff --git a/src/main/java/baritone/utils/Trail.java b/src/main/java/baritone/utils/Trail.java deleted file mode 100644 index e6a497fbe..000000000 --- a/src/main/java/baritone/utils/Trail.java +++ /dev/null @@ -1,180 +0,0 @@ -package baritone.utils; - -import baritone.api.BaritoneAPI; -import baritone.api.behavior.IPathingBehavior; -import baritone.api.pathing.goals.GoalXZ; -import baritone.api.pathing.path.IPathExecutor; -import baritone.api.process.PathingCommand; -import baritone.api.process.PathingCommandType; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.IPlayerContext; -import baritone.api.utils.RandomSpotNearby; -import net.minecraft.core.Vec3i; -import net.minecraft.world.level.ChunkPos; - -import java.util.*; - -/** - * @author Meloweh - */ -public final class Trail { - private final static int VECTOR_LIMIT = 350; - private final static int CROSS_LIMIT = 10; - private final static int CHUNK_TAIL_MAX = 4 * 4; - private final static Trail trail = new Trail(); - private final Queue traversedChunks; - private final IPlayerContext player; - private BetterBlockPos prev; - private boolean pathing = false; - private BetterBlockPos stuckPos; - private RandomSpotNearby randSpot = new RandomSpotNearby(16d); - private BetterBlockPos targetPos; - - public Trail() { - this.player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext(); - this.traversedChunks = new ArrayDeque<>(); - } - - public static Trail getInstance() { - return trail; - } - - private static boolean isSet(final Object o) { - return o != null; - } - - private static boolean isNull(final Object o) { - return !isSet(o); - } - - private static BetterBlockPos getCurrent() { - final IPathingBehavior p = BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior(); - if (isNull(p)) return null; - final IPathExecutor c = p.getCurrent(); - if (isNull(c)) return null; - final List bbp = c.getPath().positions(); - if (isNull(bbp)) return null; - final int posIndex = c.getPosition(); - if (c.getPath().positions().size() <= posIndex) return null; - final BetterBlockPos pos = c.getPath().positions().get(posIndex); - return pos; - } - - private boolean equalPos(final BetterBlockPos pos1, final BetterBlockPos pos2) { - if (isNull(pos1) || isNull(pos2)) return false; - return pos1.getX() == pos2.getX() && pos1.getY() == pos2.getY() && pos1.getZ() == pos2.getZ(); - } - - private boolean equalChunk(final ChunkPos c1, final ChunkPos c2) { - return c1.x == c2.x && c1.z == c2.z; - } - - public boolean passedLimits() { - return traversedChunks.stream().anyMatch(e -> - e.crossings.entrySet().stream().anyMatch(a -> a.getValue() > CROSS_LIMIT)); - } - - private int getVectorCount() { - return traversedChunks.stream().mapToInt(e -> e.crossings.size()).sum(); - } - - private boolean passedVectorCountLimit() { - return getVectorCount() > VECTOR_LIMIT; - } - - private Optional getRefFromTraversedChunks(final ChunkPos pos) { - return traversedChunks.stream().filter(e -> equalChunk(e.chunkPos, pos)).findFirst(); - } - - public void reset() { - traversedChunks.clear(); - prev = null; - pathing = false; - stuckPos = null; - System.out.println("target null"); - targetPos = null; - } - - private Pack removeOutsiders() { - if (traversedChunks.size() > CHUNK_TAIL_MAX) return traversedChunks.poll(); - if (passedVectorCountLimit()) traversedChunks.clear(); - return null; - } - - public boolean reactivateRunAway() { - final BetterBlockPos pos = getCurrent(); - if (isNull(pos)) return false; - stuckPos = pos; - System.out.println("target set"); - targetPos = randSpot.next(stuckPos); - pathing = true; - return true; - } - - public boolean isRunAwayActive() { - return pathing; - } - - public boolean updateAndCheck() { - tick(); - - if (!passedLimits()) { - return false; - } - - final BetterBlockPos curr = getCurrent(); - if (isNull(curr)) return false; - - if (targetPos != null && curr.closerThan(new Vec3i(targetPos.getX(), curr.getY(), targetPos.getZ()), 3d)) { - reset(); - return false; - } - if (!pathing) { - reactivateRunAway(); - } - - return true; - } - - public PathingCommand getRunAwayCommand() { - if (targetPos == null) { - throw new IllegalStateException("targetPos is null"); - } - return new PathingCommand(new GoalXZ(targetPos), PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH); - } - - private int addOrInc(final Pack pack, final BetterBlockPos blockPos, final boolean shouldAddPack) { - final Optional optRefBlockPos = pack.crossings.keySet().stream().filter(e -> equalPos(e, blockPos)).findFirst(); - final BetterBlockPos refBlockPos = (optRefBlockPos.isEmpty()) ? blockPos : optRefBlockPos.get(); - final int counter = (optRefBlockPos.isEmpty()) ? 1 : pack.crossings.get(refBlockPos) + 1; - pack.crossings.put(refBlockPos, counter); - if (shouldAddPack) traversedChunks.add(pack); - return counter; - } - - //TODO tick() may be called multiple times in one tick. This shouldn't be limited to one possible update per tick. - public void tick() { - final BetterBlockPos curr = getCurrent(); - if (isNull(curr) || equalPos(prev, curr)) return; - prev = curr; - final ChunkPos chunkPos = this.player.world().getChunk(curr).getPos(); - final Optional optPack = getRefFromTraversedChunks(chunkPos); - final Pack pack = optPack.isEmpty() ? new Pack(chunkPos) : optPack.get(); - final int counts = addOrInc(pack, curr, optPack.isEmpty()); - removeOutsiders(); - - //debug - //System.out.println(curr.getX() + ":" + curr.getY() + ":" + curr.getZ() + " Counts: " - // + counts + " Size: " + getVectorCount()); - } - - private class Pack { - public ChunkPos chunkPos; - public Map crossings; - - public Pack(final ChunkPos chunkPos) { - this.chunkPos = chunkPos; - this.crossings = new HashMap<>(); - } - } -} diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java new file mode 100644 index 000000000..65cdec058 --- /dev/null +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -0,0 +1,348 @@ +/* + * 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.schematic.format.defaults; + +import baritone.utils.schematic.StaticSchematic; +import net.minecraft.core.Registry; +import net.minecraft.core.Vec3i; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.Property; +import org.apache.commons.lang3.Validate; + +import javax.annotation.Nullable; +import java.util.Optional; + +/** + * Based on EmersonDove's work + * ... + * + * @author rycbar + * @since 22.09.2022 + */ +public final class LitematicaSchematic extends StaticSchematic { + private final Vec3i offsetMinCorner; + private final CompoundTag nbt; + + /** + * @param nbtTagCompound a decompressed file stream aka nbt data. + * @param rotated if the schematic is rotated by 90°. + */ + public LitematicaSchematic(CompoundTag nbtTagCompound, boolean rotated) { + this.nbt = nbtTagCompound; + this.offsetMinCorner = new Vec3i(getMinOfSchematic("x"), getMinOfSchematic("y"), getMinOfSchematic("z")); + this.y = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("y")); + + if (rotated) { + this.x = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("z")); + this.z = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("x")); + } else { + this.x = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("x")); + this.z = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("z")); + } + this.states = new BlockState[this.x][this.z][this.y]; + fillInSchematic(); + } + + /** + * @return Array of subregion names. + */ + private static String[] getRegions(CompoundTag nbt) { + return nbt.getCompound("Regions").getAllKeys().toArray(new String[0]); + } + + /** + * Gets both ends from a region box for a given axis and returns the lower one. + * + * @param s axis that should be read. + * @return the lower coord of the requested axis. + */ + private static int getMinOfSubregion(CompoundTag nbt, String subReg, String s) { + int a = nbt.getCompound("Regions").getCompound(subReg).getCompound("Position").getInt(s); + int b = nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt(s); + if (b < 0) { + b++; + } + return Math.min(a, a + b); + + } + + /** + * @param blockStatePalette List of all different block types used in the schematic. + * @return Array of BlockStates. + */ + private static BlockState[] getBlockList(ListTag blockStatePalette) { + BlockState[] blockList = new BlockState[blockStatePalette.size()]; + + for (int i = 0; i < blockStatePalette.size(); i++) { + Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation((((CompoundTag) blockStatePalette.get(i)).getString("Name")))); + CompoundTag properties = ((CompoundTag) blockStatePalette.get(i)).getCompound("Properties"); + + blockList[i] = getBlockState(block, properties); + } + return blockList; + } + + /** + * @param block block. + * @param properties List of Properties the block has. + * @return A blockState. + */ + private static BlockState getBlockState(Block block, CompoundTag properties) { + BlockState blockState = block.defaultBlockState(); + + for (Object key : properties.getAllKeys().toArray()) { + Property property = block.getStateDefinition().getProperty((String) key); + String propertyValue = properties.getString((String) key); + if (property != null) { + blockState = setPropertyValue(blockState, property, propertyValue); + } + } + return blockState; + } + + /** + * @author Emerson + */ + private static > BlockState setPropertyValue(BlockState state, Property property, String value) { + Optional parsed = property.getValue(value); + if (parsed.isPresent()) { + return state.setValue(property, parsed.get()); + } else { + throw new IllegalArgumentException("Invalid value for property " + property); + } + } + + /** + * @param amountOfBlockTypes amount of block types in the schematic. + * @return amount of bits used to encode a block. + */ + private static int getBitsPerBlock(int amountOfBlockTypes) { + return (int) Math.max(2, Math.ceil(Math.log(amountOfBlockTypes) / Math.log(2))); + } + + /** + * Calculates the volume of the subregion. As size can be a negative value we take the absolute value of the + * multiplication as the volume still holds a positive amount of blocks. + * + * @return the volume of the subregion. + */ + private static long getVolume(CompoundTag nbt, String subReg) { + return Math.abs( + nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("x") * + nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("y") * + nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("z")); + } + + /** + * @return array of Long values. + */ + private static long[] getBlockStates(CompoundTag nbt, String subReg) { + return nbt.getCompound("Regions").getCompound(subReg).getLongArray("BlockStates"); + } + + /** + * Subregion don't have to be the same size as the enclosing size of the schematic. If they are smaller we check here if the current block is part of the subregion. + * + * @param x coord of the block relative to the minimum corner. + * @param y coord of the block relative to the minimum corner. + * @param z coord of the block relative to the minimum corner. + * @return if the current block is part of the subregion. + */ + private static boolean inSubregion(CompoundTag nbt, String subReg, int x, int y, int z) { + return x >= 0 && y >= 0 && z >= 0 && + x < Math.abs(nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("x")) && + y < Math.abs(nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("y")) && + z < Math.abs(nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("z")); + } + + /** + * @param s axis. + * @return the lowest coordinate of that axis of the schematic. + */ + private int getMinOfSchematic(String s) { + int n = Integer.MAX_VALUE; + for (String subReg : getRegions(nbt)) { + n = Math.min(n, getMinOfSubregion(nbt, subReg, s)); + } + return n; + } + + /** + * reads the file data. + */ + private void fillInSchematic() { + for (String subReg : getRegions(nbt)) { + ListTag usedBlockTypes = nbt.getCompound("Regions").getCompound(subReg).getList("BlockStatePalette", 10); + BlockState[] blockList = getBlockList(usedBlockTypes); + + int bitsPerBlock = getBitsPerBlock(usedBlockTypes.size()); + long regionVolume = getVolume(nbt, subReg); + long[] blockStateArray = getBlockStates(nbt, subReg); + + LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, regionVolume, blockStateArray); + + writeSubregionIntoSchematic(nbt, subReg, blockList, bitArray); + } + } + + /** + * Writes the file data in to the IBlockstate array. + * + * @param blockList list with the different block types used in the schematic. + * @param bitArray bit array that holds the placement pattern. + */ + private void writeSubregionIntoSchematic(CompoundTag nbt, String subReg, BlockState[] blockList, LitematicaBitArray bitArray) { + Vec3i offsetSubregion = new Vec3i(getMinOfSubregion(nbt, subReg, "x"), getMinOfSubregion(nbt, subReg, "y"), getMinOfSubregion(nbt, subReg, "z")); + int index = 0; + for (int y = 0; y < this.y; y++) { + for (int z = 0; z < this.z; z++) { + for (int x = 0; x < this.x; x++) { + if (inSubregion(nbt, subReg, x, y, z)) { + this.states[x - (offsetMinCorner.getX() - offsetSubregion.getX())][z - (offsetMinCorner.getZ() - offsetSubregion.getZ())][y - (offsetMinCorner.getY() - offsetSubregion.getY())] = blockList[bitArray.getAt(index)]; + index++; + } + } + } + } + } + + /** + * @return offset from the schematic origin to the minimum Corner as a Vec3i. + */ + public Vec3i getOffsetMinCorner() { + return offsetMinCorner; + } + + /** + * @return x size of the schematic. + */ + public int getX() { + return this.x; + } + + /** + * @return y size of the schematic. + */ + public int getY() { + return this.y; + } + + /** + * @return z size of the schematic. + */ + public int getZ() { + return this.z; + } + + /** + * @param x position relative to the minimum corner of the schematic. + * @param y position relative to the minimum corner of the schematic. + * @param z position relative to the minimum corner of the schematic. + * @param blockState new blockstate of the block at this position. + */ + public void setDirect(int x, int y, int z, BlockState blockState) { + this.states[x][z][y] = blockState; + } + + /** + * @param rotated if the schematic is rotated by 90°. + * @return a copy of the schematic. + */ + public LitematicaSchematic getCopy(boolean rotated) { + return new LitematicaSchematic(nbt, rotated); + } + + /** + * @author maruohon + * Class from the Litematica mod by maruohon + * Usage under LGPLv3 with the permission of the author. + * ... + */ + private static class LitematicaBitArray { + /** + * The long array that is used to store the data for this BitArray. + */ + private final long[] longArray; + /** + * Number of bits a single entry takes up + */ + private final int bitsPerEntry; + /** + * The maximum value for a single entry. This also works as a bitmask for a single entry. + * For instance, if bitsPerEntry were 5, this value would be 31 (ie, {@code 0b00011111}). + */ + private final long maxEntryValue; + /** + * Number of entries in this array (not the length of the long array that internally backs this array) + */ + private final long arraySize; + + public LitematicaBitArray(int bitsPerEntryIn, long arraySizeIn, @Nullable long[] longArrayIn) { + Validate.inclusiveBetween(1L, 32L, bitsPerEntryIn); + this.arraySize = arraySizeIn; + this.bitsPerEntry = bitsPerEntryIn; + this.maxEntryValue = (1L << bitsPerEntryIn) - 1L; + + if (longArrayIn != null) { + this.longArray = longArrayIn; + } else { + this.longArray = new long[(int) (roundUp(arraySizeIn * (long) bitsPerEntryIn, 64L) / 64L)]; + } + } + + public static long roundUp(long number, long interval) { + int sign = 1; + if (interval == 0) { + return 0; + } else if (number == 0) { + return interval; + } else { + if (number < 0) { + sign = -1; + } + + long i = number % (interval * sign); + return i == 0 ? number : number + (interval * sign) - i; + } + } + + public int getAt(long index) { + Validate.inclusiveBetween(0L, this.arraySize - 1L, index); + long startOffset = index * (long) this.bitsPerEntry; + int startArrIndex = (int) (startOffset >> 6); // startOffset / 64 + int endArrIndex = (int) (((index + 1L) * (long) this.bitsPerEntry - 1L) >> 6); + int startBitOffset = (int) (startOffset & 0x3F); // startOffset % 64 + + if (startArrIndex == endArrIndex) { + return (int) (this.longArray[startArrIndex] >>> startBitOffset & this.maxEntryValue); + } else { + int endOffset = 64 - startBitOffset; + return (int) ((this.longArray[startArrIndex] >>> startBitOffset | this.longArray[endArrIndex] << endOffset) & this.maxEntryValue); + } + } + + public long size() { + return this.arraySize; + } + } +} \ No newline at end of file diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java new file mode 100644 index 000000000..3b05c23ef --- /dev/null +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -0,0 +1,215 @@ +/* + * 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.schematic.litematica; + +import baritone.utils.schematic.format.defaults.LitematicaSchematic; +import fi.dy.masa.litematica.Litematica; +import fi.dy.masa.litematica.data.DataManager; +import net.minecraft.core.Vec3i; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.state.BlockState; + +import java.io.File; + +/** + * Helper class that provides access or processes data related to Litmatica schematics. + * + * @author rycbar + * @since 28.09.2022 + */ +public final class LitematicaHelper { + + /** + * @return if Litmatica is installed. + */ + public static boolean isLitematicaPresent() { + try { + Class.forName(Litematica.class.getName()); + return true; + } catch (ClassNotFoundException | NoClassDefFoundError ex) { + return false; + } + } + + /** + * @return if there are loaded schematics. + */ + public static boolean hasLoadedSchematic() { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().size() > 0; + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the name of the requested schematic. + */ + public static String getName(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getName(); + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the world coordinates of the schematic origin. This can but does not have to be the minimum corner. + */ + public static Vec3i getOrigin(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getOrigin(); + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return Filepath of the schematic file. + */ + public static File getSchematicFile(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getSchematicFile(); + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return rotation of the schematic placement. + */ + public static Rotation getRotation(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getRotation(); + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the mirroring of the schematic placement. + */ + public static Mirror getMirror(int i) { + return DataManager.getSchematicPlacementManager().getAllSchematicsPlacements().get(i).getMirror(); + } + + /** + * @param schematic original schematic. + * @param i index of the Schematic in the schematic placement list. + * @return the minimum corner coordinates of the schematic, after the original schematic got rotated and mirrored. + */ + public static Vec3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { + int x = LitematicaHelper.getOrigin(i).getX(); + int y = LitematicaHelper.getOrigin(i).getY(); + int z = LitematicaHelper.getOrigin(i).getZ(); + int mx = schematic.getOffsetMinCorner().getX(); + int my = schematic.getOffsetMinCorner().getY(); + int mz = schematic.getOffsetMinCorner().getZ(); + int sx = (schematic.getX() - 1) * -1; + int sz = (schematic.getZ() - 1) * -1; + + Vec3i correctedOrigin; + Mirror mirror = LitematicaHelper.getMirror(i); + Rotation rotation = LitematicaHelper.getRotation(i); + + //todo there has to be a better way to do this but i cant finde it atm + switch (mirror) { + case FRONT_BACK: + case LEFT_RIGHT: + switch ((mirror.ordinal() * 2 + rotation.ordinal()) % 4) { + case 1: + correctedOrigin = new Vec3i(x + (sz - mz), y + my, z + (sx - mx)); + break; + case 2: + correctedOrigin = new Vec3i(x + mx, y + my, z + (sz - mz)); + break; + case 3: + correctedOrigin = new Vec3i(x + mz, y + my, z + mx); + break; + default: + correctedOrigin = new Vec3i(x + (sx - mx), y + my, z + mz); + break; + } + break; + default: + switch (rotation) { + case CLOCKWISE_90: + correctedOrigin = new Vec3i(x + (sz - mz), y + my, z + mx); + break; + case CLOCKWISE_180: + correctedOrigin = new Vec3i(x + (sx - mx), y + my, z + (sz - mz)); + break; + case COUNTERCLOCKWISE_90: + correctedOrigin = new Vec3i(x + mz, y + my, z + (sx - mx)); + break; + default: + correctedOrigin = new Vec3i(x + mx, y + my, z + mz); + break; + } + } + return correctedOrigin; + } + + /** + * @param in the xyz offsets of the block relative to the schematic minimum corner. + * @param sizeX size of the schematic in the x-axis direction. + * @param sizeZ size of the schematic in the z-axis direction. + * @param mirror the mirroring of the schematic placement. + * @return the corresponding xyz coordinates after mirroring them according to the given mirroring. + */ + public static Vec3i doMirroring(Vec3i in, int sizeX, int sizeZ, Mirror mirror) { + int xOut = in.getX(); + int zOut = in.getZ(); + if (mirror == Mirror.LEFT_RIGHT) { + zOut = sizeZ - in.getZ(); + } else if (mirror == Mirror.FRONT_BACK) { + xOut = sizeX - in.getX(); + } + return new Vec3i(xOut, in.getY(), zOut); + } + + /** + * @param in the xyz offsets of the block relative to the schematic minimum corner. + * @param sizeX size of the schematic in the x-axis direction. + * @param sizeZ size of the schematic in the z-axis direction. + * @return the corresponding xyz coordinates after rotation them 90° clockwise. + */ + public static Vec3i rotate(Vec3i in, int sizeX, int sizeZ) { + return new Vec3i(sizeX - (sizeX - sizeZ) - in.getZ(), in.getY(), in.getX()); + } + + /** + * IDFK this just grew and it somehow works. If you understand how, pls tell me. + * + * @param schemIn give in the original schematic. + * @param i index of the Schematic in the schematic placement list. + * @return get it out rotated and mirrored. + */ + public static LitematicaSchematic blackMagicFuckery(LitematicaSchematic schemIn, int i) { + LitematicaSchematic tempSchem = schemIn.getCopy(LitematicaHelper.getRotation(i).ordinal() % 2 == 1); + for (int yCounter = 0; yCounter < schemIn.getY(); yCounter++) { + for (int zCounter = 0; zCounter < schemIn.getZ(); zCounter++) { + for (int xCounter = 0; xCounter < schemIn.getX(); xCounter++) { + Vec3i xyzHolder = new Vec3i(xCounter, yCounter, zCounter); + xyzHolder = LitematicaHelper.doMirroring(xyzHolder, schemIn.getX() - 1, schemIn.getZ() - 1, LitematicaHelper.getMirror(i)); + for (int turns = 0; turns < LitematicaHelper.getRotation(i).ordinal(); turns++) { + if ((turns % 2) == 0) { + xyzHolder = LitematicaHelper.rotate(xyzHolder, schemIn.getX() - 1, schemIn.getZ() - 1); + } else { + xyzHolder = LitematicaHelper.rotate(xyzHolder, schemIn.getZ() - 1, schemIn.getX() - 1); + } + } + BlockState state = schemIn.getDirect(xCounter, yCounter, zCounter); + try { + state = state.mirror(LitematicaHelper.getMirror(i)).rotate(LitematicaHelper.getRotation(i)); + } catch (NullPointerException e) { + //nothing to worry about it's just a hole in the schematic. + } + tempSchem.setDirect(xyzHolder.getX(), xyzHolder.getY(), xyzHolder.getZ(), state); + } + } + } + return tempSchem; + } +} \ No newline at end of file diff --git a/src/schematica_api/java/fi/dy/masa/litematica/Litematica.java b/src/schematica_api/java/fi/dy/masa/litematica/Litematica.java new file mode 100644 index 000000000..c10d5b38e --- /dev/null +++ b/src/schematica_api/java/fi/dy/masa/litematica/Litematica.java @@ -0,0 +1,21 @@ +/* + * 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 fi.dy.masa.litematica; + +public class Litematica { +} \ No newline at end of file diff --git a/src/schematica_api/java/fi/dy/masa/litematica/data/DataManager.java b/src/schematica_api/java/fi/dy/masa/litematica/data/DataManager.java new file mode 100644 index 000000000..4941e7cf3 --- /dev/null +++ b/src/schematica_api/java/fi/dy/masa/litematica/data/DataManager.java @@ -0,0 +1,33 @@ +/* + * 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 fi.dy.masa.litematica.data; + +import fi.dy.masa.litematica.schematic.placement.SchematicPlacementManager; + +public class DataManager { + public static final DataManager INSTANCE = new DataManager(); + private final SchematicPlacementManager schematicPlacementManager = new SchematicPlacementManager(); + + private static DataManager getInstance() { + return INSTANCE; + } + + public static SchematicPlacementManager getSchematicPlacementManager() { + return getInstance().schematicPlacementManager; + } +} \ No newline at end of file diff --git a/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java new file mode 100644 index 000000000..a267553a9 --- /dev/null +++ b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacement.java @@ -0,0 +1,35 @@ +/* + * 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 fi.dy.masa.litematica.schematic.placement; + +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; + +public class SchematicPlacement extends SchematicPlacementUnloaded { + private Rotation rotation; + private Mirror mirror; + + public Rotation getRotation() { + return this.rotation; + } + + public Mirror getMirror() { + return this.mirror; + } + +} \ No newline at end of file diff --git a/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java new file mode 100644 index 000000000..ab60e27fa --- /dev/null +++ b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementManager.java @@ -0,0 +1,31 @@ +/* + * 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 fi.dy.masa.litematica.schematic.placement; + +import java.util.ArrayList; +import java.util.List; + +public class SchematicPlacementManager { + private final List schematicPlacements = new ArrayList<>(); + + //in case of a java.lang.NoSuchMethodError try change the name of this method to getAllSchematicPlacements() + //there are inconsistencies in the litematica mod about the naming of this method + public List getAllSchematicsPlacements() { + return schematicPlacements; + } +} \ No newline at end of file diff --git a/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.java new file mode 100644 index 000000000..9e705dc7b --- /dev/null +++ b/src/schematica_api/java/fi/dy/masa/litematica/schematic/placement/SchematicPlacementUnloaded.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 fi.dy.masa.litematica.schematic.placement; + +import net.minecraft.core.BlockPos; + +import javax.annotation.Nullable; +import java.io.File; + +public class SchematicPlacementUnloaded { + protected String name = "?"; + @Nullable + protected File schematicFile; + protected BlockPos origin = BlockPos.ZERO; + + public String getName() { + return this.name; + } + + @Nullable + public File getSchematicFile() { + return this.schematicFile; + } + + public BlockPos getOrigin() { + return this.origin; + } +} \ No newline at end of file diff --git a/tweaker/build.gradle b/tweaker/build.gradle index 5696fee5a..ce623af6c 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -17,7 +17,6 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask - //import baritone.gradle.task.TweakerJsonAssembler plugins { @@ -98,7 +97,6 @@ jar { task proguard(type: ProguardTask) { url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' extract 'proguard-7.2.1/lib/proguard.jar' - compType "OFFICIAL" } task createDist(type: CreateDistTask, dependsOn: proguard) diff --git a/tweaker/src/main/java/baritone/launch/BaritoneTweaker.java b/tweaker/src/main/java/baritone/launch/BaritoneTweaker.java new file mode 100644 index 000000000..02e269506 --- /dev/null +++ b/tweaker/src/main/java/baritone/launch/BaritoneTweaker.java @@ -0,0 +1,55 @@ +/* + * 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; + +import io.github.impactdevelopment.simpletweaker.SimpleTweaker; +import net.minecraft.launchwrapper.Launch; +import net.minecraft.launchwrapper.LaunchClassLoader; +import org.spongepowered.asm.launch.MixinBootstrap; +import org.spongepowered.asm.mixin.MixinEnvironment; +import org.spongepowered.asm.mixin.Mixins; +import org.spongepowered.tools.obfuscation.mcp.ObfuscationServiceMCP; + +import java.util.List; + +/** + * @author Brady + * @since 7/31/2018 + */ +public class BaritoneTweaker extends SimpleTweaker { + + @Override + public void injectIntoClassLoader(LaunchClassLoader classLoader) { + super.injectIntoClassLoader(classLoader); + + MixinBootstrap.init(); + + // noinspection unchecked + List tweakClasses = (List) Launch.blackboard.get("TweakClasses"); + + String obfuscation = ObfuscationServiceMCP.NOTCH; + if (tweakClasses.stream().anyMatch(s -> s.contains("net.minecraftforge.fml.common.launcher"))) { + obfuscation = ObfuscationServiceMCP.SEARGE; + } + + MixinEnvironment.getDefaultEnvironment().setSide(MixinEnvironment.Side.CLIENT); + MixinEnvironment.getDefaultEnvironment().setObfuscationContext(obfuscation); + + Mixins.addConfiguration("mixins.baritone-meteor.json"); + } +} diff --git a/tweaker/src/main/java/baritone/launch/LaunchTesting.java b/tweaker/src/main/java/baritone/launch/LaunchTesting.java new file mode 100644 index 000000000..21607ae34 --- /dev/null +++ b/tweaker/src/main/java/baritone/launch/LaunchTesting.java @@ -0,0 +1,105 @@ +/* + * 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; + +import com.google.common.base.Strings; +import com.google.gson.GsonBuilder; +import com.mojang.authlib.Agent; +import com.mojang.authlib.exceptions.AuthenticationException; +import com.mojang.authlib.properties.PropertyMap; +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication; +import net.minecraft.launchwrapper.Launch; + +import java.io.File; +import java.lang.reflect.Field; +import java.net.Proxy; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Based on GradleStart from ForgeGradle 2.3 + * + * @author Brady + * @since 3/11/2019 + */ +public class LaunchTesting { + + public static void main(String[] args) { + Map arguments = new HashMap<>(); + + hackNatives(); + arguments.put("version", "BaritownedDeveloperEnvironment"); + arguments.put("assetIndex", System.getenv("assetIndex")); + arguments.put("assetsDir", System.getenv().getOrDefault("assetDirectory", "assets")); + arguments.put("accessToken", "FML"); + arguments.put("userProperties", "{}"); + arguments.put("tweakClass", System.getenv("tweakClass")); + String password = System.getenv("password"); + if (password != null && !password.isEmpty()) { + attemptLogin(arguments, System.getenv("username"), System.getenv("password")); + } + + List argsArray = new ArrayList<>(); + arguments.forEach((k, v) -> { + argsArray.add("--" + k); + argsArray.add(v); + }); + + Launch.main(argsArray.toArray(new String[0])); + } + + private static void hackNatives() { + String paths = System.getProperty("java.library.path"); + String nativesDir = System.getenv().get("nativesDirectory"); + + if (Strings.isNullOrEmpty(paths)) + paths = nativesDir; + else + paths += File.pathSeparator + nativesDir; + + System.setProperty("java.library.path", paths); + + // hack the classloader now. + try { + final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths"); + sysPathsField.setAccessible(true); + sysPathsField.set(null, null); + } catch (Throwable ignored) {} + } + + private static void attemptLogin(Map argMap, String username, String password) { + YggdrasilUserAuthentication auth = (YggdrasilUserAuthentication) (new YggdrasilAuthenticationService(Proxy.NO_PROXY, "1")).createUserAuthentication(Agent.MINECRAFT); + auth.setUsername(username); + auth.setPassword(password); + + try { + auth.logIn(); + } catch (AuthenticationException var4) { + throw new RuntimeException(var4); + } + + argMap.put("accessToken", auth.getAuthenticatedToken()); + argMap.put("uuid", auth.getSelectedProfile().getId().toString().replace("-", "")); + argMap.put("username", auth.getSelectedProfile().getName()); + argMap.put("userType", auth.getUserType().getName()); + argMap.put("userProperties", (new GsonBuilder()).registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer()).create().toJson(auth.getUserProperties())); + } +} From 0cf89e0b2a6edfe589eaf804d6562368d0a0fcd2 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 2 Apr 2023 15:20:26 -0700 Subject: [PATCH 510/935] Revert "fix items and #click" This reverts commit 4168401aa1ce2d2423602ea21e1527d54846d8fd. --- gradle.properties | 4 +- .../baritone/api/utils/BlockOptionalMeta.java | 86 +++++-------------- src/main/java/baritone/utils/GuiClick.java | 9 +- tweaker/build.gradle | 2 +- 4 files changed, 28 insertions(+), 73 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7b0d1f440..208dbb3e7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.1 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.3 -forge_version=1.19.3-44.0.1 +minecraft_version=1.19.2 +forge_version=1.19.2-43.0.0 fabric_version=0.14.11 diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index b144240d0..2ba6f3ed1 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -19,30 +19,26 @@ import baritone.api.utils.accessor.IItemStack; import com.google.common.collect.ImmutableSet; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.netty.util.concurrent.ThreadPerTaskExecutor; -import net.minecraft.client.Minecraft; +import net.minecraft.SharedConstants; import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceKey; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.server.packs.*; +import net.minecraft.server.packs.metadata.pack.PackMetadataSection; +import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.ServerPacksSource; import net.minecraft.server.packs.resources.MultiPackResourceManager; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; -import net.minecraft.world.flag.FeatureFlagSet; +import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.CustomSpawner; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.loot.BuiltInLootTables; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootTables; @@ -50,14 +46,13 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; -import sun.misc.Unsafe; +import org.apache.logging.log4j.core.jmx.Server; import javax.annotation.Nonnull; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -69,7 +64,7 @@ public final class BlockOptionalMeta { private final ImmutableSet stateHashes; private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); - private static LootTables lootTables; + private static LootTables manager; private static PredicateManager predicate = new PredicateManager(); private static Map> drops = new HashMap<>(); @@ -173,11 +168,11 @@ private static VanillaPackResources getVanillaServerPack() { } public static LootTables getManager() { - if (lootTables == null) { + if (manager == null) { MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(getVanillaServerPack())); ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); - lootTables = new LootTables(predicate); - resourceManager.registerReloadListener(lootTables); + manager = new LootTables(predicate); + resourceManager.registerReloadListener(manager); try { resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), resources.listPacks().toList()).done().get(); } catch (Exception exception) { @@ -185,7 +180,7 @@ public static LootTables getManager() { } } - return lootTables; + return manager; } public static PredicateManager getPredicateManager() { @@ -199,55 +194,20 @@ private static synchronized List drops(Block b) { return Collections.emptyList(); } else { List items = new ArrayList<>(); - try { - getManager().get(lootTableLocation).getRandomItems( - new LootContext.Builder(ServerLevelStub.fastCreate()) - .withRandom(RandomSource.create()) - .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) - .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) - .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) - .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) - .create(LootContextParamSets.BLOCK), + + // the other overload for generate doesnt work in forge because forge adds code that requires a non null world + getManager().get(lootTableLocation).getRandomItems( + new LootContext.Builder((ServerLevel null) + .withRandom(RandomSource.create()) + .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) + .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) + .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) + .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) + .create(LootContextParamSets.BLOCK), stack -> items.add(stack.getItem()) - ); - } catch (Exception e) { - e.printStackTrace(); - } + ); return items; } }); } - - private static class ServerLevelStub extends ServerLevel { - private static Minecraft client = Minecraft.getInstance(); - private static Unsafe unsafe = getUnsafe(); - public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.LevelStorageAccess $$2, ServerLevelData $$3, ResourceKey $$4, LevelStem $$5, ChunkProgressListener $$6, boolean $$7, long $$8, List $$9, boolean $$10) { - super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10); - } - - @Override - public FeatureFlagSet enabledFeatures() { - assert client.level != null; - return client.level.enabledFeatures(); - } - - public static ServerLevelStub fastCreate() { - try { - return (ServerLevelStub) unsafe.allocateInstance(ServerLevelStub.class); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } - } - - public static Unsafe getUnsafe() { - try { - Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); - theUnsafe.setAccessible(true); - return (Unsafe) theUnsafe.get(null); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - } } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index b3b2dc500..876d5fb42 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -80,7 +80,6 @@ public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) HitResult result = player.level.clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); if (result != null && result.getType() == HitResult.Type.BLOCK) { currentMouseOver = ((BlockHitResult) result).getBlockPos(); - System.out.println("currentMouseOver = " + currentMouseOver); } } } @@ -159,13 +158,9 @@ private Vec3 toWorld(double x, double y, double z) { y = y * 2 - 1; Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F); - projectionViewMatrix.transform(pos); + projectionViewMatrix.transformProject(pos); - if (pos.w() == 0) { - return null; - } - - pos.mul(1/pos.w()); + pos.normalize(); return new Vec3(pos.x(), pos.y(), pos.z()); } } diff --git a/tweaker/build.gradle b/tweaker/build.gradle index ce623af6c..1b6304189 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -17,7 +17,7 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask -//import baritone.gradle.task.TweakerJsonAssembler +import baritone.gradle.task.TweakerJsonAssembler plugins { id "com.github.johnrengelman.shadow" version "7.0.0" From e4d725d9aae4683b439d44edd1d404dc5e034407 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 2 Apr 2023 15:24:50 -0700 Subject: [PATCH 511/935] Revert "loottables broke & #click not working" This reverts commit 3e082b21d584e6c05544ee0505cd40c79d4eb6fd. --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 4 ++-- settings.gradle | 1 - .../api/command/datatypes/BlockById.java | 9 ++++--- .../command/datatypes/EntityClassById.java | 9 ++++--- .../api/event/events/RenderEvent.java | 2 +- .../baritone/api/utils/BlockOptionalMeta.java | 23 +++++++----------- .../java/baritone/api/utils/BlockUtils.java | 5 ++-- .../java/baritone/api/utils/SettingsUtil.java | 5 ++-- .../mixins/MixinClientPlayNetHandler.java | 24 ------------------- .../mixins/MixinClientPlayerEntity.java | 17 +++++++++++++ .../launch/mixins/MixinWorldRenderer.java | 2 +- .../command/defaults/FindCommand.java | 9 ++++--- .../command/defaults/FollowCommand.java | 3 +-- .../pathing/movement/MovementHelper.java | 2 +- src/main/java/baritone/utils/GuiClick.java | 15 +++++++----- src/main/java/baritone/utils/IRenderer.java | 2 +- .../java/baritone/utils/PathRenderer.java | 2 +- .../format/defaults/LitematicaSchematic.java | 3 +-- .../format/defaults/MCEditSchematic.java | 3 +-- .../format/defaults/SpongeSchematic.java | 3 +-- tweaker/build.gradle | 2 +- 23 files changed, 65 insertions(+), 84 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 62a815d0f..539fed3a8 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.3" + "minecraft": "1.19.2" } } \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 2a25bf8ed..9297ed74b 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.19.3]" +versionRange="[1.19.2]" ordering="NONE" side="BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 208dbb3e7..4c3f5b494 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,5 +5,5 @@ maven_group=baritone archives_base_name=baritone minecraft_version=1.19.2 -forge_version=1.19.2-43.0.0 -fabric_version=0.14.11 +forge_version=1.19.2-43.1.65 +fabric_version=0.14.9 diff --git a/settings.gradle b/settings.gradle index 7809c35c6..2475b0845 100755 --- a/settings.gradle +++ b/settings.gradle @@ -44,7 +44,6 @@ rootProject.name = 'baritone' include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { System.setProperty("Baritone.enabled_platforms", "fabric,forge") -// System.setProperty("Baritone.enabled_platforms", "fabric") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { include(platform) diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 21562e188..5e63fcf25 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -19,12 +19,11 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.core.registries.BuiltInRegistries; +import java.util.stream.Stream; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; -import java.util.stream.Stream; - public enum BlockById implements IDatatypeFor { INSTANCE; @@ -32,7 +31,7 @@ public enum BlockById implements IDatatypeFor { public Block get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); Block block; - if ((block = BuiltInRegistries.BLOCK.getOptional(id).orElse(null)) == null) { + if ((block = Registry.BLOCK.getOptional(id).orElse(null)) == null) { throw new IllegalArgumentException("no block found by that id"); } return block; @@ -42,7 +41,7 @@ public Block get(IDatatypeContext ctx) throws CommandException { public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() .append( - BuiltInRegistries.BLOCK.keySet() + Registry.BLOCK.keySet() .stream() .map(Object::toString) ) diff --git a/src/api/java/baritone/api/command/datatypes/EntityClassById.java b/src/api/java/baritone/api/command/datatypes/EntityClassById.java index d7cb75734..aff7a2d94 100644 --- a/src/api/java/baritone/api/command/datatypes/EntityClassById.java +++ b/src/api/java/baritone/api/command/datatypes/EntityClassById.java @@ -19,12 +19,11 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.core.registries.BuiltInRegistries; +import java.util.stream.Stream; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; -import java.util.stream.Stream; - public enum EntityClassById implements IDatatypeFor { INSTANCE; @@ -32,7 +31,7 @@ public enum EntityClassById implements IDatatypeFor { public EntityType get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); EntityType entity; - if ((entity = BuiltInRegistries.ENTITY_TYPE.getOptional(id).orElse(null)) == null) { + if ((entity = Registry.ENTITY_TYPE.getOptional(id).orElse(null)) == null) { throw new IllegalArgumentException("no entity found by that id"); } return entity; @@ -41,7 +40,7 @@ public EntityType get(IDatatypeContext ctx) throws CommandException { @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() - .append(BuiltInRegistries.ENTITY_TYPE.stream().map(Object::toString)) + .append(Registry.ENTITY_TYPE.stream().map(Object::toString)) .filterPrefixNamespaced(ctx.getConsumer().getString()) .sortAlphabetically() .stream(); diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java index a12a4dd5c..cb7a0414c 100644 --- a/src/api/java/baritone/api/event/events/RenderEvent.java +++ b/src/api/java/baritone/api/event/events/RenderEvent.java @@ -18,7 +18,7 @@ package baritone.api.event.events; import com.mojang.blaze3d.vertex.PoseStack; -import org.joml.Matrix4f; +import com.mojang.math.Matrix4f; /** * @author Brady diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 2ba6f3ed1..aaeed981f 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -19,22 +19,18 @@ import baritone.api.utils.accessor.IItemStack; import com.google.common.collect.ImmutableSet; -import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.netty.util.concurrent.ThreadPerTaskExecutor; -import net.minecraft.SharedConstants; import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.*; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.packs.*; -import net.minecraft.server.packs.metadata.pack.PackMetadataSection; +import net.minecraft.server.packs.PackResources; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.repository.Pack; import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.ServerPacksSource; -import net.minecraft.server.packs.resources.MultiPackResourceManager; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; -import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; @@ -46,8 +42,6 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; -import org.apache.logging.log4j.core.jmx.Server; - import javax.annotation.Nonnull; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -169,16 +163,17 @@ private static VanillaPackResources getVanillaServerPack() { public static LootTables getManager() { if (manager == null) { - MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(getVanillaServerPack())); + PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource()); + rpl.reload(); + PackResources thePack = rpl.getAvailablePacks().iterator().next().open(); ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); manager = new LootTables(predicate); resourceManager.registerReloadListener(manager); try { - resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), resources.listPacks().toList()).done().get(); + resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), Collections.singletonList(thePack)).done().get(); } catch (Exception exception) { throw new RuntimeException(exception); } - } return manager; } @@ -197,7 +192,7 @@ private static synchronized List drops(Block b) { // the other overload for generate doesnt work in forge because forge adds code that requires a non null world getManager().get(lootTableLocation).getRandomItems( - new LootContext.Builder((ServerLevel null) + new LootContext.Builder((ServerLevel) null) .withRandom(RandomSource.create()) .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index a43d78e87..cc4204f8e 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -20,7 +20,6 @@ import java.util.HashMap; import java.util.Map; import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; @@ -29,7 +28,7 @@ public class BlockUtils { private static transient Map resourceCache = new HashMap<>(); public static String blockToString(Block block) { - ResourceLocation loc = BuiltInRegistries.BLOCK.getKey(block); + ResourceLocation loc = Registry.BLOCK.getKey(block); String name = loc.getPath(); // normally, only write the part after the minecraft: if (!loc.getNamespace().equals("minecraft")) { // Baritone is running on top of forge with mods installed, perhaps? @@ -57,7 +56,7 @@ public static Block stringToBlockNullable(String name) { if (resourceCache.containsKey(name)) { return null; // cached as null } - block = BuiltInRegistries.BLOCK.getOptional(ResourceLocation.tryParse(name.contains(":") ? name : "minecraft:" + name)).orElse(null); + block = Registry.BLOCK.getOptional(ResourceLocation.tryParse(name.contains(":") ? name : "minecraft:" + name)).orElse(null); Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification copy.put(name, block); resourceCache = copy; diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 9e82c05de..5b9358a21 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -23,7 +23,6 @@ import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; @@ -253,8 +252,8 @@ private enum Parser implements ISettingParser { ), ITEM( Item.class, - str -> BuiltInRegistries.ITEM.get(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? - item -> BuiltInRegistries.ITEM.getKey(item).toString() + str -> Registry.ITEM.get(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? + item -> Registry.ITEM.getKey(item).toString() ), LIST() { @Override diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index e718685c9..df3fbf09f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -20,19 +20,14 @@ import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; -import baritone.api.event.events.ChatEvent; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.type.EventState; import baritone.cache.CachedChunk; -import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.*; import net.minecraft.world.level.ChunkPos; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -68,25 +63,6 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { } }*/ - @Shadow @Final private Minecraft minecraft; - - @Inject( - method = "sendChat(Ljava/lang/String;)V", - at = @At("HEAD"), - cancellable = true - ) - private void sendChatMessage(String string, CallbackInfo ci) { - ChatEvent event = new ChatEvent(string); - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(this.minecraft.player); - if (baritone == null) { - return; - } - baritone.getGameEventHandler().onSendChatMessage(event); - if (event.isCancelled()) { - ci.cancel(); - } - } - @Inject( method = "handleLevelChunkWithLight", at = @At("RETURN") diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index 22ca083e0..e5f3e0375 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -41,6 +41,23 @@ @Mixin(LocalPlayer.class) public class MixinClientPlayerEntity { + @Inject( + method = "sendChat(Ljava/lang/String;Lnet/minecraft/network/chat/Component;)V", + at = @At("HEAD"), + cancellable = true + ) + private void sendChatMessage(String string, Component component, CallbackInfo ci) { + ChatEvent event = new ChatEvent(string); + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); + if (baritone == null) { + return; + } + baritone.getGameEventHandler().onSendChatMessage(event); + if (event.isCancelled()) { + ci.cancel(); + } + } + @Inject( method = "tick", at = @At( diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java index a6cf48899..622721281 100644 --- a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java @@ -21,11 +21,11 @@ import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; import net.minecraft.client.Camera; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LightTexture; -import org.joml.Matrix4f; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 500981873..913156400 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -27,7 +27,6 @@ import baritone.cache.CachedChunk; import net.minecraft.core.Registry; import net.minecraft.ChatFormatting; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; @@ -58,7 +57,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { Component[] components = toFind.stream() .flatMap(block -> ctx.worldData().getCachedWorld().getLocationsOf( - BuiltInRegistries.BLOCK.getKey(block).getPath(), + Registry.BLOCK.getKey(block).getPath(), Integer.MAX_VALUE, origin.x, origin.y, @@ -92,9 +91,9 @@ private Component positionToComponent(BetterBlockPos pos) { public Stream tabComplete(String label, IArgConsumer args) throws CommandException { return new TabCompleteHelper() .append( - CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream() - .map(BuiltInRegistries.BLOCK::getKey) - .map(Object::toString) + CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream() + .map(Registry.BLOCK::getKey) + .map(Object::toString) ) .filterPrefixNamespaced(args.getString()) .sortAlphabetically() diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index b7e708377..46c6a1c60 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -31,7 +31,6 @@ import java.util.function.Predicate; import java.util.stream.Stream; import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -85,7 +84,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } else { logDirect("Following these types of entities:"); classes.stream() - .map(BuiltInRegistries.ENTITY_TYPE::getKey) + .map(Registry.ENTITY_TYPE::getKey) .map(Objects::requireNonNull) .map(ResourceLocation::toString) .forEach(this::logDirect); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index b636ef9c2..128fa5e16 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -724,7 +724,7 @@ static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterf static boolean isBlockNormalCube(BlockState state) { Block block = state.getBlock(); - if (block instanceof BambooStalkBlock + if (block instanceof BambooBlock || block instanceof MovingPistonBlock || block instanceof ScaffoldingBlock || block instanceof ShulkerBoxBlock diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 876d5fb42..d0a435e1f 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -24,6 +24,8 @@ import baritone.api.utils.Helper; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; +import com.mojang.math.Vector4f; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; @@ -37,8 +39,6 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; -import org.joml.Vector4f; import java.awt.*; import java.util.Collections; @@ -118,8 +118,8 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { } public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { - this.projectionViewMatrix = new Matrix4f(projectionMatrix); - this.projectionViewMatrix.mul(modelViewStack.last().pose()); + this.projectionViewMatrix = projectionMatrix.copy(); + this.projectionViewMatrix.multiply(modelViewStack.last().pose()); this.projectionViewMatrix.invert(); if (currentMouseOver != null) { @@ -158,9 +158,12 @@ private Vec3 toWorld(double x, double y, double z) { y = y * 2 - 1; Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F); - projectionViewMatrix.transformProject(pos); + pos.transform(this.projectionViewMatrix); + if (pos.w() == 0) { + return null; + } - pos.normalize(); + pos.perspectiveDivide(); return new Vec3(pos.x(), pos.y(), pos.z()); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 380fbd9e0..d07bf44fa 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -23,9 +23,9 @@ import baritone.utils.accessor.IEntityRenderManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; +import com.mojang.math.Matrix4f; import java.awt.*; import net.minecraft.world.phys.AABB; -import org.joml.Matrix4f; import static org.lwjgl.opengl.GL11.*; diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index f18db52b2..5f50962e7 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -30,6 +30,7 @@ import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.math.Matrix4f; import java.awt.*; import java.util.Collection; import java.util.Collections; @@ -44,7 +45,6 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.joml.Matrix4f; import static org.lwjgl.opengl.GL11.*; diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java index 65cdec058..9fd672d62 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -20,7 +20,6 @@ import baritone.utils.schematic.StaticSchematic; import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.resources.ResourceLocation; @@ -94,7 +93,7 @@ private static BlockState[] getBlockList(ListTag blockStatePalette) { BlockState[] blockList = new BlockState[blockStatePalette.size()]; for (int i = 0; i < blockStatePalette.size(); i++) { - Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation((((CompoundTag) blockStatePalette.get(i)).getString("Name")))); + Block block = Registry.BLOCK.get(new ResourceLocation((((CompoundTag) blockStatePalette.get(i)).getString("Name")))); CompoundTag properties = ((CompoundTag) blockStatePalette.get(i)).getCompound("Properties"); blockList[i] = getBlockState(block, properties); diff --git a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java index 3018021a5..4693ea387 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java @@ -19,7 +19,6 @@ import baritone.utils.schematic.StaticSchematic; import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.datafix.fixes.ItemIdFix; @@ -63,7 +62,7 @@ public MCEditSchematic(CompoundTag schematic) { // additional is 0 through 15 inclusive since it's & 0xF above blockID |= additional[blockInd] << 8; } - Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.tryParse(ItemIdFix.getItem(blockID))); + Block block = Registry.BLOCK.get(ResourceLocation.tryParse(ItemIdFix.getItem(blockID))); // int meta = metadata[blockInd] & 0xFF; // this.states[x][z][y] = block.getStateFromMeta(meta); this.states[x][z][y] = block.defaultBlockState(); diff --git a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java index 12163cbff..3c00b08c6 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java @@ -26,7 +26,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; @@ -107,7 +106,7 @@ private SerializedBlockState(ResourceLocation resourceLocation, Map { diff --git a/tweaker/build.gradle b/tweaker/build.gradle index 1b6304189..ce623af6c 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -17,7 +17,7 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask -import baritone.gradle.task.TweakerJsonAssembler +//import baritone.gradle.task.TweakerJsonAssembler plugins { id "com.github.johnrengelman.shadow" version "7.0.0" From acce20c573a78688c2b1092e412fbc933dddff5b Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sun, 2 Apr 2023 17:01:49 -0700 Subject: [PATCH 512/935] remove 1.19.3 method in blockOptionalMeta --- build.gradle | 3 +-- buildSrc/build.gradle | 2 +- .../baritone/gradle/task/ProguardTask.java | 2 +- .../baritone/api/utils/BlockOptionalMeta.java | 20 ------------------- 4 files changed, 3 insertions(+), 24 deletions(-) diff --git a/build.gradle b/build.gradle index 471bb608f..b139b8438 100755 --- a/build.gradle +++ b/build.gradle @@ -126,8 +126,7 @@ jar { } remapJar { - targetNamespace = "named" - fallbackTargetNamespace = "intermediary" + target = "mojmap" } javadoc { diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 14b7dc3bb..e6c1468a7 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -36,5 +36,5 @@ dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' implementation group: 'commons-io', name: 'commons-io', version: '2.6' - implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.4' + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.4.9' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 5d80a65ea..52d1d93dc 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -81,7 +81,7 @@ protected void exec() throws Exception { MinecraftProvider provider = this.getProject().getExtensions().getByType(MinecraftProvider.class); private File getMcJar() { - return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdFallbackNamespace()).toFile(); + return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdNamespace()).toFile(); } private boolean isMcJar(File f) { diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index aaeed981f..13fe102ac 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -25,7 +25,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.packs.PackResources; import net.minecraft.server.packs.PackType; -import net.minecraft.server.packs.repository.Pack; import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.ServerPacksSource; import net.minecraft.server.packs.resources.ReloadableResourceManager; @@ -43,8 +42,6 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; import javax.annotation.Nonnull; -import java.lang.reflect.Field; -import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.regex.MatchResult; @@ -144,23 +141,6 @@ public BlockState getAnyBlockState() { return null; } - private static Method getVanillaServerPack; - - private static VanillaPackResources getVanillaServerPack() { - if (getVanillaServerPack == null) { - getVanillaServerPack = Arrays.stream(ServerPacksSource.class.getDeclaredMethods()).filter(field -> field.getReturnType() == VanillaPackResources.class).findFirst().orElseThrow(); - getVanillaServerPack.setAccessible(true); - } - - try { - return (VanillaPackResources) getVanillaServerPack.invoke(null); - } catch (Exception e) { - e.printStackTrace(); - } - - return null; - } - public static LootTables getManager() { if (manager == null) { PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource()); From f334b3b76572d6aa2bfdf643c0c957103441b201 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Mon, 10 Apr 2023 18:40:48 -0700 Subject: [PATCH 513/935] update setup.md --- SETUP.md | 67 +++++--------------------------------------------------- 1 file changed, 6 insertions(+), 61 deletions(-) diff --git a/SETUP.md b/SETUP.md index 57866b192..1daeb9f89 100644 --- a/SETUP.md +++ b/SETUP.md @@ -43,13 +43,13 @@ If another one of your Forge mods has a Baritone integration, you want `baritone ## Command Line On Mac OSX and Linux, use `./gradlew` instead of `gradlew`. -If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 for 1.12.2-1.16.5, JDK 16 for 1.17.1, and JDK 17 for 1.18.1. +If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 for 1.12.2-1.16.5, JDK 16+ for 1.17.1, and JDK 17+ for 1.18.1. To check which java you are using do `java -version` in a command prompt or terminal. If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work because the Java distributions above JDK 8 using may not have the needed javax classes. -Open JDK download: https://openjdk.java.net/install/ +Download java: https://adoptium.net/ #### macOS guide In order to get JDK 8, Try running the following command: `% /usr/libexec/java_home -V` @@ -66,68 +66,13 @@ In order to get JDK 8 running in the **current terminal window** you will have t To add OpenJDK 8 to your PATH add the export line to the end of your `.zshrc / .bashrc` if you want it to apply to each new terminal. If you're using bash change the .bachrc and if you're using zsh change the .zshrc -Setting up the Environment: +### Building Baritone -``` -$ gradlew setupDecompWorkspace -$ gradlew --refresh-dependencies -``` +These tasks depend on the minecraft version, but are (for the most part) standard for building mods. -Building Baritone: - -``` -$ gradlew build -``` - -For minecraft 1.15.2+, run the following instead to include the Forge jars: - -``` -$ gradlew build -Pbaritone.forge_build -``` - -Do this instead for Fabric jars: - -``` -$ gradlew build -Pbaritone.fabric_build -``` - -Running Baritone: - -``` -$ gradlew runClient -``` - -For information on how to build baritone, see [Building Baritone](#building-baritone) +for more details, see [the build ci action](/.github/workflows/gradle_build.yml) ## IntelliJ - Open the project in IntelliJ as a Gradle project - - ![Image](https://i.imgur.com/jw7Q6vY.png) - -- Run the Gradle tasks `setupDecompWorkspace` then `genIntellijRuns` - - ![Image](https://i.imgur.com/QEfVvWP.png) - - Refresh the Gradle project (or, to be safe, just restart IntelliJ) - - ![Image](https://i.imgur.com/3V7EdWr.png) - -- Select the "Minecraft Client" launch config - - ![Image](https://i.imgur.com/1qz2QGV.png) - -- Click on ``Edit Configurations...`` from the same dropdown and select the "Minecraft Client" config - - ![Image](https://i.imgur.com/s4ly0ZF.png) - -- In `Edit Configurations...` you need to select `baritone_launch` for `Use classpath of module:`. - - ![Image](https://i.imgur.com/hrLhG9u.png) - -## IntelliJ - -- Navigate to the gradle tasks on the right tab as follows - - ![Image](https://i.imgur.com/PE6r9iN.png) - -- Double click on **build** to run it +- depending on the minecraft version, you may need to run `setupDecompWorkspace` or `genIntellijRuns` in order to get everything working \ No newline at end of file From 35ab687d5e7ba76128571a24f985c90e7849a6ab Mon Sep 17 00:00:00 2001 From: leijurv Date: Tue, 11 Apr 2023 16:00:22 -0700 Subject: [PATCH 514/935] 1.9.3 download links --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a35e1199..f54584118 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | [1.17.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-forge-1.7.3.jar) | [1.17.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-fabric-1.7.3.jar) | | [1.18.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-forge-1.8.4.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-fabric-1.8.4.jar) | | [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) | -| | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.2/baritone-api-fabric-1.9.2.jar) | +| [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | **How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) From 6eeeeb3a1b3b921f5619a178aab0500497cfc292 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 11 Apr 2023 19:50:51 -0700 Subject: [PATCH 515/935] v1.9.4 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4c3f5b494..04999bf13 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.jvmargs=-Xmx4G -mod_version=1.9.1 +mod_version=1.9.4 maven_group=baritone archives_base_name=baritone From 5f2eadbfa663909ceb41073c021f2934c56ceb56 Mon Sep 17 00:00:00 2001 From: leijurv Date: Tue, 11 Apr 2023 20:36:29 -0700 Subject: [PATCH 516/935] download links for 1.19.2 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f54584118..8ae8090d7 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | [1.16.5 Forge](https://github.com/cabaletta/baritone/releases/download/v1.6.4/baritone-api-forge-1.6.4.jar) | [1.16.5 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.6.4/baritone-api-fabric-1.6.4.jar) | | [1.17.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-forge-1.7.3.jar) | [1.17.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-fabric-1.7.3.jar) | | [1.18.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-forge-1.8.4.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-fabric-1.8.4.jar) | +| [1.19.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.4/baritone-api-forge-1.9.4.jar) | [1.19.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.4/baritone-api-fabric-1.9.4.jar) | | [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) | | [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | From 7bb311687b1979ce8d0a59a413c0c9bc2117ffd4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 13 Apr 2023 14:00:11 -0700 Subject: [PATCH 517/935] v1.9.3 --- forge/src/main/resources/META-INF/mods.toml | 4 ++-- gradle.properties | 4 ++-- settings.gradle | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 2a25bf8ed..b1d54af8b 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.19.3]" +versionRange="[1.19.4]" ordering="NONE" -side="BOTH" \ No newline at end of file +side="BOTH" diff --git a/gradle.properties b/gradle.properties index 73cacce7d..1de9c913d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ org.gradle.jvmargs=-Xmx4G -mod_version=1.9.2 +mod_version=1.9.3 maven_group=baritone archives_base_name=baritone minecraft_version=1.19.4 -forge_version=1.19.3-44.0.1 +forge_version=1.19.4-45.0.43 fabric_version=0.14.11 diff --git a/settings.gradle b/settings.gradle index 58b6e203d..2475b0845 100755 --- a/settings.gradle +++ b/settings.gradle @@ -43,8 +43,7 @@ rootProject.name = 'baritone' include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { -// System.setProperty("Baritone.enabled_platforms", "fabric,forge") - System.setProperty("Baritone.enabled_platforms", "fabric") + System.setProperty("Baritone.enabled_platforms", "fabric,forge") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { include(platform) From e8a4a9fdac983a5270595a6e89dc9cad480cd988 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 24 Apr 2023 16:23:38 +0200 Subject: [PATCH 518/935] Make cocoa farmable --- .../java/baritone/process/FarmProcess.java | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 73c575d22..a9188299c 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -21,6 +21,7 @@ import baritone.api.BaritoneAPI; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; +import baritone.api.pathing.goals.GoalGetToBlock; import baritone.api.pathing.goals.GoalComposite; import baritone.api.process.IFarmProcess; import baritone.api.process.PathingCommand; @@ -119,6 +120,7 @@ private enum Harvest { PUMPKIN(Blocks.PUMPKIN, state -> true), MELON(Blocks.MELON_BLOCK, state -> true), NETHERWART(Blocks.NETHER_WART, state -> state.getValue(BlockNetherWart.AGE) >= 3), + COCOA(Blocks.COCOA, state -> state.getValue(BlockCocoa.AGE) >= 2), SUGARCANE(Blocks.REEDS, null) { @Override public boolean readyToHarvest(World world, BlockPos pos, IBlockState state) { @@ -176,6 +178,10 @@ private boolean isNetherWart(ItemStack stack) { return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART); } + private boolean isCocoa(ItemStack stack) { + return !stack.isEmpty() && stack.getItem() instanceof ItemDye && EnumDyeColor.byDyeDamage(stack.getMetadata()) == EnumDyeColor.BROWN; + } + @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { ArrayList scan = new ArrayList<>(); @@ -184,6 +190,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (Baritone.settings().replantCrops.value) { scan.add(Blocks.FARMLAND); + scan.add(Blocks.LOG); if (Baritone.settings().replantNetherWart.value) { scan.add(Blocks.SOUL_SAND); } @@ -199,6 +206,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { List openFarmland = new ArrayList<>(); List bonemealable = new ArrayList<>(); List openSoulsand = new ArrayList<>(); + List openLog = new ArrayList<>(); for (BlockPos pos : locations) { //check if the target block is out of range. if (range != 0 && pos.getDistance(center.getX(), center.getY(), center.getZ()) > range) { @@ -219,6 +227,19 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } continue; } + if (state.getBlock() == Blocks.LOG) { + // yes, both log blocks and the planks block define separate properties but share the enum + if (state.getValue(BlockOldLog.VARIANT) != BlockPlanks.EnumType.JUNGLE) { + continue; + } + for (EnumFacing direction : EnumFacing.Plane.HORIZONTAL) { + if (ctx.world().getBlockState(pos.offset(direction)).getBlock() instanceof BlockAir) { + openLog.add(pos); + break; + } + } + continue; + } if (readyForHarvest(ctx.world(), pos, state)) { toBreak.add(pos); continue; @@ -259,6 +280,25 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } } } + for (BlockPos pos : openLog) { + for (EnumFacing dir : EnumFacing.Plane.HORIZONTAL) { + if (!(ctx.world().getBlockState(pos.offset(dir)).getBlock() instanceof BlockAir)) { + continue; + } + Vec3d faceCenter = new Vec3d(pos).add(0.5, 0.5, 0.5).add(new Vec3d(dir.getDirectionVec()).scale(0.5)); + Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, faceCenter, ctx.playerController().getBlockReachDistance(), false); + if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, this::isCocoa)) { + RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); + if (result.typeOfHit == RayTraceResult.Type.BLOCK && result.sideHit == dir) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + if (ctx.isLookingAt(pos)) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + } + } for (BlockPos pos : bonemealable) { Optional rot = RotationUtils.reachable(ctx, pos); if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, this::isBoneMeal)) { @@ -293,6 +333,15 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { goalz.add(new GoalBlock(pos.up())); } } + if (baritone.getInventoryBehavior().throwaway(false, this::isCocoa)) { + for (BlockPos pos : openLog) { + for (EnumFacing direction : EnumFacing.Plane.HORIZONTAL) { + if (ctx.world().getBlockState(pos.offset(direction)).getBlock() instanceof BlockAir) { + goalz.add(new GoalGetToBlock(pos.offset(direction))); + } + } + } + } if (baritone.getInventoryBehavior().throwaway(false, this::isBoneMeal)) { for (BlockPos pos : bonemealable) { goalz.add(new GoalBlock(pos)); @@ -301,7 +350,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { for (Entity entity : ctx.world().loadedEntityList) { if (entity instanceof EntityItem && entity.onGround) { EntityItem ei = (EntityItem) entity; - if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { + if (PICKUP_DROPPED.contains(ei.getItem().getItem()) || isCocoa(ei.getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol goalz.add(new GoalBlock(new BlockPos(entity.posX, entity.posY + 0.1, entity.posZ))); } From e4cd35ac3391ca6b0e9993e4cd0dd1d34ffc9a12 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 24 Apr 2023 13:15:06 +0200 Subject: [PATCH 519/935] =?UTF-8?q?=E2=9C=A8=20Add=20maxYLevelWhileMining?= =?UTF-8?q?=20setting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/java/baritone/api/Settings.java | 5 +++++ src/main/java/baritone/process/MineProcess.java | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 38661d8be..c13cde2f7 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -853,6 +853,11 @@ public final class Settings { */ public final Setting minYLevelWhileMining = new Setting<>(0); + /** + * Sets the maximum y level to mine ores at. + */ + public final Setting maxYLevelWhileMining = new Setting<>(255); // 1.17+ defaults to maximum possible world height + /** * This will only allow baritone to mine exposed ores, can be used to stop ore obfuscators on servers that use them. */ diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 9af09a819..6880dd86c 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -437,6 +437,8 @@ private static List prune(CalculationContext ctx, List locs2 .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value) + .filter(pos -> pos.getY() <= Baritone.settings().maxYLevelWhileMining.value) + .filter(pos -> !blacklist.contains(pos)) .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player()::getDistanceSq)) From 271c2ff636ce1e6504cff363589008f9802a9633 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 24 Apr 2023 22:38:12 +0200 Subject: [PATCH 520/935] Extend BlockOptionalMeta parsing to parse block properties --- .../baritone/api/utils/BlockOptionalMeta.java | 57 +++++++++++++++---- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index e0f491fba..9864d5144 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -19,6 +19,7 @@ import baritone.api.utils.accessor.IItemStack; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableMap; import net.minecraft.block.*; import net.minecraft.block.properties.IProperty; import net.minecraft.block.state.IBlockState; @@ -36,21 +37,24 @@ import java.util.stream.Collectors; public final class BlockOptionalMeta { + // id:meta or id[] or id[properties] where id and properties are any text with at least one character and meta is a one or two digit number + private static final Pattern PATTERN = Pattern.compile("^(?.+?)(?::(?\\d\\d?)|\\[(?.+?)?\\])?$"); private final Block block; private final int meta; private final boolean noMeta; + private final String propertiesDescription; // exists so toString() can return something more useful than a list of all blockstates private final Set blockstates; private final Set stateHashes; private final Set stackHashes; - private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); private static final Map normalizations; public BlockOptionalMeta(@Nonnull Block block, @Nullable Integer meta) { this.block = block; this.noMeta = meta == null; this.meta = noMeta ? 0 : meta; - this.blockstates = getStates(block, meta); + this.propertiesDescription = "{}"; + this.blockstates = getStates(block, meta, Collections.emptyMap()); this.stateHashes = getStateHashes(blockstates); this.stackHashes = getStackHashes(blockstates); } @@ -60,24 +64,27 @@ public BlockOptionalMeta(@Nonnull Block block) { } public BlockOptionalMeta(@Nonnull String selector) { - Matcher matcher = pattern.matcher(selector); + Matcher matcher = PATTERN.matcher(selector); if (!matcher.find()) { throw new IllegalArgumentException("invalid block selector"); } - MatchResult matchResult = matcher.toMatchResult(); - noMeta = matchResult.group(2) == null; + noMeta = matcher.group("meta") == null; - ResourceLocation id = new ResourceLocation(matchResult.group(1)); + ResourceLocation id = new ResourceLocation(matcher.group("id")); if (!Block.REGISTRY.containsKey(id)) { throw new IllegalArgumentException("Invalid block ID"); } - block = Block.REGISTRY.getObject(id); - meta = noMeta ? 0 : Integer.parseInt(matchResult.group(2)); - blockstates = getStates(block, getMeta()); + + String props = matcher.group("properties"); + Map, ?> properties = props == null || props.equals("") ? Collections.emptyMap() : parseProperties(block, props); + + propertiesDescription = props == null ? "{}" : "{" + props.replace("=", ":") + "}"; + meta = noMeta ? 0 : Integer.parseInt(matcher.group("meta")); + blockstates = getStates(block, getMeta(), properties); stateHashes = getStateHashes(blockstates); stackHashes = getStackHashes(blockstates); } @@ -243,9 +250,32 @@ public static int stateMeta(IBlockState state) { return state.getBlock().getMetaFromState(normalize(state)); } - private static Set getStates(@Nonnull Block block, @Nullable Integer meta) { + private static Map, ?> parseProperties(Block block, String raw) { + ImmutableMap.Builder, Object> builder = ImmutableMap.builder(); + for (String pair : raw.split(",")) { + String[] parts = pair.split("="); + if (parts.length != 2) { + throw new IllegalArgumentException(String.format("\"%s\" is not a valid property-value pair", pair)); + } + String rawKey = parts[0]; + String rawValue = parts[1]; + IProperty key = block.getBlockState().getProperty(rawKey); + Comparable value = castToIProperty(key).parseValue(rawValue) + .toJavaUtil().orElseThrow(() -> new IllegalArgumentException(String.format( + "\"%s\" is not a valid value for %s on %s", + rawValue, key, block + ))); + builder.put(key, value); + } + return builder.build(); + } + + private static Set getStates(@Nonnull Block block, @Nullable Integer meta, @Nonnull Map, ?> properties) { return block.getBlockState().getValidStates().stream() .filter(blockstate -> meta == null || stateMeta(blockstate) == meta) + .filter(blockstate -> properties.entrySet().stream().allMatch(entry -> + blockstate.getValue(entry.getKey()) == entry.getValue() + )) .collect(Collectors.toSet()); } @@ -274,6 +304,7 @@ public Block getBlock() { return block; } + @Deprecated // deprecated because getMeta() == null no longer implies that this BOM only cares about the block public Integer getMeta() { return noMeta ? null : meta; } @@ -300,7 +331,11 @@ public boolean matches(ItemStack stack) { @Override public String toString() { - return String.format("BlockOptionalMeta{block=%s,meta=%s}", block, getMeta()); + if (noMeta) { + return String.format("BlockOptionalMeta{block=%s,properties=%s}", block, propertiesDescription); + } else { + return String.format("BlockOptionalMeta{block=%s,meta=%s}", block, getMeta()); + } } public static IBlockState blockStateFromStack(ItemStack stack) { From c45a714b77b2e22b15108be5dfa822ffbd7a90dd Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 8 May 2023 03:51:38 +0200 Subject: [PATCH 521/935] Fix considering states unplaceable even if buildIgnoreProperties allows it --- src/main/java/baritone/process/BuilderProcess.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index c7868a4a0..a10085afe 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -691,7 +691,7 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPla incorrectPositions.forEach(pos -> { IBlockState state = bcc.bsi.get0(pos); if (state.getBlock() instanceof BlockAir) { - if (approxPlaceable.contains(bcc.getSchematic(pos.x, pos.y, pos.z, state))) { + if (containsBlockState(approxPlaceable, bcc.getSchematic(pos.x, pos.y, pos.z, state))) { placeable.add(pos); } else { IBlockState desired = bcc.getSchematic(pos.x, pos.y, pos.z, state); @@ -922,6 +922,15 @@ private boolean sameBlockstate(IBlockState first, IBlockState second) { return true; } + private boolean containsBlockState(Collection states, IBlockState state) { + for (IBlockState testee : states) { + if (sameBlockstate(testee, state)) { + return true; + } + } + return false; + } + private boolean valid(IBlockState current, IBlockState desired, boolean itemVerify) { if (desired == null) { return true; From 43eb4e358185a286279170fcc0828086104a964f Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 10 May 2023 16:17:40 -0600 Subject: [PATCH 522/935] prepare for 1.20 --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 6 ++-- settings.gradle | 3 +- .../baritone/api/utils/BlockOptionalMeta.java | 34 +++++++++---------- .../baritone/api/utils/RayTraceUtils.java | 2 +- .../baritone/api/utils/RotationUtils.java | 8 ++--- .../baritone/api/utils/gui/BaritoneToast.java | 13 ++++--- .../launch/mixins/MixinLootContext.java | 23 +++---------- .../launch/mixins/MixinMinecraft.java | 21 ++++++++++-- .../baritone/behavior/PathingBehavior.java | 2 +- .../pathing/movement/MovementHelper.java | 7 ++-- .../movement/movements/MovementFall.java | 6 ++-- .../movement/movements/MovementParkour.java | 2 +- .../movement/movements/MovementPillar.java | 2 +- .../movement/movements/MovementTraverse.java | 2 +- .../baritone/pathing/path/PathExecutor.java | 4 +-- .../java/baritone/process/BuilderProcess.java | 4 +-- .../java/baritone/process/FarmProcess.java | 2 +- .../java/baritone/process/MineProcess.java | 2 +- src/main/java/baritone/utils/GuiClick.java | 5 +-- .../java/baritone/utils/PathRenderer.java | 6 ++-- 21 files changed, 77 insertions(+), 79 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 0dbbe1078..ed9414c75 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.4" + "minecraft": ">=1.20-beta.1 <1.20" } } diff --git a/gradle.properties b/gradle.properties index 1de9c913d..ce2e298f9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.3 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.4 -forge_version=1.19.4-45.0.43 -fabric_version=0.14.11 +minecraft_version=1.20-pre1 +#forge_version=1.19.4-45.0.43 +fabric_version=0.14.18 diff --git a/settings.gradle b/settings.gradle index 2475b0845..58b6e203d 100755 --- a/settings.gradle +++ b/settings.gradle @@ -43,7 +43,8 @@ rootProject.name = 'baritone' include("tweaker") if (System.getProperty("Baritone.enabled_platforms") == null) { - System.setProperty("Baritone.enabled_platforms", "fabric,forge") +// System.setProperty("Baritone.enabled_platforms", "fabric,forge") + System.setProperty("Baritone.enabled_platforms", "fabric") } for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { include(platform) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index b144240d0..d0eb461a3 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -45,8 +45,8 @@ import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.loot.BuiltInLootTables; import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.LootTables; -import net.minecraft.world.level.storage.loot.PredicateManager; +import net.minecraft.world.level.storage.loot.LootDataManager; +import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; @@ -69,8 +69,7 @@ public final class BlockOptionalMeta { private final ImmutableSet stateHashes; private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); - private static LootTables lootTables; - private static PredicateManager predicate = new PredicateManager(); + private static LootDataManager lootTables; private static Map> drops = new HashMap<>(); public BlockOptionalMeta(@Nonnull Block block) { @@ -172,11 +171,11 @@ private static VanillaPackResources getVanillaServerPack() { return null; } - public static LootTables getManager() { + public static LootDataManager getManager() { if (lootTables == null) { MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(getVanillaServerPack())); ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); - lootTables = new LootTables(predicate); + lootTables = new LootDataManager(); resourceManager.registerReloadListener(lootTables); try { resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), resources.listPacks().toList()).done().get(); @@ -188,10 +187,6 @@ public static LootTables getManager() { return lootTables; } - public static PredicateManager getPredicateManager() { - return predicate; - } - private static synchronized List drops(Block b) { return drops.computeIfAbsent(b, block -> { ResourceLocation lootTableLocation = block.getLootTable(); @@ -200,14 +195,17 @@ private static synchronized List drops(Block b) { } else { List items = new ArrayList<>(); try { - getManager().get(lootTableLocation).getRandomItems( - new LootContext.Builder(ServerLevelStub.fastCreate()) - .withRandom(RandomSource.create()) - .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) - .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) - .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) - .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) - .create(LootContextParamSets.BLOCK), + + getManager().getLootTable(lootTableLocation).getRandomItemsRaw( + new LootContext.Builder( + new LootParams.Builder(ServerLevelStub.fastCreate()) + .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) + .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) + .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) + .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) + .create(LootContextParamSets.BLOCK) + ).withOptionalRandomSeed(1L) + .create(null), stack -> items.add(stack.getItem()) ); } catch (Exception e) { diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 70c79be0b..5c0a78f37 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -57,7 +57,7 @@ public static HitResult rayTraceTowards(Entity entity, Rotation rotation, double direction.y * blockReachDistance, direction.z * blockReachDistance ); - return entity.level.clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)); + return entity.level().clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)); } public static Vec3 inferSneakingEyePosition(Entity entity) { diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index a6156354e..0a4fd8209 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -196,8 +196,8 @@ public static Optional reachable(LocalPlayer entity, BlockPos pos, dou return possibleRotation; } - BlockState state = entity.level.getBlockState(pos); - VoxelShape shape = state.getShape(entity.level, pos); + BlockState state = entity.level().getBlockState(pos); + VoxelShape shape = state.getShape(entity.level(), pos); if (shape.isEmpty()) { shape = Shapes.block(); } @@ -233,7 +233,7 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve if (((BlockHitResult) result).getBlockPos().equals(pos)) { return Optional.of(rotation); } - if (entity.level.getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { + if (entity.level().getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { return Optional.of(rotation); } } @@ -250,6 +250,6 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve * @return The optional rotation */ public static Optional reachableCenter(Entity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { - return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.level, pos), blockReachDistance, wouldSneak); + return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.level(), pos), blockReachDistance, wouldSneak); } } diff --git a/src/api/java/baritone/api/utils/gui/BaritoneToast.java b/src/api/java/baritone/api/utils/gui/BaritoneToast.java index 4965208c4..6cdc57cc0 100644 --- a/src/api/java/baritone/api/utils/gui/BaritoneToast.java +++ b/src/api/java/baritone/api/utils/gui/BaritoneToast.java @@ -20,6 +20,7 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.toasts.Toast; import net.minecraft.client.gui.components.toasts.ToastComponent; import net.minecraft.network.chat.Component; @@ -38,7 +39,7 @@ public BaritoneToast(Component titleComponent, Component subtitleComponent, long this.totalShowTime = totalShowTime; } - public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long delta) { + public Visibility render(GuiGraphics gui, ToastComponent toastGui, long delta) { if (this.newDisplay) { this.firstDrawTime = delta; this.newDisplay = false; @@ -46,15 +47,13 @@ public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long de //TODO: check - toastGui.getMinecraft().getTextureManager().bindForSetup(new ResourceLocation("textures/gui/toasts.png")); - //GlStateManager._color4f(1.0F, 1.0F, 1.0F, 255.0F); - toastGui.blit(matrixStack, 0, 0, 0, 32, 160, 32); + gui.blit(new ResourceLocation("textures/gui/toasts.png"), 0, 0, 0, 32, 160, 32); if (this.subtitle == null) { - toastGui.getMinecraft().font.draw(matrixStack, this.title, 18, 12, -11534256); + gui.drawString(toastGui.getMinecraft().font, this.title, 18, 12, -11534256); } else { - toastGui.getMinecraft().font.draw(matrixStack, this.title, 18, 7, -11534256); - toastGui.getMinecraft().font.draw(matrixStack, this.subtitle, 18, 18, -16777216); + gui.drawString(toastGui.getMinecraft().font, this.title, 18, 7, -11534256); + gui.drawString(toastGui.getMinecraft().font, this.subtitle, 18, 18, -16777216); } return delta - this.firstDrawTime < totalShowTime ? Visibility.SHOW : Visibility.HIDE; diff --git a/src/launch/java/baritone/launch/mixins/MixinLootContext.java b/src/launch/java/baritone/launch/mixins/MixinLootContext.java index 7c7960cf1..223444e12 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLootContext.java +++ b/src/launch/java/baritone/launch/mixins/MixinLootContext.java @@ -21,8 +21,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.LootTables; -import net.minecraft.world.level.storage.loot.PredicateManager; +import net.minecraft.world.level.storage.loot.LootDataManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -48,27 +47,13 @@ private MinecraftServer getServer(ServerLevel world) { method = "create", at = @At( value = "INVOKE", - target = "Lnet/minecraft/server/MinecraftServer;getLootTables()Lnet/minecraft/world/level/storage/loot/LootTables;" + target = "Lnet/minecraft/server/MinecraftServer;getLootData()Lnet/minecraft/world/level/storage/loot/LootDataManager;" ) ) - private LootTables getLootTableManager(MinecraftServer server) { + private LootDataManager getLootTableManager(MinecraftServer server) { if (server == null) { return BlockOptionalMeta.getManager(); } - return server.getLootTables(); - } - - @Redirect( - method = "create", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/server/MinecraftServer;getPredicateManager()Lnet/minecraft/world/level/storage/loot/PredicateManager;" - ) - ) - private PredicateManager getLootPredicateManager(MinecraftServer server) { - if (server == null) { - return BlockOptionalMeta.getPredicateManager(); - } - return server.getPredicateManager(); + return server.getLootData(); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index ae6996d0a..660292a19 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -32,6 +32,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.function.BiFunction; @@ -123,12 +124,26 @@ private void postLoadWorld(ClientLevel world, CallbackInfo ci) { at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "Lnet/minecraft/client/gui/screens/Screen;passEvents:Z" + target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;" + ), + slice = @Slice( + from = @At( + value = "FIELD", + opcode = Opcodes.GETFIELD, + target = "Lnet/minecraft/client/Options;renderDebug:Z" + ), + to = @At( + value = "CONSTANT", + args = "stringValue=Keybindings" + ) ) ) - private boolean passEvents(Screen screen) { + private Screen passEvents(Minecraft instance) { // allow user input is only the primary baritone - return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) || screen.passEvents; + if (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) { + return null; + } + return instance.screen; } // TODO diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index c307e673b..9a8c4d1b5 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -419,7 +419,7 @@ private void resetEstimatedTicksToGoal(BetterBlockPos start) { public BetterBlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); if (!MovementHelper.canWalkOn(ctx, feet.below())) { - if (ctx.player().isOnGround()) { + if (ctx.player().onGround()) { double playerX = ctx.player().position().x; double playerZ = ctx.player().position().z; ArrayList closest = new ArrayList<>(); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index b636ef9c2..b69388eb1 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -43,7 +43,6 @@ import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.WaterFluid; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.BlockHitResult; @@ -327,7 +326,7 @@ static boolean isReplaceable(int x, int y, int z, BlockState state, BlockStateIn if (block == Blocks.LARGE_FERN || block == Blocks.TALL_GRASS) { return true; } - return state.getMaterial().isReplaceable(); + return state.canBeReplaced(); } @Deprecated @@ -511,14 +510,14 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z) { static boolean canUseFrostWalker(CalculationContext context, BlockState state) { return context.frostWalker != 0 - && state.getMaterial() == Material.WATER + && state.getBlock() == Blocks.WATER && ((Integer) state.getValue(LiquidBlock.LEVEL)) == 0; } static boolean canUseFrostWalker(IPlayerContext ctx, BlockPos pos) { BlockState state = BlockStateInterface.get(ctx, pos); return EnchantmentHelper.hasFrostWalker(ctx.player()) - && state.getMaterial() == Material.WATER + && state.getBlock() == Blocks.WATER && ((Integer) state.getValue(LiquidBlock.LEVEL)) == 0; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index cb8711757..913b410aa 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -100,7 +100,7 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (ctx.player().position().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().isOnGround()) { + if (ctx.player().position().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().onGround()) { ctx.player().getInventory().selected = ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_WATER); targetRotation = new Rotation(toDest.getYaw(), 90.0F); @@ -135,7 +135,7 @@ public MovementState updateState(MovementState state) { } Vec3 destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) if (Math.abs(ctx.player().position().x + ctx.player().getDeltaMovement().x - destCenter.x) > 0.1 || Math.abs(ctx.player().position().z + ctx.player().getDeltaMovement().z - destCenter.z) > 0.1) { - if (!ctx.player().isOnGround() && Math.abs(ctx.player().getDeltaMovement().y) > 0.4) { + if (!ctx.player().onGround() && Math.abs(ctx.player().getDeltaMovement().y) > 0.4) { state.setInput(Input.SNEAK, true); } state.setInput(Input.MOVE_FORWARD, true); @@ -147,7 +147,7 @@ public MovementState updateState(MovementState state) { double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().position().x)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().position().z)); if (dist < 0.6) { state.setInput(Input.MOVE_FORWARD, true); - } else if (!ctx.player().isOnGround()) { + } else if (!ctx.player().onGround()) { state.setInput(Input.SNEAK, false); } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index c46cf68bd..1fa150a21 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -279,7 +279,7 @@ public MovementState updateState(MovementState state) { if (Baritone.settings().allowPlace.value // see PR #3775 && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway() && !MovementHelper.canWalkOn(ctx, dest.below()) - && !ctx.player().isOnGround() + && !ctx.player().onGround() && MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), true, false) == PlaceResult.READY_TO_PLACE ) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index cf084093c..50ecf930c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -256,7 +256,7 @@ public MovementState updateState(MovementState state) { BlockState frState = BlockStateInterface.get(ctx, src); Block fr = frState.getBlock(); // TODO: Evaluate usage of getMaterial().isReplaceable() - if (!(fr instanceof AirBlock || frState.getMaterial().isReplaceable())) { + if (!(fr instanceof AirBlock || frState.canBeReplaced())) { RotationUtils.reachable(ctx.player(), src, ctx.playerController().getBlockReachDistance()) .map(rot -> new MovementState.MovementTarget(rot, true)) .ifPresent(state::setTarget); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index cec3ca39a..705863407 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -261,7 +261,7 @@ public MovementState updateState(MovementState state) { } Block low = BlockStateInterface.get(ctx, src).getBlock(); Block high = BlockStateInterface.get(ctx, src.above()).getBlock(); - if (ctx.player().position().y > src.y + 0.1D && !ctx.player().isOnGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { + if (ctx.player().position().y > src.y + 0.1D && !ctx.player().onGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { // hitting W could cause us to climb the ladder instead of going forward // wait until we're on the ground return state; diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 5c89da116..d760f3a38 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -272,7 +272,7 @@ private boolean shouldPause() { if (!current.isPresent()) { return false; } - if (!ctx.player().isOnGround()) { + if (!ctx.player().onGround()) { return false; } if (!MovementHelper.canWalkOn(ctx, ctx.playerFeet().below())) { @@ -321,7 +321,7 @@ private boolean possiblyOffPath(Tuple status, double leniency) * @return Whether or not it was possible to snap to the current player feet */ public boolean snipsnapifpossible() { - if (!ctx.player().isOnGround() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { + if (!ctx.player().onGround() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { // if we're falling in the air, and not in water, don't splice return false; } else { diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 01eac45c1..62c9a3da0 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -525,7 +525,7 @@ public int lengthZ() { } Optional> toBreak = toBreakNearPlayer(bcc); - if (toBreak.isPresent() && isSafeToCancel && ctx.player().isOnGround()) { + if (toBreak.isPresent() && isSafeToCancel && ctx.player().onGround()) { // we'd like to pause to break this block // only change look direction if it's safe (don't want to fuck up an in progress parkour for example Rotation rot = toBreak.get().getB(); @@ -545,7 +545,7 @@ public int lengthZ() { } List desirableOnHotbar = new ArrayList<>(); Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); - if (toPlace.isPresent() && isSafeToCancel && ctx.player().isOnGround() && ticks <= 0) { + if (toPlace.isPresent() && isSafeToCancel && ctx.player().onGround() && ticks <= 0) { Rotation rot = toPlace.get().rot; baritone.getLookBehavior().updateTarget(rot, true); ctx.player().getInventory().selected = toPlace.get().hotbarSelection; diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 512951753..b9308591c 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -303,7 +303,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } } for (Entity entity : ctx.entities()) { - if (entity instanceof ItemEntity && entity.isOnGround()) { + if (entity instanceof ItemEntity && entity.onGround()) { ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index c7bbec752..3e5423b70 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -123,7 +123,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); baritone.getInputOverrideHandler().clearAllKeys(); - if (shaft.isPresent() && ctx.player().isOnGround()) { + if (shaft.isPresent() && ctx.player().onGround()) { BlockPos pos = shaft.get(); BlockState state = baritone.bsi.get0(pos); if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 5c7832b71..6b3f8f520 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -25,6 +25,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.GameRenderer; @@ -64,7 +65,7 @@ public boolean isPauseScreen() { } @Override - public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) { + public void render(GuiGraphics stack, int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHandler.xpos(); double my = mc.mouseHandler.ypos(); @@ -78,7 +79,7 @@ public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) /// Vec3 viewerPos = new Vec3(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); LocalPlayer player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); - HitResult result = player.level.clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); + HitResult result = player.level().clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); if (result != null && result.getType() == HitResult.Type.BLOCK) { currentMouseOver = ((BlockHitResult) result).getBlockPos(); System.out.println("currentMouseOver = " + currentMouseOver); diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index f18db52b2..438b1d092 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -88,7 +88,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { Entity renderView = Helper.mc.getCameraEntity(); - if (renderView.level != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { + if (renderView.level() != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { System.out.println("I have no idea what's going on"); System.out.println("The primary baritone is in a different world than the render view entity"); System.out.println("Not rendering the path"); @@ -209,7 +209,7 @@ public static void drawManySelectionBoxes(PoseStack stack, Entity player, Collec positions.forEach(pos -> { BlockState state = bsi.get0(pos); - VoxelShape shape = state.getShape(player.level, pos); + VoxelShape shape = state.getShape(player.level(), pos); AABB toDraw = shape.isEmpty() ? Shapes.block().bounds() : shape.bounds(); toDraw = toDraw.move(pos); IRenderer.drawAABB(stack, toDraw, .002D); @@ -272,7 +272,7 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, TEXTURE_BEACON_BEAM, settings.renderGoalAnimated.value ? partialTicks : 0, 1.0F, - settings.renderGoalAnimated.value ? player.level.getGameTime() : 0, + settings.renderGoalAnimated.value ? player.level().getGameTime() : 0, 0, 256, color.getColorComponents(null), From 63d0064d697e0d7da3abdf3a9e6af2c7c599e870 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 18 May 2023 22:37:07 -0600 Subject: [PATCH 523/935] pre.2 --- gradle.properties | 2 +- src/api/java/baritone/api/utils/BlockOptionalMeta.java | 7 +++++-- .../java/baritone/pathing/movement/MovementHelper.java | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index ce2e298f9..cf4c644d6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.3 maven_group=baritone archives_base_name=baritone -minecraft_version=1.20-pre1 +minecraft_version=1.20-pre2 #forge_version=1.19.4-45.0.43 fabric_version=0.14.18 diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index d0eb461a3..8723c3b51 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -33,6 +33,7 @@ import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; +import net.minecraft.world.RandomSequences; import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -53,6 +54,7 @@ import sun.misc.Unsafe; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.*; @@ -219,8 +221,9 @@ private static synchronized List drops(Block b) { private static class ServerLevelStub extends ServerLevel { private static Minecraft client = Minecraft.getInstance(); private static Unsafe unsafe = getUnsafe(); - public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.LevelStorageAccess $$2, ServerLevelData $$3, ResourceKey $$4, LevelStem $$5, ChunkProgressListener $$6, boolean $$7, long $$8, List $$9, boolean $$10) { - super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10); + + public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.LevelStorageAccess $$2, ServerLevelData $$3, ResourceKey $$4, LevelStem $$5, ChunkProgressListener $$6, boolean $$7, long $$8, List $$9, boolean $$10, @Nullable RandomSequences $$11) { + super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10, $$11); } @Override diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index b69388eb1..2c642b0e3 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -510,14 +510,14 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z) { static boolean canUseFrostWalker(CalculationContext context, BlockState state) { return context.frostWalker != 0 - && state.getBlock() == Blocks.WATER + && state == FrostedIceBlock.meltsInto() && ((Integer) state.getValue(LiquidBlock.LEVEL)) == 0; } static boolean canUseFrostWalker(IPlayerContext ctx, BlockPos pos) { BlockState state = BlockStateInterface.get(ctx, pos); return EnchantmentHelper.hasFrostWalker(ctx.player()) - && state.getBlock() == Blocks.WATER + && state == FrostedIceBlock.meltsInto() && ((Integer) state.getValue(LiquidBlock.LEVEL)) == 0; } From 336b2c27986017b0f104ffd27d7ffb51717782c8 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 31 May 2023 07:54:16 -0400 Subject: [PATCH 524/935] pre.7 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index cf4c644d6..aa86183f5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.3 maven_group=baritone archives_base_name=baritone -minecraft_version=1.20-pre2 +minecraft_version=1.20-pre7 #forge_version=1.19.4-45.0.43 fabric_version=0.14.18 From 80ec9023ce221dc147b4d12ad85f85abea965574 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 4 Jun 2023 12:31:34 -0500 Subject: [PATCH 525/935] Replace `JAVA_ONLY_SETTINGS` array with `@JavaOnly` annotation --- src/api/java/baritone/api/Settings.java | 27 +++++++++++++++++++ .../command/helpers/TabCompleteHelper.java | 2 +- .../java/baritone/api/utils/SettingsUtil.java | 15 ++++------- .../command/ExampleBaritoneControl.java | 4 +-- .../baritone/command/defaults/SetCommand.java | 4 +-- 5 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index c13cde2f7..b7a4e41a4 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -29,6 +29,10 @@ import net.minecraft.util.text.ITextComponent; import java.awt.*; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -1154,6 +1158,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ + @JavaOnly public final Setting> logger = new Setting<>(msg -> Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(msg)); /** @@ -1161,6 +1166,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ + @JavaOnly public final Setting> notifier = new Setting<>(NotificationHelper::notify); /** @@ -1168,6 +1174,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ + @JavaOnly public final Setting> toaster = new Setting<>(BaritoneToast::addOrUpdate); /** @@ -1312,6 +1319,7 @@ public final class Setting { public T value; public final T defaultValue; private String name; + private boolean javaOnly; @SuppressWarnings("unchecked") private Setting(T value) { @@ -1320,6 +1328,7 @@ private Setting(T value) { } this.value = value; this.defaultValue = value; + this.javaOnly = false; } /** @@ -1356,8 +1365,25 @@ public void reset() { public final Type getType() { return settingTypes.get(this); } + + /** + * This should always be the same as whether the setting can be parsed from or serialized to a string; in other + * words, the only way to modify it is by writing to {@link #value} programatically. + * + * @return {@code true} if the setting can not be set or read by the user + */ + public boolean isJavaOnly() { + return javaOnly; + } } + /** + * Marks a {@link Setting} field as being {@link Setting#isJavaOnly() Java-only} + */ + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.FIELD) + private @interface JavaOnly {} + // here be dragons Settings() { @@ -1373,6 +1399,7 @@ public final Type getType() { Setting setting = (Setting) field.get(this); String name = field.getName(); setting.name = name; + setting.javaOnly = field.isAnnotationPresent(JavaOnly.class); name = name.toLowerCase(); if (tmpByName.containsKey(name)) { throw new IllegalStateException("Duplicate setting name"); diff --git a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java index e438da308..96706d08b 100644 --- a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java @@ -253,7 +253,7 @@ public TabCompleteHelper addCommands(ICommandManager manager) { public TabCompleteHelper addSettings() { return append( BaritoneAPI.getSettings().allSettings.stream() - .filter(s -> !SettingsUtil.javaOnlySetting(s)) + .filter(s -> !s.isJavaOnly()) .map(Settings.Setting::getName) .sorted(String.CASE_INSENSITIVE_ORDER) ); diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 50e2363a6..0b9c64737 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -50,7 +50,6 @@ public class SettingsUtil { public static final String SETTINGS_DEFAULT_NAME = "settings.txt"; private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?.+)"); // key and value split by the first space - private static final String[] JAVA_ONLY_SETTINGS = {"logger", "notifier", "toaster"}; private static boolean isComment(String line) { return line.startsWith("#") || line.startsWith("//"); @@ -116,7 +115,7 @@ public static List modifiedSettings(Settings settings) { System.out.println("NULL SETTING?" + setting.getName()); continue; } - if (javaOnlySetting(setting)) { + if (setting.isJavaOnly()) { continue; // NO } if (setting.value == setting.defaultValue) { @@ -170,7 +169,7 @@ public static String maybeCensor(int coord) { } public static String settingToString(Settings.Setting setting) throws IllegalStateException { - if (javaOnlySetting(setting)) { + if (setting.isJavaOnly()) { return setting.getName(); } @@ -178,18 +177,14 @@ public static String settingToString(Settings.Setting setting) throws IllegalSta } /** - * This should always be the same as whether the setting can be parsed from or serialized to a string + * Deprecated. Use {@link Settings.Setting#isJavaOnly()} instead. * * @param setting The Setting * @return true if the setting can not be set or read by the user */ + @Deprecated public static boolean javaOnlySetting(Settings.Setting setting) { - for (String name : JAVA_ONLY_SETTINGS) { // no JAVA_ONLY_SETTINGS.contains(...) because that would be case sensitive - if (setting.getName().equalsIgnoreCase(name)) { - return true; - } - } - return false; + return setting.isJavaOnly(); } public static void parseAndApply(Settings settings, String settingName, String settingValue) throws IllegalStateException, NumberFormatException { diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index 7050bf302..28ced07f4 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -124,7 +124,7 @@ public boolean runCommand(String msg) { } } else if (argc.hasExactlyOne()) { for (Settings.Setting setting : settings.allSettings) { - if (SettingsUtil.javaOnlySetting(setting)) { + if (setting.isJavaOnly()) { continue; } if (setting.getName().equalsIgnoreCase(pair.getFirst())) { @@ -177,7 +177,7 @@ public Stream tabComplete(String msg) { .stream(); } Settings.Setting setting = settings.byLowerName.get(argc.getString().toLowerCase(Locale.US)); - if (setting != null && !SettingsUtil.javaOnlySetting(setting)) { + if (setting != null && !setting.isJavaOnly()) { if (setting.getValueClass() == Boolean.class) { TabCompleteHelper helper = new TabCompleteHelper(); if ((Boolean) setting.value) { diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 255dd6b28..dd6f1204b 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -77,7 +77,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(1); List toPaginate = (viewModified ? SettingsUtil.modifiedSettings(Baritone.settings()) : Baritone.settings().allSettings).stream() - .filter(s -> !javaOnlySetting(s)) + .filter(s -> !s.isJavaOnly()) .filter(s -> s.getName().toLowerCase(Locale.US).contains(search.toLowerCase(Locale.US))) .sorted((s1, s2) -> String.CASE_INSENSITIVE_ORDER.compare(s1.getName(), s2.getName())) .collect(Collectors.toList()); @@ -141,7 +141,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (setting == null) { throw new CommandInvalidTypeException(args.consumed(), "a valid setting"); } - if (javaOnlySetting(setting)) { + if (setting.isJavaOnly()) { // ideally it would act as if the setting didn't exist // but users will see it in Settings.java or its javadoc // so at some point we have to tell them or they will see it as a bug From 0d14bde5839887990236966bd5f09d46841c373f Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 7 Jun 2023 16:31:52 -0500 Subject: [PATCH 526/935] Working sphere/cylinder build commands for `#sel` --- .../api/schematic/CylinderSchematic.java | 50 ++++++++++++++++ .../api/schematic/SphereSchematic.java | 54 ++++++++++++++++++ .../baritone/command/defaults/SelCommand.java | 57 +++++++++++++++---- 3 files changed, 151 insertions(+), 10 deletions(-) create mode 100644 src/api/java/baritone/api/schematic/CylinderSchematic.java create mode 100644 src/api/java/baritone/api/schematic/SphereSchematic.java diff --git a/src/api/java/baritone/api/schematic/CylinderSchematic.java b/src/api/java/baritone/api/schematic/CylinderSchematic.java new file mode 100644 index 000000000..3ba8bc9b8 --- /dev/null +++ b/src/api/java/baritone/api/schematic/CylinderSchematic.java @@ -0,0 +1,50 @@ +/* + * 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.schematic; + +import net.minecraft.block.state.IBlockState; + +/** + * @author Brady + */ +public class CylinderSchematic extends MaskSchematic { + + private final double cx, cz, rx, rz; + private final boolean filled; + + public CylinderSchematic(ISchematic schematic, boolean filled) { + super(schematic); + this.cx = schematic.widthX() / 2.0; + this.cz = schematic.lengthZ() / 2.0; + this.rx = this.cx * this.cx; + this.rz = this.cz * this.cz; + this.filled = filled; + } + + @Override + protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { + double dx = Math.abs((x + 0.5) - this.cx); + double dz = Math.abs((z + 0.5) - this.cz); + return !this.outside(dx, dz) + && (this.filled || outside(dx + 1, dz) || outside(dx, dz + 1)); + } + + private boolean outside(double dx, double dz) { + return dx * dx / this.rx + dz * dz / this.rz > 1; + } +} diff --git a/src/api/java/baritone/api/schematic/SphereSchematic.java b/src/api/java/baritone/api/schematic/SphereSchematic.java new file mode 100644 index 000000000..0ca987760 --- /dev/null +++ b/src/api/java/baritone/api/schematic/SphereSchematic.java @@ -0,0 +1,54 @@ +/* + * 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.schematic; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.Vec3d; + +/** + * @author Brady + */ +public class SphereSchematic extends MaskSchematic { + + private final double cx, cy, cz, rx, ry, rz; + private final boolean filled; + + public SphereSchematic(ISchematic schematic, boolean filled) { + super(schematic); + this.cx = schematic.widthX() / 2.0; + this.cy = schematic.heightY() / 2.0; + this.cz = schematic.lengthZ() / 2.0; + this.rx = this.cx * this.cx; + this.ry = this.cy * this.cy; + this.rz = this.cz * this.cz; + this.filled = filled; + } + + @Override + protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { + double dx = Math.abs((x + 0.5) - this.cx); + double dy = Math.abs((y + 0.5) - this.cy); + double dz = Math.abs((z + 0.5) - this.cz); + return !this.outside(dx, dy, dz) + && (this.filled || outside(dx + 1, dy, dz) || outside(dx, dy + 1, dz) || outside(dx, dy, dz + 1)); + } + + private boolean outside(double dx,double dy, double dz) { + return dx * dx / this.rx + dy * dy / this.ry + dz * dz / this.rz > 1; + } +} diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 5677eec3c..dcdd05b74 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -117,7 +117,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect("Undid pos2"); } } - } else if (action == Action.SET || action == Action.WALLS || action == Action.SHELL || action == Action.CLEARAREA || action == Action.REPLACE) { + } else if (action.isFillAction()) { BlockOptionalMeta type = action == Action.CLEARAREA ? new BlockOptionalMeta(Blocks.AIR) : args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); @@ -151,14 +151,10 @@ public void execute(String label, IArgConsumer args) throws CommandException { for (ISelection selection : selections) { Vec3i size = selection.size(); BetterBlockPos min = selection.min(); - ISchematic schematic = new FillSchematic(size.getX(), size.getY(), size.getZ(), type); - if (action == Action.WALLS) { - schematic = new WallsSchematic(schematic); - } else if (action == Action.SHELL) { - schematic = new ShellSchematic(schematic); - } else if (action == Action.REPLACE) { - schematic = new ReplaceSchematic(schematic, replaces); - } + ISchematic schematic = action.createFillMask( + new FillSchematic(size.getX(), size.getY(), size.getZ(), type), + replaces + ); composite.put(schematic, min.x - origin.x, min.y - origin.y, min.z - origin.z); } baritone.getBuilderProcess().build("Fill", composite, origin); @@ -254,7 +250,7 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman if (args.hasAtMost(3)) { return args.tabCompleteDatatype(RelativeBlockPos.INSTANCE); } - } else if (action == Action.SET || action == Action.WALLS || action == Action.CLEARAREA || action == Action.REPLACE) { + } else if (action.isFillAction()) { if (args.hasExactlyOne() || action == Action.REPLACE) { while (args.has(2)) { args.get(); @@ -305,6 +301,10 @@ public List getLongDesc() { "> sel set/fill/s/f [block] - Completely fill all selections with a block.", "> sel walls/w [block] - Fill in the walls of the selection with a specified block.", "> sel shell/shl [block] - The same as walls, but fills in a ceiling and floor too.", + "> sel sphere/sph [block] - Fills the selection with a sphere bounded by the sides.", + "> sel hsphere/hsph [block] - The same as sphere, but hollow.", + "> sel cylinder/cyl [block] - Fills the selection with a cylinder bounded by the sides.", + "> sel hcylinder/hcyl [block] - The same as cylinder, but hollow.", "> sel cleararea/ca - Basically 'set air'.", "> sel replace/r - Replaces blocks with another block.", "> sel copy/cp - Copy the selected area relative to the specified or your position.", @@ -324,6 +324,10 @@ enum Action { SET("set", "fill", "s", "f"), WALLS("walls", "w"), SHELL("shell", "shl"), + SPHERE("sphere", "sph"), + HSPHERE("hsphere", "hsph"), + CYLINDER("cylinder", "cyl"), + HCYLINDER("hcylinder", "hcyl"), CLEARAREA("cleararea", "ca"), REPLACE("replace", "r"), EXPAND("expand", "ex"), @@ -355,6 +359,39 @@ public static String[] getAllNames() { } return names.toArray(new String[0]); } + + public final boolean isFillAction() { + return this == SET + || this == WALLS + || this == SHELL + || this == SPHERE + || this == HSPHERE + || this == CYLINDER + || this == HCYLINDER + || this == CLEARAREA + || this == REPLACE; + } + + public final ISchematic createFillMask(ISchematic fill, BlockOptionalMetaLookup replaces) { + switch (this) { + case WALLS: + return new WallsSchematic(fill); + case SHELL: + return new ShellSchematic(fill); + case REPLACE: + return new ReplaceSchematic(fill, replaces); + case SPHERE: + return new SphereSchematic(fill, true); + case HSPHERE: + return new SphereSchematic(fill, false); + case CYLINDER: + return new CylinderSchematic(fill, true); + case HCYLINDER: + return new CylinderSchematic(fill, false); + } + // Silent fail + return fill; + } } enum TransformTarget { From 34abbfb5daced3623e9a2a17da8018042980d758 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 7 Jun 2023 17:38:26 -0500 Subject: [PATCH 527/935] appease codacy --- .../api/schematic/CylinderSchematic.java | 19 +++++++------ .../api/schematic/SphereSchematic.java | 28 +++++++++++-------- .../baritone/command/defaults/SelCommand.java | 5 ++-- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/api/java/baritone/api/schematic/CylinderSchematic.java b/src/api/java/baritone/api/schematic/CylinderSchematic.java index 3ba8bc9b8..75726348d 100644 --- a/src/api/java/baritone/api/schematic/CylinderSchematic.java +++ b/src/api/java/baritone/api/schematic/CylinderSchematic.java @@ -24,27 +24,30 @@ */ public class CylinderSchematic extends MaskSchematic { - private final double cx, cz, rx, rz; + private final double centerX; + private final double centerZ; + private final double radiusSqX; + private final double radiusSqZ; private final boolean filled; public CylinderSchematic(ISchematic schematic, boolean filled) { super(schematic); - this.cx = schematic.widthX() / 2.0; - this.cz = schematic.lengthZ() / 2.0; - this.rx = this.cx * this.cx; - this.rz = this.cz * this.cz; + this.centerX = schematic.widthX() / 2.0; + this.centerZ = schematic.lengthZ() / 2.0; + this.radiusSqX = this.centerX * this.centerX; + this.radiusSqZ = this.centerZ * this.centerZ; this.filled = filled; } @Override protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { - double dx = Math.abs((x + 0.5) - this.cx); - double dz = Math.abs((z + 0.5) - this.cz); + double dx = Math.abs((x + 0.5) - this.centerX); + double dz = Math.abs((z + 0.5) - this.centerZ); return !this.outside(dx, dz) && (this.filled || outside(dx + 1, dz) || outside(dx, dz + 1)); } private boolean outside(double dx, double dz) { - return dx * dx / this.rx + dz * dz / this.rz > 1; + return dx * dx / this.radiusSqX + dz * dz / this.radiusSqZ > 1; } } diff --git a/src/api/java/baritone/api/schematic/SphereSchematic.java b/src/api/java/baritone/api/schematic/SphereSchematic.java index 0ca987760..1cf0a579f 100644 --- a/src/api/java/baritone/api/schematic/SphereSchematic.java +++ b/src/api/java/baritone/api/schematic/SphereSchematic.java @@ -18,37 +18,41 @@ package baritone.api.schematic; import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.Vec3d; /** * @author Brady */ public class SphereSchematic extends MaskSchematic { - private final double cx, cy, cz, rx, ry, rz; + private final double centerX; + private final double centerY; + private final double centerZ; + private final double radiusSqX; + private final double radiusSqY; + private final double radiusSqZ; private final boolean filled; public SphereSchematic(ISchematic schematic, boolean filled) { super(schematic); - this.cx = schematic.widthX() / 2.0; - this.cy = schematic.heightY() / 2.0; - this.cz = schematic.lengthZ() / 2.0; - this.rx = this.cx * this.cx; - this.ry = this.cy * this.cy; - this.rz = this.cz * this.cz; + this.centerX = schematic.widthX() / 2.0; + this.centerY = schematic.heightY() / 2.0; + this.centerZ = schematic.lengthZ() / 2.0; + this.radiusSqX = this.centerX * this.centerX; + this.radiusSqY = this.centerY * this.centerY; + this.radiusSqZ = this.centerZ * this.centerZ; this.filled = filled; } @Override protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { - double dx = Math.abs((x + 0.5) - this.cx); - double dy = Math.abs((y + 0.5) - this.cy); - double dz = Math.abs((z + 0.5) - this.cz); + double dx = Math.abs((x + 0.5) - this.centerX); + double dy = Math.abs((y + 0.5) - this.centerY); + double dz = Math.abs((z + 0.5) - this.centerZ); return !this.outside(dx, dy, dz) && (this.filled || outside(dx + 1, dy, dz) || outside(dx, dy + 1, dz) || outside(dx, dy, dz + 1)); } private boolean outside(double dx,double dy, double dz) { - return dx * dx / this.rx + dy * dy / this.ry + dz * dz / this.rz > 1; + return dx * dx / this.radiusSqX + dy * dy / this.radiusSqY + dz * dz / this.radiusSqZ > 1; } } diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index dcdd05b74..40df5c294 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -388,9 +388,10 @@ public final ISchematic createFillMask(ISchematic fill, BlockOptionalMetaLookup return new CylinderSchematic(fill, true); case HCYLINDER: return new CylinderSchematic(fill, false); + default: + // Silent fail + return fill; } - // Silent fail - return fill; } } From eb28298983f5d88f503a4a7b6a0adfae236de661 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 7 Jun 2023 17:03:21 -0600 Subject: [PATCH 528/935] confirm release version works --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index ed9414c75..c1b536a41 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": ">=1.20-beta.1 <1.20" + "minecraft": "1.20" } } diff --git a/gradle.properties b/gradle.properties index aa86183f5..ba7cfd14b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ mod_version=1.9.3 maven_group=baritone archives_base_name=baritone -minecraft_version=1.20-pre7 +minecraft_version=1.20 #forge_version=1.19.4-45.0.43 fabric_version=0.14.18 From b6c52cd8e1fd567afdefe428876f7ed0c2a7a4e4 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 8 Jun 2023 11:52:13 -0500 Subject: [PATCH 529/935] Cache mask in a `boolean[][][]` --- .../api/schematic/CachedMaskSchematic.java | 53 +++++++++++++++++++ .../api/schematic/CylinderSchematic.java | 43 +++++++-------- .../api/schematic/SphereSchematic.java | 51 ++++++++---------- 3 files changed, 92 insertions(+), 55 deletions(-) create mode 100644 src/api/java/baritone/api/schematic/CachedMaskSchematic.java diff --git a/src/api/java/baritone/api/schematic/CachedMaskSchematic.java b/src/api/java/baritone/api/schematic/CachedMaskSchematic.java new file mode 100644 index 000000000..19bcf4e3a --- /dev/null +++ b/src/api/java/baritone/api/schematic/CachedMaskSchematic.java @@ -0,0 +1,53 @@ +/* + * 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.schematic; + +import net.minecraft.block.state.IBlockState; + +/** + * @author Brady + */ +public abstract class CachedMaskSchematic extends MaskSchematic { + + /** + * Mask array with {@code y,z,x} indexing + */ + private final boolean[][][] mask; + + public CachedMaskSchematic(ISchematic schematic, StaticMaskFunction maskFunction) { + super(schematic); + this.mask = new boolean[schematic.heightY()][schematic.lengthZ()][schematic.widthX()]; + for (int y = 0; y < schematic.heightY(); y++) { + for (int z = 0; z < schematic.lengthZ(); z++) { + for (int x = 0; x < schematic.widthX(); x++) { + this.mask[y][z][x] = maskFunction.partOfMask(x, y, z); + } + } + } + } + + @Override + protected final boolean partOfMask(int x, int y, int z, IBlockState currentState) { + return this.mask[y][z][x]; + } + + @FunctionalInterface + public interface StaticMaskFunction { + boolean partOfMask(int x, int y, int z); + } +} diff --git a/src/api/java/baritone/api/schematic/CylinderSchematic.java b/src/api/java/baritone/api/schematic/CylinderSchematic.java index 75726348d..055f12875 100644 --- a/src/api/java/baritone/api/schematic/CylinderSchematic.java +++ b/src/api/java/baritone/api/schematic/CylinderSchematic.java @@ -17,37 +17,30 @@ package baritone.api.schematic; -import net.minecraft.block.state.IBlockState; - /** * @author Brady */ -public class CylinderSchematic extends MaskSchematic { - - private final double centerX; - private final double centerZ; - private final double radiusSqX; - private final double radiusSqZ; - private final boolean filled; +public final class CylinderSchematic extends CachedMaskSchematic { public CylinderSchematic(ISchematic schematic, boolean filled) { - super(schematic); - this.centerX = schematic.widthX() / 2.0; - this.centerZ = schematic.lengthZ() / 2.0; - this.radiusSqX = this.centerX * this.centerX; - this.radiusSqZ = this.centerZ * this.centerZ; - this.filled = filled; - } + super(schematic, new StaticMaskFunction() { - @Override - protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { - double dx = Math.abs((x + 0.5) - this.centerX); - double dz = Math.abs((z + 0.5) - this.centerZ); - return !this.outside(dx, dz) - && (this.filled || outside(dx + 1, dz) || outside(dx, dz + 1)); - } + private final double centerX = schematic.widthX() / 2.0; + private final double centerZ = schematic.lengthZ() / 2.0; + private final double radiusSqX = this.centerX * this.centerX; + private final double radiusSqZ = this.centerZ * this.centerZ; + + @Override + public boolean partOfMask(int x, int y, int z) { + double dx = Math.abs((x + 0.5) - this.centerX); + double dz = Math.abs((z + 0.5) - this.centerZ); + return !this.outside(dx, dz) + && (filled || outside(dx + 1, dz) || outside(dx, dz + 1)); + } - private boolean outside(double dx, double dz) { - return dx * dx / this.radiusSqX + dz * dz / this.radiusSqZ > 1; + private boolean outside(double dx, double dz) { + return dx * dx / this.radiusSqX + dz * dz / this.radiusSqZ > 1; + } + }); } } diff --git a/src/api/java/baritone/api/schematic/SphereSchematic.java b/src/api/java/baritone/api/schematic/SphereSchematic.java index 1cf0a579f..987b87198 100644 --- a/src/api/java/baritone/api/schematic/SphereSchematic.java +++ b/src/api/java/baritone/api/schematic/SphereSchematic.java @@ -17,42 +17,33 @@ package baritone.api.schematic; -import net.minecraft.block.state.IBlockState; - /** * @author Brady */ -public class SphereSchematic extends MaskSchematic { - - private final double centerX; - private final double centerY; - private final double centerZ; - private final double radiusSqX; - private final double radiusSqY; - private final double radiusSqZ; - private final boolean filled; +public final class SphereSchematic extends CachedMaskSchematic { public SphereSchematic(ISchematic schematic, boolean filled) { - super(schematic); - this.centerX = schematic.widthX() / 2.0; - this.centerY = schematic.heightY() / 2.0; - this.centerZ = schematic.lengthZ() / 2.0; - this.radiusSqX = this.centerX * this.centerX; - this.radiusSqY = this.centerY * this.centerY; - this.radiusSqZ = this.centerZ * this.centerZ; - this.filled = filled; - } + super(schematic, new StaticMaskFunction() { - @Override - protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { - double dx = Math.abs((x + 0.5) - this.centerX); - double dy = Math.abs((y + 0.5) - this.centerY); - double dz = Math.abs((z + 0.5) - this.centerZ); - return !this.outside(dx, dy, dz) - && (this.filled || outside(dx + 1, dy, dz) || outside(dx, dy + 1, dz) || outside(dx, dy, dz + 1)); - } + private final double centerX = schematic.widthX() / 2.0; + private final double centerY = schematic.heightY() / 2.0; + private final double centerZ = schematic.lengthZ() / 2.0; + private final double radiusSqX = this.centerX * this.centerX; + private final double radiusSqY = this.centerY * this.centerY; + private final double radiusSqZ = this.centerZ * this.centerZ; + + @Override + public boolean partOfMask(int x, int y, int z) { + double dx = Math.abs((x + 0.5) - this.centerX); + double dy = Math.abs((y + 0.5) - this.centerY); + double dz = Math.abs((z + 0.5) - this.centerZ); + return !this.outside(dx, dy, dz) + && (filled || outside(dx + 1, dy, dz) || outside(dx, dy + 1, dz) || outside(dx, dy, dz + 1)); + } - private boolean outside(double dx,double dy, double dz) { - return dx * dx / this.radiusSqX + dy * dy / this.radiusSqY + dz * dz / this.radiusSqZ > 1; + private boolean outside(double dx,double dy, double dz) { + return dx * dx / this.radiusSqX + dy * dy / this.radiusSqY + dz * dz / this.radiusSqZ > 1; + } + }); } } From a1b1ef88cf4d83ca027e05e589fc46ff148be634 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 8 Jun 2023 15:46:32 -0500 Subject: [PATCH 530/935] Use a Supplier to mimic a switch expression --- .../baritone/command/defaults/SelCommand.java | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 40df5c294..85b3e4307 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -50,6 +50,7 @@ import java.util.List; import java.util.*; import java.util.function.Function; +import java.util.function.UnaryOperator; import java.util.stream.Stream; public class SelCommand extends Command { @@ -121,7 +122,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { BlockOptionalMeta type = action == Action.CLEARAREA ? new BlockOptionalMeta(Blocks.AIR) : args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); - BlockOptionalMetaLookup replaces = null; + BlockOptionalMetaLookup replaces; if (action == Action.REPLACE) { args.requireMin(1); List replacesList = new ArrayList<>(); @@ -133,6 +134,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { replaces = new BlockOptionalMetaLookup(replacesList.toArray(new BlockOptionalMeta[0])); } else { args.requireMax(0); + replaces = null; } ISelection[] selections = manager.getSelections(); if (selections.length == 0) { @@ -151,10 +153,31 @@ public void execute(String label, IArgConsumer args) throws CommandException { for (ISelection selection : selections) { Vec3i size = selection.size(); BetterBlockPos min = selection.min(); - ISchematic schematic = action.createFillMask( - new FillSchematic(size.getX(), size.getY(), size.getZ(), type), - replaces - ); + + // Java 8 so no switch expressions 😿 + UnaryOperator create = fill -> { + switch (action) { + case WALLS: + return new WallsSchematic(fill); + case SHELL: + return new ShellSchematic(fill); + case REPLACE: + return new ReplaceSchematic(fill, replaces); + case SPHERE: + return new SphereSchematic(fill, true); + case HSPHERE: + return new SphereSchematic(fill, false); + case CYLINDER: + return new CylinderSchematic(fill, true); + case HCYLINDER: + return new CylinderSchematic(fill, false); + default: + // Silent fail + return fill; + } + }; + + ISchematic schematic = create.apply(new FillSchematic(size.getX(), size.getY(), size.getZ(), type)); composite.put(schematic, min.x - origin.x, min.y - origin.y, min.z - origin.z); } baritone.getBuilderProcess().build("Fill", composite, origin); @@ -371,28 +394,6 @@ public final boolean isFillAction() { || this == CLEARAREA || this == REPLACE; } - - public final ISchematic createFillMask(ISchematic fill, BlockOptionalMetaLookup replaces) { - switch (this) { - case WALLS: - return new WallsSchematic(fill); - case SHELL: - return new ShellSchematic(fill); - case REPLACE: - return new ReplaceSchematic(fill, replaces); - case SPHERE: - return new SphereSchematic(fill, true); - case HSPHERE: - return new SphereSchematic(fill, false); - case CYLINDER: - return new CylinderSchematic(fill, true); - case HCYLINDER: - return new CylinderSchematic(fill, false); - default: - // Silent fail - return fill; - } - } } enum TransformTarget { From 26574b4a9b23a67d1555b8717a084bcca51503b8 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 8 Jun 2023 16:32:33 -0500 Subject: [PATCH 531/935] Add optional axis parameter for `#sel cyl` --- .../api/command/datatypes/ForAxis.java | 43 +++++++++++++++++++ .../api/schematic/CylinderSchematic.java | 32 +++++++++----- .../baritone/command/defaults/SelCommand.java | 25 ++++++++--- 3 files changed, 84 insertions(+), 16 deletions(-) create mode 100644 src/api/java/baritone/api/command/datatypes/ForAxis.java diff --git a/src/api/java/baritone/api/command/datatypes/ForAxis.java b/src/api/java/baritone/api/command/datatypes/ForAxis.java new file mode 100644 index 000000000..48efb39b7 --- /dev/null +++ b/src/api/java/baritone/api/command/datatypes/ForAxis.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.command.datatypes; + +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import net.minecraft.util.EnumFacing; + +import java.util.Locale; +import java.util.stream.Stream; + +public enum ForAxis implements IDatatypeFor { + INSTANCE; + + @Override + public EnumFacing.Axis get(IDatatypeContext ctx) throws CommandException { + return EnumFacing.Axis.valueOf(ctx.getConsumer().getString().toUpperCase(Locale.US)); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + return new TabCompleteHelper() + .append(Stream.of(EnumFacing.Axis.values()) + .map(EnumFacing.Axis::getName).map(String::toLowerCase)) + .filterPrefix(ctx.getConsumer().getString()) + .stream(); + } +} diff --git a/src/api/java/baritone/api/schematic/CylinderSchematic.java b/src/api/java/baritone/api/schematic/CylinderSchematic.java index 055f12875..342c6e373 100644 --- a/src/api/java/baritone/api/schematic/CylinderSchematic.java +++ b/src/api/java/baritone/api/schematic/CylinderSchematic.java @@ -17,29 +17,39 @@ package baritone.api.schematic; +import net.minecraft.util.EnumFacing; + /** * @author Brady */ public final class CylinderSchematic extends CachedMaskSchematic { - public CylinderSchematic(ISchematic schematic, boolean filled) { + public CylinderSchematic(ISchematic schematic, boolean filled, EnumFacing.Axis alignment) { super(schematic, new StaticMaskFunction() { - private final double centerX = schematic.widthX() / 2.0; - private final double centerZ = schematic.lengthZ() / 2.0; - private final double radiusSqX = this.centerX * this.centerX; - private final double radiusSqZ = this.centerZ * this.centerZ; + private final double centerA = this.getA(schematic.widthX(), schematic.heightY()) / 2.0; + private final double centerB = this.getB(schematic.heightY(), schematic.lengthZ()) / 2.0; + private final double radiusSqA = this.centerA * this.centerA; + private final double radiusSqB = this.centerB * this.centerB; @Override public boolean partOfMask(int x, int y, int z) { - double dx = Math.abs((x + 0.5) - this.centerX); - double dz = Math.abs((z + 0.5) - this.centerZ); - return !this.outside(dx, dz) - && (filled || outside(dx + 1, dz) || outside(dx, dz + 1)); + double da = Math.abs((this.getA(x, y) + 0.5) - this.centerA); + double db = Math.abs((this.getB(y, z) + 0.5) - this.centerB); + return !this.outside(da, db) + && (filled || outside(da + 1, db) || outside(da, db + 1)); + } + + private boolean outside(double da, double db) { + return da * da / this.radiusSqA + db * db / this.radiusSqB > 1; + } + + private int getA(int x, int y) { + return alignment == EnumFacing.Axis.X ? y : x; } - private boolean outside(double dx, double dz) { - return dx * dx / this.radiusSqX + dz * dz / this.radiusSqZ > 1; + private int getB(int y, int z) { + return alignment == EnumFacing.Axis.Z ? y : z; } }); } diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 85b3e4307..72c5cd1c0 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.ForAxis; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.ForEnumFacing; import baritone.api.command.datatypes.RelativeBlockPos; @@ -122,7 +123,9 @@ public void execute(String label, IArgConsumer args) throws CommandException { BlockOptionalMeta type = action == Action.CLEARAREA ? new BlockOptionalMeta(Blocks.AIR) : args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); - BlockOptionalMetaLookup replaces; + + final BlockOptionalMetaLookup replaces; // Action.REPLACE + final EnumFacing.Axis alignment; // Action.(H)CYLINDER if (action == Action.REPLACE) { args.requireMin(1); List replacesList = new ArrayList<>(); @@ -132,9 +135,15 @@ public void execute(String label, IArgConsumer args) throws CommandException { } type = args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); replaces = new BlockOptionalMetaLookup(replacesList.toArray(new BlockOptionalMeta[0])); + alignment = null; + } else if (action == Action.CYLINDER || action == Action.HCYLINDER) { + args.requireMax(1); + alignment = args.hasAny() ? args.getDatatypeFor(ForAxis.INSTANCE) : EnumFacing.Axis.Y; + replaces = null; } else { args.requireMax(0); replaces = null; + alignment = null; } ISelection[] selections = manager.getSelections(); if (selections.length == 0) { @@ -168,9 +177,9 @@ public void execute(String label, IArgConsumer args) throws CommandException { case HSPHERE: return new SphereSchematic(fill, false); case CYLINDER: - return new CylinderSchematic(fill, true); + return new CylinderSchematic(fill, true, alignment); case HCYLINDER: - return new CylinderSchematic(fill, false); + return new CylinderSchematic(fill, false, alignment); default: // Silent fail return fill; @@ -279,6 +288,12 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman args.get(); } return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); + } else if (action == Action.CYLINDER || action == Action.HCYLINDER) { + if (args.hasExactly(2)) { + if (args.getDatatypeForOrNull(ForBlockOptionalMeta.INSTANCE) != null) { + return args.tabCompleteDatatype(ForAxis.INSTANCE); + } + } } } else if (action == Action.EXPAND || action == Action.CONTRACT || action == Action.SHIFT) { if (args.hasExactlyOne()) { @@ -326,8 +341,8 @@ public List getLongDesc() { "> sel shell/shl [block] - The same as walls, but fills in a ceiling and floor too.", "> sel sphere/sph [block] - Fills the selection with a sphere bounded by the sides.", "> sel hsphere/hsph [block] - The same as sphere, but hollow.", - "> sel cylinder/cyl [block] - Fills the selection with a cylinder bounded by the sides.", - "> sel hcylinder/hcyl [block] - The same as cylinder, but hollow.", + "> sel cylinder/cyl [block] - Fills the selection with a cylinder bounded by the sides, oriented about the given axis. (default=y)", + "> sel hcylinder/hcyl [block] - The same as cylinder, but hollow.", "> sel cleararea/ca - Basically 'set air'.", "> sel replace/r - Replaces blocks with another block.", "> sel copy/cp - Copy the selected area relative to the specified or your position.", From f232bbdb15cb6a07296b1a093a1213794e051e25 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 8 Jun 2023 16:36:32 -0500 Subject: [PATCH 532/935] Clean up formatting --- .../baritone/api/schematic/CylinderSchematic.java | 8 ++++++-- .../java/baritone/api/schematic/SphereSchematic.java | 11 ++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/api/java/baritone/api/schematic/CylinderSchematic.java b/src/api/java/baritone/api/schematic/CylinderSchematic.java index 342c6e373..29b5aa5b3 100644 --- a/src/api/java/baritone/api/schematic/CylinderSchematic.java +++ b/src/api/java/baritone/api/schematic/CylinderSchematic.java @@ -36,8 +36,12 @@ public CylinderSchematic(ISchematic schematic, boolean filled, EnumFacing.Axis a public boolean partOfMask(int x, int y, int z) { double da = Math.abs((this.getA(x, y) + 0.5) - this.centerA); double db = Math.abs((this.getB(y, z) + 0.5) - this.centerB); - return !this.outside(da, db) - && (filled || outside(da + 1, db) || outside(da, db + 1)); + if (this.outside(da, db)) { + return false; + } + return filled + || this.outside(da + 1, db) + || this.outside(da, db + 1); } private boolean outside(double da, double db) { diff --git a/src/api/java/baritone/api/schematic/SphereSchematic.java b/src/api/java/baritone/api/schematic/SphereSchematic.java index 987b87198..074e6ec51 100644 --- a/src/api/java/baritone/api/schematic/SphereSchematic.java +++ b/src/api/java/baritone/api/schematic/SphereSchematic.java @@ -37,11 +37,16 @@ public boolean partOfMask(int x, int y, int z) { double dx = Math.abs((x + 0.5) - this.centerX); double dy = Math.abs((y + 0.5) - this.centerY); double dz = Math.abs((z + 0.5) - this.centerZ); - return !this.outside(dx, dy, dz) - && (filled || outside(dx + 1, dy, dz) || outside(dx, dy + 1, dz) || outside(dx, dy, dz + 1)); + if (this.outside(dx, dy, dz)) { + return false; + } + return filled + || this.outside(dx + 1, dy, dz) + || this.outside(dx, dy + 1, dz) + || this.outside(dx, dy, dz + 1); } - private boolean outside(double dx,double dy, double dz) { + private boolean outside(double dx, double dy, double dz) { return dx * dx / this.radiusSqX + dy * dy / this.radiusSqY + dz * dz / this.radiusSqZ > 1; } }); From b389b573e54537eb4dbda871d59fdbb865e2e0f5 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Fri, 9 Jun 2023 08:27:38 -0600 Subject: [PATCH 533/935] add frog --- gradle.properties | 4 +++- settings.gradle | 6 +----- tweaker/build.gradle | 1 - 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index ba7cfd14b..b123b92e7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,11 @@ org.gradle.jvmargs=-Xmx4G +available_loaders=fabric,forge,tweaker + mod_version=1.9.3 maven_group=baritone archives_base_name=baritone minecraft_version=1.20 -#forge_version=1.19.4-45.0.43 +forge_version=1.20-46.0.2 fabric_version=0.14.18 diff --git a/settings.gradle b/settings.gradle index 58b6e203d..89e47805a 100755 --- a/settings.gradle +++ b/settings.gradle @@ -42,10 +42,6 @@ pluginManagement { rootProject.name = 'baritone' include("tweaker") -if (System.getProperty("Baritone.enabled_platforms") == null) { -// System.setProperty("Baritone.enabled_platforms", "fabric,forge") - System.setProperty("Baritone.enabled_platforms", "fabric") -} -for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { +for (platform in available_loaders.split(",")) { include(platform) } diff --git a/tweaker/build.gradle b/tweaker/build.gradle index ce623af6c..887d07cf2 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -47,7 +47,6 @@ dependencies { implementation "org.ow2.asm:asm-util:9.3" implementation "org.ow2.asm:asm-analysis:9.3" - implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' implementation('net.minecraft:launchwrapper:of-2.3') { exclude module: 'lwjgl' From 9729e63d980ace7038f2a79f78805b1fa21cc6c9 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 9 Jun 2023 17:25:29 -0500 Subject: [PATCH 534/935] Create and utilize new `Mask` type Added factory method to `MaskSchematic` for creation using a `Mask` Sort-of mocks the schematic structure, without the block states ofc --- .../api/schematic/CachedMaskSchematic.java | 53 -------------- .../api/schematic/CylinderSchematic.java | 60 ---------------- .../baritone/api/schematic/MaskSchematic.java | 11 +++ .../api/schematic/SphereSchematic.java | 54 --------------- .../api/schematic/mask/AbstractMask.java | 49 +++++++++++++ .../baritone/api/schematic/mask/Mask.java | 41 +++++++++++ .../api/schematic/mask/PreComputedMask.java | 44 ++++++++++++ .../api/schematic/mask/StaticMask.java | 62 +++++++++++++++++ .../schematic/mask/shape/CylinderMask.java | 69 +++++++++++++++++++ .../api/schematic/mask/shape/SphereMask.java | 64 +++++++++++++++++ .../baritone/command/defaults/SelCommand.java | 10 +-- 11 files changed, 346 insertions(+), 171 deletions(-) delete mode 100644 src/api/java/baritone/api/schematic/CachedMaskSchematic.java delete mode 100644 src/api/java/baritone/api/schematic/CylinderSchematic.java delete mode 100644 src/api/java/baritone/api/schematic/SphereSchematic.java create mode 100644 src/api/java/baritone/api/schematic/mask/AbstractMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/Mask.java create mode 100644 src/api/java/baritone/api/schematic/mask/PreComputedMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/StaticMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/shape/SphereMask.java diff --git a/src/api/java/baritone/api/schematic/CachedMaskSchematic.java b/src/api/java/baritone/api/schematic/CachedMaskSchematic.java deleted file mode 100644 index 19bcf4e3a..000000000 --- a/src/api/java/baritone/api/schematic/CachedMaskSchematic.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.schematic; - -import net.minecraft.block.state.IBlockState; - -/** - * @author Brady - */ -public abstract class CachedMaskSchematic extends MaskSchematic { - - /** - * Mask array with {@code y,z,x} indexing - */ - private final boolean[][][] mask; - - public CachedMaskSchematic(ISchematic schematic, StaticMaskFunction maskFunction) { - super(schematic); - this.mask = new boolean[schematic.heightY()][schematic.lengthZ()][schematic.widthX()]; - for (int y = 0; y < schematic.heightY(); y++) { - for (int z = 0; z < schematic.lengthZ(); z++) { - for (int x = 0; x < schematic.widthX(); x++) { - this.mask[y][z][x] = maskFunction.partOfMask(x, y, z); - } - } - } - } - - @Override - protected final boolean partOfMask(int x, int y, int z, IBlockState currentState) { - return this.mask[y][z][x]; - } - - @FunctionalInterface - public interface StaticMaskFunction { - boolean partOfMask(int x, int y, int z); - } -} diff --git a/src/api/java/baritone/api/schematic/CylinderSchematic.java b/src/api/java/baritone/api/schematic/CylinderSchematic.java deleted file mode 100644 index 29b5aa5b3..000000000 --- a/src/api/java/baritone/api/schematic/CylinderSchematic.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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.schematic; - -import net.minecraft.util.EnumFacing; - -/** - * @author Brady - */ -public final class CylinderSchematic extends CachedMaskSchematic { - - public CylinderSchematic(ISchematic schematic, boolean filled, EnumFacing.Axis alignment) { - super(schematic, new StaticMaskFunction() { - - private final double centerA = this.getA(schematic.widthX(), schematic.heightY()) / 2.0; - private final double centerB = this.getB(schematic.heightY(), schematic.lengthZ()) / 2.0; - private final double radiusSqA = this.centerA * this.centerA; - private final double radiusSqB = this.centerB * this.centerB; - - @Override - public boolean partOfMask(int x, int y, int z) { - double da = Math.abs((this.getA(x, y) + 0.5) - this.centerA); - double db = Math.abs((this.getB(y, z) + 0.5) - this.centerB); - if (this.outside(da, db)) { - return false; - } - return filled - || this.outside(da + 1, db) - || this.outside(da, db + 1); - } - - private boolean outside(double da, double db) { - return da * da / this.radiusSqA + db * db / this.radiusSqB > 1; - } - - private int getA(int x, int y) { - return alignment == EnumFacing.Axis.X ? y : x; - } - - private int getB(int y, int z) { - return alignment == EnumFacing.Axis.Z ? y : z; - } - }); - } -} diff --git a/src/api/java/baritone/api/schematic/MaskSchematic.java b/src/api/java/baritone/api/schematic/MaskSchematic.java index 229f58d5b..2853c6e58 100644 --- a/src/api/java/baritone/api/schematic/MaskSchematic.java +++ b/src/api/java/baritone/api/schematic/MaskSchematic.java @@ -17,6 +17,7 @@ package baritone.api.schematic; +import baritone.api.schematic.mask.Mask; import net.minecraft.block.state.IBlockState; import java.util.List; @@ -41,4 +42,14 @@ public boolean inSchematic(int x, int y, int z, IBlockState currentState) { public IBlockState desiredState(int x, int y, int z, IBlockState current, List approxPlaceable) { return schematic.desiredState(x, y, z, current, approxPlaceable); } + + public static MaskSchematic create(ISchematic schematic, Mask function) { + return new MaskSchematic(schematic) { + + @Override + protected boolean partOfMask(int x, int y, int z, IBlockState currentState) { + return function.partOfMask(x, y, z, currentState); + } + }; + } } diff --git a/src/api/java/baritone/api/schematic/SphereSchematic.java b/src/api/java/baritone/api/schematic/SphereSchematic.java deleted file mode 100644 index 074e6ec51..000000000 --- a/src/api/java/baritone/api/schematic/SphereSchematic.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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.schematic; - -/** - * @author Brady - */ -public final class SphereSchematic extends CachedMaskSchematic { - - public SphereSchematic(ISchematic schematic, boolean filled) { - super(schematic, new StaticMaskFunction() { - - private final double centerX = schematic.widthX() / 2.0; - private final double centerY = schematic.heightY() / 2.0; - private final double centerZ = schematic.lengthZ() / 2.0; - private final double radiusSqX = this.centerX * this.centerX; - private final double radiusSqY = this.centerY * this.centerY; - private final double radiusSqZ = this.centerZ * this.centerZ; - - @Override - public boolean partOfMask(int x, int y, int z) { - double dx = Math.abs((x + 0.5) - this.centerX); - double dy = Math.abs((y + 0.5) - this.centerY); - double dz = Math.abs((z + 0.5) - this.centerZ); - if (this.outside(dx, dy, dz)) { - return false; - } - return filled - || this.outside(dx + 1, dy, dz) - || this.outside(dx, dy + 1, dz) - || this.outside(dx, dy, dz + 1); - } - - private boolean outside(double dx, double dy, double dz) { - return dx * dx / this.radiusSqX + dy * dy / this.radiusSqY + dz * dz / this.radiusSqZ > 1; - } - }); - } -} diff --git a/src/api/java/baritone/api/schematic/mask/AbstractMask.java b/src/api/java/baritone/api/schematic/mask/AbstractMask.java new file mode 100644 index 000000000..ce92af0ec --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/AbstractMask.java @@ -0,0 +1,49 @@ +/* + * 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.schematic.mask; + +/** + * @author Brady + */ +public abstract class AbstractMask implements Mask { + + private final int widthX; + private final int heightY; + private final int lengthZ; + + public AbstractMask(int widthX, int heightY, int lengthZ) { + this.widthX = widthX; + this.heightY = heightY; + this.lengthZ = lengthZ; + } + + @Override + public int widthX() { + return this.widthX; + } + + @Override + public int heightY() { + return this.heightY; + } + + @Override + public int lengthZ() { + return this.lengthZ; + } +} diff --git a/src/api/java/baritone/api/schematic/mask/Mask.java b/src/api/java/baritone/api/schematic/mask/Mask.java new file mode 100644 index 000000000..540c2cee1 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/Mask.java @@ -0,0 +1,41 @@ +/* + * 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.schematic.mask; + +import net.minecraft.block.state.IBlockState; + +/** + * @author Brady + */ +public interface Mask { + + /** + * @param x The relative x position of the block + * @param y The relative y position of the block + * @param z The relative z position of the block + * @param currentState The current state of that block in the world, may be {@code null} + * @return Whether the given position is included in this mask + */ + boolean partOfMask(int x, int y, int z, IBlockState currentState); + + int widthX(); + + int heightY(); + + int lengthZ(); +} diff --git a/src/api/java/baritone/api/schematic/mask/PreComputedMask.java b/src/api/java/baritone/api/schematic/mask/PreComputedMask.java new file mode 100644 index 000000000..aed26cc94 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/PreComputedMask.java @@ -0,0 +1,44 @@ +/* + * 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.schematic.mask; + +/** + * @author Brady + */ +final class PreComputedMask extends AbstractMask implements StaticMask { + + private final boolean[][][] mask; + + public PreComputedMask(StaticMask mask) { + super(mask.widthX(), mask.heightY(), mask.lengthZ()); + + this.mask = new boolean[this.heightY()][this.lengthZ()][this.widthX()]; + for (int y = 0; y < this.heightY(); y++) { + for (int z = 0; z < this.lengthZ(); z++) { + for (int x = 0; x < this.widthX(); x++) { + this.mask[y][z][x] = mask.partOfMask(x, y, z); + } + } + } + } + + @Override + public boolean partOfMask(int x, int y, int z) { + return this.mask[y][z][x]; + } +} diff --git a/src/api/java/baritone/api/schematic/mask/StaticMask.java b/src/api/java/baritone/api/schematic/mask/StaticMask.java new file mode 100644 index 000000000..ef50a65cc --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/StaticMask.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 baritone.api.schematic.mask; + +import net.minecraft.block.state.IBlockState; + +/** + * A mask that is context-free. In other words, it doesn't require the current block state to determine if a relative + * position is a part of the mask. + * + * @author Brady + */ +public interface StaticMask extends Mask { + + /** + * Determines if a given relative coordinate is included in this mask, without the need for the current block state. + * + * @param x The relative x position of the block + * @param y The relative y position of the block + * @param z The relative z position of the block + * @return Whether the given position is included in this mask + */ + boolean partOfMask(int x, int y, int z); + + /** + * Implements the parent {@link Mask#partOfMask partOfMask function} by calling the static function + * provided in this functional interface without needing the {@link IBlockState} argument. This {@code default} + * implementation should NOT be overriden. + * + * @param x The relative x position of the block + * @param y The relative y position of the block + * @param z The relative z position of the block + * @param currentState The current state of that block in the world, may be {@code null} + * @return Whether the given position is included in this mask + */ + @Override + default boolean partOfMask(int x, int y, int z, IBlockState currentState) { + return this.partOfMask(x, y, z); + } + + /** + * Returns a pre-computed mask using {@code this} function, with the specified size parameters. + */ + default StaticMask compute() { + return new PreComputedMask(this); + } +} diff --git a/src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java b/src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java new file mode 100644 index 000000000..71b0d43c9 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java @@ -0,0 +1,69 @@ +/* + * 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.schematic.mask.shape; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.StaticMask; +import net.minecraft.util.EnumFacing; + +/** + * @author Brady + */ +public final class CylinderMask extends AbstractMask implements StaticMask { + + private final double centerA; + private final double centerB; + private final double radiusSqA; + private final double radiusSqB; + private final boolean filled; + private final EnumFacing.Axis alignment; + + public CylinderMask(int widthX, int heightY, int lengthZ, boolean filled, EnumFacing.Axis alignment) { + super(widthX, heightY, lengthZ); + this.centerA = this.getA(widthX, heightY) / 2.0; + this.centerB = this.getB(heightY, lengthZ) / 2.0; + this.radiusSqA = (this.centerA - 1) * (this.centerA - 1); + this.radiusSqB = (this.centerB - 1) * (this.centerB - 1); + this.filled = filled; + this.alignment = alignment; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + double da = Math.abs((this.getA(x, y) + 0.5) - this.centerA); + double db = Math.abs((this.getB(y, z) + 0.5) - this.centerB); + if (this.outside(da, db)) { + return false; + } + return this.filled + || this.outside(da + 1, db) + || this.outside(da, db + 1); + } + + private boolean outside(double da, double db) { + return da * da / this.radiusSqA + db * db / this.radiusSqB > 1; + } + + private int getA(int x, int y) { + return this.alignment == EnumFacing.Axis.X ? y : x; + } + + private int getB(int y, int z) { + return this.alignment == EnumFacing.Axis.Z ? y : z; + } +} diff --git a/src/api/java/baritone/api/schematic/mask/shape/SphereMask.java b/src/api/java/baritone/api/schematic/mask/shape/SphereMask.java new file mode 100644 index 000000000..d805c98a8 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/shape/SphereMask.java @@ -0,0 +1,64 @@ +/* + * 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.schematic.mask.shape; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.StaticMask; + +/** + * @author Brady + */ +public final class SphereMask extends AbstractMask implements StaticMask { + + private final double centerX; + private final double centerY; + private final double centerZ; + private final double radiusSqX; + private final double radiusSqY; + private final double radiusSqZ; + private final boolean filled; + + public SphereMask(int widthX, int heightY, int lengthZ, boolean filled) { + super(widthX, heightY, lengthZ); + this.centerX = widthX / 2.0; + this.centerY = heightY / 2.0; + this.centerZ = lengthZ / 2.0; + this.radiusSqX = this.centerX * this.centerX; + this.radiusSqY = this.centerY * this.centerY; + this.radiusSqZ = this.centerZ * this.centerZ; + this.filled = filled; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + double dx = Math.abs((x + 0.5) - this.centerX); + double dy = Math.abs((y + 0.5) - this.centerY); + double dz = Math.abs((z + 0.5) - this.centerZ); + if (this.outside(dx, dy, dz)) { + return false; + } + return this.filled + || this.outside(dx + 1, dy, dz) + || this.outside(dx, dy + 1, dz) + || this.outside(dx, dy, dz + 1); + } + + private boolean outside(double dx, double dy, double dz) { + return dx * dx / this.radiusSqX + dy * dy / this.radiusSqY + dz * dz / this.radiusSqZ > 1; + } +} diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 72c5cd1c0..e1d2082ff 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -32,6 +32,8 @@ import baritone.api.event.events.RenderEvent; import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.schematic.*; +import baritone.api.schematic.mask.shape.CylinderMask; +import baritone.api.schematic.mask.shape.SphereMask; import baritone.api.selection.ISelection; import baritone.api.selection.ISelectionManager; import baritone.api.utils.BetterBlockPos; @@ -173,13 +175,13 @@ public void execute(String label, IArgConsumer args) throws CommandException { case REPLACE: return new ReplaceSchematic(fill, replaces); case SPHERE: - return new SphereSchematic(fill, true); + return MaskSchematic.create(fill, new SphereMask(size.getX(), size.getY(), size.getZ(), true).compute()); case HSPHERE: - return new SphereSchematic(fill, false); + return MaskSchematic.create(fill, new SphereMask(size.getX(), size.getY(), size.getZ(), false).compute()); case CYLINDER: - return new CylinderSchematic(fill, true, alignment); + return MaskSchematic.create(fill, new CylinderMask(size.getX(), size.getY(), size.getZ(), true, alignment).compute()); case HCYLINDER: - return new CylinderSchematic(fill, false, alignment); + return MaskSchematic.create(fill, new CylinderMask(size.getX(), size.getY(), size.getZ(), false, alignment).compute()); default: // Silent fail return fill; From 705a5a0712ccadac53ac6e132128bce48f6e29e0 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 11 Jun 2023 00:33:35 -0700 Subject: [PATCH 535/935] elytra prototype mvp --- src/api/java/baritone/api/Settings.java | 4 + src/main/java/baritone/Baritone.java | 2 + src/main/java/baritone/Elytra.java | 274 ++++++++++++++++++ .../java/baritone/utils/PathRenderer.java | 22 +- 4 files changed, 293 insertions(+), 9 deletions(-) create mode 100644 src/main/java/baritone/Elytra.java diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index b7a4e41a4..5463f3163 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -48,6 +48,10 @@ */ public final class Settings { + public final Setting elytraSimulationTicks = new Setting<>(20); + public final Setting elytraPitchRange = new Setting<>(25); + public final Setting elytraFireworkSpeed = new Setting<>(0.425); + /** * Allow Baritone to break blocks */ diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 61db54211..a85155bcf 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -88,6 +88,7 @@ public class Baritone implements IBaritone { private IPlayerContext playerContext; private WorldProvider worldProvider; + public Elytra elytra; public BlockStateInterface bsi; @@ -100,6 +101,7 @@ public class Baritone implements IBaritone { { // the Behavior constructor calls baritone.registerBehavior(this) so this populates the behaviors arraylist pathingBehavior = new PathingBehavior(this); + elytra = new Elytra(this); lookBehavior = new LookBehavior(this); inventoryBehavior = new InventoryBehavior(this); inputOverrideHandler = new InputOverrideHandler(this); diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java new file mode 100644 index 000000000..ac253868b --- /dev/null +++ b/src/main/java/baritone/Elytra.java @@ -0,0 +1,274 @@ +/* + * 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; + +import baritone.api.event.events.TickEvent; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Helper; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; +import baritone.behavior.Behavior; +import baritone.utils.BlockStateInterface; +import net.minecraft.block.material.Material; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; + +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Elytra extends Behavior implements Helper { + + public static List path = new ArrayList<>(); + + static { + + try { + DataInputStream in = new DataInputStream(new FileInputStream(new File("/Users/leijurv/Dropbox/nether-pathfinder/build/test"))); + int count = in.readInt(); + System.out.println("Count: " + count); + for (int i = 0; i < count; i++) { + path.add(new BetterBlockPos((int) in.readDouble(), (int) in.readDouble(), (int) in.readDouble())); + } + removeBacktracks(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public int playerNear; + public int goingTo; + public int sinceFirework; + public BlockPos goal; + + protected Elytra(Baritone baritone) { + super(baritone); + } + + + @Override + public void onTick(TickEvent event) { + if (event.getType() == TickEvent.Type.OUT) { + return; + } + fixNearPlayer(); + baritone.getInputOverrideHandler().clearAllKeys(); + + if (ctx.player().isElytraFlying()) { + Vec3d start = ctx.playerFeetAsVec(); + boolean firework = firework(); + sinceFirework++; + if (!firework + && sinceFirework > 10 + && ctx.player().posY < path.get(goingTo).y + 5 // don't firework if trying to descend + && (ctx.player().posY < path.get(goingTo).y - 5 || ctx.playerFeetAsVec().distanceTo(new Vec3d(path.get(goingTo).x, ctx.player().posY, path.get(goingTo).z)) > 5) // UGH!!!!!!! + && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending + ) { + logDirect("firework"); + ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); + sinceFirework = 0; + } + long t = System.currentTimeMillis(); + for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) + int[] heights = firework ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost + boolean requireClear = relaxation == 0; + int steps = relaxation < 2 ? Baritone.settings().elytraSimulationTicks.value : 3; + int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps + for (int dy : heights) { + for (int i = Math.min(playerNear + 20, path.size()); i >= playerNear; i--) { + Vec3d dest = new Vec3d(path.get(i)).add(0, dy, 0); + if (dy != 0 && (i + lookahead >= path.size() || (!clearView(dest, new Vec3d(path.get(i + lookahead)).add(0, dy, 0)) || !clearView(dest, new Vec3d(path.get(i + lookahead)))))) { + // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position + continue; + } + if (requireClear ? isClear(start, dest) : clearView(start, dest)) { + Rotation rot = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()); + ctx.player().rotationYaw = rot.getYaw(); + long a = System.currentTimeMillis(); + Float pitch = solvePitch(dest.subtract(start), steps); + if (pitch == null) { + continue; + } + long b = System.currentTimeMillis(); + ctx.player().rotationPitch = pitch; + System.out.println("Solved pitch in " + (b - a) + " total time " + (b - t)); + goingTo = i; + goal = path.get(i).add(0, dy, 0); + return; + } + } + } + } + logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); + } + } + + private boolean firework() { + return ctx.world().loadedEntityList.stream().anyMatch(x -> (x instanceof EntityFireworkRocket) && ((EntityFireworkRocket) x).isAttachedToEntity()); + } + + private boolean isClear(Vec3d start, Vec3d dest) { + Vec3d perpendicular = dest.subtract(start).crossProduct(new Vec3d(0, 1, 0)).normalize(); + return clearView(start, dest) + && clearView(start.add(0, 2, 0), dest.add(0, 2, 0)) + && clearView(start.add(0, -2, 0), dest.add(0, -2, 0)) + && clearView(start.add(perpendicular), dest.add(perpendicular)) + && clearView(start.subtract(perpendicular), dest.subtract(perpendicular)); + } + + private boolean clearView(Vec3d start, Vec3d dest) { + RayTraceResult result = ctx.world().rayTraceBlocks(start, dest, true, false, true); + return result == null || result.typeOfHit == RayTraceResult.Type.MISS; + } + + private Float solvePitch(Vec3d goalDirection, int steps) { + // we are at a certain velocity, but we have a target velocity + // what pitch would get us closest to our target velocity? + // yaw is easy so we only care about pitch + + goalDirection = goalDirection.normalize(); + Rotation good = RotationUtils.calcRotationFromVec3d(new Vec3d(0, 0, 0), goalDirection, ctx.playerRotations()); // lazy lol + + boolean firework = firework(); + Float bestPitch = null; + double bestDot = Double.NEGATIVE_INFINITY; + Vec3d motion = new Vec3d(ctx.player().motionX, ctx.player().motionY, ctx.player().motionZ); + BlockStateInterface bsi = new BlockStateInterface(ctx); + outer: + for (float pitch = Math.max(good.getPitch() - Baritone.settings().elytraPitchRange.value, -89); pitch < Math.min(good.getPitch() + Baritone.settings().elytraPitchRange.value, 89); pitch++) { + Vec3d stepped = motion; + Vec3d totalMotion = new Vec3d(0, 0, 0); + for (int i = 0; i < steps; i++) { + stepped = step(stepped, pitch, good.getYaw(), firework); + totalMotion = totalMotion.add(stepped); + + Vec3d actualPosition = ctx.playerFeetAsVec().add(totalMotion); + if (bsi.get0(MathHelper.floor(actualPosition.x), MathHelper.floor(actualPosition.y), MathHelper.floor(actualPosition.z)).getMaterial() != Material.AIR) { + continue outer; + } + if (bsi.get0(MathHelper.floor(actualPosition.x), MathHelper.floor(actualPosition.y) + 1, MathHelper.floor(actualPosition.z)).getMaterial() != Material.AIR) { + continue outer; + } + } + double directionalGoodness = goalDirection.dotProduct(totalMotion.normalize()); + // tried to incorporate a "speedGoodness" but it kept making it do stupid stuff (aka always losing altitude) + double goodness = directionalGoodness; + if (goodness > bestDot) { + bestDot = goodness; + bestPitch = pitch; + } + } + return bestPitch; + } + + public static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, boolean firework) { + double motionX = motion.x; + double motionY = motion.y; + double motionZ = motion.z; + float flatZ = MathHelper.cos(-rotationYaw * 0.017453292F - (float) Math.PI); // 0.174... is Math.PI / 180 + float flatX = MathHelper.sin(-rotationYaw * 0.017453292F - (float) Math.PI); + float pitchBase = -MathHelper.cos(-rotationPitch * 0.017453292F); + float pitchHeight = MathHelper.sin(-rotationPitch * 0.017453292F); + Vec3d lookDirection = new Vec3d(flatX * pitchBase, pitchHeight, flatZ * pitchBase); + float pitchRadians = rotationPitch * 0.017453292F; + double pitchBase2 = Math.sqrt(lookDirection.x * lookDirection.x + lookDirection.z * lookDirection.z); + double flatMotion = Math.sqrt(motionX * motionX + motionZ * motionZ); + double thisIsAlwaysOne = lookDirection.length(); + float pitchBase3 = MathHelper.cos(pitchRadians); + //System.out.println("always the same lol " + -pitchBase + " " + pitchBase3); + //System.out.println("always the same lol " + Math.abs(pitchBase3) + " " + pitchBase2); + //System.out.println("always 1 lol " + thisIsAlwaysOne); + pitchBase3 = (float) ((double) pitchBase3 * (double) pitchBase3 * Math.min(1, thisIsAlwaysOne / 0.4)); + motionY += -0.08 + (double) pitchBase3 * 0.06; + if (motionY < 0 && pitchBase2 > 0) { + double speedModifier = motionY * -0.1 * (double) pitchBase3; + motionY += speedModifier; + motionX += lookDirection.x * speedModifier / pitchBase2; + motionZ += lookDirection.z * speedModifier / pitchBase2; + } + if (pitchRadians < 0) { // if you are looking down (below level) + double anotherSpeedModifier = flatMotion * (double) (-MathHelper.sin(pitchRadians)) * 0.04; + motionY += anotherSpeedModifier * 3.2; + motionX -= lookDirection.x * anotherSpeedModifier / pitchBase2; + motionZ -= lookDirection.z * anotherSpeedModifier / pitchBase2; + } + if (pitchBase2 > 0) { // this is always true unless you are looking literally straight up (let's just say the bot will never do that) + motionX += (lookDirection.x / pitchBase2 * flatMotion - motionX) * 0.1; + motionZ += (lookDirection.z / pitchBase2 * flatMotion - motionZ) * 0.1; + } + motionX *= 0.99; + motionY *= 0.98; + motionZ *= 0.99; + //System.out.println(motionX + " " + motionY + " " + motionZ); + if (firework) { + motionX += lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motionX) * 0.5; + motionY += lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motionY) * 0.5; + motionZ += lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motionZ) * 0.5; + } + return new Vec3d(motionX, motionY, motionZ); + } + + public void fixNearPlayer() { + BetterBlockPos pos = ctx.playerFeet(); + for (int i = playerNear; i >= Math.max(playerNear - 1000, 0); i -= 10) { + if (path.get(i).distanceSq(pos) < path.get(playerNear).distanceSq(pos)) { + playerNear = i; // intentional: this changes the bound of the loop + } + } + for (int i = playerNear; i < Math.min(playerNear + 1000, path.size()); i += 10) { + if (path.get(i).distanceSq(pos) < path.get(playerNear).distanceSq(pos)) { + playerNear = i; // intentional: this changes the bound of the loop + } + } + for (int i = playerNear; i >= Math.max(playerNear - 50, 0); i--) { + if (path.get(i).distanceSq(pos) < path.get(playerNear).distanceSq(pos)) { + playerNear = i; // intentional: this changes the bound of the loop + } + } + for (int i = playerNear; i < Math.min(playerNear + 50, path.size()); i++) { + if (path.get(i).distanceSq(pos) < path.get(playerNear).distanceSq(pos)) { + playerNear = i; // intentional: this changes the bound of the loop + } + } + //System.out.println(playerNear); + } + + public static void removeBacktracks() { + Map positionFirstSeen = new HashMap<>(); + for (int i = 0; i < path.size(); i++) { + BetterBlockPos pos = path.get(i); + if (positionFirstSeen.containsKey(pos)) { + int j = positionFirstSeen.get(pos); + while (i > j) { + path.remove(i); + i--; + } + } else { + positionFirstSeen.put(pos, i); + } + } + } +} diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 2fe224706..828479a5d 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -17,9 +17,9 @@ package baritone.utils; +import baritone.Elytra; import baritone.api.BaritoneAPI; import baritone.api.event.events.RenderEvent; -import baritone.api.pathing.calc.IPath; import baritone.api.pathing.goals.*; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Helper; @@ -96,33 +96,37 @@ public static void render(RenderEvent event, PathingBehavior behavior) { // Render the current path, if there is one if (current != null && current.getPath() != null) { int renderBegin = Math.max(current.getPosition() - 3, 0); - drawPath(current.getPath(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); + drawPath(current.getPath().positions(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); } if (next != null && next.getPath() != null) { - drawPath(next.getPath(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); + drawPath(next.getPath().positions(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); + } + + drawPath(Elytra.path.subList(Math.max(behavior.baritone.elytra.playerNear - 30, 0), Math.min(behavior.baritone.elytra.playerNear + 30, Elytra.path.size())), 0, Color.RED, false, 0, 0); + if (behavior.baritone.elytra.goal != null) { + drawDankLitGoalBox(renderView, new GoalBlock(behavior.baritone.elytra.goal), partialTicks, Color.GREEN); } // If there is a path calculation currently running, render the path calculation process behavior.getInProgress().ifPresent(currentlyRunning -> { currentlyRunning.bestPathSoFar().ifPresent(p -> { - drawPath(p, 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); + drawPath(p.positions(), 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); }); currentlyRunning.pathToMostRecentNodeConsidered().ifPresent(mr -> { - drawPath(mr, 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); + drawPath(mr.positions(), 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); drawManySelectionBoxes(renderView, Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); }); }); } - public static void drawPath(IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + public static void drawPath(List positions, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); int fadeStart = fadeStart0 + startIndex; int fadeEnd = fadeEnd0 + startIndex; - List positions = path.positions(); for (int i = startIndex, next; i < positions.size() - 1; i = next) { BetterBlockPos start = positions.get(i); BetterBlockPos end = positions.get(next = i + 1); @@ -131,12 +135,12 @@ public static void drawPath(IPath path, int startIndex, Color color, boolean fad int dirY = end.y - start.y; int dirZ = end.z - start.z; - while (next + 1 < positions.size() && (!fadeOut || next + 1 < fadeStart) && + /*while (next + 1 < positions.size() && (!fadeOut || next + 1 < fadeStart) && (dirX == positions.get(next + 1).x - end.x && dirY == positions.get(next + 1).y - end.y && dirZ == positions.get(next + 1).z - end.z)) { end = positions.get(++next); - } + }*/ if (fadeOut) { float alpha; From 94d757104b027c121ca2bc39f658b09e10ea28a5 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 11 Jun 2023 11:24:31 -0500 Subject: [PATCH 536/935] Clean ups --- .../java/baritone/command/defaults/SelCommand.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index e1d2082ff..0a11c86a8 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -167,6 +167,10 @@ public void execute(String label, IArgConsumer args) throws CommandException { // Java 8 so no switch expressions 😿 UnaryOperator create = fill -> { + final int w = fill.widthX(); + final int h = fill.heightY(); + final int l = fill.lengthZ(); + switch (action) { case WALLS: return new WallsSchematic(fill); @@ -175,13 +179,13 @@ public void execute(String label, IArgConsumer args) throws CommandException { case REPLACE: return new ReplaceSchematic(fill, replaces); case SPHERE: - return MaskSchematic.create(fill, new SphereMask(size.getX(), size.getY(), size.getZ(), true).compute()); + return MaskSchematic.create(fill, new SphereMask(w, h, l, true).compute()); case HSPHERE: - return MaskSchematic.create(fill, new SphereMask(size.getX(), size.getY(), size.getZ(), false).compute()); + return MaskSchematic.create(fill, new SphereMask(w, h, l, false).compute()); case CYLINDER: - return MaskSchematic.create(fill, new CylinderMask(size.getX(), size.getY(), size.getZ(), true, alignment).compute()); + return MaskSchematic.create(fill, new CylinderMask(w, h, l, true, alignment).compute()); case HCYLINDER: - return MaskSchematic.create(fill, new CylinderMask(size.getX(), size.getY(), size.getZ(), false, alignment).compute()); + return MaskSchematic.create(fill, new CylinderMask(w, h, l, false, alignment).compute()); default: // Silent fail return fill; From ffd00080f256e216238c7887c8549fd8bd8ae40f Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 11 Jun 2023 11:27:51 -0500 Subject: [PATCH 537/935] Mask binary operators --- .../baritone/api/schematic/mask/Mask.java | 19 +++++ .../api/schematic/mask/StaticMask.java | 20 ++++++ .../mask/operator/BinaryOperatorMask.java | 71 +++++++++++++++++++ .../api/schematic/mask/operator/NotMask.java | 56 +++++++++++++++ .../api/utils/BooleanBinaryOperator.java | 27 +++++++ .../api/utils/BooleanBinaryOperators.java | 38 ++++++++++ 6 files changed, 231 insertions(+) create mode 100644 src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/operator/NotMask.java create mode 100644 src/api/java/baritone/api/utils/BooleanBinaryOperator.java create mode 100644 src/api/java/baritone/api/utils/BooleanBinaryOperators.java diff --git a/src/api/java/baritone/api/schematic/mask/Mask.java b/src/api/java/baritone/api/schematic/mask/Mask.java index 540c2cee1..7df6f8f04 100644 --- a/src/api/java/baritone/api/schematic/mask/Mask.java +++ b/src/api/java/baritone/api/schematic/mask/Mask.java @@ -17,6 +17,9 @@ package baritone.api.schematic.mask; +import baritone.api.schematic.mask.operator.BinaryOperatorMask; +import baritone.api.schematic.mask.operator.NotMask; +import baritone.api.utils.BooleanBinaryOperators; import net.minecraft.block.state.IBlockState; /** @@ -38,4 +41,20 @@ public interface Mask { int heightY(); int lengthZ(); + + default Mask not() { + return new NotMask(this); + } + + default Mask union(Mask other) { + return new BinaryOperatorMask(this, other, BooleanBinaryOperators.OR); + } + + default Mask intersection(Mask other) { + return new BinaryOperatorMask(this, other, BooleanBinaryOperators.AND); + } + + default Mask xor(Mask other) { + return new BinaryOperatorMask(this, other, BooleanBinaryOperators.XOR); + } } diff --git a/src/api/java/baritone/api/schematic/mask/StaticMask.java b/src/api/java/baritone/api/schematic/mask/StaticMask.java index ef50a65cc..220a94828 100644 --- a/src/api/java/baritone/api/schematic/mask/StaticMask.java +++ b/src/api/java/baritone/api/schematic/mask/StaticMask.java @@ -17,6 +17,9 @@ package baritone.api.schematic.mask; +import baritone.api.schematic.mask.operator.BinaryOperatorMask; +import baritone.api.schematic.mask.operator.NotMask; +import baritone.api.utils.BooleanBinaryOperators; import net.minecraft.block.state.IBlockState; /** @@ -53,6 +56,23 @@ default boolean partOfMask(int x, int y, int z, IBlockState currentState) { return this.partOfMask(x, y, z); } + @Override + default StaticMask not() { + return new NotMask.Static(this); + } + + default StaticMask union(StaticMask other) { + return new BinaryOperatorMask.Static(this, other, BooleanBinaryOperators.OR); + } + + default StaticMask intersection(StaticMask other) { + return new BinaryOperatorMask.Static(this, other, BooleanBinaryOperators.AND); + } + + default StaticMask xor(StaticMask other) { + return new BinaryOperatorMask.Static(this, other, BooleanBinaryOperators.XOR); + } + /** * Returns a pre-computed mask using {@code this} function, with the specified size parameters. */ diff --git a/src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java b/src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java new file mode 100644 index 000000000..e591c7873 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java @@ -0,0 +1,71 @@ +/* + * 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.schematic.mask.operator; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.Mask; +import baritone.api.schematic.mask.StaticMask; +import baritone.api.utils.BooleanBinaryOperator; +import net.minecraft.block.state.IBlockState; + +/** + * @author Brady + */ +public final class BinaryOperatorMask extends AbstractMask { + + private final Mask a; + private final Mask b; + private final BooleanBinaryOperator operator; + + public BinaryOperatorMask(Mask a, Mask b, BooleanBinaryOperator operator) { + super(a.widthX(), a.heightY(), a.lengthZ()); + this.a = a; + this.b = b; + this.operator = operator; + } + + @Override + public boolean partOfMask(int x, int y, int z, IBlockState currentState) { + return this.operator.applyAsBoolean( + this.a.partOfMask(x, y, z, currentState), + this.b.partOfMask(x, y, z, currentState) + ); + } + + public static final class Static extends AbstractMask implements StaticMask { + + private final StaticMask a; + private final StaticMask b; + private final BooleanBinaryOperator operator; + + public Static(StaticMask a, StaticMask b, BooleanBinaryOperator operator) { + super(a.widthX(), a.heightY(), a.lengthZ()); + this.a = a; + this.b = b; + this.operator = operator; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + return this.operator.applyAsBoolean( + this.a.partOfMask(x, y, z), + this.b.partOfMask(x, y, z) + ); + } + } +} diff --git a/src/api/java/baritone/api/schematic/mask/operator/NotMask.java b/src/api/java/baritone/api/schematic/mask/operator/NotMask.java new file mode 100644 index 000000000..f9f770b82 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/operator/NotMask.java @@ -0,0 +1,56 @@ +/* + * 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.schematic.mask.operator; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.Mask; +import baritone.api.schematic.mask.StaticMask; +import net.minecraft.block.state.IBlockState; + +/** + * @author Brady + */ +public final class NotMask extends AbstractMask { + + private final Mask source; + + public NotMask(Mask source) { + super(source.widthX(), source.heightY(), source.lengthZ()); + this.source = source; + } + + @Override + public boolean partOfMask(int x, int y, int z, IBlockState currentState) { + return !this.source.partOfMask(x, y, z, currentState); + } + + public static final class Static extends AbstractMask implements StaticMask { + + private final StaticMask source; + + public Static(StaticMask source) { + super(source.widthX(), source.heightY(), source.lengthZ()); + this.source = source; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + return !this.source.partOfMask(x, y, z); + } + } +} diff --git a/src/api/java/baritone/api/utils/BooleanBinaryOperator.java b/src/api/java/baritone/api/utils/BooleanBinaryOperator.java new file mode 100644 index 000000000..cfb85e644 --- /dev/null +++ b/src/api/java/baritone/api/utils/BooleanBinaryOperator.java @@ -0,0 +1,27 @@ +/* + * 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; + +/** + * @author Brady + */ +@FunctionalInterface +public interface BooleanBinaryOperator { + + boolean applyAsBoolean(boolean a, boolean b); +} diff --git a/src/api/java/baritone/api/utils/BooleanBinaryOperators.java b/src/api/java/baritone/api/utils/BooleanBinaryOperators.java new file mode 100644 index 000000000..11605c965 --- /dev/null +++ b/src/api/java/baritone/api/utils/BooleanBinaryOperators.java @@ -0,0 +1,38 @@ +/* + * 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; + +/** + * @author Brady + */ +public enum BooleanBinaryOperators implements BooleanBinaryOperator { + OR((a, b) -> a || b), + AND((a, b) -> a && b), + XOR((a, b) -> a ^ b); + + private final BooleanBinaryOperator op; + + BooleanBinaryOperators(BooleanBinaryOperator op) { + this.op = op; + } + + @Override + public boolean applyAsBoolean(boolean a, boolean b) { + return this.op.applyAsBoolean(a, b); + } +} From 364ae87ef861dd12570a0db6081ad1d4f5d4a399 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 11 Jun 2023 12:36:53 -0500 Subject: [PATCH 538/935] Add `blockFreeLook` setting --- src/api/java/baritone/api/Settings.java | 5 +++++ src/api/java/baritone/api/utils/Rotation.java | 8 +++++-- .../baritone/api/utils/RotationUtils.java | 6 +++-- .../java/baritone/behavior/LookBehavior.java | 22 ++++++++++++++----- .../pathing/movement/MovementHelper.java | 4 ++-- .../movement/movements/MovementDescend.java | 5 ++--- .../movement/movements/MovementPillar.java | 4 ++-- .../utils/player/PrimaryPlayerContext.java | 16 ++++++++++---- 8 files changed, 50 insertions(+), 20 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index b7a4e41a4..b49fce01b 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -723,6 +723,11 @@ public final class Settings { */ public final Setting freeLook = new Setting<>(true); + /** + * Break and place blocks without having to force the client-sided rotations + */ + public final Setting blockFreeLook = new Setting<>(true); + /** * Will cause some minor behavioral differences to ensure that Baritone works on anticheats. *

diff --git a/src/api/java/baritone/api/utils/Rotation.java b/src/api/java/baritone/api/utils/Rotation.java index 54f63ebfa..8dab287de 100644 --- a/src/api/java/baritone/api/utils/Rotation.java +++ b/src/api/java/baritone/api/utils/Rotation.java @@ -26,12 +26,12 @@ public class Rotation { /** * The yaw angle of this Rotation */ - private float yaw; + private final float yaw; /** * The pitch angle of this Rotation */ - private float pitch; + private final float pitch; public Rotation(float yaw, float pitch) { this.yaw = yaw; @@ -110,6 +110,10 @@ public Rotation normalizeAndClamp() { ); } + public Rotation withPitch(float pitch) { + return new Rotation(this.yaw, pitch); + } + /** * Is really close to * diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 39e68fd4f..7b30f4abb 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -162,7 +162,8 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, public static Optional reachable(EntityPlayerSP entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(entity); - if (baritone.getPlayerContext().isLookingAt(pos)) { + IPlayerContext ctx = baritone.getPlayerContext(); + if (ctx.isLookingAt(pos)) { /* * why add 0.0001? * to indicate that we actually have a desired pitch @@ -173,7 +174,7 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, * * or if you're a normal person literally all this does it ensure that we don't nudge the pitch to a normal level */ - Rotation hypothetical = new Rotation(entity.rotationYaw, entity.rotationPitch + 0.0001F); + Rotation hypothetical = ctx.playerRotations().add(new Rotation(0, 0.0001F)); if (wouldSneak) { // the concern here is: what if we're looking at it now, but as soon as we start sneaking we no longer are RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, hypothetical, blockReachDistance, true); @@ -217,6 +218,7 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, */ public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3d offsetPos, double blockReachDistance, boolean wouldSneak) { Vec3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getPositionEyes(1.0F); + // TODO: pr/feature/blockFreeLook - Use playerRotations() here? Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.rotationYaw, entity.rotationPitch)); RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); //System.out.println(result); diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 32e5c22f5..7db3da562 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -22,6 +22,7 @@ import baritone.api.behavior.ILookBehavior; import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.RotationMoveEvent; +import baritone.api.event.events.type.EventState; import baritone.api.utils.Rotation; public final class LookBehavior extends Behavior implements ILookBehavior { @@ -34,17 +35,19 @@ public final class LookBehavior extends Behavior implements ILookBehavior { */ private Rotation target; + private Rotation serverAngles; + /** * Whether or not rotations are currently being forced */ private boolean force; /** - * The last player yaw angle. Used when free looking + * The last player angles. Used when free looking * * @see Settings#freeLook */ - private float lastYaw; + private Rotation prevAngles; public LookBehavior(Baritone baritone) { super(baritone); @@ -53,11 +56,14 @@ public LookBehavior(Baritone baritone) { @Override public void updateTarget(Rotation target, boolean force) { this.target = target; - this.force = force || !Baritone.settings().freeLook.value; + this.force = !Baritone.settings().blockFreeLook.value && (force || !Baritone.settings().freeLook.value); } @Override public void onPlayerUpdate(PlayerUpdateEvent event) { + if (event.getState() == EventState.POST) { + this.serverAngles = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); + } if (this.target == null) { return; } @@ -80,14 +86,16 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { this.target = null; } if (silent) { - this.lastYaw = ctx.player().rotationYaw; + this.prevAngles = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); ctx.player().rotationYaw = this.target.getYaw(); + ctx.player().rotationPitch = this.target.getPitch(); } break; } case POST: { if (silent) { - ctx.player().rotationYaw = this.lastYaw; + ctx.player().rotationYaw = this.prevAngles.getYaw(); + ctx.player().rotationPitch = this.prevAngles.getPitch(); this.target = null; } break; @@ -103,6 +111,10 @@ public void pig() { } } + public Rotation getEffectiveAngles() { + return this.serverAngles; + } + @Override public void onPlayerRotationMove(RotationMoveEvent event) { if (this.target != null) { diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 575815ea2..b14b2d69c 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -599,9 +599,9 @@ static void switchToBestToolFor(IPlayerContext ctx, IBlockState b, ToolSet ts, b static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { state.setTarget(new MovementTarget( - new Rotation(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), + RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(pos), - ctx.playerRotations()).getYaw(), ctx.player().rotationPitch), + ctx.playerRotations()).withPitch(ctx.playerRotations().getPitch()), false )).setInput(Input.MOVE_FORWARD, true); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index d36843cdd..2d8180356 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -234,11 +234,10 @@ public MovementState updateState(MovementState state) { if (safeMode()) { double destX = (src.getX() + 0.5) * 0.17 + (dest.getX() + 0.5) * 0.83; double destZ = (src.getZ() + 0.5) * 0.17 + (dest.getZ() + 0.5) * 0.83; - EntityPlayerSP player = ctx.player(); state.setTarget(new MovementState.MovementTarget( - new Rotation(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), + RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(destX, dest.getY(), destZ), - new Rotation(player.rotationYaw, player.rotationPitch)).getYaw(), player.rotationPitch), + ctx.playerRotations()).withPitch(ctx.playerRotations().getPitch()), false )).setInput(Input.MOVE_FORWARD, true); return state; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index cfa9d9260..88f1e26ff 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -190,9 +190,9 @@ public MovementState updateState(MovementState state) { boolean vine = fromDown.getBlock() == Blocks.VINE; Rotation rotation = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(positionToPlace), - new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch)); + ctx.playerRotations()); if (!ladder) { - state.setTarget(new MovementState.MovementTarget(new Rotation(ctx.player().rotationYaw, rotation.getPitch()), true)); + state.setTarget(new MovementState.MovementTarget(ctx.playerRotations().withPitch(rotation.getPitch()), true)); } boolean blockIsThere = MovementHelper.canWalkOn(ctx, src) || ladder; diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index 3cb498acd..cc35c156c 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -17,12 +17,11 @@ package baritone.utils.player; +import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.cache.IWorldData; -import baritone.api.utils.Helper; -import baritone.api.utils.IPlayerContext; -import baritone.api.utils.IPlayerController; -import baritone.api.utils.RayTraceUtils; +import baritone.api.utils.*; +import baritone.behavior.LookBehavior; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; @@ -57,6 +56,15 @@ public IWorldData worldData() { return BaritoneAPI.getProvider().getPrimaryBaritone().getWorldProvider().getCurrentWorld(); } + @Override + public Rotation playerRotations() { + final Rotation lbTarget = ((LookBehavior) BaritoneAPI.getProvider().getPrimaryBaritone().getLookBehavior()).getEffectiveAngles(); + if (lbTarget == null || !Baritone.settings().blockFreeLook.value) { + return IPlayerContext.super.playerRotations(); + } + return lbTarget; + } + @Override public RayTraceResult objectMouseOver() { return RayTraceUtils.rayTraceTowards(player(), playerRotations(), playerController().getBlockReachDistance()); From fbe28e397e880e022c43af81c59dc8f088cd42b6 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 11 Jun 2023 12:38:13 -0500 Subject: [PATCH 539/935] Make setting disabled by default --- src/api/java/baritone/api/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index b49fce01b..bf3cb1bdd 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -726,7 +726,7 @@ public final class Settings { /** * Break and place blocks without having to force the client-sided rotations */ - public final Setting blockFreeLook = new Setting<>(true); + public final Setting blockFreeLook = new Setting<>(false); /** * Will cause some minor behavioral differences to ensure that Baritone works on anticheats. From a09e63d6aa654b85b3dbc75ad1044e1e4d031b45 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 11 Jun 2023 13:14:52 -0500 Subject: [PATCH 540/935] appease codacy --- src/main/java/baritone/command/defaults/SelCommand.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 0a11c86a8..fb3608e75 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -294,12 +294,9 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman args.get(); } return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); - } else if (action == Action.CYLINDER || action == Action.HCYLINDER) { - if (args.hasExactly(2)) { - if (args.getDatatypeForOrNull(ForBlockOptionalMeta.INSTANCE) != null) { - return args.tabCompleteDatatype(ForAxis.INSTANCE); - } - } + } else if (args.hasExactly(2) && (action == Action.CYLINDER || action == Action.HCYLINDER)) { + args.get(); + return args.tabCompleteDatatype(ForAxis.INSTANCE); } } else if (action == Action.EXPAND || action == Action.CONTRACT || action == Action.SHIFT) { if (args.hasExactlyOne()) { From a602863426c32ace17de343c3c2306d5757bed81 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 11 Jun 2023 12:49:31 -0700 Subject: [PATCH 541/935] better elytra --- src/main/java/baritone/Elytra.java | 56 +++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index ac253868b..e50a098e6 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -78,6 +78,12 @@ public void onTick(TickEvent event) { baritone.getInputOverrideHandler().clearAllKeys(); if (ctx.player().isElytraFlying()) { + if (ctx.player().collidedHorizontally) { + logDirect("hbonk"); + } + if (ctx.player().collidedVertically) { + logDirect("vbonk"); + } Vec3d start = ctx.playerFeetAsVec(); boolean firework = firework(); sinceFirework++; @@ -97,12 +103,26 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat boolean requireClear = relaxation == 0; int steps = relaxation < 2 ? Baritone.settings().elytraSimulationTicks.value : 3; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps - for (int dy : heights) { - for (int i = Math.min(playerNear + 20, path.size()); i >= playerNear; i--) { + //int minStep = Math.max(0, playerNear - relaxation); + int minStep = playerNear; + for (int i = Math.min(playerNear + 20, path.size()); i >= minStep; i--) { + for (int dy : heights) { Vec3d dest = new Vec3d(path.get(i)).add(0, dy, 0); - if (dy != 0 && (i + lookahead >= path.size() || (!clearView(dest, new Vec3d(path.get(i + lookahead)).add(0, dy, 0)) || !clearView(dest, new Vec3d(path.get(i + lookahead)))))) { - // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position - continue; + if (dy != 0) { + if (i + lookahead >= path.size()) { + continue; + } + if (start.distanceTo(dest) < 40) { + if (!clearView(dest, new Vec3d(path.get(i + lookahead)).add(0, dy, 0)) || !clearView(dest, new Vec3d(path.get(i + lookahead)))) { + // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position + continue; + } + } else { + // but if it's far away, allow gaining altitude if we could lose it again by the time we get there + if (!clearView(dest, new Vec3d(path.get(i)))) { + continue; + } + } } if (requireClear ? isClear(start, dest) : clearView(start, dest)) { Rotation rot = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()); @@ -163,14 +183,17 @@ private Float solvePitch(Vec3d goalDirection, int steps) { Vec3d totalMotion = new Vec3d(0, 0, 0); for (int i = 0; i < steps; i++) { stepped = step(stepped, pitch, good.getYaw(), firework); + Vec3d actualPositionPrevTick = ctx.playerFeetAsVec().add(totalMotion); totalMotion = totalMotion.add(stepped); - Vec3d actualPosition = ctx.playerFeetAsVec().add(totalMotion); - if (bsi.get0(MathHelper.floor(actualPosition.x), MathHelper.floor(actualPosition.y), MathHelper.floor(actualPosition.z)).getMaterial() != Material.AIR) { - continue outer; - } - if (bsi.get0(MathHelper.floor(actualPosition.x), MathHelper.floor(actualPosition.y) + 1, MathHelper.floor(actualPosition.z)).getMaterial() != Material.AIR) { - continue outer; + for (int x = MathHelper.floor(Math.min(actualPosition.x, actualPositionPrevTick.x) - 0.31); x <= Math.max(actualPosition.x, actualPositionPrevTick.x) + 0.31; x++) { + for (int y = MathHelper.floor(Math.min(actualPosition.y, actualPositionPrevTick.y) - 0.2); y <= Math.max(actualPosition.y, actualPositionPrevTick.y) + 0.8; y++) { + for (int z = MathHelper.floor(Math.min(actualPosition.z, actualPositionPrevTick.z) - 0.31); z <= Math.max(actualPosition.z, actualPositionPrevTick.z) + 0.31; z++) { + if (bsi.get0(x, y, z).getMaterial() != Material.AIR) { + continue outer; + } + } + } } } double directionalGoodness = goalDirection.dotProduct(totalMotion.normalize()); @@ -193,6 +216,11 @@ public static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, b float pitchBase = -MathHelper.cos(-rotationPitch * 0.017453292F); float pitchHeight = MathHelper.sin(-rotationPitch * 0.017453292F); Vec3d lookDirection = new Vec3d(flatX * pitchBase, pitchHeight, flatZ * pitchBase); + if (firework) { + motionX += lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motionX) * 0.5; + motionY += lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motionY) * 0.5; + motionZ += lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motionZ) * 0.5; + } float pitchRadians = rotationPitch * 0.017453292F; double pitchBase2 = Math.sqrt(lookDirection.x * lookDirection.x + lookDirection.z * lookDirection.z); double flatMotion = Math.sqrt(motionX * motionX + motionZ * motionZ); @@ -223,11 +251,7 @@ public static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, b motionY *= 0.98; motionZ *= 0.99; //System.out.println(motionX + " " + motionY + " " + motionZ); - if (firework) { - motionX += lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motionX) * 0.5; - motionY += lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motionY) * 0.5; - motionZ += lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motionZ) * 0.5; - } + return new Vec3d(motionX, motionY, motionZ); } From 77ca36c7947541faef6e1519823c4b06c913bc88 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 11 Jun 2023 15:49:04 -0500 Subject: [PATCH 542/935] Use `playerRotations` in `reachableOffset` --- src/api/java/baritone/api/utils/RotationUtils.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 7b30f4abb..0d5a3ad1f 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -216,10 +216,10 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3d offsetPos, double blockReachDistance, boolean wouldSneak) { + public static Optional reachableOffset(EntityPlayerSP entity, BlockPos pos, Vec3d offsetPos, double blockReachDistance, boolean wouldSneak) { + IPlayerContext ctx = BaritoneAPI.getProvider().getBaritoneForPlayer(entity).getPlayerContext(); Vec3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getPositionEyes(1.0F); - // TODO: pr/feature/blockFreeLook - Use playerRotations() here? - Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.rotationYaw, entity.rotationPitch)); + Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, ctx.playerRotations()); RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); //System.out.println(result); if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) { @@ -242,7 +242,7 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachableCenter(Entity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + public static Optional reachableCenter(EntityPlayerSP entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.world, pos), blockReachDistance, wouldSneak); } } From c48c2aa45cc0904ae8c994064ad226a4527ad163 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 11 Jun 2023 13:57:21 -0700 Subject: [PATCH 543/935] allow even more desperate motion --- src/main/java/baritone/Elytra.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index e50a098e6..1534b211d 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -128,7 +128,7 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat Rotation rot = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()); ctx.player().rotationYaw = rot.getYaw(); long a = System.currentTimeMillis(); - Float pitch = solvePitch(dest.subtract(start), steps); + Float pitch = solvePitch(dest.subtract(start), steps, relaxation == 2); if (pitch == null) { continue; } @@ -164,7 +164,7 @@ private boolean clearView(Vec3d start, Vec3d dest) { return result == null || result.typeOfHit == RayTraceResult.Type.MISS; } - private Float solvePitch(Vec3d goalDirection, int steps) { + private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch @@ -177,8 +177,10 @@ private Float solvePitch(Vec3d goalDirection, int steps) { double bestDot = Double.NEGATIVE_INFINITY; Vec3d motion = new Vec3d(ctx.player().motionX, ctx.player().motionY, ctx.player().motionZ); BlockStateInterface bsi = new BlockStateInterface(ctx); + float minPitch = desperate ? -90 : Math.max(good.getPitch() - Baritone.settings().elytraPitchRange.value, -89); + float maxPitch = desperate ? 90 : Math.min(good.getPitch() + Baritone.settings().elytraPitchRange.value, 89); outer: - for (float pitch = Math.max(good.getPitch() - Baritone.settings().elytraPitchRange.value, -89); pitch < Math.min(good.getPitch() + Baritone.settings().elytraPitchRange.value, 89); pitch++) { + for (float pitch = minPitch; pitch <= maxPitch; pitch++) { Vec3d stepped = motion; Vec3d totalMotion = new Vec3d(0, 0, 0); for (int i = 0; i < steps; i++) { From 666a890088ed4e7f5db2f7721fd21b4e820c8d41 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sun, 11 Jun 2023 16:46:15 -0600 Subject: [PATCH 544/935] fix frog --- forge/src/main/resources/META-INF/mods.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index b1d54af8b..ba1609c97 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -6,7 +6,7 @@ # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[33,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion="[46,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" # A URL to refer people to when problems occur with this mod issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.19.4]" +versionRange="[1.20]" ordering="NONE" side="BOTH" From 4317dca024ec0d68b3d402b82777a453f7c121b1 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 11 Jun 2023 18:35:34 -0500 Subject: [PATCH 545/935] Determine target mode (client/server) in `updateTarget` --- src/api/java/baritone/api/Settings.java | 3 +- .../baritone/api/behavior/ILookBehavior.java | 13 +- .../java/baritone/behavior/LookBehavior.java | 125 +++++++++++------- 3 files changed, 87 insertions(+), 54 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index bf3cb1bdd..bcd3eaa63 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -724,7 +724,8 @@ public final class Settings { public final Setting freeLook = new Setting<>(true); /** - * Break and place blocks without having to force the client-sided rotations + * Break and place blocks without having to force the client-sided rotations. Having this setting enabled implies + * {@link #freeLook}. */ public final Setting blockFreeLook = new Setting<>(false); diff --git a/src/api/java/baritone/api/behavior/ILookBehavior.java b/src/api/java/baritone/api/behavior/ILookBehavior.java index 058a5dd88..218e8b59a 100644 --- a/src/api/java/baritone/api/behavior/ILookBehavior.java +++ b/src/api/java/baritone/api/behavior/ILookBehavior.java @@ -26,14 +26,11 @@ public interface ILookBehavior extends IBehavior { /** - * Updates the current {@link ILookBehavior} target to target - * the specified rotations on the next tick. If force is {@code true}, - * then freeLook will be overriden and angles will be set regardless. - * If any sort of block interaction is required, force should be {@code true}, - * otherwise, it should be {@code false}; + * Updates the current {@link ILookBehavior} target to target the specified rotations on the next tick. If any sort + * of block interaction is required, {@code blockInteract} should be {@code true}. * - * @param rotation The target rotations - * @param force Whether or not to "force" the rotations + * @param rotation The target rotations + * @param blockInteract Whether the target rotations are needed for a block interaction */ - void updateTarget(Rotation rotation, boolean force); + void updateTarget(Rotation rotation, boolean blockInteract); } diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 7db3da562..93e0af3bf 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -28,19 +28,11 @@ public final class LookBehavior extends Behavior implements ILookBehavior { /** - * Target's values are as follows: - *

- * getFirst() -> yaw - * getSecond() -> pitch + * The current look target, may be {@code null}. */ - private Rotation target; + private Target target; - private Rotation serverAngles; - - /** - * Whether or not rotations are currently being forced - */ - private boolean force; + private Rotation serverRotation; /** * The last player angles. Used when free looking @@ -54,50 +46,60 @@ public LookBehavior(Baritone baritone) { } @Override - public void updateTarget(Rotation target, boolean force) { - this.target = target; - this.force = !Baritone.settings().blockFreeLook.value && (force || !Baritone.settings().freeLook.value); + public void updateTarget(Rotation rotation, boolean blockInteract) { + this.target = new Target(rotation, blockInteract); } @Override public void onPlayerUpdate(PlayerUpdateEvent event) { + // Capture the player rotation before it's reset to determine the rotation the server knows + // Alternatively, this could be done with a packet event... Maybe that's a better idea. if (event.getState() == EventState.POST) { - this.serverAngles = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); + this.serverRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); } + + // There's nothing left to be done if there isn't a set target if (this.target == null) { return; } - // Whether or not we're going to silently set our angles - boolean silent = Baritone.settings().antiCheatCompatibility.value && !this.force; - switch (event.getState()) { case PRE: { - if (this.force) { - ctx.player().rotationYaw = this.target.getYaw(); - float oldPitch = ctx.player().rotationPitch; - float desiredPitch = this.target.getPitch(); - ctx.player().rotationPitch = desiredPitch; - ctx.player().rotationYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; - ctx.player().rotationPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; - if (desiredPitch == oldPitch && !Baritone.settings().freeLook.value) { - nudgeToLevel(); + switch (this.target.mode) { + case CLIENT: { + ctx.player().rotationYaw = this.target.rotation.getYaw(); + float oldPitch = ctx.player().rotationPitch; + float desiredPitch = this.target.rotation.getPitch(); + ctx.player().rotationPitch = desiredPitch; + ctx.player().rotationYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; + ctx.player().rotationPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; + if (desiredPitch == oldPitch && !Baritone.settings().freeLook.value) { + nudgeToLevel(); + } + // The target can be invalidated now since it won't be needed for RotationMoveEvent + this.target = null; + break; } - this.target = null; - } - if (silent) { - this.prevAngles = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); - ctx.player().rotationYaw = this.target.getYaw(); - ctx.player().rotationPitch = this.target.getPitch(); + case SERVER: { + // Copy the player's actual angles + this.prevAngles = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); + ctx.player().rotationYaw = this.target.rotation.getYaw(); + ctx.player().rotationPitch = this.target.rotation.getPitch(); + break; + } + default: + break; } break; } case POST: { - if (silent) { + // Reset the player's rotations back to their original values + if (this.target.mode == Target.Mode.SERVER) { ctx.player().rotationYaw = this.prevAngles.getYaw(); ctx.player().rotationPitch = this.prevAngles.getPitch(); - this.target = null; } + // The target is done being used for this game tick, so it can be invalidated + this.target = null; break; } default: @@ -107,25 +109,18 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { public void pig() { if (this.target != null) { - ctx.player().rotationYaw = this.target.getYaw(); + ctx.player().rotationYaw = this.target.rotation.getYaw(); } } public Rotation getEffectiveAngles() { - return this.serverAngles; + return this.serverRotation; } @Override public void onPlayerRotationMove(RotationMoveEvent event) { if (this.target != null) { - - event.setYaw(this.target.getYaw()); - - // If we have antiCheatCompatibility on, we're going to use the target value later in onPlayerUpdate() - // Also the type has to be MOTION_UPDATE because that is called after JUMP - if (!Baritone.settings().antiCheatCompatibility.value && event.getType() == RotationMoveEvent.Type.MOTION_UPDATE && !this.force) { - this.target = null; - } + event.setYaw(this.target.rotation.getYaw()); } } @@ -139,4 +134,44 @@ private void nudgeToLevel() { ctx.player().rotationPitch--; } } + + private static class Target { + + public final Rotation rotation; + public final Mode mode; + + public Target(Rotation rotation, boolean blockInteract) { + this.rotation = rotation; + this.mode = Mode.resolve(blockInteract); + } + + enum Mode { + /** + * Angles will be set client-side and are visual to the player + */ + CLIENT, + + /** + * Angles will be set server-side and are silent to the player + */ + SERVER, + + /** + * Angles will remain unaffected on both the client and server + */ + NONE; + + static Mode resolve(boolean blockInteract) { + final Settings settings = Baritone.settings(); + final boolean antiCheat = settings.antiCheatCompatibility.value; + final boolean blockFreeLook = settings.blockFreeLook.value; + final boolean freeLook = settings.freeLook.value; + + if (!freeLook && !blockFreeLook) return CLIENT; + if (!blockFreeLook && blockInteract) return CLIENT; + if (antiCheat || blockInteract) return SERVER; + return NONE; + } + } + } } From a7d15d1e32a1438bce8223a3483a76dcd5d14444 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 11 Jun 2023 18:43:48 -0500 Subject: [PATCH 546/935] Consistent naming and comments for clarification --- .../java/baritone/behavior/LookBehavior.java | 30 ++++++++++++------- .../utils/player/PrimaryPlayerContext.java | 2 +- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 93e0af3bf..c38cee6f9 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -23,6 +23,7 @@ import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.RotationMoveEvent; import baritone.api.event.events.type.EventState; +import baritone.api.utils.IPlayerContext; import baritone.api.utils.Rotation; public final class LookBehavior extends Behavior implements ILookBehavior { @@ -32,14 +33,17 @@ public final class LookBehavior extends Behavior implements ILookBehavior { */ private Target target; + /** + * The rotation known to the server. Returned by {@link #getEffectiveRotation()} for use in {@link IPlayerContext}. + */ private Rotation serverRotation; /** - * The last player angles. Used when free looking + * The last player rotation. Used when free looking * * @see Settings#freeLook */ - private Rotation prevAngles; + private Rotation prevRotation; public LookBehavior(Baritone baritone) { super(baritone); @@ -81,8 +85,8 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { break; } case SERVER: { - // Copy the player's actual angles - this.prevAngles = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); + // Copy the player's actual rotation + this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); ctx.player().rotationYaw = this.target.rotation.getYaw(); ctx.player().rotationPitch = this.target.rotation.getPitch(); break; @@ -95,8 +99,8 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { case POST: { // Reset the player's rotations back to their original values if (this.target.mode == Target.Mode.SERVER) { - ctx.player().rotationYaw = this.prevAngles.getYaw(); - ctx.player().rotationPitch = this.prevAngles.getPitch(); + ctx.player().rotationYaw = this.prevRotation.getYaw(); + ctx.player().rotationPitch = this.prevRotation.getPitch(); } // The target is done being used for this game tick, so it can be invalidated this.target = null; @@ -113,7 +117,7 @@ public void pig() { } } - public Rotation getEffectiveAngles() { + public Rotation getEffectiveRotation() { return this.serverRotation; } @@ -147,17 +151,17 @@ public Target(Rotation rotation, boolean blockInteract) { enum Mode { /** - * Angles will be set client-side and are visual to the player + * Rotation will be set client-side and is visual to the player */ CLIENT, /** - * Angles will be set server-side and are silent to the player + * Rotation will be set server-side and is silent to the player */ SERVER, /** - * Angles will remain unaffected on both the client and server + * Rotation will remain unaffected on both the client and server */ NONE; @@ -169,7 +173,13 @@ static Mode resolve(boolean blockInteract) { if (!freeLook && !blockFreeLook) return CLIENT; if (!blockFreeLook && blockInteract) return CLIENT; + + // Regardless of if antiCheatCompatibility is enabled, if a blockInteract is requested then the player + // rotation needs to be set somehow, otherwise Baritone will halt since objectMouseOver() will just be + // whatever the player is mousing over visually. Let's just settle for setting it silently. if (antiCheat || blockInteract) return SERVER; + + // Pathing regularly without antiCheatCompatibility, don't set the player rotation return NONE; } } diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index cc35c156c..e4484f0be 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -58,7 +58,7 @@ public IWorldData worldData() { @Override public Rotation playerRotations() { - final Rotation lbTarget = ((LookBehavior) BaritoneAPI.getProvider().getPrimaryBaritone().getLookBehavior()).getEffectiveAngles(); + final Rotation lbTarget = ((LookBehavior) BaritoneAPI.getProvider().getPrimaryBaritone().getLookBehavior()).getEffectiveRotation(); if (lbTarget == null || !Baritone.settings().blockFreeLook.value) { return IPlayerContext.super.playerRotations(); } From bb36ebfc0c7cb39ac24852fef1b28c25c995975d Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 11 Jun 2023 20:09:37 -0500 Subject: [PATCH 547/935] Use `IPlayerContext` for all `RotationUtils` methods Deprecates all old overloads --- .../baritone/api/utils/RotationUtils.java | 75 +++++++++++++------ .../baritone/pathing/movement/Movement.java | 2 +- .../movement/movements/MovementPillar.java | 2 +- .../java/baritone/process/BuilderProcess.java | 2 +- .../java/baritone/process/FarmProcess.java | 4 +- .../baritone/process/GetToBlockProcess.java | 2 +- .../java/baritone/process/MineProcess.java | 2 +- 7 files changed, 60 insertions(+), 29 deletions(-) diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 0d5a3ad1f..1991ab878 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -134,14 +134,14 @@ public static Vec3d calcVec3dFromRotation(Rotation rotation) { * @param ctx Context for the viewing entity * @param pos The target block position * @return The optional rotation - * @see #reachable(EntityPlayerSP, BlockPos, double) + * @see #reachable(IPlayerContext, BlockPos, double) */ public static Optional reachable(IPlayerContext ctx, BlockPos pos) { - return reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); + return reachable(ctx, pos, false); } public static Optional reachable(IPlayerContext ctx, BlockPos pos, boolean wouldSneak) { - return reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance(), wouldSneak); + return reachable(ctx, pos, ctx.playerController().getBlockReachDistance(), wouldSneak); } /** @@ -151,18 +151,16 @@ public static Optional reachable(IPlayerContext ctx, BlockPos pos, boo * side that is reachable. The return type will be {@link Optional#empty()} if the entity is * unable to reach any of the sides of the block. * - * @param entity The viewing entity + * @param ctx Context for the viewing entity * @param pos The target block position * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachable(EntityPlayerSP entity, BlockPos pos, double blockReachDistance) { - return reachable(entity, pos, blockReachDistance, false); + public static Optional reachable(IPlayerContext ctx, BlockPos pos, double blockReachDistance) { + return reachable(ctx, pos, blockReachDistance, false); } - public static Optional reachable(EntityPlayerSP entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(entity); - IPlayerContext ctx = baritone.getPlayerContext(); + public static Optional reachable(IPlayerContext ctx, BlockPos pos, double blockReachDistance, boolean wouldSneak) { if (ctx.isLookingAt(pos)) { /* * why add 0.0001? @@ -177,7 +175,7 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, Rotation hypothetical = ctx.playerRotations().add(new Rotation(0, 0.0001F)); if (wouldSneak) { // the concern here is: what if we're looking at it now, but as soon as we start sneaking we no longer are - RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, hypothetical, blockReachDistance, true); + RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), hypothetical, blockReachDistance, true); if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK && result.getBlockPos().equals(pos)) { return Optional.of(hypothetical); // yes, if we sneaked we would still be looking at the block } @@ -185,19 +183,19 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, return Optional.of(hypothetical); } } - Optional possibleRotation = reachableCenter(entity, pos, blockReachDistance, wouldSneak); + Optional possibleRotation = reachableCenter(ctx, pos, blockReachDistance, wouldSneak); //System.out.println("center: " + possibleRotation); if (possibleRotation.isPresent()) { return possibleRotation; } - IBlockState state = entity.world.getBlockState(pos); - AxisAlignedBB aabb = state.getBoundingBox(entity.world, pos); + IBlockState state = ctx.world().getBlockState(pos); + AxisAlignedBB aabb = state.getBoundingBox(ctx.world(), pos); for (Vec3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { double xDiff = aabb.minX * sideOffset.x + aabb.maxX * (1 - sideOffset.x); double yDiff = aabb.minY * sideOffset.y + aabb.maxY * (1 - sideOffset.y); double zDiff = aabb.minZ * sideOffset.z + aabb.maxZ * (1 - sideOffset.z); - possibleRotation = reachableOffset(entity, pos, new Vec3d(pos).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); + possibleRotation = reachableOffset(ctx, pos, new Vec3d(pos).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); if (possibleRotation.isPresent()) { return possibleRotation; } @@ -210,23 +208,22 @@ public static Optional reachable(EntityPlayerSP entity, BlockPos pos, * the given offsetted position. The return type will be {@link Optional#empty()} if * the entity is unable to reach the block with the offset applied. * - * @param entity The viewing entity + * @param ctx Context for the viewing entity * @param pos The target block position * @param offsetPos The position of the block with the offset applied. * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachableOffset(EntityPlayerSP entity, BlockPos pos, Vec3d offsetPos, double blockReachDistance, boolean wouldSneak) { - IPlayerContext ctx = BaritoneAPI.getProvider().getBaritoneForPlayer(entity).getPlayerContext(); - Vec3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getPositionEyes(1.0F); + public static Optional reachableOffset(IPlayerContext ctx, BlockPos pos, Vec3d offsetPos, double blockReachDistance, boolean wouldSneak) { + Vec3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.player().getPositionEyes(1.0F); Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, ctx.playerRotations()); - RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); + RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rotation, blockReachDistance, wouldSneak); //System.out.println(result); if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) { if (result.getBlockPos().equals(pos)) { return Optional.of(rotation); } - if (entity.world.getBlockState(pos).getBlock() instanceof BlockFire && result.getBlockPos().equals(pos.down())) { + if (ctx.world().getBlockState(pos).getBlock() instanceof BlockFire && result.getBlockPos().equals(pos.down())) { return Optional.of(rotation); } } @@ -237,12 +234,46 @@ public static Optional reachableOffset(EntityPlayerSP entity, BlockPos * Determines if the specified entity is able to reach the specified block where it is * looking at the direct center of it's hitbox. * - * @param entity The viewing entity + * @param ctx Context for the viewing entity * @param pos The target block position * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachableCenter(EntityPlayerSP entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + public static Optional reachableCenter(IPlayerContext ctx, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + return reachableOffset(ctx, pos, VecUtils.calculateBlockCenter(ctx.world(), pos), blockReachDistance, wouldSneak); + } + + @Deprecated + public static Optional reachable(EntityPlayerSP entity, BlockPos pos, double blockReachDistance) { + return reachable(entity, pos, blockReachDistance, false); + } + + @Deprecated + public static Optional reachable(EntityPlayerSP entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(entity); + IPlayerContext ctx = baritone.getPlayerContext(); + return reachable(ctx, pos, blockReachDistance, wouldSneak); + } + + @Deprecated + public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3d offsetPos, double blockReachDistance, boolean wouldSneak) { + Vec3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getPositionEyes(1.0F); + Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.rotationYaw, entity.rotationPitch)); + RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); + //System.out.println(result); + if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) { + if (result.getBlockPos().equals(pos)) { + return Optional.of(rotation); + } + if (entity.world.getBlockState(pos).getBlock() instanceof BlockFire && result.getBlockPos().equals(pos.down())) { + return Optional.of(rotation); + } + } + return Optional.empty(); + } + + @Deprecated + public static Optional reachableCenter(Entity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.world, pos), blockReachDistance, wouldSneak); } } diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index c46b24dea..5a17d26c5 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -164,7 +164,7 @@ protected boolean prepared(MovementState state) { if (!MovementHelper.canWalkThrough(ctx, blockPos) && !(BlockStateInterface.getBlock(ctx, blockPos) instanceof BlockLiquid)) { // can't break liquid, so don't try somethingInTheWay = true; MovementHelper.switchToBestToolFor(ctx, BlockStateInterface.get(ctx, blockPos)); - Optional reachable = RotationUtils.reachable(ctx.player(), blockPos, ctx.playerController().getBlockReachDistance()); + Optional reachable = RotationUtils.reachable(ctx, blockPos, ctx.playerController().getBlockReachDistance()); if (reachable.isPresent()) { Rotation rotTowardsBlock = reachable.get(); state.setTarget(new MovementState.MovementTarget(rotTowardsBlock, true)); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 88f1e26ff..0198b28fe 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -251,7 +251,7 @@ public MovementState updateState(MovementState state) { Block fr = frState.getBlock(); // TODO: Evaluate usage of getMaterial().isReplaceable() if (!(fr instanceof BlockAir || frState.getMaterial().isReplaceable())) { - RotationUtils.reachable(ctx.player(), src, ctx.playerController().getBlockReachDistance()) + RotationUtils.reachable(ctx, src, ctx.playerController().getBlockReachDistance()) .map(rot -> new MovementState.MovementTarget(rot, true)) .ifPresent(state::setTarget); state.setInput(Input.JUMP, false); // breaking is like 5x slower when you're jumping diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index c7868a4a0..6f8582457 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -283,7 +283,7 @@ private Optional> toBreakNearPlayer(BuilderCalcu IBlockState curr = bcc.bsi.get0(x, y, z); if (curr.getBlock() != Blocks.AIR && !(curr.getBlock() instanceof BlockLiquid) && !valid(curr, desired, false)) { BetterBlockPos pos = new BetterBlockPos(x, y, z); - Optional rot = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); + Optional rot = RotationUtils.reachable(ctx, pos, ctx.playerController().getBlockReachDistance()); if (rot.isPresent()) { return Optional.of(new Tuple<>(pos, rot.get())); } diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index a9188299c..1536bdb61 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -268,7 +268,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { both.addAll(openSoulsand); for (BlockPos pos : both) { boolean soulsand = openSoulsand.contains(pos); - Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, new Vec3d(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); + Optional rot = RotationUtils.reachableOffset(ctx, pos, new Vec3d(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, soulsand ? this::isNetherWart : this::isPlantable)) { RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); if (result.typeOfHit == RayTraceResult.Type.BLOCK && result.sideHit == EnumFacing.UP) { @@ -286,7 +286,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { continue; } Vec3d faceCenter = new Vec3d(pos).add(0.5, 0.5, 0.5).add(new Vec3d(dir.getDirectionVec()).scale(0.5)); - Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, faceCenter, ctx.playerController().getBlockReachDistance(), false); + Optional rot = RotationUtils.reachableOffset(ctx, pos, faceCenter, ctx.playerController().getBlockReachDistance(), false); if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, this::isCocoa)) { RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); if (result.typeOfHit == RayTraceResult.Type.BLOCK && result.sideHit == dir) { diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 16fc3dda5..7f8376b84 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -210,7 +210,7 @@ private Goal createGoal(BlockPos pos) { private boolean rightClick() { for (BlockPos pos : knownLocations) { - Optional reachable = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); + Optional reachable = RotationUtils.reachable(ctx, pos, ctx.playerController().getBlockReachDistance()); if (reachable.isPresent()) { baritone.getLookBehavior().updateTarget(reachable.get(), true); if (knownLocations.contains(ctx.getSelectedBlock().orElse(null))) { diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 6880dd86c..e7d7b3365 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -397,7 +397,7 @@ private boolean addNearby() { // is an x-ray and it'll get caught if (filter.has(bsi.get0(x, y, z))) { BlockPos pos = new BlockPos(x, y, z); - if ((Baritone.settings().legitMineIncludeDiagonals.value && knownOreLocations.stream().anyMatch(ore -> ore.distanceSq(pos) <= 2 /* sq means this is pytha dist <= sqrt(2) */)) || RotationUtils.reachable(ctx.player(), pos, fakedBlockReachDistance).isPresent()) { + if ((Baritone.settings().legitMineIncludeDiagonals.value && knownOreLocations.stream().anyMatch(ore -> ore.distanceSq(pos) <= 2 /* sq means this is pytha dist <= sqrt(2) */)) || RotationUtils.reachable(ctx, pos, fakedBlockReachDistance).isPresent()) { knownOreLocations.add(pos); } } From 35a996e2b0406b9689bd1be4ee87464c3dd600aa Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 11 Jun 2023 20:59:28 -0700 Subject: [PATCH 548/935] firework more often --- src/api/java/baritone/api/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 5463f3163..4fe0c6281 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -50,7 +50,7 @@ public final class Settings { public final Setting elytraSimulationTicks = new Setting<>(20); public final Setting elytraPitchRange = new Setting<>(25); - public final Setting elytraFireworkSpeed = new Setting<>(0.425); + public final Setting elytraFireworkSpeed = new Setting<>(0.6); /** * Allow Baritone to break blocks From b9054cdfc9cd8a043ae32c71a9d414f1b025f536 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 11 Jun 2023 22:22:01 -0700 Subject: [PATCH 549/935] use more fireworks --- src/api/java/baritone/api/Settings.java | 2 ++ src/main/java/baritone/Elytra.java | 11 ++++++++--- src/main/java/baritone/utils/PathRenderer.java | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 4fe0c6281..343fe823a 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -51,6 +51,8 @@ public final class Settings { public final Setting elytraSimulationTicks = new Setting<>(20); public final Setting elytraPitchRange = new Setting<>(25); public final Setting elytraFireworkSpeed = new Setting<>(0.6); + public final Setting wasteFireworks = new Setting<>(false); + public final Setting renderRaytraces = new Setting<>(false); /** * Allow Baritone to break blocks diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 1534b211d..2be7932ea 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -24,6 +24,7 @@ import baritone.api.utils.RotationUtils; import baritone.behavior.Behavior; import baritone.utils.BlockStateInterface; +import com.mojang.realmsclient.util.Pair; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityFireworkRocket; import net.minecraft.util.EnumHand; @@ -64,6 +65,9 @@ public class Elytra extends Behavior implements Helper { public int sinceFirework; public BlockPos goal; + + public List> lines = new ArrayList<>(); + protected Elytra(Baritone baritone) { super(baritone); } @@ -76,7 +80,7 @@ public void onTick(TickEvent event) { } fixNearPlayer(); baritone.getInputOverrideHandler().clearAllKeys(); - + lines.clear(); if (ctx.player().isElytraFlying()) { if (ctx.player().collidedHorizontally) { logDirect("hbonk"); @@ -89,7 +93,7 @@ public void onTick(TickEvent event) { sinceFirework++; if (!firework && sinceFirework > 10 - && ctx.player().posY < path.get(goingTo).y + 5 // don't firework if trying to descend + && (Baritone.settings().wasteFireworks.value && ctx.player().posY < path.get(goingTo).y + 5) // don't firework if trying to descend && (ctx.player().posY < path.get(goingTo).y - 5 || ctx.playerFeetAsVec().distanceTo(new Vec3d(path.get(goingTo).x, ctx.player().posY, path.get(goingTo).z)) > 5) // UGH!!!!!!! && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending ) { @@ -101,7 +105,7 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) int[] heights = firework ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost boolean requireClear = relaxation == 0; - int steps = relaxation < 2 ? Baritone.settings().elytraSimulationTicks.value : 3; + int steps = relaxation < 2 ? firework ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); int minStep = playerNear; @@ -160,6 +164,7 @@ && clearView(start.add(perpendicular), dest.add(perpendicular)) } private boolean clearView(Vec3d start, Vec3d dest) { + lines.add(Pair.of(start, dest)); RayTraceResult result = ctx.world().rayTraceBlocks(start, dest, true, false, true); return result == null || result.typeOfHit == RayTraceResult.Type.MISS; } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 828479a5d..f4e9317b3 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -17,6 +17,7 @@ package baritone.utils; +import baritone.Baritone; import baritone.Elytra; import baritone.api.BaritoneAPI; import baritone.api.event.events.RenderEvent; @@ -26,6 +27,7 @@ import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; +import com.mojang.realmsclient.util.Pair; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntityBeaconRenderer; @@ -35,6 +37,7 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; import java.awt.*; import java.util.Collection; @@ -107,6 +110,18 @@ public static void render(RenderEvent event, PathingBehavior behavior) { if (behavior.baritone.elytra.goal != null) { drawDankLitGoalBox(renderView, new GoalBlock(behavior.baritone.elytra.goal), partialTicks, Color.GREEN); } + if (!behavior.baritone.elytra.lines.isEmpty() && Baritone.settings().renderRaytraces.value) { + IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + boolean orig = settings.renderPathAsLine.value; + settings.renderPathAsLine.value = true; + for (Pair line : behavior.baritone.elytra.lines) { + drawLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); + tessellator.draw(); + } + settings.renderPathAsLine.value = orig; + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } + // If there is a path calculation currently running, render the path calculation process behavior.getInProgress().ifPresent(currentlyRunning -> { From 4148b9818707841d1383c00d7e45a2a3de8e907c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 11 Jun 2023 22:22:49 -0700 Subject: [PATCH 550/935] typo --- src/main/java/baritone/Elytra.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 2be7932ea..14b64e547 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -93,7 +93,7 @@ public void onTick(TickEvent event) { sinceFirework++; if (!firework && sinceFirework > 10 - && (Baritone.settings().wasteFireworks.value && ctx.player().posY < path.get(goingTo).y + 5) // don't firework if trying to descend + && (Baritone.settings().wasteFireworks.value || ctx.player().posY < path.get(goingTo).y + 5) // don't firework if trying to descend && (ctx.player().posY < path.get(goingTo).y - 5 || ctx.playerFeetAsVec().distanceTo(new Vec3d(path.get(goingTo).x, ctx.player().posY, path.get(goingTo).z)) > 5) // UGH!!!!!!! && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending ) { From 410cfcf21a664a7e23fbd08923de3cbbc320117d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 11 Jun 2023 22:40:35 -0700 Subject: [PATCH 551/935] typo, fix crash at end of path --- src/main/java/baritone/Elytra.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 14b64e547..708f6621d 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -109,7 +109,7 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); int minStep = playerNear; - for (int i = Math.min(playerNear + 20, path.size()); i >= minStep; i--) { + for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { for (int dy : heights) { Vec3d dest = new Vec3d(path.get(i)).add(0, dy, 0); if (dy != 0) { From 1d5ee079b4aea9925041eae05a923da513b1ba5e Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 12:11:50 -0500 Subject: [PATCH 552/935] Read `serverRotation` from packet and invalidate on world load --- .../java/baritone/behavior/LookBehavior.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index c38cee6f9..d1e5d244f 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -20,11 +20,13 @@ import baritone.Baritone; import baritone.api.Settings; import baritone.api.behavior.ILookBehavior; +import baritone.api.event.events.PacketEvent; import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.RotationMoveEvent; -import baritone.api.event.events.type.EventState; +import baritone.api.event.events.WorldEvent; import baritone.api.utils.IPlayerContext; import baritone.api.utils.Rotation; +import net.minecraft.network.play.client.CPacketPlayer; public final class LookBehavior extends Behavior implements ILookBehavior { @@ -56,17 +58,9 @@ public void updateTarget(Rotation rotation, boolean blockInteract) { @Override public void onPlayerUpdate(PlayerUpdateEvent event) { - // Capture the player rotation before it's reset to determine the rotation the server knows - // Alternatively, this could be done with a packet event... Maybe that's a better idea. - if (event.getState() == EventState.POST) { - this.serverRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); - } - - // There's nothing left to be done if there isn't a set target if (this.target == null) { return; } - switch (event.getState()) { case PRE: { switch (this.target.mode) { @@ -111,6 +105,24 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { } } + @Override + public void onSendPacket(PacketEvent event) { + if (!(event.getPacket() instanceof CPacketPlayer)) { + return; + } + + final CPacketPlayer packet = (CPacketPlayer) event.getPacket(); + if (packet instanceof CPacketPlayer.Rotation || packet instanceof CPacketPlayer.PositionRotation) { + this.serverRotation = new Rotation(packet.getYaw(0.0f), packet.getPitch(0.0f)); + } + } + + @Override + public void onWorldEvent(WorldEvent event) { + this.serverRotation = null; + this.target = null; + } + public void pig() { if (this.target != null) { ctx.player().rotationYaw = this.target.rotation.getYaw(); From 67a085c95fca4be8a6f85d4c2a5dfcc0bb9f3d89 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 13:16:37 -0500 Subject: [PATCH 553/935] Batch together GL_LINES draw calls --- .../baritone/command/defaults/SelCommand.java | 2 +- .../baritone/selection/SelectionRenderer.java | 8 +-- src/main/java/baritone/utils/IRenderer.java | 16 +++-- .../java/baritone/utils/PathRenderer.java | 65 +++++++++++++------ 4 files changed, 60 insertions(+), 31 deletions(-) diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 5677eec3c..d6c2e890d 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -72,7 +72,7 @@ public void onRenderPass(RenderEvent event) { float lineWidth = Baritone.settings().selectionLineWidth.value; boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value; IRenderer.startLines(color, opacity, lineWidth, ignoreDepth); - IRenderer.drawAABB(new AxisAlignedBB(pos1, pos1.add(1, 1, 1))); + IRenderer.emitAABB(new AxisAlignedBB(pos1, pos1.add(1, 1, 1))); IRenderer.endLines(ignoreDepth); } }); diff --git a/src/main/java/baritone/selection/SelectionRenderer.java b/src/main/java/baritone/selection/SelectionRenderer.java index 89104d030..b688e9670 100644 --- a/src/main/java/baritone/selection/SelectionRenderer.java +++ b/src/main/java/baritone/selection/SelectionRenderer.java @@ -23,27 +23,27 @@ public static void renderSelections(ISelection[] selections) { boolean ignoreDepth = settings.renderSelectionIgnoreDepth.value; float lineWidth = settings.selectionLineWidth.value; - if (!settings.renderSelection.value) { + if (!settings.renderSelection.value || selections.length == 0) { return; } IRenderer.startLines(settings.colorSelection.value, opacity, lineWidth, ignoreDepth); for (ISelection selection : selections) { - IRenderer.drawAABB(selection.aabb(), SELECTION_BOX_EXPANSION); + IRenderer.emitAABB(selection.aabb(), SELECTION_BOX_EXPANSION); } if (settings.renderSelectionCorners.value) { IRenderer.glColor(settings.colorSelectionPos1.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(new AxisAlignedBB(selection.pos1(), selection.pos1().add(1, 1, 1))); + IRenderer.emitAABB(new AxisAlignedBB(selection.pos1(), selection.pos1().add(1, 1, 1))); } IRenderer.glColor(settings.colorSelectionPos2.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(new AxisAlignedBB(selection.pos2(), selection.pos2().add(1, 1, 1))); + IRenderer.emitAABB(new AxisAlignedBB(selection.pos2(), selection.pos2().add(1, 1, 1))); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index e5a5ee907..3476c0307 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -54,6 +54,7 @@ static void startLines(Color color, float alpha, float lineWidth, boolean ignore if (ignoreDepth) { GlStateManager.disableDepth(); } + buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); } static void startLines(Color color, float lineWidth, boolean ignoreDepth) { @@ -61,6 +62,7 @@ static void startLines(Color color, float lineWidth, boolean ignoreDepth) { } static void endLines(boolean ignoredDepth) { + tessellator.draw(); if (ignoredDepth) { GlStateManager.enableDepth(); } @@ -70,10 +72,9 @@ static void endLines(boolean ignoredDepth) { GlStateManager.disableBlend(); } - static void drawAABB(AxisAlignedBB aabb) { + static void emitAABB(AxisAlignedBB aabb) { AxisAlignedBB toDraw = aabb.offset(-renderManager.viewerPosX, -renderManager.viewerPosY, -renderManager.viewerPosZ); - buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); // bottom buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); @@ -101,10 +102,15 @@ static void drawAABB(AxisAlignedBB aabb) { buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); - tessellator.draw(); } - static void drawAABB(AxisAlignedBB aabb, double expand) { - drawAABB(aabb.grow(expand, expand, expand)); + static void emitAABB(AxisAlignedBB aabb, double expand) { + emitAABB(aabb.grow(expand, expand, expand)); + } + + static void drawAABB(AxisAlignedBB aabb) { + buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); + emitAABB(aabb); + tessellator.draw(); } } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 2fe224706..2aef0ab54 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -29,7 +29,6 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntityBeaconRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.util.math.AxisAlignedBB; @@ -37,6 +36,7 @@ import net.minecraft.util.math.MathHelper; import java.awt.*; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -76,7 +76,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { } if (goal != null && settings.renderGoal.value) { - drawDankLitGoalBox(renderView, goal, partialTicks, settings.colorGoalBox.value); + drawGoal(renderView, goal, partialTicks, settings.colorGoalBox.value); } if (!settings.renderPath.value) { @@ -153,26 +153,28 @@ public static void drawPath(IPath path, int startIndex, Color color, boolean fad IRenderer.glColor(color, alpha); } - drawLine(start.x, start.y, start.z, end.x, end.y, end.z); - - tessellator.draw(); + emitLine(start.x, start.y, start.z, end.x, end.y, end.z); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } - public static void drawLine(double x1, double y1, double z1, double x2, double y2, double z2) { + public static void emitLine(double x1, double y1, double z1, double x2, double y2, double z2) { double vpX = renderManager.viewerPosX; double vpY = renderManager.viewerPosY; double vpZ = renderManager.viewerPosZ; boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; - buffer.begin(renderPathAsFrickinThingy ? GL_LINE_STRIP : GL_LINES, DefaultVertexFormats.POSITION); buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); buffer.pos(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).endVertex(); if (renderPathAsFrickinThingy) { + buffer.pos(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).endVertex(); + buffer.pos(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).endVertex(); + buffer.pos(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).endVertex(); + buffer.pos(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).endVertex(); + buffer.pos(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).endVertex(); buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); } @@ -194,13 +196,17 @@ public static void drawManySelectionBoxes(Entity player, Collection po toDraw = state.getSelectedBoundingBox(player.world, pos); } - IRenderer.drawAABB(toDraw, .002D); + IRenderer.emitAABB(toDraw, .002D); }); IRenderer.endLines(settings.renderSelectionBoxesIgnoreDepth.value); } - public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTicks, Color color) { + public static void drawGoal(Entity player, Goal goal, float partialTicks, Color color) { + drawGoal(player, goal, partialTicks, color, true); + } + + public static void drawGoal(Entity player, Goal goal, float partialTicks, Color color, boolean setupRender) { double renderPosX = renderManager.viewerPosX; double renderPosY = renderManager.viewerPosY; double renderPosZ = renderManager.viewerPosZ; @@ -232,6 +238,7 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic y2 -= 0.5; maxY--; } + drawDankLitGoalBox(color, minX, maxX, minZ, maxZ, minY, maxY, y1, y2, setupRender); } else if (goal instanceof GoalXZ) { GoalXZ goalPos = (GoalXZ) goal; @@ -273,14 +280,22 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic y2 = 0; minY = 0 - renderPosY; maxY = 256 - renderPosY; + drawDankLitGoalBox(color, minX, maxX, minZ, maxZ, minY, maxY, y1, y2, setupRender); } else if (goal instanceof GoalComposite) { + // Simple way to determine if goals can be batched, without having some sort of GoalRenderer + boolean batch = Arrays.stream(((GoalComposite) goal).goals()).allMatch(IGoalRenderPos.class::isInstance); + + if (batch) { + IRenderer.startLines(color, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); + } for (Goal g : ((GoalComposite) goal).goals()) { - drawDankLitGoalBox(player, g, partialTicks, color); + drawGoal(player, g, partialTicks, color, !batch); + } + if (batch) { + IRenderer.endLines(settings.renderGoalIgnoreDepth.value); } - return; } else if (goal instanceof GoalInverted) { - drawDankLitGoalBox(player, ((GoalInverted) goal).origin, partialTicks, settings.colorInvertedGoalBox.value); - return; + drawGoal(player, ((GoalInverted) goal).origin, partialTicks, settings.colorInvertedGoalBox.value); } else if (goal instanceof GoalYLevel) { GoalYLevel goalpos = (GoalYLevel) goal; minX = player.posX - settings.yLevelBoxSize.value - renderPosX; @@ -291,16 +306,18 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic maxY = minY + 2; y1 = 1 + y + goalpos.level - renderPosY; y2 = 1 - y + goalpos.level - renderPosY; - } else { - return; + drawDankLitGoalBox(color, minX, maxX, minZ, maxZ, minY, maxY, y1, y2, setupRender); } + } - IRenderer.startLines(color, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); + private static void drawDankLitGoalBox(Color color, double minX, double maxX, double minZ, double maxZ, double minY, double maxY, double y1, double y2, boolean setupRender) { + if (setupRender) { + IRenderer.startLines(color, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); + } renderHorizontalQuad(minX, maxX, minZ, maxZ, y1); renderHorizontalQuad(minX, maxX, minZ, maxZ, y2); - buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); buffer.pos(minX, minY, minZ).endVertex(); buffer.pos(minX, maxY, minZ).endVertex(); buffer.pos(maxX, minY, minZ).endVertex(); @@ -309,19 +326,25 @@ public static void drawDankLitGoalBox(Entity player, Goal goal, float partialTic buffer.pos(maxX, maxY, maxZ).endVertex(); buffer.pos(minX, minY, maxZ).endVertex(); buffer.pos(minX, maxY, maxZ).endVertex(); - tessellator.draw(); - IRenderer.endLines(settings.renderGoalIgnoreDepth.value); + if (setupRender) { + IRenderer.endLines(settings.renderGoalIgnoreDepth.value); + } } private static void renderHorizontalQuad(double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { - buffer.begin(GL_LINE_LOOP, DefaultVertexFormats.POSITION); buffer.pos(minX, y, minZ).endVertex(); buffer.pos(maxX, y, minZ).endVertex(); + + buffer.pos(maxX, y, minZ).endVertex(); + buffer.pos(maxX, y, maxZ).endVertex(); + buffer.pos(maxX, y, maxZ).endVertex(); buffer.pos(minX, y, maxZ).endVertex(); - tessellator.draw(); + + buffer.pos(minX, y, maxZ).endVertex(); + buffer.pos(minX, y, minZ).endVertex(); } } } From c8a0ae9e102e9f85efba642f8a52744d7dc2d1d1 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 13:44:08 -0500 Subject: [PATCH 554/935] Do `nudgeToLevel` and `randomLooking` when using freeLook --- .../java/baritone/behavior/LookBehavior.java | 46 ++++++++----------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index d1e5d244f..0dc56a3e2 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -58,43 +58,37 @@ public void updateTarget(Rotation rotation, boolean blockInteract) { @Override public void onPlayerUpdate(PlayerUpdateEvent event) { - if (this.target == null) { + if (this.target == null || this.target.mode == Target.Mode.NONE) { return; } switch (event.getState()) { case PRE: { - switch (this.target.mode) { - case CLIENT: { - ctx.player().rotationYaw = this.target.rotation.getYaw(); - float oldPitch = ctx.player().rotationPitch; - float desiredPitch = this.target.rotation.getPitch(); - ctx.player().rotationPitch = desiredPitch; - ctx.player().rotationYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; - ctx.player().rotationPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; - if (desiredPitch == oldPitch && !Baritone.settings().freeLook.value) { - nudgeToLevel(); - } - // The target can be invalidated now since it won't be needed for RotationMoveEvent - this.target = null; - break; - } - case SERVER: { - // Copy the player's actual rotation - this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); - ctx.player().rotationYaw = this.target.rotation.getYaw(); - ctx.player().rotationPitch = this.target.rotation.getPitch(); - break; - } - default: - break; + if (this.target.mode == Target.Mode.SERVER) { + this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); + } + + ctx.player().rotationYaw = this.target.rotation.getYaw(); + float oldPitch = ctx.playerRotations().getPitch(); + float desiredPitch = this.target.rotation.getPitch(); + ctx.player().rotationPitch = desiredPitch; + ctx.player().rotationYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; + ctx.player().rotationPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; + if (desiredPitch == oldPitch) { + nudgeToLevel(); + } + + if (this.target.mode == Target.Mode.CLIENT) { + // The target can be invalidated now since it won't be needed for RotationMoveEvent + this.target = null; } break; } case POST: { // Reset the player's rotations back to their original values - if (this.target.mode == Target.Mode.SERVER) { + if (this.prevRotation != null) { ctx.player().rotationYaw = this.prevRotation.getYaw(); ctx.player().rotationPitch = this.prevRotation.getPitch(); + this.prevRotation = null; } // The target is done being used for this game tick, so it can be invalidated this.target = null; From ed34ae73c002d5b23e0e6efc36283dfbe4c78fb7 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 13:46:10 -0500 Subject: [PATCH 555/935] Fix `Mode.NONE` target invalidation --- src/main/java/baritone/behavior/LookBehavior.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 0dc56a3e2..1e109482c 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -58,11 +58,14 @@ public void updateTarget(Rotation rotation, boolean blockInteract) { @Override public void onPlayerUpdate(PlayerUpdateEvent event) { - if (this.target == null || this.target.mode == Target.Mode.NONE) { + if (this.target == null) { return; } switch (event.getState()) { case PRE: { + if (this.target.mode == Target.Mode.NONE) { + return; + } if (this.target.mode == Target.Mode.SERVER) { this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); } From de80527702af9419f9c932609f729361261f3427 Mon Sep 17 00:00:00 2001 From: John200410 <43681932+John200410@users.noreply.github.com> Date: Mon, 12 Jun 2023 17:16:07 -0400 Subject: [PATCH 556/935] Add proper level height to GoalXZ rendering --- src/main/java/baritone/utils/PathRenderer.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 5f50962e7..ff225c829 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -252,6 +252,8 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, } } else if (goal instanceof GoalXZ) { GoalXZ goalPos = (GoalXZ) goal; + minY = mc.level.getMinBuildHeight(); + maxY = mc.level.getMaxBuildHeight(); if (settings.renderGoalXZBeacon.value) { glPushAttrib(GL_LIGHTING_BIT); @@ -273,8 +275,8 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, settings.renderGoalAnimated.value ? partialTicks : 0, 1.0F, settings.renderGoalAnimated.value ? player.level.getGameTime() : 0, - 0, - 256, + (int) minY, + (int) maxY, color.getColorComponents(null), // Arguments filled by the private method lol @@ -299,8 +301,8 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, y1 = 0; y2 = 0; - minY = 0 - renderPosY; - maxY = 256 - renderPosY; + minY -= renderPosY; + maxY -= renderPosY; } else if (goal instanceof GoalComposite) { for (Goal g : ((GoalComposite) goal).goals()) { drawDankLitGoalBox(stack, player, g, partialTicks, color); From 7da802a2389b832b79c41b26f6b4bf4025a9a84e Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 16:21:05 -0500 Subject: [PATCH 557/935] Fix `censorCoordinates` recalc bug Adds `equals` and `toString` implementations where needed Replaces `toString` equality check with actual `equals` check in `forceRevalidate` --- .../baritone/api/pathing/goals/GoalAxis.java | 5 ++ .../baritone/api/pathing/goals/GoalBlock.java | 11 ++++ .../api/pathing/goals/GoalComposite.java | 9 +++ .../api/pathing/goals/GoalGetToBlock.java | 11 ++++ .../api/pathing/goals/GoalInverted.java | 11 ++++ .../baritone/api/pathing/goals/GoalNear.java | 12 ++++ .../api/pathing/goals/GoalRunAway.java | 12 ++++ .../pathing/goals/GoalStrictDirection.java | 13 +++++ .../api/pathing/goals/GoalTwoBlocks.java | 11 ++++ .../baritone/api/pathing/goals/GoalXZ.java | 10 ++++ .../api/pathing/goals/GoalYLevel.java | 9 +++ .../java/baritone/process/BuilderProcess.java | 57 +++++++++++++++++-- .../java/baritone/process/MineProcess.java | 15 +++++ .../baritone/utils/PathingControlManager.java | 2 +- 14 files changed, 183 insertions(+), 5 deletions(-) diff --git a/src/api/java/baritone/api/pathing/goals/GoalAxis.java b/src/api/java/baritone/api/pathing/goals/GoalAxis.java index 7c9b26705..ad8fb892e 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalAxis.java +++ b/src/api/java/baritone/api/pathing/goals/GoalAxis.java @@ -42,6 +42,11 @@ public double heuristic(int x0, int y, int z0) { return flatAxisDistance * BaritoneAPI.getSettings().costHeuristic.value + GoalYLevel.calculate(BaritoneAPI.getSettings().axisHeight.value, y); } + @Override + public boolean equals(Object o) { + return o.getClass() == GoalAxis.class; + } + @Override public String toString() { return "GoalAxis"; diff --git a/src/api/java/baritone/api/pathing/goals/GoalBlock.java b/src/api/java/baritone/api/pathing/goals/GoalBlock.java index bd339549b..ad2c3eadb 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalBlock.java @@ -66,6 +66,17 @@ public double heuristic(int x, int y, int z) { return calculate(xDiff, yDiff, zDiff); } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GoalBlock goal = (GoalBlock) o; + if (x != goal.x) return false; + if (y != goal.y) return false; + return z == goal.z; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalComposite.java b/src/api/java/baritone/api/pathing/goals/GoalComposite.java index 47522492b..f407fe733 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalComposite.java +++ b/src/api/java/baritone/api/pathing/goals/GoalComposite.java @@ -67,6 +67,15 @@ public double heuristic() { return min; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GoalComposite goal = (GoalComposite) o; + return Arrays.equals(goals, goal.goals); + } + @Override public String toString() { return "GoalComposite" + Arrays.toString(goals); diff --git a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java index 8d6fdcb30..3d2c0713a 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java @@ -60,6 +60,17 @@ public double heuristic(int x, int y, int z) { return GoalBlock.calculate(xDiff, yDiff < 0 ? yDiff + 1 : yDiff, zDiff); } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GoalGetToBlock goal = (GoalGetToBlock) o; + if (x != goal.x) return false; + if (y != goal.y) return false; + return z == goal.z; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalInverted.java b/src/api/java/baritone/api/pathing/goals/GoalInverted.java index 354e2ce39..acfdd68b2 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalInverted.java +++ b/src/api/java/baritone/api/pathing/goals/GoalInverted.java @@ -17,6 +17,8 @@ package baritone.api.pathing.goals; +import java.util.Objects; + /** * Invert any goal. *

@@ -50,6 +52,15 @@ public double heuristic() { return Double.NEGATIVE_INFINITY; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GoalInverted goal = (GoalInverted) o; + return Objects.equals(origin, goal.origin); + } + @Override public String toString() { return String.format("GoalInverted{%s}", origin.toString()); diff --git a/src/api/java/baritone/api/pathing/goals/GoalNear.java b/src/api/java/baritone/api/pathing/goals/GoalNear.java index 2252446cd..44f0ab040 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalNear.java +++ b/src/api/java/baritone/api/pathing/goals/GoalNear.java @@ -86,6 +86,18 @@ public BlockPos getGoalPos() { return new BlockPos(x, y, z); } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GoalNear goal = (GoalNear) o; + if (x != goal.x) return false; + if (y != goal.y) return false; + if (z != goal.z) return false; + return rangeSq == goal.rangeSq; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java index b704ae4a6..3d7caa734 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java +++ b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java @@ -23,6 +23,7 @@ import net.minecraft.util.math.BlockPos; import java.util.Arrays; +import java.util.Objects; /** * Useful for automated combat (retreating specifically) @@ -124,6 +125,17 @@ public double heuristic() {// TODO less hacky solution return maxInside; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GoalRunAway goal = (GoalRunAway) o; + if (distanceSq != goal.distanceSq) return false; + if (!Arrays.equals(from, goal.from)) return false; + return Objects.equals(maintainY, goal.maintainY); + } + @Override public String toString() { if (maintainY != null) { diff --git a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java index e93f47ac0..86208f0ca 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java +++ b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java @@ -69,6 +69,19 @@ public double heuristic() { return Double.NEGATIVE_INFINITY; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GoalStrictDirection goal = (GoalStrictDirection) o; + if (x != goal.x) return false; + if (y != goal.y) return false; + if (z != goal.z) return false; + if (dx != goal.dx) return false; + return dz == goal.dz; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java index 27be981e4..4df65f609 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java +++ b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java @@ -72,6 +72,17 @@ public BlockPos getGoalPos() { return new BlockPos(x, y, z); } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GoalTwoBlocks goal = (GoalTwoBlocks) o; + if (x != goal.x) return false; + if (y != goal.y) return false; + return z == goal.z; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalXZ.java b/src/api/java/baritone/api/pathing/goals/GoalXZ.java index 63d39cd78..c77743389 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalXZ.java +++ b/src/api/java/baritone/api/pathing/goals/GoalXZ.java @@ -64,6 +64,16 @@ public double heuristic(int x, int y, int z) {//mostly copied from GoalBlock return calculate(xDiff, zDiff); } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GoalXZ goal = (GoalXZ) o; + if (x != goal.x) return false; + return z == goal.z; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java index 603ef9bd1..8fc7850b9 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java +++ b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java @@ -58,6 +58,15 @@ public static double calculate(int goalY, int currentY) { return 0; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GoalYLevel goal = (GoalYLevel) o; + return level == goal.level; + } + @Override public String toString() { return String.format( diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index c7868a4a0..f9514fb95 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -30,10 +30,7 @@ import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.SubstituteSchematic; import baritone.api.schematic.format.ISchematicFormat; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.RayTraceUtils; -import baritone.api.utils.Rotation; -import baritone.api.utils.RotationUtils; +import baritone.api.utils.*; import baritone.api.utils.input.Input; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Movement; @@ -764,6 +761,16 @@ public double heuristic(int x, int y, int z) { return primary.heuristic(x, y, z); } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + JankyGoalComposite goal = (JankyGoalComposite) o; + if (!Objects.equals(primary, goal.primary)) return false; + return Objects.equals(fallback, goal.fallback); + } + @Override public String toString() { return "JankyComposite Primary: " + primary + " Fallback: " + fallback; @@ -785,6 +792,16 @@ public boolean isInGoal(int x, int y, int z) { // but any other adjacent works for breaking, including inside or below return super.isInGoal(x, y, z); } + + @Override + public String toString() { + return String.format( + "GoalBreak{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } } private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { @@ -828,6 +845,7 @@ public GoalAdjacent(BlockPos pos, BlockPos no, boolean allowSameLevel) { this.allowSameLevel = allowSameLevel; } + @Override public boolean isInGoal(int x, int y, int z) { if (x == this.x && y == this.y && z == this.z) { return false; @@ -844,10 +862,30 @@ public boolean isInGoal(int x, int y, int z) { return super.isInGoal(x, y, z); } + @Override public double heuristic(int x, int y, int z) { // prioritize lower y coordinates return this.y * 100 + super.heuristic(x, y, z); } + + @Override + public boolean equals(Object o) { + if (!super.equals(o)) return false; + + GoalAdjacent goal = (GoalAdjacent) o; + if (allowSameLevel != goal.allowSameLevel) return false; + return Objects.equals(no, goal.no); + } + + @Override + public String toString() { + return String.format( + "GoalAdjacent{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } } public static class GoalPlace extends GoalBlock { @@ -856,10 +894,21 @@ public GoalPlace(BlockPos placeAt) { super(placeAt.up()); } + @Override public double heuristic(int x, int y, int z) { // prioritize lower y coordinates return this.y * 100 + super.heuristic(x, y, z); } + + @Override + public String toString() { + return String.format( + "GoalPlace{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } } @Override diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 6880dd86c..866dcc19d 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -319,6 +319,21 @@ public double heuristic(int x, int y, int z) { int zDiff = z - this.z; return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); } + + @Override + public boolean equals(Object o) { + return super.equals(o); + } + + @Override + public String toString() { + return String.format( + "GoalThreeBlocks{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } } public List droppedItemsScan() { diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index a83e53a1e..236e41cc6 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -160,7 +160,7 @@ public boolean forceRevalidate(Goal newGoal) { if (newGoal.isInGoal(current.getPath().getDest())) { return false; } - return !newGoal.toString().equals(current.getPath().getGoal().toString()); + return !newGoal.equals(current.getPath().getGoal()); } return false; } From 5bdd5b0c0d095797021481a8816600c954883335 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 16:50:02 -0500 Subject: [PATCH 558/935] =?UTF-8?q?=F0=9F=91=8C=20appease=20leijurv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baritone/api/pathing/goals/GoalBlock.java | 14 ++++++++----- .../api/pathing/goals/GoalComposite.java | 8 ++++++-- .../api/pathing/goals/GoalGetToBlock.java | 14 ++++++++----- .../api/pathing/goals/GoalInverted.java | 8 ++++++-- .../baritone/api/pathing/goals/GoalNear.java | 16 +++++++++------ .../api/pathing/goals/GoalRunAway.java | 14 ++++++++----- .../pathing/goals/GoalStrictDirection.java | 18 ++++++++++------- .../api/pathing/goals/GoalTwoBlocks.java | 14 ++++++++----- .../baritone/api/pathing/goals/GoalXZ.java | 11 ++++++---- .../api/pathing/goals/GoalYLevel.java | 8 ++++++-- .../java/baritone/process/BuilderProcess.java | 20 ++++++++++++------- 11 files changed, 95 insertions(+), 50 deletions(-) diff --git a/src/api/java/baritone/api/pathing/goals/GoalBlock.java b/src/api/java/baritone/api/pathing/goals/GoalBlock.java index ad2c3eadb..68d783aa3 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalBlock.java @@ -68,13 +68,17 @@ public double heuristic(int x, int y, int z) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } GoalBlock goal = (GoalBlock) o; - if (x != goal.x) return false; - if (y != goal.y) return false; - return z == goal.z; + return x == goal.x + && y != goal.y + && z == goal.z; } @Override diff --git a/src/api/java/baritone/api/pathing/goals/GoalComposite.java b/src/api/java/baritone/api/pathing/goals/GoalComposite.java index f407fe733..d64f8e33e 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalComposite.java +++ b/src/api/java/baritone/api/pathing/goals/GoalComposite.java @@ -69,8 +69,12 @@ public double heuristic() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } GoalComposite goal = (GoalComposite) o; return Arrays.equals(goals, goal.goals); diff --git a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java index 3d2c0713a..b5caafa48 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java @@ -62,13 +62,17 @@ public double heuristic(int x, int y, int z) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } GoalGetToBlock goal = (GoalGetToBlock) o; - if (x != goal.x) return false; - if (y != goal.y) return false; - return z == goal.z; + return x == goal.x + && y == goal.y + && z == goal.z; } @Override diff --git a/src/api/java/baritone/api/pathing/goals/GoalInverted.java b/src/api/java/baritone/api/pathing/goals/GoalInverted.java index acfdd68b2..e559088ef 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalInverted.java +++ b/src/api/java/baritone/api/pathing/goals/GoalInverted.java @@ -54,8 +54,12 @@ public double heuristic() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } GoalInverted goal = (GoalInverted) o; return Objects.equals(origin, goal.origin); diff --git a/src/api/java/baritone/api/pathing/goals/GoalNear.java b/src/api/java/baritone/api/pathing/goals/GoalNear.java index 44f0ab040..166138ff4 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalNear.java +++ b/src/api/java/baritone/api/pathing/goals/GoalNear.java @@ -88,14 +88,18 @@ public BlockPos getGoalPos() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } GoalNear goal = (GoalNear) o; - if (x != goal.x) return false; - if (y != goal.y) return false; - if (z != goal.z) return false; - return rangeSq == goal.rangeSq; + return x == goal.x + && y == goal.y + && z == goal.z + && rangeSq == goal.rangeSq; } @Override diff --git a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java index 3d7caa734..166ad5a98 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java +++ b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java @@ -127,13 +127,17 @@ public double heuristic() {// TODO less hacky solution @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } GoalRunAway goal = (GoalRunAway) o; - if (distanceSq != goal.distanceSq) return false; - if (!Arrays.equals(from, goal.from)) return false; - return Objects.equals(maintainY, goal.maintainY); + return distanceSq == goal.distanceSq + && Arrays.equals(from, goal.from) + && Objects.equals(maintainY, goal.maintainY); } @Override diff --git a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java index 86208f0ca..3d9909ad1 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java +++ b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java @@ -71,15 +71,19 @@ public double heuristic() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } GoalStrictDirection goal = (GoalStrictDirection) o; - if (x != goal.x) return false; - if (y != goal.y) return false; - if (z != goal.z) return false; - if (dx != goal.dx) return false; - return dz == goal.dz; + return x == goal.x + && y != goal.y + && z == goal.z + && dx == goal.dx + && dz == goal.dz; } @Override diff --git a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java index 4df65f609..d6fff33a2 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java +++ b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java @@ -74,13 +74,17 @@ public BlockPos getGoalPos() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } GoalTwoBlocks goal = (GoalTwoBlocks) o; - if (x != goal.x) return false; - if (y != goal.y) return false; - return z == goal.z; + return x == goal.x + && y == goal.y + && z == goal.z; } @Override diff --git a/src/api/java/baritone/api/pathing/goals/GoalXZ.java b/src/api/java/baritone/api/pathing/goals/GoalXZ.java index c77743389..2c551d395 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalXZ.java +++ b/src/api/java/baritone/api/pathing/goals/GoalXZ.java @@ -66,12 +66,15 @@ public double heuristic(int x, int y, int z) {//mostly copied from GoalBlock @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } GoalXZ goal = (GoalXZ) o; - if (x != goal.x) return false; - return z == goal.z; + return x == goal.x && z == goal.z; } @Override diff --git a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java index 8fc7850b9..37745e8de 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java +++ b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java @@ -60,8 +60,12 @@ public static double calculate(int goalY, int currentY) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } GoalYLevel goal = (GoalYLevel) o; return level == goal.level; diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index f9514fb95..69368282d 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -763,12 +763,16 @@ public double heuristic(int x, int y, int z) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } JankyGoalComposite goal = (JankyGoalComposite) o; - if (!Objects.equals(primary, goal.primary)) return false; - return Objects.equals(fallback, goal.fallback); + return Objects.equals(primary, goal.primary) + && Objects.equals(fallback, goal.fallback); } @Override @@ -870,11 +874,13 @@ public double heuristic(int x, int y, int z) { @Override public boolean equals(Object o) { - if (!super.equals(o)) return false; + if (!super.equals(o)) { + return false; + } GoalAdjacent goal = (GoalAdjacent) o; - if (allowSameLevel != goal.allowSameLevel) return false; - return Objects.equals(no, goal.no); + return allowSameLevel == goal.allowSameLevel + && Objects.equals(no, goal.no); } @Override From 8a65a1cfc593be38405bf9420be17988f93959c7 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 16:52:20 -0500 Subject: [PATCH 559/935] =?UTF-8?q?=F0=9F=90=9B=20fix=20incorrect=20compar?= =?UTF-8?q?ison=20operator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/java/baritone/api/pathing/goals/GoalBlock.java | 2 +- .../java/baritone/api/pathing/goals/GoalStrictDirection.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/pathing/goals/GoalBlock.java b/src/api/java/baritone/api/pathing/goals/GoalBlock.java index 68d783aa3..d76fdc7af 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalBlock.java @@ -77,7 +77,7 @@ public boolean equals(Object o) { GoalBlock goal = (GoalBlock) o; return x == goal.x - && y != goal.y + && y == goal.y && z == goal.z; } diff --git a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java index 3d9909ad1..b8e4b43b2 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java +++ b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java @@ -80,7 +80,7 @@ public boolean equals(Object o) { GoalStrictDirection goal = (GoalStrictDirection) o; return x == goal.x - && y != goal.y + && y == goal.y && z == goal.z && dx == goal.dx && dz == goal.dz; From c217a34f1368bff64bbf8123e9c7eae1a89e3881 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 17:05:56 -0500 Subject: [PATCH 560/935] =?UTF-8?q?=F0=9F=90=9B=20fix=20batch=20render=20c?= =?UTF-8?q?olor=20bug=20by=20backporting=201.17+=20render=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baritone/utils/IRenderer.java | 57 ++++++++++--------- .../java/baritone/utils/PathRenderer.java | 52 ++++++++--------- 2 files changed, 57 insertions(+), 52 deletions(-) diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 3476c0307..26a7cf1ad 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -38,9 +38,14 @@ public interface IRenderer { RenderManager renderManager = Helper.mc.getRenderManager(); Settings settings = BaritoneAPI.getSettings(); + float[] color = new float[] {1.0F, 1.0F, 1.0F, 255.0F}; + static void glColor(Color color, float alpha) { float[] colorComponents = color.getColorComponents(null); - GlStateManager.color(colorComponents[0], colorComponents[1], colorComponents[2], alpha); + IRenderer.color[0] = colorComponents[0]; + IRenderer.color[1] = colorComponents[1]; + IRenderer.color[2] = colorComponents[2]; + IRenderer.color[3] = alpha; } static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { @@ -54,7 +59,7 @@ static void startLines(Color color, float alpha, float lineWidth, boolean ignore if (ignoreDepth) { GlStateManager.disableDepth(); } - buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); + buffer.begin(GL_LINES, DefaultVertexFormats.POSITION_COLOR); } static void startLines(Color color, float lineWidth, boolean ignoreDepth) { @@ -76,32 +81,32 @@ static void emitAABB(AxisAlignedBB aabb) { AxisAlignedBB toDraw = aabb.offset(-renderManager.viewerPosX, -renderManager.viewerPosY, -renderManager.viewerPosZ); // bottom - buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); + buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); // top - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); + buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); // corners - buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex(); - buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex(); + buffer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); } static void emitAABB(AxisAlignedBB aabb, double expand) { diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 2aef0ab54..deec261d4 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -165,18 +165,18 @@ public static void emitLine(double x1, double y1, double z1, double x2, double y double vpZ = renderManager.viewerPosZ; boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; - buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); - buffer.pos(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).endVertex(); + buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); if (renderPathAsFrickinThingy) { - buffer.pos(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).endVertex(); - buffer.pos(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).endVertex(); + buffer.pos(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).endVertex(); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).endVertex(); + buffer.pos(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).endVertex(); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).endVertex(); + buffer.pos(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); } } @@ -310,22 +310,22 @@ public static void drawGoal(Entity player, Goal goal, float partialTicks, Color } } - private static void drawDankLitGoalBox(Color color, double minX, double maxX, double minZ, double maxZ, double minY, double maxY, double y1, double y2, boolean setupRender) { + private static void drawDankLitGoalBox(Color colorIn, double minX, double maxX, double minZ, double maxZ, double minY, double maxY, double y1, double y2, boolean setupRender) { if (setupRender) { - IRenderer.startLines(color, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); + IRenderer.startLines(colorIn, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); } renderHorizontalQuad(minX, maxX, minZ, maxZ, y1); renderHorizontalQuad(minX, maxX, minZ, maxZ, y2); - buffer.pos(minX, minY, minZ).endVertex(); - buffer.pos(minX, maxY, minZ).endVertex(); - buffer.pos(maxX, minY, minZ).endVertex(); - buffer.pos(maxX, maxY, minZ).endVertex(); - buffer.pos(maxX, minY, maxZ).endVertex(); - buffer.pos(maxX, maxY, maxZ).endVertex(); - buffer.pos(minX, minY, maxZ).endVertex(); - buffer.pos(minX, maxY, maxZ).endVertex(); + buffer.pos(minX, minY, minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(minX, maxY, minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(maxX, minY, minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(maxX, maxY, minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(maxX, minY, maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(maxX, maxY, maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(minX, minY, maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(minX, maxY, maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); if (setupRender) { IRenderer.endLines(settings.renderGoalIgnoreDepth.value); @@ -334,17 +334,17 @@ private static void drawDankLitGoalBox(Color color, double minX, double maxX, do private static void renderHorizontalQuad(double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { - buffer.pos(minX, y, minZ).endVertex(); - buffer.pos(maxX, y, minZ).endVertex(); + buffer.pos(minX, y, minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(maxX, y, minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(maxX, y, minZ).endVertex(); - buffer.pos(maxX, y, maxZ).endVertex(); + buffer.pos(maxX, y, minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(maxX, y, maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(maxX, y, maxZ).endVertex(); - buffer.pos(minX, y, maxZ).endVertex(); + buffer.pos(maxX, y, maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(minX, y, maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(minX, y, maxZ).endVertex(); - buffer.pos(minX, y, minZ).endVertex(); + buffer.pos(minX, y, maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(minX, y, minZ).color(color[0], color[1], color[2], color[3]).endVertex(); } } } From 13fc58933d6cf1db497d5303d290f65588b6c652 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 19:03:03 -0500 Subject: [PATCH 561/935] Don't bother returning `serverRotations` if no free look --- src/main/java/baritone/behavior/LookBehavior.java | 12 +++++++++--- .../baritone/utils/player/PrimaryPlayerContext.java | 7 ++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 1e109482c..702c3738d 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -28,6 +28,8 @@ import baritone.api.utils.Rotation; import net.minecraft.network.play.client.CPacketPlayer; +import java.util.Optional; + public final class LookBehavior extends Behavior implements ILookBehavior { /** @@ -70,9 +72,9 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); } - ctx.player().rotationYaw = this.target.rotation.getYaw(); float oldPitch = ctx.playerRotations().getPitch(); float desiredPitch = this.target.rotation.getPitch(); + ctx.player().rotationYaw = this.target.rotation.getYaw(); ctx.player().rotationPitch = desiredPitch; ctx.player().rotationYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; ctx.player().rotationPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; @@ -126,8 +128,12 @@ public void pig() { } } - public Rotation getEffectiveRotation() { - return this.serverRotation; + public Optional getEffectiveRotation() { + if (Baritone.settings().freeLook.value || Baritone.settings().blockFreeLook.value) { + return Optional.of(this.serverRotation); + } + // If neither of the freeLook settings are on, just defer to the player's actual rotations + return Optional.empty(); } @Override diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index e4484f0be..20d82f2bc 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -58,11 +58,8 @@ public IWorldData worldData() { @Override public Rotation playerRotations() { - final Rotation lbTarget = ((LookBehavior) BaritoneAPI.getProvider().getPrimaryBaritone().getLookBehavior()).getEffectiveRotation(); - if (lbTarget == null || !Baritone.settings().blockFreeLook.value) { - return IPlayerContext.super.playerRotations(); - } - return lbTarget; + return ((LookBehavior) BaritoneAPI.getProvider().getPrimaryBaritone().getLookBehavior()).getEffectiveRotation() + .orElseGet(IPlayerContext.super::playerRotations); } @Override From 4885d49d20debf7bc4f8328c11e08549e57c5abe Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 20:00:03 -0500 Subject: [PATCH 562/935] Reorganize code --- .../java/baritone/behavior/LookBehavior.java | 32 ++++++++++++------- .../utils/player/PrimaryPlayerContext.java | 1 - 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 702c3738d..db0c255f7 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -72,16 +72,23 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); } - float oldPitch = ctx.playerRotations().getPitch(); + final float oldPitch = ctx.playerRotations().getPitch(); + + float desiredYaw = this.target.rotation.getYaw(); float desiredPitch = this.target.rotation.getPitch(); - ctx.player().rotationYaw = this.target.rotation.getYaw(); - ctx.player().rotationPitch = desiredPitch; - ctx.player().rotationYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; - ctx.player().rotationPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; + + // In other words, the target doesn't care about the pitch, so it used playerRotations().getPitch() + // and it's safe to adjust it to a normal level if (desiredPitch == oldPitch) { - nudgeToLevel(); + desiredPitch = nudgeToLevel(desiredPitch); } + desiredYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; + desiredPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; + + ctx.player().rotationYaw = desiredYaw; + ctx.player().rotationPitch = desiredPitch; + if (this.target.mode == Target.Mode.CLIENT) { // The target can be invalidated now since it won't be needed for RotationMoveEvent this.target = null; @@ -130,7 +137,7 @@ public void pig() { public Optional getEffectiveRotation() { if (Baritone.settings().freeLook.value || Baritone.settings().blockFreeLook.value) { - return Optional.of(this.serverRotation); + return Optional.ofNullable(this.serverRotation); } // If neither of the freeLook settings are on, just defer to the player's actual rotations return Optional.empty(); @@ -146,12 +153,13 @@ public void onPlayerRotationMove(RotationMoveEvent event) { /** * Nudges the player's pitch to a regular level. (Between {@code -20} and {@code 10}, increments are by {@code 1}) */ - private void nudgeToLevel() { - if (ctx.player().rotationPitch < -20) { - ctx.player().rotationPitch++; - } else if (ctx.player().rotationPitch > 10) { - ctx.player().rotationPitch--; + private float nudgeToLevel(float pitch) { + if (pitch < -20) { + return pitch + 1; + } else if (pitch > 10) { + return pitch - 1; } + return pitch; } private static class Target { diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index 20d82f2bc..02db73a5c 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -17,7 +17,6 @@ package baritone.utils.player; -import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.cache.IWorldData; import baritone.api.utils.*; From c8b8deb3d62d5a786054fd1939293cb71673258c Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 21:04:30 -0500 Subject: [PATCH 563/935] Ensure angle delta is producible with mouse movement --- .../java/baritone/behavior/LookBehavior.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index db0c255f7..99e496e6f 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -24,6 +24,7 @@ import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.RotationMoveEvent; import baritone.api.event.events.WorldEvent; +import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; import baritone.api.utils.Rotation; import net.minecraft.network.play.client.CPacketPlayer; @@ -72,6 +73,7 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); } + final float oldYaw = ctx.playerRotations().getYaw(); final float oldPitch = ctx.playerRotations().getPitch(); float desiredYaw = this.target.rotation.getYaw(); @@ -86,8 +88,8 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { desiredYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; desiredPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; - ctx.player().rotationYaw = desiredYaw; - ctx.player().rotationPitch = desiredPitch; + ctx.player().rotationYaw = calculateMouseMove(oldYaw, desiredYaw); + ctx.player().rotationPitch = calculateMouseMove(oldPitch, desiredPitch); if (this.target.mode == Target.Mode.CLIENT) { // The target can be invalidated now since it won't be needed for RotationMoveEvent @@ -153,7 +155,7 @@ public void onPlayerRotationMove(RotationMoveEvent event) { /** * Nudges the player's pitch to a regular level. (Between {@code -20} and {@code 10}, increments are by {@code 1}) */ - private float nudgeToLevel(float pitch) { + private static float nudgeToLevel(float pitch) { if (pitch < -20) { return pitch + 1; } else if (pitch > 10) { @@ -162,6 +164,22 @@ private float nudgeToLevel(float pitch) { return pitch; } + private static float calculateMouseMove(float current, float target) { + final float delta = target - current; + final int deltaPx = angleToMouse(delta); + return current + mouseToAngle(deltaPx); + } + + private static int angleToMouse(float angleDelta) { + final float minAngleChange = mouseToAngle(1); + return Math.round(angleDelta / minAngleChange); + } + + private static float mouseToAngle(int mouseDelta) { + final float f = Helper.mc.gameSettings.mouseSensitivity * 0.6f + 0.2f; + return mouseDelta * f * f * f * 8.0f * 0.15f; + } + private static class Target { public final Rotation rotation; From 2022d33d03296a41689fa4cd186b15ecc2e8a324 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 21:12:49 -0500 Subject: [PATCH 564/935] Fix incorrect references to player and world --- .../java/baritone/command/defaults/SurfaceCommand.java | 8 ++++---- .../java/baritone/process/InventoryPauserProcess.java | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/command/defaults/SurfaceCommand.java b/src/main/java/baritone/command/defaults/SurfaceCommand.java index 842b8050c..5d914aded 100644 --- a/src/main/java/baritone/command/defaults/SurfaceCommand.java +++ b/src/main/java/baritone/command/defaults/SurfaceCommand.java @@ -38,13 +38,13 @@ protected SurfaceCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { - final BetterBlockPos playerPos = baritone.getPlayerContext().playerFeet(); - final int surfaceLevel = baritone.getPlayerContext().world().getSeaLevel(); - final int worldHeight = baritone.getPlayerContext().world().getActualHeight(); + final BetterBlockPos playerPos = ctx.playerFeet(); + final int surfaceLevel = ctx.world().getSeaLevel(); + final int worldHeight = ctx.world().getActualHeight(); // Ensure this command will not run if you are above the surface level and the block above you is air // As this would imply that your are already on the open surface - if (playerPos.getY() > surfaceLevel && mc.world.getBlockState(playerPos.up()).getBlock() instanceof BlockAir) { + if (playerPos.getY() > surfaceLevel && ctx.world().getBlockState(playerPos.up()).getBlock() instanceof BlockAir) { logDirect("Already at surface"); return; } diff --git a/src/main/java/baritone/process/InventoryPauserProcess.java b/src/main/java/baritone/process/InventoryPauserProcess.java index ab210532b..9752912b9 100644 --- a/src/main/java/baritone/process/InventoryPauserProcess.java +++ b/src/main/java/baritone/process/InventoryPauserProcess.java @@ -34,14 +34,14 @@ public InventoryPauserProcess(Baritone baritone) { @Override public boolean isActive() { - if (mc.player == null || mc.world == null) { + if (ctx.player() == null || ctx.world() == null) { return false; } return true; } private double motion() { - return Math.sqrt(mc.player.motionX * mc.player.motionX + mc.player.motionZ * mc.player.motionZ); + return Math.sqrt(ctx.player().motionX * ctx.player().motionX + ctx.player().motionZ * ctx.player().motionZ); } private boolean stationaryNow() { From 76fe0d14d3199cf219d3a67ddada62f0153aa702 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 12 Jun 2023 21:13:10 -0500 Subject: [PATCH 565/935] Simplify some player context references --- src/main/java/baritone/command/defaults/GoalCommand.java | 2 +- src/main/java/baritone/command/defaults/GotoCommand.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/command/defaults/GoalCommand.java b/src/main/java/baritone/command/defaults/GoalCommand.java index 40822e057..a174ecad9 100644 --- a/src/main/java/baritone/command/defaults/GoalCommand.java +++ b/src/main/java/baritone/command/defaults/GoalCommand.java @@ -51,7 +51,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } } else { args.requireMax(3); - BetterBlockPos origin = baritone.getPlayerContext().playerFeet(); + BetterBlockPos origin = ctx.playerFeet(); Goal goal = args.getDatatypePost(RelativeGoal.INSTANCE, origin); goalProcess.setGoal(goal); logDirect(String.format("Goal: %s", goal.toString())); diff --git a/src/main/java/baritone/command/defaults/GotoCommand.java b/src/main/java/baritone/command/defaults/GotoCommand.java index 896e3f5f8..333d7fa57 100644 --- a/src/main/java/baritone/command/defaults/GotoCommand.java +++ b/src/main/java/baritone/command/defaults/GotoCommand.java @@ -46,7 +46,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { // is no need to handle the case of empty arguments. if (args.peekDatatypeOrNull(RelativeCoordinate.INSTANCE) != null) { args.requireMax(3); - BetterBlockPos origin = baritone.getPlayerContext().playerFeet(); + BetterBlockPos origin = ctx.playerFeet(); Goal goal = args.getDatatypePost(RelativeGoal.INSTANCE, origin); logDirect(String.format("Going to: %s", goal.toString())); baritone.getCustomGoalProcess().setGoalAndPath(goal); From 44cd5dcd415bc01151797b97bbd5f591de46ac5f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 12 Jun 2023 21:43:10 -0700 Subject: [PATCH 566/935] go around glowstone and nether fortresses --- src/main/java/baritone/Elytra.java | 154 +++++++++++++++++++++++++++-- 1 file changed, 145 insertions(+), 9 deletions(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 708f6621d..9607fbcdb 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -26,6 +26,7 @@ import baritone.utils.BlockStateInterface; import com.mojang.realmsclient.util.Pair; import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; @@ -36,10 +37,7 @@ import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class Elytra extends Behavior implements Helper { @@ -65,6 +63,139 @@ public class Elytra extends Behavior implements Helper { public int sinceFirework; public BlockPos goal; + private void pathfindAroundObstacles() { + outer: + while (true) { + int rangeStartIncl = playerNear; + int rangeEndExcl = playerNear; + while (rangeEndExcl < path.size() && ctx.world().isBlockLoaded(path.get(rangeEndExcl), false)) { + rangeEndExcl++; + } + if (rangeStartIncl >= rangeEndExcl) { + // not loaded yet? + return; + } + if (!passable(ctx.world().getBlockState(path.get(rangeStartIncl)))) { + // we're in a wall + return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: + } + for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { + if (!clearView(pathAt(i), pathAt(i + 1))) { + // obstacle. where do we return to pathing? + // find the next valid segment + for (int j = i + 1; j < rangeEndExcl - 1; j++) { + if (clearView(pathAt(j), pathAt(j + 1))) { + // found it + // path from i to j + List newPath = simplePathfind(path.get(i), path.get(j)); + if (newPath == null) { + logDirect("no path"); + return; + } + path.subList(i + 1, j).clear(); + for (int k = newPath.size() - 1; k >= 0; k--) { + path.add(i + 1, newPath.get(k)); + } + logDirect("replaced path starting at " + path.get(i)); + removeBacktracks(); + break outer; // eventually "continue outer" + } + } + } + } + break; + } + } + + private int manhattanDist(BlockPos start, BlockPos dest) { + return Math.abs(start.getX() - dest.getX()) + Math.abs(start.getY() - dest.getY()) + Math.abs(start.getZ() - dest.getZ()); + } + + private class SearchNode { + BetterBlockPos pos; + int dist; + int heuristic; + SearchNode prev; + boolean canceled; + + public SearchNode(BetterBlockPos pos, int dist, int heuristic, SearchNode prev) { + this.pos = pos; + this.dist = dist; + this.heuristic = heuristic; + this.prev = prev; + } + } + + private List simplePathfind(BetterBlockPos start, BetterBlockPos dest) { + Map map = new HashMap<>(); + PriorityQueue queue = new PriorityQueue<>(Comparator.comparingInt(node -> node.dist + node.heuristic)); + SearchNode origin = new SearchNode(start, 0, manhattanDist(start, dest) * 10, null); + map.put(start, origin); + queue.add(origin); + int count = 0; + while (!queue.isEmpty()) { + if (count++ > 10000) { + logDirect("oopsie"); + return null; + } + SearchNode node = queue.poll(); + if (node.canceled) { + continue; + } + if (node.pos.equals(dest)) { + List path = new ArrayList<>(); + while (node != null) { + path.add(node.pos); + node = node.prev; + } + Collections.reverse(path); + return simplify(path); + } + BetterBlockPos[] adjs = new BetterBlockPos[]{node.pos.up(), node.pos.down(), node.pos.north(), node.pos.south(), node.pos.east(), node.pos.west()}; + boolean nearAWall = false; + for (BetterBlockPos adj : adjs) { + if (!passable(ctx.world().getBlockState(adj))) { + nearAWall = true; + break; + } + } + for (BetterBlockPos adj : adjs) { + if (!passable(ctx.world().getBlockState(adj))) { + continue; + } + int cost = node.dist + (nearAWall ? 11 : 10); + if (map.containsKey(adj)) { + if (map.get(adj).dist <= cost) { + continue; + } + map.get(adj).canceled = true; + } + map.put(adj, new SearchNode(adj, cost, manhattanDist(adj, dest) * 10, node)); + queue.add(map.get(adj)); + } + } + return null; + } + + private List simplify(List path) { + List simplified = new ArrayList<>(path); + for (int i = 0; i < simplified.size() - 2; i++) { + BlockPos dir = simplified.get(i + 1).subtract(simplified.get(i)); + while (i + 2 < simplified.size()) { + if (simplified.get(i + 2).subtract(simplified.get(i + 1)).equals(dir)) { + simplified.remove(i + 1); + } else { + break; + } + } + } + return simplified; + } + + private Vec3d pathAt(int i) { + return new Vec3d(path.get(i).x + 0.5, path.get(i).y + 0.5, path.get(i).z + 0.5); + } + public List> lines = new ArrayList<>(); @@ -81,6 +212,7 @@ public void onTick(TickEvent event) { fixNearPlayer(); baritone.getInputOverrideHandler().clearAllKeys(); lines.clear(); + pathfindAroundObstacles(); if (ctx.player().isElytraFlying()) { if (ctx.player().collidedHorizontally) { logDirect("hbonk"); @@ -94,7 +226,7 @@ public void onTick(TickEvent event) { if (!firework && sinceFirework > 10 && (Baritone.settings().wasteFireworks.value || ctx.player().posY < path.get(goingTo).y + 5) // don't firework if trying to descend - && (ctx.player().posY < path.get(goingTo).y - 5 || ctx.playerFeetAsVec().distanceTo(new Vec3d(path.get(goingTo).x, ctx.player().posY, path.get(goingTo).z)) > 5) // UGH!!!!!!! + && (ctx.player().posY < path.get(goingTo).y - 5 || ctx.playerFeetAsVec().distanceTo(new Vec3d(path.get(goingTo).x + 0.5, ctx.player().posY, path.get(goingTo).z + 0.5)) > 5) // UGH!!!!!!! && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending ) { logDirect("firework"); @@ -111,19 +243,19 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat int minStep = playerNear; for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { for (int dy : heights) { - Vec3d dest = new Vec3d(path.get(i)).add(0, dy, 0); + Vec3d dest = pathAt(i).add(0, dy, 0); if (dy != 0) { if (i + lookahead >= path.size()) { continue; } if (start.distanceTo(dest) < 40) { - if (!clearView(dest, new Vec3d(path.get(i + lookahead)).add(0, dy, 0)) || !clearView(dest, new Vec3d(path.get(i + lookahead)))) { + if (!clearView(dest, pathAt(i + lookahead).add(0, dy, 0)) || !clearView(dest, pathAt(i + lookahead))) { // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position continue; } } else { // but if it's far away, allow gaining altitude if we could lose it again by the time we get there - if (!clearView(dest, new Vec3d(path.get(i)))) { + if (!clearView(dest, pathAt(i))) { continue; } } @@ -196,7 +328,7 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate) { for (int x = MathHelper.floor(Math.min(actualPosition.x, actualPositionPrevTick.x) - 0.31); x <= Math.max(actualPosition.x, actualPositionPrevTick.x) + 0.31; x++) { for (int y = MathHelper.floor(Math.min(actualPosition.y, actualPositionPrevTick.y) - 0.2); y <= Math.max(actualPosition.y, actualPositionPrevTick.y) + 0.8; y++) { for (int z = MathHelper.floor(Math.min(actualPosition.z, actualPositionPrevTick.z) - 0.31); z <= Math.max(actualPosition.z, actualPositionPrevTick.z) + 0.31; z++) { - if (bsi.get0(x, y, z).getMaterial() != Material.AIR) { + if (!passable(bsi.get0(x, y, z))) { continue outer; } } @@ -214,6 +346,10 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate) { return bestPitch; } + private static boolean passable(IBlockState state) { + return state.getMaterial() == Material.AIR; + } + public static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, boolean firework) { double motionX = motion.x; double motionY = motion.y; From 92509f07e9e3ec042ecbe3d93602f86645952694 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 12 Jun 2023 22:00:23 -0700 Subject: [PATCH 567/935] normal raytracer skips flowing lava (aka lavafalls) which is no good --- src/main/java/baritone/Elytra.java | 98 +++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 9607fbcdb..2f724c692 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -28,6 +28,8 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -297,7 +299,7 @@ && clearView(start.add(perpendicular), dest.add(perpendicular)) private boolean clearView(Vec3d start, Vec3d dest) { lines.add(Pair.of(start, dest)); - RayTraceResult result = ctx.world().rayTraceBlocks(start, dest, true, false, true); + RayTraceResult result = rayTraceBlocks(start, dest); return result == null || result.typeOfHit == RayTraceResult.Type.MISS; } @@ -438,4 +440,98 @@ public static void removeBacktracks() { } } } + + public RayTraceResult rayTraceBlocks(Vec3d start, Vec3d end) { + int x1 = MathHelper.floor(end.x); + int y1 = MathHelper.floor(end.y); + int z1 = MathHelper.floor(end.z); + int x2 = MathHelper.floor(start.x); + int y2 = MathHelper.floor(start.y); + int z2 = MathHelper.floor(start.z); + BlockPos blockpos = new BlockPos(x2, y2, z2); + IBlockState iblockstate = ctx.world().getBlockState(blockpos); + if (!passable(iblockstate)) { + return Blocks.DIRT.getDefaultState().collisionRayTrace(ctx.world(), blockpos, start, end); + } + int steps = 200; + while (steps-- >= 0) { + if (Double.isNaN(start.x) || Double.isNaN(start.y) || Double.isNaN(start.z)) { + return null; + } + if (x2 == x1 && y2 == y1 && z2 == z1) { + return null; + } + boolean hitX = true; + boolean hitY = true; + boolean hitZ = true; + double nextX = 999.0D; + double nextY = 999.0D; + double nextZ = 999.0D; + if (x1 > x2) { + nextX = (double) x2 + 1.0D; + } else if (x1 < x2) { + nextX = (double) x2 + 0.0D; + } else { + hitX = false; + } + if (y1 > y2) { + nextY = (double) y2 + 1.0D; + } else if (y1 < y2) { + nextY = (double) y2 + 0.0D; + } else { + hitY = false; + } + if (z1 > z2) { + nextZ = (double) z2 + 1.0D; + } else if (z1 < z2) { + nextZ = (double) z2 + 0.0D; + } else { + hitZ = false; + } + double stepX = 999.0D; + double stepY = 999.0D; + double stepZ = 999.0D; + double dirX = end.x - start.x; + double dirY = end.y - start.y; + double dirZ = end.z - start.z; + if (hitX) { + stepX = (nextX - start.x) / dirX; + } + if (hitY) { + stepY = (nextY - start.y) / dirY; + } + if (hitZ) { + stepZ = (nextZ - start.z) / dirZ; + } + if (stepX == -0.0D) { + stepX = -1.0E-4D; + } + if (stepY == -0.0D) { + stepY = -1.0E-4D; + } + if (stepZ == -0.0D) { + stepZ = -1.0E-4D; + } + EnumFacing dir; + if (stepX < stepY && stepX < stepZ) { + dir = x1 > x2 ? EnumFacing.WEST : EnumFacing.EAST; + start = new Vec3d(nextX, start.y + dirY * stepX, start.z + dirZ * stepX); + } else if (stepY < stepZ) { + dir = y1 > y2 ? EnumFacing.DOWN : EnumFacing.UP; + start = new Vec3d(start.x + dirX * stepY, nextY, start.z + dirZ * stepY); + } else { + dir = z1 > z2 ? EnumFacing.NORTH : EnumFacing.SOUTH; + start = new Vec3d(start.x + dirX * stepZ, start.y + dirY * stepZ, nextZ); + } + x2 = MathHelper.floor(start.x) - (dir == EnumFacing.EAST ? 1 : 0); + y2 = MathHelper.floor(start.y) - (dir == EnumFacing.UP ? 1 : 0); + z2 = MathHelper.floor(start.z) - (dir == EnumFacing.SOUTH ? 1 : 0); + blockpos = new BlockPos(x2, y2, z2); + IBlockState iblockstate1 = ctx.world().getBlockState(blockpos); + if (!passable(iblockstate1)) { + return Blocks.DIRT.getDefaultState().collisionRayTrace(ctx.world(), blockpos, start, end); + } + } + return null; + } } From 714ebb2c2d1df2c37c01a1d25a42aa8267121463 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 13 Jun 2023 18:24:31 -0500 Subject: [PATCH 568/935] Deprecate `Helper.mc` and begin to replace usages --- src/api/java/baritone/api/utils/Helper.java | 7 +++--- .../baritone/api/utils/gui/BaritoneToast.java | 3 ++- src/main/java/baritone/Baritone.java | 18 ++++++++----- src/main/java/baritone/BaritoneProvider.java | 4 +-- .../java/baritone/behavior/LookBehavior.java | 8 +++--- .../java/baritone/cache/WorldProvider.java | 5 ++++ .../baritone/utils/InputOverrideHandler.java | 3 +-- ...ontext.java => BaritonePlayerContext.java} | 25 +++++++++++++------ ...ler.java => BaritonePlayerController.java} | 11 +++++--- 9 files changed, 55 insertions(+), 29 deletions(-) rename src/main/java/baritone/utils/player/{PrimaryPlayerContext.java => BaritonePlayerContext.java} (69%) rename src/main/java/baritone/utils/player/{PrimaryPlayerController.java => BaritonePlayerController.java} (91%) diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 9bed37383..e49744b4f 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -44,6 +44,7 @@ public interface Helper { /** * Instance of the game */ + @Deprecated Minecraft mc = Minecraft.getMinecraft(); static ITextComponent getPrefix() { @@ -70,7 +71,7 @@ static ITextComponent getPrefix() { * @param message The message to display in the popup */ default void logToast(ITextComponent title, ITextComponent message) { - mc.addScheduledTask(() -> BaritoneAPI.getSettings().toaster.value.accept(title, message)); + Minecraft.getMinecraft().addScheduledTask(() -> BaritoneAPI.getSettings().toaster.value.accept(title, message)); } /** @@ -131,7 +132,7 @@ default void logNotificationDirect(String message) { * @param error Whether to log as an error */ default void logNotificationDirect(String message, boolean error) { - mc.addScheduledTask(() -> BaritoneAPI.getSettings().notifier.value.accept(message, error)); + Minecraft.getMinecraft().addScheduledTask(() -> BaritoneAPI.getSettings().notifier.value.accept(message, error)); } /** @@ -168,7 +169,7 @@ default void logDirect(boolean logAsToast, ITextComponent... components) { if (logAsToast) { logToast(getPrefix(), component); } else { - mc.addScheduledTask(() -> BaritoneAPI.getSettings().logger.value.accept(component)); + Minecraft.getMinecraft().addScheduledTask(() -> BaritoneAPI.getSettings().logger.value.accept(component)); } } diff --git a/src/api/java/baritone/api/utils/gui/BaritoneToast.java b/src/api/java/baritone/api/utils/gui/BaritoneToast.java index eb6361478..9e9a6403c 100644 --- a/src/api/java/baritone/api/utils/gui/BaritoneToast.java +++ b/src/api/java/baritone/api/utils/gui/BaritoneToast.java @@ -17,6 +17,7 @@ package baritone.api.utils.gui; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.toasts.GuiToast; import net.minecraft.client.gui.toasts.IToast; import net.minecraft.client.renderer.GlStateManager; @@ -73,6 +74,6 @@ public static void addOrUpdate(GuiToast toast, ITextComponent title, ITextCompon } public static void addOrUpdate(ITextComponent title, ITextComponent subtitle) { - addOrUpdate(net.minecraft.client.Minecraft.getMinecraft().getToastGui(), title, subtitle, baritone.api.BaritoneAPI.getSettings().toastTimer.value); + addOrUpdate(Minecraft.getMinecraft().getToastGui(), title, subtitle, baritone.api.BaritoneAPI.getSettings().toastTimer.value); } } diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 61db54211..173cef876 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -21,7 +21,6 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.event.listener.IEventBus; -import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; import baritone.behavior.*; import baritone.cache.WorldProvider; @@ -33,7 +32,7 @@ import baritone.utils.GuiClick; import baritone.utils.InputOverrideHandler; import baritone.utils.PathingControlManager; -import baritone.utils.player.PrimaryPlayerContext; +import baritone.utils.player.BaritonePlayerContext; import net.minecraft.client.Minecraft; import java.io.File; @@ -64,6 +63,8 @@ public class Baritone implements IBaritone { } } + private final Minecraft mc; + private GameEventHandler gameEventHandler; private PathingBehavior pathingBehavior; @@ -91,11 +92,12 @@ public class Baritone implements IBaritone { public BlockStateInterface bsi; - Baritone() { + Baritone(Minecraft mc) { + this.mc = mc; this.gameEventHandler = new GameEventHandler(this); // Define this before behaviors try and get it, or else it will be null and the builds will fail! - this.playerContext = PrimaryPlayerContext.INSTANCE; + this.playerContext = new BaritonePlayerContext(this); { // the Behavior constructor calls baritone.registerBehavior(this) so this populates the behaviors arraylist @@ -119,7 +121,7 @@ public class Baritone implements IBaritone { this.pathingControlManager.registerProcess(inventoryPauserProcess = new InventoryPauserProcess(this)); } - this.worldProvider = new WorldProvider(); + this.worldProvider = new WorldProvider(this); this.selectionManager = new SelectionManager(this); this.commandManager = new CommandManager(this); } @@ -219,11 +221,15 @@ public void openClick() { new Thread(() -> { try { Thread.sleep(100); - Helper.mc.addScheduledTask(() -> Helper.mc.displayGuiScreen(new GuiClick())); + mc.addScheduledTask(() -> mc.displayGuiScreen(new GuiClick())); } catch (Exception ignored) {} }).start(); } + public Minecraft getMinecraft() { + return this.mc; + } + public static Settings settings() { return BaritoneAPI.getSettings(); } diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index c49c02e10..b7c2403d2 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -23,10 +23,10 @@ import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; import baritone.cache.FasterWorldScanner; -import baritone.cache.WorldScanner; import baritone.command.CommandSystem; import baritone.command.ExampleBaritoneControl; import baritone.utils.schematic.SchematicSystem; +import net.minecraft.client.Minecraft; import java.util.Collections; import java.util.List; @@ -41,7 +41,7 @@ public final class BaritoneProvider implements IBaritoneProvider { private final List all; { - this.primary = new Baritone(); + this.primary = new Baritone(Minecraft.getMinecraft()); this.all = Collections.singletonList(this.primary); // Setup chat control, just for the primary instance diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 99e496e6f..2d237dfb8 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -164,19 +164,19 @@ private static float nudgeToLevel(float pitch) { return pitch; } - private static float calculateMouseMove(float current, float target) { + private float calculateMouseMove(float current, float target) { final float delta = target - current; final int deltaPx = angleToMouse(delta); return current + mouseToAngle(deltaPx); } - private static int angleToMouse(float angleDelta) { + private int angleToMouse(float angleDelta) { final float minAngleChange = mouseToAngle(1); return Math.round(angleDelta / minAngleChange); } - private static float mouseToAngle(int mouseDelta) { - final float f = Helper.mc.gameSettings.mouseSensitivity * 0.6f + 0.2f; + private float mouseToAngle(int mouseDelta) { + final float f = baritone.getMinecraft().gameSettings.mouseSensitivity * 0.6f + 0.2f; return mouseDelta * f * f * f * 8.0f * 0.15f; } diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 97b15a137..85d8a04bf 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -44,9 +44,14 @@ public class WorldProvider implements IWorldProvider, Helper { private static final Map worldCache = new HashMap<>(); // this is how the bots have the same cached world + private Baritone baritone; private WorldData currentWorld; private World mcWorld; // this let's us detect a broken load/unload hook + public WorldProvider(Baritone baritone) { + this.baritone = baritone; + } + @Override public final WorldData getCurrentWorld() { detectAndHandleBrokenLoading(); diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index d1c4689a2..b7f320e96 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -23,7 +23,6 @@ import baritone.api.utils.IInputOverrideHandler; import baritone.api.utils.input.Input; import baritone.behavior.Behavior; -import net.minecraft.client.Minecraft; import net.minecraft.util.MovementInputFromOptions; import java.util.HashMap; @@ -100,7 +99,7 @@ public final void onTick(TickEvent event) { } } else { if (ctx.player().movementInput.getClass() == PlayerMovementInput.class) { // allow other movement inputs that aren't this one, e.g. for a freecam - ctx.player().movementInput = new MovementInputFromOptions(Minecraft.getMinecraft().gameSettings); + ctx.player().movementInput = new MovementInputFromOptions(baritone.getMinecraft().gameSettings); } } // only set it if it was previously incorrect diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/BaritonePlayerContext.java similarity index 69% rename from src/main/java/baritone/utils/player/PrimaryPlayerContext.java rename to src/main/java/baritone/utils/player/BaritonePlayerContext.java index 02db73a5c..6af714942 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/BaritonePlayerContext.java @@ -17,10 +17,11 @@ package baritone.utils.player; -import baritone.api.BaritoneAPI; +import baritone.Baritone; import baritone.api.cache.IWorldData; import baritone.api.utils.*; import baritone.behavior.LookBehavior; +import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; @@ -31,33 +32,41 @@ * @author Brady * @since 11/12/2018 */ -public enum PrimaryPlayerContext implements IPlayerContext, Helper { +public final class BaritonePlayerContext implements IPlayerContext { - INSTANCE; + private final Baritone baritone; + private final Minecraft mc; + private final IPlayerController playerController; + + public BaritonePlayerContext(Baritone baritone) { + this.baritone = baritone; + this.mc = baritone.getMinecraft(); + this.playerController = new BaritonePlayerController(baritone); + } @Override public EntityPlayerSP player() { - return mc.player; + return this.mc.player; } @Override public IPlayerController playerController() { - return PrimaryPlayerController.INSTANCE; + return this.playerController; } @Override public World world() { - return mc.world; + return this.mc.world; } @Override public IWorldData worldData() { - return BaritoneAPI.getProvider().getPrimaryBaritone().getWorldProvider().getCurrentWorld(); + return this.baritone.getWorldProvider().getCurrentWorld(); } @Override public Rotation playerRotations() { - return ((LookBehavior) BaritoneAPI.getProvider().getPrimaryBaritone().getLookBehavior()).getEffectiveRotation() + return ((LookBehavior) this.baritone.getLookBehavior()).getEffectiveRotation() .orElseGet(IPlayerContext.super::playerRotations); } diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/BaritonePlayerController.java similarity index 91% rename from src/main/java/baritone/utils/player/PrimaryPlayerController.java rename to src/main/java/baritone/utils/player/BaritonePlayerController.java index b013f9161..95a55e026 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/BaritonePlayerController.java @@ -17,9 +17,10 @@ package baritone.utils.player; -import baritone.api.utils.Helper; +import baritone.Baritone; import baritone.api.utils.IPlayerController; import baritone.utils.accessor.IPlayerControllerMP; +import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.entity.player.EntityPlayer; @@ -39,9 +40,13 @@ * @author Brady * @since 12/14/2018 */ -public enum PrimaryPlayerController implements IPlayerController, Helper { +public final class BaritonePlayerController implements IPlayerController { - INSTANCE; + private final Minecraft mc; + + public BaritonePlayerController(Baritone baritone) { + this.mc = baritone.getMinecraft(); + } @Override public void syncHeldItem() { From b2bd025896fc50db7967b2593881b18211b23dbf Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 13 Jun 2023 19:32:55 -0600 Subject: [PATCH 569/935] 1.20.1 --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index c1b536a41..7f72c8782 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.20" + "minecraft": "1.20.1" } } diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index ba1609c97..f5159fec1 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.20]" +versionRange="[1.20.1]" ordering="NONE" side="BOTH" diff --git a/gradle.properties b/gradle.properties index b123b92e7..30fcc4885 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,6 +6,6 @@ mod_version=1.9.3 maven_group=baritone archives_base_name=baritone -minecraft_version=1.20 -forge_version=1.20-46.0.2 +minecraft_version=1.20.1 +forge_version=1.20.1-47.0.1 fabric_version=0.14.18 From 6979bd6971680691bd6e865fc788cb6b84c64823 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 13 Jun 2023 19:42:08 -0600 Subject: [PATCH 570/935] support both --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 7f72c8782..66f1ee1aa 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,6 +26,6 @@ "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.20.1" + "minecraft": ">=1.20 <=1.20.1" } } diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index f5159fec1..b29b3b1a0 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.20.1]" +versionRange="[1.20,1.20.1]" ordering="NONE" side="BOTH" From 2ae7bc6a64f0af98f0003e2e7ee0d04946d49028 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Tue, 13 Jun 2023 19:42:16 -0600 Subject: [PATCH 571/935] bump unimined to latest stable --- build.gradle | 3 +-- buildSrc/build.gradle | 2 +- buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 471bb608f..b139b8438 100755 --- a/build.gradle +++ b/build.gradle @@ -126,8 +126,7 @@ jar { } remapJar { - targetNamespace = "named" - fallbackTargetNamespace = "intermediary" + target = "mojmap" } javadoc { diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 14b7dc3bb..d0ba8faf5 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -36,5 +36,5 @@ dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' implementation group: 'commons-io', name: 'commons-io', version: '2.6' - implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.4' + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.4.10' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 5d80a65ea..52d1d93dc 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -81,7 +81,7 @@ protected void exec() throws Exception { MinecraftProvider provider = this.getProject().getExtensions().getByType(MinecraftProvider.class); private File getMcJar() { - return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdFallbackNamespace()).toFile(); + return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdNamespace()).toFile(); } private boolean isMcJar(File f) { From ab3d9e9c47d04584150c8585367458dbc8558c97 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 13 Jun 2023 21:13:34 -0500 Subject: [PATCH 572/935] I LOVE `final` --- src/main/java/baritone/Baritone.java | 54 +++++++++---------- src/main/java/baritone/behavior/Behavior.java | 1 - .../baritone/behavior/PathingBehavior.java | 8 +-- .../java/baritone/cache/WorldProvider.java | 2 +- .../java/baritone/utils/BlockBreakHelper.java | 3 +- .../java/baritone/utils/BlockPlaceHelper.java | 3 +- .../utils/player/BaritonePlayerContext.java | 4 +- 7 files changed, 36 insertions(+), 39 deletions(-) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 173cef876..4a873c226 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -49,8 +49,8 @@ */ public class Baritone implements IBaritone { - private static ThreadPoolExecutor threadPool; - private static File dir; + private static final ThreadPoolExecutor threadPool; + private static final File dir; static { threadPool = new ThreadPoolExecutor(4, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<>()); @@ -65,30 +65,30 @@ public class Baritone implements IBaritone { private final Minecraft mc; - private GameEventHandler gameEventHandler; + private final GameEventHandler gameEventHandler; - private PathingBehavior pathingBehavior; - private LookBehavior lookBehavior; - private InventoryBehavior inventoryBehavior; - private WaypointBehavior waypointBehavior; - private InputOverrideHandler inputOverrideHandler; + private final PathingBehavior pathingBehavior; + private final LookBehavior lookBehavior; + private final InventoryBehavior inventoryBehavior; + private final WaypointBehavior waypointBehavior; + private final InputOverrideHandler inputOverrideHandler; - private FollowProcess followProcess; - private MineProcess mineProcess; - private GetToBlockProcess getToBlockProcess; - private CustomGoalProcess customGoalProcess; - private BuilderProcess builderProcess; - private ExploreProcess exploreProcess; - private BackfillProcess backfillProcess; - private FarmProcess farmProcess; - private InventoryPauserProcess inventoryPauserProcess; + private final FollowProcess followProcess; + private final MineProcess mineProcess; + private final GetToBlockProcess getToBlockProcess; + private final CustomGoalProcess customGoalProcess; + private final BuilderProcess builderProcess; + private final ExploreProcess exploreProcess; + private final BackfillProcess backfillProcess; + private final FarmProcess farmProcess; + private final InventoryPauserProcess inventoryPauserProcess; - private PathingControlManager pathingControlManager; - private SelectionManager selectionManager; - private CommandManager commandManager; + private final PathingControlManager pathingControlManager; + private final SelectionManager selectionManager; + private final CommandManager commandManager; - private IPlayerContext playerContext; - private WorldProvider worldProvider; + private final IPlayerContext playerContext; + private final WorldProvider worldProvider; public BlockStateInterface bsi; @@ -101,11 +101,11 @@ public class Baritone implements IBaritone { { // the Behavior constructor calls baritone.registerBehavior(this) so this populates the behaviors arraylist - pathingBehavior = new PathingBehavior(this); - lookBehavior = new LookBehavior(this); - inventoryBehavior = new InventoryBehavior(this); - inputOverrideHandler = new InputOverrideHandler(this); - waypointBehavior = new WaypointBehavior(this); + this.registerBehavior(pathingBehavior = new PathingBehavior(this)); + this.registerBehavior(lookBehavior = new LookBehavior(this)); + this.registerBehavior(inventoryBehavior = new InventoryBehavior(this)); + this.registerBehavior(inputOverrideHandler = new InputOverrideHandler(this)); + this.registerBehavior(waypointBehavior = new WaypointBehavior(this)); } this.pathingControlManager = new PathingControlManager(this); diff --git a/src/main/java/baritone/behavior/Behavior.java b/src/main/java/baritone/behavior/Behavior.java index 36273c026..848beb298 100644 --- a/src/main/java/baritone/behavior/Behavior.java +++ b/src/main/java/baritone/behavior/Behavior.java @@ -35,6 +35,5 @@ public class Behavior implements IBehavior { protected Behavior(Baritone baritone) { this.baritone = baritone; this.ctx = baritone.getPlayerContext(); - baritone.registerBehavior(this); } } diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 33ef14ef2..23f2b1431 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -36,6 +36,7 @@ import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.pathing.Favoring; +import net.minecraft.client.settings.GameSettings; import net.minecraft.util.math.BlockPos; import java.util.ArrayList; @@ -237,13 +238,14 @@ private void tickPath() { @Override public void onPlayerUpdate(PlayerUpdateEvent event) { if (current != null) { + final GameSettings settings = baritone.getMinecraft().gameSettings; switch (event.getState()) { case PRE: - lastAutoJump = mc.gameSettings.autoJump; - mc.gameSettings.autoJump = false; + lastAutoJump = settings.autoJump; + settings.autoJump = false; break; case POST: - mc.gameSettings.autoJump = lastAutoJump; + settings.autoJump = lastAutoJump; break; default: break; diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 85d8a04bf..d0458ea60 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -44,7 +44,7 @@ public class WorldProvider implements IWorldProvider, Helper { private static final Map worldCache = new HashMap<>(); // this is how the bots have the same cached world - private Baritone baritone; + private final Baritone baritone; private WorldData currentWorld; private World mcWorld; // this let's us detect a broken load/unload hook diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index 26e82cd78..c4ed11f0c 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -17,7 +17,6 @@ package baritone.utils; -import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; import net.minecraft.util.EnumHand; import net.minecraft.util.math.RayTraceResult; @@ -26,7 +25,7 @@ * @author Brady * @since 8/25/2018 */ -public final class BlockBreakHelper implements Helper { +public final class BlockBreakHelper { private final IPlayerContext ctx; private boolean didBreakLastTick; diff --git a/src/main/java/baritone/utils/BlockPlaceHelper.java b/src/main/java/baritone/utils/BlockPlaceHelper.java index 440bfb93d..69dea61b8 100644 --- a/src/main/java/baritone/utils/BlockPlaceHelper.java +++ b/src/main/java/baritone/utils/BlockPlaceHelper.java @@ -18,13 +18,12 @@ package baritone.utils; import baritone.Baritone; -import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.math.RayTraceResult; -public class BlockPlaceHelper implements Helper { +public class BlockPlaceHelper { private final IPlayerContext ctx; private int rightClickTimer; diff --git a/src/main/java/baritone/utils/player/BaritonePlayerContext.java b/src/main/java/baritone/utils/player/BaritonePlayerContext.java index 6af714942..0bb118a1d 100644 --- a/src/main/java/baritone/utils/player/BaritonePlayerContext.java +++ b/src/main/java/baritone/utils/player/BaritonePlayerContext.java @@ -20,7 +20,6 @@ import baritone.Baritone; import baritone.api.cache.IWorldData; import baritone.api.utils.*; -import baritone.behavior.LookBehavior; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.util.math.RayTraceResult; @@ -66,8 +65,7 @@ public IWorldData worldData() { @Override public Rotation playerRotations() { - return ((LookBehavior) this.baritone.getLookBehavior()).getEffectiveRotation() - .orElseGet(IPlayerContext.super::playerRotations); + return this.baritone.getLookBehavior().getEffectiveRotation().orElseGet(IPlayerContext.super::playerRotations); } @Override From 382f82b0e0ec38d419fb58245d6ae143a34887f2 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 13 Jun 2023 21:17:42 -0500 Subject: [PATCH 573/935] Move `Minecraft` to `IPlayerContext` --- src/api/java/baritone/api/utils/IPlayerContext.java | 3 +++ src/main/java/baritone/Baritone.java | 6 +----- src/main/java/baritone/behavior/LookBehavior.java | 2 +- src/main/java/baritone/behavior/PathingBehavior.java | 7 +++---- .../java/baritone/utils/InputOverrideHandler.java | 2 +- .../baritone/utils/player/BaritonePlayerContext.java | 11 ++++++++--- .../utils/player/BaritonePlayerController.java | 4 ++-- 7 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index fcc4c81cc..525f73ddc 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -19,6 +19,7 @@ import baritone.api.cache.IWorldData; import net.minecraft.block.BlockSlab; +import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; @@ -33,6 +34,8 @@ */ public interface IPlayerContext { + Minecraft minecraft(); + EntityPlayerSP player(); IPlayerController playerController(); diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 4a873c226..488850f82 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -97,7 +97,7 @@ public class Baritone implements IBaritone { this.gameEventHandler = new GameEventHandler(this); // Define this before behaviors try and get it, or else it will be null and the builds will fail! - this.playerContext = new BaritonePlayerContext(this); + this.playerContext = new BaritonePlayerContext(this, mc); { // the Behavior constructor calls baritone.registerBehavior(this) so this populates the behaviors arraylist @@ -226,10 +226,6 @@ public void openClick() { }).start(); } - public Minecraft getMinecraft() { - return this.mc; - } - public static Settings settings() { return BaritoneAPI.getSettings(); } diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 2d237dfb8..67aa45e39 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -176,7 +176,7 @@ private int angleToMouse(float angleDelta) { } private float mouseToAngle(int mouseDelta) { - final float f = baritone.getMinecraft().gameSettings.mouseSensitivity * 0.6f + 0.2f; + final float f = ctx.minecraft().gameSettings.mouseSensitivity * 0.6f + 0.2f; return mouseDelta * f * f * f * 8.0f * 0.15f; } diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 23f2b1431..f5433fe8d 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -238,14 +238,13 @@ private void tickPath() { @Override public void onPlayerUpdate(PlayerUpdateEvent event) { if (current != null) { - final GameSettings settings = baritone.getMinecraft().gameSettings; switch (event.getState()) { case PRE: - lastAutoJump = settings.autoJump; - settings.autoJump = false; + lastAutoJump = ctx.minecraft().gameSettings.autoJump; + ctx.minecraft().gameSettings.autoJump = false; break; case POST: - settings.autoJump = lastAutoJump; + ctx.minecraft().gameSettings.autoJump = lastAutoJump; break; default: break; diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index b7f320e96..f110b9ce1 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -99,7 +99,7 @@ public final void onTick(TickEvent event) { } } else { if (ctx.player().movementInput.getClass() == PlayerMovementInput.class) { // allow other movement inputs that aren't this one, e.g. for a freecam - ctx.player().movementInput = new MovementInputFromOptions(baritone.getMinecraft().gameSettings); + ctx.player().movementInput = new MovementInputFromOptions(ctx.minecraft().gameSettings); } } // only set it if it was previously incorrect diff --git a/src/main/java/baritone/utils/player/BaritonePlayerContext.java b/src/main/java/baritone/utils/player/BaritonePlayerContext.java index 0bb118a1d..601d2bb72 100644 --- a/src/main/java/baritone/utils/player/BaritonePlayerContext.java +++ b/src/main/java/baritone/utils/player/BaritonePlayerContext.java @@ -37,10 +37,15 @@ public final class BaritonePlayerContext implements IPlayerContext { private final Minecraft mc; private final IPlayerController playerController; - public BaritonePlayerContext(Baritone baritone) { + public BaritonePlayerContext(Baritone baritone, Minecraft mc) { this.baritone = baritone; - this.mc = baritone.getMinecraft(); - this.playerController = new BaritonePlayerController(baritone); + this.mc = mc; + this.playerController = new BaritonePlayerController(mc); + } + + @Override + public Minecraft minecraft() { + return this.mc; } @Override diff --git a/src/main/java/baritone/utils/player/BaritonePlayerController.java b/src/main/java/baritone/utils/player/BaritonePlayerController.java index 95a55e026..b0e94e8c5 100644 --- a/src/main/java/baritone/utils/player/BaritonePlayerController.java +++ b/src/main/java/baritone/utils/player/BaritonePlayerController.java @@ -44,8 +44,8 @@ public final class BaritonePlayerController implements IPlayerController { private final Minecraft mc; - public BaritonePlayerController(Baritone baritone) { - this.mc = baritone.getMinecraft(); + public BaritonePlayerController(Minecraft mc) { + this.mc = mc; } @Override From c7f4e366e21d5e79d050cd28eeed57b8f6809691 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 13 Jun 2023 23:07:26 -0500 Subject: [PATCH 574/935] Remove `mc` references from `WorldProvider` Also refactored a bit, should be a lot easier to merge upwards to new game versions --- .../baritone/api/cache/IWorldProvider.java | 9 + src/main/java/baritone/Baritone.java | 26 +-- .../java/baritone/cache/WorldProvider.java | 172 ++++++++++-------- .../java/baritone/event/GameEventHandler.java | 2 +- .../player/BaritonePlayerController.java | 1 - 5 files changed, 122 insertions(+), 88 deletions(-) diff --git a/src/api/java/baritone/api/cache/IWorldProvider.java b/src/api/java/baritone/api/cache/IWorldProvider.java index 0e54ef469..b9ca149c7 100644 --- a/src/api/java/baritone/api/cache/IWorldProvider.java +++ b/src/api/java/baritone/api/cache/IWorldProvider.java @@ -17,6 +17,8 @@ package baritone.api.cache; +import java.util.function.Consumer; + /** * @author Brady * @since 9/24/2018 @@ -29,4 +31,11 @@ public interface IWorldProvider { * @return The current world data */ IWorldData getCurrentWorld(); + + default void ifWorldLoaded(Consumer callback) { + final IWorldData currentWorld = this.getCurrentWorld(); + if (currentWorld != null) { + callback.accept(currentWorld); + } + } } diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 488850f82..7cfa15009 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -35,9 +35,9 @@ import baritone.utils.player.BaritonePlayerContext; import net.minecraft.client.Minecraft; -import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; import java.util.concurrent.Executor; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; @@ -50,20 +50,13 @@ public class Baritone implements IBaritone { private static final ThreadPoolExecutor threadPool; - private static final File dir; static { threadPool = new ThreadPoolExecutor(4, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<>()); - - dir = new File(Minecraft.getMinecraft().gameDir, "baritone"); - if (!Files.exists(dir.toPath())) { - try { - Files.createDirectories(dir.toPath()); - } catch (IOException ignored) {} - } } private final Minecraft mc; + private final Path directory; private final GameEventHandler gameEventHandler; @@ -96,6 +89,13 @@ public class Baritone implements IBaritone { this.mc = mc; this.gameEventHandler = new GameEventHandler(this); + this.directory = mc.gameDir.toPath().resolve("baritone"); + if (!Files.exists(this.directory)) { + try { + Files.createDirectories(this.directory); + } catch (IOException ignored) {} + } + // Define this before behaviors try and get it, or else it will be null and the builds will fail! this.playerContext = new BaritonePlayerContext(this, mc); @@ -226,12 +226,12 @@ public void openClick() { }).start(); } - public static Settings settings() { - return BaritoneAPI.getSettings(); + public Path getDirectory() { + return this.directory; } - public static File getDir() { - return dir; + public static Settings settings() { + return BaritoneAPI.getSettings(); } public static Executor getExecutor() { diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index d0458ea60..59f671c99 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -19,108 +19,85 @@ import baritone.Baritone; import baritone.api.cache.IWorldProvider; -import baritone.api.utils.Helper; +import baritone.api.utils.IPlayerContext; import baritone.utils.accessor.IAnvilChunkLoader; import baritone.utils.accessor.IChunkProviderServer; -import net.minecraft.server.integrated.IntegratedServer; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.util.Tuple; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import org.apache.commons.lang3.SystemUtils; -import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; -import java.util.function.Consumer; +import java.util.Optional; /** * @author Brady * @since 8/4/2018 */ -public class WorldProvider implements IWorldProvider, Helper { +public class WorldProvider implements IWorldProvider { - private static final Map worldCache = new HashMap<>(); // this is how the bots have the same cached world + private static final Map worldCache = new HashMap<>(); private final Baritone baritone; + private final IPlayerContext ctx; private WorldData currentWorld; - private World mcWorld; // this let's us detect a broken load/unload hook + + /** + * This lets us detect a broken load/unload hook. + * @see #detectAndHandleBrokenLoading() + */ + private World mcWorld; public WorldProvider(Baritone baritone) { this.baritone = baritone; + this.ctx = baritone.getPlayerContext(); } @Override public final WorldData getCurrentWorld() { - detectAndHandleBrokenLoading(); + this.detectAndHandleBrokenLoading(); return this.currentWorld; } /** * Called when a new world is initialized to discover the * - * @param dimension The ID of the world's dimension + * @param world The new world */ - public final void initWorld(int dimension) { - File directory; - File readme; - - IntegratedServer integratedServer = mc.getIntegratedServer(); - - // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file - if (mc.isSingleplayer()) { - WorldServer localServerWorld = integratedServer.getWorld(dimension); - IChunkProviderServer provider = (IChunkProviderServer) localServerWorld.getChunkProvider(); - IAnvilChunkLoader loader = (IAnvilChunkLoader) provider.getChunkLoader(); - directory = loader.getChunkSaveLocation(); - - // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world - if (directory.toPath().relativize(mc.gameDir.toPath()).getNameCount() != 2) { - // subdirectory of the main save directory for this world - directory = directory.getParentFile(); - } - - directory = new File(directory, "baritone"); - readme = directory; - } else { // Otherwise, the server must be remote... - String folderName; - if (mc.getCurrentServerData() != null) { - folderName = mc.getCurrentServerData().serverIP; - } else { - //replaymod causes null currentServerData and false singleplayer. - System.out.println("World seems to be a replay. Not loading Baritone cache."); - currentWorld = null; - mcWorld = mc.world; - return; - } - if (SystemUtils.IS_OS_WINDOWS) { - folderName = folderName.replace(":", "_"); - } - directory = new File(Baritone.getDir(), folderName); - readme = Baritone.getDir(); - } + public final void initWorld(World world) { + this.getSaveDirectories(world).ifPresent(dirs -> { + final Path worldDir = dirs.getFirst(); + final Path readmeDir = dirs.getSecond(); - // lol wtf is this baritone folder in my minecraft save? - try (FileOutputStream out = new FileOutputStream(new File(readme, "readme.txt"))) { - // good thing we have a readme - out.write("https://github.com/cabaletta/baritone\n".getBytes()); - } catch (IOException ignored) {} + try { + // lol wtf is this baritone folder in my minecraft save? + // good thing we have a readme + Files.createDirectories(readmeDir); + Files.write( + readmeDir.resolve("readme.txt"), + "https://github.com/cabaletta/baritone\n".getBytes(StandardCharsets.US_ASCII) + ); + } catch (IOException ignored) {} - // We will actually store the world data in a subfolder: "DIM" - Path dir = new File(directory, "DIM" + dimension).toPath(); - if (!Files.exists(dir)) { + // We will actually store the world data in a subfolder: "DIM" + final Path worldDataDir = this.getWorldDataDirectory(worldDir, world); try { - Files.createDirectories(dir); + Files.createDirectories(worldDataDir); } catch (IOException ignored) {} - } - System.out.println("Baritone world data dir: " + dir); - synchronized (worldCache) { - this.currentWorld = worldCache.computeIfAbsent(dir, d -> new WorldData(d, dimension)); - } - this.mcWorld = mc.world; + System.out.println("Baritone world data dir: " + worldDataDir); + synchronized (worldCache) { + final int dimension = world.provider.getDimensionType().getId(); + this.currentWorld = worldCache.computeIfAbsent(worldDataDir, d -> new WorldData(d, dimension)); + } + this.mcWorld = ctx.world(); + }); } public final void closeWorld() { @@ -133,26 +110,75 @@ public final void closeWorld() { world.onClose(); } - public final void ifWorldLoaded(Consumer currentWorldConsumer) { - detectAndHandleBrokenLoading(); - if (this.currentWorld != null) { - currentWorldConsumer.accept(this.currentWorld); + private Path getWorldDataDirectory(Path parent, World world) { + return parent.resolve("DIM" + world.provider.getDimensionType().getId()); + } + + /** + * @param world The world + * @return An {@link Optional} containing the world's baritone dir and readme dir, or {@link Optional#empty()} if + * the world isn't valid for caching. + */ + private Optional> getSaveDirectories(World world) { + Path worldDir; + Path readmeDir; + + // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file + if (ctx.minecraft().isSingleplayer()) { + final int dimension = world.provider.getDimensionType().getId(); + final WorldServer localServerWorld = ctx.minecraft().getIntegratedServer().getWorld(dimension); + final IChunkProviderServer provider = (IChunkProviderServer) localServerWorld.getChunkProvider(); + final IAnvilChunkLoader loader = (IAnvilChunkLoader) provider.getChunkLoader(); + worldDir = loader.getChunkSaveLocation().toPath(); + + // Gets the "depth" of this directory relative to the game's run directory, 2 is the location of the world + if (worldDir.relativize(ctx.minecraft().gameDir.toPath()).getNameCount() != 2) { + // subdirectory of the main save directory for this world + worldDir = worldDir.getParent(); + } + + worldDir = worldDir.resolve("baritone"); + readmeDir = worldDir; + } else { // Otherwise, the server must be remote... + String folderName; + final ServerData serverData = ctx.minecraft().getCurrentServerData(); + if (serverData != null) { + folderName = serverData.serverIP; + } else { + //replaymod causes null currentServerData and false singleplayer. + System.out.println("World seems to be a replay. Not loading Baritone cache."); + currentWorld = null; + mcWorld = ctx.world(); + return Optional.empty(); + } + if (SystemUtils.IS_OS_WINDOWS) { + folderName = folderName.replace(":", "_"); + } + // TODO: This should probably be in "baritone/servers" + worldDir = baritone.getDirectory().resolve(folderName); + // Just write the readme to the baritone directory instead of each server save in it + readmeDir = baritone.getDirectory(); } + + return Optional.of(new Tuple<>(worldDir, readmeDir)); } - private final void detectAndHandleBrokenLoading() { - if (this.mcWorld != mc.world) { + /** + * Why does this exist instead of fixing the event? Some mods break the event. Lol. + */ + private void detectAndHandleBrokenLoading() { + if (this.mcWorld != ctx.world()) { if (this.currentWorld != null) { System.out.println("mc.world unloaded unnoticed! Unloading Baritone cache now."); closeWorld(); } - if (mc.world != null) { + if (ctx.world() != null) { System.out.println("mc.world loaded unnoticed! Loading Baritone cache now."); - initWorld(mc.world.provider.getDimensionType().getId()); + initWorld(ctx.world()); } - } else if (currentWorld == null && mc.world != null && (mc.isSingleplayer() || mc.getCurrentServerData() != null)) { + } else if (this.currentWorld == null && ctx.world() != null && (ctx.minecraft().isSingleplayer() || ctx.minecraft().getCurrentServerData() != null)) { System.out.println("Retrying to load Baritone cache"); - initWorld(mc.world.provider.getDimensionType().getId()); + initWorld(ctx.world()); } } } diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 8916f7f37..0b46eb5e1 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -114,7 +114,7 @@ public final void onWorldEvent(WorldEvent event) { if (event.getState() == EventState.POST) { cache.closeWorld(); if (event.getWorld() != null) { - cache.initWorld(event.getWorld().provider.getDimensionType().getId()); + cache.initWorld(event.getWorld()); } } diff --git a/src/main/java/baritone/utils/player/BaritonePlayerController.java b/src/main/java/baritone/utils/player/BaritonePlayerController.java index b0e94e8c5..694ffab6c 100644 --- a/src/main/java/baritone/utils/player/BaritonePlayerController.java +++ b/src/main/java/baritone/utils/player/BaritonePlayerController.java @@ -17,7 +17,6 @@ package baritone.utils.player; -import baritone.Baritone; import baritone.api.utils.IPlayerController; import baritone.utils.accessor.IPlayerControllerMP; import net.minecraft.client.Minecraft; From dd7b492b0cf81bc102dee39bc7d7d70eaf44826d Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 13 Jun 2023 23:21:20 -0500 Subject: [PATCH 575/935] registerBehavior is called explicitly now --- src/main/java/baritone/Baritone.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 7cfa15009..637af2e3b 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -100,7 +100,6 @@ public class Baritone implements IBaritone { this.playerContext = new BaritonePlayerContext(this, mc); { - // the Behavior constructor calls baritone.registerBehavior(this) so this populates the behaviors arraylist this.registerBehavior(pathingBehavior = new PathingBehavior(this)); this.registerBehavior(lookBehavior = new LookBehavior(this)); this.registerBehavior(inventoryBehavior = new InventoryBehavior(this)); From 7487b90d501ba5b93bbacdf5e69fc239299c76f2 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 13 Jun 2023 21:21:45 -0700 Subject: [PATCH 576/935] v1.10.1 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 30fcc4885..f665e9537 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G available_loaders=fabric,forge,tweaker -mod_version=1.9.3 +mod_version=1.10.1 maven_group=baritone archives_base_name=baritone From 88e604426c64951d5f2a1a6818a16aab45b55651 Mon Sep 17 00:00:00 2001 From: leijurv Date: Tue, 13 Jun 2023 21:30:31 -0700 Subject: [PATCH 577/935] 1.20.1 --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ae8090d7..c135ebdf8 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,9 @@ Minecraft Minecraft Minecraft - Minecraft + Minecraft + Minecraft + Minecraft

@@ -64,6 +66,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | [1.19.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.4/baritone-api-forge-1.9.4.jar) | [1.19.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.4/baritone-api-fabric-1.9.4.jar) | | [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) | | [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | +| [1.20.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-forge-1.10.1.jar) | [1.20.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-fabric-1.10.1.jar) | **How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) From 5e724c1e3af7e67466664548694fa2bfaac5145a Mon Sep 17 00:00:00 2001 From: leijurv Date: Tue, 13 Jun 2023 21:31:10 -0700 Subject: [PATCH 578/935] making these clickable was a mistake --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index c135ebdf8..5fefcdf47 100644 --- a/README.md +++ b/README.md @@ -4,16 +4,16 @@

- Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft

From 6a80b0d4ffea38131462557e67f56c0d2ca42701 Mon Sep 17 00:00:00 2001 From: leijurv Date: Tue, 13 Jun 2023 21:31:49 -0700 Subject: [PATCH 579/935] forgot github markdown is stupid --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 5fefcdf47..11fed3581 100644 --- a/README.md +++ b/README.md @@ -4,16 +4,16 @@

- Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft

From 54f0a3c14c63cc58f1188daaa329d660c898b6c9 Mon Sep 17 00:00:00 2001 From: leijurv Date: Tue, 13 Jun 2023 21:32:21 -0700 Subject: [PATCH 580/935] marginally better --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 11fed3581..c6a90ff93 100644 --- a/README.md +++ b/README.md @@ -4,16 +4,16 @@

- Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft

From b03d31e99013be1283f7701c1ced02afcd012105 Mon Sep 17 00:00:00 2001 From: leijurv Date: Tue, 13 Jun 2023 21:32:57 -0700 Subject: [PATCH 581/935] will github let me do this --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c6a90ff93..bbb386a74 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s [**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) **Quick download links:** - +

| Forge | Fabric | |---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| | [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar) | | @@ -67,7 +67,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) | | [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | | [1.20.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-forge-1.10.1.jar) | [1.20.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-fabric-1.10.1.jar) | - +

**How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#6313 on Baritone which I recommend. From 3662b3fdf18e4acba7cf9022f1143367f4737887 Mon Sep 17 00:00:00 2001 From: leijurv Date: Tue, 13 Jun 2023 21:33:12 -0700 Subject: [PATCH 582/935] nope --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bbb386a74..c6a90ff93 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s [**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) **Quick download links:** -

+ | Forge | Fabric | |---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| | [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar) | | @@ -67,7 +67,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) | | [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | | [1.20.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-forge-1.10.1.jar) | [1.20.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-fabric-1.10.1.jar) | -

+ **How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#6313 on Baritone which I recommend. From 75d47bb1104be9ca2a8045ec52068e926bb613a7 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 01:53:29 -0500 Subject: [PATCH 583/935] Fix all usages of `Helper.mc` --- .../api/command/datatypes/RelativeFile.java | 9 ++- .../baritone/api/utils/IPlayerContext.java | 2 + src/main/java/baritone/Baritone.java | 27 ++++++--- src/main/java/baritone/BaritoneProvider.java | 2 +- .../command/ExampleBaritoneControl.java | 11 ++-- .../command/defaults/ComeCommand.java | 9 +-- .../defaults/ExploreFilterCommand.java | 4 +- .../command/defaults/RenderCommand.java | 4 +- .../baritone/command/defaults/SelCommand.java | 6 +- .../command/defaults/SurfaceCommand.java | 2 +- src/main/java/baritone/utils/IRenderer.java | 6 +- .../java/baritone/utils/PathRenderer.java | 59 +++++++++++-------- .../utils/player/BaritonePlayerContext.java | 9 +++ 13 files changed, 91 insertions(+), 59 deletions(-) diff --git a/src/api/java/baritone/api/command/datatypes/RelativeFile.java b/src/api/java/baritone/api/command/datatypes/RelativeFile.java index 0bc3604ab..ec605c048 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeFile.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeFile.java @@ -19,6 +19,8 @@ import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; +import baritone.api.utils.Helper; +import net.minecraft.client.Minecraft; import java.io.File; import java.io.IOException; @@ -93,8 +95,13 @@ public static Stream tabComplete(IArgConsumer consumer, File base0) thro .filter(s -> !s.contains(" ")); } + @Deprecated public static File gameDir() { - File gameDir = HELPER.mc.gameDir.getAbsoluteFile(); + return gameDir(Helper.mc); + } + + public static File gameDir(Minecraft mc) { + File gameDir = mc.gameDir.getAbsoluteFile(); if (gameDir.getName().equals(".")) { return gameDir.getParentFile(); } diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 525f73ddc..14ca69fb9 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -75,6 +75,8 @@ default Vec3d playerHead() { return new Vec3d(player().posX, player().posY + player().getEyeHeight(), player().posZ); } + BetterBlockPos viewerPos(); + default Rotation playerRotations() { return new Rotation(player().rotationYaw, player().rotationPitch); } diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 637af2e3b..e85b57ce4 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -42,6 +42,7 @@ import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.function.Function; /** * @author Brady @@ -100,11 +101,11 @@ public class Baritone implements IBaritone { this.playerContext = new BaritonePlayerContext(this, mc); { - this.registerBehavior(pathingBehavior = new PathingBehavior(this)); - this.registerBehavior(lookBehavior = new LookBehavior(this)); - this.registerBehavior(inventoryBehavior = new InventoryBehavior(this)); - this.registerBehavior(inputOverrideHandler = new InputOverrideHandler(this)); - this.registerBehavior(waypointBehavior = new WaypointBehavior(this)); + pathingBehavior = this.registerBehavior(PathingBehavior::new); + lookBehavior = this.registerBehavior(LookBehavior::new); + inventoryBehavior = this.registerBehavior(InventoryBehavior::new); + inputOverrideHandler = this.registerBehavior(InputOverrideHandler::new); + waypointBehavior = this.registerBehavior(WaypointBehavior::new); } this.pathingControlManager = new PathingControlManager(this); @@ -125,15 +126,21 @@ public class Baritone implements IBaritone { this.commandManager = new CommandManager(this); } + public void registerBehavior(Behavior behavior) { + this.gameEventHandler.registerEventListener(behavior); + } + + public T registerBehavior(Function constructor) { + final T behavior = constructor.apply(this); + this.registerBehavior(behavior); + return behavior; + } + @Override public PathingControlManager getPathingControlManager() { return this.pathingControlManager; } - public void registerBehavior(Behavior behavior) { - this.gameEventHandler.registerEventListener(behavior); - } - @Override public InputOverrideHandler getInputOverrideHandler() { return this.inputOverrideHandler; @@ -173,6 +180,7 @@ public LookBehavior getLookBehavior() { return this.lookBehavior; } + @Override public ExploreProcess getExploreProcess() { return this.exploreProcess; } @@ -182,6 +190,7 @@ public MineProcess getMineProcess() { return this.mineProcess; } + @Override public FarmProcess getFarmProcess() { return this.farmProcess; } diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index b7c2403d2..a0621af93 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -45,7 +45,7 @@ public final class BaritoneProvider implements IBaritoneProvider { this.all = Collections.singletonList(this.primary); // Setup chat control, just for the primary instance - new ExampleBaritoneControl(this.primary); + this.primary.registerBehavior(ExampleBaritoneControl::new); } @Override diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index 28ced07f4..1a7b69644 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -17,8 +17,8 @@ package baritone.command; +import baritone.Baritone; import baritone.api.BaritoneAPI; -import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.command.argument.ICommandArgument; import baritone.api.command.exception.CommandNotEnoughArgumentsException; @@ -30,6 +30,7 @@ import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.utils.Helper; import baritone.api.utils.SettingsUtil; +import baritone.behavior.Behavior; import baritone.command.argument.ArgConsumer; import baritone.command.argument.CommandArguments; import baritone.command.manager.CommandManager; @@ -49,14 +50,14 @@ import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; -public class ExampleBaritoneControl implements Helper, AbstractGameEventListener { +public class ExampleBaritoneControl extends Behavior implements Helper { private static final Settings settings = BaritoneAPI.getSettings(); private final ICommandManager manager; - public ExampleBaritoneControl(IBaritone baritone) { + public ExampleBaritoneControl(Baritone baritone) { + super(baritone); this.manager = baritone.getCommandManager(); - baritone.getGameEventHandler().registerEventListener(this); } @Override @@ -100,7 +101,7 @@ public boolean runCommand(String msg) { return false; } else if (msg.trim().equalsIgnoreCase("orderpizza")) { try { - ((IGuiScreen) mc.currentScreen).openLink(new URI("https://www.dominos.com/en/pages/order/")); + ((IGuiScreen) ctx.minecraft().currentScreen).openLink(new URI("https://www.dominos.com/en/pages/order/")); } catch (NullPointerException | URISyntaxException ignored) {} return false; } diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index 5d3e3b829..b111ee1de 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -21,10 +21,7 @@ import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; -import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.pathing.goals.GoalBlock; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; import java.util.Arrays; import java.util.List; @@ -39,11 +36,7 @@ public ComeCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); - Entity entity = mc.getRenderViewEntity(); - if (entity == null) { - throw new CommandInvalidStateException("render view entity is null"); - } - baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(new BlockPos(entity))); + baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(ctx.viewerPos())); logDirect("Coming"); } diff --git a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java index c2057551f..6f306a966 100644 --- a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java @@ -41,7 +41,7 @@ public ExploreFilterCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(2); - File file = args.getDatatypePost(RelativeFile.INSTANCE, mc.gameDir.getAbsoluteFile().getParentFile()); + File file = args.getDatatypePost(RelativeFile.INSTANCE, ctx.minecraft().gameDir.getAbsoluteFile().getParentFile()); boolean invert = false; if (args.hasAny()) { if (args.getString().equalsIgnoreCase("invert")) { @@ -65,7 +65,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { @Override public Stream tabComplete(String label, IArgConsumer args) throws CommandException { if (args.hasExactlyOne()) { - return RelativeFile.tabComplete(args, RelativeFile.gameDir()); + return RelativeFile.tabComplete(args, RelativeFile.gameDir(ctx.minecraft())); } return Stream.empty(); } diff --git a/src/main/java/baritone/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java index cc9803d16..ab4a9dbcd 100644 --- a/src/main/java/baritone/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -37,8 +37,8 @@ public RenderCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); BetterBlockPos origin = ctx.playerFeet(); - int renderDistance = (mc.gameSettings.renderDistanceChunks + 1) * 16; - mc.renderGlobal.markBlockRangeForRenderUpdate( + int renderDistance = (ctx.minecraft().gameSettings.renderDistanceChunks + 1) * 16; + ctx.minecraft().renderGlobal.markBlockRangeForRenderUpdate( origin.x - renderDistance, 0, origin.z - renderDistance, diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 9abe417ac..78035aa4e 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -92,7 +92,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == Action.POS2 && pos1 == null) { throw new CommandInvalidStateException("Set pos1 first before using pos2"); } - BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(new BlockPos(mc.getRenderViewEntity())) : ctx.playerFeet(); + BetterBlockPos playerPos = ctx.viewerPos(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); if (action == Action.POS1) { @@ -198,7 +198,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { baritone.getBuilderProcess().build("Fill", composite, origin); logDirect("Filling now"); } else if (action == Action.COPY) { - BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(new BlockPos(mc.getRenderViewEntity())) : ctx.playerFeet(); + BetterBlockPos playerPos = ctx.viewerPos(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); ISelection[] selections = manager.getSelections(); @@ -239,7 +239,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { clipboardOffset = origin.subtract(pos); logDirect("Selection copied"); } else if (action == Action.PASTE) { - BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(new BlockPos(mc.getRenderViewEntity())) : ctx.playerFeet(); + BetterBlockPos playerPos = ctx.viewerPos(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); if (clipboard == null) { diff --git a/src/main/java/baritone/command/defaults/SurfaceCommand.java b/src/main/java/baritone/command/defaults/SurfaceCommand.java index 5d914aded..9ab22bdc2 100644 --- a/src/main/java/baritone/command/defaults/SurfaceCommand.java +++ b/src/main/java/baritone/command/defaults/SurfaceCommand.java @@ -54,7 +54,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { for (int currentIteratedY = startingYPos; currentIteratedY < worldHeight; currentIteratedY++) { final BetterBlockPos newPos = new BetterBlockPos(playerPos.getX(), currentIteratedY, playerPos.getZ()); - if (!(mc.world.getBlockState(newPos).getBlock() instanceof BlockAir) && newPos.getY() > playerPos.getY()) { + if (!(ctx.world().getBlockState(newPos).getBlock() instanceof BlockAir) && newPos.getY() > playerPos.getY()) { Goal goal = new GoalBlock(newPos.up()); logDirect(String.format("Going to: %s", goal.toString())); baritone.getCustomGoalProcess().setGoalAndPath(goal); diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 26a7cf1ad..2134bcb99 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -19,11 +19,12 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; -import baritone.api.utils.Helper; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.math.AxisAlignedBB; @@ -35,7 +36,8 @@ public interface IRenderer { Tessellator tessellator = Tessellator.getInstance(); BufferBuilder buffer = tessellator.getBuffer(); - RenderManager renderManager = Helper.mc.getRenderManager(); + RenderManager renderManager = Minecraft.getMinecraft().getRenderManager(); + TextureManager textureManager = Minecraft.getMinecraft().getTextureManager(); Settings settings = BaritoneAPI.getSettings(); float[] color = new float[] {1.0F, 1.0F, 1.0F, 255.0F}; diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index deec261d4..65bf6269c 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -22,7 +22,7 @@ import baritone.api.pathing.calc.IPath; import baritone.api.pathing.goals.*; import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.Helper; +import baritone.api.utils.IPlayerContext; import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; @@ -52,31 +52,40 @@ public final class PathRenderer implements IRenderer { private PathRenderer() {} public static void render(RenderEvent event, PathingBehavior behavior) { - float partialTicks = event.getPartialTicks(); - Goal goal = behavior.getGoal(); - if (Helper.mc.currentScreen instanceof GuiClick) { - ((GuiClick) Helper.mc.currentScreen).onRender(); + final IPlayerContext ctx = behavior.ctx; + if (ctx.world() == null) { + return; + } + if (ctx.minecraft().currentScreen instanceof GuiClick) { + ((GuiClick) ctx.minecraft().currentScreen).onRender(); } - int thisPlayerDimension = behavior.baritone.getPlayerContext().world().provider.getDimensionType().getId(); - int currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().provider.getDimensionType().getId(); + final float partialTicks = event.getPartialTicks(); + final Goal goal = behavior.getGoal(); + + final int thisPlayerDimension = ctx.world().provider.getDimensionType().getId(); + final int currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().provider.getDimensionType().getId(); if (thisPlayerDimension != currentRenderViewDimension) { // this is a path for a bot in a different dimension, don't render it return; } - Entity renderView = Helper.mc.getRenderViewEntity(); - - if (renderView.world != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { - System.out.println("I have no idea what's going on"); - System.out.println("The primary baritone is in a different world than the render view entity"); - System.out.println("Not rendering the path"); - return; - } + // TODO: This is goofy 💀 (pr/deprecateHelperMc) + // renderView isn't even needed for drawGoal since it's only used to + // calculate GoalYLevel x/z bounds, and ends up just cancelling itself + // out because of viewerPosX/Y/Z. I just changed it to center around the + // actual player so the goal box doesn't follow the camera in freecam. +// Entity renderView = Helper.mc.getRenderViewEntity(); +// if (renderView.world != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { +// System.out.println("I have no idea what's going on"); +// System.out.println("The primary baritone is in a different world than the render view entity"); +// System.out.println("Not rendering the path"); +// return; +// } if (goal != null && settings.renderGoal.value) { - drawGoal(renderView, goal, partialTicks, settings.colorGoalBox.value); + drawGoal(ctx.player(), goal, partialTicks, settings.colorGoalBox.value); } if (!settings.renderPath.value) { @@ -86,9 +95,9 @@ public static void render(RenderEvent event, PathingBehavior behavior) { PathExecutor current = behavior.getCurrent(); // this should prevent most race conditions? PathExecutor next = behavior.getNext(); // like, now it's not possible for current!=null to be true, then suddenly false because of another thread if (current != null && settings.renderSelectionBoxes.value) { - drawManySelectionBoxes(renderView, current.toBreak(), settings.colorBlocksToBreak.value); - drawManySelectionBoxes(renderView, current.toPlace(), settings.colorBlocksToPlace.value); - drawManySelectionBoxes(renderView, current.toWalkInto(), settings.colorBlocksToWalkInto.value); + drawManySelectionBoxes(ctx.player(), current.toBreak(), settings.colorBlocksToBreak.value); + drawManySelectionBoxes(ctx.player(), current.toPlace(), settings.colorBlocksToPlace.value); + drawManySelectionBoxes(ctx.player(), current.toWalkInto(), settings.colorBlocksToWalkInto.value); } //drawManySelectionBoxes(player, Collections.singletonList(behavior.pathStart()), partialTicks, Color.WHITE); @@ -111,12 +120,12 @@ public static void render(RenderEvent event, PathingBehavior behavior) { currentlyRunning.pathToMostRecentNodeConsidered().ifPresent(mr -> { drawPath(mr, 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); - drawManySelectionBoxes(renderView, Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); + drawManySelectionBoxes(ctx.player(), Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); }); }); } - public static void drawPath(IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + private static void drawPath(IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); int fadeStart = fadeStart0 + startIndex; @@ -159,7 +168,7 @@ public static void drawPath(IPath path, int startIndex, Color color, boolean fad IRenderer.endLines(settings.renderPathIgnoreDepth.value); } - public static void emitLine(double x1, double y1, double z1, double x2, double y2, double z2) { + private static void emitLine(double x1, double y1, double z1, double x2, double y2, double z2) { double vpX = renderManager.viewerPosX; double vpY = renderManager.viewerPosY; double vpZ = renderManager.viewerPosZ; @@ -202,11 +211,11 @@ public static void drawManySelectionBoxes(Entity player, Collection po IRenderer.endLines(settings.renderSelectionBoxesIgnoreDepth.value); } - public static void drawGoal(Entity player, Goal goal, float partialTicks, Color color) { + private static void drawGoal(Entity player, Goal goal, float partialTicks, Color color) { drawGoal(player, goal, partialTicks, color, true); } - public static void drawGoal(Entity player, Goal goal, float partialTicks, Color color, boolean setupRender) { + private static void drawGoal(Entity player, Goal goal, float partialTicks, Color color, boolean setupRender) { double renderPosX = renderManager.viewerPosX; double renderPosY = renderManager.viewerPosY; double renderPosZ = renderManager.viewerPosZ; @@ -245,7 +254,7 @@ public static void drawGoal(Entity player, Goal goal, float partialTicks, Color if (settings.renderGoalXZBeacon.value) { glPushAttrib(GL_LIGHTING_BIT); - Helper.mc.getTextureManager().bindTexture(TileEntityBeaconRenderer.TEXTURE_BEACON_BEAM); + textureManager.bindTexture(TileEntityBeaconRenderer.TEXTURE_BEACON_BEAM); if (settings.renderGoalIgnoreDepth.value) { GlStateManager.disableDepth(); diff --git a/src/main/java/baritone/utils/player/BaritonePlayerContext.java b/src/main/java/baritone/utils/player/BaritonePlayerContext.java index 601d2bb72..7c7fe13f6 100644 --- a/src/main/java/baritone/utils/player/BaritonePlayerContext.java +++ b/src/main/java/baritone/utils/player/BaritonePlayerContext.java @@ -22,7 +22,10 @@ import baritone.api.utils.*; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; /** @@ -68,6 +71,12 @@ public IWorldData worldData() { return this.baritone.getWorldProvider().getCurrentWorld(); } + @Override + public BetterBlockPos viewerPos() { + final Entity entity = this.mc.getRenderViewEntity(); + return entity == null ? this.playerFeet() : BetterBlockPos.from(new BlockPos(entity)); + } + @Override public Rotation playerRotations() { return this.baritone.getLookBehavior().getEffectiveRotation().orElseGet(IPlayerContext.super::playerRotations); From 2db2d8be59f8510028576c5640cd4f61ba7ebe20 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 02:00:10 -0500 Subject: [PATCH 584/935] Steal `BaritoneList` from `bot-system` --- src/main/java/baritone/BaritoneProvider.java | 24 ++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index a0621af93..4593fefbc 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -28,7 +28,7 @@ import baritone.utils.schematic.SchematicSystem; import net.minecraft.client.Minecraft; -import java.util.Collections; +import java.util.AbstractList; import java.util.List; /** @@ -42,7 +42,7 @@ public final class BaritoneProvider implements IBaritoneProvider { { this.primary = new Baritone(Minecraft.getMinecraft()); - this.all = Collections.singletonList(this.primary); + this.all = this.new BaritoneList(); // Setup chat control, just for the primary instance this.primary.registerBehavior(ExampleBaritoneControl::new); @@ -50,12 +50,12 @@ public final class BaritoneProvider implements IBaritoneProvider { @Override public IBaritone getPrimaryBaritone() { - return primary; + return this.primary; } @Override public List getAllBaritones() { - return all; + return this.all; } @Override @@ -72,4 +72,20 @@ public ICommandSystem getCommandSystem() { public ISchematicSystem getSchematicSystem() { return SchematicSystem.INSTANCE; } + + private final class BaritoneList extends AbstractList { + + @Override + public int size() { + return 1; + } + + @Override + public IBaritone get(int index) { + if (index == 0) { + return BaritoneProvider.this.primary; + } + throw new IndexOutOfBoundsException(); + } + } } From 5b39c0dd969bcedc44fb864647f9713550316e98 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 12:18:50 -0500 Subject: [PATCH 585/935] Remove `getMinecraft()` from `BlockStateInterface` --- .../java/baritone/api/process/IBuilderProcess.java | 1 + .../java/baritone/behavior/PathingBehavior.java | 1 - .../pathing/movement/CalculationContext.java | 4 ++-- .../java/baritone/utils/BlockStateInterface.java | 14 ++++---------- .../utils/BlockStateInterfaceAccessWrapper.java | 6 ++++-- .../utils/player/BaritonePlayerContext.java | 1 - 6 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index c63113cdd..29d8968a7 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -51,6 +51,7 @@ public interface IBuilderProcess extends IBaritoneProcess { */ boolean build(String name, File schematic, Vec3i origin); + @Deprecated default boolean build(String schematicFile, BlockPos origin) { File file = new File(new File(Minecraft.getMinecraft().gameDir, "schematics"), schematicFile); return build(schematicFile, file, origin); diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index f5433fe8d..31a884622 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -36,7 +36,6 @@ import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.pathing.Favoring; -import net.minecraft.client.settings.GameSettings; import net.minecraft.util.math.BlockPos; import java.util.ArrayList; diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 177435ef1..129f00e20 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -91,8 +91,8 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.baritone = baritone; EntityPlayerSP player = baritone.getPlayerContext().player(); this.world = baritone.getPlayerContext().world(); - this.worldData = (WorldData) baritone.getWorldProvider().getCurrentWorld(); - this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); + this.worldData = (WorldData) baritone.getPlayerContext().worldData(); + this.bsi = new BlockStateInterface(baritone.getPlayerContext(), forUseOnAnotherThread); this.toolSet = new ToolSet(player); this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && InventoryPlayer.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && !world.provider.isNether(); diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index f451c2f1d..1d6dcaf79 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -27,7 +27,6 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; @@ -44,7 +43,6 @@ public class BlockStateInterface { private final Long2ObjectMap loadedChunks; private final WorldData worldData; - protected final IBlockAccess world; public final BlockPos.MutableBlockPos isPassableBlockPos; public final IBlockAccess access; public final BetterWorldBorder worldBorder; @@ -61,13 +59,9 @@ public BlockStateInterface(IPlayerContext ctx) { } public BlockStateInterface(IPlayerContext ctx, boolean copyLoadedChunks) { - this(ctx.world(), (WorldData) ctx.worldData(), copyLoadedChunks); - } - - public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedChunks) { - this.world = world; + final World world = ctx.world(); this.worldBorder = new BetterWorldBorder(world.getWorldBorder()); - this.worldData = worldData; + this.worldData = (WorldData) ctx.worldData(); Long2ObjectMap worldLoaded = ((IChunkProviderClient) world.getChunkProvider()).loadedChunks(); if (copyLoadedChunks) { this.loadedChunks = new Long2ObjectOpenHashMap<>(worldLoaded); // make a copy that we can safely access from another thread @@ -75,11 +69,11 @@ public BlockStateInterface(World world, WorldData worldData, boolean copyLoadedC this.loadedChunks = worldLoaded; // this will only be used on the main thread } this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.value; - if (!Minecraft.getMinecraft().isCallingFromMinecraftThread()) { + if (!ctx.minecraft().isCallingFromMinecraftThread()) { throw new IllegalStateException(); } this.isPassableBlockPos = new BlockPos.MutableBlockPos(); - this.access = new BlockStateInterfaceAccessWrapper(this); + this.access = new BlockStateInterfaceAccessWrapper(this, world); } public boolean worldContainsLoadedChunk(int blockX, int blockZ) { diff --git a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java index 6dded1dd5..7ebde5f23 100644 --- a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java +++ b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java @@ -37,9 +37,11 @@ public final class BlockStateInterfaceAccessWrapper implements IBlockAccess { private final BlockStateInterface bsi; + private final IBlockAccess world; - BlockStateInterfaceAccessWrapper(BlockStateInterface bsi) { + BlockStateInterfaceAccessWrapper(BlockStateInterface bsi, IBlockAccess world) { this.bsi = bsi; + this.world = world; } @Nullable @@ -76,6 +78,6 @@ public int getStrongPower(BlockPos pos, EnumFacing direction) { @Override public WorldType getWorldType() { - return this.bsi.world.getWorldType(); + return this.world.getWorldType(); } } diff --git a/src/main/java/baritone/utils/player/BaritonePlayerContext.java b/src/main/java/baritone/utils/player/BaritonePlayerContext.java index 7c7fe13f6..282d3d8b6 100644 --- a/src/main/java/baritone/utils/player/BaritonePlayerContext.java +++ b/src/main/java/baritone/utils/player/BaritonePlayerContext.java @@ -25,7 +25,6 @@ import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; /** From ae66004b80b69d802d507a4812995583d9525d34 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 13:52:27 -0500 Subject: [PATCH 586/935] Custom registration of `Baritone` instances from `Minecraft` --- .../java/baritone/api/IBaritoneProvider.java | 40 ++++++++++++++-- src/main/java/baritone/BaritoneProvider.java | 48 +++++++++---------- 2 files changed, 60 insertions(+), 28 deletions(-) diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 84a8abbbd..55d208e03 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -21,6 +21,7 @@ import baritone.api.command.ICommand; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; +import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import java.util.List; @@ -52,15 +53,13 @@ public interface IBaritoneProvider { List getAllBaritones(); /** - * Provides the {@link IBaritone} instance for a given {@link EntityPlayerSP}. This will likely be - * replaced with or be overloaded in addition to {@code #getBaritoneForUser(IBaritoneUser)} when - * {@code bot-system} is merged into {@code master}. + * Provides the {@link IBaritone} instance for a given {@link EntityPlayerSP}. * * @param player The player * @return The {@link IBaritone} instance. */ default IBaritone getBaritoneForPlayer(EntityPlayerSP player) { - for (IBaritone baritone : getAllBaritones()) { + for (IBaritone baritone : this.getAllBaritones()) { if (Objects.equals(player, baritone.getPlayerContext().player())) { return baritone; } @@ -68,6 +67,39 @@ default IBaritone getBaritoneForPlayer(EntityPlayerSP player) { return null; } + /** + * Provides the {@link IBaritone} instance for a given {@link Minecraft}. + * + * @param minecraft The minecraft + * @return The {@link IBaritone} instance. + */ + default IBaritone getBaritoneForMinecraft(Minecraft minecraft) { + for (IBaritone baritone : this.getAllBaritones()) { + if (Objects.equals(minecraft, baritone.getPlayerContext().minecraft())) { + return baritone; + } + } + return null; + } + + /** + * Creates and registers a new {@link IBaritone} instance using the specified {@link Minecraft}. The existing + * instance is returned if already registered. + * + * @param minecraft The minecraft + * @return The {@link IBaritone} instance + */ + IBaritone createBaritone(Minecraft minecraft); + + /** + * Destroys and removes the specified {@link IBaritone} instance. If the specified instance is the + * {@link #getPrimaryBaritone() primary baritone}, this operation has no effect and will return {@code false}. + * + * @param baritone The baritone instance to remove + * @return Whether the baritone instance was removed + */ + boolean destroyBaritone(IBaritone baritone); + /** * Returns the {@link IWorldScanner} instance. This is not a type returned by * {@link IBaritone} implementation, because it is not linked with {@link IBaritone}. diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index 4593fefbc..b96cf03f7 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -28,8 +28,9 @@ import baritone.utils.schematic.SchematicSystem; import net.minecraft.client.Minecraft; -import java.util.AbstractList; +import java.util.Collections; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; /** * @author Brady @@ -37,25 +38,40 @@ */ public final class BaritoneProvider implements IBaritoneProvider { - private final Baritone primary; private final List all; + private final List allView; - { - this.primary = new Baritone(Minecraft.getMinecraft()); - this.all = this.new BaritoneList(); + public BaritoneProvider() { + this.all = new CopyOnWriteArrayList<>(); + this.allView = Collections.unmodifiableList(this.all); // Setup chat control, just for the primary instance - this.primary.registerBehavior(ExampleBaritoneControl::new); + final Baritone primary = (Baritone) this.createBaritone(Minecraft.getMinecraft()); + primary.registerBehavior(ExampleBaritoneControl::new); } @Override public IBaritone getPrimaryBaritone() { - return this.primary; + return this.all.get(0); } @Override public List getAllBaritones() { - return this.all; + return this.allView; + } + + @Override + public synchronized IBaritone createBaritone(Minecraft minecraft) { + IBaritone baritone = this.getBaritoneForMinecraft(minecraft); + if (baritone == null) { + this.all.add(baritone = new Baritone(minecraft)); + } + return baritone; + } + + @Override + public synchronized boolean destroyBaritone(IBaritone baritone) { + return baritone != this.getPrimaryBaritone() && this.all.remove(baritone); } @Override @@ -72,20 +88,4 @@ public ICommandSystem getCommandSystem() { public ISchematicSystem getSchematicSystem() { return SchematicSystem.INSTANCE; } - - private final class BaritoneList extends AbstractList { - - @Override - public int size() { - return 1; - } - - @Override - public IBaritone get(int index) { - if (index == 0) { - return BaritoneProvider.this.primary; - } - throw new IndexOutOfBoundsException(); - } - } } From 8534e1ba552135f83924c7a66550ff4f46d88459 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 14:04:34 -0500 Subject: [PATCH 587/935] =?UTF-8?q?=F0=9F=92=9A=20appease=20codacy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baritone/Baritone.java | 42 ++++++++++++++++------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index e85b57ce4..776e646af 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -20,7 +20,9 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.Settings; +import baritone.api.behavior.IBehavior; import baritone.api.event.listener.IEventBus; +import baritone.api.process.IBaritoneProcess; import baritone.api.utils.IPlayerContext; import baritone.behavior.*; import baritone.cache.WorldProvider; @@ -64,7 +66,6 @@ public class Baritone implements IBaritone { private final PathingBehavior pathingBehavior; private final LookBehavior lookBehavior; private final InventoryBehavior inventoryBehavior; - private final WaypointBehavior waypointBehavior; private final InputOverrideHandler inputOverrideHandler; private final FollowProcess followProcess; @@ -73,7 +74,6 @@ public class Baritone implements IBaritone { private final CustomGoalProcess customGoalProcess; private final BuilderProcess builderProcess; private final ExploreProcess exploreProcess; - private final BackfillProcess backfillProcess; private final FarmProcess farmProcess; private final InventoryPauserProcess inventoryPauserProcess; @@ -101,24 +101,24 @@ public class Baritone implements IBaritone { this.playerContext = new BaritonePlayerContext(this, mc); { - pathingBehavior = this.registerBehavior(PathingBehavior::new); - lookBehavior = this.registerBehavior(LookBehavior::new); - inventoryBehavior = this.registerBehavior(InventoryBehavior::new); - inputOverrideHandler = this.registerBehavior(InputOverrideHandler::new); - waypointBehavior = this.registerBehavior(WaypointBehavior::new); + this.pathingBehavior = this.registerBehavior(PathingBehavior::new); + this.lookBehavior = this.registerBehavior(LookBehavior::new); + this.inventoryBehavior = this.registerBehavior(InventoryBehavior::new); + this.inputOverrideHandler = this.registerBehavior(InputOverrideHandler::new); + this.registerBehavior(WaypointBehavior::new); } this.pathingControlManager = new PathingControlManager(this); { - this.pathingControlManager.registerProcess(followProcess = new FollowProcess(this)); - this.pathingControlManager.registerProcess(mineProcess = new MineProcess(this)); - this.pathingControlManager.registerProcess(customGoalProcess = new CustomGoalProcess(this)); // very high iq - this.pathingControlManager.registerProcess(getToBlockProcess = new GetToBlockProcess(this)); - this.pathingControlManager.registerProcess(builderProcess = new BuilderProcess(this)); - this.pathingControlManager.registerProcess(exploreProcess = new ExploreProcess(this)); - this.pathingControlManager.registerProcess(backfillProcess = new BackfillProcess(this)); - this.pathingControlManager.registerProcess(farmProcess = new FarmProcess(this)); - this.pathingControlManager.registerProcess(inventoryPauserProcess = new InventoryPauserProcess(this)); + this.followProcess = this.registerProcess(FollowProcess::new); + this.mineProcess = this.registerProcess(MineProcess::new); + this.customGoalProcess = this.registerProcess(CustomGoalProcess::new); // very high iq + this.getToBlockProcess = this.registerProcess(GetToBlockProcess::new); + this.builderProcess = this.registerProcess(BuilderProcess::new); + this.exploreProcess = this.registerProcess(ExploreProcess::new); + this.farmProcess = this.registerProcess(FarmProcess::new); + this.inventoryPauserProcess = this.registerProcess(InventoryPauserProcess::new); + this.registerProcess(BackfillProcess::new); } this.worldProvider = new WorldProvider(this); @@ -126,16 +126,22 @@ public class Baritone implements IBaritone { this.commandManager = new CommandManager(this); } - public void registerBehavior(Behavior behavior) { + public void registerBehavior(IBehavior behavior) { this.gameEventHandler.registerEventListener(behavior); } - public T registerBehavior(Function constructor) { + public T registerBehavior(Function constructor) { final T behavior = constructor.apply(this); this.registerBehavior(behavior); return behavior; } + public T registerProcess(Function constructor) { + final T behavior = constructor.apply(this); + this.pathingControlManager.registerProcess(behavior); + return behavior; + } + @Override public PathingControlManager getPathingControlManager() { return this.pathingControlManager; From ea9245ad26379a9daccae6907e132abca2d71311 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 14:23:24 -0500 Subject: [PATCH 588/935] missed that :weary: --- src/api/java/baritone/api/utils/Helper.java | 3 ++- src/api/java/baritone/api/utils/SettingsUtil.java | 5 ++--- src/main/java/baritone/command/defaults/BuildCommand.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index e49744b4f..b99074ae0 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -42,7 +42,8 @@ public interface Helper { Helper HELPER = new Helper() {}; /** - * Instance of the game + * The main game instance returned by {@link Minecraft#getMinecraft()}. + * Deprecated since {@link IPlayerContext#minecraft()} should be used instead (In the majority of cases). */ @Deprecated Minecraft mc = Minecraft.getMinecraft(); diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 0b9c64737..efc080cf5 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -20,6 +20,7 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; import net.minecraft.item.Item; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.Vec3i; @@ -44,8 +45,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static net.minecraft.client.Minecraft.getMinecraft; - public class SettingsUtil { public static final String SETTINGS_DEFAULT_NAME = "settings.txt"; @@ -105,7 +104,7 @@ public static synchronized void save(Settings settings) { } private static Path settingsByName(String name) { - return getMinecraft().gameDir.toPath().resolve("baritone").resolve(name); + return Minecraft.getMinecraft().gameDir.toPath().resolve("baritone").resolve(name); } public static List modifiedSettings(Settings settings) { diff --git a/src/main/java/baritone/command/defaults/BuildCommand.java b/src/main/java/baritone/command/defaults/BuildCommand.java index 724582865..12f287955 100644 --- a/src/main/java/baritone/command/defaults/BuildCommand.java +++ b/src/main/java/baritone/command/defaults/BuildCommand.java @@ -26,7 +26,6 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.utils.BetterBlockPos; -import net.minecraft.client.Minecraft; import org.apache.commons.io.FilenameUtils; import java.io.File; @@ -36,10 +35,11 @@ public class BuildCommand extends Command { - private static final File schematicsDir = new File(Minecraft.getMinecraft().gameDir, "schematics"); + private final File schematicsDir; public BuildCommand(IBaritone baritone) { super(baritone, "build"); + this.schematicsDir = new File(baritone.getPlayerContext().minecraft().gameDir, "schematics"); } @Override From 9672bd2c6d83bc9ae24ea607650e84804fd68c06 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 16:08:34 -0500 Subject: [PATCH 589/935] Fix compile --- src/main/java/baritone/utils/PathRenderer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 13a14f6dc..bec8937a4 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -108,14 +108,14 @@ public static void render(RenderEvent event, PathingBehavior behavior) { drawPath(Elytra.path.subList(Math.max(behavior.baritone.elytra.playerNear - 30, 0), Math.min(behavior.baritone.elytra.playerNear + 30, Elytra.path.size())), 0, Color.RED, false, 0, 0); if (behavior.baritone.elytra.goal != null) { - drawDankLitGoalBox(renderView, new GoalBlock(behavior.baritone.elytra.goal), partialTicks, Color.GREEN); + drawGoal(renderView, new GoalBlock(behavior.baritone.elytra.goal), partialTicks, Color.GREEN); } if (!behavior.baritone.elytra.lines.isEmpty() && Baritone.settings().renderRaytraces.value) { IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); boolean orig = settings.renderPathAsLine.value; settings.renderPathAsLine.value = true; for (Pair line : behavior.baritone.elytra.lines) { - drawLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); + emitLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); tessellator.draw(); } settings.renderPathAsLine.value = orig; From bde0c620ad6270cbd363140ab6be8aa49370644d Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 16:11:11 -0500 Subject: [PATCH 590/935] Allow freeLook when using elytra --- .../api/event/events/RotationMoveEvent.java | 38 ++++++++- .../launch/mixins/MixinEntityLivingBase.java | 85 +++++++++++++++---- .../launch/mixins/MixinEntityPlayerSP.java | 16 ---- .../launch/mixins/MixinMinecraft.java | 15 ++++ src/main/java/baritone/Elytra.java | 6 +- .../java/baritone/behavior/LookBehavior.java | 1 + 6 files changed, 121 insertions(+), 40 deletions(-) diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index 109061c7e..a2ab17ed6 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -17,6 +17,7 @@ package baritone.api.event.events; +import baritone.api.utils.Rotation; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -31,14 +32,27 @@ public final class RotationMoveEvent { */ private final Type type; + private final Rotation original; + /** * The yaw rotation */ private float yaw; - public RotationMoveEvent(Type type, float yaw) { + /** + * The pitch rotation + */ + private float pitch; + + public RotationMoveEvent(Type type, float yaw, float pitch) { this.type = type; + this.original = new Rotation(yaw, pitch); this.yaw = yaw; + this.pitch = pitch; + } + + public Rotation getOriginal() { + return this.original; } /** @@ -46,21 +60,37 @@ public RotationMoveEvent(Type type, float yaw) { * * @param yaw Yaw rotation */ - public final void setYaw(float yaw) { + public void setYaw(float yaw) { this.yaw = yaw; } /** * @return The yaw rotation */ - public final float getYaw() { + public float getYaw() { return this.yaw; } + /** + * Set the pitch movement rotation + * + * @param pitch Pitch rotation + */ + public void setPitch(float pitch) { + this.pitch = pitch; + } + + /** + * @return The pitch rotation + */ + public float getPitch() { + return pitch; + } + /** * @return The type of the event */ - public final Type getType() { + public Type getType() { return this.type; } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index 0fd2436c9..f8544dd2f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -25,11 +25,14 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.Optional; + import static org.spongepowered.asm.lib.Opcodes.GETFIELD; /** @@ -42,11 +45,14 @@ public abstract class MixinEntityLivingBase extends Entity { /** * Event called to override the movement direction when jumping */ + @Unique private RotationMoveEvent jumpRotationEvent; - public MixinEntityLivingBase(World worldIn, RotationMoveEvent jumpRotationEvent) { + @Unique + private RotationMoveEvent elytraRotationEvent; + + public MixinEntityLivingBase(World worldIn) { super(worldIn); - this.jumpRotationEvent = jumpRotationEvent; } @Inject( @@ -54,14 +60,10 @@ public MixinEntityLivingBase(World worldIn, RotationMoveEvent jumpRotationEvent) at = @At("HEAD") ) private void preMoveRelative(CallbackInfo ci) { - // noinspection ConstantConditions - if (EntityPlayerSP.class.isInstance(this)) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); - if (baritone != null) { - this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.rotationYaw); - baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); - } - } + this.getBaritone().ifPresent(baritone -> { + this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.rotationYaw, this.rotationPitch); + baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); + }); } @Redirect( @@ -79,6 +81,38 @@ private float overrideYaw(EntityLivingBase self) { return self.rotationYaw; } + @Inject( + method = "travel", + at = @At( + value = "INVOKE", + target = "net/minecraft/entity/EntityLivingBase.getLookVec()Lnet/minecraft/util/math/Vec3d;" + ) + ) + private void onPreElytraMove(float strafe, float vertical, float forward, CallbackInfo ci) { + this.getBaritone().ifPresent(baritone -> { + this.elytraRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw, this.rotationPitch); + baritone.getGameEventHandler().onPlayerRotationMove(this.elytraRotationEvent); + this.rotationYaw = this.elytraRotationEvent.getYaw(); + this.rotationPitch = this.elytraRotationEvent.getPitch(); + }); + } + + @Inject( + method = "travel", + at = @At( + value = "INVOKE", + target = "net/minecraft/entity/EntityLivingBase.move(Lnet/minecraft/entity/MoverType;DDD)V", + shift = At.Shift.AFTER + ) + ) + private void onPostElytraMove(float strafe, float vertical, float forward, CallbackInfo ci) { + if (this.elytraRotationEvent != null) { + this.rotationYaw = this.elytraRotationEvent.getOriginal().getYaw(); + this.rotationPitch = this.elytraRotationEvent.getOriginal().getPitch(); + this.elytraRotationEvent = null; + } + } + @Redirect( method = "travel", at = @At( @@ -86,17 +120,32 @@ private float overrideYaw(EntityLivingBase self) { target = "net/minecraft/entity/EntityLivingBase.moveRelative(FFFF)V" ) ) - private void travel(EntityLivingBase self, float strafe, float up, float forward, float friction) { - // noinspection ConstantConditions - if (!EntityPlayerSP.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this) == null) { + private void onMoveRelative(EntityLivingBase self, float strafe, float up, float forward, float friction) { + Optional baritone = this.getBaritone(); + if (!baritone.isPresent()) { moveRelative(strafe, up, forward, friction); return; } - RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw); - BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); - float originalYaw = this.rotationYaw; - this.rotationYaw = motionUpdateRotationEvent.getYaw(); + + RotationMoveEvent event = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw, this.rotationPitch); + baritone.get().getGameEventHandler().onPlayerRotationMove(event); + + this.rotationYaw = event.getYaw(); + this.rotationPitch = event.getPitch(); + this.moveRelative(strafe, up, forward, friction); - this.rotationYaw = originalYaw; + + this.rotationYaw = event.getOriginal().getYaw(); + this.rotationPitch = event.getOriginal().getPitch(); + } + + @Unique + private Optional getBaritone() { + // noinspection ConstantConditions + if (EntityPlayerSP.class.isInstance(this)) { + return Optional.ofNullable(BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)); + } else { + return Optional.empty(); + } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index 7c1225b9b..3f34c0e77 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -73,22 +73,6 @@ private void onPreUpdate(CallbackInfo ci) { } } - @Inject( - method = "onUpdate", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/entity/EntityPlayerSP.onUpdateWalkingPlayer()V", - shift = At.Shift.BY, - by = 2 - ) - ) - private void onPostUpdate(CallbackInfo ci) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); - if (baritone != null) { - baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); - } - } - @Redirect( method = "onLivingUpdate", at = @At( diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 097c72905..edc1e3fcc 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -20,6 +20,7 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.BlockInteractEvent; +import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; @@ -84,7 +85,21 @@ private void runTick(CallbackInfo ci) { baritone.getGameEventHandler().onTick(tickProvider.apply(EventState.PRE, type)); } + } + @Inject( + method = "runTick", + at = @At( + value = "INVOKE", + target = "net/minecraft/client/multiplayer/WorldClient.updateEntities()V", + shift = At.Shift.AFTER + ) + ) + private void postUpdateEntities(CallbackInfo ci) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(this.player); + if (baritone != null) { + baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); + } } @Inject( diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 2f724c692..35ea70b95 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -264,17 +264,19 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat } if (requireClear ? isClear(start, dest) : clearView(start, dest)) { Rotation rot = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()); - ctx.player().rotationYaw = rot.getYaw(); +// ctx.player().rotationYaw = rot.getYaw(); long a = System.currentTimeMillis(); Float pitch = solvePitch(dest.subtract(start), steps, relaxation == 2); if (pitch == null) { + baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), ctx.playerRotations().getPitch()), false); continue; } long b = System.currentTimeMillis(); - ctx.player().rotationPitch = pitch; +// ctx.player().rotationPitch = pitch; System.out.println("Solved pitch in " + (b - a) + " total time " + (b - t)); goingTo = i; goal = path.get(i).add(0, dy, 0); + baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), pitch), false); return; } } diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 99e496e6f..d9a06b086 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -149,6 +149,7 @@ public Optional getEffectiveRotation() { public void onPlayerRotationMove(RotationMoveEvent event) { if (this.target != null) { event.setYaw(this.target.rotation.getYaw()); + event.setPitch(this.target.rotation.getPitch()); } } From 91bf7d726b30add13deaf14094a15b58f93c8b70 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 16:32:56 -0500 Subject: [PATCH 591/935] Un-scuff and add setting --- src/api/java/baritone/api/Settings.java | 1 + .../java/baritone/launch/mixins/MixinMinecraft.java | 2 ++ src/main/java/baritone/Elytra.java | 4 +--- src/main/java/baritone/behavior/LookBehavior.java | 12 ++++++++---- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 30506fd08..f5cf3c77a 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -53,6 +53,7 @@ public final class Settings { public final Setting elytraFireworkSpeed = new Setting<>(0.6); public final Setting wasteFireworks = new Setting<>(false); public final Setting renderRaytraces = new Setting<>(false); + public final Setting elytraFreeLook = new Setting<>(false); /** * Allow Baritone to break blocks diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index edc1e3fcc..19d4741ca 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -98,6 +98,8 @@ private void runTick(CallbackInfo ci) { private void postUpdateEntities(CallbackInfo ci) { IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(this.player); if (baritone != null) { + // Intentionally call this after all entities have been updated. That way, any modification to rotations + // can be recognized by other entity code. (Fireworks and Pigs, for example) baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); } } diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 35ea70b95..b8a05010b 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -48,7 +48,7 @@ public class Elytra extends Behavior implements Helper { static { try { - DataInputStream in = new DataInputStream(new FileInputStream(new File("/Users/leijurv/Dropbox/nether-pathfinder/build/test"))); + DataInputStream in = new DataInputStream(new FileInputStream(new File("E:/Brady/Documents/Java/baritone/test"))); int count = in.readInt(); System.out.println("Count: " + count); for (int i = 0; i < count; i++) { @@ -264,7 +264,6 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat } if (requireClear ? isClear(start, dest) : clearView(start, dest)) { Rotation rot = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()); -// ctx.player().rotationYaw = rot.getYaw(); long a = System.currentTimeMillis(); Float pitch = solvePitch(dest.subtract(start), steps, relaxation == 2); if (pitch == null) { @@ -272,7 +271,6 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat continue; } long b = System.currentTimeMillis(); -// ctx.player().rotationPitch = pitch; System.out.println("Solved pitch in " + (b - a) + " total time " + (b - t)); goingTo = i; goal = path.get(i).add(0, dy, 0); diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index d9a06b086..1b85ac7e3 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -56,7 +56,7 @@ public LookBehavior(Baritone baritone) { @Override public void updateTarget(Rotation rotation, boolean blockInteract) { - this.target = new Target(rotation, blockInteract); + this.target = new Target(rotation, Target.Mode.resolve(ctx, blockInteract)); } @Override @@ -186,9 +186,9 @@ private static class Target { public final Rotation rotation; public final Mode mode; - public Target(Rotation rotation, boolean blockInteract) { + public Target(Rotation rotation, Mode mode) { this.rotation = rotation; - this.mode = Mode.resolve(blockInteract); + this.mode = mode; } enum Mode { @@ -207,12 +207,16 @@ enum Mode { */ NONE; - static Mode resolve(boolean blockInteract) { + static Mode resolve(IPlayerContext ctx, boolean blockInteract) { final Settings settings = Baritone.settings(); final boolean antiCheat = settings.antiCheatCompatibility.value; final boolean blockFreeLook = settings.blockFreeLook.value; final boolean freeLook = settings.freeLook.value; + if (ctx.player().isElytraFlying()) { + return settings.elytraFreeLook.value ? SERVER : CLIENT; + } + if (!freeLook && !blockFreeLook) return CLIENT; if (!blockFreeLook && blockInteract) return CLIENT; From 06d11c187417374103a6e4b0ed162e1dfbfe4083 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 16:59:03 -0500 Subject: [PATCH 592/935] Revert file path --- src/main/java/baritone/Elytra.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index b8a05010b..6d12e9f0d 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -48,7 +48,7 @@ public class Elytra extends Behavior implements Helper { static { try { - DataInputStream in = new DataInputStream(new FileInputStream(new File("E:/Brady/Documents/Java/baritone/test"))); + DataInputStream in = new DataInputStream(new FileInputStream(new File("/Users/leijurv/Dropbox/nether-pathfinder/build/test"))); int count = in.readInt(); System.out.println("Count: " + count); for (int i = 0; i < count; i++) { From f14caa3778c580877ea73d742339b67262ff4d70 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 17:32:47 -0500 Subject: [PATCH 593/935] Fix cringe shift by injector --- .../java/baritone/launch/mixins/MixinEntityPlayerSP.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index 7c1225b9b..4f6031d78 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -61,9 +61,8 @@ private void sendChatMessage(String msg, CallbackInfo ci) { method = "onUpdate", at = @At( value = "INVOKE", - target = "net/minecraft/client/entity/EntityPlayerSP.isRiding()Z", - shift = At.Shift.BY, - by = -3 + target = "net/minecraft/client/entity/AbstractClientPlayer.onUpdate()V", + shift = At.Shift.AFTER ) ) private void onPreUpdate(CallbackInfo ci) { From 26a2945696d83227ebbc429ee1900a435eb21482 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 19:13:07 -0500 Subject: [PATCH 594/935] remove comment --- src/main/java/baritone/utils/PathRenderer.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 65bf6269c..b3abc8cd2 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -71,19 +71,6 @@ public static void render(RenderEvent event, PathingBehavior behavior) { return; } - // TODO: This is goofy 💀 (pr/deprecateHelperMc) - // renderView isn't even needed for drawGoal since it's only used to - // calculate GoalYLevel x/z bounds, and ends up just cancelling itself - // out because of viewerPosX/Y/Z. I just changed it to center around the - // actual player so the goal box doesn't follow the camera in freecam. -// Entity renderView = Helper.mc.getRenderViewEntity(); -// if (renderView.world != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { -// System.out.println("I have no idea what's going on"); -// System.out.println("The primary baritone is in a different world than the render view entity"); -// System.out.println("Not rendering the path"); -// return; -// } - if (goal != null && settings.renderGoal.value) { drawGoal(ctx.player(), goal, partialTicks, settings.colorGoalBox.value); } From 8df67786415d5f0eb8f4fb6802bf0b8a385d20c9 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 15 Jun 2023 00:32:26 -0700 Subject: [PATCH 595/935] sort of integrated nether pathfinder --- build.gradle | 18 +++--- src/main/java/baritone/Elytra.java | 28 +++------ .../command/defaults/DefaultCommands.java | 3 +- .../command/defaults/ElytraCommand.java | 61 +++++++++++++++++++ .../java/baritone/utils/PathRenderer.java | 3 +- 5 files changed, 84 insertions(+), 29 deletions(-) create mode 100644 src/main/java/baritone/command/defaults/ElytraCommand.java diff --git a/build.gradle b/build.gradle index 0ce05058c..7909911be 100755 --- a/build.gradle +++ b/build.gradle @@ -100,7 +100,9 @@ dependencies { exclude module: 'commons-io' exclude module: 'log4j-core' } + runtime launchCompile('dev.babbaj:nether-pathfinder:1.3') testImplementation 'junit:junit:4.12' + implementation 'dev.babbaj:nether-pathfinder:1.3' } mixin { @@ -153,16 +155,16 @@ install { def jarSAForgeName = String.format("%s-standalone-forge-%s", rootProject.name, version.toString()) artifacts { - archives file("$buildDir/libs/"+jarApiName+".jar") - archives file("$buildDir/libs/"+jarApiForgeName+".jar") - archives file("$buildDir/libs/"+jarSAName+".jar") - archives file("$buildDir/libs/"+jarSAForgeName+".jar") + archives file("$buildDir/libs/" + jarApiName + ".jar") + archives file("$buildDir/libs/" + jarApiForgeName + ".jar") + archives file("$buildDir/libs/" + jarSAName + ".jar") + archives file("$buildDir/libs/" + jarSAForgeName + ".jar") } repositories.mavenInstaller { - addFilter('api') { artifact, file -> artifact.name == "baritone-api" } - addFilter('api-forge') { artifact, file -> artifact.name == "baritone-api-forge" } - addFilter('standalone') { artifact, file -> artifact.name == "baritone-standalone" } - addFilter('standalone-forge') { artifact, file -> artifact.name == "baritone-standalone-forge" } + addFilter('api') { artifact, file -> artifact.name == "baritone-api" } + addFilter('api-forge') { artifact, file -> artifact.name == "baritone-api-forge" } + addFilter('standalone') { artifact, file -> artifact.name == "baritone-standalone" } + addFilter('standalone-forge') { artifact, file -> artifact.name == "baritone-standalone-forge" } } } diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 2f724c692..5a8cae634 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -25,6 +25,7 @@ import baritone.behavior.Behavior; import baritone.utils.BlockStateInterface; import com.mojang.realmsclient.util.Pair; +import dev.babbaj.pathfinder.NetherPathfinder; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; @@ -36,28 +37,16 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; -import java.io.DataInputStream; -import java.io.File; -import java.io.FileInputStream; import java.util.*; +import java.util.stream.Collectors; public class Elytra extends Behavior implements Helper { - public static List path = new ArrayList<>(); + public List path = new ArrayList<>(); - static { - - try { - DataInputStream in = new DataInputStream(new FileInputStream(new File("/Users/leijurv/Dropbox/nether-pathfinder/build/test"))); - int count = in.readInt(); - System.out.println("Count: " + count); - for (int i = 0; i < count; i++) { - path.add(new BetterBlockPos((int) in.readDouble(), (int) in.readDouble(), (int) in.readDouble())); - } - removeBacktracks(); - } catch (Exception e) { - throw new RuntimeException(e); - } + public void path(BlockPos destination) { + path = Arrays.stream(NetherPathfinder.pathFind(146008555100680L, false, false, ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z, destination.getX(), destination.getY(), destination.getZ())).mapToObj(BlockPos::fromLong).map(BetterBlockPos::new).collect(Collectors.toList()); + removeBacktracks(); } public int playerNear; @@ -211,6 +200,9 @@ public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } + if (path.isEmpty()) { + return; + } fixNearPlayer(); baritone.getInputOverrideHandler().clearAllKeys(); lines.clear(); @@ -425,7 +417,7 @@ public void fixNearPlayer() { //System.out.println(playerNear); } - public static void removeBacktracks() { + public void removeBacktracks() { Map positionFirstSeen = new HashMap<>(); for (int i = 0; i < path.size(); i++) { BetterBlockPos pos = path.get(i); diff --git a/src/main/java/baritone/command/defaults/DefaultCommands.java b/src/main/java/baritone/command/defaults/DefaultCommands.java index 901fda713..b8e3c924b 100644 --- a/src/main/java/baritone/command/defaults/DefaultCommands.java +++ b/src/main/java/baritone/command/defaults/DefaultCommands.java @@ -66,7 +66,8 @@ public static List createAll(IBaritone baritone) { new WaypointsCommand(baritone), new CommandAlias(baritone, "sethome", "Sets your home waypoint", "waypoints save home"), new CommandAlias(baritone, "home", "Path to your home waypoint", "waypoints goto home"), - new SelCommand(baritone) + new SelCommand(baritone), + new ElytraCommand(baritone) )); ExecutionControlCommands prc = new ExecutionControlCommands(baritone); commands.add(prc.pauseCommand); diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java new file mode 100644 index 000000000..2d2e3f0ee --- /dev/null +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -0,0 +1,61 @@ +/* + * 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.command.defaults; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalXZ; +import baritone.api.process.ICustomGoalProcess; +import net.minecraft.util.math.BlockPos; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class ElytraCommand extends Command { + + public ElytraCommand(IBaritone baritone) { + super(baritone, "elytra"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); + args.requireMax(0); + GoalXZ goal = (GoalXZ) customGoalProcess.getGoal(); + ((Baritone) baritone).elytra.path(new BlockPos(goal.getX(), 64, goal.getZ())); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "elytra time"; + } + + @Override + public List getLongDesc() { + return Arrays.asList(); + } +} diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index bec8937a4..df0d5b0ca 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -18,7 +18,6 @@ package baritone.utils; import baritone.Baritone; -import baritone.Elytra; import baritone.api.BaritoneAPI; import baritone.api.event.events.RenderEvent; import baritone.api.pathing.goals.*; @@ -106,7 +105,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { drawPath(next.getPath().positions(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); } - drawPath(Elytra.path.subList(Math.max(behavior.baritone.elytra.playerNear - 30, 0), Math.min(behavior.baritone.elytra.playerNear + 30, Elytra.path.size())), 0, Color.RED, false, 0, 0); + drawPath(behavior.baritone.elytra.path.subList(Math.max(behavior.baritone.elytra.playerNear - 30, 0), Math.min(behavior.baritone.elytra.playerNear + 30, behavior.baritone.elytra.path.size())), 0, Color.RED, false, 0, 0); if (behavior.baritone.elytra.goal != null) { drawGoal(renderView, new GoalBlock(behavior.baritone.elytra.goal), partialTicks, Color.GREEN); } From fe8ec19b6d8e321a08d0300be5b7a25ab4be7226 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 15 Jun 2023 22:07:44 -0500 Subject: [PATCH 596/935] Fix `renderRaytraces` crash --- src/main/java/baritone/utils/PathRenderer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index df0d5b0ca..15ae73696 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -115,7 +115,6 @@ public static void render(RenderEvent event, PathingBehavior behavior) { settings.renderPathAsLine.value = true; for (Pair line : behavior.baritone.elytra.lines) { emitLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); - tessellator.draw(); } settings.renderPathAsLine.value = orig; IRenderer.endLines(settings.renderPathIgnoreDepth.value); From a9e9cd978df262403c3a7571ca15187aa0a21bbe Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 15 Jun 2023 22:59:01 -0500 Subject: [PATCH 597/935] cancel lol --- src/main/java/baritone/Elytra.java | 8 ++++++++ .../command/defaults/ExecutionControlCommands.java | 2 ++ .../baritone/command/defaults/ForceCancelCommand.java | 2 ++ 3 files changed, 12 insertions(+) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 082344f6c..f2d28b0f2 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -54,6 +54,14 @@ public void path(BlockPos destination) { public int sinceFirework; public BlockPos goal; + public void cancel() { + this.path.clear(); + this.goal = null; + this.playerNear = 0; + this.goingTo = 0; + this.sinceFirework = 0; + } + private void pathfindAroundObstacles() { outer: while (true) { diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index 6f6293ccd..66b2d156d 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -17,6 +17,7 @@ package baritone.command.defaults; +import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; @@ -180,6 +181,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { paused[0] = false; } baritone.getPathingBehavior().cancelEverything(); + ((Baritone) baritone).elytra.cancel(); logDirect("ok canceled"); } diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index 513d61bcb..3a54ce69e 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -17,6 +17,7 @@ package baritone.command.defaults; +import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.behavior.IPathingBehavior; import baritone.api.command.Command; @@ -39,6 +40,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); pathingBehavior.cancelEverything(); pathingBehavior.forceCancel(); + ((Baritone) baritone).elytra.cancel(); logDirect("ok force canceled"); } From e01093eb9aa19cff9bed1094f0f9305a82310de3 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 15 Jun 2023 20:59:08 -0700 Subject: [PATCH 598/935] build with pathfinder --- .../baritone/gradle/task/ProguardTask.java | 30 +++++++++++-------- .../baritone/gradle/util/Determinizer.java | 15 ++++++---- scripts/proguard.pro | 2 +- src/main/java/baritone/Elytra.java | 2 ++ 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 1789435f7..1c329ee2c 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -68,17 +68,18 @@ public class ProguardTask extends BaritoneGradleTask { private List requiredLibraries; private File mixin; + private File pathfinder; @TaskAction protected void exec() throws Exception { super.verifyArtifacts(); // "Haha brady why don't you make separate tasks" - processArtifact(); downloadProguard(); extractProguard(); generateConfigs(); acquireDependencies(); + processArtifact(); proguardApi(); proguardStandalone(); cleanup(); @@ -89,7 +90,7 @@ private void processArtifact() throws Exception { Files.delete(this.artifactUnoptimizedPath); } - Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), Optional.empty()); + Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), Arrays.asList(pathfinder), false); } private void downloadProguard() throws Exception { @@ -114,8 +115,7 @@ private String getJavaBinPathForProguard() throws Exception { try { path = findJavaPathByGradleConfig(); if (path != null) return path; - } - catch (Exception ex) { + } catch (Exception ex) { System.err.println("Unable to find java by javaCompile options"); ex.printStackTrace(); } @@ -123,8 +123,7 @@ private String getJavaBinPathForProguard() throws Exception { try { path = findJavaByJavaHome(); if (path != null) return path; - } - catch(Exception ex) { + } catch (Exception ex) { System.err.println("Unable to find java by JAVA_HOME"); ex.printStackTrace(); } @@ -132,7 +131,7 @@ private String getJavaBinPathForProguard() throws Exception { path = findJavaByGradleCurrentRuntime(); if (path != null) return path; - + throw new Exception("Unable to find java to determine ProGuard libraryjars. Please specify forkOptions.executable in javaCompile," + " JAVA_HOME environment variable, or make sure to run Gradle with the correct JDK (a v1.8 only)"); } @@ -281,6 +280,9 @@ private void acquireDependencies() throws Exception { if (lib.contains("mixin")) { mixin = file; } + if (lib.contains("nether-pathfinder")) { + pathfinder = file; + } Files.copy(file.toPath(), getTemporaryFile("tempLibraries/" + lib + ".jar"), REPLACE_EXISTING); } } @@ -288,6 +290,9 @@ private void acquireDependencies() throws Exception { if (mixin == null) { throw new IllegalStateException("Unable to find mixin jar"); } + if (pathfinder == null) { + throw new IllegalStateException("Unable to find pathfinder jar"); + } } // a bunch of epic stuff to get the path to the cached jar @@ -375,14 +380,14 @@ private List getUsedMappingTypes(Set reobf) { private void proguardApi() throws Exception { runProguard(getTemporaryFile(PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), Optional.empty()); - Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeApiPath.toString(), Optional.of(mixin)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), Arrays.asList(pathfinder), false); + Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeApiPath.toString(), Arrays.asList(pathfinder, mixin), true); } private void proguardStandalone() throws Exception { runProguard(getTemporaryFile(PROGUARD_STANDALONE_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), Optional.empty()); - Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeStandalonePath.toString(), Optional.of(mixin)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), Arrays.asList(pathfinder), false); + Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeStandalonePath.toString(), Arrays.asList(pathfinder, mixin), true); } private void cleanup() { @@ -409,7 +414,7 @@ private void runProguard(Path config) throws Exception { Path workingDirectory = getTemporaryFile(""); Path proguardJar = workingDirectory.relativize(getTemporaryFile(PROGUARD_JAR)); config = workingDirectory.relativize(config); - + // Honestly, if you still have spaces in your path at this point, you're SOL. Process p = new ProcessBuilder("java", "-jar", proguardJar.toString(), "@" + config.toString()) @@ -423,6 +428,7 @@ private void runProguard(Path config) throws Exception { // Halt the current thread until the process is complete, if the exit code isn't 0, throw an exception int exitCode = p.waitFor(); if (exitCode != 0) { + Thread.sleep(1000); throw new IllegalStateException("Proguard exited with code " + exitCode); } } diff --git a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java index d9f475a5c..40d17ef03 100644 --- a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java +++ b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java @@ -22,7 +22,10 @@ import com.google.gson.stream.JsonWriter; import java.io.*; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; @@ -36,10 +39,11 @@ */ public class Determinizer { - public static void determinize(String inputPath, String outputPath, Optional toInclude) throws IOException { + public static void determinize(String inputPath, String outputPath, List toInclude, boolean doForgeReplacementOfMetaInf) throws IOException { System.out.println("Running Determinizer"); System.out.println(" Input path: " + inputPath); System.out.println(" Output path: " + outputPath); + System.out.println(" Shade: " + toInclude); try ( JarFile jarFile = new JarFile(new File(inputPath)); @@ -63,7 +67,7 @@ public static void determinize(String inputPath, String outputPath, Optional path = new ArrayList<>(); public void path(BlockPos destination) { + playerNear = 0; + goingTo = 0; path = Arrays.stream(NetherPathfinder.pathFind(146008555100680L, false, false, ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z, destination.getX(), destination.getY(), destination.getZ())).mapToObj(BlockPos::fromLong).map(BetterBlockPos::new).collect(Collectors.toList()); removeBacktracks(); } From ef4cdfd646eda11108b1b408c0987b70b36f1802 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 16 Jun 2023 19:22:37 +0200 Subject: [PATCH 599/935] Fix render bug caused by color bug fix --- src/main/java/baritone/utils/GuiClick.java | 2 +- src/main/java/baritone/utils/IRenderer.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 1716d74b6..72d436928 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -119,7 +119,7 @@ public void onRender() { if (clickStart != null && !clickStart.equals(currentMouseOver)) { GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - GlStateManager.color(Color.RED.getColorComponents(null)[0], Color.RED.getColorComponents(null)[1], Color.RED.getColorComponents(null)[2], 0.4F); + IRenderer.glColor(Color.RED, 0.4F); GlStateManager.glLineWidth(Baritone.settings().pathRenderLineWidthPixels.value); GlStateManager.disableTexture2D(); GlStateManager.depthMask(false); diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 2134bcb99..680d7e380 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -116,7 +116,7 @@ static void emitAABB(AxisAlignedBB aabb, double expand) { } static void drawAABB(AxisAlignedBB aabb) { - buffer.begin(GL_LINES, DefaultVertexFormats.POSITION); + buffer.begin(GL_LINES, DefaultVertexFormats.POSITION_COLOR); emitAABB(aabb); tessellator.draw(); } From f1bf1e8663724b3cb9dc0d40ce2b06807b2ff2aa Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sat, 17 Jun 2023 00:36:35 +0200 Subject: [PATCH 600/935] Use IRenderer setup methods --- src/main/java/baritone/utils/GuiClick.java | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 72d436928..c378aca53 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -117,21 +117,11 @@ public void onRender() { // drawSingleSelectionBox WHEN? PathRenderer.drawManySelectionBoxes(e, Collections.singletonList(currentMouseOver), Color.CYAN); if (clickStart != null && !clickStart.equals(currentMouseOver)) { - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - IRenderer.glColor(Color.RED, 0.4F); - GlStateManager.glLineWidth(Baritone.settings().pathRenderLineWidthPixels.value); - GlStateManager.disableTexture2D(); - GlStateManager.depthMask(false); - GlStateManager.disableDepth(); + IRenderer.startLines(Color.RED, Baritone.settings().pathRenderLineWidthPixels.value, true); BetterBlockPos a = new BetterBlockPos(currentMouseOver); BetterBlockPos b = new BetterBlockPos(clickStart); - IRenderer.drawAABB(new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); - GlStateManager.enableDepth(); - - GlStateManager.depthMask(true); - GlStateManager.enableTexture2D(); - GlStateManager.disableBlend(); + IRenderer.emitAABB(new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); + IRenderer.endLines(true); } } } From e00e0032b49ac2f0c29f3cf3f6e70ec1ceaccd01 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sat, 17 Jun 2023 01:40:19 +0200 Subject: [PATCH 601/935] Actually use stack hashes --- .../api/utils/BlockOptionalMetaLookup.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java index 6d236e90e..6479854bc 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java @@ -17,6 +17,7 @@ package baritone.api.utils; +import baritone.api.utils.accessor.IItemStack; import com.google.common.collect.ImmutableSet; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -29,8 +30,9 @@ import java.util.stream.Stream; public class BlockOptionalMetaLookup { - private final Set blockSet; - private final Set blockStateSet; + private final ImmutableSet blockSet; + private final ImmutableSet blockStateSet; + private final ImmutableSet stackHashes; private final BlockOptionalMeta[] boms; public BlockOptionalMetaLookup(BlockOptionalMeta... boms) { @@ -45,6 +47,7 @@ public BlockOptionalMetaLookup(BlockOptionalMeta... boms) { } this.blockSet = ImmutableSet.copyOf(blocks); this.blockStateSet = ImmutableSet.copyOf(blockStates); + this.stackHashes = ImmutableSet.copyOf(stacks); } public BlockOptionalMetaLookup(Block... blocks) { @@ -75,13 +78,9 @@ public boolean has(IBlockState state) { } public boolean has(ItemStack stack) { - for (BlockOptionalMeta bom : boms) { - if (bom.matches(stack)) { - return true; - } - } - - return false; + int hash = ((IItemStack) (Object) stack).getBaritoneHash(); + return stackHashes.contains(hash) + || stackHashes.contains(hash - stack.getItemDamage()); } public List blocks() { From 8c124163483755aa2ad350e2822558077a51590d Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 16 Jun 2023 18:59:57 -0500 Subject: [PATCH 602/935] Use new nether-pathfinder API Doesn't stitch segments, just partially functional --- build.gradle | 9 +++- src/main/java/baritone/Elytra.java | 44 +++++++++++++++++-- .../command/defaults/ElytraCommand.java | 2 +- 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 7909911be..8e952df73 100755 --- a/build.gradle +++ b/build.gradle @@ -88,6 +88,11 @@ repositories { name = 'impactdevelopment-repo' url = 'https://impactdevelopment.github.io/maven/' } + + maven { + name = 'babbaj-repo' + url = 'https://babbaj.github.io/maven/' + } } dependencies { @@ -100,9 +105,9 @@ dependencies { exclude module: 'commons-io' exclude module: 'log4j-core' } - runtime launchCompile('dev.babbaj:nether-pathfinder:1.3') + runtime launchCompile('dev.babbaj:nether-pathfinder:0.2') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:1.3' + implementation 'dev.babbaj:nether-pathfinder:0.2' } mixin { diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index caa819fb4..69fee5450 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -26,6 +26,7 @@ import baritone.utils.BlockStateInterface; import com.mojang.realmsclient.util.Pair; import dev.babbaj.pathfinder.NetherPathfinder; +import dev.babbaj.pathfinder.PathSegment; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; @@ -44,13 +45,48 @@ public class Elytra extends Behavior implements Helper { public List path = new ArrayList<>(); - public void path(BlockPos destination) { - playerNear = 0; - goingTo = 0; - path = Arrays.stream(NetherPathfinder.pathFind(146008555100680L, false, false, ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z, destination.getX(), destination.getY(), destination.getZ())).mapToObj(BlockPos::fromLong).map(BetterBlockPos::new).collect(Collectors.toList()); + private long context; + private Long seed; + + public void path(long seed, BlockPos destination) { + this.setupContext(seed); + + this.playerNear = 0; + this.goingTo = 0; + + final PathSegment segment = NetherPathfinder.pathFind( + this.context, + ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z, + destination.getX(), destination.getY(), destination.getZ() + ); + + this.path = Arrays.stream(segment.packed) + .mapToObj(BlockPos::fromLong) + .map(BetterBlockPos::new) + .collect(Collectors.toList()); + + if (!segment.finished) { + logDirect("segment not finished. path incomplete"); + } + removeBacktracks(); } + private void setupContext(long seed) { + if (!Objects.equals(this.seed, seed)) { + this.freeContext(); + this.context = NetherPathfinder.newContext(seed); + } + this.seed = seed; + } + + private void freeContext() { + if (this.context != 0) { + NetherPathfinder.freeContext(this.context); + } + this.context = 0; + } + public int playerNear; public int goingTo; public int sinceFirework; diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 2d2e3f0ee..99ddaa8e4 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -41,7 +41,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); args.requireMax(0); GoalXZ goal = (GoalXZ) customGoalProcess.getGoal(); - ((Baritone) baritone).elytra.path(new BlockPos(goal.getX(), 64, goal.getZ())); + ((Baritone) baritone).elytra.path(146008555100680L, new BlockPos(goal.getX(), 64, goal.getZ())); } @Override From 53a0069704b115657bfd470940d443544c61ca03 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 16 Jun 2023 19:54:37 -0500 Subject: [PATCH 603/935] Remove Java pathfinder in preparation for `insertChunkData` --- src/main/java/baritone/Elytra.java | 166 ++++------------------------- 1 file changed, 18 insertions(+), 148 deletions(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 69fee5450..77a09f369 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -48,6 +48,16 @@ public class Elytra extends Behavior implements Helper { private long context; private Long seed; + public int playerNear; + public int goingTo; + public int sinceFirework; + public BlockPos goal; + public List> lines = new ArrayList<>(); + + protected Elytra(Baritone baritone) { + super(baritone); + } + public void path(long seed, BlockPos destination) { this.setupContext(seed); @@ -87,11 +97,6 @@ private void freeContext() { this.context = 0; } - public int playerNear; - public int goingTo; - public int sinceFirework; - public BlockPos goal; - public void cancel() { this.path.clear(); this.goal = null; @@ -100,147 +105,10 @@ public void cancel() { this.sinceFirework = 0; } - private void pathfindAroundObstacles() { - outer: - while (true) { - int rangeStartIncl = playerNear; - int rangeEndExcl = playerNear; - while (rangeEndExcl < path.size() && ctx.world().isBlockLoaded(path.get(rangeEndExcl), false)) { - rangeEndExcl++; - } - if (rangeStartIncl >= rangeEndExcl) { - // not loaded yet? - return; - } - if (!passable(ctx.world().getBlockState(path.get(rangeStartIncl)))) { - // we're in a wall - return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: - } - for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { - if (!clearView(pathAt(i), pathAt(i + 1))) { - // obstacle. where do we return to pathing? - // find the next valid segment - for (int j = i + 1; j < rangeEndExcl - 1; j++) { - if (clearView(pathAt(j), pathAt(j + 1))) { - // found it - // path from i to j - List newPath = simplePathfind(path.get(i), path.get(j)); - if (newPath == null) { - logDirect("no path"); - return; - } - path.subList(i + 1, j).clear(); - for (int k = newPath.size() - 1; k >= 0; k--) { - path.add(i + 1, newPath.get(k)); - } - logDirect("replaced path starting at " + path.get(i)); - removeBacktracks(); - break outer; // eventually "continue outer" - } - } - } - } - break; - } - } - - private int manhattanDist(BlockPos start, BlockPos dest) { - return Math.abs(start.getX() - dest.getX()) + Math.abs(start.getY() - dest.getY()) + Math.abs(start.getZ() - dest.getZ()); - } - - private class SearchNode { - BetterBlockPos pos; - int dist; - int heuristic; - SearchNode prev; - boolean canceled; - - public SearchNode(BetterBlockPos pos, int dist, int heuristic, SearchNode prev) { - this.pos = pos; - this.dist = dist; - this.heuristic = heuristic; - this.prev = prev; - } - } - - private List simplePathfind(BetterBlockPos start, BetterBlockPos dest) { - Map map = new HashMap<>(); - PriorityQueue queue = new PriorityQueue<>(Comparator.comparingInt(node -> node.dist + node.heuristic)); - SearchNode origin = new SearchNode(start, 0, manhattanDist(start, dest) * 10, null); - map.put(start, origin); - queue.add(origin); - int count = 0; - while (!queue.isEmpty()) { - if (count++ > 10000) { - logDirect("oopsie"); - return null; - } - SearchNode node = queue.poll(); - if (node.canceled) { - continue; - } - if (node.pos.equals(dest)) { - List path = new ArrayList<>(); - while (node != null) { - path.add(node.pos); - node = node.prev; - } - Collections.reverse(path); - return simplify(path); - } - BetterBlockPos[] adjs = new BetterBlockPos[]{node.pos.up(), node.pos.down(), node.pos.north(), node.pos.south(), node.pos.east(), node.pos.west()}; - boolean nearAWall = false; - for (BetterBlockPos adj : adjs) { - if (!passable(ctx.world().getBlockState(adj))) { - nearAWall = true; - break; - } - } - for (BetterBlockPos adj : adjs) { - if (!passable(ctx.world().getBlockState(adj))) { - continue; - } - int cost = node.dist + (nearAWall ? 11 : 10); - if (map.containsKey(adj)) { - if (map.get(adj).dist <= cost) { - continue; - } - map.get(adj).canceled = true; - } - map.put(adj, new SearchNode(adj, cost, manhattanDist(adj, dest) * 10, node)); - queue.add(map.get(adj)); - } - } - return null; - } - - private List simplify(List path) { - List simplified = new ArrayList<>(path); - for (int i = 0; i < simplified.size() - 2; i++) { - BlockPos dir = simplified.get(i + 1).subtract(simplified.get(i)); - while (i + 2 < simplified.size()) { - if (simplified.get(i + 2).subtract(simplified.get(i + 1)).equals(dir)) { - simplified.remove(i + 1); - } else { - break; - } - } - } - return simplified; - } - private Vec3d pathAt(int i) { return new Vec3d(path.get(i).x + 0.5, path.get(i).y + 0.5, path.get(i).z + 0.5); } - - public List> lines = new ArrayList<>(); - - protected Elytra(Baritone baritone) { - super(baritone); - } - - @Override public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { @@ -252,7 +120,6 @@ public void onTick(TickEvent event) { fixNearPlayer(); baritone.getInputOverrideHandler().clearAllKeys(); lines.clear(); - pathfindAroundObstacles(); if (ctx.player().isElytraFlying()) { if (ctx.player().collidedHorizontally) { logDirect("hbonk"); @@ -323,7 +190,9 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat } private boolean firework() { - return ctx.world().loadedEntityList.stream().anyMatch(x -> (x instanceof EntityFireworkRocket) && ((EntityFireworkRocket) x).isAttachedToEntity()); + // TODO: Validate that the EntityFireworkRocket is attached to ctx.player() + return ctx.world().loadedEntityList.stream() + .anyMatch(x -> (x instanceof EntityFireworkRocket) && ((EntityFireworkRocket) x).isAttachedToEntity()); } private boolean isClear(Vec3d start, Vec3d dest) { @@ -390,7 +259,7 @@ private static boolean passable(IBlockState state) { return state.getMaterial() == Material.AIR; } - public static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, boolean firework) { + private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, boolean firework) { double motionX = motion.x; double motionY = motion.y; double motionZ = motion.z; @@ -438,7 +307,7 @@ public static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, b return new Vec3d(motionX, motionY, motionZ); } - public void fixNearPlayer() { + private void fixNearPlayer() { BetterBlockPos pos = ctx.playerFeet(); for (int i = playerNear; i >= Math.max(playerNear - 1000, 0); i -= 10) { if (path.get(i).distanceSq(pos) < path.get(playerNear).distanceSq(pos)) { @@ -463,7 +332,7 @@ public void fixNearPlayer() { //System.out.println(playerNear); } - public void removeBacktracks() { + private void removeBacktracks() { Map positionFirstSeen = new HashMap<>(); for (int i = 0; i < path.size(); i++) { BetterBlockPos pos = path.get(i); @@ -479,7 +348,8 @@ public void removeBacktracks() { } } - public RayTraceResult rayTraceBlocks(Vec3d start, Vec3d end) { + // TODO: Use the optimized version from builder-2 + private RayTraceResult rayTraceBlocks(Vec3d start, Vec3d end) { int x1 = MathHelper.floor(end.x); int y1 = MathHelper.floor(end.y); int z1 = MathHelper.floor(end.z); From 5b39eb5041e60f0aad6cf6284836ab78954864ae Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 16 Jun 2023 20:38:29 -0500 Subject: [PATCH 604/935] clean up --- src/main/java/baritone/Elytra.java | 139 +++++++++++++++-------------- 1 file changed, 74 insertions(+), 65 deletions(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 77a09f369..5b748403e 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -43,16 +43,18 @@ public class Elytra extends Behavior implements Helper { + // Used exclusively for PathRenderer + public List> lines = new ArrayList<>(); + public BlockPos goal; + public List path = new ArrayList<>(); private long context; private Long seed; public int playerNear; - public int goingTo; - public int sinceFirework; - public BlockPos goal; - public List> lines = new ArrayList<>(); + private int goingTo; + private int sinceFirework; protected Elytra(Baritone baritone) { super(baritone); @@ -117,79 +119,83 @@ public void onTick(TickEvent event) { if (path.isEmpty()) { return; } + fixNearPlayer(); - baritone.getInputOverrideHandler().clearAllKeys(); + baritone.getInputOverrideHandler().clearAllKeys(); // FIXME: This breaks the regular path-finder lines.clear(); - if (ctx.player().isElytraFlying()) { - if (ctx.player().collidedHorizontally) { - logDirect("hbonk"); - } - if (ctx.player().collidedVertically) { - logDirect("vbonk"); - } - Vec3d start = ctx.playerFeetAsVec(); - boolean firework = firework(); - sinceFirework++; - if (!firework - && sinceFirework > 10 - && (Baritone.settings().wasteFireworks.value || ctx.player().posY < path.get(goingTo).y + 5) // don't firework if trying to descend - && (ctx.player().posY < path.get(goingTo).y - 5 || ctx.playerFeetAsVec().distanceTo(new Vec3d(path.get(goingTo).x + 0.5, ctx.player().posY, path.get(goingTo).z + 0.5)) > 5) // UGH!!!!!!! - && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending - ) { - logDirect("firework"); - ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); - sinceFirework = 0; - } - long t = System.currentTimeMillis(); - for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) - int[] heights = firework ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost - boolean requireClear = relaxation == 0; - int steps = relaxation < 2 ? firework ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; - int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps - //int minStep = Math.max(0, playerNear - relaxation); - int minStep = playerNear; - for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { - for (int dy : heights) { - Vec3d dest = pathAt(i).add(0, dy, 0); - if (dy != 0) { - if (i + lookahead >= path.size()) { + + if (!ctx.player().isElytraFlying()) { + return; + } + if (ctx.player().collidedHorizontally) { + logDirect("hbonk"); + } + if (ctx.player().collidedVertically) { + logDirect("vbonk"); + } + + Vec3d start = ctx.playerFeetAsVec(); + boolean firework = isFireworkActive(); + sinceFirework++; + if (!firework + && sinceFirework > 10 + && (Baritone.settings().wasteFireworks.value || ctx.player().posY < path.get(goingTo).y + 5) // don't firework if trying to descend + && (ctx.player().posY < path.get(goingTo).y - 5 || start.distanceTo(new Vec3d(path.get(goingTo).x + 0.5, ctx.player().posY, path.get(goingTo).z + 0.5)) > 5) // UGH!!!!!!! + && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending + ) { + logDirect("firework"); + ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); + sinceFirework = 0; + } + final long t = System.currentTimeMillis(); + for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) + int[] heights = firework ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost + boolean requireClear = relaxation == 0; + int steps = relaxation < 2 ? firework ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; + int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps + //int minStep = Math.max(0, playerNear - relaxation); + int minStep = playerNear; + for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { + for (int dy : heights) { + Vec3d dest = pathAt(i).add(0, dy, 0); + if (dy != 0) { + if (i + lookahead >= path.size()) { + continue; + } + if (start.distanceTo(dest) < 40) { + if (!clearView(dest, pathAt(i + lookahead).add(0, dy, 0)) || !clearView(dest, pathAt(i + lookahead))) { + // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position continue; } - if (start.distanceTo(dest) < 40) { - if (!clearView(dest, pathAt(i + lookahead).add(0, dy, 0)) || !clearView(dest, pathAt(i + lookahead))) { - // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position - continue; - } - } else { - // but if it's far away, allow gaining altitude if we could lose it again by the time we get there - if (!clearView(dest, pathAt(i))) { - continue; - } - } - } - if (requireClear ? isClear(start, dest) : clearView(start, dest)) { - Rotation rot = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()); - long a = System.currentTimeMillis(); - Float pitch = solvePitch(dest.subtract(start), steps, relaxation == 2); - if (pitch == null) { - baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), ctx.playerRotations().getPitch()), false); + } else { + // but if it's far away, allow gaining altitude if we could lose it again by the time we get there + if (!clearView(dest, pathAt(i))) { continue; } - long b = System.currentTimeMillis(); - System.out.println("Solved pitch in " + (b - a) + " total time " + (b - t)); - goingTo = i; - goal = path.get(i).add(0, dy, 0); - baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), pitch), false); - return; } } + if (requireClear ? isClear(start, dest) : clearView(start, dest)) { + Rotation rot = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()); + long a = System.currentTimeMillis(); + Float pitch = solvePitch(dest.subtract(start), steps, relaxation == 2); + if (pitch == null) { + baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), ctx.playerRotations().getPitch()), false); + continue; + } + long b = System.currentTimeMillis(); + System.out.println("Solved pitch in " + (b - a) + " total time " + (b - t)); + goingTo = i; + goal = path.get(i).add(0, dy, 0); + baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), pitch), false); + return; + } } } - logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); } + logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); } - private boolean firework() { + private boolean isFireworkActive() { // TODO: Validate that the EntityFireworkRocket is attached to ctx.player() return ctx.world().loadedEntityList.stream() .anyMatch(x -> (x instanceof EntityFireworkRocket) && ((EntityFireworkRocket) x).isAttachedToEntity()); @@ -218,7 +224,7 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate) { goalDirection = goalDirection.normalize(); Rotation good = RotationUtils.calcRotationFromVec3d(new Vec3d(0, 0, 0), goalDirection, ctx.playerRotations()); // lazy lol - boolean firework = firework(); + boolean firework = isFireworkActive(); Float bestPitch = null; double bestDot = Double.NEGATIVE_INFINITY; Vec3d motion = new Vec3d(ctx.player().motionX, ctx.player().motionY, ctx.player().motionZ); @@ -268,11 +274,14 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, float pitchBase = -MathHelper.cos(-rotationPitch * 0.017453292F); float pitchHeight = MathHelper.sin(-rotationPitch * 0.017453292F); Vec3d lookDirection = new Vec3d(flatX * pitchBase, pitchHeight, flatZ * pitchBase); + if (firework) { + // See EntityFireworkRocket motionX += lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motionX) * 0.5; motionY += lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motionY) * 0.5; motionZ += lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motionZ) * 0.5; } + float pitchRadians = rotationPitch * 0.017453292F; double pitchBase2 = Math.sqrt(lookDirection.x * lookDirection.x + lookDirection.z * lookDirection.z); double flatMotion = Math.sqrt(motionX * motionX + motionZ * motionZ); From 800cb2e747a487fb7cb035764fc7cffb308dc562 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 16 Jun 2023 20:53:53 -0500 Subject: [PATCH 605/935] Replace sublist troll in PathRenderer with `visiblePath` --- src/main/java/baritone/Elytra.java | 49 ++++++++++++------- .../java/baritone/utils/PathRenderer.java | 2 +- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 5b748403e..e8e83c5b7 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -44,20 +44,25 @@ public class Elytra extends Behavior implements Helper { // Used exclusively for PathRenderer - public List> lines = new ArrayList<>(); + public List> lines; public BlockPos goal; + public List visiblePath; - public List path = new ArrayList<>(); - + // NetherPathfinder stuff private long context; private Long seed; + // yay! + private List path; public int playerNear; private int goingTo; private int sinceFirework; protected Elytra(Baritone baritone) { super(baritone); + this.lines = new ArrayList<>(); + this.visiblePath = Collections.emptyList(); + this.path = new ArrayList<>(); } public void path(long seed, BlockPos destination) { @@ -100,6 +105,7 @@ private void freeContext() { } public void cancel() { + this.visiblePath = Collections.emptyList(); this.path.clear(); this.goal = null; this.playerNear = 0; @@ -120,7 +126,12 @@ public void onTick(TickEvent event) { return; } - fixNearPlayer(); + playerNear = fixNearPlayer(playerNear); + visiblePath = path.subList( + Math.max(playerNear - 30, 0), + Math.min(playerNear + 30, path.size()) + ); + baritone.getInputOverrideHandler().clearAllKeys(); // FIXME: This breaks the regular path-finder lines.clear(); @@ -316,29 +327,29 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, return new Vec3d(motionX, motionY, motionZ); } - private void fixNearPlayer() { - BetterBlockPos pos = ctx.playerFeet(); - for (int i = playerNear; i >= Math.max(playerNear - 1000, 0); i -= 10) { - if (path.get(i).distanceSq(pos) < path.get(playerNear).distanceSq(pos)) { - playerNear = i; // intentional: this changes the bound of the loop + private int fixNearPlayer(int index) { + final BetterBlockPos pos = ctx.playerFeet(); + for (int i = index; i >= Math.max(index - 1000, 0); i -= 10) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop } } - for (int i = playerNear; i < Math.min(playerNear + 1000, path.size()); i += 10) { - if (path.get(i).distanceSq(pos) < path.get(playerNear).distanceSq(pos)) { - playerNear = i; // intentional: this changes the bound of the loop + for (int i = index; i < Math.min(index + 1000, path.size()); i += 10) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop } } - for (int i = playerNear; i >= Math.max(playerNear - 50, 0); i--) { - if (path.get(i).distanceSq(pos) < path.get(playerNear).distanceSq(pos)) { - playerNear = i; // intentional: this changes the bound of the loop + for (int i = index; i >= Math.max(index - 50, 0); i--) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop } } - for (int i = playerNear; i < Math.min(playerNear + 50, path.size()); i++) { - if (path.get(i).distanceSq(pos) < path.get(playerNear).distanceSq(pos)) { - playerNear = i; // intentional: this changes the bound of the loop + for (int i = index; i < Math.min(index + 50, path.size()); i++) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop } } - //System.out.println(playerNear); + return index; } private void removeBacktracks() { diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 15ae73696..934375c4c 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -105,7 +105,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { drawPath(next.getPath().positions(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); } - drawPath(behavior.baritone.elytra.path.subList(Math.max(behavior.baritone.elytra.playerNear - 30, 0), Math.min(behavior.baritone.elytra.playerNear + 30, behavior.baritone.elytra.path.size())), 0, Color.RED, false, 0, 0); + drawPath(behavior.baritone.elytra.visiblePath, 0, Color.RED, false, 0, 0); if (behavior.baritone.elytra.goal != null) { drawGoal(renderView, new GoalBlock(behavior.baritone.elytra.goal), partialTicks, Color.GREEN); } From cb7c2d71710caa43a352675e566b43374eb2ed55 Mon Sep 17 00:00:00 2001 From: 0x22 <0x22@futureclient.net> Date: Fri, 16 Jun 2023 21:59:06 -0400 Subject: [PATCH 606/935] 1.12.2 build script overhaul. - Updated to ForgeGradle 4.0, MixinGradle 0.7 and Gradle 6.9.4 - Added a hack to run the game on arm64 on Mac OS X natively. --- .gitignore | 2 + build.gradle | 136 +++++++---- buildSrc/build.gradle | 4 +- .../baritone/gradle/task/ProguardTask.java | 226 +++++++----------- .../baritone/gradle/util/MappingType.java | 29 --- .../baritone/gradle/util/ReobfWrapper.java | 63 ----- gradle/wrapper/gradle-wrapper.jar | Bin 54706 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 55 +++-- gradlew.bat | 43 ++-- hacks.gradle | 161 +++++++++++++ scripts/proguard.pro | 2 +- 12 files changed, 404 insertions(+), 320 deletions(-) delete mode 100644 buildSrc/src/main/java/baritone/gradle/util/MappingType.java delete mode 100644 buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java create mode 100644 hacks.gradle diff --git a/.gitignore b/.gitignore index d4c25ad90..5b420a0e4 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,5 @@ baritone_Client.launch .vscode/launch.json +libs/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar +libs/java-objc-bridge-1.1.jar diff --git a/build.gradle b/build.gradle index 8e952df73..70f8a7adf 100755 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ buildscript { repositories { maven { name = 'forge' - url = 'http://files.minecraftforge.net/maven' + url = 'https://files.minecraftforge.net/maven' } maven { name = 'SpongePowered' @@ -32,18 +32,19 @@ buildscript { } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' - classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT' + classpath 'net.minecraftforge.gradle:ForgeGradle:4.+' // TODO: 5.+. `doHackyStuff` relies on 4.x internals. + classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT' } } - import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask apply plugin: 'java' -apply plugin: 'maven' -apply plugin: 'net.minecraftforge.gradle.tweaker-client' +apply plugin: 'maven-publish' +apply plugin: 'net.minecraftforge.gradle' +apply from: 'hacks.gradle' +ext.doHackyStuff(Class.forName('net.minecraftforge.gradle.mcp.task.GenerateSRG')) // TODO: fg 5.0 - `ext.doHackyStuff(Class.forName('net.minecraftforge.gradle.mcp.tasks.GenerateSRG'))` apply plugin: 'org.spongepowered.mixin' sourceCompatibility = targetCompatibility = '1.8' @@ -53,8 +54,19 @@ compileJava { } sourceSets { + api { + compileClasspath += main.compileClasspath + } + main { + compileClasspath += api.output + } + test { + compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output + runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output + } launch { compileClasspath += main.compileClasspath + main.runtimeClasspath + main.output + runtimeClasspath += main.compileClasspath + main.runtimeClasspath + main.output } schematica_api { @@ -67,13 +79,26 @@ sourceSets { } minecraft { - version = '1.12.2' - mappings = 'stable_39' - tweakClass = 'baritone.launch.BaritoneTweaker' - runDir = 'run' - - // The sources jar should use SRG names not MCP to ensure compatibility with all mappings - makeObfSourceJar = true + mappings channel: 'stable', version: '39-1.12' + runs { + def nativesOutput = extractNatives.output // TODO: fg 5.0 - `def nativesOutput = extractNatives.output.get()` + println("[Baritoe] Detected natives: ${nativesOutput}") + client { + workingDirectory project.file('run') + source sourceSets.launch + + main 'net.minecraft.launchwrapper.Launch' + + args '--gameDir', '.' + args '--version', '1.12.2' + args '--assetsDir', downloadAssets.output + args '--assetIndex', '{asset_index}' + args '--accessToken', 'INVALID' + + args '--tweakClass', 'baritone.launch.BaritoneTweaker' + jvmArgs "-Dorg.lwjgl.librarypath=${nativesOutput}" + } + } } repositories { @@ -95,23 +120,66 @@ repositories { } } +// fix forge gradle 4+ bug with 1.12.2 +afterEvaluate { + configurations.minecraft { + exclude group: 'net.minecraftforge', module: 'mergetool' + } +} + +// lwjgl2 hack for running game on arm64 mac os +afterEvaluate { + def os = org.gradle.internal.os.OperatingSystem.current() + if (os.isMacOsX()) { + def arch = System.getProperty("os.arch").toLowerCase() + println("Detected Mac OS X running on ${arch}") + if (arch == "aarch64") { + println("Configurating aarch64 dependencies.") + + configurations.minecraft { + exclude group: 'ca.weblite', module: 'java-objc-bridge' + } + + dependencies { + // https://github.com/MinecraftMachina/lwjgl/releases/download/2.9.4-20150209-mmachina.2/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar + minecraft files("libs/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar") // TODO: use prism launcher maven + // https://github.com/MinecraftMachina/Java-Objective-C-Bridge/releases/download/1.1.0-mmachina.1/java-objc-bridge-1.1.jar + minecraft files("libs/java-objc-bridge-1.1.jar") // TODO: use prism launcher maven + minecraft(group: 'net.java.dev.jna', name: 'jna') { + version { + strictly '5.12.1' + } + } + } + } + } +} + dependencies { - runtime launchCompile('com.github.ImpactDevelopment:SimpleTweaker:1.2') - runtime launchCompile('org.spongepowered:mixin:0.7.11-SNAPSHOT') { + minecraft group: 'net.minecraft', name: 'joined', version: '1.12.2' + implementation(group: 'net.minecraft', name: 'launchwrapper', version: '1.12') { + transitive = false + } + + def asmVersion = '9.5' + implementation group: 'org.ow2.asm', name: 'asm', version: asmVersion + implementation group: 'org.ow2.asm', name: 'asm-tree', version: asmVersion + implementation group: 'org.ow2.asm', name: 'asm-commons', version: asmVersion + implementation group: 'org.ow2.asm', name: 'asm-analysis', version: asmVersion + implementation group: 'org.ow2.asm', name: 'asm-util', version: asmVersion + + launchImplementation('com.github.ImpactDevelopment:SimpleTweaker:1.2') + launchImplementation('org.spongepowered:mixin:0.7.11-SNAPSHOT') { // Mixin includes a lot of dependencies that are too up-to-date - exclude module: 'launchwrapper' - exclude module: 'guava' - exclude module: 'gson' - exclude module: 'commons-io' - exclude module: 'log4j-core' + transitive = false } - runtime launchCompile('dev.babbaj:nether-pathfinder:0.2') + launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' + launchImplementation('dev.babbaj:nether-pathfinder:0.2') testImplementation 'junit:junit:4.12' implementation 'dev.babbaj:nether-pathfinder:0.2' } mixin { - defaultObfuscationEnv searge add sourceSets.launch, 'mixins.baritone.refmap.json' } @@ -137,7 +205,7 @@ jar { manifest { attributes( 'MixinConfigs': 'mixins.baritone.json', - + 'TweakClass': 'baritone.launch.BaritoneTweaker', 'Implementation-Title': 'Baritone', 'Implementation-Version': version ) @@ -152,25 +220,3 @@ task proguard(type: ProguardTask) { task createDist(type: CreateDistTask, dependsOn: proguard) build.finalizedBy(createDist) - -install { - def jarApiName = String.format("%s-api-%s", rootProject.name, version.toString()) - def jarApiForgeName = String.format("%s-api-forge-%s", rootProject.name, version.toString()) - def jarSAName = String.format("%s-standalone-%s", rootProject.name, version.toString()) - def jarSAForgeName = String.format("%s-standalone-forge-%s", rootProject.name, version.toString()) - - artifacts { - archives file("$buildDir/libs/" + jarApiName + ".jar") - archives file("$buildDir/libs/" + jarApiForgeName + ".jar") - archives file("$buildDir/libs/" + jarSAName + ".jar") - archives file("$buildDir/libs/" + jarSAForgeName + ".jar") - } - repositories.mavenInstaller { - addFilter('api') { artifact, file -> artifact.name == "baritone-api" } - addFilter('api-forge') { artifact, file -> artifact.name == "baritone-api-forge" } - addFilter('standalone') { artifact, file -> artifact.name == "baritone-standalone" } - addFilter('standalone-forge') { artifact, file -> artifact.name == "baritone-standalone-forge" } - } -} - -install.dependsOn(build) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 2ac49af0f..8ab0f7014 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -20,6 +20,6 @@ repositories { } dependencies { - compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5' - compile group: 'commons-io', name: 'commons-io', version: '2.6' + implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' + implementation group: 'commons-io', name: 'commons-io', version: '2.6' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 1c329ee2c..435eabcf3 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -18,39 +18,33 @@ package baritone.gradle.task; import baritone.gradle.util.Determinizer; -import baritone.gradle.util.MappingType; -import baritone.gradle.util.ReobfWrapper; import org.apache.commons.io.IOUtils; -import org.gradle.api.JavaVersion; -import org.gradle.api.NamedDomainObjectContainer; +import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.Dependency; -import org.gradle.api.internal.file.IdentityFileResolver; -import org.gradle.api.internal.plugins.DefaultConvention; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskCollection; import org.gradle.api.tasks.compile.ForkOptions; import org.gradle.api.tasks.compile.JavaCompile; -import org.gradle.internal.Pair; import org.gradle.internal.jvm.Jvm; -import org.gradle.internal.jvm.inspection.DefaultJvmVersionDetector; -import org.gradle.process.internal.DefaultExecActionFactory; -import java.io.*; +import java.io.File; import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Objects; + +import java.io.*; import java.net.URL; import java.nio.file.Files; -import java.nio.file.Path; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; - /** * @author Brady * @since 10/11/2018 @@ -138,23 +132,16 @@ private String getJavaBinPathForProguard() throws Exception { private String findJavaByGradleCurrentRuntime() { String path = Jvm.current().getJavaExecutable().getAbsolutePath(); - - if (this.validateJavaVersion(path)) { - System.out.println("Using Gradle's runtime Java for ProGuard"); - return path; - } - return null; + System.out.println("Using Gradle's runtime Java for ProGuard"); + return path; } private String findJavaByJavaHome() { final String javaHomeEnv = System.getenv("JAVA_HOME"); if (javaHomeEnv != null) { - String path = Jvm.forHome(new File(javaHomeEnv)).getJavaExecutable().getAbsolutePath(); - if (this.validateJavaVersion(path)) { - System.out.println("Detected Java path by JAVA_HOME"); - return path; - } + System.out.println("Detected Java path by JAVA_HOME"); + return path; } return null; } @@ -170,19 +157,11 @@ private String findJavaPathByGradleConfig() { if (javacPath != null) { File javacFile = new File(javacPath); if (javacFile.exists()) { - File[] maybeJava = javacFile.getParentFile().listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.equals("java"); - } - }); - + File[] maybeJava = javacFile.getParentFile().listFiles((dir, name) -> name.equals("java")); if (maybeJava != null && maybeJava.length > 0) { String path = maybeJava[0].getAbsolutePath(); - if (this.validateJavaVersion(path)) { - System.out.println("Detected Java path by forkOptions"); - return path; - } + System.out.println("Detected Java path by forkOptions"); + return path; } } } @@ -190,21 +169,8 @@ public boolean accept(File dir, String name) { return null; } - private boolean validateJavaVersion(String java) { - final JavaVersion javaVersion = new DefaultJvmVersionDetector(new DefaultExecActionFactory(new IdentityFileResolver())).getJavaVersion(java); - - if (!javaVersion.getMajorVersion().equals("8")) { - System.out.println("Failed to validate Java version " + javaVersion.toString() + " [" + java + "] for ProGuard libraryjars"); - // throw new RuntimeException("Java version incorrect: " + javaVersion.getMajorVersion() + " for " + java); - return false; - } - - System.out.println("Validated Java version " + javaVersion.toString() + " [" + java + "] for ProGuard libraryjars"); - return true; - } - private void generateConfigs() throws Exception { - Files.copy(getRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), REPLACE_EXISTING); + Files.copy(getRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), StandardCopyOption.REPLACE_EXISTING); // Setup the template that will be used to derive the API and Standalone configs List template = Files.readAllLines(getTemporaryFile(PROGUARD_CONFIG_DEST)); @@ -236,14 +202,37 @@ private void generateConfigs() throws Exception { }); } - private void acquireDependencies() throws Exception { + private static final class Pair { + public final A a; + public final B b; + + private Pair(final A a, final B b) { + this.a = a; + this.b = b; + } + + @Override + public String toString() { + return "Pair{" + + "a=" + this.a + + ", " + + "b=" + this.b + + '}'; + } + } + private void acquireDependencies() throws Exception { // Create a map of all of the dependencies that we are able to access in this project // Likely a better way to do this, I just pair the dependency with the first valid configuration Map> dependencyLookupMap = new HashMap<>(); - getProject().getConfigurations().stream().filter(Configuration::isCanBeResolved).forEach(config -> - config.getAllDependencies().forEach(dependency -> - dependencyLookupMap.putIfAbsent(dependency.getName() + "-" + dependency.getVersion(), Pair.of(config, dependency)))); + Map files = new HashMap<>(); + getProject().getConfigurations().stream().filter(Configuration::isCanBeResolved).forEach(config -> { + for (File file : config.getFiles()) { + files.put(file.getName(), file); + } + config.getAllDependencies().forEach(dependency -> + dependencyLookupMap.putIfAbsent(dependency.getName() + "-" + dependency.getVersion(), new Pair<>(config, dependency))); + }); // Create the directory if it doesn't already exist Path tempLibraries = getTemporaryFile(TEMP_LIBRARY_DIR); @@ -258,7 +247,7 @@ private void acquireDependencies() throws Exception { Path cachedJar = getMinecraftJar(); Path inTempDir = getTemporaryFile("tempLibraries/minecraft.jar"); // TODO: maybe try not to copy every time - Files.copy(cachedJar, inTempDir, REPLACE_EXISTING); + Files.copy(cachedJar, inTempDir, StandardCopyOption.REPLACE_EXISTING); continue; } @@ -270,20 +259,21 @@ private void acquireDependencies() throws Exception { pair = entry.getValue(); } } - - // The pair must be non-null - Objects.requireNonNull(pair); - // Find the library jar file, and copy it to tempLibraries - for (File file : pair.getLeft().files(pair.getRight())) { - if (file.getName().startsWith(lib)) { - if (lib.contains("mixin")) { - mixin = file; + if (pair == null) { + File libFile = files.get(lib + ".jar"); + if (libFile == null) { + libFile = files.values().stream().filter(file -> file.getName().startsWith(lib)).findFirst().orElse(null); + if (libFile == null) { + throw new IllegalStateException(lib); } - if (lib.contains("nether-pathfinder")) { - pathfinder = file; + } + copyTempLib(lib, libFile); + } else { + for (File file : pair.a.files(pair.b)) { + if (file.getName().startsWith(lib)) { + copyTempLib(lib, file); } - Files.copy(file.toPath(), getTemporaryFile("tempLibraries/" + lib + ".jar"), REPLACE_EXISTING); } } } @@ -295,87 +285,39 @@ private void acquireDependencies() throws Exception { } } - // a bunch of epic stuff to get the path to the cached jar - private Path getMinecraftJar() throws Exception { - MappingType mappingType; - try { - mappingType = getMappingType(); - } catch (Exception e) { - System.err.println("Failed to get mapping type, assuming NOTCH."); - mappingType = MappingType.NOTCH; + private void copyTempLib(String lib, File libFile) throws IOException { + if (lib.contains("mixin")) { + mixin = libFile; } - - String suffix; - switch (mappingType) { - case NOTCH: - suffix = ""; - break; - case SEARGE: - suffix = "-srgBin"; - break; - case CUSTOM: - throw new IllegalStateException("Custom mappings not supported!"); - default: - throw new IllegalStateException("Unknown mapping type: " + mappingType); + if (lib.contains("nether-pathfinder")) { + pathfinder = libFile; } + Files.copy(libFile.toPath(), getTemporaryFile("tempLibraries/" + lib + ".jar"), StandardCopyOption.REPLACE_EXISTING); + } - DefaultConvention convention = (DefaultConvention) this.getProject().getConvention(); - Object extension = convention.getAsMap().get("minecraft"); - Objects.requireNonNull(extension); - - // for some reason cant use Class.forName - Class class_baseExtension = extension.getClass().getSuperclass().getSuperclass().getSuperclass(); // <-- cursed - Field f_replacer = class_baseExtension.getDeclaredField("replacer"); - f_replacer.setAccessible(true); - Object replacer = f_replacer.get(extension); - Class class_replacementProvider = replacer.getClass(); - Field replacement_replaceMap = class_replacementProvider.getDeclaredField("replaceMap"); - replacement_replaceMap.setAccessible(true); - - Map replacements = (Map) replacement_replaceMap.get(replacer); - String cacheDir = replacements.get("CACHE_DIR").toString() + "/net/minecraft"; - String mcVersion = replacements.get("MC_VERSION").toString(); - String mcpInsert = replacements.get("MAPPING_CHANNEL").toString() + "/" + replacements.get("MAPPING_VERSION").toString(); - String fullJarName = "minecraft-" + mcVersion + suffix + ".jar"; - - String baseDir = String.format("%s/minecraft/%s/", cacheDir, mcVersion); - - String jarPath; - if (mappingType == MappingType.SEARGE) { - jarPath = String.format("%s/%s/%s", baseDir, mcpInsert, fullJarName); - } else { - jarPath = baseDir + fullJarName; - } - jarPath = jarPath - .replace("/", File.separator) - .replace("\\", File.separator); // hecking regex - - return new File(jarPath).toPath(); + // a bunch of epic stuff to get the path to the cached jar + private Path getMinecraftJar() throws Exception { + return getObfuscatedMinecraftJar(getProject(), false); // always notch jar for now. } - // throws IllegalStateException if mapping type is ambiguous or it fails to find it - private MappingType getMappingType() { - // if it fails to find this then its probably a forgegradle version problem - Set reobf = (NamedDomainObjectContainer) this.getProject().getExtensions().getByName("reobf"); + private static Path getObfuscatedMinecraftJar(final Project project, final boolean srg) throws Exception { + final Object extension = Objects.requireNonNull(project.getExtensions().findByName("minecraft"), "Unable to find Minecraft extension."); - List mappingTypes = getUsedMappingTypes(reobf); - long mappingTypesUsed = mappingTypes.size(); - if (mappingTypesUsed == 0) { - throw new IllegalStateException("Failed to find mapping type (no jar task?)"); - } - if (mappingTypesUsed > 1) { - throw new IllegalStateException("Ambiguous mapping type (multiple jars with different mapping types?)"); - } + final Class mcpRepoClass = mcpRepoClass(extension.getClass().getClassLoader()); + final Field mcpRepoInstanceField = mcpRepoClass.getDeclaredField("INSTANCE"); + mcpRepoInstanceField.setAccessible(true); + final Method findMethod = mcpRepoClass.getDeclaredMethod(srg ? "findSrg" : "findRaw", String.class, String.class); + findMethod.setAccessible(true); - return mappingTypes.get(0); + final Object mcpRepo = mcpRepoInstanceField.get(null); + final String mcpVersion = (String) Objects.requireNonNull(project.getExtensions().getExtraProperties().get("MCP_VERSION"), "Extra property \"MCP_VERSION\" not found"); + return ((File) findMethod.invoke(mcpRepo, "joined", mcpVersion)).toPath(); } - private List getUsedMappingTypes(Set reobf) { - return reobf.stream() - .map(ReobfWrapper::new) - .map(ReobfWrapper::getMappingType) - .distinct() - .collect(Collectors.toList()); + private static Class mcpRepoClass(final ClassLoader loader) throws Exception { + final Method forName0 = Class.class.getDeclaredMethod("forName0", String.class, boolean.class, ClassLoader.class, Class.class); + forName0.setAccessible(true); + return (Class) forName0.invoke(null, "net.minecraftforge.gradle.mcp.MCPRepo", true, loader, null); } private void proguardApi() throws Exception { @@ -400,10 +342,18 @@ public void setUrl(String url) { this.url = url; } + public String getUrl() { + return url; + } + public void setExtract(String extract) { this.extract = extract; } + public String getExtract() { + return extract; + } + private void runProguard(Path config) throws Exception { // Delete the existing proguard output file. Proguard probably handles this already, but why not do it ourselves if (Files.exists(this.proguardOut)) { diff --git a/buildSrc/src/main/java/baritone/gradle/util/MappingType.java b/buildSrc/src/main/java/baritone/gradle/util/MappingType.java deleted file mode 100644 index a3be9b49f..000000000 --- a/buildSrc/src/main/java/baritone/gradle/util/MappingType.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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.gradle.util; - -/** - * All credits go to AsmLibGradle and its contributors. - * - * @see Original Source - */ -public enum MappingType { - SEARGE, - NOTCH, - CUSTOM // forgegradle -} diff --git a/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java b/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java deleted file mode 100644 index f752cd946..000000000 --- a/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.gradle.util; - -import java.lang.reflect.Field; -import java.util.Objects; - -/** - * All credits go to AsmLibGradle and its contributors. - * - * @see Original Source - */ -public class ReobfWrapper { - - private final Object instance; - private final Class type; - - public ReobfWrapper(Object instance) { - this.instance = instance; - Objects.requireNonNull(instance); - this.type = instance.getClass(); - } - - public String getName() { - try { - Field nameField = type.getDeclaredField("name"); - nameField.setAccessible(true); - return (String) nameField.get(this.instance); - } catch (ReflectiveOperationException ex) { - throw new IllegalStateException(ex); - } - } - - public MappingType getMappingType() { - try { - Field enumField = type.getDeclaredField("mappingType"); - enumField.setAccessible(true); - Enum aEnum = (Enum) enumField.get(this.instance); - MappingType mappingType = MappingType.values()[aEnum.ordinal()]; - if (!aEnum.name().equals(mappingType.name())) { - throw new IllegalStateException("ForgeGradle ReobfMappingType is not equivalent to MappingType (version error?)"); - } - return mappingType; - } catch (ReflectiveOperationException ex) { - throw new IllegalStateException(ex); - } - } -} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 4c5670a158b8953b61fd441194873cac2c99930d..7454180f2ae8848c63b8b4dea2cb829da983f2fa 100755 GIT binary patch literal 59536 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 QuEJmfE|#`Dqx|px0L@K;Y5)KL literal 54706 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 599a02b7a..c51cbf173 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Jul 31 21:56:56 PDT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.4-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip diff --git a/gradlew b/gradlew index cccdd3d51..744e882ed 100755 --- a/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -56,7 +72,7 @@ case "`uname`" in Darwin* ) darwin=true ;; - MINGW* ) + MSYS* | MINGW* ) msys=true ;; NONSTOP* ) @@ -66,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index f9553162f..107acd32c 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/hacks.gradle b/hacks.gradle new file mode 100644 index 000000000..821a4d02e --- /dev/null +++ b/hacks.gradle @@ -0,0 +1,161 @@ +/* + * 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 . + */ + +ext.doHackyStuff = { final Class clazz -> + def withExtension = { final File file, final String extension -> + def i = file.getName().lastIndexOf('.') + def name = file.getName().substring(0, i) + return new File(file.getParent(), "$name.$extension") + } + + // https://github.com/MinecraftForge/ForgeGradle/blob/6639464b29b0923187eee0a609e546ba9f1b998b/src/patcher/java/net/minecraftforge/gradle/patcher/PatcherPlugin.java#L545 + // https://github.com/MinecraftForge/ForgeGradle/blob/6639464b29b0923187eee0a609e546ba9f1b998b/src/userdev/java/net/minecraftforge/gradle/userdev/UserDevPlugin.java#L149 + // create createMcp2Obf task + this.tasks.register('createMcpToObf', clazz) + .configure { task -> + task.setNotch(true) + task.setReverse(true) + } + afterEvaluate { + def createMcp2Obf = this.tasks.getByName('createMcpToObf') + def createMcp2Srg = this.tasks.getByName('createMcpToSrg') + + // configure createMcp2Obf task + if (createMcp2Obf.getSrg() == null) { + createMcp2Obf.setSrg(createMcp2Srg.getSrg()) + createMcp2Obf.setMappings(createMcp2Srg.getMappings()) + createMcp2Obf.dependsOn(createMcp2Srg) + } + + def createSrgCopyTask = { final Task tsrgTask -> + def srgCopyTask = this.tasks.register("${tsrgTask.name}Srg", tsrgTask.getClass()) + tsrgTask.getDependsOn().forEach({ dep -> + srgCopyTask.get().dependsOn(dep) + }) + // https://github.com/MinecraftForge/ForgeGradle/blob/6639464b29b0923187eee0a609e546ba9f1b998b/src/mcp/java/net/minecraftforge/gradle/mcp/task/GenerateSRG.java#L39 + srgCopyTask.configure { task -> + task.setSrg(tsrgTask.getSrg()) + task.setMappings(tsrgTask.getMappings()) + // https://github.com/MinecraftForge/SrgUtils/blob/bb2ca35bb8d349a122ef512dedd24f54f7cd0bdf/src/main/java/net/minecraftforge/srgutils/IMappingFile.java#L44 + task.setFormat('SRG') + task.setNotch(tsrgTask.getNotch()) + task.setReverse(tsrgTask.getReverse()) + task.setOutput(withExtension(tsrgTask.getOutput(), 'srg')) + } + return srgCopyTask + } + def createMcp2ObfSrgCopyTask = createSrgCopyTask(createMcp2Obf) + createMcp2Obf.dependsOn(createMcp2ObfSrgCopyTask) + def createMcp2SrgSrgCopyTask = createSrgCopyTask(createMcp2Srg) + createMcp2Srg.dependsOn(createMcp2SrgSrgCopyTask) + + this.sourceSets.forEach({ set -> + def compileTask = this.project.tasks[set.compileJavaTaskName] + if (!(compileTask instanceof JavaCompile)) { + println("[Baritoe] Non-java compile task for ${set} of type ${compileTask}") + return + } + compileTask.dependsOn(createMcp2Obf) + compileTask.doFirst { + // inject legacy notch srg file + def createMcp2ObfSrgCopy = createMcp2ObfSrgCopyTask.get() + def reobfNotchSrgFileArgument = "-AreobfNotchSrgFile=${createMcp2ObfSrgCopy.output.canonicalPath}" + compileTask.options.compilerArgs += reobfNotchSrgFileArgument + println("[Baritoe] Injecting compiler argument: ${reobfNotchSrgFileArgument}") + + // inject legacy notch srg out file + def outTSrgFileArgument = '-AoutTsrgFile=' + def compilerArgsIterator = compileTask.options.compilerArgs.listIterator() + while (compilerArgsIterator.hasNext()) { + def compilerArg = compilerArgsIterator.next() + if (compilerArg.startsWith(outTSrgFileArgument)) { + def argumentFileValue = new File(compilerArg.substring(outTSrgFileArgument.length(), compilerArg.length())) + def outNotchSrgFile = withExtension(argumentFileValue, 'notch.srg') + def outNotchSrgFileArgument = "-AoutNotchSrgFile=${outNotchSrgFile.canonicalPath}" + println("[Baritoe] Injecting compiler argument: ${outNotchSrgFileArgument}") + compilerArgsIterator.add(outNotchSrgFileArgument) + } + } + } + }) + + // register reobf jars + def reobfExtension = this.project.getExtensions().getByName('reobf') + if (!reobfExtension) { + throw new IllegalStateException("Could not find \"reobf\" extension") + } + def reobfNotchJar = reobfExtension.create(jar.getName()) + reobfNotchJar.dependsOn(createMcp2Obf) + reobfNotchJar.setMappings(createMcp2Obf.getOutput()) + + // even more horrible hack :) for outNotchSrgFile injection + reobfNotchJar.doFirst { + // https://github.com/MinecraftForge/ForgeGradle/blob/6639464b29b0923187eee0a609e546ba9f1b998b/src/userdev/java/net/minecraftforge/gradle/userdev/tasks/RenameJar.java#L96 + def extraMappings = reobfNotchJar.getExtraMappings() + println("[Baritoe] Extra mappings: ${extraMappings}") + def copy = new ArrayList<>() + extraMappings.forEach { extraMapping -> + copy.add(withExtension(extraMapping, 'notch.srg')) + } + println("[Baritoe] New extra mappings: ${copy}") + reobfNotchJar.setExtraMappings(copy) + } + } +} + +// TODO: In-complete fg 5.0 port. Currently doesn't handle mixin notch srg mapping hack. +//ext.doHackyStuff = { final Class clazz -> +// afterEvaluate { +// def createMcp2Srg = this.tasks.getByName('createMcpToSrg') +// def createMcpToObf = this.tasks.register('createMcpToObf', clazz) +// createMcpToObf.configure { task -> +// task.setNotch(true) +// task.setReverse(true) +// task.getSrg().set(createMcp2Srg.getSrg().get()) +// task.getMappings().set(createMcp2Srg.getMappings().get()) +// task.dependsOn(createMcp2Srg) +// } +// reobf { +// jar { +// dependsOn(createMcpToObf) +// getMappings().set(createMcpToObf.get().getOutput().get()) +// } +// } +// this.sourceSets.forEach({ set -> +// def compileTask = this.project.tasks[set.compileJavaTaskName] +// if (!(compileTask instanceof JavaCompile)) { +// println("[Baritoe] Non-java compile task for ${set} of type ${compileTask}") +// return +// } +// compileTask.dependsOn(createMcpToObf) +// compileTask.doFirst { +// def reobfTSrgFile = '-AreobfTsrgFile=' +// def compilerArgsIterator = compileTask.options.compilerArgs.listIterator() +// while (compilerArgsIterator.hasNext()) { +// def compilerArg = compilerArgsIterator.next() +// if (compilerArg.startsWith(reobfTSrgFile)) { +// compilerArgsIterator.remove() +// def toInject = "-AreobfTsrgFile=${createMcpToObf.get().output.get().asFile.canonicalPath}" +// compilerArgsIterator.add(toInject) +// println("[Baritoe] Injecting compiler argument: ${toInject}") +// } +// } +// println("[Baritoe] Compiler arguments: ${compileTask.options.compilerArgs}") +// } +// }) +// } +//} \ No newline at end of file diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 858494778..d493f60de 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -92,7 +92,7 @@ -libraryjars 'tempLibraries/text2speech-1.10.3.jar' -libraryjars 'tempLibraries/mixin-0.7.11-SNAPSHOT.jar' --libraryjars 'tempLibraries/launchwrapper-1.11.jar' # TODO why does only 1.11.jar exist? +-libraryjars 'tempLibraries/launchwrapper-1.12.jar' -libraryjars 'tempLibraries/nether-pathfinder-.jar' From b72bbfce5e4eb28ded8b4bb9003d468d9baa47e6 Mon Sep 17 00:00:00 2001 From: 0x22 <0x22@futureclient.net> Date: Fri, 16 Jun 2023 22:36:58 -0400 Subject: [PATCH 607/935] make all json deterministic --- .../src/main/java/baritone/gradle/util/Determinizer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java index 40d17ef03..35c1fe40a 100644 --- a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java +++ b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java @@ -64,9 +64,9 @@ public static void determinize(String inputPath, String outputPath, List t JarEntry clone = new JarEntry(entry.getName()); clone.setTime(42069); jos.putNextEntry(clone); - if (entry.getName().endsWith(".refmap.json")) { - JsonObject object = new JsonParser().parse(new InputStreamReader(jarFile.getInputStream(entry))).getAsJsonObject(); - jos.write(writeSorted(object).getBytes()); + if (entry.getName().endsWith(".json")) { + JsonElement json = new JsonParser().parse(new InputStreamReader(jarFile.getInputStream(entry))); + jos.write(writeSorted(json).getBytes()); } else if (entry.getName().equals("META-INF/MANIFEST.MF") && doForgeReplacementOfMetaInf) { // only replace for forge jar ByteArrayOutputStream cancer = new ByteArrayOutputStream(); copy(jarFile.getInputStream(entry), cancer); @@ -104,7 +104,7 @@ private static void copy(InputStream is, OutputStream os) throws IOException { } } - private static String writeSorted(JsonObject in) throws IOException { + private static String writeSorted(JsonElement in) throws IOException { StringWriter writer = new StringWriter(); JsonWriter jw = new JsonWriter(writer); ORDERED_JSON_WRITER.write(jw, in); From 071e6164fef3fff38e7316641f723e46eb31827a Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 16 Jun 2023 21:55:08 -0500 Subject: [PATCH 608/935] Fix nether-pathfinder on Windows --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 8e952df73..e9c0c24cd 100755 --- a/build.gradle +++ b/build.gradle @@ -105,9 +105,9 @@ dependencies { exclude module: 'commons-io' exclude module: 'log4j-core' } - runtime launchCompile('dev.babbaj:nether-pathfinder:0.2') + runtime launchCompile('dev.babbaj:nether-pathfinder:0.4') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.2' + implementation 'dev.babbaj:nether-pathfinder:0.4' } mixin { From f798ff26f696e0825ad4d94d2856cc14bd0deb51 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 16 Jun 2023 22:31:53 -0500 Subject: [PATCH 609/935] fixed seed --- src/main/java/baritone/Elytra.java | 74 ++++++++++++------- .../command/defaults/ElytraCommand.java | 2 +- .../java/baritone/utils/PathRenderer.java | 4 +- 3 files changed, 51 insertions(+), 29 deletions(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index e8e83c5b7..affe8e5e6 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -18,10 +18,7 @@ package baritone; import baritone.api.event.events.TickEvent; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.Helper; -import baritone.api.utils.Rotation; -import baritone.api.utils.RotationUtils; +import baritone.api.utils.*; import baritone.behavior.Behavior; import baritone.utils.BlockStateInterface; import com.mojang.realmsclient.util.Pair; @@ -37,20 +34,24 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; +import net.minecraft.world.chunk.BlockStateContainer; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.util.*; import java.util.stream.Collectors; public class Elytra extends Behavior implements Helper { + private static final long NETHER_SEED = 146008555100680L; + // Used exclusively for PathRenderer public List> lines; - public BlockPos goal; + public BlockPos aimPos; public List visiblePath; // NetherPathfinder stuff private long context; - private Long seed; // yay! private List path; @@ -60,28 +61,34 @@ public class Elytra extends Behavior implements Helper { protected Elytra(Baritone baritone) { super(baritone); + // lol + this.context = NetherPathfinder.newContext(NETHER_SEED); + this.lines = new ArrayList<>(); this.visiblePath = Collections.emptyList(); this.path = new ArrayList<>(); } - public void path(long seed, BlockPos destination) { - this.setupContext(seed); - + public void path(BlockPos destination) { this.playerNear = 0; this.goingTo = 0; + long start = System.currentTimeMillis(); final PathSegment segment = NetherPathfinder.pathFind( this.context, ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z, destination.getX(), destination.getY(), destination.getZ() ); + long end = System.currentTimeMillis(); this.path = Arrays.stream(segment.packed) .mapToObj(BlockPos::fromLong) .map(BetterBlockPos::new) .collect(Collectors.toList()); + final int distance = (int) Math.sqrt(this.path.get(0).distanceSq(this.path.get(this.path.size() - 1))); + logDirect(String.format("Computed path in %dms. (%d blocks)", end - start, distance)); + if (!segment.finished) { logDirect("segment not finished. path incomplete"); } @@ -89,25 +96,10 @@ public void path(long seed, BlockPos destination) { removeBacktracks(); } - private void setupContext(long seed) { - if (!Objects.equals(this.seed, seed)) { - this.freeContext(); - this.context = NetherPathfinder.newContext(seed); - } - this.seed = seed; - } - - private void freeContext() { - if (this.context != 0) { - NetherPathfinder.freeContext(this.context); - } - this.context = 0; - } - public void cancel() { this.visiblePath = Collections.emptyList(); this.path.clear(); - this.goal = null; + this.aimPos = null; this.playerNear = 0; this.goingTo = 0; this.sinceFirework = 0; @@ -196,7 +188,7 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat long b = System.currentTimeMillis(); System.out.println("Solved pitch in " + (b - a) + " total time " + (b - t)); goingTo = i; - goal = path.get(i).add(0, dy, 0); + aimPos = path.get(i).add(0, dy, 0); baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), pitch), false); return; } @@ -368,6 +360,36 @@ private void removeBacktracks() { } } + private static boolean[] pack(Chunk chunk) { + try { + boolean[] packed = new boolean[16 * 16 * 128]; + ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); + for (int y0 = 0; y0 < 8; y0++) { + ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; + if (extendedblockstorage == null) { + continue; + } + BlockStateContainer bsc = extendedblockstorage.getData(); + int yReal = y0 << 4; + for (int y1 = 0; y1 < 16; y1++) { + int y = y1 | yReal; + for (int z = 0; z < 16; z++) { + for (int x = 0; x < 16; x++) { + IBlockState state = bsc.get(x, y1, z); + if (state.getBlock() != Blocks.AIR) { // instanceof BlockAir in 1.13+ + packed[x + (z << 4) + (y << 8)] = true; + } + } + } + } + } + return packed; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + // TODO: Use the optimized version from builder-2 private RayTraceResult rayTraceBlocks(Vec3d start, Vec3d end) { int x1 = MathHelper.floor(end.x); diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 99ddaa8e4..2d2e3f0ee 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -41,7 +41,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); args.requireMax(0); GoalXZ goal = (GoalXZ) customGoalProcess.getGoal(); - ((Baritone) baritone).elytra.path(146008555100680L, new BlockPos(goal.getX(), 64, goal.getZ())); + ((Baritone) baritone).elytra.path(new BlockPos(goal.getX(), 64, goal.getZ())); } @Override diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 934375c4c..a4c412298 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -106,8 +106,8 @@ public static void render(RenderEvent event, PathingBehavior behavior) { } drawPath(behavior.baritone.elytra.visiblePath, 0, Color.RED, false, 0, 0); - if (behavior.baritone.elytra.goal != null) { - drawGoal(renderView, new GoalBlock(behavior.baritone.elytra.goal), partialTicks, Color.GREEN); + if (behavior.baritone.elytra.aimPos != null) { + drawGoal(renderView, new GoalBlock(behavior.baritone.elytra.aimPos), partialTicks, Color.GREEN); } if (!behavior.baritone.elytra.lines.isEmpty() && Baritone.settings().renderRaytraces.value) { IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); From dc53c7939312507418debde09822dcdbfb7b36eb Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 16 Jun 2023 21:35:56 -0700 Subject: [PATCH 610/935] gaming --- build.gradle | 7 +- src/main/java/baritone/Elytra.java | 125 +++++++++++++++++++++++------ 2 files changed, 104 insertions(+), 28 deletions(-) diff --git a/build.gradle b/build.gradle index e6f3e1134..6f5ca491a 100755 --- a/build.gradle +++ b/build.gradle @@ -142,7 +142,8 @@ afterEvaluate { dependencies { // https://github.com/MinecraftMachina/lwjgl/releases/download/2.9.4-20150209-mmachina.2/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar - minecraft files("libs/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar") // TODO: use prism launcher maven + minecraft files("libs/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar") + // TODO: use prism launcher maven // https://github.com/MinecraftMachina/Java-Objective-C-Bridge/releases/download/1.1.0-mmachina.1/java-objc-bridge-1.1.jar minecraft files("libs/java-objc-bridge-1.1.jar") // TODO: use prism launcher maven minecraft(group: 'net.java.dev.jna', name: 'jna') { @@ -174,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.4') + launchImplementation('dev.babbaj:nether-pathfinder:0.6') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.4' + implementation 'dev.babbaj:nether-pathfinder:0.6' } mixin { diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index affe8e5e6..97e4a0b43 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -17,8 +17,13 @@ package baritone; +import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.TickEvent; -import baritone.api.utils.*; +import baritone.api.event.events.type.EventState; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Helper; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; import baritone.behavior.Behavior; import baritone.utils.BlockStateInterface; import com.mojang.realmsclient.util.Pair; @@ -39,6 +44,8 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.util.*; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import java.util.stream.Collectors; public class Elytra extends Behavior implements Helper { @@ -69,31 +76,93 @@ protected Elytra(Baritone baritone) { this.path = new ArrayList<>(); } - public void path(BlockPos destination) { - this.playerNear = 0; - this.goingTo = 0; + private final Executor packer = Executors.newSingleThreadExecutor(); - long start = System.currentTimeMillis(); - final PathSegment segment = NetherPathfinder.pathFind( - this.context, - ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z, - destination.getX(), destination.getY(), destination.getZ() - ); - long end = System.currentTimeMillis(); - - this.path = Arrays.stream(segment.packed) - .mapToObj(BlockPos::fromLong) - .map(BetterBlockPos::new) - .collect(Collectors.toList()); + @Override + public final void onChunkEvent(ChunkEvent event) { + if (event.getState() == EventState.POST && (event.getType() == ChunkEvent.Type.POPULATE_FULL || event.getType() == ChunkEvent.Type.POPULATE_PARTIAL)) { + Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); + packer.execute(() -> { + NetherPathfinder.insertChunkData(context, event.getX(), event.getZ(), pack(chunk)); + }); + } + } - final int distance = (int) Math.sqrt(this.path.get(0).distanceSq(this.path.get(this.path.size() - 1))); - logDirect(String.format("Computed path in %dms. (%d blocks)", end - start, distance)); + boolean recalculating; - if (!segment.finished) { - logDirect("segment not finished. path incomplete"); + private void pathfindAroundObstacles() { + if (recalculating) { + return; } + outer: + while (true) { + int rangeStartIncl = playerNear; + int rangeEndExcl = playerNear; + while (rangeEndExcl < path.size() && ctx.world().isBlockLoaded(path.get(rangeEndExcl), false)) { + rangeEndExcl++; + } + if (rangeStartIncl >= rangeEndExcl) { + // not loaded yet? + return; + } + if (!passable(ctx.world().getBlockState(path.get(rangeStartIncl)))) { + // we're in a wall + return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: + } + for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { + if (!clearView(pathAt(i), pathAt(i + 1))) { + // obstacle. where do we return to pathing? + // find the next valid segment + for (int j = i + 1; j < rangeEndExcl - 1; j++) { + if (clearView(pathAt(j), pathAt(j + 1))) { + // found it + // we want to replace the path from i to j + List afterSplice = path.subList(j + 1, path.size()); + recalculating = true; + path(path.get(j + 1), afterSplice); + break outer; + } + } + } + } + break; + } + } - removeBacktracks(); + public void path(BlockPos destination) { + path(destination, new ArrayList<>()); + } + + public void path(BlockPos destination, List andThen) { + packer.execute(() -> { + long start = System.currentTimeMillis(); + final PathSegment segment = NetherPathfinder.pathFind( + this.context, + ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z, + destination.getX(), destination.getY(), destination.getZ() + ); + long end = System.currentTimeMillis(); + + ctx.minecraft().addScheduledTask(() -> { + this.path = Arrays.stream(segment.packed) + .mapToObj(BlockPos::fromLong) + .map(BetterBlockPos::new) + .collect(Collectors.toList()); + final int distance = (int) Math.sqrt(this.path.get(0).distanceSq(this.path.get(this.path.size() - 1))); + logDirect(String.format("Computed path in %dms. (%d blocks)", end - start, distance)); + + if (!segment.finished) { + logDirect("segment not finished. path incomplete"); + } + this.path.addAll(andThen); + if (!andThen.isEmpty()) { + recalculating = false; + } + this.playerNear = 0; + this.goingTo = 0; + removeBacktracks(); + }); + }); } public void cancel() { @@ -127,6 +196,8 @@ public void onTick(TickEvent event) { baritone.getInputOverrideHandler().clearAllKeys(); // FIXME: This breaks the regular path-finder lines.clear(); + pathfindAroundObstacles(); + if (!ctx.player().isElytraFlying()) { return; } @@ -361,9 +432,11 @@ private void removeBacktracks() { } private static boolean[] pack(Chunk chunk) { + //System.out.println(chunk); try { boolean[] packed = new boolean[16 * 16 * 128]; ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); + int count = 0; for (int y0 = 0; y0 < 8; y0++) { ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; if (extendedblockstorage == null) { @@ -376,17 +449,19 @@ private static boolean[] pack(Chunk chunk) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { IBlockState state = bsc.get(x, y1, z); - if (state.getBlock() != Blocks.AIR) { // instanceof BlockAir in 1.13+ + if (!passable(state)) { packed[x + (z << 4) + (y << 8)] = true; + count++; } } } } } + //System.out.println("breakpoint " + count); return packed; } catch (Exception e) { e.printStackTrace(); - return null; + throw new RuntimeException(e); } } @@ -401,7 +476,7 @@ private RayTraceResult rayTraceBlocks(Vec3d start, Vec3d end) { BlockPos blockpos = new BlockPos(x2, y2, z2); IBlockState iblockstate = ctx.world().getBlockState(blockpos); if (!passable(iblockstate)) { - return Blocks.DIRT.getDefaultState().collisionRayTrace(ctx.world(), blockpos, start, end); + return Blocks.SPONGE.getDefaultState().collisionRayTrace(ctx.world(), blockpos, start, end); } int steps = 200; while (steps-- >= 0) { @@ -479,7 +554,7 @@ private RayTraceResult rayTraceBlocks(Vec3d start, Vec3d end) { blockpos = new BlockPos(x2, y2, z2); IBlockState iblockstate1 = ctx.world().getBlockState(blockpos); if (!passable(iblockstate1)) { - return Blocks.DIRT.getDefaultState().collisionRayTrace(ctx.world(), blockpos, start, end); + return Blocks.NETHERRACK.getDefaultState().collisionRayTrace(ctx.world(), blockpos, start, end); } } return null; From 1f303e69b0d246689ccbf96afbc3963092274058 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 16 Jun 2023 22:21:52 -0700 Subject: [PATCH 611/935] cut at render distance --- build.gradle | 4 ++-- src/main/java/baritone/Elytra.java | 17 ++++++----------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index 6f5ca491a..a389ae08f 100755 --- a/build.gradle +++ b/build.gradle @@ -175,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.6') + launchImplementation('dev.babbaj:nether-pathfinder:0.8') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.6' + implementation 'dev.babbaj:nether-pathfinder:0.8' } mixin { diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 97e4a0b43..1af15edda 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -83,6 +83,7 @@ public final void onChunkEvent(ChunkEvent event) { if (event.getState() == EventState.POST && (event.getType() == ChunkEvent.Type.POPULATE_FULL || event.getType() == ChunkEvent.Type.POPULATE_PARTIAL)) { Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); packer.execute(() -> { + System.out.println("meow"); NetherPathfinder.insertChunkData(context, event.getX(), event.getZ(), pack(chunk)); }); } @@ -113,16 +114,10 @@ private void pathfindAroundObstacles() { if (!clearView(pathAt(i), pathAt(i + 1))) { // obstacle. where do we return to pathing? // find the next valid segment - for (int j = i + 1; j < rangeEndExcl - 1; j++) { - if (clearView(pathAt(j), pathAt(j + 1))) { - // found it - // we want to replace the path from i to j - List afterSplice = path.subList(j + 1, path.size()); - recalculating = true; - path(path.get(j + 1), afterSplice); - break outer; - } - } + List afterSplice = path.subList(rangeEndExcl - 1, path.size()); + recalculating = true; + path(path.get(rangeEndExcl - 1), afterSplice); + break outer; } } break; @@ -457,7 +452,7 @@ private static boolean[] pack(Chunk chunk) { } } } - //System.out.println("breakpoint " + count); + System.out.println("breakpoint " + count); return packed; } catch (Exception e) { e.printStackTrace(); From 157e4db7c5aab54236c551b5ba33a9062018feff Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 16 Jun 2023 22:39:50 -0700 Subject: [PATCH 612/935] fireworks hack --- src/main/java/baritone/Elytra.java | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 1af15edda..75d90dc6f 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -206,17 +206,8 @@ public void onTick(TickEvent event) { Vec3d start = ctx.playerFeetAsVec(); boolean firework = isFireworkActive(); sinceFirework++; - if (!firework - && sinceFirework > 10 - && (Baritone.settings().wasteFireworks.value || ctx.player().posY < path.get(goingTo).y + 5) // don't firework if trying to descend - && (ctx.player().posY < path.get(goingTo).y - 5 || start.distanceTo(new Vec3d(path.get(goingTo).x + 0.5, ctx.player().posY, path.get(goingTo).z + 0.5)) > 5) // UGH!!!!!!! - && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending - ) { - logDirect("firework"); - ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); - sinceFirework = 0; - } final long t = System.currentTimeMillis(); + outermost: for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) int[] heights = firework ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost boolean requireClear = relaxation == 0; @@ -256,12 +247,26 @@ && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Mat goingTo = i; aimPos = path.get(i).add(0, dy, 0); baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), pitch), false); - return; + break outermost; } } } + if (relaxation == 2) { + logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); + return; + } + } + + if (!firework + && sinceFirework > 10 + && (Baritone.settings().wasteFireworks.value || ctx.player().posY < path.get(goingTo).y + 5) // don't firework if trying to descend + && (ctx.player().posY < path.get(goingTo).y - 5 || start.distanceTo(new Vec3d(path.get(goingTo).x + 0.5, ctx.player().posY, path.get(goingTo).z + 0.5)) > 5) // UGH!!!!!!! + && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending + ) { + logDirect("firework"); + ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); + sinceFirework = 0; } - logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); } private boolean isFireworkActive() { From c5475498ca655a854874770d24a4eba79b2f6cbd Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 01:39:21 -0500 Subject: [PATCH 613/935] so cute --- .../baritone/api/event/events/ChunkEvent.java | 6 +- src/main/java/baritone/Elytra.java | 116 +++++++++++------- 2 files changed, 78 insertions(+), 44 deletions(-) diff --git a/src/api/java/baritone/api/event/events/ChunkEvent.java b/src/api/java/baritone/api/event/events/ChunkEvent.java index f27475bce..a7b5d96f0 100644 --- a/src/api/java/baritone/api/event/events/ChunkEvent.java +++ b/src/api/java/baritone/api/event/events/ChunkEvent.java @@ -106,6 +106,10 @@ public enum Type { *

* And it's a partial chunk */ - POPULATE_PARTIAL + POPULATE_PARTIAL; + + public final boolean isPopulate() { + return this == POPULATE_FULL || this == POPULATE_PARTIAL; + } } } diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 75d90dc6f..e63682e11 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -44,9 +44,9 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.util.*; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; +import java.util.concurrent.*; import java.util.stream.Collectors; +import java.util.stream.Stream; public class Elytra extends Behavior implements Helper { @@ -57,10 +57,8 @@ public class Elytra extends Behavior implements Helper { public BlockPos aimPos; public List visiblePath; - // NetherPathfinder stuff - private long context; - - // yay! + // :sunglasses: + private final Context context; private List path; public int playerNear; private int goingTo; @@ -68,31 +66,67 @@ public class Elytra extends Behavior implements Helper { protected Elytra(Baritone baritone) { super(baritone); - // lol - this.context = NetherPathfinder.newContext(NETHER_SEED); - + this.context = new Context(NETHER_SEED); this.lines = new ArrayList<>(); this.visiblePath = Collections.emptyList(); this.path = new ArrayList<>(); } - private final Executor packer = Executors.newSingleThreadExecutor(); + private static final class Context { + + private final long context; + private final long seed; + private final ExecutorService executor; + + public Context(long seed) { + this.context = NetherPathfinder.newContext(seed); + this.seed = seed; + this.executor = Executors.newSingleThreadExecutor(); + } + + public void queueForPacking(Chunk chunk) { + this.executor.submit(() -> NetherPathfinder.insertChunkData(this.context, chunk.x, chunk.z, pack(chunk))); + } + + public CompletableFuture pathFindAsync(final BlockPos src, final BlockPos dst) { + return CompletableFuture.supplyAsync(() -> + NetherPathfinder.pathFind( + this.context, + src.getX(), src.getY(), src.getZ(), + dst.getX(), dst.getY(), dst.getZ() + ), this.executor); + } + + public void destroy() { + // Ignore anything that was queued up, just shutdown the executor + this.executor.shutdownNow(); + + try { + while (!this.executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) {} + } catch (InterruptedException e) { + e.printStackTrace(); + } + + NetherPathfinder.freeContext(this.context); + } + + public long getSeed() { + return this.seed; + } + } @Override public final void onChunkEvent(ChunkEvent event) { - if (event.getState() == EventState.POST && (event.getType() == ChunkEvent.Type.POPULATE_FULL || event.getType() == ChunkEvent.Type.POPULATE_PARTIAL)) { - Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); - packer.execute(() -> { - System.out.println("meow"); - NetherPathfinder.insertChunkData(context, event.getX(), event.getZ(), pack(chunk)); - }); + if (event.getState() == EventState.POST && event.getType().isPopulate()) { + final Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); + this.context.queueForPacking(chunk); } } boolean recalculating; private void pathfindAroundObstacles() { - if (recalculating) { + if (this.recalculating) { return; } outer: @@ -115,7 +149,6 @@ private void pathfindAroundObstacles() { // obstacle. where do we return to pathing? // find the next valid segment List afterSplice = path.subList(rangeEndExcl - 1, path.size()); - recalculating = true; path(path.get(rangeEndExcl - 1), afterSplice); break outer; } @@ -125,36 +158,33 @@ private void pathfindAroundObstacles() { } public void path(BlockPos destination) { - path(destination, new ArrayList<>()); + path(destination, Collections.emptyList()); } public void path(BlockPos destination, List andThen) { - packer.execute(() -> { - long start = System.currentTimeMillis(); - final PathSegment segment = NetherPathfinder.pathFind( - this.context, - ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z, - destination.getX(), destination.getY(), destination.getZ() - ); - long end = System.currentTimeMillis(); + final boolean isRecalc = !andThen.isEmpty(); + this.recalculating = isRecalc; + + this.context.pathFindAsync(ctx.playerFeet(), destination).thenAccept(segment -> { + Stream newPath = Arrays.stream(segment.packed) + .mapToObj(BlockPos::fromLong) + .map(BetterBlockPos::new); + + List joined = Stream.concat(newPath, andThen.stream()).collect(Collectors.toList()); ctx.minecraft().addScheduledTask(() -> { - this.path = Arrays.stream(segment.packed) - .mapToObj(BlockPos::fromLong) - .map(BetterBlockPos::new) - .collect(Collectors.toList()); - final int distance = (int) Math.sqrt(this.path.get(0).distanceSq(this.path.get(this.path.size() - 1))); - logDirect(String.format("Computed path in %dms. (%d blocks)", end - start, distance)); - - if (!segment.finished) { - logDirect("segment not finished. path incomplete"); - } - this.path.addAll(andThen); - if (!andThen.isEmpty()) { - recalculating = false; - } + this.path = joined; this.playerNear = 0; this.goingTo = 0; + + final int distance = (int) Math.sqrt(this.path.get(0).distanceSq(this.path.get(segment.packed.length - 1))); + + if (isRecalc) { + this.recalculating = false; + logDirect(String.format("Recalculated segment (%d blocks)", distance)); + } else { + logDirect(String.format("Computed path (%d blocks)", distance)); + } removeBacktracks(); }); }); @@ -182,7 +212,7 @@ public void onTick(TickEvent event) { return; } - playerNear = fixNearPlayer(playerNear); + playerNear = calculateNear(playerNear); visiblePath = path.subList( Math.max(playerNear - 30, 0), Math.min(playerNear + 30, path.size()) @@ -390,7 +420,7 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, return new Vec3d(motionX, motionY, motionZ); } - private int fixNearPlayer(int index) { + private int calculateNear(int index) { final BetterBlockPos pos = ctx.playerFeet(); for (int i = index; i >= Math.max(index - 1000, 0); i -= 10) { if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { From 424f27c7986567168cc50b6caf7b5388d8bd13cf Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 01:41:17 -0500 Subject: [PATCH 614/935] remove debug msg --- src/main/java/baritone/Elytra.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index e63682e11..2f9aa223c 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -462,11 +462,9 @@ private void removeBacktracks() { } private static boolean[] pack(Chunk chunk) { - //System.out.println(chunk); try { boolean[] packed = new boolean[16 * 16 * 128]; ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); - int count = 0; for (int y0 = 0; y0 < 8; y0++) { ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; if (extendedblockstorage == null) { @@ -481,13 +479,11 @@ private static boolean[] pack(Chunk chunk) { IBlockState state = bsc.get(x, y1, z); if (!passable(state)) { packed[x + (z << 4) + (y << 8)] = true; - count++; } } } } } - System.out.println("breakpoint " + count); return packed; } catch (Exception e) { e.printStackTrace(); From 97e91ed680e581498666ff80d35a74923e36cdf1 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 01:42:49 -0500 Subject: [PATCH 615/935] one var --- src/main/java/baritone/Elytra.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index 2f9aa223c..57f0f7cf4 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -166,11 +166,12 @@ public void path(BlockPos destination, List andThen) { this.recalculating = isRecalc; this.context.pathFindAsync(ctx.playerFeet(), destination).thenAccept(segment -> { - Stream newPath = Arrays.stream(segment.packed) - .mapToObj(BlockPos::fromLong) - .map(BetterBlockPos::new); - - List joined = Stream.concat(newPath, andThen.stream()).collect(Collectors.toList()); + final List joined = Stream.concat( + Arrays.stream(segment.packed) + .mapToObj(BlockPos::fromLong) + .map(BetterBlockPos::new), + andThen.stream() + ).collect(Collectors.toList()); ctx.minecraft().addScheduledTask(() -> { this.path = joined; From a67889ab4266b2fed6168a3813db8e33bd4832e1 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 01:55:07 -0500 Subject: [PATCH 616/935] refactoring --- src/main/java/baritone/Baritone.java | 8 ++++++-- .../{Elytra.java => behavior/ElytraBehavior.java} | 8 ++++---- .../baritone/command/defaults/ElytraCommand.java | 2 +- .../command/defaults/ExecutionControlCommands.java | 2 +- .../command/defaults/ForceCancelCommand.java | 2 +- src/main/java/baritone/utils/PathRenderer.java | 13 ++++++++----- 6 files changed, 21 insertions(+), 14 deletions(-) rename src/main/java/baritone/{Elytra.java => behavior/ElytraBehavior.java} (99%) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 6199d03f5..457b49a45 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -64,7 +64,7 @@ public class Baritone implements IBaritone { private final GameEventHandler gameEventHandler; private final PathingBehavior pathingBehavior; - public final Elytra elytra; + private final ElytraBehavior elytraBehavior; private final LookBehavior lookBehavior; private final InventoryBehavior inventoryBehavior; private final InputOverrideHandler inputOverrideHandler; @@ -103,7 +103,7 @@ public class Baritone implements IBaritone { { this.pathingBehavior = this.registerBehavior(PathingBehavior::new); - this.elytra = this.registerBehavior(Elytra::new); + this.elytraBehavior = this.registerBehavior(ElytraBehavior::new); this.lookBehavior = this.registerBehavior(LookBehavior::new); this.inventoryBehavior = this.registerBehavior(InventoryBehavior::new); this.inputOverrideHandler = this.registerBehavior(InputOverrideHandler::new); @@ -232,6 +232,10 @@ public CommandManager getCommandManager() { return this.commandManager; } + public ElytraBehavior getElytraBehavior() { + return this.elytraBehavior; + } + @Override public void openClick() { new Thread(() -> { diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/behavior/ElytraBehavior.java similarity index 99% rename from src/main/java/baritone/Elytra.java rename to src/main/java/baritone/behavior/ElytraBehavior.java index 57f0f7cf4..473fd7f8b 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -15,8 +15,9 @@ * along with Baritone. If not, see . */ -package baritone; +package baritone.behavior; +import baritone.Baritone; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.type.EventState; @@ -24,7 +25,6 @@ import baritone.api.utils.Helper; import baritone.api.utils.Rotation; import baritone.api.utils.RotationUtils; -import baritone.behavior.Behavior; import baritone.utils.BlockStateInterface; import com.mojang.realmsclient.util.Pair; import dev.babbaj.pathfinder.NetherPathfinder; @@ -48,7 +48,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -public class Elytra extends Behavior implements Helper { +public final class ElytraBehavior extends Behavior implements Helper { private static final long NETHER_SEED = 146008555100680L; @@ -64,7 +64,7 @@ public class Elytra extends Behavior implements Helper { private int goingTo; private int sinceFirework; - protected Elytra(Baritone baritone) { + public ElytraBehavior(Baritone baritone) { super(baritone); this.context = new Context(NETHER_SEED); this.lines = new ArrayList<>(); diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 2d2e3f0ee..47db0e33e 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -41,7 +41,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); args.requireMax(0); GoalXZ goal = (GoalXZ) customGoalProcess.getGoal(); - ((Baritone) baritone).elytra.path(new BlockPos(goal.getX(), 64, goal.getZ())); + ((Baritone) baritone).getElytraBehavior().path(new BlockPos(goal.getX(), 64, goal.getZ())); } @Override diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index 66b2d156d..ef566bb8d 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -181,7 +181,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { paused[0] = false; } baritone.getPathingBehavior().cancelEverything(); - ((Baritone) baritone).elytra.cancel(); + ((Baritone) baritone).getElytraBehavior().cancel(); logDirect("ok canceled"); } diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index 3a54ce69e..60ccdab01 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -40,7 +40,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); pathingBehavior.cancelEverything(); pathingBehavior.forceCancel(); - ((Baritone) baritone).elytra.cancel(); + ((Baritone) baritone).getElytraBehavior().cancel(); logDirect("ok force canceled"); } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 491d7906e..fa8925042 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -24,6 +24,7 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.IPlayerContext; import baritone.api.utils.interfaces.IGoalRenderPos; +import baritone.behavior.ElytraBehavior; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; import com.mojang.realmsclient.util.Pair; @@ -101,15 +102,17 @@ public static void render(RenderEvent event, PathingBehavior behavior) { drawPath(next.getPath().positions(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); } - drawPath(behavior.baritone.elytra.visiblePath, 0, Color.RED, false, 0, 0); - if (behavior.baritone.elytra.aimPos != null) { - drawGoal(ctx.player(), new GoalBlock(behavior.baritone.elytra.aimPos), partialTicks, Color.GREEN); + final ElytraBehavior elytra = behavior.baritone.getElytraBehavior(); + + drawPath(elytra.visiblePath, 0, Color.RED, false, 0, 0); + if (elytra.aimPos != null) { + drawGoal(ctx.player(), new GoalBlock(elytra.aimPos), partialTicks, Color.GREEN); } - if (!behavior.baritone.elytra.lines.isEmpty() && Baritone.settings().renderRaytraces.value) { + if (!elytra.lines.isEmpty() && Baritone.settings().renderRaytraces.value) { IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); boolean orig = settings.renderPathAsLine.value; settings.renderPathAsLine.value = true; - for (Pair line : behavior.baritone.elytra.lines) { + for (Pair line : elytra.lines) { emitLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); } settings.renderPathAsLine.value = orig; From 395706edc9ebfb54ba8d3127397408c4354beae1 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 02:02:26 -0500 Subject: [PATCH 617/935] move context wrapper to new class --- .../baritone/behavior/ElytraBehavior.java | 90 ++------------- .../elytra/NetherPathfinderContext.java | 109 ++++++++++++++++++ 2 files changed, 117 insertions(+), 82 deletions(-) create mode 100644 src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 473fd7f8b..bd430b9e5 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -25,10 +25,9 @@ import baritone.api.utils.Helper; import baritone.api.utils.Rotation; import baritone.api.utils.RotationUtils; +import baritone.behavior.elytra.NetherPathfinderContext; import baritone.utils.BlockStateInterface; import com.mojang.realmsclient.util.Pair; -import dev.babbaj.pathfinder.NetherPathfinder; -import dev.babbaj.pathfinder.PathSegment; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; @@ -39,17 +38,17 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.chunk.BlockStateContainer; import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.util.*; -import java.util.concurrent.*; import java.util.stream.Collectors; import java.util.stream.Stream; public final class ElytraBehavior extends Behavior implements Helper { + /** + * 2b2t seed + */ private static final long NETHER_SEED = 146008555100680L; // Used exclusively for PathRenderer @@ -58,7 +57,7 @@ public final class ElytraBehavior extends Behavior implements Helper { public List visiblePath; // :sunglasses: - private final Context context; + private final NetherPathfinderContext context; private List path; public int playerNear; private int goingTo; @@ -66,57 +65,14 @@ public final class ElytraBehavior extends Behavior implements Helper { public ElytraBehavior(Baritone baritone) { super(baritone); - this.context = new Context(NETHER_SEED); + this.context = new NetherPathfinderContext(NETHER_SEED); this.lines = new ArrayList<>(); this.visiblePath = Collections.emptyList(); this.path = new ArrayList<>(); } - private static final class Context { - - private final long context; - private final long seed; - private final ExecutorService executor; - - public Context(long seed) { - this.context = NetherPathfinder.newContext(seed); - this.seed = seed; - this.executor = Executors.newSingleThreadExecutor(); - } - - public void queueForPacking(Chunk chunk) { - this.executor.submit(() -> NetherPathfinder.insertChunkData(this.context, chunk.x, chunk.z, pack(chunk))); - } - - public CompletableFuture pathFindAsync(final BlockPos src, final BlockPos dst) { - return CompletableFuture.supplyAsync(() -> - NetherPathfinder.pathFind( - this.context, - src.getX(), src.getY(), src.getZ(), - dst.getX(), dst.getY(), dst.getZ() - ), this.executor); - } - - public void destroy() { - // Ignore anything that was queued up, just shutdown the executor - this.executor.shutdownNow(); - - try { - while (!this.executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) {} - } catch (InterruptedException e) { - e.printStackTrace(); - } - - NetherPathfinder.freeContext(this.context); - } - - public long getSeed() { - return this.seed; - } - } - @Override - public final void onChunkEvent(ChunkEvent event) { + public void onChunkEvent(ChunkEvent event) { if (event.getState() == EventState.POST && event.getType().isPopulate()) { final Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); this.context.queueForPacking(chunk); @@ -366,7 +322,7 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate) { return bestPitch; } - private static boolean passable(IBlockState state) { + public static boolean passable(IBlockState state) { return state.getMaterial() == Material.AIR; } @@ -462,36 +418,6 @@ private void removeBacktracks() { } } - private static boolean[] pack(Chunk chunk) { - try { - boolean[] packed = new boolean[16 * 16 * 128]; - ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); - for (int y0 = 0; y0 < 8; y0++) { - ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; - if (extendedblockstorage == null) { - continue; - } - BlockStateContainer bsc = extendedblockstorage.getData(); - int yReal = y0 << 4; - for (int y1 = 0; y1 < 16; y1++) { - int y = y1 | yReal; - for (int z = 0; z < 16; z++) { - for (int x = 0; x < 16; x++) { - IBlockState state = bsc.get(x, y1, z); - if (!passable(state)) { - packed[x + (z << 4) + (y << 8)] = true; - } - } - } - } - } - return packed; - } catch (Exception e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - } - // TODO: Use the optimized version from builder-2 private RayTraceResult rayTraceBlocks(Vec3d start, Vec3d end) { int x1 = MathHelper.floor(end.x); diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java new file mode 100644 index 000000000..33a8569f7 --- /dev/null +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -0,0 +1,109 @@ +/* + * 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.behavior.elytra; + +import dev.babbaj.pathfinder.NetherPathfinder; +import dev.babbaj.pathfinder.PathSegment; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.chunk.BlockStateContainer; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.storage.ExtendedBlockStorage; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import static baritone.behavior.ElytraBehavior.passable; + +/** + * @author Brady + */ +public final class NetherPathfinderContext { + + private final long context; + private final long seed; + private final ExecutorService executor; + + public NetherPathfinderContext(long seed) { + this.context = NetherPathfinder.newContext(seed); + this.seed = seed; + this.executor = Executors.newSingleThreadExecutor(); + } + + public void queueForPacking(Chunk chunk) { + this.executor.submit(() -> NetherPathfinder.insertChunkData(this.context, chunk.x, chunk.z, pack(chunk))); + } + + public CompletableFuture pathFindAsync(final BlockPos src, final BlockPos dst) { + return CompletableFuture.supplyAsync(() -> + NetherPathfinder.pathFind( + this.context, + src.getX(), src.getY(), src.getZ(), + dst.getX(), dst.getY(), dst.getZ() + ), this.executor); + } + + public void destroy() { + // Ignore anything that was queued up, just shutdown the executor + this.executor.shutdownNow(); + + try { + while (!this.executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) {} + } catch (InterruptedException e) { + e.printStackTrace(); + } + + NetherPathfinder.freeContext(this.context); + } + + public long getSeed() { + return this.seed; + } + + private static boolean[] pack(Chunk chunk) { + try { + boolean[] packed = new boolean[16 * 16 * 128]; + ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); + for (int y0 = 0; y0 < 8; y0++) { + ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; + if (extendedblockstorage == null) { + continue; + } + BlockStateContainer bsc = extendedblockstorage.getData(); + int yReal = y0 << 4; + for (int y1 = 0; y1 < 16; y1++) { + int y = y1 | yReal; + for (int z = 0; z < 16; z++) { + for (int x = 0; x < 16; x++) { + IBlockState state = bsc.get(x, y1, z); + if (!passable(state)) { + packed[x + (z << 4) + (y << 8)] = true; + } + } + } + } + } + return packed; + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } +} From 0290b344dc7e9ccdf548bb2b44c28c49d33ed84a Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 02:33:43 -0500 Subject: [PATCH 618/935] Cancel before shutting down executor --- .../baritone/behavior/elytra/NetherPathfinderContext.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 33a8569f7..0fb1983f9 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -60,7 +60,12 @@ public CompletableFuture pathFindAsync(final BlockPos src, final Bl ), this.executor); } + public void cancel() { + NetherPathfinder.cancel(this.context); + } + public void destroy() { + this.cancel(); // Ignore anything that was queued up, just shutdown the executor this.executor.shutdownNow(); From d1a6de06e20ec677d902fd4234dfa7eb9422792d Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 14:15:57 -0500 Subject: [PATCH 619/935] =?UTF-8?q?=F0=9F=98=BC=20`PathManager`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baritone/behavior/ElytraBehavior.java | 350 +++++++++++------- .../behavior/elytra/UnpackedSegment.java | 65 ++++ 2 files changed, 291 insertions(+), 124 deletions(-) create mode 100644 src/main/java/baritone/behavior/elytra/UnpackedSegment.java diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index bd430b9e5..2226f5b1b 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -26,6 +26,7 @@ import baritone.api.utils.Rotation; import baritone.api.utils.RotationUtils; import baritone.behavior.elytra.NetherPathfinderContext; +import baritone.behavior.elytra.UnpackedSegment; import baritone.utils.BlockStateInterface; import com.mojang.realmsclient.util.Pair; import net.minecraft.block.material.Material; @@ -41,8 +42,8 @@ import net.minecraft.world.chunk.Chunk; import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import java.util.concurrent.CompletableFuture; +import java.util.function.UnaryOperator; public final class ElytraBehavior extends Behavior implements Helper { @@ -58,9 +59,7 @@ public final class ElytraBehavior extends Behavior implements Helper { // :sunglasses: private final NetherPathfinderContext context; - private List path; - public int playerNear; - private int goingTo; + private final PathManager pathManager; private int sinceFirework; public ElytraBehavior(Baritone baritone) { @@ -68,117 +67,259 @@ public ElytraBehavior(Baritone baritone) { this.context = new NetherPathfinderContext(NETHER_SEED); this.lines = new ArrayList<>(); this.visiblePath = Collections.emptyList(); - this.path = new ArrayList<>(); + this.pathManager = new PathManager(); } - @Override - public void onChunkEvent(ChunkEvent event) { - if (event.getState() == EventState.POST && event.getType().isPopulate()) { - final Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); - this.context.queueForPacking(chunk); + private final class PathManager { + + private BlockPos destination; + private List path; + private boolean completePath; + + private int playerNear; + private int goingTo; + + private boolean recalculating; + + public PathManager() { + // lol imagine initializing fields normally + this.clear(); } - } - boolean recalculating; + public void tick() { + // Recalculate closest path node + this.playerNear = this.calculateNear(this.playerNear); - private void pathfindAroundObstacles() { - if (this.recalculating) { - return; + // Obstacles are more important than an incomplete path, handle those first. + this.pathfindAroundObstacles(); + this.attemptNextSegment(); } - outer: - while (true) { - int rangeStartIncl = playerNear; - int rangeEndExcl = playerNear; - while (rangeEndExcl < path.size() && ctx.world().isBlockLoaded(path.get(rangeEndExcl), false)) { - rangeEndExcl++; + + public void pathToDestination(BlockPos destination) { + this.destination = destination; + this.path0(ctx.playerFeet(), destination, UnaryOperator.identity()) + .thenRun(() -> { + final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(this.path.size() - 1)); + if (this.completePath) { + logDirect(String.format("Computed path (%d blocks)", distance)); + } else { + logDirect(String.format("Computed segment (Next %d blocks)", distance)); + } + }); + } + + public void recalcSegment(final int upToIncl) { + if (this.recalculating) { + return; } - if (rangeStartIncl >= rangeEndExcl) { - // not loaded yet? + + this.recalculating = true; + final List after = this.path.subList(upToIncl, this.path.size()); + final boolean complete = this.completePath; + + this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete)) + .thenRun(() -> { + this.recalculating = false; + final int recompute = this.path.size() - after.size() - 1; + final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(recompute)); + logDirect(String.format("Recomputed segment (Next %d blocks)", distance)); + }); + } + + public void nextSegment(final int afterIncl) { + if (this.recalculating) { return; } - if (!passable(ctx.world().getBlockState(path.get(rangeStartIncl)))) { - // we're in a wall - return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: + + this.recalculating = true; + final List before = this.path.subList(0, afterIncl + 1); + + this.path0(this.path.get(afterIncl), this.destination, segment -> segment.prepend(before.stream())) + .thenRun(() -> { + this.recalculating = false; + final int recompute = this.path.size() - before.size() - 1; + final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(recompute)); + + if (this.completePath) { + logDirect(String.format("Computed path (%d blocks)", distance)); + } else { + logDirect(String.format("Computed next segment (Next %d blocks)", distance)); + } + }); + } + + private Vec3d pathAt(int i) { + return new Vec3d( + this.path.get(i).x + 0.5, + this.path.get(i).y + 0.5, + this.path.get(i).z + 0.5 + ); + } + + public void clear() { + this.path = Collections.emptyList(); + this.playerNear = 0; + this.goingTo = 0; + this.completePath = true; + } + + private void setPath(final UnpackedSegment segment) { + this.path = segment.collect(); + this.removeBacktracks(); + this.playerNear = 0; + this.goingTo = 0; + this.completePath = segment.isFinished(); + } + + public List getPath() { + return this.path; + } + + public int getNear() { + return this.playerNear; + } + + public void setGoingTo(int index) { + this.goingTo = index; + } + + public BetterBlockPos goingTo() { + return this.path.get(this.goingTo); + } + + // mickey resigned + private CompletableFuture path0(BlockPos src, BlockPos dst, UnaryOperator operator) { + return ElytraBehavior.this.context.pathFindAsync(src, dst) + .thenApply(UnpackedSegment::from) + .thenApply(operator) + .thenAcceptAsync(this::setPath, ctx.minecraft()::addScheduledTask); + } + + private void pathfindAroundObstacles() { + if (this.recalculating) { + return; } - for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { - if (!clearView(pathAt(i), pathAt(i + 1))) { - // obstacle. where do we return to pathing? - // find the next valid segment - List afterSplice = path.subList(rangeEndExcl - 1, path.size()); - path(path.get(rangeEndExcl - 1), afterSplice); - break outer; + + outer: + while (true) { + int rangeStartIncl = playerNear; + int rangeEndExcl = playerNear; + while (rangeEndExcl < path.size() && ctx.world().isBlockLoaded(path.get(rangeEndExcl), false)) { + rangeEndExcl++; } + if (rangeStartIncl >= rangeEndExcl) { + // not loaded yet? + return; + } + if (!passable(ctx.world().getBlockState(path.get(rangeStartIncl)))) { + // we're in a wall + return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: + } + for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { + if (!clearView(pathAt(i), pathAt(i + 1))) { + // obstacle. where do we return to pathing? + // find the next valid segment + this.recalcSegment(rangeEndExcl - 1); + break outer; + } + } + break; } - break; } - } - - public void path(BlockPos destination) { - path(destination, Collections.emptyList()); - } - public void path(BlockPos destination, List andThen) { - final boolean isRecalc = !andThen.isEmpty(); - this.recalculating = isRecalc; - - this.context.pathFindAsync(ctx.playerFeet(), destination).thenAccept(segment -> { - final List joined = Stream.concat( - Arrays.stream(segment.packed) - .mapToObj(BlockPos::fromLong) - .map(BetterBlockPos::new), - andThen.stream() - ).collect(Collectors.toList()); + private void attemptNextSegment() { + if (this.recalculating) { + return; + } - ctx.minecraft().addScheduledTask(() -> { - this.path = joined; - this.playerNear = 0; - this.goingTo = 0; + final int last = this.path.size() - 1; + if (!this.completePath && ctx.world().isBlockLoaded(this.path.get(last), false)) { + this.nextSegment(last); + } + } - final int distance = (int) Math.sqrt(this.path.get(0).distanceSq(this.path.get(segment.packed.length - 1))); + private int calculateNear(int index) { + final BetterBlockPos pos = ctx.playerFeet(); + for (int i = index; i >= Math.max(index - 1000, 0); i -= 10) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop + } + } + for (int i = index; i < Math.min(index + 1000, path.size()); i += 10) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop + } + } + for (int i = index; i >= Math.max(index - 50, 0); i--) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop + } + } + for (int i = index; i < Math.min(index + 50, path.size()); i++) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop + } + } + return index; + } - if (isRecalc) { - this.recalculating = false; - logDirect(String.format("Recalculated segment (%d blocks)", distance)); + private void removeBacktracks() { + Map positionFirstSeen = new HashMap<>(); + for (int i = 0; i < this.path.size(); i++) { + BetterBlockPos pos = this.path.get(i); + if (positionFirstSeen.containsKey(pos)) { + int j = positionFirstSeen.get(pos); + while (i > j) { + this.path.remove(i); + i--; + } } else { - logDirect(String.format("Computed path (%d blocks)", distance)); + positionFirstSeen.put(pos, i); } - removeBacktracks(); - }); - }); + } + } + } + + @Override + public void onChunkEvent(ChunkEvent event) { + if (event.getState() == EventState.POST && event.getType().isPopulate()) { + final Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); + this.context.queueForPacking(chunk); + } + } + + public void path(BlockPos destination) { + this.pathManager.pathToDestination(destination); } public void cancel() { this.visiblePath = Collections.emptyList(); - this.path.clear(); + this.pathManager.clear(); this.aimPos = null; - this.playerNear = 0; - this.goingTo = 0; this.sinceFirework = 0; } - private Vec3d pathAt(int i) { - return new Vec3d(path.get(i).x + 0.5, path.get(i).y + 0.5, path.get(i).z + 0.5); - } - @Override public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } + this.lines.clear(); + + final List path = this.pathManager.getPath(); if (path.isEmpty()) { return; } - playerNear = calculateNear(playerNear); - visiblePath = path.subList( + this.pathManager.tick(); + + final int playerNear = this.pathManager.getNear(); + this.visiblePath = path.subList( Math.max(playerNear - 30, 0), Math.min(playerNear + 30, path.size()) ); baritone.getInputOverrideHandler().clearAllKeys(); // FIXME: This breaks the regular path-finder - lines.clear(); - - pathfindAroundObstacles(); if (!ctx.player().isElytraFlying()) { return; @@ -204,19 +345,19 @@ public void onTick(TickEvent event) { int minStep = playerNear; for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { for (int dy : heights) { - Vec3d dest = pathAt(i).add(0, dy, 0); + Vec3d dest = this.pathManager.pathAt(i).add(0, dy, 0); if (dy != 0) { if (i + lookahead >= path.size()) { continue; } if (start.distanceTo(dest) < 40) { - if (!clearView(dest, pathAt(i + lookahead).add(0, dy, 0)) || !clearView(dest, pathAt(i + lookahead))) { + if (!clearView(dest, this.pathManager.pathAt(i + lookahead).add(0, dy, 0)) || !clearView(dest, this.pathManager.pathAt(i + lookahead))) { // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position continue; } } else { // but if it's far away, allow gaining altitude if we could lose it again by the time we get there - if (!clearView(dest, pathAt(i))) { + if (!clearView(dest, this.pathManager.pathAt(i))) { continue; } } @@ -231,8 +372,8 @@ public void onTick(TickEvent event) { } long b = System.currentTimeMillis(); System.out.println("Solved pitch in " + (b - a) + " total time " + (b - t)); - goingTo = i; - aimPos = path.get(i).add(0, dy, 0); + this.pathManager.setGoingTo(i); + this.aimPos = path.get(i).add(0, dy, 0); baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), pitch), false); break outermost; } @@ -244,11 +385,13 @@ public void onTick(TickEvent event) { } } + final BetterBlockPos goingTo = this.pathManager.goingTo(); + if (!firework && sinceFirework > 10 - && (Baritone.settings().wasteFireworks.value || ctx.player().posY < path.get(goingTo).y + 5) // don't firework if trying to descend - && (ctx.player().posY < path.get(goingTo).y - 5 || start.distanceTo(new Vec3d(path.get(goingTo).x + 0.5, ctx.player().posY, path.get(goingTo).z + 0.5)) > 5) // UGH!!!!!!! - && new Vec3d(ctx.player().motionX, ctx.player().posY < path.get(goingTo).y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending + && (Baritone.settings().wasteFireworks.value || ctx.player().posY < goingTo.y + 5) // don't firework if trying to descend + && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! + && new Vec3d(ctx.player().motionX, ctx.player().posY < goingTo.y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending ) { logDirect("firework"); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); @@ -377,47 +520,6 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, return new Vec3d(motionX, motionY, motionZ); } - private int calculateNear(int index) { - final BetterBlockPos pos = ctx.playerFeet(); - for (int i = index; i >= Math.max(index - 1000, 0); i -= 10) { - if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { - index = i; // intentional: this changes the bound of the loop - } - } - for (int i = index; i < Math.min(index + 1000, path.size()); i += 10) { - if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { - index = i; // intentional: this changes the bound of the loop - } - } - for (int i = index; i >= Math.max(index - 50, 0); i--) { - if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { - index = i; // intentional: this changes the bound of the loop - } - } - for (int i = index; i < Math.min(index + 50, path.size()); i++) { - if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { - index = i; // intentional: this changes the bound of the loop - } - } - return index; - } - - private void removeBacktracks() { - Map positionFirstSeen = new HashMap<>(); - for (int i = 0; i < path.size(); i++) { - BetterBlockPos pos = path.get(i); - if (positionFirstSeen.containsKey(pos)) { - int j = positionFirstSeen.get(pos); - while (i > j) { - path.remove(i); - i--; - } - } else { - positionFirstSeen.put(pos, i); - } - } - } - // TODO: Use the optimized version from builder-2 private RayTraceResult rayTraceBlocks(Vec3d start, Vec3d end) { int x1 = MathHelper.floor(end.x); diff --git a/src/main/java/baritone/behavior/elytra/UnpackedSegment.java b/src/main/java/baritone/behavior/elytra/UnpackedSegment.java new file mode 100644 index 000000000..7798113da --- /dev/null +++ b/src/main/java/baritone/behavior/elytra/UnpackedSegment.java @@ -0,0 +1,65 @@ +/* + * 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.behavior.elytra; + +import baritone.api.utils.BetterBlockPos; +import dev.babbaj.pathfinder.PathSegment; +import net.minecraft.util.math.BlockPos; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author Brady + */ +public final class UnpackedSegment { + + private final Stream path; + private final boolean finished; + + public UnpackedSegment(Stream path, boolean finished) { + this.path = path; + this.finished = finished; + } + + public UnpackedSegment append(Stream other, boolean otherFinished) { + // The new segment is only finished if the one getting added on is + return new UnpackedSegment(Stream.concat(this.path, other), otherFinished); + } + + public UnpackedSegment prepend(Stream other) { + return new UnpackedSegment(Stream.concat(other, this.path), this.finished); + } + + public List collect() { + return this.path.collect(Collectors.toList()); + } + + public boolean isFinished() { + return this.finished; + } + + public static UnpackedSegment from(final PathSegment segment) { + return new UnpackedSegment( + Arrays.stream(segment.packed).mapToObj(BlockPos::fromLong).map(BetterBlockPos::new), + segment.finished + ); + } +} From 4c2984a9a0201ecd791ff4df82911e0de923cd09 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 14:21:32 -0500 Subject: [PATCH 620/935] Consistent `path` prefix for methods --- src/main/java/baritone/behavior/ElytraBehavior.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 2226f5b1b..3109a6dcc 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -108,7 +108,7 @@ public void pathToDestination(BlockPos destination) { }); } - public void recalcSegment(final int upToIncl) { + public void pathRecalcSegment(final int upToIncl) { if (this.recalculating) { return; } @@ -126,7 +126,7 @@ public void recalcSegment(final int upToIncl) { }); } - public void nextSegment(final int afterIncl) { + public void pathNextSegment(final int afterIncl) { if (this.recalculating) { return; } @@ -219,7 +219,7 @@ private void pathfindAroundObstacles() { if (!clearView(pathAt(i), pathAt(i + 1))) { // obstacle. where do we return to pathing? // find the next valid segment - this.recalcSegment(rangeEndExcl - 1); + this.pathRecalcSegment(rangeEndExcl - 1); break outer; } } @@ -234,7 +234,7 @@ private void attemptNextSegment() { final int last = this.path.size() - 1; if (!this.completePath && ctx.world().isBlockLoaded(this.path.get(last), false)) { - this.nextSegment(last); + this.pathNextSegment(last); } } From 64a5ceabd8b1d4552435c0fc447e9b6ca3d9f59a Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 15:35:26 -0500 Subject: [PATCH 621/935] Fix the regular pathfinder issue --- src/main/java/baritone/behavior/ElytraBehavior.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 3109a6dcc..214a0d1fd 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -319,11 +319,12 @@ public void onTick(TickEvent event) { Math.min(playerNear + 30, path.size()) ); - baritone.getInputOverrideHandler().clearAllKeys(); // FIXME: This breaks the regular path-finder - if (!ctx.player().isElytraFlying()) { return; } + + baritone.getInputOverrideHandler().clearAllKeys(); + if (ctx.player().collidedHorizontally) { logDirect("hbonk"); } From 91609f4ebfc6598efda86316b60d00cca548d8b3 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 19:36:29 -0500 Subject: [PATCH 622/935] Use player bounding box in isClear --- .../baritone/behavior/ElytraBehavior.java | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 214a0d1fd..3e5dde199 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -35,10 +35,7 @@ import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.*; import net.minecraft.world.chunk.Chunk; import java.util.*; @@ -339,7 +336,6 @@ public void onTick(TickEvent event) { outermost: for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) int[] heights = firework ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost - boolean requireClear = relaxation == 0; int steps = relaxation < 2 ? firework ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); @@ -363,7 +359,12 @@ public void onTick(TickEvent event) { } } } - if (requireClear ? isClear(start, dest) : clearView(start, dest)) { + + // 1.0 -> 0.25 -> none + final Double grow = relaxation == 2 ? null + : relaxation == 0 ? 1.0d : 0.25d; + + if (isClear(start, dest, grow)) { Rotation rot = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()); long a = System.currentTimeMillis(); Float pitch = solvePitch(dest.subtract(start), steps, relaxation == 2); @@ -406,13 +407,32 @@ private boolean isFireworkActive() { .anyMatch(x -> (x instanceof EntityFireworkRocket) && ((EntityFireworkRocket) x).isAttachedToEntity()); } - private boolean isClear(Vec3d start, Vec3d dest) { - Vec3d perpendicular = dest.subtract(start).crossProduct(new Vec3d(0, 1, 0)).normalize(); - return clearView(start, dest) - && clearView(start.add(0, 2, 0), dest.add(0, 2, 0)) - && clearView(start.add(0, -2, 0), dest.add(0, -2, 0)) - && clearView(start.add(perpendicular), dest.add(perpendicular)) - && clearView(start.subtract(perpendicular), dest.subtract(perpendicular)); + private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAmount) { + if (!clearView(start, dest)) { + return false; + } + if (growAmount == null) { + return true; + } + + final AxisAlignedBB bb = ctx.player().getEntityBoundingBox().grow(growAmount); + final Vec3d[] corners = new Vec3d[] { + new Vec3d(bb.minX, bb.minY, bb.minZ), + new Vec3d(bb.minX, bb.minY, bb.maxZ), + new Vec3d(bb.minX, bb.maxY, bb.minZ), + new Vec3d(bb.minX, bb.maxY, bb.maxZ), + new Vec3d(bb.maxX, bb.minY, bb.minZ), + new Vec3d(bb.maxX, bb.minY, bb.maxZ), + new Vec3d(bb.maxX, bb.maxY, bb.minZ), + new Vec3d(bb.maxX, bb.maxY, bb.maxZ), + }; + + for (final Vec3d corner : corners) { + if (!clearView(corner, dest.add(corner.subtract(start)))) { + return false; + } + } + return true; } private boolean clearView(Vec3d start, Vec3d dest) { From fcf8cd35d24a2b85630c9c10ceeec09360986f7f Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 19:58:19 -0500 Subject: [PATCH 623/935] Handle exception to ensure `recalculating` is reset --- .../baritone/behavior/ElytraBehavior.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 3e5dde199..94033d60a 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -95,7 +95,11 @@ public void tick() { public void pathToDestination(BlockPos destination) { this.destination = destination; this.path0(ctx.playerFeet(), destination, UnaryOperator.identity()) - .thenRun(() -> { + .whenComplete((__, ex) -> { + if (ex != null) { + logDirect("Failed to compute path to destination"); + return; + } final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(this.path.size() - 1)); if (this.completePath) { logDirect(String.format("Computed path (%d blocks)", distance)); @@ -115,8 +119,12 @@ public void pathRecalcSegment(final int upToIncl) { final boolean complete = this.completePath; this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete)) - .thenRun(() -> { + .whenComplete((__, ex) -> { this.recalculating = false; + if (ex != null) { + logDirect("Failed to recompute segment"); + return; + } final int recompute = this.path.size() - after.size() - 1; final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(recompute)); logDirect(String.format("Recomputed segment (Next %d blocks)", distance)); @@ -132,8 +140,13 @@ public void pathNextSegment(final int afterIncl) { final List before = this.path.subList(0, afterIncl + 1); this.path0(this.path.get(afterIncl), this.destination, segment -> segment.prepend(before.stream())) - .thenRun(() -> { + .whenComplete((__, ex) -> { this.recalculating = false; + if (ex != null) { + logDirect("Failed to compute next segment"); + return; + } + final int recompute = this.path.size() - before.size() - 1; final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(recompute)); From fef7ba47010072af6bae29a204b60b00eca08296 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 17 Jun 2023 20:03:30 -0700 Subject: [PATCH 624/935] tweaks --- build.gradle | 4 ++-- src/main/java/baritone/behavior/ElytraBehavior.java | 12 ++++++------ .../behavior/elytra/NetherPathfinderContext.java | 3 ++- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index a389ae08f..6d0ba4f1a 100755 --- a/build.gradle +++ b/build.gradle @@ -175,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.8') + launchImplementation('dev.babbaj:nether-pathfinder:0.12') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.8' + implementation 'dev.babbaj:nether-pathfinder:0.12' } mixin { diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 94033d60a..e745ad53c 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -160,9 +160,9 @@ public void pathNextSegment(final int afterIncl) { private Vec3d pathAt(int i) { return new Vec3d( - this.path.get(i).x + 0.5, - this.path.get(i).y + 0.5, - this.path.get(i).z + 0.5 + this.path.get(i).x, + this.path.get(i).y, + this.path.get(i).z ); } @@ -326,7 +326,7 @@ public void onTick(TickEvent event) { final int playerNear = this.pathManager.getNear(); this.visiblePath = path.subList( Math.max(playerNear - 30, 0), - Math.min(playerNear + 30, path.size()) + Math.min(playerNear + 100, path.size()) ); if (!ctx.player().isElytraFlying()) { @@ -429,7 +429,7 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm } final AxisAlignedBB bb = ctx.player().getEntityBoundingBox().grow(growAmount); - final Vec3d[] corners = new Vec3d[] { + final Vec3d[] corners = new Vec3d[]{ new Vec3d(bb.minX, bb.minY, bb.minZ), new Vec3d(bb.minX, bb.minY, bb.maxZ), new Vec3d(bb.minX, bb.maxY, bb.minZ), @@ -479,7 +479,7 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate) { totalMotion = totalMotion.add(stepped); Vec3d actualPosition = ctx.playerFeetAsVec().add(totalMotion); for (int x = MathHelper.floor(Math.min(actualPosition.x, actualPositionPrevTick.x) - 0.31); x <= Math.max(actualPosition.x, actualPositionPrevTick.x) + 0.31; x++) { - for (int y = MathHelper.floor(Math.min(actualPosition.y, actualPositionPrevTick.y) - 0.2); y <= Math.max(actualPosition.y, actualPositionPrevTick.y) + 0.8; y++) { + for (int y = MathHelper.floor(Math.min(actualPosition.y, actualPositionPrevTick.y) - 0.2); y <= Math.max(actualPosition.y, actualPositionPrevTick.y) + 1; y++) { for (int z = MathHelper.floor(Math.min(actualPosition.z, actualPositionPrevTick.z) - 0.31); z <= Math.max(actualPosition.z, actualPositionPrevTick.z) + 0.31; z++) { if (!passable(bsi.get0(x, y, z))) { continue outer; diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 0fb1983f9..1c512b9c2 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -56,7 +56,8 @@ public CompletableFuture pathFindAsync(final BlockPos src, final Bl NetherPathfinder.pathFind( this.context, src.getX(), src.getY(), src.getZ(), - dst.getX(), dst.getY(), dst.getZ() + dst.getX(), dst.getY(), dst.getZ(), + true ), this.executor); } From 94027d17f2b6ec55558e7ec75f19857d5bac4e41 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 17 Jun 2023 20:12:05 -0700 Subject: [PATCH 625/935] gaming --- .../gradle/task/BaritoneGradleTask.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 7e26dac11..a542278aa 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -32,21 +32,21 @@ class BaritoneGradleTask extends DefaultTask { protected static final String - PROGUARD_ZIP = "proguard.zip", - PROGUARD_JAR = "proguard.jar", - PROGUARD_CONFIG_TEMPLATE = "scripts/proguard.pro", - PROGUARD_CONFIG_DEST = "template.pro", - PROGUARD_API_CONFIG = "api.pro", - PROGUARD_STANDALONE_CONFIG = "standalone.pro", - PROGUARD_EXPORT_PATH = "proguard_out.jar", - - TEMP_LIBRARY_DIR = "tempLibraries/", - - ARTIFACT_STANDARD = "%s-%s.jar", - ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", - ARTIFACT_API = "%s-api-%s.jar", - ARTIFACT_STANDALONE = "%s-standalone-%s.jar", - ARTIFACT_FORGE_API = "%s-api-forge-%s.jar", + PROGUARD_ZIP = "proguard.zip", + PROGUARD_JAR = "proguard.jar", + PROGUARD_CONFIG_TEMPLATE = "scripts/proguard.pro", + PROGUARD_CONFIG_DEST = "template.pro", + PROGUARD_API_CONFIG = "api.pro", + PROGUARD_STANDALONE_CONFIG = "standalone.pro", + PROGUARD_EXPORT_PATH = "proguard_out.jar", + + TEMP_LIBRARY_DIR = "tempLibraries/", + + ARTIFACT_STANDARD = "%s-%s.jar", + ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", + ARTIFACT_API = "%s-api-%s.jar", + ARTIFACT_STANDALONE = "%s-standalone-%s.jar", + ARTIFACT_FORGE_API = "%s-api-forge-%s.jar", ARTIFACT_FORGE_STANDALONE = "%s-standalone-forge-%s.jar"; protected String artifactName, artifactVersion; @@ -56,17 +56,17 @@ protected void verifyArtifacts() throws IllegalStateException { this.artifactName = getProject().getName(); this.artifactVersion = getProject().getVersion().toString(); - this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); - this.artifactForgeApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); + this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); + this.artifactForgeApiPath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_API)); this.artifactForgeStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_FORGE_STANDALONE)); this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); if (!Files.exists(this.artifactPath)) { - throw new IllegalStateException("Artifact not found! Run build first!"); + throw new IllegalStateException("Artifact not found! Run build first! " + this.artifactPath); } } @@ -82,7 +82,7 @@ protected String formatVersion(String string) { } protected Path getRelativeFile(String file) { - return Paths.get(new File(file).getAbsolutePath()); + return Paths.get(this.getProject().file(file).getAbsolutePath()); } protected Path getTemporaryFile(String file) { From 76c5c1155f7b237d1d1dae6c5cc593949a2b998d Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 18 Jun 2023 00:51:07 -0400 Subject: [PATCH 626/935] Fix ElytraCommand throwing exception for invalid goals --- .../baritone/behavior/ElytraBehavior.java | 4 +-- .../elytra/NetherPathfinderContext.java | 4 +-- .../command/defaults/ElytraCommand.java | 29 +++++++++++++++++-- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index e745ad53c..d4608a705 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -386,7 +386,7 @@ public void onTick(TickEvent event) { continue; } long b = System.currentTimeMillis(); - System.out.println("Solved pitch in " + (b - a) + " total time " + (b - t)); + //System.out.println("Solved pitch in " + (b - a) + " total time " + (b - t)); this.pathManager.setGoingTo(i); this.aimPos = path.get(i).add(0, dy, 0); baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), pitch), false); @@ -648,4 +648,4 @@ private RayTraceResult rayTraceBlocks(Vec3d start, Vec3d end) { } return null; } -} +} \ No newline at end of file diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 1c512b9c2..2d407375a 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -100,7 +100,7 @@ private static boolean[] pack(Chunk chunk) { for (int x = 0; x < 16; x++) { IBlockState state = bsc.get(x, y1, z); if (!passable(state)) { - packed[x + (z << 4) + (y << 8)] = true; + packed[x | (z << 4) | (y << 8)] = true; } } } @@ -112,4 +112,4 @@ private static boolean[] pack(Chunk chunk) { throw new RuntimeException(e); } } -} +} \ No newline at end of file diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 47db0e33e..1c9ee7882 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -22,6 +22,9 @@ import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalXZ; import baritone.api.process.ICustomGoalProcess; import net.minecraft.util.math.BlockPos; @@ -40,8 +43,28 @@ public ElytraCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); args.requireMax(0); - GoalXZ goal = (GoalXZ) customGoalProcess.getGoal(); - ((Baritone) baritone).getElytraBehavior().path(new BlockPos(goal.getX(), 64, goal.getZ())); + Goal iGoal = customGoalProcess.getGoal(); + if (iGoal == null) { + throw new CommandInvalidStateException("No goal has been set"); + } + final int x, y, z; + if (iGoal instanceof GoalXZ) { + GoalXZ goal = (GoalXZ) iGoal; + x = goal.getX(); + y = 64; + z = goal.getZ(); + } else if (iGoal instanceof GoalBlock) { + GoalBlock goal = (GoalBlock) iGoal; + x = goal.x; + y = goal.y; + z = goal.z; + } else { + throw new CommandInvalidStateException("The goal must be a GoalXZ or GoalBlock"); + } + if (y <= 0 || y >= 128) { + throw new CommandInvalidStateException("The y of the goal is not between 0 and 128"); + } + ((Baritone) baritone).getElytraBehavior().path(new BlockPos(x, y, z)); } @Override @@ -58,4 +81,4 @@ public String getShortDesc() { public List getLongDesc() { return Arrays.asList(); } -} +} \ No newline at end of file From da31a643b393e607fe26aa8aa70562ea9925bccb Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 17 Jun 2023 20:16:26 -0500 Subject: [PATCH 627/935] unscuff --- .../baritone/behavior/ElytraBehavior.java | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index d4608a705..75ceb6b5b 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -95,17 +95,19 @@ public void tick() { public void pathToDestination(BlockPos destination) { this.destination = destination; this.path0(ctx.playerFeet(), destination, UnaryOperator.identity()) - .whenComplete((__, ex) -> { - if (ex != null) { - logDirect("Failed to compute path to destination"); - return; - } + .thenRun(() -> { final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(this.path.size() - 1)); if (this.completePath) { logDirect(String.format("Computed path (%d blocks)", distance)); } else { logDirect(String.format("Computed segment (Next %d blocks)", distance)); } + }) + .whenComplete((result, ex) -> { + this.recalculating = false; + if (ex != null) { + logDirect("Failed to compute path to destination"); + } }); } @@ -119,15 +121,16 @@ public void pathRecalcSegment(final int upToIncl) { final boolean complete = this.completePath; this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete)) - .whenComplete((__, ex) -> { + .thenRun(() -> { + final int recompute = this.path.size() - after.size() - 1; + final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(recompute)); + logDirect(String.format("Recomputed segment (Next %d blocks)", distance)); + }) + .whenComplete((result, ex) -> { this.recalculating = false; if (ex != null) { logDirect("Failed to recompute segment"); - return; } - final int recompute = this.path.size() - after.size() - 1; - final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(recompute)); - logDirect(String.format("Recomputed segment (Next %d blocks)", distance)); }); } @@ -140,13 +143,7 @@ public void pathNextSegment(final int afterIncl) { final List before = this.path.subList(0, afterIncl + 1); this.path0(this.path.get(afterIncl), this.destination, segment -> segment.prepend(before.stream())) - .whenComplete((__, ex) -> { - this.recalculating = false; - if (ex != null) { - logDirect("Failed to compute next segment"); - return; - } - + .thenRun(() -> { final int recompute = this.path.size() - before.size() - 1; final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(recompute)); @@ -155,6 +152,12 @@ public void pathNextSegment(final int afterIncl) { } else { logDirect(String.format("Computed next segment (Next %d blocks)", distance)); } + }) + .whenComplete((result, ex) -> { + this.recalculating = false; + if (ex != null) { + logDirect("Failed to compute next segment"); + } }); } From 688bbb83c8dbe484b2b5285636b4a6b141ea2e4c Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 00:11:40 -0500 Subject: [PATCH 628/935] Rename `wasteFireworks` to `conserveFireworks` and invert --- src/api/java/baritone/api/Settings.java | 2 +- .../java/baritone/behavior/ElytraBehavior.java | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index f5cf3c77a..24e54c136 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -51,7 +51,7 @@ public final class Settings { public final Setting elytraSimulationTicks = new Setting<>(20); public final Setting elytraPitchRange = new Setting<>(25); public final Setting elytraFireworkSpeed = new Setting<>(0.6); - public final Setting wasteFireworks = new Setting<>(false); + public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 75ceb6b5b..9945d0b31 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -345,10 +345,10 @@ public void onTick(TickEvent event) { logDirect("vbonk"); } - Vec3d start = ctx.playerFeetAsVec(); - boolean firework = isFireworkActive(); - sinceFirework++; - final long t = System.currentTimeMillis(); + final Vec3d start = ctx.playerFeetAsVec(); + final boolean firework = isFireworkActive(); + this.sinceFirework++; + outermost: for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) int[] heights = firework ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost @@ -382,14 +382,11 @@ public void onTick(TickEvent event) { if (isClear(start, dest, grow)) { Rotation rot = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()); - long a = System.currentTimeMillis(); Float pitch = solvePitch(dest.subtract(start), steps, relaxation == 2); if (pitch == null) { baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), ctx.playerRotations().getPitch()), false); continue; } - long b = System.currentTimeMillis(); - //System.out.println("Solved pitch in " + (b - a) + " total time " + (b - t)); this.pathManager.setGoingTo(i); this.aimPos = path.get(i).add(0, dy, 0); baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), pitch), false); @@ -404,10 +401,11 @@ public void onTick(TickEvent event) { } final BetterBlockPos goingTo = this.pathManager.goingTo(); + final boolean useOnDescend = !Baritone.settings().conserveFireworks.value || ctx.player().posY < goingTo.y + 5; if (!firework && sinceFirework > 10 - && (Baritone.settings().wasteFireworks.value || ctx.player().posY < goingTo.y + 5) // don't firework if trying to descend + && useOnDescend && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! && new Vec3d(ctx.player().motionX, ctx.player().posY < goingTo.y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending ) { From d66b8f1dd8b5c96f741ae016868b689501441aef Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 00:13:55 -0500 Subject: [PATCH 629/935] Extract `currentSpeed` into variable --- src/main/java/baritone/behavior/ElytraBehavior.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 9945d0b31..8fdcb34f6 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -402,12 +402,18 @@ public void onTick(TickEvent event) { final BetterBlockPos goingTo = this.pathManager.goingTo(); final boolean useOnDescend = !Baritone.settings().conserveFireworks.value || ctx.player().posY < goingTo.y + 5; + final double currentSpeed = new Vec3d( + ctx.player().motionX, + // ignore y component if we are BOTH below where we want to be AND descending + ctx.player().posY < goingTo.y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, + ctx.player().motionZ + ).length(); if (!firework && sinceFirework > 10 && useOnDescend && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! - && new Vec3d(ctx.player().motionX, ctx.player().posY < goingTo.y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ).length() < Baritone.settings().elytraFireworkSpeed.value // ignore y component if we are BOTH below where we want to be AND descending + && currentSpeed < Baritone.settings().elytraFireworkSpeed.value ) { logDirect("firework"); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); From d4e6a84ec96ce5d2043d2a1d5b4ee5d4cee113c3 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 10:57:13 -0500 Subject: [PATCH 630/935] Remove usage of realms Pair class --- src/api/java/baritone/api/utils/Pair.java | 59 +++++++++++++++++++ .../baritone/behavior/ElytraBehavior.java | 14 ++--- .../java/baritone/utils/PathRenderer.java | 2 +- 3 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 src/api/java/baritone/api/utils/Pair.java diff --git a/src/api/java/baritone/api/utils/Pair.java b/src/api/java/baritone/api/utils/Pair.java new file mode 100644 index 000000000..ca7259520 --- /dev/null +++ b/src/api/java/baritone/api/utils/Pair.java @@ -0,0 +1,59 @@ +/* + * 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 java.util.Objects; + +/** + * @author Brady + */ +public final class Pair { + + private final A a; + private final B b; + + public Pair(A a, B b) { + this.a = a; + this.b = b; + } + + public A first() { + return this.a; + } + + public B second() { + return this.b; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || o.getClass() != Pair.class) { + return false; + } + Pair pair = (Pair) o; + return Objects.equals(this.a, pair.a) && Objects.equals(this.b, pair.b); + } + + @Override + public int hashCode() { + return 31 * Objects.hashCode(this.a) + Objects.hashCode(this.b); + } +} diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 8fdcb34f6..6ace0a4e1 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -21,14 +21,10 @@ import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.type.EventState; -import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.Helper; -import baritone.api.utils.Rotation; -import baritone.api.utils.RotationUtils; +import baritone.api.utils.*; import baritone.behavior.elytra.NetherPathfinderContext; import baritone.behavior.elytra.UnpackedSegment; import baritone.utils.BlockStateInterface; -import com.mojang.realmsclient.util.Pair; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; @@ -381,15 +377,15 @@ public void onTick(TickEvent event) { : relaxation == 0 ? 1.0d : 0.25d; if (isClear(start, dest, grow)) { - Rotation rot = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()); + float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); Float pitch = solvePitch(dest.subtract(start), steps, relaxation == 2); if (pitch == null) { - baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), ctx.playerRotations().getPitch()), false); + baritone.getLookBehavior().updateTarget(new Rotation(yaw, ctx.playerRotations().getPitch()), false); continue; } this.pathManager.setGoingTo(i); this.aimPos = path.get(i).add(0, dy, 0); - baritone.getLookBehavior().updateTarget(new Rotation(rot.getYaw(), pitch), false); + baritone.getLookBehavior().updateTarget(new Rotation(yaw, pitch), false); break outermost; } } @@ -456,7 +452,7 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm } private boolean clearView(Vec3d start, Vec3d dest) { - lines.add(Pair.of(start, dest)); + lines.add(new Pair<>(start, dest)); RayTraceResult result = rayTraceBlocks(start, dest); return result == null || result.typeOfHit == RayTraceResult.Type.MISS; } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index fa8925042..7274f5dbc 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -23,11 +23,11 @@ import baritone.api.pathing.goals.*; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.IPlayerContext; +import baritone.api.utils.Pair; import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.ElytraBehavior; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import com.mojang.realmsclient.util.Pair; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntityBeaconRenderer; From aec683d80f027a61a64e315366d06b6b5f847b89 Mon Sep 17 00:00:00 2001 From: 0x22 <0x22@futureclient.net> Date: Sun, 18 Jun 2023 12:21:01 -0400 Subject: [PATCH 631/935] fast raytrace --- .../baritone/behavior/ElytraBehavior.java | 194 ++++++++++-------- 1 file changed, 106 insertions(+), 88 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 6ace0a4e1..3d396b5e1 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -28,10 +28,9 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; -import net.minecraft.init.Blocks; -import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.*; +import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import java.util.*; @@ -453,8 +452,7 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm private boolean clearView(Vec3d start, Vec3d dest) { lines.add(new Pair<>(start, dest)); - RayTraceResult result = rayTraceBlocks(start, dest); - return result == null || result.typeOfHit == RayTraceResult.Type.MISS; + return !rayTraceBlocks(ctx.world(), start.x, start.y, start.z, dest.x, dest.y, dest.z); } private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate) { @@ -557,98 +555,118 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, return new Vec3d(motionX, motionY, motionZ); } - // TODO: Use the optimized version from builder-2 - private RayTraceResult rayTraceBlocks(Vec3d start, Vec3d end) { - int x1 = MathHelper.floor(end.x); - int y1 = MathHelper.floor(end.y); - int z1 = MathHelper.floor(end.z); - int x2 = MathHelper.floor(start.x); - int y2 = MathHelper.floor(start.y); - int z2 = MathHelper.floor(start.z); - BlockPos blockpos = new BlockPos(x2, y2, z2); - IBlockState iblockstate = ctx.world().getBlockState(blockpos); - if (!passable(iblockstate)) { - return Blocks.SPONGE.getDefaultState().collisionRayTrace(ctx.world(), blockpos, start, end); - } - int steps = 200; + private final BlockPos.MutableBlockPos mutableRaytraceBlockPos = new BlockPos.MutableBlockPos(); + + private boolean rayTraceBlocks(final World world, + final double startX, final double startY, final double startZ, + final double endX, final double endY, final double endZ) { + int voxelCurrX = fastFloor(startX); + int voxelCurrY = fastFloor(startY); + int voxelCurrZ = fastFloor(startZ); + + Chunk prevChunk; + IBlockState currentState = (prevChunk = cachedChunk(world, this.mutableRaytraceBlockPos.setPos(voxelCurrX, voxelCurrY, voxelCurrZ), null)).getBlockState(this.mutableRaytraceBlockPos); + + // This is true if player is standing inside of block. + if (!passable(currentState)) { + return true; + } + + final int voxelEndX = fastFloor(endX); + final int voxelEndY = fastFloor(endY); + final int voxelEndZ = fastFloor(endZ); + double currPosX = startX; + double currPosY = startY; + double currPosZ = startZ; + + int steps = 200; // TODO: should we lower the max steps? while (steps-- >= 0) { - if (Double.isNaN(start.x) || Double.isNaN(start.y) || Double.isNaN(start.z)) { - return null; - } - if (x2 == x1 && y2 == y1 && z2 == z1) { - return null; - } - boolean hitX = true; - boolean hitY = true; - boolean hitZ = true; - double nextX = 999.0D; - double nextY = 999.0D; - double nextZ = 999.0D; - if (x1 > x2) { - nextX = (double) x2 + 1.0D; - } else if (x1 < x2) { - nextX = (double) x2 + 0.0D; - } else { - hitX = false; - } - if (y1 > y2) { - nextY = (double) y2 + 1.0D; - } else if (y1 < y2) { - nextY = (double) y2 + 0.0D; - } else { - hitY = false; - } - if (z1 > z2) { - nextZ = (double) z2 + 1.0D; - } else if (z1 < z2) { - nextZ = (double) z2 + 0.0D; - } else { - hitZ = false; - } - double stepX = 999.0D; - double stepY = 999.0D; - double stepZ = 999.0D; - double dirX = end.x - start.x; - double dirY = end.y - start.y; - double dirZ = end.z - start.z; - if (hitX) { - stepX = (nextX - start.x) / dirX; - } - if (hitY) { - stepY = (nextY - start.y) / dirY; - } - if (hitZ) { - stepZ = (nextZ - start.z) / dirZ; + if (voxelCurrX == voxelEndX && voxelCurrY == voxelEndY && voxelCurrZ == voxelEndZ) { + return false; } - if (stepX == -0.0D) { - stepX = -1.0E-4D; + + final double distanceFromStartToEndX = endX - currPosX; + final double distanceFromStartToEndY = endY - currPosY; + final double distanceFromStartToEndZ = endZ - currPosZ; + + double nextIntegerX; + double nextIntegerY; + double nextIntegerZ; + // potentially more based branchless impl? + nextIntegerX = voxelCurrX + ((voxelCurrX - voxelEndX) >>> 31); // if voxelEnd > voxelIn, then voxelIn-voxelEnd will be negative, meaning the sign bit is 1 + nextIntegerY = voxelCurrY + ((voxelCurrY - voxelEndY) >>> 31); // if we do an unsigned right shift by 31, that sign bit becomes the LSB + nextIntegerZ = voxelCurrZ + ((voxelCurrZ - voxelEndZ) >>> 31); // therefore, this increments nextInteger iff EndX>inX, otherwise it leaves it alone + // remember: don't have to worry about the case when voxelEnd == voxelIn, because nextInteger value wont be used + + // these just have to be strictly greater than 1, might as well just go up to the next int + double fracIfSkipX = 2.0D; + double fracIfSkipY = 2.0D; + double fracIfSkipZ = 2.0D; + + // reminder to future self: don't "branchlessify" this, it's MUCH slower (pretty obviously, floating point div is much worse than a branch mispredict, but integer increment (like the other two removed branches) are cheap enough to be worth doing either way) + if (voxelEndX != voxelCurrX) { + fracIfSkipX = (nextIntegerX - currPosX) / distanceFromStartToEndX; } - if (stepY == -0.0D) { - stepY = -1.0E-4D; + if (voxelEndY != voxelCurrY) { + fracIfSkipY = (nextIntegerY - currPosY) / distanceFromStartToEndY; } - if (stepZ == -0.0D) { - stepZ = -1.0E-4D; + if (voxelEndZ != voxelCurrZ) { + fracIfSkipZ = (nextIntegerZ - currPosZ) / distanceFromStartToEndZ; } - EnumFacing dir; - if (stepX < stepY && stepX < stepZ) { - dir = x1 > x2 ? EnumFacing.WEST : EnumFacing.EAST; - start = new Vec3d(nextX, start.y + dirY * stepX, start.z + dirZ * stepX); - } else if (stepY < stepZ) { - dir = y1 > y2 ? EnumFacing.DOWN : EnumFacing.UP; - start = new Vec3d(start.x + dirX * stepY, nextY, start.z + dirZ * stepY); + + if (fracIfSkipX < fracIfSkipY && fracIfSkipX < fracIfSkipZ) { + // note: voxelEndX == voxelInX is impossible because allowSkip would be set to false in that case, meaning that the elapsed distance would stay at default + currPosX = nextIntegerX; + currPosY += distanceFromStartToEndY * fracIfSkipX; + currPosZ += distanceFromStartToEndZ * fracIfSkipX; + // tested: faster to paste this 3 times with only one of the subtractions in each + final int xFloorOffset = (voxelEndX - voxelCurrX) >>> 31; + voxelCurrX = (fastFloor(currPosX) - xFloorOffset); + voxelCurrY = (fastFloor(currPosY)); + voxelCurrZ = (fastFloor(currPosZ)); + } else if (fracIfSkipY < fracIfSkipZ) { + currPosX += distanceFromStartToEndX * fracIfSkipY; + currPosY = nextIntegerY; + currPosZ += distanceFromStartToEndZ * fracIfSkipY; + // tested: faster to paste this 3 times with only one of the subtractions in each + final int yFloorOffset = (voxelEndY - voxelCurrY) >>> 31; + voxelCurrX = (fastFloor(currPosX)); + voxelCurrY = (fastFloor(currPosY) - yFloorOffset); + voxelCurrZ = (fastFloor(currPosZ)); } else { - dir = z1 > z2 ? EnumFacing.NORTH : EnumFacing.SOUTH; - start = new Vec3d(start.x + dirX * stepZ, start.y + dirY * stepZ, nextZ); + currPosX += distanceFromStartToEndX * fracIfSkipZ; + currPosY += distanceFromStartToEndY * fracIfSkipZ; + currPosZ = nextIntegerZ; + // tested: faster to paste this 3 times with only one of the subtractions in each + final int zFloorOffset = (voxelEndZ - voxelCurrZ) >>> 31; + voxelCurrX = (fastFloor(currPosX)); + voxelCurrY = (fastFloor(currPosY)); + voxelCurrZ = (fastFloor(currPosZ) - zFloorOffset); } - x2 = MathHelper.floor(start.x) - (dir == EnumFacing.EAST ? 1 : 0); - y2 = MathHelper.floor(start.y) - (dir == EnumFacing.UP ? 1 : 0); - z2 = MathHelper.floor(start.z) - (dir == EnumFacing.SOUTH ? 1 : 0); - blockpos = new BlockPos(x2, y2, z2); - IBlockState iblockstate1 = ctx.world().getBlockState(blockpos); - if (!passable(iblockstate1)) { - return Blocks.NETHERRACK.getDefaultState().collisionRayTrace(ctx.world(), blockpos, start, end); + + currentState = (prevChunk = cachedChunk(world, this.mutableRaytraceBlockPos.setPos(voxelCurrX, voxelCurrY, voxelCurrZ), prevChunk)).getBlockState(this.mutableRaytraceBlockPos); + if (!passable(currentState)) { + return true; } } - return null; + return false; + } + + private static final double FLOOR_DOUBLE_D = 1_073_741_824.0; + private static final int FLOOR_DOUBLE_I = 1_073_741_824; + + private static int fastFloor(final double v) { + return ((int) (v + FLOOR_DOUBLE_D)) - FLOOR_DOUBLE_I; + } + + private static Chunk cachedChunk(final World world, + final BlockPos pos, + final Chunk prevLookup) { + final int chunkX = pos.getX() >> 4; + final int chunkZ = pos.getZ() >> 4; + if (prevLookup != null && prevLookup.x == chunkX && prevLookup.z == chunkZ) { + return prevLookup; + } + return world.getChunk(chunkX, chunkZ); } } \ No newline at end of file From 6aeb73b5bd30f74a8f39271e2cd0b4fc96ec3f22 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sun, 18 Jun 2023 19:18:46 +0200 Subject: [PATCH 632/935] Fix `CylinderMask` with horizontal alignment --- .../api/schematic/mask/shape/CylinderMask.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java b/src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java index 71b0d43c9..790a9a05d 100644 --- a/src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java +++ b/src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java @@ -35,8 +35,8 @@ public final class CylinderMask extends AbstractMask implements StaticMask { public CylinderMask(int widthX, int heightY, int lengthZ, boolean filled, EnumFacing.Axis alignment) { super(widthX, heightY, lengthZ); - this.centerA = this.getA(widthX, heightY) / 2.0; - this.centerB = this.getB(heightY, lengthZ) / 2.0; + this.centerA = this.getA(widthX, heightY, alignment) / 2.0; + this.centerB = this.getB(heightY, lengthZ, alignment) / 2.0; this.radiusSqA = (this.centerA - 1) * (this.centerA - 1); this.radiusSqB = (this.centerB - 1) * (this.centerB - 1); this.filled = filled; @@ -45,8 +45,8 @@ public CylinderMask(int widthX, int heightY, int lengthZ, boolean filled, EnumFa @Override public boolean partOfMask(int x, int y, int z) { - double da = Math.abs((this.getA(x, y) + 0.5) - this.centerA); - double db = Math.abs((this.getB(y, z) + 0.5) - this.centerB); + double da = Math.abs((this.getA(x, y, this.alignment) + 0.5) - this.centerA); + double db = Math.abs((this.getB(y, z, this.alignment) + 0.5) - this.centerB); if (this.outside(da, db)) { return false; } @@ -59,11 +59,11 @@ private boolean outside(double da, double db) { return da * da / this.radiusSqA + db * db / this.radiusSqB > 1; } - private int getA(int x, int y) { - return this.alignment == EnumFacing.Axis.X ? y : x; + private static int getA(int x, int y, EnumFacing.Axis alignment) { + return alignment == EnumFacing.Axis.X ? y : x; } - private int getB(int y, int z) { - return this.alignment == EnumFacing.Axis.Z ? y : z; + private static int getB(int y, int z, EnumFacing.Axis alignment) { + return alignment == EnumFacing.Axis.Z ? y : z; } } From 68901695cae0aa5b8d40ce6cf07b9e88cfe5efed Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 13:23:41 -0500 Subject: [PATCH 633/935] Add experimental takeoff feature --- src/api/java/baritone/api/Settings.java | 1 + .../baritone/behavior/ElytraBehavior.java | 37 ++++++++++++++----- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 24e54c136..9180c6ad7 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -54,6 +54,7 @@ public final class Settings { public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); + public final Setting experimentalTakeoff = new Setting<>(false); /** * Allow Baritone to break blocks diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 3d396b5e1..fa15e1678 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -342,6 +342,7 @@ public void onTick(TickEvent event) { final Vec3d start = ctx.playerFeetAsVec(); final boolean firework = isFireworkActive(); + boolean forceUseFirework = false; this.sinceFirework++; outermost: @@ -376,15 +377,18 @@ public void onTick(TickEvent event) { : relaxation == 0 ? 1.0d : 0.25d; if (isClear(start, dest, grow)) { - float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); - Float pitch = solvePitch(dest.subtract(start), steps, relaxation == 2); - if (pitch == null) { + final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); + + final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, firework); + if (pitch.first() == null) { baritone.getLookBehavior().updateTarget(new Rotation(yaw, ctx.playerRotations().getPitch()), false); continue; } + forceUseFirework = pitch.second(); + this.pathManager.setGoingTo(i); this.aimPos = path.get(i).add(0, dy, 0); - baritone.getLookBehavior().updateTarget(new Rotation(yaw, pitch), false); + baritone.getLookBehavior().updateTarget(new Rotation(yaw, pitch.first()), false); break outermost; } } @@ -404,13 +408,13 @@ public void onTick(TickEvent event) { ctx.player().motionZ ).length(); - if (!firework + if (forceUseFirework || (!firework && sinceFirework > 10 && useOnDescend && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! - && currentSpeed < Baritone.settings().elytraFireworkSpeed.value + && currentSpeed < Baritone.settings().elytraFireworkSpeed.value) ) { - logDirect("firework"); + logDirect("firework" + (forceUseFirework ? " takeoff" : "")); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); sinceFirework = 0; } @@ -455,7 +459,23 @@ private boolean clearView(Vec3d start, Vec3d dest) { return !rayTraceBlocks(ctx.world(), start.x, start.y, start.z, dest.x, dest.y, dest.z); } - private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate) { + private Pair solvePitch(Vec3d goalDirection, int steps, int relaxation, boolean currentlyBoosted) { + final Float pitch = this.solvePitch(goalDirection, steps, relaxation == 2, currentlyBoosted); + if (pitch != null) { + return new Pair<>(pitch, false); + } + + if (Baritone.settings().experimentalTakeoff.value && relaxation > 0) { + final Float usingFirework = this.solvePitch(goalDirection, steps, relaxation == 2, true); + if (usingFirework != null) { + return new Pair<>(usingFirework, true); + } + } + + return new Pair<>(null, false); + } + + private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, boolean firework) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch @@ -463,7 +483,6 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate) { goalDirection = goalDirection.normalize(); Rotation good = RotationUtils.calcRotationFromVec3d(new Vec3d(0, 0, 0), goalDirection, ctx.playerRotations()); // lazy lol - boolean firework = isFireworkActive(); Float bestPitch = null; double bestDot = Double.NEGATIVE_INFINITY; Vec3d motion = new Vec3d(ctx.player().motionX, ctx.player().motionY, ctx.player().motionZ); From 5fd915ab8acf41ed379f9f05431ff24a39b96f32 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sun, 18 Jun 2023 19:50:58 +0200 Subject: [PATCH 634/935] Tab complete the file argument for `#settings load` --- src/main/java/baritone/command/defaults/SetCommand.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index dd6f1204b..4325cd625 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -22,12 +22,14 @@ import baritone.api.Settings; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.RelativeFile; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.SettingsUtil; +import net.minecraft.client.Minecraft; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextFormatting; @@ -221,6 +223,9 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman .addToggleableSettings() .filterPrefix(args.getString()) .stream(); + } else if (Arrays.asList("ld", "load").contains(arg.toLowerCase(Locale.US))) { + // settings always use the directory of the main Minecraft instance + return RelativeFile.tabComplete(args, Minecraft.getMinecraft().gameDir.toPath().resolve("baritone").toFile()); } Settings.Setting setting = Baritone.settings().byLowerName.get(arg.toLowerCase(Locale.US)); if (setting != null) { From 8dc32ae03c9866df9d7c6957290c018ad6b66d69 Mon Sep 17 00:00:00 2001 From: rfresh2 <89827146+rfresh2@users.noreply.github.com> Date: Sat, 17 Jun 2023 22:24:10 -0700 Subject: [PATCH 635/935] firework inv management + pause/resume --- src/api/java/baritone/api/IBaritone.java | 7 ++ src/api/java/baritone/api/Settings.java | 8 ++ .../api/behavior/IElytraBehavior.java | 35 ++++++++ .../mixins/MixinEntityFireworkRocket.java | 35 ++++++++ src/launch/resources/mixins.baritone.json | 3 +- src/main/java/baritone/Baritone.java | 1 + .../baritone/behavior/ElytraBehavior.java | 89 +++++++++++++++++-- .../baritone/behavior/InventoryBehavior.java | 16 ++++ .../command/defaults/ElytraCommand.java | 2 +- .../defaults/ExecutionControlCommands.java | 2 + .../utils/accessor/IEntityFireworkRocket.java | 24 +++++ 11 files changed, 215 insertions(+), 7 deletions(-) create mode 100644 src/api/java/baritone/api/behavior/IElytraBehavior.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java create mode 100644 src/main/java/baritone/utils/accessor/IEntityFireworkRocket.java diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 0cc73b0d1..0913a8c43 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -17,6 +17,7 @@ package baritone.api; +import baritone.api.behavior.IElytraBehavior; import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.IPathingBehavior; import baritone.api.cache.IWorldProvider; @@ -40,6 +41,12 @@ public interface IBaritone { */ IPathingBehavior getPathingBehavior(); + /** + * @return The {@link IElytraBehavior} instance + * @see IElytraBehavior + */ + IElytraBehavior getElytraBehavior(); + /** * @return The {@link ILookBehavior} instance * @see ILookBehavior diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 9180c6ad7..116df04e0 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -50,6 +50,14 @@ public final class Settings { public final Setting elytraSimulationTicks = new Setting<>(20); public final Setting elytraPitchRange = new Setting<>(25); + /** + * Allow users to control firework usage instead of Baritone. e.g. with their own client modules. + */ + public final Setting elytraUseFireworks = new Setting<>(true); + /** + * Allow Baritone to manage fireworks in the inventory and hotbar + */ + public final Setting elytraInventory = new Setting<>(true); public final Setting elytraFireworkSpeed = new Setting<>(0.6); public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); diff --git a/src/api/java/baritone/api/behavior/IElytraBehavior.java b/src/api/java/baritone/api/behavior/IElytraBehavior.java new file mode 100644 index 000000000..dc44eacda --- /dev/null +++ b/src/api/java/baritone/api/behavior/IElytraBehavior.java @@ -0,0 +1,35 @@ +/* + * 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.behavior; + +public interface IElytraBehavior extends IBehavior { + /** + * Pause the current {@link IElytraBehavior} if it is pathing. + */ + void pause(); + + /** + * Resume the current {@link IElytraBehavior} if it is paused. + */ + void resume(); + + /** + * Returns true if the current {@link IElytraBehavior} is actively pathing and not paused. + */ + boolean isActive(); +} diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java b/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java new file mode 100644 index 000000000..274e979a0 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java @@ -0,0 +1,35 @@ +/* + * 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.utils.accessor.IEntityFireworkRocket; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityFireworkRocket; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(EntityFireworkRocket.class) +public abstract class MixinEntityFireworkRocket implements IEntityFireworkRocket { + @Shadow + private EntityLivingBase boostedEntity; + + @Override + public EntityLivingBase getBoostedEntity() { + return boostedEntity; + } +} diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 982736635..5c221de58 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -16,6 +16,7 @@ "MixinChunkProviderServer", "MixinChunkRenderContainer", "MixinChunkRenderWorker", + "MixinEntityFireworkRocket", "MixinEntityLivingBase", "MixinEntityPlayerSP", "MixinEntityRenderer", @@ -34,4 +35,4 @@ "MixinVboRenderList", "MixinWorldClient" ] -} \ No newline at end of file +} diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 457b49a45..05e1992c9 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -232,6 +232,7 @@ public CommandManager getCommandManager() { return this.commandManager; } + @Override public ElytraBehavior getElytraBehavior() { return this.elytraBehavior; } diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index fa15e1678..3da503066 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -18,6 +18,7 @@ package baritone.behavior; import baritone.Baritone; +import baritone.api.behavior.IElytraBehavior; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.type.EventState; @@ -25,11 +26,19 @@ import baritone.behavior.elytra.NetherPathfinderContext; import baritone.behavior.elytra.UnpackedSegment; import baritone.utils.BlockStateInterface; +import baritone.utils.accessor.IEntityFireworkRocket; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumHand; -import net.minecraft.util.math.*; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; @@ -37,7 +46,7 @@ import java.util.concurrent.CompletableFuture; import java.util.function.UnaryOperator; -public final class ElytraBehavior extends Behavior implements Helper { +public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { /** * 2b2t seed @@ -53,6 +62,7 @@ public final class ElytraBehavior extends Behavior implements Helper { private final NetherPathfinderContext context; private final PathManager pathManager; private int sinceFirework; + private boolean pawsed = false; public ElytraBehavior(Baritone baritone) { super(baritone); @@ -297,6 +307,7 @@ public void onChunkEvent(ChunkEvent event) { } public void path(BlockPos destination) { + pawsed = false; this.pathManager.pathToDestination(destination); } @@ -305,6 +316,23 @@ public void cancel() { this.pathManager.clear(); this.aimPos = null; this.sinceFirework = 0; + pawsed = false; + } + + public boolean isActive() { + return !this.pathManager.getPath().isEmpty() && !isPaused(); + } + + public void pause() { + this.pawsed = true; + } + + public void resume() { + this.pawsed = false; + } + + public boolean isPaused() { + return this.pawsed; } @Override @@ -312,6 +340,7 @@ public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } + if (isPaused()) return; this.lines.clear(); final List path = this.pathManager.getPath(); @@ -410,20 +439,69 @@ public void onTick(TickEvent event) { if (forceUseFirework || (!firework && sinceFirework > 10 + && Baritone.settings().elytraUseFireworks.value && useOnDescend && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! && currentSpeed < Baritone.settings().elytraFireworkSpeed.value) ) { + if (Baritone.settings().elytraInventory.value) { + final int firstFireworksInHotbar = firstFireworksInHotbar(); + if (firstFireworksInHotbar == -1) { + if (!swapToFireworksInInventory()) { + logDirect("no fireworks"); + return; + } + } else { + ctx.player().inventory.currentItem = firstFireworksInHotbar; + } + } logDirect("firework" + (forceUseFirework ? " takeoff" : "")); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); sinceFirework = 0; } } + private boolean swapToFireworksInInventory() { + final int i = firstFireworksInInventory(); + if (i != -1) { + baritone.getInventoryBehavior().attemptToPutOnHotbar(i, (slot) -> slot != 7); + ctx.player().inventory.currentItem = 7; + return true; + } + return false; + } + + private int firstFireworksInInventory() { + final NonNullList invy = ctx.player().inventory.mainInventory; + for (int i = 0; i < invy.size(); i++) { + if (isBoostingFireworks(invy.get(i))) { + return i; + } + } + return -1; + } + + private int firstFireworksInHotbar() { + final NonNullList invy = ctx.player().inventory.mainInventory; + for (int i = 0; i < 9; i++) { + if (isBoostingFireworks(invy.get(i))) { + return i; + } + } + return -1; + } + + private boolean isBoostingFireworks(final ItemStack itemStack) { + final NBTTagCompound subCompound = itemStack.getSubCompound("Fireworks"); + return itemStack.getItem() == Items.FIREWORKS + && subCompound != null + && subCompound.hasKey("Flight"); + } + private boolean isFireworkActive() { - // TODO: Validate that the EntityFireworkRocket is attached to ctx.player() return ctx.world().loadedEntityList.stream() - .anyMatch(x -> (x instanceof EntityFireworkRocket) && ((EntityFireworkRocket) x).isAttachedToEntity()); + .filter(x -> x instanceof EntityFireworkRocket) + .anyMatch(x -> Objects.equals(((IEntityFireworkRocket) x).getBoostedEntity(), ctx.player())); } private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAmount) { @@ -688,4 +766,5 @@ private static Chunk cachedChunk(final World world, } return world.getChunk(chunkX, chunkZ); } -} \ No newline at end of file +} + diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 93dc200cc..5c351adce 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -25,8 +25,10 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.inventory.ClickType; import net.minecraft.item.*; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.NonNullList; @@ -150,6 +152,20 @@ private int bestToolAgainst(Block against, Class cla$$) { return bestInd; } + private int firstFireworks() { + final NonNullList invy = ctx.player().inventory.mainInventory; + for (int i = 0; i < invy.size(); i++) { + final ItemStack itemStack = invy.get(i); + final NBTTagCompound subCompound = itemStack.getSubCompound("Fireworks"); + if (itemStack.getItem() == Items.FIREWORKS + && subCompound != null + && subCompound.hasKey("Flight")) { + return i; + } + } + return -1; + } + public boolean hasGenericThrowaway() { for (Item item : Baritone.settings().acceptableThrowawayItems.value) { if (throwaway(false, stack -> item.equals(stack.getItem()))) { diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 1c9ee7882..7c101fd3b 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -81,4 +81,4 @@ public String getShortDesc() { public List getLongDesc() { return Arrays.asList(); } -} \ No newline at end of file +} diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index ef566bb8d..6ca324ad7 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -89,6 +89,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { throw new CommandInvalidStateException("Already paused"); } paused[0] = true; + baritone.getElytraBehavior().pause(); logDirect("Paused"); } @@ -123,6 +124,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { throw new CommandInvalidStateException("Not paused"); } paused[0] = false; + baritone.getElytraBehavior().resume(); logDirect("Resumed"); } diff --git a/src/main/java/baritone/utils/accessor/IEntityFireworkRocket.java b/src/main/java/baritone/utils/accessor/IEntityFireworkRocket.java new file mode 100644 index 000000000..86c96acd9 --- /dev/null +++ b/src/main/java/baritone/utils/accessor/IEntityFireworkRocket.java @@ -0,0 +1,24 @@ +/* + * 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.accessor; + +import net.minecraft.entity.EntityLivingBase; + +public interface IEntityFireworkRocket { + EntityLivingBase getBoostedEntity(); +} From 1dbfc9abe39a71063cbcbefa946f3b8cd149feee Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 19:57:29 -0500 Subject: [PATCH 636/935] optimize block lookups and move goingTo to local --- .../baritone/behavior/ElytraBehavior.java | 59 ++++++------------- 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index fa15e1678..c2ef38425 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -30,7 +30,6 @@ import net.minecraft.entity.item.EntityFireworkRocket; import net.minecraft.util.EnumHand; import net.minecraft.util.math.*; -import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import java.util.*; @@ -69,7 +68,6 @@ private final class PathManager { private boolean completePath; private int playerNear; - private int goingTo; private boolean recalculating; @@ -167,7 +165,6 @@ private Vec3d pathAt(int i) { public void clear() { this.path = Collections.emptyList(); this.playerNear = 0; - this.goingTo = 0; this.completePath = true; } @@ -175,7 +172,6 @@ private void setPath(final UnpackedSegment segment) { this.path = segment.collect(); this.removeBacktracks(); this.playerNear = 0; - this.goingTo = 0; this.completePath = segment.isFinished(); } @@ -187,14 +183,6 @@ public int getNear() { return this.playerNear; } - public void setGoingTo(int index) { - this.goingTo = index; - } - - public BetterBlockPos goingTo() { - return this.path.get(this.goingTo); - } - // mickey resigned private CompletableFuture path0(BlockPos src, BlockPos dst, UnaryOperator operator) { return ElytraBehavior.this.context.pathFindAsync(src, dst) @@ -319,6 +307,7 @@ public void onTick(TickEvent event) { return; } + this.bsi = new BlockStateInterface(ctx); this.pathManager.tick(); final int playerNear = this.pathManager.getNear(); @@ -342,6 +331,7 @@ public void onTick(TickEvent event) { final Vec3d start = ctx.playerFeetAsVec(); final boolean firework = isFireworkActive(); + BetterBlockPos goingTo = null; boolean forceUseFirework = false; this.sinceFirework++; @@ -354,7 +344,8 @@ public void onTick(TickEvent event) { int minStep = playerNear; for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { for (int dy : heights) { - Vec3d dest = this.pathManager.pathAt(i).add(0, dy, 0); + final BetterBlockPos pos = path.get(i); + Vec3d dest = new Vec3d(pos).add(0, dy, 0); if (dy != 0) { if (i + lookahead >= path.size()) { continue; @@ -385,9 +376,8 @@ public void onTick(TickEvent event) { continue; } forceUseFirework = pitch.second(); - - this.pathManager.setGoingTo(i); - this.aimPos = path.get(i).add(0, dy, 0); + goingTo = pos; + this.aimPos = goingTo.add(0, dy, 0); baritone.getLookBehavior().updateTarget(new Rotation(yaw, pitch.first()), false); break outermost; } @@ -399,7 +389,6 @@ public void onTick(TickEvent event) { } } - final BetterBlockPos goingTo = this.pathManager.goingTo(); final boolean useOnDescend = !Baritone.settings().conserveFireworks.value || ctx.player().posY < goingTo.y + 5; final double currentSpeed = new Vec3d( ctx.player().motionX, @@ -456,7 +445,7 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm private boolean clearView(Vec3d start, Vec3d dest) { lines.add(new Pair<>(start, dest)); - return !rayTraceBlocks(ctx.world(), start.x, start.y, start.z, dest.x, dest.y, dest.z); + return !rayTraceBlocks(start.x, start.y, start.z, dest.x, dest.y, dest.z); } private Pair solvePitch(Vec3d goalDirection, int steps, int relaxation, boolean currentlyBoosted) { @@ -486,7 +475,6 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, bool Float bestPitch = null; double bestDot = Double.NEGATIVE_INFINITY; Vec3d motion = new Vec3d(ctx.player().motionX, ctx.player().motionY, ctx.player().motionZ); - BlockStateInterface bsi = new BlockStateInterface(ctx); float minPitch = desperate ? -90 : Math.max(good.getPitch() - Baritone.settings().elytraPitchRange.value, -89); float maxPitch = desperate ? 90 : Math.min(good.getPitch() + Baritone.settings().elytraPitchRange.value, 89); outer: @@ -501,7 +489,7 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, bool for (int x = MathHelper.floor(Math.min(actualPosition.x, actualPositionPrevTick.x) - 0.31); x <= Math.max(actualPosition.x, actualPositionPrevTick.x) + 0.31; x++) { for (int y = MathHelper.floor(Math.min(actualPosition.y, actualPositionPrevTick.y) - 0.2); y <= Math.max(actualPosition.y, actualPositionPrevTick.y) + 1; y++) { for (int z = MathHelper.floor(Math.min(actualPosition.z, actualPositionPrevTick.z) - 0.31); z <= Math.max(actualPosition.z, actualPositionPrevTick.z) + 0.31; z++) { - if (!passable(bsi.get0(x, y, z))) { + if (!this.passable(x, y, z)) { continue outer; } } @@ -519,6 +507,12 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, bool return bestPitch; } + private BlockStateInterface bsi; + + public boolean passable(int x, int y, int z) { + return passable(this.bsi.get0(x, y, z)); + } + public static boolean passable(IBlockState state) { return state.getMaterial() == Material.AIR; } @@ -574,20 +568,13 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, return new Vec3d(motionX, motionY, motionZ); } - private final BlockPos.MutableBlockPos mutableRaytraceBlockPos = new BlockPos.MutableBlockPos(); - - private boolean rayTraceBlocks(final World world, - final double startX, final double startY, final double startZ, + private boolean rayTraceBlocks(final double startX, final double startY, final double startZ, final double endX, final double endY, final double endZ) { int voxelCurrX = fastFloor(startX); int voxelCurrY = fastFloor(startY); int voxelCurrZ = fastFloor(startZ); - Chunk prevChunk; - IBlockState currentState = (prevChunk = cachedChunk(world, this.mutableRaytraceBlockPos.setPos(voxelCurrX, voxelCurrY, voxelCurrZ), null)).getBlockState(this.mutableRaytraceBlockPos); - - // This is true if player is standing inside of block. - if (!passable(currentState)) { + if (!this.passable(voxelCurrX, voxelCurrY, voxelCurrZ)) { return true; } @@ -663,8 +650,7 @@ private boolean rayTraceBlocks(final World world, voxelCurrZ = (fastFloor(currPosZ) - zFloorOffset); } - currentState = (prevChunk = cachedChunk(world, this.mutableRaytraceBlockPos.setPos(voxelCurrX, voxelCurrY, voxelCurrZ), prevChunk)).getBlockState(this.mutableRaytraceBlockPos); - if (!passable(currentState)) { + if (!this.passable(voxelCurrX, voxelCurrY, voxelCurrZ)) { return true; } } @@ -677,15 +663,4 @@ private boolean rayTraceBlocks(final World world, private static int fastFloor(final double v) { return ((int) (v + FLOOR_DOUBLE_D)) - FLOOR_DOUBLE_I; } - - private static Chunk cachedChunk(final World world, - final BlockPos pos, - final Chunk prevLookup) { - final int chunkX = pos.getX() >> 4; - final int chunkZ = pos.getZ() >> 4; - if (prevLookup != null && prevLookup.x == chunkX && prevLookup.z == chunkZ) { - return prevLookup; - } - return world.getChunk(chunkX, chunkZ); - } } \ No newline at end of file From 812be14375df960cc0495fcd62acc30698db0fa6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 18 Jun 2023 18:06:32 -0700 Subject: [PATCH 637/935] debug --- .../baritone/behavior/ElytraBehavior.java | 129 +++++++++++++++++- .../java/baritone/utils/PathRenderer.java | 14 +- 2 files changed, 134 insertions(+), 9 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index c2ef38425..d0fd210eb 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -28,8 +28,12 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; -import net.minecraft.util.math.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.chunk.Chunk; import java.util.*; @@ -44,7 +48,8 @@ public final class ElytraBehavior extends Behavior implements Helper { private static final long NETHER_SEED = 146008555100680L; // Used exclusively for PathRenderer - public List> lines; + public List> clearLines; + public List> blockedLines; public BlockPos aimPos; public List visiblePath; @@ -56,7 +61,8 @@ public final class ElytraBehavior extends Behavior implements Helper { public ElytraBehavior(Baritone baritone) { super(baritone); this.context = new NetherPathfinderContext(NETHER_SEED); - this.lines = new ArrayList<>(); + this.clearLines = new ArrayList<>(); + this.blockedLines = new ArrayList<>(); this.visiblePath = Collections.emptyList(); this.pathManager = new PathManager(); } @@ -300,7 +306,8 @@ public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } - this.lines.clear(); + this.clearLines.clear(); + this.blockedLines.clear(); final List path = this.pathManager.getPath(); if (path.isEmpty()) { @@ -376,8 +383,12 @@ public void onTick(TickEvent event) { continue; } forceUseFirework = pitch.second(); + logDirect("final dy " + dy); + logDirect("i " + i); + logDirect("playerNear " + playerNear); + logDirect("relaxation " + relaxation); goingTo = pos; - this.aimPos = goingTo.add(0, dy, 0); + this.aimPos = path.get(i).add(0, dy, 0); baritone.getLookBehavior().updateTarget(new Rotation(yaw, pitch.first()), false); break outermost; } @@ -444,8 +455,18 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm } private boolean clearView(Vec3d start, Vec3d dest) { - lines.add(new Pair<>(start, dest)); - return !rayTraceBlocks(start.x, start.y, start.z, dest.x, dest.y, dest.z); + boolean oxy = !rayTraceBlocks(start.x, start.y, start.z, dest.x, dest.y, dest.z); + boolean meow = !rayTraceBlocks(start, dest); + if (oxy != meow) { + logDirect(start + " " + dest + " " + oxy + " " + meow); + } + if (oxy) { + clearLines.add(new Pair<>(start, dest)); + return true; + } else { + blockedLines.add(new Pair<>(start, dest)); + return false; + } } private Pair solvePitch(Vec3d goalDirection, int steps, int relaxation, boolean currentlyBoosted) { @@ -663,4 +684,98 @@ private boolean rayTraceBlocks(final double startX, final double startY, final d private static int fastFloor(final double v) { return ((int) (v + FLOOR_DOUBLE_D)) - FLOOR_DOUBLE_I; } + + private boolean rayTraceBlocks(Vec3d start, Vec3d end) { + int x1 = MathHelper.floor(end.x); + int y1 = MathHelper.floor(end.y); + int z1 = MathHelper.floor(end.z); + int x2 = MathHelper.floor(start.x); + int y2 = MathHelper.floor(start.y); + int z2 = MathHelper.floor(start.z); + BlockPos blockpos = new BlockPos(x2, y2, z2); + IBlockState iblockstate = ctx.world().getBlockState(blockpos); + if (!passable(iblockstate)) { + return true; + } + int steps = 200; + while (steps-- >= 0) { + if (Double.isNaN(start.x) || Double.isNaN(start.y) || Double.isNaN(start.z)) { + return false; + } + if (x2 == x1 && y2 == y1 && z2 == z1) { + return false; + } + boolean hitX = true; + boolean hitY = true; + boolean hitZ = true; + double nextX = 999.0D; + double nextY = 999.0D; + double nextZ = 999.0D; + if (x1 > x2) { + nextX = (double) x2 + 1.0D; + } else if (x1 < x2) { + nextX = (double) x2 + 0.0D; + } else { + hitX = false; + } + if (y1 > y2) { + nextY = (double) y2 + 1.0D; + } else if (y1 < y2) { + nextY = (double) y2 + 0.0D; + } else { + hitY = false; + } + if (z1 > z2) { + nextZ = (double) z2 + 1.0D; + } else if (z1 < z2) { + nextZ = (double) z2 + 0.0D; + } else { + hitZ = false; + } + double stepX = 999.0D; + double stepY = 999.0D; + double stepZ = 999.0D; + double dirX = end.x - start.x; + double dirY = end.y - start.y; + double dirZ = end.z - start.z; + if (hitX) { + stepX = (nextX - start.x) / dirX; + } + if (hitY) { + stepY = (nextY - start.y) / dirY; + } + if (hitZ) { + stepZ = (nextZ - start.z) / dirZ; + } + if (stepX == -0.0D) { + stepX = -1.0E-4D; + } + if (stepY == -0.0D) { + stepY = -1.0E-4D; + } + if (stepZ == -0.0D) { + stepZ = -1.0E-4D; + } + EnumFacing dir; + if (stepX < stepY && stepX < stepZ) { + dir = x1 > x2 ? EnumFacing.WEST : EnumFacing.EAST; + start = new Vec3d(nextX, start.y + dirY * stepX, start.z + dirZ * stepX); + } else if (stepY < stepZ) { + dir = y1 > y2 ? EnumFacing.DOWN : EnumFacing.UP; + start = new Vec3d(start.x + dirX * stepY, nextY, start.z + dirZ * stepY); + } else { + dir = z1 > z2 ? EnumFacing.NORTH : EnumFacing.SOUTH; + start = new Vec3d(start.x + dirX * stepZ, start.y + dirY * stepZ, nextZ); + } + x2 = MathHelper.floor(start.x) - (dir == EnumFacing.EAST ? 1 : 0); + y2 = MathHelper.floor(start.y) - (dir == EnumFacing.UP ? 1 : 0); + z2 = MathHelper.floor(start.z) - (dir == EnumFacing.SOUTH ? 1 : 0); + blockpos = new BlockPos(x2, y2, z2); + IBlockState iblockstate1 = ctx.world().getBlockState(blockpos); + if (!passable(iblockstate1)) { + return true; + } + } + return false; + } } \ No newline at end of file diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 7274f5dbc..d608d4a2b 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -108,11 +108,21 @@ public static void render(RenderEvent event, PathingBehavior behavior) { if (elytra.aimPos != null) { drawGoal(ctx.player(), new GoalBlock(elytra.aimPos), partialTicks, Color.GREEN); } - if (!elytra.lines.isEmpty() && Baritone.settings().renderRaytraces.value) { + if (!elytra.clearLines.isEmpty() && Baritone.settings().renderRaytraces.value) { + IRenderer.startLines(Color.GREEN, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + boolean orig = settings.renderPathAsLine.value; + settings.renderPathAsLine.value = true; + for (Pair line : elytra.clearLines) { + emitLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); + } + settings.renderPathAsLine.value = orig; + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } + if (!elytra.blockedLines.isEmpty() && Baritone.settings().renderRaytraces.value) { IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); boolean orig = settings.renderPathAsLine.value; settings.renderPathAsLine.value = true; - for (Pair line : elytra.lines) { + for (Pair line : elytra.blockedLines) { emitLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); } settings.renderPathAsLine.value = orig; From a236031435d3c6d8c528c583da08df7372929cf7 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 18 Jun 2023 18:09:45 -0700 Subject: [PATCH 638/935] fix raytracer --- src/main/java/baritone/behavior/ElytraBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index d0fd210eb..3d3d4843c 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -455,7 +455,7 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm } private boolean clearView(Vec3d start, Vec3d dest) { - boolean oxy = !rayTraceBlocks(start.x, start.y, start.z, dest.x, dest.y, dest.z); + boolean oxy = !rayTraceBlocks(start.x + 0.0001 * Math.random(), start.y + 0.0001 * Math.random(), start.z + 0.0001 * Math.random(), dest.x + 0.0001 * Math.random(), dest.y + 0.0001 * Math.random(), dest.z + 0.0001 * Math.random()); boolean meow = !rayTraceBlocks(start, dest); if (oxy != meow) { logDirect(start + " " + dest + " " + oxy + " " + meow); From efae476bc028f04dbe01d9b99e4adfaeade003c1 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 18 Jun 2023 18:16:13 -0700 Subject: [PATCH 639/935] solved --- src/main/java/baritone/behavior/ElytraBehavior.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 3d3d4843c..97dc24102 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -162,9 +162,9 @@ public void pathNextSegment(final int afterIncl) { private Vec3d pathAt(int i) { return new Vec3d( - this.path.get(i).x, - this.path.get(i).y, - this.path.get(i).z + this.path.get(i).x + 0.000123, + this.path.get(i).y + 0.000456, + this.path.get(i).z + 0.000789 ); } @@ -351,8 +351,7 @@ public void onTick(TickEvent event) { int minStep = playerNear; for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { for (int dy : heights) { - final BetterBlockPos pos = path.get(i); - Vec3d dest = new Vec3d(pos).add(0, dy, 0); + Vec3d dest = this.pathManager.pathAt(i).add(0, dy, 0); if (dy != 0) { if (i + lookahead >= path.size()) { continue; @@ -387,7 +386,7 @@ public void onTick(TickEvent event) { logDirect("i " + i); logDirect("playerNear " + playerNear); logDirect("relaxation " + relaxation); - goingTo = pos; + goingTo = path.get(i); this.aimPos = path.get(i).add(0, dy, 0); baritone.getLookBehavior().updateTarget(new Rotation(yaw, pitch.first()), false); break outermost; @@ -455,7 +454,7 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm } private boolean clearView(Vec3d start, Vec3d dest) { - boolean oxy = !rayTraceBlocks(start.x + 0.0001 * Math.random(), start.y + 0.0001 * Math.random(), start.z + 0.0001 * Math.random(), dest.x + 0.0001 * Math.random(), dest.y + 0.0001 * Math.random(), dest.z + 0.0001 * Math.random()); + boolean oxy = !rayTraceBlocks(start.x, start.y, start.z, dest.x, dest.y, dest.z); boolean meow = !rayTraceBlocks(start, dest); if (oxy != meow) { logDirect(start + " " + dest + " " + oxy + " " + meow); From 1837b66bb5153e14ad46cc7269fb3e6c70367bd0 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 21:24:13 -0500 Subject: [PATCH 640/935] Add `BlockChangeEvent` Moves the cache repack on block change functionality into `GameEventHandler` --- .../java/baritone/api/IBaritoneProvider.java | 17 +++ .../api/event/events/BlockChangeEvent.java | 49 +++++++ .../baritone/api/event/events/ChunkEvent.java | 15 +- .../listener/AbstractGameEventListener.java | 3 + .../event/listener/IGameEventListener.java | 7 + .../mixins/MixinNetHandlerPlayClient.java | 128 +++++++----------- .../java/baritone/event/GameEventHandler.java | 30 +++- 7 files changed, 164 insertions(+), 85 deletions(-) create mode 100644 src/api/java/baritone/api/event/events/BlockChangeEvent.java diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 55d208e03..cf816b40f 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -23,6 +23,7 @@ import baritone.api.schematic.ISchematicSystem; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.network.NetHandlerPlayClient; import java.util.List; import java.util.Objects; @@ -82,6 +83,22 @@ default IBaritone getBaritoneForMinecraft(Minecraft minecraft) { return null; } + /** + * Provides the {@link IBaritone} instance for the player with the specified connection. + * + * @param connection The connection + * @return The {@link IBaritone} instance. + */ + default IBaritone getBaritoneForConnection(NetHandlerPlayClient connection) { + for (IBaritone baritone : this.getAllBaritones()) { + final EntityPlayerSP player = baritone.getPlayerContext().player(); + if (player != null && player.connection == connection) { + return baritone; + } + } + return null; + } + /** * Creates and registers a new {@link IBaritone} instance using the specified {@link Minecraft}. The existing * instance is returned if already registered. diff --git a/src/api/java/baritone/api/event/events/BlockChangeEvent.java b/src/api/java/baritone/api/event/events/BlockChangeEvent.java new file mode 100644 index 000000000..152c435ae --- /dev/null +++ b/src/api/java/baritone/api/event/events/BlockChangeEvent.java @@ -0,0 +1,49 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.utils.Pair; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +/** + * @author Brady + */ +public final class BlockChangeEvent { + + private final Set affectedChunks; + private final List> blocks; + + public BlockChangeEvent(ChunkPos pos, List> blocks) { + this.affectedChunks = Collections.singleton(pos); + this.blocks = blocks; + } + + public Set getAffectedChunks() { + return this.affectedChunks; + } + + public List> getBlocks() { + return this.blocks; + } +} diff --git a/src/api/java/baritone/api/event/events/ChunkEvent.java b/src/api/java/baritone/api/event/events/ChunkEvent.java index a7b5d96f0..bb22a47b1 100644 --- a/src/api/java/baritone/api/event/events/ChunkEvent.java +++ b/src/api/java/baritone/api/event/events/ChunkEvent.java @@ -57,31 +57,38 @@ public ChunkEvent(EventState state, Type type, int x, int z) { /** * @return The state of the event */ - public final EventState getState() { + public EventState getState() { return this.state; } /** * @return The type of chunk event that occurred; */ - public final Type getType() { + public Type getType() { return this.type; } /** * @return The Chunk X position. */ - public final int getX() { + public int getX() { return this.x; } /** * @return The Chunk Z position. */ - public final int getZ() { + public int getZ() { return this.z; } + /** + * @return {@code true} if the event was fired after a chunk population + */ + public boolean isPostPopulate() { + return this.state == EventState.POST && this.type.isPopulate(); + } + public enum Type { /** diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index 9eac8de46..64ae0c16e 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -45,6 +45,9 @@ default void onPreTabComplete(TabCompleteEvent event) {} @Override default void onChunkEvent(ChunkEvent event) {} + @Override + default void onBlockChange(BlockChangeEvent event) {} + @Override default void onRenderPass(RenderEvent event) {} diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index b074e978b..71e9521ad 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -72,6 +72,13 @@ public interface IGameEventListener { */ void onChunkEvent(ChunkEvent event); + /** + * Runs after a single or multi block change packet is received and processed. + * + * @param event The event + */ + void onBlockChange(BlockChangeEvent event); + /** * Runs once per world render pass. Two passes are made when {@link GameSettings#anaglyph} is on. *

diff --git a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java index f1c1f7972..cdbeffc6c 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java @@ -17,24 +17,29 @@ package baritone.launch.mixins; -import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import baritone.api.event.events.BlockChangeEvent; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.type.EventState; -import baritone.cache.CachedChunk; -import net.minecraft.client.entity.EntityPlayerSP; +import baritone.api.utils.Pair; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.network.play.server.SPacketBlockChange; import net.minecraft.network.play.server.SPacketChunkData; import net.minecraft.network.play.server.SPacketCombatEvent; import net.minecraft.network.play.server.SPacketMultiBlockChange; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; 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.CallbackInfo; +import java.util.Arrays; +import java.util.Collections; +import java.util.stream.Collectors; + /** * @author Brady * @since 8/3/2018 @@ -50,19 +55,18 @@ public class MixinNetHandlerPlayClient { ) ) private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - EntityPlayerSP player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.PRE, - packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, - packetIn.getChunkX(), - packetIn.getChunkZ() - ) - ); - } + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForConnection((NetHandlerPlayClient) (Object) this); + if (baritone == null) { + return; } + baritone.getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.PRE, + packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, + packetIn.getChunkX(), + packetIn.getChunkZ() + ) + ); } @Inject( @@ -70,19 +74,18 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { at = @At("RETURN") ) private void postHandleChunkData(SPacketChunkData packetIn, CallbackInfo ci) { - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - EntityPlayerSP player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, - packetIn.getChunkX(), - packetIn.getChunkZ() - ) - ); - } + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForConnection((NetHandlerPlayClient) (Object) this); + if (baritone == null) { + return; } + baritone.getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.POST, + packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, + packetIn.getChunkX(), + packetIn.getChunkZ() + ) + ); } @Inject( @@ -90,25 +93,14 @@ private void postHandleChunkData(SPacketChunkData packetIn, CallbackInfo ci) { at = @At("RETURN") ) private void postHandleBlockChange(SPacketBlockChange packetIn, CallbackInfo ci) { - if (!Baritone.settings().repackOnAnyBlockChange.value) { - return; - } - if (!CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(packetIn.getBlockState().getBlock())) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForConnection((NetHandlerPlayClient) (Object) this); + if (baritone == null) { return; } - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - EntityPlayerSP player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - ChunkEvent.Type.POPULATE_FULL, - packetIn.getBlockPosition().getX() >> 4, - packetIn.getBlockPosition().getZ() >> 4 - ) - ); - } - } + + final ChunkPos pos = new ChunkPos(packetIn.getBlockPosition().getX() >> 4, packetIn.getBlockPosition().getZ() >> 4); + final Pair changed = new Pair<>(packetIn.getBlockPosition(), packetIn.getBlockState()); + baritone.getGameEventHandler().onBlockChange(new BlockChangeEvent(pos, Collections.singletonList(changed))); } @Inject( @@ -116,35 +108,20 @@ private void postHandleBlockChange(SPacketBlockChange packetIn, CallbackInfo ci) at = @At("RETURN") ) private void postHandleMultiBlockChange(SPacketMultiBlockChange packetIn, CallbackInfo ci) { - if (!Baritone.settings().repackOnAnyBlockChange.value) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForConnection((NetHandlerPlayClient) (Object) this); + if (baritone == null) { return; } - if (packetIn.getChangedBlocks().length == 0) { - return; - } - https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.15 - { - for (SPacketMultiBlockChange.BlockUpdateData update : packetIn.getChangedBlocks()) { - if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(update.getBlockState().getBlock())) { - break https; - } - } - return; - } - ChunkPos pos = new ChunkPos(packetIn.getChangedBlocks()[0].getPos()); - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - EntityPlayerSP player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - ChunkEvent.Type.POPULATE_FULL, - pos.x, - pos.z - ) - ); - } - } + + // All blocks have the same ChunkPos + final ChunkPos pos = new ChunkPos(packetIn.getChangedBlocks()[0].getPos()); + + baritone.getGameEventHandler().onBlockChange(new BlockChangeEvent( + pos, + Arrays.stream(packetIn.getChangedBlocks()) + .map(data -> new Pair<>(data.getPos(), data.getBlockState())) + .collect(Collectors.toList()) + )); } @Inject( @@ -155,11 +132,10 @@ private void postHandleMultiBlockChange(SPacketMultiBlockChange packetIn, Callba ) ) private void onPlayerDeath(SPacketCombatEvent packetIn, CallbackInfo ci) { - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - EntityPlayerSP player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (NetHandlerPlayClient) (Object) this) { - ibaritone.getGameEventHandler().onPlayerDeath(); - } + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForConnection((NetHandlerPlayClient) (Object) this); + if (baritone == null) { + return; } + baritone.getGameEventHandler().onPlayerDeath(); } } diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 0b46eb5e1..ceb05e739 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -23,8 +23,11 @@ import baritone.api.event.listener.IEventBus; import baritone.api.event.listener.IGameEventListener; import baritone.api.utils.Helper; +import baritone.api.utils.Pair; +import baritone.cache.CachedChunk; import baritone.cache.WorldProvider; import baritone.utils.BlockStateInterface; +import net.minecraft.block.state.IBlockState; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; @@ -75,13 +78,10 @@ public void onPreTabComplete(TabCompleteEvent event) { } @Override - public final void onChunkEvent(ChunkEvent event) { + public void onChunkEvent(ChunkEvent event) { EventState state = event.getState(); ChunkEvent.Type type = event.getType(); - boolean isPostPopulate = state == EventState.POST - && (type == ChunkEvent.Type.POPULATE_FULL || type == ChunkEvent.Type.POPULATE_PARTIAL); - World world = baritone.getPlayerContext().world(); // Whenever the server sends us to another dimension, chunks are unloaded @@ -91,7 +91,7 @@ public final void onChunkEvent(ChunkEvent event) { && type == ChunkEvent.Type.UNLOAD && world.getChunkProvider().isChunkGeneratedAt(event.getX(), event.getZ()); - if (isPostPopulate || isPreUnload) { + if (event.isPostPopulate() || isPreUnload) { baritone.getWorldProvider().ifWorldLoaded(worldData -> { Chunk chunk = world.getChunk(event.getX(), event.getZ()); worldData.getCachedWorld().queueForPacking(chunk); @@ -102,6 +102,26 @@ public final void onChunkEvent(ChunkEvent event) { listeners.forEach(l -> l.onChunkEvent(event)); } + @Override + public void onBlockChange(BlockChangeEvent event) { + if (Baritone.settings().repackOnAnyBlockChange.value) { + final boolean keepingTrackOf = event.getBlocks().stream() + .map(Pair::second).map(IBlockState::getBlock) + .anyMatch(CachedChunk.BLOCKS_TO_KEEP_TRACK_OF::contains); + + if (keepingTrackOf) { + baritone.getWorldProvider().ifWorldLoaded(worldData -> { + final World world = baritone.getPlayerContext().world(); + event.getAffectedChunks().stream() + .map(pos -> world.getChunk(pos.x, pos.z)) + .forEach(worldData.getCachedWorld()::queueForPacking); + }); + } + } + + listeners.forEach(l -> l.onBlockChange(event)); + } + @Override public final void onRenderPass(RenderEvent event) { listeners.forEach(l -> l.onRenderPass(event)); From 9808f62fe4c004fd865970b4a1cfdf8f2cbadfe7 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 21:25:00 -0500 Subject: [PATCH 641/935] Send chunks to nether-pathfinder on `BlockUpdateEvent` --- .../java/baritone/behavior/ElytraBehavior.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 97dc24102..6260b42bf 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -18,9 +18,9 @@ package baritone.behavior; import baritone.Baritone; +import baritone.api.event.events.BlockChangeEvent; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.TickEvent; -import baritone.api.event.events.type.EventState; import baritone.api.utils.*; import baritone.behavior.elytra.NetherPathfinderContext; import baritone.behavior.elytra.UnpackedSegment; @@ -284,12 +284,19 @@ private void removeBacktracks() { @Override public void onChunkEvent(ChunkEvent event) { - if (event.getState() == EventState.POST && event.getType().isPopulate()) { + if (event.isPostPopulate()) { final Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); this.context.queueForPacking(chunk); } } + @Override + public void onBlockChange(BlockChangeEvent event) { + event.getAffectedChunks().stream() + .map(pos -> ctx.world().getChunk(pos.x, pos.z)) + .forEach(this.context::queueForPacking); + } + public void path(BlockPos destination) { this.pathManager.pathToDestination(destination); } @@ -382,10 +389,6 @@ public void onTick(TickEvent event) { continue; } forceUseFirework = pitch.second(); - logDirect("final dy " + dy); - logDirect("i " + i); - logDirect("playerNear " + playerNear); - logDirect("relaxation " + relaxation); goingTo = path.get(i); this.aimPos = path.get(i).add(0, dy, 0); baritone.getLookBehavior().updateTarget(new Rotation(yaw, pitch.first()), false); From 6c8f2698d697c3ffaca7022f29644c6317435494 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 18 Jun 2023 19:31:51 -0700 Subject: [PATCH 642/935] cherry pick remainWithExistingLookDirection from fork --- src/api/java/baritone/api/Settings.java | 6 ++++++ src/api/java/baritone/api/utils/RotationUtils.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index bcd3eaa63..824dfd7e2 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -729,6 +729,12 @@ public final class Settings { */ public final Setting blockFreeLook = new Setting<>(false); + /** + * When true, the player will remain with its existing look direction as often as possible. + * Although, in some cases this can get it stuck, hence this setting to disable that behavior. + */ + public final Setting remainWithExistingLookDirection = new Setting<>(true); + /** * Will cause some minor behavioral differences to ensure that Baritone works on anticheats. *

diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 1991ab878..b3b67d9ca 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -161,7 +161,7 @@ public static Optional reachable(IPlayerContext ctx, BlockPos pos, dou } public static Optional reachable(IPlayerContext ctx, BlockPos pos, double blockReachDistance, boolean wouldSneak) { - if (ctx.isLookingAt(pos)) { + if (BaritoneAPI.getSettings().remainWithExistingLookDirection.value && ctx.isLookingAt(pos)) { /* * why add 0.0001? * to indicate that we actually have a desired pitch From 7a8f8e8d47b8703c588d11e96771fe158f314f45 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 21:42:04 -0500 Subject: [PATCH 643/935] fix noob error from resolving merge conflicts --- src/main/java/baritone/behavior/ElytraBehavior.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 200ca48cb..77f414776 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -340,7 +340,6 @@ public void onTick(TickEvent event) { return; } if (isPaused()) return; - this.lines.clear(); this.clearLines.clear(); this.blockedLines.clear(); From 0886f176b3280e0bbb902c265c3d3e4ef160b488 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 21:46:03 -0500 Subject: [PATCH 644/935] Make elytra API changes --- .../api/behavior/IElytraBehavior.java | 15 +++++------ .../baritone/behavior/ElytraBehavior.java | 25 ++++++------------- .../command/defaults/ElytraCommand.java | 2 +- .../defaults/ExecutionControlCommands.java | 2 -- 4 files changed, 14 insertions(+), 30 deletions(-) diff --git a/src/api/java/baritone/api/behavior/IElytraBehavior.java b/src/api/java/baritone/api/behavior/IElytraBehavior.java index dc44eacda..3c3b91466 100644 --- a/src/api/java/baritone/api/behavior/IElytraBehavior.java +++ b/src/api/java/baritone/api/behavior/IElytraBehavior.java @@ -17,19 +17,16 @@ package baritone.api.behavior; +import net.minecraft.util.math.BlockPos; + public interface IElytraBehavior extends IBehavior { - /** - * Pause the current {@link IElytraBehavior} if it is pathing. - */ - void pause(); - /** - * Resume the current {@link IElytraBehavior} if it is paused. - */ - void resume(); + void pathTo(BlockPos destination); + + void cancel(); /** - * Returns true if the current {@link IElytraBehavior} is actively pathing and not paused. + * Returns {@code true} if the current {@link IElytraBehavior} is actively pathing. */ boolean isActive(); } diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 77f414776..12723a001 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -64,7 +64,6 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private final NetherPathfinderContext context; private final PathManager pathManager; private int sinceFirework; - private boolean pawsed = false; public ElytraBehavior(Baritone baritone) { super(baritone); @@ -180,6 +179,7 @@ public void clear() { this.path = Collections.emptyList(); this.playerNear = 0; this.completePath = true; + this.destination = null; } private void setPath(final UnpackedSegment segment) { @@ -305,33 +305,22 @@ public void onBlockChange(BlockChangeEvent event) { .forEach(this.context::queueForPacking); } - public void path(BlockPos destination) { - pawsed = false; + @Override + public void pathTo(BlockPos destination) { this.pathManager.pathToDestination(destination); } + @Override public void cancel() { this.visiblePath = Collections.emptyList(); this.pathManager.clear(); this.aimPos = null; this.sinceFirework = 0; - pawsed = false; } + @Override public boolean isActive() { - return !this.pathManager.getPath().isEmpty() && !isPaused(); - } - - public void pause() { - this.pawsed = true; - } - - public void resume() { - this.pawsed = false; - } - - public boolean isPaused() { - return this.pawsed; + return !this.pathManager.getPath().isEmpty(); } @Override @@ -339,7 +328,7 @@ public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } - if (isPaused()) return; + this.clearLines.clear(); this.blockedLines.clear(); diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 7c101fd3b..f96901b9b 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -64,7 +64,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (y <= 0 || y >= 128) { throw new CommandInvalidStateException("The y of the goal is not between 0 and 128"); } - ((Baritone) baritone).getElytraBehavior().path(new BlockPos(x, y, z)); + ((Baritone) baritone).getElytraBehavior().pathTo(new BlockPos(x, y, z)); } @Override diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index 6ca324ad7..ef566bb8d 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -89,7 +89,6 @@ public void execute(String label, IArgConsumer args) throws CommandException { throw new CommandInvalidStateException("Already paused"); } paused[0] = true; - baritone.getElytraBehavior().pause(); logDirect("Paused"); } @@ -124,7 +123,6 @@ public void execute(String label, IArgConsumer args) throws CommandException { throw new CommandInvalidStateException("Not paused"); } paused[0] = false; - baritone.getElytraBehavior().resume(); logDirect("Resumed"); } From 1257a0128cdcd95637b33c75c9baccd34ceac216 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 21:46:56 -0500 Subject: [PATCH 645/935] Remove unnecessary `Baritone` casts --- src/main/java/baritone/command/defaults/ElytraCommand.java | 2 +- .../baritone/command/defaults/ExecutionControlCommands.java | 2 +- src/main/java/baritone/command/defaults/ForceCancelCommand.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index f96901b9b..3414c7bb3 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -64,7 +64,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (y <= 0 || y >= 128) { throw new CommandInvalidStateException("The y of the goal is not between 0 and 128"); } - ((Baritone) baritone).getElytraBehavior().pathTo(new BlockPos(x, y, z)); + baritone.getElytraBehavior().pathTo(new BlockPos(x, y, z)); } @Override diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index ef566bb8d..e7f7c9497 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -181,7 +181,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { paused[0] = false; } baritone.getPathingBehavior().cancelEverything(); - ((Baritone) baritone).getElytraBehavior().cancel(); + baritone.getElytraBehavior().cancel(); logDirect("ok canceled"); } diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index 60ccdab01..bc6dbd0a4 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -40,7 +40,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); pathingBehavior.cancelEverything(); pathingBehavior.forceCancel(); - ((Baritone) baritone).getElytraBehavior().cancel(); + baritone.getElytraBehavior().cancel(); logDirect("ok force canceled"); } From 1da7ab2c2229373d1f4ba1bcb0cb70248961eb7e Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Jun 2023 23:58:20 -0500 Subject: [PATCH 646/935] Fix raytracer rendering --- src/main/java/baritone/utils/PathRenderer.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index d608d4a2b..5898ce643 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -110,22 +110,16 @@ public static void render(RenderEvent event, PathingBehavior behavior) { } if (!elytra.clearLines.isEmpty() && Baritone.settings().renderRaytraces.value) { IRenderer.startLines(Color.GREEN, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); - boolean orig = settings.renderPathAsLine.value; - settings.renderPathAsLine.value = true; for (Pair line : elytra.clearLines) { emitLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); } - settings.renderPathAsLine.value = orig; IRenderer.endLines(settings.renderPathIgnoreDepth.value); } if (!elytra.blockedLines.isEmpty() && Baritone.settings().renderRaytraces.value) { IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); - boolean orig = settings.renderPathAsLine.value; - settings.renderPathAsLine.value = true; for (Pair line : elytra.blockedLines) { emitLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); } - settings.renderPathAsLine.value = orig; IRenderer.endLines(settings.renderPathIgnoreDepth.value); } @@ -179,13 +173,21 @@ private static void drawPath(List positions, int startIndex, Col IRenderer.glColor(color, alpha); } - emitLine(start.x, start.y, start.z, end.x, end.y, end.z); + emitPathLine(start.x, start.y, start.z, end.x, end.y, end.z); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } private static void emitLine(double x1, double y1, double z1, double x2, double y2, double z2) { + double vpX = renderManager.viewerPosX; + double vpY = renderManager.viewerPosY; + double vpZ = renderManager.viewerPosZ; + buffer.pos(x1 - vpX, y1 - vpY, z1 - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x2 - vpX, y2 - vpY, z2 - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + } + + private static void emitPathLine(double x1, double y1, double z1, double x2, double y2, double z2) { double vpX = renderManager.viewerPosX; double vpY = renderManager.viewerPosY; double vpZ = renderManager.viewerPosZ; From 67efb7a5b676dbcf7afe59dede5155ab3dbbd821 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 00:34:22 -0500 Subject: [PATCH 647/935] Add `experimentalRaytrace` setting for native raytrace Update `nether-pathfinder` to 0.15 --- build.gradle | 4 +- src/api/java/baritone/api/Settings.java | 3 + .../baritone/behavior/ElytraBehavior.java | 57 +++++++++++++++---- .../elytra/NetherPathfinderContext.java | 23 +++++++- 4 files changed, 74 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index 6d0ba4f1a..c3ef73c32 100755 --- a/build.gradle +++ b/build.gradle @@ -175,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.12') + launchImplementation('dev.babbaj:nether-pathfinder:0.15') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.12' + implementation 'dev.babbaj:nether-pathfinder:0.15' } mixin { diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 116df04e0..3f46c24d9 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -62,7 +62,10 @@ public final class Settings { public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); + + // Experimental Elytra Settings public final Setting experimentalTakeoff = new Setting<>(false); + public final Setting experimentalRaytrace = new Setting<>(false); /** * Allow Baritone to break blocks diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 12723a001..2a6c3c0c8 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -40,7 +40,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import java.util.*; @@ -169,9 +168,9 @@ public void pathNextSegment(final int afterIncl) { private Vec3d pathAt(int i) { return new Vec3d( - this.path.get(i).x + 0.000123, - this.path.get(i).y + 0.000456, - this.path.get(i).z + 0.000789 + this.path.get(i).x, + this.path.get(i).y, + this.path.get(i).z ); } @@ -502,6 +501,44 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm } final AxisAlignedBB bb = ctx.player().getEntityBoundingBox().grow(growAmount); + + if (Baritone.settings().experimentalRaytrace.value) { + final double ox = dest.x - start.x; + final double oy = dest.y - start.y; + final double oz = dest.z - start.z; + + final double[] src = new double[] { + bb.minX, bb.minY, bb.minZ, + bb.minX, bb.minY, bb.maxZ, + bb.minX, bb.maxY, bb.minZ, + bb.minX, bb.maxY, bb.maxZ, + bb.maxX, bb.minY, bb.minZ, + bb.maxX, bb.minY, bb.maxZ, + bb.maxX, bb.maxY, bb.minZ, + bb.maxX, bb.maxY, bb.maxZ, + }; + final double[] dst = new double[] { + bb.minX + ox, bb.minY + oy, bb.minZ + oz, + bb.minX + ox, bb.minY + oy, bb.maxZ + oz, + bb.minX + ox, bb.maxY + oy, bb.minZ + oz, + bb.minX + ox, bb.maxY + oy, bb.maxZ + oz, + bb.maxX + ox, bb.minY + oy, bb.minZ + oz, + bb.maxX + ox, bb.minY + oy, bb.maxZ + oz, + bb.maxX + ox, bb.maxY + oy, bb.minZ + oz, + bb.maxX + ox, bb.maxY + oy, bb.maxZ + oz, + }; + + // Batch together all 8 traces + final boolean[] hitOut = new boolean[8]; + this.context.raytrace(src, dst, hitOut); + for (boolean hit : hitOut) { + if (hit) { + return false; + } + } + return true; + } + final Vec3d[] corners = new Vec3d[]{ new Vec3d(bb.minX, bb.minY, bb.minZ), new Vec3d(bb.minX, bb.minY, bb.maxZ), @@ -522,12 +559,12 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm } private boolean clearView(Vec3d start, Vec3d dest) { - boolean oxy = !rayTraceBlocks(start.x, start.y, start.z, dest.x, dest.y, dest.z); - boolean meow = !rayTraceBlocks(start, dest); - if (oxy != meow) { - logDirect(start + " " + dest + " " + oxy + " " + meow); - } - if (oxy) { + boolean clear = !(Baritone.settings().experimentalRaytrace.value + ? this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z) + : this.rayTraceBlocks(start.x, start.y, start.z, dest.x, dest.y, dest.z) // ox method + ); + + if (clear) { clearLines.add(new Pair<>(start, dest)); return true; } else { diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 2d407375a..0a833ab5d 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -21,6 +21,7 @@ import dev.babbaj.pathfinder.PathSegment; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.chunk.BlockStateContainer; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; @@ -57,10 +58,30 @@ public CompletableFuture pathFindAsync(final BlockPos src, final Bl this.context, src.getX(), src.getY(), src.getZ(), dst.getX(), dst.getY(), dst.getZ(), - true + true, + 10000 ), this.executor); } + public boolean raytrace(final double startX, final double startY, final double startZ, + final double endX, final double endY, final double endZ) { + final boolean[] hitOut = new boolean[1]; + NetherPathfinder.raytrace( + this.context, + true, + 1, + new double[] { startX, startY, startZ }, + new double[] { endX, endY, endZ }, + hitOut, + null + ); + return hitOut[0]; + } + + public void raytrace(final double[] src, final double[] dst, final boolean[] hitOut) { + NetherPathfinder.raytrace(this.context, true, hitOut.length, src, dst, hitOut, null); + } + public void cancel() { NetherPathfinder.cancel(this.context); } From 2b259d6dee9bbb60b683f8ee74786b4482d38cc2 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 18 Jun 2023 23:09:43 -0700 Subject: [PATCH 648/935] cuter debug --- .../baritone/behavior/ElytraBehavior.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 2a6c3c0c8..484d2d341 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -99,13 +99,14 @@ public void tick() { public void pathToDestination(BlockPos destination) { this.destination = destination; + final long start = System.nanoTime(); this.path0(ctx.playerFeet(), destination, UnaryOperator.identity()) .thenRun(() -> { - final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(this.path.size() - 1)); + final double distance = this.pathAt(0).distanceTo(this.pathAt(this.path.size() - 1)); if (this.completePath) { - logDirect(String.format("Computed path (%d blocks)", distance)); + logDirect(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); } else { - logDirect(String.format("Computed segment (Next %d blocks)", distance)); + logDirect(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); } }) .whenComplete((result, ex) -> { @@ -116,7 +117,7 @@ public void pathToDestination(BlockPos destination) { }); } - public void pathRecalcSegment(final int upToIncl) { + public void pathRecalcSegment(final int blockedAt, final int upToIncl) { if (this.recalculating) { return; } @@ -124,12 +125,14 @@ public void pathRecalcSegment(final int upToIncl) { this.recalculating = true; final List after = this.path.subList(upToIncl, this.path.size()); final boolean complete = this.completePath; + final BetterBlockPos blockage = this.path.get(blockedAt); + final long start = System.nanoTime(); this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete)) .thenRun(() -> { final int recompute = this.path.size() - after.size() - 1; - final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(recompute)); - logDirect(String.format("Recomputed segment (Next %d blocks)", distance)); + final double distance = this.pathAt(0).distanceTo(this.pathAt(recompute)); // in spirit same as ctx.playerFeet().distanceTo(this.path.get(upToIncl)), but, thread safe (those could have changed in the meantime) + logDirect(String.format("Recalculated segment around path blockage near %s %s %s (next %.1f blocks in %.4f seconds)", SettingsUtil.maybeCensor(blockage.x), SettingsUtil.maybeCensor(blockage.y), SettingsUtil.maybeCensor(blockage.z), distance, (System.nanoTime() - start) / 1e9d)); }) .whenComplete((result, ex) -> { this.recalculating = false; @@ -146,16 +149,17 @@ public void pathNextSegment(final int afterIncl) { this.recalculating = true; final List before = this.path.subList(0, afterIncl + 1); + final long start = System.nanoTime(); this.path0(this.path.get(afterIncl), this.destination, segment -> segment.prepend(before.stream())) .thenRun(() -> { final int recompute = this.path.size() - before.size() - 1; - final int distance = (int) this.pathAt(0).distanceTo(this.pathAt(recompute)); + final double distance = this.pathAt(0).distanceTo(this.pathAt(recompute)); if (this.completePath) { - logDirect(String.format("Computed path (%d blocks)", distance)); + logDirect(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); } else { - logDirect(String.format("Computed next segment (Next %d blocks)", distance)); + logDirect(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); } }) .whenComplete((result, ex) -> { @@ -228,7 +232,7 @@ private void pathfindAroundObstacles() { if (!clearView(pathAt(i), pathAt(i + 1))) { // obstacle. where do we return to pathing? // find the next valid segment - this.pathRecalcSegment(rangeEndExcl - 1); + this.pathRecalcSegment(i, rangeEndExcl - 1); break outer; } } @@ -443,7 +447,7 @@ public void onTick(TickEvent event) { ctx.player().inventory.currentItem = firstFireworksInHotbar; } } - logDirect("firework" + (forceUseFirework ? " takeoff" : "")); + logDirect("attempting to use firework" + (forceUseFirework ? " takeoff" : "")); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); sinceFirework = 0; } @@ -507,7 +511,7 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm final double oy = dest.y - start.y; final double oz = dest.z - start.z; - final double[] src = new double[] { + final double[] src = new double[]{ bb.minX, bb.minY, bb.minZ, bb.minX, bb.minY, bb.maxZ, bb.minX, bb.maxY, bb.minZ, @@ -517,7 +521,7 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm bb.maxX, bb.maxY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ, }; - final double[] dst = new double[] { + final double[] dst = new double[]{ bb.minX + ox, bb.minY + oy, bb.minZ + oz, bb.minX + ox, bb.minY + oy, bb.maxZ + oz, bb.minX + ox, bb.maxY + oy, bb.minZ + oz, From a32ac59ec1842050f09c5e6fe190e4b23be30e2f Mon Sep 17 00:00:00 2001 From: rycbar0 <100363533+rycbar0@users.noreply.github.com> Date: Mon, 19 Jun 2023 12:44:32 +0200 Subject: [PATCH 649/935] prevent went off with a bang --- src/main/java/baritone/behavior/ElytraBehavior.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 484d2d341..28628e68f 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -487,7 +487,8 @@ private boolean isBoostingFireworks(final ItemStack itemStack) { final NBTTagCompound subCompound = itemStack.getSubCompound("Fireworks"); return itemStack.getItem() == Items.FIREWORKS && subCompound != null - && subCompound.hasKey("Flight"); + && subCompound.hasKey("Flight") + && !subCompound.hasKey("Explosions"); } private boolean isFireworkActive() { From 9e10faa4c56da5af29226b344e8a0bb8ec807845 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 12:32:25 -0500 Subject: [PATCH 650/935] Elytra inventory modifications - Use `throwaway` to switch items - Remove inventory settings - Prioritizes boost fireworks, but works without - Avoids explosion fireworks --- src/api/java/baritone/api/Settings.java | 8 --- .../baritone/behavior/ElytraBehavior.java | 57 +++++-------------- 2 files changed, 14 insertions(+), 51 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 3f46c24d9..23f138eeb 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -50,14 +50,6 @@ public final class Settings { public final Setting elytraSimulationTicks = new Setting<>(20); public final Setting elytraPitchRange = new Setting<>(25); - /** - * Allow users to control firework usage instead of Baritone. e.g. with their own client modules. - */ - public final Setting elytraUseFireworks = new Setting<>(true); - /** - * Allow Baritone to manage fireworks in the inventory and hotbar - */ - public final Setting elytraInventory = new Setting<>(true); public final Setting elytraFireworkSpeed = new Setting<>(0.6); public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 28628e68f..3ff824474 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -431,21 +431,16 @@ public void onTick(TickEvent event) { if (forceUseFirework || (!firework && sinceFirework > 10 - && Baritone.settings().elytraUseFireworks.value && useOnDescend && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! && currentSpeed < Baritone.settings().elytraFireworkSpeed.value) ) { - if (Baritone.settings().elytraInventory.value) { - final int firstFireworksInHotbar = firstFireworksInHotbar(); - if (firstFireworksInHotbar == -1) { - if (!swapToFireworksInInventory()) { - logDirect("no fireworks"); - return; - } - } else { - ctx.player().inventory.currentItem = firstFireworksInHotbar; - } + // Prioritize boosting fireworks over regular ones + // TODO: Take the minimum boost time into account? + if (!baritone.getInventoryBehavior().throwaway(true, ElytraBehavior::isBoostingFireworks) && + !baritone.getInventoryBehavior().throwaway(true, ElytraBehavior::isFireworks)) { + logDirect("no fireworks"); + return; } logDirect("attempting to use firework" + (forceUseFirework ? " takeoff" : "")); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); @@ -453,42 +448,18 @@ public void onTick(TickEvent event) { } } - private boolean swapToFireworksInInventory() { - final int i = firstFireworksInInventory(); - if (i != -1) { - baritone.getInventoryBehavior().attemptToPutOnHotbar(i, (slot) -> slot != 7); - ctx.player().inventory.currentItem = 7; - return true; - } - return false; - } - - private int firstFireworksInInventory() { - final NonNullList invy = ctx.player().inventory.mainInventory; - for (int i = 0; i < invy.size(); i++) { - if (isBoostingFireworks(invy.get(i))) { - return i; - } - } - return -1; - } - - private int firstFireworksInHotbar() { - final NonNullList invy = ctx.player().inventory.mainInventory; - for (int i = 0; i < 9; i++) { - if (isBoostingFireworks(invy.get(i))) { - return i; - } + private static boolean isFireworks(final ItemStack itemStack) { + if (itemStack.getItem() != Items.FIREWORKS) { + return false; } - return -1; + // If it has NBT data, make sure it won't cause us to explode. + final NBTTagCompound subCompound = itemStack.getSubCompound("Fireworks"); + return subCompound == null || !subCompound.hasKey("Explosions"); } - private boolean isBoostingFireworks(final ItemStack itemStack) { + private static boolean isBoostingFireworks(final ItemStack itemStack) { final NBTTagCompound subCompound = itemStack.getSubCompound("Fireworks"); - return itemStack.getItem() == Items.FIREWORKS - && subCompound != null - && subCompound.hasKey("Flight") - && !subCompound.hasKey("Explosions"); + return isFireworks(itemStack) && subCompound != null && subCompound.hasKey("Flight"); } private boolean isFireworkActive() { From 6741dff12b241cb451735aae934295b69be867aa Mon Sep 17 00:00:00 2001 From: 0x22 <0x22@futureclient.net> Date: Mon, 19 Jun 2023 14:17:54 -0400 Subject: [PATCH 651/935] replaced (PI / 180) constants, RotationUtils calcVec3dFromRotation->calcLookDirectionFromRotation and named local variables. --- .../java/baritone/api/utils/RayTraceUtils.java | 2 +- .../java/baritone/api/utils/RotationUtils.java | 17 ++++++++++++----- .../java/baritone/behavior/ElytraBehavior.java | 10 +++++----- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 4f763e392..d80f84e5e 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -50,7 +50,7 @@ public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, d } else { start = entity.getPositionEyes(1.0F); // do whatever is correct } - Vec3d direction = RotationUtils.calcVec3dFromRotation(rotation); + Vec3d direction = RotationUtils.calcLookDirectionFromRotation(rotation); Vec3d end = start.add( direction.x * blockReachDistance, direction.y * blockReachDistance, diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 1991ab878..4ebb22dd5 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -37,11 +37,13 @@ public final class RotationUtils { * Constant that a degree value is multiplied by to get the equivalent radian value */ public static final double DEG_TO_RAD = Math.PI / 180.0; + public static final float DEG_TO_RAD_F = (float) DEG_TO_RAD; /** * Constant that a radian value is multiplied by to get the equivalent degree value */ public static final double RAD_TO_DEG = 180.0 / Math.PI; + public static final float RAD_TO_DEG_F = (float) RAD_TO_DEG; /** * Offsets from the root block position to the center of each side. @@ -122,12 +124,17 @@ private static Rotation calcRotationFromVec3d(Vec3d orig, Vec3d dest) { * @param rotation The input rotation * @return Look vector for the rotation */ + public static Vec3d calcLookDirectionFromRotation(Rotation rotation) { + float flatZ = MathHelper.cos((-rotation.getYaw() * DEG_TO_RAD_F) - (float) Math.PI); + float flatX = MathHelper.sin((-rotation.getYaw() * DEG_TO_RAD_F) - (float) Math.PI); + float pitchBase = -MathHelper.cos(-rotation.getPitch() * DEG_TO_RAD_F); + float pitchHeight = MathHelper.sin(-rotation.getPitch() * DEG_TO_RAD_F); + return new Vec3d(flatX * pitchBase, pitchHeight, flatZ * pitchBase); + } + + @Deprecated public static Vec3d calcVec3dFromRotation(Rotation rotation) { - float f = MathHelper.cos(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); - float f1 = MathHelper.sin(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); - float f2 = -MathHelper.cos(-rotation.getPitch() * (float) DEG_TO_RAD); - float f3 = MathHelper.sin(-rotation.getPitch() * (float) DEG_TO_RAD); - return new Vec3d((double) (f1 * f2), (double) f3, (double) (f * f2)); + return calcLookDirectionFromRotation(rotation); } /** diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 3ff824474..11512b7b1 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -622,10 +622,10 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, double motionX = motion.x; double motionY = motion.y; double motionZ = motion.z; - float flatZ = MathHelper.cos(-rotationYaw * 0.017453292F - (float) Math.PI); // 0.174... is Math.PI / 180 - float flatX = MathHelper.sin(-rotationYaw * 0.017453292F - (float) Math.PI); - float pitchBase = -MathHelper.cos(-rotationPitch * 0.017453292F); - float pitchHeight = MathHelper.sin(-rotationPitch * 0.017453292F); + float flatZ = MathHelper.cos((-rotationYaw * RotationUtils.DEG_TO_RAD_F) - (float) Math.PI); + float flatX = MathHelper.sin((-rotationYaw * RotationUtils.DEG_TO_RAD_F) - (float) Math.PI); + float pitchBase = -MathHelper.cos(-rotationPitch * RotationUtils.DEG_TO_RAD_F); + float pitchHeight = MathHelper.sin(-rotationPitch * RotationUtils.DEG_TO_RAD_F); Vec3d lookDirection = new Vec3d(flatX * pitchBase, pitchHeight, flatZ * pitchBase); if (firework) { @@ -635,7 +635,7 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, motionZ += lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motionZ) * 0.5; } - float pitchRadians = rotationPitch * 0.017453292F; + float pitchRadians = rotationPitch * RotationUtils.DEG_TO_RAD_F; double pitchBase2 = Math.sqrt(lookDirection.x * lookDirection.x + lookDirection.z * lookDirection.z); double flatMotion = Math.sqrt(motionX * motionX + motionZ * motionZ); double thisIsAlwaysOne = lookDirection.length(); From 8d3b0c8f0772366c189f02d52ac126528f8379a5 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 14:10:41 -0500 Subject: [PATCH 652/935] Always enforce `sinceFirework` --- src/main/java/baritone/behavior/ElytraBehavior.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 11512b7b1..b885b842c 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -429,11 +429,10 @@ public void onTick(TickEvent event) { ctx.player().motionZ ).length(); - if (forceUseFirework || (!firework - && sinceFirework > 10 + if (sinceFirework > 10 && (forceUseFirework || (!firework && useOnDescend && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! - && currentSpeed < Baritone.settings().elytraFireworkSpeed.value) + && currentSpeed < Baritone.settings().elytraFireworkSpeed.value)) ) { // Prioritize boosting fireworks over regular ones // TODO: Take the minimum boost time into account? From 7d17ace15df27ede1c28df456eb4e0bb3f144332 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 15:15:29 -0500 Subject: [PATCH 653/935] Reset recalculating flag on `clear` --- src/main/java/baritone/behavior/ElytraBehavior.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index b885b842c..4db310346 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -182,6 +182,7 @@ public void clear() { this.path = Collections.emptyList(); this.playerNear = 0; this.completePath = true; + this.recalculating = false; this.destination = null; } From c6a66240453c5a9c2744061e734fb2818fe41a1f Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 15:16:11 -0500 Subject: [PATCH 654/935] Reorder fields --- src/main/java/baritone/behavior/ElytraBehavior.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 4db310346..74e05edad 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -78,10 +78,8 @@ private final class PathManager { private BlockPos destination; private List path; private boolean completePath; - - private int playerNear; - private boolean recalculating; + private int playerNear; public PathManager() { // lol imagine initializing fields normally @@ -179,11 +177,11 @@ private Vec3d pathAt(int i) { } public void clear() { + this.destination = null; this.path = Collections.emptyList(); - this.playerNear = 0; this.completePath = true; this.recalculating = false; - this.destination = null; + this.playerNear = 0; } private void setPath(final UnpackedSegment segment) { From 90f401a06746c89c37aa7c78489a8ee013dc8e29 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 15:19:32 -0500 Subject: [PATCH 655/935] Remove legacy raytracing methods --- src/api/java/baritone/api/Settings.java | 1 - .../baritone/behavior/ElytraBehavior.java | 272 ++---------------- 2 files changed, 29 insertions(+), 244 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 23f138eeb..3cfef2ffc 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -57,7 +57,6 @@ public final class Settings { // Experimental Elytra Settings public final Setting experimentalTakeoff = new Setting<>(false); - public final Setting experimentalRaytrace = new Setting<>(false); /** * Allow Baritone to break blocks diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 74e05edad..5a8614edc 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -476,56 +476,36 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm final AxisAlignedBB bb = ctx.player().getEntityBoundingBox().grow(growAmount); - if (Baritone.settings().experimentalRaytrace.value) { - final double ox = dest.x - start.x; - final double oy = dest.y - start.y; - final double oz = dest.z - start.z; - - final double[] src = new double[]{ - bb.minX, bb.minY, bb.minZ, - bb.minX, bb.minY, bb.maxZ, - bb.minX, bb.maxY, bb.minZ, - bb.minX, bb.maxY, bb.maxZ, - bb.maxX, bb.minY, bb.minZ, - bb.maxX, bb.minY, bb.maxZ, - bb.maxX, bb.maxY, bb.minZ, - bb.maxX, bb.maxY, bb.maxZ, - }; - final double[] dst = new double[]{ - bb.minX + ox, bb.minY + oy, bb.minZ + oz, - bb.minX + ox, bb.minY + oy, bb.maxZ + oz, - bb.minX + ox, bb.maxY + oy, bb.minZ + oz, - bb.minX + ox, bb.maxY + oy, bb.maxZ + oz, - bb.maxX + ox, bb.minY + oy, bb.minZ + oz, - bb.maxX + ox, bb.minY + oy, bb.maxZ + oz, - bb.maxX + ox, bb.maxY + oy, bb.minZ + oz, - bb.maxX + ox, bb.maxY + oy, bb.maxZ + oz, - }; - - // Batch together all 8 traces - final boolean[] hitOut = new boolean[8]; - this.context.raytrace(src, dst, hitOut); - for (boolean hit : hitOut) { - if (hit) { - return false; - } - } - return true; - } - - final Vec3d[] corners = new Vec3d[]{ - new Vec3d(bb.minX, bb.minY, bb.minZ), - new Vec3d(bb.minX, bb.minY, bb.maxZ), - new Vec3d(bb.minX, bb.maxY, bb.minZ), - new Vec3d(bb.minX, bb.maxY, bb.maxZ), - new Vec3d(bb.maxX, bb.minY, bb.minZ), - new Vec3d(bb.maxX, bb.minY, bb.maxZ), - new Vec3d(bb.maxX, bb.maxY, bb.minZ), - new Vec3d(bb.maxX, bb.maxY, bb.maxZ), + final double ox = dest.x - start.x; + final double oy = dest.y - start.y; + final double oz = dest.z - start.z; + + final double[] src = new double[]{ + bb.minX, bb.minY, bb.minZ, + bb.minX, bb.minY, bb.maxZ, + bb.minX, bb.maxY, bb.minZ, + bb.minX, bb.maxY, bb.maxZ, + bb.maxX, bb.minY, bb.minZ, + bb.maxX, bb.minY, bb.maxZ, + bb.maxX, bb.maxY, bb.minZ, + bb.maxX, bb.maxY, bb.maxZ, + }; + final double[] dst = new double[]{ + bb.minX + ox, bb.minY + oy, bb.minZ + oz, + bb.minX + ox, bb.minY + oy, bb.maxZ + oz, + bb.minX + ox, bb.maxY + oy, bb.minZ + oz, + bb.minX + ox, bb.maxY + oy, bb.maxZ + oz, + bb.maxX + ox, bb.minY + oy, bb.minZ + oz, + bb.maxX + ox, bb.minY + oy, bb.maxZ + oz, + bb.maxX + ox, bb.maxY + oy, bb.minZ + oz, + bb.maxX + ox, bb.maxY + oy, bb.maxZ + oz, }; - for (final Vec3d corner : corners) { - if (!clearView(corner, dest.add(corner.subtract(start)))) { + // Batch together all 8 traces + final boolean[] hitOut = new boolean[8]; + this.context.raytrace(src, dst, hitOut); + for (boolean hit : hitOut) { + if (hit) { return false; } } @@ -533,11 +513,7 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm } private boolean clearView(Vec3d start, Vec3d dest) { - boolean clear = !(Baritone.settings().experimentalRaytrace.value - ? this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z) - : this.rayTraceBlocks(start.x, start.y, start.z, dest.x, dest.y, dest.z) // ox method - ); - + boolean clear = !this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z); if (clear) { clearLines.add(new Pair<>(start, dest)); return true; @@ -666,195 +642,5 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, return new Vec3d(motionX, motionY, motionZ); } - - private boolean rayTraceBlocks(final double startX, final double startY, final double startZ, - final double endX, final double endY, final double endZ) { - int voxelCurrX = fastFloor(startX); - int voxelCurrY = fastFloor(startY); - int voxelCurrZ = fastFloor(startZ); - - if (!this.passable(voxelCurrX, voxelCurrY, voxelCurrZ)) { - return true; - } - - final int voxelEndX = fastFloor(endX); - final int voxelEndY = fastFloor(endY); - final int voxelEndZ = fastFloor(endZ); - double currPosX = startX; - double currPosY = startY; - double currPosZ = startZ; - - int steps = 200; // TODO: should we lower the max steps? - while (steps-- >= 0) { - if (voxelCurrX == voxelEndX && voxelCurrY == voxelEndY && voxelCurrZ == voxelEndZ) { - return false; - } - - final double distanceFromStartToEndX = endX - currPosX; - final double distanceFromStartToEndY = endY - currPosY; - final double distanceFromStartToEndZ = endZ - currPosZ; - - double nextIntegerX; - double nextIntegerY; - double nextIntegerZ; - // potentially more based branchless impl? - nextIntegerX = voxelCurrX + ((voxelCurrX - voxelEndX) >>> 31); // if voxelEnd > voxelIn, then voxelIn-voxelEnd will be negative, meaning the sign bit is 1 - nextIntegerY = voxelCurrY + ((voxelCurrY - voxelEndY) >>> 31); // if we do an unsigned right shift by 31, that sign bit becomes the LSB - nextIntegerZ = voxelCurrZ + ((voxelCurrZ - voxelEndZ) >>> 31); // therefore, this increments nextInteger iff EndX>inX, otherwise it leaves it alone - // remember: don't have to worry about the case when voxelEnd == voxelIn, because nextInteger value wont be used - - // these just have to be strictly greater than 1, might as well just go up to the next int - double fracIfSkipX = 2.0D; - double fracIfSkipY = 2.0D; - double fracIfSkipZ = 2.0D; - - // reminder to future self: don't "branchlessify" this, it's MUCH slower (pretty obviously, floating point div is much worse than a branch mispredict, but integer increment (like the other two removed branches) are cheap enough to be worth doing either way) - if (voxelEndX != voxelCurrX) { - fracIfSkipX = (nextIntegerX - currPosX) / distanceFromStartToEndX; - } - if (voxelEndY != voxelCurrY) { - fracIfSkipY = (nextIntegerY - currPosY) / distanceFromStartToEndY; - } - if (voxelEndZ != voxelCurrZ) { - fracIfSkipZ = (nextIntegerZ - currPosZ) / distanceFromStartToEndZ; - } - - if (fracIfSkipX < fracIfSkipY && fracIfSkipX < fracIfSkipZ) { - // note: voxelEndX == voxelInX is impossible because allowSkip would be set to false in that case, meaning that the elapsed distance would stay at default - currPosX = nextIntegerX; - currPosY += distanceFromStartToEndY * fracIfSkipX; - currPosZ += distanceFromStartToEndZ * fracIfSkipX; - // tested: faster to paste this 3 times with only one of the subtractions in each - final int xFloorOffset = (voxelEndX - voxelCurrX) >>> 31; - voxelCurrX = (fastFloor(currPosX) - xFloorOffset); - voxelCurrY = (fastFloor(currPosY)); - voxelCurrZ = (fastFloor(currPosZ)); - } else if (fracIfSkipY < fracIfSkipZ) { - currPosX += distanceFromStartToEndX * fracIfSkipY; - currPosY = nextIntegerY; - currPosZ += distanceFromStartToEndZ * fracIfSkipY; - // tested: faster to paste this 3 times with only one of the subtractions in each - final int yFloorOffset = (voxelEndY - voxelCurrY) >>> 31; - voxelCurrX = (fastFloor(currPosX)); - voxelCurrY = (fastFloor(currPosY) - yFloorOffset); - voxelCurrZ = (fastFloor(currPosZ)); - } else { - currPosX += distanceFromStartToEndX * fracIfSkipZ; - currPosY += distanceFromStartToEndY * fracIfSkipZ; - currPosZ = nextIntegerZ; - // tested: faster to paste this 3 times with only one of the subtractions in each - final int zFloorOffset = (voxelEndZ - voxelCurrZ) >>> 31; - voxelCurrX = (fastFloor(currPosX)); - voxelCurrY = (fastFloor(currPosY)); - voxelCurrZ = (fastFloor(currPosZ) - zFloorOffset); - } - - if (!this.passable(voxelCurrX, voxelCurrY, voxelCurrZ)) { - return true; - } - } - return false; - } - - private static final double FLOOR_DOUBLE_D = 1_073_741_824.0; - private static final int FLOOR_DOUBLE_I = 1_073_741_824; - - private static int fastFloor(final double v) { - return ((int) (v + FLOOR_DOUBLE_D)) - FLOOR_DOUBLE_I; - } - - private boolean rayTraceBlocks(Vec3d start, Vec3d end) { - int x1 = MathHelper.floor(end.x); - int y1 = MathHelper.floor(end.y); - int z1 = MathHelper.floor(end.z); - int x2 = MathHelper.floor(start.x); - int y2 = MathHelper.floor(start.y); - int z2 = MathHelper.floor(start.z); - BlockPos blockpos = new BlockPos(x2, y2, z2); - IBlockState iblockstate = ctx.world().getBlockState(blockpos); - if (!passable(iblockstate)) { - return true; - } - int steps = 200; - while (steps-- >= 0) { - if (Double.isNaN(start.x) || Double.isNaN(start.y) || Double.isNaN(start.z)) { - return false; - } - if (x2 == x1 && y2 == y1 && z2 == z1) { - return false; - } - boolean hitX = true; - boolean hitY = true; - boolean hitZ = true; - double nextX = 999.0D; - double nextY = 999.0D; - double nextZ = 999.0D; - if (x1 > x2) { - nextX = (double) x2 + 1.0D; - } else if (x1 < x2) { - nextX = (double) x2 + 0.0D; - } else { - hitX = false; - } - if (y1 > y2) { - nextY = (double) y2 + 1.0D; - } else if (y1 < y2) { - nextY = (double) y2 + 0.0D; - } else { - hitY = false; - } - if (z1 > z2) { - nextZ = (double) z2 + 1.0D; - } else if (z1 < z2) { - nextZ = (double) z2 + 0.0D; - } else { - hitZ = false; - } - double stepX = 999.0D; - double stepY = 999.0D; - double stepZ = 999.0D; - double dirX = end.x - start.x; - double dirY = end.y - start.y; - double dirZ = end.z - start.z; - if (hitX) { - stepX = (nextX - start.x) / dirX; - } - if (hitY) { - stepY = (nextY - start.y) / dirY; - } - if (hitZ) { - stepZ = (nextZ - start.z) / dirZ; - } - if (stepX == -0.0D) { - stepX = -1.0E-4D; - } - if (stepY == -0.0D) { - stepY = -1.0E-4D; - } - if (stepZ == -0.0D) { - stepZ = -1.0E-4D; - } - EnumFacing dir; - if (stepX < stepY && stepX < stepZ) { - dir = x1 > x2 ? EnumFacing.WEST : EnumFacing.EAST; - start = new Vec3d(nextX, start.y + dirY * stepX, start.z + dirZ * stepX); - } else if (stepY < stepZ) { - dir = y1 > y2 ? EnumFacing.DOWN : EnumFacing.UP; - start = new Vec3d(start.x + dirX * stepY, nextY, start.z + dirZ * stepY); - } else { - dir = z1 > z2 ? EnumFacing.NORTH : EnumFacing.SOUTH; - start = new Vec3d(start.x + dirX * stepZ, start.y + dirY * stepZ, nextZ); - } - x2 = MathHelper.floor(start.x) - (dir == EnumFacing.EAST ? 1 : 0); - y2 = MathHelper.floor(start.y) - (dir == EnumFacing.UP ? 1 : 0); - z2 = MathHelper.floor(start.z) - (dir == EnumFacing.SOUTH ? 1 : 0); - blockpos = new BlockPos(x2, y2, z2); - IBlockState iblockstate1 = ctx.world().getBlockState(blockpos); - if (!passable(iblockstate1)) { - return true; - } - } - return false; - } } From 82156250df4cf43a3f33c07579d53964aca22da2 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 15:20:04 -0500 Subject: [PATCH 656/935] Update `nether-pathfinder` to 0.16 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index c3ef73c32..95abfec6a 100755 --- a/build.gradle +++ b/build.gradle @@ -175,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.15') + launchImplementation('dev.babbaj:nether-pathfinder:0.16') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.15' + implementation 'dev.babbaj:nether-pathfinder:0.16' } mixin { From 959b4cddbd400cb256a6d53c297a6d67154f6c5f Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 15:29:30 -0500 Subject: [PATCH 657/935] Remove unneeded `while (true)` --- .../baritone/behavior/ElytraBehavior.java | 43 ++++++++----------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 5a8614edc..a0502d930 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -63,6 +63,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private final NetherPathfinderContext context; private final PathManager pathManager; private int sinceFirework; + private BlockStateInterface bsi; public ElytraBehavior(Baritone baritone) { super(baritone); @@ -212,30 +213,26 @@ private void pathfindAroundObstacles() { return; } - outer: - while (true) { - int rangeStartIncl = playerNear; - int rangeEndExcl = playerNear; - while (rangeEndExcl < path.size() && ctx.world().isBlockLoaded(path.get(rangeEndExcl), false)) { - rangeEndExcl++; - } - if (rangeStartIncl >= rangeEndExcl) { - // not loaded yet? + int rangeStartIncl = playerNear; + int rangeEndExcl = playerNear; + while (rangeEndExcl < path.size() && ctx.world().isBlockLoaded(path.get(rangeEndExcl), false)) { + rangeEndExcl++; + } + if (rangeStartIncl >= rangeEndExcl) { + // not loaded yet? + return; + } + if (!passable(ctx.world().getBlockState(path.get(rangeStartIncl)))) { + // we're in a wall + return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: + } + for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { + if (!clearView(pathAt(i), pathAt(i + 1))) { + // obstacle. where do we return to pathing? + // find the next valid segment + this.pathRecalcSegment(i, rangeEndExcl - 1); return; } - if (!passable(ctx.world().getBlockState(path.get(rangeStartIncl)))) { - // we're in a wall - return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: - } - for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { - if (!clearView(pathAt(i), pathAt(i + 1))) { - // obstacle. where do we return to pathing? - // find the next valid segment - this.pathRecalcSegment(i, rangeEndExcl - 1); - break outer; - } - } - break; } } @@ -582,8 +579,6 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, bool return bestPitch; } - private BlockStateInterface bsi; - public boolean passable(int x, int y, int z) { return passable(this.bsi.get0(x, y, z)); } From 1de2d5596594f3684e6e42b2279eb6c2c6ad42ee Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 19 Jun 2023 23:05:46 +0200 Subject: [PATCH 658/935] Tab complete block properties --- .../api/command/datatypes/BlockById.java | 122 +++++++++++++++++- 1 file changed, 116 insertions(+), 6 deletions(-) diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 3702725e3..8df3e0658 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -19,15 +19,28 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; + import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Collectors; import java.util.stream.Stream; public enum BlockById implements IDatatypeFor { INSTANCE; + /** + * Matches (domain:)?name([(property=value)*])? but the input can be truncated at any position. + * domain and name are [a-z0-9_.-]+ and [a-z0-9/_.-]+ because that's what mc 1.13+ accepts. + * property and value use the same format as domain. + */ + // Good luck reading this. + private static Pattern PATTERN = Pattern.compile("(?:[a-z0-9_.-]+:)?(?:[a-z0-9/_.-]+(?:\\[(?:(?:[a-z0-9_.-]+=[a-z0-9_.-]+,)*(?:[a-z0-9_.-]+(?:=(?:[a-z0-9_.-]+(?:\\])?)?)?)?|\\])?)?)?"); + @Override public Block get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); @@ -40,14 +53,111 @@ public Block get(IDatatypeContext ctx) throws CommandException { @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + String arg = ctx.getConsumer().getString(); + + if (!PATTERN.matcher(arg).matches()) { + // Invalid format; we can't complete this. + return Stream.empty(); + } + + if (arg.endsWith("]")) { + // We are already done. + return Stream.empty(); + } + + if (!arg.contains("[")) { + // no properties so we are completing the block id + return new TabCompleteHelper() + .append( + Block.REGISTRY.getKeys() + .stream() + .map(Object::toString) + ) + .filterPrefixNamespaced(arg) + .sortAlphabetically() + .stream(); + } + + // destructuring assignment? Please? + String blockId, properties; + { + String[] parts = splitLast(arg, '['); + blockId = parts[0]; + properties = parts[1]; + } + + Block block = Block.REGISTRY.getObject(new ResourceLocation(blockId)); + if (block == null) { + // This block doesn't exist so there's no properties to complete. + return Stream.empty(); + } + + String leadingProperties, lastProperty; + { + String[] parts = splitLast(properties, ','); + leadingProperties = parts[0]; + lastProperty = parts[1]; + } + + if (!lastProperty.contains("=")) { + // The last property-value pair doesn't have a value yet so we are completing its name + Set usedProps = Stream.of(leadingProperties.split(",")) + .map(pair -> pair.split("=")[0]) + .collect(Collectors.toSet()); + + String prefix = arg.substring(0, arg.length() - lastProperty.length()); + return new TabCompleteHelper() + .append( + block.getBlockState() + .getProperties() + .stream() + .map(IProperty::getName) + ) + .filter(prop -> !usedProps.contains(prop)) + .filterPrefix(lastProperty) + .sortAlphabetically() + .map(prop -> prefix + prop) + .stream(); + } + + String lastName, lastValue; + { + String[] parts = splitLast(lastProperty, '='); + lastName = parts[0]; + lastValue = parts[1]; + } + + // We are completing the value of a property + String prefix = arg.substring(0, arg.length() - lastValue.length()); + + IProperty property = block.getBlockState().getProperty(lastName); + if (property == null) { + // The property does not exist so there's no values to complete + return Stream.empty(); + } + return new TabCompleteHelper() - .append( - Block.REGISTRY.getKeys() - .stream() - .map(Object::toString) - ) - .filterPrefixNamespaced(ctx.getConsumer().getString()) + .append(getValues(property)) + .filterPrefix(lastValue) .sortAlphabetically() + .map(val -> prefix + val) .stream(); } + + /** + * Always returns exactly two strings. + * If the separator is not found the FIRST returned string is empty. + */ + private static String[] splitLast(String string, char chr) { + int idx = string.lastIndexOf(chr); + if (idx == -1) { + return new String[]{"", string}; + } + return new String[]{string.substring(0, idx), string.substring(idx + 1)}; + } + + // this shouldn't need to be a separate method? + private static > Stream getValues(IProperty property) { + return property.getAllowedValues().stream().map(property::getName); + } } From e43200865cbdb305d11c913aae3cb90ea48ae4ab Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 19 Jun 2023 23:44:22 +0200 Subject: [PATCH 659/935] Move this to the right place --- .../api/command/datatypes/BlockById.java | 122 +----------------- .../datatypes/ForBlockOptionalMeta.java | 120 ++++++++++++++++- 2 files changed, 124 insertions(+), 118 deletions(-) diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 8df3e0658..3702725e3 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -19,28 +19,15 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; - import net.minecraft.block.Block; -import net.minecraft.block.properties.IProperty; import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; -import java.util.Set; -import java.util.regex.Pattern; -import java.util.stream.Collectors; import java.util.stream.Stream; public enum BlockById implements IDatatypeFor { INSTANCE; - /** - * Matches (domain:)?name([(property=value)*])? but the input can be truncated at any position. - * domain and name are [a-z0-9_.-]+ and [a-z0-9/_.-]+ because that's what mc 1.13+ accepts. - * property and value use the same format as domain. - */ - // Good luck reading this. - private static Pattern PATTERN = Pattern.compile("(?:[a-z0-9_.-]+:)?(?:[a-z0-9/_.-]+(?:\\[(?:(?:[a-z0-9_.-]+=[a-z0-9_.-]+,)*(?:[a-z0-9_.-]+(?:=(?:[a-z0-9_.-]+(?:\\])?)?)?)?|\\])?)?)?"); - @Override public Block get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); @@ -53,111 +40,14 @@ public Block get(IDatatypeContext ctx) throws CommandException { @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { - String arg = ctx.getConsumer().getString(); - - if (!PATTERN.matcher(arg).matches()) { - // Invalid format; we can't complete this. - return Stream.empty(); - } - - if (arg.endsWith("]")) { - // We are already done. - return Stream.empty(); - } - - if (!arg.contains("[")) { - // no properties so we are completing the block id - return new TabCompleteHelper() - .append( - Block.REGISTRY.getKeys() - .stream() - .map(Object::toString) - ) - .filterPrefixNamespaced(arg) - .sortAlphabetically() - .stream(); - } - - // destructuring assignment? Please? - String blockId, properties; - { - String[] parts = splitLast(arg, '['); - blockId = parts[0]; - properties = parts[1]; - } - - Block block = Block.REGISTRY.getObject(new ResourceLocation(blockId)); - if (block == null) { - // This block doesn't exist so there's no properties to complete. - return Stream.empty(); - } - - String leadingProperties, lastProperty; - { - String[] parts = splitLast(properties, ','); - leadingProperties = parts[0]; - lastProperty = parts[1]; - } - - if (!lastProperty.contains("=")) { - // The last property-value pair doesn't have a value yet so we are completing its name - Set usedProps = Stream.of(leadingProperties.split(",")) - .map(pair -> pair.split("=")[0]) - .collect(Collectors.toSet()); - - String prefix = arg.substring(0, arg.length() - lastProperty.length()); - return new TabCompleteHelper() - .append( - block.getBlockState() - .getProperties() - .stream() - .map(IProperty::getName) - ) - .filter(prop -> !usedProps.contains(prop)) - .filterPrefix(lastProperty) - .sortAlphabetically() - .map(prop -> prefix + prop) - .stream(); - } - - String lastName, lastValue; - { - String[] parts = splitLast(lastProperty, '='); - lastName = parts[0]; - lastValue = parts[1]; - } - - // We are completing the value of a property - String prefix = arg.substring(0, arg.length() - lastValue.length()); - - IProperty property = block.getBlockState().getProperty(lastName); - if (property == null) { - // The property does not exist so there's no values to complete - return Stream.empty(); - } - return new TabCompleteHelper() - .append(getValues(property)) - .filterPrefix(lastValue) + .append( + Block.REGISTRY.getKeys() + .stream() + .map(Object::toString) + ) + .filterPrefixNamespaced(ctx.getConsumer().getString()) .sortAlphabetically() - .map(val -> prefix + val) .stream(); } - - /** - * Always returns exactly two strings. - * If the separator is not found the FIRST returned string is empty. - */ - private static String[] splitLast(String string, char chr) { - int idx = string.lastIndexOf(chr); - if (idx == -1) { - return new String[]{"", string}; - } - return new String[]{string.substring(0, idx), string.substring(idx + 1)}; - } - - // this shouldn't need to be a separate method? - private static > Stream getValues(IProperty property) { - return property.getAllowedValues().stream().map(property::getName); - } } diff --git a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java index 978450a23..079ec03fd 100644 --- a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java +++ b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java @@ -18,20 +18,136 @@ package baritone.api.command.datatypes; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.BlockOptionalMeta; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.util.ResourceLocation; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Collectors; import java.util.stream.Stream; public enum ForBlockOptionalMeta implements IDatatypeFor { INSTANCE; + /** + * Matches (domain:)?name([(property=value)*])? but the input can be truncated at any position. + * domain and name are [a-z0-9_.-]+ and [a-z0-9/_.-]+ because that's what mc 1.13+ accepts. + * property and value use the same format as domain. + */ + // Good luck reading this. + private static Pattern PATTERN = Pattern.compile("(?:[a-z0-9_.-]+:)?(?:[a-z0-9/_.-]+(?:\\[(?:(?:[a-z0-9_.-]+=[a-z0-9_.-]+,)*(?:[a-z0-9_.-]+(?:=(?:[a-z0-9_.-]+(?:\\])?)?)?)?|\\])?)?)?"); + @Override public BlockOptionalMeta get(IDatatypeContext ctx) throws CommandException { return new BlockOptionalMeta(ctx.getConsumer().getString()); } @Override - public Stream tabComplete(IDatatypeContext ctx) { - return ctx.getConsumer().tabCompleteDatatype(BlockById.INSTANCE); + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + String arg = ctx.getConsumer().peekString(); + + if (!PATTERN.matcher(arg).matches()) { + // Invalid format; we can't complete this. + ctx.getConsumer().getString(); + return Stream.empty(); + } + + if (arg.endsWith("]")) { + // We are already done. + ctx.getConsumer().getString(); + return Stream.empty(); + } + + if (!arg.contains("[")) { + // no properties so we are completing the block id + return ctx.getConsumer().tabCompleteDatatype(BlockById.INSTANCE); + } + + ctx.getConsumer().getString(); + + // destructuring assignment? Please? + String blockId, properties; + { + String[] parts = splitLast(arg, '['); + blockId = parts[0]; + properties = parts[1]; + } + + Block block = Block.REGISTRY.getObject(new ResourceLocation(blockId)); + if (block == null) { + // This block doesn't exist so there's no properties to complete. + return Stream.empty(); + } + + String leadingProperties, lastProperty; + { + String[] parts = splitLast(properties, ','); + leadingProperties = parts[0]; + lastProperty = parts[1]; + } + + if (!lastProperty.contains("=")) { + // The last property-value pair doesn't have a value yet so we are completing its name + Set usedProps = Stream.of(leadingProperties.split(",")) + .map(pair -> pair.split("=")[0]) + .collect(Collectors.toSet()); + + String prefix = arg.substring(0, arg.length() - lastProperty.length()); + return new TabCompleteHelper() + .append( + block.getBlockState() + .getProperties() + .stream() + .map(IProperty::getName) + ) + .filter(prop -> !usedProps.contains(prop)) + .filterPrefix(lastProperty) + .sortAlphabetically() + .map(prop -> prefix + prop) + .stream(); + } + + String lastName, lastValue; + { + String[] parts = splitLast(lastProperty, '='); + lastName = parts[0]; + lastValue = parts[1]; + } + + // We are completing the value of a property + String prefix = arg.substring(0, arg.length() - lastValue.length()); + + IProperty property = block.getBlockState().getProperty(lastName); + if (property == null) { + // The property does not exist so there's no values to complete + return Stream.empty(); + } + + return new TabCompleteHelper() + .append(getValues(property)) + .filterPrefix(lastValue) + .sortAlphabetically() + .map(val -> prefix + val) + .stream(); + } + + /** + * Always returns exactly two strings. + * If the separator is not found the FIRST returned string is empty. + */ + private static String[] splitLast(String string, char chr) { + int idx = string.lastIndexOf(chr); + if (idx == -1) { + return new String[]{"", string}; + } + return new String[]{string.substring(0, idx), string.substring(idx + 1)}; + } + + // this shouldn't need to be a separate method? + private static > Stream getValues(IProperty property) { + return property.getAllowedValues().stream().map(property::getName); } } From f55f7f19b4bb6ad6d36bdaeabe0eb6bcc6b84748 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Mon, 19 Jun 2023 23:50:42 +0200 Subject: [PATCH 660/935] Tab complete the datatype which will be parsed --- src/main/java/baritone/command/defaults/GotoCommand.java | 3 +-- src/main/java/baritone/command/defaults/MineCommand.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/command/defaults/GotoCommand.java b/src/main/java/baritone/command/defaults/GotoCommand.java index 333d7fa57..fc43026bb 100644 --- a/src/main/java/baritone/command/defaults/GotoCommand.java +++ b/src/main/java/baritone/command/defaults/GotoCommand.java @@ -20,7 +20,6 @@ import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; -import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeGoal; @@ -61,7 +60,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { public Stream tabComplete(String label, IArgConsumer args) throws CommandException { // since it's either a goal or a block, I don't think we can tab complete properly? // so just tab complete for the block variant - return args.tabCompleteDatatype(BlockById.INSTANCE); + return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); } @Override diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 1ab5c3321..52e9e0e67 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -21,7 +21,6 @@ import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; -import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.exception.CommandException; import baritone.api.utils.BlockOptionalMeta; @@ -53,7 +52,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { @Override public Stream tabComplete(String label, IArgConsumer args) { - return args.tabCompleteDatatype(BlockById.INSTANCE); + return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); } @Override From e57a84ded4b0af83b8388c9dfad016782d14b70f Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 19 Jun 2023 17:58:06 -0400 Subject: [PATCH 661/935] use legacy raytrace with ignore liquid to get out of lava --- .../baritone/behavior/ElytraBehavior.java | 236 ++++++++++++++++-- .../elytra/NetherPathfinderContext.java | 4 +- 2 files changed, 219 insertions(+), 21 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index a0502d930..1bf098132 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -222,12 +222,12 @@ private void pathfindAroundObstacles() { // not loaded yet? return; } - if (!passable(ctx.world().getBlockState(path.get(rangeStartIncl)))) { + if (!passable(ctx.world().getBlockState(path.get(rangeStartIncl)), false)) { // we're in a wall return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: } for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { - if (!clearView(pathAt(i), pathAt(i + 1))) { + if (!clearView(pathAt(i), pathAt(i + 1), false)) { // obstacle. where do we return to pathing? // find the next valid segment this.pathRecalcSegment(i, rangeEndExcl - 1); @@ -363,6 +363,7 @@ public void onTick(TickEvent event) { BetterBlockPos goingTo = null; boolean forceUseFirework = false; this.sinceFirework++; + final boolean isInLava = ctx.player().isInLava(); outermost: for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) @@ -379,13 +380,13 @@ public void onTick(TickEvent event) { continue; } if (start.distanceTo(dest) < 40) { - if (!clearView(dest, this.pathManager.pathAt(i + lookahead).add(0, dy, 0)) || !clearView(dest, this.pathManager.pathAt(i + lookahead))) { + if (!clearView(dest, this.pathManager.pathAt(i + lookahead).add(0, dy, 0), false) || !clearView(dest, this.pathManager.pathAt(i + lookahead), false)) { // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position continue; } } else { // but if it's far away, allow gaining altitude if we could lose it again by the time we get there - if (!clearView(dest, this.pathManager.pathAt(i))) { + if (!clearView(dest, this.pathManager.pathAt(i), false)) { continue; } } @@ -395,10 +396,10 @@ public void onTick(TickEvent event) { final Double grow = relaxation == 2 ? null : relaxation == 0 ? 1.0d : 0.25d; - if (isClear(start, dest, grow)) { + if (isClear(start, dest, grow, isInLava)) { final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); - final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, firework); + final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, firework, isInLava); if (pitch.first() == null) { baritone.getLookBehavior().updateTarget(new Rotation(yaw, ctx.playerRotations().getPitch()), false); continue; @@ -463,8 +464,8 @@ private boolean isFireworkActive() { .anyMatch(x -> Objects.equals(((IEntityFireworkRocket) x).getBoostedEntity(), ctx.player())); } - private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAmount) { - if (!clearView(start, dest)) { + private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAmount, boolean ignoreLava) { + if (!clearView(start, dest, ignoreLava)) { return false; } if (growAmount == null) { @@ -509,8 +510,14 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm return true; } - private boolean clearView(Vec3d start, Vec3d dest) { - boolean clear = !this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z); + private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { + final boolean clear; + if (!ignoreLava) { + clear = !this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z); + } else { + clear = !rayTraceBlocks(start.x, start.y, start.z, dest.x, dest.y, dest.z, true); + } + if (clear) { clearLines.add(new Pair<>(start, dest)); return true; @@ -520,14 +527,14 @@ private boolean clearView(Vec3d start, Vec3d dest) { } } - private Pair solvePitch(Vec3d goalDirection, int steps, int relaxation, boolean currentlyBoosted) { - final Float pitch = this.solvePitch(goalDirection, steps, relaxation == 2, currentlyBoosted); + private Pair solvePitch(Vec3d goalDirection, int steps, int relaxation, boolean currentlyBoosted, boolean ignoreLava) { + final Float pitch = this.solvePitch(goalDirection, steps, relaxation == 2, currentlyBoosted, ignoreLava); if (pitch != null) { return new Pair<>(pitch, false); } if (Baritone.settings().experimentalTakeoff.value && relaxation > 0) { - final Float usingFirework = this.solvePitch(goalDirection, steps, relaxation == 2, true); + final Float usingFirework = this.solvePitch(goalDirection, steps, relaxation == 2, true, ignoreLava); if (usingFirework != null) { return new Pair<>(usingFirework, true); } @@ -536,7 +543,7 @@ private Pair solvePitch(Vec3d goalDirection, int steps, int rela return new Pair<>(null, false); } - private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, boolean firework) { + private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, boolean firework, boolean ignoreLava) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch @@ -561,7 +568,7 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, bool for (int x = MathHelper.floor(Math.min(actualPosition.x, actualPositionPrevTick.x) - 0.31); x <= Math.max(actualPosition.x, actualPositionPrevTick.x) + 0.31; x++) { for (int y = MathHelper.floor(Math.min(actualPosition.y, actualPositionPrevTick.y) - 0.2); y <= Math.max(actualPosition.y, actualPositionPrevTick.y) + 1; y++) { for (int z = MathHelper.floor(Math.min(actualPosition.z, actualPositionPrevTick.z) - 0.31); z <= Math.max(actualPosition.z, actualPositionPrevTick.z) + 0.31; z++) { - if (!this.passable(x, y, z)) { + if (!this.passable(x, y, z, ignoreLava)) { continue outer; } } @@ -579,12 +586,13 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, bool return bestPitch; } - public boolean passable(int x, int y, int z) { - return passable(this.bsi.get0(x, y, z)); + public boolean passable(int x, int y, int z, boolean ignoreLava) { + return passable(this.bsi.get0(x, y, z), ignoreLava); } - public static boolean passable(IBlockState state) { - return state.getMaterial() == Material.AIR; + public static boolean passable(IBlockState state, boolean ignoreLava) { + Material mat = state.getMaterial(); + return mat == Material.AIR || (ignoreLava && mat == Material.LAVA); } private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, boolean firework) { @@ -637,5 +645,195 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, return new Vec3d(motionX, motionY, motionZ); } + + private boolean rayTraceBlocks(final double startX, final double startY, final double startZ, + final double endX, final double endY, final double endZ, boolean ignoreLava) { + int voxelCurrX = fastFloor(startX); + int voxelCurrY = fastFloor(startY); + int voxelCurrZ = fastFloor(startZ); + + if (!this.passable(voxelCurrX, voxelCurrY, voxelCurrZ, ignoreLava)) { + return true; + } + + final int voxelEndX = fastFloor(endX); + final int voxelEndY = fastFloor(endY); + final int voxelEndZ = fastFloor(endZ); + double currPosX = startX; + double currPosY = startY; + double currPosZ = startZ; + + int steps = 200; // TODO: should we lower the max steps? + while (steps-- >= 0) { + if (voxelCurrX == voxelEndX && voxelCurrY == voxelEndY && voxelCurrZ == voxelEndZ) { + return false; + } + + final double distanceFromStartToEndX = endX - currPosX; + final double distanceFromStartToEndY = endY - currPosY; + final double distanceFromStartToEndZ = endZ - currPosZ; + + double nextIntegerX; + double nextIntegerY; + double nextIntegerZ; + // potentially more based branchless impl? + nextIntegerX = voxelCurrX + ((voxelCurrX - voxelEndX) >>> 31); // if voxelEnd > voxelIn, then voxelIn-voxelEnd will be negative, meaning the sign bit is 1 + nextIntegerY = voxelCurrY + ((voxelCurrY - voxelEndY) >>> 31); // if we do an unsigned right shift by 31, that sign bit becomes the LSB + nextIntegerZ = voxelCurrZ + ((voxelCurrZ - voxelEndZ) >>> 31); // therefore, this increments nextInteger iff EndX>inX, otherwise it leaves it alone + // remember: don't have to worry about the case when voxelEnd == voxelIn, because nextInteger value wont be used + + // these just have to be strictly greater than 1, might as well just go up to the next int + double fracIfSkipX = 2.0D; + double fracIfSkipY = 2.0D; + double fracIfSkipZ = 2.0D; + + // reminder to future self: don't "branchlessify" this, it's MUCH slower (pretty obviously, floating point div is much worse than a branch mispredict, but integer increment (like the other two removed branches) are cheap enough to be worth doing either way) + if (voxelEndX != voxelCurrX) { + fracIfSkipX = (nextIntegerX - currPosX) / distanceFromStartToEndX; + } + if (voxelEndY != voxelCurrY) { + fracIfSkipY = (nextIntegerY - currPosY) / distanceFromStartToEndY; + } + if (voxelEndZ != voxelCurrZ) { + fracIfSkipZ = (nextIntegerZ - currPosZ) / distanceFromStartToEndZ; + } + + if (fracIfSkipX < fracIfSkipY && fracIfSkipX < fracIfSkipZ) { + // note: voxelEndX == voxelInX is impossible because allowSkip would be set to false in that case, meaning that the elapsed distance would stay at default + currPosX = nextIntegerX; + currPosY += distanceFromStartToEndY * fracIfSkipX; + currPosZ += distanceFromStartToEndZ * fracIfSkipX; + // tested: faster to paste this 3 times with only one of the subtractions in each + final int xFloorOffset = (voxelEndX - voxelCurrX) >>> 31; + voxelCurrX = (fastFloor(currPosX) - xFloorOffset); + voxelCurrY = (fastFloor(currPosY)); + voxelCurrZ = (fastFloor(currPosZ)); + } else if (fracIfSkipY < fracIfSkipZ) { + currPosX += distanceFromStartToEndX * fracIfSkipY; + currPosY = nextIntegerY; + currPosZ += distanceFromStartToEndZ * fracIfSkipY; + // tested: faster to paste this 3 times with only one of the subtractions in each + final int yFloorOffset = (voxelEndY - voxelCurrY) >>> 31; + voxelCurrX = (fastFloor(currPosX)); + voxelCurrY = (fastFloor(currPosY) - yFloorOffset); + voxelCurrZ = (fastFloor(currPosZ)); + } else { + currPosX += distanceFromStartToEndX * fracIfSkipZ; + currPosY += distanceFromStartToEndY * fracIfSkipZ; + currPosZ = nextIntegerZ; + // tested: faster to paste this 3 times with only one of the subtractions in each + final int zFloorOffset = (voxelEndZ - voxelCurrZ) >>> 31; + voxelCurrX = (fastFloor(currPosX)); + voxelCurrY = (fastFloor(currPosY)); + voxelCurrZ = (fastFloor(currPosZ) - zFloorOffset); + } + + if (!this.passable(voxelCurrX, voxelCurrY, voxelCurrZ, ignoreLava)) { + return true; + } + } + return false; + } + + private static final double FLOOR_DOUBLE_D = 1_073_741_824.0; + private static final int FLOOR_DOUBLE_I = 1_073_741_824; + + private static int fastFloor(final double v) { + return ((int) (v + FLOOR_DOUBLE_D)) - FLOOR_DOUBLE_I; + } + + private boolean rayTraceBlocks(Vec3d start, Vec3d end, boolean ignoreLava) { + int x1 = MathHelper.floor(end.x); + int y1 = MathHelper.floor(end.y); + int z1 = MathHelper.floor(end.z); + int x2 = MathHelper.floor(start.x); + int y2 = MathHelper.floor(start.y); + int z2 = MathHelper.floor(start.z); + BlockPos blockpos = new BlockPos(x2, y2, z2); + IBlockState iblockstate = ctx.world().getBlockState(blockpos); + if (!passable(iblockstate, ignoreLava)) { + return true; + } + int steps = 200; + while (steps-- >= 0) { + if (Double.isNaN(start.x) || Double.isNaN(start.y) || Double.isNaN(start.z)) { + return false; + } + if (x2 == x1 && y2 == y1 && z2 == z1) { + return false; + } + boolean hitX = true; + boolean hitY = true; + boolean hitZ = true; + double nextX = 999.0D; + double nextY = 999.0D; + double nextZ = 999.0D; + if (x1 > x2) { + nextX = (double) x2 + 1.0D; + } else if (x1 < x2) { + nextX = (double) x2 + 0.0D; + } else { + hitX = false; + } + if (y1 > y2) { + nextY = (double) y2 + 1.0D; + } else if (y1 < y2) { + nextY = (double) y2 + 0.0D; + } else { + hitY = false; + } + if (z1 > z2) { + nextZ = (double) z2 + 1.0D; + } else if (z1 < z2) { + nextZ = (double) z2 + 0.0D; + } else { + hitZ = false; + } + double stepX = 999.0D; + double stepY = 999.0D; + double stepZ = 999.0D; + double dirX = end.x - start.x; + double dirY = end.y - start.y; + double dirZ = end.z - start.z; + if (hitX) { + stepX = (nextX - start.x) / dirX; + } + if (hitY) { + stepY = (nextY - start.y) / dirY; + } + if (hitZ) { + stepZ = (nextZ - start.z) / dirZ; + } + if (stepX == -0.0D) { + stepX = -1.0E-4D; + } + if (stepY == -0.0D) { + stepY = -1.0E-4D; + } + if (stepZ == -0.0D) { + stepZ = -1.0E-4D; + } + EnumFacing dir; + if (stepX < stepY && stepX < stepZ) { + dir = x1 > x2 ? EnumFacing.WEST : EnumFacing.EAST; + start = new Vec3d(nextX, start.y + dirY * stepX, start.z + dirZ * stepX); + } else if (stepY < stepZ) { + dir = y1 > y2 ? EnumFacing.DOWN : EnumFacing.UP; + start = new Vec3d(start.x + dirX * stepY, nextY, start.z + dirZ * stepY); + } else { + dir = z1 > z2 ? EnumFacing.NORTH : EnumFacing.SOUTH; + start = new Vec3d(start.x + dirX * stepZ, start.y + dirY * stepZ, nextZ); + } + x2 = MathHelper.floor(start.x) - (dir == EnumFacing.EAST ? 1 : 0); + y2 = MathHelper.floor(start.y) - (dir == EnumFacing.UP ? 1 : 0); + z2 = MathHelper.floor(start.z) - (dir == EnumFacing.SOUTH ? 1 : 0); + blockpos = new BlockPos(x2, y2, z2); + IBlockState iblockstate1 = ctx.world().getBlockState(blockpos); + if (!passable(iblockstate1, ignoreLava)) { + return true; + } + } + return false; + } } diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 0a833ab5d..bdee1a037 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -120,7 +120,7 @@ private static boolean[] pack(Chunk chunk) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { IBlockState state = bsc.get(x, y1, z); - if (!passable(state)) { + if (!passable(state, false)) { packed[x | (z << 4) | (y << 8)] = true; } } @@ -133,4 +133,4 @@ private static boolean[] pack(Chunk chunk) { throw new RuntimeException(e); } } -} \ No newline at end of file +} From 13742df877ac734eb393df5d8a2dcd6336b3bdb5 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 20 Jun 2023 00:00:52 +0200 Subject: [PATCH 662/935] Complete the last argument, not the first one --- src/main/java/baritone/command/defaults/MineCommand.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 52e9e0e67..0f0f9bcb1 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -51,7 +51,11 @@ public void execute(String label, IArgConsumer args) throws CommandException { } @Override - public Stream tabComplete(String label, IArgConsumer args) { + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + args.getAsOrDefault(Integer.class, 0); + while (args.has(2)) { + args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); + } return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); } From 84777c2437cb72a028a9f59148187a5c503807c0 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 20 Jun 2023 00:01:33 +0200 Subject: [PATCH 663/935] Don't complete more than what's supported --- src/main/java/baritone/command/defaults/GotoCommand.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/command/defaults/GotoCommand.java b/src/main/java/baritone/command/defaults/GotoCommand.java index fc43026bb..c64d7fa00 100644 --- a/src/main/java/baritone/command/defaults/GotoCommand.java +++ b/src/main/java/baritone/command/defaults/GotoCommand.java @@ -60,6 +60,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { public Stream tabComplete(String label, IArgConsumer args) throws CommandException { // since it's either a goal or a block, I don't think we can tab complete properly? // so just tab complete for the block variant + args.requireMax(1); return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); } From b111fd2f3ef610dfebc5c3b41e1d4021ff829213 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 20 Jun 2023 00:02:56 +0200 Subject: [PATCH 664/935] Don't construct malformed `ResourceLocation`s Later mc versions throw an exception when you construct a malformed `ResourceLocation`. --- .../baritone/api/command/datatypes/BlockById.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 3702725e3..0efb738ca 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -23,11 +23,17 @@ import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; +import java.util.regex.Pattern; import java.util.stream.Stream; public enum BlockById implements IDatatypeFor { INSTANCE; + /** + * Matches (domain:)?name? where domain and name are [a-z0-9_.-]+ and [a-z0-9/_.-]+ respectively. + */ + private static Pattern PATTERN = Pattern.compile("(?:[a-z0-9_.-]+:)?[a-z0-9/_.-]*"); + @Override public Block get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); @@ -40,13 +46,19 @@ public Block get(IDatatypeContext ctx) throws CommandException { @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + String arg = ctx.getConsumer().getString(); + + if (!PATTERN.matcher(arg).matches()) { + return Stream.empty(); + } + return new TabCompleteHelper() .append( Block.REGISTRY.getKeys() .stream() .map(Object::toString) ) - .filterPrefixNamespaced(ctx.getConsumer().getString()) + .filterPrefixNamespaced(arg) .sortAlphabetically() .stream(); } From 5f709eef9c0099b7d28b4e11ca46219c8350afde Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 19 Jun 2023 18:26:00 -0400 Subject: [PATCH 665/935] use world raytrace --- .../baritone/behavior/ElytraBehavior.java | 197 +----------------- 1 file changed, 2 insertions(+), 195 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 1bf098132..f2e22248b 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -36,10 +36,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.NonNullList; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.*; import net.minecraft.world.chunk.Chunk; import java.util.*; @@ -515,7 +512,7 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { if (!ignoreLava) { clear = !this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z); } else { - clear = !rayTraceBlocks(start.x, start.y, start.z, dest.x, dest.y, dest.z, true); + clear = ctx.world().rayTraceBlocks(start, dest, false, false, false) == null; } if (clear) { @@ -645,195 +642,5 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, return new Vec3d(motionX, motionY, motionZ); } - - private boolean rayTraceBlocks(final double startX, final double startY, final double startZ, - final double endX, final double endY, final double endZ, boolean ignoreLava) { - int voxelCurrX = fastFloor(startX); - int voxelCurrY = fastFloor(startY); - int voxelCurrZ = fastFloor(startZ); - - if (!this.passable(voxelCurrX, voxelCurrY, voxelCurrZ, ignoreLava)) { - return true; - } - - final int voxelEndX = fastFloor(endX); - final int voxelEndY = fastFloor(endY); - final int voxelEndZ = fastFloor(endZ); - double currPosX = startX; - double currPosY = startY; - double currPosZ = startZ; - - int steps = 200; // TODO: should we lower the max steps? - while (steps-- >= 0) { - if (voxelCurrX == voxelEndX && voxelCurrY == voxelEndY && voxelCurrZ == voxelEndZ) { - return false; - } - - final double distanceFromStartToEndX = endX - currPosX; - final double distanceFromStartToEndY = endY - currPosY; - final double distanceFromStartToEndZ = endZ - currPosZ; - - double nextIntegerX; - double nextIntegerY; - double nextIntegerZ; - // potentially more based branchless impl? - nextIntegerX = voxelCurrX + ((voxelCurrX - voxelEndX) >>> 31); // if voxelEnd > voxelIn, then voxelIn-voxelEnd will be negative, meaning the sign bit is 1 - nextIntegerY = voxelCurrY + ((voxelCurrY - voxelEndY) >>> 31); // if we do an unsigned right shift by 31, that sign bit becomes the LSB - nextIntegerZ = voxelCurrZ + ((voxelCurrZ - voxelEndZ) >>> 31); // therefore, this increments nextInteger iff EndX>inX, otherwise it leaves it alone - // remember: don't have to worry about the case when voxelEnd == voxelIn, because nextInteger value wont be used - - // these just have to be strictly greater than 1, might as well just go up to the next int - double fracIfSkipX = 2.0D; - double fracIfSkipY = 2.0D; - double fracIfSkipZ = 2.0D; - - // reminder to future self: don't "branchlessify" this, it's MUCH slower (pretty obviously, floating point div is much worse than a branch mispredict, but integer increment (like the other two removed branches) are cheap enough to be worth doing either way) - if (voxelEndX != voxelCurrX) { - fracIfSkipX = (nextIntegerX - currPosX) / distanceFromStartToEndX; - } - if (voxelEndY != voxelCurrY) { - fracIfSkipY = (nextIntegerY - currPosY) / distanceFromStartToEndY; - } - if (voxelEndZ != voxelCurrZ) { - fracIfSkipZ = (nextIntegerZ - currPosZ) / distanceFromStartToEndZ; - } - - if (fracIfSkipX < fracIfSkipY && fracIfSkipX < fracIfSkipZ) { - // note: voxelEndX == voxelInX is impossible because allowSkip would be set to false in that case, meaning that the elapsed distance would stay at default - currPosX = nextIntegerX; - currPosY += distanceFromStartToEndY * fracIfSkipX; - currPosZ += distanceFromStartToEndZ * fracIfSkipX; - // tested: faster to paste this 3 times with only one of the subtractions in each - final int xFloorOffset = (voxelEndX - voxelCurrX) >>> 31; - voxelCurrX = (fastFloor(currPosX) - xFloorOffset); - voxelCurrY = (fastFloor(currPosY)); - voxelCurrZ = (fastFloor(currPosZ)); - } else if (fracIfSkipY < fracIfSkipZ) { - currPosX += distanceFromStartToEndX * fracIfSkipY; - currPosY = nextIntegerY; - currPosZ += distanceFromStartToEndZ * fracIfSkipY; - // tested: faster to paste this 3 times with only one of the subtractions in each - final int yFloorOffset = (voxelEndY - voxelCurrY) >>> 31; - voxelCurrX = (fastFloor(currPosX)); - voxelCurrY = (fastFloor(currPosY) - yFloorOffset); - voxelCurrZ = (fastFloor(currPosZ)); - } else { - currPosX += distanceFromStartToEndX * fracIfSkipZ; - currPosY += distanceFromStartToEndY * fracIfSkipZ; - currPosZ = nextIntegerZ; - // tested: faster to paste this 3 times with only one of the subtractions in each - final int zFloorOffset = (voxelEndZ - voxelCurrZ) >>> 31; - voxelCurrX = (fastFloor(currPosX)); - voxelCurrY = (fastFloor(currPosY)); - voxelCurrZ = (fastFloor(currPosZ) - zFloorOffset); - } - - if (!this.passable(voxelCurrX, voxelCurrY, voxelCurrZ, ignoreLava)) { - return true; - } - } - return false; - } - - private static final double FLOOR_DOUBLE_D = 1_073_741_824.0; - private static final int FLOOR_DOUBLE_I = 1_073_741_824; - - private static int fastFloor(final double v) { - return ((int) (v + FLOOR_DOUBLE_D)) - FLOOR_DOUBLE_I; - } - - private boolean rayTraceBlocks(Vec3d start, Vec3d end, boolean ignoreLava) { - int x1 = MathHelper.floor(end.x); - int y1 = MathHelper.floor(end.y); - int z1 = MathHelper.floor(end.z); - int x2 = MathHelper.floor(start.x); - int y2 = MathHelper.floor(start.y); - int z2 = MathHelper.floor(start.z); - BlockPos blockpos = new BlockPos(x2, y2, z2); - IBlockState iblockstate = ctx.world().getBlockState(blockpos); - if (!passable(iblockstate, ignoreLava)) { - return true; - } - int steps = 200; - while (steps-- >= 0) { - if (Double.isNaN(start.x) || Double.isNaN(start.y) || Double.isNaN(start.z)) { - return false; - } - if (x2 == x1 && y2 == y1 && z2 == z1) { - return false; - } - boolean hitX = true; - boolean hitY = true; - boolean hitZ = true; - double nextX = 999.0D; - double nextY = 999.0D; - double nextZ = 999.0D; - if (x1 > x2) { - nextX = (double) x2 + 1.0D; - } else if (x1 < x2) { - nextX = (double) x2 + 0.0D; - } else { - hitX = false; - } - if (y1 > y2) { - nextY = (double) y2 + 1.0D; - } else if (y1 < y2) { - nextY = (double) y2 + 0.0D; - } else { - hitY = false; - } - if (z1 > z2) { - nextZ = (double) z2 + 1.0D; - } else if (z1 < z2) { - nextZ = (double) z2 + 0.0D; - } else { - hitZ = false; - } - double stepX = 999.0D; - double stepY = 999.0D; - double stepZ = 999.0D; - double dirX = end.x - start.x; - double dirY = end.y - start.y; - double dirZ = end.z - start.z; - if (hitX) { - stepX = (nextX - start.x) / dirX; - } - if (hitY) { - stepY = (nextY - start.y) / dirY; - } - if (hitZ) { - stepZ = (nextZ - start.z) / dirZ; - } - if (stepX == -0.0D) { - stepX = -1.0E-4D; - } - if (stepY == -0.0D) { - stepY = -1.0E-4D; - } - if (stepZ == -0.0D) { - stepZ = -1.0E-4D; - } - EnumFacing dir; - if (stepX < stepY && stepX < stepZ) { - dir = x1 > x2 ? EnumFacing.WEST : EnumFacing.EAST; - start = new Vec3d(nextX, start.y + dirY * stepX, start.z + dirZ * stepX); - } else if (stepY < stepZ) { - dir = y1 > y2 ? EnumFacing.DOWN : EnumFacing.UP; - start = new Vec3d(start.x + dirX * stepY, nextY, start.z + dirZ * stepY); - } else { - dir = z1 > z2 ? EnumFacing.NORTH : EnumFacing.SOUTH; - start = new Vec3d(start.x + dirX * stepZ, start.y + dirY * stepZ, nextZ); - } - x2 = MathHelper.floor(start.x) - (dir == EnumFacing.EAST ? 1 : 0); - y2 = MathHelper.floor(start.y) - (dir == EnumFacing.UP ? 1 : 0); - z2 = MathHelper.floor(start.z) - (dir == EnumFacing.SOUTH ? 1 : 0); - blockpos = new BlockPos(x2, y2, z2); - IBlockState iblockstate1 = ctx.world().getBlockState(blockpos); - if (!passable(iblockstate1, ignoreLava)) { - return true; - } - } - return false; - } } From f7a20a3acf49fb1c4b6a9553d1b9d02d2bfd2e49 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 20 Jun 2023 01:32:18 +0200 Subject: [PATCH 666/935] Don't swallow random exceptions, don't bother with CommandExceptions --- src/main/java/baritone/command/argument/ArgConsumer.java | 2 ++ src/main/java/baritone/command/manager/CommandManager.java | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/command/argument/ArgConsumer.java b/src/main/java/baritone/command/argument/ArgConsumer.java index 4a80681dd..42ac1e5a0 100644 --- a/src/main/java/baritone/command/argument/ArgConsumer.java +++ b/src/main/java/baritone/command/argument/ArgConsumer.java @@ -373,6 +373,8 @@ public > T getDatatypeForOrNull(D datatype) { public Stream tabCompleteDatatype(T datatype) { try { return datatype.tabComplete(this.context); + } catch (CommandException ignored) { + // NOP } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/baritone/command/manager/CommandManager.java b/src/main/java/baritone/command/manager/CommandManager.java index e7d24eb33..26f369df9 100644 --- a/src/main/java/baritone/command/manager/CommandManager.java +++ b/src/main/java/baritone/command/manager/CommandManager.java @@ -151,9 +151,12 @@ private void execute() { private Stream tabComplete() { try { return this.command.tabComplete(this.label, this.args); + } catch (CommandException ignored) { + // NOP } catch (Throwable t) { - return Stream.empty(); + t.printStackTrace(); } + return Stream.empty(); } } } From 31c9072970685e1a16ee191a8a94d8429c694634 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 20 Jun 2023 01:36:09 +0200 Subject: [PATCH 667/935] Forgot to git add --- src/main/java/baritone/command/manager/CommandManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/command/manager/CommandManager.java b/src/main/java/baritone/command/manager/CommandManager.java index 26f369df9..35cad4541 100644 --- a/src/main/java/baritone/command/manager/CommandManager.java +++ b/src/main/java/baritone/command/manager/CommandManager.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandUnhandledException; import baritone.api.command.exception.ICommandException; import baritone.api.command.helpers.TabCompleteHelper; From d87d1ab9b55cee52abeb18b702b32573fd384006 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 20 Jun 2023 02:00:08 +0200 Subject: [PATCH 668/935] Don't call `partOfMask` out of bounds --- .../mask/operator/BinaryOperatorMask.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java b/src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java index e591c7873..bcce96651 100644 --- a/src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java +++ b/src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java @@ -33,7 +33,7 @@ public final class BinaryOperatorMask extends AbstractMask { private final BooleanBinaryOperator operator; public BinaryOperatorMask(Mask a, Mask b, BooleanBinaryOperator operator) { - super(a.widthX(), a.heightY(), a.lengthZ()); + super(Math.max(a.widthX(), b.widthX()), Math.max(a.heightY(), b.heightY()), Math.max(a.lengthZ(), b.lengthZ())); this.a = a; this.b = b; this.operator = operator; @@ -42,11 +42,15 @@ public BinaryOperatorMask(Mask a, Mask b, BooleanBinaryOperator operator) { @Override public boolean partOfMask(int x, int y, int z, IBlockState currentState) { return this.operator.applyAsBoolean( - this.a.partOfMask(x, y, z, currentState), - this.b.partOfMask(x, y, z, currentState) + partOfMask(a, x, y, z, currentState), + partOfMask(b, x, y, z, currentState) ); } + private static boolean partOfMask(Mask mask, int x, int y, int z, IBlockState currentState) { + return x < mask.widthX() && y < mask.heightY() && z < mask.lengthZ() && mask.partOfMask(x, y, z, currentState); + } + public static final class Static extends AbstractMask implements StaticMask { private final StaticMask a; @@ -54,7 +58,7 @@ public static final class Static extends AbstractMask implements StaticMask { private final BooleanBinaryOperator operator; public Static(StaticMask a, StaticMask b, BooleanBinaryOperator operator) { - super(a.widthX(), a.heightY(), a.lengthZ()); + super(Math.max(a.widthX(), b.widthX()), Math.max(a.heightY(), b.heightY()), Math.max(a.lengthZ(), b.lengthZ())); this.a = a; this.b = b; this.operator = operator; @@ -63,9 +67,13 @@ public Static(StaticMask a, StaticMask b, BooleanBinaryOperator operator) { @Override public boolean partOfMask(int x, int y, int z) { return this.operator.applyAsBoolean( - this.a.partOfMask(x, y, z), - this.b.partOfMask(x, y, z) + partOfMask(a, x, y, z), + partOfMask(b, x, y, z) ); } + + private static boolean partOfMask(StaticMask mask, int x, int y, int z) { + return x < mask.widthX() && y < mask.heightY() && z < mask.lengthZ() && mask.partOfMask(x, y, z); + } } } From 30278a1c5254713e135c8a2a2bbf302b0fc4a2f1 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 20 Jun 2023 02:44:29 +0200 Subject: [PATCH 669/935] Implement `hashCode` for goals --- .../baritone/api/pathing/goals/GoalAxis.java | 5 ++++ .../baritone/api/pathing/goals/GoalBlock.java | 6 +++++ .../api/pathing/goals/GoalComposite.java | 5 ++++ .../api/pathing/goals/GoalGetToBlock.java | 6 +++++ .../api/pathing/goals/GoalInverted.java | 5 ++++ .../baritone/api/pathing/goals/GoalNear.java | 6 +++++ .../api/pathing/goals/GoalRunAway.java | 8 ++++++ .../pathing/goals/GoalStrictDirection.java | 9 +++++++ .../api/pathing/goals/GoalTwoBlocks.java | 6 +++++ .../baritone/api/pathing/goals/GoalXZ.java | 8 ++++++ .../api/pathing/goals/GoalYLevel.java | 5 ++++ .../java/baritone/process/BuilderProcess.java | 26 +++++++++++++++++++ .../java/baritone/process/MineProcess.java | 5 ++++ 13 files changed, 100 insertions(+) diff --git a/src/api/java/baritone/api/pathing/goals/GoalAxis.java b/src/api/java/baritone/api/pathing/goals/GoalAxis.java index ad8fb892e..6e2f84e7a 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalAxis.java +++ b/src/api/java/baritone/api/pathing/goals/GoalAxis.java @@ -47,6 +47,11 @@ public boolean equals(Object o) { return o.getClass() == GoalAxis.class; } + @Override + public int hashCode() { + return 201385781; + } + @Override public String toString() { return "GoalAxis"; diff --git a/src/api/java/baritone/api/pathing/goals/GoalBlock.java b/src/api/java/baritone/api/pathing/goals/GoalBlock.java index d76fdc7af..24faa9b34 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalBlock.java @@ -17,6 +17,7 @@ package baritone.api.pathing.goals; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; import net.minecraft.util.math.BlockPos; @@ -81,6 +82,11 @@ public boolean equals(Object o) { && z == goal.z; } + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) * 905165533; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalComposite.java b/src/api/java/baritone/api/pathing/goals/GoalComposite.java index d64f8e33e..8e13a86e4 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalComposite.java +++ b/src/api/java/baritone/api/pathing/goals/GoalComposite.java @@ -80,6 +80,11 @@ public boolean equals(Object o) { return Arrays.equals(goals, goal.goals); } + @Override + public int hashCode() { + return Arrays.hashCode(goals); + } + @Override public String toString() { return "GoalComposite" + Arrays.toString(goals); diff --git a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java index b5caafa48..b8934a480 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java @@ -17,6 +17,7 @@ package baritone.api.pathing.goals; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; import net.minecraft.util.math.BlockPos; @@ -75,6 +76,11 @@ public boolean equals(Object o) { && z == goal.z; } + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) * -49639096; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalInverted.java b/src/api/java/baritone/api/pathing/goals/GoalInverted.java index e559088ef..4a3f75315 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalInverted.java +++ b/src/api/java/baritone/api/pathing/goals/GoalInverted.java @@ -65,6 +65,11 @@ public boolean equals(Object o) { return Objects.equals(origin, goal.origin); } + @Override + public int hashCode() { + return origin.hashCode() * 495796690; + } + @Override public String toString() { return String.format("GoalInverted{%s}", origin.toString()); diff --git a/src/api/java/baritone/api/pathing/goals/GoalNear.java b/src/api/java/baritone/api/pathing/goals/GoalNear.java index 166138ff4..e211c0194 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalNear.java +++ b/src/api/java/baritone/api/pathing/goals/GoalNear.java @@ -17,6 +17,7 @@ package baritone.api.pathing.goals; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; import it.unimi.dsi.fastutil.doubles.DoubleIterator; @@ -102,6 +103,11 @@ public boolean equals(Object o) { && rangeSq == goal.rangeSq; } + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) + rangeSq; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java index 166ad5a98..1e65d30f7 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java +++ b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java @@ -140,6 +140,14 @@ public boolean equals(Object o) { && Objects.equals(maintainY, goal.maintainY); } + @Override + public int hashCode() { + int hash = Arrays.hashCode(from); + hash = hash * 1196803141 + distanceSq; + hash = hash * -2053788840 + maintainY; + return hash; + } + @Override public String toString() { if (maintainY != null) { diff --git a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java index b8e4b43b2..b6bf16b33 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java +++ b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java @@ -17,6 +17,7 @@ package baritone.api.pathing.goals; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -86,6 +87,14 @@ public boolean equals(Object o) { && dz == goal.dz; } + @Override + public int hashCode() { + int hash = (int) BetterBlockPos.longHash(x, y, z); + hash = hash * 630627507 + dx; + hash = hash * -283028380 + dz; + return hash; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java index d6fff33a2..475d6e972 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java +++ b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java @@ -17,6 +17,7 @@ package baritone.api.pathing.goals; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; import net.minecraft.util.math.BlockPos; @@ -87,6 +88,11 @@ public boolean equals(Object o) { && z == goal.z; } + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) * 516508351; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalXZ.java b/src/api/java/baritone/api/pathing/goals/GoalXZ.java index 2c551d395..1c7535b38 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalXZ.java +++ b/src/api/java/baritone/api/pathing/goals/GoalXZ.java @@ -77,6 +77,14 @@ public boolean equals(Object o) { return x == goal.x && z == goal.z; } + @Override + public int hashCode() { + int hash = 1791873246; + hash = hash * 222601791 + x; + hash = hash * -1331679453 + z; + return hash; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java index 37745e8de..442906ad1 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java +++ b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java @@ -71,6 +71,11 @@ public boolean equals(Object o) { return level == goal.level; } + @Override + public int hashCode() { + return level * 1271009915; + } + @Override public String toString() { return String.format( diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index ac12471a3..62f865899 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -775,6 +775,14 @@ public boolean equals(Object o) { && Objects.equals(fallback, goal.fallback); } + @Override + public int hashCode() { + int hash = -1701079641; + hash = hash * 1196141026 + primary.hashCode(); + hash = hash * -80327868 + fallback.hashCode(); + return hash; + } + @Override public String toString() { return "JankyComposite Primary: " + primary + " Fallback: " + fallback; @@ -806,6 +814,11 @@ public String toString() { SettingsUtil.maybeCensor(z) ); } + + @Override + public int hashCode() { + return super.hashCode() * 1636324008; + } } private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { @@ -883,6 +896,14 @@ public boolean equals(Object o) { && Objects.equals(no, goal.no); } + @Override + public int hashCode() { + int hash = 806368046; + hash = hash * 1730799370 + (int) BetterBlockPos.longHash(no.getX(), no.getY(), no.getZ()); + hash = hash * 260592149 + (allowSameLevel ? -1314802005 : 1565710265); + return hash; + } + @Override public String toString() { return String.format( @@ -906,6 +927,11 @@ public double heuristic(int x, int y, int z) { return this.y * 100 + super.heuristic(x, y, z); } + @Override + public int hashCode() { + return super.hashCode() * 1910811835; + } + @Override public String toString() { return String.format( diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 777b48197..8cd1a6cae 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -325,6 +325,11 @@ public boolean equals(Object o) { return super.equals(o); } + @Override + public int hashCode() { + return super.hashCode() * 393857768; + } + @Override public String toString() { return String.format( From 41d730fb04f1058d8bab6e57b3d04cd77926b577 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Tue, 20 Jun 2023 03:20:44 +0200 Subject: [PATCH 670/935] Forgot to include target pos --- src/main/java/baritone/process/BuilderProcess.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 62f865899..bd14d09a7 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -899,6 +899,7 @@ public boolean equals(Object o) { @Override public int hashCode() { int hash = 806368046; + hash = hash * 1412661222 + super.hashCode(); hash = hash * 1730799370 + (int) BetterBlockPos.longHash(no.getX(), no.getY(), no.getZ()); hash = hash * 260592149 + (allowSameLevel ? -1314802005 : 1565710265); return hash; From cd1c07deef082149a210dd345f0d8f6dae564183 Mon Sep 17 00:00:00 2001 From: 0x22 <0x22@futureclient.net> Date: Mon, 19 Jun 2023 22:22:57 -0400 Subject: [PATCH 671/935] added elytraFireworkSetbackUseDelay setting. --- src/api/java/baritone/api/Settings.java | 1 + .../baritone/behavior/ElytraBehavior.java | 33 ++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 3cfef2ffc..aa2a4a957 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -51,6 +51,7 @@ public final class Settings { public final Setting elytraSimulationTicks = new Setting<>(20); public final Setting elytraPitchRange = new Setting<>(25); public final Setting elytraFireworkSpeed = new Setting<>(0.6); + public final Setting elytraFireworkSetbackUseDelay = new Setting<>(15L); public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index f2e22248b..0b50bb804 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -21,6 +21,7 @@ import baritone.api.behavior.IElytraBehavior; import baritone.api.event.events.BlockChangeEvent; import baritone.api.event.events.ChunkEvent; +import baritone.api.event.events.PacketEvent; import baritone.api.event.events.TickEvent; import baritone.api.utils.*; import baritone.behavior.elytra.NetherPathfinderContext; @@ -33,9 +34,8 @@ import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; +import net.minecraft.network.play.server.SPacketPlayerPosLook; import net.minecraft.util.EnumHand; -import net.minecraft.util.NonNullList; import net.minecraft.util.math.*; import net.minecraft.world.chunk.Chunk; @@ -50,6 +50,10 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H */ private static final long NETHER_SEED = 146008555100680L; + private static final long MS_IN_NANOS = 1_000_000L; + private static final long TICK_IN_MS = 50L; + private static final long TICK_IN_NANOS = TICK_IN_MS * MS_IN_NANOS; + // Used exclusively for PathRenderer public List> clearLines; public List> blockedLines; @@ -62,6 +66,8 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private int sinceFirework; private BlockStateInterface bsi; + private long lastSetBack = Long.MIN_VALUE; + public ElytraBehavior(Baritone baritone) { super(baritone); this.context = new NetherPathfinderContext(NETHER_SEED); @@ -301,6 +307,13 @@ public void onBlockChange(BlockChangeEvent event) { .forEach(this.context::queueForPacking); } + @Override + public void onReceivePacket(PacketEvent event) { + if (event.getPacket() instanceof SPacketPlayerPosLook) { + this.lastSetBack = System.nanoTime(); + } + } + @Override public void pathTo(BlockPos destination) { this.pathManager.pathToDestination(destination); @@ -312,6 +325,7 @@ public void cancel() { this.pathManager.clear(); this.aimPos = null; this.sinceFirework = 0; + this.lastSetBack = Long.MIN_VALUE; } @Override @@ -415,18 +429,29 @@ public void onTick(TickEvent event) { } } + this.tickUseFireworks(start, firework, goingTo, forceUseFirework); + } + + private void tickUseFireworks(final Vec3d start, final boolean firework, final BetterBlockPos goingTo, final boolean forceUseFirework) { + final long now = System.nanoTime(); + final long timeSinceLastSetback = now - this.lastSetBack; + if (timeSinceLastSetback < Baritone.settings().elytraFireworkSetbackUseDelay.value * TICK_IN_NANOS) { + logDebug("waiting for elytraFireworkSetbackUseDelay: " + (timeSinceLastSetback / TICK_IN_NANOS)); + return; + } final boolean useOnDescend = !Baritone.settings().conserveFireworks.value || ctx.player().posY < goingTo.y + 5; final double currentSpeed = new Vec3d( ctx.player().motionX, // ignore y component if we are BOTH below where we want to be AND descending ctx.player().posY < goingTo.y ? Math.max(0, ctx.player().motionY) : ctx.player().motionY, ctx.player().motionZ - ).length(); + ).lengthSquared(); + final double elytraFireworkSpeed = Baritone.settings().elytraFireworkSpeed.value; if (sinceFirework > 10 && (forceUseFirework || (!firework && useOnDescend && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! - && currentSpeed < Baritone.settings().elytraFireworkSpeed.value)) + && currentSpeed < elytraFireworkSpeed * elytraFireworkSpeed)) ) { // Prioritize boosting fireworks over regular ones // TODO: Take the minimum boost time into account? From 753b1cf1c365161e2eff25234ff59c38d44e3c6c Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 21:36:09 -0500 Subject: [PATCH 672/935] Interpolate path positions - Update `nether-pathfinder` to 0.17 - Utilize new batched visibility raytracing to efficiently trace bounding box paths --- build.gradle | 4 +- .../baritone/behavior/ElytraBehavior.java | 78 ++++++++++--------- .../elytra/NetherPathfinderContext.java | 22 +++++- 3 files changed, 64 insertions(+), 40 deletions(-) diff --git a/build.gradle b/build.gradle index 95abfec6a..7608c07ad 100755 --- a/build.gradle +++ b/build.gradle @@ -175,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.16') + launchImplementation('dev.babbaj:nether-pathfinder:0.17') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.16' + implementation 'dev.babbaj:nether-pathfinder:0.17' } mixin { diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 0b50bb804..9331e3945 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -379,47 +379,59 @@ public void onTick(TickEvent event) { outermost: for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) int[] heights = firework ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost + float[] interps = new float[] {1.0f, 0.75f, 0.5f, 0.25f}; int steps = relaxation < 2 ? firework ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); int minStep = playerNear; for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { for (int dy : heights) { - Vec3d dest = this.pathManager.pathAt(i).add(0, dy, 0); - if (dy != 0) { - if (i + lookahead >= path.size()) { - continue; + for (float interp : interps) { + Vec3d dest; + if (interp == 1 || i == minStep) { + dest = this.pathManager.pathAt(i); + } else { + dest = this.pathManager.pathAt(i).scale(interp) + .add(this.pathManager.pathAt(i - 1).scale(1.0d - interp)); } - if (start.distanceTo(dest) < 40) { - if (!clearView(dest, this.pathManager.pathAt(i + lookahead).add(0, dy, 0), false) || !clearView(dest, this.pathManager.pathAt(i + lookahead), false)) { - // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position + + dest = dest.add(0, dy, 0); + if (dy != 0) { + if (i + lookahead >= path.size()) { continue; } - } else { - // but if it's far away, allow gaining altitude if we could lose it again by the time we get there - if (!clearView(dest, this.pathManager.pathAt(i), false)) { - continue; + if (start.distanceTo(dest) < 40) { + if (!clearView(dest, this.pathManager.pathAt(i + lookahead).add(0, dy, 0), false) + || !clearView(dest, this.pathManager.pathAt(i + lookahead), false)) { + // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position + continue; + } + } else { + // but if it's far away, allow gaining altitude if we could lose it again by the time we get there + if (!clearView(dest, this.pathManager.pathAt(i), false)) { + continue; + } } } - } - // 1.0 -> 0.25 -> none - final Double grow = relaxation == 2 ? null - : relaxation == 0 ? 1.0d : 0.25d; + // 1.0 -> 0.25 -> none + final Double grow = relaxation == 2 ? null + : relaxation == 0 ? 1.0d : 0.25d; - if (isClear(start, dest, grow, isInLava)) { - final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); + if (isClear(start, dest, grow, isInLava)) { + final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); - final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, firework, isInLava); - if (pitch.first() == null) { - baritone.getLookBehavior().updateTarget(new Rotation(yaw, ctx.playerRotations().getPitch()), false); - continue; + final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, firework, isInLava); + if (pitch.first() == null) { + baritone.getLookBehavior().updateTarget(new Rotation(yaw, ctx.playerRotations().getPitch()), false); + continue; + } + forceUseFirework = pitch.second(); + goingTo = new BetterBlockPos(dest.x, dest.y, dest.z); + this.aimPos = goingTo; + baritone.getLookBehavior().updateTarget(new Rotation(yaw, pitch.first()), false); + break outermost; } - forceUseFirework = pitch.second(); - goingTo = path.get(i); - this.aimPos = path.get(i).add(0, dy, 0); - baritone.getLookBehavior().updateTarget(new Rotation(yaw, pitch.first()), false); - break outermost; } } } @@ -520,22 +532,14 @@ private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAm bb.maxX + ox, bb.maxY + oy, bb.minZ + oz, bb.maxX + ox, bb.maxY + oy, bb.maxZ + oz, }; - - // Batch together all 8 traces - final boolean[] hitOut = new boolean[8]; - this.context.raytrace(src, dst, hitOut); - for (boolean hit : hitOut) { - if (hit) { - return false; - } - } - return true; + return this.context.raytrace(8, src, dst, NetherPathfinderContext.Visibility.ALL); } private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { final boolean clear; if (!ignoreLava) { - clear = !this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z); + // if start == dest then the cpp raytracer dies + clear = start.equals(dest) || !this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z); } else { clear = ctx.world().rayTraceBlocks(start, dest, false, false, false) == null; } diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index bdee1a037..7c30a51b1 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -21,7 +21,6 @@ import dev.babbaj.pathfinder.PathSegment; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; import net.minecraft.world.chunk.BlockStateContainer; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; @@ -82,6 +81,18 @@ public void raytrace(final double[] src, final double[] dst, final boolean[] hit NetherPathfinder.raytrace(this.context, true, hitOut.length, src, dst, hitOut, null); } + public boolean raytrace(final int count, final double[] src, final double[] dst, int visibility) { + switch (visibility) { + case Visibility.ALL: + return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, false); + case Visibility.NONE: + return !NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, true); + case Visibility.ANY: + return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, true); + } + throw new IllegalArgumentException("lol"); + } + public void cancel() { NetherPathfinder.cancel(this.context); } @@ -133,4 +144,13 @@ private static boolean[] pack(Chunk chunk) { throw new RuntimeException(e); } } + + public static final class Visibility { + + private Visibility() {} + + public static final int ALL = 0; + public static final int NONE = 1; + public static final int ANY = 2; + } } From ee0a6c2523d1abf09ea415064a8a4dbc4c097dd9 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 21:45:52 -0500 Subject: [PATCH 673/935] Use new single trace `isVisible` api --- .../baritone/behavior/ElytraBehavior.java | 2 +- .../elytra/NetherPathfinderContext.java | 30 +++++++++---------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 9331e3945..94abdd64d 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -539,7 +539,7 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { final boolean clear; if (!ignoreLava) { // if start == dest then the cpp raytracer dies - clear = start.equals(dest) || !this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z); + clear = start.equals(dest) || this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z); } else { clear = ctx.world().rayTraceBlocks(start, dest, false, false, false) == null; } diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 7c30a51b1..befb5163a 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -62,26 +62,24 @@ public CompletableFuture pathFindAsync(final BlockPos src, final Bl ), this.executor); } + /** + * Performs a raytrace from the given start position to the given end position, returning {@code true} if there is + * visibility between the two points. + * + * @param startX The start X coordinate + * @param startY The start Y coordinate + * @param startZ The start Z coordinate + * @param endX The end X coordinate + * @param endY The end Y coordinate + * @param endZ The end Z coordinate + * @return {@code true} if there is visibility between the points + */ public boolean raytrace(final double startX, final double startY, final double startZ, final double endX, final double endY, final double endZ) { - final boolean[] hitOut = new boolean[1]; - NetherPathfinder.raytrace( - this.context, - true, - 1, - new double[] { startX, startY, startZ }, - new double[] { endX, endY, endZ }, - hitOut, - null - ); - return hitOut[0]; + return NetherPathfinder.isVisible(this.context, true, startX, startY, startZ, endX, endY, endZ); } - public void raytrace(final double[] src, final double[] dst, final boolean[] hitOut) { - NetherPathfinder.raytrace(this.context, true, hitOut.length, src, dst, hitOut, null); - } - - public boolean raytrace(final int count, final double[] src, final double[] dst, int visibility) { + public boolean raytrace(final int count, final double[] src, final double[] dst, final int visibility) { switch (visibility) { case Visibility.ALL: return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, false); From 5d7655fbdf5313eea8a7d505a9890c6712989e16 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 22:52:27 -0500 Subject: [PATCH 674/935] Fix silly 0x integer wraparound trolle --- src/main/java/baritone/behavior/ElytraBehavior.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 94abdd64d..6d8b2cb3b 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -84,6 +84,7 @@ private final class PathManager { private boolean completePath; private boolean recalculating; private int playerNear; + private int maxPlayerNear; public PathManager() { // lol imagine initializing fields normally @@ -92,6 +93,7 @@ public PathManager() { public void tick() { // Recalculate closest path node + final int prevMax = this.maxPlayerNear; this.playerNear = this.calculateNear(this.playerNear); // Obstacles are more important than an incomplete path, handle those first. @@ -446,9 +448,10 @@ public void onTick(TickEvent event) { private void tickUseFireworks(final Vec3d start, final boolean firework, final BetterBlockPos goingTo, final boolean forceUseFirework) { final long now = System.nanoTime(); - final long timeSinceLastSetback = now - this.lastSetBack; - if (timeSinceLastSetback < Baritone.settings().elytraFireworkSetbackUseDelay.value * TICK_IN_NANOS) { - logDebug("waiting for elytraFireworkSetbackUseDelay: " + (timeSinceLastSetback / TICK_IN_NANOS)); + final long waitUntil = this.lastSetBack + Baritone.settings().elytraFireworkSetbackUseDelay.value * TICK_IN_NANOS; + final long remaining = waitUntil - now; + if (remaining < 0) { + logDebug("waiting for elytraFireworkSetbackUseDelay: " + (remaining / TICK_IN_NANOS)); return; } final boolean useOnDescend = !Baritone.settings().conserveFireworks.value || ctx.player().posY < goingTo.y + 5; From 14ff90ccf14f3cea388db711a73d2ed95f91620d Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 19 Jun 2023 23:12:46 -0500 Subject: [PATCH 675/935] remaining ticks mojang incident --- src/api/java/baritone/api/Settings.java | 2 +- .../baritone/behavior/ElytraBehavior.java | 36 ++++++++++--------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index aa2a4a957..be959ef12 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -51,7 +51,7 @@ public final class Settings { public final Setting elytraSimulationTicks = new Setting<>(20); public final Setting elytraPitchRange = new Setting<>(25); public final Setting elytraFireworkSpeed = new Setting<>(0.6); - public final Setting elytraFireworkSetbackUseDelay = new Setting<>(15L); + public final Setting elytraFireworkSetbackUseDelay = new Setting<>(15); public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 6d8b2cb3b..1973e1bd4 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -63,11 +63,10 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // :sunglasses: private final NetherPathfinderContext context; private final PathManager pathManager; - private int sinceFirework; + private int remainingFireworkTicks; + private int remainingSetBackTicks; private BlockStateInterface bsi; - private long lastSetBack = Long.MIN_VALUE; - public ElytraBehavior(Baritone baritone) { super(baritone); this.context = new NetherPathfinderContext(NETHER_SEED); @@ -84,7 +83,6 @@ private final class PathManager { private boolean completePath; private boolean recalculating; private int playerNear; - private int maxPlayerNear; public PathManager() { // lol imagine initializing fields normally @@ -93,7 +91,6 @@ public PathManager() { public void tick() { // Recalculate closest path node - final int prevMax = this.maxPlayerNear; this.playerNear = this.calculateNear(this.playerNear); // Obstacles are more important than an incomplete path, handle those first. @@ -312,7 +309,9 @@ public void onBlockChange(BlockChangeEvent event) { @Override public void onReceivePacket(PacketEvent event) { if (event.getPacket() instanceof SPacketPlayerPosLook) { - this.lastSetBack = System.nanoTime(); + ctx.minecraft().addScheduledTask(() -> { + this.remainingSetBackTicks = Baritone.settings().elytraFireworkSetbackUseDelay.value; + }); } } @@ -326,8 +325,8 @@ public void cancel() { this.visiblePath = Collections.emptyList(); this.pathManager.clear(); this.aimPos = null; - this.sinceFirework = 0; - this.lastSetBack = Long.MIN_VALUE; + this.remainingFireworkTicks = 0; + this.remainingSetBackTicks = 0; } @Override @@ -341,6 +340,14 @@ public void onTick(TickEvent event) { return; } + // Certified mojang employee incident + if (this.remainingFireworkTicks > 0) { + this.remainingFireworkTicks--; + } + if (this.remainingSetBackTicks > 0) { + this.remainingSetBackTicks--; + } + this.clearLines.clear(); this.blockedLines.clear(); @@ -375,7 +382,7 @@ public void onTick(TickEvent event) { final boolean firework = isFireworkActive(); BetterBlockPos goingTo = null; boolean forceUseFirework = false; - this.sinceFirework++; + final boolean isInLava = ctx.player().isInLava(); outermost: @@ -447,11 +454,8 @@ public void onTick(TickEvent event) { } private void tickUseFireworks(final Vec3d start, final boolean firework, final BetterBlockPos goingTo, final boolean forceUseFirework) { - final long now = System.nanoTime(); - final long waitUntil = this.lastSetBack + Baritone.settings().elytraFireworkSetbackUseDelay.value * TICK_IN_NANOS; - final long remaining = waitUntil - now; - if (remaining < 0) { - logDebug("waiting for elytraFireworkSetbackUseDelay: " + (remaining / TICK_IN_NANOS)); + if (this.remainingSetBackTicks > 0) { + logDebug("waiting for elytraFireworkSetbackUseDelay: " + this.remainingSetBackTicks); return; } final boolean useOnDescend = !Baritone.settings().conserveFireworks.value || ctx.player().posY < goingTo.y + 5; @@ -463,7 +467,7 @@ private void tickUseFireworks(final Vec3d start, final boolean firework, final B ).lengthSquared(); final double elytraFireworkSpeed = Baritone.settings().elytraFireworkSpeed.value; - if (sinceFirework > 10 && (forceUseFirework || (!firework + if (this.remainingFireworkTicks <= 0 && (forceUseFirework || (!firework && useOnDescend && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! && currentSpeed < elytraFireworkSpeed * elytraFireworkSpeed)) @@ -477,7 +481,7 @@ private void tickUseFireworks(final Vec3d start, final boolean firework, final B } logDirect("attempting to use firework" + (forceUseFirework ? " takeoff" : "")); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); - sinceFirework = 0; + this.remainingFireworkTicks = 10; } } From 6c6b44ee65d8752acaee9db53d5a7822b00c0ccb Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 13:43:14 -0500 Subject: [PATCH 676/935] Recalculate path if stuck --- .../baritone/behavior/ElytraBehavior.java | 59 ++++++++++++++----- 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 1973e1bd4..f04fed343 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -50,10 +50,6 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H */ private static final long NETHER_SEED = 146008555100680L; - private static final long MS_IN_NANOS = 1_000_000L; - private static final long TICK_IN_MS = 50L; - private static final long TICK_IN_NANOS = TICK_IN_MS * MS_IN_NANOS; - // Used exclusively for PathRenderer public List> clearLines; public List> blockedLines; @@ -82,6 +78,9 @@ private final class PathManager { private List path; private boolean completePath; private boolean recalculating; + + private int maxPlayerNear; + private int ticksNearUnchanged; private int playerNear; public PathManager() { @@ -91,7 +90,15 @@ public PathManager() { public void tick() { // Recalculate closest path node + final int prevMaxNear = this.maxPlayerNear; this.playerNear = this.calculateNear(this.playerNear); + this.maxPlayerNear = Math.max(this.maxPlayerNear, this.playerNear); + + if (this.maxPlayerNear == prevMaxNear) { + this.ticksNearUnchanged++; + } else { + this.ticksNearUnchanged = 0; + } // Obstacles are more important than an incomplete path, handle those first. this.pathfindAroundObstacles(); @@ -118,23 +125,16 @@ public void pathToDestination(BlockPos destination) { }); } - public void pathRecalcSegment(final int blockedAt, final int upToIncl) { + public CompletableFuture pathRecalcSegment(final int upToIncl) { if (this.recalculating) { - return; + throw new IllegalStateException("already recalculating"); } this.recalculating = true; final List after = this.path.subList(upToIncl, this.path.size()); final boolean complete = this.completePath; - final BetterBlockPos blockage = this.path.get(blockedAt); - final long start = System.nanoTime(); - this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete)) - .thenRun(() -> { - final int recompute = this.path.size() - after.size() - 1; - final double distance = this.pathAt(0).distanceTo(this.pathAt(recompute)); // in spirit same as ctx.playerFeet().distanceTo(this.path.get(upToIncl)), but, thread safe (those could have changed in the meantime) - logDirect(String.format("Recalculated segment around path blockage near %s %s %s (next %.1f blocks in %.4f seconds)", SettingsUtil.maybeCensor(blockage.x), SettingsUtil.maybeCensor(blockage.y), SettingsUtil.maybeCensor(blockage.z), distance, (System.nanoTime() - start) / 1e9d)); - }) + return this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete)) .whenComplete((result, ex) -> { this.recalculating = false; if (ex != null) { @@ -185,13 +185,17 @@ public void clear() { this.completePath = true; this.recalculating = false; this.playerNear = 0; + this.ticksNearUnchanged = 0; + this.maxPlayerNear = 0; } private void setPath(final UnpackedSegment segment) { this.path = segment.collect(); this.removeBacktracks(); - this.playerNear = 0; this.completePath = segment.isFinished(); + this.playerNear = 0; + this.ticksNearUnchanged = 0; + this.maxPlayerNear = 0; } public List getPath() { @@ -228,11 +232,34 @@ private void pathfindAroundObstacles() { // we're in a wall return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: } + + if (this.ticksNearUnchanged > 100) { + this.pathRecalcSegment(rangeEndExcl - 1) + .thenRun(() -> { + logDirect("Recalculating segment, no progress in last 100 ticks"); + }); + this.ticksNearUnchanged = 0; + return; + } + for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { if (!clearView(pathAt(i), pathAt(i + 1), false)) { // obstacle. where do we return to pathing? // find the next valid segment - this.pathRecalcSegment(i, rangeEndExcl - 1); + final BetterBlockPos blockage = this.path.get(i); + final double distance = Math.sqrt(ctx.playerFeet().distanceSq(this.path.get(rangeEndExcl - 1))); + + final long start = System.nanoTime(); + this.pathRecalcSegment(rangeEndExcl - 1) + .thenRun(() -> { + logDirect(String.format("Recalculated segment around path blockage near %s %s %s (next %.1f blocks in %.4f seconds)", + SettingsUtil.maybeCensor(blockage.x), + SettingsUtil.maybeCensor(blockage.y), + SettingsUtil.maybeCensor(blockage.z), + distance, + (System.nanoTime() - start) / 1e9d + )); + }); return; } } From 0ecabdd04714e68ac27e080e9c7831b3547e767c Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 13:43:42 -0500 Subject: [PATCH 677/935] Update `nether-pathfinder` to 0.18 --- build.gradle | 4 ++-- .../baritone/behavior/elytra/NetherPathfinderContext.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 7608c07ad..41a495f4f 100755 --- a/build.gradle +++ b/build.gradle @@ -175,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.17') + launchImplementation('dev.babbaj:nether-pathfinder:0.18') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.17' + implementation 'dev.babbaj:nether-pathfinder:0.18' } mixin { diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index befb5163a..f269cd33b 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -82,11 +82,11 @@ public boolean raytrace(final double startX, final double startY, final double s public boolean raytrace(final int count, final double[] src, final double[] dst, final int visibility) { switch (visibility) { case Visibility.ALL: - return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, false); + return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, false) == -1; case Visibility.NONE: - return !NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, true); + return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, true) == -1; case Visibility.ANY: - return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, true); + return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, true) != -1; } throw new IllegalArgumentException("lol"); } From 7d22a71507215c2e9ae3099c7dc1fe3c8145e692 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 13:50:26 -0500 Subject: [PATCH 678/935] Only count unchanged ticks when using elytra --- src/main/java/baritone/behavior/ElytraBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index f04fed343..f54b66d6c 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -94,7 +94,7 @@ public void tick() { this.playerNear = this.calculateNear(this.playerNear); this.maxPlayerNear = Math.max(this.maxPlayerNear, this.playerNear); - if (this.maxPlayerNear == prevMaxNear) { + if (this.maxPlayerNear == prevMaxNear && ctx.player().isElytraFlying()) { this.ticksNearUnchanged++; } else { this.ticksNearUnchanged = 0; From c057081f07a0079289e16b53764f2567b1fd14bf Mon Sep 17 00:00:00 2001 From: Babbaj Date: Tue, 20 Jun 2023 15:48:12 -0400 Subject: [PATCH 679/935] fix 0.5 offset in elytra path rendering --- .../java/baritone/utils/PathRenderer.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 5898ce643..0b08a1f32 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -104,7 +104,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { final ElytraBehavior elytra = behavior.baritone.getElytraBehavior(); - drawPath(elytra.visiblePath, 0, Color.RED, false, 0, 0); + drawPath(elytra.visiblePath, 0, Color.RED, false, 0, 0, 0.0D); if (elytra.aimPos != null) { drawGoal(ctx.player(), new GoalBlock(elytra.aimPos), partialTicks, Color.GREEN); } @@ -138,6 +138,10 @@ public static void render(RenderEvent event, PathingBehavior behavior) { } private static void drawPath(List positions, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + drawPath(positions, startIndex, color, fadeOut, fadeStart0, fadeEnd0, 0.5D); + } + + private static void drawPath(List positions, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0, double offset) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); int fadeStart = fadeStart0 + startIndex; @@ -173,7 +177,7 @@ private static void drawPath(List positions, int startIndex, Col IRenderer.glColor(color, alpha); } - emitPathLine(start.x, start.y, start.z, end.x, end.y, end.z); + emitPathLine(start.x, start.y, start.z, end.x, end.y, end.z, offset); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); @@ -187,24 +191,25 @@ private static void emitLine(double x1, double y1, double z1, double x2, double buffer.pos(x2 - vpX, y2 - vpY, z2 - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); } - private static void emitPathLine(double x1, double y1, double z1, double x2, double y2, double z2) { + private static void emitPathLine(double x1, double y1, double z1, double x2, double y2, double z2, double offset) { + final double extraOffset = offset + 0.03D; double vpX = renderManager.viewerPosX; double vpY = renderManager.viewerPosY; double vpZ = renderManager.viewerPosZ; boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; - buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x1 + offset - vpX, y1 + offset - vpY, z1 + offset - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x2 + offset - vpX, y2 + offset - vpY, z2 + offset - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); if (renderPathAsFrickinThingy) { - buffer.pos(x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x2 + offset - vpX, y2 + offset - vpY, z2 + offset - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x2 + offset - vpX, y2 + extraOffset - vpY, z2 + offset - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x2 + offset - vpX, y2 + extraOffset - vpY, z2 + offset - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x1 + offset - vpX, y1 + extraOffset - vpY, z1 + offset - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x1 + offset - vpX, y1 + extraOffset - vpY, z1 + offset - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x1 + offset - vpX, y1 + offset - vpY, z1 + offset - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); } } From 0aad3470d9785002aa876648f37b99842c404871 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 15:05:59 -0500 Subject: [PATCH 680/935] Differ between no pitch solution and no solution at all --- .../baritone/behavior/ElytraBehavior.java | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index f54b66d6c..e3d0164b8 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -408,9 +408,8 @@ public void onTick(TickEvent event) { final Vec3d start = ctx.playerFeetAsVec(); final boolean firework = isFireworkActive(); BetterBlockPos goingTo = null; - boolean forceUseFirework = false; - final boolean isInLava = ctx.player().isInLava(); + Solution solution = null; outermost: for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) @@ -459,25 +458,34 @@ public void onTick(TickEvent event) { final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, firework, isInLava); if (pitch.first() == null) { - baritone.getLookBehavior().updateTarget(new Rotation(yaw, ctx.playerRotations().getPitch()), false); + solution = new Solution(new Rotation(yaw, ctx.playerRotations().getPitch()), false, false); continue; } - forceUseFirework = pitch.second(); goingTo = new BetterBlockPos(dest.x, dest.y, dest.z); this.aimPos = goingTo; - baritone.getLookBehavior().updateTarget(new Rotation(yaw, pitch.first()), false); + + // A solution was found with yaw AND pitch, break out of the loop to use it + solution = new Solution(new Rotation(yaw, pitch.first()), true, pitch.second()); break outermost; } } } } - if (relaxation == 2) { - logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); - return; - } } - this.tickUseFireworks(start, firework, goingTo, forceUseFirework); + if (solution == null) { + logDirect("no solution"); + return; + } + + baritone.getLookBehavior().updateTarget(solution.rotation, false); + + if (!solution.solvedPitch) { + logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); + return; + } + + this.tickUseFireworks(start, firework, goingTo, solution.forceUseFirework); } private void tickUseFireworks(final Vec3d start, final boolean firework, final BetterBlockPos goingTo, final boolean forceUseFirework) { @@ -512,6 +520,19 @@ private void tickUseFireworks(final Vec3d start, final boolean firework, final B } } + private static final class Solution { + + public final Rotation rotation; + public final boolean solvedPitch; + public final boolean forceUseFirework; + + public Solution(Rotation rotation, boolean solvedPitch, boolean forceUseFirework) { + this.rotation = rotation; + this.solvedPitch = solvedPitch; + this.forceUseFirework = forceUseFirework; + } + } + private static boolean isFireworks(final ItemStack itemStack) { if (itemStack.getItem() != Items.FIREWORKS) { return false; From e3c82831583611cce3ba8df9fbe06e4533c73f69 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 15:15:02 -0500 Subject: [PATCH 681/935] Move solver into separate method --- .../baritone/behavior/ElytraBehavior.java | 57 ++++++++++--------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index e3d0164b8..1be445b2c 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -406,16 +406,32 @@ public void onTick(TickEvent event) { } final Vec3d start = ctx.playerFeetAsVec(); - final boolean firework = isFireworkActive(); - BetterBlockPos goingTo = null; + final boolean currentlyBoosted = this.isFireworkActive(); + + final Solution solution = this.solveAngles(path, playerNear, start, currentlyBoosted); + if (solution == null) { + logDirect("no solution"); + return; + } + + baritone.getLookBehavior().updateTarget(solution.rotation, false); + + if (!solution.solvedPitch) { + logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); + return; + } + + this.tickUseFireworks(start, currentlyBoosted, solution.goingTo, solution.forceUseFirework); + } + + private Solution solveAngles(final List path, final int playerNear, final Vec3d start, final boolean currentlyBoosted) { final boolean isInLava = ctx.player().isInLava(); Solution solution = null; - outermost: for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) - int[] heights = firework ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost + int[] heights = currentlyBoosted ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost float[] interps = new float[] {1.0f, 0.75f, 0.5f, 0.25f}; - int steps = relaxation < 2 ? firework ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; + int steps = relaxation < 2 ? currentlyBoosted ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); int minStep = playerNear; @@ -456,36 +472,23 @@ public void onTick(TickEvent event) { if (isClear(start, dest, grow, isInLava)) { final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); - final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, firework, isInLava); + final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, currentlyBoosted, isInLava); if (pitch.first() == null) { - solution = new Solution(new Rotation(yaw, ctx.playerRotations().getPitch()), false, false); + solution = new Solution(new Rotation(yaw, ctx.playerRotations().getPitch()), null, false, false); continue; } - goingTo = new BetterBlockPos(dest.x, dest.y, dest.z); + + final BetterBlockPos goingTo = new BetterBlockPos(dest.x, dest.y, dest.z); this.aimPos = goingTo; - // A solution was found with yaw AND pitch, break out of the loop to use it - solution = new Solution(new Rotation(yaw, pitch.first()), true, pitch.second()); - break outermost; + // A solution was found with yaw AND pitch, so just immediately return it. + return new Solution(new Rotation(yaw, pitch.first()), goingTo, true, pitch.second()); } } } } } - - if (solution == null) { - logDirect("no solution"); - return; - } - - baritone.getLookBehavior().updateTarget(solution.rotation, false); - - if (!solution.solvedPitch) { - logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); - return; - } - - this.tickUseFireworks(start, firework, goingTo, solution.forceUseFirework); + return solution; } private void tickUseFireworks(final Vec3d start, final boolean firework, final BetterBlockPos goingTo, final boolean forceUseFirework) { @@ -523,11 +526,13 @@ private void tickUseFireworks(final Vec3d start, final boolean firework, final B private static final class Solution { public final Rotation rotation; + public final BetterBlockPos goingTo; public final boolean solvedPitch; public final boolean forceUseFirework; - public Solution(Rotation rotation, boolean solvedPitch, boolean forceUseFirework) { + public Solution(Rotation rotation, BetterBlockPos goingTo, boolean solvedPitch, boolean forceUseFirework) { this.rotation = rotation; + this.goingTo = goingTo; this.solvedPitch = solvedPitch; this.forceUseFirework = forceUseFirework; } From 4076263afa5cbbbb3e5aa6d43e8eae4cf9f21c4f Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 17:00:42 -0500 Subject: [PATCH 682/935] Un-scuff PRE TickEvent injector --- .../java/baritone/launch/mixins/MixinMinecraft.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 19d4741ca..ddd17e8d5 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -38,6 +38,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @@ -69,9 +70,15 @@ private void postInit(CallbackInfo ci) { value = "FIELD", opcode = Opcodes.GETFIELD, target = "net/minecraft/client/Minecraft.currentScreen:Lnet/minecraft/client/gui/GuiScreen;", - ordinal = 5, - shift = At.Shift.BY, - by = -3 + ordinal = 0, + shift = At.Shift.BEFORE + ), + slice = @Slice( + from = @At( + value = "FIELD", + opcode = Opcodes.PUTFIELD, + target = "net/minecraft/client/Minecraft.leftClickCounter:I" + ) ) ) private void runTick(CallbackInfo ci) { From 2a82f6048a25c966098c127770fcb52c9ee21279 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 17:18:30 -0500 Subject: [PATCH 683/935] Implement POST TickEvent with new `onPostTick` callback --- .../baritone/api/event/events/TickEvent.java | 9 ++++++ .../listener/AbstractGameEventListener.java | 3 ++ .../event/listener/IGameEventListener.java | 8 ++++++ .../launch/mixins/MixinMinecraft.java | 28 +++++++++++++++++-- .../java/baritone/event/GameEventHandler.java | 5 ++++ 5 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/api/java/baritone/api/event/events/TickEvent.java b/src/api/java/baritone/api/event/events/TickEvent.java index 5c484ae49..405ad3c49 100644 --- a/src/api/java/baritone/api/event/events/TickEvent.java +++ b/src/api/java/baritone/api/event/events/TickEvent.java @@ -18,9 +18,18 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; +import net.minecraft.client.Minecraft; import java.util.function.BiFunction; +/** + * Called on and after each game tick of the primary {@link Minecraft} instance and dispatched to all Baritone + * instances. + *

+ * When {@link #state} is {@link EventState#PRE}, the event is being called just prior to when the current in-game + * screen is ticked. When {@link #state} is {@link EventState#POST}, the event is being called at the very end + * of the {@link Minecraft#runTick()} method. + */ public final class TickEvent { private static int overallTickCount; diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index 64ae0c16e..54aabe387 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -33,6 +33,9 @@ public interface AbstractGameEventListener extends IGameEventListener { @Override default void onTick(TickEvent event) {} + @Override + default void onPostTick(TickEvent event) {} + @Override default void onPlayerUpdate(PlayerUpdateEvent event) {} diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index 71e9521ad..22466ce52 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -41,6 +41,14 @@ public interface IGameEventListener { */ void onTick(TickEvent event); + /** + * Run once per game tick after the tick is completed + * + * @param event The event + * @see Minecraft#runTick() + */ + void onPostTick(TickEvent event); + /** * Run once per game tick from before and after the player rotation is sent to the server. * diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index ddd17e8d5..13bc2cdf2 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -35,6 +35,7 @@ import org.spongepowered.asm.lib.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; @@ -53,9 +54,13 @@ public class MixinMinecraft { @Shadow public EntityPlayerSP player; + @Shadow public WorldClient world; + @Unique + private BiFunction tickProvider; + @Inject( method = "init", at = @At("RETURN") @@ -82,16 +87,33 @@ private void postInit(CallbackInfo ci) { ) ) private void runTick(CallbackInfo ci) { - final BiFunction tickProvider = TickEvent.createNextProvider(); + this.tickProvider = TickEvent.createNextProvider(); for (IBaritone baritone : BaritoneAPI.getProvider().getAllBaritones()) { - TickEvent.Type type = baritone.getPlayerContext().player() != null && baritone.getPlayerContext().world() != null ? TickEvent.Type.IN : TickEvent.Type.OUT; + baritone.getGameEventHandler().onTick(this.tickProvider.apply(EventState.PRE, type)); + } + } - baritone.getGameEventHandler().onTick(tickProvider.apply(EventState.PRE, type)); + @Inject( + method = "runTick", + at = @At("RETURN") + ) + private void postRunTick() { + if (this.tickProvider == null) { + return; + } + + for (IBaritone baritone : BaritoneAPI.getProvider().getAllBaritones()) { + TickEvent.Type type = baritone.getPlayerContext().player() != null && baritone.getPlayerContext().world() != null + ? TickEvent.Type.IN + : TickEvent.Type.OUT; + baritone.getGameEventHandler().onPostTick(this.tickProvider.apply(EventState.POST, type)); } + + this.tickProvider = null; } @Inject( diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index ceb05e739..d26f2de24 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -62,6 +62,11 @@ public final void onTick(TickEvent event) { listeners.forEach(l -> l.onTick(event)); } + @Override + public void onPostTick(TickEvent event) { + listeners.forEach(l -> l.onPostTick(event)); + } + @Override public final void onPlayerUpdate(PlayerUpdateEvent event) { listeners.forEach(l -> l.onPlayerUpdate(event)); From 57a17e907ea79b944ec253628434ac08e9408cac Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 17:30:38 -0500 Subject: [PATCH 684/935] Add missing `CallbackInfo` --- src/launch/java/baritone/launch/mixins/MixinMinecraft.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 13bc2cdf2..543ed3280 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -101,7 +101,7 @@ private void runTick(CallbackInfo ci) { method = "runTick", at = @At("RETURN") ) - private void postRunTick() { + private void postRunTick(CallbackInfo ci) { if (this.tickProvider == null) { return; } From 1d092a71652f5cd7be3c1a169a3ba2b2ddee847a Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 20:09:53 -0500 Subject: [PATCH 685/935] Compute angles on another thread between ticks --- .../baritone/api/utils/BetterBlockPos.java | 14 ++ .../baritone/behavior/ElytraBehavior.java | 167 +++++++++++++----- .../elytra/NetherPathfinderContext.java | 5 +- 3 files changed, 140 insertions(+), 46 deletions(-) diff --git a/src/api/java/baritone/api/utils/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java index a9b02445b..01e53402e 100644 --- a/src/api/java/baritone/api/utils/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -202,6 +202,20 @@ public BetterBlockPos west(int amt) { return amt == 0 ? this : new BetterBlockPos(x - amt, y, z); } + public double distanceSq(final BetterBlockPos to) { + double dx = (double) this.x - to.x; + double dy = (double) this.y - to.y; + double dz = (double) this.z - to.z; + return dx * dx + dy * dy + dz * dz; + } + + public double distanceTo(final BetterBlockPos to) { + double dx = (double) this.x - to.x; + double dy = (double) this.y - to.y; + double dz = (double) this.z - to.z; + return Math.sqrt(dx * dx + dy * dy + dz * dz); + } + @Override @Nonnull public String toString() { diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 1be445b2c..59ff847d7 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -19,10 +19,7 @@ import baritone.Baritone; import baritone.api.behavior.IElytraBehavior; -import baritone.api.event.events.BlockChangeEvent; -import baritone.api.event.events.ChunkEvent; -import baritone.api.event.events.PacketEvent; -import baritone.api.event.events.TickEvent; +import baritone.api.event.events.*; import baritone.api.utils.*; import baritone.behavior.elytra.NetherPathfinderContext; import baritone.behavior.elytra.UnpackedSegment; @@ -41,6 +38,8 @@ import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Future; +import java.util.function.IntFunction; import java.util.function.UnaryOperator; public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { @@ -63,13 +62,16 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private int remainingSetBackTicks; private BlockStateInterface bsi; + private Future solver; + private boolean solveNextTick; + public ElytraBehavior(Baritone baritone) { super(baritone); this.context = new NetherPathfinderContext(NETHER_SEED); this.clearLines = new ArrayList<>(); this.blockedLines = new ArrayList<>(); this.visiblePath = Collections.emptyList(); - this.pathManager = new PathManager(); + this.pathManager = this.new PathManager(); } private final class PathManager { @@ -90,11 +92,11 @@ public PathManager() { public void tick() { // Recalculate closest path node + this.updatePlayerNear(); final int prevMaxNear = this.maxPlayerNear; - this.playerNear = this.calculateNear(this.playerNear); this.maxPlayerNear = Math.max(this.maxPlayerNear, this.playerNear); - if (this.maxPlayerNear == prevMaxNear && ctx.player().isElytraFlying()) { + if (this.maxPlayerNear == prevMaxNear) { this.ticksNearUnchanged++; } else { this.ticksNearUnchanged = 0; @@ -247,7 +249,7 @@ private void pathfindAroundObstacles() { // obstacle. where do we return to pathing? // find the next valid segment final BetterBlockPos blockage = this.path.get(i); - final double distance = Math.sqrt(ctx.playerFeet().distanceSq(this.path.get(rangeEndExcl - 1))); + final double distance = ctx.playerFeet().distanceTo(this.path.get(rangeEndExcl - 1)); final long start = System.nanoTime(); this.pathRecalcSegment(rangeEndExcl - 1) @@ -276,7 +278,8 @@ private void attemptNextSegment() { } } - private int calculateNear(int index) { + public void updatePlayerNear() { + int index = this.playerNear; final BetterBlockPos pos = ctx.playerFeet(); for (int i = index; i >= Math.max(index - 1000, 0); i -= 10) { if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { @@ -298,7 +301,7 @@ private int calculateNear(int index) { index = i; // intentional: this changes the bound of the loop } } - return index; + this.playerNear = index; } private void removeBacktracks() { @@ -367,6 +370,18 @@ public void onTick(TickEvent event) { return; } + // Fetch the previous solution, regardless of if it's going to be used + Solution solution = null; + if (this.solver != null) { + try { + solution = this.solver.get(); + } catch (Exception ignored) { + // it doesn't matter if get() fails since the solution can just be recalculated synchronously + } finally { + this.solver = null; + } + } + // Certified mojang employee incident if (this.remainingFireworkTicks > 0) { this.remainingFireworkTicks--; @@ -379,7 +394,7 @@ public void onTick(TickEvent event) { this.blockedLines.clear(); final List path = this.pathManager.getPath(); - if (path.isEmpty()) { + if (path.isEmpty() || !ctx.player().isElytraFlying()) { return; } @@ -392,10 +407,6 @@ public void onTick(TickEvent event) { Math.min(playerNear + 100, path.size()) ); - if (!ctx.player().isElytraFlying()) { - return; - } - baritone.getInputOverrideHandler().clearAllKeys(); if (ctx.player().collidedHorizontally) { @@ -405,10 +416,14 @@ public void onTick(TickEvent event) { logDirect("vbonk"); } - final Vec3d start = ctx.playerFeetAsVec(); - final boolean currentlyBoosted = this.isFireworkActive(); + final SolverContext solverContext = this.new SolverContext(); + this.solveNextTick = true; + + // If there's no previously calculated solution to use, or the context used at the end of last tick doesn't match this tick + if (solution == null || !solution.context.equals(solverContext)) { + solution = this.solveAngles(solverContext); + } - final Solution solution = this.solveAngles(path, playerNear, start, currentlyBoosted); if (solution == null) { logDirect("no solution"); return; @@ -419,12 +434,43 @@ public void onTick(TickEvent event) { if (!solution.solvedPitch) { logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); return; + } else { + this.aimPos = solution.goingTo; } - this.tickUseFireworks(start, currentlyBoosted, solution.goingTo, solution.forceUseFirework); + this.tickUseFireworks( + solution.context.start, + solution.context.currentlyBoosted, + solution.goingTo, + solution.forceUseFirework + ); } - private Solution solveAngles(final List path, final int playerNear, final Vec3d start, final boolean currentlyBoosted) { + @Override + public void onPostTick(TickEvent event) { + if (event.getType() == TickEvent.Type.IN && this.solveNextTick) { + // We're at the end of the tick, the player's position likely updated and the closest path node could've + // changed. Updating it now will avoid unnecessary recalculation on the main thread. + this.pathManager.updatePlayerNear(); + + final SolverContext context = this.new SolverContext(); + this.solver = CompletableFuture.supplyAsync(() -> this.solveAngles(context)); + this.solveNextTick = false; + } + } + + private Solution solveAngles(final SolverContext context) { + final List path = context.path; + final int playerNear = context.playerNear; + final Vec3d start = context.start; + final boolean currentlyBoosted = context.currentlyBoosted; + + final IntFunction pathAt = (i) -> new Vec3d( + path.get(i).x, + path.get(i).y, + path.get(i).z + ); + final boolean isInLava = ctx.player().isInLava(); Solution solution = null; @@ -440,10 +486,9 @@ private Solution solveAngles(final List path, final int playerNe for (float interp : interps) { Vec3d dest; if (interp == 1 || i == minStep) { - dest = this.pathManager.pathAt(i); + dest = pathAt.apply(i); } else { - dest = this.pathManager.pathAt(i).scale(interp) - .add(this.pathManager.pathAt(i - 1).scale(1.0d - interp)); + dest = pathAt.apply(i).scale(interp).add(pathAt.apply(i - 1).scale(1.0d - interp)); } dest = dest.add(0, dy, 0); @@ -452,14 +497,14 @@ private Solution solveAngles(final List path, final int playerNe continue; } if (start.distanceTo(dest) < 40) { - if (!clearView(dest, this.pathManager.pathAt(i + lookahead).add(0, dy, 0), false) - || !clearView(dest, this.pathManager.pathAt(i + lookahead), false)) { + if (!clearView(dest, pathAt.apply(i + lookahead).add(0, dy, 0), false) + || !clearView(dest, pathAt.apply(i + lookahead), false)) { // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position continue; } } else { // but if it's far away, allow gaining altitude if we could lose it again by the time we get there - if (!clearView(dest, this.pathManager.pathAt(i), false)) { + if (!clearView(dest, pathAt.apply(i), false)) { continue; } } @@ -474,15 +519,18 @@ private Solution solveAngles(final List path, final int playerNe final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, currentlyBoosted, isInLava); if (pitch.first() == null) { - solution = new Solution(new Rotation(yaw, ctx.playerRotations().getPitch()), null, false, false); + solution = new Solution(context, new Rotation(yaw, ctx.playerRotations().getPitch()), null, false, false); continue; } - final BetterBlockPos goingTo = new BetterBlockPos(dest.x, dest.y, dest.z); - this.aimPos = goingTo; - // A solution was found with yaw AND pitch, so just immediately return it. - return new Solution(new Rotation(yaw, pitch.first()), goingTo, true, pitch.second()); + return new Solution( + context, + new Rotation(yaw, pitch.first()), + new BetterBlockPos(dest.x, dest.y, dest.z), + true, + pitch.second() + ); } } } @@ -523,14 +571,47 @@ private void tickUseFireworks(final Vec3d start, final boolean firework, final B } } + private final class SolverContext { + + public final List path; + public final int playerNear; + public final Vec3d start; + public final boolean currentlyBoosted; + + public SolverContext() { + this.path = ElytraBehavior.this.pathManager.getPath(); + this.playerNear = ElytraBehavior.this.pathManager.getNear(); + this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); + this.currentlyBoosted = ElytraBehavior.this.isFireworkActive(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || o.getClass() != SolverContext.class) { + return false; + } + + SolverContext other = (SolverContext) o; + return this.path == other.path // Contents aren't modified, just compare by reference + && this.playerNear == other.playerNear + && Objects.equals(this.start, other.start) + && this.currentlyBoosted == other.currentlyBoosted; + } + } + private static final class Solution { + public final SolverContext context; public final Rotation rotation; public final BetterBlockPos goingTo; public final boolean solvedPitch; public final boolean forceUseFirework; - public Solution(Rotation rotation, BetterBlockPos goingTo, boolean solvedPitch, boolean forceUseFirework) { + public Solution(SolverContext context, Rotation rotation, BetterBlockPos goingTo, boolean solvedPitch, boolean forceUseFirework) { + this.context = context; this.rotation = rotation; this.goingTo = goingTo; this.solvedPitch = solvedPitch; @@ -605,10 +686,10 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { } if (clear) { - clearLines.add(new Pair<>(start, dest)); + this.clearLines.add(new Pair<>(start, dest)); return true; } else { - blockedLines.add(new Pair<>(start, dest)); + this.blockedLines.add(new Pair<>(start, dest)); return false; } } @@ -672,15 +753,6 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, bool return bestPitch; } - public boolean passable(int x, int y, int z, boolean ignoreLava) { - return passable(this.bsi.get0(x, y, z), ignoreLava); - } - - public static boolean passable(IBlockState state, boolean ignoreLava) { - Material mat = state.getMaterial(); - return mat == Material.AIR || (ignoreLava && mat == Material.LAVA); - } - private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, boolean firework) { double motionX = motion.x; double motionY = motion.y; @@ -731,5 +803,14 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, return new Vec3d(motionX, motionY, motionZ); } + + private boolean passable(int x, int y, int z, boolean ignoreLava) { + return passable(this.bsi.get0(x, y, z), ignoreLava); + } + + private static boolean passable(IBlockState state, boolean ignoreLava) { + Material mat = state.getMaterial(); + return mat == Material.AIR || (ignoreLava && mat == Material.LAVA); + } } diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index f269cd33b..8dcd87274 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -19,6 +19,7 @@ import dev.babbaj.pathfinder.NetherPathfinder; import dev.babbaj.pathfinder.PathSegment; +import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.world.chunk.BlockStateContainer; @@ -30,8 +31,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import static baritone.behavior.ElytraBehavior.passable; - /** * @author Brady */ @@ -129,7 +128,7 @@ private static boolean[] pack(Chunk chunk) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { IBlockState state = bsc.get(x, y1, z); - if (!passable(state, false)) { + if (state.getMaterial() != Material.AIR) { packed[x | (z << 4) | (y << 8)] = true; } } From 7a12ef530c3a56dce284b996e054d88df75f9af5 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 20:11:34 -0500 Subject: [PATCH 686/935] Cancel solver on behavior cancel --- src/main/java/baritone/behavior/ElytraBehavior.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 59ff847d7..77c426c69 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -357,6 +357,8 @@ public void cancel() { this.aimPos = null; this.remainingFireworkTicks = 0; this.remainingSetBackTicks = 0; + this.solver.cancel(true); + this.solver = null; } @Override From fa158c6e67d7ccfe43a93e3721e969e75c3598a6 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 20:18:56 -0500 Subject: [PATCH 687/935] Remove unnecessary conversions to Vec3d --- src/main/java/baritone/behavior/ElytraBehavior.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 77c426c69..7bcedea59 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -112,7 +112,7 @@ public void pathToDestination(BlockPos destination) { final long start = System.nanoTime(); this.path0(ctx.playerFeet(), destination, UnaryOperator.identity()) .thenRun(() -> { - final double distance = this.pathAt(0).distanceTo(this.pathAt(this.path.size() - 1)); + final double distance = this.path.get(0).distanceTo(this.path.get(this.path.size() - 1)); if (this.completePath) { logDirect(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); } else { @@ -157,7 +157,7 @@ public void pathNextSegment(final int afterIncl) { this.path0(this.path.get(afterIncl), this.destination, segment -> segment.prepend(before.stream())) .thenRun(() -> { final int recompute = this.path.size() - before.size() - 1; - final double distance = this.pathAt(0).distanceTo(this.pathAt(recompute)); + final double distance = this.path.get(0).distanceTo(this.path.get(recompute)); if (this.completePath) { logDirect(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); From 141a48a15e56446f91b7ff2c9410c2b5b005cc52 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 20:30:10 -0500 Subject: [PATCH 688/935] Some refactoring, more precise `goingTo` --- .../baritone/behavior/ElytraBehavior.java | 57 +++++++++---------- .../elytra/NetherPathfinderContext.java | 13 +++++ 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 7bcedea59..328ee6818 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -437,13 +437,13 @@ public void onTick(TickEvent event) { logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); return; } else { - this.aimPos = solution.goingTo; + this.aimPos = new BetterBlockPos(solution.goingTo.x, solution.goingTo.y, solution.goingTo.z); } this.tickUseFireworks( solution.context.start, - solution.context.currentlyBoosted, solution.goingTo, + solution.context.isBoosted, solution.forceUseFirework ); } @@ -465,7 +465,7 @@ private Solution solveAngles(final SolverContext context) { final List path = context.path; final int playerNear = context.playerNear; final Vec3d start = context.start; - final boolean currentlyBoosted = context.currentlyBoosted; + final boolean isBoosted = context.isBoosted; final IntFunction pathAt = (i) -> new Vec3d( path.get(i).x, @@ -477,9 +477,9 @@ private Solution solveAngles(final SolverContext context) { Solution solution = null; for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) - int[] heights = currentlyBoosted ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost + int[] heights = isBoosted ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost float[] interps = new float[] {1.0f, 0.75f, 0.5f, 0.25f}; - int steps = relaxation < 2 ? currentlyBoosted ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; + int steps = relaxation < 2 ? isBoosted ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); int minStep = playerNear; @@ -499,14 +499,14 @@ private Solution solveAngles(final SolverContext context) { continue; } if (start.distanceTo(dest) < 40) { - if (!clearView(dest, pathAt.apply(i + lookahead).add(0, dy, 0), false) - || !clearView(dest, pathAt.apply(i + lookahead), false)) { + if (!this.clearView(dest, pathAt.apply(i + lookahead).add(0, dy, 0), false) + || !this.clearView(dest, pathAt.apply(i + lookahead), false)) { // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position continue; } } else { // but if it's far away, allow gaining altitude if we could lose it again by the time we get there - if (!clearView(dest, pathAt.apply(i), false)) { + if (!this.clearView(dest, pathAt.apply(i), false)) { continue; } } @@ -516,23 +516,18 @@ private Solution solveAngles(final SolverContext context) { final Double grow = relaxation == 2 ? null : relaxation == 0 ? 1.0d : 0.25d; - if (isClear(start, dest, grow, isInLava)) { + if (this.isClear(start, dest, grow, isInLava)) { + // Yaw is trivial, just calculate the rotation required to face the destination final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); - final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, currentlyBoosted, isInLava); + final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, isBoosted, isInLava); if (pitch.first() == null) { solution = new Solution(context, new Rotation(yaw, ctx.playerRotations().getPitch()), null, false, false); continue; } // A solution was found with yaw AND pitch, so just immediately return it. - return new Solution( - context, - new Rotation(yaw, pitch.first()), - new BetterBlockPos(dest.x, dest.y, dest.z), - true, - pitch.second() - ); + return new Solution(context, new Rotation(yaw, pitch.first()), dest, true, pitch.second()); } } } @@ -541,7 +536,7 @@ private Solution solveAngles(final SolverContext context) { return solution; } - private void tickUseFireworks(final Vec3d start, final boolean firework, final BetterBlockPos goingTo, final boolean forceUseFirework) { + private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final boolean isBoosted, final boolean forceUseFirework) { if (this.remainingSetBackTicks > 0) { logDebug("waiting for elytraFireworkSetbackUseDelay: " + this.remainingSetBackTicks); return; @@ -555,7 +550,7 @@ private void tickUseFireworks(final Vec3d start, final boolean firework, final B ).lengthSquared(); final double elytraFireworkSpeed = Baritone.settings().elytraFireworkSpeed.value; - if (this.remainingFireworkTicks <= 0 && (forceUseFirework || (!firework + if (this.remainingFireworkTicks <= 0 && (forceUseFirework || (!isBoosted && useOnDescend && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! && currentSpeed < elytraFireworkSpeed * elytraFireworkSpeed)) @@ -578,13 +573,13 @@ private final class SolverContext { public final List path; public final int playerNear; public final Vec3d start; - public final boolean currentlyBoosted; + public final boolean isBoosted; public SolverContext() { - this.path = ElytraBehavior.this.pathManager.getPath(); - this.playerNear = ElytraBehavior.this.pathManager.getNear(); - this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); - this.currentlyBoosted = ElytraBehavior.this.isFireworkActive(); + this.path = ElytraBehavior.this.pathManager.getPath(); + this.playerNear = ElytraBehavior.this.pathManager.getNear(); + this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); + this.isBoosted = ElytraBehavior.this.isFireworkActive(); } @Override @@ -600,7 +595,7 @@ public boolean equals(Object o) { return this.path == other.path // Contents aren't modified, just compare by reference && this.playerNear == other.playerNear && Objects.equals(this.start, other.start) - && this.currentlyBoosted == other.currentlyBoosted; + && this.isBoosted == other.isBoosted; } } @@ -608,11 +603,11 @@ private static final class Solution { public final SolverContext context; public final Rotation rotation; - public final BetterBlockPos goingTo; + public final Vec3d goingTo; public final boolean solvedPitch; public final boolean forceUseFirework; - public Solution(SolverContext context, Rotation rotation, BetterBlockPos goingTo, boolean solvedPitch, boolean forceUseFirework) { + public Solution(SolverContext context, Rotation rotation, Vec3d goingTo, boolean solvedPitch, boolean forceUseFirework) { this.context = context; this.rotation = rotation; this.goingTo = goingTo; @@ -642,7 +637,7 @@ private boolean isFireworkActive() { } private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAmount, boolean ignoreLava) { - if (!clearView(start, dest, ignoreLava)) { + if (!this.clearView(start, dest, ignoreLava)) { return false; } if (growAmount == null) { @@ -682,7 +677,7 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { final boolean clear; if (!ignoreLava) { // if start == dest then the cpp raytracer dies - clear = start.equals(dest) || this.context.raytrace(start.x, start.y, start.z, dest.x, dest.y, dest.z); + clear = start.equals(dest) || this.context.raytrace(start, dest); } else { clear = ctx.world().rayTraceBlocks(start, dest, false, false, false) == null; } @@ -696,8 +691,8 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { } } - private Pair solvePitch(Vec3d goalDirection, int steps, int relaxation, boolean currentlyBoosted, boolean ignoreLava) { - final Float pitch = this.solvePitch(goalDirection, steps, relaxation == 2, currentlyBoosted, ignoreLava); + private Pair solvePitch(Vec3d goalDirection, int steps, int relaxation, boolean isBoosted, boolean ignoreLava) { + final Float pitch = this.solvePitch(goalDirection, steps, relaxation == 2, isBoosted, ignoreLava); if (pitch != null) { return new Pair<>(pitch, false); } diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 8dcd87274..da3753bf3 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -22,6 +22,7 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.chunk.BlockStateContainer; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; @@ -78,6 +79,18 @@ public boolean raytrace(final double startX, final double startY, final double s return NetherPathfinder.isVisible(this.context, true, startX, startY, startZ, endX, endY, endZ); } + /** + * Performs a raytrace from the given start position to the given end position, returning {@code true} if there is + * visibility between the two points. + * + * @param start The starting point + * @param end The ending point + * @return {@code true} if there is visibility between the points + */ + public boolean raytrace(final Vec3d start, final Vec3d end) { + return NetherPathfinder.isVisible(this.context, true, start.x, start.y, start.z, end.x, end.y, end.z); + } + public boolean raytrace(final int count, final double[] src, final double[] dst, final int visibility) { switch (visibility) { case Visibility.ALL: From e76f79214e4fb19b1cbbc3331ae92d31b6cd3b14 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 21:07:21 -0500 Subject: [PATCH 689/935] Replace `pathAt` with `NetherPath` --- .../baritone/behavior/ElytraBehavior.java | 50 ++++++---------- .../baritone/behavior/elytra/NetherPath.java | 58 +++++++++++++++++++ .../behavior/elytra/UnpackedSegment.java | 5 +- 3 files changed, 79 insertions(+), 34 deletions(-) create mode 100644 src/main/java/baritone/behavior/elytra/NetherPath.java diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 328ee6818..4494a54aa 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -22,6 +22,7 @@ import baritone.api.event.events.*; import baritone.api.utils.*; import baritone.behavior.elytra.NetherPathfinderContext; +import baritone.behavior.elytra.NetherPath; import baritone.behavior.elytra.UnpackedSegment; import baritone.utils.BlockStateInterface; import baritone.utils.accessor.IEntityFireworkRocket; @@ -39,7 +40,6 @@ import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; -import java.util.function.IntFunction; import java.util.function.UnaryOperator; public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { @@ -77,7 +77,7 @@ public ElytraBehavior(Baritone baritone) { private final class PathManager { private BlockPos destination; - private List path; + private NetherPath path; private boolean completePath; private boolean recalculating; @@ -173,17 +173,9 @@ public void pathNextSegment(final int afterIncl) { }); } - private Vec3d pathAt(int i) { - return new Vec3d( - this.path.get(i).x, - this.path.get(i).y, - this.path.get(i).z - ); - } - public void clear() { this.destination = null; - this.path = Collections.emptyList(); + this.path = NetherPath.emptyPath(); this.completePath = true; this.recalculating = false; this.playerNear = 0; @@ -200,7 +192,7 @@ private void setPath(final UnpackedSegment segment) { this.maxPlayerNear = 0; } - public List getPath() { + public NetherPath getPath() { return this.path; } @@ -245,7 +237,7 @@ private void pathfindAroundObstacles() { } for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { - if (!clearView(pathAt(i), pathAt(i + 1), false)) { + if (!ElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { // obstacle. where do we return to pathing? // find the next valid segment final BetterBlockPos blockage = this.path.get(i); @@ -392,8 +384,10 @@ public void onTick(TickEvent event) { this.remainingSetBackTicks--; } + // Reset rendered elements this.clearLines.clear(); this.blockedLines.clear(); + this.aimPos = null; final List path = this.pathManager.getPath(); if (path.isEmpty() || !ctx.player().isElytraFlying()) { @@ -462,17 +456,11 @@ public void onPostTick(TickEvent event) { } private Solution solveAngles(final SolverContext context) { - final List path = context.path; + final NetherPath path = context.path; final int playerNear = context.playerNear; final Vec3d start = context.start; final boolean isBoosted = context.isBoosted; - final IntFunction pathAt = (i) -> new Vec3d( - path.get(i).x, - path.get(i).y, - path.get(i).z - ); - final boolean isInLava = ctx.player().isInLava(); Solution solution = null; @@ -488,9 +476,9 @@ private Solution solveAngles(final SolverContext context) { for (float interp : interps) { Vec3d dest; if (interp == 1 || i == minStep) { - dest = pathAt.apply(i); + dest = path.getVec(i); } else { - dest = pathAt.apply(i).scale(interp).add(pathAt.apply(i - 1).scale(1.0d - interp)); + dest = path.getVec(i).scale(interp).add(path.getVec(i - 1).scale(1.0d - interp)); } dest = dest.add(0, dy, 0); @@ -499,24 +487,24 @@ private Solution solveAngles(final SolverContext context) { continue; } if (start.distanceTo(dest) < 40) { - if (!this.clearView(dest, pathAt.apply(i + lookahead).add(0, dy, 0), false) - || !this.clearView(dest, pathAt.apply(i + lookahead), false)) { + if (!this.clearView(dest, path.getVec(i + lookahead).add(0, dy, 0), false) + || !this.clearView(dest, path.getVec(i + lookahead), false)) { // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position continue; } } else { // but if it's far away, allow gaining altitude if we could lose it again by the time we get there - if (!this.clearView(dest, pathAt.apply(i), false)) { + if (!this.clearView(dest, path.getVec(i), false)) { continue; } } } // 1.0 -> 0.25 -> none - final Double grow = relaxation == 2 ? null + final Double growth = relaxation == 2 ? null : relaxation == 0 ? 1.0d : 0.25d; - if (this.isClear(start, dest, grow, isInLava)) { + if (this.isHitboxClear(start, dest, growth, isInLava)) { // Yaw is trivial, just calculate the rotation required to face the destination final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); @@ -570,7 +558,7 @@ private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final bool private final class SolverContext { - public final List path; + public final NetherPath path; public final int playerNear; public final Vec3d start; public final boolean isBoosted; @@ -636,7 +624,7 @@ private boolean isFireworkActive() { .anyMatch(x -> Objects.equals(((IEntityFireworkRocket) x).getBoostedEntity(), ctx.player())); } - private boolean isClear(final Vec3d start, final Vec3d dest, final Double growAmount, boolean ignoreLava) { + private boolean isHitboxClear(final Vec3d start, final Vec3d dest, final Double growAmount, boolean ignoreLava) { if (!this.clearView(start, dest, ignoreLava)) { return false; } @@ -713,7 +701,7 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, bool // yaw is easy so we only care about pitch goalDirection = goalDirection.normalize(); - Rotation good = RotationUtils.calcRotationFromVec3d(new Vec3d(0, 0, 0), goalDirection, ctx.playerRotations()); // lazy lol + Rotation good = RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, goalDirection, ctx.playerRotations()); // lazy lol Float bestPitch = null; double bestDot = Double.NEGATIVE_INFINITY; @@ -723,7 +711,7 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, bool outer: for (float pitch = minPitch; pitch <= maxPitch; pitch++) { Vec3d stepped = motion; - Vec3d totalMotion = new Vec3d(0, 0, 0); + Vec3d totalMotion = Vec3d.ZERO; for (int i = 0; i < steps; i++) { stepped = step(stepped, pitch, good.getYaw(), firework); Vec3d actualPositionPrevTick = ctx.playerFeetAsVec().add(totalMotion); diff --git a/src/main/java/baritone/behavior/elytra/NetherPath.java b/src/main/java/baritone/behavior/elytra/NetherPath.java new file mode 100644 index 000000000..e90075b87 --- /dev/null +++ b/src/main/java/baritone/behavior/elytra/NetherPath.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.behavior.elytra; + +import baritone.api.utils.BetterBlockPos; +import net.minecraft.util.math.Vec3d; + +import java.util.AbstractList; +import java.util.Collections; +import java.util.List; + +/** + * @author Brady + */ +public final class NetherPath extends AbstractList { + + private static final NetherPath EMPTY_PATH = new NetherPath(Collections.emptyList()); + + private final List backing; + + NetherPath(List backing) { + this.backing = backing; + } + + @Override + public BetterBlockPos get(int index) { + return this.backing.get(index); + } + + @Override + public int size() { + return this.backing.size(); + } + + public Vec3d getVec(int index) { + final BetterBlockPos pos = this.get(index); + return new Vec3d(pos.x, pos.y, pos.z); + } + + public static NetherPath emptyPath() { + return EMPTY_PATH; + } +} diff --git a/src/main/java/baritone/behavior/elytra/UnpackedSegment.java b/src/main/java/baritone/behavior/elytra/UnpackedSegment.java index 7798113da..8771aaabd 100644 --- a/src/main/java/baritone/behavior/elytra/UnpackedSegment.java +++ b/src/main/java/baritone/behavior/elytra/UnpackedSegment.java @@ -22,7 +22,6 @@ import net.minecraft.util.math.BlockPos; import java.util.Arrays; -import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -48,8 +47,8 @@ public UnpackedSegment prepend(Stream other) { return new UnpackedSegment(Stream.concat(other, this.path), this.finished); } - public List collect() { - return this.path.collect(Collectors.toList()); + public NetherPath collect() { + return new NetherPath(this.path.collect(Collectors.toList())); } public boolean isFinished() { From bd7a57f7aabbb1eb599044b47e720dc3ded2e349 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 21:27:54 -0500 Subject: [PATCH 690/935] We do a little trolling --- .../baritone/behavior/ElytraBehavior.java | 19 +--------------- .../behavior/elytra/UnpackedSegment.java | 22 ++++++++++++++++++- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 4494a54aa..aab8be41d 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -185,7 +185,6 @@ public void clear() { private void setPath(final UnpackedSegment segment) { this.path = segment.collect(); - this.removeBacktracks(); this.completePath = segment.isFinished(); this.playerNear = 0; this.ticksNearUnchanged = 0; @@ -295,22 +294,6 @@ public void updatePlayerNear() { } this.playerNear = index; } - - private void removeBacktracks() { - Map positionFirstSeen = new HashMap<>(); - for (int i = 0; i < this.path.size(); i++) { - BetterBlockPos pos = this.path.get(i); - if (positionFirstSeen.containsKey(pos)) { - int j = positionFirstSeen.get(pos); - while (i > j) { - this.path.remove(i); - i--; - } - } else { - positionFirstSeen.put(pos, i); - } - } - } } @Override @@ -466,7 +449,7 @@ private Solution solveAngles(final SolverContext context) { for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) int[] heights = isBoosted ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost - float[] interps = new float[] {1.0f, 0.75f, 0.5f, 0.25f}; + float[] interps = new float[] {1.0f}; int steps = relaxation < 2 ? isBoosted ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); diff --git a/src/main/java/baritone/behavior/elytra/UnpackedSegment.java b/src/main/java/baritone/behavior/elytra/UnpackedSegment.java index 8771aaabd..22fa4f82d 100644 --- a/src/main/java/baritone/behavior/elytra/UnpackedSegment.java +++ b/src/main/java/baritone/behavior/elytra/UnpackedSegment.java @@ -22,6 +22,9 @@ import net.minecraft.util.math.BlockPos; import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -48,7 +51,24 @@ public UnpackedSegment prepend(Stream other) { } public NetherPath collect() { - return new NetherPath(this.path.collect(Collectors.toList())); + final List path = this.path.collect(Collectors.toList()); + + // Remove backtracks + final Map positionFirstSeen = new HashMap<>(); + for (int i = 0; i < path.size(); i++) { + BetterBlockPos pos = path.get(i); + if (positionFirstSeen.containsKey(pos)) { + int j = positionFirstSeen.get(pos); + while (i > j) { + path.remove(i); + i--; + } + } else { + positionFirstSeen.put(pos, i); + } + } + + return new NetherPath(path); } public boolean isFinished() { From 2eb912835a2e98c452726a689c07901359a67381 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 21:28:30 -0500 Subject: [PATCH 691/935] Restore interp values --- src/main/java/baritone/behavior/ElytraBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index aab8be41d..15d4f5f09 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -449,7 +449,7 @@ private Solution solveAngles(final SolverContext context) { for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) int[] heights = isBoosted ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost - float[] interps = new float[] {1.0f}; + float[] interps = new float[] {1.0f, 0.75f, 0.5f, 0.25f}; int steps = relaxation < 2 ? isBoosted ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); From 699e8bdea6b545842f234e3360b30db76c223b7d Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 22:36:27 -0500 Subject: [PATCH 692/935] troll concurrency fix for rn --- src/main/java/baritone/behavior/ElytraBehavior.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 15d4f5f09..6f585d30c 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -39,6 +39,7 @@ import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Future; import java.util.function.UnaryOperator; @@ -68,8 +69,8 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H public ElytraBehavior(Baritone baritone) { super(baritone); this.context = new NetherPathfinderContext(NETHER_SEED); - this.clearLines = new ArrayList<>(); - this.blockedLines = new ArrayList<>(); + this.clearLines = new CopyOnWriteArrayList<>(); + this.blockedLines = new CopyOnWriteArrayList<>(); this.visiblePath = Collections.emptyList(); this.pathManager = this.new PathManager(); } From defa6399e2bcf0f722dfc5890779ba1e9a100bf6 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 23:01:07 -0500 Subject: [PATCH 693/935] Tweak hitbox constraints --- src/main/java/baritone/behavior/ElytraBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 6f585d30c..eb6e2c4b0 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -486,7 +486,7 @@ private Solution solveAngles(final SolverContext context) { // 1.0 -> 0.25 -> none final Double growth = relaxation == 2 ? null - : relaxation == 0 ? 1.0d : 0.25d; + : relaxation == 0 ? 0.5d : 0.25d; if (this.isHitboxClear(start, dest, growth, isInLava)) { // Yaw is trivial, just calculate the rotation required to face the destination From d42bfcfa53fc4d27f46cae301b35a7d6f97c0612 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 20 Jun 2023 23:15:45 -0500 Subject: [PATCH 694/935] Fix NPE --- src/main/java/baritone/behavior/ElytraBehavior.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index eb6e2c4b0..5f3e92838 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -333,8 +333,10 @@ public void cancel() { this.aimPos = null; this.remainingFireworkTicks = 0; this.remainingSetBackTicks = 0; - this.solver.cancel(true); - this.solver = null; + if (this.solver != null) { + this.solver.cancel(true); + this.solver = null; + } } @Override From cfd9a690528508d6427fc068e426dceeff01943d Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 21 Jun 2023 00:21:37 -0500 Subject: [PATCH 695/935] Revert how PathManager tick works --- src/main/java/baritone/behavior/ElytraBehavior.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 5f3e92838..14a15706e 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -97,7 +97,7 @@ public void tick() { final int prevMaxNear = this.maxPlayerNear; this.maxPlayerNear = Math.max(this.maxPlayerNear, this.playerNear); - if (this.maxPlayerNear == prevMaxNear) { + if (this.maxPlayerNear == prevMaxNear && ctx.player().isElytraFlying()) { this.ticksNearUnchanged++; } else { this.ticksNearUnchanged = 0; @@ -376,7 +376,7 @@ public void onTick(TickEvent event) { this.aimPos = null; final List path = this.pathManager.getPath(); - if (path.isEmpty() || !ctx.player().isElytraFlying()) { + if (path.isEmpty()) { return; } @@ -389,6 +389,9 @@ public void onTick(TickEvent event) { Math.min(playerNear + 100, path.size()) ); + if (!ctx.player().isElytraFlying()) { + return; + } baritone.getInputOverrideHandler().clearAllKeys(); if (ctx.player().collidedHorizontally) { From 877fd25608202596336af3ead8d19d2349c47394 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 21 Jun 2023 00:52:43 -0500 Subject: [PATCH 696/935] Distinguish unexpected exceptions in path calc --- .../exception/CommandUnhandledException.java | 7 +---- src/api/java/baritone/api/utils/Helper.java | 7 +++++ .../baritone/behavior/ElytraBehavior.java | 19 ++++++++++--- .../elytra/NetherPathfinderContext.java | 21 ++++++++------ .../elytra/PathCalculationException.java | 28 +++++++++++++++++++ 5 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 src/main/java/baritone/behavior/elytra/PathCalculationException.java diff --git a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java index 5dce59313..a1f826262 100644 --- a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -19,7 +19,6 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; -import net.minecraft.util.text.TextFormatting; import java.util.List; @@ -37,10 +36,6 @@ public CommandUnhandledException(Throwable cause) { @Override public void handle(ICommand command, List args) { - HELPER.logDirect("An unhandled exception occurred. " + - "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", - TextFormatting.RED); - - this.printStackTrace(); + HELPER.logUnhandledException(this); } } diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index b99074ae0..d604e0006 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -230,4 +230,11 @@ default void logDirect(String message, boolean logAsToast) { default void logDirect(String message) { logDirect(message, BaritoneAPI.getSettings().logAsToast.value); } + + default void logUnhandledException(final Throwable exception) { + HELPER.logDirect("An unhandled exception occurred. " + + "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", + TextFormatting.RED); + exception.printStackTrace(); + } } diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 14a15706e..193c95227 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -23,6 +23,7 @@ import baritone.api.utils.*; import baritone.behavior.elytra.NetherPathfinderContext; import baritone.behavior.elytra.NetherPath; +import baritone.behavior.elytra.PathCalculationException; import baritone.behavior.elytra.UnpackedSegment; import baritone.utils.BlockStateInterface; import baritone.utils.accessor.IEntityFireworkRocket; @@ -108,7 +109,7 @@ public void tick() { this.attemptNextSegment(); } - public void pathToDestination(BlockPos destination) { + public void pathToDestination(final BlockPos destination) { this.destination = destination; final long start = System.nanoTime(); this.path0(ctx.playerFeet(), destination, UnaryOperator.identity()) @@ -123,7 +124,11 @@ public void pathToDestination(BlockPos destination) { .whenComplete((result, ex) -> { this.recalculating = false; if (ex != null) { - logDirect("Failed to compute path to destination"); + if (ex instanceof PathCalculationException) { + logDirect("Failed to compute path to destination"); + } else { + logUnhandledException(ex); + } } }); } @@ -141,7 +146,11 @@ public CompletableFuture pathRecalcSegment(final int upToIncl) { .whenComplete((result, ex) -> { this.recalculating = false; if (ex != null) { - logDirect("Failed to recompute segment"); + if (ex instanceof PathCalculationException) { + logDirect("Failed to recompute segment"); + } else { + logUnhandledException(ex); + } } }); } @@ -168,8 +177,10 @@ public void pathNextSegment(final int afterIncl) { }) .whenComplete((result, ex) -> { this.recalculating = false; - if (ex != null) { + if (ex instanceof PathCalculationException) { logDirect("Failed to compute next segment"); + } else { + logUnhandledException(ex); } }); } diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index da3753bf3..d82372a99 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -52,14 +52,19 @@ public void queueForPacking(Chunk chunk) { } public CompletableFuture pathFindAsync(final BlockPos src, final BlockPos dst) { - return CompletableFuture.supplyAsync(() -> - NetherPathfinder.pathFind( - this.context, - src.getX(), src.getY(), src.getZ(), - dst.getX(), dst.getY(), dst.getZ(), - true, - 10000 - ), this.executor); + return CompletableFuture.supplyAsync(() -> { + final PathSegment segment = NetherPathfinder.pathFind( + this.context, + src.getX(), src.getY(), src.getZ(), + dst.getX(), dst.getY(), dst.getZ(), + true, + 10000 + ); + if (segment == null) { + throw new PathCalculationException("Path calculation failed"); + } + return segment; + }, this.executor); } /** diff --git a/src/main/java/baritone/behavior/elytra/PathCalculationException.java b/src/main/java/baritone/behavior/elytra/PathCalculationException.java new file mode 100644 index 000000000..73ce82faf --- /dev/null +++ b/src/main/java/baritone/behavior/elytra/PathCalculationException.java @@ -0,0 +1,28 @@ +/* + * 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.behavior.elytra; + +/** + * @author Brady + */ +public final class PathCalculationException extends RuntimeException { + + public PathCalculationException(final String message) { + super(message); + } +} From 367ce5fa177cb6806937f37983932076bcd38172 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Jun 2023 16:11:11 -0500 Subject: [PATCH 697/935] cherry pick Allow freeLook when using elytra --- .../api/event/events/RotationMoveEvent.java | 38 ++++++++- .../launch/mixins/MixinEntityLivingBase.java | 85 +++++++++++++++---- .../launch/mixins/MixinEntityPlayerSP.java | 16 ---- .../launch/mixins/MixinMinecraft.java | 15 ++++ .../java/baritone/behavior/LookBehavior.java | 1 + 5 files changed, 117 insertions(+), 38 deletions(-) diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index 109061c7e..a2ab17ed6 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -17,6 +17,7 @@ package baritone.api.event.events; +import baritone.api.utils.Rotation; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -31,14 +32,27 @@ public final class RotationMoveEvent { */ private final Type type; + private final Rotation original; + /** * The yaw rotation */ private float yaw; - public RotationMoveEvent(Type type, float yaw) { + /** + * The pitch rotation + */ + private float pitch; + + public RotationMoveEvent(Type type, float yaw, float pitch) { this.type = type; + this.original = new Rotation(yaw, pitch); this.yaw = yaw; + this.pitch = pitch; + } + + public Rotation getOriginal() { + return this.original; } /** @@ -46,21 +60,37 @@ public RotationMoveEvent(Type type, float yaw) { * * @param yaw Yaw rotation */ - public final void setYaw(float yaw) { + public void setYaw(float yaw) { this.yaw = yaw; } /** * @return The yaw rotation */ - public final float getYaw() { + public float getYaw() { return this.yaw; } + /** + * Set the pitch movement rotation + * + * @param pitch Pitch rotation + */ + public void setPitch(float pitch) { + this.pitch = pitch; + } + + /** + * @return The pitch rotation + */ + public float getPitch() { + return pitch; + } + /** * @return The type of the event */ - public final Type getType() { + public Type getType() { return this.type; } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index 0fd2436c9..f8544dd2f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -25,11 +25,14 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.Optional; + import static org.spongepowered.asm.lib.Opcodes.GETFIELD; /** @@ -42,11 +45,14 @@ public abstract class MixinEntityLivingBase extends Entity { /** * Event called to override the movement direction when jumping */ + @Unique private RotationMoveEvent jumpRotationEvent; - public MixinEntityLivingBase(World worldIn, RotationMoveEvent jumpRotationEvent) { + @Unique + private RotationMoveEvent elytraRotationEvent; + + public MixinEntityLivingBase(World worldIn) { super(worldIn); - this.jumpRotationEvent = jumpRotationEvent; } @Inject( @@ -54,14 +60,10 @@ public MixinEntityLivingBase(World worldIn, RotationMoveEvent jumpRotationEvent) at = @At("HEAD") ) private void preMoveRelative(CallbackInfo ci) { - // noinspection ConstantConditions - if (EntityPlayerSP.class.isInstance(this)) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); - if (baritone != null) { - this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.rotationYaw); - baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); - } - } + this.getBaritone().ifPresent(baritone -> { + this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.rotationYaw, this.rotationPitch); + baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); + }); } @Redirect( @@ -79,6 +81,38 @@ private float overrideYaw(EntityLivingBase self) { return self.rotationYaw; } + @Inject( + method = "travel", + at = @At( + value = "INVOKE", + target = "net/minecraft/entity/EntityLivingBase.getLookVec()Lnet/minecraft/util/math/Vec3d;" + ) + ) + private void onPreElytraMove(float strafe, float vertical, float forward, CallbackInfo ci) { + this.getBaritone().ifPresent(baritone -> { + this.elytraRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw, this.rotationPitch); + baritone.getGameEventHandler().onPlayerRotationMove(this.elytraRotationEvent); + this.rotationYaw = this.elytraRotationEvent.getYaw(); + this.rotationPitch = this.elytraRotationEvent.getPitch(); + }); + } + + @Inject( + method = "travel", + at = @At( + value = "INVOKE", + target = "net/minecraft/entity/EntityLivingBase.move(Lnet/minecraft/entity/MoverType;DDD)V", + shift = At.Shift.AFTER + ) + ) + private void onPostElytraMove(float strafe, float vertical, float forward, CallbackInfo ci) { + if (this.elytraRotationEvent != null) { + this.rotationYaw = this.elytraRotationEvent.getOriginal().getYaw(); + this.rotationPitch = this.elytraRotationEvent.getOriginal().getPitch(); + this.elytraRotationEvent = null; + } + } + @Redirect( method = "travel", at = @At( @@ -86,17 +120,32 @@ private float overrideYaw(EntityLivingBase self) { target = "net/minecraft/entity/EntityLivingBase.moveRelative(FFFF)V" ) ) - private void travel(EntityLivingBase self, float strafe, float up, float forward, float friction) { - // noinspection ConstantConditions - if (!EntityPlayerSP.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this) == null) { + private void onMoveRelative(EntityLivingBase self, float strafe, float up, float forward, float friction) { + Optional baritone = this.getBaritone(); + if (!baritone.isPresent()) { moveRelative(strafe, up, forward, friction); return; } - RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw); - BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); - float originalYaw = this.rotationYaw; - this.rotationYaw = motionUpdateRotationEvent.getYaw(); + + RotationMoveEvent event = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw, this.rotationPitch); + baritone.get().getGameEventHandler().onPlayerRotationMove(event); + + this.rotationYaw = event.getYaw(); + this.rotationPitch = event.getPitch(); + this.moveRelative(strafe, up, forward, friction); - this.rotationYaw = originalYaw; + + this.rotationYaw = event.getOriginal().getYaw(); + this.rotationPitch = event.getOriginal().getPitch(); + } + + @Unique + private Optional getBaritone() { + // noinspection ConstantConditions + if (EntityPlayerSP.class.isInstance(this)) { + return Optional.ofNullable(BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)); + } else { + return Optional.empty(); + } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index 4f6031d78..281ff96f5 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -72,22 +72,6 @@ private void onPreUpdate(CallbackInfo ci) { } } - @Inject( - method = "onUpdate", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/entity/EntityPlayerSP.onUpdateWalkingPlayer()V", - shift = At.Shift.BY, - by = 2 - ) - ) - private void onPostUpdate(CallbackInfo ci) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); - if (baritone != null) { - baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); - } - } - @Redirect( method = "onLivingUpdate", at = @At( diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 097c72905..edc1e3fcc 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -20,6 +20,7 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.BlockInteractEvent; +import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; @@ -84,7 +85,21 @@ private void runTick(CallbackInfo ci) { baritone.getGameEventHandler().onTick(tickProvider.apply(EventState.PRE, type)); } + } + @Inject( + method = "runTick", + at = @At( + value = "INVOKE", + target = "net/minecraft/client/multiplayer/WorldClient.updateEntities()V", + shift = At.Shift.AFTER + ) + ) + private void postUpdateEntities(CallbackInfo ci) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(this.player); + if (baritone != null) { + baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); + } } @Inject( diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 67aa45e39..d3c514ac2 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -149,6 +149,7 @@ public Optional getEffectiveRotation() { public void onPlayerRotationMove(RotationMoveEvent event) { if (this.target != null) { event.setYaw(this.target.rotation.getYaw()); + event.setPitch(this.target.rotation.getPitch()); } } From a5ca664a6a84014cc623eb74325c2f41026c88ee Mon Sep 17 00:00:00 2001 From: Mike <44955015+jdbool@users.noreply.github.com> Date: Wed, 21 Jun 2023 15:14:54 -0700 Subject: [PATCH 698/935] Add useMessageTag setting --- src/api/java/baritone/api/Settings.java | 8 +++++- src/api/java/baritone/api/utils/Helper.java | 28 ++++++++++++++++++--- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index c815d89d3..ae8cb07fd 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -21,6 +21,7 @@ import baritone.api.utils.SettingsUtil; import baritone.api.utils.TypeUtils; import baritone.api.utils.gui.BaritoneToast; +import net.minecraft.client.GuiMessageTag; import net.minecraft.client.Minecraft; import net.minecraft.core.Vec3i; import net.minecraft.network.chat.Component; @@ -772,6 +773,11 @@ public final class Settings { */ public final Setting shortBaritonePrefix = new Setting<>(false); + /** + * Use a modern message tag instead of a prefix when logging to chat + */ + public final Setting useMessageTag = new Setting<>(false); + /** * Echo commands to chat when they are run */ @@ -1141,7 +1147,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ - public final Setting> logger = new Setting<>(msg -> Minecraft.getInstance().gui.getChat().addMessage(msg)); + public final Setting> logger = new Setting<>((msg, tag) -> Minecraft.getInstance().gui.getChat().addMessage(msg, null, tag)); /** * The function that is called when Baritone will send a desktop notification. This function can be added to diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 7e3c44607..f0709c1cc 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -18,8 +18,10 @@ package baritone.api.utils; import baritone.api.BaritoneAPI; +import baritone.api.Settings; import baritone.api.utils.gui.BaritoneToast; import net.minecraft.ChatFormatting; +import net.minecraft.client.GuiMessageTag; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -48,6 +50,11 @@ public interface Helper { */ Minecraft mc = Minecraft.getInstance(); + /** + * The tag to assign to chat messages when {@link Settings#useMessageTag} is {@code true}. + */ + GuiMessageTag MESSAGE_TAG = new GuiMessageTag(0xFF55FF, null, Component.literal("Baritone message."), "Baritone"); + static Component getPrefix() { // Inner text component final Calendar now = Calendar.getInstance(); @@ -156,20 +163,33 @@ default void logDebug(String message) { * Send components to chat with the [Baritone] prefix * * @param logAsToast Whether to log as a toast notification + * @param useMessageTag Whether to use a message tag instead of a prefix * @param components The components to send */ - default void logDirect(boolean logAsToast, Component... components) { + default void logDirect(boolean logAsToast, boolean useMessageTag, Component... components) { MutableComponent component = Component.literal(""); - component.append(getPrefix()); - component.append(Component.literal(" ")); + if (!logAsToast && !useMessageTag) { + component.append(getPrefix()); + component.append(Component.literal(" ")); + } Arrays.asList(components).forEach(component::append); if (logAsToast) { logToast(getPrefix(), component); } else { - mc.execute(() -> BaritoneAPI.getSettings().logger.value.accept(component)); + mc.execute(() -> BaritoneAPI.getSettings().logger.value.accept(component, useMessageTag ? MESSAGE_TAG : null)); } } + /** + * Send components to chat with the [Baritone] prefix + * + * @param logAsToast Whether to log as a toast notification + * @param components The components to send + */ + default void logDirect(boolean logAsToast, Component... components) { + logDirect(logAsToast, BaritoneAPI.getSettings().useMessageTag.value, components); + } + /** * Send components to chat with the [Baritone] prefix * From 7e426bd2e8ad15ba571b9775fdf779fc09390318 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 21 Jun 2023 17:35:47 -0500 Subject: [PATCH 699/935] AimProcessor API --- .../baritone/api/behavior/ILookBehavior.java | 19 +- .../api/behavior/look/IAimProcessor.java | 44 ++++ .../java/baritone/behavior/LookBehavior.java | 188 +++++++++++++----- .../behavior/look/ForkableRandom.java | 85 ++++++++ 4 files changed, 283 insertions(+), 53 deletions(-) create mode 100644 src/api/java/baritone/api/behavior/look/IAimProcessor.java create mode 100644 src/main/java/baritone/behavior/look/ForkableRandom.java diff --git a/src/api/java/baritone/api/behavior/ILookBehavior.java b/src/api/java/baritone/api/behavior/ILookBehavior.java index 218e8b59a..eb7c992b8 100644 --- a/src/api/java/baritone/api/behavior/ILookBehavior.java +++ b/src/api/java/baritone/api/behavior/ILookBehavior.java @@ -17,6 +17,8 @@ package baritone.api.behavior; +import baritone.api.Settings; +import baritone.api.behavior.look.IAimProcessor; import baritone.api.utils.Rotation; /** @@ -27,10 +29,25 @@ public interface ILookBehavior extends IBehavior { /** * Updates the current {@link ILookBehavior} target to target the specified rotations on the next tick. If any sort - * of block interaction is required, {@code blockInteract} should be {@code true}. + * of block interaction is required, {@code blockInteract} should be {@code true}. It is not guaranteed that the + * rotations set by the caller will be the exact rotations expressed by the client (This is due to settings like + * {@link Settings#randomLooking}). If the rotations produced by this behavior are required, then the + * {@link #getAimProcessor() aim processor} should be used. * * @param rotation The target rotations * @param blockInteract Whether the target rotations are needed for a block interaction */ void updateTarget(Rotation rotation, boolean blockInteract); + + /** + * The aim processor instance for this {@link ILookBehavior}, which is responsible for applying additional, deterministic + * transformations to the target rotation set by {@link #updateTarget}. Whenever {@link IAimProcessor#nextRotation(Rotation)} + * is called on the instance returned by this method, the returned value always reflects what would happen in the + * upcoming tick. In other words, it is a pure function, and no internal state changes. If simulation of the + * rotation states beyond the next tick is required, then a {@link IAimProcessor#fork(int) fork} should be created. + * + * @return The aim processor + * @see IAimProcessor#fork(int) + */ + IAimProcessor getAimProcessor(); } diff --git a/src/api/java/baritone/api/behavior/look/IAimProcessor.java b/src/api/java/baritone/api/behavior/look/IAimProcessor.java new file mode 100644 index 000000000..72a4c681d --- /dev/null +++ b/src/api/java/baritone/api/behavior/look/IAimProcessor.java @@ -0,0 +1,44 @@ +/* + * 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.behavior.look; + +import baritone.api.utils.Rotation; + +/** + * @author Brady + */ +public interface IAimProcessor { + + /** + * Returns the actual rotation that will be used when the desired rotation is requested. This is not guaranteed to + * return the same value for a given input. + * + * @param desired The desired rotation to set + * @return The actual rotation + */ + Rotation nextRotation(Rotation desired); + + /** + * Returns a copy of this {@link IAimProcessor} which has its own internal state and updates on each call to + * {@link #nextRotation(Rotation)}. + * + * @param ticksAdvanced The number of ticks to advance ahead of time + * @return The forked processor + */ + IAimProcessor fork(int ticksAdvanced); +} diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index d3c514ac2..aeb694181 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -20,13 +20,11 @@ import baritone.Baritone; import baritone.api.Settings; import baritone.api.behavior.ILookBehavior; -import baritone.api.event.events.PacketEvent; -import baritone.api.event.events.PlayerUpdateEvent; -import baritone.api.event.events.RotationMoveEvent; -import baritone.api.event.events.WorldEvent; -import baritone.api.utils.Helper; +import baritone.api.behavior.look.IAimProcessor; +import baritone.api.event.events.*; import baritone.api.utils.IPlayerContext; import baritone.api.utils.Rotation; +import baritone.behavior.look.ForkableRandom; import net.minecraft.network.play.client.CPacketPlayer; import java.util.Optional; @@ -44,14 +42,17 @@ public final class LookBehavior extends Behavior implements ILookBehavior { private Rotation serverRotation; /** - * The last player rotation. Used when free looking + * The last player rotation. Used to restore the player's angle when using free look. * * @see Settings#freeLook */ private Rotation prevRotation; + private final AimProcessor processor; + public LookBehavior(Baritone baritone) { super(baritone); + this.processor = new AimProcessor(baritone.getPlayerContext()); } @Override @@ -59,6 +60,19 @@ public void updateTarget(Rotation rotation, boolean blockInteract) { this.target = new Target(rotation, blockInteract); } + @Override + public IAimProcessor getAimProcessor() { + return this.processor; + } + + @Override + public void onTick(TickEvent event) { + if (event.getType() == TickEvent.Type.IN) { + // Unlike forked AimProcessors, the root one needs to be manually updated each game tick + this.processor.tick(); + } + } + @Override public void onPlayerUpdate(PlayerUpdateEvent event) { if (this.target == null) { @@ -67,34 +81,16 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { switch (event.getState()) { case PRE: { if (this.target.mode == Target.Mode.NONE) { + // Just return for PRE, we still want to set target to null on POST return; } if (this.target.mode == Target.Mode.SERVER) { this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); } - final float oldYaw = ctx.playerRotations().getYaw(); - final float oldPitch = ctx.playerRotations().getPitch(); - - float desiredYaw = this.target.rotation.getYaw(); - float desiredPitch = this.target.rotation.getPitch(); - - // In other words, the target doesn't care about the pitch, so it used playerRotations().getPitch() - // and it's safe to adjust it to a normal level - if (desiredPitch == oldPitch) { - desiredPitch = nudgeToLevel(desiredPitch); - } - - desiredYaw += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; - desiredPitch += (Math.random() - 0.5) * Baritone.settings().randomLooking.value; - - ctx.player().rotationYaw = calculateMouseMove(oldYaw, desiredYaw); - ctx.player().rotationPitch = calculateMouseMove(oldPitch, desiredPitch); - - if (this.target.mode == Target.Mode.CLIENT) { - // The target can be invalidated now since it won't be needed for RotationMoveEvent - this.target = null; - } + final Rotation actual = this.processor.nextRotation(this.target.rotation); + ctx.player().rotationYaw = actual.getYaw(); + ctx.player().rotationPitch = actual.getPitch(); break; } case POST: { @@ -133,7 +129,8 @@ public void onWorldEvent(WorldEvent event) { public void pig() { if (this.target != null) { - ctx.player().rotationYaw = this.target.rotation.getYaw(); + final Rotation actual = this.processor.nextRotation(this.target.rotation); + ctx.player().rotationYaw = actual.getYaw(); } } @@ -148,37 +145,124 @@ public Optional getEffectiveRotation() { @Override public void onPlayerRotationMove(RotationMoveEvent event) { if (this.target != null) { - event.setYaw(this.target.rotation.getYaw()); - event.setPitch(this.target.rotation.getPitch()); + final Rotation actual = this.target.rotation; + event.setYaw(actual.getYaw()); + event.setPitch(actual.getPitch()); } } - /** - * Nudges the player's pitch to a regular level. (Between {@code -20} and {@code 10}, increments are by {@code 1}) - */ - private static float nudgeToLevel(float pitch) { - if (pitch < -20) { - return pitch + 1; - } else if (pitch > 10) { - return pitch - 1; + private static final class AimProcessor extends AbstractAimProcessor { + + public AimProcessor(final IPlayerContext ctx) { + super(ctx); } - return pitch; - } - private float calculateMouseMove(float current, float target) { - final float delta = target - current; - final int deltaPx = angleToMouse(delta); - return current + mouseToAngle(deltaPx); + @Override + protected Rotation getPrevRotation() { + // Implementation will use LookBehavior.serverRotation + return ctx.playerRotations(); + } } - private int angleToMouse(float angleDelta) { - final float minAngleChange = mouseToAngle(1); - return Math.round(angleDelta / minAngleChange); - } + private static abstract class AbstractAimProcessor implements IAimProcessor { + + protected final IPlayerContext ctx; + private final ForkableRandom rand; + private double randomYawOffset; + private double randomPitchOffset; + + public AbstractAimProcessor(IPlayerContext ctx) { + this.ctx = ctx; + this.rand = new ForkableRandom(); + } + + private AbstractAimProcessor(final AbstractAimProcessor source) { + this.ctx = source.ctx; + this.rand = source.rand.fork(); + this.randomYawOffset = source.randomYawOffset; + this.randomPitchOffset = source.randomPitchOffset; + } - private float mouseToAngle(int mouseDelta) { - final float f = ctx.minecraft().gameSettings.mouseSensitivity * 0.6f + 0.2f; - return mouseDelta * f * f * f * 8.0f * 0.15f; + public void tick() { + this.randomYawOffset = (this.rand.nextDouble() - 0.5) * Baritone.settings().randomLooking.value; + this.randomPitchOffset = (this.rand.nextDouble() - 0.5) * Baritone.settings().randomLooking.value; + } + + @Override + public Rotation nextRotation(final Rotation rotation) { + final Rotation prev = this.getPrevRotation(); + + float desiredYaw = rotation.getYaw(); + float desiredPitch = rotation.getPitch(); + + // In other words, the target doesn't care about the pitch, so it used playerRotations().getPitch() + // and it's safe to adjust it to a normal level + if (desiredPitch == prev.getPitch()) { + desiredPitch = nudgeToLevel(desiredPitch); + } + + desiredYaw += this.randomYawOffset; + desiredPitch += this.randomPitchOffset; + + return new Rotation( + this.calculateMouseMove(prev.getYaw(), desiredYaw), + this.calculateMouseMove(prev.getPitch(), desiredPitch) + ); + } + + @Override + public final IAimProcessor fork(final int ticksAdvanced) { + final AbstractAimProcessor fork = new AbstractAimProcessor(this) { + + private Rotation prev = AbstractAimProcessor.this.getPrevRotation(); + + @Override + public Rotation nextRotation(Rotation rotation) { + final Rotation actual = super.nextRotation(rotation); + this.tick(); + return (this.prev = actual); + } + + @Override + protected Rotation getPrevRotation() { + return this.prev; + } + }; + for (int i = 0; i < ticksAdvanced; i++) { + fork.tick(); + } + return fork; + } + + protected abstract Rotation getPrevRotation(); + + /** + * Nudges the player's pitch to a regular level. (Between {@code -20} and {@code 10}, increments are by {@code 1}) + */ + private float nudgeToLevel(float pitch) { + if (pitch < -20) { + return pitch + 1; + } else if (pitch > 10) { + return pitch - 1; + } + return pitch; + } + + private float calculateMouseMove(float current, float target) { + final float delta = target - current; + final int deltaPx = angleToMouse(delta); + return current + mouseToAngle(deltaPx); + } + + private int angleToMouse(float angleDelta) { + final float minAngleChange = mouseToAngle(1); + return Math.round(angleDelta / minAngleChange); + } + + private float mouseToAngle(int mouseDelta) { + final float f = ctx.minecraft().gameSettings.mouseSensitivity * 0.6f + 0.2f; + return mouseDelta * f * f * f * 8.0f * 0.15f; + } } private static class Target { diff --git a/src/main/java/baritone/behavior/look/ForkableRandom.java b/src/main/java/baritone/behavior/look/ForkableRandom.java new file mode 100644 index 000000000..5f5f942d2 --- /dev/null +++ b/src/main/java/baritone/behavior/look/ForkableRandom.java @@ -0,0 +1,85 @@ +/* + * 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.behavior.look; + +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.LongSupplier; + +/** + * Implementation of Xoroshiro256++ + *

+ * Extended to produce random double-precision floating point numbers, and allow copies to be spawned via {@link #fork}, + * which share the same internal state as the source object. + * + * @author Brady + */ +public final class ForkableRandom { + + private static final double DOUBLE_UNIT = 0x1.0p-53; + + private final long[] s; + + public ForkableRandom() { + this(System.nanoTime() ^ System.currentTimeMillis()); + } + + public ForkableRandom(long seedIn) { + final AtomicLong seed = new AtomicLong(seedIn); + final LongSupplier splitmix64 = () -> { + long z = seed.addAndGet(0x9e3779b97f4a7c15L); + z = (z ^ (z >>> 30)) * 0xbf58476d1ce4e5b9L; + z = (z ^ (z >>> 27)) * 0x94d049bb133111ebL; + return z ^ (z >>> 31); + }; + this.s = new long[] { + splitmix64.getAsLong(), + splitmix64.getAsLong(), + splitmix64.getAsLong(), + splitmix64.getAsLong() + }; + } + + private ForkableRandom(long[] s) { + this.s = s; + } + + public double nextDouble() { + return (this.next() >>> 11) * DOUBLE_UNIT; + } + + public long next() { + final long result = rotl(this.s[0] + this.s[3], 23) + this.s[0]; + final long t = this.s[1] << 17; + this.s[2] ^= this.s[0]; + this.s[3] ^= this.s[1]; + this.s[1] ^= this.s[2]; + this.s[0] ^= this.s[3]; + this.s[2] ^= t; + this.s[3] = rotl(this.s[3], 45); + return result; + } + + public ForkableRandom fork() { + return new ForkableRandom(Arrays.copyOf(this.s, 4)); + } + + private static long rotl(long x, int k) { + return (x << k) | (x >>> (64 - k)); + } +} From 0682e6370713961c31a56871bc32b924120556f3 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 21 Jun 2023 17:39:04 -0500 Subject: [PATCH 700/935] Apply processor to RotationMoveEvent --- src/main/java/baritone/behavior/LookBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index aeb694181..57dfd206c 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -145,7 +145,7 @@ public Optional getEffectiveRotation() { @Override public void onPlayerRotationMove(RotationMoveEvent event) { if (this.target != null) { - final Rotation actual = this.target.rotation; + final Rotation actual = this.processor.nextRotation(this.target.rotation); event.setYaw(actual.getYaw()); event.setPitch(actual.getPitch()); } From 0aff31b7685008adf23f7251e328b74c05570ebc Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 21 Jun 2023 18:59:44 -0500 Subject: [PATCH 701/935] Perfect elytra simulation --- src/main/java/baritone/behavior/ElytraBehavior.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 193c95227..a0839f100 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -713,7 +713,7 @@ private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, bool Vec3d stepped = motion; Vec3d totalMotion = Vec3d.ZERO; for (int i = 0; i < steps; i++) { - stepped = step(stepped, pitch, good.getYaw(), firework); + stepped = step(stepped, pitch, good.getYaw(), firework && i > 0); Vec3d actualPositionPrevTick = ctx.playerFeetAsVec().add(totalMotion); totalMotion = totalMotion.add(stepped); Vec3d actualPosition = ctx.playerFeetAsVec().add(totalMotion); @@ -781,9 +781,9 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, motionX += (lookDirection.x / pitchBase2 * flatMotion - motionX) * 0.1; motionZ += (lookDirection.z / pitchBase2 * flatMotion - motionZ) * 0.1; } - motionX *= 0.99; - motionY *= 0.98; - motionZ *= 0.99; + motionX *= 0.99f; + motionY *= 0.98f; + motionZ *= 0.99f; //System.out.println(motionX + " " + motionY + " " + motionZ); return new Vec3d(motionX, motionY, motionZ); From 7ef4307ab7977432beae24c4965bcb2e573e6d00 Mon Sep 17 00:00:00 2001 From: Mike <44955015+jdbool@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:25:24 -0700 Subject: [PATCH 702/935] Clean up useMessageTag --- src/api/java/baritone/api/Settings.java | 6 +++++- src/api/java/baritone/api/utils/Helper.java | 17 +++-------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index ae8cb07fd..2b7ebc288 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -17,6 +17,7 @@ package baritone.api; +import baritone.api.utils.Helper; import baritone.api.utils.NotificationHelper; import baritone.api.utils.SettingsUtil; import baritone.api.utils.TypeUtils; @@ -1147,7 +1148,10 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ - public final Setting> logger = new Setting<>((msg, tag) -> Minecraft.getInstance().gui.getChat().addMessage(msg, null, tag)); + public final Setting> logger = new Setting<>((msg) -> { + final GuiMessageTag tag = useMessageTag.value ? Helper.MESSAGE_TAG : null; + Minecraft.getInstance().gui.getChat().addMessage(msg, null, tag); + }); /** * The function that is called when Baritone will send a desktop notification. This function can be added to diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index f0709c1cc..63ced2496 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -163,12 +163,11 @@ default void logDebug(String message) { * Send components to chat with the [Baritone] prefix * * @param logAsToast Whether to log as a toast notification - * @param useMessageTag Whether to use a message tag instead of a prefix * @param components The components to send */ - default void logDirect(boolean logAsToast, boolean useMessageTag, Component... components) { + default void logDirect(boolean logAsToast, Component... components) { MutableComponent component = Component.literal(""); - if (!logAsToast && !useMessageTag) { + if (!logAsToast && !BaritoneAPI.getSettings().useMessageTag.value) { component.append(getPrefix()); component.append(Component.literal(" ")); } @@ -176,20 +175,10 @@ default void logDirect(boolean logAsToast, boolean useMessageTag, Component... c if (logAsToast) { logToast(getPrefix(), component); } else { - mc.execute(() -> BaritoneAPI.getSettings().logger.value.accept(component, useMessageTag ? MESSAGE_TAG : null)); + mc.execute(() -> BaritoneAPI.getSettings().logger.value.accept(component)); } } - /** - * Send components to chat with the [Baritone] prefix - * - * @param logAsToast Whether to log as a toast notification - * @param components The components to send - */ - default void logDirect(boolean logAsToast, Component... components) { - logDirect(logAsToast, BaritoneAPI.getSettings().useMessageTag.value, components); - } - /** * Send components to chat with the [Baritone] prefix * From 4776fa18765a9b56d9abea493117f2e119fd5abf Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 21 Jun 2023 21:19:12 -0500 Subject: [PATCH 703/935] Don't update `playerNear` on an empty path --- src/main/java/baritone/behavior/ElytraBehavior.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index a0839f100..b63d81a33 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -282,6 +282,10 @@ private void attemptNextSegment() { } public void updatePlayerNear() { + if (this.path.isEmpty()) { + return; + } + int index = this.playerNear; final BetterBlockPos pos = ctx.playerFeet(); for (int i = index; i >= Math.max(index - 1000, 0); i -= 10) { From 47dc0f9b941a6d9c8643cc9a03986998a6940498 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 21 Jun 2023 21:30:04 -0500 Subject: [PATCH 704/935] Add missing exception null check to async completed callback --- src/main/java/baritone/behavior/ElytraBehavior.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index b63d81a33..a6fd769d0 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -177,10 +177,12 @@ public void pathNextSegment(final int afterIncl) { }) .whenComplete((result, ex) -> { this.recalculating = false; - if (ex instanceof PathCalculationException) { - logDirect("Failed to compute next segment"); - } else { - logUnhandledException(ex); + if (ex != null) { + if (ex instanceof PathCalculationException) { + logDirect("Failed to compute next segment"); + } else { + logUnhandledException(ex); + } } }); } From 535fd17a42b6b9a110c28ac298e5ac9e1e3379f4 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Thu, 22 Jun 2023 08:30:25 -0400 Subject: [PATCH 705/935] simplify null check --- src/main/java/baritone/behavior/ElytraBehavior.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index a6fd769d0..da2b4f41b 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -123,12 +123,10 @@ public void pathToDestination(final BlockPos destination) { }) .whenComplete((result, ex) -> { this.recalculating = false; - if (ex != null) { - if (ex instanceof PathCalculationException) { - logDirect("Failed to compute path to destination"); - } else { - logUnhandledException(ex); - } + if (ex instanceof PathCalculationException) { + logDirect("Failed to compute path to destination"); + } else if (ex != null) { + logUnhandledException(ex); } }); } From b366b1b1d1aa79185389c5541b3451c436c6179d Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 22 Jun 2023 11:40:45 -0500 Subject: [PATCH 706/935] Fix other null checks --- .../baritone/behavior/ElytraBehavior.java | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index da2b4f41b..5e370fa28 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -143,12 +143,10 @@ public CompletableFuture pathRecalcSegment(final int upToIncl) { return this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete)) .whenComplete((result, ex) -> { this.recalculating = false; - if (ex != null) { - if (ex instanceof PathCalculationException) { - logDirect("Failed to recompute segment"); - } else { - logUnhandledException(ex); - } + if (ex instanceof PathCalculationException) { + logDirect("Failed to recompute segment"); + } else if (ex != null) { + logUnhandledException(ex); } }); } @@ -175,12 +173,10 @@ public void pathNextSegment(final int afterIncl) { }) .whenComplete((result, ex) -> { this.recalculating = false; - if (ex != null) { - if (ex instanceof PathCalculationException) { - logDirect("Failed to compute next segment"); - } else { - logUnhandledException(ex); - } + if (ex instanceof PathCalculationException) { + logDirect("Failed to compute next segment"); + } else if (ex != null) { + logUnhandledException(ex); } }); } From f4a99253f44f727dbff097c92c28796d4860b830 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 22 Jun 2023 12:08:30 -0500 Subject: [PATCH 707/935] Prevent head bonks --- src/main/java/baritone/behavior/ElytraBehavior.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 5e370fa28..89acee39f 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -628,6 +628,11 @@ private boolean isHitboxClear(final Vec3d start, final Vec3d dest, final Double if (!this.clearView(start, dest, ignoreLava)) { return false; } + // Prevent head bonks + // Even though the player's hitbox is supposed to be 0.6 tall, there's no way it's actually that short + if (!this.clearView(start.add(0, 1.6, 0), dest, ignoreLava)) { + return false; + } if (growAmount == null) { return true; } From 9cf5538058579470f87ccb6a009f99b1681aa0b2 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 22 Jun 2023 12:50:06 -0500 Subject: [PATCH 708/935] Improve stepper collision detection --- .../baritone/behavior/ElytraBehavior.java | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 89acee39f..5f25119a7 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -628,7 +628,7 @@ private boolean isHitboxClear(final Vec3d start, final Vec3d dest, final Double if (!this.clearView(start, dest, ignoreLava)) { return false; } - // Prevent head bonks + // Avoid head bonks // Even though the player's hitbox is supposed to be 0.6 tall, there's no way it's actually that short if (!this.clearView(start.add(0, 1.6, 0), dest, ignoreLava)) { return false; @@ -684,14 +684,14 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { } } - private Pair solvePitch(Vec3d goalDirection, int steps, int relaxation, boolean isBoosted, boolean ignoreLava) { - final Float pitch = this.solvePitch(goalDirection, steps, relaxation == 2, isBoosted, ignoreLava); + private Pair solvePitch(Vec3d goalDelta, int steps, int relaxation, boolean isBoosted, boolean ignoreLava) { + final Float pitch = this.solvePitch(goalDelta, steps, relaxation == 2, isBoosted, ignoreLava); if (pitch != null) { return new Pair<>(pitch, false); } if (Baritone.settings().experimentalTakeoff.value && relaxation > 0) { - final Float usingFirework = this.solvePitch(goalDirection, steps, relaxation == 2, true, ignoreLava); + final Float usingFirework = this.solvePitch(goalDelta, steps, relaxation == 2, true, ignoreLava); if (usingFirework != null) { return new Pair<>(usingFirework, true); } @@ -700,37 +700,48 @@ private Pair solvePitch(Vec3d goalDirection, int steps, int rela return new Pair<>(null, false); } - private Float solvePitch(Vec3d goalDirection, int steps, boolean desperate, boolean firework, boolean ignoreLava) { + private Float solvePitch(Vec3d goalDelta, int steps, boolean desperate, boolean firework, boolean ignoreLava) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch - goalDirection = goalDirection.normalize(); + final Vec3d goalDirection = goalDelta.normalize(); Rotation good = RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, goalDirection, ctx.playerRotations()); // lazy lol Float bestPitch = null; double bestDot = Double.NEGATIVE_INFINITY; - Vec3d motion = new Vec3d(ctx.player().motionX, ctx.player().motionY, ctx.player().motionZ); - float minPitch = desperate ? -90 : Math.max(good.getPitch() - Baritone.settings().elytraPitchRange.value, -89); - float maxPitch = desperate ? 90 : Math.min(good.getPitch() + Baritone.settings().elytraPitchRange.value, 89); + + final Vec3d initialMotion = new Vec3d(ctx.player().motionX, ctx.player().motionY, ctx.player().motionZ); + final AxisAlignedBB initialBB = ctx.player().getEntityBoundingBox(); + final float minPitch = desperate ? -90 : Math.max(good.getPitch() - Baritone.settings().elytraPitchRange.value, -89); + final float maxPitch = desperate ? 90 : Math.min(good.getPitch() + Baritone.settings().elytraPitchRange.value, 89); + outer: for (float pitch = minPitch; pitch <= maxPitch; pitch++) { - Vec3d stepped = motion; + Vec3d motion = initialMotion; + AxisAlignedBB hitbox = initialBB; Vec3d totalMotion = Vec3d.ZERO; for (int i = 0; i < steps; i++) { - stepped = step(stepped, pitch, good.getYaw(), firework && i > 0); - Vec3d actualPositionPrevTick = ctx.playerFeetAsVec().add(totalMotion); - totalMotion = totalMotion.add(stepped); - Vec3d actualPosition = ctx.playerFeetAsVec().add(totalMotion); - for (int x = MathHelper.floor(Math.min(actualPosition.x, actualPositionPrevTick.x) - 0.31); x <= Math.max(actualPosition.x, actualPositionPrevTick.x) + 0.31; x++) { - for (int y = MathHelper.floor(Math.min(actualPosition.y, actualPositionPrevTick.y) - 0.2); y <= Math.max(actualPosition.y, actualPositionPrevTick.y) + 1; y++) { - for (int z = MathHelper.floor(Math.min(actualPosition.z, actualPositionPrevTick.z) - 0.31); z <= Math.max(actualPosition.z, actualPositionPrevTick.z) + 0.31; z++) { + motion = step(motion, pitch, good.getYaw(), firework && i > 0); + + final AxisAlignedBB inMotion = hitbox.expand(motion.x, motion.y, motion.z) + // Additional padding for safety + .grow(0.01, 0.01, 0.01) + // Expand 0.4 up and 0.2 down for head bonk avoidance + .expand(0, 0.4, 0).expand(0, -0.2, 0); + + for (int x = MathHelper.floor(inMotion.minX); x < MathHelper.ceil(inMotion.maxX); x++) { + for (int y = MathHelper.floor(inMotion.minY); y < MathHelper.ceil(inMotion.maxY); y++) { + for (int z = MathHelper.floor(inMotion.minZ); z < MathHelper.ceil(inMotion.maxZ); z++) { if (!this.passable(x, y, z, ignoreLava)) { continue outer; } } } } + + hitbox = hitbox.offset(motion.x, motion.y, motion.z); + totalMotion = totalMotion.add(motion); } double directionalGoodness = goalDirection.dotProduct(totalMotion.normalize()); // tried to incorporate a "speedGoodness" but it kept making it do stupid stuff (aka always losing altitude) From 90434b3178516fe92c4dbe9538bc432e95a1bf15 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 22 Jun 2023 12:54:30 -0500 Subject: [PATCH 709/935] A bit more flexibility --- src/main/java/baritone/behavior/ElytraBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 5f25119a7..77c2d9f00 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -630,7 +630,7 @@ private boolean isHitboxClear(final Vec3d start, final Vec3d dest, final Double } // Avoid head bonks // Even though the player's hitbox is supposed to be 0.6 tall, there's no way it's actually that short - if (!this.clearView(start.add(0, 1.6, 0), dest, ignoreLava)) { + if (!this.clearView(start.add(0, 1, 0), dest, ignoreLava)) { return false; } if (growAmount == null) { From bce2c74a8e3cab5b14986c3f01084a587fc21af4 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 22 Jun 2023 18:07:11 -0500 Subject: [PATCH 710/935] NO MORE CONCUSSIONS! --- .../baritone/behavior/ElytraBehavior.java | 80 ++++++++++++++----- 1 file changed, 60 insertions(+), 20 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 77c2d9f00..041813d4c 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -123,10 +123,13 @@ public void pathToDestination(final BlockPos destination) { }) .whenComplete((result, ex) -> { this.recalculating = false; - if (ex instanceof PathCalculationException) { - logDirect("Failed to compute path to destination"); - } else if (ex != null) { - logUnhandledException(ex); + if (ex != null) { + final Throwable cause = ex.getCause(); + if (cause instanceof PathCalculationException) { + logDirect("Failed to compute path to destination"); + } else { + logUnhandledException(cause); + } } }); } @@ -143,10 +146,13 @@ public CompletableFuture pathRecalcSegment(final int upToIncl) { return this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete)) .whenComplete((result, ex) -> { this.recalculating = false; - if (ex instanceof PathCalculationException) { - logDirect("Failed to recompute segment"); - } else if (ex != null) { - logUnhandledException(ex); + if (ex != null) { + final Throwable cause = ex.getCause(); + if (cause instanceof PathCalculationException) { + logDirect("Failed to recompute segment"); + } else { + logUnhandledException(cause); + } } }); } @@ -173,10 +179,13 @@ public void pathNextSegment(final int afterIncl) { }) .whenComplete((result, ex) -> { this.recalculating = false; - if (ex instanceof PathCalculationException) { - logDirect("Failed to compute next segment"); - } else if (ex != null) { - logUnhandledException(ex); + if (ex != null) { + final Throwable cause = ex.getCause(); + if (cause instanceof PathCalculationException) { + logDirect("Failed to compute next segment"); + } else { + logUnhandledException(cause); + } } }); } @@ -628,11 +637,6 @@ private boolean isHitboxClear(final Vec3d start, final Vec3d dest, final Double if (!this.clearView(start, dest, ignoreLava)) { return false; } - // Avoid head bonks - // Even though the player's hitbox is supposed to be 0.6 tall, there's no way it's actually that short - if (!this.clearView(start.add(0, 1, 0), dest, ignoreLava)) { - return false; - } if (growAmount == null) { return true; } @@ -722,13 +726,14 @@ private Float solvePitch(Vec3d goalDelta, int steps, boolean desperate, boolean AxisAlignedBB hitbox = initialBB; Vec3d totalMotion = Vec3d.ZERO; for (int i = 0; i < steps; i++) { + if (MC_1_12_Collision_Fix.bonk(ctx, hitbox)) { + continue outer; + } motion = step(motion, pitch, good.getYaw(), firework && i > 0); final AxisAlignedBB inMotion = hitbox.expand(motion.x, motion.y, motion.z) // Additional padding for safety - .grow(0.01, 0.01, 0.01) - // Expand 0.4 up and 0.2 down for head bonk avoidance - .expand(0, 0.4, 0).expand(0, -0.2, 0); + .grow(0.01, 0.01, 0.01); for (int x = MathHelper.floor(inMotion.minX); x < MathHelper.ceil(inMotion.maxX); x++) { for (int y = MathHelper.floor(inMotion.minY); y < MathHelper.ceil(inMotion.maxY); y++) { @@ -813,5 +818,40 @@ private static boolean passable(IBlockState state, boolean ignoreLava) { Material mat = state.getMaterial(); return mat == Material.AIR || (ignoreLava && mat == Material.LAVA); } + + /** + * Minecraft 1.12's pushOutOfBlocks logic doesn't account for players being able to fit under single block spaces, + * so whenever the edge of a ceiling is encountered while elytra flying it tries to push the player out. + */ + private static final class MC_1_12_Collision_Fix { + + public static boolean bonk(final IPlayerContext ctx, final AxisAlignedBB aabb) { + final Vec3d center = aabb.getCenter(); + final double width = (double) ctx.player().width * 0.35D; + final double x = center.x; + final double y = aabb.minY + 0.5D; + final double z = center.z; + + return pushOutOfBlocks(ctx, x - width, y, z + width) + || pushOutOfBlocks(ctx, x - width, y, z - width) + || pushOutOfBlocks(ctx, x + width, y, z - width) + || pushOutOfBlocks(ctx, x + width, y, z + width); + } + + private static boolean pushOutOfBlocks(final IPlayerContext ctx, final double x, final double y, final double z) { + final BlockPos pos = new BlockPos(x, y, z); + if (isOpenBlockSpace(ctx, pos)) { + return false; + } + return isOpenBlockSpace(ctx, pos.west()) + || isOpenBlockSpace(ctx, pos.east()) + || isOpenBlockSpace(ctx, pos.north()) + || isOpenBlockSpace(ctx, pos.south()); + } + + private static boolean isOpenBlockSpace(IPlayerContext ctx, BlockPos pos) { + return !ctx.world().getBlockState(pos).isNormalCube() && !ctx.world().getBlockState(pos.up()).isNormalCube(); + } + } } From 878a32228a09eed651fde46b1203d974ebfb3506 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 22 Jun 2023 18:22:40 -0500 Subject: [PATCH 711/935] Add avoidance setting --- src/api/java/baritone/api/Settings.java | 1 + src/main/java/baritone/behavior/ElytraBehavior.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index be959ef12..71a2d996b 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -52,6 +52,7 @@ public final class Settings { public final Setting elytraPitchRange = new Setting<>(25); public final Setting elytraFireworkSpeed = new Setting<>(0.6); public final Setting elytraFireworkSetbackUseDelay = new Setting<>(15); + public final Setting elytraMinimumAvoidance = new Setting<>(0.2); public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 041813d4c..345da254d 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -509,9 +509,9 @@ private Solution solveAngles(final SolverContext context) { } } - // 1.0 -> 0.25 -> none + final double minAvoidance = Baritone.settings().elytraMinimumAvoidance.value; final Double growth = relaxation == 2 ? null - : relaxation == 0 ? 0.5d : 0.25d; + : relaxation == 0 ? 2 * minAvoidance : minAvoidance; if (this.isHitboxClear(start, dest, growth, isInLava)) { // Yaw is trivial, just calculate the rotation required to face the destination From bfae100cb91b28ab41a4378997cbbc32d85f5217 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 22 Jun 2023 20:35:22 -0500 Subject: [PATCH 712/935] Create `ITickableAimProcessor` --- .../baritone/api/behavior/ILookBehavior.java | 9 ++-- .../api/behavior/look/IAimProcessor.java | 15 +++--- .../behavior/look/ITickableAimProcessor.java | 47 +++++++++++++++++ .../java/baritone/behavior/LookBehavior.java | 51 +++++++++++-------- 4 files changed, 88 insertions(+), 34 deletions(-) create mode 100644 src/api/java/baritone/api/behavior/look/ITickableAimProcessor.java diff --git a/src/api/java/baritone/api/behavior/ILookBehavior.java b/src/api/java/baritone/api/behavior/ILookBehavior.java index eb7c992b8..d78e7f8b3 100644 --- a/src/api/java/baritone/api/behavior/ILookBehavior.java +++ b/src/api/java/baritone/api/behavior/ILookBehavior.java @@ -40,14 +40,11 @@ public interface ILookBehavior extends IBehavior { void updateTarget(Rotation rotation, boolean blockInteract); /** - * The aim processor instance for this {@link ILookBehavior}, which is responsible for applying additional, deterministic - * transformations to the target rotation set by {@link #updateTarget}. Whenever {@link IAimProcessor#nextRotation(Rotation)} - * is called on the instance returned by this method, the returned value always reflects what would happen in the - * upcoming tick. In other words, it is a pure function, and no internal state changes. If simulation of the - * rotation states beyond the next tick is required, then a {@link IAimProcessor#fork(int) fork} should be created. + * The aim processor instance for this {@link ILookBehavior}, which is responsible for applying additional, + * deterministic transformations to the target rotation set by {@link #updateTarget}. * * @return The aim processor - * @see IAimProcessor#fork(int) + * @see IAimProcessor#fork */ IAimProcessor getAimProcessor(); } diff --git a/src/api/java/baritone/api/behavior/look/IAimProcessor.java b/src/api/java/baritone/api/behavior/look/IAimProcessor.java index 72a4c681d..c7c60f413 100644 --- a/src/api/java/baritone/api/behavior/look/IAimProcessor.java +++ b/src/api/java/baritone/api/behavior/look/IAimProcessor.java @@ -25,20 +25,21 @@ public interface IAimProcessor { /** - * Returns the actual rotation that will be used when the desired rotation is requested. This is not guaranteed to - * return the same value for a given input. + * Returns the actual rotation that will be used when the desired rotation is requested. The returned rotation + * always reflects what would happen in the upcoming tick. In other words, it is a pure function, and no internal + * state changes. If simulation of the rotation states beyond the next tick is required, then a + * {@link IAimProcessor#fork fork} should be created. * * @param desired The desired rotation to set * @return The actual rotation */ - Rotation nextRotation(Rotation desired); + Rotation peekRotation(Rotation desired); /** - * Returns a copy of this {@link IAimProcessor} which has its own internal state and updates on each call to - * {@link #nextRotation(Rotation)}. + * Returns a copy of this {@link IAimProcessor} which has its own internal state and is manually tickable. * - * @param ticksAdvanced The number of ticks to advance ahead of time * @return The forked processor + * @see ITickableAimProcessor */ - IAimProcessor fork(int ticksAdvanced); + ITickableAimProcessor fork(); } diff --git a/src/api/java/baritone/api/behavior/look/ITickableAimProcessor.java b/src/api/java/baritone/api/behavior/look/ITickableAimProcessor.java new file mode 100644 index 000000000..e0a07ae57 --- /dev/null +++ b/src/api/java/baritone/api/behavior/look/ITickableAimProcessor.java @@ -0,0 +1,47 @@ +/* + * 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.behavior.look; + +import baritone.api.utils.Rotation; + +/** + * @author Brady + */ +public interface ITickableAimProcessor extends IAimProcessor { + + /** + * Advances the internal state of this aim processor by a single tick. + */ + void tick(); + + /** + * Calls {@link #tick()} the specified number of times. + * + * @param ticks The number of calls + */ + void advance(int ticks); + + /** + * Returns the actual rotation as provided by {@link #peekRotation(Rotation)}, and then automatically advances the + * internal state by one {@link #tick() tick}. + * + * @param rotation The desired rotation to set + * @return The actual rotation + */ + Rotation nextRotation(Rotation rotation); +} diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 57dfd206c..4ea0274d7 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -21,6 +21,7 @@ import baritone.api.Settings; import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.look.IAimProcessor; +import baritone.api.behavior.look.ITickableAimProcessor; import baritone.api.event.events.*; import baritone.api.utils.IPlayerContext; import baritone.api.utils.Rotation; @@ -68,7 +69,6 @@ public IAimProcessor getAimProcessor() { @Override public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.IN) { - // Unlike forked AimProcessors, the root one needs to be manually updated each game tick this.processor.tick(); } } @@ -88,7 +88,7 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); } - final Rotation actual = this.processor.nextRotation(this.target.rotation); + final Rotation actual = this.processor.peekRotation(this.target.rotation); ctx.player().rotationYaw = actual.getYaw(); ctx.player().rotationPitch = actual.getPitch(); break; @@ -129,7 +129,7 @@ public void onWorldEvent(WorldEvent event) { public void pig() { if (this.target != null) { - final Rotation actual = this.processor.nextRotation(this.target.rotation); + final Rotation actual = this.processor.peekRotation(this.target.rotation); ctx.player().rotationYaw = actual.getYaw(); } } @@ -145,7 +145,7 @@ public Optional getEffectiveRotation() { @Override public void onPlayerRotationMove(RotationMoveEvent event) { if (this.target != null) { - final Rotation actual = this.processor.nextRotation(this.target.rotation); + final Rotation actual = this.processor.peekRotation(this.target.rotation); event.setYaw(actual.getYaw()); event.setPitch(actual.getPitch()); } @@ -164,7 +164,7 @@ protected Rotation getPrevRotation() { } } - private static abstract class AbstractAimProcessor implements IAimProcessor { + private static abstract class AbstractAimProcessor implements ITickableAimProcessor { protected final IPlayerContext ctx; private final ForkableRandom rand; @@ -183,13 +183,8 @@ private AbstractAimProcessor(final AbstractAimProcessor source) { this.randomPitchOffset = source.randomPitchOffset; } - public void tick() { - this.randomYawOffset = (this.rand.nextDouble() - 0.5) * Baritone.settings().randomLooking.value; - this.randomPitchOffset = (this.rand.nextDouble() - 0.5) * Baritone.settings().randomLooking.value; - } - @Override - public Rotation nextRotation(final Rotation rotation) { + public final Rotation peekRotation(final Rotation rotation) { final Rotation prev = this.getPrevRotation(); float desiredYaw = rotation.getYaw(); @@ -211,16 +206,34 @@ public Rotation nextRotation(final Rotation rotation) { } @Override - public final IAimProcessor fork(final int ticksAdvanced) { - final AbstractAimProcessor fork = new AbstractAimProcessor(this) { + public final void tick() { + this.randomYawOffset = (this.rand.nextDouble() - 0.5) * Baritone.settings().randomLooking.value; + this.randomPitchOffset = (this.rand.nextDouble() - 0.5) * Baritone.settings().randomLooking.value; + } + + @Override + public final void advance(int ticks) { + for (int i = 0; i < ticks; i++) { + this.tick(); + } + } + + @Override + public Rotation nextRotation(final Rotation rotation) { + final Rotation actual = this.peekRotation(rotation); + this.tick(); + return actual; + } + + @Override + public final ITickableAimProcessor fork() { + return new AbstractAimProcessor(this) { private Rotation prev = AbstractAimProcessor.this.getPrevRotation(); @Override - public Rotation nextRotation(Rotation rotation) { - final Rotation actual = super.nextRotation(rotation); - this.tick(); - return (this.prev = actual); + public Rotation nextRotation(final Rotation rotation) { + return (this.prev = super.nextRotation(rotation)); } @Override @@ -228,10 +241,6 @@ protected Rotation getPrevRotation() { return this.prev; } }; - for (int i = 0; i < ticksAdvanced; i++) { - fork.tick(); - } - return fork; } protected abstract Rotation getPrevRotation(); From c9a18caf492f6ccba6cb04223573e9aeb41da7cd Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 22 Jun 2023 20:38:00 -0500 Subject: [PATCH 713/935] Register `LookBehavior` first Since there's no event priority system, this is necessary to ensure anything else listening to the PRE `TickEvent` can accurately simulate rotations. --- src/main/java/baritone/Baritone.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 776e646af..957421970 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -101,8 +101,8 @@ public class Baritone implements IBaritone { this.playerContext = new BaritonePlayerContext(this, mc); { - this.pathingBehavior = this.registerBehavior(PathingBehavior::new); this.lookBehavior = this.registerBehavior(LookBehavior::new); + this.pathingBehavior = this.registerBehavior(PathingBehavior::new); this.inventoryBehavior = this.registerBehavior(InventoryBehavior::new); this.inputOverrideHandler = this.registerBehavior(InputOverrideHandler::new); this.registerBehavior(WaypointBehavior::new); From e3a1ac85cce9605f99f2d0db97f7a852ca768f30 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Fri, 23 Jun 2023 02:28:52 +0200 Subject: [PATCH 714/935] Fix waiting for impossible rotations --- src/api/java/baritone/api/utils/RotationUtils.java | 3 ++- src/main/java/baritone/pathing/movement/MovementHelper.java | 3 ++- src/main/java/baritone/process/BuilderProcess.java | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index b3b67d9ca..9fc65df9f 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -217,7 +217,8 @@ public static Optional reachable(IPlayerContext ctx, BlockPos pos, dou public static Optional reachableOffset(IPlayerContext ctx, BlockPos pos, Vec3d offsetPos, double blockReachDistance, boolean wouldSneak) { Vec3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.player().getPositionEyes(1.0F); Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, ctx.playerRotations()); - RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rotation, blockReachDistance, wouldSneak); + Rotation actualRotation = BaritoneAPI.getProvider().getBaritoneForPlayer(ctx.player()).getLookBehavior().getAimProcessor().peekRotation(rotation); + RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), actualRotation, blockReachDistance, wouldSneak); //System.out.println(result); if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) { if (result.getBlockPos().equals(pos)) { diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index b14b2d69c..881bb6f15 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -684,7 +684,8 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, double faceY = (placeAt.getY() + against1.getY() + 0.5D) * 0.5D; double faceZ = (placeAt.getZ() + against1.getZ() + 1.0D) * 0.5D; Rotation place = RotationUtils.calcRotationFromVec3d(wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()); - RayTraceResult res = RayTraceUtils.rayTraceTowards(ctx.player(), place, ctx.playerController().getBlockReachDistance(), wouldSneak); + Rotation actual = baritone.getLookBehavior().getAimProcessor().peekRotation(place); + RayTraceResult res = RayTraceUtils.rayTraceTowards(ctx.player(), actual, ctx.playerController().getBlockReachDistance(), wouldSneak); if (res != null && res.typeOfHit == RayTraceResult.Type.BLOCK && res.getBlockPos().equals(against1) && res.getBlockPos().offset(res.sideHit).equals(placeAt)) { state.setTarget(new MovementState.MovementTarget(place, true)); found = true; diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index bd14d09a7..60066971e 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -351,9 +351,10 @@ private Optional possibleToPlace(IBlockState toPlace, int x, int y, i double placeY = placeAgainstPos.y + aabb.minY * placementMultiplier.y + aabb.maxY * (1 - placementMultiplier.y); double placeZ = placeAgainstPos.z + aabb.minZ * placementMultiplier.z + aabb.maxZ * (1 - placementMultiplier.z); Rotation rot = RotationUtils.calcRotationFromVec3d(RayTraceUtils.inferSneakingEyePosition(ctx.player()), new Vec3d(placeX, placeY, placeZ), ctx.playerRotations()); - RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot, ctx.playerController().getBlockReachDistance(), true); + Rotation actualRot = baritone.getLookBehavior().getAimProcessor().peekRotation(rot); + RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), actualRot, ctx.playerController().getBlockReachDistance(), true); if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK && result.getBlockPos().equals(placeAgainstPos) && result.sideHit == against.getOpposite()) { - OptionalInt hotbar = hasAnyItemThatWouldPlace(toPlace, result, rot); + OptionalInt hotbar = hasAnyItemThatWouldPlace(toPlace, result, actualRot); if (hotbar.isPresent()) { return Optional.of(new Placement(hotbar.getAsInt(), placeAgainstPos, against.getOpposite(), rot)); } From c10903be6985d553d623b590088b3943cfe98d92 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 23 Jun 2023 16:17:59 -0700 Subject: [PATCH 715/935] Remove `firstFireworks` from `InventoryBehavior` --- .../java/baritone/behavior/InventoryBehavior.java | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 5c351adce..1ab31eb53 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -152,20 +152,6 @@ private int bestToolAgainst(Block against, Class cla$$) { return bestInd; } - private int firstFireworks() { - final NonNullList invy = ctx.player().inventory.mainInventory; - for (int i = 0; i < invy.size(); i++) { - final ItemStack itemStack = invy.get(i); - final NBTTagCompound subCompound = itemStack.getSubCompound("Fireworks"); - if (itemStack.getItem() == Items.FIREWORKS - && subCompound != null - && subCompound.hasKey("Flight")) { - return i; - } - } - return -1; - } - public boolean hasGenericThrowaway() { for (Item item : Baritone.settings().acceptableThrowawayItems.value) { if (throwaway(false, stack -> item.equals(stack.getItem()))) { From f56e0569a2878fff0828f9041d6c9736d1d0ec58 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 23 Jun 2023 16:30:10 -0700 Subject: [PATCH 716/935] Add `minimumBoostTicks` --- .../baritone/behavior/ElytraBehavior.java | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 345da254d..e2c87c2c7 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -60,7 +60,19 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // :sunglasses: private final NetherPathfinderContext context; private final PathManager pathManager; + + /** + * Remaining cool-down ticks between firework usage + */ private int remainingFireworkTicks; + + /** + * The most recent minimum number of firework boost ticks, equivalent to {@code 10 * (1 + Flight)} + *

+ * Updated every time a firework is automatically used + */ + private int minimumBoostTicks; + private int remainingSetBackTicks; private BlockStateInterface bsi; @@ -561,6 +573,7 @@ private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final bool } logDirect("attempting to use firework" + (forceUseFirework ? " takeoff" : "")); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); + this.minimumBoostTicks = 10 * (1 + getFireworkBoost(ctx.player().getHeldItemMainhand()).orElse(0)); this.remainingFireworkTicks = 10; } } @@ -576,7 +589,7 @@ public SolverContext() { this.path = ElytraBehavior.this.pathManager.getPath(); this.playerNear = ElytraBehavior.this.pathManager.getNear(); this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); - this.isBoosted = ElytraBehavior.this.isFireworkActive(); + this.isBoosted = ElytraBehavior.this.getAttachedFirework().isPresent(); } @Override @@ -618,19 +631,30 @@ private static boolean isFireworks(final ItemStack itemStack) { return false; } // If it has NBT data, make sure it won't cause us to explode. - final NBTTagCompound subCompound = itemStack.getSubCompound("Fireworks"); - return subCompound == null || !subCompound.hasKey("Explosions"); + final NBTTagCompound compound = itemStack.getSubCompound("Fireworks"); + return compound == null || !compound.hasKey("Explosions"); } private static boolean isBoostingFireworks(final ItemStack itemStack) { - final NBTTagCompound subCompound = itemStack.getSubCompound("Fireworks"); - return isFireworks(itemStack) && subCompound != null && subCompound.hasKey("Flight"); + return getFireworkBoost(itemStack).isPresent(); + } + + private static OptionalInt getFireworkBoost(final ItemStack itemStack) { + if (isFireworks(itemStack)) { + final NBTTagCompound compound = itemStack.getSubCompound("Fireworks"); + if (compound != null && compound.hasKey("Flight")) { + return OptionalInt.of(compound.getByte("Flight")); + } + } + return OptionalInt.empty(); } - private boolean isFireworkActive() { + private Optional getAttachedFirework() { return ctx.world().loadedEntityList.stream() - .filter(x -> x instanceof EntityFireworkRocket) - .anyMatch(x -> Objects.equals(((IEntityFireworkRocket) x).getBoostedEntity(), ctx.player())); + .filter(x -> x instanceof EntityFireworkRocket) + .filter(x -> Objects.equals(((IEntityFireworkRocket) x).getBoostedEntity(), ctx.player())) + .map(x -> (EntityFireworkRocket) x) + .findFirst(); } private boolean isHitboxClear(final Vec3d start, final Vec3d dest, final Double growAmount, boolean ignoreLava) { From 2ccd464a4989013609b6d293a3167b1cc854b83d Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 24 Jun 2023 21:44:08 -0700 Subject: [PATCH 717/935] Utilize aim processor API for correct elytra simulation --- .../baritone/api/utils/IPlayerContext.java | 4 ++ .../baritone/behavior/ElytraBehavior.java | 43 +++++++++++++------ 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 14ca69fb9..8edd8f648 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -75,6 +75,10 @@ default Vec3d playerHead() { return new Vec3d(player().posX, player().posY + player().getEyeHeight(), player().posZ); } + default Vec3d playerMotion() { + return new Vec3d(player().motionX, player().motionY, player().motionZ); + } + BetterBlockPos viewerPos(); default Rotation playerRotations() { diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index e2c87c2c7..d3e1c76f7 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -19,6 +19,8 @@ import baritone.Baritone; import baritone.api.behavior.IElytraBehavior; +import baritone.api.behavior.look.IAimProcessor; +import baritone.api.behavior.look.ITickableAimProcessor; import baritone.api.event.events.*; import baritone.api.utils.*; import baritone.behavior.elytra.NetherPathfinderContext; @@ -433,7 +435,7 @@ public void onTick(TickEvent event) { logDirect("vbonk"); } - final SolverContext solverContext = this.new SolverContext(); + final SolverContext solverContext = this.new SolverContext(false); this.solveNextTick = true; // If there's no previously calculated solution to use, or the context used at the end of last tick doesn't match this tick @@ -470,7 +472,7 @@ public void onPostTick(TickEvent event) { // changed. Updating it now will avoid unnecessary recalculation on the main thread. this.pathManager.updatePlayerNear(); - final SolverContext context = this.new SolverContext(); + final SolverContext context = this.new SolverContext(true); this.solver = CompletableFuture.supplyAsync(() -> this.solveAngles(context)); this.solveNextTick = false; } @@ -529,7 +531,7 @@ private Solution solveAngles(final SolverContext context) { // Yaw is trivial, just calculate the rotation required to face the destination final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); - final Pair pitch = this.solvePitch(dest.subtract(start), steps, relaxation, isBoosted, isInLava); + final Pair pitch = this.solvePitch(context, dest.subtract(start), steps, relaxation, isInLava); if (pitch.first() == null) { solution = new Solution(context, new Rotation(yaw, ctx.playerRotations().getPitch()), null, false, false); continue; @@ -584,12 +586,20 @@ private final class SolverContext { public final int playerNear; public final Vec3d start; public final boolean isBoosted; + public final IAimProcessor aimProcessor; - public SolverContext() { + public SolverContext(boolean async) { this.path = ElytraBehavior.this.pathManager.getPath(); this.playerNear = ElytraBehavior.this.pathManager.getNear(); this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); this.isBoosted = ElytraBehavior.this.getAttachedFirework().isPresent(); + + ITickableAimProcessor aim = ElytraBehavior.this.baritone.getLookBehavior().getAimProcessor().fork(); + if (async) { + // async computation is done at the end of a tick, advance by 1 to prepare for the next tick + aim.advance(1); + } + this.aimProcessor = aim; } @Override @@ -712,14 +722,14 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { } } - private Pair solvePitch(Vec3d goalDelta, int steps, int relaxation, boolean isBoosted, boolean ignoreLava) { - final Float pitch = this.solvePitch(goalDelta, steps, relaxation == 2, isBoosted, ignoreLava); + private Pair solvePitch(SolverContext context, Vec3d goalDelta, int steps, int relaxation, boolean ignoreLava) { + final Float pitch = this.solvePitch(context, goalDelta, steps, relaxation == 2, context.isBoosted, ignoreLava); if (pitch != null) { return new Pair<>(pitch, false); } if (Baritone.settings().experimentalTakeoff.value && relaxation > 0) { - final Float usingFirework = this.solvePitch(goalDelta, steps, relaxation == 2, true, ignoreLava); + final Float usingFirework = this.solvePitch(context, goalDelta, steps, relaxation == 2, true, ignoreLava); if (usingFirework != null) { return new Pair<>(usingFirework, true); } @@ -728,32 +738,39 @@ private Pair solvePitch(Vec3d goalDelta, int steps, int relaxati return new Pair<>(null, false); } - private Float solvePitch(Vec3d goalDelta, int steps, boolean desperate, boolean firework, boolean ignoreLava) { + private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, boolean desperate, boolean firework, boolean ignoreLava) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch final Vec3d goalDirection = goalDelta.normalize(); - Rotation good = RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, goalDirection, ctx.playerRotations()); // lazy lol + final float goodPitch = RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, goalDirection, ctx.playerRotations()).getPitch(); Float bestPitch = null; double bestDot = Double.NEGATIVE_INFINITY; - final Vec3d initialMotion = new Vec3d(ctx.player().motionX, ctx.player().motionY, ctx.player().motionZ); + final Vec3d initialMotion = ctx.playerMotion(); final AxisAlignedBB initialBB = ctx.player().getEntityBoundingBox(); - final float minPitch = desperate ? -90 : Math.max(good.getPitch() - Baritone.settings().elytraPitchRange.value, -89); - final float maxPitch = desperate ? 90 : Math.min(good.getPitch() + Baritone.settings().elytraPitchRange.value, 89); + final float minPitch = desperate ? -90 : Math.max(goodPitch - Baritone.settings().elytraPitchRange.value, -89); + final float maxPitch = desperate ? 90 : Math.min(goodPitch + Baritone.settings().elytraPitchRange.value, 89); outer: for (float pitch = minPitch; pitch <= maxPitch; pitch++) { + final ITickableAimProcessor aimProcessor = context.aimProcessor.fork(); + Vec3d delta = goalDelta; Vec3d motion = initialMotion; AxisAlignedBB hitbox = initialBB; Vec3d totalMotion = Vec3d.ZERO; + for (int i = 0; i < steps; i++) { if (MC_1_12_Collision_Fix.bonk(ctx, hitbox)) { continue outer; } - motion = step(motion, pitch, good.getYaw(), firework && i > 0); + final Rotation rotation = aimProcessor.nextRotation( + RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, delta, ctx.playerRotations()).withPitch(pitch) + ); + motion = step(motion, rotation.getPitch(), rotation.getYaw(), firework && i > 0); + delta = delta.subtract(motion); final AxisAlignedBB inMotion = hitbox.expand(motion.x, motion.y, motion.z) // Additional padding for safety From 15f4253b3db96b8c31ef088f4c4f7305c5ed8b0a Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 24 Jun 2023 21:48:44 -0700 Subject: [PATCH 718/935] Clamp pitch to normal range --- src/main/java/baritone/behavior/LookBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 4ea0274d7..d438e8f85 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -202,7 +202,7 @@ public final Rotation peekRotation(final Rotation rotation) { return new Rotation( this.calculateMouseMove(prev.getYaw(), desiredYaw), this.calculateMouseMove(prev.getPitch(), desiredPitch) - ); + ).clamp(); } @Override From 615266ed963a47ac1c7c6a4363d36ec229a36034 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 24 Jun 2023 21:57:00 -0700 Subject: [PATCH 719/935] Replace manual calculation with util method --- .../java/baritone/behavior/ElytraBehavior.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index d3e1c76f7..642def293 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -769,12 +769,11 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool final Rotation rotation = aimProcessor.nextRotation( RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, delta, ctx.playerRotations()).withPitch(pitch) ); - motion = step(motion, rotation.getPitch(), rotation.getYaw(), firework && i > 0); + motion = step(motion, rotation, firework && i > 0); delta = delta.subtract(motion); - final AxisAlignedBB inMotion = hitbox.expand(motion.x, motion.y, motion.z) - // Additional padding for safety - .grow(0.01, 0.01, 0.01); + // Collision box while the player is in motion, with additional padding for safety + final AxisAlignedBB inMotion = hitbox.expand(motion.x, motion.y, motion.z).grow(0.01); for (int x = MathHelper.floor(inMotion.minX); x < MathHelper.ceil(inMotion.maxX); x++) { for (int y = MathHelper.floor(inMotion.minY); y < MathHelper.ceil(inMotion.maxY); y++) { @@ -800,15 +799,11 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool return bestPitch; } - private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, boolean firework) { + private static Vec3d step(final Vec3d motion, final Rotation rotation, final boolean firework) { double motionX = motion.x; double motionY = motion.y; double motionZ = motion.z; - float flatZ = MathHelper.cos((-rotationYaw * RotationUtils.DEG_TO_RAD_F) - (float) Math.PI); - float flatX = MathHelper.sin((-rotationYaw * RotationUtils.DEG_TO_RAD_F) - (float) Math.PI); - float pitchBase = -MathHelper.cos(-rotationPitch * RotationUtils.DEG_TO_RAD_F); - float pitchHeight = MathHelper.sin(-rotationPitch * RotationUtils.DEG_TO_RAD_F); - Vec3d lookDirection = new Vec3d(flatX * pitchBase, pitchHeight, flatZ * pitchBase); + final Vec3d lookDirection = RotationUtils.calcLookDirectionFromRotation(rotation); if (firework) { // See EntityFireworkRocket @@ -817,7 +812,7 @@ private static Vec3d step(Vec3d motion, float rotationPitch, float rotationYaw, motionZ += lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motionZ) * 0.5; } - float pitchRadians = rotationPitch * RotationUtils.DEG_TO_RAD_F; + float pitchRadians = rotation.getPitch() * RotationUtils.DEG_TO_RAD_F; double pitchBase2 = Math.sqrt(lookDirection.x * lookDirection.x + lookDirection.z * lookDirection.z); double flatMotion = Math.sqrt(motionX * motionX + motionZ * motionZ); double thisIsAlwaysOne = lookDirection.length(); From 32b7c8265077a2b25873ddb0750d2d74a63f02fd Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 24 Jun 2023 22:11:08 -0700 Subject: [PATCH 720/935] Add `renderHitboxRaytraces` setting --- src/api/java/baritone/api/Settings.java | 1 + .../java/baritone/behavior/ElytraBehavior.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 1b39c3cab..48d1c85d2 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -55,6 +55,7 @@ public final class Settings { public final Setting elytraMinimumAvoidance = new Setting<>(0.2); public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); + public final Setting renderHitboxRaytraces = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); // Experimental Elytra Settings diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 642def293..af353896f 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -701,6 +701,21 @@ private boolean isHitboxClear(final Vec3d start, final Vec3d dest, final Double bb.maxX + ox, bb.maxY + oy, bb.minZ + oz, bb.maxX + ox, bb.maxY + oy, bb.maxZ + oz, }; + + // Use non-batching method without early failure + if (Baritone.settings().renderHitboxRaytraces.value) { + boolean clear = true; + for (int i = 0; i < 8; i++) { + final Vec3d s = new Vec3d(src[i * 3], src[i * 3 + 1], src[i * 3 + 2]); + final Vec3d d = new Vec3d(dst[i * 3], dst[i * 3 + 1], dst[i * 3 + 2]); + // Don't forward ignoreLava since the batch call doesn't care about it + if (!this.clearView(s, d, false)) { + clear = false; + } + } + return clear; + } + return this.context.raytrace(8, src, dst, NetherPathfinderContext.Visibility.ALL); } From a1a3d93dc1e3a04db2c1c4c707353c2090e22bdc Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 24 Jun 2023 22:27:38 -0700 Subject: [PATCH 721/935] Add `renderElytraSimulation` setting --- src/api/java/baritone/api/Settings.java | 1 + src/main/java/baritone/behavior/ElytraBehavior.java | 10 ++++++++++ src/main/java/baritone/utils/PathRenderer.java | 11 +++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 48d1c85d2..960759fa2 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -56,6 +56,7 @@ public final class Settings { public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); public final Setting renderHitboxRaytraces = new Setting<>(false); + public final Setting renderElytraSimulation = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); // Experimental Elytra Settings diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index af353896f..cb0355832 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -56,6 +56,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // Used exclusively for PathRenderer public List> clearLines; public List> blockedLines; + public List simulationLine; public BlockPos aimPos; public List visiblePath; @@ -407,6 +408,7 @@ public void onTick(TickEvent event) { // Reset rendered elements this.clearLines.clear(); this.blockedLines.clear(); + this.simulationLine = null; this.aimPos = null; final List path = this.pathManager.getPath(); @@ -763,6 +765,7 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool Float bestPitch = null; double bestDot = Double.NEGATIVE_INFINITY; + List bestLine = null; final Vec3d initialMotion = ctx.playerMotion(); final AxisAlignedBB initialBB = ctx.player().getEntityBoundingBox(); @@ -776,6 +779,8 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool Vec3d motion = initialMotion; AxisAlignedBB hitbox = initialBB; Vec3d totalMotion = Vec3d.ZERO; + List line = new ArrayList<>(); + line.add(totalMotion); for (int i = 0; i < steps; i++) { if (MC_1_12_Collision_Fix.bonk(ctx, hitbox)) { @@ -802,6 +807,7 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool hitbox = hitbox.offset(motion.x, motion.y, motion.z); totalMotion = totalMotion.add(motion); + line.add(totalMotion); } double directionalGoodness = goalDirection.dotProduct(totalMotion.normalize()); // tried to incorporate a "speedGoodness" but it kept making it do stupid stuff (aka always losing altitude) @@ -809,8 +815,12 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool if (goodness > bestDot) { bestDot = goodness; bestPitch = pitch; + bestLine = line; } } + if (bestLine != null) { + this.simulationLine = bestLine; + } return bestPitch; } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 0b08a1f32..da2f69e7b 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -122,6 +122,17 @@ public static void render(RenderEvent event, PathingBehavior behavior) { } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } + if (elytra.simulationLine != null && Baritone.settings().renderElytraSimulation.value) { + IRenderer.startLines(new Color(0x36CCDC), settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + for (int i = 0; i < elytra.simulationLine.size() - 1; i++) { + Vec3d src = elytra.simulationLine.get(i); + Vec3d dst = elytra.simulationLine.get(i + 1); + // Center line on viewer pos + buffer.pos(src.x, src.y, src.z).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(dst.x, dst.y, dst.z).color(color[0], color[1], color[2], color[3]).endVertex(); + } + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } // If there is a path calculation currently running, render the path calculation process From 1902e6c1f351caabe8035879f59a7c77dc6efdc1 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 24 Jun 2023 22:37:21 -0700 Subject: [PATCH 722/935] Reset `minimumBoostTicks` to 0 when not boosted --- src/main/java/baritone/behavior/ElytraBehavior.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index cb0355832..2ceea192a 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -550,6 +550,9 @@ private Solution solveAngles(final SolverContext context) { } private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final boolean isBoosted, final boolean forceUseFirework) { + if (!isBoosted) { + this.minimumBoostTicks = 0; + } if (this.remainingSetBackTicks > 0) { logDebug("waiting for elytraFireworkSetbackUseDelay: " + this.remainingSetBackTicks); return; From 9d1addd114ebc33c87aef59c13ce716a489caf2f Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 25 Jun 2023 15:28:06 -0700 Subject: [PATCH 723/935] Add `smoothLook` setting --- src/api/java/baritone/api/Settings.java | 1 + src/main/java/baritone/behavior/LookBehavior.java | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 960759fa2..5ec5b6ed4 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -58,6 +58,7 @@ public final class Settings { public final Setting renderHitboxRaytraces = new Setting<>(false); public final Setting renderElytraSimulation = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); + public final Setting smoothLook = new Setting<>(false); // Experimental Elytra Settings public final Setting experimentalTakeoff = new Setting<>(false); diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 9dd379771..f59d1be83 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -26,6 +26,7 @@ import baritone.api.utils.IPlayerContext; import baritone.api.utils.Rotation; import baritone.behavior.look.ForkableRandom; +import com.google.common.collect.EvictingQueue; import net.minecraft.network.play.client.CPacketPlayer; import java.util.Optional; @@ -51,9 +52,12 @@ public final class LookBehavior extends Behavior implements ILookBehavior { private final AimProcessor processor; + private final EvictingQueue smoothYawBuffer; + public LookBehavior(Baritone baritone) { super(baritone); this.processor = new AimProcessor(baritone.getPlayerContext()); + this.smoothYawBuffer = EvictingQueue.create(10); } @Override @@ -96,8 +100,14 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { case POST: { // Reset the player's rotations back to their original values if (this.prevRotation != null) { - ctx.player().rotationYaw = this.prevRotation.getYaw(); - ctx.player().rotationPitch = this.prevRotation.getPitch(); + if (Baritone.settings().smoothLook.value) { + ctx.player().rotationYaw = (float) this.smoothYawBuffer.stream() + .mapToDouble(d -> d).average().orElseGet(this.prevRotation::getYaw); + ctx.player().rotationPitch = this.prevRotation.getPitch(); + } else { + ctx.player().rotationYaw = this.prevRotation.getYaw(); + ctx.player().rotationPitch = this.prevRotation.getPitch(); + } this.prevRotation = null; } // The target is done being used for this game tick, so it can be invalidated From 9bd085644504897f05ef52ffb3401ed8aef5ea3d Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 25 Jun 2023 15:32:02 -0700 Subject: [PATCH 724/935] lol --- src/main/java/baritone/behavior/LookBehavior.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index f59d1be83..93ea561b5 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -101,6 +101,7 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { // Reset the player's rotations back to their original values if (this.prevRotation != null) { if (Baritone.settings().smoothLook.value) { + this.smoothYawBuffer.add(this.target.rotation.getYaw()); ctx.player().rotationYaw = (float) this.smoothYawBuffer.stream() .mapToDouble(d -> d).average().orElseGet(this.prevRotation::getYaw); ctx.player().rotationPitch = this.prevRotation.getPitch(); From 0981114b782f8de1d978f3372a16d8d64dad4271 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 13:55:18 -0500 Subject: [PATCH 725/935] Create `FireworkBoost` class for additional boost context Also initialize `boostedEntity` in `EntityFireworkRocket` if `null` since it's lazily initialized in `onUpdate()` --- .../baritone/launch/mixins/MixinEntity.java | 37 +++++++++++ .../mixins/MixinEntityFireworkRocket.java | 21 +++++- src/launch/resources/mixins.baritone.json | 1 + .../baritone/behavior/ElytraBehavior.java | 64 ++++++++++++++++--- .../utils/accessor/IEntityFireworkRocket.java | 1 + 5 files changed, 112 insertions(+), 12 deletions(-) create mode 100644 src/launch/java/baritone/launch/mixins/MixinEntity.java diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java new file mode 100644 index 000000000..a611507b8 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -0,0 +1,37 @@ +/* + * 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 net.minecraft.entity.Entity; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +/** + * @author Brady + */ +@Mixin(Entity.class) +public abstract class MixinEntity { + + @Shadow + public World world; + + @Shadow + protected EntityDataManager dataManager; +} diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java b/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java index 274e979a0..559ae0d54 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java @@ -18,18 +18,35 @@ package baritone.launch.mixins; import baritone.utils.accessor.IEntityFireworkRocket; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.network.datasync.DataParameter; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @Mixin(EntityFireworkRocket.class) -public abstract class MixinEntityFireworkRocket implements IEntityFireworkRocket { +public abstract class MixinEntityFireworkRocket extends MixinEntity implements IEntityFireworkRocket { + + @Shadow + @Final + private static DataParameter BOOSTED_ENTITY_ID; + @Shadow private EntityLivingBase boostedEntity; + @Shadow + public abstract boolean isAttachedToEntity(); + @Override public EntityLivingBase getBoostedEntity() { - return boostedEntity; + if (this.isAttachedToEntity() && this.boostedEntity == null) { + final Entity entity = this.world.getEntityByID(this.dataManager.get(BOOSTED_ENTITY_ID)); + if (entity instanceof EntityLivingBase) { + this.boostedEntity = (EntityLivingBase) entity; + } + } + return this.boostedEntity; } } diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 5c221de58..cbade3329 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -16,6 +16,7 @@ "MixinChunkProviderServer", "MixinChunkRenderContainer", "MixinChunkRenderWorker", + "MixinEntity", "MixinEntityFireworkRocket", "MixinEntityLivingBase", "MixinEntityPlayerSP", diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 2ceea192a..922d824de 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -462,7 +462,7 @@ public void onTick(TickEvent event) { this.tickUseFireworks( solution.context.start, solution.goingTo, - solution.context.isBoosted, + solution.context.boost.isBoosted(), solution.forceUseFirework ); } @@ -484,15 +484,14 @@ private Solution solveAngles(final SolverContext context) { final NetherPath path = context.path; final int playerNear = context.playerNear; final Vec3d start = context.start; - final boolean isBoosted = context.isBoosted; final boolean isInLava = ctx.player().isInLava(); Solution solution = null; for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) - int[] heights = isBoosted ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost + int[] heights = context.boost.isBoosted() ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost float[] interps = new float[] {1.0f, 0.75f, 0.5f, 0.25f}; - int steps = relaxation < 2 ? isBoosted ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; + int steps = relaxation < 2 ? context.boost.isBoosted() ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); int minStep = playerNear; @@ -590,14 +589,17 @@ private final class SolverContext { public final NetherPath path; public final int playerNear; public final Vec3d start; - public final boolean isBoosted; + public final FireworkBoost boost; public final IAimProcessor aimProcessor; public SolverContext(boolean async) { this.path = ElytraBehavior.this.pathManager.getPath(); this.playerNear = ElytraBehavior.this.pathManager.getNear(); this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); - this.isBoosted = ElytraBehavior.this.getAttachedFirework().isPresent(); + this.boost = new FireworkBoost( + ElytraBehavior.this.getAttachedFirework().orElse(null), + ElytraBehavior.this.minimumBoostTicks + ); ITickableAimProcessor aim = ElytraBehavior.this.baritone.getLookBehavior().getAimProcessor().fork(); if (async) { @@ -620,7 +622,49 @@ public boolean equals(Object o) { return this.path == other.path // Contents aren't modified, just compare by reference && this.playerNear == other.playerNear && Objects.equals(this.start, other.start) - && this.isBoosted == other.isBoosted; + && Objects.equals(this.boost, other.boost); + } + } + + private static final class FireworkBoost { + + private final EntityFireworkRocket firework; + private final int minimumBoostTicks; + private final int maximumBoostTicks; + + public FireworkBoost(final EntityFireworkRocket firework, final int minimumBoostTicks) { + this.firework = firework; + + // this.lifetime = 10 * i + this.rand.nextInt(6) + this.rand.nextInt(7); + this.minimumBoostTicks = minimumBoostTicks; + this.maximumBoostTicks = minimumBoostTicks + 11; + } + + public boolean isBoosted() { + return this.firework != null; + } + + public int getGuaranteedBoostTicks() { + return this.isBoosted() ? Math.max(0, this.minimumBoostTicks - this.firework.ticksExisted) : 0; + } + + public int getMaximumBoostTicks() { + return this.isBoosted() ? Math.max(0, this.maximumBoostTicks - this.firework.ticksExisted) : 0; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || o.getClass() != FireworkBoost.class) { + return false; + } + + FireworkBoost other = (FireworkBoost) o; + return Objects.equals(this.firework, other.firework) + && this.minimumBoostTicks == other.minimumBoostTicks + && this.maximumBoostTicks == other.maximumBoostTicks; } } @@ -743,7 +787,7 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { } private Pair solvePitch(SolverContext context, Vec3d goalDelta, int steps, int relaxation, boolean ignoreLava) { - final Float pitch = this.solvePitch(context, goalDelta, steps, relaxation == 2, context.isBoosted, ignoreLava); + final Float pitch = this.solvePitch(context, goalDelta, steps, relaxation == 2, context.boost.isBoosted(), ignoreLava); if (pitch != null) { return new Pair<>(pitch, false); } @@ -827,13 +871,13 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool return bestPitch; } - private static Vec3d step(final Vec3d motion, final Rotation rotation, final boolean firework) { + private static Vec3d step(final Vec3d motion, final Rotation rotation, final boolean applyFireworkBoost) { double motionX = motion.x; double motionY = motion.y; double motionZ = motion.z; final Vec3d lookDirection = RotationUtils.calcLookDirectionFromRotation(rotation); - if (firework) { + if (applyFireworkBoost) { // See EntityFireworkRocket motionX += lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motionX) * 0.5; motionY += lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motionY) * 0.5; diff --git a/src/main/java/baritone/utils/accessor/IEntityFireworkRocket.java b/src/main/java/baritone/utils/accessor/IEntityFireworkRocket.java index 86c96acd9..1b22d1ffd 100644 --- a/src/main/java/baritone/utils/accessor/IEntityFireworkRocket.java +++ b/src/main/java/baritone/utils/accessor/IEntityFireworkRocket.java @@ -20,5 +20,6 @@ import net.minecraft.entity.EntityLivingBase; public interface IEntityFireworkRocket { + EntityLivingBase getBoostedEntity(); } From d244a3904036ece828534e5aa8b30babfc038f03 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 13:57:24 -0500 Subject: [PATCH 726/935] Make `MixinEntityLivingBase` extend `MixinEntity` --- .../java/baritone/launch/mixins/MixinEntity.java | 9 +++++++++ .../baritone/launch/mixins/MixinEntityLivingBase.java | 10 ++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index a611507b8..c4f99acbd 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -34,4 +34,13 @@ public abstract class MixinEntity { @Shadow protected EntityDataManager dataManager; + + @Shadow + public float rotationPitch; + + @Shadow + public float rotationYaw; + + @Shadow + public abstract void moveRelative(float strafe, float up, float forward, float friction); } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index f8544dd2f..db2faa940 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -21,9 +21,7 @@ import baritone.api.IBaritone; import baritone.api.event.events.RotationMoveEvent; import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -40,7 +38,7 @@ * @since 9/10/2018 */ @Mixin(EntityLivingBase.class) -public abstract class MixinEntityLivingBase extends Entity { +public abstract class MixinEntityLivingBase extends MixinEntity { /** * Event called to override the movement direction when jumping @@ -51,10 +49,6 @@ public abstract class MixinEntityLivingBase extends Entity { @Unique private RotationMoveEvent elytraRotationEvent; - public MixinEntityLivingBase(World worldIn) { - super(worldIn); - } - @Inject( method = "jump", at = @At("HEAD") @@ -123,7 +117,7 @@ private void onPostElytraMove(float strafe, float vertical, float forward, Callb private void onMoveRelative(EntityLivingBase self, float strafe, float up, float forward, float friction) { Optional baritone = this.getBaritone(); if (!baritone.isPresent()) { - moveRelative(strafe, up, forward, friction); + this.moveRelative(strafe, up, forward, friction); return; } From c18715b8d7a27470e2b3c345f5bbb97faae4ac99 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 14:00:38 -0500 Subject: [PATCH 727/935] Reset `minimumBoostTicks` to 0 earlier --- src/main/java/baritone/behavior/ElytraBehavior.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 922d824de..22359a3da 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -404,6 +404,9 @@ public void onTick(TickEvent event) { if (this.remainingSetBackTicks > 0) { this.remainingSetBackTicks--; } + if (!this.getAttachedFirework().isPresent()) { + this.minimumBoostTicks = 0; + } // Reset rendered elements this.clearLines.clear(); @@ -549,9 +552,6 @@ private Solution solveAngles(final SolverContext context) { } private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final boolean isBoosted, final boolean forceUseFirework) { - if (!isBoosted) { - this.minimumBoostTicks = 0; - } if (this.remainingSetBackTicks > 0) { logDebug("waiting for elytraFireworkSetbackUseDelay: " + this.remainingSetBackTicks); return; From 0b5a310f1835f841e2b445b5f778eca06b265598 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 15:35:40 -0500 Subject: [PATCH 728/935] Move firework boost calculation into `solvePitch` --- .../baritone/behavior/ElytraBehavior.java | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 22359a3da..e1a134725 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -69,6 +69,11 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H */ private int remainingFireworkTicks; + /** + * Remaining cool-down ticks after the player's position and rotation are reset by the server + */ + private int remainingSetBackTicks; + /** * The most recent minimum number of firework boost ticks, equivalent to {@code 10 * (1 + Flight)} *

@@ -76,7 +81,6 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H */ private int minimumBoostTicks; - private int remainingSetBackTicks; private BlockStateInterface bsi; private Future solver; @@ -836,7 +840,9 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool final Rotation rotation = aimProcessor.nextRotation( RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, delta, ctx.playerRotations()).withPitch(pitch) ); - motion = step(motion, rotation, firework && i > 0); + final Vec3d lookDirection = RotationUtils.calcLookDirectionFromRotation(rotation); + + motion = step(motion, lookDirection, rotation.getPitch()); delta = delta.subtract(motion); // Collision box while the player is in motion, with additional padding for safety @@ -855,6 +861,15 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool hitbox = hitbox.offset(motion.x, motion.y, motion.z); totalMotion = totalMotion.add(motion); line.add(totalMotion); + + if (firework) { + // See EntityFireworkRocket + motion = motion.add( + lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motion.x) * 0.5, + lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motion.y) * 0.5, + lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motion.z) * 0.5 + ); + } } double directionalGoodness = goalDirection.dotProduct(totalMotion.normalize()); // tried to incorporate a "speedGoodness" but it kept making it do stupid stuff (aka always losing altitude) @@ -871,20 +886,12 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool return bestPitch; } - private static Vec3d step(final Vec3d motion, final Rotation rotation, final boolean applyFireworkBoost) { + private static Vec3d step(final Vec3d motion, final Vec3d lookDirection, final float pitch) { double motionX = motion.x; double motionY = motion.y; double motionZ = motion.z; - final Vec3d lookDirection = RotationUtils.calcLookDirectionFromRotation(rotation); - if (applyFireworkBoost) { - // See EntityFireworkRocket - motionX += lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motionX) * 0.5; - motionY += lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motionY) * 0.5; - motionZ += lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motionZ) * 0.5; - } - - float pitchRadians = rotation.getPitch() * RotationUtils.DEG_TO_RAD_F; + float pitchRadians = pitch * RotationUtils.DEG_TO_RAD_F; double pitchBase2 = Math.sqrt(lookDirection.x * lookDirection.x + lookDirection.z * lookDirection.z); double flatMotion = Math.sqrt(motionX * motionX + motionZ * motionZ); double thisIsAlwaysOne = lookDirection.length(); @@ -962,4 +969,3 @@ private static boolean isOpenBlockSpace(IPlayerContext ctx, BlockPos pos) { } } } - From f0148a625e790e155884d2a8ddb2a992c98a4cf4 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 16:04:05 -0500 Subject: [PATCH 729/935] Move `steps` into `solvePitch` --- src/main/java/baritone/behavior/ElytraBehavior.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index e1a134725..7deea42b9 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -498,7 +498,6 @@ private Solution solveAngles(final SolverContext context) { for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) int[] heights = context.boost.isBoosted() ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost float[] interps = new float[] {1.0f, 0.75f, 0.5f, 0.25f}; - int steps = relaxation < 2 ? context.boost.isBoosted() ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); int minStep = playerNear; @@ -539,7 +538,7 @@ private Solution solveAngles(final SolverContext context) { // Yaw is trivial, just calculate the rotation required to face the destination final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); - final Pair pitch = this.solvePitch(context, dest.subtract(start), steps, relaxation, isInLava); + final Pair pitch = this.solvePitch(context, dest.subtract(start), relaxation, isInLava); if (pitch.first() == null) { solution = new Solution(context, new Rotation(yaw, ctx.playerRotations().getPitch()), null, false, false); continue; @@ -790,7 +789,9 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { } } - private Pair solvePitch(SolverContext context, Vec3d goalDelta, int steps, int relaxation, boolean ignoreLava) { + private Pair solvePitch(SolverContext context, Vec3d goalDelta, int relaxation, boolean ignoreLava) { + final int steps = relaxation < 2 ? context.boost.isBoosted() ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; + final Float pitch = this.solvePitch(context, goalDelta, steps, relaxation == 2, context.boost.isBoosted(), ignoreLava); if (pitch != null) { return new Pair<>(pitch, false); From db0bfbe7229df54260d3dda30995d33552672c95 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 16:12:56 -0500 Subject: [PATCH 730/935] Move elytra simulation into new method --- .../baritone/behavior/ElytraBehavior.java | 107 +++++++++--------- 1 file changed, 54 insertions(+), 53 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 7deea42b9..ef8134c2a 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -807,7 +807,8 @@ private Pair solvePitch(SolverContext context, Vec3d goalDelta, return new Pair<>(null, false); } - private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, boolean desperate, boolean firework, boolean ignoreLava) { + private Float solvePitch(final SolverContext context, final Vec3d goalDelta, final int steps, + final boolean desperate, final boolean firework, final boolean ignoreLava) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch @@ -819,66 +820,18 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool double bestDot = Double.NEGATIVE_INFINITY; List bestLine = null; - final Vec3d initialMotion = ctx.playerMotion(); - final AxisAlignedBB initialBB = ctx.player().getEntityBoundingBox(); final float minPitch = desperate ? -90 : Math.max(goodPitch - Baritone.settings().elytraPitchRange.value, -89); final float maxPitch = desperate ? 90 : Math.min(goodPitch + Baritone.settings().elytraPitchRange.value, 89); - outer: for (float pitch = minPitch; pitch <= maxPitch; pitch++) { - final ITickableAimProcessor aimProcessor = context.aimProcessor.fork(); - Vec3d delta = goalDelta; - Vec3d motion = initialMotion; - AxisAlignedBB hitbox = initialBB; - Vec3d totalMotion = Vec3d.ZERO; - List line = new ArrayList<>(); - line.add(totalMotion); - - for (int i = 0; i < steps; i++) { - if (MC_1_12_Collision_Fix.bonk(ctx, hitbox)) { - continue outer; - } - final Rotation rotation = aimProcessor.nextRotation( - RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, delta, ctx.playerRotations()).withPitch(pitch) - ); - final Vec3d lookDirection = RotationUtils.calcLookDirectionFromRotation(rotation); - - motion = step(motion, lookDirection, rotation.getPitch()); - delta = delta.subtract(motion); - - // Collision box while the player is in motion, with additional padding for safety - final AxisAlignedBB inMotion = hitbox.expand(motion.x, motion.y, motion.z).grow(0.01); - - for (int x = MathHelper.floor(inMotion.minX); x < MathHelper.ceil(inMotion.maxX); x++) { - for (int y = MathHelper.floor(inMotion.minY); y < MathHelper.ceil(inMotion.maxY); y++) { - for (int z = MathHelper.floor(inMotion.minZ); z < MathHelper.ceil(inMotion.maxZ); z++) { - if (!this.passable(x, y, z, ignoreLava)) { - continue outer; - } - } - } - } - - hitbox = hitbox.offset(motion.x, motion.y, motion.z); - totalMotion = totalMotion.add(motion); - line.add(totalMotion); - - if (firework) { - // See EntityFireworkRocket - motion = motion.add( - lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motion.x) * 0.5, - lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motion.y) * 0.5, - lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motion.z) * 0.5 - ); - } + Vec3d totalMotion = this.simulate(context.aimProcessor.fork(), goalDelta, pitch, steps, firework, ignoreLava); + if (totalMotion == null) { + continue; } - double directionalGoodness = goalDirection.dotProduct(totalMotion.normalize()); - // tried to incorporate a "speedGoodness" but it kept making it do stupid stuff (aka always losing altitude) - double goodness = directionalGoodness; + double goodness = goalDirection.dotProduct(totalMotion.normalize()); if (goodness > bestDot) { bestDot = goodness; bestPitch = pitch; - bestLine = line; } } if (bestLine != null) { @@ -887,6 +840,54 @@ private Float solvePitch(SolverContext context, Vec3d goalDelta, int steps, bool return bestPitch; } + private Vec3d simulate(final ITickableAimProcessor aimProcessor, final Vec3d goalDelta, final float pitch, + final int ticks, final boolean firework, final boolean ignoreLava) { + Vec3d delta = goalDelta; + Vec3d motion = ctx.playerMotion(); + AxisAlignedBB hitbox = ctx.player().getEntityBoundingBox(); + Vec3d totalMotion = Vec3d.ZERO; + + for (int i = 0; i < ticks; i++) { + if (MC_1_12_Collision_Fix.bonk(ctx, hitbox)) { + return null; + } + final Rotation rotation = aimProcessor.nextRotation( + RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, delta, ctx.playerRotations()).withPitch(pitch) + ); + final Vec3d lookDirection = RotationUtils.calcLookDirectionFromRotation(rotation); + + motion = step(motion, lookDirection, rotation.getPitch()); + delta = delta.subtract(motion); + + // Collision box while the player is in motion, with additional padding for safety + final AxisAlignedBB inMotion = hitbox.expand(motion.x, motion.y, motion.z).grow(0.01); + + for (int x = MathHelper.floor(inMotion.minX); x < MathHelper.ceil(inMotion.maxX); x++) { + for (int y = MathHelper.floor(inMotion.minY); y < MathHelper.ceil(inMotion.maxY); y++) { + for (int z = MathHelper.floor(inMotion.minZ); z < MathHelper.ceil(inMotion.maxZ); z++) { + if (!this.passable(x, y, z, ignoreLava)) { + return null; + } + } + } + } + + hitbox = hitbox.offset(motion.x, motion.y, motion.z); + totalMotion = totalMotion.add(motion); + + if (firework) { + // See EntityFireworkRocket + motion = motion.add( + lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motion.x) * 0.5, + lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motion.y) * 0.5, + lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motion.z) * 0.5 + ); + } + } + + return totalMotion; + } + private static Vec3d step(final Vec3d motion, final Vec3d lookDirection, final float pitch) { double motionX = motion.x; double motionY = motion.y; From 452b2c278b0fe17f84b31803af1e55d24d6b2cc8 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 16:21:15 -0500 Subject: [PATCH 731/935] Fix `renderElytraSimulation` --- .../baritone/behavior/ElytraBehavior.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index ef8134c2a..c60f920a9 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -824,14 +824,23 @@ private Float solvePitch(final SolverContext context, final Vec3d goalDelta, fin final float maxPitch = desperate ? 90 : Math.min(goodPitch + Baritone.settings().elytraPitchRange.value, 89); for (float pitch = minPitch; pitch <= maxPitch; pitch++) { - Vec3d totalMotion = this.simulate(context.aimProcessor.fork(), goalDelta, pitch, steps, firework, ignoreLava); - if (totalMotion == null) { + final List displacement = this.simulate( + context.aimProcessor.fork(), + goalDelta, + pitch, + steps, + firework ? Integer.MAX_VALUE : 0, + ignoreLava + ); + if (displacement == null) { continue; } - double goodness = goalDirection.dotProduct(totalMotion.normalize()); + final Vec3d result = displacement.get(displacement.size() - 1); + double goodness = goalDirection.dotProduct(result.normalize()); if (goodness > bestDot) { bestDot = goodness; bestPitch = pitch; + bestLine = displacement; } } if (bestLine != null) { @@ -840,12 +849,13 @@ private Float solvePitch(final SolverContext context, final Vec3d goalDelta, fin return bestPitch; } - private Vec3d simulate(final ITickableAimProcessor aimProcessor, final Vec3d goalDelta, final float pitch, - final int ticks, final boolean firework, final boolean ignoreLava) { + private List simulate(final ITickableAimProcessor aimProcessor, final Vec3d goalDelta, final float pitch, + final int ticks, int ticksBoosted, final boolean ignoreLava) { Vec3d delta = goalDelta; Vec3d motion = ctx.playerMotion(); AxisAlignedBB hitbox = ctx.player().getEntityBoundingBox(); - Vec3d totalMotion = Vec3d.ZERO; + List displacement = new ArrayList<>(); + displacement.add(Vec3d.ZERO); for (int i = 0; i < ticks; i++) { if (MC_1_12_Collision_Fix.bonk(ctx, hitbox)) { @@ -872,10 +882,10 @@ private Vec3d simulate(final ITickableAimProcessor aimProcessor, final Vec3d goa } } - hitbox = hitbox.offset(motion.x, motion.y, motion.z); - totalMotion = totalMotion.add(motion); + hitbox = hitbox.offset(motion); + displacement.add(displacement.get(displacement.size() - 1).add(motion)); - if (firework) { + if (ticksBoosted-- > 0) { // See EntityFireworkRocket motion = motion.add( lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motion.x) * 0.5, @@ -885,7 +895,7 @@ private Vec3d simulate(final ITickableAimProcessor aimProcessor, final Vec3d goa } } - return totalMotion; + return displacement; } private static Vec3d step(final Vec3d motion, final Vec3d lookDirection, final float pitch) { From 3e94cac56768042ab9d39a409fdbe9d5c98929af Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 16:25:21 -0500 Subject: [PATCH 732/935] clarity --- src/main/java/baritone/behavior/ElytraBehavior.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index c60f920a9..3f056d7e6 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -789,16 +789,18 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { } } - private Pair solvePitch(SolverContext context, Vec3d goalDelta, int relaxation, boolean ignoreLava) { - final int steps = relaxation < 2 ? context.boost.isBoosted() ? 5 : Baritone.settings().elytraSimulationTicks.value : 3; + private Pair solvePitch(final SolverContext context, final Vec3d goalDelta, + final int relaxation, final boolean ignoreLava) { + final boolean desperate = relaxation == 2; + final int steps = desperate ? 3 : context.boost.isBoosted() ? 5 : Baritone.settings().elytraSimulationTicks.value; - final Float pitch = this.solvePitch(context, goalDelta, steps, relaxation == 2, context.boost.isBoosted(), ignoreLava); + final Float pitch = this.solvePitch(context, goalDelta, steps, desperate, context.boost.isBoosted(), ignoreLava); if (pitch != null) { return new Pair<>(pitch, false); } if (Baritone.settings().experimentalTakeoff.value && relaxation > 0) { - final Float usingFirework = this.solvePitch(context, goalDelta, steps, relaxation == 2, true, ignoreLava); + final Float usingFirework = this.solvePitch(context, goalDelta, steps, desperate, true, ignoreLava); if (usingFirework != null) { return new Pair<>(usingFirework, true); } From 04a5a1a620ffeb3b6a92ed9eed504a58f3e45f7d Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 16:58:29 -0500 Subject: [PATCH 733/935] Replace `bool firework` with `ticksBoosted` in `solvePitch` --- .../java/baritone/behavior/ElytraBehavior.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 3f056d7e6..6a7e98f83 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -792,15 +792,17 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { private Pair solvePitch(final SolverContext context, final Vec3d goalDelta, final int relaxation, final boolean ignoreLava) { final boolean desperate = relaxation == 2; - final int steps = desperate ? 3 : context.boost.isBoosted() ? 5 : Baritone.settings().elytraSimulationTicks.value; + final int ticks = desperate ? 3 : context.boost.isBoosted() ? 5 : Baritone.settings().elytraSimulationTicks.value; + final int ticksBoosted = context.boost.isBoosted() ? ticks : 0; - final Float pitch = this.solvePitch(context, goalDelta, steps, desperate, context.boost.isBoosted(), ignoreLava); + final Float pitch = this.solvePitch(context, goalDelta, ticks, ticksBoosted, desperate, ignoreLava); if (pitch != null) { return new Pair<>(pitch, false); } if (Baritone.settings().experimentalTakeoff.value && relaxation > 0) { - final Float usingFirework = this.solvePitch(context, goalDelta, steps, desperate, true, ignoreLava); + // Simulate as if we were boosted for the entire duration + final Float usingFirework = this.solvePitch(context, goalDelta, ticks, ticks, desperate, ignoreLava); if (usingFirework != null) { return new Pair<>(usingFirework, true); } @@ -809,8 +811,8 @@ private Pair solvePitch(final SolverContext context, final Vec3d return new Pair<>(null, false); } - private Float solvePitch(final SolverContext context, final Vec3d goalDelta, final int steps, - final boolean desperate, final boolean firework, final boolean ignoreLava) { + private Float solvePitch(final SolverContext context, final Vec3d goalDelta, final int ticks, + final int ticksBoosted, final boolean desperate, final boolean ignoreLava) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch @@ -830,8 +832,8 @@ private Float solvePitch(final SolverContext context, final Vec3d goalDelta, fin context.aimProcessor.fork(), goalDelta, pitch, - steps, - firework ? Integer.MAX_VALUE : 0, + ticks, + ticksBoosted, ignoreLava ); if (displacement == null) { From 02fc62f1c474b14553cc803eb912c519a8a1fd42 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 18:37:06 -0500 Subject: [PATCH 734/935] Stop simulation when goal reached --- src/main/java/baritone/behavior/ElytraBehavior.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 6a7e98f83..abfad1ed9 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -854,7 +854,7 @@ private Float solvePitch(final SolverContext context, final Vec3d goalDelta, fin } private List simulate(final ITickableAimProcessor aimProcessor, final Vec3d goalDelta, final float pitch, - final int ticks, int ticksBoosted, final boolean ignoreLava) { + final int ticks, int ticksBoosted, final boolean ignoreLava) { Vec3d delta = goalDelta; Vec3d motion = ctx.playerMotion(); AxisAlignedBB hitbox = ctx.player().getEntityBoundingBox(); @@ -865,6 +865,9 @@ private List simulate(final ITickableAimProcessor aimProcessor, final Vec if (MC_1_12_Collision_Fix.bonk(ctx, hitbox)) { return null; } + if (delta.lengthSquared() < 1) { + break; + } final Rotation rotation = aimProcessor.nextRotation( RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, delta, ctx.playerRotations()).withPitch(pitch) ); From 4ccaf681c5aae01e76892f340f0debc290327a11 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 27 Jun 2023 02:54:53 -0500 Subject: [PATCH 735/935] Somewhat functional `elytraAutoJump`, but mostly scuffed --- src/api/java/baritone/api/Settings.java | 1 + src/main/java/baritone/Baritone.java | 1 + .../baritone/behavior/ElytraBehavior.java | 177 +++++++++++++++++- 3 files changed, 171 insertions(+), 8 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 5ec5b6ed4..0842ac10a 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -58,6 +58,7 @@ public final class Settings { public final Setting renderHitboxRaytraces = new Setting<>(false); public final Setting renderElytraSimulation = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); +` public final Setting elytraAutoJump = new Setting<>(false); public final Setting smoothLook = new Setting<>(false); // Experimental Elytra Settings diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 5723cc422..dcbad33f5 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -121,6 +121,7 @@ public class Baritone implements IBaritone { this.farmProcess = this.registerProcess(FarmProcess::new); this.inventoryPauserProcess = this.registerProcess(InventoryPauserProcess::new); this.registerProcess(BackfillProcess::new); + this.registerProcess(__ -> this.elytraBehavior.new ElytraProcess()); // pain } this.worldProvider = new WorldProvider(this); diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index abfad1ed9..1720cf24e 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -22,11 +22,19 @@ import baritone.api.behavior.look.IAimProcessor; import baritone.api.behavior.look.ITickableAimProcessor; import baritone.api.event.events.*; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalGetToBlock; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; import baritone.api.utils.*; +import baritone.api.utils.input.Input; +import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.elytra.NetherPathfinderContext; import baritone.behavior.elytra.NetherPath; import baritone.behavior.elytra.PathCalculationException; import baritone.behavior.elytra.UnpackedSegment; +import baritone.cache.FasterWorldScanner; import baritone.utils.BlockStateInterface; import baritone.utils.accessor.IEntityFireworkRocket; import net.minecraft.block.material.Material; @@ -82,6 +90,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private int minimumBoostTicks; private BlockStateInterface bsi; + private BlockPos destination; private Future solver; private boolean solveNextTick; @@ -97,7 +106,6 @@ public ElytraBehavior(Baritone baritone) { private final class PathManager { - private BlockPos destination; private NetherPath path; private boolean completePath; private boolean recalculating; @@ -128,10 +136,13 @@ public void tick() { this.attemptNextSegment(); } - public void pathToDestination(final BlockPos destination) { - this.destination = destination; + public void pathToDestination() { + this.pathToDestination(ctx.playerFeet()); + } + + public void pathToDestination(final BlockPos from) { final long start = System.nanoTime(); - this.path0(ctx.playerFeet(), destination, UnaryOperator.identity()) + this.path0(from, ElytraBehavior.this.destination, UnaryOperator.identity()) .thenRun(() -> { final double distance = this.path.get(0).distanceTo(this.path.get(this.path.size() - 1)); if (this.completePath) { @@ -185,7 +196,7 @@ public void pathNextSegment(final int afterIncl) { final List before = this.path.subList(0, afterIncl + 1); final long start = System.nanoTime(); - this.path0(this.path.get(afterIncl), this.destination, segment -> segment.prepend(before.stream())) + this.path0(this.path.get(afterIncl), ElytraBehavior.this.destination, segment -> segment.prepend(before.stream())) .thenRun(() -> { final int recompute = this.path.size() - before.size() - 1; final double distance = this.path.get(0).distanceTo(this.path.get(recompute)); @@ -210,7 +221,6 @@ public void pathNextSegment(final int afterIncl) { } public void clear() { - this.destination = null; this.path = NetherPath.emptyPath(); this.completePath = true; this.recalculating = false; @@ -362,11 +372,15 @@ public void onReceivePacket(PacketEvent event) { @Override public void pathTo(BlockPos destination) { - this.pathManager.pathToDestination(destination); + this.destination = destination; + if (!Baritone.settings().elytraAutoJump.value || ctx.player().isElytraFlying()) { + this.pathManager.pathToDestination(); + } } @Override public void cancel() { + this.destination = null; this.visiblePath = Collections.emptyList(); this.pathManager.clear(); this.aimPos = null; @@ -435,7 +449,6 @@ public void onTick(TickEvent event) { if (!ctx.player().isElytraFlying()) { return; } - baritone.getInputOverrideHandler().clearAllKeys(); if (ctx.player().collidedHorizontally) { logDirect("hbonk"); @@ -987,4 +1000,152 @@ private static boolean isOpenBlockSpace(IPlayerContext ctx, BlockPos pos) { return !ctx.world().getBlockState(pos).isNormalCube() && !ctx.world().getBlockState(pos.up()).isNormalCube(); } } + + public final class ElytraProcess implements IBaritoneProcess { + + private State state; + private Goal goal; + + @Override + public boolean isActive() { + return ElytraBehavior.this.destination != null; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (calcFailed) { + onLostControl(); + logDirect("Failed to get to jump off spot, canceling"); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + + if (ctx.player().isElytraFlying()) { + this.state = State.FLYING; + this.goal = null; + baritone.getInputOverrideHandler().clearAllKeys(); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + + if (!Baritone.settings().elytraAutoJump.value) { + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + + // We were flying, but we're not anymore, reset the state + if (this.state == State.FLYING) { + this.state = State.GET_TO_JUMP; + } + + if (this.state == State.GET_TO_JUMP) { + if (this.goal == null) { + final BlockPos jumpOff = this.findJumpOffSpot(); + if (jumpOff == null) { + onLostControl(); + logDirect("Couldn't find a suitable spot to jump off of, canceling"); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + this.goal = new GoalGetToBlock(jumpOff); + ElytraBehavior.this.pathManager.pathToDestination(jumpOff.add(0, -4, 0)); + } + if (this.goal.isInGoal(ctx.playerFeet())) { + this.state = State.START_FLYING; + } else { + return new PathingCommand(this.goal, PathingCommandType.SET_GOAL_AND_PATH); + } + } + + if (this.state == State.START_FLYING && isSafeToCancel && !ElytraBehavior.this.pathManager.getPath().isEmpty()) { + baritone.getLookBehavior().updateTarget(RotationUtils.calcRotationFromVec3d( + ctx.playerHead(), + VecUtils.getBlockPosCenter(((IGoalRenderPos) this.goal).getGoalPos()), + ctx.playerRotations() + ), false); + baritone.getInputOverrideHandler().setInputForceState(Input.MOVE_FORWARD, true); + if (ctx.player().fallDistance > 0.0f) { + baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); + } + } + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + + @Override + public boolean isTemporary() { + return false; + } + + @Override + public void onLostControl() { + this.goal = null; + this.state = State.GET_TO_JUMP; + ElytraBehavior.this.cancel(); + } + + @Override + public double priority() { + return 10; + } + + @Override + public String displayName0() { + return "Elytra"; + } + + // ok... now this.. is disgusting + // TODO: make less scuffed + private BlockPos findJumpOffSpot() { + BlockPos best = null; + final BetterBlockPos feet = ctx.playerFeet(); + final List nearby = FasterWorldScanner.getChunkRange(feet.x >> 4, feet.z >> 4, 3); + for (ChunkPos pos : nearby) { + final Chunk chunk = ctx.world().getChunk(pos.x, pos.z); + int[][] obstruction = new int[16][16]; + for (int y0 = 0; y0 < 8; y0++) { + for (int z = 0; z < 16; z++) { + for (int x = 0; x < 16; x++) { + int y = feet.y - y0; + if (chunk.getBlockState(x, y, z).getMaterial() != Material.AIR) { + if (obstruction[x][z] == 0 || obstruction[x][z] > y0 + 1) { + obstruction[x][z] = y0 + 1; + } + } + } + } + } + for (int x = 0; x < 16; x++) { + for (int z = 0; z < 16; z++) { + if (obstruction[x][z] != 0) { + continue; + } + + final int[] adjacent = new int[4]; + if (x > 0) adjacent[0] = obstruction[x - 1][z]; + if (z > 0) adjacent[1] = obstruction[x][z - 1]; + if (x < 15) adjacent[2] = obstruction[x + 1][z]; + if (z < 15) adjacent[3] = obstruction[x][z + 1]; + final OptionalInt minLevel = Arrays.stream(adjacent).filter(i -> i != 0).min(); + + if (minLevel.isPresent() && minLevel.getAsInt() <= 4) { + final int yActual = feet.y - minLevel.getAsInt() + 2; // lol + // The target spot itself is clear + if (chunk.getBlockState(x, yActual, z).getMaterial() != Material.AIR + || chunk.getBlockState(x, yActual + 1, z).getMaterial() != Material.AIR) { + continue; + } + // lessgooo + final BlockPos target = new BlockPos(chunk.x << 4 | x, yActual, chunk.z << 4 | z); + if (best == null || target.distanceSq(feet) < best.distanceSq(feet)) { + best = target; + } + } + } + } + } + return best; + } + } + + private enum State { + GET_TO_JUMP, + START_FLYING, + FLYING + } } From ff12832a216c1c7b74375601e2bb16fa19cb8fd8 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 27 Jun 2023 12:30:41 -0500 Subject: [PATCH 736/935] whoops --- src/api/java/baritone/api/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 0842ac10a..47643245d 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -58,7 +58,7 @@ public final class Settings { public final Setting renderHitboxRaytraces = new Setting<>(false); public final Setting renderElytraSimulation = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); -` public final Setting elytraAutoJump = new Setting<>(false); + public final Setting elytraAutoJump = new Setting<>(false); public final Setting smoothLook = new Setting<>(false); // Experimental Elytra Settings From 3b31387092a7fa6e05ad3b025d2e8c6e00eecb53 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 27 Jun 2023 13:02:01 -0500 Subject: [PATCH 737/935] Render simulation line from player pos --- .../java/baritone/utils/PathRenderer.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index da2f69e7b..d09567914 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -111,25 +111,28 @@ public static void render(RenderEvent event, PathingBehavior behavior) { if (!elytra.clearLines.isEmpty() && Baritone.settings().renderRaytraces.value) { IRenderer.startLines(Color.GREEN, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); for (Pair line : elytra.clearLines) { - emitLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); + emitLine(line.first(), line.second()); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } if (!elytra.blockedLines.isEmpty() && Baritone.settings().renderRaytraces.value) { IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); for (Pair line : elytra.blockedLines) { - emitLine(line.first().x, line.first().y, line.first().z, line.second().x, line.second().y, line.second().z); + emitLine(line.first(), line.second()); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } if (elytra.simulationLine != null && Baritone.settings().renderElytraSimulation.value) { IRenderer.startLines(new Color(0x36CCDC), settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + final Vec3d offset = new Vec3d( + ctx.player().prevPosX + (ctx.player().posX - ctx.player().prevPosX) * partialTicks, + ctx.player().prevPosY + (ctx.player().posY - ctx.player().prevPosY) * partialTicks, + ctx.player().prevPosZ + (ctx.player().posZ - ctx.player().prevPosZ) * partialTicks + ); for (int i = 0; i < elytra.simulationLine.size() - 1; i++) { - Vec3d src = elytra.simulationLine.get(i); - Vec3d dst = elytra.simulationLine.get(i + 1); - // Center line on viewer pos - buffer.pos(src.x, src.y, src.z).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(dst.x, dst.y, dst.z).color(color[0], color[1], color[2], color[3]).endVertex(); + final Vec3d src = elytra.simulationLine.get(i).add(offset); + final Vec3d dst = elytra.simulationLine.get(i + 1).add(offset); + emitLine(src, dst); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } @@ -194,6 +197,10 @@ private static void drawPath(List positions, int startIndex, Col IRenderer.endLines(settings.renderPathIgnoreDepth.value); } + private static void emitLine(Vec3d start, Vec3d end) { + emitLine(start.x, start.y, start.z, end.x, end.y, end.z); + } + private static void emitLine(double x1, double y1, double z1, double x2, double y2, double z2) { double vpX = renderManager.viewerPosX; double vpY = renderManager.viewerPosY; From c48de3286025e54fb813f6133f0993c13c3a560d Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 27 Jun 2023 16:31:08 -0500 Subject: [PATCH 738/935] `PitchResult` --- .../baritone/behavior/ElytraBehavior.java | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 1720cf24e..048a00e12 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -684,6 +684,19 @@ public boolean equals(Object o) { } } + private static final class PitchResult { + + public final float pitch; + public final double dot; + public final List steps; + + public PitchResult(float pitch, double dot, List steps) { + this.pitch = pitch; + this.dot = dot; + this.steps = steps; + } + } + private static final class Solution { public final SolverContext context; @@ -808,24 +821,24 @@ private Pair solvePitch(final SolverContext context, final Vec3d final int ticks = desperate ? 3 : context.boost.isBoosted() ? 5 : Baritone.settings().elytraSimulationTicks.value; final int ticksBoosted = context.boost.isBoosted() ? ticks : 0; - final Float pitch = this.solvePitch(context, goalDelta, ticks, ticksBoosted, desperate, ignoreLava); + final PitchResult pitch = this.solvePitch(context, goalDelta, ticks, ticksBoosted, desperate, ignoreLava); if (pitch != null) { - return new Pair<>(pitch, false); + return new Pair<>(pitch.pitch, false); } if (Baritone.settings().experimentalTakeoff.value && relaxation > 0) { // Simulate as if we were boosted for the entire duration - final Float usingFirework = this.solvePitch(context, goalDelta, ticks, ticks, desperate, ignoreLava); + final PitchResult usingFirework = this.solvePitch(context, goalDelta, ticks, ticks, desperate, ignoreLava); if (usingFirework != null) { - return new Pair<>(usingFirework, true); + return new Pair<>(usingFirework.pitch, true); } } return new Pair<>(null, false); } - private Float solvePitch(final SolverContext context, final Vec3d goalDelta, final int ticks, - final int ticksBoosted, final boolean desperate, final boolean ignoreLava) { + private PitchResult solvePitch(final SolverContext context, final Vec3d goalDelta, final int ticks, + final int ticksBoosted, final boolean desperate, final boolean ignoreLava) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch @@ -833,9 +846,7 @@ private Float solvePitch(final SolverContext context, final Vec3d goalDelta, fin final Vec3d goalDirection = goalDelta.normalize(); final float goodPitch = RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, goalDirection, ctx.playerRotations()).getPitch(); - Float bestPitch = null; - double bestDot = Double.NEGATIVE_INFINITY; - List bestLine = null; + PitchResult result = null; final float minPitch = desperate ? -90 : Math.max(goodPitch - Baritone.settings().elytraPitchRange.value, -89); final float maxPitch = desperate ? 90 : Math.min(goodPitch + Baritone.settings().elytraPitchRange.value, 89); @@ -852,18 +863,16 @@ private Float solvePitch(final SolverContext context, final Vec3d goalDelta, fin if (displacement == null) { continue; } - final Vec3d result = displacement.get(displacement.size() - 1); - double goodness = goalDirection.dotProduct(result.normalize()); - if (goodness > bestDot) { - bestDot = goodness; - bestPitch = pitch; - bestLine = displacement; + final Vec3d last = displacement.get(displacement.size() - 1); + double goodness = goalDirection.dotProduct(last.normalize()); + if (result == null || goodness > result.dot) { + result = new PitchResult(pitch, goodness, displacement); } } - if (bestLine != null) { - this.simulationLine = bestLine; + if (result != null) { + this.simulationLine = result.steps; } - return bestPitch; + return result; } private List simulate(final ITickableAimProcessor aimProcessor, final Vec3d goalDelta, final float pitch, From 03ee30bca90dd090acd0499754fbdc2728d8f0b2 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 28 Jun 2023 00:46:14 -0500 Subject: [PATCH 739/935] Call elytra `tick()` from the process --- .../java/baritone/api/behavior/IBehavior.java | 8 +++++- src/main/java/baritone/Baritone.java | 8 +++++- .../baritone/behavior/ElytraBehavior.java | 27 +++++++++++++++---- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/api/java/baritone/api/behavior/IBehavior.java b/src/api/java/baritone/api/behavior/IBehavior.java index 811563b93..aea44ed3e 100644 --- a/src/api/java/baritone/api/behavior/IBehavior.java +++ b/src/api/java/baritone/api/behavior/IBehavior.java @@ -27,4 +27,10 @@ * @see IGameEventListener * @since 9/23/2018 */ -public interface IBehavior extends AbstractGameEventListener {} +public interface IBehavior extends AbstractGameEventListener { + + /** + * Called after Baritone's initialization is complete + */ + default void onLoad() {} +} diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index dcbad33f5..313725c4e 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -40,6 +40,8 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; @@ -63,6 +65,7 @@ public class Baritone implements IBaritone { private final GameEventHandler gameEventHandler; + private final List behaviors; private final PathingBehavior pathingBehavior; private final ElytraBehavior elytraBehavior; private final LookBehavior lookBehavior; @@ -89,6 +92,7 @@ public class Baritone implements IBaritone { Baritone(Minecraft mc) { this.mc = mc; + this.behaviors = new ArrayList<>(); this.gameEventHandler = new GameEventHandler(this); this.directory = mc.gameDir.toPath().resolve("baritone"); @@ -121,15 +125,17 @@ public class Baritone implements IBaritone { this.farmProcess = this.registerProcess(FarmProcess::new); this.inventoryPauserProcess = this.registerProcess(InventoryPauserProcess::new); this.registerProcess(BackfillProcess::new); - this.registerProcess(__ -> this.elytraBehavior.new ElytraProcess()); // pain } this.worldProvider = new WorldProvider(this); this.selectionManager = new SelectionManager(this); this.commandManager = new CommandManager(this); + + this.behaviors.forEach(IBehavior::onLoad); } public void registerBehavior(IBehavior behavior) { + this.behaviors.add(behavior); this.gameEventHandler.registerEventListener(behavior); } diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 048a00e12..759d4b0bc 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -71,6 +71,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // :sunglasses: private final NetherPathfinderContext context; private final PathManager pathManager; + private final ElytraProcess process; /** * Remaining cool-down ticks between firework usage @@ -93,6 +94,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private BlockPos destination; private Future solver; + private Solution pendingSolution; private boolean solveNextTick; public ElytraBehavior(Baritone baritone) { @@ -102,6 +104,12 @@ public ElytraBehavior(Baritone baritone) { this.blockedLines = new CopyOnWriteArrayList<>(); this.visiblePath = Collections.emptyList(); this.pathManager = this.new PathManager(); + this.process = new ElytraProcess(); + } + + @Override + public void onLoad() { + baritone.getPathingControlManager().registerProcess(this.process); } private final class PathManager { @@ -398,16 +406,16 @@ public boolean isActive() { } @Override - public void onTick(TickEvent event) { + public void onTick(final TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } // Fetch the previous solution, regardless of if it's going to be used - Solution solution = null; + this.pendingSolution = null; if (this.solver != null) { try { - solution = this.solver.get(); + this.pendingSolution = this.solver.get(); } catch (Exception ignored) { // it doesn't matter if get() fails since the solution can just be recalculated synchronously } finally { @@ -431,7 +439,12 @@ public void onTick(TickEvent event) { this.blockedLines.clear(); this.simulationLine = null; this.aimPos = null; + } + /** + * Called by {@link ElytraProcess#onTick(boolean, boolean)} when the process is in control + */ + private void tick() { final List path = this.pathManager.getPath(); if (path.isEmpty()) { return; @@ -461,8 +474,11 @@ public void onTick(TickEvent event) { this.solveNextTick = true; // If there's no previously calculated solution to use, or the context used at the end of last tick doesn't match this tick - if (solution == null || !solution.context.equals(solverContext)) { + final Solution solution; + if (this.pendingSolution == null || !this.pendingSolution.context.equals(solverContext)) { solution = this.solveAngles(solverContext); + } else { + solution = this.pendingSolution; } if (solution == null) { @@ -1010,7 +1026,7 @@ private static boolean isOpenBlockSpace(IPlayerContext ctx, BlockPos pos) { } } - public final class ElytraProcess implements IBaritoneProcess { + private final class ElytraProcess implements IBaritoneProcess { private State state; private Goal goal; @@ -1032,6 +1048,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { this.state = State.FLYING; this.goal = null; baritone.getInputOverrideHandler().clearAllKeys(); + ElytraBehavior.this.tick(); return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } From 70166f385db5e333fe2b9407ea62345225b388d9 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 28 Jun 2023 00:47:20 -0500 Subject: [PATCH 740/935] That should be in the other tick method --- .../java/baritone/behavior/ElytraBehavior.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 759d4b0bc..3cb5c2f12 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -439,12 +439,7 @@ public void onTick(final TickEvent event) { this.blockedLines.clear(); this.simulationLine = null; this.aimPos = null; - } - /** - * Called by {@link ElytraProcess#onTick(boolean, boolean)} when the process is in control - */ - private void tick() { final List path = this.pathManager.getPath(); if (path.isEmpty()) { return; @@ -458,11 +453,12 @@ private void tick() { Math.max(playerNear - 30, 0), Math.min(playerNear + 100, path.size()) ); + } - if (!ctx.player().isElytraFlying()) { - return; - } - + /** + * Called by {@link ElytraProcess#onTick(boolean, boolean)} when the process is in control + */ + private void tick() { if (ctx.player().collidedHorizontally) { logDirect("hbonk"); } From 7861860187a34e65f6acffd3f4286dbd9d82080f Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 28 Jun 2023 00:48:28 -0500 Subject: [PATCH 741/935] Clarify --- src/main/java/baritone/behavior/ElytraBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 3cb5c2f12..a118d5fbc 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -456,7 +456,7 @@ public void onTick(final TickEvent event) { } /** - * Called by {@link ElytraProcess#onTick(boolean, boolean)} when the process is in control + * Called by {@link ElytraProcess#onTick(boolean, boolean)} when the process is in control and the player is flying */ private void tick() { if (ctx.player().collidedHorizontally) { From 7a61ab813742cbef4b09a634681e385d16f03d5c Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 28 Jun 2023 00:58:51 -0500 Subject: [PATCH 742/935] We need event priorities. --- src/main/java/baritone/Baritone.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 313725c4e..805fb0488 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -107,8 +107,8 @@ public class Baritone implements IBaritone { { this.lookBehavior = this.registerBehavior(LookBehavior::new); - this.pathingBehavior = this.registerBehavior(PathingBehavior::new); this.elytraBehavior = this.registerBehavior(ElytraBehavior::new); + this.pathingBehavior = this.registerBehavior(PathingBehavior::new); this.inventoryBehavior = this.registerBehavior(InventoryBehavior::new); this.inputOverrideHandler = this.registerBehavior(InputOverrideHandler::new); this.registerBehavior(WaypointBehavior::new); From bb39fea4151fa16c3c0d5b5d85c701aba251f8a2 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 28 Jun 2023 01:04:08 -0500 Subject: [PATCH 743/935] Considerations --- src/main/java/baritone/behavior/ElytraBehavior.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index a118d5fbc..82045c7bc 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -459,6 +459,10 @@ public void onTick(final TickEvent event) { * Called by {@link ElytraProcess#onTick(boolean, boolean)} when the process is in control and the player is flying */ private void tick() { + if (this.pathManager.getPath().isEmpty()) { + return; + } + if (ctx.player().collidedHorizontally) { logDirect("hbonk"); } @@ -506,6 +510,9 @@ public void onPostTick(TickEvent event) { // changed. Updating it now will avoid unnecessary recalculation on the main thread. this.pathManager.updatePlayerNear(); + // TODO: If we used a firework at the end of the last tick, then it's worth it to solve with the assumption + // that we'll be boosted next tick (if our ping to the server is less than 50ms) since a recalc won't + // be needed on the main thread. final SolverContext context = this.new SolverContext(true); this.solver = CompletableFuture.supplyAsync(() -> this.solveAngles(context)); this.solveNextTick = false; From 0bb6f1b094a0151f375ce06e0f78564eee1531d4 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 28 Jun 2023 01:05:22 -0500 Subject: [PATCH 744/935] Invalidate `pendingSolution` --- src/main/java/baritone/behavior/ElytraBehavior.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 82045c7bc..7e328bfd4 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -398,6 +398,7 @@ public void cancel() { this.solver.cancel(true); this.solver = null; } + this.pendingSolution = null; } @Override From d640ebb02d8df07e1c12a30c8adfe4af1179b6e3 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 28 Jun 2023 17:47:01 -0500 Subject: [PATCH 745/935] Reliability improvements --- .../baritone/behavior/ElytraBehavior.java | 202 +++++++++++++----- 1 file changed, 151 insertions(+), 51 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 7e328bfd4..b4b119921 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -37,6 +37,8 @@ import baritone.cache.FasterWorldScanner; import baritone.utils.BlockStateInterface; import baritone.utils.accessor.IEntityFireworkRocket; +import it.unimi.dsi.fastutil.floats.FloatArrayList; +import it.unimi.dsi.fastutil.floats.FloatIterator; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; @@ -52,6 +54,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Future; +import java.util.function.Supplier; import java.util.function.UnaryOperator; public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { @@ -530,56 +533,83 @@ private Solution solveAngles(final SolverContext context) { for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) int[] heights = context.boost.isBoosted() ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost - float[] interps = new float[] {1.0f, 0.75f, 0.5f, 0.25f}; int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps //int minStep = Math.max(0, playerNear - relaxation); int minStep = playerNear; + for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { + final List> candidates = new ArrayList<>(); for (int dy : heights) { - for (float interp : interps) { - Vec3d dest; - if (interp == 1 || i == minStep) { - dest = path.getVec(i); + if (i == minStep) { + // no interp + candidates.add(new Pair<>(path.getVec(i).add(0, dy, 0), dy)); + } else { + if (relaxation == 2) { + final Vec3d delta = path.getVec(i).subtract(path.getVec(i - 1)); + final double stepLength = 0.5; + final int steps = MathHelper.floor(delta.length() / stepLength); + final Vec3d step = delta.normalize().scale(stepLength); + + Vec3d stepped = path.getVec(i); + for (int interp = 0; interp < steps; interp++) { + candidates.add(new Pair<>(stepped.add(0, dy, 0), dy)); + stepped = stepped.subtract(step); + } } else { - dest = path.getVec(i).scale(interp).add(path.getVec(i - 1).scale(1.0d - interp)); + final float[] interps = relaxation == 0 + ? new float[]{1.0f, 0.75f, 0.5f, 0.25f} + : new float[]{1.0f, 0.875f, 0.75f, 0.625f, 0.5f, 0.375f, 0.25f, 0.125f}; + for (float interp : interps) { + Vec3d dest; + if (interp == 1) { + dest = path.getVec(i); + } else { + dest = path.getVec(i).scale(interp).add(path.getVec(i - 1).scale(1.0d - interp)); + } + candidates.add(new Pair<>(dest.add(0, dy, 0), dy)); + } } + } + } - dest = dest.add(0, dy, 0); - if (dy != 0) { - if (i + lookahead >= path.size()) { + for (final Pair candidate : candidates) { + final Vec3d dest = candidate.first(); + final Integer augment = candidate.second(); + + if (augment != 0) { + if (i + lookahead >= path.size()) { + continue; + } + if (start.distanceTo(dest) < 40) { + if (!this.clearView(dest, path.getVec(i + lookahead).add(0, augment, 0), false) + || !this.clearView(dest, path.getVec(i + lookahead), false)) { + // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position continue; } - if (start.distanceTo(dest) < 40) { - if (!this.clearView(dest, path.getVec(i + lookahead).add(0, dy, 0), false) - || !this.clearView(dest, path.getVec(i + lookahead), false)) { - // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position - continue; - } - } else { - // but if it's far away, allow gaining altitude if we could lose it again by the time we get there - if (!this.clearView(dest, path.getVec(i), false)) { - continue; - } + } else { + // but if it's far away, allow gaining altitude if we could lose it again by the time we get there + if (!this.clearView(dest, path.getVec(i), false)) { + continue; } } + } - final double minAvoidance = Baritone.settings().elytraMinimumAvoidance.value; - final Double growth = relaxation == 2 ? null - : relaxation == 0 ? 2 * minAvoidance : minAvoidance; - - if (this.isHitboxClear(start, dest, growth, isInLava)) { - // Yaw is trivial, just calculate the rotation required to face the destination - final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); + final double minAvoidance = Baritone.settings().elytraMinimumAvoidance.value; + final Double growth = relaxation == 2 ? null + : relaxation == 0 ? 2 * minAvoidance : minAvoidance; - final Pair pitch = this.solvePitch(context, dest.subtract(start), relaxation, isInLava); - if (pitch.first() == null) { - solution = new Solution(context, new Rotation(yaw, ctx.playerRotations().getPitch()), null, false, false); - continue; - } + if (this.isHitboxClear(start, dest, growth, isInLava)) { + // Yaw is trivial, just calculate the rotation required to face the destination + final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); - // A solution was found with yaw AND pitch, so just immediately return it. - return new Solution(context, new Rotation(yaw, pitch.first()), dest, true, pitch.second()); + final Pair pitch = this.solvePitch(context, dest, relaxation, isInLava); + if (pitch == null) { + solution = new Solution(context, new Rotation(yaw, ctx.playerRotations().getPitch()), null, false, false); + continue; } + + // A solution was found with yaw AND pitch, so just immediately return it. + return new Solution(context, new Rotation(yaw, pitch.first()), dest, true, pitch.second()); } } } @@ -680,10 +710,16 @@ public boolean isBoosted() { return this.firework != null; } + /** + * @return The guaranteed number of remaining ticks with boost + */ public int getGuaranteedBoostTicks() { return this.isBoosted() ? Math.max(0, this.minimumBoostTicks - this.firework.ticksExisted) : 0; } + /** + * @return The maximum number of remaining ticks with boost + */ public int getMaximumBoostTicks() { return this.isBoosted() ? Math.max(0, this.maximumBoostTicks - this.firework.ticksExisted) : 0; } @@ -835,43 +871,92 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { } } - private Pair solvePitch(final SolverContext context, final Vec3d goalDelta, + @FunctionalInterface + private interface IntBiFunction { + T apply(int left, int right); + } + + private static FloatArrayList pitchesToSolveFor(final float goodPitch, final boolean desperate) { + final float minPitch = desperate ? -90 : Math.max(goodPitch - Baritone.settings().elytraPitchRange.value, -89); + final float maxPitch = desperate ? 90 : Math.min(goodPitch + Baritone.settings().elytraPitchRange.value, 89); + + final FloatArrayList pitchValues = new FloatArrayList(MathHelper.ceil(maxPitch - minPitch) + 1); + for (float pitch = goodPitch; pitch <= maxPitch; pitch++) { + pitchValues.add(pitch); + } + for (float pitch = goodPitch - 1; pitch >= minPitch; pitch--) { + pitchValues.add(pitch); + } + + return pitchValues; + } + + private Pair solvePitch(final SolverContext context, final Vec3d goal, final int relaxation, final boolean ignoreLava) { + final boolean desperate = relaxation == 2; - final int ticks = desperate ? 3 : context.boost.isBoosted() ? 5 : Baritone.settings().elytraSimulationTicks.value; - final int ticksBoosted = context.boost.isBoosted() ? ticks : 0; + final float goodPitch = RotationUtils.calcRotationFromVec3d(context.start, goal, ctx.playerRotations()).getPitch(); + final FloatArrayList pitches = pitchesToSolveFor(goodPitch, desperate); + + final IntBiFunction solve = (ticks, ticksBoosted) -> + this.solvePitch(context, goal, relaxation, pitches.iterator(), ticks, ticksBoosted, ignoreLava); + + final List> tests = new ArrayList<>(); + + if (context.boost.isBoosted()) { + final int guaranteed = context.boost.getGuaranteedBoostTicks(); + if (guaranteed == 0) { + // uncertain when boost will run out + final int lookahead = Math.max(4, 10 - context.boost.getMaximumBoostTicks()); + tests.add(() -> solve.apply(lookahead, 1)); + tests.add(() -> solve.apply(5, 5)); + } else if (guaranteed <= 5) { + // boost will run out within 5 ticks + tests.add(() -> solve.apply(guaranteed + 5, guaranteed)); + } else { + // there's plenty of guaranteed boost + tests.add(() -> solve.apply(guaranteed + 1, guaranteed)); + } + } + + // Standard test, assume (not) boosted for entire duration + final int ticks = desperate ? 3 : context.boost.isBoosted() ? Math.max(5, context.boost.getGuaranteedBoostTicks()) : Baritone.settings().elytraSimulationTicks.value; + tests.add(() -> solve.apply(ticks, context.boost.isBoosted() ? ticks : 0)); - final PitchResult pitch = this.solvePitch(context, goalDelta, ticks, ticksBoosted, desperate, ignoreLava); - if (pitch != null) { - return new Pair<>(pitch.pitch, false); + final Optional result = tests.stream() + .map(Supplier::get) + .filter(Objects::nonNull) + .findFirst(); + if (result.isPresent()) { + return new Pair<>(result.get().pitch, false); } if (Baritone.settings().experimentalTakeoff.value && relaxation > 0) { // Simulate as if we were boosted for the entire duration - final PitchResult usingFirework = this.solvePitch(context, goalDelta, ticks, ticks, desperate, ignoreLava); + final PitchResult usingFirework = solve.apply(ticks, ticks); if (usingFirework != null) { return new Pair<>(usingFirework.pitch, true); } } - return new Pair<>(null, false); + return null; } - private PitchResult solvePitch(final SolverContext context, final Vec3d goalDelta, final int ticks, - final int ticksBoosted, final boolean desperate, final boolean ignoreLava) { + private PitchResult solvePitch(final SolverContext context, final Vec3d goal, final int relaxation, + final FloatIterator pitches, final int ticks, final int ticksBoosted, + final boolean ignoreLava) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch + final Vec3d goalDelta = goal.subtract(context.start); final Vec3d goalDirection = goalDelta.normalize(); - final float goodPitch = RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, goalDirection, ctx.playerRotations()).getPitch(); PitchResult result = null; - final float minPitch = desperate ? -90 : Math.max(goodPitch - Baritone.settings().elytraPitchRange.value, -89); - final float maxPitch = desperate ? 90 : Math.min(goodPitch + Baritone.settings().elytraPitchRange.value, 89); - - for (float pitch = minPitch; pitch <= maxPitch; pitch++) { + outer: + while (pitches.hasNext()) { + final float pitch = pitches.nextFloat(); final List displacement = this.simulate( context.aimProcessor.fork(), goalDelta, @@ -883,9 +968,24 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goalDelt if (displacement == null) { continue; } - final Vec3d last = displacement.get(displacement.size() - 1); - double goodness = goalDirection.dotProduct(last.normalize()); + final int lastIndex = displacement.size() - 1; + final Vec3d last = displacement.get(lastIndex); + final double goodness = goalDirection.dotProduct(last.normalize()); if (result == null || goodness > result.dot) { + if (relaxation == 0) { + // Ensure that the goal is visible along the entire simulated path + // Reverse order iteration since the last position is most likely to fail + for (int i = lastIndex; i >= 1; i--) { + if (!clearView(context.start.add(displacement.get(i)), goal, false)) { + continue outer; + } + } + } else if (relaxation == 1) { + // Ensure that the goal is visible from the final position + if (!clearView(context.start.add(last), goal, false)) { + continue; + } + } result = new PitchResult(pitch, goodness, displacement); } } From 5126ec9c36b0ea47cbef6d0d344a05b4565b9fbc Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 28 Jun 2023 17:49:33 -0500 Subject: [PATCH 746/935] interp double --- src/main/java/baritone/behavior/ElytraBehavior.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index b4b119921..9bdb255ee 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -556,10 +556,10 @@ private Solution solveAngles(final SolverContext context) { stepped = stepped.subtract(step); } } else { - final float[] interps = relaxation == 0 - ? new float[]{1.0f, 0.75f, 0.5f, 0.25f} - : new float[]{1.0f, 0.875f, 0.75f, 0.625f, 0.5f, 0.375f, 0.25f, 0.125f}; - for (float interp : interps) { + final double[] interps = relaxation == 0 + ? new double[]{1.0, 0.75, 0.5, 0.25} + : new double[]{1.0, 0.875, 0.75, 0.625, 0.5, 0.375, 0.25, 0.125}; + for (double interp : interps) { Vec3d dest; if (interp == 1) { dest = path.getVec(i); From 4b689bd9462d29e34f7b7af59e203fbfdaeb97ee Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 28 Jun 2023 17:55:47 -0500 Subject: [PATCH 747/935] Fix `Supplier` meme --- .../baritone/behavior/ElytraBehavior.java | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 9bdb255ee..c2df278a4 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -871,11 +871,6 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { } } - @FunctionalInterface - private interface IntBiFunction { - T apply(int left, int right); - } - private static FloatArrayList pitchesToSolveFor(final float goodPitch, final boolean desperate) { final float minPitch = desperate ? -90 : Math.max(goodPitch - Baritone.settings().elytraPitchRange.value, -89); final float maxPitch = desperate ? 90 : Math.min(goodPitch + Baritone.settings().elytraPitchRange.value, 89); @@ -891,6 +886,21 @@ private static FloatArrayList pitchesToSolveFor(final float goodPitch, final boo return pitchValues; } + @FunctionalInterface + private interface IntBiFunction { + T apply(int left, int right); + } + + private static final class IntPair { + public final int first; + public final int second; + + public IntPair(int first, int second) { + this.first = first; + this.second = second; + } + } + private Pair solvePitch(final SolverContext context, final Vec3d goal, final int relaxation, final boolean ignoreLava) { @@ -901,30 +911,30 @@ private Pair solvePitch(final SolverContext context, final Vec3d final IntBiFunction solve = (ticks, ticksBoosted) -> this.solvePitch(context, goal, relaxation, pitches.iterator(), ticks, ticksBoosted, ignoreLava); - final List> tests = new ArrayList<>(); + final List tests = new ArrayList<>(); if (context.boost.isBoosted()) { final int guaranteed = context.boost.getGuaranteedBoostTicks(); if (guaranteed == 0) { // uncertain when boost will run out final int lookahead = Math.max(4, 10 - context.boost.getMaximumBoostTicks()); - tests.add(() -> solve.apply(lookahead, 1)); - tests.add(() -> solve.apply(5, 5)); + tests.add(new IntPair(lookahead, 1)); + tests.add(new IntPair(5, 5)); } else if (guaranteed <= 5) { // boost will run out within 5 ticks - tests.add(() -> solve.apply(guaranteed + 5, guaranteed)); + tests.add(new IntPair(guaranteed + 5, guaranteed)); } else { // there's plenty of guaranteed boost - tests.add(() -> solve.apply(guaranteed + 1, guaranteed)); + tests.add(new IntPair(guaranteed + 1, guaranteed)); } } // Standard test, assume (not) boosted for entire duration final int ticks = desperate ? 3 : context.boost.isBoosted() ? Math.max(5, context.boost.getGuaranteedBoostTicks()) : Baritone.settings().elytraSimulationTicks.value; - tests.add(() -> solve.apply(ticks, context.boost.isBoosted() ? ticks : 0)); + tests.add(new IntPair(ticks, context.boost.isBoosted() ? ticks : 0)); final Optional result = tests.stream() - .map(Supplier::get) + .map(i -> solve.apply(i.first, i.second)) .filter(Objects::nonNull) .findFirst(); if (result.isPresent()) { From 48462da47373eab1a04cdd5f5927ac6698b263a1 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 28 Jun 2023 21:47:37 -0500 Subject: [PATCH 748/935] Disable interp on relaxation 0 --- .../baritone/behavior/ElytraBehavior.java | 48 +++++++++---------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index c2df278a4..5d1f51e00 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -540,34 +540,32 @@ private Solution solveAngles(final SolverContext context) { for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { final List> candidates = new ArrayList<>(); for (int dy : heights) { - if (i == minStep) { + if (relaxation == 0 || i == minStep) { // no interp candidates.add(new Pair<>(path.getVec(i).add(0, dy, 0), dy)); - } else { - if (relaxation == 2) { - final Vec3d delta = path.getVec(i).subtract(path.getVec(i - 1)); - final double stepLength = 0.5; - final int steps = MathHelper.floor(delta.length() / stepLength); - final Vec3d step = delta.normalize().scale(stepLength); - - Vec3d stepped = path.getVec(i); - for (int interp = 0; interp < steps; interp++) { - candidates.add(new Pair<>(stepped.add(0, dy, 0), dy)); - stepped = stepped.subtract(step); - } - } else { - final double[] interps = relaxation == 0 - ? new double[]{1.0, 0.75, 0.5, 0.25} - : new double[]{1.0, 0.875, 0.75, 0.625, 0.5, 0.375, 0.25, 0.125}; - for (double interp : interps) { - Vec3d dest; - if (interp == 1) { - dest = path.getVec(i); - } else { - dest = path.getVec(i).scale(interp).add(path.getVec(i - 1).scale(1.0d - interp)); - } - candidates.add(new Pair<>(dest.add(0, dy, 0), dy)); + } else if (relaxation == 1) { + // Create 4 points along the segment + final double[] interps = new double[]{1.0, 0.75, 0.5, 0.25}; + for (double interp : interps) { + Vec3d dest; + if (interp == 1) { + dest = path.getVec(i); + } else { + dest = path.getVec(i).scale(interp).add(path.getVec(i - 1).scale(1.0d - interp)); } + candidates.add(new Pair<>(dest.add(0, dy, 0), dy)); + } + } else { + // Create a point along the segment every 0.5 blocks + final Vec3d delta = path.getVec(i).subtract(path.getVec(i - 1)); + final double stepLength = 0.5; + final int steps = MathHelper.floor(delta.length() / stepLength); + final Vec3d step = delta.normalize().scale(stepLength); + + Vec3d stepped = path.getVec(i).add(0, dy, 0); + for (int interp = 0; interp < steps; interp++) { + candidates.add(new Pair<>(stepped, dy)); + stepped = stepped.subtract(step); } } } From fbb66a0586ee70d7d59a6eebf234d23e59252835 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 14:14:49 -0500 Subject: [PATCH 749/935] Tweaks --- src/api/java/baritone/api/Settings.java | 3 - .../baritone/behavior/ElytraBehavior.java | 78 ++++++++++--------- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 47643245d..679a29043 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -61,9 +61,6 @@ public final class Settings { public final Setting elytraAutoJump = new Setting<>(false); public final Setting smoothLook = new Setting<>(false); - // Experimental Elytra Settings - public final Setting experimentalTakeoff = new Setting<>(false); - /** * Allow Baritone to break blocks */ diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 5d1f51e00..1479a9efe 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -54,7 +54,6 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Future; -import java.util.function.Supplier; import java.util.function.UnaryOperator; public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { @@ -540,19 +539,17 @@ private Solution solveAngles(final SolverContext context) { for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { final List> candidates = new ArrayList<>(); for (int dy : heights) { - if (relaxation == 0 || i == minStep) { + if (i == minStep) { // no interp candidates.add(new Pair<>(path.getVec(i).add(0, dy, 0), dy)); - } else if (relaxation == 1) { - // Create 4 points along the segment - final double[] interps = new double[]{1.0, 0.75, 0.5, 0.25}; + } else if (relaxation < 2) { + final double[] interps = relaxation == 0 + ? new double[]{1.0, 0.75, 0.5, 0.25} + : new double[]{1.0, 0.875, 0.75, 0.625, 0.5, 0.375, 0.25, 0.125}; for (double interp : interps) { - Vec3d dest; - if (interp == 1) { - dest = path.getVec(i); - } else { - dest = path.getVec(i).scale(interp).add(path.getVec(i - 1).scale(1.0d - interp)); - } + final Vec3d dest = interp == 1.0 + ? path.getVec(i) + : path.getVec(i).scale(interp).add(path.getVec(i - 1).scale(1.0 - interp)); candidates.add(new Pair<>(dest.add(0, dy, 0), dy)); } } else { @@ -641,7 +638,7 @@ private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final bool logDirect("no fireworks"); return; } - logDirect("attempting to use firework" + (forceUseFirework ? " takeoff" : "")); + logDirect("attempting to use firework" + (forceUseFirework ? " (forced)" : "")); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); this.minimumBoostTicks = 10 * (1 + getFireworkBoost(ctx.player().getHeldItemMainhand()).orElse(0)); this.remainingFireworkTicks = 10; @@ -885,17 +882,19 @@ private static FloatArrayList pitchesToSolveFor(final float goodPitch, final boo } @FunctionalInterface - private interface IntBiFunction { - T apply(int left, int right); + private interface IntTriFunction { + T apply(int first, int second, int third); } - private static final class IntPair { + private static final class IntTriple { public final int first; public final int second; + public final int third; - public IntPair(int first, int second) { + public IntTriple(int first, int second, int third) { this.first = first; this.second = second; + this.third = third; } } @@ -906,44 +905,52 @@ private Pair solvePitch(final SolverContext context, final Vec3d final float goodPitch = RotationUtils.calcRotationFromVec3d(context.start, goal, ctx.playerRotations()).getPitch(); final FloatArrayList pitches = pitchesToSolveFor(goodPitch, desperate); - final IntBiFunction solve = (ticks, ticksBoosted) -> - this.solvePitch(context, goal, relaxation, pitches.iterator(), ticks, ticksBoosted, ignoreLava); + final IntTriFunction solve = (ticks, ticksBoosted, ticksBoostDelay) -> + this.solvePitch(context, goal, relaxation, pitches.iterator(), ticks, ticksBoosted, ticksBoostDelay, ignoreLava); - final List tests = new ArrayList<>(); + final List tests = new ArrayList<>(); if (context.boost.isBoosted()) { final int guaranteed = context.boost.getGuaranteedBoostTicks(); if (guaranteed == 0) { // uncertain when boost will run out final int lookahead = Math.max(4, 10 - context.boost.getMaximumBoostTicks()); - tests.add(new IntPair(lookahead, 1)); - tests.add(new IntPair(5, 5)); + tests.add(new IntTriple(lookahead, 1, 0)); + tests.add(new IntTriple(5, 5, 0)); } else if (guaranteed <= 5) { // boost will run out within 5 ticks - tests.add(new IntPair(guaranteed + 5, guaranteed)); + tests.add(new IntTriple(guaranteed + 5, guaranteed, 0)); } else { // there's plenty of guaranteed boost - tests.add(new IntPair(guaranteed + 1, guaranteed)); + tests.add(new IntTriple(guaranteed + 1, guaranteed, 0)); } } // Standard test, assume (not) boosted for entire duration final int ticks = desperate ? 3 : context.boost.isBoosted() ? Math.max(5, context.boost.getGuaranteedBoostTicks()) : Baritone.settings().elytraSimulationTicks.value; - tests.add(new IntPair(ticks, context.boost.isBoosted() ? ticks : 0)); + tests.add(new IntTriple(ticks, context.boost.isBoosted() ? ticks : 0, 0)); final Optional result = tests.stream() - .map(i -> solve.apply(i.first, i.second)) + .map(i -> solve.apply(i.first, i.second, i.third)) .filter(Objects::nonNull) .findFirst(); if (result.isPresent()) { return new Pair<>(result.get().pitch, false); } - if (Baritone.settings().experimentalTakeoff.value && relaxation > 0) { - // Simulate as if we were boosted for the entire duration - final PitchResult usingFirework = solve.apply(ticks, ticks); - if (usingFirework != null) { - return new Pair<>(usingFirework.pitch, true); + // If we used a firework would we be able to get out of the current situation??? perhaps + if (relaxation > 0) { + final List testsBoost = new ArrayList<>(); + testsBoost.add(new IntTriple(ticks, 10, 3)); + testsBoost.add(new IntTriple(ticks, 10, 2)); + testsBoost.add(new IntTriple(ticks, 10, 1)); + + final Optional resultBoost = testsBoost.stream() + .map(i -> solve.apply(i.first, i.second, i.third)) + .filter(Objects::nonNull) + .findFirst(); + if (resultBoost.isPresent()) { + return new Pair<>(resultBoost.get().pitch, true); } } @@ -952,7 +959,7 @@ private Pair solvePitch(final SolverContext context, final Vec3d private PitchResult solvePitch(final SolverContext context, final Vec3d goal, final int relaxation, final FloatIterator pitches, final int ticks, final int ticksBoosted, - final boolean ignoreLava) { + final int ticksBoostDelay, final boolean ignoreLava) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch @@ -971,6 +978,7 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi pitch, ticks, ticksBoosted, + ticksBoostDelay, ignoreLava ); if (displacement == null) { @@ -980,7 +988,7 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi final Vec3d last = displacement.get(lastIndex); final double goodness = goalDirection.dotProduct(last.normalize()); if (result == null || goodness > result.dot) { - if (relaxation == 0) { + if (relaxation < 2) { // Ensure that the goal is visible along the entire simulated path // Reverse order iteration since the last position is most likely to fail for (int i = lastIndex; i >= 1; i--) { @@ -988,7 +996,7 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi continue outer; } } - } else if (relaxation == 1) { + } else { // Ensure that the goal is visible from the final position if (!clearView(context.start.add(last), goal, false)) { continue; @@ -1004,7 +1012,7 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi } private List simulate(final ITickableAimProcessor aimProcessor, final Vec3d goalDelta, final float pitch, - final int ticks, int ticksBoosted, final boolean ignoreLava) { + final int ticks, int ticksBoosted, final int ticksBoostDelay, final boolean ignoreLava) { Vec3d delta = goalDelta; Vec3d motion = ctx.playerMotion(); AxisAlignedBB hitbox = ctx.player().getEntityBoundingBox(); @@ -1042,7 +1050,7 @@ private List simulate(final ITickableAimProcessor aimProcessor, final Vec hitbox = hitbox.offset(motion); displacement.add(displacement.get(displacement.size() - 1).add(motion)); - if (ticksBoosted-- > 0) { + if (i >= ticksBoostDelay && ticksBoosted-- > 0) { // See EntityFireworkRocket motion = motion.add( lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motion.x) * 0.5, From 12898df2f1274b34bdf0954c4d2ec73b27e19f8f Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 14:46:04 -0500 Subject: [PATCH 750/935] Reduce main thread recalculations after using a firework --- .../baritone/behavior/ElytraBehavior.java | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 1479a9efe..26bb68445 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -97,6 +97,8 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private Future solver; private Solution pendingSolution; + private boolean deployedFireworkLastTick; + private final int[] nextTickBoostCounter; private boolean solveNextTick; public ElytraBehavior(Baritone baritone) { @@ -107,6 +109,7 @@ public ElytraBehavior(Baritone baritone) { this.visiblePath = Collections.emptyList(); this.pathManager = this.new PathManager(); this.process = new ElytraProcess(); + this.nextTickBoostCounter = new int[2]; } @Override @@ -401,6 +404,8 @@ public void cancel() { this.solver = null; } this.pendingSolution = null; + this.nextTickBoostCounter[0] = 0; + this.nextTickBoostCounter[1] = 0; } @Override @@ -484,6 +489,11 @@ private void tick() { solution = this.pendingSolution; } + if (this.deployedFireworkLastTick) { + this.nextTickBoostCounter[solverContext.boost.isBoosted() ? 1 : 0]++; + this.deployedFireworkLastTick = false; + } + if (solution == null) { logDirect("no solution"); return; @@ -642,6 +652,7 @@ private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final bool ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); this.minimumBoostTicks = 10 * (1 + getFireworkBoost(ctx.player().getHeldItemMainhand()).orElse(0)); this.remainingFireworkTicks = 10; + this.deployedFireworkLastTick = true; } } @@ -657,10 +668,15 @@ public SolverContext(boolean async) { this.path = ElytraBehavior.this.pathManager.getPath(); this.playerNear = ElytraBehavior.this.pathManager.getNear(); this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); - this.boost = new FireworkBoost( - ElytraBehavior.this.getAttachedFirework().orElse(null), - ElytraBehavior.this.minimumBoostTicks - ); + + final Integer fireworkTicksExisted; + if (async && ElytraBehavior.this.deployedFireworkLastTick) { + final int[] counter = ElytraBehavior.this.nextTickBoostCounter; + fireworkTicksExisted = counter[1] > counter[0] ? 0 : null; + } else { + fireworkTicksExisted = ElytraBehavior.this.getAttachedFirework().map(e -> e.ticksExisted).orElse(null); + } + this.boost = new FireworkBoost(fireworkTicksExisted, ElytraBehavior.this.minimumBoostTicks); ITickableAimProcessor aim = ElytraBehavior.this.baritone.getLookBehavior().getAimProcessor().fork(); if (async) { @@ -689,12 +705,12 @@ public boolean equals(Object o) { private static final class FireworkBoost { - private final EntityFireworkRocket firework; + private final Integer fireworkTicksExisted; private final int minimumBoostTicks; private final int maximumBoostTicks; - public FireworkBoost(final EntityFireworkRocket firework, final int minimumBoostTicks) { - this.firework = firework; + public FireworkBoost(final Integer fireworkTicksExisted, final int minimumBoostTicks) { + this.fireworkTicksExisted = fireworkTicksExisted; // this.lifetime = 10 * i + this.rand.nextInt(6) + this.rand.nextInt(7); this.minimumBoostTicks = minimumBoostTicks; @@ -702,21 +718,21 @@ public FireworkBoost(final EntityFireworkRocket firework, final int minimumBoost } public boolean isBoosted() { - return this.firework != null; + return this.fireworkTicksExisted != null; } /** * @return The guaranteed number of remaining ticks with boost */ public int getGuaranteedBoostTicks() { - return this.isBoosted() ? Math.max(0, this.minimumBoostTicks - this.firework.ticksExisted) : 0; + return this.isBoosted() ? Math.max(0, this.minimumBoostTicks - this.fireworkTicksExisted) : 0; } /** * @return The maximum number of remaining ticks with boost */ public int getMaximumBoostTicks() { - return this.isBoosted() ? Math.max(0, this.maximumBoostTicks - this.firework.ticksExisted) : 0; + return this.isBoosted() ? Math.max(0, this.maximumBoostTicks - this.fireworkTicksExisted) : 0; } @Override @@ -729,7 +745,11 @@ public boolean equals(Object o) { } FireworkBoost other = (FireworkBoost) o; - return Objects.equals(this.firework, other.firework) + if (!this.isBoosted() && !other.isBoosted()) { + return true; + } + + return Objects.equals(this.fireworkTicksExisted, other.fireworkTicksExisted) && this.minimumBoostTicks == other.minimumBoostTicks && this.maximumBoostTicks == other.maximumBoostTicks; } From 222f53b105d007b74b4bf8a46b372c22cea860f4 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 14:46:42 -0500 Subject: [PATCH 751/935] Use `Arrays.fill` --- src/main/java/baritone/behavior/ElytraBehavior.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 26bb68445..da54fbb4f 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -404,8 +404,7 @@ public void cancel() { this.solver = null; } this.pendingSolution = null; - this.nextTickBoostCounter[0] = 0; - this.nextTickBoostCounter[1] = 0; + Arrays.fill(this.nextTickBoostCounter, 0); } @Override From 494ebfa10dd8fb7a0793a8cdd936198916334671 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 14:53:12 -0500 Subject: [PATCH 752/935] More accurate `isActive` return value --- src/main/java/baritone/behavior/ElytraBehavior.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index da54fbb4f..d7082074e 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -409,7 +409,8 @@ public void cancel() { @Override public boolean isActive() { - return !this.pathManager.getPath().isEmpty(); + return baritone.getPathingControlManager().mostRecentInControl() + .filter(process -> this.process == process).isPresent(); } @Override From f30cb916bd38541ab9c267793e8a05e90cab5a5e Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 14:53:55 -0500 Subject: [PATCH 753/935] Remove addressed TODO --- src/main/java/baritone/behavior/ElytraBehavior.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index d7082074e..ab403aa80 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -523,9 +523,6 @@ public void onPostTick(TickEvent event) { // changed. Updating it now will avoid unnecessary recalculation on the main thread. this.pathManager.updatePlayerNear(); - // TODO: If we used a firework at the end of the last tick, then it's worth it to solve with the assumption - // that we'll be boosted next tick (if our ping to the server is less than 50ms) since a recalc won't - // be needed on the main thread. final SolverContext context = this.new SolverContext(true); this.solver = CompletableFuture.supplyAsync(() -> this.solveAngles(context)); this.solveNextTick = false; From 974b86aac1c9db64eb573ceb78ec4be27dc927ec Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 18:50:29 -0500 Subject: [PATCH 754/935] Bump `nether-pathfinder` to 0.20 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 41a495f4f..58929d98b 100755 --- a/build.gradle +++ b/build.gradle @@ -175,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.18') + launchImplementation('dev.babbaj:nether-pathfinder:0.20') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.18' + implementation 'dev.babbaj:nether-pathfinder:0.20' } mixin { From 5a48f4119e602fea947861ba5b7dc2ed7faceb49 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 19:15:06 -0500 Subject: [PATCH 755/935] Reduce number of raytraces when validating simulation --- .../baritone/behavior/ElytraBehavior.java | 72 +++++++++---------- 1 file changed, 35 insertions(+), 37 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index ab403aa80..3318e105a 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -546,27 +546,23 @@ private Solution solveAngles(final SolverContext context) { for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { final List> candidates = new ArrayList<>(); for (int dy : heights) { - if (i == minStep) { + if (relaxation == 0 || i == minStep) { // no interp - candidates.add(new Pair<>(path.getVec(i).add(0, dy, 0), dy)); - } else if (relaxation < 2) { - final double[] interps = relaxation == 0 - ? new double[]{1.0, 0.75, 0.5, 0.25} - : new double[]{1.0, 0.875, 0.75, 0.625, 0.5, 0.375, 0.25, 0.125}; + candidates.add(new Pair<>(path.getVec(i), dy)); + } else if (relaxation == 1) { + final double[] interps = new double[]{1.0, 0.75, 0.5, 0.25}; for (double interp : interps) { final Vec3d dest = interp == 1.0 ? path.getVec(i) : path.getVec(i).scale(interp).add(path.getVec(i - 1).scale(1.0 - interp)); - candidates.add(new Pair<>(dest.add(0, dy, 0), dy)); + candidates.add(new Pair<>(dest, dy)); } } else { - // Create a point along the segment every 0.5 blocks + // Create a point along the segment every block final Vec3d delta = path.getVec(i).subtract(path.getVec(i - 1)); - final double stepLength = 0.5; - final int steps = MathHelper.floor(delta.length() / stepLength); - final Vec3d step = delta.normalize().scale(stepLength); - - Vec3d stepped = path.getVec(i).add(0, dy, 0); + final int steps = MathHelper.floor(delta.length()); + final Vec3d step = delta.normalize(); + Vec3d stepped = path.getVec(i); for (int interp = 0; interp < steps; interp++) { candidates.add(new Pair<>(stepped, dy)); stepped = stepped.subtract(step); @@ -575,8 +571,8 @@ private Solution solveAngles(final SolverContext context) { } for (final Pair candidate : candidates) { - final Vec3d dest = candidate.first(); final Integer augment = candidate.second(); + final Vec3d dest = candidate.first().add(0, augment, 0); if (augment != 0) { if (i + lookahead >= path.size()) { @@ -933,7 +929,6 @@ private Pair solvePitch(final SolverContext context, final Vec3d // uncertain when boost will run out final int lookahead = Math.max(4, 10 - context.boost.getMaximumBoostTicks()); tests.add(new IntTriple(lookahead, 1, 0)); - tests.add(new IntTriple(5, 5, 0)); } else if (guaranteed <= 5) { // boost will run out within 5 ticks tests.add(new IntTriple(guaranteed + 5, guaranteed, 0)); @@ -956,7 +951,7 @@ private Pair solvePitch(final SolverContext context, final Vec3d } // If we used a firework would we be able to get out of the current situation??? perhaps - if (relaxation > 0) { + if (desperate) { final List testsBoost = new ArrayList<>(); testsBoost.add(new IntTriple(ticks, 10, 3)); testsBoost.add(new IntTriple(ticks, 10, 2)); @@ -984,9 +979,8 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi final Vec3d goalDelta = goal.subtract(context.start); final Vec3d goalDirection = goalDelta.normalize(); - PitchResult result = null; + final Deque bestResults = new ArrayDeque<>(); - outer: while (pitches.hasNext()) { final float pitch = pitches.nextFloat(); final List displacement = this.simulate( @@ -1001,31 +995,35 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi if (displacement == null) { continue; } - final int lastIndex = displacement.size() - 1; - final Vec3d last = displacement.get(lastIndex); + final Vec3d last = displacement.get(displacement.size() - 1); final double goodness = goalDirection.dotProduct(last.normalize()); - if (result == null || goodness > result.dot) { - if (relaxation < 2) { - // Ensure that the goal is visible along the entire simulated path - // Reverse order iteration since the last position is most likely to fail - for (int i = lastIndex; i >= 1; i--) { - if (!clearView(context.start.add(displacement.get(i)), goal, false)) { - continue outer; - } - } - } else { - // Ensure that the goal is visible from the final position - if (!clearView(context.start.add(last), goal, false)) { - continue; + final PitchResult bestSoFar = bestResults.peek(); + if (bestSoFar == null || goodness > bestSoFar.dot) { + bestResults.push(new PitchResult(pitch, goodness, displacement)); + } + } + + outer: + for (final PitchResult result : bestResults) { + if (relaxation < 2) { + // Ensure that the goal is visible along the entire simulated path + // Reverse order iteration since the last position is most likely to fail + for (int i = result.steps.size() - 1; i >= 1; i--) { + if (!clearView(context.start.add(result.steps.get(i)), goal, false)) { + continue outer; } } - result = new PitchResult(pitch, goodness, displacement); + } else { + // Ensure that the goal is visible from the final position + if (!clearView(context.start.add(result.steps.get(result.steps.size() - 1)), goal, false)) { + continue; + } } - } - if (result != null) { + this.simulationLine = result.steps; + return result; } - return result; + return null; } private List simulate(final ITickableAimProcessor aimProcessor, final Vec3d goalDelta, final float pitch, From 3eb7610f8917eb5f30d25593341ea98435c41e79 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 20:45:59 -0500 Subject: [PATCH 756/935] Block lookup optimization --- .../baritone/behavior/ElytraBehavior.java | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 3318e105a..192aa90b1 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -870,13 +870,10 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { clear = ctx.world().rayTraceBlocks(start, dest, false, false, false) == null; } - if (clear) { - this.clearLines.add(new Pair<>(start, dest)); - return true; - } else { - this.blockedLines.add(new Pair<>(start, dest)); - return false; + if (Baritone.settings().renderRaytraces.value) { + (clear ? this.clearLines : this.blockedLines).add(new Pair<>(start, dest)); } + return clear; } private static FloatArrayList pitchesToSolveFor(final float goodPitch, final boolean desperate) { @@ -1035,7 +1032,7 @@ private List simulate(final ITickableAimProcessor aimProcessor, final Vec displacement.add(Vec3d.ZERO); for (int i = 0; i < ticks; i++) { - if (MC_1_12_Collision_Fix.bonk(ctx, hitbox)) { + if (MC_1_12_Collision_Fix.bonk(ctx, this.bsi, hitbox)) { return null; } if (delta.lengthSquared() < 1) { @@ -1132,32 +1129,35 @@ private static boolean passable(IBlockState state, boolean ignoreLava) { */ private static final class MC_1_12_Collision_Fix { - public static boolean bonk(final IPlayerContext ctx, final AxisAlignedBB aabb) { + public static boolean bonk(final IPlayerContext ctx, final BlockStateInterface bsi, final AxisAlignedBB aabb) { final Vec3d center = aabb.getCenter(); final double width = (double) ctx.player().width * 0.35D; final double x = center.x; final double y = aabb.minY + 0.5D; final double z = center.z; - return pushOutOfBlocks(ctx, x - width, y, z + width) - || pushOutOfBlocks(ctx, x - width, y, z - width) - || pushOutOfBlocks(ctx, x + width, y, z - width) - || pushOutOfBlocks(ctx, x + width, y, z + width); + return pushOutOfBlocks(bsi, x - width, y, z + width) + || pushOutOfBlocks(bsi, x - width, y, z - width) + || pushOutOfBlocks(bsi, x + width, y, z - width) + || pushOutOfBlocks(bsi, x + width, y, z + width); } - private static boolean pushOutOfBlocks(final IPlayerContext ctx, final double x, final double y, final double z) { - final BlockPos pos = new BlockPos(x, y, z); - if (isOpenBlockSpace(ctx, pos)) { + private static boolean pushOutOfBlocks(final BlockStateInterface bsi, + final double xIn, final double yIn, final double zIn) { + final int x = MathHelper.floor(xIn); + final int y = MathHelper.floor(yIn); + final int z = MathHelper.floor(zIn); + if (isOpenBlockSpace(bsi, x, y, z)) { return false; } - return isOpenBlockSpace(ctx, pos.west()) - || isOpenBlockSpace(ctx, pos.east()) - || isOpenBlockSpace(ctx, pos.north()) - || isOpenBlockSpace(ctx, pos.south()); + return isOpenBlockSpace(bsi, x - 1, y, z) + || isOpenBlockSpace(bsi, x + 1, y, z) + || isOpenBlockSpace(bsi, x, y, z - 1) + || isOpenBlockSpace(bsi, x, y, z + 1); } - private static boolean isOpenBlockSpace(IPlayerContext ctx, BlockPos pos) { - return !ctx.world().getBlockState(pos).isNormalCube() && !ctx.world().getBlockState(pos.up()).isNormalCube(); + private static boolean isOpenBlockSpace(BlockStateInterface bsi, final int x, final int y, final int z) { + return !bsi.get0(x, y, z).isNormalCube() && !bsi.get0(x, y + 1, z).isNormalCube(); } } From b8ede0a652d11aa578b7fea44679f03cc447ea4e Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 22:54:55 -0500 Subject: [PATCH 757/935] Remove unnecessary `IPlayerContext` argument --- src/main/java/baritone/behavior/ElytraBehavior.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 192aa90b1..12cb77a7a 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -1032,7 +1032,7 @@ private List simulate(final ITickableAimProcessor aimProcessor, final Vec displacement.add(Vec3d.ZERO); for (int i = 0; i < ticks; i++) { - if (MC_1_12_Collision_Fix.bonk(ctx, this.bsi, hitbox)) { + if (MC_1_12_Collision_Fix.bonk(this.bsi, hitbox)) { return null; } if (delta.lengthSquared() < 1) { @@ -1129,9 +1129,9 @@ private static boolean passable(IBlockState state, boolean ignoreLava) { */ private static final class MC_1_12_Collision_Fix { - public static boolean bonk(final IPlayerContext ctx, final BlockStateInterface bsi, final AxisAlignedBB aabb) { + public static boolean bonk(final BlockStateInterface bsi, final AxisAlignedBB aabb) { final Vec3d center = aabb.getCenter(); - final double width = (double) ctx.player().width * 0.35D; + final double width = (aabb.maxX - aabb.minX) * 0.35D; final double x = center.x; final double y = aabb.minY + 0.5D; final double z = center.z; From b4578931d3262af35a8dbb3cfb519fe197ef3591 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 22:59:15 -0500 Subject: [PATCH 758/935] Reduce passing around of `ignoreLava` --- .../baritone/behavior/ElytraBehavior.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 12cb77a7a..954755fa4 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -533,8 +533,6 @@ private Solution solveAngles(final SolverContext context) { final NetherPath path = context.path; final int playerNear = context.playerNear; final Vec3d start = context.start; - - final boolean isInLava = ctx.player().isInLava(); Solution solution = null; for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) @@ -596,11 +594,11 @@ private Solution solveAngles(final SolverContext context) { final Double growth = relaxation == 2 ? null : relaxation == 0 ? 2 * minAvoidance : minAvoidance; - if (this.isHitboxClear(start, dest, growth, isInLava)) { + if (this.isHitboxClear(context, dest, growth)) { // Yaw is trivial, just calculate the rotation required to face the destination final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); - final Pair pitch = this.solvePitch(context, dest, relaxation, isInLava); + final Pair pitch = this.solvePitch(context, dest, relaxation); if (pitch == null) { solution = new Solution(context, new Rotation(yaw, ctx.playerRotations().getPitch()), null, false, false); continue; @@ -654,6 +652,7 @@ private final class SolverContext { public final NetherPath path; public final int playerNear; public final Vec3d start; + public final boolean ignoreLava; public final FireworkBoost boost; public final IAimProcessor aimProcessor; @@ -661,6 +660,7 @@ public SolverContext(boolean async) { this.path = ElytraBehavior.this.pathManager.getPath(); this.playerNear = ElytraBehavior.this.pathManager.getNear(); this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); + this.ignoreLava = ElytraBehavior.this.ctx.player().isInLava(); final Integer fireworkTicksExisted; if (async && ElytraBehavior.this.deployedFireworkLastTick) { @@ -692,6 +692,7 @@ public boolean equals(Object o) { return this.path == other.path // Contents aren't modified, just compare by reference && this.playerNear == other.playerNear && Objects.equals(this.start, other.start) + && this.ignoreLava == other.ignoreLava && Objects.equals(this.boost, other.boost); } } @@ -809,7 +810,10 @@ private Optional getAttachedFirework() { .findFirst(); } - private boolean isHitboxClear(final Vec3d start, final Vec3d dest, final Double growAmount, boolean ignoreLava) { + private boolean isHitboxClear(final SolverContext context, final Vec3d dest, final Double growAmount) { + final Vec3d start = context.start; + final boolean ignoreLava = context.ignoreLava; + if (!this.clearView(start, dest, ignoreLava)) { return false; } @@ -908,15 +912,13 @@ public IntTriple(int first, int second, int third) { } } - private Pair solvePitch(final SolverContext context, final Vec3d goal, - final int relaxation, final boolean ignoreLava) { - + private Pair solvePitch(final SolverContext context, final Vec3d goal, final int relaxation) { final boolean desperate = relaxation == 2; final float goodPitch = RotationUtils.calcRotationFromVec3d(context.start, goal, ctx.playerRotations()).getPitch(); final FloatArrayList pitches = pitchesToSolveFor(goodPitch, desperate); final IntTriFunction solve = (ticks, ticksBoosted, ticksBoostDelay) -> - this.solvePitch(context, goal, relaxation, pitches.iterator(), ticks, ticksBoosted, ticksBoostDelay, ignoreLava); + this.solvePitch(context, goal, relaxation, pitches.iterator(), ticks, ticksBoosted, ticksBoostDelay); final List tests = new ArrayList<>(); @@ -968,7 +970,7 @@ private Pair solvePitch(final SolverContext context, final Vec3d private PitchResult solvePitch(final SolverContext context, final Vec3d goal, final int relaxation, final FloatIterator pitches, final int ticks, final int ticksBoosted, - final int ticksBoostDelay, final boolean ignoreLava) { + final int ticksBoostDelay) { // we are at a certain velocity, but we have a target velocity // what pitch would get us closest to our target velocity? // yaw is easy so we only care about pitch @@ -987,7 +989,7 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi ticks, ticksBoosted, ticksBoostDelay, - ignoreLava + context.ignoreLava ); if (displacement == null) { continue; From 4590ba3ff83788c64e1fe0e3b79a0b12b444ff53 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 29 Jun 2023 23:35:12 -0500 Subject: [PATCH 759/935] Use separate executor for solver --- src/main/java/baritone/behavior/ElytraBehavior.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 954755fa4..3fbe06e44 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -51,9 +51,7 @@ import net.minecraft.world.chunk.Chunk; import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.Future; +import java.util.concurrent.*; import java.util.function.UnaryOperator; public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { @@ -92,13 +90,15 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H */ private int minimumBoostTicks; + private boolean deployedFireworkLastTick; + private final int[] nextTickBoostCounter; + private BlockStateInterface bsi; private BlockPos destination; + private final ExecutorService solverExecutor; private Future solver; private Solution pendingSolution; - private boolean deployedFireworkLastTick; - private final int[] nextTickBoostCounter; private boolean solveNextTick; public ElytraBehavior(Baritone baritone) { @@ -109,6 +109,7 @@ public ElytraBehavior(Baritone baritone) { this.visiblePath = Collections.emptyList(); this.pathManager = this.new PathManager(); this.process = new ElytraProcess(); + this.solverExecutor = Executors.newSingleThreadExecutor(); this.nextTickBoostCounter = new int[2]; } @@ -524,7 +525,7 @@ public void onPostTick(TickEvent event) { this.pathManager.updatePlayerNear(); final SolverContext context = this.new SolverContext(true); - this.solver = CompletableFuture.supplyAsync(() -> this.solveAngles(context)); + this.solver = this.solverExecutor.submit(() -> this.solveAngles(context)); this.solveNextTick = false; } } From 8211ae4af58585ca3077c558c00b480d7d72ab59 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 29 Jun 2023 21:59:31 -0700 Subject: [PATCH 760/935] memory leaks are joever --- src/api/java/baritone/api/Settings.java | 7 +++++++ src/main/java/baritone/cache/CachedWorld.java | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 824dfd7e2..a8e4ced7d 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -622,6 +622,13 @@ public final class Settings { */ public final Setting pruneRegionsFromRAM = new Setting<>(true); + /** + * The chunk packer queue can never grow to larger than this, if it does, the oldest chunks are discarded + *

+ * The newest chunks are kept, so that if you're moving in a straight line quickly then stop, your immediate render distance is still included + */ + public final Setting chunkPackerQueueMaxSize = new Setting<>(2000); + /** * Fill in blocks behind you */ diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 6b3959fe3..32112f20f 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -307,6 +307,9 @@ public void run() { try { ChunkPos pos = toPackQueue.take(); Chunk chunk = toPackMap.remove(pos); + if (toPackQueue.size() > Baritone.settings().chunkPackerQueueMaxSize.value) { + continue; + } CachedChunk cached = ChunkPacker.pack(chunk); CachedWorld.this.updateCachedChunk(cached); //System.out.println("Processed chunk at " + chunk.x + "," + chunk.z); From d32f1b2a16a947794ef5b7e20827eb16faba9a6c Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 30 Jun 2023 20:38:45 -0500 Subject: [PATCH 761/935] Add hit pos raytrace method to context --- .../baritone/behavior/elytra/NetherPathfinderContext.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index d82372a99..f0197ca78 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -108,6 +108,10 @@ public boolean raytrace(final int count, final double[] src, final double[] dst, throw new IllegalArgumentException("lol"); } + public void raytrace(final int count, final double[] src, final double[] dst, final boolean[] hitsOut, final double[] hitPosOut) { + NetherPathfinder.raytrace(this.context, true, count, src, dst, hitsOut, hitPosOut); + } + public void cancel() { NetherPathfinder.cancel(this.context); } From 83066fc57c1173aa6595375578751410fcc2cdcb Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 30 Jun 2023 20:42:03 -0500 Subject: [PATCH 762/935] Find jump off spot using INSANE custom CalculationContext --- .../api/process/PathingCommandType.java | 7 +- .../baritone/behavior/ElytraBehavior.java | 171 +++++++++--------- .../baritone/behavior/PathingBehavior.java | 2 +- .../pathing/movement/CalculationContext.java | 4 +- .../movement/movements/MovementDescend.java | 8 + .../baritone/utils/InputOverrideHandler.java | 2 +- .../java/baritone/utils/PathRenderer.java | 4 +- .../baritone/utils/PathingControlManager.java | 4 +- 8 files changed, 115 insertions(+), 87 deletions(-) diff --git a/src/api/java/baritone/api/process/PathingCommandType.java b/src/api/java/baritone/api/process/PathingCommandType.java index af25591af..cde38eaf2 100644 --- a/src/api/java/baritone/api/process/PathingCommandType.java +++ b/src/api/java/baritone/api/process/PathingCommandType.java @@ -56,5 +56,10 @@ public enum PathingCommandType { /** * Go and ask the next process what to do */ - DEFER + DEFER, + + /** + * Sets the goal and calculates a path, but pauses instead of immediately starting the path. + */ + SET_GOAL_AND_PAUSE } diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 3fbe06e44..c31624435 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -18,24 +18,28 @@ package baritone.behavior; import baritone.Baritone; +import baritone.api.IBaritone; import baritone.api.behavior.IElytraBehavior; import baritone.api.behavior.look.IAimProcessor; import baritone.api.behavior.look.ITickableAimProcessor; import baritone.api.event.events.*; import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalGetToBlock; +import baritone.api.pathing.goals.GoalYLevel; +import baritone.api.pathing.movement.IMovement; +import baritone.api.pathing.path.IPathExecutor; import baritone.api.process.IBaritoneProcess; import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; import baritone.api.utils.*; import baritone.api.utils.input.Input; -import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.elytra.NetherPathfinderContext; import baritone.behavior.elytra.NetherPath; import baritone.behavior.elytra.PathCalculationException; import baritone.behavior.elytra.UnpackedSegment; -import baritone.cache.FasterWorldScanner; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.movements.MovementFall; import baritone.utils.BlockStateInterface; +import baritone.utils.PathingCommandContext; import baritone.utils.accessor.IEntityFireworkRocket; import it.unimi.dsi.fastutil.floats.FloatArrayList; import it.unimi.dsi.fastutil.floats.FloatIterator; @@ -54,6 +58,8 @@ import java.util.concurrent.*; import java.util.function.UnaryOperator; +import static baritone.api.pathing.movement.ActionCosts.COST_INF; + public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { /** @@ -106,7 +112,6 @@ public ElytraBehavior(Baritone baritone) { this.context = new NetherPathfinderContext(NETHER_SEED); this.clearLines = new CopyOnWriteArrayList<>(); this.blockedLines = new CopyOnWriteArrayList<>(); - this.visiblePath = Collections.emptyList(); this.pathManager = this.new PathManager(); this.process = new ElytraProcess(); this.solverExecutor = Executors.newSingleThreadExecutor(); @@ -395,9 +400,7 @@ public void pathTo(BlockPos destination) { @Override public void cancel() { this.destination = null; - this.visiblePath = Collections.emptyList(); this.pathManager.clear(); - this.aimPos = null; this.remainingFireworkTicks = 0; this.remainingSetBackTicks = 0; if (this.solver != null) { @@ -446,12 +449,16 @@ public void onTick(final TickEvent event) { // Reset rendered elements this.clearLines.clear(); this.blockedLines.clear(); + this.visiblePath = null; this.simulationLine = null; this.aimPos = null; final List path = this.pathManager.getPath(); if (path.isEmpty()) { return; + } else if (this.destination == null) { + this.pathManager.clear(); + return; } this.bsi = new BlockStateInterface(ctx); @@ -1190,43 +1197,67 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - if (!Baritone.settings().elytraAutoJump.value) { - return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + if (this.state == State.FLYING || this.state == State.START_FLYING) { + this.state = ctx.player().onGround && Baritone.settings().elytraAutoJump.value + ? State.LOCATE_JUMP + : State.START_FLYING; } - // We were flying, but we're not anymore, reset the state - if (this.state == State.FLYING) { - this.state = State.GET_TO_JUMP; + if (this.state == State.LOCATE_JUMP) { + if (this.goal == null) { + this.goal = new GoalYLevel(31); + } + this.state = State.VALIDATE_PATH; + return new PathingCommandContext(this.goal, PathingCommandType.SET_GOAL_AND_PAUSE, new WalkOffCalculationContext(baritone)); } - if (this.state == State.GET_TO_JUMP) { - if (this.goal == null) { - final BlockPos jumpOff = this.findJumpOffSpot(); - if (jumpOff == null) { + if (this.state == State.VALIDATE_PATH) { + final IPathExecutor executor = baritone.getPathingBehavior().getCurrent(); + if (executor != null && executor.getPath().getGoal() == this.goal) { + final IMovement fall = executor.getPath().movements().stream() + .filter(movement -> movement instanceof MovementFall) + .findFirst().orElse(null); + + if (fall != null) { + ElytraBehavior.this.pathManager.pathToDestination(fall.getSrc()); + this.state = State.WAIT_ELYTRA_PATH; + } else { onLostControl(); - logDirect("Couldn't find a suitable spot to jump off of, canceling"); + logDirect("Jump off path didn't include a fall movement, canceling"); return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - this.goal = new GoalGetToBlock(jumpOff); - ElytraBehavior.this.pathManager.pathToDestination(jumpOff.add(0, -4, 0)); } - if (this.goal.isInGoal(ctx.playerFeet())) { + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + + // yucky + if (this.state == State.WAIT_ELYTRA_PATH) { + if (!ElytraBehavior.this.pathManager.getPath().isEmpty()) { + this.state = State.GET_TO_JUMP; + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + + if (this.state == State.GET_TO_JUMP) { + final IPathExecutor executor = baritone.getPathingBehavior().getCurrent(); + final boolean canStartFlying = ctx.player().fallDistance > 1.0f + && !isSafeToCancel + && executor != null + && executor.getPath().movements().get(executor.getPosition()) instanceof MovementFall; + + if (canStartFlying) { this.state = State.START_FLYING; } else { - return new PathingCommand(this.goal, PathingCommandType.SET_GOAL_AND_PATH); + return new PathingCommand(null, PathingCommandType.SET_GOAL_AND_PATH); } } - if (this.state == State.START_FLYING && isSafeToCancel && !ElytraBehavior.this.pathManager.getPath().isEmpty()) { - baritone.getLookBehavior().updateTarget(RotationUtils.calcRotationFromVec3d( - ctx.playerHead(), - VecUtils.getBlockPosCenter(((IGoalRenderPos) this.goal).getGoalPos()), - ctx.playerRotations() - ), false); - baritone.getInputOverrideHandler().setInputForceState(Input.MOVE_FORWARD, true); - if (ctx.player().fallDistance > 0.0f) { - baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); + if (this.state == State.START_FLYING) { + if (!isSafeToCancel) { + // owned + baritone.getPathingBehavior().secretInternalSegmentCancel(); } + baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); } return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } @@ -1239,7 +1270,7 @@ public boolean isTemporary() { @Override public void onLostControl() { this.goal = null; - this.state = State.GET_TO_JUMP; + this.state = State.START_FLYING; ElytraBehavior.this.cancel(); } @@ -1252,64 +1283,42 @@ public double priority() { public String displayName0() { return "Elytra"; } + } - // ok... now this.. is disgusting - // TODO: make less scuffed - private BlockPos findJumpOffSpot() { - BlockPos best = null; - final BetterBlockPos feet = ctx.playerFeet(); - final List nearby = FasterWorldScanner.getChunkRange(feet.x >> 4, feet.z >> 4, 3); - for (ChunkPos pos : nearby) { - final Chunk chunk = ctx.world().getChunk(pos.x, pos.z); - int[][] obstruction = new int[16][16]; - for (int y0 = 0; y0 < 8; y0++) { - for (int z = 0; z < 16; z++) { - for (int x = 0; x < 16; x++) { - int y = feet.y - y0; - if (chunk.getBlockState(x, y, z).getMaterial() != Material.AIR) { - if (obstruction[x][z] == 0 || obstruction[x][z] > y0 + 1) { - obstruction[x][z] = y0 + 1; - } - } - } - } - } - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - if (obstruction[x][z] != 0) { - continue; - } + /** + * Custom calculation context which makes the player fall into lava + */ + private static final class WalkOffCalculationContext extends CalculationContext { - final int[] adjacent = new int[4]; - if (x > 0) adjacent[0] = obstruction[x - 1][z]; - if (z > 0) adjacent[1] = obstruction[x][z - 1]; - if (x < 15) adjacent[2] = obstruction[x + 1][z]; - if (z < 15) adjacent[3] = obstruction[x][z + 1]; - final OptionalInt minLevel = Arrays.stream(adjacent).filter(i -> i != 0).min(); - - if (minLevel.isPresent() && minLevel.getAsInt() <= 4) { - final int yActual = feet.y - minLevel.getAsInt() + 2; // lol - // The target spot itself is clear - if (chunk.getBlockState(x, yActual, z).getMaterial() != Material.AIR - || chunk.getBlockState(x, yActual + 1, z).getMaterial() != Material.AIR) { - continue; - } - // lessgooo - final BlockPos target = new BlockPos(chunk.x << 4 | x, yActual, chunk.z << 4 | z); - if (best == null || target.distanceSq(feet) < best.distanceSq(feet)) { - best = target; - } - } - } - } - } - return best; + public WalkOffCalculationContext(IBaritone baritone) { + super(baritone, true); + this.allowFallIntoLava = true; + this.maxFallHeightNoWater = 10000; + } + + @Override + public double costOfPlacingAt(int x, int y, int z, IBlockState current) { + return COST_INF; + } + + @Override + public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { + return COST_INF; + } + + @Override + public double placeBucketCost() { + return COST_INF; } } private enum State { + LOCATE_JUMP, + VALIDATE_PATH, + WAIT_ELYTRA_PATH, GET_TO_JUMP, START_FLYING, - FLYING + FLYING, + RESTART_FLYING, } } diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 31a884622..9b1bd9187 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -352,7 +352,7 @@ public void softCancelIfSafe() { } // just cancel the current path - private void secretInternalSegmentCancel() { + public void secretInternalSegmentCancel() { queuePathEvent(PathEvent.CANCELED); synchronized (pathPlanLock) { getInProgress().ifPresent(AbstractNodeCostSearch::cancel); diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 129f00e20..2e7db9946 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -66,11 +66,12 @@ public class CalculationContext { public final boolean allowJumpAt256; public final boolean allowParkourAscend; public final boolean assumeWalkOnWater; + public boolean allowFallIntoLava; public final int frostWalker; public final boolean allowDiagonalDescend; public final boolean allowDiagonalAscend; public final boolean allowDownward; - public final int maxFallHeightNoWater; + public int maxFallHeightNoWater; public final int maxFallHeightBucket; public final double waterWalkSpeed; public final double breakBlockAdditionalCost; @@ -105,6 +106,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.allowJumpAt256 = Baritone.settings().allowJumpAt256.value; this.allowParkourAscend = Baritone.settings().allowParkourAscend.value; this.assumeWalkOnWater = Baritone.settings().assumeWalkOnWater.value; + this.allowFallIntoLava = false; // Super secret internal setting for ElytraBehavior this.frostWalker = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.FROST_WALKER, baritone.getPlayerContext().player()); this.allowDiagonalDescend = Baritone.settings().allowDiagonalDescend.value; this.allowDiagonalAscend = Baritone.settings().allowDiagonalAscend.value; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 2d8180356..7dac6159d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -178,6 +178,14 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, res.cost = tentativeCost;// TODO incorporate water swim up cost? return false; } + if (context.allowFallIntoLava && MovementHelper.isLava(ontoBlock.getBlock())) { + // found a fall into lava + res.x = destX; + res.y = newY; + res.z = destZ; + res.cost = tentativeCost; + return false; + } if (unprotectedFallHeight <= 11 && (ontoBlock.getBlock() == Blocks.VINE || ontoBlock.getBlock() == Blocks.LADDER)) { // if fall height is greater than or equal to 11, we don't actually grab on to vines or ladders. the more you know // this effectively "resets" our falling speed diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index f110b9ce1..fe232786b 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -107,7 +107,7 @@ public final void onTick(TickEvent event) { } private boolean inControl() { - for (Input input : new Input[]{Input.MOVE_FORWARD, Input.MOVE_BACK, Input.MOVE_LEFT, Input.MOVE_RIGHT, Input.SNEAK}) { + for (Input input : new Input[]{Input.MOVE_FORWARD, Input.MOVE_BACK, Input.MOVE_LEFT, Input.MOVE_RIGHT, Input.SNEAK, Input.JUMP}) { if (isInputForcedDown(input)) { return true; } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index d09567914..eb7615de8 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -104,7 +104,9 @@ public static void render(RenderEvent event, PathingBehavior behavior) { final ElytraBehavior elytra = behavior.baritone.getElytraBehavior(); - drawPath(elytra.visiblePath, 0, Color.RED, false, 0, 0, 0.0D); + if (elytra.visiblePath != null) { + drawPath(elytra.visiblePath, 0, Color.RED, false, 0, 0, 0.0D); + } if (elytra.aimPos != null) { drawGoal(ctx.player(), new GoalBlock(elytra.aimPos), partialTicks, Color.GREEN); } diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index 236e41cc6..a174c842b 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -99,6 +99,8 @@ public void preTick() { // get rid of the in progress stuff from the last process } switch (command.commandType) { + case SET_GOAL_AND_PAUSE: + p.secretInternalSetGoalAndPath(command); case REQUEST_PAUSE: p.requestPause(); break; @@ -119,7 +121,7 @@ public void preTick() { case SET_GOAL_AND_PATH: // now this i can do if (command.goal != null) { - baritone.getPathingBehavior().secretInternalSetGoalAndPath(command); + p.secretInternalSetGoalAndPath(command); } break; default: From 3498082f2b7077877ef095fe9178cc632ba85f07 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 30 Jun 2023 20:53:42 -0500 Subject: [PATCH 763/935] Better state switch and start path halfway down fall --- .../baritone/behavior/ElytraBehavior.java | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index c31624435..b844d7564 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -155,13 +155,13 @@ public void tick() { this.attemptNextSegment(); } - public void pathToDestination() { - this.pathToDestination(ctx.playerFeet()); + public CompletableFuture pathToDestination() { + return this.pathToDestination(ctx.playerFeet()); } - public void pathToDestination(final BlockPos from) { + public CompletableFuture pathToDestination(final BlockPos from) { final long start = System.nanoTime(); - this.path0(from, ElytraBehavior.this.destination, UnaryOperator.identity()) + return this.path0(from, ElytraBehavior.this.destination, UnaryOperator.identity()) .thenRun(() -> { final double distance = this.path.get(0).distanceTo(this.path.get(this.path.size() - 1)); if (this.completePath) { @@ -1219,8 +1219,19 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { .findFirst().orElse(null); if (fall != null) { - ElytraBehavior.this.pathManager.pathToDestination(fall.getSrc()); - this.state = State.WAIT_ELYTRA_PATH; + final BetterBlockPos from = new BetterBlockPos( + (fall.getSrc().x + fall.getDest().x) / 2, + (fall.getSrc().y + fall.getDest().y) / 2, + (fall.getSrc().z + fall.getDest().z) / 2 + ); + ElytraBehavior.this.pathManager.pathToDestination(from).whenComplete((result, ex) -> { + if (ex == null) { + this.state = State.GET_TO_JUMP; + } else { + this.onLostControl(); // this is fine :Smile: + } + }); + this.state = State.PAUSE; } else { onLostControl(); logDirect("Jump off path didn't include a fall movement, canceling"); @@ -1231,10 +1242,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } // yucky - if (this.state == State.WAIT_ELYTRA_PATH) { - if (!ElytraBehavior.this.pathManager.getPath().isEmpty()) { - this.state = State.GET_TO_JUMP; - } + if (this.state == State.PAUSE) { return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } @@ -1257,7 +1265,10 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { // owned baritone.getPathingBehavior().secretInternalSegmentCancel(); } - baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); + baritone.getInputOverrideHandler().clearAllKeys(); + if (ctx.player().fallDistance > 1.0f) { + baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); + } } return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } @@ -1315,7 +1326,7 @@ public double placeBucketCost() { private enum State { LOCATE_JUMP, VALIDATE_PATH, - WAIT_ELYTRA_PATH, + PAUSE, GET_TO_JUMP, START_FLYING, FLYING, From 2f7dc2397e97994a5dd36fc6730636bb055fa05a Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 1 Jul 2023 01:32:03 -0500 Subject: [PATCH 764/935] Better start position selection and validation --- .../baritone/behavior/ElytraBehavior.java | 33 ++++++++++++++++--- .../movement/movements/MovementDescend.java | 2 +- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index b844d7564..d7f6ff8b9 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -56,6 +56,7 @@ import java.util.*; import java.util.concurrent.*; +import java.util.function.Supplier; import java.util.function.UnaryOperator; import static baritone.api.pathing.movement.ActionCosts.COST_INF; @@ -1225,11 +1226,17 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { (fall.getSrc().z + fall.getDest().z) / 2 ); ElytraBehavior.this.pathManager.pathToDestination(from).whenComplete((result, ex) -> { + if (!ElytraBehavior.this.clearView(new Vec3d(from), ElytraBehavior.this.pathManager.getPath().getVec(0), false)) { + onLostControl(); + // TODO: Get to higher ground and then look again + logDirect("Can't see start of path from jump spot, canceling"); + return; + } if (ex == null) { this.state = State.GET_TO_JUMP; - } else { - this.onLostControl(); // this is fine :Smile: + return; } + onLostControl(); }); this.state = State.PAUSE; } else { @@ -1292,7 +1299,24 @@ public double priority() { @Override public String displayName0() { - return "Elytra"; + final Supplier status = () -> { + switch (this.state) { + case LOCATE_JUMP: + return "Finding spot to jump off"; + case VALIDATE_PATH: + return "Validating path"; + case PAUSE: + return "Waiting for elytra path"; + case GET_TO_JUMP: + return "Walking to takeoff"; + case START_FLYING: + return "Begin flying"; + case FLYING: + return "Flying"; + } + return "Unknown"; + }; + return "Elytra - " + status.get(); } } @@ -1329,7 +1353,6 @@ private enum State { PAUSE, GET_TO_JUMP, START_FLYING, - FLYING, - RESTART_FLYING, + FLYING } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 7dac6159d..51275bc00 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -178,7 +178,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, res.cost = tentativeCost;// TODO incorporate water swim up cost? return false; } - if (context.allowFallIntoLava && MovementHelper.isLava(ontoBlock.getBlock())) { + if (fallHeight >= 8 && context.allowFallIntoLava && MovementHelper.isLava(ontoBlock.getBlock())) { // found a fall into lava res.x = destX; res.y = newY; From 14b5a0cec3a601cb5c67b1e1fac0d40826b1e492 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 1 Jul 2023 17:28:23 -0500 Subject: [PATCH 765/935] Fix Forge support --- src/launch/java/baritone/launch/mixins/MixinEntity.java | 3 --- .../java/baritone/launch/mixins/MixinEntityLivingBase.java | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index c4f99acbd..b71ee499e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -40,7 +40,4 @@ public abstract class MixinEntity { @Shadow public float rotationYaw; - - @Shadow - public abstract void moveRelative(float strafe, float up, float forward, float friction); } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index db2faa940..56b70f085 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -117,7 +117,8 @@ private void onPostElytraMove(float strafe, float vertical, float forward, Callb private void onMoveRelative(EntityLivingBase self, float strafe, float up, float forward, float friction) { Optional baritone = this.getBaritone(); if (!baritone.isPresent()) { - this.moveRelative(strafe, up, forward, friction); + // If a shadow is used here it breaks on Forge + self.moveRelative(strafe, up, forward, friction); return; } @@ -127,7 +128,7 @@ private void onMoveRelative(EntityLivingBase self, float strafe, float up, float this.rotationYaw = event.getYaw(); this.rotationPitch = event.getPitch(); - this.moveRelative(strafe, up, forward, friction); + self.moveRelative(strafe, up, forward, friction); this.rotationYaw = event.getOriginal().getYaw(); this.rotationPitch = event.getOriginal().getPitch(); From ccd737d0a1e3c5afbd0db7b361cc2916b9862bd9 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 1 Jul 2023 18:38:13 -0500 Subject: [PATCH 766/935] Actually fix Forge by reverting Mixin change completely --- .../java/baritone/launch/mixins/MixinEntity.java | 6 ------ .../launch/mixins/MixinEntityLivingBase.java | 12 +++++++++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index b71ee499e..a611507b8 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -34,10 +34,4 @@ public abstract class MixinEntity { @Shadow protected EntityDataManager dataManager; - - @Shadow - public float rotationPitch; - - @Shadow - public float rotationYaw; } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index 56b70f085..92f065184 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -21,7 +21,9 @@ import baritone.api.IBaritone; import baritone.api.event.events.RotationMoveEvent; import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -38,7 +40,7 @@ * @since 9/10/2018 */ @Mixin(EntityLivingBase.class) -public abstract class MixinEntityLivingBase extends MixinEntity { +public abstract class MixinEntityLivingBase extends Entity { /** * Event called to override the movement direction when jumping @@ -49,6 +51,10 @@ public abstract class MixinEntityLivingBase extends MixinEntity { @Unique private RotationMoveEvent elytraRotationEvent; + public MixinEntityLivingBase(World worldIn) { + super(worldIn); + } + @Inject( method = "jump", at = @At("HEAD") @@ -118,7 +124,7 @@ private void onMoveRelative(EntityLivingBase self, float strafe, float up, float Optional baritone = this.getBaritone(); if (!baritone.isPresent()) { // If a shadow is used here it breaks on Forge - self.moveRelative(strafe, up, forward, friction); + this.moveRelative(strafe, up, forward, friction); return; } @@ -128,7 +134,7 @@ private void onMoveRelative(EntityLivingBase self, float strafe, float up, float this.rotationYaw = event.getYaw(); this.rotationPitch = event.getPitch(); - self.moveRelative(strafe, up, forward, friction); + this.moveRelative(strafe, up, forward, friction); this.rotationYaw = event.getOriginal().getYaw(); this.rotationPitch = event.getOriginal().getPitch(); From dee7df1534aec68f4bb017eb6d8f5ecc54e4b6f3 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 1 Jul 2023 19:38:38 -0500 Subject: [PATCH 767/935] I HATE OLD MIXIN!!!! awesome buggy 0.7.11 hates referencing shadows in mixin superclasses wooooooo --- .../baritone/launch/mixins/MixinEntity.java | 37 ------------------- .../mixins/MixinEntityFireworkRocket.java | 7 +++- .../launch/mixins/MixinEntityLivingBase.java | 2 +- src/launch/resources/mixins.baritone.json | 1 - 4 files changed, 7 insertions(+), 40 deletions(-) delete mode 100644 src/launch/java/baritone/launch/mixins/MixinEntity.java diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java deleted file mode 100644 index a611507b8..000000000 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 net.minecraft.entity.Entity; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.world.World; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -/** - * @author Brady - */ -@Mixin(Entity.class) -public abstract class MixinEntity { - - @Shadow - public World world; - - @Shadow - protected EntityDataManager dataManager; -} diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java b/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java index 559ae0d54..f6c6fbd3e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityFireworkRocket.java @@ -22,12 +22,13 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityFireworkRocket; import net.minecraft.network.datasync.DataParameter; +import net.minecraft.world.World; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @Mixin(EntityFireworkRocket.class) -public abstract class MixinEntityFireworkRocket extends MixinEntity implements IEntityFireworkRocket { +public abstract class MixinEntityFireworkRocket extends Entity implements IEntityFireworkRocket { @Shadow @Final @@ -39,6 +40,10 @@ public abstract class MixinEntityFireworkRocket extends MixinEntity implements I @Shadow public abstract boolean isAttachedToEntity(); + private MixinEntityFireworkRocket(World worldIn) { + super(worldIn); + } + @Override public EntityLivingBase getBoostedEntity() { if (this.isAttachedToEntity() && this.boostedEntity == null) { diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index 92f065184..df1163ea8 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -51,7 +51,7 @@ public abstract class MixinEntityLivingBase extends Entity { @Unique private RotationMoveEvent elytraRotationEvent; - public MixinEntityLivingBase(World worldIn) { + private MixinEntityLivingBase(World worldIn) { super(worldIn); } diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index cbade3329..5c221de58 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -16,7 +16,6 @@ "MixinChunkProviderServer", "MixinChunkRenderContainer", "MixinChunkRenderWorker", - "MixinEntity", "MixinEntityFireworkRocket", "MixinEntityLivingBase", "MixinEntityPlayerSP", From fc209599af9ffb17785ea36d3728147ac2357712 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 2 Jul 2023 01:03:34 -0500 Subject: [PATCH 768/935] Update `nether-pathfinder` to 0.21 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 58929d98b..99d7cc823 100755 --- a/build.gradle +++ b/build.gradle @@ -175,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.20') + launchImplementation('dev.babbaj:nether-pathfinder:0.21') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.20' + implementation 'dev.babbaj:nether-pathfinder:0.21' } mixin { From 6654476da435203df9f5f42ed9f41310f5560c30 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 2 Jul 2023 19:59:26 -0500 Subject: [PATCH 769/935] Make `blockFreeLook` depend on `freeLook` --- src/api/java/baritone/api/Settings.java | 3 +-- src/main/java/baritone/behavior/LookBehavior.java | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index a8e4ced7d..da241d6ba 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -731,8 +731,7 @@ public final class Settings { public final Setting freeLook = new Setting<>(true); /** - * Break and place blocks without having to force the client-sided rotations. Having this setting enabled implies - * {@link #freeLook}. + * Break and place blocks without having to force the client-sided rotations. Requires {@link #freeLook}. */ public final Setting blockFreeLook = new Setting<>(false); diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index d438e8f85..372cf1aae 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -135,10 +135,10 @@ public void pig() { } public Optional getEffectiveRotation() { - if (Baritone.settings().freeLook.value || Baritone.settings().blockFreeLook.value) { + if (Baritone.settings().freeLook.value) { return Optional.ofNullable(this.serverRotation); } - // If neither of the freeLook settings are on, just defer to the player's actual rotations + // If freeLook isn't on, just defer to the player's actual rotations return Optional.empty(); } @@ -306,7 +306,7 @@ static Mode resolve(boolean blockInteract) { final boolean blockFreeLook = settings.blockFreeLook.value; final boolean freeLook = settings.freeLook.value; - if (!freeLook && !blockFreeLook) return CLIENT; + if (!freeLook) return CLIENT; if (!blockFreeLook && blockInteract) return CLIENT; // Regardless of if antiCheatCompatibility is enabled, if a blockInteract is requested then the player From c8259d3e90b372ba55b25172dae133ed5761fc72 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 3 Jul 2023 13:27:23 -0500 Subject: [PATCH 770/935] ZOOM --- .../baritone/api/utils/BetterBlockPos.java | 20 ++++ .../baritone/behavior/ElytraBehavior.java | 101 ++++++++++++------ .../behavior/elytra/UnpackedSegment.java | 3 +- .../java/baritone/utils/BaritoneMath.java | 37 +++++++ 4 files changed, 126 insertions(+), 35 deletions(-) create mode 100644 src/main/java/baritone/utils/BaritoneMath.java diff --git a/src/api/java/baritone/api/utils/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java index 01e53402e..3eb8068c1 100644 --- a/src/api/java/baritone/api/utils/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -35,6 +35,15 @@ */ public final class BetterBlockPos extends BlockPos { + private static final int NUM_X_BITS = 26; + private static final int NUM_Z_BITS = NUM_X_BITS; + private static final int NUM_Y_BITS = 64 - NUM_X_BITS - NUM_Z_BITS; + private static final int Y_SHIFT = NUM_Z_BITS; + private static final int X_SHIFT = Y_SHIFT + NUM_Y_BITS; + private static final long X_MASK = (1L << NUM_X_BITS) - 1L; + private static final long Y_MASK = (1L << NUM_Y_BITS) - 1L; + private static final long Z_MASK = (1L << NUM_Z_BITS) - 1L; + public static final BetterBlockPos ORIGIN = new BetterBlockPos(0, 0, 0); public final int x; @@ -226,4 +235,15 @@ public String toString() { SettingsUtil.maybeCensor(z) ); } + + public static long serializeToLong(final int x, final int y, final int z) { + return ((long) x & X_MASK) << X_SHIFT | ((long) y & Y_MASK) << Y_SHIFT | ((long) z & Z_MASK); + } + + public static BetterBlockPos deserializeFromLong(final long serialized) { + final int x = (int) (serialized << 64 - X_SHIFT - NUM_X_BITS >> 64 - NUM_X_BITS); + final int y = (int) (serialized << 64 - Y_SHIFT - NUM_Y_BITS >> 64 - NUM_Y_BITS); + final int z = (int) (serialized << 64 - NUM_Z_BITS >> 64 - NUM_Z_BITS); + return new BetterBlockPos(x, y, z); + } } diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index d7f6ff8b9..73ccb69f1 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -43,6 +43,7 @@ import baritone.utils.accessor.IEntityFireworkRocket; import it.unimi.dsi.fastutil.floats.FloatArrayList; import it.unimi.dsi.fastutil.floats.FloatIterator; +import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; @@ -60,6 +61,8 @@ import java.util.function.UnaryOperator; import static baritone.api.pathing.movement.ActionCosts.COST_INF; +import static baritone.utils.BaritoneMath.fastCeil; +import static baritone.utils.BaritoneMath.fastFloor; public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { @@ -447,6 +450,9 @@ public void onTick(final TickEvent event) { this.minimumBoostTicks = 0; } + // lol + MC_1_12_Collision_Fix.clear(); + // Reset rendered elements this.clearLines.clear(); this.blockedLines.clear(); @@ -567,7 +573,7 @@ private Solution solveAngles(final SolverContext context) { } else { // Create a point along the segment every block final Vec3d delta = path.getVec(i).subtract(path.getVec(i - 1)); - final int steps = MathHelper.floor(delta.length()); + final int steps = fastFloor(delta.length()); final Vec3d step = delta.normalize(); Vec3d stepped = path.getVec(i); for (int interp = 0; interp < steps; interp++) { @@ -893,7 +899,7 @@ private static FloatArrayList pitchesToSolveFor(final float goodPitch, final boo final float minPitch = desperate ? -90 : Math.max(goodPitch - Baritone.settings().elytraPitchRange.value, -89); final float maxPitch = desperate ? 90 : Math.min(goodPitch + Baritone.settings().elytraPitchRange.value, 89); - final FloatArrayList pitchValues = new FloatArrayList(MathHelper.ceil(maxPitch - minPitch) + 1); + final FloatArrayList pitchValues = new FloatArrayList(fastCeil(maxPitch - minPitch) + 1); for (float pitch = goodPitch; pitch <= maxPitch; pitch++) { pitchValues.add(pitch); } @@ -1039,11 +1045,13 @@ private List simulate(final ITickableAimProcessor aimProcessor, final Vec Vec3d delta = goalDelta; Vec3d motion = ctx.playerMotion(); AxisAlignedBB hitbox = ctx.player().getEntityBoundingBox(); - List displacement = new ArrayList<>(); + List displacement = new ArrayList<>(ticks + 1); displacement.add(Vec3d.ZERO); for (int i = 0; i < ticks; i++) { - if (MC_1_12_Collision_Fix.bonk(this.bsi, hitbox)) { + final double cx = hitbox.minX + (hitbox.maxX - hitbox.minX) * 0.5D; + final double cz = hitbox.minZ + (hitbox.maxZ - hitbox.minZ) * 0.5D; + if (MC_1_12_Collision_Fix.bonk(this.bsi, cx, hitbox.minY, cz)) { return null; } if (delta.lengthSquared() < 1) { @@ -1060,9 +1068,9 @@ private List simulate(final ITickableAimProcessor aimProcessor, final Vec // Collision box while the player is in motion, with additional padding for safety final AxisAlignedBB inMotion = hitbox.expand(motion.x, motion.y, motion.z).grow(0.01); - for (int x = MathHelper.floor(inMotion.minX); x < MathHelper.ceil(inMotion.maxX); x++) { - for (int y = MathHelper.floor(inMotion.minY); y < MathHelper.ceil(inMotion.maxY); y++) { - for (int z = MathHelper.floor(inMotion.minZ); z < MathHelper.ceil(inMotion.maxZ); z++) { + for (int x = fastFloor(inMotion.minX); x < fastCeil(inMotion.maxX); x++) { + for (int y = fastFloor(inMotion.minY); y < fastCeil(inMotion.maxY); y++) { + for (int z = fastFloor(inMotion.minZ); z < fastCeil(inMotion.maxZ); z++) { if (!this.passable(x, y, z, ignoreLava)) { return null; } @@ -1140,35 +1148,62 @@ private static boolean passable(IBlockState state, boolean ignoreLava) { */ private static final class MC_1_12_Collision_Fix { - public static boolean bonk(final BlockStateInterface bsi, final AxisAlignedBB aabb) { - final Vec3d center = aabb.getCenter(); - final double width = (aabb.maxX - aabb.minX) * 0.35D; - final double x = center.x; - final double y = aabb.minY + 0.5D; - final double z = center.z; - - return pushOutOfBlocks(bsi, x - width, y, z + width) - || pushOutOfBlocks(bsi, x - width, y, z - width) - || pushOutOfBlocks(bsi, x + width, y, z - width) - || pushOutOfBlocks(bsi, x + width, y, z + width); - } - - private static boolean pushOutOfBlocks(final BlockStateInterface bsi, - final double xIn, final double yIn, final double zIn) { - final int x = MathHelper.floor(xIn); - final int y = MathHelper.floor(yIn); - final int z = MathHelper.floor(zIn); - if (isOpenBlockSpace(bsi, x, y, z)) { - return false; + private static final Long2ReferenceOpenHashMap PUSH_OUT_CACHE = new Long2ReferenceOpenHashMap<>(); + private static final Long2ReferenceOpenHashMap IS_OPEN_CACHE = new Long2ReferenceOpenHashMap<>(); + private static final double WIDTH = 0.35D * 0.6F; + + public static void clear() { + // TODO: I don't like this.... + if (MC_1_12_Collision_Fix.PUSH_OUT_CACHE.size() > 4096) { + MC_1_12_Collision_Fix.PUSH_OUT_CACHE.clear(); + } + if (MC_1_12_Collision_Fix.IS_OPEN_CACHE.size() > 4096) { + MC_1_12_Collision_Fix.IS_OPEN_CACHE.clear(); + } + } + + public static boolean bonk(final BlockStateInterface bsi, final double xIn, final double yIn, final double zIn) { + final int y = fastFloor(yIn + 0.5D); + final int minX = fastFloor(xIn - WIDTH); + final int minZ = fastFloor(zIn - WIDTH); + final int maxX = fastFloor(xIn + WIDTH); + final int maxZ = fastFloor(zIn + WIDTH); + + if (minX == maxX && minZ == maxZ) { + return pushOutOfBlocks(bsi, minX, y, minZ); + } else if (minX == maxX) { + return pushOutOfBlocks(bsi, minX, y, minZ) || pushOutOfBlocks(bsi, minX, y, maxZ); + } else if (minZ == maxZ) { + return pushOutOfBlocks(bsi, minX, y, minZ) || pushOutOfBlocks(bsi, maxX, y, minZ); + } + + return pushOutOfBlocks(bsi, minX, y, maxZ) + || pushOutOfBlocks(bsi, minX, y, minZ) + || pushOutOfBlocks(bsi, maxX, y, minZ) + || pushOutOfBlocks(bsi, maxX, y, maxZ); + } + + private static boolean pushOutOfBlocks(final BlockStateInterface bsi, final int x, final int y, final int z) { + final long hash = BetterBlockPos.serializeToLong(x, y, z); + Boolean result = PUSH_OUT_CACHE.get(hash); + if (result == null) { + PUSH_OUT_CACHE.put(hash, result = !isOpenBlockSpace(bsi, x, y, z) && ( + isOpenBlockSpace(bsi, x - 1, y, z) + || isOpenBlockSpace(bsi, x + 1, y, z) + || isOpenBlockSpace(bsi, x, y, z - 1) + || isOpenBlockSpace(bsi, x, y, z + 1)) + ); } - return isOpenBlockSpace(bsi, x - 1, y, z) - || isOpenBlockSpace(bsi, x + 1, y, z) - || isOpenBlockSpace(bsi, x, y, z - 1) - || isOpenBlockSpace(bsi, x, y, z + 1); + return result; } - private static boolean isOpenBlockSpace(BlockStateInterface bsi, final int x, final int y, final int z) { - return !bsi.get0(x, y, z).isNormalCube() && !bsi.get0(x, y + 1, z).isNormalCube(); + private static boolean isOpenBlockSpace(final BlockStateInterface bsi, final int x, final int y, final int z) { + final long hash = BetterBlockPos.serializeToLong(x, y, z); + Boolean result = IS_OPEN_CACHE.get(hash); + if (result == null) { + IS_OPEN_CACHE.put(hash, result = !bsi.get0(x, y, z).isNormalCube() && !bsi.get0(x, y + 1, z).isNormalCube()); + } + return result; } } diff --git a/src/main/java/baritone/behavior/elytra/UnpackedSegment.java b/src/main/java/baritone/behavior/elytra/UnpackedSegment.java index 22fa4f82d..0e0759625 100644 --- a/src/main/java/baritone/behavior/elytra/UnpackedSegment.java +++ b/src/main/java/baritone/behavior/elytra/UnpackedSegment.java @@ -19,7 +19,6 @@ import baritone.api.utils.BetterBlockPos; import dev.babbaj.pathfinder.PathSegment; -import net.minecraft.util.math.BlockPos; import java.util.Arrays; import java.util.HashMap; @@ -77,7 +76,7 @@ public boolean isFinished() { public static UnpackedSegment from(final PathSegment segment) { return new UnpackedSegment( - Arrays.stream(segment.packed).mapToObj(BlockPos::fromLong).map(BetterBlockPos::new), + Arrays.stream(segment.packed).mapToObj(BetterBlockPos::deserializeFromLong), segment.finished ); } diff --git a/src/main/java/baritone/utils/BaritoneMath.java b/src/main/java/baritone/utils/BaritoneMath.java new file mode 100644 index 000000000..944fc899e --- /dev/null +++ b/src/main/java/baritone/utils/BaritoneMath.java @@ -0,0 +1,37 @@ +/* + * 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; + +/** + * @author Brady + */ +public final class BaritoneMath { + + private BaritoneMath() {} + + private static final double FLOOR_DOUBLE_D = 1_073_741_824.0; + private static final int FLOOR_DOUBLE_I = 1_073_741_824; + + public static int fastFloor(final double v) { + return (int) (v + FLOOR_DOUBLE_D) - FLOOR_DOUBLE_I; + } + + public static int fastCeil(final double v) { + return FLOOR_DOUBLE_I - (int) (FLOOR_DOUBLE_D - v); + } +} From 4c0c263d1100d5f48caf9bf303ceb7654d73a463 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 3 Jul 2023 13:28:53 -0500 Subject: [PATCH 771/935] trolling --- src/main/java/baritone/behavior/ElytraBehavior.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 73ccb69f1..f22a3151d 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -1154,11 +1154,11 @@ private static final class MC_1_12_Collision_Fix { public static void clear() { // TODO: I don't like this.... - if (MC_1_12_Collision_Fix.PUSH_OUT_CACHE.size() > 4096) { - MC_1_12_Collision_Fix.PUSH_OUT_CACHE.clear(); + if (PUSH_OUT_CACHE.size() > 4096) { + PUSH_OUT_CACHE.clear(); } - if (MC_1_12_Collision_Fix.IS_OPEN_CACHE.size() > 4096) { - MC_1_12_Collision_Fix.IS_OPEN_CACHE.clear(); + if (IS_OPEN_CACHE.size() > 4096) { + IS_OPEN_CACHE.clear(); } } From 2552eb8dca36d7fac1ffe2eb4e3b81149c29763a Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 6 Jul 2023 18:57:51 -0700 Subject: [PATCH 772/935] Add setting documentation --- src/api/java/baritone/api/Settings.java | 81 +++++++++++++++++++++---- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index c85280f60..9eed667f9 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -48,19 +48,6 @@ */ public final class Settings { - public final Setting elytraSimulationTicks = new Setting<>(20); - public final Setting elytraPitchRange = new Setting<>(25); - public final Setting elytraFireworkSpeed = new Setting<>(0.6); - public final Setting elytraFireworkSetbackUseDelay = new Setting<>(15); - public final Setting elytraMinimumAvoidance = new Setting<>(0.2); - public final Setting conserveFireworks = new Setting<>(true); - public final Setting renderRaytraces = new Setting<>(false); - public final Setting renderHitboxRaytraces = new Setting<>(false); - public final Setting renderElytraSimulation = new Setting<>(false); - public final Setting elytraFreeLook = new Setting<>(false); - public final Setting elytraAutoJump = new Setting<>(false); - public final Setting smoothLook = new Setting<>(false); - /** * Allow Baritone to break blocks */ @@ -748,6 +735,17 @@ public final class Settings { */ public final Setting blockFreeLook = new Setting<>(false); + /** + * Automatically elytra fly without having to force the client-sided rotations. Requires {@link #freeLook}. + */ + public final Setting elytraFreeLook = new Setting<>(false); + + /** + * Forces the client-sided rotations to an average of the last 10 ticks of server-sided rotations. + * Requires {@link #freeLook}. + */ + public final Setting smoothLook = new Setting<>(false); + /** * When true, the player will remain with its existing look direction as often as possible. * Although, in some cases this can get it stuck, hence this setting to disable that behavior. @@ -1333,6 +1331,63 @@ public final class Settings { */ public final Setting notificationOnMineFail = new Setting<>(true); + /** + * The number of ticks of elytra movement to simulate while firework boost is not active. Higher values are + * computationally more expensive. + */ + public final Setting elytraSimulationTicks = new Setting<>(20); + + /** + * The maximum allowed deviation in pitch from a direct line-of-sight to the flight target. Higher values are + * computationally more expensive. + */ + public final Setting elytraPitchRange = new Setting<>(25); + + /** + * The minimum speed that the player can drop to (in blocks/tick) before a firework is automatically deployed. + */ + public final Setting elytraFireworkSpeed = new Setting<>(0.6); + + /** + * The delay after the player's position is set-back by the server that a firework may be automatically deployed. + * Value is in ticks. + */ + public final Setting elytraFireworkSetbackUseDelay = new Setting<>(15); + + /** + * The minimum padding value that is added to the player's hitbox when considering which point to fly to on the + * path. High values can result in points not being considered which are otherwise safe to fly to. Low values can + * result in flight paths which are extremely tight, and there's the possibility of crashing due to getting too low + * to the ground. + */ + public final Setting elytraMinimumAvoidance = new Setting<>(0.2); + + /** + * If enabled, avoids using fireworks when descending along the flight path. + */ + public final Setting conserveFireworks = new Setting<>(true); + + /** + * Renders the raytraces that are performed by the elytra fly calculation. + */ + public final Setting renderRaytraces = new Setting<>(false); + + /** + * Renders the raytraces that are used in the hitbox part of the elytra fly calculation. + * Requires {@link #renderRaytraces}. + */ + public final Setting renderHitboxRaytraces = new Setting<>(false); + + /** + * Renders the best elytra flight path that was simulated each tick. + */ + public final Setting renderElytraSimulation = new Setting<>(false); + + /** + * Automatically path to and jump off of ledges to initiate elytra flight when grounded. + */ + public final Setting elytraAutoJump = new Setting<>(false); + /** * A map of lowercase setting field names to their respective setting */ From aeeb00120559a72f2123a11880375291b3c575cd Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 6 Jul 2023 19:02:13 -0700 Subject: [PATCH 773/935] Fix some codacy issues --- src/main/java/baritone/behavior/ElytraBehavior.java | 8 +++++--- src/main/java/baritone/behavior/InventoryBehavior.java | 2 -- .../baritone/behavior/elytra/NetherPathfinderContext.java | 7 ++++--- .../java/baritone/command/defaults/ElytraCommand.java | 1 - .../command/defaults/ExecutionControlCommands.java | 1 - .../baritone/command/defaults/ForceCancelCommand.java | 1 - src/main/java/baritone/utils/BaritoneMath.java | 4 ++-- 7 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index f22a3151d..fb8747bb2 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -1041,12 +1041,13 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi } private List simulate(final ITickableAimProcessor aimProcessor, final Vec3d goalDelta, final float pitch, - final int ticks, int ticksBoosted, final int ticksBoostDelay, final boolean ignoreLava) { + final int ticks, final int ticksBoosted, final int ticksBoostDelay, final boolean ignoreLava) { Vec3d delta = goalDelta; Vec3d motion = ctx.playerMotion(); AxisAlignedBB hitbox = ctx.player().getEntityBoundingBox(); List displacement = new ArrayList<>(ticks + 1); displacement.add(Vec3d.ZERO); + int remainingTicksBoosted = ticksBoosted; for (int i = 0; i < ticks; i++) { final double cx = hitbox.minX + (hitbox.maxX - hitbox.minX) * 0.5D; @@ -1081,7 +1082,7 @@ private List simulate(final ITickableAimProcessor aimProcessor, final Vec hitbox = hitbox.offset(motion); displacement.add(displacement.get(displacement.size() - 1).add(motion)); - if (i >= ticksBoostDelay && ticksBoosted-- > 0) { + if (i >= ticksBoostDelay && remainingTicksBoosted-- > 0) { // See EntityFireworkRocket motion = motion.add( lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motion.x) * 0.5, @@ -1348,8 +1349,9 @@ public String displayName0() { return "Begin flying"; case FLYING: return "Flying"; + default: + return "Unknown"; } - return "Unknown"; }; return "Elytra - " + status.get(); } diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 1ab31eb53..93dc200cc 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -25,10 +25,8 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.inventory.ClickType; import net.minecraft.item.*; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.NonNullList; diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index f0197ca78..8e9a862c0 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -104,8 +104,9 @@ public boolean raytrace(final int count, final double[] src, final double[] dst, return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, true) == -1; case Visibility.ANY: return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, true) != -1; + default: + throw new IllegalArgumentException("lol"); } - throw new IllegalArgumentException("lol"); } public void raytrace(final int count, final double[] src, final double[] dst, final boolean[] hitsOut, final double[] hitPosOut) { @@ -166,10 +167,10 @@ private static boolean[] pack(Chunk chunk) { public static final class Visibility { - private Visibility() {} - public static final int ALL = 0; public static final int NONE = 1; public static final int ANY = 2; + + private Visibility() {} } } diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 3414c7bb3..93c4c2544 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -17,7 +17,6 @@ package baritone.command.defaults; -import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index e7f7c9497..43adca19f 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -17,7 +17,6 @@ package baritone.command.defaults; -import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index bc6dbd0a4..ad19f168c 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -17,7 +17,6 @@ package baritone.command.defaults; -import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.behavior.IPathingBehavior; import baritone.api.command.Command; diff --git a/src/main/java/baritone/utils/BaritoneMath.java b/src/main/java/baritone/utils/BaritoneMath.java index 944fc899e..be546f248 100644 --- a/src/main/java/baritone/utils/BaritoneMath.java +++ b/src/main/java/baritone/utils/BaritoneMath.java @@ -22,11 +22,11 @@ */ public final class BaritoneMath { - private BaritoneMath() {} - private static final double FLOOR_DOUBLE_D = 1_073_741_824.0; private static final int FLOOR_DOUBLE_I = 1_073_741_824; + private BaritoneMath() {} + public static int fastFloor(final double v) { return (int) (v + FLOOR_DOUBLE_D) - FLOOR_DOUBLE_I; } From c4ac23837fd0ddddebd39795dd5004251ad0c3e6 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 6 Jul 2023 19:31:37 -0700 Subject: [PATCH 774/935] Set `safeToCancel` to `false` while flying --- src/main/java/baritone/behavior/ElytraBehavior.java | 4 ++++ src/main/java/baritone/behavior/PathingBehavior.java | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index fb8747bb2..9ff48f3a2 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -1208,6 +1208,10 @@ private static boolean isOpenBlockSpace(final BlockStateInterface bsi, final int } } + public boolean isSafeToCancel() { + return !this.isActive() || !(this.process.state == State.FLYING || this.process.state == State.START_FLYING); + } + private final class ElytraProcess implements IBaritoneProcess { private State state; diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 9b1bd9187..19266b2c2 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -148,6 +148,9 @@ private void tickPath() { } } if (current == null) { + if (baritone.getElytraBehavior().isActive()) { + safeToCancel = baritone.getElytraBehavior().isSafeToCancel(); + } return; } safeToCancel = current.onTick(); From ecfd664f30d2dd37b0a8ad9035e21bb793cac5d6 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 6 Jul 2023 20:11:50 -0700 Subject: [PATCH 775/935] Fix `isSafeToCancel()` return value --- src/main/java/baritone/behavior/PathingBehavior.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 19266b2c2..670dd827c 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -148,9 +148,6 @@ private void tickPath() { } } if (current == null) { - if (baritone.getElytraBehavior().isActive()) { - safeToCancel = baritone.getElytraBehavior().isSafeToCancel(); - } return; } safeToCancel = current.onTick(); @@ -312,7 +309,10 @@ public Optional getInProgress() { } public boolean isSafeToCancel() { - return current == null || safeToCancel; + if (current == null) { + return !baritone.getElytraBehavior().isActive() || baritone.getElytraBehavior().isSafeToCancel(); + } + return safeToCancel; } public void requestPause() { From 8de239f4688609de996107f36048e59f66ac2310 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 6 Jul 2023 23:15:35 -0700 Subject: [PATCH 776/935] Use soft references for chunks queued for packing --- src/main/java/baritone/cache/CachedWorld.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 32112f20f..bed3185a5 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -23,6 +23,7 @@ import baritone.api.cache.ICachedWorld; import baritone.api.cache.IWorldData; import baritone.api.utils.Helper; +import com.google.common.cache.CacheBuilder; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import net.minecraft.util.math.BlockPos; @@ -35,7 +36,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; /** @@ -69,7 +69,7 @@ public final class CachedWorld implements ICachedWorld, Helper { * All chunk positions pending packing. This map will be updated in-place if a new update to the chunk occurs * while waiting in the queue for the packer thread to get to it. */ - private final Map toPackMap = new ConcurrentHashMap<>(); + private final Map toPackMap = CacheBuilder.newBuilder().softValues().build().asMap(); private final int dimension; From b6bf4427ef077a75ad71314e1c97ff0106f454a0 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 7 Jul 2023 00:30:07 -0700 Subject: [PATCH 777/935] Use soft references for nether chunk packing queue --- .../elytra/NetherPathfinderContext.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 8e9a862c0..3fd7987e5 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -27,6 +27,7 @@ import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import java.lang.ref.SoftReference; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -47,8 +48,16 @@ public NetherPathfinderContext(long seed) { this.executor = Executors.newSingleThreadExecutor(); } - public void queueForPacking(Chunk chunk) { - this.executor.submit(() -> NetherPathfinder.insertChunkData(this.context, chunk.x, chunk.z, pack(chunk))); + public void queueForPacking(final Chunk chunkIn) { + final SoftReference ref = new SoftReference<>(chunkIn); + this.executor.execute(() -> { + // TODO: Prioritize packing recent chunks and/or ones that the path goes through, + // and prune the oldest chunks per chunkPackerQueueMaxSize + final Chunk chunk = ref.get(); + if (chunk != null) { + NetherPathfinder.insertChunkData(this.context, chunk.x, chunk.z, pack(chunk)); + } + }); } public CompletableFuture pathFindAsync(final BlockPos src, final BlockPos dst) { @@ -74,9 +83,9 @@ public CompletableFuture pathFindAsync(final BlockPos src, final Bl * @param startX The start X coordinate * @param startY The start Y coordinate * @param startZ The start Z coordinate - * @param endX The end X coordinate - * @param endY The end Y coordinate - * @param endZ The end Z coordinate + * @param endX The end X coordinate + * @param endY The end Y coordinate + * @param endZ The end Z coordinate * @return {@code true} if there is visibility between the points */ public boolean raytrace(final double startX, final double startY, final double startZ, @@ -89,7 +98,7 @@ public boolean raytrace(final double startX, final double startY, final double s * visibility between the two points. * * @param start The starting point - * @param end The ending point + * @param end The ending point * @return {@code true} if there is visibility between the points */ public boolean raytrace(final Vec3d start, final Vec3d end) { @@ -151,9 +160,7 @@ private static boolean[] pack(Chunk chunk) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { IBlockState state = bsc.get(x, y1, z); - if (state.getMaterial() != Material.AIR) { - packed[x | (z << 4) | (y << 8)] = true; - } + packed[x | (z << 4) | (y << 8)] = state.getMaterial() != Material.AIR; } } } From 537100a5e59e60eab80715faf8e00b0c0326eea0 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 7 Jul 2023 10:44:56 -0700 Subject: [PATCH 778/935] Nether seed setting and automatic context reset --- src/api/java/baritone/api/Settings.java | 6 +++++ .../baritone/behavior/ElytraBehavior.java | 23 +++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 9eed667f9..08fe54d3a 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1388,6 +1388,12 @@ public final class Settings { */ public final Setting elytraAutoJump = new Setting<>(false); + /** + * The seed used to generate chunks for long distance elytra path-finding in the nether. + * Defaults to 2b2t's nether seed. + */ + public final Setting elytraNetherSeed = new Setting<>(146008555100680L); + /** * A map of lowercase setting field names to their respective setting */ diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 9ff48f3a2..edabf2912 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -66,11 +66,6 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { - /** - * 2b2t seed - */ - private static final long NETHER_SEED = 146008555100680L; - // Used exclusively for PathRenderer public List> clearLines; public List> blockedLines; @@ -79,7 +74,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H public List visiblePath; // :sunglasses: - private final NetherPathfinderContext context; + private NetherPathfinderContext context; private final PathManager pathManager; private final ElytraProcess process; @@ -113,7 +108,6 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H public ElytraBehavior(Baritone baritone) { super(baritone); - this.context = new NetherPathfinderContext(NETHER_SEED); this.clearLines = new CopyOnWriteArrayList<>(); this.blockedLines = new CopyOnWriteArrayList<>(); this.pathManager = this.new PathManager(); @@ -439,6 +433,21 @@ public void onTick(final TickEvent event) { } } + // Setup/reset context + final long netherSeed = Baritone.settings().elytraNetherSeed.value; + if (this.context == null || this.context.getSeed() != netherSeed) { + if (this.context != null) { + this.context.destroy(); + } + this.context = new NetherPathfinderContext(netherSeed); + + if (this.isActive()) { + // TODO: Re-pack chunks? + logDirect("Nether seed changed, recalculating path"); + this.pathManager.pathToDestination(); + } + } + // Certified mojang employee incident if (this.remainingFireworkTicks > 0) { this.remainingFireworkTicks--; From bfb4ffcafcf5c51cfe25791f8e61f93e92baa088 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 7 Jul 2023 11:19:18 -0700 Subject: [PATCH 779/935] Reset context on world load/unload --- .../baritone/behavior/ElytraBehavior.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index edabf2912..98bcf7a3f 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -23,6 +23,7 @@ import baritone.api.behavior.look.IAimProcessor; import baritone.api.behavior.look.ITickableAimProcessor; import baritone.api.event.events.*; +import baritone.api.event.events.type.EventState; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.pathing.movement.IMovement; @@ -75,6 +76,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // :sunglasses: private NetherPathfinderContext context; + private boolean forceResetContext; private final PathManager pathManager; private final ElytraProcess process; @@ -363,6 +365,24 @@ public void updatePlayerNear() { } } + @Override + public void onWorldEvent(WorldEvent event) { + if (event.getWorld() != null) { + if (event.getState() == EventState.PRE) { + // Reset the context when it's safe to do so on the next game tick + this.forceResetContext = true; + } + } else { + if (event.getState() == EventState.POST) { + // Exiting the world, just destroy and invalidate the context + if (this.context != null) { + this.context.destroy(); + this.context = null; + } + } + } + } + @Override public void onChunkEvent(ChunkEvent event) { if (event.isPostPopulate()) { @@ -435,11 +455,12 @@ public void onTick(final TickEvent event) { // Setup/reset context final long netherSeed = Baritone.settings().elytraNetherSeed.value; - if (this.context == null || this.context.getSeed() != netherSeed) { + if (this.context == null || this.context.getSeed() != netherSeed || this.forceResetContext) { if (this.context != null) { this.context.destroy(); } this.context = new NetherPathfinderContext(netherSeed); + this.forceResetContext = false; if (this.isActive()) { // TODO: Re-pack chunks? From 308b9bbfea2e58b44c4f1edae35f247de2557112 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 7 Jul 2023 13:26:43 -0700 Subject: [PATCH 780/935] Apply minimum fall height to regular falls too --- src/main/java/baritone/behavior/ElytraBehavior.java | 1 + .../baritone/pathing/movement/CalculationContext.java | 2 ++ .../pathing/movement/movements/MovementDescend.java | 9 +++++---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 98bcf7a3f..6374e7524 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -1399,6 +1399,7 @@ private static final class WalkOffCalculationContext extends CalculationContext public WalkOffCalculationContext(IBaritone baritone) { super(baritone, true); this.allowFallIntoLava = true; + this.minFallHeight = 8; this.maxFallHeightNoWater = 10000; } diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 2e7db9946..75b6acd9b 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -71,6 +71,7 @@ public class CalculationContext { public final boolean allowDiagonalDescend; public final boolean allowDiagonalAscend; public final boolean allowDownward; + public int minFallHeight; public int maxFallHeightNoWater; public final int maxFallHeightBucket; public final double waterWalkSpeed; @@ -111,6 +112,7 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.allowDiagonalDescend = Baritone.settings().allowDiagonalDescend.value; this.allowDiagonalAscend = Baritone.settings().allowDiagonalAscend.value; this.allowDownward = Baritone.settings().allowDownward.value; + this.minFallHeight = 3; // Minimum fall height used by MovementFall this.maxFallHeightNoWater = Baritone.settings().maxFallHeightNoWater.value; this.maxFallHeightBucket = Baritone.settings().maxFallHeightBucket.value; int depth = EnchantmentHelper.getDepthStriderModifier(player); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 51275bc00..032171fe9 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -154,10 +154,11 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, // this check prevents it from getting the block at y=-1 and crashing return false; } + boolean reachedMinimum = fallHeight >= context.minFallHeight; IBlockState ontoBlock = context.get(destX, newY, destZ); int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; - if (MovementHelper.isWater(ontoBlock.getBlock())) { + if (reachedMinimum && MovementHelper.isWater(ontoBlock.getBlock())) { if (!MovementHelper.canWalkThrough(context, destX, newY, destZ, ontoBlock)) { return false; } @@ -178,7 +179,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, res.cost = tentativeCost;// TODO incorporate water swim up cost? return false; } - if (fallHeight >= 8 && context.allowFallIntoLava && MovementHelper.isLava(ontoBlock.getBlock())) { + if (reachedMinimum && context.allowFallIntoLava && MovementHelper.isLava(ontoBlock.getBlock())) { // found a fall into lava res.x = destX; res.y = newY; @@ -203,7 +204,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, if (MovementHelper.isBottomSlab(ontoBlock)) { return false; // falling onto a half slab is really glitchy, and can cause more fall damage than we'd expect } - if (unprotectedFallHeight <= context.maxFallHeightNoWater + 1) { + if (reachedMinimum && unprotectedFallHeight <= context.maxFallHeightNoWater + 1) { // fallHeight = 4 means onto.up() is 3 blocks down, which is the max res.x = destX; res.y = newY + 1; @@ -211,7 +212,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, res.cost = tentativeCost; return false; } - if (context.hasWaterBucket && unprotectedFallHeight <= context.maxFallHeightBucket + 1) { + if (reachedMinimum && context.hasWaterBucket && unprotectedFallHeight <= context.maxFallHeightBucket + 1) { res.x = destX; res.y = newY + 1;// this is the block we're falling onto, so dest is +1 res.z = destZ; From fe67489419dd3025e74e6700636814adf1dfb3ac Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 7 Jul 2023 14:38:11 -0700 Subject: [PATCH 781/935] Combine `VALIDATE_PATH` and `LOCATE_JUMP` states --- src/main/java/baritone/behavior/ElytraBehavior.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 6374e7524..f08fb9be6 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -1278,11 +1278,6 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (this.goal == null) { this.goal = new GoalYLevel(31); } - this.state = State.VALIDATE_PATH; - return new PathingCommandContext(this.goal, PathingCommandType.SET_GOAL_AND_PAUSE, new WalkOffCalculationContext(baritone)); - } - - if (this.state == State.VALIDATE_PATH) { final IPathExecutor executor = baritone.getPathingBehavior().getCurrent(); if (executor != null && executor.getPath().getGoal() == this.goal) { final IMovement fall = executor.getPath().movements().stream() @@ -1315,7 +1310,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } } - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + return new PathingCommandContext(this.goal, PathingCommandType.SET_GOAL_AND_PAUSE, new WalkOffCalculationContext(baritone)); } // yucky @@ -1373,8 +1368,6 @@ public String displayName0() { switch (this.state) { case LOCATE_JUMP: return "Finding spot to jump off"; - case VALIDATE_PATH: - return "Validating path"; case PAUSE: return "Waiting for elytra path"; case GET_TO_JUMP: From 487b3a759aaebaae9bd5c757261a0376cc54dff5 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 7 Jul 2023 18:35:02 -0700 Subject: [PATCH 782/935] `mostRecentGoal`, fixes immediate goal clear --- .../java/baritone/api/process/ICustomGoalProcess.java | 5 +++++ .../java/baritone/command/defaults/ElytraCommand.java | 2 +- src/main/java/baritone/process/CustomGoalProcess.java | 11 +++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/process/ICustomGoalProcess.java b/src/api/java/baritone/api/process/ICustomGoalProcess.java index 5084aff2f..2bae55ce3 100644 --- a/src/api/java/baritone/api/process/ICustomGoalProcess.java +++ b/src/api/java/baritone/api/process/ICustomGoalProcess.java @@ -38,6 +38,11 @@ public interface ICustomGoalProcess extends IBaritoneProcess { */ Goal getGoal(); + /** + * @return The most recent set goal, which doesn't invalidate upon {@link #onLostControl()} + */ + Goal mostRecentGoal(); + /** * Sets the goal and begins the path execution. * diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 93c4c2544..cd7034ef8 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -42,7 +42,7 @@ public ElytraCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); args.requireMax(0); - Goal iGoal = customGoalProcess.getGoal(); + Goal iGoal = customGoalProcess.mostRecentGoal(); if (iGoal == null) { throw new CommandInvalidStateException("No goal has been set"); } diff --git a/src/main/java/baritone/process/CustomGoalProcess.java b/src/main/java/baritone/process/CustomGoalProcess.java index ea9ff2092..71d212b38 100644 --- a/src/main/java/baritone/process/CustomGoalProcess.java +++ b/src/main/java/baritone/process/CustomGoalProcess.java @@ -36,6 +36,11 @@ public final class CustomGoalProcess extends BaritoneProcessHelper implements IC */ private Goal goal; + /** + * The most recent goal. Not invalidated upon {@link #onLostControl()} + */ + private Goal mostRecentGoal; + /** * The current process state. * @@ -50,6 +55,7 @@ public CustomGoalProcess(Baritone baritone) { @Override public void setGoal(Goal goal) { this.goal = goal; + this.mostRecentGoal = goal; if (this.state == State.NONE) { this.state = State.GOAL_SET; } @@ -68,6 +74,11 @@ public Goal getGoal() { return this.goal; } + @Override + public Goal mostRecentGoal() { + return this.mostRecentGoal; + } + @Override public boolean isActive() { return this.state != State.NONE; From c0cdfb7781e86b9c89bae4c9930d3a0461fb8512 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 7 Jul 2023 19:44:59 -0700 Subject: [PATCH 783/935] Add commands for pathfinder reset and chunk repack --- .../api/behavior/IElytraBehavior.java | 12 ++++ .../baritone/behavior/ElytraBehavior.java | 30 +++++++-- .../command/defaults/ElytraCommand.java | 67 +++++++++++++------ 3 files changed, 80 insertions(+), 29 deletions(-) diff --git a/src/api/java/baritone/api/behavior/IElytraBehavior.java b/src/api/java/baritone/api/behavior/IElytraBehavior.java index 3c3b91466..21169b896 100644 --- a/src/api/java/baritone/api/behavior/IElytraBehavior.java +++ b/src/api/java/baritone/api/behavior/IElytraBehavior.java @@ -19,8 +19,20 @@ import net.minecraft.util.math.BlockPos; +import java.util.concurrent.CompletableFuture; + public interface IElytraBehavior extends IBehavior { + /** + * Marks the nether pathfinder context to be reset when it is safe to do so. Because this operation is not + * immediate, a {@link CompletableFuture} is returned that will complete after the context has been reset. + * + * @return A {@link CompletableFuture} that is completed when the context is reset + */ + CompletableFuture resetContext(); + + void repackChunks(); + void pathTo(BlockPos destination); void cancel(); diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index f08fb9be6..5549281f7 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -41,6 +41,7 @@ import baritone.pathing.movement.movements.MovementFall; import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; +import baritone.utils.accessor.IChunkProviderClient; import baritone.utils.accessor.IEntityFireworkRocket; import it.unimi.dsi.fastutil.floats.FloatArrayList; import it.unimi.dsi.fastutil.floats.FloatIterator; @@ -76,7 +77,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // :sunglasses: private NetherPathfinderContext context; - private boolean forceResetContext; + private CompletableFuture forceResetContext; private final PathManager pathManager; private final ElytraProcess process; @@ -370,7 +371,7 @@ public void onWorldEvent(WorldEvent event) { if (event.getWorld() != null) { if (event.getState() == EventState.PRE) { // Reset the context when it's safe to do so on the next game tick - this.forceResetContext = true; + this.resetContext(); } } else { if (event.getState() == EventState.POST) { @@ -429,6 +430,20 @@ public void cancel() { Arrays.fill(this.nextTickBoostCounter, 0); } + @Override + public CompletableFuture resetContext() { + if (this.forceResetContext == null) { + this.forceResetContext = new CompletableFuture<>(); + } + return this.forceResetContext; + } + + @Override + public void repackChunks() { + ((IChunkProviderClient) ctx.world().getChunkProvider()).loadedChunks().values() + .forEach(this.context::queueForPacking); + } + @Override public boolean isActive() { return baritone.getPathingControlManager().mostRecentInControl() @@ -455,15 +470,16 @@ public void onTick(final TickEvent event) { // Setup/reset context final long netherSeed = Baritone.settings().elytraNetherSeed.value; - if (this.context == null || this.context.getSeed() != netherSeed || this.forceResetContext) { + if (this.context == null || this.context.getSeed() != netherSeed || this.forceResetContext != null) { if (this.context != null) { this.context.destroy(); } this.context = new NetherPathfinderContext(netherSeed); - this.forceResetContext = false; - - if (this.isActive()) { - // TODO: Re-pack chunks? + if (this.forceResetContext != null) { + this.forceResetContext.complete(null); + this.forceResetContext = null; + } + if (this.context.getSeed() != netherSeed && this.isActive()) { logDirect("Nether seed changed, recalculating path"); this.pathManager.pathToDestination(); } diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index cd7034ef8..de8cbadef 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -18,6 +18,7 @@ package baritone.command.defaults; import baritone.api.IBaritone; +import baritone.api.behavior.IElytraBehavior; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; @@ -40,30 +41,52 @@ public ElytraCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { - ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); - args.requireMax(0); - Goal iGoal = customGoalProcess.mostRecentGoal(); - if (iGoal == null) { - throw new CommandInvalidStateException("No goal has been set"); + final ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); + final IElytraBehavior elytra = baritone.getElytraBehavior(); + if (!args.hasAny()) { + Goal iGoal = customGoalProcess.mostRecentGoal(); + if (iGoal == null) { + throw new CommandInvalidStateException("No goal has been set"); + } + final int x, y, z; + if (iGoal instanceof GoalXZ) { + GoalXZ goal = (GoalXZ) iGoal; + x = goal.getX(); + y = 64; + z = goal.getZ(); + } else if (iGoal instanceof GoalBlock) { + GoalBlock goal = (GoalBlock) iGoal; + x = goal.x; + y = goal.y; + z = goal.z; + } else { + throw new CommandInvalidStateException("The goal must be a GoalXZ or GoalBlock"); + } + if (y <= 0 || y >= 128) { + throw new CommandInvalidStateException("The y of the goal is not between 0 and 128"); + } + elytra.pathTo(new BlockPos(x, y, z)); + return; } - final int x, y, z; - if (iGoal instanceof GoalXZ) { - GoalXZ goal = (GoalXZ) iGoal; - x = goal.getX(); - y = 64; - z = goal.getZ(); - } else if (iGoal instanceof GoalBlock) { - GoalBlock goal = (GoalBlock) iGoal; - x = goal.x; - y = goal.y; - z = goal.z; - } else { - throw new CommandInvalidStateException("The goal must be a GoalXZ or GoalBlock"); - } - if (y <= 0 || y >= 128) { - throw new CommandInvalidStateException("The y of the goal is not between 0 and 128"); + + final String action = args.getString(); + switch (action) { + case "reset": { + elytra.resetContext().whenComplete((result, ex) -> { + logDirect("Context reset, repacking chunks"); + elytra.repackChunks(); + }); + break; + } + case "repack": { + elytra.repackChunks(); + logDirect("Queued all loaded chunks for repacking"); + break; + } + default: { + throw new CommandInvalidStateException("Invalid action"); + } } - baritone.getElytraBehavior().pathTo(new BlockPos(x, y, z)); } @Override From 7a935fb2ea3cf491497b09b7a73b51a27f9ae83c Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 9 Jul 2023 09:12:21 -0700 Subject: [PATCH 784/935] Fix simulation not respecting `ignoreLava` --- build.gradle | 4 ++-- src/main/java/baritone/behavior/ElytraBehavior.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 99d7cc823..686f2bfbc 100755 --- a/build.gradle +++ b/build.gradle @@ -175,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.21') + launchImplementation('dev.babbaj:nether-pathfinder:0.22') testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.21' + implementation 'dev.babbaj:nether-pathfinder:0.22' } mixin { diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 5549281f7..bc2485b47 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -386,7 +386,7 @@ public void onWorldEvent(WorldEvent event) { @Override public void onChunkEvent(ChunkEvent event) { - if (event.isPostPopulate()) { + if (event.isPostPopulate() && this.context != null) { final Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); this.context.queueForPacking(chunk); } @@ -1069,13 +1069,13 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi // Ensure that the goal is visible along the entire simulated path // Reverse order iteration since the last position is most likely to fail for (int i = result.steps.size() - 1; i >= 1; i--) { - if (!clearView(context.start.add(result.steps.get(i)), goal, false)) { + if (!clearView(context.start.add(result.steps.get(i)), goal, context.ignoreLava)) { continue outer; } } } else { // Ensure that the goal is visible from the final position - if (!clearView(context.start.add(result.steps.get(result.steps.size() - 1)), goal, false)) { + if (!clearView(context.start.add(result.steps.get(result.steps.size() - 1)), goal, context.ignoreLava)) { continue; } } From 96a64b454ed62dab970afbe75e31f695ecd3b8a1 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 9 Jul 2023 22:29:31 -0400 Subject: [PATCH 785/935] optimize uploading chunk data --- build.gradle | 4 +- .../elytra/NetherPathfinderContext.java | 60 ++++++++++++++++++- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 686f2bfbc..da0e2232b 100755 --- a/build.gradle +++ b/build.gradle @@ -175,9 +175,9 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.22') + launchImplementation('dev.babbaj:nether-pathfinder:0.24') + implementation 'dev.babbaj:nether-pathfinder:0.24' testImplementation 'junit:junit:4.12' - implementation 'dev.babbaj:nether-pathfinder:0.22' } mixin { diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 3fd7987e5..ed179b5b4 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -17,10 +17,14 @@ package baritone.behavior.elytra; +import baritone.utils.accessor.IBitArray; +import baritone.utils.accessor.IBlockStateContainer; import dev.babbaj.pathfinder.NetherPathfinder; +import dev.babbaj.pathfinder.Octree; import dev.babbaj.pathfinder.PathSegment; -import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.BitArray; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.chunk.BlockStateContainer; @@ -55,7 +59,8 @@ public void queueForPacking(final Chunk chunkIn) { // and prune the oldest chunks per chunkPackerQueueMaxSize final Chunk chunk = ref.get(); if (chunk != null) { - NetherPathfinder.insertChunkData(this.context, chunk.x, chunk.z, pack(chunk)); + long ptr = NetherPathfinder.getOrCreateChunk(this.context, chunk.x, chunk.z); + writeChunkData(chunk, ptr); } }); } @@ -144,6 +149,8 @@ public long getSeed() { return this.seed; } + private static final IBlockState AIR_BLOCK_STATE = Blocks.AIR.getDefaultState(); + private static boolean[] pack(Chunk chunk) { try { boolean[] packed = new boolean[16 * 16 * 128]; @@ -160,7 +167,7 @@ private static boolean[] pack(Chunk chunk) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { IBlockState state = bsc.get(x, y1, z); - packed[x | (z << 4) | (y << 8)] = state.getMaterial() != Material.AIR; + packed[x | (z << 4) | (y << 8)] = state != AIR_BLOCK_STATE; } } } @@ -172,6 +179,53 @@ private static boolean[] pack(Chunk chunk) { } } + private static void writeChunkData(Chunk chunk, long ptr) { + try { + ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); + for (int y0 = 0; y0 < 8; y0++) { + final ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; + if (extendedblockstorage == null) { + continue; + } + final BlockStateContainer bsc = extendedblockstorage.getData(); + final int airId = ((IBlockStateContainer) bsc).getPalette().idFor(AIR_BLOCK_STATE); + // pasted from FasterWorldScanner + final BitArray array = ((IBlockStateContainer) bsc).getStorage(); + if (array == null) continue; + final long[] longArray = array.getBackingLongArray(); + final int arraySize = array.size(); + final int bitsPerEntry = ((IBitArray) array).getBitsPerEntry(); + final long maxEntryValue = ((IBitArray) array).getMaxEntryValue(); + + final int yReal = y0 << 4; + for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) { + final int i = idx * bitsPerEntry; + final int j = i >> 6; + final int l = i & 63; + final int k = kl >> 6; + final long jl = longArray[j] >>> l; + + final int id; + if (j == k) { + id = (int) (jl & maxEntryValue); + } else { + id = (int) ((jl | longArray[k] << (64 - l)) & maxEntryValue); + } + Octree.setBlock(ptr, + ((idx & 255) & 15), + yReal + (idx >> 8), + ((idx & 255) >> 4), + id != airId + ); + } + } + Octree.setIsFromJava(ptr); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + public static final class Visibility { public static final int ALL = 0; From eec4edea059416188daca4f2f6e429a87799c38e Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 9 Jul 2023 20:00:35 -0700 Subject: [PATCH 786/935] Remove old pack method --- .../elytra/NetherPathfinderContext.java | 32 ++----------------- 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index ed179b5b4..b4f3daa9a 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -42,6 +42,8 @@ */ public final class NetherPathfinderContext { + private static final IBlockState AIR_BLOCK_STATE = Blocks.AIR.getDefaultState(); + private final long context; private final long seed; private final ExecutorService executor; @@ -149,36 +151,6 @@ public long getSeed() { return this.seed; } - private static final IBlockState AIR_BLOCK_STATE = Blocks.AIR.getDefaultState(); - - private static boolean[] pack(Chunk chunk) { - try { - boolean[] packed = new boolean[16 * 16 * 128]; - ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); - for (int y0 = 0; y0 < 8; y0++) { - ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; - if (extendedblockstorage == null) { - continue; - } - BlockStateContainer bsc = extendedblockstorage.getData(); - int yReal = y0 << 4; - for (int y1 = 0; y1 < 16; y1++) { - int y = y1 | yReal; - for (int z = 0; z < 16; z++) { - for (int x = 0; x < 16; x++) { - IBlockState state = bsc.get(x, y1, z); - packed[x | (z << 4) | (y << 8)] = state != AIR_BLOCK_STATE; - } - } - } - } - return packed; - } catch (Exception e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - } - private static void writeChunkData(Chunk chunk, long ptr) { try { ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); From dc53a95befb002a01d8d75b5de2755e485754323 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 10 Jul 2023 00:45:12 -0400 Subject: [PATCH 787/935] don't send the whole chunk for small changes --- .../api/event/events/BlockChangeEvent.java | 8 ++++---- .../java/baritone/behavior/ElytraBehavior.java | 4 +--- .../behavior/elytra/NetherPathfinderContext.java | 16 ++++++++++++++++ .../java/baritone/event/GameEventHandler.java | 6 +++--- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/api/java/baritone/api/event/events/BlockChangeEvent.java b/src/api/java/baritone/api/event/events/BlockChangeEvent.java index 152c435ae..a65a51f35 100644 --- a/src/api/java/baritone/api/event/events/BlockChangeEvent.java +++ b/src/api/java/baritone/api/event/events/BlockChangeEvent.java @@ -31,16 +31,16 @@ */ public final class BlockChangeEvent { - private final Set affectedChunks; + private final ChunkPos chunk; private final List> blocks; public BlockChangeEvent(ChunkPos pos, List> blocks) { - this.affectedChunks = Collections.singleton(pos); + this.chunk = pos; this.blocks = blocks; } - public Set getAffectedChunks() { - return this.affectedChunks; + public ChunkPos getChunkPos() { + return this.chunk; } public List> getBlocks() { diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index bc2485b47..93bcbb5bf 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -394,9 +394,7 @@ public void onChunkEvent(ChunkEvent event) { @Override public void onBlockChange(BlockChangeEvent event) { - event.getAffectedChunks().stream() - .map(pos -> ctx.world().getChunk(pos.x, pos.z)) - .forEach(this.context::queueForPacking); + this.context.queueBlockUpdate(event); } @Override diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index ed179b5b4..aaa4c62bf 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -17,6 +17,7 @@ package baritone.behavior.elytra; +import baritone.api.event.events.BlockChangeEvent; import baritone.utils.accessor.IBitArray; import baritone.utils.accessor.IBlockStateContainer; import dev.babbaj.pathfinder.NetherPathfinder; @@ -26,6 +27,7 @@ import net.minecraft.init.Blocks; import net.minecraft.util.BitArray; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.chunk.BlockStateContainer; import net.minecraft.world.chunk.Chunk; @@ -65,6 +67,20 @@ public void queueForPacking(final Chunk chunkIn) { }); } + public void queueBlockUpdate(BlockChangeEvent event) { + this.executor.execute(() -> { + ChunkPos chunkPos = event.getChunkPos(); + long ptr = NetherPathfinder.getChunkPointer(this.context, chunkPos.x, chunkPos.z); + if (ptr == 0) return; // this shouldn't ever happen + event.getBlocks().forEach(pair -> { + BlockPos pos = pair.first(); + if (pos.getY() >= 128) return; + boolean isSolid = pair.second() != AIR_BLOCK_STATE; + Octree.setBlock(ptr, pos.getX() & 15, pos.getY(), pos.getZ() & 15, isSolid); + }); + }); + } + public CompletableFuture pathFindAsync(final BlockPos src, final BlockPos dst) { return CompletableFuture.supplyAsync(() -> { final PathSegment segment = NetherPathfinder.pathFind( diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index d26f2de24..1027a0126 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -28,6 +28,7 @@ import baritone.cache.WorldProvider; import baritone.utils.BlockStateInterface; import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.ChunkPos; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; @@ -117,9 +118,8 @@ public void onBlockChange(BlockChangeEvent event) { if (keepingTrackOf) { baritone.getWorldProvider().ifWorldLoaded(worldData -> { final World world = baritone.getPlayerContext().world(); - event.getAffectedChunks().stream() - .map(pos -> world.getChunk(pos.x, pos.z)) - .forEach(worldData.getCachedWorld()::queueForPacking); + ChunkPos pos = event.getChunkPos(); + worldData.getCachedWorld().queueForPacking(world.getChunk(pos.x, pos.z)); }); } } From 5dc403e643c9f641373b7e8889badd28281eeefb Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 10 Jul 2023 00:12:10 -0700 Subject: [PATCH 788/935] crucial performance optimization --- .../baritone/behavior/ElytraBehavior.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 93bcbb5bf..ec2363f29 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -33,8 +33,8 @@ import baritone.api.process.PathingCommandType; import baritone.api.utils.*; import baritone.api.utils.input.Input; -import baritone.behavior.elytra.NetherPathfinderContext; import baritone.behavior.elytra.NetherPath; +import baritone.behavior.elytra.NetherPathfinderContext; import baritone.behavior.elytra.PathCalculationException; import baritone.behavior.elytra.UnpackedSegment; import baritone.pathing.movement.CalculationContext; @@ -54,7 +54,10 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.play.server.SPacketPlayerPosLook; import net.minecraft.util.EnumHand; -import net.minecraft.util.math.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.chunk.Chunk; import java.util.*; @@ -716,9 +719,9 @@ private final class SolverContext { public final IAimProcessor aimProcessor; public SolverContext(boolean async) { - this.path = ElytraBehavior.this.pathManager.getPath(); + this.path = ElytraBehavior.this.pathManager.getPath(); this.playerNear = ElytraBehavior.this.pathManager.getNear(); - this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); + this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); this.ignoreLava = ElytraBehavior.this.ctx.player().isInLava(); final Integer fireworkTicksExisted; @@ -863,10 +866,10 @@ private static OptionalInt getFireworkBoost(final ItemStack itemStack) { private Optional getAttachedFirework() { return ctx.world().loadedEntityList.stream() - .filter(x -> x instanceof EntityFireworkRocket) - .filter(x -> Objects.equals(((IEntityFireworkRocket) x).getBoostedEntity(), ctx.player())) - .map(x -> (EntityFireworkRocket) x) - .findFirst(); + .filter(x -> x instanceof EntityFireworkRocket) + .filter(x -> Objects.equals(((IEntityFireworkRocket) x).getBoostedEntity(), ctx.player())) + .map(x -> (EntityFireworkRocket) x) + .findFirst(); } private boolean isHitboxClear(final SolverContext context, final Vec3d dest, final Double growAmount) { @@ -1113,9 +1116,15 @@ private List simulate(final ITickableAimProcessor aimProcessor, final Vec // Collision box while the player is in motion, with additional padding for safety final AxisAlignedBB inMotion = hitbox.expand(motion.x, motion.y, motion.z).grow(0.01); - for (int x = fastFloor(inMotion.minX); x < fastCeil(inMotion.maxX); x++) { - for (int y = fastFloor(inMotion.minY); y < fastCeil(inMotion.maxY); y++) { - for (int z = fastFloor(inMotion.minZ); z < fastCeil(inMotion.maxZ); z++) { + int xmin = fastFloor(inMotion.minX); + int xmax = fastCeil(inMotion.maxX); + int ymin = fastFloor(inMotion.minY); + int ymax = fastCeil(inMotion.maxY); + int zmin = fastFloor(inMotion.minZ); + int zmax = fastCeil(inMotion.maxZ); + for (int x = xmin; x < xmax; x++) { + for (int y = ymin; y < ymax; y++) { + for (int z = zmin; z < zmax; z++) { if (!this.passable(x, y, z, ignoreLava)) { return null; } From 349c951b5538d8f6b0eb653e99792d99f3f5dde1 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 11 Jul 2023 22:47:09 -0500 Subject: [PATCH 789/935] Better handling of unsupported systems --- .../api/behavior/IElytraBehavior.java | 10 +++ src/main/java/baritone/Baritone.java | 5 +- .../baritone/behavior/ElytraBehavior.java | 72 ++++++++++++++++--- .../elytra/NetherPathfinderContext.java | 4 ++ .../behavior/elytra/NullElytraBehavior.java | 70 ++++++++++++++++++ .../command/defaults/ElytraCommand.java | 11 +++ src/main/java/baritone/utils/IRenderer.java | 13 ++++ .../java/baritone/utils/PathRenderer.java | 59 +-------------- 8 files changed, 177 insertions(+), 67 deletions(-) create mode 100644 src/main/java/baritone/behavior/elytra/NullElytraBehavior.java diff --git a/src/api/java/baritone/api/behavior/IElytraBehavior.java b/src/api/java/baritone/api/behavior/IElytraBehavior.java index 21169b896..95ae62926 100644 --- a/src/api/java/baritone/api/behavior/IElytraBehavior.java +++ b/src/api/java/baritone/api/behavior/IElytraBehavior.java @@ -41,4 +41,14 @@ public interface IElytraBehavior extends IBehavior { * Returns {@code true} if the current {@link IElytraBehavior} is actively pathing. */ boolean isActive(); + + /** + * @return {@code true} if the native library loaded and elytra is actually usable + */ + boolean isLoaded(); + + /* + * FOR INTERNAL USE ONLY. MAY BE REMOVED AT ANY TIME. + */ + boolean isSafeToCancel(); } diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 805fb0488..970bfc0a9 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.behavior.IBehavior; +import baritone.api.behavior.IElytraBehavior; import baritone.api.event.listener.IEventBus; import baritone.api.process.IBaritoneProcess; import baritone.api.utils.IPlayerContext; @@ -107,7 +108,7 @@ public class Baritone implements IBaritone { { this.lookBehavior = this.registerBehavior(LookBehavior::new); - this.elytraBehavior = this.registerBehavior(ElytraBehavior::new); + this.elytraBehavior = this.registerBehavior(ElytraBehavior::create); this.pathingBehavior = this.registerBehavior(PathingBehavior::new); this.inventoryBehavior = this.registerBehavior(InventoryBehavior::new); this.inputOverrideHandler = this.registerBehavior(InputOverrideHandler::new); @@ -240,7 +241,7 @@ public CommandManager getCommandManager() { } @Override - public ElytraBehavior getElytraBehavior() { + public IElytraBehavior getElytraBehavior() { return this.elytraBehavior; } diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index ec2363f29..7fc47032b 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -19,12 +19,14 @@ import baritone.Baritone; import baritone.api.IBaritone; +import baritone.api.Settings; import baritone.api.behavior.IElytraBehavior; import baritone.api.behavior.look.IAimProcessor; import baritone.api.behavior.look.ITickableAimProcessor; import baritone.api.event.events.*; import baritone.api.event.events.type.EventState; import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.pathing.movement.IMovement; import baritone.api.pathing.path.IPathExecutor; @@ -33,13 +35,12 @@ import baritone.api.process.PathingCommandType; import baritone.api.utils.*; import baritone.api.utils.input.Input; -import baritone.behavior.elytra.NetherPath; -import baritone.behavior.elytra.NetherPathfinderContext; -import baritone.behavior.elytra.PathCalculationException; -import baritone.behavior.elytra.UnpackedSegment; +import baritone.behavior.elytra.*; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.movements.MovementFall; import baritone.utils.BlockStateInterface; +import baritone.utils.IRenderer; +import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.accessor.IChunkProviderClient; import baritone.utils.accessor.IEntityFireworkRocket; @@ -60,7 +61,9 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.chunk.Chunk; +import java.awt.*; import java.util.*; +import java.util.List; import java.util.concurrent.*; import java.util.function.Supplier; import java.util.function.UnaryOperator; @@ -112,7 +115,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private Solution pendingSolution; private boolean solveNextTick; - public ElytraBehavior(Baritone baritone) { + private ElytraBehavior(Baritone baritone) { super(baritone); this.clearLines = new CopyOnWriteArrayList<>(); this.blockedLines = new CopyOnWriteArrayList<>(); @@ -369,6 +372,45 @@ public void updatePlayerNear() { } } + @Override + public void onRenderPass(RenderEvent event) { + final Settings settings = Baritone.settings(); + if (this.visiblePath != null) { + PathRenderer.drawPath(this.visiblePath, 0, Color.RED, false, 0, 0, 0.0D); + } + if (this.aimPos != null) { + PathRenderer.drawGoal(ctx.player(), new GoalBlock(this.aimPos), event.getPartialTicks(), Color.GREEN); + } + if (!this.clearLines.isEmpty() && settings.renderRaytraces.value) { + IRenderer.startLines(Color.GREEN, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + for (Pair line : this.clearLines) { + IRenderer.emitLine(line.first(), line.second()); + } + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } + if (!this.blockedLines.isEmpty() && Baritone.settings().renderRaytraces.value) { + IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + for (Pair line : this.blockedLines) { + IRenderer.emitLine(line.first(), line.second()); + } + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } + if (this.simulationLine != null && Baritone.settings().renderElytraSimulation.value) { + IRenderer.startLines(new Color(0x36CCDC), settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + final Vec3d offset = new Vec3d( + ctx.player().prevPosX + (ctx.player().posX - ctx.player().prevPosX) * event.getPartialTicks(), + ctx.player().prevPosY + (ctx.player().posY - ctx.player().prevPosY) * event.getPartialTicks(), + ctx.player().prevPosZ + (ctx.player().posZ - ctx.player().prevPosZ) * event.getPartialTicks() + ); + for (int i = 0; i < this.simulationLine.size() - 1; i++) { + final Vec3d src = this.simulationLine.get(i).add(offset); + final Vec3d dst = this.simulationLine.get(i + 1).add(offset); + IRenderer.emitLine(src, dst); + } + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } + } + @Override public void onWorldEvent(WorldEvent event) { if (event.getWorld() != null) { @@ -451,6 +493,16 @@ public boolean isActive() { .filter(process -> this.process == process).isPresent(); } + @Override + public boolean isLoaded() { + return true; + } + + @Override + public boolean isSafeToCancel() { + return !this.isActive() || !(this.process.state == State.FLYING || this.process.state == State.START_FLYING); + } + @Override public void onTick(final TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { @@ -1261,10 +1313,6 @@ private static boolean isOpenBlockSpace(final BlockStateInterface bsi, final int } } - public boolean isSafeToCancel() { - return !this.isActive() || !(this.process.state == State.FLYING || this.process.state == State.START_FLYING); - } - private final class ElytraProcess implements IBaritoneProcess { private State state; @@ -1443,4 +1491,10 @@ private enum State { START_FLYING, FLYING } + + public static T create(final Baritone baritone) { + return (T) (NetherPathfinderContext.isSupported() + ? new ElytraBehavior(baritone) + : new NullElytraBehavior(baritone)); + } } diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index a30cb4aa1..9bbb2a24a 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -222,4 +222,8 @@ public static final class Visibility { private Visibility() {} } + + public static boolean isSupported() { + return NetherPathfinder.isThisSystemSupported(); + } } diff --git a/src/main/java/baritone/behavior/elytra/NullElytraBehavior.java b/src/main/java/baritone/behavior/elytra/NullElytraBehavior.java new file mode 100644 index 000000000..b173d82b8 --- /dev/null +++ b/src/main/java/baritone/behavior/elytra/NullElytraBehavior.java @@ -0,0 +1,70 @@ +/* + * 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.behavior.elytra; + +import baritone.Baritone; +import baritone.api.behavior.IElytraBehavior; +import baritone.behavior.Behavior; +import net.minecraft.util.math.BlockPos; + +import java.util.concurrent.CompletableFuture; + +/** + * @author Brady + */ +public final class NullElytraBehavior extends Behavior implements IElytraBehavior { + + public NullElytraBehavior(Baritone baritone) { + super(baritone); + } + + @Override + public CompletableFuture resetContext() { + throw new UnsupportedOperationException("Called resetContext() on NullElytraBehavior"); + } + + @Override + public void repackChunks() { + throw new UnsupportedOperationException("Called repackChunks() on NullElytraBehavior"); + } + + @Override + public void pathTo(BlockPos destination) { + throw new UnsupportedOperationException("Called pathTo() on NullElytraBehavior"); + } + + @Override + public void cancel() { + throw new UnsupportedOperationException("Called cancel() on NullElytraBehavior"); + } + + @Override + public boolean isActive() { + return false; + } + + @Override + public boolean isLoaded() { + return false; + } + + @Override + public boolean isSafeToCancel() { + return true; + } +} diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index de8cbadef..252559b75 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -43,6 +43,17 @@ public ElytraCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { final ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); final IElytraBehavior elytra = baritone.getElytraBehavior(); + if (!elytra.isLoaded()) { + final String osArch = System.getProperty("os.arch"); + final String osName = System.getProperty("os.name"); + throw new CommandInvalidStateException(String.format( + "legacy architectures are not supported. your CPU is %s and your operating system is %s." + + "supported architectures are x86_64 or arm64, supported operating systems are windows," + + "linux, and mac", + osArch, osName + )); + } + if (!args.hasAny()) { Goal iGoal = customGoalProcess.mostRecentGoal(); if (iGoal == null) { diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 680d7e380..3fd5c2556 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -27,6 +27,7 @@ import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.Vec3d; import java.awt.*; @@ -120,4 +121,16 @@ static void drawAABB(AxisAlignedBB aabb) { emitAABB(aabb); tessellator.draw(); } + + static void emitLine(Vec3d start, Vec3d end) { + emitLine(start.x, start.y, start.z, end.x, end.y, end.z); + } + + static void emitLine(double x1, double y1, double z1, double x2, double y2, double z2) { + double vpX = renderManager.viewerPosX; + double vpY = renderManager.viewerPosY; + double vpZ = renderManager.viewerPosZ; + buffer.pos(x1 - vpX, y1 - vpY, z1 - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(x2 - vpX, y2 - vpY, z2 - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + } } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index eb7615de8..0fcad054a 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -17,15 +17,12 @@ package baritone.utils; -import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.event.events.RenderEvent; import baritone.api.pathing.goals.*; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.IPlayerContext; -import baritone.api.utils.Pair; import baritone.api.utils.interfaces.IGoalRenderPos; -import baritone.behavior.ElytraBehavior; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; import net.minecraft.block.state.IBlockState; @@ -102,44 +99,6 @@ public static void render(RenderEvent event, PathingBehavior behavior) { drawPath(next.getPath().positions(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); } - final ElytraBehavior elytra = behavior.baritone.getElytraBehavior(); - - if (elytra.visiblePath != null) { - drawPath(elytra.visiblePath, 0, Color.RED, false, 0, 0, 0.0D); - } - if (elytra.aimPos != null) { - drawGoal(ctx.player(), new GoalBlock(elytra.aimPos), partialTicks, Color.GREEN); - } - if (!elytra.clearLines.isEmpty() && Baritone.settings().renderRaytraces.value) { - IRenderer.startLines(Color.GREEN, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); - for (Pair line : elytra.clearLines) { - emitLine(line.first(), line.second()); - } - IRenderer.endLines(settings.renderPathIgnoreDepth.value); - } - if (!elytra.blockedLines.isEmpty() && Baritone.settings().renderRaytraces.value) { - IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); - for (Pair line : elytra.blockedLines) { - emitLine(line.first(), line.second()); - } - IRenderer.endLines(settings.renderPathIgnoreDepth.value); - } - if (elytra.simulationLine != null && Baritone.settings().renderElytraSimulation.value) { - IRenderer.startLines(new Color(0x36CCDC), settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); - final Vec3d offset = new Vec3d( - ctx.player().prevPosX + (ctx.player().posX - ctx.player().prevPosX) * partialTicks, - ctx.player().prevPosY + (ctx.player().posY - ctx.player().prevPosY) * partialTicks, - ctx.player().prevPosZ + (ctx.player().posZ - ctx.player().prevPosZ) * partialTicks - ); - for (int i = 0; i < elytra.simulationLine.size() - 1; i++) { - final Vec3d src = elytra.simulationLine.get(i).add(offset); - final Vec3d dst = elytra.simulationLine.get(i + 1).add(offset); - emitLine(src, dst); - } - IRenderer.endLines(settings.renderPathIgnoreDepth.value); - } - - // If there is a path calculation currently running, render the path calculation process behavior.getInProgress().ifPresent(currentlyRunning -> { currentlyRunning.bestPathSoFar().ifPresent(p -> { @@ -153,11 +112,11 @@ public static void render(RenderEvent event, PathingBehavior behavior) { }); } - private static void drawPath(List positions, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + public static void drawPath(List positions, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { drawPath(positions, startIndex, color, fadeOut, fadeStart0, fadeEnd0, 0.5D); } - private static void drawPath(List positions, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0, double offset) { + public static void drawPath(List positions, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0, double offset) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); int fadeStart = fadeStart0 + startIndex; @@ -199,18 +158,6 @@ private static void drawPath(List positions, int startIndex, Col IRenderer.endLines(settings.renderPathIgnoreDepth.value); } - private static void emitLine(Vec3d start, Vec3d end) { - emitLine(start.x, start.y, start.z, end.x, end.y, end.z); - } - - private static void emitLine(double x1, double y1, double z1, double x2, double y2, double z2) { - double vpX = renderManager.viewerPosX; - double vpY = renderManager.viewerPosY; - double vpZ = renderManager.viewerPosZ; - buffer.pos(x1 - vpX, y1 - vpY, z1 - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.pos(x2 - vpX, y2 - vpY, z2 - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - } - private static void emitPathLine(double x1, double y1, double z1, double x2, double y2, double z2, double offset) { final double extraOffset = offset + 0.03D; double vpX = renderManager.viewerPosX; @@ -255,7 +202,7 @@ public static void drawManySelectionBoxes(Entity player, Collection po IRenderer.endLines(settings.renderSelectionBoxesIgnoreDepth.value); } - private static void drawGoal(Entity player, Goal goal, float partialTicks, Color color) { + public static void drawGoal(Entity player, Goal goal, float partialTicks, Color color) { drawGoal(player, goal, partialTicks, color, true); } From 7c696b70555a8a759d49565d4ebf6a855ff2cf2a Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 11 Jul 2023 22:49:51 -0500 Subject: [PATCH 790/935] trolled --- src/main/java/baritone/Baritone.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 970bfc0a9..61866e927 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -68,7 +68,7 @@ public class Baritone implements IBaritone { private final List behaviors; private final PathingBehavior pathingBehavior; - private final ElytraBehavior elytraBehavior; + private final IElytraBehavior elytraBehavior; private final LookBehavior lookBehavior; private final InventoryBehavior inventoryBehavior; private final InputOverrideHandler inputOverrideHandler; From 8f5105c4546560a93f0acf0d0141e8f1b9f2fd3b Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 11 Jul 2023 22:50:35 -0500 Subject: [PATCH 791/935] trolled pt2 --- src/main/java/baritone/command/defaults/ElytraCommand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 252559b75..298a23cd7 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -47,8 +47,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { final String osArch = System.getProperty("os.arch"); final String osName = System.getProperty("os.name"); throw new CommandInvalidStateException(String.format( - "legacy architectures are not supported. your CPU is %s and your operating system is %s." + - "supported architectures are x86_64 or arm64, supported operating systems are windows," + + "legacy architectures are not supported. your CPU is %s and your operating system is %s. " + + "supported architectures are x86_64 or arm64, supported operating systems are windows, " + "linux, and mac", osArch, osName )); From 42771686c6534cdebb4205597311c7011d192f55 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Wed, 12 Jul 2023 16:42:14 -0400 Subject: [PATCH 792/935] auto swap elytra --- src/api/java/baritone/api/Settings.java | 15 +++++ .../baritone/behavior/ElytraBehavior.java | 55 +++++++++++++++++++ .../elytra/NetherPathfinderContext.java | 10 ++-- 3 files changed, 74 insertions(+), 6 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 08fe54d3a..3f039fe91 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1394,6 +1394,21 @@ public final class Settings { */ public final Setting elytraNetherSeed = new Setting<>(146008555100680L); + /** + * Automatically swap the current elytra with a new one when the durability gets too low + */ + public final Setting elytraAutoSwap = new Setting<>(true); + + /** + * The minimum durability an elytra can have before being swapped + */ + public final Setting elytraMinimumDurability = new Setting<>(5); + + /** + * The number of ticks between doing inventory clicks + */ + public final Setting elytraInventoryTicks = new Setting<>(5); + /** * A map of lowercase setting field names to their respective setting */ diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 7fc47032b..c39950f33 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -51,10 +51,12 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; import net.minecraft.init.Items; +import net.minecraft.inventory.ClickType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.play.server.SPacketPlayerPosLook; import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -115,6 +117,11 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private Solution pendingSolution; private boolean solveNextTick; + // auto swap + private int tickCounter; + private int tickLastTransaction = -Baritone.settings().elytraInventoryTicks.value; + private final Queue transactionQueue = new LinkedList<>(); + private ElytraBehavior(Baritone baritone) { super(baritone); this.clearLines = new CopyOnWriteArrayList<>(); @@ -585,6 +592,8 @@ private void tick() { return; } + trySwapElytra(); + if (ctx.player().collidedHorizontally) { logDirect("hbonk"); } @@ -1248,6 +1257,50 @@ private static boolean passable(IBlockState state, boolean ignoreLava) { return mat == Material.AIR || (ignoreLava && mat == Material.LAVA); } + private void tickInventoryTransactions() { + if (tickCounter - tickLastTransaction > Baritone.settings().elytraInventoryTicks.value) { + Runnable r = transactionQueue.poll(); + if (r != null) { + r.run(); + tickLastTransaction = tickCounter; + } + } + tickCounter++; + } + + private void queueWindowClick(int windowId, int slotId, int button, ClickType type) { + transactionQueue.add(() -> ctx.playerController().windowClick(windowId, slotId, button, type, ctx.player())); + } + + private int findGoodElytra() { + NonNullList invy = ctx.player().inventory.mainInventory; + for (int i = 0; i < invy.size(); i++) { + ItemStack slot = invy.get(i); + if (slot.getItem() == Items.ELYTRA && (slot.getItem().getMaxDamage() - slot.getItemDamage()) > Baritone.settings().elytraMinimumDurability.value) { + return i; + } + } + return -1; + } + + private void trySwapElytra() { + if (!Baritone.settings().elytraAutoSwap.value) return; + if (!transactionQueue.isEmpty()) return; + + ItemStack chest = ctx.player().inventory.armorInventory.get(2); + if (chest.getItem() != Items.ELYTRA) return; + if (chest.getItem().getMaxDamage() - chest.getItemDamage() > Baritone.settings().elytraMinimumDurability.value) return; + + int goodElytraSlot = findGoodElytra(); + if (goodElytraSlot != -1) { + final int CHEST_SLOT = 6; + final int slotId = goodElytraSlot < 9 ? goodElytraSlot + 36 : goodElytraSlot; + queueWindowClick(ctx.player().inventoryContainer.windowId, slotId, 0, ClickType.PICKUP); + queueWindowClick(ctx.player().inventoryContainer.windowId, CHEST_SLOT, 0, ClickType.PICKUP); + queueWindowClick(ctx.player().inventoryContainer.windowId, slotId, 0, ClickType.PICKUP); + } + } + /** * Minecraft 1.12's pushOutOfBlocks logic doesn't account for players being able to fit under single block spaces, * so whenever the edge of a ceiling is encountered while elytra flying it tries to push the player out. @@ -1331,6 +1384,8 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } + tickInventoryTransactions(); + if (ctx.player().isElytraFlying()) { this.state = State.FLYING; this.goal = null; diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 9bbb2a24a..063082afb 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -199,12 +199,10 @@ private static void writeChunkData(Chunk chunk, long ptr) { } else { id = (int) ((jl | longArray[k] << (64 - l)) & maxEntryValue); } - Octree.setBlock(ptr, - ((idx & 255) & 15), - yReal + (idx >> 8), - ((idx & 255) >> 4), - id != airId - ); + int x = (idx & 15); + int y = yReal + (idx >> 8); + int z = ((idx >> 4) & 15); + Octree.setBlock(ptr, x, y, z, id != airId); } } Octree.setIsFromJava(ptr); From 0b5d5b81768217544be3240355e2d2d90228c358 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Wed, 12 Jul 2023 22:54:04 -0400 Subject: [PATCH 793/935] use ticksBetweenInventoryMoves --- src/api/java/baritone/api/Settings.java | 5 ----- src/main/java/baritone/behavior/ElytraBehavior.java | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 3f039fe91..eafa22b22 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1404,11 +1404,6 @@ public final class Settings { */ public final Setting elytraMinimumDurability = new Setting<>(5); - /** - * The number of ticks between doing inventory clicks - */ - public final Setting elytraInventoryTicks = new Setting<>(5); - /** * A map of lowercase setting field names to their respective setting */ diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index c39950f33..0c5d47023 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -119,7 +119,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // auto swap private int tickCounter; - private int tickLastTransaction = -Baritone.settings().elytraInventoryTicks.value; + private int tickLastTransaction = -Baritone.settings().ticksBetweenInventoryMoves.value; private final Queue transactionQueue = new LinkedList<>(); private ElytraBehavior(Baritone baritone) { @@ -1258,7 +1258,7 @@ private static boolean passable(IBlockState state, boolean ignoreLava) { } private void tickInventoryTransactions() { - if (tickCounter - tickLastTransaction > Baritone.settings().elytraInventoryTicks.value) { + if (tickCounter - tickLastTransaction > Baritone.settings().ticksBetweenInventoryMoves.value) { Runnable r = transactionQueue.poll(); if (r != null) { r.run(); From 461f56c4d648d62bc6d7ea1c05be6cd923143f63 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Thu, 13 Jul 2023 14:21:15 -0400 Subject: [PATCH 794/935] countdown instead of count up --- src/main/java/baritone/behavior/ElytraBehavior.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 0c5d47023..cbff38815 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -118,8 +118,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private boolean solveNextTick; // auto swap - private int tickCounter; - private int tickLastTransaction = -Baritone.settings().ticksBetweenInventoryMoves.value; + private int invTickCountdown = 0; private final Queue transactionQueue = new LinkedList<>(); private ElytraBehavior(Baritone baritone) { @@ -1258,14 +1257,14 @@ private static boolean passable(IBlockState state, boolean ignoreLava) { } private void tickInventoryTransactions() { - if (tickCounter - tickLastTransaction > Baritone.settings().ticksBetweenInventoryMoves.value) { + if (invTickCountdown <= 0) { Runnable r = transactionQueue.poll(); if (r != null) { r.run(); - tickLastTransaction = tickCounter; + invTickCountdown = Baritone.settings().ticksBetweenInventoryMoves.value; } } - tickCounter++; + if (invTickCountdown > 0) invTickCountdown--; } private void queueWindowClick(int windowId, int slotId, int button, ClickType type) { From d35571923f41ae507fb066b9322ef18ea2dfebed Mon Sep 17 00:00:00 2001 From: Babbaj Date: Thu, 13 Jul 2023 14:35:33 -0400 Subject: [PATCH 795/935] appease brady --- .../java/baritone/behavior/ElytraBehavior.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index cbff38815..0d61d1894 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -544,6 +544,8 @@ public void onTick(final TickEvent event) { } } + tickInventoryTransactions(); + // Certified mojang employee incident if (this.remainingFireworkTicks > 0) { this.remainingFireworkTicks--; @@ -1283,12 +1285,15 @@ private int findGoodElytra() { } private void trySwapElytra() { - if (!Baritone.settings().elytraAutoSwap.value) return; - if (!transactionQueue.isEmpty()) return; + if (!Baritone.settings().elytraAutoSwap.value || !transactionQueue.isEmpty()) { + return; + } ItemStack chest = ctx.player().inventory.armorInventory.get(2); - if (chest.getItem() != Items.ELYTRA) return; - if (chest.getItem().getMaxDamage() - chest.getItemDamage() > Baritone.settings().elytraMinimumDurability.value) return; + if (chest.getItem() != Items.ELYTRA + || chest.getItem().getMaxDamage() - chest.getItemDamage() > Baritone.settings().elytraMinimumDurability.value) { + return; + } int goodElytraSlot = findGoodElytra(); if (goodElytraSlot != -1) { @@ -1383,8 +1388,6 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - tickInventoryTransactions(); - if (ctx.player().isElytraFlying()) { this.state = State.FLYING; this.goal = null; From 29bf046aa8412f80a4eceb529dca02d6dfd170f8 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 13 Jul 2023 14:28:51 -0500 Subject: [PATCH 796/935] BlockStateOctreeInterface --- .../baritone/behavior/ElytraBehavior.java | 18 ++++--- .../elytra/BlockStateOctreeInterface.java | 50 +++++++++++++++++++ .../elytra/NetherPathfinderContext.java | 3 +- 3 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 0d61d1894..ceab9db7c 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -110,6 +110,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private final int[] nextTickBoostCounter; private BlockStateInterface bsi; + private BlockStateOctreeInterface boi; private BlockPos destination; private final ExecutorService solverExecutor; @@ -299,7 +300,8 @@ private void pathfindAroundObstacles() { // not loaded yet? return; } - if (!passable(ctx.world().getBlockState(path.get(rangeStartIncl)), false)) { + final BetterBlockPos rangeStart = path.get(rangeStartIncl); + if (!ElytraBehavior.this.passable(rangeStart.x, rangeStart.y, rangeStart.z, false)) { // we're in a wall return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: } @@ -575,7 +577,9 @@ public void onTick(final TickEvent event) { return; } + // ctx AND context???? :DDD this.bsi = new BlockStateInterface(ctx); + this.boi = new BlockStateOctreeInterface(context); this.pathManager.tick(); final int playerNear = this.pathManager.getNear(); @@ -1250,12 +1254,12 @@ private static Vec3d step(final Vec3d motion, final Vec3d lookDirection, final f } private boolean passable(int x, int y, int z, boolean ignoreLava) { - return passable(this.bsi.get0(x, y, z), ignoreLava); - } - - private static boolean passable(IBlockState state, boolean ignoreLava) { - Material mat = state.getMaterial(); - return mat == Material.AIR || (ignoreLava && mat == Material.LAVA); + if (ignoreLava) { + final Material mat = this.bsi.get0(x, y, z).getMaterial(); + return mat == Material.AIR || mat == Material.LAVA; + } else { + return !this.boi.get0(x, y, z); + } } private void tickInventoryTransactions() { diff --git a/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java b/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java new file mode 100644 index 000000000..261abdbf6 --- /dev/null +++ b/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java @@ -0,0 +1,50 @@ +/* + * 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.behavior.elytra; + +import dev.babbaj.pathfinder.NetherPathfinder; +import dev.babbaj.pathfinder.Octree; + +/** + * @author Brady + */ +public final class BlockStateOctreeInterface { + + private final long context; + private long chunkPtr; + private int prevChunkX; + private int prevChunkZ; + + public BlockStateOctreeInterface(final NetherPathfinderContext context) { + this.context = context.context; + } + + public boolean get0(final int x, final int y, final int z) { + if (y < 0 || y >= 128) { + return false; + } + final int chunkX = x >> 4; + final int chunkZ = z >> 4; + if (chunkX != this.prevChunkX || chunkZ != this.prevChunkZ || this.chunkPtr == 0) { + this.prevChunkX = chunkX; + this.prevChunkZ = chunkZ; + this.chunkPtr = NetherPathfinder.getOrCreateChunk(this.context, chunkX, chunkZ); + } + return Octree.getBlock(this.chunkPtr, x & 0xF, y & 0x7F, z & 0xF); + } +} diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 063082afb..457b2a7a5 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -46,7 +46,8 @@ public final class NetherPathfinderContext { private static final IBlockState AIR_BLOCK_STATE = Blocks.AIR.getDefaultState(); - private final long context; + // Visible for access in BlockStateOctreeInterface + final long context; private final long seed; private final ExecutorService executor; From 1d109d4b9fb7abe9d2d1ea31def84abf6cb32aee Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 13 Jul 2023 14:47:19 -0500 Subject: [PATCH 797/935] crucial performance optimization --- .../behavior/elytra/BlockStateOctreeInterface.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java b/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java index 261abdbf6..8a07b96e5 100644 --- a/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java +++ b/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java @@ -27,20 +27,22 @@ public final class BlockStateOctreeInterface { private final long context; private long chunkPtr; - private int prevChunkX; - private int prevChunkZ; + + // Guarantee that the first lookup will fetch the context by setting MAX_VALUE + private int prevChunkX = Integer.MAX_VALUE; + private int prevChunkZ = Integer.MAX_VALUE; public BlockStateOctreeInterface(final NetherPathfinderContext context) { this.context = context.context; } public boolean get0(final int x, final int y, final int z) { - if (y < 0 || y >= 128) { + if ((y | (128 - y)) < 0) { return false; } final int chunkX = x >> 4; final int chunkZ = z >> 4; - if (chunkX != this.prevChunkX || chunkZ != this.prevChunkZ || this.chunkPtr == 0) { + if (((chunkX ^ this.prevChunkX) | (chunkZ ^ this.prevChunkZ)) != 0) { this.prevChunkX = chunkX; this.prevChunkZ = chunkZ; this.chunkPtr = NetherPathfinder.getOrCreateChunk(this.context, chunkX, chunkZ); From b468b8eb95f27efa27756c244973809fec8d4dfd Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sat, 15 Jul 2023 22:17:21 -0400 Subject: [PATCH 798/935] landing procedure --- .../baritone/behavior/ElytraBehavior.java | 22 ++++++++++++++++++- .../baritone/behavior/elytra/NetherPath.java | 4 ++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index ceab9db7c..43c138846 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -1393,6 +1393,23 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (ctx.player().isElytraFlying()) { + if (ctx.player().getDistanceSqToCenter(ElytraBehavior.this.pathManager.path.getLast()) < (5 * 5)) { + this.state = State.LANDING; + } + } + + if (this.state == State.LANDING) { + if (ctx.player().isElytraFlying()) { + BetterBlockPos endPos = ElytraBehavior.this.pathManager.path.getLast(); + Vec3d from = ctx.player().getPositionVector(); + Vec3d to = new Vec3d(endPos.x, from.y, endPos.z); + Rotation rotation = RotationUtils.calcRotationFromVec3d(from, to, ctx.playerRotations()); + baritone.getLookBehavior().updateTarget(rotation, false); + } else { + this.onLostControl(); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } else if (ctx.player().isElytraFlying()) { this.state = State.FLYING; this.goal = null; baritone.getInputOverrideHandler().clearAllKeys(); @@ -1508,6 +1525,8 @@ public String displayName0() { return "Begin flying"; case FLYING: return "Flying"; + case LANDING: + return "Landing"; default: return "Unknown"; } @@ -1550,7 +1569,8 @@ private enum State { PAUSE, GET_TO_JUMP, START_FLYING, - FLYING + FLYING, + LANDING } public static T create(final Baritone baritone) { diff --git a/src/main/java/baritone/behavior/elytra/NetherPath.java b/src/main/java/baritone/behavior/elytra/NetherPath.java index e90075b87..e8f8e2793 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPath.java +++ b/src/main/java/baritone/behavior/elytra/NetherPath.java @@ -47,6 +47,10 @@ public int size() { return this.backing.size(); } + public BetterBlockPos getLast() { + return this.backing.get(this.backing.size() - 1); + } + public Vec3d getVec(int index) { final BetterBlockPos pos = this.get(index); return new Vec3d(pos.x, pos.y, pos.z); From 716b3ae0d23ae7a253f87b76b983dd94f1f5a730 Mon Sep 17 00:00:00 2001 From: Brady Hahn Date: Sat, 15 Jul 2023 22:23:35 -0500 Subject: [PATCH 799/935] Update ElytraBehavior.java i love github web editor --- src/main/java/baritone/behavior/ElytraBehavior.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 43c138846..197ea61b8 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -306,7 +306,7 @@ private void pathfindAroundObstacles() { return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: } - if (this.ticksNearUnchanged > 100) { + if (ElytraBehavior.this.process.state != State.LANDING && this.ticksNearUnchanged > 100) { this.pathRecalcSegment(rangeEndExcl - 1) .thenRun(() -> { logDirect("Recalculating segment, no progress in last 100 ticks"); @@ -1393,14 +1393,15 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (ctx.player().isElytraFlying()) { - if (ctx.player().getDistanceSqToCenter(ElytraBehavior.this.pathManager.path.getLast()) < (5 * 5)) { + final BetterBlockPos last = ElytraBehavior.this.pathManager.path.getLast(); + if (last != null && ctx.player().getDistanceSqToCenter(last) < (5 * 5)) { this.state = State.LANDING; } } if (this.state == State.LANDING) { - if (ctx.player().isElytraFlying()) { - BetterBlockPos endPos = ElytraBehavior.this.pathManager.path.getLast(); + final BetterBlockPos endPos = ElytraBehavior.this.pathManager.path.getLast(); + if (ctx.player().isElytraFlying() && endPos != null) { Vec3d from = ctx.player().getPositionVector(); Vec3d to = new Vec3d(endPos.x, from.y, endPos.z); Rotation rotation = RotationUtils.calcRotationFromVec3d(from, to, ctx.playerRotations()); From e579bf980d3f2021b57723f3e9d7c0c4d0a70b15 Mon Sep 17 00:00:00 2001 From: Brady Hahn Date: Sat, 15 Jul 2023 22:23:59 -0500 Subject: [PATCH 800/935] Update NetherPath.java --- src/main/java/baritone/behavior/elytra/NetherPath.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/elytra/NetherPath.java b/src/main/java/baritone/behavior/elytra/NetherPath.java index e8f8e2793..e746665c4 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPath.java +++ b/src/main/java/baritone/behavior/elytra/NetherPath.java @@ -47,8 +47,11 @@ public int size() { return this.backing.size(); } + /** + * @return The last position in the path, or {@code null} if empty + */ public BetterBlockPos getLast() { - return this.backing.get(this.backing.size() - 1); + return this.isEmpty() ? null : this.backing.get(this.backing.size() - 1); } public Vec3d getVec(int index) { From 76d3a13f58ba5b430f6ceed8f6d53db090d39713 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 16 Jul 2023 01:19:51 -0400 Subject: [PATCH 801/935] cull far away chunks from the cache --- build.gradle | 4 ++-- src/api/java/baritone/api/Settings.java | 11 +++++++++++ .../java/baritone/behavior/ElytraBehavior.java | 15 +++++++++++---- .../behavior/elytra/NetherPathfinderContext.java | 4 ++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index da0e2232b..e44d68e04 100755 --- a/build.gradle +++ b/build.gradle @@ -175,8 +175,8 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.24') - implementation 'dev.babbaj:nether-pathfinder:0.24' + launchImplementation('dev.babbaj:nether-pathfinder:0.34') + implementation 'dev.babbaj:nether-pathfinder:0.34' testImplementation 'junit:junit:4.12' } diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index eafa22b22..e203a0ebf 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -38,6 +38,7 @@ import java.lang.reflect.Type; import java.util.List; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -1404,6 +1405,16 @@ public final class Settings { */ public final Setting elytraMinimumDurability = new Setting<>(5); + /** + * Time between culling far away chunks from the nether pathfinder chunk cache + */ + public final Setting elytraTimeBetweenCacheCullSecs = new Setting<>(TimeUnit.MINUTES.toSeconds(3)); + + /** + * Maximum distance chunks can be before being culled from the nether pathfinder chunk cache + */ + public final Setting elytraCacheCullDistance = new Setting<>(5000); + /** * A map of lowercase setting field names to their respective setting */ diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 197ea61b8..42f226e79 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -118,9 +118,11 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private Solution pendingSolution; private boolean solveNextTick; + private long timeLastCacheCull = 0L; + // auto swap private int invTickCountdown = 0; - private final Queue transactionQueue = new LinkedList<>(); + private final Queue invTransactionQueue = new LinkedList<>(); private ElytraBehavior(Baritone baritone) { super(baritone); @@ -516,6 +518,11 @@ public void onTick(final TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } + final long now = System.currentTimeMillis(); + if ((now - this.timeLastCacheCull) / 1000 > Baritone.settings().elytraTimeBetweenCacheCullSecs.value) { + this.context.queueCacheCulling(ctx.player().chunkCoordX, ctx.player().chunkCoordZ, Baritone.settings().elytraCacheCullDistance.value); + this.timeLastCacheCull = now; + } // Fetch the previous solution, regardless of if it's going to be used this.pendingSolution = null; @@ -1264,7 +1271,7 @@ private boolean passable(int x, int y, int z, boolean ignoreLava) { private void tickInventoryTransactions() { if (invTickCountdown <= 0) { - Runnable r = transactionQueue.poll(); + Runnable r = invTransactionQueue.poll(); if (r != null) { r.run(); invTickCountdown = Baritone.settings().ticksBetweenInventoryMoves.value; @@ -1274,7 +1281,7 @@ private void tickInventoryTransactions() { } private void queueWindowClick(int windowId, int slotId, int button, ClickType type) { - transactionQueue.add(() -> ctx.playerController().windowClick(windowId, slotId, button, type, ctx.player())); + invTransactionQueue.add(() -> ctx.playerController().windowClick(windowId, slotId, button, type, ctx.player())); } private int findGoodElytra() { @@ -1289,7 +1296,7 @@ private int findGoodElytra() { } private void trySwapElytra() { - if (!Baritone.settings().elytraAutoSwap.value || !transactionQueue.isEmpty()) { + if (!Baritone.settings().elytraAutoSwap.value || !invTransactionQueue.isEmpty()) { return; } diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 457b2a7a5..e0eb7de0b 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -57,6 +57,10 @@ public NetherPathfinderContext(long seed) { this.executor = Executors.newSingleThreadExecutor(); } + public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks) { + this.executor.execute(() -> NetherPathfinder.cullFarChunks(this.context, chunkX, chunkZ, maxDistanceBlocks)); + } + public void queueForPacking(final Chunk chunkIn) { final SoftReference ref = new SoftReference<>(chunkIn); this.executor.execute(() -> { From f3bb5a0cb2b490ce7ce1cf98120f27567a9ea4a6 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 16 Jul 2023 13:53:02 -0400 Subject: [PATCH 802/935] make sure BlockStateOctreeInterface doesn't use freed chunk pointers --- .../java/baritone/behavior/ElytraBehavior.java | 2 +- .../elytra/BlockStateOctreeInterface.java | 17 +++++++++++------ .../elytra/NetherPathfinderContext.java | 10 ++++++++-- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 42f226e79..b9bbd65e7 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -520,7 +520,7 @@ public void onTick(final TickEvent event) { } final long now = System.currentTimeMillis(); if ((now - this.timeLastCacheCull) / 1000 > Baritone.settings().elytraTimeBetweenCacheCullSecs.value) { - this.context.queueCacheCulling(ctx.player().chunkCoordX, ctx.player().chunkCoordZ, Baritone.settings().elytraCacheCullDistance.value); + this.context.queueCacheCulling(ctx.player().chunkCoordX, ctx.player().chunkCoordZ, Baritone.settings().elytraCacheCullDistance.value, this.boi); this.timeLastCacheCull = now; } diff --git a/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java b/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java index 8a07b96e5..b81a6aed5 100644 --- a/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java +++ b/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java @@ -25,15 +25,17 @@ */ public final class BlockStateOctreeInterface { - private final long context; - private long chunkPtr; + private final NetherPathfinderContext context; + private final long contextPtr; + volatile long chunkPtr; // Guarantee that the first lookup will fetch the context by setting MAX_VALUE private int prevChunkX = Integer.MAX_VALUE; private int prevChunkZ = Integer.MAX_VALUE; public BlockStateOctreeInterface(final NetherPathfinderContext context) { - this.context = context.context; + this.context = context; + this.contextPtr = context.context; } public boolean get0(final int x, final int y, final int z) { @@ -42,11 +44,14 @@ public boolean get0(final int x, final int y, final int z) { } final int chunkX = x >> 4; final int chunkZ = z >> 4; - if (((chunkX ^ this.prevChunkX) | (chunkZ ^ this.prevChunkZ)) != 0) { + long pointer = this.chunkPtr; + if (pointer == 0 | ((chunkX ^ this.prevChunkX) | (chunkZ ^ this.prevChunkZ)) != 0) { this.prevChunkX = chunkX; this.prevChunkZ = chunkZ; - this.chunkPtr = NetherPathfinder.getOrCreateChunk(this.context, chunkX, chunkZ); + synchronized (this.context.cacheLock) { + this.chunkPtr = pointer = NetherPathfinder.getOrCreateChunk(this.contextPtr, chunkX, chunkZ); + } } - return Octree.getBlock(this.chunkPtr, x & 0xF, y & 0x7F, z & 0xF); + return Octree.getBlock(pointer, x & 0xF, y & 0x7F, z & 0xF); } } diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index e0eb7de0b..ebe563374 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -45,6 +45,7 @@ public final class NetherPathfinderContext { private static final IBlockState AIR_BLOCK_STATE = Blocks.AIR.getDefaultState(); + public final Object cacheLock = new Object(); // Visible for access in BlockStateOctreeInterface final long context; @@ -57,8 +58,13 @@ public NetherPathfinderContext(long seed) { this.executor = Executors.newSingleThreadExecutor(); } - public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks) { - this.executor.execute(() -> NetherPathfinder.cullFarChunks(this.context, chunkX, chunkZ, maxDistanceBlocks)); + public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks, BlockStateOctreeInterface boi) { + this.executor.execute(() -> { + synchronized (this.cacheLock) { + boi.chunkPtr = 0L; + NetherPathfinder.cullFarChunks(this.context, chunkX, chunkZ, maxDistanceBlocks); + } + }); } public void queueForPacking(final Chunk chunkIn) { From 41e8c69db9718a2032fb109ce1f4d34de3b5a41a Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 16 Jul 2023 18:58:42 -0400 Subject: [PATCH 803/935] consistent elytra setting naming --- src/api/java/baritone/api/Settings.java | 10 +++++----- src/main/java/baritone/behavior/ElytraBehavior.java | 12 ++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index e203a0ebf..2ec56b1a4 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1366,23 +1366,23 @@ public final class Settings { /** * If enabled, avoids using fireworks when descending along the flight path. */ - public final Setting conserveFireworks = new Setting<>(true); + public final Setting elytraConserveFireworks = new Setting<>(true); /** * Renders the raytraces that are performed by the elytra fly calculation. */ - public final Setting renderRaytraces = new Setting<>(false); + public final Setting elytraRenderRaytraces = new Setting<>(false); /** * Renders the raytraces that are used in the hitbox part of the elytra fly calculation. - * Requires {@link #renderRaytraces}. + * Requires {@link #elytraRenderRaytraces}. */ - public final Setting renderHitboxRaytraces = new Setting<>(false); + public final Setting elytraRenderHitboxRaytraces = new Setting<>(false); /** * Renders the best elytra flight path that was simulated each tick. */ - public final Setting renderElytraSimulation = new Setting<>(false); + public final Setting elytraRenderSimulation = new Setting<>(false); /** * Automatically path to and jump off of ledges to initiate elytra flight when grounded. diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index b9bbd65e7..1f969dc23 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -391,21 +391,21 @@ public void onRenderPass(RenderEvent event) { if (this.aimPos != null) { PathRenderer.drawGoal(ctx.player(), new GoalBlock(this.aimPos), event.getPartialTicks(), Color.GREEN); } - if (!this.clearLines.isEmpty() && settings.renderRaytraces.value) { + if (!this.clearLines.isEmpty() && settings.elytraRenderRaytraces.value) { IRenderer.startLines(Color.GREEN, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); for (Pair line : this.clearLines) { IRenderer.emitLine(line.first(), line.second()); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } - if (!this.blockedLines.isEmpty() && Baritone.settings().renderRaytraces.value) { + if (!this.blockedLines.isEmpty() && Baritone.settings().elytraRenderRaytraces.value) { IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); for (Pair line : this.blockedLines) { IRenderer.emitLine(line.first(), line.second()); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } - if (this.simulationLine != null && Baritone.settings().renderElytraSimulation.value) { + if (this.simulationLine != null && Baritone.settings().elytraRenderSimulation.value) { IRenderer.startLines(new Color(0x36CCDC), settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); final Vec3d offset = new Vec3d( ctx.player().prevPosX + (ctx.player().posX - ctx.player().prevPosX) * event.getPartialTicks(), @@ -753,7 +753,7 @@ private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final bool logDebug("waiting for elytraFireworkSetbackUseDelay: " + this.remainingSetBackTicks); return; } - final boolean useOnDescend = !Baritone.settings().conserveFireworks.value || ctx.player().posY < goingTo.y + 5; + final boolean useOnDescend = !Baritone.settings().elytraConserveFireworks.value || ctx.player().posY < goingTo.y + 5; final double currentSpeed = new Vec3d( ctx.player().motionX, // ignore y component if we are BOTH below where we want to be AND descending @@ -984,7 +984,7 @@ private boolean isHitboxClear(final SolverContext context, final Vec3d dest, fin }; // Use non-batching method without early failure - if (Baritone.settings().renderHitboxRaytraces.value) { + if (Baritone.settings().elytraRenderHitboxRaytraces.value) { boolean clear = true; for (int i = 0; i < 8; i++) { final Vec3d s = new Vec3d(src[i * 3], src[i * 3 + 1], src[i * 3 + 2]); @@ -1009,7 +1009,7 @@ private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { clear = ctx.world().rayTraceBlocks(start, dest, false, false, false) == null; } - if (Baritone.settings().renderRaytraces.value) { + if (Baritone.settings().elytraRenderRaytraces.value) { (clear ? this.clearLines : this.blockedLines).add(new Pair<>(start, dest)); } return clear; From 0e567f2f90b32a3b669c45ec9f58c36f4432a1dc Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 16 Jul 2023 18:17:15 -0700 Subject: [PATCH 804/935] shrimple --- .../elytra/NetherPathfinderContext.java | 76 +++++++++++-------- 1 file changed, 44 insertions(+), 32 deletions(-) diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index ebe563374..defc3fa19 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -34,10 +34,7 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.lang.ref.SoftReference; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; /** * @author Brady @@ -50,12 +47,15 @@ public final class NetherPathfinderContext { // Visible for access in BlockStateOctreeInterface final long context; private final long seed; - private final ExecutorService executor; + private final ThreadPoolExecutor executor; + private final ExecutorService executorHighPriority; public NetherPathfinderContext(long seed) { this.context = NetherPathfinder.newContext(seed); this.seed = seed; - this.executor = Executors.newSingleThreadExecutor(); + + this.executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()); + this.executorHighPriority = Executors.newSingleThreadExecutor(); } public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks, BlockStateOctreeInterface boi) { @@ -68,46 +68,58 @@ public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks, Blo } public void queueForPacking(final Chunk chunkIn) { + if (this.executor.getQueue().size() > 50000) { + return; + } final SoftReference ref = new SoftReference<>(chunkIn); this.executor.execute(() -> { - // TODO: Prioritize packing recent chunks and/or ones that the path goes through, - // and prune the oldest chunks per chunkPackerQueueMaxSize - final Chunk chunk = ref.get(); - if (chunk != null) { - long ptr = NetherPathfinder.getOrCreateChunk(this.context, chunk.x, chunk.z); - writeChunkData(chunk, ptr); + synchronized (this.cacheLock) { + // TODO: Prioritize packing recent chunks and/or ones that the path goes through, + // and prune the oldest chunks per chunkPackerQueueMaxSize + final Chunk chunk = ref.get(); + if (chunk != null) { + long ptr = NetherPathfinder.getOrCreateChunk(this.context, chunk.x, chunk.z); + writeChunkData(chunk, ptr); + } } }); } public void queueBlockUpdate(BlockChangeEvent event) { + if (this.executor.getQueue().size() > 50000) { + return; + } this.executor.execute(() -> { - ChunkPos chunkPos = event.getChunkPos(); - long ptr = NetherPathfinder.getChunkPointer(this.context, chunkPos.x, chunkPos.z); - if (ptr == 0) return; // this shouldn't ever happen - event.getBlocks().forEach(pair -> { - BlockPos pos = pair.first(); - if (pos.getY() >= 128) return; - boolean isSolid = pair.second() != AIR_BLOCK_STATE; - Octree.setBlock(ptr, pos.getX() & 15, pos.getY(), pos.getZ() & 15, isSolid); - }); + synchronized (this.cacheLock) { + ChunkPos chunkPos = event.getChunkPos(); + long ptr = NetherPathfinder.getChunkPointer(this.context, chunkPos.x, chunkPos.z); + if (ptr == 0) return; // this shouldn't ever happen + event.getBlocks().forEach(pair -> { + BlockPos pos = pair.first(); + if (pos.getY() >= 128) return; + boolean isSolid = pair.second() != AIR_BLOCK_STATE; + Octree.setBlock(ptr, pos.getX() & 15, pos.getY(), pos.getZ() & 15, isSolid); + }); + } }); } public CompletableFuture pathFindAsync(final BlockPos src, final BlockPos dst) { return CompletableFuture.supplyAsync(() -> { - final PathSegment segment = NetherPathfinder.pathFind( - this.context, - src.getX(), src.getY(), src.getZ(), - dst.getX(), dst.getY(), dst.getZ(), - true, - 10000 - ); - if (segment == null) { - throw new PathCalculationException("Path calculation failed"); + synchronized (this.cacheLock) { + final PathSegment segment = NetherPathfinder.pathFind( + this.context, + src.getX(), src.getY(), src.getZ(), + dst.getX(), dst.getY(), dst.getZ(), + true, + 10000 + ); + if (segment == null) { + throw new PathCalculationException("Path calculation failed"); + } + return segment; } - return segment; - }, this.executor); + }, this.executorHighPriority); } /** From edc92753cfa98a11d30c855d661ad8f3d1f1be9c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 16 Jul 2023 18:17:53 -0700 Subject: [PATCH 805/935] Revert "shrimple" This reverts commit 0e567f2f90b32a3b669c45ec9f58c36f4432a1dc. --- .../elytra/NetherPathfinderContext.java | 76 ++++++++----------- 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index defc3fa19..ebe563374 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -34,7 +34,10 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.lang.ref.SoftReference; -import java.util.concurrent.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; /** * @author Brady @@ -47,15 +50,12 @@ public final class NetherPathfinderContext { // Visible for access in BlockStateOctreeInterface final long context; private final long seed; - private final ThreadPoolExecutor executor; - private final ExecutorService executorHighPriority; + private final ExecutorService executor; public NetherPathfinderContext(long seed) { this.context = NetherPathfinder.newContext(seed); this.seed = seed; - - this.executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()); - this.executorHighPriority = Executors.newSingleThreadExecutor(); + this.executor = Executors.newSingleThreadExecutor(); } public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks, BlockStateOctreeInterface boi) { @@ -68,58 +68,46 @@ public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks, Blo } public void queueForPacking(final Chunk chunkIn) { - if (this.executor.getQueue().size() > 50000) { - return; - } final SoftReference ref = new SoftReference<>(chunkIn); this.executor.execute(() -> { - synchronized (this.cacheLock) { - // TODO: Prioritize packing recent chunks and/or ones that the path goes through, - // and prune the oldest chunks per chunkPackerQueueMaxSize - final Chunk chunk = ref.get(); - if (chunk != null) { - long ptr = NetherPathfinder.getOrCreateChunk(this.context, chunk.x, chunk.z); - writeChunkData(chunk, ptr); - } + // TODO: Prioritize packing recent chunks and/or ones that the path goes through, + // and prune the oldest chunks per chunkPackerQueueMaxSize + final Chunk chunk = ref.get(); + if (chunk != null) { + long ptr = NetherPathfinder.getOrCreateChunk(this.context, chunk.x, chunk.z); + writeChunkData(chunk, ptr); } }); } public void queueBlockUpdate(BlockChangeEvent event) { - if (this.executor.getQueue().size() > 50000) { - return; - } this.executor.execute(() -> { - synchronized (this.cacheLock) { - ChunkPos chunkPos = event.getChunkPos(); - long ptr = NetherPathfinder.getChunkPointer(this.context, chunkPos.x, chunkPos.z); - if (ptr == 0) return; // this shouldn't ever happen - event.getBlocks().forEach(pair -> { - BlockPos pos = pair.first(); - if (pos.getY() >= 128) return; - boolean isSolid = pair.second() != AIR_BLOCK_STATE; - Octree.setBlock(ptr, pos.getX() & 15, pos.getY(), pos.getZ() & 15, isSolid); - }); - } + ChunkPos chunkPos = event.getChunkPos(); + long ptr = NetherPathfinder.getChunkPointer(this.context, chunkPos.x, chunkPos.z); + if (ptr == 0) return; // this shouldn't ever happen + event.getBlocks().forEach(pair -> { + BlockPos pos = pair.first(); + if (pos.getY() >= 128) return; + boolean isSolid = pair.second() != AIR_BLOCK_STATE; + Octree.setBlock(ptr, pos.getX() & 15, pos.getY(), pos.getZ() & 15, isSolid); + }); }); } public CompletableFuture pathFindAsync(final BlockPos src, final BlockPos dst) { return CompletableFuture.supplyAsync(() -> { - synchronized (this.cacheLock) { - final PathSegment segment = NetherPathfinder.pathFind( - this.context, - src.getX(), src.getY(), src.getZ(), - dst.getX(), dst.getY(), dst.getZ(), - true, - 10000 - ); - if (segment == null) { - throw new PathCalculationException("Path calculation failed"); - } - return segment; + final PathSegment segment = NetherPathfinder.pathFind( + this.context, + src.getX(), src.getY(), src.getZ(), + dst.getX(), dst.getY(), dst.getZ(), + true, + 10000 + ); + if (segment == null) { + throw new PathCalculationException("Path calculation failed"); } - }, this.executorHighPriority); + return segment; + }, this.executor); } /** From 32a4c4644eccaaf0b50a0daf3ae1b144a57b85a0 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 16 Jul 2023 20:21:40 -0500 Subject: [PATCH 806/935] Move cull code --- src/main/java/baritone/behavior/ElytraBehavior.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index b9bbd65e7..0ad6ad62d 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -518,11 +518,6 @@ public void onTick(final TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } - final long now = System.currentTimeMillis(); - if ((now - this.timeLastCacheCull) / 1000 > Baritone.settings().elytraTimeBetweenCacheCullSecs.value) { - this.context.queueCacheCulling(ctx.player().chunkCoordX, ctx.player().chunkCoordZ, Baritone.settings().elytraCacheCullDistance.value, this.boi); - this.timeLastCacheCull = now; - } // Fetch the previous solution, regardless of if it's going to be used this.pendingSolution = null; @@ -594,6 +589,12 @@ public void onTick(final TickEvent event) { Math.max(playerNear - 30, 0), Math.min(playerNear + 100, path.size()) ); + + final long now = System.currentTimeMillis(); + if ((now - this.timeLastCacheCull) / 1000 > Baritone.settings().elytraTimeBetweenCacheCullSecs.value) { + this.context.queueCacheCulling(ctx.player().chunkCoordX, ctx.player().chunkCoordZ, Baritone.settings().elytraCacheCullDistance.value, this.boi); + this.timeLastCacheCull = now; + } } /** From 108dbdae5d8ba87eac0dcb1dd7a7ce625f23d874 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 16 Jul 2023 20:29:30 -0500 Subject: [PATCH 807/935] partially appease codacy --- src/api/java/baritone/api/event/events/BlockChangeEvent.java | 2 -- src/main/java/baritone/command/defaults/ElytraCommand.java | 4 +++- src/main/java/baritone/utils/PathRenderer.java | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/api/java/baritone/api/event/events/BlockChangeEvent.java b/src/api/java/baritone/api/event/events/BlockChangeEvent.java index a65a51f35..00743f025 100644 --- a/src/api/java/baritone/api/event/events/BlockChangeEvent.java +++ b/src/api/java/baritone/api/event/events/BlockChangeEvent.java @@ -22,9 +22,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; -import java.util.Collections; import java.util.List; -import java.util.Set; /** * @author Brady diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 298a23cd7..5288ade47 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -59,7 +59,9 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (iGoal == null) { throw new CommandInvalidStateException("No goal has been set"); } - final int x, y, z; + final int x; + final int y; + final int z; if (iGoal instanceof GoalXZ) { GoalXZ goal = (GoalXZ) iGoal; x = goal.getX(); diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 0fcad054a..a30ec45b7 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -33,7 +33,6 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; import java.awt.*; import java.util.Arrays; From bf9cb76604b576607f4c6b70f8a51a1a12493b14 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 17 Jul 2023 16:34:01 -0500 Subject: [PATCH 808/935] VulkanMod compatibility + use `LINES` instead of `DEBUG_LINES` --- src/main/java/baritone/utils/GuiClick.java | 1 - src/main/java/baritone/utils/IRenderer.java | 85 +++++++++++-------- .../java/baritone/utils/PathRenderer.java | 68 ++++++--------- 3 files changed, 76 insertions(+), 78 deletions(-) diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index ab0e5c4fa..7e1a9cfce 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -43,7 +43,6 @@ import java.util.Collections; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; -import static org.lwjgl.opengl.GL11.*; public class GuiClick extends Screen implements Helper { diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index c7415b96c..83436c408 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -20,17 +20,19 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; import baritone.utils.accessor.IEntityRenderManager; +import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.math.Matrix3f; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.texture.TextureManager; import com.mojang.blaze3d.vertex.*; import com.mojang.math.Matrix4f; +import net.minecraft.util.Mth; import net.minecraft.world.phys.AABB; import java.awt.*; -import static org.lwjgl.opengl.GL11.*; - public interface IRenderer { Tesselator tessellator = Tesselator.getInstance(); @@ -51,17 +53,23 @@ static void glColor(Color color, float alpha) { static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + RenderSystem.blendFuncSeparate( + GlStateManager.SourceFactor.SRC_ALPHA, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, + GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ZERO + ); glColor(color, alpha); RenderSystem.lineWidth(lineWidth); RenderSystem.disableTexture(); RenderSystem.depthMask(false); + RenderSystem.disableCull(); if (ignoreDepth) { RenderSystem.disableDepthTest(); } - //TODO: check - buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); + RenderSystem.setShader(GameRenderer::getRendertypeLinesShader); + buffer.begin(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL); } static void startLines(Color color, float lineWidth, boolean ignoreDepth) { @@ -74,51 +82,56 @@ static void endLines(boolean ignoredDepth) { RenderSystem.enableDepthTest(); } + RenderSystem.enableCull(); RenderSystem.depthMask(true); RenderSystem.enableTexture(); RenderSystem.disableBlend(); } + static void emitLine(PoseStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { + final Matrix4f matrix4f = stack.last().pose(); + final Matrix3f normal = stack.last().normal(); + + final double dx = x2 - x1; + final double dy = y2 - y1; + final double dz = z2 - z1; + + final double invMag = Mth.fastInvSqrt(dx * dx + dy * dy + dz * dz); + final float nx = (float) (dx * invMag); + final float ny = (float) (dy * invMag); + final float nz = (float) (dz * invMag); + + buffer.vertex(matrix4f, (float) x1, (float) y1, (float) z1) + .color(color[0], color[1], color[2], color[3]) + .normal(normal, nx, ny, nz) + .endVertex(); + buffer.vertex(matrix4f, (float) x2, (float) y2, (float) z2) + .color(color[0], color[1], color[2], color[3]) + .normal(normal, nx, ny, nz) + .endVertex(); + } + static void emitAABB(PoseStack stack, AABB aabb) { AABB toDraw = aabb.move(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); - Matrix4f matrix4f = stack.last().pose(); // bottom - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.minY, toDraw.minZ); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.minY, toDraw.maxZ); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.minY, toDraw.maxZ); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.minY, toDraw.minZ); // top - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + emitLine(stack, toDraw.minX, toDraw.maxY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.minZ); + emitLine(stack, toDraw.maxX, toDraw.maxY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.maxZ); + emitLine(stack, toDraw.maxX, toDraw.maxY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.maxZ); + emitLine(stack, toDraw.minX, toDraw.maxY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.minZ); // corners - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.minZ, toDraw.minX, toDraw.maxY, toDraw.minZ); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.minZ); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.maxZ, toDraw.maxX, toDraw.maxY, toDraw.maxZ); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.maxZ); } static void emitAABB(PoseStack stack, AABB aabb, double expand) { emitAABB(stack, aabb.inflate(expand, expand, expand)); } - - static void drawAABB(PoseStack stack, AABB aabb) { - buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); - emitAABB(stack, aabb); - tessellator.end(); - } } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 304de21cd..edb3bca5d 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -28,6 +28,7 @@ import baritone.pathing.path.PathExecutor; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix3f; import com.mojang.math.Matrix4f; import net.minecraft.client.renderer.blockentity.BeaconRenderer; import net.minecraft.core.BlockPos; @@ -46,8 +47,6 @@ import java.util.Collections; import java.util.List; -import static org.lwjgl.opengl.GL11.*; - /** * @author Brady * @since 8/9/2018 @@ -168,31 +167,35 @@ private static void drawPath(PoseStack stack, IPath path, int startIndex, Color IRenderer.glColor(color, alpha); } - emitLine(stack, start.x, start.y, start.z, end.x, end.y, end.z); + emitPathLine(stack, start.x, start.y, start.z, end.x, end.y, end.z); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } - private static void emitLine(PoseStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { - Matrix4f matrix4f = stack.last().pose(); + private static void emitPathLine(PoseStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { double vpX = posX(); double vpY = posY(); double vpZ = posZ(); boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; - buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - + IRenderer.emitLine(stack, + x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ, + x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ + ); if (renderPathAsFrickinThingy) { - buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - - buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - - buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + IRenderer.emitLine(stack, + x2 + 0.5D - vpX, y2 + 0.5D - vpY, z2 + 0.5D - vpZ, + x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ + ); + IRenderer.emitLine(stack, + x2 + 0.5D - vpX, y2 + 0.53D - vpY, z2 + 0.5D - vpZ, + x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ + ); + IRenderer.emitLine(stack, + x1 + 0.5D - vpX, y1 + 0.53D - vpY, z1 + 0.5D - vpZ, + x1 + 0.5D - vpX, y1 + 0.5D - vpY, z1 + 0.5D - vpZ + ); } } @@ -256,8 +259,6 @@ private static void drawGoal(PoseStack stack, IPlayerContext ctx, Goal goal, flo maxY = ctx.world().getMaxBuildHeight(); if (settings.renderGoalXZBeacon.value) { - glPushAttrib(GL_LIGHTING_BIT); - //TODO: check textureManager.bindForSetup(TEXTURE_BEACON_BEAM); if (settings.renderGoalIgnoreDepth.value) { @@ -289,8 +290,6 @@ private static void drawGoal(PoseStack stack, IPlayerContext ctx, Goal goal, flo if (settings.renderGoalIgnoreDepth.value) { RenderSystem.enableDepthTest(); } - - glPopAttrib(); return; } @@ -341,15 +340,10 @@ private static void drawDankLitGoalBox(PoseStack stack, Color colorIn, double mi renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y1); renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); - Matrix4f matrix4f = stack.last().pose(); - buffer.vertex(matrix4f, (float) minX, (float) minY, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) minY, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + IRenderer.emitLine(stack, minX, minY, minZ, minX, maxY, minZ); + IRenderer.emitLine(stack, maxX, minY, minZ, maxX, maxY, minZ); + IRenderer.emitLine(stack, maxX, minY, maxZ, maxX, maxY, maxZ); + IRenderer.emitLine(stack, minX, minY, maxZ, minX, maxY, maxZ); if (setupRender) { IRenderer.endLines(settings.renderGoalIgnoreDepth.value); @@ -358,18 +352,10 @@ private static void drawDankLitGoalBox(PoseStack stack, Color colorIn, double mi private static void renderHorizontalQuad(PoseStack stack, double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { - Matrix4f matrix4f = stack.last().pose(); - buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - - buffer.vertex(matrix4f, (float) maxX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - - buffer.vertex(matrix4f, (float) maxX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - - buffer.vertex(matrix4f, (float) minX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + IRenderer.emitLine(stack, minX, y, minZ, maxX, y, minZ); + IRenderer.emitLine(stack, maxX, y, minZ, maxX, y, maxZ); + IRenderer.emitLine(stack, maxX, y, maxZ, minX, y, maxZ); + IRenderer.emitLine(stack, minX, y, maxZ, minX, y, minZ); } } } From 1b82bd1f33b7bc76537f7a299917d78862dbd217 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 17 Jul 2023 17:58:08 -0500 Subject: [PATCH 809/935] pitch smooth look and setting for ticks --- src/api/java/baritone/api/Settings.java | 15 +++++++-- .../java/baritone/behavior/LookBehavior.java | 32 ++++++++++++------- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 2ec56b1a4..3ab2a068b 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -742,10 +742,21 @@ public final class Settings { public final Setting elytraFreeLook = new Setting<>(false); /** - * Forces the client-sided rotations to an average of the last 10 ticks of server-sided rotations. + * Forces the client-sided yaw rotation to an average of the last {@link #smoothLookTicks} of server-sided rotations. * Requires {@link #freeLook}. */ - public final Setting smoothLook = new Setting<>(false); + public final Setting smoothLookYaw = new Setting<>(false); + + /** + * Forces the client-sided pitch rotation to an average of the last {@link #smoothLookTicks} of server-sided rotations. + * Requires {@link #freeLook}. + */ + public final Setting smoothLookPitch = new Setting<>(false); + + /** + * The number of ticks to average across for {@link #smoothLookYaw} and {@link #smoothLookPitch}; + */ + public final Setting smoothLookTicks = new Setting<>(10); /** * When true, the player will remain with its existing look direction as often as possible. diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index d93607644..5f6421d08 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -26,9 +26,10 @@ import baritone.api.utils.IPlayerContext; import baritone.api.utils.Rotation; import baritone.behavior.look.ForkableRandom; -import com.google.common.collect.EvictingQueue; import net.minecraft.network.play.client.CPacketPlayer; +import java.util.ArrayDeque; +import java.util.Deque; import java.util.Optional; public final class LookBehavior extends Behavior implements ILookBehavior { @@ -52,12 +53,14 @@ public final class LookBehavior extends Behavior implements ILookBehavior { private final AimProcessor processor; - private final EvictingQueue smoothYawBuffer; + private final Deque smoothYawBuffer; + private final Deque smoothPitchBuffer; public LookBehavior(Baritone baritone) { super(baritone); this.processor = new AimProcessor(baritone.getPlayerContext()); - this.smoothYawBuffer = EvictingQueue.create(10); + this.smoothYawBuffer = new ArrayDeque<>(); + this.smoothPitchBuffer = new ArrayDeque<>(); } @Override @@ -100,15 +103,22 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { case POST: { // Reset the player's rotations back to their original values if (this.prevRotation != null) { - if (Baritone.settings().smoothLook.value) { - this.smoothYawBuffer.add(this.target.rotation.getYaw()); - ctx.player().rotationYaw = (float) this.smoothYawBuffer.stream() - .mapToDouble(d -> d).average().orElseGet(this.prevRotation::getYaw); - ctx.player().rotationPitch = this.prevRotation.getPitch(); - } else { - ctx.player().rotationYaw = this.prevRotation.getYaw(); - ctx.player().rotationPitch = this.prevRotation.getPitch(); + this.smoothYawBuffer.add(this.target.rotation.getYaw()); + while (this.smoothYawBuffer.size() > Baritone.settings().smoothLookTicks.value) { + this.smoothYawBuffer.pop(); } + this.smoothPitchBuffer.add(this.target.rotation.getPitch()); + while (this.smoothPitchBuffer.size() > Baritone.settings().smoothLookTicks.value) { + this.smoothPitchBuffer.pop(); + } + + ctx.player().rotationYaw = Baritone.settings().smoothLookYaw.value + ? (float) this.smoothYawBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getYaw) + : this.prevRotation.getYaw(); + ctx.player().rotationPitch = Baritone.settings().smoothLookPitch.value + ? (float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getPitch) + : this.prevRotation.getPitch(); + this.prevRotation = null; } // The target is done being used for this game tick, so it can be invalidated From 9a6241af8a5cf4d8bd686ccefc3a3dab11dbfeff Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 16 Jul 2023 22:56:17 -0400 Subject: [PATCH 810/935] refactor elytra into being just a process --- src/api/java/baritone/api/IBaritone.java | 13 +- .../IElytraProcess.java} | 9 +- src/main/java/baritone/Baritone.java | 11 +- .../baritone/behavior/PathingBehavior.java | 2 +- .../command/defaults/ElytraCommand.java | 4 +- .../defaults/ExecutionControlCommands.java | 2 +- .../command/defaults/ForceCancelCommand.java | 2 +- .../java/baritone/process/ElytraProcess.java | 255 ++++++++++++++++ .../elytra/BlockStateOctreeInterface.java | 2 +- .../elytra/LegacyElytraBehavior.java} | 275 +++--------------- .../elytra/NetherPath.java | 2 +- .../elytra/NetherPathfinderContext.java | 4 +- .../elytra/NullElytraProcess.java} | 26 +- .../elytra/PathCalculationException.java | 2 +- .../elytra/UnpackedSegment.java | 2 +- 15 files changed, 340 insertions(+), 271 deletions(-) rename src/api/java/baritone/api/{behavior/IElytraBehavior.java => process/IElytraProcess.java} (87%) create mode 100644 src/main/java/baritone/process/ElytraProcess.java rename src/main/java/baritone/{behavior => process}/elytra/BlockStateOctreeInterface.java (98%) rename src/main/java/baritone/{behavior/ElytraBehavior.java => process/elytra/LegacyElytraBehavior.java} (84%) rename src/main/java/baritone/{behavior => process}/elytra/NetherPath.java (98%) rename src/main/java/baritone/{behavior => process}/elytra/NetherPathfinderContext.java (98%) rename src/main/java/baritone/{behavior/elytra/NullElytraBehavior.java => process/elytra/NullElytraProcess.java} (72%) rename src/main/java/baritone/{behavior => process}/elytra/PathCalculationException.java (96%) rename src/main/java/baritone/{behavior => process}/elytra/UnpackedSegment.java (98%) diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 0913a8c43..3c9681532 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -17,7 +17,6 @@ package baritone.api; -import baritone.api.behavior.IElytraBehavior; import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.IPathingBehavior; import baritone.api.cache.IWorldProvider; @@ -41,12 +40,6 @@ public interface IBaritone { */ IPathingBehavior getPathingBehavior(); - /** - * @return The {@link IElytraBehavior} instance - * @see IElytraBehavior - */ - IElytraBehavior getElytraBehavior(); - /** * @return The {@link ILookBehavior} instance * @see ILookBehavior @@ -95,6 +88,12 @@ public interface IBaritone { */ IGetToBlockProcess getGetToBlockProcess(); + /** + * @return The {@link IElytraProcess} instance + * @see IElytraProcess + */ + IElytraProcess getElytraProcess(); + /** * @return The {@link IWorldProvider} instance * @see IWorldProvider diff --git a/src/api/java/baritone/api/behavior/IElytraBehavior.java b/src/api/java/baritone/api/process/IElytraProcess.java similarity index 87% rename from src/api/java/baritone/api/behavior/IElytraBehavior.java rename to src/api/java/baritone/api/process/IElytraProcess.java index 95ae62926..06c658f42 100644 --- a/src/api/java/baritone/api/behavior/IElytraBehavior.java +++ b/src/api/java/baritone/api/process/IElytraProcess.java @@ -15,13 +15,13 @@ * along with Baritone. If not, see . */ -package baritone.api.behavior; +package baritone.api.process; import net.minecraft.util.math.BlockPos; import java.util.concurrent.CompletableFuture; -public interface IElytraBehavior extends IBehavior { +public interface IElytraProcess extends IBaritoneProcess { /** * Marks the nether pathfinder context to be reset when it is safe to do so. Because this operation is not @@ -37,11 +37,6 @@ public interface IElytraBehavior extends IBehavior { void cancel(); - /** - * Returns {@code true} if the current {@link IElytraBehavior} is actively pathing. - */ - boolean isActive(); - /** * @return {@code true} if the native library loaded and elytra is actually usable */ diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 61866e927..c6d31a3dd 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -21,9 +21,9 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.behavior.IBehavior; -import baritone.api.behavior.IElytraBehavior; import baritone.api.event.listener.IEventBus; import baritone.api.process.IBaritoneProcess; +import baritone.api.process.IElytraProcess; import baritone.api.utils.IPlayerContext; import baritone.behavior.*; import baritone.cache.WorldProvider; @@ -68,7 +68,6 @@ public class Baritone implements IBaritone { private final List behaviors; private final PathingBehavior pathingBehavior; - private final IElytraBehavior elytraBehavior; private final LookBehavior lookBehavior; private final InventoryBehavior inventoryBehavior; private final InputOverrideHandler inputOverrideHandler; @@ -81,6 +80,7 @@ public class Baritone implements IBaritone { private final ExploreProcess exploreProcess; private final FarmProcess farmProcess; private final InventoryPauserProcess inventoryPauserProcess; + private final ElytraProcess elytraProcess; private final PathingControlManager pathingControlManager; private final SelectionManager selectionManager; @@ -108,7 +108,6 @@ public class Baritone implements IBaritone { { this.lookBehavior = this.registerBehavior(LookBehavior::new); - this.elytraBehavior = this.registerBehavior(ElytraBehavior::create); this.pathingBehavior = this.registerBehavior(PathingBehavior::new); this.inventoryBehavior = this.registerBehavior(InventoryBehavior::new); this.inputOverrideHandler = this.registerBehavior(InputOverrideHandler::new); @@ -125,6 +124,8 @@ public class Baritone implements IBaritone { this.exploreProcess = this.registerProcess(ExploreProcess::new); this.farmProcess = this.registerProcess(FarmProcess::new); this.inventoryPauserProcess = this.registerProcess(InventoryPauserProcess::new); + this.elytraProcess = this.registerProcess(ElytraProcess::create); + this.registerProcess(BackfillProcess::new); } @@ -241,8 +242,8 @@ public CommandManager getCommandManager() { } @Override - public IElytraBehavior getElytraBehavior() { - return this.elytraBehavior; + public IElytraProcess getElytraProcess() { + return this.elytraProcess; } @Override diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 670dd827c..0404921ae 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -310,7 +310,7 @@ public Optional getInProgress() { public boolean isSafeToCancel() { if (current == null) { - return !baritone.getElytraBehavior().isActive() || baritone.getElytraBehavior().isSafeToCancel(); + return !baritone.getElytraProcess().isActive() || baritone.getElytraProcess().isSafeToCancel(); } return safeToCancel; } diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 5288ade47..05695d82b 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -18,7 +18,6 @@ package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.behavior.IElytraBehavior; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; @@ -27,6 +26,7 @@ import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalXZ; import baritone.api.process.ICustomGoalProcess; +import baritone.api.process.IElytraProcess; import net.minecraft.util.math.BlockPos; import java.util.Arrays; @@ -42,7 +42,7 @@ public ElytraCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { final ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); - final IElytraBehavior elytra = baritone.getElytraBehavior(); + final IElytraProcess elytra = baritone.getElytraProcess(); if (!elytra.isLoaded()) { final String osArch = System.getProperty("os.arch"); final String osName = System.getProperty("os.name"); diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index 43adca19f..b91014a67 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -180,7 +180,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { paused[0] = false; } baritone.getPathingBehavior().cancelEverything(); - baritone.getElytraBehavior().cancel(); + baritone.getElytraProcess().cancel(); // TODO: this shouldnt be necessary logDirect("ok canceled"); } diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index ad19f168c..d86cddd5e 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -39,7 +39,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); pathingBehavior.cancelEverything(); pathingBehavior.forceCancel(); - baritone.getElytraBehavior().cancel(); + baritone.getElytraProcess().cancel(); logDirect("ok force canceled"); } diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java new file mode 100644 index 000000000..121b37b8a --- /dev/null +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -0,0 +1,255 @@ +/* + * 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.process; + +import baritone.Baritone; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalYLevel; +import baritone.api.pathing.movement.IMovement; +import baritone.api.pathing.path.IPathExecutor; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.IElytraProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.movements.MovementFall; +import baritone.process.elytra.LegacyElytraBehavior; +import baritone.process.elytra.NetherPathfinderContext; +import baritone.process.elytra.NullElytraProcess; +import baritone.utils.BaritoneProcessHelper; +import baritone.utils.PathingCommandContext; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + + +import java.util.concurrent.*; +import java.util.function.Supplier; + +public class ElytraProcess extends BaritoneProcessHelper implements IBaritoneProcess, IElytraProcess { + public State state; + private Goal goal; + private LegacyElytraBehavior behavior; + + private ElytraProcess(Baritone baritone) { + super(baritone); + this.behavior = new LegacyElytraBehavior(baritone, this); + baritone.getGameEventHandler().registerEventListener(this.behavior); + } + + public static T create(final Baritone baritone) { + return (T) (NetherPathfinderContext.isSupported() + ? new ElytraProcess(baritone) + : new NullElytraProcess(baritone)); + } + + @Override + public boolean isActive() { + return behavior.destination != null; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (calcFailed) { + onLostControl(); + logDirect("Failed to get to jump off spot, canceling"); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + + if (ctx.player().isElytraFlying()) { + final BetterBlockPos last = behavior.pathManager.path.getLast(); + if (last != null && ctx.player().getDistanceSqToCenter(last) < (5 * 5)) { + this.state = State.LANDING; + } + } + + if (this.state == State.LANDING) { + final BetterBlockPos endPos = behavior.pathManager.path.getLast(); + if (ctx.player().isElytraFlying() && endPos != null) { + Vec3d from = ctx.player().getPositionVector(); + Vec3d to = new Vec3d(endPos.x, from.y, endPos.z); + Rotation rotation = RotationUtils.calcRotationFromVec3d(from, to, ctx.playerRotations()); + baritone.getLookBehavior().updateTarget(rotation, false); + } else { + this.onLostControl(); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } else if (ctx.player().isElytraFlying()) { + this.state = State.FLYING; + this.goal = null; + baritone.getInputOverrideHandler().clearAllKeys(); + behavior.tick(); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + + if (this.state == State.FLYING || this.state == State.START_FLYING) { + this.state = ctx.player().onGround && Baritone.settings().elytraAutoJump.value + ? State.LOCATE_JUMP + : State.START_FLYING; + } + + if (this.state == State.LOCATE_JUMP) { + if (this.goal == null) { + this.goal = new GoalYLevel(31); + } + final IPathExecutor executor = baritone.getPathingBehavior().getCurrent(); + if (executor != null && executor.getPath().getGoal() == this.goal) { + final IMovement fall = executor.getPath().movements().stream() + .filter(movement -> movement instanceof MovementFall) + .findFirst().orElse(null); + + if (fall != null) { + final BetterBlockPos from = new BetterBlockPos( + (fall.getSrc().x + fall.getDest().x) / 2, + (fall.getSrc().y + fall.getDest().y) / 2, + (fall.getSrc().z + fall.getDest().z) / 2 + ); + behavior.pathManager.pathToDestination(from).whenComplete((result, ex) -> { + if (!behavior.clearView(new Vec3d(from), behavior.pathManager.getPath().getVec(0), false)) { + onLostControl(); + // TODO: Get to higher ground and then look again + logDirect("Can't see start of path from jump spot, canceling"); + return; + } + if (ex == null) { + this.state = State.GET_TO_JUMP; + return; + } + onLostControl(); + }); + this.state = State.PAUSE; + } else { + onLostControl(); + logDirect("Jump off path didn't include a fall movement, canceling"); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + } + return new PathingCommandContext(this.goal, PathingCommandType.SET_GOAL_AND_PAUSE, new LegacyElytraBehavior.WalkOffCalculationContext(baritone)); + } + + // yucky + if (this.state == State.PAUSE) { + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + + if (this.state == State.GET_TO_JUMP) { + final IPathExecutor executor = baritone.getPathingBehavior().getCurrent(); + final boolean canStartFlying = ctx.player().fallDistance > 1.0f + && !isSafeToCancel + && executor != null + && executor.getPath().movements().get(executor.getPosition()) instanceof MovementFall; + + if (canStartFlying) { + this.state = State.START_FLYING; + } else { + return new PathingCommand(null, PathingCommandType.SET_GOAL_AND_PATH); + } + } + + if (this.state == State.START_FLYING) { + if (!isSafeToCancel) { + // owned + baritone.getPathingBehavior().secretInternalSegmentCancel(); + } + baritone.getInputOverrideHandler().clearAllKeys(); + if (ctx.player().fallDistance > 1.0f) { + baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); + } + } + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + + @Override + public boolean isTemporary() { + return false; + } + + @Override + public void onLostControl() { + this.goal = null; + this.state = State.START_FLYING; + behavior.cancel(); + } + + + + @Override + public String displayName0() { + final Supplier status = () -> { + switch (this.state) { + case LOCATE_JUMP: + return "Finding spot to jump off"; + case PAUSE: + return "Waiting for elytra path"; + case GET_TO_JUMP: + return "Walking to takeoff"; + case START_FLYING: + return "Begin flying"; + case FLYING: + return "Flying"; + case LANDING: + return "Landing"; + default: + return "Unknown"; + } + }; + return "Elytra - " + status.get(); + } + + @Override + public CompletableFuture resetContext() { + return behavior.resetContext(); + } + + @Override + public void repackChunks() { + behavior.repackChunks(); + } + + @Override + public void pathTo(BlockPos destination) { + behavior.pathTo(destination); + } + + @Override + public void cancel() { + behavior.cancel(); + } + + @Override + public boolean isLoaded() { + return true; + } + + @Override + public boolean isSafeToCancel() { + return behavior.isSafeToCancel(); + } + + public enum State { + LOCATE_JUMP, + VALIDATE_PATH, + PAUSE, + GET_TO_JUMP, + START_FLYING, + FLYING, + LANDING + } +} diff --git a/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java b/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java similarity index 98% rename from src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java rename to src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java index b81a6aed5..f9e700085 100644 --- a/src/main/java/baritone/behavior/elytra/BlockStateOctreeInterface.java +++ b/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.behavior.elytra; +package baritone.process.elytra; import dev.babbaj.pathfinder.NetherPathfinder; import dev.babbaj.pathfinder.Octree; diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java similarity index 84% rename from src/main/java/baritone/behavior/ElytraBehavior.java rename to src/main/java/baritone/process/elytra/LegacyElytraBehavior.java index 6e1765180..48066f3ea 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java @@ -15,33 +15,23 @@ * along with Baritone. If not, see . */ -package baritone.behavior; +package baritone.process.elytra; import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.Settings; -import baritone.api.behavior.IElytraBehavior; import baritone.api.behavior.look.IAimProcessor; import baritone.api.behavior.look.ITickableAimProcessor; import baritone.api.event.events.*; import baritone.api.event.events.type.EventState; -import baritone.api.pathing.goals.Goal; +import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.pathing.goals.GoalBlock; -import baritone.api.pathing.goals.GoalYLevel; -import baritone.api.pathing.movement.IMovement; -import baritone.api.pathing.path.IPathExecutor; -import baritone.api.process.IBaritoneProcess; -import baritone.api.process.PathingCommand; -import baritone.api.process.PathingCommandType; import baritone.api.utils.*; -import baritone.api.utils.input.Input; -import baritone.behavior.elytra.*; import baritone.pathing.movement.CalculationContext; -import baritone.pathing.movement.movements.MovementFall; +import baritone.process.ElytraProcess; import baritone.utils.BlockStateInterface; import baritone.utils.IRenderer; import baritone.utils.PathRenderer; -import baritone.utils.PathingCommandContext; import baritone.utils.accessor.IChunkProviderClient; import baritone.utils.accessor.IEntityFireworkRocket; import it.unimi.dsi.fastutil.floats.FloatArrayList; @@ -67,14 +57,16 @@ import java.util.*; import java.util.List; import java.util.concurrent.*; -import java.util.function.Supplier; import java.util.function.UnaryOperator; import static baritone.api.pathing.movement.ActionCosts.COST_INF; import static baritone.utils.BaritoneMath.fastCeil; import static baritone.utils.BaritoneMath.fastFloor; -public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { +public final class LegacyElytraBehavior implements AbstractGameEventListener, Helper { + private final Baritone baritone; + private final IPlayerContext ctx; + // Used exclusively for PathRenderer public List> clearLines; @@ -86,7 +78,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // :sunglasses: private NetherPathfinderContext context; private CompletableFuture forceResetContext; - private final PathManager pathManager; + public final PathManager pathManager; private final ElytraProcess process; /** @@ -111,7 +103,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private BlockStateInterface bsi; private BlockStateOctreeInterface boi; - private BlockPos destination; + public BlockPos destination; private final ExecutorService solverExecutor; private Future solver; @@ -124,24 +116,20 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private int invTickCountdown = 0; private final Queue invTransactionQueue = new LinkedList<>(); - private ElytraBehavior(Baritone baritone) { - super(baritone); + public LegacyElytraBehavior(Baritone baritone, ElytraProcess process) { + this.baritone = baritone; + this.ctx = baritone.getPlayerContext(); this.clearLines = new CopyOnWriteArrayList<>(); this.blockedLines = new CopyOnWriteArrayList<>(); this.pathManager = this.new PathManager(); - this.process = new ElytraProcess(); + this.process = process; this.solverExecutor = Executors.newSingleThreadExecutor(); this.nextTickBoostCounter = new int[2]; } - @Override - public void onLoad() { - baritone.getPathingControlManager().registerProcess(this.process); - } + public final class PathManager { - private final class PathManager { - - private NetherPath path; + public NetherPath path; private boolean completePath; private boolean recalculating; @@ -177,7 +165,7 @@ public CompletableFuture pathToDestination() { public CompletableFuture pathToDestination(final BlockPos from) { final long start = System.nanoTime(); - return this.path0(from, ElytraBehavior.this.destination, UnaryOperator.identity()) + return this.path0(from, LegacyElytraBehavior.this.destination, UnaryOperator.identity()) .thenRun(() -> { final double distance = this.path.get(0).distanceTo(this.path.get(this.path.size() - 1)); if (this.completePath) { @@ -231,7 +219,7 @@ public void pathNextSegment(final int afterIncl) { final List before = this.path.subList(0, afterIncl + 1); final long start = System.nanoTime(); - this.path0(this.path.get(afterIncl), ElytraBehavior.this.destination, segment -> segment.prepend(before.stream())) + this.path0(this.path.get(afterIncl), LegacyElytraBehavior.this.destination, segment -> segment.prepend(before.stream())) .thenRun(() -> { final int recompute = this.path.size() - before.size() - 1; final double distance = this.path.get(0).distanceTo(this.path.get(recompute)); @@ -282,7 +270,7 @@ public int getNear() { // mickey resigned private CompletableFuture path0(BlockPos src, BlockPos dst, UnaryOperator operator) { - return ElytraBehavior.this.context.pathFindAsync(src, dst) + return LegacyElytraBehavior.this.context.pathFindAsync(src, dst) .thenApply(UnpackedSegment::from) .thenApply(operator) .thenAcceptAsync(this::setPath, ctx.minecraft()::addScheduledTask); @@ -303,12 +291,12 @@ private void pathfindAroundObstacles() { return; } final BetterBlockPos rangeStart = path.get(rangeStartIncl); - if (!ElytraBehavior.this.passable(rangeStart.x, rangeStart.y, rangeStart.z, false)) { + if (!LegacyElytraBehavior.this.passable(rangeStart.x, rangeStart.y, rangeStart.z, false)) { // we're in a wall return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: } - if (ElytraBehavior.this.process.state != State.LANDING && this.ticksNearUnchanged > 100) { + if (LegacyElytraBehavior.this.process.state != ElytraProcess.State.LANDING && this.ticksNearUnchanged > 100) { this.pathRecalcSegment(rangeEndExcl - 1) .thenRun(() -> { logDirect("Recalculating segment, no progress in last 100 ticks"); @@ -318,7 +306,7 @@ private void pathfindAroundObstacles() { } for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { - if (!ElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { + if (!LegacyElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { // obstacle. where do we return to pathing? // find the next valid segment final BetterBlockPos blockage = this.path.get(i); @@ -461,7 +449,6 @@ public void onReceivePacket(PacketEvent event) { } } - @Override public void pathTo(BlockPos destination) { this.destination = destination; if (!Baritone.settings().elytraAutoJump.value || ctx.player().isElytraFlying()) { @@ -469,7 +456,6 @@ public void pathTo(BlockPos destination) { } } - @Override public void cancel() { this.destination = null; this.pathManager.clear(); @@ -483,7 +469,6 @@ public void cancel() { Arrays.fill(this.nextTickBoostCounter, 0); } - @Override public CompletableFuture resetContext() { if (this.forceResetContext == null) { this.forceResetContext = new CompletableFuture<>(); @@ -491,26 +476,18 @@ public CompletableFuture resetContext() { return this.forceResetContext; } - @Override public void repackChunks() { ((IChunkProviderClient) ctx.world().getChunkProvider()).loadedChunks().values() .forEach(this.context::queueForPacking); } - @Override public boolean isActive() { return baritone.getPathingControlManager().mostRecentInControl() .filter(process -> this.process == process).isPresent(); } - @Override - public boolean isLoaded() { - return true; - } - - @Override public boolean isSafeToCancel() { - return !this.isActive() || !(this.process.state == State.FLYING || this.process.state == State.START_FLYING); + return !this.isActive() || !(this.process.state == ElytraProcess.State.FLYING || this.process.state == ElytraProcess.State.START_FLYING); } @Override @@ -598,9 +575,9 @@ public void onTick(final TickEvent event) { } /** - * Called by {@link ElytraProcess#onTick(boolean, boolean)} when the process is in control and the player is flying + * Called by {@link baritone.process.ElytraProcess#onTick(boolean, boolean)} when the process is in control and the player is flying */ - private void tick() { + public void tick() { if (this.pathManager.getPath().isEmpty()) { return; } @@ -770,8 +747,8 @@ private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final bool ) { // Prioritize boosting fireworks over regular ones // TODO: Take the minimum boost time into account? - if (!baritone.getInventoryBehavior().throwaway(true, ElytraBehavior::isBoostingFireworks) && - !baritone.getInventoryBehavior().throwaway(true, ElytraBehavior::isFireworks)) { + if (!baritone.getInventoryBehavior().throwaway(true, LegacyElytraBehavior::isBoostingFireworks) && + !baritone.getInventoryBehavior().throwaway(true, LegacyElytraBehavior::isFireworks)) { logDirect("no fireworks"); return; } @@ -793,21 +770,21 @@ private final class SolverContext { public final IAimProcessor aimProcessor; public SolverContext(boolean async) { - this.path = ElytraBehavior.this.pathManager.getPath(); - this.playerNear = ElytraBehavior.this.pathManager.getNear(); - this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); - this.ignoreLava = ElytraBehavior.this.ctx.player().isInLava(); + this.path = LegacyElytraBehavior.this.pathManager.getPath(); + this.playerNear = LegacyElytraBehavior.this.pathManager.getNear(); + this.start = LegacyElytraBehavior.this.ctx.playerFeetAsVec(); + this.ignoreLava = LegacyElytraBehavior.this.ctx.player().isInLava(); final Integer fireworkTicksExisted; - if (async && ElytraBehavior.this.deployedFireworkLastTick) { - final int[] counter = ElytraBehavior.this.nextTickBoostCounter; + if (async && LegacyElytraBehavior.this.deployedFireworkLastTick) { + final int[] counter = LegacyElytraBehavior.this.nextTickBoostCounter; fireworkTicksExisted = counter[1] > counter[0] ? 0 : null; } else { - fireworkTicksExisted = ElytraBehavior.this.getAttachedFirework().map(e -> e.ticksExisted).orElse(null); + fireworkTicksExisted = LegacyElytraBehavior.this.getAttachedFirework().map(e -> e.ticksExisted).orElse(null); } - this.boost = new FireworkBoost(fireworkTicksExisted, ElytraBehavior.this.minimumBoostTicks); + this.boost = new FireworkBoost(fireworkTicksExisted, LegacyElytraBehavior.this.minimumBoostTicks); - ITickableAimProcessor aim = ElytraBehavior.this.baritone.getLookBehavior().getAimProcessor().fork(); + ITickableAimProcessor aim = LegacyElytraBehavior.this.baritone.getLookBehavior().getAimProcessor().fork(); if (async) { // async computation is done at the end of a tick, advance by 1 to prepare for the next tick aim.advance(1); @@ -1001,7 +978,7 @@ private boolean isHitboxClear(final SolverContext context, final Vec3d dest, fin return this.context.raytrace(8, src, dst, NetherPathfinderContext.Visibility.ALL); } - private boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { + public boolean clearView(Vec3d start, Vec3d dest, boolean ignoreLava) { final boolean clear; if (!ignoreLava) { // if start == dest then the cpp raytracer dies @@ -1303,7 +1280,7 @@ private void trySwapElytra() { ItemStack chest = ctx.player().inventory.armorInventory.get(2); if (chest.getItem() != Items.ELYTRA - || chest.getItem().getMaxDamage() - chest.getItemDamage() > Baritone.settings().elytraMinimumDurability.value) { + || chest.getItem().getMaxDamage() - chest.getItemDamage() > Baritone.settings().elytraMinimumDurability.value) { return; } @@ -1382,172 +1359,10 @@ private static boolean isOpenBlockSpace(final BlockStateInterface bsi, final int } } - private final class ElytraProcess implements IBaritoneProcess { - - private State state; - private Goal goal; - - @Override - public boolean isActive() { - return ElytraBehavior.this.destination != null; - } - - @Override - public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - if (calcFailed) { - onLostControl(); - logDirect("Failed to get to jump off spot, canceling"); - return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); - } - - if (ctx.player().isElytraFlying()) { - final BetterBlockPos last = ElytraBehavior.this.pathManager.path.getLast(); - if (last != null && ctx.player().getDistanceSqToCenter(last) < (5 * 5)) { - this.state = State.LANDING; - } - } - - if (this.state == State.LANDING) { - final BetterBlockPos endPos = ElytraBehavior.this.pathManager.path.getLast(); - if (ctx.player().isElytraFlying() && endPos != null) { - Vec3d from = ctx.player().getPositionVector(); - Vec3d to = new Vec3d(endPos.x, from.y, endPos.z); - Rotation rotation = RotationUtils.calcRotationFromVec3d(from, to, ctx.playerRotations()); - baritone.getLookBehavior().updateTarget(rotation, false); - } else { - this.onLostControl(); - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); - } - } else if (ctx.player().isElytraFlying()) { - this.state = State.FLYING; - this.goal = null; - baritone.getInputOverrideHandler().clearAllKeys(); - ElytraBehavior.this.tick(); - return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); - } - - if (this.state == State.FLYING || this.state == State.START_FLYING) { - this.state = ctx.player().onGround && Baritone.settings().elytraAutoJump.value - ? State.LOCATE_JUMP - : State.START_FLYING; - } - - if (this.state == State.LOCATE_JUMP) { - if (this.goal == null) { - this.goal = new GoalYLevel(31); - } - final IPathExecutor executor = baritone.getPathingBehavior().getCurrent(); - if (executor != null && executor.getPath().getGoal() == this.goal) { - final IMovement fall = executor.getPath().movements().stream() - .filter(movement -> movement instanceof MovementFall) - .findFirst().orElse(null); - - if (fall != null) { - final BetterBlockPos from = new BetterBlockPos( - (fall.getSrc().x + fall.getDest().x) / 2, - (fall.getSrc().y + fall.getDest().y) / 2, - (fall.getSrc().z + fall.getDest().z) / 2 - ); - ElytraBehavior.this.pathManager.pathToDestination(from).whenComplete((result, ex) -> { - if (!ElytraBehavior.this.clearView(new Vec3d(from), ElytraBehavior.this.pathManager.getPath().getVec(0), false)) { - onLostControl(); - // TODO: Get to higher ground and then look again - logDirect("Can't see start of path from jump spot, canceling"); - return; - } - if (ex == null) { - this.state = State.GET_TO_JUMP; - return; - } - onLostControl(); - }); - this.state = State.PAUSE; - } else { - onLostControl(); - logDirect("Jump off path didn't include a fall movement, canceling"); - return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); - } - } - return new PathingCommandContext(this.goal, PathingCommandType.SET_GOAL_AND_PAUSE, new WalkOffCalculationContext(baritone)); - } - - // yucky - if (this.state == State.PAUSE) { - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); - } - - if (this.state == State.GET_TO_JUMP) { - final IPathExecutor executor = baritone.getPathingBehavior().getCurrent(); - final boolean canStartFlying = ctx.player().fallDistance > 1.0f - && !isSafeToCancel - && executor != null - && executor.getPath().movements().get(executor.getPosition()) instanceof MovementFall; - - if (canStartFlying) { - this.state = State.START_FLYING; - } else { - return new PathingCommand(null, PathingCommandType.SET_GOAL_AND_PATH); - } - } - - if (this.state == State.START_FLYING) { - if (!isSafeToCancel) { - // owned - baritone.getPathingBehavior().secretInternalSegmentCancel(); - } - baritone.getInputOverrideHandler().clearAllKeys(); - if (ctx.player().fallDistance > 1.0f) { - baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); - } - } - return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); - } - - @Override - public boolean isTemporary() { - return false; - } - - @Override - public void onLostControl() { - this.goal = null; - this.state = State.START_FLYING; - ElytraBehavior.this.cancel(); - } - - @Override - public double priority() { - return 10; - } - - @Override - public String displayName0() { - final Supplier status = () -> { - switch (this.state) { - case LOCATE_JUMP: - return "Finding spot to jump off"; - case PAUSE: - return "Waiting for elytra path"; - case GET_TO_JUMP: - return "Walking to takeoff"; - case START_FLYING: - return "Begin flying"; - case FLYING: - return "Flying"; - case LANDING: - return "Landing"; - default: - return "Unknown"; - } - }; - return "Elytra - " + status.get(); - } - } - /** * Custom calculation context which makes the player fall into lava */ - private static final class WalkOffCalculationContext extends CalculationContext { + public static final class WalkOffCalculationContext extends CalculationContext { public WalkOffCalculationContext(IBaritone baritone) { super(baritone, true); @@ -1572,19 +1387,5 @@ public double placeBucketCost() { } } - private enum State { - LOCATE_JUMP, - VALIDATE_PATH, - PAUSE, - GET_TO_JUMP, - START_FLYING, - FLYING, - LANDING - } - public static T create(final Baritone baritone) { - return (T) (NetherPathfinderContext.isSupported() - ? new ElytraBehavior(baritone) - : new NullElytraBehavior(baritone)); - } } diff --git a/src/main/java/baritone/behavior/elytra/NetherPath.java b/src/main/java/baritone/process/elytra/NetherPath.java similarity index 98% rename from src/main/java/baritone/behavior/elytra/NetherPath.java rename to src/main/java/baritone/process/elytra/NetherPath.java index e746665c4..59cd447ce 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPath.java +++ b/src/main/java/baritone/process/elytra/NetherPath.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.behavior.elytra; +package baritone.process.elytra; import baritone.api.utils.BetterBlockPos; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java similarity index 98% rename from src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java rename to src/main/java/baritone/process/elytra/NetherPathfinderContext.java index ebe563374..46a840981 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.behavior.elytra; +package baritone.process.elytra; import baritone.api.event.events.BlockChangeEvent; import baritone.utils.accessor.IBitArray; @@ -38,6 +38,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; /** * @author Brady @@ -51,6 +52,7 @@ public final class NetherPathfinderContext { final long context; private final long seed; private final ExecutorService executor; + private final AtomicInteger packQueueSize = new AtomicInteger(); public NetherPathfinderContext(long seed) { this.context = NetherPathfinder.newContext(seed); diff --git a/src/main/java/baritone/behavior/elytra/NullElytraBehavior.java b/src/main/java/baritone/process/elytra/NullElytraProcess.java similarity index 72% rename from src/main/java/baritone/behavior/elytra/NullElytraBehavior.java rename to src/main/java/baritone/process/elytra/NullElytraProcess.java index b173d82b8..a84caf43f 100644 --- a/src/main/java/baritone/behavior/elytra/NullElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/NullElytraProcess.java @@ -15,11 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.behavior.elytra; +package baritone.process.elytra; import baritone.Baritone; -import baritone.api.behavior.IElytraBehavior; -import baritone.behavior.Behavior; +import baritone.api.process.IElytraProcess; +import baritone.api.process.PathingCommand; +import baritone.utils.BaritoneProcessHelper; import net.minecraft.util.math.BlockPos; import java.util.concurrent.CompletableFuture; @@ -27,9 +28,9 @@ /** * @author Brady */ -public final class NullElytraBehavior extends Behavior implements IElytraBehavior { +public final class NullElytraProcess extends BaritoneProcessHelper implements IElytraProcess { - public NullElytraBehavior(Baritone baritone) { + public NullElytraProcess(Baritone baritone) { super(baritone); } @@ -58,6 +59,21 @@ public boolean isActive() { return false; } + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + throw new UnsupportedOperationException("Called onTick on NullElytraProcess"); + } + + @Override + public void onLostControl() { + + } + + @Override + public String displayName0() { + return "NullElytraProcess"; + } + @Override public boolean isLoaded() { return false; diff --git a/src/main/java/baritone/behavior/elytra/PathCalculationException.java b/src/main/java/baritone/process/elytra/PathCalculationException.java similarity index 96% rename from src/main/java/baritone/behavior/elytra/PathCalculationException.java rename to src/main/java/baritone/process/elytra/PathCalculationException.java index 73ce82faf..7c9721487 100644 --- a/src/main/java/baritone/behavior/elytra/PathCalculationException.java +++ b/src/main/java/baritone/process/elytra/PathCalculationException.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.behavior.elytra; +package baritone.process.elytra; /** * @author Brady diff --git a/src/main/java/baritone/behavior/elytra/UnpackedSegment.java b/src/main/java/baritone/process/elytra/UnpackedSegment.java similarity index 98% rename from src/main/java/baritone/behavior/elytra/UnpackedSegment.java rename to src/main/java/baritone/process/elytra/UnpackedSegment.java index 0e0759625..02f07feb8 100644 --- a/src/main/java/baritone/behavior/elytra/UnpackedSegment.java +++ b/src/main/java/baritone/process/elytra/UnpackedSegment.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.behavior.elytra; +package baritone.process.elytra; import baritone.api.utils.BetterBlockPos; import dev.babbaj.pathfinder.PathSegment; From dbc0a46b103687f8480f0dc6be688c1ed09e6a0e Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 17 Jul 2023 00:34:48 -0400 Subject: [PATCH 811/935] call elytra event handlers from ElytraProcess --- .../baritone/api/process/IElytraProcess.java | 1 + .../baritone/behavior/PathingBehavior.java | 2 + .../java/baritone/process/ElytraProcess.java | 65 +++++++++++++++---- .../process/elytra/LegacyElytraBehavior.java | 26 ++++---- .../elytra/NetherPathfinderContext.java | 1 - 5 files changed, 66 insertions(+), 29 deletions(-) diff --git a/src/api/java/baritone/api/process/IElytraProcess.java b/src/api/java/baritone/api/process/IElytraProcess.java index 06c658f42..b1bd3d833 100644 --- a/src/api/java/baritone/api/process/IElytraProcess.java +++ b/src/api/java/baritone/api/process/IElytraProcess.java @@ -29,6 +29,7 @@ public interface IElytraProcess extends IBaritoneProcess { * * @return A {@link CompletableFuture} that is completed when the context is reset */ + @Deprecated CompletableFuture resetContext(); void repackChunks(); diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 0404921ae..9b15b88ba 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -33,6 +33,7 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; import baritone.pathing.path.PathExecutor; +import baritone.process.ElytraProcess; import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.pathing.Favoring; @@ -93,6 +94,7 @@ private void dispatchEvents() { @Override public void onTick(TickEvent event) { + ((ElytraProcess) baritone.getElytraProcess()).onTickBeforePathingBehavior(event); dispatchEvents(); if (event.getType() == TickEvent.Type.OUT) { secretInternalSegmentCancel(); diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 121b37b8a..11f4fdeaf 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -18,6 +18,8 @@ package baritone.process; import baritone.Baritone; +import baritone.api.event.events.*; +import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.pathing.movement.IMovement; @@ -43,7 +45,7 @@ import java.util.concurrent.*; import java.util.function.Supplier; -public class ElytraProcess extends BaritoneProcessHelper implements IBaritoneProcess, IElytraProcess { +public class ElytraProcess extends BaritoneProcessHelper implements IBaritoneProcess, IElytraProcess, AbstractGameEventListener { public State state; private Goal goal; private LegacyElytraBehavior behavior; @@ -51,7 +53,7 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro private ElytraProcess(Baritone baritone) { super(baritone); this.behavior = new LegacyElytraBehavior(baritone, this); - baritone.getGameEventHandler().registerEventListener(this.behavior); + baritone.getGameEventHandler().registerEventListener(this); } public static T create(final Baritone baritone) { @@ -62,7 +64,7 @@ public static T create(final Baritone baritone) { @Override public boolean isActive() { - return behavior.destination != null; + return behavior != null; } @Override @@ -176,16 +178,12 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - @Override - public boolean isTemporary() { - return false; - } - @Override public void onLostControl() { this.goal = null; - this.state = State.START_FLYING; - behavior.cancel(); + this.state = State.START_FLYING; // TODO: null state? + if (this.behavior != null) this.behavior.cancel(); + this.behavior = null; } @@ -220,17 +218,22 @@ public CompletableFuture resetContext() { @Override public void repackChunks() { - behavior.repackChunks(); + this.behavior.repackChunks(); } @Override public void pathTo(BlockPos destination) { - behavior.pathTo(destination); + this.behavior = new LegacyElytraBehavior(this.baritone, this); + if (ctx.world() != null) { + this.behavior.repackChunks(); + } + this.behavior.pathTo(destination); } @Override public void cancel() { - behavior.cancel(); + if (this.behavior != null) this.behavior.cancel(); + this.behavior = null; } @Override @@ -240,7 +243,7 @@ public boolean isLoaded() { @Override public boolean isSafeToCancel() { - return behavior.isSafeToCancel(); + return !this.isActive() || !(this.state == State.FLYING || this.state == State.START_FLYING); } public enum State { @@ -252,4 +255,38 @@ public enum State { FLYING, LANDING } + + @Override + public void onRenderPass(RenderEvent event) { + if (this.behavior != null) this.behavior.onRenderPass(event); + } + + @Override + public void onWorldEvent(WorldEvent event) { + if (this.behavior != null) this.behavior.onWorldEvent(event); + } + + @Override + public void onChunkEvent(ChunkEvent event) { + if (this.behavior != null) this.behavior.onChunkEvent(event); + } + + @Override + public void onBlockChange(BlockChangeEvent event) { + if (this.behavior != null) this.behavior.onBlockChange(event); + } + + @Override + public void onReceivePacket(PacketEvent event) { + if (this.behavior != null) this.behavior.onReceivePacket(event); + } + + public void onTickBeforePathingBehavior(final TickEvent event) { + if (this.behavior != null) this.behavior.onTick(event); + } + + @Override + public void onPostTick(TickEvent event) { + if (this.behavior != null) this.behavior.onPostTick(event); + } } diff --git a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java index 48066f3ea..6553f1ef8 100644 --- a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java @@ -24,7 +24,6 @@ import baritone.api.behavior.look.ITickableAimProcessor; import baritone.api.event.events.*; import baritone.api.event.events.type.EventState; -import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.*; import baritone.pathing.movement.CalculationContext; @@ -51,6 +50,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import java.awt.*; @@ -63,7 +63,7 @@ import static baritone.utils.BaritoneMath.fastCeil; import static baritone.utils.BaritoneMath.fastFloor; -public final class LegacyElytraBehavior implements AbstractGameEventListener, Helper { +public final class LegacyElytraBehavior implements Helper { private final Baritone baritone; private final IPlayerContext ctx; @@ -76,7 +76,7 @@ public final class LegacyElytraBehavior implements AbstractGameEventListener, H public List visiblePath; // :sunglasses: - private NetherPathfinderContext context; + private NetherPathfinderContext context; // TODO: make this final private CompletableFuture forceResetContext; public final PathManager pathManager; private final ElytraProcess process; @@ -125,6 +125,8 @@ public LegacyElytraBehavior(Baritone baritone, ElytraProcess process) { this.process = process; this.solverExecutor = Executors.newSingleThreadExecutor(); this.nextTickBoostCounter = new int[2]; + + this.context = new NetherPathfinderContext(Baritone.settings().elytraNetherSeed.value); } public final class PathManager { @@ -370,7 +372,6 @@ public void updatePlayerNear() { } } - @Override public void onRenderPass(RenderEvent event) { final Settings settings = Baritone.settings(); if (this.visiblePath != null) { @@ -409,7 +410,7 @@ public void onRenderPass(RenderEvent event) { } } - @Override + // TODO: move this logic to ElytraProcess public void onWorldEvent(WorldEvent event) { if (event.getWorld() != null) { if (event.getState() == EventState.PRE) { @@ -427,7 +428,6 @@ public void onWorldEvent(WorldEvent event) { } } - @Override public void onChunkEvent(ChunkEvent event) { if (event.isPostPopulate() && this.context != null) { final Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); @@ -435,12 +435,16 @@ public void onChunkEvent(ChunkEvent event) { } } - @Override + public void uploadRenderDistance(World world) { + ((IChunkProviderClient) world.getChunkProvider()).loadedChunks().forEach((l, chunk) -> { + this.context.queueForPacking(chunk); + }); + } + public void onBlockChange(BlockChangeEvent event) { this.context.queueBlockUpdate(event); } - @Override public void onReceivePacket(PacketEvent event) { if (event.getPacket() instanceof SPacketPlayerPosLook) { ctx.minecraft().addScheduledTask(() -> { @@ -486,11 +490,6 @@ public boolean isActive() { .filter(process -> this.process == process).isPresent(); } - public boolean isSafeToCancel() { - return !this.isActive() || !(this.process.state == ElytraProcess.State.FLYING || this.process.state == ElytraProcess.State.START_FLYING); - } - - @Override public void onTick(final TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; @@ -629,7 +628,6 @@ public void tick() { ); } - @Override public void onPostTick(TickEvent event) { if (event.getType() == TickEvent.Type.IN && this.solveNextTick) { // We're at the end of the tick, the player's position likely updated and the closest path node could've diff --git a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java index 46a840981..69ac41992 100644 --- a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java @@ -52,7 +52,6 @@ public final class NetherPathfinderContext { final long context; private final long seed; private final ExecutorService executor; - private final AtomicInteger packQueueSize = new AtomicInteger(); public NetherPathfinderContext(long seed) { this.context = NetherPathfinder.newContext(seed); From 4b5d629df6097a8b0735314f48fd57f61c939c9c Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 17 Jul 2023 17:21:06 -0400 Subject: [PATCH 812/935] fix off by one error (causing the last point to be stuck in terrain) --- build.gradle | 4 ++-- .../java/baritone/process/elytra/LegacyElytraBehavior.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index e44d68e04..04017277c 100755 --- a/build.gradle +++ b/build.gradle @@ -175,8 +175,8 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.34') - implementation 'dev.babbaj:nether-pathfinder:0.34' + launchImplementation('dev.babbaj:nether-pathfinder:0.39') + implementation 'dev.babbaj:nether-pathfinder:0.39' testImplementation 'junit:junit:4.12' } diff --git a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java index 6553f1ef8..f537f93bc 100644 --- a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java @@ -195,7 +195,7 @@ public CompletableFuture pathRecalcSegment(final int upToIncl) { } this.recalculating = true; - final List after = this.path.subList(upToIncl, this.path.size()); + final List after = this.path.subList(upToIncl + 1, this.path.size()); final boolean complete = this.completePath; return this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete)) @@ -288,6 +288,7 @@ private void pathfindAroundObstacles() { while (rangeEndExcl < path.size() && ctx.world().isBlockLoaded(path.get(rangeEndExcl), false)) { rangeEndExcl++; } + // rangeEndExcl now represents an index either not in the path, or just outside render distance if (rangeStartIncl >= rangeEndExcl) { // not loaded yet? return; From afe9359d3e781db9c12af778769658ce25e58ac5 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 17 Jul 2023 18:11:33 -0400 Subject: [PATCH 813/935] don't call onTick if we are pawsed --- .../java/baritone/behavior/PathingBehavior.java | 1 - src/main/java/baritone/process/ElytraProcess.java | 15 ++++++++++----- .../process/elytra/LegacyElytraBehavior.java | 6 +----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 9b15b88ba..3733a9144 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -94,7 +94,6 @@ private void dispatchEvents() { @Override public void onTick(TickEvent event) { - ((ElytraProcess) baritone.getElytraProcess()).onTickBeforePathingBehavior(event); dispatchEvents(); if (event.getType() == TickEvent.Type.OUT) { secretInternalSegmentCancel(); diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 11f4fdeaf..0f6763346 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -49,6 +49,7 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro public State state; private Goal goal; private LegacyElytraBehavior behavior; + private boolean skippedThisTick = false; private ElytraProcess(Baritone baritone) { super(baritone); @@ -69,6 +70,14 @@ public boolean isActive() { @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + IBaritoneProcess procLastTick = baritone.getPathingControlManager().mostRecentInControl().orElse(null); + // this is true if the pause process was running or any other processes that causes us to not tick + skippedThisTick = procLastTick != null && procLastTick.priority() > this.priority(); + if (skippedThisTick) { + return new PathingCommand(null, PathingCommandType.DEFER); + } + + this.behavior.onTick(); if (calcFailed) { onLostControl(); logDirect("Failed to get to jump off spot, canceling"); @@ -281,12 +290,8 @@ public void onReceivePacket(PacketEvent event) { if (this.behavior != null) this.behavior.onReceivePacket(event); } - public void onTickBeforePathingBehavior(final TickEvent event) { - if (this.behavior != null) this.behavior.onTick(event); - } - @Override public void onPostTick(TickEvent event) { - if (this.behavior != null) this.behavior.onPostTick(event); + if (this.behavior != null && !skippedThisTick) this.behavior.onPostTick(event); } } diff --git a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java index f537f93bc..2ce91a866 100644 --- a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java @@ -491,11 +491,7 @@ public boolean isActive() { .filter(process -> this.process == process).isPresent(); } - public void onTick(final TickEvent event) { - if (event.getType() == TickEvent.Type.OUT) { - return; - } - + public void onTick() { // Fetch the previous solution, regardless of if it's going to be used this.pendingSolution = null; if (this.solver != null) { From 2f0497756b1133e05a3db77037cb411eb6b4c48e Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 17 Jul 2023 18:16:09 -0400 Subject: [PATCH 814/935] simplify icky code --- src/main/java/baritone/process/ElytraProcess.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 0f6763346..cf21b8207 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -70,13 +70,6 @@ public boolean isActive() { @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - IBaritoneProcess procLastTick = baritone.getPathingControlManager().mostRecentInControl().orElse(null); - // this is true if the pause process was running or any other processes that causes us to not tick - skippedThisTick = procLastTick != null && procLastTick.priority() > this.priority(); - if (skippedThisTick) { - return new PathingCommand(null, PathingCommandType.DEFER); - } - this.behavior.onTick(); if (calcFailed) { onLostControl(); @@ -292,6 +285,7 @@ public void onReceivePacket(PacketEvent event) { @Override public void onPostTick(TickEvent event) { - if (this.behavior != null && !skippedThisTick) this.behavior.onPostTick(event); + IBaritoneProcess procThisTick = baritone.getPathingControlManager().mostRecentInControl().orElse(null); + if (this.behavior != null && procThisTick == this) this.behavior.onPostTick(event); } } From ff1b3e7c5f24daa0de448bf834019fda90bd62ae Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 17 Jul 2023 22:57:24 -0400 Subject: [PATCH 815/935] simplify management of elytra state --- build.gradle | 4 +- .../baritone/api/process/IElytraProcess.java | 19 ++-- .../command/defaults/ElytraCommand.java | 9 +- .../defaults/ExecutionControlCommands.java | 1 - .../command/defaults/ForceCancelCommand.java | 2 +- .../java/baritone/process/ElytraProcess.java | 90 ++++++++++--------- .../process/elytra/LegacyElytraBehavior.java | 74 ++------------- .../process/elytra/NullElytraProcess.java | 12 +-- 8 files changed, 74 insertions(+), 137 deletions(-) diff --git a/build.gradle b/build.gradle index 04017277c..accb7ca54 100755 --- a/build.gradle +++ b/build.gradle @@ -175,8 +175,8 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.39') - implementation 'dev.babbaj:nether-pathfinder:0.39' + launchImplementation('dev.babbaj:nether-pathfinder:0.41') + implementation 'dev.babbaj:nether-pathfinder:0.41' testImplementation 'junit:junit:4.12' } diff --git a/src/api/java/baritone/api/process/IElytraProcess.java b/src/api/java/baritone/api/process/IElytraProcess.java index b1bd3d833..639f69f0e 100644 --- a/src/api/java/baritone/api/process/IElytraProcess.java +++ b/src/api/java/baritone/api/process/IElytraProcess.java @@ -19,24 +19,21 @@ import net.minecraft.util.math.BlockPos; -import java.util.concurrent.CompletableFuture; - public interface IElytraProcess extends IBaritoneProcess { + void repackChunks(); + /** - * Marks the nether pathfinder context to be reset when it is safe to do so. Because this operation is not - * immediate, a {@link CompletableFuture} is returned that will complete after the context has been reset. - * - * @return A {@link CompletableFuture} that is completed when the context is reset + * @return Where it is currently flying to, null if not active */ - @Deprecated - CompletableFuture resetContext(); - - void repackChunks(); + BlockPos currentDestination(); void pathTo(BlockPos destination); - void cancel(); + /** + * Resets the state of the process but will maintain the same destination and will try to keep flying + */ + void resetState(); /** * @return {@code true} if the native library loaded and elytra is actually usable diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 05695d82b..418a6c7ac 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -85,10 +85,11 @@ public void execute(String label, IArgConsumer args) throws CommandException { final String action = args.getString(); switch (action) { case "reset": { - elytra.resetContext().whenComplete((result, ex) -> { - logDirect("Context reset, repacking chunks"); - elytra.repackChunks(); - }); + BlockPos destination = elytra.currentDestination(); + elytra.onLostControl(); + elytra.pathTo(destination); + elytra.repackChunks(); + logDirect("Reset state but still flying to same goal"); break; } case "repack": { diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java index b91014a67..6f6293ccd 100644 --- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java +++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java @@ -180,7 +180,6 @@ public void execute(String label, IArgConsumer args) throws CommandException { paused[0] = false; } baritone.getPathingBehavior().cancelEverything(); - baritone.getElytraProcess().cancel(); // TODO: this shouldnt be necessary logDirect("ok canceled"); } diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index d86cddd5e..b5abb6392 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -39,7 +39,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); pathingBehavior.cancelEverything(); pathingBehavior.forceCancel(); - baritone.getElytraProcess().cancel(); + baritone.getElytraProcess().onLostControl(); // is this necessary? logDirect("ok force canceled"); } diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index cf21b8207..793f2a807 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -19,6 +19,7 @@ import baritone.Baritone; import baritone.api.event.events.*; +import baritone.api.event.events.type.EventState; import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalYLevel; @@ -42,9 +43,6 @@ import net.minecraft.util.math.Vec3d; -import java.util.concurrent.*; -import java.util.function.Supplier; - public class ElytraProcess extends BaritoneProcessHelper implements IBaritoneProcess, IElytraProcess, AbstractGameEventListener { public State state; private Goal goal; @@ -63,14 +61,32 @@ public static T create(final Baritone baritone) { : new NullElytraProcess(baritone)); } + + @Override public boolean isActive() { return behavior != null; } + @Override + public void resetState() { + BlockPos destination = this.currentDestination(); + this.onLostControl(); + this.pathTo(destination); + this.repackChunks(); + } + @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - this.behavior.onTick(); + final long seedSetting = Baritone.settings().elytraNetherSeed.value; + if (this.behavior != null && seedSetting != behavior.context.getSeed()) { + logDirect("Nether seed changed, recalculating path"); + this.resetState(); + } + + if (this.behavior != null) { + this.behavior.onTick(); + } if (calcFailed) { onLostControl(); logDirect("Failed to get to jump off spot, canceling"); @@ -184,43 +200,23 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { public void onLostControl() { this.goal = null; this.state = State.START_FLYING; // TODO: null state? - if (this.behavior != null) this.behavior.cancel(); + if (this.behavior != null) this.behavior.destroy(); this.behavior = null; } - - @Override public String displayName0() { - final Supplier status = () -> { - switch (this.state) { - case LOCATE_JUMP: - return "Finding spot to jump off"; - case PAUSE: - return "Waiting for elytra path"; - case GET_TO_JUMP: - return "Walking to takeoff"; - case START_FLYING: - return "Begin flying"; - case FLYING: - return "Flying"; - case LANDING: - return "Landing"; - default: - return "Unknown"; - } - }; - return "Elytra - " + status.get(); + return "Elytra - " + this.state.description; } @Override - public CompletableFuture resetContext() { - return behavior.resetContext(); + public void repackChunks() { + this.behavior.repackChunks(); } @Override - public void repackChunks() { - this.behavior.repackChunks(); + public BlockPos currentDestination() { + return this.behavior != null ? this.behavior.destination : null; } @Override @@ -232,12 +228,6 @@ public void pathTo(BlockPos destination) { this.behavior.pathTo(destination); } - @Override - public void cancel() { - if (this.behavior != null) this.behavior.cancel(); - this.behavior = null; - } - @Override public boolean isLoaded() { return true; @@ -249,13 +239,19 @@ public boolean isSafeToCancel() { } public enum State { - LOCATE_JUMP, - VALIDATE_PATH, - PAUSE, - GET_TO_JUMP, - START_FLYING, - FLYING, - LANDING + LOCATE_JUMP("Finding spot to jump off"), + VALIDATE_PATH("Validating path"), + PAUSE("Waiting for elytra path"), + GET_TO_JUMP("Walking to takeoff"), + START_FLYING("Begin flying"), + FLYING("Flying"), + LANDING("Landing"); + + public String description; + + State(String desc) { + this.description = desc; + } } @Override @@ -265,7 +261,13 @@ public void onRenderPass(RenderEvent event) { @Override public void onWorldEvent(WorldEvent event) { - if (this.behavior != null) this.behavior.onWorldEvent(event); + if (event.getWorld() != null && event.getState() == EventState.POST) { + // Exiting the world, just destroy + if (this.behavior != null) { + this.behavior.destroy(); + this.behavior = new LegacyElytraBehavior(baritone, this); + } + } } @Override diff --git a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java index 2ce91a866..11e69e620 100644 --- a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java @@ -23,7 +23,6 @@ import baritone.api.behavior.look.IAimProcessor; import baritone.api.behavior.look.ITickableAimProcessor; import baritone.api.event.events.*; -import baritone.api.event.events.type.EventState; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.*; import baritone.pathing.movement.CalculationContext; @@ -50,7 +49,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import java.awt.*; @@ -76,8 +74,7 @@ public final class LegacyElytraBehavior implements Helper { public List visiblePath; // :sunglasses: - private NetherPathfinderContext context; // TODO: make this final - private CompletableFuture forceResetContext; + public final NetherPathfinderContext context; // TODO: make this final public final PathManager pathManager; private final ElytraProcess process; @@ -102,8 +99,8 @@ public final class LegacyElytraBehavior implements Helper { private final int[] nextTickBoostCounter; private BlockStateInterface bsi; - private BlockStateOctreeInterface boi; - public BlockPos destination; + private final BlockStateOctreeInterface boi; + public BlockPos destination; // TODO: make this final? private final ExecutorService solverExecutor; private Future solver; @@ -127,6 +124,7 @@ public LegacyElytraBehavior(Baritone baritone, ElytraProcess process) { this.nextTickBoostCounter = new int[2]; this.context = new NetherPathfinderContext(Baritone.settings().elytraNetherSeed.value); + this.boi = new BlockStateOctreeInterface(context); } public final class PathManager { @@ -411,24 +409,6 @@ public void onRenderPass(RenderEvent event) { } } - // TODO: move this logic to ElytraProcess - public void onWorldEvent(WorldEvent event) { - if (event.getWorld() != null) { - if (event.getState() == EventState.PRE) { - // Reset the context when it's safe to do so on the next game tick - this.resetContext(); - } - } else { - if (event.getState() == EventState.POST) { - // Exiting the world, just destroy and invalidate the context - if (this.context != null) { - this.context.destroy(); - this.context = null; - } - } - } - } - public void onChunkEvent(ChunkEvent event) { if (event.isPostPopulate() && this.context != null) { final Chunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); @@ -436,12 +416,6 @@ public void onChunkEvent(ChunkEvent event) { } } - public void uploadRenderDistance(World world) { - ((IChunkProviderClient) world.getChunkProvider()).loadedChunks().forEach((l, chunk) -> { - this.context.queueForPacking(chunk); - }); - } - public void onBlockChange(BlockChangeEvent event) { this.context.queueBlockUpdate(event); } @@ -461,24 +435,11 @@ public void pathTo(BlockPos destination) { } } - public void cancel() { - this.destination = null; - this.pathManager.clear(); - this.remainingFireworkTicks = 0; - this.remainingSetBackTicks = 0; + public void destroy() { if (this.solver != null) { this.solver.cancel(true); - this.solver = null; } - this.pendingSolution = null; - Arrays.fill(this.nextTickBoostCounter, 0); - } - - public CompletableFuture resetContext() { - if (this.forceResetContext == null) { - this.forceResetContext = new CompletableFuture<>(); - } - return this.forceResetContext; + this.context.destroy(); } public void repackChunks() { @@ -486,11 +447,6 @@ public void repackChunks() { .forEach(this.context::queueForPacking); } - public boolean isActive() { - return baritone.getPathingControlManager().mostRecentInControl() - .filter(process -> this.process == process).isPresent(); - } - public void onTick() { // Fetch the previous solution, regardless of if it's going to be used this.pendingSolution = null; @@ -504,23 +460,6 @@ public void onTick() { } } - // Setup/reset context - final long netherSeed = Baritone.settings().elytraNetherSeed.value; - if (this.context == null || this.context.getSeed() != netherSeed || this.forceResetContext != null) { - if (this.context != null) { - this.context.destroy(); - } - this.context = new NetherPathfinderContext(netherSeed); - if (this.forceResetContext != null) { - this.forceResetContext.complete(null); - this.forceResetContext = null; - } - if (this.context.getSeed() != netherSeed && this.isActive()) { - logDirect("Nether seed changed, recalculating path"); - this.pathManager.pathToDestination(); - } - } - tickInventoryTransactions(); // Certified mojang employee incident @@ -554,7 +493,6 @@ public void onTick() { // ctx AND context???? :DDD this.bsi = new BlockStateInterface(ctx); - this.boi = new BlockStateOctreeInterface(context); this.pathManager.tick(); final int playerNear = this.pathManager.getNear(); diff --git a/src/main/java/baritone/process/elytra/NullElytraProcess.java b/src/main/java/baritone/process/elytra/NullElytraProcess.java index a84caf43f..0c11ba618 100644 --- a/src/main/java/baritone/process/elytra/NullElytraProcess.java +++ b/src/main/java/baritone/process/elytra/NullElytraProcess.java @@ -35,13 +35,13 @@ public NullElytraProcess(Baritone baritone) { } @Override - public CompletableFuture resetContext() { - throw new UnsupportedOperationException("Called resetContext() on NullElytraBehavior"); + public void repackChunks() { + throw new UnsupportedOperationException("Called repackChunks() on NullElytraBehavior"); } @Override - public void repackChunks() { - throw new UnsupportedOperationException("Called repackChunks() on NullElytraBehavior"); + public BlockPos currentDestination() { + return null; } @Override @@ -50,8 +50,8 @@ public void pathTo(BlockPos destination) { } @Override - public void cancel() { - throw new UnsupportedOperationException("Called cancel() on NullElytraBehavior"); + public void resetState() { + } @Override From ccd80dfc8fec365185730eec928d68e89f988cd1 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 17 Jul 2023 23:02:35 -0400 Subject: [PATCH 816/935] that isn't necessary --- src/main/java/baritone/command/defaults/ForceCancelCommand.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java index b5abb6392..513d61bcb 100644 --- a/src/main/java/baritone/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -39,7 +39,6 @@ public void execute(String label, IArgConsumer args) throws CommandException { IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); pathingBehavior.cancelEverything(); pathingBehavior.forceCancel(); - baritone.getElytraProcess().onLostControl(); // is this necessary? logDirect("ok force canceled"); } From f4996137a33d6dc0dcecdd15395a823308d5e6ca Mon Sep 17 00:00:00 2001 From: Babbaj Date: Tue, 18 Jul 2023 00:02:23 -0400 Subject: [PATCH 817/935] minor code improvements --- src/main/java/baritone/Baritone.java | 1 - src/main/java/baritone/command/defaults/ElytraCommand.java | 5 +---- src/main/java/baritone/process/ElytraProcess.java | 3 +-- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index c6d31a3dd..0bd6a814a 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -125,7 +125,6 @@ public class Baritone implements IBaritone { this.farmProcess = this.registerProcess(FarmProcess::new); this.inventoryPauserProcess = this.registerProcess(InventoryPauserProcess::new); this.elytraProcess = this.registerProcess(ElytraProcess::create); - this.registerProcess(BackfillProcess::new); } diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 418a6c7ac..eea7f3f33 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -85,10 +85,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { final String action = args.getString(); switch (action) { case "reset": { - BlockPos destination = elytra.currentDestination(); - elytra.onLostControl(); - elytra.pathTo(destination); - elytra.repackChunks(); + elytra.resetState(); logDirect("Reset state but still flying to same goal"); break; } diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 793f2a807..6738cab55 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -47,7 +47,6 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro public State state; private Goal goal; private LegacyElytraBehavior behavior; - private boolean skippedThisTick = false; private ElytraProcess(Baritone baritone) { super(baritone); @@ -247,7 +246,7 @@ public enum State { FLYING("Flying"), LANDING("Landing"); - public String description; + public final String description; State(String desc) { this.description = desc; From ba78c48a7563f1b77ef3348ece08a57cf0f4e84f Mon Sep 17 00:00:00 2001 From: Babbaj Date: Tue, 18 Jul 2023 00:07:26 -0400 Subject: [PATCH 818/935] shutdown solverExecutor --- src/main/java/baritone/process/elytra/LegacyElytraBehavior.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java index 11e69e620..c7a164593 100644 --- a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java @@ -439,6 +439,7 @@ public void destroy() { if (this.solver != null) { this.solver.cancel(true); } + this.solverExecutor.shutdown(); this.context.destroy(); } From 38553b33248f0146ec18cb56bc62f3b8515ea46a Mon Sep 17 00:00:00 2001 From: Babbaj Date: Tue, 18 Jul 2023 14:52:09 -0400 Subject: [PATCH 819/935] behavior can't be null in onTick --- .../java/baritone/process/ElytraProcess.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 6738cab55..eb3c1bdd8 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -78,14 +78,13 @@ public void resetState() { @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { final long seedSetting = Baritone.settings().elytraNetherSeed.value; - if (this.behavior != null && seedSetting != behavior.context.getSeed()) { + if (seedSetting != behavior.context.getSeed()) { logDirect("Nether seed changed, recalculating path"); this.resetState(); } - if (this.behavior != null) { - this.behavior.onTick(); - } + this.behavior.onTick(); + if (calcFailed) { onLostControl(); logDirect("Failed to get to jump off spot, canceling"); @@ -199,8 +198,10 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { public void onLostControl() { this.goal = null; this.state = State.START_FLYING; // TODO: null state? - if (this.behavior != null) this.behavior.destroy(); - this.behavior = null; + if (this.behavior != null) { + this.behavior.destroy(); + this.behavior = null; + } } @Override @@ -210,7 +211,9 @@ public String displayName0() { @Override public void repackChunks() { - this.behavior.repackChunks(); + if (this.behavior != null) { + this.behavior.repackChunks(); + } } @Override @@ -260,12 +263,10 @@ public void onRenderPass(RenderEvent event) { @Override public void onWorldEvent(WorldEvent event) { - if (event.getWorld() != null && event.getState() == EventState.POST) { + if (event.getWorld() != null && event.getState() == EventState.POST && this.behavior != null) { // Exiting the world, just destroy - if (this.behavior != null) { - this.behavior.destroy(); - this.behavior = new LegacyElytraBehavior(baritone, this); - } + this.behavior.destroy(); + this.behavior = new LegacyElytraBehavior(baritone, this); } } From 0239a2cad435d5a04e94555ddee280e493527222 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Tue, 18 Jul 2023 15:36:29 -0400 Subject: [PATCH 820/935] notificationOnPathComplete and disconnectOnArrival --- src/main/java/baritone/process/ElytraProcess.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index eb3c1bdd8..e75fbeb81 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -94,6 +94,15 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (ctx.player().isElytraFlying()) { final BetterBlockPos last = behavior.pathManager.path.getLast(); if (last != null && ctx.player().getDistanceSqToCenter(last) < (5 * 5)) { + if (Baritone.settings().notificationOnPathComplete.value) { + logNotification("Pathing complete", false); + } + if (Baritone.settings().disconnectOnArrival.value) { + // don't be active when the user logs back in + this.onLostControl(); + ctx.world().sendQuittingDisconnectingPacket(); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } this.state = State.LANDING; } } From 6a9694b03a7fda9a4b0af7be9935a38be60a7760 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 18 Jul 2023 15:24:21 -0500 Subject: [PATCH 821/935] Manually specify some normals, fix GoalXZ rendering --- src/main/java/baritone/utils/IRenderer.java | 58 +++++++++++-------- .../java/baritone/utils/PathRenderer.java | 19 +++--- 2 files changed, 46 insertions(+), 31 deletions(-) diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 83436c408..e7a853859 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -89,9 +89,6 @@ static void endLines(boolean ignoredDepth) { } static void emitLine(PoseStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { - final Matrix4f matrix4f = stack.last().pose(); - final Matrix3f normal = stack.last().normal(); - final double dx = x2 - x1; final double dy = y2 - y1; final double dz = z2 - z1; @@ -101,34 +98,49 @@ static void emitLine(PoseStack stack, double x1, double y1, double z1, double x2 final float ny = (float) (dy * invMag); final float nz = (float) (dz * invMag); - buffer.vertex(matrix4f, (float) x1, (float) y1, (float) z1) - .color(color[0], color[1], color[2], color[3]) - .normal(normal, nx, ny, nz) - .endVertex(); - buffer.vertex(matrix4f, (float) x2, (float) y2, (float) z2) - .color(color[0], color[1], color[2], color[3]) - .normal(normal, nx, ny, nz) - .endVertex(); + emitLine(stack, x1, y1, z1, x2, y2, z2, nx, ny, nz); + } + + static void emitLine(PoseStack stack, + double x1, double y1, double z1, + double x2, double y2, double z2, + double nx, double ny, double nz) { + emitLine(stack, + (float) x1, (float) y1, (float) z1, + (float) x2, (float) y2, (float) z2, + (float) nx, (float) ny, (float) nz + ); + } + + static void emitLine(PoseStack stack, + float x1, float y1, float z1, + float x2, float y2, float z2, + float nx, float ny, float nz) { + final Matrix4f matrix4f = stack.last().pose(); + final Matrix3f normal = stack.last().normal(); + + buffer.vertex(matrix4f, x1, y1, z1).color(color[0], color[1], color[2], color[3]).normal(normal, nx, ny, nz).endVertex(); + buffer.vertex(matrix4f, x2, y2, z2).color(color[0], color[1], color[2], color[3]).normal(normal, nx, ny, nz).endVertex(); } static void emitAABB(PoseStack stack, AABB aabb) { AABB toDraw = aabb.move(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); // bottom - emitLine(stack, toDraw.minX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.minY, toDraw.minZ); - emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.minY, toDraw.maxZ); - emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.minY, toDraw.maxZ); - emitLine(stack, toDraw.minX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.minY, toDraw.minZ); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.minY, toDraw.minZ, 1.0, 0.0, 0.0); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.minY, toDraw.maxZ, 0.0, 0.0, 1.0); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.minY, toDraw.maxZ, -1.0, 0.0, 0.0); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.minY, toDraw.minZ, 0.0, 0.0, -1.0); // top - emitLine(stack, toDraw.minX, toDraw.maxY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.minZ); - emitLine(stack, toDraw.maxX, toDraw.maxY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.maxZ); - emitLine(stack, toDraw.maxX, toDraw.maxY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.maxZ); - emitLine(stack, toDraw.minX, toDraw.maxY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.minZ); + emitLine(stack, toDraw.minX, toDraw.maxY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.minZ, 1.0, 0.0, 0.0); + emitLine(stack, toDraw.maxX, toDraw.maxY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.maxZ, 0.0, 0.0, 1.0); + emitLine(stack, toDraw.maxX, toDraw.maxY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.maxZ, -1.0, 0.0, 0.0); + emitLine(stack, toDraw.minX, toDraw.maxY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.minZ, 0.0, 0.0, -1.0); // corners - emitLine(stack, toDraw.minX, toDraw.minY, toDraw.minZ, toDraw.minX, toDraw.maxY, toDraw.minZ); - emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.minZ); - emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.maxZ, toDraw.maxX, toDraw.maxY, toDraw.maxZ); - emitLine(stack, toDraw.minX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.maxZ); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.minZ, toDraw.minX, toDraw.maxY, toDraw.minZ, 0.0, 1.0, 0.0); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.minZ, 0.0, 1.0, 0.0); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.maxZ, toDraw.maxX, toDraw.maxY, toDraw.maxZ, 0.0, 1.0, 0.0); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.maxZ, 0.0, 1.0, 0.0); } static void emitAABB(PoseStack stack, AABB aabb, double expand) { diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index edb3bca5d..88c56bc96 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -340,10 +340,13 @@ private static void drawDankLitGoalBox(PoseStack stack, Color colorIn, double mi renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y1); renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); - IRenderer.emitLine(stack, minX, minY, minZ, minX, maxY, minZ); - IRenderer.emitLine(stack, maxX, minY, minZ, maxX, maxY, minZ); - IRenderer.emitLine(stack, maxX, minY, maxZ, maxX, maxY, maxZ); - IRenderer.emitLine(stack, minX, minY, maxZ, minX, maxY, maxZ); + for (double y = minY; y < maxY; y += 16) { + double max = Math.min(maxY, y + 16); + IRenderer.emitLine(stack, minX, y, minZ, minX, max, minZ, 0.0, 1.0, 0.0); + IRenderer.emitLine(stack, maxX, y, minZ, maxX, max, minZ, 0.0, 1.0, 0.0); + IRenderer.emitLine(stack, maxX, y, maxZ, maxX, max, maxZ, 0.0, 1.0, 0.0); + IRenderer.emitLine(stack, minX, y, maxZ, minX, max, maxZ, 0.0, 1.0, 0.0); + } if (setupRender) { IRenderer.endLines(settings.renderGoalIgnoreDepth.value); @@ -352,10 +355,10 @@ private static void drawDankLitGoalBox(PoseStack stack, Color colorIn, double mi private static void renderHorizontalQuad(PoseStack stack, double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { - IRenderer.emitLine(stack, minX, y, minZ, maxX, y, minZ); - IRenderer.emitLine(stack, maxX, y, minZ, maxX, y, maxZ); - IRenderer.emitLine(stack, maxX, y, maxZ, minX, y, maxZ); - IRenderer.emitLine(stack, minX, y, maxZ, minX, y, minZ); + IRenderer.emitLine(stack, minX, y, minZ, maxX, y, minZ, 1.0, 0.0, 0.0); + IRenderer.emitLine(stack, maxX, y, minZ, maxX, y, maxZ, 0.0, 0.0, 1.0); + IRenderer.emitLine(stack, maxX, y, maxZ, minX, y, maxZ, -1.0, 0.0, 0.0); + IRenderer.emitLine(stack, minX, y, maxZ, minX, y, minZ, 0.0, 0.0, -1.0); } } } From 218de1cb984678855009fd487b7c9b97452205fd Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 18 Jul 2023 16:48:00 -0500 Subject: [PATCH 822/935] Requested changes --- src/api/java/baritone/api/behavior/IBehavior.java | 8 +------- src/main/java/baritone/Baritone.java | 5 ----- src/main/java/baritone/process/ElytraProcess.java | 15 ++++++--------- .../process/elytra/LegacyElytraBehavior.java | 10 +++++----- 4 files changed, 12 insertions(+), 26 deletions(-) diff --git a/src/api/java/baritone/api/behavior/IBehavior.java b/src/api/java/baritone/api/behavior/IBehavior.java index aea44ed3e..811563b93 100644 --- a/src/api/java/baritone/api/behavior/IBehavior.java +++ b/src/api/java/baritone/api/behavior/IBehavior.java @@ -27,10 +27,4 @@ * @see IGameEventListener * @since 9/23/2018 */ -public interface IBehavior extends AbstractGameEventListener { - - /** - * Called after Baritone's initialization is complete - */ - default void onLoad() {} -} +public interface IBehavior extends AbstractGameEventListener {} diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 0bd6a814a..08bc6fa24 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -66,7 +66,6 @@ public class Baritone implements IBaritone { private final GameEventHandler gameEventHandler; - private final List behaviors; private final PathingBehavior pathingBehavior; private final LookBehavior lookBehavior; private final InventoryBehavior inventoryBehavior; @@ -93,7 +92,6 @@ public class Baritone implements IBaritone { Baritone(Minecraft mc) { this.mc = mc; - this.behaviors = new ArrayList<>(); this.gameEventHandler = new GameEventHandler(this); this.directory = mc.gameDir.toPath().resolve("baritone"); @@ -131,12 +129,9 @@ public class Baritone implements IBaritone { this.worldProvider = new WorldProvider(this); this.selectionManager = new SelectionManager(this); this.commandManager = new CommandManager(this); - - this.behaviors.forEach(IBehavior::onLoad); } public void registerBehavior(IBehavior behavior) { - this.behaviors.add(behavior); this.gameEventHandler.registerEventListener(behavior); } diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index e75fbeb81..edd0da2f6 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -42,15 +42,14 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; - public class ElytraProcess extends BaritoneProcessHelper implements IBaritoneProcess, IElytraProcess, AbstractGameEventListener { + public State state; private Goal goal; private LegacyElytraBehavior behavior; private ElytraProcess(Baritone baritone) { super(baritone); - this.behavior = new LegacyElytraBehavior(baritone, this); baritone.getGameEventHandler().registerEventListener(this); } @@ -60,11 +59,9 @@ public static T create(final Baritone baritone) { : new NullElytraProcess(baritone)); } - - @Override public boolean isActive() { - return behavior != null; + return this.behavior != null; } @Override @@ -78,7 +75,7 @@ public void resetState() { @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { final long seedSetting = Baritone.settings().elytraNetherSeed.value; - if (seedSetting != behavior.context.getSeed()) { + if (seedSetting != this.behavior.context.getSeed()) { logDirect("Nether seed changed, recalculating path"); this.resetState(); } @@ -232,11 +229,11 @@ public BlockPos currentDestination() { @Override public void pathTo(BlockPos destination) { - this.behavior = new LegacyElytraBehavior(this.baritone, this); + this.behavior = new LegacyElytraBehavior(this.baritone, this, destination); if (ctx.world() != null) { this.behavior.repackChunks(); } - this.behavior.pathTo(destination); + this.behavior.pathTo(); } @Override @@ -275,7 +272,7 @@ public void onWorldEvent(WorldEvent event) { if (event.getWorld() != null && event.getState() == EventState.POST && this.behavior != null) { // Exiting the world, just destroy this.behavior.destroy(); - this.behavior = new LegacyElytraBehavior(baritone, this); + this.behavior = null; } } diff --git a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java index c7a164593..825d3087d 100644 --- a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java @@ -74,7 +74,7 @@ public final class LegacyElytraBehavior implements Helper { public List visiblePath; // :sunglasses: - public final NetherPathfinderContext context; // TODO: make this final + public final NetherPathfinderContext context; public final PathManager pathManager; private final ElytraProcess process; @@ -100,7 +100,7 @@ public final class LegacyElytraBehavior implements Helper { private BlockStateInterface bsi; private final BlockStateOctreeInterface boi; - public BlockPos destination; // TODO: make this final? + public final BlockPos destination; private final ExecutorService solverExecutor; private Future solver; @@ -113,13 +113,14 @@ public final class LegacyElytraBehavior implements Helper { private int invTickCountdown = 0; private final Queue invTransactionQueue = new LinkedList<>(); - public LegacyElytraBehavior(Baritone baritone, ElytraProcess process) { + public LegacyElytraBehavior(Baritone baritone, ElytraProcess process, BlockPos destination) { this.baritone = baritone; this.ctx = baritone.getPlayerContext(); this.clearLines = new CopyOnWriteArrayList<>(); this.blockedLines = new CopyOnWriteArrayList<>(); this.pathManager = this.new PathManager(); this.process = process; + this.destination = destination; this.solverExecutor = Executors.newSingleThreadExecutor(); this.nextTickBoostCounter = new int[2]; @@ -428,8 +429,7 @@ public void onReceivePacket(PacketEvent event) { } } - public void pathTo(BlockPos destination) { - this.destination = destination; + public void pathTo() { if (!Baritone.settings().elytraAutoJump.value || ctx.player().isElytraFlying()) { this.pathManager.pathToDestination(); } From dfa838a6f94f3fc4090a30143ba24f0ec747f352 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 18 Jul 2023 19:19:08 -0500 Subject: [PATCH 823/935] Replace `Mth.fastInvSqrt` with `1.0 / Math.sqrt` --- src/main/java/baritone/utils/IRenderer.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index e7a853859..010346bd9 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -28,7 +28,6 @@ import net.minecraft.client.renderer.texture.TextureManager; import com.mojang.blaze3d.vertex.*; import com.mojang.math.Matrix4f; -import net.minecraft.util.Mth; import net.minecraft.world.phys.AABB; import java.awt.*; @@ -93,7 +92,7 @@ static void emitLine(PoseStack stack, double x1, double y1, double z1, double x2 final double dy = y2 - y1; final double dz = z2 - z1; - final double invMag = Mth.fastInvSqrt(dx * dx + dy * dy + dz * dz); + final double invMag = 1.0 / Math.sqrt(dx * dx + dy * dy + dz * dz); final float nx = (float) (dx * invMag); final float ny = (float) (dy * invMag); final float nz = (float) (dz * invMag); From 097e30850f4a577c01b668c7d4a35a6acc27ee54 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 18 Jul 2023 23:35:09 -0500 Subject: [PATCH 824/935] Move `WalkOffCalculationContext` into `ElytraProcess` --- .../java/baritone/process/ElytraProcess.java | 35 ++++++++++++++++++- .../process/elytra/LegacyElytraBehavior.java | 34 ------------------ 2 files changed, 34 insertions(+), 35 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index edd0da2f6..c56ab9896 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -18,6 +18,7 @@ package baritone.process; import baritone.Baritone; +import baritone.api.IBaritone; import baritone.api.event.events.*; import baritone.api.event.events.type.EventState; import baritone.api.event.listener.AbstractGameEventListener; @@ -33,15 +34,19 @@ import baritone.api.utils.Rotation; import baritone.api.utils.RotationUtils; import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.movements.MovementFall; import baritone.process.elytra.LegacyElytraBehavior; import baritone.process.elytra.NetherPathfinderContext; import baritone.process.elytra.NullElytraProcess; import baritone.utils.BaritoneProcessHelper; import baritone.utils.PathingCommandContext; +import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +import static baritone.api.pathing.movement.ActionCosts.COST_INF; + public class ElytraProcess extends BaritoneProcessHelper implements IBaritoneProcess, IElytraProcess, AbstractGameEventListener { public State state; @@ -165,7 +170,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } } - return new PathingCommandContext(this.goal, PathingCommandType.SET_GOAL_AND_PAUSE, new LegacyElytraBehavior.WalkOffCalculationContext(baritone)); + return new PathingCommandContext(this.goal, PathingCommandType.SET_GOAL_AND_PAUSE, new WalkOffCalculationContext(baritone)); } // yucky @@ -296,4 +301,32 @@ public void onPostTick(TickEvent event) { IBaritoneProcess procThisTick = baritone.getPathingControlManager().mostRecentInControl().orElse(null); if (this.behavior != null && procThisTick == this) this.behavior.onPostTick(event); } + + /** + * Custom calculation context which makes the player fall into lava + */ + public static final class WalkOffCalculationContext extends CalculationContext { + + public WalkOffCalculationContext(IBaritone baritone) { + super(baritone, true); + this.allowFallIntoLava = true; + this.minFallHeight = 8; + this.maxFallHeightNoWater = 10000; + } + + @Override + public double costOfPlacingAt(int x, int y, int z, IBlockState current) { + return COST_INF; + } + + @Override + public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { + return COST_INF; + } + + @Override + public double placeBucketCost() { + return COST_INF; + } + } } diff --git a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java index 825d3087d..c147442ce 100644 --- a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java @@ -18,14 +18,12 @@ package baritone.process.elytra; import baritone.Baritone; -import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.behavior.look.IAimProcessor; import baritone.api.behavior.look.ITickableAimProcessor; import baritone.api.event.events.*; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.*; -import baritone.pathing.movement.CalculationContext; import baritone.process.ElytraProcess; import baritone.utils.BlockStateInterface; import baritone.utils.IRenderer; @@ -36,7 +34,6 @@ import it.unimi.dsi.fastutil.floats.FloatIterator; import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap; import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityFireworkRocket; import net.minecraft.init.Items; import net.minecraft.inventory.ClickType; @@ -57,7 +54,6 @@ import java.util.concurrent.*; import java.util.function.UnaryOperator; -import static baritone.api.pathing.movement.ActionCosts.COST_INF; import static baritone.utils.BaritoneMath.fastCeil; import static baritone.utils.BaritoneMath.fastFloor; @@ -1292,34 +1288,4 @@ private static boolean isOpenBlockSpace(final BlockStateInterface bsi, final int return result; } } - - /** - * Custom calculation context which makes the player fall into lava - */ - public static final class WalkOffCalculationContext extends CalculationContext { - - public WalkOffCalculationContext(IBaritone baritone) { - super(baritone, true); - this.allowFallIntoLava = true; - this.minFallHeight = 8; - this.maxFallHeightNoWater = 10000; - } - - @Override - public double costOfPlacingAt(int x, int y, int z, IBlockState current) { - return COST_INF; - } - - @Override - public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { - return COST_INF; - } - - @Override - public double placeBucketCost() { - return COST_INF; - } - } - - } From 664375a678080df599c154e04b9cb05444782198 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sat, 22 Jul 2023 01:55:12 -0400 Subject: [PATCH 825/935] make elytra play nice with CustomGoalProcess --- .../baritone/api/process/IElytraProcess.java | 3 ++ .../command/defaults/ElytraCommand.java | 23 +++--------- .../baritone/process/CustomGoalProcess.java | 3 ++ .../java/baritone/process/ElytraProcess.java | 36 +++++++++++++++++-- .../process/elytra/NullElytraProcess.java | 6 ++++ .../baritone/utils/PathingControlManager.java | 14 +++++--- 6 files changed, 58 insertions(+), 27 deletions(-) diff --git a/src/api/java/baritone/api/process/IElytraProcess.java b/src/api/java/baritone/api/process/IElytraProcess.java index 639f69f0e..d0ca6f00c 100644 --- a/src/api/java/baritone/api/process/IElytraProcess.java +++ b/src/api/java/baritone/api/process/IElytraProcess.java @@ -17,6 +17,7 @@ package baritone.api.process; +import baritone.api.pathing.goals.Goal; import net.minecraft.util.math.BlockPos; public interface IElytraProcess extends IBaritoneProcess { @@ -30,6 +31,8 @@ public interface IElytraProcess extends IBaritoneProcess { void pathTo(BlockPos destination); + void pathTo(Goal destination); + /** * Resets the state of the process but will maintain the same destination and will try to keep flying */ diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index eea7f3f33..7f985ad55 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -59,26 +59,11 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (iGoal == null) { throw new CommandInvalidStateException("No goal has been set"); } - final int x; - final int y; - final int z; - if (iGoal instanceof GoalXZ) { - GoalXZ goal = (GoalXZ) iGoal; - x = goal.getX(); - y = 64; - z = goal.getZ(); - } else if (iGoal instanceof GoalBlock) { - GoalBlock goal = (GoalBlock) iGoal; - x = goal.x; - y = goal.y; - z = goal.z; - } else { - throw new CommandInvalidStateException("The goal must be a GoalXZ or GoalBlock"); + try { + elytra.pathTo(iGoal); + } catch (IllegalArgumentException ex) { + throw new CommandInvalidStateException(ex.getMessage()); } - if (y <= 0 || y >= 128) { - throw new CommandInvalidStateException("The y of the goal is not between 0 and 128"); - } - elytra.pathTo(new BlockPos(x, y, z)); return; } diff --git a/src/main/java/baritone/process/CustomGoalProcess.java b/src/main/java/baritone/process/CustomGoalProcess.java index 71d212b38..25c7a3d63 100644 --- a/src/main/java/baritone/process/CustomGoalProcess.java +++ b/src/main/java/baritone/process/CustomGoalProcess.java @@ -56,6 +56,9 @@ public CustomGoalProcess(Baritone baritone) { public void setGoal(Goal goal) { this.goal = goal; this.mostRecentGoal = goal; + if (baritone.getElytraProcess().isActive()) { + baritone.getElytraProcess().pathTo(goal); + } if (this.state == State.NONE) { this.state = State.GOAL_SET; } diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index c56ab9896..816658593 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -23,6 +23,8 @@ import baritone.api.event.events.type.EventState; import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.pathing.goals.GoalXZ; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.pathing.movement.IMovement; import baritone.api.pathing.path.IPathExecutor; @@ -48,7 +50,6 @@ import static baritone.api.pathing.movement.ActionCosts.COST_INF; public class ElytraProcess extends BaritoneProcessHelper implements IBaritoneProcess, IElytraProcess, AbstractGameEventListener { - public State state; private Goal goal; private LegacyElytraBehavior behavior; @@ -93,7 +94,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - if (ctx.player().isElytraFlying()) { + if (ctx.player().isElytraFlying() && this.state != State.LANDING) { final BetterBlockPos last = behavior.pathManager.path.getLast(); if (last != null && ctx.player().getDistanceSqToCenter(last) < (5 * 5)) { if (Baritone.settings().notificationOnPathComplete.value) { @@ -215,6 +216,11 @@ public void onLostControl() { } } + @Override + public double priority() { + return 0; // higher priority than CustomGoalProcess + } + @Override public String displayName0() { return "Elytra - " + this.state.description; @@ -234,6 +240,7 @@ public BlockPos currentDestination() { @Override public void pathTo(BlockPos destination) { + this.onLostControl(); this.behavior = new LegacyElytraBehavior(this.baritone, this, destination); if (ctx.world() != null) { this.behavior.repackChunks(); @@ -241,6 +248,30 @@ public void pathTo(BlockPos destination) { this.behavior.pathTo(); } + @Override + public void pathTo(Goal iGoal) { + final int x; + final int y; + final int z; + if (iGoal instanceof GoalXZ) { + GoalXZ goal = (GoalXZ) iGoal; + x = goal.getX(); + y = 64; + z = goal.getZ(); + } else if (iGoal instanceof GoalBlock) { + GoalBlock goal = (GoalBlock) iGoal; + x = goal.x; + y = goal.y; + z = goal.z; + } else { + throw new IllegalArgumentException("The goal must be a GoalXZ or GoalBlock"); + } + if (y <= 0 || y >= 128) { + throw new IllegalArgumentException("The y of the goal is not between 0 and 128"); + } + this.pathTo(new BlockPos(x, y, z)); + } + @Override public boolean isLoaded() { return true; @@ -253,7 +284,6 @@ public boolean isSafeToCancel() { public enum State { LOCATE_JUMP("Finding spot to jump off"), - VALIDATE_PATH("Validating path"), PAUSE("Waiting for elytra path"), GET_TO_JUMP("Walking to takeoff"), START_FLYING("Begin flying"), diff --git a/src/main/java/baritone/process/elytra/NullElytraProcess.java b/src/main/java/baritone/process/elytra/NullElytraProcess.java index 0c11ba618..cd944cc7c 100644 --- a/src/main/java/baritone/process/elytra/NullElytraProcess.java +++ b/src/main/java/baritone/process/elytra/NullElytraProcess.java @@ -18,6 +18,7 @@ package baritone.process.elytra; import baritone.Baritone; +import baritone.api.pathing.goals.Goal; import baritone.api.process.IElytraProcess; import baritone.api.process.PathingCommand; import baritone.utils.BaritoneProcessHelper; @@ -49,6 +50,11 @@ public void pathTo(BlockPos destination) { throw new UnsupportedOperationException("Called pathTo() on NullElytraBehavior"); } + @Override + public void pathTo(Goal destination) { + throw new UnsupportedOperationException("Called pathTo() on NullElytraBehavior"); + } + @Override public void resetState() { diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index a174c842b..2ae4b00ce 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -27,6 +27,8 @@ import baritone.api.process.PathingCommandType; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; +import baritone.process.CustomGoalProcess; +import baritone.process.ElytraProcess; import net.minecraft.util.math.BlockPos; import java.util.*; @@ -109,10 +111,6 @@ public void preTick() { p.cancelSegmentIfSafe(); break; case FORCE_REVALIDATE_GOAL_AND_PATH: - if (!p.isPathing() && !p.getInProgress().isPresent()) { - p.secretInternalSetGoalAndPath(command); - } - break; case REVALIDATE_GOAL_AND_PATH: if (!p.isPathing() && !p.getInProgress().isPresent()) { p.secretInternalSetGoalAndPath(command); @@ -209,7 +207,13 @@ public PathingCommand executeProcesses() { } else if (exec.commandType != PathingCommandType.DEFER) { inControlThisTick = proc; if (!proc.isTemporary()) { - iterator.forEachRemaining(IBaritoneProcess::onLostControl); + iterator.forEachRemaining(it -> { + // TODO: find a better way to make these behave well together + if (proc instanceof CustomGoalProcess && it instanceof ElytraProcess) { + return; + } + it.onLostControl(); + }); } return exec; } From 7f9e50bbe27d6e80da0e7481e854304d0e48e885 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sat, 22 Jul 2023 19:12:53 -0400 Subject: [PATCH 826/935] initial safe landing impl --- .../command/defaults/ElytraCommand.java | 3 - .../java/baritone/process/ElytraProcess.java | 64 ++++++++++++++++++- 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index eea7f3f33..3232ecb03 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -23,11 +23,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalBlock; -import baritone.api.pathing.goals.GoalXZ; import baritone.api.process.ICustomGoalProcess; import baritone.api.process.IElytraProcess; -import net.minecraft.util.math.BlockPos; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index c56ab9896..ff082fada 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -42,14 +42,21 @@ import baritone.utils.BaritoneProcessHelper; import baritone.utils.PathingCommandContext; import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Queue; +import java.util.Set; + import static baritone.api.pathing.movement.ActionCosts.COST_INF; public class ElytraProcess extends BaritoneProcessHelper implements IBaritoneProcess, IElytraProcess, AbstractGameEventListener { public State state; + private boolean goingToLandingSpot; private Goal goal; private LegacyElytraBehavior behavior; @@ -93,8 +100,8 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - if (ctx.player().isElytraFlying()) { - final BetterBlockPos last = behavior.pathManager.path.getLast(); + if (ctx.player().isElytraFlying() && this.state != State.LANDING) { + final BetterBlockPos last = this.behavior.pathManager.path.getLast(); if (last != null && ctx.player().getDistanceSqToCenter(last) < (5 * 5)) { if (Baritone.settings().notificationOnPathComplete.value) { logNotification("Pathing complete", false); @@ -105,6 +112,14 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { ctx.world().sendQuittingDisconnectingPacket(); return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } + if (!goingToLandingSpot) { + BlockPos landingSpot = findSafeLandingSpot(); + if (landingSpot != null) { + this.pathTo(landingSpot); + this.goingToLandingSpot = true; + return this.onTick(calcFailed, isSafeToCancel); + } + } this.state = State.LANDING; } } @@ -208,6 +223,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { @Override public void onLostControl() { this.goal = null; + this.goingToLandingSpot = false; this.state = State.START_FLYING; // TODO: null state? if (this.behavior != null) { this.behavior.destroy(); @@ -234,6 +250,7 @@ public BlockPos currentDestination() { @Override public void pathTo(BlockPos destination) { + this.onLostControl(); this.behavior = new LegacyElytraBehavior(this.baritone, this, destination); if (ctx.world() != null) { this.behavior.repackChunks(); @@ -253,7 +270,6 @@ public boolean isSafeToCancel() { public enum State { LOCATE_JUMP("Finding spot to jump off"), - VALIDATE_PATH("Validating path"), PAUSE("Waiting for elytra path"), GET_TO_JUMP("Walking to takeoff"), START_FLYING("Begin flying"), @@ -329,4 +345,46 @@ public double placeBucketCost() { return COST_INF; } } + + private static boolean isInBounds(BlockPos pos) { + return pos.getY() >= 0 && pos.getY() < 128; + } + + private boolean isSafeLandingSpot(BlockPos pos) { + BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(pos); + while (mut.getY() >= 0) { + IBlockState state = ctx.world().getBlockState(mut); + if (state.getMaterial().isLiquid()) { // lava + return false; + } + if (state.getMaterial().blocksMovement() && state.getBlock() != Blocks.MAGMA) { + return true; + } + mut.setPos(mut.getX(), mut.getY() - 1, mut.getZ()); + } + return false; // void + } + + private BlockPos findSafeLandingSpot() { + final BlockPos start = new BlockPos(ctx.playerFeet()); + Queue queue = new LinkedList<>(); + Set visited = new HashSet<>(); + queue.add(start); + + while (!queue.isEmpty()) { + BlockPos pos = queue.poll(); + if (ctx.world().isBlockLoaded(pos) && isInBounds(pos) && ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) { + if (isSafeLandingSpot(pos)) { + return pos; + } + if (visited.add(pos.north())) queue.add(pos.north()); + if (visited.add(pos.east())) queue.add(pos.east()); + if (visited.add(pos.south())) queue.add(pos.south()); + if (visited.add(pos.west())) queue.add(pos.west()); + if (visited.add(pos.up())) queue.add(pos.up()); + if (visited.add(pos.down())) queue.add(pos.down()); + } + } + return null; + } } From c9aa1658b2ae7a8fc5f9cb423ec13da7147ff5c6 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sat, 22 Jul 2023 20:24:36 -0400 Subject: [PATCH 827/935] improvements/fixes --- .../java/baritone/process/ElytraProcess.java | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index ff082fada..ccab3e2cd 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -57,6 +57,7 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro public State state; private boolean goingToLandingSpot; + private BetterBlockPos landingSpot; private Goal goal; private LegacyElytraBehavior behavior; @@ -102,7 +103,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (ctx.player().isElytraFlying() && this.state != State.LANDING) { final BetterBlockPos last = this.behavior.pathManager.path.getLast(); - if (last != null && ctx.player().getDistanceSqToCenter(last) < (5 * 5)) { + if (last != null && ctx.player().getDistanceSqToCenter(last) < 1) { if (Baritone.settings().notificationOnPathComplete.value) { logNotification("Pathing complete", false); } @@ -113,22 +114,25 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } if (!goingToLandingSpot) { - BlockPos landingSpot = findSafeLandingSpot(); + BetterBlockPos landingSpot = findSafeLandingSpot(); if (landingSpot != null) { this.pathTo(landingSpot); + this.landingSpot = landingSpot; this.goingToLandingSpot = true; return this.onTick(calcFailed, isSafeToCancel); } + // don't spam call findLandingSpot if it somehow fails (it's slow) + this.goingToLandingSpot = true; } this.state = State.LANDING; } } if (this.state == State.LANDING) { - final BetterBlockPos endPos = behavior.pathManager.path.getLast(); + final BetterBlockPos endPos = this.landingSpot != null ? this.landingSpot : behavior.pathManager.path.getLast(); if (ctx.player().isElytraFlying() && endPos != null) { Vec3d from = ctx.player().getPositionVector(); - Vec3d to = new Vec3d(endPos.x, from.y, endPos.z); + Vec3d to = new Vec3d(((double) endPos.x) + 0.5, from.y, ((double) endPos.z) + 0.5); Rotation rotation = RotationUtils.calcRotationFromVec3d(from, to, ctx.playerRotations()); baritone.getLookBehavior().updateTarget(rotation, false); } else { @@ -350,6 +354,18 @@ private static boolean isInBounds(BlockPos pos) { return pos.getY() >= 0 && pos.getY() < 128; } + private boolean isAtEdge(BlockPos pos) { + return ctx.world().isAirBlock(pos.north()) + || ctx.world().isAirBlock(pos.south()) + || ctx.world().isAirBlock(pos.east()) + || ctx.world().isAirBlock(pos.west()) + // corners + || ctx.world().isAirBlock(pos.north().west()) + || ctx.world().isAirBlock(pos.north().east()) + || ctx.world().isAirBlock(pos.south().west()) + || ctx.world().isAirBlock(pos.south().east()); + } + private boolean isSafeLandingSpot(BlockPos pos) { BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(pos); while (mut.getY() >= 0) { @@ -358,21 +374,21 @@ private boolean isSafeLandingSpot(BlockPos pos) { return false; } if (state.getMaterial().blocksMovement() && state.getBlock() != Blocks.MAGMA) { - return true; + return !isAtEdge(mut); } mut.setPos(mut.getX(), mut.getY() - 1, mut.getZ()); } return false; // void } - private BlockPos findSafeLandingSpot() { - final BlockPos start = new BlockPos(ctx.playerFeet()); - Queue queue = new LinkedList<>(); - Set visited = new HashSet<>(); + private BetterBlockPos findSafeLandingSpot() { + final BetterBlockPos start = ctx.playerFeet(); + Queue queue = new LinkedList<>(); + Set visited = new HashSet<>(); queue.add(start); while (!queue.isEmpty()) { - BlockPos pos = queue.poll(); + BetterBlockPos pos = queue.poll(); if (ctx.world().isBlockLoaded(pos) && isInBounds(pos) && ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) { if (isSafeLandingSpot(pos)) { return pos; From 58723a33cabc5f5a0d0aaa7454441d11f3a743b8 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 00:05:11 -0400 Subject: [PATCH 828/935] hate cherry pick now --- src/main/java/baritone/command/defaults/ElytraCommand.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 3232ecb03..eea7f3f33 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -23,8 +23,11 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.pathing.goals.GoalXZ; import baritone.api.process.ICustomGoalProcess; import baritone.api.process.IElytraProcess; +import net.minecraft.util.math.BlockPos; import java.util.Arrays; import java.util.List; From 9e784435956010f986f1bc337c0be2ec3549881f Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 00:53:26 -0400 Subject: [PATCH 829/935] resolve comment --- src/main/java/baritone/process/ElytraProcess.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index ccab3e2cd..490c7e2e2 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -370,10 +370,10 @@ private boolean isSafeLandingSpot(BlockPos pos) { BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(pos); while (mut.getY() >= 0) { IBlockState state = ctx.world().getBlockState(mut); - if (state.getMaterial().isLiquid()) { // lava + if (state.getMaterial().isLiquid() || state.getBlock() != Blocks.MAGMA) { // lava return false; } - if (state.getMaterial().blocksMovement() && state.getBlock() != Blocks.MAGMA) { + if (state.getMaterial().blocksMovement()) { return !isAtEdge(mut); } mut.setPos(mut.getX(), mut.getY() - 1, mut.getZ()); From 985148b49aa7d58c0fce181e1fb16494c987083b Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 01:00:23 -0400 Subject: [PATCH 830/935] check for specific blocks to land on and anything non air is lava --- src/main/java/baritone/process/ElytraProcess.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 490c7e2e2..4b089ec49 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -41,6 +41,8 @@ import baritone.process.elytra.NullElytraProcess; import baritone.utils.BaritoneProcessHelper; import baritone.utils.PathingCommandContext; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; @@ -370,12 +372,13 @@ private boolean isSafeLandingSpot(BlockPos pos) { BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(pos); while (mut.getY() >= 0) { IBlockState state = ctx.world().getBlockState(mut); - if (state.getMaterial().isLiquid() || state.getBlock() != Blocks.MAGMA) { // lava + Block block = state.getBlock(); + + if (block == Blocks.NETHERRACK || block == Blocks.GRAVEL || state.getMaterial() == Material.ROCK) { + return true; + } else if (block != Blocks.AIR) { return false; } - if (state.getMaterial().blocksMovement()) { - return !isAtEdge(mut); - } mut.setPos(mut.getX(), mut.getY() - 1, mut.getZ()); } return false; // void From bf63ffbc1dd0d9fe1d02d9667494e8de17cc7802 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 01:01:59 -0400 Subject: [PATCH 831/935] cringe fence hater :sob: --- src/main/java/baritone/process/ElytraProcess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 4b089ec49..9fdcdcc75 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -374,7 +374,7 @@ private boolean isSafeLandingSpot(BlockPos pos) { IBlockState state = ctx.world().getBlockState(mut); Block block = state.getBlock(); - if (block == Blocks.NETHERRACK || block == Blocks.GRAVEL || state.getMaterial() == Material.ROCK) { + if (block == Blocks.NETHERRACK || block == Blocks.GRAVEL || block == Blocks.NETHER_BRICK) { return true; } else if (block != Blocks.AIR) { return false; From 9bfa2025d5327aaae0903fedb115ef93fb7e387f Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 01:14:19 -0400 Subject: [PATCH 832/935] memoize isSafeLandingSPot --- src/main/java/baritone/process/ElytraProcess.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 9fdcdcc75..b4ce3623a 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -41,6 +41,7 @@ import baritone.process.elytra.NullElytraProcess; import baritone.utils.BaritoneProcessHelper; import baritone.utils.PathingCommandContext; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -368,9 +369,11 @@ private boolean isAtEdge(BlockPos pos) { || ctx.world().isAirBlock(pos.south().east()); } - private boolean isSafeLandingSpot(BlockPos pos) { + private boolean isSafeLandingSpot(BlockPos pos, LongOpenHashSet checkedSpots) { BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(pos); + checkedSpots.add(mut.toLong()); while (mut.getY() >= 0) { + IBlockState state = ctx.world().getBlockState(mut); Block block = state.getBlock(); @@ -380,6 +383,9 @@ private boolean isSafeLandingSpot(BlockPos pos) { return false; } mut.setPos(mut.getX(), mut.getY() - 1, mut.getZ()); + if (checkedSpots.contains(mut.toLong())) { + return false; + } } return false; // void } @@ -388,14 +394,16 @@ private BetterBlockPos findSafeLandingSpot() { final BetterBlockPos start = ctx.playerFeet(); Queue queue = new LinkedList<>(); Set visited = new HashSet<>(); + LongOpenHashSet checkedPositions = new LongOpenHashSet(); queue.add(start); while (!queue.isEmpty()) { BetterBlockPos pos = queue.poll(); if (ctx.world().isBlockLoaded(pos) && isInBounds(pos) && ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) { - if (isSafeLandingSpot(pos)) { + if (isSafeLandingSpot(pos, checkedPositions)) { return pos; } + checkedPositions.add(pos.toLong()); if (visited.add(pos.north())) queue.add(pos.north()); if (visited.add(pos.east())) queue.add(pos.east()); if (visited.add(pos.south())) queue.add(pos.south()); From c0ead0147a9741b10ae869d9e1173cd2485ee3b1 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 01:38:07 -0400 Subject: [PATCH 833/935] use priority queue to bias upwards --- src/main/java/baritone/process/ElytraProcess.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index b4ce3623a..135221967 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -48,11 +48,9 @@ import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3i; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.Queue; -import java.util.Set; +import java.util.*; import static baritone.api.pathing.movement.ActionCosts.COST_INF; @@ -373,12 +371,11 @@ private boolean isSafeLandingSpot(BlockPos pos, LongOpenHashSet checkedSpots) { BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(pos); checkedSpots.add(mut.toLong()); while (mut.getY() >= 0) { - IBlockState state = ctx.world().getBlockState(mut); Block block = state.getBlock(); if (block == Blocks.NETHERRACK || block == Blocks.GRAVEL || block == Blocks.NETHER_BRICK) { - return true; + return !isAtEdge(mut); } else if (block != Blocks.AIR) { return false; } @@ -392,7 +389,8 @@ private boolean isSafeLandingSpot(BlockPos pos, LongOpenHashSet checkedSpots) { private BetterBlockPos findSafeLandingSpot() { final BetterBlockPos start = ctx.playerFeet(); - Queue queue = new LinkedList<>(); + Queue queue = new PriorityQueue<>(Comparator.comparingInt(Vec3i::getY).reversed()); + //Queue queue = new LinkedList<>(); Set visited = new HashSet<>(); LongOpenHashSet checkedPositions = new LongOpenHashSet(); queue.add(start); From eec85b20be04b0ccd20d3d75656b4ded11625d2e Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 01:45:39 -0400 Subject: [PATCH 834/935] fix bias in comparator --- src/main/java/baritone/process/ElytraProcess.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 135221967..d0ec7dd6b 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -389,8 +389,7 @@ private boolean isSafeLandingSpot(BlockPos pos, LongOpenHashSet checkedSpots) { private BetterBlockPos findSafeLandingSpot() { final BetterBlockPos start = ctx.playerFeet(); - Queue queue = new PriorityQueue<>(Comparator.comparingInt(Vec3i::getY).reversed()); - //Queue queue = new LinkedList<>(); + Queue queue = new PriorityQueue<>(Comparator.comparingInt(pos -> (pos.x-start.x)*(pos.x-start.x) + (pos.z-start.z)*(pos.z-start.z)).thenComparingInt(pos -> -pos.y)); Set visited = new HashSet<>(); LongOpenHashSet checkedPositions = new LongOpenHashSet(); queue.add(start); From b81d712a33eef0e2a663b11eb17c73b01452c84c Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 01:57:27 -0400 Subject: [PATCH 835/935] higher priority is good enough lol --- src/main/java/baritone/utils/PathingControlManager.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index 2ae4b00ce..6123412f7 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -207,13 +207,7 @@ public PathingCommand executeProcesses() { } else if (exec.commandType != PathingCommandType.DEFER) { inControlThisTick = proc; if (!proc.isTemporary()) { - iterator.forEachRemaining(it -> { - // TODO: find a better way to make these behave well together - if (proc instanceof CustomGoalProcess && it instanceof ElytraProcess) { - return; - } - it.onLostControl(); - }); + iterator.forEachRemaining(IBaritoneProcess::onLostControl); } return exec; } From 9707dd7ce83526207d592b1620911896cc93e413 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 22 Jul 2023 23:02:29 -0700 Subject: [PATCH 836/935] redo checkedpositions given y descending iteration order --- src/main/java/baritone/process/ElytraProcess.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index d0ec7dd6b..873dd5e48 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -43,12 +43,10 @@ import baritone.utils.PathingCommandContext; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import net.minecraft.block.Block; -import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; import java.util.*; @@ -369,8 +367,11 @@ private boolean isAtEdge(BlockPos pos) { private boolean isSafeLandingSpot(BlockPos pos, LongOpenHashSet checkedSpots) { BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(pos); - checkedSpots.add(mut.toLong()); while (mut.getY() >= 0) { + if (checkedSpots.contains(mut.toLong())) { + return false; + } + checkedSpots.add(mut.toLong()); IBlockState state = ctx.world().getBlockState(mut); Block block = state.getBlock(); @@ -380,16 +381,13 @@ private boolean isSafeLandingSpot(BlockPos pos, LongOpenHashSet checkedSpots) { return false; } mut.setPos(mut.getX(), mut.getY() - 1, mut.getZ()); - if (checkedSpots.contains(mut.toLong())) { - return false; - } } return false; // void } private BetterBlockPos findSafeLandingSpot() { final BetterBlockPos start = ctx.playerFeet(); - Queue queue = new PriorityQueue<>(Comparator.comparingInt(pos -> (pos.x-start.x)*(pos.x-start.x) + (pos.z-start.z)*(pos.z-start.z)).thenComparingInt(pos -> -pos.y)); + Queue queue = new PriorityQueue<>(Comparator.comparingInt(pos -> (pos.x - start.x) * (pos.x - start.x) + (pos.z - start.z) * (pos.z - start.z)).thenComparingInt(pos -> -pos.y)); Set visited = new HashSet<>(); LongOpenHashSet checkedPositions = new LongOpenHashSet(); queue.add(start); @@ -400,7 +398,6 @@ private BetterBlockPos findSafeLandingSpot() { if (isSafeLandingSpot(pos, checkedPositions)) { return pos; } - checkedPositions.add(pos.toLong()); if (visited.add(pos.north())) queue.add(pos.north()); if (visited.add(pos.east())) queue.add(pos.east()); if (visited.add(pos.south())) queue.add(pos.south()); From f7f05210935d202fab13b6b615c444f0595f65fa Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 22 Jul 2023 23:29:07 -0700 Subject: [PATCH 837/935] not legacy --- .../java/baritone/process/ElytraProcess.java | 6 +-- ...lytraBehavior.java => ElytraBehavior.java} | 41 ++++++++++--------- 2 files changed, 24 insertions(+), 23 deletions(-) rename src/main/java/baritone/process/elytra/{LegacyElytraBehavior.java => ElytraBehavior.java} (97%) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 188625508..327018faf 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -38,7 +38,7 @@ import baritone.api.utils.input.Input; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.movements.MovementFall; -import baritone.process.elytra.LegacyElytraBehavior; +import baritone.process.elytra.ElytraBehavior; import baritone.process.elytra.NetherPathfinderContext; import baritone.process.elytra.NullElytraProcess; import baritone.utils.BaritoneProcessHelper; @@ -59,7 +59,7 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro private boolean goingToLandingSpot; private BetterBlockPos landingSpot; private Goal goal; - private LegacyElytraBehavior behavior; + private ElytraBehavior behavior; private ElytraProcess(Baritone baritone) { super(baritone); @@ -260,7 +260,7 @@ public BlockPos currentDestination() { @Override public void pathTo(BlockPos destination) { this.onLostControl(); - this.behavior = new LegacyElytraBehavior(this.baritone, this, destination); + this.behavior = new ElytraBehavior(this.baritone, this, destination); if (ctx.world() != null) { this.behavior.repackChunks(); } diff --git a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java similarity index 97% rename from src/main/java/baritone/process/elytra/LegacyElytraBehavior.java rename to src/main/java/baritone/process/elytra/ElytraBehavior.java index c147442ce..a99b4e331 100644 --- a/src/main/java/baritone/process/elytra/LegacyElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -49,15 +49,16 @@ import net.minecraft.world.chunk.Chunk; import java.awt.*; -import java.util.*; import java.util.List; +import java.util.Queue; +import java.util.*; import java.util.concurrent.*; import java.util.function.UnaryOperator; import static baritone.utils.BaritoneMath.fastCeil; import static baritone.utils.BaritoneMath.fastFloor; -public final class LegacyElytraBehavior implements Helper { +public final class ElytraBehavior implements Helper { private final Baritone baritone; private final IPlayerContext ctx; @@ -109,7 +110,7 @@ public final class LegacyElytraBehavior implements Helper { private int invTickCountdown = 0; private final Queue invTransactionQueue = new LinkedList<>(); - public LegacyElytraBehavior(Baritone baritone, ElytraProcess process, BlockPos destination) { + public ElytraBehavior(Baritone baritone, ElytraProcess process, BlockPos destination) { this.baritone = baritone; this.ctx = baritone.getPlayerContext(); this.clearLines = new CopyOnWriteArrayList<>(); @@ -162,7 +163,7 @@ public CompletableFuture pathToDestination() { public CompletableFuture pathToDestination(final BlockPos from) { final long start = System.nanoTime(); - return this.path0(from, LegacyElytraBehavior.this.destination, UnaryOperator.identity()) + return this.path0(from, ElytraBehavior.this.destination, UnaryOperator.identity()) .thenRun(() -> { final double distance = this.path.get(0).distanceTo(this.path.get(this.path.size() - 1)); if (this.completePath) { @@ -216,7 +217,7 @@ public void pathNextSegment(final int afterIncl) { final List before = this.path.subList(0, afterIncl + 1); final long start = System.nanoTime(); - this.path0(this.path.get(afterIncl), LegacyElytraBehavior.this.destination, segment -> segment.prepend(before.stream())) + this.path0(this.path.get(afterIncl), ElytraBehavior.this.destination, segment -> segment.prepend(before.stream())) .thenRun(() -> { final int recompute = this.path.size() - before.size() - 1; final double distance = this.path.get(0).distanceTo(this.path.get(recompute)); @@ -267,7 +268,7 @@ public int getNear() { // mickey resigned private CompletableFuture path0(BlockPos src, BlockPos dst, UnaryOperator operator) { - return LegacyElytraBehavior.this.context.pathFindAsync(src, dst) + return ElytraBehavior.this.context.pathFindAsync(src, dst) .thenApply(UnpackedSegment::from) .thenApply(operator) .thenAcceptAsync(this::setPath, ctx.minecraft()::addScheduledTask); @@ -289,12 +290,12 @@ private void pathfindAroundObstacles() { return; } final BetterBlockPos rangeStart = path.get(rangeStartIncl); - if (!LegacyElytraBehavior.this.passable(rangeStart.x, rangeStart.y, rangeStart.z, false)) { + if (!ElytraBehavior.this.passable(rangeStart.x, rangeStart.y, rangeStart.z, false)) { // we're in a wall return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: } - if (LegacyElytraBehavior.this.process.state != ElytraProcess.State.LANDING && this.ticksNearUnchanged > 100) { + if (ElytraBehavior.this.process.state != ElytraProcess.State.LANDING && this.ticksNearUnchanged > 100) { this.pathRecalcSegment(rangeEndExcl - 1) .thenRun(() -> { logDirect("Recalculating segment, no progress in last 100 ticks"); @@ -304,7 +305,7 @@ private void pathfindAroundObstacles() { } for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { - if (!LegacyElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { + if (!ElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { // obstacle. where do we return to pathing? // find the next valid segment final BetterBlockPos blockage = this.path.get(i); @@ -677,8 +678,8 @@ private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final bool ) { // Prioritize boosting fireworks over regular ones // TODO: Take the minimum boost time into account? - if (!baritone.getInventoryBehavior().throwaway(true, LegacyElytraBehavior::isBoostingFireworks) && - !baritone.getInventoryBehavior().throwaway(true, LegacyElytraBehavior::isFireworks)) { + if (!baritone.getInventoryBehavior().throwaway(true, ElytraBehavior::isBoostingFireworks) && + !baritone.getInventoryBehavior().throwaway(true, ElytraBehavior::isFireworks)) { logDirect("no fireworks"); return; } @@ -700,21 +701,21 @@ private final class SolverContext { public final IAimProcessor aimProcessor; public SolverContext(boolean async) { - this.path = LegacyElytraBehavior.this.pathManager.getPath(); - this.playerNear = LegacyElytraBehavior.this.pathManager.getNear(); - this.start = LegacyElytraBehavior.this.ctx.playerFeetAsVec(); - this.ignoreLava = LegacyElytraBehavior.this.ctx.player().isInLava(); + this.path = ElytraBehavior.this.pathManager.getPath(); + this.playerNear = ElytraBehavior.this.pathManager.getNear(); + this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); + this.ignoreLava = ElytraBehavior.this.ctx.player().isInLava(); final Integer fireworkTicksExisted; - if (async && LegacyElytraBehavior.this.deployedFireworkLastTick) { - final int[] counter = LegacyElytraBehavior.this.nextTickBoostCounter; + if (async && ElytraBehavior.this.deployedFireworkLastTick) { + final int[] counter = ElytraBehavior.this.nextTickBoostCounter; fireworkTicksExisted = counter[1] > counter[0] ? 0 : null; } else { - fireworkTicksExisted = LegacyElytraBehavior.this.getAttachedFirework().map(e -> e.ticksExisted).orElse(null); + fireworkTicksExisted = ElytraBehavior.this.getAttachedFirework().map(e -> e.ticksExisted).orElse(null); } - this.boost = new FireworkBoost(fireworkTicksExisted, LegacyElytraBehavior.this.minimumBoostTicks); + this.boost = new FireworkBoost(fireworkTicksExisted, ElytraBehavior.this.minimumBoostTicks); - ITickableAimProcessor aim = LegacyElytraBehavior.this.baritone.getLookBehavior().getAimProcessor().fork(); + ITickableAimProcessor aim = ElytraBehavior.this.baritone.getLookBehavior().getAimProcessor().fork(); if (async) { // async computation is done at the end of a tick, advance by 1 to prepare for the next tick aim.advance(1); From 75e8035551fcce2c1e0076f767f9aa3fc086681d Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 14:26:31 -0400 Subject: [PATCH 838/935] safe landing improvements --- .../java/baritone/process/ElytraProcess.java | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 327018faf..be385a853 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -383,36 +383,57 @@ private static boolean isInBounds(BlockPos pos) { return pos.getY() >= 0 && pos.getY() < 128; } + private boolean isSafeBlock(Block block) { + return block == Blocks.NETHERRACK || block == Blocks.GRAVEL || block == Blocks.NETHER_BRICK; + } + private boolean isSafeBlock(BlockPos pos) { + return isSafeBlock(ctx.world().getBlockState(pos).getBlock()); + } + private boolean isAtEdge(BlockPos pos) { - return ctx.world().isAirBlock(pos.north()) - || ctx.world().isAirBlock(pos.south()) - || ctx.world().isAirBlock(pos.east()) - || ctx.world().isAirBlock(pos.west()) + return !isSafeBlock(pos.north()) + || !isSafeBlock(pos.south()) + || !isSafeBlock(pos.east()) + || !isSafeBlock(pos.west()) // corners - || ctx.world().isAirBlock(pos.north().west()) - || ctx.world().isAirBlock(pos.north().east()) - || ctx.world().isAirBlock(pos.south().west()) - || ctx.world().isAirBlock(pos.south().east()); + || !isSafeBlock(pos.north().west()) + || !isSafeBlock(pos.north().east()) + || !isSafeBlock(pos.south().west()) + || !isSafeBlock(pos.south().east()); + } + + private boolean isColumnAir(BlockPos landingSpot, int minHeight) { + BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(landingSpot); + final int maxY = mut.getY() + minHeight; + for (int y = mut.getY() + 1; y <= maxY; y++) { + mut.setPos(mut.getX(), y, mut.getZ()); + if (!ctx.world().isAirBlock(mut)) { + return false; + } + } + return true; } - private boolean isSafeLandingSpot(BlockPos pos, LongOpenHashSet checkedSpots) { + private BetterBlockPos checkLandingSpot(BlockPos pos, LongOpenHashSet checkedSpots) { BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(pos); while (mut.getY() >= 0) { if (checkedSpots.contains(mut.toLong())) { - return false; + return null; } checkedSpots.add(mut.toLong()); - IBlockState state = ctx.world().getBlockState(mut); - Block block = state.getBlock(); + Block block = ctx.world().getBlockState(mut).getBlock(); - if (block == Blocks.NETHERRACK || block == Blocks.GRAVEL || block == Blocks.NETHER_BRICK) { - return !isAtEdge(mut); + if (isSafeBlock(block)) { + if (!isAtEdge(mut)) { + return new BetterBlockPos(mut); + } + return null; } else if (block != Blocks.AIR) { - return false; + return null; } mut.setPos(mut.getX(), mut.getY() - 1, mut.getZ()); } - return false; // void + return null; // void } private BetterBlockPos findSafeLandingSpot() { @@ -425,8 +446,9 @@ private BetterBlockPos findSafeLandingSpot() { while (!queue.isEmpty()) { BetterBlockPos pos = queue.poll(); if (ctx.world().isBlockLoaded(pos) && isInBounds(pos) && ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) { - if (isSafeLandingSpot(pos, checkedPositions)) { - return pos; + BetterBlockPos actualLandingSpot = checkLandingSpot(pos, checkedPositions); + if (actualLandingSpot != null && isColumnAir(actualLandingSpot, 15)) { + return actualLandingSpot.up(15); } if (visited.add(pos.north())) queue.add(pos.north()); if (visited.add(pos.east())) queue.add(pos.east()); From 212ef4d4cc8d3d52d07d9dc20e33f585a657144c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 23 Jul 2023 11:44:29 -0700 Subject: [PATCH 839/935] waste fireworks smiling_imp --- src/api/java/baritone/api/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 3ab2a068b..d664b569c 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1377,7 +1377,7 @@ public final class Settings { /** * If enabled, avoids using fireworks when descending along the flight path. */ - public final Setting elytraConserveFireworks = new Setting<>(true); + public final Setting elytraConserveFireworks = new Setting<>(false); /** * Renders the raytraces that are performed by the elytra fly calculation. From e63aad782518667b180dde3c7bb404ca8fb45903 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 15:09:56 -0400 Subject: [PATCH 840/935] elytra command improvements --- .../command/defaults/ElytraCommand.java | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 7f985ad55..f7aaebc81 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -22,12 +22,10 @@ import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.pathing.goals.Goal; -import baritone.api.pathing.goals.GoalBlock; -import baritone.api.pathing.goals.GoalXZ; import baritone.api.process.ICustomGoalProcess; import baritone.api.process.IElytraProcess; -import net.minecraft.util.math.BlockPos; import java.util.Arrays; import java.util.List; @@ -43,15 +41,12 @@ public ElytraCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { final ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); final IElytraProcess elytra = baritone.getElytraProcess(); + if (args.hasExactlyOne() && args.peekString().equals("supported")) { + logDirect(elytra.isLoaded() ? "yes" : unsupportedSystemMessage()); + return; + } if (!elytra.isLoaded()) { - final String osArch = System.getProperty("os.arch"); - final String osName = System.getProperty("os.name"); - throw new CommandInvalidStateException(String.format( - "legacy architectures are not supported. your CPU is %s and your operating system is %s. " + - "supported architectures are x86_64 or arm64, supported operating systems are windows, " + - "linux, and mac", - osArch, osName - )); + throw new CommandInvalidStateException(unsupportedSystemMessage()); } if (!args.hasAny()) { @@ -87,7 +82,11 @@ public void execute(String label, IArgConsumer args) throws CommandException { @Override public Stream tabComplete(String label, IArgConsumer args) throws CommandException { - return Stream.empty(); + TabCompleteHelper helper = new TabCompleteHelper(); + if (args.hasExactlyOne()) { + helper.append("reset", "repack", "supported"); + } + return helper.filterPrefix(args.getString()).stream(); } @Override @@ -97,6 +96,25 @@ public String getShortDesc() { @Override public List getLongDesc() { - return Arrays.asList(); + return Arrays.asList( + "The elytra command tells baritone to, in the nether, automatically fly to the current goal.", + "", + "Usage:", + "> elytra - fly to the current goal", + "> elytra reset - Resets the state of the process, but will try to keep flying to the same goal.", + "> elytra repack - Queues all of the chunks in render distance to be given to the native library.", + "> elytra supported - Tells you if baritone ships a native library that is compatible with your PC." + ); + } + + private static String unsupportedSystemMessage() { + final String osArch = System.getProperty("os.arch"); + final String osName = System.getProperty("os.name"); + return String.format( + "Legacy architectures are not supported. your CPU is %s and your operating system is %s. " + + "Supported architectures are 64 bit x86, and 64 bit arm, supported operating systems are Windows, " + + "Linux, and Mac", + osArch, osName + ); } } From 293b556b56e95ea73824b7b65a93091ec4deb9f4 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 23 Jul 2023 20:46:12 -0400 Subject: [PATCH 841/935] add dimension checks --- src/main/java/baritone/command/defaults/ElytraCommand.java | 3 +++ src/main/java/baritone/process/ElytraProcess.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index f7aaebc81..6ba08dba9 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -54,6 +54,9 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (iGoal == null) { throw new CommandInvalidStateException("No goal has been set"); } + if (ctx.player().dimension != -1) { + throw new CommandInvalidStateException("Only works in the nether"); + } try { elytra.pathTo(iGoal); } catch (IllegalArgumentException ex) { diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index be385a853..754587a47 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -259,6 +259,9 @@ public BlockPos currentDestination() { @Override public void pathTo(BlockPos destination) { + if (ctx.player() == null || ctx.player().dimension != -1) { + return; + } this.onLostControl(); this.behavior = new ElytraBehavior(this.baritone, this, destination); if (ctx.world() != null) { From 45400a968562a6f6d880f7c2de97cfcc1f1ab8f6 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 24 Jul 2023 03:30:06 -0400 Subject: [PATCH 842/935] fix concurrency concerns --- .../elytra/BlockStateOctreeInterface.java | 11 ++++------- .../baritone/process/elytra/ElytraBehavior.java | 17 +++++++++++------ .../process/elytra/NetherPathfinderContext.java | 7 ++++--- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java b/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java index f9e700085..efbfb9216 100644 --- a/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java +++ b/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java @@ -27,7 +27,7 @@ public final class BlockStateOctreeInterface { private final NetherPathfinderContext context; private final long contextPtr; - volatile long chunkPtr; + transient long chunkPtr; // Guarantee that the first lookup will fetch the context by setting MAX_VALUE private int prevChunkX = Integer.MAX_VALUE; @@ -44,14 +44,11 @@ public boolean get0(final int x, final int y, final int z) { } final int chunkX = x >> 4; final int chunkZ = z >> 4; - long pointer = this.chunkPtr; - if (pointer == 0 | ((chunkX ^ this.prevChunkX) | (chunkZ ^ this.prevChunkZ)) != 0) { + if (this.chunkPtr == 0 | ((chunkX ^ this.prevChunkX) | (chunkZ ^ this.prevChunkZ)) != 0) { this.prevChunkX = chunkX; this.prevChunkZ = chunkZ; - synchronized (this.context.cacheLock) { - this.chunkPtr = pointer = NetherPathfinder.getOrCreateChunk(this.contextPtr, chunkX, chunkZ); - } + this.chunkPtr = NetherPathfinder.getOrCreateChunk(this.contextPtr, chunkX, chunkZ); } - return Octree.getBlock(pointer, x & 0xF, y & 0x7F, z & 0xF); + return Octree.getBlock(this.chunkPtr, x & 0xF, y & 0x7F, z & 0xF); } } diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index a99b4e331..0e6b7ad2a 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -446,6 +446,17 @@ public void repackChunks() { } public void onTick() { + synchronized (this.context.cullingLock) { + this.onTick0(); + } + final long now = System.currentTimeMillis(); + if ((now - this.timeLastCacheCull) / 1000 > Baritone.settings().elytraTimeBetweenCacheCullSecs.value) { + this.context.queueCacheCulling(ctx.player().chunkCoordX, ctx.player().chunkCoordZ, Baritone.settings().elytraCacheCullDistance.value, this.boi); + this.timeLastCacheCull = now; + } + } + + private void onTick0() { // Fetch the previous solution, regardless of if it's going to be used this.pendingSolution = null; if (this.solver != null) { @@ -498,12 +509,6 @@ public void onTick() { Math.max(playerNear - 30, 0), Math.min(playerNear + 100, path.size()) ); - - final long now = System.currentTimeMillis(); - if ((now - this.timeLastCacheCull) / 1000 > Baritone.settings().elytraTimeBetweenCacheCullSecs.value) { - this.context.queueCacheCulling(ctx.player().chunkCoordX, ctx.player().chunkCoordZ, Baritone.settings().elytraCacheCullDistance.value, this.boi); - this.timeLastCacheCull = now; - } } /** diff --git a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java index 69ac41992..991457d10 100644 --- a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java @@ -38,7 +38,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; /** * @author Brady @@ -46,7 +45,9 @@ public final class NetherPathfinderContext { private static final IBlockState AIR_BLOCK_STATE = Blocks.AIR.getDefaultState(); - public final Object cacheLock = new Object(); + // This lock must be held while there are active pointers to chunks in java, + // but we just hold it for the entire tick so we don't have to think much about it. + public final Object cullingLock = new Object(); // Visible for access in BlockStateOctreeInterface final long context; @@ -61,7 +62,7 @@ public NetherPathfinderContext(long seed) { public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks, BlockStateOctreeInterface boi) { this.executor.execute(() -> { - synchronized (this.cacheLock) { + synchronized (this.cullingLock) { boi.chunkPtr = 0L; NetherPathfinder.cullFarChunks(this.context, chunkX, chunkZ, maxDistanceBlocks); } From 1e0dce8f416db615c2f76f20c1d5419f576a4a91 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 24 Jul 2023 03:30:38 -0400 Subject: [PATCH 843/935] 127 instead of 128 --- .../java/baritone/process/elytra/BlockStateOctreeInterface.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java b/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java index efbfb9216..7db0e2d64 100644 --- a/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java +++ b/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java @@ -39,7 +39,7 @@ public BlockStateOctreeInterface(final NetherPathfinderContext context) { } public boolean get0(final int x, final int y, final int z) { - if ((y | (128 - y)) < 0) { + if ((y | (127 - y)) < 0) { return false; } final int chunkX = x >> 4; From f14bb282f049d7ad723c6ebcb3c5e61fec12a9c6 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 24 Jul 2023 04:41:19 -0400 Subject: [PATCH 844/935] add null check to resetState --- src/main/java/baritone/process/ElytraProcess.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 754587a47..1ab9f74f5 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -81,8 +81,10 @@ public boolean isActive() { public void resetState() { BlockPos destination = this.currentDestination(); this.onLostControl(); - this.pathTo(destination); - this.repackChunks(); + if (destination != null) { + this.pathTo(destination); + this.repackChunks(); + } } @Override From 601a781983ba3157fec32c29c3817e787530c340 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 24 Jul 2023 08:21:46 -0400 Subject: [PATCH 845/935] improve control flow (fixes behavior.onTick() being called twice) --- .../java/baritone/process/ElytraProcess.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 1ab9f74f5..126621ed9 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -58,6 +58,7 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro public State state; private boolean goingToLandingSpot; private BetterBlockPos landingSpot; + private boolean reachedGoal; // this basically just prevents potential notification spam private Goal goal; private ElytraBehavior behavior; @@ -106,27 +107,29 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (ctx.player().isElytraFlying() && this.state != State.LANDING) { final BetterBlockPos last = this.behavior.pathManager.path.getLast(); if (last != null && ctx.player().getDistanceSqToCenter(last) < 1) { - if (Baritone.settings().notificationOnPathComplete.value) { + if (Baritone.settings().notificationOnPathComplete.value && !reachedGoal) { logNotification("Pathing complete", false); } - if (Baritone.settings().disconnectOnArrival.value) { + if (Baritone.settings().disconnectOnArrival.value && !reachedGoal) { // don't be active when the user logs back in this.onLostControl(); ctx.world().sendQuittingDisconnectingPacket(); return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } + reachedGoal = true; + if (!goingToLandingSpot) { BetterBlockPos landingSpot = findSafeLandingSpot(); + // if this fails we will just keep orbiting the last node until we run out of rockets or the user intervenes if (landingSpot != null) { this.pathTo(landingSpot); this.landingSpot = landingSpot; this.goingToLandingSpot = true; - return this.onTick(calcFailed, isSafeToCancel); } - // don't spam call findLandingSpot if it somehow fails (it's slow) - this.goingToLandingSpot = true; + } else { + // we are goingToLandingSpot and we are in the in the last node of the path + this.state = State.LANDING; } - this.state = State.LANDING; } } @@ -230,6 +233,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { public void onLostControl() { this.goal = null; this.goingToLandingSpot = false; + this.reachedGoal = false; this.state = State.START_FLYING; // TODO: null state? if (this.behavior != null) { this.behavior.destroy(); From 90f2b39fba61b2adcb7741f4c4711374a596e30e Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 26 Jul 2023 19:52:25 -0500 Subject: [PATCH 846/935] Remove glPushAttrib/glPopAttrib usage --- src/main/java/baritone/utils/IRenderer.java | 2 ++ src/main/java/baritone/utils/PathRenderer.java | 6 ------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 680d7e380..6ccc0847c 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -57,6 +57,7 @@ static void startLines(Color color, float alpha, float lineWidth, boolean ignore GlStateManager.glLineWidth(lineWidth); GlStateManager.disableTexture2D(); GlStateManager.depthMask(false); + GlStateManager.disableLighting(); if (ignoreDepth) { GlStateManager.disableDepth(); @@ -77,6 +78,7 @@ static void endLines(boolean ignoredDepth) { GlStateManager.depthMask(true); GlStateManager.enableTexture2D(); GlStateManager.disableBlend(); + GlStateManager.enableLighting(); } static void emitAABB(AxisAlignedBB aabb) { diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index b3abc8cd2..93f916f1d 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -41,8 +41,6 @@ import java.util.Collections; import java.util.List; -import static org.lwjgl.opengl.GL11.*; - /** * @author Brady * @since 8/9/2018 @@ -239,8 +237,6 @@ private static void drawGoal(Entity player, Goal goal, float partialTicks, Color GoalXZ goalPos = (GoalXZ) goal; if (settings.renderGoalXZBeacon.value) { - glPushAttrib(GL_LIGHTING_BIT); - textureManager.bindTexture(TileEntityBeaconRenderer.TEXTURE_BEACON_BEAM); if (settings.renderGoalIgnoreDepth.value) { @@ -262,8 +258,6 @@ private static void drawGoal(Entity player, Goal goal, float partialTicks, Color if (settings.renderGoalIgnoreDepth.value) { GlStateManager.enableDepth(); } - - glPopAttrib(); return; } From 6b611cf4c7e0be9a7e19aeeb0c635a0175dd65d9 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 28 Jul 2023 01:30:54 -0500 Subject: [PATCH 847/935] Move more state into `SolverContext` --- .../process/elytra/ElytraBehavior.java | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 0e6b7ad2a..f5a32c5f2 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -701,15 +701,26 @@ private final class SolverContext { public final NetherPath path; public final int playerNear; public final Vec3d start; + public final Vec3d motion; + public final AxisAlignedBB boundingBox; public final boolean ignoreLava; public final FireworkBoost boost; public final IAimProcessor aimProcessor; + /** + * Creates a new SolverContext using the current state of the path, player, and firework boost at the time of + * construction. + * + * @param async Whether the computation is being done asynchronously at the end of a game tick. + */ public SolverContext(boolean async) { this.path = ElytraBehavior.this.pathManager.getPath(); this.playerNear = ElytraBehavior.this.pathManager.getNear(); - this.start = ElytraBehavior.this.ctx.playerFeetAsVec(); - this.ignoreLava = ElytraBehavior.this.ctx.player().isInLava(); + + this.start = ctx.playerFeetAsVec(); + this.motion = ctx.playerMotion(); + this.boundingBox = ctx.player().getEntityBoundingBox(); + this.ignoreLava = ctx.player().isInLava(); final Integer fireworkTicksExisted; if (async && ElytraBehavior.this.deployedFireworkLastTick) { @@ -741,6 +752,8 @@ public boolean equals(Object o) { return this.path == other.path // Contents aren't modified, just compare by reference && this.playerNear == other.playerNear && Objects.equals(this.start, other.start) + && Objects.equals(this.motion, other.motion) + && Objects.equals(this.boundingBox, other.boundingBox) && this.ignoreLava == other.ignoreLava && Objects.equals(this.boost, other.boost); } @@ -752,6 +765,11 @@ private static final class FireworkBoost { private final int minimumBoostTicks; private final int maximumBoostTicks; + /** + * @param fireworkTicksExisted The ticksExisted of the attached firework entity, or {@code null} if no entity. + * @param minimumBoostTicks The minimum number of boost ticks that the attached firework entity, if any, will + * provide. + */ public FireworkBoost(final Integer fireworkTicksExisted, final int minimumBoostTicks) { this.fireworkTicksExisted = fireworkTicksExisted; @@ -870,7 +888,7 @@ private boolean isHitboxClear(final SolverContext context, final Vec3d dest, fin return true; } - final AxisAlignedBB bb = ctx.player().getEntityBoundingBox().grow(growAmount); + final AxisAlignedBB bb = context.boundingBox.grow(growAmount); final double ox = dest.x - start.x; final double oy = dest.y - start.y; @@ -1032,13 +1050,12 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi while (pitches.hasNext()) { final float pitch = pitches.nextFloat(); final List displacement = this.simulate( - context.aimProcessor.fork(), + context, goalDelta, pitch, ticks, ticksBoosted, - ticksBoostDelay, - context.ignoreLava + ticksBoostDelay ); if (displacement == null) { continue; @@ -1074,11 +1091,12 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi return null; } - private List simulate(final ITickableAimProcessor aimProcessor, final Vec3d goalDelta, final float pitch, - final int ticks, final int ticksBoosted, final int ticksBoostDelay, final boolean ignoreLava) { + private List simulate(final SolverContext context, final Vec3d goalDelta, final float pitch, final int ticks, + final int ticksBoosted, final int ticksBoostDelay) { + final ITickableAimProcessor aimProcessor = context.aimProcessor.fork(); Vec3d delta = goalDelta; - Vec3d motion = ctx.playerMotion(); - AxisAlignedBB hitbox = ctx.player().getEntityBoundingBox(); + Vec3d motion = context.motion; + AxisAlignedBB hitbox = context.boundingBox; List displacement = new ArrayList<>(ticks + 1); displacement.add(Vec3d.ZERO); int remainingTicksBoosted = ticksBoosted; @@ -1112,7 +1130,7 @@ private List simulate(final ITickableAimProcessor aimProcessor, final Vec for (int x = xmin; x < xmax; x++) { for (int y = ymin; y < ymax; y++) { for (int z = zmin; z < zmax; z++) { - if (!this.passable(x, y, z, ignoreLava)) { + if (!this.passable(x, y, z, context.ignoreLava)) { return null; } } From 4b5a094f308f3a06a63a2f3dd28d5bb4ca9de3dd Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 28 Jul 2023 01:41:03 -0500 Subject: [PATCH 848/935] Render fields can be private now --- .../baritone/process/elytra/ElytraBehavior.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index f5a32c5f2..c0cd07c87 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -62,13 +62,12 @@ public final class ElytraBehavior implements Helper { private final Baritone baritone; private final IPlayerContext ctx; - - // Used exclusively for PathRenderer - public List> clearLines; - public List> blockedLines; - public List simulationLine; - public BlockPos aimPos; - public List visiblePath; + // Render stuff + private final List> clearLines; + private final List> blockedLines; + private List simulationLine; + private BlockPos aimPos; + private List visiblePath; // :sunglasses: public final NetherPathfinderContext context; From 31d1656c48633528afa511bad9bb683d58336884 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sat, 29 Jul 2023 00:22:52 -0400 Subject: [PATCH 849/935] safer landing --- .../java/baritone/process/ElytraProcess.java | 48 +++++++++++++------ .../process/elytra/ElytraBehavior.java | 4 ++ 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 126621ed9..ff374aad1 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -104,8 +104,18 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - if (ctx.player().isElytraFlying() && this.state != State.LANDING) { + if (ctx.player().isElytraFlying() && this.state != State.LANDING && this.behavior.pathManager.isComplete()) { final BetterBlockPos last = this.behavior.pathManager.path.getLast(); + if (last != null && ctx.player().getDistanceSqToCenter(last) < (48 * 48) && !goingToLandingSpot) { + BetterBlockPos landingSpot = findSafeLandingSpot(last); + // if this fails we will just keep orbiting the last node until we run out of rockets or the user intervenes + if (landingSpot != null) { + this.pathTo(landingSpot); + this.landingSpot = landingSpot; + this.goingToLandingSpot = true; + } + } + if (last != null && ctx.player().getDistanceSqToCenter(last) < 1) { if (Baritone.settings().notificationOnPathComplete.value && !reachedGoal) { logNotification("Pathing complete", false); @@ -118,16 +128,8 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } reachedGoal = true; - if (!goingToLandingSpot) { - BetterBlockPos landingSpot = findSafeLandingSpot(); - // if this fails we will just keep orbiting the last node until we run out of rockets or the user intervenes - if (landingSpot != null) { - this.pathTo(landingSpot); - this.landingSpot = landingSpot; - this.goingToLandingSpot = true; - } - } else { - // we are goingToLandingSpot and we are in the in the last node of the path + // we are goingToLandingSpot and we are in the last node of the path + if (this.goingToLandingSpot) { this.state = State.LANDING; } } @@ -423,6 +425,25 @@ private boolean isColumnAir(BlockPos landingSpot, int minHeight) { return true; } + private boolean hasAirBubble(BlockPos pos) { + final int radius = 2; // Half of 5, as we're counting blocks in each direction from the center + + for (int x = -radius; x <= radius; x++) { + for (int y = -radius; y <= radius; y++) { + for (int z = -radius; z <= radius; z++) { + BlockPos currentPos = pos.add(x, y, z); + IBlockState blockState = ctx.world().getBlockState(currentPos); + + if (blockState.getBlock() != Blocks.AIR) { + return false; + } + } + } + } + + return true; + } + private BetterBlockPos checkLandingSpot(BlockPos pos, LongOpenHashSet checkedSpots) { BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(pos); while (mut.getY() >= 0) { @@ -445,8 +466,7 @@ private BetterBlockPos checkLandingSpot(BlockPos pos, LongOpenHashSet checkedSpo return null; // void } - private BetterBlockPos findSafeLandingSpot() { - final BetterBlockPos start = ctx.playerFeet(); + private BetterBlockPos findSafeLandingSpot(BetterBlockPos start) { Queue queue = new PriorityQueue<>(Comparator.comparingInt(pos -> (pos.x - start.x) * (pos.x - start.x) + (pos.z - start.z) * (pos.z - start.z)).thenComparingInt(pos -> -pos.y)); Set visited = new HashSet<>(); LongOpenHashSet checkedPositions = new LongOpenHashSet(); @@ -456,7 +476,7 @@ private BetterBlockPos findSafeLandingSpot() { BetterBlockPos pos = queue.poll(); if (ctx.world().isBlockLoaded(pos) && isInBounds(pos) && ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) { BetterBlockPos actualLandingSpot = checkLandingSpot(pos, checkedPositions); - if (actualLandingSpot != null && isColumnAir(actualLandingSpot, 15)) { + if (actualLandingSpot != null && isColumnAir(actualLandingSpot, 15) && hasAirBubble(actualLandingSpot.up(15))) { return actualLandingSpot.up(15); } if (visited.add(pos.north())) queue.add(pos.north()); diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index c0cd07c87..9311b296c 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -366,6 +366,10 @@ public void updatePlayerNear() { } this.playerNear = index; } + + public boolean isComplete() { + return this.completePath; + } } public void onRenderPass(RenderEvent event) { From 2e2c0ecc0b895c68c92be21ce2bf1b36df494576 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sat, 29 Jul 2023 11:52:37 -0400 Subject: [PATCH 850/935] use MutableBlockPos --- src/main/java/baritone/process/ElytraProcess.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index ff374aad1..ca6988b20 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -427,14 +427,12 @@ private boolean isColumnAir(BlockPos landingSpot, int minHeight) { private boolean hasAirBubble(BlockPos pos) { final int radius = 2; // Half of 5, as we're counting blocks in each direction from the center - + BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(); for (int x = -radius; x <= radius; x++) { for (int y = -radius; y <= radius; y++) { for (int z = -radius; z <= radius; z++) { - BlockPos currentPos = pos.add(x, y, z); - IBlockState blockState = ctx.world().getBlockState(currentPos); - - if (blockState.getBlock() != Blocks.AIR) { + mut.setPos(pos.getX() + x, pos.getY() + y, pos.getZ() + z); + if (!ctx.world().isAirBlock(mut)) { return false; } } From d6adb52718e741e12eb658007dbc8da26835e10b Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 30 Jul 2023 15:46:18 -0700 Subject: [PATCH 851/935] tweaks --- .../java/baritone/process/ElytraProcess.java | 47 ++++++++++++------- .../process/elytra/ElytraBehavior.java | 7 ++- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index ca6988b20..f5329d8d1 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -88,6 +88,8 @@ public void resetState() { } } + private static final String AUTO_JUMP_FAILURE_MSG = "Failed to compute a walking path to a spot to jump off from. Consider starting from a higher location, near an overhang. Or, you can disable elytraAutoJump and just manually begin gliding."; + @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { final long seedSetting = Baritone.settings().elytraNetherSeed.value; @@ -100,13 +102,14 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (calcFailed) { onLostControl(); - logDirect("Failed to get to jump off spot, canceling"); + logDirect(AUTO_JUMP_FAILURE_MSG); return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } if (ctx.player().isElytraFlying() && this.state != State.LANDING && this.behavior.pathManager.isComplete()) { final BetterBlockPos last = this.behavior.pathManager.path.getLast(); if (last != null && ctx.player().getDistanceSqToCenter(last) < (48 * 48) && !goingToLandingSpot) { + logDirect("Path complete, picking a nearby safe landing spot..."); BetterBlockPos landingSpot = findSafeLandingSpot(last); // if this fails we will just keep orbiting the last node until we run out of rockets or the user intervenes if (landingSpot != null) { @@ -131,6 +134,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { // we are goingToLandingSpot and we are in the last node of the path if (this.goingToLandingSpot) { this.state = State.LANDING; + logDirect("Above the landing spot, landing..."); } } } @@ -141,17 +145,30 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { Vec3d from = ctx.player().getPositionVector(); Vec3d to = new Vec3d(((double) endPos.x) + 0.5, from.y, ((double) endPos.z) + 0.5); Rotation rotation = RotationUtils.calcRotationFromVec3d(from, to, ctx.playerRotations()); - baritone.getLookBehavior().updateTarget(rotation, false); - } else { - this.onLostControl(); - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + baritone.getLookBehavior().updateTarget(new Rotation(rotation.getYaw(), 0), false); // this will be overwritten, probably, by behavior tick + + if (ctx.player().posY < endPos.y - LANDING_COLUMN_HEIGHT) { + logDirect("bad landing spot, trying again..."); + badLandingSpots.add(endPos); + } } - } else if (ctx.player().isElytraFlying()) { - this.state = State.FLYING; + } + + if (ctx.player().isElytraFlying()) { + behavior.landingMode = this.state == State.LANDING; this.goal = null; baritone.getInputOverrideHandler().clearAllKeys(); behavior.tick(); return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } else if (this.state == State.LANDING) { + if (Math.sqrt(ctx.player().motionX * ctx.player().motionX + ctx.player().motionZ * ctx.player().motionZ) > 0.001) { + logDirect("Landed, but still moving, waiting for velocity to die down... " + ctx.player().motionX + " " + ctx.player().motionZ); + baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + baritone.getInputOverrideHandler().clearAllKeys(); + this.onLostControl(); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } if (this.state == State.FLYING || this.state == State.START_FLYING) { @@ -177,12 +194,6 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { (fall.getSrc().z + fall.getDest().z) / 2 ); behavior.pathManager.pathToDestination(from).whenComplete((result, ex) -> { - if (!behavior.clearView(new Vec3d(from), behavior.pathManager.getPath().getVec(0), false)) { - onLostControl(); - // TODO: Get to higher ground and then look again - logDirect("Can't see start of path from jump spot, canceling"); - return; - } if (ex == null) { this.state = State.GET_TO_JUMP; return; @@ -192,7 +203,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { this.state = State.PAUSE; } else { onLostControl(); - logDirect("Jump off path didn't include a fall movement, canceling"); + logDirect(AUTO_JUMP_FAILURE_MSG); return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } } @@ -397,6 +408,7 @@ private static boolean isInBounds(BlockPos pos) { private boolean isSafeBlock(Block block) { return block == Blocks.NETHERRACK || block == Blocks.GRAVEL || block == Blocks.NETHER_BRICK; } + private boolean isSafeBlock(BlockPos pos) { return isSafeBlock(ctx.world().getBlockState(pos).getBlock()); } @@ -464,6 +476,9 @@ private BetterBlockPos checkLandingSpot(BlockPos pos, LongOpenHashSet checkedSpo return null; // void } + private static final int LANDING_COLUMN_HEIGHT = 15; + private Set badLandingSpots = new HashSet<>(); + private BetterBlockPos findSafeLandingSpot(BetterBlockPos start) { Queue queue = new PriorityQueue<>(Comparator.comparingInt(pos -> (pos.x - start.x) * (pos.x - start.x) + (pos.z - start.z) * (pos.z - start.z)).thenComparingInt(pos -> -pos.y)); Set visited = new HashSet<>(); @@ -474,8 +489,8 @@ private BetterBlockPos findSafeLandingSpot(BetterBlockPos start) { BetterBlockPos pos = queue.poll(); if (ctx.world().isBlockLoaded(pos) && isInBounds(pos) && ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) { BetterBlockPos actualLandingSpot = checkLandingSpot(pos, checkedPositions); - if (actualLandingSpot != null && isColumnAir(actualLandingSpot, 15) && hasAirBubble(actualLandingSpot.up(15))) { - return actualLandingSpot.up(15); + if (actualLandingSpot != null && isColumnAir(actualLandingSpot, LANDING_COLUMN_HEIGHT) && hasAirBubble(actualLandingSpot.up(LANDING_COLUMN_HEIGHT)) && !badLandingSpots.contains(actualLandingSpot.up(LANDING_COLUMN_HEIGHT))) { + return actualLandingSpot.up(LANDING_COLUMN_HEIGHT); } if (visited.add(pos.north())) queue.add(pos.north()); if (visited.add(pos.east())) queue.add(pos.east()); diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 9311b296c..39af6fc38 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -84,6 +84,8 @@ public final class ElytraBehavior implements Helper { */ private int remainingSetBackTicks; + public boolean landingMode; + /** * The most recent minimum number of firework boost ticks, equivalent to {@code 10 * (1 + Flight)} *

@@ -583,7 +585,7 @@ public void onPostTick(TickEvent event) { private Solution solveAngles(final SolverContext context) { final NetherPath path = context.path; - final int playerNear = context.playerNear; + final int playerNear = landingMode ? path.size() - 1 : context.playerNear; final Vec3d start = context.start; Solution solution = null; @@ -670,6 +672,9 @@ private void tickUseFireworks(final Vec3d start, final Vec3d goingTo, final bool logDebug("waiting for elytraFireworkSetbackUseDelay: " + this.remainingSetBackTicks); return; } + if (this.landingMode) { + return; + } final boolean useOnDescend = !Baritone.settings().elytraConserveFireworks.value || ctx.player().posY < goingTo.y + 5; final double currentSpeed = new Vec3d( ctx.player().motionX, From a83d275622998c710e665f40e823e1543a99bb7b Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 30 Jul 2023 15:47:43 -0700 Subject: [PATCH 852/935] forgot --- src/main/java/baritone/process/ElytraProcess.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index f5329d8d1..6a19707e4 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -150,6 +150,8 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (ctx.player().posY < endPos.y - LANDING_COLUMN_HEIGHT) { logDirect("bad landing spot, trying again..."); badLandingSpots.add(endPos); + goingToLandingSpot = false; + this.state = State.FLYING; } } } From 3a6e5541fb79270a4e8421dbd298281444ecc91c Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 30 Jul 2023 17:48:40 -0500 Subject: [PATCH 853/935] Don't deploy elytra while PathingBehavior is active --- .../launch/mixins/MixinEntityPlayerSP.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index 281ff96f5..efc56ca65 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -27,6 +27,8 @@ import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.player.PlayerCapabilities; +import net.minecraft.item.ItemElytra; +import net.minecraft.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -123,4 +125,19 @@ private void updateRidden(CallbackInfo cb) { ((LookBehavior) baritone.getLookBehavior()).pig(); } } + + @Redirect( + method = "onLivingUpdate", + at = @At( + value = "INVOKE", + target = "net/minecraft/item/ItemElytra.isUsable(Lnet/minecraft/item/ItemStack;)Z" + ) + ) + private boolean isElytraUsable(ItemStack stack) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this); + if (baritone != null && baritone.getPathingBehavior().isPathing()) { + return false; + } + return ItemElytra.isUsable(stack); + } } From 27e45b816d1fb876d7165379d5559fa01f449644 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 30 Jul 2023 19:45:25 -0400 Subject: [PATCH 854/935] increase air bubble radius, append destination to path when landing --- src/main/java/baritone/process/ElytraProcess.java | 11 ++++++++--- .../baritone/process/elytra/ElytraBehavior.java | 14 ++++++++++++-- .../baritone/process/elytra/UnpackedSegment.java | 4 ++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 6a19707e4..cfcf5373f 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -113,7 +113,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { BetterBlockPos landingSpot = findSafeLandingSpot(last); // if this fails we will just keep orbiting the last node until we run out of rockets or the user intervenes if (landingSpot != null) { - this.pathTo(landingSpot); + this.pathTo0(landingSpot, true); this.landingSpot = landingSpot; this.goingToLandingSpot = true; } @@ -248,6 +248,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { public void onLostControl() { this.goal = null; this.goingToLandingSpot = false; + this.landingSpot = null; this.reachedGoal = false; this.state = State.START_FLYING; // TODO: null state? if (this.behavior != null) { @@ -280,11 +281,15 @@ public BlockPos currentDestination() { @Override public void pathTo(BlockPos destination) { + this.pathTo0(destination, false); + } + + private void pathTo0(BlockPos destination, boolean appendDestination) { if (ctx.player() == null || ctx.player().dimension != -1) { return; } this.onLostControl(); - this.behavior = new ElytraBehavior(this.baritone, this, destination); + this.behavior = new ElytraBehavior(this.baritone, this, destination, appendDestination); if (ctx.world() != null) { this.behavior.repackChunks(); } @@ -440,7 +445,7 @@ private boolean isColumnAir(BlockPos landingSpot, int minHeight) { } private boolean hasAirBubble(BlockPos pos) { - final int radius = 2; // Half of 5, as we're counting blocks in each direction from the center + final int radius = 4; // Half of the full width, rounded down, as we're counting blocks in each direction from the center BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(); for (int x = -radius; x <= radius; x++) { for (int y = -radius; y <= radius; y++) { diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 39af6fc38..211835dda 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -99,6 +99,7 @@ public final class ElytraBehavior implements Helper { private BlockStateInterface bsi; private final BlockStateOctreeInterface boi; public final BlockPos destination; + private final boolean appendDestination; private final ExecutorService solverExecutor; private Future solver; @@ -111,7 +112,7 @@ public final class ElytraBehavior implements Helper { private int invTickCountdown = 0; private final Queue invTransactionQueue = new LinkedList<>(); - public ElytraBehavior(Baritone baritone, ElytraProcess process, BlockPos destination) { + public ElytraBehavior(Baritone baritone, ElytraProcess process, BlockPos destination, boolean appendDestination) { this.baritone = baritone; this.ctx = baritone.getPlayerContext(); this.clearLines = new CopyOnWriteArrayList<>(); @@ -119,6 +120,7 @@ public ElytraBehavior(Baritone baritone, ElytraProcess process, BlockPos destina this.pathManager = this.new PathManager(); this.process = process; this.destination = destination; + this.appendDestination = appendDestination; this.solverExecutor = Executors.newSingleThreadExecutor(); this.nextTickBoostCounter = new int[2]; @@ -252,7 +254,15 @@ public void clear() { } private void setPath(final UnpackedSegment segment) { - this.path = segment.collect(); + List path = segment.collect(); + if (ElytraBehavior.this.appendDestination) { + BlockPos dest = ElytraBehavior.this.destination; + BlockPos last = !path.isEmpty() ? path.get(path.size() - 1) : null; + if (last != null && ElytraBehavior.this.clearView(new Vec3d(dest), new Vec3d(last), false)) { + path.add(new BetterBlockPos(dest)); + } + } + this.path = new NetherPath(path); this.completePath = segment.isFinished(); this.playerNear = 0; this.ticksNearUnchanged = 0; diff --git a/src/main/java/baritone/process/elytra/UnpackedSegment.java b/src/main/java/baritone/process/elytra/UnpackedSegment.java index 02f07feb8..e50ab3235 100644 --- a/src/main/java/baritone/process/elytra/UnpackedSegment.java +++ b/src/main/java/baritone/process/elytra/UnpackedSegment.java @@ -49,7 +49,7 @@ public UnpackedSegment prepend(Stream other) { return new UnpackedSegment(Stream.concat(other, this.path), this.finished); } - public NetherPath collect() { + public List collect() { final List path = this.path.collect(Collectors.toList()); // Remove backtracks @@ -67,7 +67,7 @@ public NetherPath collect() { } } - return new NetherPath(path); + return path; } public boolean isFinished() { From 7e9cf2e1e9733cc5258cfe9a55c153dab0fd343f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 30 Jul 2023 22:47:39 -0700 Subject: [PATCH 855/935] ok its based now --- src/main/java/baritone/process/ElytraProcess.java | 3 ++- .../java/baritone/process/elytra/ElytraBehavior.java | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index cfcf5373f..761ab78ea 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -164,10 +164,11 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } else if (this.state == State.LANDING) { if (Math.sqrt(ctx.player().motionX * ctx.player().motionX + ctx.player().motionZ * ctx.player().motionZ) > 0.001) { - logDirect("Landed, but still moving, waiting for velocity to die down... " + ctx.player().motionX + " " + ctx.player().motionZ); + logDirect("Landed, but still moving, waiting for velocity to die down... "); baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } + logDirect("Done :)"); baritone.getInputOverrideHandler().clearAllKeys(); this.onLostControl(); return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 211835dda..503944981 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -634,7 +634,10 @@ private Solution solveAngles(final SolverContext context) { for (final Pair candidate : candidates) { final Integer augment = candidate.second(); - final Vec3d dest = candidate.first().add(0, augment, 0); + Vec3d dest = candidate.first().add(0, augment, 0); + if (landingMode) { + dest = dest.add(0.5, 0.5, 0.5); + } if (augment != 0) { if (i + lookahead >= path.size()) { @@ -1079,7 +1082,10 @@ private PitchResult solvePitch(final SolverContext context, final Vec3d goal, fi continue; } final Vec3d last = displacement.get(displacement.size() - 1); - final double goodness = goalDirection.dotProduct(last.normalize()); + double goodness = goalDirection.dotProduct(last.normalize()); + if (landingMode) { + goodness = -goalDelta.subtract(last).length(); + } final PitchResult bestSoFar = bestResults.peek(); if (bestSoFar == null || goodness > bestSoFar.dot) { bestResults.push(new PitchResult(pitch, goodness, displacement)); From 36df7b17f8586083f4d3d541af220480ccb0fb38 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 30 Jul 2023 22:56:33 -0700 Subject: [PATCH 856/935] destroy async --- src/main/java/baritone/process/ElytraProcess.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 761ab78ea..757e9a294 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -252,8 +252,13 @@ public void onLostControl() { this.landingSpot = null; this.reachedGoal = false; this.state = State.START_FLYING; // TODO: null state? - if (this.behavior != null) { - this.behavior.destroy(); + destroyBehaviorAsync(); + } + + private void destroyBehaviorAsync() { + ElytraBehavior behavior = this.behavior; + if (behavior != null) { + Baritone.getExecutor().execute(behavior::destroy); this.behavior = null; } } @@ -353,10 +358,9 @@ public void onRenderPass(RenderEvent event) { @Override public void onWorldEvent(WorldEvent event) { - if (event.getWorld() != null && event.getState() == EventState.POST && this.behavior != null) { + if (event.getWorld() != null && event.getState() == EventState.POST) { // Exiting the world, just destroy - this.behavior.destroy(); - this.behavior = null; + destroyBehaviorAsync(); } } From 134bfb2a164d8263b702a354e67b353460670434 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 30 Jul 2023 23:24:04 -0700 Subject: [PATCH 857/935] fix two cases where it could get stuck indefinitely --- src/main/java/baritone/process/ElytraProcess.java | 11 ++++++++--- .../java/baritone/process/elytra/ElytraBehavior.java | 10 +++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 757e9a294..33acd6d4e 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -149,9 +149,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (ctx.player().posY < endPos.y - LANDING_COLUMN_HEIGHT) { logDirect("bad landing spot, trying again..."); - badLandingSpots.add(endPos); - goingToLandingSpot = false; - this.state = State.FLYING; + landingSpotIsBad(endPos); } } } @@ -245,6 +243,13 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } + public void landingSpotIsBad(BetterBlockPos endPos) { + badLandingSpots.add(endPos); + goingToLandingSpot = false; + this.landingSpot = null; + this.state = State.FLYING; + } + @Override public void onLostControl() { this.goal = null; diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 503944981..4164bae5e 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -219,8 +219,9 @@ public void pathNextSegment(final int afterIncl) { this.recalculating = true; final List before = this.path.subList(0, afterIncl + 1); final long start = System.nanoTime(); + final BetterBlockPos pathStart = this.path.get(afterIncl); - this.path0(this.path.get(afterIncl), ElytraBehavior.this.destination, segment -> segment.prepend(before.stream())) + this.path0(pathStart, ElytraBehavior.this.destination, segment -> segment.prepend(before.stream())) .thenRun(() -> { final int recompute = this.path.size() - before.size() - 1; final double distance = this.path.get(0).distanceTo(this.path.get(recompute)); @@ -237,6 +238,10 @@ public void pathNextSegment(final int afterIncl) { final Throwable cause = ex.getCause(); if (cause instanceof PathCalculationException) { logDirect("Failed to compute next segment"); + if (ctx.player().getDistanceSq(pathStart) < 16 * 16) { + logDirect("Player is near the segment start, therefore repeating this calculation is pointless. Marking as complete"); + completePath = true; + } } else { logUnhandledException(cause); } @@ -260,6 +265,9 @@ private void setPath(final UnpackedSegment segment) { BlockPos last = !path.isEmpty() ? path.get(path.size() - 1) : null; if (last != null && ElytraBehavior.this.clearView(new Vec3d(dest), new Vec3d(last), false)) { path.add(new BetterBlockPos(dest)); + } else { + logDirect("unable to land at " + ElytraBehavior.this.destination); + process.landingSpotIsBad(new BetterBlockPos(ElytraBehavior.this.destination)); } } this.path = new NetherPath(path); From 9630224e7817bd1571308e7805569a4e56688df0 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 30 Jul 2023 23:26:46 -0700 Subject: [PATCH 858/935] whatever --- src/main/java/baritone/process/ElytraProcess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 33acd6d4e..433597d06 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -263,8 +263,8 @@ public void onLostControl() { private void destroyBehaviorAsync() { ElytraBehavior behavior = this.behavior; if (behavior != null) { - Baritone.getExecutor().execute(behavior::destroy); this.behavior = null; + Baritone.getExecutor().execute(behavior::destroy); } } From d921d2e36709f262da4120e0a91fa2a14f70cb1e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 30 Jul 2023 23:33:49 -0700 Subject: [PATCH 859/935] live a little --- src/api/java/baritone/api/Settings.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index d664b569c..4baabfbdd 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1358,7 +1358,7 @@ public final class Settings { /** * The minimum speed that the player can drop to (in blocks/tick) before a firework is automatically deployed. */ - public final Setting elytraFireworkSpeed = new Setting<>(0.6); + public final Setting elytraFireworkSpeed = new Setting<>(1.2); /** * The delay after the player's position is set-back by the server that a firework may be automatically deployed. @@ -1393,7 +1393,7 @@ public final class Settings { /** * Renders the best elytra flight path that was simulated each tick. */ - public final Setting elytraRenderSimulation = new Setting<>(false); + public final Setting elytraRenderSimulation = new Setting<>(true); /** * Automatically path to and jump off of ledges to initiate elytra flight when grounded. From 7662810405a3f73496f6054886674e0009d74a61 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 31 Jul 2023 00:12:01 -0700 Subject: [PATCH 860/935] add back unsegmenting --- src/main/java/baritone/utils/PathRenderer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index a30ec45b7..c04bdf10f 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -129,12 +129,12 @@ public static void drawPath(List positions, int startIndex, Colo int dirY = end.y - start.y; int dirZ = end.z - start.z; - /*while (next + 1 < positions.size() && (!fadeOut || next + 1 < fadeStart) && + while (next + 1 < positions.size() && (!fadeOut || next + 1 < fadeStart) && (dirX == positions.get(next + 1).x - end.x && dirY == positions.get(next + 1).y - end.y && dirZ == positions.get(next + 1).z - end.z)) { end = positions.get(++next); - }*/ + } if (fadeOut) { float alpha; From 83feddf6bedda7b46e400994939f64fdc1501b77 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 31 Jul 2023 00:12:15 -0700 Subject: [PATCH 861/935] recalc if all points out of view --- src/main/java/baritone/process/elytra/ElytraBehavior.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 4164bae5e..cf7db7ac3 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -323,7 +323,11 @@ private void pathfindAroundObstacles() { return; } + boolean canSeeAny = false; for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { + if (ElytraBehavior.this.clearView(ctx.playerFeetAsVec(), this.path.getVec(i), false)) { + canSeeAny = true; + } if (!ElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { // obstacle. where do we return to pathing? // find the next valid segment @@ -344,6 +348,9 @@ private void pathfindAroundObstacles() { return; } } + if (!canSeeAny) { + this.pathRecalcSegment(rangeEndExcl - 1).thenRun(() -> logDirect("Recalculated segment since no path points were visible")); + } } private void attemptNextSegment() { From cc8afe95c5d8cf9f1c028ad8013b8df6b42d5c27 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 31 Jul 2023 00:18:43 -0700 Subject: [PATCH 862/935] setting for nether fortress --- src/api/java/baritone/api/Settings.java | 5 +++++ src/main/java/baritone/process/ElytraProcess.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 4baabfbdd..5262549c2 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1426,6 +1426,11 @@ public final class Settings { */ public final Setting elytraCacheCullDistance = new Setting<>(5000); + /** + * Should elytra consider nether brick a valid landing block + */ + public final Setting elytraAllowLandOnNetherFortress = new Setting<>(false); + /** * A map of lowercase setting field names to their respective setting */ diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 433597d06..f687e39ca 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -423,7 +423,7 @@ private static boolean isInBounds(BlockPos pos) { } private boolean isSafeBlock(Block block) { - return block == Blocks.NETHERRACK || block == Blocks.GRAVEL || block == Blocks.NETHER_BRICK; + return block == Blocks.NETHERRACK || block == Blocks.GRAVEL || (block == Blocks.NETHER_BRICK && Baritone.settings().elytraAllowLandOnNetherFortress.value); } private boolean isSafeBlock(BlockPos pos) { From 541b710ea73cc1a9339c05df34d08095730b06ff Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 31 Jul 2023 00:27:50 -0700 Subject: [PATCH 863/935] too aggressive --- src/main/java/baritone/process/elytra/ElytraBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index cf7db7ac3..65bce93fe 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -348,7 +348,7 @@ private void pathfindAroundObstacles() { return; } } - if (!canSeeAny) { + if (!canSeeAny && rangeStartIncl < rangeEndExcl - 2 && process.state != ElytraProcess.State.GET_TO_JUMP) { this.pathRecalcSegment(rangeEndExcl - 1).thenRun(() -> logDirect("Recalculated segment since no path points were visible")); } } From 64a881f99035920f600ec950eb8de743a74532be Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 31 Jul 2023 01:36:01 -0700 Subject: [PATCH 864/935] elytra warning --- src/api/java/baritone/api/Settings.java | 5 +++ .../command/defaults/ElytraCommand.java | 39 ++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 5262549c2..d7086dad4 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1431,6 +1431,11 @@ public final class Settings { */ public final Setting elytraAllowLandOnNetherFortress = new Setting<>(false); + /** + * Has the user read and understood the elytra terms and conditions + */ + public final Setting elytraTermsAccepted = new Setting<>(false); + /** * A map of lowercase setting field names to their respective setting */ diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 6ba08dba9..a0d39d850 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -17,6 +17,7 @@ package baritone.command.defaults; +import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; @@ -26,6 +27,9 @@ import baritone.api.pathing.goals.Goal; import baritone.api.process.ICustomGoalProcess; import baritone.api.process.IElytraProcess; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.HoverEvent; import java.util.Arrays; import java.util.List; @@ -50,6 +54,11 @@ public void execute(String label, IArgConsumer args) throws CommandException { } if (!args.hasAny()) { + if (!Baritone.settings().elytraTermsAccepted.value && !ctx.player().isElytraFlying()) { + // only gatekeep if they are standing on the ground, don't mess them up in midair lol + gatekeep(); + return; + } Goal iGoal = customGoalProcess.mostRecentGoal(); if (iGoal == null) { throw new CommandInvalidStateException("No goal has been set"); @@ -83,6 +92,32 @@ public void execute(String label, IArgConsumer args) throws CommandException { } } + private void gatekeep() { + TextComponentString gatekeep = new TextComponentString(""); + gatekeep.appendText("Once you've read the below, and entered the seed, run "); + TextComponentString cmd = new TextComponentString(Baritone.settings().prefix.value + "set elytraTermsAccepted true"); + cmd.getStyle().setColor(TextFormatting.GRAY); + gatekeep.appendSibling(cmd); + gatekeep.appendText(" and then try again.\n"); + gatekeep.appendText("Baritone Elytra is an experimental feature. It is only intended for long distance travel in the Nether using fireworks for vanilla boost. It will not work with any other mods (\"hacks\") for non-vanilla boost. "); + TextComponentString gatekeep2 = new TextComponentString("If you want Baritone to attempt to take off from the ground for you, you can enable the elytraAutoJump setting. This may not be advisable on laggy servers. "); + gatekeep2.getStyle().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString(Baritone.settings().prefix.value + "set elytraAutoJump true"))); + gatekeep.appendSibling(gatekeep2); + TextComponentString gatekeep3 = new TextComponentString("If you want Baritone to go slower and use less fireworks, enable the elytraConserveFireworks setting and/or decrease the elytraFireworkSpeed setting. "); + gatekeep3.getStyle().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString(Baritone.settings().prefix.value + "set elytraConserveFireworks true\n" + Baritone.settings().prefix.value + "set elytraFireworkSpeed 0.6\n(the 0.6 number is just an example, tweak to your liking)"))); + gatekeep.appendSibling(gatekeep3); + TextComponentString gatekeep4 = new TextComponentString("Baritone Elytra "); + TextComponentString red = new TextComponentString("needs to know the seed"); + red.getStyle().setColor(TextFormatting.RED).setUnderlined(true).setBold(true); + gatekeep4.appendSibling(red); + gatekeep4.appendText(" of the world you are in. If it doesn't have the correct seed, it will constantly frustratingly recalculate and backtrack. It uses the seed to generate terrain far beyond what you can see, since terrain obstacles in the Nether can be much larger than your render distance. "); + gatekeep.appendSibling(gatekeep4); + TextComponentString gatekeep5 = new TextComponentString("If you're on 2b2t, no need to change anything, since its seed is the default. Otherwise, set it with: " + Baritone.settings().prefix.value + "set elytraNetherSeed seedgoeshere"); + gatekeep5.getStyle().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString("2b2t's nether seed is 146008555100680, so for example you would run\n" + Baritone.settings().prefix.value + "set elytraNetherSeed 146008555100680\n\nAlso, if you're on 2b2t, note that the Nether near spawn is old terrain gen, so you'll see recalculating and backtracking there.\nIt'll only work well further away from spawn/highways."))); + gatekeep.appendSibling(gatekeep5); + logDirect(gatekeep); + } + @Override public Stream tabComplete(String label, IArgConsumer args) throws CommandException { TabCompleteHelper helper = new TabCompleteHelper(); @@ -114,8 +149,8 @@ private static String unsupportedSystemMessage() { final String osArch = System.getProperty("os.arch"); final String osName = System.getProperty("os.name"); return String.format( - "Legacy architectures are not supported. your CPU is %s and your operating system is %s. " + - "Supported architectures are 64 bit x86, and 64 bit arm, supported operating systems are Windows, " + + "Legacy architectures are not supported. Your CPU is %s and your operating system is %s. " + + "Supported architectures are 64 bit x86, and 64 bit ARM. Supported operating systems are Windows, " + "Linux, and Mac", osArch, osName ); From 46f38f2ce7bc170899ef7ff2e82a45f6b00626ec Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 31 Jul 2023 15:06:25 -0700 Subject: [PATCH 865/935] orderly shutdown --- src/main/java/baritone/process/elytra/ElytraBehavior.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 65bce93fe..64615ed8a 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -467,6 +467,11 @@ public void destroy() { this.solver.cancel(true); } this.solverExecutor.shutdown(); + try { + while (!this.solverExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) {} + } catch (InterruptedException e) { + e.printStackTrace(); + } this.context.destroy(); } From c0a1e6540ff312668a9d666433bf5917484a594c Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 31 Jul 2023 16:14:09 -0400 Subject: [PATCH 866/935] simplify smoothLook into one setting and separate smoothLook from freeLook --- src/api/java/baritone/api/Settings.java | 10 ++------- .../java/baritone/behavior/LookBehavior.java | 21 ++++++++++--------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index d7086dad4..46a7f62e2 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -745,16 +745,10 @@ public final class Settings { * Forces the client-sided yaw rotation to an average of the last {@link #smoothLookTicks} of server-sided rotations. * Requires {@link #freeLook}. */ - public final Setting smoothLookYaw = new Setting<>(false); + public final Setting smoothLook = new Setting<>(false); /** - * Forces the client-sided pitch rotation to an average of the last {@link #smoothLookTicks} of server-sided rotations. - * Requires {@link #freeLook}. - */ - public final Setting smoothLookPitch = new Setting<>(false); - - /** - * The number of ticks to average across for {@link #smoothLookYaw} and {@link #smoothLookPitch}; + * The number of ticks to average across for {@link #smoothLook}; */ public final Setting smoothLookTicks = new Setting<>(10); diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 5f6421d08..869b8efb8 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -112,12 +112,15 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { this.smoothPitchBuffer.pop(); } - ctx.player().rotationYaw = Baritone.settings().smoothLookYaw.value - ? (float) this.smoothYawBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getYaw) - : this.prevRotation.getYaw(); - ctx.player().rotationPitch = Baritone.settings().smoothLookPitch.value - ? (float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getPitch) - : this.prevRotation.getPitch(); + if (Baritone.settings().freeLook.value) { + ctx.player().rotationYaw = this.prevRotation.getYaw(); + ctx.player().rotationPitch = this.prevRotation.getPitch(); + } else if (Baritone.settings().smoothLook.value) { + ctx.player().rotationYaw = (float) this.smoothYawBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getYaw); + ctx.player().rotationPitch = ctx.player().isElytraFlying() + ? (float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getPitch) + : this.prevRotation.getPitch(); + } this.prevRotation = null; } @@ -327,12 +330,10 @@ static Mode resolve(IPlayerContext ctx, boolean blockInteract) { final boolean blockFreeLook = settings.blockFreeLook.value; final boolean freeLook = settings.freeLook.value; - if (!freeLook) return CLIENT; + if (!freeLook && !settings.smoothLook.value) return CLIENT; if (!blockFreeLook && blockInteract) return CLIENT; - if (ctx.player().isElytraFlying()) { - return settings.elytraFreeLook.value ? SERVER : CLIENT; - } + // Regardless of if antiCheatCompatibility is enabled, if a blockInteract is requested then the player // rotation needs to be set somehow, otherwise Baritone will halt since objectMouseOver() will just be From 0ca173f5dcb4c770791b93242bf47ee83560a264 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 31 Jul 2023 16:41:10 -0400 Subject: [PATCH 867/935] separate smooth look setting for elytra --- src/api/java/baritone/api/Settings.java | 8 ++++++-- src/main/java/baritone/behavior/LookBehavior.java | 8 ++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 46a7f62e2..051cb5686 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -737,16 +737,20 @@ public final class Settings { public final Setting blockFreeLook = new Setting<>(false); /** - * Automatically elytra fly without having to force the client-sided rotations. Requires {@link #freeLook}. + * Automatically elytra fly without having to force the client-sided rotations. */ public final Setting elytraFreeLook = new Setting<>(false); /** * Forces the client-sided yaw rotation to an average of the last {@link #smoothLookTicks} of server-sided rotations. - * Requires {@link #freeLook}. */ public final Setting smoothLook = new Setting<>(false); + /** + * Same as {@link #smoothLook} but for elytra flying. + */ + public final Setting elytraSmoothLook = new Setting<>(true); + /** * The number of ticks to average across for {@link #smoothLook}; */ diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 869b8efb8..133c00e73 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -112,10 +112,10 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { this.smoothPitchBuffer.pop(); } - if (Baritone.settings().freeLook.value) { + if ((ctx.player().isElytraFlying() && Baritone.settings().elytraFreeLook.value) || (!ctx.player().isElytraFlying() && Baritone.settings().freeLook.value)) { ctx.player().rotationYaw = this.prevRotation.getYaw(); ctx.player().rotationPitch = this.prevRotation.getPitch(); - } else if (Baritone.settings().smoothLook.value) { + } else if ((ctx.player().isElytraFlying() && Baritone.settings().elytraSmoothLook.value) || (!ctx.player().isElytraFlying() && Baritone.settings().smoothLook.value)) { ctx.player().rotationYaw = (float) this.smoothYawBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getYaw); ctx.player().rotationPitch = ctx.player().isElytraFlying() ? (float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getPitch) @@ -328,13 +328,9 @@ static Mode resolve(IPlayerContext ctx, boolean blockInteract) { final Settings settings = Baritone.settings(); final boolean antiCheat = settings.antiCheatCompatibility.value; final boolean blockFreeLook = settings.blockFreeLook.value; - final boolean freeLook = settings.freeLook.value; - if (!freeLook && !settings.smoothLook.value) return CLIENT; if (!blockFreeLook && blockInteract) return CLIENT; - - // Regardless of if antiCheatCompatibility is enabled, if a blockInteract is requested then the player // rotation needs to be set somehow, otherwise Baritone will halt since objectMouseOver() will just be // whatever the player is mousing over visually. Let's just settle for setting it silently. From 7aa3eda3f6d75c5fdaea7a6c4be71921f2e1c34c Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 31 Jul 2023 17:07:38 -0400 Subject: [PATCH 868/935] fix nudgeToLevel with smoothLook --- src/main/java/baritone/behavior/LookBehavior.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 133c00e73..9a43f0099 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -117,9 +117,9 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { ctx.player().rotationPitch = this.prevRotation.getPitch(); } else if ((ctx.player().isElytraFlying() && Baritone.settings().elytraSmoothLook.value) || (!ctx.player().isElytraFlying() && Baritone.settings().smoothLook.value)) { ctx.player().rotationYaw = (float) this.smoothYawBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getYaw); - ctx.player().rotationPitch = ctx.player().isElytraFlying() - ? (float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getPitch) - : this.prevRotation.getPitch(); + if (ctx.player().isElytraFlying()) { + ctx.player().rotationPitch = (float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getPitch); + } } this.prevRotation = null; From 379156951940a04e602dd0409a24bc69847b7768 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Mon, 31 Jul 2023 22:31:45 -0400 Subject: [PATCH 869/935] refactor so that Target.Mode is not a lie fine yes honey --- .../java/baritone/behavior/LookBehavior.java | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 9a43f0099..5c46c6d2f 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -91,10 +91,8 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { // Just return for PRE, we still want to set target to null on POST return; } - if (this.target.mode == Target.Mode.SERVER) { - this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); - } + this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); final Rotation actual = this.processor.peekRotation(this.target.rotation); ctx.player().rotationYaw = actual.getYaw(); ctx.player().rotationPitch = actual.getPitch(); @@ -103,22 +101,21 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { case POST: { // Reset the player's rotations back to their original values if (this.prevRotation != null) { - this.smoothYawBuffer.add(this.target.rotation.getYaw()); + this.smoothYawBuffer.addLast(this.target.rotation.getYaw()); while (this.smoothYawBuffer.size() > Baritone.settings().smoothLookTicks.value) { - this.smoothYawBuffer.pop(); + this.smoothYawBuffer.removeFirst(); } - this.smoothPitchBuffer.add(this.target.rotation.getPitch()); + this.smoothPitchBuffer.addLast(this.target.rotation.getPitch()); while (this.smoothPitchBuffer.size() > Baritone.settings().smoothLookTicks.value) { - this.smoothPitchBuffer.pop(); + this.smoothPitchBuffer.removeFirst(); } - - if ((ctx.player().isElytraFlying() && Baritone.settings().elytraFreeLook.value) || (!ctx.player().isElytraFlying() && Baritone.settings().freeLook.value)) { + if (this.target.mode == Target.Mode.SERVER) { ctx.player().rotationYaw = this.prevRotation.getYaw(); ctx.player().rotationPitch = this.prevRotation.getPitch(); - } else if ((ctx.player().isElytraFlying() && Baritone.settings().elytraSmoothLook.value) || (!ctx.player().isElytraFlying() && Baritone.settings().smoothLook.value)) { - ctx.player().rotationYaw = (float) this.smoothYawBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getYaw); + } else if (ctx.player().isElytraFlying() ? Baritone.settings().elytraSmoothLook.value : Baritone.settings().smoothLook.value) { + ctx.player().rotationYaw = (float) this.smoothYawBuffer.stream().mapToDouble(d -> d).average().orElse(this.prevRotation.getYaw()); if (ctx.player().isElytraFlying()) { - ctx.player().rotationPitch = (float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElseGet(this.prevRotation::getPitch); + ctx.player().rotationPitch = (float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElse(this.prevRotation.getPitch()); } } @@ -329,15 +326,21 @@ static Mode resolve(IPlayerContext ctx, boolean blockInteract) { final boolean antiCheat = settings.antiCheatCompatibility.value; final boolean blockFreeLook = settings.blockFreeLook.value; - if (!blockFreeLook && blockInteract) return CLIENT; - - // Regardless of if antiCheatCompatibility is enabled, if a blockInteract is requested then the player - // rotation needs to be set somehow, otherwise Baritone will halt since objectMouseOver() will just be - // whatever the player is mousing over visually. Let's just settle for setting it silently. - if (antiCheat || blockInteract) return SERVER; + if (ctx.player().isElytraFlying()) { + // always need to set angles while flying + return settings.elytraFreeLook.value ? SERVER : CLIENT; + } else if (settings.freeLook.value) { + // Regardless of if antiCheatCompatibility is enabled, if a blockInteract is requested then the player + // rotation needs to be set somehow, otherwise Baritone will halt since objectMouseOver() will just be + // whatever the player is mousing over visually. Let's just settle for setting it silently. + if (blockInteract) { + return blockFreeLook ? SERVER : CLIENT; + } + return antiCheat ? SERVER : NONE; + } - // Pathing regularly without antiCheatCompatibility, don't set the player rotation - return NONE; + // all freeLook settings are disabled so set the angles + return CLIENT; } } } From 7813a9caba9712c85b42d7f9da995af1cacba374 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 1 Aug 2023 11:30:30 -0700 Subject: [PATCH 870/935] looks better --- src/api/java/baritone/api/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 051cb5686..aeaa55542 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -754,7 +754,7 @@ public final class Settings { /** * The number of ticks to average across for {@link #smoothLook}; */ - public final Setting smoothLookTicks = new Setting<>(10); + public final Setting smoothLookTicks = new Setting<>(5); /** * When true, the player will remain with its existing look direction as often as possible. From 8c1ccd6c19058b7d3f9de4b8a770665b3f3a6388 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 1 Aug 2023 11:45:53 -0700 Subject: [PATCH 871/935] reduce dumb behavior --- src/main/java/baritone/process/elytra/ElytraBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 64615ed8a..9d497932b 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -325,7 +325,7 @@ private void pathfindAroundObstacles() { boolean canSeeAny = false; for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { - if (ElytraBehavior.this.clearView(ctx.playerFeetAsVec(), this.path.getVec(i), false)) { + if (ElytraBehavior.this.clearView(ctx.playerFeetAsVec(), this.path.getVec(i), false) || ElytraBehavior.this.clearView(ctx.playerHead(), this.path.getVec(i), false)) { canSeeAny = true; } if (!ElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { From 70640246b6ca0b83ed1f63de627509bf955e1c81 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 1 Aug 2023 14:11:25 -0700 Subject: [PATCH 872/935] fix infinite memory usage / crash --- src/main/java/baritone/process/ElytraProcess.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index f687e39ca..23ca7647f 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -115,8 +115,8 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (landingSpot != null) { this.pathTo0(landingSpot, true); this.landingSpot = landingSpot; - this.goingToLandingSpot = true; } + this.goingToLandingSpot = true; } if (last != null && ctx.player().getDistanceSqToCenter(last) < 1) { @@ -504,7 +504,7 @@ private BetterBlockPos findSafeLandingSpot(BetterBlockPos start) { while (!queue.isEmpty()) { BetterBlockPos pos = queue.poll(); - if (ctx.world().isBlockLoaded(pos) && isInBounds(pos) && ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) { + if (ctx.world().isBlockLoaded(pos, false) && isInBounds(pos) && ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) { BetterBlockPos actualLandingSpot = checkLandingSpot(pos, checkedPositions); if (actualLandingSpot != null && isColumnAir(actualLandingSpot, LANDING_COLUMN_HEIGHT) && hasAirBubble(actualLandingSpot.up(LANDING_COLUMN_HEIGHT)) && !badLandingSpots.contains(actualLandingSpot.up(LANDING_COLUMN_HEIGHT))) { return actualLandingSpot.up(LANDING_COLUMN_HEIGHT); From f5bd737ee97d5963e8d4f7f78ade428a2f92f804 Mon Sep 17 00:00:00 2001 From: Dennis <43997085+TheAlan404@users.noreply.github.com> Date: Wed, 2 Aug 2023 21:19:35 +0300 Subject: [PATCH 873/935] add badge count badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c6a90ff93..a5bf404e1 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ Code size GitHub repo size Lines of Code + yes

From 139fd03470116b17b7d07e0a6fc00b640552dcbd Mon Sep 17 00:00:00 2001 From: Brady Hahn Date: Wed, 2 Aug 2023 17:07:03 -0500 Subject: [PATCH 874/935] Update lines of code badge to match style --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5bf404e1..b99f4a20c 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ GitHub commits Code size GitHub repo size - Lines of Code + Lines of Code yes

From 0edcf650444219033bfbfecdb0f2bc49cbc0817a Mon Sep 17 00:00:00 2001 From: William Gray Date: Mon, 7 Aug 2023 21:33:42 +0000 Subject: [PATCH 875/935] fix badges --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b99f4a20c..de3241e31 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,8 @@

- forthebadge - forthebadge + forthebadge + forthebadge

A Minecraft pathfinder bot. From 0d461f78a379b4fd5e53f55eb311119b79ff27b8 Mon Sep 17 00:00:00 2001 From: MarvionKirito Date: Wed, 9 Aug 2023 16:35:32 +0800 Subject: [PATCH 876/935] Updated to 1.20.1 for bug fixes and improvements --- .github/ISSUE_TEMPLATE/bug.md | 5 +- .github/ISSUE_TEMPLATE/question.md | 2 +- .github/ISSUE_TEMPLATE/suggestion.md | 2 +- .github/workflows/gradle_build.yml | 56 +- .github/workflows/run_tests.yml | 24 +- CODE_OF_CONDUCT.md | 6 +- FEATURES.md | 80 +-- README.md | 46 +- SETUP.md | 77 +-- USAGE.md | 86 +-- build.gradle | 47 +- buildSrc/build.gradle | 2 +- .../gradle/task/BaritoneGradleTask.java | 55 +- .../baritone/gradle/task/CreateDistTask.java | 35 +- .../baritone/gradle/task/ProguardTask.java | 123 ++-- fabric/build.gradle | 15 +- fabric/src/main/resources/fabric.mod.json | 9 +- forge/build.gradle | 26 - forge/gradle.properties | 1 + .../baritone/launch/BaritoneForgeModXD.java | 4 +- forge/src/main/resources/META-INF/mods.toml | 34 +- gradle.properties | 12 +- settings.gradle | 6 +- .../java/baritone/api/IBaritoneProvider.java | 3 +- src/api/java/baritone/api/Settings.java | 3 +- .../java/baritone/api/behavior/IBehavior.java | 3 +- .../java/baritone/api/cache/ICachedWorld.java | 3 +- .../baritone/api/cache/IWorldScanner.java | 3 +- .../api/command/argument/IArgConsumer.java | 3 +- .../api/command/datatypes/ForDirection.java | 3 +- .../api/command/datatypes/NearbyPlayer.java | 5 +- .../command/datatypes/RelativeGoalBlock.java | 3 +- .../api/command/datatypes/RelativeGoalXZ.java | 3 +- .../command/datatypes/RelativeGoalYLevel.java | 3 +- .../exception/CommandUnhandledException.java | 3 +- .../command/exception/ICommandException.java | 3 +- .../api/command/helpers/Paginator.java | 9 +- .../command/helpers/TabCompleteHelper.java | 3 +- .../listener/AbstractGameEventListener.java | 42 +- .../baritone/api/process/IBuilderProcess.java | 18 - .../baritone/api/process/IFarmProcess.java | 8 +- .../baritone/api/process/IFollowProcess.java | 3 +- .../baritone/api/process/IMineProcess.java | 3 +- .../api/schematic/CompositeSchematic.java | 3 +- .../baritone/api/schematic/FillSchematic.java | 1 + .../baritone/api/schematic/ISchematic.java | 6 +- .../baritone/api/schematic/MaskSchematic.java | 3 +- .../baritone/api/utils/BetterBlockPos.java | 3 +- .../baritone/api/utils/BlockOptionalMeta.java | 49 +- .../api/utils/BlockOptionalMetaLookup.java | 7 +- .../java/baritone/api/utils/BlockUtils.java | 9 +- src/api/java/baritone/api/utils/Helper.java | 5 +- .../baritone/api/utils/IPlayerContext.java | 21 +- .../baritone/api/utils/RayTraceUtils.java | 5 +- .../baritone/api/utils/RotationUtils.java | 14 +- .../java/baritone/api/utils/SettingsUtil.java | 2 +- .../java/baritone/api/utils/TypeUtils.java | 3 +- src/api/java/baritone/api/utils/VecUtils.java | 3 +- .../baritone/api/utils/gui/BaritoneToast.java | 14 +- .../launch/mixins/MixinChunkArray.java | 4 +- .../mixins/MixinClientChunkProvider.java | 4 +- .../mixins/MixinClientPlayNetHandler.java | 11 +- .../mixins/MixinClientPlayerEntity.java | 2 + .../mixins/MixinCommandSuggestionHelper.java | 4 +- .../launch/mixins/MixinLivingEntity.java | 2 + .../launch/mixins/MixinLootContext.java | 23 +- .../launch/mixins/MixinMinecraft.java | 33 +- .../launch/mixins/MixinNetworkManager.java | 2 + .../baritone/launch/mixins/MixinScreen.java | 6 +- src/main/java/baritone/Baritone.java | 6 +- src/main/java/baritone/KeepName.java | 3 +- .../baritone/behavior/InventoryBehavior.java | 10 +- .../java/baritone/behavior/LookBehavior.java | 2 +- .../baritone/behavior/PathingBehavior.java | 9 +- src/main/java/baritone/cache/CachedChunk.java | 9 +- .../java/baritone/cache/CachedRegion.java | 11 +- src/main/java/baritone/cache/CachedWorld.java | 11 +- src/main/java/baritone/cache/ChunkPacker.java | 13 +- .../baritone/cache/WaypointCollection.java | 6 +- .../java/baritone/cache/WorldProvider.java | 17 +- .../java/baritone/cache/WorldScanner.java | 5 +- .../command/ExampleBaritoneControl.java | 11 +- .../command/argument/CommandArguments.java | 3 +- .../command/defaults/ComeCommand.java | 3 +- .../command/defaults/FindCommand.java | 1 + .../command/defaults/FollowCommand.java | 8 +- .../command/defaults/HelpCommand.java | 12 +- .../baritone/command/defaults/SelCommand.java | 3 +- .../baritone/command/defaults/SetCommand.java | 10 +- .../command/defaults/SurfaceCommand.java | 3 +- .../command/defaults/TunnelCommand.java | 5 +- .../command/defaults/WaypointsCommand.java | 12 +- .../java/baritone/event/GameEventHandler.java | 5 +- .../pathing/calc/AStarPathFinder.java | 3 +- .../pathing/movement/CalculationContext.java | 6 +- .../baritone/pathing/movement/Movement.java | 9 +- .../pathing/movement/MovementHelper.java | 45 +- .../movement/movements/MovementAscend.java | 3 +- .../movement/movements/MovementDescend.java | 61 +- .../movement/movements/MovementDiagonal.java | 111 ++-- .../movement/movements/MovementDownward.java | 3 +- .../movement/movements/MovementFall.java | 41 +- .../movement/movements/MovementParkour.java | 2 +- .../movement/movements/MovementPillar.java | 11 +- .../movement/movements/MovementTraverse.java | 11 +- .../baritone/pathing/path/PathExecutor.java | 165 +++-- .../baritone/process/BackfillProcess.java | 5 +- .../java/baritone/process/BuilderProcess.java | 592 ++++++++---------- .../java/baritone/process/ExploreProcess.java | 5 +- .../java/baritone/process/FarmProcess.java | 12 +- .../java/baritone/process/FollowProcess.java | 5 +- .../baritone/process/GetToBlockProcess.java | 32 +- .../java/baritone/process/MineProcess.java | 515 ++++++++------- .../baritone/selection/SelectionManager.java | 3 +- .../baritone/utils/BlockStateInterface.java | 24 +- .../BlockStateInterfaceAccessWrapper.java | 3 +- src/main/java/baritone/utils/GuiClick.java | 9 +- src/main/java/baritone/utils/IRenderer.java | 6 +- .../baritone/utils/InputOverrideHandler.java | 1 - .../java/baritone/utils/PathRenderer.java | 18 +- .../baritone/utils/PathingControlManager.java | 3 +- src/main/java/baritone/utils/ToolSet.java | 64 +- .../baritone/utils/accessor/IChunkArray.java | 3 +- .../baritone/utils/pathing/Avoidance.java | 7 +- .../utils/player/PrimaryPlayerController.java | 1 + .../utils/schematic/MapArtSchematic.java | 5 +- .../utils/schematic/StaticSchematic.java | 3 +- .../format/DefaultSchematicFormats.java | 4 +- .../format/defaults/MCEditSchematic.java | 1 + .../format/defaults/SpongeSchematic.java | 48 +- .../schematica/SchematicAdapter.java | 3 +- .../schematica/SchematicaHelper.java | 1 - .../schematica/proxy/CommonProxy.java | 3 +- .../pathing/goals/GoalGetToBlockTest.java | 2 +- tweaker/build.gradle | 24 - 135 files changed, 1456 insertions(+), 1714 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index edb250c3a..b686a589f 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -11,7 +11,7 @@ Operating system: Java version: Minecraft version: Baritone version: -Other mods (if used): +Other mods (if used): ## Exception, error or logs Please find your `latest.log` or `debug.log` in this folder and attach it to the issue @@ -29,8 +29,7 @@ Add your steps to reproduce the issue/bug experienced here. To get the modified settings run `#modified` in game ## Final checklist - -- [x] I know how to properly use check boxes +- [x] I know how to properly use check boxes - [ ] I have included the version of Minecraft I'm running, baritone's version and forge mods (if used). - [ ] I have included logs, exceptions and / or steps to reproduce the issue. - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index db70a6850..b5de2dfd3 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -10,5 +10,5 @@ assignees: '' With as much detail as possible, describe your question and what you may need help with. ## Final checklist -- [x] I know how to properly use check boxes +- [x] I know how to properly use check boxes - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/ISSUE_TEMPLATE/suggestion.md b/.github/ISSUE_TEMPLATE/suggestion.md index 1ee32142b..9f7a30bf7 100644 --- a/.github/ISSUE_TEMPLATE/suggestion.md +++ b/.github/ISSUE_TEMPLATE/suggestion.md @@ -16,5 +16,5 @@ If applicable, what settings/customizability should be offered to tweak the func Describe how your suggestion would improve Baritone, or the reason behind it being added. ## Final checklist -- [x] I know how to properly use check boxes +- [x] I know how to properly use check boxes - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 8ab9ee0c4..08e9ab1d3 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -13,31 +13,31 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - cache: gradle - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Build with Gradle - run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)" - - - name: Archive Artifacts - uses: actions/upload-artifact@v3 - with: - name: Artifacts - path: dist/ - - - name: Archive mapping.txt - uses: actions/upload-artifact@v3 - with: - name: Mappings - path: mapping/ + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build with Gradle + run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)" + + - name: Archive Artifacts + uses: actions/upload-artifact@v3 + with: + name: Artifacts + path: dist/ + + - name: Archive mapping.txt + uses: actions/upload-artifact@v3 + with: + name: Mappings + path: mapping/ diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 1c10740bc..34d52e54c 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -11,16 +11,16 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Executing tests - run: ./gradlew test + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Executing tests + run: ./gradlew test diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 20538e8e3..474ecf7e6 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -25,13 +25,13 @@ Examples of unacceptable behavior by participants include: * Anime * The use of sexualized language or imagery and unwelcome sexual attention or - advances + advances * ~~Trolling, insulting/derogatory comments, and personal or political attacks~~ * Public or private harassment * Publishing others' private information, such as a physical or electronic - address, without explicit permission or consent + address, without explicit permission or consent * Other conduct which could reasonably be considered inappropriate in a - professional setting + professional setting ## Our Responsibilities diff --git a/FEATURES.md b/FEATURES.md index e0f6e7d2d..372a77410 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -1,77 +1,33 @@ # Pathing features -- **Long distance pathing and splicing** Baritone calculates paths in segments, and precalculates the next segment when - the current one is about to end, so that it's moving towards the goal at all times. -- **Chunk caching** Baritone simplifies chunks to a compacted internal 2-bit representation (AIR, SOLID, WATER, AVOID) - and stores them in RAM for better very-long-distance pathing. There is also an option to save these cached chunks to - disk. Example -- **Block breaking** Baritone considers breaking blocks as part of its path. It also takes into account your current - tool set and hot bar. For example, if you have a Eff V diamond pick, it may choose to mine through a stone barrier, - while if you only had a wood pick it might be faster to climb over it. -- **Block placing** Baritone considers placing blocks as part of its path. This includes sneak-back-placing, pillaring, - etc. It has a configurable penalty of placing a block (set to 1 second by default), to conserve its resources. The - list of acceptable throwaway blocks is also configurable, and is cobble, dirt, or netherrack by - default. Example -- **Falling** Baritone will fall up to 3 blocks onto solid ground (configurable, if you have Feather Falling and/or - don't mind taking a little damage). If you have a water bucket on your hotbar, it will fall up to 23 blocks and place - the bucket beneath it. It will fall an unlimited distance into existing still water. -- **Vines and ladders** Baritone understands how to climb and descend vines and ladders. There is experimental support - for more advanced maneuvers, like strafing to a different ladder / vine column in midair (off by default, setting - named `allowVines`). Baritone can break its fall by grabbing ladders / vines midair, and understands when that is and - isn't possible. +- **Long distance pathing and splicing** Baritone calculates paths in segments, and precalculates the next segment when the current one is about to end, so that it's moving towards the goal at all times. +- **Chunk caching** Baritone simplifies chunks to a compacted internal 2-bit representation (AIR, SOLID, WATER, AVOID) and stores them in RAM for better very-long-distance pathing. There is also an option to save these cached chunks to disk. Example +- **Block breaking** Baritone considers breaking blocks as part of its path. It also takes into account your current tool set and hot bar. For example, if you have a Eff V diamond pick, it may choose to mine through a stone barrier, while if you only had a wood pick it might be faster to climb over it. +- **Block placing** Baritone considers placing blocks as part of its path. This includes sneak-back-placing, pillaring, etc. It has a configurable penalty of placing a block (set to 1 second by default), to conserve its resources. The list of acceptable throwaway blocks is also configurable, and is cobble, dirt, or netherrack by default. Example +- **Falling** Baritone will fall up to 3 blocks onto solid ground (configurable, if you have Feather Falling and/or don't mind taking a little damage). If you have a water bucket on your hotbar, it will fall up to 23 blocks and place the bucket beneath it. It will fall an unlimited distance into existing still water. +- **Vines and ladders** Baritone understands how to climb and descend vines and ladders. There is experimental support for more advanced maneuvers, like strafing to a different ladder / vine column in midair (off by default, setting named `allowVines`). Baritone can break its fall by grabbing ladders / vines midair, and understands when that is and isn't possible. - **Opening fence gates and doors** - **Slabs and stairs** -- **Falling blocks** Baritone understands the costs of breaking blocks with falling blocks on top, and includes all of - their break costs. Additionally, since it avoids breaking any blocks touching a liquid, it won't break the bottom of a - gravel stack below a lava lake (anymore). -- **Avoiding dangerous blocks** Obviously, it knows not to walk through fire or on magma, not to corner over lava (that - deals some damage), not to break any blocks touching a liquid (it might drown), etc. +- **Falling blocks** Baritone understands the costs of breaking blocks with falling blocks on top, and includes all of their break costs. Additionally, since it avoids breaking any blocks touching a liquid, it won't break the bottom of a gravel stack below a lava lake (anymore). +- **Avoiding dangerous blocks** Obviously, it knows not to walk through fire or on magma, not to corner over lava (that deals some damage), not to break any blocks touching a liquid (it might drown), etc. - **Parkour** Sprint jumping over 1, 2, or 3 block gaps -- **Parkour place** Sprint jumping over a 3 block gap and placing the block to land on while executing the jump. It's - really cool. +- **Parkour place** Sprint jumping over a 3 block gap and placing the block to land on while executing the jump. It's really cool. - **Pigs** It can sort of control pigs. I wouldn't rely on it though. # Pathing method +Baritone uses A*, with some modifications: -Baritone uses A*, with some modifications: - -- **Segmented calculation** Traditional A* calculates until the most promising node is in the goal, however in the - environment of Minecraft with a limited render distance, we don't know the environment all the way to our goal. - Baritone has three possible ways for path calculation to end: finding a path all the way to the goal, running out of - time, or getting to the render distance. In the latter two scenarios, the selection of which segment to actually - execute falls to the next item (incremental cost backoff). Whenever the path calculation thread finds that the best / - most promising node is at the edge of loaded chunks, it increments a counter. If this happens more than 50 times ( - configurable), path calculation exits early. This happens with very low render distances. Otherwise, calculation - continues until the timeout is hit (also configurable) or we find a path all the way to the goal. -- **Incremental cost backoff** When path calculation exits early without getting all the way to the goal, Baritone it - needs to select a segment to execute first (assuming it will calculate the next segment at the end of this one). It - uses incremental cost backoff to select the best node by varying metrics, then paths to that node. This is unchanged - from MineBot and I made - a write-up that - still applies. In essence, it keeps track of the best node by various increasing coefficients, then picks the node - with the least coefficient that goes at least 5 blocks from the starting position. -- **Minimum improvement repropagation** The pathfinder ignores alternate routes that provide minimal improvements (less - than 0.01 ticks of improvement), because the calculation cost of repropagating this to all connected nodes is much - higher than the half-millisecond path time improvement it would get. -- **Backtrack cost favoring** While calculating the next segment, Baritone favors backtracking its current segment. The - cost is decreased heavily, but is still positive (this won't cause it to backtrack if it doesn't need to). This allows - it to splice and jump onto the next segment as early as possible, if the next segment begins with a backtrack of the - current one. Example -- **Backtrack detection and pausing** While path calculation happens on a separate thread, the main game thread has - access to the latest node considered, and the best path so far (those are rendered light blue and dark blue - respectively). When the current best path (rendered dark blue) passes through the player's current position on the - current path segment, path execution is paused (if it's safe to do so), because there's no point continuing forward if - we're about to turn around and go back that same way. Note that the current best path as reported by the path - calculation thread takes into account the incremental cost backoff system, so it's accurate to what the path - calculation thread will actually pick once it finishes. +- **Segmented calculation** Traditional A* calculates until the most promising node is in the goal, however in the environment of Minecraft with a limited render distance, we don't know the environment all the way to our goal. Baritone has three possible ways for path calculation to end: finding a path all the way to the goal, running out of time, or getting to the render distance. In the latter two scenarios, the selection of which segment to actually execute falls to the next item (incremental cost backoff). Whenever the path calculation thread finds that the best / most promising node is at the edge of loaded chunks, it increments a counter. If this happens more than 50 times (configurable), path calculation exits early. This happens with very low render distances. Otherwise, calculation continues until the timeout is hit (also configurable) or we find a path all the way to the goal. +- **Incremental cost backoff** When path calculation exits early without getting all the way to the goal, Baritone it needs to select a segment to execute first (assuming it will calculate the next segment at the end of this one). It uses incremental cost backoff to select the best node by varying metrics, then paths to that node. This is unchanged from MineBot and I made a write-up that still applies. In essence, it keeps track of the best node by various increasing coefficients, then picks the node with the least coefficient that goes at least 5 blocks from the starting position. +- **Minimum improvement repropagation** The pathfinder ignores alternate routes that provide minimal improvements (less than 0.01 ticks of improvement), because the calculation cost of repropagating this to all connected nodes is much higher than the half-millisecond path time improvement it would get. +- **Backtrack cost favoring** While calculating the next segment, Baritone favors backtracking its current segment. The cost is decreased heavily, but is still positive (this won't cause it to backtrack if it doesn't need to). This allows it to splice and jump onto the next segment as early as possible, if the next segment begins with a backtrack of the current one. Example +- **Backtrack detection and pausing** While path calculation happens on a separate thread, the main game thread has access to the latest node considered, and the best path so far (those are rendered light blue and dark blue respectively). When the current best path (rendered dark blue) passes through the player's current position on the current path segment, path execution is paused (if it's safe to do so), because there's no point continuing forward if we're about to turn around and go back that same way. Note that the current best path as reported by the path calculation thread takes into account the incremental cost backoff system, so it's accurate to what the path calculation thread will actually pick once it finishes. # Chat control - [Baritone chat control usage](USAGE.md) # Goals - The pathing goal can be set to any of these options: - - **GoalBlock** one specific block that the player should stand inside at foot level - **GoalXZ** an X and a Z coordinate, used for long distance pathing - **GoalYLevel** a Y coordinate @@ -80,13 +36,11 @@ The pathing goal can be set to any of these options: - **GoalNear** a block position that the player should get within a certain radius of, used for following entities - **GoalAxis** a block position on an axis or diagonal axis (so x=0, z=0, or x=z), and y=120 (configurable) -And finally `GoalComposite`. `GoalComposite` is a list of other goals, any one of which satisfies the goal. For -example, `mine diamond_ore` creates a `GoalComposite` of `GoalTwoBlocks`s for every diamond ore location it knows of. +And finally `GoalComposite`. `GoalComposite` is a list of other goals, any one of which satisfies the goal. For example, `mine diamond_ore` creates a `GoalComposite` of `GoalTwoBlocks`s for every diamond ore location it knows of. -# Future features +# Future features Things it doesn't have yet - - Trapdoors - Sprint jumping in a 1x2 corridor diff --git a/README.md b/README.md index d723db1d5..e2c83ddec 100644 --- a/README.md +++ b/README.md @@ -50,39 +50,22 @@ A Minecraft pathfinder bot. [**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) -Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's -a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I -recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. +Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. [Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) -The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The -second easiest way (for 1.12.2 only) is to -install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, -just click -[here](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar)**. Otherwise, -see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use -it. - -For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric -1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` -jar. **For 1.16.5 Fabric, just -click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. - -If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get -the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just -click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**. - -If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get -the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just -click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For -1.18.2 Forge, just -click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. +The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to +install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click +[here](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. + +For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. + +If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**. + +If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), -the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and -particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) -than MineBot at calculating paths). +the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). Have committed at least once a day from Aug 1, 2018, to Aug 1, 2019. @@ -135,12 +118,9 @@ Magic. (Hours of [leijurv](https://github.com/leijurv/) enduring excruciating pa ![YourKit-Logo](https://www.yourkit.com/images/yklogo.png) -YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET -applications. +YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET applications. -YourKit is the creator of -the [YourKit Java Profiler](https://www.yourkit.com/java/profiler/), [YourKit .NET Profiler](https://www.yourkit.com/.net/profiler/), -and [YourKit YouMonitor](https://www.yourkit.com/youmonitor/). +YourKit is the creator of the [YourKit Java Profiler](https://www.yourkit.com/java/profiler/), [YourKit .NET Profiler](https://www.yourkit.com/.net/profiler/), and [YourKit YouMonitor](https://www.yourkit.com/youmonitor/). We thank them for granting Baritone an OSS license so that we can make our software the best it can be. diff --git a/SETUP.md b/SETUP.md index 6cbc967cd..57866b192 100644 --- a/SETUP.md +++ b/SETUP.md @@ -2,49 +2,34 @@ The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. -You can also use a custom version json for Minecraft, with -the [1.14.4](https://www.dropbox.com/s/rkml3hjokd3qv0m/1.14.4-Baritone.zip?dl=1) version or -the [1.15.2](https://www.dropbox.com/s/8rx6f0kts9hvd4f/1.15.2-Baritone.zip?dl=1) version or -the [1.16.5](https://www.dropbox.com/s/i6f292o2i7o9acp/1.16.5-Baritone.zip?dl=1) version. +You can also use a custom version json for Minecraft, with the [1.14.4](https://www.dropbox.com/s/rkml3hjokd3qv0m/1.14.4-Baritone.zip?dl=1) version or the [1.15.2](https://www.dropbox.com/s/8rx6f0kts9hvd4f/1.15.2-Baritone.zip?dl=1) version or the [1.16.5](https://www.dropbox.com/s/i6f292o2i7o9acp/1.16.5-Baritone.zip?dl=1) version. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. ## Prebuilt official releases - -These releases are not always completely up to date with latest features, and are only released from `master`. (so if -you want `backfill-2` branch for example, you'll have to build it yourself) +These releases are not always completely up to date with latest features, and are only released from `master`. (so if you want `backfill-2` branch for example, you'll have to build it yourself) Link to the releases page: [Releases](https://github.com/cabaletta/baritone/releases) -v1.2.* is for 1.12.2, v1.3.* is for 1.13.2, v1.4.* is for 1.14.4, v1.5.* is for 1.15.2, v1.6.* is for 1.16.5, v1.7.* is -for 1.17.1, v1.8.* is for 1.18.1 +v1.2.* is for 1.12.2, v1.3.* is for 1.13.2, v1.4.* is for 1.14.4, v1.5.* is for 1.15.2, v1.6.* is for 1.16.5, v1.7.* is for 1.17.1, v1.8.* is for 1.18.1 + +Any official release will be GPG signed by leijurv (44A3EA646EADAC6A). Please verify that the hash of the file you download is in `checksums.txt` and that `checksums_signed.asc` is a valid signature by that public keys of `checksums.txt`. -Any official release will be GPG signed by leijurv (44A3EA646EADAC6A). Please verify that the hash of the file you -download is in `checksums.txt` and that `checksums_signed.asc` is a valid signature by that public keys -of `checksums.txt`. +The build is fully deterministic and reproducible, and you can verify Travis did it properly by running `docker build --no-cache -t cabaletta/baritone .` yourself and comparing the shasum. This works identically on Travis, Mac, and Linux (if you have docker on Windows, I'd be grateful if you could let me know if it works there too). -The build is fully deterministic and reproducible, and you can verify Travis did it properly by -running `docker build --no-cache -t cabaletta/baritone .` yourself and comparing the shasum. This works identically on -Travis, Mac, and Linux (if you have docker on Windows, I'd be grateful if you could let me know if it works there too). ## Artifacts -Building Baritone will result in 5 artifacts created in the ``dist`` directory. These are the same as the artifacts -created in the [releases](https://github.com/cabaletta/baritone/releases). +Building Baritone will result in 5 artifacts created in the ``dist`` directory. These are the same as the artifacts created in the [releases](https://github.com/cabaletta/baritone/releases). **The Forge and Fabric releases can simply be added as a Forge/Fabric mods.** -If another one of your Forge mods has a Baritone integration, you want `baritone-api-forge-VERSION.jar`. Otherwise, you -want `baritone-standalone-forge-VERSION.jar` - -- **API**: Only the non-api packages are obfuscated. This should be used in environments where other mods would like to - use Baritone's features. -- **Forge/Fabric API**: Same as API, but packaged for Forge/Fabric. This should be used where another mod has a Baritone - integration. -- **Standalone**: Everything is obfuscated. This should be used in environments where there are no other mods present - that would like to use Baritone's features. -- **Forge/Fabric Standalone**: Same as Standalone, but packaged for Forge/Fabric. This should be used when Baritone is - your only Forge/Fabric mod, or none of your other Forge/Fabric mods integrate with Baritone. +If another one of your Forge mods has a Baritone integration, you want `baritone-api-forge-VERSION.jar`. Otherwise, you want `baritone-standalone-forge-VERSION.jar` + +- **API**: Only the non-api packages are obfuscated. This should be used in environments where other mods would like to use Baritone's features. +- **Forge/Fabric API**: Same as API, but packaged for Forge/Fabric. This should be used where another mod has a Baritone integration. +- **Standalone**: Everything is obfuscated. This should be used in environments where there are no other mods present that would like to use Baritone's features. +- **Forge/Fabric Standalone**: Same as Standalone, but packaged for Forge/Fabric. This should be used when Baritone is your only Forge/Fabric mod, or none of your other Forge/Fabric mods integrate with Baritone. - **Unoptimized**: Nothing is obfuscated. This shouldn't be used ever in production. - **Forge/Fabric Unoptimized**: Same as Unoptimized, but packaged for Forge/Fabric. @@ -56,36 +41,30 @@ want `baritone-standalone-forge-VERSION.jar` - Follow one of the instruction sets below, based on your preference ## Command Line - On Mac OSX and Linux, use `./gradlew` instead of `gradlew`. -If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 -for 1.12.2-1.16.5, JDK 16 for 1.17.1, and JDK 17 for 1.18.1. +If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 for 1.12.2-1.16.5, JDK 16 for 1.17.1, and JDK 17 for 1.18.1. -To check which java you are using do +To check which java you are using do `java -version` in a command prompt or terminal. -If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work because the Java distributions above JDK -8 using may not have the needed javax classes. +If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work because the Java distributions above JDK 8 using may not have the needed javax classes. Open JDK download: https://openjdk.java.net/install/ #### macOS guide - In order to get JDK 8, Try running the following command: `% /usr/libexec/java_home -V` -If it doesn't work try this -guide: https://stackoverflow.com/questions/46513639/how-to-downgrade-java-from-9-to-8-on-a-macos-eclipse-is-not-running-with-java-9 +If it doesn't work try this guide: https://stackoverflow.com/questions/46513639/how-to-downgrade-java-from-9-to-8-on-a-macos-eclipse-is-not-running-with-java-9 If you see something like -`% 1.8.0_VERSION, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_VERSION.jdk/Contents/Home` +`% 1.8.0_VERSION, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_VERSION.jdk/Contents/Home` -in the list then you've got JDK 8 installed. -In order to get JDK 8 running in the **current terminal window** you will have to run this command: +in the list then you've got JDK 8 installed. +In order to get JDK 8 running in the **current terminal window** you will have to run this command: `% export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)` -To add OpenJDK 8 to your PATH add the export line to the end of your `.zshrc / .bashrc` if you want it to apply to each -new terminal. If you're using bash change the .bachrc and if you're using zsh change the .zshrc +To add OpenJDK 8 to your PATH add the export line to the end of your `.zshrc / .bashrc` if you want it to apply to each new terminal. If you're using bash change the .bachrc and if you're using zsh change the .zshrc Setting up the Environment: @@ -94,7 +73,7 @@ $ gradlew setupDecompWorkspace $ gradlew --refresh-dependencies ``` -Building Baritone: +Building Baritone: ``` $ gradlew build @@ -122,27 +101,27 @@ For information on how to build baritone, see [Building Baritone](#building-bari ## IntelliJ - Open the project in IntelliJ as a Gradle project - + ![Image](https://i.imgur.com/jw7Q6vY.png) - Run the Gradle tasks `setupDecompWorkspace` then `genIntellijRuns` - + ![Image](https://i.imgur.com/QEfVvWP.png) - Refresh the Gradle project (or, to be safe, just restart IntelliJ) - + ![Image](https://i.imgur.com/3V7EdWr.png) - Select the "Minecraft Client" launch config - + ![Image](https://i.imgur.com/1qz2QGV.png) - Click on ``Edit Configurations...`` from the same dropdown and select the "Minecraft Client" config - + ![Image](https://i.imgur.com/s4ly0ZF.png) - In `Edit Configurations...` you need to select `baritone_launch` for `Use classpath of module:`. - + ![Image](https://i.imgur.com/hrLhG9u.png) ## IntelliJ diff --git a/USAGE.md b/USAGE.md index 485b295e7..46241e3fe 100644 --- a/USAGE.md +++ b/USAGE.md @@ -2,16 +2,11 @@ # Prefix -Baritone's chat control prefix is `#` by default. In Impact, you can also use `.b` as a prefix. (for example, `.b click` -instead of `#click`) +Baritone's chat control prefix is `#` by default. In Impact, you can also use `.b` as a prefix. (for example, `.b click` instead of `#click`) -Baritone commands can also by default be typed in the chatbox. However if you make a typo, like typing "gola 10000 -10000" instead of "goal" it goes into public chat, which is bad, so using `#` is suggested. +Baritone commands can also by default be typed in the chatbox. However if you make a typo, like typing "gola 10000 10000" instead of "goal" it goes into public chat, which is bad, so using `#` is suggested. -To disable direct chat control (with no prefix), turn off the `chatControl` setting. To disable chat control with -the `#` prefix, turn off the `prefixControl` setting. In Impact, `.b` cannot be disabled. Be careful that you don't -leave yourself with all control methods disabled (if you do, reset your settings by deleting the -file `minecraft/baritone/settings.txt` and relaunching). +To disable direct chat control (with no prefix), turn off the `chatControl` setting. To disable chat control with the `#` prefix, turn off the `prefixControl` setting. In Impact, `.b` cannot be disabled. Be careful that you don't leave yourself with all control methods disabled (if you do, reset your settings by deleting the file `minecraft/baritone/settings.txt` and relaunching). # For Baritone 1.2.10+, 1.3.5+, 1.4.2+ @@ -21,7 +16,7 @@ Try `#help` I promise it won't just send you back here =) "wtf where is cleararea" -> look at `#help sel` -"wtf where is goto death, goto waypoint" -> look at `#help wp` +"wtf where is goto death, goto waypoint" -> look at `#help wp` just look at `#help` lmao @@ -35,70 +30,43 @@ Watch this [showcase video](https://youtu.be/CZkLXWo4Fg4)! `help` -To toggle a boolean setting, just say its name in chat (for example saying `allowBreak` toggles whether Baritone will -consider breaking blocks). For a numeric setting, say its name then the new value (like `primaryTimeoutMS 250`). It's -case insensitive. To reset a setting to its default value, say `acceptableThrowawayItems reset`. To reset all settings, -say `reset`. To see all settings that have been modified from their default values, say `modified`. +To toggle a boolean setting, just say its name in chat (for example saying `allowBreak` toggles whether Baritone will consider breaking blocks). For a numeric setting, say its name then the new value (like `primaryTimeoutMS 250`). It's case insensitive. To reset a setting to its default value, say `acceptableThrowawayItems reset`. To reset all settings, say `reset`. To see all settings that have been modified from their default values, say `modified`. Commands in Baritone: - - `thisway 1000` then `path` to go in the direction you're facing for a thousand blocks - `goal x y z` or `goal x z` or `goal y`, then `path` to set a goal to a certain coordinate then path to it - `goto x y z` or `goto x z` or `goto y` to go to a certain coordinate (in a single step, starts going immediately) - `goal` to set the goal to your player's feet - `goal clear` to clear the goal - `cancel` or `stop` to stop everything, `forcecancel` is also an option -- `goto portal` or `goto ender_chest` or `goto block_type` to go to a block. (in Impact, `.goto` is an alias - for `.b goto` for the most part) -- `mine diamond_ore iron_ore` to mine diamond ore or iron ore (turn on the setting `legitMine` to only mine ores that it - can actually see. It will explore randomly around y=11 until it finds them.) An amount of blocks can also be - specified, for example, `mine 64 diamond_ore`. -- `click` to click your destination on the screen. Right click path to on top of the block, left click to path into it ( - either at foot level or eye level), and left click and drag to select an area (`#help sel` to see what you can do with - that selection). -- `follow player playerName` to follow a player. `follow players` to follow any players in range (combine with Kill Aura - for a fun time). `follow entities` to follow any entities. `follow entity pig` to follow entities of a specific type. -- `wp` for waypoints. A "tag" is like "home" (created automatically on right clicking a bed) or "death" (created - automatically on death) or "user" (has to be created manually). So you might want `#wp save user coolbiome`, then to - set the goal `#wp goal coolbiome` then `#path` to path to it. For death, `#wp goal death` will list waypoints under - the "death" tag (remember stuff is clickable!) -- `build` to build a schematic. `build blah.schematic` will load `schematics/blah.schematic` and build it with the - origin being your player feet. `build blah.schematic x y z` to set the origin. Any of those can be relative to your - player (`~ 69 ~-420` would build at x=player x, y=69, z=player z-420). +- `goto portal` or `goto ender_chest` or `goto block_type` to go to a block. (in Impact, `.goto` is an alias for `.b goto` for the most part) +- `mine diamond_ore iron_ore` to mine diamond ore or iron ore (turn on the setting `legitMine` to only mine ores that it can actually see. It will explore randomly around y=11 until it finds them.) An amount of blocks can also be specified, for example, `mine 64 diamond_ore`. +- `click` to click your destination on the screen. Right click path to on top of the block, left click to path into it (either at foot level or eye level), and left click and drag to select an area (`#help sel` to see what you can do with that selection). +- `follow player playerName` to follow a player. `follow players` to follow any players in range (combine with Kill Aura for a fun time). `follow entities` to follow any entities. `follow entity pig` to follow entities of a specific type. +- `wp` for waypoints. A "tag" is like "home" (created automatically on right clicking a bed) or "death" (created automatically on death) or "user" (has to be created manually). So you might want `#wp save user coolbiome`, then to set the goal `#wp goal coolbiome` then `#path` to path to it. For death, `#wp goal death` will list waypoints under the "death" tag (remember stuff is clickable!) +- `build` to build a schematic. `build blah.schematic` will load `schematics/blah.schematic` and build it with the origin being your player feet. `build blah.schematic x y z` to set the origin. Any of those can be relative to your player (`~ 69 ~-420` would build at x=player x, y=69, z=player z-420). - `schematica` to build the schematic that is currently open in schematica -- `tunnel` to dig and make a tunnel, 1x2. It will only deviate from the straight line if necessary such as to avoid - lava. For a dumber tunnel that is really just cleararea, you can `tunnel 3 2 100`, to clear an area 3 high, 2 wide, - and 100 deep. -- `farm` to automatically harvest, replant, or bone meal crops. Use `farm ` or `farm ` to limit - the max distance from the starting point or a waypoint. +- `tunnel` to dig and make a tunnel, 1x2. It will only deviate from the straight line if necessary such as to avoid lava. For a dumber tunnel that is really just cleararea, you can `tunnel 3 2 100`, to clear an area 3 high, 2 wide, and 100 deep. +- `farm` to automatically harvest, replant, or bone meal crops. Use `farm ` or `farm ` to limit the max distance from the starting point or a waypoint. - `axis` to go to an axis or diagonal axis at y=120 (`axisHeight` is a configurable setting, defaults to 120). -- `explore x z` to explore the world from the origin of x,z. Leave out x and z to default to player feet. This will - continually path towards the closest chunk to the origin that it's never seen before. `explorefilter filter.json` with - optional invert can be used to load in a list of chunks to load. -- `invert` to invert the current goal and path. This gets as far away from it as possible, instead of as close as - possible. For example, do `goal` then `invert` to run as far as possible from where you're standing at the start. +- `explore x z` to explore the world from the origin of x,z. Leave out x and z to default to player feet. This will continually path towards the closest chunk to the origin that it's never seen before. `explorefilter filter.json` with optional invert can be used to load in a list of chunks to load. +- `invert` to invert the current goal and path. This gets as far away from it as possible, instead of as close as possible. For example, do `goal` then `invert` to run as far as possible from where you're standing at the start. - `come` tells Baritone to head towards your camera, useful when freecam doesn't move your player position. - `blacklist` will stop baritone from going to the closest block so it won't attempt to get to it. -- `eta` to get information about the estimated time until the next segment and the goal, be aware that the ETA to your - goal is really unprecise. +- `eta` to get information about the estimated time until the next segment and the goal, be aware that the ETA to your goal is really unprecise. - `proc` to view miscellaneous information about the process currently controlling Baritone. - `repack` to re-cache the chunks around you. - `gc` to call `System.gc()` which may free up some memory. - `render` to fix glitched chunk rendering without having to reload all of them. - `reloadall` to reload Baritone's world cache or `saveall` to save Baritone's world cache. - `find` to search through Baritone's cache and attempt to find the location of the block. -- `surface` or `top` to tell Baritone to head towards the closest surface-like area, this can be the surface or highest - available air space. +- `surface` or `top` to tell Baritone to head towards the closest surface-like area, this can be the surface or highest available air space. - `version` to get the version of Baritone you're running - `damn` daniel -All the settings and documentation -are here. If you -find HTML easier to read than Javadoc, you can -look here. +All the settings and documentation are here. If you find HTML easier to read than Javadoc, you can look here. -There are about a hundred settings, but here are some fun / interesting / important ones that you might want to look at -changing in normal usage of Baritone. The documentation for each can be found at the above links. +There are about a hundred settings, but here are some fun / interesting / important ones that you might want to look at changing in normal usage of Baritone. The documentation for each can be found at the above links. - `allowBreak` - `allowSprint` - `allowPlace` @@ -118,24 +86,22 @@ changing in normal usage of Baritone. The documentation for each can be found at - `mineScanDroppedItems` - `allowDiagonalAscend` + + + # Troubleshooting / common issues ## Why doesn't Baritone respond to any of my chat commands? - This could be one of many things. -First, make sure it's actually installed. An easy way to check is seeing if it created the folder `baritone` in your -Minecraft folder. +First, make sure it's actually installed. An easy way to check is seeing if it created the folder `baritone` in your Minecraft folder. Second, make sure that you're using the prefix properly, and that chat control is enabled in the way you expect. -For example, Impact disables direct chat control. (i.e. anything typed in chat without a prefix will be ignored and sent -publicly). **This is a saved setting**, so if you run Impact once, `chatControl` will be off from then on, **even in -other clients**. -So you'll need to use the `#` prefix or edit `baritone/settings.txt` in your Minecraft folder to undo that ( -specifically, remove the line `chatControl false` then restart your client). +For example, Impact disables direct chat control. (i.e. anything typed in chat without a prefix will be ignored and sent publicly). **This is a saved setting**, so if you run Impact once, `chatControl` will be off from then on, **even in other clients**. +So you'll need to use the `#` prefix or edit `baritone/settings.txt` in your Minecraft folder to undo that (specifically, remove the line `chatControl false` then restart your client). -## Why can I do `.goto x z` in Impact but nowhere else? Why can I do `-path to x z` in KAMI but nowhere else? +## Why can I do `.goto x z` in Impact but nowhere else? Why can I do `-path to x z` in KAMI but nowhere else? These are custom commands that they added; those aren't from Baritone. The equivalent you're looking for is `goto x z`. diff --git a/build.gradle b/build.gradle index 3819b5ede..267fb6cd4 100755 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,6 @@ +import baritone.gradle.task.CreateDistTask +import baritone.gradle.task.ProguardTask + /* * This file is part of Baritone. * @@ -127,8 +130,7 @@ jar { } remapJar { - targetNamespace = "named" - fallbackTargetNamespace = "intermediary" + target = "mojmap" } javadoc { @@ -137,4 +139,45 @@ javadoc { options.encoding "UTF-8" // allow emoji in comments :^) source = sourceSets.api.allJava classpath += sourceSets.api.compileClasspath +} + + +task removeChecksum { + doLast { + delete "$rootDir/dist/checksums.txt" + } +} + +subprojects { + task proguard(type: ProguardTask, dependsOn: remapJar) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType project.name + artifactPath = remapJar.archiveFile + } + + task createDist(type: CreateDistTask, dependsOn: proguard) { + compType project.name == "tweaker" ? null : project.name + artifactApiPath = proguard.artifactApiPath + artifactStandalonePath = proguard.artifactStandalonePath + artifactUnoptimizedPath = proguard.artifactUnoptimizedPath + } + + build.finalizedBy(createDist) + + publishing { + publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } + } + + createDist.dependsOn(removeChecksum) } \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 14b7dc3bb..d0ba8faf5 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -36,5 +36,5 @@ dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' implementation group: 'commons-io', name: 'commons-io', version: '2.6' - implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.4' + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.4.10' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index eb3151d59..9c5a1d305 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -20,6 +20,8 @@ import org.gradle.api.DefaultTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; import java.io.File; import java.io.IOException; @@ -35,35 +37,27 @@ class BaritoneGradleTask extends DefaultTask { protected static final String - PROGUARD_ZIP = "proguard.zip", - PROGUARD_JAR = "proguard.jar", - PROGUARD_CONFIG_TEMPLATE = "scripts/proguard.pro", - PROGUARD_CONFIG_DEST = "template.pro", - PROGUARD_API_CONFIG = "api.pro", - PROGUARD_STANDALONE_CONFIG = "standalone.pro", - PROGUARD_EXPORT_PATH = "proguard_out.jar", - PROGUARD_MAPPING_DIR = "mapping", - - ARTIFACT_STANDARD = "%s-%s.jar", - ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", - ARTIFACT_API = "%s-api-%s.jar", - ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; + PROGUARD_ZIP = "proguard.zip", + PROGUARD_JAR = "proguard.jar", + PROGUARD_CONFIG_TEMPLATE = "scripts/proguard.pro", + PROGUARD_CONFIG_DEST = "template.pro", + PROGUARD_API_CONFIG = "api.pro", + PROGUARD_STANDALONE_CONFIG = "standalone.pro", + PROGUARD_EXPORT_PATH = "proguard_out.jar", + PROGUARD_MAPPING_DIR = "mapping", + + ARTIFACT_STANDARD = "%s-%s.jar", + ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", + ARTIFACT_API = "%s-api-%s.jar", + ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; protected String artifactName, artifactVersion; - protected Path - artifactPath, - artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, // these are different for forge builds - proguardOut; @Input @Optional protected String compType = null; - public BaritoneGradleTask() { - this.artifactName = getProject().getRootProject().getProperties().get("archives_base_name").toString(); - } - public String getCompType() { return compType; } @@ -72,26 +66,17 @@ public void setCompType(String compType) { this.compType = compType; } + + public BaritoneGradleTask() { + this.artifactName = getProject().getRootProject().getProperties().get("archives_base_name").toString(); + } + public void doFirst() { if (compType != null) { this.artifactVersion = compType + "-" + getProject().getVersion(); } else { this.artifactVersion = getProject().getVersion().toString(); } - - this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); - - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); - - this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); - } - - protected void verifyArtifacts() throws IllegalStateException { - if (!Files.exists(this.artifactPath)) { - throw new IllegalStateException("Artifact not found! Run build first! Missing file: " + this.artifactPath); - } } protected void write(InputStream stream, Path file) throws IOException { diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 02397d3c5..50b2f812b 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -17,14 +17,21 @@ package baritone.gradle.task; +import baritone.gradle.util.Determinizer; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.TaskAction; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.OpenOption; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.security.MessageDigest; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; @@ -32,19 +39,27 @@ * @author Brady * @since 10/12/2018 */ -public class CreateDistTask extends BaritoneGradleTask { +public abstract class CreateDistTask extends BaritoneGradleTask { private static MessageDigest SHA1_DIGEST; + @InputFile + abstract public RegularFileProperty getArtifactApiPath(); + + @InputFile + abstract public RegularFileProperty getArtifactStandalonePath(); + + @InputFile + abstract public RegularFileProperty getArtifactUnoptimizedPath(); + @TaskAction protected void exec() throws Exception { super.doFirst(); - super.verifyArtifacts(); // Define the distribution file paths - Path api = getRootRelativeFile("dist/" + getFileName(artifactApiPath)); - Path standalone = getRootRelativeFile("dist/" + getFileName(artifactStandalonePath)); - Path unoptimized = getRootRelativeFile("dist/" + getFileName(artifactUnoptimizedPath)); + Path api = getRootRelativeFile("dist/" + getFileName(getArtifactApiPath().get().getAsFile().toPath())); + Path standalone = getRootRelativeFile("dist/" + getFileName(getArtifactStandalonePath().get().getAsFile().toPath())); + Path unoptimized = getRootRelativeFile("dist/" + getFileName(getArtifactUnoptimizedPath().get().getAsFile().toPath())); // NIO will not automatically create directories Path dir = getRootRelativeFile("dist/"); @@ -54,12 +69,12 @@ protected void exec() throws Exception { // Copy build jars to dist/ // TODO: dont copy files that dont exist - Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); - Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); - Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); + Files.copy(getArtifactApiPath().get().getAsFile().toPath(), api, REPLACE_EXISTING); + Files.copy(getArtifactStandalonePath().get().getAsFile().toPath(), standalone, REPLACE_EXISTING); + Files.copy(getArtifactUnoptimizedPath().get().getAsFile().toPath(), unoptimized, REPLACE_EXISTING); // Calculate all checksums and format them like "shasum" - List shasum = Files.list(getRootRelativeFile("dist/")) + List shasum = Stream.of(getArtifactApiPath().get().getAsFile().toPath(), getArtifactStandalonePath().get().getAsFile().toPath(), getArtifactUnoptimizedPath().get().getAsFile().toPath()) .filter(e -> e.getFileName().toString().endsWith(".jar")) .map(path -> sha1(path) + " " + path.getFileName().toString()) .collect(Collectors.toList()); @@ -67,7 +82,7 @@ protected void exec() throws Exception { shasum.forEach(System.out::println); // Write the checksums to a file - Files.write(getRootRelativeFile("dist/checksums.txt"), shasum); + Files.write(getRootRelativeFile("dist/checksums.txt"), shasum, StandardOpenOption.CREATE, StandardOpenOption.APPEND); } private static String getFileName(Path p) { diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index a940b9d72..19c2fb7da 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -18,10 +18,12 @@ package baritone.gradle.task; import baritone.gradle.util.Determinizer; +import groovy.lang.Closure; +import org.apache.commons.io.IOUtils; +import org.gradle.api.Task; +import org.gradle.api.file.RegularFileProperty; import org.gradle.api.plugins.JavaPluginConvention; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.TaskAction; -import org.gradle.api.tasks.TaskCollection; +import org.gradle.api.tasks.*; import org.gradle.api.tasks.compile.ForkOptions; import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.internal.jvm.Jvm; @@ -30,6 +32,7 @@ import xyz.wagyourtail.unimined.api.minecraft.MinecraftProvider; import java.io.*; +import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; @@ -45,12 +48,14 @@ * @author Brady * @since 10/11/2018 */ -public class ProguardTask extends BaritoneGradleTask { +public abstract class ProguardTask extends BaritoneGradleTask { @Input private String url; - MinecraftProvider provider = this.getProject().getExtensions().getByType(MinecraftProvider.class); + public String getUrl() { + return url; + } @Input private String extract; @@ -59,27 +64,37 @@ public String getExtract() { return extract; } - public String getUrl() { - return url; - } + @InputFile + abstract public RegularFileProperty getArtifactPath(); - public void setUrl(String url) { - this.url = url; - } + @OutputFile + @Optional + abstract public RegularFileProperty getArtifactUnoptimizedPath(); - private File getMcJar() { - return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdFallbackNamespace()).toFile(); - } + @OutputFile + @Optional + abstract public RegularFileProperty getArtifactApiPath(); - private boolean isMcJar(File f) { - return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f); + @OutputFile + @Optional + abstract public RegularFileProperty getArtifactStandalonePath(); + + protected Path proguardOut; + + @Override + public Task configure(Closure closure) { + super.doFirst(); + + getArtifactUnoptimizedPath().fileValue(this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)).toFile()); + getArtifactApiPath().fileValue(this.getBuildFile(formatVersion(ARTIFACT_API)).toFile()); + getArtifactStandalonePath().fileValue(this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)).toFile()); + + return super.configure(closure); } @TaskAction protected void exec() throws Exception { - super.doFirst(); - super.verifyArtifacts(); - + this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); // "Haha brady why don't you make separate tasks" processArtifact(); downloadProguard(); @@ -90,6 +105,24 @@ protected void exec() throws Exception { cleanup(); } + private void processArtifact() throws Exception { + if (Files.exists(getArtifactUnoptimizedPath().getAsFile().get().toPath())) { + Files.delete(getArtifactUnoptimizedPath().getAsFile().get().toPath()); + } + + Determinizer.determinize(this.getArtifactPath().get().toString(), getArtifactUnoptimizedPath().getAsFile().get().toString()); + } + + MinecraftProvider provider = this.getProject().getExtensions().getByType(MinecraftProvider.class); + + private File getMcJar() { + return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdNamespace()).toFile(); + } + + private boolean isMcJar(File f) { + return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f); + } + private void downloadProguard() throws Exception { Path proguardZip = getTemporaryFile(PROGUARD_ZIP); if (!Files.exists(proguardZip)) { @@ -112,7 +145,8 @@ private String getJavaBinPathForProguard() throws Exception { try { path = findJavaPathByGradleConfig(); if (path != null) return path; - } catch (Exception ex) { + } + catch (Exception ex) { System.err.println("Unable to find java by javaCompile options"); ex.printStackTrace(); } @@ -120,7 +154,8 @@ private String getJavaBinPathForProguard() throws Exception { try { path = findJavaByJavaHome(); if (path != null) return path; - } catch (Exception ex) { + } + catch(Exception ex) { System.err.println("Unable to find java by JAVA_HOME"); ex.printStackTrace(); } @@ -128,7 +163,7 @@ private String getJavaBinPathForProguard() throws Exception { path = findJavaByGradleCurrentRuntime(); if (path != null) return path; - + throw new Exception("Unable to find java to determine ProGuard libraryjars. Please specify forkOptions.executable in javaCompile," + " JAVA_HOME environment variable, or make sure to run Gradle with the correct JDK (a v1.8 only)"); } @@ -201,20 +236,12 @@ private boolean validateJavaVersion(String java) { return true; } - private void processArtifact() throws Exception { - if (Files.exists(this.artifactUnoptimizedPath)) { - Files.delete(this.artifactUnoptimizedPath); - } - - Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString()); - } - private void generateConfigs() throws Exception { Files.copy(getRootRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), REPLACE_EXISTING); // Setup the template that will be used to derive the API and Standalone configs List template = Files.readAllLines(getTemporaryFile(PROGUARD_CONFIG_DEST)); - template.add(0, "-injars '" + this.artifactPath.toString() + "'"); + template.add(0, "-injars '" + this.getArtifactPath().get().toString() + "'"); template.add(1, "-outjars '" + this.getTemporaryFile(PROGUARD_EXPORT_PATH) + "'"); template.add(2, "-libraryjars /jmods/java.base.jmod(!**.jar;!module-info.class)"); @@ -233,11 +260,11 @@ private void generateConfigs() throws Exception { { // Discover all of the libraries that we will need to acquire from gradle final Stream dependencies = acquireDependencies() - // remove MCP mapped jar, and nashorn - .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")); + // remove MCP mapped jar, and nashorn + .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")); libraries = dependencies - .map(f -> isMcJar(f) ? mcJar : f); + .map(f -> isMcJar(f) ? mcJar : f); } libraries.forEach(f -> { template.add(2, "-libraryjars '" + f + "'"); @@ -250,42 +277,44 @@ private void generateConfigs() throws Exception { api.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + addCompTypeFirst("api.txt"))); // API config doesn't require any changes from the changes that we made to the template - Files.write(getTemporaryFile(compType + PROGUARD_API_CONFIG), api); + Files.write(getTemporaryFile(compType+PROGUARD_API_CONFIG), api); // For the Standalone config, don't keep the API package List standalone = new ArrayList<>(template); standalone.removeIf(s -> s.contains("# this is the keep api")); standalone.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + addCompTypeFirst("standalone.txt"))); - Files.write(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG), standalone); + Files.write(getTemporaryFile(compType+PROGUARD_STANDALONE_CONFIG), standalone); } private Stream acquireDependencies() { return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() - .stream() - .filter(File::isFile); + .stream() + .filter(File::isFile); } private void proguardApi() throws Exception { - runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); + runProguard(getTemporaryFile(compType+PROGUARD_API_CONFIG)); + Determinizer.determinize(this.proguardOut.toString(), getArtifactApiPath().get().toString()); + } + + private void proguardStandalone() throws Exception { + runProguard(getTemporaryFile(compType+PROGUARD_STANDALONE_CONFIG)); + Determinizer.determinize(this.proguardOut.toString(), getArtifactStandalonePath().get().toString()); } private void cleanup() { try { Files.delete(this.proguardOut); - } catch (IOException ignored) { - } + } catch (IOException ignored) {} } - private void proguardStandalone() throws Exception { - runProguard(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString()); + public void setUrl(String url) { + this.url = url; } public void setExtract(String extract) { this.extract = extract; } - private void runProguard(Path config) throws Exception { // Delete the existing proguard output file. Proguard probably handles this already, but why not do it ourselves if (Files.exists(this.proguardOut)) { @@ -296,7 +325,7 @@ private void runProguard(Path config) throws Exception { Path workingDirectory = getTemporaryFile(""); Path proguardJar = workingDirectory.relativize(getTemporaryFile(PROGUARD_JAR)); config = workingDirectory.relativize(config); - + // Honestly, if you still have spaces in your path at this point, you're SOL. Process p = new ProcessBuilder("java", "-jar", proguardJar.toString(), "@" + config.toString()) diff --git a/fabric/build.gradle b/fabric/build.gradle index 5d4b6c67e..b51ba7bd1 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -76,25 +76,14 @@ components.java { } } -task proguard(type: ProguardTask) { - url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - extract 'proguard-7.2.1/lib/proguard.jar' - compType "fabric" -} - -task createDist(type: CreateDistTask, dependsOn: proguard) { - compType "fabric" -} - -build.finalizedBy(createDist) - publishing { publications { maven(MavenPublication) { - artifact "../dist/baritone-api-fabric-" + version + ".jar" + artifact "../dist/baritone-api-" + version + ".jar" } } + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { maven { name = "meteor-maven" diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index f7f0ca756..403274811 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -7,8 +7,7 @@ "name": "Baritone", "description": "Google Maps for Blockgame", "authors": [ - "leijurv", - "Brady" + "leijurv", "Brady" ], "contact": { "homepage": "https://github.com/cabaletta/baritone", @@ -17,14 +16,16 @@ "license": "LGPL-3.0", "icon": "assets/baritone/icon.png", + "environment": "*", "entrypoints": { }, "mixins": [ - "mixins.baritone-meteor.json" + "mixins.baritone-meteor.json" ], + "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.4" + "minecraft": ">=1.20 <=1.20.1" } } diff --git a/forge/build.gradle b/forge/build.gradle index bac8ca54a..83fe38ddf 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -93,30 +93,4 @@ components.java { withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { skip() } -} - -task proguard(type: ProguardTask) { - url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - extract 'proguard-7.2.1/lib/proguard.jar' - compType "forge" -} - -task createDist(type: CreateDistTask, dependsOn: proguard) { - compType "forge" -} - -build.finalizedBy(createDist) - -publishing { - publications { - mavenFabric(MavenPublication) { - artifactId = rootProject.archives_base_name + "-" + project.name - from components.java - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - } } \ No newline at end of file diff --git a/forge/gradle.properties b/forge/gradle.properties index bda35b14a..24befc474 100644 --- a/forge/gradle.properties +++ b/forge/gradle.properties @@ -14,4 +14,5 @@ # You should have received a copy of the GNU Lesser General Public License # along with Baritone. If not, see . # + loom.platform=forge \ No newline at end of file diff --git a/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java b/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java index 401a0e664..db84d62e1 100644 --- a/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java +++ b/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java @@ -15,9 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.launch; - -import net.minecraftforge.fml.common.Mod; +package baritone.launch;import net.minecraftforge.fml.common.Mod; @Mod("baritoe") public class BaritoneForgeModXD { diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 58d9594a1..b29b3b1a0 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -4,37 +4,37 @@ # Note that there are a couple of TOML lists in this file. # Find more information on toml format here: https://github.com/toml-lang/toml # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml -modLoader = "javafml" #mandatory +modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion = "[33,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. -license = "https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" +loaderVersion="[46,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" # A URL to refer people to when problems occur with this mod -issueTrackerURL = "https://github.com/cabaletta/baritone/issues" #optional +issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional # A list of mods - how many allowed here is determined by the individual mod loader [[mods]] #mandatory # The modid of the mod -modId = "baritoe" #mandatory +modId="baritoe" #mandatory # The version number of the mod - there's a few well known ${} variables useable here or just hardcode it -version = "${version}" #mandatory -# A display name for the mod -displayName = "Baritone" #mandatory +version="${version}" #mandatory + # A display name for the mod +displayName="Baritone" #mandatory # A URL for the "homepage" for this mod, displayed in the mod UI -displayURL = "https://github.com/cabaletta/baritone" #optional +displayURL="https://github.com/cabaletta/baritone" #optional # A file name (in the root of the mod JAR) containing a logo for display #logoFile="examplemod.png" #optional # A text field displayed in the mod UI -credits = "Hat Gamers" #optional +credits="Hat Gamers" #optional # A text field displayed in the mod UI -authors = "leijurv, Brady" #optional +authors="leijurv, Brady" #optional # The description text for the mod (multi line!) (#mandatory) -description = ''' +description=''' A Minecraft pathfinder bot. ''' [[dependencies.baritoe]] -modId = "minecraft" -mandatory = true +modId="minecraft" +mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange = "[1.19.3]" -ordering = "NONE" -side = "BOTH" \ No newline at end of file +versionRange="[1.20,1.20.1]" +ordering="NONE" +side="BOTH" diff --git a/gradle.properties b/gradle.properties index 29d123f5b..e19dae15d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,11 @@ org.gradle.jvmargs=-Xmx4G -mod_version=1.19.4-beta1 + +available_loaders=fabric + +mod_version=1.20.1-beta1 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.4 -forge_version=1.19.3-44.0.1 -fabric_version=0.14.11 + +minecraft_version=1.20.1 +forge_version=1.20.1-47.0.1 +fabric_version=0.14.18 diff --git a/settings.gradle b/settings.gradle index 58b6e203d..89e47805a 100755 --- a/settings.gradle +++ b/settings.gradle @@ -42,10 +42,6 @@ pluginManagement { rootProject.name = 'baritone' include("tweaker") -if (System.getProperty("Baritone.enabled_platforms") == null) { -// System.setProperty("Baritone.enabled_platforms", "fabric,forge") - System.setProperty("Baritone.enabled_platforms", "fabric") -} -for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { +for (platform in available_loaders.split(",")) { include(platform) } diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 3fdd8de8b..7fa97d168 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -21,10 +21,9 @@ import baritone.api.command.ICommand; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; -import net.minecraft.client.player.LocalPlayer; - import java.util.List; import java.util.Objects; +import net.minecraft.client.player.LocalPlayer; /** * Provides the present {@link IBaritone} instances, as well as non-baritone instance related APIs. diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 4f9431010..a0b5240d1 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -27,13 +27,12 @@ import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; - import java.awt.*; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.util.List; import java.util.*; +import java.util.List; import java.util.function.BiConsumer; import java.util.function.Consumer; diff --git a/src/api/java/baritone/api/behavior/IBehavior.java b/src/api/java/baritone/api/behavior/IBehavior.java index 95fb22344..811563b93 100644 --- a/src/api/java/baritone/api/behavior/IBehavior.java +++ b/src/api/java/baritone/api/behavior/IBehavior.java @@ -27,5 +27,4 @@ * @see IGameEventListener * @since 9/23/2018 */ -public interface IBehavior extends AbstractGameEventListener { -} +public interface IBehavior extends AbstractGameEventListener {} diff --git a/src/api/java/baritone/api/cache/ICachedWorld.java b/src/api/java/baritone/api/cache/ICachedWorld.java index 120ca8da4..6e74fa55a 100644 --- a/src/api/java/baritone/api/cache/ICachedWorld.java +++ b/src/api/java/baritone/api/cache/ICachedWorld.java @@ -17,11 +17,10 @@ package baritone.api.cache; +import java.util.ArrayList; import net.minecraft.core.BlockPos; import net.minecraft.world.level.chunk.LevelChunk; -import java.util.ArrayList; - /** * @author Brady * @since 9/24/2018 diff --git a/src/api/java/baritone/api/cache/IWorldScanner.java b/src/api/java/baritone/api/cache/IWorldScanner.java index d8cf2bd38..ea27dd161 100644 --- a/src/api/java/baritone/api/cache/IWorldScanner.java +++ b/src/api/java/baritone/api/cache/IWorldScanner.java @@ -19,12 +19,11 @@ import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; +import java.util.List; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.block.Block; -import java.util.List; - /** * @author Brady * @since 10/6/2018 diff --git a/src/api/java/baritone/api/command/argument/IArgConsumer.java b/src/api/java/baritone/api/command/argument/IArgConsumer.java index 833d67736..894e4a71b 100644 --- a/src/api/java/baritone/api/command/argument/IArgConsumer.java +++ b/src/api/java/baritone/api/command/argument/IArgConsumer.java @@ -27,11 +27,10 @@ import baritone.api.command.exception.CommandNotEnoughArgumentsException; import baritone.api.command.exception.CommandTooManyArgumentsException; import baritone.api.utils.Helper; -import net.minecraft.core.Direction; - import java.util.Deque; import java.util.LinkedList; import java.util.stream.Stream; +import net.minecraft.core.Direction; /** * The {@link IArgConsumer} is how {@link ICommand}s read the arguments passed to them. This class has many benefits: diff --git a/src/api/java/baritone/api/command/datatypes/ForDirection.java b/src/api/java/baritone/api/command/datatypes/ForDirection.java index 5dd355b41..cbfbc2243 100644 --- a/src/api/java/baritone/api/command/datatypes/ForDirection.java +++ b/src/api/java/baritone/api/command/datatypes/ForDirection.java @@ -19,10 +19,9 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.core.Direction; - import java.util.Locale; import java.util.stream.Stream; +import net.minecraft.core.Direction; public enum ForDirection implements IDatatypeFor { INSTANCE; diff --git a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java index d1016e99e..b0d72bed1 100644 --- a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java +++ b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java @@ -20,11 +20,10 @@ import baritone.api.IBaritone; import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Player; - import java.util.List; import java.util.stream.Stream; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; /** * An {@link IDatatype} used to resolve nearby players, those within diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java index 738ca019a..d97635eb2 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java @@ -21,9 +21,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.Mth; - import java.util.stream.Stream; +import net.minecraft.util.Mth; public enum RelativeGoalBlock implements IDatatypePost { INSTANCE; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java index c4dd045f3..8682bbbaf 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java @@ -21,9 +21,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.Mth; - import java.util.stream.Stream; +import net.minecraft.util.Mth; public enum RelativeGoalXZ implements IDatatypePost { INSTANCE; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java index 9a13e4bbd..34c8c0018 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java @@ -21,9 +21,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.Mth; - import java.util.stream.Stream; +import net.minecraft.util.Mth; public enum RelativeGoalYLevel implements IDatatypePost { INSTANCE; diff --git a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java index 51840a117..d615ff2cd 100644 --- a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -19,9 +19,8 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; -import net.minecraft.ChatFormatting; - import java.util.List; +import net.minecraft.ChatFormatting; import static baritone.api.utils.Helper.HELPER; diff --git a/src/api/java/baritone/api/command/exception/ICommandException.java b/src/api/java/baritone/api/command/exception/ICommandException.java index 389129761..0a1529d69 100644 --- a/src/api/java/baritone/api/command/exception/ICommandException.java +++ b/src/api/java/baritone/api/command/exception/ICommandException.java @@ -19,9 +19,8 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; -import net.minecraft.ChatFormatting; - import java.util.List; +import net.minecraft.ChatFormatting; import static baritone.api.utils.Helper.HELPER; diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index e119a9a23..77628a796 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -21,16 +21,17 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.utils.Helper; + +import java.awt.*; +import java.util.Arrays; +import java.util.List; +import java.util.function.Function; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.MutableComponent; -import java.util.Arrays; -import java.util.List; -import java.util.function.Function; - public class Paginator implements Helper { public final List entries; diff --git a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java index 0722ce16d..a7dfb7f8a 100644 --- a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java @@ -23,14 +23,13 @@ import baritone.api.command.manager.ICommandManager; import baritone.api.event.events.TabCompleteEvent; import baritone.api.utils.SettingsUtil; -import net.minecraft.resources.ResourceLocation; - import java.util.Comparator; import java.util.List; import java.util.Locale; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Stream; +import net.minecraft.resources.ResourceLocation; /** * The {@link TabCompleteHelper} is a single-use object that helps you handle tab completion. It includes helper diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index 5a94e5100..9eac8de46 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -31,58 +31,44 @@ public interface AbstractGameEventListener extends IGameEventListener { @Override - default void onTick(TickEvent event) { - } + default void onTick(TickEvent event) {} @Override - default void onPlayerUpdate(PlayerUpdateEvent event) { - } + default void onPlayerUpdate(PlayerUpdateEvent event) {} @Override - default void onSendChatMessage(ChatEvent event) { - } + default void onSendChatMessage(ChatEvent event) {} @Override - default void onPreTabComplete(TabCompleteEvent event) { - } + default void onPreTabComplete(TabCompleteEvent event) {} @Override - default void onChunkEvent(ChunkEvent event) { - } + default void onChunkEvent(ChunkEvent event) {} @Override - default void onRenderPass(RenderEvent event) { - } + default void onRenderPass(RenderEvent event) {} @Override - default void onWorldEvent(WorldEvent event) { - } + default void onWorldEvent(WorldEvent event) {} @Override - default void onSendPacket(PacketEvent event) { - } + default void onSendPacket(PacketEvent event) {} @Override - default void onReceivePacket(PacketEvent event) { - } + default void onReceivePacket(PacketEvent event) {} @Override - default void onPlayerRotationMove(RotationMoveEvent event) { - } + default void onPlayerRotationMove(RotationMoveEvent event) {} @Override - default void onPlayerSprintState(SprintStateEvent event) { - } + default void onPlayerSprintState(SprintStateEvent event) {} @Override - default void onBlockInteract(BlockInteractEvent event) { - } + default void onBlockInteract(BlockInteractEvent event) {} @Override - default void onPlayerDeath() { - } + default void onPlayerDeath() {} @Override - default void onPathEvent(PathEvent event) { - } + default void onPathEvent(PathEvent event) {} } diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 9ae873fb6..37cbc8953 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -22,10 +22,8 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.world.level.block.state.BlockState; - import java.io.File; import java.util.List; -import java.util.Map; /** * @author Brady @@ -65,34 +63,18 @@ default boolean build(String schematicFile, BlockPos origin) { boolean isPaused(); - Vec3i getSchemSize(); - void popStack(); - boolean clearState(); - boolean isFromAltoclefFinished(); void resume(); void clearArea(BlockPos corner1, BlockPos corner2); - void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef); - - boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef); - /** * @return A list of block states that are estimated to be placeable by this builder process. You can use this in * schematics, for example, to pick a state that the builder process will be happy with, because any variation will * cause it to give up. This is updated every tick, but only while the builder process is active. */ List getApproxPlaceable(); - - boolean isFromAltoclef(); - - void noteInsert(BlockPos pos); - - void reset(); - - Map getMissing(); } diff --git a/src/api/java/baritone/api/process/IFarmProcess.java b/src/api/java/baritone/api/process/IFarmProcess.java index cf63b64d3..0c07567de 100644 --- a/src/api/java/baritone/api/process/IFarmProcess.java +++ b/src/api/java/baritone/api/process/IFarmProcess.java @@ -33,9 +33,7 @@ public interface IFarmProcess extends IBaritoneProcess { /** * Begin to search for nearby crops to farm. */ - default void farm() { - farm(0, null); - } + default void farm() {farm(0, null);} /** * Begin to search for crops to farm with in specified aria @@ -43,7 +41,5 @@ default void farm() { * * @param range The distance to search for crops to farm */ - default void farm(int range) { - farm(range, null); - } + default void farm(int range) {farm(range, null);} } diff --git a/src/api/java/baritone/api/process/IFollowProcess.java b/src/api/java/baritone/api/process/IFollowProcess.java index b9eedee30..6f7f0a239 100644 --- a/src/api/java/baritone/api/process/IFollowProcess.java +++ b/src/api/java/baritone/api/process/IFollowProcess.java @@ -17,10 +17,9 @@ package baritone.api.process; -import net.minecraft.world.entity.Entity; - import java.util.List; import java.util.function.Predicate; +import net.minecraft.world.entity.Entity; /** * @author Brady diff --git a/src/api/java/baritone/api/process/IMineProcess.java b/src/api/java/baritone/api/process/IMineProcess.java index 1331e3dde..a63eb00a2 100644 --- a/src/api/java/baritone/api/process/IMineProcess.java +++ b/src/api/java/baritone/api/process/IMineProcess.java @@ -19,9 +19,8 @@ import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMetaLookup; -import net.minecraft.world.level.block.Block; - import java.util.stream.Stream; +import net.minecraft.world.level.block.Block; /** * @author Brady diff --git a/src/api/java/baritone/api/schematic/CompositeSchematic.java b/src/api/java/baritone/api/schematic/CompositeSchematic.java index 62faa8bf2..0724ec018 100644 --- a/src/api/java/baritone/api/schematic/CompositeSchematic.java +++ b/src/api/java/baritone/api/schematic/CompositeSchematic.java @@ -17,10 +17,9 @@ package baritone.api.schematic; -import net.minecraft.world.level.block.state.BlockState; - import java.util.ArrayList; import java.util.List; +import net.minecraft.world.level.block.state.BlockState; public class CompositeSchematic extends AbstractSchematic { diff --git a/src/api/java/baritone/api/schematic/FillSchematic.java b/src/api/java/baritone/api/schematic/FillSchematic.java index d79374fc3..126501987 100644 --- a/src/api/java/baritone/api/schematic/FillSchematic.java +++ b/src/api/java/baritone/api/schematic/FillSchematic.java @@ -18,6 +18,7 @@ package baritone.api.schematic; import baritone.api.utils.BlockOptionalMeta; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import java.util.List; diff --git a/src/api/java/baritone/api/schematic/ISchematic.java b/src/api/java/baritone/api/schematic/ISchematic.java index 362d246f7..bc7c35a15 100644 --- a/src/api/java/baritone/api/schematic/ISchematic.java +++ b/src/api/java/baritone/api/schematic/ISchematic.java @@ -17,11 +17,10 @@ package baritone.api.schematic; +import java.util.List; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; -import java.util.List; - /** * Basic representation of a schematic. Provides the dimensions and the desired state for a given position relative to * the origin. @@ -76,8 +75,7 @@ default int size(Direction.Axis axis) { /** * Resets possible caches to avoid wrong behavior when moving the schematic around */ - default void reset() { - } + default void reset() {} /** * @return The width (X axis length) of this schematic diff --git a/src/api/java/baritone/api/schematic/MaskSchematic.java b/src/api/java/baritone/api/schematic/MaskSchematic.java index 954d7973c..ee56f3425 100644 --- a/src/api/java/baritone/api/schematic/MaskSchematic.java +++ b/src/api/java/baritone/api/schematic/MaskSchematic.java @@ -17,9 +17,8 @@ package baritone.api.schematic; -import net.minecraft.world.level.block.state.BlockState; - import java.util.List; +import net.minecraft.world.level.block.state.BlockState; public abstract class MaskSchematic extends AbstractSchematic { diff --git a/src/api/java/baritone/api/utils/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java index 676398887..cee7649b0 100644 --- a/src/api/java/baritone/api/utils/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -17,13 +17,12 @@ package baritone.api.utils; +import javax.annotation.Nonnull; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.util.Mth; -import javax.annotation.Nonnull; - /** * A better BlockPos that has fewer hash collisions (and slightly more performant offsets) *

diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 90a2756d8..8723c3b51 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -27,13 +27,13 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.server.packs.PackType; -import net.minecraft.server.packs.VanillaPackResources; +import net.minecraft.server.packs.*; import net.minecraft.server.packs.repository.ServerPacksSource; import net.minecraft.server.packs.resources.MultiPackResourceManager; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; +import net.minecraft.world.RandomSequences; import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -46,14 +46,15 @@ import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.loot.BuiltInLootTables; import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.LootTables; -import net.minecraft.world.level.storage.loot.PredicateManager; +import net.minecraft.world.level.storage.loot.LootDataManager; +import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; import sun.misc.Unsafe; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.*; @@ -70,8 +71,7 @@ public final class BlockOptionalMeta { private final ImmutableSet stateHashes; private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); - private static LootTables lootTables; - private static PredicateManager predicate = new PredicateManager(); + private static LootDataManager lootTables; private static Map> drops = new HashMap<>(); public BlockOptionalMeta(@Nonnull Block block) { @@ -148,8 +148,12 @@ public String toString() { return String.format("BlockOptionalMeta{block=%s}", block); } - public static PredicateManager getPredicateManager() { - return predicate; + public BlockState getAnyBlockState() { + if (blockstates.size() > 0) { + return blockstates.iterator().next(); + } + + return null; } private static Method getVanillaServerPack; @@ -169,11 +173,11 @@ private static VanillaPackResources getVanillaServerPack() { return null; } - public static LootTables getManager() { + public static LootDataManager getManager() { if (lootTables == null) { MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(getVanillaServerPack())); ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); - lootTables = new LootTables(predicate); + lootTables = new LootDataManager(); resourceManager.registerReloadListener(lootTables); try { resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), resources.listPacks().toList()).done().get(); @@ -185,14 +189,6 @@ public static LootTables getManager() { return lootTables; } - public BlockState getAnyBlockState() { - if (blockstates.size() > 0) { - return blockstates.iterator().next(); - } - - return null; - } - private static synchronized List drops(Block b) { return drops.computeIfAbsent(b, block -> { ResourceLocation lootTableLocation = block.getLootTable(); @@ -201,15 +197,18 @@ private static synchronized List drops(Block b) { } else { List items = new ArrayList<>(); try { - getManager().get(lootTableLocation).getRandomItems( - new LootContext.Builder(ServerLevelStub.fastCreate()) - .withRandom(RandomSource.create()) + + getManager().getLootTable(lootTableLocation).getRandomItemsRaw( + new LootContext.Builder( + new LootParams.Builder(ServerLevelStub.fastCreate()) .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) - .create(LootContextParamSets.BLOCK), - stack -> items.add(stack.getItem()) + .create(LootContextParamSets.BLOCK) + ).withOptionalRandomSeed(1L) + .create(null), + stack -> items.add(stack.getItem()) ); } catch (Exception e) { e.printStackTrace(); @@ -223,8 +222,8 @@ private static class ServerLevelStub extends ServerLevel { private static Minecraft client = Minecraft.getInstance(); private static Unsafe unsafe = getUnsafe(); - public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.LevelStorageAccess $$2, ServerLevelData $$3, ResourceKey $$4, LevelStem $$5, ChunkProgressListener $$6, boolean $$7, long $$8, List $$9, boolean $$10) { - super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10); + public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.LevelStorageAccess $$2, ServerLevelData $$3, ResourceKey $$4, LevelStem $$5, ChunkProgressListener $$6, boolean $$7, long $$8, List $$9, boolean $$10, @Nullable RandomSequences $$11) { + super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10, $$11); } @Override diff --git a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java index 86d19ff5e..7c1070a84 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java @@ -17,13 +17,12 @@ package baritone.api.utils; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; public class BlockOptionalMetaLookup { diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index d2132f9a5..a43d78e87 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -17,13 +17,13 @@ package baritone.api.utils; +import java.util.HashMap; +import java.util.Map; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; -import java.util.HashMap; -import java.util.Map; - public class BlockUtils { private static transient Map resourceCache = new HashMap<>(); @@ -64,6 +64,5 @@ public static Block stringToBlockNullable(String name) { return block; } - private BlockUtils() { - } + private BlockUtils() {} } diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 2e1830c02..7e3c44607 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -18,11 +18,13 @@ package baritone.api.utils; import baritone.api.BaritoneAPI; +import baritone.api.utils.gui.BaritoneToast; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import java.awt.*; import java.util.Arrays; import java.util.Calendar; import java.util.stream.Stream; @@ -39,8 +41,7 @@ public interface Helper { /** * Instance of {@link Helper}. Used for static-context reference. */ - Helper HELPER = new Helper() { - }; + Helper HELPER = new Helper() {}; /** * Instance of the game diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 32e331544..4e29b1459 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -18,6 +18,9 @@ package baritone.api.utils; import baritone.api.cache.IWorldData; +import java.util.Optional; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; @@ -28,10 +31,6 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import java.util.Optional; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - /** * @author Brady * @since 11/12/2018 @@ -40,9 +39,7 @@ public interface IPlayerContext { LocalPlayer player(); - static double eyeHeight(boolean ifSneaking) { - return ifSneaking ? 1.27 : 1.62; - } + IPlayerController playerController(); Level world(); @@ -54,7 +51,8 @@ default Stream entitiesStream() { return StreamSupport.stream(entities().spliterator(), false); } - IPlayerController playerController(); + + IWorldData worldData(); HitResult objectMouseOver(); @@ -74,8 +72,7 @@ default BetterBlockPos playerFeet() { if (world().getBlockState(feet).getBlock() instanceof SlabBlock) { return feet.above(); } - } catch (NullPointerException ignored) { - } + } catch (NullPointerException ignored) {} return feet; } @@ -92,7 +89,9 @@ default Rotation playerRotations() { return new Rotation(player().getYRot(), player().getXRot()); } - IWorldData worldData(); + static double eyeHeight(boolean ifSneaking) { + return ifSneaking ? 1.27 : 1.62; + } /** * Returns the block that the crosshair is currently placed over. Updated once per tick. diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 022281b64..db0773b40 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -28,8 +28,7 @@ */ public final class RayTraceUtils { public static ClipContext.Fluid fluidHandling = ClipContext.Fluid.NONE; - private RayTraceUtils() { - } + private RayTraceUtils() {} /** * Performs a block raytrace with the specified rotations. This should only be used when @@ -58,7 +57,7 @@ public static HitResult rayTraceTowards(Entity entity, Rotation rotation, double direction.y * blockReachDistance, direction.z * blockReachDistance ); - return entity.level.clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, fluidHandling, entity)); + return entity.level().clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, fluidHandling, entity)); } public static Vec3 inferSneakingEyePosition(Entity entity) { diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 0f43c730b..0a4fd8209 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -19,6 +19,7 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import java.util.Optional; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -32,8 +33,6 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import java.util.Optional; - /** * @author Brady * @since 9/25/2018 @@ -62,8 +61,7 @@ public final class RotationUtils { new Vec3(1, 0.5, 0.5) // East }; - private RotationUtils() { - } + private RotationUtils() {} /** * Calculates the rotation from BlockPosdest to BlockPosorig @@ -198,8 +196,8 @@ public static Optional reachable(LocalPlayer entity, BlockPos pos, dou return possibleRotation; } - BlockState state = entity.level.getBlockState(pos); - VoxelShape shape = state.getShape(entity.level, pos); + BlockState state = entity.level().getBlockState(pos); + VoxelShape shape = state.getShape(entity.level(), pos); if (shape.isEmpty()) { shape = Shapes.block(); } @@ -235,7 +233,7 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve if (((BlockHitResult) result).getBlockPos().equals(pos)) { return Optional.of(rotation); } - if (entity.level.getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { + if (entity.level().getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { return Optional.of(rotation); } } @@ -252,6 +250,6 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve * @return The optional rotation */ public static Optional reachableCenter(Entity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { - return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.level, pos), blockReachDistance, wouldSneak); + return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.level(), pos), blockReachDistance, wouldSneak); } } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 9f2324a24..9e82c05de 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -21,12 +21,12 @@ import baritone.api.Settings; import net.minecraft.client.Minecraft; import net.minecraft.core.Direction; +import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; - import java.awt.*; import java.io.BufferedReader; import java.io.BufferedWriter; diff --git a/src/api/java/baritone/api/utils/TypeUtils.java b/src/api/java/baritone/api/utils/TypeUtils.java index 01fe45459..457cc449a 100644 --- a/src/api/java/baritone/api/utils/TypeUtils.java +++ b/src/api/java/baritone/api/utils/TypeUtils.java @@ -26,8 +26,7 @@ */ public final class TypeUtils { - private TypeUtils() { - } + private TypeUtils() {} /** * Resolves the "base type" for the specified type. For example, if the specified diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index dceab6c61..4ea94b95a 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -32,8 +32,7 @@ */ public final class VecUtils { - private VecUtils() { - } + private VecUtils() {} /** * Calculates the center of the block at the specified position's bounding box diff --git a/src/api/java/baritone/api/utils/gui/BaritoneToast.java b/src/api/java/baritone/api/utils/gui/BaritoneToast.java index 87f0aac6a..6cdc57cc0 100644 --- a/src/api/java/baritone/api/utils/gui/BaritoneToast.java +++ b/src/api/java/baritone/api/utils/gui/BaritoneToast.java @@ -17,8 +17,10 @@ package baritone.api.utils.gui; +import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.toasts.Toast; import net.minecraft.client.gui.components.toasts.ToastComponent; import net.minecraft.network.chat.Component; @@ -37,7 +39,7 @@ public BaritoneToast(Component titleComponent, Component subtitleComponent, long this.totalShowTime = totalShowTime; } - public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long delta) { + public Visibility render(GuiGraphics gui, ToastComponent toastGui, long delta) { if (this.newDisplay) { this.firstDrawTime = delta; this.newDisplay = false; @@ -45,15 +47,13 @@ public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long de //TODO: check - toastGui.getMinecraft().getTextureManager().bindForSetup(new ResourceLocation("textures/gui/toasts.png")); - //GlStateManager._color4f(1.0F, 1.0F, 1.0F, 255.0F); - toastGui.blit(matrixStack, 0, 0, 0, 32, 160, 32); + gui.blit(new ResourceLocation("textures/gui/toasts.png"), 0, 0, 0, 32, 160, 32); if (this.subtitle == null) { - toastGui.getMinecraft().font.draw(matrixStack, this.title, 18, 12, -11534256); + gui.drawString(toastGui.getMinecraft().font, this.title, 18, 12, -11534256); } else { - toastGui.getMinecraft().font.draw(matrixStack, this.title, 18, 7, -11534256); - toastGui.getMinecraft().font.draw(matrixStack, this.subtitle, 18, 18, -16777216); + gui.drawString(toastGui.getMinecraft().font, this.title, 18, 7, -11534256); + gui.drawString(toastGui.getMinecraft().font, this.subtitle, 18, 18, -16777216); } return delta - this.firstDrawTime < totalShowTime ? Visibility.SHOW : Visibility.HIDE; diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java index 9f88fb1fe..711ca6554 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java @@ -18,13 +18,13 @@ package baritone.launch.mixins; import baritone.utils.accessor.IChunkArray; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.chunk.LevelChunk; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import java.util.concurrent.atomic.AtomicReferenceArray; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.LevelChunk; @Mixin(targets = "net.minecraft.client.multiplayer.ClientChunkCache$Storage") public abstract class MixinChunkArray implements IChunkArray { diff --git a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java index d25837754..de465b82a 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java @@ -19,14 +19,14 @@ import baritone.utils.accessor.IChunkArray; import baritone.utils.accessor.IClientChunkProvider; -import net.minecraft.client.multiplayer.ClientChunkCache; -import net.minecraft.client.multiplayer.ClientLevel; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import java.lang.reflect.Field; import java.util.Arrays; +import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.client.multiplayer.ClientLevel; @Mixin(ClientChunkCache.class) public class MixinClientChunkProvider implements IClientChunkProvider { diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index 1eafa8d54..e718685c9 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -27,6 +27,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.*; import net.minecraft.world.level.ChunkPos; import org.spongepowered.asm.mixin.Final; @@ -67,14 +68,12 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { } }*/ - @Shadow - @Final - private Minecraft minecraft; + @Shadow @Final private Minecraft minecraft; @Inject( - method = "sendChat(Ljava/lang/String;)V", - at = @At("HEAD"), - cancellable = true + method = "sendChat(Ljava/lang/String;)V", + at = @At("HEAD"), + cancellable = true ) private void sendChatMessage(String string, CallbackInfo ci) { ChatEvent event = new ChatEvent(string); diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index 4eea7d219..22ca083e0 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -19,12 +19,14 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import baritone.api.event.events.ChatEvent; import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.SprintStateEvent; import baritone.api.event.events.type.EventState; import baritone.behavior.LookBehavior; import net.minecraft.client.KeyMapping; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Abilities; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index 70d5861cb..63331502f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -22,8 +22,6 @@ import com.mojang.brigadier.context.StringRange; import com.mojang.brigadier.suggestion.Suggestion; import com.mojang.brigadier.suggestion.Suggestions; -import net.minecraft.client.gui.components.CommandSuggestions; -import net.minecraft.client.gui.components.EditBox; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -35,6 +33,8 @@ import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.client.gui.components.CommandSuggestions; +import net.minecraft.client.gui.components.EditBox; /** * @author Brady diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index c14f1b846..44a5c1e32 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -31,6 +31,8 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import static org.objectweb.asm.Opcodes.GETFIELD; + /** * @author Brady * @since 9/10/2018 diff --git a/src/launch/java/baritone/launch/mixins/MixinLootContext.java b/src/launch/java/baritone/launch/mixins/MixinLootContext.java index 7c7960cf1..223444e12 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLootContext.java +++ b/src/launch/java/baritone/launch/mixins/MixinLootContext.java @@ -21,8 +21,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.LootTables; -import net.minecraft.world.level.storage.loot.PredicateManager; +import net.minecraft.world.level.storage.loot.LootDataManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -48,27 +47,13 @@ private MinecraftServer getServer(ServerLevel world) { method = "create", at = @At( value = "INVOKE", - target = "Lnet/minecraft/server/MinecraftServer;getLootTables()Lnet/minecraft/world/level/storage/loot/LootTables;" + target = "Lnet/minecraft/server/MinecraftServer;getLootData()Lnet/minecraft/world/level/storage/loot/LootDataManager;" ) ) - private LootTables getLootTableManager(MinecraftServer server) { + private LootDataManager getLootTableManager(MinecraftServer server) { if (server == null) { return BlockOptionalMeta.getManager(); } - return server.getLootTables(); - } - - @Redirect( - method = "create", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/server/MinecraftServer;getPredicateManager()Lnet/minecraft/world/level/storage/loot/PredicateManager;" - ) - ) - private PredicateManager getLootPredicateManager(MinecraftServer server) { - if (server == null) { - return BlockOptionalMeta.getPredicateManager(); - } - return server.getPredicateManager(); + return server.getLootData(); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 604feaa85..660292a19 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -32,6 +32,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.function.BiFunction; @@ -60,12 +61,12 @@ private void postInit(CallbackInfo ci) { @Inject( method = "tick", at = @At( - value = "FIELD", - opcode = Opcodes.GETFIELD, - target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", - ordinal = 4, - shift = At.Shift.BY, - by = -3 + value = "FIELD", + opcode = Opcodes.GETFIELD, + target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", + ordinal = 4, + shift = At.Shift.BY, + by = -3 ) ) private void runTick(CallbackInfo ci) { @@ -123,12 +124,26 @@ private void postLoadWorld(ClientLevel world, CallbackInfo ci) { at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "Lnet/minecraft/client/gui/screens/Screen;passEvents:Z" + target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;" + ), + slice = @Slice( + from = @At( + value = "FIELD", + opcode = Opcodes.GETFIELD, + target = "Lnet/minecraft/client/Options;renderDebug:Z" + ), + to = @At( + value = "CONSTANT", + args = "stringValue=Keybindings" + ) ) ) - private boolean passEvents(Screen screen) { + private Screen passEvents(Minecraft instance) { // allow user input is only the primary baritone - return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) || screen.passEvents; + if (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) { + return null; + } + return instance.screen; } // TODO diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 52543ed91..057a49b4b 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -23,6 +23,8 @@ import baritone.api.event.events.type.EventState; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; import net.minecraft.network.Connection; import net.minecraft.network.PacketSendListener; import net.minecraft.network.protocol.Packet; diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java index 8e6ab9955..c99c7776c 100644 --- a/src/launch/java/baritone/launch/mixins/MixinScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.java @@ -21,17 +21,17 @@ import baritone.api.IBaritone; import baritone.api.event.events.ChatEvent; import baritone.utils.accessor.IGuiScreen; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Style; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; + +import java.net.URI; +import net.minecraft.client.gui.screens.Screen; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.net.URI; - @Mixin(Screen.class) public abstract class MixinScreen implements IGuiScreen { diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index b81e17b38..7174a1228 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -60,8 +60,7 @@ public class Baritone implements IBaritone { if (!Files.exists(dir.toPath())) { try { Files.createDirectories(dir.toPath()); - } catch (IOException ignored) { - } + } catch (IOException ignored) {} } } @@ -215,8 +214,7 @@ public void openClick() { try { Thread.sleep(100); Helper.mc.execute(() -> Helper.mc.setScreen(new GuiClick())); - } catch (Exception ignored) { - } + } catch (Exception ignored) {} }).start(); } diff --git a/src/main/java/baritone/KeepName.java b/src/main/java/baritone/KeepName.java index 8fe29cd71..7fc04cd68 100644 --- a/src/main/java/baritone/KeepName.java +++ b/src/main/java/baritone/KeepName.java @@ -18,5 +18,4 @@ package baritone; // Annotation for classes and class members that should not be renamed by proguard -public @interface KeepName { -} +public @interface KeepName {} diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 3cad14421..e0b56196e 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -26,7 +26,11 @@ import net.minecraft.core.NonNullList; import net.minecraft.world.InteractionHand; import net.minecraft.world.inventory.ClickType; -import net.minecraft.world.item.*; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.DiggerItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.PickaxeItem; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.Block; @@ -34,7 +38,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; - import java.util.ArrayList; import java.util.OptionalInt; import java.util.Random; @@ -151,8 +154,7 @@ public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { if (AltoClefSettings.getInstance().isInteractionPaused()) return false; if (AltoClefSettings.getInstance().shouldAvoidPlacingAt(x, y, z)) return false; BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); - if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { - }))))) { + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { return true; // gotem } if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && ((BlockItem) stack.getItem()).getBlock().equals(maybe.getBlock()))) { diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 13b8ebdd4..e9b0ca661 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -77,7 +77,7 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { float desiredPitch = this.target.getPitch(); ctx.player().setXRot(desiredPitch); ctx.player().setYRot((float) (ctx.player().getYRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); - ctx.player().setXRot((float) (ctx.player().getXRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); + ctx.player().setXRot((float) (ctx.player().getXRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); if (desiredPitch == oldPitch && !Baritone.settings().freeLook.value) { nudgeToLevel(); } diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 148952164..1f2ba4561 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -36,13 +36,12 @@ import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.pathing.Favoring; -import net.minecraft.core.BlockPos; - import java.util.ArrayList; import java.util.Comparator; import java.util.Objects; import java.util.Optional; import java.util.concurrent.LinkedBlockingQueue; +import net.minecraft.core.BlockPos; public final class PathingBehavior extends Behavior implements IPathingBehavior, Helper { @@ -420,7 +419,7 @@ private void resetEstimatedTicksToGoal(BetterBlockPos start) { public BetterBlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); if (!MovementHelper.canWalkOn(ctx, feet.below())) { - if (ctx.player().isOnGround()) { + if (ctx.player().onGround()) { double playerX = ctx.player().position().x; double playerZ = ctx.player().position().z; ArrayList closest = new ArrayList<>(); @@ -438,7 +437,9 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class // can't possibly be sneaking off of this one, we're too far away continue; } - if (MovementHelper.canWalkOn(ctx, possibleSupport.below()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.above())) { + if (MovementHelper.canWalkOn(ctx, possibleSupport.below()) + && MovementHelper.canWalkThrough(ctx, possibleSupport) + && MovementHelper.canWalkThrough(ctx, possibleSupport.above())) { // this is plausible //logDebug("Faking path start assuming player is standing off the edge of a block"); return possibleSupport; diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 3109d9293..bbc713af7 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -21,17 +21,16 @@ import baritone.utils.pathing.PathingBlockType; import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.List; +import java.util.Map; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.dimension.DimensionType; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.List; -import java.util.Map; - /** * @author Brady * @since 8/3/2018 diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index 6c70f1eba..9bcebcaad 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -20,10 +20,6 @@ import baritone.Baritone; import baritone.api.cache.ICachedRegion; import baritone.api.utils.BlockUtils; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.dimension.DimensionType; - import java.io.*; import java.nio.file.Files; import java.nio.file.Path; @@ -31,6 +27,9 @@ import java.util.*; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; /** * @author Brady @@ -167,7 +166,7 @@ public synchronized final void save(String directory) { out.writeShort(entry.getValue().size()); for (BlockPos pos : entry.getValue()) { out.writeByte((byte) (pos.getZ() << 4 | pos.getX())); - out.writeInt(pos.getY() - dimension.minY()); + out.writeInt(pos.getY()-dimension.minY()); } } } @@ -272,7 +271,7 @@ public synchronized void load(String directory) { int X = xz & 0x0f; int Z = (xz >>> 4) & 0x0f; int Y = in.readInt(); - locs.add(new BlockPos(X, Y + dimension.minY(), Z)); + locs.add(new BlockPos(X, Y+dimension.minY(), Z)); } } } diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 2384d1c58..4e323097c 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -25,11 +25,6 @@ import baritone.api.utils.Helper; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.dimension.DimensionType; - import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -38,6 +33,12 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.dimension.DimensionType; /** * @author Brady diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 4f922884d..d544ac74d 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -21,7 +21,12 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DoublePlantBlock; +import net.minecraft.world.level.block.FlowerBlock; +import net.minecraft.world.level.block.TallGrassBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; @@ -29,7 +34,6 @@ import net.minecraft.world.level.dimension.BuiltinDimensionTypes; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.phys.Vec3; - import java.util.*; import static baritone.utils.BlockStateInterface.getFromChunk; @@ -40,8 +44,7 @@ */ public final class ChunkPacker { - private ChunkPacker() { - } + private ChunkPacker() {} public static CachedChunk pack(LevelChunk chunk) { //long start = System.nanoTime() / 1000000L; @@ -80,7 +83,7 @@ public static CachedChunk pack(LevelChunk chunk) { Block block = state.getBlock(); if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { String name = BlockUtils.blockToString(block); - specialBlocks.computeIfAbsent(name, b -> new ArrayList<>()).add(new BlockPos(x, y + chunk.getMinBuildHeight(), z)); + specialBlocks.computeIfAbsent(name, b -> new ArrayList<>()).add(new BlockPos(x, y+chunk.getMinBuildHeight(), z)); } } } diff --git a/src/main/java/baritone/cache/WaypointCollection.java b/src/main/java/baritone/cache/WaypointCollection.java index 52dd1f539..222adfdf6 100644 --- a/src/main/java/baritone/cache/WaypointCollection.java +++ b/src/main/java/baritone/cache/WaypointCollection.java @@ -48,8 +48,7 @@ public class WaypointCollection implements IWaypointCollection { if (!Files.exists(directory)) { try { Files.createDirectories(directory); - } catch (IOException ignored) { - } + } catch (IOException ignored) {} } System.out.println("Would save waypoints to " + directory); this.waypoints = new HashMap<>(); @@ -89,8 +88,7 @@ private synchronized void load(Waypoint.Tag tag) { int z = in.readInt(); this.waypoints.get(tag).add(new Waypoint(name, tag, new BetterBlockPos(x, y, z), creationTimestamp)); } - } catch (IOException ignored) { - } + } catch (IOException ignored) {} } private synchronized void save(Waypoint.Tag tag) { diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 0503a6827..f3d96a0db 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -20,13 +20,9 @@ import baritone.Baritone; import baritone.api.cache.IWorldProvider; import baritone.api.utils.Helper; -import net.minecraft.client.server.IntegratedServer; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.dimension.DimensionType; -import net.minecraft.world.level.storage.LevelResource; import org.apache.commons.lang3.SystemUtils; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; @@ -34,6 +30,11 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; +import net.minecraft.client.server.IntegratedServer; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.storage.LevelResource; /** * @author Brady @@ -97,16 +98,14 @@ public final void initWorld(ResourceKey worldKey, DimensionType world) { try (FileOutputStream out = new FileOutputStream(readme.resolve("readme.txt").toFile())) { // good thing we have a readme out.write("https://github.com/cabaletta/baritone\n".getBytes()); - } catch (IOException ignored) { - } + } catch (IOException ignored) {} // We will actually store the world data in a subfolder: "DIM" Path dir = getDimDir(worldKey, world.logicalHeight(), directory); if (!Files.exists(dir)) { try { Files.createDirectories(dir); - } catch (IOException ignored) { - } + } catch (IOException ignored) {} } System.out.println("Baritone world data dir: " + dir); diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 35e46ba23..2ce865a8d 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -22,6 +22,8 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; +import java.util.*; +import java.util.stream.IntStream; import net.minecraft.client.multiplayer.ClientChunkCache; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; @@ -31,9 +33,6 @@ import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.PalettedContainer; -import java.util.*; -import java.util.stream.IntStream; - public enum WorldScanner implements IWorldScanner { INSTANCE; diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index 2ba6f74c9..c3c6648fe 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -35,12 +35,9 @@ import baritone.command.manager.CommandManager; import baritone.utils.accessor.IGuiScreen; import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.*; import net.minecraft.network.chat.MutableComponent; import net.minecraft.util.Tuple; - import java.net.URI; import java.net.URISyntaxException; import java.util.List; @@ -101,8 +98,7 @@ public boolean runCommand(String msg) { } else if (msg.trim().equalsIgnoreCase("orderpizza")) { try { ((IGuiScreen) mc.screen).openLinkInvoker(new URI("https://www.dominos.com/en/pages/order/")); - } catch (NullPointerException | URISyntaxException ignored) { - } + } catch (NullPointerException | URISyntaxException ignored) {} return false; } if (msg.isEmpty()) { @@ -132,8 +128,7 @@ public boolean runCommand(String msg) { logRanCommand(command, rest); try { this.manager.execute(String.format("set %s %s", setting.getName(), argc.getString())); - } catch (CommandNotEnoughArgumentsException ignored) { - } // The operation is safe + } catch (CommandNotEnoughArgumentsException ignored) {} // The operation is safe return true; } } diff --git a/src/main/java/baritone/command/argument/CommandArguments.java b/src/main/java/baritone/command/argument/CommandArguments.java index d10fbc807..22a2ef887 100644 --- a/src/main/java/baritone/command/argument/CommandArguments.java +++ b/src/main/java/baritone/command/argument/CommandArguments.java @@ -30,8 +30,7 @@ */ public final class CommandArguments { - private CommandArguments() { - } + private CommandArguments() {} private static final Pattern ARG_PATTERN = Pattern.compile("\\S+"); diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index dfbbf06bd..5cbed55bc 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -23,11 +23,10 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.pathing.goals.GoalBlock; -import net.minecraft.world.entity.Entity; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.world.entity.Entity; public class ComeCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 02f46243b..500981873 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -25,6 +25,7 @@ import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.BetterBlockPos; import baritone.cache.CachedChunk; +import net.minecraft.core.Registry; import net.minecraft.ChatFormatting; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.ClickEvent; diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index b341db003..b7e708377 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -27,6 +27,10 @@ import baritone.api.command.exception.CommandErrorMessageException; import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; +import java.util.*; +import java.util.function.Predicate; +import java.util.stream.Stream; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; @@ -34,10 +38,6 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; -import java.util.*; -import java.util.function.Predicate; -import java.util.stream.Stream; - public class FollowCommand extends Command { public FollowCommand(IBaritone baritone) { diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index b751730e7..822884b09 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -25,17 +25,19 @@ import baritone.api.command.exception.CommandNotFoundException; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.MutableComponent; +import java.awt.*; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; + import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class HelpCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 212498240..c5b82932d 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -39,6 +39,7 @@ import baritone.utils.BlockStateInterface; import baritone.utils.IRenderer; import baritone.utils.schematic.StaticSchematic; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.world.level.block.Blocks; @@ -46,8 +47,8 @@ import net.minecraft.world.phys.AABB; import java.awt.*; -import java.util.List; import java.util.*; +import java.util.List; import java.util.function.Function; import java.util.stream.Stream; diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 02174faed..3d70c16b9 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -28,17 +28,17 @@ import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.SettingsUtil; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.MutableComponent; +import java.awt.*; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.*; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; import static baritone.api.utils.SettingsUtil.*; diff --git a/src/main/java/baritone/command/defaults/SurfaceCommand.java b/src/main/java/baritone/command/defaults/SurfaceCommand.java index d5e45bda2..3bbd4d738 100644 --- a/src/main/java/baritone/command/defaults/SurfaceCommand.java +++ b/src/main/java/baritone/command/defaults/SurfaceCommand.java @@ -24,11 +24,10 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.world.level.block.AirBlock; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.world.level.block.AirBlock; public class SurfaceCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/TunnelCommand.java b/src/main/java/baritone/command/defaults/TunnelCommand.java index 500e32cba..dec304a03 100644 --- a/src/main/java/baritone/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/command/defaults/TunnelCommand.java @@ -23,12 +23,11 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalStrictDirection; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; public class TunnelCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 94e67c401..56a833517 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -34,17 +34,17 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.MutableComponent; - import java.util.*; import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index b4e12d4be..b7853e360 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -25,11 +25,10 @@ import baritone.api.utils.Helper; import baritone.cache.WorldProvider; import baritone.utils.BlockStateInterface; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.chunk.LevelChunk; - import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; /** * @author Brady diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index d2b75f481..b37b598ff 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -89,8 +89,7 @@ protected Optional calculate0(long primaryTimeout, long failureTimeout) { if (slowPath) { try { Thread.sleep(Baritone.settings().slowPathTimeDelayMS.value); - } catch (InterruptedException ignored) { - } + } catch (InterruptedException ignored) {} } PathNode currentNode = openSet.removeLowest(); mostRecentConsidered = currentNode; diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 173748bb3..bcb81ac1d 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -29,12 +29,13 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EndPortalFrameBlock; import net.minecraft.world.level.block.state.BlockState; import java.util.ArrayList; @@ -171,7 +172,8 @@ public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { if (isPossiblyProtected(x, y, z)) { return COST_INF; } - if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z))) { + if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z)) + || current.getBlock() instanceof EndPortalFrameBlock) { return COST_INF; } return 1; diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index f671d359f..cfeca6938 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -25,13 +25,18 @@ import baritone.api.utils.input.Input; import baritone.behavior.PathingBehavior; import baritone.utils.BlockStateInterface; +import java.util.*; + +import com.mojang.authlib.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; -import java.util.*; - public abstract class Movement implements IMovement, MovementHelper { public static final Direction[] HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP = {Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST, Direction.DOWN}; diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 01e250049..ccfe3e576 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -23,8 +23,8 @@ import baritone.api.IBaritone; import baritone.api.pathing.movement.ActionCosts; import baritone.api.pathing.movement.MovementStatus; -import baritone.api.utils.Rotation; import baritone.api.utils.*; +import baritone.api.utils.Rotation; import baritone.api.utils.input.Input; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.pathing.precompute.Ternary; @@ -33,6 +33,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.piston.MovingPistonBlock; import net.minecraft.world.level.block.state.BlockState; @@ -40,12 +41,18 @@ import net.minecraft.world.level.block.state.properties.Half; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.level.block.state.properties.StairsShape; -import net.minecraft.world.level.material.*; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.WaterFluid; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; +import java.util.List; +import java.util.Objects; import java.util.Optional; import static baritone.pathing.movement.Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP; @@ -57,14 +64,17 @@ * @author leijurv */ public interface MovementHelper extends ActionCosts, Helper { - static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + if (bsi.get0(x, y + 1, z).getBlock() instanceof EndPortalFrameBlock){ + return true; + } if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z))) return true; if (!bsi.worldBorder.canPlaceAt(x, z)) { return true; } Block b = state.getBlock(); return Baritone.settings().blocksToDisallowBreaking.value.contains(b) + || b instanceof EndPortalFrameBlock || b == Blocks.ICE // ice becomes water, and water can mess up the path || b instanceof InfestedBlock // obvious reasons // call context.get directly with x,y,z. no need to make 5 new BlockPos for no reason @@ -123,8 +133,8 @@ static boolean canWalkThrough(CalculationContext context, int x, int y, int z) { static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Ternary canWalkThrough = canWalkThroughBlockState(state); Block block = state.getBlock(); + BlockState up = bsi.get0(x, y + 1, z); if (AltoClefSettings.getInstance().canSwimThroughLava() && block == Blocks.LAVA) { - BlockState up = bsi.get0(x, y + 1, z); return up.getFluidState().isEmpty(); } if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(x, y, z)) { @@ -144,7 +154,7 @@ static Ternary canWalkThroughBlockState(BlockState state) { if (block instanceof AirBlock) { return YES; } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { return NO; } if (block == Blocks.BIG_DRIPLEAF) { @@ -196,7 +206,6 @@ static Ternary canWalkThroughBlockState(BlockState state) { static boolean canWalkThroughPosition(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); - if (block instanceof CarpetBlock) { return canWalkOn(bsi, x, y - 1, z); } @@ -257,7 +266,6 @@ static Ternary fullyPassableBlockState(BlockState state) { || block instanceof SnowLayerBlock || !state.getFluidState().isEmpty() || block instanceof TrapDoorBlock - || block instanceof EndPortalBlock || block instanceof SkullBlock || block instanceof ShulkerBoxBlock) { return NO; @@ -334,7 +342,7 @@ static boolean isReplaceable(int x, int y, int z, BlockState state, BlockStateIn if (block == Blocks.LARGE_FERN || block == Blocks.TALL_GRASS) { return true; } - return state.getMaterial().isReplaceable(); + return state.canBeReplaced(); } @Deprecated @@ -395,6 +403,7 @@ static boolean avoidWalkingInto(BlockState state) { || block == Blocks.CACTUS || block == Blocks.SWEET_BERRY_BUSH || block instanceof BaseFireBlock + || block instanceof EndPortalFrameBlock || block == Blocks.END_PORTAL || block == Blocks.COBWEB || block == Blocks.BUBBLE_COLUMN; @@ -429,6 +438,14 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat static Ternary canWalkOnBlockState(BlockState state) { Block block = state.getBlock(); + //Extra blocks we may want to walk on. + if (block instanceof EndPortalFrameBlock){ + return YES; + } + if (block == Blocks.END_PORTAL && AltoClefSettings.getInstance().isCanWalkOnEndPortal()) { + return YES; + } + //***************************************** if (isBlockNormalCube(state) && block != Blocks.MAGMA_BLOCK && block != Blocks.BUBBLE_COLUMN && block != Blocks.HONEY_BLOCK) { return YES; } @@ -465,13 +482,6 @@ static Ternary canWalkOnBlockState(BlockState state) { } return YES; } - // Extra blocks we may want to walk on. - if (block == Blocks.END_PORTAL_FRAME) { - return YES; - } - if (block == Blocks.END_PORTAL && AltoClefSettings.getInstance().isCanWalkOnEndPortal()) { - return YES; - } return NO; } @@ -527,14 +537,14 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z) { static boolean canUseFrostWalker(CalculationContext context, BlockState state) { return context.frostWalker != 0 - && state.getMaterial() == Material.WATER + && state == FrostedIceBlock.meltsInto() && ((Integer) state.getValue(LiquidBlock.LEVEL)) == 0; } static boolean canUseFrostWalker(IPlayerContext ctx, BlockPos pos) { BlockState state = BlockStateInterface.get(ctx, pos); return EnchantmentHelper.hasFrostWalker(ctx.player()) - && state.getMaterial() == Material.WATER + && state == FrostedIceBlock.meltsInto() && ((Integer) state.getValue(LiquidBlock.LEVEL)) == 0; } @@ -608,7 +618,6 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i } static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, BlockState state, boolean includeFalling) { - Block block = state.getBlock(); if (!canWalkThrough(context, x, y, z, state)) { if (!state.getFluidState().isEmpty()) { return COST_INF; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index d7d95eb1b..717cd2e70 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -28,13 +28,12 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; +import java.util.Set; import net.minecraft.core.Direction; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.FallingBlock; import net.minecraft.world.level.block.state.BlockState; -import java.util.Set; - public class MovementAscend extends Movement { private int ticksWithoutPlacement = 0; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index b0afaf8d1..345157af5 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -31,6 +31,7 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; +import java.util.Set; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Block; @@ -39,8 +40,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -import java.util.Set; - public class MovementDescend extends Movement { private int numTicks = 0; @@ -50,6 +49,35 @@ public MovementDescend(IBaritone baritone, BetterBlockPos start, BetterBlockPos super(baritone, start, end, new BetterBlockPos[]{end.above(2), end.above(), end}, end.below()); } + @Override + public void reset() { + super.reset(); + numTicks = 0; + forceSafeMode = false; + } + + /** + * Called by PathExecutor if needing safeMode can only be detected with knowledge about the next movement + */ + public void forceSafeMode() { + forceSafeMode = true; + } + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is a fall not a descend + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest.above(), dest); + } + public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { double totalCost = 0; BlockState destDown = context.get(destX, y - 1, destZ); @@ -187,35 +215,6 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, } } - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is a fall not a descend - } - return result.cost; - } - - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest.above(), dest); - } - - @Override - public void reset() { - super.reset(); - numTicks = 0; - forceSafeMode = false; - } - - /** - * Called by PathExecutor if needing safeMode can only be detected with knowledge about the next movement - */ - public void forceSafeMode() { - forceSafeMode = true; - } - @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 6d7dd885d..cf387d5c9 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -29,6 +29,9 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -36,10 +39,6 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - public class MovementDiagonal extends Movement { private static final double SQRT_2 = Math.sqrt(2); @@ -57,6 +56,58 @@ private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPo super(baritone, start, end, new BetterBlockPos[]{dir1, dir1.above(), dir2, dir2.above(), end, end.above()}); } + @Override + protected boolean safeToCancel(MovementState state) { + //too simple. backfill does not work after cornering with this + //return context.precomputedData.canWalkOn(ctx, ctx.playerFeet().down()); + LocalPlayer player = ctx.player(); + double offset = 0.25; + double x = player.position().x; + double y = player.position().y - 1; + double z = player.position().z; + //standard + if (ctx.playerFeet().equals(src)) { + return true; + } + //both corners are walkable + if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) + && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { + return true; + } + //we are in a likely unwalkable corner, check for a supporting block + if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) + || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { + return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); + } + return true; + } + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is incorrect + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); + BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); + if (dest.y < src.y) { + return ImmutableSet.of(src, dest.above(), diagA, diagB, dest, diagA.below(), diagB.below()); + } + if (dest.y > src.y) { + return ImmutableSet.of(src, src.above(), diagA, diagB, dest, diagA.above(), diagB.above()); + } + return ImmutableSet.of(src, dest, diagA, diagB); + } + public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { if (!MovementHelper.canWalkThrough(context, destX, y + 1, destZ)) { return; @@ -201,58 +252,6 @@ public static void cost(CalculationContext context, int x, int y, int z, int des res.z = destZ; } - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is incorrect - } - return result.cost; - } - - @Override - protected Set calculateValidPositions() { - BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); - BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); - if (dest.y < src.y) { - return ImmutableSet.of(src, dest.above(), diagA, diagB, dest, diagA.below(), diagB.below()); - } - if (dest.y > src.y) { - return ImmutableSet.of(src, src.above(), diagA, diagB, dest, diagA.above(), diagB.above()); - } - return ImmutableSet.of(src, dest, diagA, diagB); - } - - @Override - protected boolean safeToCancel(MovementState state) { - //too simple. backfill does not work after cornering with this - //return context.precomputedData.canWalkOn(ctx, ctx.playerFeet().down()); - LocalPlayer player = ctx.player(); - double offset = 0.25; - double x = player.position().x; - double y = player.position().y - 1; - double z = player.position().z; - //standard - if (ctx.playerFeet().equals(src)) { - return true; - } - //both corners are walkable - if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) - && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { - return true; - } - //we are in a likely unwalkable corner, check for a supporting block - if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) - || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { - return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); - } - return true; - } - @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 154abddc7..a37df38b6 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -25,12 +25,11 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import com.google.common.collect.ImmutableSet; +import java.util.Set; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import java.util.Set; - public class MovementDownward extends Movement { private int numTicks = 0; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 505921524..6f1916f75 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -31,6 +31,9 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.pathing.MutableMoveResult; +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; @@ -45,10 +48,6 @@ import net.minecraft.world.level.material.WaterFluid; import net.minecraft.world.phys.Vec3; -import java.util.HashSet; -import java.util.Optional; -import java.util.Set; - public class MovementFall extends Movement { private static final ItemStack STACK_BUCKET_WATER = new ItemStack(Items.WATER_BUCKET); @@ -78,16 +77,10 @@ protected Set calculateValidPositions() { return set; } - private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, BetterBlockPos dest) { - BetterBlockPos[] toBreak; - int diffX = src.getX() - dest.getX(); - int diffZ = src.getZ() - dest.getZ(); - int diffY = Math.abs(src.getY() - dest.getY()); - toBreak = new BetterBlockPos[diffY + 2]; - for (int i = 0; i < toBreak.length; i++) { - toBreak[i] = new BetterBlockPos(src.getX() - diffX, src.getY() + 1 - i, src.getZ() - diffZ); - } - return toBreak; + private boolean willPlaceBucket() { + CalculationContext context = new CalculationContext(baritone); + MutableMoveResult result = new MutableMoveResult(); + return MovementDescend.dynamicFallCost(context, src.x, src.y, src.z, dest.x, dest.z, 0, context.get(dest.x, src.y - 2, dest.z), result); } @Override @@ -109,7 +102,7 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (ctx.player().position().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().isOnGround()) { + if (ctx.player().position().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().onGround()) { ctx.player().getInventory().selected = ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_WATER); targetRotation = new Rotation(toDest.getYaw(), 90.0F); @@ -144,7 +137,7 @@ public MovementState updateState(MovementState state) { } Vec3 destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) if (Math.abs(ctx.player().position().x + ctx.player().getDeltaMovement().x - destCenter.x) > 0.1 || Math.abs(ctx.player().position().z + ctx.player().getDeltaMovement().z - destCenter.z) > 0.1) { - if (!ctx.player().isOnGround() && Math.abs(ctx.player().getDeltaMovement().y) > 0.4) { + if (!ctx.player().onGround() && Math.abs(ctx.player().getDeltaMovement().y) > 0.4) { state.setInput(Input.SNEAK, true); } state.setInput(Input.MOVE_FORWARD, true); @@ -156,7 +149,7 @@ public MovementState updateState(MovementState state) { double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().position().x)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().position().z)); if (dist < 0.6) { state.setInput(Input.MOVE_FORWARD, true); - } else if (!ctx.player().isOnGround()) { + } else if (!ctx.player().onGround()) { state.setInput(Input.SNEAK, false); } } @@ -184,10 +177,16 @@ public boolean safeToCancel(MovementState state) { return ctx.playerFeet().equals(src) || state.getStatus() != MovementStatus.RUNNING; } - private boolean willPlaceBucket() { - CalculationContext context = new CalculationContext(baritone); - MutableMoveResult result = new MutableMoveResult(); - return MovementDescend.dynamicFallCost(context, src.x, src.y, src.z, dest.x, dest.z, 0, context.get(dest.x, src.y - 2, dest.z), result); + private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, BetterBlockPos dest) { + BetterBlockPos[] toBreak; + int diffX = src.getX() - dest.getX(); + int diffZ = src.getZ() - dest.getZ(); + int diffY = Math.abs(src.getY() - dest.getY()); + toBreak = new BetterBlockPos[diffY + 2]; + for (int i = 0; i < toBreak.length; i++) { + toBreak[i] = new BetterBlockPos(src.getX() - diffX, src.getY() + 1 - i, src.getZ() - diffZ); + } + return toBreak; } @Override diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index c46cf68bd..1fa150a21 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -279,7 +279,7 @@ public MovementState updateState(MovementState state) { if (Baritone.settings().allowPlace.value // see PR #3775 && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway() && !MovementHelper.canWalkOn(ctx, dest.below()) - && !ctx.player().isOnGround() + && !ctx.player().onGround() && MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), true, false) == PlaceResult.READY_TO_PLACE ) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index e0fba9601..50ecf930c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -32,7 +32,14 @@ import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.CarpetBlock; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.phys.Vec3; @@ -249,7 +256,7 @@ public MovementState updateState(MovementState state) { BlockState frState = BlockStateInterface.get(ctx, src); Block fr = frState.getBlock(); // TODO: Evaluate usage of getMaterial().isReplaceable() - if (!(fr instanceof AirBlock || frState.getMaterial().isReplaceable())) { + if (!(fr instanceof AirBlock || frState.canBeReplaced())) { RotationUtils.reachable(ctx.player(), src, ctx.playerController().getBlockReachDistance()) .map(rot -> new MovementState.MovementTarget(rot, true)) .ifPresent(state::setTarget); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index ffb93c0ef..a5fed58c8 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -33,7 +33,14 @@ import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.CarpetBlock; +import net.minecraft.world.level.block.DoorBlock; +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.phys.Vec3; @@ -258,7 +265,7 @@ public MovementState updateState(MovementState state) { } Block low = BlockStateInterface.get(ctx, src).getBlock(); Block high = BlockStateInterface.get(ctx, src.above()).getBlock(); - if (ctx.player().position().y > src.y + 0.1D && !ctx.player().isOnGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { + if (ctx.player().position().y > src.y + 0.1D && !ctx.player().onGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { // hitting W could cause us to climb the ladder instead of going forward // wait until we're on the ground return state; diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index e4faf0ba0..dee46c972 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -37,7 +37,6 @@ import net.minecraft.core.Vec3i; import net.minecraft.util.Tuple; import net.minecraft.world.phys.Vec3; - import java.util.*; import static baritone.api.pathing.movement.MovementStatus.*; @@ -254,19 +253,19 @@ public boolean onTick() { return canCancel; // movement is in progress, but if it reports cancellable, PathingBehavior is good to cut onto the next path } - private static boolean skipNow(IPlayerContext ctx, IMovement current) { - double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().position().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().position().x)); - if (offTarget > 0.1) { - return false; - } - // we are centered - BlockPos headBonk = current.getSrc().subtract(current.getDirection()).above(2); - if (MovementHelper.fullyPassable(ctx, headBonk)) { - return true; + private Tuple closestPathPos(IPath path) { + double best = -1; + BlockPos bestPos = null; + for (IMovement movement : path.movements()) { + for (BlockPos pos : ((Movement) movement).getValidPositions()) { + double dist = VecUtils.entityDistanceToCenter(ctx.player(), pos); + if (dist < best || best == -1) { + best = dist; + bestPos = pos; + } + } } - // wait 0.3 - double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().position().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().position().z)); - return flatDist > 0.8; + return new Tuple<>(best, bestPos); } private boolean shouldPause() { @@ -274,7 +273,7 @@ private boolean shouldPause() { if (!current.isPresent()) { return false; } - if (!ctx.player().isOnGround()) { + if (!ctx.player().onGround()) { return false; } if (!MovementHelper.canWalkOn(ctx, ctx.playerFeet().below())) { @@ -323,7 +322,7 @@ private boolean possiblyOffPath(Tuple status, double leniency) * @return Whether or not it was possible to snap to the current player feet */ public boolean snipsnapifpossible() { - if (!ctx.player().isOnGround() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { + if (!ctx.player().onGround() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { // if we're falling in the air, and not in water, don't splice return false; } else { @@ -343,74 +342,6 @@ public boolean snipsnapifpossible() { return true; } - private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse current, MovementAscend next, IMovement nextnext) { - if (!Baritone.settings().sprintAscends.value) { - return false; - } - if (!current.getDirection().equals(next.getDirection().below())) { - return false; - } - if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { - return false; - } - if (!MovementHelper.canWalkOn(ctx, current.getDest().below())) { - return false; - } - if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { - return false; - } - if (!next.toBreakCached.isEmpty()) { - return false; // it's breaking - } - for (int x = 0; x < 2; x++) { - for (int y = 0; y < 3; y++) { - BlockPos chk = current.getSrc().above(y); - if (x == 1) { - chk = chk.offset(current.getDirection()); - } - if (!MovementHelper.fullyPassable(ctx, chk)) { - return false; - } - } - } - if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().above(3)))) { - return false; - } - if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(3)) || - AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(2))) { - return false; - } - return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().above(2))); // codacy smh my head - } - - private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { - if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { - return true; - } - if (!MovementHelper.canWalkOn(ctx, current.getDest().offset(current.getDirection()))) { - return false; - } - if (next instanceof MovementTraverse && next.getDirection().equals(current.getDirection())) { - return true; - } - return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; - } - - private Tuple closestPathPos(IPath path) { - double best = -1; - BlockPos bestPos = null; - for (IMovement movement : path.movements()) { - for (BlockPos pos : ((Movement) movement).getValidPositions()) { - double dist = VecUtils.entityDistanceToCenter(ctx.player(), pos); - if (dist < best || best == -1) { - best = dist; - bestPos = pos; - } - } - } - return new Tuple<>(best, bestPos); - } - private boolean shouldSprintNextTick() { boolean requested = behavior.baritone.getInputOverrideHandler().isInputForcedDown(Input.SPRINT); @@ -581,6 +512,74 @@ private Tuple overrideFall(MovementFall movement) { movement.getDest().offset(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); } + private static boolean skipNow(IPlayerContext ctx, IMovement current) { + double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().position().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().position().x)); + if (offTarget > 0.1) { + return false; + } + // we are centered + BlockPos headBonk = current.getSrc().subtract(current.getDirection()).above(2); + if (MovementHelper.fullyPassable(ctx, headBonk)) { + return true; + } + // wait 0.3 + double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().position().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().position().z)); + return flatDist > 0.8; + } + + private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse current, MovementAscend next, IMovement nextnext) { + if (!Baritone.settings().sprintAscends.value) { + return false; + } + if (!current.getDirection().equals(next.getDirection().below())) { + return false; + } + if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, current.getDest().below())) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { + return false; + } + if (!next.toBreakCached.isEmpty()) { + return false; // it's breaking + } + for (int x = 0; x < 2; x++) { + for (int y = 0; y < 3; y++) { + BlockPos chk = current.getSrc().above(y); + if (x == 1) { + chk = chk.offset(current.getDirection()); + } + if (!MovementHelper.fullyPassable(ctx, chk)) { + return false; + } + } + } + if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().above(3)))) { + return false; + } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(3)) || + AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(2))) { + return false; + } + return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().above(2))); // codacy smh my head + } + + private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { + if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { + return true; + } + if (!MovementHelper.canWalkOn(ctx, current.getDest().offset(current.getDirection()))) { + return false; + } + if (next instanceof MovementTraverse && next.getDirection().equals(current.getDirection())) { + return true; + } + return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; + } + private void onChangeInPathPosition() { clearKeys(); ticksOnCurrent = 0; diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java index cebe07c97..af191ae1e 100644 --- a/src/main/java/baritone/process/BackfillProcess.java +++ b/src/main/java/baritone/process/BackfillProcess.java @@ -26,14 +26,13 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.path.PathExecutor; import baritone.utils.BaritoneProcessHelper; +import java.util.*; +import java.util.stream.Collectors; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.EmptyLevelChunk; -import java.util.*; -import java.util.stream.Collectors; - public final class BackfillProcess extends BaritoneProcessHelper { public HashMap blocksToReplace = new HashMap<>(); diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 8b745d95b..b8f430e1d 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -44,8 +44,8 @@ import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; import baritone.utils.schematic.MapArtSchematic; -import baritone.utils.schematic.SchematicSystem; import baritone.utils.schematic.SelectionSchematic; +import baritone.utils.schematic.SchematicSystem; import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.litematica.LitematicaHelper; import baritone.utils.schematic.schematica.SchematicaHelper; @@ -85,13 +85,7 @@ import static baritone.api.pathing.movement.ActionCosts.COST_INF; public final class BuilderProcess extends BaritoneProcessHelper implements IBuilderProcess { - public static final Set> orientationProps = - ImmutableSet.of( - RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, - StairBlock.FACING, StairBlock.HALF, StairBlock.SHAPE, - PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, - TrapDoorBlock.OPEN, TrapDoorBlock.HALF - ); + private HashSet incorrectPositions; private LongOpenHashSet observedCompleted; // positions that are completed even if they're out of render distance and we can't make sure right now private String name; @@ -104,6 +98,21 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private int numRepeats; private List approxPlaceable; private final Map protectedItems = new HashMap<>(); + + public int stopAtHeight = 0; + private boolean fromAltoclef; + private Map missing; + private boolean active; + private Stack stateStack = new Stack<>(); + private Vec3i schemSize; + private boolean fromAltoclefFinished; + + public BuilderProcess(Baritone baritone) { + super(baritone); + } + + + private Map blockBreakHistory = new HashMap<>(); private final Function, Comparable>, PropertyContainer> PROPERTY_ENTRY_TO_STRING_FUNCTION = new Function<>() { public PropertyContainer apply(@Nullable Map.Entry, Comparable> entry) { if (entry == null) { @@ -121,39 +130,37 @@ private > String getName(Property property, Comparabl return property.getName((T) comparable); } }; - public int stopAtHeight = 0; - private boolean fromAltoclef; - private Map missing; - private boolean active; - private Stack stateStack = new Stack<>(); - private Vec3i schemSize; - private boolean fromAltoclefFinished; - - public BuilderProcess(Baritone baritone) { - super(baritone); + private void pushState() { + stateStack.clear(); + stateStack.push(this.approxPlaceable); + stateStack.push(this.ticks); + stateStack.push(this.incorrectPositions); + stateStack.push(this.name); + stateStack.push(this.schematic); + stateStack.push(this.realSchematic); + stateStack.push(this.origin); + stateStack.push(this.paused); + stateStack.push(this.layer); + stateStack.push(this.numRepeats); + stateStack.push(this.observedCompleted); + stateStack.push(this.active); + stateStack.push(this.missing); + stateStack.push(this.schemSize); + stateStack.push(this.fromAltoclefFinished); + stateStack.push(this.fromAltoclef); } - private Map sbtMissing; - private Map blockBreakHistory = new HashMap<>(); + @Override + public double priority() { + return super.priority(); + } - private static Vec3[] aabbSideMultipliers(Direction side) { - switch (side) { - case UP: - return new Vec3[]{new Vec3(0.5, 1, 0.5), new Vec3(0.1, 1, 0.5), new Vec3(0.9, 1, 0.5), new Vec3(0.5, 1, 0.1), new Vec3(0.5, 1, 0.9)}; - case DOWN: - return new Vec3[]{new Vec3(0.5, 0, 0.5), new Vec3(0.1, 0, 0.5), new Vec3(0.9, 0, 0.5), new Vec3(0.5, 0, 0.1), new Vec3(0.5, 0, 0.9)}; - case NORTH: - case SOUTH: - case EAST: - case WEST: - double x = side.getStepX() == 0 ? 0.5 : (1 + side.getStepX()) / 2D; - double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D; - return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)}; - default: // null - throw new IllegalStateException(); - } + @Override + public String displayName() { + return super.displayName(); } + @Override public void build(String name, ISchematic schematic, Vec3i origin) { //Shouldn't get initially called @@ -226,11 +233,6 @@ private void protectItemOfMissing() { } } - @Override - public Vec3i getSchemSize() { - return schemSize; - } - @Override public void popStack() { if (this.stateStack.isEmpty()) { @@ -260,13 +262,6 @@ public void popStack() { } } - @Override - public boolean clearState() { - final boolean isEmpty = !stateStack.isEmpty(); - stateStack.clear(); - return isEmpty; - } - @Override public boolean isFromAltoclefFinished() { return this.fromAltoclefFinished; @@ -297,6 +292,11 @@ public void pause() { paused = true; } + @Override + public boolean isPaused() { + return paused; + } + @Override public boolean build(String name, File schematic, Vec3i origin) { Optional format = SchematicSystem.INSTANCE.getByFile(schematic); @@ -325,11 +325,6 @@ public boolean build(String name, File schematic, Vec3i origin) { return true; } - @Override - public boolean build(String schematicFile, BlockPos origin) { - return IBuilderProcess.super.build(schematicFile, origin); - } - @Override public void buildOpenSchematic() { if (SchematicaHelper.isSchematicaPresent()) { @@ -354,19 +349,6 @@ public void buildOpenSchematic() { } } - @Override - public boolean isPaused() { - return paused; - } - - public void clearArea(BlockPos corner1, BlockPos corner2) { - BlockPos origin = new BlockPos(Math.min(corner1.getX(), corner2.getX()), Math.min(corner1.getY(), corner2.getY()), Math.min(corner1.getZ(), corner2.getZ())); - int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; - int heightY = Math.abs(corner1.getY() - corner2.getY()) + 1; - int lengthZ = Math.abs(corner1.getZ() - corner2.getZ()) + 1; - build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.defaultBlockState()), origin); - } - @Override public void buildOpenLitematic(int i) { if (LitematicaHelper.isLitematicaPresent()) { @@ -389,17 +371,12 @@ public void buildOpenLitematic(int i) { } } - @Override - public void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef) { - this.build(name, schematic, origin); - this.fromAltoclef = fromAltoclef; - } - - @Override - public boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef) { - final boolean bl = this.build(name, schematic, origin); - this.fromAltoclef = fromAltoclef; - return bl; + public void clearArea(BlockPos corner1, BlockPos corner2) { + BlockPos origin = new BlockPos(Math.min(corner1.getX(), corner2.getX()), Math.min(corner1.getY(), corner2.getY()), Math.min(corner1.getZ(), corner2.getZ())); + int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; + int heightY = Math.abs(corner1.getY() - corner2.getY()) + 1; + int lengthZ = Math.abs(corner1.getZ() - corner2.getZ()) + 1; + build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.defaultBlockState()), origin); } @Override @@ -412,6 +389,20 @@ public boolean isActive() { return schematic != null; } + public BlockState placeAt(int x, int y, int z, BlockState current) { + if (!isActive()) { + return null; + } + if (!schematic.inSchematic(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current)) { + return null; + } + BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current, this.approxPlaceable); + if (state.getBlock() instanceof AirBlock) { + return null; + } + return state; + } + private Optional> toBreakNearPlayer(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); BetterBlockPos pathStart = baritone.getPathingBehavior().pathStart(); @@ -442,18 +433,19 @@ private Optional> toBreakNearPlayer(BuilderCalcu return Optional.empty(); } - public BlockState placeAt(int x, int y, int z, BlockState current) { - if (!isActive()) { - return null; - } - if (!schematic.inSchematic(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current)) { - return null; - } - BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current, this.approxPlaceable); - if (state.getBlock() instanceof AirBlock) { - return null; + public static class Placement { + + private final int hotbarSelection; + private final BlockPos placeAgainst; + private final Direction side; + private final Rotation rot; + + public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { + this.hotbarSelection = hotbarSelection; + this.placeAgainst = placeAgainst; + this.side = side; + this.rot = rot; } - return state; } private Optional searchForPlacables(BuilderCalculationContext bcc, List desirableOnHotbar) { @@ -522,11 +514,6 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in return Optional.empty(); } - @Override - public boolean isFromAltoclef() { - return this.fromAltoclef; - } - private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { for (int i = 0; i < 9; i++) { ItemStack stack = ctx.player().getInventory().items.get(i); @@ -544,8 +531,7 @@ private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult resul InteractionHand.MAIN_HAND, stack, (BlockHitResult) result - ) { - }); // that {} gives us access to a protected constructor lmfao + ) {}); // that {} gives us access to a protected constructor lmfao BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); ctx.player().setYRot(originalYaw); ctx.player().setXRot(originalPitch); @@ -579,14 +565,6 @@ private boolean anyHistoryMatch(final BlockPos pos) { return getFromHistory(pos) != null; //blockBreakHistory.keySet().stream().anyMatch(e -> e.getX() == pos.getX() && e.getY() == pos.getY() && e.getZ() == pos.getZ()); } - private boolean breakLimitExceeded(final BlockPos pos) { - if (!anyHistoryMatch(pos)) { - return false; - } - - return blockBreakHistory.get(getFromHistory(pos)).counter > 10; - } - private void noteRemoval(final BlockPos pos) { if (pos == null) return; if (anyHistoryMatch(pos)) { @@ -598,20 +576,29 @@ private void noteRemoval(final BlockPos pos) { } } - @Override - public void noteInsert(final BlockPos pos) { - if (anyHistoryMatch(pos)) { - final BlockPos orig = getFromHistory(pos); - final HistoryInfo info = blockBreakHistory.get(orig); - if (info.brokenPreviously) { - info.counter++; - info.brokenPreviously = false; - } - } else { - blockBreakHistory.put(pos, new HistoryInfo()); + private static Vec3[] aabbSideMultipliers(Direction side) { + switch (side) { + case UP: + return new Vec3[]{new Vec3(0.5, 1, 0.5), new Vec3(0.1, 1, 0.5), new Vec3(0.9, 1, 0.5), new Vec3(0.5, 1, 0.1), new Vec3(0.5, 1, 0.9)}; + case DOWN: + return new Vec3[]{new Vec3(0.5, 0, 0.5), new Vec3(0.1, 0, 0.5), new Vec3(0.9, 0, 0.5), new Vec3(0.5, 0, 0.1), new Vec3(0.5, 0, 0.9)}; + case NORTH: + case SOUTH: + case EAST: + case WEST: + double x = side.getStepX() == 0 ? 0.5 : (1 + side.getStepX()) / 2D; + double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D; + return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)}; + default: // null + throw new IllegalStateException(); } } + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + return onTick(calcFailed, isSafeToCancel, 0); + } + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel, int recursions) { if (recursions > 1000) { // onTick calls itself, don't crash return new PathingCommand(null, PathingCommandType.SET_GOAL_AND_PATH); @@ -692,9 +679,7 @@ public int lengthZ() { if (this.fromAltoclef) { this.fromAltoclefFinished = true; } - - reset(); - + onLostControl(); if (this.fromAltoclefFinished) { this.stateStack.clear(); } @@ -714,7 +699,7 @@ public int lengthZ() { } Optional> toBreak = toBreakNearPlayer(bcc); - if (toBreak.isPresent() && isSafeToCancel && ctx.player().isOnGround()) { + if (toBreak.isPresent() && isSafeToCancel && ctx.player().onGround()) { // we'd like to pause to break this block // only change look direction if it's safe (don't want to fuck up an in progress parkour for example Rotation rot = toBreak.get().getB(); @@ -737,7 +722,7 @@ public int lengthZ() { List desirableOnHotbar = new ArrayList<>(); Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); if (!AltoClefSettings.getInstance().isInteractionPaused() && toPlace.isPresent() && isSafeToCancel && - ctx.player().isOnGround() && ticks <= 0) { + ctx.player().onGround() && ticks <= 0) { Rotation rot = toPlace.get().rot; baritone.getLookBehavior().updateTarget(rot, true); ctx.player().getInventory().selected = toPlace.get().hotbarSelection; @@ -792,9 +777,19 @@ public int lengthZ() { return new PathingCommandContext(goal, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH, bcc); } - @Override - public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - return onTick(calcFailed, isSafeToCancel, 0); + private boolean recalc(BuilderCalculationContext bcc) { + if (incorrectPositions == null) { + incorrectPositions = new HashSet<>(); + fullRecalc(bcc); + if (incorrectPositions.isEmpty()) { + return false; + } + } + recalcNearby(bcc); + if (incorrectPositions.isEmpty()) { + fullRecalc(bcc); + } + return !incorrectPositions.isEmpty(); } private void trim() { @@ -814,21 +809,6 @@ private void updateMovement() { movement.update(); } - private boolean recalc(BuilderCalculationContext bcc) { - if (incorrectPositions == null) { - incorrectPositions = new HashSet<>(); - fullRecalc(bcc); - if (incorrectPositions.isEmpty()) { - return false; - } - } - recalcNearby(bcc); - if (incorrectPositions.isEmpty()) { - fullRecalc(bcc); - } - return !incorrectPositions.isEmpty(); - } - private void recalcNearby(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); int radius = Baritone.settings().builderTickScanRadius.value; @@ -895,12 +875,29 @@ private void fullRecalc(BuilderCalculationContext bcc) { } } + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable) { + return assemble(bcc, approxPlaceable, false); + } + + private boolean isDefaultState(final BlockState state) { + final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); + for (final PropertyContainer container : propertyContainers) { + if (container.getPropertyKey().equals("part") && container.getPropertyValue().equals("head")) { + return false; + } + if (container.getPropertyKey().equals("half") && container.getPropertyValue().equals("upper")) { + return false; + } + } + return true; + } + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable, boolean logMissing) { List placeable = new ArrayList<>(); List breakable = new ArrayList<>(); List sourceLiquids = new ArrayList<>(); List flowingLiquids = new ArrayList<>(); - missing.clear(); + Map missing = new HashMap<>(); incorrectPositions.forEach(pos -> { BlockState state = bcc.bsi.get0(pos); if (state.getBlock() instanceof AirBlock) { @@ -965,35 +962,63 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return new GoalComposite(toBreak.toArray(new Goal[0])); } - private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable) { - return assemble(bcc, approxPlaceable, false); - } + public static class JankyGoalComposite implements Goal { - private boolean sameWithoutOrientation(BlockState first, BlockState second) { - if (first.getBlock() != second.getBlock()) { - return false; - } - ImmutableMap, Comparable> map1 = first.getValues(); - ImmutableMap, Comparable> map2 = second.getValues(); - for (Property prop : map1.keySet()) { - if (map1.get(prop) != map2.get(prop) && !orientationProps.contains(prop)) { - return false; - } + private final Goal primary; + private final Goal fallback; + + public JankyGoalComposite(Goal primary, Goal fallback) { + this.primary = primary; + this.fallback = fallback; } - return true; - } - private boolean isDefaultState(final BlockState state) { - final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); - for (final PropertyContainer container : propertyContainers) { - if (container.getPropertyKey().equals("part") && container.getPropertyValue().equals("head")) { + + @Override + public boolean isInGoal(int x, int y, int z) { + return primary.isInGoal(x, y, z) || fallback.isInGoal(x, y, z); + } + + @Override + public double heuristic(int x, int y, int z) { + return primary.heuristic(x, y, z); + } + + @Override + public String toString() { + return "JankyComposite Primary: " + primary + " Fallback: " + fallback; + } + } + + public static class GoalBreak extends GoalGetToBlock { + + public GoalBreak(BlockPos pos) { + super(pos); + } + + @Override + public boolean isInGoal(int x, int y, int z) { + // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) + if (y > this.y) { return false; } - if (container.getPropertyKey().equals("half") && container.getPropertyValue().equals("upper")) { - return false; + // but any other adjacent works for breaking, including inside or below + return super.isInGoal(x, y, z); + } + } + + private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { + if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? + return new GoalPlace(pos); + } + boolean allowSameLevel = !(ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock); + BlockState current = ctx.world().getBlockState(pos); + for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { + //noinspection ConstantConditions + if (MovementHelper.canPlaceAgainst(ctx, pos.relative(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { + return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); } } - return true; + return new GoalPlace(pos); } private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { @@ -1081,51 +1106,75 @@ public void logDirect(String message) { super.logDirect(message); } - public static class JankyGoalComposite implements Goal { + public static class GoalAdjacent extends GoalGetToBlock { - private final Goal primary; - private final Goal fallback; + private boolean allowSameLevel; + private BlockPos no; - public JankyGoalComposite(Goal primary, Goal fallback) { - this.primary = primary; - this.fallback = fallback; + public GoalAdjacent(BlockPos pos, BlockPos no, boolean allowSameLevel) { + super(pos); + this.no = no; + this.allowSameLevel = allowSameLevel; } - - @Override public boolean isInGoal(int x, int y, int z) { - return primary.isInGoal(x, y, z) || fallback.isInGoal(x, y, z); + if (x == this.x && y == this.y && z == this.z) { + return false; + } + if (x == no.getX() && y == no.getY() && z == no.getZ()) { + return false; + } + if (!allowSameLevel && y == this.y - 1) { + return false; + } + if (y < this.y - 1) { + return false; + } + return super.isInGoal(x, y, z); } - @Override public double heuristic(int x, int y, int z) { - return primary.heuristic(x, y, z); + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); } + } - @Override - public String toString() { - return "JankyComposite Primary: " + primary + " Fallback: " + fallback; + public static class GoalPlace extends GoalBlock { + + public GoalPlace(BlockPos placeAt) { + super(placeAt.above()); + } + + public double heuristic(int x, int y, int z) { + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); } } @Override - public String displayName0() { - return paused ? "Builder Paused" : "Building " + name; + public void onLostControl() { + if (this.fromAltoclef && this.stateStack.isEmpty()) { + pushState(); + } + incorrectPositions = null; + name = null; + schematic = null; + realSchematic = null; + layer = Baritone.settings().startAtLayer.value; + numRepeats = 0; + paused = false; + observedCompleted = null; + origin = null; + missing = null; + schemSize = null; + fromAltoclef = false; + active = false; + blockBreakHistory.clear(); } - private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? - return new GoalPlace(pos); - } - boolean allowSameLevel = !(ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock); - BlockState current = ctx.world().getBlockState(pos); - for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { - //noinspection ConstantConditions - if (MovementHelper.canPlaceAgainst(ctx, pos.relative(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { - return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); - } - } - return new GoalPlace(pos); + @Override + public String displayName0() { + return paused ? "Builder Paused" : "Building " + name; } private List approxPlaceable(int size) { @@ -1138,13 +1187,12 @@ private List approxPlaceable(int size) { } // BlockState itemState = ((BlockItem) stack.getItem()) - .getBlock() - .getStateForPlacement( - new BlockPlaceContext( - new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { - } - ) - ); + .getBlock() + .getStateForPlacement( + new BlockPlaceContext( + new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {} + ) + ); if (itemState != null) { result.add(itemState); } else { @@ -1155,38 +1203,13 @@ private List approxPlaceable(int size) { return result; } - public static class GoalAdjacent extends GoalGetToBlock { - - private boolean allowSameLevel; - private BlockPos no; - - public GoalAdjacent(BlockPos pos, BlockPos no, boolean allowSameLevel) { - super(pos); - this.no = no; - this.allowSameLevel = allowSameLevel; - } - - public boolean isInGoal(int x, int y, int z) { - if (x == this.x && y == this.y && z == this.z) { - return false; - } - if (x == no.getX() && y == no.getY() && z == no.getZ()) { - return false; - } - if (!allowSameLevel && y == this.y - 1) { - return false; - } - if (y < this.y - 1) { - return false; - } - return super.isInGoal(x, y, z); - } - - public double heuristic(int x, int y, int z) { - // prioritize lower y coordinates - return this.y * 100 + super.heuristic(x, y, z); - } - } + public static final Set> orientationProps = + ImmutableSet.of( + RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, + StairBlock.FACING, StairBlock.HALF, StairBlock.SHAPE, + PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, + TrapDoorBlock.OPEN, TrapDoorBlock.HALF + ); private boolean sameBlockstate(BlockState first, BlockState second) { if (first.getBlock() != second.getBlock()) { @@ -1209,27 +1232,6 @@ private boolean sameBlockstate(BlockState first, BlockState second) { return true; } - @Override - public void onLostControl() { - if (this.fromAltoclef && this.stateStack.isEmpty()) { - pushState(); - } - incorrectPositions = null; - name = null; - schematic = null; - realSchematic = null; - layer = Baritone.settings().startAtLayer.value; - numRepeats = 0; - paused = false; - observedCompleted = null; - origin = null; - missing = null; - schemSize = null; - fromAltoclef = false; - active = false; - blockBreakHistory.clear(); - } - private boolean valid(BlockState current, BlockState desired, boolean itemVerify) { if (desired == null) { return true; @@ -1258,96 +1260,6 @@ private boolean valid(BlockState current, BlockState desired, boolean itemVerify return sameBlockstate(current, desired); } - private void pushState() { - stateStack.clear(); - stateStack.push(this.approxPlaceable); - stateStack.push(this.ticks); - stateStack.push(this.incorrectPositions); - stateStack.push(this.name); - stateStack.push(this.schematic); - stateStack.push(this.realSchematic); - stateStack.push(this.origin); - stateStack.push(this.paused); - stateStack.push(this.layer); - stateStack.push(this.numRepeats); - stateStack.push(this.observedCompleted); - stateStack.push(this.active); - stateStack.push(this.missing); - stateStack.push(this.schemSize); - stateStack.push(this.fromAltoclefFinished); - stateStack.push(this.fromAltoclef); - } - - @Override - public void reset() { - onLostControl(); - } - - @Override - public Map getMissing() { - if (this.sbtMissing == null) this.sbtMissing = new HashMap<>(); - if (this.fromAltoclef && this.missing != null) { - this.sbtMissing.clear(); - this.sbtMissing.putAll(this.missing); - } - return new HashMap<>(this.sbtMissing); - //return (this.fromAltoclef) ? new HashMap<>(this.missing) : null; - } - - @Override - public double priority() { - return super.priority(); - } - - @Override - public String displayName() { - return super.displayName(); - } - - public static class Placement { - - private final int hotbarSelection; - private final BlockPos placeAgainst; - private final Direction side; - private final Rotation rot; - - public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { - this.hotbarSelection = hotbarSelection; - this.placeAgainst = placeAgainst; - this.side = side; - this.rot = rot; - } - } - - public static class GoalBreak extends GoalGetToBlock { - - public GoalBreak(BlockPos pos) { - super(pos); - } - - @Override - public boolean isInGoal(int x, int y, int z) { - // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) - if (y > this.y) { - return false; - } - // but any other adjacent works for breaking, including inside or below - return super.isInGoal(x, y, z); - } - } - - public static class GoalPlace extends GoalBlock { - - public GoalPlace(BlockPos placeAt) { - super(placeAt.above()); - } - - public double heuristic(int x, int y, int z) { - // prioritize lower y coordinates - return this.y * 100 + super.heuristic(x, y, z); - } - } - public class BuilderCalculationContext extends CalculationContext { private final List placeable; @@ -1440,7 +1352,6 @@ public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { } } } - private final class PropertyContainer { private final String propertyKey; private final String propertyValue; @@ -1458,7 +1369,6 @@ public String getPropertyValue() { return this.propertyValue; } } - private final class HistoryInfo { public long counter = 0; public boolean brokenPreviously = false; diff --git a/src/main/java/baritone/process/ExploreProcess.java b/src/main/java/baritone/process/ExploreProcess.java index e1f053e02..23fe7c23a 100644 --- a/src/main/java/baritone/process/ExploreProcess.java +++ b/src/main/java/baritone/process/ExploreProcess.java @@ -32,14 +32,13 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.ChunkPos; - import java.io.InputStreamReader; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; public final class ExploreProcess extends BaritoneProcessHelper implements IExploreProcess { diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 3b9934174..b9308591c 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -40,12 +40,18 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.CactusBlock; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.NetherWartBlock; +import net.minecraft.world.level.block.SugarCaneBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -297,7 +303,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } } for (Entity entity : ctx.entities()) { - if (entity instanceof ItemEntity && entity.isOnGround()) { + if (entity instanceof ItemEntity && entity.onGround()) { ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 71f43c6de..b123216a6 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -27,12 +27,11 @@ import baritone.api.process.PathingCommandType; import baritone.api.utils.BetterBlockPos; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; - import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; /** * Follow an entity diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 5233b6109..88cc5bfa2 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -154,14 +154,18 @@ public synchronized boolean blacklistClosest() { return !newBlacklist.isEmpty(); } - private Goal createGoal(BlockPos pos) { - if (walkIntoInsteadOfAdjacent(gettingTo.getBlock())) { - return new GoalTwoBlocks(pos); + // this is to signal to MineProcess that we don't care about the allowBreak setting + // it is NOT to be used to actually calculate a path + public class GetToBlockCalculationContext extends CalculationContext { + + public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { + super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); } - if (blockOnTopMustBeRemoved(gettingTo.getBlock()) && MovementHelper.isBlockNormalCube(baritone.bsi.get0(pos.above()))) { // TODO this should be the check for chest openability - return new GoalBlock(pos.above()); + + @Override + public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { + return 1; } - return new GoalGetToBlock(pos); } // safer than direct double comparison from distanceSq @@ -195,18 +199,14 @@ private synchronized void rescan(List known, CalculationContext contex knownLocations = positions; } - // this is to signal to MineProcess that we don't care about the allowBreak setting - // it is NOT to be used to actually calculate a path - public class GetToBlockCalculationContext extends CalculationContext { - - public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { - super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); + private Goal createGoal(BlockPos pos) { + if (walkIntoInsteadOfAdjacent(gettingTo.getBlock())) { + return new GoalTwoBlocks(pos); } - - @Override - public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { - return 1; + if (blockOnTopMustBeRemoved(gettingTo.getBlock()) && MovementHelper.isBlockNormalCube(baritone.bsi.get0(pos.above()))) { // TODO this should be the check for chest openability + return new GoalBlock(pos.above()); } + return new GoalGetToBlock(pos); } private boolean rightClick() { diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 54755df44..9a619d970 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -24,6 +24,7 @@ import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; import baritone.api.utils.*; +import baritone.api.utils.Rotation; import baritone.api.utils.input.Input; import baritone.cache.CachedChunk; import baritone.cache.WorldScanner; @@ -36,10 +37,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.AirBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.BlockState; import java.util.*; @@ -69,94 +67,87 @@ public MineProcess(Baritone baritone) { super(baritone); } - public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { - List locs = new ArrayList<>(); - List untracked = new ArrayList<>(); - int maxTotal = max * filter.blocks().size(); - for (BlockOptionalMeta bom : filter.blocks()) { - Block block = bom.getBlock(); - if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { - BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); + @Override + public boolean isActive() { + return filter != null; + } - // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that - locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( - BlockUtils.blockToString(block), - Baritone.settings().maxCachedWorldScanCount.value, - pf.x, - pf.z, - 2 - )); + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (desiredQuantity > 0) { + int curr = ctx.player().getInventory().items.stream() + .filter(stack -> filter.has(stack)) + .mapToInt(ItemStack::getCount).sum(); + System.out.println("Currently have " + curr + " valid items"); + if (curr >= desiredQuantity) { + logDirect("Have " + curr + " valid items"); + cancel(); + return null; + } + } + if (calcFailed) { + if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { + logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); + } + knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(blacklist::add); + knownOreLocations.removeIf(blacklist::contains); } else { - untracked.add(block); + logDirect("Unable to find any path to " + filter + ", canceling mine"); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", canceling mine", true); + } + cancel(); + return null; } } - - locs = prune(ctx, locs, filter, max, blacklist, dropped); - - if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < maxTotal)) { - locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( - ctx.getBaritone().getPlayerContext(), - filter, - max, - 10, - 32 - )); // maxSearchRadius is NOT sq + // Wait for pause interactions + if (AltoClefSettings.getInstance().isInteractionPaused()) { + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } - - locs.addAll(alreadyKnown); - - return prune(ctx, locs, filter, max, blacklist, dropped); - } - - private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { - dropped.removeIf(drop -> { - for (BlockPos pos : locs2) { - if (pos.distSqr(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ()))/* && MineProcess.plausibleToBreak(ctx, pos)*/) { // TODO maybe drop also has to be supported? no lava below? - return true; - } + updateLoucaSystem(); + int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; + List curr = new ArrayList<>(knownOreLocations); + if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain + CalculationContext context = new CalculationContext(baritone, true); + Baritone.getExecutor().execute(() -> rescan(curr, context)); + } + if (Baritone.settings().legitMine.value) { + if (!addNearby()) { + cancel(); + return null; } - return false; - }); - HashMap countsPerBlock = new HashMap<>(); - List locs = locs2 - .stream() - .distinct() - - // remove any that are within loaded chunks that aren't actually what we want - .filter(pos -> !ctx.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ()) || filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) - - // remove any that are implausible to mine (encased in bedrock, or touching lava) - //.filter(pos -> MineProcess.plausibleToBreak(ctx, pos)) - - .filter(pos -> { - if (Baritone.settings().allowOnlyExposedOres.value) { - return isNextToAir(ctx, pos); - } else { - return true; - } - }) - - .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value + ctx.world.dimensionType().minY()) - - .filter(pos -> !blacklist.contains(pos)) - - .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().blockPosition()::distSqr)) - .collect(Collectors.toList()); - - // Prune out a certain number per block type - locs = locs.stream() - .filter(pos -> { - Block b = ctx.getBlock(pos.getX(), pos.getY(), pos.getZ()); - int count = countsPerBlock.getOrDefault(b, 0); - if (count <= max) { - countsPerBlock.put(b, count + 1); - return true; - } else { - return false; + } + Optional shaft = curr.stream() + .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) + .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) + .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( + .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); + baritone.getInputOverrideHandler().clearAllKeys(); + if (shaft.isPresent() && ctx.player().onGround()) { + BlockPos pos = shaft.get(); + BlockState state = baritone.bsi.get0(pos); + if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { + Optional rot = RotationUtils.reachable(ctx, pos); + if (rot.isPresent() && isSafeToCancel) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); + if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); } - }).collect(Collectors.toList()); - - return locs; + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + } + PathingCommand command = updateGoal(); + if (command == null) { + // none in range + // maybe say something in chat? (ahem impact) + cancel(); + return null; + } + return command; } @@ -187,28 +178,76 @@ public String displayName0() { return "Mine " + filter; } - public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { - int radius = Baritone.settings().allowOnlyExposedOresDistance.value; - for (int dx = -radius; dx <= radius; dx++) { - for (int dy = -radius; dy <= radius; dy++) { - for (int dz = -radius; dz <= radius; dz++) { - if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius - && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { - return true; - } + private PathingCommand updateGoal() { + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return null; + } + + boolean legit = Baritone.settings().legitMine.value; + List locs = knownOreLocations; + if (!locs.isEmpty()) { + CalculationContext context = new CalculationContext(baritone); + List locs2 = prune(context, new ArrayList<>(locs), filter, ORE_LOCATIONS_COUNT, blacklist, droppedItemsScan()); + // can't reassign locs, gotta make a new var locs2, because we use it in a lambda right here, and variables you use in a lambda must be effectively final + Goal goal = new GoalComposite(locs2.stream().map(loc -> coalesce(loc, locs2, context)).toArray(Goal[]::new)); + knownOreLocations = locs2; + return new PathingCommand(goal, legit ? PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH : PathingCommandType.REVALIDATE_GOAL_AND_PATH); + } + // we don't know any ore locations at the moment + if (!legit && !Baritone.settings().exploreForBlocks.value) { + return null; + } + // only when we should explore for blocks or are in legit mode we do this + int y = Baritone.settings().legitMineYLevel.value; + if (branchPoint == null) { + /*if (!baritone.getPathingBehavior().isPathing() && playerFeet().y == y) { + // cool, path is over and we are at desired y + branchPoint = playerFeet(); + branchPointRunaway = null; + } else { + return new GoalYLevel(y); + }*/ + branchPoint = ctx.playerFeet(); + } + // TODO shaft mode, mine 1x1 shafts to either side + // TODO also, see if the GoalRunAway with maintain Y at 11 works even from the surface + if (branchPointRunaway == null) { + branchPointRunaway = new GoalRunAway(1, y, branchPoint) { + @Override + public boolean isInGoal(int x, int y, int z) { + return false; } - } + + @Override + public double heuristic() { + return Double.NEGATIVE_INFINITY; + } + }; } - return false; + return new PathingCommand(branchPointRunaway, PathingCommandType.REVALIDATE_GOAL_AND_PATH); } - public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { - if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { - return false; + private void rescan(List already, CalculationContext context) { + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return; } - - // bedrock above and below makes it implausible, otherwise we're good - return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); + if (Baritone.settings().legitMine.value) { + return; + } + List dropped = droppedItemsScan(); + List locs = searchWorld(context, filter, ORE_LOCATIONS_COUNT, already, blacklist, dropped); + locs.addAll(dropped); + if (locs.isEmpty() && !Baritone.settings().exploreForBlocks.value) { + logDirect("No locations for " + filter + " known, cancelling"); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("No locations for " + filter + " known, cancelling", true); + } + cancel(); + return; + } + knownOreLocations = locs; } private boolean internalMiningGoal(BlockPos pos, CalculationContext context, List locs) { @@ -265,9 +304,24 @@ private Goal coalesce(BlockPos loc, List locs, CalculationContext cont return new GoalBlock(loc.below()); } - @Override - public boolean isActive() { - return filter != null; + private static class GoalThreeBlocks extends GoalTwoBlocks { + + public GoalThreeBlocks(BlockPos pos) { + super(pos); + } + + @Override + public boolean isInGoal(int x, int y, int z) { + return x == this.x && (y == this.y || y == this.y - 1 || y == this.y - 2) && z == this.z; + } + + @Override + public double heuristic(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); + } } public List droppedItemsScan() { @@ -287,76 +341,43 @@ public List droppedItemsScan() { return ret; } - private PathingCommand updateGoal() { - BlockOptionalMetaLookup filter = filterFilter(); - if (filter == null) { - return null; - } + public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { + List locs = new ArrayList<>(); + List untracked = new ArrayList<>(); + int maxTotal = max * filter.blocks().size(); + for (BlockOptionalMeta bom : filter.blocks()) { + Block block = bom.getBlock(); + if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { + BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); - boolean legit = Baritone.settings().legitMine.value; - List locs = knownOreLocations; - if (!locs.isEmpty()) { - CalculationContext context = new CalculationContext(baritone); - List locs2 = prune(context, new ArrayList<>(locs), filter, ORE_LOCATIONS_COUNT, blacklist, droppedItemsScan()); - // can't reassign locs, gotta make a new var locs2, because we use it in a lambda right here, and variables you use in a lambda must be effectively final - Goal goal = new GoalComposite(locs2.stream().map(loc -> coalesce(loc, locs2, context)).toArray(Goal[]::new)); - knownOreLocations = locs2; - return new PathingCommand(goal, legit ? PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH : PathingCommandType.REVALIDATE_GOAL_AND_PATH); - } - // we don't know any ore locations at the moment - if (!legit && !Baritone.settings().exploreForBlocks.value) { - return null; - } - // only when we should explore for blocks or are in legit mode we do this - int y = Baritone.settings().legitMineYLevel.value; - if (branchPoint == null) { - /*if (!baritone.getPathingBehavior().isPathing() && playerFeet().y == y) { - // cool, path is over and we are at desired y - branchPoint = playerFeet(); - branchPointRunaway = null; + // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that + locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( + BlockUtils.blockToString(block), + Baritone.settings().maxCachedWorldScanCount.value, + pf.x, + pf.z, + 2 + )); } else { - return new GoalYLevel(y); - }*/ - branchPoint = ctx.playerFeet(); + untracked.add(block); + } } - // TODO shaft mode, mine 1x1 shafts to either side - // TODO also, see if the GoalRunAway with maintain Y at 11 works even from the surface - if (branchPointRunaway == null) { - branchPointRunaway = new GoalRunAway(1, y, branchPoint) { - @Override - public boolean isInGoal(int x, int y, int z) { - return false; - } - @Override - public double heuristic() { - return Double.NEGATIVE_INFINITY; - } - }; - } - return new PathingCommand(branchPointRunaway, PathingCommandType.REVALIDATE_GOAL_AND_PATH); - } + locs = prune(ctx, locs, filter, max, blacklist, dropped); - private void rescan(List already, CalculationContext context) { - BlockOptionalMetaLookup filter = filterFilter(); - if (filter == null) { - return; - } - if (Baritone.settings().legitMine.value) { - return; - } - List dropped = droppedItemsScan(); - List locs = searchWorld(context, filter, ORE_LOCATIONS_COUNT, already, blacklist, dropped); - locs.addAll(dropped); - if (locs.isEmpty() && !Baritone.settings().exploreForBlocks.value) { - logDirect("No locations for " + filter + " known, cancelling"); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("No locations for " + filter + " known, cancelling", true); - } - cancel(); - return; + if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < maxTotal)) { + locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( + ctx.getBaritone().getPlayerContext(), + filter, + max, + 10, + 32 + )); // maxSearchRadius is NOT sq } - knownOreLocations = locs; + + locs.addAll(alreadyKnown); + + return prune(ctx, locs, filter, max, blacklist, dropped); } private boolean addNearby() { @@ -391,82 +412,77 @@ private boolean addNearby() { return true; } - @Override - public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - if (desiredQuantity > 0) { - int curr = ctx.player().getInventory().items.stream() - .filter(stack -> filter.has(stack)) - .mapToInt(ItemStack::getCount).sum(); - System.out.println("Currently have " + curr + " valid items"); - if (curr >= desiredQuantity) { - logDirect("Have " + curr + " valid items"); - cancel(); - return null; - } - } - if (calcFailed) { - if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { - logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); - } - knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(blacklist::add); - knownOreLocations.removeIf(blacklist::contains); - } else { - logDirect("Unable to find any path to " + filter + ", canceling mine"); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("Unable to find any path to " + filter + ", canceling mine", true); + private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { + dropped.removeIf(drop -> { + for (BlockPos pos : locs2) { + if (pos.distSqr(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) && MineProcess.plausibleToBreak(ctx, pos)) { // TODO maybe drop also has to be supported? no lava below? + return true; } - cancel(); - return null; - } - } - // Wait for pause interactions - if (AltoClefSettings.getInstance().isInteractionPaused()) { - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); - } - updateLoucaSystem(); - int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; - List curr = new ArrayList<>(knownOreLocations); - if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain - CalculationContext context = new CalculationContext(baritone, true); - Baritone.getExecutor().execute(() -> rescan(curr, context)); - } - if (Baritone.settings().legitMine.value) { - if (!addNearby()) { - cancel(); - return null; } + return false; + }); + List locs = locs2 + .stream() + .distinct() + + // remove any that are within loaded chunks that aren't actually what we want + .filter(pos -> !ctx.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ()) || filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) + + // remove any that are implausible to mine (encased in bedrock, or touching lava) + .filter(pos -> MineProcess.plausibleToBreak(ctx, pos)) + + .filter(pos -> { + if (Baritone.settings().allowOnlyExposedOres.value) { + return isNextToAir(ctx, pos); + } else { + return true; + } + }) + + .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value + ctx.world.dimensionType().minY()) + + .filter(pos -> !blacklist.contains(pos)) + + .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().blockPosition()::distSqr)) + .collect(Collectors.toList()); + + if (locs.size() > max) { + return locs.subList(0, max); } - Optional shaft = curr.stream() - .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) - .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) - .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( - .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); - baritone.getInputOverrideHandler().clearAllKeys(); - if (shaft.isPresent() && ctx.player().isOnGround()) { - BlockPos pos = shaft.get(); - BlockState state = baritone.bsi.get0(pos); - if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { - Optional rot = RotationUtils.reachable(ctx, pos); - if (rot.isPresent() && isSafeToCancel) { - baritone.getLookBehavior().updateTarget(rot.get(), true); - MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); - if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { - baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); + return locs; + } + + public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { + int radius = Baritone.settings().allowOnlyExposedOresDistance.value; + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius + && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { + return true; } - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } } } - PathingCommand command = updateGoal(); - if (command == null) { - // none in range - // maybe say something in chat? (ahem impact) - cancel(); - return null; + return false; + } + + + public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { + if (ctx.get(pos).getBlock() instanceof EndPortalFrameBlock + || ctx.get(pos).getBlock() == Blocks.LAVA){ + return true; } - return command; + if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { + return false; + } + // bedrock above and below makes it implausible, otherwise we're good + return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); + } + + @Override + public void mineByName(int quantity, String... blocks) { + mine(quantity, new BlockOptionalMetaLookup(blocks)); } @Override @@ -486,11 +502,6 @@ public void mine(int quantity, BlockOptionalMetaLookup filter) { } } - @Override - public void mineByName(int quantity, String... blocks) { - mine(quantity, new BlockOptionalMetaLookup(blocks)); - } - private BlockOptionalMetaLookup filterFilter() { if (this.filter == null) { return null; @@ -508,24 +519,4 @@ private BlockOptionalMetaLookup filterFilter() { } return filter; } - - private static class GoalThreeBlocks extends GoalTwoBlocks { - - public GoalThreeBlocks(BlockPos pos) { - super(pos); - } - - @Override - public boolean isInGoal(int x, int y, int z) { - return x == this.x && (y == this.y || y == this.y - 1 || y == this.y - 2) && z == this.z; - } - - @Override - public double heuristic(int x, int y, int z) { - int xDiff = x - this.x; - int yDiff = y - this.y; - int zDiff = z - this.z; - return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); - } - } } diff --git a/src/main/java/baritone/selection/SelectionManager.java b/src/main/java/baritone/selection/SelectionManager.java index 05d45ee0e..150bd9d17 100644 --- a/src/main/java/baritone/selection/SelectionManager.java +++ b/src/main/java/baritone/selection/SelectionManager.java @@ -4,10 +4,9 @@ import baritone.api.selection.ISelection; import baritone.api.selection.ISelectionManager; import baritone.api.utils.BetterBlockPos; -import net.minecraft.core.Direction; - import java.util.LinkedList; import java.util.ListIterator; +import net.minecraft.core.Direction; public class SelectionManager implements ISelectionManager { diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 6c3a2df81..3f018ff89 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -43,7 +43,7 @@ public class BlockStateInterface { private final ClientChunkCache provider; - private static final BlockState AIR = Blocks.AIR.defaultBlockState(); + private final WorldData worldData; protected final Level world; public final BlockPos.MutableBlockPos isPassableBlockPos; public final BlockGetter access; @@ -51,9 +51,11 @@ public class BlockStateInterface { private LevelChunk prev = null; private CachedRegion prevCached = null; - private final WorldData worldData; + private final boolean useTheRealWorld; + private static final BlockState AIR = Blocks.AIR.defaultBlockState(); + public BlockStateInterface(IPlayerContext ctx) { this(ctx, false); } @@ -79,13 +81,8 @@ public BlockStateInterface(Level world, WorldData worldData, boolean copyLoadedC this.access = new BlockStateInterfaceAccessWrapper(this); } - // get the block at x,y,z from this chunk WITHOUT creating a single blockpos object - public static BlockState getFromChunk(LevelChunk chunk, int x, int y, int z) { - LevelChunkSection section = chunk.getSections()[y >> 4]; - if (section.hasOnlyAir()) { - return AIR; - } - return section.getBlockState(x & 15, y & 15, z & 15); + public boolean worldContainsLoadedChunk(int blockX, int blockZ) { + return provider.hasChunk(blockX >> 4, blockZ >> 4); } public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be called from the pathing thread because the pathing thread doesn't make a single blockpos pog @@ -172,7 +169,12 @@ public boolean isLoaded(int x, int z) { return prevRegion.isCached(x & 511, z & 511); } - public boolean worldContainsLoadedChunk(int blockX, int blockZ) { - return provider.hasChunk(blockX >> 4, blockZ >> 4); + // get the block at x,y,z from this chunk WITHOUT creating a single blockpos object + public static BlockState getFromChunk(LevelChunk chunk, int x, int y, int z) { + LevelChunkSection section = chunk.getSections()[y >> 4]; + if (section.hasOnlyAir()) { + return AIR; + } + return section.getBlockState(x & 15, y & 15, z & 15); } } diff --git a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java index 126e457c4..19b04b454 100644 --- a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java +++ b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java @@ -17,14 +17,13 @@ package baritone.utils; +import javax.annotation.Nullable; import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; -import javax.annotation.Nullable; - /** * @author Brady * @since 11/5/2019 diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index d78707a0c..6b3f8f520 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -25,13 +25,14 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.ClickEvent; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.ClipContext; import net.minecraft.world.phys.AABB; @@ -64,7 +65,7 @@ public boolean isPauseScreen() { } @Override - public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) { + public void render(GuiGraphics stack, int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHandler.xpos(); double my = mc.mouseHandler.ypos(); @@ -78,7 +79,7 @@ public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) /// Vec3 viewerPos = new Vec3(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); LocalPlayer player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); - HitResult result = player.level.clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); + HitResult result = player.level().clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); if (result != null && result.getType() == HitResult.Type.BLOCK) { currentMouseOver = ((BlockHitResult) result).getBlockPos(); System.out.println("currentMouseOver = " + currentMouseOver); @@ -165,7 +166,7 @@ private Vec3 toWorld(double x, double y, double z) { return null; } - pos.mul(1 / pos.w()); + pos.mul(1/pos.w()); return new Vec3(pos.x(), pos.y(), pos.z()); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 2950bf9bd..cfd38a393 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -23,12 +23,12 @@ import baritone.utils.accessor.IEntityRenderManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; +import java.awt.*; + import net.minecraft.client.renderer.GameRenderer; import net.minecraft.world.phys.AABB; import org.joml.Matrix4f; -import java.awt.*; - import static org.lwjgl.opengl.GL11.*; public interface IRenderer { @@ -38,7 +38,7 @@ public interface IRenderer { IEntityRenderManager renderManager = (IEntityRenderManager) Helper.mc.getEntityRenderDispatcher(); Settings settings = BaritoneAPI.getSettings(); - float[] color = new float[]{1.0F, 1.0F, 1.0F, 255.0F}; + float[] color = new float[] {1.0F, 1.0F, 1.0F, 255.0F}; static void glColor(Color color, float alpha) { float[] colorComponents = color.getColorComponents(null); diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index d97012a18..034337129 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -26,7 +26,6 @@ import baritone.behavior.Behavior; import net.minecraft.client.Minecraft; import net.minecraft.client.player.KeyboardInput; - import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 7de02a08e..438b1d092 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -30,6 +30,10 @@ import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexFormat; +import java.awt.*; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import net.minecraft.client.renderer.blockentity.BeaconRenderer; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; @@ -42,11 +46,6 @@ import net.minecraft.world.phys.shapes.VoxelShape; import org.joml.Matrix4f; -import java.awt.*; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - import static org.lwjgl.opengl.GL11.*; /** @@ -58,8 +57,7 @@ public final class PathRenderer implements IRenderer, Helper { private static final ResourceLocation TEXTURE_BEACON_BEAM = new ResourceLocation("textures/entity/beacon_beam.png"); - private PathRenderer() { - } + private PathRenderer() {} public static double posX() { return renderManager.renderPosX(); @@ -90,7 +88,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { Entity renderView = Helper.mc.getCameraEntity(); - if (renderView.level != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { + if (renderView.level() != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { System.out.println("I have no idea what's going on"); System.out.println("The primary baritone is in a different world than the render view entity"); System.out.println("Not rendering the path"); @@ -211,7 +209,7 @@ public static void drawManySelectionBoxes(PoseStack stack, Entity player, Collec positions.forEach(pos -> { BlockState state = bsi.get0(pos); - VoxelShape shape = state.getShape(player.level, pos); + VoxelShape shape = state.getShape(player.level(), pos); AABB toDraw = shape.isEmpty() ? Shapes.block().bounds() : shape.bounds(); toDraw = toDraw.move(pos); IRenderer.drawAABB(stack, toDraw, .002D); @@ -274,7 +272,7 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, TEXTURE_BEACON_BEAM, settings.renderGoalAnimated.value ? partialTicks : 0, 1.0F, - settings.renderGoalAnimated.value ? player.level.getGameTime() : 0, + settings.renderGoalAnimated.value ? player.level().getGameTime() : 0, 0, 256, color.getColorComponents(null), diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index 637d515f8..d841cf3a1 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -27,9 +27,8 @@ import baritone.api.process.PathingCommandType; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import net.minecraft.core.BlockPos; - import java.util.*; +import net.minecraft.core.BlockPos; public class PathingControlManager implements IPathingControlManager { diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 3b480d23a..ab1eeebb0 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -93,36 +93,8 @@ private int getMaterialCost(ItemStack itemStack) { } } - /** - * Calculates how long would it take to mine the specified block given the best tool - * in this toolset is used. A negative value is returned if the specified block is unbreakable. - * - * @param item the item to mine it with - * @param state the blockstate to be mined - * @return how long it would take in ticks - */ - public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { - float hardness = state.getDestroySpeed(null, null); - if (hardness < 0) { - return -1; - } - - float speed = item.getDestroySpeed(state); - if (speed > 1) { - int effLevel = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_EFFICIENCY, item); - if (effLevel > 0 && !item.isEmpty()) { - speed += effLevel * effLevel + 1; - } - } - if (AltoClefSettings.getInstance().shouldForceUseTool(state, item)) { - return Double.POSITIVE_INFINITY; - } - speed /= hardness; - if (!state.requiresCorrectToolForDrops() || (!item.isEmpty() && item.isCorrectToolForDrops(state))) { - return speed / 30; - } else { - return speed / 100; - } + public boolean hasSilkTouch(ItemStack stack) { + return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; } /** @@ -197,8 +169,36 @@ private double avoidanceMultiplier(Block b) { return Baritone.settings().blocksToAvoidBreaking.value.contains(b) ? Baritone.settings().avoidBreakingMultiplier.value : 1; } - public boolean hasSilkTouch(ItemStack stack) { - return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; + /** + * Calculates how long would it take to mine the specified block given the best tool + * in this toolset is used. A negative value is returned if the specified block is unbreakable. + * + * @param item the item to mine it with + * @param state the blockstate to be mined + * @return how long it would take in ticks + */ + public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { + float hardness = state.getDestroySpeed(null, null); + if (hardness < 0) { + return -1; + } + + float speed = item.getDestroySpeed(state); + if (speed > 1) { + int effLevel = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_EFFICIENCY, item); + if (effLevel > 0 && !item.isEmpty()) { + speed += effLevel * effLevel + 1; + } + } + if (AltoClefSettings.getInstance().shouldForceUseTool(state, item)) { + return Double.POSITIVE_INFINITY; + } + speed /= hardness; + if (!state.requiresCorrectToolForDrops() || (!item.isEmpty() && item.isCorrectToolForDrops(state))) { + return speed / 30; + } else { + return speed / 100; + } } /** diff --git a/src/main/java/baritone/utils/accessor/IChunkArray.java b/src/main/java/baritone/utils/accessor/IChunkArray.java index dc627bd34..4c76b44fe 100644 --- a/src/main/java/baritone/utils/accessor/IChunkArray.java +++ b/src/main/java/baritone/utils/accessor/IChunkArray.java @@ -17,9 +17,8 @@ package baritone.utils.accessor; -import net.minecraft.world.level.chunk.LevelChunk; - import java.util.concurrent.atomic.AtomicReferenceArray; +import net.minecraft.world.level.chunk.LevelChunk; public interface IChunkArray { void copyFrom(IChunkArray other); diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index 61229cce4..0b4b95843 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -21,16 +21,15 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.IPlayerContext; import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.monster.EnderMan; import net.minecraft.world.entity.monster.Spider; import net.minecraft.world.entity.monster.ZombifiedPiglin; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - public class Avoidance { private final int centerX; diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index 70cc5a014..4aee8c567 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -20,6 +20,7 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerController; import baritone.utils.accessor.IPlayerControllerMP; +import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index 48c35b80c..4f71aea64 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -19,11 +19,10 @@ import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.MaskSchematic; -import net.minecraft.world.level.block.AirBlock; -import net.minecraft.world.level.block.state.BlockState; - import java.util.OptionalInt; import java.util.function.Predicate; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.state.BlockState; public class MapArtSchematic extends MaskSchematic { diff --git a/src/main/java/baritone/utils/schematic/StaticSchematic.java b/src/main/java/baritone/utils/schematic/StaticSchematic.java index 61618fbe1..5a110281b 100644 --- a/src/main/java/baritone/utils/schematic/StaticSchematic.java +++ b/src/main/java/baritone/utils/schematic/StaticSchematic.java @@ -19,9 +19,8 @@ import baritone.api.schematic.AbstractSchematic; import baritone.api.schematic.IStaticSchematic; -import net.minecraft.world.level.block.state.BlockState; - import java.util.List; +import net.minecraft.world.level.block.state.BlockState; /** * Default implementation of {@link IStaticSchematic} diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index ca3dad029..17fafc821 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -22,13 +22,13 @@ import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.format.defaults.MCEditSchematic; import baritone.utils.schematic.format.defaults.SpongeSchematic; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtIo; import org.apache.commons.io.FilenameUtils; import java.io.File; import java.io.IOException; import java.io.InputStream; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtIo; /** * Default implementations of {@link ISchematicFormat} diff --git a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java index 98203dbca..3018021a5 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java @@ -18,6 +18,7 @@ package baritone.utils.schematic.format.defaults; import baritone.utils.schematic.StaticSchematic; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; diff --git a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java index c53ee781a..12163cbff 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java @@ -20,6 +20,12 @@ import baritone.utils.schematic.StaticSchematic; import baritone.utils.type.VarInt; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; @@ -27,12 +33,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * @author Brady * @since 12/27/2019 @@ -105,13 +105,19 @@ private SerializedBlockState(ResourceLocation resourceLocation, Map> BlockState setPropertyValue(BlockState state, Property property, String value) { - Optional parsed = property.getValue(value); - if (parsed.isPresent()) { - return state.setValue(property, parsed.get()); - } else { - throw new IllegalArgumentException("Invalid value for property " + property); + private BlockState deserialize() { + if (this.blockState == null) { + Block block = BuiltInRegistries.BLOCK.get(this.resourceLocation); + this.blockState = block.defaultBlockState(); + + this.properties.keySet().stream().sorted(String::compareTo).forEachOrdered(key -> { + Property property = block.getStateDefinition().getProperty(key); + if (property != null) { + this.blockState = setPropertyValue(this.blockState, property, this.properties.get(key)); + } + }); } + return this.blockState; } private static SerializedBlockState getFromString(String s) { @@ -140,19 +146,13 @@ private static SerializedBlockState getFromString(String s) { } } - private BlockState deserialize() { - if (this.blockState == null) { - Block block = BuiltInRegistries.BLOCK.get(this.resourceLocation); - this.blockState = block.defaultBlockState(); - - this.properties.keySet().stream().sorted(String::compareTo).forEachOrdered(key -> { - Property property = block.getStateDefinition().getProperty(key); - if (property != null) { - this.blockState = setPropertyValue(this.blockState, property, this.properties.get(key)); - } - }); + private static > BlockState setPropertyValue(BlockState state, Property property, String value) { + Optional parsed = property.getValue(value); + if (parsed.isPresent()) { + return state.setValue(property, parsed.get()); + } else { + throw new IllegalArgumentException("Invalid value for property " + property); } - return this.blockState; } } } diff --git a/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java b/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java index 76319c33e..7905c74aa 100644 --- a/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java +++ b/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java @@ -19,11 +19,10 @@ import baritone.api.schematic.IStaticSchematic; import com.github.lunatrius.schematica.client.world.SchematicWorld; +import java.util.List; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; -import java.util.List; - public final class SchematicAdapter implements IStaticSchematic { private final SchematicWorld schematic; diff --git a/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java b/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java index a13714a7d..35b11c8e1 100644 --- a/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java @@ -22,7 +22,6 @@ import com.github.lunatrius.schematica.proxy.ClientProxy; import net.minecraft.core.BlockPos; import net.minecraft.util.Tuple; - import java.util.Optional; public enum SchematicaHelper { diff --git a/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java b/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java index e3304d030..eb3c034e8 100644 --- a/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java +++ b/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java @@ -17,5 +17,4 @@ package com.github.lunatrius.schematica.proxy; -public abstract class CommonProxy { -} +public abstract class CommonProxy {} diff --git a/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java b/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java index 2f3521297..64a6a6fb7 100644 --- a/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java +++ b/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java @@ -18,12 +18,12 @@ package baritone.pathing.goals; import baritone.api.pathing.goals.GoalGetToBlock; -import net.minecraft.core.BlockPos; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import net.minecraft.core.BlockPos; import static org.junit.Assert.assertTrue; diff --git a/tweaker/build.gradle b/tweaker/build.gradle index ce623af6c..a437e735a 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -47,7 +47,6 @@ dependencies { implementation "org.ow2.asm:asm-util:9.3" implementation "org.ow2.asm:asm-analysis:9.3" - implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' implementation('net.minecraft:launchwrapper:of-2.3') { exclude module: 'lwjgl' @@ -92,27 +91,4 @@ jar { 'Implementation-Version': version, ) } -} - -task proguard(type: ProguardTask) { - url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - extract 'proguard-7.2.1/lib/proguard.jar' -} - -task createDist(type: CreateDistTask, dependsOn: proguard) - -build.finalizedBy(createDist) - -publishing { - publications { - mavenCommon(MavenPublication) { - artifactId = rootProject.archives_base_name - from components.java - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - } } \ No newline at end of file From 9d122cc96f1024b0646b72055ea047ed03d06e92 Mon Sep 17 00:00:00 2001 From: MarvionKirito Date: Wed, 9 Aug 2023 16:35:32 +0800 Subject: [PATCH 877/935] Updated to 1.20.1 for bug fixes and improvements --- .github/ISSUE_TEMPLATE/bug.md | 5 +- .github/ISSUE_TEMPLATE/question.md | 2 +- .github/ISSUE_TEMPLATE/suggestion.md | 2 +- .github/workflows/gradle_build.yml | 56 +- .github/workflows/run_tests.yml | 24 +- CODE_OF_CONDUCT.md | 6 +- FEATURES.md | 80 +-- README.md | 46 +- SETUP.md | 77 +-- USAGE.md | 86 +-- build.gradle | 47 +- buildSrc/build.gradle | 2 +- .../gradle/task/BaritoneGradleTask.java | 55 +- .../baritone/gradle/task/CreateDistTask.java | 35 +- .../baritone/gradle/task/ProguardTask.java | 123 ++-- fabric/build.gradle | 15 +- fabric/src/main/resources/fabric.mod.json | 9 +- forge/build.gradle | 26 - forge/gradle.properties | 1 + .../baritone/launch/BaritoneForgeModXD.java | 4 +- forge/src/main/resources/META-INF/mods.toml | 34 +- gradle.properties | 12 +- settings.gradle | 6 +- .../java/baritone/api/IBaritoneProvider.java | 3 +- src/api/java/baritone/api/Settings.java | 3 +- .../java/baritone/api/behavior/IBehavior.java | 3 +- .../java/baritone/api/cache/ICachedWorld.java | 3 +- .../baritone/api/cache/IWorldScanner.java | 3 +- .../api/command/argument/IArgConsumer.java | 3 +- .../api/command/datatypes/ForDirection.java | 3 +- .../api/command/datatypes/NearbyPlayer.java | 5 +- .../command/datatypes/RelativeGoalBlock.java | 3 +- .../api/command/datatypes/RelativeGoalXZ.java | 3 +- .../command/datatypes/RelativeGoalYLevel.java | 3 +- .../exception/CommandUnhandledException.java | 3 +- .../command/exception/ICommandException.java | 3 +- .../api/command/helpers/Paginator.java | 9 +- .../command/helpers/TabCompleteHelper.java | 3 +- .../listener/AbstractGameEventListener.java | 42 +- .../baritone/api/process/IBuilderProcess.java | 18 - .../baritone/api/process/IFarmProcess.java | 8 +- .../baritone/api/process/IFollowProcess.java | 3 +- .../baritone/api/process/IMineProcess.java | 3 +- .../api/schematic/CompositeSchematic.java | 3 +- .../baritone/api/schematic/FillSchematic.java | 1 + .../baritone/api/schematic/ISchematic.java | 6 +- .../baritone/api/schematic/MaskSchematic.java | 3 +- .../baritone/api/utils/BetterBlockPos.java | 3 +- .../baritone/api/utils/BlockOptionalMeta.java | 49 +- .../api/utils/BlockOptionalMetaLookup.java | 7 +- .../java/baritone/api/utils/BlockUtils.java | 9 +- src/api/java/baritone/api/utils/Helper.java | 5 +- .../baritone/api/utils/IPlayerContext.java | 21 +- .../baritone/api/utils/RayTraceUtils.java | 5 +- .../baritone/api/utils/RotationUtils.java | 14 +- .../java/baritone/api/utils/SettingsUtil.java | 2 +- .../java/baritone/api/utils/TypeUtils.java | 3 +- src/api/java/baritone/api/utils/VecUtils.java | 3 +- .../baritone/api/utils/gui/BaritoneToast.java | 14 +- .../launch/mixins/MixinChunkArray.java | 4 +- .../mixins/MixinClientChunkProvider.java | 4 +- .../mixins/MixinClientPlayNetHandler.java | 11 +- .../mixins/MixinClientPlayerEntity.java | 2 + .../mixins/MixinCommandSuggestionHelper.java | 4 +- .../launch/mixins/MixinLivingEntity.java | 2 + .../launch/mixins/MixinLootContext.java | 23 +- .../launch/mixins/MixinMinecraft.java | 33 +- .../launch/mixins/MixinNetworkManager.java | 2 + .../baritone/launch/mixins/MixinScreen.java | 6 +- src/main/java/baritone/Baritone.java | 6 +- src/main/java/baritone/KeepName.java | 3 +- .../baritone/behavior/InventoryBehavior.java | 10 +- .../java/baritone/behavior/LookBehavior.java | 2 +- .../baritone/behavior/PathingBehavior.java | 9 +- src/main/java/baritone/cache/CachedChunk.java | 9 +- .../java/baritone/cache/CachedRegion.java | 11 +- src/main/java/baritone/cache/CachedWorld.java | 11 +- src/main/java/baritone/cache/ChunkPacker.java | 13 +- .../baritone/cache/WaypointCollection.java | 6 +- .../java/baritone/cache/WorldProvider.java | 17 +- .../java/baritone/cache/WorldScanner.java | 5 +- .../command/ExampleBaritoneControl.java | 11 +- .../command/argument/CommandArguments.java | 3 +- .../command/defaults/ComeCommand.java | 3 +- .../command/defaults/FindCommand.java | 1 + .../command/defaults/FollowCommand.java | 8 +- .../command/defaults/HelpCommand.java | 12 +- .../baritone/command/defaults/SelCommand.java | 3 +- .../baritone/command/defaults/SetCommand.java | 10 +- .../command/defaults/SurfaceCommand.java | 3 +- .../command/defaults/TunnelCommand.java | 5 +- .../command/defaults/WaypointsCommand.java | 12 +- .../java/baritone/event/GameEventHandler.java | 5 +- .../pathing/calc/AStarPathFinder.java | 3 +- .../pathing/movement/CalculationContext.java | 6 +- .../baritone/pathing/movement/Movement.java | 9 +- .../pathing/movement/MovementHelper.java | 45 +- .../movement/movements/MovementAscend.java | 3 +- .../movement/movements/MovementDescend.java | 61 +- .../movement/movements/MovementDiagonal.java | 111 ++-- .../movement/movements/MovementDownward.java | 3 +- .../movement/movements/MovementFall.java | 41 +- .../movement/movements/MovementParkour.java | 2 +- .../movement/movements/MovementPillar.java | 11 +- .../movement/movements/MovementTraverse.java | 11 +- .../baritone/pathing/path/PathExecutor.java | 165 +++-- .../baritone/process/BackfillProcess.java | 5 +- .../java/baritone/process/BuilderProcess.java | 592 ++++++++---------- .../java/baritone/process/ExploreProcess.java | 5 +- .../java/baritone/process/FarmProcess.java | 12 +- .../java/baritone/process/FollowProcess.java | 5 +- .../baritone/process/GetToBlockProcess.java | 32 +- .../java/baritone/process/MineProcess.java | 515 ++++++++------- .../baritone/selection/SelectionManager.java | 3 +- .../baritone/utils/BlockStateInterface.java | 24 +- .../BlockStateInterfaceAccessWrapper.java | 3 +- src/main/java/baritone/utils/GuiClick.java | 9 +- src/main/java/baritone/utils/IRenderer.java | 6 +- .../baritone/utils/InputOverrideHandler.java | 1 - .../java/baritone/utils/PathRenderer.java | 18 +- .../baritone/utils/PathingControlManager.java | 3 +- src/main/java/baritone/utils/ToolSet.java | 64 +- .../baritone/utils/accessor/IChunkArray.java | 3 +- .../baritone/utils/pathing/Avoidance.java | 7 +- .../utils/player/PrimaryPlayerController.java | 1 + .../utils/schematic/MapArtSchematic.java | 5 +- .../utils/schematic/StaticSchematic.java | 3 +- .../format/DefaultSchematicFormats.java | 4 +- .../format/defaults/MCEditSchematic.java | 1 + .../format/defaults/SpongeSchematic.java | 48 +- .../schematica/SchematicAdapter.java | 3 +- .../schematica/SchematicaHelper.java | 1 - .../schematica/proxy/CommonProxy.java | 3 +- .../pathing/goals/GoalGetToBlockTest.java | 2 +- tweaker/build.gradle | 24 - 135 files changed, 1456 insertions(+), 1714 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index edb250c3a..b686a589f 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -11,7 +11,7 @@ Operating system: Java version: Minecraft version: Baritone version: -Other mods (if used): +Other mods (if used): ## Exception, error or logs Please find your `latest.log` or `debug.log` in this folder and attach it to the issue @@ -29,8 +29,7 @@ Add your steps to reproduce the issue/bug experienced here. To get the modified settings run `#modified` in game ## Final checklist - -- [x] I know how to properly use check boxes +- [x] I know how to properly use check boxes - [ ] I have included the version of Minecraft I'm running, baritone's version and forge mods (if used). - [ ] I have included logs, exceptions and / or steps to reproduce the issue. - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index db70a6850..b5de2dfd3 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -10,5 +10,5 @@ assignees: '' With as much detail as possible, describe your question and what you may need help with. ## Final checklist -- [x] I know how to properly use check boxes +- [x] I know how to properly use check boxes - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/ISSUE_TEMPLATE/suggestion.md b/.github/ISSUE_TEMPLATE/suggestion.md index 1ee32142b..9f7a30bf7 100644 --- a/.github/ISSUE_TEMPLATE/suggestion.md +++ b/.github/ISSUE_TEMPLATE/suggestion.md @@ -16,5 +16,5 @@ If applicable, what settings/customizability should be offered to tweak the func Describe how your suggestion would improve Baritone, or the reason behind it being added. ## Final checklist -- [x] I know how to properly use check boxes +- [x] I know how to properly use check boxes - [ ] I have not used any OwO's or UwU's in this issue. diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 8ab9ee0c4..08e9ab1d3 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -13,31 +13,31 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - cache: gradle - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Build with Gradle - run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)" - - - name: Archive Artifacts - uses: actions/upload-artifact@v3 - with: - name: Artifacts - path: dist/ - - - name: Archive mapping.txt - uses: actions/upload-artifact@v3 - with: - name: Mappings - path: mapping/ + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build with Gradle + run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)" + + - name: Archive Artifacts + uses: actions/upload-artifact@v3 + with: + name: Artifacts + path: dist/ + + - name: Archive mapping.txt + uses: actions/upload-artifact@v3 + with: + name: Mappings + path: mapping/ diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 1c10740bc..34d52e54c 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -11,16 +11,16 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Executing tests - run: ./gradlew test + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Executing tests + run: ./gradlew test diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 20538e8e3..474ecf7e6 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -25,13 +25,13 @@ Examples of unacceptable behavior by participants include: * Anime * The use of sexualized language or imagery and unwelcome sexual attention or - advances + advances * ~~Trolling, insulting/derogatory comments, and personal or political attacks~~ * Public or private harassment * Publishing others' private information, such as a physical or electronic - address, without explicit permission or consent + address, without explicit permission or consent * Other conduct which could reasonably be considered inappropriate in a - professional setting + professional setting ## Our Responsibilities diff --git a/FEATURES.md b/FEATURES.md index e0f6e7d2d..372a77410 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -1,77 +1,33 @@ # Pathing features -- **Long distance pathing and splicing** Baritone calculates paths in segments, and precalculates the next segment when - the current one is about to end, so that it's moving towards the goal at all times. -- **Chunk caching** Baritone simplifies chunks to a compacted internal 2-bit representation (AIR, SOLID, WATER, AVOID) - and stores them in RAM for better very-long-distance pathing. There is also an option to save these cached chunks to - disk. Example -- **Block breaking** Baritone considers breaking blocks as part of its path. It also takes into account your current - tool set and hot bar. For example, if you have a Eff V diamond pick, it may choose to mine through a stone barrier, - while if you only had a wood pick it might be faster to climb over it. -- **Block placing** Baritone considers placing blocks as part of its path. This includes sneak-back-placing, pillaring, - etc. It has a configurable penalty of placing a block (set to 1 second by default), to conserve its resources. The - list of acceptable throwaway blocks is also configurable, and is cobble, dirt, or netherrack by - default. Example -- **Falling** Baritone will fall up to 3 blocks onto solid ground (configurable, if you have Feather Falling and/or - don't mind taking a little damage). If you have a water bucket on your hotbar, it will fall up to 23 blocks and place - the bucket beneath it. It will fall an unlimited distance into existing still water. -- **Vines and ladders** Baritone understands how to climb and descend vines and ladders. There is experimental support - for more advanced maneuvers, like strafing to a different ladder / vine column in midair (off by default, setting - named `allowVines`). Baritone can break its fall by grabbing ladders / vines midair, and understands when that is and - isn't possible. +- **Long distance pathing and splicing** Baritone calculates paths in segments, and precalculates the next segment when the current one is about to end, so that it's moving towards the goal at all times. +- **Chunk caching** Baritone simplifies chunks to a compacted internal 2-bit representation (AIR, SOLID, WATER, AVOID) and stores them in RAM for better very-long-distance pathing. There is also an option to save these cached chunks to disk. Example +- **Block breaking** Baritone considers breaking blocks as part of its path. It also takes into account your current tool set and hot bar. For example, if you have a Eff V diamond pick, it may choose to mine through a stone barrier, while if you only had a wood pick it might be faster to climb over it. +- **Block placing** Baritone considers placing blocks as part of its path. This includes sneak-back-placing, pillaring, etc. It has a configurable penalty of placing a block (set to 1 second by default), to conserve its resources. The list of acceptable throwaway blocks is also configurable, and is cobble, dirt, or netherrack by default. Example +- **Falling** Baritone will fall up to 3 blocks onto solid ground (configurable, if you have Feather Falling and/or don't mind taking a little damage). If you have a water bucket on your hotbar, it will fall up to 23 blocks and place the bucket beneath it. It will fall an unlimited distance into existing still water. +- **Vines and ladders** Baritone understands how to climb and descend vines and ladders. There is experimental support for more advanced maneuvers, like strafing to a different ladder / vine column in midair (off by default, setting named `allowVines`). Baritone can break its fall by grabbing ladders / vines midair, and understands when that is and isn't possible. - **Opening fence gates and doors** - **Slabs and stairs** -- **Falling blocks** Baritone understands the costs of breaking blocks with falling blocks on top, and includes all of - their break costs. Additionally, since it avoids breaking any blocks touching a liquid, it won't break the bottom of a - gravel stack below a lava lake (anymore). -- **Avoiding dangerous blocks** Obviously, it knows not to walk through fire or on magma, not to corner over lava (that - deals some damage), not to break any blocks touching a liquid (it might drown), etc. +- **Falling blocks** Baritone understands the costs of breaking blocks with falling blocks on top, and includes all of their break costs. Additionally, since it avoids breaking any blocks touching a liquid, it won't break the bottom of a gravel stack below a lava lake (anymore). +- **Avoiding dangerous blocks** Obviously, it knows not to walk through fire or on magma, not to corner over lava (that deals some damage), not to break any blocks touching a liquid (it might drown), etc. - **Parkour** Sprint jumping over 1, 2, or 3 block gaps -- **Parkour place** Sprint jumping over a 3 block gap and placing the block to land on while executing the jump. It's - really cool. +- **Parkour place** Sprint jumping over a 3 block gap and placing the block to land on while executing the jump. It's really cool. - **Pigs** It can sort of control pigs. I wouldn't rely on it though. # Pathing method +Baritone uses A*, with some modifications: -Baritone uses A*, with some modifications: - -- **Segmented calculation** Traditional A* calculates until the most promising node is in the goal, however in the - environment of Minecraft with a limited render distance, we don't know the environment all the way to our goal. - Baritone has three possible ways for path calculation to end: finding a path all the way to the goal, running out of - time, or getting to the render distance. In the latter two scenarios, the selection of which segment to actually - execute falls to the next item (incremental cost backoff). Whenever the path calculation thread finds that the best / - most promising node is at the edge of loaded chunks, it increments a counter. If this happens more than 50 times ( - configurable), path calculation exits early. This happens with very low render distances. Otherwise, calculation - continues until the timeout is hit (also configurable) or we find a path all the way to the goal. -- **Incremental cost backoff** When path calculation exits early without getting all the way to the goal, Baritone it - needs to select a segment to execute first (assuming it will calculate the next segment at the end of this one). It - uses incremental cost backoff to select the best node by varying metrics, then paths to that node. This is unchanged - from MineBot and I made - a write-up that - still applies. In essence, it keeps track of the best node by various increasing coefficients, then picks the node - with the least coefficient that goes at least 5 blocks from the starting position. -- **Minimum improvement repropagation** The pathfinder ignores alternate routes that provide minimal improvements (less - than 0.01 ticks of improvement), because the calculation cost of repropagating this to all connected nodes is much - higher than the half-millisecond path time improvement it would get. -- **Backtrack cost favoring** While calculating the next segment, Baritone favors backtracking its current segment. The - cost is decreased heavily, but is still positive (this won't cause it to backtrack if it doesn't need to). This allows - it to splice and jump onto the next segment as early as possible, if the next segment begins with a backtrack of the - current one. Example -- **Backtrack detection and pausing** While path calculation happens on a separate thread, the main game thread has - access to the latest node considered, and the best path so far (those are rendered light blue and dark blue - respectively). When the current best path (rendered dark blue) passes through the player's current position on the - current path segment, path execution is paused (if it's safe to do so), because there's no point continuing forward if - we're about to turn around and go back that same way. Note that the current best path as reported by the path - calculation thread takes into account the incremental cost backoff system, so it's accurate to what the path - calculation thread will actually pick once it finishes. +- **Segmented calculation** Traditional A* calculates until the most promising node is in the goal, however in the environment of Minecraft with a limited render distance, we don't know the environment all the way to our goal. Baritone has three possible ways for path calculation to end: finding a path all the way to the goal, running out of time, or getting to the render distance. In the latter two scenarios, the selection of which segment to actually execute falls to the next item (incremental cost backoff). Whenever the path calculation thread finds that the best / most promising node is at the edge of loaded chunks, it increments a counter. If this happens more than 50 times (configurable), path calculation exits early. This happens with very low render distances. Otherwise, calculation continues until the timeout is hit (also configurable) or we find a path all the way to the goal. +- **Incremental cost backoff** When path calculation exits early without getting all the way to the goal, Baritone it needs to select a segment to execute first (assuming it will calculate the next segment at the end of this one). It uses incremental cost backoff to select the best node by varying metrics, then paths to that node. This is unchanged from MineBot and I made a write-up that still applies. In essence, it keeps track of the best node by various increasing coefficients, then picks the node with the least coefficient that goes at least 5 blocks from the starting position. +- **Minimum improvement repropagation** The pathfinder ignores alternate routes that provide minimal improvements (less than 0.01 ticks of improvement), because the calculation cost of repropagating this to all connected nodes is much higher than the half-millisecond path time improvement it would get. +- **Backtrack cost favoring** While calculating the next segment, Baritone favors backtracking its current segment. The cost is decreased heavily, but is still positive (this won't cause it to backtrack if it doesn't need to). This allows it to splice and jump onto the next segment as early as possible, if the next segment begins with a backtrack of the current one. Example +- **Backtrack detection and pausing** While path calculation happens on a separate thread, the main game thread has access to the latest node considered, and the best path so far (those are rendered light blue and dark blue respectively). When the current best path (rendered dark blue) passes through the player's current position on the current path segment, path execution is paused (if it's safe to do so), because there's no point continuing forward if we're about to turn around and go back that same way. Note that the current best path as reported by the path calculation thread takes into account the incremental cost backoff system, so it's accurate to what the path calculation thread will actually pick once it finishes. # Chat control - [Baritone chat control usage](USAGE.md) # Goals - The pathing goal can be set to any of these options: - - **GoalBlock** one specific block that the player should stand inside at foot level - **GoalXZ** an X and a Z coordinate, used for long distance pathing - **GoalYLevel** a Y coordinate @@ -80,13 +36,11 @@ The pathing goal can be set to any of these options: - **GoalNear** a block position that the player should get within a certain radius of, used for following entities - **GoalAxis** a block position on an axis or diagonal axis (so x=0, z=0, or x=z), and y=120 (configurable) -And finally `GoalComposite`. `GoalComposite` is a list of other goals, any one of which satisfies the goal. For -example, `mine diamond_ore` creates a `GoalComposite` of `GoalTwoBlocks`s for every diamond ore location it knows of. +And finally `GoalComposite`. `GoalComposite` is a list of other goals, any one of which satisfies the goal. For example, `mine diamond_ore` creates a `GoalComposite` of `GoalTwoBlocks`s for every diamond ore location it knows of. -# Future features +# Future features Things it doesn't have yet - - Trapdoors - Sprint jumping in a 1x2 corridor diff --git a/README.md b/README.md index d723db1d5..e2c83ddec 100644 --- a/README.md +++ b/README.md @@ -50,39 +50,22 @@ A Minecraft pathfinder bot. [**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) -Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's -a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I -recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. +Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. [Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) -The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The -second easiest way (for 1.12.2 only) is to -install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, -just click -[here](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar)**. Otherwise, -see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use -it. - -For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric -1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` -jar. **For 1.16.5 Fabric, just -click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. - -If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get -the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just -click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**. - -If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get -the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just -click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For -1.18.2 Forge, just -click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. +The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to +install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click +[here](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. + +For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. + +If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**. + +If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), -the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and -particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) -than MineBot at calculating paths). +the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). Have committed at least once a day from Aug 1, 2018, to Aug 1, 2019. @@ -135,12 +118,9 @@ Magic. (Hours of [leijurv](https://github.com/leijurv/) enduring excruciating pa ![YourKit-Logo](https://www.yourkit.com/images/yklogo.png) -YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET -applications. +YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET applications. -YourKit is the creator of -the [YourKit Java Profiler](https://www.yourkit.com/java/profiler/), [YourKit .NET Profiler](https://www.yourkit.com/.net/profiler/), -and [YourKit YouMonitor](https://www.yourkit.com/youmonitor/). +YourKit is the creator of the [YourKit Java Profiler](https://www.yourkit.com/java/profiler/), [YourKit .NET Profiler](https://www.yourkit.com/.net/profiler/), and [YourKit YouMonitor](https://www.yourkit.com/youmonitor/). We thank them for granting Baritone an OSS license so that we can make our software the best it can be. diff --git a/SETUP.md b/SETUP.md index 6cbc967cd..57866b192 100644 --- a/SETUP.md +++ b/SETUP.md @@ -2,49 +2,34 @@ The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. -You can also use a custom version json for Minecraft, with -the [1.14.4](https://www.dropbox.com/s/rkml3hjokd3qv0m/1.14.4-Baritone.zip?dl=1) version or -the [1.15.2](https://www.dropbox.com/s/8rx6f0kts9hvd4f/1.15.2-Baritone.zip?dl=1) version or -the [1.16.5](https://www.dropbox.com/s/i6f292o2i7o9acp/1.16.5-Baritone.zip?dl=1) version. +You can also use a custom version json for Minecraft, with the [1.14.4](https://www.dropbox.com/s/rkml3hjokd3qv0m/1.14.4-Baritone.zip?dl=1) version or the [1.15.2](https://www.dropbox.com/s/8rx6f0kts9hvd4f/1.15.2-Baritone.zip?dl=1) version or the [1.16.5](https://www.dropbox.com/s/i6f292o2i7o9acp/1.16.5-Baritone.zip?dl=1) version. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. ## Prebuilt official releases - -These releases are not always completely up to date with latest features, and are only released from `master`. (so if -you want `backfill-2` branch for example, you'll have to build it yourself) +These releases are not always completely up to date with latest features, and are only released from `master`. (so if you want `backfill-2` branch for example, you'll have to build it yourself) Link to the releases page: [Releases](https://github.com/cabaletta/baritone/releases) -v1.2.* is for 1.12.2, v1.3.* is for 1.13.2, v1.4.* is for 1.14.4, v1.5.* is for 1.15.2, v1.6.* is for 1.16.5, v1.7.* is -for 1.17.1, v1.8.* is for 1.18.1 +v1.2.* is for 1.12.2, v1.3.* is for 1.13.2, v1.4.* is for 1.14.4, v1.5.* is for 1.15.2, v1.6.* is for 1.16.5, v1.7.* is for 1.17.1, v1.8.* is for 1.18.1 + +Any official release will be GPG signed by leijurv (44A3EA646EADAC6A). Please verify that the hash of the file you download is in `checksums.txt` and that `checksums_signed.asc` is a valid signature by that public keys of `checksums.txt`. -Any official release will be GPG signed by leijurv (44A3EA646EADAC6A). Please verify that the hash of the file you -download is in `checksums.txt` and that `checksums_signed.asc` is a valid signature by that public keys -of `checksums.txt`. +The build is fully deterministic and reproducible, and you can verify Travis did it properly by running `docker build --no-cache -t cabaletta/baritone .` yourself and comparing the shasum. This works identically on Travis, Mac, and Linux (if you have docker on Windows, I'd be grateful if you could let me know if it works there too). -The build is fully deterministic and reproducible, and you can verify Travis did it properly by -running `docker build --no-cache -t cabaletta/baritone .` yourself and comparing the shasum. This works identically on -Travis, Mac, and Linux (if you have docker on Windows, I'd be grateful if you could let me know if it works there too). ## Artifacts -Building Baritone will result in 5 artifacts created in the ``dist`` directory. These are the same as the artifacts -created in the [releases](https://github.com/cabaletta/baritone/releases). +Building Baritone will result in 5 artifacts created in the ``dist`` directory. These are the same as the artifacts created in the [releases](https://github.com/cabaletta/baritone/releases). **The Forge and Fabric releases can simply be added as a Forge/Fabric mods.** -If another one of your Forge mods has a Baritone integration, you want `baritone-api-forge-VERSION.jar`. Otherwise, you -want `baritone-standalone-forge-VERSION.jar` - -- **API**: Only the non-api packages are obfuscated. This should be used in environments where other mods would like to - use Baritone's features. -- **Forge/Fabric API**: Same as API, but packaged for Forge/Fabric. This should be used where another mod has a Baritone - integration. -- **Standalone**: Everything is obfuscated. This should be used in environments where there are no other mods present - that would like to use Baritone's features. -- **Forge/Fabric Standalone**: Same as Standalone, but packaged for Forge/Fabric. This should be used when Baritone is - your only Forge/Fabric mod, or none of your other Forge/Fabric mods integrate with Baritone. +If another one of your Forge mods has a Baritone integration, you want `baritone-api-forge-VERSION.jar`. Otherwise, you want `baritone-standalone-forge-VERSION.jar` + +- **API**: Only the non-api packages are obfuscated. This should be used in environments where other mods would like to use Baritone's features. +- **Forge/Fabric API**: Same as API, but packaged for Forge/Fabric. This should be used where another mod has a Baritone integration. +- **Standalone**: Everything is obfuscated. This should be used in environments where there are no other mods present that would like to use Baritone's features. +- **Forge/Fabric Standalone**: Same as Standalone, but packaged for Forge/Fabric. This should be used when Baritone is your only Forge/Fabric mod, or none of your other Forge/Fabric mods integrate with Baritone. - **Unoptimized**: Nothing is obfuscated. This shouldn't be used ever in production. - **Forge/Fabric Unoptimized**: Same as Unoptimized, but packaged for Forge/Fabric. @@ -56,36 +41,30 @@ want `baritone-standalone-forge-VERSION.jar` - Follow one of the instruction sets below, based on your preference ## Command Line - On Mac OSX and Linux, use `./gradlew` instead of `gradlew`. -If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 -for 1.12.2-1.16.5, JDK 16 for 1.17.1, and JDK 17 for 1.18.1. +If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 for 1.12.2-1.16.5, JDK 16 for 1.17.1, and JDK 17 for 1.18.1. -To check which java you are using do +To check which java you are using do `java -version` in a command prompt or terminal. -If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work because the Java distributions above JDK -8 using may not have the needed javax classes. +If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work because the Java distributions above JDK 8 using may not have the needed javax classes. Open JDK download: https://openjdk.java.net/install/ #### macOS guide - In order to get JDK 8, Try running the following command: `% /usr/libexec/java_home -V` -If it doesn't work try this -guide: https://stackoverflow.com/questions/46513639/how-to-downgrade-java-from-9-to-8-on-a-macos-eclipse-is-not-running-with-java-9 +If it doesn't work try this guide: https://stackoverflow.com/questions/46513639/how-to-downgrade-java-from-9-to-8-on-a-macos-eclipse-is-not-running-with-java-9 If you see something like -`% 1.8.0_VERSION, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_VERSION.jdk/Contents/Home` +`% 1.8.0_VERSION, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_VERSION.jdk/Contents/Home` -in the list then you've got JDK 8 installed. -In order to get JDK 8 running in the **current terminal window** you will have to run this command: +in the list then you've got JDK 8 installed. +In order to get JDK 8 running in the **current terminal window** you will have to run this command: `% export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)` -To add OpenJDK 8 to your PATH add the export line to the end of your `.zshrc / .bashrc` if you want it to apply to each -new terminal. If you're using bash change the .bachrc and if you're using zsh change the .zshrc +To add OpenJDK 8 to your PATH add the export line to the end of your `.zshrc / .bashrc` if you want it to apply to each new terminal. If you're using bash change the .bachrc and if you're using zsh change the .zshrc Setting up the Environment: @@ -94,7 +73,7 @@ $ gradlew setupDecompWorkspace $ gradlew --refresh-dependencies ``` -Building Baritone: +Building Baritone: ``` $ gradlew build @@ -122,27 +101,27 @@ For information on how to build baritone, see [Building Baritone](#building-bari ## IntelliJ - Open the project in IntelliJ as a Gradle project - + ![Image](https://i.imgur.com/jw7Q6vY.png) - Run the Gradle tasks `setupDecompWorkspace` then `genIntellijRuns` - + ![Image](https://i.imgur.com/QEfVvWP.png) - Refresh the Gradle project (or, to be safe, just restart IntelliJ) - + ![Image](https://i.imgur.com/3V7EdWr.png) - Select the "Minecraft Client" launch config - + ![Image](https://i.imgur.com/1qz2QGV.png) - Click on ``Edit Configurations...`` from the same dropdown and select the "Minecraft Client" config - + ![Image](https://i.imgur.com/s4ly0ZF.png) - In `Edit Configurations...` you need to select `baritone_launch` for `Use classpath of module:`. - + ![Image](https://i.imgur.com/hrLhG9u.png) ## IntelliJ diff --git a/USAGE.md b/USAGE.md index 485b295e7..46241e3fe 100644 --- a/USAGE.md +++ b/USAGE.md @@ -2,16 +2,11 @@ # Prefix -Baritone's chat control prefix is `#` by default. In Impact, you can also use `.b` as a prefix. (for example, `.b click` -instead of `#click`) +Baritone's chat control prefix is `#` by default. In Impact, you can also use `.b` as a prefix. (for example, `.b click` instead of `#click`) -Baritone commands can also by default be typed in the chatbox. However if you make a typo, like typing "gola 10000 -10000" instead of "goal" it goes into public chat, which is bad, so using `#` is suggested. +Baritone commands can also by default be typed in the chatbox. However if you make a typo, like typing "gola 10000 10000" instead of "goal" it goes into public chat, which is bad, so using `#` is suggested. -To disable direct chat control (with no prefix), turn off the `chatControl` setting. To disable chat control with -the `#` prefix, turn off the `prefixControl` setting. In Impact, `.b` cannot be disabled. Be careful that you don't -leave yourself with all control methods disabled (if you do, reset your settings by deleting the -file `minecraft/baritone/settings.txt` and relaunching). +To disable direct chat control (with no prefix), turn off the `chatControl` setting. To disable chat control with the `#` prefix, turn off the `prefixControl` setting. In Impact, `.b` cannot be disabled. Be careful that you don't leave yourself with all control methods disabled (if you do, reset your settings by deleting the file `minecraft/baritone/settings.txt` and relaunching). # For Baritone 1.2.10+, 1.3.5+, 1.4.2+ @@ -21,7 +16,7 @@ Try `#help` I promise it won't just send you back here =) "wtf where is cleararea" -> look at `#help sel` -"wtf where is goto death, goto waypoint" -> look at `#help wp` +"wtf where is goto death, goto waypoint" -> look at `#help wp` just look at `#help` lmao @@ -35,70 +30,43 @@ Watch this [showcase video](https://youtu.be/CZkLXWo4Fg4)! `help` -To toggle a boolean setting, just say its name in chat (for example saying `allowBreak` toggles whether Baritone will -consider breaking blocks). For a numeric setting, say its name then the new value (like `primaryTimeoutMS 250`). It's -case insensitive. To reset a setting to its default value, say `acceptableThrowawayItems reset`. To reset all settings, -say `reset`. To see all settings that have been modified from their default values, say `modified`. +To toggle a boolean setting, just say its name in chat (for example saying `allowBreak` toggles whether Baritone will consider breaking blocks). For a numeric setting, say its name then the new value (like `primaryTimeoutMS 250`). It's case insensitive. To reset a setting to its default value, say `acceptableThrowawayItems reset`. To reset all settings, say `reset`. To see all settings that have been modified from their default values, say `modified`. Commands in Baritone: - - `thisway 1000` then `path` to go in the direction you're facing for a thousand blocks - `goal x y z` or `goal x z` or `goal y`, then `path` to set a goal to a certain coordinate then path to it - `goto x y z` or `goto x z` or `goto y` to go to a certain coordinate (in a single step, starts going immediately) - `goal` to set the goal to your player's feet - `goal clear` to clear the goal - `cancel` or `stop` to stop everything, `forcecancel` is also an option -- `goto portal` or `goto ender_chest` or `goto block_type` to go to a block. (in Impact, `.goto` is an alias - for `.b goto` for the most part) -- `mine diamond_ore iron_ore` to mine diamond ore or iron ore (turn on the setting `legitMine` to only mine ores that it - can actually see. It will explore randomly around y=11 until it finds them.) An amount of blocks can also be - specified, for example, `mine 64 diamond_ore`. -- `click` to click your destination on the screen. Right click path to on top of the block, left click to path into it ( - either at foot level or eye level), and left click and drag to select an area (`#help sel` to see what you can do with - that selection). -- `follow player playerName` to follow a player. `follow players` to follow any players in range (combine with Kill Aura - for a fun time). `follow entities` to follow any entities. `follow entity pig` to follow entities of a specific type. -- `wp` for waypoints. A "tag" is like "home" (created automatically on right clicking a bed) or "death" (created - automatically on death) or "user" (has to be created manually). So you might want `#wp save user coolbiome`, then to - set the goal `#wp goal coolbiome` then `#path` to path to it. For death, `#wp goal death` will list waypoints under - the "death" tag (remember stuff is clickable!) -- `build` to build a schematic. `build blah.schematic` will load `schematics/blah.schematic` and build it with the - origin being your player feet. `build blah.schematic x y z` to set the origin. Any of those can be relative to your - player (`~ 69 ~-420` would build at x=player x, y=69, z=player z-420). +- `goto portal` or `goto ender_chest` or `goto block_type` to go to a block. (in Impact, `.goto` is an alias for `.b goto` for the most part) +- `mine diamond_ore iron_ore` to mine diamond ore or iron ore (turn on the setting `legitMine` to only mine ores that it can actually see. It will explore randomly around y=11 until it finds them.) An amount of blocks can also be specified, for example, `mine 64 diamond_ore`. +- `click` to click your destination on the screen. Right click path to on top of the block, left click to path into it (either at foot level or eye level), and left click and drag to select an area (`#help sel` to see what you can do with that selection). +- `follow player playerName` to follow a player. `follow players` to follow any players in range (combine with Kill Aura for a fun time). `follow entities` to follow any entities. `follow entity pig` to follow entities of a specific type. +- `wp` for waypoints. A "tag" is like "home" (created automatically on right clicking a bed) or "death" (created automatically on death) or "user" (has to be created manually). So you might want `#wp save user coolbiome`, then to set the goal `#wp goal coolbiome` then `#path` to path to it. For death, `#wp goal death` will list waypoints under the "death" tag (remember stuff is clickable!) +- `build` to build a schematic. `build blah.schematic` will load `schematics/blah.schematic` and build it with the origin being your player feet. `build blah.schematic x y z` to set the origin. Any of those can be relative to your player (`~ 69 ~-420` would build at x=player x, y=69, z=player z-420). - `schematica` to build the schematic that is currently open in schematica -- `tunnel` to dig and make a tunnel, 1x2. It will only deviate from the straight line if necessary such as to avoid - lava. For a dumber tunnel that is really just cleararea, you can `tunnel 3 2 100`, to clear an area 3 high, 2 wide, - and 100 deep. -- `farm` to automatically harvest, replant, or bone meal crops. Use `farm ` or `farm ` to limit - the max distance from the starting point or a waypoint. +- `tunnel` to dig and make a tunnel, 1x2. It will only deviate from the straight line if necessary such as to avoid lava. For a dumber tunnel that is really just cleararea, you can `tunnel 3 2 100`, to clear an area 3 high, 2 wide, and 100 deep. +- `farm` to automatically harvest, replant, or bone meal crops. Use `farm ` or `farm ` to limit the max distance from the starting point or a waypoint. - `axis` to go to an axis or diagonal axis at y=120 (`axisHeight` is a configurable setting, defaults to 120). -- `explore x z` to explore the world from the origin of x,z. Leave out x and z to default to player feet. This will - continually path towards the closest chunk to the origin that it's never seen before. `explorefilter filter.json` with - optional invert can be used to load in a list of chunks to load. -- `invert` to invert the current goal and path. This gets as far away from it as possible, instead of as close as - possible. For example, do `goal` then `invert` to run as far as possible from where you're standing at the start. +- `explore x z` to explore the world from the origin of x,z. Leave out x and z to default to player feet. This will continually path towards the closest chunk to the origin that it's never seen before. `explorefilter filter.json` with optional invert can be used to load in a list of chunks to load. +- `invert` to invert the current goal and path. This gets as far away from it as possible, instead of as close as possible. For example, do `goal` then `invert` to run as far as possible from where you're standing at the start. - `come` tells Baritone to head towards your camera, useful when freecam doesn't move your player position. - `blacklist` will stop baritone from going to the closest block so it won't attempt to get to it. -- `eta` to get information about the estimated time until the next segment and the goal, be aware that the ETA to your - goal is really unprecise. +- `eta` to get information about the estimated time until the next segment and the goal, be aware that the ETA to your goal is really unprecise. - `proc` to view miscellaneous information about the process currently controlling Baritone. - `repack` to re-cache the chunks around you. - `gc` to call `System.gc()` which may free up some memory. - `render` to fix glitched chunk rendering without having to reload all of them. - `reloadall` to reload Baritone's world cache or `saveall` to save Baritone's world cache. - `find` to search through Baritone's cache and attempt to find the location of the block. -- `surface` or `top` to tell Baritone to head towards the closest surface-like area, this can be the surface or highest - available air space. +- `surface` or `top` to tell Baritone to head towards the closest surface-like area, this can be the surface or highest available air space. - `version` to get the version of Baritone you're running - `damn` daniel -All the settings and documentation -are here. If you -find HTML easier to read than Javadoc, you can -look here. +All the settings and documentation are here. If you find HTML easier to read than Javadoc, you can look here. -There are about a hundred settings, but here are some fun / interesting / important ones that you might want to look at -changing in normal usage of Baritone. The documentation for each can be found at the above links. +There are about a hundred settings, but here are some fun / interesting / important ones that you might want to look at changing in normal usage of Baritone. The documentation for each can be found at the above links. - `allowBreak` - `allowSprint` - `allowPlace` @@ -118,24 +86,22 @@ changing in normal usage of Baritone. The documentation for each can be found at - `mineScanDroppedItems` - `allowDiagonalAscend` + + + # Troubleshooting / common issues ## Why doesn't Baritone respond to any of my chat commands? - This could be one of many things. -First, make sure it's actually installed. An easy way to check is seeing if it created the folder `baritone` in your -Minecraft folder. +First, make sure it's actually installed. An easy way to check is seeing if it created the folder `baritone` in your Minecraft folder. Second, make sure that you're using the prefix properly, and that chat control is enabled in the way you expect. -For example, Impact disables direct chat control. (i.e. anything typed in chat without a prefix will be ignored and sent -publicly). **This is a saved setting**, so if you run Impact once, `chatControl` will be off from then on, **even in -other clients**. -So you'll need to use the `#` prefix or edit `baritone/settings.txt` in your Minecraft folder to undo that ( -specifically, remove the line `chatControl false` then restart your client). +For example, Impact disables direct chat control. (i.e. anything typed in chat without a prefix will be ignored and sent publicly). **This is a saved setting**, so if you run Impact once, `chatControl` will be off from then on, **even in other clients**. +So you'll need to use the `#` prefix or edit `baritone/settings.txt` in your Minecraft folder to undo that (specifically, remove the line `chatControl false` then restart your client). -## Why can I do `.goto x z` in Impact but nowhere else? Why can I do `-path to x z` in KAMI but nowhere else? +## Why can I do `.goto x z` in Impact but nowhere else? Why can I do `-path to x z` in KAMI but nowhere else? These are custom commands that they added; those aren't from Baritone. The equivalent you're looking for is `goto x z`. diff --git a/build.gradle b/build.gradle index 3819b5ede..267fb6cd4 100755 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,6 @@ +import baritone.gradle.task.CreateDistTask +import baritone.gradle.task.ProguardTask + /* * This file is part of Baritone. * @@ -127,8 +130,7 @@ jar { } remapJar { - targetNamespace = "named" - fallbackTargetNamespace = "intermediary" + target = "mojmap" } javadoc { @@ -137,4 +139,45 @@ javadoc { options.encoding "UTF-8" // allow emoji in comments :^) source = sourceSets.api.allJava classpath += sourceSets.api.compileClasspath +} + + +task removeChecksum { + doLast { + delete "$rootDir/dist/checksums.txt" + } +} + +subprojects { + task proguard(type: ProguardTask, dependsOn: remapJar) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType project.name + artifactPath = remapJar.archiveFile + } + + task createDist(type: CreateDistTask, dependsOn: proguard) { + compType project.name == "tweaker" ? null : project.name + artifactApiPath = proguard.artifactApiPath + artifactStandalonePath = proguard.artifactStandalonePath + artifactUnoptimizedPath = proguard.artifactUnoptimizedPath + } + + build.finalizedBy(createDist) + + publishing { + publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } + } + + createDist.dependsOn(removeChecksum) } \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 14b7dc3bb..d0ba8faf5 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -36,5 +36,5 @@ dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' implementation group: 'commons-io', name: 'commons-io', version: '2.6' - implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.4' + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.4.10' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index eb3151d59..9c5a1d305 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -20,6 +20,8 @@ import org.gradle.api.DefaultTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; import java.io.File; import java.io.IOException; @@ -35,35 +37,27 @@ class BaritoneGradleTask extends DefaultTask { protected static final String - PROGUARD_ZIP = "proguard.zip", - PROGUARD_JAR = "proguard.jar", - PROGUARD_CONFIG_TEMPLATE = "scripts/proguard.pro", - PROGUARD_CONFIG_DEST = "template.pro", - PROGUARD_API_CONFIG = "api.pro", - PROGUARD_STANDALONE_CONFIG = "standalone.pro", - PROGUARD_EXPORT_PATH = "proguard_out.jar", - PROGUARD_MAPPING_DIR = "mapping", - - ARTIFACT_STANDARD = "%s-%s.jar", - ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", - ARTIFACT_API = "%s-api-%s.jar", - ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; + PROGUARD_ZIP = "proguard.zip", + PROGUARD_JAR = "proguard.jar", + PROGUARD_CONFIG_TEMPLATE = "scripts/proguard.pro", + PROGUARD_CONFIG_DEST = "template.pro", + PROGUARD_API_CONFIG = "api.pro", + PROGUARD_STANDALONE_CONFIG = "standalone.pro", + PROGUARD_EXPORT_PATH = "proguard_out.jar", + PROGUARD_MAPPING_DIR = "mapping", + + ARTIFACT_STANDARD = "%s-%s.jar", + ARTIFACT_UNOPTIMIZED = "%s-unoptimized-%s.jar", + ARTIFACT_API = "%s-api-%s.jar", + ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; protected String artifactName, artifactVersion; - protected Path - artifactPath, - artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, // these are different for forge builds - proguardOut; @Input @Optional protected String compType = null; - public BaritoneGradleTask() { - this.artifactName = getProject().getRootProject().getProperties().get("archives_base_name").toString(); - } - public String getCompType() { return compType; } @@ -72,26 +66,17 @@ public void setCompType(String compType) { this.compType = compType; } + + public BaritoneGradleTask() { + this.artifactName = getProject().getRootProject().getProperties().get("archives_base_name").toString(); + } + public void doFirst() { if (compType != null) { this.artifactVersion = compType + "-" + getProject().getVersion(); } else { this.artifactVersion = getProject().getVersion().toString(); } - - this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); - - this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); - this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); - this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); - - this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); - } - - protected void verifyArtifacts() throws IllegalStateException { - if (!Files.exists(this.artifactPath)) { - throw new IllegalStateException("Artifact not found! Run build first! Missing file: " + this.artifactPath); - } } protected void write(InputStream stream, Path file) throws IOException { diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 02397d3c5..50b2f812b 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -17,14 +17,21 @@ package baritone.gradle.task; +import baritone.gradle.util.Determinizer; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.TaskAction; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.OpenOption; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.security.MessageDigest; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; @@ -32,19 +39,27 @@ * @author Brady * @since 10/12/2018 */ -public class CreateDistTask extends BaritoneGradleTask { +public abstract class CreateDistTask extends BaritoneGradleTask { private static MessageDigest SHA1_DIGEST; + @InputFile + abstract public RegularFileProperty getArtifactApiPath(); + + @InputFile + abstract public RegularFileProperty getArtifactStandalonePath(); + + @InputFile + abstract public RegularFileProperty getArtifactUnoptimizedPath(); + @TaskAction protected void exec() throws Exception { super.doFirst(); - super.verifyArtifacts(); // Define the distribution file paths - Path api = getRootRelativeFile("dist/" + getFileName(artifactApiPath)); - Path standalone = getRootRelativeFile("dist/" + getFileName(artifactStandalonePath)); - Path unoptimized = getRootRelativeFile("dist/" + getFileName(artifactUnoptimizedPath)); + Path api = getRootRelativeFile("dist/" + getFileName(getArtifactApiPath().get().getAsFile().toPath())); + Path standalone = getRootRelativeFile("dist/" + getFileName(getArtifactStandalonePath().get().getAsFile().toPath())); + Path unoptimized = getRootRelativeFile("dist/" + getFileName(getArtifactUnoptimizedPath().get().getAsFile().toPath())); // NIO will not automatically create directories Path dir = getRootRelativeFile("dist/"); @@ -54,12 +69,12 @@ protected void exec() throws Exception { // Copy build jars to dist/ // TODO: dont copy files that dont exist - Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); - Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); - Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); + Files.copy(getArtifactApiPath().get().getAsFile().toPath(), api, REPLACE_EXISTING); + Files.copy(getArtifactStandalonePath().get().getAsFile().toPath(), standalone, REPLACE_EXISTING); + Files.copy(getArtifactUnoptimizedPath().get().getAsFile().toPath(), unoptimized, REPLACE_EXISTING); // Calculate all checksums and format them like "shasum" - List shasum = Files.list(getRootRelativeFile("dist/")) + List shasum = Stream.of(getArtifactApiPath().get().getAsFile().toPath(), getArtifactStandalonePath().get().getAsFile().toPath(), getArtifactUnoptimizedPath().get().getAsFile().toPath()) .filter(e -> e.getFileName().toString().endsWith(".jar")) .map(path -> sha1(path) + " " + path.getFileName().toString()) .collect(Collectors.toList()); @@ -67,7 +82,7 @@ protected void exec() throws Exception { shasum.forEach(System.out::println); // Write the checksums to a file - Files.write(getRootRelativeFile("dist/checksums.txt"), shasum); + Files.write(getRootRelativeFile("dist/checksums.txt"), shasum, StandardOpenOption.CREATE, StandardOpenOption.APPEND); } private static String getFileName(Path p) { diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index a940b9d72..19c2fb7da 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -18,10 +18,12 @@ package baritone.gradle.task; import baritone.gradle.util.Determinizer; +import groovy.lang.Closure; +import org.apache.commons.io.IOUtils; +import org.gradle.api.Task; +import org.gradle.api.file.RegularFileProperty; import org.gradle.api.plugins.JavaPluginConvention; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.TaskAction; -import org.gradle.api.tasks.TaskCollection; +import org.gradle.api.tasks.*; import org.gradle.api.tasks.compile.ForkOptions; import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.internal.jvm.Jvm; @@ -30,6 +32,7 @@ import xyz.wagyourtail.unimined.api.minecraft.MinecraftProvider; import java.io.*; +import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; @@ -45,12 +48,14 @@ * @author Brady * @since 10/11/2018 */ -public class ProguardTask extends BaritoneGradleTask { +public abstract class ProguardTask extends BaritoneGradleTask { @Input private String url; - MinecraftProvider provider = this.getProject().getExtensions().getByType(MinecraftProvider.class); + public String getUrl() { + return url; + } @Input private String extract; @@ -59,27 +64,37 @@ public String getExtract() { return extract; } - public String getUrl() { - return url; - } + @InputFile + abstract public RegularFileProperty getArtifactPath(); - public void setUrl(String url) { - this.url = url; - } + @OutputFile + @Optional + abstract public RegularFileProperty getArtifactUnoptimizedPath(); - private File getMcJar() { - return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdFallbackNamespace()).toFile(); - } + @OutputFile + @Optional + abstract public RegularFileProperty getArtifactApiPath(); - private boolean isMcJar(File f) { - return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f); + @OutputFile + @Optional + abstract public RegularFileProperty getArtifactStandalonePath(); + + protected Path proguardOut; + + @Override + public Task configure(Closure closure) { + super.doFirst(); + + getArtifactUnoptimizedPath().fileValue(this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)).toFile()); + getArtifactApiPath().fileValue(this.getBuildFile(formatVersion(ARTIFACT_API)).toFile()); + getArtifactStandalonePath().fileValue(this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)).toFile()); + + return super.configure(closure); } @TaskAction protected void exec() throws Exception { - super.doFirst(); - super.verifyArtifacts(); - + this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); // "Haha brady why don't you make separate tasks" processArtifact(); downloadProguard(); @@ -90,6 +105,24 @@ protected void exec() throws Exception { cleanup(); } + private void processArtifact() throws Exception { + if (Files.exists(getArtifactUnoptimizedPath().getAsFile().get().toPath())) { + Files.delete(getArtifactUnoptimizedPath().getAsFile().get().toPath()); + } + + Determinizer.determinize(this.getArtifactPath().get().toString(), getArtifactUnoptimizedPath().getAsFile().get().toString()); + } + + MinecraftProvider provider = this.getProject().getExtensions().getByType(MinecraftProvider.class); + + private File getMcJar() { + return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdNamespace()).toFile(); + } + + private boolean isMcJar(File f) { + return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f); + } + private void downloadProguard() throws Exception { Path proguardZip = getTemporaryFile(PROGUARD_ZIP); if (!Files.exists(proguardZip)) { @@ -112,7 +145,8 @@ private String getJavaBinPathForProguard() throws Exception { try { path = findJavaPathByGradleConfig(); if (path != null) return path; - } catch (Exception ex) { + } + catch (Exception ex) { System.err.println("Unable to find java by javaCompile options"); ex.printStackTrace(); } @@ -120,7 +154,8 @@ private String getJavaBinPathForProguard() throws Exception { try { path = findJavaByJavaHome(); if (path != null) return path; - } catch (Exception ex) { + } + catch(Exception ex) { System.err.println("Unable to find java by JAVA_HOME"); ex.printStackTrace(); } @@ -128,7 +163,7 @@ private String getJavaBinPathForProguard() throws Exception { path = findJavaByGradleCurrentRuntime(); if (path != null) return path; - + throw new Exception("Unable to find java to determine ProGuard libraryjars. Please specify forkOptions.executable in javaCompile," + " JAVA_HOME environment variable, or make sure to run Gradle with the correct JDK (a v1.8 only)"); } @@ -201,20 +236,12 @@ private boolean validateJavaVersion(String java) { return true; } - private void processArtifact() throws Exception { - if (Files.exists(this.artifactUnoptimizedPath)) { - Files.delete(this.artifactUnoptimizedPath); - } - - Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString()); - } - private void generateConfigs() throws Exception { Files.copy(getRootRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), REPLACE_EXISTING); // Setup the template that will be used to derive the API and Standalone configs List template = Files.readAllLines(getTemporaryFile(PROGUARD_CONFIG_DEST)); - template.add(0, "-injars '" + this.artifactPath.toString() + "'"); + template.add(0, "-injars '" + this.getArtifactPath().get().toString() + "'"); template.add(1, "-outjars '" + this.getTemporaryFile(PROGUARD_EXPORT_PATH) + "'"); template.add(2, "-libraryjars /jmods/java.base.jmod(!**.jar;!module-info.class)"); @@ -233,11 +260,11 @@ private void generateConfigs() throws Exception { { // Discover all of the libraries that we will need to acquire from gradle final Stream dependencies = acquireDependencies() - // remove MCP mapped jar, and nashorn - .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")); + // remove MCP mapped jar, and nashorn + .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")); libraries = dependencies - .map(f -> isMcJar(f) ? mcJar : f); + .map(f -> isMcJar(f) ? mcJar : f); } libraries.forEach(f -> { template.add(2, "-libraryjars '" + f + "'"); @@ -250,42 +277,44 @@ private void generateConfigs() throws Exception { api.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + addCompTypeFirst("api.txt"))); // API config doesn't require any changes from the changes that we made to the template - Files.write(getTemporaryFile(compType + PROGUARD_API_CONFIG), api); + Files.write(getTemporaryFile(compType+PROGUARD_API_CONFIG), api); // For the Standalone config, don't keep the API package List standalone = new ArrayList<>(template); standalone.removeIf(s -> s.contains("# this is the keep api")); standalone.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + addCompTypeFirst("standalone.txt"))); - Files.write(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG), standalone); + Files.write(getTemporaryFile(compType+PROGUARD_STANDALONE_CONFIG), standalone); } private Stream acquireDependencies() { return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() - .stream() - .filter(File::isFile); + .stream() + .filter(File::isFile); } private void proguardApi() throws Exception { - runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString()); + runProguard(getTemporaryFile(compType+PROGUARD_API_CONFIG)); + Determinizer.determinize(this.proguardOut.toString(), getArtifactApiPath().get().toString()); + } + + private void proguardStandalone() throws Exception { + runProguard(getTemporaryFile(compType+PROGUARD_STANDALONE_CONFIG)); + Determinizer.determinize(this.proguardOut.toString(), getArtifactStandalonePath().get().toString()); } private void cleanup() { try { Files.delete(this.proguardOut); - } catch (IOException ignored) { - } + } catch (IOException ignored) {} } - private void proguardStandalone() throws Exception { - runProguard(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString()); + public void setUrl(String url) { + this.url = url; } public void setExtract(String extract) { this.extract = extract; } - private void runProguard(Path config) throws Exception { // Delete the existing proguard output file. Proguard probably handles this already, but why not do it ourselves if (Files.exists(this.proguardOut)) { @@ -296,7 +325,7 @@ private void runProguard(Path config) throws Exception { Path workingDirectory = getTemporaryFile(""); Path proguardJar = workingDirectory.relativize(getTemporaryFile(PROGUARD_JAR)); config = workingDirectory.relativize(config); - + // Honestly, if you still have spaces in your path at this point, you're SOL. Process p = new ProcessBuilder("java", "-jar", proguardJar.toString(), "@" + config.toString()) diff --git a/fabric/build.gradle b/fabric/build.gradle index 5d4b6c67e..b51ba7bd1 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -76,25 +76,14 @@ components.java { } } -task proguard(type: ProguardTask) { - url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - extract 'proguard-7.2.1/lib/proguard.jar' - compType "fabric" -} - -task createDist(type: CreateDistTask, dependsOn: proguard) { - compType "fabric" -} - -build.finalizedBy(createDist) - publishing { publications { maven(MavenPublication) { - artifact "../dist/baritone-api-fabric-" + version + ".jar" + artifact "../dist/baritone-api-" + version + ".jar" } } + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { maven { name = "meteor-maven" diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index f7f0ca756..403274811 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -7,8 +7,7 @@ "name": "Baritone", "description": "Google Maps for Blockgame", "authors": [ - "leijurv", - "Brady" + "leijurv", "Brady" ], "contact": { "homepage": "https://github.com/cabaletta/baritone", @@ -17,14 +16,16 @@ "license": "LGPL-3.0", "icon": "assets/baritone/icon.png", + "environment": "*", "entrypoints": { }, "mixins": [ - "mixins.baritone-meteor.json" + "mixins.baritone-meteor.json" ], + "depends": { "fabricloader": ">=0.11.0", - "minecraft": "1.19.4" + "minecraft": ">=1.20 <=1.20.1" } } diff --git a/forge/build.gradle b/forge/build.gradle index bac8ca54a..83fe38ddf 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -93,30 +93,4 @@ components.java { withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { skip() } -} - -task proguard(type: ProguardTask) { - url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - extract 'proguard-7.2.1/lib/proguard.jar' - compType "forge" -} - -task createDist(type: CreateDistTask, dependsOn: proguard) { - compType "forge" -} - -build.finalizedBy(createDist) - -publishing { - publications { - mavenFabric(MavenPublication) { - artifactId = rootProject.archives_base_name + "-" + project.name - from components.java - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - } } \ No newline at end of file diff --git a/forge/gradle.properties b/forge/gradle.properties index bda35b14a..24befc474 100644 --- a/forge/gradle.properties +++ b/forge/gradle.properties @@ -14,4 +14,5 @@ # You should have received a copy of the GNU Lesser General Public License # along with Baritone. If not, see . # + loom.platform=forge \ No newline at end of file diff --git a/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java b/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java index 401a0e664..db84d62e1 100644 --- a/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java +++ b/forge/src/main/java/baritone/launch/BaritoneForgeModXD.java @@ -15,9 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.launch; - -import net.minecraftforge.fml.common.Mod; +package baritone.launch;import net.minecraftforge.fml.common.Mod; @Mod("baritoe") public class BaritoneForgeModXD { diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 58d9594a1..b29b3b1a0 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -4,37 +4,37 @@ # Note that there are a couple of TOML lists in this file. # Find more information on toml format here: https://github.com/toml-lang/toml # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml -modLoader = "javafml" #mandatory +modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion = "[33,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. -license = "https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" +loaderVersion="[46,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" # A URL to refer people to when problems occur with this mod -issueTrackerURL = "https://github.com/cabaletta/baritone/issues" #optional +issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional # A list of mods - how many allowed here is determined by the individual mod loader [[mods]] #mandatory # The modid of the mod -modId = "baritoe" #mandatory +modId="baritoe" #mandatory # The version number of the mod - there's a few well known ${} variables useable here or just hardcode it -version = "${version}" #mandatory -# A display name for the mod -displayName = "Baritone" #mandatory +version="${version}" #mandatory + # A display name for the mod +displayName="Baritone" #mandatory # A URL for the "homepage" for this mod, displayed in the mod UI -displayURL = "https://github.com/cabaletta/baritone" #optional +displayURL="https://github.com/cabaletta/baritone" #optional # A file name (in the root of the mod JAR) containing a logo for display #logoFile="examplemod.png" #optional # A text field displayed in the mod UI -credits = "Hat Gamers" #optional +credits="Hat Gamers" #optional # A text field displayed in the mod UI -authors = "leijurv, Brady" #optional +authors="leijurv, Brady" #optional # The description text for the mod (multi line!) (#mandatory) -description = ''' +description=''' A Minecraft pathfinder bot. ''' [[dependencies.baritoe]] -modId = "minecraft" -mandatory = true +modId="minecraft" +mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange = "[1.19.3]" -ordering = "NONE" -side = "BOTH" \ No newline at end of file +versionRange="[1.20,1.20.1]" +ordering="NONE" +side="BOTH" diff --git a/gradle.properties b/gradle.properties index 29d123f5b..e19dae15d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,11 @@ org.gradle.jvmargs=-Xmx4G -mod_version=1.19.4-beta1 + +available_loaders=fabric + +mod_version=1.20.1-beta1 maven_group=baritone archives_base_name=baritone -minecraft_version=1.19.4 -forge_version=1.19.3-44.0.1 -fabric_version=0.14.11 + +minecraft_version=1.20.1 +forge_version=1.20.1-47.0.1 +fabric_version=0.14.18 diff --git a/settings.gradle b/settings.gradle index 58b6e203d..89e47805a 100755 --- a/settings.gradle +++ b/settings.gradle @@ -42,10 +42,6 @@ pluginManagement { rootProject.name = 'baritone' include("tweaker") -if (System.getProperty("Baritone.enabled_platforms") == null) { -// System.setProperty("Baritone.enabled_platforms", "fabric,forge") - System.setProperty("Baritone.enabled_platforms", "fabric") -} -for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) { +for (platform in available_loaders.split(",")) { include(platform) } diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 3fdd8de8b..7fa97d168 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -21,10 +21,9 @@ import baritone.api.command.ICommand; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; -import net.minecraft.client.player.LocalPlayer; - import java.util.List; import java.util.Objects; +import net.minecraft.client.player.LocalPlayer; /** * Provides the present {@link IBaritone} instances, as well as non-baritone instance related APIs. diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 4f9431010..a0b5240d1 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -27,13 +27,12 @@ import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; - import java.awt.*; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.util.List; import java.util.*; +import java.util.List; import java.util.function.BiConsumer; import java.util.function.Consumer; diff --git a/src/api/java/baritone/api/behavior/IBehavior.java b/src/api/java/baritone/api/behavior/IBehavior.java index 95fb22344..811563b93 100644 --- a/src/api/java/baritone/api/behavior/IBehavior.java +++ b/src/api/java/baritone/api/behavior/IBehavior.java @@ -27,5 +27,4 @@ * @see IGameEventListener * @since 9/23/2018 */ -public interface IBehavior extends AbstractGameEventListener { -} +public interface IBehavior extends AbstractGameEventListener {} diff --git a/src/api/java/baritone/api/cache/ICachedWorld.java b/src/api/java/baritone/api/cache/ICachedWorld.java index 120ca8da4..6e74fa55a 100644 --- a/src/api/java/baritone/api/cache/ICachedWorld.java +++ b/src/api/java/baritone/api/cache/ICachedWorld.java @@ -17,11 +17,10 @@ package baritone.api.cache; +import java.util.ArrayList; import net.minecraft.core.BlockPos; import net.minecraft.world.level.chunk.LevelChunk; -import java.util.ArrayList; - /** * @author Brady * @since 9/24/2018 diff --git a/src/api/java/baritone/api/cache/IWorldScanner.java b/src/api/java/baritone/api/cache/IWorldScanner.java index d8cf2bd38..ea27dd161 100644 --- a/src/api/java/baritone/api/cache/IWorldScanner.java +++ b/src/api/java/baritone/api/cache/IWorldScanner.java @@ -19,12 +19,11 @@ import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; +import java.util.List; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.block.Block; -import java.util.List; - /** * @author Brady * @since 10/6/2018 diff --git a/src/api/java/baritone/api/command/argument/IArgConsumer.java b/src/api/java/baritone/api/command/argument/IArgConsumer.java index 833d67736..894e4a71b 100644 --- a/src/api/java/baritone/api/command/argument/IArgConsumer.java +++ b/src/api/java/baritone/api/command/argument/IArgConsumer.java @@ -27,11 +27,10 @@ import baritone.api.command.exception.CommandNotEnoughArgumentsException; import baritone.api.command.exception.CommandTooManyArgumentsException; import baritone.api.utils.Helper; -import net.minecraft.core.Direction; - import java.util.Deque; import java.util.LinkedList; import java.util.stream.Stream; +import net.minecraft.core.Direction; /** * The {@link IArgConsumer} is how {@link ICommand}s read the arguments passed to them. This class has many benefits: diff --git a/src/api/java/baritone/api/command/datatypes/ForDirection.java b/src/api/java/baritone/api/command/datatypes/ForDirection.java index 5dd355b41..cbfbc2243 100644 --- a/src/api/java/baritone/api/command/datatypes/ForDirection.java +++ b/src/api/java/baritone/api/command/datatypes/ForDirection.java @@ -19,10 +19,9 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.core.Direction; - import java.util.Locale; import java.util.stream.Stream; +import net.minecraft.core.Direction; public enum ForDirection implements IDatatypeFor { INSTANCE; diff --git a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java index d1016e99e..b0d72bed1 100644 --- a/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java +++ b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java @@ -20,11 +20,10 @@ import baritone.api.IBaritone; import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Player; - import java.util.List; import java.util.stream.Stream; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; /** * An {@link IDatatype} used to resolve nearby players, those within diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java index 738ca019a..d97635eb2 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java @@ -21,9 +21,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.Mth; - import java.util.stream.Stream; +import net.minecraft.util.Mth; public enum RelativeGoalBlock implements IDatatypePost { INSTANCE; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java index c4dd045f3..8682bbbaf 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java @@ -21,9 +21,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.Mth; - import java.util.stream.Stream; +import net.minecraft.util.Mth; public enum RelativeGoalXZ implements IDatatypePost { INSTANCE; diff --git a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java index 9a13e4bbd..34c8c0018 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java @@ -21,9 +21,8 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; -import net.minecraft.util.Mth; - import java.util.stream.Stream; +import net.minecraft.util.Mth; public enum RelativeGoalYLevel implements IDatatypePost { INSTANCE; diff --git a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java index 51840a117..d615ff2cd 100644 --- a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -19,9 +19,8 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; -import net.minecraft.ChatFormatting; - import java.util.List; +import net.minecraft.ChatFormatting; import static baritone.api.utils.Helper.HELPER; diff --git a/src/api/java/baritone/api/command/exception/ICommandException.java b/src/api/java/baritone/api/command/exception/ICommandException.java index 389129761..0a1529d69 100644 --- a/src/api/java/baritone/api/command/exception/ICommandException.java +++ b/src/api/java/baritone/api/command/exception/ICommandException.java @@ -19,9 +19,8 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; -import net.minecraft.ChatFormatting; - import java.util.List; +import net.minecraft.ChatFormatting; import static baritone.api.utils.Helper.HELPER; diff --git a/src/api/java/baritone/api/command/helpers/Paginator.java b/src/api/java/baritone/api/command/helpers/Paginator.java index e119a9a23..77628a796 100644 --- a/src/api/java/baritone/api/command/helpers/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/Paginator.java @@ -21,16 +21,17 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.utils.Helper; + +import java.awt.*; +import java.util.Arrays; +import java.util.List; +import java.util.function.Function; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.MutableComponent; -import java.util.Arrays; -import java.util.List; -import java.util.function.Function; - public class Paginator implements Helper { public final List entries; diff --git a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java index 0722ce16d..a7dfb7f8a 100644 --- a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java @@ -23,14 +23,13 @@ import baritone.api.command.manager.ICommandManager; import baritone.api.event.events.TabCompleteEvent; import baritone.api.utils.SettingsUtil; -import net.minecraft.resources.ResourceLocation; - import java.util.Comparator; import java.util.List; import java.util.Locale; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Stream; +import net.minecraft.resources.ResourceLocation; /** * The {@link TabCompleteHelper} is a single-use object that helps you handle tab completion. It includes helper diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index 5a94e5100..9eac8de46 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -31,58 +31,44 @@ public interface AbstractGameEventListener extends IGameEventListener { @Override - default void onTick(TickEvent event) { - } + default void onTick(TickEvent event) {} @Override - default void onPlayerUpdate(PlayerUpdateEvent event) { - } + default void onPlayerUpdate(PlayerUpdateEvent event) {} @Override - default void onSendChatMessage(ChatEvent event) { - } + default void onSendChatMessage(ChatEvent event) {} @Override - default void onPreTabComplete(TabCompleteEvent event) { - } + default void onPreTabComplete(TabCompleteEvent event) {} @Override - default void onChunkEvent(ChunkEvent event) { - } + default void onChunkEvent(ChunkEvent event) {} @Override - default void onRenderPass(RenderEvent event) { - } + default void onRenderPass(RenderEvent event) {} @Override - default void onWorldEvent(WorldEvent event) { - } + default void onWorldEvent(WorldEvent event) {} @Override - default void onSendPacket(PacketEvent event) { - } + default void onSendPacket(PacketEvent event) {} @Override - default void onReceivePacket(PacketEvent event) { - } + default void onReceivePacket(PacketEvent event) {} @Override - default void onPlayerRotationMove(RotationMoveEvent event) { - } + default void onPlayerRotationMove(RotationMoveEvent event) {} @Override - default void onPlayerSprintState(SprintStateEvent event) { - } + default void onPlayerSprintState(SprintStateEvent event) {} @Override - default void onBlockInteract(BlockInteractEvent event) { - } + default void onBlockInteract(BlockInteractEvent event) {} @Override - default void onPlayerDeath() { - } + default void onPlayerDeath() {} @Override - default void onPathEvent(PathEvent event) { - } + default void onPathEvent(PathEvent event) {} } diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 9ae873fb6..37cbc8953 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -22,10 +22,8 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.world.level.block.state.BlockState; - import java.io.File; import java.util.List; -import java.util.Map; /** * @author Brady @@ -65,34 +63,18 @@ default boolean build(String schematicFile, BlockPos origin) { boolean isPaused(); - Vec3i getSchemSize(); - void popStack(); - boolean clearState(); - boolean isFromAltoclefFinished(); void resume(); void clearArea(BlockPos corner1, BlockPos corner2); - void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef); - - boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef); - /** * @return A list of block states that are estimated to be placeable by this builder process. You can use this in * schematics, for example, to pick a state that the builder process will be happy with, because any variation will * cause it to give up. This is updated every tick, but only while the builder process is active. */ List getApproxPlaceable(); - - boolean isFromAltoclef(); - - void noteInsert(BlockPos pos); - - void reset(); - - Map getMissing(); } diff --git a/src/api/java/baritone/api/process/IFarmProcess.java b/src/api/java/baritone/api/process/IFarmProcess.java index cf63b64d3..0c07567de 100644 --- a/src/api/java/baritone/api/process/IFarmProcess.java +++ b/src/api/java/baritone/api/process/IFarmProcess.java @@ -33,9 +33,7 @@ public interface IFarmProcess extends IBaritoneProcess { /** * Begin to search for nearby crops to farm. */ - default void farm() { - farm(0, null); - } + default void farm() {farm(0, null);} /** * Begin to search for crops to farm with in specified aria @@ -43,7 +41,5 @@ default void farm() { * * @param range The distance to search for crops to farm */ - default void farm(int range) { - farm(range, null); - } + default void farm(int range) {farm(range, null);} } diff --git a/src/api/java/baritone/api/process/IFollowProcess.java b/src/api/java/baritone/api/process/IFollowProcess.java index b9eedee30..6f7f0a239 100644 --- a/src/api/java/baritone/api/process/IFollowProcess.java +++ b/src/api/java/baritone/api/process/IFollowProcess.java @@ -17,10 +17,9 @@ package baritone.api.process; -import net.minecraft.world.entity.Entity; - import java.util.List; import java.util.function.Predicate; +import net.minecraft.world.entity.Entity; /** * @author Brady diff --git a/src/api/java/baritone/api/process/IMineProcess.java b/src/api/java/baritone/api/process/IMineProcess.java index 1331e3dde..a63eb00a2 100644 --- a/src/api/java/baritone/api/process/IMineProcess.java +++ b/src/api/java/baritone/api/process/IMineProcess.java @@ -19,9 +19,8 @@ import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMetaLookup; -import net.minecraft.world.level.block.Block; - import java.util.stream.Stream; +import net.minecraft.world.level.block.Block; /** * @author Brady diff --git a/src/api/java/baritone/api/schematic/CompositeSchematic.java b/src/api/java/baritone/api/schematic/CompositeSchematic.java index 62faa8bf2..0724ec018 100644 --- a/src/api/java/baritone/api/schematic/CompositeSchematic.java +++ b/src/api/java/baritone/api/schematic/CompositeSchematic.java @@ -17,10 +17,9 @@ package baritone.api.schematic; -import net.minecraft.world.level.block.state.BlockState; - import java.util.ArrayList; import java.util.List; +import net.minecraft.world.level.block.state.BlockState; public class CompositeSchematic extends AbstractSchematic { diff --git a/src/api/java/baritone/api/schematic/FillSchematic.java b/src/api/java/baritone/api/schematic/FillSchematic.java index d79374fc3..126501987 100644 --- a/src/api/java/baritone/api/schematic/FillSchematic.java +++ b/src/api/java/baritone/api/schematic/FillSchematic.java @@ -18,6 +18,7 @@ package baritone.api.schematic; import baritone.api.utils.BlockOptionalMeta; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import java.util.List; diff --git a/src/api/java/baritone/api/schematic/ISchematic.java b/src/api/java/baritone/api/schematic/ISchematic.java index 362d246f7..bc7c35a15 100644 --- a/src/api/java/baritone/api/schematic/ISchematic.java +++ b/src/api/java/baritone/api/schematic/ISchematic.java @@ -17,11 +17,10 @@ package baritone.api.schematic; +import java.util.List; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; -import java.util.List; - /** * Basic representation of a schematic. Provides the dimensions and the desired state for a given position relative to * the origin. @@ -76,8 +75,7 @@ default int size(Direction.Axis axis) { /** * Resets possible caches to avoid wrong behavior when moving the schematic around */ - default void reset() { - } + default void reset() {} /** * @return The width (X axis length) of this schematic diff --git a/src/api/java/baritone/api/schematic/MaskSchematic.java b/src/api/java/baritone/api/schematic/MaskSchematic.java index 954d7973c..ee56f3425 100644 --- a/src/api/java/baritone/api/schematic/MaskSchematic.java +++ b/src/api/java/baritone/api/schematic/MaskSchematic.java @@ -17,9 +17,8 @@ package baritone.api.schematic; -import net.minecraft.world.level.block.state.BlockState; - import java.util.List; +import net.minecraft.world.level.block.state.BlockState; public abstract class MaskSchematic extends AbstractSchematic { diff --git a/src/api/java/baritone/api/utils/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java index 676398887..cee7649b0 100644 --- a/src/api/java/baritone/api/utils/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -17,13 +17,12 @@ package baritone.api.utils; +import javax.annotation.Nonnull; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.util.Mth; -import javax.annotation.Nonnull; - /** * A better BlockPos that has fewer hash collisions (and slightly more performant offsets) *

diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 90a2756d8..8723c3b51 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -27,13 +27,13 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.server.packs.PackType; -import net.minecraft.server.packs.VanillaPackResources; +import net.minecraft.server.packs.*; import net.minecraft.server.packs.repository.ServerPacksSource; import net.minecraft.server.packs.resources.MultiPackResourceManager; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; +import net.minecraft.world.RandomSequences; import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -46,14 +46,15 @@ import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.loot.BuiltInLootTables; import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.LootTables; -import net.minecraft.world.level.storage.loot.PredicateManager; +import net.minecraft.world.level.storage.loot.LootDataManager; +import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; import sun.misc.Unsafe; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.*; @@ -70,8 +71,7 @@ public final class BlockOptionalMeta { private final ImmutableSet stateHashes; private final ImmutableSet stackHashes; private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); - private static LootTables lootTables; - private static PredicateManager predicate = new PredicateManager(); + private static LootDataManager lootTables; private static Map> drops = new HashMap<>(); public BlockOptionalMeta(@Nonnull Block block) { @@ -148,8 +148,12 @@ public String toString() { return String.format("BlockOptionalMeta{block=%s}", block); } - public static PredicateManager getPredicateManager() { - return predicate; + public BlockState getAnyBlockState() { + if (blockstates.size() > 0) { + return blockstates.iterator().next(); + } + + return null; } private static Method getVanillaServerPack; @@ -169,11 +173,11 @@ private static VanillaPackResources getVanillaServerPack() { return null; } - public static LootTables getManager() { + public static LootDataManager getManager() { if (lootTables == null) { MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(getVanillaServerPack())); ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); - lootTables = new LootTables(predicate); + lootTables = new LootDataManager(); resourceManager.registerReloadListener(lootTables); try { resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), resources.listPacks().toList()).done().get(); @@ -185,14 +189,6 @@ public static LootTables getManager() { return lootTables; } - public BlockState getAnyBlockState() { - if (blockstates.size() > 0) { - return blockstates.iterator().next(); - } - - return null; - } - private static synchronized List drops(Block b) { return drops.computeIfAbsent(b, block -> { ResourceLocation lootTableLocation = block.getLootTable(); @@ -201,15 +197,18 @@ private static synchronized List drops(Block b) { } else { List items = new ArrayList<>(); try { - getManager().get(lootTableLocation).getRandomItems( - new LootContext.Builder(ServerLevelStub.fastCreate()) - .withRandom(RandomSource.create()) + + getManager().getLootTable(lootTableLocation).getRandomItemsRaw( + new LootContext.Builder( + new LootParams.Builder(ServerLevelStub.fastCreate()) .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) - .create(LootContextParamSets.BLOCK), - stack -> items.add(stack.getItem()) + .create(LootContextParamSets.BLOCK) + ).withOptionalRandomSeed(1L) + .create(null), + stack -> items.add(stack.getItem()) ); } catch (Exception e) { e.printStackTrace(); @@ -223,8 +222,8 @@ private static class ServerLevelStub extends ServerLevel { private static Minecraft client = Minecraft.getInstance(); private static Unsafe unsafe = getUnsafe(); - public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.LevelStorageAccess $$2, ServerLevelData $$3, ResourceKey $$4, LevelStem $$5, ChunkProgressListener $$6, boolean $$7, long $$8, List $$9, boolean $$10) { - super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10); + public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.LevelStorageAccess $$2, ServerLevelData $$3, ResourceKey $$4, LevelStem $$5, ChunkProgressListener $$6, boolean $$7, long $$8, List $$9, boolean $$10, @Nullable RandomSequences $$11) { + super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10, $$11); } @Override diff --git a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java index 86d19ff5e..7c1070a84 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java @@ -17,13 +17,12 @@ package baritone.api.utils; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; public class BlockOptionalMetaLookup { diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java index d2132f9a5..a43d78e87 100644 --- a/src/api/java/baritone/api/utils/BlockUtils.java +++ b/src/api/java/baritone/api/utils/BlockUtils.java @@ -17,13 +17,13 @@ package baritone.api.utils; +import java.util.HashMap; +import java.util.Map; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; -import java.util.HashMap; -import java.util.Map; - public class BlockUtils { private static transient Map resourceCache = new HashMap<>(); @@ -64,6 +64,5 @@ public static Block stringToBlockNullable(String name) { return block; } - private BlockUtils() { - } + private BlockUtils() {} } diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 2e1830c02..7e3c44607 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -18,11 +18,13 @@ package baritone.api.utils; import baritone.api.BaritoneAPI; +import baritone.api.utils.gui.BaritoneToast; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import java.awt.*; import java.util.Arrays; import java.util.Calendar; import java.util.stream.Stream; @@ -39,8 +41,7 @@ public interface Helper { /** * Instance of {@link Helper}. Used for static-context reference. */ - Helper HELPER = new Helper() { - }; + Helper HELPER = new Helper() {}; /** * Instance of the game diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 32e331544..4e29b1459 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -18,6 +18,9 @@ package baritone.api.utils; import baritone.api.cache.IWorldData; +import java.util.Optional; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; @@ -28,10 +31,6 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import java.util.Optional; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - /** * @author Brady * @since 11/12/2018 @@ -40,9 +39,7 @@ public interface IPlayerContext { LocalPlayer player(); - static double eyeHeight(boolean ifSneaking) { - return ifSneaking ? 1.27 : 1.62; - } + IPlayerController playerController(); Level world(); @@ -54,7 +51,8 @@ default Stream entitiesStream() { return StreamSupport.stream(entities().spliterator(), false); } - IPlayerController playerController(); + + IWorldData worldData(); HitResult objectMouseOver(); @@ -74,8 +72,7 @@ default BetterBlockPos playerFeet() { if (world().getBlockState(feet).getBlock() instanceof SlabBlock) { return feet.above(); } - } catch (NullPointerException ignored) { - } + } catch (NullPointerException ignored) {} return feet; } @@ -92,7 +89,9 @@ default Rotation playerRotations() { return new Rotation(player().getYRot(), player().getXRot()); } - IWorldData worldData(); + static double eyeHeight(boolean ifSneaking) { + return ifSneaking ? 1.27 : 1.62; + } /** * Returns the block that the crosshair is currently placed over. Updated once per tick. diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 022281b64..db0773b40 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -28,8 +28,7 @@ */ public final class RayTraceUtils { public static ClipContext.Fluid fluidHandling = ClipContext.Fluid.NONE; - private RayTraceUtils() { - } + private RayTraceUtils() {} /** * Performs a block raytrace with the specified rotations. This should only be used when @@ -58,7 +57,7 @@ public static HitResult rayTraceTowards(Entity entity, Rotation rotation, double direction.y * blockReachDistance, direction.z * blockReachDistance ); - return entity.level.clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, fluidHandling, entity)); + return entity.level().clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, fluidHandling, entity)); } public static Vec3 inferSneakingEyePosition(Entity entity) { diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 0f43c730b..0a4fd8209 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -19,6 +19,7 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import java.util.Optional; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -32,8 +33,6 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import java.util.Optional; - /** * @author Brady * @since 9/25/2018 @@ -62,8 +61,7 @@ public final class RotationUtils { new Vec3(1, 0.5, 0.5) // East }; - private RotationUtils() { - } + private RotationUtils() {} /** * Calculates the rotation from BlockPosdest to BlockPosorig @@ -198,8 +196,8 @@ public static Optional reachable(LocalPlayer entity, BlockPos pos, dou return possibleRotation; } - BlockState state = entity.level.getBlockState(pos); - VoxelShape shape = state.getShape(entity.level, pos); + BlockState state = entity.level().getBlockState(pos); + VoxelShape shape = state.getShape(entity.level(), pos); if (shape.isEmpty()) { shape = Shapes.block(); } @@ -235,7 +233,7 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve if (((BlockHitResult) result).getBlockPos().equals(pos)) { return Optional.of(rotation); } - if (entity.level.getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { + if (entity.level().getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { return Optional.of(rotation); } } @@ -252,6 +250,6 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve * @return The optional rotation */ public static Optional reachableCenter(Entity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { - return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.level, pos), blockReachDistance, wouldSneak); + return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.level(), pos), blockReachDistance, wouldSneak); } } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 9f2324a24..9e82c05de 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -21,12 +21,12 @@ import baritone.api.Settings; import net.minecraft.client.Minecraft; import net.minecraft.core.Direction; +import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; - import java.awt.*; import java.io.BufferedReader; import java.io.BufferedWriter; diff --git a/src/api/java/baritone/api/utils/TypeUtils.java b/src/api/java/baritone/api/utils/TypeUtils.java index 01fe45459..457cc449a 100644 --- a/src/api/java/baritone/api/utils/TypeUtils.java +++ b/src/api/java/baritone/api/utils/TypeUtils.java @@ -26,8 +26,7 @@ */ public final class TypeUtils { - private TypeUtils() { - } + private TypeUtils() {} /** * Resolves the "base type" for the specified type. For example, if the specified diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index dceab6c61..4ea94b95a 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -32,8 +32,7 @@ */ public final class VecUtils { - private VecUtils() { - } + private VecUtils() {} /** * Calculates the center of the block at the specified position's bounding box diff --git a/src/api/java/baritone/api/utils/gui/BaritoneToast.java b/src/api/java/baritone/api/utils/gui/BaritoneToast.java index 87f0aac6a..6cdc57cc0 100644 --- a/src/api/java/baritone/api/utils/gui/BaritoneToast.java +++ b/src/api/java/baritone/api/utils/gui/BaritoneToast.java @@ -17,8 +17,10 @@ package baritone.api.utils.gui; +import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.toasts.Toast; import net.minecraft.client.gui.components.toasts.ToastComponent; import net.minecraft.network.chat.Component; @@ -37,7 +39,7 @@ public BaritoneToast(Component titleComponent, Component subtitleComponent, long this.totalShowTime = totalShowTime; } - public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long delta) { + public Visibility render(GuiGraphics gui, ToastComponent toastGui, long delta) { if (this.newDisplay) { this.firstDrawTime = delta; this.newDisplay = false; @@ -45,15 +47,13 @@ public Visibility render(PoseStack matrixStack, ToastComponent toastGui, long de //TODO: check - toastGui.getMinecraft().getTextureManager().bindForSetup(new ResourceLocation("textures/gui/toasts.png")); - //GlStateManager._color4f(1.0F, 1.0F, 1.0F, 255.0F); - toastGui.blit(matrixStack, 0, 0, 0, 32, 160, 32); + gui.blit(new ResourceLocation("textures/gui/toasts.png"), 0, 0, 0, 32, 160, 32); if (this.subtitle == null) { - toastGui.getMinecraft().font.draw(matrixStack, this.title, 18, 12, -11534256); + gui.drawString(toastGui.getMinecraft().font, this.title, 18, 12, -11534256); } else { - toastGui.getMinecraft().font.draw(matrixStack, this.title, 18, 7, -11534256); - toastGui.getMinecraft().font.draw(matrixStack, this.subtitle, 18, 18, -16777216); + gui.drawString(toastGui.getMinecraft().font, this.title, 18, 7, -11534256); + gui.drawString(toastGui.getMinecraft().font, this.subtitle, 18, 18, -16777216); } return delta - this.firstDrawTime < totalShowTime ? Visibility.SHOW : Visibility.HIDE; diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java index 9f88fb1fe..711ca6554 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkArray.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkArray.java @@ -18,13 +18,13 @@ package baritone.launch.mixins; import baritone.utils.accessor.IChunkArray; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.chunk.LevelChunk; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import java.util.concurrent.atomic.AtomicReferenceArray; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.LevelChunk; @Mixin(targets = "net.minecraft.client.multiplayer.ClientChunkCache$Storage") public abstract class MixinChunkArray implements IChunkArray { diff --git a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java index d25837754..de465b82a 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientChunkProvider.java @@ -19,14 +19,14 @@ import baritone.utils.accessor.IChunkArray; import baritone.utils.accessor.IClientChunkProvider; -import net.minecraft.client.multiplayer.ClientChunkCache; -import net.minecraft.client.multiplayer.ClientLevel; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import java.lang.reflect.Field; import java.util.Arrays; +import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.client.multiplayer.ClientLevel; @Mixin(ClientChunkCache.class) public class MixinClientChunkProvider implements IClientChunkProvider { diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index 1eafa8d54..e718685c9 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -27,6 +27,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.*; import net.minecraft.world.level.ChunkPos; import org.spongepowered.asm.mixin.Final; @@ -67,14 +68,12 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { } }*/ - @Shadow - @Final - private Minecraft minecraft; + @Shadow @Final private Minecraft minecraft; @Inject( - method = "sendChat(Ljava/lang/String;)V", - at = @At("HEAD"), - cancellable = true + method = "sendChat(Ljava/lang/String;)V", + at = @At("HEAD"), + cancellable = true ) private void sendChatMessage(String string, CallbackInfo ci) { ChatEvent event = new ChatEvent(string); diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index 4eea7d219..22ca083e0 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -19,12 +19,14 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import baritone.api.event.events.ChatEvent; import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.SprintStateEvent; import baritone.api.event.events.type.EventState; import baritone.behavior.LookBehavior; import net.minecraft.client.KeyMapping; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Abilities; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index 70d5861cb..63331502f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -22,8 +22,6 @@ import com.mojang.brigadier.context.StringRange; import com.mojang.brigadier.suggestion.Suggestion; import com.mojang.brigadier.suggestion.Suggestions; -import net.minecraft.client.gui.components.CommandSuggestions; -import net.minecraft.client.gui.components.EditBox; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -35,6 +33,8 @@ import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.client.gui.components.CommandSuggestions; +import net.minecraft.client.gui.components.EditBox; /** * @author Brady diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index c14f1b846..44a5c1e32 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -31,6 +31,8 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import static org.objectweb.asm.Opcodes.GETFIELD; + /** * @author Brady * @since 9/10/2018 diff --git a/src/launch/java/baritone/launch/mixins/MixinLootContext.java b/src/launch/java/baritone/launch/mixins/MixinLootContext.java index 7c7960cf1..223444e12 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLootContext.java +++ b/src/launch/java/baritone/launch/mixins/MixinLootContext.java @@ -21,8 +21,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.LootTables; -import net.minecraft.world.level.storage.loot.PredicateManager; +import net.minecraft.world.level.storage.loot.LootDataManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -48,27 +47,13 @@ private MinecraftServer getServer(ServerLevel world) { method = "create", at = @At( value = "INVOKE", - target = "Lnet/minecraft/server/MinecraftServer;getLootTables()Lnet/minecraft/world/level/storage/loot/LootTables;" + target = "Lnet/minecraft/server/MinecraftServer;getLootData()Lnet/minecraft/world/level/storage/loot/LootDataManager;" ) ) - private LootTables getLootTableManager(MinecraftServer server) { + private LootDataManager getLootTableManager(MinecraftServer server) { if (server == null) { return BlockOptionalMeta.getManager(); } - return server.getLootTables(); - } - - @Redirect( - method = "create", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/server/MinecraftServer;getPredicateManager()Lnet/minecraft/world/level/storage/loot/PredicateManager;" - ) - ) - private PredicateManager getLootPredicateManager(MinecraftServer server) { - if (server == null) { - return BlockOptionalMeta.getPredicateManager(); - } - return server.getPredicateManager(); + return server.getLootData(); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 604feaa85..660292a19 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -32,6 +32,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.function.BiFunction; @@ -60,12 +61,12 @@ private void postInit(CallbackInfo ci) { @Inject( method = "tick", at = @At( - value = "FIELD", - opcode = Opcodes.GETFIELD, - target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", - ordinal = 4, - shift = At.Shift.BY, - by = -3 + value = "FIELD", + opcode = Opcodes.GETFIELD, + target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", + ordinal = 4, + shift = At.Shift.BY, + by = -3 ) ) private void runTick(CallbackInfo ci) { @@ -123,12 +124,26 @@ private void postLoadWorld(ClientLevel world, CallbackInfo ci) { at = @At( value = "FIELD", opcode = Opcodes.GETFIELD, - target = "Lnet/minecraft/client/gui/screens/Screen;passEvents:Z" + target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;" + ), + slice = @Slice( + from = @At( + value = "FIELD", + opcode = Opcodes.GETFIELD, + target = "Lnet/minecraft/client/Options;renderDebug:Z" + ), + to = @At( + value = "CONSTANT", + args = "stringValue=Keybindings" + ) ) ) - private boolean passEvents(Screen screen) { + private Screen passEvents(Minecraft instance) { // allow user input is only the primary baritone - return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) || screen.passEvents; + if (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) { + return null; + } + return instance.screen; } // TODO diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 52543ed91..057a49b4b 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -23,6 +23,8 @@ import baritone.api.event.events.type.EventState; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; import net.minecraft.network.Connection; import net.minecraft.network.PacketSendListener; import net.minecraft.network.protocol.Packet; diff --git a/src/launch/java/baritone/launch/mixins/MixinScreen.java b/src/launch/java/baritone/launch/mixins/MixinScreen.java index 8e6ab9955..c99c7776c 100644 --- a/src/launch/java/baritone/launch/mixins/MixinScreen.java +++ b/src/launch/java/baritone/launch/mixins/MixinScreen.java @@ -21,17 +21,17 @@ import baritone.api.IBaritone; import baritone.api.event.events.ChatEvent; import baritone.utils.accessor.IGuiScreen; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Style; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; + +import java.net.URI; +import net.minecraft.client.gui.screens.Screen; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.net.URI; - @Mixin(Screen.class) public abstract class MixinScreen implements IGuiScreen { diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index b81e17b38..7174a1228 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -60,8 +60,7 @@ public class Baritone implements IBaritone { if (!Files.exists(dir.toPath())) { try { Files.createDirectories(dir.toPath()); - } catch (IOException ignored) { - } + } catch (IOException ignored) {} } } @@ -215,8 +214,7 @@ public void openClick() { try { Thread.sleep(100); Helper.mc.execute(() -> Helper.mc.setScreen(new GuiClick())); - } catch (Exception ignored) { - } + } catch (Exception ignored) {} }).start(); } diff --git a/src/main/java/baritone/KeepName.java b/src/main/java/baritone/KeepName.java index 8fe29cd71..7fc04cd68 100644 --- a/src/main/java/baritone/KeepName.java +++ b/src/main/java/baritone/KeepName.java @@ -18,5 +18,4 @@ package baritone; // Annotation for classes and class members that should not be renamed by proguard -public @interface KeepName { -} +public @interface KeepName {} diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 3cad14421..e0b56196e 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -26,7 +26,11 @@ import net.minecraft.core.NonNullList; import net.minecraft.world.InteractionHand; import net.minecraft.world.inventory.ClickType; -import net.minecraft.world.item.*; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.DiggerItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.PickaxeItem; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.Block; @@ -34,7 +38,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; - import java.util.ArrayList; import java.util.OptionalInt; import java.util.Random; @@ -151,8 +154,7 @@ public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { if (AltoClefSettings.getInstance().isInteractionPaused()) return false; if (AltoClefSettings.getInstance().shouldAvoidPlacingAt(x, y, z)) return false; BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); - if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { - }))))) { + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { return true; // gotem } if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && ((BlockItem) stack.getItem()).getBlock().equals(maybe.getBlock()))) { diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 13b8ebdd4..e9b0ca661 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -77,7 +77,7 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { float desiredPitch = this.target.getPitch(); ctx.player().setXRot(desiredPitch); ctx.player().setYRot((float) (ctx.player().getYRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); - ctx.player().setXRot((float) (ctx.player().getXRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); + ctx.player().setXRot((float) (ctx.player().getXRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); if (desiredPitch == oldPitch && !Baritone.settings().freeLook.value) { nudgeToLevel(); } diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 148952164..1f2ba4561 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -36,13 +36,12 @@ import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.pathing.Favoring; -import net.minecraft.core.BlockPos; - import java.util.ArrayList; import java.util.Comparator; import java.util.Objects; import java.util.Optional; import java.util.concurrent.LinkedBlockingQueue; +import net.minecraft.core.BlockPos; public final class PathingBehavior extends Behavior implements IPathingBehavior, Helper { @@ -420,7 +419,7 @@ private void resetEstimatedTicksToGoal(BetterBlockPos start) { public BetterBlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); if (!MovementHelper.canWalkOn(ctx, feet.below())) { - if (ctx.player().isOnGround()) { + if (ctx.player().onGround()) { double playerX = ctx.player().position().x; double playerZ = ctx.player().position().z; ArrayList closest = new ArrayList<>(); @@ -438,7 +437,9 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class // can't possibly be sneaking off of this one, we're too far away continue; } - if (MovementHelper.canWalkOn(ctx, possibleSupport.below()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.above())) { + if (MovementHelper.canWalkOn(ctx, possibleSupport.below()) + && MovementHelper.canWalkThrough(ctx, possibleSupport) + && MovementHelper.canWalkThrough(ctx, possibleSupport.above())) { // this is plausible //logDebug("Faking path start assuming player is standing off the edge of a block"); return possibleSupport; diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 3109d9293..bbc713af7 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -21,17 +21,16 @@ import baritone.utils.pathing.PathingBlockType; import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.List; +import java.util.Map; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.dimension.DimensionType; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.List; -import java.util.Map; - /** * @author Brady * @since 8/3/2018 diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index 6c70f1eba..9bcebcaad 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -20,10 +20,6 @@ import baritone.Baritone; import baritone.api.cache.ICachedRegion; import baritone.api.utils.BlockUtils; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.dimension.DimensionType; - import java.io.*; import java.nio.file.Files; import java.nio.file.Path; @@ -31,6 +27,9 @@ import java.util.*; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; /** * @author Brady @@ -167,7 +166,7 @@ public synchronized final void save(String directory) { out.writeShort(entry.getValue().size()); for (BlockPos pos : entry.getValue()) { out.writeByte((byte) (pos.getZ() << 4 | pos.getX())); - out.writeInt(pos.getY() - dimension.minY()); + out.writeInt(pos.getY()-dimension.minY()); } } } @@ -272,7 +271,7 @@ public synchronized void load(String directory) { int X = xz & 0x0f; int Z = (xz >>> 4) & 0x0f; int Y = in.readInt(); - locs.add(new BlockPos(X, Y + dimension.minY(), Z)); + locs.add(new BlockPos(X, Y+dimension.minY(), Z)); } } } diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 2384d1c58..4e323097c 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -25,11 +25,6 @@ import baritone.api.utils.Helper; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.dimension.DimensionType; - import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -38,6 +33,12 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.dimension.DimensionType; /** * @author Brady diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 4f922884d..d544ac74d 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -21,7 +21,12 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DoublePlantBlock; +import net.minecraft.world.level.block.FlowerBlock; +import net.minecraft.world.level.block.TallGrassBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; @@ -29,7 +34,6 @@ import net.minecraft.world.level.dimension.BuiltinDimensionTypes; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.phys.Vec3; - import java.util.*; import static baritone.utils.BlockStateInterface.getFromChunk; @@ -40,8 +44,7 @@ */ public final class ChunkPacker { - private ChunkPacker() { - } + private ChunkPacker() {} public static CachedChunk pack(LevelChunk chunk) { //long start = System.nanoTime() / 1000000L; @@ -80,7 +83,7 @@ public static CachedChunk pack(LevelChunk chunk) { Block block = state.getBlock(); if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { String name = BlockUtils.blockToString(block); - specialBlocks.computeIfAbsent(name, b -> new ArrayList<>()).add(new BlockPos(x, y + chunk.getMinBuildHeight(), z)); + specialBlocks.computeIfAbsent(name, b -> new ArrayList<>()).add(new BlockPos(x, y+chunk.getMinBuildHeight(), z)); } } } diff --git a/src/main/java/baritone/cache/WaypointCollection.java b/src/main/java/baritone/cache/WaypointCollection.java index 52dd1f539..222adfdf6 100644 --- a/src/main/java/baritone/cache/WaypointCollection.java +++ b/src/main/java/baritone/cache/WaypointCollection.java @@ -48,8 +48,7 @@ public class WaypointCollection implements IWaypointCollection { if (!Files.exists(directory)) { try { Files.createDirectories(directory); - } catch (IOException ignored) { - } + } catch (IOException ignored) {} } System.out.println("Would save waypoints to " + directory); this.waypoints = new HashMap<>(); @@ -89,8 +88,7 @@ private synchronized void load(Waypoint.Tag tag) { int z = in.readInt(); this.waypoints.get(tag).add(new Waypoint(name, tag, new BetterBlockPos(x, y, z), creationTimestamp)); } - } catch (IOException ignored) { - } + } catch (IOException ignored) {} } private synchronized void save(Waypoint.Tag tag) { diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 0503a6827..f3d96a0db 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -20,13 +20,9 @@ import baritone.Baritone; import baritone.api.cache.IWorldProvider; import baritone.api.utils.Helper; -import net.minecraft.client.server.IntegratedServer; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.dimension.DimensionType; -import net.minecraft.world.level.storage.LevelResource; import org.apache.commons.lang3.SystemUtils; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; @@ -34,6 +30,11 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; +import net.minecraft.client.server.IntegratedServer; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.storage.LevelResource; /** * @author Brady @@ -97,16 +98,14 @@ public final void initWorld(ResourceKey worldKey, DimensionType world) { try (FileOutputStream out = new FileOutputStream(readme.resolve("readme.txt").toFile())) { // good thing we have a readme out.write("https://github.com/cabaletta/baritone\n".getBytes()); - } catch (IOException ignored) { - } + } catch (IOException ignored) {} // We will actually store the world data in a subfolder: "DIM" Path dir = getDimDir(worldKey, world.logicalHeight(), directory); if (!Files.exists(dir)) { try { Files.createDirectories(dir); - } catch (IOException ignored) { - } + } catch (IOException ignored) {} } System.out.println("Baritone world data dir: " + dir); diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 35e46ba23..2ce865a8d 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -22,6 +22,8 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; +import java.util.*; +import java.util.stream.IntStream; import net.minecraft.client.multiplayer.ClientChunkCache; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; @@ -31,9 +33,6 @@ import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.PalettedContainer; -import java.util.*; -import java.util.stream.IntStream; - public enum WorldScanner implements IWorldScanner { INSTANCE; diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index 2ba6f74c9..c3c6648fe 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -35,12 +35,9 @@ import baritone.command.manager.CommandManager; import baritone.utils.accessor.IGuiScreen; import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.*; import net.minecraft.network.chat.MutableComponent; import net.minecraft.util.Tuple; - import java.net.URI; import java.net.URISyntaxException; import java.util.List; @@ -101,8 +98,7 @@ public boolean runCommand(String msg) { } else if (msg.trim().equalsIgnoreCase("orderpizza")) { try { ((IGuiScreen) mc.screen).openLinkInvoker(new URI("https://www.dominos.com/en/pages/order/")); - } catch (NullPointerException | URISyntaxException ignored) { - } + } catch (NullPointerException | URISyntaxException ignored) {} return false; } if (msg.isEmpty()) { @@ -132,8 +128,7 @@ public boolean runCommand(String msg) { logRanCommand(command, rest); try { this.manager.execute(String.format("set %s %s", setting.getName(), argc.getString())); - } catch (CommandNotEnoughArgumentsException ignored) { - } // The operation is safe + } catch (CommandNotEnoughArgumentsException ignored) {} // The operation is safe return true; } } diff --git a/src/main/java/baritone/command/argument/CommandArguments.java b/src/main/java/baritone/command/argument/CommandArguments.java index d10fbc807..22a2ef887 100644 --- a/src/main/java/baritone/command/argument/CommandArguments.java +++ b/src/main/java/baritone/command/argument/CommandArguments.java @@ -30,8 +30,7 @@ */ public final class CommandArguments { - private CommandArguments() { - } + private CommandArguments() {} private static final Pattern ARG_PATTERN = Pattern.compile("\\S+"); diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index dfbbf06bd..5cbed55bc 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -23,11 +23,10 @@ import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.pathing.goals.GoalBlock; -import net.minecraft.world.entity.Entity; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.world.entity.Entity; public class ComeCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java index 02f46243b..500981873 100644 --- a/src/main/java/baritone/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -25,6 +25,7 @@ import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.BetterBlockPos; import baritone.cache.CachedChunk; +import net.minecraft.core.Registry; import net.minecraft.ChatFormatting; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.ClickEvent; diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java index b341db003..b7e708377 100644 --- a/src/main/java/baritone/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -27,6 +27,10 @@ import baritone.api.command.exception.CommandErrorMessageException; import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; +import java.util.*; +import java.util.function.Predicate; +import java.util.stream.Stream; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; @@ -34,10 +38,6 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; -import java.util.*; -import java.util.function.Predicate; -import java.util.stream.Stream; - public class FollowCommand extends Command { public FollowCommand(IBaritone baritone) { diff --git a/src/main/java/baritone/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java index b751730e7..822884b09 100644 --- a/src/main/java/baritone/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -25,17 +25,19 @@ import baritone.api.command.exception.CommandNotFoundException; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.MutableComponent; +import java.awt.*; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; + import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class HelpCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 212498240..c5b82932d 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -39,6 +39,7 @@ import baritone.utils.BlockStateInterface; import baritone.utils.IRenderer; import baritone.utils.schematic.StaticSchematic; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.world.level.block.Blocks; @@ -46,8 +47,8 @@ import net.minecraft.world.phys.AABB; import java.awt.*; -import java.util.List; import java.util.*; +import java.util.List; import java.util.function.Function; import java.util.stream.Stream; diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 02174faed..3d70c16b9 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -28,17 +28,17 @@ import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.SettingsUtil; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.MutableComponent; +import java.awt.*; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.*; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; import static baritone.api.utils.SettingsUtil.*; diff --git a/src/main/java/baritone/command/defaults/SurfaceCommand.java b/src/main/java/baritone/command/defaults/SurfaceCommand.java index d5e45bda2..3bbd4d738 100644 --- a/src/main/java/baritone/command/defaults/SurfaceCommand.java +++ b/src/main/java/baritone/command/defaults/SurfaceCommand.java @@ -24,11 +24,10 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.world.level.block.AirBlock; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.world.level.block.AirBlock; public class SurfaceCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/TunnelCommand.java b/src/main/java/baritone/command/defaults/TunnelCommand.java index 500e32cba..dec304a03 100644 --- a/src/main/java/baritone/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/command/defaults/TunnelCommand.java @@ -23,12 +23,11 @@ import baritone.api.command.exception.CommandException; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalStrictDirection; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; public class TunnelCommand extends Command { diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 94e67c401..56a833517 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -34,17 +34,17 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.MutableComponent; - import java.util.*; import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index b4e12d4be..b7853e360 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -25,11 +25,10 @@ import baritone.api.utils.Helper; import baritone.cache.WorldProvider; import baritone.utils.BlockStateInterface; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.chunk.LevelChunk; - import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; /** * @author Brady diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index d2b75f481..b37b598ff 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -89,8 +89,7 @@ protected Optional calculate0(long primaryTimeout, long failureTimeout) { if (slowPath) { try { Thread.sleep(Baritone.settings().slowPathTimeDelayMS.value); - } catch (InterruptedException ignored) { - } + } catch (InterruptedException ignored) {} } PathNode currentNode = openSet.removeLowest(); mostRecentConsidered = currentNode; diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 173748bb3..bcb81ac1d 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -29,12 +29,13 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EndPortalFrameBlock; import net.minecraft.world.level.block.state.BlockState; import java.util.ArrayList; @@ -171,7 +172,8 @@ public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { if (isPossiblyProtected(x, y, z)) { return COST_INF; } - if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z))) { + if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z)) + || current.getBlock() instanceof EndPortalFrameBlock) { return COST_INF; } return 1; diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index f671d359f..cfeca6938 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -25,13 +25,18 @@ import baritone.api.utils.input.Input; import baritone.behavior.PathingBehavior; import baritone.utils.BlockStateInterface; +import java.util.*; + +import com.mojang.authlib.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; -import java.util.*; - public abstract class Movement implements IMovement, MovementHelper { public static final Direction[] HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP = {Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST, Direction.DOWN}; diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 01e250049..ccfe3e576 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -23,8 +23,8 @@ import baritone.api.IBaritone; import baritone.api.pathing.movement.ActionCosts; import baritone.api.pathing.movement.MovementStatus; -import baritone.api.utils.Rotation; import baritone.api.utils.*; +import baritone.api.utils.Rotation; import baritone.api.utils.input.Input; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.pathing.precompute.Ternary; @@ -33,6 +33,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.piston.MovingPistonBlock; import net.minecraft.world.level.block.state.BlockState; @@ -40,12 +41,18 @@ import net.minecraft.world.level.block.state.properties.Half; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.level.block.state.properties.StairsShape; -import net.minecraft.world.level.material.*; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.WaterFluid; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; +import java.util.List; +import java.util.Objects; import java.util.Optional; import static baritone.pathing.movement.Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP; @@ -57,14 +64,17 @@ * @author leijurv */ public interface MovementHelper extends ActionCosts, Helper { - static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + if (bsi.get0(x, y + 1, z).getBlock() instanceof EndPortalFrameBlock){ + return true; + } if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z))) return true; if (!bsi.worldBorder.canPlaceAt(x, z)) { return true; } Block b = state.getBlock(); return Baritone.settings().blocksToDisallowBreaking.value.contains(b) + || b instanceof EndPortalFrameBlock || b == Blocks.ICE // ice becomes water, and water can mess up the path || b instanceof InfestedBlock // obvious reasons // call context.get directly with x,y,z. no need to make 5 new BlockPos for no reason @@ -123,8 +133,8 @@ static boolean canWalkThrough(CalculationContext context, int x, int y, int z) { static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Ternary canWalkThrough = canWalkThroughBlockState(state); Block block = state.getBlock(); + BlockState up = bsi.get0(x, y + 1, z); if (AltoClefSettings.getInstance().canSwimThroughLava() && block == Blocks.LAVA) { - BlockState up = bsi.get0(x, y + 1, z); return up.getFluidState().isEmpty(); } if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(x, y, z)) { @@ -144,7 +154,7 @@ static Ternary canWalkThroughBlockState(BlockState state) { if (block instanceof AirBlock) { return YES; } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { return NO; } if (block == Blocks.BIG_DRIPLEAF) { @@ -196,7 +206,6 @@ static Ternary canWalkThroughBlockState(BlockState state) { static boolean canWalkThroughPosition(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); - if (block instanceof CarpetBlock) { return canWalkOn(bsi, x, y - 1, z); } @@ -257,7 +266,6 @@ static Ternary fullyPassableBlockState(BlockState state) { || block instanceof SnowLayerBlock || !state.getFluidState().isEmpty() || block instanceof TrapDoorBlock - || block instanceof EndPortalBlock || block instanceof SkullBlock || block instanceof ShulkerBoxBlock) { return NO; @@ -334,7 +342,7 @@ static boolean isReplaceable(int x, int y, int z, BlockState state, BlockStateIn if (block == Blocks.LARGE_FERN || block == Blocks.TALL_GRASS) { return true; } - return state.getMaterial().isReplaceable(); + return state.canBeReplaced(); } @Deprecated @@ -395,6 +403,7 @@ static boolean avoidWalkingInto(BlockState state) { || block == Blocks.CACTUS || block == Blocks.SWEET_BERRY_BUSH || block instanceof BaseFireBlock + || block instanceof EndPortalFrameBlock || block == Blocks.END_PORTAL || block == Blocks.COBWEB || block == Blocks.BUBBLE_COLUMN; @@ -429,6 +438,14 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat static Ternary canWalkOnBlockState(BlockState state) { Block block = state.getBlock(); + //Extra blocks we may want to walk on. + if (block instanceof EndPortalFrameBlock){ + return YES; + } + if (block == Blocks.END_PORTAL && AltoClefSettings.getInstance().isCanWalkOnEndPortal()) { + return YES; + } + //***************************************** if (isBlockNormalCube(state) && block != Blocks.MAGMA_BLOCK && block != Blocks.BUBBLE_COLUMN && block != Blocks.HONEY_BLOCK) { return YES; } @@ -465,13 +482,6 @@ static Ternary canWalkOnBlockState(BlockState state) { } return YES; } - // Extra blocks we may want to walk on. - if (block == Blocks.END_PORTAL_FRAME) { - return YES; - } - if (block == Blocks.END_PORTAL && AltoClefSettings.getInstance().isCanWalkOnEndPortal()) { - return YES; - } return NO; } @@ -527,14 +537,14 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z) { static boolean canUseFrostWalker(CalculationContext context, BlockState state) { return context.frostWalker != 0 - && state.getMaterial() == Material.WATER + && state == FrostedIceBlock.meltsInto() && ((Integer) state.getValue(LiquidBlock.LEVEL)) == 0; } static boolean canUseFrostWalker(IPlayerContext ctx, BlockPos pos) { BlockState state = BlockStateInterface.get(ctx, pos); return EnchantmentHelper.hasFrostWalker(ctx.player()) - && state.getMaterial() == Material.WATER + && state == FrostedIceBlock.meltsInto() && ((Integer) state.getValue(LiquidBlock.LEVEL)) == 0; } @@ -608,7 +618,6 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i } static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, BlockState state, boolean includeFalling) { - Block block = state.getBlock(); if (!canWalkThrough(context, x, y, z, state)) { if (!state.getFluidState().isEmpty()) { return COST_INF; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index d7d95eb1b..717cd2e70 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -28,13 +28,12 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; +import java.util.Set; import net.minecraft.core.Direction; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.FallingBlock; import net.minecraft.world.level.block.state.BlockState; -import java.util.Set; - public class MovementAscend extends Movement { private int ticksWithoutPlacement = 0; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index b0afaf8d1..345157af5 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -31,6 +31,7 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; +import java.util.Set; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Block; @@ -39,8 +40,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -import java.util.Set; - public class MovementDescend extends Movement { private int numTicks = 0; @@ -50,6 +49,35 @@ public MovementDescend(IBaritone baritone, BetterBlockPos start, BetterBlockPos super(baritone, start, end, new BetterBlockPos[]{end.above(2), end.above(), end}, end.below()); } + @Override + public void reset() { + super.reset(); + numTicks = 0; + forceSafeMode = false; + } + + /** + * Called by PathExecutor if needing safeMode can only be detected with knowledge about the next movement + */ + public void forceSafeMode() { + forceSafeMode = true; + } + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is a fall not a descend + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest.above(), dest); + } + public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { double totalCost = 0; BlockState destDown = context.get(destX, y - 1, destZ); @@ -187,35 +215,6 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, } } - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is a fall not a descend - } - return result.cost; - } - - @Override - protected Set calculateValidPositions() { - return ImmutableSet.of(src, dest.above(), dest); - } - - @Override - public void reset() { - super.reset(); - numTicks = 0; - forceSafeMode = false; - } - - /** - * Called by PathExecutor if needing safeMode can only be detected with knowledge about the next movement - */ - public void forceSafeMode() { - forceSafeMode = true; - } - @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 6d7dd885d..cf387d5c9 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -29,6 +29,9 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -36,10 +39,6 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - public class MovementDiagonal extends Movement { private static final double SQRT_2 = Math.sqrt(2); @@ -57,6 +56,58 @@ private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPo super(baritone, start, end, new BetterBlockPos[]{dir1, dir1.above(), dir2, dir2.above(), end, end.above()}); } + @Override + protected boolean safeToCancel(MovementState state) { + //too simple. backfill does not work after cornering with this + //return context.precomputedData.canWalkOn(ctx, ctx.playerFeet().down()); + LocalPlayer player = ctx.player(); + double offset = 0.25; + double x = player.position().x; + double y = player.position().y - 1; + double z = player.position().z; + //standard + if (ctx.playerFeet().equals(src)) { + return true; + } + //both corners are walkable + if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) + && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { + return true; + } + //we are in a likely unwalkable corner, check for a supporting block + if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) + || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { + return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); + } + return true; + } + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is incorrect + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); + BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); + if (dest.y < src.y) { + return ImmutableSet.of(src, dest.above(), diagA, diagB, dest, diagA.below(), diagB.below()); + } + if (dest.y > src.y) { + return ImmutableSet.of(src, src.above(), diagA, diagB, dest, diagA.above(), diagB.above()); + } + return ImmutableSet.of(src, dest, diagA, diagB); + } + public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { if (!MovementHelper.canWalkThrough(context, destX, y + 1, destZ)) { return; @@ -201,58 +252,6 @@ public static void cost(CalculationContext context, int x, int y, int z, int des res.z = destZ; } - @Override - public double calculateCost(CalculationContext context) { - MutableMoveResult result = new MutableMoveResult(); - cost(context, src.x, src.y, src.z, dest.x, dest.z, result); - if (result.y != dest.y) { - return COST_INF; // doesn't apply to us, this position is incorrect - } - return result.cost; - } - - @Override - protected Set calculateValidPositions() { - BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); - BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); - if (dest.y < src.y) { - return ImmutableSet.of(src, dest.above(), diagA, diagB, dest, diagA.below(), diagB.below()); - } - if (dest.y > src.y) { - return ImmutableSet.of(src, src.above(), diagA, diagB, dest, diagA.above(), diagB.above()); - } - return ImmutableSet.of(src, dest, diagA, diagB); - } - - @Override - protected boolean safeToCancel(MovementState state) { - //too simple. backfill does not work after cornering with this - //return context.precomputedData.canWalkOn(ctx, ctx.playerFeet().down()); - LocalPlayer player = ctx.player(); - double offset = 0.25; - double x = player.position().x; - double y = player.position().y - 1; - double z = player.position().z; - //standard - if (ctx.playerFeet().equals(src)) { - return true; - } - //both corners are walkable - if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) - && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { - return true; - } - //we are in a likely unwalkable corner, check for a supporting block - if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) - || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { - return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) - || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); - } - return true; - } - @Override public MovementState updateState(MovementState state) { super.updateState(state); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 154abddc7..a37df38b6 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -25,12 +25,11 @@ import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import com.google.common.collect.ImmutableSet; +import java.util.Set; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import java.util.Set; - public class MovementDownward extends Movement { private int numTicks = 0; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 505921524..6f1916f75 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -31,6 +31,9 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.pathing.MutableMoveResult; +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; @@ -45,10 +48,6 @@ import net.minecraft.world.level.material.WaterFluid; import net.minecraft.world.phys.Vec3; -import java.util.HashSet; -import java.util.Optional; -import java.util.Set; - public class MovementFall extends Movement { private static final ItemStack STACK_BUCKET_WATER = new ItemStack(Items.WATER_BUCKET); @@ -78,16 +77,10 @@ protected Set calculateValidPositions() { return set; } - private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, BetterBlockPos dest) { - BetterBlockPos[] toBreak; - int diffX = src.getX() - dest.getX(); - int diffZ = src.getZ() - dest.getZ(); - int diffY = Math.abs(src.getY() - dest.getY()); - toBreak = new BetterBlockPos[diffY + 2]; - for (int i = 0; i < toBreak.length; i++) { - toBreak[i] = new BetterBlockPos(src.getX() - diffX, src.getY() + 1 - i, src.getZ() - diffZ); - } - return toBreak; + private boolean willPlaceBucket() { + CalculationContext context = new CalculationContext(baritone); + MutableMoveResult result = new MutableMoveResult(); + return MovementDescend.dynamicFallCost(context, src.x, src.y, src.z, dest.x, dest.z, 0, context.get(dest.x, src.y - 2, dest.z), result); } @Override @@ -109,7 +102,7 @@ public MovementState updateState(MovementState state) { return state.setStatus(MovementStatus.UNREACHABLE); } - if (ctx.player().position().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().isOnGround()) { + if (ctx.player().position().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().onGround()) { ctx.player().getInventory().selected = ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_WATER); targetRotation = new Rotation(toDest.getYaw(), 90.0F); @@ -144,7 +137,7 @@ public MovementState updateState(MovementState state) { } Vec3 destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) if (Math.abs(ctx.player().position().x + ctx.player().getDeltaMovement().x - destCenter.x) > 0.1 || Math.abs(ctx.player().position().z + ctx.player().getDeltaMovement().z - destCenter.z) > 0.1) { - if (!ctx.player().isOnGround() && Math.abs(ctx.player().getDeltaMovement().y) > 0.4) { + if (!ctx.player().onGround() && Math.abs(ctx.player().getDeltaMovement().y) > 0.4) { state.setInput(Input.SNEAK, true); } state.setInput(Input.MOVE_FORWARD, true); @@ -156,7 +149,7 @@ public MovementState updateState(MovementState state) { double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().position().x)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().position().z)); if (dist < 0.6) { state.setInput(Input.MOVE_FORWARD, true); - } else if (!ctx.player().isOnGround()) { + } else if (!ctx.player().onGround()) { state.setInput(Input.SNEAK, false); } } @@ -184,10 +177,16 @@ public boolean safeToCancel(MovementState state) { return ctx.playerFeet().equals(src) || state.getStatus() != MovementStatus.RUNNING; } - private boolean willPlaceBucket() { - CalculationContext context = new CalculationContext(baritone); - MutableMoveResult result = new MutableMoveResult(); - return MovementDescend.dynamicFallCost(context, src.x, src.y, src.z, dest.x, dest.z, 0, context.get(dest.x, src.y - 2, dest.z), result); + private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, BetterBlockPos dest) { + BetterBlockPos[] toBreak; + int diffX = src.getX() - dest.getX(); + int diffZ = src.getZ() - dest.getZ(); + int diffY = Math.abs(src.getY() - dest.getY()); + toBreak = new BetterBlockPos[diffY + 2]; + for (int i = 0; i < toBreak.length; i++) { + toBreak[i] = new BetterBlockPos(src.getX() - diffX, src.getY() + 1 - i, src.getZ() - diffZ); + } + return toBreak; } @Override diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index c46cf68bd..1fa150a21 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -279,7 +279,7 @@ public MovementState updateState(MovementState state) { if (Baritone.settings().allowPlace.value // see PR #3775 && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway() && !MovementHelper.canWalkOn(ctx, dest.below()) - && !ctx.player().isOnGround() + && !ctx.player().onGround() && MovementHelper.attemptToPlaceABlock(state, baritone, dest.below(), true, false) == PlaceResult.READY_TO_PLACE ) { // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index e0fba9601..50ecf930c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -32,7 +32,14 @@ import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.CarpetBlock; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.phys.Vec3; @@ -249,7 +256,7 @@ public MovementState updateState(MovementState state) { BlockState frState = BlockStateInterface.get(ctx, src); Block fr = frState.getBlock(); // TODO: Evaluate usage of getMaterial().isReplaceable() - if (!(fr instanceof AirBlock || frState.getMaterial().isReplaceable())) { + if (!(fr instanceof AirBlock || frState.canBeReplaced())) { RotationUtils.reachable(ctx.player(), src, ctx.playerController().getBlockReachDistance()) .map(rot -> new MovementState.MovementTarget(rot, true)) .ifPresent(state::setTarget); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index ffb93c0ef..a5fed58c8 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -33,7 +33,14 @@ import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.CarpetBlock; +import net.minecraft.world.level.block.DoorBlock; +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.phys.Vec3; @@ -258,7 +265,7 @@ public MovementState updateState(MovementState state) { } Block low = BlockStateInterface.get(ctx, src).getBlock(); Block high = BlockStateInterface.get(ctx, src.above()).getBlock(); - if (ctx.player().position().y > src.y + 0.1D && !ctx.player().isOnGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { + if (ctx.player().position().y > src.y + 0.1D && !ctx.player().onGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { // hitting W could cause us to climb the ladder instead of going forward // wait until we're on the ground return state; diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index e4faf0ba0..dee46c972 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -37,7 +37,6 @@ import net.minecraft.core.Vec3i; import net.minecraft.util.Tuple; import net.minecraft.world.phys.Vec3; - import java.util.*; import static baritone.api.pathing.movement.MovementStatus.*; @@ -254,19 +253,19 @@ public boolean onTick() { return canCancel; // movement is in progress, but if it reports cancellable, PathingBehavior is good to cut onto the next path } - private static boolean skipNow(IPlayerContext ctx, IMovement current) { - double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().position().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().position().x)); - if (offTarget > 0.1) { - return false; - } - // we are centered - BlockPos headBonk = current.getSrc().subtract(current.getDirection()).above(2); - if (MovementHelper.fullyPassable(ctx, headBonk)) { - return true; + private Tuple closestPathPos(IPath path) { + double best = -1; + BlockPos bestPos = null; + for (IMovement movement : path.movements()) { + for (BlockPos pos : ((Movement) movement).getValidPositions()) { + double dist = VecUtils.entityDistanceToCenter(ctx.player(), pos); + if (dist < best || best == -1) { + best = dist; + bestPos = pos; + } + } } - // wait 0.3 - double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().position().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().position().z)); - return flatDist > 0.8; + return new Tuple<>(best, bestPos); } private boolean shouldPause() { @@ -274,7 +273,7 @@ private boolean shouldPause() { if (!current.isPresent()) { return false; } - if (!ctx.player().isOnGround()) { + if (!ctx.player().onGround()) { return false; } if (!MovementHelper.canWalkOn(ctx, ctx.playerFeet().below())) { @@ -323,7 +322,7 @@ private boolean possiblyOffPath(Tuple status, double leniency) * @return Whether or not it was possible to snap to the current player feet */ public boolean snipsnapifpossible() { - if (!ctx.player().isOnGround() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { + if (!ctx.player().onGround() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { // if we're falling in the air, and not in water, don't splice return false; } else { @@ -343,74 +342,6 @@ public boolean snipsnapifpossible() { return true; } - private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse current, MovementAscend next, IMovement nextnext) { - if (!Baritone.settings().sprintAscends.value) { - return false; - } - if (!current.getDirection().equals(next.getDirection().below())) { - return false; - } - if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { - return false; - } - if (!MovementHelper.canWalkOn(ctx, current.getDest().below())) { - return false; - } - if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { - return false; - } - if (!next.toBreakCached.isEmpty()) { - return false; // it's breaking - } - for (int x = 0; x < 2; x++) { - for (int y = 0; y < 3; y++) { - BlockPos chk = current.getSrc().above(y); - if (x == 1) { - chk = chk.offset(current.getDirection()); - } - if (!MovementHelper.fullyPassable(ctx, chk)) { - return false; - } - } - } - if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().above(3)))) { - return false; - } - if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(3)) || - AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(2))) { - return false; - } - return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().above(2))); // codacy smh my head - } - - private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { - if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { - return true; - } - if (!MovementHelper.canWalkOn(ctx, current.getDest().offset(current.getDirection()))) { - return false; - } - if (next instanceof MovementTraverse && next.getDirection().equals(current.getDirection())) { - return true; - } - return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; - } - - private Tuple closestPathPos(IPath path) { - double best = -1; - BlockPos bestPos = null; - for (IMovement movement : path.movements()) { - for (BlockPos pos : ((Movement) movement).getValidPositions()) { - double dist = VecUtils.entityDistanceToCenter(ctx.player(), pos); - if (dist < best || best == -1) { - best = dist; - bestPos = pos; - } - } - } - return new Tuple<>(best, bestPos); - } - private boolean shouldSprintNextTick() { boolean requested = behavior.baritone.getInputOverrideHandler().isInputForcedDown(Input.SPRINT); @@ -581,6 +512,74 @@ private Tuple overrideFall(MovementFall movement) { movement.getDest().offset(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); } + private static boolean skipNow(IPlayerContext ctx, IMovement current) { + double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().position().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().position().x)); + if (offTarget > 0.1) { + return false; + } + // we are centered + BlockPos headBonk = current.getSrc().subtract(current.getDirection()).above(2); + if (MovementHelper.fullyPassable(ctx, headBonk)) { + return true; + } + // wait 0.3 + double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().position().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().position().z)); + return flatDist > 0.8; + } + + private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse current, MovementAscend next, IMovement nextnext) { + if (!Baritone.settings().sprintAscends.value) { + return false; + } + if (!current.getDirection().equals(next.getDirection().below())) { + return false; + } + if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, current.getDest().below())) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, next.getDest().below())) { + return false; + } + if (!next.toBreakCached.isEmpty()) { + return false; // it's breaking + } + for (int x = 0; x < 2; x++) { + for (int y = 0; y < 3; y++) { + BlockPos chk = current.getSrc().above(y); + if (x == 1) { + chk = chk.offset(current.getDirection()); + } + if (!MovementHelper.fullyPassable(ctx, chk)) { + return false; + } + } + } + if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().above(3)))) { + return false; + } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(3)) || + AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(2))) { + return false; + } + return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().above(2))); // codacy smh my head + } + + private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { + if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { + return true; + } + if (!MovementHelper.canWalkOn(ctx, current.getDest().offset(current.getDirection()))) { + return false; + } + if (next instanceof MovementTraverse && next.getDirection().equals(current.getDirection())) { + return true; + } + return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; + } + private void onChangeInPathPosition() { clearKeys(); ticksOnCurrent = 0; diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java index cebe07c97..af191ae1e 100644 --- a/src/main/java/baritone/process/BackfillProcess.java +++ b/src/main/java/baritone/process/BackfillProcess.java @@ -26,14 +26,13 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.path.PathExecutor; import baritone.utils.BaritoneProcessHelper; +import java.util.*; +import java.util.stream.Collectors; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.EmptyLevelChunk; -import java.util.*; -import java.util.stream.Collectors; - public final class BackfillProcess extends BaritoneProcessHelper { public HashMap blocksToReplace = new HashMap<>(); diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 8b745d95b..b8f430e1d 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -44,8 +44,8 @@ import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; import baritone.utils.schematic.MapArtSchematic; -import baritone.utils.schematic.SchematicSystem; import baritone.utils.schematic.SelectionSchematic; +import baritone.utils.schematic.SchematicSystem; import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.litematica.LitematicaHelper; import baritone.utils.schematic.schematica.SchematicaHelper; @@ -85,13 +85,7 @@ import static baritone.api.pathing.movement.ActionCosts.COST_INF; public final class BuilderProcess extends BaritoneProcessHelper implements IBuilderProcess { - public static final Set> orientationProps = - ImmutableSet.of( - RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, - StairBlock.FACING, StairBlock.HALF, StairBlock.SHAPE, - PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, - TrapDoorBlock.OPEN, TrapDoorBlock.HALF - ); + private HashSet incorrectPositions; private LongOpenHashSet observedCompleted; // positions that are completed even if they're out of render distance and we can't make sure right now private String name; @@ -104,6 +98,21 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private int numRepeats; private List approxPlaceable; private final Map protectedItems = new HashMap<>(); + + public int stopAtHeight = 0; + private boolean fromAltoclef; + private Map missing; + private boolean active; + private Stack stateStack = new Stack<>(); + private Vec3i schemSize; + private boolean fromAltoclefFinished; + + public BuilderProcess(Baritone baritone) { + super(baritone); + } + + + private Map blockBreakHistory = new HashMap<>(); private final Function, Comparable>, PropertyContainer> PROPERTY_ENTRY_TO_STRING_FUNCTION = new Function<>() { public PropertyContainer apply(@Nullable Map.Entry, Comparable> entry) { if (entry == null) { @@ -121,39 +130,37 @@ private > String getName(Property property, Comparabl return property.getName((T) comparable); } }; - public int stopAtHeight = 0; - private boolean fromAltoclef; - private Map missing; - private boolean active; - private Stack stateStack = new Stack<>(); - private Vec3i schemSize; - private boolean fromAltoclefFinished; - - public BuilderProcess(Baritone baritone) { - super(baritone); + private void pushState() { + stateStack.clear(); + stateStack.push(this.approxPlaceable); + stateStack.push(this.ticks); + stateStack.push(this.incorrectPositions); + stateStack.push(this.name); + stateStack.push(this.schematic); + stateStack.push(this.realSchematic); + stateStack.push(this.origin); + stateStack.push(this.paused); + stateStack.push(this.layer); + stateStack.push(this.numRepeats); + stateStack.push(this.observedCompleted); + stateStack.push(this.active); + stateStack.push(this.missing); + stateStack.push(this.schemSize); + stateStack.push(this.fromAltoclefFinished); + stateStack.push(this.fromAltoclef); } - private Map sbtMissing; - private Map blockBreakHistory = new HashMap<>(); + @Override + public double priority() { + return super.priority(); + } - private static Vec3[] aabbSideMultipliers(Direction side) { - switch (side) { - case UP: - return new Vec3[]{new Vec3(0.5, 1, 0.5), new Vec3(0.1, 1, 0.5), new Vec3(0.9, 1, 0.5), new Vec3(0.5, 1, 0.1), new Vec3(0.5, 1, 0.9)}; - case DOWN: - return new Vec3[]{new Vec3(0.5, 0, 0.5), new Vec3(0.1, 0, 0.5), new Vec3(0.9, 0, 0.5), new Vec3(0.5, 0, 0.1), new Vec3(0.5, 0, 0.9)}; - case NORTH: - case SOUTH: - case EAST: - case WEST: - double x = side.getStepX() == 0 ? 0.5 : (1 + side.getStepX()) / 2D; - double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D; - return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)}; - default: // null - throw new IllegalStateException(); - } + @Override + public String displayName() { + return super.displayName(); } + @Override public void build(String name, ISchematic schematic, Vec3i origin) { //Shouldn't get initially called @@ -226,11 +233,6 @@ private void protectItemOfMissing() { } } - @Override - public Vec3i getSchemSize() { - return schemSize; - } - @Override public void popStack() { if (this.stateStack.isEmpty()) { @@ -260,13 +262,6 @@ public void popStack() { } } - @Override - public boolean clearState() { - final boolean isEmpty = !stateStack.isEmpty(); - stateStack.clear(); - return isEmpty; - } - @Override public boolean isFromAltoclefFinished() { return this.fromAltoclefFinished; @@ -297,6 +292,11 @@ public void pause() { paused = true; } + @Override + public boolean isPaused() { + return paused; + } + @Override public boolean build(String name, File schematic, Vec3i origin) { Optional format = SchematicSystem.INSTANCE.getByFile(schematic); @@ -325,11 +325,6 @@ public boolean build(String name, File schematic, Vec3i origin) { return true; } - @Override - public boolean build(String schematicFile, BlockPos origin) { - return IBuilderProcess.super.build(schematicFile, origin); - } - @Override public void buildOpenSchematic() { if (SchematicaHelper.isSchematicaPresent()) { @@ -354,19 +349,6 @@ public void buildOpenSchematic() { } } - @Override - public boolean isPaused() { - return paused; - } - - public void clearArea(BlockPos corner1, BlockPos corner2) { - BlockPos origin = new BlockPos(Math.min(corner1.getX(), corner2.getX()), Math.min(corner1.getY(), corner2.getY()), Math.min(corner1.getZ(), corner2.getZ())); - int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; - int heightY = Math.abs(corner1.getY() - corner2.getY()) + 1; - int lengthZ = Math.abs(corner1.getZ() - corner2.getZ()) + 1; - build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.defaultBlockState()), origin); - } - @Override public void buildOpenLitematic(int i) { if (LitematicaHelper.isLitematicaPresent()) { @@ -389,17 +371,12 @@ public void buildOpenLitematic(int i) { } } - @Override - public void build(String name, ISchematic schematic, Vec3i origin, boolean fromAltoclef) { - this.build(name, schematic, origin); - this.fromAltoclef = fromAltoclef; - } - - @Override - public boolean build(String name, File schematic, Vec3i origin, boolean fromAltoclef) { - final boolean bl = this.build(name, schematic, origin); - this.fromAltoclef = fromAltoclef; - return bl; + public void clearArea(BlockPos corner1, BlockPos corner2) { + BlockPos origin = new BlockPos(Math.min(corner1.getX(), corner2.getX()), Math.min(corner1.getY(), corner2.getY()), Math.min(corner1.getZ(), corner2.getZ())); + int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; + int heightY = Math.abs(corner1.getY() - corner2.getY()) + 1; + int lengthZ = Math.abs(corner1.getZ() - corner2.getZ()) + 1; + build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.defaultBlockState()), origin); } @Override @@ -412,6 +389,20 @@ public boolean isActive() { return schematic != null; } + public BlockState placeAt(int x, int y, int z, BlockState current) { + if (!isActive()) { + return null; + } + if (!schematic.inSchematic(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current)) { + return null; + } + BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current, this.approxPlaceable); + if (state.getBlock() instanceof AirBlock) { + return null; + } + return state; + } + private Optional> toBreakNearPlayer(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); BetterBlockPos pathStart = baritone.getPathingBehavior().pathStart(); @@ -442,18 +433,19 @@ private Optional> toBreakNearPlayer(BuilderCalcu return Optional.empty(); } - public BlockState placeAt(int x, int y, int z, BlockState current) { - if (!isActive()) { - return null; - } - if (!schematic.inSchematic(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current)) { - return null; - } - BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current, this.approxPlaceable); - if (state.getBlock() instanceof AirBlock) { - return null; + public static class Placement { + + private final int hotbarSelection; + private final BlockPos placeAgainst; + private final Direction side; + private final Rotation rot; + + public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { + this.hotbarSelection = hotbarSelection; + this.placeAgainst = placeAgainst; + this.side = side; + this.rot = rot; } - return state; } private Optional searchForPlacables(BuilderCalculationContext bcc, List desirableOnHotbar) { @@ -522,11 +514,6 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in return Optional.empty(); } - @Override - public boolean isFromAltoclef() { - return this.fromAltoclef; - } - private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { for (int i = 0; i < 9; i++) { ItemStack stack = ctx.player().getInventory().items.get(i); @@ -544,8 +531,7 @@ private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult resul InteractionHand.MAIN_HAND, stack, (BlockHitResult) result - ) { - }); // that {} gives us access to a protected constructor lmfao + ) {}); // that {} gives us access to a protected constructor lmfao BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); ctx.player().setYRot(originalYaw); ctx.player().setXRot(originalPitch); @@ -579,14 +565,6 @@ private boolean anyHistoryMatch(final BlockPos pos) { return getFromHistory(pos) != null; //blockBreakHistory.keySet().stream().anyMatch(e -> e.getX() == pos.getX() && e.getY() == pos.getY() && e.getZ() == pos.getZ()); } - private boolean breakLimitExceeded(final BlockPos pos) { - if (!anyHistoryMatch(pos)) { - return false; - } - - return blockBreakHistory.get(getFromHistory(pos)).counter > 10; - } - private void noteRemoval(final BlockPos pos) { if (pos == null) return; if (anyHistoryMatch(pos)) { @@ -598,20 +576,29 @@ private void noteRemoval(final BlockPos pos) { } } - @Override - public void noteInsert(final BlockPos pos) { - if (anyHistoryMatch(pos)) { - final BlockPos orig = getFromHistory(pos); - final HistoryInfo info = blockBreakHistory.get(orig); - if (info.brokenPreviously) { - info.counter++; - info.brokenPreviously = false; - } - } else { - blockBreakHistory.put(pos, new HistoryInfo()); + private static Vec3[] aabbSideMultipliers(Direction side) { + switch (side) { + case UP: + return new Vec3[]{new Vec3(0.5, 1, 0.5), new Vec3(0.1, 1, 0.5), new Vec3(0.9, 1, 0.5), new Vec3(0.5, 1, 0.1), new Vec3(0.5, 1, 0.9)}; + case DOWN: + return new Vec3[]{new Vec3(0.5, 0, 0.5), new Vec3(0.1, 0, 0.5), new Vec3(0.9, 0, 0.5), new Vec3(0.5, 0, 0.1), new Vec3(0.5, 0, 0.9)}; + case NORTH: + case SOUTH: + case EAST: + case WEST: + double x = side.getStepX() == 0 ? 0.5 : (1 + side.getStepX()) / 2D; + double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D; + return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)}; + default: // null + throw new IllegalStateException(); } } + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + return onTick(calcFailed, isSafeToCancel, 0); + } + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel, int recursions) { if (recursions > 1000) { // onTick calls itself, don't crash return new PathingCommand(null, PathingCommandType.SET_GOAL_AND_PATH); @@ -692,9 +679,7 @@ public int lengthZ() { if (this.fromAltoclef) { this.fromAltoclefFinished = true; } - - reset(); - + onLostControl(); if (this.fromAltoclefFinished) { this.stateStack.clear(); } @@ -714,7 +699,7 @@ public int lengthZ() { } Optional> toBreak = toBreakNearPlayer(bcc); - if (toBreak.isPresent() && isSafeToCancel && ctx.player().isOnGround()) { + if (toBreak.isPresent() && isSafeToCancel && ctx.player().onGround()) { // we'd like to pause to break this block // only change look direction if it's safe (don't want to fuck up an in progress parkour for example Rotation rot = toBreak.get().getB(); @@ -737,7 +722,7 @@ public int lengthZ() { List desirableOnHotbar = new ArrayList<>(); Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); if (!AltoClefSettings.getInstance().isInteractionPaused() && toPlace.isPresent() && isSafeToCancel && - ctx.player().isOnGround() && ticks <= 0) { + ctx.player().onGround() && ticks <= 0) { Rotation rot = toPlace.get().rot; baritone.getLookBehavior().updateTarget(rot, true); ctx.player().getInventory().selected = toPlace.get().hotbarSelection; @@ -792,9 +777,19 @@ public int lengthZ() { return new PathingCommandContext(goal, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH, bcc); } - @Override - public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - return onTick(calcFailed, isSafeToCancel, 0); + private boolean recalc(BuilderCalculationContext bcc) { + if (incorrectPositions == null) { + incorrectPositions = new HashSet<>(); + fullRecalc(bcc); + if (incorrectPositions.isEmpty()) { + return false; + } + } + recalcNearby(bcc); + if (incorrectPositions.isEmpty()) { + fullRecalc(bcc); + } + return !incorrectPositions.isEmpty(); } private void trim() { @@ -814,21 +809,6 @@ private void updateMovement() { movement.update(); } - private boolean recalc(BuilderCalculationContext bcc) { - if (incorrectPositions == null) { - incorrectPositions = new HashSet<>(); - fullRecalc(bcc); - if (incorrectPositions.isEmpty()) { - return false; - } - } - recalcNearby(bcc); - if (incorrectPositions.isEmpty()) { - fullRecalc(bcc); - } - return !incorrectPositions.isEmpty(); - } - private void recalcNearby(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); int radius = Baritone.settings().builderTickScanRadius.value; @@ -895,12 +875,29 @@ private void fullRecalc(BuilderCalculationContext bcc) { } } + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable) { + return assemble(bcc, approxPlaceable, false); + } + + private boolean isDefaultState(final BlockState state) { + final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); + for (final PropertyContainer container : propertyContainers) { + if (container.getPropertyKey().equals("part") && container.getPropertyValue().equals("head")) { + return false; + } + if (container.getPropertyKey().equals("half") && container.getPropertyValue().equals("upper")) { + return false; + } + } + return true; + } + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable, boolean logMissing) { List placeable = new ArrayList<>(); List breakable = new ArrayList<>(); List sourceLiquids = new ArrayList<>(); List flowingLiquids = new ArrayList<>(); - missing.clear(); + Map missing = new HashMap<>(); incorrectPositions.forEach(pos -> { BlockState state = bcc.bsi.get0(pos); if (state.getBlock() instanceof AirBlock) { @@ -965,35 +962,63 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return new GoalComposite(toBreak.toArray(new Goal[0])); } - private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable) { - return assemble(bcc, approxPlaceable, false); - } + public static class JankyGoalComposite implements Goal { - private boolean sameWithoutOrientation(BlockState first, BlockState second) { - if (first.getBlock() != second.getBlock()) { - return false; - } - ImmutableMap, Comparable> map1 = first.getValues(); - ImmutableMap, Comparable> map2 = second.getValues(); - for (Property prop : map1.keySet()) { - if (map1.get(prop) != map2.get(prop) && !orientationProps.contains(prop)) { - return false; - } + private final Goal primary; + private final Goal fallback; + + public JankyGoalComposite(Goal primary, Goal fallback) { + this.primary = primary; + this.fallback = fallback; } - return true; - } - private boolean isDefaultState(final BlockState state) { - final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); - for (final PropertyContainer container : propertyContainers) { - if (container.getPropertyKey().equals("part") && container.getPropertyValue().equals("head")) { + + @Override + public boolean isInGoal(int x, int y, int z) { + return primary.isInGoal(x, y, z) || fallback.isInGoal(x, y, z); + } + + @Override + public double heuristic(int x, int y, int z) { + return primary.heuristic(x, y, z); + } + + @Override + public String toString() { + return "JankyComposite Primary: " + primary + " Fallback: " + fallback; + } + } + + public static class GoalBreak extends GoalGetToBlock { + + public GoalBreak(BlockPos pos) { + super(pos); + } + + @Override + public boolean isInGoal(int x, int y, int z) { + // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) + if (y > this.y) { return false; } - if (container.getPropertyKey().equals("half") && container.getPropertyValue().equals("upper")) { - return false; + // but any other adjacent works for breaking, including inside or below + return super.isInGoal(x, y, z); + } + } + + private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { + if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? + return new GoalPlace(pos); + } + boolean allowSameLevel = !(ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock); + BlockState current = ctx.world().getBlockState(pos); + for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { + //noinspection ConstantConditions + if (MovementHelper.canPlaceAgainst(ctx, pos.relative(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { + return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); } } - return true; + return new GoalPlace(pos); } private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { @@ -1081,51 +1106,75 @@ public void logDirect(String message) { super.logDirect(message); } - public static class JankyGoalComposite implements Goal { + public static class GoalAdjacent extends GoalGetToBlock { - private final Goal primary; - private final Goal fallback; + private boolean allowSameLevel; + private BlockPos no; - public JankyGoalComposite(Goal primary, Goal fallback) { - this.primary = primary; - this.fallback = fallback; + public GoalAdjacent(BlockPos pos, BlockPos no, boolean allowSameLevel) { + super(pos); + this.no = no; + this.allowSameLevel = allowSameLevel; } - - @Override public boolean isInGoal(int x, int y, int z) { - return primary.isInGoal(x, y, z) || fallback.isInGoal(x, y, z); + if (x == this.x && y == this.y && z == this.z) { + return false; + } + if (x == no.getX() && y == no.getY() && z == no.getZ()) { + return false; + } + if (!allowSameLevel && y == this.y - 1) { + return false; + } + if (y < this.y - 1) { + return false; + } + return super.isInGoal(x, y, z); } - @Override public double heuristic(int x, int y, int z) { - return primary.heuristic(x, y, z); + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); } + } - @Override - public String toString() { - return "JankyComposite Primary: " + primary + " Fallback: " + fallback; + public static class GoalPlace extends GoalBlock { + + public GoalPlace(BlockPos placeAt) { + super(placeAt.above()); + } + + public double heuristic(int x, int y, int z) { + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); } } @Override - public String displayName0() { - return paused ? "Builder Paused" : "Building " + name; + public void onLostControl() { + if (this.fromAltoclef && this.stateStack.isEmpty()) { + pushState(); + } + incorrectPositions = null; + name = null; + schematic = null; + realSchematic = null; + layer = Baritone.settings().startAtLayer.value; + numRepeats = 0; + paused = false; + observedCompleted = null; + origin = null; + missing = null; + schemSize = null; + fromAltoclef = false; + active = false; + blockBreakHistory.clear(); } - private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? - return new GoalPlace(pos); - } - boolean allowSameLevel = !(ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock); - BlockState current = ctx.world().getBlockState(pos); - for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { - //noinspection ConstantConditions - if (MovementHelper.canPlaceAgainst(ctx, pos.relative(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { - return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); - } - } - return new GoalPlace(pos); + @Override + public String displayName0() { + return paused ? "Builder Paused" : "Building " + name; } private List approxPlaceable(int size) { @@ -1138,13 +1187,12 @@ private List approxPlaceable(int size) { } // BlockState itemState = ((BlockItem) stack.getItem()) - .getBlock() - .getStateForPlacement( - new BlockPlaceContext( - new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { - } - ) - ); + .getBlock() + .getStateForPlacement( + new BlockPlaceContext( + new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {} + ) + ); if (itemState != null) { result.add(itemState); } else { @@ -1155,38 +1203,13 @@ private List approxPlaceable(int size) { return result; } - public static class GoalAdjacent extends GoalGetToBlock { - - private boolean allowSameLevel; - private BlockPos no; - - public GoalAdjacent(BlockPos pos, BlockPos no, boolean allowSameLevel) { - super(pos); - this.no = no; - this.allowSameLevel = allowSameLevel; - } - - public boolean isInGoal(int x, int y, int z) { - if (x == this.x && y == this.y && z == this.z) { - return false; - } - if (x == no.getX() && y == no.getY() && z == no.getZ()) { - return false; - } - if (!allowSameLevel && y == this.y - 1) { - return false; - } - if (y < this.y - 1) { - return false; - } - return super.isInGoal(x, y, z); - } - - public double heuristic(int x, int y, int z) { - // prioritize lower y coordinates - return this.y * 100 + super.heuristic(x, y, z); - } - } + public static final Set> orientationProps = + ImmutableSet.of( + RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, + StairBlock.FACING, StairBlock.HALF, StairBlock.SHAPE, + PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, + TrapDoorBlock.OPEN, TrapDoorBlock.HALF + ); private boolean sameBlockstate(BlockState first, BlockState second) { if (first.getBlock() != second.getBlock()) { @@ -1209,27 +1232,6 @@ private boolean sameBlockstate(BlockState first, BlockState second) { return true; } - @Override - public void onLostControl() { - if (this.fromAltoclef && this.stateStack.isEmpty()) { - pushState(); - } - incorrectPositions = null; - name = null; - schematic = null; - realSchematic = null; - layer = Baritone.settings().startAtLayer.value; - numRepeats = 0; - paused = false; - observedCompleted = null; - origin = null; - missing = null; - schemSize = null; - fromAltoclef = false; - active = false; - blockBreakHistory.clear(); - } - private boolean valid(BlockState current, BlockState desired, boolean itemVerify) { if (desired == null) { return true; @@ -1258,96 +1260,6 @@ private boolean valid(BlockState current, BlockState desired, boolean itemVerify return sameBlockstate(current, desired); } - private void pushState() { - stateStack.clear(); - stateStack.push(this.approxPlaceable); - stateStack.push(this.ticks); - stateStack.push(this.incorrectPositions); - stateStack.push(this.name); - stateStack.push(this.schematic); - stateStack.push(this.realSchematic); - stateStack.push(this.origin); - stateStack.push(this.paused); - stateStack.push(this.layer); - stateStack.push(this.numRepeats); - stateStack.push(this.observedCompleted); - stateStack.push(this.active); - stateStack.push(this.missing); - stateStack.push(this.schemSize); - stateStack.push(this.fromAltoclefFinished); - stateStack.push(this.fromAltoclef); - } - - @Override - public void reset() { - onLostControl(); - } - - @Override - public Map getMissing() { - if (this.sbtMissing == null) this.sbtMissing = new HashMap<>(); - if (this.fromAltoclef && this.missing != null) { - this.sbtMissing.clear(); - this.sbtMissing.putAll(this.missing); - } - return new HashMap<>(this.sbtMissing); - //return (this.fromAltoclef) ? new HashMap<>(this.missing) : null; - } - - @Override - public double priority() { - return super.priority(); - } - - @Override - public String displayName() { - return super.displayName(); - } - - public static class Placement { - - private final int hotbarSelection; - private final BlockPos placeAgainst; - private final Direction side; - private final Rotation rot; - - public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { - this.hotbarSelection = hotbarSelection; - this.placeAgainst = placeAgainst; - this.side = side; - this.rot = rot; - } - } - - public static class GoalBreak extends GoalGetToBlock { - - public GoalBreak(BlockPos pos) { - super(pos); - } - - @Override - public boolean isInGoal(int x, int y, int z) { - // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) - if (y > this.y) { - return false; - } - // but any other adjacent works for breaking, including inside or below - return super.isInGoal(x, y, z); - } - } - - public static class GoalPlace extends GoalBlock { - - public GoalPlace(BlockPos placeAt) { - super(placeAt.above()); - } - - public double heuristic(int x, int y, int z) { - // prioritize lower y coordinates - return this.y * 100 + super.heuristic(x, y, z); - } - } - public class BuilderCalculationContext extends CalculationContext { private final List placeable; @@ -1440,7 +1352,6 @@ public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { } } } - private final class PropertyContainer { private final String propertyKey; private final String propertyValue; @@ -1458,7 +1369,6 @@ public String getPropertyValue() { return this.propertyValue; } } - private final class HistoryInfo { public long counter = 0; public boolean brokenPreviously = false; diff --git a/src/main/java/baritone/process/ExploreProcess.java b/src/main/java/baritone/process/ExploreProcess.java index e1f053e02..23fe7c23a 100644 --- a/src/main/java/baritone/process/ExploreProcess.java +++ b/src/main/java/baritone/process/ExploreProcess.java @@ -32,14 +32,13 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.ChunkPos; - import java.io.InputStreamReader; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; public final class ExploreProcess extends BaritoneProcessHelper implements IExploreProcess { diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 3b9934174..b9308591c 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -40,12 +40,18 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.CactusBlock; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.NetherWartBlock; +import net.minecraft.world.level.block.SugarCaneBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -297,7 +303,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } } for (Entity entity : ctx.entities()) { - if (entity instanceof ItemEntity && entity.isOnGround()) { + if (entity instanceof ItemEntity && entity.onGround()) { ItemEntity ei = (ItemEntity) entity; if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { // +0.1 because of farmland's 0.9375 dummy height lol diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 71f43c6de..b123216a6 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -27,12 +27,11 @@ import baritone.api.process.PathingCommandType; import baritone.api.utils.BetterBlockPos; import baritone.utils.BaritoneProcessHelper; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; - import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; /** * Follow an entity diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 5233b6109..88cc5bfa2 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -154,14 +154,18 @@ public synchronized boolean blacklistClosest() { return !newBlacklist.isEmpty(); } - private Goal createGoal(BlockPos pos) { - if (walkIntoInsteadOfAdjacent(gettingTo.getBlock())) { - return new GoalTwoBlocks(pos); + // this is to signal to MineProcess that we don't care about the allowBreak setting + // it is NOT to be used to actually calculate a path + public class GetToBlockCalculationContext extends CalculationContext { + + public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { + super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); } - if (blockOnTopMustBeRemoved(gettingTo.getBlock()) && MovementHelper.isBlockNormalCube(baritone.bsi.get0(pos.above()))) { // TODO this should be the check for chest openability - return new GoalBlock(pos.above()); + + @Override + public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { + return 1; } - return new GoalGetToBlock(pos); } // safer than direct double comparison from distanceSq @@ -195,18 +199,14 @@ private synchronized void rescan(List known, CalculationContext contex knownLocations = positions; } - // this is to signal to MineProcess that we don't care about the allowBreak setting - // it is NOT to be used to actually calculate a path - public class GetToBlockCalculationContext extends CalculationContext { - - public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { - super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); + private Goal createGoal(BlockPos pos) { + if (walkIntoInsteadOfAdjacent(gettingTo.getBlock())) { + return new GoalTwoBlocks(pos); } - - @Override - public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { - return 1; + if (blockOnTopMustBeRemoved(gettingTo.getBlock()) && MovementHelper.isBlockNormalCube(baritone.bsi.get0(pos.above()))) { // TODO this should be the check for chest openability + return new GoalBlock(pos.above()); } + return new GoalGetToBlock(pos); } private boolean rightClick() { diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 54755df44..9a619d970 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -24,6 +24,7 @@ import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; import baritone.api.utils.*; +import baritone.api.utils.Rotation; import baritone.api.utils.input.Input; import baritone.cache.CachedChunk; import baritone.cache.WorldScanner; @@ -36,10 +37,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.AirBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.BlockState; import java.util.*; @@ -69,94 +67,87 @@ public MineProcess(Baritone baritone) { super(baritone); } - public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { - List locs = new ArrayList<>(); - List untracked = new ArrayList<>(); - int maxTotal = max * filter.blocks().size(); - for (BlockOptionalMeta bom : filter.blocks()) { - Block block = bom.getBlock(); - if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { - BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); + @Override + public boolean isActive() { + return filter != null; + } - // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that - locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( - BlockUtils.blockToString(block), - Baritone.settings().maxCachedWorldScanCount.value, - pf.x, - pf.z, - 2 - )); + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (desiredQuantity > 0) { + int curr = ctx.player().getInventory().items.stream() + .filter(stack -> filter.has(stack)) + .mapToInt(ItemStack::getCount).sum(); + System.out.println("Currently have " + curr + " valid items"); + if (curr >= desiredQuantity) { + logDirect("Have " + curr + " valid items"); + cancel(); + return null; + } + } + if (calcFailed) { + if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { + logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); + } + knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(blacklist::add); + knownOreLocations.removeIf(blacklist::contains); } else { - untracked.add(block); + logDirect("Unable to find any path to " + filter + ", canceling mine"); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", canceling mine", true); + } + cancel(); + return null; } } - - locs = prune(ctx, locs, filter, max, blacklist, dropped); - - if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < maxTotal)) { - locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( - ctx.getBaritone().getPlayerContext(), - filter, - max, - 10, - 32 - )); // maxSearchRadius is NOT sq + // Wait for pause interactions + if (AltoClefSettings.getInstance().isInteractionPaused()) { + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } - - locs.addAll(alreadyKnown); - - return prune(ctx, locs, filter, max, blacklist, dropped); - } - - private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { - dropped.removeIf(drop -> { - for (BlockPos pos : locs2) { - if (pos.distSqr(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ()))/* && MineProcess.plausibleToBreak(ctx, pos)*/) { // TODO maybe drop also has to be supported? no lava below? - return true; - } + updateLoucaSystem(); + int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; + List curr = new ArrayList<>(knownOreLocations); + if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain + CalculationContext context = new CalculationContext(baritone, true); + Baritone.getExecutor().execute(() -> rescan(curr, context)); + } + if (Baritone.settings().legitMine.value) { + if (!addNearby()) { + cancel(); + return null; } - return false; - }); - HashMap countsPerBlock = new HashMap<>(); - List locs = locs2 - .stream() - .distinct() - - // remove any that are within loaded chunks that aren't actually what we want - .filter(pos -> !ctx.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ()) || filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) - - // remove any that are implausible to mine (encased in bedrock, or touching lava) - //.filter(pos -> MineProcess.plausibleToBreak(ctx, pos)) - - .filter(pos -> { - if (Baritone.settings().allowOnlyExposedOres.value) { - return isNextToAir(ctx, pos); - } else { - return true; - } - }) - - .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value + ctx.world.dimensionType().minY()) - - .filter(pos -> !blacklist.contains(pos)) - - .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().blockPosition()::distSqr)) - .collect(Collectors.toList()); - - // Prune out a certain number per block type - locs = locs.stream() - .filter(pos -> { - Block b = ctx.getBlock(pos.getX(), pos.getY(), pos.getZ()); - int count = countsPerBlock.getOrDefault(b, 0); - if (count <= max) { - countsPerBlock.put(b, count + 1); - return true; - } else { - return false; + } + Optional shaft = curr.stream() + .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) + .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) + .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( + .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); + baritone.getInputOverrideHandler().clearAllKeys(); + if (shaft.isPresent() && ctx.player().onGround()) { + BlockPos pos = shaft.get(); + BlockState state = baritone.bsi.get0(pos); + if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { + Optional rot = RotationUtils.reachable(ctx, pos); + if (rot.isPresent() && isSafeToCancel) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); + if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); } - }).collect(Collectors.toList()); - - return locs; + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + } + PathingCommand command = updateGoal(); + if (command == null) { + // none in range + // maybe say something in chat? (ahem impact) + cancel(); + return null; + } + return command; } @@ -187,28 +178,76 @@ public String displayName0() { return "Mine " + filter; } - public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { - int radius = Baritone.settings().allowOnlyExposedOresDistance.value; - for (int dx = -radius; dx <= radius; dx++) { - for (int dy = -radius; dy <= radius; dy++) { - for (int dz = -radius; dz <= radius; dz++) { - if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius - && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { - return true; - } + private PathingCommand updateGoal() { + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return null; + } + + boolean legit = Baritone.settings().legitMine.value; + List locs = knownOreLocations; + if (!locs.isEmpty()) { + CalculationContext context = new CalculationContext(baritone); + List locs2 = prune(context, new ArrayList<>(locs), filter, ORE_LOCATIONS_COUNT, blacklist, droppedItemsScan()); + // can't reassign locs, gotta make a new var locs2, because we use it in a lambda right here, and variables you use in a lambda must be effectively final + Goal goal = new GoalComposite(locs2.stream().map(loc -> coalesce(loc, locs2, context)).toArray(Goal[]::new)); + knownOreLocations = locs2; + return new PathingCommand(goal, legit ? PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH : PathingCommandType.REVALIDATE_GOAL_AND_PATH); + } + // we don't know any ore locations at the moment + if (!legit && !Baritone.settings().exploreForBlocks.value) { + return null; + } + // only when we should explore for blocks or are in legit mode we do this + int y = Baritone.settings().legitMineYLevel.value; + if (branchPoint == null) { + /*if (!baritone.getPathingBehavior().isPathing() && playerFeet().y == y) { + // cool, path is over and we are at desired y + branchPoint = playerFeet(); + branchPointRunaway = null; + } else { + return new GoalYLevel(y); + }*/ + branchPoint = ctx.playerFeet(); + } + // TODO shaft mode, mine 1x1 shafts to either side + // TODO also, see if the GoalRunAway with maintain Y at 11 works even from the surface + if (branchPointRunaway == null) { + branchPointRunaway = new GoalRunAway(1, y, branchPoint) { + @Override + public boolean isInGoal(int x, int y, int z) { + return false; } - } + + @Override + public double heuristic() { + return Double.NEGATIVE_INFINITY; + } + }; } - return false; + return new PathingCommand(branchPointRunaway, PathingCommandType.REVALIDATE_GOAL_AND_PATH); } - public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { - if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { - return false; + private void rescan(List already, CalculationContext context) { + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return; } - - // bedrock above and below makes it implausible, otherwise we're good - return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); + if (Baritone.settings().legitMine.value) { + return; + } + List dropped = droppedItemsScan(); + List locs = searchWorld(context, filter, ORE_LOCATIONS_COUNT, already, blacklist, dropped); + locs.addAll(dropped); + if (locs.isEmpty() && !Baritone.settings().exploreForBlocks.value) { + logDirect("No locations for " + filter + " known, cancelling"); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("No locations for " + filter + " known, cancelling", true); + } + cancel(); + return; + } + knownOreLocations = locs; } private boolean internalMiningGoal(BlockPos pos, CalculationContext context, List locs) { @@ -265,9 +304,24 @@ private Goal coalesce(BlockPos loc, List locs, CalculationContext cont return new GoalBlock(loc.below()); } - @Override - public boolean isActive() { - return filter != null; + private static class GoalThreeBlocks extends GoalTwoBlocks { + + public GoalThreeBlocks(BlockPos pos) { + super(pos); + } + + @Override + public boolean isInGoal(int x, int y, int z) { + return x == this.x && (y == this.y || y == this.y - 1 || y == this.y - 2) && z == this.z; + } + + @Override + public double heuristic(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); + } } public List droppedItemsScan() { @@ -287,76 +341,43 @@ public List droppedItemsScan() { return ret; } - private PathingCommand updateGoal() { - BlockOptionalMetaLookup filter = filterFilter(); - if (filter == null) { - return null; - } + public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { + List locs = new ArrayList<>(); + List untracked = new ArrayList<>(); + int maxTotal = max * filter.blocks().size(); + for (BlockOptionalMeta bom : filter.blocks()) { + Block block = bom.getBlock(); + if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { + BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); - boolean legit = Baritone.settings().legitMine.value; - List locs = knownOreLocations; - if (!locs.isEmpty()) { - CalculationContext context = new CalculationContext(baritone); - List locs2 = prune(context, new ArrayList<>(locs), filter, ORE_LOCATIONS_COUNT, blacklist, droppedItemsScan()); - // can't reassign locs, gotta make a new var locs2, because we use it in a lambda right here, and variables you use in a lambda must be effectively final - Goal goal = new GoalComposite(locs2.stream().map(loc -> coalesce(loc, locs2, context)).toArray(Goal[]::new)); - knownOreLocations = locs2; - return new PathingCommand(goal, legit ? PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH : PathingCommandType.REVALIDATE_GOAL_AND_PATH); - } - // we don't know any ore locations at the moment - if (!legit && !Baritone.settings().exploreForBlocks.value) { - return null; - } - // only when we should explore for blocks or are in legit mode we do this - int y = Baritone.settings().legitMineYLevel.value; - if (branchPoint == null) { - /*if (!baritone.getPathingBehavior().isPathing() && playerFeet().y == y) { - // cool, path is over and we are at desired y - branchPoint = playerFeet(); - branchPointRunaway = null; + // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that + locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( + BlockUtils.blockToString(block), + Baritone.settings().maxCachedWorldScanCount.value, + pf.x, + pf.z, + 2 + )); } else { - return new GoalYLevel(y); - }*/ - branchPoint = ctx.playerFeet(); + untracked.add(block); + } } - // TODO shaft mode, mine 1x1 shafts to either side - // TODO also, see if the GoalRunAway with maintain Y at 11 works even from the surface - if (branchPointRunaway == null) { - branchPointRunaway = new GoalRunAway(1, y, branchPoint) { - @Override - public boolean isInGoal(int x, int y, int z) { - return false; - } - @Override - public double heuristic() { - return Double.NEGATIVE_INFINITY; - } - }; - } - return new PathingCommand(branchPointRunaway, PathingCommandType.REVALIDATE_GOAL_AND_PATH); - } + locs = prune(ctx, locs, filter, max, blacklist, dropped); - private void rescan(List already, CalculationContext context) { - BlockOptionalMetaLookup filter = filterFilter(); - if (filter == null) { - return; - } - if (Baritone.settings().legitMine.value) { - return; - } - List dropped = droppedItemsScan(); - List locs = searchWorld(context, filter, ORE_LOCATIONS_COUNT, already, blacklist, dropped); - locs.addAll(dropped); - if (locs.isEmpty() && !Baritone.settings().exploreForBlocks.value) { - logDirect("No locations for " + filter + " known, cancelling"); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("No locations for " + filter + " known, cancelling", true); - } - cancel(); - return; + if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < maxTotal)) { + locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( + ctx.getBaritone().getPlayerContext(), + filter, + max, + 10, + 32 + )); // maxSearchRadius is NOT sq } - knownOreLocations = locs; + + locs.addAll(alreadyKnown); + + return prune(ctx, locs, filter, max, blacklist, dropped); } private boolean addNearby() { @@ -391,82 +412,77 @@ private boolean addNearby() { return true; } - @Override - public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - if (desiredQuantity > 0) { - int curr = ctx.player().getInventory().items.stream() - .filter(stack -> filter.has(stack)) - .mapToInt(ItemStack::getCount).sum(); - System.out.println("Currently have " + curr + " valid items"); - if (curr >= desiredQuantity) { - logDirect("Have " + curr + " valid items"); - cancel(); - return null; - } - } - if (calcFailed) { - if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { - logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); - } - knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(blacklist::add); - knownOreLocations.removeIf(blacklist::contains); - } else { - logDirect("Unable to find any path to " + filter + ", canceling mine"); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("Unable to find any path to " + filter + ", canceling mine", true); + private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { + dropped.removeIf(drop -> { + for (BlockPos pos : locs2) { + if (pos.distSqr(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) && MineProcess.plausibleToBreak(ctx, pos)) { // TODO maybe drop also has to be supported? no lava below? + return true; } - cancel(); - return null; - } - } - // Wait for pause interactions - if (AltoClefSettings.getInstance().isInteractionPaused()) { - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); - } - updateLoucaSystem(); - int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; - List curr = new ArrayList<>(knownOreLocations); - if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain - CalculationContext context = new CalculationContext(baritone, true); - Baritone.getExecutor().execute(() -> rescan(curr, context)); - } - if (Baritone.settings().legitMine.value) { - if (!addNearby()) { - cancel(); - return null; } + return false; + }); + List locs = locs2 + .stream() + .distinct() + + // remove any that are within loaded chunks that aren't actually what we want + .filter(pos -> !ctx.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ()) || filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) + + // remove any that are implausible to mine (encased in bedrock, or touching lava) + .filter(pos -> MineProcess.plausibleToBreak(ctx, pos)) + + .filter(pos -> { + if (Baritone.settings().allowOnlyExposedOres.value) { + return isNextToAir(ctx, pos); + } else { + return true; + } + }) + + .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value + ctx.world.dimensionType().minY()) + + .filter(pos -> !blacklist.contains(pos)) + + .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().blockPosition()::distSqr)) + .collect(Collectors.toList()); + + if (locs.size() > max) { + return locs.subList(0, max); } - Optional shaft = curr.stream() - .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) - .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) - .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( - .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); - baritone.getInputOverrideHandler().clearAllKeys(); - if (shaft.isPresent() && ctx.player().isOnGround()) { - BlockPos pos = shaft.get(); - BlockState state = baritone.bsi.get0(pos); - if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { - Optional rot = RotationUtils.reachable(ctx, pos); - if (rot.isPresent() && isSafeToCancel) { - baritone.getLookBehavior().updateTarget(rot.get(), true); - MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); - if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { - baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); + return locs; + } + + public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { + int radius = Baritone.settings().allowOnlyExposedOresDistance.value; + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius + && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { + return true; } - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } } } - PathingCommand command = updateGoal(); - if (command == null) { - // none in range - // maybe say something in chat? (ahem impact) - cancel(); - return null; + return false; + } + + + public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { + if (ctx.get(pos).getBlock() instanceof EndPortalFrameBlock + || ctx.get(pos).getBlock() == Blocks.LAVA){ + return true; } - return command; + if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { + return false; + } + // bedrock above and below makes it implausible, otherwise we're good + return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); + } + + @Override + public void mineByName(int quantity, String... blocks) { + mine(quantity, new BlockOptionalMetaLookup(blocks)); } @Override @@ -486,11 +502,6 @@ public void mine(int quantity, BlockOptionalMetaLookup filter) { } } - @Override - public void mineByName(int quantity, String... blocks) { - mine(quantity, new BlockOptionalMetaLookup(blocks)); - } - private BlockOptionalMetaLookup filterFilter() { if (this.filter == null) { return null; @@ -508,24 +519,4 @@ private BlockOptionalMetaLookup filterFilter() { } return filter; } - - private static class GoalThreeBlocks extends GoalTwoBlocks { - - public GoalThreeBlocks(BlockPos pos) { - super(pos); - } - - @Override - public boolean isInGoal(int x, int y, int z) { - return x == this.x && (y == this.y || y == this.y - 1 || y == this.y - 2) && z == this.z; - } - - @Override - public double heuristic(int x, int y, int z) { - int xDiff = x - this.x; - int yDiff = y - this.y; - int zDiff = z - this.z; - return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); - } - } } diff --git a/src/main/java/baritone/selection/SelectionManager.java b/src/main/java/baritone/selection/SelectionManager.java index 05d45ee0e..150bd9d17 100644 --- a/src/main/java/baritone/selection/SelectionManager.java +++ b/src/main/java/baritone/selection/SelectionManager.java @@ -4,10 +4,9 @@ import baritone.api.selection.ISelection; import baritone.api.selection.ISelectionManager; import baritone.api.utils.BetterBlockPos; -import net.minecraft.core.Direction; - import java.util.LinkedList; import java.util.ListIterator; +import net.minecraft.core.Direction; public class SelectionManager implements ISelectionManager { diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 6c3a2df81..3f018ff89 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -43,7 +43,7 @@ public class BlockStateInterface { private final ClientChunkCache provider; - private static final BlockState AIR = Blocks.AIR.defaultBlockState(); + private final WorldData worldData; protected final Level world; public final BlockPos.MutableBlockPos isPassableBlockPos; public final BlockGetter access; @@ -51,9 +51,11 @@ public class BlockStateInterface { private LevelChunk prev = null; private CachedRegion prevCached = null; - private final WorldData worldData; + private final boolean useTheRealWorld; + private static final BlockState AIR = Blocks.AIR.defaultBlockState(); + public BlockStateInterface(IPlayerContext ctx) { this(ctx, false); } @@ -79,13 +81,8 @@ public BlockStateInterface(Level world, WorldData worldData, boolean copyLoadedC this.access = new BlockStateInterfaceAccessWrapper(this); } - // get the block at x,y,z from this chunk WITHOUT creating a single blockpos object - public static BlockState getFromChunk(LevelChunk chunk, int x, int y, int z) { - LevelChunkSection section = chunk.getSections()[y >> 4]; - if (section.hasOnlyAir()) { - return AIR; - } - return section.getBlockState(x & 15, y & 15, z & 15); + public boolean worldContainsLoadedChunk(int blockX, int blockZ) { + return provider.hasChunk(blockX >> 4, blockZ >> 4); } public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be called from the pathing thread because the pathing thread doesn't make a single blockpos pog @@ -172,7 +169,12 @@ public boolean isLoaded(int x, int z) { return prevRegion.isCached(x & 511, z & 511); } - public boolean worldContainsLoadedChunk(int blockX, int blockZ) { - return provider.hasChunk(blockX >> 4, blockZ >> 4); + // get the block at x,y,z from this chunk WITHOUT creating a single blockpos object + public static BlockState getFromChunk(LevelChunk chunk, int x, int y, int z) { + LevelChunkSection section = chunk.getSections()[y >> 4]; + if (section.hasOnlyAir()) { + return AIR; + } + return section.getBlockState(x & 15, y & 15, z & 15); } } diff --git a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java index 126e457c4..19b04b454 100644 --- a/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java +++ b/src/main/java/baritone/utils/BlockStateInterfaceAccessWrapper.java @@ -17,14 +17,13 @@ package baritone.utils; +import javax.annotation.Nullable; import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; -import javax.annotation.Nullable; - /** * @author Brady * @since 11/5/2019 diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index d78707a0c..6b3f8f520 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -25,13 +25,14 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.ClickEvent; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.ClipContext; import net.minecraft.world.phys.AABB; @@ -64,7 +65,7 @@ public boolean isPauseScreen() { } @Override - public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) { + public void render(GuiGraphics stack, int mouseX, int mouseY, float partialTicks) { double mx = mc.mouseHandler.xpos(); double my = mc.mouseHandler.ypos(); @@ -78,7 +79,7 @@ public void render(PoseStack stack, int mouseX, int mouseY, float partialTicks) /// Vec3 viewerPos = new Vec3(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); LocalPlayer player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); - HitResult result = player.level.clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); + HitResult result = player.level().clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); if (result != null && result.getType() == HitResult.Type.BLOCK) { currentMouseOver = ((BlockHitResult) result).getBlockPos(); System.out.println("currentMouseOver = " + currentMouseOver); @@ -165,7 +166,7 @@ private Vec3 toWorld(double x, double y, double z) { return null; } - pos.mul(1 / pos.w()); + pos.mul(1/pos.w()); return new Vec3(pos.x(), pos.y(), pos.z()); } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 2950bf9bd..cfd38a393 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -23,12 +23,12 @@ import baritone.utils.accessor.IEntityRenderManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; +import java.awt.*; + import net.minecraft.client.renderer.GameRenderer; import net.minecraft.world.phys.AABB; import org.joml.Matrix4f; -import java.awt.*; - import static org.lwjgl.opengl.GL11.*; public interface IRenderer { @@ -38,7 +38,7 @@ public interface IRenderer { IEntityRenderManager renderManager = (IEntityRenderManager) Helper.mc.getEntityRenderDispatcher(); Settings settings = BaritoneAPI.getSettings(); - float[] color = new float[]{1.0F, 1.0F, 1.0F, 255.0F}; + float[] color = new float[] {1.0F, 1.0F, 1.0F, 255.0F}; static void glColor(Color color, float alpha) { float[] colorComponents = color.getColorComponents(null); diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index d97012a18..034337129 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -26,7 +26,6 @@ import baritone.behavior.Behavior; import net.minecraft.client.Minecraft; import net.minecraft.client.player.KeyboardInput; - import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 7de02a08e..438b1d092 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -30,6 +30,10 @@ import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexFormat; +import java.awt.*; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import net.minecraft.client.renderer.blockentity.BeaconRenderer; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; @@ -42,11 +46,6 @@ import net.minecraft.world.phys.shapes.VoxelShape; import org.joml.Matrix4f; -import java.awt.*; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - import static org.lwjgl.opengl.GL11.*; /** @@ -58,8 +57,7 @@ public final class PathRenderer implements IRenderer, Helper { private static final ResourceLocation TEXTURE_BEACON_BEAM = new ResourceLocation("textures/entity/beacon_beam.png"); - private PathRenderer() { - } + private PathRenderer() {} public static double posX() { return renderManager.renderPosX(); @@ -90,7 +88,7 @@ public static void render(RenderEvent event, PathingBehavior behavior) { Entity renderView = Helper.mc.getCameraEntity(); - if (renderView.level != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { + if (renderView.level() != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { System.out.println("I have no idea what's going on"); System.out.println("The primary baritone is in a different world than the render view entity"); System.out.println("Not rendering the path"); @@ -211,7 +209,7 @@ public static void drawManySelectionBoxes(PoseStack stack, Entity player, Collec positions.forEach(pos -> { BlockState state = bsi.get0(pos); - VoxelShape shape = state.getShape(player.level, pos); + VoxelShape shape = state.getShape(player.level(), pos); AABB toDraw = shape.isEmpty() ? Shapes.block().bounds() : shape.bounds(); toDraw = toDraw.move(pos); IRenderer.drawAABB(stack, toDraw, .002D); @@ -274,7 +272,7 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, TEXTURE_BEACON_BEAM, settings.renderGoalAnimated.value ? partialTicks : 0, 1.0F, - settings.renderGoalAnimated.value ? player.level.getGameTime() : 0, + settings.renderGoalAnimated.value ? player.level().getGameTime() : 0, 0, 256, color.getColorComponents(null), diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index 637d515f8..d841cf3a1 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -27,9 +27,8 @@ import baritone.api.process.PathingCommandType; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import net.minecraft.core.BlockPos; - import java.util.*; +import net.minecraft.core.BlockPos; public class PathingControlManager implements IPathingControlManager { diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 3b480d23a..ab1eeebb0 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -93,36 +93,8 @@ private int getMaterialCost(ItemStack itemStack) { } } - /** - * Calculates how long would it take to mine the specified block given the best tool - * in this toolset is used. A negative value is returned if the specified block is unbreakable. - * - * @param item the item to mine it with - * @param state the blockstate to be mined - * @return how long it would take in ticks - */ - public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { - float hardness = state.getDestroySpeed(null, null); - if (hardness < 0) { - return -1; - } - - float speed = item.getDestroySpeed(state); - if (speed > 1) { - int effLevel = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_EFFICIENCY, item); - if (effLevel > 0 && !item.isEmpty()) { - speed += effLevel * effLevel + 1; - } - } - if (AltoClefSettings.getInstance().shouldForceUseTool(state, item)) { - return Double.POSITIVE_INFINITY; - } - speed /= hardness; - if (!state.requiresCorrectToolForDrops() || (!item.isEmpty() && item.isCorrectToolForDrops(state))) { - return speed / 30; - } else { - return speed / 100; - } + public boolean hasSilkTouch(ItemStack stack) { + return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; } /** @@ -197,8 +169,36 @@ private double avoidanceMultiplier(Block b) { return Baritone.settings().blocksToAvoidBreaking.value.contains(b) ? Baritone.settings().avoidBreakingMultiplier.value : 1; } - public boolean hasSilkTouch(ItemStack stack) { - return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; + /** + * Calculates how long would it take to mine the specified block given the best tool + * in this toolset is used. A negative value is returned if the specified block is unbreakable. + * + * @param item the item to mine it with + * @param state the blockstate to be mined + * @return how long it would take in ticks + */ + public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { + float hardness = state.getDestroySpeed(null, null); + if (hardness < 0) { + return -1; + } + + float speed = item.getDestroySpeed(state); + if (speed > 1) { + int effLevel = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_EFFICIENCY, item); + if (effLevel > 0 && !item.isEmpty()) { + speed += effLevel * effLevel + 1; + } + } + if (AltoClefSettings.getInstance().shouldForceUseTool(state, item)) { + return Double.POSITIVE_INFINITY; + } + speed /= hardness; + if (!state.requiresCorrectToolForDrops() || (!item.isEmpty() && item.isCorrectToolForDrops(state))) { + return speed / 30; + } else { + return speed / 100; + } } /** diff --git a/src/main/java/baritone/utils/accessor/IChunkArray.java b/src/main/java/baritone/utils/accessor/IChunkArray.java index dc627bd34..4c76b44fe 100644 --- a/src/main/java/baritone/utils/accessor/IChunkArray.java +++ b/src/main/java/baritone/utils/accessor/IChunkArray.java @@ -17,9 +17,8 @@ package baritone.utils.accessor; -import net.minecraft.world.level.chunk.LevelChunk; - import java.util.concurrent.atomic.AtomicReferenceArray; +import net.minecraft.world.level.chunk.LevelChunk; public interface IChunkArray { void copyFrom(IChunkArray other); diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index 61229cce4..0b4b95843 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -21,16 +21,15 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.IPlayerContext; import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.monster.EnderMan; import net.minecraft.world.entity.monster.Spider; import net.minecraft.world.entity.monster.ZombifiedPiglin; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - public class Avoidance { private final int centerX; diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index 70cc5a014..4aee8c567 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -20,6 +20,7 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerController; import baritone.utils.accessor.IPlayerControllerMP; +import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index 48c35b80c..4f71aea64 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -19,11 +19,10 @@ import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.MaskSchematic; -import net.minecraft.world.level.block.AirBlock; -import net.minecraft.world.level.block.state.BlockState; - import java.util.OptionalInt; import java.util.function.Predicate; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.state.BlockState; public class MapArtSchematic extends MaskSchematic { diff --git a/src/main/java/baritone/utils/schematic/StaticSchematic.java b/src/main/java/baritone/utils/schematic/StaticSchematic.java index 61618fbe1..5a110281b 100644 --- a/src/main/java/baritone/utils/schematic/StaticSchematic.java +++ b/src/main/java/baritone/utils/schematic/StaticSchematic.java @@ -19,9 +19,8 @@ import baritone.api.schematic.AbstractSchematic; import baritone.api.schematic.IStaticSchematic; -import net.minecraft.world.level.block.state.BlockState; - import java.util.List; +import net.minecraft.world.level.block.state.BlockState; /** * Default implementation of {@link IStaticSchematic} diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index ca3dad029..17fafc821 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -22,13 +22,13 @@ import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.format.defaults.MCEditSchematic; import baritone.utils.schematic.format.defaults.SpongeSchematic; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtIo; import org.apache.commons.io.FilenameUtils; import java.io.File; import java.io.IOException; import java.io.InputStream; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtIo; /** * Default implementations of {@link ISchematicFormat} diff --git a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java index 98203dbca..3018021a5 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java @@ -18,6 +18,7 @@ package baritone.utils.schematic.format.defaults; import baritone.utils.schematic.StaticSchematic; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; diff --git a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java index c53ee781a..12163cbff 100644 --- a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java +++ b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java @@ -20,6 +20,12 @@ import baritone.utils.schematic.StaticSchematic; import baritone.utils.type.VarInt; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; @@ -27,12 +33,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * @author Brady * @since 12/27/2019 @@ -105,13 +105,19 @@ private SerializedBlockState(ResourceLocation resourceLocation, Map> BlockState setPropertyValue(BlockState state, Property property, String value) { - Optional parsed = property.getValue(value); - if (parsed.isPresent()) { - return state.setValue(property, parsed.get()); - } else { - throw new IllegalArgumentException("Invalid value for property " + property); + private BlockState deserialize() { + if (this.blockState == null) { + Block block = BuiltInRegistries.BLOCK.get(this.resourceLocation); + this.blockState = block.defaultBlockState(); + + this.properties.keySet().stream().sorted(String::compareTo).forEachOrdered(key -> { + Property property = block.getStateDefinition().getProperty(key); + if (property != null) { + this.blockState = setPropertyValue(this.blockState, property, this.properties.get(key)); + } + }); } + return this.blockState; } private static SerializedBlockState getFromString(String s) { @@ -140,19 +146,13 @@ private static SerializedBlockState getFromString(String s) { } } - private BlockState deserialize() { - if (this.blockState == null) { - Block block = BuiltInRegistries.BLOCK.get(this.resourceLocation); - this.blockState = block.defaultBlockState(); - - this.properties.keySet().stream().sorted(String::compareTo).forEachOrdered(key -> { - Property property = block.getStateDefinition().getProperty(key); - if (property != null) { - this.blockState = setPropertyValue(this.blockState, property, this.properties.get(key)); - } - }); + private static > BlockState setPropertyValue(BlockState state, Property property, String value) { + Optional parsed = property.getValue(value); + if (parsed.isPresent()) { + return state.setValue(property, parsed.get()); + } else { + throw new IllegalArgumentException("Invalid value for property " + property); } - return this.blockState; } } } diff --git a/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java b/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java index 76319c33e..7905c74aa 100644 --- a/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java +++ b/src/main/java/baritone/utils/schematic/schematica/SchematicAdapter.java @@ -19,11 +19,10 @@ import baritone.api.schematic.IStaticSchematic; import com.github.lunatrius.schematica.client.world.SchematicWorld; +import java.util.List; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; -import java.util.List; - public final class SchematicAdapter implements IStaticSchematic { private final SchematicWorld schematic; diff --git a/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java b/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java index a13714a7d..35b11c8e1 100644 --- a/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java @@ -22,7 +22,6 @@ import com.github.lunatrius.schematica.proxy.ClientProxy; import net.minecraft.core.BlockPos; import net.minecraft.util.Tuple; - import java.util.Optional; public enum SchematicaHelper { diff --git a/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java b/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java index e3304d030..eb3c034e8 100644 --- a/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java +++ b/src/schematica_api/java/com/github/lunatrius/schematica/proxy/CommonProxy.java @@ -17,5 +17,4 @@ package com.github.lunatrius.schematica.proxy; -public abstract class CommonProxy { -} +public abstract class CommonProxy {} diff --git a/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java b/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java index 2f3521297..64a6a6fb7 100644 --- a/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java +++ b/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java @@ -18,12 +18,12 @@ package baritone.pathing.goals; import baritone.api.pathing.goals.GoalGetToBlock; -import net.minecraft.core.BlockPos; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import net.minecraft.core.BlockPos; import static org.junit.Assert.assertTrue; diff --git a/tweaker/build.gradle b/tweaker/build.gradle index ce623af6c..a437e735a 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -47,7 +47,6 @@ dependencies { implementation "org.ow2.asm:asm-util:9.3" implementation "org.ow2.asm:asm-analysis:9.3" - implementation 'com.github.ImpactDevelopment:SimpleTweaker:1.2' implementation('net.minecraft:launchwrapper:of-2.3') { exclude module: 'lwjgl' @@ -92,27 +91,4 @@ jar { 'Implementation-Version': version, ) } -} - -task proguard(type: ProguardTask) { - url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - extract 'proguard-7.2.1/lib/proguard.jar' -} - -task createDist(type: CreateDistTask, dependsOn: proguard) - -build.finalizedBy(createDist) - -publishing { - publications { - mavenCommon(MavenPublication) { - artifactId = rootProject.archives_base_name - from components.java - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - } } \ No newline at end of file From 15a38c4871caac7329da9e90869133cebccdeaaf Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 13 Aug 2023 21:58:07 -0400 Subject: [PATCH 878/935] add setting that makes unknown chunks air --- build.gradle | 4 ++-- src/api/java/baritone/api/Settings.java | 6 ++++++ .../baritone/process/elytra/NetherPathfinderContext.java | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index accb7ca54..0c8e58364 100755 --- a/build.gradle +++ b/build.gradle @@ -175,8 +175,8 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.41') - implementation 'dev.babbaj:nether-pathfinder:0.41' + launchImplementation('dev.babbaj:nether-pathfinder:1.2') + implementation 'dev.babbaj:nether-pathfinder:1.2' testImplementation 'junit:junit:4.12' } diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index aeaa55542..076f8f395 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1404,6 +1404,12 @@ public final class Settings { */ public final Setting elytraNetherSeed = new Setting<>(146008555100680L); + /** + * Whether nether-pathfinder should generate terrain based on {@link #elytraNetherSeed}. + * If false all chunks that haven't been loaded are assumed to be air. + */ + public final Setting elytraPredictTerrain = new Setting<>(true); + /** * Automatically swap the current elytra with a new one when the durability gets too low */ diff --git a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java index 991457d10..93e0587f0 100644 --- a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java @@ -17,6 +17,7 @@ package baritone.process.elytra; +import baritone.Baritone; import baritone.api.event.events.BlockChangeEvent; import baritone.utils.accessor.IBitArray; import baritone.utils.accessor.IBlockStateContainer; @@ -103,7 +104,9 @@ public CompletableFuture pathFindAsync(final BlockPos src, final Bl src.getX(), src.getY(), src.getZ(), dst.getX(), dst.getY(), dst.getZ(), true, - 10000 + false, + 10000, + !Baritone.settings().elytraPredictTerrain.value ); if (segment == null) { throw new PathCalculationException("Path calculation failed"); From 4e3a7abac93e7fec43824ff9d1b88b4f4488d27e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 13 Aug 2023 19:29:19 -0700 Subject: [PATCH 879/935] recompute on change --- src/main/java/baritone/process/ElytraProcess.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 23ca7647f..a93980cbd 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -61,6 +61,7 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro private boolean reachedGoal; // this basically just prevents potential notification spam private Goal goal; private ElytraBehavior behavior; + private boolean predictingTerrain; private ElytraProcess(Baritone baritone) { super(baritone); @@ -97,6 +98,11 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { logDirect("Nether seed changed, recalculating path"); this.resetState(); } + if (predictingTerrain != Baritone.settings().elytraPredictTerrain.value) { + logDirect("elytraPredictTerrain setting changed, recalculating path"); + predictingTerrain = Baritone.settings().elytraPredictTerrain.value; + this.resetState(); + } this.behavior.onTick(); @@ -300,6 +306,7 @@ private void pathTo0(BlockPos destination, boolean appendDestination) { return; } this.onLostControl(); + this.predictingTerrain = Baritone.settings().elytraPredictTerrain.value; this.behavior = new ElytraBehavior(this.baritone, this, destination, appendDestination); if (ctx.world() != null) { this.behavior.repackChunks(); From 36534eeb2d95185d1461d7e03f1ecb3d2ddbf24a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 13 Aug 2023 22:13:33 -0700 Subject: [PATCH 880/935] vastly more helpful --- .../command/defaults/ElytraCommand.java | 112 +++++++++++++++--- 1 file changed, 98 insertions(+), 14 deletions(-) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index a0d39d850..7064deb5c 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -27,14 +27,22 @@ import baritone.api.pathing.goals.Goal; import baritone.api.process.ICustomGoalProcess; import baritone.api.process.IElytraProcess; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + public class ElytraCommand extends Command { public ElytraCommand(IBaritone baritone) { @@ -54,10 +62,13 @@ public void execute(String label, IArgConsumer args) throws CommandException { } if (!args.hasAny()) { - if (!Baritone.settings().elytraTermsAccepted.value && !ctx.player().isElytraFlying()) { + if (Baritone.settings().elytraTermsAccepted.value) { + if (detectOn2b2t()) { + warn2b2t(); + } + } else { // only gatekeep if they are standing on the ground, don't mess them up in midair lol gatekeep(); - return; } Goal iGoal = customGoalProcess.mostRecentGoal(); if (iGoal == null) { @@ -92,32 +103,105 @@ public void execute(String label, IArgConsumer args) throws CommandException { } } + private void warn2b2t() { + if (!Baritone.settings().elytraPredictTerrain.value) { + if (ctx.playerFeet().distanceSq(0, 0, 0) > 2000 * 2000) { + TextComponentString clippy = new TextComponentString(""); + clippy.appendText("It looks like you're on 2b2t and more than 2000 blocks from spawn. It is recommended that you "); + TextComponentString predictTerrain = new TextComponentString("enable elytraPredictTerrain"); + predictTerrain.getStyle().setUnderlined(true).setBold(true).setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString(Baritone.settings().prefix.value + "set elytraPredictTerrain true"))).setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "set elytraPredictTerrain true")); + clippy.appendSibling(predictTerrain); + logDirect(clippy); + } + } else { + long seed = Baritone.settings().elytraNetherSeed.value; + if (seed != NEW_2B2T_SEED && seed != OLD_2B2T_SEED) { + logDirect(new TextComponentString("It looks like you're on 2b2t, but elytraNetherSeed is incorrect.")); // match color + logDirect(suggest2b2tSeeds()); + } + } + } + + private ITextComponent suggest2b2tSeeds() { + TextComponentString clippy = new TextComponentString(""); + clippy.appendText("Within a few hundred blocks of spawn/axis/highways/etc, the terrain is too fragmented to be predictable. Baritone Elytra will still work, just with backtracking. "); + clippy.appendText("However, once you get more than a few thousand blocks out, you should try "); + TextComponentString olderSeed = new TextComponentString("the older seed (click here)"); + olderSeed.getStyle().setUnderlined(true).setBold(true).setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString(Baritone.settings().prefix.value + "set elytraNetherSeed " + OLD_2B2T_SEED))).setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "set elytraNetherSeed " + OLD_2B2T_SEED)); + clippy.appendSibling(olderSeed); + clippy.appendText(". Once you're further out into newer terrain generation (this includes everything 1.12 and upwards), you should try "); + TextComponentString newerSeed = new TextComponentString("the newer seed (click here)"); + newerSeed.getStyle().setUnderlined(true).setBold(true).setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString(Baritone.settings().prefix.value + "set elytraNetherSeed " + NEW_2B2T_SEED))).setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "set elytraNetherSeed " + NEW_2B2T_SEED)); + clippy.appendSibling(newerSeed); + clippy.appendText(". "); + return clippy; + } + private void gatekeep() { TextComponentString gatekeep = new TextComponentString(""); - gatekeep.appendText("Once you've read the below, and entered the seed, run "); - TextComponentString cmd = new TextComponentString(Baritone.settings().prefix.value + "set elytraTermsAccepted true"); - cmd.getStyle().setColor(TextFormatting.GRAY); - gatekeep.appendSibling(cmd); - gatekeep.appendText(" and then try again.\n"); + gatekeep.appendText("To disable this message, enable the setting elytraTermsAccepted\n"); gatekeep.appendText("Baritone Elytra is an experimental feature. It is only intended for long distance travel in the Nether using fireworks for vanilla boost. It will not work with any other mods (\"hacks\") for non-vanilla boost. "); - TextComponentString gatekeep2 = new TextComponentString("If you want Baritone to attempt to take off from the ground for you, you can enable the elytraAutoJump setting. This may not be advisable on laggy servers. "); + TextComponentString gatekeep2 = new TextComponentString("If you want Baritone to attempt to take off from the ground for you, you can enable the elytraAutoJump setting (not advisable on laggy servers!). "); gatekeep2.getStyle().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString(Baritone.settings().prefix.value + "set elytraAutoJump true"))); gatekeep.appendSibling(gatekeep2); - TextComponentString gatekeep3 = new TextComponentString("If you want Baritone to go slower and use less fireworks, enable the elytraConserveFireworks setting and/or decrease the elytraFireworkSpeed setting. "); + TextComponentString gatekeep3 = new TextComponentString("If you want Baritone to go slower, enable the elytraConserveFireworks setting and/or decrease the elytraFireworkSpeed setting. "); gatekeep3.getStyle().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString(Baritone.settings().prefix.value + "set elytraConserveFireworks true\n" + Baritone.settings().prefix.value + "set elytraFireworkSpeed 0.6\n(the 0.6 number is just an example, tweak to your liking)"))); gatekeep.appendSibling(gatekeep3); TextComponentString gatekeep4 = new TextComponentString("Baritone Elytra "); - TextComponentString red = new TextComponentString("needs to know the seed"); + TextComponentString red = new TextComponentString("wants to know the seed"); red.getStyle().setColor(TextFormatting.RED).setUnderlined(true).setBold(true); gatekeep4.appendSibling(red); - gatekeep4.appendText(" of the world you are in. If it doesn't have the correct seed, it will constantly frustratingly recalculate and backtrack. It uses the seed to generate terrain far beyond what you can see, since terrain obstacles in the Nether can be much larger than your render distance. "); + gatekeep4.appendText(" of the world you are in. If it doesn't have the correct seed, it will frequently backtrack. It uses the seed to generate terrain far beyond what you can see, since terrain obstacles in the Nether can be much larger than your render distance. "); gatekeep.appendSibling(gatekeep4); - TextComponentString gatekeep5 = new TextComponentString("If you're on 2b2t, no need to change anything, since its seed is the default. Otherwise, set it with: " + Baritone.settings().prefix.value + "set elytraNetherSeed seedgoeshere"); - gatekeep5.getStyle().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString("2b2t's nether seed is 146008555100680, so for example you would run\n" + Baritone.settings().prefix.value + "set elytraNetherSeed 146008555100680\n\nAlso, if you're on 2b2t, note that the Nether near spawn is old terrain gen, so you'll see recalculating and backtracking there.\nIt'll only work well further away from spawn/highways."))); - gatekeep.appendSibling(gatekeep5); + gatekeep.appendText("\n"); + if (detectOn2b2t()) { + TextComponentString gatekeep5 = new TextComponentString("It looks like you're on 2b2t, so elytraPredictTerrain is defaulting to true. "); + gatekeep5.appendSibling(suggest2b2tSeeds()); + if (Baritone.settings().elytraNetherSeed.value == NEW_2B2T_SEED) { + gatekeep5.appendText("You are using the newer seed. "); + } else if (Baritone.settings().elytraNetherSeed.value == OLD_2B2T_SEED) { + gatekeep5.appendText("You are using the older seed. "); + } else { + gatekeep5.appendText("Defaulting to the newer seed. "); + Baritone.settings().elytraNetherSeed.value = NEW_2B2T_SEED; + } + gatekeep.appendSibling(gatekeep5); + } else { + if (Baritone.settings().elytraNetherSeed.value == NEW_2B2T_SEED) { + TextComponentString gatekeep5 = new TextComponentString("Baritone doesn't know the seed of your world. Set it with: " + Baritone.settings().prefix.value + "set elytraNetherSeed seedgoeshere\n"); + gatekeep5.appendText("For the time being, elytraPredictTerrain is defaulting to false since the seed is unknown."); + gatekeep.appendSibling(gatekeep5); + Baritone.settings().elytraPredictTerrain.value = false; + } else { + if (Baritone.settings().elytraPredictTerrain.value) { + TextComponentString gatekeep5 = new TextComponentString("Baritone Elytra is predicting terrain assuming that " + Baritone.settings().elytraNetherSeed.value + " is the correct seed. Change that with " + Baritone.settings().prefix.value + "set elytraNetherSeed seedgoeshere, or disable it with " + Baritone.settings().prefix.value + "set elytraPredictTerrain false"); + gatekeep.appendSibling(gatekeep5); + } else { + TextComponentString gatekeep5 = new TextComponentString("Baritone Elytra is not predicting terrain. If you don't know the seed, this is the correct thing to do. If you do know the seed, input it with " + Baritone.settings().prefix.value + "set elytraNetherSeed seedgoeshere, and then enable it with " + Baritone.settings().prefix.value + "set elytraPredictTerrain true"); + gatekeep.appendSibling(gatekeep5); + } + } + } logDirect(gatekeep); } + private boolean detect2b2tPlayers() { + // if any cached worlds are 2b2t worlds + try (Stream stream = Files.list(((Baritone) baritone).getDirectory())) { + return stream.anyMatch(path -> path.getFileName().toString().toLowerCase().contains("2b2t")); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private boolean detectOn2b2t() { + ServerData data = ctx.minecraft().getCurrentServerData(); + return data != null && data.serverIP.toLowerCase().contains("2b2t"); + } + + private static final long OLD_2B2T_SEED = -4172144997902289642L; + private static final long NEW_2B2T_SEED = 146008555100680L; + @Override public Stream tabComplete(String label, IArgConsumer args) throws CommandException { TabCompleteHelper helper = new TabCompleteHelper(); From d67a3d8bbc0b4bf4aae376e8de6003de02953170 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 13 Aug 2023 22:37:47 -0700 Subject: [PATCH 881/935] much better safety --- src/api/java/baritone/api/Settings.java | 10 +++++ .../java/baritone/process/ElytraProcess.java | 43 +++++++++++++++++-- .../process/elytra/ElytraBehavior.java | 2 +- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 076f8f395..44701b798 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1420,6 +1420,16 @@ public final class Settings { */ public final Setting elytraMinimumDurability = new Setting<>(5); + /** + * The minimum fireworks before landing early for safety + */ + public final Setting elytraMinFireworksBeforeLanding = new Setting<>(5); + + /** + * Automatically land when elytra is almost out of durability, or almost out of fireworks + */ + public final Setting elytraAllowEmergencyLand = new Setting<>(true); + /** * Time between culling far away chunks from the nether pathfinder chunk cache */ diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index a93980cbd..c6c41881d 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -47,6 +47,9 @@ import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -112,11 +115,21 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - if (ctx.player().isElytraFlying() && this.state != State.LANDING && this.behavior.pathManager.isComplete()) { + boolean safetyLanding = false; + if (ctx.player().isElytraFlying() && shouldLandForSafety()) { + if (Baritone.settings().elytraAllowEmergencyLand.value) { + logDirect("Emergency landing - almost out of elytra durability or fireworks"); + safetyLanding = true; + } else { + logDirect("almost out of elytra durability or fireworks, but I'm going to continue since elytraAllowEmergencyLand is false"); + } + } + if (ctx.player().isElytraFlying() && this.state != State.LANDING && (this.behavior.pathManager.isComplete() || safetyLanding)) { final BetterBlockPos last = this.behavior.pathManager.path.getLast(); - if (last != null && ctx.player().getDistanceSqToCenter(last) < (48 * 48) && !goingToLandingSpot) { + logDirect((last != null) + " " + this.state + " " + safetyLanding + " " + goingToLandingSpot); + if (last != null && (ctx.player().getDistanceSqToCenter(last) < (48 * 48) || safetyLanding) && (!goingToLandingSpot || (safetyLanding && this.landingSpot == null))) { logDirect("Path complete, picking a nearby safe landing spot..."); - BetterBlockPos landingSpot = findSafeLandingSpot(last); + BetterBlockPos landingSpot = findSafeLandingSpot(ctx.playerFeet()); // if this fails we will just keep orbiting the last node until we run out of rockets or the user intervenes if (landingSpot != null) { this.pathTo0(landingSpot, true); @@ -185,6 +198,11 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (this.state == State.LOCATE_JUMP) { + if (shouldLandForSafety()) { + logDirect("Not taking off, because elytra durability or fireworks are so low that I would immediately emergency land anyway."); + onLostControl(); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } if (this.goal == null) { this.goal = new GoalYLevel(31); } @@ -338,6 +356,25 @@ public void pathTo(Goal iGoal) { this.pathTo(new BlockPos(x, y, z)); } + private boolean shouldLandForSafety() { + ItemStack chest = ctx.player().inventory.armorInventory.get(2); + if (chest.getItem() != Items.ELYTRA || chest.getItem().getMaxDamage() - chest.getItemDamage() < Baritone.settings().elytraMinimumDurability.value) { + // elytrabehavior replaces when durability <= minimumDurability, so if durability < minimumDurability then we can reasonably assume that the elytra will soon be broken without replacement + return true; + } + NonNullList inv = ctx.player().inventory.mainInventory; + int qty = 0; + for (int i = 0; i < 36; i++) { + if (ElytraBehavior.isFireworks(inv.get(i))) { + qty += inv.get(i).getCount(); + } + } + if (qty <= Baritone.settings().elytraMinFireworksBeforeLanding.value) { + return true; + } + return false; + } + @Override public boolean isLoaded() { return true; diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 9d497932b..709d22334 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -887,7 +887,7 @@ public Solution(SolverContext context, Rotation rotation, Vec3d goingTo, boolean } } - private static boolean isFireworks(final ItemStack itemStack) { + public static boolean isFireworks(final ItemStack itemStack) { if (itemStack.getItem() != Items.FIREWORKS) { return false; } From 81e004380fff168e42ed082c4b3ae1510c912971 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 13 Aug 2023 22:42:51 -0700 Subject: [PATCH 882/935] thanks lamp! i love lamp! --- src/main/java/baritone/command/defaults/ElytraCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 7064deb5c..6db6a877d 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -199,7 +199,7 @@ private boolean detectOn2b2t() { return data != null && data.serverIP.toLowerCase().contains("2b2t"); } - private static final long OLD_2B2T_SEED = -4172144997902289642L; + private static final long OLD_2B2T_SEED = -4100785268875389365L; private static final long NEW_2B2T_SEED = 146008555100680L; @Override From 535eccfc245f0d6a0199c364d0254fdb97f07946 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 13 Aug 2023 22:46:51 -0700 Subject: [PATCH 883/935] no longer applies --- src/main/java/baritone/command/defaults/ElytraCommand.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 6db6a877d..19f3a030f 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -67,7 +67,6 @@ public void execute(String label, IArgConsumer args) throws CommandException { warn2b2t(); } } else { - // only gatekeep if they are standing on the ground, don't mess them up in midair lol gatekeep(); } Goal iGoal = customGoalProcess.mostRecentGoal(); From bd263e1bf88bedff5d84ba41bf00ee82c1b6b3ee Mon Sep 17 00:00:00 2001 From: leijurv Date: Mon, 14 Aug 2023 01:40:15 -0700 Subject: [PATCH 884/935] message for 2b players just in case the update actually happens --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index de3241e31..a98eda73f 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,8 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | | [1.20.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-forge-1.10.1.jar) | [1.20.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-fabric-1.10.1.jar) | +**Message for 2b2t players looking for 1.19/1.20 Baritone** (download it from right above ^). Please check back in a few days for Baritone Elytra ([vid 1](https://youtu.be/4bGGPo8yiHo) [vid 2](https://www.youtube.com/watch?v=pUN9nmINe3I)], which will be ported to 1.19/1.20 soon! It will work on 2b2t with its anticheat, that was the whole point of Baritone Elytra (it's fully vanilla compatible). Also join [**the discord**](http://discord.gg/s6fRBAUpmr). Thanks! + **How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#6313 on Baritone which I recommend. From b0929991b15d011b9af60f29abf3e927db531b68 Mon Sep 17 00:00:00 2001 From: leijurv Date: Mon, 14 Aug 2023 01:40:47 -0700 Subject: [PATCH 885/935] typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a98eda73f..674825c2b 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | | [1.20.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-forge-1.10.1.jar) | [1.20.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-fabric-1.10.1.jar) | -**Message for 2b2t players looking for 1.19/1.20 Baritone** (download it from right above ^). Please check back in a few days for Baritone Elytra ([vid 1](https://youtu.be/4bGGPo8yiHo) [vid 2](https://www.youtube.com/watch?v=pUN9nmINe3I)], which will be ported to 1.19/1.20 soon! It will work on 2b2t with its anticheat, that was the whole point of Baritone Elytra (it's fully vanilla compatible). Also join [**the discord**](http://discord.gg/s6fRBAUpmr). Thanks! +**Message for 2b2t players looking for 1.19/1.20 Baritone** Download it from right above ^. But also please check back in a few days for Baritone Elytra ([vid 1](https://youtu.be/4bGGPo8yiHo) [vid 2](https://www.youtube.com/watch?v=pUN9nmINe3I)), which will be ported to 1.19/1.20 soon! It will work on 2b2t with its anticheat, that was the whole point of Baritone Elytra (it's fully vanilla compatible). Also join [**the discord**](http://discord.gg/s6fRBAUpmr). Thanks! **How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) From f35e55ef66531d68aaa3680b9551da032c40db0c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 14 Aug 2023 12:34:24 -0700 Subject: [PATCH 886/935] unused --- .../java/baritone/command/defaults/ElytraCommand.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 19f3a030f..ddbe6fa19 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -184,15 +184,6 @@ private void gatekeep() { logDirect(gatekeep); } - private boolean detect2b2tPlayers() { - // if any cached worlds are 2b2t worlds - try (Stream stream = Files.list(((Baritone) baritone).getDirectory())) { - return stream.anyMatch(path -> path.getFileName().toString().toLowerCase().contains("2b2t")); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - private boolean detectOn2b2t() { ServerData data = ctx.minecraft().getCurrentServerData(); return data != null && data.serverIP.toLowerCase().contains("2b2t"); From 7b911aa0a71e1bc53c9458e8b41de3db7a005beb Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 14 Aug 2023 20:51:39 -0700 Subject: [PATCH 887/935] clean up elytra given 2b2t status --- .../command/defaults/ElytraCommand.java | 39 ++++++++----------- .../java/baritone/process/ElytraProcess.java | 1 - 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index ddbe6fa19..5895c36ad 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -34,9 +34,6 @@ import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; @@ -103,16 +100,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } private void warn2b2t() { - if (!Baritone.settings().elytraPredictTerrain.value) { - if (ctx.playerFeet().distanceSq(0, 0, 0) > 2000 * 2000) { - TextComponentString clippy = new TextComponentString(""); - clippy.appendText("It looks like you're on 2b2t and more than 2000 blocks from spawn. It is recommended that you "); - TextComponentString predictTerrain = new TextComponentString("enable elytraPredictTerrain"); - predictTerrain.getStyle().setUnderlined(true).setBold(true).setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString(Baritone.settings().prefix.value + "set elytraPredictTerrain true"))).setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "set elytraPredictTerrain true")); - clippy.appendSibling(predictTerrain); - logDirect(clippy); - } - } else { + if (Baritone.settings().elytraPredictTerrain.value) { long seed = Baritone.settings().elytraNetherSeed.value; if (seed != NEW_2B2T_SEED && seed != OLD_2B2T_SEED) { logDirect(new TextComponentString("It looks like you're on 2b2t, but elytraNetherSeed is incorrect.")); // match color @@ -128,11 +116,11 @@ private ITextComponent suggest2b2tSeeds() { TextComponentString olderSeed = new TextComponentString("the older seed (click here)"); olderSeed.getStyle().setUnderlined(true).setBold(true).setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString(Baritone.settings().prefix.value + "set elytraNetherSeed " + OLD_2B2T_SEED))).setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "set elytraNetherSeed " + OLD_2B2T_SEED)); clippy.appendSibling(olderSeed); - clippy.appendText(". Once you're further out into newer terrain generation (this includes everything 1.12 and upwards), you should try "); + clippy.appendText(". Once you're further out into newer terrain generation (this includes everything up through 1.12), you should try "); TextComponentString newerSeed = new TextComponentString("the newer seed (click here)"); newerSeed.getStyle().setUnderlined(true).setBold(true).setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentString(Baritone.settings().prefix.value + "set elytraNetherSeed " + NEW_2B2T_SEED))).setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "set elytraNetherSeed " + NEW_2B2T_SEED)); clippy.appendSibling(newerSeed); - clippy.appendText(". "); + clippy.appendText(". Once you get into 1.19 terrain, the terrain becomes unpredictable again, due to custom non-vanilla generation, and you should set #elytraPredictTerrain to false. "); return clippy; } @@ -154,15 +142,19 @@ private void gatekeep() { gatekeep.appendSibling(gatekeep4); gatekeep.appendText("\n"); if (detectOn2b2t()) { - TextComponentString gatekeep5 = new TextComponentString("It looks like you're on 2b2t, so elytraPredictTerrain is defaulting to true. "); + TextComponentString gatekeep5 = new TextComponentString("It looks like you're on 2b2t. "); gatekeep5.appendSibling(suggest2b2tSeeds()); - if (Baritone.settings().elytraNetherSeed.value == NEW_2B2T_SEED) { - gatekeep5.appendText("You are using the newer seed. "); - } else if (Baritone.settings().elytraNetherSeed.value == OLD_2B2T_SEED) { - gatekeep5.appendText("You are using the older seed. "); + if (!Baritone.settings().elytraPredictTerrain.value) { + gatekeep5.appendText(Baritone.settings().prefix.value + "elytraPredictTerrain is currently disabled. "); } else { - gatekeep5.appendText("Defaulting to the newer seed. "); - Baritone.settings().elytraNetherSeed.value = NEW_2B2T_SEED; + if (Baritone.settings().elytraNetherSeed.value == NEW_2B2T_SEED) { + gatekeep5.appendText("You are using the newer seed. "); + } else if (Baritone.settings().elytraNetherSeed.value == OLD_2B2T_SEED) { + gatekeep5.appendText("You are using the older seed. "); + } else { + gatekeep5.appendText("Defaulting to the newer seed. "); + Baritone.settings().elytraNetherSeed.value = NEW_2B2T_SEED; + } } gatekeep.appendSibling(gatekeep5); } else { @@ -185,8 +177,9 @@ private void gatekeep() { } private boolean detectOn2b2t() { + if (true) return true; ServerData data = ctx.minecraft().getCurrentServerData(); - return data != null && data.serverIP.toLowerCase().contains("2b2t"); + return data != null && data.serverIP.toLowerCase().contains("2b2t.org"); } private static final long OLD_2B2T_SEED = -4100785268875389365L; diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index c6c41881d..bf0dd9802 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -126,7 +126,6 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (ctx.player().isElytraFlying() && this.state != State.LANDING && (this.behavior.pathManager.isComplete() || safetyLanding)) { final BetterBlockPos last = this.behavior.pathManager.path.getLast(); - logDirect((last != null) + " " + this.state + " " + safetyLanding + " " + goingToLandingSpot); if (last != null && (ctx.player().getDistanceSqToCenter(last) < (48 * 48) || safetyLanding) && (!goingToLandingSpot || (safetyLanding && this.landingSpot == null))) { logDirect("Path complete, picking a nearby safe landing spot..."); BetterBlockPos landingSpot = findSafeLandingSpot(ctx.playerFeet()); From 050e3a570dff219bbbb168cccae468f81c8fa260 Mon Sep 17 00:00:00 2001 From: leijurv Date: Mon, 14 Aug 2023 21:56:41 -0700 Subject: [PATCH 888/935] bedrock is much lower now, although worth considering if deepslate needs similar special treatment --- src/main/java/baritone/cache/CachedChunk.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 3109d9293..2659c4feb 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -218,7 +218,7 @@ public final BlockState getBlock(int x, int y, int z, DimensionType dimension) { // nether roof is always unbreakable return Blocks.BEDROCK.defaultBlockState(); } - if (y < 5 && dimension.natural()) { + if (y < -59 && dimension.natural()) { // solid blocks below 5 are commonly bedrock // however, returning bedrock always would be a little yikes // discourage paths that include breaking blocks below 5 a little more heavily just so that it takes paths breaking what's known to be stone (at 5 or above) instead of what could maybe be bedrock (below 5) From b1be4f29adf8fbdc785e04e4221fc46ceb471e27 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Tue, 15 Aug 2023 01:14:53 -0400 Subject: [PATCH 889/935] make raytracer collide with unknown chunks --- build.gradle | 4 ++-- .../process/elytra/NetherPathfinderContext.java | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 0c8e58364..b9e486351 100755 --- a/build.gradle +++ b/build.gradle @@ -175,8 +175,8 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:1.2') - implementation 'dev.babbaj:nether-pathfinder:1.2' + launchImplementation('dev.babbaj:nether-pathfinder:1.3.0') + implementation 'dev.babbaj:nether-pathfinder:1.3.0' testImplementation 'junit:junit:4.12' } diff --git a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java index 93e0587f0..55a780a79 100644 --- a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java @@ -129,7 +129,7 @@ public CompletableFuture pathFindAsync(final BlockPos src, final Bl */ public boolean raytrace(final double startX, final double startY, final double startZ, final double endX, final double endY, final double endZ) { - return NetherPathfinder.isVisible(this.context, true, startX, startY, startZ, endX, endY, endZ); + return NetherPathfinder.isVisible(this.context, NetherPathfinder.CACHE_MISS_SOLID, startX, startY, startZ, endX, endY, endZ); } /** @@ -141,24 +141,24 @@ public boolean raytrace(final double startX, final double startY, final double s * @return {@code true} if there is visibility between the points */ public boolean raytrace(final Vec3d start, final Vec3d end) { - return NetherPathfinder.isVisible(this.context, true, start.x, start.y, start.z, end.x, end.y, end.z); + return NetherPathfinder.isVisible(this.context, NetherPathfinder.CACHE_MISS_SOLID, start.x, start.y, start.z, end.x, end.y, end.z); } public boolean raytrace(final int count, final double[] src, final double[] dst, final int visibility) { switch (visibility) { case Visibility.ALL: - return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, false) == -1; + return NetherPathfinder.isVisibleMulti(this.context, NetherPathfinder.CACHE_MISS_SOLID, count, src, dst, false) == -1; case Visibility.NONE: - return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, true) == -1; + return NetherPathfinder.isVisibleMulti(this.context, NetherPathfinder.CACHE_MISS_SOLID, count, src, dst, true) == -1; case Visibility.ANY: - return NetherPathfinder.isVisibleMulti(this.context, true, count, src, dst, true) != -1; + return NetherPathfinder.isVisibleMulti(this.context, NetherPathfinder.CACHE_MISS_SOLID, count, src, dst, true) != -1; default: throw new IllegalArgumentException("lol"); } } public void raytrace(final int count, final double[] src, final double[] dst, final boolean[] hitsOut, final double[] hitPosOut) { - NetherPathfinder.raytrace(this.context, true, count, src, dst, hitsOut, hitPosOut); + NetherPathfinder.raytrace(this.context, NetherPathfinder.CACHE_MISS_SOLID, count, src, dst, hitsOut, hitPosOut); } public void cancel() { From 661b16af7e651c4c5b98f73016faee7f201c57a4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 14 Aug 2023 22:20:42 -0700 Subject: [PATCH 890/935] v1.2.18 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b9e486351..b91dcf43c 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.2.17' +version '1.2.18' buildscript { repositories { From ca4385da7a8cd002cc841a82606c8dd02fb7779b Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 14 Aug 2023 22:34:38 -0700 Subject: [PATCH 891/935] update readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 674825c2b..bc3552c5a 100644 --- a/README.md +++ b/README.md @@ -60,10 +60,10 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | Forge | Fabric | |---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| -| [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar) | | -| [1.16.5 Forge](https://github.com/cabaletta/baritone/releases/download/v1.6.4/baritone-api-forge-1.6.4.jar) | [1.16.5 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.6.4/baritone-api-fabric-1.6.4.jar) | +| [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.18/baritone-api-forge-1.2.18.jar) | | +| [1.16.5 Forge](https://github.com/cabaletta/baritone/releases/download/v1.6.5/baritone-api-forge-1.6.5.jar) | [1.16.5 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.6.5/baritone-api-fabric-1.6.5.jar) | | [1.17.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-forge-1.7.3.jar) | [1.17.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-fabric-1.7.3.jar) | -| [1.18.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-forge-1.8.4.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-fabric-1.8.4.jar) | +| [1.18.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.8.5/baritone-api-forge-1.8.5.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.5/baritone-api-fabric-1.8.5.jar) | | [1.19.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.4/baritone-api-forge-1.9.4.jar) | [1.19.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.4/baritone-api-fabric-1.9.4.jar) | | [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) | | [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | @@ -71,7 +71,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s **Message for 2b2t players looking for 1.19/1.20 Baritone** Download it from right above ^. But also please check back in a few days for Baritone Elytra ([vid 1](https://youtu.be/4bGGPo8yiHo) [vid 2](https://www.youtube.com/watch?v=pUN9nmINe3I)), which will be ported to 1.19/1.20 soon! It will work on 2b2t with its anticheat, that was the whole point of Baritone Elytra (it's fully vanilla compatible). Also join [**the discord**](http://discord.gg/s6fRBAUpmr). Thanks! -**How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) +**How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa). Also try `#elytra` for Elytra flying in the Nether using fireworks. For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#6313 on Baritone which I recommend. From 60d6791f0c9aa695d5afcd75a4b9ae767b5fe2c1 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Wed, 16 Aug 2023 00:27:23 -0400 Subject: [PATCH 892/935] proguard: get java from gradle runtime before JAVA_HOME --- .../src/main/java/baritone/gradle/task/ProguardTask.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 435eabcf3..810d5ef27 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -114,6 +114,9 @@ private String getJavaBinPathForProguard() throws Exception { ex.printStackTrace(); } + path = findJavaByGradleCurrentRuntime(); + if (path != null) return path; + try { path = findJavaByJavaHome(); if (path != null) return path; @@ -122,10 +125,6 @@ private String getJavaBinPathForProguard() throws Exception { ex.printStackTrace(); } - - path = findJavaByGradleCurrentRuntime(); - if (path != null) return path; - throw new Exception("Unable to find java to determine ProGuard libraryjars. Please specify forkOptions.executable in javaCompile," + " JAVA_HOME environment variable, or make sure to run Gradle with the correct JDK (a v1.8 only)"); } From 8a2a20a1b353170162499bb678c86b9231cc04cf Mon Sep 17 00:00:00 2001 From: leijurv Date: Thu, 17 Aug 2023 14:40:26 -0700 Subject: [PATCH 893/935] 1.16 and 1.18 deprecated --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bc3552c5a..dc97c1fc6 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ Minecraft Minecraft Minecraft - Minecraft + Minecraft Minecraft - Minecraft + Minecraft Minecraft Minecraft Minecraft From d4b95110f52398971af17a380ebd0fa05f272365 Mon Sep 17 00:00:00 2001 From: leijurv Date: Thu, 17 Aug 2023 16:56:22 -0700 Subject: [PATCH 894/935] fml --- src/main/java/baritone/command/defaults/ElytraCommand.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java index 5895c36ad..879a6eabf 100644 --- a/src/main/java/baritone/command/defaults/ElytraCommand.java +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -177,7 +177,6 @@ private void gatekeep() { } private boolean detectOn2b2t() { - if (true) return true; ServerData data = ctx.minecraft().getCurrentServerData(); return data != null && data.serverIP.toLowerCase().contains("2b2t.org"); } From d9cb2d91a06501c5bcba2181509d0df80361f413 Mon Sep 17 00:00:00 2001 From: leijurv Date: Thu, 17 Aug 2023 16:57:11 -0700 Subject: [PATCH 895/935] v1.2.19 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b91dcf43c..888a818ac 100755 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ */ group 'baritone' -version '1.2.18' +version '1.2.19' buildscript { repositories { From 75b8554a11759e8057ba2a936cf5d8e848259f8e Mon Sep 17 00:00:00 2001 From: leijurv Date: Thu, 17 Aug 2023 17:14:33 -0700 Subject: [PATCH 896/935] bump readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dc97c1fc6..11a12e822 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | Forge | Fabric | |---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| -| [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.18/baritone-api-forge-1.2.18.jar) | | +| [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.19/baritone-api-forge-1.2.19.jar) | | | [1.16.5 Forge](https://github.com/cabaletta/baritone/releases/download/v1.6.5/baritone-api-forge-1.6.5.jar) | [1.16.5 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.6.5/baritone-api-fabric-1.6.5.jar) | | [1.17.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-forge-1.7.3.jar) | [1.17.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-fabric-1.7.3.jar) | | [1.18.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.8.5/baritone-api-forge-1.8.5.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.5/baritone-api-fabric-1.8.5.jar) | From bfc813a8022acf1ba70ec7826231bc68e6fb0e6e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 17 Aug 2023 20:03:44 -0700 Subject: [PATCH 897/935] mostly works --- fabric/build.gradle | 3 +++ .../java/baritone/behavior/LookBehavior.java | 15 ++++++++---- .../java/baritone/process/ElytraProcess.java | 5 +++- .../process/elytra/ElytraBehavior.java | 9 +++---- .../elytra/NetherPathfinderContext.java | 24 +++++++------------ src/main/java/baritone/utils/IRenderer.java | 10 +++----- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index 8adf7571b..c88ff80ef 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -26,6 +26,9 @@ archivesBaseName = archivesBaseName + "-fabric" minecraft { fabric() + runs.client = { + jvmArgs.add("-XstartOnFirstThread") + } } configurations { diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index 2ff732675..e694a8ee0 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -82,9 +82,12 @@ public void onTick(TickEvent event) { @Override public void onPlayerUpdate(PlayerUpdateEvent event) { + System.out.println(event.getState() + " " + ctx.player().getXRot() + " " + ctx.player().getYRot() + " " + ctx.player().xRotO + " " + ctx.player().yRotO); + if (this.target == null) { return; } + switch (event.getState()) { case PRE: { if (this.target.mode == Target.Mode.NONE) { @@ -92,7 +95,7 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { return; } - this.prevRotation = new Rotation(ctx.player().getXRot(), ctx.player().getYRot()); + this.prevRotation = new Rotation(ctx.player().getYRot(), ctx.player().getXRot()); final Rotation actual = this.processor.peekRotation(this.target.rotation); ctx.player().setYRot(actual.getYaw()); ctx.player().setXRot(actual.getPitch()); @@ -110,14 +113,16 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { this.smoothPitchBuffer.removeFirst(); } if (this.target.mode == Target.Mode.SERVER) { - ctx.player().setXRot(this.prevRotation.getYaw()); - ctx.player().setYRot(this.prevRotation.getPitch()); + ctx.player().setYRot(this.prevRotation.getYaw()); + ctx.player().setXRot(this.prevRotation.getPitch()); } else if (ctx.player().isFallFlying() ? Baritone.settings().elytraSmoothLook.value : Baritone.settings().smoothLook.value) { - ctx.player().setXRot((float) this.smoothYawBuffer.stream().mapToDouble(d -> d).average().orElse(this.prevRotation.getYaw())); + ctx.player().setYRot((float) this.smoothYawBuffer.stream().mapToDouble(d -> d).average().orElse(this.prevRotation.getYaw())); if (ctx.player().isFallFlying()) { - ctx.player().setYRot((float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElse(this.prevRotation.getPitch())); + ctx.player().setXRot((float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElse(this.prevRotation.getPitch())); } } + //ctx.player().xRotO = prevRotation.getPitch(); + //ctx.player().yRotO = prevRotation.getYaw(); this.prevRotation = null; } // The target is done being used for this game tick, so it can be invalidated diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index 7ede8543f..e0b6a1a03 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -364,7 +364,8 @@ private boolean shouldLandForSafety() { // elytrabehavior replaces when durability <= minimumDurability, so if durability < minimumDurability then we can reasonably assume that the elytra will soon be broken without replacement return true; } - NonNullList inv = ctx.player().inventoryMenu.getItems(); + + NonNullList inv = ctx.player().getInventory().items; int qty = 0; for (int i = 0; i < 36; i++) { if (ElytraBehavior.isFireworks(inv.get(i))) { @@ -404,6 +405,8 @@ public enum State { @Override public void onRenderPass(RenderEvent event) { + System.out.println(event.getPartialTicks() + " " + ctx.player().getXRot() + " " + ctx.player().getYRot() + " " + ctx.player().xRotO + " " + ctx.player().yRotO); + if (this.behavior != null) this.behavior.onRenderPass(event); } diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 82225456e..2ba8744fb 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -402,6 +402,7 @@ public boolean isComplete() { } public void onRenderPass(RenderEvent event) { + final Settings settings = Baritone.settings(); if (this.visiblePath != null) { PathRenderer.drawPath(event.getModelViewStack(), this.visiblePath, 0, Color.RED, false, 0, 0, 0.0D); @@ -412,14 +413,14 @@ public void onRenderPass(RenderEvent event) { if (!this.clearLines.isEmpty() && settings.elytraRenderRaytraces.value) { IRenderer.startLines(Color.GREEN, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); for (Pair line : this.clearLines) { - IRenderer.emitLine(line.first(), line.second()); + IRenderer.emitLine(event.getModelViewStack(), line.first(), line.second()); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } if (!this.blockedLines.isEmpty() && Baritone.settings().elytraRenderRaytraces.value) { IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); for (Pair line : this.blockedLines) { - IRenderer.emitLine(line.first(), line.second()); + IRenderer.emitLine(event.getModelViewStack(), line.first(), line.second()); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } @@ -429,7 +430,7 @@ public void onRenderPass(RenderEvent event) { for (int i = 0; i < this.simulationLine.size() - 1; i++) { final Vec3 src = this.simulationLine.get(i).add(offset); final Vec3 dst = this.simulationLine.get(i + 1).add(offset); - IRenderer.emitLine(src, dst); + IRenderer.emitLine(event.getModelViewStack(), src, dst); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } @@ -1272,7 +1273,7 @@ private void queueWindowClick(int windowId, int slotId, int button, ClickType ty } private int findGoodElytra() { - NonNullList invy = ctx.player().inventoryMenu.getItems(); + NonNullList invy = ctx.player().getInventory().items; for (int i = 0; i < invy.size(); i++) { ItemStack slot = invy.get(i); if (slot.getItem() == Items.ELYTRA && (slot.getItem().getMaxDamage() - slot.getDamageValue()) > Baritone.settings().elytraMinimumDurability.value) { diff --git a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java index 47ecdca96..de666a0a8 100644 --- a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java @@ -201,23 +201,15 @@ private static void writeChunkData(LevelChunk chunk, long ptr) { long maxEntryValue = (1L << bitsPerEntry) - 1L; final int yReal = y0 << 4; - for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) { - final int i = idx * bitsPerEntry; - final int j = i >> 6; - final int l = i & 63; - final int k = kl >> 6; - final long jl = longArray[j] >>> l; - - final int id; - if (j == k) { - id = (int) (jl & maxEntryValue); - } else { - id = (int) ((jl | longArray[k] << (64 - l)) & maxEntryValue); + for (int i = 0, idx = 0; i < longArray.length && idx < arraySize; ++i) { + long l = longArray[i]; + for (int offset = 0; offset <= (64 - bitsPerEntry) && idx < arraySize; offset += bitsPerEntry, ++idx) { + int value = (int) ((l >> offset) & maxEntryValue); + int x = (idx & 15); + int y = yReal + (idx >> 8); + int z = ((idx >> 4) & 15); + Octree.setBlock(ptr, x, y, z, value != airId); } - int x = (idx & 15); - int y = yReal + (idx >> 8); - int z = ((idx >> 4) & 15); - Octree.setBlock(ptr, x, y, z, id != airId); } } Octree.setIsFromJava(ptr); diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 0721019c6..7f6065b72 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -146,15 +146,11 @@ static void emitAABB(PoseStack stack, AABB aabb, double expand) { emitAABB(stack, aabb.inflate(expand, expand, expand)); } - static void emitLine(Vec3 start, Vec3 end) { - emitLine(start.x, start.y, start.z, end.x, end.y, end.z); - } - - static void emitLine(double x1, double y1, double z1, double x2, double y2, double z2) { + static void emitLine(PoseStack stack, Vec3 start, Vec3 end) { double vpX = renderManager.renderPosX(); double vpY = renderManager.renderPosY(); double vpZ = renderManager.renderPosZ(); - buffer.vertex(x1 - vpX, y1 - vpY, z1 - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(x2 - vpX, y2 - vpY, z2 - vpZ).color(color[0], color[1], color[2], color[3]).endVertex(); + emitLine(stack, start.x - vpX, start.y - vpY, start.z - vpZ, end.x - vpX, end.y - vpY, end.z - vpZ); } + } From fc474cfb49a4f4990770a38862ba1415e94b8db3 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 18 Aug 2023 14:14:34 -0500 Subject: [PATCH 898/935] bradyfix --- .../mixins/MixinClientPlayNetHandler.java | 24 +-------------- .../mixins/MixinClientPlayerEntity.java | 2 +- .../launch/mixins/MixinLivingEntity.java | 29 +------------------ .../launch/mixins/MixinMinecraft.java | 16 ++-------- 4 files changed, 6 insertions(+), 65 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index 460250617..6b4564aa9 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -183,7 +183,7 @@ private void postHandleMultiBlockChange(ClientboundSectionBlocksUpdatePacket pac List> changes = new ArrayList<>(); packetIn.runUpdates((mutPos, state) -> { - changes.add(new Pair<>(mutPos.immutable(), state)); // bradyfix is this right + changes.add(new Pair<>(mutPos.immutable(), state)); }); if (changes.isEmpty()) { return; @@ -192,28 +192,6 @@ private void postHandleMultiBlockChange(ClientboundSectionBlocksUpdatePacket pac new ChunkPos(changes.get(0).first()), changes )); - ChunkPos[] chunkPos = new ChunkPos[1]; - packetIn.runUpdates((pos, state) -> { - if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(state.getBlock())) { - chunkPos[0] = new ChunkPos(pos); - } - }); - if (chunkPos[0] == null) { - return; - } - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - LocalPlayer player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (ClientPacketListener) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - ChunkEvent.Type.POPULATE_FULL, - chunkPos[0].x, - chunkPos[0].z - ) - ); - } - } } @Inject( diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index e835d5e46..4674ffaa6 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -121,5 +121,5 @@ private boolean isFlyEnabled(ItemStack stack) { return false; } return ElytraItem.isFlyEnabled(stack); - } // bradyfix is this right? + } } diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index ecc7829d9..ada92f6c2 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -51,7 +51,7 @@ public abstract class MixinLivingEntity extends Entity { @Unique private RotationMoveEvent elytraRotationEvent; - public MixinLivingEntity(EntityType entityTypeIn, Level worldIn) { + private MixinLivingEntity(EntityType entityTypeIn, Level worldIn) { super(entityTypeIn, worldIn); } @@ -111,33 +111,6 @@ private void onPostElytraMove(Vec3 direction, CallbackInfo ci) { this.elytraRotationEvent = null; } } - // bradyfix in 1.12.2 this is a redirect of moveRelative as called from travel, but it looks like in 1.19.4 we're doing it in MixinEntity as injecting into moveRelative itself, is that right? - /*@Redirect( - method = "travel", - at = @At( - value = "INVOKE", - target = "net/minecraft/entity/EntityLivingBase.moveRelative(FFFF)V" - ) - ) - private void onMoveRelative(EntityLivingBase self, float strafe, float up, float forward, float friction) { - Optional baritone = this.getBaritone(); - if (!baritone.isPresent()) { - // If a shadow is used here it breaks on Forge - this.moveRelative(strafe, up, forward, friction); - return; - } - - RotationMoveEvent event = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw, this.rotationPitch); - baritone.get().getGameEventHandler().onPlayerRotationMove(event); - - this.rotationYaw = event.getYaw(); - this.rotationPitch = event.getPitch(); - - this.moveRelative(strafe, up, forward, friction); - - this.rotationYaw = event.getOriginal().getYaw(); - this.rotationPitch = event.getOriginal().getPitch(); - }*/ @Unique private Optional getBaritone() { diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index d50534b7a..4f9925cc7 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -34,6 +34,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.function.BiFunction; @@ -61,21 +62,12 @@ private void postInit(CallbackInfo ci) { BaritoneAPI.getProvider().getPrimaryBaritone(); } - @Inject( method = "tick", at = @At( -//<<<<<<< HEAD - value = "FIELD", - opcode = Opcodes.GETFIELD, - target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", - ordinal = 4, - shift = At.Shift.BY, - by = -3 -/*======= value = "FIELD", opcode = Opcodes.GETFIELD, - target = "net/minecraft/client/Minecraft.currentScreen:Lnet/minecraft/client/gui/GuiScreen;", + target = "net/minecraft/client/Minecraft.screen:Lnet/minecraft/client/gui/screens/Screen;", ordinal = 0, shift = At.Shift.BEFORE ), @@ -83,10 +75,8 @@ private void postInit(CallbackInfo ci) { from = @At( value = "FIELD", opcode = Opcodes.PUTFIELD, - target = "net/minecraft/client/Minecraft.leftClickCounter:I" + target = "net/minecraft/client/Minecraft.missTime:I" ) ->>>>>>> master*/ - // bradyfix ^ ) ) private void runTick(CallbackInfo ci) { From 7969988099ffe22ab2e6b86d7772eaa1a60acc15 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 18 Aug 2023 13:09:28 -0700 Subject: [PATCH 899/935] yay fixing the build was actually easy --- buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 331f22ebe..bad182c1f 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -63,7 +63,6 @@ public String getExtract() { private List requiredLibraries; - private File mixin; private File pathfinder; @TaskAction @@ -75,7 +74,7 @@ protected void exec() throws Exception { downloadProguard(); extractProguard(); generateConfigs(); - acquireDependencies(); + pathfinder = acquireDependencies().filter(file -> file.getName().contains("nether-pathfinder")).findAny().get(); processArtifact(); proguardApi(); proguardStandalone(); From c2308c650a1dc2d712d8a1ea7b7530dd67836e64 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 18 Aug 2023 14:35:02 -0700 Subject: [PATCH 900/935] mapping --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 5b420a0e4..03a2f7d64 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,5 @@ baritone_Client.launch libs/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar libs/java-objc-bridge-1.1.jar + +mapping From 4efa2b1272e9e4244eada40130080fd490ccf560 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 18 Aug 2023 15:02:13 -0700 Subject: [PATCH 901/935] fix backtracking bad behavior when render distance is tiny --- .../baritone/process/elytra/ElytraBehavior.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 709d22334..c6207b08f 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -330,12 +330,19 @@ private void pathfindAroundObstacles() { } if (!ElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { // obstacle. where do we return to pathing? - // find the next valid segment + // if the end of render distance is closer to goal, then that's fine, otherwise we'd be "digging our hole deeper" and making an already bad backtrack worse + int rejoinMainPathAt; + if (this.path.get(rangeEndExcl - 1).distanceSq(this.path.get(path.size() - 1)) < ctx.playerFeet().distanceSq(this.path.get(path.size() - 1))) { + rejoinMainPathAt = rangeEndExcl - 1; // rejoin after current render distance + } else { + rejoinMainPathAt = path.size() - 1; // large backtrack detected. ignore render distance, rejoin later on + } + final BetterBlockPos blockage = this.path.get(i); - final double distance = ctx.playerFeet().distanceTo(this.path.get(rangeEndExcl - 1)); + final double distance = ctx.playerFeet().distanceTo(this.path.get(rejoinMainPathAt)); final long start = System.nanoTime(); - this.pathRecalcSegment(rangeEndExcl - 1) + this.pathRecalcSegment(rejoinMainPathAt) .thenRun(() -> { logDirect(String.format("Recalculated segment around path blockage near %s %s %s (next %.1f blocks in %.4f seconds)", SettingsUtil.maybeCensor(blockage.x), From 3bdd0a81a5b0975cfb59c54cb1d1766098663949 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 18 Aug 2023 17:49:37 -0700 Subject: [PATCH 902/935] rm debug --- src/main/java/baritone/behavior/LookBehavior.java | 1 - src/main/java/baritone/process/ElytraProcess.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index e694a8ee0..98e12aeff 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -82,7 +82,6 @@ public void onTick(TickEvent event) { @Override public void onPlayerUpdate(PlayerUpdateEvent event) { - System.out.println(event.getState() + " " + ctx.player().getXRot() + " " + ctx.player().getYRot() + " " + ctx.player().xRotO + " " + ctx.player().yRotO); if (this.target == null) { return; diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index e0b6a1a03..d1e10a5cf 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -405,8 +405,6 @@ public enum State { @Override public void onRenderPass(RenderEvent event) { - System.out.println(event.getPartialTicks() + " " + ctx.player().getXRot() + " " + ctx.player().getYRot() + " " + ctx.player().xRotO + " " + ctx.player().yRotO); - if (this.behavior != null) this.behavior.onRenderPass(event); } From c18fa512ef1acd2df266653f20e6bea8dad80d83 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 18 Aug 2023 17:53:44 -0700 Subject: [PATCH 903/935] 1.19 defaults --- src/api/java/baritone/api/Settings.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 177c8988d..adbbd6eaa 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -743,7 +743,7 @@ public final class Settings { /** * Automatically elytra fly without having to force the client-sided rotations. */ - public final Setting elytraFreeLook = new Setting<>(false); + public final Setting elytraFreeLook = new Setting<>(true); /** * Forces the client-sided yaw rotation to an average of the last {@link #smoothLookTicks} of server-sided rotations. @@ -753,7 +753,7 @@ public final class Settings { /** * Same as {@link #smoothLook} but for elytra flying. */ - public final Setting elytraSmoothLook = new Setting<>(true); + public final Setting elytraSmoothLook = new Setting<>(false); /** * The number of ticks to average across for {@link #smoothLook}; @@ -1426,7 +1426,7 @@ public final class Settings { * Whether nether-pathfinder should generate terrain based on {@link #elytraNetherSeed}. * If false all chunks that haven't been loaded are assumed to be air. */ - public final Setting elytraPredictTerrain = new Setting<>(true); + public final Setting elytraPredictTerrain = new Setting<>(false); /** * Automatically swap the current elytra with a new one when the durability gets too low From 58d6b80f4f1ae2d0f20ac493fe9a1d6a5c19f857 Mon Sep 17 00:00:00 2001 From: leijurv Date: Fri, 18 Aug 2023 19:21:50 -0700 Subject: [PATCH 904/935] baritone elytra selling --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 11a12e822..c990292fc 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | | [1.20.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-forge-1.10.1.jar) | [1.20.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-fabric-1.10.1.jar) | -**Message for 2b2t players looking for 1.19/1.20 Baritone** Download it from right above ^. But also please check back in a few days for Baritone Elytra ([vid 1](https://youtu.be/4bGGPo8yiHo) [vid 2](https://www.youtube.com/watch?v=pUN9nmINe3I)), which will be ported to 1.19/1.20 soon! It will work on 2b2t with its anticheat, that was the whole point of Baritone Elytra (it's fully vanilla compatible). Also join [**the discord**](http://discord.gg/s6fRBAUpmr). Thanks! +**Message for 2b2t players looking for 1.19/1.20 Baritone** If you like, please try the beta for Baritone Elytra for 2b2t 1.19.4, find it in #announcements of [the Baritone discord](http://discord.gg/s6fRBAUpmr). If you have to see it to believe it, watch [this YouTube video](https://youtu.be/NnSlQi-68eQ). **How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa). Also try `#elytra` for Elytra flying in the Nether using fireworks. From e063475ebd5dc180880846ad1a3c7e10a0a209bb Mon Sep 17 00:00:00 2001 From: leijurv Date: Fri, 18 Aug 2023 19:22:40 -0700 Subject: [PATCH 905/935] list 1.20 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c990292fc..3f2923f92 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s | [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | | [1.20.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-forge-1.10.1.jar) | [1.20.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-fabric-1.10.1.jar) | -**Message for 2b2t players looking for 1.19/1.20 Baritone** If you like, please try the beta for Baritone Elytra for 2b2t 1.19.4, find it in #announcements of [the Baritone discord](http://discord.gg/s6fRBAUpmr). If you have to see it to believe it, watch [this YouTube video](https://youtu.be/NnSlQi-68eQ). +**Message for 2b2t players looking for 1.19/1.20 Baritone** If you like, please try the beta for Baritone Elytra for 2b2t, find it in #announcements of [the Baritone discord](http://discord.gg/s6fRBAUpmr). It supports 1.19.4 and 1.20.1, Forge or Fabric. If you have to see it to believe it, watch [this YouTube video](https://youtu.be/NnSlQi-68eQ). **How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa). Also try `#elytra` for Elytra flying in the Nether using fireworks. From aee36e4d85ce46838acbe4493d6ebed97981d385 Mon Sep 17 00:00:00 2001 From: leijurv Date: Fri, 18 Aug 2023 19:35:30 -0700 Subject: [PATCH 906/935] deprecate 1.12.2 --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 11a12e822..3167deb3d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ +# Warning: Old Branch!! + +**This branch (`master`) is Baritone for Minecraft 1.12.2. This is the original version of Minecraft that Baritone was written for, and it was the primary development branch for over 5 years. As such, it's quite mature, and arguably more reliable than Baritone for newer versions of Minecraft. Nevertheless, as of August 2023, with [2b2t's update from 1.12.2 to 1.19.4](https://2b2t.org/update/), I decided to move Baritone's primary development branch accordingly. PRs should now be made against the `1.19.4` branch going forward. This branch might see some fixes going forward, particularly to newer features such as `#elytra`, but it won't be the primary focus anymore.** + +The other intermediary branches (`1.13.2`, `1.14.4`, `1.15.2`, `1.16.5`, `1.17.1`, `1.18.2`, `1.19.2`, and `1.19.3`) will probably not receive any updates at all. You can find their last releases in the releases tab, or in the quick download links table. + +For `1.16.5` and `1.18.2`, the latest release is fully up to date with the code. ZacSharp merged master into some of those versions even after they were deprecated, if you are for some reason really interested in the latest Baritone bugfixes on these versions of Minecraft, you can build from source as of these commits: [1.13.2](https://github.com/cabaletta/baritone/commit/be54b8ee5b5639f80e3d6809ed1abd52444d8a08), [1.14.4](https://github.com/cabaletta/baritone/commit/be54b8ee5b5639f80e3d6809ed1abd52444d8a08), [1.15.2](https://github.com/cabaletta/baritone/commit/45abbb7fa1062cefc26abbb006a02a4edd6faa32), [1.17.1](https://github.com/cabaletta/baritone/commit/cbf0d79c9c5f7454071dc0a5289261ec9ca4373f), [1.19.2](https://github.com/cabaletta/baritone/commit/217dca53633610edc9483fda7a234e46c839fd99). For `1.19.3`, merging [this](https://github.com/cabaletta/baritone/commit/217dca53633610edc9483fda7a234e46c839fd99) commit into it is trivial and is left as an exercise for the reader. For other versions in between these (for example people always ask in the Discord for 1.16.1), you'll have to figure it out yourself. + # Baritone

GitHub All Releases From 301ad403508139cb2ee09bd44896ae6a251849ab Mon Sep 17 00:00:00 2001 From: leijurv Date: Fri, 18 Aug 2023 19:36:12 -0700 Subject: [PATCH 907/935] link to latest --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3167deb3d..2847001a3 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Warning: Old Branch!! +**Click [here](https://github.com/cabaletta/baritone) to go to the current Baritone readme.** + **This branch (`master`) is Baritone for Minecraft 1.12.2. This is the original version of Minecraft that Baritone was written for, and it was the primary development branch for over 5 years. As such, it's quite mature, and arguably more reliable than Baritone for newer versions of Minecraft. Nevertheless, as of August 2023, with [2b2t's update from 1.12.2 to 1.19.4](https://2b2t.org/update/), I decided to move Baritone's primary development branch accordingly. PRs should now be made against the `1.19.4` branch going forward. This branch might see some fixes going forward, particularly to newer features such as `#elytra`, but it won't be the primary focus anymore.** The other intermediary branches (`1.13.2`, `1.14.4`, `1.15.2`, `1.16.5`, `1.17.1`, `1.18.2`, `1.19.2`, and `1.19.3`) will probably not receive any updates at all. You can find their last releases in the releases tab, or in the quick download links table. From 5f5567f283a0e51eb2b74b117abf448ce0f684e7 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sat, 19 Aug 2023 15:33:12 -0400 Subject: [PATCH 908/935] recover from flying into lava (and fix ignoreLava) --- .../java/baritone/process/elytra/ElytraBehavior.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 127f90131..7334f10b4 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -24,6 +24,7 @@ import baritone.api.event.events.*; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.*; +import baritone.api.utils.input.Input; import baritone.process.ElytraProcess; import baritone.utils.BlockStateInterface; import baritone.utils.IRenderer; @@ -601,6 +602,11 @@ public void tick() { this.deployedFireworkLastTick = false; } + final boolean inLava = ctx.player().isInLava(); + if (inLava) { + baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); + } + if (solution == null) { logDirect("no solution"); return; @@ -619,7 +625,7 @@ public void tick() { solution.context.start, solution.goingTo, solution.context.boost.isBoosted(), - solution.forceUseFirework + solution.forceUseFirework || inLava ); } @@ -1001,7 +1007,7 @@ public boolean clearView(Vec3 start, Vec3 dest, boolean ignoreLava) { // if start == dest then the cpp raytracer dies clear = start.equals(dest) || this.context.raytrace(start, dest); } else { - clear = ctx.world().clip(new ClipContext(start, dest, ClipContext.Block.COLLIDER, ClipContext.Fluid.ANY, ctx.player())).getType() == HitResult.Type.MISS; + clear = ctx.world().clip(new ClipContext(start, dest, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, ctx.player())).getType() == HitResult.Type.MISS; } if (Baritone.settings().elytraRenderRaytraces.value) { From c4f33b72c24d658ccc569994d62004afdebcaa90 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 20 Aug 2023 11:53:54 -0700 Subject: [PATCH 909/935] check chunk load in sepples --- build.gradle | 2 +- src/main/java/baritone/process/elytra/ElytraBehavior.java | 3 ++- .../java/baritone/process/elytra/NetherPathfinderContext.java | 4 ++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index b981972d3..75d17fb02 100755 --- a/build.gradle +++ b/build.gradle @@ -77,7 +77,7 @@ allprojects { // The following line declares the yarn mappings you may select this one as well. // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" //launchImplementation('dev.babbaj:nether-pathfinder:1.3.0') - implementation 'dev.babbaj:nether-pathfinder:1.3.0' + implementation 'dev.babbaj:nether-pathfinder:1.4' } tasks.withType(JavaCompile).configureEach { diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 127f90131..a0763095d 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -42,6 +42,7 @@ import net.minecraft.world.inventory.ClickType; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.chunk.ChunkSource; import net.minecraft.world.level.chunk.LevelChunk; @@ -302,7 +303,7 @@ private void pathfindAroundObstacles() { int rangeStartIncl = playerNear; int rangeEndExcl = playerNear; - while (rangeEndExcl < path.size() && ctx.world().isLoaded(path.get(rangeEndExcl))) { + while (rangeEndExcl < path.size() && context.hasChunk(new ChunkPos(path.get(rangeEndExcl)))) { rangeEndExcl++; } // rangeEndExcl now represents an index either not in the path, or just outside render distance diff --git a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java index de666a0a8..aa9f4965a 100644 --- a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java @@ -60,6 +60,10 @@ public NetherPathfinderContext(long seed) { this.executor = Executors.newSingleThreadExecutor(); } + public boolean hasChunk(ChunkPos pos) { + return NetherPathfinder.hasChunkFromJava(this.context, pos.x, pos.z); + } + public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks, BlockStateOctreeInterface boi) { this.executor.execute(() -> { synchronized (this.cullingLock) { From e492e5f830aeefd0105d877e6d53f988b484bbc2 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 20 Aug 2023 13:36:45 -0700 Subject: [PATCH 910/935] bump nether pathfinder --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 75d17fb02..9371211b0 100755 --- a/build.gradle +++ b/build.gradle @@ -77,7 +77,7 @@ allprojects { // The following line declares the yarn mappings you may select this one as well. // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" //launchImplementation('dev.babbaj:nether-pathfinder:1.3.0') - implementation 'dev.babbaj:nether-pathfinder:1.4' + implementation 'dev.babbaj:nether-pathfinder:1.4.1' } tasks.withType(JavaCompile).configureEach { @@ -142,4 +142,4 @@ javadoc { options.encoding "UTF-8" // allow emoji in comments :^) source = sourceSets.api.allJava classpath += sourceSets.api.compileClasspath -} \ No newline at end of file +} From f2679bea294e51e3d2e83bda562451f8f9d2cf5a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 22 Aug 2023 13:28:11 -0700 Subject: [PATCH 911/935] hopefully actually fix backtracking --- .../process/elytra/ElytraBehavior.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index c6207b08f..29f63f96c 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -98,7 +98,7 @@ public final class ElytraBehavior implements Helper { private BlockStateInterface bsi; private final BlockStateOctreeInterface boi; - public final BlockPos destination; + public final BetterBlockPos destination; private final boolean appendDestination; private final ExecutorService solverExecutor; @@ -119,7 +119,7 @@ public ElytraBehavior(Baritone baritone, ElytraProcess process, BlockPos destina this.blockedLines = new CopyOnWriteArrayList<>(); this.pathManager = this.new PathManager(); this.process = process; - this.destination = destination; + this.destination = new BetterBlockPos(destination); this.appendDestination = appendDestination; this.solverExecutor = Executors.newSingleThreadExecutor(); this.nextTickBoostCounter = new int[2]; @@ -188,16 +188,16 @@ public CompletableFuture pathToDestination(final BlockPos from) { }); } - public CompletableFuture pathRecalcSegment(final int upToIncl) { + public CompletableFuture pathRecalcSegment(final OptionalInt upToIncl) { if (this.recalculating) { throw new IllegalStateException("already recalculating"); } this.recalculating = true; - final List after = this.path.subList(upToIncl + 1, this.path.size()); + final List after = upToIncl.isPresent() ? this.path.subList(upToIncl.getAsInt() + 1, this.path.size()) : Collections.emptyList(); final boolean complete = this.completePath; - return this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete)) + return this.path0(ctx.playerFeet(), upToIncl.isPresent() ? this.path.get(upToIncl.getAsInt()) : ElytraBehavior.this.destination, segment -> segment.append(after.stream(), complete || (segment.isFinished() && !upToIncl.isPresent()))) .whenComplete((result, ex) -> { this.recalculating = false; if (ex != null) { @@ -315,7 +315,7 @@ private void pathfindAroundObstacles() { } if (ElytraBehavior.this.process.state != ElytraProcess.State.LANDING && this.ticksNearUnchanged > 100) { - this.pathRecalcSegment(rangeEndExcl - 1) + this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1)) .thenRun(() -> { logDirect("Recalculating segment, no progress in last 100 ticks"); }); @@ -331,15 +331,15 @@ private void pathfindAroundObstacles() { if (!ElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { // obstacle. where do we return to pathing? // if the end of render distance is closer to goal, then that's fine, otherwise we'd be "digging our hole deeper" and making an already bad backtrack worse - int rejoinMainPathAt; - if (this.path.get(rangeEndExcl - 1).distanceSq(this.path.get(path.size() - 1)) < ctx.playerFeet().distanceSq(this.path.get(path.size() - 1))) { - rejoinMainPathAt = rangeEndExcl - 1; // rejoin after current render distance + OptionalInt rejoinMainPathAt; + if (this.path.get(rangeEndExcl - 1).distanceSq(ElytraBehavior.this.destination) < ctx.playerFeet().distanceSq(ElytraBehavior.this.destination)) { + rejoinMainPathAt = OptionalInt.of(rangeEndExcl - 1); // rejoin after current render distance } else { - rejoinMainPathAt = path.size() - 1; // large backtrack detected. ignore render distance, rejoin later on + rejoinMainPathAt = OptionalInt.empty(); // large backtrack detected. ignore render distance, rejoin later on } final BetterBlockPos blockage = this.path.get(i); - final double distance = ctx.playerFeet().distanceTo(this.path.get(rejoinMainPathAt)); + final double distance = ctx.playerFeet().distanceTo(this.path.get(rejoinMainPathAt.orElse(path.size() - 1))); final long start = System.nanoTime(); this.pathRecalcSegment(rejoinMainPathAt) @@ -356,7 +356,7 @@ private void pathfindAroundObstacles() { } } if (!canSeeAny && rangeStartIncl < rangeEndExcl - 2 && process.state != ElytraProcess.State.GET_TO_JUMP) { - this.pathRecalcSegment(rangeEndExcl - 1).thenRun(() -> logDirect("Recalculated segment since no path points were visible")); + this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1)).thenRun(() -> logDirect("Recalculated segment since no path points were visible")); } } From 2cd5c6b0af433b6c4dfef17b3000834c630551ba Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 22 Aug 2023 13:28:45 -0700 Subject: [PATCH 912/935] delete master stuff --- README.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/README.md b/README.md index f9797fafd..3f2923f92 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,3 @@ -# Warning: Old Branch!! - -**Click [here](https://github.com/cabaletta/baritone) to go to the current Baritone readme.** - -**This branch (`master`) is Baritone for Minecraft 1.12.2. This is the original version of Minecraft that Baritone was written for, and it was the primary development branch for over 5 years. As such, it's quite mature, and arguably more reliable than Baritone for newer versions of Minecraft. Nevertheless, as of August 2023, with [2b2t's update from 1.12.2 to 1.19.4](https://2b2t.org/update/), I decided to move Baritone's primary development branch accordingly. PRs should now be made against the `1.19.4` branch going forward. This branch might see some fixes going forward, particularly to newer features such as `#elytra`, but it won't be the primary focus anymore.** - -The other intermediary branches (`1.13.2`, `1.14.4`, `1.15.2`, `1.16.5`, `1.17.1`, `1.18.2`, `1.19.2`, and `1.19.3`) will probably not receive any updates at all. You can find their last releases in the releases tab, or in the quick download links table. - -For `1.16.5` and `1.18.2`, the latest release is fully up to date with the code. ZacSharp merged master into some of those versions even after they were deprecated, if you are for some reason really interested in the latest Baritone bugfixes on these versions of Minecraft, you can build from source as of these commits: [1.13.2](https://github.com/cabaletta/baritone/commit/be54b8ee5b5639f80e3d6809ed1abd52444d8a08), [1.14.4](https://github.com/cabaletta/baritone/commit/be54b8ee5b5639f80e3d6809ed1abd52444d8a08), [1.15.2](https://github.com/cabaletta/baritone/commit/45abbb7fa1062cefc26abbb006a02a4edd6faa32), [1.17.1](https://github.com/cabaletta/baritone/commit/cbf0d79c9c5f7454071dc0a5289261ec9ca4373f), [1.19.2](https://github.com/cabaletta/baritone/commit/217dca53633610edc9483fda7a234e46c839fd99). For `1.19.3`, merging [this](https://github.com/cabaletta/baritone/commit/217dca53633610edc9483fda7a234e46c839fd99) commit into it is trivial and is left as an exercise for the reader. For other versions in between these (for example people always ask in the Discord for 1.16.1), you'll have to figure it out yourself. - # Baritone

GitHub All Releases From a1ac87f80dec9f5febf14b312373fd35a8e061e9 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 23 Aug 2023 19:47:07 -0600 Subject: [PATCH 913/935] bump unimined --- build.gradle | 31 +++++++++---------- buildSrc/build.gradle | 8 +++-- .../baritone/gradle/task/ProguardTask.java | 25 +++++++-------- fabric/build.gradle | 18 +++++------ forge/build.gradle | 21 +++++++------ gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- tweaker/build.gradle | 10 +++--- 8 files changed, 60 insertions(+), 57 deletions(-) diff --git a/build.gradle b/build.gradle index b981972d3..1f5cd9419 100755 --- a/build.gradle +++ b/build.gradle @@ -21,13 +21,12 @@ allprojects { apply plugin: "maven-publish" archivesBaseName = rootProject.archives_base_name - def vers = 'git describe --always --tags --dirty'.execute().text.trim() - if (!vers.startsWith("v")) { - println "git doesn't appear to be installed!" + def vers = 'git describe --always --dirty'.execute().text.trim() + if (vers.isEmpty()) { println "using version number: " + rootProject.mod_version version = rootProject.mod_version } else { - version = vers.substring(1) + version = rootProject.mod_version + "-" + vers } group = rootProject.maven_group @@ -66,12 +65,6 @@ allprojects { } dependencies { - minecraft "net.minecraft:minecraft:${rootProject.minecraft_version}" - // The following line declares the mojmap mappings, you may use other mappings as well - mappings "net.fabricmc:intermediary:${rootProject.minecraft_version}:v2" - mappings "net.minecraft:minecraft:${rootProject.minecraft_version}:client-mappings" - mappings "org.parchmentmc.data:parchment-1.19.2:2022.11.27@zip" - implementation "org.spongepowered:mixin:0.8.5" implementation "org.ow2.asm:asm:9.3" // The following line declares the yarn mappings you may select this one as well. @@ -80,6 +73,16 @@ allprojects { implementation 'dev.babbaj:nether-pathfinder:1.3.0' } + unimined.minecraft(sourceSets.main, true) { + version rootProject.minecraft_version + + mappings { + intermediary() + mojmap() + parchment("2023.06.26") + } + } + tasks.withType(JavaCompile).configureEach { it.options.encoding = "UTF-8" @@ -90,8 +93,9 @@ allprojects { } } -minecraft { +unimined.minecraft { runs.off = true + defaultRemapJar = false } archivesBaseName = archivesBaseName + "-common" @@ -131,11 +135,6 @@ jar { from sourceSets.main.output, sourceSets.launch.output, sourceSets.api.output } -remapJar { - targetNamespace = "named" - fallbackTargetNamespace = "intermediary" -} - javadoc { options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error options.linkSource true diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 14b7dc3bb..d894aeec2 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -29,12 +29,16 @@ repositories { name = 'FabricMaven' url = 'https://maven.fabricmc.net/' } + maven { + name = 'NeoForgedMaven' + url = 'https://maven.neoforged.net/' + } mavenCentral() } dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' - implementation group: 'commons-io', name: 'commons-io', version: '2.6' + implementation group: 'commons-io', name: 'commons-io', version: '2.7' - implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.4' + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '1.0.5' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index bad182c1f..c2f3c5be7 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -20,14 +20,14 @@ import baritone.gradle.util.Determinizer; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.SourceSetContainer; import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskCollection; import org.gradle.api.tasks.compile.ForkOptions; import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.internal.jvm.Jvm; -import xyz.wagyourtail.unimined.api.Constants; -import xyz.wagyourtail.unimined.api.minecraft.EnvType; -import xyz.wagyourtail.unimined.api.minecraft.MinecraftProvider; +import xyz.wagyourtail.unimined.api.UniminedExtension; +import xyz.wagyourtail.unimined.api.minecraft.MinecraftConfig; import java.io.*; import java.net.URL; @@ -35,7 +35,6 @@ import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.stream.Stream; import java.util.zip.ZipEntry; @@ -63,8 +62,6 @@ public String getExtract() { private List requiredLibraries; - private File pathfinder; - @TaskAction protected void exec() throws Exception { super.doFirst(); @@ -74,21 +71,23 @@ protected void exec() throws Exception { downloadProguard(); extractProguard(); generateConfigs(); - pathfinder = acquireDependencies().filter(file -> file.getName().contains("nether-pathfinder")).findAny().get(); processArtifact(); proguardApi(); proguardStandalone(); cleanup(); } - MinecraftProvider provider = this.getProject().getExtensions().getByType(MinecraftProvider.class); + UniminedExtension ext = getProject().getExtensions().getByType(UniminedExtension.class); + SourceSetContainer sourceSets = getProject().getExtensions().getByType(SourceSetContainer.class); private File getMcJar() { - return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdFallbackNamespace()).toFile(); + MinecraftConfig mcc = ext.getMinecrafts().get(sourceSets.getByName("main")); + return mcc.getMinecraft(mcc.getMcPatcher().getProdNamespace(), mcc.getMcPatcher().getProdNamespace()).toFile(); } private boolean isMcJar(File f) { - return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f); + MinecraftConfig mcc = ext.getMinecrafts().get(sourceSets.getByName("main")); + return mcc.isMinecraftJar(f.toPath()); } private void processArtifact() throws Exception { @@ -96,7 +95,7 @@ private void processArtifact() throws Exception { Files.delete(this.artifactUnoptimizedPath); } - Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), Arrays.asList(pathfinder), false); + Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), List.of(), false); } private void downloadProguard() throws Exception { @@ -253,12 +252,12 @@ private Stream acquireDependencies() { private void proguardApi() throws Exception { runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), Arrays.asList(pathfinder), false); + Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), List.of(), false); } private void proguardStandalone() throws Exception { runProguard(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), Arrays.asList(pathfinder), false); + Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), List.of(), false); } private static final class Pair { diff --git a/fabric/build.gradle b/fabric/build.gradle index c88ff80ef..f3798343e 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -19,15 +19,14 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask plugins { - id "com.github.johnrengelman.shadow" version "7.0.0" + id "com.github.johnrengelman.shadow" version "8.0.0" } archivesBaseName = archivesBaseName + "-fabric" -minecraft { - fabric() - runs.client = { - jvmArgs.add("-XstartOnFirstThread") +unimined.minecraft { + fabric { + loader project.fabric_version } } @@ -39,8 +38,6 @@ configurations { } dependencies { - fabric "net.fabricmc:fabric-loader:${project.fabric_version}" - // because of multiple sourcesets `common project(":")` doesn't work for (sourceSet in rootProject.sourceSets) { if (sourceSet == rootProject.sourceSets.test) continue @@ -48,6 +45,7 @@ dependencies { common sourceSet.output shadowCommon sourceSet.output } + include 'dev.babbaj:nether-pathfinder:1.3.0' } processResources { @@ -60,17 +58,17 @@ processResources { shadowJar { configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { inputFile.set shadowJar.archiveFile dependsOn shadowJar - classifier null + archiveClassifier.set null } jar { - classifier "dev" + archiveClassifier.set "dev" } components.java { diff --git a/forge/build.gradle b/forge/build.gradle index bac8ca54a..d12da3201 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -19,15 +19,19 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask plugins { - id "com.github.johnrengelman.shadow" version "7.0.0" + id "com.github.johnrengelman.shadow" version "8.0.0" } archivesBaseName = archivesBaseName + "-forge" -minecraft { +unimined.minecraft { + mappings { + devFallbackNamespace "intermediary" + } + forge { - devFallbackNamespace = "intermediary" - mixinConfig = ["mixins.baritone.json"] + loader project.forge_version + mixinConfig ["mixins.baritone.json"] } } @@ -45,8 +49,6 @@ configurations { } dependencies { - forge "net.minecraftforge:forge:${rootProject.forge_version}" - // because of multiple sourcesets `common project(":")` doesn't work for (sourceSet in rootProject.sourceSets) { if (sourceSet == rootProject.sourceSets.test) continue @@ -54,6 +56,7 @@ dependencies { common sourceSet.output shadowCommon sourceSet.output } + shadowCommon 'dev.babbaj:nether-pathfinder:1.3.0' } processResources { @@ -66,17 +69,17 @@ processResources { shadowJar { configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { inputFile.set shadowJar.archiveFile dependsOn shadowJar - classifier null + archiveClassifier.set null } jar { - classifier "dev" + archiveClassifier.set "dev" manifest { attributes( diff --git a/gradle.properties b/gradle.properties index 1de9c913d..77fe67e7f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,5 +5,5 @@ maven_group=baritone archives_base_name=baritone minecraft_version=1.19.4 -forge_version=1.19.4-45.0.43 +forge_version=45.0.43 fabric_version=0.14.11 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 00e33edef..15de90249 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/tweaker/build.gradle b/tweaker/build.gradle index ce623af6c..724c50d29 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -20,10 +20,10 @@ import baritone.gradle.task.ProguardTask //import baritone.gradle.task.TweakerJsonAssembler plugins { - id "com.github.johnrengelman.shadow" version "7.0.0" + id "com.github.johnrengelman.shadow" version "8.0.0" } -minecraft { +unimined.minecraft { runs.client = { mainClass = "net.minecraft.launchwrapper.Launch" args.addAll(["--tweakClass", "baritone.launch.BaritoneTweaker"]) @@ -67,18 +67,18 @@ dependencies { shadowJar { configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { inputFile.set shadowJar.archiveFile dependsOn shadowJar - classifier null + archiveClassifier.set null } jar { - classifier "dev" + archiveClassifier.set "dev" preserveFileTimestamps = false reproducibleFileOrder = true From 81932069d98eebb6e0cf81efe9aeb279594c1c40 Mon Sep 17 00:00:00 2001 From: leijurv Date: Wed, 13 Sep 2023 21:25:59 -0700 Subject: [PATCH 914/935] remove footgun --- src/main/java/baritone/cache/CachedWorld.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index e456382e6..aed1faeb5 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -196,9 +196,7 @@ private synchronized void prune() { int distZ = ((region.getZ() << 9) + 256) - pruneCenter.getZ(); double dist = Math.sqrt(distX * distX + distZ * distZ); if (dist > 1024) { - if (!Baritone.settings().censorCoordinates.value) { - logDebug("Deleting cached region " + region.getX() + "," + region.getZ() + " from ram"); - } + logDebug("Deleting cached region from ram"); cachedRegions.remove(getRegionID(region.getX(), region.getZ())); } } From 9ad273a46c689cb469b3da1fd870615b7c805ebe Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sat, 23 Sep 2023 17:00:11 -0400 Subject: [PATCH 915/935] silence elytra chat spam --- fabric/build.gradle | 2 +- src/api/java/baritone/api/Settings.java | 5 +++ .../java/baritone/process/ElytraProcess.java | 20 ++++++------ .../process/elytra/ElytraBehavior.java | 32 +++++++++++-------- 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index c88ff80ef..30ed3926d 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -103,4 +103,4 @@ publishing { repositories { // Add repositories to publish to here. } -} \ No newline at end of file +} diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index adbbd6eaa..9171a3d68 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1468,6 +1468,11 @@ public final class Settings { */ public final Setting elytraTermsAccepted = new Setting<>(false); + /** + * Verbose chat logging in elytra mode + */ + public final Setting elytraChatSpam = new Setting<>(false); + /** * A map of lowercase setting field names to their respective setting */ diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index d1e10a5cf..2c57c6f55 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -69,6 +69,16 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro private ElytraBehavior behavior; private boolean predictingTerrain; + @Override + public void onLostControl() { + this.state = State.START_FLYING; // TODO: null state? + this.goingToLandingSpot = false; + this.landingSpot = null; + this.reachedGoal = false; + this.goal = null; + destroyBehaviorAsync(); + } + private ElytraProcess(Baritone baritone) { super(baritone); baritone.getGameEventHandler().registerEventListener(this); @@ -276,16 +286,6 @@ public void landingSpotIsBad(BetterBlockPos endPos) { this.state = State.FLYING; } - @Override - public void onLostControl() { - this.goal = null; - this.goingToLandingSpot = false; - this.landingSpot = null; - this.reachedGoal = false; - this.state = State.START_FLYING; // TODO: null state? - destroyBehaviorAsync(); - } - private void destroyBehaviorAsync() { ElytraBehavior behavior = this.behavior; if (behavior != null) { diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 501c6a22b..d4913f466 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -174,9 +174,9 @@ public CompletableFuture pathToDestination(final BlockPos from) { .thenRun(() -> { final double distance = this.path.get(0).distanceTo(this.path.get(this.path.size() - 1)); if (this.completePath) { - logDirect(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); + logVerbose(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); } else { - logDirect(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); + logVerbose(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); } }) .whenComplete((result, ex) -> { @@ -231,9 +231,9 @@ public void pathNextSegment(final int afterIncl) { final double distance = this.path.get(0).distanceTo(this.path.get(recompute)); if (this.completePath) { - logDirect(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); + logVerbose(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); } else { - logDirect(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); + logVerbose(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); } }) .whenComplete((result, ex) -> { @@ -243,7 +243,7 @@ public void pathNextSegment(final int afterIncl) { if (cause instanceof PathCalculationException) { logDirect("Failed to compute next segment"); if (ctx.player().distanceToSqr(pathStart.getCenter()) < 16 * 16) { - logDirect("Player is near the segment start, therefore repeating this calculation is pointless. Marking as complete"); + logVerbose("Player is near the segment start, therefore repeating this calculation is pointless. Marking as complete"); completePath = true; } } else { @@ -321,7 +321,7 @@ private void pathfindAroundObstacles() { if (ElytraBehavior.this.process.state != ElytraProcess.State.LANDING && this.ticksNearUnchanged > 100) { this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1)) .thenRun(() -> { - logDirect("Recalculating segment, no progress in last 100 ticks"); + logVerbose("Recalculating segment, no progress in last 100 ticks"); }); this.ticksNearUnchanged = 0; return; @@ -348,7 +348,7 @@ private void pathfindAroundObstacles() { final long start = System.nanoTime(); this.pathRecalcSegment(rejoinMainPathAt) .thenRun(() -> { - logDirect(String.format("Recalculated segment around path blockage near %s %s %s (next %.1f blocks in %.4f seconds)", + logVerbose(String.format("Recalculated segment around path blockage near %s %s %s (next %.1f blocks in %.4f seconds)", SettingsUtil.maybeCensor(blockage.x), SettingsUtil.maybeCensor(blockage.y), SettingsUtil.maybeCensor(blockage.z), @@ -360,7 +360,7 @@ private void pathfindAroundObstacles() { } } if (!canSeeAny && rangeStartIncl < rangeEndExcl - 2 && process.state != ElytraProcess.State.GET_TO_JUMP) { - this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1)).thenRun(() -> logDirect("Recalculated segment since no path points were visible")); + this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1)).thenRun(() -> logVerbose("Recalculated segment since no path points were visible")); } } @@ -581,10 +581,10 @@ public void tick() { trySwapElytra(); if (ctx.player().horizontalCollision) { - logDirect("hbonk"); + logVerbose("hbonk"); } if (ctx.player().verticalCollision) { - logDirect("vbonk"); + logVerbose("vbonk"); } final SolverContext solverContext = this.new SolverContext(false); @@ -609,14 +609,14 @@ public void tick() { } if (solution == null) { - logDirect("no solution"); + logVerbose("no solution"); return; } baritone.getLookBehavior().updateTarget(solution.rotation, false); if (!solution.solvedPitch) { - logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!"); + logVerbose("no pitch solution, probably gonna crash in a few ticks LOL!!!"); return; } else { this.aimPos = new BetterBlockPos(solution.goingTo.x, solution.goingTo.y, solution.goingTo.z); @@ -758,7 +758,7 @@ private void tickUseFireworks(final Vec3 start, final Vec3 goingTo, final boolea logDirect("no fireworks"); return; } - logDirect("attempting to use firework" + (forceUseFirework ? " (forced)" : "")); + logVerbose("attempting to use firework" + (forceUseFirework ? " (forced)" : "")); ctx.playerController().processRightClick(ctx.player(), ctx.world(), InteractionHand.MAIN_HAND); this.minimumBoostTicks = 10 * (1 + getFireworkBoost(ctx.player().getItemInHand(InteractionHand.MAIN_HAND)).orElse(0)); this.remainingFireworkTicks = 10; @@ -1317,4 +1317,10 @@ private void trySwapElytra() { queueWindowClick(ctx.player().inventoryMenu.containerId, slotId, 0, ClickType.PICKUP); } } + + void logVerbose(String message) { + if (Baritone.settings().elytraChatSpam.value) { + logDebug(message); + } + } } From 4db988dbefe819d628f5e5ea75b6514fa3af5181 Mon Sep 17 00:00:00 2001 From: rfresh2 <89827146+rfresh2@users.noreply.github.com> Date: Sun, 24 Sep 2023 15:34:59 -0700 Subject: [PATCH 916/935] fix forge mixin crash --- .../launch/mixins/MixinClientPlayerEntity.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index 4674ffaa6..24e807f62 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -26,8 +26,6 @@ import net.minecraft.client.KeyMapping; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.entity.player.Abilities; -import net.minecraft.world.item.ElytraItem; -import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -112,14 +110,14 @@ private void updateRidden(CallbackInfo cb) { method = "aiStep", at = @At( value = "INVOKE", - target = "net/minecraft/world/item/ElytraItem.isFlyEnabled(Lnet/minecraft/world/item/ItemStack;)Z" + target = "Lnet/minecraft/client/player/LocalPlayer;tryToStartFallFlying()Z" ) ) - private boolean isFlyEnabled(ItemStack stack) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); + private boolean tryToStartFallFlying(final LocalPlayer instance) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(instance); if (baritone != null && baritone.getPathingBehavior().isPathing()) { return false; } - return ElytraItem.isFlyEnabled(stack); + return instance.tryToStartFallFlying(); } } From 7902517663436488bc7762e7a6a68be4956b1c63 Mon Sep 17 00:00:00 2001 From: rfresh2 <89827146+rfresh2@users.noreply.github.com> Date: Sun, 24 Sep 2023 15:34:59 -0700 Subject: [PATCH 917/935] fix forge mixin crash --- .../launch/mixins/MixinClientPlayerEntity.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index 4674ffaa6..24e807f62 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -26,8 +26,6 @@ import net.minecraft.client.KeyMapping; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.entity.player.Abilities; -import net.minecraft.world.item.ElytraItem; -import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -112,14 +110,14 @@ private void updateRidden(CallbackInfo cb) { method = "aiStep", at = @At( value = "INVOKE", - target = "net/minecraft/world/item/ElytraItem.isFlyEnabled(Lnet/minecraft/world/item/ItemStack;)Z" + target = "Lnet/minecraft/client/player/LocalPlayer;tryToStartFallFlying()Z" ) ) - private boolean isFlyEnabled(ItemStack stack) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); + private boolean tryToStartFallFlying(final LocalPlayer instance) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(instance); if (baritone != null && baritone.getPathingBehavior().isPathing()) { return false; } - return ElytraItem.isFlyEnabled(stack); + return instance.tryToStartFallFlying(); } } From f5d15927de1af71e7b312855a5798dc76c811fcc Mon Sep 17 00:00:00 2001 From: rfresh2 <89827146+rfresh2@users.noreply.github.com> Date: Fri, 22 Sep 2023 19:22:03 -0700 Subject: [PATCH 918/935] 1.20.2 --- fabric/src/main/resources/fabric.mod.json | 4 +- forge/src/main/resources/META-INF/mods.toml | 4 +- gradle.properties | 8 +- .../mixins/MixinClientPlayNetHandler.java | 17 +-- .../launch/mixins/MixinNetworkManager.java | 6 +- .../java/baritone/cache/WorldProvider.java | 2 +- .../java/baritone/process/FarmProcess.java | 2 +- .../java/baritone/launch/LaunchTesting.java | 105 ------------------ 8 files changed, 21 insertions(+), 127 deletions(-) delete mode 100644 tweaker/src/main/java/baritone/launch/LaunchTesting.java diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 66f1ee1aa..6fd5c42df 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -25,7 +25,7 @@ ], "depends": { - "fabricloader": ">=0.11.0", - "minecraft": ">=1.20 <=1.20.1" + "fabricloader": ">=0.14.22", + "minecraft": "1.20.2" } } diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index b29b3b1a0..24b35ab23 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -6,7 +6,7 @@ # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[46,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion="[48,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" # A URL to refer people to when problems occur with this mod issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.20,1.20.1]" +versionRange="[1.20.2]" ordering="NONE" side="BOTH" diff --git a/gradle.properties b/gradle.properties index f665e9537..9cf5e6f4c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx4G available_loaders=fabric,forge,tweaker -mod_version=1.10.1 +mod_version=1.10.2 maven_group=baritone archives_base_name=baritone -minecraft_version=1.20.1 -forge_version=1.20.1-47.0.1 -fabric_version=0.14.18 +minecraft_version=1.20.2 +forge_version=1.20.2-48.0.1 +fabric_version=0.14.22 diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index 6b4564aa9..d603ca632 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -27,15 +27,16 @@ import baritone.api.utils.Pair; import baritone.cache.CachedChunk; import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl; import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.multiplayer.CommonListenerCookie; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; +import net.minecraft.network.Connection; import net.minecraft.network.protocol.game.*; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.block.state.BlockState; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -48,7 +49,7 @@ * @since 8/3/2018 */ @Mixin(ClientPacketListener.class) -public class MixinClientPlayNetHandler { +public abstract class MixinClientPlayNetHandler extends ClientCommonPacketListenerImpl { // unused lol /*@Inject( @@ -74,9 +75,9 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { } }*/ - @Shadow - @Final - private Minecraft minecraft; + protected MixinClientPlayNetHandler(final Minecraft arg, final Connection arg2, final CommonListenerCookie arg3) { + super(arg, arg2, arg3); + } @Inject( method = "sendChat(Ljava/lang/String;)V", @@ -124,7 +125,7 @@ private void preChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackIn LocalPlayer player = ibaritone.getPlayerContext().player(); if (player != null && player.connection == (ClientPacketListener) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent(EventState.PRE, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) + new ChunkEvent(EventState.PRE, ChunkEvent.Type.UNLOAD, packet.pos().x, packet.pos().z) ); } } @@ -139,7 +140,7 @@ private void postChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackI LocalPlayer player = ibaritone.getPlayerContext().player(); if (player != null && player.connection == (ClientPacketListener) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent(EventState.POST, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) + new ChunkEvent(EventState.POST, ChunkEvent.Type.UNLOAD, packet.pos().x, packet.pos().z) ); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 057a49b4b..2d35800eb 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -23,8 +23,6 @@ import baritone.api.event.events.type.EventState; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; -import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.GenericFutureListener; import net.minecraft.network.Connection; import net.minecraft.network.PacketSendListener; import net.minecraft.network.protocol.Packet; @@ -54,7 +52,7 @@ public class MixinNetworkManager { method = "sendPacket", at = @At("HEAD") ) - private void preDispatchPacket(Packet packet, PacketSendListener packetSendListener, CallbackInfo ci) { + private void preDispatchPacket(Packet packet, PacketSendListener packetSendListener, boolean flush, CallbackInfo ci) { if (this.receiving != PacketFlow.CLIENTBOUND) { return; } @@ -70,7 +68,7 @@ private void preDispatchPacket(Packet packet, PacketSendListener packetSendLi method = "sendPacket", at = @At("RETURN") ) - private void postDispatchPacket(Packet packet, PacketSendListener packetSendListener, CallbackInfo ci) { + private void postDispatchPacket(Packet packet, PacketSendListener packetSendListener, boolean flush, CallbackInfo ci) { if (this.receiving != PacketFlow.CLIENTBOUND) { return; } diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 035b50b98..38202e65b 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -140,7 +140,7 @@ private Optional> getSaveDirectories(Level world) { String folderName; final ServerData serverData = ctx.minecraft().getCurrentServer(); if (serverData != null) { - folderName = ctx.minecraft().isConnectedToRealms() ? "realms" : serverData.ip; + folderName = serverData.isRealm() ? "realms" : serverData.ip; } else { //replaymod causes null currentServer and false singleplayer. System.out.println("World seems to be a replay. Not loading Baritone cache."); diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index c453beff2..bccb021c6 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -249,7 +249,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (state.getBlock() instanceof BonemealableBlock) { BonemealableBlock ig = (BonemealableBlock) state.getBlock(); - if (ig.isValidBonemealTarget(ctx.world(), pos, state, true) && ig.isBonemealSuccess(ctx.world(), ctx.world().random, pos, state)) { + if (ig.isValidBonemealTarget(ctx.world(), pos, state) && ig.isBonemealSuccess(ctx.world(), ctx.world().random, pos, state)) { bonemealable.add(pos); } } diff --git a/tweaker/src/main/java/baritone/launch/LaunchTesting.java b/tweaker/src/main/java/baritone/launch/LaunchTesting.java deleted file mode 100644 index 21607ae34..000000000 --- a/tweaker/src/main/java/baritone/launch/LaunchTesting.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * 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; - -import com.google.common.base.Strings; -import com.google.gson.GsonBuilder; -import com.mojang.authlib.Agent; -import com.mojang.authlib.exceptions.AuthenticationException; -import com.mojang.authlib.properties.PropertyMap; -import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; -import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication; -import net.minecraft.launchwrapper.Launch; - -import java.io.File; -import java.lang.reflect.Field; -import java.net.Proxy; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Based on GradleStart from ForgeGradle 2.3 - * - * @author Brady - * @since 3/11/2019 - */ -public class LaunchTesting { - - public static void main(String[] args) { - Map arguments = new HashMap<>(); - - hackNatives(); - arguments.put("version", "BaritownedDeveloperEnvironment"); - arguments.put("assetIndex", System.getenv("assetIndex")); - arguments.put("assetsDir", System.getenv().getOrDefault("assetDirectory", "assets")); - arguments.put("accessToken", "FML"); - arguments.put("userProperties", "{}"); - arguments.put("tweakClass", System.getenv("tweakClass")); - String password = System.getenv("password"); - if (password != null && !password.isEmpty()) { - attemptLogin(arguments, System.getenv("username"), System.getenv("password")); - } - - List argsArray = new ArrayList<>(); - arguments.forEach((k, v) -> { - argsArray.add("--" + k); - argsArray.add(v); - }); - - Launch.main(argsArray.toArray(new String[0])); - } - - private static void hackNatives() { - String paths = System.getProperty("java.library.path"); - String nativesDir = System.getenv().get("nativesDirectory"); - - if (Strings.isNullOrEmpty(paths)) - paths = nativesDir; - else - paths += File.pathSeparator + nativesDir; - - System.setProperty("java.library.path", paths); - - // hack the classloader now. - try { - final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths"); - sysPathsField.setAccessible(true); - sysPathsField.set(null, null); - } catch (Throwable ignored) {} - } - - private static void attemptLogin(Map argMap, String username, String password) { - YggdrasilUserAuthentication auth = (YggdrasilUserAuthentication) (new YggdrasilAuthenticationService(Proxy.NO_PROXY, "1")).createUserAuthentication(Agent.MINECRAFT); - auth.setUsername(username); - auth.setPassword(password); - - try { - auth.logIn(); - } catch (AuthenticationException var4) { - throw new RuntimeException(var4); - } - - argMap.put("accessToken", auth.getAuthenticatedToken()); - argMap.put("uuid", auth.getSelectedProfile().getId().toString().replace("-", "")); - argMap.put("username", auth.getSelectedProfile().getName()); - argMap.put("userType", auth.getUserType().getName()); - argMap.put("userProperties", (new GsonBuilder()).registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer()).create().toJson(auth.getUserProperties())); - } -} From 91588caf7dfbded6cd5f80e2e5a12524be54dd0b Mon Sep 17 00:00:00 2001 From: leijurv Date: Thu, 28 Sep 2023 20:42:08 -0700 Subject: [PATCH 919/935] oh my GOD --- src/main/java/baritone/utils/BlockStateInterface.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 2931b9392..095694db9 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -132,7 +132,7 @@ public BlockState get0(int x, int y, int z) { // Mickey resigned prevCached = region; cached = region; } - BlockState type = cached.getBlock(x & 511, y, z & 511); + BlockState type = cached.getBlock(x & 511, y + world.dimensionType().minY(), z & 511); if (type == null) { return AIR; } From 74457db125737aa4ae0b84eaf9ad3c45c8864be8 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Wed, 4 Oct 2023 19:24:09 -0600 Subject: [PATCH 920/935] actually fix mine under 0 height --- src/main/java/baritone/cache/FasterWorldScanner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index e1c8589e7..65e56975a 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -151,7 +151,7 @@ private Stream scanChunkInternal(IPlayerContext ctx, BlockOptionalMeta long chunkX = (long) pos.x << 4; long chunkZ = (long) pos.z << 4; - int playerSectionY = ctx.playerFeet().y >> 4; + int playerSectionY = (ctx.playerFeet().y - ctx.world().getMinBuildHeight()) >> 4; return collectChunkSections(lookup, chunkProvider.getChunk(pos.x, pos.z, false), chunkX, chunkZ, playerSectionY).stream(); } From 3332ec9e1ff60f985cde0d1bd120025b795d6e24 Mon Sep 17 00:00:00 2001 From: Xiaodown Date: Wed, 11 Oct 2023 19:25:51 -0700 Subject: [PATCH 921/935] Adds git to the Dockerfile apt install I saw in setup.md "(if you have docker on Windows, I'd be grateful if you could let me know if it works there too)". So I went to build it on Windows. I use Windows Subsystem for Linux, which is (mostly) Ubuntu but not really (there's no init). But Docker Desktop has an integration for WSL2. For me, gradle wouldn't build the image without forcing git to install in the container. I'll attach screenshots to the pull request. It just looks like whatever ubuntu:focal my docker system grabbed doesn't have git installed by default. Anyway, this fixes it, and shouldn't screw anything even if git is installed by default. I tested it on my M1 Mac pro and it still works fine. --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 9023e2020..8a00fc3da 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,7 @@ RUN apt update -y RUN apt install \ openjdk-17-jdk \ + git \ --assume-yes COPY . /code From 1dd2a334d6747ff8575ae54deabb217496c312af Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:33:15 +0200 Subject: [PATCH 922/935] Handle duplicate palette entries --- .../baritone/cache/FasterWorldScanner.java | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index 65e56975a..b6d3d8963 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -20,6 +20,7 @@ import baritone.api.cache.ICachedWorld; import baritone.api.cache.IWorldScanner; import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; import baritone.utils.accessor.IPalettedContainer; @@ -45,6 +46,9 @@ public enum FasterWorldScanner implements IWorldScanner { INSTANCE; + + private static final BlockState[] PALETTE_REGISTRY_SENTINEL = new BlockState[0]; + @Override public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) { assert ctx.world() != null; @@ -219,13 +223,18 @@ private void visitSection(BlockOptionalMetaLookup lookup, LevelChunkSection sect private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, Palette palette) { boolean commonBlockFound = false; - IdMapper paletteMap = getPalette(palette); - int size = paletteMap.size(); + BlockState[] paletteMap = getPalette(palette); + + if (paletteMap == PALETTE_REGISTRY_SENTINEL) { + return getIncludedFilterIndicesFromRegistry(lookup); + } + + int size = paletteMap.length; boolean[] isInFilter = new boolean[size]; for (int i = 0; i < size; i++) { - BlockState state = paletteMap.byId(i); + BlockState state = paletteMap[i]; if (lookup.has(state)) { isInFilter[i] = true; commonBlockFound = true; @@ -240,21 +249,34 @@ private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, Palet return isInFilter; } + private boolean[] getIncludedFilterIndicesFromRegistry(BlockOptionalMetaLookup lookup) { + boolean[] isInFilter = new boolean[Block.BLOCK_STATE_REGISTRY.size()]; + + for (BlockOptionalMeta bom : lookup.blocks()) { + for (BlockState state : bom.getAllBlockStates()) { + isInFilter[Block.BLOCK_STATE_REGISTRY.getId(state)] = true; + } + } + + return isInFilter; + } + /** * cheats to get the actual map of id -> blockstate from the various palette implementations */ - private static IdMapper getPalette(Palette palette) { + private static BlockState[] getPalette(Palette palette) { if (palette instanceof GlobalPalette) { - return Block.BLOCK_STATE_REGISTRY; + // copying the entire registry is not nice so we treat it as a special case + return PALETTE_REGISTRY_SENTINEL; } else { FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); palette.write(buf); int size = buf.readVarInt(); - IdMapper states = new IdMapper<>(); + BlockState[] states = new BlockState[size]; for (int i = 0; i < size; i++) { BlockState state = Block.BLOCK_STATE_REGISTRY.byId(buf.readVarInt()); assert state != null; - states.addMapping(state, i); + states[i] = state; } return states; } From 0ca81b14bf438351725072cfd3deb3ac41f8df9c Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Wed, 18 Oct 2023 16:34:25 +0200 Subject: [PATCH 923/935] Restore `buildIgnoreExisting` --- src/main/java/baritone/process/BuilderProcess.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 86378bbbc..0ae796e6e 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -1063,6 +1063,9 @@ private boolean valid(BlockState current, BlockState desired, boolean itemVerify if (desired.getBlock() instanceof AirBlock && Baritone.settings().buildIgnoreBlocks.value.contains(current.getBlock())) { return true; } + if (!(current.getBlock() instanceof AirBlock) && Baritone.settings().buildIgnoreExisting.value && !itemVerify) { + return true; + } if (Baritone.settings().buildSkipBlocks.value.contains(desired.getBlock()) && !itemVerify) { return true; } From 20d62c68bfacbac3173dfa8f819b4d05e40d4a68 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sun, 15 Oct 2023 20:50:23 +0200 Subject: [PATCH 924/935] Slightly better version strings --- .github/workflows/gradle_build.yml | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 08e9ab1d3..9d4ed379b 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -28,7 +28,7 @@ jobs: run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)" + run: ./gradlew build -Pmod_version="$(git describe --always --tags --first-parent | cut -c2-)" - name: Archive Artifacts uses: actions/upload-artifact@v3 diff --git a/build.gradle b/build.gradle index 9371211b0..b8cc58196 100755 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ allprojects { apply plugin: "maven-publish" archivesBaseName = rootProject.archives_base_name - def vers = 'git describe --always --tags --dirty'.execute().text.trim() + def vers = 'git describe --always --tags --first-parent --dirty'.execute().text.trim() if (!vers.startsWith("v")) { println "git doesn't appear to be installed!" println "using version number: " + rootProject.mod_version From 9accb2bfb0bea36cfe63940f2cc20f39af73517c Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Sun, 15 Oct 2023 20:51:17 +0200 Subject: [PATCH 925/935] Don't crash the build if git is not available --- build.gradle | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index b8cc58196..dbbc2cebb 100755 --- a/build.gradle +++ b/build.gradle @@ -21,13 +21,18 @@ allprojects { apply plugin: "maven-publish" archivesBaseName = rootProject.archives_base_name - def vers = 'git describe --always --tags --first-parent --dirty'.execute().text.trim() + def vers = "" + try { + vers = 'git describe --always --tags --first-parent --dirty'.execute().text.trim() + } catch (Exception e) { + println "Version detection failed: " + e + } if (!vers.startsWith("v")) { - println "git doesn't appear to be installed!" println "using version number: " + rootProject.mod_version version = rootProject.mod_version } else { version = vers.substring(1) + println "Detected version " + version } group = rootProject.maven_group From 19accb0d9025db392af2fe4a3f79ffdc41df4960 Mon Sep 17 00:00:00 2001 From: ZacSharp <68165024+ZacSharp@users.noreply.github.com> Date: Thu, 16 Nov 2023 23:21:01 +0100 Subject: [PATCH 926/935] Fix scanning in chunks using a SingleValuePalette --- .../baritone/cache/FasterWorldScanner.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index b6d3d8963..cabc76d64 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -38,6 +38,7 @@ import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.Palette; import net.minecraft.world.level.chunk.PalettedContainer; +import net.minecraft.world.level.chunk.SingleValuePalette; import java.util.ArrayList; import java.util.List; @@ -191,7 +192,29 @@ private void visitSection(BlockOptionalMetaLookup lookup, LevelChunkSection sect return; } - boolean[] isInFilter = getIncludedFilterIndices(lookup, ((IPalettedContainer) sectionContainer).getPalette()); + int yOffset = section.bottomBlockY(); + Palette palette = ((IPalettedContainer) sectionContainer).getPalette(); + + if (palette instanceof SingleValuePalette) { + // single value palette doesn't have any data + if (lookup.has(palette.valueFor(0))) { + // TODO this is 4k hits, maybe don't return all of them? + for (int x = 0; x < 16; ++x) { + for (int y = 0; y < 16; ++y) { + for (int z = 0; z < 16; ++z) { + blocks.add(new BlockPos( + (int) chunkX + x, + yOffset + y, + (int) chunkZ + z + )); + } + } + } + } + return; + } + + boolean[] isInFilter = getIncludedFilterIndices(lookup, palette); if (isInFilter.length == 0) { return; } @@ -202,9 +225,6 @@ private void visitSection(BlockOptionalMetaLookup lookup, LevelChunkSection sect int bitsPerEntry = array.getBits(); long maxEntryValue = (1L << bitsPerEntry) - 1L; - - int yOffset = section.bottomBlockY(); - for (int i = 0, idx = 0; i < longArray.length && idx < arraySize; ++i) { long l = longArray[i]; for (int offset = 0; offset <= (64 - bitsPerEntry) && idx < arraySize; offset += bitsPerEntry, ++idx) { From c1b555c2890cfdfba8c038bdeccfbf742299edfc Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 23 Nov 2023 19:11:39 -0700 Subject: [PATCH 927/935] bump parchment --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 086d16c90..7d043618c 100755 --- a/build.gradle +++ b/build.gradle @@ -86,7 +86,7 @@ allprojects { mappings { intermediary() mojmap() - parchment("2023.06.26") + parchment("2023.10.22") } } From 3dbcf0102a09f3da1854487b32f1bd50ceca205a Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 23 Nov 2023 19:14:10 -0700 Subject: [PATCH 928/935] fix forge version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 9cf5e6f4c..7654ecc47 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,5 +7,5 @@ maven_group=baritone archives_base_name=baritone minecraft_version=1.20.2 -forge_version=1.20.2-48.0.1 +forge_version=48.0.1 fabric_version=0.14.22 From 21feeb664ed74e31471cef81d483d490a15361b9 Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 23 Nov 2023 19:31:55 -0700 Subject: [PATCH 929/935] fix missing function --- src/main/java/baritone/cache/FasterWorldScanner.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java index 4912764c4..e364fd7b4 100644 --- a/src/main/java/baritone/cache/FasterWorldScanner.java +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -192,7 +192,6 @@ private void visitSection(BlockOptionalMetaLookup lookup, LevelChunkSection sect return; } - int yOffset = section.bottomBlockY(); Palette palette = ((IPalettedContainer) sectionContainer).getPalette(); if (palette instanceof SingleValuePalette) { @@ -204,7 +203,7 @@ private void visitSection(BlockOptionalMetaLookup lookup, LevelChunkSection sect for (int z = 0; z < 16; ++z) { blocks.add(new BlockPos( (int) chunkX + x, - yOffset + y, + sectionY + y, (int) chunkZ + z )); } From 4b6652b4cf7632567d90a4ec2aa163e0f4f4497d Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Thu, 7 Dec 2023 14:18:39 -0700 Subject: [PATCH 930/935] 1.20.4 --- build.gradle | 6 +- buildSrc/build.gradle | 2 +- fabric/build.gradle | 2 +- fabric/src/main/resources/fabric.mod.json | 3 +- forge/build.gradle | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 11 +- neoforge/build.gradle | 134 ++++++++++++++++++ neoforge/gradle.properties | 18 +++ .../baritone/launch/BaritoneForgeModXD.java | 24 ++++ .../src/main/resources/META-INF/mods.toml | 40 ++++++ neoforge/src/main/resources/pack.mcmeta | 6 + .../launch/mixins/MixinMinecraft.java | 5 +- .../baritone/command/defaults/SelCommand.java | 2 +- .../java/baritone/process/BuilderProcess.java | 3 +- .../java/baritone/selection/Selection.java | 2 +- .../baritone/selection/SelectionRenderer.java | 4 +- .../format/DefaultSchematicFormats.java | 7 +- 18 files changed, 251 insertions(+), 22 deletions(-) create mode 100644 neoforge/build.gradle create mode 100644 neoforge/gradle.properties create mode 100644 neoforge/src/main/java/baritone/launch/BaritoneForgeModXD.java create mode 100644 neoforge/src/main/resources/META-INF/mods.toml create mode 100644 neoforge/src/main/resources/pack.mcmeta diff --git a/build.gradle b/build.gradle index 7d043618c..011f08993 100755 --- a/build.gradle +++ b/build.gradle @@ -77,7 +77,9 @@ allprojects { // The following line declares the yarn mappings you may select this one as well. // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" //launchImplementation('dev.babbaj:nether-pathfinder:1.3.0') - implementation 'dev.babbaj:nether-pathfinder:1.4.1' + implementation "dev.babbaj:nether-pathfinder:${nether_pathfinder_version}" + + implementation 'com.google.code.findbugs:jsr305:3.0.2' } unimined.minecraft(sourceSets.main, true) { @@ -86,7 +88,7 @@ allprojects { mappings { intermediary() mojmap() - parchment("2023.10.22") + parchment("1.20.2", "2023.10.22") } } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index d894aeec2..a58fe6089 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -40,5 +40,5 @@ dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' implementation group: 'commons-io', name: 'commons-io', version: '2.7' - implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '1.0.5' + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '1.1.0' } \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index 9674f4e7a..e6a88b352 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -45,7 +45,7 @@ dependencies { common sourceSet.output shadowCommon sourceSet.output } - include 'dev.babbaj:nether-pathfinder:1.3.0' + include "dev.babbaj:nether-pathfinder:${nether_pathfinder_version}" } processResources { diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 6fd5c42df..0260fcb1a 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -1,4 +1,3 @@ - { "schemaVersion": 1, "id": "baritone", @@ -26,6 +25,6 @@ "depends": { "fabricloader": ">=0.14.22", - "minecraft": "1.20.2" + "minecraft": "1.20.4" } } diff --git a/forge/build.gradle b/forge/build.gradle index d12da3201..6ec55bc12 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -56,7 +56,7 @@ dependencies { common sourceSet.output shadowCommon sourceSet.output } - shadowCommon 'dev.babbaj:nether-pathfinder:1.3.0' + shadowCommon "dev.babbaj:nether-pathfinder:${nether_pathfinder_version}" } processResources { diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 24b35ab23..1dc9b341c 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.20.2]" +versionRange="[1.20.4]" ordering="NONE" side="BOTH" diff --git a/gradle.properties b/gradle.properties index 7654ecc47..35c62e0a7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,11 +1,16 @@ org.gradle.jvmargs=-Xmx4G -available_loaders=fabric,forge,tweaker +available_loaders=fabric,forge,neoforge,tweaker mod_version=1.10.2 maven_group=baritone archives_base_name=baritone -minecraft_version=1.20.2 -forge_version=48.0.1 +minecraft_version=1.20.4 + +forge_version=49.0.3 +neoforge_version=0-beta + fabric_version=0.14.22 + +nether_pathfinder_version=1.4.1 \ No newline at end of file diff --git a/neoforge/build.gradle b/neoforge/build.gradle new file mode 100644 index 000000000..ac102dace --- /dev/null +++ b/neoforge/build.gradle @@ -0,0 +1,134 @@ +/* + * 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 . + */ + +import baritone.gradle.task.CreateDistTask +import baritone.gradle.task.ProguardTask + +plugins { + id "com.github.johnrengelman.shadow" version "8.0.0" +} + +archivesBaseName = archivesBaseName + "-neoforge" + +unimined.minecraft { + mappings { + devFallbackNamespace "intermediary" + } + + neoForged { + loader project.neoforge_version + mixinConfig ["mixins.baritone.json"] + } + + minecraftRemapper.config { + // neoforge adds 1 conflict, where 2 interfaces have a method with the same name on yarn/mojmap, + // but the method has different names in the intermediary mappings. + // this is a conflict because they have a class that extends both interfaces. + // this shouldn't be a problem as long as named mappings don't make the name of those 2 methods different. + ignoreConflicts(true) + } + +} + +//loom { +// forge { +// mixinConfig 'mixins.baritone.json' +// } +//} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common +} + +dependencies { + // because of multiple sourcesets `common project(":")` doesn't work + for (sourceSet in rootProject.sourceSets) { + if (sourceSet == rootProject.sourceSets.test) continue + if (sourceSet == rootProject.sourceSets.schematica_api) continue + common sourceSet.output + shadowCommon sourceSet.output + } + shadowCommon "dev.babbaj:nether-pathfinder:${nether_pathfinder_version}" +} + +processResources { + inputs.property "version", project.version + + filesMatching("META-INF/mods.toml") { + expand "version": project.version + } +} + +shadowJar { + configurations = [project.configurations.shadowCommon] + archiveClassifier.set "dev-shadow" +} + +remapJar { + inputFile.set shadowJar.archiveFile + dependsOn shadowJar + archiveClassifier.set null +} + +jar { + archiveClassifier.set "dev" + + manifest { + attributes( + 'MixinConfigs': 'mixins.baritone.json', + "MixinConnector": "baritone.launch.BaritoneMixinConnector", + + 'Implementation-Title': 'Baritone', + 'Implementation-Version': version, + ) + } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "neoforge" +} + +task createDist(type: CreateDistTask, dependsOn: proguard) { + compType "neoforge" +} + +build.finalizedBy(createDist) + +publishing { + publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} \ No newline at end of file diff --git a/neoforge/gradle.properties b/neoforge/gradle.properties new file mode 100644 index 000000000..24befc474 --- /dev/null +++ b/neoforge/gradle.properties @@ -0,0 +1,18 @@ +# +# 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 . +# + +loom.platform=forge \ No newline at end of file diff --git a/neoforge/src/main/java/baritone/launch/BaritoneForgeModXD.java b/neoforge/src/main/java/baritone/launch/BaritoneForgeModXD.java new file mode 100644 index 000000000..de097320d --- /dev/null +++ b/neoforge/src/main/java/baritone/launch/BaritoneForgeModXD.java @@ -0,0 +1,24 @@ +/* + * 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; + +import net.neoforged.fml.common.Mod; + +@Mod("baritoe") +public class BaritoneForgeModXD { +} diff --git a/neoforge/src/main/resources/META-INF/mods.toml b/neoforge/src/main/resources/META-INF/mods.toml new file mode 100644 index 000000000..6b2bdd876 --- /dev/null +++ b/neoforge/src/main/resources/META-INF/mods.toml @@ -0,0 +1,40 @@ +# This is an example mods.toml file. It contains the data relating to the loading mods. +# There are several mandatory fields (#mandatory), and many more that are optional (#optional). +# The overall format is standard TOML format, v0.5.0. +# Note that there are a couple of TOML lists in this file. +# Find more information on toml format here: https://github.com/toml-lang/toml +# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml +modLoader="javafml" #mandatory +# A version range to match for said mod loader - for regular FML @Mod it will be the forge version +loaderVersion="[1,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" +# A URL to refer people to when problems occur with this mod +issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional +# A list of mods - how many allowed here is determined by the individual mod loader +[[mods]] #mandatory +# The modid of the mod +modId="baritoe" #mandatory +# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it +version="${version}" #mandatory + # A display name for the mod +displayName="Baritone" #mandatory +# A URL for the "homepage" for this mod, displayed in the mod UI +displayURL="https://github.com/cabaletta/baritone" #optional +# A file name (in the root of the mod JAR) containing a logo for display +#logoFile="examplemod.png" #optional +# A text field displayed in the mod UI +credits="Hat Gamers" #optional +# A text field displayed in the mod UI +authors="leijurv, Brady" #optional +# The description text for the mod (multi line!) (#mandatory) +description=''' +A Minecraft pathfinder bot. +''' + +[[dependencies.baritoe]] +modId="minecraft" +mandatory=true +# This version range declares a minimum of the current minecraft version up to but not including the next major version +versionRange="[1.20.4]" +ordering="NONE" +side="BOTH" diff --git a/neoforge/src/main/resources/pack.mcmeta b/neoforge/src/main/resources/pack.mcmeta new file mode 100644 index 000000000..663d1787a --- /dev/null +++ b/neoforge/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "null", + "pack_format": 8 + } +} \ No newline at end of file diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 17aece562..e615a822a 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -171,9 +171,8 @@ private void postLoadWorld(ClientLevel world, CallbackInfo ci) { ), slice = @Slice( from = @At( - value = "FIELD", - opcode = Opcodes.GETFIELD, - target = "Lnet/minecraft/client/Options;renderDebug:Z" + value = "INVOKE", + target = "Lnet/minecraft/client/gui/components/DebugScreenOverlay;showDebugScreen()Z" ), to = @At( value = "CONSTANT", diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index 14d22b0b4..a374e92e8 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -76,7 +76,7 @@ public void onRenderPass(RenderEvent event) { float lineWidth = Baritone.settings().selectionLineWidth.value; boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value; IRenderer.startLines(color, opacity, lineWidth, ignoreDepth); - IRenderer.emitAABB(event.getModelViewStack(), new AABB(pos1, pos1.offset(1, 1, 1))); + IRenderer.emitAABB(event.getModelViewStack(), new AABB(pos1)); IRenderer.endLines(ignoreDepth); } }); diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 94b9af207..6913d5be0 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -50,6 +50,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; +import net.minecraft.nbt.NbtAccounter; import net.minecraft.nbt.NbtIo; import net.minecraft.util.Tuple; import net.minecraft.world.InteractionHand; @@ -222,7 +223,7 @@ public void buildOpenLitematic(int i) { if (LitematicaHelper.hasLoadedSchematic()) { String name = LitematicaHelper.getName(i); try { - LitematicaSchematic schematic1 = new LitematicaSchematic(NbtIo.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())), false); + LitematicaSchematic schematic1 = new LitematicaSchematic(NbtIo.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath()), NbtAccounter.unlimitedHeap()), false); Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i); ISchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); schematic2 = applyMapArtAndSelection(origin, (IStaticSchematic) schematic2); diff --git a/src/main/java/baritone/selection/Selection.java b/src/main/java/baritone/selection/Selection.java index d4b115de4..69c77d668 100644 --- a/src/main/java/baritone/selection/Selection.java +++ b/src/main/java/baritone/selection/Selection.java @@ -37,7 +37,7 @@ public Selection(BetterBlockPos pos1, BetterBlockPos pos2) { max.z - min.z + 1 ); - this.aabb = new AABB(this.min, this.max.offset(1, 1, 1)); + this.aabb = new AABB(this.min); } @Override diff --git a/src/main/java/baritone/selection/SelectionRenderer.java b/src/main/java/baritone/selection/SelectionRenderer.java index 94cbb2d90..4250f4085 100644 --- a/src/main/java/baritone/selection/SelectionRenderer.java +++ b/src/main/java/baritone/selection/SelectionRenderer.java @@ -38,13 +38,13 @@ public static void renderSelections(PoseStack stack, ISelection[] selections) { IRenderer.glColor(settings.colorSelectionPos1.value, opacity); for (ISelection selection : selections) { - IRenderer.emitAABB(stack, new AABB(selection.pos1(), selection.pos1().offset(1, 1, 1))); + IRenderer.emitAABB(stack, new AABB(selection.pos1())); } IRenderer.glColor(settings.colorSelectionPos2.value, opacity); for (ISelection selection : selections) { - IRenderer.emitAABB(stack, new AABB(selection.pos2(), selection.pos2().offset(1, 1, 1))); + IRenderer.emitAABB(stack, new AABB(selection.pos2())); } } diff --git a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java index 17fafc821..94a01a157 100644 --- a/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java +++ b/src/main/java/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -22,6 +22,7 @@ import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.format.defaults.MCEditSchematic; import baritone.utils.schematic.format.defaults.SpongeSchematic; +import net.minecraft.nbt.NbtAccounter; import org.apache.commons.io.FilenameUtils; import java.io.File; @@ -44,7 +45,7 @@ public enum DefaultSchematicFormats implements ISchematicFormat { MCEDIT("schematic") { @Override public IStaticSchematic parse(InputStream input) throws IOException { - return new MCEditSchematic(NbtIo.readCompressed(input)); + return new MCEditSchematic(NbtIo.readCompressed(input, NbtAccounter.unlimitedHeap())); } }, @@ -56,7 +57,7 @@ public IStaticSchematic parse(InputStream input) throws IOException { SPONGE("schem") { @Override public IStaticSchematic parse(InputStream input) throws IOException { - CompoundTag nbt = NbtIo.readCompressed(input); + CompoundTag nbt = NbtIo.readCompressed(input, NbtAccounter.unlimitedHeap()); int version = nbt.getInt("Version"); switch (version) { case 1: @@ -74,7 +75,7 @@ public IStaticSchematic parse(InputStream input) throws IOException { LITEMATICA("litematic") { @Override public IStaticSchematic parse(InputStream input) throws IOException { - CompoundTag nbt = NbtIo.readCompressed(input); + CompoundTag nbt = NbtIo.readCompressed(input, NbtAccounter.unlimitedHeap()); int version = nbt.getInt("Version"); switch (version) { case 4: //1.12 From c146440cb2950e339169ad64c4ec54bdf1ae609f Mon Sep 17 00:00:00 2001 From: Wagyourtail Date: Sun, 17 Dec 2023 03:36:23 -0700 Subject: [PATCH 931/935] mark 1.20.3 as supported --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- neoforge/src/main/resources/META-INF/mods.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 0260fcb1a..c1512a6cc 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -25,6 +25,6 @@ "depends": { "fabricloader": ">=0.14.22", - "minecraft": "1.20.4" + "minecraft": ["1.20.3", "1.20.4"] } } diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 1dc9b341c..dd309314c 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.20.4]" +versionRange="[1.20.3, 1.20.4]" ordering="NONE" side="BOTH" diff --git a/neoforge/src/main/resources/META-INF/mods.toml b/neoforge/src/main/resources/META-INF/mods.toml index 6b2bdd876..4ad41a286 100644 --- a/neoforge/src/main/resources/META-INF/mods.toml +++ b/neoforge/src/main/resources/META-INF/mods.toml @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.20.4]" +versionRange="[1.20.3, 1.20.4]" ordering="NONE" side="BOTH" From defcfcaea1ad2ef437b389fc1fde7bec80da9d23 Mon Sep 17 00:00:00 2001 From: MarvionKirito Date: Thu, 21 Dec 2023 20:17:02 +0800 Subject: [PATCH 932/935] Updated to 1.20.2 --- .github/workflows/gradle_build.yml | 2 +- .gitignore | 8 +- Dockerfile | 1 + README.md | 51 +- SETUP.md | 67 +- build.gradle | 83 +- buildSrc/build.gradle | 8 +- .../gradle/task/BaritoneGradleTask.java | 19 +- .../baritone/gradle/task/CreateDistTask.java | 32 +- .../baritone/gradle/task/ProguardTask.java | 171 +-- .../baritone/gradle/util/Determinizer.java | 30 +- fabric/build.gradle | 36 +- .../baritone/launch/FabricMixinPlugin.java | 2 +- fabric/src/main/resources/fabric.mod.json | 4 +- forge/build.gradle | 47 +- forge/src/main/resources/META-INF/mods.toml | 4 +- gradle.properties | 8 +- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 +- scripts/proguard.pro | 6 + src/api/java/baritone/api/BaritoneAPI.java | 2 +- src/api/java/baritone/api/IBaritone.java | 6 + .../java/baritone/api/IBaritoneProvider.java | 60 +- src/api/java/baritone/api/Settings.java | 210 ++- .../baritone/api/behavior/ILookBehavior.java | 27 +- .../api/behavior/look/IAimProcessor.java | 45 + .../behavior/look/ITickableAimProcessor.java | 47 + .../baritone/api/cache/IWorldProvider.java | 9 + .../api/command/datatypes/BlockById.java | 14 +- .../api/command/datatypes/ForAxis.java | 43 + .../datatypes/ForBlockOptionalMeta.java | 121 +- .../api/command/datatypes/RelativeFile.java | 11 +- .../exception/CommandUnhandledException.java | 8 +- .../command/helpers/TabCompleteHelper.java | 2 +- .../api/event/events/BlockChangeEvent.java | 47 + .../baritone/api/event/events/ChunkEvent.java | 21 +- .../api/event/events/RotationMoveEvent.java | 38 +- .../baritone/api/event/events/TickEvent.java | 9 + .../listener/AbstractGameEventListener.java | 6 + .../event/listener/IGameEventListener.java | 15 + .../baritone/api/pathing/goals/GoalAxis.java | 10 + .../baritone/api/pathing/goals/GoalBlock.java | 21 + .../api/pathing/goals/GoalComposite.java | 18 + .../api/pathing/goals/GoalGetToBlock.java | 21 + .../api/pathing/goals/GoalInverted.java | 20 + .../baritone/api/pathing/goals/GoalNear.java | 22 + .../api/pathing/goals/GoalRunAway.java | 24 + .../pathing/goals/GoalStrictDirection.java | 26 + .../api/pathing/goals/GoalTwoBlocks.java | 21 + .../baritone/api/pathing/goals/GoalXZ.java | 21 + .../api/pathing/goals/GoalYLevel.java | 18 + .../baritone/api/process/IBuilderProcess.java | 1 + .../api/process/ICustomGoalProcess.java | 5 + .../baritone/api/process/IElytraProcess.java | 50 + .../api/process/PathingCommandType.java | 7 +- .../baritone/api/schematic/MaskSchematic.java | 14 +- .../api/schematic/mask/AbstractMask.java | 49 + .../baritone/api/schematic/mask/Mask.java | 60 + .../api/schematic/mask/PreComputedMask.java | 44 + .../api/schematic/mask/StaticMask.java | 82 + .../mask/operator/BinaryOperatorMask.java | 79 + .../api/schematic/mask/operator/NotMask.java | 56 + .../schematic/mask/shape/CylinderMask.java | 69 + .../api/schematic/mask/shape/SphereMask.java | 64 + .../baritone/api/utils/BetterBlockPos.java | 34 + .../baritone/api/utils/BlockOptionalMeta.java | 87 +- .../api/utils/BlockOptionalMetaLookup.java | 65 +- .../api/utils/BooleanBinaryOperator.java | 27 + .../api/utils/BooleanBinaryOperators.java | 38 + src/api/java/baritone/api/utils/Helper.java | 32 +- .../baritone/api/utils/IPlayerContext.java | 16 +- src/api/java/baritone/api/utils/Pair.java | 59 + .../baritone/api/utils/RayTraceUtils.java | 3 +- src/api/java/baritone/api/utils/Rotation.java | 8 +- .../baritone/api/utils/RotationUtils.java | 100 +- .../java/baritone/api/utils/SettingsUtil.java | 38 +- .../mixins/MixinClientPlayNetHandler.java | 127 +- .../mixins/MixinClientPlayerEntity.java | 38 +- .../mixins/MixinCommandSuggestionHelper.java | 33 +- .../baritone/launch/mixins/MixinEntity.java | 19 +- .../mixins/MixinFireworkRocketEntity.java | 60 + .../launch/mixins/MixinLivingEntity.java | 62 +- .../launch/mixins/MixinMinecraft.java | 63 +- .../launch/mixins/MixinNetworkManager.java | 6 +- .../mixins/MixinPalettedContainer$Data.java | 34 + .../launch/mixins/MixinPalettedContainer.java | 100 ++ .../resources/mixins.baritone-meteor.json | 5 +- src/main/java/baritone/Baritone.java | 146 +- src/main/java/baritone/BaritoneProvider.java | 35 +- src/main/java/baritone/behavior/Behavior.java | 1 - .../baritone/behavior/InventoryBehavior.java | 42 +- .../java/baritone/behavior/LookBehavior.java | 329 +++- .../baritone/behavior/PathingBehavior.java | 18 +- .../behavior/look/ForkableRandom.java | 85 ++ src/main/java/baritone/cache/CachedChunk.java | 11 +- .../java/baritone/cache/CachedRegion.java | 7 +- src/main/java/baritone/cache/CachedWorld.java | 22 +- src/main/java/baritone/cache/ChunkPacker.java | 1 + .../baritone/cache/FasterWorldScanner.java | 303 ++++ .../java/baritone/cache/WorldProvider.java | 181 ++- .../java/baritone/cache/WorldScanner.java | 5 +- .../command/ExampleBaritoneControl.java | 16 +- .../command/argument/ArgConsumer.java | 2 + .../command/defaults/BuildCommand.java | 3 +- .../command/defaults/ComeCommand.java | 9 +- .../command/defaults/DefaultCommands.java | 3 +- .../command/defaults/ElytraCommand.java | 225 +++ .../defaults/ExploreFilterCommand.java | 4 +- .../command/defaults/GoalCommand.java | 2 +- .../command/defaults/GotoCommand.java | 6 +- .../command/defaults/MineCommand.java | 13 +- .../command/defaults/PathCommand.java | 4 +- .../command/defaults/RenderCommand.java | 4 +- .../command/defaults/RepackCommand.java | 4 +- .../baritone/command/defaults/SelCommand.java | 87 +- .../baritone/command/defaults/SetCommand.java | 37 +- .../command/defaults/SurfaceCommand.java | 10 +- .../command/defaults/WaypointsCommand.java | 6 +- .../command/manager/CommandManager.java | 6 +- .../java/baritone/event/GameEventHandler.java | 42 +- .../pathing/movement/CalculationContext.java | 12 +- .../baritone/pathing/movement/Movement.java | 8 +- .../pathing/movement/MovementHelper.java | 14 +- .../movement/movements/MovementDescend.java | 25 +- .../movement/movements/MovementPillar.java | 15 +- .../movement/movements/MovementTraverse.java | 2 - .../java/baritone/process/BuilderProcess.java | 16 +- .../baritone/process/CustomGoalProcess.java | 14 + .../java/baritone/process/ElytraProcess.java | 569 +++++++ .../java/baritone/process/FarmProcess.java | 56 +- .../baritone/process/GetToBlockProcess.java | 2 +- .../process/InventoryPauserProcess.java | 90 ++ .../java/baritone/process/MineProcess.java | 30 +- .../elytra/BlockStateOctreeInterface.java | 54 + .../process/elytra/ElytraBehavior.java | 1328 +++++++++++++++++ .../baritone/process/elytra/NetherPath.java | 65 + .../elytra/NetherPathfinderContext.java | 238 +++ .../process/elytra/NullElytraProcess.java | 90 ++ .../elytra/PathCalculationException.java | 29 + .../process/elytra/UnpackedSegment.java | 83 ++ .../baritone/selection/SelectionRenderer.java | 8 +- .../java/baritone/utils/BaritoneMath.java | 37 + .../java/baritone/utils/BlockBreakHelper.java | 3 +- .../java/baritone/utils/BlockPlaceHelper.java | 3 +- .../baritone/utils/BlockStateInterface.java | 13 +- src/main/java/baritone/utils/GuiClick.java | 18 +- src/main/java/baritone/utils/IRenderer.java | 116 +- .../baritone/utils/InputOverrideHandler.java | 6 +- .../java/baritone/utils/PathRenderer.java | 201 +-- .../baritone/utils/PathingControlManager.java | 13 +- .../utils/accessor/IFireworkRocketEntity.java | 25 + .../utils/accessor/IPalettedContainer.java | 36 + ...ontext.java => BaritonePlayerContext.java} | 45 +- ...ler.java => BaritonePlayerController.java} | 10 +- tweaker/build.gradle | 33 +- .../java/baritone/launch/LaunchTesting.java | 105 -- 156 files changed, 7058 insertions(+), 1203 deletions(-) create mode 100644 src/api/java/baritone/api/behavior/look/IAimProcessor.java create mode 100644 src/api/java/baritone/api/behavior/look/ITickableAimProcessor.java create mode 100644 src/api/java/baritone/api/command/datatypes/ForAxis.java create mode 100644 src/api/java/baritone/api/event/events/BlockChangeEvent.java create mode 100644 src/api/java/baritone/api/process/IElytraProcess.java create mode 100644 src/api/java/baritone/api/schematic/mask/AbstractMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/Mask.java create mode 100644 src/api/java/baritone/api/schematic/mask/PreComputedMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/StaticMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/operator/NotMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java create mode 100644 src/api/java/baritone/api/schematic/mask/shape/SphereMask.java create mode 100644 src/api/java/baritone/api/utils/BooleanBinaryOperator.java create mode 100644 src/api/java/baritone/api/utils/BooleanBinaryOperators.java create mode 100644 src/api/java/baritone/api/utils/Pair.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinFireworkRocketEntity.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinPalettedContainer$Data.java create mode 100644 src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java create mode 100644 src/main/java/baritone/behavior/look/ForkableRandom.java create mode 100644 src/main/java/baritone/cache/FasterWorldScanner.java create mode 100644 src/main/java/baritone/command/defaults/ElytraCommand.java create mode 100644 src/main/java/baritone/process/ElytraProcess.java create mode 100644 src/main/java/baritone/process/InventoryPauserProcess.java create mode 100644 src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java create mode 100644 src/main/java/baritone/process/elytra/ElytraBehavior.java create mode 100644 src/main/java/baritone/process/elytra/NetherPath.java create mode 100644 src/main/java/baritone/process/elytra/NetherPathfinderContext.java create mode 100644 src/main/java/baritone/process/elytra/NullElytraProcess.java create mode 100644 src/main/java/baritone/process/elytra/PathCalculationException.java create mode 100644 src/main/java/baritone/process/elytra/UnpackedSegment.java create mode 100644 src/main/java/baritone/utils/BaritoneMath.java create mode 100644 src/main/java/baritone/utils/accessor/IFireworkRocketEntity.java create mode 100644 src/main/java/baritone/utils/accessor/IPalettedContainer.java rename src/main/java/baritone/utils/player/{PrimaryPlayerContext.java => BaritonePlayerContext.java} (55%) rename src/main/java/baritone/utils/player/{PrimaryPlayerController.java => BaritonePlayerController.java} (93%) delete mode 100644 tweaker/src/main/java/baritone/launch/LaunchTesting.java diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml index 08e9ab1d3..9d4ed379b 100644 --- a/.github/workflows/gradle_build.yml +++ b/.github/workflows/gradle_build.yml @@ -28,7 +28,7 @@ jobs: run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)" + run: ./gradlew build -Pmod_version="$(git describe --always --tags --first-parent | cut -c2-)" - name: Archive Artifacts uses: actions/upload-artifact@v3 diff --git a/.gitignore b/.gitignore index 50a166bce..fe4b0d407 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,10 @@ baritone_Client.launch .vscode/launch.json .architectury-transformer -mapping \ No newline at end of file + +mapping + +libs/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar +libs/java-objc-bridge-1.1.jar + +mapping diff --git a/Dockerfile b/Dockerfile index 9023e2020..8a00fc3da 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,7 @@ RUN apt update -y RUN apt install \ openjdk-17-jdk \ + git \ --assume-yes COPY . /code diff --git a/README.md b/README.md index e2c83ddec..3f2923f92 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,16 @@

- Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft - Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft + Minecraft

@@ -28,12 +31,13 @@ GitHub commits Code size GitHub repo size - Lines of Code + Lines of Code + yes

Impact integration - KAMI Blue integration + Lambda integration ForgeHax integration Aristois add-on integration rootNET integration @@ -42,27 +46,34 @@

- forthebadge - forthebadge + forthebadge + forthebadge

A Minecraft pathfinder bot. -[**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) +Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. -Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do. +[**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr) -[Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa) +**Quick download links:** -The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to -install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click -[here](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. +| Forge | Fabric | +|---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| +| [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.19/baritone-api-forge-1.2.19.jar) | | +| [1.16.5 Forge](https://github.com/cabaletta/baritone/releases/download/v1.6.5/baritone-api-forge-1.6.5.jar) | [1.16.5 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.6.5/baritone-api-fabric-1.6.5.jar) | +| [1.17.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-forge-1.7.3.jar) | [1.17.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-fabric-1.7.3.jar) | +| [1.18.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.8.5/baritone-api-forge-1.8.5.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.5/baritone-api-fabric-1.8.5.jar) | +| [1.19.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.4/baritone-api-forge-1.9.4.jar) | [1.19.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.4/baritone-api-fabric-1.9.4.jar) | +| [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) | +| [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) | +| [1.20.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-forge-1.10.1.jar) | [1.20.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-fabric-1.10.1.jar) | -For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**. +**Message for 2b2t players looking for 1.19/1.20 Baritone** If you like, please try the beta for Baritone Elytra for 2b2t, find it in #announcements of [the Baritone discord](http://discord.gg/s6fRBAUpmr). It supports 1.19.4 and 1.20.1, Forge or Fabric. If you have to see it to believe it, watch [this YouTube video](https://youtu.be/NnSlQi-68eQ). -If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**. +**How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa). Also try `#elytra` for Elytra flying in the Nether using fireworks. -If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**. +For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#6313 on Baritone which I recommend. This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). diff --git a/SETUP.md b/SETUP.md index 57866b192..1daeb9f89 100644 --- a/SETUP.md +++ b/SETUP.md @@ -43,13 +43,13 @@ If another one of your Forge mods has a Baritone integration, you want `baritone ## Command Line On Mac OSX and Linux, use `./gradlew` instead of `gradlew`. -If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 for 1.12.2-1.16.5, JDK 16 for 1.17.1, and JDK 17 for 1.18.1. +If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 for 1.12.2-1.16.5, JDK 16+ for 1.17.1, and JDK 17+ for 1.18.1. To check which java you are using do `java -version` in a command prompt or terminal. If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work because the Java distributions above JDK 8 using may not have the needed javax classes. -Open JDK download: https://openjdk.java.net/install/ +Download java: https://adoptium.net/ #### macOS guide In order to get JDK 8, Try running the following command: `% /usr/libexec/java_home -V` @@ -66,68 +66,13 @@ In order to get JDK 8 running in the **current terminal window** you will have t To add OpenJDK 8 to your PATH add the export line to the end of your `.zshrc / .bashrc` if you want it to apply to each new terminal. If you're using bash change the .bachrc and if you're using zsh change the .zshrc -Setting up the Environment: +### Building Baritone -``` -$ gradlew setupDecompWorkspace -$ gradlew --refresh-dependencies -``` +These tasks depend on the minecraft version, but are (for the most part) standard for building mods. -Building Baritone: - -``` -$ gradlew build -``` - -For minecraft 1.15.2+, run the following instead to include the Forge jars: - -``` -$ gradlew build -Pbaritone.forge_build -``` - -Do this instead for Fabric jars: - -``` -$ gradlew build -Pbaritone.fabric_build -``` - -Running Baritone: - -``` -$ gradlew runClient -``` - -For information on how to build baritone, see [Building Baritone](#building-baritone) +for more details, see [the build ci action](/.github/workflows/gradle_build.yml) ## IntelliJ - Open the project in IntelliJ as a Gradle project - - ![Image](https://i.imgur.com/jw7Q6vY.png) - -- Run the Gradle tasks `setupDecompWorkspace` then `genIntellijRuns` - - ![Image](https://i.imgur.com/QEfVvWP.png) - - Refresh the Gradle project (or, to be safe, just restart IntelliJ) - - ![Image](https://i.imgur.com/3V7EdWr.png) - -- Select the "Minecraft Client" launch config - - ![Image](https://i.imgur.com/1qz2QGV.png) - -- Click on ``Edit Configurations...`` from the same dropdown and select the "Minecraft Client" config - - ![Image](https://i.imgur.com/s4ly0ZF.png) - -- In `Edit Configurations...` you need to select `baritone_launch` for `Use classpath of module:`. - - ![Image](https://i.imgur.com/hrLhG9u.png) - -## IntelliJ - -- Navigate to the gradle tasks on the right tab as follows - - ![Image](https://i.imgur.com/PE6r9iN.png) - -- Double click on **build** to run it +- depending on the minecraft version, you may need to run `setupDecompWorkspace` or `genIntellijRuns` in order to get everything working \ No newline at end of file diff --git a/build.gradle b/build.gradle index 267fb6cd4..ad7cec291 100755 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,3 @@ -import baritone.gradle.task.CreateDistTask -import baritone.gradle.task.ProguardTask - /* * This file is part of Baritone. * @@ -24,13 +21,19 @@ allprojects { apply plugin: "maven-publish" archivesBaseName = rootProject.archives_base_name - /*def vers = 'git describe --always --tags --dirty'.execute().text.trim() + + /*def vers = "" + try { + vers = 'git describe --always --tags --first-parent --dirty'.execute().text.trim() + } catch (Exception e) { + println "Version detection failed: " + e + } if (!vers.startsWith("v")) { - println "git doesn't appear to be installed!" println "using version number: " + rootProject.mod_version version = rootProject.mod_version } else { version = vers.substring(1) + println "Detected version " + version }*/ version = rootProject.mod_version group = rootProject.maven_group @@ -63,19 +66,29 @@ allprojects { } } mavenCentral() + maven { + name = 'babbaj-repo' + url = 'https://babbaj.github.io/maven/' + } } dependencies { - minecraft "net.minecraft:minecraft:${rootProject.minecraft_version}" - // The following line declares the mojmap mappings, you may use other mappings as well - mappings "net.fabricmc:intermediary:${rootProject.minecraft_version}:v2" - mappings "net.minecraft:minecraft:${rootProject.minecraft_version}:client-mappings" - mappings "org.parchmentmc.data:parchment-1.19.2:2022.11.27@zip" - implementation "org.spongepowered:mixin:0.8.5" implementation "org.ow2.asm:asm:9.3" // The following line declares the yarn mappings you may select this one as well. // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" + //launchImplementation('dev.babbaj:nether-pathfinder:1.3.0') + implementation 'dev.babbaj:nether-pathfinder:1.4.1' + } + + unimined.minecraft(sourceSets.main, true) { + version rootProject.minecraft_version + + mappings { + intermediary() + mojmap() + parchment("2023.10.22") + } } tasks.withType(JavaCompile).configureEach { @@ -88,8 +101,9 @@ allprojects { } } -minecraft { +unimined.minecraft { runs.off = true + defaultRemapJar = false } archivesBaseName = archivesBaseName + "-common" @@ -129,10 +143,6 @@ jar { from sourceSets.main.output, sourceSets.launch.output, sourceSets.api.output } -remapJar { - target = "mojmap" -} - javadoc { options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error options.linkSource true @@ -140,44 +150,3 @@ javadoc { source = sourceSets.api.allJava classpath += sourceSets.api.compileClasspath } - - -task removeChecksum { - doLast { - delete "$rootDir/dist/checksums.txt" - } -} - -subprojects { - task proguard(type: ProguardTask, dependsOn: remapJar) { - url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' - extract 'proguard-7.2.1/lib/proguard.jar' - compType project.name - artifactPath = remapJar.archiveFile - } - - task createDist(type: CreateDistTask, dependsOn: proguard) { - compType project.name == "tweaker" ? null : project.name - artifactApiPath = proguard.artifactApiPath - artifactStandalonePath = proguard.artifactStandalonePath - artifactUnoptimizedPath = proguard.artifactUnoptimizedPath - } - - build.finalizedBy(createDist) - - publishing { - publications { - mavenFabric(MavenPublication) { - artifactId = rootProject.archives_base_name + "-" + project.name - from components.java - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - } - } - - createDist.dependsOn(removeChecksum) -} \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index d0ba8faf5..d894aeec2 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -29,12 +29,16 @@ repositories { name = 'FabricMaven' url = 'https://maven.fabricmc.net/' } + maven { + name = 'NeoForgedMaven' + url = 'https://maven.neoforged.net/' + } mavenCentral() } dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0' - implementation group: 'commons-io', name: 'commons-io', version: '2.6' + implementation group: 'commons-io', name: 'commons-io', version: '2.7' - implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.4.10' + implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '1.0.5' } \ No newline at end of file diff --git a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java index 9c5a1d305..2dad551f2 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/BaritoneGradleTask.java @@ -20,7 +20,6 @@ import org.gradle.api.DefaultTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; -import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; import java.io.File; @@ -52,6 +51,10 @@ class BaritoneGradleTask extends DefaultTask { ARTIFACT_STANDALONE = "%s-standalone-%s.jar"; protected String artifactName, artifactVersion; + protected Path + artifactPath, + artifactUnoptimizedPath, artifactApiPath, artifactStandalonePath, // these are different for forge builds + proguardOut; @Input @@ -77,6 +80,20 @@ public void doFirst() { } else { this.artifactVersion = getProject().getVersion().toString(); } + + this.artifactPath = this.getBuildFile(formatVersion(ARTIFACT_STANDARD)); + + this.artifactUnoptimizedPath = this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)); + this.artifactApiPath = this.getBuildFile(formatVersion(ARTIFACT_API)); + this.artifactStandalonePath = this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)); + + this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); + } + + protected void verifyArtifacts() throws IllegalStateException { + if (!Files.exists(this.artifactPath)) { + throw new IllegalStateException("Artifact not found! Run build first! Missing file: " + this.artifactPath); + } } protected void write(InputStream stream, Path file) throws IOException { diff --git a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java index 50b2f812b..48cd0a72a 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/CreateDistTask.java @@ -17,9 +17,6 @@ package baritone.gradle.task; -import baritone.gradle.util.Determinizer; -import org.gradle.api.file.RegularFileProperty; -import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.TaskAction; import java.nio.charset.StandardCharsets; @@ -31,7 +28,6 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; @@ -39,27 +35,19 @@ * @author Brady * @since 10/12/2018 */ -public abstract class CreateDistTask extends BaritoneGradleTask { +public class CreateDistTask extends BaritoneGradleTask { private static MessageDigest SHA1_DIGEST; - @InputFile - abstract public RegularFileProperty getArtifactApiPath(); - - @InputFile - abstract public RegularFileProperty getArtifactStandalonePath(); - - @InputFile - abstract public RegularFileProperty getArtifactUnoptimizedPath(); - @TaskAction protected void exec() throws Exception { super.doFirst(); + super.verifyArtifacts(); // Define the distribution file paths - Path api = getRootRelativeFile("dist/" + getFileName(getArtifactApiPath().get().getAsFile().toPath())); - Path standalone = getRootRelativeFile("dist/" + getFileName(getArtifactStandalonePath().get().getAsFile().toPath())); - Path unoptimized = getRootRelativeFile("dist/" + getFileName(getArtifactUnoptimizedPath().get().getAsFile().toPath())); + Path api = getRootRelativeFile("dist/" + getFileName(artifactApiPath)); + Path standalone = getRootRelativeFile("dist/" + getFileName(artifactStandalonePath)); + Path unoptimized = getRootRelativeFile("dist/" + getFileName(artifactUnoptimizedPath)); // NIO will not automatically create directories Path dir = getRootRelativeFile("dist/"); @@ -69,12 +57,12 @@ protected void exec() throws Exception { // Copy build jars to dist/ // TODO: dont copy files that dont exist - Files.copy(getArtifactApiPath().get().getAsFile().toPath(), api, REPLACE_EXISTING); - Files.copy(getArtifactStandalonePath().get().getAsFile().toPath(), standalone, REPLACE_EXISTING); - Files.copy(getArtifactUnoptimizedPath().get().getAsFile().toPath(), unoptimized, REPLACE_EXISTING); + Files.copy(this.artifactApiPath, api, REPLACE_EXISTING); + Files.copy(this.artifactStandalonePath, standalone, REPLACE_EXISTING); + Files.copy(this.artifactUnoptimizedPath, unoptimized, REPLACE_EXISTING); // Calculate all checksums and format them like "shasum" - List shasum = Stream.of(getArtifactApiPath().get().getAsFile().toPath(), getArtifactStandalonePath().get().getAsFile().toPath(), getArtifactUnoptimizedPath().get().getAsFile().toPath()) + List shasum = Files.list(getRootRelativeFile("dist/")) .filter(e -> e.getFileName().toString().endsWith(".jar")) .map(path -> sha1(path) + " " + path.getFileName().toString()) .collect(Collectors.toList()); @@ -82,7 +70,7 @@ protected void exec() throws Exception { shasum.forEach(System.out::println); // Write the checksums to a file - Files.write(getRootRelativeFile("dist/checksums.txt"), shasum, StandardOpenOption.CREATE, StandardOpenOption.APPEND); + Files.write(getRootRelativeFile("dist/checksums.txt"), shasum); } private static String getFileName(Path p) { diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 19c2fb7da..a9c7f94ea 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -18,37 +18,33 @@ package baritone.gradle.task; import baritone.gradle.util.Determinizer; -import groovy.lang.Closure; -import org.apache.commons.io.IOUtils; -import org.gradle.api.Task; -import org.gradle.api.file.RegularFileProperty; import org.gradle.api.plugins.JavaPluginConvention; -import org.gradle.api.tasks.*; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.TaskCollection; import org.gradle.api.tasks.compile.ForkOptions; import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.internal.jvm.Jvm; -import xyz.wagyourtail.unimined.api.Constants; -import xyz.wagyourtail.unimined.api.minecraft.EnvType; -import xyz.wagyourtail.unimined.api.minecraft.MinecraftProvider; +import xyz.wagyourtail.unimined.api.UniminedExtension; +import xyz.wagyourtail.unimined.api.minecraft.MinecraftConfig; import java.io.*; -import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; - /** * @author Brady * @since 10/11/2018 */ -public abstract class ProguardTask extends BaritoneGradleTask { +public class ProguardTask extends BaritoneGradleTask { @Input private String url; @@ -64,63 +60,42 @@ public String getExtract() { return extract; } - @InputFile - abstract public RegularFileProperty getArtifactPath(); - - @OutputFile - @Optional - abstract public RegularFileProperty getArtifactUnoptimizedPath(); - - @OutputFile - @Optional - abstract public RegularFileProperty getArtifactApiPath(); - - @OutputFile - @Optional - abstract public RegularFileProperty getArtifactStandalonePath(); - - protected Path proguardOut; - - @Override - public Task configure(Closure closure) { - super.doFirst(); - - getArtifactUnoptimizedPath().fileValue(this.getBuildFile(formatVersion(ARTIFACT_UNOPTIMIZED)).toFile()); - getArtifactApiPath().fileValue(this.getBuildFile(formatVersion(ARTIFACT_API)).toFile()); - getArtifactStandalonePath().fileValue(this.getBuildFile(formatVersion(ARTIFACT_STANDALONE)).toFile()); - - return super.configure(closure); - } + private List requiredLibraries; @TaskAction protected void exec() throws Exception { - this.proguardOut = this.getTemporaryFile(PROGUARD_EXPORT_PATH); + super.doFirst(); + super.verifyArtifacts(); + // "Haha brady why don't you make separate tasks" - processArtifact(); downloadProguard(); extractProguard(); generateConfigs(); + processArtifact(); proguardApi(); proguardStandalone(); cleanup(); } - private void processArtifact() throws Exception { - if (Files.exists(getArtifactUnoptimizedPath().getAsFile().get().toPath())) { - Files.delete(getArtifactUnoptimizedPath().getAsFile().get().toPath()); - } - - Determinizer.determinize(this.getArtifactPath().get().toString(), getArtifactUnoptimizedPath().getAsFile().get().toString()); - } - - MinecraftProvider provider = this.getProject().getExtensions().getByType(MinecraftProvider.class); + UniminedExtension ext = getProject().getExtensions().getByType(UniminedExtension.class); + SourceSetContainer sourceSets = getProject().getExtensions().getByType(SourceSetContainer.class); private File getMcJar() { - return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdNamespace()).toFile(); + MinecraftConfig mcc = ext.getMinecrafts().get(sourceSets.getByName("main")); + return mcc.getMinecraft(mcc.getMcPatcher().getProdNamespace(), mcc.getMcPatcher().getProdNamespace()).toFile(); } private boolean isMcJar(File f) { - return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f); + MinecraftConfig mcc = ext.getMinecrafts().get(sourceSets.getByName("main")); + return mcc.isMinecraftJar(f.toPath()); + } + + private void processArtifact() throws Exception { + if (Files.exists(this.artifactUnoptimizedPath)) { + Files.delete(this.artifactUnoptimizedPath); + } + + Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), List.of(), false); } private void downloadProguard() throws Exception { @@ -145,48 +120,38 @@ private String getJavaBinPathForProguard() throws Exception { try { path = findJavaPathByGradleConfig(); if (path != null) return path; - } - catch (Exception ex) { + } catch (Exception ex) { System.err.println("Unable to find java by javaCompile options"); ex.printStackTrace(); } + path = findJavaByGradleCurrentRuntime(); + if (path != null) return path; + try { path = findJavaByJavaHome(); if (path != null) return path; - } - catch(Exception ex) { + } catch (Exception ex) { System.err.println("Unable to find java by JAVA_HOME"); ex.printStackTrace(); } - - path = findJavaByGradleCurrentRuntime(); - if (path != null) return path; - throw new Exception("Unable to find java to determine ProGuard libraryjars. Please specify forkOptions.executable in javaCompile," + " JAVA_HOME environment variable, or make sure to run Gradle with the correct JDK (a v1.8 only)"); } private String findJavaByGradleCurrentRuntime() { String path = Jvm.current().getJavaExecutable().getAbsolutePath(); - - if (this.validateJavaVersion(path)) { - System.out.println("Using Gradle's runtime Java for ProGuard"); - return path; - } - return null; + System.out.println("Using Gradle's runtime Java for ProGuard"); + return path; } private String findJavaByJavaHome() { final String javaHomeEnv = System.getenv("JAVA_HOME"); if (javaHomeEnv != null) { - String path = Jvm.forHome(new File(javaHomeEnv)).getJavaExecutable().getAbsolutePath(); - if (this.validateJavaVersion(path)) { - System.out.println("Detected Java path by JAVA_HOME"); - return path; - } + System.out.println("Detected Java path by JAVA_HOME"); + return path; } return null; } @@ -202,19 +167,11 @@ private String findJavaPathByGradleConfig() { if (javacPath != null) { File javacFile = new File(javacPath); if (javacFile.exists()) { - File[] maybeJava = javacFile.getParentFile().listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.equals("java"); - } - }); - + File[] maybeJava = javacFile.getParentFile().listFiles((dir, name) -> name.equals("java")); if (maybeJava != null && maybeJava.length > 0) { String path = maybeJava[0].getAbsolutePath(); - if (this.validateJavaVersion(path)) { - System.out.println("Detected Java path by forkOptions"); - return path; - } + System.out.println("Detected Java path by forkOptions"); + return path; } } } @@ -237,11 +194,11 @@ private boolean validateJavaVersion(String java) { } private void generateConfigs() throws Exception { - Files.copy(getRootRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), REPLACE_EXISTING); + Files.copy(getRootRelativeFile(PROGUARD_CONFIG_TEMPLATE), getTemporaryFile(PROGUARD_CONFIG_DEST), StandardCopyOption.REPLACE_EXISTING); // Setup the template that will be used to derive the API and Standalone configs List template = Files.readAllLines(getTemporaryFile(PROGUARD_CONFIG_DEST)); - template.add(0, "-injars '" + this.getArtifactPath().get().toString() + "'"); + template.add(0, "-injars '" + this.artifactPath.toString() + "'"); template.add(1, "-outjars '" + this.getTemporaryFile(PROGUARD_EXPORT_PATH) + "'"); template.add(2, "-libraryjars /jmods/java.base.jmod(!**.jar;!module-info.class)"); @@ -260,11 +217,11 @@ private void generateConfigs() throws Exception { { // Discover all of the libraries that we will need to acquire from gradle final Stream dependencies = acquireDependencies() - // remove MCP mapped jar, and nashorn - .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")); + // remove MCP mapped jar, and nashorn + .filter(f -> !f.toString().endsWith("-recomp.jar") && !f.getName().startsWith("nashorn") && !f.getName().startsWith("coremods")); libraries = dependencies - .map(f -> isMcJar(f) ? mcJar : f); + .map(f -> isMcJar(f) ? mcJar : f); } libraries.forEach(f -> { template.add(2, "-libraryjars '" + f + "'"); @@ -277,29 +234,48 @@ private void generateConfigs() throws Exception { api.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + addCompTypeFirst("api.txt"))); // API config doesn't require any changes from the changes that we made to the template - Files.write(getTemporaryFile(compType+PROGUARD_API_CONFIG), api); + Files.write(getTemporaryFile(compType + PROGUARD_API_CONFIG), api); // For the Standalone config, don't keep the API package List standalone = new ArrayList<>(template); standalone.removeIf(s -> s.contains("# this is the keep api")); standalone.add(2, "-printmapping " + new File(this.getRootRelativeFile(PROGUARD_MAPPING_DIR).toFile(), "mappings-" + addCompTypeFirst("standalone.txt"))); - Files.write(getTemporaryFile(compType+PROGUARD_STANDALONE_CONFIG), standalone); + Files.write(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG), standalone); } private Stream acquireDependencies() { return getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName("main").getCompileClasspath().getFiles() - .stream() - .filter(File::isFile); + .stream() + .filter(File::isFile); } private void proguardApi() throws Exception { - runProguard(getTemporaryFile(compType+PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), getArtifactApiPath().get().toString()); + runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), List.of(), false); } private void proguardStandalone() throws Exception { - runProguard(getTemporaryFile(compType+PROGUARD_STANDALONE_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), getArtifactStandalonePath().get().toString()); + runProguard(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), List.of(), false); + } + + private static final class Pair { + public final A a; + public final B b; + + private Pair(final A a, final B b) { + this.a = a; + this.b = b; + } + + @Override + public String toString() { + return "Pair{" + + "a=" + this.a + + ", " + + "b=" + this.b + + '}'; + } } private void cleanup() { @@ -312,9 +288,11 @@ public void setUrl(String url) { this.url = url; } + public void setExtract(String extract) { this.extract = extract; } + private void runProguard(Path config) throws Exception { // Delete the existing proguard output file. Proguard probably handles this already, but why not do it ourselves if (Files.exists(this.proguardOut)) { @@ -325,7 +303,7 @@ private void runProguard(Path config) throws Exception { Path workingDirectory = getTemporaryFile(""); Path proguardJar = workingDirectory.relativize(getTemporaryFile(PROGUARD_JAR)); config = workingDirectory.relativize(config); - + // Honestly, if you still have spaces in your path at this point, you're SOL. Process p = new ProcessBuilder("java", "-jar", proguardJar.toString(), "@" + config.toString()) @@ -339,6 +317,7 @@ private void runProguard(Path config) throws Exception { // Halt the current thread until the process is complete, if the exit code isn't 0, throw an exception int exitCode = p.waitFor(); if (exitCode != 0) { + Thread.sleep(1000); throw new IllegalStateException("Proguard exited with code " + exitCode); } } diff --git a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java index fc268cd35..781aaec24 100644 --- a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java +++ b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java @@ -39,10 +39,11 @@ */ public class Determinizer { - public static void determinize(String inputPath, String outputPath) throws IOException { + public static void determinize(String inputPath, String outputPath, List toInclude, boolean doForgeReplacementOfMetaInf) throws IOException { System.out.println("Running Determinizer"); System.out.println(" Input path: " + inputPath); System.out.println(" Output path: " + outputPath); + System.out.println(" Shade: " + toInclude); try ( JarFile jarFile = new JarFile(new File(inputPath)); @@ -64,14 +65,35 @@ public static void determinize(String inputPath, String outputPath) throws IOExc clone.setTime(42069); jos.putNextEntry(clone); if (entry.getName().endsWith(".refmap.json")) { - JsonObject object = new JsonParser().parse(new InputStreamReader(jarFile.getInputStream(entry))).getAsJsonObject(); - jos.write(writeSorted(object).getBytes()); + JsonElement json = new JsonParser().parse(new InputStreamReader(jarFile.getInputStream(entry))); + jos.write(writeSorted(json).getBytes()); + } else if (entry.getName().equals("META-INF/MANIFEST.MF") && doForgeReplacementOfMetaInf) { // only replace for forge jar + ByteArrayOutputStream cancer = new ByteArrayOutputStream(); + copy(jarFile.getInputStream(entry), cancer); + String manifest = new String(cancer.toByteArray()); + if (!manifest.contains("baritone.launch.BaritoneTweaker")) { + throw new IllegalStateException("unable to replace"); + } + manifest = manifest.replace("baritone.launch.BaritoneTweaker", "org.spongepowered.asm.launch.MixinTweaker"); + jos.write(manifest.getBytes()); } else { copy(jarFile.getInputStream(entry), jos); } } + for (File file : toInclude) { + try (JarFile mixin = new JarFile(file)) { + for (JarEntry entry : mixin.stream().sorted(Comparator.comparing(JarEntry::getName)).collect(Collectors.toList())) { + if (entry.getName().startsWith("META-INF") && !entry.getName().startsWith("META-INF/services")) { + continue; + } + jos.putNextEntry(entry); + copy(mixin.getInputStream(entry), jos); + } + } + } jos.finish(); } + System.out.println("Done with determinizer"); } private static void copy(InputStream is, OutputStream os) throws IOException { @@ -82,7 +104,7 @@ private static void copy(InputStream is, OutputStream os) throws IOException { } } - private static String writeSorted(JsonObject in) throws IOException { + private static String writeSorted(JsonElement in) throws IOException { StringWriter writer = new StringWriter(); JsonWriter jw = new JsonWriter(writer); ORDERED_JSON_WRITER.write(jw, in); diff --git a/fabric/build.gradle b/fabric/build.gradle index b51ba7bd1..2bcd2b027 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -19,13 +19,15 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask plugins { - id "com.github.johnrengelman.shadow" version "7.0.0" + id "com.github.johnrengelman.shadow" version "8.0.0" } archivesBaseName = archivesBaseName + "-fabric" -minecraft { - fabric() +unimined.minecraft { + fabric { + loader project.fabric_version + } } configurations { @@ -36,8 +38,6 @@ configurations { } dependencies { - fabric "net.fabricmc:fabric-loader:${project.fabric_version}" - // because of multiple sourcesets `common project(":")` doesn't work for (sourceSet in rootProject.sourceSets) { if (sourceSet == rootProject.sourceSets.test) continue @@ -45,6 +45,7 @@ dependencies { common sourceSet.output shadowCommon sourceSet.output } + include 'dev.babbaj:nether-pathfinder:1.3.0' } processResources { @@ -57,17 +58,17 @@ processResources { shadowJar { configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { inputFile.set shadowJar.archiveFile dependsOn shadowJar - classifier null + archiveClassifier.set null } jar { - classifier "dev" + archiveClassifier.set "dev" } components.java { @@ -76,10 +77,25 @@ components.java { } } +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "fabric" +} + +task createDist(type: CreateDistTask, dependsOn: proguard) { + compType "fabric" +} + +build.finalizedBy(createDist) + publishing { publications { maven(MavenPublication) { - artifact "../dist/baritone-api-" + version + ".jar" + groupId "meteordevelopment" + artifactId "baritone" + + artifact "../dist/baritone-api-fabric-" + version + ".jar" } } @@ -99,4 +115,4 @@ publishing { } } } -} \ No newline at end of file +} diff --git a/fabric/src/main/java/baritone/launch/FabricMixinPlugin.java b/fabric/src/main/java/baritone/launch/FabricMixinPlugin.java index 655de50d4..816998e86 100644 --- a/fabric/src/main/java/baritone/launch/FabricMixinPlugin.java +++ b/fabric/src/main/java/baritone/launch/FabricMixinPlugin.java @@ -68,4 +68,4 @@ public void preApply(String targetClassName, ClassNode targetClass, String mixin @Override public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} -} +} \ No newline at end of file diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 403274811..d0a9d5fed 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -25,7 +25,7 @@ ], "depends": { - "fabricloader": ">=0.11.0", - "minecraft": ">=1.20 <=1.20.1" + "fabricloader": ">=0.14.22", + "minecraft": "1.20.2" } } diff --git a/forge/build.gradle b/forge/build.gradle index 83fe38ddf..d12da3201 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -19,15 +19,19 @@ import baritone.gradle.task.CreateDistTask import baritone.gradle.task.ProguardTask plugins { - id "com.github.johnrengelman.shadow" version "7.0.0" + id "com.github.johnrengelman.shadow" version "8.0.0" } archivesBaseName = archivesBaseName + "-forge" -minecraft { +unimined.minecraft { + mappings { + devFallbackNamespace "intermediary" + } + forge { - devFallbackNamespace = "intermediary" - mixinConfig = ["mixins.baritone.json"] + loader project.forge_version + mixinConfig ["mixins.baritone.json"] } } @@ -45,8 +49,6 @@ configurations { } dependencies { - forge "net.minecraftforge:forge:${rootProject.forge_version}" - // because of multiple sourcesets `common project(":")` doesn't work for (sourceSet in rootProject.sourceSets) { if (sourceSet == rootProject.sourceSets.test) continue @@ -54,6 +56,7 @@ dependencies { common sourceSet.output shadowCommon sourceSet.output } + shadowCommon 'dev.babbaj:nether-pathfinder:1.3.0' } processResources { @@ -66,17 +69,17 @@ processResources { shadowJar { configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { inputFile.set shadowJar.archiveFile dependsOn shadowJar - classifier null + archiveClassifier.set null } jar { - classifier "dev" + archiveClassifier.set "dev" manifest { attributes( @@ -93,4 +96,30 @@ components.java { withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { skip() } +} + +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' + compType "forge" +} + +task createDist(type: CreateDistTask, dependsOn: proguard) { + compType "forge" +} + +build.finalizedBy(createDist) + +publishing { + publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } } \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index b29b3b1a0..24b35ab23 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -6,7 +6,7 @@ # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[46,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion="[48,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" # A URL to refer people to when problems occur with this mod issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional @@ -35,6 +35,6 @@ A Minecraft pathfinder bot. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="[1.20,1.20.1]" +versionRange="[1.20.2]" ordering="NONE" side="BOTH" diff --git a/gradle.properties b/gradle.properties index e19dae15d..d7698ae1a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx4G available_loaders=fabric -mod_version=1.20.1-beta1 +mod_version=1.20.2-beta1 maven_group=baritone archives_base_name=baritone -minecraft_version=1.20.1 -forge_version=1.20.1-47.0.1 -fabric_version=0.14.18 +minecraft_version=1.20.2 +forge_version=48.0.1 +fabric_version=0.14.22 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 00e33edef..15de90249 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c8..744e882ed 100755 --- a/gradlew +++ b/gradlew @@ -72,7 +72,7 @@ case "`uname`" in Darwin* ) darwin=true ;; - MINGW* ) + MSYS* | MINGW* ) msys=true ;; NONSTOP* ) diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 0a7b128b9..0b5211b04 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -1,5 +1,9 @@ +# Meteor -keep class * + + + -keepattributes Signature -keepattributes *Annotation* -keepattributes InnerClasses @@ -21,6 +25,8 @@ -dontwarn module-info # we dont have forge -dontwarn baritone.launch.BaritoneForgeModXD +# progard doesn't like signature polymorphism +-dontwarn java.lang.invoke.MethodHandle # please do not change the comment below -keep class baritone.api.** { *; } # this is the keep api diff --git a/src/api/java/baritone/api/BaritoneAPI.java b/src/api/java/baritone/api/BaritoneAPI.java index 4a87449cd..fa98525bf 100644 --- a/src/api/java/baritone/api/BaritoneAPI.java +++ b/src/api/java/baritone/api/BaritoneAPI.java @@ -32,7 +32,7 @@ public final class BaritoneAPI { static { settings = new Settings(); - SettingsUtil.readAndApply(settings); + SettingsUtil.readAndApply(settings, SettingsUtil.SETTINGS_DEFAULT_NAME); try { provider = (IBaritoneProvider) Class.forName("baritone.BaritoneProvider").newInstance(); diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 0cc73b0d1..3c9681532 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -88,6 +88,12 @@ public interface IBaritone { */ IGetToBlockProcess getGetToBlockProcess(); + /** + * @return The {@link IElytraProcess} instance + * @see IElytraProcess + */ + IElytraProcess getElytraProcess(); + /** * @return The {@link IWorldProvider} instance * @see IWorldProvider diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 7fa97d168..1daec2ef5 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -21,9 +21,12 @@ import baritone.api.command.ICommand; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; + import java.util.List; import java.util.Objects; -import net.minecraft.client.player.LocalPlayer; /** * Provides the present {@link IBaritone} instances, as well as non-baritone instance related APIs. @@ -51,15 +54,13 @@ public interface IBaritoneProvider { List getAllBaritones(); /** - * Provides the {@link IBaritone} instance for a given {@link LocalPlayer}. This will likely be - * replaced with or be overloaded in addition to {@code #getBaritoneForUser(IBaritoneUser)} when - * {@code bot-system} is merged into {@code master}. + * Provides the {@link IBaritone} instance for a given {@link LocalPlayer}. * * @param player The player * @return The {@link IBaritone} instance. */ default IBaritone getBaritoneForPlayer(LocalPlayer player) { - for (IBaritone baritone : getAllBaritones()) { + for (IBaritone baritone : this.getAllBaritones()) { if (Objects.equals(player, baritone.getPlayerContext().player())) { return baritone; } @@ -67,6 +68,55 @@ default IBaritone getBaritoneForPlayer(LocalPlayer player) { return null; } + /** + * Provides the {@link IBaritone} instance for a given {@link Minecraft}. + * + * @param minecraft The minecraft + * @return The {@link IBaritone} instance. + */ + default IBaritone getBaritoneForMinecraft(Minecraft minecraft) { + for (IBaritone baritone : this.getAllBaritones()) { + if (Objects.equals(minecraft, baritone.getPlayerContext().minecraft())) { + return baritone; + } + } + return null; + } + + /** + * Provides the {@link IBaritone} instance for the player with the specified connection. + * + * @param connection The connection + * @return The {@link IBaritone} instance. + */ + default IBaritone getBaritoneForConnection(ClientPacketListener connection) { + for (IBaritone baritone : this.getAllBaritones()) { + final LocalPlayer player = baritone.getPlayerContext().player(); + if (player != null && player.connection == connection) { + return baritone; + } + } + return null; + } + + /** + * Creates and registers a new {@link IBaritone} instance using the specified {@link Minecraft}. The existing + * instance is returned if already registered. + * + * @param minecraft The minecraft + * @return The {@link IBaritone} instance + */ + IBaritone createBaritone(Minecraft minecraft); + + /** + * Destroys and removes the specified {@link IBaritone} instance. If the specified instance is the + * {@link #getPrimaryBaritone() primary baritone}, this operation has no effect and will return {@code false}. + * + * @param baritone The baritone instance to remove + * @return Whether the baritone instance was removed + */ + boolean destroyBaritone(IBaritone baritone); + /** * Returns the {@link IWorldScanner} instance. This is not a type returned by * {@link IBaritone} implementation, because it is not linked with {@link IBaritone}. diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index a0b5240d1..be9830ae6 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -17,22 +17,30 @@ package baritone.api; +import baritone.api.utils.Helper; import baritone.api.utils.NotificationHelper; import baritone.api.utils.SettingsUtil; import baritone.api.utils.TypeUtils; import baritone.api.utils.gui.BaritoneToast; +import net.minecraft.client.GuiMessageTag; import net.minecraft.client.Minecraft; import net.minecraft.core.Vec3i; import net.minecraft.network.chat.Component; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; + import java.awt.*; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.util.*; import java.util.List; +import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -68,6 +76,16 @@ public final class Settings { */ public final Setting allowInventory = new Setting<>(false); + /** + * Wait this many ticks between InventoryBehavior moving inventory items + */ + public final Setting ticksBetweenInventoryMoves = new Setting<>(1); + + /** + * Come to a halt before doing any inventory moves. Intended for anticheat such as 2b2t + */ + public final Setting inventoryMoveOnlyIfStationary = new Setting<>(false); + /** * Disable baritone's auto-tool at runtime, but still assume that another mod will provide auto tool functionality *

@@ -609,6 +627,13 @@ public final class Settings { */ public final Setting pruneRegionsFromRAM = new Setting<>(true); + /** + * The chunk packer queue can never grow to larger than this, if it does, the oldest chunks are discarded + *

+ * The newest chunks are kept, so that if you're moving in a straight line quickly then stop, your immediate render distance is still included + */ + public final Setting chunkPackerQueueMaxSize = new Setting<>(2000); + /** * Fill in blocks behind you */ @@ -710,6 +735,37 @@ public final class Settings { */ public final Setting freeLook = new Setting<>(true); + /** + * Break and place blocks without having to force the client-sided rotations. Requires {@link #freeLook}. + */ + public final Setting blockFreeLook = new Setting<>(false); + + /** + * Automatically elytra fly without having to force the client-sided rotations. + */ + public final Setting elytraFreeLook = new Setting<>(true); + + /** + * Forces the client-sided yaw rotation to an average of the last {@link #smoothLookTicks} of server-sided rotations. + */ + public final Setting smoothLook = new Setting<>(false); + + /** + * Same as {@link #smoothLook} but for elytra flying. + */ + public final Setting elytraSmoothLook = new Setting<>(false); + + /** + * The number of ticks to average across for {@link #smoothLook}; + */ + public final Setting smoothLookTicks = new Setting<>(5); + + /** + * When true, the player will remain with its existing look direction as often as possible. + * Although, in some cases this can get it stuck, hence this setting to disable that behavior. + */ + public final Setting remainWithExistingLookDirection = new Setting<>(true); + /** * Will cause some minor behavioral differences to ensure that Baritone works on anticheats. *

@@ -772,6 +828,11 @@ public final class Settings { */ public final Setting shortBaritonePrefix = new Setting<>(false); + /** + * Use a modern message tag instead of a prefix when logging to chat + */ + public final Setting useMessageTag = new Setting<>(false); + /** * Echo commands to chat when they are run */ @@ -845,6 +906,11 @@ public final class Settings { */ public final Setting minYLevelWhileMining = new Setting<>(0); + /** + * Sets the maximum y level to mine ores at. + */ + public final Setting maxYLevelWhileMining = new Setting<>(2031); + /** * This will only allow baritone to mine exposed ores, can be used to stop ore obfuscators on servers that use them. */ @@ -1141,13 +1207,18 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ - public final Setting> logger = new Setting<>(msg -> Minecraft.getInstance().gui.getChat().addMessage(msg)); + @JavaOnly + public final Setting> logger = new Setting<>((msg) -> { + final GuiMessageTag tag = useMessageTag.value ? Helper.MESSAGE_TAG : null; + Minecraft.getInstance().gui.getChat().addMessage(msg, null, tag); + }); /** * The function that is called when Baritone will send a desktop notification. This function can be added to * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ + @JavaOnly public final Setting> notifier = new Setting<>(NotificationHelper::notify); /** @@ -1155,6 +1226,7 @@ public final class Settings { * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting * {@link Setting#value}; */ + @JavaOnly public final Setting> toaster = new Setting<>(BaritoneToast::addOrUpdate); /** @@ -1287,6 +1359,120 @@ public final class Settings { */ public final Setting notificationOnMineFail = new Setting<>(true); + /** + * The number of ticks of elytra movement to simulate while firework boost is not active. Higher values are + * computationally more expensive. + */ + public final Setting elytraSimulationTicks = new Setting<>(20); + + /** + * The maximum allowed deviation in pitch from a direct line-of-sight to the flight target. Higher values are + * computationally more expensive. + */ + public final Setting elytraPitchRange = new Setting<>(25); + + /** + * The minimum speed that the player can drop to (in blocks/tick) before a firework is automatically deployed. + */ + public final Setting elytraFireworkSpeed = new Setting<>(1.2); + + /** + * The delay after the player's position is set-back by the server that a firework may be automatically deployed. + * Value is in ticks. + */ + public final Setting elytraFireworkSetbackUseDelay = new Setting<>(15); + + /** + * The minimum padding value that is added to the player's hitbox when considering which point to fly to on the + * path. High values can result in points not being considered which are otherwise safe to fly to. Low values can + * result in flight paths which are extremely tight, and there's the possibility of crashing due to getting too low + * to the ground. + */ + public final Setting elytraMinimumAvoidance = new Setting<>(0.2); + + /** + * If enabled, avoids using fireworks when descending along the flight path. + */ + public final Setting elytraConserveFireworks = new Setting<>(false); + + /** + * Renders the raytraces that are performed by the elytra fly calculation. + */ + public final Setting elytraRenderRaytraces = new Setting<>(false); + + /** + * Renders the raytraces that are used in the hitbox part of the elytra fly calculation. + * Requires {@link #elytraRenderRaytraces}. + */ + public final Setting elytraRenderHitboxRaytraces = new Setting<>(false); + + /** + * Renders the best elytra flight path that was simulated each tick. + */ + public final Setting elytraRenderSimulation = new Setting<>(true); + + /** + * Automatically path to and jump off of ledges to initiate elytra flight when grounded. + */ + public final Setting elytraAutoJump = new Setting<>(false); + + /** + * The seed used to generate chunks for long distance elytra path-finding in the nether. + * Defaults to 2b2t's nether seed. + */ + public final Setting elytraNetherSeed = new Setting<>(146008555100680L); + + /** + * Whether nether-pathfinder should generate terrain based on {@link #elytraNetherSeed}. + * If false all chunks that haven't been loaded are assumed to be air. + */ + public final Setting elytraPredictTerrain = new Setting<>(false); + + /** + * Automatically swap the current elytra with a new one when the durability gets too low + */ + public final Setting elytraAutoSwap = new Setting<>(true); + + /** + * The minimum durability an elytra can have before being swapped + */ + public final Setting elytraMinimumDurability = new Setting<>(5); + + /** + * The minimum fireworks before landing early for safety + */ + public final Setting elytraMinFireworksBeforeLanding = new Setting<>(5); + + /** + * Automatically land when elytra is almost out of durability, or almost out of fireworks + */ + public final Setting elytraAllowEmergencyLand = new Setting<>(true); + + /** + * Time between culling far away chunks from the nether pathfinder chunk cache + */ + public final Setting elytraTimeBetweenCacheCullSecs = new Setting<>(TimeUnit.MINUTES.toSeconds(3)); + + /** + * Maximum distance chunks can be before being culled from the nether pathfinder chunk cache + */ + public final Setting elytraCacheCullDistance = new Setting<>(5000); + + /** + * Should elytra consider nether brick a valid landing block + */ + public final Setting elytraAllowLandOnNetherFortress = new Setting<>(false); + + /** + * Has the user read and understood the elytra terms and conditions + */ + public final Setting elytraTermsAccepted = new Setting<>(false); + + /** + * Verbose chat logging in elytra mode + */ + public final Setting elytraChatSpam = new Setting<>(false); + /** * A map of lowercase setting field names to their respective setting */ @@ -1304,6 +1490,7 @@ public final class Setting { public T value; public final T defaultValue; private String name; + private boolean javaOnly; @SuppressWarnings("unchecked") private Setting(T value) { @@ -1312,6 +1499,7 @@ private Setting(T value) { } this.value = value; this.defaultValue = value; + this.javaOnly = false; } /** @@ -1348,8 +1536,25 @@ public void reset() { public final Type getType() { return settingTypes.get(this); } + + /** + * This should always be the same as whether the setting can be parsed from or serialized to a string; in other + * words, the only way to modify it is by writing to {@link #value} programatically. + * + * @return {@code true} if the setting can not be set or read by the user + */ + public boolean isJavaOnly() { + return javaOnly; + } } + /** + * Marks a {@link Setting} field as being {@link Setting#isJavaOnly() Java-only} + */ + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.FIELD) + private @interface JavaOnly {} + // here be dragons Settings() { @@ -1365,6 +1570,7 @@ public final Type getType() { Setting setting = (Setting) field.get(this); String name = field.getName(); setting.name = name; + setting.javaOnly = field.isAnnotationPresent(JavaOnly.class); name = name.toLowerCase(); if (tmpByName.containsKey(name)) { throw new IllegalStateException("Duplicate setting name"); diff --git a/src/api/java/baritone/api/behavior/ILookBehavior.java b/src/api/java/baritone/api/behavior/ILookBehavior.java index 058a5dd88..d78e7f8b3 100644 --- a/src/api/java/baritone/api/behavior/ILookBehavior.java +++ b/src/api/java/baritone/api/behavior/ILookBehavior.java @@ -17,6 +17,8 @@ package baritone.api.behavior; +import baritone.api.Settings; +import baritone.api.behavior.look.IAimProcessor; import baritone.api.utils.Rotation; /** @@ -26,14 +28,23 @@ public interface ILookBehavior extends IBehavior { /** - * Updates the current {@link ILookBehavior} target to target - * the specified rotations on the next tick. If force is {@code true}, - * then freeLook will be overriden and angles will be set regardless. - * If any sort of block interaction is required, force should be {@code true}, - * otherwise, it should be {@code false}; + * Updates the current {@link ILookBehavior} target to target the specified rotations on the next tick. If any sort + * of block interaction is required, {@code blockInteract} should be {@code true}. It is not guaranteed that the + * rotations set by the caller will be the exact rotations expressed by the client (This is due to settings like + * {@link Settings#randomLooking}). If the rotations produced by this behavior are required, then the + * {@link #getAimProcessor() aim processor} should be used. * - * @param rotation The target rotations - * @param force Whether or not to "force" the rotations + * @param rotation The target rotations + * @param blockInteract Whether the target rotations are needed for a block interaction */ - void updateTarget(Rotation rotation, boolean force); + void updateTarget(Rotation rotation, boolean blockInteract); + + /** + * The aim processor instance for this {@link ILookBehavior}, which is responsible for applying additional, + * deterministic transformations to the target rotation set by {@link #updateTarget}. + * + * @return The aim processor + * @see IAimProcessor#fork + */ + IAimProcessor getAimProcessor(); } diff --git a/src/api/java/baritone/api/behavior/look/IAimProcessor.java b/src/api/java/baritone/api/behavior/look/IAimProcessor.java new file mode 100644 index 000000000..c7c60f413 --- /dev/null +++ b/src/api/java/baritone/api/behavior/look/IAimProcessor.java @@ -0,0 +1,45 @@ +/* + * 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.behavior.look; + +import baritone.api.utils.Rotation; + +/** + * @author Brady + */ +public interface IAimProcessor { + + /** + * Returns the actual rotation that will be used when the desired rotation is requested. The returned rotation + * always reflects what would happen in the upcoming tick. In other words, it is a pure function, and no internal + * state changes. If simulation of the rotation states beyond the next tick is required, then a + * {@link IAimProcessor#fork fork} should be created. + * + * @param desired The desired rotation to set + * @return The actual rotation + */ + Rotation peekRotation(Rotation desired); + + /** + * Returns a copy of this {@link IAimProcessor} which has its own internal state and is manually tickable. + * + * @return The forked processor + * @see ITickableAimProcessor + */ + ITickableAimProcessor fork(); +} diff --git a/src/api/java/baritone/api/behavior/look/ITickableAimProcessor.java b/src/api/java/baritone/api/behavior/look/ITickableAimProcessor.java new file mode 100644 index 000000000..e0a07ae57 --- /dev/null +++ b/src/api/java/baritone/api/behavior/look/ITickableAimProcessor.java @@ -0,0 +1,47 @@ +/* + * 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.behavior.look; + +import baritone.api.utils.Rotation; + +/** + * @author Brady + */ +public interface ITickableAimProcessor extends IAimProcessor { + + /** + * Advances the internal state of this aim processor by a single tick. + */ + void tick(); + + /** + * Calls {@link #tick()} the specified number of times. + * + * @param ticks The number of calls + */ + void advance(int ticks); + + /** + * Returns the actual rotation as provided by {@link #peekRotation(Rotation)}, and then automatically advances the + * internal state by one {@link #tick() tick}. + * + * @param rotation The desired rotation to set + * @return The actual rotation + */ + Rotation nextRotation(Rotation rotation); +} diff --git a/src/api/java/baritone/api/cache/IWorldProvider.java b/src/api/java/baritone/api/cache/IWorldProvider.java index 0e54ef469..b9ca149c7 100644 --- a/src/api/java/baritone/api/cache/IWorldProvider.java +++ b/src/api/java/baritone/api/cache/IWorldProvider.java @@ -17,6 +17,8 @@ package baritone.api.cache; +import java.util.function.Consumer; + /** * @author Brady * @since 9/24/2018 @@ -29,4 +31,11 @@ public interface IWorldProvider { * @return The current world data */ IWorldData getCurrentWorld(); + + default void ifWorldLoaded(Consumer callback) { + final IWorldData currentWorld = this.getCurrentWorld(); + if (currentWorld != null) { + callback.accept(currentWorld); + } + } } diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java index 21562e188..f92c968a2 100644 --- a/src/api/java/baritone/api/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -23,11 +23,17 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; +import java.util.regex.Pattern; import java.util.stream.Stream; public enum BlockById implements IDatatypeFor { INSTANCE; + /** + * Matches (domain:)?name? where domain and name are [a-z0-9_.-]+ and [a-z0-9/_.-]+ respectively. + */ + private static Pattern PATTERN = Pattern.compile("(?:[a-z0-9_.-]+:)?[a-z0-9/_.-]*"); + @Override public Block get(IDatatypeContext ctx) throws CommandException { ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); @@ -40,13 +46,19 @@ public Block get(IDatatypeContext ctx) throws CommandException { @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + String arg = ctx.getConsumer().getString(); + + if (!PATTERN.matcher(arg).matches()) { + return Stream.empty(); + } + return new TabCompleteHelper() .append( BuiltInRegistries.BLOCK.keySet() .stream() .map(Object::toString) ) - .filterPrefixNamespaced(ctx.getConsumer().getString()) + .filterPrefixNamespaced(arg) .sortAlphabetically() .stream(); } diff --git a/src/api/java/baritone/api/command/datatypes/ForAxis.java b/src/api/java/baritone/api/command/datatypes/ForAxis.java new file mode 100644 index 000000000..369697dcb --- /dev/null +++ b/src/api/java/baritone/api/command/datatypes/ForAxis.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.command.datatypes; + +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import net.minecraft.core.Direction; + +import java.util.Locale; +import java.util.stream.Stream; + +public enum ForAxis implements IDatatypeFor { + INSTANCE; + + @Override + public Direction.Axis get(IDatatypeContext ctx) throws CommandException { + return Direction.Axis.valueOf(ctx.getConsumer().getString().toUpperCase(Locale.US)); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + return new TabCompleteHelper() + .append(Stream.of(Direction.Axis.values()) + .map(Direction.Axis::getName).map(String::toLowerCase)) + .filterPrefix(ctx.getConsumer().getString()) + .stream(); + } +} diff --git a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java index 978450a23..5b949cd63 100644 --- a/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java +++ b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java @@ -18,20 +18,137 @@ package baritone.api.command.datatypes; import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.BlockOptionalMeta; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.Property; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Collectors; import java.util.stream.Stream; public enum ForBlockOptionalMeta implements IDatatypeFor { INSTANCE; + /** + * Matches (domain:)?name([(property=value)*])? but the input can be truncated at any position. + * domain and name are [a-z0-9_.-]+ and [a-z0-9/_.-]+ because that's what mc 1.13+ accepts. + * property and value use the same format as domain. + */ + // Good luck reading this. + private static Pattern PATTERN = Pattern.compile("(?:[a-z0-9_.-]+:)?(?:[a-z0-9/_.-]+(?:\\[(?:(?:[a-z0-9_.-]+=[a-z0-9_.-]+,)*(?:[a-z0-9_.-]+(?:=(?:[a-z0-9_.-]+(?:\\])?)?)?)?|\\])?)?)?"); + @Override public BlockOptionalMeta get(IDatatypeContext ctx) throws CommandException { return new BlockOptionalMeta(ctx.getConsumer().getString()); } @Override - public Stream tabComplete(IDatatypeContext ctx) { - return ctx.getConsumer().tabCompleteDatatype(BlockById.INSTANCE); + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + String arg = ctx.getConsumer().peekString(); + + if (!PATTERN.matcher(arg).matches()) { + // Invalid format; we can't complete this. + ctx.getConsumer().getString(); + return Stream.empty(); + } + + if (arg.endsWith("]")) { + // We are already done. + ctx.getConsumer().getString(); + return Stream.empty(); + } + + if (!arg.contains("[")) { + // no properties so we are completing the block id + return ctx.getConsumer().tabCompleteDatatype(BlockById.INSTANCE); + } + + ctx.getConsumer().getString(); + + // destructuring assignment? Please? + String blockId, properties; + { + String[] parts = splitLast(arg, '['); + blockId = parts[0]; + properties = parts[1]; + } + + Block block = BuiltInRegistries.BLOCK.getOptional(new ResourceLocation(blockId)).orElse(null); + if (block == null) { + // This block doesn't exist so there's no properties to complete. + return Stream.empty(); + } + + String leadingProperties, lastProperty; + { + String[] parts = splitLast(properties, ','); + leadingProperties = parts[0]; + lastProperty = parts[1]; + } + + if (!lastProperty.contains("=")) { + // The last property-value pair doesn't have a value yet so we are completing its name + Set usedProps = Stream.of(leadingProperties.split(",")) + .map(pair -> pair.split("=")[0]) + .collect(Collectors.toSet()); + + String prefix = arg.substring(0, arg.length() - lastProperty.length()); + return new TabCompleteHelper() + .append( + block.getStateDefinition() + .getProperties() + .stream() + .map(Property::getName) + ) + .filter(prop -> !usedProps.contains(prop)) + .filterPrefix(lastProperty) + .sortAlphabetically() + .map(prop -> prefix + prop) + .stream(); + } + + String lastName, lastValue; + { + String[] parts = splitLast(lastProperty, '='); + lastName = parts[0]; + lastValue = parts[1]; + } + + // We are completing the value of a property + String prefix = arg.substring(0, arg.length() - lastValue.length()); + + Property property = block.getStateDefinition().getProperty(lastName); + if (property == null) { + // The property does not exist so there's no values to complete + return Stream.empty(); + } + + return new TabCompleteHelper() + .append(getValues(property)) + .filterPrefix(lastValue) + .sortAlphabetically() + .map(val -> prefix + val) + .stream(); + } + + /** + * Always returns exactly two strings. + * If the separator is not found the FIRST returned string is empty. + */ + private static String[] splitLast(String string, char chr) { + int idx = string.lastIndexOf(chr); + if (idx == -1) { + return new String[]{"", string}; + } + return new String[]{string.substring(0, idx), string.substring(idx + 1)}; + } + + // this shouldn't need to be a separate method? + private static > Stream getValues(Property property) { + return property.getPossibleValues().stream().map(property::getName); } } diff --git a/src/api/java/baritone/api/command/datatypes/RelativeFile.java b/src/api/java/baritone/api/command/datatypes/RelativeFile.java index 7d7e6899b..e85f12971 100644 --- a/src/api/java/baritone/api/command/datatypes/RelativeFile.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeFile.java @@ -19,6 +19,8 @@ import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; +import baritone.api.utils.Helper; +import net.minecraft.client.Minecraft; import java.io.File; import java.io.IOException; @@ -30,8 +32,6 @@ import java.util.Objects; import java.util.stream.Stream; -import static baritone.api.utils.Helper.HELPER; - public enum RelativeFile implements IDatatypePost { INSTANCE; @@ -93,8 +93,13 @@ public static Stream tabComplete(IArgConsumer consumer, File base0) thro .filter(s -> !s.contains(" ")); } + @Deprecated public static File gameDir() { - File gameDir = HELPER.mc.gameDirectory.getAbsoluteFile(); + return gameDir(Helper.mc); + } + + public static File gameDir(Minecraft mc) { + File gameDir = mc.gameDirectory.getAbsoluteFile(); if (gameDir.getName().equals(".")) { return gameDir.getParentFile(); } diff --git a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java index d615ff2cd..a1f826262 100644 --- a/src/api/java/baritone/api/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -19,8 +19,8 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; + import java.util.List; -import net.minecraft.ChatFormatting; import static baritone.api.utils.Helper.HELPER; @@ -36,10 +36,6 @@ public CommandUnhandledException(Throwable cause) { @Override public void handle(ICommand command, List args) { - HELPER.logDirect("An unhandled exception occurred. " + - "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", - ChatFormatting.RED); - - this.printStackTrace(); + HELPER.logUnhandledException(this); } } diff --git a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java index a7dfb7f8a..4f822352a 100644 --- a/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/TabCompleteHelper.java @@ -252,7 +252,7 @@ public TabCompleteHelper addCommands(ICommandManager manager) { public TabCompleteHelper addSettings() { return append( BaritoneAPI.getSettings().allSettings.stream() - .filter(s -> !SettingsUtil.javaOnlySetting(s)) + .filter(s -> !s.isJavaOnly()) .map(Settings.Setting::getName) .sorted(String.CASE_INSENSITIVE_ORDER) ); diff --git a/src/api/java/baritone/api/event/events/BlockChangeEvent.java b/src/api/java/baritone/api/event/events/BlockChangeEvent.java new file mode 100644 index 000000000..4fc496eb5 --- /dev/null +++ b/src/api/java/baritone/api/event/events/BlockChangeEvent.java @@ -0,0 +1,47 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.utils.Pair; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.List; + +/** + * @author Brady + */ +public final class BlockChangeEvent { + + private final ChunkPos chunk; + private final List> blocks; + + public BlockChangeEvent(ChunkPos pos, List> blocks) { + this.chunk = pos; + this.blocks = blocks; + } + + public ChunkPos getChunkPos() { + return this.chunk; + } + + public List> getBlocks() { + return this.blocks; + } +} diff --git a/src/api/java/baritone/api/event/events/ChunkEvent.java b/src/api/java/baritone/api/event/events/ChunkEvent.java index f27475bce..bb22a47b1 100644 --- a/src/api/java/baritone/api/event/events/ChunkEvent.java +++ b/src/api/java/baritone/api/event/events/ChunkEvent.java @@ -57,31 +57,38 @@ public ChunkEvent(EventState state, Type type, int x, int z) { /** * @return The state of the event */ - public final EventState getState() { + public EventState getState() { return this.state; } /** * @return The type of chunk event that occurred; */ - public final Type getType() { + public Type getType() { return this.type; } /** * @return The Chunk X position. */ - public final int getX() { + public int getX() { return this.x; } /** * @return The Chunk Z position. */ - public final int getZ() { + public int getZ() { return this.z; } + /** + * @return {@code true} if the event was fired after a chunk population + */ + public boolean isPostPopulate() { + return this.state == EventState.POST && this.type.isPopulate(); + } + public enum Type { /** @@ -106,6 +113,10 @@ public enum Type { *

* And it's a partial chunk */ - POPULATE_PARTIAL + POPULATE_PARTIAL; + + public final boolean isPopulate() { + return this == POPULATE_FULL || this == POPULATE_PARTIAL; + } } } diff --git a/src/api/java/baritone/api/event/events/RotationMoveEvent.java b/src/api/java/baritone/api/event/events/RotationMoveEvent.java index bae83c0fa..c5a9ea9f9 100644 --- a/src/api/java/baritone/api/event/events/RotationMoveEvent.java +++ b/src/api/java/baritone/api/event/events/RotationMoveEvent.java @@ -17,6 +17,7 @@ package baritone.api.event.events; +import baritone.api.utils.Rotation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.phys.Vec3; @@ -32,14 +33,27 @@ public final class RotationMoveEvent { */ private final Type type; + private final Rotation original; + /** * The yaw rotation */ private float yaw; - public RotationMoveEvent(Type type, float yaw) { + /** + * The pitch rotation + */ + private float pitch; + + public RotationMoveEvent(Type type, float yaw, float pitch) { this.type = type; + this.original = new Rotation(yaw, pitch); this.yaw = yaw; + this.pitch = pitch; + } + + public Rotation getOriginal() { + return this.original; } /** @@ -47,21 +61,37 @@ public RotationMoveEvent(Type type, float yaw) { * * @param yaw Yaw rotation */ - public final void setYaw(float yaw) { + public void setYaw(float yaw) { this.yaw = yaw; } /** * @return The yaw rotation */ - public final float getYaw() { + public float getYaw() { return this.yaw; } + /** + * Set the pitch movement rotation + * + * @param pitch Pitch rotation + */ + public void setPitch(float pitch) { + this.pitch = pitch; + } + + /** + * @return The pitch rotation + */ + public float getPitch() { + return pitch; + } + /** * @return The type of the event */ - public final Type getType() { + public Type getType() { return this.type; } diff --git a/src/api/java/baritone/api/event/events/TickEvent.java b/src/api/java/baritone/api/event/events/TickEvent.java index 5c484ae49..405ad3c49 100644 --- a/src/api/java/baritone/api/event/events/TickEvent.java +++ b/src/api/java/baritone/api/event/events/TickEvent.java @@ -18,9 +18,18 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; +import net.minecraft.client.Minecraft; import java.util.function.BiFunction; +/** + * Called on and after each game tick of the primary {@link Minecraft} instance and dispatched to all Baritone + * instances. + *

+ * When {@link #state} is {@link EventState#PRE}, the event is being called just prior to when the current in-game + * screen is ticked. When {@link #state} is {@link EventState#POST}, the event is being called at the very end + * of the {@link Minecraft#runTick()} method. + */ public final class TickEvent { private static int overallTickCount; diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index 9eac8de46..54aabe387 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -33,6 +33,9 @@ public interface AbstractGameEventListener extends IGameEventListener { @Override default void onTick(TickEvent event) {} + @Override + default void onPostTick(TickEvent event) {} + @Override default void onPlayerUpdate(PlayerUpdateEvent event) {} @@ -45,6 +48,9 @@ default void onPreTabComplete(TabCompleteEvent event) {} @Override default void onChunkEvent(ChunkEvent event) {} + @Override + default void onBlockChange(BlockChangeEvent event) {} + @Override default void onRenderPass(RenderEvent event) {} diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index a34ea4ef3..6939f8d66 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -40,6 +40,14 @@ public interface IGameEventListener { */ void onTick(TickEvent event); + /** + * Run once per game tick after the tick is completed + * + * @param event The event + * @see Minecraft#runTick() + */ + void onPostTick(TickEvent event); + /** * Run once per game tick from before and after the player rotation is sent to the server. * @@ -70,6 +78,13 @@ public interface IGameEventListener { */ void onChunkEvent(ChunkEvent event); + /** + * Runs after a single or multi block change packet is received and processed. + * + * @param event The event + */ + void onBlockChange(BlockChangeEvent event); + /** * Runs once per world render pass. * diff --git a/src/api/java/baritone/api/pathing/goals/GoalAxis.java b/src/api/java/baritone/api/pathing/goals/GoalAxis.java index 7c9b26705..6e2f84e7a 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalAxis.java +++ b/src/api/java/baritone/api/pathing/goals/GoalAxis.java @@ -42,6 +42,16 @@ public double heuristic(int x0, int y, int z0) { return flatAxisDistance * BaritoneAPI.getSettings().costHeuristic.value + GoalYLevel.calculate(BaritoneAPI.getSettings().axisHeight.value, y); } + @Override + public boolean equals(Object o) { + return o.getClass() == GoalAxis.class; + } + + @Override + public int hashCode() { + return 201385781; + } + @Override public String toString() { return "GoalAxis"; diff --git a/src/api/java/baritone/api/pathing/goals/GoalBlock.java b/src/api/java/baritone/api/pathing/goals/GoalBlock.java index 7cb9da14a..4bebe07a3 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalBlock.java @@ -17,6 +17,7 @@ package baritone.api.pathing.goals; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; import net.minecraft.core.BlockPos; @@ -66,6 +67,26 @@ public double heuristic(int x, int y, int z) { return calculate(xDiff, yDiff, zDiff); } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalBlock goal = (GoalBlock) o; + return x == goal.x + && y == goal.y + && z == goal.z; + } + + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) * 905165533; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalComposite.java b/src/api/java/baritone/api/pathing/goals/GoalComposite.java index 47522492b..8e13a86e4 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalComposite.java +++ b/src/api/java/baritone/api/pathing/goals/GoalComposite.java @@ -67,6 +67,24 @@ public double heuristic() { return min; } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalComposite goal = (GoalComposite) o; + return Arrays.equals(goals, goal.goals); + } + + @Override + public int hashCode() { + return Arrays.hashCode(goals); + } + @Override public String toString() { return "GoalComposite" + Arrays.toString(goals); diff --git a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java index 8d15e4bc9..1c04f7c6d 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java +++ b/src/api/java/baritone/api/pathing/goals/GoalGetToBlock.java @@ -17,6 +17,7 @@ package baritone.api.pathing.goals; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; import net.minecraft.core.BlockPos; @@ -60,6 +61,26 @@ public double heuristic(int x, int y, int z) { return GoalBlock.calculate(xDiff, yDiff < 0 ? yDiff + 1 : yDiff, zDiff); } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalGetToBlock goal = (GoalGetToBlock) o; + return x == goal.x + && y == goal.y + && z == goal.z; + } + + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) * -49639096; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalInverted.java b/src/api/java/baritone/api/pathing/goals/GoalInverted.java index 354e2ce39..4a3f75315 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalInverted.java +++ b/src/api/java/baritone/api/pathing/goals/GoalInverted.java @@ -17,6 +17,8 @@ package baritone.api.pathing.goals; +import java.util.Objects; + /** * Invert any goal. *

@@ -50,6 +52,24 @@ public double heuristic() { return Double.NEGATIVE_INFINITY; } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalInverted goal = (GoalInverted) o; + return Objects.equals(origin, goal.origin); + } + + @Override + public int hashCode() { + return origin.hashCode() * 495796690; + } + @Override public String toString() { return String.format("GoalInverted{%s}", origin.toString()); diff --git a/src/api/java/baritone/api/pathing/goals/GoalNear.java b/src/api/java/baritone/api/pathing/goals/GoalNear.java index 6ee35ad7b..351c08021 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalNear.java +++ b/src/api/java/baritone/api/pathing/goals/GoalNear.java @@ -17,6 +17,7 @@ package baritone.api.pathing.goals; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; import it.unimi.dsi.fastutil.doubles.DoubleIterator; @@ -86,6 +87,27 @@ public BlockPos getGoalPos() { return new BlockPos(x, y, z); } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalNear goal = (GoalNear) o; + return x == goal.x + && y == goal.y + && z == goal.z + && rangeSq == goal.rangeSq; + } + + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) + rangeSq; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java index 3906713f2..49b6f708d 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalRunAway.java +++ b/src/api/java/baritone/api/pathing/goals/GoalRunAway.java @@ -23,6 +23,7 @@ import net.minecraft.core.BlockPos; import java.util.Arrays; +import java.util.Objects; /** * Useful for automated combat (retreating specifically) @@ -124,6 +125,29 @@ public double heuristic() {// TODO less hacky solution return maxInside; } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalRunAway goal = (GoalRunAway) o; + return distanceSq == goal.distanceSq + && Arrays.equals(from, goal.from) + && Objects.equals(maintainY, goal.maintainY); + } + + @Override + public int hashCode() { + int hash = Arrays.hashCode(from); + hash = hash * 1196803141 + distanceSq; + hash = hash * -2053788840 + maintainY; + return hash; + } + @Override public String toString() { if (maintainY != null) { diff --git a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java index c4a8a6272..6facfbd79 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java +++ b/src/api/java/baritone/api/pathing/goals/GoalStrictDirection.java @@ -17,6 +17,7 @@ package baritone.api.pathing.goals; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -69,6 +70,31 @@ public double heuristic() { return Double.NEGATIVE_INFINITY; } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalStrictDirection goal = (GoalStrictDirection) o; + return x == goal.x + && y == goal.y + && z == goal.z + && dx == goal.dx + && dz == goal.dz; + } + + @Override + public int hashCode() { + int hash = (int) BetterBlockPos.longHash(x, y, z); + hash = hash * 630627507 + dx; + hash = hash * -283028380 + dz; + return hash; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java index 1b7213471..c9325e3ad 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java +++ b/src/api/java/baritone/api/pathing/goals/GoalTwoBlocks.java @@ -17,6 +17,7 @@ package baritone.api.pathing.goals; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.SettingsUtil; import baritone.api.utils.interfaces.IGoalRenderPos; import net.minecraft.core.BlockPos; @@ -72,6 +73,26 @@ public BlockPos getGoalPos() { return new BlockPos(x, y, z); } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalTwoBlocks goal = (GoalTwoBlocks) o; + return x == goal.x + && y == goal.y + && z == goal.z; + } + + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) * 516508351; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalXZ.java b/src/api/java/baritone/api/pathing/goals/GoalXZ.java index f70f6c4f7..b72711283 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalXZ.java +++ b/src/api/java/baritone/api/pathing/goals/GoalXZ.java @@ -64,6 +64,27 @@ public double heuristic(int x, int y, int z) {//mostly copied from GoalBlock return calculate(xDiff, zDiff); } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalXZ goal = (GoalXZ) o; + return x == goal.x && z == goal.z; + } + + @Override + public int hashCode() { + int hash = 1791873246; + hash = hash * 222601791 + x; + hash = hash * -1331679453 + z; + return hash; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java index 603ef9bd1..442906ad1 100644 --- a/src/api/java/baritone/api/pathing/goals/GoalYLevel.java +++ b/src/api/java/baritone/api/pathing/goals/GoalYLevel.java @@ -58,6 +58,24 @@ public static double calculate(int goalY, int currentY) { return 0; } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalYLevel goal = (GoalYLevel) o; + return level == goal.level; + } + + @Override + public int hashCode() { + return level * 1271009915; + } + @Override public String toString() { return String.format( diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index 37cbc8953..a763f86f8 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -50,6 +50,7 @@ public interface IBuilderProcess extends IBaritoneProcess { */ boolean build(String name, File schematic, Vec3i origin); + @Deprecated default boolean build(String schematicFile, BlockPos origin) { File file = new File(new File(Minecraft.getInstance().gameDirectory, "schematics"), schematicFile); return build(schematicFile, file, origin); diff --git a/src/api/java/baritone/api/process/ICustomGoalProcess.java b/src/api/java/baritone/api/process/ICustomGoalProcess.java index 5084aff2f..2bae55ce3 100644 --- a/src/api/java/baritone/api/process/ICustomGoalProcess.java +++ b/src/api/java/baritone/api/process/ICustomGoalProcess.java @@ -38,6 +38,11 @@ public interface ICustomGoalProcess extends IBaritoneProcess { */ Goal getGoal(); + /** + * @return The most recent set goal, which doesn't invalidate upon {@link #onLostControl()} + */ + Goal mostRecentGoal(); + /** * Sets the goal and begins the path execution. * diff --git a/src/api/java/baritone/api/process/IElytraProcess.java b/src/api/java/baritone/api/process/IElytraProcess.java new file mode 100644 index 000000000..28328f901 --- /dev/null +++ b/src/api/java/baritone/api/process/IElytraProcess.java @@ -0,0 +1,50 @@ +/* + * 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.process; + +import baritone.api.pathing.goals.Goal; +import net.minecraft.core.BlockPos; + +public interface IElytraProcess extends IBaritoneProcess { + + void repackChunks(); + + /** + * @return Where it is currently flying to, null if not active + */ + BlockPos currentDestination(); + + void pathTo(BlockPos destination); + + void pathTo(Goal destination); + + /** + * Resets the state of the process but will maintain the same destination and will try to keep flying + */ + void resetState(); + + /** + * @return {@code true} if the native library loaded and elytra is actually usable + */ + boolean isLoaded(); + + /* + * FOR INTERNAL USE ONLY. MAY BE REMOVED AT ANY TIME. + */ + boolean isSafeToCancel(); +} diff --git a/src/api/java/baritone/api/process/PathingCommandType.java b/src/api/java/baritone/api/process/PathingCommandType.java index af25591af..cde38eaf2 100644 --- a/src/api/java/baritone/api/process/PathingCommandType.java +++ b/src/api/java/baritone/api/process/PathingCommandType.java @@ -56,5 +56,10 @@ public enum PathingCommandType { /** * Go and ask the next process what to do */ - DEFER + DEFER, + + /** + * Sets the goal and calculates a path, but pauses instead of immediately starting the path. + */ + SET_GOAL_AND_PAUSE } diff --git a/src/api/java/baritone/api/schematic/MaskSchematic.java b/src/api/java/baritone/api/schematic/MaskSchematic.java index ee56f3425..a5749ff57 100644 --- a/src/api/java/baritone/api/schematic/MaskSchematic.java +++ b/src/api/java/baritone/api/schematic/MaskSchematic.java @@ -17,9 +17,11 @@ package baritone.api.schematic; -import java.util.List; +import baritone.api.schematic.mask.Mask; import net.minecraft.world.level.block.state.BlockState; +import java.util.List; + public abstract class MaskSchematic extends AbstractSchematic { private final ISchematic schematic; @@ -40,4 +42,14 @@ public boolean inSchematic(int x, int y, int z, BlockState currentState) { public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { return schematic.desiredState(x, y, z, current, approxPlaceable); } + + public static MaskSchematic create(ISchematic schematic, Mask function) { + return new MaskSchematic(schematic) { + + @Override + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { + return function.partOfMask(x, y, z, currentState); + } + }; + } } diff --git a/src/api/java/baritone/api/schematic/mask/AbstractMask.java b/src/api/java/baritone/api/schematic/mask/AbstractMask.java new file mode 100644 index 000000000..ce92af0ec --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/AbstractMask.java @@ -0,0 +1,49 @@ +/* + * 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.schematic.mask; + +/** + * @author Brady + */ +public abstract class AbstractMask implements Mask { + + private final int widthX; + private final int heightY; + private final int lengthZ; + + public AbstractMask(int widthX, int heightY, int lengthZ) { + this.widthX = widthX; + this.heightY = heightY; + this.lengthZ = lengthZ; + } + + @Override + public int widthX() { + return this.widthX; + } + + @Override + public int heightY() { + return this.heightY; + } + + @Override + public int lengthZ() { + return this.lengthZ; + } +} diff --git a/src/api/java/baritone/api/schematic/mask/Mask.java b/src/api/java/baritone/api/schematic/mask/Mask.java new file mode 100644 index 000000000..c8b1f15a1 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/Mask.java @@ -0,0 +1,60 @@ +/* + * 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.schematic.mask; + +import baritone.api.schematic.mask.operator.BinaryOperatorMask; +import baritone.api.schematic.mask.operator.NotMask; +import baritone.api.utils.BooleanBinaryOperators; +import net.minecraft.world.level.block.state.BlockState; + +/** + * @author Brady + */ +public interface Mask { + + /** + * @param x The relative x position of the block + * @param y The relative y position of the block + * @param z The relative z position of the block + * @param currentState The current state of that block in the world, may be {@code null} + * @return Whether the given position is included in this mask + */ + boolean partOfMask(int x, int y, int z, BlockState currentState); + + int widthX(); + + int heightY(); + + int lengthZ(); + + default Mask not() { + return new NotMask(this); + } + + default Mask union(Mask other) { + return new BinaryOperatorMask(this, other, BooleanBinaryOperators.OR); + } + + default Mask intersection(Mask other) { + return new BinaryOperatorMask(this, other, BooleanBinaryOperators.AND); + } + + default Mask xor(Mask other) { + return new BinaryOperatorMask(this, other, BooleanBinaryOperators.XOR); + } +} diff --git a/src/api/java/baritone/api/schematic/mask/PreComputedMask.java b/src/api/java/baritone/api/schematic/mask/PreComputedMask.java new file mode 100644 index 000000000..aed26cc94 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/PreComputedMask.java @@ -0,0 +1,44 @@ +/* + * 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.schematic.mask; + +/** + * @author Brady + */ +final class PreComputedMask extends AbstractMask implements StaticMask { + + private final boolean[][][] mask; + + public PreComputedMask(StaticMask mask) { + super(mask.widthX(), mask.heightY(), mask.lengthZ()); + + this.mask = new boolean[this.heightY()][this.lengthZ()][this.widthX()]; + for (int y = 0; y < this.heightY(); y++) { + for (int z = 0; z < this.lengthZ(); z++) { + for (int x = 0; x < this.widthX(); x++) { + this.mask[y][z][x] = mask.partOfMask(x, y, z); + } + } + } + } + + @Override + public boolean partOfMask(int x, int y, int z) { + return this.mask[y][z][x]; + } +} diff --git a/src/api/java/baritone/api/schematic/mask/StaticMask.java b/src/api/java/baritone/api/schematic/mask/StaticMask.java new file mode 100644 index 000000000..9925ffca2 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/StaticMask.java @@ -0,0 +1,82 @@ +/* + * 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.schematic.mask; + +import baritone.api.schematic.mask.operator.BinaryOperatorMask; +import baritone.api.schematic.mask.operator.NotMask; +import baritone.api.utils.BooleanBinaryOperators; +import net.minecraft.world.level.block.state.BlockState; + +/** + * A mask that is context-free. In other words, it doesn't require the current block state to determine if a relative + * position is a part of the mask. + * + * @author Brady + */ +public interface StaticMask extends Mask { + + /** + * Determines if a given relative coordinate is included in this mask, without the need for the current block state. + * + * @param x The relative x position of the block + * @param y The relative y position of the block + * @param z The relative z position of the block + * @return Whether the given position is included in this mask + */ + boolean partOfMask(int x, int y, int z); + + /** + * Implements the parent {@link Mask#partOfMask partOfMask function} by calling the static function + * provided in this functional interface without needing the {@link BlockState} argument. This {@code default} + * implementation should NOT be overriden. + * + * @param x The relative x position of the block + * @param y The relative y position of the block + * @param z The relative z position of the block + * @param currentState The current state of that block in the world, may be {@code null} + * @return Whether the given position is included in this mask + */ + @Override + default boolean partOfMask(int x, int y, int z, BlockState currentState) { + return this.partOfMask(x, y, z); + } + + @Override + default StaticMask not() { + return new NotMask.Static(this); + } + + default StaticMask union(StaticMask other) { + return new BinaryOperatorMask.Static(this, other, BooleanBinaryOperators.OR); + } + + default StaticMask intersection(StaticMask other) { + return new BinaryOperatorMask.Static(this, other, BooleanBinaryOperators.AND); + } + + default StaticMask xor(StaticMask other) { + return new BinaryOperatorMask.Static(this, other, BooleanBinaryOperators.XOR); + } + + /** + * Returns a pre-computed mask using {@code this} function, with the specified size parameters. + */ + default StaticMask compute() { + return new PreComputedMask(this); + } +} diff --git a/src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java b/src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java new file mode 100644 index 000000000..08975e521 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/operator/BinaryOperatorMask.java @@ -0,0 +1,79 @@ +/* + * 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.schematic.mask.operator; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.Mask; +import baritone.api.schematic.mask.StaticMask; +import baritone.api.utils.BooleanBinaryOperator; +import net.minecraft.world.level.block.state.BlockState; + +/** + * @author Brady + */ +public final class BinaryOperatorMask extends AbstractMask { + + private final Mask a; + private final Mask b; + private final BooleanBinaryOperator operator; + + public BinaryOperatorMask(Mask a, Mask b, BooleanBinaryOperator operator) { + super(Math.max(a.widthX(), b.widthX()), Math.max(a.heightY(), b.heightY()), Math.max(a.lengthZ(), b.lengthZ())); + this.a = a; + this.b = b; + this.operator = operator; + } + + @Override + public boolean partOfMask(int x, int y, int z, BlockState currentState) { + return this.operator.applyAsBoolean( + partOfMask(a, x, y, z, currentState), + partOfMask(b, x, y, z, currentState) + ); + } + + private static boolean partOfMask(Mask mask, int x, int y, int z, BlockState currentState) { + return x < mask.widthX() && y < mask.heightY() && z < mask.lengthZ() && mask.partOfMask(x, y, z, currentState); + } + + public static final class Static extends AbstractMask implements StaticMask { + + private final StaticMask a; + private final StaticMask b; + private final BooleanBinaryOperator operator; + + public Static(StaticMask a, StaticMask b, BooleanBinaryOperator operator) { + super(Math.max(a.widthX(), b.widthX()), Math.max(a.heightY(), b.heightY()), Math.max(a.lengthZ(), b.lengthZ())); + this.a = a; + this.b = b; + this.operator = operator; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + return this.operator.applyAsBoolean( + partOfMask(a, x, y, z), + partOfMask(b, x, y, z) + ); + } + + private static boolean partOfMask(StaticMask mask, int x, int y, int z) { + return x < mask.widthX() && y < mask.heightY() && z < mask.lengthZ() && mask.partOfMask(x, y, z); + } + } +} diff --git a/src/api/java/baritone/api/schematic/mask/operator/NotMask.java b/src/api/java/baritone/api/schematic/mask/operator/NotMask.java new file mode 100644 index 000000000..9d0dfcd6d --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/operator/NotMask.java @@ -0,0 +1,56 @@ +/* + * 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.schematic.mask.operator; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.Mask; +import baritone.api.schematic.mask.StaticMask; +import net.minecraft.world.level.block.state.BlockState; + +/** + * @author Brady + */ +public final class NotMask extends AbstractMask { + + private final Mask source; + + public NotMask(Mask source) { + super(source.widthX(), source.heightY(), source.lengthZ()); + this.source = source; + } + + @Override + public boolean partOfMask(int x, int y, int z, BlockState currentState) { + return !this.source.partOfMask(x, y, z, currentState); + } + + public static final class Static extends AbstractMask implements StaticMask { + + private final StaticMask source; + + public Static(StaticMask source) { + super(source.widthX(), source.heightY(), source.lengthZ()); + this.source = source; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + return !this.source.partOfMask(x, y, z); + } + } +} diff --git a/src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java b/src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java new file mode 100644 index 000000000..093a27e38 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/shape/CylinderMask.java @@ -0,0 +1,69 @@ +/* + * 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.schematic.mask.shape; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.StaticMask; +import net.minecraft.core.Direction; + +/** + * @author Brady + */ +public final class CylinderMask extends AbstractMask implements StaticMask { + + private final double centerA; + private final double centerB; + private final double radiusSqA; + private final double radiusSqB; + private final boolean filled; + private final Direction.Axis alignment; + + public CylinderMask(int widthX, int heightY, int lengthZ, boolean filled, Direction.Axis alignment) { + super(widthX, heightY, lengthZ); + this.centerA = this.getA(widthX, heightY, alignment) / 2.0; + this.centerB = this.getB(heightY, lengthZ, alignment) / 2.0; + this.radiusSqA = (this.centerA - 1) * (this.centerA - 1); + this.radiusSqB = (this.centerB - 1) * (this.centerB - 1); + this.filled = filled; + this.alignment = alignment; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + double da = Math.abs((this.getA(x, y, this.alignment) + 0.5) - this.centerA); + double db = Math.abs((this.getB(y, z, this.alignment) + 0.5) - this.centerB); + if (this.outside(da, db)) { + return false; + } + return this.filled + || this.outside(da + 1, db) + || this.outside(da, db + 1); + } + + private boolean outside(double da, double db) { + return da * da / this.radiusSqA + db * db / this.radiusSqB > 1; + } + + private static int getA(int x, int y, Direction.Axis alignment) { + return alignment == Direction.Axis.X ? y : x; + } + + private static int getB(int y, int z, Direction.Axis alignment) { + return alignment == Direction.Axis.Z ? y : z; + } +} diff --git a/src/api/java/baritone/api/schematic/mask/shape/SphereMask.java b/src/api/java/baritone/api/schematic/mask/shape/SphereMask.java new file mode 100644 index 000000000..d805c98a8 --- /dev/null +++ b/src/api/java/baritone/api/schematic/mask/shape/SphereMask.java @@ -0,0 +1,64 @@ +/* + * 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.schematic.mask.shape; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.StaticMask; + +/** + * @author Brady + */ +public final class SphereMask extends AbstractMask implements StaticMask { + + private final double centerX; + private final double centerY; + private final double centerZ; + private final double radiusSqX; + private final double radiusSqY; + private final double radiusSqZ; + private final boolean filled; + + public SphereMask(int widthX, int heightY, int lengthZ, boolean filled) { + super(widthX, heightY, lengthZ); + this.centerX = widthX / 2.0; + this.centerY = heightY / 2.0; + this.centerZ = lengthZ / 2.0; + this.radiusSqX = this.centerX * this.centerX; + this.radiusSqY = this.centerY * this.centerY; + this.radiusSqZ = this.centerZ * this.centerZ; + this.filled = filled; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + double dx = Math.abs((x + 0.5) - this.centerX); + double dy = Math.abs((y + 0.5) - this.centerY); + double dz = Math.abs((z + 0.5) - this.centerZ); + if (this.outside(dx, dy, dz)) { + return false; + } + return this.filled + || this.outside(dx + 1, dy, dz) + || this.outside(dx, dy + 1, dz) + || this.outside(dx, dy, dz + 1); + } + + private boolean outside(double dx, double dy, double dz) { + return dx * dx / this.radiusSqX + dy * dy / this.radiusSqY + dz * dz / this.radiusSqZ > 1; + } +} diff --git a/src/api/java/baritone/api/utils/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java index cee7649b0..5add76555 100644 --- a/src/api/java/baritone/api/utils/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -34,6 +34,15 @@ */ public final class BetterBlockPos extends BlockPos { + private static final int NUM_X_BITS = 26; + private static final int NUM_Z_BITS = NUM_X_BITS; + private static final int NUM_Y_BITS = 64 - NUM_X_BITS - NUM_Z_BITS; + private static final int Y_SHIFT = NUM_Z_BITS; + private static final int X_SHIFT = Y_SHIFT + NUM_Y_BITS; + private static final long X_MASK = (1L << NUM_X_BITS) - 1L; + private static final long Y_MASK = (1L << NUM_Y_BITS) - 1L; + private static final long Z_MASK = (1L << NUM_Z_BITS) - 1L; + public static final BetterBlockPos ORIGIN = new BetterBlockPos(0, 0, 0); public final int x; @@ -201,6 +210,20 @@ public BetterBlockPos west(int amt) { return amt == 0 ? this : new BetterBlockPos(x - amt, y, z); } + public double distanceSq(final BetterBlockPos to) { + double dx = (double) this.x - to.x; + double dy = (double) this.y - to.y; + double dz = (double) this.z - to.z; + return dx * dx + dy * dy + dz * dz; + } + + public double distanceTo(final BetterBlockPos to) { + double dx = (double) this.x - to.x; + double dy = (double) this.y - to.y; + double dz = (double) this.z - to.z; + return Math.sqrt(dx * dx + dy * dy + dz * dz); + } + @Override @Nonnull public String toString() { @@ -211,4 +234,15 @@ public String toString() { SettingsUtil.maybeCensor(z) ); } + + public static long serializeToLong(final int x, final int y, final int z) { + return ((long) x & X_MASK) << X_SHIFT | ((long) y & Y_MASK) << Y_SHIFT | ((long) z & Z_MASK); + } + + public static BetterBlockPos deserializeFromLong(final long serialized) { + final int x = (int) (serialized << 64 - X_SHIFT - NUM_X_BITS >> 64 - NUM_X_BITS); + final int y = (int) (serialized << 64 - Y_SHIFT - NUM_Y_BITS >> 64 - NUM_Y_BITS); + final int z = (int) (serialized << 64 - NUM_Z_BITS >> 64 - NUM_Z_BITS); + return new BetterBlockPos(x, y, z); + } } diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java index 8723c3b51..ac14d0187 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java @@ -18,6 +18,7 @@ package baritone.api.utils; import baritone.api.utils.accessor.IItemStack; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import io.netty.util.concurrent.ThreadPerTaskExecutor; import net.minecraft.client.Minecraft; @@ -27,11 +28,11 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.server.packs.*; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.VanillaPackResources; import net.minecraft.server.packs.repository.ServerPacksSource; import net.minecraft.server.packs.resources.MultiPackResourceManager; import net.minecraft.server.packs.resources.ReloadableResourceManager; -import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; import net.minecraft.world.RandomSequences; import net.minecraft.world.flag.FeatureFlagSet; @@ -41,6 +42,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.ServerLevelData; @@ -60,44 +62,79 @@ import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; public final class BlockOptionalMeta { + // id or id[] or id[properties] where id and properties are any text with at least one character + private static final Pattern PATTERN = Pattern.compile("^(?.+?)(?:\\[(?.+?)?\\])?$"); private final Block block; + private final String propertiesDescription; // exists so toString() can return something more useful than a list of all blockstates private final Set blockstates; private final ImmutableSet stateHashes; private final ImmutableSet stackHashes; - private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$"); private static LootDataManager lootTables; private static Map> drops = new HashMap<>(); public BlockOptionalMeta(@Nonnull Block block) { this.block = block; - this.blockstates = getStates(block); + this.propertiesDescription = "{}"; + this.blockstates = getStates(block, Collections.emptyMap()); this.stateHashes = getStateHashes(blockstates); this.stackHashes = getStackHashes(blockstates); } public BlockOptionalMeta(@Nonnull String selector) { - Matcher matcher = pattern.matcher(selector); + Matcher matcher = PATTERN.matcher(selector); if (!matcher.find()) { throw new IllegalArgumentException("invalid block selector"); } - MatchResult matchResult = matcher.toMatchResult(); + block = BlockUtils.stringToBlockRequired(matcher.group("id")); - block = BlockUtils.stringToBlockRequired(matchResult.group(1)); - blockstates = getStates(block); + String props = matcher.group("properties"); + Map, ?> properties = props == null || props.equals("") ? Collections.emptyMap() : parseProperties(block, props); + + propertiesDescription = props == null ? "{}" : "{" + props.replace("=", ":") + "}"; + blockstates = getStates(block, properties); stateHashes = getStateHashes(blockstates); stackHashes = getStackHashes(blockstates); } - private static Set getStates(@Nonnull Block block) { - return new HashSet<>(block.getStateDefinition().getPossibleStates()); + private static , P extends Property> P castToIProperty(Object value) { + //noinspection unchecked + return (P) value; + } + + private static Map, ?> parseProperties(Block block, String raw) { + ImmutableMap.Builder, Object> builder = ImmutableMap.builder(); + for (String pair : raw.split(",")) { + String[] parts = pair.split("="); + if (parts.length != 2) { + throw new IllegalArgumentException(String.format("\"%s\" is not a valid property-value pair", pair)); + } + String rawKey = parts[0]; + String rawValue = parts[1]; + Property key = block.getStateDefinition().getProperty(rawKey); + Comparable value = castToIProperty(key).getValue(rawValue) + .orElseThrow(() -> new IllegalArgumentException(String.format( + "\"%s\" is not a valid value for %s on %s", + rawValue, key, block + ))); + builder.put(key, value); + } + return builder.build(); + } + + private static Set getStates(@Nonnull Block block, @Nonnull Map, ?> properties) { + return block.getStateDefinition().getPossibleStates().stream() + .filter(blockstate -> properties.entrySet().stream().allMatch(entry -> + blockstate.getValue(entry.getKey()) == entry.getValue() + )) + .collect(Collectors.toSet()); } private static ImmutableSet getStateHashes(Set blockstates) { @@ -145,7 +182,7 @@ public boolean matches(ItemStack stack) { @Override public String toString() { - return String.format("BlockOptionalMeta{block=%s}", block); + return String.format("BlockOptionalMeta{block=%s,properties=%s}", block, propertiesDescription); } public BlockState getAnyBlockState() { @@ -156,6 +193,14 @@ public BlockState getAnyBlockState() { return null; } + public Set getAllBlockStates() { + return blockstates; + } + + public Set stackHashes() { + return stackHashes; + } + private static Method getVanillaServerPack; private static VanillaPackResources getVanillaServerPack() { @@ -199,16 +244,16 @@ private static synchronized List drops(Block b) { try { getManager().getLootTable(lootTableLocation).getRandomItemsRaw( - new LootContext.Builder( - new LootParams.Builder(ServerLevelStub.fastCreate()) - .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) - .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) - .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) - .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) - .create(LootContextParamSets.BLOCK) + new LootContext.Builder( + new LootParams.Builder(ServerLevelStub.fastCreate()) + .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO)) + .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) + .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null) + .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState()) + .create(LootContextParamSets.BLOCK) ).withOptionalRandomSeed(1L) - .create(null), - stack -> items.add(stack.getItem()) + .create(null), + stack -> items.add(stack.getItem()) ); } catch (Exception e) { e.printStackTrace(); diff --git a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java index 7c1070a84..7ab01cc87 100644 --- a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java +++ b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java @@ -17,67 +17,70 @@ package baritone.api.utils; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Stream; +import baritone.api.utils.accessor.IItemStack; +import com.google.common.collect.ImmutableSet; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -public class BlockOptionalMetaLookup { +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Stream; +public class BlockOptionalMetaLookup { + private final ImmutableSet blockSet; + private final ImmutableSet blockStateSet; + private final ImmutableSet stackHashes; private final BlockOptionalMeta[] boms; public BlockOptionalMetaLookup(BlockOptionalMeta... boms) { this.boms = boms; + Set blocks = new HashSet<>(); + Set blockStates = new HashSet<>(); + Set stacks = new HashSet<>(); + for (BlockOptionalMeta bom : boms) { + blocks.add(bom.getBlock()); + blockStates.addAll(bom.getAllBlockStates()); + stacks.addAll(bom.stackHashes()); + } + this.blockSet = ImmutableSet.copyOf(blocks); + this.blockStateSet = ImmutableSet.copyOf(blockStates); + this.stackHashes = ImmutableSet.copyOf(stacks); } public BlockOptionalMetaLookup(Block... blocks) { - this.boms = Stream.of(blocks) + this(Stream.of(blocks) .map(BlockOptionalMeta::new) - .toArray(BlockOptionalMeta[]::new); + .toArray(BlockOptionalMeta[]::new)); + } public BlockOptionalMetaLookup(List blocks) { - this.boms = blocks.stream() + this(blocks.stream() .map(BlockOptionalMeta::new) - .toArray(BlockOptionalMeta[]::new); + .toArray(BlockOptionalMeta[]::new)); } public BlockOptionalMetaLookup(String... blocks) { - this.boms = Stream.of(blocks) + this(Stream.of(blocks) .map(BlockOptionalMeta::new) - .toArray(BlockOptionalMeta[]::new); + .toArray(BlockOptionalMeta[]::new)); } public boolean has(Block block) { - for (BlockOptionalMeta bom : boms) { - if (bom.getBlock() == block) { - return true; - } - } - - return false; + return blockSet.contains(block); } public boolean has(BlockState state) { - for (BlockOptionalMeta bom : boms) { - if (bom.matches(state)) { - return true; - } - } - - return false; + return blockStateSet.contains(state); } public boolean has(ItemStack stack) { - for (BlockOptionalMeta bom : boms) { - if (bom.matches(stack)) { - return true; - } - } - - return false; + int hash = ((IItemStack) (Object) stack).getBaritoneHash(); + hash -= stack.getDamageValue(); + return stackHashes.contains(hash); } public List blocks() { diff --git a/src/api/java/baritone/api/utils/BooleanBinaryOperator.java b/src/api/java/baritone/api/utils/BooleanBinaryOperator.java new file mode 100644 index 000000000..cfb85e644 --- /dev/null +++ b/src/api/java/baritone/api/utils/BooleanBinaryOperator.java @@ -0,0 +1,27 @@ +/* + * 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; + +/** + * @author Brady + */ +@FunctionalInterface +public interface BooleanBinaryOperator { + + boolean applyAsBoolean(boolean a, boolean b); +} diff --git a/src/api/java/baritone/api/utils/BooleanBinaryOperators.java b/src/api/java/baritone/api/utils/BooleanBinaryOperators.java new file mode 100644 index 000000000..11605c965 --- /dev/null +++ b/src/api/java/baritone/api/utils/BooleanBinaryOperators.java @@ -0,0 +1,38 @@ +/* + * 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; + +/** + * @author Brady + */ +public enum BooleanBinaryOperators implements BooleanBinaryOperator { + OR((a, b) -> a || b), + AND((a, b) -> a && b), + XOR((a, b) -> a ^ b); + + private final BooleanBinaryOperator op; + + BooleanBinaryOperators(BooleanBinaryOperator op) { + this.op = op; + } + + @Override + public boolean applyAsBoolean(boolean a, boolean b) { + return this.op.applyAsBoolean(a, b); + } +} diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index 7e3c44607..507cd85a7 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -18,13 +18,13 @@ package baritone.api.utils; import baritone.api.BaritoneAPI; -import baritone.api.utils.gui.BaritoneToast; +import baritone.api.Settings; import net.minecraft.ChatFormatting; +import net.minecraft.client.GuiMessageTag; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import java.awt.*; import java.util.Arrays; import java.util.Calendar; import java.util.stream.Stream; @@ -44,10 +44,17 @@ public interface Helper { Helper HELPER = new Helper() {}; /** - * Instance of the game + * The main game instance returned by {@link Minecraft#getInstance()}. + * Deprecated since {@link IPlayerContext#minecraft()} should be used instead (In the majority of cases). */ + @Deprecated Minecraft mc = Minecraft.getInstance(); + /** + * The tag to assign to chat messages when {@link Settings#useMessageTag} is {@code true}. + */ + GuiMessageTag MESSAGE_TAG = new GuiMessageTag(0xFF55FF, null, Component.literal("Baritone message."), "Baritone"); + static Component getPrefix() { // Inner text component final Calendar now = Calendar.getInstance(); @@ -72,7 +79,7 @@ static Component getPrefix() { * @param message The message to display in the popup */ default void logToast(Component title, Component message) { - mc.execute(() -> BaritoneAPI.getSettings().toaster.value.accept(title, message)); + Minecraft.getInstance().execute(() -> BaritoneAPI.getSettings().toaster.value.accept(title, message)); } /** @@ -133,7 +140,7 @@ default void logNotificationDirect(String message) { * @param error Whether to log as an error */ default void logNotificationDirect(String message, boolean error) { - mc.execute(() -> BaritoneAPI.getSettings().notifier.value.accept(message, error)); + Minecraft.getInstance().execute(() -> BaritoneAPI.getSettings().notifier.value.accept(message, error)); } /** @@ -160,13 +167,15 @@ default void logDebug(String message) { */ default void logDirect(boolean logAsToast, Component... components) { MutableComponent component = Component.literal(""); - component.append(getPrefix()); - component.append(Component.literal(" ")); + if (!logAsToast && !BaritoneAPI.getSettings().useMessageTag.value) { + component.append(getPrefix()); + component.append(Component.literal(" ")); + } Arrays.asList(components).forEach(component::append); if (logAsToast) { logToast(getPrefix(), component); } else { - mc.execute(() -> BaritoneAPI.getSettings().logger.value.accept(component)); + Minecraft.getInstance().execute(() -> BaritoneAPI.getSettings().logger.value.accept(component)); } } @@ -226,4 +235,11 @@ default void logDirect(String message, boolean logAsToast) { default void logDirect(String message) { logDirect(message, BaritoneAPI.getSettings().logAsToast.value); } + + default void logUnhandledException(final Throwable exception) { + HELPER.logDirect("An unhandled exception occurred. " + + "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", + ChatFormatting.RED); + exception.printStackTrace(); + } } diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index 4e29b1459..a97475a5b 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -18,9 +18,7 @@ package baritone.api.utils; import baritone.api.cache.IWorldData; -import java.util.Optional; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; +import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; @@ -31,12 +29,18 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; +import java.util.Optional; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + /** * @author Brady * @since 11/12/2018 */ public interface IPlayerContext { + Minecraft minecraft(); + LocalPlayer player(); IPlayerController playerController(); @@ -85,6 +89,12 @@ default Vec3 playerHead() { return new Vec3(player().position().x, player().position().y + player().getEyeHeight(), player().position().z); } + default Vec3 playerMotion() { + return player().getDeltaMovement(); + } + + BetterBlockPos viewerPos(); + default Rotation playerRotations() { return new Rotation(player().getYRot(), player().getXRot()); } diff --git a/src/api/java/baritone/api/utils/Pair.java b/src/api/java/baritone/api/utils/Pair.java new file mode 100644 index 000000000..ca7259520 --- /dev/null +++ b/src/api/java/baritone/api/utils/Pair.java @@ -0,0 +1,59 @@ +/* + * 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 java.util.Objects; + +/** + * @author Brady + */ +public final class Pair { + + private final A a; + private final B b; + + public Pair(A a, B b) { + this.a = a; + this.b = b; + } + + public A first() { + return this.a; + } + + public B second() { + return this.b; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || o.getClass() != Pair.class) { + return false; + } + Pair pair = (Pair) o; + return Objects.equals(this.a, pair.a) && Objects.equals(this.b, pair.b); + } + + @Override + public int hashCode() { + return 31 * Objects.hashCode(this.a) + Objects.hashCode(this.b); + } +} diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index db0773b40..38199d071 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -51,7 +51,8 @@ public static HitResult rayTraceTowards(Entity entity, Rotation rotation, double } else { start = entity.getEyePosition(1.0F); // do whatever is correct } - Vec3 direction = RotationUtils.calcVector3dFromRotation(rotation); + + Vec3 direction = RotationUtils.calcLookDirectionFromRotation(rotation); Vec3 end = start.add( direction.x * blockReachDistance, direction.y * blockReachDistance, diff --git a/src/api/java/baritone/api/utils/Rotation.java b/src/api/java/baritone/api/utils/Rotation.java index 36beea7bc..c75a9a559 100644 --- a/src/api/java/baritone/api/utils/Rotation.java +++ b/src/api/java/baritone/api/utils/Rotation.java @@ -26,12 +26,12 @@ public class Rotation { /** * The yaw angle of this Rotation */ - private float yaw; + private final float yaw; /** * The pitch angle of this Rotation */ - private float pitch; + private final float pitch; public Rotation(float yaw, float pitch) { this.yaw = yaw; @@ -113,6 +113,10 @@ public Rotation normalizeAndClamp() { ); } + public Rotation withPitch(float pitch) { + return new Rotation(this.yaw, pitch); + } + /** * Is really close to * diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 0a4fd8209..6e310bb1c 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -19,7 +19,6 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; -import java.util.Optional; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -33,6 +32,8 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import java.util.Optional; + /** * @author Brady * @since 9/25/2018 @@ -43,11 +44,13 @@ public final class RotationUtils { * Constant that a degree value is multiplied by to get the equivalent radian value */ public static final double DEG_TO_RAD = Math.PI / 180.0; + public static final float DEG_TO_RAD_F = (float) DEG_TO_RAD; /** * Constant that a radian value is multiplied by to get the equivalent degree value */ public static final double RAD_TO_DEG = 180.0 / Math.PI; + public static final float RAD_TO_DEG_F = (float) RAD_TO_DEG; /** * Offsets from the root block position to the center of each side. @@ -128,26 +131,31 @@ private static Rotation calcRotationFromVec3d(Vec3 orig, Vec3 dest) { * @param rotation The input rotation * @return Look vector for the rotation */ - public static Vec3 calcVector3dFromRotation(Rotation rotation) { - float f = Mth.cos(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); - float f1 = Mth.sin(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); - float f2 = -Mth.cos(-rotation.getPitch() * (float) DEG_TO_RAD); - float f3 = Mth.sin(-rotation.getPitch() * (float) DEG_TO_RAD); - return new Vec3((double) (f1 * f2), (double) f3, (double) (f * f2)); + public static Vec3 calcLookDirectionFromRotation(Rotation rotation) { + float flatZ = Mth.cos((-rotation.getYaw() * DEG_TO_RAD_F) - (float) Math.PI); + float flatX = Mth.sin((-rotation.getYaw() * DEG_TO_RAD_F) - (float) Math.PI); + float pitchBase = -Mth.cos(-rotation.getPitch() * DEG_TO_RAD_F); + float pitchHeight = Mth.sin(-rotation.getPitch() * DEG_TO_RAD_F); + return new Vec3(flatX * pitchBase, pitchHeight, flatZ * pitchBase); + } + + @Deprecated + public static Vec3 calcVec3dFromRotation(Rotation rotation) { + return calcLookDirectionFromRotation(rotation); } /** * @param ctx Context for the viewing entity * @param pos The target block position * @return The optional rotation - * @see #reachable(LocalPlayer, BlockPos, double) + * @see #reachable(IPlayerContext, BlockPos, double) */ public static Optional reachable(IPlayerContext ctx, BlockPos pos) { - return reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); + return reachable(ctx, pos, false); } public static Optional reachable(IPlayerContext ctx, BlockPos pos, boolean wouldSneak) { - return reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance(), wouldSneak); + return reachable(ctx, pos, ctx.playerController().getBlockReachDistance(), wouldSneak); } /** @@ -157,18 +165,17 @@ public static Optional reachable(IPlayerContext ctx, BlockPos pos, boo * side that is reachable. The return type will be {@link Optional#empty()} if the entity is * unable to reach any of the sides of the block. * - * @param entity The viewing entity + * @param ctx Context for the viewing entity * @param pos The target block position * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachable(LocalPlayer entity, BlockPos pos, double blockReachDistance) { - return reachable(entity, pos, blockReachDistance, false); + public static Optional reachable(IPlayerContext ctx, BlockPos pos, double blockReachDistance) { + return reachable(ctx, pos, blockReachDistance, false); } - public static Optional reachable(LocalPlayer entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(entity); - if (baritone.getPlayerContext().isLookingAt(pos)) { + public static Optional reachable(IPlayerContext ctx, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + if (BaritoneAPI.getSettings().remainWithExistingLookDirection.value && ctx.isLookingAt(pos)) { /* * why add 0.0001? * to indicate that we actually have a desired pitch @@ -179,10 +186,10 @@ public static Optional reachable(LocalPlayer entity, BlockPos pos, dou * * or if you're a normal person literally all this does it ensure that we don't nudge the pitch to a normal level */ - Rotation hypothetical = new Rotation(entity.getYRot(), entity.getXRot() + 0.0001F); + Rotation hypothetical = ctx.playerRotations().add(new Rotation(0, 0.0001F)); if (wouldSneak) { // the concern here is: what if we're looking at it now, but as soon as we start sneaking we no longer are - HitResult result = RayTraceUtils.rayTraceTowards(entity, hypothetical, blockReachDistance, true); + HitResult result = RayTraceUtils.rayTraceTowards(ctx.player(), hypothetical, blockReachDistance, true); if (result != null && result.getType() == HitResult.Type.BLOCK && ((BlockHitResult) result).getBlockPos().equals(pos)) { return Optional.of(hypothetical); // yes, if we sneaked we would still be looking at the block } @@ -190,14 +197,14 @@ public static Optional reachable(LocalPlayer entity, BlockPos pos, dou return Optional.of(hypothetical); } } - Optional possibleRotation = reachableCenter(entity, pos, blockReachDistance, wouldSneak); + Optional possibleRotation = reachableCenter(ctx, pos, blockReachDistance, wouldSneak); //System.out.println("center: " + possibleRotation); if (possibleRotation.isPresent()) { return possibleRotation; } - BlockState state = entity.level().getBlockState(pos); - VoxelShape shape = state.getShape(entity.level(), pos); + BlockState state = ctx.world().getBlockState(pos); + VoxelShape shape = state.getShape(ctx.world(), pos); if (shape.isEmpty()) { shape = Shapes.block(); } @@ -205,7 +212,7 @@ public static Optional reachable(LocalPlayer entity, BlockPos pos, dou double xDiff = shape.min(Direction.Axis.X) * sideOffset.x + shape.max(Direction.Axis.X) * (1 - sideOffset.x); double yDiff = shape.min(Direction.Axis.Y) * sideOffset.y + shape.max(Direction.Axis.Y) * (1 - sideOffset.y); double zDiff = shape.min(Direction.Axis.Z) * sideOffset.z + shape.max(Direction.Axis.Z) * (1 - sideOffset.z); - possibleRotation = reachableOffset(entity, pos, new Vec3(pos.getX(), pos.getY(), pos.getZ()).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); + possibleRotation = reachableOffset(ctx, pos, new Vec3(pos.getX(), pos.getY(), pos.getZ()).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); if (possibleRotation.isPresent()) { return possibleRotation; } @@ -218,22 +225,23 @@ public static Optional reachable(LocalPlayer entity, BlockPos pos, dou * the given offsetted position. The return type will be {@link Optional#empty()} if * the entity is unable to reach the block with the offset applied. * - * @param entity The viewing entity + * @param ctx Context for the viewing entity * @param pos The target block position * @param offsetPos The position of the block with the offset applied. * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ - public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3 offsetPos, double blockReachDistance, boolean wouldSneak) { - Vec3 eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getEyePosition(1.0F); - Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.getYRot(), entity.getXRot())); - HitResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); + public static Optional reachableOffset(IPlayerContext ctx, BlockPos pos, Vec3 offsetPos, double blockReachDistance, boolean wouldSneak) { + Vec3 eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.player().getEyePosition(1.0F); + Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, ctx.playerRotations()); + Rotation actualRotation = BaritoneAPI.getProvider().getBaritoneForPlayer(ctx.player()).getLookBehavior().getAimProcessor().peekRotation(rotation); + HitResult result = RayTraceUtils.rayTraceTowards(ctx.player(), actualRotation, blockReachDistance, wouldSneak); //System.out.println(result); if (result != null && result.getType() == HitResult.Type.BLOCK) { if (((BlockHitResult) result).getBlockPos().equals(pos)) { return Optional.of(rotation); } - if (entity.level().getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { + if (ctx.world().getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { return Optional.of(rotation); } } @@ -244,11 +252,45 @@ public static Optional reachableOffset(Entity entity, BlockPos pos, Ve * Determines if the specified entity is able to reach the specified block where it is * looking at the direct center of it's hitbox. * - * @param entity The viewing entity + * @param ctx Context for the viewing entity * @param pos The target block position * @param blockReachDistance The block reach distance of the entity * @return The optional rotation */ + public static Optional reachableCenter(IPlayerContext ctx, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + return reachableOffset(ctx, pos, VecUtils.calculateBlockCenter(ctx.world(), pos), blockReachDistance, wouldSneak); + } + + @Deprecated + public static Optional reachable(LocalPlayer entity, BlockPos pos, double blockReachDistance) { + return reachable(entity, pos, blockReachDistance, false); + } + + @Deprecated + public static Optional reachable(LocalPlayer entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(entity); + IPlayerContext ctx = baritone.getPlayerContext(); + return reachable(ctx, pos, blockReachDistance, wouldSneak); + } + + @Deprecated + public static Optional reachableOffset(Entity entity, BlockPos pos, Vec3 offsetPos, double blockReachDistance, boolean wouldSneak) { + Vec3 eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getEyePosition(1.0F); + Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.getYRot(), entity.getXRot())); + HitResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); + //System.out.println(result); + if (result != null && result.getType() == HitResult.Type.BLOCK) { + if (((BlockHitResult) result).getBlockPos().equals(pos)) { + return Optional.of(rotation); + } + if (entity.level().getBlockState(pos).getBlock() instanceof BaseFireBlock && ((BlockHitResult) result).getBlockPos().equals(pos.below())) { + return Optional.of(rotation); + } + } + return Optional.empty(); + } + + @Deprecated public static Optional reachableCenter(Entity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.level(), pos), blockReachDistance, wouldSneak); } diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 9e82c05de..53283cd33 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -47,12 +47,10 @@ import java.util.stream.Collectors; import java.util.stream.Stream; - public class SettingsUtil { - private static final Path SETTINGS_PATH = Minecraft.getInstance().gameDirectory.toPath().resolve("baritone").resolve("settings.txt"); + public static final String SETTINGS_DEFAULT_NAME = "settings.txt"; private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?.+)"); // key and value split by the first space - private static final String[] JAVA_ONLY_SETTINGS = {"logger", "notifier", "toaster"}; private static boolean isComment(String line) { @@ -71,12 +69,12 @@ private static void forEachLine(Path file, Consumer consumer) throws IOE } } - public static void readAndApply(Settings settings) { + public static void readAndApply(Settings settings, String settingsName) { try { - forEachLine(SETTINGS_PATH, line -> { + forEachLine(settingsByName(settingsName), line -> { Matcher matcher = SETTING_PATTERN.matcher(line); if (!matcher.matches()) { - System.out.println("Invalid syntax in setting file: " + line); + Helper.HELPER.logDirect("Invalid syntax in setting file: " + line); return; } @@ -85,29 +83,33 @@ public static void readAndApply(Settings settings) { try { parseAndApply(settings, settingName, settingValue); } catch (Exception ex) { - System.out.println("Unable to parse line " + line); + Helper.HELPER.logDirect("Unable to parse line " + line); ex.printStackTrace(); } }); } catch (NoSuchFileException ignored) { - System.out.println("Baritone settings file not found, resetting."); + Helper.HELPER.logDirect("Baritone settings file not found, resetting."); } catch (Exception ex) { - System.out.println("Exception while reading Baritone settings, some settings may be reset to default values!"); + Helper.HELPER.logDirect("Exception while reading Baritone settings, some settings may be reset to default values!"); ex.printStackTrace(); } } public static synchronized void save(Settings settings) { - try (BufferedWriter out = Files.newBufferedWriter(SETTINGS_PATH)) { + try (BufferedWriter out = Files.newBufferedWriter(settingsByName(SETTINGS_DEFAULT_NAME))) { for (Settings.Setting setting : modifiedSettings(settings)) { out.write(settingToString(setting) + "\n"); } } catch (Exception ex) { - System.out.println("Exception thrown while saving Baritone settings!"); + Helper.HELPER.logDirect("Exception thrown while saving Baritone settings!"); ex.printStackTrace(); } } + private static Path settingsByName(String name) { + return Minecraft.getInstance().gameDirectory.toPath().resolve("baritone").resolve(name); + } + public static List modifiedSettings(Settings settings) { List modified = new ArrayList<>(); for (Settings.Setting setting : settings.allSettings) { @@ -115,7 +117,7 @@ public static List modifiedSettings(Settings settings) { System.out.println("NULL SETTING?" + setting.getName()); continue; } - if (javaOnlySetting(setting)) { + if (setting.isJavaOnly()) { continue; // NO } if (setting.value == setting.defaultValue) { @@ -169,7 +171,7 @@ public static String maybeCensor(int coord) { } public static String settingToString(Settings.Setting setting) throws IllegalStateException { - if (javaOnlySetting(setting)) { + if (setting.isJavaOnly()) { return setting.getName(); } @@ -177,18 +179,14 @@ public static String settingToString(Settings.Setting setting) throws IllegalSta } /** - * This should always be the same as whether the setting can be parsed from or serialized to a string + * Deprecated. Use {@link Settings.Setting#isJavaOnly()} instead. * * @param setting The Setting * @return true if the setting can not be set or read by the user */ + @Deprecated public static boolean javaOnlySetting(Settings.Setting setting) { - for (String name : JAVA_ONLY_SETTINGS) { // no JAVA_ONLY_SETTINGS.contains(...) because that would be case sensitive - if (setting.getName().equalsIgnoreCase(name)) { - return true; - } - } - return false; + return setting.isJavaOnly(); } public static void parseAndApply(Settings settings, String settingName, String settingValue) throws IllegalStateException, NumberFormatException { diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java index e718685c9..d603ca632 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java @@ -20,29 +20,36 @@ import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import baritone.api.event.events.BlockChangeEvent; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.type.EventState; +import baritone.api.utils.Pair; import baritone.cache.CachedChunk; import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl; import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.multiplayer.CommonListenerCookie; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.network.chat.Component; +import net.minecraft.core.BlockPos; +import net.minecraft.network.Connection; import net.minecraft.network.protocol.game.*; import net.minecraft.world.level.ChunkPos; -import org.spongepowered.asm.mixin.Final; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.ArrayList; +import java.util.List; + /** * @author Brady * @since 8/3/2018 */ @Mixin(ClientPacketListener.class) -public class MixinClientPlayNetHandler { +public abstract class MixinClientPlayNetHandler extends ClientCommonPacketListenerImpl { // unused lol /*@Inject( @@ -68,12 +75,14 @@ private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { } }*/ - @Shadow @Final private Minecraft minecraft; + protected MixinClientPlayNetHandler(final Minecraft arg, final Connection arg2, final CommonListenerCookie arg3) { + super(arg, arg2, arg3); + } @Inject( - method = "sendChat(Ljava/lang/String;)V", - at = @At("HEAD"), - cancellable = true + method = "sendChat(Ljava/lang/String;)V", + at = @At("HEAD"), + cancellable = true ) private void sendChatMessage(String string, CallbackInfo ci) { ChatEvent event = new ChatEvent(string); @@ -116,7 +125,7 @@ private void preChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackIn LocalPlayer player = ibaritone.getPlayerContext().player(); if (player != null && player.connection == (ClientPacketListener) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent(EventState.PRE, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) + new ChunkEvent(EventState.PRE, ChunkEvent.Type.UNLOAD, packet.pos().x, packet.pos().z) ); } } @@ -131,7 +140,7 @@ private void postChunkUnload(ClientboundForgetLevelChunkPacket packet, CallbackI LocalPlayer player = ibaritone.getPlayerContext().player(); if (player != null && player.connection == (ClientPacketListener) (Object) this) { ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent(EventState.POST, ChunkEvent.Type.UNLOAD, packet.getX(), packet.getZ()) + new ChunkEvent(EventState.POST, ChunkEvent.Type.UNLOAD, packet.pos().x, packet.pos().z) ); } } @@ -168,31 +177,22 @@ private void postHandleBlockChange(ClientboundBlockUpdatePacket packetIn, Callba at = @At("RETURN") ) private void postHandleMultiBlockChange(ClientboundSectionBlocksUpdatePacket packetIn, CallbackInfo ci) { - if (!Baritone.settings().repackOnAnyBlockChange.value) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForConnection((ClientPacketListener) (Object) this); + if (baritone == null) { return; } - ChunkPos[] chunkPos = new ChunkPos[1]; - packetIn.runUpdates((pos, state) -> { - if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(state.getBlock())) { - chunkPos[0] = new ChunkPos(pos); - } + + List> changes = new ArrayList<>(); + packetIn.runUpdates((mutPos, state) -> { + changes.add(new Pair<>(mutPos.immutable(), state)); }); - if (chunkPos[0] == null) { + if (changes.isEmpty()) { return; } - for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - LocalPlayer player = ibaritone.getPlayerContext().player(); - if (player != null && player.connection == (ClientPacketListener) (Object) this) { - ibaritone.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - ChunkEvent.Type.POPULATE_FULL, - chunkPos[0].x, - chunkPos[0].z - ) - ); - } - } + baritone.getGameEventHandler().onBlockChange(new BlockChangeEvent( + new ChunkPos(changes.get(0).first()), + changes + )); } @Inject( @@ -210,4 +210,71 @@ private void onPlayerDeath(ClientboundPlayerCombatKillPacket packetIn, CallbackI } } } + + /* + @Inject( + method = "handleChunkData", + at = @At( + value = "INVOKE", + target = "net/minecraft/world/chunk/Chunk.read(Lnet/minecraft/network/PacketBuffer;IZ)V" + ) + ) + private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForConnection((NetHandlerPlayClient) (Object) this); + if (baritone == null) { + return; + } + baritone.getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.PRE, + packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, + packetIn.getChunkX(), + packetIn.getChunkZ() + ) + ); + } + + @Inject( + method = "handleChunkData", + at = @At("RETURN") + ) + private void postHandleChunkData(SPacketChunkData packetIn, CallbackInfo ci) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForConnection((NetHandlerPlayClient) (Object) this); + if (baritone == null) { + return; + } + baritone.getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.POST, + packetIn.isFullChunk() ? ChunkEvent.Type.POPULATE_FULL : ChunkEvent.Type.POPULATE_PARTIAL, + packetIn.getChunkX(), + packetIn.getChunkZ() + ) + ); + } + + @Inject( + method = "handleBlockChange", + at = @At("RETURN") + ) + private void postHandleBlockChange(SPacketBlockChange packetIn, CallbackInfo ci) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForConnection((NetHandlerPlayClient) (Object) this); + if (baritone == null) { + return; + } + + final ChunkPos pos = new ChunkPos(packetIn.getBlockPosition().getX() >> 4, packetIn.getBlockPosition().getZ() >> 4); + final Pair changed = new Pair<>(packetIn.getBlockPosition(), packetIn.getBlockState()); + baritone.getGameEventHandler().onBlockChange(new BlockChangeEvent(pos, Collections.singletonList(changed))); + } + + @Inject( + method = "handleMultiBlockChange", + at = @At("RETURN") + ) + private void postHandleMultiBlockChange(SPacketMultiBlockChange packetIn, CallbackInfo ci) { + + } + + */ } diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java index 22ca083e0..24e807f62 100644 --- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java @@ -19,14 +19,12 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; -import baritone.api.event.events.ChatEvent; import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.SprintStateEvent; import baritone.api.event.events.type.EventState; import baritone.behavior.LookBehavior; import net.minecraft.client.KeyMapping; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Abilities; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -45,9 +43,8 @@ public class MixinClientPlayerEntity { method = "tick", at = @At( value = "INVOKE", - target = "net/minecraft/client/player/LocalPlayer.isPassenger()Z", - shift = At.Shift.BY, - by = -3 + target = "net/minecraft/client/player/AbstractClientPlayer.tick()V", + shift = At.Shift.AFTER ) ) private void onPreUpdate(CallbackInfo ci) { @@ -57,22 +54,6 @@ private void onPreUpdate(CallbackInfo ci) { } } - @Inject( - method = "tick", - at = @At( - value = "INVOKE", - target = "net/minecraft/client/player/LocalPlayer.sendPosition()V", - shift = At.Shift.BY, - by = 2 - ) - ) - private void onPostUpdate(CallbackInfo ci) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); - if (baritone != null) { - baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); - } - } - @Redirect( method = "aiStep", at = @At( @@ -124,4 +105,19 @@ private void updateRidden(CallbackInfo cb) { ((LookBehavior) baritone.getLookBehavior()).pig(); } } + + @Redirect( + method = "aiStep", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/player/LocalPlayer;tryToStartFallFlying()Z" + ) + ) + private boolean tryToStartFallFlying(final LocalPlayer instance) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(instance); + if (baritone != null && baritone.getPathingBehavior().isPathing()) { + return false; + } + return instance.tryToStartFallFlying(); + } } diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java index 63331502f..2bcdb2d78 100644 --- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java +++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java @@ -19,9 +19,12 @@ import baritone.api.BaritoneAPI; import baritone.api.event.events.TabCompleteEvent; +import com.mojang.brigadier.ParseResults; import com.mojang.brigadier.context.StringRange; import com.mojang.brigadier.suggestion.Suggestion; import com.mojang.brigadier.suggestion.Suggestions; +import net.minecraft.client.gui.components.CommandSuggestions; +import net.minecraft.client.gui.components.EditBox; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -33,8 +36,6 @@ import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import java.util.stream.Stream; -import net.minecraft.client.gui.components.CommandSuggestions; -import net.minecraft.client.gui.components.EditBox; /** * @author Brady @@ -51,9 +52,18 @@ public class MixinCommandSuggestionHelper { @Final private List commandUsage; + @Shadow + private ParseResults currentParse; + @Shadow private CompletableFuture pendingSuggestions; + @Shadow + private CommandSuggestions.SuggestionsList suggestions; + + @Shadow + boolean keepSuggestions; + @Inject( method = "updateCommandInfo", at = @At("HEAD"), @@ -74,27 +84,32 @@ private void preUpdateSuggestion(CallbackInfo ci) { if (event.completions != null) { ci.cancel(); + this.currentParse = null; // stop coloring + + if (this.keepSuggestions) { // Supress suggestions update when cycling suggestions. + return; + } + + this.input.setSuggestion(null); // clear old suggestions + this.suggestions = null; // TODO: Support populating the command usage this.commandUsage.clear(); if (event.completions.length == 0) { this.pendingSuggestions = Suggestions.empty(); } else { - int offset = this.input.getValue().endsWith(" ") - ? this.input.getCursorPosition() - : this.input.getValue().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes + StringRange range = StringRange.between(prefix.lastIndexOf(" ") + 1, prefix.length()); // if there is no space this starts at 0 List suggestionList = Stream.of(event.completions) - .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s)) + .map(s -> new Suggestion(range, s)) .collect(Collectors.toList()); - Suggestions suggestions = new Suggestions( - StringRange.between(offset, offset + suggestionList.stream().mapToInt(s -> s.getText().length()).max().orElse(0)), - suggestionList); + Suggestions suggestions = new Suggestions(range, suggestionList); this.pendingSuggestions = new CompletableFuture<>(); this.pendingSuggestions.complete(suggestions); } + ((CommandSuggestions) (Object) this).showSuggestions(true); // actually populate the suggestions list from the suggestions future } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index b48e919f2..748095351 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -23,6 +23,7 @@ import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -33,21 +34,25 @@ public class MixinEntity { @Shadow private float yRot; - float yawRestore; + @Shadow + private float xRot; + + @Unique + private RotationMoveEvent motionUpdateRotationEvent; @Inject( method = "moveRelative", at = @At("HEAD") ) private void moveRelativeHead(CallbackInfo info) { - this.yawRestore = this.yRot; // noinspection ConstantConditions if (!LocalPlayer.class.isInstance(this) || BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this) == null) { return; } - RotationMoveEvent motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.yRot); + this.motionUpdateRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.yRot, this.xRot); BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this).getGameEventHandler().onPlayerRotationMove(motionUpdateRotationEvent); - this.yRot = motionUpdateRotationEvent.getYaw(); + this.yRot = this.motionUpdateRotationEvent.getYaw(); + this.xRot = this.motionUpdateRotationEvent.getPitch(); } @Inject( @@ -55,6 +60,10 @@ private void moveRelativeHead(CallbackInfo info) { at = @At("RETURN") ) private void moveRelativeReturn(CallbackInfo info) { - this.yRot = this.yawRestore; + if (this.motionUpdateRotationEvent != null) { + this.yRot = this.motionUpdateRotationEvent.getOriginal().getYaw(); + this.xRot = this.motionUpdateRotationEvent.getOriginal().getPitch(); + this.motionUpdateRotationEvent = null; + } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinFireworkRocketEntity.java b/src/launch/java/baritone/launch/mixins/MixinFireworkRocketEntity.java new file mode 100644 index 000000000..b4c8e05b6 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinFireworkRocketEntity.java @@ -0,0 +1,60 @@ +/* + * 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.utils.accessor.IFireworkRocketEntity; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.FireworkRocketEntity; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.OptionalInt; + +@Mixin(FireworkRocketEntity.class) +public abstract class MixinFireworkRocketEntity extends Entity implements IFireworkRocketEntity { + + @Shadow + @Final + private static EntityDataAccessor DATA_ATTACHED_TO_TARGET; + + @Shadow + private LivingEntity attachedToEntity; + + @Shadow + public abstract boolean isAttachedToEntity(); + + private MixinFireworkRocketEntity(Level level) { + super(EntityType.FIREWORK_ROCKET, level); + } + + @Override + public LivingEntity getBoostedEntity() { + if (this.isAttachedToEntity() && this.attachedToEntity == null) { // isAttachedToEntity checks if the optional is present + final Entity entity = this.level().getEntity(this.entityData.get(DATA_ATTACHED_TO_TARGET).getAsInt()); + if (entity instanceof LivingEntity) { + this.attachedToEntity = (LivingEntity) entity; + } + } + return this.attachedToEntity; + } +} diff --git a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java index 44a5c1e32..ada92f6c2 100644 --- a/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinLivingEntity.java @@ -25,13 +25,15 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import static org.objectweb.asm.Opcodes.GETFIELD; +import java.util.Optional; /** * @author Brady @@ -43,9 +45,13 @@ public abstract class MixinLivingEntity extends Entity { /** * Event called to override the movement direction when jumping */ + @Unique private RotationMoveEvent jumpRotationEvent; - public MixinLivingEntity(EntityType entityTypeIn, Level worldIn) { + @Unique + private RotationMoveEvent elytraRotationEvent; + + private MixinLivingEntity(EntityType entityTypeIn, Level worldIn) { super(entityTypeIn, worldIn); } @@ -54,14 +60,10 @@ public MixinLivingEntity(EntityType entityTypeIn, Level worldIn) { at = @At("HEAD") ) private void preMoveRelative(CallbackInfo ci) { - // noinspection ConstantConditions - if (LocalPlayer.class.isInstance(this)) { - IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this); - if (baritone != null) { - this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.getYRot()); - baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); - } - } + this.getBaritone().ifPresent(baritone -> { + this.jumpRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.JUMP, this.getYRot(), this.getXRot()); + baritone.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); + }); } @Redirect( @@ -78,5 +80,45 @@ private float overrideYaw(LivingEntity self) { return self.getYRot(); } + @Inject( + method = "travel", + at = @At( + value = "INVOKE", + target = "net/minecraft/world/entity/LivingEntity.getLookAngle()Lnet/minecraft/world/phys/Vec3;" + ) + ) + private void onPreElytraMove(Vec3 direction, CallbackInfo ci) { + this.getBaritone().ifPresent(baritone -> { + this.elytraRotationEvent = new RotationMoveEvent(RotationMoveEvent.Type.MOTION_UPDATE, this.getYRot(), this.getXRot()); + baritone.getGameEventHandler().onPlayerRotationMove(this.elytraRotationEvent); + this.setYRot(this.elytraRotationEvent.getYaw()); + this.setXRot(this.elytraRotationEvent.getPitch()); + }); + } + + @Inject( + method = "travel", + at = @At( + value = "INVOKE", + target = "net/minecraft/world/entity/LivingEntity.move(Lnet/minecraft/world/entity/MoverType;Lnet/minecraft/world/phys/Vec3;)V", + shift = At.Shift.AFTER + ) + ) + private void onPostElytraMove(Vec3 direction, CallbackInfo ci) { + if (this.elytraRotationEvent != null) { + this.setYRot(this.elytraRotationEvent.getOriginal().getYaw()); + this.setXRot(this.elytraRotationEvent.getOriginal().getPitch()); + this.elytraRotationEvent = null; + } + } + @Unique + private Optional getBaritone() { + // noinspection ConstantConditions + if (LocalPlayer.class.isInstance(this)) { + return Optional.ofNullable(BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this)); + } else { + return Optional.empty(); + } + } } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 660292a19..17aece562 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -19,6 +19,7 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; +import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; @@ -29,6 +30,7 @@ import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; @@ -49,6 +51,9 @@ public class MixinMinecraft { @Shadow public ClientLevel level; + @Unique + private BiFunction tickProvider; + @Inject( method = "", at = @At("RETURN") @@ -57,30 +62,68 @@ private void postInit(CallbackInfo ci) { BaritoneAPI.getProvider().getPrimaryBaritone(); } - @Inject( method = "tick", at = @At( - value = "FIELD", - opcode = Opcodes.GETFIELD, - target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", - ordinal = 4, - shift = At.Shift.BY, - by = -3 + value = "FIELD", + opcode = Opcodes.GETFIELD, + target = "net/minecraft/client/Minecraft.screen:Lnet/minecraft/client/gui/screens/Screen;", + ordinal = 0, + shift = At.Shift.BEFORE + ), + slice = @Slice( + from = @At( + value = "FIELD", + opcode = Opcodes.PUTFIELD, + target = "net/minecraft/client/Minecraft.missTime:I" + ) ) ) private void runTick(CallbackInfo ci) { - final BiFunction tickProvider = TickEvent.createNextProvider(); + this.tickProvider = TickEvent.createNextProvider(); for (IBaritone baritone : BaritoneAPI.getProvider().getAllBaritones()) { - TickEvent.Type type = baritone.getPlayerContext().player() != null && baritone.getPlayerContext().world() != null ? TickEvent.Type.IN : TickEvent.Type.OUT; + baritone.getGameEventHandler().onTick(this.tickProvider.apply(EventState.PRE, type)); + } + } + + @Inject( + method = "tick", + at = @At("RETURN") + ) + private void postRunTick(CallbackInfo ci) { + if (this.tickProvider == null) { + return; + } - baritone.getGameEventHandler().onTick(tickProvider.apply(EventState.PRE, type)); + for (IBaritone baritone : BaritoneAPI.getProvider().getAllBaritones()) { + TickEvent.Type type = baritone.getPlayerContext().player() != null && baritone.getPlayerContext().world() != null + ? TickEvent.Type.IN + : TickEvent.Type.OUT; + baritone.getGameEventHandler().onPostTick(this.tickProvider.apply(EventState.POST, type)); } + this.tickProvider = null; + } + + @Inject( + method = "tick", + at = @At( + value = "INVOKE", + target = "net/minecraft/client/multiplayer/ClientLevel.tickEntities()V", + shift = At.Shift.AFTER + ) + ) + private void postUpdateEntities(CallbackInfo ci) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(this.player); + if (baritone != null) { + // Intentionally call this after all entities have been updated. That way, any modification to rotations + // can be recognized by other entity code. (Fireworks and Pigs, for example) + baritone.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); + } } @Inject( diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 057a49b4b..2d35800eb 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -23,8 +23,6 @@ import baritone.api.event.events.type.EventState; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; -import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.GenericFutureListener; import net.minecraft.network.Connection; import net.minecraft.network.PacketSendListener; import net.minecraft.network.protocol.Packet; @@ -54,7 +52,7 @@ public class MixinNetworkManager { method = "sendPacket", at = @At("HEAD") ) - private void preDispatchPacket(Packet packet, PacketSendListener packetSendListener, CallbackInfo ci) { + private void preDispatchPacket(Packet packet, PacketSendListener packetSendListener, boolean flush, CallbackInfo ci) { if (this.receiving != PacketFlow.CLIENTBOUND) { return; } @@ -70,7 +68,7 @@ private void preDispatchPacket(Packet packet, PacketSendListener packetSendLi method = "sendPacket", at = @At("RETURN") ) - private void postDispatchPacket(Packet packet, PacketSendListener packetSendListener, CallbackInfo ci) { + private void postDispatchPacket(Packet packet, PacketSendListener packetSendListener, boolean flush, CallbackInfo ci) { if (this.receiving != PacketFlow.CLIENTBOUND) { return; } diff --git a/src/launch/java/baritone/launch/mixins/MixinPalettedContainer$Data.java b/src/launch/java/baritone/launch/mixins/MixinPalettedContainer$Data.java new file mode 100644 index 000000000..e4c3cc61d --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinPalettedContainer$Data.java @@ -0,0 +1,34 @@ +/* + * 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.utils.accessor.IPalettedContainer.IData; +import net.minecraft.util.BitStorage; +import net.minecraft.world.level.chunk.Palette; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(targets = "net/minecraft/world/level/chunk/PalettedContainer$Data") +public abstract class MixinPalettedContainer$Data implements IData { + + @Accessor + public abstract Palette getPalette(); + + @Accessor + public abstract BitStorage getStorage(); +} diff --git a/src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java b/src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java new file mode 100644 index 000000000..a1b409a09 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinPalettedContainer.java @@ -0,0 +1,100 @@ +/* + * 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.utils.accessor.IPalettedContainer; +import baritone.utils.accessor.IPalettedContainer.IData; +import net.minecraft.util.BitStorage; +import net.minecraft.world.level.chunk.Palette; +import net.minecraft.world.level.chunk.PalettedContainer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +@Mixin(PalettedContainer.class) +public abstract class MixinPalettedContainer implements IPalettedContainer { + + private static final MethodHandle DATA_GETTER; + + // Mixin has no way of referring to the data field and we can't use inheritance + // tricks to determine its name, so we use this ugly workaround instead. + // Classloading is hell here and causes accessor mixins (@Mixin interfaces with + // only @Accessor and @Invoker methods) to break on use and proguard hates method + // handles and on top of that mojang decided that error messages during world + // load are not needed so if you want to debug this you'll probably need an extra + // mixin just to display the error and hard quit the game before follow up errors + // blow up your log file. + // Mumphrey, please add the shadow classes you promised 5 years ago. + static { + Field dataField = null; + for (Field field : PalettedContainer.class.getDeclaredFields()) { + Class fieldType = field.getType(); + if (IData.class.isAssignableFrom(fieldType)) { + if ((field.getModifiers() & (Modifier.STATIC | Modifier.FINAL)) != 0 || field.isSynthetic()) { + continue; + } + if (dataField != null) { + throw new IllegalStateException("PalettedContainer has more than one Data field."); + } + dataField = field; + } + } + if (dataField == null) { + throw new IllegalStateException("PalettedContainer has no Data field."); + } + MethodHandle rawGetter; + try { + rawGetter = MethodHandles.lookup().unreflectGetter(dataField); + } catch (IllegalAccessException impossible) { + // we literally are the owning class, wtf? + throw new IllegalStateException("PalettedContainer may not access its own field?!", impossible); + } + MethodType getterType = MethodType.methodType(IData.class, PalettedContainer.class); + DATA_GETTER = MethodHandles.explicitCastArguments(rawGetter, getterType); + } + + @Override + public Palette getPalette() { + return data().getPalette(); + } + + @Override + public BitStorage getStorage() { + return data().getStorage(); + } + + @Unique + private IData data() { + try { + // cast to Object first so the method handle doesn't hide the interface usage from proguard + return (IData) (Object) DATA_GETTER.invoke((PalettedContainer) (Object) this); + } catch (Throwable t) { + throw sneaky(t, RuntimeException.class); + } + } + + @Unique + private static T sneaky(Throwable t, Class as) throws T { + throw (T) t; + } +} diff --git a/src/launch/resources/mixins.baritone-meteor.json b/src/launch/resources/mixins.baritone-meteor.json index 22e02226b..f686c92e3 100644 --- a/src/launch/resources/mixins.baritone-meteor.json +++ b/src/launch/resources/mixins.baritone-meteor.json @@ -15,14 +15,17 @@ "MixinCommandSuggestionHelper", "MixinEntity", "MixinEntityRenderManager", + "MixinFireworkRocketEntity", "MixinItemStack", "MixinLivingEntity", "MixinLootContext", "MixinMinecraft", "MixinNetworkManager", + "MixinPalettedContainer", + "MixinPalettedContainer$Data", "MixinPlayerController", "MixinScreen", "MixinWorldRenderer" ], "plugin": "baritone.launch.FabricMixinPlugin" -} \ No newline at end of file +} diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 7174a1228..c1176a3d4 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -20,8 +20,10 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.Settings; +import baritone.api.behavior.IBehavior; import baritone.api.event.listener.IEventBus; -import baritone.api.utils.Helper; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.IElytraProcess; import baritone.api.utils.IPlayerContext; import baritone.behavior.*; import baritone.cache.WorldProvider; @@ -33,16 +35,19 @@ import baritone.utils.GuiClick; import baritone.utils.InputOverrideHandler; import baritone.utils.PathingControlManager; -import baritone.utils.player.PrimaryPlayerContext; +import baritone.utils.player.BaritonePlayerContext; import net.minecraft.client.Minecraft; -import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.function.Function; /** * @author Brady @@ -50,87 +55,103 @@ */ public class Baritone implements IBaritone { - private static ThreadPoolExecutor threadPool; - private static File dir; + private static final ThreadPoolExecutor threadPool; static { threadPool = new ThreadPoolExecutor(4, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<>()); - - dir = new File(Minecraft.getInstance().gameDirectory, "baritone"); - if (!Files.exists(dir.toPath())) { - try { - Files.createDirectories(dir.toPath()); - } catch (IOException ignored) {} - } } - private GameEventHandler gameEventHandler; + private final Minecraft mc; + private final Path directory; - private PathingBehavior pathingBehavior; - private LookBehavior lookBehavior; - private InventoryBehavior inventoryBehavior; - private WaypointBehavior waypointBehavior; - private InputOverrideHandler inputOverrideHandler; + private final GameEventHandler gameEventHandler; - private FollowProcess followProcess; - private MineProcess mineProcess; - private GetToBlockProcess getToBlockProcess; - private CustomGoalProcess customGoalProcess; - private BuilderProcess builderProcess; - private ExploreProcess exploreProcess; - private BackfillProcess backfillProcess; - private FarmProcess farmProcess; + private final PathingBehavior pathingBehavior; + private final LookBehavior lookBehavior; + private final InventoryBehavior inventoryBehavior; + private final InputOverrideHandler inputOverrideHandler; - private PathingControlManager pathingControlManager; - private SelectionManager selectionManager; - private CommandManager commandManager; + private final FollowProcess followProcess; + private final MineProcess mineProcess; + private final GetToBlockProcess getToBlockProcess; + private final CustomGoalProcess customGoalProcess; + private final BuilderProcess builderProcess; + private final ExploreProcess exploreProcess; + private final FarmProcess farmProcess; + private final InventoryPauserProcess inventoryPauserProcess; + private final ElytraProcess elytraProcess; - private IPlayerContext playerContext; - private WorldProvider worldProvider; + private final PathingControlManager pathingControlManager; + private final SelectionManager selectionManager; + private final CommandManager commandManager; + + private final IPlayerContext playerContext; + private final WorldProvider worldProvider; public BlockStateInterface bsi; - Baritone() { + Baritone(Minecraft mc) { + this.mc = mc; this.gameEventHandler = new GameEventHandler(this); + this.directory = mc.gameDirectory.toPath().resolve("baritone"); + if (!Files.exists(this.directory)) { + try { + Files.createDirectories(this.directory); + } catch (IOException ignored) {} + } + // Define this before behaviors try and get it, or else it will be null and the builds will fail! - this.playerContext = PrimaryPlayerContext.INSTANCE; + this.playerContext = new BaritonePlayerContext(this, mc); { - // the Behavior constructor calls baritone.registerBehavior(this) so this populates the behaviors arraylist - pathingBehavior = new PathingBehavior(this); - lookBehavior = new LookBehavior(this); - inventoryBehavior = new InventoryBehavior(this); - inputOverrideHandler = new InputOverrideHandler(this); - waypointBehavior = new WaypointBehavior(this); + this.lookBehavior = this.registerBehavior(LookBehavior::new); + this.pathingBehavior = this.registerBehavior(PathingBehavior::new); + this.inventoryBehavior = this.registerBehavior(InventoryBehavior::new); + this.inputOverrideHandler = this.registerBehavior(InputOverrideHandler::new); + this.registerBehavior(WaypointBehavior::new); } this.pathingControlManager = new PathingControlManager(this); { - this.pathingControlManager.registerProcess(followProcess = new FollowProcess(this)); - this.pathingControlManager.registerProcess(mineProcess = new MineProcess(this)); - this.pathingControlManager.registerProcess(customGoalProcess = new CustomGoalProcess(this)); // very high iq - this.pathingControlManager.registerProcess(getToBlockProcess = new GetToBlockProcess(this)); - this.pathingControlManager.registerProcess(builderProcess = new BuilderProcess(this)); - this.pathingControlManager.registerProcess(exploreProcess = new ExploreProcess(this)); - this.pathingControlManager.registerProcess(backfillProcess = new BackfillProcess(this)); - this.pathingControlManager.registerProcess(farmProcess = new FarmProcess(this)); + this.followProcess = this.registerProcess(FollowProcess::new); + this.mineProcess = this.registerProcess(MineProcess::new); + this.customGoalProcess = this.registerProcess(CustomGoalProcess::new); // very high iq + this.getToBlockProcess = this.registerProcess(GetToBlockProcess::new); + this.builderProcess = this.registerProcess(BuilderProcess::new); + this.exploreProcess = this.registerProcess(ExploreProcess::new); + this.farmProcess = this.registerProcess(FarmProcess::new); + this.inventoryPauserProcess = this.registerProcess(InventoryPauserProcess::new); + this.elytraProcess = this.registerProcess(ElytraProcess::create); + this.registerProcess(BackfillProcess::new); } - this.worldProvider = new WorldProvider(); + this.worldProvider = new WorldProvider(this); this.selectionManager = new SelectionManager(this); this.commandManager = new CommandManager(this); } + public void registerBehavior(IBehavior behavior) { + this.gameEventHandler.registerEventListener(behavior); + } + + public T registerBehavior(Function constructor) { + final T behavior = constructor.apply(this); + this.registerBehavior(behavior); + return behavior; + } + + public T registerProcess(Function constructor) { + final T behavior = constructor.apply(this); + this.pathingControlManager.registerProcess(behavior); + return behavior; + } + @Override public PathingControlManager getPathingControlManager() { return this.pathingControlManager; } - public void registerBehavior(Behavior behavior) { - this.gameEventHandler.registerEventListener(behavior); - } - @Override public InputOverrideHandler getInputOverrideHandler() { return this.inputOverrideHandler; @@ -170,6 +191,7 @@ public LookBehavior getLookBehavior() { return this.lookBehavior; } + @Override public ExploreProcess getExploreProcess() { return this.exploreProcess; } @@ -179,10 +201,15 @@ public MineProcess getMineProcess() { return this.mineProcess; } + @Override public FarmProcess getFarmProcess() { return this.farmProcess; } + public InventoryPauserProcess getInventoryPauserProcess() { + return this.inventoryPauserProcess; + } + @Override public PathingBehavior getPathingBehavior() { return this.pathingBehavior; @@ -208,22 +235,27 @@ public CommandManager getCommandManager() { return this.commandManager; } + @Override + public IElytraProcess getElytraProcess() { + return this.elytraProcess; + } + @Override public void openClick() { new Thread(() -> { try { Thread.sleep(100); - Helper.mc.execute(() -> Helper.mc.setScreen(new GuiClick())); + mc.execute(() -> mc.setScreen(new GuiClick())); } catch (Exception ignored) {} }).start(); } - public static Settings settings() { - return BaritoneAPI.getSettings(); + public Path getDirectory() { + return this.directory; } - public static File getDir() { - return dir; + public static Settings settings() { + return BaritoneAPI.getSettings(); } public static Executor getExecutor() { diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index d5457cf85..f34d9bcb9 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -22,13 +22,15 @@ import baritone.api.cache.IWorldScanner; import baritone.api.command.ICommandSystem; import baritone.api.schematic.ISchematicSystem; -import baritone.cache.WorldScanner; +import baritone.cache.FasterWorldScanner; import baritone.command.CommandSystem; import baritone.command.ExampleBaritoneControl; import baritone.utils.schematic.SchematicSystem; +import net.minecraft.client.Minecraft; import java.util.Collections; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; /** * @author Brady @@ -36,30 +38,45 @@ */ public final class BaritoneProvider implements IBaritoneProvider { - private final Baritone primary; private final List all; + private final List allView; - { - this.primary = new Baritone(); - this.all = Collections.singletonList(this.primary); + public BaritoneProvider() { + this.all = new CopyOnWriteArrayList<>(); + this.allView = Collections.unmodifiableList(this.all); // Setup chat control, just for the primary instance - new ExampleBaritoneControl(this.primary); + final Baritone primary = (Baritone) this.createBaritone(Minecraft.getInstance()); + primary.registerBehavior(ExampleBaritoneControl::new); } @Override public IBaritone getPrimaryBaritone() { - return primary; + return this.all.get(0); } @Override public List getAllBaritones() { - return all; + return this.allView; + } + + @Override + public synchronized IBaritone createBaritone(Minecraft minecraft) { + IBaritone baritone = this.getBaritoneForMinecraft(minecraft); + if (baritone == null) { + this.all.add(baritone = new Baritone(minecraft)); + } + return baritone; + } + + @Override + public synchronized boolean destroyBaritone(IBaritone baritone) { + return baritone != this.getPrimaryBaritone() && this.all.remove(baritone); } @Override public IWorldScanner getWorldScanner() { - return WorldScanner.INSTANCE; + return FasterWorldScanner.INSTANCE; } @Override diff --git a/src/main/java/baritone/behavior/Behavior.java b/src/main/java/baritone/behavior/Behavior.java index 36273c026..848beb298 100644 --- a/src/main/java/baritone/behavior/Behavior.java +++ b/src/main/java/baritone/behavior/Behavior.java @@ -35,6 +35,5 @@ public class Behavior implements IBehavior { protected Behavior(Baritone baritone) { this.baritone = baritone; this.ctx = baritone.getPlayerContext(); - baritone.registerBehavior(this); } } diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index e0b56196e..aaa550b00 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -20,6 +20,7 @@ import baritone.Baritone; import baritone.altoclef.AltoClefSettings; import baritone.api.event.events.TickEvent; +import baritone.api.utils.Helper; import baritone.utils.ToolSet; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.Direction; @@ -43,7 +44,10 @@ import java.util.Random; import java.util.function.Predicate; -public final class InventoryBehavior extends Behavior { +public final class InventoryBehavior extends Behavior implements Helper { + + int ticksSinceLastInventoryMove; + int[] lastTickRequestedMove; // not everything asks every tick, so remember the request while coming to a halt public InventoryBehavior(Baritone baritone) { super(baritone); @@ -61,21 +65,29 @@ public void onTick(TickEvent event) { // we have a crafting table or a chest or something open return; } + ticksSinceLastInventoryMove++; if (firstValidThrowaway() >= 9) { // aka there are none on the hotbar, but there are some in main inventory - swapWithHotBar(firstValidThrowaway(), 8); + requestSwapWithHotBar(firstValidThrowaway(), 8); } int pick = bestToolAgainst(Blocks.STONE, PickaxeItem.class); if (pick >= 9) { - swapWithHotBar(pick, 0); + requestSwapWithHotBar(pick, 0); + } + if (lastTickRequestedMove != null) { + logDebug("Remembering to move " + lastTickRequestedMove[0] + " " + lastTickRequestedMove[1] + " from a previous tick"); + requestSwapWithHotBar(lastTickRequestedMove[0], lastTickRequestedMove[1]); } } - public void attemptToPutOnHotbar(int inMainInvy, Predicate disallowedHotbar) { - if (AltoClefSettings.getInstance().isInteractionPaused()) return; + public boolean attemptToPutOnHotbar(int inMainInvy, Predicate disallowedHotbar) { + if (AltoClefSettings.getInstance().isInteractionPaused()) return false; OptionalInt destination = getTempHotbarSlot(disallowedHotbar); if (destination.isPresent()) { - swapWithHotBar(inMainInvy, destination.getAsInt()); + if (!requestSwapWithHotBar(inMainInvy, destination.getAsInt())) { + return false; + } } + return true; } public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { @@ -99,9 +111,21 @@ public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { return OptionalInt.of(candidates.get(new Random().nextInt(candidates.size()))); } - private void swapWithHotBar(int inInventory, int inHotbar) { - if (AltoClefSettings.getInstance().isInteractionPaused()) return; + private boolean requestSwapWithHotBar(int inInventory, int inHotbar) { + lastTickRequestedMove = new int[]{inInventory, inHotbar}; + if (ticksSinceLastInventoryMove < Baritone.settings().ticksBetweenInventoryMoves.value) { + logDebug("Inventory move requested but delaying " + ticksSinceLastInventoryMove + " " + Baritone.settings().ticksBetweenInventoryMoves.value); + return false; + } + if (Baritone.settings().inventoryMoveOnlyIfStationary.value && !baritone.getInventoryPauserProcess().stationaryForInventoryMove()) { + logDebug("Inventory move requested but delaying until stationary"); + return false; + } + if (AltoClefSettings.getInstance().isInteractionPaused()) return false; ctx.playerController().windowClick(ctx.player().inventoryMenu.containerId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); + ticksSinceLastInventoryMove = 0; + lastTickRequestedMove = null; + return true; } private int firstValidThrowaway() { // TODO offhand idk @@ -211,8 +235,8 @@ public boolean throwaway(boolean select, Predicate desired, b if (allowInventory) { for (int i = 9; i < 36; i++) { if (desired.test(inv.get(i))) { - swapWithHotBar(i, 7); if (select) { + requestSwapWithHotBar(i, 7); p.getInventory().selected = 7; } return true; diff --git a/src/main/java/baritone/behavior/LookBehavior.java b/src/main/java/baritone/behavior/LookBehavior.java index e9b0ca661..98e12aeff 100644 --- a/src/main/java/baritone/behavior/LookBehavior.java +++ b/src/main/java/baritone/behavior/LookBehavior.java @@ -20,80 +20,112 @@ import baritone.Baritone; import baritone.api.Settings; import baritone.api.behavior.ILookBehavior; -import baritone.api.event.events.PlayerUpdateEvent; -import baritone.api.event.events.RotationMoveEvent; +import baritone.api.behavior.look.IAimProcessor; +import baritone.api.behavior.look.ITickableAimProcessor; +import baritone.api.event.events.*; +import baritone.api.utils.IPlayerContext; import baritone.api.utils.Rotation; +import baritone.behavior.look.ForkableRandom; +import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.Optional; public final class LookBehavior extends Behavior implements ILookBehavior { /** - * Target's values are as follows: + * The current look target, may be {@code null}. */ - private Rotation target; + private Target target; /** - * Whether or not rotations are currently being forced + * The rotation known to the server. Returned by {@link #getEffectiveRotation()} for use in {@link IPlayerContext}. */ - private boolean force; + private Rotation serverRotation; /** - * The last player yaw angle. Used when free looking + * The last player rotation. Used to restore the player's angle when using free look. * * @see Settings#freeLook */ - private float lastYaw; + private Rotation prevRotation; + + private final AimProcessor processor; + + private final Deque smoothYawBuffer; + private final Deque smoothPitchBuffer; public LookBehavior(Baritone baritone) { super(baritone); + this.processor = new AimProcessor(baritone.getPlayerContext()); + this.smoothYawBuffer = new ArrayDeque<>(); + this.smoothPitchBuffer = new ArrayDeque<>(); } @Override - public void updateTarget(Rotation target, boolean force) { - this.target = target; - if (!force) { - double rand = Math.random() - 0.5; - if (Math.abs(rand) < 0.1) { - rand *= 4; - } - this.target = new Rotation(this.target.getYaw() + (float) (rand * Baritone.settings().randomLooking113.value), this.target.getPitch()); + public void updateTarget(Rotation rotation, boolean blockInteract) { + this.target = new Target(rotation, Target.Mode.resolve(ctx, blockInteract)); + } + + @Override + public IAimProcessor getAimProcessor() { + return this.processor; + } + + @Override + public void onTick(TickEvent event) { + if (event.getType() == TickEvent.Type.IN) { + this.processor.tick(); } - this.force = force || !Baritone.settings().freeLook.value; } @Override public void onPlayerUpdate(PlayerUpdateEvent event) { + if (this.target == null) { return; } - // Whether or not we're going to silently set our angles - boolean silent = Baritone.settings().antiCheatCompatibility.value && !this.force; - switch (event.getState()) { case PRE: { - if (this.force) { - ctx.player().setYRot(this.target.getYaw()); - float oldPitch = ctx.player().getXRot(); - float desiredPitch = this.target.getPitch(); - ctx.player().setXRot(desiredPitch); - ctx.player().setYRot((float) (ctx.player().getYRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); - ctx.player().setXRot((float) (ctx.player().getXRot() + (Math.random() - 0.5) * Baritone.settings().randomLooking.value)); - if (desiredPitch == oldPitch && !Baritone.settings().freeLook.value) { - nudgeToLevel(); - } - this.target = null; - } - if (silent) { - this.lastYaw = ctx.player().getYRot(); - ctx.player().setYRot(this.target.getYaw()); + if (this.target.mode == Target.Mode.NONE) { + // Just return for PRE, we still want to set target to null on POST + return; } + + this.prevRotation = new Rotation(ctx.player().getYRot(), ctx.player().getXRot()); + final Rotation actual = this.processor.peekRotation(this.target.rotation); + ctx.player().setYRot(actual.getYaw()); + ctx.player().setXRot(actual.getPitch()); break; } case POST: { - if (silent) { - ctx.player().setYRot(this.lastYaw); - this.target = null; + // Reset the player's rotations back to their original values + if (this.prevRotation != null) { + this.smoothYawBuffer.addLast(this.target.rotation.getYaw()); + while (this.smoothYawBuffer.size() > Baritone.settings().smoothLookTicks.value) { + this.smoothYawBuffer.removeFirst(); + } + this.smoothPitchBuffer.addLast(this.target.rotation.getPitch()); + while (this.smoothPitchBuffer.size() > Baritone.settings().smoothLookTicks.value) { + this.smoothPitchBuffer.removeFirst(); + } + if (this.target.mode == Target.Mode.SERVER) { + ctx.player().setYRot(this.prevRotation.getYaw()); + ctx.player().setXRot(this.prevRotation.getPitch()); + } else if (ctx.player().isFallFlying() ? Baritone.settings().elytraSmoothLook.value : Baritone.settings().smoothLook.value) { + ctx.player().setYRot((float) this.smoothYawBuffer.stream().mapToDouble(d -> d).average().orElse(this.prevRotation.getYaw())); + if (ctx.player().isFallFlying()) { + ctx.player().setXRot((float) this.smoothPitchBuffer.stream().mapToDouble(d -> d).average().orElse(this.prevRotation.getPitch())); + } + } + //ctx.player().xRotO = prevRotation.getPitch(); + //ctx.player().yRotO = prevRotation.getYaw(); + this.prevRotation = null; } + // The target is done being used for this game tick, so it can be invalidated + this.target = null; break; } default: @@ -101,34 +133,227 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { } } + @Override + public void onSendPacket(PacketEvent event) { + if (!(event.getPacket() instanceof ServerboundMovePlayerPacket)) { + return; + } + + final ServerboundMovePlayerPacket packet = (ServerboundMovePlayerPacket) event.getPacket(); + if (packet instanceof ServerboundMovePlayerPacket.Rot || packet instanceof ServerboundMovePlayerPacket.PosRot) { + this.serverRotation = new Rotation(packet.getYRot(0.0f), packet.getXRot(0.0f)); + } + } + + @Override + public void onWorldEvent(WorldEvent event) { + this.serverRotation = null; + this.target = null; + } + public void pig() { if (this.target != null) { - ctx.player().setYRot(this.target.getYaw()); + final Rotation actual = this.processor.peekRotation(this.target.rotation); + ctx.player().setYRot(actual.getYaw()); } } + public Optional getEffectiveRotation() { + if (Baritone.settings().freeLook.value) { + return Optional.ofNullable(this.serverRotation); + } + // If freeLook isn't on, just defer to the player's actual rotations + return Optional.empty(); + } + @Override public void onPlayerRotationMove(RotationMoveEvent event) { if (this.target != null) { + final Rotation actual = this.processor.peekRotation(this.target.rotation); + event.setYaw(actual.getYaw()); + event.setPitch(actual.getPitch()); + } + } - event.setYaw(this.target.getYaw()); + private static final class AimProcessor extends AbstractAimProcessor { - // If we have antiCheatCompatibility on, we're going to use the target value later in onPlayerUpdate() - // Also the type has to be MOTION_UPDATE because that is called after JUMP - if (!Baritone.settings().antiCheatCompatibility.value && event.getType() == RotationMoveEvent.Type.MOTION_UPDATE && !this.force) { - this.target = null; + public AimProcessor(final IPlayerContext ctx) { + super(ctx); + } + + @Override + protected Rotation getPrevRotation() { + // Implementation will use LookBehavior.serverRotation + return ctx.playerRotations(); + } + } + + private static abstract class AbstractAimProcessor implements ITickableAimProcessor { + + protected final IPlayerContext ctx; + private final ForkableRandom rand; + private double randomYawOffset; + private double randomPitchOffset; + + public AbstractAimProcessor(IPlayerContext ctx) { + this.ctx = ctx; + this.rand = new ForkableRandom(); + } + + private AbstractAimProcessor(final AbstractAimProcessor source) { + this.ctx = source.ctx; + this.rand = source.rand.fork(); + this.randomYawOffset = source.randomYawOffset; + this.randomPitchOffset = source.randomPitchOffset; + } + + @Override + public final Rotation peekRotation(final Rotation rotation) { + final Rotation prev = this.getPrevRotation(); + + float desiredYaw = rotation.getYaw(); + float desiredPitch = rotation.getPitch(); + + // In other words, the target doesn't care about the pitch, so it used playerRotations().getPitch() + // and it's safe to adjust it to a normal level + if (desiredPitch == prev.getPitch()) { + desiredPitch = nudgeToLevel(desiredPitch); + } + + desiredYaw += this.randomYawOffset; + desiredPitch += this.randomPitchOffset; + + return new Rotation( + this.calculateMouseMove(prev.getYaw(), desiredYaw), + this.calculateMouseMove(prev.getPitch(), desiredPitch) + ).clamp(); + } + + @Override + public final void tick() { + // randomLooking + this.randomYawOffset = (this.rand.nextDouble() - 0.5) * Baritone.settings().randomLooking.value; + this.randomPitchOffset = (this.rand.nextDouble() - 0.5) * Baritone.settings().randomLooking.value; + + // randomLooking113 + double random = this.rand.nextDouble() - 0.5; + if (Math.abs(random) < 0.1) { + random *= 4; + } + this.randomYawOffset += random * Baritone.settings().randomLooking113.value; + } + + @Override + public final void advance(int ticks) { + for (int i = 0; i < ticks; i++) { + this.tick(); } } + + @Override + public Rotation nextRotation(final Rotation rotation) { + final Rotation actual = this.peekRotation(rotation); + this.tick(); + return actual; + } + + @Override + public final ITickableAimProcessor fork() { + return new AbstractAimProcessor(this) { + + private Rotation prev = AbstractAimProcessor.this.getPrevRotation(); + + @Override + public Rotation nextRotation(final Rotation rotation) { + return (this.prev = super.nextRotation(rotation)); + } + + @Override + protected Rotation getPrevRotation() { + return this.prev; + } + }; + } + + protected abstract Rotation getPrevRotation(); + + /** + * Nudges the player's pitch to a regular level. (Between {@code -20} and {@code 10}, increments are by {@code 1}) + */ + private float nudgeToLevel(float pitch) { + if (pitch < -20) { + return pitch + 1; + } else if (pitch > 10) { + return pitch - 1; + } + return pitch; + } + + private float calculateMouseMove(float current, float target) { + final float delta = target - current; + final double deltaPx = angleToMouse(delta); // yes, even the mouse movements use double + return current + mouseToAngle(deltaPx); + } + + private double angleToMouse(float angleDelta) { + final float minAngleChange = mouseToAngle(1); + return Math.round(angleDelta / minAngleChange); + } + + private float mouseToAngle(double mouseDelta) { + // casting float literals to double gets us the precise values used by mc + final double f = ctx.minecraft().options.sensitivity().get() * (double) 0.6f + (double) 0.2f; + return (float) (mouseDelta * f * f * f * 8.0d) * 0.15f; // yes, one double and one float scaling factor + } } - /** - * Nudges the player's pitch to a regular level. (Between {@code -20} and {@code 10}, increments are by {@code 1}) - */ - private void nudgeToLevel() { - if (ctx.player().getXRot() < -20) { - ctx.player().setXRot(ctx.player().getXRot() + 1); - } else if (ctx.player().getXRot() > 10) { - ctx.player().setXRot(ctx.player().getXRot() - 1); + private static class Target { + + public final Rotation rotation; + public final Mode mode; + + public Target(Rotation rotation, Mode mode) { + this.rotation = rotation; + this.mode = mode; + } + + enum Mode { + /** + * Rotation will be set client-side and is visual to the player + */ + CLIENT, + + /** + * Rotation will be set server-side and is silent to the player + */ + SERVER, + + /** + * Rotation will remain unaffected on both the client and server + */ + NONE; + + static Mode resolve(IPlayerContext ctx, boolean blockInteract) { + final Settings settings = Baritone.settings(); + final boolean antiCheat = settings.antiCheatCompatibility.value; + final boolean blockFreeLook = settings.blockFreeLook.value; + + if (ctx.player().isFallFlying()) { + // always need to set angles while flying + return settings.elytraFreeLook.value ? SERVER : CLIENT; + } else if (settings.freeLook.value) { + // Regardless of if antiCheatCompatibility is enabled, if a blockInteract is requested then the player + // rotation needs to be set somehow, otherwise Baritone will halt since objectMouseOver() will just be + // whatever the player is mousing over visually. Let's just settle for setting it silently. + if (blockInteract) { + return blockFreeLook ? SERVER : CLIENT; + } + return antiCheat ? SERVER : NONE; + } + + // all freeLook settings are disabled so set the angles + return CLIENT; + } } } } diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 1f2ba4561..b7c035598 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -33,6 +33,7 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; import baritone.pathing.path.PathExecutor; +import baritone.process.ElytraProcess; import baritone.utils.PathRenderer; import baritone.utils.PathingCommandContext; import baritone.utils.pathing.Favoring; @@ -238,11 +239,11 @@ public void onPlayerUpdate(PlayerUpdateEvent event) { if (current != null) { switch (event.getState()) { case PRE: - lastAutoJump = mc.options.autoJump().get(); - mc.options.autoJump().set(false); + lastAutoJump = ctx.minecraft().options.autoJump().get(); + ctx.minecraft().options.autoJump().set(false); break; case POST: - mc.options.autoJump().set(lastAutoJump); + ctx.minecraft().options.autoJump().set(lastAutoJump); break; default: break; @@ -308,7 +309,10 @@ public Optional getInProgress() { } public boolean isSafeToCancel() { - return current == null || safeToCancel; + if (current == null) { + return !baritone.getElytraProcess().isActive() || baritone.getElytraProcess().isSafeToCancel(); + } + return safeToCancel; } public void requestPause() { @@ -351,7 +355,7 @@ public void softCancelIfSafe() { } // just cancel the current path - private void secretInternalSegmentCancel() { + public void secretInternalSegmentCancel() { queuePathEvent(PathEvent.CANCELED); synchronized (pathPlanLock) { getInProgress().ifPresent(AbstractNodeCostSearch::cancel); @@ -437,9 +441,7 @@ public BetterBlockPos pathStart() { // TODO move to a helper or util class // can't possibly be sneaking off of this one, we're too far away continue; } - if (MovementHelper.canWalkOn(ctx, possibleSupport.below()) - && MovementHelper.canWalkThrough(ctx, possibleSupport) - && MovementHelper.canWalkThrough(ctx, possibleSupport.above())) { + if (MovementHelper.canWalkOn(ctx, possibleSupport.below()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.above())) { // this is plausible //logDebug("Faking path start assuming player is standing off the edge of a block"); return possibleSupport; diff --git a/src/main/java/baritone/behavior/look/ForkableRandom.java b/src/main/java/baritone/behavior/look/ForkableRandom.java new file mode 100644 index 000000000..5f5f942d2 --- /dev/null +++ b/src/main/java/baritone/behavior/look/ForkableRandom.java @@ -0,0 +1,85 @@ +/* + * 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.behavior.look; + +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.LongSupplier; + +/** + * Implementation of Xoroshiro256++ + *

+ * Extended to produce random double-precision floating point numbers, and allow copies to be spawned via {@link #fork}, + * which share the same internal state as the source object. + * + * @author Brady + */ +public final class ForkableRandom { + + private static final double DOUBLE_UNIT = 0x1.0p-53; + + private final long[] s; + + public ForkableRandom() { + this(System.nanoTime() ^ System.currentTimeMillis()); + } + + public ForkableRandom(long seedIn) { + final AtomicLong seed = new AtomicLong(seedIn); + final LongSupplier splitmix64 = () -> { + long z = seed.addAndGet(0x9e3779b97f4a7c15L); + z = (z ^ (z >>> 30)) * 0xbf58476d1ce4e5b9L; + z = (z ^ (z >>> 27)) * 0x94d049bb133111ebL; + return z ^ (z >>> 31); + }; + this.s = new long[] { + splitmix64.getAsLong(), + splitmix64.getAsLong(), + splitmix64.getAsLong(), + splitmix64.getAsLong() + }; + } + + private ForkableRandom(long[] s) { + this.s = s; + } + + public double nextDouble() { + return (this.next() >>> 11) * DOUBLE_UNIT; + } + + public long next() { + final long result = rotl(this.s[0] + this.s[3], 23) + this.s[0]; + final long t = this.s[1] << 17; + this.s[2] ^= this.s[0]; + this.s[3] ^= this.s[1]; + this.s[1] ^= this.s[2]; + this.s[0] ^= this.s[3]; + this.s[2] ^= t; + this.s[3] = rotl(this.s[3], 45); + return result; + } + + public ForkableRandom fork() { + return new ForkableRandom(Arrays.copyOf(this.s, 4)); + } + + private static long rotl(long x, int k) { + return (x << k) | (x >>> (64 - k)); + } +} diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index bbc713af7..2659c4feb 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -21,16 +21,17 @@ import baritone.utils.pathing.PathingBlockType; import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.List; -import java.util.Map; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.dimension.DimensionType; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.List; +import java.util.Map; + /** * @author Brady * @since 8/3/2018 @@ -217,7 +218,7 @@ public final BlockState getBlock(int x, int y, int z, DimensionType dimension) { // nether roof is always unbreakable return Blocks.BEDROCK.defaultBlockState(); } - if (y < 5 && dimension.natural()) { + if (y < -59 && dimension.natural()) { // solid blocks below 5 are commonly bedrock // however, returning bedrock always would be a little yikes // discourage paths that include breaking blocks below 5 a little more heavily just so that it takes paths breaking what's known to be stone (at 5 or above) instead of what could maybe be bedrock (below 5) diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index 9bcebcaad..8aa992d79 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -20,6 +20,10 @@ import baritone.Baritone; import baritone.api.cache.ICachedRegion; import baritone.api.utils.BlockUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; + import java.io.*; import java.nio.file.Files; import java.nio.file.Path; @@ -27,9 +31,6 @@ import java.util.*; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.dimension.DimensionType; /** * @author Brady diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 4e323097c..aed1faeb5 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -23,22 +23,21 @@ import baritone.api.cache.ICachedWorld; import baritone.api.cache.IWorldData; import baritone.api.utils.Helper; +import com.google.common.cache.CacheBuilder; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.dimension.DimensionType; + import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; -import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.dimension.DimensionType; /** * @author Brady @@ -71,7 +70,7 @@ public final class CachedWorld implements ICachedWorld, Helper { * All chunk positions pending packing. This map will be updated in-place if a new update to the chunk occurs * while waiting in the queue for the packer thread to get to it. */ - private final Map toPackMap = new ConcurrentHashMap<>(); + private final Map toPackMap = CacheBuilder.newBuilder().softValues().build().asMap(); private final DimensionType dimension; @@ -197,9 +196,7 @@ private synchronized void prune() { int distZ = ((region.getZ() << 9) + 256) - pruneCenter.getZ(); double dist = Math.sqrt(distX * distX + distZ * distZ); if (dist > 1024) { - if (!Baritone.settings().censorCoordinates.value) { - logDebug("Deleting cached region " + region.getX() + "," + region.getZ() + " from ram"); - } + logDebug("Deleting cached region from ram"); cachedRegions.remove(getRegionID(region.getX(), region.getZ())); } } @@ -309,6 +306,9 @@ public void run() { try { ChunkPos pos = toPackQueue.take(); LevelChunk chunk = toPackMap.remove(pos); + if (toPackQueue.size() > Baritone.settings().chunkPackerQueueMaxSize.value) { + continue; + } CachedChunk cached = ChunkPacker.pack(chunk); CachedWorld.this.updateCachedChunk(cached); //System.out.println("Processed chunk at " + chunk.x + "," + chunk.z); diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index d544ac74d..5d619543d 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -34,6 +34,7 @@ import net.minecraft.world.level.dimension.BuiltinDimensionTypes; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.phys.Vec3; + import java.util.*; import static baritone.utils.BlockStateInterface.getFromChunk; diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java new file mode 100644 index 000000000..e364fd7b4 --- /dev/null +++ b/src/main/java/baritone/cache/FasterWorldScanner.java @@ -0,0 +1,303 @@ +/* + * 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.cache; + +import baritone.api.cache.ICachedWorld; +import baritone.api.cache.IWorldScanner; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMeta; +import baritone.api.utils.BlockOptionalMetaLookup; +import baritone.api.utils.IPlayerContext; +import baritone.utils.accessor.IPalettedContainer; +import io.netty.buffer.Unpooled; +import net.minecraft.core.BlockPos; +import net.minecraft.core.IdMapper; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.util.BitStorage; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.GlobalPalette; +import net.minecraft.world.level.chunk.ChunkSource; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.chunk.Palette; +import net.minecraft.world.level.chunk.PalettedContainer; +import net.minecraft.world.level.chunk.SingleValuePalette; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public enum FasterWorldScanner implements IWorldScanner { + INSTANCE; + + private static final BlockState[] PALETTE_REGISTRY_SENTINEL = new BlockState[0]; + + @Override + public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) { + assert ctx.world() != null; + if (maxSearchRadius < 0) { + throw new IllegalArgumentException("chunkRange must be >= 0"); + } + return scanChunksInternal(ctx, filter, getChunkRange(ctx.playerFeet().x >> 4, ctx.playerFeet().z >> 4, maxSearchRadius), max); + } + + @Override + public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold) { + Stream stream = scanChunkInternal(ctx, filter, pos); + if (max >= 0) { + stream = stream.limit(max); + } + return stream.collect(Collectors.toList()); + } + + @Override + public int repack(IPlayerContext ctx) { + return this.repack(ctx, 40); + } + + @Override + public int repack(IPlayerContext ctx, int range) { + ChunkSource chunkProvider = ctx.world().getChunkSource(); + ICachedWorld cachedWorld = ctx.worldData().getCachedWorld(); + + BetterBlockPos playerPos = ctx.playerFeet(); + + int playerChunkX = playerPos.getX() >> 4; + int playerChunkZ = playerPos.getZ() >> 4; + + int minX = playerChunkX - range; + int minZ = playerChunkZ - range; + int maxX = playerChunkX + range; + int maxZ = playerChunkZ + range; + + int queued = 0; + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + LevelChunk chunk = chunkProvider.getChunk(x, z, false); + + if (chunk != null && !chunk.isEmpty()) { + queued++; + cachedWorld.queueForPacking(chunk); + } + } + } + + return queued; + } + + // ordered in a way that the closest blocks are generally first + public static List getChunkRange(int centerX, int centerZ, int chunkRadius) { + List chunks = new ArrayList<>(); + // spiral out + chunks.add(new ChunkPos(centerX, centerZ)); + for (int i = 1; i < chunkRadius; i++) { + for (int j = 0; j <= i; j++) { + chunks.add(new ChunkPos(centerX - j, centerZ - i)); + if (j != 0) { + chunks.add(new ChunkPos(centerX + j, centerZ - i)); + chunks.add(new ChunkPos(centerX - j, centerZ + i)); + } + chunks.add(new ChunkPos(centerX + j, centerZ + i)); + if (j != i) { + chunks.add(new ChunkPos(centerX - i, centerZ - j)); + chunks.add(new ChunkPos(centerX + i, centerZ - j)); + if (j != 0) { + chunks.add(new ChunkPos(centerX - i, centerZ + j)); + chunks.add(new ChunkPos(centerX + i, centerZ + j)); + } + } + } + } + return chunks; + } + + private List scanChunksInternal(IPlayerContext ctx, BlockOptionalMetaLookup lookup, List chunkPositions, int maxBlocks) { + assert ctx.world() != null; + try { + // p -> scanChunkInternal(ctx, lookup, p) + Stream posStream = chunkPositions.parallelStream().flatMap(p -> scanChunkInternal(ctx, lookup, p)); + if (maxBlocks >= 0) { + // WARNING: this can be expensive if maxBlocks is large... + // see limit's javadoc + posStream = posStream.limit(maxBlocks); + } + return posStream.collect(Collectors.toList()); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + private Stream scanChunkInternal(IPlayerContext ctx, BlockOptionalMetaLookup lookup, ChunkPos pos) { + ChunkSource chunkProvider = ctx.world().getChunkSource(); + // if chunk is not loaded, return empty stream + if (!chunkProvider.hasChunk(pos.x, pos.z)) { + return Stream.empty(); + } + + long chunkX = (long) pos.x << 4; + long chunkZ = (long) pos.z << 4; + + int playerSectionY = (ctx.playerFeet().y - ctx.world().getMinBuildHeight()) >> 4; + + return collectChunkSections(lookup, chunkProvider.getChunk(pos.x, pos.z, false), chunkX, chunkZ, playerSectionY).stream(); + } + + + private List collectChunkSections(BlockOptionalMetaLookup lookup, LevelChunk chunk, long chunkX, long chunkZ, int playerSection) { + // iterate over sections relative to player + List blocks = new ArrayList<>(); + int chunkY = chunk.getMinBuildHeight(); + LevelChunkSection[] sections = chunk.getSections(); + int l = sections.length; + int i = playerSection - 1; + int j = playerSection; + for (; i >= 0 || j < l; ++j, --i) { + if (j < l) { + visitSection(lookup, sections[j], blocks, chunkX, chunkY + j * 16, chunkZ); + } + if (i >= 0) { + visitSection(lookup, sections[i], blocks, chunkX, chunkY + i * 16, chunkZ); + } + } + return blocks; + } + + private void visitSection(BlockOptionalMetaLookup lookup, LevelChunkSection section, List blocks, long chunkX, int sectionY, long chunkZ) { + if (section == null || section.hasOnlyAir()) { + return; + } + + PalettedContainer sectionContainer = section.getStates(); + //this won't work if the PaletteStorage is of the type EmptyPaletteStorage + if (((IPalettedContainer) sectionContainer).getStorage() == null) { + return; + } + + Palette palette = ((IPalettedContainer) sectionContainer).getPalette(); + + if (palette instanceof SingleValuePalette) { + // single value palette doesn't have any data + if (lookup.has(palette.valueFor(0))) { + // TODO this is 4k hits, maybe don't return all of them? + for (int x = 0; x < 16; ++x) { + for (int y = 0; y < 16; ++y) { + for (int z = 0; z < 16; ++z) { + blocks.add(new BlockPos( + (int) chunkX + x, + sectionY + y, + (int) chunkZ + z + )); + } + } + } + } + return; + } + + boolean[] isInFilter = getIncludedFilterIndices(lookup, palette); + if (isInFilter.length == 0) { + return; + } + + BitStorage array = ((IPalettedContainer) section.getStates()).getStorage(); + long[] longArray = array.getRaw(); + int arraySize = array.getSize(); + int bitsPerEntry = array.getBits(); + long maxEntryValue = (1L << bitsPerEntry) - 1L; + + for (int i = 0, idx = 0; i < longArray.length && idx < arraySize; ++i) { + long l = longArray[i]; + for (int offset = 0; offset <= (64 - bitsPerEntry) && idx < arraySize; offset += bitsPerEntry, ++idx) { + int value = (int) ((l >> offset) & maxEntryValue); + if (isInFilter[value]) { + //noinspection DuplicateExpressions + blocks.add(new BlockPos( + (int) chunkX + ((idx & 255) & 15), + sectionY + (idx >> 8), + (int) chunkZ + ((idx & 255) >> 4) + )); + } + } + } + } + + private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, Palette palette) { + boolean commonBlockFound = false; + BlockState[] paletteMap = getPalette(palette); + + if (paletteMap == PALETTE_REGISTRY_SENTINEL) { + return getIncludedFilterIndicesFromRegistry(lookup); + } + + int size = paletteMap.length; + + boolean[] isInFilter = new boolean[size]; + + for (int i = 0; i < size; i++) { + BlockState state = paletteMap[i]; + if (lookup.has(state)) { + isInFilter[i] = true; + commonBlockFound = true; + } else { + isInFilter[i] = false; + } + } + + if (!commonBlockFound) { + return new boolean[0]; + } + return isInFilter; + } + + private boolean[] getIncludedFilterIndicesFromRegistry(BlockOptionalMetaLookup lookup) { + boolean[] isInFilter = new boolean[Block.BLOCK_STATE_REGISTRY.size()]; + + for (BlockOptionalMeta bom : lookup.blocks()) { + for (BlockState state : bom.getAllBlockStates()) { + isInFilter[Block.BLOCK_STATE_REGISTRY.getId(state)] = true; + } + } + + return isInFilter; + } + + /** + * cheats to get the actual map of id -> blockstate from the various palette implementations + */ + private static BlockState[] getPalette(Palette palette) { + if (palette instanceof GlobalPalette) { + // copying the entire registry is not nice so we treat it as a special case + return PALETTE_REGISTRY_SENTINEL; + } else { + FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); + palette.write(buf); + int size = buf.readVarInt(); + BlockState[] states = new BlockState[size]; + for (int i = 0; i < size; i++) { + BlockState state = Block.BLOCK_STATE_REGISTRY.byId(buf.readVarInt()); + assert state != null; + states[i] = state; + } + return states; + } + } +} diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index f3d96a0db..38202e65b 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -19,136 +19,163 @@ import baritone.Baritone; import baritone.api.cache.IWorldProvider; -import baritone.api.utils.Helper; +import baritone.api.utils.IPlayerContext; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Tuple; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.storage.LevelResource; import org.apache.commons.lang3.SystemUtils; -import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; -import java.util.function.Consumer; -import net.minecraft.client.server.IntegratedServer; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.dimension.DimensionType; -import net.minecraft.world.level.storage.LevelResource; +import java.util.Optional; /** * @author Brady * @since 8/4/2018 */ -public class WorldProvider implements IWorldProvider, Helper { +public class WorldProvider implements IWorldProvider { - private static final Map worldCache = new HashMap<>(); // this is how the bots have the same cached world + private static final Map worldCache = new HashMap<>(); + private final Baritone baritone; + private final IPlayerContext ctx; private WorldData currentWorld; - private Level mcWorld; // this let's us detect a broken load/unload hook + + /** + * This lets us detect a broken load/unload hook. + * @see #detectAndHandleBrokenLoading() + */ + private Level mcWorld; + + public WorldProvider(Baritone baritone) { + this.baritone = baritone; + this.ctx = baritone.getPlayerContext(); + } @Override public final WorldData getCurrentWorld() { - detectAndHandleBrokenLoading(); + this.detectAndHandleBrokenLoading(); return this.currentWorld; } /** * Called when a new world is initialized to discover the * - * @param world The world's Registry Data + * @param world The new world */ - public final void initWorld(ResourceKey worldKey, DimensionType world) { - Path directory; - Path readme; + public final void initWorld(Level world) { + this.getSaveDirectories(world).ifPresent(dirs -> { + final Path worldDir = dirs.getA(); + final Path readmeDir = dirs.getB(); - IntegratedServer integratedServer = mc.getSingleplayerServer(); + try { + // lol wtf is this baritone folder in my minecraft save? + // good thing we have a readme + Files.createDirectories(readmeDir); + Files.write( + readmeDir.resolve("readme.txt"), + "https://github.com/cabaletta/baritone\n".getBytes(StandardCharsets.US_ASCII) + ); + } catch (IOException ignored) {} + + // We will actually store the world data in a subfolder: "DIM" + final Path worldDataDir = this.getWorldDataDirectory(worldDir, world); + try { + Files.createDirectories(worldDataDir); + } catch (IOException ignored) {} + + System.out.println("Baritone world data dir: " + worldDataDir); + synchronized (worldCache) { + this.currentWorld = worldCache.computeIfAbsent(worldDataDir, d -> new WorldData(d, world.dimensionType())); + } + this.mcWorld = ctx.world(); + }); + } + + public final void closeWorld() { + WorldData world = this.currentWorld; + this.currentWorld = null; + this.mcWorld = null; + if (world == null) { + return; + } + world.onClose(); + } + + private Path getWorldDataDirectory(Path parent, Level world) { + ResourceLocation dimId = world.dimension().location(); + int height = world.dimensionType().logicalHeight(); + return parent.resolve(dimId.getNamespace()).resolve(dimId.getPath() + "_" + height); + } + + /** + * @param world The world + * @return An {@link Optional} containing the world's baritone dir and readme dir, or {@link Optional#empty()} if + * the world isn't valid for caching. + */ + private Optional> getSaveDirectories(Level world) { + Path worldDir; + Path readmeDir; // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file - if (mc.hasSingleplayerServer()) { - directory = DimensionType.getStorageFolder(worldKey, integratedServer.getWorldPath(LevelResource.ROOT)); + if (ctx.minecraft().hasSingleplayerServer()) { + worldDir = ctx.minecraft().getSingleplayerServer().getWorldPath(LevelResource.ROOT); - // Gets the "depth" of this directory relative the the game's run directory, 2 is the location of the world - if (directory.relativize(mc.gameDirectory.toPath()).getNameCount() != 2) { + // Gets the "depth" of this directory relative to the game's run directory, 2 is the location of the world + if (worldDir.relativize(ctx.minecraft().gameDirectory.toPath()).getNameCount() != 2) { // subdirectory of the main save directory for this world - directory = directory.getParent(); + worldDir = worldDir.getParent(); } - directory = directory.resolve("baritone"); - readme = directory; + worldDir = worldDir.resolve("baritone"); + readmeDir = worldDir; } else { // Otherwise, the server must be remote... String folderName; - if (mc.getCurrentServer() != null) { - folderName = mc.isConnectedToRealms() ? "realms" : mc.getCurrentServer().ip; + final ServerData serverData = ctx.minecraft().getCurrentServer(); + if (serverData != null) { + folderName = serverData.isRealm() ? "realms" : serverData.ip; } else { //replaymod causes null currentServer and false singleplayer. System.out.println("World seems to be a replay. Not loading Baritone cache."); currentWorld = null; - mcWorld = mc.level; - return; + mcWorld = ctx.world(); + return Optional.empty(); } if (SystemUtils.IS_OS_WINDOWS) { folderName = folderName.replace(":", "_"); } - directory = Baritone.getDir().toPath().resolve(folderName); - readme = Baritone.getDir().toPath(); - } - - // lol wtf is this baritone folder in my minecraft save? - try (FileOutputStream out = new FileOutputStream(readme.resolve("readme.txt").toFile())) { - // good thing we have a readme - out.write("https://github.com/cabaletta/baritone\n".getBytes()); - } catch (IOException ignored) {} - - // We will actually store the world data in a subfolder: "DIM" - Path dir = getDimDir(worldKey, world.logicalHeight(), directory); - if (!Files.exists(dir)) { - try { - Files.createDirectories(dir); - } catch (IOException ignored) {} - } - - System.out.println("Baritone world data dir: " + dir); - synchronized (worldCache) { - this.currentWorld = worldCache.computeIfAbsent(dir, d -> new WorldData(d, world)); - } - this.mcWorld = mc.level; - } - - public final Path getDimDir(ResourceKey level, int height, Path directory) { - return directory.resolve(level.location().getNamespace()).resolve(level.location().getPath() + "_" + height); - } - - public final void closeWorld() { - WorldData world = this.currentWorld; - this.currentWorld = null; - this.mcWorld = null; - if (world == null) { - return; + // TODO: This should probably be in "baritone/servers" + worldDir = baritone.getDirectory().resolve(folderName); + // Just write the readme to the baritone directory instead of each server save in it + readmeDir = baritone.getDirectory(); } - world.onClose(); - } - public final void ifWorldLoaded(Consumer currentWorldConsumer) { - detectAndHandleBrokenLoading(); - if (this.currentWorld != null) { - currentWorldConsumer.accept(this.currentWorld); - } + return Optional.of(new Tuple<>(worldDir, readmeDir)); } - private final void detectAndHandleBrokenLoading() { - if (this.mcWorld != mc.level) { + /** + * Why does this exist instead of fixing the event? Some mods break the event. Lol. + */ + private void detectAndHandleBrokenLoading() { + if (this.mcWorld != ctx.world()) { if (this.currentWorld != null) { System.out.println("mc.world unloaded unnoticed! Unloading Baritone cache now."); closeWorld(); } - if (mc.level != null) { + if (ctx.world() != null) { System.out.println("mc.world loaded unnoticed! Loading Baritone cache now."); - initWorld(mc.level.dimension(), mc.level.dimensionType()); + initWorld(ctx.world()); } - } else if (currentWorld == null && mc.level != null && (mc.hasSingleplayerServer() || mc.getCurrentServer() != null)) { + } else if (this.currentWorld == null && ctx.world() != null && (ctx.minecraft().hasSingleplayerServer() || ctx.minecraft().getCurrentServer() != null)) { System.out.println("Retrying to load Baritone cache"); - initWorld(mc.level.dimension(), mc.level.dimensionType()); + initWorld(ctx.world()); } } } diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 2ce865a8d..35e46ba23 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -22,8 +22,6 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.IPlayerContext; -import java.util.*; -import java.util.stream.IntStream; import net.minecraft.client.multiplayer.ClientChunkCache; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; @@ -33,6 +31,9 @@ import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.PalettedContainer; +import java.util.*; +import java.util.stream.IntStream; + public enum WorldScanner implements IWorldScanner { INSTANCE; diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index c3c6648fe..943b8afa6 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -17,8 +17,8 @@ package baritone.command; +import baritone.Baritone; import baritone.api.BaritoneAPI; -import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.command.argument.ICommandArgument; import baritone.api.command.exception.CommandNotEnoughArgumentsException; @@ -27,9 +27,9 @@ import baritone.api.command.manager.ICommandManager; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.TabCompleteEvent; -import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.utils.Helper; import baritone.api.utils.SettingsUtil; +import baritone.behavior.Behavior; import baritone.command.argument.ArgConsumer; import baritone.command.argument.CommandArguments; import baritone.command.manager.CommandManager; @@ -46,14 +46,14 @@ import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; -public class ExampleBaritoneControl implements Helper, AbstractGameEventListener { +public class ExampleBaritoneControl extends Behavior implements Helper { private static final Settings settings = BaritoneAPI.getSettings(); private final ICommandManager manager; - public ExampleBaritoneControl(IBaritone baritone) { + public ExampleBaritoneControl(Baritone baritone) { + super(baritone); this.manager = baritone.getCommandManager(); - baritone.getGameEventHandler().registerEventListener(this); } @Override @@ -97,7 +97,7 @@ public boolean runCommand(String msg) { return false; } else if (msg.trim().equalsIgnoreCase("orderpizza")) { try { - ((IGuiScreen) mc.screen).openLinkInvoker(new URI("https://www.dominos.com/en/pages/order/")); + ((IGuiScreen) ctx.minecraft().screen).openLinkInvoker(new URI("https://www.dominos.com/en/pages/order/")); } catch (NullPointerException | URISyntaxException ignored) {} return false; } @@ -121,7 +121,7 @@ public boolean runCommand(String msg) { } } else if (argc.hasExactlyOne()) { for (Settings.Setting setting : settings.allSettings) { - if (SettingsUtil.javaOnlySetting(setting)) { + if (setting.isJavaOnly()) { continue; } if (setting.getName().equalsIgnoreCase(pair.getA())) { @@ -174,7 +174,7 @@ public Stream tabComplete(String msg) { .stream(); } Settings.Setting setting = settings.byLowerName.get(argc.getString().toLowerCase(Locale.US)); - if (setting != null && !SettingsUtil.javaOnlySetting(setting)) { + if (setting != null && !setting.isJavaOnly()) { if (setting.getValueClass() == Boolean.class) { TabCompleteHelper helper = new TabCompleteHelper(); if ((Boolean) setting.value) { diff --git a/src/main/java/baritone/command/argument/ArgConsumer.java b/src/main/java/baritone/command/argument/ArgConsumer.java index c4a6df002..99f30ce96 100644 --- a/src/main/java/baritone/command/argument/ArgConsumer.java +++ b/src/main/java/baritone/command/argument/ArgConsumer.java @@ -380,6 +380,8 @@ public > T getDatatypeForOrNull(D datatype) { public Stream tabCompleteDatatype(T datatype) { try { return datatype.tabComplete(this.context); + } catch (CommandException ignored) { + // NOP } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/baritone/command/defaults/BuildCommand.java b/src/main/java/baritone/command/defaults/BuildCommand.java index 622aef4f8..bb34254ae 100644 --- a/src/main/java/baritone/command/defaults/BuildCommand.java +++ b/src/main/java/baritone/command/defaults/BuildCommand.java @@ -35,10 +35,11 @@ public class BuildCommand extends Command { - private static final File schematicsDir = new File(mc.gameDirectory, "schematics"); + private final File schematicsDir; public BuildCommand(IBaritone baritone) { super(baritone, "build"); + this.schematicsDir = new File(baritone.getPlayerContext().minecraft().gameDirectory, "schematics"); } @Override diff --git a/src/main/java/baritone/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java index 5cbed55bc..b111ee1de 100644 --- a/src/main/java/baritone/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -21,12 +21,11 @@ import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; -import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.pathing.goals.GoalBlock; + import java.util.Arrays; import java.util.List; import java.util.stream.Stream; -import net.minecraft.world.entity.Entity; public class ComeCommand extends Command { @@ -37,11 +36,7 @@ public ComeCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); - Entity entity = mc.getCameraEntity(); - if (entity == null) { - throw new CommandInvalidStateException("render view entity is null"); - } - baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(entity.blockPosition())); + baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(ctx.viewerPos())); logDirect("Coming"); } diff --git a/src/main/java/baritone/command/defaults/DefaultCommands.java b/src/main/java/baritone/command/defaults/DefaultCommands.java index c2118ebe8..c810d07c1 100644 --- a/src/main/java/baritone/command/defaults/DefaultCommands.java +++ b/src/main/java/baritone/command/defaults/DefaultCommands.java @@ -66,7 +66,8 @@ public static List createAll(IBaritone baritone) { new WaypointsCommand(baritone), new CommandAlias(baritone, "sethome", "Sets your home waypoint", "waypoints save home"), new CommandAlias(baritone, "home", "Path to your home waypoint", "waypoints goto home"), - new SelCommand(baritone) + new SelCommand(baritone), + new ElytraCommand(baritone) )); ExecutionControlCommands prc = new ExecutionControlCommands(baritone); commands.add(prc.pauseCommand); diff --git a/src/main/java/baritone/command/defaults/ElytraCommand.java b/src/main/java/baritone/command/defaults/ElytraCommand.java new file mode 100644 index 000000000..3f7b6bfd6 --- /dev/null +++ b/src/main/java/baritone/command/defaults/ElytraCommand.java @@ -0,0 +1,225 @@ +/* + * 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.command.defaults; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.process.ICustomGoalProcess; +import baritone.api.process.IElytraProcess; +import net.minecraft.ChatFormatting; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.level.Level; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + +public class ElytraCommand extends Command { + + public ElytraCommand(IBaritone baritone) { + super(baritone, "elytra"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + final ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); + final IElytraProcess elytra = baritone.getElytraProcess(); + if (args.hasExactlyOne() && args.peekString().equals("supported")) { + logDirect(elytra.isLoaded() ? "yes" : unsupportedSystemMessage()); + return; + } + if (!elytra.isLoaded()) { + throw new CommandInvalidStateException(unsupportedSystemMessage()); + } + + if (!args.hasAny()) { + if (Baritone.settings().elytraTermsAccepted.value) { + if (detectOn2b2t()) { + warn2b2t(); + } + } else { + gatekeep(); + } + Goal iGoal = customGoalProcess.mostRecentGoal(); + if (iGoal == null) { + throw new CommandInvalidStateException("No goal has been set"); + } + if (ctx.world().dimension() != Level.NETHER) { + throw new CommandInvalidStateException("Only works in the nether"); + } + try { + elytra.pathTo(iGoal); + } catch (IllegalArgumentException ex) { + throw new CommandInvalidStateException(ex.getMessage()); + } + return; + } + + final String action = args.getString(); + switch (action) { + case "reset": { + elytra.resetState(); + logDirect("Reset state but still flying to same goal"); + break; + } + case "repack": { + elytra.repackChunks(); + logDirect("Queued all loaded chunks for repacking"); + break; + } + default: { + throw new CommandInvalidStateException("Invalid action"); + } + } + } + + private void warn2b2t() { + if (Baritone.settings().elytraPredictTerrain.value) { + long seed = Baritone.settings().elytraNetherSeed.value; + if (seed != NEW_2B2T_SEED && seed != OLD_2B2T_SEED) { + logDirect(Component.literal("It looks like you're on 2b2t, but elytraNetherSeed is incorrect.")); // match color + logDirect(suggest2b2tSeeds()); + } + } + } + + private Component suggest2b2tSeeds() { + MutableComponent clippy = Component.literal(""); + clippy.append("Within a few hundred blocks of spawn/axis/highways/etc, the terrain is too fragmented to be predictable. Baritone Elytra will still work, just with backtracking. "); + clippy.append("However, once you get more than a few thousand blocks out, you should try "); + MutableComponent olderSeed = Component.literal("the older seed (click here)"); + olderSeed.setStyle(olderSeed.getStyle().withUnderlined(true).withBold(true).withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal(Baritone.settings().prefix.value + "set elytraNetherSeed " + OLD_2B2T_SEED))).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "set elytraNetherSeed " + OLD_2B2T_SEED))); + clippy.append(olderSeed); + clippy.append(". Once you're further out into newer terrain generation (this includes everything up through 1.12), you should try "); + MutableComponent newerSeed = Component.literal("the newer seed (click here)"); + newerSeed.setStyle(newerSeed.getStyle().withUnderlined(true).withBold(true).withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal(Baritone.settings().prefix.value + "set elytraNetherSeed " + NEW_2B2T_SEED))).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, FORCE_COMMAND_PREFIX + "set elytraNetherSeed " + NEW_2B2T_SEED))); + clippy.append(newerSeed); + clippy.append(". Once you get into 1.19 terrain, the terrain becomes unpredictable again, due to custom non-vanilla generation, and you should set #elytraPredictTerrain to false. "); + return clippy; + } + + private void gatekeep() { + MutableComponent gatekeep = Component.literal(""); + gatekeep.append("To disable this message, enable the setting elytraTermsAccepted\n"); + gatekeep.append("Baritone Elytra is an experimental feature. It is only intended for long distance travel in the Nether using fireworks for vanilla boost. It will not work with any other mods (\"hacks\") for non-vanilla boost. "); + MutableComponent gatekeep2 = Component.literal("If you want Baritone to attempt to take off from the ground for you, you can enable the elytraAutoJump setting (not advisable on laggy servers!). "); + gatekeep2.setStyle(gatekeep2.getStyle().withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal(Baritone.settings().prefix.value + "set elytraAutoJump true")))); + gatekeep.append(gatekeep2); + MutableComponent gatekeep3 = Component.literal("If you want Baritone to go slower, enable the elytraConserveFireworks setting and/or decrease the elytraFireworkSpeed setting. "); + gatekeep3.setStyle(gatekeep3.getStyle().withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal(Baritone.settings().prefix.value + "set elytraConserveFireworks true\n" + Baritone.settings().prefix.value + "set elytraFireworkSpeed 0.6\n(the 0.6 number is just an example, tweak to your liking)")))); + gatekeep.append(gatekeep3); + MutableComponent gatekeep4 = Component.literal("Baritone Elytra "); + MutableComponent red = Component.literal("wants to know the seed"); + red.setStyle(red.getStyle().withColor(ChatFormatting.RED).withUnderlined(true).withBold(true)); + gatekeep4.append(red); + gatekeep4.append(" of the world you are in. If it doesn't have the correct seed, it will frequently backtrack. It uses the seed to generate terrain far beyond what you can see, since terrain obstacles in the Nether can be much larger than your render distance. "); + gatekeep.append(gatekeep4); + gatekeep.append("\n"); + if (detectOn2b2t()) { + MutableComponent gatekeep5 = Component.literal("It looks like you're on 2b2t. "); + gatekeep5.append(suggest2b2tSeeds()); + if (!Baritone.settings().elytraPredictTerrain.value) { + gatekeep5.append(Baritone.settings().prefix.value + "elytraPredictTerrain is currently disabled. "); + } else { + if (Baritone.settings().elytraNetherSeed.value == NEW_2B2T_SEED) { + gatekeep5.append("You are using the newer seed. "); + } else if (Baritone.settings().elytraNetherSeed.value == OLD_2B2T_SEED) { + gatekeep5.append("You are using the older seed. "); + } else { + gatekeep5.append("Defaulting to the newer seed. "); + Baritone.settings().elytraNetherSeed.value = NEW_2B2T_SEED; + } + } + gatekeep.append(gatekeep5); + } else { + if (Baritone.settings().elytraNetherSeed.value == NEW_2B2T_SEED) { + MutableComponent gatekeep5 = Component.literal("Baritone doesn't know the seed of your world. Set it with: " + Baritone.settings().prefix.value + "set elytraNetherSeed seedgoeshere\n"); + gatekeep5.append("For the time being, elytraPredictTerrain is defaulting to false since the seed is unknown."); + gatekeep.append(gatekeep5); + Baritone.settings().elytraPredictTerrain.value = false; + } else { + if (Baritone.settings().elytraPredictTerrain.value) { + MutableComponent gatekeep5 = Component.literal("Baritone Elytra is predicting terrain assuming that " + Baritone.settings().elytraNetherSeed.value + " is the correct seed. Change that with " + Baritone.settings().prefix.value + "set elytraNetherSeed seedgoeshere, or disable it with " + Baritone.settings().prefix.value + "set elytraPredictTerrain false"); + gatekeep.append(gatekeep5); + } else { + MutableComponent gatekeep5 = Component.literal("Baritone Elytra is not predicting terrain. If you don't know the seed, this is the correct thing to do. If you do know the seed, input it with " + Baritone.settings().prefix.value + "set elytraNetherSeed seedgoeshere, and then enable it with " + Baritone.settings().prefix.value + "set elytraPredictTerrain true"); + gatekeep.append(gatekeep5); + } + } + } + logDirect(gatekeep); + } + + private boolean detectOn2b2t() { + ServerData data = ctx.minecraft().getCurrentServer(); + return data != null && data.ip.toLowerCase().contains("2b2t.org"); + } + + private static final long OLD_2B2T_SEED = -4100785268875389365L; + private static final long NEW_2B2T_SEED = 146008555100680L; + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + TabCompleteHelper helper = new TabCompleteHelper(); + if (args.hasExactlyOne()) { + helper.append("reset", "repack", "supported"); + } + return helper.filterPrefix(args.getString()).stream(); + } + + @Override + public String getShortDesc() { + return "elytra time"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The elytra command tells baritone to, in the nether, automatically fly to the current goal.", + "", + "Usage:", + "> elytra - fly to the current goal", + "> elytra reset - Resets the state of the process, but will try to keep flying to the same goal.", + "> elytra repack - Queues all of the chunks in render distance to be given to the native library.", + "> elytra supported - Tells you if baritone ships a native library that is compatible with your PC." + ); + } + + private static String unsupportedSystemMessage() { + final String osArch = System.getProperty("os.arch"); + final String osName = System.getProperty("os.name"); + return String.format( + "Legacy architectures are not supported. Your CPU is %s and your operating system is %s. " + + "Supported architectures are 64 bit x86, and 64 bit ARM. Supported operating systems are Windows, " + + "Linux, and Mac", + osArch, osName + ); + } +} diff --git a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java index 504f7c146..ecb5f8376 100644 --- a/src/main/java/baritone/command/defaults/ExploreFilterCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java @@ -41,7 +41,7 @@ public ExploreFilterCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(2); - File file = args.getDatatypePost(RelativeFile.INSTANCE, mc.gameDirectory.getAbsoluteFile().getParentFile()); + File file = args.getDatatypePost(RelativeFile.INSTANCE, ctx.minecraft().gameDirectory.getAbsoluteFile().getParentFile()); boolean invert = false; if (args.hasAny()) { if (args.getString().equalsIgnoreCase("invert")) { @@ -65,7 +65,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { @Override public Stream tabComplete(String label, IArgConsumer args) throws CommandException { if (args.hasExactlyOne()) { - return RelativeFile.tabComplete(args, RelativeFile.gameDir()); + return RelativeFile.tabComplete(args, RelativeFile.gameDir(ctx.minecraft())); } return Stream.empty(); } diff --git a/src/main/java/baritone/command/defaults/GoalCommand.java b/src/main/java/baritone/command/defaults/GoalCommand.java index 40822e057..a174ecad9 100644 --- a/src/main/java/baritone/command/defaults/GoalCommand.java +++ b/src/main/java/baritone/command/defaults/GoalCommand.java @@ -51,7 +51,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { } } else { args.requireMax(3); - BetterBlockPos origin = baritone.getPlayerContext().playerFeet(); + BetterBlockPos origin = ctx.playerFeet(); Goal goal = args.getDatatypePost(RelativeGoal.INSTANCE, origin); goalProcess.setGoal(goal); logDirect(String.format("Goal: %s", goal.toString())); diff --git a/src/main/java/baritone/command/defaults/GotoCommand.java b/src/main/java/baritone/command/defaults/GotoCommand.java index 896e3f5f8..c64d7fa00 100644 --- a/src/main/java/baritone/command/defaults/GotoCommand.java +++ b/src/main/java/baritone/command/defaults/GotoCommand.java @@ -20,7 +20,6 @@ import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; -import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeGoal; @@ -46,7 +45,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { // is no need to handle the case of empty arguments. if (args.peekDatatypeOrNull(RelativeCoordinate.INSTANCE) != null) { args.requireMax(3); - BetterBlockPos origin = baritone.getPlayerContext().playerFeet(); + BetterBlockPos origin = ctx.playerFeet(); Goal goal = args.getDatatypePost(RelativeGoal.INSTANCE, origin); logDirect(String.format("Going to: %s", goal.toString())); baritone.getCustomGoalProcess().setGoalAndPath(goal); @@ -61,7 +60,8 @@ public void execute(String label, IArgConsumer args) throws CommandException { public Stream tabComplete(String label, IArgConsumer args) throws CommandException { // since it's either a goal or a block, I don't think we can tab complete properly? // so just tab complete for the block variant - return args.tabCompleteDatatype(BlockById.INSTANCE); + args.requireMax(1); + return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); } @Override diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java index 98a2e264d..eb2c22c6d 100644 --- a/src/main/java/baritone/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -17,14 +17,13 @@ package baritone.command.defaults; +import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; -import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.exception.CommandException; import baritone.api.utils.BlockOptionalMeta; -import baritone.cache.WorldScanner; import java.util.ArrayList; import java.util.Arrays; @@ -45,14 +44,18 @@ public void execute(String label, IArgConsumer args) throws CommandException { while (args.hasAny()) { boms.add(args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE)); } - WorldScanner.INSTANCE.repack(ctx); + BaritoneAPI.getProvider().getWorldScanner().repack(ctx); logDirect(String.format("Mining %s", boms.toString())); baritone.getMineProcess().mine(quantity, boms.toArray(new BlockOptionalMeta[0])); } @Override - public Stream tabComplete(String label, IArgConsumer args) { - return args.tabCompleteDatatype(BlockById.INSTANCE); + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + args.getAsOrDefault(Integer.class, 0); + while (args.has(2)) { + args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); + } + return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); } @Override diff --git a/src/main/java/baritone/command/defaults/PathCommand.java b/src/main/java/baritone/command/defaults/PathCommand.java index 182a1e5bc..b2021adf6 100644 --- a/src/main/java/baritone/command/defaults/PathCommand.java +++ b/src/main/java/baritone/command/defaults/PathCommand.java @@ -17,12 +17,12 @@ package baritone.command.defaults; +import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; import baritone.api.process.ICustomGoalProcess; -import baritone.cache.WorldScanner; import java.util.Arrays; import java.util.List; @@ -38,7 +38,7 @@ public PathCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); args.requireMax(0); - WorldScanner.INSTANCE.repack(ctx); + BaritoneAPI.getProvider().getWorldScanner().repack(ctx); customGoalProcess.path(); logDirect("Now pathing"); } diff --git a/src/main/java/baritone/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java index 39dc6ea7c..543c3387c 100644 --- a/src/main/java/baritone/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -37,8 +37,8 @@ public RenderCommand(IBaritone baritone) { public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); BetterBlockPos origin = ctx.playerFeet(); - int renderDistance = (mc.options.renderDistance().get() + 1) * 16; - mc.levelRenderer.setBlocksDirty( + int renderDistance = (ctx.minecraft().options.renderDistance().get() + 1) * 16; + ctx.minecraft().levelRenderer.setBlocksDirty( origin.x - renderDistance, 0, origin.z - renderDistance, diff --git a/src/main/java/baritone/command/defaults/RepackCommand.java b/src/main/java/baritone/command/defaults/RepackCommand.java index cafbea524..9f972561d 100644 --- a/src/main/java/baritone/command/defaults/RepackCommand.java +++ b/src/main/java/baritone/command/defaults/RepackCommand.java @@ -17,11 +17,11 @@ package baritone.command.defaults; +import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; -import baritone.cache.WorldScanner; import java.util.Arrays; import java.util.List; @@ -36,7 +36,7 @@ public RepackCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); - logDirect(String.format("Queued %d chunks for repacking", WorldScanner.INSTANCE.repack(ctx))); + logDirect(String.format("Queued %d chunks for repacking", BaritoneAPI.getProvider().getWorldScanner().repack(ctx))); } @Override diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java index c5b82932d..14d22b0b4 100644 --- a/src/main/java/baritone/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.ForAxis; import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.ForDirection; import baritone.api.command.datatypes.RelativeBlockPos; @@ -31,6 +32,8 @@ import baritone.api.event.events.RenderEvent; import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.schematic.*; +import baritone.api.schematic.mask.shape.CylinderMask; +import baritone.api.schematic.mask.shape.SphereMask; import baritone.api.selection.ISelection; import baritone.api.selection.ISelectionManager; import baritone.api.utils.BetterBlockPos; @@ -50,6 +53,7 @@ import java.util.*; import java.util.List; import java.util.function.Function; +import java.util.function.UnaryOperator; import java.util.stream.Stream; public class SelCommand extends Command { @@ -72,7 +76,7 @@ public void onRenderPass(RenderEvent event) { float lineWidth = Baritone.settings().selectionLineWidth.value; boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value; IRenderer.startLines(color, opacity, lineWidth, ignoreDepth); - IRenderer.drawAABB(event.getModelViewStack(), new AABB(pos1, pos1.offset(1, 1, 1))); + IRenderer.emitAABB(event.getModelViewStack(), new AABB(pos1, pos1.offset(1, 1, 1))); IRenderer.endLines(ignoreDepth); } }); @@ -88,7 +92,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (action == Action.POS2 && pos1 == null) { throw new CommandInvalidStateException("Set pos1 first before using pos2"); } - BetterBlockPos playerPos = mc.getCameraEntity() != null ? BetterBlockPos.from(mc.getCameraEntity().blockPosition()) : ctx.playerFeet(); + BetterBlockPos playerPos = ctx.viewerPos(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); if (action == Action.POS1) { @@ -117,11 +121,13 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect("Undid pos2"); } } - } else if (action == Action.SET || action == Action.WALLS || action == Action.SHELL || action == Action.CLEARAREA || action == Action.REPLACE) { + } else if (action.isFillAction()) { BlockOptionalMeta type = action == Action.CLEARAREA ? new BlockOptionalMeta(Blocks.AIR) : args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); - BlockOptionalMetaLookup replaces = null; + + final BlockOptionalMetaLookup replaces; // Action.REPLACE + final Direction.Axis alignment; // Action.(H)CYLINDER if (action == Action.REPLACE) { args.requireMin(1); List replacesList = new ArrayList<>(); @@ -131,8 +137,15 @@ public void execute(String label, IArgConsumer args) throws CommandException { } type = args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); replaces = new BlockOptionalMetaLookup(replacesList.toArray(new BlockOptionalMeta[0])); + alignment = null; + } else if (action == Action.CYLINDER || action == Action.HCYLINDER) { + args.requireMax(1); + alignment = args.hasAny() ? args.getDatatypeFor(ForAxis.INSTANCE) : Direction.Axis.Y; + replaces = null; } else { args.requireMax(0); + replaces = null; + alignment = null; } ISelection[] selections = manager.getSelections(); if (selections.length == 0) { @@ -151,20 +164,41 @@ public void execute(String label, IArgConsumer args) throws CommandException { for (ISelection selection : selections) { Vec3i size = selection.size(); BetterBlockPos min = selection.min(); - ISchematic schematic = new FillSchematic(size.getX(), size.getY(), size.getZ(), type); - if (action == Action.WALLS) { - schematic = new WallsSchematic(schematic); - } else if (action == Action.SHELL) { - schematic = new ShellSchematic(schematic); - } else if (action == Action.REPLACE) { - schematic = new ReplaceSchematic(schematic, replaces); - } + + // Java 8 so no switch expressions 😿 + UnaryOperator create = fill -> { + final int w = fill.widthX(); + final int h = fill.heightY(); + final int l = fill.lengthZ(); + + switch (action) { + case WALLS: + return new WallsSchematic(fill); + case SHELL: + return new ShellSchematic(fill); + case REPLACE: + return new ReplaceSchematic(fill, replaces); + case SPHERE: + return MaskSchematic.create(fill, new SphereMask(w, h, l, true).compute()); + case HSPHERE: + return MaskSchematic.create(fill, new SphereMask(w, h, l, false).compute()); + case CYLINDER: + return MaskSchematic.create(fill, new CylinderMask(w, h, l, true, alignment).compute()); + case HCYLINDER: + return MaskSchematic.create(fill, new CylinderMask(w, h, l, false, alignment).compute()); + default: + // Silent fail + return fill; + } + }; + + ISchematic schematic = create.apply(new FillSchematic(size.getX(), size.getY(), size.getZ(), type)); composite.put(schematic, min.x - origin.x, min.y - origin.y, min.z - origin.z); } baritone.getBuilderProcess().build("Fill", composite, origin); logDirect("Filling now"); } else if (action == Action.COPY) { - BetterBlockPos playerPos = mc.getCameraEntity() != null ? BetterBlockPos.from(mc.getCameraEntity().blockPosition()) : ctx.playerFeet(); + BetterBlockPos playerPos = ctx.viewerPos(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); ISelection[] selections = manager.getSelections(); @@ -205,7 +239,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { clipboardOffset = origin.subtract(pos); logDirect("Selection copied"); } else if (action == Action.PASTE) { - BetterBlockPos playerPos = mc.getCameraEntity() != null ? BetterBlockPos.from(mc.getCameraEntity().blockPosition()) : ctx.playerFeet(); + BetterBlockPos playerPos = ctx.viewerPos(); BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; args.requireMax(0); if (clipboard == null) { @@ -254,12 +288,15 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman if (args.hasAtMost(3)) { return args.tabCompleteDatatype(RelativeBlockPos.INSTANCE); } - } else if (action == Action.SET || action == Action.WALLS || action == Action.CLEARAREA || action == Action.REPLACE) { + } else if (action.isFillAction()) { if (args.hasExactlyOne() || action == Action.REPLACE) { while (args.has(2)) { args.get(); } return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); + } else if (args.hasExactly(2) && (action == Action.CYLINDER || action == Action.HCYLINDER)) { + args.get(); + return args.tabCompleteDatatype(ForAxis.INSTANCE); } } else if (action == Action.EXPAND || action == Action.CONTRACT || action == Action.SHIFT) { if (args.hasExactlyOne()) { @@ -305,6 +342,10 @@ public List getLongDesc() { "> sel set/fill/s/f [block] - Completely fill all selections with a block.", "> sel walls/w [block] - Fill in the walls of the selection with a specified block.", "> sel shell/shl [block] - The same as walls, but fills in a ceiling and floor too.", + "> sel sphere/sph [block] - Fills the selection with a sphere bounded by the sides.", + "> sel hsphere/hsph [block] - The same as sphere, but hollow.", + "> sel cylinder/cyl [block] - Fills the selection with a cylinder bounded by the sides, oriented about the given axis. (default=y)", + "> sel hcylinder/hcyl [block] - The same as cylinder, but hollow.", "> sel cleararea/ca - Basically 'set air'.", "> sel replace/r - Replaces blocks with another block.", "> sel copy/cp - Copy the selected area relative to the specified or your position.", @@ -324,6 +365,10 @@ enum Action { SET("set", "fill", "s", "f"), WALLS("walls", "w"), SHELL("shell", "shl"), + SPHERE("sphere", "sph"), + HSPHERE("hsphere", "hsph"), + CYLINDER("cylinder", "cyl"), + HCYLINDER("hcylinder", "hcyl"), CLEARAREA("cleararea", "ca"), REPLACE("replace", "r"), EXPAND("expand", "ex"), @@ -355,6 +400,18 @@ public static String[] getAllNames() { } return names.toArray(new String[0]); } + + public final boolean isFillAction() { + return this == SET + || this == WALLS + || this == SHELL + || this == SPHERE + || this == HSPHERE + || this == CYLINDER + || this == HCYLINDER + || this == CLEARAREA + || this == REPLACE; + } } enum TransformTarget { diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java index 3d70c16b9..0f4439cef 100644 --- a/src/main/java/baritone/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -22,23 +22,25 @@ import baritone.api.Settings; import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.RelativeFile; import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.utils.SettingsUtil; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; -import java.awt.*; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; import java.util.stream.Stream; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.*; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; import static baritone.api.utils.SettingsUtil.*; @@ -57,6 +59,18 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect("Settings saved"); return; } + if (Arrays.asList("load", "ld").contains(arg)) { + String file = SETTINGS_DEFAULT_NAME; + if (args.hasAny()) { + file = args.getString(); + } + // reset to defaults + SettingsUtil.modifiedSettings(Baritone.settings()).forEach(Settings.Setting::reset); + // then load from disk + SettingsUtil.readAndApply(Baritone.settings(), file); + logDirect("Settings reloaded from " + file); + return; + } boolean viewModified = Arrays.asList("m", "mod", "modified").contains(arg); boolean viewAll = Arrays.asList("all", "l", "list").contains(arg); boolean paginate = viewModified || viewAll; @@ -65,7 +79,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(1); List toPaginate = (viewModified ? SettingsUtil.modifiedSettings(Baritone.settings()) : Baritone.settings().allSettings).stream() - .filter(s -> !javaOnlySetting(s)) + .filter(s -> !s.isJavaOnly()) .filter(s -> s.getName().toLowerCase(Locale.US).contains(search.toLowerCase(Locale.US))) .sorted((s1, s2) -> String.CASE_INSENSITIVE_ORDER.compare(s1.getName(), s2.getName())) .collect(Collectors.toList()); @@ -129,7 +143,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { if (setting == null) { throw new CommandInvalidTypeException(args.consumed(), "a valid setting"); } - if (javaOnlySetting(setting)) { + if (setting.isJavaOnly()) { // ideally it would act as if the setting didn't exist // but users will see it in Settings.java or its javadoc // so at some point we have to tell them or they will see it as a bug @@ -209,6 +223,9 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman .addToggleableSettings() .filterPrefix(args.getString()) .stream(); + } else if (Arrays.asList("ld", "load").contains(arg.toLowerCase(Locale.US))) { + // settings always use the directory of the main Minecraft instance + return RelativeFile.tabComplete(args, Minecraft.getInstance().gameDirectory.toPath().resolve("baritone").toFile()); } Settings.Setting setting = Baritone.settings().byLowerName.get(arg.toLowerCase(Locale.US)); if (setting != null) { @@ -228,7 +245,7 @@ public Stream tabComplete(String label, IArgConsumer args) throws Comman return new TabCompleteHelper() .addSettings() .sortAlphabetically() - .prepend("list", "modified", "reset", "toggle", "save") + .prepend("list", "modified", "reset", "toggle", "save", "load") .filterPrefix(arg) .stream(); } @@ -255,7 +272,9 @@ public List getLongDesc() { "> set reset all - Reset ALL SETTINGS to their defaults", "> set reset - Reset a setting to its default", "> set toggle - Toggle a boolean setting", - "> set save - Save all settings (this is automatic tho)" + "> set save - Save all settings (this is automatic tho)", + "> set load - Load settings from settings.txt", + "> set load [filename] - Load settings from another file in your minecraft/baritone" ); } } diff --git a/src/main/java/baritone/command/defaults/SurfaceCommand.java b/src/main/java/baritone/command/defaults/SurfaceCommand.java index 3bbd4d738..a9c981cc3 100644 --- a/src/main/java/baritone/command/defaults/SurfaceCommand.java +++ b/src/main/java/baritone/command/defaults/SurfaceCommand.java @@ -37,13 +37,13 @@ protected SurfaceCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { - final BetterBlockPos playerPos = baritone.getPlayerContext().playerFeet(); - final int surfaceLevel = baritone.getPlayerContext().world().getSeaLevel(); - final int worldHeight = baritone.getPlayerContext().world().getHeight(); + final BetterBlockPos playerPos = ctx.playerFeet(); + final int surfaceLevel = ctx.world().getSeaLevel(); + final int worldHeight = ctx.world().getHeight(); // Ensure this command will not run if you are above the surface level and the block above you is air // As this would imply that your are already on the open surface - if (playerPos.getY() > surfaceLevel && mc.level.getBlockState(playerPos.above()).getBlock() instanceof AirBlock) { + if (playerPos.getY() > surfaceLevel && ctx.world().getBlockState(playerPos.above()).getBlock() instanceof AirBlock) { logDirect("Already at surface"); return; } @@ -53,7 +53,7 @@ public void execute(String label, IArgConsumer args) throws CommandException { for (int currentIteratedY = startingYPos; currentIteratedY < worldHeight; currentIteratedY++) { final BetterBlockPos newPos = new BetterBlockPos(playerPos.getX(), currentIteratedY, playerPos.getZ()); - if (!(mc.level.getBlockState(newPos).getBlock() instanceof AirBlock) && newPos.getY() > playerPos.getY()) { + if (!(ctx.world().getBlockState(newPos).getBlock() instanceof AirBlock) && newPos.getY() > playerPos.getY()) { Goal goal = new GoalBlock(newPos.above()); logDirect(String.format("Going to: %s", goal.toString())); baritone.getCustomGoalProcess().setGoalAndPath(goal); diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java index 56a833517..6e7f0a1e5 100644 --- a/src/main/java/baritone/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -149,7 +149,11 @@ public void execute(String label, IArgConsumer args) throws CommandException { logDirect(component); } else if (action == Action.CLEAR) { args.requireMax(1); - IWaypoint.Tag tag = IWaypoint.Tag.getByName(args.getString()); + String name = args.getString(); + IWaypoint.Tag tag = IWaypoint.Tag.getByName(name); + if (tag == null) { + throw new CommandInvalidStateException("Invalid tag, \"" + name + "\""); + } IWaypoint[] waypoints = ForWaypoints.getWaypointsByTag(this.baritone, tag); for (IWaypoint waypoint : waypoints) { ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint); diff --git a/src/main/java/baritone/command/manager/CommandManager.java b/src/main/java/baritone/command/manager/CommandManager.java index 4c33226d3..8712165f1 100644 --- a/src/main/java/baritone/command/manager/CommandManager.java +++ b/src/main/java/baritone/command/manager/CommandManager.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandUnhandledException; import baritone.api.command.exception.ICommandException; import baritone.api.command.helpers.TabCompleteHelper; @@ -153,9 +154,12 @@ private void execute() { private Stream tabComplete() { try { return this.command.tabComplete(this.label, this.args); + } catch (CommandException ignored) { + // NOP } catch (Throwable t) { - return Stream.empty(); + t.printStackTrace(); } + return Stream.empty(); } } } diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index b7853e360..d716ff849 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -23,13 +23,18 @@ import baritone.api.event.listener.IEventBus; import baritone.api.event.listener.IGameEventListener; import baritone.api.utils.Helper; +import baritone.api.utils.Pair; +import baritone.cache.CachedChunk; import baritone.cache.WorldProvider; import baritone.utils.BlockStateInterface; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; +import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + /** * @author Brady * @since 7/31/2018 @@ -59,6 +64,11 @@ public final void onTick(TickEvent event) { listeners.forEach(l -> l.onTick(event)); } + @Override + public void onPostTick(TickEvent event) { + listeners.forEach(l -> l.onPostTick(event)); + } + @Override public final void onPlayerUpdate(PlayerUpdateEvent event) { listeners.forEach(l -> l.onPlayerUpdate(event)); @@ -75,13 +85,10 @@ public void onPreTabComplete(TabCompleteEvent event) { } @Override - public final void onChunkEvent(ChunkEvent event) { + public void onChunkEvent(ChunkEvent event) { EventState state = event.getState(); ChunkEvent.Type type = event.getType(); - boolean isPostPopulate = state == EventState.POST - && (type == ChunkEvent.Type.POPULATE_FULL || type == ChunkEvent.Type.POPULATE_PARTIAL); - Level world = baritone.getPlayerContext().world(); // Whenever the server sends us to another dimension, chunks are unloaded @@ -91,7 +98,7 @@ public final void onChunkEvent(ChunkEvent event) { && type == ChunkEvent.Type.UNLOAD && world.getChunkSource().getChunk(event.getX(), event.getZ(), null, false) != null; - if (isPostPopulate || isPreUnload) { + if (event.isPostPopulate() || isPreUnload) { baritone.getWorldProvider().ifWorldLoaded(worldData -> { LevelChunk chunk = world.getChunk(event.getX(), event.getZ()); worldData.getCachedWorld().queueForPacking(chunk); @@ -102,6 +109,25 @@ public final void onChunkEvent(ChunkEvent event) { listeners.forEach(l -> l.onChunkEvent(event)); } + @Override + public void onBlockChange(BlockChangeEvent event) { + if (Baritone.settings().repackOnAnyBlockChange.value) { + final boolean keepingTrackOf = event.getBlocks().stream() + .map(Pair::second).map(BlockState::getBlock) + .anyMatch(CachedChunk.BLOCKS_TO_KEEP_TRACK_OF::contains); + + if (keepingTrackOf) { + baritone.getWorldProvider().ifWorldLoaded(worldData -> { + final Level world = baritone.getPlayerContext().world(); + ChunkPos pos = event.getChunkPos(); + worldData.getCachedWorld().queueForPacking(world.getChunk(pos.x, pos.z)); + }); + } + } + + listeners.forEach(l -> l.onBlockChange(event)); + } + @Override public final void onRenderPass(RenderEvent event) { listeners.forEach(l -> l.onRenderPass(event)); @@ -114,7 +140,7 @@ public final void onWorldEvent(WorldEvent event) { if (event.getState() == EventState.POST) { cache.closeWorld(); if (event.getWorld() != null) { - cache.initWorld(event.getWorld().dimension(), event.getWorld().dimensionType()); + cache.initWorld(event.getWorld()); } } diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index bcb81ac1d..1174bb5ee 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -29,8 +29,8 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.item.Items; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; @@ -68,11 +68,13 @@ public class CalculationContext { public final boolean allowJumpAt256; public final boolean allowParkourAscend; public final boolean assumeWalkOnWater; + public boolean allowFallIntoLava; public final int frostWalker; public final boolean allowDiagonalDescend; public final boolean allowDiagonalAscend; public final boolean allowDownward; - public final int maxFallHeightNoWater; + public int minFallHeight; + public int maxFallHeightNoWater; public final int maxFallHeightBucket; public final double waterWalkSpeed; public final double breakBlockAdditionalCost; @@ -93,8 +95,8 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.baritone = baritone; LocalPlayer player = baritone.getPlayerContext().player(); this.world = baritone.getPlayerContext().world(); - this.worldData = (WorldData) baritone.getWorldProvider().getCurrentWorld(); - this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); + this.worldData = (WorldData) baritone.getPlayerContext().worldData(); + this.bsi = new BlockStateInterface(baritone.getPlayerContext(), forUseOnAnotherThread); this.toolSet = new ToolSet(player); this.hasThrowaway = !AltoClefSettings.getInstance().isInteractionPaused() && Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && Inventory.isHotbarSlot(player.getInventory().findSlotMatchingItem(STACK_BUCKET_WATER)) && world.dimension() != Level.NETHER; @@ -107,10 +109,12 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.allowJumpAt256 = Baritone.settings().allowJumpAt256.value; this.allowParkourAscend = Baritone.settings().allowParkourAscend.value; this.assumeWalkOnWater = Baritone.settings().assumeWalkOnWater.value; + this.allowFallIntoLava = false; // Super secret internal setting for ElytraBehavior this.frostWalker = EnchantmentHelper.getEnchantmentLevel(Enchantments.FROST_WALKER, baritone.getPlayerContext().player()); this.allowDiagonalDescend = Baritone.settings().allowDiagonalDescend.value; this.allowDiagonalAscend = Baritone.settings().allowDiagonalAscend.value; this.allowDownward = Baritone.settings().allowDownward.value; + this.minFallHeight = 3; // Minimum fall height used by MovementFall this.maxFallHeightNoWater = Baritone.settings().maxFallHeightNoWater.value; this.maxFallHeightBucket = Baritone.settings().maxFallHeightBucket.value; int depth = EnchantmentHelper.getDepthStrider(player); diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index cfeca6938..739c8ee89 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -26,15 +26,9 @@ import baritone.behavior.PathingBehavior; import baritone.utils.BlockStateInterface; import java.util.*; - -import com.mojang.authlib.minecraft.client.MinecraftClient; -import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.item.FallingBlockEntity; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; public abstract class Movement implements IMovement, MovementHelper { @@ -168,7 +162,7 @@ protected boolean prepared(MovementState state) { if (!MovementHelper.canWalkThrough(ctx, blockPos)) { // can't break air, so don't try somethingInTheWay = true; MovementHelper.switchToBestToolFor(ctx, BlockStateInterface.get(ctx, blockPos)); - Optional reachable = RotationUtils.reachable(ctx.player(), blockPos, ctx.playerController().getBlockReachDistance()); + Optional reachable = RotationUtils.reachable(ctx, blockPos, ctx.playerController().getBlockReachDistance()); if (reachable.isPresent()) { Rotation rotTowardsBlock = reachable.get(); state.setTarget(new MovementState.MovementTarget(rotTowardsBlock, true)); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index ccfe3e576..7c1a89b74 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -33,7 +33,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.item.enchantment.EnchantmentHelper; -import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.piston.MovingPistonBlock; import net.minecraft.world.level.block.state.BlockState; @@ -52,7 +51,6 @@ import net.minecraft.world.phys.Vec3; import java.util.List; -import java.util.Objects; import java.util.Optional; import static baritone.pathing.movement.Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP; @@ -64,6 +62,7 @@ * @author leijurv */ public interface MovementHelper extends ActionCosts, Helper { + static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { if (bsi.get0(x, y + 1, z).getBlock() instanceof EndPortalFrameBlock){ return true; @@ -154,7 +153,7 @@ static Ternary canWalkThroughBlockState(BlockState state) { if (block instanceof AirBlock) { return YES; } - if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { + if (block instanceof BaseFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH || block == Blocks.POINTED_DRIPSTONE || block instanceof AmethystClusterBlock || block instanceof AzaleaBlock) { return NO; } if (block == Blocks.BIG_DRIPLEAF) { @@ -206,6 +205,7 @@ static Ternary canWalkThroughBlockState(BlockState state) { static boolean canWalkThroughPosition(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Block block = state.getBlock(); + if (block instanceof CarpetBlock) { return canWalkOn(bsi, x, y - 1, z); } @@ -266,6 +266,7 @@ static Ternary fullyPassableBlockState(BlockState state) { || block instanceof SnowLayerBlock || !state.getFluidState().isEmpty() || block instanceof TrapDoorBlock + || block instanceof EndPortalBlock || block instanceof SkullBlock || block instanceof ShulkerBoxBlock) { return NO; @@ -681,9 +682,9 @@ static void switchToBestToolFor(IPlayerContext ctx, BlockState b, ToolSet ts, bo static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { state.setTarget(new MovementTarget( - new Rotation(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), + RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(pos), - ctx.playerRotations()).getYaw(), ctx.player().getXRot()), + ctx.playerRotations()).withPitch(ctx.playerRotations().getPitch()), false )).setInput(Input.MOVE_FORWARD, true); } @@ -793,7 +794,8 @@ static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, double faceY = (placeAt.getY() + against1.getY() + 0.5D) * 0.5D; double faceZ = (placeAt.getZ() + against1.getZ() + 1.0D) * 0.5D; Rotation place = RotationUtils.calcRotationFromVec3d(wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.playerHead(), new Vec3(faceX, faceY, faceZ), ctx.playerRotations()); - HitResult res = RayTraceUtils.rayTraceTowards(ctx.player(), place, ctx.playerController().getBlockReachDistance(), wouldSneak); + Rotation actual = baritone.getLookBehavior().getAimProcessor().peekRotation(place); + HitResult res = RayTraceUtils.rayTraceTowards(ctx.player(), actual, ctx.playerController().getBlockReachDistance(), wouldSneak); if (res != null && res.getType() == HitResult.Type.BLOCK && ((BlockHitResult) res).getBlockPos().equals(against1) && ((BlockHitResult) res).getBlockPos().relative(((BlockHitResult) res).getDirection()).equals(placeAt)) { state.setTarget(new MovementTarget(place, true)); found = true; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 345157af5..2ddfa85cb 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -21,7 +21,6 @@ import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.Rotation; import baritone.api.utils.RotationUtils; import baritone.api.utils.input.Input; import baritone.pathing.movement.CalculationContext; @@ -31,8 +30,6 @@ import baritone.utils.BlockStateInterface; import baritone.utils.pathing.MutableMoveResult; import com.google.common.collect.ImmutableSet; -import java.util.Set; -import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -40,6 +37,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; +import java.util.Set; + public class MovementDescend extends Movement { private int numTicks = 0; @@ -154,10 +153,11 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, // this check prevents it from getting the block at y=-1 and crashing return false; } + boolean reachedMinimum = fallHeight >= context.minFallHeight; BlockState ontoBlock = context.get(destX, newY, destZ); int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; - if (MovementHelper.isWater(ontoBlock)) { + if (reachedMinimum && MovementHelper.isWater(ontoBlock)) { if (!MovementHelper.canWalkThrough(context, destX, newY, destZ, ontoBlock)) { return false; } @@ -178,6 +178,14 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, res.cost = tentativeCost;// TODO incorporate water swim up cost? return false; } + if (reachedMinimum && context.allowFallIntoLava && MovementHelper.isLava(ontoBlock)) { + // found a fall into lava + res.x = destX; + res.y = newY; + res.z = destZ; + res.cost = tentativeCost; + return false; + } if (unprotectedFallHeight <= 11 && (ontoBlock.getBlock() == Blocks.VINE || ontoBlock.getBlock() == Blocks.LADDER)) { // if fall height is greater than or equal to 11, we don't actually grab on to vines or ladders. the more you know // this effectively "resets" our falling speed @@ -195,7 +203,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, if (MovementHelper.isBottomSlab(ontoBlock)) { return false; // falling onto a half slab is really glitchy, and can cause more fall damage than we'd expect } - if (unprotectedFallHeight <= context.maxFallHeightNoWater + 1) { + if (reachedMinimum && unprotectedFallHeight <= context.maxFallHeightNoWater + 1) { // fallHeight = 4 means onto.up() is 3 blocks down, which is the max res.x = destX; res.y = newY + 1; @@ -203,7 +211,7 @@ public static boolean dynamicFallCost(CalculationContext context, int x, int y, res.cost = tentativeCost; return false; } - if (context.hasWaterBucket && unprotectedFallHeight <= context.maxFallHeightBucket + 1) { + if (reachedMinimum && context.hasWaterBucket && unprotectedFallHeight <= context.maxFallHeightBucket + 1) { res.x = destX; res.y = newY + 1;// this is the block we're falling onto, so dest is +1 res.z = destZ; @@ -234,11 +242,10 @@ public MovementState updateState(MovementState state) { if (safeMode()) { double destX = (src.getX() + 0.5) * 0.17 + (dest.getX() + 0.5) * 0.83; double destZ = (src.getZ() + 0.5) * 0.17 + (dest.getZ() + 0.5) * 0.83; - LocalPlayer player = ctx.player(); state.setTarget(new MovementState.MovementTarget( - new Rotation(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), + RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3(destX, dest.getY(), destZ), - new Rotation(player.getYRot(), player.getXRot())).getYaw(), player.getXRot()), + ctx.playerRotations()).withPitch(ctx.playerRotations().getPitch()), false )).setInput(Input.MOVE_FORWARD, true); return state; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 50ecf930c..18c105d2b 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -32,14 +32,7 @@ import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.AirBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.CarpetBlock; -import net.minecraft.world.level.block.FallingBlock; -import net.minecraft.world.level.block.FenceGateBlock; -import net.minecraft.world.level.block.LadderBlock; -import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.phys.Vec3; @@ -196,9 +189,9 @@ public MovementState updateState(MovementState state) { boolean vine = fromDown.getBlock() == Blocks.VINE; Rotation rotation = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(positionToPlace), - new Rotation(ctx.player().getYRot(), ctx.player().getXRot())); + ctx.playerRotations()); if (!ladder) { - state.setTarget(new MovementState.MovementTarget(new Rotation(ctx.player().getYRot(), rotation.getPitch()), true)); + state.setTarget(new MovementState.MovementTarget(ctx.playerRotations().withPitch(rotation.getPitch()), true)); } boolean blockIsThere = MovementHelper.canWalkOn(ctx, src) || ladder; @@ -257,7 +250,7 @@ public MovementState updateState(MovementState state) { Block fr = frState.getBlock(); // TODO: Evaluate usage of getMaterial().isReplaceable() if (!(fr instanceof AirBlock || frState.canBeReplaced())) { - RotationUtils.reachable(ctx.player(), src, ctx.playerController().getBlockReachDistance()) + RotationUtils.reachable(ctx, src, ctx.playerController().getBlockReachDistance()) .map(rot -> new MovementState.MovementTarget(rot, true)) .ifPresent(state::setTarget); state.setInput(Input.JUMP, false); // breaking is like 5x slower when you're jumping diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index a5fed58c8..0a93b4f8b 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -273,8 +273,6 @@ public MovementState updateState(MovementState state) { BlockPos into = dest.subtract(src).offset(dest); BlockState intoBelow = BlockStateInterface.get(ctx, into); BlockState intoAbove = BlockStateInterface.get(ctx, into.above()); - boolean avoidBelow = MovementHelper.avoidWalkingInto(intoBelow) || AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(into); - boolean avoidAbove = MovementHelper.avoidWalkingInto(intoAbove) || AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(into.above()); if (wasTheBridgeBlockAlwaysThere && (!MovementHelper.isLiquid(ctx, feet) || Baritone.settings().sprintInWater.value) && (!MovementHelper.avoidWalkingInto(intoBelow) || MovementHelper.isWater(intoBelow)) && !MovementHelper.avoidWalkingInto(intoAbove)) { state.setInput(Input.SPRINT, true); } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index b8f430e1d..607714bd5 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -1187,12 +1187,12 @@ private List approxPlaceable(int size) { } // BlockState itemState = ((BlockItem) stack.getItem()) - .getBlock() - .getStateForPlacement( - new BlockPlaceContext( - new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {} - ) - ); + .getBlock() + .getStateForPlacement( + new BlockPlaceContext( + new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {} + ) + ); if (itemState != null) { result.add(itemState); } else { @@ -1205,9 +1205,9 @@ private List approxPlaceable(int size) { public static final Set> orientationProps = ImmutableSet.of( - RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, + RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, StairBlock.FACING, StairBlock.HALF, StairBlock.SHAPE, - PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, + PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, TrapDoorBlock.OPEN, TrapDoorBlock.HALF ); diff --git a/src/main/java/baritone/process/CustomGoalProcess.java b/src/main/java/baritone/process/CustomGoalProcess.java index 3ee3e7b7c..d0dca9cbf 100644 --- a/src/main/java/baritone/process/CustomGoalProcess.java +++ b/src/main/java/baritone/process/CustomGoalProcess.java @@ -36,6 +36,11 @@ public final class CustomGoalProcess extends BaritoneProcessHelper implements IC */ private Goal goal; + /** + * The most recent goal. Not invalidated upon {@link #onLostControl()} + */ + private Goal mostRecentGoal; + /** * The current process state. * @@ -50,6 +55,10 @@ public CustomGoalProcess(Baritone baritone) { @Override public void setGoal(Goal goal) { this.goal = goal; + this.mostRecentGoal = goal; + if (baritone.getElytraProcess().isActive()) { + baritone.getElytraProcess().pathTo(goal); + } if (this.state == State.NONE) { this.state = State.GOAL_SET; } @@ -68,6 +77,11 @@ public Goal getGoal() { return this.goal; } + @Override + public Goal mostRecentGoal() { + return this.mostRecentGoal; + } + @Override public boolean isActive() { return this.state != State.NONE; diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java new file mode 100644 index 000000000..082e3d6b6 --- /dev/null +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -0,0 +1,569 @@ +/* + * 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.process; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.event.events.*; +import baritone.api.event.events.type.EventState; +import baritone.api.event.listener.AbstractGameEventListener; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.pathing.goals.GoalXZ; +import baritone.api.pathing.goals.GoalYLevel; +import baritone.api.pathing.movement.IMovement; +import baritone.api.pathing.path.IPathExecutor; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.IElytraProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.movements.MovementFall; +import baritone.process.elytra.ElytraBehavior; +import baritone.process.elytra.NetherPathfinderContext; +import baritone.process.elytra.NullElytraProcess; +import baritone.utils.BaritoneProcessHelper; +import baritone.utils.PathingCommandContext; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import net.minecraft.core.BlockPos; +import net.minecraft.core.NonNullList; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; + +import java.util.*; + +import static baritone.api.pathing.movement.ActionCosts.COST_INF; + +public class ElytraProcess extends BaritoneProcessHelper implements IBaritoneProcess, IElytraProcess, AbstractGameEventListener { + public State state; + private boolean goingToLandingSpot; + private BetterBlockPos landingSpot; + private boolean reachedGoal; // this basically just prevents potential notification spam + private Goal goal; + private ElytraBehavior behavior; + private boolean predictingTerrain; + + @Override + public void onLostControl() { + this.state = State.START_FLYING; // TODO: null state? + this.goingToLandingSpot = false; + this.landingSpot = null; + this.reachedGoal = false; + this.goal = null; + destroyBehaviorAsync(); + } + + private ElytraProcess(Baritone baritone) { + super(baritone); + baritone.getGameEventHandler().registerEventListener(this); + } + + public static T create(final Baritone baritone) { + return (T) (NetherPathfinderContext.isSupported() + ? new ElytraProcess(baritone) + : new NullElytraProcess(baritone)); + } + + @Override + public boolean isActive() { + return this.behavior != null; + } + + @Override + public void resetState() { + BlockPos destination = this.currentDestination(); + this.onLostControl(); + if (destination != null) { + this.pathTo(destination); + this.repackChunks(); + } + } + + private static final String AUTO_JUMP_FAILURE_MSG = "Failed to compute a walking path to a spot to jump off from. Consider starting from a higher location, near an overhang. Or, you can disable elytraAutoJump and just manually begin gliding."; + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + final long seedSetting = Baritone.settings().elytraNetherSeed.value; + if (seedSetting != this.behavior.context.getSeed()) { + logDirect("Nether seed changed, recalculating path"); + this.resetState(); + } + if (predictingTerrain != Baritone.settings().elytraPredictTerrain.value) { + logDirect("elytraPredictTerrain setting changed, recalculating path"); + predictingTerrain = Baritone.settings().elytraPredictTerrain.value; + this.resetState(); + } + + this.behavior.onTick(); + + if (calcFailed) { + onLostControl(); + logDirect(AUTO_JUMP_FAILURE_MSG); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + + boolean safetyLanding = false; + if (ctx.player().isFallFlying() && shouldLandForSafety()) { + if (Baritone.settings().elytraAllowEmergencyLand.value) { + logDirect("Emergency landing - almost out of elytra durability or fireworks"); + safetyLanding = true; + } else { + logDirect("almost out of elytra durability or fireworks, but I'm going to continue since elytraAllowEmergencyLand is false"); + } + } + if (ctx.player().isFallFlying() && this.state != State.LANDING && (this.behavior.pathManager.isComplete() || safetyLanding)) { + final BetterBlockPos last = this.behavior.pathManager.path.getLast(); + if (last != null && (ctx.player().position().distanceToSqr(last.getCenter()) < (48 * 48) || safetyLanding) && (!goingToLandingSpot || (safetyLanding && this.landingSpot == null))) { + logDirect("Path complete, picking a nearby safe landing spot..."); + BetterBlockPos landingSpot = findSafeLandingSpot(ctx.playerFeet()); + // if this fails we will just keep orbiting the last node until we run out of rockets or the user intervenes + if (landingSpot != null) { + this.pathTo0(landingSpot, true); + this.landingSpot = landingSpot; + } + this.goingToLandingSpot = true; + } + + if (last != null && ctx.player().position().distanceToSqr(last.getCenter()) < 1) { + if (Baritone.settings().notificationOnPathComplete.value && !reachedGoal) { + logNotification("Pathing complete", false); + } + if (Baritone.settings().disconnectOnArrival.value && !reachedGoal) { + // don't be active when the user logs back in + this.onLostControl(); + ctx.world().disconnect(); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + reachedGoal = true; + + // we are goingToLandingSpot and we are in the last node of the path + if (this.goingToLandingSpot) { + this.state = State.LANDING; + logDirect("Above the landing spot, landing..."); + } + } + } + + if (this.state == State.LANDING) { + final BetterBlockPos endPos = this.landingSpot != null ? this.landingSpot : behavior.pathManager.path.getLast(); + if (ctx.player().isFallFlying() && endPos != null) { + Vec3 from = ctx.player().position(); + Vec3 to = new Vec3(((double) endPos.x) + 0.5, from.y, ((double) endPos.z) + 0.5); + Rotation rotation = RotationUtils.calcRotationFromVec3d(from, to, ctx.playerRotations()); + baritone.getLookBehavior().updateTarget(new Rotation(rotation.getYaw(), 0), false); // this will be overwritten, probably, by behavior tick + + if (ctx.player().position().y < endPos.y - LANDING_COLUMN_HEIGHT) { + logDirect("bad landing spot, trying again..."); + landingSpotIsBad(endPos); + } + } + } + + if (ctx.player().isFallFlying()) { + behavior.landingMode = this.state == State.LANDING; + this.goal = null; + baritone.getInputOverrideHandler().clearAllKeys(); + behavior.tick(); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } else if (this.state == State.LANDING) { + if (ctx.playerMotion().multiply(1, 0, 1).length() > 0.001) { + logDirect("Landed, but still moving, waiting for velocity to die down... "); + baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + logDirect("Done :)"); + baritone.getInputOverrideHandler().clearAllKeys(); + this.onLostControl(); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + + if (this.state == State.FLYING || this.state == State.START_FLYING) { + this.state = ctx.player().onGround() && Baritone.settings().elytraAutoJump.value + ? State.LOCATE_JUMP + : State.START_FLYING; + } + + if (this.state == State.LOCATE_JUMP) { + if (shouldLandForSafety()) { + logDirect("Not taking off, because elytra durability or fireworks are so low that I would immediately emergency land anyway."); + onLostControl(); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + if (this.goal == null) { + this.goal = new GoalYLevel(31); + } + final IPathExecutor executor = baritone.getPathingBehavior().getCurrent(); + if (executor != null && executor.getPath().getGoal() == this.goal) { + final IMovement fall = executor.getPath().movements().stream() + .filter(movement -> movement instanceof MovementFall) + .findFirst().orElse(null); + + if (fall != null) { + final BetterBlockPos from = new BetterBlockPos( + (fall.getSrc().x + fall.getDest().x) / 2, + (fall.getSrc().y + fall.getDest().y) / 2, + (fall.getSrc().z + fall.getDest().z) / 2 + ); + behavior.pathManager.pathToDestination(from).whenComplete((result, ex) -> { + if (ex == null) { + this.state = State.GET_TO_JUMP; + return; + } + onLostControl(); + }); + this.state = State.PAUSE; + } else { + onLostControl(); + logDirect(AUTO_JUMP_FAILURE_MSG); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + } + return new PathingCommandContext(this.goal, PathingCommandType.SET_GOAL_AND_PAUSE, new WalkOffCalculationContext(baritone)); + } + + // yucky + if (this.state == State.PAUSE) { + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + + if (this.state == State.GET_TO_JUMP) { + final IPathExecutor executor = baritone.getPathingBehavior().getCurrent(); + final boolean canStartFlying = ctx.player().fallDistance > 1.0f + && !isSafeToCancel + && executor != null + && executor.getPath().movements().get(executor.getPosition()) instanceof MovementFall; + + if (canStartFlying) { + this.state = State.START_FLYING; + } else { + return new PathingCommand(null, PathingCommandType.SET_GOAL_AND_PATH); + } + } + + if (this.state == State.START_FLYING) { + if (!isSafeToCancel) { + // owned + baritone.getPathingBehavior().secretInternalSegmentCancel(); + } + baritone.getInputOverrideHandler().clearAllKeys(); + if (ctx.player().fallDistance > 1.0f) { + baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); + } + } + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + + public void landingSpotIsBad(BetterBlockPos endPos) { + badLandingSpots.add(endPos); + goingToLandingSpot = false; + this.landingSpot = null; + this.state = State.FLYING; + } + + private void destroyBehaviorAsync() { + ElytraBehavior behavior = this.behavior; + if (behavior != null) { + this.behavior = null; + Baritone.getExecutor().execute(behavior::destroy); + } + } + + @Override + public double priority() { + return 0; // higher priority than CustomGoalProcess + } + + @Override + public String displayName0() { + return "Elytra - " + this.state.description; + } + + @Override + public void repackChunks() { + if (this.behavior != null) { + this.behavior.repackChunks(); + } + } + + @Override + public BlockPos currentDestination() { + return this.behavior != null ? this.behavior.destination : null; + } + + @Override + public void pathTo(BlockPos destination) { + this.pathTo0(destination, false); + } + + private void pathTo0(BlockPos destination, boolean appendDestination) { + if (ctx.player() == null || ctx.player().level().dimension() != Level.NETHER) { + return; + } + this.onLostControl(); + this.predictingTerrain = Baritone.settings().elytraPredictTerrain.value; + this.behavior = new ElytraBehavior(this.baritone, this, destination, appendDestination); + if (ctx.world() != null) { + this.behavior.repackChunks(); + } + this.behavior.pathTo(); + } + + @Override + public void pathTo(Goal iGoal) { + final int x; + final int y; + final int z; + if (iGoal instanceof GoalXZ) { + GoalXZ goal = (GoalXZ) iGoal; + x = goal.getX(); + y = 64; + z = goal.getZ(); + } else if (iGoal instanceof GoalBlock) { + GoalBlock goal = (GoalBlock) iGoal; + x = goal.x; + y = goal.y; + z = goal.z; + } else { + throw new IllegalArgumentException("The goal must be a GoalXZ or GoalBlock"); + } + if (y <= 0 || y >= 128) { + throw new IllegalArgumentException("The y of the goal is not between 0 and 128"); + } + this.pathTo(new BlockPos(x, y, z)); + } + + private boolean shouldLandForSafety() { + ItemStack chest = ctx.player().getItemBySlot(EquipmentSlot.CHEST); + if (chest.getItem() != Items.ELYTRA || chest.getItem().getMaxDamage() - chest.getDamageValue() < Baritone.settings().elytraMinimumDurability.value) { + // elytrabehavior replaces when durability <= minimumDurability, so if durability < minimumDurability then we can reasonably assume that the elytra will soon be broken without replacement + return true; + } + + NonNullList inv = ctx.player().getInventory().items; + int qty = 0; + for (int i = 0; i < 36; i++) { + if (ElytraBehavior.isFireworks(inv.get(i))) { + qty += inv.get(i).getCount(); + } + } + if (qty <= Baritone.settings().elytraMinFireworksBeforeLanding.value) { + return true; + } + return false; + } + + @Override + public boolean isLoaded() { + return true; + } + + @Override + public boolean isSafeToCancel() { + return !this.isActive() || !(this.state == State.FLYING || this.state == State.START_FLYING); + } + + public enum State { + LOCATE_JUMP("Finding spot to jump off"), + PAUSE("Waiting for elytra path"), + GET_TO_JUMP("Walking to takeoff"), + START_FLYING("Begin flying"), + FLYING("Flying"), + LANDING("Landing"); + + public final String description; + + State(String desc) { + this.description = desc; + } + } + + @Override + public void onRenderPass(RenderEvent event) { + if (this.behavior != null) this.behavior.onRenderPass(event); + } + + @Override + public void onWorldEvent(WorldEvent event) { + if (event.getWorld() != null && event.getState() == EventState.POST) { + // Exiting the world, just destroy + destroyBehaviorAsync(); + } + } + + @Override + public void onChunkEvent(ChunkEvent event) { + if (this.behavior != null) this.behavior.onChunkEvent(event); + } + + @Override + public void onBlockChange(BlockChangeEvent event) { + if (this.behavior != null) this.behavior.onBlockChange(event); + } + + @Override + public void onReceivePacket(PacketEvent event) { + if (this.behavior != null) this.behavior.onReceivePacket(event); + } + + @Override + public void onPostTick(TickEvent event) { + IBaritoneProcess procThisTick = baritone.getPathingControlManager().mostRecentInControl().orElse(null); + if (this.behavior != null && procThisTick == this) this.behavior.onPostTick(event); + } + + /** + * Custom calculation context which makes the player fall into lava + */ + public static final class WalkOffCalculationContext extends CalculationContext { + + public WalkOffCalculationContext(IBaritone baritone) { + super(baritone, true); + this.allowFallIntoLava = true; + this.minFallHeight = 8; + this.maxFallHeightNoWater = 10000; + } + + @Override + public double costOfPlacingAt(int x, int y, int z, BlockState current) { + return COST_INF; + } + + @Override + public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { + return COST_INF; + } + + @Override + public double placeBucketCost() { + return COST_INF; + } + } + + private static boolean isInBounds(BlockPos pos) { + return pos.getY() >= 0 && pos.getY() < 128; + } + + private boolean isSafeBlock(Block block) { + return block == Blocks.NETHERRACK || block == Blocks.GRAVEL || (block == Blocks.NETHER_BRICKS && Baritone.settings().elytraAllowLandOnNetherFortress.value); + } + + private boolean isSafeBlock(BlockPos pos) { + return isSafeBlock(ctx.world().getBlockState(pos).getBlock()); + } + + private boolean isAtEdge(BlockPos pos) { + return !isSafeBlock(pos.north()) + || !isSafeBlock(pos.south()) + || !isSafeBlock(pos.east()) + || !isSafeBlock(pos.west()) + // corners + || !isSafeBlock(pos.north().west()) + || !isSafeBlock(pos.north().east()) + || !isSafeBlock(pos.south().west()) + || !isSafeBlock(pos.south().east()); + } + + private boolean isColumnAir(BlockPos landingSpot, int minHeight) { + BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(landingSpot.getX(), landingSpot.getY(), landingSpot.getZ()); + final int maxY = mut.getY() + minHeight; + for (int y = mut.getY() + 1; y <= maxY; y++) { + mut.set(mut.getX(), y, mut.getZ()); + if (!(ctx.world().getBlockState(mut).getBlock() instanceof AirBlock)) { + return false; + } + } + return true; + } + + private boolean hasAirBubble(BlockPos pos) { + final int radius = 4; // Half of the full width, rounded down, as we're counting blocks in each direction from the center + BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(); + for (int x = -radius; x <= radius; x++) { + for (int y = -radius; y <= radius; y++) { + for (int z = -radius; z <= radius; z++) { + mut.set(pos.getX() + x, pos.getY() + y, pos.getZ() + z); + if (!(ctx.world().getBlockState(mut).getBlock() instanceof AirBlock)) { + return false; + } + } + } + } + + return true; + } + + private BetterBlockPos checkLandingSpot(BlockPos pos, LongOpenHashSet checkedSpots) { + BlockPos.MutableBlockPos mut = new BlockPos.MutableBlockPos(pos.getX(), pos.getY(), pos.getZ()); + while (mut.getY() >= 0) { + if (checkedSpots.contains(mut.asLong())) { + return null; + } + checkedSpots.add(mut.asLong()); + Block block = ctx.world().getBlockState(mut).getBlock(); + + if (isSafeBlock(block)) { + if (!isAtEdge(mut)) { + return new BetterBlockPos(mut); + } + return null; + } else if (block != Blocks.AIR) { + return null; + } + mut.set(mut.getX(), mut.getY() - 1, mut.getZ()); + } + return null; // void + } + + private static final int LANDING_COLUMN_HEIGHT = 15; + private Set badLandingSpots = new HashSet<>(); + + private BetterBlockPos findSafeLandingSpot(BetterBlockPos start) { + Queue queue = new PriorityQueue<>(Comparator.comparingInt(pos -> (pos.x - start.x) * (pos.x - start.x) + (pos.z - start.z) * (pos.z - start.z)).thenComparingInt(pos -> -pos.y)); + Set visited = new HashSet<>(); + LongOpenHashSet checkedPositions = new LongOpenHashSet(); + queue.add(start); + + while (!queue.isEmpty()) { + BetterBlockPos pos = queue.poll(); + if (ctx.world().isLoaded(pos) && isInBounds(pos) && ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) { + BetterBlockPos actualLandingSpot = checkLandingSpot(pos, checkedPositions); + if (actualLandingSpot != null && isColumnAir(actualLandingSpot, LANDING_COLUMN_HEIGHT) && hasAirBubble(actualLandingSpot.above(LANDING_COLUMN_HEIGHT)) && !badLandingSpots.contains(actualLandingSpot.above(LANDING_COLUMN_HEIGHT))) { + return actualLandingSpot.above(LANDING_COLUMN_HEIGHT); + } + if (visited.add(pos.north())) queue.add(pos.north()); + if (visited.add(pos.east())) queue.add(pos.east()); + if (visited.add(pos.south())) queue.add(pos.south()); + if (visited.add(pos.west())) queue.add(pos.west()); + if (visited.add(pos.above())) queue.add(pos.above()); + if (visited.add(pos.below())) queue.add(pos.below()); + } + } + return null; + } +} diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index b9308591c..bccb021c6 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -18,8 +18,10 @@ package baritone.process; import baritone.Baritone; +import baritone.api.BaritoneAPI; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; +import baritone.api.pathing.goals.GoalGetToBlock; import baritone.api.pathing.goals.GoalComposite; import baritone.api.process.IFarmProcess; import baritone.api.process.PathingCommand; @@ -29,7 +31,6 @@ import baritone.api.utils.Rotation; import baritone.api.utils.RotationUtils; import baritone.api.utils.input.Input; -import baritone.cache.WorldScanner; import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import net.minecraft.core.BlockPos; @@ -45,6 +46,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.CactusBlock; +import net.minecraft.world.level.block.CocoaBlock; import net.minecraft.world.level.block.CropBlock; import net.minecraft.world.level.block.NetherWartBlock; import net.minecraft.world.level.block.SugarCaneBlock; @@ -52,6 +54,7 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -90,6 +93,7 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro Items.POTATO, Items.CARROT, Items.NETHER_WART, + Items.COCOA_BEANS, Blocks.SUGAR_CANE.asItem(), Blocks.CACTUS.asItem() ); @@ -123,6 +127,7 @@ private enum Harvest { PUMPKIN(Blocks.PUMPKIN, state -> true), MELON(Blocks.MELON, state -> true), NETHERWART(Blocks.NETHER_WART, state -> state.getValue(NetherWartBlock.AGE) >= 3), + COCOA(Blocks.COCOA, state -> state.getValue(CocoaBlock.AGE) >= 2), SUGARCANE(Blocks.SUGAR_CANE, null) { @Override public boolean readyToHarvest(Level world, BlockPos pos, BlockState state) { @@ -180,6 +185,10 @@ private boolean isNetherWart(ItemStack stack) { return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART); } + private boolean isCocoa(ItemStack stack) { + return !stack.isEmpty() && stack.getItem().equals(Items.COCOA_BEANS); + } + @Override public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { ArrayList scan = new ArrayList<>(); @@ -188,13 +197,14 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (Baritone.settings().replantCrops.value) { scan.add(Blocks.FARMLAND); + scan.add(Blocks.JUNGLE_LOG); if (Baritone.settings().replantNetherWart.value) { scan.add(Blocks.SOUL_SAND); } } if (Baritone.settings().mineGoalUpdateInterval.value != 0 && tickCount++ % Baritone.settings().mineGoalUpdateInterval.value == 0) { - Baritone.getExecutor().execute(() -> locations = WorldScanner.INSTANCE.scanChunkRadius(ctx, scan, 256, 10, 10)); + Baritone.getExecutor().execute(() -> locations = BaritoneAPI.getProvider().getWorldScanner().scanChunkRadius(ctx, scan, 256, 10, 10)); } if (locations == null) { return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); @@ -203,6 +213,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { List openFarmland = new ArrayList<>(); List bonemealable = new ArrayList<>(); List openSoulsand = new ArrayList<>(); + List openLog = new ArrayList<>(); for (BlockPos pos : locations) { //check if the target block is out of range. if (range != 0 && pos.distSqr(center) > range * range) { @@ -223,13 +234,22 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } continue; } + if (state.getBlock() == Blocks.JUNGLE_LOG) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (ctx.world().getBlockState(pos.relative(direction)).getBlock() instanceof AirBlock) { + openLog.add(pos); + break; + } + } + continue; + } if (readyForHarvest(ctx.world(), pos, state)) { toBreak.add(pos); continue; } if (state.getBlock() instanceof BonemealableBlock) { BonemealableBlock ig = (BonemealableBlock) state.getBlock(); - if (ig.isValidBonemealTarget(ctx.world(), pos, state, true) && ig.isBonemealSuccess(ctx.world(), ctx.world().random, pos, state)) { + if (ig.isValidBonemealTarget(ctx.world(), pos, state) && ig.isBonemealSuccess(ctx.world(), ctx.world().random, pos, state)) { bonemealable.add(pos); } } @@ -251,7 +271,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { both.addAll(openSoulsand); for (BlockPos pos : both) { boolean soulsand = openSoulsand.contains(pos); - Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, new Vec3(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); + Optional rot = RotationUtils.reachableOffset(ctx, pos, new Vec3(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, soulsand ? this::isNetherWart : this::isPlantable)) { HitResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); if (result instanceof BlockHitResult && ((BlockHitResult) result).getDirection() == Direction.UP) { @@ -263,6 +283,25 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } } } + for (BlockPos pos : openLog) { + for (Direction dir : Direction.Plane.HORIZONTAL) { + if (!(ctx.world().getBlockState(pos.relative(dir)).getBlock() instanceof AirBlock)) { + continue; + } + Vec3 faceCenter = Vec3.atCenterOf(pos).add(Vec3.atLowerCornerOf(dir.getNormal()).scale(0.5)); + Optional rot = RotationUtils.reachableOffset(ctx, pos, faceCenter, ctx.playerController().getBlockReachDistance(), false); + if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, this::isCocoa)) { + HitResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); + if (result instanceof BlockHitResult && ((BlockHitResult) result).getDirection() == dir) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + if (ctx.isLookingAt(pos)) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + } + } for (BlockPos pos : bonemealable) { Optional rot = RotationUtils.reachable(ctx, pos); if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, this::isBoneMeal)) { @@ -297,6 +336,15 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { goalz.add(new GoalBlock(pos.above())); } } + if (baritone.getInventoryBehavior().throwaway(false, this::isCocoa)) { + for (BlockPos pos : openLog) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (ctx.world().getBlockState(pos.relative(direction)).getBlock() instanceof AirBlock) { + goalz.add(new GoalGetToBlock(pos.relative(direction))); + } + } + } + } if (baritone.getInventoryBehavior().throwaway(false, this::isBoneMeal)) { for (BlockPos pos : bonemealable) { goalz.add(new GoalBlock(pos)); diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 88cc5bfa2..1352232d4 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -211,7 +211,7 @@ private Goal createGoal(BlockPos pos) { private boolean rightClick() { for (BlockPos pos : knownLocations) { - Optional reachable = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); + Optional reachable = RotationUtils.reachable(ctx, pos, ctx.playerController().getBlockReachDistance()); if (reachable.isPresent()) { baritone.getLookBehavior().updateTarget(reachable.get(), true); if (knownLocations.contains(ctx.getSelectedBlock().orElse(null))) { diff --git a/src/main/java/baritone/process/InventoryPauserProcess.java b/src/main/java/baritone/process/InventoryPauserProcess.java new file mode 100644 index 000000000..fc9f4735a --- /dev/null +++ b/src/main/java/baritone/process/InventoryPauserProcess.java @@ -0,0 +1,90 @@ +/* + * 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.process; + +import baritone.Baritone; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.utils.BaritoneProcessHelper; + +public class InventoryPauserProcess extends BaritoneProcessHelper { + + boolean pauseRequestedLastTick; + boolean safeToCancelLastTick; + int ticksOfStationary; + + public InventoryPauserProcess(Baritone baritone) { + super(baritone); + } + + @Override + public boolean isActive() { + if (ctx.player() == null || ctx.world() == null) { + return false; + } + return true; + } + + private double motion() { + return ctx.player().getDeltaMovement().multiply(1, 0, 1).length(); + } + + private boolean stationaryNow() { + return motion() < 0.00001; + } + + public boolean stationaryForInventoryMove() { + pauseRequestedLastTick = true; + return safeToCancelLastTick && ticksOfStationary > 1; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + //logDebug(pauseRequestedLastTick + " " + safeToCancelLastTick + " " + ticksOfStationary); + safeToCancelLastTick = isSafeToCancel; + if (pauseRequestedLastTick) { + pauseRequestedLastTick = false; + if (stationaryNow()) { + ticksOfStationary++; + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + ticksOfStationary = 0; + return new PathingCommand(null, PathingCommandType.DEFER); + } + + @Override + public void onLostControl() { + + } + + @Override + public String displayName0() { + return "inventory pauser"; + } + + @Override + public double priority() { + return 5.1; // slightly higher than backfill + } + + @Override + public boolean isTemporary() { + return true; + } +} diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 9a619d970..be2d10d13 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -19,6 +19,7 @@ import baritone.Baritone; import baritone.altoclef.AltoClefSettings; +import baritone.api.BaritoneAPI; import baritone.api.pathing.goals.*; import baritone.api.process.IMineProcess; import baritone.api.process.PathingCommand; @@ -322,6 +323,26 @@ public double heuristic(int x, int y, int z) { int zDiff = z - this.z; return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); } + + @Override + public boolean equals(Object o) { + return super.equals(o); + } + + @Override + public int hashCode() { + return super.hashCode() * 393857768; + } + + @Override + public String toString() { + return String.format( + "GoalThreeBlocks{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } } public List droppedItemsScan() { @@ -401,7 +422,7 @@ private boolean addNearby() { // is an x-ray and it'll get caught if (filter.has(bsi.get0(x, y, z))) { BlockPos pos = new BlockPos(x, y, z); - if ((Baritone.settings().legitMineIncludeDiagonals.value && knownOreLocations.stream().anyMatch(ore -> ore.distSqr(pos) <= 2 /* sq means this is pytha dist <= sqrt(2) */)) || RotationUtils.reachable(ctx.player(), pos, fakedBlockReachDistance).isPresent()) { + if ((Baritone.settings().legitMineIncludeDiagonals.value && knownOreLocations.stream().anyMatch(ore -> ore.distSqr(pos) <= 2 /* sq means this is pytha dist <= sqrt(2) */)) || RotationUtils.reachable(ctx, pos, fakedBlockReachDistance).isPresent()) { knownOreLocations.add(pos); } } @@ -441,6 +462,8 @@ private static List prune(CalculationContext ctx, List locs2 .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value + ctx.world.dimensionType().minY()) + .filter(pos -> pos.getY() <= Baritone.settings().maxYLevelWhileMining.value) + .filter(pos -> !blacklist.contains(pos)) .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().blockPosition()::distSqr)) @@ -469,8 +492,9 @@ public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { - if (ctx.get(pos).getBlock() instanceof EndPortalFrameBlock - || ctx.get(pos).getBlock() == Blocks.LAVA){ + if (ctx.get(pos).getBlock() instanceof EndPortalFrameBlock || + ctx.get(pos).getBlock() instanceof EndPortalBlock || + ctx.get(pos).getBlock() == Blocks.LAVA){ return true; } if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { diff --git a/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java b/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java new file mode 100644 index 000000000..7db0e2d64 --- /dev/null +++ b/src/main/java/baritone/process/elytra/BlockStateOctreeInterface.java @@ -0,0 +1,54 @@ +/* + * 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.process.elytra; + +import dev.babbaj.pathfinder.NetherPathfinder; +import dev.babbaj.pathfinder.Octree; + +/** + * @author Brady + */ +public final class BlockStateOctreeInterface { + + private final NetherPathfinderContext context; + private final long contextPtr; + transient long chunkPtr; + + // Guarantee that the first lookup will fetch the context by setting MAX_VALUE + private int prevChunkX = Integer.MAX_VALUE; + private int prevChunkZ = Integer.MAX_VALUE; + + public BlockStateOctreeInterface(final NetherPathfinderContext context) { + this.context = context; + this.contextPtr = context.context; + } + + public boolean get0(final int x, final int y, final int z) { + if ((y | (127 - y)) < 0) { + return false; + } + final int chunkX = x >> 4; + final int chunkZ = z >> 4; + if (this.chunkPtr == 0 | ((chunkX ^ this.prevChunkX) | (chunkZ ^ this.prevChunkZ)) != 0) { + this.prevChunkX = chunkX; + this.prevChunkZ = chunkZ; + this.chunkPtr = NetherPathfinder.getOrCreateChunk(this.contextPtr, chunkX, chunkZ); + } + return Octree.getBlock(this.chunkPtr, x & 0xF, y & 0x7F, z & 0xF); + } +} diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java new file mode 100644 index 000000000..8cdfd0e39 --- /dev/null +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -0,0 +1,1328 @@ +/* + * 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.process.elytra; + +import baritone.Baritone; +import baritone.api.Settings; +import baritone.api.behavior.look.IAimProcessor; +import baritone.api.behavior.look.ITickableAimProcessor; +import baritone.api.event.events.*; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.utils.*; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.MovementHelper; +import baritone.process.ElytraProcess; +import baritone.utils.BlockStateInterface; +import baritone.utils.IRenderer; +import baritone.utils.PathRenderer; +import baritone.utils.accessor.IFireworkRocketEntity; +import it.unimi.dsi.fastutil.floats.FloatArrayList; +import it.unimi.dsi.fastutil.floats.FloatIterator; +import net.minecraft.core.BlockPos; +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.projectile.FireworkRocketEntity; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.block.AirBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkSource; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +import java.awt.*; +import java.util.List; +import java.util.Queue; +import java.util.*; +import java.util.concurrent.*; +import java.util.function.UnaryOperator; + +import static baritone.utils.BaritoneMath.fastCeil; +import static baritone.utils.BaritoneMath.fastFloor; + +public final class ElytraBehavior implements Helper { + private final Baritone baritone; + private final IPlayerContext ctx; + + // Render stuff + private final List> clearLines; + private final List> blockedLines; + private List simulationLine; + private BlockPos aimPos; + private List visiblePath; + + // :sunglasses: + public final NetherPathfinderContext context; + public final PathManager pathManager; + private final ElytraProcess process; + + /** + * Remaining cool-down ticks between firework usage + */ + private int remainingFireworkTicks; + + /** + * Remaining cool-down ticks after the player's position and rotation are reset by the server + */ + private int remainingSetBackTicks; + + public boolean landingMode; + + /** + * The most recent minimum number of firework boost ticks, equivalent to {@code 10 * (1 + Flight)} + *

+ * Updated every time a firework is automatically used + */ + private int minimumBoostTicks; + + private boolean deployedFireworkLastTick; + private final int[] nextTickBoostCounter; + + private BlockStateInterface bsi; + private final BlockStateOctreeInterface boi; + public final BetterBlockPos destination; + private final boolean appendDestination; + + private final ExecutorService solverExecutor; + private Future solver; + private Solution pendingSolution; + private boolean solveNextTick; + + private long timeLastCacheCull = 0L; + + // auto swap + private int invTickCountdown = 0; + private final Queue invTransactionQueue = new LinkedList<>(); + + public ElytraBehavior(Baritone baritone, ElytraProcess process, BlockPos destination, boolean appendDestination) { + this.baritone = baritone; + this.ctx = baritone.getPlayerContext(); + this.clearLines = new CopyOnWriteArrayList<>(); + this.blockedLines = new CopyOnWriteArrayList<>(); + this.pathManager = this.new PathManager(); + this.process = process; + this.destination = new BetterBlockPos(destination); + this.appendDestination = appendDestination; + this.solverExecutor = Executors.newSingleThreadExecutor(); + this.nextTickBoostCounter = new int[2]; + + this.context = new NetherPathfinderContext(Baritone.settings().elytraNetherSeed.value); + this.boi = new BlockStateOctreeInterface(context); + } + + public final class PathManager { + + public NetherPath path; + private boolean completePath; + private boolean recalculating; + + private int maxPlayerNear; + private int ticksNearUnchanged; + private int playerNear; + + public PathManager() { + // lol imagine initializing fields normally + this.clear(); + } + + public void tick() { + // Recalculate closest path node + this.updatePlayerNear(); + final int prevMaxNear = this.maxPlayerNear; + this.maxPlayerNear = Math.max(this.maxPlayerNear, this.playerNear); + + if (this.maxPlayerNear == prevMaxNear && ctx.player().isFallFlying()) { + this.ticksNearUnchanged++; + } else { + this.ticksNearUnchanged = 0; + } + + // Obstacles are more important than an incomplete path, handle those first. + this.pathfindAroundObstacles(); + this.attemptNextSegment(); + } + + public CompletableFuture pathToDestination() { + return this.pathToDestination(ctx.playerFeet()); + } + + public CompletableFuture pathToDestination(final BlockPos from) { + final long start = System.nanoTime(); + return this.path0(from, ElytraBehavior.this.destination, UnaryOperator.identity()) + .thenRun(() -> { + final double distance = this.path.get(0).distanceTo(this.path.get(this.path.size() - 1)); + if (this.completePath) { + logVerbose(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); + } else { + logVerbose(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); + } + }) + .whenComplete((result, ex) -> { + this.recalculating = false; + if (ex != null) { + final Throwable cause = ex.getCause(); + if (cause instanceof PathCalculationException) { + logDirect("Failed to compute path to destination"); + } else { + logUnhandledException(cause); + } + } + }); + } + + public CompletableFuture pathRecalcSegment(final OptionalInt upToIncl) { + if (this.recalculating) { + throw new IllegalStateException("already recalculating"); + } + + this.recalculating = true; + final List after = upToIncl.isPresent() ? this.path.subList(upToIncl.getAsInt() + 1, this.path.size()) : Collections.emptyList(); + final boolean complete = this.completePath; + + return this.path0(ctx.playerFeet(), upToIncl.isPresent() ? this.path.get(upToIncl.getAsInt()) : ElytraBehavior.this.destination, segment -> segment.append(after.stream(), complete || (segment.isFinished() && !upToIncl.isPresent()))) + .whenComplete((result, ex) -> { + this.recalculating = false; + if (ex != null) { + final Throwable cause = ex.getCause(); + if (cause instanceof PathCalculationException) { + logDirect("Failed to recompute segment"); + } else { + logUnhandledException(cause); + } + } + }); + } + + public void pathNextSegment(final int afterIncl) { + if (this.recalculating) { + return; + } + + this.recalculating = true; + final List before = this.path.subList(0, afterIncl + 1); + final long start = System.nanoTime(); + final BetterBlockPos pathStart = this.path.get(afterIncl); + + this.path0(pathStart, ElytraBehavior.this.destination, segment -> segment.prepend(before.stream())) + .thenRun(() -> { + final int recompute = this.path.size() - before.size() - 1; + final double distance = this.path.get(0).distanceTo(this.path.get(recompute)); + + if (this.completePath) { + logVerbose(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); + } else { + logVerbose(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d)); + } + }) + .whenComplete((result, ex) -> { + this.recalculating = false; + if (ex != null) { + final Throwable cause = ex.getCause(); + if (cause instanceof PathCalculationException) { + logDirect("Failed to compute next segment"); + if (ctx.player().distanceToSqr(pathStart.getCenter()) < 16 * 16) { + logVerbose("Player is near the segment start, therefore repeating this calculation is pointless. Marking as complete"); + completePath = true; + } + } else { + logUnhandledException(cause); + } + } + }); + } + + public void clear() { + this.path = NetherPath.emptyPath(); + this.completePath = true; + this.recalculating = false; + this.playerNear = 0; + this.ticksNearUnchanged = 0; + this.maxPlayerNear = 0; + } + + private void setPath(final UnpackedSegment segment) { + List path = segment.collect(); + if (ElytraBehavior.this.appendDestination) { + BlockPos dest = ElytraBehavior.this.destination; + BlockPos last = !path.isEmpty() ? path.get(path.size() - 1) : null; + if (last != null && ElytraBehavior.this.clearView(Vec3.atLowerCornerOf(dest), Vec3.atLowerCornerOf(last), false)) { + path.add(new BetterBlockPos(dest)); + } else { + logDirect("unable to land at " + ElytraBehavior.this.destination); + process.landingSpotIsBad(new BetterBlockPos(ElytraBehavior.this.destination)); + } + } + this.path = new NetherPath(path); + this.completePath = segment.isFinished(); + this.playerNear = 0; + this.ticksNearUnchanged = 0; + this.maxPlayerNear = 0; + } + + public NetherPath getPath() { + return this.path; + } + + public int getNear() { + return this.playerNear; + } + + // mickey resigned + private CompletableFuture path0(BlockPos src, BlockPos dst, UnaryOperator operator) { + return ElytraBehavior.this.context.pathFindAsync(src, dst) + .thenApply(UnpackedSegment::from) + .thenApply(operator) + .thenAcceptAsync(this::setPath, ctx.minecraft()::execute); + } + + private void pathfindAroundObstacles() { + if (this.recalculating) { + return; + } + + int rangeStartIncl = playerNear; + int rangeEndExcl = playerNear; + while (rangeEndExcl < path.size() && context.hasChunk(new ChunkPos(path.get(rangeEndExcl)))) { + rangeEndExcl++; + } + // rangeEndExcl now represents an index either not in the path, or just outside render distance + if (rangeStartIncl >= rangeEndExcl) { + // not loaded yet? + return; + } + final BetterBlockPos rangeStart = path.get(rangeStartIncl); + if (!ElytraBehavior.this.passable(rangeStart.x, rangeStart.y, rangeStart.z, false)) { + // we're in a wall + return; // previous iterations of this function SHOULD have fixed this by now :rage_cat: + } + + if (ElytraBehavior.this.process.state != ElytraProcess.State.LANDING && this.ticksNearUnchanged > 100) { + this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1)) + .thenRun(() -> { + logVerbose("Recalculating segment, no progress in last 100 ticks"); + }); + this.ticksNearUnchanged = 0; + return; + } + + boolean canSeeAny = false; + for (int i = rangeStartIncl; i < rangeEndExcl - 1; i++) { + if (ElytraBehavior.this.clearView(ctx.playerFeetAsVec(), this.path.getVec(i), false) || ElytraBehavior.this.clearView(ctx.playerHead(), this.path.getVec(i), false)) { + canSeeAny = true; + } + if (!ElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { + // obstacle. where do we return to pathing? + // if the end of render distance is closer to goal, then that's fine, otherwise we'd be "digging our hole deeper" and making an already bad backtrack worse + OptionalInt rejoinMainPathAt; + if (this.path.get(rangeEndExcl - 1).distanceSq(ElytraBehavior.this.destination) < ctx.playerFeet().distanceSq(ElytraBehavior.this.destination)) { + rejoinMainPathAt = OptionalInt.of(rangeEndExcl - 1); // rejoin after current render distance + } else { + rejoinMainPathAt = OptionalInt.empty(); // large backtrack detected. ignore render distance, rejoin later on + } + + final BetterBlockPos blockage = this.path.get(i); + final double distance = ctx.playerFeet().distanceTo(this.path.get(rejoinMainPathAt.orElse(path.size() - 1))); + + final long start = System.nanoTime(); + this.pathRecalcSegment(rejoinMainPathAt) + .thenRun(() -> { + logVerbose(String.format("Recalculated segment around path blockage near %s %s %s (next %.1f blocks in %.4f seconds)", + SettingsUtil.maybeCensor(blockage.x), + SettingsUtil.maybeCensor(blockage.y), + SettingsUtil.maybeCensor(blockage.z), + distance, + (System.nanoTime() - start) / 1e9d + )); + }); + return; + } + } + if (!canSeeAny && rangeStartIncl < rangeEndExcl - 2 && process.state != ElytraProcess.State.GET_TO_JUMP) { + this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1)).thenRun(() -> logVerbose("Recalculated segment since no path points were visible")); + } + } + + private void attemptNextSegment() { + if (this.recalculating) { + return; + } + + final int last = this.path.size() - 1; + if (!this.completePath && ctx.world().isLoaded(this.path.get(last))) { + this.pathNextSegment(last); + } + } + + public void updatePlayerNear() { + if (this.path.isEmpty()) { + return; + } + + int index = this.playerNear; + final BetterBlockPos pos = ctx.playerFeet(); + for (int i = index; i >= Math.max(index - 1000, 0); i -= 10) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop + } + } + for (int i = index; i < Math.min(index + 1000, path.size()); i += 10) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop + } + } + for (int i = index; i >= Math.max(index - 50, 0); i--) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop + } + } + for (int i = index; i < Math.min(index + 50, path.size()); i++) { + if (path.get(i).distanceSq(pos) < path.get(index).distanceSq(pos)) { + index = i; // intentional: this changes the bound of the loop + } + } + this.playerNear = index; + } + + public boolean isComplete() { + return this.completePath; + } + } + + public void onRenderPass(RenderEvent event) { + + final Settings settings = Baritone.settings(); + if (this.visiblePath != null) { + PathRenderer.drawPath(event.getModelViewStack(), this.visiblePath, 0, Color.RED, false, 0, 0, 0.0D); + } + if (this.aimPos != null) { + PathRenderer.drawGoal(event.getModelViewStack(), ctx, new GoalBlock(this.aimPos), event.getPartialTicks(), Color.GREEN); + } + if (!this.clearLines.isEmpty() && settings.elytraRenderRaytraces.value) { + IRenderer.startLines(Color.GREEN, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + for (Pair line : this.clearLines) { + IRenderer.emitLine(event.getModelViewStack(), line.first(), line.second()); + } + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } + if (!this.blockedLines.isEmpty() && Baritone.settings().elytraRenderRaytraces.value) { + IRenderer.startLines(Color.BLUE, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + for (Pair line : this.blockedLines) { + IRenderer.emitLine(event.getModelViewStack(), line.first(), line.second()); + } + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } + if (this.simulationLine != null && Baritone.settings().elytraRenderSimulation.value) { + IRenderer.startLines(new Color(0x36CCDC), settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + final Vec3 offset = ctx.player().getPosition(event.getPartialTicks()); + for (int i = 0; i < this.simulationLine.size() - 1; i++) { + final Vec3 src = this.simulationLine.get(i).add(offset); + final Vec3 dst = this.simulationLine.get(i + 1).add(offset); + IRenderer.emitLine(event.getModelViewStack(), src, dst); + } + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } + } + + public void onChunkEvent(ChunkEvent event) { + if (event.isPostPopulate() && this.context != null) { + final LevelChunk chunk = ctx.world().getChunk(event.getX(), event.getZ()); + this.context.queueForPacking(chunk); + } + } + + public void onBlockChange(BlockChangeEvent event) { + this.context.queueBlockUpdate(event); + } + + public void onReceivePacket(PacketEvent event) { + if (event.getPacket() instanceof ClientboundPlayerPositionPacket) { + ctx.minecraft().execute(() -> { + this.remainingSetBackTicks = Baritone.settings().elytraFireworkSetbackUseDelay.value; + }); + } + } + + public void pathTo() { + if (!Baritone.settings().elytraAutoJump.value || ctx.player().isFallFlying()) { + this.pathManager.pathToDestination(); + } + } + + public void destroy() { + if (this.solver != null) { + this.solver.cancel(true); + } + this.solverExecutor.shutdown(); + try { + while (!this.solverExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) {} + } catch (InterruptedException e) { + e.printStackTrace(); + } + this.context.destroy(); + } + + public void repackChunks() { + ChunkSource chunkProvider = ctx.world().getChunkSource(); + + BetterBlockPos playerPos = ctx.playerFeet(); + + int playerChunkX = playerPos.getX() >> 4; + int playerChunkZ = playerPos.getZ() >> 4; + + int minX = playerChunkX - 40; + int minZ = playerChunkZ - 40; + int maxX = playerChunkX + 40; + int maxZ = playerChunkZ + 40; + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + LevelChunk chunk = chunkProvider.getChunk(x, z, false); + + if (chunk != null && !chunk.isEmpty()) { + this.context.queueForPacking(chunk); + } + } + } + } + + public void onTick() { + synchronized (this.context.cullingLock) { + this.onTick0(); + } + final long now = System.currentTimeMillis(); + if ((now - this.timeLastCacheCull) / 1000 > Baritone.settings().elytraTimeBetweenCacheCullSecs.value) { + this.context.queueCacheCulling(ctx.player().chunkPosition().x, ctx.player().chunkPosition().z, Baritone.settings().elytraCacheCullDistance.value, this.boi); + this.timeLastCacheCull = now; + } + } + + private void onTick0() { + // Fetch the previous solution, regardless of if it's going to be used + this.pendingSolution = null; + if (this.solver != null) { + try { + this.pendingSolution = this.solver.get(); + } catch (Exception ignored) { + // it doesn't matter if get() fails since the solution can just be recalculated synchronously + } finally { + this.solver = null; + } + } + + tickInventoryTransactions(); + + // Certified mojang employee incident + if (this.remainingFireworkTicks > 0) { + this.remainingFireworkTicks--; + } + if (this.remainingSetBackTicks > 0) { + this.remainingSetBackTicks--; + } + if (!this.getAttachedFirework().isPresent()) { + this.minimumBoostTicks = 0; + } + + // Reset rendered elements + this.clearLines.clear(); + this.blockedLines.clear(); + this.visiblePath = null; + this.simulationLine = null; + this.aimPos = null; + + final List path = this.pathManager.getPath(); + if (path.isEmpty()) { + return; + } else if (this.destination == null) { + this.pathManager.clear(); + return; + } + + // ctx AND context???? :DDD + this.bsi = new BlockStateInterface(ctx); + this.pathManager.tick(); + + final int playerNear = this.pathManager.getNear(); + this.visiblePath = path.subList( + Math.max(playerNear - 30, 0), + Math.min(playerNear + 100, path.size()) + ); + } + + /** + * Called by {@link baritone.process.ElytraProcess#onTick(boolean, boolean)} when the process is in control and the player is flying + */ + public void tick() { + if (this.pathManager.getPath().isEmpty()) { + return; + } + + trySwapElytra(); + + if (ctx.player().horizontalCollision) { + logVerbose("hbonk"); + } + if (ctx.player().verticalCollision) { + logVerbose("vbonk"); + } + + final SolverContext solverContext = this.new SolverContext(false); + this.solveNextTick = true; + + // If there's no previously calculated solution to use, or the context used at the end of last tick doesn't match this tick + final Solution solution; + if (this.pendingSolution == null || !this.pendingSolution.context.equals(solverContext)) { + solution = this.solveAngles(solverContext); + } else { + solution = this.pendingSolution; + } + + if (this.deployedFireworkLastTick) { + this.nextTickBoostCounter[solverContext.boost.isBoosted() ? 1 : 0]++; + this.deployedFireworkLastTick = false; + } + + final boolean inLava = ctx.player().isInLava(); + if (inLava) { + baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); + } + + if (solution == null) { + logVerbose("no solution"); + return; + } + + baritone.getLookBehavior().updateTarget(solution.rotation, false); + + if (!solution.solvedPitch) { + logVerbose("no pitch solution, probably gonna crash in a few ticks LOL!!!"); + return; + } else { + this.aimPos = new BetterBlockPos(solution.goingTo.x, solution.goingTo.y, solution.goingTo.z); + } + + this.tickUseFireworks( + solution.context.start, + solution.goingTo, + solution.context.boost.isBoosted(), + solution.forceUseFirework || inLava + ); + } + + public void onPostTick(TickEvent event) { + if (event.getType() == TickEvent.Type.IN && this.solveNextTick) { + // We're at the end of the tick, the player's position likely updated and the closest path node could've + // changed. Updating it now will avoid unnecessary recalculation on the main thread. + this.pathManager.updatePlayerNear(); + + final SolverContext context = this.new SolverContext(true); + this.solver = this.solverExecutor.submit(() -> this.solveAngles(context)); + this.solveNextTick = false; + } + } + + private Solution solveAngles(final SolverContext context) { + final NetherPath path = context.path; + final int playerNear = landingMode ? path.size() - 1 : context.playerNear; + final Vec3 start = context.start; + Solution solution = null; + + for (int relaxation = 0; relaxation < 3; relaxation++) { // try for a strict solution first, then relax more and more (if we're in a corner or near some blocks, it will have to relax its constraints a bit) + int[] heights = context.boost.isBoosted() ? new int[]{20, 10, 5, 0} : new int[]{0}; // attempt to gain height, if we can, so as not to waste the boost + int lookahead = relaxation == 0 ? 2 : 3; // ideally this would be expressed as a distance in blocks, rather than a number of voxel steps + //int minStep = Math.max(0, playerNear - relaxation); + int minStep = playerNear; + + for (int i = Math.min(playerNear + 20, path.size() - 1); i >= minStep; i--) { + final List> candidates = new ArrayList<>(); + for (int dy : heights) { + if (relaxation == 0 || i == minStep) { + // no interp + candidates.add(new Pair<>(path.getVec(i), dy)); + } else if (relaxation == 1) { + final double[] interps = new double[]{1.0, 0.75, 0.5, 0.25}; + for (double interp : interps) { + final Vec3 dest = interp == 1.0 + ? path.getVec(i) + : path.getVec(i).scale(interp).add(path.getVec(i - 1).scale(1.0 - interp)); + candidates.add(new Pair<>(dest, dy)); + } + } else { + // Create a point along the segment every block + final Vec3 delta = path.getVec(i).subtract(path.getVec(i - 1)); + final int steps = fastFloor(delta.length()); + final Vec3 step = delta.normalize(); + Vec3 stepped = path.getVec(i); + for (int interp = 0; interp < steps; interp++) { + candidates.add(new Pair<>(stepped, dy)); + stepped = stepped.subtract(step); + } + } + } + + for (final Pair candidate : candidates) { + final Integer augment = candidate.second(); + Vec3 dest = candidate.first().add(0, augment, 0); + if (landingMode) { + dest = dest.add(0.5, 0.5, 0.5); + } + + if (augment != 0) { + if (i + lookahead >= path.size()) { + continue; + } + if (start.distanceTo(dest) < 40) { + if (!this.clearView(dest, path.getVec(i + lookahead).add(0, augment, 0), false) + || !this.clearView(dest, path.getVec(i + lookahead), false)) { + // aka: don't go upwards if doing so would prevent us from being able to see the next position **OR** the modified next position + continue; + } + } else { + // but if it's far away, allow gaining altitude if we could lose it again by the time we get there + if (!this.clearView(dest, path.getVec(i), false)) { + continue; + } + } + } + + final double minAvoidance = Baritone.settings().elytraMinimumAvoidance.value; + final Double growth = relaxation == 2 ? null + : relaxation == 0 ? 2 * minAvoidance : minAvoidance; + + if (this.isHitboxClear(context, dest, growth)) { + // Yaw is trivial, just calculate the rotation required to face the destination + final float yaw = RotationUtils.calcRotationFromVec3d(start, dest, ctx.playerRotations()).getYaw(); + + final Pair pitch = this.solvePitch(context, dest, relaxation); + if (pitch == null) { + solution = new Solution(context, new Rotation(yaw, ctx.playerRotations().getPitch()), null, false, false); + continue; + } + + // A solution was found with yaw AND pitch, so just immediately return it. + return new Solution(context, new Rotation(yaw, pitch.first()), dest, true, pitch.second()); + } + } + } + } + return solution; + } + + private void tickUseFireworks(final Vec3 start, final Vec3 goingTo, final boolean isBoosted, final boolean forceUseFirework) { + if (this.remainingSetBackTicks > 0) { + logDebug("waiting for elytraFireworkSetbackUseDelay: " + this.remainingSetBackTicks); + return; + } + if (this.landingMode) { + return; + } + final boolean useOnDescend = !Baritone.settings().elytraConserveFireworks.value || ctx.player().position().y < goingTo.y + 5; + final double currentSpeed = new Vec3( + ctx.player().getDeltaMovement().x, + // ignore y component if we are BOTH below where we want to be AND descending + ctx.player().position().y < goingTo.y ? Math.max(0, ctx.player().getDeltaMovement().y) : ctx.player().getDeltaMovement().y, + ctx.player().getDeltaMovement().z + ).lengthSqr(); + + final double elytraFireworkSpeed = Baritone.settings().elytraFireworkSpeed.value; + if (this.remainingFireworkTicks <= 0 && (forceUseFirework || (!isBoosted + && useOnDescend + && (ctx.player().position().y < goingTo.y - 5 || start.distanceTo(new Vec3(goingTo.x + 0.5, ctx.player().position().y, goingTo.z + 0.5)) > 5) // UGH!!!!!!! + && currentSpeed < elytraFireworkSpeed * elytraFireworkSpeed)) + ) { + // Prioritize boosting fireworks over regular ones + // TODO: Take the minimum boost time into account? + if (!baritone.getInventoryBehavior().throwaway(true, ElytraBehavior::isBoostingFireworks) && + !baritone.getInventoryBehavior().throwaway(true, ElytraBehavior::isFireworks)) { + logDirect("no fireworks"); + return; + } + logVerbose("attempting to use firework" + (forceUseFirework ? " (forced)" : "")); + ctx.playerController().processRightClick(ctx.player(), ctx.world(), InteractionHand.MAIN_HAND); + this.minimumBoostTicks = 10 * (1 + getFireworkBoost(ctx.player().getItemInHand(InteractionHand.MAIN_HAND)).orElse(0)); + this.remainingFireworkTicks = 10; + this.deployedFireworkLastTick = true; + } + } + + private final class SolverContext { + + public final NetherPath path; + public final int playerNear; + public final Vec3 start; + public final Vec3 motion; + public final AABB boundingBox; + public final boolean ignoreLava; + public final FireworkBoost boost; + public final IAimProcessor aimProcessor; + + /** + * Creates a new SolverContext using the current state of the path, player, and firework boost at the time of + * construction. + * + * @param async Whether the computation is being done asynchronously at the end of a game tick. + */ + public SolverContext(boolean async) { + this.path = ElytraBehavior.this.pathManager.getPath(); + this.playerNear = ElytraBehavior.this.pathManager.getNear(); + + this.start = ctx.playerFeetAsVec(); + this.motion = ctx.playerMotion(); + this.boundingBox = ctx.player().getBoundingBox(); + this.ignoreLava = ctx.player().isInLava(); + + final Integer fireworkTicksExisted; + if (async && ElytraBehavior.this.deployedFireworkLastTick) { + final int[] counter = ElytraBehavior.this.nextTickBoostCounter; + fireworkTicksExisted = counter[1] > counter[0] ? 0 : null; + } else { + fireworkTicksExisted = ElytraBehavior.this.getAttachedFirework().map(e -> e.tickCount).orElse(null); + } + this.boost = new FireworkBoost(fireworkTicksExisted, ElytraBehavior.this.minimumBoostTicks); + + ITickableAimProcessor aim = ElytraBehavior.this.baritone.getLookBehavior().getAimProcessor().fork(); + if (async) { + // async computation is done at the end of a tick, advance by 1 to prepare for the next tick + aim.advance(1); + } + this.aimProcessor = aim; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || o.getClass() != SolverContext.class) { + return false; + } + + SolverContext other = (SolverContext) o; + return this.path == other.path // Contents aren't modified, just compare by reference + && this.playerNear == other.playerNear + && Objects.equals(this.start, other.start) + && Objects.equals(this.motion, other.motion) + && Objects.equals(this.boundingBox, other.boundingBox) + && this.ignoreLava == other.ignoreLava + && Objects.equals(this.boost, other.boost); + } + } + + private static final class FireworkBoost { + + private final Integer fireworkTicksExisted; + private final int minimumBoostTicks; + private final int maximumBoostTicks; + + /** + * @param fireworkTicksExisted The ticksExisted of the attached firework entity, or {@code null} if no entity. + * @param minimumBoostTicks The minimum number of boost ticks that the attached firework entity, if any, will + * provide. + */ + public FireworkBoost(final Integer fireworkTicksExisted, final int minimumBoostTicks) { + this.fireworkTicksExisted = fireworkTicksExisted; + + // this.lifetime = 10 * i + this.rand.nextInt(6) + this.rand.nextInt(7); + this.minimumBoostTicks = minimumBoostTicks; + this.maximumBoostTicks = minimumBoostTicks + 11; + } + + public boolean isBoosted() { + return this.fireworkTicksExisted != null; + } + + /** + * @return The guaranteed number of remaining ticks with boost + */ + public int getGuaranteedBoostTicks() { + return this.isBoosted() ? Math.max(0, this.minimumBoostTicks - this.fireworkTicksExisted) : 0; + } + + /** + * @return The maximum number of remaining ticks with boost + */ + public int getMaximumBoostTicks() { + return this.isBoosted() ? Math.max(0, this.maximumBoostTicks - this.fireworkTicksExisted) : 0; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || o.getClass() != FireworkBoost.class) { + return false; + } + + FireworkBoost other = (FireworkBoost) o; + if (!this.isBoosted() && !other.isBoosted()) { + return true; + } + + return Objects.equals(this.fireworkTicksExisted, other.fireworkTicksExisted) + && this.minimumBoostTicks == other.minimumBoostTicks + && this.maximumBoostTicks == other.maximumBoostTicks; + } + } + + private static final class PitchResult { + + public final float pitch; + public final double dot; + public final List steps; + + public PitchResult(float pitch, double dot, List steps) { + this.pitch = pitch; + this.dot = dot; + this.steps = steps; + } + } + + private static final class Solution { + + public final SolverContext context; + public final Rotation rotation; + public final Vec3 goingTo; + public final boolean solvedPitch; + public final boolean forceUseFirework; + + public Solution(SolverContext context, Rotation rotation, Vec3 goingTo, boolean solvedPitch, boolean forceUseFirework) { + this.context = context; + this.rotation = rotation; + this.goingTo = goingTo; + this.solvedPitch = solvedPitch; + this.forceUseFirework = forceUseFirework; + } + } + + public static boolean isFireworks(final ItemStack itemStack) { + if (itemStack.getItem() != Items.FIREWORK_ROCKET) { + return false; + } + // If it has NBT data, make sure it won't cause us to explode. + final CompoundTag compound = itemStack.getTagElement("Fireworks"); + return compound == null || !compound.getAllKeys().contains("Explosions"); + } + + private static boolean isBoostingFireworks(final ItemStack itemStack) { + return getFireworkBoost(itemStack).isPresent(); + } + + private static OptionalInt getFireworkBoost(final ItemStack itemStack) { + if (isFireworks(itemStack)) { + final CompoundTag compound = itemStack.getTagElement("Fireworks"); + if (compound != null && compound.getAllKeys().contains("Flight")) { + return OptionalInt.of(compound.getByte("Flight")); + } + } + return OptionalInt.empty(); + } + + private Optional getAttachedFirework() { + return ctx.entitiesStream() + .filter(x -> x instanceof FireworkRocketEntity) + .filter(x -> Objects.equals(((IFireworkRocketEntity) x).getBoostedEntity(), ctx.player())) + .map(x -> (FireworkRocketEntity) x) + .findFirst(); + } + + private boolean isHitboxClear(final SolverContext context, final Vec3 dest, final Double growAmount) { + final Vec3 start = context.start; + final boolean ignoreLava = context.ignoreLava; + + if (!this.clearView(start, dest, ignoreLava)) { + return false; + } + if (growAmount == null) { + return true; + } + + final AABB bb = context.boundingBox.inflate(growAmount); + + final double ox = dest.x - start.x; + final double oy = dest.y - start.y; + final double oz = dest.z - start.z; + + final double[] src = new double[]{ + bb.minX, bb.minY, bb.minZ, + bb.minX, bb.minY, bb.maxZ, + bb.minX, bb.maxY, bb.minZ, + bb.minX, bb.maxY, bb.maxZ, + bb.maxX, bb.minY, bb.minZ, + bb.maxX, bb.minY, bb.maxZ, + bb.maxX, bb.maxY, bb.minZ, + bb.maxX, bb.maxY, bb.maxZ, + }; + final double[] dst = new double[]{ + bb.minX + ox, bb.minY + oy, bb.minZ + oz, + bb.minX + ox, bb.minY + oy, bb.maxZ + oz, + bb.minX + ox, bb.maxY + oy, bb.minZ + oz, + bb.minX + ox, bb.maxY + oy, bb.maxZ + oz, + bb.maxX + ox, bb.minY + oy, bb.minZ + oz, + bb.maxX + ox, bb.minY + oy, bb.maxZ + oz, + bb.maxX + ox, bb.maxY + oy, bb.minZ + oz, + bb.maxX + ox, bb.maxY + oy, bb.maxZ + oz, + }; + + // Use non-batching method without early failure + if (Baritone.settings().elytraRenderHitboxRaytraces.value) { + boolean clear = true; + for (int i = 0; i < 8; i++) { + final Vec3 s = new Vec3(src[i * 3], src[i * 3 + 1], src[i * 3 + 2]); + final Vec3 d = new Vec3(dst[i * 3], dst[i * 3 + 1], dst[i * 3 + 2]); + // Don't forward ignoreLava since the batch call doesn't care about it + if (!this.clearView(s, d, false)) { + clear = false; + } + } + return clear; + } + + return this.context.raytrace(8, src, dst, NetherPathfinderContext.Visibility.ALL); + } + + public boolean clearView(Vec3 start, Vec3 dest, boolean ignoreLava) { + final boolean clear; + if (!ignoreLava) { + // if start == dest then the cpp raytracer dies + clear = start.equals(dest) || this.context.raytrace(start, dest); + } else { + clear = ctx.world().clip(new ClipContext(start, dest, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, ctx.player())).getType() == HitResult.Type.MISS; + } + + if (Baritone.settings().elytraRenderRaytraces.value) { + (clear ? this.clearLines : this.blockedLines).add(new Pair<>(start, dest)); + } + return clear; + } + + private static FloatArrayList pitchesToSolveFor(final float goodPitch, final boolean desperate) { + final float minPitch = desperate ? -90 : Math.max(goodPitch - Baritone.settings().elytraPitchRange.value, -89); + final float maxPitch = desperate ? 90 : Math.min(goodPitch + Baritone.settings().elytraPitchRange.value, 89); + + final FloatArrayList pitchValues = new FloatArrayList(fastCeil(maxPitch - minPitch) + 1); + for (float pitch = goodPitch; pitch <= maxPitch; pitch++) { + pitchValues.add(pitch); + } + for (float pitch = goodPitch - 1; pitch >= minPitch; pitch--) { + pitchValues.add(pitch); + } + + return pitchValues; + } + + @FunctionalInterface + private interface IntTriFunction { + T apply(int first, int second, int third); + } + + private static final class IntTriple { + public final int first; + public final int second; + public final int third; + + public IntTriple(int first, int second, int third) { + this.first = first; + this.second = second; + this.third = third; + } + } + + private Pair solvePitch(final SolverContext context, final Vec3 goal, final int relaxation) { + final boolean desperate = relaxation == 2; + final float goodPitch = RotationUtils.calcRotationFromVec3d(context.start, goal, ctx.playerRotations()).getPitch(); + final FloatArrayList pitches = pitchesToSolveFor(goodPitch, desperate); + + final IntTriFunction solve = (ticks, ticksBoosted, ticksBoostDelay) -> + this.solvePitch(context, goal, relaxation, pitches.iterator(), ticks, ticksBoosted, ticksBoostDelay); + + final List tests = new ArrayList<>(); + + if (context.boost.isBoosted()) { + final int guaranteed = context.boost.getGuaranteedBoostTicks(); + if (guaranteed == 0) { + // uncertain when boost will run out + final int lookahead = Math.max(4, 10 - context.boost.getMaximumBoostTicks()); + tests.add(new IntTriple(lookahead, 1, 0)); + } else if (guaranteed <= 5) { + // boost will run out within 5 ticks + tests.add(new IntTriple(guaranteed + 5, guaranteed, 0)); + } else { + // there's plenty of guaranteed boost + tests.add(new IntTriple(guaranteed + 1, guaranteed, 0)); + } + } + + // Standard test, assume (not) boosted for entire duration + final int ticks = desperate ? 3 : context.boost.isBoosted() ? Math.max(5, context.boost.getGuaranteedBoostTicks()) : Baritone.settings().elytraSimulationTicks.value; + tests.add(new IntTriple(ticks, context.boost.isBoosted() ? ticks : 0, 0)); + + final Optional result = tests.stream() + .map(i -> solve.apply(i.first, i.second, i.third)) + .filter(Objects::nonNull) + .findFirst(); + if (result.isPresent()) { + return new Pair<>(result.get().pitch, false); + } + + // If we used a firework would we be able to get out of the current situation??? perhaps + if (desperate) { + final List testsBoost = new ArrayList<>(); + testsBoost.add(new IntTriple(ticks, 10, 3)); + testsBoost.add(new IntTriple(ticks, 10, 2)); + testsBoost.add(new IntTriple(ticks, 10, 1)); + + final Optional resultBoost = testsBoost.stream() + .map(i -> solve.apply(i.first, i.second, i.third)) + .filter(Objects::nonNull) + .findFirst(); + if (resultBoost.isPresent()) { + return new Pair<>(resultBoost.get().pitch, true); + } + } + + return null; + } + + private PitchResult solvePitch(final SolverContext context, final Vec3 goal, final int relaxation, + final FloatIterator pitches, final int ticks, final int ticksBoosted, + final int ticksBoostDelay) { + // we are at a certain velocity, but we have a target velocity + // what pitch would get us closest to our target velocity? + // yaw is easy so we only care about pitch + + final Vec3 goalDelta = goal.subtract(context.start); + final Vec3 goalDirection = goalDelta.normalize(); + + final Deque bestResults = new ArrayDeque<>(); + + while (pitches.hasNext()) { + final float pitch = pitches.nextFloat(); + final List displacement = this.simulate( + context, + goalDelta, + pitch, + ticks, + ticksBoosted, + ticksBoostDelay + ); + if (displacement == null) { + continue; + } + final Vec3 last = displacement.get(displacement.size() - 1); + double goodness = goalDirection.dot(last.normalize()); + if (landingMode) { + goodness = -goalDelta.subtract(last).length(); + } + final PitchResult bestSoFar = bestResults.peek(); + if (bestSoFar == null || goodness > bestSoFar.dot) { + bestResults.push(new PitchResult(pitch, goodness, displacement)); + } + } + + outer: + for (final PitchResult result : bestResults) { + if (relaxation < 2) { + // Ensure that the goal is visible along the entire simulated path + // Reverse order iteration since the last position is most likely to fail + for (int i = result.steps.size() - 1; i >= 1; i--) { + if (!clearView(context.start.add(result.steps.get(i)), goal, context.ignoreLava)) { + continue outer; + } + } + } else { + // Ensure that the goal is visible from the final position + if (!clearView(context.start.add(result.steps.get(result.steps.size() - 1)), goal, context.ignoreLava)) { + continue; + } + } + + this.simulationLine = result.steps; + return result; + } + return null; + } + + private List simulate(final SolverContext context, final Vec3 goalDelta, final float pitch, final int ticks, + final int ticksBoosted, final int ticksBoostDelay) { + final ITickableAimProcessor aimProcessor = context.aimProcessor.fork(); + Vec3 delta = goalDelta; + Vec3 motion = context.motion; + AABB hitbox = context.boundingBox; + List displacement = new ArrayList<>(ticks + 1); + displacement.add(Vec3.ZERO); + int remainingTicksBoosted = ticksBoosted; + + for (int i = 0; i < ticks; i++) { + final double cx = hitbox.minX + (hitbox.maxX - hitbox.minX) * 0.5D; + final double cz = hitbox.minZ + (hitbox.maxZ - hitbox.minZ) * 0.5D; + if (delta.lengthSqr() < 1) { + break; + } + final Rotation rotation = aimProcessor.nextRotation( + RotationUtils.calcRotationFromVec3d(Vec3.ZERO, delta, ctx.playerRotations()).withPitch(pitch) + ); + final Vec3 lookDirection = RotationUtils.calcLookDirectionFromRotation(rotation); + + motion = step(motion, lookDirection, rotation.getPitch()); + delta = delta.subtract(motion); + + // Collision box while the player is in motion, with additional padding for safety + final AABB inMotion = hitbox.inflate(motion.x, motion.y, motion.z).inflate(0.01); + + int xmin = fastFloor(inMotion.minX); + int xmax = fastCeil(inMotion.maxX); + int ymin = fastFloor(inMotion.minY); + int ymax = fastCeil(inMotion.maxY); + int zmin = fastFloor(inMotion.minZ); + int zmax = fastCeil(inMotion.maxZ); + for (int x = xmin; x < xmax; x++) { + for (int y = ymin; y < ymax; y++) { + for (int z = zmin; z < zmax; z++) { + if (!this.passable(x, y, z, context.ignoreLava)) { + return null; + } + } + } + } + + hitbox = hitbox.move(motion); + displacement.add(displacement.get(displacement.size() - 1).add(motion)); + + if (i >= ticksBoostDelay && remainingTicksBoosted-- > 0) { + // See EntityFireworkRocket + motion = motion.add( + lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motion.x) * 0.5, + lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motion.y) * 0.5, + lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motion.z) * 0.5 + ); + } + } + + return displacement; + } + + private static Vec3 step(final Vec3 motion, final Vec3 lookDirection, final float pitch) { + double motionX = motion.x; + double motionY = motion.y; + double motionZ = motion.z; + + float pitchRadians = pitch * RotationUtils.DEG_TO_RAD_F; + double pitchBase2 = Math.sqrt(lookDirection.x * lookDirection.x + lookDirection.z * lookDirection.z); + double flatMotion = Math.sqrt(motionX * motionX + motionZ * motionZ); + double thisIsAlwaysOne = lookDirection.length(); + float pitchBase3 = Mth.cos(pitchRadians); + //System.out.println("always the same lol " + -pitchBase + " " + pitchBase3); + //System.out.println("always the same lol " + Math.abs(pitchBase3) + " " + pitchBase2); + //System.out.println("always 1 lol " + thisIsAlwaysOne); + pitchBase3 = (float) ((double) pitchBase3 * (double) pitchBase3 * Math.min(1, thisIsAlwaysOne / 0.4)); + motionY += -0.08 + (double) pitchBase3 * 0.06; + if (motionY < 0 && pitchBase2 > 0) { + double speedModifier = motionY * -0.1 * (double) pitchBase3; + motionY += speedModifier; + motionX += lookDirection.x * speedModifier / pitchBase2; + motionZ += lookDirection.z * speedModifier / pitchBase2; + } + if (pitchRadians < 0) { // if you are looking down (below level) + double anotherSpeedModifier = flatMotion * (double) (-Mth.sin(pitchRadians)) * 0.04; + motionY += anotherSpeedModifier * 3.2; + motionX -= lookDirection.x * anotherSpeedModifier / pitchBase2; + motionZ -= lookDirection.z * anotherSpeedModifier / pitchBase2; + } + if (pitchBase2 > 0) { // this is always true unless you are looking literally straight up (let's just say the bot will never do that) + motionX += (lookDirection.x / pitchBase2 * flatMotion - motionX) * 0.1; + motionZ += (lookDirection.z / pitchBase2 * flatMotion - motionZ) * 0.1; + } + motionX *= 0.99f; + motionY *= 0.98f; + motionZ *= 0.99f; + //System.out.println(motionX + " " + motionY + " " + motionZ); + + return new Vec3(motionX, motionY, motionZ); + } + + private boolean passable(int x, int y, int z, boolean ignoreLava) { + if (ignoreLava) { + final BlockState state = this.bsi.get0(x, y, z); + return state.getBlock() instanceof AirBlock || MovementHelper.isLava(state); + } else { + return !this.boi.get0(x, y, z); + } + } + + private void tickInventoryTransactions() { + if (invTickCountdown <= 0) { + Runnable r = invTransactionQueue.poll(); + if (r != null) { + r.run(); + invTickCountdown = Baritone.settings().ticksBetweenInventoryMoves.value; + } + } + if (invTickCountdown > 0) invTickCountdown--; + } + + private void queueWindowClick(int windowId, int slotId, int button, ClickType type) { + invTransactionQueue.add(() -> ctx.playerController().windowClick(windowId, slotId, button, type, ctx.player())); + } + + private int findGoodElytra() { + NonNullList invy = ctx.player().getInventory().items; + for (int i = 0; i < invy.size(); i++) { + ItemStack slot = invy.get(i); + if (slot.getItem() == Items.ELYTRA && (slot.getItem().getMaxDamage() - slot.getDamageValue()) > Baritone.settings().elytraMinimumDurability.value) { + return i; + } + } + return -1; + } + + private void trySwapElytra() { + if (!Baritone.settings().elytraAutoSwap.value || !invTransactionQueue.isEmpty()) { + return; + } + + ItemStack chest = ctx.player().getItemBySlot(EquipmentSlot.CHEST); + if (chest.getItem() != Items.ELYTRA + || chest.getItem().getMaxDamage() - chest.getDamageValue() > Baritone.settings().elytraMinimumDurability.value) { + return; + } + + int goodElytraSlot = findGoodElytra(); + if (goodElytraSlot != -1) { + final int CHEST_SLOT = 6; + final int slotId = goodElytraSlot < 9 ? goodElytraSlot + 36 : goodElytraSlot; + queueWindowClick(ctx.player().inventoryMenu.containerId, slotId, 0, ClickType.PICKUP); + queueWindowClick(ctx.player().inventoryMenu.containerId, CHEST_SLOT, 0, ClickType.PICKUP); + queueWindowClick(ctx.player().inventoryMenu.containerId, slotId, 0, ClickType.PICKUP); + } + } + + void logVerbose(String message) { + if (Baritone.settings().elytraChatSpam.value) { + logDebug(message); + } + } +} diff --git a/src/main/java/baritone/process/elytra/NetherPath.java b/src/main/java/baritone/process/elytra/NetherPath.java new file mode 100644 index 000000000..73531de4d --- /dev/null +++ b/src/main/java/baritone/process/elytra/NetherPath.java @@ -0,0 +1,65 @@ +/* + * 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.process.elytra; + +import baritone.api.utils.BetterBlockPos; +import net.minecraft.world.phys.Vec3; + +import java.util.AbstractList; +import java.util.Collections; +import java.util.List; + +/** + * @author Brady + */ +public final class NetherPath extends AbstractList { + + private static final NetherPath EMPTY_PATH = new NetherPath(Collections.emptyList()); + + private final List backing; + + NetherPath(List backing) { + this.backing = backing; + } + + @Override + public BetterBlockPos get(int index) { + return this.backing.get(index); + } + + @Override + public int size() { + return this.backing.size(); + } + + /** + * @return The last position in the path, or {@code null} if empty + */ + public BetterBlockPos getLast() { + return this.isEmpty() ? null : this.backing.get(this.backing.size() - 1); + } + + public Vec3 getVec(int index) { + final BetterBlockPos pos = this.get(index); + return new Vec3(pos.x, pos.y, pos.z); + } + + public static NetherPath emptyPath() { + return EMPTY_PATH; + } +} diff --git a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java new file mode 100644 index 000000000..aa9f4965a --- /dev/null +++ b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java @@ -0,0 +1,238 @@ +/* + * 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.process.elytra; + +import baritone.Baritone; +import baritone.api.event.events.BlockChangeEvent; +import baritone.utils.accessor.IPalettedContainer; +import dev.babbaj.pathfinder.NetherPathfinder; +import dev.babbaj.pathfinder.Octree; +import dev.babbaj.pathfinder.PathSegment; +import net.minecraft.core.BlockPos; +import net.minecraft.util.BitStorage; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.chunk.PalettedContainer; +import net.minecraft.world.phys.Vec3; + +import java.lang.ref.SoftReference; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +/** + * @author Brady + */ +public final class NetherPathfinderContext { + + private static final BlockState AIR_BLOCK_STATE = Blocks.AIR.defaultBlockState(); + // This lock must be held while there are active pointers to chunks in java, + // but we just hold it for the entire tick so we don't have to think much about it. + public final Object cullingLock = new Object(); + + // Visible for access in BlockStateOctreeInterface + final long context; + private final long seed; + private final ExecutorService executor; + + public NetherPathfinderContext(long seed) { + this.context = NetherPathfinder.newContext(seed); + this.seed = seed; + this.executor = Executors.newSingleThreadExecutor(); + } + + public boolean hasChunk(ChunkPos pos) { + return NetherPathfinder.hasChunkFromJava(this.context, pos.x, pos.z); + } + + public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks, BlockStateOctreeInterface boi) { + this.executor.execute(() -> { + synchronized (this.cullingLock) { + boi.chunkPtr = 0L; + NetherPathfinder.cullFarChunks(this.context, chunkX, chunkZ, maxDistanceBlocks); + } + }); + } + + public void queueForPacking(final LevelChunk chunkIn) { + final SoftReference ref = new SoftReference<>(chunkIn); + this.executor.execute(() -> { + // TODO: Prioritize packing recent chunks and/or ones that the path goes through, + // and prune the oldest chunks per chunkPackerQueueMaxSize + final LevelChunk chunk = ref.get(); + if (chunk != null) { + long ptr = NetherPathfinder.getOrCreateChunk(this.context, chunk.getPos().x, chunk.getPos().z); + writeChunkData(chunk, ptr); + } + }); + } + + public void queueBlockUpdate(BlockChangeEvent event) { + this.executor.execute(() -> { + ChunkPos chunkPos = event.getChunkPos(); + long ptr = NetherPathfinder.getChunkPointer(this.context, chunkPos.x, chunkPos.z); + if (ptr == 0) return; // this shouldn't ever happen + event.getBlocks().forEach(pair -> { + BlockPos pos = pair.first(); + if (pos.getY() >= 128) return; + boolean isSolid = pair.second() != AIR_BLOCK_STATE; + Octree.setBlock(ptr, pos.getX() & 15, pos.getY(), pos.getZ() & 15, isSolid); + }); + }); + } + + public CompletableFuture pathFindAsync(final BlockPos src, final BlockPos dst) { + return CompletableFuture.supplyAsync(() -> { + final PathSegment segment = NetherPathfinder.pathFind( + this.context, + src.getX(), src.getY(), src.getZ(), + dst.getX(), dst.getY(), dst.getZ(), + true, + false, + 10000, + !Baritone.settings().elytraPredictTerrain.value + ); + if (segment == null) { + throw new PathCalculationException("Path calculation failed"); + } + return segment; + }, this.executor); + } + + /** + * Performs a raytrace from the given start position to the given end position, returning {@code true} if there is + * visibility between the two points. + * + * @param startX The start X coordinate + * @param startY The start Y coordinate + * @param startZ The start Z coordinate + * @param endX The end X coordinate + * @param endY The end Y coordinate + * @param endZ The end Z coordinate + * @return {@code true} if there is visibility between the points + */ + public boolean raytrace(final double startX, final double startY, final double startZ, + final double endX, final double endY, final double endZ) { + return NetherPathfinder.isVisible(this.context, NetherPathfinder.CACHE_MISS_SOLID, startX, startY, startZ, endX, endY, endZ); + } + + /** + * Performs a raytrace from the given start position to the given end position, returning {@code true} if there is + * visibility between the two points. + * + * @param start The starting point + * @param end The ending point + * @return {@code true} if there is visibility between the points + */ + public boolean raytrace(final Vec3 start, final Vec3 end) { + return NetherPathfinder.isVisible(this.context, NetherPathfinder.CACHE_MISS_SOLID, start.x, start.y, start.z, end.x, end.y, end.z); + } + + public boolean raytrace(final int count, final double[] src, final double[] dst, final int visibility) { + switch (visibility) { + case Visibility.ALL: + return NetherPathfinder.isVisibleMulti(this.context, NetherPathfinder.CACHE_MISS_SOLID, count, src, dst, false) == -1; + case Visibility.NONE: + return NetherPathfinder.isVisibleMulti(this.context, NetherPathfinder.CACHE_MISS_SOLID, count, src, dst, true) == -1; + case Visibility.ANY: + return NetherPathfinder.isVisibleMulti(this.context, NetherPathfinder.CACHE_MISS_SOLID, count, src, dst, true) != -1; + default: + throw new IllegalArgumentException("lol"); + } + } + + public void raytrace(final int count, final double[] src, final double[] dst, final boolean[] hitsOut, final double[] hitPosOut) { + NetherPathfinder.raytrace(this.context, NetherPathfinder.CACHE_MISS_SOLID, count, src, dst, hitsOut, hitPosOut); + } + + public void cancel() { + NetherPathfinder.cancel(this.context); + } + + public void destroy() { + this.cancel(); + // Ignore anything that was queued up, just shutdown the executor + this.executor.shutdownNow(); + + try { + while (!this.executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) {} + } catch (InterruptedException e) { + e.printStackTrace(); + } + + NetherPathfinder.freeContext(this.context); + } + + public long getSeed() { + return this.seed; + } + + private static void writeChunkData(LevelChunk chunk, long ptr) { + try { + LevelChunkSection[] chunkInternalStorageArray = chunk.getSections(); + for (int y0 = 0; y0 < 8; y0++) { + final LevelChunkSection extendedblockstorage = chunkInternalStorageArray[y0]; + if (extendedblockstorage == null) { + continue; + } + final PalettedContainer bsc = extendedblockstorage.getStates(); + final int airId = ((IPalettedContainer) bsc).getPalette().idFor(AIR_BLOCK_STATE); + // pasted from FasterWorldScanner + final BitStorage array = ((IPalettedContainer) bsc).getStorage(); + if (array == null) continue; + final long[] longArray = array.getRaw(); + final int arraySize = array.getSize(); + int bitsPerEntry = array.getBits(); + long maxEntryValue = (1L << bitsPerEntry) - 1L; + + final int yReal = y0 << 4; + for (int i = 0, idx = 0; i < longArray.length && idx < arraySize; ++i) { + long l = longArray[i]; + for (int offset = 0; offset <= (64 - bitsPerEntry) && idx < arraySize; offset += bitsPerEntry, ++idx) { + int value = (int) ((l >> offset) & maxEntryValue); + int x = (idx & 15); + int y = yReal + (idx >> 8); + int z = ((idx >> 4) & 15); + Octree.setBlock(ptr, x, y, z, value != airId); + } + } + } + Octree.setIsFromJava(ptr); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + public static final class Visibility { + + public static final int ALL = 0; + public static final int NONE = 1; + public static final int ANY = 2; + + private Visibility() {} + } + + public static boolean isSupported() { + return NetherPathfinder.isThisSystemSupported(); + } +} diff --git a/src/main/java/baritone/process/elytra/NullElytraProcess.java b/src/main/java/baritone/process/elytra/NullElytraProcess.java new file mode 100644 index 000000000..07d5fde0e --- /dev/null +++ b/src/main/java/baritone/process/elytra/NullElytraProcess.java @@ -0,0 +1,90 @@ +/* + * 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.process.elytra; + +import baritone.Baritone; +import baritone.api.pathing.goals.Goal; +import baritone.api.process.IElytraProcess; +import baritone.api.process.PathingCommand; +import baritone.utils.BaritoneProcessHelper; +import net.minecraft.core.BlockPos; + +/** + * @author Brady + */ +public final class NullElytraProcess extends BaritoneProcessHelper implements IElytraProcess { + + public NullElytraProcess(Baritone baritone) { + super(baritone); + } + + @Override + public void repackChunks() { + throw new UnsupportedOperationException("Called repackChunks() on NullElytraBehavior"); + } + + @Override + public BlockPos currentDestination() { + return null; + } + + @Override + public void pathTo(BlockPos destination) { + throw new UnsupportedOperationException("Called pathTo() on NullElytraBehavior"); + } + + @Override + public void pathTo(Goal destination) { + throw new UnsupportedOperationException("Called pathTo() on NullElytraBehavior"); + } + + @Override + public void resetState() { + + } + + @Override + public boolean isActive() { + return false; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + throw new UnsupportedOperationException("Called onTick on NullElytraProcess"); + } + + @Override + public void onLostControl() { + + } + + @Override + public String displayName0() { + return "NullElytraProcess"; + } + + @Override + public boolean isLoaded() { + return false; + } + + @Override + public boolean isSafeToCancel() { + return true; + } +} diff --git a/src/main/java/baritone/process/elytra/PathCalculationException.java b/src/main/java/baritone/process/elytra/PathCalculationException.java new file mode 100644 index 000000000..682ddd296 --- /dev/null +++ b/src/main/java/baritone/process/elytra/PathCalculationException.java @@ -0,0 +1,29 @@ +/* + * 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.process.elytra; + +/** + * @author Brady + */ +public final class PathCalculationException extends RuntimeException { + + public PathCalculationException(final String message) { + super(message); + } +} diff --git a/src/main/java/baritone/process/elytra/UnpackedSegment.java b/src/main/java/baritone/process/elytra/UnpackedSegment.java new file mode 100644 index 000000000..e50ab3235 --- /dev/null +++ b/src/main/java/baritone/process/elytra/UnpackedSegment.java @@ -0,0 +1,83 @@ +/* + * 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.process.elytra; + +import baritone.api.utils.BetterBlockPos; +import dev.babbaj.pathfinder.PathSegment; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author Brady + */ +public final class UnpackedSegment { + + private final Stream path; + private final boolean finished; + + public UnpackedSegment(Stream path, boolean finished) { + this.path = path; + this.finished = finished; + } + + public UnpackedSegment append(Stream other, boolean otherFinished) { + // The new segment is only finished if the one getting added on is + return new UnpackedSegment(Stream.concat(this.path, other), otherFinished); + } + + public UnpackedSegment prepend(Stream other) { + return new UnpackedSegment(Stream.concat(other, this.path), this.finished); + } + + public List collect() { + final List path = this.path.collect(Collectors.toList()); + + // Remove backtracks + final Map positionFirstSeen = new HashMap<>(); + for (int i = 0; i < path.size(); i++) { + BetterBlockPos pos = path.get(i); + if (positionFirstSeen.containsKey(pos)) { + int j = positionFirstSeen.get(pos); + while (i > j) { + path.remove(i); + i--; + } + } else { + positionFirstSeen.put(pos, i); + } + } + + return path; + } + + public boolean isFinished() { + return this.finished; + } + + public static UnpackedSegment from(final PathSegment segment) { + return new UnpackedSegment( + Arrays.stream(segment.packed).mapToObj(BetterBlockPos::deserializeFromLong), + segment.finished + ); + } +} diff --git a/src/main/java/baritone/selection/SelectionRenderer.java b/src/main/java/baritone/selection/SelectionRenderer.java index 90c4bca10..94cbb2d90 100644 --- a/src/main/java/baritone/selection/SelectionRenderer.java +++ b/src/main/java/baritone/selection/SelectionRenderer.java @@ -24,27 +24,27 @@ public static void renderSelections(PoseStack stack, ISelection[] selections) { boolean ignoreDepth = settings.renderSelectionIgnoreDepth.value; float lineWidth = settings.selectionLineWidth.value; - if (!settings.renderSelection.value) { + if (!settings.renderSelection.value || selections.length == 0) { return; } IRenderer.startLines(settings.colorSelection.value, opacity, lineWidth, ignoreDepth); for (ISelection selection : selections) { - IRenderer.drawAABB(stack, selection.aabb(), SELECTION_BOX_EXPANSION); + IRenderer.emitAABB(stack, selection.aabb(), SELECTION_BOX_EXPANSION); } if (settings.renderSelectionCorners.value) { IRenderer.glColor(settings.colorSelectionPos1.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(stack, new AABB(selection.pos1(), selection.pos1().offset(1, 1, 1))); + IRenderer.emitAABB(stack, new AABB(selection.pos1(), selection.pos1().offset(1, 1, 1))); } IRenderer.glColor(settings.colorSelectionPos2.value, opacity); for (ISelection selection : selections) { - IRenderer.drawAABB(stack, new AABB(selection.pos2(), selection.pos2().offset(1, 1, 1))); + IRenderer.emitAABB(stack, new AABB(selection.pos2(), selection.pos2().offset(1, 1, 1))); } } diff --git a/src/main/java/baritone/utils/BaritoneMath.java b/src/main/java/baritone/utils/BaritoneMath.java new file mode 100644 index 000000000..be546f248 --- /dev/null +++ b/src/main/java/baritone/utils/BaritoneMath.java @@ -0,0 +1,37 @@ +/* + * 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; + +/** + * @author Brady + */ +public final class BaritoneMath { + + private static final double FLOOR_DOUBLE_D = 1_073_741_824.0; + private static final int FLOOR_DOUBLE_I = 1_073_741_824; + + private BaritoneMath() {} + + public static int fastFloor(final double v) { + return (int) (v + FLOOR_DOUBLE_D) - FLOOR_DOUBLE_I; + } + + public static int fastCeil(final double v) { + return FLOOR_DOUBLE_I - (int) (FLOOR_DOUBLE_D - v); + } +} diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index 5edc1439b..2d209c721 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -17,7 +17,6 @@ package baritone.utils; -import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; import net.minecraft.world.InteractionHand; import net.minecraft.world.phys.BlockHitResult; @@ -27,7 +26,7 @@ * @author Brady * @since 8/25/2018 */ -public final class BlockBreakHelper implements Helper { +public final class BlockBreakHelper { private final IPlayerContext ctx; private boolean didBreakLastTick; diff --git a/src/main/java/baritone/utils/BlockPlaceHelper.java b/src/main/java/baritone/utils/BlockPlaceHelper.java index fb8cba397..93b0c4408 100644 --- a/src/main/java/baritone/utils/BlockPlaceHelper.java +++ b/src/main/java/baritone/utils/BlockPlaceHelper.java @@ -18,14 +18,13 @@ package baritone.utils; import baritone.Baritone; -import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; -public class BlockPlaceHelper implements Helper { +public class BlockPlaceHelper { private final IPlayerContext ctx; private int rightClickTimer; diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 3f018ff89..095694db9 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -23,7 +23,6 @@ import baritone.cache.WorldData; import baritone.utils.accessor.IClientChunkProvider; import baritone.utils.pathing.BetterWorldBorder; -import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientChunkCache; import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockGetter; @@ -61,20 +60,16 @@ public BlockStateInterface(IPlayerContext ctx) { } public BlockStateInterface(IPlayerContext ctx, boolean copyLoadedChunks) { - this(ctx.world(), (WorldData) ctx.worldData(), copyLoadedChunks); - } - - public BlockStateInterface(Level world, WorldData worldData, boolean copyLoadedChunks) { - this.world = world; + this.world = ctx.world(); this.worldBorder = new BetterWorldBorder(world.getWorldBorder()); - this.worldData = worldData; + this.worldData = (WorldData) ctx.worldData(); if (copyLoadedChunks) { this.provider = ((IClientChunkProvider) world.getChunkSource()).createThreadSafeCopy(); } else { this.provider = (ClientChunkCache) world.getChunkSource(); } this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.value; - if (!Minecraft.getInstance().isSameThread()) { + if (!ctx.minecraft().isSameThread()) { throw new IllegalStateException(); } this.isPassableBlockPos = new BlockPos.MutableBlockPos(); @@ -137,7 +132,7 @@ public BlockState get0(int x, int y, int z) { // Mickey resigned prevCached = region; cached = region; } - BlockState type = cached.getBlock(x & 511, y, z & 511); + BlockState type = cached.getBlock(x & 511, y + world.dimensionType().minY(), z & 511); if (type == null) { return AIR; } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index 6b3f8f520..113450d1c 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -22,7 +22,6 @@ import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Helper; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.GuiGraphics; @@ -46,7 +45,6 @@ import java.util.Collections; import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; -import static org.lwjgl.opengl.GL11.*; public class GuiClick extends Screen implements Helper { @@ -130,21 +128,11 @@ public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) { // drawSingleSelectionBox WHEN? PathRenderer.drawManySelectionBoxes(modelViewStack, e, Collections.singletonList(currentMouseOver), Color.CYAN); if (clickStart != null && !clickStart.equals(currentMouseOver)) { - RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); - //TODO: check - IRenderer.glColor(Color.RED, 0.4F); - RenderSystem.lineWidth(Baritone.settings().pathRenderLineWidthPixels.value); - RenderSystem.setShader(GameRenderer::getPositionColorShader); - RenderSystem.depthMask(false); - RenderSystem.disableDepthTest(); + IRenderer.startLines(Color.RED, Baritone.settings().pathRenderLineWidthPixels.value, true); BetterBlockPos a = new BetterBlockPos(currentMouseOver); BetterBlockPos b = new BetterBlockPos(clickStart); - IRenderer.drawAABB(modelViewStack, new AABB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); - RenderSystem.enableDepthTest(); - - RenderSystem.depthMask(true); - RenderSystem.disableBlend(); + IRenderer.emitAABB(modelViewStack, new AABB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); + IRenderer.endLines(true); } } } diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index cfd38a393..7f6065b72 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -19,26 +19,29 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; -import baritone.api.utils.Helper; import baritone.utils.accessor.IEntityRenderManager; +import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import java.awt.*; - +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.joml.Matrix3f; import org.joml.Matrix4f; -import static org.lwjgl.opengl.GL11.*; +import java.awt.*; public interface IRenderer { Tesselator tessellator = Tesselator.getInstance(); BufferBuilder buffer = tessellator.getBuilder(); - IEntityRenderManager renderManager = (IEntityRenderManager) Helper.mc.getEntityRenderDispatcher(); + IEntityRenderManager renderManager = (IEntityRenderManager) Minecraft.getInstance().getEntityRenderDispatcher(); + TextureManager textureManager = Minecraft.getInstance().getTextureManager(); Settings settings = BaritoneAPI.getSettings(); - float[] color = new float[] {1.0F, 1.0F, 1.0F, 255.0F}; + float[] color = new float[]{1.0F, 1.0F, 1.0F, 255.0F}; static void glColor(Color color, float alpha) { float[] colorComponents = color.getColorComponents(null); @@ -51,14 +54,22 @@ static void glColor(Color color, float alpha) { static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { RenderSystem.enableBlend(); RenderSystem.setShader(GameRenderer::getPositionColorShader); - RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + RenderSystem.blendFuncSeparate( + GlStateManager.SourceFactor.SRC_ALPHA, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, + GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ZERO + ); glColor(color, alpha); RenderSystem.lineWidth(lineWidth); RenderSystem.depthMask(false); + RenderSystem.disableCull(); if (ignoreDepth) { RenderSystem.disableDepthTest(); } + RenderSystem.setShader(GameRenderer::getRendertypeLinesShader); + buffer.begin(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL); } static void startLines(Color color, float lineWidth, boolean ignoreDepth) { @@ -66,51 +77,80 @@ static void startLines(Color color, float lineWidth, boolean ignoreDepth) { } static void endLines(boolean ignoredDepth) { + tessellator.end(); if (ignoredDepth) { RenderSystem.enableDepthTest(); } + RenderSystem.enableCull(); RenderSystem.depthMask(true); RenderSystem.disableBlend(); } - static void drawAABB(PoseStack stack, AABB aabb) { + static void emitLine(PoseStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { + final double dx = x2 - x1; + final double dy = y2 - y1; + final double dz = z2 - z1; + + final double invMag = 1.0 / Math.sqrt(dx * dx + dy * dy + dz * dz); + final float nx = (float) (dx * invMag); + final float ny = (float) (dy * invMag); + final float nz = (float) (dz * invMag); + + emitLine(stack, x1, y1, z1, x2, y2, z2, nx, ny, nz); + } + + static void emitLine(PoseStack stack, + double x1, double y1, double z1, + double x2, double y2, double z2, + double nx, double ny, double nz) { + emitLine(stack, + (float) x1, (float) y1, (float) z1, + (float) x2, (float) y2, (float) z2, + (float) nx, (float) ny, (float) nz + ); + } + + static void emitLine(PoseStack stack, + float x1, float y1, float z1, + float x2, float y2, float z2, + float nx, float ny, float nz) { + final Matrix4f matrix4f = stack.last().pose(); + final Matrix3f normal = stack.last().normal(); + + buffer.vertex(matrix4f, x1, y1, z1).color(color[0], color[1], color[2], color[3]).normal(normal, nx, ny, nz).endVertex(); + buffer.vertex(matrix4f, x2, y2, z2).color(color[0], color[1], color[2], color[3]).normal(normal, nx, ny, nz).endVertex(); + } + + static void emitAABB(PoseStack stack, AABB aabb) { AABB toDraw = aabb.move(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); - Matrix4f matrix4f = stack.last().pose(); - //TODO: check - buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); // bottom - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.minY, toDraw.minZ, 1.0, 0.0, 0.0); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.minY, toDraw.maxZ, 0.0, 0.0, 1.0); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.minY, toDraw.maxZ, -1.0, 0.0, 0.0); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.minY, toDraw.minZ, 0.0, 0.0, -1.0); // top - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + emitLine(stack, toDraw.minX, toDraw.maxY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.minZ, 1.0, 0.0, 0.0); + emitLine(stack, toDraw.maxX, toDraw.maxY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.maxZ, 0.0, 0.0, 1.0); + emitLine(stack, toDraw.maxX, toDraw.maxY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.maxZ, -1.0, 0.0, 0.0); + emitLine(stack, toDraw.minX, toDraw.maxY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.minZ, 0.0, 0.0, -1.0); // corners - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - tessellator.end(); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.minZ, toDraw.minX, toDraw.maxY, toDraw.minZ, 0.0, 1.0, 0.0); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.minZ, toDraw.maxX, toDraw.maxY, toDraw.minZ, 0.0, 1.0, 0.0); + emitLine(stack, toDraw.maxX, toDraw.minY, toDraw.maxZ, toDraw.maxX, toDraw.maxY, toDraw.maxZ, 0.0, 1.0, 0.0); + emitLine(stack, toDraw.minX, toDraw.minY, toDraw.maxZ, toDraw.minX, toDraw.maxY, toDraw.maxZ, 0.0, 1.0, 0.0); + } + + static void emitAABB(PoseStack stack, AABB aabb, double expand) { + emitAABB(stack, aabb.inflate(expand, expand, expand)); } - static void drawAABB(PoseStack stack, AABB aabb, double expand) { - drawAABB(stack, aabb.inflate(expand, expand, expand)); + static void emitLine(PoseStack stack, Vec3 start, Vec3 end) { + double vpX = renderManager.renderPosX(); + double vpY = renderManager.renderPosY(); + double vpZ = renderManager.renderPosZ(); + emitLine(stack, start.x - vpX, start.y - vpY, start.z - vpZ, end.x - vpX, end.y - vpY, end.z - vpZ); } + } diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index 034337129..7b9b7bc1a 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -24,8 +24,8 @@ import baritone.api.utils.IInputOverrideHandler; import baritone.api.utils.input.Input; import baritone.behavior.Behavior; -import net.minecraft.client.Minecraft; import net.minecraft.client.player.KeyboardInput; + import java.util.HashMap; import java.util.Map; @@ -104,7 +104,7 @@ public final void onTick(TickEvent event) { } } else { if (ctx.player().input.getClass() == PlayerMovementInput.class) { // allow other movement inputs that aren't this one, e.g. for a freecam - ctx.player().input = new KeyboardInput(Minecraft.getInstance().options); + ctx.player().input = new KeyboardInput(ctx.minecraft().options); } } // only set it if it was previously incorrect @@ -112,7 +112,7 @@ public final void onTick(TickEvent event) { } private boolean inControl() { - for (Input input : new Input[]{Input.MOVE_FORWARD, Input.MOVE_BACK, Input.MOVE_LEFT, Input.MOVE_RIGHT, Input.SNEAK}) { + for (Input input : new Input[]{Input.MOVE_FORWARD, Input.MOVE_BACK, Input.MOVE_LEFT, Input.MOVE_RIGHT, Input.SNEAK, Input.JUMP}) { if (isInputForcedDown(input)) { return true; } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 438b1d092..d22a0058a 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -19,21 +19,14 @@ import baritone.api.BaritoneAPI; import baritone.api.event.events.RenderEvent; -import baritone.api.pathing.calc.IPath; import baritone.api.pathing.goals.*; import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.Helper; +import baritone.api.utils.IPlayerContext; import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexFormat; -import java.awt.*; -import java.util.Collection; -import java.util.Collections; -import java.util.List; import net.minecraft.client.renderer.blockentity.BeaconRenderer; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; @@ -44,15 +37,18 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.joml.Matrix4f; -import static org.lwjgl.opengl.GL11.*; +import java.awt.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; /** * @author Brady * @since 8/9/2018 */ -public final class PathRenderer implements IRenderer, Helper { +public final class PathRenderer implements IRenderer { private static final ResourceLocation TEXTURE_BEACON_BEAM = new ResourceLocation("textures/entity/beacon_beam.png"); @@ -72,31 +68,27 @@ public static double posZ() { } public static void render(RenderEvent event, PathingBehavior behavior) { - float partialTicks = event.getPartialTicks(); - Goal goal = behavior.getGoal(); - if (Helper.mc.screen instanceof GuiClick) { - ((GuiClick) Helper.mc.screen).onRender(event.getModelViewStack(), event.getProjectionMatrix()); + final IPlayerContext ctx = behavior.ctx; + if (ctx.world() == null) { + return; } + if (ctx.minecraft().screen instanceof GuiClick) { + ((GuiClick) ctx.minecraft().screen).onRender(event.getModelViewStack(), event.getProjectionMatrix()); + } + + final float partialTicks = event.getPartialTicks(); + final Goal goal = behavior.getGoal(); - DimensionType thisPlayerDimension = behavior.baritone.getPlayerContext().world().dimensionType(); - DimensionType currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().dimensionType(); + final DimensionType thisPlayerDimension = ctx.world().dimensionType(); + final DimensionType currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().dimensionType(); if (thisPlayerDimension != currentRenderViewDimension) { // this is a path for a bot in a different dimension, don't render it return; } - Entity renderView = Helper.mc.getCameraEntity(); - - if (renderView.level() != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { - System.out.println("I have no idea what's going on"); - System.out.println("The primary baritone is in a different world than the render view entity"); - System.out.println("Not rendering the path"); - return; - } - if (goal != null && settings.renderGoal.value) { - drawDankLitGoalBox(event.getModelViewStack(), renderView, goal, partialTicks, settings.colorGoalBox.value); + drawGoal(event.getModelViewStack(), ctx, goal, partialTicks, settings.colorGoalBox.value); } if (!settings.renderPath.value) { @@ -106,9 +98,9 @@ public static void render(RenderEvent event, PathingBehavior behavior) { PathExecutor current = behavior.getCurrent(); // this should prevent most race conditions? PathExecutor next = behavior.getNext(); // like, now it's not possible for current!=null to be true, then suddenly false because of another thread if (current != null && settings.renderSelectionBoxes.value) { - drawManySelectionBoxes(event.getModelViewStack(), renderView, current.toBreak(), settings.colorBlocksToBreak.value); - drawManySelectionBoxes(event.getModelViewStack(), renderView, current.toPlace(), settings.colorBlocksToPlace.value); - drawManySelectionBoxes(event.getModelViewStack(), renderView, current.toWalkInto(), settings.colorBlocksToWalkInto.value); + drawManySelectionBoxes(event.getModelViewStack(), ctx.player(), current.toBreak(), settings.colorBlocksToBreak.value); + drawManySelectionBoxes(event.getModelViewStack(), ctx.player(), current.toPlace(), settings.colorBlocksToPlace.value); + drawManySelectionBoxes(event.getModelViewStack(), ctx.player(), current.toWalkInto(), settings.colorBlocksToWalkInto.value); } //drawManySelectionBoxes(player, Collections.singletonList(behavior.pathStart()), partialTicks, Color.WHITE); @@ -116,33 +108,36 @@ public static void render(RenderEvent event, PathingBehavior behavior) { // Render the current path, if there is one if (current != null && current.getPath() != null) { int renderBegin = Math.max(current.getPosition() - 3, 0); - drawPath(event.getModelViewStack(), current.getPath(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); + drawPath(event.getModelViewStack(), current.getPath().positions(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); } if (next != null && next.getPath() != null) { - drawPath(event.getModelViewStack(), next.getPath(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); + drawPath(event.getModelViewStack(), next.getPath().positions(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); } // If there is a path calculation currently running, render the path calculation process behavior.getInProgress().ifPresent(currentlyRunning -> { currentlyRunning.bestPathSoFar().ifPresent(p -> { - drawPath(event.getModelViewStack(), p, 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); + drawPath(event.getModelViewStack(), p.positions(), 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); }); currentlyRunning.pathToMostRecentNodeConsidered().ifPresent(mr -> { - drawPath(event.getModelViewStack(), mr, 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); - drawManySelectionBoxes(event.getModelViewStack(), renderView, Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); + drawPath(event.getModelViewStack(), mr.positions(), 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); + drawManySelectionBoxes(event.getModelViewStack(), ctx.player(), Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); }); }); } - public static void drawPath(PoseStack stack, IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + public static void drawPath(PoseStack stack, List positions, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + drawPath(stack, positions, startIndex, color, fadeOut, fadeStart0, fadeEnd0, 0.5D); + } + + public static void drawPath(PoseStack stack, List positions, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0, double offset) { IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); int fadeStart = fadeStart0 + startIndex; int fadeEnd = fadeEnd0 + startIndex; - List positions = path.positions(); for (int i = startIndex, next; i < positions.size() - 1; i = next) { BetterBlockPos start = positions.get(i); BetterBlockPos end = positions.get(next = i + 1); @@ -172,32 +167,37 @@ public static void drawPath(PoseStack stack, IPath path, int startIndex, Color c IRenderer.glColor(color, alpha); } - drawLine(stack, start.x, start.y, start.z, end.x, end.y, end.z); - - tessellator.end(); + emitPathLine(stack, start.x, start.y, start.z, end.x, end.y, end.z, offset); } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } - - public static void drawLine(PoseStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { - Matrix4f matrix4f = stack.last().pose(); + private static void emitPathLine(PoseStack stack, double x1, double y1, double z1, double x2, double y2, double z2, double offset) { + final double extraOffset = offset + 0.03D; double vpX = posX(); double vpY = posY(); double vpZ = posZ(); boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; - //TODO: check - buffer.begin(renderPathAsFrickinThingy ? VertexFormat.Mode.DEBUG_LINE_STRIP : VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); - buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - + IRenderer.emitLine(stack, + x1 + offset - vpX, y1 + offset - vpY, z1 + offset - vpZ, + x2 + offset - vpX, y2 + offset - vpY, z2 + offset - vpZ + ); if (renderPathAsFrickinThingy) { - buffer.vertex(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + IRenderer.emitLine(stack, + x2 + offset - vpX, y2 + offset - vpY, z2 + offset - vpZ, + x2 + offset - vpX, y2 + extraOffset - vpY, z2 + offset - vpZ + ); + IRenderer.emitLine(stack, + x2 + offset - vpX, y2 + extraOffset - vpY, z2 + offset - vpZ, + x1 + offset - vpX, y1 + extraOffset - vpY, z1 + offset - vpZ + ); + IRenderer.emitLine(stack, + x1 + offset - vpX, y1 + extraOffset - vpY, z1 + offset - vpZ, + x1 + offset - vpX, y1 + offset - vpY, z1 + offset - vpZ + ); } } @@ -212,13 +212,17 @@ public static void drawManySelectionBoxes(PoseStack stack, Entity player, Collec VoxelShape shape = state.getShape(player.level(), pos); AABB toDraw = shape.isEmpty() ? Shapes.block().bounds() : shape.bounds(); toDraw = toDraw.move(pos); - IRenderer.drawAABB(stack, toDraw, .002D); + IRenderer.emitAABB(stack, toDraw, .002D); }); IRenderer.endLines(settings.renderSelectionBoxesIgnoreDepth.value); } - public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, float partialTicks, Color color) { + public static void drawGoal(PoseStack stack, IPlayerContext ctx, Goal goal, float partialTicks, Color color) { + drawGoal(stack, ctx, goal, partialTicks, color, true); + } + + private static void drawGoal(PoseStack stack, IPlayerContext ctx, Goal goal, float partialTicks, Color color, boolean setupRender) { double renderPosX = posX(); double renderPosY = posY(); double renderPosZ = posZ(); @@ -250,14 +254,15 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, y2 -= 0.5; maxY--; } + drawDankLitGoalBox(stack, color, minX, maxX, minZ, maxZ, minY, maxY, y1, y2, setupRender); } else if (goal instanceof GoalXZ) { GoalXZ goalPos = (GoalXZ) goal; + minY = ctx.world().getMinBuildHeight(); + maxY = ctx.world().getMaxBuildHeight(); if (settings.renderGoalXZBeacon.value) { - glPushAttrib(GL_LIGHTING_BIT); - //TODO: check - Helper.mc.getTextureManager().bindForSetup(TEXTURE_BEACON_BEAM); + textureManager.bindForSetup(TEXTURE_BEACON_BEAM); if (settings.renderGoalIgnoreDepth.value) { RenderSystem.disableDepthTest(); } @@ -268,13 +273,13 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, //TODO: check BeaconRenderer.renderBeaconBeam( stack, - mc.renderBuffers().bufferSource(), + ctx.minecraft().renderBuffers().bufferSource(), TEXTURE_BEACON_BEAM, settings.renderGoalAnimated.value ? partialTicks : 0, 1.0F, - settings.renderGoalAnimated.value ? player.level().getGameTime() : 0, - 0, - 256, + settings.renderGoalAnimated.value ? ctx.world().getGameTime() : 0, + (int) minY, + (int) maxY, color.getColorComponents(null), // Arguments filled by the private method lol @@ -287,8 +292,6 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, if (settings.renderGoalIgnoreDepth.value) { RenderSystem.enableDepthTest(); } - - glPopAttrib(); return; } @@ -299,61 +302,65 @@ public static void drawDankLitGoalBox(PoseStack stack, Entity player, Goal goal, y1 = 0; y2 = 0; - minY = 0 - renderPosY; - maxY = 256 - renderPosY; + minY -= renderPosY; + maxY -= renderPosY; + drawDankLitGoalBox(stack, color, minX, maxX, minZ, maxZ, minY, maxY, y1, y2, setupRender); } else if (goal instanceof GoalComposite) { + // Simple way to determine if goals can be batched, without having some sort of GoalRenderer + boolean batch = Arrays.stream(((GoalComposite) goal).goals()).allMatch(IGoalRenderPos.class::isInstance); + + if (batch) { + IRenderer.startLines(color, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); + } for (Goal g : ((GoalComposite) goal).goals()) { - drawDankLitGoalBox(stack, player, g, partialTicks, color); + drawGoal(stack, ctx, g, partialTicks, color, !batch); + } + if (batch) { + IRenderer.endLines(settings.renderGoalIgnoreDepth.value); } - return; } else if (goal instanceof GoalInverted) { - drawDankLitGoalBox(stack, player, ((GoalInverted) goal).origin, partialTicks, settings.colorInvertedGoalBox.value); - return; + drawGoal(stack, ctx, ((GoalInverted) goal).origin, partialTicks, settings.colorInvertedGoalBox.value); } else if (goal instanceof GoalYLevel) { GoalYLevel goalpos = (GoalYLevel) goal; - minX = player.position().x - settings.yLevelBoxSize.value - renderPosX; - minZ = player.position().z - settings.yLevelBoxSize.value - renderPosZ; - maxX = player.position().x + settings.yLevelBoxSize.value - renderPosX; - maxZ = player.position().z + settings.yLevelBoxSize.value - renderPosZ; + minX = ctx.player().position().x - settings.yLevelBoxSize.value - renderPosX; + minZ = ctx.player().position().z - settings.yLevelBoxSize.value - renderPosZ; + maxX = ctx.player().position().x + settings.yLevelBoxSize.value - renderPosX; + maxZ = ctx.player().position().z + settings.yLevelBoxSize.value - renderPosZ; minY = ((GoalYLevel) goal).level - renderPosY; maxY = minY + 2; y1 = 1 + y + goalpos.level - renderPosY; y2 = 1 - y + goalpos.level - renderPosY; - } else { - return; + drawDankLitGoalBox(stack, color, minX, maxX, minZ, maxZ, minY, maxY, y1, y2, setupRender); } + } - IRenderer.startLines(color, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); + private static void drawDankLitGoalBox(PoseStack stack, Color colorIn, double minX, double maxX, double minZ, double maxZ, double minY, double maxY, double y1, double y2, boolean setupRender) { + if (setupRender) { + IRenderer.startLines(colorIn, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); + } renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y1); renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); - Matrix4f matrix4f = stack.last().pose(); - buffer.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); - buffer.vertex(matrix4f, (float) minX, (float) minY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) minZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) minY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) maxY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) minY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) maxY, (float) maxZ).color(IRenderer.color[0], IRenderer.color[1], IRenderer.color[2], IRenderer.color[3]).endVertex(); - tessellator.end(); - - IRenderer.endLines(settings.renderGoalIgnoreDepth.value); + for (double y = minY; y < maxY; y += 16) { + double max = Math.min(maxY, y + 16); + IRenderer.emitLine(stack, minX, y, minZ, minX, max, minZ, 0.0, 1.0, 0.0); + IRenderer.emitLine(stack, maxX, y, minZ, maxX, max, minZ, 0.0, 1.0, 0.0); + IRenderer.emitLine(stack, maxX, y, maxZ, maxX, max, maxZ, 0.0, 1.0, 0.0); + IRenderer.emitLine(stack, minX, y, maxZ, minX, max, maxZ, 0.0, 1.0, 0.0); + } + + if (setupRender) { + IRenderer.endLines(settings.renderGoalIgnoreDepth.value); + } } private static void renderHorizontalQuad(PoseStack stack, double minX, double maxX, double minZ, double maxZ, double y) { if (y != 0) { - Matrix4f matrix4f = stack.last().pose(); - //TODO: check - buffer.begin(VertexFormat.Mode.DEBUG_LINE_STRIP, DefaultVertexFormat.POSITION_COLOR); - buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) maxX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); - buffer.vertex(matrix4f, (float) minX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); - tessellator.end(); + IRenderer.emitLine(stack, minX, y, minZ, maxX, y, minZ, 1.0, 0.0, 0.0); + IRenderer.emitLine(stack, maxX, y, minZ, maxX, y, maxZ, 0.0, 0.0, 1.0); + IRenderer.emitLine(stack, maxX, y, maxZ, minX, y, maxZ, -1.0, 0.0, 0.0); + IRenderer.emitLine(stack, minX, y, maxZ, minX, y, minZ, 0.0, 0.0, -1.0); } } } diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index d841cf3a1..3566cd23a 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -27,9 +27,10 @@ import baritone.api.process.PathingCommandType; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import java.util.*; import net.minecraft.core.BlockPos; +import java.util.*; + public class PathingControlManager implements IPathingControlManager { private final Baritone baritone; @@ -98,6 +99,8 @@ public void preTick() { // get rid of the in progress stuff from the last process } switch (command.commandType) { + case SET_GOAL_AND_PAUSE: + p.secretInternalSetGoalAndPath(command); case REQUEST_PAUSE: p.requestPause(); break; @@ -106,10 +109,6 @@ public void preTick() { p.cancelSegmentIfSafe(); break; case FORCE_REVALIDATE_GOAL_AND_PATH: - if (!p.isPathing() && !p.getInProgress().isPresent()) { - p.secretInternalSetGoalAndPath(command); - } - break; case REVALIDATE_GOAL_AND_PATH: if (!p.isPathing() && !p.getInProgress().isPresent()) { p.secretInternalSetGoalAndPath(command); @@ -118,7 +117,7 @@ public void preTick() { case SET_GOAL_AND_PATH: // now this i can do if (command.goal != null) { - baritone.getPathingBehavior().secretInternalSetGoalAndPath(command); + p.secretInternalSetGoalAndPath(command); } break; default: @@ -159,7 +158,7 @@ public boolean forceRevalidate(Goal newGoal) { if (newGoal.isInGoal(current.getPath().getDest())) { return false; } - return !newGoal.toString().equals(current.getPath().getGoal().toString()); + return !newGoal.equals(current.getPath().getGoal()); } return false; } diff --git a/src/main/java/baritone/utils/accessor/IFireworkRocketEntity.java b/src/main/java/baritone/utils/accessor/IFireworkRocketEntity.java new file mode 100644 index 000000000..36690dbc1 --- /dev/null +++ b/src/main/java/baritone/utils/accessor/IFireworkRocketEntity.java @@ -0,0 +1,25 @@ +/* + * 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.accessor; + +import net.minecraft.world.entity.LivingEntity; + +public interface IFireworkRocketEntity { + + LivingEntity getBoostedEntity(); +} diff --git a/src/main/java/baritone/utils/accessor/IPalettedContainer.java b/src/main/java/baritone/utils/accessor/IPalettedContainer.java new file mode 100644 index 000000000..c7281080d --- /dev/null +++ b/src/main/java/baritone/utils/accessor/IPalettedContainer.java @@ -0,0 +1,36 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.accessor; + +import net.minecraft.util.BitStorage; +import net.minecraft.world.level.chunk.Palette; + +public interface IPalettedContainer { + + Palette getPalette(); + + BitStorage getStorage(); + + + public interface IData { + + Palette getPalette(); + + BitStorage getStorage(); + } +} diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/BaritonePlayerContext.java similarity index 55% rename from src/main/java/baritone/utils/player/PrimaryPlayerContext.java rename to src/main/java/baritone/utils/player/BaritonePlayerContext.java index 0e9060379..4ae89945f 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/BaritonePlayerContext.java @@ -17,13 +17,12 @@ package baritone.utils.player; -import baritone.api.BaritoneAPI; +import baritone.Baritone; import baritone.api.cache.IWorldData; -import baritone.api.utils.Helper; -import baritone.api.utils.IPlayerContext; -import baritone.api.utils.IPlayerController; -import baritone.api.utils.RayTraceUtils; +import baritone.api.utils.*; +import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; import net.minecraft.world.phys.HitResult; @@ -33,28 +32,52 @@ * @author Brady * @since 11/12/2018 */ -public enum PrimaryPlayerContext implements IPlayerContext, Helper { +public final class BaritonePlayerContext implements IPlayerContext { - INSTANCE; + private final Baritone baritone; + private final Minecraft mc; + private final IPlayerController playerController; + + public BaritonePlayerContext(Baritone baritone, Minecraft mc) { + this.baritone = baritone; + this.mc = mc; + this.playerController = new BaritonePlayerController(mc); + } + + @Override + public Minecraft minecraft() { + return this.mc; + } @Override public LocalPlayer player() { - return mc.player; + return this.mc.player; } @Override public IPlayerController playerController() { - return PrimaryPlayerController.INSTANCE; + return this.playerController; } @Override public Level world() { - return mc.level; + return this.mc.level; } @Override public IWorldData worldData() { - return BaritoneAPI.getProvider().getPrimaryBaritone().getWorldProvider().getCurrentWorld(); + return this.baritone.getWorldProvider().getCurrentWorld(); + } + + @Override + public BetterBlockPos viewerPos() { + final Entity entity = this.mc.getCameraEntity(); + return entity == null ? this.playerFeet() : BetterBlockPos.from(entity.blockPosition()); + } + + @Override + public Rotation playerRotations() { + return this.baritone.getLookBehavior().getEffectiveRotation().orElseGet(IPlayerContext.super::playerRotations); } @Override diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/BaritonePlayerController.java similarity index 93% rename from src/main/java/baritone/utils/player/PrimaryPlayerController.java rename to src/main/java/baritone/utils/player/BaritonePlayerController.java index 4aee8c567..42ba49052 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/BaritonePlayerController.java @@ -17,9 +17,9 @@ package baritone.utils.player; -import baritone.api.utils.Helper; import baritone.api.utils.IPlayerController; import baritone.utils.accessor.IPlayerControllerMP; +import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; @@ -39,9 +39,13 @@ * @author Brady * @since 12/14/2018 */ -public enum PrimaryPlayerController implements IPlayerController, Helper { +public final class BaritonePlayerController implements IPlayerController { - INSTANCE; + private final Minecraft mc; + + public BaritonePlayerController(Minecraft mc) { + this.mc = mc; + } @Override public void syncHeldItem() { diff --git a/tweaker/build.gradle b/tweaker/build.gradle index a437e735a..9f053fb88 100644 --- a/tweaker/build.gradle +++ b/tweaker/build.gradle @@ -20,10 +20,10 @@ import baritone.gradle.task.ProguardTask //import baritone.gradle.task.TweakerJsonAssembler plugins { - id "com.github.johnrengelman.shadow" version "7.0.0" + id "com.github.johnrengelman.shadow" version "8.0.0" } -minecraft { +unimined.minecraft { runs.client = { mainClass = "net.minecraft.launchwrapper.Launch" args.addAll(["--tweakClass", "baritone.launch.BaritoneTweaker"]) @@ -66,18 +66,18 @@ dependencies { shadowJar { configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { inputFile.set shadowJar.archiveFile dependsOn shadowJar - classifier null + archiveClassifier.set null } jar { - classifier "dev" + archiveClassifier.set "dev" preserveFileTimestamps = false reproducibleFileOrder = true @@ -91,4 +91,27 @@ jar { 'Implementation-Version': version, ) } +} + +task proguard(type: ProguardTask) { + url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip' + extract 'proguard-7.2.1/lib/proguard.jar' +} + +task createDist(type: CreateDistTask, dependsOn: proguard) + +build.finalizedBy(createDist) + +publishing { + publications { + mavenCommon(MavenPublication) { + artifactId = rootProject.archives_base_name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } } \ No newline at end of file diff --git a/tweaker/src/main/java/baritone/launch/LaunchTesting.java b/tweaker/src/main/java/baritone/launch/LaunchTesting.java deleted file mode 100644 index 21607ae34..000000000 --- a/tweaker/src/main/java/baritone/launch/LaunchTesting.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * 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; - -import com.google.common.base.Strings; -import com.google.gson.GsonBuilder; -import com.mojang.authlib.Agent; -import com.mojang.authlib.exceptions.AuthenticationException; -import com.mojang.authlib.properties.PropertyMap; -import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; -import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication; -import net.minecraft.launchwrapper.Launch; - -import java.io.File; -import java.lang.reflect.Field; -import java.net.Proxy; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Based on GradleStart from ForgeGradle 2.3 - * - * @author Brady - * @since 3/11/2019 - */ -public class LaunchTesting { - - public static void main(String[] args) { - Map arguments = new HashMap<>(); - - hackNatives(); - arguments.put("version", "BaritownedDeveloperEnvironment"); - arguments.put("assetIndex", System.getenv("assetIndex")); - arguments.put("assetsDir", System.getenv().getOrDefault("assetDirectory", "assets")); - arguments.put("accessToken", "FML"); - arguments.put("userProperties", "{}"); - arguments.put("tweakClass", System.getenv("tweakClass")); - String password = System.getenv("password"); - if (password != null && !password.isEmpty()) { - attemptLogin(arguments, System.getenv("username"), System.getenv("password")); - } - - List argsArray = new ArrayList<>(); - arguments.forEach((k, v) -> { - argsArray.add("--" + k); - argsArray.add(v); - }); - - Launch.main(argsArray.toArray(new String[0])); - } - - private static void hackNatives() { - String paths = System.getProperty("java.library.path"); - String nativesDir = System.getenv().get("nativesDirectory"); - - if (Strings.isNullOrEmpty(paths)) - paths = nativesDir; - else - paths += File.pathSeparator + nativesDir; - - System.setProperty("java.library.path", paths); - - // hack the classloader now. - try { - final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths"); - sysPathsField.setAccessible(true); - sysPathsField.set(null, null); - } catch (Throwable ignored) {} - } - - private static void attemptLogin(Map argMap, String username, String password) { - YggdrasilUserAuthentication auth = (YggdrasilUserAuthentication) (new YggdrasilAuthenticationService(Proxy.NO_PROXY, "1")).createUserAuthentication(Agent.MINECRAFT); - auth.setUsername(username); - auth.setPassword(password); - - try { - auth.logIn(); - } catch (AuthenticationException var4) { - throw new RuntimeException(var4); - } - - argMap.put("accessToken", auth.getAuthenticatedToken()); - argMap.put("uuid", auth.getSelectedProfile().getId().toString().replace("-", "")); - argMap.put("username", auth.getSelectedProfile().getName()); - argMap.put("userType", auth.getUserType().getName()); - argMap.put("userProperties", (new GsonBuilder()).registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer()).create().toJson(auth.getUserProperties())); - } -} From 8a0f3018bf7cf388b56d92e4e5e7bd5af304b225 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 6 Jan 2024 11:28:43 -0800 Subject: [PATCH 933/935] v1.10.2 From 30921ca77048f65ee45d374f7dd15ca93d715d63 Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 26 Jan 2024 22:49:37 +0100 Subject: [PATCH 934/935] Meteor changes --- build.gradle | 6 +- fabric/build.gradle | 22 ++++-- .../baritone/launch/FabricMixinPlugin.java | 71 +++++++++++++++++++ fabric/src/main/resources/fabric.mod.json | 4 +- gradle.properties | 4 +- scripts/proguard.pro | 5 ++ src/api/java/baritone/api/Settings.java | 2 +- .../launch/BaritoneMixinConnector.java | 2 +- ...itone.json => mixins.baritone-meteor.json} | 3 +- .../java/baritone/launch/BaritoneTweaker.java | 2 +- 10 files changed, 107 insertions(+), 14 deletions(-) create mode 100644 fabric/src/main/java/baritone/launch/FabricMixinPlugin.java rename src/launch/resources/{mixins.baritone.json => mixins.baritone-meteor.json} (92%) diff --git a/build.gradle b/build.gradle index 011f08993..18fc7ce25 100755 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ allprojects { archivesBaseName = rootProject.archives_base_name - def vers = "" + /*def vers = "" try { vers = 'git describe --always --tags --first-parent --dirty'.execute().text.trim() } catch (Exception e) { @@ -34,7 +34,9 @@ allprojects { } else { version = vers.substring(1) println "Detected version " + version - } + }*/ + + version = rootProject.mod_version group = rootProject.maven_group sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17 diff --git a/fabric/build.gradle b/fabric/build.gradle index e6a88b352..93f7ec403 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -91,14 +91,28 @@ build.finalizedBy(createDist) publishing { publications { - mavenFabric(MavenPublication) { - artifactId = rootProject.archives_base_name + "-" + project.name - from components.java + maven(MavenPublication) { + groupId "meteordevelopment" + artifactId "baritone" + + artifact "../dist/baritone-api-fabric-" + version + ".jar" } } // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { - // Add repositories to publish to here. + maven { + name = "meteor-maven" + url = "https://maven.meteordev.org/snapshots" + + credentials { + username = System.getenv("MAVEN_METEOR_ALIAS") + password = System.getenv("MAVEN_METEOR_TOKEN") + } + + authentication { + basic(BasicAuthentication) + } + } } } diff --git a/fabric/src/main/java/baritone/launch/FabricMixinPlugin.java b/fabric/src/main/java/baritone/launch/FabricMixinPlugin.java new file mode 100644 index 000000000..655de50d4 --- /dev/null +++ b/fabric/src/main/java/baritone/launch/FabricMixinPlugin.java @@ -0,0 +1,71 @@ +/* + * 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; + +import net.fabricmc.loader.api.FabricLoader; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class FabricMixinPlugin implements IMixinConfigPlugin { + private static final String mixinPackage = "baritone.launch.mixins"; + + private static boolean loaded; + + private static boolean isBaritonePresent; + + @Override + public void onLoad(String mixinPackage) { + if (loaded) return; + + isBaritonePresent = FabricLoader.getInstance().isModLoaded("baritone"); + + loaded = true; + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if (!mixinClassName.startsWith(mixinPackage)) { + throw new RuntimeException("Mixin " + mixinClassName + " is not in the mixin package"); + } else { + return !isBaritonePresent; + } + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) {} + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index c1512a6cc..39475b65b 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "id": "baritone", + "id": "baritone-meteor", "version": "${version}", "name": "Baritone", @@ -20,7 +20,7 @@ "entrypoints": { }, "mixins": [ - "mixins.baritone.json" + "mixins.baritone-meteor.json" ], "depends": { diff --git a/gradle.properties b/gradle.properties index 35c62e0a7..d1c608ccd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ org.gradle.jvmargs=-Xmx4G -available_loaders=fabric,forge,neoforge,tweaker +available_loaders=fabric -mod_version=1.10.2 +mod_version=1.20.4-SNAPSHOT maven_group=baritone archives_base_name=baritone diff --git a/scripts/proguard.pro b/scripts/proguard.pro index 34b76170f..13c10650c 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -1,3 +1,8 @@ +# Meteor +-keep class * + + + -keepattributes Signature -keepattributes *Annotation* -keepattributes InnerClasses diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 9171a3d68..be9830ae6 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -660,7 +660,7 @@ public final class Settings { * Allow chat based control of Baritone. Most likely should be disabled when Baritone is imported for use in * something else */ - public final Setting chatControl = new Setting<>(true); + public final Setting chatControl = new Setting<>(false); /** * Some clients like Impact try to force chatControl to off, so here's a second setting to do it anyway diff --git a/src/launch/java/baritone/launch/BaritoneMixinConnector.java b/src/launch/java/baritone/launch/BaritoneMixinConnector.java index 86069e14f..d32b83cbd 100644 --- a/src/launch/java/baritone/launch/BaritoneMixinConnector.java +++ b/src/launch/java/baritone/launch/BaritoneMixinConnector.java @@ -24,6 +24,6 @@ public class BaritoneMixinConnector implements IMixinConnector { @Override public void connect() { - Mixins.addConfiguration("mixins.baritone.json"); + Mixins.addConfiguration("mixins.baritone-meteor.json"); } } \ No newline at end of file diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone-meteor.json similarity index 92% rename from src/launch/resources/mixins.baritone.json rename to src/launch/resources/mixins.baritone-meteor.json index 35d5ae0d6..f686c92e3 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone-meteor.json @@ -26,5 +26,6 @@ "MixinPlayerController", "MixinScreen", "MixinWorldRenderer" - ] + ], + "plugin": "baritone.launch.FabricMixinPlugin" } diff --git a/tweaker/src/main/java/baritone/launch/BaritoneTweaker.java b/tweaker/src/main/java/baritone/launch/BaritoneTweaker.java index b9db9b6a5..02e269506 100644 --- a/tweaker/src/main/java/baritone/launch/BaritoneTweaker.java +++ b/tweaker/src/main/java/baritone/launch/BaritoneTweaker.java @@ -50,6 +50,6 @@ public void injectIntoClassLoader(LaunchClassLoader classLoader) { MixinEnvironment.getDefaultEnvironment().setSide(MixinEnvironment.Side.CLIENT); MixinEnvironment.getDefaultEnvironment().setObfuscationContext(obfuscation); - Mixins.addConfiguration("mixins.baritone.json"); + Mixins.addConfiguration("mixins.baritone-meteor.json"); } } From 0cb11d584875f5a11419c76ed8470a2686b7c03c Mon Sep 17 00:00:00 2001 From: MarvionKirito Date: Sun, 25 Feb 2024 12:17:25 +0800 Subject: [PATCH 935/935] Altoclef changes --- gradle.properties | 3 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../baritone/api/process/IBuilderProcess.java | 1 + .../baritone/api/utils/RayTraceUtils.java | 4 +- .../baritone/behavior/InventoryBehavior.java | 22 +- .../pathing/movement/CalculationContext.java | 13 +- .../pathing/movement/MovementHelper.java | 46 +- .../movement/movements/MovementDescend.java | 5 + .../movement/movements/MovementFall.java | 11 +- .../movement/movements/MovementTraverse.java | 15 +- .../baritone/pathing/path/PathExecutor.java | 6 + .../java/baritone/process/BuilderProcess.java | 772 +++++++++++------- .../java/baritone/process/MineProcess.java | 231 +++--- .../baritone/utils/InputOverrideHandler.java | 5 + src/main/java/baritone/utils/ToolSet.java | 5 +- 15 files changed, 710 insertions(+), 431 deletions(-) diff --git a/gradle.properties b/gradle.properties index d1c608ccd..c00489491 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,7 @@ org.gradle.jvmargs=-Xmx4G available_loaders=fabric - -mod_version=1.20.4-SNAPSHOT +mod_version=1.20.4-beta1 maven_group=baritone archives_base_name=baritone diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 15de90249..17655d0ef 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/api/java/baritone/api/process/IBuilderProcess.java b/src/api/java/baritone/api/process/IBuilderProcess.java index a763f86f8..347303dff 100644 --- a/src/api/java/baritone/api/process/IBuilderProcess.java +++ b/src/api/java/baritone/api/process/IBuilderProcess.java @@ -22,6 +22,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.world.level.block.state.BlockState; + import java.io.File; import java.util.List; diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 5541f562b..38199d071 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -27,7 +27,7 @@ * @since 8/25/2018 */ public final class RayTraceUtils { - + public static ClipContext.Fluid fluidHandling = ClipContext.Fluid.NONE; private RayTraceUtils() {} /** @@ -58,7 +58,7 @@ public static HitResult rayTraceTowards(Entity entity, Rotation rotation, double direction.y * blockReachDistance, direction.z * blockReachDistance ); - return entity.level().clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)); + return entity.level().clip(new ClipContext(start, end, ClipContext.Block.OUTLINE, fluidHandling, entity)); } public static Vec3 inferSneakingEyePosition(Entity entity) { diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 43a553d4d..f8a7ac491 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -18,6 +18,7 @@ package baritone.behavior; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.event.events.TickEvent; import baritone.api.utils.Helper; import baritone.utils.ToolSet; @@ -26,11 +27,7 @@ import net.minecraft.core.NonNullList; import net.minecraft.world.InteractionHand; import net.minecraft.world.inventory.ClickType; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.DiggerItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.PickaxeItem; +import net.minecraft.world.item.*; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.Block; @@ -38,6 +35,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; + import java.util.ArrayList; import java.util.OptionalInt; import java.util.Random; @@ -54,7 +52,7 @@ public InventoryBehavior(Baritone baritone) { @Override public void onTick(TickEvent event) { - if (!Baritone.settings().allowInventory.value) { + if (!Baritone.settings().allowInventory.value || AltoClefSettings.getInstance().isInteractionPaused()) { return; } if (event.getType() == TickEvent.Type.OUT) { @@ -79,6 +77,7 @@ public void onTick(TickEvent event) { } public boolean attemptToPutOnHotbar(int inMainInvy, Predicate disallowedHotbar) { + if (AltoClefSettings.getInstance().isInteractionPaused()) return false; OptionalInt destination = getTempHotbarSlot(disallowedHotbar); if (destination.isPresent()) { if (!requestSwapWithHotBar(inMainInvy, destination.getAsInt())) { @@ -119,6 +118,7 @@ private boolean requestSwapWithHotBar(int inInventory, int inHotbar) { logDebug("Inventory move requested but delaying until stationary"); return false; } + if (AltoClefSettings.getInstance().isInteractionPaused()) return false; ctx.playerController().windowClick(ctx.player().inventoryMenu.containerId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); ticksSinceLastInventoryMove = 0; lastTickRequestedMove = null; @@ -128,8 +128,11 @@ private boolean requestSwapWithHotBar(int inInventory, int inHotbar) { private int firstValidThrowaway() { // TODO offhand idk NonNullList invy = ctx.player().getInventory().items; for (int i = 0; i < invy.size(); i++) { + Item item = invy.get(i).getItem(); if (Baritone.settings().acceptableThrowawayItems.value.contains(invy.get(i).getItem())) { - return i; + if (!AltoClefSettings.getInstance().isItemProtected(item)) { + return i; + } } } return -1; @@ -160,6 +163,7 @@ private int bestToolAgainst(Block against, Class cla$$) { public boolean hasGenericThrowaway() { for (Item item : Baritone.settings().acceptableThrowawayItems.value) { + if (AltoClefSettings.getInstance().isItemProtected(item)) continue; if (throwaway(false, stack -> item.equals(stack.getItem()))) { return true; } @@ -168,6 +172,8 @@ public boolean hasGenericThrowaway() { } public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { + if (AltoClefSettings.getInstance().isInteractionPaused()) return false; + if (AltoClefSettings.getInstance().shouldAvoidPlacingAt(x, y, z)) return false; BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockPlaceContext(new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { return true; // gotem @@ -176,6 +182,7 @@ public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { return true; } for (Item item : Baritone.settings().acceptableThrowawayItems.value) { + if (AltoClefSettings.getInstance().isItemProtected(item)) continue; if (throwaway(select, stack -> item.equals(stack.getItem()))) { return true; } @@ -188,6 +195,7 @@ public boolean throwaway(boolean select, Predicate desired) { } public boolean throwaway(boolean select, Predicate desired, boolean allowInventory) { + if (AltoClefSettings.getInstance().isInteractionPaused()) return false; LocalPlayer p = ctx.player(); NonNullList inv = p.getInventory().items; for (int i = 0; i < 9; i++) { diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 64aca2ceb..1174bb5ee 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -18,6 +18,7 @@ package baritone.pathing.movement; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.IBaritone; import baritone.api.pathing.movement.ActionCosts; import baritone.cache.WorldData; @@ -34,6 +35,7 @@ import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EndPortalFrameBlock; import net.minecraft.world.level.block.state.BlockState; import java.util.ArrayList; @@ -96,11 +98,11 @@ public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.worldData = (WorldData) baritone.getPlayerContext().worldData(); this.bsi = new BlockStateInterface(baritone.getPlayerContext(), forUseOnAnotherThread); this.toolSet = new ToolSet(player); - this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); + this.hasThrowaway = !AltoClefSettings.getInstance().isInteractionPaused() && Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && Inventory.isHotbarSlot(player.getInventory().findSlotMatchingItem(STACK_BUCKET_WATER)) && world.dimension() != Level.NETHER; this.canSprint = Baritone.settings().allowSprint.value && player.getFoodData().getFoodLevel() > 6; this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; - this.allowBreak = Baritone.settings().allowBreak.value; + this.allowBreak = !AltoClefSettings.getInstance().isInteractionPaused() && Baritone.settings().allowBreak.value; this.allowBreakAnyway = new ArrayList<>(Baritone.settings().allowBreakAnyway.value); this.allowParkour = Baritone.settings().allowParkour.value; this.allowParkourPlace = Baritone.settings().allowParkourPlace.value; @@ -161,6 +163,9 @@ public double costOfPlacingAt(int x, int y, int z, BlockState current) { if (!worldBorder.canPlaceAt(x, z)) { return COST_INF; } + if (AltoClefSettings.getInstance().shouldAvoidPlacingAt(x, y, z)) { + return COST_INF; + } return placeBlockCost; } @@ -171,6 +176,10 @@ public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { if (isPossiblyProtected(x, y, z)) { return COST_INF; } + if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z)) + || current.getBlock() instanceof EndPortalFrameBlock) { + return COST_INF; + } return 1; } diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index f5c928cd4..0c07cc666 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -18,12 +18,13 @@ package baritone.pathing.movement; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.pathing.movement.ActionCosts; import baritone.api.pathing.movement.MovementStatus; -import baritone.api.utils.*; import baritone.api.utils.Rotation; +import baritone.api.utils.*; import baritone.api.utils.input.Input; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.pathing.precompute.Ternary; @@ -39,17 +40,12 @@ import net.minecraft.world.level.block.state.properties.Half; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.level.block.state.properties.StairsShape; -import net.minecraft.world.level.material.FlowingFluid; -import net.minecraft.world.level.material.Fluid; -import net.minecraft.world.level.material.Fluids; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.level.material.WaterFluid; +import net.minecraft.world.level.material.*; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import java.util.List; import java.util.Optional; import static baritone.pathing.movement.Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP; @@ -63,6 +59,10 @@ public interface MovementHelper extends ActionCosts, Helper { static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + if (bsi.get0(x, y + 1, z).getBlock() instanceof EndPortalFrameBlock) { + return true; + } + if (AltoClefSettings.getInstance().shouldAvoidBreaking(new BlockPos(x, y, z))) return true; if (!bsi.worldBorder.canPlaceAt(x, z)) { return true; } @@ -125,6 +125,14 @@ static boolean canWalkThrough(CalculationContext context, int x, int y, int z) { static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Ternary canWalkThrough = canWalkThroughBlockState(state); + Block block = state.getBlock(); + BlockState up = bsi.get0(x, y + 1, z); + if (AltoClefSettings.getInstance().canSwimThroughLava() && block == Blocks.LAVA) { + return up.getFluidState().isEmpty(); + } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(x, y, z)) { + return false; + } if (canWalkThrough == YES) { return true; } @@ -287,6 +295,9 @@ static boolean fullyPassable(CalculationContext context, int x, int y, int z, Bl static boolean fullyPassable(IPlayerContext ctx, BlockPos pos) { BlockState state = ctx.world().getBlockState(pos); Ternary fullyPassable = fullyPassableBlockState(state); + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(pos)) { + return false; + } if (fullyPassable == YES) { return true; } @@ -387,6 +398,7 @@ static boolean avoidWalkingInto(BlockState state) { || block == Blocks.CACTUS || block == Blocks.SWEET_BERRY_BUSH || block instanceof BaseFireBlock + || block instanceof EndPortalFrameBlock || block == Blocks.END_PORTAL || block == Blocks.COBWEB || block == Blocks.BUBBLE_COLUMN; @@ -408,6 +420,8 @@ static boolean avoidWalkingInto(BlockState state) { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockState state) { Ternary canWalkOn = canWalkOnBlockState(state); + if (AltoClefSettings.getInstance().canWalkOnForce(x, y, z)) return true; + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(x, y + 1, z)) return false; if (canWalkOn == YES) { return true; } @@ -419,6 +433,14 @@ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockStat static Ternary canWalkOnBlockState(BlockState state) { Block block = state.getBlock(); + //Extra blocks we may want to walk on. + if (block instanceof EndPortalFrameBlock) { + return YES; + } + if (block == Blocks.END_PORTAL && AltoClefSettings.getInstance().isCanWalkOnEndPortal()) { + return YES; + } + //***************************************** if (isBlockNormalCube(state) && block != Blocks.MAGMA_BLOCK && block != Blocks.BUBBLE_COLUMN && block != Blocks.HONEY_BLOCK) { return YES; } @@ -576,6 +598,7 @@ static boolean canPlaceAgainst(IPlayerContext ctx, BlockPos pos) { } static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + if (AltoClefSettings.getInstance().shouldAvoidPlacingAt(x, y, z)) return false; if (!bsi.worldBorder.canPlaceAt(x, z)) { return false; } @@ -606,6 +629,9 @@ static double getMiningDurationTicks(CalculationContext context, int x, int y, i if (strVsBlock <= 0) { return COST_INF; } + if (AltoClefSettings.getInstance().shouldAvoidBreaking(x, y, z)) { + return COST_INF; + } double result = 1 / strVsBlock; result += context.breakBlockAdditionalCost; result *= mult; @@ -643,6 +669,7 @@ static void switchToBestToolFor(IPlayerContext ctx, BlockState b) { * @param ts previously calculated ToolSet */ static void switchToBestToolFor(IPlayerContext ctx, BlockState b, ToolSet ts, boolean preferSilkTouch) { + if (AltoClefSettings.getInstance().isInteractionPaused()) return; if (Baritone.settings().autoTool.value && !Baritone.settings().assumeExternalAutoTool.value) { ctx.player().getInventory().selected = ts.getBestSlot(b.getBlock(), preferSilkTouch); } @@ -666,7 +693,10 @@ static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { */ static boolean isWater(BlockState state) { Fluid f = state.getFluidState().getType(); - return f == Fluids.WATER || f == Fluids.FLOWING_WATER; + if (f == Fluids.WATER || f == Fluids.FLOWING_WATER) { + return true; + } + return (f == Fluids.LAVA || f == Fluids.FLOWING_LAVA) && AltoClefSettings.getInstance().canSwimThroughLava(); } /** diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 07d6d7d01..2ddfa85cb 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -17,6 +17,7 @@ package baritone.pathing.movement.movements; +import baritone.altoclef.AltoClefSettings; import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.BetterBlockPos; @@ -277,9 +278,13 @@ public boolean safeMode() { return true; } for (int y = 0; y <= 2; y++) { // we could hit any of the three blocks + BlockPos p = into.above(y); if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, into.above(y)))) { return true; } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(p)) { + return true; + } } return false; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 913b410aa..441bdf993 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -17,6 +17,7 @@ package baritone.pathing.movement.movements; +import baritone.altoclef.AltoClefSettings; import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.BetterBlockPos; @@ -30,9 +31,6 @@ import baritone.pathing.movement.MovementState; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.pathing.MutableMoveResult; -import java.util.HashSet; -import java.util.Optional; -import java.util.Set; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; @@ -47,6 +45,10 @@ import net.minecraft.world.level.material.WaterFluid; import net.minecraft.world.phys.Vec3; +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; + public class MovementFall extends Movement { private static final ItemStack STACK_BUCKET_WATER = new ItemStack(Items.WATER_BUCKET); @@ -95,7 +97,8 @@ public MovementState updateState(MovementState state) { BlockState destState = ctx.world().getBlockState(dest); Block destBlock = destState.getBlock(); boolean isWater = destState.getFluidState().getType() instanceof WaterFluid; - if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { + if (!isWater && willPlaceBucket() && !playerFeet.equals(dest) && + !AltoClefSettings.getInstance().shouldNotPlaceBucketButStillFall()) { if (!Inventory.isHotbarSlot(ctx.player().getInventory().findSlotMatchingItem(STACK_BUCKET_WATER)) || ctx.world().dimension() == Level.NETHER) { return state.setStatus(MovementStatus.UNREACHABLE); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 705863407..54ac87d60 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -18,6 +18,7 @@ package baritone.pathing.movement.movements; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.BetterBlockPos; @@ -32,14 +33,7 @@ import baritone.utils.BlockStateInterface; import com.google.common.collect.ImmutableSet; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.AirBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.CarpetBlock; -import net.minecraft.world.level.block.DoorBlock; -import net.minecraft.world.level.block.FenceGateBlock; -import net.minecraft.world.level.block.LadderBlock; -import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.phys.Vec3; @@ -189,6 +183,9 @@ public MovementState updateState(MovementState state) { if (MovementHelper.avoidWalkingInto(pb1)) { return state; } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(positionsToBreak[0]) || AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(positionsToBreak[1])) { + return state; + } // and we aren't already pressed up against the block double dist = Math.max(Math.abs(ctx.player().position().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().position().z - (dest.getZ() + 0.5D))); if (dist < 0.83) { @@ -287,7 +284,7 @@ public MovementState updateState(MovementState state) { } else { wasTheBridgeBlockAlwaysThere = false; Block standingOn = BlockStateInterface.get(ctx, feet.below()).getBlock(); - if (standingOn.equals(Blocks.SOUL_SAND) || standingOn instanceof SlabBlock) { // see issue #118 + if ((standingOn.equals(Blocks.SOUL_SAND) && !AltoClefSettings.getInstance().shouldTreatSoulSandAsOrdinaryBlock()) || standingOn instanceof SlabBlock) { // see issue #118 double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().position().x), Math.abs(dest.getZ() + 0.5 - ctx.player().position().z)); if (dist < 0.85) { // 0.5 + 0.3 + epsilon MovementHelper.moveTowards(ctx, state, dest); diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index d760f3a38..a17e7c8f2 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -18,6 +18,7 @@ package baritone.pathing.path; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.pathing.calc.IPath; import baritone.api.pathing.movement.ActionCosts; import baritone.api.pathing.movement.IMovement; @@ -36,6 +37,7 @@ import net.minecraft.core.Vec3i; import net.minecraft.util.Tuple; import net.minecraft.world.phys.Vec3; + import java.util.*; import static baritone.api.pathing.movement.MovementStatus.*; @@ -559,6 +561,10 @@ private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse cur if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().above(3)))) { return false; } + if (AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(3)) || + AltoClefSettings.getInstance().shouldAvoidWalkThroughForce(current.getSrc().above(2))) { + return false; + } return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().above(2))); // codacy smh my head } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 6913d5be0..825635e0b 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -18,6 +18,7 @@ package baritone.process; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalComposite; @@ -30,42 +31,41 @@ import baritone.api.schematic.IStaticSchematic; import baritone.api.schematic.SubstituteSchematic; import baritone.api.schematic.format.ISchematicFormat; -import baritone.api.utils.*; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.RayTraceUtils; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; import baritone.api.utils.input.Input; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Movement; import baritone.pathing.movement.MovementHelper; +import baritone.pathing.path.PathExecutor; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; import baritone.utils.schematic.MapArtSchematic; -import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.SchematicSystem; +import baritone.utils.schematic.SelectionSchematic; import baritone.utils.schematic.format.defaults.LitematicaSchematic; import baritone.utils.schematic.litematica.LitematicaHelper; import baritone.utils.schematic.schematica.SchematicaHelper; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.nbt.NbtAccounter; import net.minecraft.nbt.NbtIo; +import net.minecraft.network.chat.Component; import net.minecraft.util.Tuple; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.item.context.UseOnContext; -import net.minecraft.world.level.block.AirBlock; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.HorizontalDirectionalBlock; -import net.minecraft.world.level.block.LiquidBlock; -import net.minecraft.world.level.block.PipeBlock; -import net.minecraft.world.level.block.RotatedPillarBlock; -import net.minecraft.world.level.block.StairBlock; -import net.minecraft.world.level.block.TrapDoorBlock; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.phys.AABB; @@ -74,10 +74,12 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.VoxelShape; +import javax.annotation.Nullable; import java.io.File; import java.io.FileInputStream; import java.nio.file.Files; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -96,14 +98,82 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private int layer; private int numRepeats; private List approxPlaceable; + public static final Set> orientationProps = + ImmutableSet.of( + RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, + StairBlock.FACING, StairBlock.HALF, StairBlock.SHAPE, + PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, + TrapDoorBlock.OPEN, TrapDoorBlock.HALF + ); + public int stopAtHeight = 0; + private final Map protectedItems = new HashMap<>(); + private final Function, Comparable>, PropertyContainer> PROPERTY_ENTRY_TO_STRING_FUNCTION = new Function<>() { + public PropertyContainer apply(@Nullable Map.Entry, Comparable> entry) { + if (entry == null) { + return null; + } else { + Property property = (Property) entry.getKey(); + String var10000 = property.getName(); + final PropertyContainer propertyContainer = new PropertyContainer(var10000, this.getName(property, (Comparable) entry.getValue())); + return propertyContainer; + //return var10000 + "=" + this.getName(property, (Comparable) entry.getValue()); + } + } + + private > String getName(Property property, Comparable comparable) { + return property.getName((T) comparable); + } + }; + private boolean fromAltoclef; + private Map missing; + private boolean active; + private Stack stateStack = new Stack<>(); public BuilderProcess(Baritone baritone) { super(baritone); } + private Vec3i schemSize; + private boolean fromAltoclefFinished; + private Map blockBreakHistory = new HashMap<>(); + + private void pushState() { + stateStack.clear(); + stateStack.push(this.approxPlaceable); + stateStack.push(this.ticks); + stateStack.push(this.incorrectPositions); + stateStack.push(this.name); + stateStack.push(this.schematic); + stateStack.push(this.realSchematic); + stateStack.push(this.origin); + stateStack.push(this.paused); + stateStack.push(this.layer); + stateStack.push(this.numRepeats); + stateStack.push(this.observedCompleted); + stateStack.push(this.active); + stateStack.push(this.missing); + stateStack.push(this.schemSize); + stateStack.push(this.fromAltoclefFinished); + stateStack.push(this.fromAltoclef); + } + + @Override + public double priority() { + return super.priority(); + } + + @Override + public String displayName() { + return super.displayName(); + } + @Override public void build(String name, ISchematic schematic, Vec3i origin) { + //Shouldn't get initially called + if (this.fromAltoclef && this.stateStack.isEmpty()) { + pushState(); + } this.name = name; this.schematic = schematic; this.realSchematic = null; @@ -148,10 +218,72 @@ public void build(String name, ISchematic schematic, Vec3i origin) { this.numRepeats = 0; this.observedCompleted = new LongOpenHashSet(); this.incorrectPositions = null; + this.active = true; + if (this.missing != null) { + this.missing.clear(); + } else { + missing = new HashMap<>(); + } + this.schemSize = new Vec3i(schematic.widthX(), schematic.heightY(), schematic.lengthZ()); + this.fromAltoclefFinished = false; + this.fromAltoclef = false; } - public void resume() { - paused = false; + private void protectItemOfMissing() { + if (missing != null) { + protectedItems.putAll(missing); + protectedItems.keySet().forEach(e -> { + if (!AltoClefSettings.getInstance().isItemProtected(e.getBlock().asItem())) { + AltoClefSettings.getInstance().protectItem(e.getBlock().asItem()); + } + }); + } + } + + @Override + public void popStack() { + if (this.stateStack.isEmpty()) { + logDebug("ERROR in BuildProcess: No state present to pop"); + return; + } + this.fromAltoclef = (boolean) stateStack.pop(); + this.fromAltoclefFinished = (boolean) stateStack.pop(); + this.schemSize = (Vec3i) stateStack.pop(); + this.missing = (Map) stateStack.pop(); + this.active = (boolean) stateStack.pop(); + this.observedCompleted = (LongOpenHashSet) stateStack.pop(); + this.numRepeats = (int) stateStack.pop(); + this.layer = (int) stateStack.pop(); + this.paused = (boolean) stateStack.pop(); + this.origin = (Vec3i) stateStack.pop(); + this.realSchematic = (ISchematic) stateStack.pop(); + this.schematic = (ISchematic) stateStack.pop(); + this.name = (String) stateStack.pop(); + this.incorrectPositions = (HashSet) stateStack.pop(); + this.ticks = (int) stateStack.pop(); + this.approxPlaceable = (List) stateStack.pop(); + pushState(); + if (!stateStack.isEmpty()) { + logDebug("ERROR: state stack was not empty after state restoration. Will throw away the rest for now."); + stateStack.clear(); + } + } + + @Override + public boolean isFromAltoclefFinished() { + return this.fromAltoclefFinished; + } + + private void stopProtectItemOfMissing() { + if (protectedItems != null && protectedItems.size() > 0) { + protectedItems.keySet().forEach(e -> { + if (AltoClefSettings.getInstance().isItemProtected(e.getBlock().asItem())) { + AltoClefSettings.getInstance().stopProtectingItem(e.getBlock().asItem()); + } + }); + } + assert protectedItems != null; + protectedItems.clear(); } public void pause() { @@ -271,34 +403,13 @@ public BlockState placeAt(int x, int y, int z, BlockState current) { return state; } - private Optional> toBreakNearPlayer(BuilderCalculationContext bcc) { - BetterBlockPos center = ctx.playerFeet(); - BetterBlockPos pathStart = baritone.getPathingBehavior().pathStart(); - for (int dx = -5; dx <= 5; dx++) { - for (int dy = Baritone.settings().breakFromAbove.value ? -1 : 0; dy <= 5; dy++) { - for (int dz = -5; dz <= 5; dz++) { - int x = center.x + dx; - int y = center.y + dy; - int z = center.z + dz; - if (dy == -1 && x == pathStart.x && z == pathStart.z) { - continue; // dont mine what we're supported by, but not directly standing on - } - BlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); - if (desired == null) { - continue; // irrelevant - } - BlockState curr = bcc.bsi.get0(x, y, z); - if (!(curr.getBlock() instanceof AirBlock) && !(curr.getBlock() == Blocks.WATER || curr.getBlock() == Blocks.LAVA) && !valid(curr, desired, false)) { - BetterBlockPos pos = new BetterBlockPos(x, y, z); - Optional rot = RotationUtils.reachable(ctx, pos, ctx.playerController().getBlockReachDistance()); - if (rot.isPresent()) { - return Optional.of(new Tuple<>(pos, rot.get())); - } - } - } - } + public void resume() { + if (!this.stateStack.isEmpty()) { + popStack(); } - return Optional.empty(); + + this.paused = false; + this.active = true; } public static class Placement { @@ -345,36 +456,29 @@ private Optional searchForPlacables(BuilderCalculationContext bcc, Li return Optional.empty(); } - public boolean placementPlausible(BlockPos pos, BlockState state) { - VoxelShape voxelshape = state.getCollisionShape(ctx.world(), pos); - return voxelshape.isEmpty() || ctx.world().isUnobstructed(null, voxelshape.move(pos.getX(), pos.getY(), pos.getZ())); - } - - private Optional possibleToPlace(BlockState toPlace, int x, int y, int z, BlockStateInterface bsi) { - for (Direction against : Direction.values()) { - BetterBlockPos placeAgainstPos = new BetterBlockPos(x, y, z).relative(against); - BlockState placeAgainstState = bsi.get0(placeAgainstPos); - if (MovementHelper.isReplaceable(placeAgainstPos.x, placeAgainstPos.y, placeAgainstPos.z, placeAgainstState, bsi)) { - continue; - } - if (!toPlace.canSurvive(ctx.world(), new BetterBlockPos(x, y, z))) { - continue; - } - if (!placementPlausible(new BetterBlockPos(x, y, z), toPlace)) { - continue; - } - AABB aabb = placeAgainstState.getShape(ctx.world(), placeAgainstPos).bounds(); - for (Vec3 placementMultiplier : aabbSideMultipliers(against)) { - double placeX = placeAgainstPos.x + aabb.minX * placementMultiplier.x + aabb.maxX * (1 - placementMultiplier.x); - double placeY = placeAgainstPos.y + aabb.minY * placementMultiplier.y + aabb.maxY * (1 - placementMultiplier.y); - double placeZ = placeAgainstPos.z + aabb.minZ * placementMultiplier.z + aabb.maxZ * (1 - placementMultiplier.z); - Rotation rot = RotationUtils.calcRotationFromVec3d(RayTraceUtils.inferSneakingEyePosition(ctx.player()), new Vec3(placeX, placeY, placeZ), ctx.playerRotations()); - Rotation actualRot = baritone.getLookBehavior().getAimProcessor().peekRotation(rot); - HitResult result = RayTraceUtils.rayTraceTowards(ctx.player(), actualRot, ctx.playerController().getBlockReachDistance(), true); - if (result != null && result.getType() == HitResult.Type.BLOCK && ((BlockHitResult) result).getBlockPos().equals(placeAgainstPos) && ((BlockHitResult) result).getDirection() == against.getOpposite()) { - OptionalInt hotbar = hasAnyItemThatWouldPlace(toPlace, result, actualRot); - if (hotbar.isPresent()) { - return Optional.of(new Placement(hotbar.getAsInt(), placeAgainstPos, against.getOpposite(), rot)); + private Optional> toBreakNearPlayer(BuilderCalculationContext bcc) { + BetterBlockPos center = ctx.playerFeet(); + BetterBlockPos pathStart = baritone.getPathingBehavior().pathStart(); + for (int dx = -5; dx <= 5; dx++) { + for (int dy = Baritone.settings().breakFromAbove.value ? -1 : 0; dy <= 5; dy++) { + for (int dz = -5; dz <= 5; dz++) { + int x = center.x + dx; + int y = center.y + dy; + int z = center.z + dz; + if (dy == -1 && x == pathStart.x && z == pathStart.z) { + continue; // dont mine what we're supported by, but not directly standing on + } + BlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); + if (desired == null) { + continue; // irrelevant + } + BlockState curr = bcc.bsi.get0(x, y, z); + if (!(curr.getBlock() instanceof AirBlock) && !(curr.getBlock() == Blocks.WATER || curr.getBlock() == Blocks.LAVA) && !valid(curr, desired, false)) { + BetterBlockPos pos = new BetterBlockPos(x, y, z); + Optional rot = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); + if (rot.isPresent()) { + return Optional.of(new Tuple<>(pos, rot.get())); + } } } } @@ -382,6 +486,12 @@ private Optional possibleToPlace(BlockState toPlace, int x, int y, in return Optional.empty(); } + public boolean placementPlausible(BlockPos pos, BlockState state) { + if (state == null) return false; + VoxelShape voxelshape = state.getCollisionShape(ctx.world(), pos); + return voxelshape.isEmpty() || ctx.world().isUnobstructed(null, voxelshape.move(pos.getX(), pos.getY(), pos.getZ())); + } + private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult result, Rotation rot) { for (int i = 0; i < 9; i++) { ItemStack stack = ctx.player().getInventory().items.get(i); @@ -416,6 +526,54 @@ private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, HitResult resul return OptionalInt.empty(); } + private Optional possibleToPlace(BlockState toPlace, int x, int y, int z, BlockStateInterface bsi) { + for (Direction against : Direction.values()) { + BetterBlockPos placeAgainstPos = new BetterBlockPos(x, y, z).relative(against); + BlockState placeAgainstState = bsi.get0(placeAgainstPos); + if (MovementHelper.isReplaceable(placeAgainstPos.x, placeAgainstPos.y, placeAgainstPos.z, placeAgainstState, bsi)) { + continue; + } + if (!toPlace.canSurvive(ctx.world(), new BetterBlockPos(x, y, z))) { + continue; + } + if (!placementPlausible(new BetterBlockPos(x, y, z), toPlace)) { + continue; + } + AABB aabb = placeAgainstState.getShape(ctx.world(), placeAgainstPos).bounds(); + for (Vec3 placementMultiplier : aabbSideMultipliers(against)) { + double placeX = placeAgainstPos.x + aabb.minX * placementMultiplier.x + aabb.maxX * (1 - placementMultiplier.x); + double placeY = placeAgainstPos.y + aabb.minY * placementMultiplier.y + aabb.maxY * (1 - placementMultiplier.y); + double placeZ = placeAgainstPos.z + aabb.minZ * placementMultiplier.z + aabb.maxZ * (1 - placementMultiplier.z); + Rotation rot = RotationUtils.calcRotationFromVec3d(RayTraceUtils.inferSneakingEyePosition(ctx.player()), new Vec3(placeX, placeY, placeZ), ctx.playerRotations()); + HitResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot, ctx.playerController().getBlockReachDistance(), true); + if (result != null && result.getType() == HitResult.Type.BLOCK && ((BlockHitResult) result).getBlockPos().equals(placeAgainstPos) && ((BlockHitResult) result).getDirection() == against.getOpposite()) { + OptionalInt hotbar = hasAnyItemThatWouldPlace(toPlace, result, rot); + if (hotbar.isPresent()) { + return Optional.of(new Placement(hotbar.getAsInt(), placeAgainstPos, against.getOpposite(), rot)); + } + } + } + } + return Optional.empty(); + } + + private BlockPos getFromHistory(final BlockPos pos) { + if (pos == null) return null; + + final Optional opt = blockBreakHistory.keySet().stream() + .filter(e -> e.getX() == pos.getX() && e.getY() == pos.getY() && e.getZ() == pos.getZ()).findFirst(); + + if (opt.isPresent()) { + return opt.get(); + } + + return null; + } + + private boolean anyHistoryMatch(final BlockPos pos) { + return getFromHistory(pos) != null; //blockBreakHistory.keySet().stream().anyMatch(e -> e.getX() == pos.getX() && e.getY() == pos.getY() && e.getZ() == pos.getZ()); + } + private static Vec3[] aabbSideMultipliers(Direction side) { switch (side) { case UP: @@ -439,6 +597,40 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { return onTick(calcFailed, isSafeToCancel, 0); } + private void noteRemoval(final BlockPos pos) { + if (pos == null) return; + if (anyHistoryMatch(pos)) { + final BlockPos orig = getFromHistory(pos); + final HistoryInfo info = blockBreakHistory.get(orig); + if (!info.brokenPreviously) { + info.brokenPreviously = true; + } + } + } + + private boolean recalc(BuilderCalculationContext bcc) { + if (incorrectPositions == null) { + incorrectPositions = new HashSet<>(); + fullRecalc(bcc); + if (incorrectPositions.isEmpty()) { + return false; + } + } + recalcNearby(bcc); + if (incorrectPositions.isEmpty()) { + fullRecalc(bcc); + } + return !incorrectPositions.isEmpty(); + } + + private void trim() { + HashSet copy = new HashSet<>(incorrectPositions); + copy.removeIf(pos -> pos.distSqr(ctx.player().blockPosition()) > 200); + if (!copy.isEmpty()) { + incorrectPositions = copy; + } + } + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel, int recursions) { if (recursions > 1000) { // onTick calls itself, don't crash return new PathingCommand(null, PathingCommandType.SET_GOAL_AND_PATH); @@ -516,7 +708,13 @@ public int lengthZ() { if (Baritone.settings().notificationOnBuildFinished.value) { logNotification("Done building", false); } + if (this.fromAltoclef) { + this.fromAltoclefFinished = true; + } onLostControl(); + if (this.fromAltoclefFinished) { + this.stateStack.clear(); + } return null; } // build repeat time @@ -547,13 +745,16 @@ public int lengthZ() { baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); } if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot)) { + if (anyHistoryMatch(pos)) + noteRemoval(pos); baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); } return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } List desirableOnHotbar = new ArrayList<>(); Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); - if (toPlace.isPresent() && isSafeToCancel && ctx.player().onGround() && ticks <= 0) { + if (!AltoClefSettings.getInstance().isInteractionPaused() && toPlace.isPresent() && isSafeToCancel && + ctx.player().onGround() && ticks <= 0) { Rotation rot = toPlace.get().rot; baritone.getLookBehavior().updateTarget(rot, true); ctx.player().getInventory().selected = toPlace.get().hotbarSelection; @@ -561,10 +762,11 @@ public int lengthZ() { if ((ctx.isLookingAt(toPlace.get().placeAgainst) && ((BlockHitResult) ctx.objectMouseOver()).getDirection().equals(toPlace.get().side)) || ctx.playerRotations().isReallyCloseTo(rot)) { baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); } + stopProtectItemOfMissing(); return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); } - if (Baritone.settings().allowInventory.value) { + if (!AltoClefSettings.getInstance().isInteractionPaused() && Baritone.settings().allowInventory.value) { ArrayList usefulSlots = new ArrayList<>(); List noValidHotbarOption = new ArrayList<>(); outer: @@ -582,10 +784,7 @@ public int lengthZ() { for (int i = 9; i < 36; i++) { for (BlockState desired : noValidHotbarOption) { if (valid(approxPlaceable.get(i), desired, true)) { - if (!baritone.getInventoryBehavior().attemptToPutOnHotbar(i, usefulSlots::contains)) { - // awaiting inventory move, so pause - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); - } + baritone.getInventoryBehavior().attemptToPutOnHotbar(i, usefulSlots::contains); break outer; } } @@ -606,32 +805,10 @@ public int lengthZ() { return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); } } + updateMovement(); return new PathingCommandContext(goal, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH, bcc); } - private boolean recalc(BuilderCalculationContext bcc) { - if (incorrectPositions == null) { - incorrectPositions = new HashSet<>(); - fullRecalc(bcc); - if (incorrectPositions.isEmpty()) { - return false; - } - } - recalcNearby(bcc); - if (incorrectPositions.isEmpty()) { - fullRecalc(bcc); - } - return !incorrectPositions.isEmpty(); - } - - private void trim() { - HashSet copy = new HashSet<>(incorrectPositions); - copy.removeIf(pos -> pos.distSqr(ctx.player().blockPosition()) > 200); - if (!copy.isEmpty()) { - incorrectPositions = copy; - } - } - private void recalcNearby(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); int radius = Baritone.settings().builderTickScanRadius.value; @@ -702,6 +879,58 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return assemble(bcc, approxPlaceable, false); } + private void updateMovement() { + PathExecutor exec = baritone.getPathingBehavior().getCurrent(); + if (exec == null || exec.finished() || exec.failed()) { + return; + } + Movement movement = (Movement) exec.getPath().movements().get(exec.getPosition()); + movement.update(); + } + + private boolean isDefaultState(final BlockState state) { + final List propertyContainers = state.getValues().entrySet().stream().map(PROPERTY_ENTRY_TO_STRING_FUNCTION).collect(Collectors.toList()); + for (final PropertyContainer container : propertyContainers) { + if (container.getPropertyKey().equals("part") && container.getPropertyValue().equals("head")) { + return false; + } + if (container.getPropertyKey().equals("half") && container.getPropertyValue().equals("upper")) { + return false; + } + } + return true; + } + + private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { + if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? + return new GoalPlace(pos); + } + boolean allowSameLevel = !(ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock); + BlockState current = ctx.world().getBlockState(pos); + for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { + //noinspection ConstantConditions + if (MovementHelper.canPlaceAgainst(ctx, pos.relative(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { + return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); + } + } + return new GoalPlace(pos); + } + + private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { + if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.above()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.above(2)).getBlock() instanceof AirBlock) { // TODO maybe possible without the up(2) check? + return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.above()) { + @Override + public boolean isInGoal(int x, int y, int z) { + if (y > this.y || (x == this.x && y == this.y && z == this.z)) { + return false; + } + return super.isInGoal(x, y, z); + } + }); + } + return new GoalBreak(pos); + } + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable, boolean logMissing) { List placeable = new ArrayList<>(); List breakable = new ArrayList<>(); @@ -711,11 +940,17 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac incorrectPositions.forEach(pos -> { BlockState state = bcc.bsi.get0(pos); if (state.getBlock() instanceof AirBlock) { - if (containsBlockState(approxPlaceable, bcc.getSchematic(pos.x, pos.y, pos.z, state))) { - placeable.add(pos); + final BlockState bsSchematic = bcc.getSchematic(pos.x, pos.y, pos.z, state); + if (approxPlaceable.contains(bcc.getSchematic(pos.x, pos.y, pos.z, state))) { + assert bsSchematic != null; + if (isDefaultState(bsSchematic)) { + placeable.add(pos); + } } else { BlockState desired = bcc.getSchematic(pos.x, pos.y, pos.z, state); - missing.put(desired, 1 + missing.getOrDefault(desired, 0)); + if (desired != null) { + missing.put(desired, 1 + missing.getOrDefault(desired, 0)); + } } } else { if (state.getBlock() instanceof LiquidBlock) { @@ -746,6 +981,9 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return new JankyGoalComposite(new GoalComposite(toPlace.toArray(new Goal[0])), new GoalComposite(toBreak.toArray(new Goal[0]))); } if (toBreak.isEmpty()) { + if (!missing.isEmpty()) { + protectItemOfMissing(); + } if (logMissing && !missing.isEmpty()) { logDirect("Missing materials for at least:"); logDirect(missing.entrySet().stream() @@ -763,115 +1001,79 @@ private Goal assemble(BuilderCalculationContext bcc, List approxPlac return new GoalComposite(toBreak.toArray(new Goal[0])); } - public static class JankyGoalComposite implements Goal { - - private final Goal primary; - private final Goal fallback; - - public JankyGoalComposite(Goal primary, Goal fallback) { - this.primary = primary; - this.fallback = fallback; - } + @Override + public void logToast(Component title, Component message) { + super.logToast(title, message); + } + @Override + public void logToast(String title, String message) { + super.logToast(title, message); + } - @Override - public boolean isInGoal(int x, int y, int z) { - return primary.isInGoal(x, y, z) || fallback.isInGoal(x, y, z); - } + @Override + public void logToast(String message) { + super.logToast(message); + } - @Override - public double heuristic(int x, int y, int z) { - return primary.heuristic(x, y, z); - } + @Override + public void logNotification(String message) { + super.logNotification(message); + } - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + @Override + public void logNotification(String message, boolean error) { + super.logNotification(message, error); + } - JankyGoalComposite goal = (JankyGoalComposite) o; - return Objects.equals(primary, goal.primary) - && Objects.equals(fallback, goal.fallback); - } + @Override + public void logNotificationDirect(String message) { + super.logNotificationDirect(message); + } - @Override - public int hashCode() { - int hash = -1701079641; - hash = hash * 1196141026 + primary.hashCode(); - hash = hash * -80327868 + fallback.hashCode(); - return hash; - } + @Override + public void logNotificationDirect(String message, boolean error) { + super.logNotificationDirect(message, error); + } - @Override - public String toString() { - return "JankyComposite Primary: " + primary + " Fallback: " + fallback; - } + @Override + public void logDebug(String message) { + super.logDebug(message); } - public static class GoalBreak extends GoalGetToBlock { + @Override + public void logDirect(boolean logAsToast, Component... components) { + super.logDirect(logAsToast, components); + } - public GoalBreak(BlockPos pos) { - super(pos); - } + @Override + public void logDirect(Component... components) { + super.logDirect(components); + } - @Override - public boolean isInGoal(int x, int y, int z) { - // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) - if (y > this.y) { - return false; - } - // but any other adjacent works for breaking, including inside or below - return super.isInGoal(x, y, z); - } + @Override + public void logDirect(String message, ChatFormatting color, boolean logAsToast) { + super.logDirect(message, color, logAsToast); + } - @Override - public String toString() { - return String.format( - "GoalBreak{x=%s,y=%s,z=%s}", - SettingsUtil.maybeCensor(x), - SettingsUtil.maybeCensor(y), - SettingsUtil.maybeCensor(z) - ); - } + @Override + public void logDirect(String message, ChatFormatting color) { + super.logDirect(message, color); + } - @Override - public int hashCode() { - return super.hashCode() * 1636324008; - } + @Override + public void logDirect(String message, boolean logAsToast) { + super.logDirect(message, logAsToast); } - private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? - return new GoalPlace(pos); - } - boolean allowSameLevel = !(ctx.world().getBlockState(pos.above()).getBlock() instanceof AirBlock); - BlockState current = ctx.world().getBlockState(pos); - for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { - //noinspection ConstantConditions - if (MovementHelper.canPlaceAgainst(ctx, pos.relative(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { - return new GoalAdjacent(pos, pos.relative(facing), allowSameLevel); - } - } - return new GoalPlace(pos); + @Override + public void logDirect(String message) { + super.logDirect(message); } - private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { - if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.above()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.above(2)).getBlock() instanceof AirBlock) { // TODO maybe possible without the up(2) check? - return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.above()) { - @Override - public boolean isInGoal(int x, int y, int z) { - if (y > this.y || (x == this.x && y == this.y && z == this.z)) { - return false; - } - return super.isInGoal(x, y, z); - } - }); - } - return new GoalBreak(pos); + @Override + public String displayName0() { + return paused ? "Builder Paused" : "Building " + name; } public static class GoalAdjacent extends GoalGetToBlock { @@ -885,7 +1087,6 @@ public GoalAdjacent(BlockPos pos, BlockPos no, boolean allowSameLevel) { this.allowSameLevel = allowSameLevel; } - @Override public boolean isInGoal(int x, int y, int z) { if (x == this.x && y == this.y && z == this.z) { return false; @@ -902,73 +1103,17 @@ public boolean isInGoal(int x, int y, int z) { return super.isInGoal(x, y, z); } - @Override - public double heuristic(int x, int y, int z) { - // prioritize lower y coordinates - return this.y * 100 + super.heuristic(x, y, z); - } - - @Override - public boolean equals(Object o) { - if (!super.equals(o)) { - return false; - } - - GoalAdjacent goal = (GoalAdjacent) o; - return allowSameLevel == goal.allowSameLevel - && Objects.equals(no, goal.no); - } - - @Override - public int hashCode() { - int hash = 806368046; - hash = hash * 1412661222 + super.hashCode(); - hash = hash * 1730799370 + (int) BetterBlockPos.longHash(no.getX(), no.getY(), no.getZ()); - hash = hash * 260592149 + (allowSameLevel ? -1314802005 : 1565710265); - return hash; - } - - @Override - public String toString() { - return String.format( - "GoalAdjacent{x=%s,y=%s,z=%s}", - SettingsUtil.maybeCensor(x), - SettingsUtil.maybeCensor(y), - SettingsUtil.maybeCensor(z) - ); - } - } - - public static class GoalPlace extends GoalBlock { - - public GoalPlace(BlockPos placeAt) { - super(placeAt.above()); - } - - @Override public double heuristic(int x, int y, int z) { // prioritize lower y coordinates return this.y * 100 + super.heuristic(x, y, z); } - - @Override - public int hashCode() { - return super.hashCode() * 1910811835; - } - - @Override - public String toString() { - return String.format( - "GoalPlace{x=%s,y=%s,z=%s}", - SettingsUtil.maybeCensor(x), - SettingsUtil.maybeCensor(y), - SettingsUtil.maybeCensor(z) - ); - } } @Override public void onLostControl() { + if (this.fromAltoclef && this.stateStack.isEmpty()) { + pushState(); + } incorrectPositions = null; name = null; schematic = null; @@ -977,11 +1122,12 @@ public void onLostControl() { numRepeats = 0; paused = false; observedCompleted = null; - } - - @Override - public String displayName0() { - return paused ? "Builder Paused" : "Building " + name; + origin = null; + missing = null; + schemSize = null; + fromAltoclef = false; + active = false; + blockBreakHistory.clear(); } private List approxPlaceable(int size) { @@ -994,12 +1140,13 @@ private List approxPlaceable(int size) { } // BlockState itemState = ((BlockItem) stack.getItem()) - .getBlock() - .getStateForPlacement( - new BlockPlaceContext( - new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) {} - ) - ); + .getBlock() + .getStateForPlacement( + new BlockPlaceContext( + new UseOnContext(ctx.world(), ctx.player(), InteractionHand.MAIN_HAND, stack, new BlockHitResult(new Vec3(ctx.player().position().x, ctx.player().position().y, ctx.player().position().z), Direction.UP, ctx.playerFeet(), false)) { + } + ) + ); if (itemState != null) { result.add(itemState); } else { @@ -1010,13 +1157,61 @@ private List approxPlaceable(int size) { return result; } - public static final Set> orientationProps = - ImmutableSet.of( - RotatedPillarBlock.AXIS, HorizontalDirectionalBlock.FACING, - StairBlock.FACING, StairBlock.HALF, StairBlock.SHAPE, - PipeBlock.NORTH, PipeBlock.EAST, PipeBlock.SOUTH, PipeBlock.WEST, PipeBlock.UP, - TrapDoorBlock.OPEN, TrapDoorBlock.HALF - ); + public static class JankyGoalComposite implements Goal { + + private final Goal primary; + private final Goal fallback; + + public JankyGoalComposite(Goal primary, Goal fallback) { + this.primary = primary; + this.fallback = fallback; + } + + + @Override + public boolean isInGoal(int x, int y, int z) { + return primary.isInGoal(x, y, z) || fallback.isInGoal(x, y, z); + } + + @Override + public double heuristic(int x, int y, int z) { + return primary.heuristic(x, y, z); + } + + @Override + public String toString() { + return "JankyComposite Primary: " + primary + " Fallback: " + fallback; + } + } + + public static class GoalBreak extends GoalGetToBlock { + + public GoalBreak(BlockPos pos) { + super(pos); + } + + @Override + public boolean isInGoal(int x, int y, int z) { + // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) + if (y > this.y) { + return false; + } + // but any other adjacent works for breaking, including inside or below + return super.isInGoal(x, y, z); + } + } + + public static class GoalPlace extends GoalBlock { + + public GoalPlace(BlockPos placeAt) { + super(placeAt.above()); + } + + public double heuristic(int x, int y, int z) { + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); + } + } private boolean sameBlockstate(BlockState first, BlockState second) { if (first.getBlock() != second.getBlock()) { @@ -1039,15 +1234,6 @@ private boolean sameBlockstate(BlockState first, BlockState second) { return true; } - private boolean containsBlockState(Collection states, BlockState state) { - for (BlockState testee : states) { - if (sameBlockstate(testee, state)) { - return true; - } - } - return false; - } - private boolean valid(BlockState current, BlockState desired, boolean itemVerify) { if (desired == null) { return true; @@ -1064,9 +1250,6 @@ private boolean valid(BlockState current, BlockState desired, boolean itemVerify if (desired.getBlock() instanceof AirBlock && Baritone.settings().buildIgnoreBlocks.value.contains(current.getBlock())) { return true; } - if (!(current.getBlock() instanceof AirBlock) && Baritone.settings().buildIgnoreExisting.value && !itemVerify) { - return true; - } if (Baritone.settings().buildSkipBlocks.value.contains(desired.getBlock()) && !itemVerify) { return true; } @@ -1171,4 +1354,27 @@ public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { } } } + + private final class PropertyContainer { + private final String propertyKey; + private final String propertyValue; + + public PropertyContainer(final String propertyKey, final String propertyValue) { + this.propertyKey = propertyKey; + this.propertyValue = propertyValue; + } + + public String getPropertyKey() { + return this.propertyKey; + } + + public String getPropertyValue() { + return this.propertyValue; + } + } + + private final class HistoryInfo { + public long counter = 0; + public boolean brokenPreviously = false; + } } diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 852e6ba3d..a185b5f53 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -18,11 +18,13 @@ package baritone.process; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.BaritoneAPI; import baritone.api.pathing.goals.*; import baritone.api.process.IMineProcess; import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; +import baritone.api.utils.Rotation; import baritone.api.utils.*; import baritone.api.utils.input.Input; import baritone.cache.CachedChunk; @@ -35,10 +37,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.AirBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.BlockState; import java.util.*; @@ -73,79 +72,43 @@ public boolean isActive() { return filter != null; } - @Override - public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { - if (desiredQuantity > 0) { - int curr = ctx.player().getInventory().items.stream() - .filter(stack -> filter.has(stack)) - .mapToInt(ItemStack::getCount).sum(); - System.out.println("Currently have " + curr + " valid items"); - if (curr >= desiredQuantity) { - logDirect("Have " + curr + " valid items"); - cancel(); - return null; - } - } - if (calcFailed) { - if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { - logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); - } - knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(blacklist::add); - knownOreLocations.removeIf(blacklist::contains); + public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { + List locs = new ArrayList<>(); + List untracked = new ArrayList<>(); + int maxTotal = max * filter.blocks().size(); + for (BlockOptionalMeta bom : filter.blocks()) { + Block block = bom.getBlock(); + if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { + BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); + + // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that + locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( + BlockUtils.blockToString(block), + Baritone.settings().maxCachedWorldScanCount.value, + pf.x, + pf.z, + 2 + )); } else { - logDirect("Unable to find any path to " + filter + ", canceling mine"); - if (Baritone.settings().notificationOnMineFail.value) { - logNotification("Unable to find any path to " + filter + ", canceling mine", true); - } - cancel(); - return null; + untracked.add(block); } } - updateLoucaSystem(); - int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; - List curr = new ArrayList<>(knownOreLocations); - if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain - CalculationContext context = new CalculationContext(baritone, true); - Baritone.getExecutor().execute(() -> rescan(curr, context)); - } - if (Baritone.settings().legitMine.value) { - if (!addNearby()) { - cancel(); - return null; - } - } - Optional shaft = curr.stream() - .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) - .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) - .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( - .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); - baritone.getInputOverrideHandler().clearAllKeys(); - if (shaft.isPresent() && ctx.player().onGround()) { - BlockPos pos = shaft.get(); - BlockState state = baritone.bsi.get0(pos); - if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { - Optional rot = RotationUtils.reachable(ctx, pos); - if (rot.isPresent() && isSafeToCancel) { - baritone.getLookBehavior().updateTarget(rot.get(), true); - MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); - if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { - baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); - } - return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); - } - } - } - PathingCommand command = updateGoal(); - if (command == null) { - // none in range - // maybe say something in chat? (ahem impact) - cancel(); - return null; + locs = prune(ctx, locs, filter, max, blacklist, dropped); + + if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < maxTotal)) { + locs.addAll(BaritoneAPI.getProvider().getWorldScanner().scanChunkRadius( + ctx.getBaritone().getPlayerContext(), + filter, + max, + 10, + 32 + )); // maxSearchRadius is NOT sq } - return command; + + locs.addAll(alreadyKnown); + + return prune(ctx, locs, filter, max, blacklist, dropped); } @@ -359,42 +322,18 @@ public List droppedItemsScan() { return ret; } - public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { - List locs = new ArrayList<>(); - List untracked = new ArrayList<>(); - for (BlockOptionalMeta bom : filter.blocks()) { - Block block = bom.getBlock(); - if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { - BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); - - // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that - locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( - BlockUtils.blockToString(block), - Baritone.settings().maxCachedWorldScanCount.value, - pf.x, - pf.z, - 2 - )); - } else { - untracked.add(block); - } + public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { + if (ctx.get(pos).getBlock() instanceof EndPortalFrameBlock || + ctx.get(pos).getBlock() instanceof EndPortalBlock || + ctx.get(pos).getBlock() == Blocks.LAVA) { + return true; } - - locs = prune(ctx, locs, filter, max, blacklist, dropped); - - if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < max)) { - locs.addAll(BaritoneAPI.getProvider().getWorldScanner().scanChunkRadius( - ctx.getBaritone().getPlayerContext(), - filter, - max, - 10, - 32 - )); // maxSearchRadius is NOT sq + if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { + return false; } - locs.addAll(alreadyKnown); - - return prune(ctx, locs, filter, max, blacklist, dropped); + // bedrock above and below makes it implausible, otherwise we're good + return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); } private boolean addNearby() { @@ -486,14 +425,82 @@ public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { return false; } - - public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { - if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { - return false; + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (desiredQuantity > 0) { + int curr = ctx.player().getInventory().items.stream() + .filter(stack -> filter.has(stack)) + .mapToInt(ItemStack::getCount).sum(); + System.out.println("Currently have " + curr + " valid items"); + if (curr >= desiredQuantity) { + logDirect("Have " + curr + " valid items"); + cancel(); + return null; + } } - - // bedrock above and below makes it implausible, otherwise we're good - return !(ctx.bsi.get0(pos.above()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.below()).getBlock() == Blocks.BEDROCK); + if (calcFailed) { + if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { + logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); + } + knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)).ifPresent(blacklist::add); + knownOreLocations.removeIf(blacklist::contains); + } else { + logDirect("Unable to find any path to " + filter + ", canceling mine"); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", canceling mine", true); + } + cancel(); + return null; + } + } + // Wait for pause interactions + if (AltoClefSettings.getInstance().isInteractionPaused()) { + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + updateLoucaSystem(); + int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; + List curr = new ArrayList<>(knownOreLocations); + if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain + CalculationContext context = new CalculationContext(baritone, true); + Baritone.getExecutor().execute(() -> rescan(curr, context)); + } + if (Baritone.settings().legitMine.value) { + if (!addNearby()) { + cancel(); + return null; + } + } + Optional shaft = curr.stream() + .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) + .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) + .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( + .min(Comparator.comparingDouble(ctx.playerFeet()::distSqr)); + baritone.getInputOverrideHandler().clearAllKeys(); + if (shaft.isPresent() && ctx.player().onGround()) { + BlockPos pos = shaft.get(); + BlockState state = baritone.bsi.get0(pos); + if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { + Optional rot = RotationUtils.reachable(ctx, pos); + if (rot.isPresent() && isSafeToCancel) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); + if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + } + PathingCommand command = updateGoal(); + if (command == null) { + // none in range + // maybe say something in chat? (ahem impact) + cancel(); + return null; + } + return command; } @Override diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index 38a32f515..7b9b7bc1a 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -18,6 +18,7 @@ package baritone.utils; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import baritone.api.BaritoneAPI; import baritone.api.event.events.TickEvent; import baritone.api.utils.IInputOverrideHandler; @@ -87,6 +88,10 @@ public final void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } + if (AltoClefSettings.getInstance().isInteractionPaused()) { + setInputForceState(Input.CLICK_LEFT, false); + setInputForceState(Input.CLICK_RIGHT, false); + } if (isInputForcedDown(Input.CLICK_LEFT)) { setInputForceState(Input.CLICK_RIGHT, false); } diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 38b1fafdd..ab1eeebb0 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -18,6 +18,7 @@ package baritone.utils; import baritone.Baritone; +import baritone.altoclef.AltoClefSettings; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.item.ItemStack; @@ -189,7 +190,9 @@ public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { speed += effLevel * effLevel + 1; } } - + if (AltoClefSettings.getInstance().shouldForceUseTool(state, item)) { + return Double.POSITIVE_INFINITY; + } speed /= hardness; if (!state.requiresCorrectToolForDrops() || (!item.isEmpty() && item.isCorrectToolForDrops(state))) { return speed / 30;

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%0Dj`bn|_mlF*1xBKzlI`?}T_ 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 IAPE2f01Oq&ng9R* From b493c2ce89fde5f144c450848196e31aeb5404f6 Mon Sep 17 00:00:00 2001 From: wagyourtail Date: Tue, 19 Jan 2021 23:11:42 -0700 Subject: [PATCH 151/935] remove debug, add ignore --- .gitignore | 1 + .../gradle/fabric/CreateVolderYarn.java | 10 +++++++--- volderyarn/volderyarn.jar | Bin 514983 -> 0 bytes 3 files changed, 8 insertions(+), 3 deletions(-) delete mode 100644 volderyarn/volderyarn.jar diff --git a/.gitignore b/.gitignore index 6aeefb22e..4aaeac45e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ run/ autotest/ dist/ +volderyarn/ # Gradle build/ diff --git a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java index 2135c9f17..4e6ae09b6 100644 --- a/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java +++ b/buildSrc/src/main/java/baritone/gradle/fabric/CreateVolderYarn.java @@ -53,7 +53,13 @@ public static void genMappings(String mcVersion, Map mcpVersion) for (ClassData clazz : mappings.values()) { builder.append("\n").append(clazz.getIntToMCP()); } - try (ZipOutputStream output = new ZipOutputStream(new FileOutputStream(new File(VOLDER_YARN_PATH)))) { + + File outputFile = new File(VOLDER_YARN_PATH); + if (!outputFile.getParentFile().exists()) { + if (!outputFile.getParentFile().mkdir()) throw new FileNotFoundException("Failed to create folder for volderyarn!"); + } + + try (ZipOutputStream output = new ZipOutputStream(new FileOutputStream(outputFile))) { output.putNextEntry(new ZipEntry("mappings/mappings.tiny")); byte[] outData = builder.toString().getBytes(StandardCharsets.UTF_8); output.write(outData, 0, outData.length); @@ -140,8 +146,6 @@ private static Map readZipContentFromURL(URL remote, String ...f builder.append(new String(buff, 0, read)); } fileContents.put(entry.getName(), builder.toString()); - } else { - System.out.println("DEBUG: " + entry.getName()); } } return fileContents; diff --git a/volderyarn/volderyarn.jar b/volderyarn/volderyarn.jar deleted file mode 100644 index 5ce4e259ea865e4fc9d148b5b39b253ba165604f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514983 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 R`E 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Þ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�s)WO7S@!*J~FwpA)0Gt{QMeDiPX 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%0Dj`bn|_mlF*1xBKzlI`?}T_ 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 IAPE2f01Oq&ng9R* literal 578042 zcmV(Mn8FKuCPaA|I5b1rmgZh5pl%W~T|wrlivcyYZl3BJoKS)v`L zWyvGS@g!NWXbO_qp-5elO5*$V7XTjuNCASJnW?F=+rRO zt&^yD2U&!F`zr<+s%~~khTf@^z>?E;PUvRTH#{4rw*RI8fM=pt@~2x7Xi}z^3bgILhXG zl%0V(Jpvu$R*WRSlS6iT&QeUPc&{4n3k&Ch5>?|vS>?Nqx$3nSa+d*xB1g4=*cWtabbiR;0O-5c6=a~wHeXYtd@iZs zIUY`d0Wv(@U~Mvm#rsU6DpIq_7{~#{3yq0g7K3<4+pjwwv8Z^PHFor^FccvzurHDw z4=3h@LwUinAz((mhT3KFf2g<65>@Q3F8DH<29wagzxT(hrJ9e!a7NF^egCdNq^s$m z*(jU_%N2(<9yLH(8w0VMxaxk@)jh@)W6$M>gIWIe`ujbruI*um&~#g!W~LA`Yj%#Y z99lb*#$TUMvVE&gm}rQDL>y}n6x%tNtM?3dtlEc`eXg0{tp<>A?Gk3`WCOAJV9tlv z{0^aRy2Qkv#=vl(bpJF}a_)xV3QV@4c}x(Ag{3>4u-wiMv)0Fg5EQ7)GaTE=wzM=Z z%G3-U6iK!fgA8!7aJZC|GZYoC?~5o|qe23V!;f3eNa`-}+%?=&R8&cvqVnAC9Gx22 zrunZkYz?M)vAv1*5w^%TalYH-S$UI2+19w(9V(J?+&tDlgRHt0+QKc2ji2Gxf&(aD2u2%v)5}tZDdr0cS0!Q^qv#+?jGT&!S?+|6e8Xk5X=nEgMi( zPEa|j7F0Vn;2SgUfbuOrr0WGXZc$1`#oET;;7}YUNrAmVl4k_&GqY-q;wq`_?>7d} z#tOHn(eF71%LN5R;w36}hrQsun%Ka}&MSILehzZb&eTD}(~LTZMq?bzR(;VK(AAnF zagT}X4?|Pah-7CuUO*NX+M*DS;D6QqYTWikrvPNKXIOVFi&0p;RoFnVkZrT7=2 z?@egSTR6iZW&vgE33@$j>!|ed!pa5e!b;e}`Czt1MMtq%H?GA)EVVi#9l3_r8pkV~ zJ5)FxUpyg+f1DB!9(0JcxW~2}yU1K-tD$CMr}0Wx*#NOOWTs=S>lTiIg4SMOH?O28 zb8s30hGttk@*4+Uui;16(HYBRgz+Wo2u_ykuqTT%eK3qZjHtn^V}|RHb!jyR)!zM`o>3JYFfY-8Wz|NY*WZ;6GWZ##2UIpc zC}gefBwV{$RwO96y}n?n`KJ9zGY&P#jy;A3u5bqV?2A)JF)(z&r}@nP8czIa@Wo&F zlZzM8aU=))M}P6)&&FRrf`bR{d_P?HQ-8GdCo&1^mk3rDr(?Ewo#O(-6w$MZpptc` zFvqgFuIUyD`p_=_iPi$8IIZoLu-rv3WiJrCV@R$W<{+uEOq?9;qT&aRSR3>&^jY-e zDdX+hs(3q$?XZX02Id})I1hWm*m0g!QIg?p??~w<$TqpumGSj-%^=wt0b1qbA}Ze& zXrC9=a6g@7pF~zC1gV2OOW)`FavWt#RLx#%c(J?Um4se{5O+0L8HXfqQTdV=sVtH) z9j$jsV1Ob&TB)IY*xfBgMXYf1VJ+Y>Ffq5HrY0KjG?Aeg;iETB6MTmJpKXcfTFfwZ zX&Y>h>=NLkTRkyjJx_{4dT9b}2#*`tu1hz1rb_k{#XnGurGx|GA(r7D_*EnoNy|}@ zMX3}cSK~<62u4)Rk51^%@WHHcYJ9|tiR%P?WyY(~`zfliqio$uNd*(kaOcSIRa94O z_yT|henmwVWYnnMb@z=TqvGit_vrGg_kD9LCM?=i){oKe1&;4gF~K2dl*MTIzlW%3 ztn;;)H>`B&CY1ic;hVqygJSj$!Gc|i1YP})4xfTq#Z+4KRQ5cUYAiA^(k^2;jIgfJ zGexO1-;#O;`Dy-hGsXXf3ig801=IP%gTIi}F1bpyZGwslPazQ?(;cwSC2520YV2$q z#02X#d%8A2BJ(4t0e;o;-hgk+pRLAW@B^Nqn^cR@n$u%p9aeVDisw}Kha!t&CXNwD zF`i_p0{z0m!h~mQwR>CF>tAXz^*;-S(Ivo^#@vWn=k5W$TOO9V!nO2^U`8cZa|!eLL53+YZ6G^o%H%e$9#ktrl3sIT_Evp9NSIi0VT;r)CO zPUbJO{sh-%COkjUVdg;KOnY37KIu*i{4b=hf5mDx{lBwEs%KRR84{ zD;|p`WG_~r@M4A7G?iT9=%$n`y8#&YYI3#q)Ueyzs-j>3saRGNc2Zg5_#HQwA`>-NJtfW)IlGa2>jXj(`dFLd#y%yQ(t*6%)jYqxeD)}7qih=S&y&>_GgpuX}(yE zrplW^FvSY)FVtD6VeK1@=QHIk3=A-xDs#>N%fFwe>J;G9Fj_2pn%tmXs`)rx`t&@-$1_xys)x_? z_>;d}DbFX0KT*a>2dl*hi*gbkcRAgPgfkfn95a|wnNbikcs6+slt~~xNVAE*Xi$oQ zf@4<=vaaq9N!qn|$WF+2NpPYRYOn!}%f)MF!wJPG#RRW}ntD;S=%*)J2F0!+$I#3+ zy;rgzo^Ej#M5sPCc&#-@C{ar+#_<~}E45VBvu?#BT#{xwp!^l>Nlm$K()&P7%!cM| zK>o*EhiQgw;xsai4=Jf8*4@0%CCND6v-nT8VY6AswoY#{%tmo^nbXGs^J1LlXHp;ds>VX5f>RS(~+X z^F6U%QOeOmlK5=>7*+8bR+R;clRY{?kPX&Fz8|IOk-_`~Y~Azx$0%D*@Vt6lqRb4S zMRVbnDz!s^vp3_&iNCn=2p%&jE=}KAIT*IO;k=5{dXCT>OA3hNe7BE^2%{iuGs8#R z(FuX`L$yCt%VgVLe*~Nza5PZ%Cviv9G(gUd3h_0h`0k>t4qf^fvlTvrlp2;OTd(r^ zzKTxy#v43Q+$3o!+fbOzBNCWYZJ^acph$v_Hzj|Qb%7Y)k zUX4XF1`2GrRM)RME)7d(ihLh*qtF8R1+d4am<><^J8~U@rT?#Ie>V0%0&RfN^J@MP zNE0ml38~)DeZOA{Zgt%^5~=DJ3saYp!XnTX)OFKxY)4$Fwl#_QoJ8*_dBHG26^ePI zFC@#65tXeENhLGHHZi3BJ0d~rB~hjA^d9N)t9nhR_Z=GHe5PsdxWB$<=TN6r4=+ex z1#RsnD~X%u*|658Q3WlT6F(ajTXdqq#Il4h{&;%Kw(*4;DbaE^wm22J-FeJkPpx8r zav%N5_^^z3Dzx3Ts_8z#Inutw42pTdfm!W^8xHrohi3e~HYEG9q83F@oTI8+f=4*5 zo^NV4UV@jcF?i7nNG@}IehwzgAu=pbQN}+X5^B69ns5a28Xy87sU|QG?O7#QnJ}a| z%4cRAr#I+#MRl8mZv7OdX`iI3H*hkB0Z_|he!v7#BUditF(8O~hd}(uf@H4bd0e@R zutz~pd70D~pF(Tnip>KFqxVR`$k>|1a!!&G6I-G}?di4W@yV@YkptS@nw|)5X%k7i z3%TV~&0{TpYPa-*!j#Jgw*R2>V4AKqFglTe@{Rs@0!RxIC?JI@bL>f z>VX`SP1hfek_d@Z8Jb~6t03tIl)Mxh%X9Zh96ByWWb3zrU=Q!+;o;kpv|-BXlns)u7nR1%lZ! znE2t{{AJpJ3W{&8Eot0VZJaV3OJY_(C)+amrSy3hvQXR6?lF~ntPNcYlVRD89{y7& z$m0G9#=6+_QEv-un_aiG7@C1~ndc<7OJ8XSLu>2;ZUgomkfVDnc=s&yL_W#kOXJG> zB#Y9f(N2+8Xd9l(Z0LmXWsG8hZRr~v+8%hR7!9^>-8MRQsI0RP(WMV;9SiMk_Xa&yz3ep3P4Q>zp*xn zm8>Z_+p?-US%Q*qp94~oc*t}z=DJY z{_m=YV#@TdNADE zv;ihBD>ta1dNn^(XQ-1fj}c{A;plpI6J*tr{&vf9#9=rBPjSTXFh}Ous=;iGRcW37 z$}ZzO(@u{a>+1>HA=pLl?Is^5o0Fx3G4D9<@AlRExiiBi`i2eitTq=UQAx^HXn&5F z%OWP%HfoPPvSUvI%-aA*52LdNP(`=v7KvqkC}Px+^I=j{O##lM_lGnc7y-re$X`p} z=S6M7{zUcuz{ZK8Se(h7I5GZAvF?m@Zx5WN>AD{NeMTt!Q9Sauc5MNFEa>&^1?J$) zi#s)`X)-JNpB0x}TIZ!@YhZtLRFK9TXa%8mJd@SAb_gT1rFfhiHe|%YyU8X$)vG z-6g_jYLbS_DT>Kc*Ip#ao)8?u(iRF*u%m-&y+^Qq51Z%B3lI@%xBOO}V>LCy89G*n zd}-`0D&^}^TqLD)ZbuW8N_h5oVjmGT%~P#a&;qY`Rqi7K!o}5is#^?q?C{(-ZUjXF z-FCS}+viEm<#p};KF(YJR_AnhT-M zYi?wPMw9`xmF(5kB^K)nO0stdncY3^A)q1q!lLx^BtsN*WfXLVbI_G^c<7RbzR!mr z=r#Y{v)XFz+@S&E0>yc;RzEoyjx=C(a4Omc>GvIL03nrtyf##+)n+onC%D75TP6<+)D`s_kl$73JjGfH+o~$*$3w ziZ5weWz;@|V&D^&=FyrYU9F^;O20-P92|2@EBx6DMxdj4%y+aLJ4~g;d8~|A-LE{k z)Dv`aBh~jqss0Ih18UqS&Lug%68i+t%+OIZ97|=o6TKz5GUVDK>UIDa9$&Xmw$UK$&;}Oo4ewqEa z()$9iyOutWd|WGh9ZZ1i1YP10IB8sn*Gc92t|s=6e*xQOlWCq;>Yk3xZe6?nwmey3 zl&xRL`<08}4Gwk~8lrqeJzUCa*W7`hmj;%rEk)^2`Lr{~1;j`Y_|dO^z5ow!ba^pSdS%Zrj%S zncwg5OP)dyAV^G~94|M@#LL)D+By#!TB2<=vglH>6ZhADJOGyiiU2{{N;`L^*DVF$ z05~}NQt$yFjcNY8n5DXqpjw{jzvz&GXsoetO&A)q6)E|sn7Q(^+i__yOC`5slCG!sU^)TYP3yu_Gs4BXOk^_+`DT-H0g49AD4d^pbA+`G^i>^ zIxF-wUe$qGUYK_LeB`RKd=zf;@_Ogqe9sl$TpH^{g^FQo5||n{%Q4nfES7 z6Gj-3B4D+-^Ryr=tKRUMdiT@^TVG8Bgw;tV15eGH*U!D0HHdt|>tHkE;A?%f^wS>w zTx`yZy(i1AeMj|M>ff}zbi(A?@k)Jpr5_h}V5^jge?5n#Z7K-Rk%ZfQ7~m(+-9zrF zE*3Gt04Ro5ri$%9WKZ^88=cq8ScE<%`j!>jsu9=mphT5vhkV^G)j|V81209_jtPE& zy2ZC-R`9{4d=t6^N}y0g`K5XegKCu(GvHcfpU{6N9=KhM1lLCDHu=*Ge8sIi(H_LP z?*7CyUwR;Gu{I1`^giBeP4?n38XVgOTl8m2V_V1}aTEW16wn_7g6c(I2(u;PLc^XRP z_yj$DbHRQ*OzOs3X1SZqkTTXnAq^UNAd@a?^9dt_^uE>S=EP|Wh9C!37*gX}w?MF^ z*M|j;t<(93mjO$v^lpb3HobQp?2wkxC)I+k&sj=?+KT!KtF%t-9oU~dmrq_Jt7Z(* zMk@2Ph9f$?2pf7~=EK?$EP%(6J-n6D)&aV$QW2Djsj=sCL2L{* z817fZPJ8^fSRWT$t|S-29ysC?Z_&`XThHt^v%n& zB#gj-*n6lE!%b-Q!LIR-T-hQ&G%GOgA)9Xj8g&+-3816mdi&tbq!5jyb+-*oo|P80 zbl!6k#Ai?}=RV6F&%qag_gKABv#`8JhKtKvzE(n-k_<5kn8lS!>k2TOvJp#vkpdPr zd>Wmp+ETA`rglx`(r;>OWOJP^{!rs!?p+@2t2E&e!wc2ca6t4^t4 zmOV~pW_^{}x@hIe<6}B+*QYQ})sDH6g+$+P@)Rnj=4l@zG>}WdEZU}1L(Ni+(as3e z_{}DLc-;Ii&wez}ZH+S7gG7WiOlaT+R{3I{<20!S^lo8DP;S{0(&-sEbwNRt8uRfo z%gvN6^ew0VVR2{KqT3G3#@kPKsnafh$(8DDtQd3-FK$!Yt$DUF*1^_#GMTSjPMYfW zH|7fptQVBe?qL@5aAq04KTBqd#6CW>jQ{im(UkV_w%2`_qZ5D3L|L;Qu$XxB>?C_m-*_d!WzDu+Mco`{`3{!b;x=(m zS8F@^xdDzdANTUcp0X>PGS%q(X?<^z8j!?H;<)SxG5xTAc{DwOJ_`H$A3nGa=i2bg zvoBX4>+#5v9Y<2{DrAKh*O{3%^Y2Fk0TbHr)3XZ%n1Nz5?D!MJJNn}as=pt)E*WY| zemNfkukf|O(B()CH$V10()ZlAl?c(qV^S)_R=_3^wE8=W0!A%b2Jfbo#cM32d<4X( z)^ZZ(ubo;Du~?K=77*Xm!f)M-h;yN>D2>!eS~TNSNbx0e?|A>f8YUTqSdK4LTcP&FVy?Rkgk1K&J- zz$4pB_?RZBS(A;BnxAR8XG#h{kn^~*KV853<}#Kj+vR=on63-HB^k-OKb7ISA2347 zltejsG56sjSGBrEy*~JYBy=ufaMNmxZ{oJ)fS}{z(;GKx7?8-j{CIY8RnozWlL4eO z2*Pr3N%V(}CcGS7^0I-WMLAkA(t(46aU4W`7Xeep&<>2LL`E~8+jHV{ zTXJ7O11#3rYHxE(W~N#O%RRc6H=sOXjZ6TQEvN0@6s*dpL$lk=l9}eJgNCdy^M{wp zcLuGX^=Ne?o5j;`7485t=$zDPJoI*jig?Ma4r(&rH5rBk+5t#mrbjq3AIG72kdCoP ziVXq~GaWBFkjei$_u zcipz#6DSriTc$~Fc+_|%LYkTW+}?ptYU!{>_(po9lw+C@R((c{@7a8%cvcYln^{TE zy|rJO43$zl?|E87AfgB&DoaJSVjiGD4`g;H;A?=AC}R~gGnqWZ+l&+)drlu@xF~i~ z2R`?pi}yK7BE3dmsh2i4st=5`%+p$B*t4)LF} z8PsrWMugtU*;i-@dUSd_ zXSdC>NnODc@F|iQuBph3NB9>pV4P8OV134-+8x|$I)GLI<}dn_Kp}6`uO6w}U|N^E zgWZX)_~DSs9_e-q@Blk+$b2ZZue#|}#hNSuTp^V#TLo-gWryi{lV@d>A*~QsNFjeD z%L|NwDfTxtlj~iA5xj)MR`mml<%aTPB|D3$X>9Ei0w^N2Dc5m|f`EEo>e*PUcLst%NTEi{+0S3*I(dt)eum8>E4eH37!J)z;c0ZtY?{R-`s zwFuOq2xiZnGHqCBGy#H3WyHa}>SEZO*@*l0(G{p{iR0zdVqTKkUqtsHCfPs{d2D&C z?@WU*7E@L~3}~1H_Jc7SQ#kPn%_~oJOr!;O6V~AN%8|m$a`?fbqqkuawbSSJUjW8FoX!R^@c=~?_ z$buq?LDsL)ly@t@Ov6!D_HqIxeaz|>^TgO!WFb-Jg%Cfht9fK=D2^~Its!qOS{@@2 zQWDJlhZ|^-aWM3 z)}6$I%^V_+6rFknJ$TrQquaE zsa({FHvf_i7|MVMXWNzcjd<=jnVg+YO0EKG?GxF!2H^Z_@Qf{=;cc)MZb< zVlTrW2aCG{5=&XT875GS+thHk@v^- zm~o-^$Dh|uS4bSL@Vt4WaOzHv9Gl~y<5^V;J!Yf|?J(0M!S{4(V) z&}%MnXew84p7umYnKu%2umjVMTI6Nmp}~F0dKZ^Zx3?LPn)2E^>PKE>lhvlDh@|Cm zWSu5y)hXMT?1H4BZE=K#v25+>jLygCDw=M=F%PEq(_O<&V}wDZ!k`^py)0973I+G2 z!7tBdP}jB!OdC2~C<}qe8Xu#MI&5|x5^J05t!eu46~jrYBz&t=Sm0a!QBy6gl*Kue=E#} zEu$BMC}tQ}wc-YzctME6K+`7e!FPiuFLcfzmdX>fG@W6K z+2%4^F6LuioZtizi7=d|LmsY0du{L+QSgB8mPx9@|Aid(_fxvdt3y~EvFT=%yaHH^ znH!xhb}q0m{QRhuZA+=%!e`Bc@Op@m(P*rQ&3tLjX{jP|>7crJHT%H-gw5 zqgD;<^}Cbh^^P7Mik&@|f!-qpNKyPxwU+z)X_2Svt1MggF(`A<{(<;FMu=U<`1vBN z>|_{RmbstqML4aN8*u!6OrlPBUMt0DSSL#O?L@0(sm*`U5_KSB=-JE^X#MX(sl$q zl0u?z`t(|bvQw8t)-E1SzmGd0%Dj1&u1_MC?U&-l->LCXvWOTy%acI zi`5OEr#gg69&m8L0PrmbOzlAOBiW{+6xf}>2{1UsOR&Cr>p7TH8mOqZL{>cqCmak4 z4NkZaY6In(1b~nW>WFGenuD_oR@0qb7$2gRnmzn3skcV9)8XSoZ`Eah)4}w;+~hly z1xLW>=Hh;G@c?N5)&zWOB4!Xa_-2&Qm|&V<3Qp3+dNRJ`&}$0P6w604iU7)A)=`E% zj`KIj)`4|R={hE;V@=_qREsgx?}3bp7T;+EF=T(bN2$C)d;PyU#5fDW_=r|k$G?POF>VW((X z$B;H?)*bf7w3(mIF4H>TwGGMZc!Sg%I1Ybc?#;MRFs4bjs_&cfxWDyE`g;z7t{lHn z%VCw7_+#U~2c(j~1BtDz z_CfpY{PC;YM)});=$yn|f#^oTPiTCNy5}(uIzV2VA6|8UZqFF1)0Dc{=UMrz9CsyM<~&mFsA<|EX@GBqT`~S?Pz>t zn)Vt*uF2!hX-{zLQurOA_r5mc1WtmxW}Gimvy@@4n5ULLcC!AyThmbs9_FLXI zjc#EnX@~opR{yUh$HK*vVcD^RxVr58STYTFQGJKm>VTERJzc$TvrfK!KkTjuvpdz6 zbtk*OGanuXw^1H;45n{T;qY|@zF)A3*?o#^wg$SyH3JxlT=OB{NG*;7$C@;wH6UHj ziGh7e=f+8Pv+l82clkc*M2wdGk4XF9{%T&JY;o}Gw=!A8bckLZZ7Fun+1JCg{a}nC z#hC^YE~_OzCU@XUx%~bj-AeYR>$|m_sO)O=+WNy0ft0IeosE0T1iW*CJ77fQp5gu` zsSG3nYErr_nn2dqRZN17F!z#4gBU1)`?O9Qh1))}bA1Rnipa}VZ3s!Uj-IV-->I+_ zoP=mqw$f||qQg1w;NL6%q)~`Hyqqh}Fv33>MJE3w@^p-EHpw&ndSYjz@ThlZ&H+tI65vW&4Qh&6Y&;Tm4b6f_tqie6{9!yTqfk zsy+MAIk2KSp)}W%$u8#(POUK4#0hOq?z3tt0EZx6o|G$YUrhUZJY+{fZ{2 z8Sb*|ZkfI>{(LBg!ZjANzn?rjJZ(U1KS>^&*9iy$^1@ftFt~Hi5!VE{xU48x=Jl2l z0v)ZLH<|jY{-b9NG(~BLD?tA3-S%nWEkxdr#peDsGs{cDCj&ba=!}CZ;2jS*P-m+J zZ^of=KD0BQ^<|J=7DL;KI@(i+>M||&fF?V8RG|SH06qe|$(`uIE-SVU!cCMYAR_yA zil=0|T$l}o!iv!Oa7?qIC}+f;JFj$mqMo@?Ahw8yL5eUEBet{z0ikk!*d+;L5sh(S z4Eq#UFdU6#q#=c|U^3I{*6Y}OvsxicteQYVD=wi?5ne};F*xA(}a>60RJ=o-T)MDH=I5yJ_+lE=s8i~45=9oZ`s>HMW{d0vh;9*i&_i;F`- zo(sCPd9q1v7eCW{tpGhw7P;9N-dH)P@7GzEjIcNy#MfG7`?)IdCT#+8Cq3NlHyeTK z+Z^6Ogm%EDi4)g=w=O!khQp!3PL;tpStA>*!z1c?q?b)8(n^4Ug0^dAbXB~2dQU&{Z}rsoJGfw^Z7sl3ecO*%*N z0s%{lyS&h%xy>A*_l)W7t!GB0W)SmE_fL+d=lfSzM;E77NdtafXo&JaXPyJaaA0hE z6P5PyV&KZIqL%|D>cSS4A6ovO)24ivO?`M;IO?Ger)VZSI(b7m+i_i{=$nmkIP6wi zA%bQ)eRB0zJVGdx1pj(XcY81_E-_5U-_~;x{dMOG=-W-76nqEjWfGVBU@l95XjeOhb+_4!ErNn!*G-hI<{%ha+(FKI? zZnJ!re$Ep4$#VD2mh}?%7AkqOeh5PgR_&9 z{pqK($!UAe@-#n!vwmYGl~4-q<>CKndzS9Dah=!vAKi3S@hR!dO0kthQ^)qmO7mLi zIEm8wJC2=eJDqlZ{YUCa%BBRhGk4L+l?f6AKma5`;BmW_pIZ%E{sUv^IeR;Nvx%M} zA5`>mvf0<${mDJ0Qp}&!3X>ejwX{LqDiNUGpl2Andaz62hx$)q44*$YeJYMQwR;Qf z7LT!#Z||><)lvLWlYBFLF0syb);2}d=yLt4wXjdX@(b?@K8T_SWawPSEpB*K0p7mH zNWY8?OacZo3gcoWmx36ymm?SGp!3T7Q5}itTrz*<=uP9#3+mUY4XjsOw^l(#PY5tC z@N)Z5{#UDA3F9;_%0TU;=bCKaCfUmYUgz1x`Q^p++u;2zsPo(*IN$F6UhbX?HEfq( z=HvOFbR4D_m+`)e}rHHn0M%^9E3V zNR<`U`3;do441?lKZR>4hr^>JTfAgwojYCNLtE86|EJ}{2?yZAwcJ5o71gv+2?K0m z75iGO{he(pdh+I9$v>%((J800rEYiC;Nbl23X+#tKvFRf=5RpX@f^7ZgrOjc)2kpE zU50T7bwA+2^!<>bAR_3cn?!5E6h85=3*@fs_$WBfJ);m=Ro^ANHU&=q|%xY+p5QFH@GUkK64eTYewD5Zn_4{C9XuU1-6FqHQgu!mq15 zbP2O?dl_kT>pB2NnurLrxawKBMtcuUg7_k|uP@xo%Gz~-6nh}9Fbm~-xC+g|4s-nK zG#T)YLBZD7w4M~pblD}q%>k+40;9`ddeN<~xTmiWfr5)Lby5NwBTsuA-i5%{Dt7BK zSfppOB$1= z7sWv|Nf(#FJcI(t&HY($bvB!&lQ8%aE}*pF6pf=r5MPC3(5#5VC_$HU-QLNOzJwFl zKrZzeT0|GqV3M9kF?3ogplu#4lG!v(?&fePDR;Ng0?H=2DZHA=QLbYpt1gt}QYOZ; zYbiwO*95A&SP4;>hQT5MYZrnPUx5ol zi5)}ZP)@36v71VjAf>)$SFqJb)ho2orLsN?FlQK=&u+pv978F_aYM1i>^ivwYgQM{ z<{?-=Iz9?7E*5ZlNtNoLK8(z@?N%m;!*o4SualG;pI(O1#bq);WTcX#r9ql~2HOZ< zX@VR@4CasA2LvPVVy0L(lU=r$Q(bN(m^6C#vuUEVb};I;{N~#6Bn^`=p3E*T!ZDcg z!l3*R(PKVF(KJ=yU>zsjfH{;++$rVAg+dUF`q^qOR7bLPGJ!i->SaSQ1_d&elU#HL z_;7?ty`JPN2<*XN5A_&BgAs(FB#tgFhNvj!%4HK@k8-13*x#$!7`!An)0cz;)+V@6 zrHZQ@j4ILmxm02uDCq`EDM5?r?B)(^SH0Rrz#Ob0I9kZHo&cw$VkQ@p;H=LKo6;?9 z_iQ?jlmi`1pv0q0U8~Q7I7nvkFcuRO-X`I64EAAECDd^oz*nDBk{a&8sCP2?awd_YU#N{{%{#dB!aPzs z7GSP1X?G&{-b#6EU&1&Uu)Fdqe+ur&b7SonYUcEz9rZ;2`D?ab7dID8(kb8xtm=MH zOV!nG0gS)jdoR)+M{Wvb^J*OH zu`KW7@aS8%Z)zvouQT{>UT1KNEOfMQ&TpkhzI}UBnOm}M78CB0{!0+9w|7tvhuZ*5 zn#l76+#I7=Ek$U1;g^hs&%hAUNbAaLsAd%qaZ*6ew%c{K+?;rdlvBO@x%*+ESL6zx z=G+)2EW+r9mvNQg=PTJkCl4=Db!N}yBX%1pI6X;<@oHDR#2O_5W5 zij3A%JlS_g-UQ$PynBG|r~=>^tml=A%X;lilUws@`#e}|{<|ALHsHpOxw`a;ax)k9 zDz5%ZKeK0FU-lpf4=t|Gqx7^V!n;L_6UFDu$zYNs?V$hyI z18CMYTw&Okw6-%7jye^W`)_c27fsZWXr~G=0K9$`a5{i2+8na4*{;X+utuHd+sQ`W zgiVagVR{sb@EV2k3qmL`0}7$&HA252dE&pbJz{|E(Q50doOtS>Pps8Hc{o0QCCw|Y~#YqVY{+JAo@XR>uOj8@Cqr5G)r z|L!JVcE>_>O&Hk_V z<)M#42H$x-pYx%k`YN~0Zu_G>@~JT6?0@ge^}hU1-YkmFja=7W{eoR8^*a3wbQ*b` z>4Ghhdc6Eiz51{JDCVa#(j|T|aV>wT;|YvLi}p7MU9>+Dv@n}tRet=H;Pyu>Kaw^y zMT@^kt0k3!;5hA%E_%i7KB+{U9JTah%cDLeZ=Iu$Qh=SKK7|B#>^6h-*^K#Wf7ovN zkGcf=y`wI{e#_8wD0%H>Ly-fZI!>k8; z>C|&Z0X!mHQY;UsW+bZ4Z><^6oA1iAIi>RT)$8K6X}Z^cb#&EQkZQBqemY-omxr_W zmlx$+)!i{)s^Y(QtHZI8Q%N$~MlM%+R+7}P%po|})JgTSFo%YKO3Kj2a7lME(tCB# zV?Kju^PK(Y)?YxqYC%ajEq3ANmE@6nlw1?KU4YO?r3pgYo&5XjZu$0Y^)%2~8AFGW znp>)!{hQile$R$+5&Mn3ZRtR{j$Scse>|mEg>ym!^FoETKAuwGQk%Zgc1t03H9cyH zPuLXYGLSZ&f*cu|JY&l%J!&cOr0tfRo-hi^HE@my!cN!}PIBXAH6OkE-s$#G?0Tck z{;+!=d>^L9IBgg@o=J7|)a=VV7d`&$OJ_nEHqIVAQP&ITF^6Kn=BC;8dc@;sG`mUF zO*0IH2&ST_;yHK(hN5^jO>gfev-xH9umUiS6q~^?jH{RuFlrt;3#Nb0tnCYaG`;&p zX>xG?uDXZ^<1XE~X%NHdLnZc$a2#LfLAnnh7y@xfj5!E2j>Z>Z9F1o)@KlP}1@KH9 zbUwLGLNHD~ns?sAw)@A5QVTHlDwH|8f-{1li|Z%}`rf|@Cb~Q@=KD^c2R7TOinu)$ zEL2AW@?8=^wQRqf3YCAgL)+xtx3x_VF4muPB&dc2uT#teHFwb)SaT1+OH0JaNq4GC z?l`ty^PluyeQmb5zaYRz`%ikWp4O|=Q@OymJUuUHQ+v*;TcMFa%bU28BDz_KRX5RVA#h5ooZJJ;G$^c8;hWhe__6wz1dwQWu?nw_MW8vl zM&SWY$?$xgQRi~gX05GNBC3RucF5AXqST=(?oH|;C!J2`Kq%tn(Q>Kpq;Ytj-lo&= z0y-ceMKIN(>uFjWNn9Z5IV!S0Oz-Z&h&pI-6U-HY1E7509PjoH3h8>qc(?c9x%o8% z=JPoi%59(quubS}yRX>x@Bku;sQ;ES#?s|8T*!DMWW^lswSKAIuT*+q;Z~ri z;|8sM$7$IWxE*s%%{@eEh>8K=={cTeli*fbG*AQB#!VeQU}hdQy^s=AUz%E=06aj$ zzda|?|9VXA0UN5lR&#=5U!ntElk8|s4zWhWT$5nxxsG8G;LO70$czne;;?gM#yX+Z zjhe`2 z8!0RtN8QKlPyIm9eznPefP@iH;q&HZr|F6LB+m+aU)@cZH_zNtw@}A0c_opXqgyLa zx&xcMxaI1ftow#YzXc;IT4Gb&yPde-Dem_UD^;832$MWv?H%~?PeSmH-tx5Ix8{`r zm;2Kn?N1ch6J_T^)@{{uweomb?|`9y+MhW3+kP+6n^-JfuGVD?Y3(~*Tg{s$K zII$wHLxT?l$kQfLXA5`$;YfRJLL0)-1}mPDK_N+z8f6ecTwD@l5EXejQVt4+q9s&L zd#eFDX%vc(vU#>sL5_zL_Mq=D*&BA4>~;23pWZQCAJF>P^SaAx>N-(&&kj*gxH|JJhgFFFI0gvXeEq zn>q}*@dcb{;(6^S71Qlv_560a0J5Uk$E}`Z7U8)FJ8nZw{ZEQ zH}TN3`5*??Ge#>tP#LTNK%G}^K9LR+PG3^kxr^gVUuRbea@<+{q!_V*6UG&yT{tul zhW1sME(kS>cE%dBgZVm`gI-H<0OCdJ!0CK{`qEryILb|`nQbo{;`SzVUaXgo{jVup z{Clq{T>Kxsrf}U;=<973+4_o6yTv(0BdC+!nuu!mxa9eYu4G4{oi43hs_ z7dbU&;Fa~zd*+~>A9DviZx1I4=%eZ&9db;KeIm-WtBm<^j|xBk#3L3t5-rcL&2x15 zLw=0jGn>{BE?Q^1x1ukzGl3-3>l^&x8zq>xX9T;sAfncm1HcGoHP|@&y32-c>Z~-< z2*jP!mnw|+UQ4vZpJVj2+wS+rUAfKu%xMn*WD8W0w%aMVv5W5K;Kl;o!+YlF4&F0G zxA4Xc-A&Cq6_u^?pY|t)ezreR^uuldY46QT_N-nMHi=NQV@lWK`jHFH_Y}kSSysbE zf77DUp_N61$9s())tiel&F}-Lb^l#;8^UeMXh52)lv?A^ZXyZHM6yAi2VCXYT|o0S z9BZjj{nfg9*4|vr>ZVByyC_v%wJnhTikx7tZJ71ZG$Uku?^R|U3X}Yy&y--dHnu<& zTYKr|zDIUtJkuMmzE>-`eIf2iHJ#gWQ-8R}Dn+#Kj8%b;BVFWoT=}}aPtl}^y+0k^ zciC0pLjDnm>#?o@$VdsVj>paP8%I9dc>Y&wmz(=V=*Y@NMrcje|d z%X0(DzshoL4-x!ShdL^?*?PJAn(YsUUKM{ut?KaP+*A zOJwtuMVmTV->;Sf)?b7~z*e1e{W!5P=tK3V@@BO8C@I}MPa4unW~{RgPB$IlK}`P; zZ4PJZ(c!?HO7%4=SBEsOt4-^pN;9$i0YcarhH!Cv)W*Tn%G~PT-QE(qO{qE6UKG{Q z=UaPbBG>EJ&2pLSn}D2u!{PhQl7Q~8l7OxjD4~i~12mHX;UGZ5e*?tv(d;@2<1`)w z<&{u%`aZj5QAK+DEQ>J-6>mNriV-FyRF08N{*TIO!2`HxF^{iDA$SCe zMsaktC?CEx#MhFosdB*^k=o*655M9bV z$KpiX)O~{*L96|_^k#l84nNn`WJi!mF;zDGwINey0Eu<^smdrSAY%8l+-Jf1?b~vw z9qZ~l-v^$npzY`N&%vpo^ZB0If*rysz0hy;s(87eYt)yepihpb8u1s1bJK3r$7*nYK*Kd zj@&qO8#c2`55ZAZ+2!Ea3R+Dt=y-~0V$+{G#Axp+gn~ODi!hpVA6meYMx)VaW+cswrmCyW(r&JXqv<&0C(L18VrWaGJfta`b;s1M2A8A7 z<>30dE0>HoXOM$+tjM8`1DmYyuhIPTbaM0Qvvfz``RzM`XubYiY?|fPiY?iCs@npp z>c*CBQafr_7P047*8z7b_5FTv(`=z@b9iQ@b8kVb8O2FNr;co5A3!!~sZHFRKl*?6 zbaD>=PuVF+ug&F_?)HXm>dxY&cmHL$zJr?B3rU2-*)CqMgv5sMOebU&<0e!VZiI@B z^LKc!ew%D}klk;zd5zO#Qzccy=*^$f@$$46DaEx4& zoFJxZodb0P(nnqBET!Q=T+5ufha_93@fNrVw}8x=F=hylZNK1KQLP=N0KqS4Ms;G6 zzV*)uzg~;;{EbrT;N*W|*CwY1?pque+6lOUmPM~*o46_CM8vfJb(5IJ`g z7cf@fxd$-HQAkw;u%{fel5ago2gzV@5K{9d=reCbDJi|i=@N>5aW+RWi8mBnxOw0@ z6>)<@mke$8g2V>hq{Sq=NRyYdB+nCWHw}lw&aNy;SMS5z!={_pc7)Rua-D@pt@t*V zEAt;oQJPI2>K2z#zT}oo7>1n#He>_dYt!Nl)31d*=77o-3C9N=(|YVw?K<6U$g0Mj zRg*%NPeex=Uc@HMy|u^#EFWrX@0O)BVy`h`6}y{m&ZF&?Y*zC`sM9|cwMxaKbN~mo z3JXnKRpTZ|kEX5A;@g3$!U0M;@U%>5C$}=ICJt7?J&HXj5~g<9B!R6hpC}zuvXKk0 zqjGk2RZ(^XqNU&D^qF1$7g4CmY*}_b+c#=odnRvvl>)v4myOx7T1Oh9p%&~b)j)Qa z+WCg`1`NGvLBPW(B(F^fPM;yJ!Nf4viPt1$%azv(aV;i3W|beC0De*`OOnPphb_wEU?6z_(ycm%6+K zHF)Ob=il9?N9nm?>H>5Rf^Jr%3}b8=xX&(8xZPN|0Sd^OS{|2kB}eMo?@=!#1-1MgIvc*cw8>m(yt zE=;dz>^W>)Eu1aaYvRyMacJU#VAq~aqKOE&LEGX}Vwe(&=~?ADQNb^5E5U#o*f!>M zzF=IKVF!rbY^e0+tF;grA~&#fMx6Uvy7GYYZ(D?b538{#*wYdS0AucQX=Nn_!s;?) z^V{HCOUsbN5r^R$TGm37cH%c@-gO%@FQ8}F%k%Gj#^A>*ZNf(+B!e;~8AX4#C4^8;jG1FuPE?xmg;E?2+lFbDPw*^eqiHx8hqt3?6G2N`iSj_Mc8?52#VZX) z7KiDnf}3$~z9@a;A1dQnU~p=b?Y1jQs?)HBOAxh)8sxE^Vi5~p9lg+Y zvQAtFZ)WML2#S5B-Cmbv+XpoeGh4U zShk+l(D@;Ttspg^8j~8cb`VyZMiQI5W%Dsfw@3#Zf5EjJp;ig0BU#BC-5$itar{h9 z)y$!Tb)es2GC{e!CzFNZK(MH4X$NA%>yma*A*gs1H}jif7&W1CFl!L`LHmNr^}2k& zwP|6|j|=QJxeEnOQ>-=0T~RKph$~lhVO=J#u!%;ZN))+pZ1rQ-vdVQWsrAnnRA6xD z;*vBb*({^o<5NERxg_lN_yii2I6&xmb z?b`UUwNKN@x572$PN|9DGl2|i$LVn*Y67yf*?ce$Cs%{%cjZQ|Hv2pcul@p*WxQy0 z@FI9!f>XvH%acwYPX_Il`|@eGd4{L~`hyMPPLll~drHzgJDI@`wxbG7s9-n@82JvMURyCCnY`gu9fzL|dft2p>wA|pINZq z`%dZvL|}87KC^}wNlIrf-=@iuWLfFdb1SkGJw9r`B#tUXoYRSd?Lim!(PBJkCZh+x+c}bw|_a%aS zLL?@)ubI6$?&l_GGk*4CNs( zpzKCJbGoM_tAZ_(ly1N!HjCv2UYkjFS^oKzq*-kt?B7QgA%L2YMm1yyLSXw8&6|IB zft!*wi88`BJbNEd2cRtrc#S`Cr8LPCYWx-@EuTtp6lb#>Y{%*sUVu-Z?$dbnNKPK< zKuOwSBiWp=ZNMkE8j12^Lm7rjq5_?|($&t4xvM13 z2nrHtg=3lE)qJzsSebr%uNUF;=|^&MfI`RoM+ZsN<9TD@U3 zUDGvcwC(!c-w>m~&upWgOqKOXA|tTecd?RSBl$j}rr9YxsN6A6Ka8v8@=Gq9#Od|@vwu3ImR!cV=9VPj8t910OL^FNkS7+9R`>C2;EBX0FcDx$Y z@z0Qe7%4S7C>x8~iaR8cXiQ#78RXMGHLhS>2Yz+zMa@S@L6-g!W$ge_)>+)Qtt@8G ze@Y?wPv5#y>Cs0$Rw}=pWo^f{4qXAJA6Q4#uXaOF;T6jtuEF<`$UgukUSAaX`sFiI zw?yy526Wb!YAp@Zqr&Z8oX-cX!*(gHK!-c|L6m#e;RFMy1$aTC_+m;Tvo>?s0*WfjZ*RaR9Vq{T>bN0boZ+LS( z4k568!Qze2CpTAfA=+61io;^Dr(Z|I#YH$C0ian0L-rtn?YHhh7}K9HQFhMfyYx)C ztM?c1R6-^3!c}(2UJhbxEwq=boELPLE{U^n0?5z8+fk#?v9!-47Nma`&S%X+LxY!X zDIv#;%falgX0fh)o=n5r$<-WHkfb#TaN>5?vAG=Rc;L=L4IJMp1jm$RSW4fTsF>Qf za5(?WMJGmCRJ8+<=ilGriNc{CQPo?xqOrQ1+-Q6*kLV znnG5sBCZwI*2NAEbHvA#;uMfvPtUDY}0ggvxx7(0~u|0FX9E2 z!Tq|5jazwV@{u?@h-Tj6@%M7kFY(In;|;pj3_MPMu{(2Hjc3d)rP(qQPS?3sbz^KOo-Z86*H2q-pfV z5D@lIwH~q{+eOr~9EH84$F8`=h@`yFXy z;{L;BEnZ00f(t=44Z&^l>nJUKlYZMo{z3Mzja1QxPmf!tQ36xKUOasGg7wgTAb8(i z@ei6!Q(GnDB!b8Kza?p(0ghd&C@tWr|9niMtn!&a%a{jcM%nWeT;*FTI1n`@7z|x! zWYof75RqM=qDnBn>>jB~fE_9tBkYjs|4&K^;fOa9ejyzH$Z@|*_1JVZ6n+yFX0;%c zpF~h&$?AT<_q6HR*zwOkis2jkc z)AeLFUkD8p`tV(Cc0KrZ)mb0gZB>_+?Pyn%$@KyrQh`jK-zL+)MpLzpUE4GvLFUal zV7r)(E=JSQ)wwd>zHVsegDJQrDYvjGy5Vf3$PFHz2vd6$c#ovYbLeZM%j@~~o(ZHC zE$s=pS!3TL*LLeI(R0^dqQ z%L9YOrrgXHXWtjo!PTdcGExrD0jxZFySS`i4Z8R24J3VEW2ga+99!izVWBlan@;D- z>o}n6_-1-BI2Tjm(psjL*Q#C#57+jzEjN{yn!-v^yUaKWKkcodf2Pu2B{2TthZ2c> zMH2VE_A5gDrB`cOL8*kg$&@Z|(s=ZBG(P`)bJcN$*8#xAF>r@A_NgG6%qP6}rKWJk zugdt<$$lT-|IUrkfm{Y!Lv=i3QJ?%LZKqYJX4vgHpLu32vO*z-a>wpVl4a2&LBHgJB5CUgg|lcCgIgK7$0V{Qjulaf-Rh3BgT} zdf*{Rm!!Ud3PU-k-5$#s00ZR|sX%sbZB3pEm=|=gx|qkw)E$#jFxt%H<+HkXv+hs> zC(amdu*S%$B`Aw!YJeJ}pHv1Ekw{;)C1ft*|FciG4N|h;v%wl3j#f^=qQgY+G`zya$9!*Dg0=c$reIvFN&@J<^;2B3?yyL(?fQ}S5P)OO zw^<^+Lr!^K#K=;^cFX8hR@T6ssR2kHTw~qDzyu6%u?T{{8Px*YVwazsdWa@>XSfcF zovFeFMG?=|$Qa)E;y~CupP?-#WE9II>C$%FmUhD%6o7bM8g@9G1G4;q&sxR? zMxcYqAFtT_7hq7LlvcxQ^ph-ibP3H!`Wi3Mxwi*7KY1P=mf(S`iYgKT(Pj^V@Y=mV z`rXb_G=xgX+IryEF-1~;(*AGAu|M!U2Z6Um@FH@v-FCZNiiOyGD2x-_i#35=Q2}>h$ow6`wK1Y zZQ%|gJAu}M#5FYV5~qp{B=SZ46CMsrD+i+*I%Tg7n>1xvQ?)>oZ1G!*Raw?LlXvgn zyWdhz9e23aJBtBYU*2R1SBFVM`B?7&eOOxl>VB$G2FTdk9R6)L~hH*Xvj+ zb`X+ZlX%q;)k|4QM=TXAqJBdJQTifDpT8vW=9&)Y^tihYKTRt*6iXZnSr3M2J^Z5L zw-FspVQ3PLmW>;K!KRPl2MBprM83KHI$soHj*r?Fj=qNE^|E|8_juoyEfN_a_I6#H z>e|a_TNNF`*Jj}A-5XJEkFku~Yi22zPXhdwNy2N!E8Wn9Cyu)QLbKs{R7~7Q%jey8 z{zNu6ERXMRv~&Sk7a?m493`q3OwT6Edx7KDT;s9Wx8@2D_zKU+GTE%MSxnXHXqzm{ zx88b#l`78gv}g$_n~n@!FB-RB_I-}Brz1M`@I=HLlH-mRujn$4^EaqbR^XtpMxj<> z_O#1a$&bxJvKf>SPg(>~d1+bxu@;B#H7pL^z0%$eb0B*eqM$;ziaB)S=)+0vk}^`x zjPRaqBi_ivx-gKG(o248L8?B*s^4s+hItu%e;2kGq^P69QHqy@o4i*Ts&BW9!1m#_ zSXPd%Afom9jaO~3q#4*AT4sU0STBB)HDWu+8aX2mNlFxRZ9$|TZTjW)b-aAUg~{mqi; ze;rK=pQ6Pcz=~YsWb;_hZgmh^?>o!F27oS^QX}JN1sbq{R;KU=qf%QidO=$kv~x9ImIo(9a-2;m&gO^WT&EZS z2^K8w6`J_CiQhR)M>j3#@Xn^S$bA~QkW@UI#ZJwq6<{InT}77?>cs%{8^vLmTchZ zV`^QF;|*y8f?!bi}t!L}7 z%8S7aB-|vxOjz`B{0Kf6JI8il_`tDC>m&H@BugU$kkROz;tAO0Q;hq4cse_dXEx=cAjk*oOX<_IMXQN)G_ z^;lAGPyBx$Prs|jGP+Oeixc;k`c~;21oWO@rOu8yUu++jq~Udj zz!<_MUIYQb=e+fLG62H?YnpyA*Rvnv%~apQVUXtV6IBZ%{=K2T1t_v9B>g;#oEZy5 z>I$-*RJLEK;#82tp#^|Oaw_3uYVc{V*XuaI2F<9vcsYcXd5*Imi`^H?Xu&B29ylCVQ3`mkO< zNd5m|yI#F`BmdL(g^9A&fGvc=K;#OI95|Buyd0o39XJ!!Gu5}pdXSkk0IiY?L`!s_ z6%ZLDA2c=-EK?B)l^b?QNGw613X)LPKyoa7Irv@;{-T6nfcE0$-QC?V5^+ubetjjh zecY4^kFLL@1NRMgAl0oC@gm>TiDKuu6Ag+eABZ8^>nIrES)j{EZda(@t_@7=6@+s| z^E_`VEJ8sMx`&5tAWIXwn(c;-TmsQHnjShd7_fH77ea8FSCd~JkqK(JH%3n({zuQQ zYW~9fgOZ}0QQWJXsVmlfUu2ukt20TF;!u%_Drz+M=1EkQM58LD>5LTB-;bs-m5r26 zWecfKI8kX*c_{sM3omr6?ONrd>91Q#r;{PPz;(-?rYIBqjbxMMY`jV73dIZLm3H!J z0S7Jg!(*_fZL0Cci?T*G27xVi6AzZFv~91C{x8W7({l(cBc|M|)a&)C-j6V+P}Ob* z(j_vY)D`S-{e*CE)VARs7A2x(Pm~DGH-MXuM*VxzVgr=xwS$4KHCIg2N5Jh7PNvfV z@P%mhGk^q~3wfJ*rcTrlREv(O47R}+N8OF6N47!MwaTI2#1E=^WrV$+YBq5sa$v(f z7fd~JZ+HTVvy-S3M-O`(9v6-Z8x+{A{gB3|%G8)Vn!&4l<1YrZb09cnG2ID8%k}DE zYvR{_{n#=G6EO82DY*Te@vg`5a<<#ebjFgTzw-^3HZ@&YOz;*&&UJY#)styfi2RNb;vwYy!cPEJlwU#&N4sJ>;o*I}hfgspwz92c}&*~e)eYBK2M$Q=|y z)#RYQd2-Kf^@Ku%J@~Lt7s~yPt;RC! zI-_ng5r4oO{t0kIDZqx%YSK>7%PH3OyVTgGPfOjR(cDy{L_R6t1o3)_(sbkAmgSbP zeQSl=m}Bn<_gu)RAUK3{D5Spzau0WN_8Ro~LCjvN6&!mIlZe2VOGz1`JGCC@E?3n+h!YFhOzIqh01 zn}qS%kM<$-wvg$yy=^*shUbm6Lr=pq;cVge?M|a0 zmBMtdgZ4ZNU#Or@5H-ZtEtcv68$M1XlW@D6@%LE|N|-~GO4IN+x(Bo=HCbE1QFRM| zsX~&i^BSCjWV<#`hQ7sRwrw|bSKHcsNo>EYS>U zDdBZnleIiKlU>BR1(r^qp?h?uZxSPRts0sd8*WY3owj)Vc>pX-e@z3k^kI26diU<) zd~|YqVK!nQJnBsvi~twee?DA%xHvxmmWu4`^~G7Zb{{JGw(P$Vybql|OH*cf9=Yry>1+V=dp5kX;#^*vBGPNxjHX3|b1Yq@hrpVsF&19xf zS$IQmWJ5-#=$AUGDaGSRp!g@rdCTk~TZMr7j>H67+1l<1`|(=_Kyfo50; zXITg7(%&D>C!x$?E5zq06?J7qpGsyn<@$_M@sD z^!{q(%x@pJBEbS?WeyEbt(i8KE>+EIqy2J_S3SSXMea=rR>~OHcVJVCa1=)8IQ$bF zPS?27*A-ZQNSpOsnv8n&qo8LWQO#rjG}?8?GI;j1f(uDOSJ5(i*hkmfF5G6NVg49O zJNz-;+Dxen8?K0M!d>FBSl2Fi46giIlksx$v>dC@!(1opZadab+UwVAiP*a?g$~^mdI^M?0H+xDT7uog2pQD@G>wl{ECvPuq%|(6#zTigvY*y0xSw+?q+M%D3 zfmX}2pM+!?jul1R?$(>}!weRh0};zsy)|SSS+$6xQ>q?!Urrah?fd1^_SO2ym|Cac z8`4EqfgNNR{b-0yV;l;wp%U!{*pi}LB3FsfD!lbtveD9*jwA4Mk&V^F&5#|1k-*1w z;A@*6rji=SUT_XhkB3CcM4r3AQ;^Cu8u2o*zO(UismfOv-q>HWr2TqjKDB=c&&Z=Q z)|)ou5-bI{1e1cOsALYr;~ZgxT(bjHC+;He?$v;0rccPgdzgZNa}kYbcPtyK75m8f z%aWJ*RO(FOT@h&-x|uAg6FH#6>0;+Q7IWi;Iva1kOXKX_c>DFaJ(r>co=etvE|1fV zTQC$e(nJ}!TImD^t{n4b6e%$rIHwpIF}NU7DNqLV?b@iPzcCJH+_X1f_B_wb+)8U% z_CbDxcvBTd@kkN|*O&uvo*QrbZww!*!s?C*Xf%AN-9!#OWmy^(v2IeGY_#FR8hjLE zTihw^poSF9RU*?gDTb$NdchdpB3e^gIYvE}!&cq%oM@V#eUymZWL;^ok%mE)9%{Q9 z#eS2iB|7#chmVmCJ+@^>giqu~L;7Ihq?RiRYk=ujAS&!+MjFhCC2~A#YPNq|jX(Ih@L?Mi? zvXN_1N2(}j%aPjncf&jBV2kW=wo+XkP8-!;PL>9Xa09DPvV#pFit~;jK!a>@2uPqD zhJZqoA(l-Xy|;-m4uNcpBYclEU-KfT+0wf~pfg_}niybcM+sPVUkm=E7?&tmJH{10 zg#fD5Cc;w>ccE5;s_>UQ+4(OJ4+gRBz*i*uww^BJ-_6U-h}d^_hw#E^!{Z4;1+}%h z6$m8=sWE*SZ}p`VKgUR9vu0%>-Io+Gi=;M4R5WonUf3M!y()UqK)zH2Y>fv(%Z{2? z{nfqHC@h<bh%gcu^s(C#KJoMwcVW@tdD5v@jr!IFvXN<5D{-XVaTFiIo1g&o=x2;*kUA#_ls# znc>dCh9?8}v`wY#8OQ0&u@GnW54gM$47?%|8Lyd#daHWN{c3IrsdPZ z#&QBZ26~QOVGVqL7#?&OcxxoanAmN*5`Q{4$W50@dTQ7r)jNb+X~_xRF@mz`)3r7^1PiKZ-SoxvO#XQ@Ua6FmuW)`|Z)h|nT43s@M5p`GNP40>hZC|U(S5*NSY*Rz zBF;b8mr{-??3gCxja55vTOLArO73G$RZmb3y7i7m+S}}MYC4@xis?-q#QOijnBds- zAD}K3jXnifora!m%Kd#gG>=UEk`&OuO{4ZgFj4Zj2~)JZDWn9jBAPU;FAg|u-kkmP z=_rGVgFO*+o$M02e4QyqNNWx&h|3b$B|)2y2tVWp&RffuL#Z1J7uB@S=%)mHAAfvY zhI-j`jG6^=JM$)cJ)J5rEo=S91lKHlZ7XXQyvZ&i;Bky19)^9E4{@LMl;k@-n-*y?9rhzP&p8 z>i~F`t8}89+e1K6c7E~d(GM&zXs- zOOq;?CmeyHtfLH&>IAZTSv@4Kp*Um>MdIM-kik*X;K{Tfxv`&D2MWXdZtVzaIMK+6 zM#R5(IZ!27HIC6bnKi=fK=ZVCsB*c2f)PQJ7p#QwK4nd3J4Y=Kk2I`=np~=zRbcC8 zjrt7$L{ayBJkYBr@;$F!ko+mRD|J4eGrQt`mNd1v&J6G(GJ{{2v|C-f;kkAffS%6b z3G{yL>n(3U+gg&_CMAgHyyt;`u)(ul%A1HTE#NbtcrD2Nu#T`9fryc4Sm%)D)TE&J zWrTi%w+?%URZz_i2R05bUMAUZq)4;he)Zie+zCpnaT4!YerWwQ%`z=(uavF*(97__ zQ6v0W@;ZScRAOS3lz}RbCj%5}?Du3*mnQ$E;N7h+?{`CT3IxO}dUFnvbtO2NWpzKu z)WmsS#LLwXRfDl#jE}DR+SzNy2=&b|cK1T{yL3TcuDpL%WRG2oyggp~2xlk&feH|j zn=IGcnfb5zr$bIv=>{)LFgPG2VB!)*Gj}u-3>Aj$#e=06P=4?Z>@Y7N{mbh9SD1I$ zsUd(Yg`PP5jzk3!v^!HK)R(Dli2_I9&7algnVku`wit(y0z#T2AM)F(CYw3@oK|!5 zc|ca#gbzdrv(0UkeIOKyldOjcDB^5@a&RQg?e(VTMSg4eU+HGiJrwi<&$Bc@OC_$7 zral?lc_3uJH#Q8+MD}|0=j;9*QO9z~j_CY}^qVzyBvZ5}+cOnOfx)WrZ@$zK1=I2B ze$aGD>%m|GbEV9)WJKMmCGOM~1!*Ky7y}21A*8;OyLkjlshsMLQFRw$syvnUa$K?f zB|a&*RGomYqKxv18Fd7K^)n9T8~i9Qg(hja>lXe9uU8J7Frr%g!tDg|<3#}zeV)St zY3i%j1J1Kh8&lJ26c~G4)lHZ-{~W#-FsR+jRjciW+eE>59S{f|A$W5Erp}E@5D;Ia zqzSBfJ$sOQdAd*;l*TymlHy9{yl4d~^cm{-s01Hb(*z_Hsc$$q)MEcoH_6FO#Die( z5SHPUqLPtehfuZBi5x^i>5=_o&}G1gb!4)b_b|Yj%=h9Gn+8dgj?w=%A_*%vKGvmB zA~Xbm!^wGcviiPQo~>8kXPez@6HoQkZXfF`A%#xOwJF-4Pr+|xT@c30=8^x-vj6)7 zCN#@`!n!(%X(2srf6udjBg!F003Te>>2hdOfJChhZZfcd@h zCzMJ0ZpNyC`=fsPJ545ZzMlh~uryM?R1I9%-$|mUuRR*bFZ$m3vV2rO$_Ddnco?& z`KDCuspf0b0K@T|Tp@v0Ov%DljH2}*W(e`Y@J{cloQQK26j<16$iIg;0v}n2;OX%x z90+_viWDbj2WoIUpwJT9IGDUEl;_|R>y-6B0XHbYY7dOK;%r zAo*PBO2$xipA0MKM5-~mP9WW;F_$Eex>T>8c8^cHR%2|5O9=v4tf(eEgPz(!M=Lj; zKNb81kU9q%Atv3*UJ1F`J$CEb>XDmN{j08C&^fcDHv==r?*qjuA^!y_nKvphXEEz% zozpZb0hJiz{!x8F2F@j6)t4?3b1(rx$ucU2wHy=!E@}eOt$Cr4Eu8$kgNp}}3WHEZ z*ZxB=u)oMR5!yh`N@!9yH4u&&`N|>!kfeZ+WwmHcH(KrXX47r*^)oi)ds=}H13j|}e z?Yo?%Y*q;oW7RySM>ul?4N@tNwAy6m?o=;Ql7KifN#HSuashN?%Z8kBN%3+2y3`Fe zY+a+;+2t1<>21YLRP%<^iRuUGPDf9YSkjcqb=_$V0-rDmRbRsntIWk`@YduESs{eg zbwBBtw=CP$h<)!qbnr9}RCHyk7w11$<8O<})#J7!$0+t7Pd%sxCX29_WA9u*ACbgl zAf)3Wf?gKV)uRGe*`k2b&8<-g<+Pk8LSYA$vtGqvDB1Rjlw$^hwgN>0dR^YoItvOE(xPQ~&l7MT~#VFt0^-%(Z<6Yjvo7e+5p$a27Aaf(^pE?e9Ra6h{ zPZXar${za$lYI(cGP{76J?)Kq~V(;7vbGqwK1%hW3bPC>E)*cn6U};DnHV zh24`U0xXDE_k*0o0wH_#6++$P4@q{tZ_vZ%A*JdpsVhL=bk}8`hu-8N!l{jCDk_$m zh0?tY(63PH_L0gvlsLPBppX=#ibo7#SO)5PJg)1Zl0fPUIHlC6hp24|<-U9_sk9Bc z%wY^=hf1FQtr4oIPm8>j&T zrUb?uD}Qk;U}16V1@i4&;3#6&J2FaKH}DEE)|fjzFZB10pt4Hfxu|;)q*)gP##pH6 zv7VaDZKAa?Hwe_~8L1x9r-u>Rx`~Z*+p7;4`~X$6^q~=4Sy_z_S{XE?7!KPjtsxE( z1xF)T;(1>I=+X&(NC^F(09q8Y?rO&8(tcf80raL@=fZwu zP_OO^o8AAXYPUF+bm-BIC+q2KqF%{Q)|=^>`b*uj{b;n3#`kJ63#Kf6U96_t7blO8 z5Cv8O^ot(!OYWnu3nf{yxoYZR%7uS|I0=ALXTQMtUK#)dXM1Qhp9R@n=NUA7O_i_v z>f^=rr>pC?kpky>HysSmCas-JoD65TuP>_03;EycWFVq}E-npzQPMadmQ90XaYGmd ztEF5iaGITu-d$YYjIJ)Lzb^hU=|w?S)!Yfei|p*`{NgO=2H+%qE)~j2sUl4f=h*+N zRa~XzTzWk6Y8~%zE;+P(nRX~xbJ-Ha3sI}n-JqCw;y~yU+N0Hcv09uyZNd%w!7@z2 zyr;Q5;;BY;nTs#Fi106OQbfB%UYCoxSWP>mJG?*C>*eWs zwpFH)E;)AbZ}U8Gbo>h1cv`BRe7j%hF1@yv{T=v*n6c!^J(u^Xx=EYQULAk-2D4RC z;DD}}XqeMeh>gLWLWoij_Et@~##D0Kv!HYjaxw5)iwT#vnDi~+)+39rM43!#OgY`@s0E;iV{knCNOw>4!$r&AkWrP%UZ0)yV;H0gxT|45CmKhtPUq7 zqOB$3#e6Om-R-l8VJrY4ko6fuS%EZHoXwWA?M~emC##3$?DVISRli+`>T0K#GnHlE zAx9%za0jTCm-3k1jKA%jK%q)cER?vs9xtZbj-Q#9Qm3=2l1=|r&0NwQ0SUw6nmM6_ zzJ#$-O}KaChm|VD*hj7KFW!;Jg?}W@7xVhjWQQnGb$UK5cboB#@#fpFpINmT_S_US zw{JSU`~gv@GLJVP<;>>mP$p^e#qM;9l1(@zDVn)ngHv;J?rewZ_Mi6`Z9MS*Q};A& zZS%^meSb$ctSZTpEI(ZZ5@>pWa1x-m?ZS@aA0e0srJWs`m~+%QhK%u3gR$0eU{tC3bpPni4}C7^;e7lHBlYkUt9^ zYYFug#*;>2Q;@(7;897%T4U}*${ge7(t6Oe>@HPCZ6Mxg1JRRx;y|%$HI6?XqYjH* zvsz1tA`qF zvJ^f}4j~Z~JnA^;i)H#$7Wy(;=zxXQ?O?h1o*iwT@J-@ z9e0`-yfJ62ij)>M9C(n)r_uupk>!;$WvNK!yVzvk7wgCE^66iTkRBp~1HXT{T;%VRCUg_~cStCC9*S>M3N!9T(|tmu*)4%6ni; z+EbT}s!pM@BIXq#ehnNC-qesIAoS|D@(dI!##CsXEu=kinr?Twke5p6%0*Wp93~EK z)?4L(T{nOu27s4rqyS?;oWDS?nmIKXMWAWUGP5je&K5~M*knl;%2aXZoW<=Gup-`Z z63-e!`iq0CTk@c-d}#qA@Vn-M#-5T*qVOAho_@~(eqb51Pu{i3zbK}`?CR`nay~vk zNiN2xr-SLtyDtkarlX6&RQ0`_BsrkoPz0F4a5^|~J(}I@%R3Xkn?0gnb~%_{dbigq zq=Wk2U~l?+gI#c#KOE+QL;c}U7o5-^PUwO|{NdONLo#Z4qfsgXZ^uLBcuIBFx8@sH z#dwuxM*BeuCQLs@D|GI<_4Z9{ugCC3C zy*v@-*+W*oBGJ)@gN2oj(XKw=>Mz8}jg=f?Y~99TcJp}W?d#NqzkrUf>Ejj$al zQzLk#9=V-~+CvNcejNIUqatk5^CemqDGLug*?PR*xDPuX27}YnBv)XhjJoV={DbNu za;>}wj{%1-$HB=|0{=K3UcPteAWRb`u^y=vHYMK+^m!7~xcM%rHOhj-!IvHIKPLtv2XfhpKjwk2O zffE@kdKoMg?s+6l0UR-L9P#Xd>W?l2sd-^-qtSB%eIWO>;o7}e1phfg_7FM^=(2#L!h0S^q-(?dnePv+=mOv;rghaPhiq_rY(cmeCmdqGve1S;W|ry=_*`%wwA7Nl8NSB=tT;?= zJYjVOW($?uTLZ2_ zhHJ*jeKX`BVsNrJ`781BCP>htR0Ta+D;ZY=2J081y}R+U+oAIGIJTO?7?&u5s|u6v zdQ~4l1L(^UH2Godk!k=H6v2{z9C(Rw45zF;i}JXhWtp`AT#W1v*Y|ZTGP52CCLC#l z00ixh8{fmm_XGDyQHvxFYubo1HC??qYuzT}a$PFFk9BZDk6}R(6an8zy@t!GU*0tr z%<^~ZRf0iL%ciV;bnxW^Y$l9mT`KTrI6(p?D3Y6AeSyg*;yxOmN|1p{0vEKvuhv@M zgLk-w7Yeq(h>8c_B~QQxSr|88@hBTcO1+g>EZ012U< zE>OD0b+AdsC{}Dhkdf%Ey<#bvQmh z=?{dUun9!+Nm9H-==Ryj^#_aF=Zr~$JYunMGd^eSESMaP2ItA~>0~lZK0a&d2*S`h zQr}s``|hnyX{3^5t>Uof_|!yXi3fjOk^l!<_t?-gCJ)!gt-ASf_}++=eTSbCyZ6k5 z?jdup@*#aW_+?(>R#4`h(3gH#BS>`L z{=8+0z?8)d*^57@L^CUGRe9G2QT;+sBiKk>QH-beh=C{%N=t1GCN6Ufz{jO4-zOmt zV~hcGo-7*Bl`;pR3$+9LO#r#$$oX~?3vE%mT2Jl!MP(~|{_L3o4vM=|QXCx)*=U%g{Y0+-!XL#VxoNtp1aRSD#FE8c0}30^!XfFH zdeNFk2nHw7hSOL+cU#-RQnQ&>xfV>M)MVL(I-Dbx)Ezx&89Y zc*q#QTS$|+cSjC8vgFp$5o3rL9&797D(=x%2KQ zV8f4bc*fCD-t-2{j9=hprahn-RgmDnZKrH4PRwAd#Vy^+TGkMs!xl}_yhUGZ<+EXGRsEM#P zkpmf?ljLr122j~yQGwXc00P7U7s|MQ5b?LMp~4-deJAV`Na&Q6{MLkTw&d#Togw!SVVo6`_vdhApw0^sVdlqbw-!i zNAy`p99K3k#f+f#4MQqB{&2l|+#cO$+ubww3%zizqP`DPHfP*o!6Opu@<|2%X2)6D z<&B_>`B01UlL6-uE1gH5?bY0TD3H)1+r0y)p6-MQ%upn^9m@t&zu2t5slcOb>pOAa zOkrWU6(3*=9ay15U0!8vAUlrn^0wQ!Q_A1_eRtq63W1=cKv22gdF(Ms=%^J1(7xp_ zIj*%@c}OO!eU{`HgC;atJ3UoA>@6wx>h40vX;dxDhf+XkMiLUObv*;qM(n!E&j;o7 zSmb&xL(iw9wxWu^sHvfP>Z9!vaPLw3F|(F1L1IVTo?`?zz96pX4!48 z2coDdXwzC+q9&fIX-MD<^yA7_2NUk0gx1b<(=pM!NC)OH@E*kZRot&t{(#3Ic9*X8>E`Y9&g{rz=(I!0r9| zu~^4TmeDo|72mtJAm5qsKw~?9T;YF=$n%iYf#pb5-bxns-E6ub@&MTTbd%jG#WJ6) zUio4kj(dWQyxp)9i1gn_gRrb$L|D}H;_w?Wc>=&w#+0%4$SDsLnPTOe7 zV%736E%L{zW*^2)kgN^l$Hne`mM$%`psEXK-QG%zNv)$WgHUd-1K|8;W=y ztaY@0TxD<5Ntlf&1`yXHwXN!?F;n$K-Go;nza=B@7+F<2r_ZeA>@BK}&Es$6^Lx+z$<)`YC|jJoJ~oYV2qdi8bT zs#yykYbSM{38tJnUZRXc+BJcq8ntArd?xm_kS>i`Iil+IieR2Ijg|I033l}GZTDm{pktqm{C19kb{@ukGtmW! zA>JeR!eJ)52odZl9PjkUA@9P#)k+#ue#Oc&YFuSsvP-ZJ6VlxivVrH9bIRV^4M5l9h^5OTtBN7R{9SGv(k;{}8aj^Vfnj7yXGD~arv(ctSf zDsc_HM7e3Z)egV#ZDH5GJEVh36bvLt(_^viU|;n1lUa8QjWA_(N_OI98qn{$f*Ly#oxrzf|pmF?+S z2c72?AQT;!$7hWANf6%3PaqGlS! z7h6|r5{s&}4guYI&xi%}5@3`-7(Ar^>! z_nYTL~TCGxmN5H>^vD2c!Qtj$<-n4(AJY?_2UPlY4Cll6nKGj4)O%j;Du9{Vv z0%JV%SdVQYo^!OX5nM5apE`C?V!i$O;~QmS zLmaUh1D9)Eske(}o--Fno?Mv_*HZl6$^|c!1h(B2VitC8{$aXJm%F_5SSJPiY+jTz zhL8L!b1CxWML+(kfh)v<$SqEi^w}dAt}Zoea0^bw3#6`LS@>{7guwMJp>g-vj#Zg! z0)YcGdI{X;EDD4qP@bgTw}-GuGojeEbSml6-&dAM1xe>>OgxymE(Jdv-WhjDN? zI6It7lGDNTWK`5;NKU4ckLTVnP#X+yRa2C`4+pc6cdxkYH9J%Fw~H|?@yG~cZv}Gp z?LON`i}9Nh>cDOId-fP%V~@i;J+s*3_SNbtQ-1RQVzFGNn?Hb(v5~Y)Y4}rgv4d+k z1duI^yspY`t_4WYJPqF_dl>58H)R3Kzixi}rb(;S6hA6~p@TG;Qk=S$SS1`PB2{|M zGyw|2+i z*KlxAo9M);DKXxMl^-{Y?Dle#rCSw)^54SBri!IlIre5{Ue&o_(aSOQX0}T=yRM-8 zewYlYVExgRBLx&W<^%zxP$yD6EYm95_fHgYQJ07#vBwctM^eBwcE60HvIJoKK$)g- zVD}*ayEiZU4^-M?Tev*o(Agp){T|U#$MZ|Y%SJY&7!XCv3r9bDi;a!s#6!mFXQglH!34wJ)HM2al7?y`|XbntS3(BC_2dAW*SbdlBaa5%lu!gIHd|Y0scz z2KuXY>a?F8QT15m(SxXZ{|FXX`+~cQX5`4N(Ih(-h_$gg?^f52?$?{gt)%qTpD530 z=poODhdkS)%cEub)RN4Uf+hQTBN_bV3^4>ZFljsNgo!smG0z#{igacdhsxSl2ZcXhEsz2 zIVBiow4YBpUG9e2a+mseq<_KHxp`rW5q<^lq32Lg#Vi#yOTp@p)oI_MfE6A|#FBLW z?5kY^l53yUrBc^E8<&5bvYK_m%h~2*wp?!iJnK(su|4mLDZ{}wUEOYX>y>vO8V5QK z-`+mL432@+V;Zx;`Ote-M9*rrOmD2aMY>Pv(dza@PV`6m^!qmpVZ&o3jY*)1JZD<& zq3nIY?SNTnLLfV{g{sDjzfhHkKU(ab{(G(k%=>Dg0#qB<0)Y<8w66gqM}$bwAf3;% z?e+~qsApFliS|h<702sM_xVq7b^a6bf*ty!Pk!!q@`uRdM34)=Sl=!lAO1M`t>2#S zmfs3qB`H-sjM4cpxtI*cS7*uTq<+KsbJa*yx=81{#rN!Dz1gKpJ27z|^o_UDNWA?6 z(T7oIC=Ky&%p5P4%hU8J`~7h=a=I|oks#%7?Yfeejk=fE?RKKnH=`zCVf#s33eZW^Sm2Hf>9l zI5=EvcCUjlE(&lijODv$bc2Y|Vz)=GnZA4Rxbsp}f;@7~yf;*0uejbU?qs!V`1kQ} zBk)_T*T@|ZPNpNE4u^80>w5{|Ku z#IY{IC<^*$0BMC|AN4h*x{=L!C+hSk@hIr`JLqY7#QGWry*Qe5#tOFInOub90S?-u zHnA=O9X#9l=A(yHcdhPKIKGbbaKj0XLgu={>iPXiC%*7IlWQzzh~kZv_KnkwK?12m zv1?6kf@q?f&3z4qK3=Ps)$e@4i_OWi7!}+7XcB+*Fa1ezq-sXN)#cTijC~(FLEE!> zLG%UtInP70(E!{Ey8gL8zC^Q3=(VfF)BVy%lOa885Dp`q_*ZWys$fcqy5YFfZ#FPG z)Cd5olj?amR65(eQer|IHP5;|`2CUbbNz-@zC1FASi>+@Q}hSE zBJZLf-r&b_sFqnAje;*|0XUiYyzET;o6fhE54^G=(R0^gC=Ce)qrM-%(fG>k<}&ts z&63}Nr8FfJ&m6t1JuQvAbFRq7|*I2@I0}7>P;RtR0xV7D8#%e=E3(U<|U%HQ? z4TRb``qzFObkW++ovn55_B%Idc6(MU@z8t=XtQgo8_lIMsnH}HX6lZ!%W9E%Ry$iP z3T0KBZeRC)EsUM%{>_`;;Vze}*VN^H5}6-+o)pTwW;X*zWF)VipBKyLQzXzqc-nO9 zwn7sez3wLC>#nwudiznDXH#YSI(;k#D)uq3Rv3u0kAb(tz#xV%*ZqELDh^<1NriWS zivKe|HSUa`-`t{h)3)~qB?Si5$VBENqbarbdDTu{lper<9-i+5lXjvypt2M_cX>eH z(Ib-sb4QQN_eaJ99~c=;GdUnHW=!mKn-c`DUhb2Nm&f~;=ce3MjjmFYJ`dXho*-71 z&t`UgM*9}sp+D`k7N5aYgRua#Sgp~rUSy{vnEw;`GkgJ!< z71JqGorgfU1+$%afrq3JQp68GaG=%u2F|MO^YUW^2 zj*~eKVcPr_Z$}%CqvnI8Ar`ulht8oX_{BAmWc5vlbB3Fvt z_{c5lLCT|`ohmE4Q++fEVE>?5GDQ6(jEHZcWL(DqtP#g8Uts3%4sBo;A?^n;7?zQ_ zxVWg+bnw80oVv&l*?f`;W=Zt4`1ABK?HRY5Gwp4MVJI9;HxEtbSGEb|3htMyRdXDY zEaQ+QeKYz~jzVJSC?v@-lDbRQ_s8Fgg5dTR7oEY27&lv&@rb9VQ+hVoOl za&sq+L&NIurC^pclN|J_ByupQ{SFc8B~VokNRG3`yeBdVIPAuEhd%-fMmk0@?1E8% z+m*37=v%f)rTMIm`^yBKN+Ziu8Y$mB%t>!$5}8WFS({Xv&x`x#=_?}WJ55kFHH=Y8 z^eOm^NVL|OhM*6qtSz9gNdbY@8WyzYl(HH27Q%wws?v+^TET*XAFdtGDxJ#($kx`l zdHhoGa0rkSt^Y3KpSypr#e71Fo)+q=WTJYzif;0cq;djWbO9ID z&TqCFZZqrp(?64DufxY5vLtDnE~MM!=sMy?W;EX{z9h@16TE>rjj`iQr^hu>*He2z zvU;pad;jEeSh1-GdN44-)2Pi1WQ%vOI-xXqHN)2RNgdCv)UN-dh7%=>XGNpV&CnlD zzK#5-O_>?Oq;2PAW=vY^xh<^UKz;T6puYO|BsbYR$xRG)tz&gJSdUESN)Z3oqvmmoq^x- zaR&6@Vw7*6JN{@nM|J)>``YPW`_WqnB-X%>Iw|D7SjsUx>rr#Cd0p9__r7&?Le~s? z_nP71t{Ggq%`U^N@8Q=(X?v<2A5=LfEvQ*33$JUXfhPd*tGizC>I)C&&Gn>7^O<$H z3Qz8sMwv%A;+WQEJHJ@1H|ym2`QMwW%#I% zWmgC%NUuI2ZCp>`ESaj)`s0hPhWRhnE!s-A6pIGo@Ot16C$T^D2Z0~eu(QxEBHzu~ zlU6adt76-B;h;>jaLcRImXz-xgIg*Vy-uII>qJ)*GjF2|Vb}e?o>tGvJY1i`Lnz(d zy~O*A-Bb~RXLVZB^BVZ0HIxgW>L0>)pRilKM^#_nVR(bAF-20gxr?PeA?}lP__9%g zM;oJBlLH-^E(eZOx3=8diI(%{yoHr>9N}1LQs<=~hu4!)7&RL^L}`u_T#q^y);;n& zY&t~Rc(b?L%a)a?__lOyX6zQs^|YG!nN4Ce-OL_-IbZjx$8lKH%cL|2r~KqKZ(G!T zSS?PXiNsE}yCWM@NdysXo*%M{;56%+vaRe@ISc&4;%&UzATaymPTw|}&N zXA4Q83|Qek`0Wp~n@_g}1wp0Uj^{Wa5UR*Y5thFt5tI6ktvLuXYp2#Ahl?(x_If+(4+M{8t8cCt1d zwJ20O8)Sp9{5W+;Q*&po=RwCVBk>CY#DyR<{u$RS>_UpJc<&lN>#t_1|FM<3eP6H`0bAtgj8Q?FmUZD14@-Od~Ee}z-^!|oYp0)>`fv^ zqH8&4)d1cCORdk>!^>?&jeU8PA40|EJkMZhIU2K~o6cbL7Eo>t!t3Fr6AZIO*b>}p zd|jyl7FO8xJHxkt=9Li4FHia_37O04vYl#%(n+12VXrgpp==I+x6L^j=a!Dn+i`AT zqoRpuz5{Ph^J&4j6F5bR>Sfp^h)bK(d^3%b>E&8|eF~SgYDADn9R!6ohQiTe_UAG= zfuJXMM~D(ZqHMkjq&j+&m6_Wlf1N@vASrf)=^-d><4KGj7EiD1WcFucEUm&@c=siF z*AS=V*_U+3_(`nsLj)8@3mryWxkCT)ZpB1;Rh<%z{iV|O(M`1akMk2r#d4fVgAn1m zm<&n5sX%)?9b<{`(dZ2YcF*>-7CLF_GiV9q^%m9<^N8H*HfwFlceY6@b16KZ1d^2{a;y2 z1(5#VE=+&*cwf&WnZY$vMclVjl}-z$J$O!5morg2$oe+@GfqzcZGnPK;~h(@B!C;i zDQXc^2WDAl>3s3>{I+oq)RuscW};<mtTV+Cq{)1!9 za!RXz;M+gk?*4&U>+RBN<)eUQF+}OAIy>^>fQ<^02eOx-__#7b)Bnf>k)}^j!SguR; zK~lr9X8&^Zq#b@I@FdOY&SGi4E=t+vjVvgnKUyTSq(}fT3-d4y+%;8xXPmRWbDwGE zpRoS*^y7jtj!PJ*PygMjfyqNeJZ4)%zuS$l-&0|QgWl~J`@NtVzmNS~?bqR8pfEfQ)nT^#Qzx7EFVd>ssZ-EC$(>GaVwFl*xX@EnzDRsyXN zx~}a6&mqqmMBQ*a4tgP;Pg-dG0Ij1!jZt6H8Zwruy{fD_uggoK2O?^{biB($a?O}F`;zTh!Das%O{})n!RTh}cfX()n5#&R(CgRHLtLOqwjFI1(e#qk@{YBE z8(yN>s#4@` z96C&f>#?)qM^j{43J)bgfKT9!J`E)G>Vh**a_f1J1*hwL-06MC?Mf?GR=g3RBm;Sp zzF+n9n?h=@6*KOe_9~^xnJL=YqfFw?eV1?xF|83r)Q>Dqz3ohr@ zKzByD>Re3FFf7kC8t2JIXi#C@gkev&(~Ae4VU+hUI~*G)bajQW--{<l=U*=745Gc|3J;G@^+kEg4b@>pG) zm+!hXE1(tkgJ@FssiP|acE?#GxER2gXI(rIdhUA&IOPXI2N~ncwUeod2a{LDaJ6fE zRo@_M*kCdPD;H&2MgZ|67RuipGk`S=sPJ3~hNZu>F3#?=x0;;zhbl@}O9KhO0(Ml+ z@3Y$lWAXQNBB(OT0ceR?+o^}>05@4D&03!JGH+V|n=4xdv+g|Y%iG?ciO42iKO%-7 z$|6!7NHv)*mm_t{tZkvLu*y~v1>Z)=X78WI{icQ?<;-<;*erzfEqalSQ#(Jytxc58 z-8GTG6xr-(LSby%(mq^YOxHh@Waf2}As!bss8QA6bv0f8YX_S%x@rBGZOSNMJoVzz`zhq>&-}WbYhAYX1GECE-*e_SK95xwbf-jj*$d{^7cx zOn)ZNoz0QdoB{^h^#Q1RqNPx@ES|RlCSWgbXp`28QB*PNM(OCfvuQ;O*p%#s%<+9- zuu)*W_PfN+y9?+449H(P)Vh?ly;SdbdnE z#z0m5l+$!{&-VvcMfHuEE_7B=UBa9?05BjI5IP(O{Ub>tgKU0Di)WB z{L`Bxd1`khX~EV?jVlmQM-R|L+v2PFH?Uzij(;5|(q_qI?S2rPJ-nNN)7>e!^B z-GBzIYr#bkW&FOb7W4F?ug=n&@2hpCR!mUo3PNplUbN4e zM>(~=hCy%ZQR!Y?55L5tu%?YLV=e?I5L^SAWI)>l=-#YWbA56iOdp@qN0fhSNV_D+ zkaoqNv*Jg71Xi80+e*UXoxGMS&81EA@Q7qy$xtoc(fTILmBc$epVZMGy*xcF7uBRD zX@mFg+NLTHZ~F9mv0P0zl?Os_cg^>91o1oK5CznOPm{_y4{Ft#^ATwtq-|0O5 z^u)T(a{5Q<&qcCAn;0gUW;dq4HpM11Ap5OvA^`YQ)Wx+qAt8g=GLBFxtZvx99t_a{ z-0Fqb=lXTFpFiHA-?rQn+<8hZ})5IGSbR}?~aGJ8=UFg8G0=GYYJCnfG!Aa}tTaMfc z3FNctW$#+aUz_zbTKq5B{gbp5pVB`V1QuT(kVQnYzF=m11^5B|y=5&4Gi3e%&4gn;Z}R&Ro_}!X7oz6j z)nU8^V@B)M&&9mV!ffJD)?~x*CqXJ4Vt_-u^+J&hQp|FA^T_3bDUwvFRLrk?wnI3C zwv36M*2#1Z*kcG2=G3hm5 z7Jw82l6clqlV$DMgnBh0GeueJ--A*9W3HCQI4V;5oET@0H4Ni)LrEKQbi?6AaA~#* z&5L6jZ=1}~JBy3I{!1HdE*`H-F4(NHpNbzo_B14IVC22bNH?(HptvY!6|BHV>(M&X zpFtJ|P-)RTlgw(}PC;Ez6_tC%xvo}V<*;6HpEvlG^p(F!r=q8aWSwjujhYlnW5gX* zB*;e4!65VaO;|H~0I+g^wf;SJi?!}pFF}EBLA>}5iLQJehqws9B|rR%AVGz4LEP3S zAD5P@C`j$uvbz6sNkO%p0Q??Ueb@Hld2Ng&SNG4&bbX&}o{@)IF7551)_C4%j)**; zK2MjMUb5UwD{q|$C1*CbOK+TOJMrwJw{i~*&+0sknitrGTfT`2MN<+V1uLk5E^LvT z1JtpD+Z2!~c%Y;hItZz^7!r;r0D&pL`vf+`gFzM0=46L zON&9^<|VKeLl4a1z`D6NX2nzHRvtq=nc9COq=1l)Hua`WlQlo12KxsvxHUX))V1x$ z?@{_6AgQu;8Yiy4zdzQcQxHji-A;4WBeQ(`5z70YLV4Im4n( zHici1e1|YjsJ_CZ1QAc7A-Wl&J3N1l&jt8IYyX-Hyd{F>N9MAoAD6;P{+iA<`qu}i zvi(v@roUY5$1AA`{7lxr52lMp^IvMLC>P?a_)!{OZfQ{~-WVlDUBh354%ayR7i!8@ zW@;O&JVi}kHV@0i9r$pN{}d(9>4UeTb}>s1LS0UOXqVde#ZsT+SI-NbO=F5zBlJ`M zzpJOsbLy7eiXx3~+yCuTGW#{ZF4n;0K|8>VIlZ5>&!`9HkL>XMjovT_nR zSNC~3wr|qcz2K2#+EyZ4Zb{D2zrG1lB0oyPBsOgatfOm|l-$0I_NK)O*@7R@_ zyFe#rsf%JdE*wo#+P+Kn;h)K>&~n^qOO#)(4!)*Ali%}yIvvl855-gQcr$o(h1r$h zd?=zI(>bkB6b!Bo3h6)t`r*vU_(6*Uj_29_$&rE_<7E9dqoynMU^x9&R0p#DH<1jB z$@F{kw{UvV5FhXXAhP7q06Q+e6}GF4W@${afKlh?_vKeU8Dii%BP%6^n~XKjG+07g`;@P`U+bB zELoV)G#h0Eq>-FXw|S6k;5x?-qPA7@!$}@ZcHTS_*k^7>G90NL9<(eA6RsQYsxBmS zp6V!EUtGo`A#3^G`;u$ECrSU*w48fyZM>2Z7SUlGHtgsF?v~jMWVWbr-~qSYrXsup z6)qO(d0?|cT~~J)Tz*3DUuH45UxbtByH8BU65G^IsL{LQtt%~jR9BrvI|*Mth&gDk z@oiBNO@0SPu`Om*SXLcs8?Y|py zpIsb(u#2CV#FDd7F?cjxA8VxSTk(O*RQN8_jJY)f2AY9rHG|!NQMiSD&a}*0qmZ&J zJ7|7g$?$r$U=a(RkJhefnW|)B$p1X#u3n#}h0=uOnRmM^HWm(_jkwrUCS)p;(d5}= z0^mArlo{}}boISa4eqDofRK!;;eTk152Sx`MfNXop%8lA7RG3ZLfRkT{9QwYT2 zQbz^i$hIaiDV0|qH<)7FsB%3_X4D_e14Q^+xSExjHpu*O*%D?RW27_Ix)kOjR>eAHtZymP3b_tlLzxK0I?0>%>FN#T( zzuSdCk{Uc7Q!|Bfp-gptp8cST~s3XYrg)0OlHM@p2xGIt|1fb z;g_`;g+6}AX}9B4GQ`B8s4E=<8kO8~QdzQ?mDl9+fyH^d@a`X&MUru~DT#0# zO@3@2*E|s!njzKw(H%)zso>mAicHg;Lu^Xf5NXGBN7^}LQuYE-WbZc0{9sR>CyViu zqf7e!?qSgPl&6qfxihEk$U#f4O|WoSZgU$HTvbPD1efZt29a_II?u@K)RkZ<1E5(% zT?uMj#y7?7prni?Jw)Eq5Jt>Z?E`b<2~@u1dY-wJlDXdlxa7~8Pksjhw>5Kw@D;_& zc&MixD$9vf=EGNlngUcF;XfCR4?A?gE{V#fi&{fNB6XD7AzI6Tx2db?)8%wBHl=p% z0pv}(#OY!&eK@T-9QvbB@+46!WD}tJ5YYlF};wivX|_e zZwEpPL6zxz6grS;99Z&-RsWDYOhNx#_q|&bKNi152Z4Gbg8JO`k~@`XsJtPl41pD* zc|c18!8~ci-W76KVH<_88!Q3qN<$OTGL!jHURRZc=Tvi5D(W&+e?Q(td%mDwzM#UV zQLA)WroR8^`A*f}ojuwKKPEu`@_zjEeO7e!ZyQ{nOI(5COB)q69A^q~whE}fhRvIT z_wNdmNpWM_zG+nA+kWry=JIL$wHu1Do;Su#YSnoDe)hBE>Pi3c+w;WKJ6-wKj%~9$ zNmhfw!91n`z_KA+1HzfAI3Rdw+j7yA26&A<6w>;z#8zGSuSVCq(q6t=8XeAtbX-+E zNfy<4%=avMHJDV4uhW|#Ca_@J@rM+wEk}!Fw22Kz-yu>mzSJ+vBEp;|knT;K7L!@1Tl9n4&1kfw$x_4^@k(bRef|zk9RZi6Rb;vy z&D*Y9wO{md`S0tgMM|Y0Cqxq?()|Q@U(km4_r*L4%xNK-FcMs%1fy0oak70l1~h!Q zj5d5SisQwW2{?YB^3lczXgYCibQ_z?m-(;N5zSJvbZ7wacj$#T<3&FYP%{&0-pquiB>Ac|DhY0`$ia5{KZWfY} zs{CAWGp{U=cP4dW?Fpp36=&t24j-CFkZ`UbDBQL@kC%G$eMunz+m7sZ5M&8iA7n~P zVK5pMPmAKF+S%OBO#ww52lE12X9aMTwSo~zF)BhqT_mBjziEk^ZWL575=#1bm4=0G zs0@UsruleRs7!XCf*{aYez)&i11dBLMSX(6S?x(dAu6HNN~mEW;Yz-n)b1wD;dPD% z!YrA`rM>(x_)$d{d?>G#d&hm!gi|oK+tp$V5c2RE%-dl*k<6R!>=hvz*%ZLB zRi>psAjdv2GZXibTg-k!cp!eR_9Cqc_S90K9|@<*A1&8>(mCm_0AO@O00b}zOE;M$ zQW`L{QM9h^VW;$AYtjd)nXgfEAaAj37v9n&l#{zsjFAl~7BU-M=VYs)%wi1X;%P9e zBxc80-lLfdx}wnA%v=SfP=)aH^P-tAsZc=;SRpO8Kis}D%ZL6Mt@ttpb}owf^8{2Y zP0+HE>GoaYCvFQhXxE^aO7?PapgqgF)?wH1$4g#_P0s*97m<)l2oYA8#PMv4ZvwsD zqAL7l;TRH-=6*PwFJ^<$D*VTAZri$Ji_>?TC%8l-q7X`u$h0BrPJ6QQ256`tr7e3{ zfP37}3QDQSv;pQ_YPpJ*cx2lm)M^Zp&ZMl}fpljXn3D*?Tn77)?LOj#RtIVdP*={b z2nCaXf@#@8dk27DOr~z)^!vr^MEUZ*K;7e%R1xS4gp7BS4Bcaiu0GyXryx^chj3gqzdFkpjfaCjr?1AD^l8_f8 z8yc=lBDWA8ylBcyZTW!U2Rgsq_<$nur}^E+2Mj;R^7~ls!tt5d!d)qTAe~Q3j!>oA zd|mc&Ivfo~DQV83XhsrlJ{xq5x&m&KTT;+Jxcc!(jIHZ1DBBVg>F# zwu2d`5i8Dqa7+barGt)Fx6sT&5CKqsL`rHl5NoGFp%E#Y=pFmqON5zH@X6u(!}tBe zumM$@^A_7O&Bx(WWyyK}v==-PsuM!z_u&(z$>sUQ-|xexLe)s9{4SO+QC7(;{}Q@X zqIL4_`0QQqLUAG?mr7pHNYo!i)j-9{Bytxfao#4OvHBT-csRXG00`ruwwPKe@nk$`%9WVHnYDLxYEDg zJ|ksWw;wSI98O<%xqa&atg?kjs^0cD)*iZaaL`I(rZ60D-H12{|i(EVM0+b-K*I>?PSPtk z7J9ouPJVRhLQPStlPkN=&jjW1;vuQjY5eHGL;CC4MD}kvA{$(vRScC3rQCngvVzhM zQf`KSX9B%VGP<{trYOTCb4el|$|;vmv**$8d+8U56eJq%cz&Ey&OgRxDVMQQ3LLQjVA8lGyAo z$yH6BD*pUw8D6x}%Kn#lE;xCM%9PywZCOzN+j2c$i*%J7{;PkPUz}YXUiD8u=9lHq zUVeUY_No7&cM%3AqbW}=`zPney)<~SY zySJCSVlgNy#p(F*Xfpj?%wn;}I@oJXIn(pEzBK;rz(+$Ar6F~3c+p#u#AWz66FqZs za(0R%!|})n1mD(8~;LaDqt7V#>})Q zem4A4j23U-TqnhUo(Gfp^2e4%r|qKu6+<}dfKuH8x<>DwAs>~@+dtUw%@3Mi1<+n8 zb8bp~xV($M6w3qe0+;3ACyT*9>;JBkdG{Oq0t@ZSJNj4{pj>9j1kGV@nm9NBn|DXL)6JlQ%@ikGcA}l z??!h0^A6?5J3&f5X3hXVtLMaiDY;H{G%L4LEPuE#vm+m7cEdFoqQyYi0Tb62R4`3C zc4BjLq*OMyeuRZ*Q9iYV>o6q{9m`mLUk%+!=eAz3+(%U%$642MkfvHw>pDAo z?3L<9Z?dd277EjT!NY7qG-WR`rUdoaY{XeGP@>7>tH~}z`FT-qD)N;HQ-2k8`KL`C zy+A7K*Ch6#Sj}C`UNzXstfeE_fLeH4-`9(UifZfs_0V@cASQ?kdL=0Cd@HYa)5;47 z6I4v+McBx!RElYG*+2bw+{@3;&W`imaqpyedKEmHCCB~CtKG(C$*QWyPQyvkJ2}7l zr#sjx?N}%sZb-V0O{a{~RQtw{i*Lo`gK?re6jHs`)wEE)F9%GD*1*|%_Tjt<4;7rgQb$Az49`VAv|M<>i=^PO<=WkHNz1o^hAQ}N zxypwT8jx$*R<2+jw4)Dt^**$TA^S#N#@tzFEs$8iiFGaEB!v!fy@L0m^|Fo_A<5h- zM#5$!RqPYC zdbrg~(Z-Ta8_O1#WAY-N8pnd&TH%q_ z%3!f5W{)0H=~^;XLIP!6lZAADtqYi{`vNHQrxUwJ6$~K zbc8_mvErVl{X~njvy@8tJ{n9W!@=ll#6VJE^mOpBVKG1gP-laW*#~!}0m=#6Szu}K}MR7m=R<#OgI(gKTWCPrZ89SOx z2c3Htii#-FyukDwIi6U{1vBrOitV=4yK_`y;~Vx_(k$uf7OtJ#G;>ARC*1yx>*g&2Egc;fYo#V^`CfzA8M zA*<{K6T$1eh%beS1s{wLZjc9d7@--|1!7t1sw5z?KoUJRElW&GnJ5CaBFbVoGVyko zl2s+HWqYXW85!QATR&#^yrHL$-Y(JH=(c0%2tNpwke0g`%~Ko&@H+H>K@4Nk(A;4F~S(|^B`4fe=jA=@PByBB-<221my z(P%W94_3cM2rQMvnXyKQ?^+5@H@Q!uU7@j73*d3pXMe=PLLZayZB23Mz%d6^1h20m zV9JQ^?>Xo=)CA0^39#jY?yhB}RBP$*0#st;W(AJ~t^We3l6IRZ59R{p(d=PP+P#HutMr9cZ^oN z1GF~gyn!~Skjva`K=`nz1}x^wnJ}si(nM|KFX(k*T0m=L4z|OQqI!1Jl?O@~RkMu% zyDM!R)E#!LzemnxzjNCUZ_V|O^+7~lc>7<1+nTAsu$VDtp1DS_4v{*YOL=<@FGjr6&BgRdENm4y>c2B_T8dO7k5Z0`52PEXJmoO4otFG42*Hzap@s;jCEN6wSw z&)*-&4{+HN^&8T|s*O_5g{IP)*p45ni2n{hs+BaXPYN{)=f}N!R{!$7-C2_s0@f?B zf|qGt*vbu1tE!&ixhMHQ(J2HC%ygdJRo_<}!8?t}`#c80r*nuTI8TKOKGK*7Omglu zkp;umrmhi5gcdyRF$=O(j<+8Kh| z_N`XStY$q>npuE$x&ny<$+grstQ|Z?D9G6rDBbbxu=K%n{GAHx6Ac3jF!0(F?VK2TYj3AfrTzab_;waWu7W(Gnr&EN#Y3`@n|9?Ev@*mQ@|O)cI-bxosw* zCr6)ts)n4em=O81yXqjFyAnU$LYV|t5}ID$cRv9(6)_w6Y2hgg+z=%$NTBnDF|q;) zPiXrHT=qb_-AbrXcbp~3JdR+dic1;bQgJIQ*5XUFdQ$O)KsXBx&f>O9DQtQi zF(p~%a(=9=Y^6;NO;3umS@Ik=5`1kwwevw@6!XIAaV7;>LM%_2YNbBpnghd?Fyorn zK^0`(FuaxYYFrD1T+o0^P@*U8rOW=XQwBxbLNLRUxtoNa{V~bZWvMZA(^VA-#&)Il zRNv?PM8hi5XBA{$_)~+a7{Q!q zKJUzywd#&i*QeXMqiS6B`ff4tw96kMo7#II`JwjcB)M6|rE!@yC^v7z zeTh@>HikT&zw#l^^_e-DACuF-rU<`R#C51yxv?D~rL-3M)$pOpU#*vM^!$08{s$^> znkJ-OC##u~9m9ePi&c@xKE`J=eVzBaUiPCc1ZzbQaVaG>1QAS;jhH?ffLxH1{GU_<0FN?}8=dcG&wk}uOi?sd+GAXo8DN7K zDVtT(vupX5ui-H4rKy=fVq;f#Uq+)>QOt>*tZ%P=;t6**Z_E>LW-^fWlP|8VFfvx7BYs)_i*44p~f+7|yx4>-85>8vQom(B{ z1bG$=%0ortX0}O+wm};AqK1&Ixhr599FC4=?kWu0SyUdTmeQXBt2#Yge3JiD)8u&* zYKl}IZB%WsdA9qY|L=MkHMBsP-&SlrbZl)Q#RCIv!CjNKurX*h5%<8J0SAoT0i5+k z9loyLy}h#sJe!<_Q5~ey%R#VM7^3&HF`Hx0;}Y5||K9Sjl%r^ISXx2xoFrvs<+9>N z%WBjj-Xm0BaIqXZ0c%Xj=X|b$&#vcrHnQf?6HIL7?Lgju=4>y78^I&kPPh=t%8p*p*(_sv)%VoE62*&hvjk&hSxPyXgS$d>$d|UP5HZyN}Rpy zeC=Bek|&qs(Z%KPZaf(d`nG@wb1pl#9eX%(jL)6^Re#jE?1jUTJtWUL59~jeHrG|> z;;Lgyysvuh-wY;U|F6l&ew6Qw|L3MNvgWZ*H(&$}Io&ULt7w}6I0Iu%j_dRXz3@Vc_Fdw%Lu4|ypZjyeE^Hn{gZubLynHNS`%d~nQRCSKI8k0_A;zg=ua~^4 z2FM2%nW!$Xhv&YGe#Upv(Joi*_dbDPjIWpS3mRnwc!)S%`uOzT#xxO@!Lv3RF*_p(?)*sp zDKE_*5DP+>-Oa)GnRTptiOP?2gI4MtUgIbmF7D%F8<)(rGA=#kZMNY0|Gh@b_~UF# zVP{)<*jC$Lz0M^>m3v{kVS=Fa^vMX&tKPAK6OIuB$4c)=wiO-JPz;EoCb2=bhsABY z{QbeX3d}P3!n3ijFXqXw)jC-;+YU!rU+?YT*Ay6NIQZ4~Q-W;_hx6I;gE%J7TgwCw zVwDp$h*e|stLX9hj|sT+gl8q6O#SRi(oLRUq{dsUCrM{IH4~H` zKHqbk)v;*-Nf1;#=Ob)xPlyTVaEw*fHW=!M4>{mlh!}E`&HdAEVx)S@q{S}c#pC+P zbQ|MXmmVKGv(;^UA1qe0X~qXb1u;$Tm@|_%`sFIVU$5?Fhrt%*00b7$E0Na;Q(~ZF zC#+$VN}Q>|+=>5vk=ksM07aAKr&AMB~zw8=y zt7ZtA3~;%%24|B=^cXDGo#it6t$RR-JSd-|f4`Uh%8?_d{;T{~SN-){c?O~WTAqP% zHE($ambP5`W>82cbyU&`QuF@}QQX$YLd@f4-RIZP$h~+KFW1+X^CSW74Q)Cn%KOvSymy(8-A#oAcoe6J`rv!N_#W}_ z{%!l@r^)1d3a#BjjKGtRKwE8KB7p%C(oWqrE&V8U^Uz8cdxC@yrjiEK&8rhA&Z2N? z4MspPIE>9;d1O<}B*X=Gu* z59HV22Z94tt&mD}P=^Wq#k4zH|IXO(;hV*0LKUW1uD>L&%9Z`=(CLKprKd1>&zGi1 zbgw$;oiNumO+kfbX)u2~&UM{ppt-l5g630{m;eFt?bm1vvHZ0K0_60Q)mIQr+;y8seR=M{iVubjbaP&{CCKE9yo8)X1^e*}~bEP|^m_RteVB8-~ngI8m40wI0 z#2Mc9M|Y!O(l-`2BAf$GWkik-jPRV@uj>&eT<6R1X58OdplW;Nq_M?vf=$zs#?zAj z(&}EReln}4*-JOQHk(YZ6WSOiHBDP=q{j2Be{Q>**D!Ter{j4NO^cycmaghuvrN`$ zG(nk}*h&70m%o;?b!=|%OjYxi7lnS>72Cic)R-;EitWvpH7GLH%uIi88$!7hQ_M1H z(AS(hv&F3X=I^^T_;DFOM)$vS?{zO)M>i5HgGYkg<$#fQq>s1i@8p2P-?y6Wu>Tp?9HZ(H!U)u>vD^ zTVHh#6_>O1=hwyTdG>j_ntgtVR_j!H=E>r5_4!i%e?0v0zw!OLeTzs#o7c#-)?OP}D)Cs)yI{|7DrkotbBv_CJj zzkrT4;#>{K<1kGt3&;J-e%EMZ!D(7?>SP?xV`H?RgoWCHs6LZLorC8*S+1AzzI4#L zC8yo8hq~0_BsD(i1)nUSzzY#mWjJSxX=gFbEX=dzZ2B0dXlId?zyD<9>5k9rZ!1jU z9H{JSXfOxXuE!6K%Q{6ijtZgjc z2c6g&9A+gb-z(2wC;}YO>}~Jg;)!~YET5x!jW<{B3TL)TqbDzx>S63-D8W0F{PiJ- zxO@kZ@5e>Nqy%iaMe;j@)Lot2r?bbM45Je`O2aKC$vT?fr8y=?q3m7M9Y-jqIiuEQ zSJRfe8gNN7?K$$DX_CIxra$Vxc`E!Nn$Jolc|56Per+by|Gu$W^6aw!=rp0;yRWsM zfw|sQl%9gA&;~^MgKqqI()fwy^W;~s7$v`~_~$j}Uw4_TR@;D_vb4094NsE|wvDW? zmJGi+W#e@;Tdu0;Y7ldz;ib{VYtzMA(Y0I~{gj^EP^RB}?eoHIPa1xw<(0^4#CoRXW!B3} z-4^FS77Z^?&iT(#l03hWv4b?a{o0F+n-e&BS|*G5jf@?v(Zx*b$yIRV_$B(ah?iD- z7PZ&Nh#BXehU;U!1;;pX#kY>HPfWnG2uT}<*{A%?izdGniRt}Q4T1}7SBzw?KWUeTCVE-WG5VH0W z)x~8$Dz3=iI*{w0)<<}2nr1kR^L01KQZW^6E>Y9-aW2>Y4{UrXa4%K8aZVqCBtyUzVa1bee(CT?YMQEwh;7W~UR zKA$Jaa%HtPev7p!^zSE|=Bf;(FA?YQ;yyl`C-*##Yy{hq7cKhNXL4yLmlB-W4&UgUdHRj;6k!P*w}`}<&0 z55}rT-sazGC{aVJ`Eio}lecC~&4edKBuxFxn*<(;164E%NTVOdhLI)ia5&Nnrv~nL zZCPTNx?sHD7RvT*qw;*Bo_AW^4xxIjf}pzL^8Qf>!IWZEVJxrQ=@Oq-%OX*^X!d*< z-pA2m^g3JQOfbxwyJQe<1>%q5GcEC%+w-~L2WiKT^mMBiVyQttb^eLwukr9<``>nx z72dY2=wgoEzS;`lFJO`x1Ksw!9X6Q{rzA zKk~OeRq-X|Mb&Y$gKIuia`NQ1b9vJro8m7$xjJXx!a?UM%QUG8LsiQkT{Reqxzin9 z_Nv3r{kps1Dp|a$vN4&>W0*L%sW@#1101nh%_?aDu~g=jbr&qA@xQIEE2RqyBhGX5 zGakOgibEZkW>ZOQNfW9} z0ykXDf46}CT?asO0KNDjk~g{Z7FTjN_}sY|1-;R5conL0_TAxN(C<#dV9@LTRsL2K z-;Rejqi(GTx?jiP^(Yu$bwkiQXp6m36lTg*S4||=YhFvemeqb#+N-p{s;EjdTlC`9 z>~Ud*ihmSTCdo^RjSWQB65^fIs{2SsbxG$f5gC;>cBudqPgc3zt!}b`jir|Qgy9Theu9__J!-bzD%Wh)d zA}uG=%}iU1011L12!apR(`;G!KpF@U5zOzibv5UmpsAP(!EXML&$fHi=JM zQn)AcO$F2A!g=T-*_SaNx>|l*@5_1UobSze==u@dT4&mWFFqt+;XQk>9vT#>|ElVK zI7BGi?qs&`F*$3|4Zc2#!F|gXrQdcvehF@EnBm(?4yt`_RVSv8is}9O#rUy?-`RXN zTjY%tUxFEJmN`yxOSEsRWsO(Q%=zNo(0{C(v|nB_X8{O6cKJkv-n;5fzf~ zueD#fM{5$Sl`GwUl`Up;Dj(ap$6Wc)*u=R0yKc<)I}$Q^bGca`;?TQmqWjxvd5x@2 z*>rLPh8_mKd+dqa>rwvbM*KOOZvK?HGae9|z@F8B1{RUpQvteO62XCW|oFn+h}QEL#dy*KY*`S+O&0$;lz9LN+BDxRzzY z+a@%4T$QgRSH<1C>@l0(=kFG)yE`EX`G4}?cc-g6Rm7~llWb6DrG|wv1;b+U1rrwh zx0yrJwRV{7bC<1TZ@s;JF^F21i+!bhO|gQIM3o}CTK*33b&S+HDx0XGf6I!85A!<% z(ec>gIm9ReJtJx6o*7kCH>3@u9$Cr?UT^LgPZy4A-5$N zlgKA(cs0#7o4f#3fqG^)N-(n}HfYcxSY}t3Wm8mt zM!_t9+}wBnnFP=C+2-CL5MdX590jT8`RvQ8*klVJiY-&@>D71BeL13G>vTuFcDfxI zsaep-5e&%LE1V;7rg?Av#o)t>-Tyu02fJ@S>!{9Jq@o=~VnEhjir434rU^Ul@2w#- zNb1s?`j1HjtdHzE2dAi{e+Ev5P5}nT%_!POgB(?rfJs3poxU6+0!GAMazx<7i~1@M zbu}N%v&5+!x^O8Nb7C(SO_IcUgb0u&FDXi(g$P^gQ*SLFuR5rbR|E!yonH?SAy{|- zrRlA?rQS(M1R+QyPUntK5Cr=ewj|ca3nZeDX9!!e^e**1dTX7=_0ij9dO$C<^E*%P zQ_E%xgg0d0eREZ%Ip@VImxHH3%W%{z9T#PR@uCl_)j~MV8fCC3F*+z^U_~%ZX9uJV zY%(V4bWh4Bi&eJK=mHar%lABo>M?MIFivj{NEw)Z%quH$4b}+;>jcsCX6plJ2yj>} z=M(S&ffQIe-J-zZ2g!~;Q1}5?s^Im0KpR83bLb2h{2)$qH)9YDG6tusY1U@;{pDuA zc0AbF3g^D{AhqYSl`UfJh6WcGX$-=ys558-j0g!mj7YRc|G-irQJU?ud0-Tb&(pJu zujiA|xXgau`A$TB3UwF9>D^xZqTu2@z4&-MI!{kdFD@?kp%DgOMwgS*AL)m$m*eB3 zefG>mcH?w(ew1E)y*wFxJhr~Wkxb#j!in5vje#Ib*SYp2$Fnh!b9H_^`Fy;W*l_Um z{OI`d)1{bgwLthAwgrGJOgEizi!gZ`|N0e=iAbI_6 z(+=$HNwIpkddL=wqg4eMq6Kh-t(j)a(X105Dks5(xdw?vVhvh**F3)6`WM(fam!hL zB_Zn|#uRHQ%D-9Xh!H(Ui_{7?^0CMtvm)P`a0^Z^MT`Y&wN4w9>GCP27N}z+*g&ji z^9`W*mIrIC2l98-#7XB`I#@=?FU~)GzBoN9s~p&{*dZOnAsrfg86ST?449IX9AiGM&$Q}Dv)1w#? z!NI!at{mJZ1IkY$V**ixT|`8OiRk5l=Jeibio$J*LaQR?>+9|>tp4S@lZ4oCC3dBONF%gAc^)gK; z(IGk%2Nz$C&&TJV96eWKmrxTLa8N=vXg8cZ6-yhJAt8V_k&W^ouN%2Y1`TpHb$G#- z_Ye@#PJ*$;lM-gQkj~3z@t^KbC|KmTJAc9Im($gA_lKyYc51H9qV;o-e|nnVZj{cw zmQ*$WlqSA@7aFv>PUkm8R{VOk!Rk(CXj36lXH3~%bn2&?A(F7yHDW4$rEu2IRv@Uc zzPN3%qO=B)p+P5>!Q--^@V8y*OPmJt>gI8MI)9jN{m$Fp6)RW}~Q5fVlNQHjw-4|=cE*LeI4G?}_sBo67$(@4oplF|}NdFgLn$#E0oFYQg zZ0mOn9p?!4Ds=lAwRZF_Yx}t^Fv(Q$jI!bCFN~E=TM9_Kd`B#c<9TN^gFrHy#}6Iq*&K z`B1*Vt=5@KLOG~iO?WvbmWDzKw4)Z3e)VswJoerkmg^mH5A7Lx4;T#*{_?@avH5! z$L1zjy?qxt$VU#@MJ z3RK1kd^%`eOy=I1^;7FNYEwT-zeP>G`Dq25G!{G;^G$x>RcGnArZO}rRHMZ&b=wI_ zKy-I!V+WkV|A|Cio-bz&y6n&*Amj1%_Q;JrY4%W}zX(on+^m_B#{B>CnUaFtTcV*h zI1=3LTKy&yjJ%am&7Aos(3ePohsa_kC)spQDJz;LE!qN5NrXF8~#LW zPxIN)>UsH`6*D`00ms_GRar=Vcea~J=}`1^RkJYa;`8e7UmsNbbeXT$Ju_ve?KCAw zF;!Z1CA=7w8K&Ogz4**TJXk}{ie-1-5J$>Y&u-vYm`vv#2RHJuK(pVO$t$C%8zwAN zDwF9{3OzMjSWPO2(T_M*yWC~%FuuYTx3!T)bjOBZ)-hM*4I9@sWh?{&I0O`Eq&j z@%ZYhy5Y3!W-T3A-$>iZV1xpz{iTzMXjztRJKUb(TwZ9&CSmX}FAB@WzP7XPeg1n> z8pwQ+%N%2+E;|>0N7v=kd)WkNncIFqxV|4aYXT2$6t9hJWRXdhtcLae3j?< zW~yJ5GeVk3oq*aR0nl4Lz%i3!(^SWG)&{kE}BT|fjVVuM~V9=pX@I07*ir~8jY zVS;Wdpp>nNXw4CAouN)11D4P?`E6dvvYcyI7ZHc0i)d+}=CgH3N$ZeyJCFp^R=xF~ zc=OY>C9oeQkW(2eGJY;?EBqV>M_EM^pTO7v0Z(s5p(*xy#G z*+K~aEL*OH0}Zb8%%d^ux!GO!I^xq1B_JxVdS)4Jn%kaQf`V!D5xo+NO>+f$KKGvcM_bf}e8;Vi3yuf*5ep&|n#! z%!~D=chUxLK5rtY@!-LHRA$*~u>j?#cI-+!Ca%?u^7=RW2MLQ=Q{_v_ld-ep^A`#YSSVxrML&JniDjH5YMF#6svx7No1myi&r|kj^ zhhR{b>m~U_-ADhLNhB3EC@|yBo1Z=BPvatkbJM3{J^z{O*>p~0{>yvN#Ifkv)`&XZ zibBv-C0=JfR5ThyhBiK{l1I)YoIcV;i~_Mrmz(*ms^zqH=cRX+1yc#TbS!-|Pr;eB z0Wt_HqoPV5&WjwFY$s)a4i#&)XKA%|Rd1aq}>_J#)`KDR_yU3%4{C6koOAm8+Gi2QEb7p;+ zMMvv=a#`!|=R}E4b#cFi#eCL?n5l9>eJ^3lqcg!yv{Hdab zsw}#rROB^P19!TEYrz>k8ux)ZDV=4X?Vez1)W}Ml8_S|d>qE^0Y3x8r@et7?Cxfl^ zqD}y;EXIKb$HGQ%4|igM90V<2fbeJ*mg-i5`q)!M$j($Yo6QEGz!b zi@ouVO>IzzB`;4HuHjUSno0Qr!>Yy}f~GC_zYk1r#AwWd(~D1^j%`o@34*LhppqG{ z^36uovo`)G%?(@6R;yL@Zo)k~{<G$wf0RTZ0QemH3TGnHipf%(3 ztI6p69N1HRZdf>i zaJ(#RaXn3)gK}g57?(x09NmQiQ6wq1V|KPGg-A#s)-;W4&L*%<0zsi^l1@$1S0L2x zI{43gJzC7~mig>de4iC!5l*bxiITn@YnTC;Rcc2^-XbQG!PQy?2ajbR{l*B7DV%p~ zYeZ!UzP8Aoap4p9;g^+)!C}y_{7ugX6QT_t_`@-)Ex);Cs}j*(=VT!}d;WpM%eVyVwI1P?7VhA{B!?UBQ5)H?Mts zJ$fnw^gQCarpFkNru9op<8j_&({w+><6gx8`(#3zdE1*D@bDA6o^6ravS~4}X$ebb zgNSk9E+zE!;|m;k$qDLc2$Dfvph8KQ=35^?9ZRC^BeoW5ij#D8)q|M*l)+SSv|Lte;Wu8Z}T^jp~`ZFG;wM0($GvF4$hYHzQ|gOdcdOkhhS zIUCnE*(YS&6E2oywH4D^!6=OUCm4o5lEfy6l5?wjU^kR+1#c`~q(|KHeD&z$4a7)` z_Qt?LO!m-o7;8#uXUM|2^(I*BO&Aq{dH9IJ#@DWM{nV##7|L*!|5Yve8uU{Hg2h0; z$}{Kg>#ts(CfT&y7zq==jrV9HgWAZTHqvzJ-jc$W<$mbclE9XhbCil@I%@z>03~Zj z$$?i>F=^(>^Pafpm+f%THS7WdT~O|^-x}mloXC6;f@9=iS<9aKMPv|hjL0Ow`nCmd zZB#A(O48b}C@M|ytNJTR2>5q{ZPL^w!DF$y$!_Kgc_eg<9mQ2R#Zwu8;}S&{$3vDC z_E3hWh01{bWt}G@&QXl0W*cK5F#CO&4^?0TBl|^sQD%bPk zY4iBBIltNT_NO%y7mp>Pi`EkgdQ!T@dyKCeA&MEGS~`S|7!6{4xE-GgV7>CfiwWqv z{UWjlq2=}Ly%ZZTeo@%tGg0U>;b2h}BK=b2v-wns+_5bR=1Vb8{S8YkZX1g8c&ovV z(L++Tu|s#1YpwMQw2drLcEQW`#jt&BwSCOb_IU-F1a)h`JpoG&vAqNCvGCms(YLjq zlp=6?ju5p<3Gd}Dm}1$lw;==H8}(Yso@ht{j10mq#9Yj70*pDbI?vsu6}N$T=wt9L zAH!WELZ}guRU^2^iL9P|_1yR0KanM1Cr9z2Ph?UyU~iP(Rm&~uG4jCP%5A=csG5u> z$LZN<^6|5C(+b_nvlR{|qfee~!r*drespn`?!yoTqtkDrA6Mz*^6Rm4E26Q4;xTF~ zb=TJZ8(r!ymGo1}s z=h(j2*cs?!P83vfE|FjX3b9LL7R6Y-VJjM6#SY(z9s7hs)h7vwVy34u<{c*p2kQ<5 z<+Wo^RLe3ILYzwHn|Z$WYTw{zQG{?h-B#f8HT0ew&Fjd=P>nK6QgFD~(bC*&iHq&f2(?#TuUft0N)=@cU zC@C6M;LzLlu4B025ER$|v~gw-Dkk5?JZhg_gJd{(BZH%Kk^VR)(!E`uxbRO>AfRh7G>L*s^(`$l!xHikwyPo@`*2MDP^Pv z{Lr2-QLa@R;psz11Uw4nx=}Xf7kT)8lg=Y3sd^T?`>hj0rKZdI>fP;JoZr7>n|q+$ zVJx5juUCtox%>qdb+aJFdZVWLw!)#{UpWS*xU^uPH1dDz2gv$4khC6!D@M#mu289<+#ixgbwg3#iWmy zD%4fv*@Npy!wwS90i@T&zr#eVp7ic8M0LoZS{VON-LbT%tz*~zAKi3SS+*qm>xu@F zIzu1>wEdbc{5io*m=erj(>C|lk0ig23^KAy@7&(SEdf1_j*iY-N9WmYtc-0y*FBCN zg-1_tlcOCf24iDu%fGoQDz?c=02z&@wYg_| zFs|busZn;g;m0R+%Nu^0L=@NW;M+O$hYESyF0&n5+=VQ%Pek2BwT7os_9jd6Pt}JO z>5jS5R~f@%V6UbAvTy&&B2PTApjQbx{sQbxhnxDp)(F3SZPXuXpH)N?IbQCeZgXe= zRgN--D~E=56a4P7`Gl3BS32|>jD9pTr8O^Lyx_`G`Zd`-$4glX_3U680wWEEyLgwB zw}wUG{tCDg7JJ)c8GY{VtL3Vz%DqJ9H?+ahW5ZnM?On%`+ERfy`iqTyrM@%sZNRfI z3!`3Yi5eLuHY24rH+i>cGZ-D#i>utV+&_bE0_Iv-^eunVC>18=Cvg%bKwoqPjZ`Ua zQ$JryP?lIeWarA1d2!0Yp8vi34J%jY%9mFf3+e*TdrE`A@SNhF=d{VLUkC7r0iP_m z609Xf1xsH3j*M0qgO<`_fP2>v$*2Bq35y~E*C3-%ZPY>EYO1dh`7R33;}LPnfIG$> zX+6SHTxkTe4NXt4b7XsRf{2&|eS)ooTzMc%-s$5bSo_k4-Ovha+!@*{m3+BF1Ldx(?ho<@*Up+H0pe7M00YQ0!T48Ka=lYpg_}KGhN*D-Sm9kxW zcIY%PsKOb7;GUL>zYRg{@;i62*N~ESNTrqyF-;+@;=Y)cs!dxOrO@Z8^g2nM@a4Sw z*;@$ekIJ3OAV7+%+n$Tm#dM@l320}_zl+Sl4!QUok3$}YKSjyOZy`8*~27B+bPN*U6s8JreBR;kAL_ia~ zpgwqs($xdkMdGY_6{sf6AQS%aWcSuu6`!gPvTe)5tg3jEB^z&|?Y4XmE-=YGC&J>D z%fCE1A*^;RwAa=0@*wUgLJ?7#1xsV>BWpOi9DEoriVQfJkJdsL6b58{n?qqh(b8Se zedlzWrdr%0`xh`>)-FzjYTY^(VBoatgp#ty8v2+0&?D#gk zututy3C-c__AsG!_4eUe%@-(1U5gM=pOP>-XyCvGd=2`n$u5;S4r3%$wy!2^ zCJ{DTWl!-=qo0USloB=afCtuTGumWNvq2pM1{LTyb22cDiHM85yZDh4NxVA?@Yn~y z%gsJ_t~5ls8%BN7x6QLzDWw&4iV0EJ@zxtZaK#(G(^_v90Ui zYCiZ>;`C-TS?H_Sbl{+i=<)EXjE)P~bqNCpxd2N*w7(2Sro57c=|Iv)ft9)lJ}@z9 zZisg}iBMG1)&ddv%q5DM%d9NYzPU?~{>E0i-+hf9;`{v0Q2ORwv=k32r1Sjy;x19? zbTv{hF)DE@Y8{s@TliElZ{mX{s6_vPnR|RX=4;>eB);(R4)tKR=+@WAF-@=<^1;Zn zB)SR|>Gz00Q;*i=Kg60@XsRw#>{_4R2a8d-7|mvbi|Jx9Fz!k$gH8=Vu>%1m;e+vP z$ePXuldE2kQtR_*Jf41P^t}d6Foeqq?~O6Y&2|i{9@FT!PR1YJ`X{zF1kgBXQdjh_jX}#nOXqE}+tAoekr4799ww?l*yj!3nbiDJv>s=}8Lo zgjHOq6GrAeVdWU=LezEyUcoU9m*ybA3*(fu+<_yA8Sl<$$BAI6Qz8smpVwcEaLcp@ zuk{ZFtPU48GR8%b6y8L_pQGs5{t<5Ze+B)#zXa-P8?r%50k$y(T&jf>KE%=H55|kF;>DCn`Brc-YG}8vNbQT4raEn12Mh_7D||AZ z+>Y46Ll4c?}xCT04xjnh)j&{G-SZd-+rMNt8)A)X83(8xA0f zSNSTD=qa->yuw$FEx(PhC=F<=3a6Xs}wfc!~P6P8~zn=3wJ}&rrIh`9@8$2fXpfe;9x;E4vMd(zW+~p)=A?5IWfIo&Acg|K zs61Ea7?prgiK&0vCX5@G`y&fA?9B4cNBZ)I0i9}qB+_ENCc_*7%*w7tZr~5rA)UcCc!!ZI#ZL$%=5Z@`4m%i8gQG` zlSix;>CCo9^8GZCS9CF*Tn1OBUAds2j27=@T;g8_eWByd^Q^02Fj<6)*=Q6l2EmnS zM1&zYtr4t3xWjOmN5g*`i)h6h@JaaHT%mx%-FL#wcvE~PG`{&f90s$6)V8{zmm#~% zVm8LAQ%sq=D@}X3G7~^RXskne*2Q!%n~&t;jOoP@*>c9dSC3jZpD#w^;KNNv4h@5! zo)<>u2MJfG2%8bRFxTI^o)Kit-wzgxQ9ka+!DM0_He^1q8BR_nh*eoQXL21_h-39y zA2%v5XVbgUB%EH11{0%hLc@oU`gRz7HHQ>gIit(}Zw58Qte76grhOLv42}2Gw&tG( zH@C(!Dg46^|1zJ+w?0j$Ly_n?7>+qb&W-sb^s;zvI5E{wC}p)EF`i8^oJe?U&Xu9D z=DXqE7&kt)Zl)h5T;xnlm*!LJ6t7aaw`)l*Aph5$#>D<%OLR8o_P98JsDQoXmXdb~?P9j!k#NW0r{kZSqfYn08@GU{0Z*7}JYg zEU61Zo19HZ)!Cqss=qRjqIz`a>tb^i4vE6ZJZlLnbm4_BW~^QGR1`cG&dgZ}bV>U( z{9(>!U28NmX0r;7cvjU#Ys;BCm*+pC=ReoG?3jjy9rNs#KxRmlTaR0}OE{^4-=dRT|VTeMvSlj-xociu63$W$|(zXIiJfYwD2DOlk>{YXN*GgoMCb4d*@ZP^3P&Xc6i?;Oay1L+p@!5 zy~Z$KJ#W|X&m)AX@+3kvJPGi5T$7vtsS3V)37Vwo*k!r;oG%r8t8o@caq}YEt?p%; z<|yz0DA&OmCDvBqPei<3bBUYZaW((oJIDH&G{3{vi~R13G6@w%!f@VfY+HXF48V=y ze{)O1(aRV;^9YXY&LOtkiZN=*;P@14@zA{}tt=~rjKyDbK27u(w~SPkF>t+(gT5;M zy@}ei%ElZ(!E{|GfB8lS9Kog#jW&@dM4r002@Y#ysO8}u8Z z($p4?wH7~Lh*WOz+evuvyO%6hYVb2aI;&(;D7MO5Bh14JcJ#dF74F1sUg7GT?&2qo zpyHnvyNtLH^vW)iNnhc86F&_8-ck%-fNpmK-PVI%K|mSyAOy5E09XN?>5J45 zLQeoLK8P0@Dk%!+njm7WHs7Q5O6=@~cs`+c=S~MCP>6}Rb6mYFcdd?#am#b7rJTYZi@9J9PHS$1mffyPU9J(Idv}azl8FagYzd9D*LGY`7OqDgrE7C`w3h6F+1nGf_`5=TA{J)R${;2K-{CvdFf2xTR}gpH};z zr83We%7BujagJgK)^X(KrZ2z~HmrQnOOR=kS{QNAaT+z6BY(-Hbbe5b3X@OomAlq! zUpluYcqbh(TMEaI$|(|pune7}Fpe{5Mrv-&%+ z#WPxQp~{}<7^pp6fV;|E4qoeU58gpz!Xf`yypuSKqh+gCQk)M($sqZ|Z<6nda`pAW z4DRmKhSbVd58qm80=Kx`yVf@C(?`~;23jOSt`CTy#OyVE$0kqUO(jJ*ZweFPO;K+; z*knd|e@JLY;sHHj$_zGK7l|HL*+~x9I6+d)&rhe$yz!I>t55QW+irKs_m$lFj%JaM zxnh#?mf6G8ZPL_8>LPD~F58NL*uJYUUTkHuEF0vK%<1E;k*8@EZ)1@lspa|it zO;G_pKYJ5t>Ksu$uq#v#INkM~*)lM0ECUQI%ts%Xs&zRNWo{45oi>ap$Y%2hpWN#s zt^krhgj)Zs-(YCr`hHdS+!dAR%Vg*41`$w|2*kts`}9~#M}l#YtoP5G(ME8}(cNaTxJnPLhLaCUa7Uph&El8XuAYh~( z4+G^?F>O8MSrMQ4dn|EKAKb13F`tQZ7%xZ9+w7(PIDB#WI0Fq-r&V^38xNzK+r{T_ zFq;iNx7l$N_7b`C4?>(TD??0`WgbGu4`BC2Vs2IKvKOf$FUtW9CANp0BNE%tCQ)n= zPga=uA!*0lo$31xp=cn@Jwz&L-UU}!R^%!^3${bUP1qUXzT@H?Wqi|Sl9}|Oa4xQs zUppo;aQpDYwZwwROq3WUM&(nhNuzp|;FaB3DLAOo>mg9ZjZ)O&nxQ9rN`ZXGO3o(y zry}%m!opE_wd+*8y0w6|ix_=t#=cz{5@^RFt|AuH>Ab#I!~OGfArg+f18OkkTkE?B zR!qN^|K@tZmkxc?;vccIX5FgI=LUH&nJ)&Dyf(;}uH9|x)yKj3!$=?YpyUKn6?~r9 zbye~cTdRubNv<(O?T{dpwbA|wUA`ub;!WP8_Azx%+Q+WjLN}1M^GDl^yghQ^(B{Ps ztqit|^M_LPc!vdFX8+e(r6NCikJjO>H6XB@+1l zeKUti49%=~Bb3@4hw=sD^yC)65vX{{Swc2?UZo;wB-lJ~Ju{7a@52el6|Edstxsu4 zJr*2tZdZSMk;^ph;^t3e=!)Z zeU#qD@?9`h2Umvk%Hia3KGuTr76rReY#KpYupl8&yp&_v^LNPMNs8 zGAj9AxbC5pVm?)&*ofyHC2D&NV-steBXY1@uKJn*HZ4b)35P_q?lnkx2A8>&X{_UV zuxKz>6T)u|OThN6rvrk~)A1|26D1!iVX!tZ6(y?MCM!QO)NR&A4#(JFg11WeSIk&> zO5OUcY?FcDD7cPQ8TD0RaB3I`3hz4%bJ~asHfmG{OlyN_?IL{GdAxeVZL3I{hQ-@esF*<#UJN= zN6w+P^6E3k8Rw#Wy1`C75qai^(}l19wH^)#1%vOZ?sl923M9<4lKXd!p7e^5kTXVH zOBZ6q?=5ex0qh>o%q(CRYY< zg*q{hp5y6Gdd<#EaP6BEsB5XX7iOdkaorh`tMq}+IcHnTLwb@(9r||=>EY>i^V7|F zZqj9&2rjm1koMl8z&!I=?1l?=qk1am_n-K~lSo8Lp|n8?MK&-c3h7uc*w$|)3uTKP zWZlPKlU+QEx9jLZyz(o6KQjUy(mcuBj*RwcoDP#8n;+3`d9mkgdvhv)um9!s9FEQa zIp8*O&@;Fb>jbM|jEPMb*2eo-Xb2~W9x7if4@S(_$u_=RZI;7TUhSvT5R#q9P~9-j z?cLjWcVZjQdi)5f@$I(0QS%FmfKnP!IXU2l2g7Z%>-SV1oPd4-&#nlwkmyFIV?M$#&oz9 z1Q=eFg;5{o=aLRei|c@M>W5M9bE;C5ObVOqpWi3D)nCabi`MIx!SX+m$ml4vy)OHM znu743aG*PoCpetMKesNDQ_;y>Jt34Jb^Quc4mxs%Q)oPHSGP#=J-jF&Dka+}!&-%ATITLb?- z`h9(btno-xU9dy1rH@NtA8cI?#^YdeC41Bk?8OsT4wmEOAzH)cRk&EJgobg8zu}dA z(&M1b9@qL^=+QByfhR}Q!eb*1G$zV(yLNX8b~=yj3?8z51Qk4m)MzbL`%ilOC)ZK9 zV`V1vpGUD*sKw9He!ZN+rs%dYDs8|*Zoe0gzrvVjUWb|PXJwC=u^HK|p)JdTA zuGc$=k+_b+TY$YgCp)%HZ64|h_XpSTg`pMqM)F}D4+ZUnSv&dlqC~z1i;fQ?`;6wX ztlet+KjNOHy=`3Awa)M8W>ys`Qjf1IC$4=Y4N~{afSkLnjehTFmEq^9p|y zw^gdKgB$JI@>llA=;!k`lShinbPs(roi{`VK9t3C{LzoZN2S#|7()S-oflS6r`&ZQ zc@8CBOEO`f5VIOR9)@}|Sr6m)deyI9V?lshW5+&KrCG`XT9x)e#@9mP z?6J^7>y>9O)Q=j7ROXQFR-uqj#gk3z)sNouqb-auJiRZTMjS*`6Kr*nXe@|M@6KLs zzov)dl^3$MmDfw>n7PrejRGI1jgA9?p)1$Rx0lWLWGnokb@qQxd_bwsbWRD)DPeeHB61iaYy;KpUS5 z`2+$oXSE)zWpVe5$!fi9xsxqv1c07%2e%XBo`2funhHHq@B6(XLtwSaOCKAVtW2E_ zmq!cZZSwdi@0k3iKJv=6Nq+I`>}B`V`^W@NwY<=B*lmO>vK!ss%g8_rFW*!@2JLKp zQ+UcKT%iS5VXPQYQL|aM@07J%?P=yuP=om(Yq?osHBtBTw+AilU2RQ;&UEm8fNmZ* z7LygWeH1!ZgNxA&Pm=3($j7RK zdakpW%>F_TK5*t|tI2ROm|;Q01T9BHbZc4Uax|LtnV85bq8gurAg>XRo)_j^%%}K~ zaOZ!n2g~&hT28`_h3A`6z?|`XIuW9yUGx%^$SUGuaZH}>(w}H*A|)7|=@5`itgY)2 znopvm>*ZoP>d}?(Le8gyk7&wxxw3ln6-9aOUvzs9OeYG6@<8aN4};}mG>k7lE-nXX zCJOVVt@vuQ7tc9gPOet-S-e`0uFzn-ByRRmrnp8E=M@^W&kU<%?NfADtPrOE7;hFf zSB(&%`E*$rDOkT>aLm9Ff#ZH7vZ^&yZt>)G1u zYciZy(;ivZ;(?KhE-zm856d*ElSgR2zu22pNBgVnd-_;jAJm)3@N0gzF|C3QdPq?o zI!-s=s?&}ZegM2GTv<3_N1e(ulKFG;?Ik_&QQnT#gCIIRDrk~zH~EQ=iQz!TEubSA#`$?vDVJ>gf9HY$}U=O|P$JSU9o6Urko$!pIrSM)PZBOWc6Z5#Xryh0D|w zU@nm3BQ~Q*YtBNO2Gg2z-&qf)(|92Uvu+NBxknO)#45d~>*WwVM()%ESOH|Ain6ju zY_T=;nG@=Eq)Je&R%p@!=X~(j2rX2Bvs%n&7ia*Fsrj-L8*2_EbQZ#F5IVZu5zv8% zDvW}bBrZoTHi9*JDAegP8(dg&gXMBETB1iFn7dwHpRcc%qxk)Ng6}GHIxvca(#pyU zW2x;OO`q@rM}zkxv~Y=?W7%Qaneax$o_vX>hgQ)-u&N2^s$waK2LeQ11Qb1TBDmT~ zvE%ie@nngfH|7^R0a{>%S-Bis2uosgf!;P);HV;Pxyn>50plaieZ9Gv5yI%H?>f)g zMvqZ}zO>T{71%*_O8O&bFnd42tAWU3o#_&7wPU0zTB!Yd_4or`IQ4TX5lhtU}tI~R8K#b7o$$6Dfy<*pgF2lYf#s8sxpSj6GX z=5T$A!*Q1Jo2r;kn}rPVYSw6^7SJ%=A9mTVeLp0`S4h-3T3-}gx9@t5C4dT~7Y1Ku z-Y)dJJm63bGf?dO>+C~b$c$mFf+fBlw-2~!OH^lODV*LYadW!mIZgOh;sOcjZ^+MFH z4353sPb~v(q$+yskTI!-hiQ^<>+b$w2%)7BZXd+Ap?JsXLOdsrt*@9Y=JRpNlsR#??*CJQ{06?zbbKCjb1Z@ax#s zEtALOr%FJ$+Wccyc(tM6yTYq~-uz6r>s|7+zt47$>8=q*7N*1zR!kC%6K_*$oMDmj z?tQKrOziMnOR=5&mR-&bL=`C>dTJ6ZWt2oSR$NFl&s1n8ZS?aX-zwZSNi@ucSsYs> zwI-G-iLK1<^25ytWKeZICp(oQKRf!tS z(q}HmRj$Kn@=KNLJfuGlWlw)rmmX#HLPtF<>cJ+z<;x%DPjHz2>*PX57NC&5nr1k) z_fC~1+?P2io{Je=odA`4(5z+xjhfi}74%0QirH3* z*IQMcN&eJ=qS{V9j>Yz7^_<>TM;@Q12-L4L=}w_SS$7SGNE8kWY%GmeIdfFuO^k4_7C}aY}>n?Ch}#+u-i* zN_e@uEPI^nWijiTO&!MFS&BKTp*~HDKYG*ZR9fMb$UCx-k&Xh%2wosT zm1f_Ka2igBL9E-zE|9CI><301Um2S6I)$cSwNaNN_f-hv+c#6@S(wvblQFNW;CLMb zr_LFbQuW-EN8>V_vc|@J*{Nkeh;Q-k7IRT|814hmD8hyqrY-kup9o7l!x=vV!b;6*` z<92)<#=he-j**aS;V|cc4nw!TF}aj5WGALNz2o9P<|sh`qXbNrW?>*-^P{z5a?F~ zHhO1Hvdis={c7{L*(N(o#s6krV-v@C;kd|>o-q5pM+gakTB!0)b?a6~=mUgdp=a#) zBpz@_qbi0Xv9uI~(8q>dEN|Aoo;w?Bu%oVOjg?c(?x#Tj56r|KZi^7AA~@+f%dTE-A9}l;ylY&K zpNi|XHLgb;A^4<2ga|&_Ea~Oud%Ekz8iVPq-}I0Veq;~h&GulEQtox(9gI`?DBfuh z7~a`JTdPB|J2V(*9-aHTHOSpgYYJR~fKemvD%+8zkk}YnME$C`<`HJJu zm!~h=^gMffP7WJ&YxB6Byjyye?i0%dal9$S!9h0(aXWwp6X+7#zRSV#uIi=+*x|hR zwmXIpVrUEKacVcm&a31VJnSn?-+J!aYA z0VC(^m2%Fy$vF%}2QEg=H3*EH+q{m$F4;&$Bkz@gtFEp^XmQsOc^QUOb$;T{eUWOh zTru6rv!(i!=e}z$DsG3O;Sp3Bn00ALTgpNEJnF}1YN5x>X7iWk7{YoIC~L1c;<>-0 zN1vd0ZJurO7o3RrE`ordrJGj^egt^VTja)f`^gRI$=l<(s!G4nfDr2vef7-HSIrET z|DZx_K>axRZQSw-@{RLJkn?%&g4wjGGMxtBMgv9CaJJb$WX~PwI5JiIz($LQ<%h6) zx9O{B32n46EG?w>+(hj(1Ri#u7;YZt_xJnspwVJN%iOMLT{~JVyB0^!WXhKZiWe4+ zFoGxjs1x|Q!DA|~OFq1tQ{QR*{ci(3%^0?DO&{(zDg*A@h4^`v-KEvJCCGTLYKSa$ zn{2l^{OV*icDoOWz6@DKrz2-5GaD`A)?@@#b4r}$U@}ECfmBDurhy^Qi zf5vl}AHxp7%LR^XPu&v0k~yI!iIgN^A-obmDV@`*mRnTqWm?o`2X|!xXP@m3<7_AE zj^=vuBq8;sJKwoWzrCa{Eh)>RcQz!#XuZ2zWSgf$lOU!DI!oG$Geqyk;IPcOeGq#> zIy_y8Mpj9dgRiT!)S%qC-KNP-e*O=5W+e;AzvS7iJ{kHi=h2ZoR^u?eER8IaQZoTl zX@n9PoGGrBv4Ds1ZDYJtW^fzq_nR+I>0KKOYoxMJ{Uqdir@^rD71K z+4s$Ub4c&tKI{2n+=pZ<1+QK&wd8w3c*;c4)$c;*ANYU96wz9f$oZu;ah;!bl_u@f z%J{2k6h`N5wm)16YizImzPfoU`0A7RzuLzD%+EU6eM!~wZC}0eLHaKJzRC2CJO*&h zWLD+&&nldcAxo*kGwcBYJF=kDD9o zyagRZBr?@WRsDf6ltZMP2Vv_PD2HLAlk$^vVp#4u*>n0-@6>S76$MvTKQ_f1T-#<< zR9sGWha>r9&R$2>bv1!*0^)%y+O)cZ4rpfu?eY>*y&6CR&-rp{y#SJ_>+G92fFTt+ z>C-_tb@HkDjkaUB;LAt2aZ&m1z2E?7PeA*>P}cs33_h*%h-)z;J74`KZl^E_aj|idx&#xK#ZP8K zL`w!@5}#~s_1gj#5{SxHXkaR_FcoX)dBpWfg(YthgmH^msnx_|D*0yem{#3cwGpfK zNu`ja&07@rz!A$-F6q)n(ic3D_gI7}efyB^VT(^TZ9~IQ>9zB1womU?M+FQeX1ISw z@fMF+4Op(Z67Olg(kOU0vDZjrYQK7)$|OxX^UP=wSaUA6yvTD2 z*o1ieP`ndDE-LW2j|Fit<~mfsgtsC*zsD1VVLd-E&ag4gY5Me~T9kFC)Y%)@F)^?M z#40=qd@}AKT(iBYd#g%Nrj3w{+_Nk2*SjZY&g~JwT7`CaC(89)w{o?FA3@{0M(e3? zk17pYY?S)0CUAHV2a6vN;S?SyLu-{{VlP}qZz^qb@3cr%O%!nsm2)@-zo(E`FE(Y9 zBeZ45kT%P)|ADYfxlGGH-lb@Rlq+4U($>vX?4ag6uOIqy>eBeXrjdA-y>Bc70j*AJ zLws~)AJ)n~sE&(k0BLENT`sGB6g~I^^bofDy6s*^V;tkj*xEm*z|jsZE_!3wDEtiI zk1G7Xm47baUl4!pywmMU0-5?E#QU#McaAN%5aQ~elO!;jPx45)2Yk5pP0QF>QK zTOt4)weCmJyWjF_(0#<~g9aM-c>9f6cs&J zp?+Xsj-Fl~r8R8m=@pBHnZoeqx&9L~(-Z_6a+BE@_RUnZcV8T`(n5*Ax3io?r2JVT z4B~B!OY55BY~XSsEQ8Ic>o@1Xv>&K5NxVO2eD`gCRE-LabgZ*1{pGS7z>bB-?iopW2B= zKR5e>FvxO|XyqNGNAeDY06DeNWB9_|N_TPc&PsEhO58?lTZaf`smzs$&V1tBKBTu_ zm+2Ql)HvHMWVXYqa7c?_ObshDDzjlQ--SaAAX`bC*zng>5<(zs7=JduVWOn+H6vmC zIcgCZ)||lBrbguHTHm>U2k)e?$g9Z@S|y4^p8xLOmNi~e<1?##W1`byh~UU4AU32> zQgwNZK$JUhtttjQ=XE`Nm+e$XMp{Vzg!rg3@g$!i;voY0W1nHG_=DMy1QN!7?z|azoXH4X`8NahsYGI|+Rj(%dkzwSIXl^YxY;#P ziPcjtob&R2Eo$@tOW-8J$T31Pp+MhMKWbL5=Pc%{$$B!M#f#-=I5{7zN2p^X*{$z< z&JKs{ahl$n$yQ4q0ENX)++YN8er)az4<@7d^z-8VA=@Qi(zhSv|5nNO^lq3OnhGqC z1vmxkwf8cc?Cp57P2t_DK-NLrC$0Bx|ChXHX>J>5^344mx#SeSALSEm(KZuVQi*b$ zWDhDuq7!Xo$t%j4cz*qd21%en5+LX}vs1N)Bnn9YjeY~@ZV+WDWucHSyaLbo>$pAT z4Rr}?jMec6ho$R4w(i2G*W|1o@@8;R5W0|=c4_$1Wy2T=23wcEj6YgtVhGOOd$9{$LAjvq7l#s*kI;`f zQ$rpih@yZ~%<2B}xOx~AV~zTzhpnF*PeU3NF|Ss{K%euPC45Ejvw*uw(D9TrlBlecBjt@p=&JS`Bk!5ej3sY%9)?X zlL;gNj^m3DgNCHVJU>IS)8*yzCY}vy?A7qjrs-rMu&`xpht590pp4U-bde2e9~w9D zBul50A*~|6#@*d@x=66KraKfhHx1~Kz%iZN-XxR7pk{Ur$aEg7ZjA5Z0Lz3s%7?K{ z6x0JkV%cO74{FR!M(O`BvpN)rctI1^Ud_KJ! zCazYcB!&&>u>lA2S{PBmx{2o>hK^}-x+KZ4NqWZRJiZwQsAIs~UI1wn)qs+j${g9C z&q+96?f3a_oczo8eQKNPvl1|t>-ts1lD>fts9VW>8Scs`)+Scv+wf-T=9TAYq1BXQ z+#e4QcYxa$t<6whet<%VDo~!uWu9uVc!7hW^r7te^kPV zQqF?Nrc{QU#&n~9J}TA~hNZA=JQevS-N=vj`hcu#vs(N@Dzfy`lJI&Q7z!LXRD^iA zN{B^>p)qvCm7n;MMq(#4?-gk-G16&8`~ah)cWZnXG6 z@D%)S+kJFr+g1_@jv|EuZBM^f`}3V4@R3)WO_|ox*zJ%Hnc_15*iV2;%IPV8KsyTE zn7~7ap#}Qr@fi|M6w~*;;7pDf3<{CJM>y8`xGkX4>x@?Rsnb~npnYS#+O3~<{>?J!Um;$O6^+%(TT(@ILf(jB&_M(Rh5~;24 z%Cz}5x@Fc*LK%cn2D3;4q&!FDN#dAp_uG>iJynbjZWdLXn4MO;yd*%;qwXY_vP~R@ z8kr`FV{+B8LzNcgWJ!0s{M%|5AHO}paeDG=ozsJ>aijl#@^CEQr zvuRdTn}Mx7iK|GLur_&2V=3y4F8rQw_I^jq<|!|2EzKrE9|SI8emLmJH$!%rZO^nK zTynoV<;JpX{Y}PyNIBR zPXdcOCO>S#pAym8u7Ai~30_y)vAIV{RP=H!b_6%d|N1OT8t{BiNu!Iy!^3L7$;$sy zoOXB*n)}o++8g$h)6KR$*R5*Lz|H)tZEXnu%vh+rM`S8POzp@wbSKm~s7(NS#Sz2xK z4P)0rAz^6B1BC5OpD5_@rDt~VrPz%IFL*BF1r;CY5yi7PQIt;6%SUh!H~DfI(ne~8 zA`+p03-#~P{#D!(5fe+yyS%!Yt!9i-ZE=|}-qcLWrX>bJWlxWfyKR2do}tB;(co$T zceBC%$S4Fa<$7JsmUY|(-hHuaj)pg=Ir(<>RDAzR?0>p{d^%NZ{PqiO43#3_YL8=H z6sr1cmRLuJW}HhvO*JGDhIS}gX(zaA4+W9DGLm6bD!J3+1vRe<|Il%bqN4aynH9G_ zJiL22{0|HWF%iU=5Iy&_C80Tg#NaQstEtcYB+LpEaQZ?zGhaX^- zLt$k2(;3S|V|mLeeuXDYSahc{dtCjs|I~PAxh{M6Sp{QcBZ+nWntJo6U0$SnT#l0$ zQZ%6uOx=47_Z2lq_xbxT4SLw7L+G*i{sc$7fOE+%xzl>QB}VLBy#Kk~5%1(@4#_2K zdqU3c>b>?$D%+EKA8?G*iaD!IyAn(!kE4wC_Uu z>%f>N+4OdPkz~s+=}fzwT}@#WFJkRRmXR&uMW+3|Z$S66_~L_p8_&2(CdoWrBqQxM zrV)=m!c{U52%!V1#BRc%q1$?vP9B&Rh&T6(jDvmUfoa>2L5@|!LkF>HtVP>c%yr= zNJP#tt5y6cFV@HHBh?D}&22ifR$GKmpT@&}ByI>CA@9o_JMkO1Vx{=8I6$GRo)cil z#i?(^#;xJXw<9Y}iw1VfPD>{WswzJ{Hopl>>RV!)Ea6lSttC84m}*9ob~K(%D~bK@ z)0X(FrOGYTNVOuzMRcbY53*3fqVzs-(}qP2lSa2I$ZQ+1bGDsA~Xu= zKoF)trI;B{+^jn0%}#`tY!M|WKAh1SEx*5@2P7dOt6JH`d7N#i(Jx(`qFkE2U|f{8 z9MT%|3f57>Ly(Dzs`$3*K%{$sYWv-@Tu0z<>S$B)@KhlcC|2Z`$brubnwzJbRUgk{ zSWF~q*7EDCXk2|6^g^uh&E@JJ9UnF+eJU?mek5L)xck+wiF*;9%4k7Bo2|A-K_Ai8 zPgXi-BGYl^)bL!U^mq??xyqcXh|0C%Pd(e(#h2_Tg=Hn z+0ev44{!Aj*jo-8d&^xS%D?vME_N~6>UBI@Ke%i_u}@)HLrC1hATasH zy0w<>mklqJIPaSFpH}7WF#Q5OtbkQ}0IU(#fHgh+PQ$_|O$ZPST_+H-qe&3}j~+do zau~j6uf}p)do>bN*w&e}8@D_qV&{y4-S1qDM?!15%TNYSwoWHIp>aL$On#)Ib;?VI zEoGewTmOczX)=enN5~rV>;%)YJ%J3!fJQDe;4hfFI76>7L;2ok58t^q63WPVH5WrV z4~!fKS@#R!gzUHG1g83!7l$2DZQC8M{r~o3S<<@vyT=R=d=Lv$l!C4}#&@Co*zT|{ zYlB~a#iL)#xr6r~7zI}(Hz>ZOoBeQ8pZ~UlfT|1CRu^ee)+A7*EDQYo#u{wX-c)xy zw-!K5yQEXTDrnLWC!66od`C*KArM+=c{77 zhN0s6QPB?xz3B^{@?U6Nk$YZuWW>^u_TWPijRpxjQG9Rctf2U=Co1jdn59bT6Scs^ zZRlc7he_?>Olto>VHwxQL#y#`x)}Q%aZ7)1AK!i1J`xv^htIIa0=d1K-1;12I=BNL zHcw^M)s*C>$In1xb_Ct!%JNBFlxrL+BPbd;Fsj8*={Q5HLfTRHRxL!hSJ44p5LwHW zwo`%N2&*-SxKSi^9p12?!I>1&lpqCGbF#31-#<%J#R>y~hj((EK16nw)x_D~X42EOpFv^S}+4EH>%Aq}hJ;SbRU6esil@IPEjbc!}2F zDgMOnIP4iUS9g(Ft|s7!TJw0CG@;Hp^;+7)(p|T7B;1MSQBf-~_lzB%m&A7U_*5_2<(3pEBLGkGCjvpRwGTHTtC ziMnM=5}fbnRXZbmY59_Ml>#PlO=)?dQDZ;Xri*m4c&ZMXs$Ea@HTE{;^O7G!%k_a| zEf#uba#-0Osm`IDX-CzGm>7?#(K{1DSorVi$5?)?$Tp6v?Y;~_yhn*-HrqoK3&{nJ zaVo>$>NawGvNmQF{9khAq7&H(%tSpxT2GnGUh`o2Pu2Z<3!mgzpc_LbP!f;(G=~WPF2Q9Bqd4{HhMw`JpH% zAQe(rml5odKi55SaqtZk)q<%VbW;1`dwr9&Tz4QknPp{0f%`fq6NGNlIBDoU{h^C+rexvN( z&2Mt&scs*dULc%zU9~+a{X@kvYPm%yW%>)w>2ZzKF|Tqzi+Hy?{FQIC1ANP91&!d| zhN?leW0_Y0b7&>!gubZFP<*o-Jk&m-nR6Ndmf2T~LBcY4zH70JPq$qMg05>{8(uaY zVDzcYdlb}$mXfnAqmZKvC*Fk8kl43c>m0;ew5xIbs>M3;bTGMMvdWBLic-ZX5s*X2 zNH$0#_o|ttDm@75StG|D4dU49?*n>aNhDGwZ#l&Y|&k)1zr(0F6u86K~uZ} z5;@WaS#Q1PLxg5|L-L(`wKb4_?ExbCfx^KT?@XpkG`MuU;oCMkE~`V&+4{QA{)Ha4 zf9~>EY5(4fj)Tk8gJ!4LWAK*Got=6{A?70D*#?w^O(MUpGHY@z;@NT&Rl&0_)A|BE zDN+SW;n$(*QeCEI!R8`N?7-~kARRSX#-sAo$ynINlvNr~K4J&Nwoxc~T2g+YS+IR~ zIGo;{Z}*1>g7Z0HF$MME9@I-jId;|)!p)TGb|`7U=Iz}2UK-iu#e$FI7>9ejw-H%^ zArz{KAhS|B^SbPW)r*2R4HlGvh6MAN-_yWB;J-5*Sop0V#_T=$E5qguYFXsJPG@gB zKTUS@-Y7J6zu}C^&T;=BEDV4qD5_S2pc>^xH(b4(0RdwFI8-eXU?A{sxku5r>;`!j z9g0-6_f%1!jOxp`A8|@Fe_d_ch0ti~`zTFVu$rh!TtwCuhVW>&eT7kE7t;{J0ggsz|ewG#4w zsYq}@t<{F=-vB{CzQ3VqWp#VI7;#MgT0ppitS*sGQ6C?YLBDN_Q-17ON0x4IzS>Op zyXWTE(t&hf2rLA{y`gAPpRL$L^<2d_2_*b4FXF}WW;&lhjQ&-6xzOt)fLf9l*Gaa> zmLJpcIKE2Qzww;(m&~;~3N6=2CW~~DCfPE(PLf&g4Gba}mMsJ0{C071tqDe8+D$O( z>kay+;JF-|muYqlm|V=0IJ=$ePs5Z=<0j6g6RmDs-)c{y|BeUL0~D98z(}vg)9I4_ zM{f=x1gT5r09eswh#+iELVdLYh9NTjfYX8uIbBXKmy7ErBscLypV!IKxSrSh+sV~9 zSuTF7$Ilfxe28Ycr;8S=YYRH?=edR$AgTL-6FaAMl#eEv7X>8 zE=OrLOD0(|*Y?gr8G33ntH&;;DRUOj(<^OSNmp5wb{J$~{T@w+g>;CY?sqSLwAT-C zlXW%CyXkZ^jwhpK@2!RnL`ls_Hksai9_Wc!YCO@U;Q(8}dGq{so+hKgo|Y@+NdjX! z$p%iZXJNFMPR9eyo#lHG^9E;SKlA1Eb}^f3u4CPRv3h(?7+?y9^M;tu>^i<&Xmfbf z<3lDf_}_O^xG#=RuQLi43J#F9_=2d#^Kp`Cns2l1S7*1g*;wDB3YbSVUFd2XKXf{L z#?oWf8#&}=A)Cc_L`zL4x7mP=h@icJz%OR)Mz9GNc*djUbTanZIbqbSfLnQM0~6sB{s)|hHqDbHtJ zq@}$i)-%!6yS^E;_l)4$M_DeFV@h{~pC9w0w-SNv1f3URNuG$sY)~~Q8FX*hPn-qe zm^6N^26Ij~eUHy~$JOJbJZx3y&e557>s037vAO^6JC35s#Z(x=8;~o~;0x+}y5GToJ4hV&U z8hS*qq!A2()ZB2y)xpC}X1gMPoj+|MF#!j(`6y>IWKrq*%`McNMbPUvM>&{fIU-3c zKp>lVB`}KEHOI#Henb(Ae`_7I&R6@*0cW(j@NN0D=X|w`RUty*=>h6iq3FP%&YR1t zB+Jq9@c5#`ThDQkQMbLamUD%ZO?BU$G-Th#Dd$9+uQnTYn5=Gw(*&vu40T!pv^Y@J z^Jp4{4y?54N8B{11{Pc63ku5eicjkwFT<@ZV3xZ}>PcFDgysl4Cf`>@&*v(wO2<{C zRhj`U8(!f+o&x8f^7N4%mWgxnej^($nBtKI_eO`1)Sv!`y=Q4|<3{>C`#W^eDT6mq zImrs;<;D-KBqz1;VQNItGRu^xC8@;ze*HJVJkUc9UPH-|tM(Avkp_)MqtWO$NVYaV zi5A$ocG$JHhM-EBuD7nvM@m0tSL&Aow??+bO`_kO=~mFl)m|>6uHk*0eeun!S|kzA zi70NJqNz<&QUMutGzCZge7*W}apO%_5<#g_oge*Q5HlIVtP#zAR^8{+<2QkMe+KDs z*y**!7der^)07xwBzaj+>Ny4%a zGRq2GHb`(MRDhJquJw+FF0BARC+)8=`0rk7|4IQt4T#J6{3iA~Cy4Z~^M4(-33-RX z{H7lMj7I`tGaEPxG2*+ed-jWELXBAV$TvcOe8aq$`M$+Qnx6OMa3@O%s%2?F3b8yS zh3XgA>$kn#bO!)^uTYY%NsnHiESf?o=T_Qr=0x`e)c!QbLEJ1rntfWY?%>lwAH$l2l7O7=W#yLMO8 zt4Dhpbk68}oy54pbj}Py{(ZgJ&euc2@VD$Q{k!_lcntRd89dUE39S;O?jzYC=-i~> zrnqc&I_SQd-fvHrj$_DMSA_e|#8(UN zz1bicz@V*Anoc2-5)?5}(XOJm3{WsYX}64NRz5r|znyHVS;0T+-^P#+RzZ3D$OTu4 z0KM{|B}fA1;>ESgW~o4bxG&e=-apjE-<{k**7B(4pzvnykcpvCBUXP^@|D{LvQj^^PIv@Z|lFO znoWm*O6boc6a!?0x7()djkB+(vz&FEMtsf-*AgMruEp5=Vzpe3p*2FlD5eywP8Rd0 zK@xRH`Vk!d1u#1(Fjtfj;>qARWUTHM;waCH*%MdZfP9+@qSCh7n^oRvPPi zF?YKs?bCXS$?SS{|G3dR?jFFv6e3%<-+Gv!{kkTy^_C87|M_};vzS#IYDY2suHbbA z*Sf2n!{HM%?ReacKZCRT1VlTOLjSHyx*Z{(d~@E?R=NrA`0sy5C*FoHdDu$C!q6DSa4E(isH25ujY zcW)mT7I`)YmzwJ<1a2FLp)|iQ+w8|b2qQr@s?l|CIo&fOt+ z?sVVwgKURITXp+X7;80e7_MferlFS(MC84Jzs|q;NPuJIsleHGrGHZci%8W2+99{z z4E;n!qto?$?1T6bk~_jPge%r-_b3pqJtE!>cW;T4K42NDdy;A=2p;jITeZekX8W-4 zZAO2&HsgfmMDy#jty>Ua*C>ov~QjUQT^QO>~XzW{5gN!!#HfZle|0HKDDKL z#lpT}N-&LZgJ73!2{j?i!S=O2==j%y2?n+t6O*i;4>h$4LeTE$qTx~b?fVS1Uo0HlY9myUl8zIFur)=0ZcM+%?C+oUmQ05Wm zf@s`O{)x;MwgW`=%jE3j!<(z({N&=~?L^nzT~4l&Bt7M=q>q{sXAh8LW|?0qQ13Mn z)trfaKj$?e>VN&+JSsTNf6V@F-5urU#zq+(lVde_57s?I_atnX&P3K1=z%_oL7Z5E zPht>&2)Ik20iObwYu|*8yts{Ls%njRK%V!$W5|4WmLyYI9x33EpO>7T)xliQX?>m9 zc6$R?V;4szoOk+X8|psxRIqi!SQbiBfhBK>i|oU@seYzA@_U(`zBk6kRpbDby_&vz z|8{!v#z8G@3%TgLZxKDY35^*i(1iZ(Ms0;a4vbpb8MR5?1`P&VgB6)_io=uNIR`Lh zas9OR_Fif~M_{@xmgw|;Va7o45s`Mlp~V!O0;t`?w?0c;8}Z!(mwFU3v`TofC)W*# z0D!!mcKAu)>T?D^$GUjOeZV?lOla&`J36_)Ijxmrf1WxlCDED8+xceeP^^ysFuyf_ zL`UE->pkB|bKcN496{4VF&xT@(n}^3O&yo;=Yt9eko}too$7Fn4g_x{+1KbCW1d{u zmK18ZZvUCgUQgalE>5oAUzk2?&N8~eT#jkK2+mF5h7Av@5AEa?Lp(-(_sx)A|5?eS z2z8hvHxvG*bAe&gUt6*yxOqRo{u0zwN#kLETYh!vF7{JFJKg1MxhiX6aCR0>TM)wA zU6`ZZEXruPo6S+4=h1^$I|wy{;4e)L-P^@|FTuS+>TdT(Ji9BuI%(esTaIHk;ctkq zhqghY7ae4OaR~?xdVV*LhJIQwWFHR}f&ErHf2$d<*5&Mrr`%!hN7mv1VG@dqc~Ap` zRiFZ>tc06ueS}>ud%BynAh9aSG<dGXmf z+2!NI!*T)K|GY`&(Et4xQcq*BMG`oXSv+Y*Y|CR)-_@*vdu(@3tL0P zQ6<{055rso)Nhgg_i=tddv?@8$d<@9WP3PR5bD$t?y10nfOnJ+vJzi&z0<|77%fzsOmzQfzN|gKoWP!(z7f;k0{C>P0z|% zmjvaU-^1Vz(o{Il*7HiyYW{NLi{cPPPkLrYEeNR7}mdU?HGJwALN<%Kc~lo#(^=$hwVdUSg15CjYKauXt^M=I|C4 zo~hf7rePd@h+9w)Km^=7YfciNh_$=!Au*`1cjKBcWs2L(*wIegT=s;C7<{m<=Q0Oh z+qal0l5JeuJ&!&3GV3Q;Mh#NgFaLRW@^*R}I|Aj|)yeDVuTggL=4x{B?&NCvTRc|0 z&KQmUUS!j&$=hh8aCSNQ_lHSa0}wNWWUnvYe{jWG#h@9X^O+-b9N{`8NGR*cqzIS} zBKL_)qzHR9(}Ctt(^o+}62u`wHcj5?u~as(xUzm16^WgD(n?Jk+?*dnXbM28Cs0tt zIMab59AP>Lhw0EKyHj2(ue^>d*`VFkuKS>>)_)%kOxY? zYh7B8*7BQ~AYny_+hpOCVJVI;Wt$f9Tw=Fc2`y(ocRZ7L^zd1Dk1XGwUC9WX!`W2!g=xM{P+3d_H%twyvCeU zBm%5v^uEJnq_{dt)NjU zN*bX-B~4ltP02R9ZM9A)HB(}^)U10DU$N}3hCkp>Y4+d8iZ8d{{t;DRreKd77f&3a zNUk_SZi;j1w*U&bQvx<~3DA}~lMm9x1WV3b%yY;YLr6;E!G7)GrB z4B@WwSlnOAT?cJ0iVnYQBpWC2X!snsW=eEpf}Kh-mpZC|kOk7Z5-GUqF_oPm_;EspzU| zG#LUEcs@OZg0*?u#46N7UxIPWmrSQz>Z4hh1qdu)A#1tuhrOeCmw@>x^FZsqXO%p; zb@F4Ya^nzV9xO`~8YfHG4 zMoDXR-aCQqJJD?dUg;i@9_i(}eUOAII0KI%bgCJ2iM<8YK$L-p5x6%u+sraeVk(ZZ z$NR;n)%wmX?R52czYR=~zN^sEV&IJg&Wr2koeVs2A&h$Ioh*rRj3-kr4L-|O>$!eT zYZKb>vjeFF9uV;-&zkAZ5;?3g7#H`eyXqMKzSw?_A(rzPsaC)#pu}yR4C8JMLLw|m_J;F~#=3owR8P)Q_H$+F0N{k@qi zt&^D@Dx+8VzPTj+=2OHa*hf~Bv8RN=Q^F(mUqw^qrD(O#a25ICkq<>j9#6F!WcPRj zhbA~L*PHp|t9I+dAZ=wY5s>?=RKzZ_=v{m@s671L+-@Bq809s$pIN5H*~5BuU0yHt zg8_(U)m-c7^8rfuF!EWSf!q9a_3-VTu1#`lN4eW9L)|?OGB^cLh5YZ<^Z}$li6nVxSqL0d~aCXmK|Nz08@(fU0cSoYXj388S9T7{~YNM zpq&RvT_x|;09M!1CDI?0?A4q1r@t1HcURLo<@#gNc+`6oG-YHS`DUt%b5t`vd1Bl> zemXpigZLe$!KX>}G?CK8X&FFNNhGY75S{tcIoE{<4m*p43~sbK#b>CZE!(v?$yF?cRpLk0atsPIA!Av+*)z&x;_ z5s$%sr#}b)1v~Dju0@J-wa3m`j=F!U-UOf>4P`~??N_4R?ajaS=d|sH;zY-eq_9~D zCGP$oJGiEBWiJyYof6dYt_z~DOO7SQWLyOvv@lU#yOMK>a@ z<^bY^(TLt@K#)$C%lU1&JXzm9YQXy@qJ|GdEAzBsMR`DSOlm)B?MzzMfwaSP{;m%P z5fo$Z(#`ubZh!B-v+LLmrXvo=98^gLs&gv(xS!FW5=16e`FPQ3{5B*~d zF+f=|$6SCFqM}S{kX-4I2)<&myZY{{9D3O|ZVqb&pJFtL*?RX>a-gR-uibv86b8iU z&R#MU)LnzlyN2YpoJLPZya(|JrBMe3DUMK{2J+~rXkeU^qwb%ohc^sETFE<*;MJxX_eLYIYJU*ZDRgz^_|IW-5UAg1f^aZ3OGX^{ z%OojgPex9n{S=$|dAa>u!;IPI2yOsnv3l_lxvZE;SNmB*atIDwzp~9|^-{9Ax&(}b zRAW_flQNcru_`azUb9_-0T=|%FN)H4(+cg!2A|7f<`EfD-lXfT^ZM9f-#B3JA9T8; zt+DmUQOI`Et!eK!*>v+n?}XV51&$Gq5bVcMrx>E$&y{jpsXOPb+fEFMY_WdqV+;&X z30D28xbb^%k}Mi8~PBb)~O!H*9cCcA8FRx7Q2 z_gV6t`eEZzL<%Slk{vKky!|}4DmM*VUl~X4VK9fH1Zk2Cvyda*GnNlH@#BOrfkz1Q z;x@`5UrpIOccs1ZV=xwb0T1t)YvWVzn&8UE#Q8`#K;l7`)}e}+qZoNn8~7q zVmd}bKO_OL@tUbJTeV+q##qH7kj{f*s!!_q--&oqb~acf$SrN0aB#69)naDw16=SMF3zK1pLYl{>nS9SjN^ zz;PqYAZJkoel7C&v#20gvoG*RO#N7FA9*Aa2 z5V=y`s(z+Z4;&Mv_3(T)R&@gITYY z7HcBPhGK5YcZ-mTdysM(odg&awv{jE)a0N-Lh_hX1KB2(;_$Lg<4Rk+kuz1yM?fIm zUDxBw-i?Ba>p0$&aFj=_sc=E5L~=?QG$>_Eqr29(-8Ld==wr>hov<0Jw5*vSMr<1~ z4=A+TH_Tyca~?RNXN%?Xd|7^*um3qOJ@$`=AA;wN-FY*mm-kNDj;SuMkZlrYw2DuyL~3!|H%-im%6mA z{?pBr?j(=hNMC1i^LqqGTx+sl4<<&UZ^<_N` zwH}Aak`RZyoU}C%{$*q!ZS7fWCwsGF`2>|TI3H(QV3kE2e9Mi&4Nh$^&ngx4cD@B{ zW=1BR3({#F2lb|Rfu{-G>0K~bqX~GDbg2sW`G??f_^>VR9+vY6eGozgNDH9NdBs?_ zh9=q1qo5!Z$Si)dxLa%kjZo-;)vPQB{$u1X(M7JND-=3v1c2vlDoNAod|3{ZD&$qF zK;YTHa`?&7--cgpSpd}V-Gl%^X29R~&<5ub59)pBlCcK_ty-UD>NHBt3l>Pf- z?ZJedI+{iZc_{x7^R`n*I3x|K|6SbQHg-_qoS8R4Hplph>-9-SPj&8i7Uej~pqU)m$We}9RQGBirfq(vYHi`niS;_pr{{L(Rm4{#b9?6{kfA4SZ zM!m`4ZW!J6?yW~swPu%XGU{9pZf=Sg_2^^2cV#`4sMX{~?N@X2qmAKUSN+T0U)Dzp zi^XjExHbj`5LgF_+WqIzH>9U9RR9446SdD2&X^1{MZ{#qET;nb$5GXeLmt< zLq88DAETT8r~Zxgb_rL|sW)pT%2Lup-KfD8iuSj;LY~vYc+#8L-#aS^=)FA^|OSw@ooRcew?qi2@uhV z<`%clSor{VDm~qxFtW;F!D{V5xK&5lfhpsG`J|f-7~l>D!bSE1Efw2N^XYfsH*C!i zSqYRF-BXO~vxYq!CP_i{HTWN)9#!o$q6ViCz60w^Z5R}1w(8W~K83*7W*dxd6EI|N z=;6biWwFL0*&2XD?14foU@YvX`)R9zo#y}(F8^(;2FB6FdRA70-wNU0PG0)serL>3 zG$rs0?8l{E8!39uDxEFle`b0_t6W7a?6Ch=z>)KE1q2Cx9~`M&VS@N}I8s47=mPEA z;u`YTH+kZfn|+i#~UqxMXVT*m^cey0AypqUh_OJ}zz!zzxn? z-o8v*=MhfYV}J!gnmA+U#Q>jt*cFtNHj8o2pL*vO6qzh})@pm;CA`q9=Z2BQ|3rTQ z<)JvWyNaLJJotG5^n(6AK5dRMz@}>;X-|8t0Ianpc)Rfp=9B6~XrdTtYyMGhAEkOx zbN?mIFD$xoNQy@@7KtZ+)M$z0LunXI?MlTHTm&ejfq|z~HW&Bo;q?k=eWuYx#qWdG zNE4%03N^Q}lWQPrbGe0YGfh?iNH;~dKxcuXeK?7xZF7IYV+k6oIC9Ir4sAp<70T}9 zthF|pCiRT+Fl@|$BU7YgNv8USV9bI0&*hTTj2xLZ@h0*0yp&JwOof9-Foe^M(9 z_-*2r)Wu?mzd``0n)A%SbYT$#%G-SmSMe%-GK!DT!n|eF%J358Cp9C6(44tv27jDX z>=+_TrkuAO5|$yvwk2U1TNYBkn<=oHb+xL>sOMT< ze&j`O(yRdl?D`NL#jt?jj<&)f9+JdR&CT4GNt5&#VyzfzgX+<}vQB*~#Q&Z2U2Nos zucGa`XA1H5NPPurVh3Wa3>R%4gjKT4os(T;r;j}(9*Z8k>6Ttt;rmLEe`Pe z2tR=6}5K5bG%Ew_2=_sYP@W(a{hbhy^LWugE>&%qZhh9>4Kpk z5FSRcp-VDBrHUnj8FKE?j(GJK7DmtGbey(w zx(42LxkVhy(+#D=)>KWYcxYmz1i9$67)Q06e7^S-zQa;(K0nl?Rif)-x_A(wfc|FUj3H8A$ZW*74Gy&{B$n z;YbKwt+&Z~cD0z#7t{T6_hXXgl@<E36_OR|>#mwx{t@pYZ#@G@b7@Gri+ z{e&h06MR>%c%5dwVIGChUqs0m_o)cz6>zH1#`B~ zah6Qdo8C~v&yN3sm*?{2W zlKCZ82=5c75PtHUCGjjrS$x^5krldAuf9{?tyq6e1@flhRwj$-KkDH)$&RMHQ|e5- ztmoydiVBnBg?rKe49(b>58*eT@L&OT;?;U*dtjlCuH7A_(>F5&W<=yKx$5O|FSun(L-o_ z3Q2vDr}(ClS;8JyC4#mb6$v7csG`F3yKifwf0SyYo3NCD{wMKlRua!VourppynP1P zWhP-oLsSA$BEJ&g<7t{Dk7=CEOe2ZFVvdD*b&u65Ue9oMkYn*vLs*hGSl35?FiKa3 z<#Onj*rKwnVVpJdHM3EPM&n)l)MTPQA~>&Nq6j^LDjm@En23fZ6~p5mg1rlogS7;Z zYV3ct0Ib=YR}YaK;1RQ#Z6Z&!*!_6-XY%7dUStg}r?NkH#V%+T>c=7WH?$E3jox;j zpBKAiDG{N+29%f`$qu)s($RjsmXJRdMQ-)USgJppWOl?+!T^qQx4BQU)k1M6RhjO1 zSKL>kY7y^}@$-H+OTVq#_-=!zaAz8?NBi~BISSo%|F~S}yOXIuN!VTkvqA?{yN5rv zBBLMh!;5>!mUhe$DQ--$pi|J&^8<`{3?3y8IKruc-1nN2iwBsxSxbR$>I=+f=;>{%9{$s*1c%`g&KnNFzRjVYALuw8oQRal6a8f6#7er7| z*bg9BOc6x}Tv3_kJ0q9n6cekDRHv~rKrOkfr?~8aL5tW8q4IhPML@O8Zt&OBd*gw3 zf$2qUZjwkrEV*G*#tiE3>XyoqXb6oS_1O46O_xc$t{T@h7;oV07E{ChD*>f(JbK!A zEA<<~Y9NW{3ud zUI~5;G$;uhSF8j}PT`m7dcJttm%;C5zDN9kAb&&{M2{!*Fo-S!9see`X-89S*N(TJ z@XW|Y9n91St!Si*{VJann0oN5S2*m{!o>;_@C>|a9h=AD!U>c6)K4+41%z)``+r=F98w~GLl5NeU z`M4+Q$Pr4xuaIv|5n<)N`ts#VL-Danr5l1q!}bA&XU*rVX4J0)Xk*5G=Gt@xtiNv(n@_nllNkNYPufemmEdDxHu z0b3Uc3F1}i15*JcqmNW{iBCA@T(x$tVG}OO-GeSe%1f}{?$Xu! zbi3`pKsxiWG8{@|tWgaCdaz3}rQRXL3@UzQtSAr&WMxVLlq=8E#U{aLZAG(?Dl{AK zVq*aV2`LwEQbDcIip&*>Fk?|~d%KV6cDF9wB6?>G#%Rg&{*lO95acket=(jHY^=Mi z_IVCwOU1_0{m#r|y#|l<5s#G$@$iuSgIZttH(bdwq8H=yi-)2Vp`o~P3S4Jk)-6^h zj~S!Hn4l@|f+6L-d~R=u0zkhu_kho^#TG=L3aQe3I`fB zu^UUW@9P%tCf3BEgxfk^R(oop4y3Kse$>W;B!QbORkU$(?9a`$ix2xnWxD_N(bB*9-zBh>l#`#_MEi$r@~0Q_Rxd!mlI5XxcR1 zafl!KRSgG5-7w; zjg=u29^nj>)~dLbclS)pW7BLok1x%UKOL?2o+w6x2m!Mr{Y+m6VFb(Q8W}nu;Tc z9;xR;!m!!$@GdZADA8J2LD{jBMe618eDPh1!FQk-UBf@|fs`3n{bGUIVU5}i$*eQ{ zDE1WQy@vDAITLQY5MmJKPb%uEYAF9!>`iZ7H&GZnGlNr46$GAJ^VfK_M#=jyhA^z7 zvS@Q8<5-Y0ii79cj^>Uht}JAr=31yiQ?` z@nStqN;FV{89ue3mILP7E8&V<-Vm1fmj*%1DFQ-AZ4Y$6_dE|T2uTR7$=M3 zWz=#qxomdidDf=shNK=@1g$sx9&_iq{+(7JKDhDxhw3F8R$~fs({BOB{>_#zkrFLBk4pzg$J}iw&Is2Du#aU1kX2HV4^0CQr>3n z!vsOGZ9**+&gvwC)#4eaXkHaAh<(I!$H3;QMVYfbU~YI%p66`Q6T5CF0(C1C)T^#0 zGvg*ywaE@&p)djZq*%VhF+`ibgySl?o8QFS-RC$fS%5};_0gFj1gd-h!WSuAXQNZ2 z=8nN1UL%<6><)e5cm>JpzcqB+)2MIp%1}WN3_|>qp233TL0c_xI``@7BQYhs!hF{z zR16rxDX(#>+XK$coD|8Ra#@&GfgQ~g7F$$*$Fl$%0n@Kw{fCZ99RwuSys7?K<)2ZH z)O}*52oruZZ)2)?LRGCY&z)o45D`Qvtny#f=XzVZ8s>V=9NE#jL2g||hC?a$>5 zakV4WT@YaqEgB9UToZUJ%Lg&_I;P)u9-C58ri2ZOOTm*$Z8*lEh4!fu9BR!MsS+*n z&U2nCWpD1B4jt)#m&{(JCl%24sp~qA5?h}#DYa(h?*|N`WJgs9L4&wm=i8AhLU(B) z$~p2O=5GofgIvJ?fsshGx{eFK;M{3fldI$V&aC{aetC$ct8c}1HYkb?oe8Q4ZeBKR zry(KkMDEK$SN+?&==0s^<|-QZCs6lve1KlO0437i4t%B6i2~zTsfKty@l4X)fY-o{S#D_wsg(7-@4!m-W+J&3HA(o#tRk;U#&!dl>zuP(=uGbJZY-A|PF{dL8s9yPF8h{C z1kU@LyURa2?TazzrZ+ANz88%QEZ5`3dgfyG%`w86d>o9+E$WDr*^p>~qwU-Vi4uX^ zqzEONyU&3uczRKM&Kw>RX~I2gACw1mfp}?!84JWK?qDG}^4IrI@p7M>u_Hea42kOS zOxOhIR8_UJBUW@OIHqdMW^>dK@hQV5Z7K=+`3u6I$&c>mC0^*G-Y}jQJ)Qx23PyW9 zi5tz&!EBDE2%_0}`#`mvJsu_JU;xTw=3(@F9#AoHgpt90R(sEgw3KtEroPr^aJ*kM zvUw%!NBs|j@nrOu_}ws7K3@9I-;c-g=053N>^V##g5ibc;>u!0&ap7UXF zZF>;r6jIFYbKzVM#vcd64_dYCWOawSMejQm5Y^WE5L$?Qts=$(7ZryCfoB>CRlKg> z+VnH7r+1sRwT?Tle{puncBlSFzc$CQgb;RR{#+eWe~5Z_6dk^NKR@sAXi`+{$SXQ3 zel4Gk2;dO3)tefgHq>JE0PZAtCq77I(j!O7=K^MpCjVCTi?`ZasiDMQp&(drUMUL5 zNI6*Apc9>1K&qMB-cl7(*p;C;8bFE*o8IVk z_?#*nTQ#Y(;0W4a#|mu`T~hJ-Tmy0t^UqH=@Vd{6FqxY2I4MY7bQh95?z4iK$;XZrHL@N92&qol*STA~h53VPLGxoY`e zS~5qjq=POT9-&32f4D9yLe=;ryohXJ`xZPE165Gw0AT zTowJLZDG__@$#g>#SCyI*5K4ra@&=t9}_(-=KchI*eOJW(v@U4A25Avv{NVq10QZXmC&R< zl=ID=lARtYN_OkIozUYK%YIabKM?*a$o}xW`n`d$ko{r!hI9j_o@m={C9jvA7Z175 zAd zUX!2-eJIp<{VkWuVo1)q?_W)g7$sgq6A#a;SQ{`KYINV62~-_bO0B46!a*KaJhMgE zAZSHc-wH`_Vdnr!l>YRL0W!1wGV|+vD_h4|g0K^3nL8GyZ@}c&*-C$l6$=O~@3Rw~ z>7afVriZ^)Q-yujYul))08U~HMm=SFC+yA~C1@Hn9deJv5YUc#@HKTVLapO-%{;aODa z^H%voNgFg(Ap(duEoG14VOGwj0}AD}Z5iUHlpwIzoLZkV)H1sC?MkO23~j}2P+P}i zaSvrEhAv006``CN=MzXibwwd6RiY66dZL2k*JFh92$!e7`U)VtGZGxply*PI258gC z;US<^X>Hw!gq-)n5xQZA7moTUgXJ=LikH3YX%CN0r(ZaHbhOawXg|+=P*s_bxHh5@ z6GnGDc;7}nfXKDy&Fw^s4;Gk4azR)9_F;A=)Pb=a3XulYn^zvh!dQ=`gvvN~-?f6anbm0xOd6w}N)v2P{rW7(+Jm4T?7fF!yXFol z4fh;({78S*aBGi+`)vQY!9MgdCxCVu2t)%ho$U@VLI9)b-G@#Y6514&iX~DT_Mx9T;U7UX#U0jYw6W6|>?_G{hN7KWvqr?9= zBUwIoJDMI`_dO45cO@0Blf&~1cRX2uAC^@Uy>{+Sz0>{6!>?28gS&Po=3VX|oQ$Ri z=Vw>$n1f-zO`)D$)UlTenW$2C1zRQ`7j-1Ei`oq92n1FI`|KxIXakhUc(RLm< z^5lxhF6U>%*oQ{m#s1mR`Kj!-KY-6!?EN{~zx+D77&u<6k2n2ueED^Ha(;eket8j) z-pD$YLgY}z^}Cvr!(LKIHPUYh>ZVwKL(w+gW%*CqbV!4mfmcRfYgnto<7ge zl6afPmzC5S(Ac;JwbaA|R^tOquI<881^0im$<}uOecLOIXdiq3tkX@>1M0I8Rs#vLV9kud z4uNo)+~w@y!?`Qy;jTcq@c~7Az})$OdYjn;loT;jre*-&kw)%3@Yy)$W@2HnaN96b zAT(xTB{P{=om%F%KAbI=kXgE!o9(3}Wi{0-@rKPTQD!vC{P*{)htOs3v%_Ew$R;ls zr6A$k$q+*j1B4{8YcJFJj2f$fh`5%D>CEzsnfeh@S&U8R*2W=jtd3^gGZ)D2G0swM zT)nzE$D;)nZORNRHr9B|U@AE&l!z&XGWU8}#R-+2^*OEl5m(kJ8*@Ocd-gy0R>m#bBtKCF_3 z?vN1etxgmv3*XK#4U5GEV~kdt^_wB~ zSL9}vuB>Ic8N~xBTo02~WtX-m8tX8PxEsg1-C3L^77^@sa}eiBmZj16ILjXovqe(> z!;YbYsuH4E*4=>-*gLZx-QfZ#!V1)hgP@jK?ERB&9${D6-<(Seqts$}bqNL9oz2d6 z#W4_YPzdjkzpEPjyTT(er1kCJ-W*qg*95%xj%wp3U{ELWru8xKB&_S!M*<()Eh&8b z(fSwy%yxGlKK?KmJ`_%nO_opb{@|k2$QMcevMl-Eoa(MIEucD&6z>8E;AH7kA{&82 zROGfZ;~N_BRqwi;(bdH~f;Vwc^S;`95UWN|6)4Te(n__T{!h5#1#)bLR z{pPGFs(FK0O|EIVqWX7VuC*eH!B=3!$bmnV0{T+uq2S)OwnW=L39t8j)0|LxDk@F- z)A5;GTZ!(~+4yq$!x41oou7>y+s5A6=zmm%{j?dQ3Grcp_tyGCy;n!ryg>Wfv3ca3 z?mJGAu@>5nV@O}=W^{3G^dW_jFFKTxSsQ*n!nJQmbGQ?uqHrdKft8l3)Glon$&OZG ztgm>Ot`I5oS5Lalhc)m5iw;mHK2dF={;Ort#>)zMHu?1w?qW z#iGaB)Otu;D1W(Y{1u~hethf#j`~GTn{+dOyq^8z?9IR(a<+a_mn8$;&7BA)73F-L z`iH3rJe!5Q3Smj?#Ps z0h#B0)`iRZvkq2AM^HiJE!FYCMA|0nWOq)Ho)!0=UOr~!LT%-~X6y79oE9vXZyy4l zDe&)TA~|rWAE{u1#a^yRRjtxx)f91qbmCI3vDBB4D8JkZfx{Tb`Fb z>41YMC#fJ_E}`QyMYUIqRxeL*_vOTufj5Kmc6V8%Q7MaxleaoNLT(Rj5;UTxDLdqaN+KkNr)zGG&M z4AocTL_~2<<Xnl-| zwh9E&)P;Bj0i@&$fuAQtO{o+rbx(7E(J(qEf|kdB*L^1= zC#K2mVQ`^$pRKENXQROLaL;_yc%vhTA|InFmeLU!<}F^Ho~#9PMX;xzHizK1jyH)h z|2&I&SF?OQq=m)bXw!=7{QLn8xR^doyBZ17G>ZJ`sE9RT%i;1cziLrbZSne@;kq9gKq3(rJ%%hoT=dy@Up4LxXdHRR`zI6U3DAN}!)6ew8MrSWQ|*hT zFsW_fzTqFf+!>!Lu-?tQFi9?Es|RJ56dTsq%hO+p`d?x8O9${F*%WP?f3*y~DwJN? z(99g%9uBZ(YM-rb^D;f+1A8Sb(j(RIZ=tV;xV6AaV=T>&Rf-X-LsOj%gn`jC2=R+9 zpA%(j%;xGU_k0Dhf&-2p@a)3kvV2kDug^f5`)U5;=0X~1a!r@X@yl|#-9VulXtJqR zKtm#S2uy4P*L_Fn0?3~>y~MU*r~=>mkdQ0UrcqR{GMsc>z==?0`2am{w3UNb$D12i zuoDTpZlnPe5@6k=hvbNR=$<|ltC$4hv4+iw2em-Fo09_`=5aI(!vJH5*chm$wPcW2 z6R)mDFD~gddV1cxZAGV$R#+TludZ^cA;+;a>S`=v-fO{9+E?nmb$kuHU)9%JC-!Z+ zhTi^<@nl+F!_B>38VpmKpT@w7TGiZfp)9_8^Wtmu*J1Er=-@zCZEz!X_6Fg^Vz&(q zHpSCq4Nn7#ZB5&$r1qLGTHk=sw&O{)Jw9hxVl@j5`98(`Im0Vto)Hn#?w z!L$4{Ztoy!KJusH|HeUkmC0GQI{%rhm$T<*Nd2Tnv-=ub&^u}l#;HBEj|QV{TA>>o z3S9KwN7_mw$D|REo93%uGp*pvpU$_{_o5Ua!xHgcwNl*tHn0c#hRsD@jANU(Ar<5S zg;HJSSNXixK$<)+Q*<3@H5~WcJetqO{tf%YvG+9lJE@H$YcOi3tthxRQ--#wBM(vI z$jf1MpeB%MbmtHd)P+<7Jjr zZT~god~cEMFaDCw)M`^9sZK76IIC?2S7Y>3A5v#j&m0g{N>2(Y8s%?(7ZY5 zFSgl`&0(iC@12Sp!iL>!>~6=nx4gMA8E;r#xKPHMliz22|J2&nVl0Bgw+<&UXLgpf z!fy^;q>`cPMU>hB)b3blc&B-SUR^F>+xq`7|Ki&GD_z&me<0kXb2NW)GpMDFb$oSl zGCjOH7&-Nbxa6Ag+41;ne0l9S2J=Rz-!8As#&#u}+#g_ecN_wjTZQw1D<2Su<*r?h zu(l?C9l#bvys{A8ZiBWsIU&A^TKwKT`!PN8iE$@&sd$jRtQP6&!G7=HXkz&ymge2J zb@o@!LvANqPW}J%+}ih zAij1_deSRa+67T8+-{g!<2%wQ?xs;IseuUfEAHQ(WTTz=1B)#2U2gCUUB_r>*Oz9^u)NV$pfVd06O_rzebuYGQ&dYyL^MUppnk*VFk3Fw3CzWd z^`a#5_smFj;|oO+@hmGorc(9!RY<7D>Wr(vk9C@?7R$He7Ha`y0D66P*lRuSHAYpHbLQJOz5XJr~dv)bYMicmE;TG1N~HL8A1l8Qd# z)lWcBDv;3%QfV!=nJ`sQkD#)^X_Du&hom)Y4F{@tMwuV=Dy6owL=rHazNBQjY(0c9 zk(a+GD&BgExV`tB;|L!r{nP?@-`uD%m4|TENpxuFKQguPcm{t~oEn(^anBMFORFnrtLyes4M|-8ZQh-F?P{xo=h))|!2) z_5_T#lMe8McZ$O-XVM{GxvCeCGlu1it9LU-J%ALA&%LaYm4^9Ul#b8blny3h)0ukf zhI}R|7d=w0{@IbIds&8dp>-EZyunBX+MDv%7-r3l2TCY08z~ZJY_$V#js>Q9KF*cQ9%<;8ymW5 zHC^ECVzz?ivg2Teg-&0h0MfCPZc0`=Dr1)k#6p|EcvY&7$uiqmRmYzBJds4AULWDx zUH%qXxL=ZGf3Zjw{|XmJ2sc)33AeUgtGL)kgeh8>gbXiDOyEgoP2RqDs#r37Z>?CP z2lw-q6ILuOnW&45$kJs4~^ckkxvT+%;DmV$Ed}4;S)sWhNBMm0MQXj2dQg zS|;E8`i|8H0K~js@ly>ASPBb*asA#8*b(?$U4iMUM?GfQUoPuG&HURcAJecOLmN{( z{kvy>)YdmfdMR|>38Pq(dE4Ia#GN7D;%l&OxRmd&H21`WjFTD)qfWKruE#=F?j}%+ z^dT8wCkWQ&Kt~#g$_y(XLRsA*9+@<@fo$630y(*YGMWuxoL(R9Mc&5=lzUmIRkUa1 z7T96oc*hT>=>UsN(`(v7ZKc^lTCKof>E&Eoj{I292C#Sqe>GG~)0dOm9Yc z`q6S}kfk3xE*y7?>#~mxx-1F|Lgj&SL4aCtk$wh!0hc|IR+eby(@$jvF-b@_jEY+5 zbbVkakLE}_v3H1iX*v9_gwLrs3|PuF{50wQ0|mq@5a9yi=cCF8W^)B{DaX{{Mua>p z&wdmBONT_86DeiH8$2JsCG=l|KOnu)_uh|LXF!jP2j2$M&TuZdyPw@8lljeHn#>2i z+nH)a9EYqr=ObN9V*NhmI1S{Kw#ex>p_k2siGJy(!E74|Q}g8s1w*4Auqi_7)W+$I zDE+6zMH#e%#l=*6*zTFygO;>Mw<7|s(}BY=oJ(%vt3fiHOm!~rgvLi`GPZ6|GH!sC zOd(IME#>KFr`|(Dz2kb~rL4_jJvP-pxF4G7pE`+kO!9fN1=}Ysjx9IRBFt7|LwlHS z$B#$jCvDjd!RBw;N`CBbH_xk=F5pZ?SL?MBZ)m)_s{}NuUF`n&xX*eAI#A9U1(BP- zuk6{r+m>0XpIn7dk8LRyOVFe;Al`tr1RU`>E+T$rD~htx?aQilNiE)`w!yER*qnbo z3vSJ`0WRas>d5=-@OUm1R6&pDw(bbs2=55%B*tx#81=kLNwlj2Xbw{e&Cgf@C!r_4 zBPuzm(PmLk^~g(2o4cgcMLo87rPT*YC=DtOl+@2b{hQ)#q@oA*qwIJ*-f2+SX-t6& zH|sx58XFzO@O=V?A^BH48g)HS;RpCUMYEcRdN$4K9TVk|5wn~lv(_Fn0n^*b)DX8t z{<vIA^NbT;*i>!lKC`lmS2UUfXpZJ-iR+(7qUEu+zfi7`HdR5 z@r5zU_{D%=hun>NKL*q86hx#KPn#SN&m-}8Ht&u5gP9@sdLaQic$wA0!D%0bONNul zRlNc%xZO|{e$vIiBncgLN<<$2#4?!k(**P*8{IM@&2w*7!93j=H~NT``Xg}KpSY@l zw1J(c^H~!=1zD9I3TZSuX^T$!5pJJV_31(tWehwYfHc>X3iC_e=+kBU7GFADfB2Hru}ydu`hS5UAe+}Vz4yAr` z$!Pe04 zGJA!%-RH}Qaznp3o|ke`pGoU-(x6BHL~w3|8?fZ2H@+GTrstsW zh^QdI#&EOPEZ6D2lUEx;P3RW4wxM?y?iL+aPpE4=HxYTtsv_3oE469vJQM4F_u3Xa78k)@D-b>r$$4X@~`?K|&ue5Ze;& z(^TR#m^ErVYjV=!x81toR6kobmn`&|;k&XJwQ=Bjs?wmHR=BooNb7C(TA`^e*7~Wj z#y>m2wnnc?VA<@zn^3d)lzCP0_`2S>H^8?)Vc7soS?9fZ+;3VD+jJr9dMs``jzTi( zpWnhFG6 zbmbNAoxrW?r-~+M+wD>}dF-G&oRHt8f}*VB^fwx>N};%NSG?%j^n178G7WJ^Wy?baAs#s# zx4SY9aRhC4oqW zf6143aE~q@Bxgjmw>X=4WKz3W63V{!;;)4MB$sG1u4p$mP z-qyCrBmb>v%bN1V7c7MFM$(OM;7v44b2j}X$f__Cp#_girJH320E0Mmm}#t1Lc6eP zZdTJy?T*U(42YmMHt>T;)KwN=bdM5>aq$Ng0J!v#lE)?`ByQ{!&7n#H6tF~HwXLs9 zq#6^S>X$BPS}%3aI>g418?xNhF!P53?#bM3533pnCa}n%4J+J3`cnTz#Yg$+TsZE8 z-q`qDOKk>91E@T~i>m-12+EU&@Rg4)j0Jdh}N~=Du7@YCC6=V)F15k+dT>;eXZCUK43VT@WMJ7X#34C zHv4V{Q-Cy)2Oth7Pp7VR4OETG176}wH%BP4y=F(qiE0+&<+QqZ-ohgVyZ!dpYRUBE zMSQ*fvwOXh|F82ZYOZ2B=srEQM4b_iFWx+F1+JE-5_lXU*C=jLki~N0?boFCA&IDM zh+<%zhzF#W{Xhhaddpw%=5waCi(e`}=CGkS#yWdlEVsXL)hh)*SNoUS^|H2wD89#B zNw&&$Z^p8@H5+0v*C^iQ@MD|bS4;U`JFefvzFKV44RI=tKqHXCYwpq;fP=e9MT7hl z101tWUP=ud7c~eI8H+)(>hL<%a8Nc~mZ8NhE-25*#Ymq)FA97#gFnin=jU*5($&lB zu}pk~M&~B0I(_Cru3-Ci@wWXB=z+)e;(w{bB%4P`*yM{eR(~O1$71uFzNb&8W19V4 zE1sUYc+U5y6f$LHDIL||{({Hq6)Wl6PV(FVk|Ib?UQtJ7Ea3W!A*JV8h#s0WtIH@0 z;5ku%aoC#TEIc0SP?szYP%ypCF`#znwO?(rMUvV27!KF)c~23uwhQT=H%@Tg9XyV zctot?qpfUU^}rydUVdGI23{Ctj}|Lvpp{!DX7GNjZtF{eriCE7v7C-z3Q3!l;c9)9-D<1l=@XN! zYt2Cke1Vll4#k;kq07sC1c+tx8$K$JmB^@QV_`n*Ly%M17`pK2NyVZmO=|*;ypUJBcJ1a$pTW~h;UH{1=fApVx^1p_78MJW7dbRmGT^3$! zT|Sq&5)B7&M&G|)k8abq?fy>|=@1Nt_t2}&ukGLI#VzMIk(4er)UI;dDL)g9yaVoW zU)+g^FA@@79qS}|3Sz8;VT-( z%li5E#r0_Tod*tJ#vd7NapOG`Cg6OpnBy)-Lo{db=jG>b7(C=*{P{M=fMIc;Dj3f) zmU?Z8O!;6l1n1W?J2iC#paQ^gAuqQg=Jp+OJxYet-tFM>emERVlXwhwT1SKVAi0fa zvv_=+^yc$k|K@fup6j9!0`zn+z8XvgxQ^a!Kz}vueNQUEya>ShlhI^~I=6J>UIX&! zpm$Y`+_wPiYH&BdsUMkd>$o$_dPCYkME%4C8dS{^du~nKLY#kQYdm9qSh~qGmo;%z z(Xm5$AqS?NI8d%}AByh|`i^O4pFHXDnsnnMG-V6G8n~H{U(4E+@q*oYafF=H#r2x! zv~L%i#Y@SVp%h;DSgsC`xxU-3|GaEBZSM_0k8C(XR_IR!mhFsFekpvK@;&dE zBN8N3r&JZ}Y+uW^z_85azL{BrbmgvhWLos`lqKonSg)%N(`|EgJv%+dZ;O{SZ>XU2 zEW!xgEQic!&QgBSKSd}jRkVu0=Xuq;)q9pmRwoj+2iuq8v5Ht*C0glGs*S=xB+F;V zbn~=YSFpP)XB8)bqY-fUbS*0qM_8u^F-fcUxg<%!~vm&+y%1$Zi!r+s) z)B3n#64~Ew_e)yAmo%rLg6ox*Z1`^rHsJSsCHQW!npiY#@)|1t-B_5cAQL7@v^uhg zb7%GvN*q@U664YJ>R7*fq};MFraSE>r{g+*R|z>r{a41m>3>h~JfbQ<%+v~hrTWks zaJM5`ztMoF_!Nv(Fr0U4t7;y(mw5%VkGr13MB%xJW#zVjh76ON)B> z2Od`9-1Kdg%J9(V&Py1eCG?YFQXX=lm#{65OUvkyUyP33Ha8LRSEYdyl3!d=-id8n z)$BV~Cg}D`jwr^TJsGi^fh1)ZRCWnHU~SIVY0*o`Vpi?S=~abtaV=0TSLx=E6*-B2 z4ppKdApN4RCAIirhz(LWRvFl5cB$-p>C5FX_iMlS&CQjd zOP@za2*P~7*c_g#+|z(c+B5$tj#X`H3tMcg=Bb~pzWZD;GM7h1cB?gBepRjcTsq~r zHR06X@d0Uz2xHgRZ8b+jt@HI|onNIfHzh}DS224lvdwELY?MV&dBMvR;qBt^cZ>1C zh$EhZz86!c9J|pM-Ph0RYQ9w@ofJ&ugED1VP_H0Sn>6N+bIXO+sQ%nh=PzEQunf~# z!eVC%S?9HQQ>la_nmZJ$eDS}k8iI#e*hC<|`@zIl$sK>89&5#|PQ#LjV8qZbE z09B|C8cOj~#?HMkg&s>tp`_y{>c+9$NL%qzKg>jguvZa-sq%w;k~Vn3A3KdkT`Jy6 zIPGTOjxLq4s>U%8?U);Q$Ao$TcJexv=jAk&Zj)U}-D-Rcx#8{0%G~WTF}=YTEGd>` zu#8GgkUX)c8~pdA$aBLvDW0Q;a)E-YAZa<;z8EVK#w+{~g;+vGkEpJHsMsRb#p)?@ z-QxH`)r>xqhhK;@uy)kcpGX@?Ml>3(%Y7-KY4B)OrIs-$@<5eQQ>VaUD(6gvII5h> zZN6q;eBqt)jbxR4GCOON{T9MNnaOMCBRj+{oMRU*9JP|0q(a}o@tFcKKx&6JtK`7Nw`WY{1fl}4+ zvw1={OG%gLab4^_DuUB$8<=x?Oy98}>8c>~t9Ieqp2?Qcd8|{^mB>tY7lE|GJo3J( zQWk-{*^Jet?lp&@BeYc?X++gk!k*TdLhXlgc-RS4jSaKhPoO*W3^i)0|sFaM!EfsE5$pH|LQ-Oj|a zY_U}>ERMQ!u`Li;>Vz0H zB=f;v$@O4t223Li3>Ay64FN3#$o7;xe{V>zhe0hen-9kQcx2cw#lXJkH@WT2{`G%w z`pL}iEkBbDj zoZSBX$aKWYT1hTWMw9EfZ-zkOCO;C~)Lh9zPcjtK=78+Z@25?rEDC7PLD&C03WXd_ zJ4h?Q;o>u>4?V(q?)OH6WIUPP_C^iIH4q6MPHudfVFIgfn3;{bOTm&#*!F@Y^%L!o z%ie5o4x~%i`kn*mk?~|aFk&hl)X&SKJP`vi?y{UH5HNT@Lgpt6gPG`I>m%jls!?H% z=%%$?$m8^;muJA`i~6%8AZ;&PQwwVg9yC}|8g^PzbY$eLwV>g-(urUTmMHA8XNkA} zMg0vkWI3eA6!Un{o1Ovcv*o=rTwVpx?Y6uMYyh27qvee{E-(K-zE0!Wd;=i!wrIi` za`GmP_^_Z2He<`K_Jtv{AW@*5Z>6wh760_aqsoBl!WKOQulKel|D*o^tqj%;4vPt1}Sz zY#KfQ&o-6)k+GstAOn)^5V}!p0mW#>es=8F@201ezHRc?SzH>D{^ah*8GsQP{QExs zb_S%wyZp$~MnnLg(K(Z55EBzMXLnI^%4wJi%?^df*%o%Y@2;<@!_zGSwT6|S3OF9l zK*~eLSuD17I$Y23I_)p`p~9gYv5~fhF8(1$6rt+ohzdaIva|h#OQf^k70?I3J{KzYP8hN6IlU5ttb8<2l1P-ajrF^Z%)LH9N1$6{4J^T8b~|7ztM^KSl^$4{O> zE(2K1WEf%hVep>}XErEk^Br7#sNh`?Kgd=~JU#UP ztUXJ2+qlka-QUqoR~04db+St0B-fd|zBuXhvG8$XCH1LeXDmBuzh8d|k`e()lqh#L z(~K#CAP9mWh{w>?j^na_FjC+hkmrN!ET3^GgNwN0|DM^Gx0z@#{Sx1Mul>TjnvE+7 zR9XN>)T?f!st8)L)cXOy41*SDRZ$uzEB&DJM0yT2?}k2C=QT00a$cQ_gIEnB8@J$` zVkbR82d}D_?pF!Sw&g&qpxX5e+|opLB9oh4P5XI_rO;LcC|33IQ5=pk9({_ z%qE|>WXy5E4i{hoXy4zEYi`&3WYAe)5l$PPM8q=SA7(UYh;I1CRYadn{@ zI4|yan(%1YJ$ICs;`tAZe0<-RA=G!s%aH1(XcGjHSTJJ=7~Y*l`&m;6jF=j9z7L&3 zhP9`mos%Ip6oPg#*my&_r(mhur(@P>NgX4E)NwvlyK%Wu-f~_qruEmyXP|c-Xi_bbm(QgGTZU^#wL(%Q797 zxW&TP0`LbSpdYBdYr}OnDVgz1w&;mrne?HS!Tg!UYLy*qK4Oz2GxKc9@I5~azIoc0`|=5$JXIs(pGC~(ib z(aF*M*;H0Mo=i(mH|zHi`QDz<&ytW^f|Lbc#7v=_mfGa!V;t|mB5 z;c7nE`wWoKvNiN$oB%LoDt-y-J^ZdVe`{jFzw+NEtzg>+5DP3&E6i7P9x}WhK`HEG zRkQ6L@p8Q@1XFFd>s9xMlgG_^x$ORCv{}E}P!9ohIa&>Q5@D05q_(%ScloKLs+M4b z*Cj&ha$K(WIZBZZA0^(R5Ck2q-}PI_H;hb`QHLjuRL(x6XoFc#A?M)b^}X_oK@8QA z#}aynwcgXo{mspFr`Je*wkEG5NR6BOJ8(QXycmxKRk7Fpk z@&h=m`a_A9UeYB8<0guZxNw6D%gW@#A6>>oWDAH6(pNGk^uh5==W1qA6jX#BBbbm@ zMarla5vvjiLxGq4pWSR(=zrY!-PEy#DzDq#I{i?wxvJCOdMGleuzY)RHlEzwe#M)c zLA~RjjHENt^^6LL1HoW{yO}+Ld{e(R;Z zzJVuoAG=Ya+wgj${}|=P<7V-?UF(b{9gH6Yex?gy-D+EbOBY=NM%=4S{848Qm09rk zbqA?%T)t1s5mxiHEkAe2SfAPB;!xEvu96h>RDpyd7%KhMXt5CtZ@y`CC--TTjGXjG zAK50+Yr9bkgYvYyF{~L1LjvD@uz}CH9{TVGZaGK_O%NEf+USI1xE&(H{d*Z_K5yUT=5_lxAN1&`-{6N zjx%-Yns}q}=_y=h26xT8v-|Nh98LFzkV*)r7l(IE7*f!+$b6a7Eyp0*@pFT2%L?3hVO@p-Y??jT!7@wM@VN^5BapiTg!lBs)DaGG72iGC@YK<&y86|P}G%| z0RB0mn7j&Uij%BLE|Um+G6WQ5M#H#WLv1G~tAe*#>IdGuK`C@?f!c|0m@n)ld7;SR zTM4A7LCFx5FSNF^4^DxEN;V69JO2OVB6rlzNZAdyD#0HYd|r7y0&~8gp8YVDI%HIvJjJil&{a_mgwOE+LwB=1(6j zJO^V~c`nE*o+JAu3@~s;tL{Zm(G4{R)4bN~<7Oy+X(J$WU5~370*f!&U2{5_`X@-Di5SJmUYw*g&ey*J36dB zy0Fcb!1jGzqYkhX`t{vf0wA9Rq{>pOzW>oa8p2c+^j8>Ck|iGGTmquO=|++p;*Ah{#x>H(y>`5Qd04E7%p^z6-$GK>j~evs#vyyVk*0Ld`>A|JT&yl< z&#ICjF4j}~mdm*jvHS7+5gtfYss6pq3!55(S=5(T6_dfy%uR@Qab(Z7KPYiIn#X{R zyANY9Uo(dLtA4$KrKz_7jwm&JbZm2|n4y(qdb>b%ggIn%zrH!SnqJ@B zjjyjJSQXp*%G(${FjdtSe#ep<;BXd<4loAm8Ar zkY{Nwiy6;~_QMQ)7G&^Qds`?LxR^-ysfr(t$ zfyW^kxnaex4<^q6756V^ekAh;)PyCM#<{cQ{Yq?-pNGrE^XesEbp{u;V?tin@Cae1 zM!0Fh$JhonY@1)mL-7oAf)jcKMwyVDu{bI(T*H?dm35B-db#3RhItJ;Z2Pgd#`AkZ ze%roJ__)?F(H%)U>Ks;a1E^D~I~_Gb3dCXXTrWTvL3Ie#;jC;!a{^BkyhDabqzDq8 zigRa=et~y!e>uK_IIU)kJcm^G&+TH4>tacJ3D7Jx!`5gQm4O$Aa?ID1yHzdU2M!kX zJ~!F>CZ0UcU1V?gXR`O~;&`Z|SZ(}4PWjM+*TnpoW}UTRlt2?@KZdw znvCzh?$J9?YdE~)kWGdAg+j|%4#k?2#xMh2w%6eAH{%#W|)ot47 zVyHclIuM-K?ah)rxB1g1FMiz4whdWq^(d?3kI z_)LZXFY{SZtGsNvp4+`TI8+RPd--i%$f%M-yk2zBm^TV8Ih{eY)&qw^A+H;#j+awA zIGthE`VsvmZGO`hx=9yLI$IX*TwL7C*|e3e5PK=*a3Sw-=9fn2J)wQ3q< zN(tcgNt;rvt_FQxFXO+(`mf(l-o&r)Rts}$IebEIC(k1a<*70H0rAZ(L8OUdrUEq_hgyi8CLN^ z9DCbFQ~*pT5C^@c4%m#)Vc#a0@$;Cn*U|&(oS1YWk^FjPsEL4+ya!OqRIK_kKdtJ} zH$Tc`2-fG~cUk1(oPY=*=;~~VD#{vt9x}trGYSx?`*etjB(+lt8FZlN$D*j=)p=&| zh*2Mr=6EU?PSy#*qoU~up}#Z4!c$58+Hu>otTx3a-u;1!by38)TWrgG66a{natx&% zwrrDBzU4^XYN97ke3V!mmF4+HmL&EB0UpnG3rUDN1tRq>A%wy8imWPL^K!qU;i^qb zIWh9N;KbT@?d%vxm8LaR=A1Glub5lz^85A$%QC}zUz(gNGI6SXUnJeR(^_nzg-NGy&Ko~8*Si@MX3Eq@M2~=R^%ka z%QTzUB#L?12_Ut4@ngMP&W|f8(0@mQTJ7|bRNr6{wL8L{we5(sa4eOv!KvheCvRl>iM>|a9Jp(ipa+(3rdQ$#+HCQvlU}L! zUY;EG+aF5X1!*&ACJmOx#w84{|Ian6A4@ozaW%6N0E;2_!J9h!kP`|^;l)CUX?LAU zz)DM%ijo$Sy%x3;gsJybQzxFhwpc~U9i=hFjG6hKMv8pU>98+)1>OdW4YDvXu5JF` zYGqqb=c-d^R-y)uYsNB=5NSvq^~M5;-tZXE&OqXvdT-_Az}&^!*~%0J5(7luOU-OU zfMEvuZ?~@yXUmfwdsUEh#cG{TuCHVgF~JvI!No=r1&|+1 z{(85r%9_jZ9lD0Ku3C(Ah9f!}O}?RFBB51Yzs~;IH59CXb8q(gx+Hn-7${cryx7X* zNln?t;Cy_bb0w{*>@DAlOz&@|9S&br_x-4z7LCaxYV%kd8g-7mwVn#;6DJbGu%QE;PxgNYcZKUDc1N-8$++93MP})qpTU(#qpGNl54E!rSp#vjs)PM_seYa zbF|p#)D(EfB!0a>q$R*FMGja&qP*K>!E817#Tx$W4j|Qv*fYEU6A%`bNh1fAxmc`z zqUab}XfflJlT+$fF^Py65VPGZcyCh~2#0}FO`~?PW6y-vadp=OSQN2tsgW8L>5j1>0QIkWX--s$b(86@ec>E-y14HCjFDM83y$TV-N^%#hO@5yp8U-~vc ztOvQ0OW6Hw>J_!6uDD#`;I`-{^Xf8=e1Y?|M{-atyM#aq)fk!GP#bw``od-*ui9`&kR zo=*+pD!6R40Kb99eDY66Us~>1tj`ker*~_Gz209a*m*7}^|bgUSWR)`&1`|*D}q?L zk6q=zwuo$)I$%(qFT`zeqaB7VJegEHnI51e!MaaN?PM0p)XtT@>9Ald6tjNF#X+xi zMp`R54kDwugnp&D;QkOwv04;A$WrxBi@@N9XY|Ad=^_cTN?0Zxqt8?C4YB9RG6zi% z3lFHq8+mgvA&HF+9DJ&-E`iYUp}t4Ez`~F6|Y`%f9JlU7`wF91(2$@{ft( zBk!U5xg*{XCdthtYtl1LWK$!aF^agxr&2CZTS#!N=w|4err>7tt0cO1^rnulZ5iq2l`*M!$}mr7e0iPT~a_{3iK7yIg1k2lPEWMtH;s4~K_Qr2A)?ay6>% zDfkwb#h4nGGtvFm5EK)HVwI1Hn32@`mtMznsaZbdbNmh9(lVa zNc+v!bYxxtPC&80L5)H~j&h#jquidAlYw`KMzCtE%^)m4aJb0wc0InXFq-eP5_o@d z6&|InDRY!C_%tr%ka~OU6h$ZO-?dRsP416@9*M`&sE6R_u ztjqX_HpiaK+*taJoYK|=TFsuHOe_%%f*dJ1d1PrKGwSI_6c83btPWreY45CpuFuEp z@AYOmS0qp?b+0rCMeNqI%C0=qOGB7RIox>`Q={9k4lqQDj%Jy5%gSd_2cK!9wzS5V zv@rKaYMch{l7?a2siw(gewq2=HlNqqs;n4CI_?8Eva<24{^kX(VcFUUPyxju^X3>O z3rA#qi7qHj@a`zw4(3$c(QmFNV+f{G`NgNDwZOV{P2boPA5VkHk)xIsnX#aw9MA2t zBlL%>>)Xr2i)nb|I8IvumZ;6Xf(b$o3bOfE-CZWX#Cy{Q^w;4ro*tz zm|BNZw`EA_GB{2v)NAcH1{Z|8y&E52oJ^Z*KE3Fk8v-P@VA*K#15lvcl&{XXVN1T1{~}FZEvo`1M;IHq)>> z7QMBo*^4BJUi8Vf3=X0PthhF;RRqjvG@?!1+v;S?UGCa~DGzAB#M`XRm6tSyLOm;f zG>yT~7AXgo4%L%K<{}=)kFr+M`ULmRb=s95Rwo)HXR@=>Qg;K|kKm<^}aOP^~M8S_88@qxHUb_{kk`Q#i zKOCTjJU9uO0a&#bF32UZGIz@z;wY-X+`Q`UKm`t@xlwD>wZ_bGX{|QCjJYX{_!42u zTuhXA&Jca$KC4}=FWM(*IL!z3MYfGJC^Mtm2~OUAB4+L=A6sUK$3eE7BrEf`^mRg3 zjg(F2cEgKxu1F|6u2=d<`gFX0d0pl*VDfYa;U{F&(xi1U+csD4cDItrM{8sZ(Dafv zQ&kkoAR){WZVSXUHf5eG0u)R$!@-JPi+FAXTx&@8|6xLz*B;Gf1XFFUy*)!UO9 zQ+iBjvz0~(?~h1p0BT*0A^)82BAs2g{*~3|l6H^K@tRey9?p}|>m2)mmsbfLd&2Ub@LK=t?@c33isGb3MN)LqFP5G?+T3BChazmtSyFoa)Y1SblyFpO30RZSje0!65sU8`}2 zmsU&b-iKq3b7hDaasH6ZU{LY6)8mpS?S+=LFd(wPl;5)>ZEtazDfdHgVtOA5!3cRS zI*_g&c++eU{vR~#rai^Q0>R=m^4|997khI(tFouswn+yP7i@T*6t%50wLvw53PD1esoX8oRV0>-s(HTH~SfW37$$#De6X?LBZl7Vrf z-xKR2NXJ0;fCj=!h5PKr`AuJV$0lzNPY%zg`vXRoldjPn2 zlQGLY(@4LVUW6~BjCbwL#y_NXV7~gk7p7Wf>Ssg0eO!#q2nMAihPQS@7(&(;vG#xZ z9f!1bTxe_857qBCOtV5Zk7m?s(A9vx>^)48IEAm?*_gub0)J=jW9r^|<+?jR)Rd_> z^X28`)Aze-llmX*CgHv2zwy6REBxL07cxmT_p9H{N^@jYyLRz?zV7FKbeviw+Xzki z7X2%lbFIv1^ILzQ*XkbSCWOy34WDo8*?;;l^tH(89pzDE7QWHOCOL{7;A{i4SKdCA zArSEJEMbI9UKfw0lV8dQv&p-9@Q0$&!_8#7Gx+4~>$IVWPS79bv%7E0wPc>xfAQTL zF0kEIYMsC%Vo7TqxD{0tv|&GNupiZ~O1fn}u|QA&NF!u|6D8crjHSU!rGIqY3vU`( zH3>_L=ECsrkySG^2oPaCg$~5$0|S8E-46hmXwJhlWZrxi$97F--Mh@1Mr(ZOp>C1g za>G)0yB$059fm7wqzVrkkkr`)1xS4J!YURKh4Ikeam4Jare z*Y5oQ-8W1fJa?^V`$$jv;~gt#KnjKX*kj;<`bxUTvGD0YX~jshG3`KM!#B8a*Uwkm z>bpRfa66~eJV9(yG3ATfg(0CJ>B_i2pXKjjcL$D2@U}n3VCongJ%m%-3>&#JlLErU zi96Yi;ZzI+UJncW(NF1xaoOO`q)`PHAyQ)S>J|BZ+lk)+JO$1B*G-EI{G{AnkFm%S zteK{6ImR;?uojH0H5o}|xC|qVb+5*rAqnE_XEYdT%V~k+ zB!60`A|zuZaxWAZV%%TP*UkD#iFQpx+&{a~O#^x$`Cwo&#*ILTLDhgjcQ+a+(9%7P z5on7$AnI<);sm(RAJ|AafT7&e^95H}1(v_kx4kiH4%S&&_mIjkM4}E^YhDsI9if*J zfrXN~#VC(#WH8UxBgb z&nn`+4%p1@N*z^FL6xN8c~TY&qJ?ma3-@`Hej<9*-Hmk#7IvbXv}ZLLRb;rOU~aL= zcV>X^#QnLGcnFo%xZ_>W-GCjhiaQx>9vOA7$C!W2zUe^$ z|Bzl3XrzUNSVb~78)f4$Xl2coEzW$9Adr@<1B`=%cuWugACL9yX$6@5N&x@eiBSi^ zWWpUjOYEYTapQ$yapJ>x%+jr(M7rCd4n&wiUL{+k$__+g&MK!Tf zde@u$1=kG5TKYndofvC{2cFFB53D(jl7$k;B-k#_^XhkhL*PQ2-C`$(6tF?mwl^^V zI;#1gml&hHn3)l>@8cYdOPkS(&s1g z+DguLBxiV@TCw$Xl>NY*vfWWmnPS$KxQCq}89cSD9K*?OlHY*6;KR{)(eWGP>lBrZ z_{ApyAjEvwGL#V=aH-;;e}@iDx>;t7gk;{Trrd=L&PayZso!IPgNzlE?q*atNHLu) z++$DS3M8+Tad#t&t1WDRuFt^-^X$5vyI&-=k(+UbvdGb3qDrN>Ma^Xh^2aamA?NOWxwP2u(5kq^!S4Yt~l7`F^G3&+vzeDk`YKw z->h0~Y1@fL!^CQz@hv%VW!%<-6_hhq1SQ&K3*$*Uv08;p&JXvF-wj+Mt8li6vvLQW zf@($acjMla;;f;#n^5A;GhNI5cc8GF5ay0bF|Bs22Yctg9G;ZYR8gQQt+$k)CS``I znde^tT>rTeRbGke_pU5i#HVs0PsJ>k$a3S}6$_a{A>;0@l!BEA{C0YNeBh@0r=54m z{X3bkXnojQhKA6H265@jeH8~SvPU6%D$-7iB@SUF*8PgFBYFa%`c}5>k79{o2vS|9 z7uyYuIwIWb;)Mw=%-wl%;)YKPSfQRV;%>WwXi*TA`=?ke%w&4%0-d*BCV=O z_^4QXQDLh6{?`s3+Q9F$PS6*M1x2wi?krx|KlBO&((d140%M)BsvkE zl$snL?!6DQ`2MLu0j&Q8y+&Wf!I zdJ6%(62wR@Q%nLhnRa?%vzjCnftXXQ)rO5bbl8EFDHlpJ)52%Ubu_X)02Qh z`UEs+I4UC5?o%-~81+;;hiTjV#~DqJ}?~3 zCaVjj3vm={jvS2hbr`Bt0mn(PuS2`Y#U=2 zug(wqB4vfBRG#3MV&95pxN>+GIeSL^)8EZ-ZRx6*sJFdc*M^@rPjy4@7wg|HgRcvB zUCdhCn$r6INl}cVPzVWGd(6Qb2LWK&bgL=dAlk|P`RT>l9;L5AzM#byAz#pLWV7XhQPU> zVe&RpN#iDm1;W>3lnaEnaqAAG5$f zbdNV}?IXQpaMYwlsa{q)RjN=gMTuSt-)g%U=aczgyTuev#WWv-X=H(T8K!)+1qw~! zj|*0RRZ@dfAq@v9CSQ8sXO5^lg8aDB?ZHxMdff`}2LoNpM?(hAPuq27JwvU)XxI>F ze=($3LM%>{$wnWY#MxL0@rG$c{aGaZ_4}t6bKhfleluc`_Q=+U%xx_IHB8n#gQt_E zW^FX(2Z;J^Od$awX=#)!RIw2;(&fYL?5<4DdV4WgfxSfN2 zshtG%F=Py;6fiAiA{*hD_kGv?ouUc_40;SxsX$a&9#vkBA>W9j%itjz;W2r5M#vT$ zj_ctVQ)xFFx6^{Syo=_dEnW zk0yCSh;l-RZ3PissInP&csdkZ|L4u^-TW%N(RwtE>I&K-CniiA*+eEg+_I_Y-PUjP zG^=Yn)y2~}Os|81Ob>1mmv(3hbDP3T%qx6(eEi%rNF}S%6%Lte~=-C>%V4mCvC zC#D3s!uZqe=gO}A`7~cX?$>{VwG_p*#Hu{u2)@M-IO(p(}3Ps_)}x9Poq;`gx{`>hJK zZ`bd4x5%G9J+{AlMgHsI_Hll>X#U$_ghECr>t?0$i06s^*|F=00{|n=K?-S-*~W2R zLY9NYU-zy1I!>(=SFKs>H>?KA%8jwFHdQ9^CCgf_THZg1Gc>J?V$(1a_V}A$j3m2Y zX<{YpGAt=Tvk0k8$O_OT*eA&h#jqO;lL8nf`tJK$1wOdi0*(_1?2sLD?djROVGktB zppQ_rP!tSv*h-mDE*T*L(LkLf8QtFr8+WMo{$WgNh`hLR*U7|ut`nMqxPTe=F|`QB zSrWn!rhD(&KrF$VfHKX;pJHkwc+k~a$zh3z2?WEsVVI4vw!i&YL_{@;h}FJo@$_&#Kbu{DJ$qPuewZ(p4Ja8h9sXGF=jN8;fBANmG7Kxl!@ksq?7O6akE7f zMZ?umzep2`r79u>ZG}!mXs{49`qpK)DNxX!Tcm4GLo^Cas4KdXkk`Rr#{%u!i0&w6 z4+k2vHHt^m6n}UJOqk7@%+=8*Zdq(;xSr*gVGSNn_WCi4S(-ZxuxPqnH9!IPO zCJ~jtuP4+%^ld?KxydK=jJ6RRKnlWK>OHQpl1vaiz1fS2hV74sS+DP^4zU2{tm^7V zvOq^L3RsNLRuiR72h3jtpXG4OMd? zctEkh3R1pab^s5Kpft@^j)v?N@Q#>Xdj;ULI-50UDwS`!e7tq6|J*dP=u6p(ONu^b8=asZXgugfT&9(=;DH8W1f?fS)Gs z8;w?xgrQp^?puCp`6Cwn7e{L}`l?bZ)<9 zRJbt7q=LJs%C7p-e3}%*e7FU`3s6?%N(-YE#>C<;4)1^5J}mCrhj9CNTm*IRvz;GC z%nc>Pd7eb6ENfRn@?j)tEiEYaO-(jxa&~@taJBERbZj%LLF_4Wn6*%Gn{ z)e_RaIG=yM&DZQjYYyxW4V)vX#!2sDT{xdnG=1t*^r=WG2mM0d+{iB!O>6a{^1_E# z?zh8>OGmevt|wO)&zP>->1>PXnojo4+{x*AWm5LG1VIzO#>MH?dW~)1P&QtJ=FD3X zkP`EjoXjQ{dv0qYDCzkC({lkIrcV_cF5kh6f<|%oN7~VfG2V4`OxQ7TXAg_N|A{wH z9E`J7u@wzdZ~~ZJ8y(fa@DL|q`r76SOobXouRZ|H?`oqho`n5F+x~fz8)b_L*waWJ zQ!0_~l8_Hl++9EK`;fYjEMr!)5W%Kb#>e^|27hLHb$(n4&;7hU7t=(}GgdqWWF{2d>I0kq64^Te87dWvP^X?P4=G1k5z#tZQ5G!)NiH{p9B8-d zspYOj1kjfR%Q*V!3zi&{3ChQ{ac%@VXILGb4kz~Em`qW*6Jnu)V>X3e;>Fwfkf(q} zBP}vrOH~4wE`{r0em8%d7lRfh?xfxVG)YQ9J9{c7nT(Q=ifkD7EbkSzXR_KK_?6Ju z79+A)mNP#(0g-kbCK5YwSxs}8$g=qD@Zn*Re10p1k9>vq3)?37)UdYbF!rS2YqeOr ziUErUrbE~9rg_9?MC3LF!Z6*!@GXHgwCHskY8cO)tApSVg<{^oJ<^7ZWc>(lCO zjOc;o_JF`Q*0t%X-GR5;MOa0K=Ru&g$LHnZ{^e2ie}{MTZ*`fVo)g_8o_F z9In?2dISR~4pcVFk&{GoNJjg;Lk^i@CqXd;9M^WoO`D_WiQyLrWQnBwS*&a;O+x z4rvZt6}D|lg|6bfT`umCU(vxyEs#kd$UQunPCyLKZ2Uvu zWDAATxBzt@(*)2oOMs|ZM%rqfe*B{f7SqR;6saKyP(!-epn)-{&#J^E8Pr(SSb*#d zG%Bjr@vNCNXtR_aiW2+`G^}b1GilIjsoG2?xk|EJJ^eoNlq5QMmSN-LIVd*e`C=Z4 zGx`UWYw6;j2G2@k1>*U9`E>V~S0IC5)GQL1-th*<(=3FnTwj)37!E8lkYP*c39SYV zhlvb_-9p6BaQItW8A8Y`Ay#qh!F+lBaQoeFBM%-ILmFaHz_lr`3>FdAHVd!FGwyEo z&-}snf7lEHC2&E7yj9k52?!izdk<=04n%5-^xS@uA-&^=gl8ghDFGSs9exsZAN!(2 z0V-XY*z2-|G5lQdYja_YeQjclhL5ve#KZel#Pz`dglO91teQVE>s2#aYBGKW;c0%{W}_aMvulbnwH7lY!Xkmq*klH)ynY+ z$T=fvGE0M;GqF43UVM|-7#g?Dl z!UGzlsxd9uXA>hqpD?GXBf%;2` zEgM()<&-+m46PAo{og%dt}C=M-R9BSjCH0fG*+x@9(In=tS}<#ms(Ii?u>|bs$>4^ z^de9r)qDQ1GbU=J+F!rl`2h83?M&Yl+LW3B<#kp0r^!iINC#{D%`^n=m9_qM8UmHQ zmD2_VL|+1g+A4RNSc^z-KWrCV9ufQq$&h=T^Q(T;%ON{jK5g(o1U^8Bt-(W6@Nr&9 zNGJXGoJj*jAzL@E+F033^h!wu(ID(}1<~-HGbe>Q_;@lqnVruLk7pN0Z}veU58i*+ zyoB?)6jV=F&5Q$!gV)FJ&&K=0A|!JKd)oZ3ss3Ee*AJ_`I#z~X()R-!uBuTkM(nu( z3vbqfwEv&TNl3V_ElhJGj>7M(ls4x-9~X2sWiKj%9YlqvrA#UWBAJ7e_owd;kN1F; z>|l0s_F;Bk4=O0gx-W`6}2ZKF$ zSIdh(58oY)^OhzsRA~EK$_YBLvB0|5hT=n`nPv9~T{|>!Y(8{NmpA(a;#}gz0wL^V z1YdKo6~eQjrDV`tAOf8wgC&#U@cKI3l`o}4lFKmQB$BKQUg1)@&`kj?7$T7VdfMu> z2*C)GWDX&Cj^36o$~Qs9z#A`dbPRY+R=y+%V$;YB_>i{a(IK=S=BuZ4OCq^y-^*^d zz>X^Txharh`5&*K-@kq&o0jMr6 zGZA7j5XrWN2xLK|x@tH+Zy@Mr-L6FIZccVwCXg?g**&8Yl@yo$8v!SBF4H@e6Wy{tIC#xUWnSw4X$4gDZbWm=_B8_*zkRUN{O82A%CHb|f(>}kbzTN( zN|9bDfrTzNw-ugj(drG@WQ77*sAka#n#g+OW_F@;l_bQ8<`p1lc~@`xPXeKIB8+Asw_Abu90j#20{fT z1i@lfC|pJMRVbBbqfgDQHFjX14OWYr@TAM{{|zJkkyIbJxFQ?P-Er8gx#tAf&M|*G z0JDDB{HgoH_@3p10Gp!IuDWG+sMbOa*gu}my6M*Ijg{o0vW9TyO;r}GV5kA5pSUFA zV8IZNY0KFR-_x=2J)Q8Ebe8=^1)L5(cN5p78uh)Z4WJ*tzniaX5xUCla2Q_zb~}2L zX99_gNL<^5D&SUYWZ!cs0xB7{zXh~VY+qei_gH6hBSQH)ALg_G8(xh0`2 zR%=w{Qs!)S$EGQLzWDxlH(xJ4%x{%`VzG0+ArED@E|mHPT&D0(p4zrFK*(XBIbKI>HIW`#7~7Ze3Y;dgSf zpGz@Na;l??HwS;cKRtfq&yU`HI6gcdZ&0MhV;qYgSBu7d+(tUWP3NQb-^LLNGQu~D zn|bXJeZ0S#Ki_^?cewvIzrViQmg(;H%TNF1;olI#2_<;XeKfoOQX&b${V}|LX>$*p zDNS1RdiC@5{O&H9&kV-H>)^GWxfmZ$k;ZGIe#@%`j7fH$db7jJ>{j@z{_lAAw0lQx zcbo`-mr*UB>x=EIM~hD#|Y=rZc{iv`sb^2&5X7U-qI*J!3$@ znE&plrd;9>hbcOkV!YCRfm{wm)7C%aXVB>yEqmLkV6()~cE+yg;d+JtKJbNs{j0Y9 zVUtlDjH1$R?2#iJ>K#_99@eWT-}B8XYj zCf4Y02_OPNcxjtk$SVe#?6h)$7%f-zvGVuh)%D?PhhJO&JbocG%-!JJ^<;xINGJsK z+&_%J>UUPJ{rdTCaovB@5AqrTiSnzxkXS@w{JKXrcpF58sNL0GgGd}i_(uXeXdGAh zF9Z;YAj01erh4>aarL}@SZ$3k#8x3cIe$r*0LKZi{!>a2^bcfcx^s_bJ2)an-gef1 z+iMdPjxPP*J@ZiEf}Qhsdktc65bd8b(W|g9i({Hhqrh6Zu`-h}^E3-;%2KSy%YPQ3 zfdA=y{`76YECtCd8!1G6Dp^CFy4HB?WavspSqm>*OLDpU)XcNWuUlkq@ z#fhs@g{unB`QIJ>Ghg1#FPC@A^-o+=H{+cpqVduwOxl_Z9vh{JYtn^l`gk8)>rnno zTMU>$$`mXH*-lyFVnpF$VhQsu&y6n$Tqh;yOVVgpC`nwBEL>7t!e^3o{*qwcASy~Q zuMZe$qz}$dXNSlB@YCV!_%QU#-UEp`_;7UcW_I$YpPhV~o$rOi930O+9r?5K!}GI! z;O)W3lhdQaH~!@4uLi;AQVec7sy7ZS56+HGKOLR=lUI`AB>(4mz0P*=cGcK*a&9|va?5sHk=dI! zi6CGQ`QSFYW~r?CV^;r{A^;bUYYKvk6rKa!)HHm5LF4q9jW@sT_O}^m1w%I&@dK_1FF1(YNAeC-Ugf@Z~#Q@3gD%ca@XTh9HPf>FBOzjS{WpvD&xn{Haii!u`KJ zevBE$fLi-&Dq>S1V&Q-E+@CPrCiLG5d9=L*4%)P@92?YWyhsh*#A;G^l^O%1o;^Q4 z-YwHn@$#q1*;V~fIgZ-Zyip(}LT2xs_aOyBc6ZzE45AjYUbTW= z_<{lAvpFgT5&|C49ANrH$AkVVx`zR=^w%YbFAxs|-#PR1UpGOxV8;1WElywPG66aX={U0XI^`iL=xw|N|RVx|~bWWrzf+Pqo}|88EwO$S8tkyRNT zlsR4)$F2qZXl1dmd1vP7YPDG0KW&fLreEq=^KUs$uq@5eOjR}Pmqj|xNECrluOG^noy+H+2AsZ3BAF>TqH@A85ACJ1K6HI@ z;!d$@C^yQqg)b`qWj9T$W&DD5`M3l}1z$8rr2mCN96ZZ0EVLPh%aqZ>3%e^P#443# zx;Mh52!#1soIqz140Or!JGHZ>3RI4qaBISvV4K^kdcO_)8&VvoCY7K68mfUeriEWl zBh7F+kU$B-wk8}0{;RG+1>=duNM=ePjNLKBUAUjekmgZUZ$Nl7;*6MDy7|ZA-1FZN~0y2p9n&!7f9n_G^De z91*Kb04O}BkBB8AHvT@FbT<+|XW93gg|!GM5U_b@jkp&K_d;&#KgQ2UTp5lSS|yN2 z6gZ;xD>B1DM*|}_hH|<~7N^8E-V;qpL>w9k>HJN;)j%Kw@44vm!%IVVQBrUhV6Wy<$Uo<6JQtGqIwQi7X+4BnLvElPhvLie%UKUD)O? zn~O|mi@VLsW$|*^^vI&8!rZ~rVvA{UJ>fB>1nX))M0}DsRj!7^Cz?*vci}A;i91{UHK&bG`n345t zqV%f}2iPK^F7Gyn1K}i&oq1(0j;wM|HBXf~$hh9J2-z-<(%M~=l(8CkVm%a#?1F)hN>oI3J##^QKH)KEz zT}j@rI<*|5aI)Rk<@)#M`{noL@7GVu-*4tm>*oAiZX$9|ZD_7vzsETg!G;xP>#40R z-LBi`)gr5eA(v@+<$nx_f6k*w6}9%f+QkA{Kg*o|w`hl@0bnzc`AmaM9I~c1wr-|M zO?0Ro-1Q!#{vSAU)QR;W^OuEj63&ri-E(lsCo<;p>IwQUzbL20F_-B`h3q{9V3pZ= z?N?>ntzhA*O$ny^f)kYfKLfOZ2iRrRR!&f703wC)>6iF=1|IrP&a~tsg#+2J|r&?B!sDd|bCkmKamc)B1SMGLc=h?Cef%v=u)A}0871C}3r;aa<{ z=PZDpsl66lhOXRh(;P{q}w8n5%yDk1_$rKP1ODDjtu9LNq;jWaU^Vh z(C*>j>S_L-7``6r^uYv7_)y>kV3NZ@f{6P{yu?E7_2A?AX+4;HS(uv*?d5fjK3 z+f_+!`~!6@7GuZO7SxPbC{qb_oX=!HiGX5rq38nEqH!(G|4k+WM?mGjlL0FP6#g4| zDHyn{?Yf^-2OGUz$yEOmpvC53QdE9b=nXqu5i7W<@nBt$MI;YvzX z+6L3d^Y!9soe4}ZuA{BZHZib*m=W08Vz5~jhcGeIYSOn(b-e~#MTlYiF#WElS?aBT z$theLGEa?mCz{#hNC4m+mS? zTWekUow{pD4XBm=YacNVY&B6f2jV2VR{8A9Ck~g2OEIQ@pUq;9qW-J@QD*7bq(IlS zy@=wT9Y3TyhIPe``M>j@D=f@()lM_E9gaxKi>=C)fYw^1E0Aykap2Li+<%!I6c=T; zr7b7~a8geB=RQ|pv4C}3?*W>{*MI!}aKCdtPiu{KTpzV{x+93qxXcCZgaE%nqrPf? zXm)N@b+jZobSmx?DWLMw$1>5$2*y!4tjjWC514r>)+Rl=Fg*<3{VfXt8_OM zPzUWJ3gdUsG{SOQn#97e?@)J8#V`aTsxJABp*6g5D1^TxdRSKAnGo7v63gf<$0ILV zfkH8uv2unr@m!k0EKq2RTy>j}$hHD?yRZd50aofT<1eWLqF@rnUlA`|SgfH72jph_ zfT)54vgyTFo}1NR@X4X56XP~Uwm4&Dr$$4>N)|Sn;x-(5X~=89wCh1egw9$)*b zqTK^kt=OP8#|VMyHaOAdj=>DnHtj&%XvYDzIrjy#hu{ePGA475;hst5ms38W+vX#- zyWAv2N(8E_9Ku^NdpRa?sv=w9t}FuLh|+GH!WsOIE0V^4>;2AAK1%1m({z?&sIw&7 z=&TF)9mS{AIq|6r&&#%~YaT8&?O{KFSu9Iy5;T~_(iGa%8in1aiiIY760NCJ&VR3| z8Qn6}gNejcvcF#zWg`3`kAV9z?XHl9YTeT z#!C0sRq`NQvdA^;8U-~;C)k{L#7<07_S<8+3a^ezkukP1vk?b>%~$uCCsSor;)s8k zhj7RIF7R4-Zo61u81M*mrx~fhaOOk!xC|JqJ0w#F!)WkAI>($09 zPOS(uU$ibL$8d;wk=S#a_nG0~h